http://linus.bkbits.net/linux-2.5
rth@twiddle.net[torvalds]|ChangeSet|20040516002910|25982 rth
# This is a BitKeeper generated diff -Nru style patch.
#
# fs/sysfs/dir.c
#   2004/10/06 22:17:22-07:00 maneesh@in.ibm.com +14 -5
#   sysfs_rename_dir-cleanup
# 
# net/core/dev.c
#   2004/05/14 15:44:03-07:00 greg@kroah.com +0 -0
#   Auto merged
# 
# net/core/dev.c
#   2004/10/06 22:05:11-07:00 maneesh@in.ibm.com +10 -6
#   sysfs_rename_dir-cleanup
# 
# lib/kobject.c
#   2004/10/06 22:05:11-07:00 maneesh@in.ibm.com +7 -3
#   sysfs_rename_dir-cleanup
# 
# include/linux/sysfs.h
#   2004/10/06 22:05:11-07:00 maneesh@in.ibm.com +1 -1
#   sysfs_rename_dir-cleanup
# 
# include/linux/kobject.h
#   2004/10/06 22:05:11-07:00 maneesh@in.ibm.com +1 -1
#   sysfs_rename_dir-cleanup
# 
# drivers/base/class.c
#   2004/10/06 22:05:11-07:00 maneesh@in.ibm.com +4 -2
#   sysfs_rename_dir-cleanup
# 
# ChangeSet
#   2004/05/15 17:29:10-07:00 rth@twiddle.net 
#   [PATCH] alpha: fix GP-load symbol linkage
#   
#   From: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
#   
#   This skips the GP-loading function prologue (two instructions: 8 bytes)
#   on BRSGP linkage correctly, fixing an oops on alpha while loading the
#   aic7xxx driver.
# 
# include/asm-alpha/elf.h
#   2004/05/15 14:07:18-07:00 rth@twiddle.net +5 -0
#   alpha: fix GP-load symbol linkage
# 
# arch/alpha/kernel/module.c
#   2004/05/15 14:05:57-07:00 rth@twiddle.net +4 -0
#   alpha: fix GP-load symbol linkage
# 
# ChangeSet
#   2004/05/15 17:11:18-07:00 torvalds@evo.osdl.org 
#   We need to use "memset_io()" when accessing PCI
#   mapped memory.
#   
#   A regular "memset()" may be using cache control
#   instructions etc, which is not appropriate for
#   memory-mapped IO.
#   
#   This also fixes a warning.
# 
# drivers/video/aty/radeon_base.c
#   2004/05/15 17:09:02-07:00 torvalds@evo.osdl.org +1 -1
#   We need to use "memset_io()" when accessing PCI
#   mapped memory.
#   
#   A regular "memset()" may be using cache control
#   instructions etc, which is not appropriate for
#   memory-mapped IO.
#   
#   This also fixes a warning.
# 
# ChangeSet
#   2004/05/15 16:31:31-07:00 torvalds@ppc970.osdl.org 
#   Merge bk://bk.arm.linux.org.uk/linux-2.6-rmk
#   into ppc970.osdl.org:/home/torvalds/v2.6/linux
# 
# include/linux/pci_ids.h
#   2004/05/15 16:31:28-07:00 torvalds@ppc970.osdl.org +0 -0
#   Auto merged
# 
# include/asm-arm/arch-pxa/pxa-regs.h
#   2004/05/15 16:31:28-07:00 torvalds@ppc970.osdl.org +0 -0
#   Auto merged
# 
# drivers/video/fbmem.c
#   2004/05/15 16:31:28-07:00 torvalds@ppc970.osdl.org +0 -0
#   Auto merged
# 
# drivers/video/Makefile
#   2004/05/15 16:31:28-07:00 torvalds@ppc970.osdl.org +0 -0
#   Auto merged
# 
# drivers/video/Kconfig
#   2004/05/15 16:31:27-07:00 torvalds@ppc970.osdl.org +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/05/15 16:20:21-07:00 jack@ucw.cz 
#   [PATCH] Quota fix 2
#   
#   This fixes the problem with recursion into filesystem when inode of
#   quota file needs a page + some other allocation problems.  I hope I got
#   the GFP mask setting right..
# 
# fs/quota_v2.c
#   2004/05/14 06:14:28-07:00 jack@ucw.cz +1 -1
#   Quota fix 2
# 
# fs/dquot.c
#   2004/05/14 06:19:38-07:00 jack@ucw.cz +6 -2
#   Quota fix 2
# 
# ChangeSet
#   2004/05/15 14:36:08-04:00 jgarzik@redhat.com 
#   [libata] minor stuff
#   
#   * now that ATAPI is close to working, making ATAPI DMA interrupts
#     in ata_host_intr
#   * remove unnecessary space character in printk() output (oh, the horror)
# 
# drivers/scsi/libata-core.c
#   2004/05/15 14:36:03-04:00 jgarzik@redhat.com +2 -1
#   [libata] minor stuff
#   
#   * now that ATAPI is close to working, making ATAPI DMA interrupts
#     in ata_host_intr
#   * remove unnecessary space character in printk() output (oh, the horror)
# 
# ChangeSet
#   2004/05/15 11:13:22-07:00 torvalds@ppc970.osdl.org 
#   Fix gidsetsize == 0 for real this time.
#   
#   We need to always allocate at least one indirect block
#   pointer, since we always fill out blocks[0] even if
#   we don't have any groups.
# 
# kernel/sys.c
#   2004/05/15 11:13:16-07:00 torvalds@ppc970.osdl.org +3 -2
#   Fix gidsetsize == 0 for real this time.
#   
#   We need to always allocate at least one indirect block
#   pointer, since we always fill out blocks[0] even if
#   we don't have any groups.
# 
# ChangeSet
#   2004/05/15 11:08:29-07:00 B.Zolnierkiewicz@elka.pw.edu.pl 
#   [PATCH] remove bogus drivers/ide/pci/cmd640.h
#   
#   Trivia.
#   
#   CMD640 driver doesn't use generic IDE PCI code (it doesn't even include
#   this header).
# 
# BitKeeper/deleted/.del-cmd640.h~2fe49fb5c5f79721
#   2004/05/15 11:08:24-07:00 B.Zolnierkiewicz@elka.pw.edu.pl +0 -0
#   Delete: drivers/ide/pci/cmd640.h
# 
# ChangeSet
#   2004/05/15 11:01:48-07:00 B.Zolnierkiewicz@elka.pw.edu.pl 
#   [PATCH] ide-disk.c: more write cache fixes
#   
#   - many Maxtor disks incorrectly claim CACHE FLUSH EXT command support,
#     fix it by checking both CACHE FLUSH EXT command and LBA48 support
#     (thanks to Eric D. Mudama for help in fixing this)
#   
#   - write_cache() was called with 'drive->id->cfs_enable_2 & 0x3000' as 'int arg'
#     argument which was always truncated to zero due to 'u8 drive->wcache = arg'
#     assignment so write cache was indeed enabled but drive->wcache was zero
#     (thanks to Rene Herman for help in debugging this)
#   
#   - flush cache in idedisk_start_power_step() only if ATA-6 CACHE FLUSH (EXT)
#     bits are present in disk's identify data (prevents sending unknown commands)
#   
#   - set drive->wcache in idedisk_setup() not idedisk_attach() (no need to check
#     id->command_set_2 - we check id->cfs_enable_2 instead in write_cache() call)
#   
#   - use ide_cacheflush_p() in idedisk_setup()
#   
#   - minor cleanups
# 
# drivers/ide/ide-disk.c
#   2004/05/13 11:30:35-07:00 B.Zolnierkiewicz@elka.pw.edu.pl +27 -43
#   ide-disk.c: more write cache fixes
# 
# ChangeSet
#   2004/05/15 10:41:14-07:00 ak@muc.de 
#   [PATCH] Handle empty nodes in sysfs on x86-64
#   
#   This code is shared between i386 and x86-64, and x86-64 needs to check
#   for empty nodes here.  Otherwise you can get oopses at boot in some
#   circumstances. 
#   
#   This handles empty nodes != 0; empty node zero are still broken in other
#   ways.
# 
# include/asm-i386/cpu.h
#   2004/05/15 06:32:28-07:00 ak@muc.de +5 -1
#   Handle empty nodes in sysfs on x86-64
# 
# ChangeSet
#   2004/05/15 10:41:03-07:00 ak@muc.de 
#   [PATCH] x86-64: fix /dev/mem caching behaviour
#   
#   This changes the /dev/mem caching behaviour on x86-64 to be compatible
#   with i386.
#   
#   By default everything is set cached.
#   
#   This actually makes WC MTRRs on AMD systems work, which would get
#   overriden by the UC PAT bits that were set earlier.  This can make DVD
#   decoding with hardware support a lot faster. 
#   
#   It also supports O_SYNC now, like i386, although that is not really
#   safe, because it allows the user to create undefined cache attribute
#   conflicts that can corrupt caches in some circumstances.  I kept it for
#   now.  Better would to disallow it, until Terrence Ripperda's PAT
#   framework is getting merged, that can avoid these problems. 
#   
#   Actually it would be probably a good idea to add a printk here to catch
#   broken programs for i386 and x86-64, but that is for another patch.
# 
# drivers/char/mem.c
#   2004/05/15 06:32:28-07:00 ak@muc.de +13 -0
#   x86-64: fix /dev/mem caching behaviour
# 
# ChangeSet
#   2004/05/15 10:40:53-07:00 ak@muc.de 
#   [PATCH] x86-64 updates
#   
#   Various accumulated x86-64 patches and bug fixes.
#   
#   It fixes one nasty bug that has been there since NX is used by 
#   default in the kernel. With heavy AGP memory allocation it would
#   set NX on parts of the kernel mapping in some corner cases, which gave
#   endless crash loops. Thanks goes to some wizards in AMD debug labs
#   for getting a trace out of this.
#   
#   Also various other fixes. This patches only changes x86-64 specific
#   files, i have some changes outside too that I am sending separately.
#   
#    - Fix help test for CONFIG_NUMA
#    - Don't enable SMT nice on CMP
#    - Move HT and MWAIT checks up to generic code
#    - Update defconfig
#    - Remove duplicated includes (Arthur Othieno)
#    - Set up GSI entry for ACPI SCI correctly (from i386)
#    - Fix some comments
#    - Fix threadinfo printing in oopses
#    - Set task alignment to 16 bytes
#    - Handle NX bit for code pages correctly in change_page_attr()
#    - Use generic nops for non amd specific kernel
#    - Add __KERNEL__ checks in unistd.h (David Lee)
# 
# include/asm-x86_64/unistd.h
#   2004/05/15 06:32:28-07:00 ak@muc.de +1 -1
#   x86-64 updates
# 
# include/asm-x86_64/processor.h
#   2004/05/15 06:32:28-07:00 ak@muc.de +24 -4
#   x86-64 updates
# 
# arch/x86_64/mm/pageattr.c
#   2004/05/15 06:41:06-07:00 ak@muc.de +22 -15
#   x86-64 updates
# 
# arch/x86_64/kernel/traps.c
#   2004/05/15 06:32:27-07:00 ak@muc.de +2 -2
#   x86-64 updates
# 
# arch/x86_64/kernel/setup.c
#   2004/05/15 06:32:27-07:00 ak@muc.de +7 -5
#   x86-64 updates
# 
# arch/x86_64/kernel/reboot.c
#   2004/05/15 06:32:27-07:00 ak@muc.de +2 -2
#   x86-64 updates
# 
# arch/x86_64/kernel/pci-gart.c
#   2004/05/15 06:32:27-07:00 ak@muc.de +0 -1
#   x86-64 updates
# 
# arch/x86_64/kernel/mpparse.c
#   2004/05/15 06:32:27-07:00 ak@muc.de +4 -1
#   x86-64 updates
# 
# arch/x86_64/kernel/domain.c
#   2004/05/15 06:40:13-07:00 ak@muc.de +4 -0
#   x86-64 updates
# 
# arch/x86_64/ia32/ptrace32.c
#   2004/05/15 06:32:26-07:00 ak@muc.de +1 -2
#   x86-64 updates
# 
# arch/x86_64/defconfig
#   2004/05/15 06:33:33-07:00 ak@muc.de +137 -40
#   x86-64 updates
# 
# arch/x86_64/Kconfig
#   2004/05/15 06:32:23-07:00 ak@muc.de +3 -4
#   x86-64 updates
# 
# ChangeSet
#   2004/05/15 10:38:09-07:00 torvalds@ppc970.osdl.org 
#   Fix bogus debug code in usb/misc/cytherm.c
#   
#   Uncovered by recent cleanup of "dev_dbg()".
# 
# drivers/usb/misc/cytherm.c
#   2004/05/15 10:38:03-07:00 torvalds@ppc970.osdl.org +9 -9
#   Fix bogus debug code in usb/misc/cytherm.c
#   
#   Uncovered by recent cleanup of "dev_dbg()".
# 
# ChangeSet
#   2004/05/15 10:27:04-07:00 akpm@osdl.org 
#   [PATCH] i2o_config build fix
#   
#   Stomp a C99ism.
# 
# drivers/message/i2o/i2o_config.c
#   2004/05/14 23:21:40-07:00 akpm@osdl.org +3 -1
#   i2o_config build fix
# 
# ChangeSet
#   2004/05/15 10:26:53-07:00 akpm@osdl.org 
#   [PATCH] Fix botched fbdev lvalue conversion
# 
# drivers/video/riva/fbdev.c
#   2004/05/15 10:26:48-07:00 akpm@osdl.org +6 -6
#   Fix botched fbdev lvalue conversion
# 
# ChangeSet
#   2004/05/15 10:26:42-07:00 akpm@osdl.org 
#   [PATCH] typhoon locking fix
#   
#   Initialise the semaphore even if !MODULE
# 
# drivers/media/radio/radio-typhoon.c
#   2004/05/15 10:26:37-07:00 akpm@osdl.org +1 -1
#   typhoon locking fix
# 
# ChangeSet
#   2004/05/15 10:26:32-07:00 akpm@osdl.org 
#   [PATCH] radeonfb stack space fix
#   
#   These (unused) arrays are causing huge stack utilisation when instantiated in
#   an auto variable.  Remove them for now.
# 
# drivers/video/aty/radeonfb.h
#   2004/05/15 10:26:26-07:00 akpm@osdl.org +0 -2
#   radeonfb stack space fix
# 
# ChangeSet
#   2004/05/15 10:26:21-07:00 akpm@osdl.org 
#   [PATCH] bootmem.c cleanup
#   
#   From: Michael Buesch <mbuesch@freenet.de>
#   
#   - BUG_ON() conversion
#   
#   - Remove redundant dump_stack() (BUG already does that)
# 
# mm/bootmem.c
#   2004/05/14 23:11:59-07:00 akpm@osdl.org +9 -14
#   bootmem.c cleanup
# 
# ChangeSet
#   2004/05/15 10:26:11-07:00 akpm@osdl.org 
#   [PATCH] groups_alloc(0) clobbers memory past end of block
#   
#   From: Olaf Kirch <okir@suse.de>
#   
#   Authentication code in net/sunrpc makes frequent use of groups_alloc(0),
#   which seems to clobber memory past the end of what it allocated.
#   
#   If called with gidsetsize == 0, groups_alloc will set nblocks = 0,
#   but still does a
#   
#   	group_info->blocks[0] = group_info->small_block;
# 
# kernel/sys.c
#   2004/05/14 23:11:59-07:00 akpm@osdl.org +1 -2
#   groups_alloc(0) clobbers memory past end of block
# 
# ChangeSet
#   2004/05/15 10:26:00-07:00 akpm@osdl.org 
#   [PATCH] ac97_plugin_ad1980 porting fix
#   
#   From: "Uwe Bugla" <uwe.bugla@gmx.de>
#   
#   Fix up a mistake in the 2.4->2.6 forward-port of this driver.
# 
# sound/oss/ac97_plugin_ad1980.c
#   2004/05/14 23:11:59-07:00 akpm@osdl.org +1 -1
#   ac97_plugin_ad1980 porting fix
# 
# ChangeSet
#   2004/05/15 10:25:50-07:00 akpm@osdl.org 
#   [PATCH] Increase xfsbufd_centisecs when in laptop mode
#   
#   From: Bart Samwel <bart@samwel.tk>
#   
#   The attached patch is the outcome of a discussion with Nathan.
#   
#   When laptop mode is active, there is no need for XFS to wake up xfsbufd (the
#   daemon that flushes buffers that are too old) too often.  The default is once
#   every second, this patch makes laptop mode do it once every 30 seconds.
# 
# Documentation/laptop-mode.txt
#   2004/05/14 23:11:59-07:00 akpm@osdl.org +3 -0
#   Increase xfsbufd_centisecs when in laptop mode
# 
# ChangeSet
#   2004/05/15 10:25:39-07:00 akpm@osdl.org 
#   [PATCH] Laptop mode control script support for XFS *_centisecs sysctl values.
#   
#   From: Bart Samwel <bart@samwel.tk>
#   
#   XFS now uses
#   	/proc/sys/fs/xfs/xfssyncd_centisecs
#   	/proc/sys/fs/xfs/xfsbufd_centisecs
#   	/proc/sys/fs/xfs/age_buffer_centisecs
#   
#   Here's a patch to support these values in the laptop mode control script.
# 
# Documentation/laptop-mode.txt
#   2004/05/14 23:29:18-07:00 akpm@osdl.org +14 -1
#   Laptop mode control script support for XFS *_centisecs sysctl values.
# 
# ChangeSet
#   2004/05/15 10:25:29-07:00 akpm@osdl.org 
#   [PATCH] remove unused acpi_irq_to_vector()
#   
#   From: Bjorn Helgaas <bjorn.helgaas@hp.com>
#   
#   Now that everybody has acpi_gsi_to_irq(), we can nuke the deprecated
#   acpi_irq_to_vector().  No references remain.
# 
# include/asm-ia64/acpi.h
#   2004/05/14 23:11:59-07:00 akpm@osdl.org +0 -1
#   remove unused acpi_irq_to_vector()
# 
# include/asm-i386/acpi.h
#   2004/05/14 23:11:59-07:00 akpm@osdl.org +0 -1
#   remove unused acpi_irq_to_vector()
# 
# arch/ia64/kernel/acpi.c
#   2004/05/14 23:11:59-07:00 akpm@osdl.org +0 -10
#   remove unused acpi_irq_to_vector()
# 
# arch/i386/kernel/acpi/boot.c
#   2004/05/14 23:11:59-07:00 akpm@osdl.org +0 -10
#   remove unused acpi_irq_to_vector()
# 
# ChangeSet
#   2004/05/15 10:25:17-07:00 akpm@osdl.org 
#   [PATCH] floppy.c: better/cleaner use of debugt
#   
#   From: "Randy.Dunlap" <rddunlap@osdl.org>
#   
#   From: "Luiz Fernando N. Capitulino" <lcapitulino@prefeitura.sp.gov.br>
#   
#   floppy_debugt.patch: better use of the debugt functions.
# 
# drivers/block/floppy.c
#   2004/05/14 23:11:58-07:00 akpm@osdl.org +8 -30
#   floppy.c: better/cleaner use of debugt
# 
# ChangeSet
#   2004/05/15 10:25:08-07:00 akpm@osdl.org 
#   [PATCH] floppy.c: better floppy_init error handling
#   
#   From: "Randy.Dunlap" <rddunlap@osdl.org>
#   
#   From: "Luiz Fernando N. Capitulino" <lcapitulino@prefeitura.sp.gov.br>
#   
#   Adds a better audit for floppy_init().  Fixes one real bug (in calling
#   blk_queue_max_sectors()).
# 
# drivers/block/floppy.c
#   2004/05/14 23:29:19-07:00 akpm@osdl.org +54 -38
#   floppy.c: better floppy_init error handling
# 
# ChangeSet
#   2004/05/15 10:24:57-07:00 akpm@osdl.org 
#   [PATCH] Export `laptop_mode' for XFS
#   
#   From: <bart@samwel.tk>
#   
#   XFS needs `laptop_mode'.
# 
# mm/page-writeback.c
#   2004/05/14 23:11:58-07:00 akpm@osdl.org +2 -0
#   Export `laptop_mode' for XFS
# 
# ChangeSet
#   2004/05/15 10:24:47-07:00 akpm@osdl.org 
#   [PATCH] Remove old sh-sci driver
#   
#   From: Paul Mundt <lethal@linux-sh.org>
#   
#   The old drivers/char sh-sci driver is no long used by anyone, both sh and
#   h8300 are using the drivers/serial version at this point, so we can get rid
#   of the old one entirely.
# 
# drivers/char/Makefile
#   2004/05/14 23:11:58-07:00 akpm@osdl.org +0 -1
#   Remove old sh-sci driver
# 
# BitKeeper/deleted/.del-sh-sci.h~f3854b8c283c9700
#   2004/05/15 10:24:41-07:00 akpm@osdl.org +0 -0
#   Delete: drivers/char/sh-sci.h
# 
# BitKeeper/deleted/.del-sh-sci.c~bc16578fc6688d3
#   2004/05/15 10:24:41-07:00 akpm@osdl.org +0 -0
#   Delete: drivers/char/sh-sci.c
# 
# ChangeSet
#   2004/05/15 10:24:36-07:00 akpm@osdl.org 
#   [PATCH] Fix x86_64 allmodconfig with gcc-3.4.0
#   
#   From: Andi Kleen <ak@muc.de>
#   
#   *** Warning: "memcmp" [drivers/atm/zatm.ko] undefined!
#   
#   gcc 3.4 specific problem.  This patch should fix it.  Actually it would be
#   better to move all these EXPORT_SYMBOLs into lib/string.c, it is silly that
#   each arch has to duplicate all that.
# 
# arch/x86_64/kernel/x8664_ksyms.c
#   2004/05/14 23:11:58-07:00 akpm@osdl.org +3 -0
#   Fix x86_64 allmodconfig with gcc-3.4.0
# 
# ChangeSet
#   2004/05/15 10:24:25-07:00 akpm@osdl.org 
#   [PATCH] remove driver model code in mwave driver
#   
#   From: Christoph Hellwig <hch@lst.de>
#   
#   Someone blindly added sysfs support to the driver long time ago without
#   understanding the implications (and if they were understood the driver
#   would need half a rewrite for it).  Herber Xu recently noticed the problems
#   this causes on unload, so let's if 0 out all that code and get the driver
#   working again.
# 
# drivers/char/mwave/mwavedd.c
#   2004/05/14 23:11:58-07:00 akpm@osdl.org +6 -1
#   remove driver model code in mwave driver
# 
# ChangeSet
#   2004/05/15 10:24:15-07:00 akpm@osdl.org 
#   [PATCH] Make /proc/sysrq-trigger ignore sysrq_enabled
#   
#   It's silly that writing to /proc/sysrq-trigger does nothing if you haven't
#   enabled /proc/sys/kernel/sysrq.  So provide a new __handle_sysrq() which
#   ignores the sysrq_enabled check.
#   
#   The patch also withdraws __handle_sysrq_nolock() from the kernel API.  It had
#   no callers.
# 
# include/linux/sysrq.h
#   2004/05/14 23:11:58-07:00 akpm@osdl.org +1 -7
#   Make /proc/sysrq-trigger ignore sysrq_enabled
# 
# fs/proc/proc_misc.c
#   2004/05/14 23:11:58-07:00 akpm@osdl.org +1 -1
#   Make /proc/sysrq-trigger ignore sysrq_enabled
# 
# drivers/char/sysrq.c
#   2004/05/14 23:11:58-07:00 akpm@osdl.org +15 -21
#   Make /proc/sysrq-trigger ignore sysrq_enabled
# 
# ChangeSet
#   2004/05/15 10:24:04-07:00 akpm@osdl.org 
#   [PATCH] x86_64 msr.c warning fix
#   
#   arch/x86_64/kernel/msr.c:1:10: warning: extra tokens at end of #ident directive
# 
# arch/x86_64/kernel/msr.c
#   2004/05/14 23:11:58-07:00 akpm@osdl.org +0 -1
#   x86_64 msr.c warning fix
# 
# ChangeSet
#   2004/05/15 10:23:54-07:00 akpm@osdl.org 
#   [PATCH] fix aic7xxx_old.c for !PCI
#   
#   From: Adrian Bunk <bunk@fs.tum.de>
#   
#   drivers/scsi/aic7xxx_old.c: In function `aic7xxx_release':
#   drivers/scsi/aic7xxx_old.c:10971: warning: implicit declaration of function `pci_release_regions'
# 
# drivers/scsi/aic7xxx_old.c
#   2004/05/14 23:11:57-07:00 akpm@osdl.org +4 -0
#   fix aic7xxx_old.c for !PCI
# 
# ChangeSet
#   2004/05/15 10:23:43-07:00 akpm@osdl.org 
#   [PATCH] fix tlan.c for !PCI
#   
#   From: Adrian Bunk <bunk@fs.tum.de>
#   
#   drivers/net/tlan.c: In function `tlan_remove_one':
#   drivers/net/tlan.c:449: warning: implicit declaration of function `pci_release_regions'
# 
# drivers/net/tlan.c
#   2004/05/14 23:11:57-07:00 akpm@osdl.org +4 -0
#   fix tlan.c for !PCI
# 
# ChangeSet
#   2004/05/15 10:23:33-07:00 akpm@osdl.org 
#   [PATCH] fix cyclades compile with !PCI
#   
#   From: Adrian Bunk <bunk@fs.tum.de>
#   
#   drivers/char/cyclades.c: In function `cy_cleanup_module':
#   drivers/char/cyclades.c:5638: warning: implicit declaration of function `pci_release_regions'
# 
# drivers/char/cyclades.c
#   2004/05/14 23:11:57-07:00 akpm@osdl.org +2 -0
#   fix cyclades compile with !PCI
# 
# ChangeSet
#   2004/05/15 10:23:22-07:00 akpm@osdl.org 
#   [PATCH] Fix endianess in modpost when cross-compiling for sparc on i386
#   
#   From: Mathieu Chouquet-Stringer <mchouque@online.fr>
#   
#   This patch makes the following code work again:
#   
#   #ifdef STT_REGISTER
#                   if (info->hdr->e_machine == EM_SPARC ||
#                       info->hdr->e_machine == EM_SPARCV9) {
#                           /* Ignore register directives. */
#                           if (ELF_ST_TYPE(sym->st_info) == STT_REGISTER)
#                                   break;
#                   }
#   #endif
#   
#   This portion of code is sparc specific and nothing else in modpost.c uses
#   e_machine meaning cross-compiling for sparc on i386 (or any little endian
#   machine) is the only way to experience the bug.
#   
#   Without it, e_machine has the wrong value and modpost then generates a lot
#   of "*** Warning: \"symbol\" [filename.ko] undefined" messages.
# 
# scripts/modpost.c
#   2004/05/14 23:11:57-07:00 akpm@osdl.org +1 -0
#   Fix endianess in modpost when cross-compiling for sparc on i386
# 
# ChangeSet
#   2004/05/15 10:23:12-07:00 akpm@osdl.org 
#   [PATCH] m68k: use print_modules()
#   
#   From: Geert Uytterhoeven <geert@linux-m68k.org>
# 
# arch/m68k/kernel/traps.c
#   2004/05/14 23:11:57-07:00 akpm@osdl.org +1 -0
#   m68k: use print_modules()
# 
# ChangeSet
#   2004/05/15 10:23:01-07:00 akpm@osdl.org 
#   [PATCH] implement print_modules()
#   
#   From: Arjan van de Ven <arjanv@redhat.com>,
#         Rusty Russell <rusty@rustcorp.com.au>
#   
#   The patch below resolves the "Not Yet Implemented" print_modules() thing.
#   This is a really useful feature for distros; it allows us to do statistical
#   analysis on which modules are present how often in oopses compared to how
#   often they are used normally.  In addition it helps to spot candidates for
#   certain bugs without having to go back to the customer asking for this
#   information.
# 
# kernel/module.c
#   2004/05/14 23:11:57-07:00 akpm@osdl.org +11 -0
#   implement print_modules()
# 
# include/linux/module.h
#   2004/05/14 23:11:57-07:00 akpm@osdl.org +4 -1
#   implement print_modules()
# 
# ChangeSet
#   2004/05/15 10:22:51-07:00 akpm@osdl.org 
#   [PATCH] Fix reiserfs oom crash
#   
#   From: Oleg Drokin <green@linuxhacker.ru>
#   
#   Thanks to Standford guys, a case where reiserfs can dereference NULL
#   pointer if memory allocation fail during mount was identified.
# 
# fs/reiserfs/journal.c
#   2004/05/14 23:11:57-07:00 akpm@osdl.org +4 -2
#   Fix reiserfs oom crash
# 
# ChangeSet
#   2004/05/15 10:22:41-07:00 akpm@osdl.org 
#   [PATCH] fix block layer ioctl bug
#   
#   From: Alan Cox <alan@redhat.com>
#   
#   The block layer checks for -EINVAL from block layer driver ioctls.  This is
#   wrong - ENOTTY is unknown and some drivers correctly use this.  I suspect
#   for an internal ioctl 2.7 should change to -ENOIOCTLCMD and bitch about old
#   style returns
#   
#   This is conservative fix for the 2.6 case, it keeps the bogus -EINVAL to
#   avoid breaking stuff
# 
# drivers/block/ioctl.c
#   2004/05/14 23:11:56-07:00 akpm@osdl.org +2 -1
#   fix block layer ioctl bug
# 
# ChangeSet
#   2004/05/15 10:22:30-07:00 akpm@osdl.org 
#   [PATCH] fix linux doc errors
#   
#   From: Alan Cox <alan@redhat.com>
# 
# drivers/scsi/hosts.c
#   2004/05/14 23:11:56-07:00 akpm@osdl.org +2 -2
#   fix linux doc errors
# 
# ChangeSet
#   2004/05/15 10:22:19-07:00 akpm@osdl.org 
#   [PATCH] security: minor cleanups in capability.c
#   
#   From: Chris Wright <chrisw@osdl.org>
#   
#   Remove confusing error message when loading as secondary module, and ditch
#   conditional MY_NAME macro.
# 
# security/capability.c
#   2004/05/14 23:11:56-07:00 akpm@osdl.org +3 -8
#   security: minor cleanups in capability.c
# 
# ChangeSet
#   2004/05/15 10:22:09-07:00 akpm@osdl.org 
#   [PATCH] security: remove empty build of capability.o
#   
#   From: Chris Wright <chrisw@osdl.org>
#   
#   The build includes capability.c when CONFIG_SECURITY=n, yet the whole file is
#   ifdef'd out.  Remove unnecessary build step as well as superfluous ifdefs.
# 
# security/capability.c
#   2004/05/14 23:29:22-07:00 akpm@osdl.org +0 -5
#   security: remove empty build of capability.o
# 
# security/Makefile
#   2004/05/14 23:11:56-07:00 akpm@osdl.org +1 -1
#   security: remove empty build of capability.o
# 
# ChangeSet
#   2004/05/15 10:21:58-07:00 akpm@osdl.org 
#   [PATCH] PCI debug compile fix in sis_router_probe()
#   
#   From: Pavel Roskin <proski@gnu.org>
#   
#   I get a compile error when I define "DEBUG" in arch/i386/pci/pci.h.  Variable
#   rt is not defined in sis_router_probe(), file arch/i386/pci/irq.c.
# 
# arch/i386/pci/irq.c
#   2004/05/14 23:11:56-07:00 akpm@osdl.org +0 -2
#   PCI debug compile fix in sis_router_probe()
# 
# ChangeSet
#   2004/05/15 10:21:48-07:00 akpm@osdl.org 
#   [PATCH] calculate NGROUPS_PER_BLOCK from PAGE_SIZE
#   
#   From: Greg Edwards <edwardsg@sgi.com>
#   
#   On ia64, EXEC_PAGESIZE (max page size) is 65536, but the default page size is
#   16k.  This results in NGROUPS_PER_BLOCK in include/linux/sched.h being
#   calculated incorrectly when the page size is anything other than 64k.  For
#   example, on a 16k page size kernel, a setgroups() call with a gidsetsize of
#   65536 will end up walking over memory since only 1/4 of the needed pages were
#   allocated for the blocks[] array in the group_info struct.
#   
#   Patch below calculates NGROUPS_PER_BLOCK from PAGE_SIZE instead.
# 
# include/linux/sched.h
#   2004/05/14 23:11:56-07:00 akpm@osdl.org +1 -1
#   calculate NGROUPS_PER_BLOCK from PAGE_SIZE
# 
# ChangeSet
#   2004/05/15 10:21:37-07:00 akpm@osdl.org 
#   [PATCH] dquot_release oops fix
#   
#   From: Jan Kara <jack@ucw.cz>
#   
#   Fix a null-pointer-deref oops in the quota code.
# 
# fs/dquot.c
#   2004/05/14 23:11:56-07:00 akpm@osdl.org +2 -1
#   dquot_release oops fix
# 
# ChangeSet
#   2004/05/15 10:21:27-07:00 akpm@osdl.org 
#   [PATCH] videodev: handle class_register() failure
#   
#   From: "Randy.Dunlap" <rddunlap@osdl.org>
#   
#   From: <WHarms@bfs.de>(Walter Harms)
#   
#   (acked by Gerd)
# 
# drivers/media/video/videodev.c
#   2004/05/14 23:11:56-07:00 akpm@osdl.org +12 -3
#   videodev: handle class_register() failure
# 
# ChangeSet
#   2004/05/15 10:21:16-07:00 akpm@osdl.org 
#   [PATCH] Update laptop mode control script with XFS_HZ=100
#   
#   From: Bart Samwel <bart@samwel.tk>
#   
#   The laptop mode control script incorrectly guesses XFS_HZ=1000.  This is
#   incorrect, since the patches that made XFS use USER_HZ went into 2.6.6 as
#   well.  This changes XFS_HZ to 100 and removes the warning from the doc about
#   checking XFS_HZ.
# 
# Documentation/laptop-mode.txt
#   2004/05/14 23:29:19-07:00 akpm@osdl.org +7 -11
#   Update laptop mode control script with XFS_HZ=100
# 
# ChangeSet
#   2004/05/15 10:21:06-07:00 akpm@osdl.org 
#   [PATCH] Watchdog timer for Intel IXP4xx CPUs
#   
#   From: Deepak Saxena <dsaxena@plexity.net>
#   
#   Following patch adds a driver for the watchdogs on the Intel IXP4xx family of
#   network processors (ARM).
# 
# drivers/char/watchdog/ixp4xx_wdt.c
#   2004/05/14 23:11:55-07:00 akpm@osdl.org +233 -0
#   Watchdog timer for Intel IXP4xx CPUs
# 
# drivers/char/watchdog/Makefile
#   2004/05/14 23:11:55-07:00 akpm@osdl.org +1 -0
#   Watchdog timer for Intel IXP4xx CPUs
# 
# drivers/char/watchdog/Kconfig
#   2004/05/14 23:11:55-07:00 akpm@osdl.org +11 -0
#   Watchdog timer for Intel IXP4xx CPUs
# 
# drivers/char/watchdog/ixp4xx_wdt.c
#   2004/05/14 23:11:55-07:00 akpm@osdl.org +0 -0
#   BitKeeper file /home/torvalds/v2.6/linux/drivers/char/watchdog/ixp4xx_wdt.c
# 
# ChangeSet
#   2004/05/15 10:20:55-07:00 akpm@osdl.org 
#   [PATCH] Fix AladdinCard entry in parport_pc
#   
#   From: Christian Groessler <cpg@aladdin.de>
#   
#   Our AladdinCard also uses the oxsemi_840 chips and locks up when ecp mode
#   is enabled.
# 
# drivers/parport/parport_pc.c
#   2004/05/14 23:11:55-07:00 akpm@osdl.org +1 -1
#   Fix AladdinCard entry in parport_pc
# 
# ChangeSet
#   2004/05/15 10:20:44-07:00 akpm@osdl.org 
#   [PATCH] create_workqueue locking fix
#   
#   Fix some silliness in there.
# 
# kernel/workqueue.c
#   2004/05/14 23:11:55-07:00 akpm@osdl.org +2 -2
#   create_workqueue locking fix
# 
# ChangeSet
#   2004/05/15 10:20:34-07:00 akpm@osdl.org 
#   [PATCH] laptop-mode documentation fix
#   
#   From: Sau Dan Lee <danlee@informatik.uni-freiburg.de>
#   
#   The script /etc/acpi/actions/battery.sh in the document doesn't run,
#   because of a wrong name.
# 
# Documentation/laptop-mode.txt
#   2004/05/14 23:29:23-07:00 akpm@osdl.org +2 -2
#   laptop-mode documentation fix
# 
# ChangeSet
#   2004/05/15 10:20:24-07:00 akpm@osdl.org 
#   [PATCH] ib700wdt watchdog driver fix #2
#   
#   From: Patrice Bouchand <PBouchand@cyberdeck.com>
#   
#   The value written in the WDT_STOP register is not important.  As soon as
#   something is written, the watchdog timer stops.  But things will be cleaner
#   if we use the following patch.
# 
# drivers/char/watchdog/ib700wdt.c
#   2004/05/14 23:11:55-07:00 akpm@osdl.org +2 -2
#   ib700wdt watchdog driver fix #2
# 
# ChangeSet
#   2004/05/15 10:20:13-07:00 akpm@osdl.org 
#   [PATCH] ib700wdt watchdog driver fix
#   
#   From: Patrice Bouchand <PBouchand@cyberdeck.com>
#   
#   ibwdt_ping(): we should write the current timeout's index into the holdoff
#   register, not the timeout's value in seconds.
# 
# drivers/char/watchdog/ib700wdt.c
#   2004/05/14 23:29:24-07:00 akpm@osdl.org +1 -1
#   ib700wdt watchdog driver fix
# 
# ChangeSet
#   2004/05/15 10:20:03-07:00 akpm@osdl.org 
#   [PATCH] expose backing dev max read-ahead
#   
#   From: Jens Axboe <axboe@suse.de>
#   
#   Expose the blockdev's VM readahead in /sys/block/hda/queue/read_ahead_kbytes
#   
#   This duplicates `blockdev --setra', but we're trying to get away from
#   ioctls.
#   
#   It would be nice to have a readahead-setting mechanism which also allows,
#   say, NFS to be tuned.  But there is no common exposure point for
#   backing_dev_infos.  One option might be per-superblock:
#   
#   	mount -o remount,read_ahead_kbytes=64
#   
#   but the generic remount code also has no visibility of the backing_dev, so it
#   would need a new super_block operation.  One which doesn't accidentally modify
#   default_backing_dev_info.
# 
# drivers/block/ll_rw_blk.c
#   2004/05/14 23:11:55-07:00 akpm@osdl.org +27 -0
#   expose backing dev max read-ahead
# 
# ChangeSet
#   2004/05/15 10:19:52-07:00 akpm@osdl.org 
#   [PATCH] efivars: check that it's enabled
#   
#   From: "Randy.Dunlap" <rddunlap@osdl.org>
#   
#   EFI-enabled kernels crash on non-EFI machines.  efivars_init() and
#   efivars_exit() need to check efi_enabled instead of assuming that the
#   system is using EFI.
# 
# drivers/firmware/efivars.c
#   2004/05/14 23:11:54-07:00 akpm@osdl.org +6 -0
#   efivars: check that it's enabled
# 
# arch/i386/kernel/setup.c
#   2004/05/14 23:11:54-07:00 akpm@osdl.org +1 -0
#   efivars: check that it's enabled
# 
# ChangeSet
#   2004/05/15 10:19:35-07:00 akpm@osdl.org 
#   [PATCH] make buildcheck
#   
#   From: Arjan van de Ven <arjanv@redhat.com>
#   
#   the patch below adds a "make buildcheck" target which checks for the "uses
#   exit in init" bug using Keith Owen's script.  In the future other similar
#   sanity checks can be added to this target, but even just this one has been
#   quite useful already.  I use it in the kernel rpm build process for
#   example, and I'm sure the OSDL build testers can/want to use it too.
#   
#   From: Keith Owens <kaos@ocs.com.au>
#   
#     They commented out the progress print statements, I prefer to have them
#     present but no big deal.  The licence is missing.
# 
# scripts/reference_discarded.pl
#   2004/05/14 23:11:54-07:00 akpm@osdl.org +109 -0
#   make buildcheck
# 
# scripts/reference_discarded.pl
#   2004/05/14 23:11:54-07:00 akpm@osdl.org +0 -0
#   BitKeeper file /home/torvalds/v2.6/linux/scripts/reference_discarded.pl
# 
# Makefile
#   2004/05/14 23:11:54-07:00 akpm@osdl.org +3 -0
#   make buildcheck
# 
# ChangeSet
#   2004/05/15 10:19:25-07:00 akpm@osdl.org 
#   [PATCH] Include Aliases in kallsyms
#   
#   From: Rusty Russell <rusty@rustcorp.com.au>
#   
#   Kallsyms discards symbols with the same address, but these are sometimes
#   useful.  Skip this minor optimization and make kallsyms_lookup deal with
#   aliases
# 
# scripts/kallsyms.c
#   2004/05/14 23:11:54-07:00 akpm@osdl.org +2 -11
#   Include Aliases in kallsyms
# 
# kernel/kallsyms.c
#   2004/05/14 23:11:54-07:00 akpm@osdl.org +10 -4
#   Include Aliases in kallsyms
# 
# ChangeSet
#   2004/05/15 10:19:11-07:00 akpm@osdl.org 
#   [PATCH] show last kernel-image symbol in /proc/kallsyms
#   
#   From: Rusty Russell <rusty@rustcorp.com.au>
#   
#   The current code doesn't show the last symbol (usually _einittext) in
#   /proc/kallsyms.  The reason for this is subtle: s_start() returns an empty
#   string for position 0 (ignored by s_show()), and s_next() returns the first
#   symbol for position 1.
#   
#   What should happen is that update_iter() for position 0 should fill in the
#   first symbol.  Unfortunately, the get_ksymbol_core() fills in the symbol
#   information, *and* updates the iterator: we have to split these functions,
#   which we do by making it return the length of the name offset.
#   
#   Then we can call get_ksymbol_core() without moving the iterator, meaning
#   that we can call it at position 0 (ie.  s_start()).
# 
# kernel/kallsyms.c
#   2004/05/14 23:29:24-07:00 akpm@osdl.org +9 -6
#   show last kernel-image symbol in /proc/kallsyms
# 
# ChangeSet
#   2004/05/15 10:19:00-07:00 akpm@osdl.org 
#   [PATCH] slabify iocontext + request_queue
#   
#   From: Jens Axboe <axboe@suse.de>
#   
#   Move both request_queue and io_context allocation to a slab cache.
#   
#   This is mainly a space-saving exercise.  Some setups have a lot of disks
#   and the kmalloc rounding-up can consume significant amounts of memory.
# 
# drivers/block/ll_rw_blk.c
#   2004/05/14 23:29:24-07:00 akpm@osdl.org +25 -5
#   slabify iocontext + request_queue
# 
# ChangeSet
#   2004/05/15 10:18:50-07:00 akpm@osdl.org 
#   [PATCH] i2o_proc module owner fix
#   
#   From: Warren Togami <wtogami@redhat.com>
# 
# drivers/message/i2o/i2o_proc.c
#   2004/05/14 23:11:54-07:00 akpm@osdl.org +1 -0
#   i2o_proc module owner fix
# 
# ChangeSet
#   2004/05/15 10:18:39-07:00 akpm@osdl.org 
#   [PATCH] Fix i2o_proc kernel panic on access of /proc/i2o/iop0/lct
#   
#   From: Markus Lidel <Markus.Lidel@shadowconnect.com>
#   
#   The patch converts i2o_proc to seq_file, thereby fixing a bug in the
#   i2o_proc.c module, where the kernel panics, if you access /proc/i2o/iop0/lct
#   and read more then 1024 bytes of it.
# 
# drivers/message/i2o/i2o_proc.c
#   2004/05/14 23:29:25-07:00 akpm@osdl.org +206 -195
#   Fix i2o_proc kernel panic on access of /proc/i2o/iop0/lct
# 
# ChangeSet
#   2004/05/15 10:18:28-07:00 akpm@osdl.org 
#   [PATCH] fbdev: Q40 fbdev updates.
#   
#   From: James Simmons <jsimmons@infradead.org>
#   
#   It ports this driver to sysfs api and fixes a colormap issue.
# 
# drivers/video/q40fb.c
#   2004/05/14 23:11:53-07:00 akpm@osdl.org +69 -40
#   fbdev: Q40 fbdev updates.
# 
# ChangeSet
#   2004/05/15 10:18:18-07:00 akpm@osdl.org 
#   [PATCH] fbdev: Fix fbcon and unimap
#   
#   From: Fabrice Menard <menard.fabrice@wanadoo.fr>
#   
#   Trying to solve my latin1 char problems with the framebuffer console, I
#   found that fbcon doesn't set a unicode map.
# 
# drivers/video/console/fbcon.c
#   2004/05/14 23:11:53-07:00 akpm@osdl.org +1 -0
#   fbdev: Fix fbcon and unimap
# 
# ChangeSet
#   2004/05/15 10:18:07-07:00 akpm@osdl.org 
#   [PATCH] fbdev: New Asiliant framebuffer driver.
#   
#   From: James Simmons <jsimmons@infradead.org>
#   
#   This is the new asiliant framebuffer driver.
# 
# drivers/video/asiliantfb.c
#   2004/05/14 23:11:53-07:00 akpm@osdl.org +620 -0
#   fbdev: New Asiliant framebuffer driver.
# 
# drivers/video/asiliantfb.c
#   2004/05/14 23:11:53-07:00 akpm@osdl.org +0 -0
#   BitKeeper file /home/torvalds/v2.6/linux/drivers/video/asiliantfb.c
# 
# drivers/video/Makefile
#   2004/05/14 23:11:53-07:00 akpm@osdl.org +1 -0
#   fbdev: New Asiliant framebuffer driver.
# 
# drivers/video/Kconfig
#   2004/05/14 23:11:53-07:00 akpm@osdl.org +4 -0
#   fbdev: New Asiliant framebuffer driver.
# 
# ChangeSet
#   2004/05/15 10:17:56-07:00 akpm@osdl.org 
#   [PATCH] fbdev: Vesa Fbdev update fix
#   
#   From: Geert Uytterhoeven <geert@linux-m68k.org>
#   
#   On Sun, 25 Apr 2004, James Simmons wrote:
#   > This patch migrates the Vesa Framebuffer driver over to the
#   > framebuffer_alloc/framebuffer_release api. It also fixes the error
#   > handling paths. The mtrr issue that Geert brought up has been fixed.
#   > With your approval Geert, Ben please apply this patch.
#   
#   > +	/* Set video size according to vram boot option */
#   > +	if (vram && vram * 1024 * 1024 != vesafb_fix.smem_len)
#   > +		vesafb_fix.smem_len = vram * 1024 * 1024;
#   
#   The second part of the test can be removed. The rest looks OK to me.
# 
# drivers/video/vesafb.c
#   2004/05/14 23:11:53-07:00 akpm@osdl.org +1 -1
#   fbdev: Vesa Fbdev update fix
# 
# ChangeSet
#   2004/05/15 10:17:45-07:00 akpm@osdl.org 
#   [PATCH] fbdev: Vesa Fbdev update
#   
#   From: James Simmons <jsimmons@infradead.org>
#   
#   This patch migrates the Vesa Framebuffer driver over to the
#   framebuffer_alloc/framebuffer_release api.  It also fixes the error
#   handling paths.  The mtrr issue that Geert brought up has been fixed.
# 
# drivers/video/vesafb.c
#   2004/05/14 23:29:26-07:00 akpm@osdl.org +73 -25
#   fbdev: Vesa Fbdev update
# 
# ChangeSet
#   2004/05/15 10:17:34-07:00 akpm@osdl.org 
#   [PATCH] fbdev: Virtual fbdev updates
#   
#   From: James Simmons <jsimmons@infradead.org>
#   
#   This is attempt 2 at the virtual framebuffer patch.  It migrates the driver
#   to the framebuffer_release/framebuffer_alloc api.  It doesn't enable the
#   driver by default.
# 
# drivers/video/vfb.c
#   2004/05/14 23:11:53-07:00 akpm@osdl.org +85 -27
#   fbdev: Virtual fbdev updates
# 
# ChangeSet
#   2004/05/15 10:17:23-07:00 akpm@osdl.org 
#   [PATCH] fbdev: Fix NULL-ptr dereference in pm2fb_probe
#   
#   From: Jim Hague <jim.hague@acm.org>
#   
#   It fixes the NULL pointer dereference and also a problem in pm2fb_blank().
# 
# drivers/video/pm2fb.c
#   2004/05/14 23:11:53-07:00 akpm@osdl.org +32 -22
#   fbdev: Fix NULL-ptr dereference in pm2fb_probe
# 
# ChangeSet
#   2004/05/15 10:17:12-07:00 akpm@osdl.org 
#   [PATCH] fbdev: set a default access_align value
#   
#   From: James Simmons <jsimmons@infradead.org>
#   
#   Set the default access_align variable.  This variable tells us how much data
#   the hardware can handle in a single read/write cycle.  For example the epson
#   chipset can handle only 16 bit reads and writes to the framebuffer.
# 
# drivers/video/fbmem.c
#   2004/05/14 23:11:53-07:00 akpm@osdl.org +2 -0
#   fbdev: set a default access_align value
# 
# ChangeSet
#   2004/05/15 10:17:01-07:00 akpm@osdl.org 
#   [PATCH] fbdev: remove redundant local
#   
#   From: James Simmons <jsimmons@infradead.org>
#   
#   Remove extra variable. We use i instead of rc.
# 
# drivers/video/fbmem.c
#   2004/05/14 23:29:26-07:00 akpm@osdl.org +3 -3
#   fbdev: remove redundant local
# 
# ChangeSet
#   2004/05/15 10:16:51-07:00 akpm@osdl.org 
#   [PATCH] fbdev: remove redundant p->vrows calculation
#   
#   From: James Simmons <jsimmons@infradead.org>
#   
#   This patch removes the redundent calculation of p->vrows.  This is done in
#   fbcon_resize.
# 
# drivers/video/console/fbcon.c
#   2004/05/14 23:29:25-07:00 akpm@osdl.org +2 -17
#   fbdev: remove redundant p->vrows calculation
# 
# ChangeSet
#   2004/05/15 10:16:40-07:00 akpm@osdl.org 
#   [PATCH] fbdev: clean up logo handling
#   
#   From: James Simmons <jsimmons@infradead.org>
#   
#   This make the logo handling code easier to read.  Merged the two code blocks
#   since they test for the exact same condition.
# 
# drivers/video/console/fbcon.c
#   2004/05/14 23:29:26-07:00 akpm@osdl.org +1 -4
#   fbdev: clean up logo handling
# 
# ChangeSet
#   2004/05/15 10:16:30-07:00 akpm@osdl.org 
#   [PATCH] fbdev: video/imsttfb.c warning fix
#   
#   From: "Luiz Fernando N. Capitulino" <lcapitulino@prefeitura.sp.gov.br>
#   
#   drivers/video/imsttfb.c:1089: warning: `imsttfb_load_cursor_image' defined but not used
#   drivers/video/imsttfb.c:1159: warning: `imstt_set_cursor' defined but not used
# 
# drivers/video/imsttfb.c
#   2004/05/14 23:11:52-07:00 akpm@osdl.org +1 -1
#   fbdev: video/imsttfb.c warning fix
# 
# ChangeSet
#   2004/05/15 10:16:20-07:00 akpm@osdl.org 
#   [PATCH] fbdev: video/tdfxfb.c warning fix
#   
#   From: "Luiz Fernando N. Capitulino" <lcapitulino@prefeitura.sp.gov.br>
#   
#   Fix this:
#   
#   drivers/video/tdfxfb.c:1005: warning: `tdfxfb_cursor' defined but not used
#   
#   and make the acceleration function selectable (like hgafb and tridentfb)
#   
#   Geert says:
#   
#    tdfxfb_cursor() was not used before, causing a compiler warning. 
#    tdfxfb_cursor() may work, but we don't know, so we didn't dare to enable it
#    by default.  Now the user (he who has the hardware) can enable it, and tell
#    us whether it works or not.
# 
# drivers/video/tdfxfb.c
#   2004/05/14 23:11:52-07:00 akpm@osdl.org +7 -1
#   fbdev: video/tdfxfb.c warning fix
# 
# drivers/video/Kconfig
#   2004/05/14 23:29:25-07:00 akpm@osdl.org +8 -0
#   fbdev: video/tdfxfb.c warning fix
# 
# ChangeSet
#   2004/05/15 10:16:09-07:00 akpm@osdl.org 
#   [PATCH] fbdev: video/hgafb.c warning fix
#   
#   From: "Luiz Fernando N. Capitulino" <lcapitulino@prefeitura.sp.gov.br>
#   
#   Make HGA acceleration functions selectable in kernel config, fix these
#   warnings:
#   
#   drivers/video/hgafb.c:452: warning: `hgafb_fillrect' defined but not used
#   drivers/video/hgafb.c:472: warning: `hgafb_copyarea' defined but not used
#   drivers/video/hgafb.c:502: warning: `hgafb_imageblit' defined but not used
# 
# drivers/video/hgafb.c
#   2004/05/14 23:11:52-07:00 akpm@osdl.org +12 -3
#   fbdev: video/hgafb.c warning fix
# 
# drivers/video/Kconfig
#   2004/05/14 23:29:27-07:00 akpm@osdl.org +8 -0
#   fbdev: video/hgafb.c warning fix
# 
# ChangeSet
#   2004/05/15 10:15:59-07:00 akpm@osdl.org 
#   [PATCH] fbdev: video/tridentfb.c warning fix
#   
#   From: "Luiz Fernando N. Capitulino" <lcapitulino@prefeitura.sp.gov.br>
#   
#   Speaking with frame buffer people, we agree with this patch to fix the
#   warning:
#   
#   drivers/video/tridentfb.c:455: warning: `tridentfb_fillrect' defined but not used
#   drivers/video/tridentfb.c:473: warning: `tridentfb_copyarea' defined but not used
# 
# drivers/video/tridentfb.c
#   2004/05/14 23:11:52-07:00 akpm@osdl.org +8 -5
#   fbdev: video/tridentfb.c warning fix
# 
# drivers/video/Kconfig
#   2004/05/14 23:29:27-07:00 akpm@osdl.org +8 -0
#   fbdev: video/tridentfb.c warning fix
# 
# ChangeSet
#   2004/05/15 10:15:48-07:00 akpm@osdl.org 
#   [PATCH] fbdev: Neomagic driver update.
#   
#   From: James Simmons <jsimmons@infradead.org>
#   
#   Here is a updated driver for the neomagic.
# 
# include/video/neomagic.h
#   2004/05/14 23:11:52-07:00 akpm@osdl.org +104 -165
#   fbdev: Neomagic driver update.
# 
# drivers/video/neofb.c
#   2004/05/14 23:11:52-07:00 akpm@osdl.org +294 -217
#   fbdev: Neomagic driver update.
# 
# drivers/video/Makefile
#   2004/05/14 23:29:25-07:00 akpm@osdl.org +1 -1
#   fbdev: Neomagic driver update.
# 
# ChangeSet
#   2004/05/15 10:15:37-07:00 akpm@osdl.org 
#   [PATCH] fbdev: radeonfb: fix garbled screen
#   
#   From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
#   
#   > My screen is still a bit garbeld after booting.
#   > Still like http://zodiac.dnsalias.org/images/garbage.jpg
#   
#   Yes, usual boot-time x86 garbage. Well, let's imagine it's as simple
#   as clearing the framebuffer during boot :) Try this patch and let me
#   know. If that doesn't help, then the problem is definitely in fbcon.
# 
# drivers/video/aty/radeon_base.c
#   2004/05/14 23:11:51-07:00 akpm@osdl.org +1 -0
#   fbdev: radeonfb: fix garbled screen
# 
# ChangeSet
#   2004/05/15 10:15:26-07:00 akpm@osdl.org 
#   [PATCH] autofs4 compat ioctls
#   
#   From: <raven@themaw.net>
#   
#   These are the ioctls that need to be added to the compatibility layer.
#   
#   They are all esentially the same as the AUTOFS_IOC_PROTOVER in their 
#   requirements and so should be fine.
# 
# include/linux/compat_ioctl.h
#   2004/05/14 23:11:51-07:00 akpm@osdl.org +4 -0
#   autofs4 compat ioctls
# 
# ChangeSet
#   2004/05/15 10:15:15-07:00 akpm@osdl.org 
#   [PATCH] autofs4 race fix
#   
#   From: Ian Kent <raven@themaw.net>
#   
#   The case where two process similtaneously trigger a mount in autofs4 can
#   cause multiple requests to the daemon for the same mount.  The daemon
#   handles this OK but it's possible an incorrect error to be returned.  For
#   this reason I believe it is better to change the spin lock to a semaphore
#   in waitq.c.  This makes the second and subsequent request wait on the q as
#   ther supposed to.
# 
# fs/autofs4/waitq.c
#   2004/05/14 23:30:07-07:00 akpm@osdl.org +15 -12
#   autofs4 race fix
# 
# fs/autofs4/inode.c
#   2004/05/14 23:30:07-07:00 akpm@osdl.org +1 -0
#   autofs4 race fix
# 
# fs/autofs4/autofs_i.h
#   2004/05/14 23:30:07-07:00 akpm@osdl.org +1 -0
#   autofs4 race fix
# 
# ChangeSet
#   2004/05/15 10:15:04-07:00 akpm@osdl.org 
#   [PATCH] autofs4: readdir futureproofing
#   
#   From: Ian Kent <raven@themaw.net>
#   
#   Needed for support coming development plans.
# 
# include/linux/auto_fs4.h
#   2004/05/14 23:11:51-07:00 akpm@osdl.org +5 -3
#   autofs4: readdir futureproofing
# 
# fs/autofs4/root.c
#   2004/05/14 23:11:51-07:00 akpm@osdl.org +72 -1
#   autofs4: readdir futureproofing
# 
# fs/autofs4/autofs_i.h
#   2004/05/14 23:29:28-07:00 akpm@osdl.org +2 -0
#   autofs4: readdir futureproofing
# 
# ChangeSet
#   2004/05/15 10:14:54-07:00 akpm@osdl.org 
#   [PATCH] autofs4: add ioctl to query unmountability
#   
#   From: Ian Kent <raven@themaw.net>
#   
#   Add ioctl to find out if autofs mount can be umounted.  When the daemon
#   discovers this it's past the point of no return.
# 
# include/linux/auto_fs4.h
#   2004/05/14 23:29:28-07:00 akpm@osdl.org +1 -0
#   autofs4: add ioctl to query unmountability
# 
# fs/autofs4/root.c
#   2004/05/14 23:29:28-07:00 akpm@osdl.org +20 -0
#   autofs4: add ioctl to query unmountability
# 
# ChangeSet
#   2004/05/15 10:14:43-07:00 akpm@osdl.org 
#   [PATCH] autofs4: fix handling of chdir and chroot
#   
#   From: <raven@themaw.net>
#   
#   Pushed changes in sys_chdir and sys_chroot into the revalidate/lookup by
#   using nameidata hint.
# 
# fs/open.c
#   2004/05/14 23:11:51-07:00 akpm@osdl.org +0 -52
#   autofs4: fix handling of chdir and chroot
# 
# fs/autofs4/root.c
#   2004/05/14 23:29:28-07:00 akpm@osdl.org +3 -50
#   autofs4: fix handling of chdir and chroot
# 
# ChangeSet
#   2004/05/15 10:14:32-07:00 akpm@osdl.org 
#   [PATCH] autofs4: readdir fixes
#   
#   From: Ian Kent <raven@themaw.net>
#   
#   a. Implement readdir and friends for directory lookup for late mounting.
#      This is done largely by replacing a catch all condition in
#      try_to_fill_dentry with appropriate cases.
#   
#   b. Add path calc.  function in waitq.c to get extended path to return to
#      daemon (for direct mounts).
#   
#   c. Add revalidate calls to sys_chdir and sys_chroot so that pwd lookups
#      work correctly.
#   
#   d. Add ioctl to retrieve minor version for automount daemon (and me) to
#      recognise module fix level.  Bumped minor version to 5.
#   
#   From: Hugh Dickins <hugh@veritas.com>
#   
#     After chdir (or chroot) to non-existent directory on 2.6.5-mm5, you can no
#     longer unmount filesystem holding working directory (or root).
# 
# include/linux/auto_fs4.h
#   2004/05/14 23:29:28-07:00 akpm@osdl.org +3 -0
#   autofs4: readdir fixes
# 
# fs/open.c
#   2004/05/14 23:29:29-07:00 akpm@osdl.org +52 -0
#   autofs4: readdir fixes
# 
# fs/autofs4/waitq.c
#   2004/05/14 23:29:28-07:00 akpm@osdl.org +53 -17
#   autofs4: readdir fixes
# 
# fs/autofs4/root.c
#   2004/05/14 23:29:29-07:00 akpm@osdl.org +284 -44
#   autofs4: readdir fixes
# 
# fs/autofs4/inode.c
#   2004/05/14 23:29:28-07:00 akpm@osdl.org +1 -1
#   autofs4: readdir fixes
# 
# fs/autofs4/expire.c
#   2004/05/14 23:11:51-07:00 akpm@osdl.org +1 -1
#   autofs4: readdir fixes
# 
# fs/autofs4/autofs_i.h
#   2004/05/14 23:29:28-07:00 akpm@osdl.org +9 -1
#   autofs4: readdir fixes
# 
# ChangeSet
#   2004/05/15 10:14:21-07:00 akpm@osdl.org 
#   [PATCH] autofs4: may_umount_tree() cleanup
#   
#   From: <raven@themaw.net>
#   
#   Patch to sync 2.6.6-rc2-mm2 with the result of my discussion with 
#   Christoph Hellwig.
#   
#   Difference is that Christoph realised that merging may_umount_tree and
#   may_umount was not worth it. They are now seperate functions.
# 
# fs/namespace.c
#   2004/05/14 23:11:51-07:00 akpm@osdl.org +12 -23
#   autofs4: may_umount_tree() cleanup
# 
# ChangeSet
#   2004/05/15 10:14:11-07:00 akpm@osdl.org 
#   [PATCH] autofs4: expiry refcount fixes
#   
#   From: Ian Kent <raven@themaw.net>
#   
#   This patch is the result of an e-mail discussion with Soni Maneesh.  He felt
#   that the use of reference counts in the expire module is unreliable (in the
#   presence of rcu) and suggested it should use standard VFS calls where
#   possible.  This has been done.  Once the boundary in autofs is reached we
#   have no choice but to resort using reference counts (but under the
#   vfsmount_lock).
#   
#   
#   After review by hch:
#   
#   - renamed autofs4_may_umount to __may_umount_tree, made it static and moved
#     it to namespace.c.
#   
#   - added stub function may_umount_tree with description
#   
#   - altered may_umount to use above stub function and added little description
#   
#   - added may_umount_tree prototype to fs.h
#   
#   - removed the EXPORT_SYMBOL for vfsmount_lock
#   
#   - updated expire.c to suit
# 
# include/linux/fs.h
#   2004/05/14 23:11:50-07:00 akpm@osdl.org +1 -0
#   autofs4: expiry refcount fixes
# 
# include/linux/auto_fs4.h
#   2004/05/14 23:29:29-07:00 akpm@osdl.org +4 -0
#   autofs4: expiry refcount fixes
# 
# fs/namespace.c
#   2004/05/14 23:29:29-07:00 akpm@osdl.org +74 -4
#   autofs4: expiry refcount fixes
# 
# fs/autofs4/expire.c
#   2004/05/14 23:29:29-07:00 akpm@osdl.org +215 -130
#   autofs4: expiry refcount fixes
# 
# fs/autofs4/autofs_i.h
#   2004/05/14 23:29:29-07:00 akpm@osdl.org +20 -0
#   autofs4: expiry refcount fixes
# 
# ChangeSet
#   2004/05/15 10:14:00-07:00 akpm@osdl.org 
#   [PATCH] autofs4: locking rework
#   
#   From: Ian Kent <raven@themaw.net>
#   
#   Remove BKL from autofs4 module and add spinlock to serialise access to the
#   automount daemon communication waitq.
#   
#   Locking requirements are different in 2.6 and so I'm seeking comments and
#   suggestions on this.  I have taken a rather heavy handed approach to this in
#   the patch.  For example, the VFS operations that directly change the
#   filesystem, such as autofs4_mkdir etc, hold the inode semaphore on entry so
#   the BKL has been removed.  I can't see why two locking mechanisms are needed.
#    Rather than add locking all over the place, I'm looking for justification
#   it's needed, as I don't see it myself.
# 
# fs/autofs4/waitq.c
#   2004/05/14 23:29:29-07:00 akpm@osdl.org +22 -10
#   autofs4: locking rework
# 
# fs/autofs4/root.c
#   2004/05/14 23:29:29-07:00 akpm@osdl.org +6 -32
#   autofs4: locking rework
# 
# fs/autofs4/autofs_i.h
#   2004/05/14 23:29:29-07:00 akpm@osdl.org +1 -1
#   autofs4: locking rework
# 
# ChangeSet
#   2004/05/15 10:13:49-07:00 akpm@osdl.org 
#   [PATCH] autofs4: printk cleanups and memory leak fix
#   
#   From: Ian Kent <raven@themaw.net>
#   
#   - Correct text in DPRINTK messages and comments, a little reformating and
#     correct URL location for autofs v4 in Kconfig message.
#   
#   - Fix error-path memory leak in autofs4_fill_super()
# 
# fs/autofs4/waitq.c
#   2004/05/14 23:29:29-07:00 akpm@osdl.org +10 -9
#   autofs4: printk cleanups and memory leak fix
# 
# fs/autofs4/root.c
#   2004/05/14 23:29:29-07:00 akpm@osdl.org +11 -12
#   autofs4: printk cleanups and memory leak fix
# 
# fs/autofs4/inode.c
#   2004/05/14 23:29:29-07:00 akpm@osdl.org +6 -1
#   autofs4: printk cleanups and memory leak fix
# 
# fs/Kconfig
#   2004/05/14 23:11:50-07:00 akpm@osdl.org +1 -1
#   autofs4: printk cleanups and memory leak fix
# 
# ChangeSet
#   2004/05/15 10:13:39-07:00 akpm@osdl.org 
#   [PATCH] autofs4: dnotify + autofs may create signal/restart syscall loop
#   
#   From: Ian Kent <raven@themaw.net>
#   
#   From: Jeff Mahoney <jeffm@suse.com>
#   
#   I saw a recent bug report that showed when a process set up a dnotify
#   against the autofs root and then attempted an access(2) call inside the
#   autofs namespace on a mount that would fail, it would create a
#   signal/restart loop.
#   
#   The cause is that the autofs code checks to see if any signals are pending
#   after it waits on a response from the autofs daemon.  If it finds any, it
#   assumes that autofs_wait was interrupted, and that it should return
#   -ERESTARTNOINTR.  The problem with this is that a signal_pending(current)
#   check will return true if *any* signals were received, not just if a signal
#   that interrupted the wait was received.  autofs_wait explicitly blocks all
#   signals except for SIGKILL, SIGQUIT, and SIGINT before calling
#   interruptible_sleep_on.
#   
#   The effect is that if a dnotify is set against the autofs root, when the
#   autofs daemon creates the directory, a dnotify event will be sent to the
#   originating process.  Since the code in autofs_root_lookup doesn't check to
#   see what signals are actually pending, it bails early, telling the caller
#   to try again.  The loop goes on forever until interrupted via one of the
#   actual interrupting signals.
#   
#   The following patch makes both autofs_root_lookup and autofs4_root_lookup
#   verify that one of its defined "shutdown" signals are pending before
#   bailing out early.  Any other signal should be delivered later, as
#   expected.  It doesn't matter if the signal occured outside of the sleep in
#   autofs_wait.  The calling process will either go away or try again.
# 
# fs/autofs4/root.c
#   2004/05/14 23:29:30-07:00 akpm@osdl.org +8 -2
#   autofs4: dnotify + autofs may create signal/restart syscall loop
# 
# fs/autofs4/inode.c
#   2004/05/14 23:29:30-07:00 akpm@osdl.org +2 -0
#   autofs4: dnotify + autofs may create signal/restart syscall loop
# 
# ChangeSet
#   2004/05/15 10:13:28-07:00 akpm@osdl.org 
#   [PATCH] Use -msoft-float
#   
#   From: Dave Jones <davej@redhat.com>
#   
#   To catch accidental usage of floating point.  Has been in -mm for ages.
# 
# arch/i386/Makefile
#   2004/05/14 23:11:50-07:00 akpm@osdl.org +1 -1
#   Use -msoft-float
# 
# ChangeSet
#   2004/05/15 10:13:17-07:00 akpm@osdl.org 
#   [PATCH] sched: reduce node balancing interval
#   
#   From: Nick Piggin <nickpiggin@yahoo.com.au>
#   
#   From: Suresh Siddha <suresh.b.siddha@intel.com>
#   
#   Node max rebalance interval is too large.  It is currently dependent on
#   number of online cpus.  For 16 cpu system, max node balance interval in
#   busy case is 32 seconds.  Agreed that it will use max 32 seconds only when
#   it doesn't find imbalance for a long time.  But this will lead to slow
#   response time in cases where load runs for a second with no imbalance and
#   suddently creates an imbalance.  My patch makes the busy max node rebalance
#   interval equal to the base [scheduler].
# 
# include/linux/sched.h
#   2004/05/14 23:29:22-07:00 akpm@osdl.org +1 -1
#   sched: reduce node balancing interval
# 
# ChangeSet
#   2004/05/15 10:13:06-07:00 akpm@osdl.org 
#   [PATCH] sched: less locking in balancing
#   
#   From: Nick Piggin <nickpiggin@yahoo.com.au>
#   
#   Analysis and basic idea from Suresh Siddha <suresh.b.siddha@intel.com>
#   
#   "This small change in load_balance() brings the performance back upto base
#   scheduler(infact I see a ~1.5% performance improvement now).  Basically
#   this fix removes the unnecessary double_lock.."
#   
#   Workload is SpecJBB on 16-way Altix.
# 
# kernel/sched.c
#   2004/05/14 23:11:50-07:00 akpm@osdl.org +13 -5
#   sched: less locking in balancing
# 
# ChangeSet
#   2004/05/15 10:12:56-07:00 akpm@osdl.org 
#   [PATCH] sched: fix scheduler for unsynched processor sched_clock
#   
#   From: Nick Piggin <nickpiggin@yahoo.com.au>
#   
#   Fine-tune the unsynched sched_clock handling.
#   
#   Basically, you need to be careful about ensuring timestamps get correctly
#   adjusted when moving CPUs, and you *can't* look at your unadjusted
#   sched_clock() and a remote task's ->timestamp and try to come up with
#   anything meaningful.
#   
#   I think this second problem will really hit hard in the activate_task path
#   on systems with unsynched sched_clock when you're waking up a remote task,
#   which happens very often.  Andi, I thought some Opterons have unsynched
#   tscs?  Maybe this is causing your unexplained bad interactivity?
#   
#   Another problem is a fixup in pull_task.  When adjusting ->timestamp from
#   one processor to another, you must use timestamp_last_tick for the local
#   processor too.  Using sched_clock() will cause ->timestamp to creep
#   forward.
#   
#   A final small fix is for sync wakeups.  They were using __activate_task for
#   some reason, thus they don't get credited for sleeping at all AFAIKS.
#   
#   And another thing, do we want to #ifdef timestamp_last_tick so it doesn't
#   show on UP?
# 
# kernel/sched.c
#   2004/05/14 23:29:30-07:00 akpm@osdl.org +28 -10
#   sched: fix scheduler for unsynched processor sched_clock
# 
# ChangeSet
#   2004/05/15 10:12:44-07:00 akpm@osdl.org 
#   [PATCH] sched: improved cpu_load rounding
#   
#   From: Nick Piggin <nickpiggin@yahoo.com.au>
#   
#   "Siddha, Suresh B" <suresh.b.siddha@intel.com> noticed a problem in the
#   cpu_load averaging where the integer truncation could sometimes cause cpu_load
#   to never quite reach its target.
#   
#   I'm not sure that you could demonstrate a real world problem, but I quite
#   like this fix.
# 
# kernel/sched.c
#   2004/05/14 23:29:30-07:00 akpm@osdl.org +7 -0
#   sched: improved cpu_load rounding
# 
# ChangeSet
#   2004/05/15 10:12:33-07:00 akpm@osdl.org 
#   [PATCH] Fix writeback_inodes-vs-umount race
#   
#   Fix bug identified by Chris Mason.
#   
#   If writeback_inodes is left holding a ref on the superblock's last inode then
#   the superblock list walk can race with umount and the superblock can be
#   released.
#   
#   Take and put a ref against the superblock to fix that.
# 
# include/linux/fs.h
#   2004/05/14 23:29:29-07:00 akpm@osdl.org +1 -0
#   Fix writeback_inodes-vs-umount race
# 
# fs/super.c
#   2004/05/14 23:11:49-07:00 akpm@osdl.org +18 -3
#   Fix writeback_inodes-vs-umount race
# 
# fs/fs-writeback.c
#   2004/05/14 23:11:49-07:00 akpm@osdl.org +4 -0
#   Fix writeback_inodes-vs-umount race
# 
# ChangeSet
#   2004/05/15 10:12:23-07:00 akpm@osdl.org 
#   [PATCH] x86: stack dumps using frame pointers
#   
#   From: Adam Litke <agl@us.ibm.com>
#   
#   Teach the x86 stack tracing code to use frame pointers, if they are available.
#   It eliminates all the false-positives in the normal stack traces.
#   
#   This is a big improvement, and -fomit-frame-pointer seems to make no
#   difference at all to generated code size.  Maybe we should kill off
#   -fomit-frame-pointer.
# 
# arch/i386/kernel/traps.c
#   2004/05/14 23:11:49-07:00 akpm@osdl.org +58 -15
#   x86: stack dumps using frame pointers
# 
# ChangeSet
#   2004/05/15 13:09:25-04:00 jgarzik@redhat.com 
#   [libata] internal cleanups
#   
#   Remove unused 'done_late' arg to ata_qc_complete(), which was never
#   useful in 2.4, and never used at all in 2.6.
#   
#   This allows us to eliminate the same arg from ata_dma_complete(),
#   and also make it more correct by passing the command rather than
#   the ATA port structure as arg0.
# 
# include/linux/libata.h
#   2004/05/15 13:06:54-04:00 jgarzik@redhat.com +1 -1
#   [libata] internal cleanups
#   
#   Remove unused 'done_late' arg to ata_qc_complete(), which was never
#   useful in 2.4, and never used at all in 2.6.
#   
#   This allows us to eliminate the same arg from ata_dma_complete(),
#   and also make it more correct by passing the command rather than
#   the ATA port structure as arg0.
# 
# drivers/scsi/sata_sx4.c
#   2004/05/15 13:06:54-04:00 jgarzik@redhat.com +5 -7
#   [libata] internal cleanups
#   
#   Remove unused 'done_late' arg to ata_qc_complete(), which was never
#   useful in 2.4, and never used at all in 2.6.
#   
#   This allows us to eliminate the same arg from ata_dma_complete(),
#   and also make it more correct by passing the command rather than
#   the ATA port structure as arg0.
# 
# drivers/scsi/sata_promise.c
#   2004/05/15 13:06:54-04:00 jgarzik@redhat.com +5 -7
#   [libata] internal cleanups
#   
#   Remove unused 'done_late' arg to ata_qc_complete(), which was never
#   useful in 2.4, and never used at all in 2.6.
#   
#   This allows us to eliminate the same arg from ata_dma_complete(),
#   and also make it more correct by passing the command rather than
#   the ATA port structure as arg0.
# 
# drivers/scsi/libata-core.c
#   2004/05/15 13:06:54-04:00 jgarzik@redhat.com +13 -17
#   [libata] internal cleanups
#   
#   Remove unused 'done_late' arg to ata_qc_complete(), which was never
#   useful in 2.4, and never used at all in 2.6.
#   
#   This allows us to eliminate the same arg from ata_dma_complete(),
#   and also make it more correct by passing the command rather than
#   the ATA port structure as arg0.
# 
# ChangeSet
#   2004/05/15 12:47:04-04:00 jgarzik@redhat.com 
#   Merge redhat.com:/spare/repo/sata-hacks/atapi-hacks-2.6
#   into redhat.com:/spare/repo/libata-2.6
# 
# include/linux/libata.h
#   2004/05/15 12:47:01-04:00 jgarzik@redhat.com +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/05/15 09:42:40-07:00 shai@ftcon.com 
#   [PATCH] Multiple (ICH3) IDE-controllers in a system
#   
#   This fixes a problem with multiple IDE controllers in a system.
#   
#   The problem is that pcibios_fixups table (in arch/i386/pci/fixup.c) uses
#   the pci_fixup_ide_trash() quirk for Intel's ICH3 (my case specifically
#   8086:248b).  This clears any bogus BAR information set up by the BIOS.
#   
#   In a system which has multiple ICH3's can't use any of the IDE
#   controllers beside the one on the first ICH3.
#   
#   Anyhow, the fix is to make sure pci_fixup_ide_trash resets the BARs only
#   for first time being called, so the subsequent IDE controllers will use
#   the BIOS BARs.  This is better than "loosing" all these IDE controllers
#   in the case their BARs set right.
#   
#   The issue discussed and agreed with Bartlomiej Zolnierkiewicz (see below).
# 
# arch/i386/pci/fixup.c
#   2004/05/07 01:45:31-07:00 shai@ftcon.com +9 -0
#   Multiple (ICH3) IDE-controllers in a system
# 
# ChangeSet
#   2004/05/15 15:32:59+01:00 robin.farine@org.rmk.(none) 
#   [ARM PATCH] 1879/1: fix a few xscale "drain write & fill buffer" instructions
#   
#   Patch from Robin Farine
#   
#   Fix the xscale cache handling routines that were invalidating a D 
#   cache line instead of draining the write & fill buffer as intended.
# 
# arch/arm/mm/proc-xscale.S
#   2004/05/15 01:00:00+01:00 robin.farine@org.rmk.(none) +3 -3
#   [PATCH] 1879/1: fix a few xscale "drain write & fill buffer" instructions
# 
# ChangeSet
#   2004/05/15 15:26:45+01:00 catalin.marinas@com.rmk.(none) 
#   [ARM PATCH] 1883/1: Bit 4 in pmd should be 0 for the ARMv6 architecture
#   
#   Patch from Catalin Marinas
#   
#   Unlike the v5 architecture, the ARM1136 requires that BIT4 is 0 in
#   the first level page descriptor (ARM1136 TRM, page 6-39). It works
#   at the moment but it might break future v6 cores.
# 
# arch/arm/mm/mm-armv.c
#   2004/05/14 13:52:24+01:00 catalin.marinas@com.rmk.(none) +19 -7
#   [PATCH] 1883/1: Bit 4 in pmd should be 0 for the ARMv6 architecture
# 
# ChangeSet
#   2004/05/15 15:19:34+01:00 catalin.marinas@com.rmk.(none) 
#   [ARM PATCH] 1882/1: Fixes in the v6_dma_(invalidate|flush)_range functions
#   
#   Patch from Catalin Marinas
#   
#   The v6_dma_invalidate_range - the "mcr" instruction for draining
#   
#   the write buffer requires r0 == 0. A "cmp" instruction for
#   
#   testing the end address is missing in the v6_dma_flush_range
#   
#   function.
# 
# arch/arm/mm/cache-v6.S
#   2004/05/13 17:45:41+01:00 catalin.marinas@com.rmk.(none) +2 -0
#   [PATCH] 1882/1: Fixes in the v6_dma_(invalidate|flush)_range functions
# 
# ChangeSet
#   2004/05/15 15:13:48+01:00 catalin.marinas@com.rmk.(none) 
#   [ARM PATCH] 1881/1: Illegal strex instruction generated by gcc
#   
#   Patch from Catalin Marinas
#   
#   The _raw_write_(try)lock functions in include/asm-arm/spinlock.h
#   
#   should use the early clobber modifier (&) for the "tmp" register.
#   
#   A newer compiler (gcc-3.4.0) generates an "strexeq %0, %1, [%2]"
#   
#   instruction where %0 is the same as %2, which is illegal.
# 
# include/asm-arm/spinlock.h
#   2004/01/30 13:35:44+00:00 catalin.marinas@com.rmk.(none) +2 -2
#   [PATCH] 1881/1: Illegal strex instruction generated by gcc
# 
# ChangeSet
#   2004/05/15 15:07:10+01:00 catalin.marinas@com.rmk.(none) 
#   [ARM PATCH] 1880/1: cache_type is uninitialised in the blockops_check() function
#   
#   Patch from Catalin Marinas
#   
#   In the blockops_check() function, cache_type is uninitialised
#   
#   because an "mcr" instruction is used instead of "mrc".
# 
# arch/arm/mm/blockops.c
#   2004/01/27 17:34:39+00:00 catalin.marinas@com.rmk.(none) +1 -1
#   [PATCH] 1880/1: cache_type is uninitialised in the blockops_check() function
# 
# arch/ppc64/kernel/cpu_setup_power4.S
#   2004/05/15 00:33:10-07:00 benh@kernel.crashing.org +6 -2
#   ppc64: Add proper  SMP init on dual 970FX based machines
# 
# ChangeSet
#   2004/05/14 23:11:43-07:00 torvalds@ppc970.osdl.org 
#   Fix typo nonsense test in radeon PMAC backlight code.
# 
# drivers/video/aty/radeon_base.c
#   2004/05/14 23:11:38-07:00 torvalds@ppc970.osdl.org +1 -1
#   Fix typo nonsense test in radeon PMAC backlight code.
# 
# ChangeSet
#   2004/05/14 23:01:25-07:00 torvalds@ppc970.osdl.org 
#   Make dev_dbg() "use" it's 'dev' argument even when not debugging.
#   
#   This avoids warnings about unused variables.
# 
# include/linux/device.h
#   2004/05/14 23:01:20-07:00 torvalds@ppc970.osdl.org +1 -1
#   Make dev_dbg() "use" it's 'dev' argument even when not debugging.
#   
#   This avoids warnings about unused variables.
# 
# ChangeSet
#   2004/05/15 01:03:42-04:00 jgarzik@redhat.com 
#   [sound/oss i810] bump driver to version 1.00
# 
# sound/oss/i810_audio.c
#   2004/05/15 01:03:36-04:00 jgarzik@redhat.com +2 -2
#   [sound/oss i810] bump driver to version 1.00
# 
# ChangeSet
#   2004/05/14 21:53:01-07:00 aia21@cam.ac.uk 
#   [PATCH] x86_64 has buggy ffs() implementation
#   
#   x86_64 has an incorrect ffs() implementation.  The asm uses "g" instead
#   of "rm" for the bsfl instruction.  (This was spotted by Yuri Per.)
#   
#   bsfl does not accept constant values but only memory or register ones.
#   On i386 the correct "rm" is used.
#   
#   This causes NTFS build to fail as gcc optimizes a variable into a
#   constant and ffs() then fails to assemble.
# 
# include/asm-x86_64/bitops.h
#   2004/05/12 06:41:23-07:00 aia21@cam.ac.uk +1 -1
#   x86_64 has buggy ffs() implementation
# 
# ChangeSet
#   2004/05/14 21:45:59-07:00 kkeil@suse.de 
#   [PATCH] fix typo in avm_cs PCMCIA AVM B1 cardservice driver
#   
#   this trivial fix makes the AVM B1 PCMCIA cards work with 2.6
# 
# drivers/isdn/hardware/avm/avm_cs.c
#   2004/05/13 11:33:17-07:00 kkeil@suse.de +5 -5
#   fix typo in avm_cs PCMCIA AVM B1 cardservice driver
# 
# ChangeSet
#   2004/05/15 00:18:55-04:00 jgarzik@redhat.com 
#   Merge redhat.com:/spare/repo/linux-2.6
#   into redhat.com:/spare/repo/i810-audio-2.6
# 
# sound/oss/i810_audio.c
#   2004/05/15 00:18:51-04:00 jgarzik@redhat.com +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/05/14 20:47:15-07:00 santil@us.ibm.com 
#   [PATCH] PowerPC Virtual Ethernet links to /sys/class/net/ethX
#   
#   This adds links to the driver and device inside /sys/class/net/ethX for
#   PowerPC Virtual Ethernet devices.
# 
# drivers/net/ibmveth.c
#   2004/05/14 05:29:52-07:00 santil@us.ibm.com +1 -0
#   PowerPC Virtual Ethernet links to /sys/class/net/ethX
# 
# ChangeSet
#   2004/05/14 20:47:05-07:00 santil@us.ibm.com 
#   [PATCH] PowerPC Virtual Ethernet duplicate MAC addresses
#   
#   This fixes a bug where different partitions were assigned the same MAC
#   address.  Also, according to Anton, gcc 3.5 didn't like our mac_addr_p
#   gymnastics, so this ends up fixing that as well.
# 
# drivers/net/ibmveth.c
#   2004/05/14 05:32:26-07:00 santil@us.ibm.com +4 -4
#   PowerPC Virtual Ethernet duplicate MAC addresses
# 
# ChangeSet
#   2004/05/14 20:07:57-07:00 benh@kernel.crashing.org 
#   [PATCH] ppc64: Add proper  SMP init on dual 970FX based machines
#   
#   This patch fixes SMP boot on Apple Xserve G5
# 
# ChangeSet
#   2004/05/14 19:56:29-07:00 akpm@osdl.org 
#   [PATCH] ppc64 iSeries: allow read only virtual disks
#   
#   From: Stephen Rothwell <sfr@canb.auug.org.au>
#   
#   It is possible to attach a virtual disk to a logical partition on an iSeries
#   machine so that it is read only to the partition.  This patch allows Linux to
#   use such virtual disks.
# 
# drivers/block/viodasd.c
#   2004/05/14 19:00:27-07:00 akpm@osdl.org +22 -7
#   ppc64 iSeries: allow read only virtual disks
# 
# ChangeSet
#   2004/05/14 19:56:19-07:00 akpm@osdl.org 
#   [PATCH] ppc64: strengthen I/O and memory barriers
#   
#   From: Paul Mackerras <paulus@samba.org>
#   
#   After I sent the recent patch to include/asm-ppc64/io.h which put stronger
#   barriers in the I/O accessor macros, Paul McKenney pointed out to me that a
#   writex/outx could still slide out from inside a spinlocked region.  This patch
#   makes the barriers a bit stronger so that this can't happen.  It means that we
#   need to use a sync instruction for wmb (a full "heavyweight" sync), since
#   drivers rely on wmb for ordering between writes to system memory and writes to
#   a device.
#   
#   I have left smb_wmb() as a lighter-weight barrier that orders stores, and
#   doesn't impose an ordering between cacheable and non-cacheable accesses (the
#   amusingly-named eieio instruction).  I am assuming here that smp_wmb is only
#   used for ordering stores to system memory so that another cpu will see them in
#   order.  It can't be used for enforcing any ordering that a device will see,
#   because it is just a gcc barrier on UP.
#   
#   This also changes the spinlock/rwlock unlock code to use lwsync ("light-weight
#   sync") rather than eieio, since eieio doesn't order loads, and we need to
#   ensure that loads stay inside the spinlocked region.
# 
# include/asm-ppc64/system.h
#   2004/05/14 19:00:27-07:00 akpm@osdl.org +11 -7
#   ppc64: strengthen I/O and memory barriers
# 
# include/asm-ppc64/spinlock.h
#   2004/05/14 19:00:27-07:00 akpm@osdl.org +3 -3
#   ppc64: strengthen I/O and memory barriers
# 
# include/asm-ppc64/io.h
#   2004/05/14 19:00:27-07:00 akpm@osdl.org +15 -14
#   ppc64: strengthen I/O and memory barriers
# 
# arch/ppc64/kernel/misc.S
#   2004/05/14 19:00:27-07:00 akpm@osdl.org +15 -5
#   ppc64: strengthen I/O and memory barriers
# 
# ChangeSet
#   2004/05/14 19:56:08-07:00 akpm@osdl.org 
#   [PATCH] ppc64: Kconfig bits for CONFIG_SPINLINE
#   
#   From: Paul Mackerras <paulus@samba.org>
#   
#   When I sent the patch to uninline the spinlocks, I inadvertently left out
#   the change to arch/ppc64/Kconfig which defines the config symbol for
#   inlining the locks (CONFIG_SPINLINE now).  This patch adds it.  It also
#   adds a symbol CONFIG_PPC_SPLPAR which enables the code for calling the
#   hypervisor on shared-processor logically-partitioned system to yield the
#   physical processor to the lock holder when spinning.  (The code that
#   depends on this symbol is already present in arch/ppc64/lib/locks.c.)
# 
# arch/ppc64/Kconfig
#   2004/05/14 19:00:27-07:00 akpm@osdl.org +20 -0
#   ppc64: Kconfig bits for CONFIG_SPINLINE
# 
# ChangeSet
#   2004/05/14 19:55:58-07:00 akpm@osdl.org 
#   [PATCH] ppc64: remove iseries interrupt recursion workaround
#   
#   From: Anton Blanchard <anton@samba.org>
#   
#   It turns out we do avoid irq recursion on iseries so remove the workaround.
# 
# arch/ppc64/kernel/irq.c
#   2004/05/14 19:00:27-07:00 akpm@osdl.org +0 -4
#   ppc64: remove iseries interrupt recursion workaround
# 
# ChangeSet
#   2004/05/14 19:55:47-07:00 akpm@osdl.org 
#   [PATCH] ppc64: NVRAM fixes
#   
#   From: Anton Blanchard <anton@samba.org>
#   
#   We check nvram_fetch/nvram_store against -1, so better not make these
#   unsigned.
# 
# arch/ppc64/kernel/pSeries_nvram.c
#   2004/05/14 19:00:27-07:00 akpm@osdl.org +1 -1
#   ppc64: NVRAM fixes
# 
# ChangeSet
#   2004/05/14 19:55:37-07:00 akpm@osdl.org 
#   [PATCH] ppc64: align some heavily used variables
#   
#   From: Anton Blanchard <anton@samba.org>
#   
#   Based on feedback from the hardware guys align jiffies and tb_last_stamp.
#   We update both regularly and there are other read only, heavily accessed
#   things that share those cachelines.
# 
# arch/ppc64/kernel/time.c
#   2004/05/14 19:00:26-07:00 akpm@osdl.org +2 -2
#   ppc64: align some heavily used variables
# 
# ChangeSet
#   2004/05/14 19:55:26-07:00 akpm@osdl.org 
#   [PATCH] ppc64: set MSR_RI in iseries exception code
#   
#   From: Anton Blanchard <anton@samba.org>
#   
#   We need to set MSR_RI in iseries exception prolog.
# 
# arch/ppc64/kernel/head.S
#   2004/05/14 19:00:26-07:00 akpm@osdl.org +3 -0
#   ppc64: set MSR_RI in iseries exception code
# 
# ChangeSet
#   2004/05/14 19:55:15-07:00 akpm@osdl.org 
#   [PATCH] ppc64: fix radix tree allocation under spinlock
#   
#   From: Anton Blanchard <anton@samba.org>
#   
#   We were allocating radix tree nodes in the interrupt code with GFP_KERNEL
#   under a spinlock.  Change it to GFP_ATOMIC.
# 
# arch/ppc64/kernel/xics.c
#   2004/05/14 19:00:26-07:00 akpm@osdl.org +1 -1
#   ppc64: fix radix tree allocation under spinlock
# 
# ChangeSet
#   2004/05/14 19:55:05-07:00 akpm@osdl.org 
#   [PATCH] ppc32: Move declarations into headers
#   
#   From: Paul Mackerras <paulus@samba.org>
#   
#   The patch below moves some declarations from C files into the appropriate
#   header file in include/asm-ppc (and removes an unused local variable in a
#   function).
# 
# include/asm-ppc/system.h
#   2004/05/14 19:00:26-07:00 akpm@osdl.org +4 -0
#   ppc32: Move declarations into headers
# 
# include/asm-ppc/pgtable.h
#   2004/05/14 19:00:26-07:00 akpm@osdl.org +2 -0
#   ppc32: Move declarations into headers
# 
# arch/ppc/mm/fault.c
#   2004/05/14 19:00:26-07:00 akpm@osdl.org +0 -7
#   ppc32: Move declarations into headers
# 
# arch/ppc/kernel/traps.c
#   2004/05/14 19:00:26-07:00 akpm@osdl.org +0 -3
#   ppc32: Move declarations into headers
# 
# ChangeSet
#   2004/05/14 19:54:54-07:00 akpm@osdl.org 
#   [PATCH] ppc32: Fix pmac compile after OCP changes
#   
#   From: Paul Mackerras <paulus@samba.org>
#   
#   Matt Porter's recent changes broke the compile for non-4xx ppc32 systems,
#   unfortunately.  I get an error that mfdcr is not defined in
#   include/asm-ppc/ocp.h when compiling for powermac (reasonable, since the
#   mfdcr instruction only exists on 4xx processors).  The patch below fixes
#   it.
# 
# include/asm-ppc/ocp.h
#   2004/05/14 19:00:26-07:00 akpm@osdl.org +3 -0
#   ppc32: Fix pmac compile after OCP changes
# 
# ChangeSet
#   2004/05/14 19:54:43-07:00 akpm@osdl.org 
#   [PATCH] PPC32: PPC44x ports for new OCP
#   
#   From: Matt Porter <mporter@kernel.crashing.org>
#   
#   Merge all current PPC44x ports against new OCP.
# 
# arch/ppc/platforms/4xx/ocotea.h
#   2004/05/14 19:00:25-07:00 akpm@osdl.org +7 -4
#   PPC32: PPC44x ports for new OCP
# 
# arch/ppc/platforms/4xx/ocotea.c
#   2004/05/14 19:00:25-07:00 akpm@osdl.org +60 -16
#   PPC32: PPC44x ports for new OCP
# 
# arch/ppc/platforms/4xx/ibm440gx.h
#   2004/05/14 19:00:25-07:00 akpm@osdl.org +2 -51
#   PPC32: PPC44x ports for new OCP
# 
# arch/ppc/platforms/4xx/ibm440gx.c
#   2004/05/14 19:00:25-07:00 akpm@osdl.org +200 -20
#   PPC32: PPC44x ports for new OCP
# 
# arch/ppc/platforms/4xx/ibm440gp.h
#   2004/05/14 19:00:25-07:00 akpm@osdl.org +3 -39
#   PPC32: PPC44x ports for new OCP
# 
# arch/ppc/platforms/4xx/ibm440gp.c
#   2004/05/14 19:00:25-07:00 akpm@osdl.org +133 -13
#   PPC32: PPC44x ports for new OCP
# 
# arch/ppc/platforms/4xx/ebony.h
#   2004/05/14 19:00:25-07:00 akpm@osdl.org +0 -2
#   PPC32: PPC44x ports for new OCP
# 
# arch/ppc/platforms/4xx/ebony.c
#   2004/05/14 19:00:25-07:00 akpm@osdl.org +13 -11
#   PPC32: PPC44x ports for new OCP
# 
# arch/ppc/platforms/4xx/ash.c
#   2004/05/14 19:00:25-07:00 akpm@osdl.org +4 -4
#   PPC32: PPC44x ports for new OCP
# 
# arch/ppc/platforms/4xx/Makefile
#   2004/05/14 19:00:25-07:00 akpm@osdl.org +4 -2
#   PPC32: PPC44x ports for new OCP
# 
# arch/ppc/platforms/4xx/Kconfig
#   2004/05/14 19:00:25-07:00 akpm@osdl.org +14 -3
#   PPC32: PPC44x ports for new OCP
# 
# ChangeSet
#   2004/05/14 19:54:32-07:00 akpm@osdl.org 
#   [PATCH] PPC32: PPC40x ports for new OCP
#   
#   From: Matt Porter <mporter@kernel.crashing.org>
#   
#   Merge all current PPC40x ports against new OCP.
# 
# arch/ppc/platforms/4xx/walnut.c
#   2004/05/14 19:00:25-07:00 akpm@osdl.org +3 -0
#   PPC32: PPC40x ports for new OCP
# 
# arch/ppc/platforms/4xx/sycamore.c
#   2004/05/14 19:00:25-07:00 akpm@osdl.org +13 -4
#   PPC32: PPC40x ports for new OCP
# 
# arch/ppc/platforms/4xx/redwood5.c
#   2004/05/14 19:00:25-07:00 akpm@osdl.org +0 -2
#   PPC32: PPC40x ports for new OCP
# 
# arch/ppc/platforms/4xx/ibmstbx25.c
#   2004/05/14 19:00:25-07:00 akpm@osdl.org +43 -14
#   PPC32: PPC40x ports for new OCP
# 
# arch/ppc/platforms/4xx/ibmstb4.h
#   2004/05/14 19:00:25-07:00 akpm@osdl.org +0 -1
#   PPC32: PPC40x ports for new OCP
# 
# arch/ppc/platforms/4xx/ibmstb4.c
#   2004/05/14 19:00:25-07:00 akpm@osdl.org +69 -13
#   PPC32: PPC40x ports for new OCP
# 
# arch/ppc/platforms/4xx/ibmnp405h.h
#   2004/05/14 19:00:25-07:00 akpm@osdl.org +0 -23
#   PPC32: PPC40x ports for new OCP
# 
# arch/ppc/platforms/4xx/ibmnp405h.c
#   2004/05/14 19:00:25-07:00 akpm@osdl.org +153 -15
#   PPC32: PPC40x ports for new OCP
# 
# arch/ppc/platforms/4xx/ibm405gpr.h
#   2004/05/14 19:00:25-07:00 akpm@osdl.org +0 -15
#   PPC32: PPC40x ports for new OCP
# 
# arch/ppc/platforms/4xx/ibm405gpr.c
#   2004/05/14 19:00:25-07:00 akpm@osdl.org +90 -9
#   PPC32: PPC40x ports for new OCP
# 
# arch/ppc/platforms/4xx/ibm405gp.h
#   2004/05/14 19:00:25-07:00 akpm@osdl.org +0 -19
#   PPC32: PPC40x ports for new OCP
# 
# arch/ppc/platforms/4xx/ibm405gp.c
#   2004/05/14 19:00:25-07:00 akpm@osdl.org +100 -15
#   PPC32: PPC40x ports for new OCP
# 
# arch/ppc/platforms/4xx/ep405.c
#   2004/05/14 19:00:25-07:00 akpm@osdl.org +3 -0
#   PPC32: PPC40x ports for new OCP
# 
# arch/ppc/platforms/4xx/cpci405.c
#   2004/05/14 19:00:25-07:00 akpm@osdl.org +4 -0
#   PPC32: PPC40x ports for new OCP
# 
# arch/ppc/platforms/4xx/ash.h
#   2004/05/14 19:00:25-07:00 akpm@osdl.org +0 -1
#   PPC32: PPC40x ports for new OCP
# 
# ChangeSet
#   2004/05/14 19:54:21-07:00 akpm@osdl.org 
#   [PATCH] PPC32: Update 4xx defconfigs
#   
#   From: Matt Porter <mporter@kernel.crashing.org>
#   
#   Update all current 4xx defconfigs for new OCP.
# 
# arch/ppc/configs/walnut_defconfig
#   2004/05/14 19:00:24-07:00 akpm@osdl.org +11 -3
#   PPC32: Update 4xx defconfigs
# 
# arch/ppc/configs/sycamore_defconfig
#   2004/05/14 19:00:24-07:00 akpm@osdl.org +202 -102
#   PPC32: Update 4xx defconfigs
# 
# arch/ppc/configs/redwood6_defconfig
#   2004/05/14 19:00:24-07:00 akpm@osdl.org +72 -60
#   PPC32: Update 4xx defconfigs
# 
# arch/ppc/configs/redwood5_defconfig
#   2004/05/14 19:00:24-07:00 akpm@osdl.org +73 -72
#   PPC32: Update 4xx defconfigs
# 
# arch/ppc/configs/ocotea_defconfig
#   2004/05/14 19:00:24-07:00 akpm@osdl.org +77 -69
#   PPC32: Update 4xx defconfigs
# 
# arch/ppc/configs/ep405_defconfig
#   2004/05/14 19:00:24-07:00 akpm@osdl.org +83 -97
#   PPC32: Update 4xx defconfigs
# 
# arch/ppc/configs/ebony_defconfig
#   2004/05/14 19:00:24-07:00 akpm@osdl.org +6 -0
#   PPC32: Update 4xx defconfigs
# 
# arch/ppc/configs/cpci405_defconfig
#   2004/05/14 19:00:24-07:00 akpm@osdl.org +79 -89
#   PPC32: Update 4xx defconfigs
# 
# arch/ppc/configs/ash_defconfig
#   2004/05/14 19:00:24-07:00 akpm@osdl.org +217 -121
#   PPC32: Update 4xx defconfigs
# 
# ChangeSet
#   2004/05/14 19:54:10-07:00 akpm@osdl.org 
#   [PATCH] PPC32: 4xx core fixes and 440gx PIC support
#   
#   From: Matt Porter <mporter@kernel.crashing.org>
#   
#   Merge misc.  4xx core fixes and support for the new cascade scheme in the
#   440gx.
# 
# arch/ppc/syslib/ppc4xx_pic.c
#   2004/05/14 19:00:24-07:00 akpm@osdl.org +110 -35
#   PPC32: 4xx core fixes and 440gx PIC support
# 
# arch/ppc/syslib/ppc405_pci.c
#   2004/05/14 19:00:24-07:00 akpm@osdl.org +0 -8
#   PPC32: 4xx core fixes and 440gx PIC support
# 
# arch/ppc/kernel/ppc_ksyms.c
#   2004/05/14 19:00:24-07:00 akpm@osdl.org +1 -1
#   PPC32: 4xx core fixes and 440gx PIC support
# 
# arch/ppc/boot/simple/embed_config.c
#   2004/05/14 19:00:24-07:00 akpm@osdl.org +2 -2
#   PPC32: 4xx core fixes and 440gx PIC support
# 
# ChangeSet
#   2004/05/14 19:53:59-07:00 akpm@osdl.org 
#   [PATCH] PPC32: IBM PPC4xx-specific OCP support
#   
#   From: Matt Porter <mporter@kernel.crashing.org>
#   
#   Merge PPC4xx-specific OCP support for new OCP core.
# 
# include/asm-ppc/ibm_ocp.h
#   2004/05/14 19:00:24-07:00 akpm@osdl.org +163 -0
#   PPC32: IBM PPC4xx-specific OCP support
# 
# include/asm-ppc/ibm_ocp.h
#   2004/05/14 19:00:24-07:00 akpm@osdl.org +0 -0
#   BitKeeper file /home/torvalds/v2.6/linux/include/asm-ppc/ibm_ocp.h
# 
# arch/ppc/syslib/ibm_ocp.c
#   2004/05/14 19:00:24-07:00 akpm@osdl.org +9 -0
#   PPC32: IBM PPC4xx-specific OCP support
# 
# arch/ppc/syslib/ibm_ocp.c
#   2004/05/14 19:00:24-07:00 akpm@osdl.org +0 -0
#   BitKeeper file /home/torvalds/v2.6/linux/arch/ppc/syslib/ibm_ocp.c
# 
# ChangeSet
#   2004/05/14 19:53:48-07:00 akpm@osdl.org 
#   [PATCH] PPC32: PPC44x lib support
#   
#   From: Matt Porter <mporter@kernel.crashing.org>
#   
#   Merge PPC44x library support against new OCP.
# 
# arch/ppc/syslib/ibm44x_common.h
#   2004/05/14 19:00:24-07:00 akpm@osdl.org +36 -0
#   PPC32: PPC44x lib support
# 
# arch/ppc/syslib/ibm440gx_common.h
#   2004/05/14 19:00:24-07:00 akpm@osdl.org +54 -0
#   PPC32: PPC44x lib support
# 
# include/asm-ppc/ibm4xx.h
#   2004/05/14 19:00:24-07:00 akpm@osdl.org +15 -2
#   PPC32: PPC44x lib support
# 
# include/asm-ppc/ibm44x.h
#   2004/05/14 19:00:24-07:00 akpm@osdl.org +115 -21
#   PPC32: PPC44x lib support
# 
# arch/ppc/syslib/ibm44x_common.h
#   2004/05/14 19:00:24-07:00 akpm@osdl.org +0 -0
#   BitKeeper file /home/torvalds/v2.6/linux/arch/ppc/syslib/ibm44x_common.h
# 
# arch/ppc/syslib/ibm440gx_common.h
#   2004/05/14 19:00:24-07:00 akpm@osdl.org +0 -0
#   BitKeeper file /home/torvalds/v2.6/linux/arch/ppc/syslib/ibm440gx_common.h
# 
# arch/ppc/syslib/ibm440gx_common.c
#   2004/05/14 19:00:24-07:00 akpm@osdl.org +212 -0
#   PPC32: PPC44x lib support
# 
# arch/ppc/syslib/ibm440gp_common.h
#   2004/05/14 19:00:24-07:00 akpm@osdl.org +3 -13
#   PPC32: PPC44x lib support
# 
# arch/ppc/syslib/ibm440gp_common.c
#   2004/05/14 19:00:24-07:00 akpm@osdl.org +3 -3
#   PPC32: PPC44x lib support
# 
# arch/ppc/syslib/Makefile
#   2004/05/14 19:00:24-07:00 akpm@osdl.org +2 -0
#   PPC32: PPC44x lib support
# 
# arch/ppc/syslib/ibm440gx_common.c
#   2004/05/14 19:00:24-07:00 akpm@osdl.org +0 -0
#   BitKeeper file /home/torvalds/v2.6/linux/arch/ppc/syslib/ibm440gx_common.c
# 
# ChangeSet
#   2004/05/14 19:53:37-07:00 akpm@osdl.org 
#   [PATCH] PPC32: Bubinga/405EP for new OCP
#   
#   From: Matt Porter <mporter@kernel.crashing.org>
#   
#   Merge Bubinga/405EP support against new OCP.
# 
# arch/ppc/platforms/4xx/ibm405ep.h
#   2004/05/14 19:00:23-07:00 akpm@osdl.org +148 -0
#   PPC32: Bubinga/405EP for new OCP
# 
# arch/ppc/platforms/4xx/ibm405ep.c
#   2004/05/14 19:00:23-07:00 akpm@osdl.org +134 -0
#   PPC32: Bubinga/405EP for new OCP
# 
# arch/ppc/platforms/4xx/bubinga.h
#   2004/05/14 19:00:23-07:00 akpm@osdl.org +69 -0
#   PPC32: Bubinga/405EP for new OCP
# 
# arch/ppc/platforms/4xx/bubinga.c
#   2004/05/14 19:00:23-07:00 akpm@osdl.org +263 -0
#   PPC32: Bubinga/405EP for new OCP
# 
# arch/ppc/configs/bubinga_defconfig
#   2004/05/14 19:00:23-07:00 akpm@osdl.org +593 -0
#   PPC32: Bubinga/405EP for new OCP
# 
# arch/ppc/platforms/4xx/ibm405ep.h
#   2004/05/14 19:00:23-07:00 akpm@osdl.org +0 -0
#   BitKeeper file /home/torvalds/v2.6/linux/arch/ppc/platforms/4xx/ibm405ep.h
# 
# arch/ppc/platforms/4xx/ibm405ep.c
#   2004/05/14 19:00:23-07:00 akpm@osdl.org +0 -0
#   BitKeeper file /home/torvalds/v2.6/linux/arch/ppc/platforms/4xx/ibm405ep.c
# 
# arch/ppc/platforms/4xx/bubinga.h
#   2004/05/14 19:00:23-07:00 akpm@osdl.org +0 -0
#   BitKeeper file /home/torvalds/v2.6/linux/arch/ppc/platforms/4xx/bubinga.h
# 
# arch/ppc/platforms/4xx/bubinga.c
#   2004/05/14 19:00:23-07:00 akpm@osdl.org +0 -0
#   BitKeeper file /home/torvalds/v2.6/linux/arch/ppc/platforms/4xx/bubinga.c
# 
# arch/ppc/configs/bubinga_defconfig
#   2004/05/14 19:00:23-07:00 akpm@osdl.org +0 -0
#   BitKeeper file /home/torvalds/v2.6/linux/arch/ppc/configs/bubinga_defconfig
# 
# ChangeSet
#   2004/05/14 19:53:26-07:00 akpm@osdl.org 
#   [PATCH] PPC32: New OCP core support (updated)
#   
#   From: Matt Porter <mporter@kernel.crashing.org>
#   
#   New OCP infrastructure ported from 2.4 along with several enhancements. 
#   Updated patch with comments from hch and Valdis.
# 
# arch/ppc/syslib/ocp.c
#   2004/05/14 19:53:20-07:00 akpm@osdl.org +493 -0
# 
# include/asm-ppc/ocp_ids.h
#   2004/05/14 19:00:23-07:00 akpm@osdl.org +17 -50
#   PPC32: New OCP core support (updated)
# 
# include/asm-ppc/ocp.h
#   2004/05/14 19:00:23-07:00 akpm@osdl.org +119 -120
#   PPC32: New OCP core support (updated)
# 
# arch/ppc/syslib/ocp.c
#   2004/05/14 19:53:20-07:00 akpm@osdl.org +0 -0
#   BitKeeper file /home/torvalds/v2.6/linux/arch/ppc/syslib/ocp.c
# 
# arch/ppc/syslib/Makefile
#   2004/05/14 19:00:23-07:00 akpm@osdl.org +1 -0
#   PPC32: New OCP core support (updated)
# 
# arch/ppc/kernel/setup.c
#   2004/05/14 19:00:23-07:00 akpm@osdl.org +7 -0
#   PPC32: New OCP core support (updated)
# 
# arch/ppc/Makefile
#   2004/05/14 19:00:23-07:00 akpm@osdl.org +0 -1
#   PPC32: New OCP core support (updated)
# 
# arch/ppc/Kconfig
#   2004/05/14 19:00:23-07:00 akpm@osdl.org +1 -1
#   PPC32: New OCP core support (updated)
# 
# BitKeeper/deleted/.del-ocp-probe.c~bab4d61fdc04beeb
#   2004/05/14 19:53:20-07:00 akpm@osdl.org +0 -0
#   Delete: arch/ppc/ocp/ocp-probe.c
# 
# BitKeeper/deleted/.del-ocp-driver.c~a891b4ae6c107073
#   2004/05/14 19:53:20-07:00 akpm@osdl.org +0 -0
#   Delete: arch/ppc/ocp/ocp-driver.c
# 
# BitKeeper/deleted/.del-ocp.c~7c0024f74323dc24
#   2004/05/14 19:53:19-07:00 akpm@osdl.org +0 -0
#   Delete: arch/ppc/ocp/ocp.c
# 
# BitKeeper/deleted/.del-Makefile~fe51e4a3cf9d7a4d
#   2004/05/14 19:53:19-07:00 akpm@osdl.org +0 -0
#   Delete: arch/ppc/ocp/Makefile
# 
# ChangeSet
#   2004/05/14 19:52:43-07:00 akpm@osdl.org 
#   [PATCH] PPC32: Add Book E / PPC44x specific exception support
#   
#   From: Matt Porter <mporter@kernel.crashing.org>
#   
#   Adds general Book E machine check exception support and PPC44x-specific
#   machine check exception implementation.
# 
# include/asm-ppc/reg_booke.h
#   2004/05/14 19:00:23-07:00 akpm@osdl.org +16 -0
#   PPC32: Add Book E / PPC44x specific exception support
# 
# include/asm-ppc/ppc_asm.h
#   2004/05/14 19:00:23-07:00 akpm@osdl.org +2 -0
#   PPC32: Add Book E / PPC44x specific exception support
# 
# arch/ppc/kernel/traps.c
#   2004/05/14 19:00:23-07:00 akpm@osdl.org +30 -1
#   PPC32: Add Book E / PPC44x specific exception support
# 
# arch/ppc/kernel/head_44x.S
#   2004/05/14 19:00:23-07:00 akpm@osdl.org +151 -46
#   PPC32: Add Book E / PPC44x specific exception support
# 
# arch/ppc/kernel/entry.S
#   2004/05/14 19:00:23-07:00 akpm@osdl.org +84 -1
#   PPC32: Add Book E / PPC44x specific exception support
# 
# ChangeSet
#   2004/05/14 19:52:31-07:00 akpm@osdl.org 
#   [PATCH] PPC32: Add Book E / PPC44x specific exception support
#   
#   From: Matt Porter <mporter@kernel.crashing.org>
#   
#   Adds general Book E debug exception support and PPC44x-specific debug
#   exception implementation.
# 
# include/asm-ppc/reg_booke.h
#   2004/05/14 19:00:22-07:00 akpm@osdl.org +1 -0
#   PPC32: Add Book E / PPC44x specific exception support
# 
# arch/ppc/kernel/head_44x.S
#   2004/05/14 19:00:22-07:00 akpm@osdl.org +82 -83
#   PPC32: Add Book E / PPC44x specific exception support
# 
# arch/ppc/kernel/entry.S
#   2004/05/14 19:00:22-07:00 akpm@osdl.org +32 -12
#   PPC32: Add Book E / PPC44x specific exception support
# 
# ChangeSet
#   2004/05/14 19:52:21-07:00 akpm@osdl.org 
#   [PATCH] PPC32: Fix copy prefetch on non coherent PPCs
#   
#   From: Matt Porter <mporter@kernel.crashing.org>
#   
#   This patch fixes the condition where prefetching cache lines beyond a
#   buffer can cause data corruption on non cache coherent PPCs.  It is a port
#   of the version that went into 2.4.  From Eugene Surovegin
#   <ebs@ebshome.net>.
# 
# arch/ppc/lib/string.S
#   2004/05/14 19:00:22-07:00 akpm@osdl.org +38 -24
#   PPC32: Fix copy prefetch on non coherent PPCs
# 
# arch/ppc/kernel/misc.S
#   2004/05/14 19:00:22-07:00 akpm@osdl.org +21 -9
#   PPC32: Fix copy prefetch on non coherent PPCs
# 
# ChangeSet
#   2004/05/14 19:52:10-07:00 akpm@osdl.org 
#   [PATCH] PPC32: Fix __flush_dcache_icache_phys() for Book E
#   
#   From: Matt Porter <mporter@kernel.crashing.org>
#   
#   This patch implements/uses __flush_dcache_icache_page() which kmaps on a
#   Book E part, but keeps the existing behavior on other PowerPCs which can
#   disable the MMU.
# 
# include/asm-ppc/cacheflush.h
#   2004/05/14 19:00:22-07:00 akpm@osdl.org +1 -1
#   PPC32: Fix __flush_dcache_icache_phys() for Book E
# 
# arch/ppc/mm/init.c
#   2004/05/14 19:00:22-07:00 akpm@osdl.org +11 -1
#   PPC32: Fix __flush_dcache_icache_phys() for Book E
# 
# arch/ppc/mm/fault.c
#   2004/05/14 19:00:22-07:00 akpm@osdl.org +1 -2
#   PPC32: Fix __flush_dcache_icache_phys() for Book E
# 
# ChangeSet
#   2004/05/14 19:51:59-07:00 akpm@osdl.org 
#   [PATCH] export clear_pages on ppc32
#   
#   From: Olaf Hering <olh@suse.de>
#   
#   ext3 as module is not possible in 2.6.6, clear_pages, called from clear_page,
#   is not exported.
#   
#   Also, unexport clear_page(), which is an inline.
# 
# arch/ppc/kernel/ppc_ksyms.c
#   2004/05/14 19:00:22-07:00 akpm@osdl.org +1 -1
#   export clear_pages on ppc32
# 
# ChangeSet
#   2004/05/14 19:51:48-07:00 akpm@osdl.org 
#   [PATCH] befs: inode->i_flags thinko fix
#   
#   Jorn Engel <joern@wohnheim.fh-wedel.de>
#   
#   inode->i_flags should never contain fs-specific flags.  In fact, it doesn't;
#   the checks against it cause "chattr +T" to be useless for ext[23].  Same bug
#   was in befs as well.
# 
# fs/befs/linuxvfs.c
#   2004/05/14 19:00:21-07:00 akpm@osdl.org +1 -1
#   befs: inode->i_flags thinko fix
# 
# ChangeSet
#   2004/05/14 19:51:37-07:00 akpm@osdl.org 
#   [PATCH] befs: maintainer update
#   
#   From: "Sergey S. Kostyliov" <rathamahata@php4.ru>
#   
#   Acked by Will Dyson.
# 
# Documentation/filesystems/befs.txt
#   2004/05/14 19:00:21-07:00 akpm@osdl.org +4 -2
#   befs: maintainer update
# 
# ChangeSet
#   2004/05/14 19:51:27-07:00 akpm@osdl.org 
#   [PATCH] befs: debugging code cleanup
#   
#   From: "Sergey S. Kostyliov" <rathamahata@php4.ru>
#   
#   - Reduce stack usage.
#   - Kill useless duplication of error and warning messages when debug is on. Old
#   	behaviour was:
#   ...
#   BeFS(hda1): 
# 
# fs/befs/debug.c
#   2004/05/14 19:00:21-07:00 akpm@osdl.org +23 -6
#   befs: debugging code cleanup
# 
# ChangeSet
#   2004/05/14 19:51:16-07:00 akpm@osdl.org 
#   [PATCH] befs: typo fix
#   
#   From: "Sergey S. Kostyliov" <rathamahata@php4.ru>
#   
#   Fix really old typo in config help
# 
# fs/Kconfig
#   2004/05/14 19:00:21-07:00 akpm@osdl.org +1 -1
#   befs: typo fix
# 
# ChangeSet
#   2004/05/14 19:51:06-07:00 akpm@osdl.org 
#   [PATCH] befs: binary search microoptimisation
#   
#   From: "Sergey S. Kostyliov" <rathamahata@php4.ru>
#   
#   Move value initialisation out of the loop body.
# 
# fs/befs/btree.c
#   2004/05/14 19:00:21-07:00 akpm@osdl.org +3 -1
#   befs: binary search microoptimisation
# 
# ChangeSet
#   2004/05/14 19:50:55-07:00 akpm@osdl.org 
#   [PATCH] befs: microoptimisation, use befs_bread() instead of befs_bread_iaddr()
#   
#   From: "Sergey S. Kostyliov" <rathamahata@php4.ru>
#   
#   We already have block number (inode->i_ino), so there is no need to calculate
#   it from befs_block_run before sb_bread() call (this is what befs_bread_iaddr()
#   do).
# 
# fs/befs/linuxvfs.c
#   2004/05/14 19:00:20-07:00 akpm@osdl.org +1 -1
#   befs: microoptimisation, use befs_bread() instead of befs_bread_iaddr()
# 
# ChangeSet
#   2004/05/14 19:50:44-07:00 akpm@osdl.org 
#   [PATCH] befs: LBD support
#   
#   From: "Sergey S. Kostyliov" <rathamahata@php4.ru>
#   
#   LBD patch merged long time ago, so it is safe to pass u64 block numbers to
#   sb_bread() when sector_t is large enough.
# 
# fs/befs/linuxvfs.c
#   2004/05/14 19:00:20-07:00 akpm@osdl.org +7 -0
#   befs: LBD support
# 
# fs/befs/io.c
#   2004/05/14 19:00:20-07:00 akpm@osdl.org +3 -18
#   befs: LBD support
# 
# fs/befs/befs.h
#   2004/05/14 19:00:20-07:00 akpm@osdl.org +0 -3
#   befs: LBD support
# 
# ChangeSet
#   2004/05/14 19:50:33-07:00 akpm@osdl.org 
#   [PATCH] s390: network driver
#   
#   From: Martin Schwidefsky <schwidefsky@de.ibm.com>
#   
#   Network driver changes:
#    - lcs: Add missing irb error checking.
#    - lcs: Fix multicasting.
#    - lcs: Use a seperate lock (ipm_lock) for multicast list.
#    - lcs: Add missing in_dev_put in multicase address list handling.
#    - iucv: Set static variables to NULL after kfree.
#    - iucv: Do bus_unregister if module initialization fails.
#    - netiucv: Convert iucvMagic to EBCDIC in con_action_start.
#    - netiucv: Remove administration of ifno-stuff for device name,
#    - netiucv: Add attribute to remove a netiucv device.
#    - qeth: Add version string that is displayed at driver load time.
#    - qeth: Fix memory leak in qeth_arp_query.
#    - qeth: Remove duplicate case statements in qeth_do_ioctl.
#    - qeth: Fix OSA broadcast filtering.
#    - qeth: Increase timeout for purge ARP cache IPA.
#    - qeth: Fix hsi device naming.
#    - qeth: Add do_QDIO count to qeth performance statistics.
#    - qeth: Allow writing to IP address takeover attribute only in
#            state DOWN or RECOVER.
#    - qeth: Fix hang when removing a vlan device.
#    - qeth: Cleanup error messages for ARP commands.
#    - qeth: Return EOPNOTSUPP for purge ARP on HiperSockets.
#    - qeth: Drop skbs if the net_device of a qeth device is down.
#    - qeth: Simplify ip address list processing.
# 
# include/asm-s390/qeth.h
#   2004/05/14 19:00:20-07:00 akpm@osdl.org +7 -9
#   s390: network driver
# 
# drivers/s390/net/qeth_sys.c
#   2004/05/14 19:00:20-07:00 akpm@osdl.org +7 -1
#   s390: network driver
# 
# drivers/s390/net/qeth_proc.c
#   2004/05/14 19:00:20-07:00 akpm@osdl.org +19 -7
#   s390: network driver
# 
# drivers/s390/net/qeth_mpc.h
#   2004/05/14 19:00:20-07:00 akpm@osdl.org +34 -31
#   s390: network driver
# 
# drivers/s390/net/qeth_mpc.c
#   2004/05/14 19:00:20-07:00 akpm@osdl.org +3 -2
#   s390: network driver
# 
# drivers/s390/net/qeth_main.c
#   2004/05/14 19:00:20-07:00 akpm@osdl.org +272 -203
#   s390: network driver
# 
# drivers/s390/net/qeth_fs.h
#   2004/05/14 19:00:20-07:00 akpm@osdl.org +5 -0
#   s390: network driver
# 
# drivers/s390/net/qeth.h
#   2004/05/14 19:00:20-07:00 akpm@osdl.org +8 -4
#   s390: network driver
# 
# drivers/s390/net/netiucv.c
#   2004/05/14 19:00:20-07:00 akpm@osdl.org +88 -28
#   s390: network driver
# 
# drivers/s390/net/lcs.h
#   2004/05/14 19:00:20-07:00 akpm@osdl.org +2 -1
#   s390: network driver
# 
# drivers/s390/net/lcs.c
#   2004/05/14 19:00:20-07:00 akpm@osdl.org +71 -28
#   s390: network driver
# 
# drivers/s390/net/iucv.c
#   2004/05/14 19:00:20-07:00 akpm@osdl.org +12 -6
#   s390: network driver
# 
# ChangeSet
#   2004/05/14 19:50:22-07:00 akpm@osdl.org 
#   [PATCH] s390: zfcp host adapter
#   
#   From: Martin Schwidefsky <schwidefsky@de.ibm.com>
#   
#   zfcp host adapter change:
#    - Prevent infinite retry of SCSI commands when FCP adapter is unavailable.
#    - Always queue error recovery structure to the error recovery running list.
#    - Add help text to zfcp config option.
# 
# drivers/scsi/Kconfig
#   2004/05/14 19:00:20-07:00 akpm@osdl.org +10 -1
#   s390: zfcp host adapter
# 
# drivers/s390/scsi/zfcp_fsf.c
#   2004/05/14 19:00:20-07:00 akpm@osdl.org +2 -2
#   s390: zfcp host adapter
# 
# drivers/s390/scsi/zfcp_erp.c
#   2004/05/14 19:00:20-07:00 akpm@osdl.org +3 -2
#   s390: zfcp host adapter
# 
# drivers/s390/scsi/zfcp_ccw.c
#   2004/05/14 19:00:20-07:00 akpm@osdl.org +7 -1
#   s390: zfcp host adapter
# 
# ChangeSet
#   2004/05/14 19:50:11-07:00 akpm@osdl.org 
#   [PATCH] s390: 3270 console driver
#   
#   From: Martin Schwidefsky <schwidefsky@de.ibm.com>
#   
#   3270 device driver change:
#    - Don't allow activation of views while the initial size sensing is still
#      in progress. Replace RAW3270_FLAGS_SHUTDOWN with RAW3270_FLAGS_READY.
#    - Make 3270 views loadable as modules.
# 
# drivers/s390/char/tty3270.c
#   2004/05/14 19:00:19-07:00 akpm@osdl.org +33 -4
#   s390: 3270 console driver
# 
# drivers/s390/char/raw3270.h
#   2004/05/14 19:00:19-07:00 akpm@osdl.org +4 -3
#   s390: 3270 console driver
# 
# drivers/s390/char/raw3270.c
#   2004/05/14 19:00:19-07:00 akpm@osdl.org +93 -36
#   s390: 3270 console driver
# 
# drivers/s390/char/Makefile
#   2004/05/14 19:00:19-07:00 akpm@osdl.org +3 -2
#   s390: 3270 console driver
# 
# drivers/s390/Kconfig
#   2004/05/14 19:00:19-07:00 akpm@osdl.org +18 -7
#   s390: 3270 console driver
# 
# arch/s390/defconfig
#   2004/05/14 19:00:19-07:00 akpm@osdl.org +2 -0
#   s390: 3270 console driver
# 
# ChangeSet
#   2004/05/14 19:50:00-07:00 akpm@osdl.org 
#   [PATCH] s390: dasd driver
#   
#   From: Martin Schwidefsky <schwidefsky@de.ibm.com>
#   
#   dasd driver changes:
#    - Do error recovery for error recovery requests.
#    - Retry request if the start_IO failed because of a timeout.
# 
# drivers/s390/block/dasd_erp.c
#   2004/05/14 19:00:19-07:00 akpm@osdl.org +3 -2
#   s390: dasd driver
# 
# drivers/s390/block/dasd_eckd.c
#   2004/05/14 19:00:19-07:00 akpm@osdl.org +2 -2
#   s390: dasd driver
# 
# drivers/s390/block/dasd.c
#   2004/05/14 19:00:19-07:00 akpm@osdl.org +11 -10
#   s390: dasd driver
# 
# ChangeSet
#   2004/05/14 19:49:49-07:00 akpm@osdl.org 
#   [PATCH] s390: common i/o layer
#   
#   From: Martin Schwidefsky <schwidefsky@de.ibm.com>
#   
#   Common i/o layer changes:
#    - Delay unregister/register of ccw devices reappering on a different
#      subchannel. Search for the old ccw_device & subchannel for the
#      reattached device and deregister it too to avoid inconsistencies.
#    - Fix path grouping for devices that present command reject for
#      SetPGID but not for SensePGID.
# 
# drivers/s390/cio/device_pgid.c
#   2004/05/14 19:00:19-07:00 akpm@osdl.org +4 -0
#   s390: common i/o layer
# 
# drivers/s390/cio/device_fsm.c
#   2004/05/14 19:00:19-07:00 akpm@osdl.org +7 -4
#   s390: common i/o layer
# 
# drivers/s390/cio/device.c
#   2004/05/14 19:00:19-07:00 akpm@osdl.org +83 -9
#   s390: common i/o layer
# 
# drivers/s390/cio/css.c
#   2004/05/14 19:00:19-07:00 akpm@osdl.org +16 -7
#   s390: common i/o layer
# 
# ChangeSet
#   2004/05/14 19:49:38-07:00 akpm@osdl.org 
#   [PATCH] s390: core
#   
#   From: Martin Schwidefsky <schwidefsky@de.ibm.com>
#   
#   s390 core changes:
#    - Rename idle_cpu_mask to nohz_cpu_mask as agreed with Dipankar.
#    - Refine compiler version check for "Q" constraints in uaccess.h.
#    - Store per process ptrace information to the correct place.
#    - Fix per cpu data access for 64-bit modules.
#    - Add topology_init function for cpu hotplug.
#    - Define TASK_SIZE dependent on TIF_31BIT and define MM_VM_SIZE
#      to 4TB to get rid of elf_map32 and arch_get_unmapped_area.
# 
# kernel/sched.c
#   2004/05/14 19:00:18-07:00 akpm@osdl.org +3 -3
#   s390: core
# 
# kernel/rcupdate.c
#   2004/05/14 19:00:18-07:00 akpm@osdl.org +1 -1
#   s390: core
# 
# include/linux/sched.h
#   2004/05/14 19:00:18-07:00 akpm@osdl.org +1 -1
#   s390: core
# 
# include/asm-s390/uaccess.h
#   2004/05/14 19:00:18-07:00 akpm@osdl.org +2 -2
#   s390: core
# 
# include/asm-s390/processor.h
#   2004/05/14 19:00:18-07:00 akpm@osdl.org +7 -4
#   s390: core
# 
# include/asm-s390/pgtable.h
#   2004/05/14 19:00:18-07:00 akpm@osdl.org +0 -4
#   s390: core
# 
# include/asm-s390/percpu.h
#   2004/05/14 19:00:18-07:00 akpm@osdl.org +18 -2
#   s390: core
# 
# arch/s390/mm/init.c
#   2004/05/14 19:00:18-07:00 akpm@osdl.org +1 -1
#   s390: core
# 
# arch/s390/kernel/time.c
#   2004/05/14 19:00:18-07:00 akpm@osdl.org +3 -3
#   s390: core
# 
# arch/s390/kernel/sys_s390.c
#   2004/05/14 19:00:18-07:00 akpm@osdl.org +0 -32
#   s390: core
# 
# arch/s390/kernel/smp.c
#   2004/05/14 19:00:18-07:00 akpm@osdl.org +19 -0
#   s390: core
# 
# arch/s390/kernel/module.c
#   2004/05/14 19:00:18-07:00 akpm@osdl.org +2 -1
#   s390: core
# 
# arch/s390/kernel/entry64.S
#   2004/05/14 19:00:18-07:00 akpm@osdl.org +9 -7
#   s390: core
# 
# arch/s390/kernel/entry.S
#   2004/05/14 19:00:18-07:00 akpm@osdl.org +9 -7
#   s390: core
# 
# arch/s390/kernel/compat_exec.c
#   2004/05/14 19:00:18-07:00 akpm@osdl.org +0 -3
#   s390: core
# 
# arch/s390/kernel/binfmt_elf32.c
#   2004/05/14 19:00:18-07:00 akpm@osdl.org +1 -22
#   s390: core
# 
# arch/s390/defconfig
#   2004/05/14 19:00:18-07:00 akpm@osdl.org +2 -1
#   s390: core
# 
# ChangeSet
#   2004/05/14 19:49:27-07:00 akpm@osdl.org 
#   [PATCH] Add del_single_shot_timer()
#   
#   From: Geoff Gustafson <geoff@linux.jf.intel.com>,
#         "Chen, Kenneth W" <kenneth.w.chen@intel.com>,
#         Ingo Molnar <mingo@elte.hu>,
#         me.
#   
#   The big-SMP guys are seeing high CPU load due to del_timer_sync()'s
#   inefficiencies.  The callers are fs/aio.c and schedule_timeout().
#   
#   We note that neither of these callers' timer handlers actually re-add the
#   timer - they are single-shot.
#   
#   So we don't need all that complexity in del_timer_sync() - we can just run
#   del_timer() and if that worked we know the timer is dead.
#   
#   Add del_single_shot_timer(), export it to modules and use it in AIO and
#   schedule_timeout().
#   
#   
#   (these numbers are for an earlier patch, but they'll be close)
#   
#   Before:             32p     4p
#        Warm cache   29,000    505
#        Cold cache   37,800   1220
#   
#   After:              32p     4p
#        Warm cache       95     88
#        Cold cache    1,800    140
#   
#   [Measurements are CPU cycles spent in a call to del_timer_sync, the average
#   of 1000 calls. 32p is 16-node NUMA, 4p is SMP.]
#   
#   (I cleaned up a few things and added some commentary)
# 
# kernel/timer.c
#   2004/05/14 19:00:18-07:00 akpm@osdl.org +38 -4
#   Add del_single_shot_timer()
# 
# include/linux/timer.h
#   2004/05/14 19:00:18-07:00 akpm@osdl.org +3 -1
#   Add del_single_shot_timer()
# 
# fs/aio.c
#   2004/05/14 19:00:18-07:00 akpm@osdl.org +1 -1
#   Add del_single_shot_timer()
# 
# ChangeSet
#   2004/05/14 19:49:16-07:00 akpm@osdl.org 
#   [PATCH] H8/300: more cleanup
#   
#   From: Yoshinori Sato <ysato@users.sourceforge.jp>
#   
#   - gcc-3.4 warning fix.
#   - io access address fix.
#   - cleanup code.
# 
# include/asm-h8300/timex.h
#   2004/05/14 19:00:18-07:00 akpm@osdl.org +1 -5
#   H8/300: more cleanup
# 
# include/asm-h8300/semaphore.h
#   2004/05/14 19:00:18-07:00 akpm@osdl.org +12 -12
#   H8/300: more cleanup
# 
# include/asm-h8300/io.h
#   2004/05/14 19:00:18-07:00 akpm@osdl.org +18 -14
#   H8/300: more cleanup
# 
# arch/h8300/platform/h8s/generic/timer.c
#   2004/05/14 19:00:18-07:00 akpm@osdl.org +17 -7
#   H8/300: more cleanup
# 
# arch/h8300/platform/h8s/edosk2674/timer.c
#   2004/05/14 19:00:18-07:00 akpm@osdl.org +17 -14
#   H8/300: more cleanup
# 
# arch/h8300/platform/h8300h/ptrace_h8300h.c
#   2004/05/14 19:00:18-07:00 akpm@osdl.org +4 -2
#   H8/300: more cleanup
# 
# arch/h8300/platform/h8300h/h8max/timer.c
#   2004/05/14 19:00:18-07:00 akpm@osdl.org +11 -4
#   H8/300: more cleanup
# 
# arch/h8300/platform/h8300h/generic/timer.c
#   2004/05/14 19:00:18-07:00 akpm@osdl.org +28 -21
#   H8/300: more cleanup
# 
# arch/h8300/platform/h8300h/aki3068net/timer.c
#   2004/05/14 19:00:18-07:00 akpm@osdl.org +11 -4
#   H8/300: more cleanup
# 
# arch/h8300/mm/init.c
#   2004/05/14 19:00:18-07:00 akpm@osdl.org +3 -3
#   H8/300: more cleanup
# 
# arch/h8300/kernel/traps.c
#   2004/05/14 19:00:18-07:00 akpm@osdl.org +6 -0
#   H8/300: more cleanup
# 
# arch/h8300/kernel/process.c
#   2004/05/14 19:00:18-07:00 akpm@osdl.org +6 -7
#   H8/300: more cleanup
# 
# ChangeSet
#   2004/05/14 19:49:05-07:00 akpm@osdl.org 
#   [PATCH] H8/300: delete headers
#   
#   From: Yoshinori Sato <ysato@users.sourceforge.jp>
#   
#   - Delete obsolete header files
# 
# arch/h8300/Makefile
#   2004/05/14 19:00:17-07:00 akpm@osdl.org +2 -7
#   H8/300: delete headers
# 
# BitKeeper/deleted/.del-machine-depend.h~74b77fb056f4de47
#   2004/05/14 19:49:00-07:00 akpm@osdl.org +0 -0
#   Delete: include/asm-h8300/h8max/machine-depend.h
# 
# BitKeeper/deleted/.del-timer_rate.h~a6bae69a4678b24d
#   2004/05/14 19:48:59-07:00 akpm@osdl.org +0 -0
#   Delete: include/asm-h8300/generic/timer_rate.h
# 
# BitKeeper/deleted/.del-machine-depend.h~590c96cd416b17cc
#   2004/05/14 19:48:59-07:00 akpm@osdl.org +0 -0
#   Delete: include/asm-h8300/aki3068net/machine-depend.h
# 
# BitKeeper/deleted/.del-machine-depend.h~48f02aa4daf3fe51
#   2004/05/14 19:48:59-07:00 akpm@osdl.org +0 -0
#   Delete: include/asm-h8300/edosk2674/machine-depend.h
# 
# BitKeeper/deleted/.del-machine-depend.h~1002669f4725299
#   2004/05/14 19:48:59-07:00 akpm@osdl.org +0 -0
#   Delete: include/asm-h8300/generic/machine-depend.h
# 
# BitKeeper/deleted/.del-h8300_smsc.h~76f44462fbd3ce56
#   2004/05/14 19:48:59-07:00 akpm@osdl.org +0 -0
#   Delete: include/asm-h8300/h8300_smsc.h
# 
# ChangeSet
#   2004/05/14 19:48:53-07:00 akpm@osdl.org 
#   [PATCH] H8/300: Kconfig
#   
#   From: Yoshinori Sato <ysato@users.sourceforge.jp>
#   
#   - Separate taget depends config.
# 
# arch/h8300/Kconfig.cpu
#   2004/05/14 19:00:17-07:00 akpm@osdl.org +183 -0
#   H8/300: Kconfig
# 
# arch/h8300/Kconfig
#   2004/05/14 19:00:17-07:00 akpm@osdl.org +1 -116
#   H8/300: Kconfig
# 
# arch/h8300/Kconfig.cpu
#   2004/05/14 19:00:17-07:00 akpm@osdl.org +0 -0
#   BitKeeper file /home/torvalds/v2.6/linux/arch/h8300/Kconfig.cpu
# 
# ChangeSet
#   2004/05/14 19:48:42-07:00 akpm@osdl.org 
#   [PATCH] H8/300: ne driver
#   
#   From: Yoshinori Sato <ysato@users.sourceforge.jp>
#   
#   - ne2k compatible NIC support
# 
# drivers/net/ne-h8300.c
#   2004/05/14 19:00:17-07:00 akpm@osdl.org +657 -0
#   H8/300: ne driver
# 
# drivers/net/ne-h8300.c
#   2004/05/14 19:00:17-07:00 akpm@osdl.org +0 -0
#   BitKeeper file /home/torvalds/v2.6/linux/drivers/net/ne-h8300.c
# 
# drivers/net/Space.c
#   2004/05/14 19:00:17-07:00 akpm@osdl.org +2 -1
#   H8/300: ne driver
# 
# drivers/net/Makefile
#   2004/05/14 19:00:17-07:00 akpm@osdl.org +1 -0
#   H8/300: ne driver
# 
# drivers/net/Kconfig
#   2004/05/14 19:00:17-07:00 akpm@osdl.org +7 -0
#   H8/300: ne driver
# 
# drivers/net/8390.h
#   2004/05/14 19:00:17-07:00 akpm@osdl.org +1 -1
#   H8/300: ne driver
# 
# ChangeSet
#   2004/05/14 19:48:31-07:00 akpm@osdl.org 
#   [PATCH] H8/300: SCI driver fix
#   
#   From: Yoshinori Sato <ysato@users.sourceforge.jp>
#   
#   - fix h8300 depend setup sequence
# 
# drivers/serial/sh-sci.c
#   2004/05/14 19:00:17-07:00 akpm@osdl.org +15 -5
#   H8/300: SCI driver fix
# 
# ChangeSet
#   2004/05/14 19:48:20-07:00 akpm@osdl.org 
#   [PATCH] H8/300: preempt support
#   
#   From: Yoshinori Sato <ysato@users.sourceforge.jp>
#   
#   - add preempt support
#   - add new syscalls
#   - code cleanup
# 
# include/asm-h8300/thread_info.h
#   2004/05/14 19:00:16-07:00 akpm@osdl.org +7 -5
#   H8/300: preempt support
# 
# include/asm-h8300/hardirq.h
#   2004/05/14 19:00:16-07:00 akpm@osdl.org +1 -1
#   H8/300: preempt support
# 
# arch/h8300/platform/h8s/entry.S
#   2004/05/14 19:00:16-07:00 akpm@osdl.org +48 -33
#   H8/300: preempt support
# 
# arch/h8300/platform/h8300h/entry.S
#   2004/05/14 19:00:16-07:00 akpm@osdl.org +47 -32
#   H8/300: preempt support
# 
# arch/h8300/kernel/syscalls.S
#   2004/05/14 19:00:16-07:00 akpm@osdl.org +19 -16
#   H8/300: preempt support
# 
# ChangeSet
#   2004/05/14 19:48:09-07:00 akpm@osdl.org 
#   [PATCH] H/8300 pic support fix
#   
#   From: Yoshinori Sato <ysato@users.sourceforge.jp>
#   
#   Sorry. There was the file which lacked.
# 
# include/asm-h8300/sigcontext.h
#   2004/05/14 19:00:16-07:00 akpm@osdl.org +1 -0
#   H/8300 pic support fix
# 
# ChangeSet
#   2004/05/14 19:47:58-07:00 akpm@osdl.org 
#   [PATCH] H8/300: pic support
#   
#   From: Yoshinori Sato <ysato@users.sourceforge.jp>
#   
#   - add PIC binary support
# 
# include/asm-v850/flat.h
#   2004/05/14 19:00:16-07:00 akpm@osdl.org +2 -1
#   H8/300: pic support
# 
# include/asm-sh/flat.h
#   2004/05/14 19:00:16-07:00 akpm@osdl.org +1 -1
#   H8/300: pic support
# 
# include/asm-m68knommu/flat.h
#   2004/05/14 19:00:16-07:00 akpm@osdl.org +1 -1
#   H8/300: pic support
# 
# include/asm-h8300/processor.h
#   2004/05/14 19:00:16-07:00 akpm@osdl.org +13 -5
#   H8/300: pic support
# 
# include/asm-h8300/flat.h
#   2004/05/14 19:00:16-07:00 akpm@osdl.org +2 -1
#   H8/300: pic support
# 
# fs/binfmt_flat.c
#   2004/05/14 19:00:16-07:00 akpm@osdl.org +1 -1
#   H8/300: pic support
# 
# arch/h8300/kernel/signal.c
#   2004/05/14 19:00:16-07:00 akpm@osdl.org +4 -0
#   H8/300: pic support
# 
# ChangeSet
#   2004/05/14 19:47:47-07:00 akpm@osdl.org 
#   [PATCH] H8/300: ldscripts fix
#   
#   From: Yoshinori Sato <ysato@users.sourceforge.jp>
#   
#   - symbol prefix (use h8300 and v850) support
#   - include headers
# 
# include/asm-generic/vmlinux.lds.h
#   2004/05/14 19:00:16-07:00 akpm@osdl.org +16 -12
#   H8/300: ldscripts fix
# 
# arch/v850/kernel/vmlinux.lds.S
#   2004/05/14 19:00:16-07:00 akpm@osdl.org +1 -0
#   H8/300: ldscripts fix
# 
# arch/h8300/kernel/vmlinux.lds.S
#   2004/05/14 19:00:16-07:00 akpm@osdl.org +3 -0
#   H8/300: ldscripts fix
# 
# ChangeSet
#   2004/05/14 19:47:36-07:00 akpm@osdl.org 
#   [PATCH] H8/300: bitops.h add find_next_bit
#   
#   From: Yoshinori Sato <ysato@users.sourceforge.jp>
#   
#   - add find_next_bit
# 
# include/asm-h8300/bitops.h
#   2004/05/14 19:00:16-07:00 akpm@osdl.org +52 -13
#   H8/300: bitops.h add find_next_bit
# 
# ChangeSet
#   2004/05/14 19:47:27-07:00 akpm@osdl.org 
#   [PATCH] dentry layout tweaks
#   
#   Lookup typically touches three fields of the dentry: d_bucket, d_name.hash and
#   d_parent.
#   
#   Change the layout of things so that these will always be in the same
#   cacheline.
# 
# include/linux/dcache.h
#   2004/05/14 19:00:15-07:00 akpm@osdl.org +15 -4
#   dentry layout tweaks
# 
# ChangeSet
#   2004/05/14 19:47:16-07:00 akpm@osdl.org 
#   [PATCH] more dentry shrinkage
#   
#   - d_vfs_flags can be removed - just use d_flags.  All modifications of
#     dentry->d_flags are under dentry->d_lock.
#   
#   On x86 this takes the internal string size up to 40 bytes.  The
#   internal/external ratio on my 1.5M files hits 96%.
# 
# include/linux/dcache.h
#   2004/05/14 19:00:15-07:00 akpm@osdl.org +13 -13
#   more dentry shrinkage
# 
# fs/dcache.c
#   2004/05/14 19:00:15-07:00 akpm@osdl.org +9 -9
#   more dentry shrinkage
# 
# ChangeSet
#   2004/05/14 19:47:06-07:00 akpm@osdl.org 
#   [PATCH] dentry d_bucket fix
#   
#   The gap between checking d_bucket and sampling d_move_count looks like a bug
#   to me.
#   
#   It feels safer to be checking d_bucket after taking the lock, when we know
#   that it is stable.
#   
#   And it's a little faster to check d_bucket after having checked the hash
#   rather than before.
# 
# fs/dcache.c
#   2004/05/14 19:00:15-07:00 akpm@osdl.org +8 -6
#   dentry d_bucket fix
# 
# ChangeSet
#   2004/05/14 19:46:55-07:00 akpm@osdl.org 
#   [PATCH] dentry qstr consolidation
#   
#   When dentries are given an external name we currently allocate an entire qstr
#   for the external name.
#   
#   This isn't needed.  We can use the internal qstr and kmalloc only the string
#   itself.  This saves 12 bytes from externally-allocated names and 4 bytes from
#   the dentry itself.
#   
#   The saving of 4 bytes from the dentry doesn't actually decrease the dentry's
#   storage requirements, but it makes four more bytes available for internal
#   names, taking the internal/external ratio from 89% up to 93% on my 1.5M files.
#   
#   
#   Fix:
#   
#   The qstr consolidation wasn't quite right, because it can cause qstr->len to
#   be unstable during lookup lockless traverasl.
#   
#   Fix that up by taking d_lock earlier in lookup.  This serialises against
#   d_move.
#   
#   Take the lock after comparing the parent and hash to preserve the
#   mostly-lockless behaviour.
#   
#   This obsoletes d_movecount, which is removed.
# 
# include/linux/dcache.h
#   2004/05/14 19:00:15-07:00 akpm@osdl.org +10 -13
#   dentry qstr consolidation
# 
# fs/dcache.c
#   2004/05/14 19:00:15-07:00 akpm@osdl.org +71 -67
#   dentry qstr consolidation
# 
# ChangeSet
#   2004/05/14 19:46:44-07:00 akpm@osdl.org 
#   [PATCH] dentry shrinkage
#   
#   Rework dentries so that the inline name length is between 31 and 48 bytes.
#   
#   On SMP P4-compiled x86 each dentry consumes 160 bytes (24 per page).
#   
#   Here's the histogram of name lengths on all 1.5M files on my workstation:
#   
#   1:  0%
#   2:  0%
#   3:  1%
#   4:  5%
#   5:  8%
#   6:  13%
#   7:  19%
#   8:  26%
#   9:  33%
#   10:  42%
#   11:  49%
#   12:  55%
#   13:  60%
#   14:  64%
#   15:  67%
#   16:  69%
#   17:  71%
#   18:  73%
#   19:  75%
#   20:  76%
#   21:  78%
#   22:  79%
#   23:  80%
#   24:  81%
#   25:  82%
#   26:  83%
#   27:  85%
#   28:  86%
#   29:  87%
#   30:  88%
#   31:  89%
#   32:  90%
#   33:  91%
#   34:  92%
#   35:  93%
#   36:  94%
#   37:  95%
#   38:  96%
#   39:  96%
#   40:  96%
#   41:  96%
#   42:  96%
#   43:  96%
#   44:  97%
#   45:  97%
#   46:  97%
#   47:  97%
#   48:  97%
#   49:  98%
#   50:  98%
#   51:  98%
#   52:  98%
#   53:  98%
#   54:  98%
#   55:  98%
#   56:  98%
#   57:  98%
#   58:  98%
#   59:  98%
#   60:  99%
#   61:  99%
#   62:  99%
#   63:  99%
#   64:  99%
#   
#   So on x86 we'll fit 89% of filenames into the inline name.
#   
#   
#   The patch also removes the NAME_ALLOC_LEN() rounding-up of the storage for the
#   out-of-line names.  That seems unnecessary.
# 
# include/linux/dcache.h
#   2004/05/14 19:00:14-07:00 akpm@osdl.org +1 -5
#   dentry shrinkage
# 
# fs/dcache.c
#   2004/05/14 19:00:14-07:00 akpm@osdl.org +9 -5
#   dentry shrinkage
# 
# ChangeSet
#   2004/05/14 19:46:33-07:00 akpm@osdl.org 
#   [PATCH] d_vfs_flags locking fix
#   
#   Be consistent about d_vfs_flags locking: take dentry->d_lock when modifying
#   it.
# 
# fs/dcache.c
#   2004/05/14 19:00:14-07:00 akpm@osdl.org +2 -0
#   d_vfs_flags locking fix
# 
# ChangeSet
#   2004/05/14 19:46:23-07:00 akpm@osdl.org 
#   [PATCH] d_flags locking fixes
#   
#   A few filesystems modify dentry.d_flags under non-obvious locking.  To
#   consolidate that field wth d_vfs_flags they need to take ->d_lock
# 
# fs/nfs/unlink.c
#   2004/05/14 19:00:14-07:00 akpm@osdl.org +4 -0
#   d_flags locking fixes
# 
# fs/exportfs/expfs.c
#   2004/05/14 19:00:14-07:00 akpm@osdl.org +4 -0
#   d_flags locking fixes
# 
# fs/autofs4/root.c
#   2004/05/14 19:00:14-07:00 akpm@osdl.org +8 -1
#   d_flags locking fixes
# 
# fs/afs/dir.c
#   2004/05/14 19:00:14-07:00 akpm@osdl.org +2 -0
#   d_flags locking fixes
# 
# ChangeSet
#   2004/05/14 19:46:12-07:00 akpm@osdl.org 
#   [PATCH] I2O subsystem fixing and cleanup for 2.6 - i2o-makefile-cleanup.patch
#   
#   From: Markus Lidel <Markus.Lidel@shadowconnect.com>
#   
#   * The Kconfig and Makefile in drivers/message/i2o still got a CONFIG_I2O_PCI
#     entry, which is not used anymore.  This one is replaced by a
#     CONFIG_I2O_CONFIG entry, which now builds the i2o_config module.
# 
# drivers/message/i2o/Makefile
#   2004/05/14 19:00:14-07:00 akpm@osdl.org +2 -1
#   I2O subsystem fixing and cleanup for 2.6 - i2o-makefile-cleanup.patch
# 
# drivers/message/i2o/Kconfig
#   2004/05/14 19:00:14-07:00 akpm@osdl.org +8 -7
#   I2O subsystem fixing and cleanup for 2.6 - i2o-makefile-cleanup.patch
# 
# ChangeSet
#   2004/05/14 19:46:01-07:00 akpm@osdl.org 
#   [PATCH] I2O subsystem fixing and cleanup for 2.6 - i2o-64-bit-fix.patch
#   
#   From: Markus Lidel <Markus.Lidel@shadowconnect.com>
#   
#   * provides i2o_context_list_*() functions, which maps 64-bit pointers to
#     32-bit context id's in a dynamic list.  On 32-bit systems the functions are
#     replaced with a static inline.
#   
#   * i2o_scsi now uses the i2o_context_list_*() functions for transaction
#     context, and therefore now work on 64-bit systems too.
# 
# include/linux/i2o.h
#   2004/05/14 19:00:14-07:00 akpm@osdl.org +40 -0
#   I2O subsystem fixing and cleanup for 2.6 - i2o-64-bit-fix.patch
# 
# drivers/message/i2o/i2o_scsi.c
#   2004/05/14 19:00:14-07:00 akpm@osdl.org +21 -43
#   I2O subsystem fixing and cleanup for 2.6 - i2o-64-bit-fix.patch
# 
# drivers/message/i2o/i2o_core.c
#   2004/05/14 19:00:14-07:00 akpm@osdl.org +136 -0
#   I2O subsystem fixing and cleanup for 2.6 - i2o-64-bit-fix.patch
# 
# ChangeSet
#   2004/05/14 19:45:50-07:00 akpm@osdl.org 
#   [PATCH] I2O subsystem fixing and cleanup for 2.6 - i2o_block-cleanup.patch
#   
#   From: Markus Lidel <Markus.Lidel@shadowconnect.com>
#   
#   * more than 3 "visible" disks (hda, hdb, hdc, hdd) lead to kernel panics.
#   
#   * removes some unused code with partitions.
#   
#   * I2O_LOCK was often called with the addresses of the controller, and not
#     with the address of the device.  Fixed.
#   
#   * the cleanup function for gendisk (del_gendisk) doesn't work if the queue
#     is shared between different devices.  To workaround the queue is removed
#     before.
#   
#   * redundant code removed in module initialization and remove, use
#     i2ob_new_device and i2ob_del_device instead.
#   
#   * removed atomic_t queue_depth
#   
#   * removed unnecessary and bogus code for queue handling
# 
# drivers/message/i2o/i2o_block.c
#   2004/05/14 19:00:13-07:00 akpm@osdl.org +165 -217
#   I2O subsystem fixing and cleanup for 2.6 - i2o_block-cleanup.patch
# 
# ChangeSet
#   2004/05/14 19:45:39-07:00 akpm@osdl.org 
#   [PATCH] i2o: 64-bit fixes
#   
#   From: Markus Lidel <Markus.Lidel@shadowconnect.com>
#   
#   Fix 64-bit problems.
# 
# drivers/message/i2o/i2o_config.c
#   2004/05/14 19:00:13-07:00 akpm@osdl.org +7 -1
#   i2o: 64-bit fixes
# 
# ChangeSet
#   2004/05/14 19:45:29-07:00 akpm@osdl.org 
#   [PATCH] I2O subsystem fixing and cleanup for 2.6 - i2o-passthru.patch
#   
#   From: Markus Lidel <Markus.Lidel@shadowconnect.com>
#   
#   * Add a pass-thru ioctl to i2o_config, which is needed to work with the
#     Adaptec management software.
# 
# include/linux/i2o.h
#   2004/05/14 19:00:13-07:00 akpm@osdl.org +2 -0
#   I2O subsystem fixing and cleanup for 2.6 - i2o-passthru.patch
# 
# include/linux/i2o-dev.h
#   2004/05/14 19:00:13-07:00 akpm@osdl.org +8 -0
#   I2O subsystem fixing and cleanup for 2.6 - i2o-passthru.patch
# 
# drivers/message/i2o/i2o_config.c
#   2004/05/14 19:00:13-07:00 akpm@osdl.org +163 -0
#   I2O subsystem fixing and cleanup for 2.6 - i2o-passthru.patch
# 
# ChangeSet
#   2004/05/14 19:45:18-07:00 akpm@osdl.org 
#   [PATCH] I2O subsystem fixing and cleanup for 2.6 - i2o-config-clean.patch
#   
#   From: Markus Lidel <Markus.Lidel@shadowconnect.com>
#   
#   * Changes the formating of the header in i2o_config.c
# 
# drivers/message/i2o/i2o_config.c
#   2004/05/14 19:00:12-07:00 akpm@osdl.org +16 -15
#   I2O subsystem fixing and cleanup for 2.6 - i2o-config-clean.patch
# 
# ChangeSet
#   2004/05/14 19:45:07-07:00 akpm@osdl.org 
#   [PATCH] Module ref counting for vt console drivers
#   
#   From: Herbert Xu <herbert@gondor.apana.org.au>
#   
#   The following patch adds basic module reference counting to vt console
#   drivers.  Currently modules like fbcon are not counted at all.
# 
# include/linux/console.h
#   2004/05/14 19:00:12-07:00 akpm@osdl.org +3 -1
#   Module ref counting for vt console drivers
# 
# drivers/video/console/vgacon.c
#   2004/05/14 19:00:12-07:00 akpm@osdl.org +1 -0
#   Module ref counting for vt console drivers
# 
# drivers/video/console/sticon.c
#   2004/05/14 19:00:12-07:00 akpm@osdl.org +2 -1
#   Module ref counting for vt console drivers
# 
# drivers/video/console/promcon.c
#   2004/05/14 19:00:12-07:00 akpm@osdl.org +1 -0
#   Module ref counting for vt console drivers
# 
# drivers/video/console/newport_con.c
#   2004/05/14 19:00:12-07:00 akpm@osdl.org +2 -3
#   Module ref counting for vt console drivers
# 
# drivers/video/console/mdacon.c
#   2004/05/14 19:00:12-07:00 akpm@osdl.org +2 -6
#   Module ref counting for vt console drivers
# 
# drivers/video/console/fbcon.c
#   2004/05/14 19:00:12-07:00 akpm@osdl.org +9 -3
#   Module ref counting for vt console drivers
# 
# drivers/video/console/dummycon.c
#   2004/05/14 19:00:12-07:00 akpm@osdl.org +2 -0
#   Module ref counting for vt console drivers
# 
# drivers/char/vt.c
#   2004/05/14 19:00:12-07:00 akpm@osdl.org +25 -4
#   Module ref counting for vt console drivers
# 
# ChangeSet
#   2004/05/14 19:44:57-07:00 akpm@osdl.org 
#   [PATCH] ia64 cpu hotplug: core
#   
#   From: Ashok Raj <ashok.raj@intel.com>
#   
#   Supports basic ability to enable hotplug functions for IA64.
#   Code is just evolving, and there are several loose ends to tie up.
#   
#   What this code drop does
#   - Support logical online and offline
#   - Handles interrupt migration without loss of interrupts.
#   - Handles stress fine > 24+ hrs with make -j/ftp/rcp workloads
#   - Handles irq migration from a dying cpu without loss of interrupts.
#   
#   What needs to be done
#   - Boot CPU removal support, with platform level authentication
#   - Putting cpu being removed in BOOT_RENDEZ mode.
# 
# include/asm-ia64/smp.h
#   2004/05/14 19:00:12-07:00 akpm@osdl.org +2 -0
#   ia64 cpu hotplug: core
# 
# arch/ia64/kernel/time.c
#   2004/05/14 19:00:12-07:00 akpm@osdl.org +5 -0
#   ia64 cpu hotplug: core
# 
# arch/ia64/kernel/smpboot.c
#   2004/05/14 19:00:12-07:00 akpm@osdl.org +127 -9
#   ia64 cpu hotplug: core
# 
# arch/ia64/kernel/smp.c
#   2004/05/14 19:00:12-07:00 akpm@osdl.org +25 -1
#   ia64 cpu hotplug: core
# 
# arch/ia64/kernel/sal.c
#   2004/05/14 19:00:12-07:00 akpm@osdl.org +13 -0
#   ia64 cpu hotplug: core
# 
# arch/ia64/kernel/process.c
#   2004/05/14 19:00:12-07:00 akpm@osdl.org +42 -1
#   ia64 cpu hotplug: core
# 
# arch/ia64/kernel/irq_ia64.c
#   2004/05/14 19:00:12-07:00 akpm@osdl.org +55 -5
#   ia64 cpu hotplug: core
# 
# arch/ia64/kernel/irq.c
#   2004/05/14 19:00:12-07:00 akpm@osdl.org +103 -0
#   ia64 cpu hotplug: core
# 
# arch/ia64/kernel/iosapic.c
#   2004/05/14 19:00:12-07:00 akpm@osdl.org +5 -2
#   ia64 cpu hotplug: core
# 
# arch/ia64/Kconfig
#   2004/05/14 19:00:12-07:00 akpm@osdl.org +9 -0
#   ia64 cpu hotplug: core
# 
# ChangeSet
#   2004/05/14 19:44:45-07:00 akpm@osdl.org 
#   [PATCH] Revisited: ia64-cpu-hotplug-cpu_present.patch
#   
#   From: Paul Jackson <pj@sgi.com>
#   
#   With a hotplug capable kernel, there is a requirement to distinguish a
#   possible CPU from one actually present.  The set of possible CPU numbers
#   doesn't change during a single system boot, but the set of present CPUs
#   changes as CPUs are physically inserted into or removed from a system.  The
#   cpu_possible_map does not change once initialized at boot, but the
#   cpu_present_map changes dynamically as CPUs are inserted or removed.
#   
#   
#   Paul Jackson <pj@sgi.com> provided an expanded explanation:
#   
#   
#   Ashok's cpu hot plug patch adds a cpu_present_map, resulting in the following
#   cpu maps being available.  All the following maps are fixed size bitmaps of
#   size NR_CPUS.
#   
#   #ifdef CONFIG_HOTPLUG_CPU
#   	cpu_possible_map - map with all NR_CPUS bits set
#   	cpu_present_map - map with bit 'cpu' set iff cpu is populated
#   	cpu_online_map - map with bit 'cpu' set iff cpu available to scheduler
#   #else
#   	cpu_possible_map - map with bit 'cpu' set iff cpu is populated
#   	cpu_present_map - copy of cpu_possible_map
#   	cpu_online_map - map with bit 'cpu' set iff cpu available to scheduler
#   #endif
#   
#   In either case, NR_CPUS is fixed at compile time, as the static size of these
#   bitmaps.  The cpu_possible_map is fixed at boot time, as the set of CPU id's
#   that it is possible might ever be plugged in at anytime during the life of
#   that system boot.  The cpu_present_map is dynamic(*), representing which CPUs
#   are currently plugged in.  And cpu_online_map is the dynamic subset of
#   cpu_present_map, indicating those CPUs available for scheduling.
#   
#   If HOTPLUG is enabled, then cpu_possible_map is forced to have all NR_CPUS
#   bits set, otherwise it is just the set of CPUs that ACPI reports present at
#   boot.
#   
#   If HOTPLUG is enabled, then cpu_present_map varies dynamically, depending on
#   what ACPI reports as currently plugged in, otherwise cpu_present_map is just a
#   copy of cpu_possible_map.
#   
#   (*) Well, cpu_present_map is dynamic in the hotplug case.  If not hotplug,
#       it's the same as cpu_possible_map, hence fixed at boot.
# 
# kernel/timer.c
#   2004/05/14 19:00:11-07:00 akpm@osdl.org +1 -1
#   Revisited: ia64-cpu-hotplug-cpu_present.patch
# 
# kernel/sched.c
#   2004/05/14 19:00:11-07:00 akpm@osdl.org +3 -3
#   Revisited: ia64-cpu-hotplug-cpu_present.patch
# 
# kernel/fork.c
#   2004/05/14 19:00:11-07:00 akpm@osdl.org +1 -1
#   Revisited: ia64-cpu-hotplug-cpu_present.patch
# 
# kernel/cpu.c
#   2004/05/14 19:00:11-07:00 akpm@osdl.org +9 -1
#   Revisited: ia64-cpu-hotplug-cpu_present.patch
# 
# init/main.c
#   2004/05/14 19:00:11-07:00 akpm@osdl.org +21 -2
#   Revisited: ia64-cpu-hotplug-cpu_present.patch
# 
# include/linux/cpumask.h
#   2004/05/14 19:00:11-07:00 akpm@osdl.org +11 -0
#   Revisited: ia64-cpu-hotplug-cpu_present.patch
# 
# include/asm-ia64/smp.h
#   2004/05/14 19:00:11-07:00 akpm@osdl.org +0 -3
#   Revisited: ia64-cpu-hotplug-cpu_present.patch
# 
# fs/proc/proc_misc.c
#   2004/05/14 19:00:11-07:00 akpm@osdl.org +2 -2
#   Revisited: ia64-cpu-hotplug-cpu_present.patch
# 
# fs/buffer.c
#   2004/05/14 19:00:11-07:00 akpm@osdl.org +1 -1
#   Revisited: ia64-cpu-hotplug-cpu_present.patch
# 
# arch/ia64/kernel/smpboot.c
#   2004/05/14 19:00:11-07:00 akpm@osdl.org +13 -9
#   Revisited: ia64-cpu-hotplug-cpu_present.patch
# 
# ChangeSet
#   2004/05/14 19:44:34-07:00 akpm@osdl.org 
#   [PATCH] ia64 cpu hotplug: /proc rework
#   
#   From: Ashok Raj <ashok.raj@intel.com>
#   
#   Changes proc entries for cpu hotplug to be created via the cpu hotplug
#   notifier callbacks.  Also fixed a bug in the removal code that did not remove
#   proc entries as expected.
# 
# arch/ia64/kernel/palinfo.c
#   2004/05/14 19:00:11-07:00 akpm@osdl.org +104 -30
#   ia64 cpu hotplug: /proc rework
# 
# ChangeSet
#   2004/05/14 19:44:23-07:00 akpm@osdl.org 
#   [PATCH] ia64 cpu hotplug: IRQ affinity work
#   
#   From: Ashok Raj <ashok.raj@intel.com>
#   
#   irq affinity setting via /proc was forcing iosapic rte programming by force.
#   The correct way to do this is to perform this when a interrupt is pending.
# 
# arch/ia64/kernel/irq.c
#   2004/05/14 19:00:11-07:00 akpm@osdl.org +9 -3
#   ia64 cpu hotplug: IRQ affinity work
# 
# arch/ia64/kernel/iosapic.c
#   2004/05/14 19:00:11-07:00 akpm@osdl.org +19 -0
#   ia64 cpu hotplug: IRQ affinity work
# 
# ChangeSet
#   2004/05/14 19:44:13-07:00 akpm@osdl.org 
#   [PATCH] ia64 cpu hotplug: sysfs additions
#   
#   From: Ashok Raj <ashok.raj@intel.com>
#   
#   Creation of sysfs via topology_init() creates sysfs entries.  The creation of
#   the online control file is created separately when the cpu_up is invoked in
#   arch independent code.
# 
# include/asm-ia64/cpu.h
#   2004/05/14 19:00:11-07:00 akpm@osdl.org +17 -0
#   ia64 cpu hotplug: sysfs additions
# 
# arch/ia64/dig/topology.c
#   2004/05/14 19:00:11-07:00 akpm@osdl.org +43 -0
#   ia64 cpu hotplug: sysfs additions
# 
# include/asm-ia64/cpu.h
#   2004/05/14 19:00:11-07:00 akpm@osdl.org +0 -0
#   BitKeeper file /home/torvalds/v2.6/linux/include/asm-ia64/cpu.h
# 
# arch/ia64/dig/topology.c
#   2004/05/14 19:00:11-07:00 akpm@osdl.org +0 -0
#   BitKeeper file /home/torvalds/v2.6/linux/arch/ia64/dig/topology.c
# 
# arch/ia64/dig/Makefile
#   2004/05/14 19:00:11-07:00 akpm@osdl.org +5 -0
#   ia64 cpu hotplug: sysfs additions
# 
# ChangeSet
#   2004/05/14 19:44:02-07:00 akpm@osdl.org 
#   [PATCH] ia64 cpu hotplug: init section fixes
#   
#   From: Ashok Raj <ashok.raj@intel.com>
#   
#   Contains changes from __init to __devinit to support cpu hotplug Changes only
#   arch/ia64 portions of the kernel tree.
# 
# include/asm-ia64/smp.h
#   2004/05/14 19:00:11-07:00 akpm@osdl.org +2 -1
#   ia64 cpu hotplug: init section fixes
# 
# arch/ia64/mm/tlb.c
#   2004/05/14 19:00:11-07:00 akpm@osdl.org +1 -1
#   ia64 cpu hotplug: init section fixes
# 
# arch/ia64/mm/init.c
#   2004/05/14 19:00:11-07:00 akpm@osdl.org +2 -2
#   ia64 cpu hotplug: init section fixes
# 
# arch/ia64/kernel/time.c
#   2004/05/14 19:00:11-07:00 akpm@osdl.org +1 -1
#   ia64 cpu hotplug: init section fixes
# 
# arch/ia64/kernel/smpboot.c
#   2004/05/14 19:00:11-07:00 akpm@osdl.org +6 -6
#   ia64 cpu hotplug: init section fixes
# 
# arch/ia64/kernel/setup.c
#   2004/05/14 19:00:11-07:00 akpm@osdl.org +1 -1
#   ia64 cpu hotplug: init section fixes
# 
# ChangeSet
#   2004/05/14 19:43:50-07:00 akpm@osdl.org 
#   [PATCH] ia64 cpu hotplug: core kernel initialisation
#   
#   From: Ashok Raj <ashok.raj@intel.com>
#   
#   This patch changes __init to __devinit to init_idle so that when a new cpu
#   arrives, it can call these functions at a later time.
# 
# kernel/sched.c
#   2004/05/14 19:00:10-07:00 akpm@osdl.org +1 -1
#   ia64 cpu hotplug: core kernel initialisation
# 
# init/main.c
#   2004/05/14 19:00:10-07:00 akpm@osdl.org +1 -1
#   ia64 cpu hotplug: core kernel initialisation
# 
# ChangeSet
#   2004/05/14 19:43:39-07:00 akpm@osdl.org 
#   [PATCH] swap speedups and fix
#   
#   From: Andrea Arcangeli <andrea@suse.de>
#   
#   I don't think we need an install_swap_bdev/remove_swap_bdev anymore, we should
#   use the swap_info->bdev, not the swap_bdevs.  the swap_info already has a
#   ->bdev field, the only point of remove_swap_bdev/install_swap_bdev was to
#   unplug all devices as efficiently as possible, we don't need that anymore with
#   the page parameter.
#   
#   Plus the semaphore should be a rwsem to allow parallel unplug from multiple
#   pages.
#   
#   After that I don't need to take the semaphore anymore during swapon, no
#   swapcache with swp_type() pointing to such bdev, will be allowed until swapon
#   is complete (SWP_ACTIVE is set a lot later after setting p->bdev).
#   
#   In swapoff I only need a dummy serialization with the readers, after
#   try_to_unuse is complete:
#   
#    	err = try_to_unuse(type);
#    	current->flags &= ~PF_SWAPOFF;
#   
#    	/* wait for any unplug function to finish */
#    	down_write(&swap_unplug_sem);
#    	up_write(&swap_unplug_sem);
#   
#   
#   that's all, no other locking and no install_swap_bdev/remove_swap_bdev.
#   
#   (and the swap_bdevs[] compression code was busted)
# 
# mm/swapfile.c
#   2004/05/14 19:00:10-07:00 akpm@osdl.org +25 -49
#   swap speedups and fix
# 
# ChangeSet
#   2004/05/14 19:43:29-07:00 akpm@osdl.org 
#   [PATCH] blk_run_page(): we don't trust bh->b_page
#   
#   We don't trust bh->b_page to point to the right thing across all filesystems,
#   so revert this bit.
# 
# fs/buffer.c
#   2004/05/14 19:00:10-07:00 akpm@osdl.org +6 -1
#   blk_run_page(): we don't trust bh->b_page
# 
# ChangeSet
#   2004/05/14 19:43:18-07:00 akpm@osdl.org 
#   [PATCH] blk_run_page(): fixup for swap_unplug_io_fn()
# 
# mm/swapfile.c
#   2004/05/14 19:00:10-07:00 akpm@osdl.org +1 -1
#   blk_run_page(): fixup for swap_unplug_io_fn()
# 
# mm/filemap.c
#   2004/05/14 19:00:10-07:00 akpm@osdl.org +1 -1
#   blk_run_page(): fixup for swap_unplug_io_fn()
# 
# include/linux/swap.h
#   2004/05/14 19:00:10-07:00 akpm@osdl.org +1 -1
#   blk_run_page(): fixup for swap_unplug_io_fn()
# 
# ChangeSet
#   2004/05/14 19:43:07-07:00 akpm@osdl.org 
#   [PATCH] Add blk_run_page()
#   
#   From: Andrea Arcangeli <andrea@suse.de>
#   
#   From: Jens Axboe
#   
#   Add blk_run_page() API.  This is so that we can pass the target page all the
#   way down to (for example) the swap unplug function.  So swap can work out
#   which blockdevs back this particular page.
# 
# mm/swapfile.c
#   2004/05/14 19:00:09-07:00 akpm@osdl.org +1 -1
#   Add blk_run_page()
# 
# mm/readahead.c
#   2004/05/14 19:00:09-07:00 akpm@osdl.org +1 -1
#   Add blk_run_page()
# 
# include/linux/blkdev.h
#   2004/05/14 19:00:09-07:00 akpm@osdl.org +14 -3
#   Add blk_run_page()
# 
# include/linux/backing-dev.h
#   2004/05/14 19:00:09-07:00 akpm@osdl.org +2 -2
#   Add blk_run_page()
# 
# fs/buffer.c
#   2004/05/14 19:00:09-07:00 akpm@osdl.org +2 -10
#   Add blk_run_page()
# 
# drivers/block/ll_rw_blk.c
#   2004/05/14 19:00:09-07:00 akpm@osdl.org +2 -1
#   Add blk_run_page()
# 
# ChangeSet
#   2004/05/14 19:42:56-07:00 akpm@osdl.org 
#   [PATCH] rmap-5-swap_unplug-page-revert
#   
#   Revert the pre-2.6.6 per-address-space unplugging changes.  This removes a
#   swapper_space exceptionality, syncs things with Andrea and provides for
#   simplification of the swap unplug function.
# 
# mm/swapfile.c
#   2004/05/14 19:00:09-07:00 akpm@osdl.org +8 -15
#   rmap-5-swap_unplug-page-revert
# 
# mm/swap_state.c
#   2004/05/14 19:00:09-07:00 akpm@osdl.org +2 -2
#   rmap-5-swap_unplug-page-revert
# 
# mm/nommu.c
#   2004/05/14 19:00:09-07:00 akpm@osdl.org +5 -0
#   rmap-5-swap_unplug-page-revert
# 
# mm/filemap.c
#   2004/05/14 19:00:09-07:00 akpm@osdl.org +1 -1
#   rmap-5-swap_unplug-page-revert
# 
# include/linux/swap.h
#   2004/05/14 19:00:09-07:00 akpm@osdl.org +3 -2
#   rmap-5-swap_unplug-page-revert
# 
# ChangeSet
#   2004/05/14 19:42:45-07:00 akpm@osdl.org 
#   [PATCH] rename rmap_lock to page_map_lock
#   
#   Sync this up with Andrea's patches.
# 
# mm/vmscan.c
#   2004/05/14 19:00:09-07:00 akpm@osdl.org +10 -10
#   rename rmap_lock to page_map_lock
# 
# mm/rmap.c
#   2004/05/14 19:00:09-07:00 akpm@osdl.org +4 -4
#   rename rmap_lock to page_map_lock
# 
# include/linux/rmap.h
#   2004/05/14 19:00:09-07:00 akpm@osdl.org +2 -2
#   rename rmap_lock to page_map_lock
# 
# ChangeSet
#   2004/05/14 19:42:34-07:00 akpm@osdl.org 
#   [PATCH] filtered wakeups: apply to buffer_head functions
#   
#   From: William Lee Irwin III <wli@holomorphy.com>
#   
#   This patch implements wake-one semantics for buffer_head wakeups in a single
#   step.  The buffer_head being waited on is passed to the waiter's wakeup
#   function by the waker, and the wakeup function compares that to the a pointer
#   stored in its on-stack structure and checking the readiness of the bit there
#   also.  Wake-one semantics are achieved by using WQ_FLAG_EXCLUSIVE in the
#   codepaths waiting to acquire the bit for mutual exclusion.
# 
# include/linux/buffer_head.h
#   2004/05/14 19:00:09-07:00 akpm@osdl.org +3 -2
#   filtered wakeups: apply to buffer_head functions
# 
# fs/jbd/transaction.c
#   2004/05/14 19:00:09-07:00 akpm@osdl.org +10 -2
#   filtered wakeups: apply to buffer_head functions
# 
# fs/buffer.c
#   2004/05/14 19:00:09-07:00 akpm@osdl.org +65 -9
#   filtered wakeups: apply to buffer_head functions
# 
# ChangeSet
#   2004/05/14 19:42:25-07:00 akpm@osdl.org 
#   [PATCH] filtered wakeups: apply to pagecache functions
#   
#   From: William Lee Irwin III <wli@holomorphy.com>
#   
#   This patch implements wake-one semantics for page wakeups in a single step.
#   Discrimination between distinct pages is achieved by passing the page to the
#   wakeup function, which compares it to a pointer in its own on-stack structure
#   containing the waitqueue element and the page.  Bit discrimination is achieved
#   by storing the bit number in that same structure and testing the bit in the
#   wakeup function.  Wake-one semantics are achieved by using WQ_FLAG_EXCLUSIVE
#   in the codepaths waiting to acquire the bit for mutual exclusion.
# 
# mm/filemap.c
#   2004/05/14 19:00:08-07:00 akpm@osdl.org +51 -13
#   filtered wakeups: apply to pagecache functions
# 
# ChangeSet
#   2004/05/14 19:42:14-07:00 akpm@osdl.org 
#   [PATCH] filtered wakeups: wakeup enhancements
#   
#   From: William Lee Irwin III <wli@holomorphy.com>
#   
#   This patch provides an additional argument to __wake_up_common() so that the
#   information wakefunc.patch made waiters ready to receive may be passed to them
#   by wakers.  This is provided as a separate patch so that the overhead of the
#   additional argument to __wake_up_common() can be measured in isolation.  No
#   change in performance was observable here.
# 
# kernel/sched.c
#   2004/05/14 19:00:08-07:00 akpm@osdl.org +9 -8
#   filtered wakeups: wakeup enhancements
# 
# include/linux/wait.h
#   2004/05/14 19:00:08-07:00 akpm@osdl.org +7 -7
#   filtered wakeups: wakeup enhancements
# 
# ChangeSet
#   2004/05/14 19:42:03-07:00 akpm@osdl.org 
#   [PATCH] filtered wakeups
#   
#   From: William Lee Irwin III <wli@holomorphy.com>
#   
#   This patch series is solving the "thundering herd" problem that occurs in the
#   mainline implementation of hashed waitqueues.  There are two sources of
#   spurious wakeups in such arrangements:
#   
#   (a) Hash collisions that place waiters on different objects on the same
#       waitqueue, which wakes threads falsely when any of the objects hashed to
#       the same queue receives a wakeup.  i.e.  loss of information about which
#       object a wakeup event is related to.
#   
#   (b) Loss of information about which object a given waiter is waiting on.
#       This precludes wake-one semantics for mutual exclusion scenarios.  For
#       instance, a lock bit may be slept on.  If there are any waiters on the
#       object, a lock bit release event must wake at least one of them so as to
#       prevent deadlock.  But without information as to which waiter is waiting
#       on which object, we must resort to waking all waiters who could possibly
#       be waiting on it.  Now, as the lock bit provides mutual exclusion, only
#       one of the waiters woken can proceed, and the remainder will go back to
#       sleep and wait for another event, creating unnecessary system load.  Once
#       wake-one semantics are established, only one of the waiters waiting to
#       acquire a lock bit need to be woken, which measurably reduces system load
#       and improves efficiency (i.e.  it's the subject of the benchmarking I've
#       been sending to you).
#   
#   Even beyond the measurable efficiency gains, there are reasons of robustness
#   and responsiveness to motivate addressing the issue of thundering herds.  In a
#   real-life scenario I've been personally involved in resolving, the thundering
#   herd issue caused powerful modern SMP machines with fast IO systems to be
#   unresponsive to user input for a minute at a time or more.  Analogues of these
#   patches for the distro kernels involved fully resolved the issue to the
#   customer's satisfaction and obviated workarounds to limit the pagecache's
#   size.
#   
#   The latest spin of these patches basically shoves more pieces of the logic
#   into the wakeup functions, with some efficiency gains from sharing the hot
#   codepath with the rest of the kernel, and a slightly larger diff than the
#   patches with the newly-introduced entrypoint.  Writing these was motivated by
#   the push to insulate sched.c from more of the details of wakeup semantics by
#   putting more of the logic into the wakeup functions.  In order to accomplish
#   this while still solving (b), the wakeup functions grew a new argument for
#   communication about what object a wakeup event is related to to be passed by
#   the waker.
#   
#   =========
#   
#   This patch provides an additional argument to wakeup functions so that
#   information may be passed from the waker to the waiter.  This is provided as a
#   separate patch so that the overhead of the additional argument can be measured
#   in isolation.  No change in performance was observable here.
# 
# kernel/sched.c
#   2004/05/14 19:00:08-07:00 akpm@osdl.org +2 -2
#   filtered wakeups
# 
# kernel/fork.c
#   2004/05/14 19:00:08-07:00 akpm@osdl.org +2 -2
#   filtered wakeups
# 
# include/linux/wait.h
#   2004/05/14 19:00:08-07:00 akpm@osdl.org +3 -3
#   filtered wakeups
# 
# fs/eventpoll.c
#   2004/05/14 19:00:08-07:00 akpm@osdl.org +2 -2
#   filtered wakeups
# 
# ChangeSet
#   2004/05/14 19:41:52-07:00 akpm@osdl.org 
#   [PATCH] do_mounts_rd-malloc-fix
#   
#   gcc-3.4.0 sez:
#   
#   init/do_mounts_rd.c:309: warning: conflicting types for built-in function 'malloc'
# 
# init/do_mounts_rd.c
#   2004/05/14 19:00:07-07:00 akpm@osdl.org +2 -2
#   do_mounts_rd-malloc-fix
# 
# ChangeSet
#   2004/05/14 19:41:41-07:00 akpm@osdl.org 
#   [PATCH] VM accounting fix
#   
#   From: Hugh Dickins <hugh@veritas.com>
#   
#   Stas Sergeev <stsp@aknet.ru> wrote:
#   
#      mprotect() fails to merge VMAs because one VMA can end up with
#      VM_ACCOUNT flag set, and another without that flag.  That makes several
#      apps of mine to malfuncate.
#   
#   
#   Great find!  Someone has got their test the wrong way round.  Since that
#   VM_MAYACCT macro is being used in one place only, and just hiding what it's
#   actually about, fold it into its callsite.
# 
# mm/mprotect.c
#   2004/05/14 19:00:07-07:00 akpm@osdl.org +1 -2
#   VM accounting fix
# 
# include/linux/mm.h
#   2004/05/14 19:00:07-07:00 akpm@osdl.org +0 -3
#   VM accounting fix
# 
# ChangeSet
#   2004/05/14 19:41:31-07:00 akpm@osdl.org 
#   [PATCH] revert the process-migration-speedup patch
#   
#   David Mosberger asked that this be backed out:
#   
#   "I do not believe that flushing the TLB before migration is be the right thing
#   to do on ia64 machines which support global TLB purges (i.e., all but SGI's
#   machines)."
#   
#   It was of huge benefit for the SGI machines, so work is ongoing.
# 
# kernel/sched.c
#   2004/05/14 19:00:07-07:00 akpm@osdl.org +0 -10
#   revert the process-migration-speedup patch
# 
# include/asm-ia64/tlb.h
#   2004/05/14 19:00:07-07:00 akpm@osdl.org +0 -2
#   revert the process-migration-speedup patch
# 
# include/asm-generic/tlb.h
#   2004/05/14 19:00:07-07:00 akpm@osdl.org +0 -2
#   revert the process-migration-speedup patch
# 
# ChangeSet
#   2004/05/14 19:41:20-07:00 akpm@osdl.org 
#   [PATCH] MSEC_TO_JIFFIES to msec_to_jiffies
#   
#   Switch all users of MSEC[S]_TO_JIFFIES and JIFFIES_TO_MSEC[S] over to use
#   jiffies_to_msecs() and msecs_to_jiffies().  Withdraw MSECS_TO_JIFFIES() and
#   JIFFIES_TO_MSECS() from the kernel API.
# 
# net/sctp/socket.c
#   2004/05/14 19:00:06-07:00 akpm@osdl.org +17 -17
#   MSEC_TO_JIFFIES to msec_to_jiffies
# 
# net/sctp/endpointola.c
#   2004/05/14 19:00:06-07:00 akpm@osdl.org +2 -2
#   MSEC_TO_JIFFIES to msec_to_jiffies
# 
# net/sctp/chunk.c
#   2004/05/14 19:00:06-07:00 akpm@osdl.org +1 -1
#   MSEC_TO_JIFFIES to msec_to_jiffies
# 
# net/sctp/associola.c
#   2004/05/14 19:00:06-07:00 akpm@osdl.org +5 -5
#   MSEC_TO_JIFFIES to msec_to_jiffies
# 
# net/irda/irlap_event.c
#   2004/05/14 19:00:06-07:00 akpm@osdl.org +3 -3
#   MSEC_TO_JIFFIES to msec_to_jiffies
# 
# net/irda/ircomm/ircomm_tty.c
#   2004/05/14 19:00:06-07:00 akpm@osdl.org +1 -1
#   MSEC_TO_JIFFIES to msec_to_jiffies
# 
# kernel/sched.c
#   2004/05/14 19:00:06-07:00 akpm@osdl.org +1 -1
#   MSEC_TO_JIFFIES to msec_to_jiffies
# 
# include/linux/time.h
#   2004/05/14 19:00:06-07:00 akpm@osdl.org +0 -3
#   MSEC_TO_JIFFIES to msec_to_jiffies
# 
# drivers/net/irda/tekram.c
#   2004/05/14 19:00:06-07:00 akpm@osdl.org +6 -6
#   MSEC_TO_JIFFIES to msec_to_jiffies
# 
# drivers/net/irda/tekram-sir.c
#   2004/05/14 19:00:06-07:00 akpm@osdl.org +1 -1
#   MSEC_TO_JIFFIES to msec_to_jiffies
# 
# drivers/net/irda/stir4200.c
#   2004/05/14 19:00:06-07:00 akpm@osdl.org +3 -3
#   MSEC_TO_JIFFIES to msec_to_jiffies
# 
# drivers/net/irda/sir_kthread.c
#   2004/05/14 19:00:06-07:00 akpm@osdl.org +1 -1
#   MSEC_TO_JIFFIES to msec_to_jiffies
# 
# drivers/net/irda/sir_dev.c
#   2004/05/14 19:00:06-07:00 akpm@osdl.org +1 -1
#   MSEC_TO_JIFFIES to msec_to_jiffies
# 
# drivers/net/irda/mcp2120.c
#   2004/05/14 19:00:06-07:00 akpm@osdl.org +4 -4
#   MSEC_TO_JIFFIES to msec_to_jiffies
# 
# drivers/net/irda/ma600.c
#   2004/05/14 19:00:06-07:00 akpm@osdl.org +8 -8
#   MSEC_TO_JIFFIES to msec_to_jiffies
# 
# drivers/net/irda/ma600-sir.c
#   2004/05/14 19:00:06-07:00 akpm@osdl.org +4 -4
#   MSEC_TO_JIFFIES to msec_to_jiffies
# 
# drivers/net/irda/irtty-sir.c
#   2004/05/14 19:00:06-07:00 akpm@osdl.org +2 -2
#   MSEC_TO_JIFFIES to msec_to_jiffies
# 
# drivers/net/irda/irport.c
#   2004/05/14 19:00:06-07:00 akpm@osdl.org +2 -2
#   MSEC_TO_JIFFIES to msec_to_jiffies
# 
# drivers/net/irda/irda-usb.c
#   2004/05/14 19:00:06-07:00 akpm@osdl.org +3 -3
#   MSEC_TO_JIFFIES to msec_to_jiffies
# 
# drivers/net/irda/girbil.c
#   2004/05/14 19:00:06-07:00 akpm@osdl.org +5 -5
#   MSEC_TO_JIFFIES to msec_to_jiffies
# 
# drivers/net/irda/actisys.c
#   2004/05/14 19:00:06-07:00 akpm@osdl.org +1 -1
#   MSEC_TO_JIFFIES to msec_to_jiffies
# 
# drivers/net/irda/act200l.c
#   2004/05/14 19:00:06-07:00 akpm@osdl.org +5 -5
#   MSEC_TO_JIFFIES to msec_to_jiffies
# 
# drivers/net/irda/act200l-sir.c
#   2004/05/14 19:00:06-07:00 akpm@osdl.org +1 -1
#   MSEC_TO_JIFFIES to msec_to_jiffies
# 
# ChangeSet
#   2004/05/14 19:41:08-07:00 akpm@osdl.org 
#   [PATCH] Covert drivers to use msec_to_jiffies
#   
#   Remove various private implementations of msecs_to_jiffies() and
#   jiffies_to_msecs().
#   
#   There are various uppercase versions which should be consolidated.
# 
# include/linux/libata.h
#   2004/05/14 19:00:06-07:00 akpm@osdl.org +0 -5
#   Covert drivers to use msec_to_jiffies
# 
# drivers/net/tulip/de2104x.c
#   2004/05/14 19:00:06-07:00 akpm@osdl.org +1 -8
#   Covert drivers to use msec_to_jiffies
# 
# drivers/char/watchdog/shwdt.c
#   2004/05/14 19:00:06-07:00 akpm@osdl.org +0 -1
#   Covert drivers to use msec_to_jiffies
# 
# drivers/block/genhd.c
#   2004/05/14 19:00:06-07:00 akpm@osdl.org +8 -18
#   Covert drivers to use msec_to_jiffies
# 
# drivers/block/carmel.c
#   2004/05/14 19:00:06-07:00 akpm@osdl.org +0 -5
#   Covert drivers to use msec_to_jiffies
# 
# ChangeSet
#   2004/05/14 19:40:57-07:00 akpm@osdl.org 
#   [PATCH] MSEC_TO_JIFFIES consolidation
#   
#   From: Ingo Molnar <mingo@elte.hu>
#   
#   We have various different implementations of MSEC[S]_TO_JIFFIES and
#   JIFFIES_TO_MSEC[S].  We recently had a compile-time clash in USB.
#   
#   Fix all that up.
#   
#   - The SCTP version was very inefficient.  Hopefully this version is accurate
#     enough.
#   
#   - Optimise for the HZ=100 and HZ=1000 cases
#   
#   - This version does round-up, so sleep(9 milliseconds) works OK on 100HZ.
#   
#   - We still have lots of jiffies_to_msec and msec_to_jiffies implementations.
#   
#   From: William Lee Irwin III <wli@holomorphy.com>
#   
#     Optimize the cases where HZ is a divisor of 1000 or vice-versa in
#     JIFFIES_TO_MSECS() and MSECS_TO_JIFFIES() by allowing the nonvanishing(!)
#     integral ratios to appear as a parenthesized expressions eligible for
#     constant folding optimizations.
#   
#   From: me
#   
#     Use typesafe inlines for the jiffies-to-millisecond conversion functions.
#   
#     This means that milliseconds officially takes the type `unsigned int'.
#     All current callers seem to be OK with that.
#   
#     Drivers need to be fixed up to use this instead of their private versions.
# 
# kernel/sched.c
#   2004/05/14 19:00:06-07:00 akpm@osdl.org +1 -8
#   MSEC_TO_JIFFIES consolidation
# 
# include/net/sctp/sctp.h
#   2004/05/14 19:00:06-07:00 akpm@osdl.org +0 -5
#   MSEC_TO_JIFFIES consolidation
# 
# include/net/irda/irda.h
#   2004/05/14 19:00:06-07:00 akpm@osdl.org +0 -2
#   MSEC_TO_JIFFIES consolidation
# 
# include/linux/time.h
#   2004/05/14 19:00:06-07:00 akpm@osdl.org +31 -0
#   MSEC_TO_JIFFIES consolidation
# 
# include/asm-i386/param.h
#   2004/05/14 19:00:06-07:00 akpm@osdl.org +0 -2
#   MSEC_TO_JIFFIES consolidation
# 
# ChangeSet
#   2004/05/14 19:40:46-07:00 akpm@osdl.org 
#   [PATCH] sched: add missing local_irq_enable()
#   
#   From: Nick Piggin <nickpiggin@yahoo.com.au>
#   
#   this_rq_lock does a local_irq_disable, and sched_yield() needs to undo that.
# 
# kernel/sched.c
#   2004/05/14 19:00:06-07:00 akpm@osdl.org +1 -0
#   sched: add missing local_irq_enable()
# 
# ChangeSet
#   2004/05/14 19:40:34-07:00 akpm@osdl.org 
#   [PATCH] Fix page double-freeing race
#   
#   This has been there for nearly two years.  See bugzilla #1403
#   
#   vmscan.c does, in two places:
#   
#   	spin_lock(zone->lru_lock)
#   	page = lru_to_page(&zone->inactive_list);
#   	if (page_count(page) == 0) {
#   		/* erk, it's being freed by __page_cache_release() or
#   		 * release_pages()
#   		 */
#   		put_it_back_on_the_lru();
#   
#   	} else {
#   
#   	--> window 1 <--
#   
#   		page_cache_get(page);
#   		put_in_on_private_list();
#   	}
#   	spin_unlock(zone->lru_lock)
#   
#   	use_the_private_list();
#   
#   	page_cache_release(page);
#   
#   
#   
#   whereas __page_cache_release() and release_pages() do:
#   
#   	if (put_page_testzero(page)) {
#   
#   	--> window 2 <--
#   
#   		spin_lock(lru->lock);
#   		if (page_count(page) == 0) {
#   			remove_it_from_the_lru();
#   			really_free_the_page()
#   		}
#   		spin_unlock(zone->lru_lock)
#   	}
#   
#   
#   The race occurs if the vmscan.c path sees page_count()==1 and then the
#   page_cache_release() path happens in that few-instruction "window 1" before
#   vmscan's page_cache_get().
#   
#   The page_cache_release() path does put_page_testzero(), which returns true.
#   Then this CPU takes an interrupt...
#   
#   The vmscan.c path then does page_cache_get(), taking the refcount to one.
#   Then it uses the page and does page_cache_release(), taking the refcount to
#   zero and the page is really freed.
#   
#   Now, the CPU running page_cache_release() returns from the interrupt, takes
#   the LRU lock, sees the page still has a refcount of zero and frees it again.
#   Boom.
#   
#   
#   The patch fixes this by closing "window 1".  We provide a
#   "get_page_testone()" which grabs a ref on the page and returns true if the
#   refcount was previously zero.  If that happens the vmscan.c code simply drops
#   the page's refcount again and leaves the page on the LRU.
#   
#   All this happens under the zone->lru_lock, which is also taken by
#   __page_cache_release() and release_pages(), so the vmscan code knows that the
#   page has not been returned to the page allocator yet.
#   
#   
#   In terms of implementation, the page counts are now offset by one: a free page
#   has page->_count of -1.  This is so that we can use atomic_add_negative() and
#   atomic_inc_and_test() to provide put_page_testzero() and get_page_testone().
#   
#   The macros hide all of this so the public interpretation of page_count() and
#   set_page_count() remains unaltered.
#   
#   The compiler can usually constant-fold the offsetting of page->count.  This
#   patch increases an x86 SMP kernel's text by 32 bytes.
#   
#   The patch renames page->count to page->_count to break callers who aren't
#   using the macros.
#   
#   This patch requires that the architecture implement atomic_add_negative().  It
#   is currently present on
#   
#   	arm
#   	arm26
#   	i386
#   	ia64
#   	mips
#   	ppc
#   	s390
#   	v850
#   	x86_64
#   
#   ppc implements this as
#   
#   #define atomic_add_negative(a, v)	(atomic_add_return((a), (v)) < 0)
#   
#   and atomic_add_return() is implemented on
#   
#   	alpha
#   	cris
#   	h8300
#   	ia64
#   	m68knommu
#   	mips
#   	parisc
#   	ppc
#   	ppc
#   	ppc64
#   	s390
#   	sh
#   	sparc
#   	v850
#   
#   so we're looking pretty good.
# 
# mm/vmscan.c
#   2004/05/14 19:00:05-07:00 akpm@osdl.org +14 -7
#   Fix page double-freeing race
# 
# include/linux/mm.h
#   2004/05/14 19:00:05-07:00 akpm@osdl.org +34 -14
#   Fix page double-freeing race
# 
# ChangeSet
#   2004/05/14 19:40:23-07:00 akpm@osdl.org 
#   [PATCH] sparc64: implement atomic_add_negative()
# 
# include/asm-sparc64/atomic.h
#   2004/05/14 19:00:05-07:00 akpm@osdl.org +3 -0
#   sparc64: implement atomic_add_negative()
# 
# ChangeSet
#   2004/05/14 19:40:13-07:00 akpm@osdl.org 
#   [PATCH] ia64 atomic_inc_and_test fix
#   
#   From: David Mosberger <davidm@napali.hpl.hp.com>
# 
# include/asm-ia64/atomic.h
#   2004/05/14 19:00:05-07:00 akpm@osdl.org +2 -2
#   ia64 atomic_inc_and_test fix
# 
# ChangeSet
#   2004/05/14 19:40:02-07:00 akpm@osdl.org 
#   [PATCH] alpha: atomic_inc_and_test()
#   
#   From: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
#   
#   It seems atomic_inc_and_test() is missing on alpha.
# 
# include/asm-alpha/atomic.h
#   2004/05/14 19:00:05-07:00 akpm@osdl.org +1 -0
#   alpha: atomic_inc_and_test()
# 
# ChangeSet
#   2004/05/14 19:39:51-07:00 akpm@osdl.org 
#   [PATCH] Implement atomic_inc_and_test() on various architectures
#   
#   It's easy to do when the arch provides atomic_inc_return().
# 
# include/asm-v850/atomic.h
#   2004/05/14 19:00:05-07:00 akpm@osdl.org +10 -0
#   Implement atomic_inc_and_test() on various architectures
# 
# include/asm-sparc64/atomic.h
#   2004/05/14 19:00:05-07:00 akpm@osdl.org +10 -0
#   Implement atomic_inc_and_test() on various architectures
# 
# include/asm-sparc/atomic.h
#   2004/05/14 19:00:05-07:00 akpm@osdl.org +10 -0
#   Implement atomic_inc_and_test() on various architectures
# 
# include/asm-sh/atomic.h
#   2004/05/14 19:00:05-07:00 akpm@osdl.org +10 -0
#   Implement atomic_inc_and_test() on various architectures
# 
# include/asm-s390/atomic.h
#   2004/05/14 19:00:05-07:00 akpm@osdl.org +1 -0
#   Implement atomic_inc_and_test() on various architectures
# 
# include/asm-ppc64/atomic.h
#   2004/05/14 19:00:05-07:00 akpm@osdl.org +10 -0
#   Implement atomic_inc_and_test() on various architectures
# 
# include/asm-ppc/atomic.h
#   2004/05/14 19:00:05-07:00 akpm@osdl.org +10 -0
#   Implement atomic_inc_and_test() on various architectures
# 
# include/asm-parisc/atomic.h
#   2004/05/14 19:00:05-07:00 akpm@osdl.org +10 -0
#   Implement atomic_inc_and_test() on various architectures
# 
# include/asm-m68knommu/atomic.h
#   2004/05/14 19:00:05-07:00 akpm@osdl.org +10 -0
#   Implement atomic_inc_and_test() on various architectures
# 
# include/asm-h8300/atomic.h
#   2004/05/14 19:00:05-07:00 akpm@osdl.org +10 -0
#   Implement atomic_inc_and_test() on various architectures
# 
# ChangeSet
#   2004/05/14 19:39:40-07:00 akpm@osdl.org 
#   [PATCH] Implement atomic_add_negative() on various architectures
#   
#   Lots of architectures have atomic_add_return() and no atomic_add_negative().
#   
#   We can implement the latter in terms of the former.
# 
# include/asm-sparc/atomic.h
#   2004/05/14 19:00:04-07:00 akpm@osdl.org +2 -0
#   Implement atomic_add_negative() on various architectures
# 
# include/asm-sh/atomic.h
#   2004/05/14 19:00:04-07:00 akpm@osdl.org +2 -0
#   Implement atomic_add_negative() on various architectures
# 
# include/asm-ppc64/atomic.h
#   2004/05/14 19:00:04-07:00 akpm@osdl.org +2 -0
#   Implement atomic_add_negative() on various architectures
# 
# include/asm-parisc/atomic.h
#   2004/05/14 19:00:04-07:00 akpm@osdl.org +2 -0
#   Implement atomic_add_negative() on various architectures
# 
# include/asm-m68knommu/atomic.h
#   2004/05/14 19:00:04-07:00 akpm@osdl.org +2 -0
#   Implement atomic_add_negative() on various architectures
# 
# include/asm-h8300/atomic.h
#   2004/05/14 19:00:04-07:00 akpm@osdl.org +1 -0
#   Implement atomic_add_negative() on various architectures
# 
# include/asm-cris/atomic.h
#   2004/05/14 19:00:04-07:00 akpm@osdl.org +2 -0
#   Implement atomic_add_negative() on various architectures
# 
# include/asm-alpha/atomic.h
#   2004/05/14 19:00:04-07:00 akpm@osdl.org +2 -0
#   Implement atomic_add_negative() on various architectures
# 
# ChangeSet
#   2004/05/14 19:39:29-07:00 akpm@osdl.org 
#   [PATCH] Make users of page->count use the provided macros
#   
#   I'm about to change the meaning (and name) of page->count.  Go through and fix
#   up all those places which are open-coding references to it.
# 
# drivers/scsi/sg.c
#   2004/05/14 19:00:04-07:00 akpm@osdl.org +4 -4
#   Make users of page->count use the provided macros
# 
# drivers/char/drm/drm_vm.h
#   2004/05/14 19:00:04-07:00 akpm@osdl.org +1 -1
#   Make users of page->count use the provided macros
# 
# drivers/char/drm/ati_pcigart.h
#   2004/05/14 19:00:04-07:00 akpm@osdl.org +2 -2
#   Make users of page->count use the provided macros
# 
# arch/x86_64/mm/pageattr.c
#   2004/05/14 19:00:04-07:00 akpm@osdl.org +4 -4
#   Make users of page->count use the provided macros
# 
# arch/um/kernel/mem.c
#   2004/05/14 19:00:04-07:00 akpm@osdl.org +1 -1
#   Make users of page->count use the provided macros
# 
# arch/sparc/mm/init.c
#   2004/05/14 19:00:04-07:00 akpm@osdl.org +1 -1
#   Make users of page->count use the provided macros
# 
# arch/ppc/mm/init.c
#   2004/05/14 19:00:04-07:00 akpm@osdl.org +1 -1
#   Make users of page->count use the provided macros
# 
# arch/mips/mm/init.c
#   2004/05/14 19:00:04-07:00 akpm@osdl.org +1 -1
#   Make users of page->count use the provided macros
# 
# arch/i386/mm/pageattr.c
#   2004/05/14 19:00:04-07:00 akpm@osdl.org +4 -4
#   Make users of page->count use the provided macros
# 
# ChangeSet
#   2004/05/14 16:48:56-07:00 davem@nuts.davemloft.net 
#   Merge nuts.davemloft.net:/disk1/BK/network-2.6
#   into nuts.davemloft.net:/disk1/BK/net-2.6
# 
# drivers/bluetooth/hci_usb.c
#   2004/05/14 16:48:48-07:00 davem@nuts.davemloft.net +0 -0
#   Auto merged
# 
# drivers/bluetooth/bfusb.c
#   2004/05/14 16:48:47-07:00 davem@nuts.davemloft.net +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/05/14 15:44:08-07:00 greg@kroah.com 
#   Merge kroah.com:/home/greg/linux/BK/bleed-2.6
#   into kroah.com:/home/greg/linux/BK/driver-2.6
# 
# kernel/module.c
#   2004/05/14 15:44:03-07:00 greg@kroah.com +0 -0
#   Auto merged
# 
# drivers/firmware/Kconfig
#   2004/05/14 15:44:03-07:00 greg@kroah.com +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/05/14 15:21:10-07:00 greg@kroah.com 
#   Merge kroah.com:/home/greg/linux/BK/bleed-2.6
#   into kroah.com:/home/greg/linux/BK/i2c-2.6
# 
# include/linux/pci_ids.h
#   2004/05/14 15:21:04-07:00 greg@kroah.com +0 -0
#   Auto merged
# 
# arch/i386/pci/irq.c
#   2004/05/14 15:21:04-07:00 greg@kroah.com +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/05/14 15:00:02-07:00 dsaxena@plexity.net 
#   [PATCH] I2C: Missed ixp42x -> ixp4xx conversion
#   
#   Forgot to include this with my original patch a few weeks ago...
# 
# include/linux/i2c-id.h
#   2004/05/12 17:20:41-07:00 dsaxena@plexity.net +1 -1
#   I2C: Missed ixp42x -> ixp4xx conversion
# 
# ChangeSet
#   2004/05/14 14:59:26-07:00 bjorn@mork.no 
#   [PATCH] I2C: "probe" module param broken for it87 in Linux 2.6.6
#   
#   Jean Delvare <khali@linux-fr.org> writes:
#   > So I'd suggest that you simply use the standard exit sequence in the
#   > it87 driver (the second one in your current patch). A patch for the 2.4
#   > driver would be appreciated as well.
#   
#   OK.  I've attached a new version of the patch against linux-2.6.6.
#   I'll send a patch against current lm_sensors CVS removing the extra
#   exit command in a separate mail.
#   
#   Greg KH <greg@kroah.com> writes:
#   > On Wed, May 12, 2004 at 04:38:03PM +0200, Bj?rn Mork wrote:
#   >> +	if (!it87_find(&addr)) {
#   >> +		printk("it87.o: new ISA address: 0x%04x\n", addr);
#   >
#   > That printk is wrong (no KERN_ level, or dev_printk() style use).
#   > Please fix it in your next revision of this patch.
#   
#   Errh, I just added it to document my sloppyness.  It was never meant
#   to be in the patch I sent you.  Sorry.  Removed in the attached patch.
#   The style of these drivers seem to be "just working, making no noise"
#   so I assume informational printk's are unwanted.
# 
# drivers/i2c/chips/it87.c
#   2004/05/13 10:49:41-07:00 bjorn@mork.no +78 -0
#   I2C: "probe" module param broken for it87 in Linux 2.6.6
# 
# ChangeSet
#   2004/05/14 14:58:42-07:00 jdgaston@snoqualmie.dp.intel.com 
#   [PATCH] I2C: ICH6/6300ESB i2c support
#   
#   This patch adds DID support for ICH6 and 6300ESB to i2c-i801.c(SMBus).
#   In order to add this support I needed to patch pci_ids.h with the SMBus
#   DID's.  To keep things orginized I renumbered the ICH6 and ESB entries
#   in pci_ids.h.  I then patched the piix IDE and i810 audio drivers to
#   reflect the updated #define's.  I also removed an error from irq.c;
#   there was a reference to a 6300ESB DID that does not exist.
# 
# sound/oss/i810_audio.c
#   2004/05/10 11:56:30-07:00 jdgaston@snoqualmie.dp.intel.com +5 -5
#   I2C: ICH6/6300ESB i2c support
# 
# include/linux/pci_ids.h
#   2004/05/10 11:56:30-07:00 jdgaston@snoqualmie.dp.intel.com +18 -3
#   I2C: ICH6/6300ESB i2c support
# 
# drivers/ide/pci/piix.h
#   2004/05/11 17:34:02-07:00 jdgaston@snoqualmie.dp.intel.com +1 -1
#   I2C: ICH6/6300ESB i2c support
# 
# drivers/ide/pci/piix.c
#   2004/05/11 17:30:46-07:00 jdgaston@snoqualmie.dp.intel.com +4 -4
#   I2C: ICH6/6300ESB i2c support
# 
# drivers/i2c/busses/i2c-i801.c
#   2004/05/10 11:56:30-07:00 jdgaston@snoqualmie.dp.intel.com +20 -6
#   I2C: ICH6/6300ESB i2c support
# 
# drivers/i2c/busses/Kconfig
#   2004/05/10 11:56:30-07:00 jdgaston@snoqualmie.dp.intel.com +2 -0
#   I2C: ICH6/6300ESB i2c support
# 
# arch/i386/pci/irq.c
#   2004/05/10 11:56:30-07:00 jdgaston@snoqualmie.dp.intel.com +2 -1
#   I2C: ICH6/6300ESB i2c support
# 
# ChangeSet
#   2004/05/14 14:49:39-07:00 greg@kroah.com 
#   USB: convert visor to use module_param()
# 
# drivers/usb/serial/visor.c
#   2004/05/14 07:49:18-07:00 greg@kroah.com +7 -6
#   USB: convert visor to use module_param()
# 
# ChangeSet
#   2004/05/14 14:47:04-07:00 greg@kroah.com 
#   USB: convert pl2303 to use module_param()
# 
# drivers/usb/serial/pl2303.c
#   2004/05/14 07:46:43-07:00 greg@kroah.com +3 -2
#   USB: convert pl2303 to use module_param()
# 
# ChangeSet
#   2004/05/14 14:46:03-07:00 greg@kroah.com 
#   USB: change usbserial core to use module_param()
# 
# drivers/usb/serial/usb-serial.c
#   2004/05/14 07:45:20-07:00 greg@kroah.com +3 -2
#   USB: change usbserial core to use module_param()
# 
# drivers/usb/serial/generic.c
#   2004/05/14 07:45:20-07:00 greg@kroah.com +3 -2
#   USB: change usbserial core to use module_param()
# 
# ChangeSet
#   2004/05/14 12:19:20-07:00 david-b@pacbell.net 
#   [PATCH] USB: hcd-pci suspend tweak
#   
#   I needed this to get an APM + UHCI config to behave on resume.
#   Applies against your BK of last night ... OHCI and EHCI do
#   some of this manually, they could be simplified later.
# 
# drivers/usb/core/hcd-pci.c
#   2004/05/11 09:28:40-07:00 david-b@pacbell.net +2 -0
#   USB: hcd-pci suspend tweak
# 
# ChangeSet
#   2004/05/14 12:13:00-07:00 maneesh@in.ibm.com 
#   [PATCH] sysfs_rename_dir-cleanup
#   
#   o The following patch cleans up sysfs_rename_dir(). It now checks the
#     return code of kobject_set_name() and propagates the error code to its
#     callers. Because of this there are changes in the following two APIs. Both
#     return int instead of void.
#   
#   int sysfs_rename_dir(struct kobject * kobj, const char *new_name)
#   int kobject_rename(struct kobject * kobj, char *new_name)
# 
# ChangeSet
#   2004/05/14 12:12:11-07:00 masbock@us.ibm.com 
#   [PATCH] add ibmasm driver warning message
#   
#   [note, I changed this a bit to be nicer on the system log, greg k-h]
# 
# drivers/misc/ibmasm/module.c
#   2004/05/14 05:00:50-07:00 masbock@us.ibm.com +7 -0
#   add ibmasm driver warning message
# 
# drivers/misc/Kconfig
#   2004/05/10 08:38:51-07:00 masbock@us.ibm.com +7 -1
#   add ibmasm driver warning message
# 
# ChangeSet
#   2004/05/14 11:57:21-07:00 david-b@pacbell.net 
#   [PATCH] USB: ohci resume fix
#   
#   Prakash K. Cheemplavam wrote:
#   > David Brownell wrote:
#   >
#   >>> There appear lines like
#   >>>
#   >>> usb usb2: string descriptor 0 read error: -108
#   >>>
#   >>> bug or feature? They weren't there with 2.6.6-mm1. I have no usb2.0
#   >>> stuff to actually test. My usb1 stuff seems to work though.
#   >>
#   >> Bug; minor, since the only real symptom seems to be messages like
#   >> that.  Ignore them for now, I'll make a patch soonish.
#   >
#   > Ok, good. Thanks for the explanation of what is going on, though I don't
#   > can make too much out of it. ;-)
#   
#   The short version is:  it's missing this patch.
# 
# drivers/usb/host/ohci-hub.c
#   2004/05/13 09:15:18-07:00 david-b@pacbell.net +1 -0
#   USB: ohci resume fix
# 
# ChangeSet
#   2004/05/14 11:52:44-07:00 baldrick@free.fr 
#   [PATCH] USB: compile fix for usbfs snooping
# 
# drivers/usb/core/devio.c
#   2004/05/14 00:50:03-07:00 baldrick@free.fr +1 -0
#   USB: compile fix for usbfs snooping
# 
# ChangeSet
#   2004/05/14 11:49:41-07:00 greg@kroah.com 
#   USB: remove get_usb_serial() as it's pretty much unneeded
#   
#   It also could hide real bugs, and that's not good.  And the name
#   implies that a reference is grabbed, and that's not true at all.
# 
# drivers/usb/serial/whiteheat.c
#   2004/05/14 04:49:03-07:00 greg@kroah.com +1 -22
#   USB: remove get_usb_serial() as it's pretty much unneeded
#   
#   It also could hide real bugs, and that's not good.  And the name
#   implies that a reference is grabbed, and that's not true at all.
# 
# drivers/usb/serial/visor.c
#   2004/05/14 04:49:03-07:00 greg@kroah.com +5 -16
#   USB: remove get_usb_serial() as it's pretty much unneeded
#   
#   It also could hide real bugs, and that's not good.  And the name
#   implies that a reference is grabbed, and that's not true at all.
# 
# drivers/usb/serial/usb-serial.h
#   2004/05/14 04:49:03-07:00 greg@kroah.com +0 -13
#   USB: remove get_usb_serial() as it's pretty much unneeded
#   
#   It also could hide real bugs, and that's not good.  And the name
#   implies that a reference is grabbed, and that's not true at all.
# 
# drivers/usb/serial/usb-serial.c
#   2004/05/14 04:49:03-07:00 greg@kroah.com +17 -66
#   USB: remove get_usb_serial() as it's pretty much unneeded
#   
#   It also could hide real bugs, and that's not good.  And the name
#   implies that a reference is grabbed, and that's not true at all.
# 
# drivers/usb/serial/safe_serial.c
#   2004/05/14 04:49:03-07:00 greg@kroah.com +3 -10
#   USB: remove get_usb_serial() as it's pretty much unneeded
#   
#   It also could hide real bugs, and that's not good.  And the name
#   implies that a reference is grabbed, and that's not true at all.
# 
# drivers/usb/serial/pl2303.c
#   2004/05/14 04:49:03-07:00 greg@kroah.com +2 -17
#   USB: remove get_usb_serial() as it's pretty much unneeded
#   
#   It also could hide real bugs, and that's not good.  And the name
#   implies that a reference is grabbed, and that's not true at all.
# 
# drivers/usb/serial/omninet.c
#   2004/05/14 04:49:03-07:00 greg@kroah.com +7 -24
#   USB: remove get_usb_serial() as it's pretty much unneeded
#   
#   It also could hide real bugs, and that's not good.  And the name
#   implies that a reference is grabbed, and that's not true at all.
# 
# drivers/usb/serial/kl5kusb105.c
#   2004/05/14 04:49:03-07:00 greg@kroah.com +20 -38
#   USB: remove get_usb_serial() as it's pretty much unneeded
#   
#   It also could hide real bugs, and that's not good.  And the name
#   implies that a reference is grabbed, and that's not true at all.
# 
# drivers/usb/serial/keyspan.c
#   2004/05/14 04:49:03-07:00 greg@kroah.com +1 -5
#   USB: remove get_usb_serial() as it's pretty much unneeded
#   
#   It also could hide real bugs, and that's not good.  And the name
#   implies that a reference is grabbed, and that's not true at all.
# 
# drivers/usb/serial/ir-usb.c
#   2004/05/14 04:49:03-07:00 greg@kroah.com +6 -21
#   USB: remove get_usb_serial() as it's pretty much unneeded
#   
#   It also could hide real bugs, and that's not good.  And the name
#   implies that a reference is grabbed, and that's not true at all.
# 
# drivers/usb/serial/ipaq.c
#   2004/05/14 04:49:03-07:00 greg@kroah.com +2 -14
#   USB: remove get_usb_serial() as it's pretty much unneeded
#   
#   It also could hide real bugs, and that's not good.  And the name
#   implies that a reference is grabbed, and that's not true at all.
# 
# drivers/usb/serial/io_ti.c
#   2004/05/14 04:49:03-07:00 greg@kroah.com +29 -43
#   USB: remove get_usb_serial() as it's pretty much unneeded
#   
#   It also could hide real bugs, and that's not good.  And the name
#   implies that a reference is grabbed, and that's not true at all.
# 
# drivers/usb/serial/io_edgeport.c
#   2004/05/14 04:49:03-07:00 greg@kroah.com +29 -36
#   USB: remove get_usb_serial() as it's pretty much unneeded
#   
#   It also could hide real bugs, and that's not good.  And the name
#   implies that a reference is grabbed, and that's not true at all.
# 
# drivers/usb/serial/generic.c
#   2004/05/14 04:49:03-07:00 greg@kroah.com +1 -12
#   USB: remove get_usb_serial() as it's pretty much unneeded
#   
#   It also could hide real bugs, and that's not good.  And the name
#   implies that a reference is grabbed, and that's not true at all.
# 
# drivers/usb/serial/ftdi_sio.c
#   2004/05/14 04:49:03-07:00 greg@kroah.com +49 -70
#   USB: remove get_usb_serial() as it's pretty much unneeded
#   
#   It also could hide real bugs, and that's not good.  And the name
#   implies that a reference is grabbed, and that's not true at all.
# 
# drivers/usb/serial/empeg.c
#   2004/05/14 04:49:03-07:00 greg@kroah.com +4 -18
#   USB: remove get_usb_serial() as it's pretty much unneeded
#   
#   It also could hide real bugs, and that's not good.  And the name
#   implies that a reference is grabbed, and that's not true at all.
# 
# drivers/usb/serial/cyberjack.c
#   2004/05/14 04:49:03-07:00 greg@kroah.com +4 -16
#   USB: remove get_usb_serial() as it's pretty much unneeded
#   
#   It also could hide real bugs, and that's not good.  And the name
#   implies that a reference is grabbed, and that's not true at all.
# 
# drivers/usb/serial/console.c
#   2004/05/14 04:49:03-07:00 greg@kroah.com +3 -2
#   USB: remove get_usb_serial() as it's pretty much unneeded
#   
#   It also could hide real bugs, and that's not good.  And the name
#   implies that a reference is grabbed, and that's not true at all.
# 
# drivers/usb/serial/belkin_sa.c
#   2004/05/14 04:49:03-07:00 greg@kroah.com +4 -12
#   USB: remove get_usb_serial() as it's pretty much unneeded
#   
#   It also could hide real bugs, and that's not good.  And the name
#   implies that a reference is grabbed, and that's not true at all.
# 
# ChangeSet
#   2004/05/14 10:54:51-07:00 greg@kroah.com 
#   USB: remove serial_paranoia_check() function
#   
#   If this is hiding real problems, we need to find them.
# 
# drivers/usb/serial/usb-serial.h
#   2004/05/14 03:54:11-07:00 greg@kroah.com +1 -17
#   USB: remove serial_paranoia_check() function
#   
#   If this is hiding real problems, we need to find them.
# 
# drivers/usb/serial/usb-serial.c
#   2004/05/14 03:54:11-07:00 greg@kroah.com +0 -3
#   USB: remove serial_paranoia_check() function
#   
#   If this is hiding real problems, we need to find them.
# 
# drivers/usb/serial/pl2303.c
#   2004/05/14 03:54:11-07:00 greg@kroah.com +0 -3
#   USB: remove serial_paranoia_check() function
#   
#   If this is hiding real problems, we need to find them.
# 
# drivers/usb/serial/omninet.c
#   2004/05/14 03:54:11-07:00 greg@kroah.com +0 -6
#   USB: remove serial_paranoia_check() function
#   
#   If this is hiding real problems, we need to find them.
# 
# drivers/usb/serial/keyspan_pda.c
#   2004/05/14 03:54:11-07:00 greg@kroah.com +1 -15
#   USB: remove serial_paranoia_check() function
#   
#   If this is hiding real problems, we need to find them.
# 
# drivers/usb/serial/io_ti.c
#   2004/05/14 03:54:11-07:00 greg@kroah.com +0 -4
#   USB: remove serial_paranoia_check() function
#   
#   If this is hiding real problems, we need to find them.
# 
# drivers/usb/serial/io_edgeport.c
#   2004/05/14 03:54:11-07:00 greg@kroah.com +0 -8
#   USB: remove serial_paranoia_check() function
#   
#   If this is hiding real problems, we need to find them.
# 
# drivers/usb/serial/digi_acceleport.c
#   2004/05/14 03:54:11-07:00 greg@kroah.com +0 -5
#   USB: remove serial_paranoia_check() function
#   
#   If this is hiding real problems, we need to find them.
# 
# drivers/usb/serial/cyberjack.c
#   2004/05/14 03:54:11-07:00 greg@kroah.com +0 -5
#   USB: remove serial_paranoia_check() function
#   
#   If this is hiding real problems, we need to find them.
# 
# drivers/usb/serial/belkin_sa.c
#   2004/05/14 03:54:11-07:00 greg@kroah.com +0 -6
#   USB: remove serial_paranoia_check() function
#   
#   If this is hiding real problems, we need to find them.
# 
# ChangeSet
#   2004/05/14 10:53:59-07:00 greg@kroah.com 
#   USB: removed port_paranoia_check() call for usb serial drivers.
#   
#   Pretty useless stuff.  If this was hiding anything real, we need to find out.
# 
# drivers/usb/serial/visor.c
#   2004/05/14 03:53:25-07:00 greg@kroah.com +0 -12
#   USB: removed port_paranoia_check() call for usb serial drivers.
#   
#   Pretty useless stuff.  If this was hiding anything real, we need to find out.
# 
# drivers/usb/serial/usb-serial.h
#   2004/05/14 03:53:25-07:00 greg@kroah.com +1 -18
#   USB: removed port_paranoia_check() call for usb serial drivers.
#   
#   Pretty useless stuff.  If this was hiding anything real, we need to find out.
# 
# drivers/usb/serial/pl2303.c
#   2004/05/14 03:53:25-07:00 greg@kroah.com +0 -11
#   USB: removed port_paranoia_check() call for usb serial drivers.
#   
#   Pretty useless stuff.  If this was hiding anything real, we need to find out.
# 
# drivers/usb/serial/omninet.c
#   2004/05/14 03:53:25-07:00 greg@kroah.com +0 -11
#   USB: removed port_paranoia_check() call for usb serial drivers.
#   
#   Pretty useless stuff.  If this was hiding anything real, we need to find out.
# 
# drivers/usb/serial/kobil_sct.c
#   2004/05/14 03:53:25-07:00 greg@kroah.com +0 -3
#   USB: removed port_paranoia_check() call for usb serial drivers.
#   
#   Pretty useless stuff.  If this was hiding anything real, we need to find out.
# 
# drivers/usb/serial/keyspan_pda.c
#   2004/05/14 03:53:25-07:00 greg@kroah.com +0 -9
#   USB: removed port_paranoia_check() call for usb serial drivers.
#   
#   Pretty useless stuff.  If this was hiding anything real, we need to find out.
# 
# drivers/usb/serial/ir-usb.c
#   2004/05/14 03:53:25-07:00 greg@kroah.com +0 -12
#   USB: removed port_paranoia_check() call for usb serial drivers.
#   
#   Pretty useless stuff.  If this was hiding anything real, we need to find out.
# 
# drivers/usb/serial/ipaq.c
#   2004/05/14 03:53:25-07:00 greg@kroah.com +0 -15
#   USB: removed port_paranoia_check() call for usb serial drivers.
#   
#   Pretty useless stuff.  If this was hiding anything real, we need to find out.
# 
# drivers/usb/serial/io_ti.c
#   2004/05/14 03:53:25-07:00 greg@kroah.com +0 -14
#   USB: removed port_paranoia_check() call for usb serial drivers.
#   
#   Pretty useless stuff.  If this was hiding anything real, we need to find out.
# 
# drivers/usb/serial/io_edgeport.c
#   2004/05/14 03:53:25-07:00 greg@kroah.com +23 -44
#   USB: removed port_paranoia_check() call for usb serial drivers.
#   
#   Pretty useless stuff.  If this was hiding anything real, we need to find out.
# 
# drivers/usb/serial/generic.c
#   2004/05/14 03:53:25-07:00 greg@kroah.com +0 -3
#   USB: removed port_paranoia_check() call for usb serial drivers.
#   
#   Pretty useless stuff.  If this was hiding anything real, we need to find out.
# 
# drivers/usb/serial/ftdi_sio.c
#   2004/05/14 03:53:25-07:00 greg@kroah.com +0 -6
#   USB: removed port_paranoia_check() call for usb serial drivers.
#   
#   Pretty useless stuff.  If this was hiding anything real, we need to find out.
# 
# drivers/usb/serial/empeg.c
#   2004/05/14 03:53:25-07:00 greg@kroah.com +0 -12
#   USB: removed port_paranoia_check() call for usb serial drivers.
#   
#   Pretty useless stuff.  If this was hiding anything real, we need to find out.
# 
# drivers/usb/serial/digi_acceleport.c
#   2004/05/14 03:53:25-07:00 greg@kroah.com +3 -10
#   USB: removed port_paranoia_check() call for usb serial drivers.
#   
#   Pretty useless stuff.  If this was hiding anything real, we need to find out.
# 
# drivers/usb/serial/cyberjack.c
#   2004/05/14 03:53:25-07:00 greg@kroah.com +0 -6
#   USB: removed port_paranoia_check() call for usb serial drivers.
#   
#   Pretty useless stuff.  If this was hiding anything real, we need to find out.
# 
# drivers/usb/serial/belkin_sa.c
#   2004/05/14 03:53:25-07:00 greg@kroah.com +0 -6
#   USB: removed port_paranoia_check() call for usb serial drivers.
#   
#   Pretty useless stuff.  If this was hiding anything real, we need to find out.
# 
# ChangeSet
#   2004/05/14 10:52:34-07:00 greg@kroah.com 
#   USB: remove magic number field from struct usb_serial as it's pretty useless.
# 
# drivers/usb/serial/usb-serial.h
#   2004/05/14 03:52:11-07:00 greg@kroah.com +0 -8
#   USB: remove magic number field from struct usb_serial as it's pretty useless.
# 
# drivers/usb/serial/usb-serial.c
#   2004/05/14 03:52:11-07:00 greg@kroah.com +1 -2
#   USB: remove magic number field from struct usb_serial as it's pretty useless.
# 
# ChangeSet
#   2004/05/14 10:50:40-07:00 greg@kroah.com 
#   USB: remove magic number field from usb_serial_port as it's pretty useless.
# 
# drivers/usb/serial/usb-serial.h
#   2004/05/14 03:50:03-07:00 greg@kroah.com +1 -8
#   USB: remove magic number field from usb_serial_port as it's pretty useless.
# 
# drivers/usb/serial/usb-serial.c
#   2004/05/14 03:50:03-07:00 greg@kroah.com +0 -1
#   USB: remove magic number field from usb_serial_port as it's pretty useless.
# 
# ChangeSet
#   2004/05/14 14:16:04+01:00 aia21@cantab.net 
#   NTFS: 2.1.11 - Rename uchar_t to ntfschar.
# 
# fs/ntfs/volume.h
#   2004/05/14 14:15:58+01:00 aia21@cantab.net +1 -1
#   Rename uchar_t to ntfschar.
# 
# fs/ntfs/upcase.c
#   2004/05/14 14:15:58+01:00 aia21@cantab.net +4 -4
#   Rename uchar_t to ntfschar.
# 
# fs/ntfs/unistr.c
#   2004/05/14 14:15:58+01:00 aia21@cantab.net +23 -23
#   Rename uchar_t to ntfschar.
# 
# fs/ntfs/types.h
#   2004/05/14 14:15:58+01:00 aia21@cantab.net +1 -1
#   Rename uchar_t to ntfschar.
# 
# fs/ntfs/super.c
#   2004/05/14 14:15:57+01:00 aia21@cantab.net +6 -6
#   Rename uchar_t to ntfschar.
# 
# fs/ntfs/ntfs.h
#   2004/05/14 14:15:57+01:00 aia21@cantab.net +16 -16
#   Rename uchar_t to ntfschar.
# 
# fs/ntfs/namei.c
#   2004/05/14 14:15:57+01:00 aia21@cantab.net +4 -4
#   Rename uchar_t to ntfschar.
# 
# fs/ntfs/logfile.h
#   2004/05/14 14:15:57+01:00 aia21@cantab.net +1 -1
#   Rename uchar_t to ntfschar.
# 
# fs/ntfs/layout.h
#   2004/05/14 14:15:57+01:00 aia21@cantab.net +4 -4
#   Rename uchar_t to ntfschar.
# 
# fs/ntfs/inode.h
#   2004/05/14 14:15:57+01:00 aia21@cantab.net +3 -3
#   Rename uchar_t to ntfschar.
# 
# fs/ntfs/inode.c
#   2004/05/14 14:15:57+01:00 aia21@cantab.net +4 -4
#   Rename uchar_t to ntfschar.
# 
# fs/ntfs/dir.h
#   2004/05/14 14:15:56+01:00 aia21@cantab.net +3 -3
#   Rename uchar_t to ntfschar.
# 
# fs/ntfs/dir.c
#   2004/05/14 14:15:56+01:00 aia21@cantab.net +22 -22
#   Rename uchar_t to ntfschar.
# 
# fs/ntfs/attrib.h
#   2004/05/14 14:15:56+01:00 aia21@cantab.net +5 -4
#   Rename uchar_t to ntfschar.
# 
# fs/ntfs/attrib.c
#   2004/05/14 14:15:56+01:00 aia21@cantab.net +14 -13
#   Rename uchar_t to ntfschar.
# 
# fs/ntfs/ChangeLog
#   2004/05/14 14:15:56+01:00 aia21@cantab.net +2 -0
#   Update for 2.1.11 release.
# 
# ChangeSet
#   2004/05/14 12:30:56+01:00 aia21@cantab.net 
#   NTFS: 2.1.11 - Driver internal cleanups.
# 
# fs/ntfs/logfile.c
#   2004/05/14 12:30:49+01:00 aia21@cantab.net +6 -1
#   Use generic_ffs() instead of ffs() in which allows the log_page_size
#   variable to be optimized by gcc into a constant.
# 
# fs/ntfs/Makefile
#   2004/05/14 12:30:49+01:00 aia21@cantab.net +1 -1
#   Bump version.
# 
# fs/ntfs/ChangeLog
#   2004/05/14 12:30:49+01:00 aia21@cantab.net +4 -1
#   Update.
# 
# Documentation/filesystems/ntfs.txt
#   2004/05/14 12:30:49+01:00 aia21@cantab.net +2 -0
#   Update.
# 
# ChangeSet
#   2004/05/13 22:46:01-04:00 jgarzik@redhat.com 
#   [libata] kill ATA_QCFLAG_POLL flag
#   
#   The standard ATA bit nIEN in the Device Control register serves as
#   the indicator for whether we are polling or not.  As it mirrors
#   ATA_QCFLAG_POLL completely, eliminate that in favor of testing
#   ATA_NIEN bit.
# 
# include/linux/libata.h
#   2004/05/13 22:45:55-04:00 jgarzik@redhat.com +0 -2
#   [libata] kill ATA_QCFLAG_POLL flag
#   
#   The standard ATA bit nIEN in the Device Control register serves as
#   the indicator for whether we are polling or not.  As it mirrors
#   ATA_QCFLAG_POLL completely, eliminate that in favor of testing
#   ATA_NIEN bit.
# 
# drivers/scsi/sata_vsc.c
#   2004/05/13 22:45:55-04:00 jgarzik@redhat.com +1 -1
#   [libata] kill ATA_QCFLAG_POLL flag
#   
#   The standard ATA bit nIEN in the Device Control register serves as
#   the indicator for whether we are polling or not.  As it mirrors
#   ATA_QCFLAG_POLL completely, eliminate that in favor of testing
#   ATA_NIEN bit.
# 
# drivers/scsi/sata_sx4.c
#   2004/05/13 22:45:55-04:00 jgarzik@redhat.com +1 -1
#   [libata] kill ATA_QCFLAG_POLL flag
#   
#   The standard ATA bit nIEN in the Device Control register serves as
#   the indicator for whether we are polling or not.  As it mirrors
#   ATA_QCFLAG_POLL completely, eliminate that in favor of testing
#   ATA_NIEN bit.
# 
# drivers/scsi/sata_promise.c
#   2004/05/13 22:45:55-04:00 jgarzik@redhat.com +1 -1
#   [libata] kill ATA_QCFLAG_POLL flag
#   
#   The standard ATA bit nIEN in the Device Control register serves as
#   the indicator for whether we are polling or not.  As it mirrors
#   ATA_QCFLAG_POLL completely, eliminate that in favor of testing
#   ATA_NIEN bit.
# 
# drivers/scsi/libata-core.c
#   2004/05/13 22:45:55-04:00 jgarzik@redhat.com +1 -1
#   [libata] kill ATA_QCFLAG_POLL flag
#   
#   The standard ATA bit nIEN in the Device Control register serves as
#   the indicator for whether we are polling or not.  As it mirrors
#   ATA_QCFLAG_POLL completely, eliminate that in favor of testing
#   ATA_NIEN bit.
# 
# ChangeSet
#   2004/05/13 22:39:17-04:00 jgarzik@redhat.com 
#   [libata] random minor bug fixes
#   
#   * Only call ata_sg_setup{_one} if ATA_QCFLAG_SG is set.  Preparation
#     for future use, as currently ATA_QCFLAG_SG is always set when
#     ata_qc_issue is called.
#   
#     This change in theory is incorrect for Promise TX/SX4 drivers,
#     since those drivers set up the Promise-specific packet in their
#     ->fill_sg hook, which is now called conditionally.
#   
#     A FIXME that doesn't affect anything, for now.
#   
#   * ATA_PROT_ATAPI and ATA_PROT_ATAPI_DMA command issue need to be
#     differentiated.
#   
#   * Create and use ata_qc_set_polling() to consistently set/clear the
#     flags associated with using polling instead of interrupts.
# 
# include/linux/libata.h
#   2004/05/13 22:39:12-04:00 jgarzik@redhat.com +7 -0
#   [libata] random minor bug fixes
#   
#   * Only call ata_sg_setup{_one} if ATA_QCFLAG_SG is set.  Preparation
#     for future use, as currently ATA_QCFLAG_SG is always set when
#     ata_qc_issue is called.
#   
#     This change in theory is incorrect for Promise TX/SX4 drivers,
#     since those drivers set up the Promise-specific packet in their
#     ->fill_sg hook, which is now called conditionally.
#   
#     A FIXME that doesn't affect anything, for now.
#   
#   * ATA_PROT_ATAPI and ATA_PROT_ATAPI_DMA command issue need to be
#     differentiated.
#   
#   * Create and use ata_qc_set_polling() to consistently set/clear the
#     flags associated with using polling instead of interrupts.
# 
# drivers/scsi/libata-scsi.c
#   2004/05/13 22:39:12-04:00 jgarzik@redhat.com +1 -2
#   [libata] random minor bug fixes
#   
#   * Only call ata_sg_setup{_one} if ATA_QCFLAG_SG is set.  Preparation
#     for future use, as currently ATA_QCFLAG_SG is always set when
#     ata_qc_issue is called.
#   
#     This change in theory is incorrect for Promise TX/SX4 drivers,
#     since those drivers set up the Promise-specific packet in their
#     ->fill_sg hook, which is now called conditionally.
#   
#     A FIXME that doesn't affect anything, for now.
#   
#   * ATA_PROT_ATAPI and ATA_PROT_ATAPI_DMA command issue need to be
#     differentiated.
#   
#   * Create and use ata_qc_set_polling() to consistently set/clear the
#     flags associated with using polling instead of interrupts.
# 
# drivers/scsi/libata-core.c
#   2004/05/13 22:39:12-04:00 jgarzik@redhat.com +16 -11
#   [libata] random minor bug fixes
#   
#   * Only call ata_sg_setup{_one} if ATA_QCFLAG_SG is set.  Preparation
#     for future use, as currently ATA_QCFLAG_SG is always set when
#     ata_qc_issue is called.
#   
#     This change in theory is incorrect for Promise TX/SX4 drivers,
#     since those drivers set up the Promise-specific packet in their
#     ->fill_sg hook, which is now called conditionally.
#   
#     A FIXME that doesn't affect anything, for now.
#   
#   * ATA_PROT_ATAPI and ATA_PROT_ATAPI_DMA command issue need to be
#     differentiated.
#   
#   * Create and use ata_qc_set_polling() to consistently set/clear the
#     flags associated with using polling instead of interrupts.
# 
# ChangeSet
#   2004/05/13 21:26:59-04:00 jgarzik@redhat.com 
#   [libata] more ATAPI work - translate SCSI CDB to ATA PACKET
#   
#   Now that we can specify ATAPI as a taskfile protocol, we can utilize
#   the existing SCSI->ATA translation infrastructure to build an ATA
#   PACKET command quickly and easily.
# 
# drivers/scsi/libata.h
#   2004/05/13 21:26:53-04:00 jgarzik@redhat.com +0 -1
#   [libata] more ATAPI work - translate SCSI CDB to ATA PACKET
#   
#   Now that we can specify ATAPI as a taskfile protocol, we can utilize
#   the existing SCSI->ATA translation infrastructure to build an ATA
#   PACKET command quickly and easily.
# 
# drivers/scsi/libata-scsi.c
#   2004/05/13 21:26:53-04:00 jgarzik@redhat.com +16 -46
#   [libata] more ATAPI work - translate SCSI CDB to ATA PACKET
#   
#   Now that we can specify ATAPI as a taskfile protocol, we can utilize
#   the existing SCSI->ATA translation infrastructure to build an ATA
#   PACKET command quickly and easily.
# 
# drivers/scsi/libata-core.c
#   2004/05/13 21:26:53-04:00 jgarzik@redhat.com +0 -14
#   [libata] more ATAPI work - translate SCSI CDB to ATA PACKET
#   
#   Now that we can specify ATAPI as a taskfile protocol, we can utilize
#   the existing SCSI->ATA translation infrastructure to build an ATA
#   PACKET command quickly and easily.
# 
# ChangeSet
#   2004/05/13 21:15:42-04:00 jgarzik@redhat.com 
#   [libata] use new ->bmdma_{start,setup} method to properly support ATAPI
# 
# drivers/scsi/libata-core.c
#   2004/05/13 21:15:37-04:00 jgarzik@redhat.com +9 -2
#   [libata] use new ->bmdma_{start,setup} method to properly support ATAPI
# 
# ChangeSet
#   2004/05/13 20:35:48-04:00 jgarzik@redhat.com 
#   [libata] add new ->bmdma_setup hook
#   
#   In order to support some new taskfile protocols, particularly ATAPI,
#   the setup-and-start-DMA hook needs to be split into its component
#   pieces, 'setup' and 'start'.
#   
#   For PCI IDE-style controllers, most of the code is moved into the
#   'setup' portion, with the 'start' portion only flipping a single
#   bit in hardware.
# 
# include/linux/libata.h
#   2004/05/13 20:33:36-04:00 jgarzik@redhat.com +3 -0
#   [libata] add new ->bmdma_setup hook
#   
#   In order to support some new taskfile protocols, particularly ATAPI,
#   the setup-and-start-DMA hook needs to be split into its component
#   pieces, 'setup' and 'start'.
#   
#   For PCI IDE-style controllers, most of the code is moved into the
#   'setup' portion, with the 'start' portion only flipping a single
#   bit in hardware.
# 
# drivers/scsi/sata_vsc.c
#   2004/05/13 20:33:36-04:00 jgarzik@redhat.com +1 -0
#   [libata] add new ->bmdma_setup hook
#   
#   In order to support some new taskfile protocols, particularly ATAPI,
#   the setup-and-start-DMA hook needs to be split into its component
#   pieces, 'setup' and 'start'.
#   
#   For PCI IDE-style controllers, most of the code is moved into the
#   'setup' portion, with the 'start' portion only flipping a single
#   bit in hardware.
# 
# drivers/scsi/sata_via.c
#   2004/05/13 20:33:36-04:00 jgarzik@redhat.com +1 -0
#   [libata] add new ->bmdma_setup hook
#   
#   In order to support some new taskfile protocols, particularly ATAPI,
#   the setup-and-start-DMA hook needs to be split into its component
#   pieces, 'setup' and 'start'.
#   
#   For PCI IDE-style controllers, most of the code is moved into the
#   'setup' portion, with the 'start' portion only flipping a single
#   bit in hardware.
# 
# drivers/scsi/sata_sx4.c
#   2004/05/13 20:33:36-04:00 jgarzik@redhat.com +8 -0
#   [libata] add new ->bmdma_setup hook
#   
#   In order to support some new taskfile protocols, particularly ATAPI,
#   the setup-and-start-DMA hook needs to be split into its component
#   pieces, 'setup' and 'start'.
#   
#   For PCI IDE-style controllers, most of the code is moved into the
#   'setup' portion, with the 'start' portion only flipping a single
#   bit in hardware.
# 
# drivers/scsi/sata_svw.c
#   2004/05/13 20:33:36-04:00 jgarzik@redhat.com +1 -0
#   [libata] add new ->bmdma_setup hook
#   
#   In order to support some new taskfile protocols, particularly ATAPI,
#   the setup-and-start-DMA hook needs to be split into its component
#   pieces, 'setup' and 'start'.
#   
#   For PCI IDE-style controllers, most of the code is moved into the
#   'setup' portion, with the 'start' portion only flipping a single
#   bit in hardware.
# 
# drivers/scsi/sata_sis.c
#   2004/05/13 20:33:36-04:00 jgarzik@redhat.com +1 -0
#   [libata] add new ->bmdma_setup hook
#   
#   In order to support some new taskfile protocols, particularly ATAPI,
#   the setup-and-start-DMA hook needs to be split into its component
#   pieces, 'setup' and 'start'.
#   
#   For PCI IDE-style controllers, most of the code is moved into the
#   'setup' portion, with the 'start' portion only flipping a single
#   bit in hardware.
# 
# drivers/scsi/sata_sil.c
#   2004/05/13 20:33:36-04:00 jgarzik@redhat.com +1 -0
#   [libata] add new ->bmdma_setup hook
#   
#   In order to support some new taskfile protocols, particularly ATAPI,
#   the setup-and-start-DMA hook needs to be split into its component
#   pieces, 'setup' and 'start'.
#   
#   For PCI IDE-style controllers, most of the code is moved into the
#   'setup' portion, with the 'start' portion only flipping a single
#   bit in hardware.
# 
# drivers/scsi/sata_promise.c
#   2004/05/13 20:33:36-04:00 jgarzik@redhat.com +8 -0
#   [libata] add new ->bmdma_setup hook
#   
#   In order to support some new taskfile protocols, particularly ATAPI,
#   the setup-and-start-DMA hook needs to be split into its component
#   pieces, 'setup' and 'start'.
#   
#   For PCI IDE-style controllers, most of the code is moved into the
#   'setup' portion, with the 'start' portion only flipping a single
#   bit in hardware.
# 
# drivers/scsi/libata-core.c
#   2004/05/13 20:33:36-04:00 jgarzik@redhat.com +40 -6
#   [libata] add new ->bmdma_setup hook
#   
#   In order to support some new taskfile protocols, particularly ATAPI,
#   the setup-and-start-DMA hook needs to be split into its component
#   pieces, 'setup' and 'start'.
#   
#   For PCI IDE-style controllers, most of the code is moved into the
#   'setup' portion, with the 'start' portion only flipping a single
#   bit in hardware.
# 
# drivers/scsi/ata_piix.c
#   2004/05/13 20:33:36-04:00 jgarzik@redhat.com +2 -0
#   [libata] add new ->bmdma_setup hook
#   
#   In order to support some new taskfile protocols, particularly ATAPI,
#   the setup-and-start-DMA hook needs to be split into its component
#   pieces, 'setup' and 'start'.
#   
#   For PCI IDE-style controllers, most of the code is moved into the
#   'setup' portion, with the 'start' portion only flipping a single
#   bit in hardware.
# 
# ChangeSet
#   2004/05/13 16:04:18-07:00 david-b@pacbell.net 
#   [PATCH] USB: usbhid calls itself "hid"
# 
# drivers/usb/input/hid-core.c
#   2004/05/12 04:08:51-07:00 david-b@pacbell.net +1 -1
#   USB: usbhid calls itself "hid"
# 
# ChangeSet
#   2004/05/13 16:03:50-07:00 tony@atomide.com 
#   [PATCH] USB: Merge support for Keyspan UPR-112 USB serial adapter from 2.4 to 2.6
#   
#   Following patch merges the support for Keyspan UPR-112 USB serial adapter
#   from 2.4 to 2.6.
# 
# drivers/usb/serial/keyspan.h
#   2004/05/12 08:42:18-07:00 tony@atomide.com +18 -1
#   USB: Merge support for Keyspan UPR-112 USB serial adapter from 2.4 to 2.6
# 
# ChangeSet
#   2004/05/13 15:40:30-07:00 greg@kroah.com 
#   USB: add snooping capability to usbfs for control messages.
#   
#   Also fix up some of the other printk() calls to be dev_* calls.
# 
# drivers/usb/core/devio.c
#   2004/05/13 08:39:48-07:00 greg@kroah.com +55 -9
#   USB: add snooping capability to usbfs for control messages.
#   
#   Also fix up some of the other printk() calls to be dev_* calls.
# 
# ChangeSet
#   2004/05/13 14:15:01-07:00 akpm@osdl.org 
#   [PATCH] USB: fix ohci-hcd build error
#   
#   "Matt H." <lkml@lpbproductions.com> wrote:
#   >
#   > Just attempted to compile 2.6.6-mm2 and got this error
#   >
#   >    CC [M]  drivers/usb/core/driverfs.o
#   >    CC [M]  drivers/usb/core/hcd-pci.o
#   >    LD [M]  drivers/usb/core/usbcore.o
#   >    LD      drivers/usb/host/built-in.o
#   >    CC [M]  drivers/usb/host/ehci-hcd.o
#   >    CC [M]  drivers/usb/host/ohci-hcd.o
#   >  In file included from drivers/usb/host/ohci-hcd.c:129:
#   >  drivers/usb/host/ohci-hub.c: In function `ohci_rh_resume':
#   >  drivers/usb/host/ohci-hub.c:313: error: `hcd' undeclared (first use in this
#   >  function)
#   
#   hm, not sure what's happened there...
# 
# drivers/usb/host/ohci-hub.c
#   2004/05/13 11:23:57-07:00 akpm@osdl.org +1 -1
#   USB: fix ohci-hcd build error
# 
# ChangeSet
#   2004/05/13 14:14:34-07:00 stern@rowland.harvard.edu 
#   [PATCH] USB: Don't delete interfaces until all are unbound
#   
#   On Thu, 13 May 2004, Duncan Sands wrote:
#   
#   > No, but the pointer for another (previous) interface may just have been
#   > set to NULL, causing an Oops when usb_ifnum_to_if loops over all
#   > interfaces.
#   
#   Of course!  I trust you won't mind me changing your suggested fix
#   slightly.  This should do an equally good job of repairing things, and it
#   will prevent other possible invalid references as well.
# 
# drivers/usb/core/usb.c
#   2004/05/13 06:40:06-07:00 stern@rowland.harvard.edu +6 -0
#   USB: Don't delete interfaces until all are unbound
# 
# drivers/usb/core/message.c
#   2004/05/13 06:37:48-07:00 stern@rowland.harvard.edu +8 -1
#   USB: Don't delete interfaces until all are unbound
# 
# ChangeSet
#   2004/05/13 14:14:05-07:00 baldrick@free.fr 
#   [PATCH] USB: Patch to remove interface indices from devio.c
#   
#   > I went ahead and created a patch to change all the places where devio.c
#   > uses an interface index.  Now it always uses just the interface number.
#   > Does this look all right to you?  I don't have a convenient way to test
#   > it.
#   
#   Hi Alan, thanks for doing this.  It looks and works OK.  I added some name
#   changes: all struct usb_interface pointers are now called intf; and, when
#   reasonable, variables holding interface numbers are now all called ifnum.
#   This drowns your original changes in a sea of churning names, I hope you
#   don't mind.
# 
# drivers/usb/core/devio.c
#   2004/05/13 08:15:18-07:00 baldrick@free.fr +78 -108
#   USB: Patch to remove interface indices from devio.c
# 
# ChangeSet
#   2004/05/13 14:13:38-07:00 david-b@pacbell.net 
#   [PATCH] USB: missing probe() diagnostics for CDC Ethernet
#   
#   This patch should help correct the "missing diagnostics with
#   CONFIG_USB_DEBUG during CDC Ethernet probe()" issue.  Some
#   folk are having problems with firmware that doesn't respond
#   properly to descriptor fetches -- which is unnecessarily
#   confusing because the diagnostics aren't being printed.
# 
# drivers/usb/net/usbnet.c
#   2004/05/09 13:10:23-07:00 david-b@pacbell.net +14 -20
#   USB: missing probe() diagnostics for CDC Ethernet
# 
# ChangeSet
#   2004/05/13 10:40:24-07:00 dsaxena@xanadu.(none) 
#   prpmc1100-setup.c, ixdp425-setup.c, coyote-setup.c:
#     Add INIT_MACHINE() to ixp4xx platform setup code
# 
# arch/arm/mach-ixp4xx/prpmc1100-setup.c
#   2004/05/13 10:39:40-07:00 dsaxena@xanadu.(none) +2 -8
#   Add INIT_MACHINE() to ixp4xx platform setup code
# 
# arch/arm/mach-ixp4xx/ixdp425-setup.c
#   2004/05/13 10:39:40-07:00 dsaxena@xanadu.(none) +4 -10
#   Add INIT_MACHINE() to ixp4xx platform setup code
# 
# arch/arm/mach-ixp4xx/coyote-setup.c
#   2004/05/13 10:39:40-07:00 dsaxena@xanadu.(none) +2 -9
#   Add INIT_MACHINE() to ixp4xx platform setup code
# 
# ChangeSet
#   2004/05/13 10:37:50-07:00 dsaxena@xanadu.(none) 
#   common.c:
#     Remove unused flag variable from ixp4xx_timer_interrupt
# 
# arch/arm/mach-ixp4xx/common.c
#   2004/05/13 10:36:08-07:00 dsaxena@xanadu.(none) +0 -2
#   Remove unused flag variable from ixp4xx_timer_interrupt
# 
# ChangeSet
#   2004/05/13 18:27:25+01:00 ben-linux@org.rmk.(none) 
#   [ARM PATCH] 1876/1: Removed apostrophes from asembler source
#   
#   Patch from Ben Dooks
#   
#   Removed two 's from assembly code (binutils has problems
#   with these)
#   
# 
# arch/arm/kernel/debug.S
#   2004/05/12 15:51:33+01:00 ben-linux@org.rmk.(none) +1 -1
#   [PATCH] 1876/1: Removed apostrophes from asembler source
# 
# arch/arm/boot/compressed/head.S
#   2004/05/12 16:08:49+01:00 ben-linux@org.rmk.(none) +1 -1
#   [PATCH] 1876/1: Removed apostrophes from asembler source
# 
# ChangeSet
#   2004/05/13 18:23:16+01:00 ben-linux@org.rmk.(none) 
#   [ARM PATCH] 1875/1: SMDK2410 machine support
#   
#   Patch from Ben Dooks
#   
#   Initial support for SMDK2410 and variants
# 
# arch/arm/mach-s3c2410/mach-smdk2410.c
#   2004/05/12 15:54:31+01:00 ben-linux@org.rmk.(none) +109 -0
#   [PATCH] 1875/1: SMDK2410 machine support
# 
# include/asm-arm/arch-s3c2410/time.h
#   2004/05/12 13:59:06+01:00 ben-linux@org.rmk.(none) +1 -1
#   [PATCH] 1875/1: SMDK2410 machine support
# 
# arch/arm/mach-s3c2410/mach-smdk2410.c
#   2004/05/12 15:54:31+01:00 ben-linux@org.rmk.(none) +0 -0
#   BitKeeper file /usr/src/bk/linux-2.6-rmk/arch/arm/mach-s3c2410/mach-smdk2410.c
# 
# arch/arm/mach-s3c2410/Makefile
#   2004/05/12 13:59:06+01:00 ben-linux@org.rmk.(none) +1 -0
#   [PATCH] 1875/1: SMDK2410 machine support
# 
# arch/arm/mach-s3c2410/Kconfig
#   2004/05/12 13:59:06+01:00 ben-linux@org.rmk.(none) +7 -0
#   [PATCH] 1875/1: SMDK2410 machine support
# 
# arch/arm/configs/smdk2410_defconfig
#   2004/05/12 19:27:11+01:00 ben-linux@org.rmk.(none) +667 -0
#   [PATCH] 1875/1: SMDK2410 machine support
# 
# arch/arm/configs/smdk2410_defconfig
#   2004/05/12 19:27:11+01:00 ben-linux@org.rmk.(none) +0 -0
#   BitKeeper file /usr/src/bk/linux-2.6-rmk/arch/arm/configs/smdk2410_defconfig
# 
# ChangeSet
#   2004/05/13 10:20:39-07:00 dsaxena@xanadu.(none) 
#   common.c:
#     new file
# 
# arch/arm/mach-ixp4xx/common.c
#   2004/05/13 10:20:22-07:00 dsaxena@xanadu.(none) +266 -0
# 
# arch/arm/mach-ixp4xx/common.c
#   2004/05/13 10:20:22-07:00 dsaxena@xanadu.(none) +0 -0
#   BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/arch/arm/mach-ixp4xx/common.c
# 
# ChangeSet
#   2004/05/13 18:19:26+01:00 ben-linux@org.rmk.(none) 
#   [ARM PATCH] 1874/1: S3C2410 - fix for selection of low-level debug UART
#   
#   Patch from Ben Dooks
#   
#   Fix selection configuration entry for UART number for low-level debug
# 
# arch/arm/Kconfig
#   2004/05/12 14:12:26+01:00 ben-linux@org.rmk.(none) +1 -1
#   [PATCH] 1874/1: S3C2410 - fix for selection of low-level debug UART
# 
# ChangeSet
#   2004/05/13 14:41:47+01:00 jelenz@edu.rmk.(none) 
#   [ARM PATCH] 1851/1: sa1100 fb support for collie
#   
#   Patch from John Lenz
#   
#   Add the sa1100fb_mach_info structure for collie
# 
# drivers/video/sa1100fb.c
#   2004/05/13 01:00:00+01:00 jelenz@edu.rmk.(none) +21 -0
#   [PATCH] 1851/1: sa1100 fb support for collie
# 
# ChangeSet
#   2004/05/13 14:05:27+01:00 rmk@flint.arm.linux.org.uk 
#   Merge bk://dsaxena.bkbits.net/linux-2.6-for-rmk
#   into flint.arm.linux.org.uk:/usr/src/bk/linux-2.6-ds
# 
# arch/arm/kernel/entry-armv.S
#   2004/05/13 14:04:22+01:00 rmk@flint.arm.linux.org.uk +0 -0
#   Auto merged
# 
# arch/arm/kernel/debug.S
#   2004/05/13 14:04:21+01:00 rmk@flint.arm.linux.org.uk +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/05/13 12:59:34+01:00 nico@org.rmk.(none) 
#   [ARM PATCH] 1871/1: faster IRQ retrieval for PXA27x
#   
#   Patch from Nicolas Pitre
#   
#   On the PXA27x it's also possible to get the IRQ info from CP6
#   and it has a much lower latency than the memory mapped equivalent.
# 
# arch/arm/kernel/entry-armv.S
#   2004/05/13 02:11:42+01:00 nico@org.rmk.(none) +5 -0
#   [PATCH] 1871/1: faster IRQ retrieval for PXA27x
# 
# ChangeSet
#   2004/05/13 12:55:33+01:00 nico@org.rmk.(none) 
#   [ARM PATCH] 1865/1: DMA changes for PXA27x
#   
#   Patch from Nicolas Pitre
#   
# 
# include/asm-arm/arch-pxa/dma.h
#   2004/05/13 02:21:47+01:00 nico@org.rmk.(none) +21 -3
#   [PATCH] 1865/1: DMA changes for PXA27x
# 
# arch/arm/mach-pxa/dma.c
#   2004/05/13 02:16:27+01:00 nico@org.rmk.(none) +3 -3
#   [PATCH] 1865/1: DMA changes for PXA27x
# 
# ChangeSet
#   2004/05/13 12:51:39+01:00 nico@org.rmk.(none) 
#   [ARM PATCH] 1864/1: separate PXA25x and PXA27x specific code
#   
#   Patch from Nicolas Pitre
#   
# 
# arch/arm/mach-pxa/pxa27x.c
#   2004/05/12 19:04:14+01:00 nico@org.rmk.(none) +120 -0
#   [PATCH] 1864/1: separate PXA25x and PXA27x specific code
# 
# arch/arm/mach-pxa/generic.c
#   2004/04/28 03:15:18+01:00 nico@org.rmk.(none) +0 -67
#   [PATCH] 1864/1: separate PXA25x and PXA27x specific code
# 
# arch/arm/mach-pxa/Makefile
#   2004/04/28 22:15:30+01:00 nico@org.rmk.(none) +2 -0
#   [PATCH] 1864/1: separate PXA25x and PXA27x specific code
# 
# arch/arm/mach-pxa/pxa27x.c
#   2004/05/12 19:04:14+01:00 nico@org.rmk.(none) +0 -0
#   BitKeeper file /usr/src/bk/linux-2.6-rmk/arch/arm/mach-pxa/pxa27x.c
# 
# arch/arm/mach-pxa/Kconfig
#   2004/04/28 21:28:31+01:00 nico@org.rmk.(none) +13 -1
#   [PATCH] 1864/1: separate PXA25x and PXA27x specific code
# 
# arch/arm/mach-pxa/pxa25x.c
#   2004/04/27 19:36:30+01:00 nico@org.rmk.(none) +94 -0
#   [PATCH] 1864/1: separate PXA25x and PXA27x specific code
# 
# arch/arm/mach-pxa/pxa25x.c
#   2004/04/27 19:36:30+01:00 nico@org.rmk.(none) +0 -0
#   BitKeeper file /usr/src/bk/linux-2.6-rmk/arch/arm/mach-pxa/pxa25x.c
# 
# ChangeSet
#   2004/05/13 12:47:12+01:00 nico@org.rmk.(none) 
#   [ARM PATCH] 1863/2: definitions and mapping for the Intel PXA27x internal registers
#   
#   
#   Patch from Nicolas Pitre
#   
#   This reworks PXA register mapping to accommodate the extra registers
#   of the PXA27x chips (aka Bulverde).
# 
# include/asm-arm/arch-pxa/pxa-regs.h
#   2004/05/12 03:58:45+01:00 nico@org.rmk.(none) +692 -25
#   [PATCH] 1863/2: definitions and mapping for the Intel PXA27x internal registers
# 
# include/asm-arm/arch-pxa/hardware.h
#   2004/04/30 01:52:42+01:00 nico@org.rmk.(none) +13 -16
#   [PATCH] 1863/2: definitions and mapping for the Intel PXA27x internal registers
# 
# arch/arm/mach-pxa/generic.c
#   2004/04/28 03:15:18+01:00 nico@org.rmk.(none) +12 -7
#   [PATCH] 1863/2: definitions and mapping for the Intel PXA27x internal registers
# 
# ChangeSet
#   2004/05/13 12:43:02+01:00 nico@org.rmk.(none) 
#   [ARM PATCH] 1842/1: fix/clarify some comments
#   
#   Patch from Nicolas Pitre
#   
# 
# include/asm-arm/thread_info.h
#   2004/05/03 19:51:38+01:00 nico@org.rmk.(none) +1 -1
#   [PATCH] 1842/1: fix/clarify some comments
# 
# arch/arm/kernel/entry-armv.S
#   2004/05/03 19:55:24+01:00 nico@org.rmk.(none) +1 -1
#   [PATCH] 1842/1: fix/clarify some comments
# 
# ChangeSet
#   2004/05/13 12:27:15+01:00 jkluebs@com.rmk.(none) 
#   [ARM PATCH] 1848/1: PXA suspend/resume improvements
#   
#   Patch from John K Luebs
#   
#   This adds support to preserve the GPIO level across a suspend
#   and resume for PXA machine types. Removes the hack to preserve
#   the FFUART state as this is unnecessary with the 2.6 serial
#   driver code.
# 
# arch/arm/mach-pxa/pm.c
#   2004/05/08 06:26:39+01:00 jkluebs@com.rmk.(none) +12 -39
#   [PATCH] 1848/1: PXA suspend/resume improvements
# 
# ChangeSet
#   2004/05/13 12:22:56+01:00 tony@com.rmk.(none) 
#   [ARM PATCH] 1854/1: Remove old board specific OMAP files
#   
#   Patch from Tony Lindgren
#   
#   Removes old duplicate board specific files that have been renamed to
#   board-*.c
# 
# BitKeeper/deleted/.del-omap-perseus2.c~9645374675850b43
#   2004/05/13 12:21:00+01:00 tony@com.rmk.(none) +0 -0
#   Delete: arch/arm/mach-omap/omap-perseus2.c
# 
# BitKeeper/deleted/.del-omap-generic.c~2b62a02fa6084188
#   2004/05/13 12:20:59+01:00 tony@com.rmk.(none) +0 -0
#   Delete: arch/arm/mach-omap/omap-generic.c
# 
# BitKeeper/deleted/.del-innovator1610.c~fa081e5bd042b1e4
#   2004/05/13 12:20:58+01:00 tony@com.rmk.(none) +0 -0
#   Delete: arch/arm/mach-omap/innovator1610.c
# 
# BitKeeper/deleted/.del-innovator1510.c~f2b03aa9ff6103da
#   2004/05/13 12:20:57+01:00 tony@com.rmk.(none) +0 -0
#   Delete: arch/arm/mach-omap/innovator1510.c
# 
# ChangeSet
#   2004/05/13 12:19:05+01:00 tony@com.rmk.(none) 
#   [ARM PATCH] 1853/1: Update OMAP low level debug functions
#   
#   Patch from Tony Lindgren
#   
#   Changes OMAP low level debug function to allow virtual IO != physical
#   IO.  Also removes waituart checking, as it only worked for first
#   serial port.
# 
# arch/arm/kernel/debug.S
#   2004/05/10 19:13:34+01:00 tony@com.rmk.(none) +16 -4
#   [PATCH] 1853/1: Update OMAP low level debug functions
# 
# ChangeSet
#   2004/05/13 12:14:47+01:00 icampbell@com.rmk.(none) 
#   [ARM PATCH] 1827/1: PXAFB patch updated based on comments in 1826
#   
#   Patch from Ian Campbell
#   
#   The patch includes the PXA FB driver discussed recently on the
#   arm-kernel mailing list, I have incorporated your (RMK's) comments
#   from patch 1826.
# 
# include/asm-arm/arch-pxa/pxafb.h
#   2004/04/26 09:36:51+01:00 icampbell@com.rmk.(none) +68 -0
#   [PATCH] 1827/1: PXAFB patch updated based on comments in 1826
# 
# include/asm-arm/arch-pxa/pxa-regs.h
#   2004/04/26 11:00:41+01:00 icampbell@com.rmk.(none) +32 -7
#   [PATCH] 1827/1: PXAFB patch updated based on comments in 1826
# 
# drivers/video/pxafb.h
#   2004/04/26 11:02:12+01:00 icampbell@com.rmk.(none) +129 -0
#   [PATCH] 1827/1: PXAFB patch updated based on comments in 1826
# 
# drivers/video/pxafb.c
#   2004/04/26 11:01:49+01:00 icampbell@com.rmk.(none) +1376 -0
#   [PATCH] 1827/1: PXAFB patch updated based on comments in 1826
# 
# drivers/video/fbmem.c
#   2004/04/26 09:36:51+01:00 icampbell@com.rmk.(none) +5 -0
#   [PATCH] 1827/1: PXAFB patch updated based on comments in 1826
# 
# drivers/video/Makefile
#   2004/04/26 09:36:51+01:00 icampbell@com.rmk.(none) +1 -1
#   [PATCH] 1827/1: PXAFB patch updated based on comments in 1826
# 
# drivers/video/Kconfig
#   2004/04/26 09:36:53+01:00 icampbell@com.rmk.(none) +31 -0
#   [PATCH] 1827/1: PXAFB patch updated based on comments in 1826
# 
# include/asm-arm/arch-pxa/pxafb.h
#   2004/04/26 09:36:51+01:00 icampbell@com.rmk.(none) +0 -0
#   BitKeeper file /usr/src/bk/linux-2.6-rmk/include/asm-arm/arch-pxa/pxafb.h
# 
# drivers/video/pxafb.h
#   2004/04/26 11:02:12+01:00 icampbell@com.rmk.(none) +0 -0
#   BitKeeper file /usr/src/bk/linux-2.6-rmk/drivers/video/pxafb.h
# 
# drivers/video/pxafb.c
#   2004/04/26 11:01:49+01:00 icampbell@com.rmk.(none) +0 -0
#   BitKeeper file /usr/src/bk/linux-2.6-rmk/drivers/video/pxafb.c
# 
# arch/arm/mach-pxa/generic.c
#   2004/04/26 09:36:51+01:00 icampbell@com.rmk.(none) +37 -0
#   [PATCH] 1827/1: PXAFB patch updated based on comments in 1826
# 
# Documentation/fb/pxafb.txt
#   2004/04/26 09:36:52+01:00 icampbell@com.rmk.(none) +54 -0
#   [PATCH] 1827/1: PXAFB patch updated based on comments in 1826
# 
# Documentation/fb/pxafb.txt
#   2004/04/26 09:36:52+01:00 icampbell@com.rmk.(none) +0 -0
#   BitKeeper file /usr/src/bk/linux-2.6-rmk/Documentation/fb/pxafb.txt
# 
# ChangeSet
#   2004/05/12 15:24:58-07:00 dsaxena@xanadu.(none) 
#   pci_ids.h:
#     IXP4xx support
# 
# include/linux/pci_ids.h
#   2004/05/12 15:23:15-07:00 dsaxena@xanadu.(none) +1 -0
#   IXP4xx support
# 
# ChangeSet
#   2004/05/12 15:02:42-07:00 dsaxena@xanadu.(none) 
#   Add IXP4xx support
# 
# include/asm-arm/arch-ixp4xx/vmalloc.h
#   2004/05/12 15:02:26-07:00 dsaxena@xanadu.(none) +17 -0
# 
# include/asm-arm/arch-ixp4xx/vmalloc.h
#   2004/05/12 15:02:26-07:00 dsaxena@xanadu.(none) +0 -0
#   BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/include/asm-arm/arch-ixp4xx/vmalloc.h
# 
# include/asm-arm/arch-ixp4xx/uncompress.h
#   2004/05/12 15:02:25-07:00 dsaxena@xanadu.(none) +64 -0
# 
# include/asm-arm/arch-ixp4xx/uncompress.h
#   2004/05/12 15:02:25-07:00 dsaxena@xanadu.(none) +0 -0
#   BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/include/asm-arm/arch-ixp4xx/uncompress.h
# 
# include/asm-arm/arch-ixp4xx/timex.h
#   2004/05/12 15:02:24-07:00 dsaxena@xanadu.(none) +12 -0
# 
# include/asm-arm/arch-ixp4xx/timex.h
#   2004/05/12 15:02:24-07:00 dsaxena@xanadu.(none) +0 -0
#   BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/include/asm-arm/arch-ixp4xx/timex.h
# 
# include/asm-arm/arch-ixp4xx/time.h
#   2004/05/12 15:02:23-07:00 dsaxena@xanadu.(none) +7 -0
# 
# include/asm-arm/arch-ixp4xx/time.h
#   2004/05/12 15:02:23-07:00 dsaxena@xanadu.(none) +0 -0
#   BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/include/asm-arm/arch-ixp4xx/time.h
# 
# include/asm-arm/arch-ixp4xx/system.h
#   2004/05/12 15:02:22-07:00 dsaxena@xanadu.(none) +43 -0
# 
# include/asm-arm/arch-ixp4xx/system.h
#   2004/05/12 15:02:22-07:00 dsaxena@xanadu.(none) +0 -0
#   BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/include/asm-arm/arch-ixp4xx/system.h
# 
# include/asm-arm/arch-ixp4xx/serial.h
#   2004/05/12 15:02:21-07:00 dsaxena@xanadu.(none) +27 -0
# 
# include/asm-arm/arch-ixp4xx/serial.h
#   2004/05/12 15:02:21-07:00 dsaxena@xanadu.(none) +0 -0
#   BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/include/asm-arm/arch-ixp4xx/serial.h
# 
# include/asm-arm/arch-ixp4xx/prpmc1100.h
#   2004/05/12 15:02:20-07:00 dsaxena@xanadu.(none) +33 -0
# 
# include/asm-arm/arch-ixp4xx/prpmc1100.h
#   2004/05/12 15:02:20-07:00 dsaxena@xanadu.(none) +0 -0
#   BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/include/asm-arm/arch-ixp4xx/prpmc1100.h
# 
# include/asm-arm/arch-ixp4xx/platform.h
#   2004/05/12 15:02:18-07:00 dsaxena@xanadu.(none) +116 -0
# 
# include/asm-arm/arch-ixp4xx/platform.h
#   2004/05/12 15:02:18-07:00 dsaxena@xanadu.(none) +0 -0
#   BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/include/asm-arm/arch-ixp4xx/platform.h
# 
# include/asm-arm/arch-ixp4xx/param.h
#   2004/05/12 15:02:16-07:00 dsaxena@xanadu.(none) +3 -0
# 
# include/asm-arm/arch-ixp4xx/param.h
#   2004/05/12 15:02:16-07:00 dsaxena@xanadu.(none) +0 -0
#   BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/include/asm-arm/arch-ixp4xx/param.h
# 
# include/asm-arm/arch-ixp4xx/memory.h
#   2004/05/12 15:02:15-07:00 dsaxena@xanadu.(none) +49 -0
# 
# include/asm-arm/arch-ixp4xx/memory.h
#   2004/05/12 15:02:15-07:00 dsaxena@xanadu.(none) +0 -0
#   BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/include/asm-arm/arch-ixp4xx/memory.h
# 
# include/asm-arm/arch-ixp4xx/ixp4xx-regs.h
#   2004/05/12 15:02:14-07:00 dsaxena@xanadu.(none) +551 -0
# 
# include/asm-arm/arch-ixp4xx/ixp4xx-regs.h
#   2004/05/12 15:02:14-07:00 dsaxena@xanadu.(none) +0 -0
#   BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/include/asm-arm/arch-ixp4xx/ixp4xx-regs.h
# 
# include/asm-arm/arch-ixp4xx/ixdp425.h
#   2004/05/12 15:02:13-07:00 dsaxena@xanadu.(none) +38 -0
# 
# include/asm-arm/arch-ixp4xx/ixdp425.h
#   2004/05/12 15:02:13-07:00 dsaxena@xanadu.(none) +0 -0
#   BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/include/asm-arm/arch-ixp4xx/ixdp425.h
# 
# include/asm-arm/arch-ixp4xx/irqs.h
#   2004/05/12 15:02:12-07:00 dsaxena@xanadu.(none) +78 -0
# 
# include/asm-arm/arch-ixp4xx/irqs.h
#   2004/05/12 15:02:12-07:00 dsaxena@xanadu.(none) +0 -0
#   BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/include/asm-arm/arch-ixp4xx/irqs.h
# 
# include/asm-arm/arch-ixp4xx/irq.h
#   2004/05/12 15:02:11-07:00 dsaxena@xanadu.(none) +13 -0
# 
# include/asm-arm/arch-ixp4xx/irq.h
#   2004/05/12 15:02:11-07:00 dsaxena@xanadu.(none) +0 -0
#   BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/include/asm-arm/arch-ixp4xx/irq.h
# 
# include/asm-arm/arch-ixp4xx/io.h
#   2004/05/12 15:02:09-07:00 dsaxena@xanadu.(none) +388 -0
# 
# include/asm-arm/arch-ixp4xx/io.h
#   2004/05/12 15:02:09-07:00 dsaxena@xanadu.(none) +0 -0
#   BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/include/asm-arm/arch-ixp4xx/io.h
# 
# include/asm-arm/arch-ixp4xx/ide.h
#   2004/05/12 15:02:08-07:00 dsaxena@xanadu.(none) +37 -0
# 
# include/asm-arm/arch-ixp4xx/ide.h
#   2004/05/12 15:02:08-07:00 dsaxena@xanadu.(none) +0 -0
#   BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/include/asm-arm/arch-ixp4xx/ide.h
# 
# include/asm-arm/arch-ixp4xx/hardware.h
#   2004/05/12 15:02:07-07:00 dsaxena@xanadu.(none) +41 -0
# 
# include/asm-arm/arch-ixp4xx/hardware.h
#   2004/05/12 15:02:07-07:00 dsaxena@xanadu.(none) +0 -0
#   BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/include/asm-arm/arch-ixp4xx/hardware.h
# 
# include/asm-arm/arch-ixp4xx/dma.h
#   2004/05/12 15:02:06-07:00 dsaxena@xanadu.(none) +52 -0
# 
# include/asm-arm/arch-ixp4xx/dma.h
#   2004/05/12 15:02:06-07:00 dsaxena@xanadu.(none) +0 -0
#   BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/include/asm-arm/arch-ixp4xx/dma.h
# 
# include/asm-arm/arch-ixp4xx/coyote.h
#   2004/05/12 15:02:05-07:00 dsaxena@xanadu.(none) +36 -0
# 
# include/asm-arm/arch-ixp4xx/coyote.h
#   2004/05/12 15:02:05-07:00 dsaxena@xanadu.(none) +0 -0
#   BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/include/asm-arm/arch-ixp4xx/coyote.h
# 
# arch/arm/mach-ixp4xx/prpmc1100-setup.c
#   2004/05/12 15:02:04-07:00 dsaxena@xanadu.(none) +96 -0
# 
# arch/arm/mach-ixp4xx/prpmc1100-setup.c
#   2004/05/12 15:02:04-07:00 dsaxena@xanadu.(none) +0 -0
#   BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/arch/arm/mach-ixp4xx/prpmc1100-setup.c
# 
# arch/arm/mach-ixp4xx/prpmc1100-pci.c
#   2004/05/12 15:02:03-07:00 dsaxena@xanadu.(none) +119 -0
# 
# arch/arm/mach-ixp4xx/prpmc1100-pci.c
#   2004/05/12 15:02:03-07:00 dsaxena@xanadu.(none) +0 -0
#   BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/arch/arm/mach-ixp4xx/prpmc1100-pci.c
# 
# arch/arm/mach-ixp4xx/ixdp425-setup.c
#   2004/05/12 15:02:02-07:00 dsaxena@xanadu.(none) +153 -0
# 
# arch/arm/mach-ixp4xx/ixdp425-setup.c
#   2004/05/12 15:02:02-07:00 dsaxena@xanadu.(none) +0 -0
#   BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/arch/arm/mach-ixp4xx/ixdp425-setup.c
# 
# arch/arm/mach-ixp4xx/ixdp425-pci.c
#   2004/05/12 15:02:01-07:00 dsaxena@xanadu.(none) +84 -0
# 
# arch/arm/mach-ixp4xx/ixdp425-pci.c
#   2004/05/12 15:02:01-07:00 dsaxena@xanadu.(none) +0 -0
#   BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/arch/arm/mach-ixp4xx/ixdp425-pci.c
# 
# arch/arm/mach-ixp4xx/coyote-setup.c
#   2004/05/12 15:02:00-07:00 dsaxena@xanadu.(none) +97 -0
# 
# arch/arm/mach-ixp4xx/coyote-setup.c
#   2004/05/12 15:02:00-07:00 dsaxena@xanadu.(none) +0 -0
#   BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/arch/arm/mach-ixp4xx/coyote-setup.c
# 
# arch/arm/mach-ixp4xx/coyote-pci.c
#   2004/05/12 15:01:59-07:00 dsaxena@xanadu.(none) +69 -0
# 
# arch/arm/mach-ixp4xx/coyote-pci.c
#   2004/05/12 15:01:59-07:00 dsaxena@xanadu.(none) +0 -0
#   BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/arch/arm/mach-ixp4xx/coyote-pci.c
# 
# arch/arm/mach-ixp4xx/common-pci.c
#   2004/05/12 15:01:58-07:00 dsaxena@xanadu.(none) +543 -0
# 
# arch/arm/mach-ixp4xx/common-pci.c
#   2004/05/12 15:01:58-07:00 dsaxena@xanadu.(none) +0 -0
#   BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/arch/arm/mach-ixp4xx/common-pci.c
# 
# arch/arm/mach-ixp4xx/Makefile
#   2004/05/12 15:01:57-07:00 dsaxena@xanadu.(none) +10 -0
# 
# arch/arm/mach-ixp4xx/Makefile
#   2004/05/12 15:01:57-07:00 dsaxena@xanadu.(none) +0 -0
#   BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/arch/arm/mach-ixp4xx/Makefile
# 
# arch/arm/mach-ixp4xx/Kconfig
#   2004/05/12 15:01:56-07:00 dsaxena@xanadu.(none) +73 -0
# 
# arch/arm/mach-ixp4xx/Kconfig
#   2004/05/12 15:01:56-07:00 dsaxena@xanadu.(none) +0 -0
#   BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/arch/arm/mach-ixp4xx/Kconfig
# 
# arch/arm/configs/ixp4xx_defconfig
#   2004/05/12 15:01:55-07:00 dsaxena@xanadu.(none) +1081 -0
# 
# arch/arm/configs/ixp4xx_defconfig
#   2004/05/12 15:01:55-07:00 dsaxena@xanadu.(none) +0 -0
#   BitKeeper file /home/dsaxena/src/linux-2.6-for-rmk/arch/arm/configs/ixp4xx_defconfig
# 
# ChangeSet
#   2004/05/12 14:59:16-07:00 dsaxena@xanadu.(none) 
#   proc-xscale.S, Kconfig:
#     IXP4xx support
# 
# arch/arm/mm/proc-xscale.S
#   2004/05/12 14:58:58-07:00 dsaxena@xanadu.(none) +21 -0
#   IXP4xx support
# 
# arch/arm/mm/Kconfig
#   2004/05/12 14:58:58-07:00 dsaxena@xanadu.(none) +1 -1
#   IXP4xx support
# 
# ChangeSet
#   2004/05/12 14:58:18-07:00 dsaxena@xanadu.(none) 
#   head.S, Makefile:
#     IXP4xx support
# 
# arch/arm/boot/compressed/head.S
#   2004/05/12 14:58:03-07:00 dsaxena@xanadu.(none) +6 -0
#   IXP4xx support
# 
# arch/arm/boot/Makefile
#   2004/05/12 14:58:03-07:00 dsaxena@xanadu.(none) +2 -0
#   IXP4xx support
# 
# ChangeSet
#   2004/05/12 14:57:06-07:00 dsaxena@xanadu.(none) 
#   entry-armv.S, debug.S, bios32.c:
#     IXP4xx support
# 
# arch/arm/kernel/entry-armv.S
#   2004/05/12 14:56:47-07:00 dsaxena@xanadu.(none) +28 -0
#   IXP4xx support
# 
# arch/arm/kernel/debug.S
#   2004/05/12 14:56:47-07:00 dsaxena@xanadu.(none) +25 -0
#   IXP4xx support
# 
# arch/arm/kernel/bios32.c
#   2004/05/12 14:56:47-07:00 dsaxena@xanadu.(none) +28 -0
#   IXP4xx support
# 
# ChangeSet
#   2004/05/12 14:55:17-07:00 dsaxena@xanadu.(none) 
#   First of a set of eight patches that adds support for Intel's
#   IXP4xx family of network processors. The code still needs some
#   cleanup here and there, but it's to the point that it's should
#   be OK to push upstream.
#   
#   Some of the remaining TODOs:
#   
#   - Cleanup GPIO IRQ handling for edge-trigered HW (none exists ATM)
#   - Add IDE driver for various platforms
#   - Misc cleanups
#   
#   This patch adds the changes to arch/arm/Makefile and arch/arm/Kconfig
# 
# arch/arm/Makefile
#   2004/05/12 14:55:05-07:00 dsaxena@xanadu.(none) +1 -0
#   IXP4xx support
# 
# arch/arm/Kconfig
#   2004/05/12 14:55:05-07:00 dsaxena@xanadu.(none) +7 -2
#   IXP4xx support
# 
# ChangeSet
#   2004/05/12 12:03:46-07:00 shemminger@osdl.org 
#   [BRIDGE]: Allow multiple interfaces with same address (necessary for VLAN's).
# 
# net/bridge/br_fdb.c
#   2004/05/12 12:03:33-07:00 shemminger@osdl.org +10 -10
#   [BRIDGE]: Allow multiple interfaces with same address (necessary for VLAN's).
# 
# ChangeSet
#   2004/05/12 10:06:23-07:00 greg@kroah.com 
#   Merge kroah.com:/home/greg/linux/BK/bleed-2.6
#   into kroah.com:/home/greg/linux/BK/usb-2.6
# 
# drivers/usb/core/inode.c
#   2004/05/12 10:06:18-07:00 greg@kroah.com +0 -0
#   Auto merged
# 
# MAINTAINERS
#   2004/05/12 10:06:18-07:00 greg@kroah.com +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/05/11 16:43:50-07:00 maneesh@in.ibm.com 
#   [PATCH] kobject/sysfs race fix
#   
#   The following patch fixes the race involved between unregistering a kobject
#   and simultaneously opeing a corresponding attribute file in sysfs.
#   
#   Ideally sysfs should take a ref.  to the kobject as long as it has dentries
#   referring to the kobjects, but because of current limitations in
#   module/kobject ref counting, sysfs's pinning of kobject leads to
#   hang/delays in rmmod of certain modules.  The patch checks for unhashed
#   dentries in check_perm() while opening a sysfs file.  If the dentry is
#   still hashed then it goes ahead and takes the ref to kobject.  This done
#   under the per dentry lock.  It does this in the inline routine
#   sysfs_get_kobject(dentry).
# 
# fs/sysfs/sysfs.h
#   2004/04/14 11:26:50-07:00 maneesh@in.ibm.com +13 -0
#   kobject/sysfs race fix
# 
# fs/sysfs/file.c
#   2004/04/14 11:26:50-07:00 maneesh@in.ibm.com +1 -1
#   kobject/sysfs race fix
# 
# fs/sysfs/bin.c
#   2004/04/14 11:26:50-07:00 maneesh@in.ibm.com +1 -1
#   kobject/sysfs race fix
# 
# drivers/usb/image/mdc800.c
#   2004/05/11 16:37:35-07:00 oliver@neukum.org +9 -3
#   USB: fixes of assumptions about waitqueues
# 
# ChangeSet
#   2004/05/11 16:35:42-07:00 James.Bottomley@steeleye.com 
#   [PATCH] fix dev_printk to work even in the absence of an attached driver
# 
# include/linux/device.h
#   2004/05/11 01:58:44-07:00 James.Bottomley@steeleye.com +1 -1
#   fix dev_printk to work even in the absence of an attached driver
# 
# ChangeSet
#   2004/05/11 16:31:46-07:00 maneesh@in.ibm.com 
#   [PATCH] kobject_set_name - error handling
#   
#   1) kobject_set_name-cleanup-01.patch
#   
#   This patch corrects the following by checking the reutrn code from
#   kobject_set_name().
#   
#   bus_add_driver()
#   bus_register()
#   sys_dev_register()
#   
#   
#   
#   o The following patch cleansup the kobject_set_name() users. Basically checking
#     return code from kobject_set_name(). There can be error returns like -ENOMEM
#     or -EFAULT from kobject_set_name() if the name length exceeds KOBJ_NAME_LEN.
# 
# drivers/base/sys.c
#   2004/05/11 09:20:09-07:00 maneesh@in.ibm.com +4 -1
#   kobject_set_name - error handling
# 
# drivers/base/bus.c
#   2004/05/11 09:21:15-07:00 maneesh@in.ibm.com +9 -2
#   kobject_set_name - error handling
# 
# ChangeSet
#   2004/05/11 16:19:59-07:00 colin@colino.net 
#   [PATCH] USB: cosmetic fixes for cdc-acm
# 
# drivers/usb/class/cdc-acm.c
#   2004/05/10 10:04:34-07:00 colin@colino.net +142 -133
#   USB: cosmetic fixes for cdc-acm
# 
# ChangeSet
#   2004/05/11 16:03:07-07:00 david-b@pacbell.net 
#   [PATCH] USB: OHCI root hub suspend/resume/wakeup
#   
#   This patch goes on top of the previous two, and the hcd-0506 patch:
#   
#     - Moves root hub suspend/resume code out of PCI-specific bus glue
#       into generic hub code.  That way it's easy to re-use it even
#       for non-PCI implementations like SA1111, OMAP, and LH7A404.
#       (Plus, given CONFIG_USB_SUSPEND, it can be invoked with sysfs.)
#   
#     - Root hub suspend is a lot more careful, as is root hub resume.
#       Pending transactions are now shut down more consistently; and
#       more registers are re-initialized on resume.
#   
#     - The PCI bus glue is now left with truly generic PCI stuff, plus
#       some PMAC-specific stuff (which doesn't include irq disabling
#       any more, hcd-0506 moves that up a level in the stack).
#   
#     - Remote wakeup support is basically working for the root hub.
#       (given CONFIG_USB_SUSPEND to suspend devices and enable it).
#   
#     - Idle HCs will now automatically suspend themselves, and resume
#       as necessary.  This saves a certain amount of power on most
#       systems, and matches what UHCI has been doing for a while.
#   
#   The large size of this patch is mostly because of moving that
#   root hub suspend/resume code out of the PCI-specific glue.
# 
# drivers/usb/host/ohci.h
#   2004/05/09 10:29:43-07:00 david-b@pacbell.net +4 -1
#   USB: OHCI root hub suspend/resume/wakeup
# 
# drivers/usb/host/ohci-pci.c
#   2004/05/09 10:33:18-07:00 david-b@pacbell.net +26 -142
#   USB: OHCI root hub suspend/resume/wakeup
# 
# drivers/usb/host/ohci-mem.c
#   2004/05/09 10:31:20-07:00 david-b@pacbell.net +1 -0
#   USB: OHCI root hub suspend/resume/wakeup
# 
# drivers/usb/host/ohci-hub.c
#   2004/05/09 10:35:38-07:00 david-b@pacbell.net +290 -3
#   USB: OHCI root hub suspend/resume/wakeup
# 
# drivers/usb/host/ohci-hcd.c
#   2004/05/09 10:37:07-07:00 david-b@pacbell.net +12 -1
#   USB: OHCI root hub suspend/resume/wakeup
# 
# ChangeSet
#   2004/05/11 15:57:51-07:00 david-b@pacbell.net 
#   [PATCH] USB: khubd turns port power back on after reset
#   
#   This goes with the OHCI anti-deadlock patch, and is what
#   ensures that when a root hub loses power during suspend,
#   khubd can turn port power back on so devices can enumerate.
# 
# drivers/usb/core/hub.c
#   2004/05/09 10:26:14-07:00 david-b@pacbell.net +8 -1
#   USB: khubd turns port power back on after reset
# 
# ChangeSet
#   2004/05/11 15:57:21-07:00 david-b@pacbell.net 
#   [PATCH] USB: OHCI cleanups
#   
#   This splits out a few obvious fixes, to help shrink a PM patch:
#   
#     - when the HC is quiescing, don't schedule any more EDs
#       or re-activate any after unlink completion.
#   
#     - when the HC is suspended, don't access registers through
#       sysfs either.
#   
#     - simplify locking and call for donelist processing
# 
# drivers/usb/host/ohci-q.c
#   2004/05/11 13:17:33-07:00 david-b@pacbell.net +8 -9
#   USB: OHCI cleanups
# 
# drivers/usb/host/ohci-pci.c
#   2004/05/11 06:28:56-07:00 david-b@pacbell.net +5 -3
#   USB: OHCI cleanups
# 
# drivers/usb/host/ohci-hcd.c
#   2004/05/11 13:17:48-07:00 david-b@pacbell.net +4 -2
#   USB: OHCI cleanups
# 
# drivers/usb/host/ohci-dbg.c
#   2004/05/11 13:17:33-07:00 david-b@pacbell.net +12 -2
#   USB: OHCI cleanups
# 
# ChangeSet
#   2004/05/11 15:56:50-07:00 david-b@pacbell.net 
#   [PATCH] USB: OHCI resume/reset stops deadlocking in PM code
#   
#   System-wide PM resume now happily deadlocks if one of the
#   resuming devices tries to remove devices which vanished
#   during the suspend(*).  IMO that's unreasonable both
#   because devices can/do vanish, and because 2.4 didn't
#   deadlock in those cases; but no patch to fix that has been
#   merged.  The result is that ever since merging the "new" PM
#   code, some OHCI-based systems deadlock on resume.
#   
#   So this patch handles the "lost power during resume" case
#   differently:  it doesn't disconnect the root hub (or its
#   children) directly.  Instead, it does part of that work
#   immediately, and defers the rest to khubd:
#   
#     - add a "pending" list for live urbs, and use it after reset
#       to abort pending URBs (and reclaim "live" EDs/TDs)
#     - immediately mark all devices NOTATTACHED, so any operations
#       on the devices before khubd handles the disconnects, including
#       resume() callbacks, will fail
#     - kick root hub so it can do the cleanup
#   
#   It also handles "fminterval" init/reinit a bit better, mostly
#   to work better in some remote wakeup scenarios addressed in
#   later patches:
#   
#      - save any initial value the boot firmware provided
#      - use it during initialization (and eventually, remote wakeup)
#   
#   Other changes:
#   
#     - use better jiffies calculation for scheduled delays
#     - the allocator does more of the one-time initialization
#     - initialize hcd.can_wakeup according to boot firmware
#     - move some inlines to the header
#     - minor cleanups
#   
#   
#   (*) http://marc.theaimsgroup.com/?l=linux-kernel&m=106606272103414&w=2
#        reported against 2.6.0-test7.
# 
# drivers/usb/host/ohci.h
#   2004/05/11 03:17:51-07:00 david-b@pacbell.net +31 -2
#   USB: OHCI resume/reset stops deadlocking in PM code
# 
# drivers/usb/host/ohci-q.c
#   2004/05/11 03:19:12-07:00 david-b@pacbell.net +3 -1
#   USB: OHCI resume/reset stops deadlocking in PM code
# 
# drivers/usb/host/ohci-mem.c
#   2004/05/11 03:17:58-07:00 david-b@pacbell.net +2 -0
#   USB: OHCI resume/reset stops deadlocking in PM code
# 
# drivers/usb/host/ohci-hcd.c
#   2004/05/11 04:09:19-07:00 david-b@pacbell.net +89 -30
#   USB: OHCI resume/reset stops deadlocking in PM code
# 
# ChangeSet
#   2004/05/11 15:45:25-07:00 oliver@neukum.org 
#   [PATCH] USB: fixes of assumptions about waitqueues
#   
#   quoting Linus:
#   
#   --
#   > so there is no need to recheck the bit in do/while loop, because
#   > there is no false wakeups now.
#   
#   You should never assume this. You should assume that there are _always_
#   false wakeups.
#   
#   Why? Because Linux has always allowed people to leave wait-queues active,
#   without being "atomic". For example, the tty read/write layer used to
#   (still does?)  add itself on the wait-queue _once_, and then leave itself
#   on the wait-queue while in a loop it does copies from/to user space.
#   --
#   
#   Unfortunately, this means us. Here's the first fix. Comments?
#   
#     - make sure timeouts are observed even if somebody left us on a queue
# 
# ChangeSet
#   2004/05/11 15:41:37-07:00 david-b@pacbell.net 
#   [PATCH] USB: more functional HCD PCI PM glue
#   
#   This patch makes the usbcore PCI suspend/resume logic behave
#   much better.  In particular:
#   
#     - Even HCs without PCI PM support will normally be able
#       to support global suspend, saving power ... and will
#       need to resume later.  Let them try to suspend; lots
#       of not-that-old USB controllers don't have PM caps.
#   
#     - Saner order for the boilerplate PCI stuff.  It also
#       explicitly disables the IRQ and DMA, which aren't
#       available in D1/D2/D3 states anyway.
#   
#     - Uses pci_enable_wake() when the root hub supports
#       remote wakeup.  Didn't fully work in one test setup;
#       that controller's PME# was evidently ignored.  (Not
#       enabled unless CONFIG_USB_SUSPEND.)
#   
#   It worked for me with brief tests with the current 2.6.6-rc
#   uhci-hcd with one old UHCI; more extensive ones with various
#   OHCIs (using patches which I'll post soonish); and not at all
#   with EHCI (where PM hasn't ever worked).
#   
#   Those of you who've been having PM problems might find
#   this helpful as-is, though I think that unless you're
#   using UHCI you'll also need an HCD patch.
#   
#   - Dave
# 
# drivers/usb/core/hcd-pci.c
#   2004/05/06 12:41:30-07:00 david-b@pacbell.net +47 -22
#   USB: more functional HCD PCI PM glue
# 
# ChangeSet
#   2004/05/11 23:39:47+01:00 aia21@cantab.net 
#   NTFS: Really final white space cleanups.
# 
# fs/ntfs/attrib.c
#   2004/05/11 23:38:56+01:00 aia21@cantab.net +16 -16
#   White space cleanups.
# 
# fs/ntfs/ChangeLog
#   2004/05/11 23:38:50+01:00 aia21@cantab.net +10 -4
#   Update
# 
# ChangeSet
#   2004/05/11 15:34:08-07:00 stern@rowland.harvard.edu 
#   [PATCH] USB: Accept devices with funky interface/altsetting numbers
#   
#   Now that all the USB drivers have been audited, we can safely accept
#   devices that have noncompliant numbering for their interfaces or
#   altsettings.  This patch skips bad or duplicate descriptors, allows gaps
#   in the numbering, accepts more or fewer interfaces than bNumInterfaces,
#   and logs warnings describing all these things.  Also, the debugging log
#   messages have been improved by David Brownell.
#   
#   This should please a sizeable group of users.
# 
# drivers/usb/core/config.c
#   2004/05/11 06:59:21-07:00 stern@rowland.harvard.edu +173 -120
#   USB: Accept devices with funky interface/altsetting numbers
# 
# ChangeSet
#   2004/05/11 15:33:38-07:00 david-b@pacbell.net 
#   [PATCH] USB: EHCI power management updates
#   
#   This patch updates EHCI suspend/resume so that its essential
#   components work on a few different implementations:
#   
#      - make root hub suspend/resume work
#      - make remote wakeup work (given CONFIG_USB_SUSPEND patch)
#      - separate root hub suspend/resume from PCI suspend/resume
#      - say if controller supports remote wakeup (on this system)
#      - sysfs register dump unavailable if controller is suspended
#   
#   Plus a handful of minor cleanups.  Please merge, along with the
#   "hcd-0506.patch" I sent last week.
#   
#   Tested by modifying sysfs power/state files, since ACPI doesn't
#   work on this system (so I can't test system suspend/resume):
#   
#     - For root hub(*) ... suspend/resume works, also remote wakeup
#     - PCI controller ... suspend/resume works, remote wakeup
#       signals PME# (according to "lspci -vv"), but that's ignored
#       on my test sytem
#   
#   Regardless of whether USB was active, "echo 1 > /proc/acpi/sleep"
#   produced a system that wouldn't resume, and the same result
#   came from "echo standby > /sys/power/state".  So that's about
#   as far as I can take this testing for now.
#   
#   - Dave
#   
#   (*) Doing this relies on the CONFIG_USB_SUSPEND patch.  Otherwise
#        no USB devices respond to sysfs power/state updates.  The
#        PCI suspend/resume is a superset of this.
# 
# drivers/usb/host/ehci.h
#   2004/05/07 12:49:08-07:00 david-b@pacbell.net +15 -4
#   USB: EHCI power management updates
# 
# drivers/usb/host/ehci-hub.c
#   2004/05/10 12:40:20-07:00 david-b@pacbell.net +177 -5
#   USB: EHCI power management updates
# 
# drivers/usb/host/ehci-hcd.c
#   2004/05/10 12:38:12-07:00 david-b@pacbell.net +68 -68
#   USB: EHCI power management updates
# 
# drivers/usb/host/ehci-dbg.c
#   2004/05/07 12:48:33-07:00 david-b@pacbell.net +27 -3
#   USB: EHCI power management updates
# 
# ChangeSet
#   2004/05/11 15:33:09-07:00 stern@rowland.harvard.edu 
#   [PATCH] USB Gadget: Fix file-storage gadget Request Sense length
#   
#   On Fri, 7 May 2004, kernel@metro.cx wrote:
#   > Hi All,
#   >
#   > I don't know where else to report this, but I found a very very very
#   > minor bug in the usb gadgets drivers, specifically the file_storage.c
#   > mass storage driver.
#   >
#   > In the function do_request_sense(..) it says:
#   >
#   > buf[7] = 18 - 7;                        // Additional sense length
#   >
#   > Whereas (according to page 38 of the USB mass storage class, UFI command spec,
#   > http://www.usb.org/developers/devclass_docs#approved) this clearly neads
#   > to be equal to 10, not 11.
#   >
#   > I checked with the 2.6.5 source, it is still there. Hope someone will find this usefull, although most USB hosts seem to ignore length bits alltogether anyway....
#   >
#   > Koen Martens
#   
#   You are quite right; thank you for pointing this out.  Greg, please apply
#   the patch below.
# 
# drivers/usb/gadget/file_storage.c
#   2004/05/07 05:21:45-07:00 stern@rowland.harvard.edu +1 -1
#   USB Gadget: Fix file-storage gadget Request Sense length
# 
# ChangeSet
#   2004/05/11 15:32:38-07:00 lcapitulino@prefeitura.sp.gov.br 
#   [PATCH] USB: fix media/dsbr100.c unused variable.
#   
#   drivers/usb/media/dsbr100.c: In function `usb_dsbr100_probe':
#   drivers/usb/media/dsbr100.c:239: warning: unused variable `videodev'
# 
# drivers/usb/media/dsbr100.c
#   2004/05/07 01:53:51-07:00 lcapitulino@prefeitura.sp.gov.br +0 -1
#   USB: fix media/dsbr100.c unused variable.
# 
# ChangeSet
#   2004/05/11 23:16:06+01:00 aia21@cantab.net 
#   NTFS: Only build logfile.o if building the driver with read-write support.
# 
# fs/ntfs/Makefile
#   2004/05/11 23:15:11+01:00 aia21@cantab.net +5 -3
#   Only build logfile.o if building the driver with read-write support.
# 
# fs/ntfs/ChangeLog
#   2004/05/11 23:15:07+01:00 aia21@cantab.net +4 -0
#   Update
# 
# ChangeSet
#   2004/05/11 14:31:48-07:00 hannal@us.ibm.com 
#   [PATCH] USB: Add class support to drivers/usb/misc/tiglusb.c
# 
# drivers/usb/misc/tiglusb.c
#   2004/05/05 15:40:27-07:00 hannal@us.ibm.com +49 -15
#   USB: Add class support to drivers/usb/misc/tiglusb.c
# 
# ChangeSet
#   2004/05/11 14:31:21-07:00 hannal@us.ibm.com 
#   [PATCH] Add class support to drivers/net/wan/cosa.c
#   
#   This patch adds sysfs class support to the Cosa driver. I have verified it
#   compiles but do not have the hardware to test it. If someone could that
#   would be helpful.
# 
# drivers/net/wan/cosa.c
#   2004/05/05 16:01:56-07:00 hannal@us.ibm.com +34 -7
#   Add class support to drivers/net/wan/cosa.c
# 
# ChangeSet
#   2004/05/11 13:46:12-07:00 khali@linux-fr.org 
#   [PATCH] I2C: Rename hardware monitoring I2C class
#   
#   Quoting myself:
#   
#   > Mmm, I once proposed that I2C_ADAP_CLASS_SMBUS would be better renamed
#   > I2C_ADAP_CLASS_SENSORS (so I2C_CLASS_SENSORS now). What about that? I
#   > think it would be great to embed that change into your patch, so that
#   > the name changes only once.
#   >
#   > BTW, if HWMON is prefered to SENSORS, this is fine with me too, I
#   > have no strong preference.
#   
#   Below is a patch that does that. I finally went for HWMON. Yes, it's
#   big, but it's actually nothing more than
#   s/I2C_CLASS_SMBUS/I2C_CLASS_HWMON/ (thanks perl -wip :)).
# 
# include/linux/i2c.h
#   2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1
#   I2C: Rename hardware monitoring I2C class
# 
# drivers/i2c/chips/w83l785ts.c
#   2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1
#   I2C: Rename hardware monitoring I2C class
# 
# drivers/i2c/chips/w83781d.c
#   2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1
#   I2C: Rename hardware monitoring I2C class
# 
# drivers/i2c/chips/via686a.c
#   2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1
#   I2C: Rename hardware monitoring I2C class
# 
# drivers/i2c/chips/lm90.c
#   2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1
#   I2C: Rename hardware monitoring I2C class
# 
# drivers/i2c/chips/lm83.c
#   2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1
#   I2C: Rename hardware monitoring I2C class
# 
# drivers/i2c/chips/lm80.c
#   2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1
#   I2C: Rename hardware monitoring I2C class
# 
# drivers/i2c/chips/lm78.c
#   2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1
#   I2C: Rename hardware monitoring I2C class
# 
# drivers/i2c/chips/lm75.c
#   2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1
#   I2C: Rename hardware monitoring I2C class
# 
# drivers/i2c/chips/it87.c
#   2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1
#   I2C: Rename hardware monitoring I2C class
# 
# drivers/i2c/chips/gl518sm.c
#   2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1
#   I2C: Rename hardware monitoring I2C class
# 
# drivers/i2c/chips/fscher.c
#   2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1
#   I2C: Rename hardware monitoring I2C class
# 
# drivers/i2c/chips/asb100.c
#   2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1
#   I2C: Rename hardware monitoring I2C class
# 
# drivers/i2c/chips/adm1021.c
#   2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1
#   I2C: Rename hardware monitoring I2C class
# 
# drivers/i2c/busses/i2c-viapro.c
#   2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1
#   I2C: Rename hardware monitoring I2C class
# 
# drivers/i2c/busses/i2c-via.c
#   2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1
#   I2C: Rename hardware monitoring I2C class
# 
# drivers/i2c/busses/i2c-sis96x.c
#   2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1
#   I2C: Rename hardware monitoring I2C class
# 
# drivers/i2c/busses/i2c-sis630.c
#   2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1
#   I2C: Rename hardware monitoring I2C class
# 
# drivers/i2c/busses/i2c-sis5595.c
#   2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1
#   I2C: Rename hardware monitoring I2C class
# 
# drivers/i2c/busses/i2c-piix4.c
#   2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1
#   I2C: Rename hardware monitoring I2C class
# 
# drivers/i2c/busses/i2c-parport-light.c
#   2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1
#   I2C: Rename hardware monitoring I2C class
# 
# drivers/i2c/busses/i2c-parport.c
#   2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1
#   I2C: Rename hardware monitoring I2C class
# 
# drivers/i2c/busses/i2c-nforce2.c
#   2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1
#   I2C: Rename hardware monitoring I2C class
# 
# drivers/i2c/busses/i2c-isa.c
#   2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1
#   I2C: Rename hardware monitoring I2C class
# 
# drivers/i2c/busses/i2c-i801.c
#   2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1
#   I2C: Rename hardware monitoring I2C class
# 
# drivers/i2c/busses/i2c-amd8111.c
#   2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1
#   I2C: Rename hardware monitoring I2C class
# 
# drivers/i2c/busses/i2c-amd756.c
#   2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1
#   I2C: Rename hardware monitoring I2C class
# 
# drivers/i2c/busses/i2c-ali15x3.c
#   2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1
#   I2C: Rename hardware monitoring I2C class
# 
# drivers/i2c/busses/i2c-ali1563.c
#   2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1
#   I2C: Rename hardware monitoring I2C class
# 
# drivers/i2c/busses/i2c-ali1535.c
#   2004/05/09 10:05:17-07:00 khali@linux-fr.org +1 -1
#   I2C: Rename hardware monitoring I2C class
# 
# Documentation/i2c/porting-clients
#   2004/05/09 10:05:17-07:00 khali@linux-fr.org +2 -2
#   I2C: Rename hardware monitoring I2C class
# 
# ChangeSet
#   2004/05/11 13:45:12-07:00 R.S.Bultje@students.uu.nl 
#   [PATCH] I2C: new i2c video decoder calls: saa7111 driver
#   
#   Attached patch implements the i2c calls in the saa7111 driver.
#   
#   The driver is still compatible with old behaviour, so the zr36067 driver
#   (the original user of the saa7111 module) doesn't need any changes.  I'll
#   probably gradually make everything use DECODER_INIT instead of 0 (that was
#   a nice hack back then) somewhere later.
#   
#   Can I just remove '0' later on? Or are there official ABI rules for
#   stable kernel versions?
# 
# drivers/media/video/saa7111.c
#   2004/05/04 10:38:15-07:00 R.S.Bultje@students.uu.nl +54 -5
#   I2C: new i2c video decoder calls: saa7111 driver
# 
# ChangeSet
#   2004/05/11 13:44:19-07:00 R.S.Bultje@students.uu.nl 
#   [PATCH] I2C: new i2c video decoder calls
#   
#   Attached patch adds three new calls to the i2c video decoder API.  The changes
#   were requested by Michael (CC'ed) and approved by Gerd Knorr (v4l maintainer,
#   CC'ed).
#   
#   Short explanation:
#   
#   * INIT is a general initialization call with optional initialization data.
#     Reason for this is that several i2c decoders (or general: clients) are being
#     used by several adapters (main drivers), and in some cases, one adapter
#     simply needs different settings than the other, either because the adapter
#     is completely different or because the card was reverse engineered in a way
#     that doesn't allow multiple adapters to run using the same original
#     initialization data.  Michael faces such a problem right now.  Both he and
#     me lack time to properly sit together and work out the exact details or a
#     proper way to merge.
#   
#   * VBI_BYPASS and GPIO set specific pins on the decoder.  This will be used
#     in the saa7111 driver.  My driver (zr36067, original user of the saa7111
#     driver) doesn't use any of this, but Michael's does.
# 
# include/linux/video_decoder.h
#   2004/05/04 10:36:13-07:00 R.S.Bultje@students.uu.nl +7 -0
#   I2C: new i2c video decoder calls
# 
# ChangeSet
#   2004/05/11 13:43:55-07:00 khali@linux-fr.org 
#   [PATCH] I2C: kill duplicate includes in i2c bus drivers
#   
#   Following a suggestion of Arthur Othieno, here is a trivial patch that
#   kills duplicate inclusions of config.h in four i2c bus drivers.
#   
#   At first I was thinking of also removing inclusions of config.h wherever
#   it doesn't seem to be necessary but Eugene doesn't seem to think it's a
#   good idea. So I may give it a try later (in 2.7), but for now this
#   simple patch will be enough.
# 
# drivers/i2c/busses/scx200_i2c.c
#   2004/05/09 12:45:34-07:00 khali@linux-fr.org +0 -1
#   I2C: kill duplicate includes in i2c bus drivers
# 
# drivers/i2c/busses/scx200_acb.c
#   2004/05/09 12:45:30-07:00 khali@linux-fr.org +0 -1
#   I2C: kill duplicate includes in i2c bus drivers
# 
# drivers/i2c/busses/i2c-piix4.c
#   2004/05/09 12:45:43-07:00 khali@linux-fr.org +0 -1
#   I2C: kill duplicate includes in i2c bus drivers
# 
# drivers/i2c/busses/i2c-keywest.c
#   2004/05/09 12:45:24-07:00 khali@linux-fr.org +0 -1
#   I2C: kill duplicate includes in i2c bus drivers
# 
# ChangeSet
#   2004/05/11 13:32:24-07:00 greg@kroah.com 
#   Module attributes: fix build error if CONFIG_MODULE_UNLOAD=n
#   
#   Thanks to Andrew Morton for pointing this out to me.
# 
# kernel/module.c
#   2004/05/11 13:32:10-07:00 greg@kroah.com +16 -16
#   Module attributes: fix build error if CONFIG_MODULE_UNLOAD=n
#   
#   Thanks to Andrew Morton for pointing this out to me.
# 
# ChangeSet
#   2004/05/11 11:34:29-07:00 greg@kroah.com 
#   USB: make functions static in usb drivers that should be
#   
#   Thanks to Tridge's findstatic.pl script for helping find these.
# 
# drivers/usb/storage/shuttle_usbat.h
#   2004/05/11 04:32:50-07:00 greg@kroah.com +0 -20
#   USB: make functions static in usb drivers that should be
#   
#   Thanks to Tridge's findstatic.pl script for helping find these.
# 
# drivers/usb/storage/shuttle_usbat.c
#   2004/05/11 04:32:50-07:00 greg@kroah.com +70 -72
#   USB: make functions static in usb drivers that should be
#   
#   Thanks to Tridge's findstatic.pl script for helping find these.
# 
# drivers/usb/storage/jumpshot.c
#   2004/05/11 04:32:49-07:00 greg@kroah.com +1 -1
#   USB: make functions static in usb drivers that should be
#   
#   Thanks to Tridge's findstatic.pl script for helping find these.
# 
# drivers/usb/storage/isd200.c
#   2004/05/11 04:32:50-07:00 greg@kroah.com +13 -13
#   USB: make functions static in usb drivers that should be
#   
#   Thanks to Tridge's findstatic.pl script for helping find these.
# 
# drivers/usb/storage/datafab.c
#   2004/05/11 04:32:49-07:00 greg@kroah.com +1 -1
#   USB: make functions static in usb drivers that should be
#   
#   Thanks to Tridge's findstatic.pl script for helping find these.
# 
# drivers/usb/serial/kobil_sct.c
#   2004/05/11 04:32:49-07:00 greg@kroah.com +1 -1
#   USB: make functions static in usb drivers that should be
#   
#   Thanks to Tridge's findstatic.pl script for helping find these.
# 
# drivers/usb/serial/ir-usb.c
#   2004/05/11 04:32:49-07:00 greg@kroah.com +1 -1
#   USB: make functions static in usb drivers that should be
#   
#   Thanks to Tridge's findstatic.pl script for helping find these.
# 
# drivers/usb/serial/ipaq.c
#   2004/05/11 04:32:50-07:00 greg@kroah.com +1 -1
#   USB: make functions static in usb drivers that should be
#   
#   Thanks to Tridge's findstatic.pl script for helping find these.
# 
# drivers/usb/serial/io_ti.c
#   2004/05/11 04:32:49-07:00 greg@kroah.com +5 -5
#   USB: make functions static in usb drivers that should be
#   
#   Thanks to Tridge's findstatic.pl script for helping find these.
# 
# drivers/usb/net/usbnet.c
#   2004/05/11 04:32:49-07:00 greg@kroah.com +5 -5
#   USB: make functions static in usb drivers that should be
#   
#   Thanks to Tridge's findstatic.pl script for helping find these.
# 
# drivers/usb/net/rtl8150.c
#   2004/05/11 04:32:50-07:00 greg@kroah.com +4 -4
#   USB: make functions static in usb drivers that should be
#   
#   Thanks to Tridge's findstatic.pl script for helping find these.
# 
# drivers/usb/net/pegasus.c
#   2004/05/11 04:32:49-07:00 greg@kroah.com +2 -2
#   USB: make functions static in usb drivers that should be
#   
#   Thanks to Tridge's findstatic.pl script for helping find these.
# 
# drivers/usb/net/kaweth.c
#   2004/05/11 04:32:50-07:00 greg@kroah.com +10 -8
#   USB: make functions static in usb drivers that should be
#   
#   Thanks to Tridge's findstatic.pl script for helping find these.
# 
# drivers/usb/misc/emi62_fw_s.h
#   2004/05/11 04:32:50-07:00 greg@kroah.com +4 -3
#   USB: make functions static in usb drivers that should be
#   
#   Thanks to Tridge's findstatic.pl script for helping find these.
# 
# drivers/usb/misc/emi62_fw_m.h
#   2004/05/11 04:32:49-07:00 greg@kroah.com +4 -3
#   USB: make functions static in usb drivers that should be
#   
#   Thanks to Tridge's findstatic.pl script for helping find these.
# 
# drivers/usb/misc/emi62.c
#   2004/05/11 04:32:49-07:00 greg@kroah.com +1 -1
#   USB: make functions static in usb drivers that should be
#   
#   Thanks to Tridge's findstatic.pl script for helping find these.
# 
# drivers/usb/misc/emi26_fw.h
#   2004/05/11 04:32:49-07:00 greg@kroah.com +3 -3
#   USB: make functions static in usb drivers that should be
#   
#   Thanks to Tridge's findstatic.pl script for helping find these.
# 
# drivers/usb/misc/emi26.c
#   2004/05/11 04:32:50-07:00 greg@kroah.com +1 -1
#   USB: make functions static in usb drivers that should be
#   
#   Thanks to Tridge's findstatic.pl script for helping find these.
# 
# drivers/usb/misc/cytherm.c
#   2004/05/11 04:32:49-07:00 greg@kroah.com +3 -6
#   USB: make functions static in usb drivers that should be
#   
#   Thanks to Tridge's findstatic.pl script for helping find these.
# 
# drivers/usb/media/w9968cf.h
#   2004/05/11 04:32:49-07:00 greg@kroah.com +2 -2
#   USB: make functions static in usb drivers that should be
#   
#   Thanks to Tridge's findstatic.pl script for helping find these.
# 
# drivers/usb/media/ultracam.c
#   2004/05/11 04:32:49-07:00 greg@kroah.com +1 -1
#   USB: make functions static in usb drivers that should be
#   
#   Thanks to Tridge's findstatic.pl script for helping find these.
# 
# drivers/usb/input/wacom.c
#   2004/05/11 04:32:49-07:00 greg@kroah.com +2 -2
#   USB: make functions static in usb drivers that should be
#   
#   Thanks to Tridge's findstatic.pl script for helping find these.
# 
# drivers/usb/input/kbtab.c
#   2004/05/11 04:32:50-07:00 greg@kroah.com +1 -1
#   USB: make functions static in usb drivers that should be
#   
#   Thanks to Tridge's findstatic.pl script for helping find these.
# 
# drivers/usb/input/hid-core.c
#   2004/05/11 04:32:49-07:00 greg@kroah.com +5 -3
#   USB: make functions static in usb drivers that should be
#   
#   Thanks to Tridge's findstatic.pl script for helping find these.
# 
# drivers/usb/input/aiptek.c
#   2004/05/11 04:32:49-07:00 greg@kroah.com +2 -2
#   USB: make functions static in usb drivers that should be
#   
#   Thanks to Tridge's findstatic.pl script for helping find these.
# 
# drivers/usb/class/bluetty.c
#   2004/05/11 04:32:49-07:00 greg@kroah.com +2 -2
#   USB: make functions static in usb drivers that should be
#   
#   Thanks to Tridge's findstatic.pl script for helping find these.
# 
# ChangeSet
#   2004/05/11 13:31:42-04:00 gtw@cs.bu.edu 
#   [sound i810] silently ignore invalid PCM_ENABLE_xxx bits from userland
#   
#   We must guarantee that struct file's ->f_mode agrees with
#   PCM_ENABLE_xxx bits from userland OSS apps.  Other drivers silently
#   ignore invalid bits, so we follow their lead.
# 
# sound/oss/i810_audio.c
#   2004/05/11 13:31:37-04:00 gtw@cs.bu.edu +9 -2
#   [sound i810] silently ignore invalid PCM_ENABLE_xxx bits from userland
#   
#   We must guarantee that struct file's ->f_mode agrees with
#   PCM_ENABLE_xxx bits from userland OSS apps.  Other drivers silently
#   ignore invalid bits, so we follow their lead.
# 
# ChangeSet
#   2004/05/11 17:38:24+01:00 aia21@cantab.net 
#   NTFS: 2.1.10 - Force read-only (re)mounting of volumes with unsupported flags.
# 
# fs/ntfs/super.c
#   2004/05/11 17:38:17+01:00 aia21@cantab.net +34 -1
#   Force read-only (re)mounting if any of the following bits are set in
#   the volume information flags:
#   	VOLUME_IS_DIRTY, VOLUME_RESIZE_LOG_FILE,
#   	VOLUME_UPGRADE_ON_MOUNT, VOLUME_DELETE_USN_UNDERWAY,
#   	VOLUME_REPAIR_OBJECT_ID, VOLUME_MODIFIED_BY_CHKDSK
#   To make this easier we define VOLUME_MUST_MOUNT_RO_MASK with all the
#   above bits set so the test is made easy.
# 
# fs/ntfs/Makefile
#   2004/05/11 17:38:16+01:00 aia21@cantab.net +1 -1
#   Update for 2.1.10 release.
# 
# ChangeSet
#   2004/05/11 16:51:14+01:00 nico@org.rmk.(none) 
#   [ARM PATCH] 1843/2: supress PCMCIA build warnings
#   
#   Patch from Nicolas Pitre
#   
#   This is an alternative to patch #1843/1 keeping the ugliness
#   (and possible future breakage) to the affected driver only.
#   This one should be applied after patch #1830/2.
# 
# drivers/pcmcia/soc_common.h
#   2004/05/04 14:23:48+01:00 nico@org.rmk.(none) +1 -1
#   [PATCH] 1843/2: supress PCMCIA build warnings
# 
# drivers/pcmcia/pxa2xx_lubbock.c
#   2004/05/04 14:40:32+01:00 nico@org.rmk.(none) +6 -3
#   [PATCH] 1843/2: supress PCMCIA build warnings
# 
# ChangeSet
#   2004/05/11 16:46:51+01:00 nico@org.rmk.(none) 
#   [ARM PATCH] 1831/1: remove outdated SA11xx PCMCIA documentation
#   
#   Patch from Nicolas Pitre
#   
#   This documentation isn't reflecting the code anymore and therefore 
#   is misleading.  Better remove it and let people see the code where
#   multiple examples can now be followed.
# 
# BitKeeper/deleted/.del-PCMCIA~699d5c97500f14b6
#   2004/05/11 16:44:25+01:00 nico@org.rmk.(none) +0 -0
#   Delete: Documentation/arm/SA1100/PCMCIA
# 
# ChangeSet
#   2004/05/11 16:42:43+01:00 nico@org.rmk.(none) 
#   [ARM PATCH] 1830/2: PCMCIA support for Lubbock (PXA2xx based)
#   
#   Patch from Nicolas Pitre
#   
#   [Patch #1830/1 wasn't generated correctly.  Here's the fixed one.]
#   
#   This adds PCMCIA support for Lubbock and relies on patch #1829/1.  This
#   is probably the only reference board using both the PXA2xx and the SA1111 
#   for PCMCIA support. Other board won't need to link sa1111_generic.o.
# 
# drivers/pcmcia/sa1111_generic.h
#   2004/04/23 00:48:42+01:00 nico@org.rmk.(none) +1 -0
#   [PATCH] 1830/2: PCMCIA support for Lubbock (PXA2xx based)
# 
# drivers/pcmcia/sa1111_generic.c
#   2004/04/23 01:35:49+01:00 nico@org.rmk.(none) +3 -0
#   [PATCH] 1830/2: PCMCIA support for Lubbock (PXA2xx based)
# 
# drivers/pcmcia/Makefile
#   2004/04/22 23:34:55+01:00 nico@org.rmk.(none) +3 -0
#   [PATCH] 1830/2: PCMCIA support for Lubbock (PXA2xx based)
# 
# drivers/pcmcia/pxa2xx_lubbock.c
#   2004/04/23 01:51:18+01:00 nico@org.rmk.(none) +218 -0
#   [PATCH] 1830/2: PCMCIA support for Lubbock (PXA2xx based)
# 
# drivers/pcmcia/pxa2xx_lubbock.c
#   2004/04/23 01:51:18+01:00 nico@org.rmk.(none) +0 -0
#   BitKeeper file /usr/src/bk/linux-2.6-pcmcia/drivers/pcmcia/pxa2xx_lubbock.c
# 
# ChangeSet
#   2004/05/11 16:38:35+01:00 nico@org.rmk.(none) 
#   [ARM PATCH] 1829/1: base support for PCMCIA on the Intel PXA2xx chip
#   
#   Patch from Nicolas Pitre
#   
#   This provides base PCMCIA support for PXA2xx and relies on patch #1828/1.
#   Board specific support must be added separately.
#   
#   This is based on initial work from Stefan Eletzhofer and Ian Molton.
# 
# drivers/pcmcia/pxa2xx_base.h
#   2004/04/23 01:47:26+01:00 nico@org.rmk.(none) +3 -0
#   [PATCH] 1829/1: base support for PCMCIA on the Intel PXA2xx chip
# 
# include/asm-arm/arch-pxa/pxa-regs.h
#   2004/04/20 17:52:02+01:00 nico@org.rmk.(none) +13 -0
#   [PATCH] 1829/1: base support for PCMCIA on the Intel PXA2xx chip
# 
# drivers/pcmcia/pxa2xx_base.h
#   2004/04/23 01:47:26+01:00 nico@org.rmk.(none) +0 -0
#   BitKeeper file /usr/src/bk/linux-2.6-pcmcia/drivers/pcmcia/pxa2xx_base.h
# 
# drivers/pcmcia/Makefile
#   2004/04/22 23:34:55+01:00 nico@org.rmk.(none) +2 -0
#   [PATCH] 1829/1: base support for PCMCIA on the Intel PXA2xx chip
# 
# drivers/pcmcia/Kconfig
#   2004/04/21 21:07:13+01:00 nico@org.rmk.(none) +7 -0
#   [PATCH] 1829/1: base support for PCMCIA on the Intel PXA2xx chip
# 
# drivers/pcmcia/pxa2xx_base.c
#   2004/04/23 01:50:10+01:00 nico@org.rmk.(none) +335 -0
#   [PATCH] 1829/1: base support for PCMCIA on the Intel PXA2xx chip
# 
# drivers/pcmcia/pxa2xx_base.c
#   2004/04/23 01:50:10+01:00 nico@org.rmk.(none) +0 -0
#   BitKeeper file /usr/src/bk/linux-2.6-pcmcia/drivers/pcmcia/pxa2xx_base.c
# 
# ChangeSet
#   2004/05/11 16:32:38+01:00 nico@org.rmk.(none) 
#   [ARM PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic
#    code
#   
#   Patch from Nicolas Pitre
#   
#   [Updated after comments on patch #1828/1]
#   
#   This patch moves things around and rename a few files/functions/structures
#   to be shared with PXA2xx PCMCIA support (coming in a separate patch) and
#   maybe others SOCs. No functional change were made so SA11xx users
#   shouldn't see any difference.
# 
# drivers/pcmcia/sa1111_generic.h
#   2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +8 -7
#   [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic
#    code
# 
# drivers/pcmcia/sa1111_generic.c
#   2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +11 -11
#   [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic
#    code
# 
# drivers/pcmcia/sa1100_yopy.c
#   2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +10 -10
#   [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic
#    code
# 
# drivers/pcmcia/sa1100_xp860.c
#   2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +2 -2
#   [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic
#    code
# 
# drivers/pcmcia/sa1100_trizeps.c
#   2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +10 -10
#   [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic
#    code
# 
# drivers/pcmcia/sa1100_system3.c
#   2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +3 -3
#   [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic
#    code
# 
# drivers/pcmcia/sa1100_stork.c
#   2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +10 -10
#   [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic
#    code
# 
# drivers/pcmcia/sa1100_simpad.c
#   2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +10 -10
#   [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic
#    code
# 
# drivers/pcmcia/sa1100_shannon.c
#   2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +10 -10
#   [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic
#    code
# 
# drivers/pcmcia/sa1100_pfs168.c
#   2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +2 -2
#   [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic
#    code
# 
# drivers/pcmcia/sa1100_pangolin.c
#   2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +10 -10
#   [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic
#    code
# 
# drivers/pcmcia/sa1100_neponset.c
#   2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +2 -2
#   [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic
#    code
# 
# drivers/pcmcia/sa1100_jornada720.c
#   2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +2 -2
#   [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic
#    code
# 
# drivers/pcmcia/sa1100_h3600.c
#   2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +10 -10
#   [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic
#    code
# 
# drivers/pcmcia/sa1100_graphicsmaster.c
#   2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +2 -2
#   [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic
#    code
# 
# drivers/pcmcia/sa1100_graphicsclient.c
#   2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +7 -7
#   [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic
#    code
# 
# drivers/pcmcia/sa1100_generic.h
#   2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +2 -1
#   [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic
#    code
# 
# drivers/pcmcia/soc_common.h
#   2004/05/04 17:06:54+01:00 nico@org.rmk.(none) +95 -37
#   [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic
#    code
# 
# drivers/pcmcia/soc_common.c
#   2004/05/04 16:47:32+01:00 nico@org.rmk.(none) +135 -332
#   [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic
#    code
# 
# drivers/pcmcia/sa1100_generic.c
#   2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +2 -2
#   [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic
#    code
# 
# drivers/pcmcia/sa1100_freebird.c
#   2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +10 -10
#   [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic
#    code
# 
# drivers/pcmcia/sa1100_flexanet.c
#   2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +10 -10
#   [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic
#    code
# 
# drivers/pcmcia/sa1100_cerf.c
#   2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +10 -10
#   [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic
#    code
# 
# drivers/pcmcia/sa1100_badge4.c
#   2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +1 -1
#   [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic
#    code
# 
# drivers/pcmcia/sa1100_assabet.c
#   2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +10 -10
#   [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic
#    code
# 
# drivers/pcmcia/sa1100_adsbitsy.c
#   2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +2 -2
#   [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic
#    code
# 
# drivers/pcmcia/Makefile
#   2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +2 -0
#   [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic
#    code
# 
# drivers/pcmcia/sa11xx_base.h
#   2004/05/04 16:24:57+01:00 nico@org.rmk.(none) +14 -55
#   [PATCH] 1828/2: rework SA11xx PCMCIA code structure for better sharing of generic
#    code
# 
# drivers/pcmcia/sa11xx_base.c
#   2004/05/11 16:26:50+01:00 nico@org.rmk.(none) +257 -0
# 
# drivers/pcmcia/sa11xx_base.c
#   2004/05/11 16:26:50+01:00 nico@org.rmk.(none) +0 -0
#   BitKeeper file /usr/src/bk/linux-2.6-pcmcia/drivers/pcmcia/sa11xx_base.c
# 
# ChangeSet
#   2004/05/11 07:54:30-07:00 geert@linux-m68k.org 
#   [PATCH] M68k superfluous whitespace
#   
#   M68k: Remove superfluous whitespace that hurts my eyes with `let
#   c_space_errors=1' in vim. This includes correcting trailing whitespace and
#   spaces in front of tabs. `diff -urNbB' shows no difference before/after.
# 
# include/asm-m68k/virtconvert.h
#   2004/04/04 03:11:22-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# include/asm-m68k/user.h
#   2004/04/04 03:11:22-07:00 geert@linux-m68k.org +2 -2
#   M68k superfluous whitespace
# 
# include/asm-m68k/unaligned.h
#   2004/04/04 03:11:22-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# include/asm-m68k/tlbflush.h
#   2004/04/04 03:11:22-07:00 geert@linux-m68k.org +5 -5
#   M68k superfluous whitespace
# 
# include/asm-m68k/thread_info.h
#   2004/04/04 03:11:22-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# include/asm-m68k/termios.h
#   2004/04/04 03:11:22-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# include/asm-m68k/sun3xflop.h
#   2004/04/04 03:11:22-07:00 geert@linux-m68k.org +14 -14
#   M68k superfluous whitespace
# 
# include/asm-m68k/sun3x.h
#   2004/04/04 03:11:22-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# include/asm-m68k/sun3mmu.h
#   2004/04/04 03:11:22-07:00 geert@linux-m68k.org +2 -2
#   M68k superfluous whitespace
# 
# include/asm-m68k/sun3_pgalloc.h
#   2004/04/04 03:11:22-07:00 geert@linux-m68k.org +5 -5
#   M68k superfluous whitespace
# 
# include/asm-m68k/string.h
#   2004/04/04 03:11:22-07:00 geert@linux-m68k.org +2 -2
#   M68k superfluous whitespace
# 
# include/asm-m68k/sockios.h
#   2004/04/04 03:11:22-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# include/asm-m68k/signal.h
#   2004/04/04 03:11:22-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# include/asm-m68k/sigcontext.h
#   2004/04/04 03:11:22-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# include/asm-m68k/shmbuf.h
#   2004/04/04 03:11:22-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# include/asm-m68k/setup.h
#   2004/04/04 03:11:22-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# include/asm-m68k/serial.h
#   2004/04/04 03:11:22-07:00 geert@linux-m68k.org +3 -3
#   M68k superfluous whitespace
# 
# include/asm-m68k/sembuf.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# include/asm-m68k/rtc.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# include/asm-m68k/raw_io.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# include/asm-m68k/q40_master.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +2 -2
#   M68k superfluous whitespace
# 
# include/asm-m68k/page_offset.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# include/asm-m68k/page.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +3 -3
#   M68k superfluous whitespace
# 
# include/asm-m68k/oplib.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +4 -4
#   M68k superfluous whitespace
# 
# include/asm-m68k/openprom.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +44 -44
#   M68k superfluous whitespace
# 
# include/asm-m68k/mvme16xhw.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# include/asm-m68k/mvme147hw.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# include/asm-m68k/msgbuf.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# include/asm-m68k/motorola_pgtable.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# include/asm-m68k/mmu_context.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +2 -2
#   M68k superfluous whitespace
# 
# include/asm-m68k/md.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +2 -2
#   M68k superfluous whitespace
# 
# include/asm-m68k/macints.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +4 -4
#   M68k superfluous whitespace
# 
# include/asm-m68k/macintosh.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +8 -8
#   M68k superfluous whitespace
# 
# include/asm-m68k/machw.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# include/asm-m68k/mac_via.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +12 -12
#   M68k superfluous whitespace
# 
# include/asm-m68k/mac_psc.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +6 -6
#   M68k superfluous whitespace
# 
# include/asm-m68k/mac_oss.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# include/asm-m68k/mac_asc.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +4 -4
#   M68k superfluous whitespace
# 
# include/asm-m68k/irq.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# include/asm-m68k/ipc.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# include/asm-m68k/io.h
#   2004/04/04 03:12:11-07:00 geert@linux-m68k.org +7 -7
#   M68k superfluous whitespace
# 
# include/asm-m68k/intersil.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# include/asm-m68k/ide.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# include/asm-m68k/hwtest.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +2 -2
#   M68k superfluous whitespace
# 
# include/asm-m68k/floppy.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +7 -7
#   M68k superfluous whitespace
# 
# include/asm-m68k/entry.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# include/asm-m68k/dvma.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +6 -6
#   M68k superfluous whitespace
# 
# include/asm-m68k/delay.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# include/asm-m68k/checksum.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# include/asm-m68k/cacheflush.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +3 -3
#   M68k superfluous whitespace
# 
# include/asm-m68k/bootinfo.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +5 -5
#   M68k superfluous whitespace
# 
# include/asm-m68k/bitops.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# include/asm-m68k/atariints.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +6 -6
#   M68k superfluous whitespace
# 
# include/asm-m68k/atarihw.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +41 -41
#   M68k superfluous whitespace
# 
# include/asm-m68k/atari_acsi.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# include/asm-m68k/atari_SCCserial.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# include/asm-m68k/atafdreg.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# include/asm-m68k/apollohw.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +4 -4
#   M68k superfluous whitespace
# 
# include/asm-m68k/apollodma.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +5 -5
#   M68k superfluous whitespace
# 
# include/asm-m68k/amigahw.h
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +8 -8
#   M68k superfluous whitespace
# 
# arch/m68k/sun3x/time.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +5 -5
#   M68k superfluous whitespace
# 
# arch/m68k/sun3x/prom.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +3 -3
#   M68k superfluous whitespace
# 
# arch/m68k/sun3x/dvma.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +22 -22
#   M68k superfluous whitespace
# 
# arch/m68k/sun3x/config.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +4 -4
#   M68k superfluous whitespace
# 
# arch/m68k/sun3/sun3ints.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +15 -15
#   M68k superfluous whitespace
# 
# arch/m68k/sun3/sun3dvma.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +33 -33
#   M68k superfluous whitespace
# 
# arch/m68k/sun3/prom/init.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# arch/m68k/sun3/mmu_emu.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +20 -20
#   M68k superfluous whitespace
# 
# arch/m68k/sun3/leds.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +2 -2
#   M68k superfluous whitespace
# 
# arch/m68k/sun3/intersil.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# arch/m68k/sun3/idprom.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +2 -2
#   M68k superfluous whitespace
# 
# arch/m68k/sun3/dvma.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +4 -4
#   M68k superfluous whitespace
# 
# arch/m68k/sun3/config.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +15 -15
#   M68k superfluous whitespace
# 
# arch/m68k/q40/q40ints.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +20 -20
#   M68k superfluous whitespace
# 
# arch/m68k/q40/config.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +9 -9
#   M68k superfluous whitespace
# 
# arch/m68k/q40/README
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +24 -24
#   M68k superfluous whitespace
# 
# arch/m68k/q40/Makefile
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# arch/m68k/mvme16x/rtc.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +2 -2
#   M68k superfluous whitespace
# 
# arch/m68k/mvme16x/mvme16x_ksyms.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# arch/m68k/mvme147/config.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +7 -7
#   M68k superfluous whitespace
# 
# arch/m68k/mm/sun3mmu.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +4 -4
#   M68k superfluous whitespace
# 
# arch/m68k/mm/sun3kmap.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +15 -15
#   M68k superfluous whitespace
# 
# arch/m68k/mm/motorola.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +3 -3
#   M68k superfluous whitespace
# 
# arch/m68k/mm/memory.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +3 -3
#   M68k superfluous whitespace
# 
# arch/m68k/mm/init.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# arch/m68k/mm/hwtest.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +5 -5
#   M68k superfluous whitespace
# 
# arch/m68k/mm/fault.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +2 -2
#   M68k superfluous whitespace
# 
# arch/m68k/math-emu/fp_util.S
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# arch/m68k/math-emu/fp_scan.S
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +4 -4
#   M68k superfluous whitespace
# 
# arch/m68k/math-emu/fp_log.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +2 -2
#   M68k superfluous whitespace
# 
# arch/m68k/math-emu/fp_cond.S
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +4 -4
#   M68k superfluous whitespace
# 
# arch/m68k/math-emu/fp_arith.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# arch/m68k/mac/via.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +9 -9
#   M68k superfluous whitespace
# 
# arch/m68k/mac/psc.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +3 -3
#   M68k superfluous whitespace
# 
# arch/m68k/mac/oss.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +5 -5
#   M68k superfluous whitespace
# 
# arch/m68k/mac/misc.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +6 -6
#   M68k superfluous whitespace
# 
# arch/m68k/mac/macints.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +7 -7
#   M68k superfluous whitespace
# 
# arch/m68k/mac/macboing.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +38 -38
#   M68k superfluous whitespace
# 
# arch/m68k/mac/iop.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +9 -9
#   M68k superfluous whitespace
# 
# arch/m68k/mac/debug.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +12 -12
#   M68k superfluous whitespace
# 
# arch/m68k/mac/config.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +32 -32
#   M68k superfluous whitespace
# 
# arch/m68k/mac/bootparse.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +89 -89
#   M68k superfluous whitespace
# 
# arch/m68k/mac/baboon.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +3 -3
#   M68k superfluous whitespace
# 
# arch/m68k/lib/muldi3.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +2 -2
#   M68k superfluous whitespace
# 
# arch/m68k/lib/lshrdi3.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# arch/m68k/lib/ashrdi3.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# arch/m68k/lib/ashldi3.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# arch/m68k/kernel/vmlinux-sun3.lds
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +14 -14
#   M68k superfluous whitespace
# 
# arch/m68k/kernel/vmlinux-std.lds
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +7 -7
#   M68k superfluous whitespace
# 
# arch/m68k/kernel/traps.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +13 -13
#   M68k superfluous whitespace
# 
# arch/m68k/kernel/sys_m68k.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +5 -5
#   M68k superfluous whitespace
# 
# arch/m68k/kernel/sun3-head.S
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +14 -14
#   M68k superfluous whitespace
# 
# arch/m68k/kernel/signal.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +5 -5
#   M68k superfluous whitespace
# 
# arch/m68k/kernel/setup.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +15 -15
#   M68k superfluous whitespace
# 
# arch/m68k/kernel/ptrace.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +7 -7
#   M68k superfluous whitespace
# 
# arch/m68k/kernel/head.S
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +3 -3
#   M68k superfluous whitespace
# 
# arch/m68k/kernel/entry.S
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +15 -15
#   M68k superfluous whitespace
# 
# arch/m68k/kernel/bios32.c
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# arch/m68k/ifpsp060/src/pfpsp.S
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +652 -652
#   M68k superfluous whitespace
# 
# arch/m68k/ifpsp060/src/itest.S
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +4 -4
#   M68k superfluous whitespace
# 
# arch/m68k/ifpsp060/src/isp.S
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +270 -270
#   M68k superfluous whitespace
# 
# arch/m68k/ifpsp060/src/ilsp.S
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +53 -53
#   M68k superfluous whitespace
# 
# arch/m68k/ifpsp060/src/ftest.S
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +8 -8
#   M68k superfluous whitespace
# 
# arch/m68k/ifpsp060/src/fpsp.S
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +913 -913
#   M68k superfluous whitespace
# 
# arch/m68k/ifpsp060/src/fplsp.S
#   2004/04/04 03:11:21-07:00 geert@linux-m68k.org +179 -179
#   M68k superfluous whitespace
# 
# arch/m68k/ifpsp060/os.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +39 -39
#   M68k superfluous whitespace
# 
# arch/m68k/ifpsp060/isp.doc
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +9 -9
#   M68k superfluous whitespace
# 
# arch/m68k/ifpsp060/iskeleton.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +9 -9
#   M68k superfluous whitespace
# 
# arch/m68k/ifpsp060/ilsp.doc
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +8 -8
#   M68k superfluous whitespace
# 
# arch/m68k/ifpsp060/fskeleton.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +13 -13
#   M68k superfluous whitespace
# 
# arch/m68k/ifpsp060/fpsp.doc
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +10 -10
#   M68k superfluous whitespace
# 
# arch/m68k/ifpsp060/fplsp.doc
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +3 -3
#   M68k superfluous whitespace
# 
# arch/m68k/ifpsp060/TEST.DOC
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +7 -7
#   M68k superfluous whitespace
# 
# arch/m68k/ifpsp060/README
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +2 -2
#   M68k superfluous whitespace
# 
# arch/m68k/ifpsp060/MISC
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +3 -3
#   M68k superfluous whitespace
# 
# arch/m68k/ifpsp060/CHANGES
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +13 -13
#   M68k superfluous whitespace
# 
# arch/m68k/hp300/ints.c
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +8 -8
#   M68k superfluous whitespace
# 
# arch/m68k/hp300/hp300map.map
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +45 -45
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/x_unsupp.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +9 -9
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/x_unimp.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +4 -4
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/x_unfl.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +17 -17
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/x_store.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +22 -22
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/x_snan.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +13 -13
#   M68k superfluous whitespace
# 
# arch/m68k/Makefile
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# arch/m68k/Kconfig
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +4 -4
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/x_ovfl.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +8 -8
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/x_operr.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +13 -13
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/x_fline.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +4 -4
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/x_bsun.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +2 -2
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/util.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +35 -35
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/tbldo.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +5 -5
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/stwotox.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +14 -14
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/sto_res.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +4 -4
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/stanh.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +5 -5
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/stan.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +29 -29
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/ssinh.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +4 -4
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/ssin.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +13 -13
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/srem_mod.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +9 -9
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/smovecr.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +6 -6
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/slogn.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +19 -19
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/slog2.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +17 -17
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/skeleton.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +26 -26
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/sint.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +15 -15
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/sgetem.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +7 -7
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/setox.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +14 -14
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/scosh.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +3 -3
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/scale.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +11 -11
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/satanh.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +4 -4
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/satan.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +11 -11
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/sasin.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +5 -5
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/sacos.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +8 -8
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/round.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +53 -53
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/res_func.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +77 -77
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/kernel_ex.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +30 -30
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/get_op.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +41 -41
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/gen_except.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +39 -39
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/fpsp.h
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +13 -13
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/do_func.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +28 -28
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/decbin.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +12 -12
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/bugfix.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +34 -34
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/binstr.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +2 -2
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/bindec.S
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +58 -58
#   M68k superfluous whitespace
# 
# arch/m68k/fpsp040/README
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +2 -2
#   M68k superfluous whitespace
# 
# arch/m68k/defconfig
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# arch/m68k/bvme6000/rtc.c
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +2 -2
#   M68k superfluous whitespace
# 
# arch/m68k/atari/time.c
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +19 -19
#   M68k superfluous whitespace
# 
# arch/m68k/atari/stram.c
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +19 -19
#   M68k superfluous whitespace
# 
# arch/m68k/atari/stdma.c
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# arch/m68k/atari/debug.c
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +12 -12
#   M68k superfluous whitespace
# 
# arch/m68k/atari/config.c
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +14 -14
#   M68k superfluous whitespace
# 
# arch/m68k/atari/atasound.c
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# arch/m68k/atari/ataints.c
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +12 -12
#   M68k superfluous whitespace
# 
# arch/m68k/apollo/dn_ints.c
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +2 -2
#   M68k superfluous whitespace
# 
# arch/m68k/apollo/dn_debug.c
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +2 -2
#   M68k superfluous whitespace
# 
# arch/m68k/apollo/dma.c
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# arch/m68k/apollo/config.c
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +32 -32
#   M68k superfluous whitespace
# 
# arch/m68k/amiga/config.c
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +7 -7
#   M68k superfluous whitespace
# 
# arch/m68k/amiga/chipram.c
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# arch/m68k/amiga/amisound.c
#   2004/04/04 03:11:20-07:00 geert@linux-m68k.org +1 -1
#   M68k superfluous whitespace
# 
# fs/ntfs/mft.h
#   2004/05/11 15:19:37+01:00 aia21@cantab.net +0 -2
#   Remove obsolete declaration of format_mft_record2().
# 
# fs/ntfs/layout.h
#   2004/05/11 15:19:37+01:00 aia21@cantab.net +25 -22
#   - Add VOLUME_MUST_MOUNT_RO_MASK bit mask to VOLUME_FLAGS enum.
#   - Also, missed a few trailing tabs in the whitespace cleanup patch.
# 
# fs/ntfs/ChangeLog
#   2004/05/11 15:19:37+01:00 aia21@cantab.net +15 -1
#   Update for 2.1.10 release.
# 
# Documentation/filesystems/ntfs.txt
#   2004/05/11 15:19:37+01:00 aia21@cantab.net +3 -0
#   Update for 2.1.10 release.
# 
# ChangeSet
#   2004/05/11 09:50:41+01:00 aia21@cantab.net 
#   Merge cantab.net:/home/src/bklinux-2.6
#   into cantab.net:/home/src/ntfs-2.6
# 
# fs/ntfs/ntfs.h
#   2004/05/11 09:50:36+01:00 aia21@cantab.net +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/05/11 04:05:08-04:00 herbert@gondor.apana.org.au 
#   [sound/oss i810] fix deadlock in drain_dac
#   
#   This patch fixes a typo in a previous change that causes the driver
#   to deadlock under SMP.
# 
# sound/oss/i810_audio.c
#   2004/05/11 04:05:01-04:00 herbert@gondor.apana.org.au +1 -1
#   [sound/oss i810] fix deadlock in drain_dac
#   
#   This patch fixes a typo in a previous change that causes the driver
#   to deadlock under SMP.
# 
# ChangeSet
#   2004/05/11 04:04:09-04:00 herbert@gondor.apana.org.au 
#   [sound/oss i810] fix reads/writes % 4 != 0
#   
#   This patch removes another bogus chunk of code that breaks when
#   the application does a partial write.
#   
#   In particular, a read/write of x bytes where x % 4 != 0 will loop forever.
# 
# sound/oss/i810_audio.c
#   2004/05/11 04:04:02-04:00 herbert@gondor.apana.org.au +0 -18
#   [sound/oss i810] fix reads/writes % 4 != 0
#   
#   This patch removes another bogus chunk of code that breaks when
#   the application does a partial write.
#   
#   In particular, a read/write of x bytes where x % 4 != 0 will loop forever.
# 
# ChangeSet
#   2004/05/11 04:02:55-04:00 herbert@gondor.apana.org.au 
#   [sound/oss i810] fix drain_dac loop when signals_allowed==0
#   
#   This patch fixes another bug in the drain_dac wait loop when it is
#   called with signals_allowed == 0.
# 
# sound/oss/i810_audio.c
#   2004/05/11 04:02:49-04:00 herbert@gondor.apana.org.au +2 -1
#   [sound/oss i810] fix drain_dac loop when signals_allowed==0
#   
#   This patch fixes another bug in the drain_dac wait loop when it is
#   called with signals_allowed == 0.
# 
# ChangeSet
#   2004/05/11 04:01:34-04:00 herbert@gondor.apana.org.au 
#   [sound/oss i810] remove divides on playback
#   
#   This patch removes a couple of divides on the playback path.
# 
# sound/oss/i810_audio.c
#   2004/05/11 04:01:28-04:00 herbert@gondor.apana.org.au +4 -6
#   [sound/oss i810] remove divides on playback
#   
#   This patch removes a couple of divides on the playback path.
# 
# ChangeSet
#   2004/05/11 03:59:23-04:00 herbert@gondor.apana.org.au 
#   [sound/oss i810] fix OSS fragments
#   
#   This patch makes userfragsize do what it's meant to do: do not start
#   DAC/ADC until a full fragment is available.
# 
# sound/oss/i810_audio.c
#   2004/05/11 03:59:17-04:00 herbert@gondor.apana.org.au +13 -4
#   [sound/oss i810] fix OSS fragments
#   
#   This patch makes userfragsize do what it's meant to do: do not start
#   DAC/ADC until a full fragment is available.
# 
# ChangeSet
#   2004/05/11 03:58:35-04:00 herbert@gondor.apana.org.au 
#   [sound/oss i810] fix playback SETTRIGGER
#   
#   This patch fixes SETTRIGGER with playback so that the LVI is always
#   set and the DAC is always started.
# 
# sound/oss/i810_audio.c
#   2004/05/11 03:58:29-04:00 herbert@gondor.apana.org.au +3 -3
#   [sound/oss i810] fix playback SETTRIGGER
#   
#   This patch fixes SETTRIGGER with playback so that the LVI is always
#   set and the DAC is always started.
# 
# ChangeSet
#   2004/05/11 03:57:31-04:00 herbert@gondor.apana.org.au 
#   [sound/oss i810] fix partial DMA transfers
#   
#   This patch fixes a longstanding bug in this driver where partial fragments
#   are fed to the hardware.  Worse yet, those fragments are then extended
#   while the hardware is doing DMA transfers causing all sorts of problems.
# 
# sound/oss/i810_audio.c
#   2004/05/11 03:57:25-04:00 herbert@gondor.apana.org.au +77 -48
#   [sound/oss i810] fix partial DMA transfers
#   
#   This patch fixes a longstanding bug in this driver where partial fragments
#   are fed to the hardware.  Worse yet, those fragments are then extended
#   while the hardware is doing DMA transfers causing all sorts of problems.
# 
# ChangeSet
#   2004/05/11 03:56:34-04:00 herbert@gondor.apana.org.au 
#   [sound/oss i810] clean up with macros
#   
#   This patch adds a number macros to clean up the code.
# 
# sound/oss/i810_audio.c
#   2004/05/11 03:56:29-04:00 herbert@gondor.apana.org.au +18 -10
#   [sound/oss i810] clean up with macros
#   
#   This patch adds a number macros to clean up the code.
# 
# ChangeSet
#   2004/05/11 03:52:23-04:00 herbert@gondor.apana.org.au 
#   [sound/oss] remove bogus CIV_TO_LVI
#   
#   This patch removes a pair of bogus LVI assignments.  The explanation in
#   the comment is wrong because the value of PCIB tells the hardware that
#   the DMA buffer can be processed even if LVI == CIV.
#   
#   Setting LVI to CIV + 1 causes overruns when with short writes
#   (something that vmware is very fond of).
# 
# sound/oss/i810_audio.c
#   2004/05/11 03:52:17-04:00 herbert@gondor.apana.org.au +0 -10
#   [sound/oss] remove bogus CIV_TO_LVI
#   
#   This patch removes a pair of bogus LVI assignments.  The explanation in
#   the comment is wrong because the value of PCIB tells the hardware that
#   the DMA buffer can be processed even if LVI == CIV.
#   
#   Setting LVI to CIV + 1 causes overruns when with short writes
#   (something that vmware is very fond of).
# 
# ChangeSet
#   2004/05/11 03:50:39-04:00 herbert@gondor.apana.org.au 
#   [sound/oss i810] fix race
#   
#   This patch fixes the value of swptr in case of an underrun/overrun.
#   
#   Overruns/underruns probably won't occur at all when the driver is
#   fixed properly, but this doesn't hurt.
# 
# sound/oss/i810_audio.c
#   2004/05/11 03:50:33-04:00 herbert@gondor.apana.org.au +2 -2
#   [sound/oss i810] fix race
#   
#   This patch fixes the value of swptr in case of an underrun/overrun.
#   
#   Overruns/underruns probably won't occur at all when the driver is
#   fixed properly, but this doesn't hurt.
# 
# ChangeSet
#   2004/05/11 03:48:33-04:00 herbert@gondor.apana.org.au 
#   [sound/oss i810] fix wait queue race in drain_dac
#   
#   This particular one fixes a textbook race condition in drain_dac
#   that causes it to timeout when it shouldn't.
# 
# sound/oss/i810_audio.c
#   2004/05/11 03:45:43-04:00 herbert@gondor.apana.org.au +11 -10
#   [sound/oss i810] fix wait queue race in drain_dac
#   
#   This particular one fixes a textbook race condition in drain_dac
#   that causes it to timeout when it shouldn't.
# 
# ChangeSet
#   2004/05/11 03:05:10-04:00 mingo@elte.hu 
#   [netdrvr dmfe] netpoll support
# 
# drivers/net/tulip/dmfe.c
#   2004/05/10 20:00:00-04:00 mingo@elte.hu +23 -0
#   netpoll support for dmfe.c, 2.6.6-rc3
# 
# ChangeSet
#   2004/05/11 03:05:01-04:00 hch@lst.de 
#   [netdrvr gt961000eth] remove useless MOD_{INC,DEC}_USE_COUNT
#   
#   *grr* - this one slipped in after my last round of audits it seems.
# 
# drivers/net/gt96100eth.c
#   2004/05/03 09:22:22-04:00 hch@lst.de +0 -6
#   remove useless MOD_{INC,DEC}_USE_COUNT
# 
# ChangeSet
#   2004/05/11 03:04:53-04:00 akpm@osdl.org 
#   [PATCH] 8139too not running s3 suspend/resume pci fix
#   
#   From: "Adrian Yee" <brewt-linux-kernel@brewt.org>
#   
#   Having an 8139 based device in my notebook, I often switch between it and
#   wireless.  The problem is that the 8139too driver does not save/restore the
#   pci configuration of the card if the device isn't running.  This simple
#   patch moves the save/restore code so that the code runs regardless of
#   whether or not the device is running.
#   
#   I looked at other drivers and they all seem to do the same thing.  Is there
#   a reason why this isn't done like in the patch?
# 
# drivers/net/8139too.c
#   2004/04/26 13:11:44-04:00 akpm@osdl.org +3 -2
#   8139too not running s3 suspend/resume pci fix
# 
# ChangeSet
#   2004/05/11 03:04:44-04:00 akpm@osdl.org 
#   [PATCH] lance.c: fix for card with signature 0x52 0x49
#   
#   From: Vesselin Kostadiov <vesselin@alphawave.com.au>
#   
#   Problem: The lance.c driver did not work with my Racal Interlan EtherBlaster
#   card.
#   
#   More info: I found that my card has a signature 0x52 0x49 that was not
#   recognized by the driver.
#   
#   Explanation: Following your suggestion I created a static table with possible
#   signatures, not too different from the table in ni65.c.  The updated code
#   compares the first byte of the cards signature with the first byte of the
#   signatures from the table.  It this succeeds then it reads the second byte and
#   compares the whole signature with the values from the table.  This way the
#   minimal I/O reads approach is maintained.
#   
#   Side effect: The previous version would missdetect cards with signatures 0x52
#   0x57 and 0x57 0x44.  This has been fixed as well.
# 
# drivers/net/lance.c
#   2004/05/03 09:40:23-04:00 akpm@osdl.org +37 -7
#   lance.c: fix for card with signature 0x52 0x49
# 
# ChangeSet
#   2004/05/11 03:04:36-04:00 cw@f00f.org 
#   [PATCH] kill warning in r8169
# 
# drivers/net/r8169.c
#   2004/05/10 14:42:46-04:00 cw@f00f.org +1 -1
#   bk 2.6.6 r8169.c shud'up gcc
# 
# ChangeSet
#   2004/05/10 22:12:24-04:00 jgarzik@redhat.com 
#   [libata] Maintainer annotations
#   
#   In MAINTAINERS and in individual low-level drivers.
# 
# drivers/scsi/sata_vsc.c
#   2004/05/10 22:12:19-04:00 jgarzik@redhat.com +4 -0
#   [libata] Maintainer annotations
#   
#   In MAINTAINERS and in individual low-level drivers.
# 
# drivers/scsi/sata_via.c
#   2004/05/10 22:12:19-04:00 jgarzik@redhat.com +4 -0
#   [libata] Maintainer annotations
#   
#   In MAINTAINERS and in individual low-level drivers.
# 
# drivers/scsi/sata_sx4.c
#   2004/05/10 22:12:19-04:00 jgarzik@redhat.com +4 -0
#   [libata] Maintainer annotations
#   
#   In MAINTAINERS and in individual low-level drivers.
# 
# drivers/scsi/sata_svw.c
#   2004/05/10 22:12:19-04:00 jgarzik@redhat.com +6 -1
#   [libata] Maintainer annotations
#   
#   In MAINTAINERS and in individual low-level drivers.
# 
# drivers/scsi/sata_sis.c
#   2004/05/10 22:12:19-04:00 jgarzik@redhat.com +4 -0
#   [libata] Maintainer annotations
#   
#   In MAINTAINERS and in individual low-level drivers.
# 
# drivers/scsi/sata_sil.c
#   2004/05/10 22:12:19-04:00 jgarzik@redhat.com +5 -1
#   [libata] Maintainer annotations
#   
#   In MAINTAINERS and in individual low-level drivers.
# 
# drivers/scsi/sata_promise.c
#   2004/05/10 22:12:19-04:00 jgarzik@redhat.com +4 -0
#   [libata] Maintainer annotations
#   
#   In MAINTAINERS and in individual low-level drivers.
# 
# drivers/scsi/ata_piix.c
#   2004/05/10 22:12:19-04:00 jgarzik@redhat.com +4 -0
#   [libata] Maintainer annotations
#   
#   In MAINTAINERS and in individual low-level drivers.
# 
# MAINTAINERS
#   2004/05/10 22:12:19-04:00 jgarzik@redhat.com +6 -0
#   [libata] Maintainer annotations
#   
#   In MAINTAINERS and in individual low-level drivers.
# 
# ChangeSet
#   2004/05/10 21:51:40-04:00 jgarzik@redhat.com 
#   [libata] preparation for writeback caching support
#   
#   * bug fix: make sure 'nsect' member of struct ata_queued_cmd is
#   initialized each time a cmd is re-used.  Only affects PIO data xfers,
#   which nobody uses.
#   * slightly change the way a device's flags are printed out.  currently
#   the only flag is 'lba48', but soon 'wcache' will appear also.
#   * add WB-cache-related constants and macros to linux/ata.h
# 
# include/linux/ata.h
#   2004/05/10 21:49:59-04:00 jgarzik@redhat.com +4 -0
#   [libata] preparation for writeback caching support
#   
#   * bug fix: make sure 'nsect' member of struct ata_queued_cmd is
#   initialized each time a cmd is re-used.  Only affects PIO data xfers,
#   which nobody uses.
#   * slightly change the way a device's flags are printed out.  currently
#   the only flag is 'lba48', but soon 'wcache' will appear also.
#   * add WB-cache-related constants and macros to linux/ata.h
# 
# drivers/scsi/libata-core.c
#   2004/05/10 21:49:59-04:00 jgarzik@redhat.com +3 -2
#   [libata] preparation for writeback caching support
#   
#   * bug fix: make sure 'nsect' member of struct ata_queued_cmd is
#   initialized each time a cmd is re-used.  Only affects PIO data xfers,
#   which nobody uses.
#   * slightly change the way a device's flags are printed out.  currently
#   the only flag is 'lba48', but soon 'wcache' will appear also.
#   * add WB-cache-related constants and macros to linux/ata.h
# 
# ChangeSet
#   2004/05/10 16:54:27-07:00 eger@havoc.gtf.org 
#   [PATCH] radeon: fix overlapping copyarea
#   
#   This fixes a corruption problem with overlapping copyarea()'s
#   in the radeon driver.
# 
# drivers/video/aty/radeon_accel.c
#   2004/04/18 16:49:14-07:00 eger@havoc.gtf.org +17 -4
#   radeon: fix overlapping copyarea
# 
# ChangeSet
#   2004/05/10 16:54:17-07:00 paulus@samba.org 
#   [PATCH] ppc64: extra barrier in I/O operations
#   
#   At the moment, on PPC64, the instruction we use for wmb() doesn't
#   order cacheable stores vs. non-cacheable stores.  (It does order
#   cacheable vs. cacheable and non-cacheable vs. non-cacheable.)  This
#   causes problems in the sort of driver code that writes stuff into
#   memory, does a wmb(), then a writel to the device to start a DMA
#   operation to read the stuff it has just written to memory.
#   
#   This patch solves the problem by adding a sync instruction before the
#   store in the write* and out* macros.  The sync is a full barrier that
#   orders all loads and stores, cacheable or not.  The patch also moves
#   the eieio instruction that we had after the store to before the load
#   in the read* and in* macros.  With the sync before the store, we don't
#   need an eieio as well in a sequence of stores, but we still need an
#   eieio between a store and a load.
#   
#   I think it is better to do this than to turn wmb() into a full memory
#   barrier (a sync instruction) because the full barrier is slow and
#   isn't needed with the sync in the write*/out* macros.  This way,
#   write*/out* are fully ordered with respect to preceding loads and
#   stores, which is what driver writers expect, and we avoid penalizing
#   users of wmb() who are only doing cacheable stores.
# 
# include/asm-ppc64/io.h
#   2004/05/08 20:31:13-07:00 paulus@samba.org +25 -23
#   ppc64: extra barrier in I/O operations
# 
# ChangeSet
#   2004/05/10 16:30:02-07:00 willy@debian.org 
#   [PATCH] PA-RISC updates for 2.6.6
#   
#    - Split PA7300LC from PA7100LC (Matthew Wilcox)
#    - Handle 32-bit firmware and 64-bit kernel at runtime (Ryan Bradetich)
#    - Fix building in a separate tree (Matthew Wilcox)
#    - Update defconfigs (Randolph Chung)
#    - Make WCHAN work (Randolph Chung)
#    - Initial support for SMP in 2.6 (Grant Grundler)
#    - Use 8-byte PTEs on 32-bit kernels (James Bottomley)
#    - Implement L2/L3 hybrid page tables for 64 bit kernels (James Bottomley)
#    - Support 8TB of physical and virtual address space (James Bottomley)
#    - Macro'ise the tlb miss handlers (James Bottomley)
#    - Check the ptrace flags correctly in the syscall return path (Randolph Chung)
#    - Eliminate many magic numbers (James Bottomley)
#    - Work around linker bug in vmlinux.lds.S (James Bottomley)
#    - Many cache flushing fixes (James Bottomley)
#    - first baby step for PA8800 support (Grant Grundler)
#    - Self-aligning spinlocks (Randolph Chung)
# 
# include/asm-parisc/unwind.h
#   2004/05/08 15:13:01-07:00 willy@debian.org +72 -0
#   PA-RISC updates for 2.6.6
# 
# include/asm-parisc/unistd.h
#   2004/05/10 02:19:33-07:00 willy@debian.org +148 -98
#   PA-RISC updates for 2.6.6
# 
# include/asm-parisc/system.h
#   2004/05/10 02:19:33-07:00 willy@debian.org +19 -1
#   PA-RISC updates for 2.6.6
# 
# include/asm-parisc/spinlock.h
#   2004/05/10 02:19:33-07:00 willy@debian.org +29 -22
#   PA-RISC updates for 2.6.6
# 
# include/asm-parisc/smp.h
#   2004/05/10 02:19:33-07:00 willy@debian.org +1 -3
#   PA-RISC updates for 2.6.6
# 
# arch/parisc/kernel/unwind.c
#   2004/05/08 15:31:44-07:00 willy@debian.org +295 -0
#   PA-RISC updates for 2.6.6
# 
# include/asm-parisc/unwind.h
#   2004/05/08 15:13:01-07:00 willy@debian.org +0 -0
#   BitKeeper file /home/torvalds/v2.6/linux/include/asm-parisc/unwind.h
# 
# include/asm-parisc/processor.h
#   2004/05/10 02:19:33-07:00 willy@debian.org +23 -14
#   PA-RISC updates for 2.6.6
# 
# include/asm-parisc/pgtable.h
#   2004/05/10 02:19:33-07:00 willy@debian.org +73 -35
#   PA-RISC updates for 2.6.6
# 
# include/asm-parisc/pgalloc.h
#   2004/05/10 02:19:32-07:00 willy@debian.org +59 -13
#   PA-RISC updates for 2.6.6
# 
# include/asm-parisc/pdc.h
#   2004/05/10 02:19:32-07:00 willy@debian.org +1 -0
#   PA-RISC updates for 2.6.6
# 
# include/asm-parisc/page.h
#   2004/05/10 02:19:32-07:00 willy@debian.org +46 -2
#   PA-RISC updates for 2.6.6
# 
# include/asm-parisc/hardware.h
#   2004/05/10 02:19:32-07:00 willy@debian.org +2 -1
#   PA-RISC updates for 2.6.6
# 
# include/asm-parisc/fixmap.h
#   2004/05/10 02:19:32-07:00 willy@debian.org +14 -10
#   PA-RISC updates for 2.6.6
# 
# include/asm-parisc/dma-mapping.h
#   2004/05/10 02:19:32-07:00 willy@debian.org +3 -0
#   PA-RISC updates for 2.6.6
# 
# include/asm-parisc/cacheflush.h
#   2004/05/10 02:19:32-07:00 willy@debian.org +73 -19
#   PA-RISC updates for 2.6.6
# 
# include/asm-parisc/cache.h
#   2004/05/10 02:19:32-07:00 willy@debian.org +2 -0
#   PA-RISC updates for 2.6.6
# 
# include/asm-parisc/bitops.h
#   2004/05/10 02:19:32-07:00 willy@debian.org +23 -12
#   PA-RISC updates for 2.6.6
# 
# include/asm-parisc/atomic.h
#   2004/05/10 02:19:32-07:00 willy@debian.org +36 -23
#   PA-RISC updates for 2.6.6
# 
# drivers/parisc/wax.c
#   2004/05/10 02:19:04-07:00 willy@debian.org +0 -1
#   PA-RISC updates for 2.6.6
# 
# drivers/parisc/superio.c
#   2004/05/10 02:19:04-07:00 willy@debian.org +1 -1
#   PA-RISC updates for 2.6.6
# 
# arch/parisc/mm/init.c
#   2004/05/10 02:18:39-07:00 willy@debian.org +7 -2
#   PA-RISC updates for 2.6.6
# 
# arch/parisc/lib/bitops.c
#   2004/05/10 02:18:39-07:00 willy@debian.org +12 -14
#   PA-RISC updates for 2.6.6
# 
# arch/parisc/kernel/vmlinux.lds.S
#   2004/05/10 02:18:39-07:00 willy@debian.org +16 -3
#   PA-RISC updates for 2.6.6
# 
# arch/parisc/kernel/unwind.c
#   2004/05/08 15:31:44-07:00 willy@debian.org +0 -0
#   BitKeeper file /home/torvalds/v2.6/linux/arch/parisc/kernel/unwind.c
# 
# arch/parisc/kernel/syscall_table.S
#   2004/05/10 02:18:39-07:00 willy@debian.org +9 -0
#   PA-RISC updates for 2.6.6
# 
# arch/parisc/kernel/syscall.S
#   2004/05/10 02:18:38-07:00 willy@debian.org +3 -2
#   PA-RISC updates for 2.6.6
# 
# arch/parisc/kernel/sys_parisc.c
#   2004/05/10 02:18:38-07:00 willy@debian.org +4 -2
#   PA-RISC updates for 2.6.6
# 
# arch/parisc/kernel/smp.c
#   2004/05/10 02:18:38-07:00 willy@debian.org +49 -121
#   PA-RISC updates for 2.6.6
# 
# arch/parisc/kernel/signal.c
#   2004/05/10 02:18:38-07:00 willy@debian.org +17 -8
#   PA-RISC updates for 2.6.6
# 
# arch/parisc/kernel/setup.c
#   2004/05/10 02:18:37-07:00 willy@debian.org +6 -2
#   PA-RISC updates for 2.6.6
# 
# arch/parisc/kernel/real2.S
#   2004/05/10 02:18:37-07:00 willy@debian.org +2 -1
#   PA-RISC updates for 2.6.6
# 
# arch/parisc/kernel/processor.c
#   2004/05/10 02:18:37-07:00 willy@debian.org +2 -3
#   PA-RISC updates for 2.6.6
# 
# arch/parisc/kernel/process.c
#   2004/05/10 02:18:37-07:00 willy@debian.org +27 -0
#   PA-RISC updates for 2.6.6
# 
# arch/parisc/kernel/perf.c
#   2004/05/10 02:18:37-07:00 willy@debian.org +4 -2
#   PA-RISC updates for 2.6.6
# 
# arch/parisc/kernel/pci-dma.c
#   2004/05/10 02:18:37-07:00 willy@debian.org +4 -4
#   PA-RISC updates for 2.6.6
# 
# arch/parisc/kernel/pacache.S
#   2004/05/10 02:18:37-07:00 willy@debian.org +92 -4
#   PA-RISC updates for 2.6.6
# 
# arch/parisc/kernel/init_task.c
#   2004/05/10 02:18:37-07:00 willy@debian.org +5 -3
#   PA-RISC updates for 2.6.6
# 
# arch/parisc/kernel/head64.S
#   2004/05/10 02:18:37-07:00 willy@debian.org +14 -17
#   PA-RISC updates for 2.6.6
# 
# arch/parisc/kernel/head.S
#   2004/05/10 02:18:37-07:00 willy@debian.org +12 -10
#   PA-RISC updates for 2.6.6
# 
# arch/parisc/kernel/hardware.c
#   2004/05/10 02:18:37-07:00 willy@debian.org +4 -3
#   PA-RISC updates for 2.6.6
# 
# arch/parisc/kernel/firmware.c
#   2004/05/10 02:18:37-07:00 willy@debian.org +49 -13
#   PA-RISC updates for 2.6.6
# 
# arch/parisc/kernel/entry.S
#   2004/05/10 02:18:36-07:00 willy@debian.org +324 -563
#   PA-RISC updates for 2.6.6
# 
# arch/parisc/kernel/cache.c
#   2004/05/10 02:18:36-07:00 willy@debian.org +35 -26
#   PA-RISC updates for 2.6.6
# 
# arch/parisc/kernel/asm-offsets.c
#   2004/05/10 02:18:36-07:00 willy@debian.org +15 -0
#   PA-RISC updates for 2.6.6
# 
# arch/parisc/kernel/Makefile
#   2004/05/10 02:18:36-07:00 willy@debian.org +1 -1
#   PA-RISC updates for 2.6.6
# 
# arch/parisc/configs/c3000_defconfig
#   2004/05/10 02:18:36-07:00 willy@debian.org +18 -13
#   PA-RISC updates for 2.6.6
# 
# arch/parisc/configs/b180_defconfig
#   2004/05/10 02:18:36-07:00 willy@debian.org +16 -11
#   PA-RISC updates for 2.6.6
# 
# arch/parisc/configs/a500_defconfig
#   2004/05/10 02:18:36-07:00 willy@debian.org +20 -15
#   PA-RISC updates for 2.6.6
# 
# arch/parisc/configs/712_defconfig
#   2004/05/10 02:18:36-07:00 willy@debian.org +11 -11
#   PA-RISC updates for 2.6.6
# 
# arch/parisc/Makefile
#   2004/05/10 02:18:36-07:00 willy@debian.org +2 -1
#   PA-RISC updates for 2.6.6
# 
# arch/parisc/Kconfig
#   2004/05/10 02:18:36-07:00 willy@debian.org +25 -26
#   PA-RISC updates for 2.6.6
# 
# ChangeSet
#   2004/05/10 16:25:28-07:00 geert@linux-m68k.org 
#   [PATCH] M68k missing <linux/compiler.h>
#   
#   M68k: <asm/virtconvert.h> needs include <linux/compiler.h> for
#   __attribute_const__ (from Richard Zidlicky)
# 
# include/asm-m68k/virtconvert.h
#   2004/05/05 03:58:46-07:00 geert@linux-m68k.org +1 -0
#   M68k missing <linux/compiler.h>
# 
# ChangeSet
#   2004/05/10 16:25:18-07:00 geert@linux-m68k.org 
#   [PATCH] Sun3x dummycon
#   
#   Sun3x: Like most other platforms, Sun3x needs conswitchp set if
#   CONFIG_DUMMY_CONSOLE is defined (from Sam Creasey)
# 
# arch/m68k/sun3x/config.c
#   2004/04/30 02:42:04-07:00 geert@linux-m68k.org +4 -0
#   Sun3x dummycon
# 
# ChangeSet
#   2004/05/10 16:24:30-07:00 torvalds@ppc970.osdl.org 
#   Merge bk://gkernel.bkbits.net/libata-2.6
#   into ppc970.osdl.org:/home/torvalds/v2.6/linux
# 
# include/linux/pci_ids.h
#   2004/05/10 16:24:27-07:00 torvalds@ppc970.osdl.org +0 -0
#   Auto merged
# 
# drivers/scsi/Makefile
#   2004/05/10 16:24:27-07:00 torvalds@ppc970.osdl.org +0 -0
#   Auto merged
# 
# drivers/scsi/Kconfig
#   2004/05/10 16:24:27-07:00 torvalds@ppc970.osdl.org +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/05/10 16:13:18-07:00 viro@parcelfarce.linux.theplanet.co.uk 
#   [PATCH] ntfs cleanup
#   
#   	ntfs_fill_super() and ntfs_read_inode_mount() cleaned up.  Removed
#   the kludges around the first iget() on NTFS.  Instead of playing with
#   (re)setting ->s_op we have the MFT_FILE inode set up by explicit new_inode()/
#   set ->i_ino/insert_inode_hash()/call ntfs_read_inode_mount() directly.
#   That kills the need of second super_operations and it allows to return
#   error from ntfs_read_inode_mount() without resorting to ugly "poisoning"
#   tricks.
# 
# fs/ntfs/super.c
#   2004/05/09 23:16:23-07:00 viro@parcelfarce.linux.theplanet.co.uk +11 -34
#   ntfs cleanup
# 
# fs/ntfs/ntfs.h
#   2004/05/09 23:18:07-07:00 viro@parcelfarce.linux.theplanet.co.uk +0 -10
#   ntfs cleanup
# 
# fs/ntfs/inode.h
#   2004/05/09 22:41:09-07:00 viro@parcelfarce.linux.theplanet.co.uk +1 -1
#   ntfs cleanup
# 
# fs/ntfs/inode.c
#   2004/05/09 22:46:58-07:00 viro@parcelfarce.linux.theplanet.co.uk +8 -21
#   ntfs cleanup
# 
# ChangeSet
#   2004/05/10 16:10:46-07:00 torvalds@ppc970.osdl.org 
#   Merge bk://linux-scsi.bkbits.net/scsi-for-linus-2.6
#   into ppc970.osdl.org:/home/torvalds/v2.6/linux
# 
# include/linux/pci_ids.h
#   2004/05/10 16:10:43-07:00 torvalds@ppc970.osdl.org +0 -0
#   Auto merged
# 
# drivers/scsi/megaraid.c
#   2004/05/10 16:10:42-07:00 torvalds@ppc970.osdl.org +0 -0
#   Auto merged
# 
# MAINTAINERS
#   2004/05/10 16:10:42-07:00 torvalds@ppc970.osdl.org +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/05/10 23:56:17+01:00 rmk@flint.arm.linux.org.uk 
#   [SERIAL] Fix exit function pointer initialisers
#   
#   This wraps pointer initialisers to functions marked __devexit with
#   __devexit_p.
# 
# drivers/serial/8250_pci.c
#   2004/05/10 23:53:49+01:00 rmk@flint.arm.linux.org.uk +4 -4
#   exit function pointer initialisers should be marked with __devexit_p
# 
# ChangeSet
#   2004/05/10 23:53:05+01:00 aia21@cantab.net 
#   NTFS: Cleanup whitespace (trailing space removal, etc).
# 
# fs/ntfs/logfile.c
#   2004/05/10 23:52:19+01:00 aia21@cantab.net +1 -1
#   Cleanup whitespace (trailing space removal, etc).
# 
# fs/ntfs/time.h
#   2004/05/10 23:52:17+01:00 aia21@cantab.net +1 -1
#   Cleanup whitespace (trailing space removal, etc).
# 
# fs/ntfs/volume.h
#   2004/05/10 23:52:16+01:00 aia21@cantab.net +2 -2
#   Cleanup whitespace (trailing space removal, etc).
# 
# fs/ntfs/unistr.c
#   2004/05/10 23:52:14+01:00 aia21@cantab.net +10 -12
#   Cleanup whitespace (trailing space removal, etc).
# 
# fs/ntfs/types.h
#   2004/05/10 23:52:12+01:00 aia21@cantab.net +1 -1
#   Cleanup whitespace (trailing space removal, etc).
# 
# fs/ntfs/sysctl.h
#   2004/05/10 23:52:10+01:00 aia21@cantab.net +6 -7
#   Cleanup whitespace (trailing space removal, etc).
# 
# fs/ntfs/sysctl.c
#   2004/05/10 23:52:09+01:00 aia21@cantab.net +6 -7
#   Cleanup whitespace (trailing space removal, etc).
# 
# fs/ntfs/ntfs.h
#   2004/05/10 23:52:07+01:00 aia21@cantab.net +2 -3
#   Cleanup whitespace (trailing space removal, etc).
# 
# fs/ntfs/namei.c
#   2004/05/10 23:52:05+01:00 aia21@cantab.net +4 -4
#   Cleanup whitespace (trailing space removal, etc).
# 
# fs/ntfs/mst.c
#   2004/05/10 23:52:04+01:00 aia21@cantab.net +1 -1
#   Cleanup whitespace (trailing space removal, etc).
# 
# fs/ntfs/mft.h
#   2004/05/10 23:52:02+01:00 aia21@cantab.net +1 -1
#   Cleanup whitespace (trailing space removal, etc).
# 
# fs/ntfs/mft.c
#   2004/05/10 23:52:00+01:00 aia21@cantab.net +4 -5
#   Cleanup whitespace (trailing space removal, etc).
# 
# fs/ntfs/malloc.h
#   2004/05/10 23:51:59+01:00 aia21@cantab.net +1 -1
#   Cleanup whitespace (trailing space removal, etc).
# 
# fs/ntfs/layout.h
#   2004/05/10 23:51:57+01:00 aia21@cantab.net +0 -1
#   Cleanup whitespace (trailing space removal, etc).
# 
# fs/ntfs/file.c
#   2004/05/10 23:51:56+01:00 aia21@cantab.net +4 -5
#   Cleanup whitespace (trailing space removal, etc).
# 
# fs/ntfs/endian.h
#   2004/05/10 23:51:54+01:00 aia21@cantab.net +4 -5
#   Cleanup whitespace (trailing space removal, etc).
# 
# fs/ntfs/dir.h
#   2004/05/10 23:51:52+01:00 aia21@cantab.net +4 -5
#   Cleanup whitespace (trailing space removal, etc).
# 
# fs/ntfs/debug.h
#   2004/05/10 23:51:48+01:00 aia21@cantab.net +4 -5
#   Cleanup whitespace (trailing space removal, etc).
# 
# fs/ntfs/debug.c
#   2004/05/10 23:51:44+01:00 aia21@cantab.net +4 -5
#   Cleanup whitespace (trailing space removal, etc).
# 
# fs/ntfs/attrib.h
#   2004/05/10 23:51:19+01:00 aia21@cantab.net +4 -5
#   Cleanup whitespace (trailing space removal, etc).
# 
# fs/ntfs/Makefile
#   2004/05/10 23:51:09+01:00 aia21@cantab.net +1 -1
#   Update
# 
# fs/ntfs/ChangeLog
#   2004/05/10 23:50:55+01:00 aia21@cantab.net +4 -1
#   Update
# 
# ChangeSet
#   2004/05/10 17:29:29-05:00 jejb@mulgrave.(none) 
#   qla2100 fabric fixes
#   
#   From: "Andrew Vasquez" <andrew.vasquez@qlogic.com>
#   
#   Ok, well there aren't too many folks using an QLA2100 in a fabric
#   topology, if there were, they wouldn't have gotten very far in the
#   driver load sequence.  I've been able to scrape-up a QLA2100, 1Gig
#   switch, and an JBOD.  Upon loading the 8.00.00b12k driver, the
#   firmware successfully logs into the switch, the driver receives a
#   LOOP_UP event, but, the kernel panics due to NULL pointer dereference
#   while trying to perform an RFT_ID  -- the attached patch against
#   current scsi-misc-2.6 fixes that problem.
# 
# drivers/scsi/qla2xxx/qla_os.c
#   2004/05/10 17:29:10-05:00 jejb@mulgrave.(none) +2 -2
#   qla2100 fabric fixes
# 
# drivers/scsi/qla2xxx/qla_init.c
#   2004/05/10 17:29:10-05:00 jejb@mulgrave.(none) +0 -4
#   qla2100 fabric fixes
# 
# drivers/scsi/qla2xxx/qla_gs.c
#   2004/05/10 17:29:10-05:00 jejb@mulgrave.(none) +12 -60
#   qla2100 fabric fixes
# 
# drivers/scsi/qla2xxx/qla_def.h
#   2004/05/10 17:29:10-05:00 jejb@mulgrave.(none) +0 -5
#   qla2100 fabric fixes
# 
# ChangeSet
#   2004/05/10 16:40:22-05:00 James.Bottomley@steeleye.com 
#   [PATCH] fix LLD module refcounting in sr.c
#   
#   The patch to close all the open/close/hotplug races in sr left the
#   module refcounting broken so that the ULD housing the CD device now
#   can't be removed until the device itself is removed.
#   
#   This patch (structurally identical to the one for sd.c to perform the
#   same function) fixes the module refcounting.
# 
# drivers/scsi/sr.c
#   2004/05/10 11:12:15-05:00 James.Bottomley@steeleye.com +14 -11
#   fix LLD module refcounting in sr.c
# 
# ChangeSet
#   2004/05/10 14:25:52-07:00 akpm@osdl.org 
#   [PATCH] get_thread_area macro fixes
#   
#   From: Adam Lackorzynski <adam@os.inf.tu-dresden.de>
#   
#   one of the macros for get_thread_area extracts the wrong bit.  The
#   "32bit" field is in bit 22, not 23 (as can be seen in desc.h). 
#   
#   [ Fix ia64/x86-64 too, while we're at it. Linus ]
# 
# arch/x86_64/ia32/tls32.c
#   2004/05/10 07:22:43-07:00 akpm@osdl.org +1 -1
#   get_thread_area macro fixes
# 
# arch/ia64/ia32/sys_ia32.c
#   2004/05/10 07:22:43-07:00 akpm@osdl.org +1 -1
#   get_thread_area macro fixes
# 
# arch/i386/kernel/ptrace.c
#   2004/05/10 07:22:43-07:00 akpm@osdl.org +1 -1
#   get_thread_area macro fixes
# 
# arch/i386/kernel/process.c
#   2004/05/10 07:22:43-07:00 akpm@osdl.org +1 -1
#   get_thread_area macro fixes
# 
# ChangeSet
#   2004/05/10 14:25:41-07:00 akpm@osdl.org 
#   [PATCH] Add SMT setup for domain scheduler on x86-64
#   
#   From: Andi Kleen <ak@muc.de>
#   
#   Set up SMT for the domain scheduler on x86-64.  This way the scheduling
#   works better on HyperThreading aware systems; in particular it will use
#   both physical CPUs before sharing two virtual CPUs on the same package. 
#   This improves performance considerably in some cases.
#   
#   Based on the i386 code and a previous patch from Suresh B. Siddha.
# 
# arch/x86_64/kernel/domain.c
#   2004/05/10 03:25:59-07:00 akpm@osdl.org +89 -0
#   Add SMT setup for domain scheduler on x86-64
# 
# include/asm-x86_64/processor.h
#   2004/05/10 03:25:59-07:00 akpm@osdl.org +5 -0
#   Add SMT setup for domain scheduler on x86-64
# 
# arch/x86_64/kernel/domain.c
#   2004/05/10 03:25:59-07:00 akpm@osdl.org +0 -0
#   BitKeeper file /home/torvalds/v2.6/linux/arch/x86_64/kernel/domain.c
# 
# arch/x86_64/kernel/Makefile
#   2004/05/10 03:25:59-07:00 akpm@osdl.org +1 -0
#   Add SMT setup for domain scheduler on x86-64
# 
# arch/x86_64/Kconfig
#   2004/05/10 03:25:59-07:00 akpm@osdl.org +10 -0
#   Add SMT setup for domain scheduler on x86-64
# 
# ChangeSet
#   2004/05/10 14:25:30-07:00 akpm@osdl.org 
#   [PATCH] x86-64: convert sibling map to masks
#   
#   From: Andi Kleen <ak@muc.de>
#   
#   From: Suresh B. Siddha
#   
#   Convert sibling map on x86-64 to cpumasks.
#   
#   This is needed for the SMT patches.
# 
# include/asm-x86_64/smp.h
#   2004/05/10 03:25:56-07:00 akpm@osdl.org +1 -1
#   x86-64: convert sibling map to masks
# 
# arch/x86_64/kernel/smpboot.c
#   2004/05/10 03:25:56-07:00 akpm@osdl.org +23 -18
#   x86-64: convert sibling map to masks
# 
# ChangeSet
#   2004/05/10 14:14:39-07:00 torvalds@ppc970.osdl.org 
#   Remove intermezzo, per instructions from Peter Braam.
# 
# BitKeeper/deleted/.del-vfs.c~165e22e6a7ba108
#   2004/05/10 14:13:31-07:00 torvalds@ppc970.osdl.org +0 -0
#   Delete: fs/intermezzo/vfs.c
# 
# BitKeeper/deleted/.del-upcall.c~976ba6ddc70d82d0
#   2004/05/10 14:13:31-07:00 torvalds@ppc970.osdl.org +0 -0
#   Delete: fs/intermezzo/upcall.c
# 
# BitKeeper/deleted/.del-sysctl.c~e29fbc5ba9b64254
#   2004/05/10 14:13:31-07:00 torvalds@ppc970.osdl.org +0 -0
#   Delete: fs/intermezzo/sysctl.c
# 
# BitKeeper/deleted/.del-super.c~326162ada7873a62
#   2004/05/10 14:13:31-07:00 torvalds@ppc970.osdl.org +0 -0
#   Delete: fs/intermezzo/super.c
# 
# BitKeeper/deleted/.del-replicator.c~8d717c6a8a2aed8c
#   2004/05/10 14:13:30-07:00 torvalds@ppc970.osdl.org +0 -0
#   Delete: fs/intermezzo/replicator.c
# 
# BitKeeper/deleted/.del-psdev.c~20211a738de20311
#   2004/05/10 14:13:30-07:00 torvalds@ppc970.osdl.org +0 -0
#   Delete: fs/intermezzo/psdev.c
# 
# BitKeeper/deleted/.del-presto.c~ca1c8539f09f58b3
#   2004/05/10 14:13:30-07:00 torvalds@ppc970.osdl.org +0 -0
#   Delete: fs/intermezzo/presto.c
# 
# BitKeeper/deleted/.del-methods.c~2b904fa1331fb6b1
#   2004/05/10 14:13:30-07:00 torvalds@ppc970.osdl.org +0 -0
#   Delete: fs/intermezzo/methods.c
# 
# BitKeeper/deleted/.del-kml_utils.c~f6480e1c3639483b
#   2004/05/10 14:13:30-07:00 torvalds@ppc970.osdl.org +0 -0
#   Delete: fs/intermezzo/kml_utils.c
# 
# BitKeeper/deleted/.del-kml_unpack.c~a6a712f450c0a5c9
#   2004/05/10 14:13:30-07:00 torvalds@ppc970.osdl.org +0 -0
#   Delete: fs/intermezzo/kml_unpack.c
# 
# BitKeeper/deleted/.del-kml_setup.c~a45e484b43988906
#   2004/05/10 14:13:30-07:00 torvalds@ppc970.osdl.org +0 -0
#   Delete: fs/intermezzo/kml_setup.c
# 
# BitKeeper/deleted/.del-kml_reint.c~baf57ddfb16b6a9
#   2004/05/10 14:13:30-07:00 torvalds@ppc970.osdl.org +0 -0
#   Delete: fs/intermezzo/kml_reint.c
# 
# BitKeeper/deleted/.del-kml_decode.c~6b7df6c56b9af923
#   2004/05/10 14:13:30-07:00 torvalds@ppc970.osdl.org +0 -0
#   Delete: fs/intermezzo/kml_decode.c
# 
# BitKeeper/deleted/.del-kml.c~b65b8d24cc0c4ffd
#   2004/05/10 14:13:30-07:00 torvalds@ppc970.osdl.org +0 -0
#   Delete: fs/intermezzo/kml.c
# 
# BitKeeper/deleted/.del-journal_xfs.c~8c292cee9b94d964
#   2004/05/10 14:13:30-07:00 torvalds@ppc970.osdl.org +0 -0
#   Delete: fs/intermezzo/journal_xfs.c
# 
# BitKeeper/deleted/.del-journal_tmpfs.c~4b578b9c4f5d5885
#   2004/05/10 14:13:30-07:00 torvalds@ppc970.osdl.org +0 -0
#   Delete: fs/intermezzo/journal_tmpfs.c
# 
# BitKeeper/deleted/.del-journal_reiserfs.c~266418f57226fc78
#   2004/05/10 14:13:30-07:00 torvalds@ppc970.osdl.org +0 -0
#   Delete: fs/intermezzo/journal_reiserfs.c
# 
# BitKeeper/deleted/.del-journal_obdfs.c~9d17c618797703ec
#   2004/05/10 14:13:30-07:00 torvalds@ppc970.osdl.org +0 -0
#   Delete: fs/intermezzo/journal_obdfs.c
# 
# BitKeeper/deleted/.del-journal_ext3.c~245345523fcb42b0
#   2004/05/10 14:13:30-07:00 torvalds@ppc970.osdl.org +0 -0
#   Delete: fs/intermezzo/journal_ext3.c
# 
# BitKeeper/deleted/.del-journal_ext2.c~b3cf997587046f60
#   2004/05/10 14:13:30-07:00 torvalds@ppc970.osdl.org +0 -0
#   Delete: fs/intermezzo/journal_ext2.c
# 
# BitKeeper/deleted/.del-journal.c~38743a9cf991b967
#   2004/05/10 14:13:29-07:00 torvalds@ppc970.osdl.org +0 -0
#   Delete: fs/intermezzo/journal.c
# 
# BitKeeper/deleted/.del-intermezzo_upcall.h~a9a4d5322388a64c
#   2004/05/10 14:13:29-07:00 torvalds@ppc970.osdl.org +0 -0
#   Delete: fs/intermezzo/intermezzo_upcall.h
# 
# BitKeeper/deleted/.del-intermezzo_psdev.h~cc557782bdb799b6
#   2004/05/10 14:13:29-07:00 torvalds@ppc970.osdl.org +0 -0
#   Delete: fs/intermezzo/intermezzo_psdev.h
# 
# BitKeeper/deleted/.del-intermezzo_lib.h~30f1b0a71cc1ecfa
#   2004/05/10 14:13:29-07:00 torvalds@ppc970.osdl.org +0 -0
#   Delete: fs/intermezzo/intermezzo_lib.h
# 
# BitKeeper/deleted/.del-intermezzo_kml.h~5eeff6672408808a
#   2004/05/10 14:13:29-07:00 torvalds@ppc970.osdl.org +0 -0
#   Delete: fs/intermezzo/intermezzo_kml.h
# 
# BitKeeper/deleted/.del-intermezzo_journal.h~cf9d1e68a72eb656
#   2004/05/10 14:13:29-07:00 torvalds@ppc970.osdl.org +0 -0
#   Delete: fs/intermezzo/intermezzo_journal.h
# 
# BitKeeper/deleted/.del-intermezzo_idl.h~c3ad3183cc030538
#   2004/05/10 14:13:29-07:00 torvalds@ppc970.osdl.org +0 -0
#   Delete: fs/intermezzo/intermezzo_idl.h
# 
# BitKeeper/deleted/.del-intermezzo_fs.h~7e6e6586d37758c4
#   2004/05/10 14:13:29-07:00 torvalds@ppc970.osdl.org +0 -0
#   Delete: fs/intermezzo/intermezzo_fs.h
# 
# BitKeeper/deleted/.del-inode.c~db7d289a82a13d69
#   2004/05/10 14:13:29-07:00 torvalds@ppc970.osdl.org +0 -0
#   Delete: fs/intermezzo/inode.c
# 
# BitKeeper/deleted/.del-fileset.c~90d053ee7dff80c9
#   2004/05/10 14:13:29-07:00 torvalds@ppc970.osdl.org +0 -0
#   Delete: fs/intermezzo/fileset.c
# 
# BitKeeper/deleted/.del-file.c~db7b29cfd4569e4d
#   2004/05/10 14:13:29-07:00 torvalds@ppc970.osdl.org +0 -0
#   Delete: fs/intermezzo/file.c
# 
# BitKeeper/deleted/.del-ext_attr.c~9eb3e1fa34f83cf3
#   2004/05/10 14:13:29-07:00 torvalds@ppc970.osdl.org +0 -0
#   Delete: fs/intermezzo/ext_attr.c
# 
# BitKeeper/deleted/.del-dir.c~b00f4a9b315238c
#   2004/05/10 14:13:29-07:00 torvalds@ppc970.osdl.org +0 -0
#   Delete: fs/intermezzo/dir.c
# 
# BitKeeper/deleted/.del-dcache.c~a257396396f1bff8
#   2004/05/10 14:13:29-07:00 torvalds@ppc970.osdl.org +0 -0
#   Delete: fs/intermezzo/dcache.c
# 
# BitKeeper/deleted/.del-cache.c~3ffbeca15415a312
#   2004/05/10 14:13:29-07:00 torvalds@ppc970.osdl.org +0 -0
#   Delete: fs/intermezzo/cache.c
# 
# BitKeeper/deleted/.del-Makefile~f539ea491787e98b
#   2004/05/10 14:13:29-07:00 torvalds@ppc970.osdl.org +0 -0
#   Delete: fs/intermezzo/Makefile
# 
# ChangeSet
#   2004/05/10 14:12:21-07:00 akpm@osdl.org 
#   [PATCH] Fix __down Tainting Kernel with CONFIG_MODVERSIONS=y
#   
#   From: Rusty Russell <rusty@rustcorp.com.au>
#   
#   PowerPC64 ABI has ".funcname" (the actual function) and "funcname" (the
#   function descriptor) and we strip off the dots in "dedotify" called from
#   module_frob_arch_sections().  We need to also de-dotify the corresponding
#   names in the __version section.
#   
#   Actually has nothing to do with __down, it's just that we only print the
#   first symbol whose version is missing.
# 
# arch/ppc64/kernel/module.c
#   2004/05/10 04:25:58-07:00 akpm@osdl.org +13 -0
#   Fix __down Tainting Kernel with CONFIG_MODVERSIONS=y
# 
# ChangeSet
#   2004/05/10 14:12:10-07:00 akpm@osdl.org 
#   [PATCH] PPC termio fix
#   
#   From: Paul Mackerras <paulus@samba.org>
#   
#   It turns out that we are not handling the TABDLY bits of the termios
#   c_oflag field correctly on PPC, PPC64 and Alpha.  These three architectures
#   have a value for XTABS that is different from the TAB3 value.  POSIX
#   specifies that setting the TABDLY field to TAB3 should result in tabs being
#   expanded to spaces.  In n_tty.c:opost() we check for O_TABDLY(tty) ==
#   XTABS, which is fine on most architectures because they have XTABS == TAB3.
#   
#   I think the right thing to do is just to change the definition of XTABS to
#   be the same as TAB3 on these architectures.  The patch below does this for
#   PPC and PPC64 (and I suggest the Alpha maintainer should do the same).  At
#   the moment, applications using either the XTABS or TAB3 values won't get
#   the expected behaviour.  With this patch, apps that use TAB3 will get the
#   expected behaviour.  Apps that use XTABS will need to be recompiled (but
#   note that the POSIX-specified name to use is TAB3 not XTABS).
# 
# include/asm-ppc64/termbits.h
#   2004/05/10 04:25:57-07:00 akpm@osdl.org +1 -1
#   PPC termio fix
# 
# include/asm-ppc/termbits.h
#   2004/05/10 04:25:57-07:00 akpm@osdl.org +1 -1
#   PPC termio fix
# 
# ChangeSet
#   2004/05/10 14:12:00-07:00 akpm@osdl.org 
#   [PATCH] remove intermezzo
#   
#   Peter Braam said:
#   
#       I would just like to say that I have no difficulties with intermezzo
#       being rm -rf'd.  There are probably only a handful of users.  
#   
#       In the past 4 years nobody has supported InterMezzo sufficiently for
#       it to become successful.  I have been fortunate to get really good support
#       for the Lustre project.  So I have focussed on that.  Lustre 1.X has
#       become really solid.
#   
#       The disconnected operation, caching and mirroring functionality of
#       InterMezzo will become available in Lustre as a new feature in version 2. 
#   
#        So I see no point in keeping InterMezzo if it is a nuisance. 
#   
#   
#   The patch removes the references to intermezzo.  Please do a `bk rm' of
#   fs/intermezzo.
# 
# fs/Makefile
#   2004/05/10 04:25:57-07:00 akpm@osdl.org +0 -1
#   remove intermezzo
# 
# fs/Kconfig
#   2004/05/10 04:25:57-07:00 akpm@osdl.org +0 -16
#   remove intermezzo
# 
# ChangeSet
#   2004/05/10 14:11:49-07:00 akpm@osdl.org 
#   [PATCH] make tags for selinux
#   
#   From: Olaf Hering <olh@suse.de>
#   
#   make tags skips security/selinux/include because of find .  -name include
#   -prune This patch does just add it later.  No idea if it can be done
#   better.
# 
# Makefile
#   2004/05/10 04:25:57-07:00 akpm@osdl.org +2 -0
#   make tags for selinux
# 
# ChangeSet
#   2004/05/10 14:11:38-07:00 akpm@osdl.org 
#   [PATCH] fix some typos in sound docs
#   
#   From: Christoph Hellwig <hch@lst.de>
#   
#   (partially from the debian kernel tree)
# 
# Documentation/sound/oss/VIBRA16
#   2004/05/10 04:25:57-07:00 akpm@osdl.org +5 -5
#   fix some typos in sound docs
# 
# Documentation/sound/oss/OPL3-SA
#   2004/05/10 04:25:57-07:00 akpm@osdl.org +1 -1
#   fix some typos in sound docs
# 
# ChangeSet
#   2004/05/10 14:11:28-07:00 akpm@osdl.org 
#   [PATCH] telephony/ixj.h: remove kernel 2.2 #ifdef's
#   
#   From: Adrian Bunk <bunk@fs.tum.de>
#   
#   The patch below removes two #ifdef's for kernel 2.2 from
#   linux-2.6.2-mm1/drivers/telephony/ixj.h
# 
# drivers/telephony/ixj.h
#   2004/05/10 04:25:56-07:00 akpm@osdl.org +0 -9
#   telephony/ixj.h: remove kernel 2.2 #ifdef's
# 
# ChangeSet
#   2004/05/10 14:11:17-07:00 akpm@osdl.org 
#   [PATCH] remove kernel 2.2 code from drivers/net/hamradio/dmascc.c
#   
#   From: Adrian Bunk <bunk@fs.tum.de>
#   
#   The patch below removes some #ifdef'd kernel 2.2 code from
#   drivers/net/hamradio/dmascc.c.
# 
# drivers/net/hamradio/dmascc.c
#   2004/05/10 04:25:56-07:00 akpm@osdl.org +0 -18
#   remove kernel 2.2 code from drivers/net/hamradio/dmascc.c
# 
# ChangeSet
#   2004/05/10 14:11:07-07:00 akpm@osdl.org 
#   [PATCH] Crystal cs4235 mixer fix
#   
#   From: Joseph Parmelee <jparmele@wildbear.com>
#   
#   Fixes improper setup of the mixer on Crystal soundcards with the CS4235
#   chip.
# 
# sound/oss/ad1848.c
#   2004/05/10 04:25:56-07:00 akpm@osdl.org +1 -0
#   Crystal cs4235 mixer fix
# 
# ChangeSet
#   2004/05/10 14:10:56-07:00 akpm@osdl.org 
#   [PATCH] export con_set_default_unimap()
#   
#   fbcon needs this symbol.
# 
# drivers/char/consolemap.c
#   2004/05/10 04:25:56-07:00 akpm@osdl.org +1 -0
#   export con_set_default_unimap()
# 
# ChangeSet
#   2004/05/10 14:10:46-07:00 akpm@osdl.org 
#   [PATCH] Make usermodehelper_init() use core_initcall()
#   
#   We may as well make usermodehelper_init() core_initcall as well, to make
#   sure its services are avaialble to all the other initcall levels.
# 
# kernel/kmod.c
#   2004/05/10 04:25:56-07:00 akpm@osdl.org +1 -1
#   Make usermodehelper_init() use core_initcall()
# 
# ChangeSet
#   2004/05/10 14:10:35-07:00 akpm@osdl.org 
#   [PATCH] use core_initcall for binfmt initialisation
#   
#   We need to register the binfmts earlier, so normal initcalls can successfully
#   run call_usermodehelper() to execute things.
# 
# fs/binfmt_som.c
#   2004/05/10 04:25:55-07:00 akpm@osdl.org +1 -1
#   use core_initcall for binfmt initialisation
# 
# fs/binfmt_script.c
#   2004/05/10 04:25:55-07:00 akpm@osdl.org +2 -2
#   use core_initcall for binfmt initialisation
# 
# fs/binfmt_misc.c
#   2004/05/10 04:25:55-07:00 akpm@osdl.org +1 -1
#   use core_initcall for binfmt initialisation
# 
# fs/binfmt_flat.c
#   2004/05/10 04:25:55-07:00 akpm@osdl.org +1 -1
#   use core_initcall for binfmt initialisation
# 
# fs/binfmt_em86.c
#   2004/05/10 04:25:55-07:00 akpm@osdl.org +2 -2
#   use core_initcall for binfmt initialisation
# 
# fs/binfmt_elf.c
#   2004/05/10 04:25:55-07:00 akpm@osdl.org +2 -2
#   use core_initcall for binfmt initialisation
# 
# fs/binfmt_aout.c
#   2004/05/10 04:25:55-07:00 akpm@osdl.org +1 -1
#   use core_initcall for binfmt initialisation
# 
# ChangeSet
#   2004/05/10 14:10:24-07:00 akpm@osdl.org 
#   [PATCH] minor RCU optimization
#   
#   From: Stephen Hemminger <shemminger@osdl.org>
#   
#   Minor tweak to rcu, use __list_splice instead of list_splice because the
#     list has already been checked for empty.
# 
# kernel/rcupdate.c
#   2004/05/10 04:25:55-07:00 akpm@osdl.org +2 -2
#   minor RCU optimization
# 
# ChangeSet
#   2004/05/10 14:10:14-07:00 akpm@osdl.org 
#   [PATCH] remove MOD_INC_USE_COUNT usage in arch/um/drivers/harddog_kern.c
#   
#   From: Christoph Hellwig <hch@lst.de>
#   
#   ->open already has a reference so use __module_get.  The file has no
#   maintainer noted in it, all credits are from the driver it's copied from.
# 
# arch/um/drivers/harddog_kern.c
#   2004/05/10 04:25:55-07:00 akpm@osdl.org +1 -1
#   remove MOD_INC_USE_COUNT usage in arch/um/drivers/harddog_kern.c
# 
# ChangeSet
#   2004/05/10 14:10:03-07:00 akpm@osdl.org 
#   [PATCH] fix MOD_INC_USE_COUNT usage in mtd
#   
#   From: Christoph Hellwig <hch@lst.de>
#   
#   mtd driver need to get another reference if ->probe succeeds (strange design
#   if you ask me, but what the heck..), and while most drivers have been switched
#   to __module_get already two are still missing.
# 
# drivers/mtd/chips/sharp.c
#   2004/05/10 04:25:55-07:00 akpm@osdl.org +1 -1
#   fix MOD_INC_USE_COUNT usage in mtd
# 
# drivers/mtd/chips/amd_flash.c
#   2004/05/10 04:25:55-07:00 akpm@osdl.org +1 -1
#   fix MOD_INC_USE_COUNT usage in mtd
# 
# ChangeSet
#   2004/05/10 14:09:53-07:00 akpm@osdl.org 
#   [PATCH] drivers/video/* MOD_INC_USE_COUNT fixes
#   
#   From: Christoph Hellwig <hch@lst.de>
#   
#   A bunch of framebuffer drivers use MOD_INC_USE_COUNT to prevent themselves
#   from unloading completely - but we have a much easier way to do so, that is
#   simply removing the module_exit/cleanup_module handler.
# 
# drivers/video/virgefb.c
#   2004/05/10 04:25:55-07:00 akpm@osdl.org +0 -9
#   drivers/video/* MOD_INC_USE_COUNT fixes
# 
# drivers/video/sa1100fb.c
#   2004/05/10 04:25:55-07:00 akpm@osdl.org +0 -2
#   drivers/video/* MOD_INC_USE_COUNT fixes
# 
# drivers/video/retz3fb.c
#   2004/05/10 04:25:55-07:00 akpm@osdl.org +0 -12
#   drivers/video/* MOD_INC_USE_COUNT fixes
# 
# drivers/video/cyberfb.c
#   2004/05/10 04:25:55-07:00 akpm@osdl.org +0 -9
#   drivers/video/* MOD_INC_USE_COUNT fixes
# 
# drivers/video/atafb.c
#   2004/05/10 04:25:55-07:00 akpm@osdl.org +0 -11
#   drivers/video/* MOD_INC_USE_COUNT fixes
# 
# ChangeSet
#   2004/05/10 14:09:42-07:00 akpm@osdl.org 
#   [PATCH] fix MOD_{INC,DEC}_USE_COUNT gunk in arch/um/drivers/net_kern.c
#   
#   From: Christoph Hellwig <hch@lst.de>
#   
#   Well, UML is pretty out of date in mainline, but I'd like to squash the last
#   users of said beasts rather sooner than later.
# 
# arch/um/drivers/net_kern.c
#   2004/05/10 04:25:54-07:00 akpm@osdl.org +0 -2
#   fix MOD_{INC,DEC}_USE_COUNT gunk in arch/um/drivers/net_kern.c
# 
# ChangeSet
#   2004/05/10 14:09:31-07:00 akpm@osdl.org 
#   [PATCH] kill MOD_{INC,DEC}_USE_COUNT gunk in arch/cris/arch-v10/drivers/pcf8563.c
#   
#   From: Christoph Hellwig <hch@lst.de>
#   
#   Driver already sets fops->owner so the open/close methods are entirely
#   superflous.
# 
# arch/cris/arch-v10/drivers/pcf8563.c
#   2004/05/10 04:25:54-07:00 akpm@osdl.org +0 -18
#   kill MOD_{INC,DEC}_USE_COUNT gunk in arch/cris/arch-v10/drivers/pcf8563.c
# 
# ChangeSet
#   2004/05/10 14:09:21-07:00 akpm@osdl.org 
#   [PATCH] kill useless MOD_{INC,DEC}_USE_COUNT in sound/oss/msnd.c
#   
#   From: Christoph Hellwig <hch@lst.de>
#   
#   Callers are exported register/unregister handlers so the module is locked in
#   core by users of said exports.
# 
# sound/oss/msnd.c
#   2004/05/10 04:25:54-07:00 akpm@osdl.org +0 -5
#   kill useless MOD_{INC,DEC}_USE_COUNT in sound/oss/msnd.c
# 
# ChangeSet
#   2004/05/10 14:09:10-07:00 akpm@osdl.org 
#   [PATCH] cpqarray update for 2.6
#   
#   From: <mikem@beardog.cca.cpqcorp.net>
#   
#   This patch fixes 2 minor issues that break our Array Configuration utility.
#    my_io was changed to a pointer so the & had to removed when using it with
#   copy_to_user().
#   
#   Sometime in 2.5 SG_MAX got changed to 31.  Maybe to copy cciss?  Now I'm
#   changing it back to 32 so our app can work.
# 
# drivers/block/ida_cmd.h
#   2004/05/10 04:25:54-07:00 akpm@osdl.org +1 -1
#   cpqarray update for 2.6
# 
# drivers/block/cpqarray.c
#   2004/05/10 04:25:54-07:00 akpm@osdl.org +1 -1
#   cpqarray update for 2.6
# 
# ChangeSet
#   2004/05/10 14:09:00-07:00 akpm@osdl.org 
#   [PATCH] Add sysctl to define a hugetlb-capable group
#   
#   From: "Chen, Kenneth W" <kenneth.w.chen@intel.com>,
#         "Seth, Rohit" <rohit.seth@intel.com>
#   
#   This patch addresses the longstanding problem wherein Oracle needs
#   CAP_IPC_LOCK to allocate SHM_HUGETLB shm memory, but people don't want to run
#   Oracle as root, and capabilties are busted.
#   
#   Various ideas with rlimits didn't work out, mainly because these objects live
#   beyond the lifetime of the user processes which establish them.
#   
#   What we do is to create root-writeable /proc/sys/vm/hugetlb_shm_group which
#   specifies a single group ID.  Users who belong to that group may allocate
#   hugepages for SHM_HUGETLB shm segments.
#   
#   So the sysadmin will greate a new group, say `hugepageusers', will add the
#   oracle user to that group and will write that group's ID into
#   /proc/sys/vm/hugetlb_shm_group.
# 
# kernel/sysctl.c
#   2004/05/10 04:25:53-07:00 akpm@osdl.org +8 -0
#   Add sysctl to define a hugetlb-capable group
# 
# include/linux/sysctl.h
#   2004/05/10 04:25:53-07:00 akpm@osdl.org +1 -0
#   Add sysctl to define a hugetlb-capable group
# 
# include/linux/hugetlb.h
#   2004/05/10 04:25:53-07:00 akpm@osdl.org +1 -0
#   Add sysctl to define a hugetlb-capable group
# 
# fs/hugetlbfs/inode.c
#   2004/05/10 04:25:53-07:00 akpm@osdl.org +9 -1
#   Add sysctl to define a hugetlb-capable group
# 
# Documentation/vm/hugetlbpage.txt
#   2004/05/10 04:25:53-07:00 akpm@osdl.org +6 -3
#   Add sysctl to define a hugetlb-capable group
# 
# Documentation/filesystems/proc.txt
#   2004/05/10 04:25:53-07:00 akpm@osdl.org +8 -7
#   Add sysctl to define a hugetlb-capable group
# 
# ChangeSet
#   2004/05/10 14:08:49-07:00 akpm@osdl.org 
#   [PATCH] hugepage: fix add_to_page_cache() error handling
#   
#   From: David Gibson <david@gibson.dropbear.id.au>
#   
#   add_to_page_cache() locks the given page if and only if it suceeds.  The
#   hugepage code (every arch), however, does an unlock_page() after
#   add_to_page_cache() before checking the return code, which could trip the
#   BUG() in unlock_page() if add_to_page_cache() failed.
#   
#   In practice we've never hit this bug, because the only ways
#   add_to_page_cache() can fail are when we fail to allocate a radix tree node
#   (very rare), or when there is already a page at that offset in the radix
#   tree, which never happens during prefault, obviously.  We should probably
#   fix it anyway, though.
#   
#   The analagous bug in some of the patches floating about to
#   demand-allocation of hugepages is more of a problem, because multiple
#   processes can race to instantiate a particular page in the radix tree -
#   that's been hit at least once (which is how I found this).
# 
# arch/sparc64/mm/hugetlbpage.c
#   2004/05/10 04:25:53-07:00 akpm@osdl.org +3 -2
#   hugepage: fix add_to_page_cache() error handling
# 
# arch/sh/mm/hugetlbpage.c
#   2004/05/10 04:25:53-07:00 akpm@osdl.org +3 -2
#   hugepage: fix add_to_page_cache() error handling
# 
# arch/ppc64/mm/hugetlbpage.c
#   2004/05/10 04:25:53-07:00 akpm@osdl.org +3 -2
#   hugepage: fix add_to_page_cache() error handling
# 
# arch/ia64/mm/hugetlbpage.c
#   2004/05/10 04:25:53-07:00 akpm@osdl.org +3 -2
#   hugepage: fix add_to_page_cache() error handling
# 
# arch/i386/mm/hugetlbpage.c
#   2004/05/10 04:25:53-07:00 akpm@osdl.org +3 -2
#   hugepage: fix add_to_page_cache() error handling
# 
# ChangeSet
#   2004/05/10 14:08:38-07:00 akpm@osdl.org 
#   [PATCH] fix wrong var used in hotplug/shpchp_ctrl.c.
#   
#   From: "Luiz Fernando N. Capitulino" <lcapitulino@prefeitura.sp.gov.br>
#   
#   Zhenmin's checker tool <zli4@cs.uiuc.edu> detected this:
#   
#    9. /drivers/pci/hotplug/shpchp_ctrl.c, Line 1575:
#    err("%s: Failed to disable slot, error code(%d)\n", __FUNCTION__, rc);
#   
#    Maybe change to:
#    err("%s: Failed to disable slot, error code(%d)\n", __FUNCTION__,
#    retval);
#   
#   I think it is right because at line 1564, the slot is turned off, and in
#   this line (1575) is checked the status to see if we got an error; if so,
#   the error number is shown.  This number is in 'retval', not in 'rc' ('rc'
#   does have the return of configure_new_device()).
# 
# drivers/pci/hotplug/shpchp_ctrl.c
#   2004/05/10 04:25:53-07:00 akpm@osdl.org +1 -1
#   fix wrong var used in hotplug/shpchp_ctrl.c.
# 
# ChangeSet
#   2004/05/10 14:08:27-07:00 akpm@osdl.org 
#   [PATCH] Lindent arch/i386/kernel/cpuid.c
#   
#   From: Hanna Linder <hannal@us.ibm.com>
#   
#   Per Greg's request this is a patch of having run Lindent on cpuid.c.  The
#   tabs were not the right number of spaces before.  I have verified it still
#   compiles and boots with this "change".
# 
# arch/i386/kernel/cpuid.c
#   2004/05/10 04:25:53-07:00 akpm@osdl.org +86 -86
#   Lindent arch/i386/kernel/cpuid.c
# 
# ChangeSet
#   2004/05/10 14:08:17-07:00 akpm@osdl.org 
#   [PATCH] pcmcia/tcic.c warning fix.
#   
#   From: "Luiz Fernando N. Capitulino" <lcapitulino@prefeitura.sp.gov.br>
#   
#   drivers/pcmcia/tcic.c:63: warning: `version' defined but not used
# 
# drivers/pcmcia/tcic.c
#   2004/05/10 04:25:52-07:00 akpm@osdl.org +1 -1
#   pcmcia/tcic.c warning fix.
# 
# ChangeSet
#   2004/05/10 14:08:06-07:00 akpm@osdl.org 
#   [PATCH] as-iosched barrier fix
#   
#   From: Jens Axboe <axboe@suse.de>
#   
#   AS does not correctly account requests inserted with INSERT_FRONT or
#   INSERT_BACK, barriers for example.  In other elevators, requeued requests also
#   go through the insert path, but AS has its own requeue handler which means the
#   code has never been tested.
#   
#   Also, make inserting a barrier with INSERT_SORT imply INSERT_BACK, which is
#   the logical behaviour.  Previously such insertions weren't rigorously defined.
# 
# drivers/block/elevator.c
#   2004/05/10 04:25:52-07:00 akpm@osdl.org +7 -0
#   as-iosched barrier fix
# 
# drivers/block/as-iosched.c
#   2004/05/10 04:25:52-07:00 akpm@osdl.org +20 -4
#   as-iosched barrier fix
# 
# ChangeSet
#   2004/05/10 14:07:55-07:00 akpm@osdl.org 
#   [PATCH] Fix race on tty close
#   
#   From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
#   
#   ldisc close can race with the flush_to_ldisc workqueue.
#   
#   This patch fixes it by killing the workqueue first.
# 
# drivers/char/tty_io.c
#   2004/05/10 04:25:52-07:00 akpm@osdl.org +12 -12
#   Fix race on tty close
# 
# ChangeSet
#   2004/05/10 14:07:45-07:00 akpm@osdl.org 
#   [PATCH] SElinux interface for reporting size of printk buffer
#   
#   From: Olaf Dabrunz <od@suse.de>
#   
#   Add the necessary hooks so that a SELinux-enabled kernel will allow the new
#   "report the size of the printk buffer" query to work.
# 
# security/selinux/hooks.c
#   2004/05/10 04:25:52-07:00 akpm@osdl.org +1 -0
#   SElinux interface for reporting size of printk buffer
# 
# security/dummy.c
#   2004/05/10 04:25:52-07:00 akpm@osdl.org +1 -1
#   SElinux interface for reporting size of printk buffer
# 
# security/commoncap.c
#   2004/05/10 04:25:52-07:00 akpm@osdl.org +1 -1
#   SElinux interface for reporting size of printk buffer
# 
# ChangeSet
#   2004/05/10 14:07:34-07:00 akpm@osdl.org 
#   [PATCH] blk: cache queue_congestion_on/off_threshold values
#   
#   From: "Chen, Kenneth W" <kenneth.w.chen@intel.com>
#   
#   It's kind of redundant that queue_congestion_on/off_threshold gets
#   calculated on every I/O and they produce the same number over and over
#   again unless q->nr_requests gets changed (which is probably a very rare
#   event).  We can cache those values in the request_queue structure.
# 
# include/linux/blkdev.h
#   2004/05/10 04:25:51-07:00 akpm@osdl.org +2 -0
#   blk: cache queue_congestion_on/off_threshold values
# 
# drivers/block/ll_rw_blk.c
#   2004/05/10 04:25:51-07:00 akpm@osdl.org +16 -13
#   blk: cache queue_congestion_on/off_threshold values
# 
# ChangeSet
#   2004/05/10 14:07:23-07:00 akpm@osdl.org 
#   [PATCH] swsusp documentation updates
#   
#   From: Pavel Machek <pavel@ucw.cz>
# 
# Documentation/power/swsusp.txt
#   2004/05/10 04:25:51-07:00 akpm@osdl.org +56 -5
#   swsusp documentation updates
# 
# ChangeSet
#   2004/05/10 14:07:13-07:00 akpm@osdl.org 
#   [PATCH] simplify mqueue_inode_info->messages allocation
#   
#   From: Chris Wright <chrisw@osdl.org>
#   
#   Currently, if a user creates an mqueue and passes an mq_attr, the
#   info->messages will be created twice (and the extra one is properly freed).
#   This patch simply delays the allocation so that it only ever happens once. 
#   The relevant mq_attr data is passed to lower levels via the dentry->d_fsdata
#   fs private data.  This also helps isolate the areas we'd need to touch to do
#   rlimits on mqueues.
# 
# ipc/mqueue.c
#   2004/05/10 04:25:51-07:00 akpm@osdl.org +14 -25
#   simplify mqueue_inode_info->messages allocation
# 
# ChangeSet
#   2004/05/10 14:07:02-07:00 akpm@osdl.org 
#   [PATCH] bfs filesystem read past the end of dir
#   
#   From: Jakub Jermar <jermar@itbs.cz>
#   
#   I found out that BFS filesystem will eventually try to read and interpret
#   garbage past the end of directory in bfs_add_entry().  If the garbage
#   (interpreted as i-node number) is not set to zero (does it have to be?)
#   bfs_add_entry() will consider it a regular directory entry. 
#   
#   This causes weird things like this:
#   # touch a
#   # rm a
#   # ls
#   # touch b
#   # ls
#   a
#   
#   My patch detects an attempt to read past the end of directory and explicitly
#   clears the garbage that represents i-node number.  Thus the correct behaviour
#   is achieved.
#   
#   (was unable to contact Tigran)
# 
# fs/bfs/dir.c
#   2004/05/10 04:25:51-07:00 akpm@osdl.org +6 -1
#   bfs filesystem read past the end of dir
# 
# ChangeSet
#   2004/05/10 14:06:52-07:00 akpm@osdl.org 
#   [PATCH] update Documentation/md.txt
#   
#   From: <spam@altium.nl> (Dick Streefland)
#   
#   The following patch documents the currently undocumented raid= kernel
#   parameter.
# 
# Documentation/md.txt
#   2004/05/10 04:25:51-07:00 akpm@osdl.org +21 -2
#   update Documentation/md.txt
# 
# ChangeSet
#   2004/05/10 14:06:42-07:00 akpm@osdl.org 
#   [PATCH] es7000 subarch update for generic arch
#   
#   From: "Protasevich, Natalie" <Natalie.Protasevich@UNISYS.com>
#   
#   This is ES7000 sub architecture update.  It makes ES7000 a part of the
#   generic architecture, so the single compiled kernel will be able to choose
#   a correct set of parameters, routines ("genapic"), and a boot path.  It
#   uses criteria provided by the subarch for platform identification.  In case
#   of ES7000, it is a unique product/vendor string in the ACPI/MP OEM table,
#   and server control registers.  The patch is confined to only es7000 subarch
#   and generic subarch.  It was tested on ES7000 as well as generic Intel 8x
#   Xeon system.  Andi Kleen has reviewed the changes.
# 
# arch/i386/mach-generic/es7000.c
#   2004/05/10 14:06:36-07:00 akpm@osdl.org +28 -0
# 
# include/asm-i386/mach-generic/mach_apic.h
#   2004/05/10 04:25:50-07:00 akpm@osdl.org +3 -2
#   es7000 subarch update for generic arch
# 
# include/asm-i386/mach-es7000/mach_mpparse.h
#   2004/05/10 04:25:50-07:00 akpm@osdl.org +7 -5
#   es7000 subarch update for generic arch
# 
# include/asm-i386/mach-es7000/mach_ipi.h
#   2004/05/10 04:25:50-07:00 akpm@osdl.org +1 -1
#   es7000 subarch update for generic arch
# 
# include/asm-i386/genapic.h
#   2004/05/10 04:25:50-07:00 akpm@osdl.org +4 -1
#   es7000 subarch update for generic arch
# 
# arch/i386/mach-generic/probe.c
#   2004/05/10 04:25:50-07:00 akpm@osdl.org +2 -0
#   es7000 subarch update for generic arch
# 
# arch/i386/mach-generic/es7000.c
#   2004/05/10 14:06:36-07:00 akpm@osdl.org +0 -0
#   BitKeeper file /home/torvalds/v2.6/linux/arch/i386/mach-generic/es7000.c
# 
# arch/i386/mach-generic/Makefile
#   2004/05/10 04:25:50-07:00 akpm@osdl.org +1 -12
#   es7000 subarch update for generic arch
# 
# arch/i386/mach-es7000/es7000plat.c
#   2004/05/10 04:25:50-07:00 akpm@osdl.org +14 -14
#   es7000 subarch update for generic arch
# 
# arch/i386/mach-es7000/es7000.h
#   2004/05/10 04:25:50-07:00 akpm@osdl.org +1 -1
#   es7000 subarch update for generic arch
# 
# arch/i386/mach-es7000/Makefile
#   2004/05/10 04:25:50-07:00 akpm@osdl.org +2 -1
#   es7000 subarch update for generic arch
# 
# arch/i386/Makefile
#   2004/05/10 04:25:50-07:00 akpm@osdl.org +2 -1
#   es7000 subarch update for generic arch
# 
# arch/i386/Kconfig
#   2004/05/10 04:25:50-07:00 akpm@osdl.org +2 -2
#   es7000 subarch update for generic arch
# 
# BitKeeper/deleted/.del-topology.c~2d79ed1a63b27690
#   2004/05/10 14:06:36-07:00 akpm@osdl.org +0 -0
#   Delete: arch/i386/mach-es7000/topology.c
# 
# BitKeeper/deleted/.del-setup.c~1b687d49b2d0b042
#   2004/05/10 14:06:36-07:00 akpm@osdl.org +0 -0
#   Delete: arch/i386/mach-es7000/setup.c
# 
# ChangeSet
#   2004/05/10 14:05:51-07:00 akpm@osdl.org 
#   [PATCH] CLOCK_TICK_RATE: use CLOCK_TICK_RATE
#   
#   From: Thorsten Kranzkowski <dl8bcu@dl8bcu.de>
#   
#   use CLOCK_TICK_RATE where 1193180 was used in general timing calculations. 
#   (optional)
# 
# sound/oss/pas2_pcm.c
#   2004/05/10 04:25:50-07:00 akpm@osdl.org +5 -4
#   CLOCK_TICK_RATE: use CLOCK_TICK_RATE
# 
# drivers/input/joystick/analog.c
#   2004/05/10 04:25:50-07:00 akpm@osdl.org +1 -1
#   CLOCK_TICK_RATE: use CLOCK_TICK_RATE
# 
# ChangeSet
#   2004/05/10 14:05:40-07:00 akpm@osdl.org 
#   [PATCH] CLOCK_TICK_RATE: use PIT_TICK_RATE in *spkr.c
#   
#   From: Thorsten Kranzkowski <dl8bcu@dl8bcu.de>
# 
# drivers/input/misc/pcspkr.c
#   2004/05/10 04:25:50-07:00 akpm@osdl.org +2 -1
#   CLOCK_TICK_RATE: use PIT_TICK_RATE in *spkr.c
# 
# drivers/input/misc/Kconfig
#   2004/05/10 04:25:50-07:00 akpm@osdl.org +1 -1
#   CLOCK_TICK_RATE: use PIT_TICK_RATE in *spkr.c
# 
# drivers/input/misc/98spkr.c
#   2004/05/10 04:25:50-07:00 akpm@osdl.org +2 -1
#   CLOCK_TICK_RATE: use PIT_TICK_RATE in *spkr.c
# 
# arch/x86_64/kernel/time.c
#   2004/05/10 04:25:50-07:00 akpm@osdl.org +4 -3
#   CLOCK_TICK_RATE: use PIT_TICK_RATE in *spkr.c
# 
# ChangeSet
#   2004/05/10 14:05:29-07:00 akpm@osdl.org 
#   [PATCH] CLOCK_TICK_RATE: introduce asm-*/8253pit.h, #define PIT_TICK_RATE constant.
#   
#   From: Thorsten Kranzkowski <dl8bcu@dl8bcu.de>
#   
#   The calculation of the counter values in drivers/input/misc/pcspkr.c is
#   incorrectly based on CLOCK_TICK_RATE.  This goes unnoticed in i386 because
#   there the system clock is driven by the same Programmable Interval Timer chip
#   as the speaker.  But this doesn't hold true on other archs, e.g.  Alpha.
#   
#   To solve this problem I made these patches:
#   
#   1/3:    introduce asm-*/8253pit.h, #define PIT_TICK_RATE constant.
#           It seems this is not always the same value.
#   2/3:    use PIT_TICK_RATE in *spkr.c
#   3/3:    use CLOCK_TICK_RATE where 1193180 was used in general timing
#           calculations. (optional)
#   
#   There are still some places where the magic number is used instead of the
#   #define (vt_ioctl.c, gameport.c) but I left them as-is.  I got some responses
#   from arch maintainers to specifically not touch their respective architectures
#   so changing these places would mean breakage for them.
#   
#   Tested on Alpha and i386, ack'ed by Ralf Baechle for MIPS.
#   
#   
#   This patch:
#   
#   introduce asm-*/8253pit.h, #define PIT_TICK_RATE constant.
# 
# include/asm-x86_64/8253pit.h
#   2004/05/10 04:25:49-07:00 akpm@osdl.org +10 -0
#   CLOCK_TICK_RATE: introduce asm-*/8253pit.h, #define PIT_TICK_RATE constant.
# 
# include/asm-mips/8253pit.h
#   2004/05/10 04:25:49-07:00 akpm@osdl.org +10 -0
#   CLOCK_TICK_RATE: introduce asm-*/8253pit.h, #define PIT_TICK_RATE constant.
# 
# include/asm-i386/8253pit.h
#   2004/05/10 04:25:49-07:00 akpm@osdl.org +12 -0
#   CLOCK_TICK_RATE: introduce asm-*/8253pit.h, #define PIT_TICK_RATE constant.
# 
# include/asm-x86_64/timex.h
#   2004/05/10 04:25:49-07:00 akpm@osdl.org +2 -1
#   CLOCK_TICK_RATE: introduce asm-*/8253pit.h, #define PIT_TICK_RATE constant.
# 
# include/asm-x86_64/8253pit.h
#   2004/05/10 04:25:49-07:00 akpm@osdl.org +0 -0
#   BitKeeper file /home/torvalds/v2.6/linux/include/asm-x86_64/8253pit.h
# 
# include/asm-mips/8253pit.h
#   2004/05/10 04:25:49-07:00 akpm@osdl.org +0 -0
#   BitKeeper file /home/torvalds/v2.6/linux/include/asm-mips/8253pit.h
# 
# include/asm-i386/8253pit.h
#   2004/05/10 04:25:49-07:00 akpm@osdl.org +0 -0
#   BitKeeper file /home/torvalds/v2.6/linux/include/asm-i386/8253pit.h
# 
# include/asm-alpha/8253pit.h
#   2004/05/10 04:25:49-07:00 akpm@osdl.org +10 -0
#   CLOCK_TICK_RATE: introduce asm-*/8253pit.h, #define PIT_TICK_RATE constant.
# 
# arch/alpha/kernel/time.c
#   2004/05/10 04:25:49-07:00 akpm@osdl.org +4 -4
#   CLOCK_TICK_RATE: introduce asm-*/8253pit.h, #define PIT_TICK_RATE constant.
# 
# include/asm-alpha/8253pit.h
#   2004/05/10 04:25:49-07:00 akpm@osdl.org +0 -0
#   BitKeeper file /home/torvalds/v2.6/linux/include/asm-alpha/8253pit.h
# 
# ChangeSet
#   2004/05/10 14:05:18-07:00 akpm@osdl.org 
#   [PATCH] readahead: keep file->f_ra sane
#   
#   When two threads are simultaneously pread()ing from the same fd (which is a
#   legitimate thing to do), the readahead code thinks that a huge amount of
#   seeking is happening and shrinks the window, damaging performance a lot.
#   
#   I don't see a sane way to avoid this within the readahead code, so take a
#   private copy of the readahead state and restore it prior to returning from the
#   read.
# 
# mm/filemap.c
#   2004/05/10 04:25:49-07:00 akpm@osdl.org +6 -3
#   readahead: keep file->f_ra sane
# 
# ChangeSet
#   2004/05/10 14:05:07-07:00 akpm@osdl.org 
#   [PATCH] jiffies-to-clockt fix
#   
#   From: john stultz <johnstul@us.ibm.com>
#   
#   This patch polishes up Tim Schmielau's (tim@physik3.uni-rostock.de) fix for
#   jiffies_to_clock_t() and jiffies_64_to_clock_t().  The issues observed was
#   w/ /proc output not matching up to wall time due to accumulated error
#   caused by HZ not being exactly 1000 on i386 systems.  The solution is to
#   correct that error by using the more accurate TICK_NSEC in our calculation.
#   
#   Additionally, this patch corrects 3 warnings in the TCP layer uncovered by
#   this change.
# 
# net/ipv6/tcp_ipv6.c
#   2004/05/10 04:25:49-07:00 akpm@osdl.org +2 -2
#   jiffies-to-clockt fix
# 
# net/ipv4/tcp_ipv4.c
#   2004/05/10 04:25:49-07:00 akpm@osdl.org +2 -2
#   jiffies-to-clockt fix
# 
# include/linux/times.h
#   2004/05/10 04:25:49-07:00 akpm@osdl.org +12 -6
#   jiffies-to-clockt fix
# 
# ChangeSet
#   2004/05/10 14:04:56-07:00 akpm@osdl.org 
#   [PATCH] cyclades cleanups
#   
#   From: Marcelo Tosatti <marcelo.tosatti@cyclades.com>
#   
#   - cleanups for cyclades Kconfig entry	(Adrian Bunk/me)
#   - janitors project: remove dead function	(Don Koch)
#   
#   From: aris@cathedrallabs.org (Aristeu Sergio Rozanski Filho)
#   
#   	Use the standard min/max macros
# 
# drivers/char/cyclades.c
#   2004/05/10 04:25:49-07:00 akpm@osdl.org +9 -23
#   cyclades cleanups
# 
# drivers/char/Kconfig
#   2004/05/10 04:25:49-07:00 akpm@osdl.org +3 -5
#   cyclades cleanups
# 
# ChangeSet
#   2004/05/10 14:04:46-07:00 akpm@osdl.org 
#   [PATCH] fix ramdisk size assembler warning
#   
#   From: Jorn Engel <joern@wohnheim.fh-wedel.de>
#   
#    AS	arch/i386/boot/setup.o
#   /usr/src/linux-2.6.5/arch/i386/boot/setup.S: Assembler messages:
#   /usr/src/linux-2.6.5/arch/i386/boot/setup.S:159: Warning: value 0x37ffffff truncated to 0x37ffffff
#   
#   The warning is correct, the calculated value for ramdisk_max would be
#   0xb7ffffff instead of 0x37ffffff.  Truncating 0xb7ffffff to 0x37ffffff
#   is desired behaviour, so we should do it explicitly.
# 
# arch/i386/boot/setup.S
#   2004/05/10 04:25:48-07:00 akpm@osdl.org +2 -1
#   fix ramdisk size assembler warning
# 
# ChangeSet
#   2004/05/10 14:04:36-07:00 akpm@osdl.org 
#   [PATCH] ppc64: use generic ipc syscall translation
#   
#   From: David Gibson <david@gibson.dropbear.id.au>
#   
#   Currently ppc64 has its own code to convert 32-bit ipc() syscalls to 64-bit,
#   rather than using the common translation code from ipc/compat.c.  This patch,
#   tweaked slightly from an earlier version of Anton Blanchard's fixes that,
#   replacing the ppc64 code with calls to the common code.
#   
#   I've run the LSB IPC tests, and as many of the LTP IPC tests as I could figure
#   out how to run easily, and it seems to pass them all.
# 
# include/asm-ppc64/ppc32.h
#   2004/05/10 04:25:48-07:00 akpm@osdl.org +0 -5
#   ppc64: use generic ipc syscall translation
# 
# include/asm-ppc64/compat.h
#   2004/05/10 04:25:48-07:00 akpm@osdl.org +63 -0
#   ppc64: use generic ipc syscall translation
# 
# arch/ppc64/kernel/sys_ppc32.c
#   2004/05/10 04:25:48-07:00 akpm@osdl.org +46 -603
#   ppc64: use generic ipc syscall translation
# 
# arch/ppc64/Kconfig
#   2004/05/10 04:25:48-07:00 akpm@osdl.org +4 -0
#   ppc64: use generic ipc syscall translation
# 
# ChangeSet
#   2004/05/10 14:04:25-07:00 akpm@osdl.org 
#   [PATCH] gcc-3.4.0 fixes for 2.6.6-rc3 x86_64 kernel
#   
#   From: Mikael Pettersson <mikpe@csd.uu.se>
#   
#   Here are some patches to fix compilation warnings from
#   gcc-3.4.0 in the 2.6.6-rc3 x86_64 kernel.
#   
#   - puts() type conflict in boot/compressed/misc.c:
#     rename to putstr(), just like i386 did
#   - cast-as-lvalue in ia32_copy_siginfo_from_user():
#     use temporary
#   - code before declaration in io_apic.c:
#     move decl up
#   - code before declaration in ioremap.c:
#     move existing #ifndef up
#   - cast-as-lvalue (tons of them) from UP version of per_cpu():
#     merged asm-generic's version
# 
# include/asm-x86_64/percpu.h
#   2004/05/10 04:25:48-07:00 akpm@osdl.org +1 -1
#   gcc-3.4.0 fixes for 2.6.6-rc3 x86_64 kernel
# 
# arch/x86_64/mm/ioremap.c
#   2004/05/10 04:25:48-07:00 akpm@osdl.org +2 -2
#   gcc-3.4.0 fixes for 2.6.6-rc3 x86_64 kernel
# 
# arch/x86_64/kernel/io_apic.c
#   2004/05/10 04:25:48-07:00 akpm@osdl.org +3 -2
#   gcc-3.4.0 fixes for 2.6.6-rc3 x86_64 kernel
# 
# arch/x86_64/ia32/ia32_signal.c
#   2004/05/10 04:25:48-07:00 akpm@osdl.org +3 -1
#   gcc-3.4.0 fixes for 2.6.6-rc3 x86_64 kernel
# 
# arch/x86_64/boot/compressed/misc.c
#   2004/05/10 04:25:48-07:00 akpm@osdl.org +7 -7
#   gcc-3.4.0 fixes for 2.6.6-rc3 x86_64 kernel
# 
# ChangeSet
#   2004/05/10 14:04:14-07:00 akpm@osdl.org 
#   [PATCH] fixup 68360 module refcounting
#   
#   From: Christoph Hellwig <hch@lst.de>
# 
# drivers/serial/68360serial.c
#   2004/05/10 04:25:48-07:00 akpm@osdl.org +1 -5
#   fixup 68360 module refcounting
# 
# ChangeSet
#   2004/05/10 14:04:03-07:00 akpm@osdl.org 
#   [PATCH] Warn when smp_call_function() is called with interrupts disabled
#   
#   From: Keith Owens <kaos@sgi.com>
#   
#   Almost every architecture has a comment above smp_call_function()
#   
#    * You must not call this function with disabled interrupts or from a
#    * hardware interrupt handler or from a bottom half handler.
#   
#   I have not seen any problems with calling smp_call_function() from a bottom
#   half handler, but calling it with interrupts disabled can definitely
#   deadlock.  This bug is hard to reproduce and even harder to debug.
#   
#   CPU A                               CPU B
#   Disable interrupts
#                                       smp_call_function()
#                                       Take call_lock
#                                       Send IPIs
#                                       Wait for all cpus to acknowledge IPI
#                                       CPU A has not responded, spin waiting
#                                       for cpu A to respond, holding call_lock
#   smp_call_function()
#   Spin waiting for call_lock
#   Deadlock                            Deadlock
#   
#   Change all smp_call_function() to WARN_ON(irqs_disabled()).  It should be
#   BUG_ON() but some buggy code like SCSI sg will break with BUG_ON, so just
#   warn for now.  Change it to BUG_ON after the buggy code has been fixed.
# 
# arch/x86_64/kernel/smp.c
#   2004/05/10 04:25:47-07:00 akpm@osdl.org +3 -0
#   Warn when smp_call_function() is called with interrupts disabled
# 
# arch/um/kernel/smp.c
#   2004/05/10 04:25:47-07:00 akpm@osdl.org +3 -0
#   Warn when smp_call_function() is called with interrupts disabled
# 
# arch/sparc64/kernel/smp.c
#   2004/05/10 04:25:47-07:00 akpm@osdl.org +3 -0
#   Warn when smp_call_function() is called with interrupts disabled
# 
# arch/sh/kernel/smp.c
#   2004/05/10 04:25:47-07:00 akpm@osdl.org +3 -0
#   Warn when smp_call_function() is called with interrupts disabled
# 
# arch/s390/kernel/smp.c
#   2004/05/10 04:25:47-07:00 akpm@osdl.org +3 -0
#   Warn when smp_call_function() is called with interrupts disabled
# 
# arch/ppc64/kernel/smp.c
#   2004/05/10 04:25:47-07:00 akpm@osdl.org +3 -0
#   Warn when smp_call_function() is called with interrupts disabled
# 
# arch/ppc/kernel/smp.c
#   2004/05/10 04:25:47-07:00 akpm@osdl.org +2 -0
#   Warn when smp_call_function() is called with interrupts disabled
# 
# arch/parisc/kernel/smp.c
#   2004/05/10 04:25:47-07:00 akpm@osdl.org +3 -0
#   Warn when smp_call_function() is called with interrupts disabled
# 
# arch/mips/kernel/smp.c
#   2004/05/10 04:25:47-07:00 akpm@osdl.org +3 -0
#   Warn when smp_call_function() is called with interrupts disabled
# 
# arch/ia64/kernel/smp.c
#   2004/05/10 04:25:47-07:00 akpm@osdl.org +3 -0
#   Warn when smp_call_function() is called with interrupts disabled
# 
# arch/i386/mach-voyager/voyager_smp.c
#   2004/05/10 04:25:47-07:00 akpm@osdl.org +3 -0
#   Warn when smp_call_function() is called with interrupts disabled
# 
# arch/i386/kernel/smp.c
#   2004/05/10 04:25:47-07:00 akpm@osdl.org +3 -0
#   Warn when smp_call_function() is called with interrupts disabled
# 
# arch/alpha/kernel/smp.c
#   2004/05/10 04:25:47-07:00 akpm@osdl.org +3 -0
#   Warn when smp_call_function() is called with interrupts disabled
# 
# ChangeSet
#   2004/05/10 14:03:52-07:00 akpm@osdl.org 
#   [PATCH] worker_thread race fix
#   
#   Fix a waitqueue-handling race in worker_thread().
# 
# kernel/workqueue.c
#   2004/05/10 04:25:47-07:00 akpm@osdl.org +4 -3
#   worker_thread race fix
# 
# ChangeSet
#   2004/05/10 14:03:41-07:00 akpm@osdl.org 
#   [PATCH] pcmcia/i82365.c warning fix
#   
#   From: "Luiz Fernando N. Capitulino" <lcapitulino@prefeitura.sp.gov.br>
#   
#   drivers/pcmcia/i82365.c: At top level:
#   drivers/pcmcia/i82365.c:71: warning: `version' defined but not used
# 
# drivers/pcmcia/i82365.c
#   2004/05/10 04:25:47-07:00 akpm@osdl.org +1 -1
#   pcmcia/i82365.c warning fix
# 
# ChangeSet
#   2004/05/10 14:03:31-07:00 akpm@osdl.org 
#   [PATCH] throttle P4 thermal warnings
#   
#   From: Zwane Mwaikambo <zwane@linuxpower.ca>
#   
#   In really bad conditions this can keep printing for a while, throttle the
#   output somewhat.  Also change the "CPU%d" formatting to better match the
#   other boot output.
# 
# arch/i386/kernel/cpu/mcheck/p4.c
#   2004/05/10 04:25:47-07:00 akpm@osdl.org +20 -10
#   throttle P4 thermal warnings
# 
# ChangeSet
#   2004/05/10 14:03:20-07:00 akpm@osdl.org 
#   [PATCH] fix deadlock in create_workqueue()
#   
#   Fix bug identified by Srivatsa Vaddagiri <vatsa@in.ibm.com>:
#   
#   There's a deadlock in __create_workqueue when CONFIG_HOTPLUG_CPU is set.  This
#   can happen when create_workqueue_thread fails to create a worker thread.  In
#   that case, we call destroy_workqueue with cpu hotplug lock held.
#   destroy_workqueue however also attempts to take the same lock.
# 
# kernel/workqueue.c
#   2004/05/10 04:25:46-07:00 akpm@osdl.org +1 -1
#   fix deadlock in create_workqueue()
# 
# ChangeSet
#   2004/05/10 14:03:10-07:00 akpm@osdl.org 
#   [PATCH] remove blk_queue_bounce() printks
#   
#   From: Matt Domsch <Matt_Domsch@dell.com>
#   
#   Jens Axboe wrote:
#   It should just be deleted. As you note, it is a debug message. I
#   originally added it so we would have some clues as to dma capability for
#   bug reports. There never was any, the check can go :)
# 
# drivers/block/ll_rw_blk.c
#   2004/05/10 04:25:46-07:00 akpm@osdl.org +0 -14
#   remove blk_queue_bounce() printks
# 
# ChangeSet
#   2004/05/10 14:02:59-07:00 akpm@osdl.org 
#   [PATCH] Fix MTD suspend/resume
#   
#   From: Russell King <rmk@arm.linux.org.uk>
#   
#   This patch carries forward the following bug fix from MTD CVS, which causes a
#   lot of noise after a suspend/resume cycle on ARM devices.
#   
#   revision 1.127
#   date: 2003/07/02 20:29:38;  author: acurtis;  state: Exp;  lines: +2 -1
#   Added FL_STATUS to the FL_READY case in put_chip(). (Eliminate noise)
# 
# drivers/mtd/chips/cfi_cmdset_0001.c
#   2004/05/10 04:25:46-07:00 akpm@osdl.org +1 -0
#   Fix MTD suspend/resume
# 
# ChangeSet
#   2004/05/10 14:02:49-07:00 akpm@osdl.org 
#   [PATCH] dentry and inode cache hash algorithm performance changes.
#   
#   From: "Jose R. Santos" <jrsantos@austin.ibm.com>
#   
#   It alleviates some issues seen with Linux when accessing millions of files on
#   machines with large amounts of RAM (+32GB).  Both algorithms are base on some
#   studies that Dominique Heger was doing on hash table efficiencies in Linux.
#   The dentry hash table has been tested in small systems with one internal IDE
#   hard disk as well as in large SMP with many fiberchanel disks.  Dominique
#   claims that in all the testing done, they did not see one case were this has
#   function provided worst performance and that in most test they were seeing
#   better performance.
#   
#   The inode hash function was done by me base on Dominique's original work and
#   has only been stress tested with SpecSFS.  It provided a 3% improvement over
#   the default algorithm in the SpecSFS results and speed ups in the response
#   time of almost all filesystem operations the benchmark stress.  With the
#   better distribution is as also possible to reduce the number of inode buckets
#   for 32 million to 16 million and still get a slightly better results.
#   
#   Anton was nice enough to provide some graphs that show the distribution 
#   before and after the patch at http://samba.org/~anton/linux/sfs/1/
#   
#   For the dentry hash function, some of my other coorkers had put this hash
#   function through various testing and have concluded that the hash function was
#   equal or better than the default hash function.  These runs were done with a
#   (hopefully to be Open Source soon) benchmark called FFSB which can simulate
#   various io patters across many filesystems and variable file sizes.
#   
#   SpecSFS fileset is basically a lot of small file which varies depending on the
#   size of the run.  For a not so big SMP system the number of file is in the +20
#   Million files range.  Of those 20 million files only 10% are access randomly
#   by the client.  The purpose of this is that the benchmark tries to stress not
#   only the NFS layer but, VM and Filesystems layers as well.  The filesets are
#   also hundreds of gigabytes in size in order to promote disk head movement by
#   guaranteeing cache misses in memory.  SFS 27% of the workload are lookups
#   __d_lookup has showing high in my profiles.
#   
#   For the inode hash the problem that I see is that when running a benchmark
#   with this huge fileset we end up trying to free a lot of inode entries during
#   the run while trying to put new entries in cache.  We end up calling
#   ifind_fast() which calls find_inodes_fast() held under inode_lock.  In order
#   to avoid holding the inode_lock we needed to avoid having long chains in that
#   hash function.
#   
#   When I took a look at the original hash function, I found it to be a bit to
#   simple for any workload.  My solution (which I took advantage of Dominique's
#   work) was to create a hash that function that could generate completely
#   different hashes depending on the hashval and the superblock in order to have
#   the hash scale as we added more filesystems to the machine.
#   
#   Both of these problems can be somewhat tuned out by increasing the number of
#   buckets of both d and i cache but it got to a point were I had 256MB of inode
#   and 128MB in dentry hash buckets on a not so large SMP.  With the hash changes
#   I have been able to reduce the number of buckets to 128MB for inode cache and
#   to 32MB for dentry cache and still get better performance.
#   
#   If it help my case...  I haven't been running this benchmark for long, so I
#   haven't been able to find a way to cheat.  I need to come up with generic
#   solutions until I can find a cheat for the benchmark.  :)
#   
#   
#   SDET results:
#   
#   Steve Pratt seem to have a SDET setup already and he did me the favor of
#   running SDET with a reduce dentry entry hash table size.  I belive that
#   his table suggest that less than 3% change is acceptable variability, but
#   overall he got a 5% better number using the new hash algorith.
#   
#   A) x4408way1.sdet.2.6.5100000-8p.04-05-05_12.08.44 vs 
#   B) x4408way1.sdet.2.6.5+hash-100000-8p.04-05-05_11.48.02
#   
#   
#     Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)
#     Inode-cache hash table entries: 1048576 (order: 10, 4194304 bytes) 
#   
#   Results:Throughput
#   
#                                             tolerance = 0.00 + 3.00% of A
#                         A            B
#      Threads      Ops/sec      Ops/sec    %diff         diff    tolerance
#   ----------- ------------ ------------ -------- ------------ ------------
#            1    4341.9300    4401.9500     1.38        60.02       130.26 
#            2    8242.2000    8165.1200    -0.94       -77.08       247.27 
#            4   15274.4900   15257.1000    -0.11       -17.39       458.23 
#            8   21326.9200   21320.7000    -0.03        -6.22       639.81 
#           16   23056.2100   24282.8000     5.32      1226.59       691.69  * 
#           32   23397.2500   24684.6100     5.50      1287.36       701.92  * 
#           64   23372.7600   23632.6500     1.11       259.89       701.18 
#          128   17009.3900   16651.9600    -2.10      -357.43       510.28 
#   =========================================================================
# 
# fs/inode.c
#   2004/05/10 04:25:46-07:00 akpm@osdl.org +5 -4
#   dentry and inode cache hash algorithm performance changes.
# 
# fs/dcache.c
#   2004/05/10 04:25:46-07:00 akpm@osdl.org +5 -3
#   dentry and inode cache hash algorithm performance changes.
# 
# ChangeSet
#   2004/05/10 14:02:38-07:00 akpm@osdl.org 
#   [PATCH] cmpci OSS driver update
#   
#   From: C.L. Tien <cltien@cmedia.com.tw>
#   
#   Current version from cmedia.
# 
# sound/oss/cmpci.c
#   2004/05/10 04:25:45-07:00 akpm@osdl.org +1319 -1174
#   cmpci OSS driver update
# 
# sound/oss/Makefile
#   2004/05/10 04:25:45-07:00 akpm@osdl.org +6 -0
#   cmpci OSS driver update
# 
# sound/oss/Kconfig
#   2004/05/10 04:25:45-07:00 akpm@osdl.org +12 -83
#   cmpci OSS driver update
# 
# ChangeSet
#   2004/05/10 14:02:27-07:00 akpm@osdl.org 
#   [PATCH] EDD: follow sysfs convention, MODULE_VERSION, remove dead SCSI symlink
#   
#   From: Matt Domsch <Matt_Domsch@dell.com>
#   
#   Clean up the edd.c driver.
#   
#   * use kobject_set_name() instead of snprintf() per GregKH's recommendation.
#   * Add MODULE_VERSION()
#   * s/driverfs/sysfs/ in Kconfig
#   * Remove report URL message, as there have been too many BIOSs reported,
#     virtually none of which are EDD-capable.  This may return if/when I
#     develop a better reporting method and database to capture/store the
#     data from users.
#   * Remove the unused code for creating a symlink to the scsi_device.
#     This never worked right, and I'm going to show the relationship from
#     a userspace tool which uses libsysfs instead.
# 
# drivers/firmware/edd.c
#   2004/05/10 04:25:45-07:00 akpm@osdl.org +9 -118
#   EDD: follow sysfs convention, MODULE_VERSION, remove dead SCSI symlink
# 
# drivers/firmware/Kconfig
#   2004/05/10 04:25:45-07:00 akpm@osdl.org +1 -1
#   EDD: follow sysfs convention, MODULE_VERSION, remove dead SCSI symlink
# 
# ChangeSet
#   2004/05/10 14:02:17-07:00 akpm@osdl.org 
#   [PATCH] blk_start_queue() should use kblockd
#   
#   kblockd is the thread which runs unplug functions, not keventd.
# 
# drivers/block/ll_rw_blk.c
#   2004/05/10 04:25:45-07:00 akpm@osdl.org +1 -1
#   blk_start_queue() should use kblockd
# 
# ChangeSet
#   2004/05/10 14:02:06-07:00 akpm@osdl.org 
#   [PATCH] Only Print Taint Message Once
#   
#   From: Rusty Russell <rusty@rustcorp.com.au>
#   
#   Only print the tainted message the first time.  Its purpose is to warn
#   users that we can't support them, not to fill their logs.
# 
# kernel/module.c
#   2004/05/10 04:25:45-07:00 akpm@osdl.org +1 -1
#   Only Print Taint Message Once
# 
# ChangeSet
#   2004/05/10 14:01:55-07:00 akpm@osdl.org 
#   [PATCH] Un-inline spinlocks on ppc64
#   
#   From: Paul Mackerras <paulus@samba.org>
#   
#   The patch below moves the ppc64 spinlocks and rwlocks out of line and into
#   arch/ppc64/lib/locks.c, and implements _raw_spin_lock_flags for ppc64.
#   
#   Part of the motivation for moving the spinlocks and rwlocks out of line was
#   that I needed to add code to the slow paths to yield the processor to the
#   hypervisor on systems with shared processors.  On these systems, a cpu as
#   seen by the kernel is a virtual processor that is not necessarily running
#   full-time on a real physical cpu.  If we are spinning on a lock which is
#   held by another virtual processor which is not running at the moment, we
#   are just wasting time.  In such a situation it is better to do a hypervisor
#   call to ask it to give the rest of our time slice to the lock holder so
#   that forward progress can be made.
#   
#   The one problem with out-of-line spinlock routines is that lock contention
#   will show up in profiles in the spin_lock etc.  routines rather than in the
#   callers, as it does with inline spinlocks.  I have added a CONFIG_SPINLINE
#   config option for people that want to do profiling.  In the longer term, Anton
#   is talking about teaching the profiling code to attribute samples in the spin
#   lock routines to the routine's caller.
#   
#   This patch reduces the kernel by about 80kB on my G5.  With inline
#   spinlocks selected, the kernel gets about 4kB bigger than without the
#   patch, because _raw_spin_lock_flags is slightly bigger than _raw_spin_lock.
#   
#   This patch depends on the patch from Keith Owens to add
#   _raw_spin_lock_flags.
# 
# include/asm-ppc64/spinlock.h
#   2004/05/10 04:25:44-07:00 akpm@osdl.org +98 -37
#   Un-inline spinlocks on ppc64
# 
# include/asm-ppc64/paca.h
#   2004/05/10 04:25:44-07:00 akpm@osdl.org +7 -3
#   Un-inline spinlocks on ppc64
# 
# arch/ppc64/lib/locks.c
#   2004/05/10 04:25:44-07:00 akpm@osdl.org +285 -0
#   Un-inline spinlocks on ppc64
# 
# arch/ppc64/lib/Makefile
#   2004/05/10 04:25:44-07:00 akpm@osdl.org +1 -1
#   Un-inline spinlocks on ppc64
# 
# arch/ppc64/kernel/pacaData.c
#   2004/05/10 04:25:44-07:00 akpm@osdl.org +1 -0
#   Un-inline spinlocks on ppc64
# 
# arch/ppc64/lib/locks.c
#   2004/05/10 04:25:44-07:00 akpm@osdl.org +0 -0
#   BitKeeper file /home/torvalds/v2.6/linux/arch/ppc64/lib/locks.c
# 
# ChangeSet
#   2004/05/10 14:01:44-07:00 akpm@osdl.org 
#   [PATCH] Allow architectures to reenable interrupts on contended spinlocks
#   
#   From: Keith Owens <kaos@sgi.com>
#   
#   As requested by Linus, update all architectures to add the common
#   infrastructure.  Tested on ia64 and i386.
#   
#   Enable interrupts while waiting for a disabled spinlock, but only if
#   interrupts were enabled before issuing spin_lock_irqsave().
#   
#   This patch consists of three sections :-
#   
#   * An architecture independent change to call _raw_spin_lock_flags()
#     instead of _raw_spin_lock() when the flags are available.
#   
#   * An ia64 specific change to implement _raw_spin_lock_flags() and to
#     define _raw_spin_lock(lock) as _raw_spin_lock_flags(lock, 0) for the
#     ASM_SUPPORTED case.
#   
#   * Patches for all other architectures and for ia64 with !ASM_SUPPORTED
#     to map _raw_spin_lock_flags(lock, flags) to _raw_spin_lock(lock).
#     Architecture maintainers can define _raw_spin_lock_flags() to do
#     something useful if they want to enable interrupts while waiting for
#     a disabled spinlock.
# 
# include/linux/spinlock.h
#   2004/05/10 04:25:44-07:00 akpm@osdl.org +3 -1
#   Allow architectures to reenable interrupts on contended spinlocks
# 
# include/asm-x86_64/spinlock.h
#   2004/05/10 04:25:44-07:00 akpm@osdl.org +1 -0
#   Allow architectures to reenable interrupts on contended spinlocks
# 
# include/asm-sparc64/spinlock.h
#   2004/05/10 04:25:44-07:00 akpm@osdl.org +2 -0
#   Allow architectures to reenable interrupts on contended spinlocks
# 
# include/asm-sparc/spinlock.h
#   2004/05/10 04:25:44-07:00 akpm@osdl.org +2 -0
#   Allow architectures to reenable interrupts on contended spinlocks
# 
# include/asm-sh/spinlock.h
#   2004/05/10 04:25:44-07:00 akpm@osdl.org +1 -0
#   Allow architectures to reenable interrupts on contended spinlocks
# 
# include/asm-s390/spinlock.h
#   2004/05/10 04:25:44-07:00 akpm@osdl.org +1 -0
#   Allow architectures to reenable interrupts on contended spinlocks
# 
# include/asm-ppc64/spinlock.h
#   2004/05/10 04:25:44-07:00 akpm@osdl.org +1 -0
#   Allow architectures to reenable interrupts on contended spinlocks
# 
# include/asm-ppc/spinlock.h
#   2004/05/10 04:25:44-07:00 akpm@osdl.org +1 -0
#   Allow architectures to reenable interrupts on contended spinlocks
# 
# include/asm-parisc/spinlock.h
#   2004/05/10 04:25:44-07:00 akpm@osdl.org +1 -0
#   Allow architectures to reenable interrupts on contended spinlocks
# 
# include/asm-mips/spinlock.h
#   2004/05/10 04:25:44-07:00 akpm@osdl.org +1 -0
#   Allow architectures to reenable interrupts on contended spinlocks
# 
# include/asm-ia64/spinlock.h
#   2004/05/10 04:25:44-07:00 akpm@osdl.org +15 -9
#   Allow architectures to reenable interrupts on contended spinlocks
# 
# include/asm-i386/spinlock.h
#   2004/05/10 04:25:44-07:00 akpm@osdl.org +1 -0
#   Allow architectures to reenable interrupts on contended spinlocks
# 
# include/asm-arm/spinlock.h
#   2004/05/10 04:25:44-07:00 akpm@osdl.org +1 -0
#   Allow architectures to reenable interrupts on contended spinlocks
# 
# include/asm-alpha/spinlock.h
#   2004/05/10 04:25:44-07:00 akpm@osdl.org +1 -0
#   Allow architectures to reenable interrupts on contended spinlocks
# 
# arch/ia64/kernel/head.S
#   2004/05/10 04:25:44-07:00 akpm@osdl.org +17 -5
#   Allow architectures to reenable interrupts on contended spinlocks
# 
# ChangeSet
#   2004/05/10 14:01:33-07:00 akpm@osdl.org 
#   [PATCH] Kill some 'No description found...' warnings. (kernel-api.sgml)
#   
#   From: Alexey Dobriyan <adobriyan@mail.ru>
#   
#   Fix various kernel-doc parameters.
# 
# net/core/dev.c
#   2004/05/10 04:25:44-07:00 akpm@osdl.org +1 -1
#   Kill some 'No description found...' warnings. (kernel-api.sgml)
# 
# lib/string.c
#   2004/05/10 04:25:44-07:00 akpm@osdl.org +2 -2
#   Kill some 'No description found...' warnings. (kernel-api.sgml)
# 
# drivers/block/ll_rw_blk.c
#   2004/05/10 04:25:44-07:00 akpm@osdl.org +1 -1
#   Kill some 'No description found...' warnings. (kernel-api.sgml)
# 
# ChangeSet
#   2004/05/10 14:01:22-07:00 akpm@osdl.org 
#   [PATCH] Kill a warning while making pdfdocs.
#   
#   From: Alexey Dobriyan <adobriyan@mail.ru>
#   
#     DOCPROC Documentation/DocBook/parportbook.sgml
#   Warning(drivers/parport/share.c:188): No description found for parameter 'drv'
#   (kernel-doc parameter name is incorrect.)
# 
# drivers/parport/share.c
#   2004/05/10 04:25:43-07:00 akpm@osdl.org +1 -1
#   Kill a warning while making pdfdocs.
# 
# ChangeSet
#   2004/05/10 14:01:13-07:00 akpm@osdl.org 
#   [PATCH] com90xx error message patch: check_region() gone
#   
#   From: Greg Aumann <Greg_Aumann@sil.org>
#   
#   This patch updates two error messages to reflect changes in the code.
# 
# drivers/net/arcnet/com90xx.c
#   2004/05/10 04:25:43-07:00 akpm@osdl.org +2 -2
#   com90xx error message patch: check_region() gone
# 
# ChangeSet
#   2004/05/10 14:01:03-07:00 akpm@osdl.org 
#   [PATCH] Improve laptop mode's block_dump output
#   
#   From: "Theodore Ts'o" <tytso@mit.edu>
#   
#   This patch versus improves the output produced by "echo 1 >
#   /proc/sys/vm/block_dump", in the following ways:
#   
#   1) The messages are printed with KERN_DEBUG, so that even if sysklogd is
#      running, if configured appropriately, it will not need to write to log
#      files.
#   
#   2) The inode which is dirtied by a process is now identified more
#      precisely by inode number and filesystem ID, and by a dcache name if
#      present.
#   
#   3) In the generic filesystem sget function, the superblock id (s_id) is
#      filled in with the filesystem type by default.  Filesystems which are
#      block-device based will override s_id, but this allows pseudo
#      filesystems such as tmpfs, procfs, etc.  to be identified in (2).
# 
# fs/super.c
#   2004/05/10 04:25:43-07:00 akpm@osdl.org +1 -0
#   Improve laptop mode's block_dump output
# 
# fs/fs-writeback.c
#   2004/05/10 04:25:43-07:00 akpm@osdl.org +17 -2
#   Improve laptop mode's block_dump output
# 
# drivers/block/ll_rw_blk.c
#   2004/05/10 04:25:43-07:00 akpm@osdl.org +1 -1
#   Improve laptop mode's block_dump output
# 
# ChangeSet
#   2004/05/10 14:00:52-07:00 akpm@osdl.org 
#   [PATCH] find_user locking and leak fix
#   
#   find_user() is being called from set/get_priority(), but it doesn't take the
#   needed lock, and those callers were forgetting to drop the refcount which
#   find_user() took.
# 
# kernel/user.c
#   2004/05/10 04:25:43-07:00 akpm@osdl.org +12 -1
#   find_user locking and leak fix
# 
# kernel/sys.c
#   2004/05/10 04:25:43-07:00 akpm@osdl.org +4 -0
#   find_user locking and leak fix
# 
# ChangeSet
#   2004/05/10 14:00:41-07:00 akpm@osdl.org 
#   [PATCH] mptfusion depends on scsi
#   
#   From: Olaf Hering <olh@suse.de>
# 
# drivers/message/fusion/Kconfig
#   2004/05/10 04:25:43-07:00 akpm@osdl.org +1 -1
#   mptfusion depends on scsi
# 
# ChangeSet
#   2004/05/10 14:00:30-07:00 akpm@osdl.org 
#   [PATCH] reiserfs: add device info to diagnostic messages
#   
#   From: Chris Mason <mason@suse.com>
#   
#   From: Jeff Mahoney <jeffm@suse.com>
#   
#   Add device info to the various reiserfs warnings and panics so you can tell
#   which filesystem triggers the message.  Loosely based on code from Oleg
#   Drokin.
# 
# include/linux/reiserfs_fs.h
#   2004/05/10 04:25:42-07:00 akpm@osdl.org +8 -9
#   reiserfs: add device info to diagnostic messages
# 
# fs/reiserfs/xattr.c
#   2004/05/10 04:25:42-07:00 akpm@osdl.org +15 -15
#   reiserfs: add device info to diagnostic messages
# 
# fs/reiserfs/tail_conversion.c
#   2004/05/10 04:25:42-07:00 akpm@osdl.org +2 -2
#   reiserfs: add device info to diagnostic messages
# 
# fs/reiserfs/super.c
#   2004/05/10 04:25:42-07:00 akpm@osdl.org +87 -87
#   reiserfs: add device info to diagnostic messages
# 
# fs/reiserfs/stree.c
#   2004/05/10 04:25:42-07:00 akpm@osdl.org +46 -43
#   reiserfs: add device info to diagnostic messages
# 
# fs/reiserfs/procfs.c
#   2004/05/10 04:25:42-07:00 akpm@osdl.org +4 -3
#   reiserfs: add device info to diagnostic messages
# 
# fs/reiserfs/prints.c
#   2004/05/10 04:25:42-07:00 akpm@osdl.org +37 -13
#   reiserfs: add device info to diagnostic messages
# 
# fs/reiserfs/objectid.c
#   2004/05/10 04:25:42-07:00 akpm@osdl.org +2 -2
#   reiserfs: add device info to diagnostic messages
# 
# fs/reiserfs/namei.c
#   2004/05/10 04:25:42-07:00 akpm@osdl.org +18 -12
#   reiserfs: add device info to diagnostic messages
# 
# fs/reiserfs/lbalance.c
#   2004/05/10 04:25:42-07:00 akpm@osdl.org +2 -2
#   reiserfs: add device info to diagnostic messages
# 
# fs/reiserfs/journal.c
#   2004/05/10 04:25:42-07:00 akpm@osdl.org +104 -94
#   reiserfs: add device info to diagnostic messages
# 
# fs/reiserfs/item_ops.c
#   2004/05/10 04:25:42-07:00 akpm@osdl.org +18 -19
#   reiserfs: add device info to diagnostic messages
# 
# fs/reiserfs/inode.c
#   2004/05/10 04:25:42-07:00 akpm@osdl.org +37 -28
#   reiserfs: add device info to diagnostic messages
# 
# fs/reiserfs/fix_node.c
#   2004/05/10 04:25:42-07:00 akpm@osdl.org +17 -10
#   reiserfs: add device info to diagnostic messages
# 
# fs/reiserfs/file.c
#   2004/05/10 04:25:42-07:00 akpm@osdl.org +9 -5
#   reiserfs: add device info to diagnostic messages
# 
# fs/reiserfs/do_balan.c
#   2004/05/10 04:25:42-07:00 akpm@osdl.org +13 -9
#   reiserfs: add device info to diagnostic messages
# 
# fs/reiserfs/dir.c
#   2004/05/10 04:25:42-07:00 akpm@osdl.org +2 -2
#   reiserfs: add device info to diagnostic messages
# 
# fs/reiserfs/bitmap.c
#   2004/05/10 04:25:42-07:00 akpm@osdl.org +25 -24
#   reiserfs: add device info to diagnostic messages
# 
# ChangeSet
#   2004/05/10 14:00:19-07:00 akpm@osdl.org 
#   [PATCH] reiserfs: xattr permission fix
#   
#   From: Chris Mason <mason@suse.com>
#   
#   From: jeffm@suse.com
#   
#   reiserfs permission bug fix for xattrs
# 
# fs/reiserfs/xattr.c
#   2004/05/10 04:25:42-07:00 akpm@osdl.org +2 -1
#   reiserfs: xattr permission fix
# 
# ChangeSet
#   2004/05/10 14:00:09-07:00 akpm@osdl.org 
#   [PATCH] reiserfs: quota support
#   
#   From: Chris Mason <mason@suse.com>
#   
#   ReiserFS support for quotas.  Originally from Jan Kara
# 
# include/linux/reiserfs_fs.h
#   2004/05/10 04:25:41-07:00 akpm@osdl.org +18 -6
#   reiserfs: quota support
# 
# fs/reiserfs/tail_conversion.c
#   2004/05/10 04:25:41-07:00 akpm@osdl.org +6 -4
#   reiserfs: quota support
# 
# fs/reiserfs/super.c
#   2004/05/10 04:25:41-07:00 akpm@osdl.org +7 -4
#   reiserfs: quota support
# 
# fs/reiserfs/stree.c
#   2004/05/10 04:25:41-07:00 akpm@osdl.org +146 -33
#   reiserfs: quota support
# 
# fs/reiserfs/namei.c
#   2004/05/10 04:25:41-07:00 akpm@osdl.org +9 -5
#   reiserfs: quota support
# 
# fs/reiserfs/inode.c
#   2004/05/10 04:25:41-07:00 akpm@osdl.org +110 -42
#   reiserfs: quota support
# 
# fs/reiserfs/fix_node.c
#   2004/05/10 04:25:41-07:00 akpm@osdl.org +4 -3
#   reiserfs: quota support
# 
# fs/reiserfs/file.c
#   2004/05/10 04:25:41-07:00 akpm@osdl.org +6 -6
#   reiserfs: quota support
# 
# fs/reiserfs/do_balan.c
#   2004/05/10 04:25:41-07:00 akpm@osdl.org +1 -5
#   reiserfs: quota support
# 
# fs/reiserfs/bitmap.c
#   2004/05/10 04:25:41-07:00 akpm@osdl.org +57 -13
#   reiserfs: quota support
# 
# ChangeSet
#   2004/05/10 13:59:58-07:00 akpm@osdl.org 
#   [PATCH] reiserfs: xattr locking fixes
#   
#   From: Chris Mason <mason@suse.com>
#   
#   From: jeffm@suse.com
#   
#   reiserfs xattr locking fixes
# 
# include/linux/reiserfs_xattr.h
#   2004/05/10 04:25:41-07:00 akpm@osdl.org +23 -0
#   reiserfs: xattr locking fixes
# 
# include/linux/reiserfs_fs_i.h
#   2004/05/10 04:25:41-07:00 akpm@osdl.org +2 -0
#   reiserfs: xattr locking fixes
# 
# fs/reiserfs/xattr_acl.c
#   2004/05/10 04:25:41-07:00 akpm@osdl.org +13 -2
#   reiserfs: xattr locking fixes
# 
# fs/reiserfs/xattr.c
#   2004/05/10 04:25:41-07:00 akpm@osdl.org +26 -6
#   reiserfs: xattr locking fixes
# 
# fs/reiserfs/inode.c
#   2004/05/10 04:25:41-07:00 akpm@osdl.org +2 -0
#   reiserfs: xattr locking fixes
# 
# ChangeSet
#   2004/05/10 13:59:47-07:00 akpm@osdl.org 
#   [PATCH] reiserfs: selinux support
#   
#   From: Chris Mason <mason@suse.com>
#   
#   From: jeffm@suse.com
#   
#   reiserfs support for selinux
# 
# fs/reiserfs/xattr_security.c
#   2004/05/10 04:25:41-07:00 akpm@osdl.org +69 -0
#   reiserfs: selinux support
# 
# include/linux/reiserfs_xattr.h
#   2004/05/10 04:25:41-07:00 akpm@osdl.org +3 -0
#   reiserfs: selinux support
# 
# fs/reiserfs/xattr_security.c
#   2004/05/10 04:25:41-07:00 akpm@osdl.org +0 -0
#   BitKeeper file /home/torvalds/v2.6/linux/fs/reiserfs/xattr_security.c
# 
# fs/reiserfs/xattr.c
#   2004/05/10 04:25:41-07:00 akpm@osdl.org +3 -0
#   reiserfs: selinux support
# 
# fs/reiserfs/Makefile
#   2004/05/10 04:25:41-07:00 akpm@osdl.org +4 -0
#   reiserfs: selinux support
# 
# fs/Kconfig
#   2004/05/10 04:25:41-07:00 akpm@osdl.org +12 -0
#   reiserfs: selinux support
# 
# ChangeSet
#   2004/05/10 13:59:36-07:00 akpm@osdl.org 
#   [PATCH] reiserfs: support trusted xattrs
#   
#   From: Chris Mason <mason@suse.com>
#   
#   From: jeffm@suse.com
#   
#   reiserfs support for trusted xattrs
# 
# fs/reiserfs/xattr_trusted.c
#   2004/05/10 04:25:41-07:00 akpm@osdl.org +81 -0
#   reiserfs: support trusted xattrs
# 
# include/linux/reiserfs_xattr.h
#   2004/05/10 04:25:41-07:00 akpm@osdl.org +1 -0
#   reiserfs: support trusted xattrs
# 
# fs/reiserfs/xattr_trusted.c
#   2004/05/10 04:25:41-07:00 akpm@osdl.org +0 -0
#   BitKeeper file /home/torvalds/v2.6/linux/fs/reiserfs/xattr_trusted.c
# 
# fs/reiserfs/xattr.c
#   2004/05/10 04:25:41-07:00 akpm@osdl.org +1 -0
#   reiserfs: support trusted xattrs
# 
# fs/reiserfs/Makefile
#   2004/05/10 04:25:41-07:00 akpm@osdl.org +1 -1
#   reiserfs: support trusted xattrs
# 
# ChangeSet
#   2004/05/10 13:59:25-07:00 akpm@osdl.org 
#   [PATCH] reiserfs: ACL support
#   
#   From: Chris Mason <mason@suse.com>
#   
#   From: jeffm@suse.com
#   
#   reiserfs acl support
# 
# include/linux/reiserfs_acl.h
#   2004/05/10 04:25:40-07:00 akpm@osdl.org +91 -0
#   reiserfs: ACL support
# 
# include/linux/reiserfs_xattr.h
#   2004/05/10 04:25:40-07:00 akpm@osdl.org +6 -1
#   reiserfs: ACL support
# 
# include/linux/reiserfs_fs_sb.h
#   2004/05/10 04:25:40-07:00 akpm@osdl.org +3 -1
#   reiserfs: ACL support
# 
# include/linux/reiserfs_fs_i.h
#   2004/05/10 04:25:40-07:00 akpm@osdl.org +3 -0
#   reiserfs: ACL support
# 
# include/linux/reiserfs_acl.h
#   2004/05/10 04:25:40-07:00 akpm@osdl.org +0 -0
#   BitKeeper file /home/torvalds/v2.6/linux/include/linux/reiserfs_acl.h
# 
# fs/reiserfs/xattr_user.c
#   2004/05/10 04:25:40-07:00 akpm@osdl.org +7 -3
#   reiserfs: ACL support
# 
# fs/reiserfs/xattr_acl.c
#   2004/05/10 04:25:40-07:00 akpm@osdl.org +552 -0
#   reiserfs: ACL support
# 
# fs/reiserfs/xattr.c
#   2004/05/10 04:25:40-07:00 akpm@osdl.org +74 -8
#   reiserfs: ACL support
# 
# fs/reiserfs/super.c
#   2004/05/10 04:25:40-07:00 akpm@osdl.org +25 -0
#   reiserfs: ACL support
# 
# fs/reiserfs/namei.c
#   2004/05/10 04:25:40-07:00 akpm@osdl.org +33 -0
#   reiserfs: ACL support
# 
# fs/reiserfs/inode.c
#   2004/05/10 04:25:40-07:00 akpm@osdl.org +23 -0
#   reiserfs: ACL support
# 
# fs/reiserfs/file.c
#   2004/05/10 04:25:40-07:00 akpm@osdl.org +1 -0
#   reiserfs: ACL support
# 
# fs/reiserfs/Makefile
#   2004/05/10 04:25:40-07:00 akpm@osdl.org +4 -0
#   reiserfs: ACL support
# 
# fs/Kconfig
#   2004/05/10 04:25:40-07:00 akpm@osdl.org +14 -2
#   reiserfs: ACL support
# 
# fs/reiserfs/xattr_acl.c
#   2004/05/10 04:25:40-07:00 akpm@osdl.org +0 -0
#   BitKeeper file /home/torvalds/v2.6/linux/fs/reiserfs/xattr_acl.c
# 
# ChangeSet
#   2004/05/10 13:59:13-07:00 akpm@osdl.org 
#   [PATCH] reiserfs: xattr support
#   
#   From: Chris Mason <mason@suse.com>
#   
#   From: jeffm@suse.com
#   
#   reiserfs support for xattrs
# 
# include/linux/reiserfs_xattr.h
#   2004/05/10 04:25:40-07:00 akpm@osdl.org +100 -0
#   reiserfs: xattr support
# 
# fs/reiserfs/xattr_user.c
#   2004/05/10 04:25:40-07:00 akpm@osdl.org +95 -0
#   reiserfs: xattr support
# 
# fs/reiserfs/xattr.c
#   2004/05/10 04:25:40-07:00 akpm@osdl.org +1348 -0
#   reiserfs: xattr support
# 
# include/linux/reiserfs_xattr.h
#   2004/05/10 04:25:40-07:00 akpm@osdl.org +0 -0
#   BitKeeper file /home/torvalds/v2.6/linux/include/linux/reiserfs_xattr.h
# 
# include/linux/reiserfs_fs_sb.h
#   2004/05/10 04:25:40-07:00 akpm@osdl.org +10 -1
#   reiserfs: xattr support
# 
# include/linux/reiserfs_fs_i.h
#   2004/05/10 04:25:40-07:00 akpm@osdl.org +2 -1
#   reiserfs: xattr support
# 
# include/linux/reiserfs_fs.h
#   2004/05/10 04:25:40-07:00 akpm@osdl.org +7 -1
#   reiserfs: xattr support
# 
# fs/reiserfs/xattr_user.c
#   2004/05/10 04:25:40-07:00 akpm@osdl.org +0 -0
#   BitKeeper file /home/torvalds/v2.6/linux/fs/reiserfs/xattr_user.c
# 
# fs/reiserfs/xattr.c
#   2004/05/10 04:25:40-07:00 akpm@osdl.org +0 -0
#   BitKeeper file /home/torvalds/v2.6/linux/fs/reiserfs/xattr.c
# 
# fs/reiserfs/super.c
#   2004/05/10 04:25:40-07:00 akpm@osdl.org +43 -3
#   reiserfs: xattr support
# 
# fs/reiserfs/namei.c
#   2004/05/10 04:25:40-07:00 akpm@osdl.org +53 -1
#   reiserfs: xattr support
# 
# fs/reiserfs/inode.c
#   2004/05/10 04:25:40-07:00 akpm@osdl.org +64 -1
#   reiserfs: xattr support
# 
# fs/reiserfs/file.c
#   2004/05/10 04:25:40-07:00 akpm@osdl.org +6 -45
#   reiserfs: xattr support
# 
# fs/reiserfs/dir.c
#   2004/05/10 04:25:40-07:00 akpm@osdl.org +11 -0
#   reiserfs: xattr support
# 
# fs/reiserfs/Makefile
#   2004/05/10 04:25:40-07:00 akpm@osdl.org +4 -0
#   reiserfs: xattr support
# 
# fs/Kconfig
#   2004/05/10 04:25:40-07:00 akpm@osdl.org +10 -0
#   reiserfs: xattr support
# 
# ChangeSet
#   2004/05/10 13:59:01-07:00 akpm@osdl.org 
#   [PATCH] reiserfs: acl device node initialization
#   
#   From: Chris Mason <mason@suse.com>
#   
#   From: jeffm@suse.com
#   
#   properly init device inodes in the acl code
# 
# fs/reiserfs/namei.c
#   2004/05/10 04:25:40-07:00 akpm@osdl.org +1 -1
#   reiserfs: acl device node initialization
# 
# ChangeSet
#   2004/05/10 13:58:51-07:00 akpm@osdl.org 
#   [PATCH] Reiserfs commit default fix
#   
#   From: Bart Samwel <bart@samwel.tk>
#   
#   This patch from Micha Feigin fixes some bugs in the earlier reiserfs 
#   commit default patch. The changelog:
#   
#   * If you remounted without any commit=NNN option, it would assume commit=0
#     and restore the defaults.  This patch makes it leave the current state alone
#     if you don't pass commit=NNN.
#   
#   * Added range check for cast from unsigned long to unsigned int.
# 
# fs/reiserfs/super.c
#   2004/05/10 04:25:39-07:00 akpm@osdl.org +7 -7
#   Reiserfs commit default fix
# 
# ChangeSet
#   2004/05/10 13:58:41-07:00 akpm@osdl.org 
#   [PATCH] partitioning cleanup: use DOS_EXTENDED_PARTITION
#   
#   From: FabF <Fabian.Frederick@skynet.be>
#   
#   Use the pre-existing enum rather than magic numbers.
# 
# fs/partitions/msdos.c
#   2004/05/10 04:25:39-07:00 akpm@osdl.org +3 -3
#   partitioning cleanup: use DOS_EXTENDED_PARTITION
# 
# ChangeSet
#   2004/05/10 13:58:30-07:00 akpm@osdl.org 
#   [PATCH] fix 3c59x.c to allow 3c905c 100bT-FD
#   
#   From: Burton Windle <bwindle@fint.org>
#   
#   Fix the 3c905C 10/100 transceiver initialisation woes.
# 
# drivers/net/3c59x.c
#   2004/05/10 04:25:39-07:00 akpm@osdl.org +1 -1
#   fix 3c59x.c to allow 3c905c 100bT-FD
# 
# ChangeSet
#   2004/05/10 13:58:20-07:00 akpm@osdl.org 
#   [PATCH] shrink_slab: improved handling of GFP_NOFS allocations
#   
#   Currently, shrink_slab() will decide that it needs to scan a certain number of
#   dentries, will call shrink_dcache_memory() requesting that this be done, and
#   shrink_dcache_memory() will simply bale out without doing anything because the
#   caller did not have __GFP_FS.
#   
#   This has the potential to disrupt our lovely pagecache-vs-slab balancing act. 
#   So change things so that shrinker callouts can return -1, indicating that they
#   baled out.  This way, shrink_slab can remember that this slab was owed a
#   certain number of scannings and these will be correctly performed next time a
#   __GFP_FS caller comes by.
# 
# mm/vmscan.c
#   2004/05/10 04:25:38-07:00 akpm@osdl.org +15 -12
#   shrink_slab: improved handling of GFP_NOFS allocations
# 
# fs/dcache.c
#   2004/05/10 04:25:38-07:00 akpm@osdl.org +13 -14
#   shrink_slab: improved handling of GFP_NOFS allocations
# 
# ChangeSet
#   2004/05/10 13:58:09-07:00 akpm@osdl.org 
#   [PATCH] New version of early CPU detect
#   
#   From: Andi Kleen <ak@suse.de>
#   
#   We still need some kind of early CPU detection, e.g.  for the AMD768
#   workaround and for the slab allocator to size its slabs correctly for the
#   cache line.  Also some other code already had private early CPU routines.
#   
#   This patch takes a new approach compared to the previous patch which caused
#   Andrew so much grief.  It only fills in a few selected fields in
#   boot_cpu_data (only the data needed to identify the CPU type and the cache
#   alignment).  In particular the feature masks are not filled in, and the
#   other fields are also not touched to prevent unwanted side effects.
#   
#   Also convert the ppro workaround to use standard cpu data now. 
#   
#   I'm not sure if slab still has the necessary support to use the cache line
#   size early; previously Manfred showed some serious memory saving with this
#   for kernels that are compiled for a bigger cache line size than the CPU (is
#   often the case on distribution kernels).  This code could be reenable now
#   with this patch.
# 
# include/asm-i386/processor.h
#   2004/05/10 04:25:38-07:00 akpm@osdl.org +1 -0
#   New version of early CPU detect
# 
# arch/i386/kernel/cpu/intel.c
#   2004/05/10 04:25:38-07:00 akpm@osdl.org +14 -33
#   New version of early CPU detect
# 
# arch/i386/kernel/cpu/cpu.h
#   2004/05/10 04:25:38-07:00 akpm@osdl.org +3 -0
#   New version of early CPU detect
# 
# arch/i386/kernel/cpu/common.c
#   2004/05/10 04:25:38-07:00 akpm@osdl.org +44 -5
#   New version of early CPU detect
# 
# ChangeSet
#   2004/05/10 13:57:58-07:00 akpm@osdl.org 
#   [PATCH] remove some unused variables in s2io
#   
#   From: Anton Blanchard <anton@samba.org>
#   
#   Found a few warnings when compiling with NAPI off.
# 
# drivers/net/s2io.c
#   2004/05/10 04:25:38-07:00 akpm@osdl.org +0 -3
#   remove some unused variables in s2io
# 
# ChangeSet
#   2004/05/10 13:57:48-07:00 akpm@osdl.org 
#   [PATCH] Remove bootsect_helper on x86_64 and pc98
#   
#   From: Coywolf Qi Hunt <coywolf@greatcn.org>
#   
#   Since "Direct booting from floppy is no longer supported", this patch is
#   remove the bootsect_helper code from x86_64 and PC-9800.
# 
# arch/x86_64/boot/setup.S
#   2004/05/10 04:25:38-07:00 akpm@osdl.org +1 -82
#   Remove bootsect_helper on x86_64 and pc98
# 
# arch/i386/boot98/setup.S
#   2004/05/10 04:25:38-07:00 akpm@osdl.org +1 -86
#   Remove bootsect_helper on x86_64 and pc98
# 
# ChangeSet
#   2004/05/10 13:57:37-07:00 akpm@osdl.org 
#   [PATCH] Remove bootsect_helper and a comment fix
#   
#   From: Coywolf Qi Hunt <coywolf@greatcn.org>
#   
#   Since "Direct booting from floppy is no longer supported", this patch is to
#   remove the bootsect_helper code.  And also a comment fix.
#   
#   The other two platforms x86_64 and PC-9800 should also be cleaned up too.
# 
# arch/i386/boot/setup.S
#   2004/05/10 04:25:38-07:00 akpm@osdl.org +2 -84
#   Remove bootsect_helper and a comment fix
# 
# ChangeSet
#   2004/05/10 13:57:26-07:00 akpm@osdl.org 
#   [PATCH] ppc32: ppc8xx build fixes
#   
#   From: "Prof. BJ" <prof.bj@freemail.hu>
#   
#   - m8xx_setup warning and mfmsr error fix
#   - ppc8xx_pic include error fix
#   - tqm8xxl.c typeing (syntax) error fix
#   - commproc.c include error and prototype warning fix
#   
#   (acked by Matt Porter)
# 
# drivers/mtd/maps/tqm8xxl.c
#   2004/05/10 04:25:37-07:00 akpm@osdl.org +1 -1
#   ppc32: ppc8xx build fixes
# 
# arch/ppc/syslib/ppc8xx_pic.h
#   2004/05/10 04:25:37-07:00 akpm@osdl.org +1 -0
#   ppc32: ppc8xx build fixes
# 
# arch/ppc/syslib/m8xx_setup.c
#   2004/05/10 04:25:37-07:00 akpm@osdl.org +3 -4
#   ppc32: ppc8xx build fixes
# 
# arch/ppc/8xx_io/commproc.c
#   2004/05/10 04:25:37-07:00 akpm@osdl.org +2 -2
#   ppc32: ppc8xx build fixes
# 
# ChangeSet
#   2004/05/10 13:57:16-07:00 akpm@osdl.org 
#   [PATCH] es7000 subarch update
#   
#   From: "Protasevich, Natalie" <Natalie.Protasevich@UNISYS.com>
#   
#   The patch fixes a problem with ES7000 Server Management mechanism that uses
#   platform register mip_port.  It was not initialized, so the mechanism was not
#   functional.
#   
#   The patch also fixes the APIC destination for hierarchical and flat cluster
#   models used in ES7000.  The destination ID's reflect policies for Cascade
#   based systems which use logical delivery and lowest priority mechanism, and
#   for xAPIC based models that use physical delivery and fixed APIC destinations.
#   
#   The patch also turns on NO_IOAPIC_CHECK (1) to avoid error messages and
#   attempts to re-write the ID, because on ES7000 all ID's are hard coded in the
#   BIOS and cannot be altered.
# 
# include/asm-i386/mach-es7000/mach_apic.h
#   2004/05/10 04:25:37-07:00 akpm@osdl.org +9 -1
#   es7000 subarch update
# 
# arch/i386/mach-es7000/es7000.h
#   2004/05/10 04:25:37-07:00 akpm@osdl.org +1 -0
#   es7000 subarch update
# 
# arch/i386/mach-es7000/es7000.c
#   2004/05/10 04:25:37-07:00 akpm@osdl.org +1 -0
#   es7000 subarch update
# 
# ChangeSet
#   2004/05/10 13:57:05-07:00 akpm@osdl.org 
#   [PATCH] Consolidate sys32_nfsservctl
#   
#   From: Arnd Bergmann <arnd@arndb.de>
#   
#   sys32_nfsservctl is the largest remaining syscall emulation handler that can
#   be consolidated.  mips and ia64 currently don't use this at all, parisc has a
#   simpler implementation than the one used by s390, sparc ppc and that the new
#   compat_sys_nfsservctl is based on.
#   
#   The user access checks in the code are inconsistant at least, which should be
#   fixed here.
#   
#   Compile tested only due to lack of proper test setup.
# 
# fs/compat.c
#   2004/05/10 04:25:37-07:00 akpm@osdl.org +239 -0
#   Consolidate sys32_nfsservctl
# 
# arch/x86_64/ia32/sys_ia32.c
#   2004/05/10 04:25:37-07:00 akpm@osdl.org +0 -227
#   Consolidate sys32_nfsservctl
# 
# arch/x86_64/ia32/ia32entry.S
#   2004/05/10 04:25:37-07:00 akpm@osdl.org +1 -1
#   Consolidate sys32_nfsservctl
# 
# arch/sparc64/kernel/systbls.S
#   2004/05/10 04:25:37-07:00 akpm@osdl.org +1 -1
#   Consolidate sys32_nfsservctl
# 
# arch/sparc64/kernel/sys_sparc32.c
#   2004/05/10 04:25:37-07:00 akpm@osdl.org +0 -226
#   Consolidate sys32_nfsservctl
# 
# arch/s390/kernel/syscalls.S
#   2004/05/10 04:25:37-07:00 akpm@osdl.org +1 -1
#   Consolidate sys32_nfsservctl
# 
# arch/s390/kernel/compat_wrapper.S
#   2004/05/10 04:25:37-07:00 akpm@osdl.org +5 -5
#   Consolidate sys32_nfsservctl
# 
# arch/s390/kernel/compat_linux.c
#   2004/05/10 04:25:37-07:00 akpm@osdl.org +0 -220
#   Consolidate sys32_nfsservctl
# 
# arch/ppc64/kernel/sys_ppc32.c
#   2004/05/10 04:25:37-07:00 akpm@osdl.org +0 -239
#   Consolidate sys32_nfsservctl
# 
# arch/ppc64/kernel/misc.S
#   2004/05/10 04:25:37-07:00 akpm@osdl.org +1 -1
#   Consolidate sys32_nfsservctl
# 
# arch/parisc/kernel/syscall_table.S
#   2004/05/10 04:25:37-07:00 akpm@osdl.org +1 -1
#   Consolidate sys32_nfsservctl
# 
# arch/parisc/kernel/sys_parisc32.c
#   2004/05/10 04:25:37-07:00 akpm@osdl.org +0 -88
#   Consolidate sys32_nfsservctl
# 
# arch/ia64/ia32/sys_ia32.c
#   2004/05/10 04:25:37-07:00 akpm@osdl.org +0 -170
#   Consolidate sys32_nfsservctl
# 
# ChangeSet
#   2004/05/10 13:56:53-07:00 akpm@osdl.org 
#   [PATCH] Consolidate sys32_select
#   
#   From: Arnd Bergmann <arnd@arndb.de>
#   
#   sys32_select has seven mostly but not exactly identical versions, so
#   consolidate them as compat_sys_select.  Based on the ppc64 implementation,
#   which most closely resembles sys_select.  One bug that was not caught by LTP
#   has been fixed since the first version of this patch.
#   
#   tested x86_64, ia64 and s390.
# 
# include/linux/compat.h
#   2004/05/10 04:25:36-07:00 akpm@osdl.org +4 -0
#   Consolidate sys32_select
# 
# fs/compat.c
#   2004/05/10 04:25:36-07:00 akpm@osdl.org +188 -0
#   Consolidate sys32_select
# 
# arch/x86_64/ia32/sys_ia32.c
#   2004/05/10 04:25:36-07:00 akpm@osdl.org +2 -103
#   Consolidate sys32_select
# 
# arch/x86_64/ia32/ia32entry.S
#   2004/05/10 04:25:36-07:00 akpm@osdl.org +1 -1
#   Consolidate sys32_select
# 
# arch/sparc64/kernel/systbls.S
#   2004/05/10 04:25:36-07:00 akpm@osdl.org +2 -2
#   Consolidate sys32_select
# 
# arch/sparc64/kernel/sys_sunos32.c
#   2004/05/10 04:25:36-07:00 akpm@osdl.org +3 -6
#   Consolidate sys32_select
# 
# arch/sparc64/kernel/sys_sparc32.c
#   2004/05/10 04:25:36-07:00 akpm@osdl.org +0 -152
#   Consolidate sys32_select
# 
# arch/s390/kernel/syscalls.S
#   2004/05/10 04:25:36-07:00 akpm@osdl.org +1 -1
#   Consolidate sys32_select
# 
# arch/s390/kernel/compat_wrapper.S
#   2004/05/10 04:25:36-07:00 akpm@osdl.org +7 -7
#   Consolidate sys32_select
# 
# arch/s390/kernel/compat_linux.c
#   2004/05/10 04:25:36-07:00 akpm@osdl.org +0 -154
#   Consolidate sys32_select
# 
# arch/ppc64/kernel/sys_ppc32.c
#   2004/05/10 04:25:36-07:00 akpm@osdl.org +4 -159
#   Consolidate sys32_select
# 
# arch/parisc/kernel/syscall_table.S
#   2004/05/10 04:25:36-07:00 akpm@osdl.org +1 -1
#   Consolidate sys32_select
# 
# arch/parisc/kernel/sys_parisc32.c
#   2004/05/10 04:25:36-07:00 akpm@osdl.org +0 -121
#   Consolidate sys32_select
# 
# arch/mips/kernel/scall64-o32.S
#   2004/05/10 04:25:36-07:00 akpm@osdl.org +1 -1
#   Consolidate sys32_select
# 
# arch/mips/kernel/scall64-n32.S
#   2004/05/10 04:25:36-07:00 akpm@osdl.org +1 -1
#   Consolidate sys32_select
# 
# arch/mips/kernel/linux32.c
#   2004/05/10 04:25:36-07:00 akpm@osdl.org +0 -161
#   Consolidate sys32_select
# 
# arch/ia64/ia32/sys_ia32.c
#   2004/05/10 04:25:36-07:00 akpm@osdl.org +2 -106
#   Consolidate sys32_select
# 
# arch/ia64/ia32/ia32_entry.S
#   2004/05/10 04:25:36-07:00 akpm@osdl.org +1 -1
#   Consolidate sys32_select
# 
# ChangeSet
#   2004/05/10 13:56:42-07:00 akpm@osdl.org 
#   [PATCH] Consolidate do_execve32
#   
#   From: Arnd Bergmann <arnd@arndb.de>
#   
#   The code for sys32_execve/do_execve32 in most of the seven versions was copied
#   from fs/exec.c but not kept up-to-date.  The new compat_do_execve() function
#   is based on the mips code and has been resync'ed with do_execve().  IA64
#   changes are from Arun Sharma.
#   
#   Tested on x86_64, ia64 and s390
# 
# include/linux/compat.h
#   2004/05/10 04:25:36-07:00 akpm@osdl.org +3 -0
#   Consolidate do_execve32
# 
# fs/compat.c
#   2004/05/10 04:25:36-07:00 akpm@osdl.org +231 -0
#   Consolidate do_execve32
# 
# arch/x86_64/ia32/sys_ia32.c
#   2004/05/10 04:25:36-07:00 akpm@osdl.org +15 -86
#   Consolidate do_execve32
# 
# arch/sparc64/kernel/sys_sparc32.c
#   2004/05/10 04:25:36-07:00 akpm@osdl.org +3 -192
#   Consolidate do_execve32
# 
# arch/s390/kernel/compat_linux.c
#   2004/05/10 04:25:36-07:00 akpm@osdl.org +3 -184
#   Consolidate do_execve32
# 
# arch/ppc64/kernel/sys_ppc32.c
#   2004/05/10 04:25:36-07:00 akpm@osdl.org +1 -186
#   Consolidate do_execve32
# 
# arch/parisc/kernel/sys_parisc32.c
#   2004/05/10 04:25:36-07:00 akpm@osdl.org +2 -185
#   Consolidate do_execve32
# 
# arch/mips/kernel/linux32.c
#   2004/05/10 04:25:36-07:00 akpm@osdl.org +3 -225
#   Consolidate do_execve32
# 
# arch/ia64/ia32/sys_ia32.c
#   2004/05/10 04:25:36-07:00 akpm@osdl.org +14 -56
#   Consolidate do_execve32
# 
# ChangeSet
#   2004/05/10 13:56:32-07:00 akpm@osdl.org 
#   [PATCH] Consolidate sys32_readv and sys32_writev
#   
#   From: Arnd Bergmann <arnd@arndb.de>
#   
#   The seven implementations of this have gone out of sync and are mostly buggy. 
#   The new compat_sys_* version is based on the ppc64 implementation, which most
#   closely resembles the code in sys_readv/sys_writev.
#   
#   Tested on x86_64, ia64 and s390.
# 
# include/linux/compat.h
#   2004/05/10 04:25:35-07:00 akpm@osdl.org +6 -0
#   Consolidate sys32_readv and sys32_writev
# 
# fs/compat.c
#   2004/05/10 04:25:35-07:00 akpm@osdl.org +186 -0
#   Consolidate sys32_readv and sys32_writev
# 
# arch/x86_64/ia32/sys_ia32.c
#   2004/05/10 04:25:35-07:00 akpm@osdl.org +0 -98
#   Consolidate sys32_readv and sys32_writev
# 
# arch/x86_64/ia32/ia32entry.S
#   2004/05/10 04:25:35-07:00 akpm@osdl.org +2 -2
#   Consolidate sys32_readv and sys32_writev
# 
# arch/sparc64/kernel/systbls.S
#   2004/05/10 04:25:35-07:00 akpm@osdl.org +1 -1
#   Consolidate sys32_readv and sys32_writev
# 
# arch/sparc64/kernel/sys_sunos32.c
#   2004/05/10 04:25:35-07:00 akpm@osdl.org +2 -5
#   Consolidate sys32_readv and sys32_writev
# 
# arch/sparc64/kernel/sys_sparc32.c
#   2004/05/10 04:25:35-07:00 akpm@osdl.org +0 -176
#   Consolidate sys32_readv and sys32_writev
# 
# arch/s390/kernel/syscalls.S
#   2004/05/10 04:25:35-07:00 akpm@osdl.org +2 -2
#   Consolidate sys32_readv and sys32_writev
# 
# arch/s390/kernel/compat_wrapper.S
#   2004/05/10 04:25:35-07:00 akpm@osdl.org +8 -8
#   Consolidate sys32_readv and sys32_writev
# 
# arch/s390/kernel/compat_linux.c
#   2004/05/10 04:25:35-07:00 akpm@osdl.org +0 -138
#   Consolidate sys32_readv and sys32_writev
# 
# arch/ppc64/kernel/sys_ppc32.c
#   2004/05/10 04:25:35-07:00 akpm@osdl.org +0 -172
#   Consolidate sys32_readv and sys32_writev
# 
# arch/ppc64/kernel/misc.S
#   2004/05/10 04:25:35-07:00 akpm@osdl.org +2 -2
#   Consolidate sys32_readv and sys32_writev
# 
# arch/parisc/kernel/syscall_table.S
#   2004/05/10 04:25:35-07:00 akpm@osdl.org +2 -2
#   Consolidate sys32_readv and sys32_writev
# 
# arch/parisc/kernel/sys_parisc32.c
#   2004/05/10 04:25:35-07:00 akpm@osdl.org +0 -143
#   Consolidate sys32_readv and sys32_writev
# 
# arch/mips/kernel/scall64-o32.S
#   2004/05/10 04:25:35-07:00 akpm@osdl.org +2 -2
#   Consolidate sys32_readv and sys32_writev
# 
# arch/mips/kernel/scall64-n32.S
#   2004/05/10 04:25:35-07:00 akpm@osdl.org +2 -2
#   Consolidate sys32_readv and sys32_writev
# 
# arch/mips/kernel/linux32.c
#   2004/05/10 04:25:35-07:00 akpm@osdl.org +0 -144
#   Consolidate sys32_readv and sys32_writev
# 
# arch/ia64/ia32/sys_ia32.c
#   2004/05/10 04:25:35-07:00 akpm@osdl.org +0 -79
#   Consolidate sys32_readv and sys32_writev
# 
# arch/ia64/ia32/ia32_entry.S
#   2004/05/10 04:25:35-07:00 akpm@osdl.org +2 -2
#   Consolidate sys32_readv and sys32_writev
# 
# ChangeSet
#   2004/05/10 13:56:20-07:00 akpm@osdl.org 
#   [PATCH] AS: increase batch expiry intervals
#   
#   From: Nick Piggin <nickpiggin@yahoo.com.au>
#   
#   Without disturbing the read/write ratio, increase the bathc expiry
#   intervals.  This wil have the effect of increasing latency a little, but
#   with improved throughput.
# 
# drivers/block/as-iosched.c
#   2004/05/10 04:25:35-07:00 akpm@osdl.org +2 -2
#   AS: increase batch expiry intervals
# 
# ChangeSet
#   2004/05/10 13:56:10-07:00 akpm@osdl.org 
#   [PATCH] Laptop Mode doc update
#   
#   From: <bart@samwel.tk>
#   
#   Richard Atterer reported that mutt does not play well with noatime (it uses
#   access times to check whether new mail has arrived in a folder).  This patch
#   warns about this in the doc, and adds a setting to the control script to
#   disable the noatime remount.
# 
# Documentation/laptop-mode.txt
#   2004/05/10 04:25:35-07:00 akpm@osdl.org +14 -2
#   Laptop Mode doc update
# 
# ChangeSet
#   2004/05/10 13:55:59-07:00 akpm@osdl.org 
#   [PATCH] cyclades MAINTAINERS update
#   
#   From: Marcelo Tosatti <marcelo.tosatti@cyclades.com>
# 
# MAINTAINERS
#   2004/05/10 04:25:35-07:00 akpm@osdl.org +2 -4
#   cyclades MAINTAINERS update
# 
# ChangeSet
#   2004/05/10 13:55:49-07:00 akpm@osdl.org 
#   [PATCH] selinux: reopen descriptors closed on exec to /dev/null
#   
#   From: Stephen Smalley <sds@epoch.ncsc.mil>
#   
#   This patch changes the SELinux module to try to reset any descriptors it
#   closes on exec (due to a lack of permission by the new domain to the inherited
#   open file) to refer to the null device.  This counters the problem of SELinux
#   inducing program misbehavior, particularly due to having descriptors 0-2
#   closed when the new domain is not allowed access to the caller's tty.  This is
#   primarily to address the case where the caller is trusted with respect to the
#   new domain, as the untrusted caller case is already handled via AT_SECURE and
#   glibc secure mode.  The code is partly based on the OpenWall LSM, which in
#   turn drew from the OpenWall kernel patch.  Note that the code does not
#   guarantee that the descriptor is always re-opened to /dev/null; it merely
#   makes a reasonable effort to do so, but can fail under various conditions.
# 
# security/selinux/include/initial_sid_to_string.h
#   2004/05/10 04:25:34-07:00 akpm@osdl.org +1 -0
#   selinux: reopen descriptors closed on exec to /dev/null
# 
# security/selinux/include/flask.h
#   2004/05/10 04:25:34-07:00 akpm@osdl.org +2 -1
#   selinux: reopen descriptors closed on exec to /dev/null
# 
# security/selinux/hooks.c
#   2004/05/10 04:25:34-07:00 akpm@osdl.org +82 -3
#   selinux: reopen descriptors closed on exec to /dev/null
# 
# ChangeSet
#   2004/05/10 13:55:38-07:00 akpm@osdl.org 
#   [PATCH] ext3 error handling fixes
#   
#   From: Andreas Dilger <adilger@clusterfs.com>
#   
#   a) we don't call ext3_error() for an IO error in ext3_find_entry(), so we
#      won't do the normal ext3 error handling (mark SB in error, remount-ro
#      or panic if desired);
#   b) in empty_dir() we don't continue checking for non-empty blocks after a
#      content error (ext3_check_dir_entry() calls ext3_error() already);
#   c) we had decided not to mark the SB in error for holes in directories to
#      allow leway in the indexed-directory implementation, but this change
#      incorrectly also disabled marking the SB in error for real IO errors.
# 
# fs/ext3/namei.c
#   2004/05/10 04:25:34-07:00 akpm@osdl.org +22 -13
#   ext3 error handling fixes
# 
# ChangeSet
#   2004/05/10 13:55:27-07:00 akpm@osdl.org 
#   [PATCH] sched: in_sched_functions() cleanup
#   
#   From: Rusty Russell <rusty@rustcorp.com.au>
#   
#   1) Create an in_sched_functions() function in sched.c and make the
#      archs use it.  (Two archs have wchan #if 0'd out: left them alone).
#   
#   2) Move __sched from linux/init.h to linux/sched.h and add comment.
#   
#   3) Rename __scheduling_functions_start_here/end_here to __sched_text_start/end.
#   
#   Thanks to wli and Sam Ravnborg for clue donation.
# 
# kernel/sched.c
#   2004/05/10 04:25:34-07:00 akpm@osdl.org +8 -7
#   sched: in_sched_functions() cleanup
# 
# include/linux/sched.h
#   2004/05/10 04:25:34-07:00 akpm@osdl.org +4 -2
#   sched: in_sched_functions() cleanup
# 
# include/linux/init.h
#   2004/05/10 04:25:34-07:00 akpm@osdl.org +0 -2
#   sched: in_sched_functions() cleanup
# 
# include/asm-generic/vmlinux.lds.h
#   2004/05/10 04:25:34-07:00 akpm@osdl.org +2 -2
#   sched: in_sched_functions() cleanup
# 
# arch/x86_64/kernel/process.c
#   2004/05/10 04:25:34-07:00 akpm@osdl.org +1 -9
#   sched: in_sched_functions() cleanup
# 
# arch/v850/kernel/process.c
#   2004/05/10 04:25:34-07:00 akpm@osdl.org +2 -2
#   sched: in_sched_functions() cleanup
# 
# arch/sparc64/kernel/process.c
#   2004/05/10 04:25:34-07:00 akpm@osdl.org +1 -2
#   sched: in_sched_functions() cleanup
# 
# arch/sparc/kernel/process.c
#   2004/05/10 04:25:34-07:00 akpm@osdl.org +1 -2
#   sched: in_sched_functions() cleanup
# 
# arch/sh/kernel/process.c
#   2004/05/10 04:25:34-07:00 akpm@osdl.org +1 -7
#   sched: in_sched_functions() cleanup
# 
# arch/s390/kernel/process.c
#   2004/05/10 04:25:34-07:00 akpm@osdl.org +1 -9
#   sched: in_sched_functions() cleanup
# 
# arch/ppc64/kernel/process.c
#   2004/05/10 04:25:34-07:00 akpm@osdl.org +1 -7
#   sched: in_sched_functions() cleanup
# 
# arch/ppc/kernel/process.c
#   2004/05/10 04:25:34-07:00 akpm@osdl.org +1 -7
#   sched: in_sched_functions() cleanup
# 
# arch/mips/kernel/process.c
#   2004/05/10 04:25:34-07:00 akpm@osdl.org +2 -8
#   sched: in_sched_functions() cleanup
# 
# arch/m68knommu/kernel/process.c
#   2004/05/10 04:25:34-07:00 akpm@osdl.org +2 -9
#   sched: in_sched_functions() cleanup
# 
# arch/m68k/kernel/process.c
#   2004/05/10 04:25:34-07:00 akpm@osdl.org +2 -9
#   sched: in_sched_functions() cleanup
# 
# arch/ia64/kernel/process.c
#   2004/05/10 04:25:34-07:00 akpm@osdl.org +1 -8
#   sched: in_sched_functions() cleanup
# 
# arch/i386/kernel/process.c
#   2004/05/10 04:25:34-07:00 akpm@osdl.org +1 -8
#   sched: in_sched_functions() cleanup
# 
# arch/h8300/kernel/process.c
#   2004/05/10 04:25:34-07:00 akpm@osdl.org +1 -7
#   sched: in_sched_functions() cleanup
# 
# arch/cris/arch-v10/kernel/process.c
#   2004/05/10 04:25:34-07:00 akpm@osdl.org +2 -2
#   sched: in_sched_functions() cleanup
# 
# arch/arm26/kernel/process.c
#   2004/05/10 04:25:34-07:00 akpm@osdl.org +1 -7
#   sched: in_sched_functions() cleanup
# 
# arch/arm/kernel/process.c
#   2004/05/10 04:25:34-07:00 akpm@osdl.org +1 -7
#   sched: in_sched_functions() cleanup
# 
# arch/alpha/kernel/process.c
#   2004/05/10 04:25:34-07:00 akpm@osdl.org +1 -7
#   sched: in_sched_functions() cleanup
# 
# ChangeSet
#   2004/05/10 13:55:16-07:00 akpm@osdl.org 
#   [PATCH] Fix ext3 bogus ENOSPC
#   
#   With strange workloads which do a lot of quick truncation on small filesystems
#   it is possible to get into a situation where there are free blocks on the
#   disk, but they are not allocatable at this time due to their having been freed
#   up in the current JBD transaction.  Applications get unexpected ENOSPC errors.
#   
#   We can fix that with this patch, originally by Andreas Dilger which forces a
#   single commit+retry when an ENOSPC is encountered.
# 
# fs/ext3/inode.c
#   2004/05/10 04:25:34-07:00 akpm@osdl.org +15 -2
#   Fix ext3 bogus ENOSPC
# 
# ChangeSet
#   2004/05/10 13:55:06-07:00 akpm@osdl.org 
#   [PATCH] reduce NMI watchdog call frequency with local APIC.
#   
#   From: Mikael Pettersson <mikpe@csd.uu.se>
#   
#   The real problem is that SMP with nmi_watchdog=2 initialises the lapic NMI
#   watchdog but doesn't check it and therefore doesn't reduce nmi_hz.  This is
#   an SMP bug.
#   
#   The patch changes smpboot.c to do a check_nmi_watchdog() at the appropriate
#   place, which fixes the high NMI frequency problem w/o changing anything
#   else.  I've verified that it solves the problem on my MP-capable UP box.
# 
# arch/i386/kernel/smpboot.c
#   2004/05/10 04:25:33-07:00 akpm@osdl.org +3 -0
#   reduce NMI watchdog call frequency with local APIC.
# 
# ChangeSet
#   2004/05/10 13:54:55-07:00 akpm@osdl.org 
#   [PATCH] Fix nmi_watchdog=2 and P4 HT
#   
#   From: Philippe Elie <phil.el@wanadoo.fr>
#   
#   With nmi_watchdog=2 and a P4 ht box the nmi is occurring only on logical
#   processor 0, it's better to get it on both.
#   
#   With this patch, on x86 SMP and nmi_watchdog=2, nmi interupts occur at 1000
#   hz (if the cpu is loaded) not at the intended 1 hz rate but that's a distinct
#   problem.
# 
# arch/i386/kernel/nmi.c
#   2004/05/10 04:25:33-07:00 akpm@osdl.org +12 -5
#   Fix nmi_watchdog=2 and P4 HT
# 
# ChangeSet
#   2004/05/10 13:54:45-07:00 akpm@osdl.org 
#   [PATCH] Fixes in 32 bit ioctl emulation code
#   
#   From: Raghavan <raghav@in.ibm.com>,
#         me
#   
#   I am submitting a patch that fixes 2 race conditions in the 32 bit ioctl
#   emulation code.(fs/compat.c) Since the search is not locked; when a
#   ioctl_trans structure is deleted, corruption can occur.
#   
#   The following scenarios discuss the race conditions:
#   
#   1) When the search is hapenning, if any ioctl_trans structure gets
#      deleted; then rather than searching the hash table, the code will start
#      searching the free list.
#   
#   while (t && t->cmd != cmd)
#           -
# 
# fs/compat.c
#   2004/05/10 04:25:33-07:00 akpm@osdl.org +69 -75
#   Fixes in 32 bit ioctl emulation code
# 
# ChangeSet
#   2004/05/10 13:54:34-07:00 akpm@osdl.org 
#   [PATCH] mips: sgiwd93 2.6 fixes and crapectomy
#   
#   From: Ralf Baechle <ralf@linux-mips.org>
#   
#   Get to work under 2.6 sorting out the giant mess this has been.  Further
#   cleanups would require a full crapectomy of wd33c93.c itself ...
# 
# drivers/scsi/sgiwd93.h
#   2004/05/10 04:25:33-07:00 akpm@osdl.org +1 -1
#   mips: sgiwd93 2.6 fixes and crapectomy
# 
# drivers/scsi/sgiwd93.c
#   2004/05/10 04:25:33-07:00 akpm@osdl.org +214 -181
#   mips: sgiwd93 2.6 fixes and crapectomy
# 
# ChangeSet
#   2004/05/10 13:54:24-07:00 akpm@osdl.org 
#   [PATCH] mips: remove dz driver
#   
#   From: Ralf Baechle <ralf@linux-mips.org>
#   
#   This driver has been obsoleted by drivers/serial/dz.c.
# 
# drivers/char/Makefile
#   2004/05/10 04:25:32-07:00 akpm@osdl.org +0 -1
#   mips: remove dz driver
# 
# BitKeeper/deleted/.del-dz.h~25236ecd58449050
#   2004/05/10 13:54:18-07:00 akpm@osdl.org +0 -0
#   Delete: drivers/char/dz.h
# 
# BitKeeper/deleted/.del-dz.c~828b4cc0c8f0a111
#   2004/05/10 13:54:18-07:00 akpm@osdl.org +0 -0
#   Delete: drivers/char/dz.c
# 
# ChangeSet
#   2004/05/10 13:54:13-07:00 akpm@osdl.org 
#   [PATCH] mips: 64-bit MIPS needs compat stuff
#   
#   From: Ralf Baechle <ralf@linux-mips.org>
# 
# sound/core/Kconfig
#   2004/05/10 04:25:32-07:00 akpm@osdl.org +1 -1
#   mips: 64-bit MIPS needs compat stuff
# 
# ChangeSet
#   2004/05/10 13:54:02-07:00 akpm@osdl.org 
#   [PATCH] mips: add missing IP22 Zilog bit
#   
#   From: Ralf Baechle <ralf@linux-mips.org>
#   
#   Add missing definition PORT_IP22ZILOG which is need by ip22zilog driver.
# 
# include/linux/serial_core.h
#   2004/05/10 04:25:32-07:00 akpm@osdl.org +3 -0
#   mips: add missing IP22 Zilog bit
# 
# ChangeSet
#   2004/05/10 13:53:51-07:00 akpm@osdl.org 
#   [PATCH] mips: GBE Video Driver
#   
#   From: Ralf Baechle <ralf@linux-mips.org>
#   
#   This patch adds the GBE video driver for the video system in SGI IP32
#   aka O2 and it's i386-based equivalent the Visual Workstation.
#                                                                                 
#   This driver obsoletes sgivwfb.c; but I'd prefer to play safe and remove
#   it after some additional time, just in case.
# 
# include/video/gbe.h
#   2004/05/10 04:25:32-07:00 akpm@osdl.org +317 -0
#   mips: GBE Video Driver
# 
# drivers/video/gbefb.c
#   2004/05/10 04:25:32-07:00 akpm@osdl.org +1200 -0
#   mips: GBE Video Driver
# 
# include/video/gbe.h
#   2004/05/10 04:25:32-07:00 akpm@osdl.org +0 -0
#   BitKeeper file /home/torvalds/v2.6/linux/include/video/gbe.h
# 
# drivers/video/gbefb.c
#   2004/05/10 04:25:32-07:00 akpm@osdl.org +0 -0
#   BitKeeper file /home/torvalds/v2.6/linux/drivers/video/gbefb.c
# 
# drivers/video/fbmem.c
#   2004/05/10 04:25:32-07:00 akpm@osdl.org +5 -0
#   mips: GBE Video Driver
# 
# drivers/video/Makefile
#   2004/05/10 04:25:32-07:00 akpm@osdl.org +1 -0
#   mips: GBE Video Driver
# 
# drivers/video/Kconfig
#   2004/05/10 04:25:32-07:00 akpm@osdl.org +15 -0
#   mips: GBE Video Driver
# 
# ChangeSet
#   2004/05/10 13:53:41-07:00 akpm@osdl.org 
#   [PATCH] mips: remove VIDEO_TYPE_SNI_RM
#   
#   From: Ralf Baechle <ralf@linux-mips.org>
#   
#   The RM200's onboard video really is a plain old boring Cyrix PCI card.
# 
# include/linux/tty.h
#   2004/05/10 04:25:31-07:00 akpm@osdl.org +0 -1
#   mips: remove VIDEO_TYPE_SNI_RM
# 
# ChangeSet
#   2004/05/10 13:53:30-07:00 akpm@osdl.org 
#   [PATCH] mips: newport driver fixes
#   
#   From: Ralf Baechle <ralf@linux-mips.org>
#   
#   Make the driver for Newport aka XL work in 2.6.
# 
# drivers/video/console/newport_con.c
#   2004/05/10 04:25:31-07:00 akpm@osdl.org +54 -69
#   mips: newport driver fixes
# 
# drivers/video/console/Makefile
#   2004/05/10 04:25:31-07:00 akpm@osdl.org +1 -1
#   mips: newport driver fixes
# 
# ChangeSet
#   2004/05/10 13:53:19-07:00 akpm@osdl.org 
#   [PATCH] mips: Simplify expression
#   
#   From: Ralf Baechle <ralf@linux-mips.org>
#   
#   CONFIG_MIPS is always defined, for 32-bit and 64-bit.
# 
# drivers/video/logo/logo.c
#   2004/05/10 04:25:31-07:00 akpm@osdl.org +1 -1
#   mips: Simplify expression
# 
# ChangeSet
#   2004/05/10 13:53:07-07:00 akpm@osdl.org 
#   [PATCH] mips: fix 2.6 fb setup
#   
#   From: Ralf Baechle <ralf@linux-mips.org>
# 
# drivers/video/fbmem.c
#   2004/05/10 04:25:31-07:00 akpm@osdl.org +1 -2
#   mips: fix 2.6 fb setup
# 
# ChangeSet
#   2004/05/10 13:52:56-07:00 akpm@osdl.org 
#   [PATCH] MIPS update
#   
#   From: Ralf Baechle <ralf@linux-mips.org>
#   
#    - Kconfig cleanups:
#       - enable DMA_NONCOHERENT, DMA_COHERENT or DMA_IP27 via reverse dependencies
#       - untangle VRC4171 / VRC4173 selection
#       - R10000 support enables PREFETCH
#       - SEAD needs IRQ_CPU
#    - Update defconfig against latest Kconfig files.
#    - Fix computation of return address if syscall number was out of range
#    - Add power managment hooks in signal code.
#    - Don't try to handle signals when previous context was not in user mode.
#    - Fix serial interface setup for VR41xx systems.
#    - Build fixes after CLEAR_BITMAP changed name.
#    - Removes bogus comment from <asm/checksum.h>
#    - <asm/hdreg.h> is dead.
#    - Start collecting common definitions for PMON firmware in <asm/pmon.h>
#    - Define ARCH_MIN_TASKALIGN to 8; we have 64-bit members even on 32-bit
#      kernels if we're running on MIPS II or better.
# 
# include/asm-mips/vr41xx/vr41xx.h
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +13 -7
#   MIPS update
# 
# include/asm-mips/unistd.h
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +33 -6
#   MIPS update
# 
# include/asm-mips/thread_info.h
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +4 -2
#   MIPS update
# 
# include/asm-mips/ptrace.h
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +2 -0
#   MIPS update
# 
# include/asm-mips/processor.h
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +2 -0
#   MIPS update
# 
# include/asm-mips/pmon.h
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +22 -0
#   MIPS update
# 
# include/asm-mips/mach-db1x00/db1x00.h
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +22 -9
#   MIPS update
# 
# include/asm-mips/mach-au1x00/au1000.h
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +17 -2
#   MIPS update
# 
# include/asm-mips/hdreg.h
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +1 -1
#   MIPS update
# 
# include/asm-mips/checksum.h
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +0 -4
#   MIPS update
# 
# arch/mips/vr41xx/zao-capcella/setup.c
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +2 -1
#   MIPS update
# 
# arch/mips/vr41xx/victor-mpc30x/setup.c
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +2 -1
#   MIPS update
# 
# arch/mips/vr41xx/tanbac-tb0229/setup.c
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +4 -1
#   MIPS update
# 
# arch/mips/vr41xx/tanbac-tb0226/setup.c
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +4 -1
#   MIPS update
# 
# arch/mips/vr41xx/nec-eagle/setup.c
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +2 -1
#   MIPS update
# 
# arch/mips/vr41xx/ibm-workpad/setup.c
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +2 -1
#   MIPS update
# 
# arch/mips/vr41xx/common/serial.c
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +46 -39
#   MIPS update
# 
# arch/mips/vr41xx/common/icu.c
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +33 -29
#   MIPS update
# 
# arch/mips/vr41xx/casio-e55/setup.c
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +2 -1
#   MIPS update
# 
# arch/mips/sgi-ip27/ip27-hubio.c
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +3 -3
#   MIPS update
# 
# arch/mips/pci/ops-au1000.c
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +132 -51
#   MIPS update
# 
# arch/mips/pci/fixup-au1000.c
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +58 -8
#   MIPS update
# 
# arch/mips/momentum/ocelot_g/prom.c
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +1 -11
#   MIPS update
# 
# arch/mips/momentum/ocelot_c/prom.c
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +1 -11
#   MIPS update
# 
# arch/mips/momentum/jaguar_atx/prom.c
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +1 -11
#   MIPS update
# 
# arch/mips/kernel/signal_n32.c
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +1 -0
#   MIPS update
# 
# arch/mips/kernel/signal32.c
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +17 -3
#   MIPS update
# 
# arch/mips/kernel/signal.c
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +16 -3
#   MIPS update
# 
# arch/mips/kernel/scall64-o32.S
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +15 -3
#   MIPS update
# 
# arch/mips/kernel/scall64-n32.S
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +19 -3
#   MIPS update
# 
# arch/mips/kernel/scall64-64.S
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +18 -3
#   MIPS update
# 
# arch/mips/kernel/scall32-o32.S
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +16 -3
#   MIPS update
# 
# arch/mips/kernel/ptrace.c
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +10 -1
#   MIPS update
# 
# arch/mips/kernel/mips_ksyms.c
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +3 -0
#   MIPS update
# 
# arch/mips/kernel/irixsig.c
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +16 -3
#   MIPS update
# 
# arch/mips/kernel/irixelf.c
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +1 -1
#   MIPS update
# 
# arch/mips/kernel/entry.S
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +3 -1
#   MIPS update
# 
# arch/mips/gt64120/momenco_ocelot/prom.c
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +1 -11
#   MIPS update
# 
# arch/mips/defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +21 -26
#   MIPS update
# 
# arch/mips/configs/yosemite_defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +19 -26
#   MIPS update
# 
# arch/mips/configs/xxs1500_defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +26 -34
#   MIPS update
# 
# arch/mips/configs/workpad_defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +25 -33
#   MIPS update
# 
# arch/mips/configs/tb0229_defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +33 -40
#   MIPS update
# 
# arch/mips/configs/tb0226_defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +25 -33
#   MIPS update
# 
# arch/mips/configs/sead_defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +4 -5
#   MIPS update
# 
# arch/mips/configs/sb1250-swarm_defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +29 -36
#   MIPS update
# 
# arch/mips/configs/rm200_defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +62 -63
#   MIPS update
# 
# arch/mips/configs/pb1550_defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +35 -43
#   MIPS update
# 
# arch/mips/configs/pb1500_defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +35 -43
#   MIPS update
# 
# arch/mips/configs/pb1100_defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +26 -34
#   MIPS update
# 
# arch/mips/configs/pb1000_defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +26 -34
#   MIPS update
# 
# arch/mips/configs/osprey_defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +18 -26
#   MIPS update
# 
# arch/mips/configs/ocelot_defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +18 -26
#   MIPS update
# 
# arch/mips/configs/ocelot_c_defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +18 -26
#   MIPS update
# 
# arch/mips/configs/mtx1_defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +26 -34
#   MIPS update
# 
# arch/mips/configs/mpc30x_defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +61 -28
#   MIPS update
# 
# arch/mips/configs/mirage_defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +26 -34
#   MIPS update
# 
# arch/mips/configs/malta_defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +28 -36
#   MIPS update
# 
# arch/mips/configs/lasat200_defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +27 -35
#   MIPS update
# 
# arch/mips/configs/jmr3927_defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +28 -36
#   MIPS update
# 
# arch/mips/configs/jaguar-atx_defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +22 -30
#   MIPS update
# 
# arch/mips/configs/ivr_defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +28 -36
#   MIPS update
# 
# arch/mips/configs/it8172_defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +18 -26
#   MIPS update
# 
# arch/mips/configs/ip32_defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +28 -36
#   MIPS update
# 
# arch/mips/configs/ip27_defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +64 -71
#   MIPS update
# 
# arch/mips/configs/ip22_defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +21 -26
#   MIPS update
# 
# arch/mips/configs/ev96100_defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +18 -26
#   MIPS update
# 
# arch/mips/au1000/common/cputable.c
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +56 -0
#   MIPS update
# 
# arch/mips/Kconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +63 -17
#   MIPS update
# 
# include/asm-mips/pmon.h
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +0 -0
#   BitKeeper file /home/torvalds/v2.6/linux/include/asm-mips/pmon.h
# 
# arch/mips/configs/ev64120_defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +32 -40
#   MIPS update
# 
# arch/mips/configs/eagle_defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +29 -37
#   MIPS update
# 
# arch/mips/configs/e55_defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +25 -32
#   MIPS update
# 
# arch/mips/configs/decstation_defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +18 -26
#   MIPS update
# 
# arch/mips/configs/ddb5477_defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +28 -36
#   MIPS update
# 
# arch/mips/configs/ddb5476_defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +28 -36
#   MIPS update
# 
# arch/mips/configs/db1500_defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +26 -34
#   MIPS update
# 
# arch/mips/configs/db1100_defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +26 -34
#   MIPS update
# 
# arch/mips/configs/db1000_defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +26 -34
#   MIPS update
# 
# arch/mips/configs/cobalt_defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +28 -36
#   MIPS update
# 
# arch/mips/configs/capcella_defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +29 -36
#   MIPS update
# 
# arch/mips/configs/bosporus_defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +26 -34
#   MIPS update
# 
# arch/mips/configs/atlas_defconfig
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +28 -36
#   MIPS update
# 
# arch/mips/au1000/common/setup.c
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +13 -24
#   MIPS update
# 
# arch/mips/au1000/common/power.c
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +1 -1
#   MIPS update
# 
# arch/mips/au1000/common/cputable.c
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +0 -0
#   BitKeeper file /home/torvalds/v2.6/linux/arch/mips/au1000/common/cputable.c
# 
# arch/mips/au1000/common/Makefile
#   2004/05/10 04:25:30-07:00 akpm@osdl.org +1 -1
#   MIPS update
# 
# ChangeSet
#   2004/05/10 13:52:43-07:00 akpm@osdl.org 
#   [PATCH] Fix deadlock in journalled quota
#   
#   From: Jan Kara <jack@ucw.cz>
#   
#   Attached patch should fix reported deadlock in journalled quota code.
#   quotactl() call was violating the locking rules and didn't start transaction
#   when it should.
#   
#   From: <raven@themaw.net>
#   
#     Found a couple of symbols not exported that were needed by the ext3.ko
#     module.
# 
# include/linux/quota.h
#   2004/05/10 03:26:52-07:00 akpm@osdl.org +2 -0
#   Fix deadlock in journalled quota
# 
# fs/ext3/super.c
#   2004/05/10 03:26:52-07:00 akpm@osdl.org +36 -0
#   Fix deadlock in journalled quota
# 
# fs/dquot.c
#   2004/05/10 03:26:52-07:00 akpm@osdl.org +6 -2
#   Fix deadlock in journalled quota
# 
# ChangeSet
#   2004/05/10 16:48:38-04:00 len.brown@intel.com 
#   [ACPI] handle _CRS outside _PRS -- even when non-zero
#   avoid sharing IRQ12
#   http://bugzilla.kernel.org/show_bug.cgi?id=2665
# 
# drivers/acpi/pci_link.c
#   2004/05/10 16:42:35-04:00 len.brown@intel.com +11 -5
#   handle _CRS outside _PRS even when non-zero
#   avoid sharing IRQ12
# 
# ChangeSet
#   2004/05/10 15:38:00-05:00 markh@osdl.org 
#   [PATCH] aacraid reset handler fix
#   
#   This fixes a situation where the handler can exit too early.
# 
# drivers/scsi/aacraid/linit.c
#   2004/05/10 06:42:31-05:00 markh@osdl.org +7 -5
#   aacraid reset handler fix
# 
# ChangeSet
#   2004/05/10 13:30:22-07:00 akpm@osdl.org 
#   [PATCH] migration_thread() race fix
#   
#   From: Srivatsa Vaddagiri <vatsa@in.ibm.com>
#   
#   Noticed that migration_thread can examine "kthread_should_stop()?" without
#   setting its state to TASK_INTERRUPTIBLE first.  This can cause kthread_stop
#   on that thread to block forever ...
#   
#   P.S 	- I assumed that having the task state set to TASK_INTERRUTIBLE
#   	  while it is doing active_load_balance is fine. It seemed to be
#   	  the case earlier also.
# 
# kernel/sched.c
#   2004/05/10 03:04:29-07:00 akpm@osdl.org +3 -1
#   migration_thread() race fix
# 
# ChangeSet
#   2004/05/10 13:30:12-07:00 akpm@osdl.org 
#   [PATCH] sched_getaffinity vs cpu hotplug race fix
#   
#   From: Srivatsa Vaddagiri <vatsa@in.ibm.com>
#   
#   Fix the race in sys_sched_getaffinity.  Patch below takes cpu_hotplug lock
#   before reading cpus_allowed mask of a task.
# 
# kernel/sched.c
#   2004/05/10 03:09:41-07:00 akpm@osdl.org +2 -0
#   sched_getaffinity vs cpu hotplug race fix
# 
# ChangeSet
#   2004/05/10 13:30:01-07:00 akpm@osdl.org 
#   [PATCH] Move migrate_all_tasks to CPU_DEAD handling
#   
#   From: Srivatsa Vaddagiri <vatsa@in.ibm.com>
#   
#   migrate_all_tasks is currently run with rest of the machine stopped.
#   It iterates thr' the complete task table, turning off cpu affinity of any task
#   that it finds affine to the dying cpu. Depending on the task table
#   size this can take considerable time. All this time machine is stopped, doing
#   nothing.
#   
#   Stopping the machine for such extended periods can be avoided if we do
#   task migration in CPU_DEAD notification and that's precisely what this patch
#   does.
#   
#   The patch puts idle task to the _front_ of the dying CPU's runqueue at the 
#   highest priority possible. This cause idle thread to run _immediately_ after
#   kstopmachine thread yields. Idle thread notices that its cpu is offline and
#   dies quickly. Task migration can then be done at leisure in CPU_DEAD
#   notification, when rest of the CPUs are running.
#   
#   Some advantages with this approach are:
#   
#   	- More scalable. Predicatable amout of time that machine is stopped.
#   	- No changes to hot path/core code. We are just exploiting scheduler
#   	  rules which runs the next high-priority task on the runqueue. Also
#   	  since I put idle task to the _front_ of the runqueue, there
#   	  are no races when a equally high priority task is woken up
#   	  and added to the runqueue. It gets in at the back of the runqueue,
#   	  _after_ idle task!
#   	- cpu_is_offline check that is presenty required in try_to_wake_up,
#   	  idle_balance and rebalance_tick can be removed, thus speeding them
#   	  up a bit
#   
#   From: Srivatsa Vaddagiri <vatsa@in.ibm.com>
#   
#     Rusty mentioned that the unlikely hints against cpu_is_offline is
#     redundant since the macro already has that hint.  Patch below removes those
#     redundant hints I added.
# 
# kernel/sched.c
#   2004/05/10 03:09:41-07:00 akpm@osdl.org +81 -29
#   Move migrate_all_tasks to CPU_DEAD handling
# 
# kernel/fork.c
#   2004/05/10 03:04:26-07:00 akpm@osdl.org +9 -1
#   Move migrate_all_tasks to CPU_DEAD handling
# 
# kernel/cpu.c
#   2004/05/10 03:04:09-07:00 akpm@osdl.org +20 -9
#   Move migrate_all_tasks to CPU_DEAD handling
# 
# include/linux/sched.h
#   2004/05/10 03:04:09-07:00 akpm@osdl.org +1 -2
#   Move migrate_all_tasks to CPU_DEAD handling
# 
# ChangeSet
#   2004/05/10 13:29:51-07:00 akpm@osdl.org 
#   [PATCH] sched: Look at another CPU's domain
#   
#   From: Nick Piggin <nickpiggin@yahoo.com.au>
#   
#   The SMT wake_idle code really wants to look at a non-local CPU's domain in
#   order to check for idle siblings.
#   
#   So change the domain attachment code a little bit so we continue to hold a
#   runqueue's lock while attaching a new domain.  This means the locking rules
#   have changed to: you may access your own domain without any lock, you must
#   hold a remote runqueue's lock in order to view its domain.
# 
# kernel/sched.c
#   2004/05/10 03:09:41-07:00 akpm@osdl.org +4 -4
#   sched: Look at another CPU's domain
# 
# ChangeSet
#   2004/05/10 13:29:40-07:00 akpm@osdl.org 
#   [PATCH] sched: micro-optimisation for wake_up
#   
#   From: Nick Piggin <nickpiggin@yahoo.com.au>
#   
#   This actually does produce better code, especially under the locked
#   section.
#   
#   Turns a conditional + unconditional jump under the lock in the unlikely
#   case into a cmov outside the lock.
# 
# kernel/sched.c
#   2004/05/10 03:09:41-07:00 akpm@osdl.org +5 -4
#   sched: micro-optimisation for wake_up
# 
# ChangeSet
#   2004/05/10 13:29:30-07:00 akpm@osdl.org 
#   [PATCH] sched: reduce idle time
#   
#   From: Nick Piggin <nickpiggin@yahoo.com.au>
#   
#   It makes NEWLY_IDLE balances cause find_busiest_group return the busiest
#   available group even if there isn't an imbalance.  Basically - try a bit
#   harder to prevent schedule emptying the runqueue.
#   
#   It is quite aggressive, but that isn't so bad because we don't (by default)
#   do NEWLY_IDLE balancing across NUMA nodes, and NEWLY_IDLE balancing is always
#   restricted to cache_hot tasks.
#   
#   It picked up a little bit of idle time that dbt2-pgsql was seeing...
# 
# kernel/sched.c
#   2004/05/10 03:09:41-07:00 akpm@osdl.org +2 -1
#   sched: reduce idle time
# 
# ChangeSet
#   2004/05/10 13:29:19-07:00 akpm@osdl.org 
#   [PATCH] sched: balance-on-clone
#   
#   From: Ingo Molnar <mingo@elte.hu>
#   
#   Implement balancing during clone().  It does the following things:
#   
#   - introduces SD_BALANCE_CLONE that can serve as a tool for an
#     architecture to limit the search-idlest-CPU scope on clone().
#     E.g. the 512-CPU systems should rather not enable this.
#   
#   - uses the highest sd for the imbalance_pct, not this_rq (which didnt
#     make sense).
#   
#   - unifies balance-on-exec and balance-on-clone via the find_idlest_cpu()
#     function. Gets rid of sched_best_cpu() which was still a bit
#     inconsistent IMO, it used 'min_load < load' as a condition for
#     balancing - while a more correct approach would be to use half of the
#     imbalance_pct, like passive balancing does.
#   
#   - the patch also reintroduces the possibility to do SD_BALANCE_EXEC on
#     SMP systems, and activates it - to get testing.
#   
#   - NOTE: there's one thing in this patch that is slightly unclean: i
#     introduced wake_up_forked_thread. I did this to make it easier to get
#     rid of this patch later (wake_up_forked_process() has lots of
#     dependencies in various architectures). If this capability remains in
#     the kernel then i'll clean it up and introduce one function for
#     wake_up_forked_process/thread.
#   
#   - NOTE2: i added the SD_BALANCE_CLONE flag to the NUMA CPU template too.
#     Some NUMA architectures probably want to disable this.
# 
# kernel/sched.c
#   2004/05/10 03:09:41-07:00 akpm@osdl.org +133 -36
#   sched: balance-on-clone
# 
# kernel/fork.c
#   2004/05/10 03:09:41-07:00 akpm@osdl.org +17 -3
#   sched: balance-on-clone
# 
# include/linux/sched.h
#   2004/05/10 03:09:41-07:00 akpm@osdl.org +17 -6
#   sched: balance-on-clone
# 
# ChangeSet
#   2004/05/10 13:29:07-07:00 akpm@osdl.org 
#   [PATCH] sched: cpu load management cleanup
#   
#   From: Ingo Molnar <mingo@elte.hu>
#   
#   This does the source/target cleanup.  This is a no-functionality patch which
#   also adds more comments to explain these functions.
# 
# kernel/sched.c
#   2004/05/10 03:09:42-07:00 akpm@osdl.org +16 -10
#   sched: cpu load management cleanup
# 
# ChangeSet
#   2004/05/10 13:28:57-07:00 akpm@osdl.org 
#   [PATCH] sched: passive balancing damping
#   
#   From: Nick Piggin <nickpiggin@yahoo.com.au>
#   
#   This patch starts to balance woken processes when half the relevant domain's
#   imbalance_pct is reached.  Previously balancing would start after a small,
#   constant difference in waker/wakee runqueue loads was reached, which would
#   cause too much process movement when there are lots of processes running.
#   
#   It also turns wake balancing into a domain flag while previously it was always
#   on.  Now sched domains can "soft partition" an SMP system without using
#   processor affinities.
# 
# kernel/sched.c
#   2004/05/10 03:09:42-07:00 akpm@osdl.org +19 -16
#   sched: passive balancing damping
# 
# include/linux/sched.h
#   2004/05/10 03:09:42-07:00 akpm@osdl.org +6 -3
#   sched: passive balancing damping
# 
# ChangeSet
#   2004/05/10 13:28:46-07:00 akpm@osdl.org 
#   [PATCH] sched: cleanups
#   
#   From: Ingo Molnar <mingo@elte.hu>
#   
#   This re-adds cleanups which were lost in splitups of an earlier patch.
# 
# kernel/sched.c
#   2004/05/10 03:09:42-07:00 akpm@osdl.org +14 -17
#   sched: cleanups
# 
# ChangeSet
#   2004/05/10 13:28:35-07:00 akpm@osdl.org 
#   [PATCH] sched: lock cpu_attach_domain for hotplug
#   
#   From: Nick Piggin <nickpiggin@yahoo.com.au>
#   
#   The attached patch is required to work correctly with the CPU hotplug
#   framework.  John Hawkes reports successful booting with this.
# 
# kernel/sched.c
#   2004/05/10 03:09:42-07:00 akpm@osdl.org +4 -0
#   sched: lock cpu_attach_domain for hotplug
# 
# ChangeSet
#   2004/05/10 13:28:20-07:00 akpm@osdl.org 
#   [PATCH] sched: extend sync wakeups
#   
#   From: Ingo Molnar <mingo@elte.hu>
#   
#   The attached patch extends sync wakeups to the process sys_exit() path too:
#   the chldwait wakeup can be done sync, since we know that the process is
#   going to exit (and thus deschedule).
#   
#   The most visible effect of this change is strace's behavior on SMP systems:
#   it now stays on a single CPU, together with the traced child.  (previously
#   it would run in parallel to the child, bouncing around madly.)
# 
# kernel/signal.c
#   2004/05/10 03:04:00-07:00 akpm@osdl.org +2 -2
#   sched: extend sync wakeups
# 
# ChangeSet
#   2004/05/10 13:28:10-07:00 akpm@osdl.org 
#   [PATCH] sched: add enqueeu_task_head()
#   
#   From: Ingo Molnar <mingo@elte.hu>
#   
#   Helper function for later patches
# 
# kernel/sched.c
#   2004/05/10 03:09:42-07:00 akpm@osdl.org +15 -0
#   sched: add enqueeu_task_head()
# 
# ChangeSet
#   2004/05/10 13:27:59-07:00 akpm@osdl.org 
#   [PATCH] sched: uninlinings
#   
#   From: Ingo Molnar <mingo@elte.hu>
#   
#   Uninline things
# 
# kernel/sched.c
#   2004/05/10 03:09:42-07:00 akpm@osdl.org +12 -12
#   sched: uninlinings
# 
# ChangeSet
#   2004/05/10 13:27:48-07:00 akpm@osdl.org 
#   [PATCH] sched: minor cleanups
#   
#   From: Nick Piggin <nickpiggin@yahoo.com.au>
#   
#   Minor cleanups from Ingo's patch including task_hot (do it right in
#   try_to_wake_up too).
# 
# kernel/sched.c
#   2004/05/10 03:09:43-07:00 akpm@osdl.org +19 -28
#   sched: minor cleanups
# 
# include/linux/sched.h
#   2004/05/10 03:09:42-07:00 akpm@osdl.org +3 -3
#   sched: minor cleanups
# 
# ChangeSet
#   2004/05/10 13:27:37-07:00 akpm@osdl.org 
#   [PATCH] sched: fix setup races
#   
#   From: Nick Piggin <nickpiggin@yahoo.com.au>
#   
#   De-racify the sched domain setup code.  This involves creating a dummy
#   "init" domain during sched_init (which is called early).
#   
#   When topology information becomes available, the sched domains are then
#   built and attached.  The attach mechanism is asynchronous and uses the
#   migration threads, which perform the switch with interrupts off.  This is a
#   quiescent state, so domains can still be lockless on the read side.  It
#   also allows us to change the domains at runtime without much more work. 
#   This is something SGI is interested in to elegantly do soft partitioning of
#   their systems without having to use hard cpu affinities (which cause
#   balancing problems of their own).
#   
#   The current setup code also has a race somewhere because it is unable to
#   boot on a 384 CPU system.
#   
#   
#   
#   From: Anton Blanchard <anton@samba.org>
#   
#      This is basically a mindless ppc64 merge of the x86 changes to sched
#      domain init code.
#   
#      Actually if I produce a sibling_map[] then the x86 code and the ppc64
#      will be identical.  Maybe we can merge it.
# 
# kernel/sched.c
#   2004/05/10 03:09:43-07:00 akpm@osdl.org +118 -45
#   sched: fix setup races
# 
# include/linux/sched.h
#   2004/05/10 03:09:43-07:00 akpm@osdl.org +3 -7
#   sched: fix setup races
# 
# arch/ppc64/kernel/smp.c
#   2004/05/10 13:27:30-07:00 akpm@osdl.org +63 -121
#   sched: fix setup races
# 
# arch/i386/kernel/smpboot.c
#   2004/05/10 13:27:30-07:00 akpm@osdl.org +59 -74
#   sched: fix setup races
# 
# ChangeSet
#   2004/05/10 13:27:24-07:00 akpm@osdl.org 
#   [PATCH] ARCH_HAS_SCHED_WAKE_BALANCE doesnt exist
#   
#   From: Anton Blanchard <anton@samba.org>
#   
#   It seems someone has been making trivial changes without using grep.
# 
# include/asm-ppc64/processor.h
#   2004/05/10 13:27:18-07:00 akpm@osdl.org +1 -1
#   ARCH_HAS_SCHED_WAKE_BALANCE doesnt exist
# 
# ChangeSet
#   2004/05/10 13:27:13-07:00 akpm@osdl.org 
#   [PATCH] ppc64: sched-domain support
#   
#   From: Anton Blanchard <anton@samba.org>
#   
#   Below are the diffs between the current ppc64 sched init stuff and x86.
#   
#   - Ignore the POWER5 specific stuff, I dont set up a sibling map yet.
#   - What should I set cache_hot_time to?
#   
#   large cpumask typechecking requirements (perhaps useful on x86 as well):
#   - cpu->cpumask = CPU_MASK_NONE -> cpus_clear(cpu->cpumask);
#   - cpus_and(nodemask, node_to_cpumask(i), cpu_possible_map) doesnt work,
#     need to use a temporary
# 
# include/asm-ppc64/processor.h
#   2004/05/10 03:09:43-07:00 akpm@osdl.org +5 -0
#   ppc64: sched-domain support
# 
# arch/ppc64/kernel/smp.c
#   2004/05/10 03:09:43-07:00 akpm@osdl.org +273 -5
#   ppc64: sched-domain support
# 
# arch/ppc64/Kconfig
#   2004/05/10 13:27:07-07:00 akpm@osdl.org +9 -0
#   ppc64: sched-domain support
# 
# ChangeSet
#   2004/05/10 13:27:02-07:00 akpm@osdl.org 
#   [PATCH] sched: oops fix
#   
#   From: Nick Piggin <nickpiggin@yahoo.com.au>
#   
#   After the for_each_domain change, the warn here won't trigger, instead it
#   will oops in the if statement.  Also, make sure we don't pass an empty
#   cpumask to for_each_cpu.
# 
# kernel/sched.c
#   2004/05/10 03:09:43-07:00 akpm@osdl.org +5 -6
#   sched: oops fix
# 
# ChangeSet
#   2004/05/10 13:26:51-07:00 akpm@osdl.org 
#   [PATCH] sched: altix tuning
#   
#   From: Nick Piggin <nickpiggin@yahoo.com.au>
#   
#   From: John Hawkes
#   
#   The following brings up performance on a 64-way Altix.  This system being on
#   the smaller end of the scale should also be applicable to other NUMA systems.
# 
# include/linux/sched.h
#   2004/05/10 03:09:43-07:00 akpm@osdl.org +1 -1
#   sched: altix tuning
# 
# ChangeSet
#   2004/05/10 13:26:40-07:00 akpm@osdl.org 
#   [PATCH] sched: fix imbalance calculations
#   
#   From: Nick Piggin <nickpiggin@yahoo.com.au>
#   
#   Imbalance calculations were not right.  This would cause unneeded migration.
# 
# kernel/sched.c
#   2004/05/10 03:09:43-07:00 akpm@osdl.org +22 -16
#   sched: fix imbalance calculations
# 
# ChangeSet
#   2004/05/10 13:26:30-07:00 akpm@osdl.org 
#   [PATCH] sched: wakeup balancing fixes
#   
#   From: Nick Piggin <nickpiggin@yahoo.com.au>
#   
#   Make affine wakes and "passive load balancing" more conservative.  Aggressive
#   affine wakeups were causing huge regressions in dbt3-pgsql on 8-way non NUMA
#   systems at OSDL's STP.
# 
# kernel/sched.c
#   2004/05/10 03:09:44-07:00 akpm@osdl.org +17 -7
#   sched: wakeup balancing fixes
# 
# ChangeSet
#   2004/05/10 13:26:19-07:00 akpm@osdl.org 
#   [PATCH] Hotplug CPU sched_balance_exec Fix
#   
#   From: Rusty Russell <rusty@rustcorp.com.au>
#   
#   From: Srivatsa Vaddagiri <vatsa@in.ibm.com>
#   From: Andrew Morton <akpm@osdl.org>
#   From: Rusty Russell <rusty@rustcorp.com.au>
#   
#   We want to get rid of lock_cpu_hotplug() in sched_migrate_task.  Found
#   that lockless migration of execing task is _extremely_ racy.  The
#   races I hit are described below, alongwith probable solutions.
#   
#   Task migration done elsewhere should be safe (?) since they either
#   hold the lock (sys_sched_setaffinity) or are done entirely with preemption 
#   disabled (load_balance).
#   
#      sched_balance_exec does:
#   
#   	a. disables preemption
#   	b. finds new_cpu for current
#   	c. enables preemption
#   	d. calls sched_migrate_task to migrate current to new_cpu
#   
#      and sched_migrate_task does:
#   
#   	e. task_rq_lock(p)
#   	f. migrate_task(p, dest_cpu ..)
#   		(if we have to wait for migration thread)
#   		g. task_rq_unlock()
#   		h. wake_up_process(rq->migration_thread)
#   		i. wait_for_completion()
#   
#      Several things can happen here:
#   
#   	1. new_cpu can go down after h and before migration thread has
#   	   got around to handle the request
#   
#   	   ==> we need to add a cpu_is_offline check in __migrate_task
#   
#   	2. new_cpu can go down between c and d or before f.
#   
#   	   ===> Even though this case is automatically handled by the above 
#   	        change (migrate_task being called on a running task, current,
#   		will delegate migration to migration thread), would it be 
#   	 	good practice to avoid calling migrate_task in the first place
#   		itself when dest_cpu is offline. This means adding another
#   	 	cpu_is_offline check after e in sched_migrate_task
#   
#   	3. The 'current' task can get preempted _immediately_ after
#   	   g and when it comes back, task_cpu(p) can be dead. In
#   	   which case, it is invalid to do wake_up on a non-existent migration 
#   	   thread.  (rq->migration_thread can be NULL).
#   
#   	   ===> We should disable preemption thr' g and h
#   
#   	4. Before migration thread gets around to handle the request, its cpu
#   	   goes dead. This will leave unhandled migration requests in the dead 
#   	   cpu. 
#   
#   	   ===> We need to wakeup sleeping requestors (if any) in CPU_DEAD
#   	        notification.
#   
#   I really wonder if we can get rid of these issues by avoiding balancing at 
#   exec time and instead have it balanced during load_balance ..Alternately
#   if this is valuable and we want to retain it, I think we still need to
#   consider a read/write sem, with sched_migrate_task doing down_read_trylock.
#   This may eliminate the deadlock I hit between cpu_up and CPU_UP_PREPARE 
#   notification, which had forced me away from r/w sem.
#   
#   Anyway patch below addresses the above races. Its against 2.6.6-rc2-mm1
#   and has been tested on a 4way Intel Pentium SMP m/c.
#   
#   
#   Rusty sez:
#   
#   Two other changes:
#   1) I grabbed a reference to the thread, rather than using
#   preempt_disable().  It's the more obvious way I think.
#   
#   2) Why the wait_to_die code?  It might be needed if we move tasks after
#   stop_machine, but for nowI don't see the problem with the migration
#   thread running on the wrong CPU for a bit: nothing is on this runqueue
#   so active_load_balance is safe, and __migrate task will be a noop (due
#   to cpu_is_offline() check).  If there is a problem, your fix is racy,
#   because we could be preempted immediately afterwards.
#   
#   So I just stop the kthread then wakeup any remaining...
# 
# kernel/sched.c
#   2004/05/10 03:09:44-07:00 akpm@osdl.org +28 -9
#   Hotplug CPU sched_balance_exec Fix
# 
# ChangeSet
#   2004/05/10 13:26:09-07:00 akpm@osdl.org 
#   [PATCH] sched: trivial fixes, cleanups
#   
#   From: Ingo Molnar <mingo@elte.hu>
#   
#   The trivial fixes.
#   
#   - added recent trivial bits from Nick's and my patches.
#   - hotplug CPU fix
#   - early init cleanup
# 
# kernel/sched.c
#   2004/05/10 03:09:44-07:00 akpm@osdl.org +244 -245
#   sched: trivial fixes, cleanups
# 
# init/main.c
#   2004/05/10 03:03:59-07:00 akpm@osdl.org +8 -1
#   sched: trivial fixes, cleanups
# 
# include/linux/sched.h
#   2004/05/10 03:09:43-07:00 akpm@osdl.org +16 -11
#   sched: trivial fixes, cleanups
# 
# include/asm-i386/processor.h
#   2004/05/10 03:03:59-07:00 akpm@osdl.org +1 -1
#   sched: trivial fixes, cleanups
# 
# include/asm-i386/param.h
#   2004/05/10 03:03:59-07:00 akpm@osdl.org +3 -1
#   sched: trivial fixes, cleanups
# 
# arch/i386/kernel/smpboot.c
#   2004/05/10 03:09:43-07:00 akpm@osdl.org +5 -5
#   sched: trivial fixes, cleanups
# 
# arch/i386/Kconfig
#   2004/05/10 03:03:59-07:00 akpm@osdl.org +1 -1
#   sched: trivial fixes, cleanups
# 
# ChangeSet
#   2004/05/10 13:25:57-07:00 akpm@osdl.org 
#   [PATCH] Reduce TLB flushing during process migration
#   
#   From: Martin Hicks <mort@wildopensource.com>
#   
#   Another optimization patch from Jack Steiner, intended to reduce TLB
#   flushes during process migration.
#   
#   Most architextures should define tlb_migrate_prepare() to be flush_tlb_mm(),
#   but on i386, it would be a wasted flush, because i386 disconnects previous
#   cpus from the tlb flush automatically.
# 
# kernel/sched.c
#   2004/05/10 03:09:44-07:00 akpm@osdl.org +10 -0
#   Reduce TLB flushing during process migration
# 
# include/asm-ia64/tlb.h
#   2004/05/10 03:03:59-07:00 akpm@osdl.org +2 -0
#   Reduce TLB flushing during process migration
# 
# include/asm-generic/tlb.h
#   2004/05/10 03:03:59-07:00 akpm@osdl.org +2 -0
#   Reduce TLB flushing during process migration
# 
# ChangeSet
#   2004/05/10 13:25:45-07:00 akpm@osdl.org 
#   [PATCH] sched: add local load metrics
#   
#   From: Nick Piggin <piggin@cyberone.com.au>
#   
#   This patch removes the per runqueue array of NR_CPU arrays.  Each time we
#   want to check a remote CPU's load we check nr_running as well anyway, so
#   introduce a cpu_load which is the load of the local runqueue and is kept
#   updated in the timer tick.  Put them in the same cacheline.
#   
#   This has additional benefits of having the cpu_load consistent across all
#   CPUs and more up to date.  It is sampled better too, being updated once per
#   timer tick.
#   
#   This shouldn't make much difference in scheduling behaviour, but all
#   benchmarks are either as good or better on the 16-way NUMAQ: hackbench,
#   reaim, volanomark are about the same, tbench and dbench are maybe a bit
#   better.  kernbench is about one percent better.
#   
#   John reckons it isn't a big deal, but it does save 4K per CPU or 2MB total
#   on his big systems, so I figure it must be a bit kinder on the caches.  I
#   think it is just nicer in general anyway.
# 
# kernel/sched.c
#   2004/05/10 03:09:44-07:00 akpm@osdl.org +30 -43
#   sched: add local load metrics
# 
# ChangeSet
#   2004/05/10 13:25:34-07:00 akpm@osdl.org 
#   [PATCH] sched: SMT niceness handling
#   
#   From: Con Kolivas <kernel@kolivas.org>
#   
#   This patch provides full per-package priority support for SMT processors
#   (aka pentium4 hyperthreading) when combined with CONFIG_SCHED_SMT.
#   
#   It maintains cpu percentage distribution within each physical cpu package
#   by limiting the time a lower priority task can run on a sibling cpu
#   concurrently with a higher priority task.
#   
#   It introduces a new flag into the scheduler domain
#   unsigned int per_cpu_gain;	/* CPU % gained by adding domain cpus */
#   
#   This is empirically set to 15% for pentium4 at the moment and can be
#   modified to support different values dynamically as newer processors come
#   out with improved SMT performance.  It should not matter how many siblings
#   there are.
#   
#   How it works is it compares tasks running on sibling cpus and when a lower
#   static priority task is running it will delay it till
#   high_priority_timeslice * (100 - per_cpu_gain) / 100 <= low_prio_timeslice
#   
#   eg.  a nice 19 task timeslice is 10ms and nice 0 timeslice is 102ms On
#   vanilla the nice 0 task runs on one logical cpu while the nice 19 task runs
#   unabated on the other logical cpu.  With smtnice the nice 0 runs on one
#   logical cpu for 102ms and the nice 19 sleeps till the nice 0 task has 12ms
#   remaining and then will schedule.
#   
#   Real time tasks and kernel threads are not altered by this code, and kernel
#   threads do not delay lower priority user tasks.
#   
#   with lots of thanks to Zwane Mwaikambo and Nick Piggin for help with the
#   coding of this version.
#   
#   If this is merged, it is probably best to delay pushing this upstream in
#   mainline till sched_domains gets tested for at least one major release.
# 
# kernel/sched.c
#   2004/05/10 03:09:44-07:00 akpm@osdl.org +115 -2
#   sched: SMT niceness handling
# 
# include/linux/sched.h
#   2004/05/10 03:09:44-07:00 akpm@osdl.org +5 -0
#   sched: SMT niceness handling
# 
# arch/i386/kernel/smpboot.c
#   2004/05/10 03:09:44-07:00 akpm@osdl.org +10 -2
#   sched: SMT niceness handling
# 
# ChangeSet
#   2004/05/10 13:25:22-07:00 akpm@osdl.org 
#   [PATCH] sched_domains: use cpu_possible_map
#   
#   From: Nick Piggin <piggin@cyberone.com.au>
#   
#   This changes sched domains to contain all possible CPUs, and check for
#   online as needed.  It's in order to play nicely with CPU hotplug.
# 
# kernel/sched.c
#   2004/05/10 03:09:44-07:00 akpm@osdl.org +24 -29
#   sched_domains: use cpu_possible_map
# 
# arch/i386/kernel/smpboot.c
#   2004/05/10 03:09:44-07:00 akpm@osdl.org +11 -11
#   sched_domains: use cpu_possible_map
# 
# ChangeSet
#   2004/05/10 13:25:11-07:00 akpm@osdl.org 
#   [PATCH] sched-group-power
#   
#   From: Nick Piggin <piggin@cyberone.com.au>
#   
#   The following patch implements a cpu_power member to struct sched_group.
#   
#   This allows special casing to be removed for SMT groups in the balancing
#   code.  It does not take CPU hotplug into account yet, but that shouldn't be
#   too hard.
#   
#   I have tested it on the NUMAQ by pretending it has SMT.  Works as expected.
#   Active balances across nodes.
# 
# kernel/sched.c
#   2004/05/10 03:09:45-07:00 akpm@osdl.org +67 -63
#   sched-group-power
# 
# include/linux/sched.h
#   2004/05/10 03:09:44-07:00 akpm@osdl.org +11 -1
#   sched-group-power
# 
# arch/i386/kernel/smpboot.c
#   2004/05/10 03:09:45-07:00 akpm@osdl.org +12 -3
#   sched-group-power
# 
# ChangeSet
#   2004/05/10 13:25:00-07:00 akpm@osdl.org 
#   [PATCH] sched_balance_exec(): don't fiddle with the cpus_allowed mask
#   
#   From: Rusty Russell <rusty@rustcorp.com.au>,
#         Nick Piggin <piggin@cyberone.com.au>
#   
#   The current sched_balance_exec() sets the task's cpus_allowed mask
#   temporarily to move it to a different CPU.  This has several issues,
#   including the fact that a task will see its affinity at a bogus value.
#   
#   So we change the migration_req_t to explicitly specify a destination CPU,
#   rather than the migration thread deriving it from cpus_allowed.  If the
#   requested CPU is no longer valid (racing with another set_cpus_allowed,
#   say), it can be ignored: if the task is not allowed on this CPU, there will
#   be another migration request pending.
#   
#   This change allows sched_balance_exec() to tell the migration thread what
#   to do without changing the cpus_allowed mask.
#   
#   So we rename __set_cpus_allowed() to move_task(), as the cpus_allowed mask
#   is now set by the caller.  And move_task_away(), which the migration thread
#   uses to actually perform the move, is renamed __move_task().
#   
#   I also ignore offline CPUs in sched_best_cpu(), so sched_migrate_task()
#   doesn't need to check for offline CPUs.
#   
#   Ulterior motive: this approach also plays well with CPU Hotplug.
#   Previously that patch might have seen a task with cpus_allowed only
#   containing the dying CPU (temporarily due to sched_balance_exec) and
#   forcibly reset it to all cpus, which might be wrong.  The other approach is
#   to hold the cpucontrol sem around sched_balance_exec(), which is too much
#   of a bottleneck.
# 
# kernel/sched.c
#   2004/05/10 03:09:45-07:00 akpm@osdl.org +33 -34
#   sched_balance_exec(): don't fiddle with the cpus_allowed mask
# 
# ChangeSet
#   2004/05/10 13:24:49-07:00 akpm@osdl.org 
#   [PATCH] sched: handle inter-CPU jiffies skew
#   
#   From: Nick Piggin <piggin@cyberone.com.au>
#   
#   John Hawkes discribed this problem to me:
#   
#   There *is* a small problem in this area, though, that SuSE avoids.
#   "jiffies" gets updated by cpu0.  The other CPUs may, over time, get out of
#   sync (and they're initialized on ia64 to start out being out of sync), so
#   it's no guarantee that every CPU will wake up from its timer interrupt and
#   see a "jiffies" value that is guaranteed to be last_jiffies+1.  Sometimes
#   the jiffies value may be unchanged since the last wakeup.  Sometimes the
#   jiffies value may have incremented by 2 (or more, especially if cpu0's
#   interrupts are disabled for long stretches of time).  So an algoithm that
#   says, "I'll call load_balance() only when jiffies is *exactly* N" is going
#   to fail on occasion, either by calling load_balance() too often or not
#   often enough.  ***
#   
#   I fixed this by adding a last_balance field to struct sched_domain, and
#   working off that.
# 
# kernel/sched.c
#   2004/05/10 03:09:45-07:00 akpm@osdl.org +8 -8
#   sched: handle inter-CPU jiffies skew
# 
# include/linux/sched.h
#   2004/05/10 03:09:45-07:00 akpm@osdl.org +4 -0
#   sched: handle inter-CPU jiffies skew
# 
# ChangeSet
#   2004/05/10 13:24:38-07:00 akpm@osdl.org 
#   [PATCH] sched: implement domains for i386 HT
#   
#   From: Nick Piggin <piggin@cyberone.com.au>
#   
#   The following patch builds a scheduling description for the i386
#   architecture using cpu_sibling_map to set up SMT if CONFIG_SCHED_SMT is
#   set.
#   
#   It could be made more fancy and collapse degenerate domains at runtime (ie.
#   1 sibling per CPU, or 1 NUMA node in the computer).
#   
#   
#   From: Zwane Mwaikambo <zwane@arm.linux.org.uk>
#   
#      This fixes an oops due to cpu_sibling_map being uninitialised when a
#      system with no MP table (most UP boxen) boots a CONFIG_SMT kernel.  What
#      also happens is that the cpu_group lists end up not being terminated
#      properly, but this oops kills it first.  Patch tested on UP w/o MP table,
#      2x P2 and UP Xeon w/ no siblings.
#   
#   From: "Martin J. Bligh" <mbligh@aracnet.com>,
#         Nick Piggin <piggin@cyberone.com.au>
#   
#      Change arch_init_sched_domains to use cpu_online_map
#   
#   From: Anton Blanchard <anton@samba.org>
#   
#      Fix build with NR_CPUS > BITS_PER_LONG
# 
# kernel/sched.c
#   2004/05/10 03:09:45-07:00 akpm@osdl.org +10 -25
#   sched: implement domains for i386 HT
# 
# include/linux/sched.h
#   2004/05/10 03:09:45-07:00 akpm@osdl.org +16 -0
#   sched: implement domains for i386 HT
# 
# include/asm-i386/processor.h
#   2004/05/10 03:09:44-07:00 akpm@osdl.org +5 -0
#   sched: implement domains for i386 HT
# 
# arch/i386/kernel/smpboot.c
#   2004/05/10 03:09:45-07:00 akpm@osdl.org +205 -1
#   sched: implement domains for i386 HT
# 
# arch/i386/Kconfig
#   2004/05/10 03:09:44-07:00 akpm@osdl.org +10 -0
#   sched: implement domains for i386 HT
# 
# ChangeSet
#   2004/05/10 13:24:26-07:00 akpm@osdl.org 
#   [PATCH] sched: cpu_sibling_map to cpu_mask
#   
#   From: Nick Piggin <piggin@cyberone.com.au>
#   
#   This is a (somewhat) trivial patch which converts cpu_sibling_map from an
#   array of CPUs to an array of cpumasks.  Needed for >2 siblings per package,
#   but it actually can simplify code as it allows the cpu_sibling_map to be
#   set up even when there is 1 sibling per package.  Intel want this, I use it
#   in the next patch to build scheduling domains for the P4 HT.
#   
#   From: Thomas Schlichter <thomas.schlichter@web.de>
#   
#      Build fix
#   
#   From: "Pallipadi, Venkatesh" <venkatesh.pallipadi@intel.com>
#   
#      Fix to handle more than 2 siblings per package.
# 
# include/asm-i386/smp.h
#   2004/05/10 03:03:57-07:00 akpm@osdl.org +1 -1
#   sched: cpu_sibling_map to cpu_mask
# 
# arch/i386/oprofile/op_model_p4.c
#   2004/05/10 03:03:57-07:00 akpm@osdl.org +2 -5
#   sched: cpu_sibling_map to cpu_mask
# 
# arch/i386/kernel/smpboot.c
#   2004/05/10 03:09:45-07:00 akpm@osdl.org +21 -19
#   sched: cpu_sibling_map to cpu_mask
# 
# arch/i386/kernel/io_apic.c
#   2004/05/10 03:03:57-07:00 akpm@osdl.org +12 -7
#   sched: cpu_sibling_map to cpu_mask
# 
# arch/i386/kernel/cpu/cpufreq/p4-clockmod.c
#   2004/05/10 03:03:57-07:00 akpm@osdl.org +15 -18
#   sched: cpu_sibling_map to cpu_mask
# 
# ChangeSet
#   2004/05/10 13:24:15-07:00 akpm@osdl.org 
#   [PATCH] scheduler domain balancing improvements
#   
#   From: Nick Piggin <piggin@cyberone.com.au>
#   
#   This patch gets the sched_domain scheduler working better WRT balancing.
#   Its been tested on the NUMAQ.  Among other things it changes to the way SMT
#   load calculation works so as not to active load blances when it shouldn't.
#   
#   It still has a problem with SMT and NUMA: it will put a task on each
#   sibling in a node before moving tasks to another node.  It should probably
#   start moving tasks after each *physical* CPU is filled.
#   
#   To fix, you need "how much CPU power in this domain?" At the moment we
#   approximate # runqueues == CPU power, and hack around it at the CPU
#   physical domain by counting all sibling runqueues as 1.
#   
#   It isn't hard to correctly work the CPU power out, but once CPU hotplug is
#   in the equation it becomes much more hotplug events.  If anyone is actually
#   interested in getting this fixed, that is.
# 
# kernel/sched.c
#   2004/05/10 03:09:45-07:00 akpm@osdl.org +36 -19
#   scheduler domain balancing improvements
# 
# ChangeSet
#   2004/05/10 13:24:05-07:00 akpm@osdl.org 
#   [PATCH] sched_domain debugging
#   
#   From: Nick Piggin <piggin@cyberone.com.au>
#   
#   Anton was attempting to make a sched domain topology for his POWER5 and was
#   having some trouble.
#   
#   This patch only includes code which is ifdefed out, but hopefully it will
#   be of some use to implementors.
# 
# kernel/sched.c
#   2004/05/10 03:09:46-07:00 akpm@osdl.org +78 -0
#   sched_domain debugging
# 
# Documentation/sched-domains.txt
#   2004/05/10 03:03:57-07:00 akpm@osdl.org +7 -0
#   sched_domain debugging
# 
# ChangeSet
#   2004/05/10 13:23:54-07:00 akpm@osdl.org 
#   [PATCH] sched: scheduler domain support
#   
#   From: Nick Piggin <piggin@cyberone.com.au>
#   
#   This is the core sched domains patch.  It can handle any number of levels
#   in a scheduling heirachy, and allows architectures to easily customize how
#   the scheduler behaves.  It also provides progressive balancing backoff
#   needed by SGI on their large systems (although they have not yet tested
#   it).
#   
#   It is built on top of (well, uses ideas from) my previous SMP/NUMA work, and
#   gets results very similar to them when using the default scheduling
#   description.
#   
#   Benchmarks
#   ==========
#   
#   Martin was seeing I think 10-20% better system times in kernbench on the 32
#   way.  I was seeing improvements in dbench, tbench, kernbench, reaim,
#   hackbench on a 16-way NUMAQ.  Hackbench in fact had a non linear element
#   which is all but eliminated.  Large improvements in volanomark.
#   
#   Cross node task migration was decreased in all above benchmarks, sometimes by
#   a factor of 100!!  Cross CPU migration was also generally decreased.  See
#   this post:
#   http://groups.google.com.au/groups?hl=en&lr=&ie=UTF-8&oe=UTF-8&frame=right&th=a406c910b30cbac4&seekm=UAdQ.3hj.5%40gated-at.bofh.it#link2
#   
#   Results on a hyperthreading P4 are equivalent to Ingo's shared runqueues
#   patch (which is a big improvement).
#   
#   Some examples on the 16-way NUMAQ (this is slightly older sched domain code):
#   
#    http://www.kerneltrap.org/~npiggin/w26/hbench.png
#    http://www.kerneltrap.org/~npiggin/w26/vmark.html
#   
#   From: Jes Sorensen <jes@wildopensource.com>
#   
#      Tiny patch to make -mm3 compile on an NUMA box with NR_CPUS >
#      BITS_PER_LONG.
#   
#   From: "Martin J. Bligh" <mbligh@aracnet.com>
#   
#      Fix a minor nit with the find_busiest_group code.  No functional change,
#      but makes the code simpler and clearer.  This patch does two things ... 
#      adds some more expansive comments, and removes this if clause:
#   
#         if (*imbalance < SCHED_LOAD_SCALE
#                         && max_load - this_load > SCHED_LOAD_SCALE)
#   		*imbalance = SCHED_LOAD_SCALE;
#   
#      If we remove the scaling factor, we're basically conditionally doing:
#   
#   	if (*imbalance < 1)
#   		*imbalance = 1;
#   
#      Which is pointless, as the very next thing we do is to remove the
#      scaling factor, rounding up to the nearest integer as we do:
#   
#   	*imbalance = (*imbalance + SCHED_LOAD_SCALE - 1) >> SCHED_LOAD_SHIFT;
#   
#      Thus the if statement is redundant, and only makes the code harder to
#      read ;-)
#   
#   From: Rick Lindsley <ricklind@us.ibm.com>
#   
#      In find_busiest_group(), after we exit the do/while, we select our
#      imbalance.  But max_load, avg_load, and this_load are all unsigned, so
#      min(x,y) will make a bad choice if max_load < avg_load < this_load (that
#      is, a choice between two negative [very large] numbers).
#   
#      Unfortunately, there is a bug when max_load never gets changed from zero
#      (look in the loop and think what happens if the only load on the machine is
#      being created by cpu groups of which we are a member).  And you have a
#      recipe for some really bogus values for imbalance.
#   
#      Even if you fix the max_load == 0 bug, there will still be times when
#      avg_load - this_load will be negative (thus very large) and you'll make the
#      decision to move stuff when you shouldn't have.
#   
#      This patch allows for this_load to set max_load, which if I understand
#      the logic properly is correct.  With this patch applied, the algorithm is
#      *much* more conservative ...  maybe *too* conservative but that's for
#      another round of testing ...
#   
#   From: Ingo Molnar <mingo@elte.hu>
#   
#      sched-find-busiest-fix
# 
# kernel/sched.c
#   2004/05/10 03:09:46-07:00 akpm@osdl.org +818 -348
#   sched: scheduler domain support
# 
# init/main.c
#   2004/05/10 03:09:44-07:00 akpm@osdl.org +1 -1
#   sched: scheduler domain support
# 
# include/linux/sched.h
#   2004/05/10 03:09:45-07:00 akpm@osdl.org +68 -2
#   sched: scheduler domain support
# 
# Documentation/sched-domains.txt
#   2004/05/10 03:09:46-07:00 akpm@osdl.org +48 -0
#   sched: scheduler domain support
# 
# Documentation/sched-domains.txt
#   2004/05/10 03:09:46-07:00 akpm@osdl.org +0 -0
#   BitKeeper file /home/torvalds/v2.6/linux/Documentation/sched-domains.txt
# 
# ChangeSet
#   2004/05/10 13:23:42-07:00 akpm@osdl.org 
#   [PATCH] sched: improved resolution in find_busiest_node
#   
#   From: Nick Piggin <piggin@cyberone.com.au>
#   
#   From: Frank Cornelis <frank.cornelis@elis.ugent.be>
#   
#   In order to get the best possible resolution we need to use NR_CPUS instead
#   of the constant value 10.  load is an int, so no need to worry about
#   overflows...
# 
# kernel/sched.c
#   2004/05/10 03:09:46-07:00 akpm@osdl.org +3 -3
#   sched: improved resolution in find_busiest_node
# 
# ChangeSet
#   2004/05/10 13:23:31-07:00 akpm@osdl.org 
#   [PATCH] small scheduler cleanup
#   
#   From: Ingo Molnar <mingo@elte.hu>
#   
#   From: Nick Piggin <piggin@cyberone.com.au> wrote:
#   
#   It removes the last place where we mess with run_list open coded.
# 
# kernel/sched.c
#   2004/05/10 03:09:46-07:00 akpm@osdl.org +7 -7
#   small scheduler cleanup
# 
# ChangeSet
#   2004/05/10 13:17:31-05:00 jejb@mulgrave.(none) 
#   Add SCSI IPR PCI Ids to pci_ids.h
# 
# include/linux/pci_ids.h
#   2004/05/10 13:17:04-05:00 jejb@mulgrave.(none) +2 -0
#   Add SCSI IPR PCI Ids
# 
# ChangeSet
#   2004/05/10 20:12:34+02:00 marcel@holtmann.org 
#   [Bluetooth] Use type of the parent socket
#   
#   The SELinux fixes for kernel sockets assume that we always use the type
#   SOCK_SEQPACKET, but this must not be the truth. Give the sock->type
#   as argument to sock_create_lite() and everything is correct for the new
#   child socket.
# 
# net/bluetooth/rfcomm/core.c
#   2004/05/10 20:08:06+02:00 marcel@holtmann.org +3 -4
#   Use type of the parent socket
# 
# ChangeSet
#   2004/05/10 13:12:01-04:00 jgarzik@redhat.com 
#   Merge redhat.com:/spare/repo/netdev-2.6/8139too
#   into redhat.com:/spare/repo/net-drivers-2.6
# 
# drivers/net/8139too.c
#   2004/05/10 13:11:57-04:00 jgarzik@redhat.com +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/05/10 11:27:04-05:00 jejb@mulgrave.(none) 
#   Add IBM power RAID driver 2.0.6
#   
#   From: 	Brian King <brking@us.ibm.com>
# 
# drivers/scsi/ipr.h
#   2004/05/10 11:26:37-05:00 jejb@mulgrave.(none) +1251 -0
# 
# drivers/scsi/ipr.c
#   2004/05/10 11:26:37-05:00 jejb@mulgrave.(none) +6012 -0
# 
# drivers/scsi/ipr.h
#   2004/05/10 11:26:37-05:00 jejb@mulgrave.(none) +0 -0
#   BitKeeper file /home/jejb/BK/scsi-misc-2.6/drivers/scsi/ipr.h
# 
# drivers/scsi/ipr.c
#   2004/05/10 11:26:37-05:00 jejb@mulgrave.(none) +0 -0
#   BitKeeper file /home/jejb/BK/scsi-misc-2.6/drivers/scsi/ipr.c
# 
# drivers/scsi/Makefile
#   2004/05/10 11:26:37-05:00 jejb@mulgrave.(none) +1 -0
#   Add IBM power RAID driver 2.0.6
# 
# drivers/scsi/Kconfig
#   2004/05/10 11:26:37-05:00 jejb@mulgrave.(none) +25 -0
#   Add IBM power RAID driver 2.0.6
# 
# drivers/pci/pci.ids
#   2004/05/10 11:26:36-05:00 jejb@mulgrave.(none) +2 -0
#   Add IBM power RAID driver 2.0.6
# 
# MAINTAINERS
#   2004/05/10 11:26:36-05:00 jejb@mulgrave.(none) +5 -0
#   Add IBM power RAID driver 2.0.6
# 
# ChangeSet
#   2004/05/10 10:55:37-05:00 shaggy@austin.ibm.com 
#   JFS: module unload was not removing /proc/fs/jfs/
# 
# fs/jfs/jfs_debug.c
#   2004/05/10 10:55:31-05:00 shaggy@austin.ibm.com +3 -3
#   fix remove_proc_entry argument
# 
# ChangeSet
#   2004/05/10 17:25:27+02:00 marcel@holtmann.org 
#   [Bluetooth] Adapt changes for USB core altsettings
#   
#   The USB core has changed its way the interfaces and the altsettings are
#   stored. The probe routines of the USB based Bluetooth drivers must be
#   changed and in some cases they are simplified.
#   
#   Patch from Alan Stern <stern@rowland.harvard.edu>
# 
# drivers/bluetooth/hci_usb.c
#   2004/05/10 17:21:53+02:00 marcel@holtmann.org +77 -82
#   Adapt changes for USB core altsettings
# 
# drivers/bluetooth/bfusb.c
#   2004/05/10 17:21:48+02:00 marcel@holtmann.org +3 -3
#   Adapt changes for USB core altsettings
# 
# drivers/bluetooth/bcm203x.c
#   2004/05/10 17:20:59+02:00 marcel@holtmann.org +1 -1
#   Adapt changes for USB core altsettings
# 
# ChangeSet
#   2004/05/10 17:11:34+02:00 marcel@holtmann.org 
#   [Bluetooth] Fix disconnect race on ISOC interface
#   
#   The hci_usb_disconnect() gets called recursively when SCO support
#   is enabled and used. This causes sysfs_hash_and_remove() finally to
#   dereference a NULL pointer.
#   
#   Noticed by Sebastian Schmidt <yath@yath.eu.org>
# 
# drivers/bluetooth/hci_usb.c
#   2004/05/10 17:02:36+02:00 marcel@holtmann.org +4 -2
#   Fix disconnect race on ISOC interface
# 
# ChangeSet
#   2004/05/10 09:52:40-05:00 noodles@earth.li 
#   [PATCH] Initio INI-9X00U/UW error handling in 2.6
#   
#   Plumb old error handling into new eh infrastructure.
# 
# drivers/scsi/ini9100u.h
#   2004/04/30 13:39:30-05:00 noodles@earth.li +2 -1
#   Initio INI-9X00U/UW error handling in 2.6
# 
# drivers/scsi/ini9100u.c
#   2004/04/30 13:40:06-05:00 noodles@earth.li +13 -1
#   Initio INI-9X00U/UW error handling in 2.6
# 
# ChangeSet
#   2004/05/10 09:49:16-05:00 jejb@mulgrave.(none) 
#   sym53c500_cs remove irq,ioport scsi attributes
#   
#   From: 	Bob Tracy <rct@gherkin.frus.com>
# 
# drivers/scsi/pcmcia/sym53c500_cs.c
#   2004/05/10 09:49:05-05:00 jejb@mulgrave.(none) +1 -35
#   sym53c500_cs remove irq,ioport scsi attributes
# 
# ChangeSet
#   2004/05/10 09:39:21-05:00 hch@lst.de 
#   [PATCH] mca_53c9x needs CONFIG_MCA_LEGACY
# 
# drivers/scsi/Kconfig
#   2004/05/05 04:52:38-05:00 hch@lst.de +1 -1
#   mca_53c9x needs CONFIG_MCA_LEGACY
# 
# ChangeSet
#   2004/05/10 09:37:24-05:00 hch@lst.de 
#   [PATCH] missing pci_set_master in megaraid
# 
# drivers/scsi/megaraid.c
#   2004/01/31 00:52:56-06:00 hch@lst.de +1 -0
#   missing pci_enable_device in megaraid
# 
# ChangeSet
#   2004/05/10 09:36:45-05:00 hch@lst.de 
#   [PATCH] imm/ppa style police
#   
#   fix remaining style problems after Al ressurrected the drivers.
# 
# drivers/scsi/ppa.h
#   2004/02/22 15:38:12-06:00 hch@lst.de +1 -1
#   imm/ppa style police
# 
# drivers/scsi/ppa.c
#   2004/02/22 15:36:06-06:00 hch@lst.de +18 -12
#   imm/ppa style police
# 
# drivers/scsi/imm.h
#   2004/02/22 15:38:29-06:00 hch@lst.de +1 -1
#   imm/ppa style police
# 
# drivers/scsi/imm.c
#   2004/02/22 15:34:11-06:00 hch@lst.de +22 -18
#   imm/ppa style police
# 
# ChangeSet
#   2004/05/10 09:35:31-05:00 andrew.vasquez@qlogic.com 
#   [PATCH] PATCH [15/15] qla2xxx: Update driver version
#   
#     Update version number to 8.00.00b12-k.
#   
#    drivers/scsi/qla2xxx/qla_version.h |    4 ++--
#    1 files changed, 2 insertions(+), 2 deletions(-)
# 
# drivers/scsi/qla2xxx/qla_version.h
#   2004/05/03 10:17:14-05:00 andrew.vasquez@qlogic.com +2 -2
#   PATCH [15/15] qla2xxx: Update driver version
# 
# ChangeSet
#   2004/05/10 09:34:47-05:00 jejb@mulgrave.(none) 
#   PATCH [14/15] qla2xxx: Resync with latest released firmware -- 3.02.28.
#   
#   From: 	Andrew Vasquez <andrew.vasquez@qlogic.com>
#   
#    drivers/scsi/qla2xxx/ql2300_fw.c |12380 +++++++++++++++++++--------------------
#    drivers/scsi/qla2xxx/ql2322_fw.c |11812 ++++++++++++++++++-------------------
#    drivers/scsi/qla2xxx/ql6312_fw.c |10174 ++++++++++++++++----------------
#    drivers/scsi/qla2xxx/ql6322_fw.c |10352 ++++++++++++++++----------------
#    4 files changed, 22368 insertions(+), 22350 deletions(-)
# 
# drivers/scsi/qla2xxx/ql6322_fw.c
#   2004/05/10 09:34:32-05:00 jejb@mulgrave.(none) +5178 -5174
#   PATCH [14/15] qla2xxx: Resync with latest released firmware -- 3.02.28.
# 
# drivers/scsi/qla2xxx/ql6312_fw.c
#   2004/05/10 09:34:32-05:00 jejb@mulgrave.(none) +5089 -5085
#   PATCH [14/15] qla2xxx: Resync with latest released firmware -- 3.02.28.
# 
# drivers/scsi/qla2xxx/ql2322_fw.c
#   2004/05/10 09:34:31-05:00 jejb@mulgrave.(none) +5909 -5903
#   PATCH [14/15] qla2xxx: Resync with latest released firmware -- 3.02.28.
# 
# drivers/scsi/qla2xxx/ql2300_fw.c
#   2004/05/10 09:34:31-05:00 jejb@mulgrave.(none) +6192 -6188
#   PATCH [14/15] qla2xxx: Resync with latest released firmware -- 3.02.28.
# 
# ChangeSet
#   2004/05/10 09:31:56-05:00 andrew.vasquez@qlogic.com 
#   [PATCH] PATCH [13/15] qla2xxx: Misc. code scrubbing
#   
#     Misc. driver scrubbing:
#   
#     	o Use kernel #define for PCI command register bit.
#   
#     	o Fix rate-limiting check the queue-depth module
#     	  parameter.
#   
#     	o Clean-up comments.
#   
#    drivers/scsi/qla2xxx/qla_init.c |    2 +-
#    drivers/scsi/qla2xxx/qla_mbx.c  |    1 -
#    drivers/scsi/qla2xxx/qla_os.c   |    7 +++----
#    3 files changed, 4 insertions(+), 6 deletions(-)
# 
# drivers/scsi/qla2xxx/qla_os.c
#   2004/05/03 10:16:34-05:00 andrew.vasquez@qlogic.com +3 -4
#   PATCH [13/15] qla2xxx: Misc. code scrubbing
# 
# drivers/scsi/qla2xxx/qla_mbx.c
#   2004/05/03 10:16:34-05:00 andrew.vasquez@qlogic.com +0 -1
#   PATCH [13/15] qla2xxx: Misc. code scrubbing
# 
# drivers/scsi/qla2xxx/qla_init.c
#   2004/05/03 10:16:34-05:00 andrew.vasquez@qlogic.com +1 -1
#   PATCH [13/15] qla2xxx: Misc. code scrubbing
# 
# ChangeSet
#   2004/05/10 09:30:37-05:00 andrew.vasquez@qlogic.com 
#   [PATCH] PATCH [12/15] qla2xxx: RIO/ZIO fixes
#   
#     RIO/ZIO fixes:
#   
#     	o Reduce register access during RIO operation by checking
#     	  for a 'dirtied' signature.
#   
#     	o Fix problem where ZIO mode handling could result in a
#     	  nasty recursive call-frame.
#   
#    drivers/scsi/qla2xxx/qla_os.c |    5 +----
#    1 files changed, 1 insertion(+), 4 deletions(-)
# 
# drivers/scsi/qla2xxx/qla_os.c
#   2004/05/03 10:16:15-05:00 andrew.vasquez@qlogic.com +1 -4
#   PATCH [12/15] qla2xxx: RIO/ZIO fixes
# 
# ChangeSet
#   2004/05/10 09:29:37-05:00 andrew.vasquez@qlogic.com 
#   [PATCH] PATCH [11/15] qla2xxx: /proc fixes
#   
#     /proc file updates:
#   
#     	o Address 'unaligned access' message on ia64 platorms
#     	  while displaying bit-field flags.
#   
#     	o Iterate through the the OS target array to display
#     	  target ID bindings.
#   
#    drivers/scsi/qla2xxx/qla_os.c |   30 ++++++++++++------------------
#    1 files changed, 12 insertions(+), 18 deletions(-)
# 
# drivers/scsi/qla2xxx/qla_os.c
#   2004/05/03 10:15:57-05:00 andrew.vasquez@qlogic.com +12 -18
#   PATCH [11/15] qla2xxx: /proc fixes
# 
# ChangeSet
#   2004/05/10 09:28:20-05:00 andrew.vasquez@qlogic.com 
#   [PATCH] PATCH [10/15] qla2xxx: Use readX_relaxed
#   
#     Jeremy Higdon <jeremy () sgi ! com>:
#   
#     	For those to whom this is new (it was discussed on linux-kernel
#     	and linux-ia64 I believe), normal PCI register reads imply that
#     	PCI DMA writes that occured prior to the PCI MMR (memory mapped
#     	register) read (on the PCI bus) will be reflected in system
#     	memory once the MMR read is complete.
#   
#     	On our platforms, we can speed up the MMR read significantly if
#     	that ordering requirement is "relaxed".
#   
#     	So I attempted to find the common register reads that don't
#     	have a need for this ordering so that I could make them use
#     	this faster read.
#   
#    drivers/scsi/qla2xxx/qla_def.h  |    3 +++
#    drivers/scsi/qla2xxx/qla_iocb.c |    6 +++---
#    drivers/scsi/qla2xxx/qla_isr.c  |    2 +-
#    3 files changed, 7 insertions(+), 4 deletions(-)
# 
# drivers/scsi/qla2xxx/qla_isr.c
#   2004/05/03 10:15:38-05:00 andrew.vasquez@qlogic.com +1 -1
#   PATCH [10/15] qla2xxx: Use readX_relaxed
# 
# drivers/scsi/qla2xxx/qla_iocb.c
#   2004/05/03 10:15:38-05:00 andrew.vasquez@qlogic.com +3 -3
#   PATCH [10/15] qla2xxx: Use readX_relaxed
# 
# drivers/scsi/qla2xxx/qla_def.h
#   2004/05/03 10:15:38-05:00 andrew.vasquez@qlogic.com +3 -0
#   PATCH [10/15] qla2xxx: Use readX_relaxed
# 
# ChangeSet
#   2004/05/10 09:27:07-05:00 andrew.vasquez@qlogic.com 
#   [PATCH] PATCH [9/15]  qla2xxx: Tape command handling fixes
#   
#     Fix several problems when handling commands issued to tape devices:
#   
#     	1) insure commands are not prematurely returned to the mid-layer
#     	   with a failed status during loop/fabric transitions.
#   
#     	2) tape commands tend to have rather 'long' timeout values,
#     	   unfortunately, as the these values increase into the 17 to
#     	   20 minute range (and larger), the cumulative skew of the
#     	   RISC's own timer result in commands being held for seconds
#     	   beyond their defined timeout values.  Compensate for this
#     	   in the driver's command timeout function.
#   
#    drivers/scsi/qla2xxx/qla_def.h  |    3 +
#    drivers/scsi/qla2xxx/qla_init.c |    4 ++
#    drivers/scsi/qla2xxx/qla_isr.c  |   10 ++---
#    drivers/scsi/qla2xxx/qla_os.c   |   74 ++++++++++++++++++++++++++++++++++++----
#    4 files changed, 79 insertions(+), 12 deletions(-)
# 
# drivers/scsi/qla2xxx/qla_os.c
#   2004/05/03 10:15:19-05:00 andrew.vasquez@qlogic.com +68 -6
#   PATCH [9/15]  qla2xxx: Tape command handling fixes
# 
# drivers/scsi/qla2xxx/qla_isr.c
#   2004/05/03 10:15:19-05:00 andrew.vasquez@qlogic.com +5 -5
#   PATCH [9/15]  qla2xxx: Tape command handling fixes
# 
# drivers/scsi/qla2xxx/qla_init.c
#   2004/05/03 10:15:19-05:00 andrew.vasquez@qlogic.com +4 -0
#   PATCH [9/15]  qla2xxx: Tape command handling fixes
# 
# drivers/scsi/qla2xxx/qla_def.h
#   2004/05/03 10:15:19-05:00 andrew.vasquez@qlogic.com +2 -1
#   PATCH [9/15]  qla2xxx: Tape command handling fixes
# 
# ChangeSet
#   2004/05/10 09:25:58-05:00 andrew.vasquez@qlogic.com 
#   [PATCH] PATCH [8/15]  qla2xxx: Volatile topology fixes
#   
#     Fix problem where during ISP initialization in a volatile topology
#     (i.e. fabric environment with large number of streaming RSCNs) the
#     driver would loop indefinitely or hang due to termination of an
#     invalid thread pid.
#   
#    drivers/scsi/qla2xxx/qla_init.c |  142 ++++++++++++++++------------------------
#    drivers/scsi/qla2xxx/qla_os.c   |    1
#    2 files changed, 60 insertions(+), 83 deletions(-)
# 
# drivers/scsi/qla2xxx/qla_os.c
#   2004/05/03 10:15:01-05:00 andrew.vasquez@qlogic.com +1 -0
#   PATCH [8/15]  qla2xxx: Volatile topology fixes
# 
# drivers/scsi/qla2xxx/qla_init.c
#   2004/05/03 10:15:01-05:00 andrew.vasquez@qlogic.com +59 -83
#   PATCH [8/15]  qla2xxx: Volatile topology fixes
# 
# ChangeSet
#   2004/05/10 09:24:46-05:00 andrew.vasquez@qlogic.com 
#   [PATCH] PATCH [7/15]  qla2xxx: Firmware options fixes
#   
#     Cleanup retrieval and update of firmware options:
#   
#     	o Update only valid for non-(2[12]00) ISPs.
#     	o Instruct firmware to return completed IOCBs without
#     	  waiting for an ABTS to complete.
#   
#    drivers/scsi/qla2xxx/qla_init.c |   79 +++++++++++++++++++++++++---------------
#    1 files changed, 50 insertions(+), 29 deletions(-)
# 
# drivers/scsi/qla2xxx/qla_init.c
#   2004/05/03 10:14:42-05:00 andrew.vasquez@qlogic.com +50 -29
#   PATCH [7/15]  qla2xxx: Firmware options fixes
# 
# ChangeSet
#   2004/05/10 09:23:44-05:00 andrew.vasquez@qlogic.com 
#   [PATCH] PATCH [6/15]  qla2xxx: LoopID downcast fix
#   
#     Fix problem where the driver would incorrectly down-cast the target
#     loop_id while retrieving link statistics.
#   
#    drivers/scsi/qla2xxx/qla_gbl.h |    2 +-
#    drivers/scsi/qla2xxx/qla_mbx.c |    2 +-
#    2 files changed, 2 insertions(+), 2 deletions(-)
# 
# drivers/scsi/qla2xxx/qla_mbx.c
#   2004/05/03 10:14:24-05:00 andrew.vasquez@qlogic.com +1 -1
#   PATCH [6/15]  qla2xxx: LoopID downcast fix
# 
# drivers/scsi/qla2xxx/qla_gbl.h
#   2004/05/03 10:14:24-05:00 andrew.vasquez@qlogic.com +1 -1
#   PATCH [6/15]  qla2xxx: LoopID downcast fix
# 
# ChangeSet
#   2004/05/10 09:21:29-05:00 andrew.vasquez@qlogic.com 
#   [PATCH] PATCH [5/15]  qla2xxx: Debug messages during ISP abort
#   
#     Issue a kernel warning message before initiating an ISP abort (big
#     hammer) -- additional debugging mechanism in case of event.
#   
#    drivers/scsi/qla2xxx/qla_mbx.c  |    9 +++++++++
#    drivers/scsi/qla2xxx/qla_os.c   |    2 ++
#    drivers/scsi/qla2xxx/qla_rscn.c |    2 ++
#    3 files changed, 13 insertions(+)
# 
# drivers/scsi/qla2xxx/qla_rscn.c
#   2004/05/03 10:14:05-05:00 andrew.vasquez@qlogic.com +2 -0
#   PATCH [5/15]  qla2xxx: Debug messages during ISP abort
# 
# drivers/scsi/qla2xxx/qla_os.c
#   2004/05/03 10:14:05-05:00 andrew.vasquez@qlogic.com +2 -0
#   PATCH [5/15]  qla2xxx: Debug messages during ISP abort
# 
# drivers/scsi/qla2xxx/qla_mbx.c
#   2004/05/03 10:14:05-05:00 andrew.vasquez@qlogic.com +9 -0
#   PATCH [5/15]  qla2xxx: Debug messages during ISP abort
# 
# ChangeSet
#   2004/05/10 09:20:18-05:00 andrew.vasquez@qlogic.com 
#   [PATCH] PATCH [4/15]  qla2xxx: PortID binding fixes
#   
#     Fix problem where port ID binding would not be honoured when
#     a device was moved within the fabric.
#   
#    drivers/scsi/qla2xxx/qla_init.c |   33 ++++++++++++++++++++++++---------
#    1 files changed, 24 insertions(+), 9 deletions(-)
# 
# drivers/scsi/qla2xxx/qla_init.c
#   2004/05/03 10:13:47-05:00 andrew.vasquez@qlogic.com +24 -9
#   PATCH [4/15]  qla2xxx: PortID binding fixes
# 
# ChangeSet
#   2004/05/10 09:18:48-05:00 andrew.vasquez@qlogic.com 
#   [PATCH] PATCH [3/15]  qla2xxx: 2100 request-q contraints
#   
#     Older, notably the ISP2100, chips have some contraints for the request
#     queue depth and number of scatter-gather elements allowed for a
#     given command.  For this chip, reduce request queue size to 128 and
#     maximum number of scatter-gather entries for a command to 32.
#   
#    drivers/scsi/qla2xxx/qla_def.h  |   14 +++-----------
#    drivers/scsi/qla2xxx/qla_init.c |    9 +++++----
#    drivers/scsi/qla2xxx/qla_iocb.c |   14 +++++++-------
#    drivers/scsi/qla2xxx/qla_os.c   |   14 +++++++++-----
#    drivers/scsi/qla2xxx/qla_rscn.c |    2 +-
#    5 files changed, 25 insertions(+), 28 deletions(-)
# 
# drivers/scsi/qla2xxx/qla_rscn.c
#   2004/05/03 10:13:28-05:00 andrew.vasquez@qlogic.com +1 -1
#   PATCH [3/15]  qla2xxx: 2100 request-q contraints
# 
# drivers/scsi/qla2xxx/qla_os.c
#   2004/05/03 10:13:28-05:00 andrew.vasquez@qlogic.com +9 -5
#   PATCH [3/15]  qla2xxx: 2100 request-q contraints
# 
# drivers/scsi/qla2xxx/qla_iocb.c
#   2004/05/03 10:13:28-05:00 andrew.vasquez@qlogic.com +7 -7
#   PATCH [3/15]  qla2xxx: 2100 request-q contraints
# 
# drivers/scsi/qla2xxx/qla_init.c
#   2004/05/03 10:13:28-05:00 andrew.vasquez@qlogic.com +5 -4
#   PATCH [3/15]  qla2xxx: 2100 request-q contraints
# 
# drivers/scsi/qla2xxx/qla_def.h
#   2004/05/03 10:13:28-05:00 andrew.vasquez@qlogic.com +3 -11
#   PATCH [3/15]  qla2xxx: 2100 request-q contraints
# 
# ChangeSet
#   2004/05/10 09:17:18-05:00 andrew.vasquez@qlogic.com 
#   [PATCH] PATCH [2/15]  qla2xxx: Remove flash routines
#   
#     Remove flash support from embedded driver:
#   
#     	o Remove unused option-rom variables from host structure.
#     	o Remove flash manipulation routines.
#   
#    drivers/scsi/qla2xxx/qla_def.h  |    2
#    drivers/scsi/qla2xxx/qla_gbl.h  |    8
#    drivers/scsi/qla2xxx/qla_init.c |    3
#    drivers/scsi/qla2xxx/qla_sup.c  |  446 ----------------------------------------
#    4 files changed, 459 deletions(-)
# 
# drivers/scsi/qla2xxx/qla_sup.c
#   2004/05/03 10:13:09-05:00 andrew.vasquez@qlogic.com +0 -446
#   PATCH [2/15]  qla2xxx: Remove flash routines
# 
# drivers/scsi/qla2xxx/qla_init.c
#   2004/05/03 10:13:09-05:00 andrew.vasquez@qlogic.com +0 -3
#   PATCH [2/15]  qla2xxx: Remove flash routines
# 
# drivers/scsi/qla2xxx/qla_gbl.h
#   2004/05/03 10:13:09-05:00 andrew.vasquez@qlogic.com +0 -8
#   PATCH [2/15]  qla2xxx: Remove flash routines
# 
# drivers/scsi/qla2xxx/qla_def.h
#   2004/05/03 10:13:09-05:00 andrew.vasquez@qlogic.com +0 -2
#   PATCH [2/15]  qla2xxx: Remove flash routines
# 
# ChangeSet
#   2004/05/10 09:15:55-05:00 andrew.vasquez@qlogic.com 
#   [PATCH] PATCH [1/15]  qla2xxx: Firmware dump fixes
#   
#     ISP dump routine fixes:
#   
#     	o Properly release hardware_lock in failure path.
#   
#     	o Fix inability to complete ISP2100 dump, by properly
#     	  reseting the RISC after register reads.
#   
#    drivers/scsi/qla2xxx/qla_dbg.c |   34 ++++++++++++----------------------
#    1 files changed, 12 insertions(+), 22 deletions(-)
# 
# drivers/scsi/qla2xxx/qla_dbg.c
#   2004/05/03 10:12:51-05:00 andrew.vasquez@qlogic.com +12 -22
#   PATCH [1/15]  qla2xxx: Firmware dump fixes
# 
# ChangeSet
#   2004/05/10 09:15:12-05:00 jejb@mulgrave.(none) 
#   MPT Fusion driver 3.01.06 update
#   
#   From: 	Moore, Eric Dean <Emoore@lsil.com>
# 
# drivers/message/fusion/mptscsih.c
#   2004/05/10 09:14:57-05:00 jejb@mulgrave.(none) +0 -4
#   MPT Fusion driver 3.01.06 update
# 
# drivers/message/fusion/mptbase.h
#   2004/05/10 09:14:57-05:00 jejb@mulgrave.(none) +2 -2
#   MPT Fusion driver 3.01.06 update
# 
# ChangeSet
#   2004/05/10 09:10:59-05:00 brking@us.ibm.com 
#   [PATCH] Make SCSI timeout modifiable
#   
#   add a timeout field to struct scsi_device and expose it in in sysfs.
#   
#   This patch allows LLDs to override the default timeout used for scsi devices
#   and exposes it in sysfs. The default timeout value used is too short for
#   many RAID array devices, such as those created by the ipr driver.
# 
# include/scsi/scsi_device.h
#   2004/04/30 04:52:16-05:00 brking@us.ibm.com +2 -0
#   Make SCSI timeout modifiable
# 
# drivers/scsi/sd.c
#   2004/04/30 04:55:42-05:00 brking@us.ibm.com +8 -3
#   Make SCSI timeout modifiable
# 
# drivers/scsi/scsi_sysfs.c
#   2004/04/30 04:53:56-05:00 brking@us.ibm.com +21 -0
#   Make SCSI timeout modifiable
# 
# ChangeSet
#   2004/05/10 09:56:02+01:00 aia21@cantab.net 
#   NTFS: 2.1.9 release - Fix two bugs in the decompression engine
#         in handling of corner cases.
# 
# fs/ntfs/compress.c
#   2004/05/10 09:55:48+01:00 aia21@cantab.net +22 -7
#   - Fix a bug where we would not always detect that we have reached the
#     end of a compression block because we were ending at minus one byte
#     which is effectively the same as being at the end.  The fix is to
#     check whether the uncompressed buffer has been fully filled and if so
#     we assume we have reached the end of the compression block.  A big
#     thank you to Marcin Gibu\x{0142}a for the bug report, the assistance in
#     tracking down the bug and testing the fix.
#   - Fix a possible bug where when a compressed read is truncated to the
#     end of the file, the offset inside the last page was not truncated.
# 
# fs/ntfs/Makefile
#   2004/05/10 09:55:48+01:00 aia21@cantab.net +1 -1
#   Update version to 2.1.9.
# 
# fs/ntfs/ChangeLog
#   2004/05/10 09:55:48+01:00 aia21@cantab.net +13 -1
#   Update for 2.1.9 release.
# 
# Documentation/filesystems/ntfs.txt
#   2004/05/10 09:55:48+01:00 aia21@cantab.net +2 -0
#   Update for 2.1.9 release.
# 
# ChangeSet
#   2004/05/07 14:22:49-07:00 greg@kroah.com 
#   Add modules to sysfs
#   
#   This patch adds basic kobject support to struct module, and it creates a 
#   /sys/module directory which contains all of the individual modules.  Each
#   module currently exports the refcount (if they are unloadable) and any
#   module paramaters that are marked exportable in sysfs.
#   
#   Was written by me and Rusty over and over many times during the past 6 months.
# 
# kernel/params.c
#   2004/05/07 14:22:37-07:00 greg@kroah.com +1 -1
#   Add modules to sysfs
#   
#   This patch adds basic kobject support to struct module, and it creates a 
#   /sys/module directory which contains all of the individual modules.  Each
#   module currently exports the refcount (if they are unloadable) and any
#   module paramaters that are marked exportable in sysfs.
#   
#   Was written by me and Rusty over and over many times during the past 6 months.
# 
# kernel/module.c
#   2004/05/07 14:22:37-07:00 greg@kroah.com +160 -0
#   Add modules to sysfs
#   
#   This patch adds basic kobject support to struct module, and it creates a 
#   /sys/module directory which contains all of the individual modules.  Each
#   module currently exports the refcount (if they are unloadable) and any
#   module paramaters that are marked exportable in sysfs.
#   
#   Was written by me and Rusty over and over many times during the past 6 months.
# 
# include/linux/moduleparam.h
#   2004/05/07 14:22:37-07:00 greg@kroah.com +2 -2
#   Add modules to sysfs
#   
#   This patch adds basic kobject support to struct module, and it creates a 
#   /sys/module directory which contains all of the individual modules.  Each
#   module currently exports the refcount (if they are unloadable) and any
#   module paramaters that are marked exportable in sysfs.
#   
#   Was written by me and Rusty over and over many times during the past 6 months.
# 
# include/linux/module.h
#   2004/05/07 14:22:37-07:00 greg@kroah.com +25 -0
#   Add modules to sysfs
#   
#   This patch adds basic kobject support to struct module, and it creates a 
#   /sys/module directory which contains all of the individual modules.  Each
#   module currently exports the refcount (if they are unloadable) and any
#   module paramaters that are marked exportable in sysfs.
#   
#   Was written by me and Rusty over and over many times during the past 6 months.
# 
# ChangeSet
#   2004/05/07 16:05:39-05:00 shaggy@austin.ibm.com 
#   JFS: [CHECKER] More robust error recovery in add_index
#   
#   If an error is encountered in add_index, it now leaves the index table
#   in a consistent state.  Since the return value is stored in the
#   directory entry regardless of add_index's success, return zero
#   instead of -EPERM (which made no sense).
# 
# fs/jfs/jfs_dtree.c
#   2004/05/07 16:05:21-05:00 shaggy@austin.ibm.com +16 -12
#   Clean up add_index failure
# 
# ChangeSet
#   2004/05/07 10:32:36-05:00 shaggy@austin.ibm.com 
#   JFS: reduce stack usage
# 
# fs/jfs/jfs_dtree.c
#   2004/05/07 10:32:20-05:00 shaggy@austin.ibm.com +34 -14
#   Get long unicode names off the stack
# 
# ChangeSet
#   2004/05/07 09:38:25-05:00 shaggy@austin.ibm.com 
#   JFS: Avoid race invalidating metadata page
# 
# fs/jfs/jfs_metapage.h
#   2004/05/07 09:38:07-05:00 shaggy@austin.ibm.com +1 -0
#   Avoid race between __get_metapage & release_metapage
# 
# fs/jfs/jfs_metapage.c
#   2004/05/07 09:38:07-05:00 shaggy@austin.ibm.com +67 -40
#   Avoid race between __get_metapage & release_metapage
# 
# ChangeSet
#   2004/05/06 22:45:23-04:00 jgarzik@redhat.com 
#   Merge redhat.com:/spare/repo/linux-2.6
#   into redhat.com:/spare/repo/libata-2.6
# 
# include/linux/pci_ids.h
#   2004/05/06 22:45:19-04:00 jgarzik@redhat.com +0 -0
#   Auto merged
# 
# drivers/scsi/sata_vsc.c
#   2004/05/06 22:45:19-04:00 jgarzik@redhat.com +0 -4
#   Auto merged
# 
# drivers/scsi/sata_sis.c
#   2004/05/06 22:45:19-04:00 jgarzik@redhat.com +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/05/05 16:14:40-07:00 hunold@convergence.de 
#   [PATCH] I2C: add .class to i2c drivers
#   
#   in the "[RFC|PATCH][2.6] Additional i2c adapter flags for i2c client
#   isolation" thread, the i2c people have  agreed that an ".class" field
#   should be added to struct i2c_driver.
#   
#   Currently only drivers do checks for plausibility ("Is this an adapter I
#   can attach to?"), but adapters don't have a chance to keep drivers away
#   from their bus.
#   
#   If both drivers and adapters provide a .class entry, the i2c-core can
#   easily compare them and let devices only probe on busses where they can
#   really exist.
#   
#   Real world example: DVB i2c adapters cannot ensure that only known DVB
#   i2c chipsets probe their busses. Most client drivers probe every bus
#   they get their hands on. This will confuse some DVB i2c busses.
#   
#   With the new I2C_CLASS_ALL flag it will be possible that an adapter can
#   request that really all drivers are probed on the adapter. On the other
#   hand, drivers can make sure that they get the chance to probe on every
#   i2c adapter out there (this is not encouraged, though)
#   
#   The attached patch does the first step:
#   - add .class member to struct i2c_device
#   - remove unused .flags member from struct i2c_adapter
#   - rename I2C_ADAP_CLASS_xxx to I2C_CLASS_xxx (to be used both for
#     drivers and adapters)
#   - add new I2C_CLASS_ALL and I2C_CLASS_SOUND classes
#   - follow these changes in the existing drivers with copy & paste
# 
# include/linux/i2c.h
#   2004/05/05 09:29:31-07:00 hunold@convergence.de +9 -7
#   I2C: add .class to i2c drivers
# 
# drivers/usb/media/w9968cf.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1
#   I2C: add .class to i2c drivers
# 
# drivers/media/video/tvmixer.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +2 -2
#   I2C: add .class to i2c drivers
# 
# drivers/media/video/tvaudio.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +2 -2
#   I2C: add .class to i2c drivers
# 
# drivers/media/video/tuner.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +2 -2
#   I2C: add .class to i2c drivers
# 
# drivers/media/video/tda9887.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +2 -2
#   I2C: add .class to i2c drivers
# 
# drivers/media/video/tda9875.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +2 -2
#   I2C: add .class to i2c drivers
# 
# drivers/media/video/tda7432.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +2 -2
#   I2C: add .class to i2c drivers
# 
# drivers/media/video/saa7134/saa7134-i2c.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +2 -2
#   I2C: add .class to i2c drivers
# 
# drivers/media/video/saa7134/saa6752hs.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1
#   I2C: add .class to i2c drivers
# 
# drivers/media/video/saa5249.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1
#   I2C: add .class to i2c drivers
# 
# drivers/media/video/saa5246a.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1
#   I2C: add .class to i2c drivers
# 
# drivers/media/video/mxb.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1
#   I2C: add .class to i2c drivers
# 
# drivers/media/video/msp3400.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +2 -2
#   I2C: add .class to i2c drivers
# 
# drivers/media/video/hexium_orion.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1
#   I2C: add .class to i2c drivers
# 
# drivers/media/video/hexium_gemini.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1
#   I2C: add .class to i2c drivers
# 
# drivers/media/video/dpc7146.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1
#   I2C: add .class to i2c drivers
# 
# drivers/media/video/cx88/cx88-i2c.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +2 -2
#   I2C: add .class to i2c drivers
# 
# drivers/media/video/bttv-i2c.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +4 -4
#   I2C: add .class to i2c drivers
# 
# drivers/media/video/bt832.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1
#   I2C: add .class to i2c drivers
# 
# drivers/i2c/chips/w83l785ts.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1
#   I2C: add .class to i2c drivers
# 
# drivers/i2c/chips/w83781d.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1
#   I2C: add .class to i2c drivers
# 
# drivers/i2c/chips/via686a.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1
#   I2C: add .class to i2c drivers
# 
# drivers/i2c/chips/lm90.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1
#   I2C: add .class to i2c drivers
# 
# drivers/i2c/chips/lm83.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1
#   I2C: add .class to i2c drivers
# 
# drivers/i2c/chips/lm80.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1
#   I2C: add .class to i2c drivers
# 
# drivers/i2c/chips/lm78.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1
#   I2C: add .class to i2c drivers
# 
# drivers/i2c/chips/lm75.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1
#   I2C: add .class to i2c drivers
# 
# drivers/i2c/chips/it87.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1
#   I2C: add .class to i2c drivers
# 
# drivers/i2c/chips/gl518sm.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1
#   I2C: add .class to i2c drivers
# 
# drivers/i2c/chips/fscher.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1
#   I2C: add .class to i2c drivers
# 
# drivers/i2c/chips/asb100.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1
#   I2C: add .class to i2c drivers
# 
# drivers/i2c/chips/adm1021.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1
#   I2C: add .class to i2c drivers
# 
# drivers/i2c/busses/i2c-voodoo3.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +2 -2
#   I2C: add .class to i2c drivers
# 
# drivers/i2c/busses/i2c-viapro.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1
#   I2C: add .class to i2c drivers
# 
# drivers/i2c/busses/i2c-via.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1
#   I2C: add .class to i2c drivers
# 
# drivers/i2c/busses/i2c-sis96x.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1
#   I2C: add .class to i2c drivers
# 
# drivers/i2c/busses/i2c-sis630.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1
#   I2C: add .class to i2c drivers
# 
# drivers/i2c/busses/i2c-sis5595.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1
#   I2C: add .class to i2c drivers
# 
# drivers/i2c/busses/i2c-piix4.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1
#   I2C: add .class to i2c drivers
# 
# drivers/i2c/busses/i2c-parport.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1
#   I2C: add .class to i2c drivers
# 
# drivers/i2c/busses/i2c-parport-light.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1
#   I2C: add .class to i2c drivers
# 
# drivers/i2c/busses/i2c-nforce2.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1
#   I2C: add .class to i2c drivers
# 
# drivers/i2c/busses/i2c-isa.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1
#   I2C: add .class to i2c drivers
# 
# drivers/i2c/busses/i2c-i801.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1
#   I2C: add .class to i2c drivers
# 
# drivers/i2c/busses/i2c-amd8111.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1
#   I2C: add .class to i2c drivers
# 
# drivers/i2c/busses/i2c-amd756.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1
#   I2C: add .class to i2c drivers
# 
# drivers/i2c/busses/i2c-ali15x3.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1
#   I2C: add .class to i2c drivers
# 
# drivers/i2c/busses/i2c-ali1563.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1
#   I2C: add .class to i2c drivers
# 
# drivers/i2c/busses/i2c-ali1535.c
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +1 -1
#   I2C: add .class to i2c drivers
# 
# Documentation/i2c/porting-clients
#   2004/05/05 02:40:37-07:00 hunold@convergence.de +2 -2
#   I2C: add .class to i2c drivers
# 
# ChangeSet
#   2004/05/05 15:34:40-07:00 khali@linux-fr.org 
#   [PATCH] I2C: Fix memory leaks in w83781d and asb100
#   
#   Quoting myself
#   
#   > U-ho. I think I've introduced a memory leak with this patch :(
#   >
#   > For drivers that handle subclients (asb100 and w83781d on i2c), the
#   > sublient memory is never released if I read the code correctly. This
#   > is because we now free the private data on unload, assuming that it
#   > contains the i2c client data as well. That's true for the main i2c
#   > client, but not for the subclients (data == NULL so nothing is freed).
#   >
#   > Could someone take a look and confirm?
#   
#   I could test and actually saw memory leaking when cycling the w83781d
#   driver at a sustained rate (5/s).
#   
#   > I can see two different fixes:
#   >
#   > 1* When freeing the memory, free the data if it's not NULL (main
#   > client), else free client (subclients). Cleaner (I suppose?).
#   >
#   > 2* When creating subclients, do data = &client instead of data = NULL.
#   > Then freeing will work. Less code, faster. Are there side effects? (I
#   > don't think so)
#   >
#   > My preference would go to 2*.
#   
#   I ended up implementing 1*. That's cleaner and there's actually almost
#   no extra code.
#   
#   Mark, can you confirm that I'm doing the correct thing? I'll do
#   something similar in our CVS repository (for now, the asb100 and w83781d
#   drivers had not their memory allocation scheme reworked there).
# 
# drivers/i2c/chips/w83781d.c
#   2004/05/02 14:51:11-07:00 khali@linux-fr.org +7 -1
#   I2C: Fix memory leaks in w83781d and asb100
# 
# drivers/i2c/chips/asb100.c
#   2004/05/02 14:51:17-07:00 khali@linux-fr.org +7 -1
#   I2C: Fix memory leaks in w83781d and asb100
# 
# ChangeSet
#   2004/05/05 15:34:20-07:00 khali@linux-fr.org 
#   [PATCH] I2C: Rewrite temperature conversions in via686a driver
#   
#   The following patch rewrites the temperature conversion macros and
#   functions found in the via686a chip driver. Contrary to the voltage
#   conversions a few weeks ago, temperature conversions were numerically
#   correct, but artificially complex. The new ones are cleaner. It also
#   fixes a highly improbable array overflow (would take one of the measured
#   temperatures to be over 145 degrees C).
#   
#   Successfully tested by Mark D. Studebaker and I, and already applied to
#   our CVS repository.
# 
# drivers/i2c/chips/via686a.c
#   2004/05/01 10:26:35-07:00 khali@linux-fr.org +21 -42
#   I2C: Rewrite temperature conversions in via686a driver
# 
# ChangeSet
#   2004/05/05 15:34:00-07:00 khali@linux-fr.org 
#   [PATCH] I2C: Invert as99127f beep bits in kernel space
#   
#   The following patch changes the way we invert beep bits for the AS99127F
#   sensor chip. This chip behaves differently from the other chips in that
#   a disabled bit is 1, not 0. So far we didn't handle that specificity in
#   the w83781d driver, so it was left to user-space applications to handle
#   it. For the sake of uniformity, it's obviously better if it's done in
#   the driver instead (although the meaning of each bit is still
#   chip-dependant).
#   
#   I already did a similar change to the 2.4 driver and the sensors
#   program. I don't think that many user-space application will be
#   affected, since most of them don't handle the beep mask as far as I can
#   tell.
#   
#   This also close Debian bug #209299:
#   http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=209299
#   
#   Successfully tested on my AS99127F rev.1 chip. Aurelien Jarno also
#   checked that there were no regression on non-Asus chips.
# 
# drivers/i2c/chips/w83781d.c
#   2004/05/02 08:09:44-07:00 khali@linux-fr.org +16 -10
#   I2C: Invert as99127f beep bits in kernel space
# 
# ChangeSet
#   2004/05/05 15:33:39-07:00 khali@linux-fr.org 
#   [PATCH] I2C: Sensors (W83627HF) in Tyan S2882
# 
# drivers/i2c/chips/Kconfig
#   2004/04/19 12:21:53-07:00 khali@linux-fr.org +1 -1
#   I2C: Sensors (W83627HF) in Tyan S2882
# 
# ChangeSet
#   2004/05/05 15:10:00-07:00 bellucda@tiscali.it 
#   [PATCH] missing audit in bus_register()
#   
#   |How about using a goto on the error path to clean up properly
#   |instead of the different return sections.
#   
#   .. here goes Take 2:
# 
# drivers/base/bus.c
#   2004/04/28 11:45:19-07:00 bellucda@tiscali.it +18 -3
#   missing audit in bus_register()
# 
# ChangeSet
#   2004/05/05 14:40:43-07:00 greg@kroah.com 
#   Driver core: handle error if we run out of memory in kmap code
# 
# drivers/base/map.c
#   2004/05/05 07:39:44-07:00 greg@kroah.com +7 -0
#   Driver core: handle error if we run out of memory in kmap code
# 
# ChangeSet
#   2004/05/05 14:32:49-07:00 herbert@gondor.apana.org.au 
#   [PATCH] USB Storage: Sony Clie
#   
#   I've received the following report which indicates that the Sony Clie needs
#   the US_FL_FIX_INQUIRY flag set.
#   
#   http://bugs.debian.org/243650
# 
# drivers/usb/storage/unusual_devs.h
#   2004/04/16 17:47:39-07:00 herbert@gondor.apana.org.au +7 -0
#   USB Storage: Sony Clie
# 
# ChangeSet
#   2004/05/05 14:10:42-07:00 stern@rowland.harvard.edu 
#   [PATCH] PATCH: (as268) Import device-reset changes from gadget-2.6 tree
#   
#   This patch imports the changes that David Brownell has made to the
#   device-reset functions in his gadget-2.6 tree.  Once these ongoing
#   troubling questions about locking are settled, I'll add support for the
#   "descriptors changed" case.
# 
# drivers/usb/core/hub.c
#   2004/05/03 08:02:43-07:00 stern@rowland.harvard.edu +99 -97
#   PATCH: (as268) Import device-reset changes from gadget-2.6 tree
# 
# ChangeSet
#   2004/05/05 13:44:44-07:00 al.fracchetti@tin.it 
#   [PATCH] USB Storage: Kyocera Finecsm 3L -unusual_devs.h
# 
# drivers/usb/storage/unusual_devs.h
#   2004/03/27 10:48:01-08:00 al.fracchetti@tin.it +6 -0
#   USB Storage: Kyocera Finecsm 3L -unusual_devs.h
# 
# ChangeSet
#   2004/05/05 13:36:39-07:00 stern@rowland.harvard.edu 
#   [PATCH] USB: Small change to CPiA USB driver
#   
#   Only one aspect of it is notable: The CPiA USB
#   driver calls usb_driver_release_interface() during its disconnect()
#   routine.  That doesn't appear to be necessary, since it didn't call
#   usb_driver_claim_interface() beforehand and since the interface will be
#   released automatically when disconnect() returns.
# 
# drivers/media/video/cpia_usb.c
#   2004/04/27 06:54:33-07:00 stern@rowland.harvard.edu +1 -3
#   USB: Small change to CPiA USB driver
# 
# ChangeSet
#   2004/05/05 13:36:11-07:00 stern@rowland.harvard.edu 
#   [PATCH] USB Storage: unusual_devs.h update
#   
#   On 4 May 2004, Rajesh Kumble Nayak wrote:
#   
#   > The Above patch work fine for Sony Hc-85
#   > I shall post the dmesg entry soon.
#   >
#   > With many thanks
#   > Rajesh
#   
#   Greg and Pete, here's the patch.  It's possible that this entry could be
#   combined with the previous one, but until we know definitely they should
#   be kept separate.
# 
# drivers/usb/storage/unusual_devs.h
#   2004/04/29 07:42:22-07:00 stern@rowland.harvard.edu +7 -0
#   USB Storage: unusual_devs.h update
# 
# ChangeSet
#   2004/05/05 13:35:43-07:00 stern@rowland.harvard.edu 
#   [PATCH] USB: Reduce kernel stack usage
#   
#   This patch allocates a temporary array from the heap instead of from the
#   kernel's stack in usb_set_configuration().  It also updates a few
#   comments.  Please apply.
# 
# drivers/usb/core/message.c
#   2004/05/03 03:26:40-07:00 stern@rowland.harvard.edu +23 -12
#   USB: Reduce kernel stack usage
# 
# ChangeSet
#   2004/05/05 13:35:14-07:00 daniel.ritz@gmx.ch 
#   [PATCH] USB: add support for eGalax Touchscreen USB
#   
#   this is the second version of the patch to add support for eGalax Touchkit USB
#   touchscreen. changes since last patch:
#   - fixed the bug in open, found by oliver neukum
#   - renamed driver from touchkit.c to touchkitusb.c (since the thing also exists
#     as RS232, PS/2 and I2C)
#   - some minor coding style updates
# 
# drivers/usb/input/touchkitusb.c
#   2004/05/02 07:32:32-07:00 daniel.ritz@gmx.ch +310 -0
#   USB: add support for eGalax Touchscreen USB
# 
# drivers/usb/input/Makefile
#   2004/04/25 09:18:58-07:00 daniel.ritz@gmx.ch +1 -0
#   USB: add support for eGalax Touchscreen USB
# 
# drivers/usb/input/Kconfig
#   2004/05/01 10:40:50-07:00 daniel.ritz@gmx.ch +13 -0
#   USB: add support for eGalax Touchscreen USB
# 
# drivers/usb/input/touchkitusb.c
#   2004/05/02 07:32:32-07:00 daniel.ritz@gmx.ch +0 -0
#   BitKeeper file /home/greg/linux/BK/usb-2.6/drivers/usb/input/touchkitusb.c
# 
# ChangeSet
#   2004/05/05 13:34:46-07:00 david-b@pacbell.net 
#   [PATCH] USB: usbnet handles Billionton Systems USB2AR
#   
#   This adds another ax8817x device to "usbnet".
# 
# drivers/usb/net/usbnet.c
#   2004/04/26 14:32:52-07:00 david-b@pacbell.net +4 -0
#   USB: usbnet handles Billionton Systems USB2AR
# 
# ChangeSet
#   2004/05/05 13:34:16-07:00 stefan.eletzhofer@eletztrick.de 
#   [PATCH] USB Gadget: fix g_serial debug module parm
#   
#   g_serial.ko can't be load as module because "debug" is only
#   defined if G_SERIAL_DEBUG is defined, but "debug" is referenced
#   in MODULE_PARM().
# 
# drivers/usb/gadget/serial.c
#   2004/05/04 17:00:00-07:00 stefan.eletzhofer@eletztrick.de +5 -1
#   USB Gadget: fix g_serial debug module parm
# 
# ChangeSet
#   2004/05/05 13:33:47-07:00 stefan.eletzhofer@eletztrick.de 
#   [PATCH] USB Gadget: fix pxa define in gadget_chips.h
#   
#   below is a trivial patch which fixes the PXA gadget define
#   in drivers/linux/usb/gadget/gadget_chips.h
#   
#   Everywhere CONFIG_USB_GADGET_PXA2XX is used, except in that file, which
#   bites obviously ...
#   
#   
#   Fix define for PXA UDC.
# 
# drivers/usb/gadget/gadget_chips.h
#   2004/05/04 17:00:00-07:00 stefan.eletzhofer@eletztrick.de +1 -1
#   USB Gadget: fix pxa define in gadget_chips.h
# 
# ChangeSet
#   2004/05/05 12:13:23-07:00 greg@kroah.com 
#   USB: add support for Zire 31 devices.
#   
#   Info was from Adriaan de Groot <adridg@cs.kun.nl>
# 
# drivers/usb/serial/visor.h
#   2004/05/05 05:12:42-07:00 greg@kroah.com +1 -0
#   USB: add support for Zire 31 devices.
#   
#   Info was from Adriaan de Groot <adridg@cs.kun.nl>
# 
# drivers/usb/serial/visor.c
#   2004/05/05 05:12:42-07:00 greg@kroah.com +3 -0
#   USB: add support for Zire 31 devices.
#   
#   Info was from Adriaan de Groot <adridg@cs.kun.nl>
# 
# ChangeSet
#   2004/05/04 14:16:58-07:00 olh@suse.de 
#   [PATCH] add simple class for adb
#   
#   This adds /sys/class/adb/, removes unused devfs lines and updates a
#   comment to match reality.
# 
# drivers/macintosh/adb.c
#   2004/05/01 10:58:08-07:00 olh@suse.de +13 -6
#   add simple class for adb
# 
# ChangeSet
#   2004/05/04 16:50:21-04:00 jgarzik@redhat.com 
#   [netdrvr b44] use miilib for MII ioctl handling
# 
# drivers/net/b44.h
#   2004/05/04 16:50:16-04:00 jgarzik@redhat.com +2 -0
#   [netdrvr b44] use miilib for MII ioctl handling
# 
# drivers/net/b44.c
#   2004/05/04 16:50:16-04:00 jgarzik@redhat.com +34 -31
#   [netdrvr b44] use miilib for MII ioctl handling
# 
# ChangeSet
#   2004/05/04 16:36:29-04:00 jgarzik@redhat.com 
#   [netdrvr b44] use netdev_priv
# 
# drivers/net/b44.c
#   2004/05/04 16:36:24-04:00 jgarzik@redhat.com +16 -14
#   [netdrvr b44] use netdev_priv
# 
# ChangeSet
#   2004/05/04 16:33:55-04:00 jgarzik@redhat.com 
#   [netdrvr b44] ethtool_ops support
# 
# drivers/net/b44.c
#   2004/05/04 16:33:50-04:00 jgarzik@redhat.com +195 -210
#   [netdrvr b44] ethtool_ops support
# 
# ChangeSet
#   2004/05/04 09:30:28-05:00 akpm@osdl.org 
#   [PATCH] support swsusp for aic7xxx
#   
#   From: Pavel Machek <pavel@ucw.cz>
#   
#   Marks threads as needed for suspend.
#   DESC
#   aic79xx_osm.c build fix
#   EDESC
#   
#   drivers/scsi/aic7xxx/aic79xx_osm.c: In function `ahd_linux_dv_thread':
#   drivers/scsi/aic7xxx/aic79xx_osm.c:2594: `PF_IOTHREAD' undeclared (first use in this function)
# 
# drivers/scsi/aic7xxx/aic7xxx_osm.c
#   2004/04/26 01:09:37-05:00 akpm@osdl.org +1 -0
#   support swsusp for aic7xxx
# 
# drivers/scsi/aic7xxx/aic79xx_osm.c
#   2004/04/26 01:09:37-05:00 akpm@osdl.org +1 -0
#   support swsusp for aic7xxx
# 
# ChangeSet
#   2004/05/04 09:25:05-05:00 rddunlap@osdl.org 
#   [PATCH] (3/5) ncr53c8x: use kernel.h min/max
#   
#   From: Michael Veeck <michael.veeck@gmx.net>
#   Subject: [Kernel-janitors] [PATCH] drivers/scsi/53c* MIN/MAX removal
#   
#   
#   Patch (against 2.6.6-rc1) removes unnecessary min/max macros and changes
#   calls to use kernel.h macros instead.
#   
#   
#    drivers/scsi/ncr53c8xx.c      |    6 +++---
#    drivers/scsi/sym53c8xx_comm.h |    5 +----
#    2 files changed, 4 insertions(+), 7 deletions(-)
# 
# drivers/scsi/sym53c8xx_comm.h
#   2004/04/23 00:32:08-05:00 rddunlap@osdl.org +1 -4
#   (3/5) ncr53c8x: use kernel.h min/max
# 
# drivers/scsi/ncr53c8xx.c
#   2004/04/23 00:32:08-05:00 rddunlap@osdl.org +3 -3
#   (3/5) ncr53c8x: use kernel.h min/max
# 
# ChangeSet
#   2004/05/04 09:24:23-05:00 rddunlap@osdl.org 
#   [PATCH] (4/5) nsp32 (ninja): use kernel.h min/max/ARRAY_SIZE
#   
#   From: Michael Veeck <michael.veeck@gmx.net>
#   Subject: [Kernel-janitors] [PATCH] drivers/scsi/nsp MIN/MAX/NUMBER removal
#   
#   Patch (against 2.6.6-rc1) removes unnecessary min/max/number macros and
#   changes calls to use kernel.h macros instead.
#   
#   
#    drivers/scsi/nsp32.c |   24 ++++++++++++------------
#    drivers/scsi/nsp32.h |    4 ----
#    2 files changed, 12 insertions(+), 16 deletions(-)
# 
# drivers/scsi/nsp32.h
#   2004/04/23 00:34:00-05:00 rddunlap@osdl.org +0 -4
#   (4/5) nsp32 (ninja): use kernel.h min/max/ARRAY_SIZE
# 
# drivers/scsi/nsp32.c
#   2004/04/23 00:34:00-05:00 rddunlap@osdl.org +12 -12
#   (4/5) nsp32 (ninja): use kernel.h min/max/ARRAY_SIZE
# 
# ChangeSet
#   2004/05/04 09:23:43-05:00 rddunlap@osdl.org 
#   [PATCH] (2/5) aic7xyz_old: use kernel.h min/max/ARRAY_SIZE
#   
#   From: Michael Veeck <michael.veeck@gmx.net>
#   Subject: [Kernel-janitors] [PATCH] drivers/scsi/aic7xxx_old MIN/MAX/NUMBER
#   	removal
#   
#   Patch (against 2.6.6-rc1) removes unnecessary min/max/number macros and
#   changes calls to use kernel.h macros instead.
#   
#   
#    drivers/scsi/aic7xxx_old.c              |   43 ++++++++++++++------------------
#    drivers/scsi/aic7xxx_old/aic7xxx_proc.c |    6 ++--
#    2 files changed, 23 insertions(+), 26 deletions(-)
# 
# drivers/scsi/aic7xxx_old/aic7xxx_proc.c
#   2004/04/23 00:31:11-05:00 rddunlap@osdl.org +3 -3
#   (2/5) aic7xyz_old: use kernel.h min/max/ARRAY_SIZE
# 
# drivers/scsi/aic7xxx_old.c
#   2004/04/23 00:31:11-05:00 rddunlap@osdl.org +20 -23
#   (2/5) aic7xyz_old: use kernel.h min/max/ARRAY_SIZE
# 
# ChangeSet
#   2004/05/04 09:22:56-05:00 rddunlap@osdl.org 
#   [PATCH] (5/5) pcmcia/nsp: use kernel.h min/max/ARRAY_SIZE
#   
#   From: Michael Veeck <michael.veeck@gmx.net>
#   Subject: [Kernel-janitors] [PATCH] drivers/scsi/pcmcia MIN/MAX/NUMBER removal
#   
#   
#   Patch (against 2.6.6-rc1) removes unnecessary min/max/number macros and
#   changes calls to use kernel.h macros instead.
#   
#   
#    drivers/scsi/pcmcia/nsp_cs.c |   12 ++++++------
#    drivers/scsi/pcmcia/nsp_cs.h |    2 --
#    2 files changed, 6 insertions(+), 8 deletions(-)
# 
# drivers/scsi/pcmcia/nsp_cs.h
#   2004/04/23 00:34:49-05:00 rddunlap@osdl.org +0 -2
#   (5/5) pcmcia/nsp: use kernel.h min/max/ARRAY_SIZE
# 
# drivers/scsi/pcmcia/nsp_cs.c
#   2004/04/23 00:34:49-05:00 rddunlap@osdl.org +6 -6
#   (5/5) pcmcia/nsp: use kernel.h min/max/ARRAY_SIZE
# 
# ChangeSet
#   2004/05/04 09:21:23-05:00 akpm@osdl.org 
#   [PATCH] aic7xxx deadlock fix
#   
#   We cannot call del_timer_sync() from within that timer's handler function!
# 
# drivers/scsi/aic7xxx/aic7xxx_osm.c
#   2004/04/26 01:09:29-05:00 akpm@osdl.org +9 -3
#   aic7xxx deadlock fix
# 
# ChangeSet
#   2004/05/04 09:19:18-05:00 jeremy@sgi.com 
#   [PATCH] minor changes to qla1280 driver
#   
#   On one of our big machines we found a problem with posted writes while
#   running AIM.
#   
#   Two writes of the Request Queue In pointer went out of order, making
#   the chip think that it had a queue wrap.
#   
#   I took advantage of this opportunity to add relaxed reads, which helps
#   the Altix.  It should not affect other arches.  All reads are relaxed
#   except for the read of the Semaphore register.
# 
# drivers/scsi/qla1280.h
#   2004/04/22 14:26:22-05:00 jeremy@sgi.com +2 -1
#   minor changes to qla1280 driver
# 
# drivers/scsi/qla1280.c
#   2004/04/22 14:26:22-05:00 jeremy@sgi.com +4 -1
#   minor changes to qla1280 driver
# 
# ChangeSet
#   2004/05/04 09:17:25-05:00 stern@rowland.harvard.edu 
#   [PATCH] PATCH: (as255) Handle Unit Attention during INQUIRY better
#   
#   Some buggy USB storage devices can return Unit Attention status for
#   INQUIRY commands.  The current code in scsi_scan.c checks for ASC = 0x28 =
#   Not ready to ready transition, but these devices can also return ASC =
#   0x29 = Power-on or reset occurred.  In addition, the code doesn't retry
#   the INQUIRY when these codes are received.
# 
# drivers/scsi/scsi_scan.c
#   2004/04/21 12:04:15-05:00 stern@rowland.harvard.edu +13 -7
#   PATCH: (as255) Handle Unit Attention during INQUIRY better
# 
# ChangeSet
#   2004/05/04 09:12:32-05:00 rct@gherkin.frus.com 
#   [PATCH] sym53c500_cs PCMCIA SCSI driver (round 5)
#   
#   Fifth attempt at a PCMCIA SCSI driver for the Symbios 53c500
#   controller.  This version has all the cleanup Christoph has requested
#   to date, including removal of support for the obsolete (in 2.6)
#   proc_info functionality.
#   
#   Support for additional sysfs class device attributes has been added:
#   two are read-only (irq, ioport), one is read-write (fast_pio).  The
#   read-write attribute is a per-instance flag indicating the PIO speed
#   of the particular HBA: valid values are 1 (enabled -- default) and 0
#   (disabled).
# 
# Documentation/scsi/sym53c500_cs.txt
#   2004/05/03 16:08:26-05:00 rct@gherkin.frus.com +23 -0
#   sym53c500_cs PCMCIA SCSI driver (round 5)
# 
# drivers/scsi/pcmcia/Makefile
#   2004/05/03 16:08:26-05:00 rct@gherkin.frus.com +1 -0
#   sym53c500_cs PCMCIA SCSI driver (round 5)
# 
# drivers/scsi/pcmcia/Kconfig
#   2004/05/03 16:08:26-05:00 rct@gherkin.frus.com +10 -0
#   sym53c500_cs PCMCIA SCSI driver (round 5)
# 
# Documentation/scsi/sym53c500_cs.txt
#   2004/05/03 16:08:26-05:00 rct@gherkin.frus.com +0 -0
#   BitKeeper file /home/jejb/BK/scsi-misc-2.6/Documentation/scsi/sym53c500_cs.txt
# 
# Documentation/scsi/00-INDEX
#   2004/05/03 16:08:26-05:00 rct@gherkin.frus.com +2 -0
#   sym53c500_cs PCMCIA SCSI driver (round 5)
# 
# drivers/scsi/pcmcia/sym53c500_cs.c
#   2004/05/03 19:18:28-05:00 rct@gherkin.frus.com +1076 -0
#   sym53c500_cs PCMCIA SCSI driver (round 5)
# 
# drivers/scsi/pcmcia/sym53c500_cs.c
#   2004/05/03 19:18:28-05:00 rct@gherkin.frus.com +0 -0
#   BitKeeper file /home/jejb/BK/scsi-misc-2.6/drivers/scsi/pcmcia/sym53c500_cs.c
# 
# ChangeSet
#   2004/05/03 14:18:33-07:00 tejohnson@yahoo.com 
#   [PATCH] USB: update for mtouchusb
#   
#   The attached patch for the 3M Touch Systems Capacitive controller. (again)
#   
#   Quick list of changes:
#   
#      * decrease mtouch->open counter in the event of a urb submission
#        failure
#   
#   The changes are due to comments Oliver Neukum's comments on the
#   touchkit.c driver.  Good catch!  Sorry I missed it.
#   
#   http://marc.theaimsgroup.com/?l=linux-usb-devel&m=108343028201159&w=2
# 
# drivers/usb/input/mtouchusb.c
#   2004/05/02 09:37:18-07:00 tejohnson@yahoo.com +3 -1
#   USB: update for mtouchusb
# 
# ChangeSet
#   2004/05/03 14:17:38-07:00 stern@rowland.harvard.edu 
#   [PATCH] USB: Altsetting update for USB IrDA driver
#   
#   This patch updates the USB IrDA driver to take into account that the
#   kernel may no longer store altsetting entries in numerical order.
#   The driver only needed one change; this was a simple matter of using the
#   entry corresponding to the altsetting that was just installed.
# 
# drivers/net/irda/irda-usb.c
#   2004/05/03 03:37:59-07:00 stern@rowland.harvard.edu +1 -1
#   USB: Altsetting update for USB IrDA driver
# 
# ChangeSet
#   2004/05/03 14:16:51-07:00 c.lucas@ifrance.com 
#   [PATCH] USB: esthetic and trivial patch.
# 
# include/linux/usb.h
#   2004/05/02 23:42:51-07:00 c.lucas@ifrance.com +1 -1
#   USB: esthetic and trivial patch.
# 
# ChangeSet
#   2004/05/02 20:30:19-07:00 kenn@linux.ie 
#   [PATCH] Re: Platform device matching
#   
#   On Mon, Apr 26, 2004 at 12:27:33AM +0100, Russell King wrote:
#   > So, this comment needs updating:
#   >
#   >  *      So, extract the <name> from the device, and compare it against
#   >  *      the name of the driver. Return whether they match or not.
#   
#   Want a patch?
# 
# drivers/base/platform.c
#   2004/04/25 16:33:43-07:00 kenn@linux.ie +3 -2
#   Re: Platform device matching
# 
# ChangeSet
#   2004/05/02 20:29:59-07:00 hannal@us.ibm.com 
#   [PATCH] add class support to drivers/char/tipar.c
#   
#   This patch adds class support to the Texas Instruments graphing calculators
#   with a parallel link cable.
#   
#   I have verified it compiles. If someone has the hardware please verify it works.
# 
# drivers/char/tipar.c
#   2004/04/28 13:48:10-07:00 hannal@us.ibm.com +42 -7
#   add class support to drivers/char/tipar.c
# 
# ChangeSet
#   2004/05/02 20:29:41-07:00 hannal@us.ibm.com 
#   [PATCH] add class support to drivers/block/paride/pt.c
#   
#   This patch adds class support to pt.c which "the high-level driver for parallel
#   port ATAPI tape drives based on chips supported by the paride module." Which I
#   dont have in order to test.
#   
#   I have verified it compiles but can not test it. If someone who has the
#   hardware could I would appreciate it.
# 
# drivers/block/paride/pt.c
#   2004/04/16 16:09:52-07:00 hannal@us.ibm.com +45 -9
#   add class support to drivers/block/paride/pt.c
# 
# ChangeSet
#   2004/05/02 20:29:22-07:00 hannal@us.ibm.com 
#   [PATCH] add class support to drivers/block/paride/pg.c
#   
#   This patch adds class support to pg.c, the parallel port generic ATAPI device driver.
#   
#   I have verified it compiles but do not have the hardware. If someone does and
#   could test that would be helpful.
# 
# drivers/block/paride/pg.c
#   2004/04/21 14:50:32-07:00 hannal@us.ibm.com +38 -10
#   add class support to drivers/block/paride/pg.c
# 
# ChangeSet
#   2004/05/02 20:28:58-07:00 hannal@us.ibm.com 
#   [PATCH] Add class support to drivers/char/ip2main.c
# 
# drivers/char/ip2main.c
#   2004/04/14 10:08:00-07:00 hannal@us.ibm.com +39 -5
#   Add class support to drivers/char/ip2main.c
# 
# ChangeSet
#   2004/05/02 20:28:38-07:00 sebek64@post.cz 
#   [PATCH] Class support for ppdev.c
# 
# drivers/char/ppdev.c
#   2004/04/13 10:25:50-07:00 sebek64@post.cz +43 -2
#   Class support for ppdev.c
# 
# ChangeSet
#   2004/05/01 23:04:01-07:00 stefan.eletzhofer@eletztrick.de 
#   [PATCH] I2C: add I2C epson 8564 RTC chip driver
#   
#   Add support for the Epson 8564 RTC chip.
# 
# drivers/i2c/chips/rtc8564.h
#   2004/05/01 17:00:00-07:00 stefan.eletzhofer@eletztrick.de +78 -0
#   I2C: add I2C epson 8564 RTC chip driver
# 
# drivers/i2c/chips/rtc8564.h
#   2004/05/01 17:00:00-07:00 stefan.eletzhofer@eletztrick.de +0 -0
#   BitKeeper file /home/greg/linux/BK/i2c-2.6/drivers/i2c/chips/rtc8564.h
# 
# drivers/i2c/chips/rtc8564.c
#   2004/05/01 17:00:00-07:00 stefan.eletzhofer@eletztrick.de +396 -0
#   I2C: add I2C epson 8564 RTC chip driver
# 
# drivers/i2c/chips/Makefile
#   2004/05/01 17:00:00-07:00 stefan.eletzhofer@eletztrick.de +1 -0
#   I2C: add I2C epson 8564 RTC chip driver
# 
# drivers/i2c/chips/Kconfig
#   2004/05/01 17:00:00-07:00 stefan.eletzhofer@eletztrick.de +10 -0
#   I2C: add I2C epson 8564 RTC chip driver
# 
# drivers/i2c/chips/rtc8564.c
#   2004/05/01 17:00:00-07:00 stefan.eletzhofer@eletztrick.de +0 -0
#   BitKeeper file /home/greg/linux/BK/i2c-2.6/drivers/i2c/chips/rtc8564.c
# 
# ChangeSet
#   2004/05/01 22:35:09-07:00 dsaxena@plexity.net 
#   [PATCH] I2C: Update IXP4xx I2C bus driver
#   
#   The 2.6 IXP4xx code has been cleaned up to change all references to
#   IXP42x/IXP425 with IXP4xx. The following patch updates the I2C bits.
#   Before applying, you need to 'bk move i2c-ixp42x.c ixp-4xx.c".
# 
# drivers/i2c/busses/i2c-ixp4xx.c
#   2004/04/14 16:44:56-07:00 dsaxena@plexity.net +57 -52
#   I2C: Update IXP4xx I2C bus driver
# 
# drivers/i2c/busses/Makefile
#   2004/04/15 09:26:47-07:00 dsaxena@plexity.net +1 -1
#   I2C: Update IXP4xx I2C bus driver
# 
# drivers/i2c/busses/Kconfig
#   2004/04/15 09:26:47-07:00 dsaxena@plexity.net +5 -5
#   I2C: Update IXP4xx I2C bus driver
# 
# ChangeSet
#   2004/05/01 22:34:26-07:00 kevin@koconnor.net 
#   [PATCH] I2C: support I2C_M_NO_RD_ACK in i2c-algo-bit
#   
#   I have an I2C device (Samsung ks0127 video grabber) with a peculiar i2c
#   implementation.  When reading bytes, it only senses for the stop condition
#   in the place where the acknowledge bit should be.  So, to properly support
#   this device acks need to be turned off during reads.
#   
#   There is an I2C_M_NO_RD_ACK bit already defined in i2c.h which appears to
#   be what I want.  Unfortunately it doesn't seem to be used anywhere in the
#   current tree.  At the end of this message is a patch to teach i2c_algo_bit
#   to honor the bit.
# 
# drivers/i2c/algos/i2c-algo-bit.c
#   2004/04/19 21:35:39-07:00 kevin@koconnor.net +7 -3
#   I2C: support I2C_M_NO_RD_ACK in i2c-algo-bit
# 
# ChangeSet
#   2004/05/01 22:33:50-07:00 khali@linux-fr.org 
#   [PATCH] I2C: Voltage conversions in via686a
#   
#   My previous patch was actually not correct, reading from the chip's
#   registers was fixed but writing limits to it wasn't. This new version of
#   the patch should be better. Sorry for the trouble.
# 
# drivers/i2c/chips/via686a.c
#   2004/04/25 14:51:00-07:00 khali@linux-fr.org +24 -32
#   I2C: Voltage conversions in via686a
# 
# ChangeSet
#   2004/05/01 22:32:34-07:00 greg@kroah.com 
#   I2C: rename i2c-ip4xx.c driver
# 
# drivers/i2c/busses/i2c-ixp4xx.c
#   2004/05/01 22:31:27-07:00 greg@kroah.com +0 -0
#   Rename: drivers/i2c/busses/i2c-ixp42x.c -> drivers/i2c/busses/i2c-ixp4xx.c
# 
# ChangeSet
#   2004/05/01 16:47:38-07:00 khali@linux-fr.org 
#   [PATCH] I2C: Add LM99 support to the lm90 driver
#   
#   The following patch adds support for the LM99 chip to the lm90 driver,
#   on popular request. The nVidia GeForce FX 5900 series cards have such a
#   chip on-board for monitoring the GPU temperature.
#   
#   Relevant pointers:
#   http://archives.andrew.net.au/lm-sensors/msg07671.html
#   http://secure.netroedge.com/~lm78/readticket.cgi?ticket=1661
#   http://secure.netroedge.com/~lm78/readticket.cgi?ticket=1662
#   
#   Additional effects of the patch:
#   
#   * Do not consider the lm90 driver experimental anymore. I have had
#   enough testers and not a single problem report, the driver is working
#   OK.
#   
#   * Support the LM89. According to the datasheets, it is exactly the same
#   chip as the LM99 (to the chip ID). We've never seen this chip in a
#   computer so far, but it doesn't cost anything to support it (actually we
#   cannot not support it, since we have no way to differenciate with the
#   LM99).
#   
#   * Scan two addresses instead of one. The LM99 and LM89 have a "-1"
#   variant using an alternate address.
#   
#   * Update copyright year.
#   
#   * Reword the identification code a bit. It is hopefully slightly less
#   unreadable.
#   
#   This patch was successfully tested by Corey Hickey.
# 
# drivers/i2c/chips/lm90.c
#   2004/04/23 12:40:28-07:00 khali@linux-fr.org +37 -12
#   I2C: Add LM99 support to the lm90 driver
# 
# drivers/i2c/chips/Kconfig
#   2004/04/23 11:33:15-07:00 khali@linux-fr.org +3 -3
#   I2C: Add LM99 support to the lm90 driver
# 
# ChangeSet
#   2004/05/01 16:24:00-07:00 msdemlei@cl.uni-heidelberg.de 
#   [PATCH] USB: DSBR-100 tiny patch
#   
#   On Fri, Feb 06, 2004 at 10:17:32AM -0800, Greg KH wrote:
#   > On Fri, Feb 06, 2004 at 05:06:01PM +0100, Markus Demleitner wrote:
#   > > Since I finally switched over to 2.6 I noticed that my dsbr100 driver
#   > > produces a warning to the effect that I should provide a release
#   > > callback.  After a quick google on the issue I came to the conclusion
#   >
#   > No, you will have to fix up your driver to work properly, sorry.  It's
#   > due to the changes to the v4l layer to handle removable devices much
#   > better (and to tie it into the driver model.)
#   
#   I didn't get around to doing real work on this until now, but finally
#   in the attachment there's my stab at bringing dsbr100 up to kernel 2.6.
#   I'm not really comfortable with the release callback issues (I've yet
#   to find some HOWTO-like documentation on this...) on the v4l side,
#   so I'd be grateful if you could have a look at it.  I've basically
#   tried to copy what stv680 does, which may or may not have been a
#   good idea (in particular see the comment above the disconnect
#   function).
#   
#   I've used the opportunity for some code beautyfing, which of course
#   makes the patch a bit of a mess.  I hope you won't mind too much
#   -- as you can see, it would have been pretty messy anyway.
# 
# drivers/usb/media/dsbr100.c
#   2004/04/21 12:32:35-07:00 msdemlei@cl.uni-heidelberg.de +133 -94
#   USB: DSBR-100 tiny patch
# 
# ChangeSet
#   2004/05/01 16:18:03-07:00 david-b@pacbell.net 
#   [PATCH] USB: dummy_hcd, root port wakeup/suspend
#   
#   Here's what's in my tree to make dummy_hcd do suspend and
#   wakeup correctly ... that is, making its emulated root hub
#   and gadget work more like real ones.
#   
#   It's easier to do this for fake hardware than the real stuff.
#   But real drivers tend to need very similar changes ... :)
#   
#   - Dave
#   
#   p.s. This does not depend on the suspend/resume patch.
#         And it doesn't do "global" suspend (of root hub).
# 
# drivers/usb/gadget/dummy_hcd.c
#   2004/04/29 11:16:12-07:00 david-b@pacbell.net +133 -33
#   USB: dummy_hcd, root port wakeup/suspend
# 
# ChangeSet
#   2004/05/01 16:02:37-07:00 baldrick@free.fr 
#   [PATCH] USB: fix WARN_ON in usbfs
#   
#   On Tuesday 27 April 2004 10:58, Oliver Neukum wrote:
#   > Am Dienstag, 27. April 2004 00:14 schrieb Greg KH:
#   > > On Mon, Apr 26, 2004 at 04:05:17PM +0200, Duncan Sands wrote:
#   > > > diff -Nru a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
#   > > > --- a/drivers/usb/core/devio.c	Mon Apr 26 13:48:28 2004
#   > > > +++ b/drivers/usb/core/devio.c	Mon Apr 26 13:48:28 2004
#   > > > @@ -350,8 +350,8 @@
#   > > >  	 * all pending I/O requests; 2.6 does that.
#   > > >  	 */
#   > > >
#   > > > -	if (ifnum < 8*sizeof(ps->ifclaimed))
#   > > > -		clear_bit(ifnum, &ps->ifclaimed);
#   > > > +	BUG_ON(ifnum >= 8*sizeof(ps->ifclaimed));
#   > >
#   > > I've changed that to a WARN_ON().  Yeah, writing over memory is bad, but
#   > > oopsing is worse.  Let's be a bit nicer than that.
#   >
#   > You aren't nice that way. An oops has localised consequences. Scribbling
#   > over memory can cause anything.
#   
#   Hi Greg, if won't accept a BUG_ON, how about the following?
# 
# drivers/usb/core/devio.c
#   2004/04/30 03:01:37-07:00 baldrick@free.fr +5 -2
#   USB: fix WARN_ON in usbfs
# 
# ChangeSet
#   2004/05/01 16:02:00-07:00 baldrick@free.fr 
#   [PATCH] USB: usbfs: change extern inline to static inline
#   
#   And change __inline__ to inline and get rid of an unused function
#   while at it.
# 
# drivers/usb/core/devio.c
#   2004/04/30 16:36:25-07:00 baldrick@free.fr +5 -30
#   USB: usbfs: change extern inline to static inline
# 
# ChangeSet
#   2004/04/30 22:19:36-07:00 stuber@loria.fr 
#   [PATCH] USB: LEGO USB Tower driver v0.95
#   
#   here is the latest version 0.95 of the LEGO USB Tower driver against 2.6.6-rc3
#   which corrects a lot of problems in the version currently in the kernel,
#   most notably sleeping in interrupt context and improper locking.
#   Please apply.
#   
#   It has been thoroughly tested with UHCI, OHCI and EHCI host controllers
#   using Lejos and NQC.  Firmware and program download, and with proper
#   modifications all communication protocols supported by Lejos work,
#   as well as firmware and program download and datalog upload in NQC.
#   
#   Notes to application maintainers/protocol designers:
#   
#   - Small modifications are needed in communication protocols because
#     the tower tends to discard the first byte of transmissions.
#     So for example LNP needs to send an extra byte like 0xff before
#     the packet, and F7 handlers needs to cope with a lost 0x55.
#   
#   - I suggest /dev/usb/legousbtower0 etc. as the standard device names.
#     This puts it in the same place as the other USB devices and makes
#     clear which driver is responsible for these devices.
# 
# drivers/usb/misc/legousbtower.c
#   2004/04/30 12:44:31-07:00 stuber@loria.fr +489 -276
#   USB: LEGO USB Tower driver v0.95
# 
# MAINTAINERS
#   2004/04/30 08:30:25-07:00 stuber@loria.fr +7 -0
#   USB: LEGO USB Tower driver v0.95
# 
# ChangeSet
#   2004/04/30 22:19:00-07:00 david-b@pacbell.net 
#   [PATCH] USB: reject urb submissions to suspended devices
#   
#   This patch rejects URB submissions to suspended devices, so
#   that they don't get hardware-specific fault reports.  Instead,
#   they get the same code (-EHOSTUNREACH) for all HCDs.
#   
#   It also fixes a minor problem with colliding declarations of
#   the symbol USB_STATE_SUSPENDED.
# 
# drivers/usb/core/urb.c
#   2004/04/28 07:00:02-07:00 david-b@pacbell.net +2 -0
#   USB: reject urb submissions to suspended devices
# 
# drivers/usb/core/hcd.h
#   2004/04/28 07:01:03-07:00 david-b@pacbell.net +1 -1
#   USB: reject urb submissions to suspended devices
# 
# drivers/usb/core/hcd-pci.c
#   2004/04/28 06:57:24-07:00 david-b@pacbell.net +3 -3
#   USB: reject urb submissions to suspended devices
# 
# ChangeSet
#   2004/04/30 22:17:59-07:00 david-b@pacbell.net 
#   [PATCH] USB Gadget: gadget zero and USB suspend/resume
#   
#   This patch lets gadget zero be more useful in testing usb suspend
#   and resume.  It prints messages on suspend() and resume(), and
#   supports an "autoresume=N" mode to wake the host after N seconds.
# 
# drivers/usb/gadget/zero.c
#   2004/04/27 13:26:18-07:00 david-b@pacbell.net +63 -2
#   USB Gadget: gadget zero and USB suspend/resume
# 
# ChangeSet
#   2004/04/30 22:16:57-07:00 linux-usb@nerds-incorporated.org 
#   [PATCH] USB: Alcatel TD10 Serial to USB converter cable support
#   
#   The Alcatel TD10 USB to Serial converter cable (for use with a Alcatel
#   OT 535 or 735(i) mobile phone) seems to be a repackaged Alcatel
#   version of the Prolific 2303 adapter.
#   
#   And as such, simply adding its product/vendor id (0x11f7/0x02df) to
#   drivers/usb/serial/pl2303.c seems to be enough to make it work.
# 
# drivers/usb/serial/pl2303.h
#   2004/04/29 09:35:06-07:00 linux-usb@nerds-incorporated.org +3 -0
#   USB: Alcatel TD10 Serial to USB converter cable support
# 
# drivers/usb/serial/pl2303.c
#   2004/04/29 09:35:28-07:00 linux-usb@nerds-incorporated.org +1 -0
#   USB: Alcatel TD10 Serial to USB converter cable support
# 
# ChangeSet
#   2004/04/30 22:15:51-07:00 stern@rowland.harvard.edu 
#   [PATCH] USB: USB altsetting updates for IDSN Hisax driver
#   
#   The USB core is changing the way interfaces and altsettings are stored.
#   They are no longer required to be in numerical order, and as a result,
#   simply indexing the interface and altsetting arrays won't work as
#   expected.
#   
#   This patch for the st5481 takes these changes into account.  A simpler
#   approach would be to store a pointer to the struct usb_host_interface
#   rather than look it up repeatedly, but I'm not very familiar with this
#   driver and didn't want to attempt such an alteration.
# 
# drivers/isdn/hisax/st5481_usb.c
#   2004/04/26 07:43:53-07:00 stern@rowland.harvard.edu +7 -3
#   USB: USB altsetting updates for IDSN Hisax driver
# 
# drivers/isdn/hisax/st5481_d.c
#   2004/04/26 07:43:53-07:00 stern@rowland.harvard.edu +7 -2
#   USB: USB altsetting updates for IDSN Hisax driver
# 
# drivers/isdn/hisax/st5481_b.c
#   2004/04/26 07:43:53-07:00 stern@rowland.harvard.edu +7 -2
#   USB: USB altsetting updates for IDSN Hisax driver
# 
# ChangeSet
#   2004/04/30 18:36:06-05:00 jejb@mulgrave.(none) 
#   Fix errors in [PATCH] aic7xxx: fix oops whe hardware is not present
#   
#   This patch was causing a boot panic.  Now fixed.
# 
# drivers/scsi/aic7xxx/aic7xxx_osm.h
#   2004/04/30 18:35:30-05:00 jejb@mulgrave.(none) +12 -0
#   Fix errors in [PATCH] aic7xxx: fix oops whe hardware is not present
# 
# drivers/scsi/aic7xxx/aic7xxx_osm.c
#   2004/04/30 18:35:30-05:00 jejb@mulgrave.(none) +10 -21
#   Fix errors in [PATCH] aic7xxx: fix oops whe hardware is not present
# 
# drivers/scsi/aic7xxx/aic7770_osm.c
#   2004/04/30 18:35:30-05:00 jejb@mulgrave.(none) +4 -4
#   Fix errors in [PATCH] aic7xxx: fix oops whe hardware is not present
# 
# ChangeSet
#   2004/04/29 10:47:50-07:00 greg@kroah.com 
#   USB: fix build error in hci_usb driver due to urb reference count change.
#   
#   This really needs to get fixed the proper way, by making the urb allocation
#   dynamic in the driver, instead of the hack it is currently doing...
# 
# drivers/bluetooth/hci_usb.c
#   2004/04/29 03:47:26-07:00 greg@kroah.com +1 -1
#   USB: fix build error in hci_usb driver due to urb reference count change.
#   
#   This really needs to get fixed the proper way, by making the urb allocation
#   dynamic in the driver, instead of the hack it is currently doing...
# 
# ChangeSet
#   2004/04/29 10:40:57-07:00 greg@kroah.com 
#   USB: remove the wait_for_urb function from bfusb driver as it's no longer needed.
# 
# drivers/bluetooth/bfusb.c
#   2004/04/29 03:40:30-07:00 greg@kroah.com +0 -9
#   USB: remove the wait_for_urb function from bfusb driver as it's no longer needed.
# 
# ChangeSet
#   2004/04/28 21:43:38-07:00 sean@mess.org 
#   [PATCH] USB: fix PhidgetServo driver
#   
#   Somehow I managed to send the wrong version. Here is a patch which fixes
#   that. (Remove a dev_info() which wasn't supposed to be there, and make sure
#   that everything is still consistent in the unlikely event that kmalloc()
#   fails). Just minor cleanups.
# 
# drivers/usb/misc/phidgetservo.c
#   2004/04/28 17:35:09-07:00 sean@mess.org +14 -17
#   USB: fix PhidgetServo driver
# 
# ChangeSet
#   2004/04/28 13:25:14-07:00 david-b@pacbell.net 
#   [PATCH] USB: fix sparc64 2.6.6-rc2-mm2 build busted: usb/core/hub.c hubstatus
#   
#   > 2) An undefined 'hubstatus' variable in drivers/usb/core/hub.c:
#   >
#   >       CC      drivers/usb/core/hub.o
#   >     drivers/usb/core/hub.c: In function `hub_port_connect_change':
#   >     drivers/usb/core/hub.c:1343: error: `hubstatus' undeclared (first use in this function)
#   >     drivers/usb/core/hub.c:1343: error: (Each undeclared identifier is reported only once
#   >     drivers/usb/core/hub.c:1343: error: for each function it appears in.)
#   >     make[3]: *** [drivers/usb/core/hub.o] Error 1
#   >
#   >   As a total shot in the dark, the following fixes the build (I've no clue
#   >   if it is the right fix):
#   
#   Yes, it's the right fix.  Greg, please merge the attached patch,
#   which will be needed on any big-endian system.
# 
# drivers/usb/core/hub.c
#   2004/04/27 01:19:29-07:00 david-b@pacbell.net +1 -1
#   USB: fix sparc64 2.6.6-rc2-mm2 build busted: usb/core/hub.c hubstatus
# 
# ChangeSet
#   2004/04/28 11:52:21-07:00 stern@rowland.harvard.edu 
#   [PATCH] USB: Lock devices during tree traversal
#   
#   On Tue, 27 Apr 2004, Greg KH wrote:
#   
#   > So, what's next in this patch series?  :)
#   
#   Funny you should ask...
#   
#   While writing those patches I noted a problem, that the USB device tree
#   can change while a process reading /proc/bus/usb/devices is traversing it,
#   leading to an oops when a pointer to a no-longer-existing child device is
#   dereferenced.  The ensuing discussion led to the conclusion that the
#   devices' ->serialize locks should be acquired, top-down, while going
#   through the tree.
#   
#   That means changing the code that populates the devices file and changing
#   the code that adds and removes USB device structures.  This patch takes
#   care of the first part.  I'm delaying the second part because that section
#   of usbcore is still under change -- David Brownell's revisions have not
#   yet been fully integrated.
#   
#   A similar change should be made to usb_find_device() and match_device() in
#   usb.c.  You may want to add that yourself.
# 
# drivers/usb/core/devices.c
#   2004/04/28 06:48:48-07:00 stern@rowland.harvard.edu +10 -2
#   USB: Lock devices during tree traversal
# 
# ChangeSet
#   2004/04/28 11:51:52-07:00 sean@mess.org 
#   [PATCH] USB: add new USB PhidgetServo driver
#   
#   Here is a driver for the usb servo controllers from Phidgets
#   <http://www.phidgets.com/>, using sysfs.
#   
#   Note that the devices claim to be hid devices, so I've added them to the
#   hid_blacklist (HID_QUIRK_IGNORE). A servo controller isn't really an hid
#   device (or is it?).
# 
# drivers/usb/misc/Makefile
#   2004/04/21 09:02:00-07:00 sean@mess.org +1 -0
#   USB: add new USB PhidgetServo driver
# 
# drivers/usb/misc/Kconfig
#   2004/04/21 09:02:00-07:00 sean@mess.org +12 -0
#   USB: add new USB PhidgetServo driver
# 
# drivers/usb/input/hid-core.c
#   2004/04/22 02:54:25-07:00 sean@mess.org +12 -0
#   USB: add new USB PhidgetServo driver
# 
# drivers/usb/Makefile
#   2004/04/21 09:02:00-07:00 sean@mess.org +1 -0
#   USB: add new USB PhidgetServo driver
# 
# drivers/usb/misc/phidgetservo.c
#   2004/04/27 04:03:07-07:00 sean@mess.org +330 -0
#   USB: add new USB PhidgetServo driver
# 
# drivers/usb/misc/phidgetservo.c
#   2004/04/27 04:03:07-07:00 sean@mess.org +0 -0
#   BitKeeper file /home/greg/linux/BK/usb-2.6/drivers/usb/misc/phidgetservo.c
# 
# ChangeSet
#   2004/04/28 11:51:03-07:00 greg@kroah.com 
#   My cleanups to the smbios driver.
# 
# drivers/firmware/smbios.c
#   2004/04/28 04:50:49-07:00 greg@kroah.com +13 -31
#   My cleanups to the smbios driver.
# 
# ChangeSet
#   2004/04/28 11:50:29-07:00 Michael_E_Brown@Dell.com 
#   [PATCH] add SMBIOS tables to sysfs -- UPDATED
# 
# drivers/firmware/smbios.h
#   2004/04/28 04:43:56-07:00 Michael_E_Brown@Dell.com +53 -0
#   [PATCH] add SMBIOS tables to sysfs -- UPDATED
# 
# drivers/firmware/smbios.h
#   2004/04/28 04:43:56-07:00 Michael_E_Brown@Dell.com +0 -0
#   BitKeeper file /home/greg/linux/BK/driver-2.6/drivers/firmware/smbios.h
# 
# drivers/firmware/Makefile
#   2004/04/28 04:43:56-07:00 Michael_E_Brown@Dell.com +1 -0
#   [PATCH] add SMBIOS tables to sysfs -- UPDATED
# 
# drivers/firmware/Kconfig
#   2004/04/28 04:43:56-07:00 Michael_E_Brown@Dell.com +8 -0
#   [PATCH] add SMBIOS tables to sysfs -- UPDATED
# 
# drivers/firmware/smbios.c
#   2004/04/28 04:43:56-07:00 Michael_E_Brown@Dell.com +266 -0
#   [PATCH] add SMBIOS tables to sysfs -- UPDATED
# 
# drivers/firmware/smbios.c
#   2004/04/28 04:43:56-07:00 Michael_E_Brown@Dell.com +0 -0
#   BitKeeper file /home/greg/linux/BK/driver-2.6/drivers/firmware/smbios.c
# 
# ChangeSet
#   2004/04/28 11:32:17-05:00 jejb@mulgrave.(none) 
#   Cset exclude: jejb@mulgrave.(none)|ChangeSet|20040404150128|05866
#   
#   scsi_get_device needs no NULL check
# 
# drivers/scsi/scsi.c
#   2004/04/28 11:32:09-05:00 jejb@mulgrave.(none) +0 -0
#   scsi_get_device needs no NULL check
# 
# ChangeSet
#   2004/04/27 17:33:52-07:00 greg@kroah.com 
#   USB: fix compiler warnings in devices.c file.
# 
# drivers/usb/core/devices.c
#   2004/04/27 10:33:12-07:00 greg@kroah.com +2 -2
#   USB: fix compiler warnings in devices.c file.
# 
# ChangeSet
#   2004/04/27 16:02:32-07:00 stern@rowland.harvard.edu 
#   [PATCH] USB: Allocate interface structures dynamically
#   
#   This is a revised version of an earlier patch; I feel a lot better about
#   this one.  Basically it does the same thing as before: allocate
#   interfaces dynamically to avoid the problems with reusing them.
#   
#   The difference is that this patch adds a struct kref to the array of
#   usb_interface_cache's, so the array can persist if needed after the
#   device has been disconnected.  Each interface takes a reference to it
#   (along with the configuration itself), so as long as the interfaces
#   remain pinned in memory the altsettings will also remain.
#   
#   Here is a slight revision of patch as246b.  This one allocates all the new
#   interfaces before changing any other state; otherwise it's the same.
# 
# include/linux/usb.h
#   2004/04/15 07:43:58-07:00 stern@rowland.harvard.edu +38 -3
#   USB: Allocate interface structures dynamically
# 
# drivers/usb/core/usb.c
#   2004/04/15 05:19:20-07:00 stern@rowland.harvard.edu +1 -1
#   USB: Allocate interface structures dynamically
# 
# drivers/usb/core/message.c
#   2004/04/15 05:28:25-07:00 stern@rowland.harvard.edu +46 -13
#   USB: Allocate interface structures dynamically
# 
# drivers/usb/core/devices.c
#   2004/04/15 05:21:07-07:00 stern@rowland.harvard.edu +19 -12
#   USB: Allocate interface structures dynamically
# 
# drivers/usb/core/config.c
#   2004/04/15 07:45:41-07:00 stern@rowland.harvard.edu +31 -44
#   USB: Allocate interface structures dynamically
# 
# ChangeSet
#   2004/04/27 15:22:05-07:00 greg@kroah.com 
#   USB: fix incorrect usb-serial conversion for cur_altsetting from previous patch.
# 
# drivers/usb/serial/usb-serial.c
#   2004/04/27 08:21:23-07:00 greg@kroah.com +1 -1
#   USB: fix incorrect usb-serial conversion for cur_altsetting from previous patch.
# 
# ChangeSet
#   2004/04/27 14:45:49-07:00 greg@kroah.com 
#   USB: make ehci driver use a kref instead of an atomic_t
# 
# drivers/usb/host/ehci.h
#   2004/04/27 14:45:32-07:00 greg@kroah.com +2 -1
#   USB: make ehci driver use a kref instead of an atomic_t
# 
# drivers/usb/host/ehci-sched.c
#   2004/04/27 14:45:32-07:00 greg@kroah.com +3 -3
#   USB: make ehci driver use a kref instead of an atomic_t
# 
# drivers/usb/host/ehci-q.c
#   2004/04/27 14:45:32-07:00 greg@kroah.com +5 -5
#   USB: make ehci driver use a kref instead of an atomic_t
# 
# drivers/usb/host/ehci-mem.c
#   2004/04/27 14:45:32-07:00 greg@kroah.com +23 -16
#   USB: make ehci driver use a kref instead of an atomic_t
# 
# drivers/usb/host/ehci-hcd.c
#   2004/04/27 14:45:32-07:00 greg@kroah.com +1 -1
#   USB: make ehci driver use a kref instead of an atomic_t
# 
# ChangeSet
#   2004/04/27 14:21:13-07:00 greg@kroah.com 
#   USB: removed unused atomic_t in keyspan driver structure.
# 
# drivers/usb/serial/keyspan.c
#   2004/04/27 07:20:12-07:00 greg@kroah.com +0 -3
#   USB: removed unused atomic_t in keyspan driver structure.
# 
# ChangeSet
#   2004/04/27 14:02:13-04:00 jgarzik@redhat.com 
#   [libata sata_sx4] trivial: fix filename in header
# 
# drivers/scsi/sata_sx4.c
#   2004/04/27 14:02:07-04:00 jgarzik@redhat.com +1 -1
#   [libata sata_sx4] trivial: fix filename in header
# 
# ChangeSet
#   2004/04/26 17:07:28-07:00 greg@kroah.com 
#   USB: switch struct urb to use a kref instead of it's own atomic_t
# 
# include/linux/usb.h
#   2004/04/26 10:06:52-07:00 greg@kroah.com +2 -1
#   USB: switch struct urb to use a kref instead of it's own atomic_t
# 
# drivers/usb/core/urb.c
#   2004/04/26 10:06:52-07:00 greg@kroah.com +13 -8
#   USB: switch struct urb to use a kref instead of it's own atomic_t
# 
# ChangeSet
#   2004/04/26 16:11:11-07:00 mdharm-usb@one-eyed-alien.net 
#   [PATCH] USB: usb-storage driver changes for 2.6.x [4/4]
#   
#   This is a trivial patch to remove some duplicate includes.  sched.h and
#   errno.h are already included in this file about a dozen lines or so above
#   this point.
# 
# drivers/usb/storage/usb.c
#   2004/04/24 19:25:23-07:00 mdharm-usb@one-eyed-alien.net +0 -2
#   USB: usb-storage driver changes for 2.6.x [4/4]
# 
# ChangeSet
#   2004/04/26 16:10:49-07:00 mdharm-usb@one-eyed-alien.net 
#   [PATCH] USB: usb-storage driver changes for 2.6.x [3/4]
#   
#   This patch adds some clear-halt calls if a GetMaxLUN fails.  Apparently,
#   some devices (like certain early-rev Zip100s) stall their bulk pipes if
#   they receive a GetMaxLUN.
# 
# drivers/usb/storage/transport.c
#   2004/04/24 19:25:32-07:00 mdharm-usb@one-eyed-alien.net +11 -0
#   USB: usb-storage driver changes for 2.6.x [3/4]
# 
# ChangeSet
#   2004/04/26 16:10:25-07:00 mdharm-usb@one-eyed-alien.net 
#   [PATCH] USB: usb-storage driver changes for 2.6.x [2/4]
#   
#   This is patch as248b from Alan Stern, modified by myself:  This adds a flag
#   which allows us to supress the "unneeded unusual_devs.h entry" message.
#   This is useful for times when idiotic device manufacturers break the rules
#   and release two different devices with the same VID, PID, and revision
#   number.
# 
# drivers/usb/storage/usb.h
#   2004/04/24 19:25:41-07:00 mdharm-usb@one-eyed-alien.net +1 -0
#   USB: usb-storage driver changes for 2.6.x [2/4]
# 
# drivers/usb/storage/usb.c
#   2004/04/24 19:25:41-07:00 mdharm-usb@one-eyed-alien.net +1 -1
#   USB: usb-storage driver changes for 2.6.x [2/4]
# 
# drivers/usb/storage/unusual_devs.h
#   2004/04/24 19:25:41-07:00 mdharm-usb@one-eyed-alien.net +1 -1
#   USB: usb-storage driver changes for 2.6.x [2/4]
# 
# ChangeSet
#   2004/04/26 16:10:02-07:00 mdharm-usb@one-eyed-alien.net 
#   [PATCH] USB: usb-storage driver changes for 2.6.x [1/4]
#   
#   Patch as239b from Alan Stern:  This patch improves the interaction between
#   a SCSI reset, an internally generated reset, and an abort.  This improves
#   our error-recovery in cases where the device is hung (or almost hung) while
#   we're trying to auto-reset.
# 
# drivers/usb/storage/usb.h
#   2004/04/24 19:25:50-07:00 mdharm-usb@one-eyed-alien.net +3 -2
#   USB: usb-storage driver changes for 2.6.x [1/4]
# 
# drivers/usb/storage/transport.c
#   2004/04/24 19:25:50-07:00 mdharm-usb@one-eyed-alien.net +26 -21
#   USB: usb-storage driver changes for 2.6.x [1/4]
# 
# drivers/usb/storage/scsiglue.c
#   2004/04/24 19:25:50-07:00 mdharm-usb@one-eyed-alien.net +11 -8
#   USB: usb-storage driver changes for 2.6.x [1/4]
# 
# ChangeSet
#   2004/04/26 16:09:34-07:00 stern@rowland.harvard.edu 
#   [PATCH] USB: Altsetting updates for usb/serial
#   
#   The updates needed for proper altsetting handling among the USB serial
#   drivers turned out to be a lot easier than I expected, thanks to the
#   organization of the drivers.  Only a handful of changes were needed.
# 
# drivers/usb/serial/usb-serial.c
#   2004/04/26 07:38:00-07:00 stern@rowland.harvard.edu +1 -1
#   USB: Altsetting updates for usb/serial
# 
# drivers/usb/serial/safe_serial.c
#   2004/04/26 07:38:00-07:00 stern@rowland.harvard.edu +1 -1
#   USB: Altsetting updates for usb/serial
# 
# drivers/usb/serial/kobil_sct.c
#   2004/04/26 07:38:00-07:00 stern@rowland.harvard.edu +1 -1
#   USB: Altsetting updates for usb/serial
# 
# drivers/usb/serial/io_ti.c
#   2004/04/26 07:38:00-07:00 stern@rowland.harvard.edu +1 -1
#   USB: Altsetting updates for usb/serial
# 
# ChangeSet
#   2004/04/26 16:09:06-07:00 baldrick@free.fr 
#   [PATCH] USB: be assertive in usbfs
#   
#   Be assertive.
# 
# drivers/usb/core/devio.c
#   2004/04/26 06:48:28-07:00 baldrick@free.fr +2 -2
#   USB: be assertive in usbfs
# 
# ChangeSet
#   2004/04/26 16:08:38-07:00 bellucda@tiscali.it 
#   [PATCH] USB: audits in usb_init()
#   
#   there were some missing audits in usb_init()
# 
# drivers/usb/core/usb.c
#   2004/04/26 14:55:56-07:00 bellucda@tiscali.it +26 -6
#   USB: audits in usb_init()
# 
# ChangeSet
#   2004/04/26 16:08:12-07:00 tejohnson@yahoo.com 
#   [PATCH] USB: mtouchusb update for 2.6.6-rc2
#   
#   The attached patch for the 3M Touch Systems Capacitive controller.
#   
#   Quick list of changes:
#   
#           *    Changed reset from standard USB dev reset to vendor reset
#           *    Changed data sent to host from compensated to raw coordinates
#           *    Eliminated vendor/product module params
#           *    Performed multiple successfull tests with an EXII-5010UC
#   
#   The changes are primarily due to comments from Vojtech Pavlik, as well
#   as making the newer EXII-50XXUC controllers work.
#   
#   Thanks to 3M Touch Systems for sending me some new controllers to test with!
#   
#   An updated HOWTO is also available at:
#   
#   
#   http://groomlakelabs.com/grandamp/code/microtouch/Linux-Input-USB-Touchscreen-HowTo.txt
# 
# drivers/usb/input/mtouchusb.c
#   2004/04/25 12:16:01-07:00 tejohnson@yahoo.com +35 -72
#   USB: mtouchusb update for 2.6.6-rc2
# 
# Documentation/usb/mtouchusb.txt
#   2004/04/25 12:16:49-07:00 tejohnson@yahoo.com +42 -51
#   USB: mtouchusb update for 2.6.6-rc2
# 
# ChangeSet
#   2004/04/26 12:41:28-04:00 akpm@osdl.org 
#   [PATCH] sata_sx4.c warning fix
#   
#   drivers/scsi/sata_sx4.c: In function `pdc20621_put_to_dimm':
#   drivers/scsi/sata_sx4.c:928: warning: comparison is always true due to limited range of data type
#   
#   The code is doing, effectively:
#   
#   	if ((long)(expr returning u32)) >= 0
#   
#   but on 64-bit architectures, that will always be true.
#   
#   So cast the u32 result to s32 before promoting to long so that bit 31
#   correctly propagates into bits 32-63.
# 
# drivers/scsi/sata_sx4.c
#   2004/04/26 02:55:02-04:00 akpm@osdl.org +1 -1
#   sata_sx4.c warning fix
# 
# ChangeSet
#   2004/04/26 12:00:03-04:00 jgarzik@redhat.com 
#   [libata] remove unused struct ata_engine
# 
# include/linux/libata.h
#   2004/04/26 11:59:58-04:00 jgarzik@redhat.com +0 -10
#   [libata] remove unused struct ata_engine
# 
# drivers/scsi/libata-core.c
#   2004/04/26 11:59:58-04:00 jgarzik@redhat.com +0 -3
#   [libata] remove unused struct ata_engine
# 
# ChangeSet
#   2004/04/26 09:06:21-05:00 akpm@osdl.org 
#   [PATCH] scsi_disk_release() warning fix
#   
#   drivers/scsi/sd.c: In function `scsi_disk_release':
#   drivers/scsi/sd.c:1477: warning: unused variable `sdev'
# 
# drivers/scsi/sd.c
#   2004/04/26 01:17:21-05:00 akpm@osdl.org +0 -1
#   scsi_disk_release() warning fix
# 
# ChangeSet
#   2004/04/25 23:51:40-07:00 airlied@pdx.freedesktop.org 
#   Merge pdx.freedesktop.org:/home/airlied/linux/drm-2.6
#   into pdx.freedesktop.org:/home/airlied/linux/drm-dev
# 
# drivers/char/drm/i830_irq.c
#   2004/04/25 23:51:36-07:00 airlied@pdx.freedesktop.org +0 -0
#   Auto merged
# 
# drivers/char/drm/i830_dma.c
#   2004/04/25 23:51:36-07:00 airlied@pdx.freedesktop.org +0 -0
#   Auto merged
# 
# drivers/char/drm/i810_dma.c
#   2004/04/25 23:51:36-07:00 airlied@pdx.freedesktop.org +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/04/25 23:45:24-07:00 airlied@pdx.freedesktop.org 
#   drm_pciids.h:
#     add new tdfx id, and blank ffb ids
# 
# drivers/char/drm/drm_pciids.h
#   2004/04/25 23:44:34-07:00 airlied@pdx.freedesktop.org +5 -0
#   add new tdfx id, and blank ffb ids
# 
# ChangeSet
#   2004/04/25 23:09:37-07:00 airlied@pdx.freedesktop.org 
#   Merge http://linux.bkbits.net/linux-2.5
#   into pdx.freedesktop.org:/home/airlied/linux/drm-dev
# 
# drivers/char/drm/i830_irq.c
#   2004/04/25 23:09:33-07:00 airlied@pdx.freedesktop.org +0 -0
#   Auto merged
# 
# drivers/char/drm/i830_dma.c
#   2004/04/25 23:09:33-07:00 airlied@pdx.freedesktop.org +0 -0
#   Auto merged
# 
# drivers/char/drm/i810_dma.c
#   2004/04/25 23:09:33-07:00 airlied@pdx.freedesktop.org +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/04/26 02:09:12-04:00 jgarzik@redhat.com 
#   [libata promise] make sure our schedule_timeout(N) are never with N==0
#   
#   Make sure we delay for a minimum desired length of time.
# 
# drivers/scsi/sata_sx4.c
#   2004/04/26 02:09:07-04:00 jgarzik@redhat.com +2 -2
#   [libata promise] make sure our schedule_timeout(N) are never with N==0
#   
#   Make sure we delay for a minimum desired length of time.
# 
# drivers/scsi/sata_promise.c
#   2004/04/26 02:09:07-04:00 jgarzik@redhat.com +1 -1
#   [libata promise] make sure our schedule_timeout(N) are never with N==0
#   
#   Make sure we delay for a minimum desired length of time.
# 
# ChangeSet
#   2004/04/26 01:36:12-04:00 jgarzik@redhat.com 
#   [libata] replace per-command semaphore with optional completion
#   
#   The semaphore was initialized and up'd for each command, but nobody
#   was listening.  Replace this with a completion, which may or may not
#   be present.
# 
# include/linux/libata.h
#   2004/04/26 01:36:07-04:00 jgarzik@redhat.com +1 -1
#   [libata] replace per-command semaphore with optional completion
#   
#   The semaphore was initialized and up'd for each command, but nobody
#   was listening.  Replace this with a completion, which may or may not
#   be present.
# 
# drivers/scsi/libata-core.c
#   2004/04/26 01:36:07-04:00 jgarzik@redhat.com +3 -2
#   [libata] replace per-command semaphore with optional completion
#   
#   The semaphore was initialized and up'd for each command, but nobody
#   was listening.  Replace this with a completion, which may or may not
#   be present.
# 
# ChangeSet
#   2004/04/26 01:15:11-04:00 jgarzik@redhat.com 
#   [libata] increase max-sectors limit for modern drives
#   
#   This is the much-discussed "speed up SATA" patch.  It limits requests
#   to 1MB as discussed, rather than the hardware maximum (32MB).
#   
#   As soon as Jens Axboe's patch to dynamically determining request
#   size is merged, max_sectors becomes what it properly should be --
#   a description of the absolute hardware maximum.
# 
# drivers/scsi/libata-scsi.c
#   2004/04/26 01:15:05-04:00 jgarzik@redhat.com +19 -0
#   [libata] increase max-sectors limit for modern drives
#   
#   This is the much-discussed "speed up SATA" patch.  It limits requests
#   to 1MB as discussed, rather than the hardware maximum (32MB).
#   
#   As soon as Jens Axboe's patch to dynamically determining request
#   size is merged, max_sectors becomes what it properly should be --
#   a description of the absolute hardware maximum.
# 
# ChangeSet
#   2004/04/26 00:54:47-04:00 jgarzik@redhat.com 
#   [libata] work queueing cleanups and fixes
#   
#   Make sure to initialize PIO data xfer state.
#   
#   Use queue_delayed_work() rather than manually calling schedule_timeout(),
#   then queue_work(), ourselves.
# 
# drivers/scsi/libata-core.c
#   2004/04/26 00:54:42-04:00 jgarzik@redhat.com +13 -13
#   [libata] work queueing cleanups and fixes
#   
#   Make sure to initialize PIO data xfer state.
#   
#   Use queue_delayed_work() rather than manually calling schedule_timeout(),
#   then queue_work(), ourselves.
# 
# ChangeSet
#   2004/04/26 00:17:47-04:00 jgarzik@redhat.com 
#   [libata] some work on the ATAPI path
#   
#   Remove a lot of redundant code in ATAPI packet submission.
#   
#   ATAPI is still disabled, it doesn't work yet.
# 
# drivers/scsi/libata-scsi.c
#   2004/04/26 00:17:42-04:00 jgarzik@redhat.com +8 -2
#   [libata] some work on the ATAPI path
#   
#   Remove a lot of redundant code in ATAPI packet submission.
#   
#   ATAPI is still disabled, it doesn't work yet.
# 
# drivers/scsi/libata-core.c
#   2004/04/26 00:17:42-04:00 jgarzik@redhat.com +11 -65
#   [libata] some work on the ATAPI path
#   
#   Remove a lot of redundant code in ATAPI packet submission.
#   
#   ATAPI is still disabled, it doesn't work yet.
# 
# ChangeSet
#   2004/04/25 23:54:36-04:00 jgarzik@redhat.com 
#   [libata] internal cleanup: kill ata_pio_start
#   
#   Integrate it into its caller.
# 
# drivers/scsi/libata-core.c
#   2004/04/25 23:54:31-04:00 jgarzik@redhat.com +5 -21
#   [libata] internal cleanup: kill ata_pio_start
#   
#   Integrate it into its caller.
# 
# ChangeSet
#   2004/04/25 23:13:39-04:00 jgarzik@redhat.com 
#   [libata] make ata_wq workqueue local to libata-core module
#   
#   Now that libata-scsi module no longer calls queue_work() directly,
#   we can localize the use of ata_wq.
# 
# drivers/scsi/libata.h
#   2004/04/25 23:13:34-04:00 jgarzik@redhat.com +0 -2
#   [libata] make ata_wq workqueue local to libata-core module
#   
#   Now that libata-scsi module no longer calls queue_work() directly,
#   we can localize the use of ata_wq.
# 
# drivers/scsi/libata-scsi.c
#   2004/04/25 23:13:34-04:00 jgarzik@redhat.com +0 -1
#   [libata] make ata_wq workqueue local to libata-core module
#   
#   Now that libata-scsi module no longer calls queue_work() directly,
#   we can localize the use of ata_wq.
# 
# drivers/scsi/libata-core.c
#   2004/04/25 23:13:34-04:00 jgarzik@redhat.com +1 -1
#   [libata] make ata_wq workqueue local to libata-core module
#   
#   Now that libata-scsi module no longer calls queue_work() directly,
#   we can localize the use of ata_wq.
# 
# ChangeSet
#   2004/04/25 23:05:58-04:00 jgarzik@redhat.com 
#   [libata] move ATAPI command initiation code from libata-scsi to libata-core
# 
# ChangeSet
#   2004/04/25 22:05:57-05:00 andmike@us.ibm.com 
#   [PATCH] fix module unload problem in sd
#   
#   Move scsi_device_get out of sd probe path to allow module to be unloaded
#   when devices are not open.
# 
# drivers/scsi/libata.h
#   2004/04/25 23:05:53-04:00 jgarzik@redhat.com +1 -0
#   [libata] move ATAPI command initiation code from libata-scsi to libata-core
# 
# drivers/scsi/libata-scsi.c
#   2004/04/25 23:05:53-04:00 jgarzik@redhat.com +4 -46
#   [libata] move ATAPI command initiation code from libata-scsi to libata-core
# 
# drivers/scsi/libata-core.c
#   2004/04/25 23:05:53-04:00 jgarzik@redhat.com +53 -0
#   [libata] move ATAPI command initiation code from libata-scsi to libata-core
# 
# drivers/scsi/sd.c
#   2004/04/22 00:20:13-05:00 andmike@us.ibm.com +15 -10
#   fix module unload problem in sd
# 
# ChangeSet
#   2004/04/25 21:47:36-04:00 jgarzik@redhat.com 
#   [libata] move probe execution from katad thread to workqueue thread
#   
#   This allows us to kill the katad thread itself, and several
#   thread-related variables in struct ata_port.
# 
# include/linux/libata.h
#   2004/04/25 21:47:31-04:00 jgarzik@redhat.com +2 -6
#   [libata] move probe execution from katad thread to workqueue thread
#   
#   This allows us to kill the katad thread itself, and several
#   thread-related variables in struct ata_port.
# 
# drivers/scsi/libata.h
#   2004/04/25 21:47:31-04:00 jgarzik@redhat.com +0 -1
#   [libata] move probe execution from katad thread to workqueue thread
#   
#   This allows us to kill the katad thread itself, and several
#   thread-related variables in struct ata_port.
# 
# drivers/scsi/libata-core.c
#   2004/04/25 21:47:31-04:00 jgarzik@redhat.com +20 -137
#   [libata] move probe execution from katad thread to workqueue thread
#   
#   This allows us to kill the katad thread itself, and several
#   thread-related variables in struct ata_port.
# 
# ChangeSet
#   2004/04/25 20:18:57-04:00 jgarzik@redhat.com 
#   [libata] move PIO data xfer from katad thread to workqueue thread
# 
# include/linux/libata.h
#   2004/04/25 20:18:52-04:00 jgarzik@redhat.com +15 -7
#   [libata] move PIO data xfer from katad thread to workqueue thread
# 
# drivers/scsi/libata-core.c
#   2004/04/25 20:18:52-04:00 jgarzik@redhat.com +73 -63
#   [libata] move PIO data xfer from katad thread to workqueue thread
# 
# ChangeSet
#   2004/04/25 19:28:29-04:00 jgarzik@redhat.com 
#   [libata] move ATAPI startup from katad thread to workqueue thread
#   
#   libata creates one thread per ata_port structure.  This is inadequate
#   for our needs, and also cumbersome to maintain, now that workqueues
#   and Rusty's thread work is available.
#   
#   This patch begins to move libata away from doing its own per-port
#   thread, by moving the ATAPI command initiation code to work under
#   the workqueue system.
#   
#   This patch also creates a private workqueue, global to all of libata.
# 
# include/linux/libata.h
#   2004/04/25 19:28:23-04:00 jgarzik@redhat.com +3 -1
#   [libata] move ATAPI startup from katad thread to workqueue thread
#   
#   libata creates one thread per ata_port structure.  This is inadequate
#   for our needs, and also cumbersome to maintain, now that workqueues
#   and Rusty's thread work is available.
#   
#   This patch begins to move libata away from doing its own per-port
#   thread, by moving the ATAPI command initiation code to work under
#   the workqueue system.
#   
#   This patch also creates a private workqueue, global to all of libata.
# 
# drivers/scsi/libata.h
#   2004/04/25 19:28:23-04:00 jgarzik@redhat.com +1 -0
#   [libata] move ATAPI startup from katad thread to workqueue thread
#   
#   libata creates one thread per ata_port structure.  This is inadequate
#   for our needs, and also cumbersome to maintain, now that workqueues
#   and Rusty's thread work is available.
#   
#   This patch begins to move libata away from doing its own per-port
#   thread, by moving the ATAPI command initiation code to work under
#   the workqueue system.
#   
#   This patch also creates a private workqueue, global to all of libata.
# 
# drivers/scsi/libata-scsi.c
#   2004/04/25 19:28:23-04:00 jgarzik@redhat.com +3 -2
#   [libata] move ATAPI startup from katad thread to workqueue thread
#   
#   libata creates one thread per ata_port structure.  This is inadequate
#   for our needs, and also cumbersome to maintain, now that workqueues
#   and Rusty's thread work is available.
#   
#   This patch begins to move libata away from doing its own per-port
#   thread, by moving the ATAPI command initiation code to work under
#   the workqueue system.
#   
#   This patch also creates a private workqueue, global to all of libata.
# 
# drivers/scsi/libata-core.c
#   2004/04/25 19:28:23-04:00 jgarzik@redhat.com +22 -12
#   [libata] move ATAPI startup from katad thread to workqueue thread
#   
#   libata creates one thread per ata_port structure.  This is inadequate
#   for our needs, and also cumbersome to maintain, now that workqueues
#   and Rusty's thread work is available.
#   
#   This patch begins to move libata away from doing its own per-port
#   thread, by moving the ATAPI command initiation code to work under
#   the workqueue system.
#   
#   This patch also creates a private workqueue, global to all of libata.
# 
# ChangeSet
#   2004/04/25 09:23:51-05:00 aradford@amcc.com 
#   [PATCH] 3ware driver update
#   
#   This patch includes the following driver changes:
#   
#      1.26.00.038 - Roll driver minor version to 26 to denote kernel 2.6.
#                    Add support for cmds_per_lun module parameter.
#      1.26.00.039 - Fix bug in tw_chrdev_ioctl() polling code.
#                    Fix data_buffer_length usage in tw_chrdev_ioctl().
#                    Update contact information.
# 
# drivers/scsi/3w-xxxx.h
#   2004/04/21 17:27:30-05:00 aradford@amcc.com +4 -4
#   3ware driver update
# 
# drivers/scsi/3w-xxxx.c
#   2004/04/21 17:27:29-05:00 aradford@amcc.com +26 -22
#   3ware driver update
# 
# ChangeSet
#   2004/04/25 09:20:56-05:00 garloff@suse.de 
#   [PATCH] scsi: don't attach device if PQ indicates not connected
# 
# include/scsi/scsi_device.h
#   2004/04/21 11:55:21-05:00 garloff@suse.de +1 -0
#   don't attach device if PQ indicates not connected
# 
# include/scsi/scsi.h
#   2004/04/21 11:54:43-05:00 garloff@suse.de +7 -0
#   don't attach device if PQ indicates not connected
# 
# drivers/scsi/scsi_sysfs.c
#   2004/04/21 11:56:33-05:00 garloff@suse.de +2 -1
#   don't attach device if PQ indicates not connected
# 
# drivers/scsi/scsi_scan.c
#   2004/04/21 11:56:02-05:00 garloff@suse.de +5 -10
#   don't attach device if PQ indicates not connected
# 
# ChangeSet
#   2004/04/25 09:13:40-05:00 chrisw@osdl.org 
#   [PATCH] Update aacraid MAINTAINERS entry
# 
# MAINTAINERS
#   2004/04/19 07:59:12-05:00 chrisw@osdl.org +2 -4
#   Update aacraid MAINTAINERS entry
# 
# ChangeSet
#   2004/04/25 09:12:06-05:00 jejb@mulgrave.(none) 
#   aic7xxx: compile fix for EISA only case
#   
#   We can't refer to PCI functions for a pure
#   EISA machine.
# 
# drivers/scsi/aic7xxx/aic7xxx_osm.c
#   2004/04/25 09:11:53-05:00 jejb@mulgrave.(none) +2 -0
#   aic7xxx: compile fix for EISA only case
# 
# ChangeSet
#   2004/04/25 09:10:30-05:00 akpm@osdl.org 
#   [PATCH] aic7xxx: fix oops whe hardware is not present
#   
#   From: Herbert Xu <herbert@gondor.apana.org.au>
#   
#   This is because aic7xxx does not unregister itself properly if no devices
#   are found.  This patch fixes the problem.
# 
# drivers/scsi/aic7xxx/aic7xxx_osm.h
#   2004/04/06 23:09:31-05:00 akpm@osdl.org +1 -1
#   aic7xxx: fix oops whe hardware is not present
# 
# drivers/scsi/aic7xxx/aic7xxx_osm.c
#   2004/04/06 23:09:31-05:00 akpm@osdl.org +19 -4
#   aic7xxx: fix oops whe hardware is not present
# 
# drivers/scsi/aic7xxx/aic7770_osm.c
#   2004/04/06 23:09:31-05:00 akpm@osdl.org +12 -13
#   aic7xxx: fix oops whe hardware is not present
# 
# ChangeSet
#   2004/04/25 09:08:55-05:00 Kai.Makisara@kolumbus.fi 
#   [PATCH] SCSI tape log message fixes
#   
#   This patch changes the st console/log messages:
#   
#   - __GFP_NOWARN added to buffer allocation to suppress useless messages
#     when having to use smaller than default segments
#   - move log message from enlarge_buffer() to caller so that the tape name
#     can be printed and remove some debugging messages; now the st messages
#     should include drive name where applicable (a problem reported by
#     Hironobu Ishii)
#   - setting options is logged only when debugging; the most important
#     options are now seen in sysfs
# 
# drivers/scsi/st.c
#   2004/04/04 07:39:34-05:00 Kai.Makisara@kolumbus.fi +54 -66
#   SCSI tape log message fixes
# 
# ChangeSet
#   2004/04/25 09:05:51-05:00 praka@users.sourceforge.net 
#   [PATCH] qla2xxx set current state fixes
#   
#   - always set_current_state(TASK_UNINTERRUBTIBLE) unless we explicitly
#     check for signals.
#   
#   - make all timeouts take HZ based values.
# 
# drivers/scsi/qla2xxx/qla_os.c
#   2004/03/31 15:56:30-06:00 praka@users.sourceforge.net +14 -14
#    qla2xxx set current state fixes
# 
# drivers/scsi/qla2xxx/qla_init.c
#   2004/03/31 15:48:53-06:00 praka@users.sourceforge.net +1 -1
#    qla2xxx set current state fixes
# 
# ChangeSet
#   2004/04/25 09:04:26-05:00 aris@cathedrallabs.org 
#   [PATCH] qlogic_cs: use qlogicfas408 module
#   
#   this patch kills qlogic_core.c and I guess the same idea can be
#   applied to other pcmcia scsi drivers. comments?
# 
# drivers/scsi/pcmcia/qlogic_stub.c
#   2004/03/30 13:46:44-06:00 aris@cathedrallabs.org +35 -30
#   qlogic_cs: use qlogicfas408 module
# 
# drivers/scsi/pcmcia/Makefile
#   2004/03/30 13:04:19-06:00 aris@cathedrallabs.org +1 -1
#   qlogic_cs: use qlogicfas408 module
# 
# BitKeeper/deleted/.del-qlogic_core.c~5bf1eee84f4e0415
#   2004/04/25 09:04:14-05:00 aris@cathedrallabs.org +0 -0
#   Delete: drivers/scsi/pcmcia/qlogic_core.c
# 
# ChangeSet
#   2004/04/25 09:02:48-05:00 aris@cathedrallabs.org 
#   [PATCH] qlogicfas: split and create a new module
# 
# drivers/scsi/qlogicfas408.h
#   2004/03/30 10:49:32-06:00 aris@cathedrallabs.org +27 -31
#   qlogicfas: split and create a new module with only
# 
# drivers/scsi/qlogicfas408.c
#   2004/04/25 09:02:28-05:00 aris@cathedrallabs.org +637 -0
# 
# drivers/scsi/qlogicfas.c
#   2004/03/30 10:51:19-06:00 aris@cathedrallabs.org +50 -571
#   qlogicfas: split and create a new module with only
# 
# drivers/scsi/Makefile
#   2004/03/30 06:54:40-06:00 aris@cathedrallabs.org +2 -1
#   qlogicfas: split and create a new module with only
# 
# drivers/scsi/qlogicfas408.c
#   2004/04/25 09:02:28-05:00 aris@cathedrallabs.org +0 -0
#   BitKeeper file /home/jejb/BK/scsi-misc-2.6/drivers/scsi/qlogicfas408.c
# 
# ChangeSet
#   2004/04/25 09:00:34-05:00 aris@cathedrallabs.org 
#   [PATCH] qlogicfas: kill horrible irq probing
#   
#   	this patch kills irq probe and also I/O because isn't useful to
#   	probe I/O if we can't probe irq later.
# 
# drivers/scsi/qlogicfas.c
#   2004/03/18 05:31:52-06:00 aris@cathedrallabs.org +26 -45
#   qlogicfas: kill horrible irq probing
# 
# ChangeSet
#   2004/04/25 08:44:44-05:00 jejb@mulgrave.(none) 
#   MPT Fusion add back FC909 support
#   
#   From: "Moore, Eric Dean" <Emoore@lsil.com>
# 
# drivers/message/fusion/mptscsih.c
#   2004/04/25 08:44:31-05:00 jejb@mulgrave.(none) +23 -10
#   MPT Fusion add back FC909 support
# 
# drivers/message/fusion/mptctl.h
#   2004/04/25 08:44:31-05:00 jejb@mulgrave.(none) +31 -0
#   MPT Fusion add back FC909 support
# 
# drivers/message/fusion/mptctl.c
#   2004/04/25 08:44:31-05:00 jejb@mulgrave.(none) +52 -26
#   MPT Fusion add back FC909 support
# 
# drivers/message/fusion/mptbase.h
#   2004/04/25 08:44:31-05:00 jejb@mulgrave.(none) +2 -2
#   MPT Fusion add back FC909 support
# 
# drivers/message/fusion/mptbase.c
#   2004/04/25 08:44:31-05:00 jejb@mulgrave.(none) +157 -0
#   MPT Fusion add back FC909 support
# 
# ChangeSet
#   2004/04/24 19:37:41-07:00 airlied@pdx.freedesktop.org 
#   drm_irq.h:
#     remove NO_VERSION
# 
# drivers/char/drm/drm_irq.h
#   2004/04/24 19:36:53-07:00 airlied@pdx.freedesktop.org +0 -1
#   remove NO_VERSION
# 
# ChangeSet
#   2004/04/24 22:15:40-04:00 jeremy@sgi.com 
#   [PATCH] sata_vsc initialization fix
# 
# drivers/scsi/sata_vsc.c
#   2004/04/22 15:14:14-04:00 jeremy@sgi.com +4 -0
#   sata_vsc initialization fix
# 
# ChangeSet
#   2004/04/24 14:12:03-04:00 jgarzik@redhat.com 
#   [libata] clean up taskfile submission to hardware
#   
#   When writing taskfile (an ATA command) to the controller, the exact
#   setup of the taskfile is dependent on the taskfile "protocol":
#   PIO, PIO Multiple, DMA, Non-data, etc.
#   
#   So, we separate out the submission of the taskfile to hardware into
#   a separate function ata_qc_issue_prot(), which will later be the
#   home for more code.
#   
#   Also, remove some dead code (#if 0'd).
# 
# include/linux/libata.h
#   2004/04/24 14:11:58-04:00 jgarzik@redhat.com +0 -1
#   [libata] clean up taskfile submission to hardware
#   
#   When writing taskfile (an ATA command) to the controller, the exact
#   setup of the taskfile is dependent on the taskfile "protocol":
#   PIO, PIO Multiple, DMA, Non-data, etc.
#   
#   So, we separate out the submission of the taskfile to hardware into
#   a separate function ata_qc_issue_prot(), which will later be the
#   home for more code.
#   
#   Also, remove some dead code (#if 0'd).
# 
# drivers/scsi/libata-core.c
#   2004/04/24 14:11:58-04:00 jgarzik@redhat.com +53 -56
#   [libata] clean up taskfile submission to hardware
#   
#   When writing taskfile (an ATA command) to the controller, the exact
#   setup of the taskfile is dependent on the taskfile "protocol":
#   PIO, PIO Multiple, DMA, Non-data, etc.
#   
#   So, we separate out the submission of the taskfile to hardware into
#   a separate function ata_qc_issue_prot(), which will later be the
#   home for more code.
#   
#   Also, remove some dead code (#if 0'd).
# 
# ChangeSet
#   2004/04/24 13:26:06-04:00 jgarzik@redhat.com 
#   [libata] add ata_tf_{to,from}_fis helpers
# 
# include/linux/libata.h
#   2004/04/24 13:26:01-04:00 jgarzik@redhat.com +2 -0
#   [libata] add ata_tf_{to,from}_fis helpers
# 
# drivers/scsi/libata-core.c
#   2004/04/24 13:26:01-04:00 jgarzik@redhat.com +73 -0
#   [libata] add ata_tf_{to,from}_fis helpers
# 
# ChangeSet
#   2004/04/23 16:41:30-07:00 stern@rowland.harvard.edu 
#   [PATCH] USB: Altsetting update for USB net drivers
#   
#   The only driver under usb/net that needed any altsetting changes was
#   usbnet.  I'm not looking forward to going through all the source files
#   under usb/serial. :-(
# 
# drivers/usb/net/usbnet.c
#   2004/04/22 09:56:28-07:00 stern@rowland.harvard.edu +4 -4
#   USB: Altsetting update for USB net drivers
# 
# ChangeSet
#   2004/04/23 16:41:04-07:00 stern@rowland.harvard.edu 
#   [PATCH] USB: Altsetting update for USB misc drivers
#   
#   This is the altsetting update for the drivers under usb/misc.  As you can,
#   not much was needed at all.
# 
# drivers/usb/misc/uss720.c
#   2004/04/22 09:08:37-07:00 stern@rowland.harvard.edu +1 -1
#   USB: Altsetting update for USB misc drivers
# 
# drivers/usb/misc/legousbtower.c
#   2004/04/22 09:01:26-07:00 stern@rowland.harvard.edu +1 -1
#   USB: Altsetting update for USB misc drivers
# 
# ChangeSet
#   2004/04/23 16:40:35-07:00 stern@rowland.harvard.edu 
#   [PATCH] USB: Altsetting updates for USB media drivers
#   
#   This patch implements the new altsetting regime for the drivers under
#   usb/media.  Not much needed to be changed.  I'm unable to test any of the
#   changes, but at least they compile all right (except that I didn't even
#   try to compile the pwc driver since it's marked BROKEN).
#   
#   The stv680 and w9968cf drivers still include an assumption that they are
#   bound to interface number 0.  Since that the drivers are fairly tightly
#   linked to a specific kind of device I didn't try to change those
#   assumptions, but maybe they should be changed.
# 
# drivers/usb/media/vicam.c
#   2004/04/22 04:41:49-07:00 stern@rowland.harvard.edu +1 -1
#   USB: Altsetting updates for USB media drivers
# 
# drivers/usb/media/ultracam.c
#   2004/04/21 09:26:45-07:00 stern@rowland.harvard.edu +4 -3
#   USB: Altsetting updates for USB media drivers
# 
# drivers/usb/media/se401.c
#   2004/04/21 09:21:19-07:00 stern@rowland.harvard.edu +1 -1
#   USB: Altsetting updates for USB media drivers
# 
# drivers/usb/media/pwc-if.c
#   2004/04/21 09:18:47-07:00 stern@rowland.harvard.edu +5 -2
#   USB: Altsetting updates for USB media drivers
# 
# drivers/usb/media/ov511.c
#   2004/04/22 04:40:56-07:00 stern@rowland.harvard.edu +11 -3
#   USB: Altsetting updates for USB media drivers
# 
# drivers/usb/media/konicawc.c
#   2004/04/21 09:41:57-07:00 stern@rowland.harvard.edu +12 -5
#   USB: Altsetting updates for USB media drivers
# 
# drivers/usb/media/ibmcam.c
#   2004/04/21 09:32:00-07:00 stern@rowland.harvard.edu +5 -4
#   USB: Altsetting updates for USB media drivers
# 
# ChangeSet
#   2004/04/23 16:40:06-07:00 stern@rowland.harvard.edu 
#   [PATCH] USB: Cosmetic improvements for the UHCI driver
#   
#   This patch makes a few minor improvements to the appearance of the UHCI
#   driver.  Please apply.
# 
# drivers/usb/host/uhci-hcd.h
#   2004/04/19 04:05:56-07:00 stern@rowland.harvard.edu +7 -7
#   USB: Cosmetic improvements for the UHCI driver
# 
# drivers/usb/host/uhci-hcd.c
#   2004/04/14 03:19:54-07:00 stern@rowland.harvard.edu +10 -10
#   USB: Cosmetic improvements for the UHCI driver
# 
# ChangeSet
#   2004/04/23 16:39:38-07:00 stern@rowland.harvard.edu 
#   [PATCH] USB: Ignore URB_NO_INTERRUPT flag in UHCI
#   
#   Following a suggestion of David Brownell's I have decided to remove
#   support for the URB_NO_INTERRUPT flag in the UHCI driver.  The overall
#   effect of the flag is to reduce the number of interrupts, thereby
#   improving throughput somewhat while increasing the duration of the
#   remaining IRQ handlers quite a lot (i.e., increasing interrupt variance).
#   So I think we're better off without it.  Mind you, this is all in the
#   absence of any firm measurements.
#   
#   A common case where this will come up is during usb-storage bulk
#   transfers.  Such transfers are generally divided into scatter-gather
#   components each corresponding to a single URB and transferring one memory
#   page (4 KB).  While generating an interrupt for each one is a little
#   faster than ideal -- about every 3 ms -- it's better than waiting until 64
#   KB has been transferred and there are 1024 individual TDs to clean up
#   during the IRQ.
# 
# drivers/usb/host/uhci-hcd.c
#   2004/04/16 04:02:37-07:00 stern@rowland.harvard.edu +7 -3
#   USB: Ignore URB_NO_INTERRUPT flag in UHCI
# 
# ChangeSet
#   2004/04/23 16:20:26-07:00 baldrick@free.fr 
#   [PATCH] USB usbfs: drop pointless racy check
#   
#   The check of interface->dev.driver requires a lock to be taken
#   to protect against driver binding changes.  But in fact I think it
#   is better just to drop the test.  The result is that the caller is
#   required to claim an interface before changing the altsetting,
#   which is consistent with the other routines that operate on
#   interfaces.
#   
#    devio.c |    6 ++----
#    1 files changed, 2 insertions(+), 4 deletions(-)
# 
# drivers/usb/core/devio.c
#   2004/04/14 05:18:37-07:00 baldrick@free.fr +2 -4
#   USB usbfs: drop pointless racy check
# 
# ChangeSet
#   2004/04/23 16:20:07-07:00 baldrick@free.fr 
#   [PATCH] USB usbfs: missing lock in proc_getdriver
#   
#   Hi Oliver,
#   
#   > I expect it to rarely matter, but it might matter now and then. It's
#   > just a question of hygiene. If you are using a temporary buffer I'd
#   > like to see it used to full advantage. So either drop the lock or do
#   > a direct copy. I'd prefer the first option your patch implemented.
#   
#   I agree.  Greg, please consider applying the updated patch:
#   
#   
#   
#   Protect against driver binding changes while reading the driver name.
# 
# drivers/usb/core/devio.c
#   2004/04/14 07:03:12-07:00 baldrick@free.fr +6 -4
#   USB usbfs: missing lock in proc_getdriver
# 
# ChangeSet
#   2004/04/23 16:19:43-07:00 baldrick@free.fr 
#   [PATCH] USB usbfs: destroy submitted urbs only on the disconnected interface
#   
#   The remaining three patches contain miscellaneous fixes to usbfs.
#   This one fixes up the disconnect callback to only shoot down urbs
#   on the disconnected interface, and not on all interfaces.  It also adds
#   a sanity check (this check is pointless because the interface could
#   never have been claimed in the first place if it failed, but I feel better
#   having it there).
#   
#    devio.c |    6 ++++--
#    1 files changed, 4 insertions(+), 2 deletions(-)
# 
# drivers/usb/core/devio.c
#   2004/04/14 05:18:20-07:00 baldrick@free.fr +4 -2
#   USB usbfs: destroy submitted urbs only on the disconnected interface
# 
# ChangeSet
#   2004/04/23 16:19:14-07:00 baldrick@free.fr 
#   [PATCH] USB usbfs: fix up releaseintf
#   
#   The semaphore is now taken in the callers.
#   
#    devio.c |    2 --
#    1 files changed, 2 deletions(-)
# 
# drivers/usb/core/devio.c
#   2004/04/14 05:18:08-07:00 baldrick@free.fr +0 -2
#   USB usbfs: fix up releaseintf
# 
# ChangeSet
#   2004/04/23 16:18:50-07:00 baldrick@free.fr 
#   [PATCH] USB usbfs: fix up proc_ioctl
#   
#   The semaphore is now taken in the caller.
#   
#    devio.c |    2 --
#    1 files changed, 2 deletions(-)
# 
# drivers/usb/core/devio.c
#   2004/04/14 05:17:56-07:00 baldrick@free.fr +0 -2
#   USB usbfs: fix up proc_ioctl
# 
# ChangeSet
#   2004/04/23 16:18:24-07:00 baldrick@free.fr 
#   [PATCH] USB usbfs: fix up proc_setconfig
#   
#   The semaphore is now taken in the caller.
#   
#    devio.c |    2 --
#    1 files changed, 2 deletions(-)
# 
# drivers/usb/core/devio.c
#   2004/04/14 05:17:46-07:00 baldrick@free.fr +0 -2
#   USB usbfs: fix up proc_setconfig
# 
# ChangeSet
#   2004/04/23 16:17:59-07:00 baldrick@free.fr 
#   [PATCH] USB usbfs: remove obsolete comment from proc_resetdevice
#   
#    devio.c |    3 ---
#    1 files changed, 3 deletions(-)
# 
# drivers/usb/core/devio.c
#   2004/04/14 05:17:37-07:00 baldrick@free.fr +0 -3
#   USB usbfs: remove obsolete comment from proc_resetdevice
# 
# ChangeSet
#   2004/04/23 16:17:35-07:00 baldrick@free.fr 
#   [PATCH] USB usbfs: replace the per-file semaphore with the per-device semaphore
#   
#    devio.c		|   43 +++++++++++++++++++++++--------------------
#    usbdevice_fs.h	|    1 -
#    2 files changed, 23 insertions(+), 21 deletions(-)
# 
# include/linux/usbdevice_fs.h
#   2004/04/14 05:34:00-07:00 baldrick@free.fr +0 -1
#   USB usbfs: replace the per-file semaphore with the per-device semaphore
# 
# drivers/usb/core/devio.c
#   2004/04/14 05:17:29-07:00 baldrick@free.fr +23 -20
#   USB usbfs: replace the per-file semaphore with the per-device semaphore
# 
# ChangeSet
#   2004/04/23 16:17:09-07:00 baldrick@free.fr 
#   [PATCH] USB usbfs: take a reference to the usb device
#   
#   Hi Greg, this is the first of a series of patches that replace the
#   per-file semaphore ps->devsem with the per-device semaphore
#   ps->dev->serialize.  The role of devsem was to protect against
#   device disconnection.  This can be done equally well using
#   ps->dev->serialize.  On the other hand, ps->dev->serialize
#   protects against configuration and other changes, and has
#   already been introduced into usbfs in several places.  Using
#   just one semaphore simplifies the code and removes some
#   remaining race conditions.  It should also fix the oopses some
#   people have been seeing.  In this first patch, a reference is
#   taken to the usb device as long as the usbfs file is open.  That
#   way we can use ps->dev->serialize for as long as ps exists.
#   
#    devio.c |   27 ++++++++++++++++-----------
#    inode.c |    3 ---
#    2 files changed, 16 insertions(+), 14 deletions(-)
# 
# drivers/usb/core/inode.c
#   2004/04/14 05:15:29-07:00 baldrick@free.fr +0 -3
#   USB usbfs: take a reference to the usb device
# 
# drivers/usb/core/devio.c
#   2004/04/14 05:15:29-07:00 baldrick@free.fr +16 -11
#   USB usbfs: take a reference to the usb device
# 
# ChangeSet
#   2004/04/23 15:45:24-07:00 david-b@pacbell.net 
#   [PATCH] USB: khubd fixes
#   
#   This goes on top of the other enumeration patch I just sent,
#   to handle some dubious and/or broken hub configurations better.
#   
#   
#   Make khubd handle some cases better:
#   
#    - Track power budget for bus-powered hubs.  This version only warns
#      when the budgets are exceeded.  Eventually, the budgets should help
#      prevent such errors.
#   
#    - Rejects illegal USB setup:  two consecutive bus powered hubs
#      would exceed the voltage drop budget, causing much flakiness.
#   
#    - For hosts with high speed hubs, warn when devices are hooked up
#      to full speed hubs if they'd be faster on a high speed one.
#   
#    - For hubs that don't do power switching, don't try to use it
#   
#    - For hubs that aren't self-powered, don't report local power status
# 
# drivers/usb/core/hub.h
#   2004/04/19 08:29:02-07:00 david-b@pacbell.net +2 -0
#   USB: khubd fixes
# 
# drivers/usb/core/hub.c
#   2004/04/20 20:44:45-07:00 david-b@pacbell.net +143 -15
#   USB: khubd fixes
# 
# ChangeSet
#   2004/04/23 15:44:57-07:00 david-b@pacbell.net 
#   [PATCH] USB: re-factor enumeration logic
#   
#   This is an update to some patches from the December/January
#   timeframe, which will help sort out some of the mess for
#   drivers that need to use the reset logic.  It's one of the
#   last significant patches in my gadget-2.6 tree that haven't
#   yet been merged into the main kernel tree.
#   
#   
#   More refactoring of the enumeration code paths:
#   
#    * The first half of usb_new_device() becomes the second half of a new
#      hub_port_init() routine (resets, sets address, gets descriptor)
#   
#    * The middle chunk of hub_port_connect_change() becomes the first half
#      of that new hub_port_init() routine.
#   
#    * Khubd uses that new routine in hub_port_connect_change().
#   
#    * Now usb_new_device() cleans up better after faults, and has
#      a more useful locking policy (caller owns dev->serialize).
#   
#    * Has related minor cleanups including commenting some of
#      the curious request sequences coming from khubd.
#   
#   Refactoring means a lot of the current usb_reset_device() logic won't
#   need to stay an imperfect clone of the enumeration code ... soon, it
#   can just call hub_port_init().
#   
#   Even without touching usb_reset_device(), this eliminates a deadlock.
#   Previously, address0_sem was used both during probe and during reset,
#   so probe routines can't implement DFU firmware download (involves a
#   reset; DFU also uncovers other problems) or safely recover from probe
#   faults by resetting (usb-storage can try that).  Now that lock is no
#   longer held during probe(); so those deadlocks are gone.  (And some
#   drivers, like at76c503, can start to remove ugly workarounds.)
# 
# drivers/usb/core/usb.c
#   2004/04/21 03:46:29-07:00 david-b@pacbell.net +13 -79
#   USB: re-factor enumeration logic
# 
# drivers/usb/core/hub.c
#   2004/04/21 03:46:29-07:00 david-b@pacbell.net +215 -72
#   USB: re-factor enumeration logic
# 
# drivers/usb/core/hcd.c
#   2004/04/21 03:46:29-07:00 david-b@pacbell.net +12 -0
#   USB: re-factor enumeration logic
# 
# ChangeSet
#   2004/04/23 15:44:32-07:00 david-b@pacbell.net 
#   [PATCH] USB: usbtest, smp unlink modes
#   
#   Handle some SMP-visible unlink states better.
# 
# drivers/usb/misc/usbtest.c
#   2004/04/14 20:23:11-07:00 david-b@pacbell.net +3 -3
#   USB: usbtest, smp unlink modes
# 
# ChangeSet
#   2004/04/23 14:50:19-07:00 greg@kroah.com 
#   [PATCH] USB: fix devio compiler warnings created by previous patch.
# 
# drivers/usb/core/devio.c
#   2004/04/23 07:33:30-07:00 greg@kroah.com +2 -2
#   USB: fix devio compiler warnings created by previous patch.
# 
# ChangeSet
#   2004/04/23 14:49:56-07:00 stern@rowland.harvard.edu 
#   [PATCH] USB: Eliminate dead code from the UHCI driver
#   
#   I'm not sure what this piece of code is doing in the UHCI driver.  It
#   looks like someone envisioned queuing several URBs for the same endpoint
#   simultaneously.  Anyway, the driver can't do that and this code can never
#   run.
# 
# drivers/usb/host/uhci-hcd.c
#   2004/04/16 04:02:37-07:00 stern@rowland.harvard.edu +1 -11
#   USB: Eliminate dead code from the UHCI driver
# 
# ChangeSet
#   2004/04/23 14:49:33-07:00 stern@rowland.harvard.edu 
#   [PATCH] USB: Implement endpoint_disable() for UHCI
#   
#   This patch implements the endpoint_disable method for the UHCI driver, as
#   you requested a while back.  It guarantees that during unbinding events
#   (disconnect, configuration change, rmmod) the UHCI driver will have
#   finished using every URB for the interface being unbound.  It doesn't
#   quite guarantee that the completion handlers will have finished running,
#   but it would take a pretty unlikely race to violate that assumption.  (I
#   think it's the same with the OHCI and EHCI drivers.)
#   
#   Despite the patch numbering this one applies _after_ as249, which is a
#   more important bugfix.
# 
# drivers/usb/host/uhci-hcd.h
#   2004/04/19 04:05:56-07:00 stern@rowland.harvard.edu +2 -0
#   USB: Implement endpoint_disable() for UHCI
# 
# drivers/usb/host/uhci-hcd.c
#   2004/04/14 03:19:54-07:00 stern@rowland.harvard.edu +49 -0
#   USB: Implement endpoint_disable() for UHCI
# 
# ChangeSet
#   2004/04/23 14:49:10-07:00 stern@rowland.harvard.edu 
#   [PATCH] USB: unusual_devs.h update
#   
#   On Tue, 20 Apr 2004, Damian Ivereigh wrote:
#   
#   > Here is the output of dmesg when plugging in an IBM USB MemKey
#   >
#   > usb-storage: This device (0a16,8888,0100 S 06 P 50) has unneeded SubClass and Protocol entries in unusual_devs.h
#   >    Please send a copy of this message to <linux-usb-devel@lists.sourceforge.net>
#   
#   Thank you for sending this in.  Greg and Pete, here's the patch.
# 
# drivers/usb/storage/unusual_devs.h
#   2004/04/19 05:11:29-07:00 stern@rowland.harvard.edu +1 -1
#   USB: unusual_devs.h update
# 
# ChangeSet
#   2004/04/23 14:48:47-07:00 stern@rowland.harvard.edu 
#   [PATCH] USB: Remove unusual_devs entries for Minolta DiMAGE 7, 7Hi
#   
#   It looks safe to conclude that the unusual_devs.h entries for the Minolta
#   DiMAGE 7x cameras aren't needed.  (Michael has tested the 7Hi and it's
#   definitely unnecessary.)  The two other DiMAGE entries probably aren't
#   needed either, but we don't have any evidence of that so I'm leaving them.
# 
# drivers/usb/storage/unusual_devs.h
#   2004/04/16 04:37:06-07:00 stern@rowland.harvard.edu +0 -16
#   USB: Remove unusual_devs entries for Minolta DiMAGE 7, 7Hi
# 
# ChangeSet
#   2004/04/23 14:48:28-07:00 david-b@pacbell.net 
#   [PATCH] USB: root hubs can report remote wakeup feature
#   
#   The patch lets HCDs report the root hub remote wakeup feature to usbcore
#   through config descriptors, and lets usbcore say whether or not remote
#   wakeup (of host from sleep, by devices) should be enabled.
#   
#   Both OHCI and UHCI HCDs have some remote wakeup support already; I'm not
#   too sure how well it works.  Given (separate) patches, their root hubs
#   can start to act more like other hubs in this area too.  That'll make
#   it easier to start using USB suspend mode.
# 
# drivers/usb/core/hcd.h
#   2004/04/13 11:48:39-07:00 david-b@pacbell.net +10 -1
#   USB: root hubs can report remote wakeup feature
# 
# drivers/usb/core/hcd.c
#   2004/04/13 11:33:31-07:00 david-b@pacbell.net +28 -11
#   USB: root hubs can report remote wakeup feature
# 
# ChangeSet
#   2004/04/23 14:48:02-07:00 david-b@pacbell.net 
#   [PATCH] USB: fix usbfs iso interval problem
#   
#   In 2.6, ISO transfers on USB require a value for urb->interval ... which
#   usbfs didn't provide (until this patch), or let user mode drivers specify.
#   
#   This patch initializes the urb->interval from the endpoint's descriptor,
#   so ISO transfers should now work from userspace.  It also fixes a related
#   problem for interrupt transfers.
# 
# drivers/usb/core/devio.c
#   2004/04/14 13:36:53-07:00 david-b@pacbell.net +7 -1
#   USB: fix usbfs iso interval problem
# 
# ChangeSet
#   2004/04/22 05:22:10-07:00 airlied@pdx.freedesktop.org 
#   Merge pdx.freedesktop.org:/home/airlied/linux/linus-2.5
#   into pdx.freedesktop.org:/home/airlied/linux/drm-2.6
# 
# drivers/char/drm/i830_irq.c
#   2004/04/22 05:22:01-07:00 airlied@pdx.freedesktop.org +0 -0
#   Auto merged
# 
# drivers/char/drm/i830_dma.c
#   2004/04/22 05:22:00-07:00 airlied@pdx.freedesktop.org +0 -0
#   Auto merged
# 
# drivers/char/drm/i810_dma.c
#   2004/04/22 05:22:00-07:00 airlied@pdx.freedesktop.org +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/04/22 04:39:19-07:00 airlied@pdx.freedesktop.org 
#   drmP.h:
#     remove unused structure
# 
# drivers/char/drm/drmP.h
#   2004/04/22 04:36:28-07:00 airlied@pdx.freedesktop.org +0 -7
#   remove unused structure
# 
# ChangeSet
#   2004/04/22 04:25:40-07:00 airlied@pdx.freedesktop.org 
#   convert DRM to use pci device structures on Linux, move pci ids
#   into a separate include file (this is auto-generated from the DRM
#   tree)
# 
# drivers/char/drm/drm_pciids.h
#   2004/04/22 04:25:27-07:00 airlied@pdx.freedesktop.org +198 -0
# 
# drivers/char/drm/tdfx.h
#   2004/04/22 04:25:27-07:00 airlied@pdx.freedesktop.org +0 -8
#   convert DRM to use pci device structures on Linux, move pci ids
#   into a separate include file (this is auto-generated from the DRM
#   tree)
# 
# drivers/char/drm/sis.h
#   2004/04/22 04:25:27-07:00 airlied@pdx.freedesktop.org +0 -7
#   convert DRM to use pci device structures on Linux, move pci ids
#   into a separate include file (this is auto-generated from the DRM
#   tree)
# 
# drivers/char/drm/radeon.h
#   2004/04/22 04:25:27-07:00 airlied@pdx.freedesktop.org +0 -61
#   convert DRM to use pci device structures on Linux, move pci ids
#   into a separate include file (this is auto-generated from the DRM
#   tree)
# 
# drivers/char/drm/r128.h
#   2004/04/22 04:25:27-07:00 airlied@pdx.freedesktop.org +0 -40
#   convert DRM to use pci device structures on Linux, move pci ids
#   into a separate include file (this is auto-generated from the DRM
#   tree)
# 
# drivers/char/drm/mga.h
#   2004/04/22 04:25:27-07:00 airlied@pdx.freedesktop.org +0 -6
#   convert DRM to use pci device structures on Linux, move pci ids
#   into a separate include file (this is auto-generated from the DRM
#   tree)
# 
# drivers/char/drm/i830.h
#   2004/04/22 04:25:27-07:00 airlied@pdx.freedesktop.org +0 -7
#   convert DRM to use pci device structures on Linux, move pci ids
#   into a separate include file (this is auto-generated from the DRM
#   tree)
# 
# drivers/char/drm/i810.h
#   2004/04/22 04:25:27-07:00 airlied@pdx.freedesktop.org +0 -8
#   convert DRM to use pci device structures on Linux, move pci ids
#   into a separate include file (this is auto-generated from the DRM
#   tree)
# 
# drivers/char/drm/gamma.h
#   2004/04/22 04:25:27-07:00 airlied@pdx.freedesktop.org +0 -4
#   convert DRM to use pci device structures on Linux, move pci ids
#   into a separate include file (this is auto-generated from the DRM
#   tree)
# 
# drivers/char/drm/ffb.h
#   2004/04/22 04:25:27-07:00 airlied@pdx.freedesktop.org +0 -1
#   convert DRM to use pci device structures on Linux, move pci ids
#   into a separate include file (this is auto-generated from the DRM
#   tree)
# 
# drivers/char/drm/drm_pciids.h
#   2004/04/22 04:25:27-07:00 airlied@pdx.freedesktop.org +0 -0
#   BitKeeper file /home/airlied/linux/drm-dev/drivers/char/drm/drm_pciids.h
# 
# drivers/char/drm/drm_drv.h
#   2004/04/22 04:25:27-07:00 airlied@pdx.freedesktop.org +7 -4
#   convert DRM to use pci device structures on Linux, move pci ids
#   into a separate include file (this is auto-generated from the DRM
#   tree)
# 
# ChangeSet
#   2004/04/22 03:43:42-04:00 jgarzik@redhat.com 
#   [libata] Promise driver split part 4: common header
# 
# drivers/scsi/sata_sx4.c
#   2004/04/22 03:43:37-04:00 jgarzik@redhat.com +1 -124
#   [libata] Promise driver split part 4: common header
# 
# drivers/scsi/sata_promise.c
#   2004/04/22 03:43:37-04:00 jgarzik@redhat.com +2 -125
#   [libata] Promise driver split part 4: common header
# 
# drivers/scsi/Kconfig
#   2004/04/22 03:43:37-04:00 jgarzik@redhat.com +1 -1
#   [libata] Promise driver split part 4: common header
# 
# drivers/scsi/sata_promise.h
#   2004/04/22 03:39:42-04:00 jgarzik@redhat.com +154 -0
# 
# drivers/scsi/sata_promise.h
#   2004/04/22 03:39:42-04:00 jgarzik@redhat.com +0 -0
#   BitKeeper file /spare/repo/libata-2.6/drivers/scsi/sata_promise.h
# 
# ChangeSet
#   2004/04/22 03:37:49-04:00 jgarzik@redhat.com 
#   [libata] Promise driver split part 3: remove TX2/4 code from sata_sx4
# 
# drivers/scsi/sata_sx4.c
#   2004/04/22 03:37:44-04:00 jgarzik@redhat.com +26 -333
#   [libata] Promise driver split part 3: remove TX2/4 code from sata_sx4
# 
# ChangeSet
#   2004/04/22 03:26:15-04:00 jgarzik@redhat.com 
#   [libata] Promise driver split part 2: remove SX4 code from sata_promise
# 
# drivers/scsi/sata_promise.c
#   2004/04/22 03:26:10-04:00 jgarzik@redhat.com +7 -1106
#   [libata] Promise driver split part 2: remove SX4 code from sata_promise
# 
# ChangeSet
#   2004/04/22 03:11:44-04:00 jgarzik@redhat.com 
#   [libata] Promise driver split part 1: clone to sx4
#   
#   Clone sata_promise to sata_sx4.
# 
# drivers/scsi/Makefile
#   2004/04/22 03:11:39-04:00 jgarzik@redhat.com +1 -0
#   [libata] Promise driver split part 1: clone to sx4
#   
#   Clone sata_promise to sata_sx4.
# 
# drivers/scsi/Kconfig
#   2004/04/22 03:11:39-04:00 jgarzik@redhat.com +10 -2
#   [libata] Promise driver split part 1: clone to sx4
#   
#   Clone sata_promise to sata_sx4.
# 
# drivers/scsi/sata_sx4.c
#   2004/04/22 03:06:00-04:00 jgarzik@redhat.com +0 -0
#   bk cp drivers/scsi/sata_promise.c drivers/scsi/sata_sx4.c
# 
# ChangeSet
#   2004/04/22 00:51:41-04:00 jgarzik@redhat.com 
#   [libata sata_sis] add new PCI id
#   
#   Also remove constant from linux/pci_ids.h.
# 
# include/linux/pci_ids.h
#   2004/04/22 00:49:04-04:00 jgarzik@redhat.com +0 -1
#   [libata sata_sis] add new PCI id
#   
#   Also remove constant from linux/pci_ids.h.
# 
# drivers/scsi/sata_sis.c
#   2004/04/22 00:49:04-04:00 jgarzik@redhat.com +2 -1
#   [libata sata_sis] add new PCI id
#   
#   Also remove constant from linux/pci_ids.h.
# 
# ChangeSet
#   2004/04/21 21:34:03-04:00 pavel@ucw.cz 
#   [PATCH] Cleanups for b44
#   
#   Hi!
#   
#   During some unrelated work I was confused by b44_init_hw. Its return
#   is checked in _open() but nowhere else. I started adding missing
#   checks, but then I found why its so: it only ever returns 0.
#   
#   So this turns it into void. Killed #if 0-ed piece of code and fixed
#   indentation at one point. Please apply,
#   								Pavel
# 
# ChangeSet
#   2004/04/21 18:32:05-07:00 airlied@pdx.freedesktop.org 
#   define an empty driver pci ids for ffb driver
# 
# drivers/char/drm/ffb.h
#   2004/04/21 18:31:59-07:00 airlied@pdx.freedesktop.org +2 -0
#   define an empty driver pci ids for ffb driver
# 
# drivers/net/b44.c
#   2004/04/20 19:24:14-04:00 pavel@ucw.cz +4 -13
#   Cleanups for b44
# 
# ChangeSet
#   2004/04/21 20:53:56-04:00 brazilnut@us.ibm.com 
#   [PATCH] pcnet32 timer to free tx skbs for 79C971/972
#   
#   At the next opportunity to add new code to 2.6.6, please apply the following:
#   
#   This patch uses an on-chip timer to free completed transmit skb's for the
#   79C971 and 972 versions which currently will leave completed transmit
#   skb's on the transmit ring until new transmit traffic occurs.
# 
# drivers/net/pcnet32.c
#   2004/04/20 11:48:49-04:00 brazilnut@us.ibm.com +43 -8
#   pcnet32 timer to free tx skbs for 79C971/972
# 
# ChangeSet
#   2004/04/21 20:53:46-04:00 brazilnut@us.ibm.com 
#   [PATCH] pcnet32 add register dump capability
#   
#   At the next opportunity to add new code to 2.6.6, please apply the following
#   patch to include the capability to dump chip registers.  Ethtool -d support.
# 
# drivers/net/pcnet32.c
#   2004/04/20 11:43:34-04:00 brazilnut@us.ibm.com +76 -3
#   pcnet32 add register dump capability
# 
# drivers/scsi/sata_sx4.c
#   2004/04/14 17:04:43-04:00 jgarzik@redhat.com +2 -2
#   [libata sata_promise] fix taskfile delivery cases
#   
#   We should only be touching the ATA shadow registers if we are doing
#   PIO.
# 
# ChangeSet
#   2004/04/10 06:56:43-07:00 airlied@pdx.freedesktop.org 
#   From Jon Smirl:
#   This code allows the mesa drivers to use a single definition of the DRM sarea/IOCTLS 
# 
# drivers/char/drm/radeon_drm.h
#   2004/04/10 06:56:33-07:00 airlied@pdx.freedesktop.org +60 -27
#   From Jon Smirl:
#   This code allows the mesa drivers to use a single definition of the DRM sarea/IOCTLS 
# 
# drivers/char/drm/r128_drm.h
#   2004/04/10 06:56:33-07:00 airlied@pdx.freedesktop.org +42 -19
#   From Jon Smirl:
#   This code allows the mesa drivers to use a single definition of the DRM sarea/IOCTLS 
# 
# drivers/char/drm/mga_drm.h
#   2004/04/10 06:56:33-07:00 airlied@pdx.freedesktop.org +24 -11
#   From Jon Smirl:
#   This code allows the mesa drivers to use a single definition of the DRM sarea/IOCTLS 
# 
# drivers/char/drm/drm_sarea.h
#   2004/04/10 06:56:33-07:00 airlied@pdx.freedesktop.org +14 -0
#   From Jon Smirl:
#   This code allows the mesa drivers to use a single definition of the DRM sarea/IOCTLS 
# 
# ChangeSet
#   2004/04/10 06:27:26-07:00 airlied@pdx.freedesktop.org 
#   * Introduce COMMIT_RING() as in radeon DRM, stop using error prone
#     writeback for ring read pointer (Paul Mackerras)
#   * Get rid of some superfluous stuff, minor fixes
# 
# drivers/char/drm/r128_state.c
#   2004/04/10 06:27:19-07:00 airlied@pdx.freedesktop.org +25 -9
#   * Introduce COMMIT_RING() as in radeon DRM, stop using error prone
#     writeback for ring read pointer (Paul Mackerras)
#   * Get rid of some superfluous stuff, minor fixes
# 
# drivers/char/drm/r128_drv.h
#   2004/04/10 06:27:19-07:00 airlied@pdx.freedesktop.org +32 -25
#   * Introduce COMMIT_RING() as in radeon DRM, stop using error prone
#     writeback for ring read pointer (Paul Mackerras)
#   * Get rid of some superfluous stuff, minor fixes
# 
# drivers/char/drm/r128_cce.c
#   2004/04/10 06:27:19-07:00 airlied@pdx.freedesktop.org +9 -30
#   * Introduce COMMIT_RING() as in radeon DRM, stop using error prone
#     writeback for ring read pointer (Paul Mackerras)
#   * Get rid of some superfluous stuff, minor fixes
# 
# ChangeSet
#   2004/04/10 05:26:04-07:00 airlied@pdx.freedesktop.org 
#   radeon_drm.h:
#     missing define from previous checkin
# 
# drivers/char/drm/radeon_drm.h
#   2004/04/10 05:25:29-07:00 airlied@pdx.freedesktop.org +1 -0
#   missing define from previous checkin
# 
# ChangeSet
#   2004/04/10 00:52:10-07:00 airlied@pdx.freedesktop.org 
#   Miscellaneous changes from DRM CVS
# 
# drivers/char/drm/drm_stub.h
#   2004/04/10 00:52:04-07:00 airlied@pdx.freedesktop.org +2 -2
#   retab..
# 
# drivers/char/drm/drm_bufs.h
#   2004/04/10 00:52:04-07:00 airlied@pdx.freedesktop.org +1 -1
#   use correct preproc directive..
# 
# drivers/char/drm/drm_agpsupport.h
#   2004/04/10 00:52:04-07:00 airlied@pdx.freedesktop.org +2 -0
#   add another error test for 2.6
# 
# drivers/char/drm/drmP.h
#   2004/04/10 00:52:04-07:00 airlied@pdx.freedesktop.org +0 -12
#   move lock to drm.h
# 
# drivers/char/drm/drm.h
#   2004/04/10 00:52:04-07:00 airlied@pdx.freedesktop.org +14 -2
#   move the lcok to drm.h align some preprocesor stuff 
# 
# ChangeSet
#   2004/04/10 00:06:33-07:00 airlied@pdx.freedesktop.org 
#   drm_ctx_dtor.patch
#   Submitted by: Erdi Chen
# 
# drivers/char/drm/drm_memory_debug.h
#   2004/04/10 00:06:27-07:00 airlied@pdx.freedesktop.org +1 -0
#   drm_ctx_dtor.patch
#   Submitted by: Erdi Chen
# 
# drivers/char/drm/drm_drv.h
#   2004/04/10 00:06:27-07:00 airlied@pdx.freedesktop.org +27 -0
#   drm_ctx_dtor.patch
#   Submitted by: Erdi Chen
# 
# drivers/char/drm/drm_context.h
#   2004/04/10 00:06:27-07:00 airlied@pdx.freedesktop.org +29 -0
#   drm_ctx_dtor.patch
#   Submitted by: Erdi Chen
# 
# drivers/char/drm/drmP.h
#   2004/04/10 00:06:27-07:00 airlied@pdx.freedesktop.org +16 -0
#   drm_ctx_dtor.patch
#   Submitted by: Erdi Chen
# 
# ChangeSet
#   2004/04/09 23:56:13-07:00 airlied@pdx.freedesktop.org 
#   More differentiated error codes for DRM(agp_acquire)
# 
# drivers/char/drm/drm_agpsupport.h
#   2004/04/09 23:56:07-07:00 airlied@pdx.freedesktop.org +5 -1
#   More differentiated error codes for DRM(agp_acquire)
# 
# ChangeSet
#   2004/04/09 23:44:36-07:00 airlied@pdx.freedesktop.org 
#   From Michel Daenzer:
#   Adapt to nopage() prototype change in Linux 2.6.1.
#   
#   Reviewed by: Arjan van de Ven <arjanv@redhat.com>, additional feedback
#   from William Lee Irwin III and Linus Torvalds.
# 
# drivers/char/drm/drm_vm.h
#   2004/04/09 23:44:27-07:00 airlied@pdx.freedesktop.org +97 -51
#   From Michel Daenzer:
#   Adapt to nopage() prototype change in Linux 2.6.1.
#   
#   Reviewed by: Arjan van de Ven <arjanv@redhat.com>, additional feedback
#   from William Lee Irwin III and Linus Torvalds.
# 
# drivers/char/drm/drmP.h
#   2004/04/09 23:44:27-07:00 airlied@pdx.freedesktop.org +0 -12
#   From Michel Daenzer:
#   Adapt to nopage() prototype change in Linux 2.6.1.
#   
#   Reviewed by: Arjan van de Ven <arjanv@redhat.com>, additional feedback
#   from William Lee Irwin III and Linus Torvalds.
# 
# ChangeSet
#   2004/04/09 23:20:06-07:00 airlied@pdx.freedesktop.org 
#   From Eric Anholt + Jon Smirl:
#   Don't ioremap the framebuffer area. The ioremapped area wasn't used by
#   anything.
# 
# drivers/char/drm/radeon_drv.h
#   2004/04/09 23:19:59-07:00 airlied@pdx.freedesktop.org +0 -1
#   From Eric Anholt + Jon Smirl:
#   Don't ioremap the framebuffer area. The ioremapped area wasn't used by
#   anything.
# 
# drivers/char/drm/radeon_cp.c
#   2004/04/09 23:19:59-07:00 airlied@pdx.freedesktop.org +0 -7
#   From Eric Anholt + Jon Smirl:
#   Don't ioremap the framebuffer area. The ioremapped area wasn't used by
#   anything.
# 
# drivers/char/drm/r128_drv.h
#   2004/04/09 23:19:59-07:00 airlied@pdx.freedesktop.org +0 -1
#   From Eric Anholt + Jon Smirl:
#   Don't ioremap the framebuffer area. The ioremapped area wasn't used by
#   anything.
# 
# drivers/char/drm/r128_cce.c
#   2004/04/09 23:19:59-07:00 airlied@pdx.freedesktop.org +0 -7
#   From Eric Anholt + Jon Smirl:
#   Don't ioremap the framebuffer area. The ioremapped area wasn't used by
#   anything.
# 
# drivers/char/drm/mga_drv.h
#   2004/04/09 23:19:59-07:00 airlied@pdx.freedesktop.org +0 -1
#   From Eric Anholt + Jon Smirl:
#   Don't ioremap the framebuffer area. The ioremapped area wasn't used by
#   anything.
# 
# drivers/char/drm/mga_dma.c
#   2004/04/09 23:19:59-07:00 airlied@pdx.freedesktop.org +0 -8
#   From Eric Anholt + Jon Smirl:
#   Don't ioremap the framebuffer area. The ioremapped area wasn't used by
#   anything.
# 
# drivers/char/drm/drm_bufs.h
#   2004/04/09 23:19:58-07:00 airlied@pdx.freedesktop.org +3 -1
#   From Eric Anholt + Jon Smirl:
#   Don't ioremap the framebuffer area. The ioremapped area wasn't used by
#   anything.
# 
# ChangeSet
#   2004/04/09 23:07:59-07:00 airlied@pdx.freedesktop.org 
#   From Eric Anholt:
#   Return EBUSY when attempting to addmap a DRM_SHM area with a lock in it if
#   dev->lock.hw_lock is already set. This fixes the case of two X Servers running
#   on the same head on different VTs with interface 1.1, by making the 2nd head
#   fail to inizialize like before.
# 
# drivers/char/drm/drm_bufs.h
#   2004/04/09 23:07:52-07:00 airlied@pdx.freedesktop.org +6 -0
#   From Eric Anholt:
#   Return EBUSY when attempting to addmap a DRM_SHM area with a lock in it if
#   dev->lock.hw_lock is already set. This fixes the case of two X Servers running
#   on the same head on different VTs with interface 1.1, by making the 2nd head
#   fail to inizialize like before.
# 
# ChangeSet
#   2004/04/09 23:00:48-07:00 airlied@pdx.freedesktop.org 
#   From Eric Anholt: some cleanups from AlanH:
#   - Tie the DRM to a specific device: setunique no longer succeeds when given
#   a busid that doesn't correspond to the device the DRM is attached to. This
#   is a breaking of backwards-compatibility only for the multiple-DRI-head case
#   with X Servers that don't use interface 1.1.
#   - Move irq_busid to drm_irq.h and make it only return the IRQ for the current
#   device. Retains compatibility with previous X Servers, cleans up unnecessary
#   code. This means no irq_busid on !__HAVE_IRQ, but can be changed if
#   necessary.
#   - Bump interface version to 1.2. This version when set signifies that the
#   control ioctl should ignore the irq number passed in and enable the
#   interrupt handler for the attached device. Otherwise it errors out when
#   the passed-in irq is not equal to the device's.
#   - Store the highest version the interface has been set to in the device. 
# 
# drivers/char/drm/radeon_cp.c
#   2004/04/09 23:00:37-07:00 airlied@pdx.freedesktop.org +1 -1
#   From Eric Anholt: some cleanups from AlanH:
#   - Tie the DRM to a specific device: setunique no longer succeeds when given
#   a busid that doesn't correspond to the device the DRM is attached to. This
#   is a breaking of backwards-compatibility only for the multiple-DRI-head case
#   with X Servers that don't use interface 1.1.
#   - Move irq_busid to drm_irq.h and make it only return the IRQ for the current
#   device. Retains compatibility with previous X Servers, cleans up unnecessary
#   code. This means no irq_busid on !__HAVE_IRQ, but can be changed if
#   necessary.
#   - Bump interface version to 1.2. This version when set signifies that the
#   control ioctl should ignore the irq number passed in and enable the
#   interrupt handler for the attached device. Otherwise it errors out when
#   the passed-in irq is not equal to the device's.
#   - Store the highest version the interface has been set to in the device. 
# 
# drivers/char/drm/r128_cce.c
#   2004/04/09 23:00:37-07:00 airlied@pdx.freedesktop.org +1 -1
#   From Eric Anholt: some cleanups from AlanH:
#   - Tie the DRM to a specific device: setunique no longer succeeds when given
#   a busid that doesn't correspond to the device the DRM is attached to. This
#   is a breaking of backwards-compatibility only for the multiple-DRI-head case
#   with X Servers that don't use interface 1.1.
#   - Move irq_busid to drm_irq.h and make it only return the IRQ for the current
#   device. Retains compatibility with previous X Servers, cleans up unnecessary
#   code. This means no irq_busid on !__HAVE_IRQ, but can be changed if
#   necessary.
#   - Bump interface version to 1.2. This version when set signifies that the
#   control ioctl should ignore the irq number passed in and enable the
#   interrupt handler for the attached device. Otherwise it errors out when
#   the passed-in irq is not equal to the device's.
#   - Store the highest version the interface has been set to in the device. 
# 
# drivers/char/drm/mga_dma.c
#   2004/04/09 23:00:37-07:00 airlied@pdx.freedesktop.org +1 -1
#   From Eric Anholt: some cleanups from AlanH:
#   - Tie the DRM to a specific device: setunique no longer succeeds when given
#   a busid that doesn't correspond to the device the DRM is attached to. This
#   is a breaking of backwards-compatibility only for the multiple-DRI-head case
#   with X Servers that don't use interface 1.1.
#   - Move irq_busid to drm_irq.h and make it only return the IRQ for the current
#   device. Retains compatibility with previous X Servers, cleans up unnecessary
#   code. This means no irq_busid on !__HAVE_IRQ, but can be changed if
#   necessary.
#   - Bump interface version to 1.2. This version when set signifies that the
#   control ioctl should ignore the irq number passed in and enable the
#   interrupt handler for the attached device. Otherwise it errors out when
#   the passed-in irq is not equal to the device's.
#   - Store the highest version the interface has been set to in the device. 
# 
# drivers/char/drm/i830_dma.c
#   2004/04/09 23:00:37-07:00 airlied@pdx.freedesktop.org +2 -2
#   From Eric Anholt: some cleanups from AlanH:
#   - Tie the DRM to a specific device: setunique no longer succeeds when given
#   a busid that doesn't correspond to the device the DRM is attached to. This
#   is a breaking of backwards-compatibility only for the multiple-DRI-head case
#   with X Servers that don't use interface 1.1.
#   - Move irq_busid to drm_irq.h and make it only return the IRQ for the current
#   device. Retains compatibility with previous X Servers, cleans up unnecessary
#   code. This means no irq_busid on !__HAVE_IRQ, but can be changed if
#   necessary.
#   - Bump interface version to 1.2. This version when set signifies that the
#   control ioctl should ignore the irq number passed in and enable the
#   interrupt handler for the attached device. Otherwise it errors out when
#   the passed-in irq is not equal to the device's.
#   - Store the highest version the interface has been set to in the device. 
# 
# drivers/char/drm/i810_dma.c
#   2004/04/09 23:00:37-07:00 airlied@pdx.freedesktop.org +1 -1
#   From Eric Anholt: some cleanups from AlanH:
#   - Tie the DRM to a specific device: setunique no longer succeeds when given
#   a busid that doesn't correspond to the device the DRM is attached to. This
#   is a breaking of backwards-compatibility only for the multiple-DRI-head case
#   with X Servers that don't use interface 1.1.
#   - Move irq_busid to drm_irq.h and make it only return the IRQ for the current
#   device. Retains compatibility with previous X Servers, cleans up unnecessary
#   code. This means no irq_busid on !__HAVE_IRQ, but can be changed if
#   necessary.
#   - Bump interface version to 1.2. This version when set signifies that the
#   control ioctl should ignore the irq number passed in and enable the
#   interrupt handler for the attached device. Otherwise it errors out when
#   the passed-in irq is not equal to the device's.
#   - Store the highest version the interface has been set to in the device. 
# 
# drivers/char/drm/gamma_dma.c
#   2004/04/09 23:00:37-07:00 airlied@pdx.freedesktop.org +1 -1
#   From Eric Anholt: some cleanups from AlanH:
#   - Tie the DRM to a specific device: setunique no longer succeeds when given
#   a busid that doesn't correspond to the device the DRM is attached to. This
#   is a breaking of backwards-compatibility only for the multiple-DRI-head case
#   with X Servers that don't use interface 1.1.
#   - Move irq_busid to drm_irq.h and make it only return the IRQ for the current
#   device. Retains compatibility with previous X Servers, cleans up unnecessary
#   code. This means no irq_busid on !__HAVE_IRQ, but can be changed if
#   necessary.
#   - Bump interface version to 1.2. This version when set signifies that the
#   control ioctl should ignore the irq number passed in and enable the
#   interrupt handler for the attached device. Otherwise it errors out when
#   the passed-in irq is not equal to the device's.
#   - Store the highest version the interface has been set to in the device. 
# 
# drivers/char/drm/drm_irq.h
#   2004/04/09 23:00:37-07:00 airlied@pdx.freedesktop.org +57 -18
#   From Eric Anholt: some cleanups from AlanH:
#   - Tie the DRM to a specific device: setunique no longer succeeds when given
#   a busid that doesn't correspond to the device the DRM is attached to. This
#   is a breaking of backwards-compatibility only for the multiple-DRI-head case
#   with X Servers that don't use interface 1.1.
#   - Move irq_busid to drm_irq.h and make it only return the IRQ for the current
#   device. Retains compatibility with previous X Servers, cleans up unnecessary
#   code. This means no irq_busid on !__HAVE_IRQ, but can be changed if
#   necessary.
#   - Bump interface version to 1.2. This version when set signifies that the
#   control ioctl should ignore the irq number passed in and enable the
#   interrupt handler for the attached device. Otherwise it errors out when
#   the passed-in irq is not equal to the device's.
#   - Store the highest version the interface has been set to in the device. 
# 
# drivers/char/drm/drm_ioctl.h
#   2004/04/09 23:00:37-07:00 airlied@pdx.freedesktop.org +36 -137
#   From Eric Anholt: some cleanups from AlanH:
#   - Tie the DRM to a specific device: setunique no longer succeeds when given
#   a busid that doesn't correspond to the device the DRM is attached to. This
#   is a breaking of backwards-compatibility only for the multiple-DRI-head case
#   with X Servers that don't use interface 1.1.
#   - Move irq_busid to drm_irq.h and make it only return the IRQ for the current
#   device. Retains compatibility with previous X Servers, cleans up unnecessary
#   code. This means no irq_busid on !__HAVE_IRQ, but can be changed if
#   necessary.
#   - Bump interface version to 1.2. This version when set signifies that the
#   control ioctl should ignore the irq number passed in and enable the
#   interrupt handler for the attached device. Otherwise it errors out when
#   the passed-in irq is not equal to the device's.
#   - Store the highest version the interface has been set to in the device. 
# 
# drivers/char/drm/drm_drv.h
#   2004/04/09 23:00:37-07:00 airlied@pdx.freedesktop.org +14 -4
#   From Eric Anholt: some cleanups from AlanH:
#   - Tie the DRM to a specific device: setunique no longer succeeds when given
#   a busid that doesn't correspond to the device the DRM is attached to. This
#   is a breaking of backwards-compatibility only for the multiple-DRI-head case
#   with X Servers that don't use interface 1.1.
#   - Move irq_busid to drm_irq.h and make it only return the IRQ for the current
#   device. Retains compatibility with previous X Servers, cleans up unnecessary
#   code. This means no irq_busid on !__HAVE_IRQ, but can be changed if
#   necessary.
#   - Bump interface version to 1.2. This version when set signifies that the
#   control ioctl should ignore the irq number passed in and enable the
#   interrupt handler for the attached device. Otherwise it errors out when
#   the passed-in irq is not equal to the device's.
#   - Store the highest version the interface has been set to in the device. 
# 
# drivers/char/drm/drmP.h
#   2004/04/09 23:00:37-07:00 airlied@pdx.freedesktop.org +12 -4
#   From Eric Anholt: some cleanups from AlanH:
#   - Tie the DRM to a specific device: setunique no longer succeeds when given
#   a busid that doesn't correspond to the device the DRM is attached to. This
#   is a breaking of backwards-compatibility only for the multiple-DRI-head case
#   with X Servers that don't use interface 1.1.
#   - Move irq_busid to drm_irq.h and make it only return the IRQ for the current
#   device. Retains compatibility with previous X Servers, cleans up unnecessary
#   code. This means no irq_busid on !__HAVE_IRQ, but can be changed if
#   necessary.
#   - Bump interface version to 1.2. This version when set signifies that the
#   control ioctl should ignore the irq number passed in and enable the
#   interrupt handler for the attached device. Otherwise it errors out when
#   the passed-in irq is not equal to the device's.
#   - Store the highest version the interface has been set to in the device. 
# 
# ChangeSet
#   2004/04/09 22:34:54-07:00 airlied@pdx.freedesktop.org 
#   From: Michel Daenzer:
#   Memory layout transition:
#   
#   * the 2D driver initializes MC_FB_LOCATION and related registers sanely
#   * the DRM deduces the layout from these registers
#   * clients use the new SETPARAM ioctl to tell the DRM where they think the
#   framebuffer is located in the card's address space
#   * the DRM uses all this information to check client state and fix it up if
#   necessary
#   
#   This is a prerequisite for things like direct rendering with IGP chips and
#   video capturing.
# 
# drivers/char/drm/radeon_state.c
#   2004/04/09 22:34:48-07:00 airlied@pdx.freedesktop.org +370 -42
#   From: Michel Daenzer:
#   Memory layout transition:
#   
#   * the 2D driver initializes MC_FB_LOCATION and related registers sanely
#   * the DRM deduces the layout from these registers
#   * clients use the new SETPARAM ioctl to tell the DRM where they think the
#   framebuffer is located in the card's address space
#   * the DRM uses all this information to check client state and fix it up if
#   necessary
#   
#   This is a prerequisite for things like direct rendering with IGP chips and
#   video capturing.
# 
# drivers/char/drm/radeon_drv.h
#   2004/04/09 22:34:47-07:00 airlied@pdx.freedesktop.org +5 -0
#   From: Michel Daenzer:
#   Memory layout transition:
#   
#   * the 2D driver initializes MC_FB_LOCATION and related registers sanely
#   * the DRM deduces the layout from these registers
#   * clients use the new SETPARAM ioctl to tell the DRM where they think the
#   framebuffer is located in the card's address space
#   * the DRM uses all this information to check client state and fix it up if
#   necessary
#   
#   This is a prerequisite for things like direct rendering with IGP chips and
#   video capturing.
# 
# drivers/char/drm/radeon_drm.h
#   2004/04/09 22:34:47-07:00 airlied@pdx.freedesktop.org +14 -1
#   From: Michel Daenzer:
#   Memory layout transition:
#   
#   * the 2D driver initializes MC_FB_LOCATION and related registers sanely
#   * the DRM deduces the layout from these registers
#   * clients use the new SETPARAM ioctl to tell the DRM where they think the
#   framebuffer is located in the card's address space
#   * the DRM uses all this information to check client state and fix it up if
#   necessary
#   
#   This is a prerequisite for things like direct rendering with IGP chips and
#   video capturing.
# 
# drivers/char/drm/radeon_cp.c
#   2004/04/09 22:34:47-07:00 airlied@pdx.freedesktop.org +20 -9
#   From: Michel Daenzer:
#   Memory layout transition:
#   
#   * the 2D driver initializes MC_FB_LOCATION and related registers sanely
#   * the DRM deduces the layout from these registers
#   * clients use the new SETPARAM ioctl to tell the DRM where they think the
#   framebuffer is located in the card's address space
#   * the DRM uses all this information to check client state and fix it up if
#   necessary
#   
#   This is a prerequisite for things like direct rendering with IGP chips and
#   video capturing.
# 
# drivers/char/drm/radeon.h
#   2004/04/09 22:34:47-07:00 airlied@pdx.freedesktop.org +19 -3
#   From: Michel Daenzer:
#   Memory layout transition:
#   
#   * the 2D driver initializes MC_FB_LOCATION and related registers sanely
#   * the DRM deduces the layout from these registers
#   * clients use the new SETPARAM ioctl to tell the DRM where they think the
#   framebuffer is located in the card's address space
#   * the DRM uses all this information to check client state and fix it up if
#   necessary
#   
#   This is a prerequisite for things like direct rendering with IGP chips and
#   video capturing.
# 
# drivers/char/drm/drm_os_linux.h
#   2004/04/09 22:34:47-07:00 airlied@pdx.freedesktop.org +4 -0
#   From: Michel Daenzer:
#   Memory layout transition:
#   
#   * the 2D driver initializes MC_FB_LOCATION and related registers sanely
#   * the DRM deduces the layout from these registers
#   * clients use the new SETPARAM ioctl to tell the DRM where they think the
#   framebuffer is located in the card's address space
#   * the DRM uses all this information to check client state and fix it up if
#   necessary
#   
#   This is a prerequisite for things like direct rendering with IGP chips and
#   video capturing.
# 
# drivers/char/drm/drm_fops.h
#   2004/04/09 22:34:47-07:00 airlied@pdx.freedesktop.org +2 -0
#   From: Michel Daenzer:
#   Memory layout transition:
#   
#   * the 2D driver initializes MC_FB_LOCATION and related registers sanely
#   * the DRM deduces the layout from these registers
#   * clients use the new SETPARAM ioctl to tell the DRM where they think the
#   framebuffer is located in the card's address space
#   * the DRM uses all this information to check client state and fix it up if
#   necessary
#   
#   This is a prerequisite for things like direct rendering with IGP chips and
#   video capturing.
# 
# drivers/char/drm/drm_drv.h
#   2004/04/09 22:34:47-07:00 airlied@pdx.freedesktop.org +3 -0
#   From: Michel Daenzer:
#   Memory layout transition:
#   
#   * the 2D driver initializes MC_FB_LOCATION and related registers sanely
#   * the DRM deduces the layout from these registers
#   * clients use the new SETPARAM ioctl to tell the DRM where they think the
#   framebuffer is located in the card's address space
#   * the DRM uses all this information to check client state and fix it up if
#   necessary
#   
#   This is a prerequisite for things like direct rendering with IGP chips and
#   video capturing.
# 
# drivers/char/drm/drmP.h
#   2004/04/09 22:34:47-07:00 airlied@pdx.freedesktop.org +3 -0
#   From: Michel Daenzer:
#   Memory layout transition:
#   
#   * the 2D driver initializes MC_FB_LOCATION and related registers sanely
#   * the DRM deduces the layout from these registers
#   * clients use the new SETPARAM ioctl to tell the DRM where they think the
#   framebuffer is located in the card's address space
#   * the DRM uses all this information to check client state and fix it up if
#   necessary
#   
#   This is a prerequisite for things like direct rendering with IGP chips and
#   video capturing.
# 
# ChangeSet
#   2004/04/09 21:32:02-07:00 airlied@pdx.freedesktop.org 
#   From Eric Anholt:
#    Introduce a new ioctl, DRM_IOCTL_SET_VERSION. This ioctl allows the server
#   or client to notify the DRM that it expects a certain version of the device
#   dependent or device independent interface. If the major doesn't match or minor
#   is too large, EINVAL is returned. A major of -1 means that the requestor
#   doesn't care about that portion of the interface. The ioctl returns the actual
#   versions in the same struct. 
# 
# drivers/char/drm/drm_ioctl.h
#   2004/04/09 21:28:47-07:00 airlied@pdx.freedesktop.org +74 -1
#   From Eric Anholt:
#    Introduce a new ioctl, DRM_IOCTL_SET_VERSION. This ioctl allows the server
#   or client to notify the DRM that it expects a certain version of the device
#   dependent or device independent interface. If the major doesn't match or minor
#   is too large, EINVAL is returned. A major of -1 means that the requestor
#   doesn't care about that portion of the interface. The ioctl returns the actual
#   versions in the same struct. 
# 
# drivers/char/drm/drm_drv.h
#   2004/04/09 21:28:47-07:00 airlied@pdx.freedesktop.org +1 -0
#   From Eric Anholt:
#    Introduce a new ioctl, DRM_IOCTL_SET_VERSION. This ioctl allows the server
#   or client to notify the DRM that it expects a certain version of the device
#   dependent or device independent interface. If the major doesn't match or minor
#   is too large, EINVAL is returned. A major of -1 means that the requestor
#   doesn't care about that portion of the interface. The ioctl returns the actual
#   versions in the same struct. 
# 
# drivers/char/drm/drmP.h
#   2004/04/09 21:28:47-07:00 airlied@pdx.freedesktop.org +2 -0
#   From Eric Anholt:
#    Introduce a new ioctl, DRM_IOCTL_SET_VERSION. This ioctl allows the server
#   or client to notify the DRM that it expects a certain version of the device
#   dependent or device independent interface. If the major doesn't match or minor
#   is too large, EINVAL is returned. A major of -1 means that the requestor
#   doesn't care about that portion of the interface. The ioctl returns the actual
#   versions in the same struct. 
# 
# drivers/char/drm/drm.h
#   2004/04/09 21:28:47-07:00 airlied@pdx.freedesktop.org +11 -0
#   From Eric Anholt:
#    Introduce a new ioctl, DRM_IOCTL_SET_VERSION. This ioctl allows the server
#   or client to notify the DRM that it expects a certain version of the device
#   dependent or device independent interface. If the major doesn't match or minor
#   is too large, EINVAL is returned. A major of -1 means that the requestor
#   doesn't care about that portion of the interface. The ioctl returns the actual
#   versions in the same struct. 
# 
# ChangeSet
#   2004/04/09 20:03:25-07:00 airlied@pdx.freedesktop.org 
#   - Add DRM_GET_PRIV_WITH_RETURN macro. This can be used in shared code to get
#   the drm_file_t * based on the filp passed in ioctl handlers. 
# 
# drivers/char/drm/drm_os_linux.h
#   2004/04/09 20:03:19-07:00 airlied@pdx.freedesktop.org +2 -0
#   - Add DRM_GET_PRIV_WITH_RETURN macro. This can be used in shared code to get
#   the drm_file_t * based on the filp passed in ioctl handlers. 
# 
# ChangeSet
#   2004/04/09 19:35:05-07:00 airlied@pdx.freedesktop.org 
#   left gamma_dma.c out of last changeset
# 
# drivers/char/drm/gamma_dma.c
#   2004/04/09 19:34:58-07:00 airlied@pdx.freedesktop.org +3 -3
#   FRom Eric Anholt:
#    Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from
#   __HAVE_DMA. This will be useful for adding vblank sync support to sis and
#   tdfx. Rename dma_service to irq_handler, which is more accurately what it is.
#   - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have
#   the right number of underscores. This may have been a problem in the case
#   that the server died without doing its DRM_IOCTL_CONTROL to uninit.
# 
# ChangeSet
#   2004/04/09 19:12:53-07:00 airlied@pdx.freedesktop.org 
#   From: Eric Anholt:
#   - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from
#   __HAVE_DMA. This will be useful for adding vblank sync support to sis and
#   tdfx. Rename dma_service to irq_handler, which is more accurately what it is.
#   - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have
#   the right number of underscores. This may have been a problem in the case
#   that the server died without doing its DRM_IOCTL_CONTROL to uninit
# 
# drivers/char/drm/drm_irq.h
#   2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +333 -0
# 
# drivers/char/drm/radeon_irq.c
#   2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +1 -1
#   From: Eric Anholt:
#   - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from
#   __HAVE_DMA. This will be useful for adding vblank sync support to sis and
#   tdfx. Rename dma_service to irq_handler, which is more accurately what it is.
#   - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have
#   the right number of underscores. This may have been a problem in the case
#   that the server died without doing its DRM_IOCTL_CONTROL to uninit
# 
# drivers/char/drm/radeon_drv.c
#   2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +1 -0
#   From: Eric Anholt:
#   - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from
#   __HAVE_DMA. This will be useful for adding vblank sync support to sis and
#   tdfx. Rename dma_service to irq_handler, which is more accurately what it is.
#   - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have
#   the right number of underscores. This may have been a problem in the case
#   that the server died without doing its DRM_IOCTL_CONTROL to uninit
# 
# drivers/char/drm/radeon_cp.c
#   2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +1 -1
#   From: Eric Anholt:
#   - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from
#   __HAVE_DMA. This will be useful for adding vblank sync support to sis and
#   tdfx. Rename dma_service to irq_handler, which is more accurately what it is.
#   - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have
#   the right number of underscores. This may have been a problem in the case
#   that the server died without doing its DRM_IOCTL_CONTROL to uninit
# 
# drivers/char/drm/radeon.h
#   2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +1 -1
#   From: Eric Anholt:
#   - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from
#   __HAVE_DMA. This will be useful for adding vblank sync support to sis and
#   tdfx. Rename dma_service to irq_handler, which is more accurately what it is.
#   - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have
#   the right number of underscores. This may have been a problem in the case
#   that the server died without doing its DRM_IOCTL_CONTROL to uninit
# 
# drivers/char/drm/r128_irq.c
#   2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +1 -1
#   From: Eric Anholt:
#   - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from
#   __HAVE_DMA. This will be useful for adding vblank sync support to sis and
#   tdfx. Rename dma_service to irq_handler, which is more accurately what it is.
#   - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have
#   the right number of underscores. This may have been a problem in the case
#   that the server died without doing its DRM_IOCTL_CONTROL to uninit
# 
# drivers/char/drm/r128_drv.c
#   2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +1 -0
#   From: Eric Anholt:
#   - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from
#   __HAVE_DMA. This will be useful for adding vblank sync support to sis and
#   tdfx. Rename dma_service to irq_handler, which is more accurately what it is.
#   - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have
#   the right number of underscores. This may have been a problem in the case
#   that the server died without doing its DRM_IOCTL_CONTROL to uninit
# 
# drivers/char/drm/r128_cce.c
#   2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +1 -1
#   From: Eric Anholt:
#   - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from
#   __HAVE_DMA. This will be useful for adding vblank sync support to sis and
#   tdfx. Rename dma_service to irq_handler, which is more accurately what it is.
#   - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have
#   the right number of underscores. This may have been a problem in the case
#   that the server died without doing its DRM_IOCTL_CONTROL to uninit
# 
# drivers/char/drm/r128.h
#   2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +1 -1
#   From: Eric Anholt:
#   - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from
#   __HAVE_DMA. This will be useful for adding vblank sync support to sis and
#   tdfx. Rename dma_service to irq_handler, which is more accurately what it is.
#   - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have
#   the right number of underscores. This may have been a problem in the case
#   that the server died without doing its DRM_IOCTL_CONTROL to uninit
# 
# drivers/char/drm/mga_irq.c
#   2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +1 -1
#   From: Eric Anholt:
#   - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from
#   __HAVE_DMA. This will be useful for adding vblank sync support to sis and
#   tdfx. Rename dma_service to irq_handler, which is more accurately what it is.
#   - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have
#   the right number of underscores. This may have been a problem in the case
#   that the server died without doing its DRM_IOCTL_CONTROL to uninit
# 
# drivers/char/drm/mga_drv.c
#   2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +1 -0
#   From: Eric Anholt:
#   - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from
#   __HAVE_DMA. This will be useful for adding vblank sync support to sis and
#   tdfx. Rename dma_service to irq_handler, which is more accurately what it is.
#   - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have
#   the right number of underscores. This may have been a problem in the case
#   that the server died without doing its DRM_IOCTL_CONTROL to uninit
# 
# drivers/char/drm/mga_dma.c
#   2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +1 -1
#   From: Eric Anholt:
#   - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from
#   __HAVE_DMA. This will be useful for adding vblank sync support to sis and
#   tdfx. Rename dma_service to irq_handler, which is more accurately what it is.
#   - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have
#   the right number of underscores. This may have been a problem in the case
#   that the server died without doing its DRM_IOCTL_CONTROL to uninit
# 
# drivers/char/drm/mga.h
#   2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +1 -1
#   From: Eric Anholt:
#   - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from
#   __HAVE_DMA. This will be useful for adding vblank sync support to sis and
#   tdfx. Rename dma_service to irq_handler, which is more accurately what it is.
#   - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have
#   the right number of underscores. This may have been a problem in the case
#   that the server died without doing its DRM_IOCTL_CONTROL to uninit
# 
# drivers/char/drm/i830_irq.c
#   2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +1 -1
#   From: Eric Anholt:
#   - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from
#   __HAVE_DMA. This will be useful for adding vblank sync support to sis and
#   tdfx. Rename dma_service to irq_handler, which is more accurately what it is.
#   - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have
#   the right number of underscores. This may have been a problem in the case
#   that the server died without doing its DRM_IOCTL_CONTROL to uninit
# 
# drivers/char/drm/i830_drv.c
#   2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +1 -0
#   From: Eric Anholt:
#   - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from
#   __HAVE_DMA. This will be useful for adding vblank sync support to sis and
#   tdfx. Rename dma_service to irq_handler, which is more accurately what it is.
#   - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have
#   the right number of underscores. This may have been a problem in the case
#   that the server died without doing its DRM_IOCTL_CONTROL to uninit
# 
# drivers/char/drm/i830_dma.c
#   2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +1 -1
#   From: Eric Anholt:
#   - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from
#   __HAVE_DMA. This will be useful for adding vblank sync support to sis and
#   tdfx. Rename dma_service to irq_handler, which is more accurately what it is.
#   - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have
#   the right number of underscores. This may have been a problem in the case
#   that the server died without doing its DRM_IOCTL_CONTROL to uninit
# 
# drivers/char/drm/i830.h
#   2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +2 -2
#   From: Eric Anholt:
#   - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from
#   __HAVE_DMA. This will be useful for adding vblank sync support to sis and
#   tdfx. Rename dma_service to irq_handler, which is more accurately what it is.
#   - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have
#   the right number of underscores. This may have been a problem in the case
#   that the server died without doing its DRM_IOCTL_CONTROL to uninit
# 
# drivers/char/drm/i810_dma.c
#   2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +1 -1
#   From: Eric Anholt:
#   - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from
#   __HAVE_DMA. This will be useful for adding vblank sync support to sis and
#   tdfx. Rename dma_service to irq_handler, which is more accurately what it is.
#   - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have
#   the right number of underscores. This may have been a problem in the case
#   that the server died without doing its DRM_IOCTL_CONTROL to uninit
# 
# drivers/char/drm/i810.h
#   2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +1 -1
#   From: Eric Anholt:
#   - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from
#   __HAVE_DMA. This will be useful for adding vblank sync support to sis and
#   tdfx. Rename dma_service to irq_handler, which is more accurately what it is.
#   - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have
#   the right number of underscores. This may have been a problem in the case
#   that the server died without doing its DRM_IOCTL_CONTROL to uninit
# 
# drivers/char/drm/gamma_drv.c
#   2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +1 -0
#   From: Eric Anholt:
#   - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from
#   __HAVE_DMA. This will be useful for adding vblank sync support to sis and
#   tdfx. Rename dma_service to irq_handler, which is more accurately what it is.
#   - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have
#   the right number of underscores. This may have been a problem in the case
#   that the server died without doing its DRM_IOCTL_CONTROL to uninit
# 
# drivers/char/drm/gamma.h
#   2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +2 -2
#   From: Eric Anholt:
#   - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from
#   __HAVE_DMA. This will be useful for adding vblank sync support to sis and
#   tdfx. Rename dma_service to irq_handler, which is more accurately what it is.
#   - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have
#   the right number of underscores. This may have been a problem in the case
#   that the server died without doing its DRM_IOCTL_CONTROL to uninit
# 
# drivers/char/drm/drm_irq.h
#   2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +0 -0
#   BitKeeper file /home/airlied/linux/drm-dev/drivers/char/drm/drm_irq.h
# 
# drivers/char/drm/drm_drv.h
#   2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +6 -6
#   From: Eric Anholt:
#   - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from
#   __HAVE_DMA. This will be useful for adding vblank sync support to sis and
#   tdfx. Rename dma_service to irq_handler, which is more accurately what it is.
#   - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have
#   the right number of underscores. This may have been a problem in the case
#   that the server died without doing its DRM_IOCTL_CONTROL to uninit
# 
# drivers/char/drm/drm_dma.h
#   2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +5 -298
#   From: Eric Anholt:
#   - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from
#   __HAVE_DMA. This will be useful for adding vblank sync support to sis and
#   tdfx. Rename dma_service to irq_handler, which is more accurately what it is.
#   - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have
#   the right number of underscores. This may have been a problem in the case
#   that the server died without doing its DRM_IOCTL_CONTROL to uninit
# 
# drivers/char/drm/drmP.h
#   2004/04/09 19:12:45-07:00 airlied@pdx.freedesktop.org +11 -7
#   From: Eric Anholt:
#   - Move IRQ functions from drm_dma.h to new drm_irq.h and disentangle them from
#   __HAVE_DMA. This will be useful for adding vblank sync support to sis and
#   tdfx. Rename dma_service to irq_handler, which is more accurately what it is.
#   - Fix the #if _HAVE_DMA_IRQ in radeon, r128, mga, i810, i830, gamma to have
#   the right number of underscores. This may have been a problem in the case
#   that the server died without doing its DRM_IOCTL_CONTROL to uninit
# 
# ChangeSet
#   2004/04/09 00:28:45-07:00 airlied@pdx.freedesktop.org 
#   - Converted Linux drivers to initialize DRM instances based on PCI IDs, not
#   just a single instance. The PCI ID lists include a driver private field, which may be used
#   by drivers for chip family or other information. Based on work by jonsmirl
#   and Eric Anholt. I've left out the PCI device naming for this patch as
#   that might be a bit controversial. clean up tdfx to look like everyone else..
# 
# drivers/char/drm/tdfx_drv.c
#   2004/04/09 00:28:35-07:00 airlied@pdx.freedesktop.org +0 -41
#   - Converted Linux drivers to initialize DRM instances based on PCI IDs, not
#   just a single instance. The PCI ID lists include a driver private field, which may be used
#   by drivers for chip family or other information. Based on work by jonsmirl
#   and Eric Anholt. I've left out the PCI device naming for this patch as
#   that might be a bit controversial. clean up tdfx to look like everyone else..
# 
# drivers/char/drm/tdfx.h
#   2004/04/09 00:28:35-07:00 airlied@pdx.freedesktop.org +18 -0
#   - Converted Linux drivers to initialize DRM instances based on PCI IDs, not
#   just a single instance. The PCI ID lists include a driver private field, which may be used
#   by drivers for chip family or other information. Based on work by jonsmirl
#   and Eric Anholt. I've left out the PCI device naming for this patch as
#   that might be a bit controversial. clean up tdfx to look like everyone else..
# 
# drivers/char/drm/sis.h
#   2004/04/09 00:28:35-07:00 airlied@pdx.freedesktop.org +7 -0
#   - Converted Linux drivers to initialize DRM instances based on PCI IDs, not
#   just a single instance. The PCI ID lists include a driver private field, which may be used
#   by drivers for chip family or other information. Based on work by jonsmirl
#   and Eric Anholt. I've left out the PCI device naming for this patch as
#   that might be a bit controversial.
# 
# drivers/char/drm/radeon.h
#   2004/04/09 00:28:35-07:00 airlied@pdx.freedesktop.org +60 -1
#   - Converted Linux drivers to initialize DRM instances based on PCI IDs, not
#   just a single instance. The PCI ID lists include a driver private field, which may be used
#   by drivers for chip family or other information. Based on work by jonsmirl
#   and Eric Anholt. I've left out the PCI device naming for this patch as
#   that might be a bit controversial.
# 
# drivers/char/drm/r128.h
#   2004/04/09 00:28:35-07:00 airlied@pdx.freedesktop.org +40 -0
#   - Converted Linux drivers to initialize DRM instances based on PCI IDs, not
#   just a single instance. The PCI ID lists include a driver private field, which may be used
#   by drivers for chip family or other information. Based on work by jonsmirl
#   and Eric Anholt. I've left out the PCI device naming for this patch as
#   that might be a bit controversial.
# 
# drivers/char/drm/mga.h
#   2004/04/09 00:28:35-07:00 airlied@pdx.freedesktop.org +6 -0
#   - Converted Linux drivers to initialize DRM instances based on PCI IDs, not
#   just a single instance. The PCI ID lists include a driver private field, which may be used
#   by drivers for chip family or other information. Based on work by jonsmirl
#   and Eric Anholt. I've left out the PCI device naming for this patch as
#   that might be a bit controversial.
# 
# drivers/char/drm/i830.h
#   2004/04/09 00:28:35-07:00 airlied@pdx.freedesktop.org +7 -0
#   - Converted Linux drivers to initialize DRM instances based on PCI IDs, not
#   just a single instance. The PCI ID lists include a driver private field, which may be used
#   by drivers for chip family or other information. Based on work by jonsmirl
#   and Eric Anholt. I've left out the PCI device naming for this patch as
#   that might be a bit controversial.
# 
# drivers/char/drm/i810.h
#   2004/04/09 00:28:35-07:00 airlied@pdx.freedesktop.org +8 -1
#   - Converted Linux drivers to initialize DRM instances based on PCI IDs, not
#   just a single instance. The PCI ID lists include a driver private field, which may be used
#   by drivers for chip family or other information. Based on work by jonsmirl
#   and Eric Anholt. I've left out the PCI device naming for this patch as
#   that might be a bit controversial.
# 
# drivers/char/drm/gamma.h
#   2004/04/09 00:28:35-07:00 airlied@pdx.freedesktop.org +4 -0
#   - Converted Linux drivers to initialize DRM instances based on PCI IDs, not
#   just a single instance. The PCI ID lists include a driver private field, which may be used
#   by drivers for chip family or other information. Based on work by jonsmirl
#   and Eric Anholt. I've left out the PCI device naming for this patch as
#   that might be a bit controversial.
# 
# drivers/char/drm/drm_drv.h
#   2004/04/09 00:28:35-07:00 airlied@pdx.freedesktop.org +87 -115
#   - Converted Linux drivers to initialize DRM instances based on PCI IDs, not
#   just a single instance. The PCI ID lists include a driver private field, which may be used
#   by drivers for chip family or other information. Based on work by jonsmirl
#   and Eric Anholt. I've left out the PCI device naming for this patch as
#   that might be a bit controversial.
# 
# drivers/char/drm/drmP.h
#   2004/04/09 00:28:35-07:00 airlied@pdx.freedesktop.org +7 -4
#   - Converted Linux drivers to initialize DRM instances based on PCI IDs, not
#   just a single instance. The PCI ID lists include a driver private field, which may be used
#   by drivers for chip family or other information. Based on work by jonsmirl
#   and Eric Anholt. I've left out the PCI device naming for this patch as
#   that might be a bit controversial.
# 
# ChangeSet
#   2004/04/06 08:37:52-04:00 hirofumi@mail.parknet.co.jp 
#   [PATCH] 8139too: more useful debug info for tx_timeout
#   
#   Hi,
#   
#   I think this patch is useful for looking whether it's the real driver
#   bug or other bug.
#   
#   What do you think of this? If ok, please apply.
#   --
#   OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
#   
#   
#   
#   [PATCH] 8139too: more useful debug info for tx_timeout
#   
#   	/* disable Tx ASAP, if not already */
#   	tmp8 = RTL_R8 (ChipCmd);
#   	if (tmp8 & CmdTxEnb)
#   		RTL_W8 (ChipCmd, CmdRxEnb);
#   
#   The above will clear the Tx Descs. So, this prints the debugging info
#   before rtl8139_tx_timeout() does it. And IntrStatus etc. also prints
#   anytime for the debug.
# 
# drivers/net/8139too.c
#   2004/04/05 12:35:48-04:00 hirofumi@mail.parknet.co.jp +11 -15
#   8139too: more useful debug info for tx_timeout
# 
# drivers/scsi/sata_sx4.c
#   2004/03/26 20:40:53-05:00 jgarzik@redhat.com +66 -17
#   [libata sata_promise] better locking and error handling
#   
#   * Prefer spin_lock() to spin_lock_irq() in interrupt handler
#   * Reset each port, before probing the SATA phy
#   * Reset port when every time an error occurs
# 
# drivers/scsi/sata_sx4.c
#   2004/03/26 01:13:16-05:00 jgarzik@redhat.com +15 -22
#   [libata sata_promise] minor initialization updates
#   
#   * remove incorrect PATA port check
#   * enable undocumented bit 13 in flash control register,
#     because the Promise driver does so.
#   * wait 10 ms after setting TBG mode, for the same reason.
# 
# drivers/scsi/sata_sx4.c
#   2004/03/25 01:44:03-05:00 jgarzik@redhat.com +24 -29
#   [libata] consolidate data transfer mode handling
#   
#   The various ways you can send data to/from your ATA device is
#   known as the ATA taskfile protocol:  PIO single sector, PIO
#   multiple sector, DMA, DMA TCQ, DMA NCQ, ...
#   
#   Prior to this change, the data direction (read/write) was encoded
#   implicitly into the ATA_PROT_xxx value itself.  This increased
#   complexity in some areas, and inhibited flexibility in others.
#   
#   This change separates data direction from taskfile protocol, and also
#   moves the data direction flag (ATA_QCFLAG_WRITE) down to a lower
#   level (ATA_TFLAG_WRITE).
# 
# drivers/scsi/sata_sx4.c
#   2004/03/24 23:50:29-05:00 jgarzik@redhat.com +20 -1
#   [libata sata_promise] check for PATA port on PDC20375
#   
#   We don't handle it yet, but this prints out a message in its presence,
#   permitting verification of the check and informing users why their
#   PATA device is not recognized.
# 
# drivers/scsi/sata_sx4.c
#   2004/03/18 17:55:44-05:00 jgarzik@redhat.com +3 -0
#   [libata] explicitly set consistent DMA mask to 0xffffffff
#   
#   Do not rely on the default being 0xffffffff.
# 
# drivers/scsi/sata_sx4.c
#   2004/03/18 13:22:43-05:00 jgarzik@redhat.com +0 -1
#   [libata] remove unneeded linux/config.h includes
# 
# drivers/scsi/sata_sx4.c
#   2004/03/18 05:34:59-05:00 jgarzik@redhat.com +0 -2
#   [libata] API cleanup
#   
#   Remove ->phy_config hook, everybody used pata_phy_config.  Rename
#   function to ata_set_mode, and directly call internally.
# 
# drivers/scsi/sata_sx4.c
#   2004/03/12 21:28:52-05:00 jgarzik@redhat.com +1 -7
#   [libata] clean up module_init() hook of sata_{promise,sil,svw} drivers
#   
#   The more verbose form existed for decreased differences with the 2.4
#   backport.  But differences in this area existed anyway, so why not
#   clean up the 2.6 versions even more.
# 
# drivers/scsi/sata_sx4.c
#   2004/03/10 21:36:23-05:00 jgarzik@redhat.com +0 -21
#   [libata] make set_{pio,udma}mode hooks optional
#   
#   Only one driver actually uses them.
# 
# drivers/scsi/sata_sx4.c
#   2004/03/09 07:14:51-05:00 jeremy@sgi.com +4 -1
#   [libata] Split up shared IO register locations into individual components
#   
#   Most ATA host controllers follow a standard layout for the
#   ATA shadow registers, where command/status, error/feature, and
#   devctl/altstatus share a single bus I/O address, because one register
#   of each pair is read-only, and the other is write-only.
#   
#   On the Vitesse/Intel chip, all registers are given distinction bus I/O
#   addresses, which necessitates changing the libata data structures
#   to cope with this.  This simply involves storing a few more bus addresses.
# 
# drivers/scsi/sata_sx4.c
#   2004/03/08 22:33:20-05:00 jgarzik@redhat.com +9 -1
#   [libata sata_promise] provide proper SCSI completion function
#   
#   Promise driver uses a custom error handling function, so we need
#   the fix that was applied to the libata core:  the SCSI error
#   handling thread requires that we complete commands using a special
#   completion function, since the normal one doesn't work inside
#   the error handling thread.
# 
# drivers/scsi/sata_sx4.c
#   2004/02/26 21:23:26-05:00 jgarzik@redhat.com +1 -1
#   [libata] limit S/G table size to 128 entries
#   
#   Agreeing with Ben H's recommendation, I reduce the max-hw-segments
#   number to 128, to match max-phys-segments number.  This shouldn't
#   affect performance because 128*64K is far above the max transfer size
#   for most current IDE devices.  Even 128*4K is OK.
# 
# drivers/scsi/sata_sx4.c
#   2004/02/25 18:29:10-05:00 jgarzik@redhat.com +1 -1
#   [libata] bump versions
# 
# drivers/scsi/sata_sx4.c
#   2004/02/25 18:26:06-05:00 dmilburn@redhat.com +57 -1
#   [libata sata_promise] Fix DIMM initialization on PCI-X bus
# 
# drivers/scsi/sata_sx4.c
#   2004/02/13 13:07:29-05:00 jgarzik@redhat.com +1 -1
#   Bump libata, ata_piix to version 1.0.
#   
#   Also update copyrights for 2004.
# 
# drivers/scsi/sata_sx4.c
#   2003/12/17 17:35:39-05:00 jgarzik@redhat.com +35 -12
#   [libata promise] fix another ugly bug
#   
#   For the SX4, only one Host DMA (local DIMM) engine is on the hardware,
#   while there is an ATA engine for each SATA port.  This means that
#   Host DMA transactions must be queued.  When previously fixing this problem
#   (the driver had previously assumed an HDMA engine per port), I stored
#   the HDMA packet queue in a per-port data structure.
#   
#   This was incorrect:  this patch changes it to correctly use a
#   per-host data structure, not a per-port structure.
# 
# drivers/scsi/sata_sx4.c
#   2003/12/16 19:16:55-05:00 Michael_E_Brown@Dell.com +1 -0
#   [libata] fake geometry for partition tables / setups that need such
# 
# drivers/scsi/sata_sx4.c
#   2003/12/05 13:41:01-05:00 jgarzik@redhat.com +413 -3
#   [libata promise] Properly initialize DIMM, on SX4
#   
#   On-board DIMM should be sized and initialized by the driver.  Previously,
#   a single DIMM size was simply (and incorrectly) assumed, and
#   initialization was presumed to have been done by the card's BIOS.
#   
#   Contributed by Promise, updated by David Milburn @ Red Hat.
# 
# drivers/scsi/sata_sx4.c
#   2003/11/30 11:56:01-05:00 grundler@parisc-linux.org +2 -2
#   [libata] use sg_dma_xxx macros
#   
#   Fixes build on some platforms, fixes issues on others.
# 
# drivers/scsi/sata_sx4.c
#   2003/11/26 16:10:43-05:00 jgarzik@redhat.com +71 -53
#   [libata] Fix PDC20621: we only have one Host DMA engine, not one per port
#   
#   Whoops.  So, we need to queue HDMA transactions internally.
# 
# drivers/scsi/sata_sx4.c
#   2003/11/14 19:52:35-05:00 pp@ee.oulu.fi +2 -0
#   [libata] add Promise PCI id
# 
# drivers/scsi/sata_sx4.c
#   2003/11/10 10:41:07-05:00 jgarzik@redhat.com +26 -11
#   [libata promise] fixes suggested by Promise
#   
#   * flush host FIFO after sending data to DIMM window
#   * don't set SCR addresses, as the hardware doesn't have SCRs
#     (cosmetic)
# 
# drivers/scsi/sata_sx4.c
#   2003/11/07 16:24:15-05:00 jgarzik@redhat.com +11 -1
#   [libata] fix Promise PCI posting bugs
# 
# drivers/scsi/sata_sx4.c
#   2003/11/06 13:31:55-05:00 jgarzik@redhat.com +3 -3
#   [libata] fix ugly Promise interrupt masking bug
# 
# drivers/scsi/sata_sx4.c
#   2003/10/31 09:55:43-05:00 jgarzik@redhat.com +2 -0
#   [libata] add Promise SATA pci id
# 
# drivers/scsi/sata_sx4.c
#   2003/10/28 11:04:25-05:00 jgarzik@redhat.com +56 -15
#   [libata] Add paranoia checks/settings suggested by Promise
# 
# drivers/scsi/sata_sx4.c
#   2003/10/23 19:27:35-04:00 jgarzik@redhat.com +5 -3
#   [libata] PDC20621 hdma fixes
# 
# drivers/scsi/sata_sx4.c
#   2003/10/22 22:26:51-04:00 jgarzik@redhat.com +2 -2
#   [libata] fix Promise build on older compilers
# 
# drivers/scsi/sata_sx4.c
#   2003/10/22 18:02:58-04:00 jgarzik@redhat.com +231 -79
#   [libata] more pdc20621 work
# 
# drivers/scsi/sata_sx4.c
#   2003/10/22 12:33:27-04:00 jgarzik@redhat.com +346 -80
#   [libata] fill in a lot more Promise PDC20621 support
# 
# drivers/scsi/sata_sx4.c
#   2003/10/22 01:05:47-04:00 jgarzik@redhat.com +102 -44
#   [libata] convert Promise to packetized DMA
# 
# drivers/scsi/sata_sx4.c
#   2003/10/21 23:13:53-04:00 jgarzik@redhat.com +4 -0
#   [libata] add per-driver port init/shutdown hooks, with helper defaults
# 
# drivers/scsi/sata_sx4.c
#   2003/10/21 19:21:36-04:00 jgarzik@redhat.com +766 -0
# 
# drivers/scsi/sata_sx4.c
#   2003/10/21 19:21:36-04:00 jgarzik@redhat.com +0 -0
#   BitKeeper file /spare/repo/libata-2.5-merge/drivers/scsi/sata_promise.c
# 
diff -Nru a/Documentation/arm/SA1100/PCMCIA b/Documentation/arm/SA1100/PCMCIA
--- a/Documentation/arm/SA1100/PCMCIA	Sun May 16 01:18:34 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,374 +0,0 @@
-Kernel Low-Level PCMCIA Interface Documentation
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-John G Dorsey <john+@cs.cmu.edu>
-Updated: 30 June, 2000
-
-
-Note: this interface has not been finalized!
-See also: http://www.cs.cmu.edu/~wearable/software/pcmcia-arm.html
-
-
-Introduction
-
-Early versions of PCMCIA Card Services for StrongARM were designed to
-permit a single socket driver to run on a variety of SA-1100 boards by
-using a userland configuration process. During the conversion to the 2.3
-kernel series, all of the configuration has moved into sub-drivers in the
-kernel proper (see linux/drivers/pcmcia/sa1100*). This document describes
-the low-level interface between those sub-drivers and the sa1100 socket
-driver module.
-
-Presently, there are six operations which must be provided by the
-board-specific code. Only functions whose implementation is likely to
-differ across board designs are required at this level. Some examples
-include:
-
-  - configuring card detect lines to generate interrupts
-  - sensing the legal voltage levels for inserted cards
-  - asserting the reset signal for a card
-
-Functions which are assumed to be the same across all designs are
-performed within the generic socket driver itself. Some examples of these
-kinds of operations include:
-
-  - configuring memory access times based on the core clock frequency
-  - reads/writes on memory, byte swizzling, ...
-
-The current implementation allows the specific per-board set of low-level
-operations to be determined at run time. For each specific board, the
-following structure should be filled in:
-
-  struct pcmcia_low_level {
-    int (*init)(struct pcmcia_init *);
-    int (*shutdown)(void);
-    int (*socket_state)(struct pcmcia_state_array *);
-    int (*get_irq_info)(struct pcmcia_irq_info *);
-    int (*configure_socket)(const struct pcmcia_configure *);
-  };
-
-The component functions are described in detail below. Using the
-machine_is_*() tests, the pointer `pcmcia_low_level' should be assigned to
-the location of the table for your board.
-
-
-0. init(struct pcmcia_init *init)
-
-This operation has three responsibilities:
-
-  - perform any board-specific initialization tasks
-  - associate the given handler with any interrupt-generating signals
-    such as card detection, or battery voltage detection
-  - set up any necessary edge detection for card ready signals
-
-Argument passing for this operation is implemented by the following
-structure:
-
-  struct pcmcia_init {
-    void (*handler)(int irq, void *dev, struct pt_regs *regs);
-    struct pcmcia_maps *maps;
-  };
-
-Here, `handler' is provided by the socket driver, and `maps' must be
-modified if the default mapping isn't appropriate. This operation should
-return one of two values:
-
-  - the highest-numbered socket available, plus one
-  - a negative number, indicating an error in configuration
-
-Note that the former case is _not_ the same as "the number of sockets
-available." In particular, if your design uses SA-1100 slot "one" but
-not slot "zero," you MUST report "2" to the socket driver.
-
-
-1. shutdown(void)
-
-This operation takes no arguments, and will be called during cleanup for
-the socket driver module. Any state associated with the socket controller,
-including allocated data structures, reserved IRQs, etc. should be
-released in this routine.
-
-The return value for this operation is not examined.
-
-
-2. socket_state(struct pcmcia_state_array *state_array)
-
-This operation will be invoked from the interrupt handler which was set up
-in the earlier call to init(). Note, however, that it should not include
-any side effects which would be inappropriate if the operation were to
-occur when no interrupt is pending. (An extra invocation of this operation
-currently takes place to initialize state in the socket driver.)
-
-Argument passing for this operation is handled by a structure which
-contains an array of the following type:
-
-  struct pcmcia_state {
-    unsigned detect: 1,
-              ready: 1,
-               bvd1: 1,
-               bvd2: 1,
-             wrprot: 1,
-              vs_3v: 1,
-              vs_Xv: 1;
-  };
-
-Upon return from the operation, a struct pcmcia_state should be filled in
-for each socket available in the hardware. For every array element (up to
-`size' in the struct pcmcia_state_saarray) which does not correspond to an
-available socket, zero the element bits. (This includes element [0] if
-socket zero is not used.)
-
-Regardless of how the various signals are routed to the SA-1100, the bits
-in struct pcmcia_state always have the following semantics:
-
-  detect - 1 if a card is fully inserted, 0 otherwise
-  ready  - 1 if the card ready signal is asserted, 0 otherwise
-  bvd1   - the value of the Battery Voltage Detect 1 signal
-  bvd2   - the value of the Battery Voltage Detect 2 signal
-  wrprot - 1 if the card is write-protected, 0 otherwise
-  vs_3v  - 1 if the card must be operated at 3.3V, 0 otherwise
-  vs_Xv  - 1 if the card must be operated at X.XV, 0 otherwise
-
-A note about the BVD signals: if your board does not make both lines
-directly observable to the processor, just return reasonable values. The
-standard interpretation of the BVD signals is:
-
-  BVD1  BVD2
-
-   0     x    battery is dead
-   1     0    battery warning
-   1     1    battery ok
-
-Regarding the voltage sense flags (vs_3v, vs_Xv), these bits should be set
-based on a sampling of the Voltage Sense pins, if available. The standard
-interpretation of the VS signals (for a "low-voltage" socket) is:
-
-  VS1   VS2
-
-   0     0    X.XV, else 3.3V, else none
-   0     1    3.3V, else none
-   1     0    X.XV, else none
-   1     1    5V, else none
-
-More information about the BVD and VS conventions is available in chapter
-5 of "PCMCIA System Architecture," 2nd ed., by Don Anderson.
-
-This operation should return 1 if an IRQ is actually pending for the
-socket controller, 0 if no IRQ is pending (but no error condition exists,
-such as an undersized state array), or -1 on any error.
-
-
-3. get_irq_info(struct pcmcia_irq_info *info)
-
-This operation obtains the IRQ assignment which is legal for the given
-socket. An argument of the following type is passed:
-
-  struct pcmcia_irq_info {
-    unsigned int sock;
-    unsigned int irq ;
-  };
-
-The `sock' field contains the socket index being queried. The `irq' field
-should contain the IRQ number corresponding to the card ready signal from
-the device.
-
-This operation should return 0 on success, or -1 on any error.
-
-
-4. configure_socket(const struct pcmcia_configure *configure)
-
-This operation allows the caller to apply power to the socket, issue a
-reset, or enable various outputs. The argument is of the following type:
-
-  struct pcmcia_configure {
-    unsigned sock: 8,
-              vcc: 8,
-              vpp: 8,
-           output: 1,
-          speaker: 1,
-            reset: 1;
-  };
-
-The `sock' field contains the index of the socket to be configured. The
-`vcc' and `vpp' fields contain the voltages to be applied for Vcc and Vpp,
-respectively, in units of 0.1V. (Note that vpp==120 indicates that
-programming voltage should be applied.)
-
-The two output enables, `output' and `speaker', refer to the card data
-signal enable and the card speaker enable, respectively. The `reset' bit,
-when set, indicates that the card reset should be asserted.
-
-This operation should return 0 on success, or -1 on any error.
-
-
-Board-Specific Notes
-
-The following information is known about various SA-11x0 board designs
-which may be used as reference while adding support to the kernel.
-
-
-Carnegie Mellon Itsy/Cue (http://www.cs.cmu.edu/~wearable/itsy/)
-
-  Itsy Chip Select 3 (CS3) Interface
-  ("ITSY MEMORY/PCMCIA ADD-ON BOARD with BATTERY and CHARGER CIRCUITRY,"
-   memo dated 5-20-99, from Tim Manns to Richard Martin, et. al)
-
-  Read:
-    ABVD2    (SS)D0          A slot, Battery Voltage Detect
-    ABVD1    (SS)D1
-    AVSS2    (SS)D2          A slot, Voltage Sense
-    AVSS1    (SS)D3
-    GND      (SS)D4
-    GND      (SS)D5
-    GND      (SS)D6
-    GND      (SS)D7
-  
-    BBVD2    (SS)D8          B slot, Battery Voltage Detect
-    BBVD1    (SS)D9
-    BVSS2    (SS)D10         B slot, Voltage Sense
-    BVSS1    (SS)D11
-    GND      (SS)D12
-    GND      (SS)D13
-    GND      (SS)D14
-    GND      (SS)D15
-  
-  Write:
-    (SS)D0   A_VPP_VCC       LTC1472 VPPEN1
-    (SS)D1   A_VPP_PGM       LTC1472 VPPEN0
-    (SS)D2   A_VCC_3         LTC1472 VCCEN0
-    (SS)D3   A_VCC_5         LTC1472 VCCEN1
-    (SS)D4   RESET (A SLOT)
-    (SS)D5   GND
-    (SS)D6   GND
-    (SS)D7   GND
- 
-    (SS)D8   B_VPP_VCC       LTC1472 VPPEN1
-    (SS)D9   B_VPP_PGM       LTC1472 VPPEN0
-    (SS)D10  B_VCC_3         LTC1472 VCCEN0
-    (SS)D11  B_VCC_5         LTC1472 VCCEN1
-    (SS)D12  RESET (B SLOT)
-    (SS)D13  GND
-    (SS)D14  GND
-    (SS)D15  GND
- 
-  GPIO pin assignments are as follows: (from schematics)
- 
-    GPIO 10                  Slot 0 Card Detect
-    GPIO 11                  Slot 1 Card Detect
-    GPIO 12                  Slot 0 Ready/Interrupt
-    GPIO 13                  Slot 1 Ready/Interrupt
-
-
-
-Intel SA-1100 Multimedia Board (http://developer.intel.com/design/strong/)
-
-  CPLD Registers
-  SA-1100 Multimedia Development Board with Companion SA-1101 Development
-    Board User's Guide, p.4-42
-
-  This SA-1100/1101 development package uses only one GPIO pin (24) to
-  signal changes in card status, and requires software to inspect a
-  PCMCIA status register to determine the source.
-
-  Read: (PCMCIA Power Sense Register - 0x19400000)
-    S0VS1           0        Slot 0 voltage sense
-    S0VS2           1
-    S0BVD1          2        Slot 0 battery voltage sense
-    S0BVD2          3
-    S1VS1           4        Slot 1 voltage sense
-    S1VS2           5
-    S1BVD1          6        Slot 1 battery voltage sense
-    S1BVD2          7
-
-  Read/Write: (PCMCIA Power Control Register - 0x19400002)
-    S0VPP0          0        Slot 0 Vpp
-    S0VPP1          1
-    S0VCC0          2        Slot 0 Vcc
-    S0VCC1          3
-    S1VPP0          4        Slot 1 Vpp
-    S1VPP1          5
-    S1VCC0          6        Slot 1 Vcc
-    S1VCC1          7
-
-  Read: (PCMCIA Status Register - 0x19400004)
-    S0CD1           0        Slot 0 Card Detect 1
-    S0RDY           1        Slot 0 Ready/Interrupt
-    S0STSCHG        2        Slot 0 Status Change
-    S0Reset         3        Slot 0 Reset (RW)
-    S1CD1           4        Slot 1 Card Detect 1
-    S1RDY           5        Slot 1 Ready/Interrupt
-    S1STSCHG        6        Slot 1 Status Change
-    S1Reset         7        Slot 1 Reset (RW)
-
-
-
-Intel SA-1100 Evaluation Platform (http://developer.intel.com/design/strong/)
-
-  Brutus I/O Pins and Chipselect Register
-  pcmcia-brutus.c, by Ivo Clarysse
-  (What's the official reference for this info?)
-
-  This SA-1100 development board uses more GPIO pins than say, the Itsy
-  or the SA-1100/1101 multimedia package. The pin assignments are as
-  follows:
-
-    GPIO 2                   Slot 0 Battery Voltage Detect 1
-    GPIO 3                   Slot 0 Ready/Interrupt
-    GPIO 4                   Slot 0 Card Detect
-    GPIO 5                   Slot 1 Battery Voltage Detect 1
-    GPIO 6                   Slot 1 Ready/Interrupt
-    GPIO 7                   Slot 1 Card Detect
-
-  Like the Itsy, Brutus uses a chipselect register in static memory
-  bank 3 for the other signals, such as voltage sense or reset:
-
-  Read:
-    P0_VS1          8        Slot 0 Voltage Sense
-    P0_VS2          9
-    P0_STSCHG      10        Slot 0 Status Change
-    P1_VS1         12        Slot 1 Voltage Sense
-    P1_VS2         13
-    P1_STSCHG      14        Slot 1 Status Change
-
-  Read/Write:
-    P0_            16        Slot 0 MAX1600EAI control line
-    P0_            17        Slot 0 MAX1600EAI control line
-    P0_            18        Slot 0 MAX1600EAI control line
-    P0_            19        Slot 0 MAX1600EAI control line
-    P0_            20        Slot 0 12V
-    P0_            21        Slot 0 Vpp to Vcc (CONFIRM?)
-    P0_            22        Slot 0 enable fan-out drivers & xcvrs
-    P0_SW_RST      23        Slot 0 Reset
-    P1_            24        Slot 1 MAX1600EAI control line
-    P1_            25        Slot 1 MAX1600EAI control line
-    P1_            26        Slot 1 MAX1600EAI control line
-    P1_            27        Slot 1 MAX1600EAI control line
-    P1_            28        Slot 1 12V
-    P1_            29        Slot 1 Vpp to Vcc (CONFIRM?)
-    P1_            30        Slot 1 enable fan-out drivers & xcvrs
-    P1_SW_RST      31        Slot 1 Reset
-
-  For each slot, the bits labelled "MAX1600EAI" should (apparently)
-  be written with the value 0101 for Vcc 3.3V, and 1001 for Vcc 5V.
-
-
-
-Intel SA-1110 Development Platform (http://developer.intel.com/design/strong/)
-
-  GPIO Pin Descriptions and Board Control Register
-  SA-1110 Microprocessor Development Board User's Guide, p.4-7, 4-10
-
-  The Assabet board contains only a single Compact Flash slot,
-  attached to slot 1 on the SA-1110. Card detect, ready, and BVD
-  signals are routed through GPIO, with power and reset placed in a
-  control register. Note that the CF bus must be enabled before use.
-
-    GPIO 21                  Slot 1 Compact Flash interrupt
-    GPIO 22                  Slot 1 card detect (CD1 NOR CD2)
-    GPIO 24                  Slot 1 Battery Voltage Detect 2
-    GPIO 25                  Slot 1 Battery Voltage Detect 1
-
-  Write-only: (Board Control Register - 0x12000000)
-    CF_PWR          0        CF bus power (3.3V)
-    CF_RST          1        CF reset
-    CF_Bus_On       7        CF bus enable
-
diff -Nru a/Documentation/fb/pxafb.txt b/Documentation/fb/pxafb.txt
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/Documentation/fb/pxafb.txt	Sun May 16 01:18:37 2004
@@ -0,0 +1,54 @@
+Driver for PXA25x LCD controller
+================================
+
+The driver supports the following options, either via
+options=<OPTIONS> when modular or video=pxafb:<OPTIONS> when built in.
+
+For example:
+	modprobe pxafb options=mode:640x480-8,passive
+or on the kernel command line
+	video=pxafb:mode:640x480-8,passive
+
+mode:XRESxYRES[-BPP]
+	XRES == LCCR1_PPL + 1
+	YRES == LLCR2_LPP + 1
+		The resolution of the display in pixels
+	BPP == The bit depth. Valid values are 1, 2, 4, 8 and 16.
+
+pixclock:PIXCLOCK
+	Pixel clock in picoseconds
+
+left:LEFT == LCCR1_BLW + 1
+right:RIGHT == LCCR1_ELW + 1
+hsynclen:HSYNC == LCCR1_HSW + 1
+upper:UPPER == LCCR2_BFW
+lower:LOWER == LCCR2_EFR
+vsynclen:VSYNC == LCCR2_VSW + 1
+	Display margins and sync times
+
+color | mono => LCCR0_CMS
+	umm...
+
+active | passive => LCCR0_PAS
+	Active (TFT) or Passive (STN) display
+
+single | dual => LCCR0_SDS
+	Single or dual panel passive display
+
+4pix | 8pix => LCCR0_DPD
+	4 or 8 pixel monochrome single panel data
+
+hsync:HSYNC
+vsync:VSYNC
+	Horizontal and vertical sync. 0 => active low, 1 => active
+	high.
+
+dpc:DPC
+	Double pixel clock. 1=>true, 0=>false
+
+outputen:POLARITY
+	Output Enable Polarity. 0 => active low, 1 => active high
+
+pixclockpol:POLARITY
+	pixel clock polarity
+	0 => falling edge, 1 => rising edge
diff -Nru a/Documentation/filesystems/befs.txt b/Documentation/filesystems/befs.txt
--- a/Documentation/filesystems/befs.txt	Sun May 16 01:18:34 2004
+++ b/Documentation/filesystems/befs.txt	Sun May 16 01:18:34 2004
@@ -17,8 +17,8 @@
 
 AUTHOR
 =====
-Current maintainer: Will Dyson <will_dyson@pobox.com>
-Has been working on the code since Aug 13, 2001. See the changelog for
+The largest part of the code written by Will Dyson <will_dyson@pobox.com>
+He has been working on the code since Aug 13, 2001. See the changelog for
 details.
 
 Original Author: Makoto Kato <m_kato@ga2.so-net.ne.jp>
@@ -26,6 +26,8 @@
 <http://hp.vector.co.jp/authors/VA008030/bfs/>
 Does anyone know of a more current email address for Makoto? He doesn't
 respond to the address given above...
+
+Current maintainer: Sergey S. Kostyliov <rathamahata@php4.ru>
 
 WHAT IS THIS DRIVER?
 ==================
diff -Nru a/Documentation/filesystems/ntfs.txt b/Documentation/filesystems/ntfs.txt
--- a/Documentation/filesystems/ntfs.txt	Sun May 16 01:18:35 2004
+++ b/Documentation/filesystems/ntfs.txt	Sun May 16 01:18:35 2004
@@ -273,6 +273,13 @@
 
 Note, a technical ChangeLog aimed at kernel hackers is in fs/ntfs/ChangeLog.
 
+2.1.11:
+	- Driver internal cleanups.
+2.1.10:
+	- Force read-only (re)mounting of volumes with unsupported volume
+	  flags and various cleanups.
+2.1.9:
+	- Fix two bugs in handling of corner cases in the decompression engine.
 2.1.8:
 	- Read the $MFT mirror and compare it to the $MFT and if the two do not
 	  match, force a read-only mount and do not allow read-write remounts.
diff -Nru a/Documentation/filesystems/proc.txt b/Documentation/filesystems/proc.txt
--- a/Documentation/filesystems/proc.txt	Sun May 16 01:18:34 2004
+++ b/Documentation/filesystems/proc.txt	Sun May 16 01:18:34 2004
@@ -1208,6 +1208,14 @@
 and thrash the system to death, so large and/or important servers will want to
 set this value to 0.
 
+nr_hugepages and hugetlb_shm_group
+----------------------------------
+
+nr_hugepages configures number of hugetlb page reserved for the system.
+
+hugetlb_shm_group contains group id that is allowed to create SysV shared
+memory segment using hugetlb page.
+
 2.5 /proc/sys/dev - Device specific parameters
 ----------------------------------------------
 
@@ -1848,10 +1856,3 @@
 command to write value into these files, thereby changing the default settings
 of the kernel.
 ------------------------------------------------------------------------------
-
-
-
-
-
-
-
diff -Nru a/Documentation/i2c/porting-clients b/Documentation/i2c/porting-clients
--- a/Documentation/i2c/porting-clients	Sun May 16 01:18:34 2004
+++ b/Documentation/i2c/porting-clients	Sun May 16 01:18:34 2004
@@ -62,9 +62,9 @@
   patch to the Documentation/i2c/sysfs-interface file.
 
 * [Attach] For I2C drivers, the attach function should make sure
-  that the adapter's class has I2C_ADAP_CLASS_SMBUS, using the
+  that the adapter's class has I2C_CLASS_HWMON, using the
   following construct:
-  if (!(adapter->class & I2C_ADAP_CLASS_SMBUS))
+  if (!(adapter->class & I2C_CLASS_HWMON))
           return 0;
   ISA-only drivers of course don't need this.
 
diff -Nru a/Documentation/laptop-mode.txt b/Documentation/laptop-mode.txt
--- a/Documentation/laptop-mode.txt	Sun May 16 01:18:36 2004
+++ b/Documentation/laptop-mode.txt	Sun May 16 01:18:36 2004
@@ -69,12 +69,10 @@
 * If you have your filesystems listed as type "auto" in fstab, like I did, then
   the control script will not recognize them as filesystems that need remounting.
 
-* If you have XFS, make SURE that you set the XFS_HZ value in the control script
-  correctly, to the value of HZ of your running kernel. Laptop mode will not
-  work correctly if it is set too low, and you may lose data if it is set too
-  high. The reason for this problem is that XFS does not export its sysctl
-  variables in centisecs (like most other subsystems do) but in "jiffies",
-  which is an internal kernel measure. Once this is fixed things will get better.
+* It has been reported that some versions of the mutt mail client use file access
+  times to determine whether a folder contains new mail. If you use mutt and
+  experience this, you must disable the noatime remounting in the control script
+  by setting DO_REMOUNT_NOATIME=0.
 
 
 The details
@@ -295,6 +293,9 @@
 # Shall we remount journaled fs. with appropiate commit interval? (1=yes)
 DO_REMOUNTS=1
 
+# And shall we add the "noatime" option to that as well? (1=yes)
+DO_REMOUNT_NOATIME=1
+
 # age time, in seconds. should be put into a sysconfig file
 MAX_AGE=600
 
@@ -319,11 +320,15 @@
 DEF_DIRTY_RATIO=40
 DEF_XFS_AGE_BUFFER=15
 DEF_XFS_SYNC_INTERVAL=30
+DEF_XFS_BUFD_INTERVAL=1
 
-# This must be adjusted manually to the value of HZ in the running kernel,
-# until the XFS people change their external interfaces to work in centisecs
-# like the rest of the external world. Unfortunately this cannot be automated. :(
-XFS_HZ=1000
+# This must be adjusted manually to the value of HZ in the running kernel
+# on 2.4, until the XFS people change their 2.4 external interfaces to work in
+# centisecs. This can be automated, but it's a work in progress that still needs
+# some fixes. On 2.6 kernels, XFS uses USER_HZ instead of HZ for external
+# interfaces, and that is currently always set to 100. So you don't need to
+# change this on 2.6.
+XFS_HZ=100
 
 if [ ! -e /proc/sys/vm/laptop_mode ]; then
 	echo "Kernel is not patched with laptop_mode patch."
@@ -335,6 +340,10 @@
 	exit 1
 fi
 
+if [ $DO_REMOUNT_NOATIME -eq 1 ]; then
+	NOATIME_OPT=",noatime"
+fi
+
 case "$1" in
 	start)
 		AGE=$((100*$MAX_AGE))
@@ -342,19 +351,29 @@
 		echo -n "Starting laptop_mode"
 
 		if [ -d /proc/sys/vm/pagebuf ] ; then
+			# (For 2.4 and early 2.6.)
 			# This only needs to be set, not reset -- it is only used when
 			# laptop mode is enabled.
 			echo $XFS_AGE > /proc/sys/vm/pagebuf/lm_flush_age
 			echo $XFS_AGE > /proc/sys/fs/xfs/lm_sync_interval
 		elif [ -f /proc/sys/fs/xfs/lm_age_buffer ] ; then
+			# (A couple of early 2.6 laptop mode patches had these.)
 			# The same goes for these.
 			echo $XFS_AGE > /proc/sys/fs/xfs/lm_age_buffer
 			echo $XFS_AGE > /proc/sys/fs/xfs/lm_sync_interval
 		elif [ -f /proc/sys/fs/xfs/age_buffer ] ; then
+			# (2.6.6)
 			# But not for these -- they are also used in normal
 			# operation.
 			echo $XFS_AGE > /proc/sys/fs/xfs/age_buffer
 			echo $XFS_AGE > /proc/sys/fs/xfs/sync_interval
+		elif [ -f /proc/sys/fs/xfs/age_buffer_centisecs ] ; then
+			# (2.6.7 upwards)
+			# And not for these either. These are in centisecs,
+			# not USER_HZ, so we have to use $AGE, not $XFS_AGE.
+			echo $AGE > /proc/sys/fs/xfs/age_buffer_centisecs
+			echo $AGE > /proc/sys/fs/xfs/xfssyncd_centisecs
+			echo 3000 > /proc/sys/fs/xfs/xfsbufd_centisecs
 		fi
 
 		case "$KLEVEL" in
@@ -376,10 +395,10 @@
 				case "$FST" in
 					"ext3"|"reiserfs")
 						PARSEDOPTS="$(parse_mount_opts commit "$OPTS")"
-						mount $DEV -t $FST $MP -o remount,$PARSEDOPTS,commit=$MAX_AGE,noatime
+						mount $DEV -t $FST $MP -o remount,$PARSEDOPTS,commit=$MAX_AGE$NOATIME_OPT
 						;;
 					"xfs")
-						mount $DEV -t $FST $MP -o remount,$OPTS,noatime
+						mount $DEV -t $FST $MP -o remount,$OPTS$NOATIME_OPT
 						;;
 				esac
 				if [ -b $DEV ] ; then
@@ -395,9 +414,14 @@
 		echo -n "Stopping laptop_mode"
 		echo "0" > /proc/sys/vm/laptop_mode
 		if [ -f /proc/sys/fs/xfs/age_buffer ] && [ ! -f /proc/sys/fs/xfs/lm_age_buffer ] ; then
-			# These need to be restored though, if there are no lm_*.
+			# These need to be restored, if there are no lm_*.
 			echo "$(($XFS_HZ*$DEF_XFS_AGE_BUFFER))" 	> /proc/sys/fs/xfs/age_buffer
 			echo "$(($XFS_HZ*$DEF_XFS_SYNC_INTERVAL))" 	> /proc/sys/fs/xfs/sync_interval
+		elif [ -f /proc/sys/fs/xfs/age_buffer_centisecs ] ; then
+			# These need to be restored as well.
+			echo "$((100*$DEF_XFS_AGE_BUFFER))" > /proc/sys/fs/xfs/age_buffer_centisecs
+			echo "$((100*$DEF_XFS_SYNC_INTERVAL))" > /proc/sys/fs/xfs/xfssyncd_centisecs
+			echo "$((100*$DEF_XFS_BUFD_INTERVAL))" > /proc/sys/fs/xfs/xfsbufd_centisecs
 		fi
 		case "$KLEVEL" in
 			"2.4")
@@ -473,7 +497,7 @@
 case $status in
         "on-line")
                 echo "Setting HD spindown to 2 hours"
-                /sbin/laptop-mode stop
+                /sbin/laptop_mode stop
                 /sbin/hdparm -S $ACAD_HD /dev/hda > /dev/null 2>&1
                 /sbin/hdparm -B 255 /dev/hda > /dev/null 2>&1
                 #echo -n $ACAD_CPU:$ACAD_THR > /proc/acpi/processor/CPU0/limit
@@ -481,7 +505,7 @@
         ;;
         "off-line")
                 echo "Setting HD spindown to 20 seconds"
-                /sbin/laptop-mode start
+                /sbin/laptop_mode start
                 /sbin/hdparm -S $BATT_HD /dev/hda > /dev/null 2>&1
                 /sbin/hdparm -B 1 /dev/hda > /dev/null 2>&1
                 #echo -n $BATT_CPU:$BATT_THR > /proc/acpi/processor/CPU0/limit
diff -Nru a/Documentation/md.txt b/Documentation/md.txt
--- a/Documentation/md.txt	Sun May 16 01:18:35 2004
+++ b/Documentation/md.txt	Sun May 16 01:18:35 2004
@@ -2,6 +2,8 @@
    http://www.<country>.kernel.org/pub/linux/utils/raid/....
 
 
+Boot time assembly of RAID arrays
+---------------------------------
 
 You can boot with your md device with the following kernel command
 lines:
@@ -11,6 +13,8 @@
 
 for raid arrays with persistent superblocks
   md=<md device no.>,dev0,dev1,...,devn
+or, to assemble a partitionable array:
+  md=d<md device no.>,dev0,dev1,...,devn
   
 md device no. = the number of the md device ... 
               0 means md0, 
@@ -34,7 +38,22 @@
 
 e:\loadlin\loadlin e:\zimage root=/dev/md0 md=0,0,4,0,/dev/hdb2,/dev/hdc3 ro
 
--------------------------------
+
+Boot time autodetection of RAID arrays
+--------------------------------------
+
+When md is compiled into the kernel (not as module), partitions of
+type 0xfd are scanned and automatically assembled into RAID arrays.
+This autodetection may be suppressed with the kernel parameter
+"raid=noautodetect".
+
+The kernel parameter "raid=partitionable" (or "raid=part") means
+that all auto-detected arrays are assembled as partitionable.
+
+
+Superblock formats
+------------------
+
 The md driver can support a variety of different superblock formats.
 (It doesn't yet, but it can)
 
@@ -82,7 +101,7 @@
 
 
 Specific Rules that apply to format-0 super block arrays, and
-       arrays with no superblock (non-presistant).
+       arrays with no superblock (non-persistant).
 -------------------------------------------------------------
 
 An array can be 'created' by describing the array (level, chunksize
diff -Nru a/Documentation/power/swsusp.txt b/Documentation/power/swsusp.txt
--- a/Documentation/power/swsusp.txt	Sun May 16 01:18:33 2004
+++ b/Documentation/power/swsusp.txt	Sun May 16 01:18:33 2004
@@ -123,10 +123,61 @@
 replace ethernet card, resume. If you are fast your users will not
 even see broken connections.
 
-Any other idea you might have tell me!
+Q: Maybe I'm missing something, but why doesn't the regular io paths
+work?
 
-Contacting the author
-If you have any question or any patch that solves the above or detected
-problems please contact me at seasons@falcon.sch.bme.hu. I might delay
-answering, sorry about that.
+A: (Basically) you want to replace all kernel data with kernel data saved
+on disk. How do you do that using normal i/o paths? If you'll read
+"new" data 4KB at a time, you'll crash... because you still need "old"
+data to do the reading, and "new" data may fit on same physical spot
+in memory.
 
+There are two solutions to this:
+
+* require half of memory to be free during suspend. That way you can
+read "new" data onto free spots, then cli and copy
+
+* assume we had special "polling" ide driver that only uses memory
+between 0-640KB. That way, I'd have to make sure that 0-640KB is free
+during suspending, but otherwise it would work...
+
+Q: Does linux support ACPI S4?
+
+A: No.
+
+When swsusp was created, ACPI was not too widespread, so we tried to
+avoid using ACPI-specific stuff. ACPI also is/was notoriously
+buggy. These days swsusp works on APM-only i386 machines and even
+without any power managment at all. Some versions also work on PPC.
+
+That means that machine does not enter S4 on suspend-to-disk, but
+simply enters S5. That has few advantages, you can for example boot
+windows on next boot, and return to your Linux session later. You
+could even have few different Linuxes on your box (not sharing any
+partitions), and switch between them.
+
+It also has disadvantages. On HP nx5000, if you unplug power cord
+while machine is suspended-to-disk, Linux will fail to notice that.
+
+Q: My machine doesn't work with ACPI. How can I use swsusp than ?
+
+A: Do reboot() syscall with right parameters. Warning: glibc gets in
+its way, so check with strace:
+
+reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, 0xd000fce2)
+
+(Thanks to Peter Osterlund:)
+
+#include <unistd.h>
+#include <syscall.h>
+
+#define LINUX_REBOOT_MAGIC1     0xfee1dead
+#define LINUX_REBOOT_MAGIC2     672274793
+#define LINUX_REBOOT_CMD_SW_SUSPEND     0xD000FCE2
+
+int main()
+{
+    syscall(SYS_reboot, LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2,
+            LINUX_REBOOT_CMD_SW_SUSPEND, 0);
+    return 0;
+}
diff -Nru a/Documentation/sched-domains.txt b/Documentation/sched-domains.txt
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/Documentation/sched-domains.txt	Sun May 16 01:18:37 2004
@@ -0,0 +1,55 @@
+Each CPU has a "base" scheduling domain (struct sched_domain). These are
+accessed via cpu_sched_domain(i) and this_sched_domain() macros. The domain
+hierarchy is built from these base domains via the ->parent pointer. ->parent
+MUST be NULL terminated, and domain structures should be per-CPU as they
+are locklessly updated.
+
+Each scheduling domain spans a number of CPUs (stored in the ->span field).
+A domain's span MUST be a superset of it child's span, and a base domain
+for CPU i MUST span at least i. The top domain for each CPU will generally
+span all CPUs in the system although strictly it doesn't have to, but this
+could lead to a case where some CPUs will never be given tasks to run unless
+the CPUs allowed mask is explicitly set. A sched domain's span means "balance
+process load among these CPUs".
+
+Each scheduling domain must have one or more CPU groups (struct sched_group)
+which are organised as a circular one way linked list from the ->groups
+pointer. The union of cpumasks of these groups MUST be the same as the
+domain's span. The intersection of cpumasks from any two of these groups
+MUST be the empty set. The group pointed to by the ->groups pointer MUST
+contain the CPU to which the domain belongs. Groups may be shared among
+CPUs as they contain read only data after they have been set up.
+
+Balancing within a sched domain occurs between groups. That is, each group
+is treated as one entity. The load of a group is defined as the sum of the
+load of each of its member CPUs, and only when the load of a group becomes
+out of balance are tasks moved between groups.
+
+In kernel/sched.c, rebalance_tick is run periodically on each CPU. This
+function takes its CPU's base sched domain and checks to see if has reached
+its rebalance interval. If so, then it will run load_balance on that domain.
+rebalance_tick then checks the parent sched_domain (if it exists), and the
+parent of the parent and so forth.
+
+*** Implementing sched domains ***
+The "base" domain will "span" the first level of the hierarchy. In the case
+of SMT, you'll span all siblings of the physical CPU, with each group being
+a single virtual CPU.
+
+In SMP, the parent of the base domain will span all physical CPUs in the
+node. Each group being a single physical CPU. Then with NUMA, the parent
+of the SMP domain will span the entire machine, with each group having the
+cpumask of a node. Or, you could do multi-level NUMA or Opteron, for example,
+might have just one domain covering its one NUMA level.
+
+The implementor should read comments in include/linux/sched.h:
+struct sched_domain fields, SD_FLAG_*, SD_*_INIT to get an idea of
+the specifics and what to tune.
+
+Implementors should change the line
+#undef SCHED_DOMAIN_DEBUG
+to
+#define SCHED_DOMAIN_DEBUG
+in kernel/sched.c as this enables an error checking parse of the sched domains
+which should catch most possible errors (described above). It also prints out
+the domain structure in a visual format.
diff -Nru a/Documentation/scsi/00-INDEX b/Documentation/scsi/00-INDEX
--- a/Documentation/scsi/00-INDEX	Sun May 16 01:18:35 2004
+++ b/Documentation/scsi/00-INDEX	Sun May 16 01:18:35 2004
@@ -62,6 +62,8 @@
 	- info on API between SCSI layer and low level drivers
 st.txt
 	- info on scsi tape driver
+sym53c500_cs.txt
+	- info on PCMCIA driver for Symbios Logic 53c500 based adapters
 sym53c8xx_2.txt
 	- info on second generation driver for sym53c8xx based adapters
 tmscsim.txt
diff -Nru a/Documentation/scsi/sym53c500_cs.txt b/Documentation/scsi/sym53c500_cs.txt
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/Documentation/scsi/sym53c500_cs.txt	Sun May 16 01:18:37 2004
@@ -0,0 +1,23 @@
+The sym53c500_cs driver originated as an add-on to David Hinds' pcmcia-cs
+package, and was written by Tom Corner (tcorner@via.at).  A rewrite was
+long overdue, and the current version addresses the following concerns:
+
+	(1) extensive kernel changes between 2.4 and 2.6.
+	(2) deprecated PCMCIA support outside the kernel.
+
+All the USE_BIOS code has been ripped out.  It was never used, and could
+not have worked anyway.  The USE_DMA code is likewise gone.  Many thanks
+to YOKOTA Hiroshi (nsp_cs driver) and David Hinds (qlogic_cs driver) for
+the code fragments I shamelessly adapted for this work.  Thanks also to
+Christoph Hellwig for his patient tutelage while I stumbled about.
+
+The Symbios Logic 53c500 chip was used in the "newer" (circa 1997) version
+of the New Media Bus Toaster PCMCIA SCSI controller.  Presumably there are
+other products using this chip, but I've never laid eyes (much less hands)
+on one.
+
+Through the years, there have been a number of downloads of the pcmcia-cs
+version of this driver, and I guess it worked for those users.  It worked
+for Tom Corner, and it works for me.  Your mileage will probably vary.
+
+--Bob Tracy (rct@frus.com)
diff -Nru a/Documentation/sound/oss/OPL3-SA b/Documentation/sound/oss/OPL3-SA
--- a/Documentation/sound/oss/OPL3-SA	Sun May 16 01:18:35 2004
+++ b/Documentation/sound/oss/OPL3-SA	Sun May 16 01:18:35 2004
@@ -34,7 +34,7 @@
 	mpu_irq: This is the MPU401's IRQ.
 
 If you'd like to use the OPL3 FM Synthesizer, make sure you enable
-CONFIG_YM3812 (in 'make config'). That'll build the opl3.o module.
+CONFIG_SOUND_YM3812 (in 'make config'). That'll build the opl3.o module.
 
 Then a simple 'insmod opl3 io=0x388', and you now have FM Synth.
 
diff -Nru a/Documentation/sound/oss/VIBRA16 b/Documentation/sound/oss/VIBRA16
--- a/Documentation/sound/oss/VIBRA16	Sun May 16 01:18:34 2004
+++ b/Documentation/sound/oss/VIBRA16	Sun May 16 01:18:34 2004
@@ -62,12 +62,12 @@
 
 	Or, take the hard way:
 
-insmod souncore
-insmod sound
-insmod uart401
-insmod sb io=0x220 irq=5 dma=1 dma16=3
+modprobe soundcore
+modprobe sound
+modprobe uart401
+modprobe sb io=0x220 irq=5 dma=1 dma16=3
 # do you need MIDI?
-insmod opl3=0x388
+modprobe opl3=0x388
 
 	Just in case, the kernel sound support should be:
 
diff -Nru a/Documentation/usb/mtouchusb.txt b/Documentation/usb/mtouchusb.txt
--- a/Documentation/usb/mtouchusb.txt	Sun May 16 01:18:36 2004
+++ b/Documentation/usb/mtouchusb.txt	Sun May 16 01:18:36 2004
@@ -1,26 +1,38 @@
 CHANGES
 
-- Created based off of scanner & INSTALL from the original touchscreen
+- 0.3 - Created based off of scanner & INSTALL from the original touchscreen
   driver on freshmeat (http://freshmeat.net/projects/3mtouchscreendriver)
 - Amended for linux-2.4.18, then 2.4.19
 
-- Complete rewrite using Linux Input in 2.6.3
+- 0.5 - Complete rewrite using Linux Input in 2.6.3
    Unfortunately no calibration support at this time
 
+- 1.4 - Multiple changes to support the EXII 5000UC and house cleaning
+   Changed reset from standard USB dev reset to vendor reset
+   Changed data sent to host from compensated to raw coordinates
+   Eliminated vendor/product module params
+   Performed multiple successfull tests with an EXII-5010UC
 
-DRIVER NOTES:
+SUPPORTED HARDWARE:
+
+        All controllers have the Vendor: 0x0596 & Product: 0x0001
 
-Installation is simple, you only need to add Linux Input, Linux USB, and the 
-driver to the kernel.  The driver can also be optionally built as a module.
 
-If you have another MicroTouch device that you wish to experiment with
-or try using this driver with, but the Vendor and Product ID's are not 
-coded in, don't despair.  If the driver was compiled as a module, you can 
-pass options to the driver.  Simply try:
+        Controller Description          Part Number
+        ------------------------------------------------------
 
-  /sbin/modprobe mtouchusb vendor=0x#### product=0x****
+        USB Capacitive - Pearl Case     14-205  (Discontinued)
+        USB Capacitive - Black Case     14-124  (Discontinued)
+        USB Capacitive - No Case        14-206  (Discontinued)
+
+        USB Capacitive - Pearl Case     EXII-5010UC
+        USB Capacitive - Black Case     EXII-5030UC
+        USB Capacitive - No Case        EXII-5050UC
+
+DRIVER NOTES:
 
-If it works, send me the iVendor & iProduct (or a patch) and I will add...
+Installation is simple, you only need to add Linux Input, Linux USB, and the 
+driver to the kernel.  The driver can also be optionally built as a module.
 
 This driver appears to be one of possible 2 Linux USB Input Touchscreen
 drivers.  Although 3M produces a binary only driver available for
@@ -28,53 +40,28 @@
 touchscreen for embedded apps using QTEmbedded, DirectFB, etc. So I feel the
 logical choice is to use Linux Imput.
 
-A little info about the MicroTouch USB controller (14-206):
-
-Y is inverted, and the device has a total possible resolution of 0 - 65535.
-
-Y is inverted by the driver by:
+Currently there is no way to calibrate the device via this driver.  Even if
+the device could be calibrated, the driver pulls to raw coordinate data from
+the controller.  This means calibration must be performed within the
+userspace.
+
+The controller screen resolution is now 0 to 16384 for both X and Y reporting
+the raw touch data.  This is the same for the old and new capacitive USB
+controllers.
+
+Perhaps at some point an abstract function will be placed into evdev so 
+generic functions like calibrations, resets, and vendor information can be 
+requested from the userspace (And the drivers would handle the vendor specific
+tasks).
 
-        input.absmin[ABS_Y] =  MTOUCHUSB_MAX_YC;
-        input.absmax[ABS_Y] =  MTOUCHUSB_MIN_YC;
-
-absmin & absmax are also used to scale the data, sine it is rather high 
-resolution.
-
-    ---------------touch screen area-----------------
-    I                        MicroTouch (xmax,ymax) @I
-    I                      X                         I
-    I   ########visible monitor area##############   I
-    I   #@ (xmin,ymin)                           #   I
-    I   #                                        #   I
-    I   #                                        #   I
-    I   #                                        #   I
-    I   #                                        #   I
-    I   #                                        #   I
-    I Y #                                        #   I
-    I   #                                        #   I
-    I   #                                        #   I
-    I   #                                        #   I
-    I   #                                        #   I
-    I   #                                        #   I
-    I   #                           (xmax,ymax) @#   I
-    I   ##########################################   I
-    I                                                I
-    I@ MicroTouch (xmin,ymin)                        I
-    -------------------------------------------------
-
-Currently there is no way to calibrate the device via this driver.  Perhaps 
-at some point an abstract function will be placed into evdev so generic 
-functions like calibrations, resets, and vendor information can be requested 
-(And the drivers would handle the vendor specific tasks).
-
-ADDITIONAL INFORMATION/UPDATES:
+ADDITIONAL INFORMATION/UPDATES/X CONFIGURATION EXAMPLE:
 
 http://groomlakelabs.com/grandamp/code/microtouch/
 
 TODO:
 
 Implement a control urb again to handle requests to and from the device
-such as calibration, etc.
+such as calibration, etc once/if it becomes available.
 
 DISCLAMER:
 
@@ -83,3 +70,7 @@
 
 http://www.3m.com/3MTouchSystems/downloads/
 
+THANKS:
+
+A huge thank you to 3M Touch Systems for the EXII-5010UC controllers for
+testing!
diff -Nru a/Documentation/vm/hugetlbpage.txt b/Documentation/vm/hugetlbpage.txt
--- a/Documentation/vm/hugetlbpage.txt	Sun May 16 01:18:33 2004
+++ b/Documentation/vm/hugetlbpage.txt	Sun May 16 01:18:33 2004
@@ -91,9 +91,12 @@
 used to change the file attributes on hugetlbfs.
 
 Also, it is important to note that no such mount command is required if the
-applications are going to use only shmat/shmget system calls.  It is possible
-for same or different applications to use any combination of mmaps and shm*
-calls.  Though the mount of filesystem will be required for using mmaps.
+applications are going to use only shmat/shmget system calls.  Users who
+wish to use hugetlb page via shared memory segment should be a member of
+a supplementary group and system admin needs to configure that gid into
+/proc/sys/vm/hugetlb_shm_group.  It is possible for same or different
+applications to use any combination of mmaps and shm* calls.  Though the
+mount of filesystem will be required for using mmaps.
 
 /* Example of using hugepage in user application using Sys V shared memory
  * system calls.  In this example, app is requesting memory of size 256MB that
diff -Nru a/MAINTAINERS b/MAINTAINERS
--- a/MAINTAINERS	Sun May 16 01:18:35 2004
+++ b/MAINTAINERS	Sun May 16 01:18:35 2004
@@ -168,10 +168,8 @@
 
 AACRAID SCSI RAID DRIVER
 P:	Adaptec OEM Raid Solutions
-M:	linux-aacraid-devel@dell.com
-L:	linux-aacraid-devel@dell.com
-L:	linux-aacraid-announce@dell.com
-W:	http://domsch.com/linux
+L:	linux-scsi@vger.kernel.org
+W:	http://linux.dell.com/storage.shtml
 S:	Supported
 
 ACPI
@@ -574,14 +572,12 @@
 S:	Maintained
 
 CYCLADES ASYNC MUX DRIVER
-P:	Henrique Gobbi
-M:	henrique@cyclades.com
+M:	async@cyclades.com
 W:	http://www.cyclades.com/
 S:	Supported
 
 CYCLADES PC300 DRIVER
-P:	Henrique Gobbi
-M:	henrique@cyclades.com
+M:	pc300@cyclades.com
 W:	http://www.cyclades.com/
 S:	Supported
 
@@ -976,6 +972,11 @@
 W:	http://www.uni-mainz.de/~langm000/linux.html
 S:	Maintained
 
+IBM Power Linux RAID adapter
+P:	Brian King
+M:	brking@us.ibm.com
+S:	Supported
+
 IBM ServeRAID RAID DRIVER
 P:	Jack Hammer
 P:	Dave Jeffery
@@ -1228,6 +1229,13 @@
 L:	linux-scsi@vger.kernel.org
 S:	Maintained
 
+LEGO USB Tower driver
+P:	Juergen Stuber
+M:	starblue@users.sourceforge.net
+L:	legousb-devel@lists.sourceforge.net
+W:	http://legousb.sourceforge.net/
+S:	Maintained
+
 LINUX FOR IBM pSERIES (RS/6000)
 P:	Paul Mackerras
 M:	paulus@au.ibm.com
@@ -1801,6 +1809,12 @@
 L:	linux-kernel@vger.kernel.org (kernel issues)
 L: 	selinux@tycho.nsa.gov (general discussion)
 W:	http://www.nsa.gov/selinux
+S:	Supported
+
+SERIAL ATA (SATA) SUBSYSTEM:
+P:	Jeff Garzik
+M:	jgarzik@pobox.com
+L:	linux-ide@vger.kernel.org
 S:	Supported
 
 SGI SN-IA64 (Altix) SERIAL CONSOLE DRIVER
diff -Nru a/Makefile b/Makefile
--- a/Makefile	Sun May 16 01:18:35 2004
+++ b/Makefile	Sun May 16 01:18:35 2004
@@ -1001,6 +1001,8 @@
 	       -name '*.[chS]' -print; \
 	  find arch/$(ARCH) $(RCS_FIND_IGNORE) \
 	       -name '*.[chS]' -print; \
+	  find security/selinux/include $(RCS_FIND_IGNORE) \
+	       -name '*.[chS]' -print; \
 	  find include $(RCS_FIND_IGNORE) \
 	       \( -name config -o -name 'asm-*' \) -prune \
 	       -o -name '*.[chS]' -print; \
@@ -1056,6 +1058,9 @@
 	find * $(RCS_FIND_IGNORE) \
 		-name '*.[hcS]' -type f -print | sort \
 		| xargs $(PERL) -w scripts/checkversion.pl
+
+buildcheck:
+	$(PERL) scripts/reference_discarded.pl
 
 endif #ifeq ($(config-targets),1)
 endif #ifeq ($(mixed-targets),1)
diff -Nru a/arch/alpha/kernel/module.c b/arch/alpha/kernel/module.c
--- a/arch/alpha/kernel/module.c	Sun May 16 01:18:33 2004
+++ b/arch/alpha/kernel/module.c	Sun May 16 01:18:33 2004
@@ -234,6 +234,10 @@
 			   value was resolved from somewhere else.  */
 			if (sym->st_shndx == SHN_UNDEF)
 				goto reloc_overflow;
+			if ((sym->st_other & STO_ALPHA_STD_GPLOAD) ==
+			    STO_ALPHA_STD_GPLOAD)
+				/* Omit the prologue. */
+				value += 8;
 			/* FALLTHRU */
 		case R_ALPHA_BRADDR:
 			value -= (u64)location + 4;
diff -Nru a/arch/alpha/kernel/process.c b/arch/alpha/kernel/process.c
--- a/arch/alpha/kernel/process.c	Sun May 16 01:18:36 2004
+++ b/arch/alpha/kernel/process.c	Sun May 16 01:18:36 2004
@@ -510,12 +510,6 @@
 	return 0;
 }
 
-/*
- * These bracket the sleeping functions..
- */
-#define first_sched	((unsigned long) scheduling_functions_start_here)
-#define last_sched	((unsigned long) scheduling_functions_end_here)
-
 unsigned long
 get_wchan(struct task_struct *p)
 {
@@ -534,7 +528,7 @@
 	 */
 
 	pc = thread_saved_pc(p);
-	if (pc >= first_sched && pc < last_sched) {
+	if (in_sched_functions(pc)) {
 		schedule_frame = ((unsigned long *)p->thread_info->pcb.ksp)[6];
 		return ((unsigned long *)schedule_frame)[12];
 	}
diff -Nru a/arch/alpha/kernel/smp.c b/arch/alpha/kernel/smp.c
--- a/arch/alpha/kernel/smp.c	Sun May 16 01:18:34 2004
+++ b/arch/alpha/kernel/smp.c	Sun May 16 01:18:34 2004
@@ -820,6 +820,9 @@
 	unsigned long timeout;
 	int num_cpus_to_call;
 	
+	/* Can deadlock when called with interrupts disabled */
+	WARN_ON(irqs_disabled());
+
 	data.func = func;
 	data.info = info;
 	data.wait = wait;
diff -Nru a/arch/alpha/kernel/time.c b/arch/alpha/kernel/time.c
--- a/arch/alpha/kernel/time.c	Sun May 16 01:18:35 2004
+++ b/arch/alpha/kernel/time.c	Sun May 16 01:18:35 2004
@@ -45,6 +45,7 @@
 #include <asm/uaccess.h>
 #include <asm/io.h>
 #include <asm/hwrpb.h>
+#include <asm/8253pit.h>
 
 #include <linux/mc146818rtc.h>
 #include <linux/time.h>
@@ -254,12 +255,11 @@
  * arch/i386/time.c.
  */
 
-#define PIC_TICK_RATE	1193180UL
 #define CALIBRATE_LATCH	0xffff
 #define TIMEOUT_COUNT	0x100000
 
 static unsigned long __init
-calibrate_cc_with_pic(void)
+calibrate_cc_with_pit(void)
 {
 	int cc, count = 0;
 
@@ -287,7 +287,7 @@
 	if (count <= 1 || count == TIMEOUT_COUNT)
 		return 0;
 
-	return ((long)cc * PIC_TICK_RATE) / (CALIBRATE_LATCH + 1);
+	return ((long)cc * PIT_TICK_RATE) / (CALIBRATE_LATCH + 1);
 }
 
 /* The Linux interpretation of the CMOS clock register contents:
@@ -313,7 +313,7 @@
 
 	/* Calibrate CPU clock -- attempt #1.  */
 	if (!est_cycle_freq)
-		est_cycle_freq = validate_cc_value(calibrate_cc_with_pic());
+		est_cycle_freq = validate_cc_value(calibrate_cc_with_pit());
 
 	cc1 = rpcc_after_update_in_progress();
 
diff -Nru a/arch/arm/Kconfig b/arch/arm/Kconfig
--- a/arch/arm/Kconfig	Sun May 16 01:18:35 2004
+++ b/arch/arm/Kconfig	Sun May 16 01:18:35 2004
@@ -111,6 +111,9 @@
 config ARCH_IOP3XX
 	bool "IOP3xx-based"
 
+config ARCH_IXP4XX
+	bool "IXP4xx-based"
+
 config ARCH_L7200
 	bool "LinkUp-L7200"
 	help
@@ -170,6 +173,8 @@
 
 source "arch/arm/mach-iop3xx/Kconfig"
 
+source "arch/arm/mach-ixp4xx/Kconfig"
+
 source "arch/arm/mach-pxa/Kconfig"
 
 source "arch/arm/mach-sa1100/Kconfig"
@@ -222,7 +227,7 @@
 
 config DMABOUNCE
 	bool
-	depends on SA1111
+	depends on SA1111 || ARCH_IXP4XX
 	default y
 
 source arch/arm/mm/Kconfig
@@ -252,7 +257,7 @@
 # Now handle the bus types
 config PCI
 	bool "PCI support" if ARCH_INTEGRATOR_AP
-	default y if ARCH_FTVPCI || ARCH_SHARK || FOOTBRIDGE_HOST || ARCH_IOP3XX
+	default y if ARCH_FTVPCI || ARCH_SHARK || FOOTBRIDGE_HOST || ARCH_IOP3XX || ARCH_IXP4XX
 	help
 	  Find out whether you have a PCI motherboard. PCI is the name of a
 	  bus system, i.e. the way the CPU talks to the other stuff inside
@@ -791,8 +796,8 @@
 	  before it is used.
 
 config DEBUG_S3C2410_UART
-	int
 	depends on DEBUG_LL && ARCH_S3C2410
+	int "S3C2410 UART to use for low-level debug"
 	default "0"
 	help
 	  Choice for UART for kernel low-level using S3C2410 UARTS,
diff -Nru a/arch/arm/Makefile b/arch/arm/Makefile
--- a/arch/arm/Makefile	Sun May 16 01:18:34 2004
+++ b/arch/arm/Makefile	Sun May 16 01:18:34 2004
@@ -92,6 +92,7 @@
 textaddr-$(CONFIG_ARCH_FORTUNET)   := 0xc0008000
  machine-$(CONFIG_ARCH_IOP3XX)	   := iop3xx
  machine-$(CONFIG_ARCH_ADIFCC)	   := adifcc
+ machine-$(CONFIG_ARCH_IXP4XX)	   := ixp4xx
  machine-$(CONFIG_ARCH_OMAP)	   := omap
  machine-$(CONFIG_ARCH_S3C2410)	   := s3c2410
  machine-$(CONFIG_ARCH_LH7A40X)	   := lh7a40x
diff -Nru a/arch/arm/boot/Makefile b/arch/arm/boot/Makefile
--- a/arch/arm/boot/Makefile	Sun May 16 01:18:33 2004
+++ b/arch/arm/boot/Makefile	Sun May 16 01:18:33 2004
@@ -51,6 +51,8 @@
 params_phys-$(CONFIG_ARCH_IOP3XX)	:= 0xa0000100
    zreladdr-$(CONFIG_ARCH_ADIFCC)	:= 0xc0008000
 params_phys-$(CONFIG_ARCH_ADIFCC)	:= 0xc0000100
+   zreladdr-$(CONFIG_ARCH_IXP4XX)	:= 0x00008000
+params-phys-$(CONFIG_ARCH_IXP4XX)	:= 0x00000100
    zreladdr-$(CONFIG_ARCH_OMAP)		:= 0x10008000
 params_phys-$(CONFIG_ARCH_OMAP)		:= 0x10000100
 initrd_phys-$(CONFIG_ARCH_OMAP)		:= 0x10800000
diff -Nru a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S
--- a/arch/arm/boot/compressed/head.S	Sun May 16 01:18:36 2004
+++ b/arch/arm/boot/compressed/head.S	Sun May 16 01:18:36 2004
@@ -73,6 +73,12 @@
 		.macro	writeb, rb
 		str	\rb, [r3, #0x14]	@ UTDR
 		.endm
+#elif defined(CONFIG_ARCH_IXP4XX)
+		.macro	loadsp, rb
+		mov	\rb, #0xc8000000
+		.endm
+		.macro	writeb, rb
+		str	\rb, [r3, #0]
 #elif defined(CONFIG_ARCH_LH7A40X)
 		.macro	loadsp, rb
 		ldr	\rb, =0x80000700	@ UART2 UARTBASE
@@ -176,7 +182,7 @@
 		ldmia	r0, {r1, r2, r3, r4, r5, r6, ip, sp}
 		subs	r0, r0, r1		@ calculate the delta offset
 
-						@ if delta is zero, we're
+						@ if delta is zero, we are
 		beq	not_relocated		@ running at the address we
 						@ were linked at.
 
diff -Nru a/arch/arm/configs/ixp4xx_defconfig b/arch/arm/configs/ixp4xx_defconfig
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/arch/arm/configs/ixp4xx_defconfig	Sun May 16 01:18:37 2004
@@ -0,0 +1,1081 @@
+#
+# Automatically generated make config: don't edit
+#
+CONFIG_ARM=y
+CONFIG_MMU=y
+CONFIG_UID16=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_CLEAN_COMPILE=y
+CONFIG_STANDALONE=y
+CONFIG_BROKEN_ON_SMP=y
+
+#
+# General setup
+#
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
+CONFIG_BSD_PROCESS_ACCT=y
+CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_HOTPLUG is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_EMBEDDED=y
+CONFIG_KALLSYMS=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+# CONFIG_MODULE_UNLOAD is not set
+CONFIG_OBSOLETE_MODPARM=y
+CONFIG_MODVERSIONS=y
+CONFIG_KMOD=y
+
+#
+# System Type
+#
+# CONFIG_ARCH_ADIFCC is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_CAMELOT is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_IOP3XX is not set
+CONFIG_ARCH_IXP4XX=y
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_VERSATILE_PB is not set
+
+#
+# CLPS711X/EP721X Implementations
+#
+
+#
+# Epxa10db
+#
+
+#
+# Footbridge Implementations
+#
+
+#
+# IOP3xx Implementation Options
+#
+# CONFIG_ARCH_IOP310 is not set
+# CONFIG_ARCH_IOP321 is not set
+
+#
+# IOP3xx Chipset Features
+#
+CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y
+
+#
+# Intel IXP4xx Implementation Options
+#
+
+#
+# IXP4xx Platforms
+#
+CONFIG_ARCH_IXDP425=y
+CONFIG_ARCH_IXCDP1100=y
+CONFIG_ARCH_PRPMC1100=y
+CONFIG_ARCH_ADI_COYOTE=y
+# CONFIG_ARCH_AVILA is not set
+CONFIG_ARCH_IXDP4XX=y
+
+#
+# IXP4xx Options
+#
+# CONFIG_IXP4XX_INDIRECT_PCI is not set
+
+#
+# Intel PXA250/210 Implementations
+#
+
+#
+# SA11x0 Implementations
+#
+
+#
+# TI OMAP Implementations
+#
+
+#
+# OMAP Core Type
+#
+
+#
+# OMAP Board Type
+#
+
+#
+# OMAP Feature Selections
+#
+
+#
+# S3C2410 Implementations
+#
+
+#
+# LH7A40X Implementations
+#
+CONFIG_DMABOUNCE=y
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_MINICACHE=y
+
+#
+# Processor Features
+#
+# CONFIG_ARM_THUMB is not set
+CONFIG_CPU_BIG_ENDIAN=y
+CONFIG_XSCALE_PMU=y
+
+#
+# General setup
+#
+CONFIG_PCI=y
+# CONFIG_ZBOOT_ROM is not set
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_PCI_LEGACY_PROC=y
+CONFIG_PCI_NAMES=y
+
+#
+# At least one math emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Generic Driver Options
+#
+# CONFIG_DEBUG_DRIVER is not set
+CONFIG_PM=y
+# CONFIG_PREEMPT is not set
+CONFIG_APM=y
+# CONFIG_ARTHUR is not set
+CONFIG_CMDLINE="console=ttyS0,115200 ip=bootp root=/dev/nfs"
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_REDBOOT_PARTS=y
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+CONFIG_MTD_COMPLEX_MAPPINGS=y
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+CONFIG_MTD_IXP4XX=y
+# CONFIG_MTD_EDB7312 is not set
+# CONFIG_MTD_PCI is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLKMTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=m
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+CONFIG_MTD_NAND_IDS=m
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_CARMEL is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_SIZE=8192
+CONFIG_BLK_DEV_INITRD=y
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Networking support
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=m
+CONFIG_PACKET_MMAP=y
+CONFIG_NETLINK_DEV=m
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_IP_MULTIPLE_TABLES=y
+CONFIG_IP_ROUTE_FWMARK=y
+CONFIG_IP_ROUTE_NAT=y
+CONFIG_IP_ROUTE_MULTIPATH=y
+CONFIG_IP_ROUTE_TOS=y
+CONFIG_IP_ROUTE_VERBOSE=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+CONFIG_NET_IPIP=m
+CONFIG_NET_IPGRE=m
+CONFIG_NET_IPGRE_BROADCAST=y
+CONFIG_IP_MROUTE=y
+CONFIG_IP_PIMSM_V1=y
+CONFIG_IP_PIMSM_V2=y
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+
+#
+# IP: Virtual Server Configuration
+#
+CONFIG_IP_VS=m
+CONFIG_IP_VS_DEBUG=y
+CONFIG_IP_VS_TAB_BITS=12
+
+#
+# IPVS transport protocol load balancing support
+#
+# CONFIG_IP_VS_PROTO_TCP is not set
+# CONFIG_IP_VS_PROTO_UDP is not set
+# CONFIG_IP_VS_PROTO_ESP is not set
+# CONFIG_IP_VS_PROTO_AH is not set
+
+#
+# IPVS scheduler
+#
+CONFIG_IP_VS_RR=m
+CONFIG_IP_VS_WRR=m
+CONFIG_IP_VS_LC=m
+CONFIG_IP_VS_WLC=m
+CONFIG_IP_VS_LBLC=m
+CONFIG_IP_VS_LBLCR=m
+CONFIG_IP_VS_DH=m
+CONFIG_IP_VS_SH=m
+# CONFIG_IP_VS_SED is not set
+# CONFIG_IP_VS_NQ is not set
+
+#
+# IPVS application helper
+#
+# CONFIG_IPV6 is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_CONNTRACK=m
+CONFIG_IP_NF_FTP=m
+CONFIG_IP_NF_IRC=m
+# CONFIG_IP_NF_TFTP is not set
+# CONFIG_IP_NF_AMANDA is not set
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_LIMIT=m
+# CONFIG_IP_NF_MATCH_IPRANGE is not set
+CONFIG_IP_NF_MATCH_MAC=m
+# CONFIG_IP_NF_MATCH_PKTTYPE is not set
+CONFIG_IP_NF_MATCH_MARK=m
+CONFIG_IP_NF_MATCH_MULTIPORT=m
+CONFIG_IP_NF_MATCH_TOS=m
+# CONFIG_IP_NF_MATCH_RECENT is not set
+# CONFIG_IP_NF_MATCH_ECN is not set
+# CONFIG_IP_NF_MATCH_DSCP is not set
+CONFIG_IP_NF_MATCH_AH_ESP=m
+CONFIG_IP_NF_MATCH_LENGTH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_TCPMSS=m
+# CONFIG_IP_NF_MATCH_HELPER is not set
+CONFIG_IP_NF_MATCH_STATE=m
+# CONFIG_IP_NF_MATCH_CONNTRACK is not set
+CONFIG_IP_NF_MATCH_OWNER=m
+# CONFIG_IP_NF_MATCH_PHYSDEV is not set
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_NAT=m
+CONFIG_IP_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+# CONFIG_IP_NF_TARGET_NETMAP is not set
+# CONFIG_IP_NF_TARGET_SAME is not set
+CONFIG_IP_NF_NAT_LOCAL=y
+CONFIG_IP_NF_NAT_SNMP_BASIC=m
+CONFIG_IP_NF_NAT_IRC=m
+CONFIG_IP_NF_NAT_FTP=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+# CONFIG_IP_NF_TARGET_ECN is not set
+# CONFIG_IP_NF_TARGET_DSCP is not set
+CONFIG_IP_NF_TARGET_MARK=m
+# CONFIG_IP_NF_TARGET_CLASSIFY is not set
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_TARGET_TCPMSS=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+# CONFIG_IP_NF_ARP_MANGLE is not set
+CONFIG_IP_NF_COMPAT_IPCHAINS=m
+CONFIG_IP_NF_COMPAT_IPFWADM=m
+# CONFIG_IP_NF_RAW is not set
+
+#
+# Bridge: Netfilter Configuration
+#
+# CONFIG_BRIDGE_NF_EBTABLES is not set
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+CONFIG_ATM=y
+CONFIG_ATM_CLIP=y
+# CONFIG_ATM_CLIP_NO_ICMP is not set
+CONFIG_ATM_LANE=m
+CONFIG_ATM_MPOA=m
+CONFIG_ATM_BR2684=m
+# CONFIG_ATM_BR2684_IPFILTER is not set
+CONFIG_BRIDGE=m
+CONFIG_VLAN_8021Q=m
+# CONFIG_DECNET is not set
+CONFIG_LLC=m
+# CONFIG_LLC2 is not set
+CONFIG_IPX=m
+# CONFIG_IPX_INTERN is not set
+CONFIG_ATALK=m
+CONFIG_DEV_APPLETALK=y
+CONFIG_IPDDP=m
+CONFIG_IPDDP_ENCAP=y
+CONFIG_IPDDP_DECAP=y
+CONFIG_X25=m
+CONFIG_LAPB=m
+# CONFIG_NET_DIVERT is not set
+CONFIG_ECONET=m
+CONFIG_ECONET_AUNUDP=y
+CONFIG_ECONET_NATIVE=y
+CONFIG_WAN_ROUTER=m
+# CONFIG_NET_FASTROUTE is not set
+# CONFIG_NET_HW_FLOWCONTROL is not set
+
+#
+# QoS and/or fair queueing
+#
+CONFIG_NET_SCHED=y
+CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_HTB=m
+# CONFIG_NET_SCH_HFSC is not set
+CONFIG_NET_SCH_CSZ=m
+# CONFIG_NET_SCH_ATM is not set
+CONFIG_NET_SCH_PRIO=m
+CONFIG_NET_SCH_RED=m
+CONFIG_NET_SCH_SFQ=m
+CONFIG_NET_SCH_TEQL=m
+CONFIG_NET_SCH_TBF=m
+CONFIG_NET_SCH_GRED=m
+CONFIG_NET_SCH_DSMARK=m
+# CONFIG_NET_SCH_DELAY is not set
+CONFIG_NET_SCH_INGRESS=m
+CONFIG_NET_QOS=y
+CONFIG_NET_ESTIMATOR=y
+CONFIG_NET_CLS=y
+CONFIG_NET_CLS_TCINDEX=m
+CONFIG_NET_CLS_ROUTE4=m
+CONFIG_NET_CLS_ROUTE=y
+CONFIG_NET_CLS_FW=m
+CONFIG_NET_CLS_U32=m
+CONFIG_NET_CLS_RSVP=m
+CONFIG_NET_CLS_RSVP6=m
+CONFIG_NET_CLS_POLICE=y
+
+#
+# Network testing
+#
+CONFIG_NET_PKTGEN=m
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+CONFIG_NETDEVICES=y
+CONFIG_DUMMY=y
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_ETHERTAP is not set
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_NET_VENDOR_3COM is not set
+
+#
+# Tulip family network device support
+#
+# CONFIG_NET_TULIP is not set
+# CONFIG_HP100 is not set
+CONFIG_NET_PCI=y
+# CONFIG_PCNET32 is not set
+# CONFIG_AMD8111_ETH is not set
+# CONFIG_ADAPTEC_STARFIRE is not set
+# CONFIG_B44 is not set
+# CONFIG_FORCEDETH is not set
+# CONFIG_DGRS is not set
+CONFIG_EEPRO100=y
+# CONFIG_EEPRO100_PIO is not set
+# CONFIG_E100 is not set
+# CONFIG_FEALNX is not set
+# CONFIG_NATSEMI is not set
+# CONFIG_NE2K_PCI is not set
+# CONFIG_8139CP is not set
+# CONFIG_8139TOO is not set
+# CONFIG_SIS900 is not set
+# CONFIG_EPIC100 is not set
+# CONFIG_SUNDANCE is not set
+# CONFIG_TLAN is not set
+# CONFIG_VIA_RHINE is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_E1000 is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_R8169 is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_TIGON3 is not set
+
+#
+# Ethernet (10000 Mbit)
+#
+# CONFIG_IXGB is not set
+# CONFIG_S2IO is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+# CONFIG_AIRO is not set
+CONFIG_HERMES=y
+# CONFIG_PLX_HERMES is not set
+# CONFIG_TMD_HERMES is not set
+CONFIG_PCI_HERMES=y
+# CONFIG_ATMEL is not set
+
+#
+# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
+#
+CONFIG_NET_WIRELESS=y
+
+#
+# Wan interfaces
+#
+CONFIG_WAN=y
+# CONFIG_DSCC4 is not set
+# CONFIG_LANMEDIA is not set
+# CONFIG_SYNCLINK_SYNCPPP is not set
+CONFIG_HDLC=m
+CONFIG_HDLC_RAW=y
+# CONFIG_HDLC_RAW_ETH is not set
+CONFIG_HDLC_CISCO=y
+CONFIG_HDLC_FR=y
+CONFIG_HDLC_PPP=y
+CONFIG_HDLC_X25=y
+# CONFIG_PCI200SYN is not set
+# CONFIG_WANXL is not set
+# CONFIG_PC300 is not set
+# CONFIG_FARSYNC is not set
+CONFIG_DLCI=m
+CONFIG_DLCI_COUNT=24
+CONFIG_DLCI_MAX=8
+CONFIG_WAN_ROUTER_DRIVERS=y
+# CONFIG_CYCLADES_SYNC is not set
+# CONFIG_LAPBETHER is not set
+# CONFIG_X25_ASY is not set
+
+#
+# ATM drivers
+#
+CONFIG_ATM_TCP=m
+# CONFIG_ATM_LANAI is not set
+# CONFIG_ATM_ENI is not set
+# CONFIG_ATM_FIRESTREAM is not set
+# CONFIG_ATM_ZATM is not set
+# CONFIG_ATM_NICSTAR is not set
+# CONFIG_ATM_IDT77252 is not set
+# CONFIG_ATM_AMBASSADOR is not set
+# CONFIG_ATM_HORIZON is not set
+# CONFIG_ATM_IA is not set
+# CONFIG_ATM_FORE200E_MAYBE is not set
+# CONFIG_ATM_HE is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_RCPCI is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=y
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+# CONFIG_IDEDISK_STROKE is not set
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+# CONFIG_IDE_TASKFILE_IO is not set
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=y
+CONFIG_BLK_DEV_IDEPCI=y
+# CONFIG_IDEPCI_SHARE_IRQ is not set
+# CONFIG_BLK_DEV_OFFBOARD is not set
+# CONFIG_BLK_DEV_GENERIC is not set
+# CONFIG_BLK_DEV_OPTI621 is not set
+# CONFIG_BLK_DEV_SL82C105 is not set
+CONFIG_BLK_DEV_IDEDMA_PCI=y
+# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
+# CONFIG_IDEDMA_PCI_AUTO is not set
+CONFIG_BLK_DEV_ADMA=y
+# CONFIG_BLK_DEV_AEC62XX is not set
+# CONFIG_BLK_DEV_ALI15X3 is not set
+# CONFIG_BLK_DEV_AMD74XX is not set
+CONFIG_BLK_DEV_CMD64X=y
+# CONFIG_BLK_DEV_TRIFLEX is not set
+# CONFIG_BLK_DEV_CY82C693 is not set
+# CONFIG_BLK_DEV_CS5520 is not set
+# CONFIG_BLK_DEV_CS5530 is not set
+# CONFIG_BLK_DEV_HPT34X is not set
+CONFIG_BLK_DEV_HPT366=y
+# CONFIG_BLK_DEV_SC1200 is not set
+# CONFIG_BLK_DEV_PIIX is not set
+# CONFIG_BLK_DEV_NS87415 is not set
+# CONFIG_BLK_DEV_PDC202XX_OLD is not set
+CONFIG_BLK_DEV_PDC202XX_NEW=y
+# CONFIG_PDC202XX_FORCE is not set
+# CONFIG_BLK_DEV_SVWKS is not set
+# CONFIG_BLK_DEV_SIIMAGE is not set
+# CONFIG_BLK_DEV_SLC90E66 is not set
+# CONFIG_BLK_DEV_TRM290 is not set
+# CONFIG_BLK_DEV_VIA82CXXX is not set
+CONFIG_BLK_DEV_IDEDMA=y
+# CONFIG_IDEDMA_IVB is not set
+# CONFIG_IDEDMA_AUTO is not set
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_SCSI is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_IEEE1394 is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input I/O drivers
+#
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+# CONFIG_SERIO is not set
+# CONFIG_SERIO_I8042 is not set
+
+#
+# Input Device Drivers
+#
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Character devices
+#
+# CONFIG_VT is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_NR_UARTS=2
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+# CONFIG_QIC02_TAPE is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_IXP4XX_WATCHDOG=y
+
+#
+# PCI-based Watchdog Cards
+#
+# CONFIG_PCIPCWATCHDOG is not set
+# CONFIG_WDTPCI is not set
+# CONFIG_NVRAM is not set
+# CONFIG_RTC is not set
+# CONFIG_GEN_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_FTAPE is not set
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+CONFIG_I2C_ALGOBIT=y
+# CONFIG_I2C_ALGOPCF is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_ALI1535 is not set
+# CONFIG_I2C_ALI1563 is not set
+# CONFIG_I2C_ALI15X3 is not set
+# CONFIG_I2C_AMD756 is not set
+# CONFIG_I2C_AMD8111 is not set
+# CONFIG_I2C_I801 is not set
+# CONFIG_I2C_I810 is not set
+# CONFIG_I2C_ISA is not set
+CONFIG_I2C_IXP4XX=y
+# CONFIG_I2C_NFORCE2 is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_PIIX4 is not set
+# CONFIG_I2C_PROSAVAGE is not set
+# CONFIG_I2C_SAVAGE4 is not set
+# CONFIG_SCx200_ACB is not set
+# CONFIG_I2C_SIS5595 is not set
+# CONFIG_I2C_SIS630 is not set
+# CONFIG_I2C_SIS96X is not set
+# CONFIG_I2C_VIA is not set
+# CONFIG_I2C_VIAPRO is not set
+# CONFIG_I2C_VOODOO3 is not set
+
+#
+# Hardware Sensors Chip support
+#
+CONFIG_I2C_SENSOR=y
+# CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ASB100 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_FSCHER is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM75 is not set
+# CONFIG_SENSORS_LM78 is not set
+# CONFIG_SENSORS_LM80 is not set
+# CONFIG_SENSORS_LM83 is not set
+# CONFIG_SENSORS_LM85 is not set
+# CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_VIA686A is not set
+# CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83627HF is not set
+
+#
+# Other I2C Chip support
+#
+CONFIG_SENSORS_EEPROM=y
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+# CONFIG_EXT2_FS_SECURITY is not set
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_XATTR=y
+CONFIG_EXT3_FS_POSIX_ACL=y
+# CONFIG_EXT3_FS_SECURITY is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_QUOTA is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+# CONFIG_FAT_FS is not set
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_SYSFS=y
+# CONFIG_DEVFS_FS is not set
+# CONFIG_DEVPTS_FS_XATTR is not set
+CONFIG_TMPFS=y
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+# CONFIG_JFFS2_FS_NAND is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+# CONFIG_EXPORTFS is not set
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_INTERMEZZO_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_NEC98_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+# CONFIG_NLS is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Graphics support
+#
+# CONFIG_FB is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# Misc devices
+#
+
+#
+# USB support
+#
+# CONFIG_USB is not set
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# Kernel hacking
+#
+CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_USER is not set
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_WAITQ is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+# CONFIG_DEBUG_BDI2000_XSCALE is not set
+
+#
+# Security options
+#
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Library routines
+#
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
diff -Nru a/arch/arm/configs/smdk2410_defconfig b/arch/arm/configs/smdk2410_defconfig
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/arch/arm/configs/smdk2410_defconfig	Sun May 16 01:18:37 2004
@@ -0,0 +1,667 @@
+#
+# Automatically generated make config: don't edit
+#
+CONFIG_ARM=y
+CONFIG_MMU=y
+CONFIG_UID16=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_CLEAN_COMPILE=y
+CONFIG_STANDALONE=y
+CONFIG_BROKEN_ON_SMP=y
+
+#
+# General setup
+#
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_HOTPLUG is not set
+# CONFIG_IKCONFIG is not set
+# CONFIG_EMBEDDED is not set
+CONFIG_KALLSYMS=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+
+#
+# Loadable module support
+#
+# CONFIG_MODULES is not set
+
+#
+# System Type
+#
+# CONFIG_ARCH_ADIFCC is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_CAMELOT is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_IOP3XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_SHARK is not set
+CONFIG_ARCH_S3C2410=y
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_VERSATILE_PB is not set
+
+#
+# CLPS711X/EP721X Implementations
+#
+
+#
+# Epxa10db
+#
+
+#
+# Footbridge Implementations
+#
+
+#
+# IOP3xx Implementation Options
+#
+# CONFIG_ARCH_IOP310 is not set
+# CONFIG_ARCH_IOP321 is not set
+
+#
+# IOP3xx Chipset Features
+#
+
+#
+# Intel PXA250/210 Implementations
+#
+
+#
+# SA11x0 Implementations
+#
+
+#
+# TI OMAP Implementations
+#
+
+#
+# OMAP Core Type
+#
+
+#
+# OMAP Board Type
+#
+
+#
+# OMAP Feature Selections
+#
+
+#
+# S3C2410 Implementations
+#
+# CONFIG_ARCH_BAST is not set
+# CONFIG_ARCH_H1940 is not set
+CONFIG_ARCH_SMDK2410=y
+# CONFIG_MACH_VR1000 is not set
+
+#
+# LH7A40X Implementations
+#
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_ARM920T=y
+CONFIG_CPU_32v4=y
+CONFIG_CPU_ABRT_EV4T=y
+CONFIG_CPU_CACHE_V4WT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_TLB_V4WBI=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+
+#
+# General setup
+#
+# CONFIG_ZBOOT_ROM is not set
+CONFIG_ZBOOT_ROM_TEXT=0
+CONFIG_ZBOOT_ROM_BSS=0
+
+#
+# At least one math emulation must be selected
+#
+# CONFIG_FPE_NWFPE is not set
+# CONFIG_FPE_FASTFPE is not set
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=y
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Generic Driver Options
+#
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_PM is not set
+# CONFIG_PREEMPT is not set
+# CONFIG_ARTHUR is not set
+CONFIG_CMDLINE="root=1f04 mem=32M"
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_PARTITIONS is not set
+# CONFIG_MTD_CONCAT is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_EDB7312 is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLKMTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_SIZE=4096
+# CONFIG_BLK_DEV_INITRD is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Networking support
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_PACKET is not set
+# CONFIG_NETLINK_DEV is not set
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_IPV6 is not set
+# CONFIG_NETFILTER is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_FASTROUTE is not set
+# CONFIG_NET_HW_FLOWCONTROL is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+# CONFIG_MII is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_SCSI is not set
+
+#
+# Fusion MPT device support
+#
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_IEEE1394 is not set
+
+#
+# I2O device support
+#
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input I/O drivers
+#
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+CONFIG_SERIO=y
+# CONFIG_SERIO_I8042 is not set
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_CT82C710 is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=y
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_S3C2410=y
+CONFIG_SERIAL_S3C2410_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+# CONFIG_QIC02_TAPE is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_NVRAM is not set
+# CONFIG_RTC is not set
+# CONFIG_GEN_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_FTAPE is not set
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_JBD is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_MINIX_FS is not set
+CONFIG_ROMFS_FS=y
+# CONFIG_QUOTA is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+# CONFIG_FAT_FS is not set
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_SYSFS=y
+# CONFIG_DEVFS_FS is not set
+# CONFIG_DEVPTS_FS_XATTR is not set
+# CONFIG_TMPFS is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+# CONFIG_NFS_V3 is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+# CONFIG_EXPORTFS is not set
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_INTERMEZZO_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+# CONFIG_MSDOS_PARTITION is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_NEC98_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+# CONFIG_NLS is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Graphics support
+#
+CONFIG_FB=y
+CONFIG_FB_VIRTUAL=y
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+# CONFIG_MDA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_PCI_CONSOLE=y
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# Misc devices
+#
+
+#
+# USB support
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# Kernel hacking
+#
+CONFIG_FRAME_POINTER=y
+CONFIG_DEBUG_USER=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_WAITQ is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_DEBUG_ERRORS is not set
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+CONFIG_DEBUG_LL_PRINTK=y
+CONFIG_DEBUG_S3C2410_PORT=y
+CONFIG_DEBUG_S3C2410_UART=0
+
+#
+# Security options
+#
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Library routines
+#
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=y
diff -Nru a/arch/arm/kernel/bios32.c b/arch/arm/kernel/bios32.c
--- a/arch/arm/kernel/bios32.c	Sun May 16 01:18:34 2004
+++ b/arch/arm/kernel/bios32.c	Sun May 16 01:18:34 2004
@@ -156,6 +156,30 @@
 }
 
 /*
+ * Same as above. The PrPMC800 carrier board for the PrPMC1100 
+ * card maps the host-bridge @ 00:01:00 for some reason and it
+ * ends up getting scanned. Note that we only want to do this
+ * fixup when we find the IXP4xx on a PrPMC system, which is why
+ * we check the machine type. We could be running on a board
+ * with an IXP4xx target device and we don't want to kill the
+ * resources in that case.
+ */
+static void __devinit pci_fixup_prpmc1100(struct pci_dev *dev)
+{
+	int i;
+
+	if (machine_is_prpmc1100()) {
+		dev->class &= 0xff;
+		dev->class |= PCI_CLASS_BRIDGE_HOST << 8;
+		for (i = 0; i < PCI_NUM_RESOURCES; i++) {
+			dev->resource[i].start = 0;
+			dev->resource[i].end   = 0;
+			dev->resource[i].flags = 0;
+		}
+	}
+}
+
+/*
  * PCI IDE controllers use non-standard I/O port decoding, respect it.
  */
 static void __devinit pci_fixup_ide_bases(struct pci_dev *dev)
@@ -273,6 +297,10 @@
 		PCI_FIXUP_HEADER,
 		PCI_ANY_ID,		PCI_ANY_ID,
 		pci_fixup_ide_bases
+	}, {
+		PCI_FIXUP_HEADER,
+		PCI_VENDOR_ID_INTEL,	PCI_DEVICE_ID_INTEL_IXP4XX,
+		pci_fixup_prpmc1100
 	}, { 0 }
 };
 
diff -Nru a/arch/arm/kernel/debug.S b/arch/arm/kernel/debug.S
--- a/arch/arm/kernel/debug.S	Sun May 16 01:18:34 2004
+++ b/arch/arm/kernel/debug.S	Sun May 16 01:18:34 2004
@@ -465,13 +465,53 @@
 		beq	1001b
 		.endm
 
+#elif defined(CONFIG_ARCH_IXP4XX)
+
+                .macro  addruart,rx
+                mrc     p15, 0, \rx, c1, c0
+                tst     \rx, #1                 @ MMU enabled?
+                moveq   \rx, #0xc8000000
+                movne   \rx, #0xff000000
+                add     \rx,\rx,#3              @ Uart regs are at off set of 3 if
+						@ byte writes used - Big Endian.
+                .endm
+
+               .macro  senduart,rd,rx
+                strb    \rd, [\rx]
+                .endm
+
+                .macro  waituart,rd,rx
+1002:           ldrb    \rd, [\rx, #0x14]
+                and     \rd, \rd, #0x60		@ check THRE and TEMT bits
+                teq     \rd, #0x60
+                bne     1002b
+                .endm
+
+                .macro  busyuart,rd,rx
+                .endm
+
 #elif defined(CONFIG_ARCH_OMAP)
 
 #include <asm/arch/serial.h>
 
+#ifdef CONFIG_ARCH_OMAP730
+#define OMAP_SERIAL_REG_SHIFT	0
+#else
+#define OMAP_SERIAL_REG_SHIFT	2
+#endif
+		/* See also __create_page_tables in head.S */
 		.macro	addruart,rx
-		mov	\rx, #0xff000000
+		mrc	p15, 0, \rx, c1, c0
+		tst	\rx, #1			@ MMU enabled?
+		moveq	\rx, #0xff000000	@ physical base address
+		movne	\rx, #0xfe000000	@ virtual base
 		orr	\rx, \rx, #0x00fb0000
+#ifdef CONFIG_OMAP_LL_DEBUG_UART3
+		orr	\rx, \rx, #0x00009000	@ UART 3
+#endif
+#if defined(CONFIG_OMAP_LL_DEBUG_UART2) || defined(CONFIG_OMAP_LL_DEBUG_UART3)
+		orr	\rx, \rx, #0x00000800	@ UART 2 & 3
+#endif
 		.endm
 
 		.macro	senduart,rd,rx
@@ -486,9 +526,6 @@
 		.endm
 
 		.macro	waituart,rd,rx
-1001:		ldrb	\rd, [\rx, #(0x6 << OMAP_SERIAL_REG_SHIFT)]
-		tst	\rd, #0x10
-		beq	1001b
 		.endm
 
 #elif defined(CONFIG_ARCH_S3C2410)
@@ -551,7 +588,7 @@
 		.endm
 
 #elif defined(CONFIG_ARCH_LH7A40X)
-	@ It isn't known if this will be appropriate for every 40x
+	@ It is not known if this will be appropriate for every 40x
 	@ board.
 
 		.macro  addruart,rx
diff -Nru a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S
--- a/arch/arm/kernel/entry-armv.S	Sun May 16 01:18:34 2004
+++ b/arch/arm/kernel/entry-armv.S	Sun May 16 01:18:34 2004
@@ -623,10 +623,15 @@
 		.endm
 
 		.macro	get_irqnr_and_base, irqnr, irqstat, base, tmp
+#ifdef CONFIG_PXA27x
+		mrc	p6, 0, \irqstat, c0, c0, 0		@ ICIP
+		mrc	p6, 0, \irqnr, c1, c0, 0		@ ICMR
+#else
 		mov	\base, #io_p2v(0x40000000)	@ IIR Ctl = 0x40d00000
 		add	\base, \base, #0x00d00000
 		ldr	\irqstat, [\base, #0]		@ ICIP
 		ldr	\irqnr, [\base, #4]		@ ICMR
+#endif
 		ands	\irqnr, \irqstat, \irqnr
 		beq	1001f
 		rsb	\irqstat, \irqnr, #0
@@ -639,6 +644,34 @@
 		.macro	irq_prio_table
 		.endm
 
+#elif defined (CONFIG_ARCH_IXP4XX)
+
+		.macro	disable_fiq
+		.endm
+		
+		.macro	get_irqnr_and_base, irqnr, irqstat, base, tmp
+		ldr	\irqstat, =(IXP4XX_INTC_BASE_VIRT+IXP4XX_ICIP_OFFSET)
+		ldr	\irqstat, [\irqstat]		@ get interrupts
+		cmp	\irqstat, #0
+		beq	1002f
+		clz     \irqnr, \irqstat
+		mov     \base, #31
+		subs    \irqnr, \base, \irqnr
+		
+/*
+1001:		tst	\irqstat, #1
+		addeq	\irqnr, \irqnr, #1
+		moveq	\irqstat, \irqstat, lsr #1
+		tsteq	\irqnr, #32
+		beq	1001b
+		teq	\irqnr, #32
+*/
+1002:
+		.endm
+
+                .macro  irq_prio_table
+                .endm
+
 #elif defined(CONFIG_ARCH_OMAP)
 
 		.macro	disable_fiq
@@ -1219,7 +1252,7 @@
 
 /*
  * Register switch for ARMv3 and ARMv4 processors
- * r0 = previous thread_info, r1 = next thread_info
+ * r0 = previous task_struct, r1 = previous thread_info, r2 = next thread_info
  * previous and next are guaranteed not to be the same.
  */
 ENTRY(__switch_to)
diff -Nru a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c
--- a/arch/arm/kernel/process.c	Sun May 16 01:18:36 2004
+++ b/arch/arm/kernel/process.c	Sun May 16 01:18:36 2004
@@ -411,12 +411,6 @@
 	return do_fork(flags|CLONE_VM|CLONE_UNTRACED, 0, &regs, 0, NULL, NULL);
 }
 
-/*
- * These bracket the sleeping functions..
- */
-#define first_sched	((unsigned long) scheduling_functions_start_here)
-#define last_sched	((unsigned long) scheduling_functions_end_here)
-
 unsigned long get_wchan(struct task_struct *p)
 {
 	unsigned long fp, lr;
@@ -431,7 +425,7 @@
 		if (fp < stack_page || fp > 4092+stack_page)
 			return 0;
 		lr = pc_pointer (((unsigned long *)fp)[-1]);
-		if (lr < first_sched || lr > last_sched)
+		if (!in_sched_functions(lr))
 			return lr;
 		fp = *(unsigned long *) (fp - 12);
 	} while (count ++ < 16);
diff -Nru a/arch/arm/mach-ixp4xx/Kconfig b/arch/arm/mach-ixp4xx/Kconfig
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/arch/arm/mach-ixp4xx/Kconfig	Sun May 16 01:18:37 2004
@@ -0,0 +1,73 @@
+
+config ARCH_SUPPORTS_BIG_ENDIAN
+	bool
+	depends on ARCH_IXP4XX
+	default y
+
+menu "Intel IXP4xx Implementation Options"
+
+comment "IXP4xx Platforms"
+
+config ARCH_IXDP425
+	bool "Support for Intel IXDP425 (Richfield) Development Platform"
+	depends on ARCH_IXP4XX
+	help
+#
+# IXCDP1100 is the exact same HW as IXDP425, but with a different machine 
+# number from the bootloader due to marketing monkeys, so we just enable it 
+# by default if IXDP425 is enabled.
+#
+config ARCH_IXCDP1100
+	bool 
+	depends on ARCH_IXDP425
+	default y
+
+config ARCH_PRPMC1100
+	bool "Support for Motorola PrPMC 1100 Platform"
+	depends on ARCH_IXP4XX
+
+config ARCH_ADI_COYOTE
+	bool "Support for ADI Engineering Coyote Gateway Reference Platform"
+	depends on ARCH_IXP4XX
+
+config ARCH_AVILA
+	bool "Support for Gateworks Avila Network Platform"
+	depends on ARCH_IXP4XX
+
+#
+# Avila and IXDP share the same source for now. Will change in future
+#
+config	ARCH_IXDP4XX
+	bool
+	depends on ARCH_IXDP425 || ARCH_AVILA
+	default y
+
+comment "IXP4xx Options"
+
+config IXP4XX_INDIRECT_PCI
+	bool "Use indirect PCI memory access"
+	depends on ARCH_IXP4XX
+	help
+          IXP4xx provides two methods of accessing PCI memory space:
+
+          1) A direct mapped window from 0x48000000 to 0x4bffffff (64MB).
+             To access PCI via this space, we simply ioremap() the BAR
+             into the kernel and we can use the standard read[bwl]/write[bwl]
+             macros. This is the preffered method due to speed but it
+             limits the system to just 64MB of PCI memory. This can be 
+             problamatic if using video cards and other memory-heavy devices.
+          
+          2) If > 64MB of memory space is required, the IXP4xx can be 
+	     configured to use indirect registers to access PCI This allows 
+	     for up to 128MB (0x48000000 to 0x4fffffff) of memory on the bus. 
+	     The disadvantadge of this is that every PCI access requires 
+	     three local register accesses plus a spinlock, but in some 
+	     cases the performance hit is acceptable. In addition, you cannot 
+	     mmap() PCI devices in this case due to the indirect nature
+	     of the PCI window.
+
+	  By default, the direct method is used. Choose this option if you
+	  need to use the indirect method instead. If you don't know
+	  what you need, leave this option unselected.
+
+endmenu
diff -Nru a/arch/arm/mach-ixp4xx/Makefile b/arch/arm/mach-ixp4xx/Makefile
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/arch/arm/mach-ixp4xx/Makefile	Sun May 16 01:18:37 2004
@@ -0,0 +1,10 @@
+#
+# Makefile for the linux kernel.
+#
+
+obj-y	+= common.o common-pci.o 
+
+obj-$(CONFIG_ARCH_IXDP4XX)	+= ixdp425-pci.o ixdp425-setup.o
+obj-$(CONFIG_ARCH_ADI_COYOTE)	+= coyote-pci.o coyote-setup.o
+obj-$(CONFIG_ARCH_PRPMC1100)	+= prpmc1100-pci.o prpmc1100-setup.o
+
diff -Nru a/arch/arm/mach-ixp4xx/common-pci.c b/arch/arm/mach-ixp4xx/common-pci.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/arch/arm/mach-ixp4xx/common-pci.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,543 @@
+/*
+ * arch/arm/mach-ixp4xx/common-pci.c 
+ *
+ * IXP4XX PCI routines for all platforms
+ *
+ * Maintainer: Deepak Saxena <dsaxena@plexity.net>
+ *
+ * Copyright (C) 2002 Intel Corporation.
+ * Copyright (C) 2003 Greg Ungerer <gerg@snapgear.com>
+ * Copyright (C) 2003-2004 MontaVista Software, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+
+#include <linux/sched.h>
+#include <linux/kernel.h>
+#include <linux/pci.h>
+#include <linux/interrupt.h>
+#include <linux/mm.h>
+#include <linux/init.h>
+#include <linux/ioport.h>
+#include <linux/slab.h>
+#include <linux/delay.h>
+#include <linux/device.h>
+#include <asm/dma-mapping.h>
+
+#include <asm/io.h>
+#include <asm/irq.h>
+#include <asm/sizes.h>
+#include <asm/system.h>
+#include <asm/mach/pci.h>
+#include <asm/hardware.h>
+#include <asm/sizes.h>
+
+
+/*
+ * IXP4xx PCI read function is dependent on whether we are 
+ * running A0 or B0 (AppleGate) silicon.
+ */
+int (*ixp4xx_pci_read)(u32 addr, u32 cmd, u32* data);
+
+/*
+ * Base address for PCI regsiter region
+ */
+unsigned long ixp4xx_pci_reg_base = 0;
+
+/*
+ * PCI cfg an I/O routines are done by programming a 
+ * command/byte enable register, and then read/writing
+ * the data from a data regsiter. We need to ensure
+ * these transactions are atomic or we will end up
+ * with corrupt data on the bus or in a driver.
+ */
+static spinlock_t ixp4xx_pci_lock = SPIN_LOCK_UNLOCKED;
+
+/*
+ * Read from PCI config space
+ */
+static void crp_read(u32 ad_cbe, u32 *data)
+{
+	unsigned long flags;
+	spin_lock_irqsave(&ixp4xx_pci_lock, flags);
+	*PCI_CRP_AD_CBE = ad_cbe;
+	*data = *PCI_CRP_RDATA;
+	spin_unlock_irqrestore(&ixp4xx_pci_lock, flags);
+}
+
+/*
+ * Write to PCI config space
+ */
+static void crp_write(u32 ad_cbe, u32 data)
+{ 
+	unsigned long flags;
+	spin_lock_irqsave(&ixp4xx_pci_lock, flags);
+	*PCI_CRP_AD_CBE = CRP_AD_CBE_WRITE | ad_cbe;
+	*PCI_CRP_WDATA = data;
+	spin_unlock_irqrestore(&ixp4xx_pci_lock, flags);
+}
+
+static inline int check_master_abort(void)
+{
+	/* check Master Abort bit after access */
+	unsigned long isr = *PCI_ISR;
+
+	if (isr & PCI_ISR_PFE) {
+		/* make sure the Master Abort bit is reset */    
+		*PCI_ISR = PCI_ISR_PFE;
+		pr_debug("%s failed\n", __FUNCTION__);
+		return 1;
+	}
+
+	return 0;
+}
+
+int ixp4xx_pci_read_errata(u32 addr, u32 cmd, u32* data)
+{
+	unsigned long flags;
+	int retval = 0;
+	int i;
+
+	spin_lock_irqsave(&ixp4xx_pci_lock, flags);
+
+	*PCI_NP_AD = addr;
+
+	/* 
+	 * PCI workaround  - only works if NP PCI space reads have 
+	 * no side effects!!! Read 8 times. last one will be good.
+	 */
+	for (i = 0; i < 8; i++) {
+		*PCI_NP_CBE = cmd;
+		*data = *PCI_NP_RDATA;
+		*data = *PCI_NP_RDATA;
+	}
+
+	if(check_master_abort())
+		retval = 1;
+
+	spin_unlock_irqrestore(&ixp4xx_pci_lock, flags);
+	return retval;
+}
+
+int ixp4xx_pci_read_no_errata(u32 addr, u32 cmd, u32* data)
+{
+	unsigned long flags;
+	int retval = 0;
+
+	spin_lock_irqsave(&ixp4xx_pci_lock, flags);
+
+	*PCI_NP_AD = addr;
+
+	/* set up and execute the read */    
+	*PCI_NP_CBE = cmd;
+
+	/* the result of the read is now in NP_RDATA */
+	*data = *PCI_NP_RDATA; 
+
+	if(check_master_abort())
+		retval = 1;
+
+	spin_unlock_irqrestore(&ixp4xx_pci_lock, flags);
+	return retval;
+}
+
+int ixp4xx_pci_write(u32 addr, u32 cmd, u32 data)
+{    
+	unsigned long flags;
+	int retval = 0;
+
+	spin_lock_irqsave(&ixp4xx_pci_lock, flags);
+
+	*PCI_NP_AD = addr;
+
+	/* set up the write */
+	*PCI_NP_CBE = cmd;
+
+	/* execute the write by writing to NP_WDATA */
+	*PCI_NP_WDATA = data;
+
+	if(check_master_abort())
+		retval = 1;
+
+	spin_unlock_irqrestore(&ixp4xx_pci_lock, flags);
+	return retval;
+}
+
+static u32 ixp4xx_config_addr(u8 bus_num, u16 devfn, int where)
+{
+	u32 addr;
+	if (!bus_num) {
+		/* type 0 */
+		addr = BIT(32-PCI_SLOT(devfn)) | ((PCI_FUNC(devfn)) << 8) | 
+		    (where & ~3);	
+	} else {
+		/* type 1 */
+		addr = (bus_num << 16) | ((PCI_SLOT(devfn)) << 11) | 
+			((PCI_FUNC(devfn)) << 8) | (where & ~3) | 1;
+	}
+	return addr;
+}
+
+/*
+ * Mask table, bits to mask for quantity of size 1, 2 or 4 bytes.
+ * 0 and 3 are not valid indexes...
+ */
+static u32 bytemask[] = {
+	/*0*/	0,
+	/*1*/	0xff,
+	/*2*/	0xffff,
+	/*3*/	0,
+	/*4*/	0xffffffff,
+};
+
+static u32 local_byte_lane_enable_bits(u32 n, int size)
+{
+	if (size == 1)
+		return (0xf & ~BIT(n)) << CRP_AD_CBE_BESL;
+	if (size == 2)
+		return (0xf & ~(BIT(n) | BIT(n+1))) << CRP_AD_CBE_BESL;
+	if (size == 4)
+		return 0;
+	return 0xffffffff;
+}
+
+static int local_read_config(int where, int size, u32 *value)
+{ 
+	u32 n, data;
+	pr_debug("local_read_config from %d size %d\n", where, size);
+	n = where % 4;
+	crp_read(where & ~3, &data);
+	*value = (data >> (8*n)) & bytemask[size];
+	pr_debug("local_read_config read %#x\n", *value);
+	return PCIBIOS_SUCCESSFUL;
+}
+
+static int local_write_config(int where, int size, u32 value)
+{
+	u32 n, byte_enables, data;
+	pr_debug("local_write_config %#x to %d size %d\n", value, where, size);
+	n = where % 4;
+	byte_enables = local_byte_lane_enable_bits(n, size);
+	if (byte_enables == 0xffffffff)
+		return PCIBIOS_BAD_REGISTER_NUMBER;
+	data = value << (8*n);
+	crp_write((where & ~3) | byte_enables, data);
+	return PCIBIOS_SUCCESSFUL;
+}
+
+static u32 byte_lane_enable_bits(u32 n, int size)
+{
+	if (size == 1)
+		return (0xf & ~BIT(n)) << 4;
+	if (size == 2)
+		return (0xf & ~(BIT(n) | BIT(n+1))) << 4;
+	if (size == 4)
+		return 0;
+	return 0xffffffff;
+}
+
+static int read_config(u8 bus_num, u16 devfn, int where, int size, u32 *value)
+{
+	u32 n, byte_enables, addr, data;
+
+	pr_debug("read_config from %d size %d dev %d:%d:%d\n", where, size,
+		bus_num, PCI_SLOT(devfn), PCI_FUNC(devfn));
+
+	*value = 0xffffffff;
+	n = where % 4;
+	byte_enables = byte_lane_enable_bits(n, size);
+	if (byte_enables == 0xffffffff)
+		return PCIBIOS_BAD_REGISTER_NUMBER;
+
+	addr = ixp4xx_config_addr(bus_num, devfn, where);
+	if (ixp4xx_pci_read(addr, byte_enables | NP_CMD_CONFIGREAD, &data))
+		return PCIBIOS_DEVICE_NOT_FOUND;
+
+	*value = (data >> (8*n)) & bytemask[size];
+	pr_debug("read_config_byte read %#x\n", *value);
+	return PCIBIOS_SUCCESSFUL;
+}
+
+static int write_config(u8 bus_num, u16 devfn, int where, int size, u32 value)
+{
+	u32 n, byte_enables, addr, data;
+
+	pr_debug("write_config_byte %#x to %d size %d dev %d:%d:%d\n", value, where,
+		size, bus_num, PCI_SLOT(devfn), PCI_FUNC(devfn));
+
+	n = where % 4;
+	byte_enables = byte_lane_enable_bits(n, size);
+	if (byte_enables == 0xffffffff)
+		return PCIBIOS_BAD_REGISTER_NUMBER;
+
+	addr = ixp4xx_config_addr(bus_num, devfn, where);
+	data = value << (8*n);
+	if (ixp4xx_pci_write(addr, byte_enables | NP_CMD_CONFIGWRITE, data))
+		return PCIBIOS_DEVICE_NOT_FOUND;
+
+	return PCIBIOS_SUCCESSFUL;
+}
+
+/*
+ *	Generalized PCI config access functions.
+ */
+static int ixp4xx_read_config(struct pci_bus *bus, unsigned int devfn,
+	int where, int size, u32 *value)
+{
+	if (bus->number && !PCI_SLOT(devfn))
+		return local_read_config(where, size, value);
+	return read_config(bus->number, devfn, where, size, value);
+}
+
+static int ixp4xx_write_config(struct pci_bus *bus, unsigned int devfn,
+	int where, int size, u32 value)
+{
+	if (bus->number && !PCI_SLOT(devfn))
+		return local_write_config(where, size, value);
+	return write_config(bus->number, devfn, where, size, value);
+}
+
+struct pci_ops ixp4xx_ops = {
+	.read =  ixp4xx_read_config,
+	.write = ixp4xx_write_config,
+};
+
+
+/*
+ * PCI abort handler
+ */
+static int abort_handler(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
+{
+	u32 isr, status;
+
+	isr = *PCI_ISR;
+	local_read_config(PCI_STATUS, 2, &status);
+	pr_debug("PCI: abort_handler addr = %#lx, isr = %#x, "
+		"status = %#x\n", addr, isr, status);
+
+	/* make sure the Master Abort bit is reset */    
+	*PCI_ISR = PCI_ISR_PFE;
+	status |= PCI_STATUS_REC_MASTER_ABORT;
+	local_write_config(PCI_STATUS, 2, status);
+
+	/*
+	 * If it was an imprecise abort, then we need to correct the
+	 * return address to be _after_ the instruction.
+	 */
+	if (fsr & (1 << 10))
+		regs->ARM_pc += 4;
+
+	return 0;
+}
+
+
+/*
+ * Setup DMA mask to 64MB on PCI devices. Ignore all other devices.
+ */
+static int ixp4xx_pci_platform_notify(struct device *dev)
+{
+	if(dev->bus == &pci_bus_type) {
+		*dev->dma_mask =  SZ_64M - 1;
+		dev->coherent_dma_mask = SZ_64M - 1;
+		dmabounce_register_dev(dev, 2048, 4096);
+	}
+	return 0;
+}
+
+static int ixp4xx_pci_platform_notify_remove(struct device *dev)
+{
+	if(dev->bus == &pci_bus_type) {
+		dmabounce_unregister_dev(dev);
+	}
+	return 0;
+}
+
+int dma_needs_bounce(struct device *dev, dma_addr_t dma_addr, size_t size)
+{
+	return (dev->bus == &pci_bus_type ) && ((dma_addr + size) >= SZ_64M);
+}
+
+void __init ixp4xx_pci_preinit(void)
+{  
+	unsigned long processor_id;
+
+	asm("mrc p15, 0, %0, cr0, cr0, 0;" : "=r"(processor_id) :);
+
+	/*
+	 * Determine which PCI read method to use
+	 */
+	if (!(processor_id & 0xf)) {
+		printk("PCI: IXP4xx A0 silicon detected - "
+			"PCI Non-Prefetch Workaround Enabled\n");
+		ixp4xx_pci_read = ixp4xx_pci_read_errata;
+	} else
+		ixp4xx_pci_read = ixp4xx_pci_read_no_errata;
+
+
+	/* hook in our fault handler for PCI errors */
+	hook_fault_code(16+6, abort_handler, SIGBUS, "imprecise external abort");
+
+	pr_debug("setup PCI-AHB(inbound) and AHB-PCI(outbound) address mappings\n");
+
+	/* 
+	 * We use identity AHB->PCI address translation
+	 * in the 0x48000000 to 0x4bffffff address space
+	 */
+	*PCI_PCIMEMBASE = 0x48494A4B;
+
+	/* 
+	 * We also use identity PCI->AHB address translation
+	 * in 4 16MB BARs that begin at the physical memory start
+	 */
+	*PCI_AHBMEMBASE = (PHYS_OFFSET & 0xFF000000) + 
+		((PHYS_OFFSET & 0xFF000000) >> 8) +
+		((PHYS_OFFSET & 0xFF000000) >> 16) +
+		((PHYS_OFFSET & 0xFF000000) >> 24) +
+		0x00010203;
+
+	if (*PCI_CSR & PCI_CSR_HOST) {
+		printk("PCI: IXP4xx is host\n");
+
+		pr_debug("setup BARs in controller\n");
+
+		/*
+		 * We configure the PCI inbound memory windows to be 
+		 * 1:1 mapped to SDRAM
+		 */
+		local_write_config(PCI_BASE_ADDRESS_0, 4, PHYS_OFFSET + 0x00000000);
+		local_write_config(PCI_BASE_ADDRESS_1, 4, PHYS_OFFSET + 0x01000000);
+		local_write_config(PCI_BASE_ADDRESS_2, 4, PHYS_OFFSET + 0x02000000);
+		local_write_config(PCI_BASE_ADDRESS_3, 4, PHYS_OFFSET + 0x03000000);
+
+		/*
+		 * Enable CSR window at 0xff000000.
+		 */
+		local_write_config(PCI_BASE_ADDRESS_4, 4, 0xff000008);
+
+		/*
+		 * Enable the IO window to be way up high, at 0xfffffc00
+		 */
+		local_write_config(PCI_BASE_ADDRESS_5, 4, 0xfffffc01);
+	} else {
+		printk("PCI: IXP4xx is target - No bus scan performed\n");
+	}
+
+	printk("PCI: IXP4xx Using %s access for memory space\n",
+#ifndef CONFIG_IXP4XX_INDIRECT_PCI
+			"direct"
+#else
+			"indirect"
+#endif
+		);
+
+	pr_debug("clear error bits in ISR\n");
+	*PCI_ISR = PCI_ISR_PSE | PCI_ISR_PFE | PCI_ISR_PPE | PCI_ISR_AHBE;
+
+	/*
+	 * Set Initialize Complete in PCI Control Register: allow IXP4XX to
+	 * respond to PCI configuration cycles. Specify that the AHB bus is
+	 * operating in big endian mode. Set up byte lane swapping between 
+	 * little-endian PCI and the big-endian AHB bus 
+	 */
+#ifdef __ARMEB__
+	*PCI_CSR = PCI_CSR_IC | PCI_CSR_ABE | PCI_CSR_PDS | PCI_CSR_ADS;
+#else
+	*PCI_CSR = PCI_CSR_IC;
+#endif
+
+	pr_debug("DONE\n");
+}
+
+int ixp4xx_setup(int nr, struct pci_sys_data *sys)
+{
+	struct resource *res;
+
+	if (nr >= 1)
+		return 0;
+
+	res = kmalloc(sizeof(*res) * 2, GFP_KERNEL);
+	if (res == NULL) {
+		/* 
+		 * If we're out of memory this early, something is wrong,
+		 * so we might as well catch it here.
+		 */
+		panic("PCI: unable to allocate resources?\n");
+	}
+	memset(res, 0, sizeof(*res) * 2);
+
+	local_write_config(PCI_COMMAND, 2, PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY);
+
+	res[0].name = "PCI I/O Space";
+	res[0].start = 0x00001000;
+	res[0].end = 0xffff0000;
+	res[0].flags = IORESOURCE_IO;
+
+	res[1].name = "PCI Memory Space";
+	res[1].start = 0x48000000;
+#ifndef CONFIG_IXP4XX_INDIRECT_PCI
+	res[1].end = 0x4bffffff;
+#else
+	res[1].end = 0x4fffffff;
+#endif
+	res[1].flags = IORESOURCE_MEM;
+
+	request_resource(&ioport_resource, &res[0]);
+	request_resource(&iomem_resource, &res[1]);
+
+	sys->resource[0] = &res[0];
+	sys->resource[1] = &res[1];
+	sys->resource[2] = NULL;
+
+	platform_notify = ixp4xx_pci_platform_notify;
+	platform_notify_remove = ixp4xx_pci_platform_notify_remove;
+
+	return 1;
+}
+
+struct pci_bus *ixp4xx_scan_bus(int nr, struct pci_sys_data *sys)
+{
+	return pci_scan_bus(sys->busnr, &ixp4xx_ops, sys);
+}
+
+/*
+ * We override these so we properly do dmabounce otherwise drivers
+ * are able to set the dma_mask to 0xffffffff and we can no longer
+ * trap bounces. :(
+ *
+ * We just return true on everyhing except for < 64MB in which case 
+ * we will fail miseralby and die since we can't handle that case.
+ */
+int
+pci_set_dma_mask(struct pci_dev *dev, u64 mask)
+{
+	if (mask >= SZ_64M - 1 )
+		return 0;
+
+	return -EIO;
+}
+    
+int
+pci_dac_set_dma_mask(struct pci_dev *dev, u64 mask)
+{
+	if (mask >= SZ_64M - 1 )
+		return 0;
+
+	return -EIO;
+}
+
+int
+pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask)
+{
+	if (mask >= SZ_64M - 1 )
+		return 0;
+
+	return -EIO;
+}
+
+EXPORT_SYMBOL(pci_set_dma_mask);
+EXPORT_SYMBOL(pci_dac_set_dma_mask);
+EXPORT_SYMBOL(pci_set_consistent_dma_mask);
+
diff -Nru a/arch/arm/mach-ixp4xx/common.c b/arch/arm/mach-ixp4xx/common.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/arch/arm/mach-ixp4xx/common.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,264 @@
+/*
+ * arch/arm/mach-ixp4xx/common.c
+ *
+ * Generic code shared across all IXP4XX platforms
+ *
+ * Maintainer: Deepak Saxena <dsaxena@plexity.net>
+ *
+ * Copyright 2002 (c) Intel Corporation
+ * Copyright 2003-2004 (c) MontaVista, Software, Inc. 
+ * 
+ * This file is licensed under  the terms of the GNU General Public 
+ * License version 2. This program is licensed "as is" without any 
+ * warranty of any kind, whether express or implied.
+ */
+
+#include <linux/config.h>
+#include <linux/kernel.h>
+#include <linux/mm.h>
+#include <linux/init.h>
+#include <linux/serial.h>
+#include <linux/sched.h>
+#include <linux/tty.h>
+#include <linux/serial_core.h>
+#include <linux/bootmem.h>
+#include <linux/interrupt.h>
+#include <linux/bitops.h>
+#include <linux/time.h>
+#include <linux/timex.h>
+
+#include <asm/hardware.h>
+#include <asm/uaccess.h>
+#include <asm/io.h>
+#include <asm/mach-types.h>
+#include <asm/pgtable.h>
+#include <asm/page.h>
+#include <asm/irq.h>
+
+#include <asm/mach/map.h>
+#include <asm/mach/irq.h>
+
+
+/*************************************************************************
+ * GPIO acces functions
+ *************************************************************************/
+
+/*
+ * Configure GPIO line for input, interrupt, or output operation
+ *
+ * TODO: Enable/disable the irq_desc based on interrupt or output mode.
+ * TODO: Should these be named ixp4xx_gpio_?
+ */
+void gpio_line_config(u8 line, u32 style)
+{
+	u32 enable;
+	volatile u32 *int_reg;
+	u32 int_style;
+
+	enable = *IXP4XX_GPIO_GPOER;
+
+	if (style & IXP4XX_GPIO_OUT) {
+		enable &= ~((1) << line);
+	} else if (style & IXP4XX_GPIO_IN) {
+		enable |= ((1) << line);
+
+		switch (style & IXP4XX_GPIO_INTSTYLE_MASK)
+		{
+		case (IXP4XX_GPIO_ACTIVE_HIGH):
+			int_style = IXP4XX_GPIO_STYLE_ACTIVE_HIGH;
+			break;
+		case (IXP4XX_GPIO_ACTIVE_LOW):
+			int_style = IXP4XX_GPIO_STYLE_ACTIVE_LOW;
+			break;
+		case (IXP4XX_GPIO_RISING_EDGE):
+			int_style = IXP4XX_GPIO_STYLE_RISING_EDGE;
+			break;
+		case (IXP4XX_GPIO_FALLING_EDGE):
+			int_style = IXP4XX_GPIO_STYLE_FALLING_EDGE;
+			break;
+		case (IXP4XX_GPIO_TRANSITIONAL):
+			int_style = IXP4XX_GPIO_STYLE_TRANSITIONAL;
+			break;
+		default:
+			int_style = IXP4XX_GPIO_STYLE_ACTIVE_HIGH;
+			break;
+		}
+
+		if (line >= 8) {	/* pins 8-15 */ 
+			line -= 8;
+			int_reg = IXP4XX_GPIO_GPIT2R;
+		}
+		else {			/* pins 0-7 */
+			int_reg = IXP4XX_GPIO_GPIT1R;
+		}
+
+		/* Clear the style for the appropriate pin */
+		*int_reg &= ~(IXP4XX_GPIO_STYLE_CLEAR << 
+		    		(line * IXP4XX_GPIO_STYLE_SIZE));
+
+		/* Set the new style */
+		*int_reg |= (int_style << (line * IXP4XX_GPIO_STYLE_SIZE));
+	}
+
+	*IXP4XX_GPIO_GPOER = enable;
+}
+
+EXPORT_SYMBOL(gpio_line_config);
+
+/*************************************************************************
+ * IXP4xx chipset I/O mapping
+ *************************************************************************/
+static struct map_desc ixp4xx_io_desc[] __initdata = {
+	{	/* UART, Interrupt ctrl, GPIO, timers, NPEs, MACs, USB .... */
+		.virtual	= IXP4XX_PERIPHERAL_BASE_VIRT,
+		.physical	= IXP4XX_PERIPHERAL_BASE_PHYS,
+		.length		= IXP4XX_PERIPHERAL_REGION_SIZE,
+		.type		= MT_DEVICE
+	}, {	/* Expansion Bus Config Registers */
+		.virtual	= IXP4XX_EXP_CFG_BASE_VIRT,
+		.physical	= IXP4XX_EXP_CFG_BASE_PHYS,
+		.length		= IXP4XX_EXP_CFG_REGION_SIZE,
+		.type		= MT_DEVICE
+	}, {	/* PCI Registers */
+		.virtual	= IXP4XX_PCI_CFG_BASE_VIRT,
+		.physical	= IXP4XX_PCI_CFG_BASE_PHYS,
+		.length		= IXP4XX_PCI_CFG_REGION_SIZE,
+		.type		= MT_DEVICE
+	}
+};
+
+void __init ixp4xx_map_io(void)
+{
+  	iotable_init(ixp4xx_io_desc, ARRAY_SIZE(ixp4xx_io_desc));
+}
+
+
+/*************************************************************************
+ * IXP4xx chipset IRQ handling
+ *
+ * TODO: GPIO IRQs should be marked invalid until the user of the IRQ
+ *       (be it PCI or something else) configures that GPIO line
+ *       as an IRQ. Also, we should use a different chip structure for 
+ *       level-based GPIO vs edge-based GPIO. Currently nobody needs this as 
+ *       all HW that's publically available uses level IRQs, so we'll
+ *       worry about it if/when we have HW to test.
+ **************************************************************************/
+static void ixp4xx_irq_mask(unsigned int irq)
+{
+	*IXP4XX_ICMR &= ~(1 << irq);
+}
+
+static void ixp4xx_irq_mask_ack(unsigned int irq)
+{
+	ixp4xx_irq_mask(irq);
+}
+
+static void ixp4xx_irq_unmask(unsigned int irq)
+{
+	static int irq2gpio[NR_IRQS] = {
+		-1, -1, -1, -1, -1, -1,  0,  1,
+		-1, -1, -1, -1, -1, -1, -1, -1,
+		-1, -1, -1,  2,  3,  4,  5,  6,
+		 7,  8,  9, 10, 11, 12, -1, -1,
+	};
+	int line = irq2gpio[irq];
+
+	/*
+	 * This only works for LEVEL gpio IRQs as per the IXP4xx developer's
+	 * manual. If edge-triggered, need to move it to the mask_ack.
+	 * Nobody seems to be using the edge-triggered mode on the GPIOs. 
+	 */
+	if (line > 0)
+		gpio_line_isr_clear(line);
+
+	*IXP4XX_ICMR |= (1 << irq);
+}
+
+static struct irqchip ixp4xx_irq_chip = {
+	.ack	= ixp4xx_irq_mask_ack,
+	.mask	= ixp4xx_irq_mask,
+	.unmask	= ixp4xx_irq_unmask,
+};
+
+void __init ixp4xx_init_irq(void)
+{
+	int i = 0;
+
+	/* Route all sources to IRQ instead of FIQ */
+	*IXP4XX_ICLR = 0x0;
+
+	/* Disable all interrupt */
+	*IXP4XX_ICMR = 0x0; 
+
+	for(i = 0; i < NR_IRQS; i++)
+	{
+		set_irq_chip(i, &ixp4xx_irq_chip);
+		set_irq_handler(i, do_level_IRQ);
+		set_irq_flags(i, IRQF_VALID);
+	}
+}
+
+
+/*************************************************************************
+ * IXP4xx timer tick
+ * We use OS timer1 on the CPU for the timer tick and the timestamp 
+ * counter as a source of real clock ticks to account for missed jiffies.
+ *************************************************************************/
+
+static unsigned volatile last_jiffy_time;
+
+#define CLOCK_TICKS_PER_USEC	(CLOCK_TICK_RATE / USEC_PER_SEC)
+
+/* IRQs are disabled before entering here from do_gettimeofday() */
+static unsigned long ixp4xx_gettimeoffset(void)
+{
+	u32 elapsed;
+
+	elapsed = *IXP4XX_OSTS - last_jiffy_time;
+
+	return elapsed / CLOCK_TICKS_PER_USEC;
+}
+
+static irqreturn_t ixp4xx_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+{
+	/* Clear Pending Interrupt by writing '1' to it */
+	*IXP4XX_OSST = IXP4XX_OSST_TIMER_1_PEND;
+
+	/*
+	 * Catch up with the real idea of time
+	 */
+	do {	
+		do_timer(regs);
+		last_jiffy_time += LATCH;
+	} while((*IXP4XX_OSTS - last_jiffy_time) > LATCH);
+
+	return IRQ_HANDLED;
+}
+
+extern unsigned long (*gettimeoffset)(void);
+
+static struct irqaction timer_irq = {
+	.name	= "IXP4xx Timer Tick",
+	.flags	= SA_INTERRUPT
+};
+
+void __init time_init(void)
+{
+	gettimeoffset = ixp4xx_gettimeoffset;
+	timer_irq.handler = ixp4xx_timer_interrupt;
+
+	/* Clear Pending Interrupt by writing '1' to it */
+	*IXP4XX_OSST = IXP4XX_OSST_TIMER_1_PEND;
+
+	/* Setup the Timer counter value */
+	*IXP4XX_OSRT1 = (LATCH & ~IXP4XX_OST_RELOAD_MASK) | IXP4XX_OST_ENABLE;
+
+	/* Reset time-stamp counter */
+	*IXP4XX_OSTS = 0;
+	last_jiffy_time = 0;
+
+	/* Connect the interrupt handler and enable the interrupt */
+	setup_irq(IRQ_IXP4XX_TIMER1, &timer_irq);
+}
+
+
diff -Nru a/arch/arm/mach-ixp4xx/coyote-pci.c b/arch/arm/mach-ixp4xx/coyote-pci.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/arch/arm/mach-ixp4xx/coyote-pci.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,69 @@
+/*
+ * arch/arch/mach-ixp4xx/coyote-pci.c
+ *
+ * PCI setup routines for ADI Engineering Coyote platform
+ *
+ * Copyright (C) 2002 Jungo Software Technologies.
+ * Copyright (C) 2003 MontaVista Softwrae, Inc.
+ *
+ * Maintainer: Deepak Saxena <dsaxena@mvista.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+
+#include <linux/pci.h>
+#include <linux/init.h>
+
+#include <asm/mach-types.h>
+#include <asm/hardware.h>
+#include <asm/irq.h>
+
+#include <asm/mach/pci.h>
+
+extern void ixp4xx_pci_preinit(void);
+extern int ixp4xx_setup(int nr, struct pci_sys_data *sys);
+extern struct pci_bus *ixp4xx_scan_bus(int nr, struct pci_sys_data *sys);
+
+void __init coyote_pci_preinit(void)
+{
+	gpio_line_config(COYOTE_PCI_SLOT0_PIN,
+			IXP4XX_GPIO_IN | IXP4XX_GPIO_ACTIVE_LOW);
+
+	gpio_line_config(COYOTE_PCI_SLOT1_PIN,
+			IXP4XX_GPIO_IN | IXP4XX_GPIO_ACTIVE_LOW);
+
+	gpio_line_isr_clear(COYOTE_PCI_SLOT0_PIN);
+	gpio_line_isr_clear(COYOTE_PCI_SLOT1_PIN);
+
+	ixp4xx_pci_preinit();
+}
+
+static int __init coyote_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+{
+	if (slot == COYOTE_PCI_SLOT0_DEVID)
+		return IRQ_COYOTE_PCI_SLOT0;
+	else if (slot == COYOTE_PCI_SLOT1_DEVID)
+		return IRQ_COYOTE_PCI_SLOT1;
+	else return -1;
+}
+
+struct hw_pci coyote_pci __initdata = {
+	.nr_controllers = 1,
+	.preinit =        coyote_pci_preinit,
+	.swizzle =        pci_std_swizzle,
+	.setup =          ixp4xx_setup,
+	.scan =           ixp4xx_scan_bus,
+	.map_irq =        coyote_map_irq,
+};
+
+int __init coyote_pci_init(void)
+{
+	if (machine_is_adi_coyote())
+		pci_common_init(&coyote_pci);
+	return 0;
+}
+
+subsys_initcall(coyote_pci_init);
diff -Nru a/arch/arm/mach-ixp4xx/coyote-setup.c b/arch/arm/mach-ixp4xx/coyote-setup.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/arch/arm/mach-ixp4xx/coyote-setup.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,90 @@
+/*
+ * arch/arm/mach-ixp4xx/coyote-setup.c
+ *
+ * ADI Engineering Coyote board-setup 
+ *
+ * Copyright (C) 2003-2004 MontaVista Software, Inc.
+ *
+ * Author: Deepak Saxena <dsaxena@plexity.net>
+ */
+
+#include <linux/init.h>
+#include <linux/device.h>
+#include <linux/serial.h>
+#include <linux/tty.h>
+#include <linux/serial_core.h>
+
+#include <asm/types.h>
+#include <asm/setup.h>
+#include <asm/memory.h>
+#include <asm/hardware.h>
+#include <asm/irq.h>
+#include <asm/mach-types.h>
+#include <asm/mach/arch.h>
+#include <asm/mach/flash.h>
+
+#ifdef	__ARMEB__
+#define	REG_OFFSET	3
+#else
+#define	REG_OFFSET	0
+#endif
+
+/*
+ * Only one serial port is connected on the Coyote.
+ */
+static struct uart_port coyote_serial_port = {
+	.membase	= (char*)(IXP4XX_UART2_BASE_VIRT + REG_OFFSET),
+	.mapbase	= (IXP4XX_UART2_BASE_PHYS),
+	.irq		= IRQ_IXP4XX_UART2,
+	.flags		= UPF_SKIP_TEST,
+	.iotype		= UPIO_MEM,	
+	.regshift	= 2,
+	.uartclk	= IXP4XX_UART_XTAL,
+	.line		= 0,
+	.type		= PORT_XSCALE,
+	.fifosize	= 32
+};
+
+void __init coyote_map_io(void)
+{
+	early_serial_setup(&coyote_serial_port);
+
+	ixp4xx_map_io();
+}
+
+static struct flash_platform_data coyote_flash_data = {
+	.map_name	= "cfi_probe",
+	.width		= 2,
+};
+
+static struct resource coyote_flash_resource = {
+	.start		= COYOTE_FLASH_BASE,
+	.end		= COYOTE_FLASH_BASE + COYOTE_FLASH_SIZE,
+	.flags		= IORESOURCE_MEM,
+};
+
+static struct platform_device coyote_flash_device = {
+	.name		= "IXP4XX-Flash",
+	.id		= 0,
+	.dev		= {
+		.platform_data = &coyote_flash_data,
+	},
+	.num_resources	= 1,
+	.resource	= &coyote_flash_resource,
+};
+
+static void __init coyote_init(void)
+{
+	platform_add_device(&coyote_flash_device);
+}
+
+MACHINE_START(ADI_COYOTE, "ADI Engineering IXP4XX Coyote Development Platform")
+        MAINTAINER("MontaVista Software, Inc.")
+        BOOT_MEM(PHYS_OFFSET, IXP4XX_PERIPHERAL_BASE_PHYS,
+                IXP4XX_PERIPHERAL_BASE_VIRT)
+        MAPIO(coyote_map_io)
+        INITIRQ(ixp4xx_init_irq)
+        BOOT_PARAMS(0x0100)
+	INIT_MACHINE(coyote_init)
+MACHINE_END
+
diff -Nru a/arch/arm/mach-ixp4xx/ixdp425-pci.c b/arch/arm/mach-ixp4xx/ixdp425-pci.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/arch/arm/mach-ixp4xx/ixdp425-pci.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,84 @@
+/*
+ * arch/arm/mach-ixp4xx/ixdp425-pci.c 
+ *
+ * IXDP425 board-level PCI initialization
+ *
+ * Copyright (C) 2002 Intel Corporation.
+ * Copyright (C) 2003-2004 MontaVista Software, Inc.
+ *
+ * Maintainer: Deepak Saxena <dsaxena@plexity.net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+
+#include <linux/config.h>
+#include <linux/pci.h>
+#include <linux/init.h>
+#include <linux/delay.h>
+
+#include <asm/mach/pci.h>
+#include <asm/irq.h>
+#include <asm/hardware.h>
+#include <asm/mach-types.h>
+
+void __init ixdp425_pci_preinit(void)
+{
+	gpio_line_config(IXDP425_PCI_INTA_PIN,
+				IXP4XX_GPIO_IN | IXP4XX_GPIO_ACTIVE_LOW);
+	gpio_line_config(IXDP425_PCI_INTB_PIN, 
+				IXP4XX_GPIO_IN | IXP4XX_GPIO_ACTIVE_LOW);
+	gpio_line_config(IXDP425_PCI_INTC_PIN, 
+				IXP4XX_GPIO_IN | IXP4XX_GPIO_ACTIVE_LOW);
+	gpio_line_config(IXDP425_PCI_INTD_PIN, 
+				IXP4XX_GPIO_IN | IXP4XX_GPIO_ACTIVE_LOW);
+
+	gpio_line_isr_clear(IXDP425_PCI_INTA_PIN);
+	gpio_line_isr_clear(IXDP425_PCI_INTB_PIN);
+	gpio_line_isr_clear(IXDP425_PCI_INTC_PIN);
+	gpio_line_isr_clear(IXDP425_PCI_INTD_PIN);
+
+	ixp4xx_pci_preinit();
+}
+
+static int __init ixdp425_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+{
+	static int pci_irq_table[IXDP425_PCI_IRQ_LINES] = {
+		IRQ_IXDP425_PCI_INTA,
+		IRQ_IXDP425_PCI_INTB,
+		IRQ_IXDP425_PCI_INTC,
+		IRQ_IXDP425_PCI_INTD
+	};
+
+	int irq = -1;
+
+	if (slot >= 1 && slot <= IXDP425_PCI_MAX_DEV && 
+		pin >= 1 && pin <= IXDP425_PCI_IRQ_LINES) {
+		irq = pci_irq_table[(slot + pin - 2) % 4];
+	}
+
+	return irq;
+}
+
+struct hw_pci ixdp425_pci __initdata = {
+	.nr_controllers = 1,
+	.preinit	= ixdp425_pci_preinit,
+	.swizzle	= pci_std_swizzle,
+	.setup		= ixp4xx_setup,
+	.scan		= ixp4xx_scan_bus,
+	.map_irq	= ixdp425_map_irq,
+};
+
+int __init ixdp425_pci_init(void)
+{
+	if (machine_is_ixdp425() || 
+		machine_is_ixcdp1100() || 
+		machine_is_avila())
+		pci_common_init(&ixdp425_pci);
+	return 0;
+}
+
+subsys_initcall(ixdp425_pci_init);
+
diff -Nru a/arch/arm/mach-ixp4xx/ixdp425-setup.c b/arch/arm/mach-ixp4xx/ixdp425-setup.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/arch/arm/mach-ixp4xx/ixdp425-setup.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,147 @@
+/*
+ * arch/arm/mach-ixp4xx/ixdp425-setup.c
+ *
+ * IXDP425/IXCDP1100 board-setup 
+ *
+ * Copyright (C) 2003-2004 MontaVista Software, Inc.
+ *
+ * Author: Deepak Saxena <dsaxena@plexity.net>
+ */
+
+#include <linux/init.h>
+#include <linux/device.h>
+#include <linux/serial.h>
+#include <linux/tty.h>
+#include <linux/serial_core.h>
+
+#include <asm/types.h>
+#include <asm/setup.h>
+#include <asm/memory.h>
+#include <asm/hardware.h>
+#include <asm/mach-types.h>
+#include <asm/irq.h>
+#include <asm/mach/arch.h>
+#include <asm/mach/flash.h>
+
+#ifdef	__ARMEB__
+#define	REG_OFFSET	3
+#else
+#define	REG_OFFSET	0
+#endif
+
+/*
+ * IXDP425 uses both chipset serial ports
+ */
+static struct uart_port ixdp425_serial_ports[] = {
+	{
+		.membase	= (char*)(IXP4XX_UART1_BASE_VIRT + REG_OFFSET),
+		.mapbase	= (IXP4XX_UART1_BASE_PHYS),
+		.irq		= IRQ_IXP4XX_UART1,
+		.flags		= UPF_SKIP_TEST,
+		.iotype		= UPIO_MEM,	
+		.regshift	= 2,
+		.uartclk	= IXP4XX_UART_XTAL,
+		.line		= 0,
+		.type		= PORT_XSCALE,
+		.fifosize	= 32
+	} , {
+		.membase	= (char*)(IXP4XX_UART2_BASE_VIRT + REG_OFFSET),
+		.mapbase	= (IXP4XX_UART2_BASE_PHYS),
+		.irq		= IRQ_IXP4XX_UART2,
+		.flags		= UPF_SKIP_TEST,
+		.iotype		= UPIO_MEM,	
+		.regshift	= 2,
+		.uartclk	= IXP4XX_UART_XTAL,
+		.line		= 1,
+		.type		= PORT_XSCALE,
+		.fifosize	= 32
+	}
+};
+
+void __init ixdp425_map_io(void) 
+{
+	early_serial_setup(&ixdp425_serial_ports[0]);
+	early_serial_setup(&ixdp425_serial_ports[1]);
+
+	ixp4xx_map_io();
+}
+
+static struct flash_platform_data ixdp425_flash_data = {
+	.map_name	= "cfi_probe",
+	.width		= 2,
+};
+
+static struct resource ixdp425_flash_resource = {
+	.start		= IXDP425_FLASH_BASE,
+	.end		= IXDP425_FLASH_BASE + IXDP425_FLASH_SIZE,
+	.flags		= IORESOURCE_MEM,
+};
+
+static struct platform_device ixdp425_flash_device = {
+	.name		= "IXP4XX-Flash",
+	.id		= 0,
+	.dev		= {
+		.platform_data = &ixdp425_flash_data,
+	},
+	.num_resources	= 1,
+	.resource	= &ixdp425_flash_resource,
+};
+
+static struct ixp4xx_i2c_pins ixdp425_i2c_gpio_pins = {
+	.sda_pin	= IXDP425_SDA_PIN,
+	.scl_pin	= IXDP425_SCL_PIN,
+};
+
+static struct platform_device ixdp425_i2c_controller = {
+	.name		= "IXP4XX-I2C",
+	.id		= 0,
+	.dev		= {
+		.platform_data = &ixdp425_i2c_gpio_pins,
+	},
+	.num_resources	= 0
+};
+
+static void __init ixdp425_init(void)
+{
+	platform_add_device(&ixdp425_flash_device);
+	platform_add_device(&ixdp425_i2c_controller);
+}
+
+MACHINE_START(IXDP425, "Intel IXDP425 Development Platform")
+	MAINTAINER("MontaVista Software, Inc.")
+	BOOT_MEM(PHYS_OFFSET, IXP4XX_PERIPHERAL_BASE_PHYS,
+		IXP4XX_PERIPHERAL_BASE_VIRT)
+	MAPIO(ixdp425_map_io)
+	INITIRQ(ixp4xx_init_irq)
+	BOOT_PARAMS(0x0100)
+	INIT_MACHINE(ixdp425_init)
+MACHINE_END
+
+MACHINE_START(IXCDP1100, "Intel IXCDP1100 Development Platform")
+	MAINTAINER("MontaVista Software, Inc.")
+	BOOT_MEM(PHYS_OFFSET, IXP4XX_PERIPHERAL_BASE_PHYS,
+		IXP4XX_PERIPHERAL_BASE_VIRT)
+	MAPIO(ixdp425_map_io)
+	INITIRQ(ixp4xx_init_irq)
+	BOOT_PARAMS(0x0100)
+	INIT_MACHINE(ixdp425_init)
+MACHINE_END
+
+/*
+ * Avila is functionally equivalent to IXDP425 except that it adds
+ * a CF IDE slot hanging off the expansion bus. When we have a 
+ * driver for IXP4xx CF IDE with driver model support we'll move
+ * Avila to it's own setup file.
+ */
+#ifdef CONFIG_ARCH_AVILA
+MACHINE_START(AVILA, "Gateworks Avila Network Platform")
+	MAINTAINER("Deepak Saxena <dsaxena@plexity.net>")
+	BOOT_MEM(PHYS_OFFSET, IXP4XX_PERIPHERAL_BASE_PHYS,
+		IXP4XX_PERIPHERAL_BASE_VIRT)
+	MAPIO(ixdp425_map_io)
+	INITIRQ(ixp4xx_init_irq)
+	BOOT_PARAMS(0x0100)
+	INIT_MACHINE(ixdp425_init)
+MACHINE_END
+#endif
+
diff -Nru a/arch/arm/mach-ixp4xx/prpmc1100-pci.c b/arch/arm/mach-ixp4xx/prpmc1100-pci.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/arch/arm/mach-ixp4xx/prpmc1100-pci.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,119 @@
+/*
+ * arch/arm/mach-ixp4xx/prpmc1100-pci.c 
+ *
+ * PrPMC1100 PCI initialization
+ *
+ * Copyright (C) 2003-2004 MontaVista Sofwtare, Inc. 
+ * Based on IXDP425 code originally (C) Intel Corporation
+ *
+ * Author: Deepak Saxena <dsaxena@plexity.net>
+ *
+ * PrPMC1100 PCI init code.  GPIO usage is similar to that on 
+ * IXDP425, but the IRQ routing is completely different and
+ * depends on what carrier you are using. This code is written
+ * to work on the Motorola PrPMC800 ATX carrier board.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+
+#include <linux/config.h>
+#include <linux/pci.h>
+#include <linux/init.h>
+
+#include <asm/mach-types.h>
+#include <asm/irq.h>
+#include <asm/hardware.h>
+
+#include <asm/mach/pci.h>
+
+
+void __init prpmc1100_pci_preinit(void)
+{
+	gpio_line_config(PRPMC1100_PCI_INTA_PIN, 
+				IXP4XX_GPIO_IN | IXP4XX_GPIO_ACTIVE_LOW);
+	gpio_line_config(PRPMC1100_PCI_INTB_PIN, 
+				IXP4XX_GPIO_IN | IXP4XX_GPIO_ACTIVE_LOW);
+	gpio_line_config(PRPMC1100_PCI_INTC_PIN, 
+				IXP4XX_GPIO_IN | IXP4XX_GPIO_ACTIVE_LOW);
+	gpio_line_config(PRPMC1100_PCI_INTD_PIN, 
+				IXP4XX_GPIO_IN | IXP4XX_GPIO_ACTIVE_LOW);
+
+	gpio_line_isr_clear(PRPMC1100_PCI_INTA_PIN);
+	gpio_line_isr_clear(PRPMC1100_PCI_INTB_PIN);
+	gpio_line_isr_clear(PRPMC1100_PCI_INTC_PIN);
+	gpio_line_isr_clear(PRPMC1100_PCI_INTD_PIN);
+
+	ixp4xx_pci_preinit();
+}
+
+
+static int __init prpmc1100_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+{
+	int irq = -1;
+
+	static int pci_irq_table[][4] = { 
+		{	/* IDSEL 16 - PMC A1 */
+			IRQ_PRPMC1100_PCI_INTD, 
+			IRQ_PRPMC1100_PCI_INTA, 
+			IRQ_PRPMC1100_PCI_INTB, 
+			IRQ_PRPMC1100_PCI_INTC
+		}, {	/* IDSEL 17 - PRPMC-A-B */
+			IRQ_PRPMC1100_PCI_INTD, 
+			IRQ_PRPMC1100_PCI_INTA, 
+			IRQ_PRPMC1100_PCI_INTB, 
+			IRQ_PRPMC1100_PCI_INTC
+		}, { 	/* IDSEL 18 - PMC A1-B */
+			IRQ_PRPMC1100_PCI_INTA, 
+			IRQ_PRPMC1100_PCI_INTB, 
+			IRQ_PRPMC1100_PCI_INTC, 
+			IRQ_PRPMC1100_PCI_INTD
+		}, {	/* IDSEL 19 - Unused */
+			0, 0, 0, 0 
+		}, {	/* IDSEL 20 - P2P Bridge */
+			IRQ_PRPMC1100_PCI_INTA, 
+			IRQ_PRPMC1100_PCI_INTB, 
+			IRQ_PRPMC1100_PCI_INTC, 
+			IRQ_PRPMC1100_PCI_INTD
+		}, {	/* IDSEL 21 - PMC A2 */
+			IRQ_PRPMC1100_PCI_INTC, 
+			IRQ_PRPMC1100_PCI_INTD, 
+			IRQ_PRPMC1100_PCI_INTA, 
+			IRQ_PRPMC1100_PCI_INTB
+		}, {	/* IDSEL 22 - PMC A2-B */
+			IRQ_PRPMC1100_PCI_INTD, 
+			IRQ_PRPMC1100_PCI_INTA, 
+			IRQ_PRPMC1100_PCI_INTB, 
+			IRQ_PRPMC1100_PCI_INTC
+		},
+	};
+
+	if (slot >= PRPMC1100_PCI_MIN_DEVID && slot <= PRPMC1100_PCI_MAX_DEVID 
+		&& pin >= 1 && pin <= PRPMC1100_PCI_IRQ_LINES) {
+		irq = pci_irq_table[slot - PRPMC1100_PCI_MIN_DEVID][pin - 1];
+	}
+
+	return irq;
+}
+
+
+struct hw_pci prpmc1100_pci __initdata = {
+	.nr_controllers = 1,
+	.preinit =	  prpmc1100_pci_preinit,
+	.swizzle =	  pci_std_swizzle,
+	.setup =	  ixp4xx_setup,
+	.scan =		  ixp4xx_scan_bus,
+	.map_irq =	  prpmc1100_map_irq,
+};
+
+int __init prpmc1100_pci_init(void)
+{
+	if (machine_is_prpmc1100())
+		pci_common_init(&prpmc1100_pci);
+	return 0;
+}
+
+subsys_initcall(prpmc1100_pci_init);
+
diff -Nru a/arch/arm/mach-ixp4xx/prpmc1100-setup.c b/arch/arm/mach-ixp4xx/prpmc1100-setup.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/arch/arm/mach-ixp4xx/prpmc1100-setup.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,90 @@
+/*
+ * arch/arm/mach-ixp4xx/prpmc1100-setup.c
+ *
+ * Motorola PrPMC1100 board setup
+ *
+ * Copyright (C) 2003-2004 MontaVista Software, Inc.
+ *
+ * Author: Deepak Saxena <dsaxena@plexity.net>
+ */
+
+#include <linux/init.h>
+#include <linux/device.h>
+#include <linux/serial.h>
+#include <linux/tty.h>
+#include <linux/serial_core.h>
+
+#include <asm/types.h>
+#include <asm/setup.h>
+#include <asm/memory.h>
+#include <asm/hardware.h>
+#include <asm/irq.h>
+#include <asm/mach-types.h>
+#include <asm/mach/arch.h>
+#include <asm/mach/flash.h>
+
+#ifdef	__ARMEB__
+#define	REG_OFFSET	3
+#else
+#define	REG_OFFSET	0
+#endif
+
+/*
+ * Only one serial port is connected on the PrPMC1100
+ */
+static struct uart_port prpmc1100_serial_port = {
+	.membase	= (char*)(IXP4XX_UART1_BASE_VIRT + REG_OFFSET),
+	.mapbase	= (IXP4XX_UART1_BASE_PHYS),
+	.irq		= IRQ_IXP4XX_UART1,
+	.flags		= UPF_SKIP_TEST,
+	.iotype		= UPIO_MEM,	
+	.regshift	= 2,
+	.uartclk	= IXP4XX_UART_XTAL,
+	.line		= 0,
+	.type		= PORT_XSCALE,
+	.fifosize	= 32
+};
+
+void __init prpmc1100_map_io(void)
+{
+	early_serial_setup(&prpmc1100_serial_port);
+
+	ixp4xx_map_io();
+}
+
+static struct flash_platform_data prpmc1100_flash_data = {
+	.map_name	= "cfi_probe",
+	.width		= 2,
+};
+
+static struct resource prpmc1100_flash_resource = {
+	.start		= PRPMC1100_FLASH_BASE,
+	.end		= PRPMC1100_FLASH_BASE + PRPMC1100_FLASH_SIZE,
+	.flags		= IORESOURCE_MEM,
+};
+
+static struct platform_device prpmc1100_flash_device = {
+	.name		= "IXP4XX-Flash",
+	.id		= 0,
+	.dev		= {
+		.platform_data = &prpmc1100_flash_data,
+	},
+	.num_resources	= 1,
+	.resource	= &prpmc1100_flash_resource,
+};
+
+static void __init prpmc1100_init(void)
+{
+	platform_add_device(&prpmc1100_flash_device);
+}
+
+MACHINE_START(PRPMC1100, "Motorola PrPMC1100")
+        MAINTAINER("MontaVista Software, Inc.")
+        BOOT_MEM(PHYS_OFFSET, IXP4XX_PERIPHERAL_BASE_PHYS,
+                IXP4XX_PERIPHERAL_BASE_VIRT)
+        MAPIO(prpmc1100_map_io)
+        INITIRQ(ixp4xx_init_irq)
+        BOOT_PARAMS(0x0100)
+	INIT_MACHINE(prpmc1100_init)
+MACHINE_END
+
diff -Nru a/arch/arm/mach-omap/innovator1510.c b/arch/arm/mach-omap/innovator1510.c
--- a/arch/arm/mach-omap/innovator1510.c	Sun May 16 01:18:36 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,99 +0,0 @@
-/*
- * linux/arch/arm/mach-omap/innovator1510.c
- *
- * Board specific inits for OMAP-1510 Innovator
- *
- * Copyright (C) 2001 RidgeRun, Inc.
- * Author: Greg Lonnon <glonnon@ridgerun.com>
- *
- * Copyright (C) 2002 MontaVista Software, Inc.
- *
- * Separated FPGA interrupts from innovator1510.c and cleaned up for 2.6
- * Copyright (C) 2004 Nokia Corporation by Tony Lindrgen <tony@atomide.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/device.h>
-
-#include <asm/hardware.h>
-#include <asm/mach/arch.h>
-#include <asm/mach/map.h>
-
-#include <asm/arch/clocks.h>
-#include <asm/arch/gpio.h>
-#include <asm/arch/fpga.h>
-
-#include "common.h"
-
-extern int omap_gpio_init(void);
-
-void innovator_init_irq(void)
-{
-	omap_init_irq();
-	omap_gpio_init();
-	fpga_init_irq();
-}
-
-static struct resource smc91x_resources[] = {
-	[0] = {
-		.start	= OMAP1510P1_FPGA_ETHR_START,	/* Physical */
-		.end	= OMAP1510P1_FPGA_ETHR_START + 16,
-		.flags	= IORESOURCE_MEM,
-	},
-	[1] = {
-		.start	= INT_ETHER,
-		.end	= INT_ETHER,
-		.flags	= IORESOURCE_IRQ,
-	},
-};
-
-static struct platform_device smc91x_device = {
-	.name		= "smc91x",
-	.id		= 0,
-	.num_resources	= ARRAY_SIZE(smc91x_resources),
-	.resource	= smc91x_resources,
-};
-
-static struct platform_device *devices[] __initdata = {
-	&smc91x_device,
-};
-
-static void __init innovator_init(void)
-{
-	if (!machine_is_innovator())
-		return;
-
-	(void) platform_add_devices(devices, ARRAY_SIZE(devices));
-}
-
-/* Only FPGA needs to be mapped here. All others are done with ioremap */
-static struct map_desc innovator_io_desc[] __initdata = {
-{ OMAP1510P1_FPGA_BASE, OMAP1510P1_FPGA_START, OMAP1510P1_FPGA_SIZE,
-	MT_DEVICE },
-};
-
-static void __init innovator_map_io(void)
-{
-	omap_map_io();
-	iotable_init(innovator_io_desc, ARRAY_SIZE(innovator_io_desc));
-
-	/* Dump the Innovator FPGA rev early - useful info for support. */
-	printk("Innovator FPGA Rev %d.%d Board Rev %d\n",
-	       fpga_read(OMAP1510P1_FPGA_REV_HIGH),
-	       fpga_read(OMAP1510P1_FPGA_REV_LOW),
-	       fpga_read(OMAP1510P1_FPGA_BOARD_REV));
-}
-
-MACHINE_START(INNOVATOR, "TI-Innovator/OMAP1510")
-	MAINTAINER("MontaVista Software, Inc.")
-	BOOT_MEM(0x10000000, 0xe0000000, 0xe0000000)
-	BOOT_PARAMS(0x10000100)
-	MAPIO(innovator_map_io)
-	INITIRQ(innovator_init_irq)
-	INIT_MACHINE(innovator_init)
-MACHINE_END
diff -Nru a/arch/arm/mach-omap/innovator1610.c b/arch/arm/mach-omap/innovator1610.c
--- a/arch/arm/mach-omap/innovator1610.c	Sun May 16 01:18:35 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,91 +0,0 @@
-/*
- * linux/arch/arm/mach-omap/innovator1610.c
- *
- * This file contains Innovator-specific code.
- *
- * Copyright (C) 2002 MontaVista Software, Inc.
- *
- * Copyright (C) 2001 RidgeRun, Inc.
- * Author: Greg Lonnon <glonnon@ridgerun.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-#include <linux/config.h>
-#include <linux/types.h>
-#include <linux/init.h>
-#include <linux/major.h>
-#include <linux/kernel.h>
-#include <linux/device.h>
-#include <linux/errno.h>
-
-#include <asm/setup.h>
-#include <asm/page.h>
-#include <asm/hardware.h>
-#include <asm/mach/arch.h>
-#include <asm/mach/map.h>
-#include <asm/arch/irqs.h>
-
-#include "common.h"
-
-void
-innovator_init_irq(void)
-{
-	omap_init_irq();
-}
-
-static struct resource smc91x_resources[] = {
-	[0] = {
-		.start	= OMAP1610_ETHR_START,		/* Physical */
-		.end	= OMAP1610_ETHR_START + SZ_4K,
-		.flags	= IORESOURCE_MEM,
-	},
-	[1] = {
-		.start	= 0,				/* Really GPIO 0 */
-		.end	= 0,
-		.flags	= IORESOURCE_IRQ,
-	},
-};
-
-static struct platform_device smc91x_device = {
-	.name		= "smc91x",
-	.id		= 0,
-	.num_resources	= ARRAY_SIZE(smc91x_resources),
-	.resource	= smc91x_resources,
-};
-
-static struct platform_device *devices[] __initdata = {
-	&smc91x_device,
-};
-
-static void __init innovator_init(void)
-{
-	if (!machine_is_innovator())
-		return;
-
-	(void) platform_add_devices(devices, ARRAY_SIZE(devices));
-}
-
-static struct map_desc innovator_io_desc[] __initdata = {
-{ OMAP1610_ETHR_BASE, OMAP1610_ETHR_START, OMAP1610_ETHR_SIZE,MT_DEVICE },
-{ OMAP1610_NOR_FLASH_BASE, OMAP1610_NOR_FLASH_START, OMAP1610_NOR_FLASH_SIZE,
-	MT_DEVICE },
-};
-
-static void __init innovator_map_io(void)
-{
-	omap_map_io();
-	iotable_init(innovator_io_desc, ARRAY_SIZE(innovator_io_desc));
-}
-
-MACHINE_START(INNOVATOR, "TI-Innovator/OMAP1610")
-	MAINTAINER("MontaVista Software, Inc.")
-	BOOT_MEM(0x10000000, 0xe0000000, 0xe0000000)
-	BOOT_PARAMS(0x10000100)
-	MAPIO(innovator_map_io)
-	INITIRQ(innovator_init_irq)
-	INIT_MACHINE(innovator_init)
-MACHINE_END
-
diff -Nru a/arch/arm/mach-omap/omap-generic.c b/arch/arm/mach-omap/omap-generic.c
--- a/arch/arm/mach-omap/omap-generic.c	Sun May 16 01:18:35 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,77 +0,0 @@
-/*
- * linux/arch/arm/mach-omap/generic.c
- *
- * Modified from innovator.c
- *
- * Code for generic OMAP board. Should work on many OMAP systems where
- * the device drivers take care of all the necessary hardware initialization.
- * Do not put any board specific code to this file; create a new machine
- * type if you need custom low-level initializations.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/device.h>
-
-#include <asm/hardware.h>
-#include <asm/mach/arch.h>
-#include <asm/mach/map.h>
-
-#include <asm/arch/clocks.h>
-#include <asm/arch/gpio.h>
-#include <asm/arch/mux.h>
-
-#include "common.h"
-
-static void __init omap_generic_init_irq(void)
-{
-	omap_init_irq();
-}
-
-/*
- * Muxes the serial ports on
- */
-static void __init omap_early_serial_init(void)
-{
-	omap_cfg_reg(UART1_TX);
-	omap_cfg_reg(UART1_RTS);
-
-	omap_cfg_reg(UART2_TX);
-	omap_cfg_reg(UART2_RTS);
-
-	omap_cfg_reg(UART3_TX);
-	omap_cfg_reg(UART3_RX);
-}
-
-static void __init omap_generic_init(void)
-{
-	if (!machine_is_omap_generic())
-		return;
-
-	/*
-	 * Make sure the serial ports are muxed on at this point.
-	 * You have to mux them off in device drivers later on
-	 * if not needed.
-	 */
-	if (cpu_is_omap1510()) {
-		omap_early_serial_init();
-	}
-}
-
-static void __init omap_generic_map_io(void)
-{
-	omap_map_io();
-}
-
-MACHINE_START(OMAP_GENERIC, "Generic OMAP-1510/1610")
-	MAINTAINER("Tony Lindgren <tony@atomide.com>")
-	BOOT_MEM(0x10000000, 0xe0000000, 0xe0000000)
-	BOOT_PARAMS(0x10000100)
-	MAPIO(omap_generic_map_io)
-	INITIRQ(omap_generic_init_irq)
-	INIT_MACHINE(omap_generic_init)
-MACHINE_END
diff -Nru a/arch/arm/mach-omap/omap-perseus2.c b/arch/arm/mach-omap/omap-perseus2.c
--- a/arch/arm/mach-omap/omap-perseus2.c	Sun May 16 01:18:34 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,116 +0,0 @@
-/*
- * linux/arch/arm/mach-omap/omap-perseus2.c
- *
- * Modified from omap-generic.c
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/device.h>
-
-#include <asm/hardware.h>
-#include <asm/mach/arch.h>
-#include <asm/mach/map.h>
-
-#include <asm/arch/clocks.h>
-#include <asm/arch/gpio.h>
-#include <asm/arch/mux.h>
-
-#include <asm/arch/omap-perseus2.h>
-
-#include "common.h"
-
-void omap_perseus2_init_irq(void)
-{
-	omap_init_irq();
-}
-
-static struct resource smc91x_resources[] = {
-	[0] = {
-		.start	= OMAP730_FPGA_ETHR_START,	/* Physical */
-		.end	= OMAP730_FPGA_ETHR_START + SZ_4K,
-		.flags	= IORESOURCE_MEM,
-	},
-	[1] = {
-		.start	= 0,
-		.end	= 0,
-		.flags	= INT_ETHER,
-	},
-};
-
-static struct platform_device smc91x_device = {
-	.name		= "smc91x",
-	.id		= 0,
-	.num_resources	= ARRAY_SIZE(smc91x_resources),
-	.resource	= smc91x_resources,
-};
-
-static struct platform_device *devices[] __initdata = {
-	&smc91x_device,
-};
-
-static void __init omap_perseus2_init(void)
-{
-	if (!machine_is_omap_perseus2())
-		return;
-
-	(void) platform_add_devices(devices, ARRAY_SIZE(devices));
-}
-
-/* Only FPGA needs to be mapped here. All others are done with ioremap */
-static struct map_desc omap_perseus2_io_desc[] __initdata = {
-	{OMAP730_FPGA_BASE, OMAP730_FPGA_START, OMAP730_FPGA_SIZE,
-	 MT_DEVICE},
-};
-
-static void __init omap_perseus2_map_io(void)
-{
-	omap_map_io();
-	iotable_init(omap_perseus2_io_desc,
-		     ARRAY_SIZE(omap_perseus2_io_desc));
-
-	/* Early, board-dependent init */
-
-	/*
-	 * Hold GSM Reset until needed
-	 */
-	*DSP_M_CTL &= ~1;
-
-	/*
-	 * UARTs -> done automagically by 8250 driver
-	 */
-
-	/*
-	 * CSx timings, GPIO Mux ... setup
-	 */
-
-	/* Flash: CS0 timings setup */
-	*((volatile __u32 *) OMAP_FLASH_CFG_0) = 0x0000fff3;
-	*((volatile __u32 *) OMAP_FLASH_ACFG_0) = 0x00000088;
-
-	/*
-	 * Ethernet support trough the debug board
-	 * CS1 timings setup
-	 */
-	*((volatile __u32 *) OMAP_FLASH_CFG_1) = 0x0000fff3;
-	*((volatile __u32 *) OMAP_FLASH_ACFG_1) = 0x00000000;
-
-	/*
-	 * Configure MPU_EXT_NIRQ IO in IO_CONF9 register,
-	 * It is used as the Ethernet controller interrupt
-	 */
-	*((volatile __u32 *) PERSEUS2_IO_CONF_9) &= 0x1FFFFFFF;
-}
-
-MACHINE_START(OMAP_PERSEUS2, "OMAP730 Perseus2")
-	MAINTAINER("Kevin Hilman <k-hilman@ti.com>")
-	BOOT_MEM(0x10000000, 0xe0000000, 0xe0000000)
-	BOOT_PARAMS(0x10000100)
-	MAPIO(omap_perseus2_map_io)
-	INITIRQ(omap_perseus2_init_irq)
-	INIT_MACHINE(omap_perseus2_init)
-MACHINE_END
diff -Nru a/arch/arm/mach-pxa/Kconfig b/arch/arm/mach-pxa/Kconfig
--- a/arch/arm/mach-pxa/Kconfig	Sun May 16 01:18:34 2004
+++ b/arch/arm/mach-pxa/Kconfig	Sun May 16 01:18:34 2004
@@ -1,13 +1,25 @@
 
-menu "Intel PXA250/210 Implementations"
+menu "Intel PXA2xx Implementations"
 
 config ARCH_LUBBOCK
 	bool "Intel DBPXA250 Development Platform"
 	depends on ARCH_PXA
+	select PXA25x
 
 config ARCH_PXA_IDP
 	bool "Accelent Xscale IDP"
 	depends on ARCH_PXA
+	select PXA25x
 
 endmenu
+
+config PXA25x
+	bool
+	help
+	  Select code specific to PXA21x/25x/26x variants
+
+config PXA27x
+	bool
+	help
+	  Select code specific to PXA27x variants
 
diff -Nru a/arch/arm/mach-pxa/Makefile b/arch/arm/mach-pxa/Makefile
--- a/arch/arm/mach-pxa/Makefile	Sun May 16 01:18:35 2004
+++ b/arch/arm/mach-pxa/Makefile	Sun May 16 01:18:35 2004
@@ -4,6 +4,8 @@
 
 # Common support (must be linked before board specific support)
 obj-y += generic.o irq.o dma.o
+obj-$(CONFIG_PXA25x) += pxa25x.o
+obj-$(CONFIG_PXA27x) += pxa27x.o
 
 # Specific board support
 obj-$(CONFIG_ARCH_LUBBOCK) += lubbock.o
diff -Nru a/arch/arm/mach-pxa/dma.c b/arch/arm/mach-pxa/dma.c
--- a/arch/arm/mach-pxa/dma.c	Sun May 16 01:18:37 2004
+++ b/arch/arm/mach-pxa/dma.c	Sun May 16 01:18:37 2004
@@ -28,7 +28,7 @@
 	char *name;
 	void (*irq_handler)(int, void *, struct pt_regs *);
 	void *data;
-} dma_channels[16];
+} dma_channels[PXA_DMA_CHANNELS];
 
 
 int pxa_request_dma (char *name, pxa_dma_prio prio,
@@ -45,7 +45,7 @@
 	local_irq_save(flags);
 
 	/* try grabbing a DMA channel with the requested priority */
-	for (i = prio; i < prio + (prio == DMA_PRIO_LOW) ? 8 : 4; i++) {
+	for (i = prio; i < prio + PXA_DMA_NBCH(prio); i++) {
 		if (!dma_channels[i].name) {
 			found = 1;
 			break;
@@ -97,7 +97,7 @@
 {
 	int i, dint = DINT;
 
-	for (i = 0; i < 16; i++) {
+	for (i = 0; i < PXA_DMA_CHANNELS; i++) {
 		if (dint & (1 << i)) {
 			struct dma_channel *channel = &dma_channels[i];
 			if (channel->name && channel->irq_handler) {
diff -Nru a/arch/arm/mach-pxa/generic.c b/arch/arm/mach-pxa/generic.c
--- a/arch/arm/mach-pxa/generic.c	Sun May 16 01:18:34 2004
+++ b/arch/arm/mach-pxa/generic.c	Sun May 16 01:18:34 2004
@@ -31,77 +31,11 @@
 #include <asm/mach/map.h>
 
 #include <asm/arch/udc.h>
+#include <asm/arch/pxafb.h>
 
 #include "generic.h"
 
 /*
- * Various clock factors driven by the CCCR register.
- */
-
-/* Crystal Frequency to Memory Frequency Multiplier (L) */
-static unsigned char L_clk_mult[32] = { 0, 27, 32, 36, 40, 45, 0, };
-
-/* Memory Frequency to Run Mode Frequency Multiplier (M) */
-static unsigned char M_clk_mult[4] = { 0, 1, 2, 4 };
-
-/* Run Mode Frequency to Turbo Mode Frequency Multiplier (N) */
-/* Note: we store the value N * 2 here. */
-static unsigned char N2_clk_mult[8] = { 0, 0, 2, 3, 4, 0, 6, 0 };
-
-/* Crystal clock */
-#define BASE_CLK	3686400
-
-/*
- * Get the clock frequency as reflected by CCCR and the turbo flag.
- * We assume these values have been applied via a fcs.
- * If info is not 0 we also display the current settings.
- */
-unsigned int get_clk_frequency_khz(int info)
-{
-	unsigned long cccr, turbo;
-	unsigned int l, L, m, M, n2, N;
-
-	cccr = CCCR;
-	asm( "mrc\tp14, 0, %0, c6, c0, 0" : "=r" (turbo) );
-
-	l  =  L_clk_mult[(cccr >> 0) & 0x1f];
-	m  =  M_clk_mult[(cccr >> 5) & 0x03];
-	n2 = N2_clk_mult[(cccr >> 7) & 0x07];
-
-	L = l * BASE_CLK;
-	M = m * L;
-	N = n2 * M / 2;
-
-	if(info)
-	{
-		L += 5000;
-		printk( KERN_INFO "Memory clock: %d.%02dMHz (*%d)\n",
-			L / 1000000, (L % 1000000) / 10000, l );
-		M += 5000;
-		printk( KERN_INFO "Run Mode clock: %d.%02dMHz (*%d)\n",
-			M / 1000000, (M % 1000000) / 10000, m );
-		N += 5000;
-		printk( KERN_INFO "Turbo Mode clock: %d.%02dMHz (*%d.%d, %sactive)\n",
-			N / 1000000, (N % 1000000) / 10000, n2 / 2, (n2 % 2) * 5,
-			(turbo & 1) ? "" : "in" );
-	}
-
-	return (turbo & 1) ? (N/1000) : (M/1000);
-}
-
-EXPORT_SYMBOL(get_clk_frequency_khz);
-
-/*
- * Return the current lclk requency in units of 10kHz
- */
-unsigned int get_lclk_frequency_10khz(void)
-{
-	return L_clk_mult[(CCCR >> 0) & 0x1f] * BASE_CLK / 10000;
-}
-
-EXPORT_SYMBOL(get_lclk_frequency_10khz);
-
-/*
  * Handy function to set GPIO alternate functions
  */
 
@@ -125,16 +59,21 @@
 EXPORT_SYMBOL(pxa_gpio_mode);
 
 /*
- * Note that 0xfffe0000-0xffffffff is reserved for the vector table and
- * cache flush area.
+ * Intel PXA2xx internal register mapping.
+ *
+ * Note 1: not all PXA2xx variants implement all those addresses.
+ *
+ * Note 2: virtual 0xfffe0000-0xffffffff is reserved for the vector table
+ *         and cache flush area.
  */
 static struct map_desc standard_io_desc[] __initdata = {
  /* virtual     physical    length      type */
-  { 0xf6000000, 0x20000000, 0x01000000, MT_DEVICE }, /* PCMCIA0 IO */
-  { 0xf7000000, 0x30000000, 0x01000000, MT_DEVICE }, /* PCMCIA1 IO */
-  { 0xf8000000, 0x40000000, 0x01400000, MT_DEVICE }, /* Devs */
-  { 0xfa000000, 0x44000000, 0x00100000, MT_DEVICE }, /* LCD */
-  { 0xfc000000, 0x48000000, 0x00100000, MT_DEVICE }, /* Mem Ctl */
+  { 0xf2000000, 0x40000000, 0x01800000, MT_DEVICE }, /* Devs */
+  { 0xf4000000, 0x44000000, 0x00100000, MT_DEVICE }, /* LCD */
+  { 0xf6000000, 0x48000000, 0x00100000, MT_DEVICE }, /* Mem Ctl */
+  { 0xf8000000, 0x4c000000, 0x00100000, MT_DEVICE }, /* USB host */
+  { 0xfa000000, 0x50000000, 0x00100000, MT_DEVICE }, /* Camera */
+  { 0xfe000000, 0x58000000, 0x00100000, MT_DEVICE }, /* IMem ctl */
   { 0xff000000, 0x00000000, 0x00100000, MT_DEVICE }  /* UNCACHED_PHYS_0 */
 };
 
@@ -205,9 +144,45 @@
 	}
 };
 
+static struct pxafb_mach_info pxa_fb_info;
+
+void __init set_pxa_fb_info(struct pxafb_mach_info *hard_pxa_fb_info)
+{
+	memcpy(&pxa_fb_info,hard_pxa_fb_info,sizeof(struct pxafb_mach_info));
+}
+EXPORT_SYMBOL(set_pxa_fb_info);
+
+static struct resource pxafb_resources[] = {
+	[0] = {
+		.start	= 0x44000000,
+		.end	= 0x4400ffff,
+		.flags	= IORESOURCE_MEM,
+	},
+	[1] = {
+		.start	= IRQ_LCD,
+		.end	= IRQ_LCD,
+		.flags	= IORESOURCE_IRQ,
+	},
+};
+
+static u64 fb_dma_mask = ~(u64)0;
+
+static struct platform_device pxafb_device = {
+	.name		= "pxafb",
+	.id		= 0,
+	.dev		= {
+ 		.platform_data	= &pxa_fb_info,
+		.dma_mask	= &fb_dma_mask,
+		.coherent_dma_mask = 0xffffffff,
+	},
+	.num_resources	= ARRAY_SIZE(pxafb_resources),
+	.resource	= pxafb_resources,
+};
+
 static struct platform_device *devices[] __initdata = {
 	&pxamci_device,
 	&udc_device,
+	&pxafb_device,
 };
 
 static int __init pxa_init(void)
diff -Nru a/arch/arm/mach-pxa/pm.c b/arch/arm/mach-pxa/pm.c
--- a/arch/arm/mach-pxa/pm.c	Sun May 16 01:18:35 2004
+++ b/arch/arm/mach-pxa/pm.c	Sun May 16 01:18:35 2004
@@ -32,6 +32,11 @@
 #define SAVE(x)		sleep_save[SLEEP_SAVE_##x] = x
 #define RESTORE(x)	x = sleep_save[SLEEP_SAVE_##x]
 
+#define RESTORE_GPLEVEL(n) do { \
+	GPSR##n = sleep_save[SLEEP_SAVE_GPLR##n]; \
+	GPCR##n = ~sleep_save[SLEEP_SAVE_GPLR##n]; \
+} while (0)
+
 /*
  * List of global PXA peripheral registers to preserve.
  * More ones like CP and general purpose register values are preserved
@@ -42,16 +47,13 @@
 	SLEEP_SAVE_OSCR, SLEEP_SAVE_OIER,
 	SLEEP_SAVE_OSMR0, SLEEP_SAVE_OSMR1, SLEEP_SAVE_OSMR2, SLEEP_SAVE_OSMR3,
 
+	SLEEP_SAVE_GPLR0, SLEEP_SAVE_GPLR1, SLEEP_SAVE_GPLR2,
 	SLEEP_SAVE_GPDR0, SLEEP_SAVE_GPDR1, SLEEP_SAVE_GPDR2,
 	SLEEP_SAVE_GRER0, SLEEP_SAVE_GRER1, SLEEP_SAVE_GRER2,
 	SLEEP_SAVE_GFER0, SLEEP_SAVE_GFER1, SLEEP_SAVE_GFER2,
 	SLEEP_SAVE_GAFR0_L, SLEEP_SAVE_GAFR1_L, SLEEP_SAVE_GAFR2_L,
 	SLEEP_SAVE_GAFR0_U, SLEEP_SAVE_GAFR1_U, SLEEP_SAVE_GAFR2_U,
 
-	SLEEP_SAVE_FFIER, SLEEP_SAVE_FFLCR, SLEEP_SAVE_FFMCR,
-	SLEEP_SAVE_FFSPR, SLEEP_SAVE_FFISR,
-	SLEEP_SAVE_FFDLL, SLEEP_SAVE_FFDLH,
-
 	SLEEP_SAVE_ICMR,
 	SLEEP_SAVE_CKEN,
 
@@ -74,21 +76,6 @@
 	/* preserve current time */
 	delta = xtime.tv_sec - RCNR;
 
-	/*
-	 * Temporary solution.  This won't be necessary once
-	 * we move pxa support into the serial driver
-	 * Save the FF UART
-	 */
-	SAVE(FFIER);
-	SAVE(FFLCR);
-	SAVE(FFMCR);
-	SAVE(FFSPR);
-	SAVE(FFISR);
-	FFLCR |= 0x80;
-	SAVE(FFDLL);
-	SAVE(FFDLH);
-	FFLCR &= 0xef;
-
 	/* save vital registers */
 	SAVE(OSCR);
 	SAVE(OSMR0);
@@ -97,6 +84,7 @@
 	SAVE(OSMR3);
 	SAVE(OIER);
 
+	SAVE(GPLR0); SAVE(GPLR1); SAVE(GPLR2);
 	SAVE(GPDR0); SAVE(GPDR1); SAVE(GPDR2);
 	SAVE(GRER0); SAVE(GRER1); SAVE(GRER2);
 	SAVE(GFER0); SAVE(GFER1); SAVE(GFER2);
@@ -146,14 +134,15 @@
 	PSPR = 0;
 
 	/* restore registers */
-	RESTORE(GPDR0); RESTORE(GPDR1); RESTORE(GPDR2);
-	RESTORE(GRER0); RESTORE(GRER1); RESTORE(GRER2);
-	RESTORE(GFER0); RESTORE(GFER1); RESTORE(GFER2);
 	RESTORE(GAFR0_L); RESTORE(GAFR0_U);
 	RESTORE(GAFR1_L); RESTORE(GAFR1_U);
 	RESTORE(GAFR2_L); RESTORE(GAFR2_U);
+	RESTORE_GPLEVEL(0); RESTORE_GPLEVEL(1); RESTORE_GPLEVEL(2);
+	RESTORE(GPDR0); RESTORE(GPDR1); RESTORE(GPDR2);
+	RESTORE(GRER0); RESTORE(GRER1); RESTORE(GRER2);
+	RESTORE(GFER0); RESTORE(GFER1); RESTORE(GFER2);
 
-	PSSR = PSSR_PH;
+	PSSR = PSSR_RDH | PSSR_PH;
 
 	RESTORE(OSMR0);
 	RESTORE(OSMR1);
@@ -167,22 +156,6 @@
 	ICLR = 0;
 	ICCR = 1;
 	RESTORE(ICMR);
-
-	/*
-	 * Temporary solution.  This won't be necessary once
-	 * we move pxa support into the serial driver.
-	 * Restore the FF UART.
-	 */
-	RESTORE(FFMCR);
-	RESTORE(FFSPR);
-	RESTORE(FFLCR);
-	FFLCR |= 0x80;
-	RESTORE(FFDLH);
-	RESTORE(FFDLL);
-	RESTORE(FFLCR);
-	RESTORE(FFISR);
-	FFFCR = 0x07;
-	RESTORE(FFIER);
 
 	/* restore current time */
 	xtime.tv_sec = RCNR + delta;
diff -Nru a/arch/arm/mach-pxa/pxa25x.c b/arch/arm/mach-pxa/pxa25x.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/arch/arm/mach-pxa/pxa25x.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,94 @@
+/*
+ *  linux/arch/arm/mach-pxa/pxa25x.c
+ *
+ *  Author:	Nicolas Pitre
+ *  Created:	Jun 15, 2001
+ *  Copyright:	MontaVista Software Inc.
+ *
+ * Code specific to PXA21x/25x/26x variants.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * Since this file should be linked before any other machine specific file,
+ * the __initcall() here will be executed first.  This serves as default
+ * initialization stuff for PXA machines which can be overridden later if
+ * need be.
+ */
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/pm.h>
+
+#include <asm/hardware.h>
+
+#include "generic.h"
+
+/*
+ * Various clock factors driven by the CCCR register.
+ */
+
+/* Crystal Frequency to Memory Frequency Multiplier (L) */
+static unsigned char L_clk_mult[32] = { 0, 27, 32, 36, 40, 45, 0, };
+
+/* Memory Frequency to Run Mode Frequency Multiplier (M) */
+static unsigned char M_clk_mult[4] = { 0, 1, 2, 4 };
+
+/* Run Mode Frequency to Turbo Mode Frequency Multiplier (N) */
+/* Note: we store the value N * 2 here. */
+static unsigned char N2_clk_mult[8] = { 0, 0, 2, 3, 4, 0, 6, 0 };
+
+/* Crystal clock */
+#define BASE_CLK	3686400
+
+/*
+ * Get the clock frequency as reflected by CCCR and the turbo flag.
+ * We assume these values have been applied via a fcs.
+ * If info is not 0 we also display the current settings.
+ */
+unsigned int get_clk_frequency_khz(int info)
+{
+	unsigned long cccr, turbo;
+	unsigned int l, L, m, M, n2, N;
+
+	cccr = CCCR;
+	asm( "mrc\tp14, 0, %0, c6, c0, 0" : "=r" (turbo) );
+
+	l  =  L_clk_mult[(cccr >> 0) & 0x1f];
+	m  =  M_clk_mult[(cccr >> 5) & 0x03];
+	n2 = N2_clk_mult[(cccr >> 7) & 0x07];
+
+	L = l * BASE_CLK;
+	M = m * L;
+	N = n2 * M / 2;
+
+	if(info)
+	{
+		L += 5000;
+		printk( KERN_INFO "Memory clock: %d.%02dMHz (*%d)\n",
+			L / 1000000, (L % 1000000) / 10000, l );
+		M += 5000;
+		printk( KERN_INFO "Run Mode clock: %d.%02dMHz (*%d)\n",
+			M / 1000000, (M % 1000000) / 10000, m );
+		N += 5000;
+		printk( KERN_INFO "Turbo Mode clock: %d.%02dMHz (*%d.%d, %sactive)\n",
+			N / 1000000, (N % 1000000) / 10000, n2 / 2, (n2 % 2) * 5,
+			(turbo & 1) ? "" : "in" );
+	}
+
+	return (turbo & 1) ? (N/1000) : (M/1000);
+}
+
+EXPORT_SYMBOL(get_clk_frequency_khz);
+
+/*
+ * Return the current lclk requency in units of 10kHz
+ */
+unsigned int get_lclk_frequency_10khz(void)
+{
+	return L_clk_mult[(CCCR >> 0) & 0x1f] * BASE_CLK / 10000;
+}
+
+EXPORT_SYMBOL(get_lclk_frequency_10khz);
+
diff -Nru a/arch/arm/mach-pxa/pxa27x.c b/arch/arm/mach-pxa/pxa27x.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/arch/arm/mach-pxa/pxa27x.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,120 @@
+/*
+ *  linux/arch/arm/mach-pxa/pxa27x.c
+ *
+ *  Author:	Nicolas Pitre
+ *  Created:	Nov 05, 2002
+ *  Copyright:	MontaVista Software Inc.
+ *
+ * Code specific to PXA27x aka Bulverde.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+#include <linux/config.h>
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/pm.h>
+
+#include <asm/hardware.h>
+
+#include "generic.h"
+
+/* Crystal clock : 13-MHZ*/
+#define BASE_CLK	13000000
+
+/*
+ * Get the clock frequency as reflected by CCSR and the turbo flag.
+ * We assume these values have been applied via a fcs.
+ * If info is not 0 we also display the current settings.
+ *
+ * For more details, refer to Bulverde Manual, section 3.8.2.1
+ */
+unsigned int get_clk_frequency_khz( int info)
+{
+	unsigned long ccsr, turbo, b, ht;
+	unsigned int l, L, m, M, n2, N, S, cccra;
+
+	ccsr = CCSR;
+	cccra = CCCR & (0x1 << 25);
+
+	/* Read clkcfg register: it has turbo, b, half-turbo (and f) */
+	asm( "mrc\tp14, 0, %0, c6, c0, 0" : "=r" (turbo) );
+	b = (turbo & (0x1 << 3));
+	ht = (turbo & (0x1 << 2));
+
+	l  = ccsr & 0x1f;
+	n2 = (ccsr>>7) & 0xf;
+	if (l == 31) {
+		/* The calculation from the Yellow Book is incorrect:
+		   it says M=4 for L=21-30 (which is easy to calculate
+		   by subtracting 1 and then dividing by 10, but not
+		   with 31, so we'll do it manually */
+		m = 1 << 2;
+	} else {
+		m = 1 << ((l-1)/10);
+	}
+
+	L = l * BASE_CLK;
+	N = (n2 * L) / 2;
+	S = (b) ? L : (L/2);
+	if (cccra == 0)
+		M = L/m;
+	else
+		M = (b) ? L : (L/2);
+
+	if (info) {
+		printk( KERN_INFO "Run Mode clock: %d.%02dMHz (*%d)\n",
+			L / 1000000, (L % 1000000) / 10000, l );
+		printk( KERN_INFO "Memory clock: %d.%02dMHz (/%d)\n",
+			M / 1000000, (M % 1000000) / 10000, m );
+		printk( KERN_INFO "Turbo Mode clock: %d.%02dMHz (*%d.%d, %sactive)\n",
+			N / 1000000, (N % 1000000)/10000, n2 / 2, (n2 % 2)*5,
+			(turbo & 1) ? "" : "in" );
+		printk( KERN_INFO "System bus clock: %d.%02dMHz \n",
+			S / 1000000, (S % 1000000) / 10000 );
+	}
+
+	return (turbo & 1) ? (N/1000) : (L/1000);
+}
+
+/*
+ * Return the current mem clock frequency in units of 10kHz as
+ * reflected by CCCR[A], B, and L
+ */
+unsigned int get_lclk_frequency_10khz(void)
+{
+	unsigned long ccsr, clkcfg, b;
+	unsigned int l, L, m, M, cccra;
+
+	cccra = CCCR & (0x1 << 25);
+
+	/* Read clkcfg register to obtain b */
+	asm( "mrc\tp14, 0, %0, c6, c0, 0" : "=r" (clkcfg) );
+	b = (clkcfg & (0x1 << 3));
+
+	ccsr = CCSR;
+	l  =  ccsr & 0x1f;
+	if (l == 31) {
+		/* The calculation from the Yellow Book is incorrect:
+		   it says M=4 for L=21-30 (which is easy to calculate
+		   by subtracting 1 and then dividing by 10, but not
+		   with 31, so we'll do it manually */
+		m = 1 << 2;
+	} else {
+		m = 1 << ((l-1)/10);
+	}
+
+	L = l * BASE_CLK;
+	if (cccra == 0)
+		M = L/m;
+	else
+		M = (b) ? L : L/2;
+
+	return (M / 10000);
+}
+
+EXPORT_SYMBOL(get_clk_frequency_khz);
+EXPORT_SYMBOL(get_lclk_frequency_10khz);
+
diff -Nru a/arch/arm/mach-s3c2410/Kconfig b/arch/arm/mach-s3c2410/Kconfig
--- a/arch/arm/mach-s3c2410/Kconfig	Sun May 16 01:18:34 2004
+++ b/arch/arm/mach-s3c2410/Kconfig	Sun May 16 01:18:34 2004
@@ -16,6 +16,13 @@
 	  Say Y here if you are using the HP IPAQ H1940
 	  <http://www.handhelds.org/projects/h1940.html>.
 
+config ARCH_SMDK2410
+	bool "SMDK2410/A9M2410"
+	depends on ARCH_S3C2410
+	help
+	   Say Y here if you are using the SMDK2410 or the derived module A9M2410
+           <http://www.fsforth.de>
+
 config MACH_VR1000
 	bool "Simtec VR1000"
 	depends on ARCH_S3C2410
diff -Nru a/arch/arm/mach-s3c2410/Makefile b/arch/arm/mach-s3c2410/Makefile
--- a/arch/arm/mach-s3c2410/Makefile	Sun May 16 01:18:34 2004
+++ b/arch/arm/mach-s3c2410/Makefile	Sun May 16 01:18:34 2004
@@ -12,6 +12,7 @@
 obj-$(CONFIG_ARCH_BAST)    += mach-bast.o
 obj-$(CONFIG_MACH_H1940)   += mach-h1940.o
 obj-$(CONFIG_ARCH_H1940)   += mach-h1940.o
+obj-$(CONFIG_ARCH_SMDK2410) += mach-smdk2410.o
 obj-$(CONFIG_MACH_VR1000)  += mach-vr1000.o
 
 #obj-$(CONFIG_PCI)	+=$(pci-y)
diff -Nru a/arch/arm/mach-s3c2410/mach-smdk2410.c b/arch/arm/mach-s3c2410/mach-smdk2410.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/arch/arm/mach-s3c2410/mach-smdk2410.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,109 @@
+/***********************************************************************
+ *
+ * linux/arch/arm/mach-s3c2410/mach-smdk2410.c
+ *
+ * Copyright (C) 2004 by FS Forth-Systeme GmbH
+ * All rights reserved.
+ *
+ * $Id: mach-smdk2410.c,v 1.1 2004/05/11 14:15:38 mpietrek Exp $
+ * @Author: Jonas Dietsche
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ * @History:
+ * derived from linux/arch/arm/mach-s3c2410/mach-bast.c, written by
+ * Ben Dooks <ben@simtec.co.uk>
+ ***********************************************************************/
+
+#include <linux/kernel.h>
+#include <linux/types.h>
+#include <linux/interrupt.h>
+#include <linux/list.h>
+#include <linux/timer.h>
+#include <linux/init.h>
+
+#include <asm/mach/arch.h>
+#include <asm/mach/map.h>
+#include <asm/mach/irq.h>
+
+#include <asm/hardware.h>
+#include <asm/io.h>
+#include <asm/irq.h>
+#include <asm/mach-types.h>
+
+#include <asm/arch/regs-serial.h>
+
+#include "s3c2410.h"
+
+
+static struct map_desc smdk2410_iodesc[] __initdata = {
+  /* nothing here yet */
+};
+
+#define UCON S3C2410_UCON_DEFAULT
+#define ULCON S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB
+#define UFCON S3C2410_UFCON_RXTRIG8 | S3C2410_UFCON_FIFOMODE
+
+/* base baud rate for all our UARTs */
+static unsigned long smdk2410_serial_clock = 24*1000*1000;
+
+static struct s3c2410_uartcfg smdk2410_uartcfgs[] = {
+	[0] = {
+		.hwport	     = 0,
+		.flags	     = 0,
+		.clock	     = &smdk2410_serial_clock,
+		.ucon	     = UCON,
+		.ulcon	     = ULCON,
+		.ufcon	     = UFCON,
+	},
+	[1] = {
+		.hwport	     = 1,
+		.flags	     = 0,
+		.clock	     = &smdk2410_serial_clock,
+		.ucon	     = UCON,
+		.ulcon	     = ULCON,
+		.ufcon	     = UFCON,
+	},
+	[2] = {
+		.hwport	     = 2,
+		.flags	     = 0,
+		.clock	     = &smdk2410_serial_clock,
+		.ucon	     = UCON,
+		.ulcon	     = ULCON,
+		.ufcon	     = UFCON,
+	}
+};
+
+
+void __init smdk2410_map_io(void)
+{
+	s3c2410_map_io(smdk2410_iodesc, ARRAY_SIZE(smdk2410_iodesc));
+	s3c2410_uartcfgs = smdk2410_uartcfgs;
+}
+
+void __init smdk2410_init_irq(void)
+{
+	s3c2410_init_irq();
+}
+
+MACHINE_START(SMDK2410, "SMDK2410") /* @TODO: request a new identifier and switch
+				    * to SMDK2410 */
+     MAINTAINER("Jonas Dietsche")
+     BOOT_MEM(S3C2410_SDRAM_PA, S3C2410_PA_UART, S3C2410_VA_UART)
+     BOOT_PARAMS(S3C2410_SDRAM_PA + 0x100)
+     MAPIO(smdk2410_map_io)
+     INITIRQ(smdk2410_init_irq)
+MACHINE_END
diff -Nru a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig
--- a/arch/arm/mm/Kconfig	Sun May 16 01:18:34 2004
+++ b/arch/arm/mm/Kconfig	Sun May 16 01:18:34 2004
@@ -220,7 +220,7 @@
 # XScale
 config CPU_XSCALE
 	bool
-	depends on ARCH_IOP3XX || ARCH_ADIFCC || ARCH_PXA
+	depends on ARCH_IOP3XX || ARCH_ADIFCC || ARCH_PXA || ARCH_IXP4XX
 	default y
 	select CPU_32v5
 	select CPU_ABRT_EV5T
diff -Nru a/arch/arm/mm/blockops.c b/arch/arm/mm/blockops.c
--- a/arch/arm/mm/blockops.c	Sun May 16 01:18:36 2004
+++ b/arch/arm/mm/blockops.c	Sun May 16 01:18:36 2004
@@ -133,7 +133,7 @@
 	unsigned int cache_type;
 	int i;
 
-	asm("mcr p15, 0, %0, c0, c0, 1" : "=r" (cache_type));
+	asm("mrc p15, 0, %0, c0, c0, 1" : "=r" (cache_type));
 
 	printk("Checking V6 block cache operations:\n");
 	register_undef_hook(&blockops_hook);
diff -Nru a/arch/arm/mm/cache-v6.S b/arch/arm/mm/cache-v6.S
--- a/arch/arm/mm/cache-v6.S	Sun May 16 01:18:33 2004
+++ b/arch/arm/mm/cache-v6.S	Sun May 16 01:18:33 2004
@@ -151,6 +151,7 @@
 	add	r0, r0, #D_CACHE_LINE_SIZE
 	cmp	r0, r1
 	blo	1b
+	mov	r0, #0
 	mcr	p15, 0, r0, c7, c10, 4		@ drain write buffer
 	mov	pc, lr
 
@@ -188,6 +189,7 @@
 	mcr	p15, 0, r0, c7, c15, 1		@ clean & invalidate line
 #endif
 	add	r0, r0, #D_CACHE_LINE_SIZE
+	cmp	r0, r1
 	blo	1b
 	mov	r0, #0
 	mcr	p15, 0, r0, c7, c10, 4		@ drain write buffer
diff -Nru a/arch/arm/mm/mm-armv.c b/arch/arm/mm/mm-armv.c
--- a/arch/arm/mm/mm-armv.c	Sun May 16 01:18:35 2004
+++ b/arch/arm/mm/mm-armv.c	Sun May 16 01:18:35 2004
@@ -305,27 +305,27 @@
 	[MT_DEVICE] = {
 		.prot_pte  = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY |
 				L_PTE_WRITE,
-		.prot_l1   = PMD_TYPE_TABLE | PMD_BIT4,
-		.prot_sect = PMD_TYPE_SECT | PMD_BIT4 | PMD_SECT_UNCACHED |
+		.prot_l1   = PMD_TYPE_TABLE,
+		.prot_sect = PMD_TYPE_SECT | PMD_SECT_UNCACHED |
 				PMD_SECT_AP_WRITE,
 		.domain    = DOMAIN_IO,
 	},
 	[MT_CACHECLEAN] = {
-		.prot_sect = PMD_TYPE_SECT | PMD_BIT4,
+		.prot_sect = PMD_TYPE_SECT,
 		.domain    = DOMAIN_KERNEL,
 	},
 	[MT_MINICLEAN] = {
-		.prot_sect = PMD_TYPE_SECT | PMD_BIT4 | PMD_SECT_MINICACHE,
+		.prot_sect = PMD_TYPE_SECT | PMD_SECT_MINICACHE,
 		.domain    = DOMAIN_KERNEL,
 	},
 	[MT_VECTORS] = {
 		.prot_pte  = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY |
 				L_PTE_EXEC,
-		.prot_l1   = PMD_TYPE_TABLE | PMD_BIT4,
+		.prot_l1   = PMD_TYPE_TABLE,
 		.domain    = DOMAIN_USER,
 	},
 	[MT_MEMORY] = {
-		.prot_sect = PMD_TYPE_SECT | PMD_BIT4 | PMD_SECT_AP_WRITE,
+		.prot_sect = PMD_TYPE_SECT | PMD_SECT_AP_WRITE,
 		.domain    = DOMAIN_KERNEL,
 	}
 };
@@ -353,6 +353,15 @@
 		ecc_mask = 0;
 	}
 
+	if (cpu_arch <= CPU_ARCH_ARMv5) {
+		mem_types[MT_DEVICE].prot_l1       |= PMD_BIT4;
+		mem_types[MT_DEVICE].prot_sect     |= PMD_BIT4;
+		mem_types[MT_CACHECLEAN].prot_sect |= PMD_BIT4;
+		mem_types[MT_MINICLEAN].prot_sect  |= PMD_BIT4;
+		mem_types[MT_VECTORS].prot_l1      |= PMD_BIT4;
+		mem_types[MT_MEMORY].prot_sect     |= PMD_BIT4;
+	}
+
 	/*
 	 * ARMv6 and above have extended page tables.
 	 */
@@ -482,6 +491,7 @@
 	pgd_t *pgd;
 	pmd_t *pmd;
 	int i;
+	int cpu_arch = cpu_architecture();
 
 	if (current->mm && current->mm->pgd)
 		pgd = current->mm->pgd;
@@ -491,7 +501,9 @@
 	for (i = 0; i < FIRST_USER_PGD_NR + USER_PTRS_PER_PGD; i++) {
 		pmdval = (i << PGDIR_SHIFT) |
 			 PMD_SECT_AP_WRITE | PMD_SECT_AP_READ |
-			 PMD_BIT4 | PMD_TYPE_SECT;
+			 PMD_TYPE_SECT;
+		if (cpu_arch <= CPU_ARCH_ARMv5)
+			pmdval |= PMD_BIT4;
 		pmd = pmd_offset(pgd + i, i << PGDIR_SHIFT);
 		set_pmd(pmd, __pmd(pmdval));
 	}
diff -Nru a/arch/arm/mm/proc-xscale.S b/arch/arm/mm/proc-xscale.S
--- a/arch/arm/mm/proc-xscale.S	Sun May 16 01:18:36 2004
+++ b/arch/arm/mm/proc-xscale.S	Sun May 16 01:18:36 2004
@@ -298,7 +298,7 @@
 	add	r0, r0, #CACHELINESIZE
 	cmp	r0, r1
 	blo	1b
-	mcr	p15, 0, r0, c7, c10, 1		@ Drain Write (& Fill) Buffer
+	mcr	p15, 0, r0, c7, c10, 4		@ Drain Write (& Fill) Buffer
 	mov	pc, lr
 
 /*
@@ -315,7 +315,7 @@
 	add	r0, r0, #CACHELINESIZE
 	cmp	r0, r1
 	blo	1b
-	mcr	p15, 0, r0, c7, c10, 1		@ Drain Write (& Fill) Buffer
+	mcr	p15, 0, r0, c7, c10, 4		@ Drain Write (& Fill) Buffer
 	mov	pc, lr
 
 /*
@@ -333,7 +333,7 @@
 	add	r0, r0, #CACHELINESIZE
 	cmp	r0, r1
 	blo	1b
-	mcr	p15, 0, r0, c7, c10, 1		@ Drain Write (& Fill) Buffer
+	mcr	p15, 0, r0, c7, c10, 4		@ Drain Write (& Fill) Buffer
 	mov	pc, lr
 
 ENTRY(xscale_cache_fns)
@@ -647,6 +647,11 @@
 	.asciz	"XScale-PXA210"
 	.size	cpu_pxa210_name, . - cpu_pxa210_name
 
+	.type	cpu_ixp42x_name, #object
+cpu_ixp42x_name:
+	.asciz	"XScale-IXP42x Family"
+	.size	cpu_ixp42x_name, . - cpu_ixp42x_name
+
 	.type	cpu_pxa255_name, #object
 cpu_pxa255_name:
 	.asciz	"XScale-PXA255"
@@ -724,6 +729,22 @@
 	.long	xscale_mc_user_fns
 	.long	xscale_cache_fns
 	.size	__pxa210_proc_info, . - __pxa210_proc_info
+
+	.type	__ixp42x_proc_info, #object
+__ixp42x_proc_info:
+	.long   0x690541c0
+	.long   0xffffffc0
+	.long   0x00000c0e
+	b       __xscale_setup
+	.long   cpu_arch_name
+	.long   cpu_elf_name
+	.long   HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP
+	.long   cpu_ixp42x_name
+	.long   xscale_processor_functions
+	.long	v4wbi_tlb_fns
+	.long	xscale_mc_user_fns
+	.long	xscale_cache_fns
+	.size   __ixp42x_proc_info, . - __ixp42x_proc_info                
 
 	.type	__pxa255_proc_info,#object
 __pxa255_proc_info:
diff -Nru a/arch/arm26/kernel/process.c b/arch/arm26/kernel/process.c
--- a/arch/arm26/kernel/process.c	Sun May 16 01:18:36 2004
+++ b/arch/arm26/kernel/process.c	Sun May 16 01:18:36 2004
@@ -397,12 +397,6 @@
         return __ret;
 }
 
-/*
- * These bracket the sleeping functions..
- */
-#define first_sched	((unsigned long) scheduling_functions_start_here)
-#define last_sched	((unsigned long) scheduling_functions_end_here)
-
 unsigned long get_wchan(struct task_struct *p)
 {
 	unsigned long fp, lr;
@@ -417,7 +411,7 @@
 		if (fp < stack_page || fp > 4092+stack_page)
 			return 0;
 		lr = pc_pointer (((unsigned long *)fp)[-1]);
-		if (lr < first_sched || lr > last_sched)
+		if (!in_sched_functions(lr))
 			return lr;
 		fp = *(unsigned long *) (fp - 12);
 	} while (count ++ < 16);
diff -Nru a/arch/cris/arch-v10/drivers/pcf8563.c b/arch/cris/arch-v10/drivers/pcf8563.c
--- a/arch/cris/arch-v10/drivers/pcf8563.c	Sun May 16 01:18:34 2004
+++ b/arch/cris/arch-v10/drivers/pcf8563.c	Sun May 16 01:18:34 2004
@@ -53,14 +53,10 @@
 	{ 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
 
 int pcf8563_ioctl(struct inode *, struct file *, unsigned int, unsigned long);
-int pcf8563_open(struct inode *, struct file *);
-int pcf8563_release(struct inode *, struct file *);
 
 static struct file_operations pcf8563_fops = {
 	.owner = THIS_MODULE,
 	.ioctl = pcf8563_ioctl,
-	.open = pcf8563_open,
-	.release = pcf8563_release,
 };
 
 unsigned char
@@ -266,20 +262,6 @@
 				return -ENOTTY;
 	}
 
-	return 0;
-}
-
-int 
-pcf8563_open(struct inode *inode, struct file *filp)
-{
-	MOD_INC_USE_COUNT;
-	return 0;
-}
-
-int
-pcf8563_release(struct inode *inode, struct file *filp)
-{
-	MOD_DEC_USE_COUNT;
 	return 0;
 }
 
diff -Nru a/arch/cris/arch-v10/kernel/process.c b/arch/cris/arch-v10/kernel/process.c
--- a/arch/cris/arch-v10/kernel/process.c	Sun May 16 01:18:35 2004
+++ b/arch/cris/arch-v10/kernel/process.c	Sun May 16 01:18:35 2004
@@ -217,8 +217,8 @@
  * These bracket the sleeping functions..
  */
 
-#define first_sched     ((unsigned long) scheduling_functions_start_here)
-#define last_sched      ((unsigned long) scheduling_functions_end_here)
+#define first_sched	((unsigned long)__sched_text_start)
+#define last_sched	((unsigned long)__sched_text_end)
 
 unsigned long get_wchan(struct task_struct *p)
 {
diff -Nru a/arch/h8300/Kconfig b/arch/h8300/Kconfig
--- a/arch/h8300/Kconfig	Sun May 16 01:18:36 2004
+++ b/arch/h8300/Kconfig	Sun May 16 01:18:36 2004
@@ -43,122 +43,7 @@
 
 source "init/Kconfig"
 
-menu "Processor type and features"
-
-choice
-	prompt "H8/300 platform"
-	default H8300H_GENERIC
-
-config H8300H_GENERIC
-	bool "Generic"
-	help
-	  H8/300H CPU Generic Hardware Support
-
-config H8300H_AKI3068NET
-	bool "AE-3068/69"
-	help
-	  AKI-H8/3068F / AKI-H8/3069F Flashmicom LAN Board Support
-	  More Information. (Japanese Only)
-	  <http://akizukidensi.com/catalog/h8.html>
-	  AE-3068/69 Evaluation Board Support
-	  More Information.
-	  <http://www.microtronique.com/ae3069lan.htm>
-
-config H8300H_H8MAX
-	bool "H8MAX"
-	help
-	  H8MAX Evaluation Board Support
-	  More Information. (Japanese Only)
-	  <http://strawberry-linux.com/h8/index.html>
-
-config H8300H_SIM
-	bool "H8/300H Simulator"
-	help
-	  GDB Simulator Support
-	  More Information.
-	  arch/h8300/Doc/simulator.txt
-
-config H8S_EDOSK2674
-	bool "EDOSK-2674"
-	help
-	  Renesas EDOSK-2674 Evaluation Board Support
-	  More Information.
-	  <http://www.azpower.com/H8-uClinux/index.html>
- 	  <http://www.eu.renesas.com/tools/edk/support/edosk2674.html>
-
-config H8S_SIM
-	bool "H8S Simulator"
-	help
-	  GDB Simulator Support
-	  More Information.
-	  arch/h8300/Doc/simulator.txt
-
-endchoice
-
-choice 
-	prompt "CPU Selection"
-
-config H83002
-	bool "H8/3001,3002,3003"
-	depends on H8300H_GENERIC
-
-config H83007
-	bool "H8/3006,3007"
-	depends on (H8300H_GENERIC || H8300H_SIM)
-
-config H83048
-	bool "H8/3044,3045,3046,3047,3048,3052"
-	depends on H8300H_GENERIC
-
-config H83068
-	bool "H8/3065,3066,3067,3068,3069"
-	depends on (H8300H_GENERIC || H8300H_AKI3068NET || H8300H_H8MAX)
-
-config H8S2678
-	bool "H8S/2670,2673,2674R,2675,2676"
-	depends on (H8S_GENERIC || H8S_EDOSK2674 || H8S_SIM)
-
-endchoice
-
-config CPU_H8300H
-	bool
-	depends on (H8300H_GENERIC || H8300H_AKI3068NET || H8300H_H8MAX || H8300H_SIM)
-	default y
-
-config CPU_H8S
-	bool
-	depends on (H8S_GENERIC || H8S_EDOSK2674 || H8S_SIM)
-	default y
-
-config CPU_CLOCK
-	int "CPU Clock Frequency (/1KHz)"	
-	default "20000" if H8300H_AKI3068NET
-	default "25000" if H8300H_H8MAX
-	default "16000" if H8300H_SIM
-	default "16000" if H8300H_GENERIC
-	default "33000" if H8S_GENERIC
-	default "33000" if H8S_SIM
-	default "33000" if H8S_EDOSK2674
-	help
-	  CPU Clock Frequency divide to 1000
-choice
-	prompt "Kernel executes from"
-	---help---
-	  Choose the memory type that the kernel will be running in.
-
-config RAMKERNEL
-	bool "RAM"
-	help
-	  The kernel will be resident in RAM when running.
-
-config ROMKERNEL
-	bool "ROM"
-	help
-	  The kernel will be resident in FLASH/ROM when running.
-
-endchoice
-
-endmenu
+source "arch/h8300/Kconfig.cpu"
 
 menu "Executable file formats"
 
diff -Nru a/arch/h8300/Kconfig.cpu b/arch/h8300/Kconfig.cpu
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/arch/h8300/Kconfig.cpu	Sun May 16 01:18:37 2004
@@ -0,0 +1,183 @@
+menu "Processor type and features"
+
+choice
+	prompt "H8/300 platform"
+	default H8300H_GENERIC
+
+config H8300H_GENERIC
+	bool "H8/300H Generic"
+	help
+	  H8/300H CPU Generic Hardware Support
+
+config H8300H_AKI3068NET
+	bool "AE-3068/69"
+	help
+	  AKI-H8/3068F / AKI-H8/3069F Flashmicom LAN Board Support
+	  More Information. (Japanese Only)
+	  <http://akizukidensi.com/catalog/h8.html>
+	  AE-3068/69 Evaluation Board Support
+	  More Information.
+	  <http://www.microtronique.com/ae3069lan.htm>
+
+config H8300H_H8MAX
+	bool "H8MAX"
+	help
+	  H8MAX Evaluation Board Support
+	  More Information. (Japanese Only)
+	  <http://strawberry-linux.com/h8/index.html>
+
+config H8300H_SIM
+	bool "H8/300H Simulator"
+	help
+	  GDB Simulator Support
+	  More Information.
+	  arch/h8300/Doc/simulator.txt
+
+config H8S_GENERIC
+	bool "H8S Generic"
+	help
+	  H8S CPU Generic Hardware Support
+
+config H8S_EDOSK2674
+	bool "EDOSK-2674"
+	help
+	  Renesas EDOSK-2674 Evaluation Board Support
+	  More Information.
+	  <http://www.azpower.com/H8-uClinux/index.html>
+ 	  <http://www.eu.renesas.com/tools/edk/support/edosk2674.html>
+
+config H8S_SIM
+	bool "H8S Simulator"
+	help
+	  GDB Simulator Support
+	  More Information.
+	  arch/h8300/Doc/simulator.txt
+
+endchoice
+
+if (H8300H_GENERIC || H8S_GENERIC)
+menu "Detail Selection"
+if (H8300H_GENERIC)
+choice
+	prompt "CPU Selection"
+
+config H83002
+	bool "H8/3001,3002,3003"
+
+config H83007
+	bool "H8/3006,3007"
+
+config H83048
+	bool "H8/3044,3045,3046,3047,3048,3052"
+
+config H83068
+	bool "H8/3065,3066,3067,3068,3069"
+endchoice
+endif
+
+if (H8S_GENERIC)
+choice
+	prompt "CPU Selection"
+
+config H8S2678
+	bool "H8S/2670,2673,2674R,2675,2676"
+endchoice
+endif
+
+config CPU_CLOCK
+	int "CPU Clock Frequency (/1KHz)"
+	default "20000"
+	help
+	  CPU Clock Frequency divide to 1000
+endmenu
+endif
+
+if (H8300H_GENERIC || H8S_GENERIC || H8300H_SIM || H8S_SIM || H8S_EDOSK2674)
+choice
+	prompt "Kernel executes from"
+	---help---
+	  Choose the memory type that the kernel will be running in.
+
+config RAMKERNEL
+	bool "RAM"
+	help
+	  The kernel will be resident in RAM when running.
+
+config ROMKERNEL
+	bool "ROM"
+	help
+	  The kernel will be resident in FLASH/ROM when running.
+
+endchoice
+endif
+
+if (H8300H_AKI3068NET)
+config H83068
+	bool
+	default y
+
+config CPU_CLOCK
+	int
+	default "20000"
+
+config RAMKERNEL
+	bool
+	default y
+endif
+
+if (H8300H_H8MAX)
+config H83068
+	bool
+	default y
+
+config CPU_CLOCK
+	int
+	default 25000
+
+config RAMKERNEL
+	bool
+	default y
+endif
+
+if (H8300H_SIM)
+config H83007
+	bool
+	default y
+
+config CPU_CLOCK
+	int
+	default "16000"
+endif
+
+if (H8S_EDOSK2674)
+config H8S2678
+	bool
+	default y
+config CPU_CLOCK
+	int
+	default 33000
+endif
+
+if (H8S_SIM)
+config H8S2678
+	bool
+	default y
+config CPU_CLOCK
+	int
+	default 33000
+endif
+
+config CPU_H8300H
+	bool
+	depends on (H8002 || H83007 || H83048 || H83068)
+	default y
+
+config CPU_H8S
+	bool
+	depends on H8S2678
+	default y
+
+config PREEMPT
+	bool "Preemptible Kernel"
+	default n
+endmenu
diff -Nru a/arch/h8300/Makefile b/arch/h8300/Makefile
--- a/arch/h8300/Makefile	Sun May 16 01:18:33 2004
+++ b/arch/h8300/Makefile	Sun May 16 01:18:33 2004
@@ -62,12 +62,7 @@
 archclean:
 	$(Q)$(MAKE) $(clean)=$(boot)
 
-prepare: include/asm-$(ARCH)/machine-depend.h include/asm-$(ARCH)/asm-offsets.h
-
-include/asm-$(ARCH)/machine-depend.h: include/asm-$(ARCH)/$(BOARD)/machine-depend.h
-	$(Q)ln -sf $(BOARD)/machine-depend.h \
-                   include/asm-$(ARCH)/machine-depend.h
-	@echo '  Create include/asm-$(ARCH)/machine-depend.h'
+prepare: include/asm-$(ARCH)/asm-offsets.h
 
 include/asm-$(ARCH)/asm-offsets.h: arch/$(ARCH)/kernel/asm-offsets.s \
 				   include/asm include/linux/version.h
@@ -81,4 +76,4 @@
   echo  'vmlinux.srec - Create srec binary'
 endef
 
-CLEAN_FILES += include/asm-$(ARCH)/asm-offsets.h include/asm-$(ARCH)/machine-depend.h
+CLEAN_FILES += include/asm-$(ARCH)/asm-offsets.h
diff -Nru a/arch/h8300/kernel/process.c b/arch/h8300/kernel/process.c
--- a/arch/h8300/kernel/process.c	Sun May 16 01:18:33 2004
+++ b/arch/h8300/kernel/process.c	Sun May 16 01:18:33 2004
@@ -55,9 +55,9 @@
 {
 	while(1) {
 		if (need_resched()) {
-			sti();
+			local_irq_enable();
 			__asm__("sleep");
-			cli();
+			local_irq_disable();
 		}
 		schedule();
 	}
@@ -112,14 +112,13 @@
 
 void show_regs(struct pt_regs * regs)
 {
-	printk("\n");
-	printk("PC: %08lx  Status: %02x\n",
+	printk("\nPC: %08lx  Status: %02x",
 	       regs->pc, regs->ccr);
-	printk("ORIG_ER0: %08lx ER0: %08lx ER1: %08lx\n",
+	printk("\nORIG_ER0: %08lx ER0: %08lx ER1: %08lx",
 	       regs->orig_er0, regs->er0, regs->er1);
-	printk("ER2: %08lx ER3: %08lx ER4: %08lx ER5: %08lx\n",
+	printk("\nER2: %08lx ER3: %08lx ER4: %08lx ER5: %08lx",
 	       regs->er2, regs->er3, regs->er4, regs->er5);
-	printk("ER6' %08lx ",regs->er6);
+	printk("\nER6' %08lx ",regs->er6);
 	if (user_mode(regs))
 		printk("USP: %08lx\n", rdusp());
 	else
@@ -261,12 +260,6 @@
 	return error;
 }
 
-/*
- * These bracket the sleeping functions..
- */
-#define first_sched	((unsigned long) scheduling_functions_start_here)
-#define last_sched	((unsigned long) scheduling_functions_end_here)
-
 unsigned long thread_saved_pc(struct task_struct *tsk)
 {
 	return ((struct pt_regs *)tsk->thread.esp0)->pc;
@@ -287,7 +280,7 @@
 		    fp >= 8184+stack_page)
 			return 0;
 		pc = ((unsigned long *)fp)[1];
-		if (pc < first_sched || pc >= last_sched)
+		if (!in_sched_functions(pc))
 			return pc;
 		fp = *(unsigned long *) fp;
 	} while (count++ < 16);
diff -Nru a/arch/h8300/kernel/signal.c b/arch/h8300/kernel/signal.c
--- a/arch/h8300/kernel/signal.c	Sun May 16 01:18:35 2004
+++ b/arch/h8300/kernel/signal.c	Sun May 16 01:18:35 2004
@@ -192,6 +192,7 @@
 	regs->er1 = context.sc_er1;
 	regs->er2 = context.sc_er2;
 	regs->er3 = context.sc_er3;
+	regs->er5 = context.sc_er5;
 	regs->ccr = (regs->ccr & 0x10)|(context.sc_ccr & 0xef);
 	regs->pc = context.sc_pc;
 	regs->orig_er0 = -1;		/* disable syscall checks */
@@ -308,6 +309,7 @@
 	sc->sc_er1 = regs->er1;
 	sc->sc_er2 = regs->er2;
 	sc->sc_er3 = regs->er3;
+	sc->sc_er5 = regs->er5;
 	sc->sc_ccr = regs->ccr;
 	sc->sc_pc = regs->pc;
 }
@@ -384,6 +386,7 @@
 			   ? current_thread_info()->exec_domain->signal_invmap[sig]
 		          : sig);
 	regs->er1 = (unsigned long)&(frame->sc);
+	regs->er5 = current->mm->start_data;	/* GOT base */
 
 	return;
 
@@ -435,6 +438,7 @@
 		     : sig);
 	regs->er1 = (unsigned long)&(frame->info);
 	regs->er2 = (unsigned long)&frame->uc;
+	regs->er5 = current->mm->start_data;	/* GOT base */
 
 	return;
 
diff -Nru a/arch/h8300/kernel/syscalls.S b/arch/h8300/kernel/syscalls.S
--- a/arch/h8300/kernel/syscalls.S	Sun May 16 01:18:34 2004
+++ b/arch/h8300/kernel/syscalls.S	Sun May 16 01:18:34 2004
@@ -265,8 +265,8 @@
 	.long SYMBOL_NAME(sys_io_getevents)
 	.long SYMBOL_NAME(sys_io_submit)
 	.long SYMBOL_NAME(sys_io_cancel)
-	.long SYMBOL_NAME(sys_ni_syscall)	/* 250 */ /* sys_alloc_hugepages */
-	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_freec_hugepages */
+	.long SYMBOL_NAME(sys_fadvise64)	/* 250 */
+	.long SYMBOL_NAME(sys_ni_syscall)
 	.long SYMBOL_NAME(sys_exit_group)
 	.long SYMBOL_NAME(sys_lookup_dcookie)
 	.long SYMBOL_NAME(sys_epoll_create)
@@ -287,36 +287,39 @@
 	.long SYMBOL_NAME(sys_fstatfs64)	
 	.long SYMBOL_NAME(sys_tgkill)		/* 270 */
 	.long SYMBOL_NAME(sys_utimes)
+ 	.long SYMBOL_NAME(sys_fadvise64_64)
+	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_vserver */
 
 	.rept NR_syscalls-(.-SYMBOL_NAME(sys_call_table))/4
 		.long SYMBOL_NAME(sys_ni_syscall)
 	.endr
 
+	.macro	call_sp addr
+	mov.l	#SYMBOL_NAME(\addr),er6
+	bra	SYMBOL_NAME(syscall_trampoline):8
+	.endm
+
 SYMBOL_NAME_LABEL(sys_clone)	
-	mov.l	#SYMBOL_NAME(h8300_clone),er0
-	jmp	@SYMBOL_NAME(syscall_trampoline)
+	call_sp	h8300_clone
 	
 SYMBOL_NAME_LABEL(sys_sigsuspend)
-	mov.l	#SYMBOL_NAME(do_sigsuspend),er0
-	jmp	@SYMBOL_NAME(syscall_trampoline)
+	call_sp	do_sigsuspend
 
 SYMBOL_NAME_LABEL(sys_rt_sigsuspend)
-	mov.l	#SYMBOL_NAME(do_rt_sigsuspend),er0
-	jmp	@SYMBOL_NAME(syscall_trampoline)
+	call_sp	do_rt_sigsuspend
 
 SYMBOL_NAME_LABEL(sys_sigreturn)
-	mov.l	#SYMBOL_NAME(do_sigreturn),er0
-	jmp	@SYMBOL_NAME(syscall_trampoline)
+	call_sp	do_sigreturn
 
 SYMBOL_NAME_LABEL(sys_rt_sigreturn)
-	mov.l	#SYMBOL_NAME(do_rt_sigreturn),er0
-	jmp	@SYMBOL_NAME(syscall_trampoline)
+	call_sp	do_rt_sigreturn
 
 SYMBOL_NAME_LABEL(sys_fork)
-	mov.l	#SYMBOL_NAME(h8300_fork),er0
-	jmp	@SYMBOL_NAME(syscall_trampoline)
+	call_sp	h8300_fork
 
 SYMBOL_NAME_LABEL(sys_vfork)
-	mov.l	#SYMBOL_NAME(h8300_vfork),er0
-	jmp	@SYMBOL_NAME(syscall_trampoline)
+	call_sp	h8300_vfork
 
+SYMBOL_NAME_LABEL(syscall_trampoline)
+	mov.l	sp,er0
+	jmp	@er6
diff -Nru a/arch/h8300/kernel/traps.c b/arch/h8300/kernel/traps.c
--- a/arch/h8300/kernel/traps.c	Sun May 16 01:18:33 2004
+++ b/arch/h8300/kernel/traps.c	Sun May 16 01:18:33 2004
@@ -156,8 +156,14 @@
 	printk("\n");
 }
 
+void show_trace_task(struct task_struct *tsk)
+{
+	show_stack(tsk,(unsigned long *)tsk->thread.esp0);
+}
+
 void dump_stack(void)
 {
 	show_stack(NULL,NULL);
 }
+
 EXPORT_SYMBOL(dump_stack);
diff -Nru a/arch/h8300/kernel/vmlinux.lds.S b/arch/h8300/kernel/vmlinux.lds.S
--- a/arch/h8300/kernel/vmlinux.lds.S	Sun May 16 01:18:35 2004
+++ b/arch/h8300/kernel/vmlinux.lds.S	Sun May 16 01:18:35 2004
@@ -1,3 +1,6 @@
+#define VMLINUX_SYMBOL(_sym_) _##_sym_
+#include <asm-generic/vmlinux.lds.h>
+#include <asm/thread_info.h>
 #include <linux/config.h>
 
 #ifdef CONFIG_H8300H_GENERIC
diff -Nru a/arch/h8300/mm/init.c b/arch/h8300/mm/init.c
--- a/arch/h8300/mm/init.c	Sun May 16 01:18:35 2004
+++ b/arch/h8300/mm/init.c	Sun May 16 01:18:35 2004
@@ -162,7 +162,7 @@
 	unsigned long end_mem   = memory_end; /* DAVIDM - this must not include kernel stack at top */
 
 #ifdef DEBUG
-	printk("Mem_init: start=%lx, end=%lx\n", start_mem, end_mem);
+	printk(KERN_DEBUG "Mem_init: start=%lx, end=%lx\n", start_mem, end_mem);
 #endif
 
 	end_mem &= PAGE_MASK;
@@ -179,7 +179,7 @@
 	initk = (&__init_begin - &__init_end) >> 10;
 
 	tmp = nr_free_pages() << PAGE_SHIFT;
-	printk("Memory available: %luk/%luk RAM, %luk/%luk ROM (%dk kernel code, %dk data)\n",
+	printk(KERN_INFO "Memory available: %luk/%luk RAM, %luk/%luk ROM (%dk kernel code, %dk data)\n",
 	       tmp >> 10,
 	       len >> 10,
 	       (rom_length > 0) ? ((rom_length >> 10) - codek) : 0,
@@ -223,7 +223,7 @@
 		free_page(addr);
 		totalram_pages++;
 	}
-	printk("Freeing unused kernel memory: %ldk freed (0x%x - 0x%x)\n",
+	printk(KERN_INFO "Freeing unused kernel memory: %ldk freed (0x%x - 0x%x)\n",
 			(addr - PAGE_ALIGN((long) &__init_begin)) >> 10,
 			(int)(PAGE_ALIGN((unsigned long)(&__init_begin))),
 			(int)(addr - PAGE_SIZE));
diff -Nru a/arch/h8300/platform/h8300h/aki3068net/timer.c b/arch/h8300/platform/h8300h/aki3068net/timer.c
--- a/arch/h8300/platform/h8300h/aki3068net/timer.c	Sun May 16 01:18:33 2004
+++ b/arch/h8300/platform/h8300h/aki3068net/timer.c	Sun May 16 01:18:33 2004
@@ -25,12 +25,19 @@
 
 #define CMFA 6
 
+#define CMIEA 0x40
+#define CCLR_CMA 0x08
+#define CLK_DIV8192 0x03
+
+#define H8300_TIMER_FREQ CONFIG_CPU_CLOCK*1000/8192 /* Timer input freq. */
+
 void __init platform_timer_setup(irqreturn_t (*timer_int)(int, void *, struct pt_regs *))
 {
-	ctrl_outb(H8300_TIMER_COUNT_DATA,TCORA2);
-	ctrl_outb(0x00,_8TCSR2);
-	request_irq(40,timer_int,0,"timer",0);
-	ctrl_outb(0x40|0x08|0x03,_8TCR2);
+	/* setup 8bit timer ch2 */
+	ctrl_outb(H8300_TIMER_FREQ / HZ, TCORA2);      /* set interval */
+	ctrl_outb(0x00, _8TCSR2);                      /* no output */
+	request_irq(40, timer_int, 0, "timer", 0);
+	ctrl_outb(CMIEA|CCLR_CMA|CLK_DIV8192, _8TCR2); /* start count */
 }
 
 void platform_timer_eoi(void)
diff -Nru a/arch/h8300/platform/h8300h/entry.S b/arch/h8300/platform/h8300h/entry.S
--- a/arch/h8300/platform/h8300h/entry.S	Sun May 16 01:18:34 2004
+++ b/arch/h8300/platform/h8300h/entry.S	Sun May 16 01:18:34 2004
@@ -109,12 +109,10 @@
 .globl SYMBOL_NAME(system_call)
 .globl SYMBOL_NAME(ret_from_exception)
 .globl SYMBOL_NAME(ret_from_fork)
-.globl SYMBOL_NAME(ret_from_signal)
 .globl SYMBOL_NAME(ret_from_interrupt)
 .globl SYMBOL_NAME(interrupt_redirect_table)
 .globl SYMBOL_NAME(sw_ksp),SYMBOL_NAME(sw_usp)
 .globl SYMBOL_NAME(resume)
-.globl SYMBOL_NAME(syscall_trampoline)
 .globl SYMBOL_NAME(interrupt_redirect_table)
 .globl SYMBOL_NAME(interrupt_entry)
 .globl SYMBOL_NAME(system_call)
@@ -173,7 +171,7 @@
 	beq	1f
 	jsr	@SYMBOL_NAME(do_softirq)
 1:
-	jmp	@SYMBOL_NAME(ret_from_exception)
+	jmp	@SYMBOL_NAME(ret_from_interrupt)
 	
 SYMBOL_NAME_LABEL(system_call)
 	subs	#4,sp				/* dummy LVEC */
@@ -205,11 +203,11 @@
 	mov.l	@(LER2:16,sp),er1
 	mov.l	@(LER3:16,sp),er2
 	jsr	@er4
-	mov.l	er0,@(LER0,sp)			/* save the return value */
+	mov.l	er0,@(LER0:16,sp)		/* save the return value */
 #if defined(CONFIG_SYSCALL_PRINT)
 	jsr	@SYMBOL_NAME(syscall_print)
 #endif
-	jmp	@SYMBOL_NAME(ret_from_exception)
+	bra	SYMBOL_NAME(ret_from_exception):8
 1:
 	jsr	SYMBOL_NAME(syscall_trace)
 	mov.l	@(LER1:16,sp),er0
@@ -218,44 +216,66 @@
 	jsr	@er4
 	mov.l	er0,@(LER0:16,sp)		/* save the return value */
 	jsr	@SYMBOL_NAME(syscall_trace)
+	bra	SYMBOL_NAME(ret_from_exception):8
+
+SYMBOL_NAME_LABEL(ret_from_fork)
+	mov.l	er2,er0
+	jsr	@SYMBOL_NAME(schedule_tail)
+	bra	SYMBOL_NAME(ret_from_exception):8
 
-SYMBOL_NAME_LABEL(ret_from_signal)
+SYMBOL_NAME_LABEL(reschedule)
+	/* save top of frame */
+	mov.l	sp,er0
+	jsr	@SYMBOL_NAME(set_esp0)
+	jsr	@SYMBOL_NAME(schedule)
 
 SYMBOL_NAME_LABEL(ret_from_exception)
+#if defined(CONFIG_PREEMPT)
+	orc	#0x80,ccr
+#endif
+SYMBOL_NAME_LABEL(ret_from_interrupt)
 	mov.b	@(LCCR+1:16,sp),r0l
 	btst	#4,r0l			/* check if returning to kernel */
-	bne	3f			/* if so, skip resched, signals */
+	bne	done:8			/* if so, skip resched, signals */
 	andc	#0x7f,ccr
-	mov.l	sp,er2
-	and.w	#0xe000,r2
-	mov.l	@(TI_FLAGS:16,er2),er1
+	mov.l	sp,er4
+	and.w	#0xe000,r4
+	mov.l	@(TI_FLAGS:16,er4),er1
 	and.l	#_TIF_WORK_MASK,er1
-	beq	3f
+	beq	done:8
 1:
-	mov.l	@(TI_FLAGS:16,er2),er1
+	mov.l	@(TI_FLAGS:16,er4),er1
 	btst	#TIF_NEED_RESCHED,r1l
 	bne	SYMBOL_NAME(reschedule):16
 	mov.l	sp,er1
 	subs	#4,er1			/* adjust retpc */
 	mov.l	er2,er0
 	jsr	@SYMBOL_NAME(do_signal)
-3:	 
+#if defined(CONFIG_PREEMPT)
+	bra	done:8			/* userspace thoru */
+3:
+	btst	#4,r0l
+	beq	done:8			/* userspace thoru */
+4:
+	mov.l	@(TI_PRE_COUNT:16,er4),er1
+	bne	done:8
+	mov.l	@(TI_FLAGS:16,er4),er1
+	btst	#TIF_NEED_RESCHED,r1l
+	beq	done:8
+	mov.b	r0l,r0l
+	bpl	done:8			/* interrupt off (exception path?) */
+	mov.l	#PREEMPT_ACTIVE,er1
+	mov.l	er1,@(TI_PRE_COUNT:16,er4)
+	andc	#0x7f,ccr
+	jsr	@SYMBOL_NAME(schedule)
+	sub.l	er1,er1
+	mov.l	er1,@(TI_PRE_COUNT:16,er4)
+	orc	#0x80,ccr
+	bra	4b:8
+#endif
+done:
 	RESTORE_ALL			/* Does RTE */
 
-SYMBOL_NAME_LABEL(reschedule)
-	/* save top of frame */
-	mov.l	sp,er0
-	jsr	@SYMBOL_NAME(set_esp0)
-
-	mov.l	#SYMBOL_NAME(ret_from_exception),er0
-	mov.l	er0,@-sp
-	jmp	@SYMBOL_NAME(schedule)
-
-SYMBOL_NAME_LABEL(ret_from_fork)
-	mov.l	er2,er0
-	jsr	@SYMBOL_NAME(schedule_tail)
-	jmp	@SYMBOL_NAME(ret_from_exception)	
-
 SYMBOL_NAME_LABEL(resume)
 	/*
 	 * Beware - when entering resume, offset of tss is in d1,
@@ -305,11 +325,6 @@
 	mov.l	er1,er0
 	jsr	@SYMBOL_NAME(trace_trap)
 	jmp	@SYMBOL_NAME(ret_from_exception)	
-
-SYMBOL_NAME_LABEL(syscall_trampoline)
-	mov.l	er0,er6
-	mov.l	sp,er0
-	jmp	@er6
 
 	.section	.bss
 SYMBOL_NAME_LABEL(sw_ksp)
diff -Nru a/arch/h8300/platform/h8300h/generic/timer.c b/arch/h8300/platform/h8300h/generic/timer.c
--- a/arch/h8300/platform/h8300h/generic/timer.c	Sun May 16 01:18:34 2004
+++ b/arch/h8300/platform/h8300h/generic/timer.c	Sun May 16 01:18:34 2004
@@ -22,22 +22,23 @@
 
 #include <linux/timex.h>
 
-extern int request_irq_boot(unsigned int,
-		             irqreturn_t (*handler)(int, void *, struct pt_regs *),
-		             unsigned long, const char *, void *);
-
-
 #if defined(CONFIG_H83007) || defined(CONFIG_H83068)
 #include <asm/regs306x.h>
 #define CMFA 6
 
+#define CMIEA 0x40
+#define CCLR_CMA 0x08
+#define CLK_DIV8192 0x03
+
+#define H8300_TIMER_FREQ CONFIG_CPU_CLOCK*1000/8192 /* Timer input freq. */
+
 int platform_timer_setup(irqreturn_t (*timer_int)(int, void *, struct pt_regs *))
 {
-	ctrl_outb(H8300_TIMER_COUNT_DATA,TCORA2);
-	ctrl_outb(0x00,_8TCSR2);
-	request_irq(40,timer_int,0,"timer",0);
-	ctrl_outb(0x40|0x08|0x03,_8TCR2);
-	return 0;
+	/* setup 8bit timer ch2 */
+	ctrl_outb(H8300_TIMER_FREQ / HZ, TCORA2);      /* set interval */
+	ctrl_outb(0x00, _8TCSR2);                      /* no output */
+	request_irq(40, timer_int, 0, "timer", 0);
+	ctrl_outb(CMIEA|CCLR_CMA|CLK_DIV8192, _8TCR2); /* start count */
 }
 
 void platform_timer_eoi(void)
@@ -46,7 +47,7 @@
 }
 #endif
 
-#if defined(H8_3002) || defined(CONFIG_H83048)
+#if defined(CONFIG_H83002) || defined(CONFIG_H83048)
 /* FIXME! */
 #define TSTR 0x00ffff60
 #define TSNC 0x00ffff61
@@ -54,6 +55,7 @@
 #define TFCR 0x00ffff63
 #define TOER 0x00ffff90
 #define TOCR 0x00ffff91
+/* ITU0 */
 #define TCR  0x00ffff64
 #define TIOR 0x00ffff65
 #define TIER 0x00ffff66
@@ -62,23 +64,28 @@
 #define GRA  0x00ffff6a
 #define GRB  0x00ffff6c
 
+#define CCLR_CMGRA 0x20
+#define CLK_DIV8 0x03
+
+#define H8300_TIMER_FREQ CONFIG_CPU_CLOCK*1000/8 /* Timer input freq. */
+
 int platform_timer_setup(irqreturn_t (*timer_int)(int, void *, struct pt_regs *))
 {
-	*(unsigned short *)GRA= H8300_TIMER_COUNT_DATA;
-	*(unsigned short *)TCNT=0;
-	ctrl_outb(0x23,TCR);
-	ctrl_outb(0x00,TIOR);
-	request_timer_irq(26,timer_int,0,"timer",0);
-	ctrl_outb(inb(TIER) | 0x01,TIER);
-	ctrl_outb(inb(TSNC) & ~0x01,TSNC);
-	ctrl_outb(inb(TMDR) & ~0x01,TMDR);
-	ctrl_outb(inb(TSTR) | 0x01,TSTR);
+	*(unsigned short *)GRA= H8300_TIMER_FREQ / HZ;  /* set interval */
+	*(unsigned short *)TCNT=0;                      /* clear counter */
+	ctrl_outb(0x80|CCLR_CMGRA|CLK_DIV8, TCR);       /* set ITU0 clock */
+	ctrl_outb(0x88, TIOR);                          /* no output */
+	request_irq(26, timer_int, 0, "timer", 0);
+	ctrl_outb(0xf9, TIER);                          /* compare match GRA interrupt */
+	ctrl_outb(ctrl_inb(TSNC) & ~0x01, TSNC);        /* ITU0 async */
+	ctrl_outb(ctrl_inb(TMDR) & ~0x01, TMDR);        /* ITU0 normal mode */
+	ctrl_outb(ctrl_inb(TSTR) | 0x01, TSTR);         /* ITU0 Start */
 	return 0;
 }
 
 void platform_timer_eoi(void)
 {
-	ctrl_outb(inb(TSR) & ~0x01,TSR);
+	ctrl_outb(ctrl_inb(TSR) & ~0x01,TSR);
 }
 #endif
 
diff -Nru a/arch/h8300/platform/h8300h/h8max/timer.c b/arch/h8300/platform/h8300h/h8max/timer.c
--- a/arch/h8300/platform/h8300h/h8max/timer.c	Sun May 16 01:18:33 2004
+++ b/arch/h8300/platform/h8300h/h8max/timer.c	Sun May 16 01:18:33 2004
@@ -25,12 +25,19 @@
 
 #define CMFA 6
 
+#define CMIEA 0x40
+#define CCLR_CMA 0x08
+#define CLK_DIV8192 0x03
+
+#define H8300_TIMER_FREQ CONFIG_CPU_CLOCK*1000/8192 /* Timer input freq. */
+
 void __init platform_timer_setup(irqreturn_t (*timer_int)(int, void *, struct pt_regs *))
 {
-	ctrl_outb(H8300_TIMER_COUNT_DATA,TCORA2);
-	ctrl_outb(0x00,_8TCSR2);
-	request_irq(40,timer_int,0,"timer",0);
-	ctrl_outb(0x40|0x08|0x03,_8TCR2);
+	/* setup 8bit timer ch2 */
+	ctrl_outb(H8300_TIMER_FREQ / HZ, TCORA2);      /* set interval */
+	ctrl_outb(0x00, _8TCSR2);                      /* no output */
+	request_irq(40, timer_int, 0, "timer", 0);
+	ctrl_outb(CMIEA|CCLR_CMA|CLK_DIV8192, _8TCR2); /* start count */
 }
 
 void platform_timer_eoi(void)
diff -Nru a/arch/h8300/platform/h8300h/ptrace_h8300h.c b/arch/h8300/platform/h8300h/ptrace_h8300h.c
--- a/arch/h8300/platform/h8300h/ptrace_h8300h.c	Sun May 16 01:18:34 2004
+++ b/arch/h8300/platform/h8300h/ptrace_h8300h.c	Sun May 16 01:18:34 2004
@@ -246,11 +246,13 @@
 					return (unsigned short *)addr;
 				case relb:
 					if ((inst = 0x55) || isbranch(child,inst & 0x0f))
-						(unsigned char *)pc += (signed char)(*fetch_p);
+						pc = (unsigned short *)((unsigned long)pc +
+								       ((signed char)(*fetch_p)));
 					return pc+1; /* skip myself */
 				case relw:
 					if ((inst = 0x5c) || isbranch(child,(*fetch_p & 0xf0) >> 4))
-						(unsigned char *)pc += (signed short)(*(pc+1));
+						pc = (unsigned short *)((unsigned long)pc +
+								       ((signed short)(*(pc+1))));
 					return pc+2; /* skip myself */
 				}
 			}
diff -Nru a/arch/h8300/platform/h8s/edosk2674/timer.c b/arch/h8300/platform/h8s/edosk2674/timer.c
--- a/arch/h8300/platform/h8s/edosk2674/timer.c	Sun May 16 01:18:35 2004
+++ b/arch/h8300/platform/h8s/edosk2674/timer.c	Sun May 16 01:18:35 2004
@@ -1,5 +1,5 @@
 /*
- *  linux/arch/h8300/platform/h8s/generic/timer.c
+ *  linux/arch/h8300/platform/h8s/edosk2674/timer.c
  *
  *  Yoshinori Sato <ysato@users.sourceforge.jp>
  *
@@ -23,25 +23,28 @@
 #include <asm/irq.h>
 #include <asm/regs267x.h>
 
-#define REGS(regs) __REGS(regs)
-#define __REGS(regs) #regs
+#define CMFA 6
 
-int __init platform_timer_setup(irqreturn_t (*timer_int)(int, void *, struct pt_regs *))
+#define CMIEA 0x40
+#define CCLR_CMA 0x08
+#define CLK_DIV8192 0x03
+
+#define H8300_TIMER_FREQ CONFIG_CPU_CLOCK*1000/8192 /* Timer input freq. */
+
+void __init platform_timer_setup(irqreturn_t (*timer_int)(int, void *, struct pt_regs *))
 {
-	unsigned char mstpcrl;
-	mstpcrl = ctrl_inb(MSTPCRL);                  /* Enable timer */
-	mstpcrl &= ~0x01;
-	ctrl_outb(mstpcrl,MSTPCRL);
-	ctrl_outb(H8300_TIMER_COUNT_DATA,_8TCORA1);
-	ctrl_outb(0x00,_8TCSR1);
-	request_irq(76,timer_int,0,"timer",0);
-	ctrl_outb(0x40|0x08|0x03,_8TCR1);
-	return 0;
+	/* 8bit timer module enabled */
+	ctrl_outb(ctrl_inb(MSTPCRL) & ~0x01, MSTPCRL);
+	/* setup 8bit timer ch1 */
+	ctrl_outb(H8300_TIMER_FREQ / HZ, _8TCORA1);      /* set interval */
+	ctrl_outb(0x00, _8TCSR1);                        /* no output */
+	request_irq(76, timer_int, 0, "timer" ,0);
+	ctrl_outb(CMIEA|CCLR_CMA|CLK_DIV8192, _8TCR1);   /* start count */
 }
 
 void platform_timer_eoi(void)
 {
-        __asm__("bclr #6,@" REGS(_8TCSR1) ":8");
+	*(volatile unsigned char *)_8TCSR1 &= ~(1 << CMFA);
 }
 
 void platform_gettod(int *year, int *mon, int *day, int *hour,
diff -Nru a/arch/h8300/platform/h8s/entry.S b/arch/h8300/platform/h8s/entry.S
--- a/arch/h8300/platform/h8s/entry.S	Sun May 16 01:18:36 2004
+++ b/arch/h8300/platform/h8s/entry.S	Sun May 16 01:18:36 2004
@@ -109,12 +109,10 @@
 .globl SYMBOL_NAME(system_call)
 .globl SYMBOL_NAME(ret_from_exception)
 .globl SYMBOL_NAME(ret_from_fork)
-.globl SYMBOL_NAME(ret_from_signal)
 .globl SYMBOL_NAME(ret_from_interrupt)
 .globl SYMBOL_NAME(interrupt_redirect_table)
 .globl SYMBOL_NAME(sw_ksp),SYMBOL_NAME(sw_usp)
 .globl SYMBOL_NAME(resume)
-.globl SYMBOL_NAME(syscall_trampoline)
 .globl SYMBOL_NAME(trace_break)
 .globl SYMBOL_NAME(interrupt_entry)
 		
@@ -201,11 +199,11 @@
 	mov.l	@(LER2:16,sp),er1
 	mov.l	@(LER3:16,sp),er2
 	jsr	@er4
-	mov.l	er0,@(LER0,sp)			/* save the return value */
+	mov.l	er0,@(LER0:16,sp)			/* save the return value */
 #if defined(CONFIG_SYSCALL_PRINT)
 	jsr	@SYMBOL_NAME(syscall_print)
 #endif
-	jmp	@SYMBOL_NAME(ret_from_exception)
+	bra	SYMBOL_NAME(ret_from_exception):8
 1:
 	jsr	SYMBOL_NAME(syscall_trace)
 	mov.l	@(LER1:16,sp),er0
@@ -214,45 +212,67 @@
 	jsr	@er4
 	mov.l	er0,@(LER0:16,sp)		/* save the return value */
 	jsr	@SYMBOL_NAME(syscall_trace)
+	bra	SYMBOL_NAME(ret_from_exception):8
+
 
-SYMBOL_NAME_LABEL(ret_from_signal)
+SYMBOL_NAME_LABEL(ret_from_fork)
+	mov.l	er2,er0
+	jsr	@SYMBOL_NAME(schedule_tail)
+	bra	SYMBOL_NAME(ret_from_exception):8
+
+SYMBOL_NAME_LABEL(reschedule)
+	/* save top of frame */
+	mov.l	sp,er0
+	jsr	@SYMBOL_NAME(set_esp0)
+	jsr	@SYMBOL_NAME(schedule)
 
 SYMBOL_NAME_LABEL(ret_from_exception)
+#if defined(CONFIG_PREEMPT)
+	orc	#0x80,ccr
+#endif
+SYMBOL_NAME_LABEL(ret_from_interrupt)
 	mov.b	@(LCCR+1:16,sp),r0l
 	btst	#4,r0l			/* check if returning to kernel */
-	bne	3f			/* if so, skip resched, signals */
+	bne	done:8			/* if so, skip resched, signals */
 	andc	#0x7f,ccr
-	mov.l	sp,er2
-	and.w	#0xe000,r2
-	mov.l	@(TI_FLAGS:16,er2),er1
+	mov.l	sp,er4
+	and.w	#0xe000,r4
+	mov.l	@(TI_FLAGS:16,er4),er1
 	and.l	#_TIF_WORK_MASK,er1
-	beq	3f
+	beq	done:8
 1:
-	mov.l	@(TI_FLAGS:16,er2),er1
+	mov.l	@(TI_FLAGS:16,er4),er1
 	btst	#TIF_NEED_RESCHED,r1l
 	bne	SYMBOL_NAME(reschedule):16
 	mov.l	sp,er1
 	subs	#4,er1			/* adjust retpc */
 	mov.l	er2,er0
 	jsr	@SYMBOL_NAME(do_signal)
-3:	 
+#if defined(CONFIG_PREEMPT)
+	bra	done:8			/* userspace thoru */
+3:
+	btst	#4,r0l
+	beq	done:8			/* userspace thoru */
+4:
+	mov.l	@(TI_PRE_COUNT:16,er4),er1
+	bne	done:8
+	mov.l	@(TI_FLAGS:16,er4),er1
+	btst	#TIF_NEED_RESCHED,r1l
+	beq	done:8
+	mov.b	r0l,r0l
+	bpl	done:8			/* interrupt off (exception path?) */
+	mov.l	#PREEMPT_ACTIVE,er1
+	mov.l	er1,@(TI_PRE_COUNT:16,er4)
+	andc	#0x7f,ccr
+	jsr	@SYMBOL_NAME(schedule)
+	sub.l	er1,er1
+	mov.l	er1,@(TI_PRE_COUNT:16,er4)
+	orc	#0x80,ccr
+	bra	4b:8
+#endif
+done:
 	RESTORE_ALL			/* Does RTE */
 
-SYMBOL_NAME_LABEL(reschedule)
-	/* save top of frame */
-	mov.l	sp,er0
-	jsr	@SYMBOL_NAME(set_esp0)
-
-	mov.l	#SYMBOL_NAME(ret_from_exception),er0
-	mov.l	er0,@-sp
-	jmp	@SYMBOL_NAME(schedule)
-
-SYMBOL_NAME_LABEL(ret_from_fork)
-	mov.l	er2,er0
-	jsr	@SYMBOL_NAME(schedule_tail)
-	jmp	@SYMBOL_NAME(ret_from_exception)	
-
-
 SYMBOL_NAME_LABEL(resume)
 	/*
 	 *	er0 = prev
@@ -284,7 +304,7 @@
 
 	ldc	r3l,ccr
 	ldc	r3h,exr
-	
+
 	rts
 
 SYMBOL_NAME_LABEL(trace_break)
@@ -303,11 +323,6 @@
 	mov.l	er1,er0
 	jsr	@SYMBOL_NAME(trace_trap)
 	jmp	@SYMBOL_NAME(ret_from_exception)	
-
-SYMBOL_NAME_LABEL(syscall_trampoline)
-	mov.l	er0,er6
-	mov.l	sp,er0
-	jmp	@er6
 
 	.section	.bss
 SYMBOL_NAME_LABEL(sw_ksp)
diff -Nru a/arch/h8300/platform/h8s/generic/timer.c b/arch/h8300/platform/h8s/generic/timer.c
--- a/arch/h8300/platform/h8s/generic/timer.c	Sun May 16 01:18:35 2004
+++ b/arch/h8300/platform/h8s/generic/timer.c	Sun May 16 01:18:35 2004
@@ -23,18 +23,28 @@
 #include <asm/irq.h>
 #include <asm/regs267x.h>
 
-int platform_timer_setup(irqreturn_t (*timer_int)(int, void *, struct pt_regs *))
+#define CMFA 6
+
+#define CMIEA 0x40
+#define CCLR_CMA 0x08
+#define CLK_DIV8192 0x03
+
+#define H8300_TIMER_FREQ CONFIG_CPU_CLOCK*1000/8192 /* Timer input freq. */
+
+void __init platform_timer_setup(irqreturn_t (*timer_int)(int, void *, struct pt_regs *))
 {
-	ctrl_outb(H8300_TIMER_COUNT_DATA,_8TCORA1);
-	ctrl_outb(0x00,_8TCSR1);
-	request_irq(76,timer_int,0,"timer",0);
-	ctrl_outb(0x40|0x08|0x03,_8TCR1);
-	return 0;
+	/* 8bit timer module enabled */
+	ctrl_outb(ctrl_inb(MSTPCRL) & ~0x01, MSTPCRL);
+	/* setup 8bit timer ch1 */
+	ctrl_outb(H8300_TIMER_FREQ / HZ, _8TCORA1);      /* set interval */
+	ctrl_outb(0x00, _8TCSR1);                        /* no output */
+	request_irq(76, timer_int, 0, "timer" ,0);
+	ctrl_outb(CMIEA|CCLR_CMA|CLK_DIV8192, _8TCR1);   /* start count */
 }
 
 void platform_timer_eoi(void)
 {
-        __asm__("bclr #6,@0xffffb3:8");
+	*(volatile unsigned char *)_8TCSR1 &= ~(1 << CMFA);
 }
 
 void platform_gettod(int *year, int *mon, int *day, int *hour,
diff -Nru a/arch/i386/Kconfig b/arch/i386/Kconfig
--- a/arch/i386/Kconfig	Sun May 16 01:18:33 2004
+++ b/arch/i386/Kconfig	Sun May 16 01:18:33 2004
@@ -102,10 +102,10 @@
 	  and vice versa. See <file:Documentation/sgi-visws.txt> for details.
 
 config X86_GENERICARCH
-       bool "Generic architecture (Summit, bigsmp, default)"
+       bool "Generic architecture (Summit, bigsmp, ES7000, default)"
        depends on SMP
        help
-          This option compiles in the Summit, bigsmp, default subarchitectures.
+          This option compiles in the Summit, bigsmp, ES7000, default subarchitectures.
 	  It is intended for a generic binary kernel.
 
 config X86_ES7000
@@ -479,6 +479,16 @@
 	  This is purely to save memory - each supported CPU adds
 	  approximately eight kilobytes to the kernel image.
 
+config SCHED_SMT
+	bool "SMT (Hyperthreading) scheduler support"
+	depends on SMP
+	default off
+	help
+	  SMT scheduler support improves the CPU scheduler's decision making
+	  when dealing with Intel Pentium 4 chips with HyperThreading at a
+	  cost of slightly increased overhead in some places. If unsure say
+	  N here.
+
 config PREEMPT
 	bool "Preemptible Kernel"
 	help
@@ -709,7 +719,7 @@
 
 # Common NUMA Features
 config NUMA
-	bool "Numa Memory Allocation Support"
+	bool "Numa Memory Allocation and Scheduler Support"
 	depends on SMP && HIGHMEM64G && (X86_NUMAQ || X86_GENERICARCH || (X86_SUMMIT && ACPI))
 	default n if X86_PC
 	default y if (X86_NUMAQ || X86_SUMMIT)
diff -Nru a/arch/i386/Makefile b/arch/i386/Makefile
--- a/arch/i386/Makefile	Sun May 16 01:18:34 2004
+++ b/arch/i386/Makefile	Sun May 16 01:18:34 2004
@@ -19,7 +19,7 @@
 OBJCOPYFLAGS	:= -O binary -R .note -R .comment -S
 LDFLAGS_vmlinux :=
 
-CFLAGS += -pipe
+CFLAGS += -pipe -msoft-float
 
 # prevent gcc from keeping the stack 16 byte aligned
 CFLAGS += $(call check_gcc,-mpreferred-stack-boundary=2,)
@@ -92,7 +92,8 @@
 
 # ES7000 subarch support
 mflags-$(CONFIG_X86_ES7000)	:= -Iinclude/asm-i386/mach-es7000
-mcore-$(CONFIG_X86_ES7000)	:= mach-es7000
+mcore-$(CONFIG_X86_ES7000)	:= mach-default
+core-$(CONFIG_X86_ES7000)	:= arch/i386/mach-es7000/
 
 # default subarch .h files
 mflags-y += -Iinclude/asm-i386/mach-default
diff -Nru a/arch/i386/boot/setup.S b/arch/i386/boot/setup.S
--- a/arch/i386/boot/setup.S	Sun May 16 01:18:35 2004
+++ b/arch/i386/boot/setup.S	Sun May 16 01:18:35 2004
@@ -133,7 +133,7 @@
 ramdisk_size:	.long	0		# its size in bytes
 
 bootsect_kludge:
-		.word  bootsect_helper, SETUPSEG
+		.long	0		# obsolete
 
 heap_end_ptr:	.word	modelist+1024	# (Header version 0x0201 or later)
 					# space from here (exclusive) down to
@@ -156,7 +156,8 @@
 					# can be located anywhere in
 					# low memory 0x10000 or higher.
 
-ramdisk_max:	.long MAXMEM-1		# (Header version 0x0203 or later)
+ramdisk_max:	.long (MAXMEM-1) & 0x7fffffff
+					# (Header version 0x0203 or later)
 					# The highest safe address for
 					# the contents of an initrd
 
@@ -837,7 +838,7 @@
 	subw	$DELTA_INITSEG, %si
 	shll	$4, %esi			# Convert to 32-bit pointer
 
-# jump to startup_32 in arch/i386/kernel/head.S
+# jump to startup_32 in arch/i386/boot/compressed/head.S
 #	
 # NOTE: For high loaded big kernels we need a
 #	jmpi    0x100000,__BOOT_CS
@@ -871,88 +872,6 @@
 						# sequence
 	outb	%al, $0x70
 	lret
-
-# This routine only gets called, if we get loaded by the simple
-# bootsect loader _and_ have a bzImage to load.
-# Because there is no place left in the 512 bytes of the boot sector,
-# we must emigrate to code space here.
-bootsect_helper:
-	cmpw	$0, %cs:bootsect_es
-	jnz	bootsect_second
-
-	movb	$0x20, %cs:type_of_loader
-	movw	%es, %ax
-	shrw	$4, %ax
-	movb	%ah, %cs:bootsect_src_base+2
-	movw	%es, %ax
-	movw	%ax, %cs:bootsect_es
-	subw	$SYSSEG, %ax
-	lret					# nothing else to do for now
-
-bootsect_second:
-	pushw	%cx
-	pushw	%si
-	pushw	%bx
-	testw	%bx, %bx			# 64K full?
-	jne	bootsect_ex
-
-	movw	$0x8000, %cx			# full 64K, INT15 moves words
-	pushw	%cs
-	popw	%es
-	movw	$bootsect_gdt, %si
-	movw	$0x8700, %ax
-	int	$0x15
-	jc	bootsect_panic			# this, if INT15 fails
-
-	movw	%cs:bootsect_es, %es		# we reset %es to always point
-	incb	%cs:bootsect_dst_base+2		# to 0x10000
-bootsect_ex:
-	movb	%cs:bootsect_dst_base+2, %ah
-	shlb	$4, %ah				# we now have the number of
-						# moved frames in %ax
-	xorb	%al, %al
-	popw	%bx
-	popw	%si
-	popw	%cx
-	lret
-
-bootsect_gdt:
-	.word	0, 0, 0, 0
-	.word	0, 0, 0, 0
-
-bootsect_src:
-	.word	0xffff
-
-bootsect_src_base:
-	.byte	0x00, 0x00, 0x01		# base = 0x010000
-	.byte	0x93				# typbyte
-	.word	0				# limit16,base24 =0
-
-bootsect_dst:
-	.word	0xffff
-
-bootsect_dst_base:
-	.byte	0x00, 0x00, 0x10		# base = 0x100000
-	.byte	0x93				# typbyte
-	.word	0				# limit16,base24 =0
-	.word	0, 0, 0, 0			# BIOS CS
-	.word	0, 0, 0, 0			# BIOS DS
-
-bootsect_es:
-	.word	0
-
-bootsect_panic:
-	pushw	%cs
-	popw	%ds
-	cld
-	leaw	bootsect_panic_mess, %si
-	call	prtstr
-	
-bootsect_panic_loop:
-	jmp	bootsect_panic_loop
-
-bootsect_panic_mess:
-	.string	"INT15 refuses to access high mem, giving up."
 
 
 #ifndef CONFIG_X86_VOYAGER
diff -Nru a/arch/i386/boot98/setup.S b/arch/i386/boot98/setup.S
--- a/arch/i386/boot98/setup.S	Sun May 16 01:18:33 2004
+++ b/arch/i386/boot98/setup.S	Sun May 16 01:18:33 2004
@@ -146,7 +146,7 @@
 ramdisk_size:	.long	0		# its size in bytes
 
 bootsect_kludge:
-		.word  bootsect_helper, SETUPSEG
+		.long	0		# obsolete
 
 heap_end_ptr:	.word	modelist+1024	# (Header version 0x0201 or later)
 					# space from here (exclusive) down to
@@ -691,91 +691,6 @@
 						# sequence
 	lret
 
-# This routine only gets called, if we get loaded by the simple
-# bootsect loader _and_ have a bzImage to load.
-# Because there is no place left in the 512 bytes of the boot sector,
-# we must emigrate to code space here.
-bootsect_helper:
-	cmpw	$0, %cs:bootsect_es
-	jnz	bootsect_second
-
-	movb	$0x20, %cs:type_of_loader
-	movw	%es, %ax
-	shrw	$4, %ax
-	movb	%ah, %cs:bootsect_src_base+2
-	movw	%es, %ax
-	movw	%ax, %cs:bootsect_es
-	subw	$SYSSEG, %ax
-	lret					# nothing else to do for now
-
-bootsect_second:
-	pushw	%bx
-	pushw	%cx
-	pushw	%si
-	pushw	%di
-	testw	%bp, %bp			# 64K full ?
-	jne	bootsect_ex
-
-	xorw	%cx, %cx			# zero means full 64K
-	pushw	%cs
-	popw	%es
-	movw	$bootsect_gdt, %bx
-	xorw	%si, %si			# source address
-	xorw	%di, %di			# destination address
-	movb	$0x90, %ah
-	int	$0x1f
-	jc	bootsect_panic			# this, if INT1F fails
-
-	movw	%cs:bootsect_es, %es		# we reset %es to always point
-	incb	%cs:bootsect_dst_base+2		# to 0x10000
-bootsect_ex:
-	movb	%cs:bootsect_dst_base+2, %ah
-	shlb	$4, %ah				# we now have the number of
-						# moved frames in %ax
-	xorb	%al, %al
-	popw	%di
-	popw	%si
-	popw	%cx
-	popw	%bx
-	lret
-
-bootsect_gdt:
-	.word	0, 0, 0, 0
-	.word	0, 0, 0, 0
-
-bootsect_src:
-	.word	0xffff
-
-bootsect_src_base:
-	.byte	0x00, 0x00, 0x01		# base = 0x010000
-	.byte	0x93				# typbyte
-	.word	0				# limit16,base24 =0
-
-bootsect_dst:
-	.word	0xffff
-
-bootsect_dst_base:
-	.byte	0x00, 0x00, 0x10		# base = 0x100000
-	.byte	0x93				# typbyte
-	.word	0				# limit16,base24 =0
-	.word	0, 0, 0, 0			# BIOS CS
-	.word	0, 0, 0, 0			# BIOS DS
-
-bootsect_es:
-	.word	0
-
-bootsect_panic:
-	pushw	%cs
-	popw	%ds
-	cld
-	leaw	bootsect_panic_mess, %si
-	call	prtstr
-
-bootsect_panic_loop:
-	jmp	bootsect_panic_loop
-
-bootsect_panic_mess:
-	.string	"INT1F refuses to access high mem, giving up."
 
 # This routine prints one character (in %al) on console.
 # PC-9800 doesn't have BIOS-function to do it like IBM PC's INT 10h - 0Eh,
diff -Nru a/arch/i386/kernel/acpi/boot.c b/arch/i386/kernel/acpi/boot.c
--- a/arch/i386/kernel/acpi/boot.c	Sun May 16 01:18:36 2004
+++ b/arch/i386/kernel/acpi/boot.c	Sun May 16 01:18:36 2004
@@ -417,16 +417,6 @@
 
 #endif /* CONFIG_ACPI_BUS */
 
-#ifdef CONFIG_X86_IO_APIC
-/* deprecated in favor of acpi_gsi_to_irq */
-int acpi_irq_to_vector(u32 irq)
-{
-	if (use_pci_vector() && !platform_legacy_irq(irq))
- 		irq = IO_APIC_VECTOR(irq);
-	return irq;
-}
-#endif
-
 int acpi_gsi_to_irq(u32 gsi, unsigned int *irq)
 {
 #ifdef CONFIG_X86_IO_APIC
diff -Nru a/arch/i386/kernel/cpu/common.c b/arch/i386/kernel/cpu/common.c
--- a/arch/i386/kernel/cpu/common.c	Sun May 16 01:18:33 2004
+++ b/arch/i386/kernel/cpu/common.c	Sun May 16 01:18:33 2004
@@ -138,8 +138,7 @@
 }
 
 
-
-void __init get_cpu_vendor(struct cpuinfo_x86 *c)
+void __init get_cpu_vendor(struct cpuinfo_x86 *c, int early)
 {
 	char *v = c->x86_vendor_id;
 	int i;
@@ -150,7 +149,8 @@
 			    (cpu_devs[i]->c_ident[1] && 
 			     !strcmp(v,cpu_devs[i]->c_ident[1]))) {
 				c->x86_vendor = i;
-				this_cpu = cpu_devs[i];
+				if (!early)
+					this_cpu = cpu_devs[i];
 				break;
 			}
 		}
@@ -194,6 +194,44 @@
 	return flag_is_changeable_p(X86_EFLAGS_ID);
 }
 
+/* Do minimum CPU detection early.
+   Fields really needed: vendor, cpuid_level, family, model, mask, cache alignment.
+   The others are not touched to avoid unwanted side effects. */
+void __init early_cpu_detect(void)
+{
+	struct cpuinfo_x86 *c = &boot_cpu_data;
+
+	if (!have_cpuid_p())
+		return;
+
+	/* Get vendor name */
+	cpuid(0x00000000, &c->cpuid_level,
+	      (int *)&c->x86_vendor_id[0],
+	      (int *)&c->x86_vendor_id[8],
+	      (int *)&c->x86_vendor_id[4]);
+
+	get_cpu_vendor(c, 1);
+
+	c->x86 = 4;
+	c->x86_cache_alignment = 32;
+
+	if (c->cpuid_level >= 0x00000001) {
+		u32 junk, tfms, cap0, misc;
+		cpuid(0x00000001, &tfms, &misc, &junk, &cap0);
+		c->x86 = (tfms >> 8) & 15;
+		c->x86_model = (tfms >> 4) & 15;
+		if (c->x86 == 0xf) {
+			c->x86 += (tfms >> 20) & 0xff;
+			c->x86_model += ((tfms >> 16) & 0xF) << 4;
+		}
+		c->x86_mask = tfms & 15;
+		if (cap0 & (1<<19))
+			c->x86_cache_alignment = ((misc >> 8) & 0xff) * 8;
+	}
+
+	early_intel_workaround(c);
+}
+
 void __init generic_identify(struct cpuinfo_x86 * c)
 {
 	u32 tfms, xlvl;
@@ -206,7 +244,7 @@
 		      (int *)&c->x86_vendor_id[8],
 		      (int *)&c->x86_vendor_id[4]);
 		
-		get_cpu_vendor(c);
+		get_cpu_vendor(c, 0);
 		/* Initialize the standard set of capabilities */
 		/* Note that the vendor-specific code below might override */
 	
@@ -384,7 +422,6 @@
  
 void __init dodgy_tsc(void)
 {
-	get_cpu_vendor(&boot_cpu_data);
 	if (( boot_cpu_data.x86_vendor == X86_VENDOR_CYRIX ) ||
 	    ( boot_cpu_data.x86_vendor == X86_VENDOR_NSC   ))
 		cpu_devs[X86_VENDOR_CYRIX]->c_init(&boot_cpu_data);
@@ -432,9 +469,11 @@
 extern int rise_init_cpu(void);
 extern int nexgen_init_cpu(void);
 extern int umc_init_cpu(void);
+void early_cpu_detect(void);
 
 void __init early_cpu_init(void)
 {
+	early_cpu_detect();
 	intel_cpu_init();
 	cyrix_init_cpu();
 	nsc_init_cpu();
diff -Nru a/arch/i386/kernel/cpu/cpu.h b/arch/i386/kernel/cpu/cpu.h
--- a/arch/i386/kernel/cpu/cpu.h	Sun May 16 01:18:33 2004
+++ b/arch/i386/kernel/cpu/cpu.h	Sun May 16 01:18:33 2004
@@ -26,3 +26,6 @@
 
 extern void generic_identify(struct cpuinfo_x86 * c);
 extern int have_cpuid_p(void);
+
+extern void early_intel_workaround(struct cpuinfo_x86 *c);
+
diff -Nru a/arch/i386/kernel/cpu/cpufreq/p4-clockmod.c b/arch/i386/kernel/cpu/cpufreq/p4-clockmod.c
--- a/arch/i386/kernel/cpu/cpufreq/p4-clockmod.c	Sun May 16 01:18:36 2004
+++ b/arch/i386/kernel/cpu/cpufreq/p4-clockmod.c	Sun May 16 01:18:36 2004
@@ -57,8 +57,7 @@
 	u32 l, h;
 	cpumask_t cpus_allowed, affected_cpu_map;
 	struct cpufreq_freqs freqs;
-	int hyperthreading = 0;
-	int sibling = 0;
+	int j;
 
 	if (!cpu_online(cpu) || (newstate > DC_DISABLE) || 
 		(newstate == DC_RESV))
@@ -68,13 +67,10 @@
 	cpus_allowed = current->cpus_allowed;
 
 	/* only run on CPU to be set, or on its sibling */
-       affected_cpu_map = cpumask_of_cpu(cpu);
-#ifdef CONFIG_X86_HT
-	hyperthreading = ((cpu_has_ht) && (smp_num_siblings == 2));
-	if (hyperthreading) {
-		sibling = cpu_sibling_map[cpu];
-                cpu_set(sibling, affected_cpu_map);
-	}
+#ifdef CONFIG_SMP
+	affected_cpu_map = cpu_sibling_map[cpu];
+#else
+	affected_cpu_map = cpumask_of_cpu(cpu);
 #endif
 	set_cpus_allowed(current, affected_cpu_map);
         BUG_ON(!cpu_isset(smp_processor_id(), affected_cpu_map));
@@ -97,11 +93,11 @@
 	/* notifiers */
 	freqs.old = stock_freq * l / 8;
 	freqs.new = stock_freq * newstate / 8;
-	freqs.cpu = cpu;
-	cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE);
-	if (hyperthreading) {
-		freqs.cpu = sibling;
-		cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE);
+	for_each_cpu(j) {
+		if (cpu_isset(j, affected_cpu_map)) {
+			freqs.cpu = j;
+			cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE);
+		}
 	}
 
 	rdmsr(MSR_IA32_THERM_STATUS, l, h);
@@ -132,10 +128,11 @@
 	set_cpus_allowed(current, cpus_allowed);
 
 	/* notifiers */
-	cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE);
-	if (hyperthreading) {
-		freqs.cpu = cpu;
-		cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE);
+	for_each_cpu(j) {
+		if (cpu_isset(j, affected_cpu_map)) {
+			freqs.cpu = j;
+			cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE);
+		}
 	}
 
 	return 0;
diff -Nru a/arch/i386/kernel/cpu/intel.c b/arch/i386/kernel/cpu/intel.c
--- a/arch/i386/kernel/cpu/intel.c	Sun May 16 01:18:34 2004
+++ b/arch/i386/kernel/cpu/intel.c	Sun May 16 01:18:34 2004
@@ -28,6 +28,15 @@
 struct movsl_mask movsl_mask;
 #endif
 
+void __init early_intel_workaround(struct cpuinfo_x86 *c)
+{
+	if (c->x86_vendor != X86_VENDOR_INTEL)
+		return;
+	/* Netburst reports 64 bytes clflush size, but does IO in 128 bytes */
+	if (c->x86 == 15 && c->x86_cache_alignment == 64)
+		c->x86_cache_alignment = 128;
+}
+
 /*
  *	Early probe support logic for ppro memory erratum #50
  *
@@ -36,42 +45,14 @@
  
 int __init ppro_with_ram_bug(void)
 {
-	char vendor_id[16];
-	int ident;
-
-	/* Must have CPUID */
-	if(!have_cpuid_p())
-		return 0;
-	if(cpuid_eax(0)<1)
-		return 0;
-	
-	/* Must be Intel */
-	cpuid(0, &ident, 
-		(int *)&vendor_id[0],
-		(int *)&vendor_id[8],
-		(int *)&vendor_id[4]);
-	
-	if(memcmp(vendor_id, "IntelInside", 12))
-		return 0;
-	
-	ident = cpuid_eax(1);
-
-	/* Model 6 */
-
-	if(((ident>>8)&15)!=6)
-		return 0;
-	
-	/* Pentium Pro */
-
-	if(((ident>>4)&15)!=1)
-		return 0;
-	
-	if((ident&15) < 8)
-	{
+	/* Uses data from early_cpu_detect now */
+	if (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL &&
+	    boot_cpu_data.x86 == 6 &&
+	    boot_cpu_data.x86_model == 1 &&
+	    boot_cpu_data.x86_mask < 8) {
 		printk(KERN_INFO "Pentium Pro with Errata#50 detected. Taking evasive action.\n");
 		return 1;
 	}
-	printk(KERN_INFO "Your Pentium Pro seems ok.\n");
 	return 0;
 }
 	
diff -Nru a/arch/i386/kernel/cpu/mcheck/p4.c b/arch/i386/kernel/cpu/mcheck/p4.c
--- a/arch/i386/kernel/cpu/mcheck/p4.c	Sun May 16 01:18:35 2004
+++ b/arch/i386/kernel/cpu/mcheck/p4.c	Sun May 16 01:18:35 2004
@@ -38,7 +38,8 @@
 #ifdef CONFIG_X86_MCE_P4THERMAL
 static void unexpected_thermal_interrupt(struct pt_regs *regs)
 {	
-	printk(KERN_ERR "CPU#%d: Unexpected LVT TMR interrupt!\n", smp_processor_id());
+	printk(KERN_ERR "CPU%d: Unexpected LVT TMR interrupt!\n",
+			smp_processor_id());
 }
 
 /* P4/Xeon Thermal transition interrupt handler */
@@ -46,15 +47,21 @@
 {
 	u32 l, h;
 	unsigned int cpu = smp_processor_id();
+	static unsigned long next[NR_CPUS];
 
 	ack_APIC_irq();
 
-	rdmsr (MSR_IA32_THERM_STATUS, l, h);
-	if (l & 1) {
-		printk(KERN_EMERG "CPU#%d: Temperature above threshold\n", cpu);
-		printk(KERN_EMERG "CPU#%d: Running in modulated clock mode\n", cpu);
+	if (time_after(next[cpu], jiffies))
+		return;
+
+	next[cpu] = jiffies + HZ*5;
+	rdmsr(MSR_IA32_THERM_STATUS, l, h);
+	if (l & 0x1) {
+		printk(KERN_EMERG "CPU%d: Temperature above threshold\n", cpu);
+		printk(KERN_EMERG "CPU%d: Running in modulated clock mode\n",
+				cpu);
 	} else {
-		printk(KERN_INFO "CPU#%d: Temperature/speed normal\n", cpu);
+		printk(KERN_INFO "CPU%d: Temperature/speed normal\n", cpu);
 	}
 }
 
@@ -89,13 +96,15 @@
 	rdmsr (MSR_IA32_MISC_ENABLE, l, h);
 	h = apic_read(APIC_LVTTHMR);
 	if ((l & (1<<3)) && (h & APIC_DM_SMI)) {
-		printk(KERN_DEBUG "CPU#%d: Thermal monitoring handled by SMI\n", cpu);
+		printk(KERN_DEBUG "CPU%d: Thermal monitoring handled by SMI\n",
+				cpu);
 		return; /* -EBUSY */
 	}
 
 	/* check whether a vector already exists, temporarily masked? */	
 	if (h & APIC_VECTOR_MASK) {
-		printk(KERN_DEBUG "CPU#%d: Thermal LVT vector (%#x) already installed\n",
+		printk(KERN_DEBUG "CPU%d: Thermal LVT vector (%#x) already "
+				"installed\n",
 			cpu, (h & APIC_VECTOR_MASK));
 		return; /* -EBUSY */
 	}
@@ -116,7 +125,7 @@
 	
 	l = apic_read (APIC_LVTTHMR);
 	apic_write_around (APIC_LVTTHMR, l & ~APIC_LVT_MASKED);
-	printk (KERN_INFO "CPU#%d: Thermal monitoring enabled\n", cpu);
+	printk (KERN_INFO "CPU%d: Thermal monitoring enabled\n", cpu);
 	return;
 }
 #endif /* CONFIG_X86_MCE_P4THERMAL */
@@ -247,7 +256,8 @@
 	rdmsr (MSR_IA32_MCG_CAP, l, h);
 	if (l & (1<<9))	{/* MCG_EXT_P */
 		mce_num_extended_msrs = (l >> 16) & 0xff;
-		printk (KERN_INFO "CPU#%d: Intel P4/Xeon Extended MCE MSRs (%d) available\n",
+		printk (KERN_INFO "CPU%d: Intel P4/Xeon Extended MCE MSRs (%d)"
+				" available\n",
 			smp_processor_id(), mce_num_extended_msrs);
 
 #ifdef CONFIG_X86_MCE_P4THERMAL
diff -Nru a/arch/i386/kernel/cpuid.c b/arch/i386/kernel/cpuid.c
--- a/arch/i386/kernel/cpuid.c	Sun May 16 01:18:33 2004
+++ b/arch/i386/kernel/cpuid.c	Sun May 16 01:18:33 2004
@@ -10,7 +10,6 @@
  *
  * ----------------------------------------------------------------------- */
 
-
 /*
  * cpuid.c
  *
@@ -46,131 +45,132 @@
 #ifdef CONFIG_SMP
 
 struct cpuid_command {
-  int cpu;
-  u32 reg;
-  u32 *data;
+	int cpu;
+	u32 reg;
+	u32 *data;
 };
 
 static void cpuid_smp_cpuid(void *cmd_block)
 {
-  struct cpuid_command *cmd = (struct cpuid_command *) cmd_block;
-  
-  if ( cmd->cpu == smp_processor_id() )
-    cpuid(cmd->reg, &cmd->data[0], &cmd->data[1], &cmd->data[2], &cmd->data[3]);
+	struct cpuid_command *cmd = (struct cpuid_command *)cmd_block;
+
+	if (cmd->cpu == smp_processor_id())
+		cpuid(cmd->reg, &cmd->data[0], &cmd->data[1], &cmd->data[2],
+		      &cmd->data[3]);
 }
 
-static inline void do_cpuid(int cpu, u32 reg, u32 *data)
+static inline void do_cpuid(int cpu, u32 reg, u32 * data)
 {
-  struct cpuid_command cmd;
-  
-  preempt_disable();
-  if ( cpu == smp_processor_id() ) {
-    cpuid(reg, &data[0], &data[1], &data[2], &data[3]);
-  } else {
-    cmd.cpu  = cpu;
-    cmd.reg  = reg;
-    cmd.data = data;
-    
-    smp_call_function(cpuid_smp_cpuid, &cmd, 1, 1);
-  }
-  preempt_enable();
+	struct cpuid_command cmd;
+
+	preempt_disable();
+	if (cpu == smp_processor_id()) {
+		cpuid(reg, &data[0], &data[1], &data[2], &data[3]);
+	} else {
+		cmd.cpu = cpu;
+		cmd.reg = reg;
+		cmd.data = data;
+
+		smp_call_function(cpuid_smp_cpuid, &cmd, 1, 1);
+	}
+	preempt_enable();
 }
-#else /* ! CONFIG_SMP */
+#else				/* ! CONFIG_SMP */
 
-static inline void do_cpuid(int cpu, u32 reg, u32 *data)
+static inline void do_cpuid(int cpu, u32 reg, u32 * data)
 {
-  cpuid(reg, &data[0], &data[1], &data[2], &data[3]);
+	cpuid(reg, &data[0], &data[1], &data[2], &data[3]);
 }
 
-#endif /* ! CONFIG_SMP */
+#endif				/* ! CONFIG_SMP */
 
 static loff_t cpuid_seek(struct file *file, loff_t offset, int orig)
 {
-  loff_t ret;
+	loff_t ret;
+
+	lock_kernel();
 
-  lock_kernel();
+	switch (orig) {
+	case 0:
+		file->f_pos = offset;
+		ret = file->f_pos;
+		break;
+	case 1:
+		file->f_pos += offset;
+		ret = file->f_pos;
+		break;
+	default:
+		ret = -EINVAL;
+	}
+
+	unlock_kernel();
+	return ret;
+}
+
+static ssize_t cpuid_read(struct file *file, char *buf,
+			  size_t count, loff_t * ppos)
+{
+	u32 *tmp = (u32 *) buf;
+	u32 data[4];
+	size_t rv;
+	u32 reg = *ppos;
+	int cpu = iminor(file->f_dentry->d_inode);
+
+	if (count % 16)
+		return -EINVAL;	/* Invalid chunk size */
+
+	for (rv = 0; count; count -= 16) {
+		do_cpuid(cpu, reg, data);
+		if (copy_to_user(tmp, &data, 16))
+			return -EFAULT;
+		tmp += 4;
+		*ppos = reg++;
+	}
 
-  switch (orig) {
-  case 0:
-    file->f_pos = offset;
-    ret = file->f_pos;
-    break;
-  case 1:
-    file->f_pos += offset;
-    ret = file->f_pos;
-    break;
-  default:
-    ret = -EINVAL;
-  }
-
-  unlock_kernel();
-  return ret;
-}
-
-static ssize_t cpuid_read(struct file * file, char * buf,
-			size_t count, loff_t *ppos)
-{
-  u32 *tmp = (u32 *)buf;
-  u32 data[4];
-  size_t rv;
-  u32 reg = *ppos;
-  int cpu = iminor(file->f_dentry->d_inode);
-  
-  if ( count % 16 )
-    return -EINVAL; /* Invalid chunk size */
-  
-  for ( rv = 0 ; count ; count -= 16 ) {
-    do_cpuid(cpu, reg, data);
-    if ( copy_to_user(tmp,&data,16) )
-      return -EFAULT;
-    tmp += 4;
-    *ppos = reg++;
-  }
-  
-  return ((char *)tmp) - buf;
+	return ((char *)tmp) - buf;
 }
 
 static int cpuid_open(struct inode *inode, struct file *file)
 {
-  int cpu = iminor(file->f_dentry->d_inode);
-  struct cpuinfo_x86 *c = &(cpu_data)[cpu];
+	int cpu = iminor(file->f_dentry->d_inode);
+	struct cpuinfo_x86 *c = &(cpu_data)[cpu];
+
+	if (!cpu_online(cpu))
+		return -ENXIO;	/* No such CPU */
+	if (c->cpuid_level < 0)
+		return -EIO;	/* CPUID not supported */
 
-  if (!cpu_online(cpu))
-    return -ENXIO;		/* No such CPU */
-  if ( c->cpuid_level < 0 )
-    return -EIO;		/* CPUID not supported */
-  
-  return 0;
+	return 0;
 }
 
 /*
  * File operations we support
  */
 static struct file_operations cpuid_fops = {
-  .owner	= THIS_MODULE,
-  .llseek	= cpuid_seek,
-  .read		= cpuid_read,
-  .open		= cpuid_open,
+	.owner = THIS_MODULE,
+	.llseek = cpuid_seek,
+	.read = cpuid_read,
+	.open = cpuid_open,
 };
 
 int __init cpuid_init(void)
 {
-  if (register_chrdev(CPUID_MAJOR, "cpu/cpuid", &cpuid_fops)) {
-    printk(KERN_ERR "cpuid: unable to get major %d for cpuid\n",
-	   CPUID_MAJOR);
-    return -EBUSY;
-  }
+	if (register_chrdev(CPUID_MAJOR, "cpu/cpuid", &cpuid_fops)) {
+		printk(KERN_ERR "cpuid: unable to get major %d for cpuid\n",
+		       CPUID_MAJOR);
+		return -EBUSY;
+	}
 
-  return 0;
+	return 0;
 }
 
 void __exit cpuid_exit(void)
 {
-  unregister_chrdev(CPUID_MAJOR, "cpu/cpuid");
+	unregister_chrdev(CPUID_MAJOR, "cpu/cpuid");
 }
 
 module_init(cpuid_init);
-module_exit(cpuid_exit)
+module_exit(cpuid_exit);
 
 MODULE_AUTHOR("H. Peter Anvin <hpa@zytor.com>");
 MODULE_DESCRIPTION("x86 generic CPUID driver");
diff -Nru a/arch/i386/kernel/io_apic.c b/arch/i386/kernel/io_apic.c
--- a/arch/i386/kernel/io_apic.c	Sun May 16 01:18:34 2004
+++ b/arch/i386/kernel/io_apic.c	Sun May 16 01:18:34 2004
@@ -317,8 +317,7 @@
 
 #define IRQ_ALLOWED(cpu, allowed_mask)	cpu_isset(cpu, allowed_mask)
 
-#define CPU_TO_PACKAGEINDEX(i) \
-		((physical_balance && i > cpu_sibling_map[i]) ? cpu_sibling_map[i] : i)
+#define CPU_TO_PACKAGEINDEX(i) (first_cpu(cpu_sibling_map[i]))
 
 #define MAX_BALANCED_IRQ_INTERVAL	(5*HZ)
 #define MIN_BALANCED_IRQ_INTERVAL	(HZ/2)
@@ -401,6 +400,7 @@
 	unsigned long max_cpu_irq = 0, min_cpu_irq = (~0);
 	unsigned long move_this_load = 0;
 	int max_loaded = 0, min_loaded = 0;
+	int load;
 	unsigned long useful_load_threshold = balanced_irq_interval + 10;
 	int selected_irq;
 	int tmp_loaded, first_attempt = 1;
@@ -452,7 +452,7 @@
 	for (i = 0; i < NR_CPUS; i++) {
 		if (!cpu_online(i))
 			continue;
-		if (physical_balance && i > cpu_sibling_map[i])
+		if (i != CPU_TO_PACKAGEINDEX(i))
 			continue;
 		if (min_cpu_irq > CPU_IRQ(i)) {
 			min_cpu_irq = CPU_IRQ(i);
@@ -471,7 +471,7 @@
 	for (i = 0; i < NR_CPUS; i++) {
 		if (!cpu_online(i))
 			continue;
-		if (physical_balance && i > cpu_sibling_map[i])
+		if (i != CPU_TO_PACKAGEINDEX(i))
 			continue;
 		if (max_cpu_irq <= CPU_IRQ(i)) 
 			continue;
@@ -551,9 +551,14 @@
 	 * We seek the least loaded sibling by making the comparison
 	 * (A+B)/2 vs B
 	 */
-	if (physical_balance && (CPU_IRQ(min_loaded) >> 1) >
-					CPU_IRQ(cpu_sibling_map[min_loaded]))
-		min_loaded = cpu_sibling_map[min_loaded];
+	load = CPU_IRQ(min_loaded) >> 1;
+	for_each_cpu_mask(j, cpu_sibling_map[min_loaded]) {
+		if (load > CPU_IRQ(j)) {
+			/* This won't change cpu_sibling_map[min_loaded] */
+			load = CPU_IRQ(j);
+			min_loaded = j;
+		}
+	}
 
 	cpus_and(allowed_mask, cpu_online_map, irq_affinity[selected_irq]);
 	target_cpu_mask = cpumask_of_cpu(min_loaded);
diff -Nru a/arch/i386/kernel/nmi.c b/arch/i386/kernel/nmi.c
--- a/arch/i386/kernel/nmi.c	Sun May 16 01:18:35 2004
+++ b/arch/i386/kernel/nmi.c	Sun May 16 01:18:35 2004
@@ -33,7 +33,8 @@
 
 unsigned int nmi_watchdog = NMI_NONE;
 static unsigned int nmi_hz = HZ;
-unsigned int nmi_perfctr_msr;	/* the MSR to reset in NMI handler */
+static unsigned int nmi_perfctr_msr;	/* the MSR to reset in NMI handler */
+static unsigned int nmi_p4_cccr_val;
 extern void show_registers(struct pt_regs *regs);
 
 /*
@@ -80,7 +81,8 @@
 #define P4_ESCR_EVENT_SELECT(N)	((N)<<25)
 #define P4_ESCR_OS		(1<<3)
 #define P4_ESCR_USR		(1<<2)
-#define P4_CCCR_OVF_PMI		(1<<26)
+#define P4_CCCR_OVF_PMI0	(1<<26)
+#define P4_CCCR_OVF_PMI1	(1<<27)
 #define P4_CCCR_THRESHOLD(N)	((N)<<20)
 #define P4_CCCR_COMPLEMENT	(1<<19)
 #define P4_CCCR_COMPARE		(1<<18)
@@ -93,7 +95,7 @@
 #define MSR_P4_IQ_COUNTER0	0x30C
 #define P4_NMI_CRU_ESCR0	(P4_ESCR_EVENT_SELECT(0x3F)|P4_ESCR_OS|P4_ESCR_USR)
 #define P4_NMI_IQ_CCCR0	\
-	(P4_CCCR_OVF_PMI|P4_CCCR_THRESHOLD(15)|P4_CCCR_COMPLEMENT|	\
+	(P4_CCCR_OVF_PMI0|P4_CCCR_THRESHOLD(15)|P4_CCCR_COMPLEMENT|	\
 	 P4_CCCR_COMPARE|P4_CCCR_REQUIRED|P4_CCCR_ESCR_SELECT(4)|P4_CCCR_ENABLE)
 
 int __init check_nmi_watchdog (void)
@@ -364,6 +366,11 @@
 		return 0;
 
 	nmi_perfctr_msr = MSR_P4_IQ_COUNTER0;
+	nmi_p4_cccr_val = P4_NMI_IQ_CCCR0;
+#ifdef CONFIG_SMP
+	if (smp_num_siblings == 2)
+		nmi_p4_cccr_val |= P4_CCCR_OVF_PMI1;
+#endif
 
 	if (!(misc_enable & MSR_P4_MISC_ENABLE_PEBS_UNAVAIL))
 		clear_msr_range(0x3F1, 2);
@@ -381,7 +388,7 @@
 	Dprintk("setting P4_IQ_COUNTER0 to 0x%08lx\n", -(cpu_khz/nmi_hz*1000));
 	wrmsr(MSR_P4_IQ_COUNTER0, -(cpu_khz/nmi_hz*1000), -1);
 	apic_write(APIC_LVTPC, APIC_DM_NMI);
-	wrmsr(MSR_P4_IQ_CCCR0, P4_NMI_IQ_CCCR0, 0);
+	wrmsr(MSR_P4_IQ_CCCR0, nmi_p4_cccr_val, 0);
 	return 1;
 }
 
@@ -498,7 +505,7 @@
 			 * - LVTPC is masked on interrupt and must be
 			 *   unmasked by the LVTPC handler.
 			 */
-			wrmsr(MSR_P4_IQ_CCCR0, P4_NMI_IQ_CCCR0, 0);
+			wrmsr(MSR_P4_IQ_CCCR0, nmi_p4_cccr_val, 0);
 			apic_write(APIC_LVTPC, APIC_DM_NMI);
 		}
 		else if (nmi_perfctr_msr == MSR_P6_PERFCTR0) {
diff -Nru a/arch/i386/kernel/process.c b/arch/i386/kernel/process.c
--- a/arch/i386/kernel/process.c	Sun May 16 01:18:33 2004
+++ b/arch/i386/kernel/process.c	Sun May 16 01:18:33 2004
@@ -633,11 +633,6 @@
 	return error;
 }
 
-/*
- * These bracket the sleeping functions..
- */
-#define first_sched	((unsigned long) scheduling_functions_start_here)
-#define last_sched	((unsigned long) scheduling_functions_end_here)
 #define top_esp                (THREAD_SIZE - sizeof(unsigned long))
 #define top_ebp                (THREAD_SIZE - 2*sizeof(unsigned long))
 
@@ -658,14 +653,12 @@
 		if (ebp < stack_page || ebp > top_ebp+stack_page)
 			return 0;
 		eip = *(unsigned long *) (ebp+4);
-		if (eip < first_sched || eip >= last_sched)
+		if (!in_sched_functions(eip))
 			return eip;
 		ebp = *(unsigned long *) ebp;
 	} while (count++ < 16);
 	return 0;
 }
-#undef last_sched
-#undef first_sched
 
 /*
  * sys_alloc_thread_area: get a yet unused TLS descriptor index.
@@ -744,7 +737,7 @@
 	((desc)->a & 0x0ffff) | \
 	 ((desc)->b & 0xf0000) )
 	
-#define GET_32BIT(desc)		(((desc)->b >> 23) & 1)
+#define GET_32BIT(desc)		(((desc)->b >> 22) & 1)
 #define GET_CONTENTS(desc)	(((desc)->b >> 10) & 3)
 #define GET_WRITABLE(desc)	(((desc)->b >>  9) & 1)
 #define GET_LIMIT_PAGES(desc)	(((desc)->b >> 23) & 1)
diff -Nru a/arch/i386/kernel/ptrace.c b/arch/i386/kernel/ptrace.c
--- a/arch/i386/kernel/ptrace.c	Sun May 16 01:18:34 2004
+++ b/arch/i386/kernel/ptrace.c	Sun May 16 01:18:34 2004
@@ -174,7 +174,7 @@
 	((desc)->a & 0x0ffff) | \
 	 ((desc)->b & 0xf0000) )
 
-#define GET_32BIT(desc)		(((desc)->b >> 23) & 1)
+#define GET_32BIT(desc)		(((desc)->b >> 22) & 1)
 #define GET_CONTENTS(desc)	(((desc)->b >> 10) & 3)
 #define GET_WRITABLE(desc)	(((desc)->b >>  9) & 1)
 #define GET_LIMIT_PAGES(desc)	(((desc)->b >> 23) & 1)
diff -Nru a/arch/i386/kernel/setup.c b/arch/i386/kernel/setup.c
--- a/arch/i386/kernel/setup.c	Sun May 16 01:18:35 2004
+++ b/arch/i386/kernel/setup.c	Sun May 16 01:18:35 2004
@@ -65,6 +65,7 @@
 
 #ifdef CONFIG_EFI
 int efi_enabled = 0;
+EXPORT_SYMBOL(efi_enabled);
 #endif
 
 /* cpu data as detected by the assembly code in head.S */
diff -Nru a/arch/i386/kernel/smp.c b/arch/i386/kernel/smp.c
--- a/arch/i386/kernel/smp.c	Sun May 16 01:18:33 2004
+++ b/arch/i386/kernel/smp.c	Sun May 16 01:18:33 2004
@@ -519,6 +519,9 @@
 	if (!cpus)
 		return 0;
 
+	/* Can deadlock when called with interrupts disabled */
+	WARN_ON(irqs_disabled());
+
 	data.func = func;
 	data.info = info;
 	atomic_set(&data.started, 0);
diff -Nru a/arch/i386/kernel/smpboot.c b/arch/i386/kernel/smpboot.c
--- a/arch/i386/kernel/smpboot.c	Sun May 16 01:18:35 2004
+++ b/arch/i386/kernel/smpboot.c	Sun May 16 01:18:35 2004
@@ -39,6 +39,7 @@
 #include <linux/kernel.h>
 
 #include <linux/mm.h>
+#include <linux/sched.h>
 #include <linux/kernel_stat.h>
 #include <linux/smp_lock.h>
 #include <linux/irq.h>
@@ -936,7 +937,7 @@
 /* Where the IO area was mapped on multiquad, always 0 otherwise */
 void *xquad_portio;
 
-int cpu_sibling_map[NR_CPUS] __cacheline_aligned;
+cpumask_t cpu_sibling_map[NR_CPUS] __cacheline_aligned;
 
 static void __init smp_boot_cpus(unsigned int max_cpus)
 {
@@ -955,6 +956,8 @@
 
 	current_thread_info()->cpu = 0;
 	smp_tune_scheduling();
+	cpus_clear(cpu_sibling_map[0]);
+	cpu_set(0, cpu_sibling_map[0]);
 
 	/*
 	 * If we couldn't find an SMP configuration at boot time,
@@ -1081,34 +1084,39 @@
 	Dprintk("Boot done.\n");
 
 	/*
-	 * If Hyper-Threading is avaialble, construct cpu_sibling_map[], so
-	 * that we can tell the sibling CPU efficiently.
+	 * construct cpu_sibling_map[], so that we can tell sibling CPUs
+	 * efficiently.
 	 */
-	if (cpu_has_ht && smp_num_siblings > 1) {
-		for (cpu = 0; cpu < NR_CPUS; cpu++)
-			cpu_sibling_map[cpu] = NO_PROC_ID;
-		
-		for (cpu = 0; cpu < NR_CPUS; cpu++) {
-			int 	i;
-			if (!cpu_isset(cpu, cpu_callout_map))
-				continue;
+	for (cpu = 0; cpu < NR_CPUS; cpu++)
+		cpus_clear(cpu_sibling_map[cpu]);
+
+	for (cpu = 0; cpu < NR_CPUS; cpu++) {
+		int siblings = 0;
+		int i;
+		if (!cpu_isset(cpu, cpu_callout_map))
+			continue;
 
+		if (smp_num_siblings > 1) {
 			for (i = 0; i < NR_CPUS; i++) {
-				if (i == cpu || !cpu_isset(i, cpu_callout_map))
+				if (!cpu_isset(i, cpu_callout_map))
 					continue;
 				if (phys_proc_id[cpu] == phys_proc_id[i]) {
-					cpu_sibling_map[cpu] = i;
-					printk("cpu_sibling_map[%d] = %d\n", cpu, cpu_sibling_map[cpu]);
-					break;
+					siblings++;
+					cpu_set(i, cpu_sibling_map[cpu]);
 				}
 			}
-			if (cpu_sibling_map[cpu] == NO_PROC_ID) {
-				smp_num_siblings = 1;
-				printk(KERN_WARNING "WARNING: No sibling found for CPU %d.\n", cpu);
-			}
+		} else {
+			siblings++;
+			cpu_set(cpu, cpu_sibling_map[cpu]);
 		}
+
+		if (siblings != smp_num_siblings)
+			printk(KERN_WARNING "WARNING: %d siblings found for CPU%d, should be %d\n", siblings, cpu, smp_num_siblings);
 	}
 
+	if (nmi_watchdog == NMI_LOCAL_APIC)
+		check_nmi_watchdog();
+
 	smpboot_setup_io_apic();
 
 	setup_boot_APIC_clock();
@@ -1119,6 +1127,209 @@
 	if (cpu_has_tsc && cpucount && cpu_khz)
 		synchronize_tsc_bp();
 }
+
+#ifdef CONFIG_SCHED_SMT
+#ifdef CONFIG_NUMA
+static struct sched_group sched_group_cpus[NR_CPUS];
+static struct sched_group sched_group_phys[NR_CPUS];
+static struct sched_group sched_group_nodes[MAX_NUMNODES];
+static DEFINE_PER_CPU(struct sched_domain, cpu_domains);
+static DEFINE_PER_CPU(struct sched_domain, phys_domains);
+static DEFINE_PER_CPU(struct sched_domain, node_domains);
+__init void arch_init_sched_domains(void)
+{
+	int i;
+	struct sched_group *first = NULL, *last = NULL;
+
+	/* Set up domains */
+	for_each_cpu(i) {
+		struct sched_domain *cpu_domain = &per_cpu(cpu_domains, i);
+		struct sched_domain *phys_domain = &per_cpu(phys_domains, i);
+		struct sched_domain *node_domain = &per_cpu(node_domains, i);
+		int node = cpu_to_node(i);
+		cpumask_t nodemask = node_to_cpumask(node);
+
+		*cpu_domain = SD_SIBLING_INIT;
+		cpu_domain->span = cpu_sibling_map[i];
+		cpu_domain->parent = phys_domain;
+		cpu_domain->groups = &sched_group_cpus[i];
+
+		*phys_domain = SD_CPU_INIT;
+		phys_domain->span = nodemask;
+		phys_domain->parent = node_domain;
+		phys_domain->groups = &sched_group_phys[first_cpu(cpu_domain->span)];
+
+		*node_domain = SD_NODE_INIT;
+		node_domain->span = cpu_possible_map;
+		node_domain->groups = &sched_group_nodes[cpu_to_node(i)];
+	}
+
+	/* Set up CPU (sibling) groups */
+	for_each_cpu(i) {
+		struct sched_domain *cpu_domain = &per_cpu(cpu_domains, i);
+		int j;
+		first = last = NULL;
+
+		if (i != first_cpu(cpu_domain->span))
+			continue;
+
+		for_each_cpu_mask(j, cpu_domain->span) {
+			struct sched_group *cpu = &sched_group_cpus[j];
+
+			cpu->cpumask = CPU_MASK_NONE;
+			cpu_set(j, cpu->cpumask);
+			cpu->cpu_power = SCHED_LOAD_SCALE;
+
+			if (!first)
+				first = cpu;
+			if (last)
+				last->next = cpu;
+			last = cpu;
+		}
+		last->next = first;
+	}
+
+	for (i = 0; i < MAX_NUMNODES; i++) {
+		int j;
+		cpumask_t nodemask;
+		struct sched_group *node = &sched_group_nodes[i];
+		cpus_and(nodemask, node_to_cpumask(i), cpu_possible_map);
+
+		if (cpus_empty(nodemask))
+			continue;
+
+		first = last = NULL;
+		/* Set up physical groups */
+		for_each_cpu_mask(j, nodemask) {
+			struct sched_domain *cpu_domain = &per_cpu(cpu_domains, j);
+			struct sched_group *cpu = &sched_group_phys[j];
+
+			if (j != first_cpu(cpu_domain->span))
+				continue;
+
+			cpu->cpumask = cpu_domain->span;
+			/*
+			 * Make each extra sibling increase power by 10% of
+			 * the basic CPU. This is very arbitrary.
+			 */
+			cpu->cpu_power = SCHED_LOAD_SCALE + SCHED_LOAD_SCALE*(cpus_weight(cpu->cpumask)-1) / 10;
+			node->cpu_power += cpu->cpu_power;
+
+			if (!first)
+				first = cpu;
+			if (last)
+				last->next = cpu;
+			last = cpu;
+		}
+		last->next = first;
+	}
+
+	/* Set up nodes */
+	first = last = NULL;
+	for (i = 0; i < MAX_NUMNODES; i++) {
+		struct sched_group *cpu = &sched_group_nodes[i];
+		cpumask_t nodemask;
+		cpus_and(nodemask, node_to_cpumask(i), cpu_possible_map);
+
+		if (cpus_empty(nodemask))
+			continue;
+
+		cpu->cpumask = nodemask;
+		/* ->cpu_power already setup */
+
+		if (!first)
+			first = cpu;
+		if (last)
+			last->next = cpu;
+		last = cpu;
+	}
+	last->next = first;
+
+	mb();
+	for_each_cpu(i) {
+		struct sched_domain *cpu_domain = &per_cpu(cpu_domains, i);
+		cpu_attach_domain(cpu_domain, i);
+	}
+}
+#else /* !CONFIG_NUMA */
+static struct sched_group sched_group_cpus[NR_CPUS];
+static struct sched_group sched_group_phys[NR_CPUS];
+static DEFINE_PER_CPU(struct sched_domain, cpu_domains);
+static DEFINE_PER_CPU(struct sched_domain, phys_domains);
+__init void arch_init_sched_domains(void)
+{
+	int i;
+	struct sched_group *first = NULL, *last = NULL;
+
+	/* Set up domains */
+	for_each_cpu(i) {
+		struct sched_domain *cpu_domain = &per_cpu(cpu_domains, i);
+		struct sched_domain *phys_domain = &per_cpu(phys_domains, i);
+
+		*cpu_domain = SD_SIBLING_INIT;
+		cpu_domain->span = cpu_sibling_map[i];
+		cpu_domain->parent = phys_domain;
+		cpu_domain->groups = &sched_group_cpus[i];
+
+		*phys_domain = SD_CPU_INIT;
+		phys_domain->span = cpu_possible_map;
+		phys_domain->groups = &sched_group_phys[first_cpu(cpu_domain->span)];
+	}
+
+	/* Set up CPU (sibling) groups */
+	for_each_cpu(i) {
+		struct sched_domain *cpu_domain = &per_cpu(cpu_domains, i);
+		int j;
+		first = last = NULL;
+
+		if (i != first_cpu(cpu_domain->span))
+			continue;
+
+		for_each_cpu_mask(j, cpu_domain->span) {
+			struct sched_group *cpu = &sched_group_cpus[j];
+
+			cpus_clear(cpu->cpumask);
+			cpu_set(j, cpu->cpumask);
+			cpu->cpu_power = SCHED_LOAD_SCALE;
+
+			if (!first)
+				first = cpu;
+			if (last)
+				last->next = cpu;
+			last = cpu;
+		}
+		last->next = first;
+	}
+
+	first = last = NULL;
+	/* Set up physical groups */
+	for_each_cpu(i) {
+		struct sched_domain *cpu_domain = &per_cpu(cpu_domains, i);
+		struct sched_group *cpu = &sched_group_phys[i];
+
+		if (i != first_cpu(cpu_domain->span))
+			continue;
+
+		cpu->cpumask = cpu_domain->span;
+		/* See SMT+NUMA setup for comment */
+		cpu->cpu_power = SCHED_LOAD_SCALE + SCHED_LOAD_SCALE*(cpus_weight(cpu->cpumask)-1) / 10;
+
+		if (!first)
+			first = cpu;
+		if (last)
+			last->next = cpu;
+		last = cpu;
+	}
+	last->next = first;
+
+	mb();
+	for_each_cpu(i) {
+		struct sched_domain *cpu_domain = &per_cpu(cpu_domains, i);
+		cpu_attach_domain(cpu_domain, i);
+	}
+}
+#endif /* CONFIG_NUMA */
+#endif /* CONFIG_SCHED_SMT */
 
 /* These are wrappers to interface to the new boot process.  Someone
    who understands all this stuff should rewrite it properly. --RR 15/Jul/02 */
diff -Nru a/arch/i386/kernel/traps.c b/arch/i386/kernel/traps.c
--- a/arch/i386/kernel/traps.c	Sun May 16 01:18:33 2004
+++ b/arch/i386/kernel/traps.c	Sun May 16 01:18:33 2004
@@ -94,27 +94,70 @@
 
 static int kstack_depth_to_print = 24;
 
-void show_trace(struct task_struct *task, unsigned long * stack)
+static int valid_stack_ptr(struct task_struct *task, void *p)
+{
+	if (p <= (void *)task->thread_info)
+		return 0;
+	if (kstack_end(p))
+		return 0;
+	return 1;
+}
+
+#ifdef CONFIG_FRAME_POINTER
+void print_context_stack(struct task_struct *task, unsigned long *stack,
+			 unsigned long ebp)
 {
 	unsigned long addr;
 
-	if (!stack)
-		stack = (unsigned long*)&stack;
+	while (valid_stack_ptr(task, (void *)ebp)) {
+		addr = *(unsigned long *)(ebp + 4);
+		printk(" [<%08lx>] ", addr);
+		print_symbol("%s", addr);
+		printk("\n");
+		ebp = *(unsigned long *)ebp;
+	}
+}
+#else
+void print_context_stack(struct task_struct *task, unsigned long *stack,
+			 unsigned long ebp)
+{
+	unsigned long addr;
 
-	printk("Call Trace:");
-#ifdef CONFIG_KALLSYMS
-	printk("\n");
+	while (!kstack_end(stack)) {
+		addr = *stack++;
+		if (kernel_text_address(addr)) {
+			printk(" [<%08lx>] ", addr);
+			print_symbol("%s\n", addr);
+		}
+	}
+}
 #endif
+
+void show_trace(struct task_struct *task, unsigned long * stack)
+{
+	unsigned long ebp;
+
+	if (!task)
+		task = current;
+
+	if (!valid_stack_ptr(task, stack)) {
+		printk("Stack pointer is garbage, not printing trace\n");
+		return;
+	}
+
+	if (task == current) {
+		/* Grab ebp right from our regs */
+		asm ("movl %%ebp, %0" : "=r" (ebp) : );
+	} else {
+		/* ebp is the last reg pushed by switch_to */
+		ebp = *(unsigned long *) task->thread.esp;
+	}
+
 	while (1) {
 		struct thread_info *context;
-		context = (struct thread_info*) ((unsigned long)stack & (~(THREAD_SIZE - 1)));
-		while (!kstack_end(stack)) {
-			addr = *stack++;
-			if (kernel_text_address(addr)) {
-				printk(" [<%08lx>] ", addr);
-				print_symbol("%s\n", addr);
-			}
-		}
+		context = (struct thread_info *)
+			((unsigned long)stack & (~(THREAD_SIZE - 1)));
+		print_context_stack(task, stack, ebp);
 		stack = (unsigned long*)context->previous_esp;
 		if (!stack)
 			break;
@@ -143,7 +186,7 @@
 			printk("\n       ");
 		printk("%08lx ", *stack++);
 	}
-	printk("\n");
+	printk("\nCall Trace:\n");
 	show_trace(task, esp);
 }
 
diff -Nru a/arch/i386/mach-es7000/Makefile b/arch/i386/mach-es7000/Makefile
--- a/arch/i386/mach-es7000/Makefile	Sun May 16 01:18:35 2004
+++ b/arch/i386/mach-es7000/Makefile	Sun May 16 01:18:35 2004
@@ -2,4 +2,5 @@
 # Makefile for the linux kernel.
 #
 
-obj-y		:= setup.o topology.o es7000.o
+obj-$(CONFIG_X86_ES7000)	:= es7000plat.o
+obj-$(CONFIG_X86_GENERICARCH)	:= es7000plat.o
diff -Nru a/arch/i386/mach-es7000/es7000.c b/arch/i386/mach-es7000/es7000.c
--- a/arch/i386/mach-es7000/es7000.c	Sun May 16 01:18:36 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,279 +0,0 @@
-/*
- * Written by: Garry Forsgren, Unisys Corporation
- *             Natalie Protasevich, Unisys Corporation
- * This file contains the code to configure and interface 
- * with Unisys ES7000 series hardware system manager.
- *
- * Copyright (c) 2003 Unisys Corporation.  All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Unisys Corporation, Township Line & Union Meeting 
- * Roads-A, Unisys Way, Blue Bell, Pennsylvania, 19424, or:
- *
- * http://www.unisys.com
- */
-
-#include <linux/module.h>
-#include <linux/types.h>
-#include <linux/kernel.h>
-#include <linux/smp.h>
-#include <linux/string.h>
-#include <linux/spinlock.h>
-#include <linux/errno.h>
-#include <linux/notifier.h>
-#include <linux/reboot.h>
-#include <linux/init.h>
-#include <linux/acpi.h>
-#include <asm/io.h>
-#include <asm/nmi.h>
-#include <asm/smp.h>
-#include <asm/apicdef.h>
-#include "es7000.h"
-
-/*
- * ES7000 Globals
- */
-
-volatile unsigned long	*psai = NULL;
-struct mip_reg		*mip_reg;  
-struct mip_reg		*host_reg;
-int 			mip_port;
-unsigned long		mip_addr, host_addr;
-
-/*
- * Parse the OEM Table
- */
-
-void __init
-parse_unisys_oem (char *oemptr, int oem_entries)
-{
-	int                     i;
-	int 			success = 0;
-	unsigned char           type, size;
-	unsigned long           val;
-	char                    *tp = NULL;  
-	struct psai             *psaip = NULL;
-	struct mip_reg_info 	*mi;
-	struct mip_reg		*host, *mip;
-
-	tp = oemptr;
-
-	tp += 8;
-
-	for (i=0; i <= oem_entries; i++) {
-		type = *tp++;
-		size = *tp++;
-		tp -= 2;
-		switch (type) {
-		case MIP_REG:
-			mi = (struct mip_reg_info *)tp;
-			val = MIP_RD_LO(mi->host_reg);
-			host_addr = val;
-			host = (struct mip_reg *)val;
-			host_reg = __va(host);
-			val = MIP_RD_LO(mi->mip_reg);
-			mip_addr = val;
-			mip = (struct mip_reg *)val;
-			mip_reg = __va(mip);
-			Dprintk("es7000_mipcfg: host_reg = 0x%lx \n", 
-				(unsigned long)host_reg);
-			Dprintk("es7000_mipcfg: mip_reg = 0x%lx \n", 
-				(unsigned long)mip_reg);
-			success++;
-			break;
-		case MIP_PSAI_REG:
-			psaip = (struct psai *)tp;
-			if (tp != NULL) {
-				if (psaip->addr)
-					psai = __va(psaip->addr);
-				else
-					psai = NULL;
-				success++;
-			}
-			break;
-		default:
-			break;
-		}
-		if (i == 6) break;
-		tp += size;
-	}
-
-	if (success < 2) {
-		printk("\nNo ES7000 found.\n");
-		es7000_plat = 0;
-	} else {
-		printk("\nEnabling ES7000 specific features...\n");
-		es7000_plat = 1;
-	}
-	return;
-}
-
-int __init 
-find_unisys_acpi_oem_table(unsigned long *oem_addr, int *length) 
-{
-	struct acpi_table_rsdp		*rsdp = NULL;
-	unsigned long			rsdp_phys = 0;
-	struct acpi_table_header 	*header = NULL;
-	int				i;
-	struct acpi_table_sdt		sdt;
-
-	rsdp_phys = acpi_find_rsdp();
-	rsdp = __va(rsdp_phys);
-	if (rsdp->rsdt_address) {
-		struct acpi_table_rsdt	*mapped_rsdt = NULL;
-		sdt.pa = rsdp->rsdt_address;
-
-		header = (struct acpi_table_header *)
-			__acpi_map_table(sdt.pa, sizeof(struct acpi_table_header));
-		if (!header)
-			return -ENODEV;
-
-		sdt.count = (header->length - sizeof(struct acpi_table_header)) >> 3;
-		mapped_rsdt = (struct acpi_table_rsdt *)
-			__acpi_map_table(sdt.pa, header->length);
-		if (!mapped_rsdt)
-			return -ENODEV;
-
-		header = &mapped_rsdt->header;
-
-		for (i = 0; i < sdt.count; i++)
-			sdt.entry[i].pa = (unsigned long) mapped_rsdt->entry[i];
-	};
-	for (i = 0; i < sdt.count; i++) {
-
-		header = (struct acpi_table_header *)
-			__acpi_map_table(sdt.entry[i].pa,
-				sizeof(struct acpi_table_header));
-		if (!header)
-			continue;
-		if (!strncmp((char *) &header->signature, "OEM1", 4)) {
-			if (!strncmp((char *) &header->oem_id, "UNISYS", 6)) {
-				void *addr;
-				struct oem_table *t;
-				acpi_table_print(header, sdt.entry[i].pa);
-				t = (struct oem_table *) __acpi_map_table(sdt.entry[i].pa, header->length);
-				addr = (void *) __acpi_map_table(t->OEMTableAddr, t->OEMTableSize);
-				*length = header->length;
-				*oem_addr = (unsigned long) addr;
-				return 0;
-			}
-		}
-	}
-	printk("ES7000: did not find Unisys ACPI OEM table!\n");
-	return -1;
-}
-
-static void
-es7000_spin(int n)
-{
-	int i = 0;
-
-	while (i++ < n) 
-		rep_nop();
-}
-
-static int __init
-es7000_mip_write(struct mip_reg *mip_reg)
-{
-	int			status = 0;
-	int			spin;
-
-	spin = MIP_SPIN;
-	while (((unsigned long long)host_reg->off_38 &
-		(unsigned long long)MIP_VALID) != 0) {
-			if (--spin <= 0) {
-				printk("es7000_mip_write: Timeout waiting for Host Valid Flag");
-				return -1;
-			}
-		es7000_spin(MIP_SPIN);
-	}
-
-	memcpy(host_reg, mip_reg, sizeof(struct mip_reg));
-	outb(1, mip_port);
-
-	spin = MIP_SPIN;
-
-	while (((unsigned long long)mip_reg->off_38 &
-		(unsigned long long)MIP_VALID) == 0) {
-		if (--spin <= 0) {
-			printk("es7000_mip_write: Timeout waiting for MIP Valid Flag");
-			return -1;
-		}
-		es7000_spin(MIP_SPIN);
-	}
-
-	status = ((unsigned long long)mip_reg->off_0 &
-		(unsigned long long)0xffff0000000000) >> 48;
-	mip_reg->off_38 = ((unsigned long long)mip_reg->off_38 &
-		(unsigned long long)~MIP_VALID);
-	return status;
-}
-
-int 
-es7000_start_cpu(int cpu, unsigned long eip)
-{
-	unsigned long vect = 0, psaival = 0;
-
-	if (psai == NULL)
-		return -1;
-
-	vect = ((unsigned long)__pa(eip)/0x1000) << 16;
-	psaival = (0x1000000 | vect | cpu);
-
-	while (*psai & 0x1000000)
-                ;
-
-	*psai = psaival;
-
-	return 0;
-
-}
-
-int 
-es7000_stop_cpu(int cpu)
-{
-	int startup;
-
-	if (psai == NULL)
-		return -1;
-
-	startup= (0x1000000 | cpu);
-
-	while ((*psai & 0xff00ffff) != startup)
-		;
-
-	startup = (*psai & 0xff0000) >> 16;
-	*psai &= 0xffffff;
-
-	return 0;
-
-}
-
-void __init
-es7000_sw_apic()
-{
-	if (es7000_plat) {
-		int mip_status;
-		struct mip_reg es7000_mip_reg;
-
-		printk("ES7000: Enabling APIC mode.\n");
-        	memset(&es7000_mip_reg, 0, sizeof(struct mip_reg));
-        	es7000_mip_reg.off_0 = MIP_SW_APIC;
-        	es7000_mip_reg.off_38 = (MIP_VALID);
-        	while ((mip_status = es7000_mip_write(&es7000_mip_reg)) != 0)
-              		printk("es7000_sw_apic: command failed, status = %x\n", 
-				mip_status);
-		return;
-	}
-}
diff -Nru a/arch/i386/mach-es7000/es7000.h b/arch/i386/mach-es7000/es7000.h
--- a/arch/i386/mach-es7000/es7000.h	Sun May 16 01:18:33 2004
+++ b/arch/i386/mach-es7000/es7000.h	Sun May 16 01:18:33 2004
@@ -30,6 +30,7 @@
 #define	MIP_BUSY		1
 #define	MIP_SPIN		0xf0000
 #define	MIP_VALID		0x0100000000000000
+#define	MIP_PORT(VALUE)	((VALUE >> 32) & 0xffff)
 
 #define	MIP_RD_LO(VALUE)	(VALUE & 0xffffffff)   
 
@@ -103,7 +104,7 @@
 #define	MIP_SW_APIC		0x1020b
 #define	MIP_FUNC(VALUE) 	(VALUE & 0xff)
 
-extern void parse_unisys_oem (char *oemptr, int oem_entries);
+extern int parse_unisys_oem (char *oemptr, int oem_entries);
 extern int find_unisys_acpi_oem_table(unsigned long *oem_addr, int *length);
 extern int es7000_start_cpu(int cpu, unsigned long eip);
 extern void es7000_sw_apic(void);
diff -Nru a/arch/i386/mach-es7000/es7000plat.c b/arch/i386/mach-es7000/es7000plat.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/arch/i386/mach-es7000/es7000plat.c	Sun May 16 01:18:36 2004
@@ -0,0 +1,280 @@
+/*
+ * Written by: Garry Forsgren, Unisys Corporation
+ *             Natalie Protasevich, Unisys Corporation
+ * This file contains the code to configure and interface
+ * with Unisys ES7000 series hardware system manager.
+ *
+ * Copyright (c) 2003 Unisys Corporation.  All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it would be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write the Free Software Foundation, Inc., 59
+ * Temple Place - Suite 330, Boston MA 02111-1307, USA.
+ *
+ * Contact information: Unisys Corporation, Township Line & Union Meeting
+ * Roads-A, Unisys Way, Blue Bell, Pennsylvania, 19424, or:
+ *
+ * http://www.unisys.com
+ */
+
+#include <linux/module.h>
+#include <linux/types.h>
+#include <linux/kernel.h>
+#include <linux/smp.h>
+#include <linux/string.h>
+#include <linux/spinlock.h>
+#include <linux/errno.h>
+#include <linux/notifier.h>
+#include <linux/reboot.h>
+#include <linux/init.h>
+#include <linux/acpi.h>
+#include <asm/io.h>
+#include <asm/nmi.h>
+#include <asm/smp.h>
+#include <asm/apicdef.h>
+#include "es7000.h"
+
+/*
+ * ES7000 Globals
+ */
+
+volatile unsigned long	*psai = NULL;
+struct mip_reg		*mip_reg;
+struct mip_reg		*host_reg;
+int 			mip_port;
+unsigned long		mip_addr, host_addr;
+
+/*
+ * Parse the OEM Table
+ */
+
+int __init
+parse_unisys_oem (char *oemptr, int oem_entries)
+{
+	int                     i;
+	int 			success = 0;
+	unsigned char           type, size;
+	unsigned long           val;
+	char                    *tp = NULL;
+	struct psai             *psaip = NULL;
+	struct mip_reg_info 	*mi;
+	struct mip_reg		*host, *mip;
+
+	tp = oemptr;
+
+	tp += 8;
+
+	for (i=0; i <= oem_entries; i++) {
+		type = *tp++;
+		size = *tp++;
+		tp -= 2;
+		switch (type) {
+		case MIP_REG:
+			mi = (struct mip_reg_info *)tp;
+			val = MIP_RD_LO(mi->host_reg);
+			host_addr = val;
+			host = (struct mip_reg *)val;
+			host_reg = __va(host);
+			val = MIP_RD_LO(mi->mip_reg);
+			mip_port = MIP_PORT(mi->mip_info);
+			mip_addr = val;
+			mip = (struct mip_reg *)val;
+			mip_reg = __va(mip);
+			Dprintk("es7000_mipcfg: host_reg = 0x%lx \n",
+				(unsigned long)host_reg);
+			Dprintk("es7000_mipcfg: mip_reg = 0x%lx \n",
+				(unsigned long)mip_reg);
+			success++;
+			break;
+		case MIP_PSAI_REG:
+			psaip = (struct psai *)tp;
+			if (tp != NULL) {
+				if (psaip->addr)
+					psai = __va(psaip->addr);
+				else
+					psai = NULL;
+				success++;
+			}
+			break;
+		default:
+			break;
+		}
+		if (i == 6) break;
+		tp += size;
+	}
+
+	if (success < 2) {
+		printk("\nNo ES7000 found.\n");
+		es7000_plat = 0;
+	} else {
+		printk("\nEnabling ES7000 specific features...\n");
+		es7000_plat = 1;
+	}
+	return es7000_plat;
+}
+
+int __init
+find_unisys_acpi_oem_table(unsigned long *oem_addr, int *length)
+{
+	struct acpi_table_rsdp		*rsdp = NULL;
+	unsigned long			rsdp_phys = 0;
+	struct acpi_table_header 	*header = NULL;
+	int				i;
+	struct acpi_table_sdt		sdt;
+
+	rsdp_phys = acpi_find_rsdp();
+	rsdp = __va(rsdp_phys);
+	if (rsdp->rsdt_address) {
+		struct acpi_table_rsdt	*mapped_rsdt = NULL;
+		sdt.pa = rsdp->rsdt_address;
+
+		header = (struct acpi_table_header *)
+			__acpi_map_table(sdt.pa, sizeof(struct acpi_table_header));
+		if (!header)
+			return -ENODEV;
+
+		sdt.count = (header->length - sizeof(struct acpi_table_header)) >> 3;
+		mapped_rsdt = (struct acpi_table_rsdt *)
+			__acpi_map_table(sdt.pa, header->length);
+		if (!mapped_rsdt)
+			return -ENODEV;
+
+		header = &mapped_rsdt->header;
+
+		for (i = 0; i < sdt.count; i++)
+			sdt.entry[i].pa = (unsigned long) mapped_rsdt->entry[i];
+	};
+	for (i = 0; i < sdt.count; i++) {
+
+		header = (struct acpi_table_header *)
+			__acpi_map_table(sdt.entry[i].pa,
+				sizeof(struct acpi_table_header));
+		if (!header)
+			continue;
+		if (!strncmp((char *) &header->signature, "OEM1", 4)) {
+			if (!strncmp((char *) &header->oem_id, "UNISYS", 6)) {
+				void *addr;
+				struct oem_table *t;
+				acpi_table_print(header, sdt.entry[i].pa);
+				t = (struct oem_table *) __acpi_map_table(sdt.entry[i].pa, header->length);
+				addr = (void *) __acpi_map_table(t->OEMTableAddr, t->OEMTableSize);
+				*length = header->length;
+				*oem_addr = (unsigned long) addr;
+				return 0;
+			}
+		}
+	}
+	printk("ES7000: did not find Unisys ACPI OEM table!\n");
+	return -1;
+}
+
+static void
+es7000_spin(int n)
+{
+	int i = 0;
+
+	while (i++ < n)
+		rep_nop();
+}
+
+static int __init
+es7000_mip_write(struct mip_reg *mip_reg)
+{
+	int			status = 0;
+	int			spin;
+
+	spin = MIP_SPIN;
+	while (((unsigned long long)host_reg->off_38 &
+		(unsigned long long)MIP_VALID) != 0) {
+			if (--spin <= 0) {
+				printk("es7000_mip_write: Timeout waiting for Host Valid Flag");
+				return -1;
+			}
+		es7000_spin(MIP_SPIN);
+	}
+
+	memcpy(host_reg, mip_reg, sizeof(struct mip_reg));
+	outb(1, mip_port);
+
+	spin = MIP_SPIN;
+
+	while (((unsigned long long)mip_reg->off_38 &
+		(unsigned long long)MIP_VALID) == 0) {
+		if (--spin <= 0) {
+			printk("es7000_mip_write: Timeout waiting for MIP Valid Flag");
+			return -1;
+		}
+		es7000_spin(MIP_SPIN);
+	}
+
+	status = ((unsigned long long)mip_reg->off_0 &
+		(unsigned long long)0xffff0000000000) >> 48;
+	mip_reg->off_38 = ((unsigned long long)mip_reg->off_38 &
+		(unsigned long long)~MIP_VALID);
+	return status;
+}
+
+int
+es7000_start_cpu(int cpu, unsigned long eip)
+{
+	unsigned long vect = 0, psaival = 0;
+
+	if (psai == NULL)
+		return -1;
+
+	vect = ((unsigned long)__pa(eip)/0x1000) << 16;
+	psaival = (0x1000000 | vect | cpu);
+
+	while (*psai & 0x1000000)
+                ;
+
+	*psai = psaival;
+
+	return 0;
+
+}
+
+int
+es7000_stop_cpu(int cpu)
+{
+	int startup;
+
+	if (psai == NULL)
+		return -1;
+
+	startup= (0x1000000 | cpu);
+
+	while ((*psai & 0xff00ffff) != startup)
+		;
+
+	startup = (*psai & 0xff0000) >> 16;
+	*psai &= 0xffffff;
+
+	return 0;
+
+}
+
+void __init
+es7000_sw_apic()
+{
+	if (es7000_plat) {
+		int mip_status;
+		struct mip_reg es7000_mip_reg;
+
+		printk("ES7000: Enabling APIC mode.\n");
+        	memset(&es7000_mip_reg, 0, sizeof(struct mip_reg));
+        	es7000_mip_reg.off_0 = MIP_SW_APIC;
+        	es7000_mip_reg.off_38 = (MIP_VALID);
+        	while ((mip_status = es7000_mip_write(&es7000_mip_reg)) != 0)
+              		printk("es7000_sw_apic: command failed, status = %x\n",
+				mip_status);
+		return;
+	}
+}
diff -Nru a/arch/i386/mach-es7000/setup.c b/arch/i386/mach-es7000/setup.c
--- a/arch/i386/mach-es7000/setup.c	Sun May 16 01:18:35 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,106 +0,0 @@
-/*
- *	Machine specific setup for es7000
- */
-
-#include <linux/config.h>
-#include <linux/smp.h>
-#include <linux/init.h>
-#include <linux/irq.h>
-#include <linux/interrupt.h>
-#include <asm/acpi.h>
-#include <asm/arch_hooks.h>
-
-/**
- * pre_intr_init_hook - initialisation prior to setting up interrupt vectors
- *
- * Description:
- *	Perform any necessary interrupt initialisation prior to setting up
- *	the "ordinary" interrupt call gates.  For legacy reasons, the ISA
- *	interrupts should be initialised here if the machine emulates a PC
- *	in any way.
- **/void __init pre_intr_init_hook(void)
-{
-	init_ISA_irqs();
-}
-
-/*
- * IRQ2 is cascade interrupt to second interrupt controller
- */
-static struct irqaction irq2 = { no_action, 0, 0, "cascade", NULL, NULL};
-
-/**
- * intr_init_hook - post gate setup interrupt initialisation
- *
- * Description:
- *	Fill in any interrupts that may have been left out by the general
- *	init_IRQ() routine.  interrupts having to do with the machine rather
- *	than the devices on the I/O bus (like APIC interrupts in intel MP
- *	systems) are started here.
- **/
-void __init intr_init_hook(void)
-{
-#ifdef CONFIG_X86_LOCAL_APIC
-	apic_intr_init();
-#endif
-
-	if (!acpi_ioapic)
-		setup_irq(2, &irq2);
-}
-
-/**
- * pre_setup_arch_hook - hook called prior to any setup_arch() execution
- *
- * Description:
- *	generally used to activate any machine specific identification
- *	routines that may be needed before setup_arch() runs.  On VISWS
- *	this is used to get the board revision and type.
- **/
-void __init pre_setup_arch_hook(void)
-{
-}
-
-/**
- * trap_init_hook - initialise system specific traps
- *
- * Description:
- *	Called as the final act of trap_init().  Used in VISWS to initialise
- *	the various board specific APIC traps.
- **/
-void __init trap_init_hook(void)
-{
-}
-
-static struct irqaction irq0  = { timer_interrupt, SA_INTERRUPT, 0, "timer", NULL, NULL};
-
-/**
- * time_init_hook - do any specific initialisations for the system timer.
- *
- * Description:
- *	Must plug the system timer interrupt source at HZ into the IRQ listed
- *	in irq_vectors.h:TIMER_IRQ
- **/
-void __init time_init_hook(void)
-{
-	setup_irq(0, &irq0);
-}
-
-#ifdef CONFIG_MCA
-/**
- * mca_nmi_hook - hook into MCA specific NMI chain
- *
- * Description:
- *	The MCA (Microchannel Arcitecture) has an NMI chain for NMI sources
- *	along the MCA bus.  Use this to hook into that chain if you will need
- *	it.
- **/
-void __init mca_nmi_hook(void)
-{
-	/* If I recall correctly, there's a whole bunch of other things that
-	 * we can do to check for NMI problems, but that's all I know about
-	 * at the moment.
-	 */
-
-	printk("NMI generated from unknown source!\n");
-}
-
-#endif
diff -Nru a/arch/i386/mach-es7000/topology.c b/arch/i386/mach-es7000/topology.c
--- a/arch/i386/mach-es7000/topology.c	Sun May 16 01:18:36 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,64 +0,0 @@
-/*
- * arch/i386/mach-generic/topology.c - Populate driverfs with topology information
- *
- * Written by: Matthew Dobson, IBM Corporation
- * Original Code: Paul Dorwin, IBM Corporation, Patrick Mochel, OSDL
- *
- * Copyright (C) 2002, IBM Corp.
- *
- * All rights reserved.          
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- * NON INFRINGEMENT.  See the GNU General Public License for more
- * details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * Send feedback to <colpatch@us.ibm.com>
- */
-#include <linux/init.h>
-#include <linux/smp.h>
-#include <asm/cpu.h>
-
-struct i386_cpu cpu_devices[NR_CPUS];
-
-#ifdef CONFIG_NUMA
-#include <linux/mmzone.h>
-#include <asm/node.h>
-
-struct i386_node node_devices[MAX_NUMNODES];
-
-static int __init topology_init(void)
-{
-	int i;
-
-	for (i = 0; i < num_online_nodes(); i++)
-		arch_register_node(i);
-	for (i = 0; i < NR_CPUS; i++)
-		if (cpu_possible(i)) arch_register_cpu(i);
-	return 0;
-}
-
-#else /* !CONFIG_NUMA */
-
-static int __init topology_init(void)
-{
-	int i;
-
-	for (i = 0; i < NR_CPUS; i++)
-		if (cpu_possible(i)) arch_register_cpu(i);
-	return 0;
-}
-
-#endif /* CONFIG_NUMA */
-
-subsys_initcall(topology_init);
diff -Nru a/arch/i386/mach-generic/Makefile b/arch/i386/mach-generic/Makefile
--- a/arch/i386/mach-generic/Makefile	Sun May 16 01:18:35 2004
+++ b/arch/i386/mach-generic/Makefile	Sun May 16 01:18:35 2004
@@ -4,15 +4,4 @@
 
 EXTRA_CFLAGS	+= -I../kernel
 
-obj-y				:= probe.o summit.o bigsmp.o default.o
-
-
-#
-# Makefile for the generic architecture
-#
-
-EXTRA_CFLAGS	+= -I../kernel
-
-obj-y				:= probe.o summit.o bigsmp.o default.o
-
-
+obj-y				:= probe.o summit.o bigsmp.o es7000.o default.o ../mach-es7000/
diff -Nru a/arch/i386/mach-generic/es7000.c b/arch/i386/mach-generic/es7000.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/arch/i386/mach-generic/es7000.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,28 @@
+/*
+ * APIC driver for the Unisys ES7000 chipset.
+ */
+#define APIC_DEFINITION 1
+#include <linux/config.h>
+#include <linux/threads.h>
+#include <linux/cpumask.h>
+#include <asm/mpspec.h>
+#include <asm/genapic.h>
+#include <asm/fixmap.h>
+#include <asm/apicdef.h>
+#include <linux/kernel.h>
+#include <linux/string.h>
+#include <linux/smp.h>
+#include <linux/init.h>
+#include <asm/mach-es7000/mach_apicdef.h>
+#include <asm/mach-es7000/mach_apic.h>
+#include <asm/mach-es7000/mach_ipi.h>
+#include <asm/mach-es7000/mach_mpparse.h>
+#include <asm/mach-es7000/mach_wakecpu.h>
+
+static __init int probe_es7000(void)
+{
+	/* probed later in mptable/ACPI hooks */
+	return 0;
+}
+
+struct genapic apic_es7000 = APIC_INIT("es7000", probe_es7000);
diff -Nru a/arch/i386/mach-generic/probe.c b/arch/i386/mach-generic/probe.c
--- a/arch/i386/mach-generic/probe.c	Sun May 16 01:18:33 2004
+++ b/arch/i386/mach-generic/probe.c	Sun May 16 01:18:33 2004
@@ -17,6 +17,7 @@
 
 extern struct genapic apic_summit;
 extern struct genapic apic_bigsmp;
+extern struct genapic apic_es7000;
 extern struct genapic apic_default;
 
 struct genapic *genapic = &apic_default;
@@ -24,6 +25,7 @@
 struct genapic *apic_probe[] __initdata = { 
 	&apic_summit,
 	&apic_bigsmp, 
+	&apic_es7000,
 	&apic_default,	/* must be last */
 	NULL,
 };
diff -Nru a/arch/i386/mach-voyager/voyager_smp.c b/arch/i386/mach-voyager/voyager_smp.c
--- a/arch/i386/mach-voyager/voyager_smp.c	Sun May 16 01:18:34 2004
+++ b/arch/i386/mach-voyager/voyager_smp.c	Sun May 16 01:18:34 2004
@@ -1106,6 +1106,9 @@
 	if (!mask)
 		return 0;
 
+	/* Can deadlock when called with interrupts disabled */
+	WARN_ON(irqs_disabled());
+
 	data.func = func;
 	data.info = info;
 	data.started = mask;
diff -Nru a/arch/i386/mm/hugetlbpage.c b/arch/i386/mm/hugetlbpage.c
--- a/arch/i386/mm/hugetlbpage.c	Sun May 16 01:18:36 2004
+++ b/arch/i386/mm/hugetlbpage.c	Sun May 16 01:18:36 2004
@@ -264,8 +264,9 @@
 				goto out;
 			}
 			ret = add_to_page_cache(page, mapping, idx, GFP_ATOMIC);
-			unlock_page(page);
-			if (ret) {
+			if (! ret) {
+				unlock_page(page);
+			} else {
 				hugetlb_put_quota(mapping);
 				free_huge_page(page);
 				goto out;
diff -Nru a/arch/i386/mm/pageattr.c b/arch/i386/mm/pageattr.c
--- a/arch/i386/mm/pageattr.c	Sun May 16 01:18:34 2004
+++ b/arch/i386/mm/pageattr.c	Sun May 16 01:18:34 2004
@@ -121,20 +121,20 @@
 			pte_t standard = mk_pte(page, PAGE_KERNEL); 
 			set_pte_atomic(kpte, mk_pte(page, prot)); 
 			if (pte_same(old,standard))
-				atomic_inc(&kpte_page->count);
+				get_page(kpte_page);
 		} else {
 			struct page *split = split_large_page(address, prot); 
 			if (!split)
 				return -ENOMEM;
-			atomic_inc(&kpte_page->count);
+			get_page(kpte_page);
 			set_pmd_pte(kpte,address,mk_pte(split, PAGE_KERNEL));
 		}	
 	} else if ((pte_val(*kpte) & _PAGE_PSE) == 0) { 
 		set_pte_atomic(kpte, mk_pte(page, PAGE_KERNEL));
-		atomic_dec(&kpte_page->count); 
+		__put_page(kpte_page);
 	}
 
-	if (cpu_has_pse && (atomic_read(&kpte_page->count) == 1)) { 
+	if (cpu_has_pse && (page_count(kpte_page) == 1)) {
 		list_add(&kpte_page->lru, &df_list);
 		revert_page(kpte_page, address);
 	} 
diff -Nru a/arch/i386/oprofile/op_model_p4.c b/arch/i386/oprofile/op_model_p4.c
--- a/arch/i386/oprofile/op_model_p4.c	Sun May 16 01:18:33 2004
+++ b/arch/i386/oprofile/op_model_p4.c	Sun May 16 01:18:33 2004
@@ -382,11 +382,8 @@
 static unsigned int get_stagger(void)
 {
 #ifdef CONFIG_SMP
-	int cpu;
-	if (smp_num_siblings > 1) {
-		cpu = smp_processor_id();
-		return (cpu_sibling_map[cpu] > cpu) ? 0 : 1;
-	}
+	int cpu = smp_processor_id();
+	return (cpu != first_cpu(cpu_sibling_map[cpu]));
 #endif	
 	return 0;
 }
diff -Nru a/arch/i386/pci/fixup.c b/arch/i386/pci/fixup.c
--- a/arch/i386/pci/fixup.c	Sun May 16 01:18:35 2004
+++ b/arch/i386/pci/fixup.c	Sun May 16 01:18:35 2004
@@ -92,6 +92,15 @@
 	int i;
 
 	/*
+	 * Runs the fixup only for the first IDE controller
+	 * (Shai Fultheim - shai@ftcon.com)
+	 */
+	static int called = 0;
+	if (called)
+		return;
+	called = 1;
+
+	/*
 	 * There exist PCI IDE controllers which have utter garbage
 	 * in first four base registers. Ignore that.
 	 */
diff -Nru a/arch/i386/pci/irq.c b/arch/i386/pci/irq.c
--- a/arch/i386/pci/irq.c	Sun May 16 01:18:37 2004
+++ b/arch/i386/pci/irq.c	Sun May 16 01:18:37 2004
@@ -476,8 +476,9 @@
 		case PCI_DEVICE_ID_INTEL_82801DB_0:
 		case PCI_DEVICE_ID_INTEL_82801E_0:
 		case PCI_DEVICE_ID_INTEL_82801EB_0:
-		case PCI_DEVICE_ID_INTEL_ESB_0:
+		case PCI_DEVICE_ID_INTEL_ESB_1:
 		case PCI_DEVICE_ID_INTEL_ICH6_0:
+		case PCI_DEVICE_ID_INTEL_ICH6_1:
 			r->name = "PIIX/ICH";
 			r->get = pirq_piix_get;
 			r->set = pirq_piix_set;
@@ -540,8 +541,6 @@
 	r->name = "SIS";
 	r->get = pirq_sis_get;
 	r->set = pirq_sis_set;
-	DBG("PCI: Detecting SiS router at %02x:%02x\n",
-	    rt->rtr_bus, rt->rtr_devfn);
 	return 1;
 }
 
diff -Nru a/arch/ia64/Kconfig b/arch/ia64/Kconfig
--- a/arch/ia64/Kconfig	Sun May 16 01:18:36 2004
+++ b/arch/ia64/Kconfig	Sun May 16 01:18:36 2004
@@ -78,6 +78,15 @@
 
 endchoice
 
+config HOTPLUG_CPU
+    bool "Support for hot-pluggable CPUs (EXPERIMENTAL)"
+    depends on SMP && HOTPLUG && EXPERIMENTAL
+	default n
+    ---help---
+      Say Y here to experiment with turning CPUs off and on.  CPUs
+      can be controlled through /sys/devices/system/cpu/cpu#.
+      Say N if you want to disable cpu hotplug.
+
 choice
 	prompt "Processor type"
 	default ITANIUM
diff -Nru a/arch/ia64/dig/Makefile b/arch/ia64/dig/Makefile
--- a/arch/ia64/dig/Makefile	Sun May 16 01:18:36 2004
+++ b/arch/ia64/dig/Makefile	Sun May 16 01:18:36 2004
@@ -6,4 +6,9 @@
 #
 
 obj-y := setup.o
+
+ifndef CONFIG_NUMA
+obj-$(CONFIG_IA64_DIG) += topology.o
+endif
+
 obj-$(CONFIG_IA64_GENERIC) += machvec.o
diff -Nru a/arch/ia64/dig/topology.c b/arch/ia64/dig/topology.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/arch/ia64/dig/topology.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,43 @@
+/*
+ * arch/ia64/dig/topology.c
+ *	Popuate driverfs with topology information.
+ *	Derived entirely from i386/mach-default.c
+ *  Intel Corporation - Ashok Raj
+ */
+#include <linux/init.h>
+#include <linux/smp.h>
+#include <linux/cpumask.h>
+#include <linux/percpu.h>
+#include <linux/notifier.h>
+#include <linux/cpu.h>
+#include <asm/cpu.h>
+
+static DEFINE_PER_CPU(struct ia64_cpu, cpu_devices);
+
+/*
+ * First Pass: simply borrowed code for now. Later should hook into
+ * hotplug notification for node/cpu/memory as applicable
+ */
+
+static int arch_register_cpu(int num)
+{
+	struct node *parent = NULL;
+
+#ifdef CONFIG_NUMA
+	//parent = &node_devices[cpu_to_node(num)].node;
+#endif
+
+	return register_cpu(&per_cpu(cpu_devices,num).cpu, num, parent);
+}
+
+static int __init topology_init(void)
+{
+    int i;
+
+    for_each_cpu(i) {
+        arch_register_cpu(i);
+	}
+    return 0;
+}
+
+subsys_initcall(topology_init);
diff -Nru a/arch/ia64/ia32/ia32_entry.S b/arch/ia64/ia32/ia32_entry.S
--- a/arch/ia64/ia32/ia32_entry.S	Sun May 16 01:18:35 2004
+++ b/arch/ia64/ia32/ia32_entry.S	Sun May 16 01:18:35 2004
@@ -350,11 +350,11 @@
 	data8 sys_setfsgid	/* 16-bit version */
 	data8 sys_llseek	  /* 140 */
 	data8 sys32_getdents
-	data8 sys32_select
+	data8 compat_sys_select
 	data8 sys_flock
 	data8 sys32_msync
-	data8 sys32_readv	  /* 145 */
-	data8 sys32_writev
+	data8 compat_sys_readv	  /* 145 */
+	data8 compat_sys_writev
 	data8 sys_getsid
 	data8 sys_fdatasync
 	data8 sys32_sysctl
diff -Nru a/arch/ia64/ia32/sys_ia32.c b/arch/ia64/ia32/sys_ia32.c
--- a/arch/ia64/ia32/sys_ia32.c	Sun May 16 01:18:35 2004
+++ b/arch/ia64/ia32/sys_ia32.c	Sun May 16 01:18:35 2004
@@ -90,58 +90,17 @@
 /* XXX make per-mm: */
 static DECLARE_MUTEX(ia32_mmap_sem);
 
-static int
-nargs (unsigned int arg, char **ap)
-{
-	unsigned int addr;
-	int n, err;
-
-	if (!arg)
-		return 0;
-
-	n = 0;
-	do {
-		err = get_user(addr, (unsigned int *)A(arg));
-		if (err)
-			return err;
-		if (ap)
-			*ap++ = (char *) A(addr);
-		arg += sizeof(unsigned int);
-		n++;
-	} while (addr);
-	return n - 1;
-}
-
 asmlinkage long
-sys32_execve (char *filename, unsigned int argv, unsigned int envp,
-	      struct pt_regs *regs)
+sys32_execve (char *name, compat_uptr_t __user *argv, compat_uptr_t __user *envp, struct pt_regs *regs)
 {
+	long error;
+	char *filename;
 	unsigned long old_map_base, old_task_size, tssd;
-	char **av, **ae;
-	int na, ne, len;
-	long r;
-
-	na = nargs(argv, NULL);
-	if (na < 0)
-		return na;
-	ne = nargs(envp, NULL);
-	if (ne < 0)
-		return ne;
-	len = (na + ne + 2) * sizeof(*av);
-	av = kmalloc(len, GFP_KERNEL);
-	if (!av)
-		return -ENOMEM;
 
-	ae = av + na + 1;
-	av[na] = NULL;
-	ae[ne] = NULL;
-
-	r = nargs(argv, av);
-	if (r < 0)
-		goto out;
-	r = nargs(envp, ae);
-	if (r < 0)
-		goto out;
+	filename = getname(name);
+	error = PTR_ERR(filename);
+	if (IS_ERR(filename))
+		return error;
 
 	old_map_base  = current->thread.map_base;
 	old_task_size = current->thread.task_size;
@@ -153,19 +112,18 @@
 	ia64_set_kr(IA64_KR_IO_BASE, current->thread.old_iob);
 	ia64_set_kr(IA64_KR_TSSD, current->thread.old_k1);
 
-	set_fs(KERNEL_DS);
-	r = sys_execve(filename, av, ae, regs);
-	if (r < 0) {
+	error = compat_do_execve(filename, argv, envp, regs);
+	putname(filename);
+
+	if (error < 0) {
 		/* oops, execve failed, switch back to old values... */
 		ia64_set_kr(IA64_KR_IO_BASE, IA32_IOBASE);
 		ia64_set_kr(IA64_KR_TSSD, tssd);
 		current->thread.map_base  = old_map_base;
 		current->thread.task_size = old_task_size;
-		set_fs(USER_DS);	/* establish new task-size as the address-limit */
 	}
-  out:
-	kfree(av);
-	return r;
+
+	return error;
 }
 
 int cp_compat_stat(struct kstat *stat, struct compat_stat *ubuf)
@@ -818,110 +776,6 @@
 	return error;
 }
 
-/*
- * We can actually return ERESTARTSYS instead of EINTR, but I'd
- * like to be certain this leads to no problems. So I return
- * EINTR just for safety.
- *
- * Update: ERESTARTSYS breaks at least the xview clock binary, so
- * I'm trying ERESTARTNOHAND which restart only when you want to.
- */
-#define MAX_SELECT_SECONDS \
-	((unsigned long) (MAX_SCHEDULE_TIMEOUT / HZ)-1)
-#define ROUND_UP_TIME(x,y) (((x)+(y)-1)/(y))
-
-asmlinkage long
-sys32_select (int n, fd_set *inp, fd_set *outp, fd_set *exp, struct compat_timeval *tvp32)
-{
-	fd_set_bits fds;
-	char *bits;
-	long timeout;
-	int ret, size;
-
-	timeout = MAX_SCHEDULE_TIMEOUT;
-	if (tvp32) {
-		time_t sec, usec;
-
-		ret = -EFAULT;
-		if (get_user(sec, &tvp32->tv_sec) || get_user(usec, &tvp32->tv_usec))
-			goto out_nofds;
-
-		ret = -EINVAL;
-		if (sec < 0 || usec < 0)
-			goto out_nofds;
-
-		if ((unsigned long) sec < MAX_SELECT_SECONDS) {
-			timeout = ROUND_UP_TIME(usec, 1000000/HZ);
-			timeout += sec * (unsigned long) HZ;
-		}
-	}
-
-	ret = -EINVAL;
-	if (n < 0)
-		goto out_nofds;
-
-	if (n > current->files->max_fdset)
-		n = current->files->max_fdset;
-
-	/*
-	 * We need 6 bitmaps (in/out/ex for both incoming and outgoing),
-	 * since we used fdset we need to allocate memory in units of
-	 * long-words.
-	 */
-	ret = -ENOMEM;
-	size = FDS_BYTES(n);
-	bits = kmalloc(6 * size, GFP_KERNEL);
-	if (!bits)
-		goto out_nofds;
-	fds.in      = (unsigned long *)  bits;
-	fds.out     = (unsigned long *) (bits +   size);
-	fds.ex      = (unsigned long *) (bits + 2*size);
-	fds.res_in  = (unsigned long *) (bits + 3*size);
-	fds.res_out = (unsigned long *) (bits + 4*size);
-	fds.res_ex  = (unsigned long *) (bits + 5*size);
-
-	if ((ret = get_fd_set(n, inp, fds.in)) ||
-	    (ret = get_fd_set(n, outp, fds.out)) ||
-	    (ret = get_fd_set(n, exp, fds.ex)))
-		goto out;
-	zero_fd_set(n, fds.res_in);
-	zero_fd_set(n, fds.res_out);
-	zero_fd_set(n, fds.res_ex);
-
-	ret = do_select(n, &fds, &timeout);
-
-	if (tvp32 && !(current->personality & STICKY_TIMEOUTS)) {
-		time_t sec = 0, usec = 0;
-		if (timeout) {
-			sec = timeout / HZ;
-			usec = timeout % HZ;
-			usec *= (1000000/HZ);
-		}
-		if (put_user(sec, &tvp32->tv_sec) || put_user(usec, &tvp32->tv_usec)) {
-			ret = -EFAULT;
-			goto out;
-		}
-	}
-
-	if (ret < 0)
-		goto out;
-	if (!ret) {
-		ret = -ERESTARTNOHAND;
-		if (signal_pending(current))
-			goto out;
-		ret = 0;
-	}
-
-	set_fd_set(n, inp, fds.res_in);
-	set_fd_set(n, outp, fds.res_out);
-	set_fd_set(n, exp, fds.res_ex);
-
-out:
-	kfree(bits);
-out_nofds:
-	return ret;
-}
-
 struct sel_arg_struct {
 	unsigned int n;
 	unsigned int inp;
@@ -937,87 +791,8 @@
 
 	if (copy_from_user(&a, arg, sizeof(a)))
 		return -EFAULT;
-	return sys32_select(a.n, (fd_set *) A(a.inp), (fd_set *) A(a.outp), (fd_set *) A(a.exp),
-			    (struct compat_timeval *) A(a.tvp));
-}
-
-static struct iovec *
-get_compat_iovec (struct compat_iovec *iov32, struct iovec *iov_buf, u32 count, int type)
-{
-	u32 i, buf, len;
-	struct iovec *ivp, *iov;
-
-	/* Get the "struct iovec" from user memory */
-
-	if (!count)
-		return 0;
-	if (verify_area(VERIFY_READ, iov32, sizeof(struct compat_iovec)*count))
-		return NULL;
-	if (count > UIO_MAXIOV)
-		return NULL;
-	if (count > UIO_FASTIOV) {
-		iov = kmalloc(count*sizeof(struct iovec), GFP_KERNEL);
-		if (!iov)
-			return NULL;
-	} else
-		iov = iov_buf;
-
-	ivp = iov;
-	for (i = 0; i < count; i++) {
-		if (__get_user(len, &iov32->iov_len) || __get_user(buf, &iov32->iov_base)) {
-			if (iov != iov_buf)
-				kfree(iov);
-			return NULL;
-		}
-		if (verify_area(type, (void *)A(buf), len)) {
-			if (iov != iov_buf)
-				kfree(iov);
-			return((struct iovec *)0);
-		}
-		ivp->iov_base = (void *)A(buf);
-		ivp->iov_len = (__kernel_size_t) len;
-		iov32++;
-		ivp++;
-	}
-	return iov;
-}
-
-asmlinkage long
-sys32_readv (int fd, struct compat_iovec *vector, u32 count)
-{
-	struct iovec iovstack[UIO_FASTIOV];
-	struct iovec *iov;
-	long ret;
-	mm_segment_t old_fs = get_fs();
-
-	iov = get_compat_iovec(vector, iovstack, count, VERIFY_WRITE);
-	if (!iov)
-		return -EFAULT;
-	set_fs(KERNEL_DS);
-	ret = sys_readv(fd, iov, count);
-	set_fs(old_fs);
-	if (iov != iovstack)
-		kfree(iov);
-	return ret;
-}
-
-asmlinkage long
-sys32_writev (int fd, struct compat_iovec *vector, u32 count)
-{
-	struct iovec iovstack[UIO_FASTIOV];
-	struct iovec *iov;
-	long ret;
-	mm_segment_t old_fs = get_fs();
-
-	iov = get_compat_iovec(vector, iovstack, count, VERIFY_READ);
-	if (!iov)
-		return -EFAULT;
-	set_fs(KERNEL_DS);
-	ret = sys_writev(fd, iov, count);
-	set_fs(old_fs);
-	if (iov != iovstack)
-		kfree(iov);
-	return ret;
+	return compat_sys_select(a.n, compat_ptr(a.inp), compat_ptr(a.outp),
+				 compat_ptr(a.exp), compat_ptr(a.tvp));
 }
 
 #define SEMOP		 1
@@ -2298,7 +2073,7 @@
 	((desc)->a & 0x0ffff) |			\
 	 ((desc)->b & 0xf0000) )
 
-#define GET_32BIT(desc)		(((desc)->b >> 23) & 1)
+#define GET_32BIT(desc)		(((desc)->b >> 22) & 1)
 #define GET_CONTENTS(desc)	(((desc)->b >> 10) & 3)
 #define GET_WRITABLE(desc)	(((desc)->b >>  9) & 1)
 #define GET_LIMIT_PAGES(desc)	(((desc)->b >> 23) & 1)
@@ -2423,176 +2198,6 @@
 	segid = (egid == (compat_gid_t)-1) ? ((gid_t)-1) : ((gid_t)egid);
 	ssgid = (sgid == (compat_gid_t)-1) ? ((gid_t)-1) : ((gid_t)sgid);
 	return sys_setresgid(srgid, segid, ssgid);
-}
-
-/* Stuff for NFS server syscalls... */
-struct nfsctl_svc32 {
-	u16			svc32_port;
-	s32			svc32_nthreads;
-};
-
-struct nfsctl_client32 {
-	s8			cl32_ident[NFSCLNT_IDMAX+1];
-	s32			cl32_naddr;
-	struct in_addr		cl32_addrlist[NFSCLNT_ADDRMAX];
-	s32			cl32_fhkeytype;
-	s32			cl32_fhkeylen;
-	u8			cl32_fhkey[NFSCLNT_KEYMAX];
-};
-
-struct nfsctl_export32 {
-	s8			ex32_client[NFSCLNT_IDMAX+1];
-	s8			ex32_path[NFS_MAXPATHLEN+1];
-	compat_dev_t	ex32_dev;
-	compat_ino_t	ex32_ino;
-	s32			ex32_flags;
-	compat_uid_t	ex32_anon_uid;
-	compat_gid_t	ex32_anon_gid;
-};
-
-struct nfsctl_arg32 {
-	s32			ca32_version;	/* safeguard */
-	union {
-		struct nfsctl_svc32	u32_svc;
-		struct nfsctl_client32	u32_client;
-		struct nfsctl_export32	u32_export;
-		u32			u32_debug;
-	} u;
-#define ca32_svc	u.u32_svc
-#define ca32_client	u.u32_client
-#define ca32_export	u.u32_export
-#define ca32_debug	u.u32_debug
-};
-
-union nfsctl_res32 {
-	struct knfs_fh		cr32_getfh;
-	u32			cr32_debug;
-};
-
-static int
-nfs_svc32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32)
-{
-	int err;
-
-	err = __get_user(karg->ca_version, &arg32->ca32_version);
-	err |= __get_user(karg->ca_svc.svc_port, &arg32->ca32_svc.svc32_port);
-	err |= __get_user(karg->ca_svc.svc_nthreads,
-			  &arg32->ca32_svc.svc32_nthreads);
-	return err;
-}
-
-static int
-nfs_clnt32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32)
-{
-	int err;
-
-	err = __get_user(karg->ca_version, &arg32->ca32_version);
-	err |= copy_from_user(&karg->ca_client.cl_ident[0],
-			  &arg32->ca32_client.cl32_ident[0],
-			  NFSCLNT_IDMAX);
-	err |= __get_user(karg->ca_client.cl_naddr,
-			  &arg32->ca32_client.cl32_naddr);
-	err |= copy_from_user(&karg->ca_client.cl_addrlist[0],
-			  &arg32->ca32_client.cl32_addrlist[0],
-			  (sizeof(struct in_addr) * NFSCLNT_ADDRMAX));
-	err |= __get_user(karg->ca_client.cl_fhkeytype,
-		      &arg32->ca32_client.cl32_fhkeytype);
-	err |= __get_user(karg->ca_client.cl_fhkeylen,
-		      &arg32->ca32_client.cl32_fhkeylen);
-	err |= copy_from_user(&karg->ca_client.cl_fhkey[0],
-			  &arg32->ca32_client.cl32_fhkey[0],
-			  NFSCLNT_KEYMAX);
-	return err;
-}
-
-static int
-nfs_exp32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32)
-{
-	int err;
-
-	err = __get_user(karg->ca_version, &arg32->ca32_version);
-	err |= copy_from_user(&karg->ca_export.ex_client[0],
-			  &arg32->ca32_export.ex32_client[0],
-			  NFSCLNT_IDMAX);
-	err |= copy_from_user(&karg->ca_export.ex_path[0],
-			  &arg32->ca32_export.ex32_path[0],
-			  NFS_MAXPATHLEN);
-	err |= __get_user(karg->ca_export.ex_dev,
-		      &arg32->ca32_export.ex32_dev);
-	err |= __get_user(karg->ca_export.ex_ino,
-		      &arg32->ca32_export.ex32_ino);
-	err |= __get_user(karg->ca_export.ex_flags,
-		      &arg32->ca32_export.ex32_flags);
-	err |= __get_user(karg->ca_export.ex_anon_uid,
-		      &arg32->ca32_export.ex32_anon_uid);
-	err |= __get_user(karg->ca_export.ex_anon_gid,
-		      &arg32->ca32_export.ex32_anon_gid);
-	return err;
-}
-
-static int
-nfs_getfh32_res_trans(union nfsctl_res *kres, union nfsctl_res32 *res32)
-{
-	int err;
-
-	err = copy_to_user(&res32->cr32_getfh,
-			&kres->cr_getfh,
-			sizeof(res32->cr32_getfh));
-	err |= __put_user(kres->cr_debug, &res32->cr32_debug);
-	return err;
-}
-
-int asmlinkage
-sys32_nfsservctl(int cmd, struct nfsctl_arg32 *arg32, union nfsctl_res32 *res32)
-{
-	struct nfsctl_arg *karg = NULL;
-	union nfsctl_res *kres = NULL;
-	mm_segment_t oldfs;
-	int err;
-
-	karg = kmalloc(sizeof(*karg), GFP_USER);
-	if(!karg)
-		return -ENOMEM;
-	if(res32) {
-		kres = kmalloc(sizeof(*kres), GFP_USER);
-		if(!kres) {
-			kfree(karg);
-			return -ENOMEM;
-		}
-	}
-	switch(cmd) {
-	case NFSCTL_SVC:
-		err = nfs_svc32_trans(karg, arg32);
-		break;
-	case NFSCTL_ADDCLIENT:
-		err = nfs_clnt32_trans(karg, arg32);
-		break;
-	case NFSCTL_DELCLIENT:
-		err = nfs_clnt32_trans(karg, arg32);
-		break;
-	case NFSCTL_EXPORT:
-		err = nfs_exp32_trans(karg, arg32);
-		break;
-	default:
-		err = -EINVAL;
-		break;
-	}
-	if(err)
-		goto done;
-	oldfs = get_fs();
-	set_fs(KERNEL_DS);
-	err = sys_nfsservctl(cmd, karg, kres);
-	set_fs(oldfs);
-
-	if(!err && cmd == NFSCTL_GETFS)
-		err = nfs_getfh32_res_trans(kres, res32);
-
-done:
-	if(karg)
-		kfree(karg);
-	if(kres)
-		kfree(kres);
-	return err;
 }
 
 /* Handle adjtimex compatibility. */
diff -Nru a/arch/ia64/kernel/acpi.c b/arch/ia64/kernel/acpi.c
--- a/arch/ia64/kernel/acpi.c	Sun May 16 01:18:35 2004
+++ b/arch/ia64/kernel/acpi.c	Sun May 16 01:18:35 2004
@@ -632,16 +632,6 @@
 	return 0;
 }
 
-/* deprecated in favor of acpi_gsi_to_irq */
-int
-acpi_irq_to_vector (u32 gsi)
-{
-	if (has_8259 && gsi < 16)
-		return isa_irq_to_vector(gsi);
-
-	return gsi_to_vector(gsi);
-}
-
 int
 acpi_gsi_to_irq (u32 gsi, unsigned int *irq)
 {
diff -Nru a/arch/ia64/kernel/head.S b/arch/ia64/kernel/head.S
--- a/arch/ia64/kernel/head.S	Sun May 16 01:18:35 2004
+++ b/arch/ia64/kernel/head.S	Sun May 16 01:18:35 2004
@@ -866,12 +866,14 @@
 	 * Inputs:
 	 *   ar.pfs - saved CFM of caller
 	 *   ar.ccv - 0 (and available for use)
+	 *   r27    - flags from spin_lock_irqsave or 0.  Must be preserved.
 	 *   r28    - available for use.
 	 *   r29    - available for use.
 	 *   r30    - available for use.
 	 *   r31    - address of lock, available for use.
 	 *   b6     - return address
 	 *   p14    - available for use.
+	 *   p15    - used to track flag status.
 	 *
 	 * If you patch this code to use more registers, do not forget to update
 	 * the clobber lists for spin_lock() in include/asm-ia64/spinlock.h.
@@ -885,22 +887,26 @@
 	.save rp, r28
 	.body
 	nop 0
-	nop 0
+	tbit.nz p15,p0=r27,IA64_PSR_I_BIT
 	.restore sp		// pop existing prologue after next insn
 	mov b6 = r28
 	.prologue
 	.save ar.pfs, r0
 	.altrp b6
 	.body
+	;;
+(p15)	ssm psr.i		// reenable interrupts if they were on
+				// DavidM says that srlz.d is slow and is not required in this case
 .wait:
 	// exponential backoff, kdb, lockmeter etc. go in here
 	hint @pause
 	ld4 r30=[r31]		// don't use ld4.bias; if it's contended, we won't write the word
 	nop 0
 	;;
-	cmp4.eq p14,p0=r30,r0
-(p14)	br.cond.sptk.few b6	// lock is now free, try to acquire
-	br.cond.sptk.few .wait
+	cmp4.ne p14,p0=r30,r0
+(p14)	br.cond.sptk.few .wait
+(p15)	rsm psr.i		// disable interrupts if we reenabled them
+	br.cond.sptk.few b6	// lock is now free, try to acquire
 END(ia64_spinlock_contention_pre3_4)
 
 #else
@@ -909,14 +915,20 @@
 	.prologue
 	.altrp b6
 	.body
+	tbit.nz p15,p0=r27,IA64_PSR_I_BIT
+	;;
 .wait:
+(p15)	ssm psr.i		// reenable interrupts if they were on
+				// DavidM says that srlz.d is slow and is not required in this case
+.wait2:
 	// exponential backoff, kdb, lockmeter etc. go in here
 	hint @pause
 	ld4 r30=[r31]		// don't use ld4.bias; if it's contended, we won't write the word
 	;;
 	cmp4.ne p14,p0=r30,r0
 	mov r30 = 1
-(p14)	br.cond.sptk.few .wait
+(p14)	br.cond.sptk.few .wait2
+(p15)	rsm psr.i		// disable interrupts if we reenabled them
 	;;
 	cmpxchg4.acq r30=[r31], r30, ar.ccv
 	;;
diff -Nru a/arch/ia64/kernel/iosapic.c b/arch/ia64/kernel/iosapic.c
--- a/arch/ia64/kernel/iosapic.c	Sun May 16 01:18:35 2004
+++ b/arch/ia64/kernel/iosapic.c	Sun May 16 01:18:35 2004
@@ -32,6 +32,8 @@
  * 03/02/19	B. Helgaas	Make pcat_compat system-wide, not per-IOSAPIC.
  *				Remove iosapic_address & gsi_base from external interfaces.
  *				Rationalize __init/__devinit attributes.
+ * 04/12/04 Ashok Raj	<ashok.raj@intel.com> Intel Corporation 2004
+ *				Updated to work with irq migration necessary for CPU Hotplug
  */
 /*
  * Here is what the interrupt logic between a PCI device and the kernel looks like:
@@ -98,6 +100,7 @@
 #endif
 
 static spinlock_t iosapic_lock = SPIN_LOCK_UNLOCKED;
+cpumask_t	__cacheline_aligned pending_irq_cpumask[NR_IRQS];
 
 /* These tables map IA-64 vectors to the IOSAPIC pin that generates this vector. */
 
@@ -188,8 +191,10 @@
 	pol     = iosapic_intr_info[vector].polarity;
 	trigger = iosapic_intr_info[vector].trigger;
 	dmode   = iosapic_intr_info[vector].dmode;
+	vector &= (~IA64_IRQ_REDIRECTED);
 
 	redir = (dmode == IOSAPIC_LOWEST_PRIORITY) ? 1 : 0;
+
 #ifdef CONFIG_SMP
 	{
 		unsigned int irq;
@@ -311,9 +316,8 @@
 
 	spin_lock_irqsave(&iosapic_lock, flags);
 	{
-		/* get current delivery mode by reading the low32 */
-		writel(IOSAPIC_RTE_LOW(rte_index), addr + IOSAPIC_REG_SELECT);
 		low32 = iosapic_intr_info[vec].low32 & ~(7 << IOSAPIC_DELIVERY_SHIFT);
+
 		if (redir)
 		        /* change delivery mode to lowest priority */
 			low32 |= (IOSAPIC_LOWEST_PRIORITY << IOSAPIC_DELIVERY_SHIFT);
@@ -331,6 +335,21 @@
 #endif
 }
 
+static inline void move_irq(int irq)
+{
+	/* note - we hold desc->lock */
+	cpumask_t tmp;
+	irq_desc_t *desc = irq_descp(irq);
+
+	if (!cpus_empty(pending_irq_cpumask[irq])) {
+		cpus_and(tmp, pending_irq_cpumask[irq], cpu_online_map);
+		if (unlikely(!cpus_empty(tmp))) {
+			desc->handler->set_affinity(irq, pending_irq_cpumask[irq]);
+		}
+		cpus_clear(pending_irq_cpumask[irq]);
+	}
+}
+
 /*
  * Handlers for level-triggered interrupts.
  */
@@ -347,6 +366,7 @@
 {
 	ia64_vector vec = irq_to_vector(irq);
 
+	move_irq(irq);
 	writel(vec, iosapic_intr_info[vec].addr + IOSAPIC_EOI);
 }
 
@@ -386,6 +406,8 @@
 iosapic_ack_edge_irq (unsigned int irq)
 {
 	irq_desc_t *idesc = irq_descp(irq);
+
+	move_irq(irq);
 	/*
 	 * Once we have recorded IRQ_PENDING already, we can mask the
 	 * interrupt for real. This prevents IRQ storms from unhandled
diff -Nru a/arch/ia64/kernel/irq.c b/arch/ia64/kernel/irq.c
--- a/arch/ia64/kernel/irq.c	Sun May 16 01:18:36 2004
+++ b/arch/ia64/kernel/irq.c	Sun May 16 01:18:36 2004
@@ -8,6 +8,12 @@
  * instead of just grabbing them. Thus setups with different IRQ numbers
  * shouldn't result in any weird surprises, and installing new handlers
  * should be easier.
+ *
+ * Copyright (C) Ashok Raj<ashok.raj@intel.com>, Intel Corporation 2004
+ *
+ * 4/14/2004: Added code to handle cpu migration and do safe irq
+ *			migration without lossing interrupts for iosapic
+ *			architecture.
  */
 
 /*
@@ -27,6 +33,7 @@
 #include <linux/timex.h>
 #include <linux/slab.h>
 #include <linux/random.h>
+#include <linux/cpu.h>
 #include <linux/ctype.h>
 #include <linux/smp_lock.h>
 #include <linux/init.h>
@@ -35,18 +42,21 @@
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
 #include <linux/kallsyms.h>
+#include <linux/notifier.h>
 
 #include <asm/atomic.h>
+#include <asm/cpu.h>
 #include <asm/io.h>
 #include <asm/smp.h>
 #include <asm/system.h>
 #include <asm/bitops.h>
 #include <asm/uaccess.h>
 #include <asm/pgalloc.h>
+#include <asm/tlbflush.h>
 #include <asm/delay.h>
 #include <asm/irq.h>
 
-
+extern cpumask_t    __cacheline_aligned pending_irq_cpumask[NR_IRQS];
 
 /*
  * Linux has a controller-independent x86 interrupt architecture.
@@ -938,7 +948,9 @@
 static int irq_affinity_read_proc (char *page, char **start, off_t off,
 			int count, int *eof, void *data)
 {
-	int len = cpumask_scnprintf(page, count, irq_affinity[(long)data]);
+	int len = sprintf(page, "%s", irq_redir[(long)data] ? "r " : "");
+
+	len += cpumask_scnprintf(page+len, count, irq_affinity[(long)data]);
 	if (count - len < 2)
 		return -EINVAL;
 	len += sprintf(page + len, "\n");
@@ -956,6 +968,7 @@
 	int rlen;
 	int prelen;
 	irq_desc_t *desc = irq_descp(irq);
+	unsigned long flags;
 
 	if (!desc->handler->set_affinity)
 		return -EIO;
@@ -994,11 +1007,107 @@
 	if (cpus_empty(tmp))
 		return -EINVAL;
 
-	desc->handler->set_affinity(irq, new_value);
+	spin_lock_irqsave(&desc->lock, flags);
+	pending_irq_cpumask[irq] = new_value;
+	spin_unlock_irqrestore(&desc->lock, flags);
+
 	return full_count;
 }
 
 #endif /* CONFIG_SMP */
+
+#ifdef CONFIG_HOTPLUG_CPU
+unsigned int vectors_in_migration[NR_IRQS];
+
+/*
+ * Since cpu_online_map is already updated, we just need to check for
+ * affinity that has zeros
+ */
+static void migrate_irqs(void)
+{
+	cpumask_t	mask;
+	irq_desc_t *desc;
+	int 		irq, new_cpu;
+
+	for (irq=0; irq < NR_IRQS; irq++) {
+		desc = irq_descp(irq);
+
+		/*
+		 * No handling for now.
+		 * TBD: Implement a disable function so we can now
+		 * tell CPU not to respond to these local intr sources.
+		 * such as ITV,CPEI,MCA etc.
+		 */
+		if (desc->status == IRQ_PER_CPU)
+			continue;
+
+		cpus_and(mask, irq_affinity[irq], cpu_online_map);
+		if (any_online_cpu(mask) == NR_CPUS) {
+			/*
+			 * Save it for phase 2 processing
+			 */
+			vectors_in_migration[irq] = irq;
+
+			new_cpu = any_online_cpu(cpu_online_map);
+			mask = cpumask_of_cpu(new_cpu);
+
+			/*
+			 * Al three are essential, currently WARN_ON.. maybe panic?
+			 */
+			if (desc->handler && desc->handler->disable &&
+				desc->handler->enable && desc->handler->set_affinity) {
+				desc->handler->disable(irq);
+				desc->handler->set_affinity(irq, mask);
+				desc->handler->enable(irq);
+			} else {
+				WARN_ON((!(desc->handler) || !(desc->handler->disable) ||
+						!(desc->handler->enable) ||
+						!(desc->handler->set_affinity)));
+			}
+		}
+	}
+}
+
+void fixup_irqs(void)
+{
+	unsigned int irq;
+	extern void ia64_process_pending_intr(void);
+
+	ia64_set_itv(1<<16);
+	/*
+	 * Phase 1: Locate irq's bound to this cpu and
+	 * relocate them for cpu removal.
+	 */
+	migrate_irqs();
+
+	/*
+	 * Phase 2: Perform interrupt processing for all entries reported in
+	 * local APIC.
+	 */
+	ia64_process_pending_intr();
+
+	/*
+	 * Phase 3: Now handle any interrupts not captured in local APIC.
+	 * This is to account for cases that device interrupted during the time the
+	 * rte was being disabled and re-programmed.
+	 */
+	for (irq=0; irq < NR_IRQS; irq++) {
+		if (vectors_in_migration[irq]) {
+			vectors_in_migration[irq]=0;
+			do_IRQ(irq, NULL);
+		}
+	}
+
+	/*
+	 * Now let processor die. We do irq disable and max_xtp() to
+	 * ensure there is no more interrupts routed to this processor.
+	 * But the local timer interrupt can have 1 pending which we
+	 * take care in timer_interrupt().
+	 */
+	max_xtp();
+	local_irq_disable();
+}
+#endif
 
 static int prof_cpu_mask_read_proc (char *page, char **start, off_t off,
 			int count, int *eof, void *data)
diff -Nru a/arch/ia64/kernel/irq_ia64.c b/arch/ia64/kernel/irq_ia64.c
--- a/arch/ia64/kernel/irq_ia64.c	Sun May 16 01:18:34 2004
+++ b/arch/ia64/kernel/irq_ia64.c	Sun May 16 01:18:34 2004
@@ -10,6 +10,8 @@
  *
  * 09/15/00 Goutham Rao <goutham.rao@intel.com> Implemented pci_irq_to_vector
  *                      PCI to vector allocation routine.
+ * 04/14/2004 Ashok Raj <ashok.raj@intel.com>
+ *						Added CPU Hotplug handling for IPF.
  */
 
 #include <linux/config.h>
@@ -85,6 +87,11 @@
 
 extern unsigned int do_IRQ(unsigned long irq, struct pt_regs *regs);
 
+#ifdef CONFIG_SMP
+#	define IS_RESCHEDULE(vec)	(vec == IA64_IPI_RESCHEDULE)
+#else
+#	define IS_RESCHEDULE(vec)	(0)
+#endif
 /*
  * That's where the IVT branches when we get an external
  * interrupt. This branches to the correct hardware IRQ handler via
@@ -94,11 +101,6 @@
 ia64_handle_irq (ia64_vector vector, struct pt_regs *regs)
 {
 	unsigned long saved_tpr;
-#ifdef CONFIG_SMP
-#	define IS_RESCHEDULE(vec)	(vec == IA64_IPI_RESCHEDULE)
-#else
-#	define IS_RESCHEDULE(vec)	(0)
-#endif
 
 #if IRQ_DEBUG
 	{
@@ -161,6 +163,54 @@
 	 */
 	irq_exit();
 }
+
+#ifdef CONFIG_HOTPLUG_CPU
+/*
+ * This function emulates a interrupt processing when a cpu is about to be
+ * brought down.
+ */
+void ia64_process_pending_intr(void)
+{
+	ia64_vector vector;
+	unsigned long saved_tpr;
+	extern unsigned int vectors_in_migration[NR_IRQS];
+
+	vector = ia64_get_ivr();
+
+	 irq_enter();
+	 saved_tpr = ia64_getreg(_IA64_REG_CR_TPR);
+	 ia64_srlz_d();
+
+	 /*
+	  * Perform normal interrupt style processing
+	  */
+	while (vector != IA64_SPURIOUS_INT_VECTOR) {
+		if (!IS_RESCHEDULE(vector)) {
+			ia64_setreg(_IA64_REG_CR_TPR, vector);
+			ia64_srlz_d();
+
+			/*
+			 * Now try calling normal ia64_handle_irq as it would have got called
+			 * from a real intr handler. Try passing null for pt_regs, hopefully
+			 * it will work. I hope it works!.
+			 * Probably could shared code.
+			 */
+			vectors_in_migration[local_vector_to_irq(vector)]=0;
+			do_IRQ(local_vector_to_irq(vector), NULL);
+
+			/*
+			 * Disable interrupts and send EOI
+			 */
+			local_irq_disable();
+			ia64_setreg(_IA64_REG_CR_TPR, saved_tpr);
+		}
+		ia64_eoi();
+		vector = ia64_get_ivr();
+	}
+	irq_exit();
+}
+#endif
+
 
 #ifdef CONFIG_SMP
 extern irqreturn_t handle_IPI (int irq, void *dev_id, struct pt_regs *regs);
diff -Nru a/arch/ia64/kernel/palinfo.c b/arch/ia64/kernel/palinfo.c
--- a/arch/ia64/kernel/palinfo.c	Sun May 16 01:18:33 2004
+++ b/arch/ia64/kernel/palinfo.c	Sun May 16 01:18:33 2004
@@ -8,11 +8,14 @@
  *
  * Copyright (C) 2000-2001, 2003 Hewlett-Packard Co
  *	Stephane Eranian <eranian@hpl.hp.com>
+ * Copyright (C) 2004 Intel Corporation
+ *  Ashok Raj <ashok.raj@intel.com>
  *
  * 05/26/2000	S.Eranian	initial release
  * 08/21/2000	S.Eranian	updated to July 2000 PAL specs
  * 02/05/2001   S.Eranian	fixed module support
  * 10/23/2001	S.Eranian	updated pal_perf_mon_info bug fixes
+ * 03/24/2004	Ashok Raj	updated to work with CPU Hotplug
  */
 #include <linux/config.h>
 #include <linux/types.h>
@@ -22,6 +25,9 @@
 #include <linux/mm.h>
 #include <linux/module.h>
 #include <linux/efi.h>
+#include <linux/notifier.h>
+#include <linux/cpu.h>
+#include <linux/cpumask.h>
 
 #include <asm/pal.h>
 #include <asm/sal.h>
@@ -768,13 +774,12 @@
  * does not do recursion of deletion
  *
  * Notes:
- *	- first +1 accounts for the cpuN entry
- *	- second +1 account for toplevel palinfo
- *
+ *	- +1 accounts for the cpuN directory entry in /proc/pal
  */
-#define NR_PALINFO_PROC_ENTRIES	(NR_CPUS*(NR_PALINFO_ENTRIES+1)+1)
+#define NR_PALINFO_PROC_ENTRIES	(NR_CPUS*(NR_PALINFO_ENTRIES+1))
 
 static struct proc_dir_entry *palinfo_proc_entries[NR_PALINFO_PROC_ENTRIES];
+static struct proc_dir_entry *palinfo_dir;
 
 /*
  * This data structure is used to pass which cpu,function is being requested
@@ -888,47 +893,107 @@
 	return len;
 }
 
-static int __init
-palinfo_init(void)
+static void
+create_palinfo_proc_entries(unsigned int cpu)
 {
 #	define CPUSTR	"cpu%d"
 
 	pal_func_cpu_u_t f;
-	struct proc_dir_entry **pdir = palinfo_proc_entries;
-	struct proc_dir_entry *palinfo_dir, *cpu_dir;
-	int i, j;
+	struct proc_dir_entry **pdir;
+	struct proc_dir_entry *cpu_dir;
+	int j;
 	char cpustr[sizeof(CPUSTR)];
 
-	printk(KERN_INFO "PAL Information Facility v%s\n", PALINFO_VERSION);
-
-	palinfo_dir = proc_mkdir("pal", NULL);
 
 	/*
 	 * we keep track of created entries in a depth-first order for
 	 * cleanup purposes. Each entry is stored into palinfo_proc_entries
 	 */
-	for (i=0; i < NR_CPUS; i++) {
+	sprintf(cpustr,CPUSTR, cpu);
 
-		if (!cpu_online(i)) continue;
+	cpu_dir = proc_mkdir(cpustr, palinfo_dir);
 
-		sprintf(cpustr,CPUSTR, i);
+	f.req_cpu = cpu;
 
-		cpu_dir = proc_mkdir(cpustr, palinfo_dir);
+	/*
+	 * Compute the location to store per cpu entries
+	 * We dont store the top level entry in this list, but
+	 * remove it finally after removing all cpu entries.
+	 */
+	pdir = &palinfo_proc_entries[cpu*(NR_PALINFO_ENTRIES+1)];
+	*pdir++ = cpu_dir;
+	for (j=0; j < NR_PALINFO_ENTRIES; j++) {
+		f.func_id = j;
+		*pdir = create_proc_read_entry(
+				palinfo_entries[j].name, 0, cpu_dir,
+				palinfo_read_entry, (void *)f.value);
+		if (*pdir)
+			(*pdir)->owner = THIS_MODULE;
+		pdir++;
+	}
+}
 
-		f.req_cpu = i;
+static void
+remove_palinfo_proc_entries(unsigned int hcpu)
+{
+	int j;
+	struct proc_dir_entry *cpu_dir, **pdir;
 
-		for (j=0; j < NR_PALINFO_ENTRIES; j++) {
-			f.func_id = j;
-			*pdir = create_proc_read_entry(
-					palinfo_entries[j].name, 0, cpu_dir,
-					palinfo_read_entry, (void *)f.value);
-			if (*pdir)
-				(*pdir)->owner = THIS_MODULE;
-			pdir++;
+	pdir = &palinfo_proc_entries[hcpu*(NR_PALINFO_ENTRIES+1)];
+	cpu_dir = *pdir;
+	*pdir++=NULL;
+	for (j=0; j < (NR_PALINFO_ENTRIES); j++) {
+		if ((*pdir)) {
+			remove_proc_entry ((*pdir)->name, cpu_dir);
+			*pdir ++= NULL;
 		}
-		*pdir++ = cpu_dir;
 	}
-	*pdir = palinfo_dir;
+
+	if (cpu_dir) {
+		remove_proc_entry(cpu_dir->name, palinfo_dir);
+	}
+}
+
+static int __devinit palinfo_cpu_callback(struct notifier_block *nfb,
+								unsigned long action,
+								void *hcpu)
+{
+	unsigned int hotcpu = (unsigned long)hcpu;
+
+	switch (action) {
+	case CPU_ONLINE:
+		create_palinfo_proc_entries(hotcpu);
+		break;
+#ifdef CONFIG_HOTPLUG_CPU
+	case CPU_DEAD:
+		remove_palinfo_proc_entries(hotcpu);
+		break;
+#endif
+	}
+	return NOTIFY_OK;
+}
+
+static struct notifier_block palinfo_cpu_notifier =
+{
+	.notifier_call = palinfo_cpu_callback,
+	.priority = 0,
+};
+
+static int __init
+palinfo_init(void)
+{
+	int i = 0;
+
+	printk(KERN_INFO "PAL Information Facility v%s\n", PALINFO_VERSION);
+	palinfo_dir = proc_mkdir("pal", NULL);
+
+	/* Create palinfo dirs in /proc for all online cpus */
+	for_each_online_cpu(i) {
+		create_palinfo_proc_entries(i);
+	}
+
+	/* Register for future delivery via notify registration */
+	register_cpu_notifier(&palinfo_cpu_notifier);
 
 	return 0;
 }
@@ -939,10 +1004,19 @@
 	int i = 0;
 
 	/* remove all nodes: depth first pass. Could optimize this  */
-	for (i=0; i< NR_PALINFO_PROC_ENTRIES ; i++) {
-		if (palinfo_proc_entries[i])
-			remove_proc_entry (palinfo_proc_entries[i]->name, NULL);
+	for_each_online_cpu(i) {
+		remove_palinfo_proc_entries(i);
 	}
+
+	/*
+	 * Remove the top level entry finally
+	 */
+	remove_proc_entry(palinfo_dir->name, NULL);
+
+	/*
+	 * Unregister from cpu notifier callbacks
+	 */
+	unregister_cpu_notifier(&palinfo_cpu_notifier);
 }
 
 module_init(palinfo_init);
diff -Nru a/arch/ia64/kernel/process.c b/arch/ia64/kernel/process.c
--- a/arch/ia64/kernel/process.c	Sun May 16 01:18:35 2004
+++ b/arch/ia64/kernel/process.c	Sun May 16 01:18:35 2004
@@ -7,6 +7,7 @@
 #define __KERNEL_SYSCALLS__	/* see <asm/unistd.h> */
 #include <linux/config.h>
 
+#include <linux/cpu.h>
 #include <linux/pm.h>
 #include <linux/elf.h>
 #include <linux/errno.h>
@@ -14,6 +15,7 @@
 #include <linux/kernel.h>
 #include <linux/mm.h>
 #include <linux/module.h>
+#include <linux/notifier.h>
 #include <linux/personality.h>
 #include <linux/sched.h>
 #include <linux/slab.h>
@@ -22,13 +24,17 @@
 #include <linux/thread_info.h>
 #include <linux/unistd.h>
 #include <linux/efi.h>
+#include <linux/interrupt.h>
 
+#include <asm/cpu.h>
 #include <asm/delay.h>
 #include <asm/elf.h>
 #include <asm/ia32.h>
+#include <asm/irq.h>
 #include <asm/pgalloc.h>
 #include <asm/processor.h>
 #include <asm/sal.h>
+#include <asm/tlbflush.h>
 #include <asm/uaccess.h>
 #include <asm/unwind.h>
 #include <asm/user.h>
@@ -180,6 +186,40 @@
 			safe_halt();
 }
 
+#ifdef CONFIG_HOTPLUG_CPU
+/* We don't actually take CPU down, just spin without interrupts. */
+static inline void play_dead(void)
+{
+	extern void ia64_cpu_local_tick (void);
+	/* Ack it */
+	__get_cpu_var(cpu_state) = CPU_DEAD;
+
+	/* We shouldn't have to disable interrupts while dead, but
+	 * some interrupts just don't seem to go away, and this makes
+	 * it "work" for testing purposes. */
+	max_xtp();
+	local_irq_disable();
+	/* Death loop */
+	while (__get_cpu_var(cpu_state) != CPU_UP_PREPARE)
+		cpu_relax();
+
+	/*
+	 * Enable timer interrupts from now on
+	 * Not required if we put processor in SAL_BOOT_RENDEZ mode.
+	 */
+	local_flush_tlb_all();
+	cpu_set(smp_processor_id(), cpu_online_map);
+	wmb();
+	ia64_cpu_local_tick ();
+	local_irq_enable();
+}
+#else
+static inline void play_dead(void)
+{
+	BUG();
+}
+#endif /* CONFIG_HOTPLUG_CPU */
+
 void __attribute__((noreturn))
 cpu_idle (void *unused)
 {
@@ -195,7 +235,6 @@
 		if (!need_resched())
 			min_xtp();
 #endif
-
 		while (!need_resched()) {
 			if (mark_idle)
 				(*mark_idle)(1);
@@ -210,6 +249,8 @@
 #endif
 		schedule();
 		check_pgt_cache();
+		if (cpu_is_offline(smp_processor_id()))
+			play_dead();
 	}
 }
 
@@ -657,11 +698,6 @@
 	struct unw_frame_info info;
 	unsigned long ip;
 	int count = 0;
-	/*
-	 * These bracket the sleeping functions..
-	 */
-#	define first_sched	((unsigned long) scheduling_functions_start_here)
-#	define last_sched	((unsigned long) scheduling_functions_end_here)
 
 	/*
 	 * Note: p may not be a blocked task (it could be current or
@@ -676,12 +712,10 @@
 		if (unw_unwind(&info) < 0)
 			return 0;
 		unw_get_ip(&info, &ip);
-		if (ip < first_sched || ip >= last_sched)
+		if (!in_sched_functions(ip))
 			return ip;
 	} while (count++ < 16);
 	return 0;
-#	undef first_sched
-#	undef last_sched
 }
 
 void
diff -Nru a/arch/ia64/kernel/sal.c b/arch/ia64/kernel/sal.c
--- a/arch/ia64/kernel/sal.c	Sun May 16 01:18:36 2004
+++ b/arch/ia64/kernel/sal.c	Sun May 16 01:18:36 2004
@@ -122,10 +122,23 @@
 static void __init
 set_smp_redirect (int flag)
 {
+#ifndef CONFIG_HOTPLUG_CPU
 	if (no_int_routing)
 		smp_int_redirect &= ~flag;
 	else
 		smp_int_redirect |= flag;
+#else
+	/*
+	 * For CPU Hotplug we dont want to do any chipset supported
+	 * interrupt redirection. The reason is this would require that
+	 * All interrupts be stopped and hard bind the irq to a cpu.
+	 * Later when the interrupt is fired we need to set the redir hint
+	 * on again in the vector. This is combersome for something that the
+	 * user mode irq balancer will solve anyways.
+	 */
+	no_int_routing=1;
+	smp_int_redirect &= ~flag;
+#endif
 }
 #else
 #define set_smp_redirect(flag)	do { } while (0)
diff -Nru a/arch/ia64/kernel/setup.c b/arch/ia64/kernel/setup.c
--- a/arch/ia64/kernel/setup.c	Sun May 16 01:18:33 2004
+++ b/arch/ia64/kernel/setup.c	Sun May 16 01:18:33 2004
@@ -575,7 +575,7 @@
 void
 cpu_init (void)
 {
-	extern void __init ia64_mmu_init (void *);
+	extern void __devinit ia64_mmu_init (void *);
 	unsigned long num_phys_stacked;
 	pal_vm_info_2_u_t vmi;
 	unsigned int max_ctx;
diff -Nru a/arch/ia64/kernel/smp.c b/arch/ia64/kernel/smp.c
--- a/arch/ia64/kernel/smp.c	Sun May 16 01:18:36 2004
+++ b/arch/ia64/kernel/smp.c	Sun May 16 01:18:36 2004
@@ -71,10 +71,23 @@
 /* This needs to be cacheline aligned because it is written to by *other* CPUs.  */
 static DEFINE_PER_CPU(u64, ipi_operation) ____cacheline_aligned;
 
+extern void cpu_halt (void);
+
+void
+lock_ipi_calllock(void)
+{
+	spin_lock_irq(&call_lock);
+}
+
+void
+unlock_ipi_calllock(void)
+{
+	spin_unlock_irq(&call_lock);
+}
+
 static void
 stop_this_cpu (void)
 {
-	extern void cpu_halt (void);
 	/*
 	 * Remove this CPU:
 	 */
@@ -84,6 +97,17 @@
 	cpu_halt();
 }
 
+void
+cpu_die(void)
+{
+	max_xtp();
+	local_irq_disable();
+	cpu_halt();
+	/* Should never be here */
+	BUG();
+	for (;;);
+}
+
 irqreturn_t
 handle_IPI (int irq, void *dev_id, struct pt_regs *regs)
 {
@@ -307,6 +331,9 @@
 
 	if (!cpus)
 		return 0;
+
+	/* Can deadlock when called with interrupts disabled */
+	WARN_ON(irqs_disabled());
 
 	data.func = func;
 	data.info = info;
diff -Nru a/arch/ia64/kernel/smpboot.c b/arch/ia64/kernel/smpboot.c
--- a/arch/ia64/kernel/smpboot.c	Sun May 16 01:18:34 2004
+++ b/arch/ia64/kernel/smpboot.c	Sun May 16 01:18:34 2004
@@ -15,6 +15,7 @@
 #include <linux/module.h>
 #include <linux/acpi.h>
 #include <linux/bootmem.h>
+#include <linux/cpu.h>
 #include <linux/delay.h>
 #include <linux/init.h>
 #include <linux/interrupt.h>
@@ -22,10 +23,12 @@
 #include <linux/kernel.h>
 #include <linux/kernel_stat.h>
 #include <linux/mm.h>
+#include <linux/notifier.h>
 #include <linux/smp.h>
 #include <linux/smp_lock.h>
 #include <linux/spinlock.h>
 #include <linux/efi.h>
+#include <linux/percpu.h>
 
 #include <asm/atomic.h>
 #include <asm/bitops.h>
@@ -44,6 +47,7 @@
 #include <asm/ptrace.h>
 #include <asm/sal.h>
 #include <asm/system.h>
+#include <asm/tlbflush.h>
 #include <asm/unistd.h>
 
 #define SMP_DEBUG 0
@@ -69,17 +73,22 @@
 
 #define DEBUG_ITC_SYNC	0
 
-extern void __init calibrate_delay (void);
+extern void __devinit calibrate_delay (void);
 extern void start_ap (void);
 extern unsigned long ia64_iobase;
 
 task_t *task_for_booting_cpu;
 
-/* Bitmask of currently online CPUs */
+/*
+ * State for each CPU
+ */
+DEFINE_PER_CPU(int, cpu_state);
+
+/* Bitmasks of currently online, and possible CPUs */
 cpumask_t cpu_online_map;
 EXPORT_SYMBOL(cpu_online_map);
-cpumask_t phys_cpu_present_map;
-EXPORT_SYMBOL(phys_cpu_present_map);
+cpumask_t cpu_possible_map;
+EXPORT_SYMBOL(cpu_possible_map);
 
 /* which logical CPU number maps to which CPU (physical APIC ID) */
 volatile int ia64_cpu_to_sapicid[NR_CPUS];
@@ -99,6 +108,7 @@
 nointroute (char *str)
 {
 	no_int_routing = 1;
+	printk ("no_int_routing on\n");
 	return 1;
 }
 
@@ -262,12 +272,12 @@
 /*
  * Ideally sets up per-cpu profiling hooks.  Doesn't do much now...
  */
-static inline void __init
+static inline void __devinit
 smp_setup_percpu_timer (void)
 {
 }
 
-static void __init
+static void __devinit
 smp_callin (void)
 {
 	int cpuid, phys_id;
@@ -280,12 +290,16 @@
 	cpuid = smp_processor_id();
 	phys_id = hard_smp_processor_id();
 
-	if (cpu_test_and_set(cpuid, cpu_online_map)) {
+	if (cpu_online(cpuid)) {
 		printk(KERN_ERR "huh, phys CPU#0x%x, CPU#0x%x already present??\n",
 		       phys_id, cpuid);
 		BUG();
 	}
 
+	lock_ipi_calllock();
+	cpu_set(cpuid, cpu_online_map);
+	unlock_ipi_calllock();
+
 	smp_setup_percpu_timer();
 
 	/*
@@ -333,7 +347,7 @@
 /*
  * Activate a secondary processor.  head.S calls this.
  */
-int __init
+int __devinit
 start_secondary (void *unused)
 {
 	extern int cpu_idle (void);
@@ -346,7 +360,7 @@
 	return cpu_idle();
 }
 
-static struct task_struct * __init
+static struct task_struct * __devinit
 fork_by_hand (void)
 {
 	/*
@@ -356,29 +370,51 @@
 	return copy_process(CLONE_VM|CLONE_IDLETASK, 0, 0, 0, NULL, NULL);
 }
 
-static int __init
+struct create_idle {
+	struct task_struct *idle;
+	struct completion done;
+};
+
+void
+do_fork_idle(void *_c_idle)
+{
+	struct create_idle *c_idle = _c_idle;
+
+	c_idle->idle = fork_by_hand();
+	complete(&c_idle->done);
+}
+
+static int __devinit
 do_boot_cpu (int sapicid, int cpu)
 {
-	struct task_struct *idle;
 	int timeout;
+	struct create_idle c_idle;
+	DECLARE_WORK(work, do_fork_idle, &c_idle);
 
+	init_completion(&c_idle.done);
 	/*
 	 * We can't use kernel_thread since we must avoid to reschedule the child.
 	 */
-	idle = fork_by_hand();
-	if (IS_ERR(idle))
+	if (!keventd_up() || current_is_keventd())
+		work.func(work.data);
+	else {
+		schedule_work(&work);
+		wait_for_completion(&c_idle.done);
+	}
+
+	if (IS_ERR(c_idle.idle))
 		panic("failed fork for CPU %d", cpu);
-	wake_up_forked_process(idle);
+	wake_up_forked_process(c_idle.idle);
 
 	/*
 	 * We remove it from the pidhash and the runqueue
 	 * once we got the process:
 	 */
-	init_idle(idle, cpu);
+	init_idle(c_idle.idle, cpu);
 
-	unhash_process(idle);
+	unhash_process(c_idle.idle);
 
-	task_for_booting_cpu = idle;
+	task_for_booting_cpu = c_idle.idle;
 
 	Dprintk("Sending wakeup vector %lu to AP 0x%x/0x%x.\n", ap_wakeup_vector, cpu, sapicid);
 
@@ -437,18 +473,23 @@
 	int sapicid, cpu, i;
 	int boot_cpu_id = hard_smp_processor_id();
 
-	for (cpu = 0; cpu < NR_CPUS; cpu++)
+	for (cpu = 0; cpu < NR_CPUS; cpu++) {
 		ia64_cpu_to_sapicid[cpu] = -1;
+#ifdef CONFIG_HOTPLUG_CPU
+		cpu_set(cpu, cpu_possible_map);
+#endif
+	}
 
 	ia64_cpu_to_sapicid[0] = boot_cpu_id;
-	cpus_clear(phys_cpu_present_map);
-	cpu_set(0, phys_cpu_present_map);
-
+	cpus_clear(cpu_present_map);
+	cpu_set(0, cpu_present_map);
+	cpu_set(0, cpu_possible_map);
 	for (cpu = 1, i = 0; i < smp_boot_data.cpu_count; i++) {
 		sapicid = smp_boot_data.cpu_phys_id[i];
 		if (sapicid == boot_cpu_id)
 			continue;
-		cpu_set(cpu, phys_cpu_present_map);
+		cpu_set(cpu, cpu_present_map);
+		cpu_set(cpu, cpu_possible_map);
 		ia64_cpu_to_sapicid[cpu] = sapicid;
 		cpu++;
 	}
@@ -529,9 +570,11 @@
 	if (!max_cpus) {
 		printk(KERN_INFO "SMP mode deactivated.\n");
 		cpus_clear(cpu_online_map);
-		cpus_clear(phys_cpu_present_map);
+		cpus_clear(cpu_present_map);
+		cpus_clear(cpu_possible_map);
 		cpu_set(0, cpu_online_map);
-		cpu_set(0, phys_cpu_present_map);
+		cpu_set(0, cpu_present_map);
+		cpu_set(0, cpu_possible_map);
 		return;
 	}
 }
@@ -542,6 +585,74 @@
 	cpu_set(smp_processor_id(), cpu_callin_map);
 }
 
+#ifdef CONFIG_HOTPLUG_CPU
+extern void fixup_irqs(void);
+/* must be called with cpucontrol mutex held */
+static int __devinit cpu_enable(unsigned int cpu)
+{
+	per_cpu(cpu_state,cpu) = CPU_UP_PREPARE;
+	wmb();
+
+	while (!cpu_online(cpu))
+		cpu_relax();
+	return 0;
+}
+
+int __cpu_disable(void)
+{
+	int cpu = smp_processor_id();
+
+	/*
+	 * dont permit boot processor for now
+	 */
+	if (cpu == 0)
+		return -EBUSY;
+
+	fixup_irqs();
+	local_flush_tlb_all();
+	printk ("Disabled cpu %u\n", smp_processor_id());
+	return 0;
+}
+
+void __cpu_die(unsigned int cpu)
+{
+	unsigned int i;
+
+	for (i = 0; i < 100; i++) {
+		/* They ack this in play_dead by setting CPU_DEAD */
+		if (per_cpu(cpu_state, cpu) == CPU_DEAD)
+		{
+			/*
+			 * TBD: Enable this when physical removal
+			 * or when we put the processor is put in
+			 * SAL_BOOT_RENDEZ mode
+			 * cpu_clear(cpu, cpu_callin_map);
+			 */
+			return;
+		}
+		current->state = TASK_UNINTERRUPTIBLE;
+		schedule_timeout(HZ/10);
+	}
+ 	printk(KERN_ERR "CPU %u didn't die...\n", cpu);
+}
+#else /* !CONFIG_HOTPLUG_CPU */
+static int __devinit cpu_enable(unsigned int cpu)
+{
+	return 0;
+}
+
+int __cpu_disable(void)
+{
+	return -ENOSYS;
+}
+
+void __cpu_die(unsigned int cpu)
+{
+	/* We said "no" in __cpu_disable */
+	BUG();
+}
+#endif /* CONFIG_HOTPLUG_CPU */
+
 void
 smp_cpus_done (unsigned int dummy)
 {
@@ -570,6 +681,17 @@
 	if (sapicid == -1)
 		return -EINVAL;
 
+	/*
+	 * Already booted.. just enable and get outa idle lool
+	 */
+	if (cpu_isset(cpu, cpu_callin_map))
+	{
+		cpu_enable(cpu);
+		local_irq_enable();
+		while (!cpu_isset(cpu, cpu_online_map))
+			mb();
+		return 0;
+	}
 	/* Processor goes to start_secondary(), sets online flag */
 	ret = do_boot_cpu(sapicid, cpu);
 	if (ret < 0)
diff -Nru a/arch/ia64/kernel/time.c b/arch/ia64/kernel/time.c
--- a/arch/ia64/kernel/time.c	Sun May 16 01:18:34 2004
+++ b/arch/ia64/kernel/time.c	Sun May 16 01:18:34 2004
@@ -10,6 +10,7 @@
  */
 #include <linux/config.h>
 
+#include <linux/cpu.h>
 #include <linux/init.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
@@ -244,6 +245,10 @@
 {
 	unsigned long new_itm;
 
+	if (unlikely(cpu_is_offline(smp_processor_id()))) {
+		return IRQ_HANDLED;
+	}
+
 	platform_timer_interrupt(irq, dev_id, regs);
 
 	new_itm = local_cpu_data->itm_next;
@@ -326,7 +331,7 @@
 	ia64_set_itm(local_cpu_data->itm_next);
 }
 
-void __init
+void __devinit
 ia64_init_itm (void)
 {
 	unsigned long platform_base_freq, itc_freq;
diff -Nru a/arch/ia64/mm/hugetlbpage.c b/arch/ia64/mm/hugetlbpage.c
--- a/arch/ia64/mm/hugetlbpage.c	Sun May 16 01:18:35 2004
+++ b/arch/ia64/mm/hugetlbpage.c	Sun May 16 01:18:35 2004
@@ -293,8 +293,9 @@
 				goto out;
 			}
 			ret = add_to_page_cache(page, mapping, idx, GFP_ATOMIC);
-			unlock_page(page);
-			if (ret) {
+			if (! ret) {
+				unlock_page(page);
+			} else {
 				hugetlb_put_quota(mapping);
 				free_huge_page(page);
 				goto out;
diff -Nru a/arch/ia64/mm/init.c b/arch/ia64/mm/init.c
--- a/arch/ia64/mm/init.c	Sun May 16 01:18:34 2004
+++ b/arch/ia64/mm/init.c	Sun May 16 01:18:34 2004
@@ -275,11 +275,11 @@
 	ia64_patch_gate();
 }
 
-void __init
+void __devinit
 ia64_mmu_init (void *my_cpu_data)
 {
 	unsigned long psr, pta, impl_va_bits;
-	extern void __init tlb_init (void);
+	extern void __devinit tlb_init (void);
 	int cpu;
 
 #ifdef CONFIG_DISABLE_VHPT
diff -Nru a/arch/ia64/mm/tlb.c b/arch/ia64/mm/tlb.c
--- a/arch/ia64/mm/tlb.c	Sun May 16 01:18:36 2004
+++ b/arch/ia64/mm/tlb.c	Sun May 16 01:18:36 2004
@@ -166,7 +166,7 @@
 }
 EXPORT_SYMBOL(flush_tlb_range);
 
-void __init
+void __devinit
 ia64_tlb_init (void)
 {
 	ia64_ptce_info_t ptce_info;
diff -Nru a/arch/m68k/Kconfig b/arch/m68k/Kconfig
--- a/arch/m68k/Kconfig	Sun May 16 01:18:35 2004
+++ b/arch/m68k/Kconfig	Sun May 16 01:18:35 2004
@@ -76,9 +76,9 @@
 	select MMU_SUN3 if MMU
 	help
 	  This option enables support for the Sun 3 series of workstations
-	  (3/50, 3/60, 3/1xx, 3/2xx systems). Enabling this option requires 
-	  that all other hardware types must be disabled, as Sun 3 kernels 
-	  are incompatible with all other m68k targets (including Sun 3x!).  
+	  (3/50, 3/60, 3/1xx, 3/2xx systems). Enabling this option requires
+	  that all other hardware types must be disabled, as Sun 3 kernels
+	  are incompatible with all other m68k targets (including Sun 3x!).
 
 	  If you don't want to compile a kernel exclusively for a Sun 3, say N.
 
@@ -687,7 +687,7 @@
 	  debugging info resulting in a larger kernel image.
 	  Say Y here only if you plan to use gdb to debug the kernel.
 	  If you don't debug the kernel, you can say N.
-	  
+
 endmenu
 
 source "security/Kconfig"
diff -Nru a/arch/m68k/Makefile b/arch/m68k/Makefile
--- a/arch/m68k/Makefile	Sun May 16 01:18:36 2004
+++ b/arch/m68k/Makefile	Sun May 16 01:18:36 2004
@@ -56,7 +56,7 @@
 head-y := arch/m68k/kernel/head.o
 else
 head-y := arch/m68k/kernel/sun3-head.o
-endif 
+endif
 
 core-y				+= arch/m68k/kernel/	arch/m68k/mm/
 libs-y				+= arch/m68k/lib/
diff -Nru a/arch/m68k/amiga/amisound.c b/arch/m68k/amiga/amisound.c
--- a/arch/m68k/amiga/amisound.c	Sun May 16 01:18:37 2004
+++ b/arch/m68k/amiga/amisound.c	Sun May 16 01:18:37 2004
@@ -88,7 +88,7 @@
 		custom.aud[2].audlen = sizeof(sine_data)/2;
 		custom.aud[2].audper = (unsigned short)period;
 		custom.aud[2].audvol = 32; /* 50% of maxvol */
-	
+
 		if (ticks) {
 			sound_timer.expires = jiffies + ticks;
 			add_timer( &sound_timer );
diff -Nru a/arch/m68k/amiga/chipram.c b/arch/m68k/amiga/chipram.c
--- a/arch/m68k/amiga/chipram.c	Sun May 16 01:18:35 2004
+++ b/arch/m68k/amiga/chipram.c	Sun May 16 01:18:35 2004
@@ -42,7 +42,7 @@
     chipavail = amiga_chip_size;
 }
 
-    
+
 void *amiga_chip_alloc(unsigned long size, const char *name)
 {
     struct resource *res;
diff -Nru a/arch/m68k/amiga/config.c b/arch/m68k/amiga/config.c
--- a/arch/m68k/amiga/config.c	Sun May 16 01:18:33 2004
+++ b/arch/m68k/amiga/config.c	Sun May 16 01:18:33 2004
@@ -332,7 +332,7 @@
 
   case AMI_DRACO:
     panic("No support for Draco yet");
- 
+
   default:
     panic("Unknown Amiga Model");
   }
@@ -426,7 +426,7 @@
 				      */
 
   mach_set_clock_mmss  = amiga_set_clock_mmss;
-  mach_get_ss          = amiga_get_ss; 
+  mach_get_ss          = amiga_get_ss;
 #ifdef CONFIG_AMIGA_FLOPPY
   mach_floppy_setup    = amiga_floppy_setup;
 #endif
@@ -679,13 +679,13 @@
 		tod_3000.second2 = real_seconds % 10;
 		tod_3000.minute1 = real_minutes / 10;
 		tod_3000.minute2 = real_minutes % 10;
-		
+
 		tod_3000.cntrl1 = TOD3000_CNTRL1_FREE;
 	} else /* if (AMIGAHW_PRESENT(A2000_CLK)) */ {
 		int cnt = 5;
 
 		tod_2000.cntrl1 |= TOD2000_CNTRL1_HOLD;
-		
+
 		while ((tod_2000.cntrl1 & TOD2000_CNTRL1_BUSY) && cnt--)
 		{
 			tod_2000.cntrl1 &= ~TOD2000_CNTRL1_HOLD;
@@ -715,7 +715,7 @@
 		tod_3000.cntrl1 = TOD3000_CNTRL1_HOLD;
 		s = tod_3000.second1 * 10 + tod_3000.second2;
 		tod_3000.cntrl1 = TOD3000_CNTRL1_FREE;
-	} else /* if (AMIGAHW_PRESENT(A2000_CLK)) */ { 
+	} else /* if (AMIGAHW_PRESENT(A2000_CLK)) */ {
 		s = tod_2000.second1 * 10 + tod_2000.second2;
 	}
 	return s;
@@ -758,7 +758,7 @@
        : "a" (jmp_addr));
  jmp_addr_label040:
   /* disable translation on '040 now */
-  __asm__ __volatile__    
+  __asm__ __volatile__
     ("moveq #0,%/d0\n\t"
      ".chip 68040\n\t"
      "movec %%d0,%%tc\n\t"	/* disable MMU */
@@ -783,7 +783,7 @@
      "1:\n\t"
      "reset\n\t"
      "jmp   %/a0@" : /* Just that gcc scans it for % escapes */ );
-  
+
   for (;;);
 
 }
diff -Nru a/arch/m68k/apollo/config.c b/arch/m68k/apollo/config.c
--- a/arch/m68k/apollo/config.c	Sun May 16 01:18:36 2004
+++ b/arch/m68k/apollo/config.c	Sun May 16 01:18:36 2004
@@ -62,19 +62,19 @@
 	const unsigned long *data = record->data;
 
 	switch(record->tag) {
-		case BI_APOLLO_MODEL: 
-			apollo_model=*data;	
+		case BI_APOLLO_MODEL:
+			apollo_model=*data;
 			break;
 
 		default:
 			 unknown=1;
 	}
-	
+
 	return unknown;
 }
 
 void dn_setup_model(void) {
-	
+
 
 	printk("Apollo hardware found: ");
 	printk("[%s]\n", apollo_models[apollo_model - APOLLO_DN3000]);
@@ -85,19 +85,19 @@
 			break;
 		case APOLLO_DN3000:
 		case APOLLO_DN3010:
-			sio01_physaddr=SAU8_SIO01_PHYSADDR;	
-			rtc_physaddr=SAU8_RTC_PHYSADDR;	
-			pica_physaddr=SAU8_PICA;	
-			picb_physaddr=SAU8_PICB;	
+			sio01_physaddr=SAU8_SIO01_PHYSADDR;
+			rtc_physaddr=SAU8_RTC_PHYSADDR;
+			pica_physaddr=SAU8_PICA;
+			picb_physaddr=SAU8_PICB;
 			cpuctrl_physaddr=SAU8_CPUCTRL;
 			timer_physaddr=SAU8_TIMER;
 			break;
 		case APOLLO_DN4000:
-			sio01_physaddr=SAU7_SIO01_PHYSADDR;	
-			sio23_physaddr=SAU7_SIO23_PHYSADDR;	
-			rtc_physaddr=SAU7_RTC_PHYSADDR;	
-			pica_physaddr=SAU7_PICA;	
-			picb_physaddr=SAU7_PICB;	
+			sio01_physaddr=SAU7_SIO01_PHYSADDR;
+			sio23_physaddr=SAU7_SIO23_PHYSADDR;
+			rtc_physaddr=SAU7_RTC_PHYSADDR;
+			pica_physaddr=SAU7_PICA;
+			picb_physaddr=SAU7_PICB;
 			cpuctrl_physaddr=SAU7_CPUCTRL;
 			timer_physaddr=SAU7_TIMER;
 			break;
@@ -105,11 +105,11 @@
 			panic("Apollo model not yet supported");
 			break;
 		case APOLLO_DN3500:
-			sio01_physaddr=SAU7_SIO01_PHYSADDR;	
-			sio23_physaddr=SAU7_SIO23_PHYSADDR;	
-			rtc_physaddr=SAU7_RTC_PHYSADDR;	
-			pica_physaddr=SAU7_PICA;	
-			picb_physaddr=SAU7_PICB;	
+			sio01_physaddr=SAU7_SIO01_PHYSADDR;
+			sio23_physaddr=SAU7_SIO23_PHYSADDR;
+			rtc_physaddr=SAU7_RTC_PHYSADDR;
+			pica_physaddr=SAU7_PICA;
+			picb_physaddr=SAU7_PICB;
 			cpuctrl_physaddr=SAU7_CPUCTRL;
 			timer_physaddr=SAU7_TIMER;
 			break;
@@ -131,17 +131,17 @@
 void dn_serial_console_write (struct console *co, const char *str,unsigned int count)
 {
    while(count--) {
-	if (*str == '\n') { 
-    	sio01.rhrb_thrb = (unsigned char)'\r';
-       	while (!(sio01.srb_csrb & 0x4))
+	if (*str == '\n') {
+	sio01.rhrb_thrb = (unsigned char)'\r';
+	while (!(sio01.srb_csrb & 0x4))
                 ;
- 	}
+	}
     sio01.rhrb_thrb = (unsigned char)*str++;
     while (!(sio01.srb_csrb & 0x4))
             ;
-  }	
+  }
 }
- 
+
 void dn_serial_print (const char *str)
 {
     while (*str) {
@@ -160,7 +160,7 @@
 
 	int i;
 
-	dn_setup_model();	
+	dn_setup_model();
 
 	mach_sched_init=dn_sched_init; /* */
 	mach_init_IRQ=dn_init_IRQ;
@@ -180,24 +180,24 @@
         conswitchp           = &dummy_con;
 #endif
 #ifdef CONFIG_HEARTBEAT
-  	mach_heartbeat = dn_heartbeat;
+	mach_heartbeat = dn_heartbeat;
 #endif
 	mach_get_model       = dn_get_model;
 
 	cpuctrl=0xaa00;
 
 	/* clear DMA translation table */
-	for(i=0;i<0x400;i++) 
+	for(i=0;i<0x400;i++)
 		addr_xlat_map[i]=0;
 
-}		
+}
 
 irqreturn_t dn_timer_int(int irq, void *dev_id, struct pt_regs *fp) {
 
 	volatile unsigned char x;
 
 	sched_timer_handler(irq,dev_id,fp);
-	
+
 	x=*(volatile unsigned char *)(timer+3);
 	x=*(volatile unsigned char *)(timer+5);
 
@@ -206,7 +206,7 @@
 
 void dn_sched_init(irqreturn_t (*timer_routine)(int, void *, struct pt_regs *)) {
 
-	/* program timer 1 */       	
+	/* program timer 1 */
 	*(volatile unsigned char *)(timer+3)=0x01;
 	*(volatile unsigned char *)(timer+1)=0x40;
 	*(volatile unsigned char *)(timer+5)=0x09;
@@ -272,7 +272,7 @@
   for(;;);
 
 }
-	
+
 void dn_dummy_waitbut(void) {
 
   dn_serial_print("waitbut\n");
@@ -291,7 +291,7 @@
 
 static void dn_heartbeat(int on) {
 
-	if(on) { 
+	if(on) {
 		dn_cpuctrl&=~0x100;
 		cpuctrl=dn_cpuctrl;
 	}
diff -Nru a/arch/m68k/apollo/dma.c b/arch/m68k/apollo/dma.c
--- a/arch/m68k/apollo/dma.c	Sun May 16 01:18:36 2004
+++ b/arch/m68k/apollo/dma.c	Sun May 16 01:18:36 2004
@@ -34,7 +34,7 @@
 	next_free_xlat_entry+=2;
 	if(next_free_xlat_entry>125)
 		next_free_xlat_entry=0;
-	
+
 #if 0
 	printk("next_free_xlat_entry: %d\n",next_free_xlat_entry);
 #endif
diff -Nru a/arch/m68k/apollo/dn_debug.c b/arch/m68k/apollo/dn_debug.c
--- a/arch/m68k/apollo/dn_debug.c	Sun May 16 01:18:33 2004
+++ b/arch/m68k/apollo/dn_debug.c	Sun May 16 01:18:33 2004
@@ -14,9 +14,9 @@
 		i=vsprintf(current_dbg_ptr,fmt,args);
 		va_end(args);
 		current_dbg_ptr+=i;
-	
+
 		return i;
 	}
-	else 
+	else
 		return 0;
 }
diff -Nru a/arch/m68k/apollo/dn_ints.c b/arch/m68k/apollo/dn_ints.c
--- a/arch/m68k/apollo/dn_ints.c	Sun May 16 01:18:35 2004
+++ b/arch/m68k/apollo/dn_ints.c	Sun May 16 01:18:35 2004
@@ -40,7 +40,7 @@
     dn_irqs[i].dev_id=NULL;
     dn_irqs[i].devname=NULL;
   }
-  
+
 }
 
 int dn_request_irq(unsigned int irq, irqreturn_t (*handler)(int, void *, struct pt_regs *), unsigned long flags, const char *devname, void *dev_id) {
@@ -79,7 +79,7 @@
   if(irq<8)
     *(volatile unsigned char *)(pica+1)|=(1<<irq);
   else
-    *(volatile unsigned char *)(picb+1)|=(1<<(irq-8));  
+    *(volatile unsigned char *)(picb+1)|=(1<<(irq-8));
 
   dn_irqs[irq].handler=NULL;
   dn_irqs[irq].flags=IRQ_FLG_STD;
diff -Nru a/arch/m68k/atari/ataints.c b/arch/m68k/atari/ataints.c
--- a/arch/m68k/atari/ataints.c	Sun May 16 01:18:34 2004
+++ b/arch/m68k/atari/ataints.c	Sun May 16 01:18:34 2004
@@ -54,14 +54,14 @@
 /*
  * Atari interrupt handling scheme:
  * --------------------------------
- * 
+ *
  * All interrupt source have an internal number (defined in
  * <asm/atariints.h>): Autovector interrupts are 1..7, then follow ST-MFP,
  * TT-MFP, SCC, and finally VME interrupts. Vector numbers for the latter can
  * be allocated by atari_register_vme_int().
  *
  * Each interrupt can be of three types:
- * 
+ *
  *  - SLOW: The handler runs with all interrupts enabled, except the one it
  *    was called by (to avoid reentering). This should be the usual method.
  *    But it is currently possible only for MFP ints, since only the MFP
@@ -179,16 +179,16 @@
 "	movew	%%d1,%%sr\n"		/* set IPL = previous value */	   \
 "	addql	#1,%a0\n"						   \
 "	lea	%a1,%%a0\n"						   \
-"	pea 	%%sp@\n"		/* push addr of frame */	   \
+"	pea	%%sp@\n"		/* push addr of frame */	   \
 "	movel	%%a0@(4),%%sp@-\n"	/* push handler data */		   \
-"	pea 	(%c3+8)\n"		/* push int number */		   \
+"	pea	(%c3+8)\n"		/* push int number */		   \
 "	movel	%%a0@,%%a0\n"						   \
 "	jbsr	%%a0@\n"		/* call the handler */		   \
 "	addql	#8,%%sp\n"						   \
 "	addql	#4,%%sp\n"						   \
 "	orw	#0x0600,%%sr\n"						   \
 "	andw	#0xfeff,%%sr\n"		/* set IPL = 6 again */		   \
-"	orb 	#(1<<(%c3&7)),%a4:w\n"	/* now unmask the int again */	   \
+"	orb	#(1<<(%c3&7)),%a4:w\n"	/* now unmask the int again */	   \
 "	jbra	ret_from_interrupt\n"					   \
 	 : : "i" (&kstat_cpu(0).irqs[n+8]), "i" (&irq_handler[n+8]),	   \
 	     "n" (PT_OFF_SR), "n" (n),					   \
@@ -274,7 +274,7 @@
 void atari_fast_prio_irq_dummy (void) {
 __asm__ (__ALIGN_STR "\n"
 "atari_fast_irq_handler:\n\t"
-	"orw 	#0x700,%%sr\n"		/* disable all interrupts */
+	"orw	#0x700,%%sr\n"		/* disable all interrupts */
 "atari_prio_irq_handler:\n\t"
 	"addl	%3,%2\n\t"		/* preempt_count() += HARDIRQ_OFFSET */
 	SAVE_ALL_INT "\n\t"
@@ -282,13 +282,13 @@
 	/* get vector number from stack frame and convert to source */
 	"bfextu	%%sp@(%c1){#4,#10},%%d0\n\t"
 	"subw	#(0x40-8),%%d0\n\t"
-	"jpl 	1f\n\t"
+	"jpl	1f\n\t"
 	"addw	#(0x40-8-0x18),%%d0\n"
     "1:\tlea	%a0,%%a0\n\t"
 	"addql	#1,%%a0@(%%d0:l:4)\n\t"
 	"lea	irq_handler,%%a0\n\t"
 	"lea	%%a0@(%%d0:l:8),%%a0\n\t"
-	"pea 	%%sp@\n\t"		/* push frame address */
+	"pea	%%sp@\n\t"		/* push frame address */
 	"movel	%%a0@(4),%%sp@-\n\t"	/* push handler data */
 	"movel	%%d0,%%sp@-\n\t"	/* push int number */
 	"movel	%%a0@,%%a0\n\t"
@@ -395,7 +395,7 @@
 		   be in an atasound_init(), that doesn't exist yet. */
 		atari_microwire_cmd(MW_LM1992_PSG_HIGH);
 	}
-	
+
 	stdma_init();
 
 	/* Initialize the PSG: all sounds off, both ports output */
@@ -460,7 +460,7 @@
 		        __FUNCTION__, irq, devname);
 		return -EINVAL;
 	}
-		
+
 	if (vectors[vector] == bad_interrupt) {
 		/* int has no handler yet */
 		irq_handler[irq].handler = handler;
@@ -594,7 +594,7 @@
 	for(i = 0; i < 32; i++)
 		if((free_vme_vec_bitmap & (1 << i)) == 0)
 			break;
-	
+
 	if(i == 16)
 		return 0;
 
@@ -641,7 +641,7 @@
 	}
 	if (num_spurious)
 		seq_printf(p, "spurio.: %10u\n", num_spurious);
-	
+
 	return 0;
 }
 
diff -Nru a/arch/m68k/atari/atasound.c b/arch/m68k/atari/atasound.c
--- a/arch/m68k/atari/atasound.c	Sun May 16 01:18:33 2004
+++ b/arch/m68k/atari/atasound.c	Sun May 16 01:18:33 2004
@@ -70,7 +70,7 @@
 	if (hz) {
 	    /* Convert from frequency value to PSG period value (base
 	       frequency 125 kHz).  */
-		
+
 	    period = PSG_FREQ / hz;
 
 	    if (period > 0xfff) period = 0xfff;
diff -Nru a/arch/m68k/atari/config.c b/arch/m68k/atari/config.c
--- a/arch/m68k/atari/config.c	Sun May 16 01:18:35 2004
+++ b/arch/m68k/atari/config.c	Sun May 16 01:18:35 2004
@@ -7,7 +7,7 @@
  *    Added setting of time_adj to get a better clock.
  *
  *  5/14/94 Roman Hodek:
- *    gettod() for TT 
+ *    gettod() for TT
  *
  *  5/15/94 Roman Hodek:
  *    hard_reset_now() for Atari (and others?)
@@ -92,7 +92,7 @@
  * for posterity.
  *   -- Peter Maydell <pmaydell@chiark.greenend.org.uk>, 05/1998
  */
-  
+
 #if 0
 static int __init
 hwreg_present_bywrite(volatile void *regp, unsigned char val)
@@ -100,7 +100,7 @@
     int		ret;
     long	save_sp, save_vbr;
     static long tmp_vectors[3] = { [2] = (long)&&after_test };
-	
+
     __asm__ __volatile__
 	(	"movec	%/vbr,%2\n\t"	/* save vbr value            */
                 "movec	%4,%/vbr\n\t"	/* set up temporary vectors  */
@@ -141,14 +141,14 @@
 
 	*ctla = 2; MFPDELAY();
 	*ctla = 0x40; MFPDELAY();
-	
+
 	*ctla = 2; MFPDELAY();
 	if (*ctla != 0x40) return( 0 );
 	MFPDELAY();
 
 	*ctla = 2; MFPDELAY();
 	*ctla = 0x60; MFPDELAY();
-	
+
 	*ctla = 2; MFPDELAY();
 	if (*ctla != 0x60) return( 0 );
 
@@ -199,7 +199,7 @@
 	    p += 3;
 	    ovsc_shift = ATARI_SWITCH_OVSC_SHIFT;
 	}
-	
+
 	if (strcmp( p, "ikbd" ) == 0) {
 	    /* RTS line of IKBD ACIA */
 	    atari_switches |= ATARI_SWITCH_IKBD << ovsc_shift;
@@ -269,8 +269,8 @@
 			   ((atari_switches&ATARI_SWITCH_SND6) ? 0x40 : 0) |
 			   ((atari_switches&ATARI_SWITCH_SND7) ? 0x80 : 0);
     }
-	
-    /* ++bjoern: 
+
+    /* ++bjoern:
      * Determine hardware present
      */
 
@@ -446,7 +446,7 @@
 						  : /* no outputs */
 						  : /* no inputs */
 						  : "d0");
-	
+
     /* allocator for memory that must reside in st-ram */
     atari_stram_init ();
 
@@ -507,7 +507,7 @@
 
     if (atari_dont_touch_floppy_select)
 	return;
-    
+
     local_irq_save(flags);
     sound_ym.rd_data_reg_sel = 14; /* Select PSG Port A */
     tmp = sound_ym.rd_data_reg_sel;
@@ -544,7 +544,7 @@
  * address of a C label. No hope to compile this with another compiler
  * than GCC!
  */
-  
+
 /* ++andreas: no need for complicated code, just depend on prefetch */
 
 static void atari_reset (void)
@@ -563,7 +563,7 @@
 	acia.key_ctrl = ACIA_RESET;
     if (atari_switches & ATARI_SWITCH_OVSC_MIDI)
 	acia.mid_ctrl = ACIA_RESET;
-    
+
     /* processor independent: turn off interrupts and reset the VBR;
      * the caches must be left enabled, else prefetching the final jump
      * instruction doesn't work. */
@@ -572,7 +572,7 @@
 	("moveq	#0,%/d0\n\t"
 	 "movec	%/d0,%/vbr"
 	 : : : "d0" );
-    
+
     if (CPU_IS_040_OR_060) {
         unsigned long jmp_addr040 = virt_to_phys(&&jmp_addr_label040);
 	if (CPU_IS_060) {
@@ -584,7 +584,7 @@
 		 ".chip 68k"
 		 : : : "d0" );
 	}
-	    
+
         __asm__ __volatile__
             ("movel    %0,%/d0\n\t"
              "andl     #0xff000000,%/d0\n\t"
diff -Nru a/arch/m68k/atari/debug.c b/arch/m68k/atari/debug.c
--- a/arch/m68k/atari/debug.c	Sun May 16 01:18:34 2004
+++ b/arch/m68k/atari/debug.c	Sun May 16 01:18:34 2004
@@ -4,7 +4,7 @@
  * Atari debugging and serial console stuff
  *
  * Assembled of parts of former atari/config.c 97-12-18 by Roman Hodek
- *  
+ *
  * This file is subject to the terms and conditions of the GNU General Public
  * License.  See the file COPYING in the main directory of this archive
  * for more details.
@@ -99,7 +99,7 @@
     while( (mfp.par_dt_reg & 1) && --i ) /* wait for BUSY == L */
 	;
     if (!i) return( 0 );
-    
+
     sound_ym.rd_data_reg_sel = 15;  /* select port B */
     sound_ym.wd_data = c;           /* put char onto port */
     sound_ym.rd_data_reg_sel = 14;  /* select port A */
@@ -177,7 +177,7 @@
     if (baud < B1200 || baud > B38400+2)
 	baud = B9600; /* use default 9600bps for non-implemented rates */
     baud -= B1200; /* baud_table[] starts at 1200bps */
-	
+
     mfp.trn_stat &= ~0x01; /* disable TX */
     mfp.usart_ctr = parity | csize | 0x88; /* 1:16 clk mode, 1 stop bit */
     mfp.tim_ct_cd &= 0x70;  /* stop timer D */
@@ -204,7 +204,7 @@
 	for( i = 100; i > 0; --i )		\
 	    MFPDELAY();				\
     } while(0)
-    
+
 #ifndef CONFIG_SERIAL_CONSOLE
 static void __init atari_init_scc_port( int cflag )
 #else
@@ -214,20 +214,20 @@
     extern int atari_SCC_reset_done;
     static int clksrc_table[9] =
 	/* reg 11: 0x50 = BRG, 0x00 = RTxC, 0x28 = TRxC */
-    	{ 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x00, 0x00 };
+	{ 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x00, 0x00 };
     static int brgsrc_table[9] =
 	/* reg 14: 0 = RTxC, 2 = PCLK */
-    	{ 2, 2, 2, 2, 2, 2, 0, 2, 2 };
+	{ 2, 2, 2, 2, 2, 2, 0, 2, 2 };
     static int clkmode_table[9] =
 	/* reg 4: 0x40 = x16, 0x80 = x32, 0xc0 = x64 */
-    	{ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x80 };
+	{ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x80 };
     static int div_table[9] =
 	/* reg12 (BRG low) */
-    	{ 208, 138, 103, 50, 24, 11, 1, 0, 0 };
+	{ 208, 138, 103, 50, 24, 11, 1, 0, 0 };
 
     int baud = cflag & CBAUD;
     int clksrc, clkmode, div, reg3, reg5;
-    
+
     if (cflag & CBAUDEX)
 	baud += B38400;
     if (baud < B1200 || baud > B38400+2)
@@ -248,7 +248,7 @@
 
     reg3 = (cflag & CSIZE) == CS8 ? 0xc0 : 0x40;
     reg5 = (cflag & CSIZE) == CS8 ? 0x60 : 0x20 | 0x82 /* assert DTR/RTS */;
-    
+
     (void)scc.cha_b_ctrl;	/* reset reg pointer */
     SCC_WRITE( 9, 0xc0 );	/* reset */
     LONG_DELAY();		/* extra delay after WR9 access */
@@ -267,12 +267,12 @@
     SCC_WRITE( 14, brgsrc_table[baud] | (div ? 1 : 0) );
     SCC_WRITE( 3, reg3 | 1 );
     SCC_WRITE( 5, reg5 | 8 );
-    
+
     atari_SCC_reset_done = 1;
     atari_SCC_init_done = 1;
 }
 
-#ifndef CONFIG_SERIAL_CONSOLE 
+#ifndef CONFIG_SERIAL_CONSOLE
 static void __init atari_init_midi_port( int cflag )
 #else
 void atari_init_midi_port( int cflag )
diff -Nru a/arch/m68k/atari/stdma.c b/arch/m68k/atari/stdma.c
--- a/arch/m68k/atari/stdma.c	Sun May 16 01:18:34 2004
+++ b/arch/m68k/atari/stdma.c	Sun May 16 01:18:34 2004
@@ -97,7 +97,7 @@
 /*
  * Function: void stdma_release( void )
  *
- * Purpose: Releases the lock on the ST-DMA chip. 
+ * Purpose: Releases the lock on the ST-DMA chip.
  *
  * Inputs: none
  *
diff -Nru a/arch/m68k/atari/stram.c b/arch/m68k/atari/stram.c
--- a/arch/m68k/atari/stram.c	Sun May 16 01:18:36 2004
+++ b/arch/m68k/atari/stram.c	Sun May 16 01:18:36 2004
@@ -52,7 +52,7 @@
 /* Pre-swapping comments:
  *
  * ++roman:
- * 
+ *
  * New version of ST-Ram buffer allocation. Instead of using the
  * 1 MB - 4 KB that remain when the ST-Ram chunk starts at $1000
  * (1 MB granularity!), such buffers are reserved like this:
@@ -60,14 +60,14 @@
  *  - If the kernel resides in ST-Ram anyway, we can take the buffer
  *    from behind the current kernel data space the normal way
  *    (incrementing start_mem).
- *    
+ *
  *  - If the kernel is in TT-Ram, stram_init() initializes start and
  *    end of the available region. Buffers are allocated from there
  *    and mem_init() later marks the such used pages as reserved.
  *    Since each TT-Ram chunk is at least 4 MB in size, I hope there
  *    won't be an overrun of the ST-Ram region by normal kernel data
  *    space.
- *    
+ *
  * For that, ST-Ram may only be allocated while kernel initialization
  * is going on, or exactly: before mem_init() is called. There is also
  * no provision now for freeing ST-Ram buffers. It seems that isn't
@@ -105,7 +105,7 @@
  * visible on a TT, where the speed difference between ST- and TT-RAM isn't
  * that dramatic, but it should on machines where TT-RAM is really much faster
  * (e.g. Afterburner).
- * 
+ *
  *   [1]: __get_free_pages() does a fine job if you only want one page, but if
  * you want more (contiguous) pages, it can give you such a block only if
  * there's already a free one. The algorithm can't try to free buffers or swap
@@ -318,7 +318,7 @@
 			swap_end =  swap_start + max_swap_size;
 		DPRINTK( "atari_stram_reserve_pages: swapping enabled; "
 				 "swap=%p-%p\n", swap_start, swap_end);
-		
+
 		/* reserve some amount of memory for maintainance of
 		 * swapping itself: one page for each 2048 (PAGE_SIZE/2)
 		 * swap pages. (2 bytes for each page) */
@@ -328,7 +328,7 @@
 		/* correct swap_start if necessary */
 		if (swap_start + PAGE_SIZE == swap_data)
 			swap_start = start_mem - PAGE_SIZE;
-		
+
 		if (!swap_init( start_mem, swap_data )) {
 			printk( KERN_ERR "ST-RAM swap space initialization failed\n" );
 			max_swap_size = 0;
@@ -368,13 +368,13 @@
 /*
  * This is main public interface: somehow allocate a ST-RAM block
  * There are three strategies:
- * 
+ *
  *  - If we're before mem_init(), we have to make a static allocation. The
  *    region is taken in the kernel data area (if the kernel is in ST-RAM) or
  *    from the start of ST-RAM (if the kernel is in TT-RAM) and added to the
  *    rsvd_stram_* region. The ST-RAM is somewhere in the middle of kernel
  *    address space in the latter case.
- * 
+ *
  *  - If mem_init() already has been called and ST-RAM swapping is enabled,
  *    try to get the memory from the (pseudo) swap-space, either free already
  *    or by moving some other pages out of the swap.
@@ -383,7 +383,7 @@
  *    enabled, the only possibility is to try with __get_dma_pages(). This has
  *    the disadvantage that it's very hard to get more than 1 page, and it is
  *    likely to fail :-(
- * 
+ *
  */
 void *atari_stram_alloc(long size, const char *owner)
 {
@@ -450,7 +450,7 @@
 	}
 	DPRINTK( "atari_stram_free: found block (%p): size=%08lx, owner=%s, "
 			 "flags=%02x\n", block, block->size, block->owner, block->flags );
-	
+
 #ifdef CONFIG_STRAM_SWAP
 	if (!max_swap_size) {
 #endif
@@ -503,14 +503,14 @@
 
 	DPRINTK("swap_init(start_mem=%p, swap_data=%p)\n",
 		start_mem, swap_data);
-	
+
 	/* need at least one page for swapping to (and this also isn't very
 	 * much... :-) */
 	if (swap_end - swap_start < 2*PAGE_SIZE) {
 		printk( KERN_WARNING "stram_swap_init: swap space too small\n" );
 		return( 0 );
 	}
-	
+
 	/* find free slot in swap_info */
 	for( p = swap_info, type = 0; type < nr_swapfiles; type++, p++ )
 		if (!(p->flags & SWP_USED))
@@ -531,7 +531,7 @@
 	fake_dentry.d_name.name = "stram (internal)";
 	fake_dentry.d_name.len = 16;
 	fake_vfsmnt.mnt_parent = &fake_vfsmnt;
-	
+
 	p->flags        = SWP_USED;
 	p->swap_file    = &fake_dentry;
 	p->swap_vfsmnt  = &fake_vfsmnt;
@@ -706,7 +706,7 @@
 	} while (start < end);
 }
 
-static void unswap_process(struct mm_struct * mm, swp_entry_t entry, 
+static void unswap_process(struct mm_struct * mm, swp_entry_t entry,
 			   struct page *page)
 {
 	struct vm_area_struct* vma;
@@ -799,7 +799,7 @@
 	unsigned long start, total_free, region_free;
 	int err;
 	void *ret = NULL;
-	
+
 	DPRINTK( "get_stram_region(n_pages=%lu)\n", n_pages );
 
 	down(&stram_swap_sem);
@@ -874,7 +874,7 @@
 static int in_some_region(void *addr)
 {
 	BLOCK *p;
-	
+
 	for( p = alloc_list; p; p = p->next ) {
 		if (p->start <= addr && addr < p->start + p->size)
 			return( 1 );
@@ -920,7 +920,7 @@
 			/* don't need more free pages... :-) */
 			goto out;
 	}
-	
+
 	/* now shift the window and look for the area where as much pages as
 	 * possible are free */
 	while( tail < max ) {
@@ -1130,7 +1130,7 @@
 static BLOCK *find_region( void *addr )
 {
 	BLOCK *p;
-	
+
 	for( p = alloc_list; p; p = p->next ) {
 		if (p->start == addr)
 			return( p );
@@ -1145,7 +1145,7 @@
 static int remove_region( BLOCK *block )
 {
 	BLOCK **p;
-	
+
 	for( p = &alloc_list; *p; p = &((*p)->next) )
 		if (*p == block) break;
 	if (!*p)
diff -Nru a/arch/m68k/atari/time.c b/arch/m68k/atari/time.c
--- a/arch/m68k/atari/time.c	Sun May 16 01:18:36 2004
+++ b/arch/m68k/atari/time.c	Sun May 16 01:18:36 2004
@@ -4,7 +4,7 @@
  * Atari time and real time clock stuff
  *
  * Assembled of parts of former atari/config.c 97-12-18 by Roman Hodek
- *  
+ *
  * This file is subject to the terms and conditions of the GNU General Public
  * License.  See the file COPYING in the main directory of this archive
  * for more details.
@@ -25,7 +25,7 @@
     /* set Timer C data Register */
     mfp.tim_dt_c = INT_TICKS;
     /* start timer C, div = 1:100 */
-    mfp.tim_ct_cd = (mfp.tim_ct_cd & 15) | 0x60; 
+    mfp.tim_ct_cd = (mfp.tim_ct_cd & 15) | 0x60;
     /* install interrupt service routine for MFP Timer C */
     request_irq(IRQ_MFP_TIMC, timer_routine, IRQ_TYPE_SLOW,
                 "timer", timer_routine);
@@ -34,7 +34,7 @@
 /* ++andreas: gettimeoffset fixed to check for pending interrupt */
 
 #define TICK_SIZE 10000
-  
+
 /* This is always executed with interrupts disabled.  */
 unsigned long atari_gettimeoffset (void)
 {
@@ -59,9 +59,9 @@
 {
 #define COPY(v) val->v=(mste_rtc.v & 0xf)
 	do {
-		COPY(sec_ones) ; COPY(sec_tens) ; COPY(min_ones) ; 
-		COPY(min_tens) ; COPY(hr_ones) ; COPY(hr_tens) ; 
-		COPY(weekday) ; COPY(day_ones) ; COPY(day_tens) ; 
+		COPY(sec_ones) ; COPY(sec_tens) ; COPY(min_ones) ;
+		COPY(min_tens) ; COPY(hr_ones) ; COPY(hr_tens) ;
+		COPY(weekday) ; COPY(day_ones) ; COPY(day_tens) ;
 		COPY(mon_ones) ; COPY(mon_tens) ; COPY(year_ones) ;
 		COPY(year_tens) ;
 	/* prevent from reading the clock while it changed */
@@ -73,9 +73,9 @@
 {
 #define COPY(v) mste_rtc.v=val->v
 	do {
-		COPY(sec_ones) ; COPY(sec_tens) ; COPY(min_ones) ; 
-		COPY(min_tens) ; COPY(hr_ones) ; COPY(hr_tens) ; 
-		COPY(weekday) ; COPY(day_ones) ; COPY(day_tens) ; 
+		COPY(sec_ones) ; COPY(sec_tens) ; COPY(min_ones) ;
+		COPY(min_tens) ; COPY(hr_ones) ; COPY(hr_tens) ;
+		COPY(weekday) ; COPY(day_ones) ; COPY(day_tens) ;
 		COPY(mon_ones) ; COPY(mon_tens) ; COPY(year_ones) ;
 		COPY(year_tens) ;
 	/* prevent from writing the clock while it changed */
@@ -104,14 +104,14 @@
     int hour, year;
     int hr24=0;
     struct MSTE_RTC val;
-    
+
     mste_rtc.mode=(mste_rtc.mode | 1);
     hr24=mste_rtc.mon_tens & 1;
     mste_rtc.mode=(mste_rtc.mode & ~1);
 
     if (op) {
         /* write: prepare values */
-        
+
         val.sec_ones = t->tm_sec % 10;
         val.sec_tens = t->tm_sec / 10;
         val.min_ones = t->tm_min % 10;
@@ -160,8 +160,8 @@
 
 int atari_tt_hwclk( int op, struct rtc_time *t )
 {
-    int sec=0, min=0, hour=0, day=0, mon=0, year=0, wday=0; 
-    unsigned long 	flags;
+    int sec=0, min=0, hour=0, day=0, mon=0, year=0, wday=0;
+    unsigned long	flags;
     unsigned char	ctrl;
     int pm = 0;
 
@@ -170,7 +170,7 @@
 
     if (op) {
         /* write: prepare values */
-        
+
         sec  = t->tm_sec;
         min  = t->tm_min;
         hour = t->tm_hour;
@@ -178,7 +178,7 @@
         mon  = t->tm_mon + 1;
         year = t->tm_year - atari_rtc_year_offset;
         wday = t->tm_wday + (t->tm_wday >= 0);
-        
+
         if (!(ctrl & RTC_24H)) {
 	    if (hour > 11) {
 		pm = 0x80;
@@ -188,7 +188,7 @@
 	    else if (hour == 0)
 		hour = 12;
         }
-        
+
         if (!(ctrl & RTC_DM_BINARY)) {
             BIN_TO_BCD(sec);
             BIN_TO_BCD(min);
@@ -199,7 +199,7 @@
             if (wday >= 0) BIN_TO_BCD(wday);
         }
     }
-    
+
     /* Reading/writing the clock registers is a bit critical due to
      * the regular update cycle of the RTC. While an update is in
      * progress, registers 0..9 shouldn't be touched.
@@ -242,7 +242,7 @@
 
     if (!op) {
         /* read: adjust values */
-        
+
         if (hour & 0x80) {
 	    hour &= ~0x80;
 	    pm = 1;
@@ -284,7 +284,7 @@
     struct MSTE_RTC val;
     unsigned char rtc_minutes;
 
-    mste_read(&val);  
+    mste_read(&val);
     rtc_minutes= val.min_ones + val.min_tens * 10;
     if ((rtc_minutes < real_minutes
          ? real_minutes - rtc_minutes
diff -Nru a/arch/m68k/bvme6000/rtc.c b/arch/m68k/bvme6000/rtc.c
--- a/arch/m68k/bvme6000/rtc.c	Sun May 16 01:18:35 2004
+++ b/arch/m68k/bvme6000/rtc.c	Sun May 16 01:18:35 2004
@@ -44,7 +44,7 @@
 	volatile RtcPtr_t rtc = (RtcPtr_t)BVME_RTC_BASE;
 	unsigned char msr;
 	unsigned long flags;
-	struct rtc_time wtime; 
+	struct rtc_time wtime;
 
 	switch (cmd) {
 	case RTC_RD_TIME:	/* Read the time/date from RTC	*/
@@ -105,7 +105,7 @@
 
 		if (yrs >= 2070)
 			return -EINVAL;
-		
+
 		local_irq_save(flags);
 		/* Ensure clock and real-time-mode-register are accessible */
 		msr = rtc->msr & 0xc0;
diff -Nru a/arch/m68k/defconfig b/arch/m68k/defconfig
--- a/arch/m68k/defconfig	Sun May 16 01:18:33 2004
+++ b/arch/m68k/defconfig	Sun May 16 01:18:33 2004
@@ -101,7 +101,7 @@
 # CONFIG_ATM is not set
 
 #
-#  
+#
 #
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
diff -Nru a/arch/m68k/fpsp040/README b/arch/m68k/fpsp040/README
--- a/arch/m68k/fpsp040/README	Sun May 16 01:18:34 2004
+++ b/arch/m68k/fpsp040/README	Sun May 16 01:18:34 2004
@@ -12,7 +12,7 @@
 INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A
 PARTICULAR PURPOSE and any warranty against infringement with
 regard to the SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF)
-and any accompanying written materials. 
+and any accompanying written materials.
 
 To the maximum extent permitted by applicable law,
 IN NO EVENT SHALL MOTOROLA BE LIABLE FOR ANY DAMAGES WHATSOEVER
@@ -20,7 +20,7 @@
 PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR
 OTHER PECUNIARY LOSS) ARISING OF THE USE OR INABILITY TO USE THE
 SOFTWARE.  Motorola assumes no responsibility for the maintenance
-and support of the SOFTWARE.  
+and support of the SOFTWARE.
 
 You are hereby granted a copyright license to use, modify, and
 distribute the SOFTWARE so long as this entire notice is retained
diff -Nru a/arch/m68k/fpsp040/bindec.S b/arch/m68k/fpsp040/bindec.S
--- a/arch/m68k/fpsp040/bindec.S	Sun May 16 01:18:34 2004
+++ b/arch/m68k/fpsp040/bindec.S	Sun May 16 01:18:34 2004
@@ -19,7 +19,7 @@
 |
 |	Algorithm:
 |
-|	A1.	Set RM and size ext;  Set SIGMA = sign of input.  
+|	A1.	Set RM and size ext;  Set SIGMA = sign of input.
 |		The k-factor is saved for use in d7. Clear the
 |		BINDEC_FLG for separating normalized/denormalized
 |		input.  If input is unnormalized or denormalized,
@@ -29,15 +29,15 @@
 |
 |	A3.	Compute ILOG.
 |		ILOG is the log base 10 of the input value.  It is
-|		approximated by adding e + 0.f when the original 
-|		value is viewed as 2^^e * 1.f in extended precision.  
+|		approximated by adding e + 0.f when the original
+|		value is viewed as 2^^e * 1.f in extended precision.
 |		This value is stored in d6.
 |
 |	A4.	Clr INEX bit.
-|		The operation in A3 above may have set INEX2.  
+|		The operation in A3 above may have set INEX2.
 |
 |	A5.	Set ICTR = 0;
-|		ICTR is a flag used in A13.  It must be set before the 
+|		ICTR is a flag used in A13.  It must be set before the
 |		loop entry A6.
 |
 |	A6.	Calculate LEN.
@@ -59,9 +59,9 @@
 |		of ISCALE and X.  A table is given in the code.
 |
 |	A8.	Clr INEX; Force RZ.
-|		The operation in A3 above may have set INEX2.  
+|		The operation in A3 above may have set INEX2.
 |		RZ mode is forced for the scaling operation to insure
-|		only one rounding error.  The grs bits are collected in 
+|		only one rounding error.  The grs bits are collected in
 |		the INEX flag for use in A10.
 |
 |	A9.	Scale X -> Y.
@@ -90,11 +90,11 @@
 |		the mantissa by 10.
 |
 |	A14.	Convert the mantissa to bcd.
-|		The binstr routine is used to convert the LEN digit 
+|		The binstr routine is used to convert the LEN digit
 |		mantissa to bcd in memory.  The input to binstr is
 |		to be a fraction; i.e. (mantissa)/10^LEN and adjusted
 |		such that the decimal point is to the left of bit 63.
-|		The bcd digits are stored in the correct position in 
+|		The bcd digits are stored in the correct position in
 |		the final string area in memory.
 |
 |	A15.	Convert the exponent to bcd.
@@ -114,7 +114,7 @@
 |		d2: upper 32-bits of mantissa for binstr
 |		d3: scratch;lower 32-bits of mantissa for binstr
 |		d4: LEN
-|      		d5: LAMBDA/ICTR
+|		d5: LAMBDA/ICTR
 |		d6: ILOG
 |		d7: k-factor
 |		a0: ptr for original operand/final result
@@ -131,8 +131,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 |BINDEC    idnt    2,1 | Motorola 040 Floating Point Software Package
@@ -142,16 +142,16 @@
 	|section	8
 
 | Constants in extended precision
-LOG2: 	.long	0x3FFD0000,0x9A209A84,0xFBCFF798,0x00000000
+LOG2:	.long	0x3FFD0000,0x9A209A84,0xFBCFF798,0x00000000
 LOG2UP1:	.long	0x3FFD0000,0x9A209A84,0xFBCFF799,0x00000000
 
 | Constants in single precision
-FONE: 	.long	0x3F800000,0x00000000,0x00000000,0x00000000
+FONE:	.long	0x3F800000,0x00000000,0x00000000,0x00000000
 FTWO:	.long	0x40000000,0x00000000,0x00000000,0x00000000
-FTEN: 	.long	0x41200000,0x00000000,0x00000000,0x00000000
+FTEN:	.long	0x41200000,0x00000000,0x00000000,0x00000000
 F4933:	.long	0x459A2800,0x00000000,0x00000000,0x00000000
 
-RBDTBL: 	.byte	0,0,0,0
+RBDTBL:	.byte	0,0,0,0
 	.byte	3,3,2,2
 	.byte	3,2,2,3
 	.byte	2,3,3,2
@@ -171,7 +171,7 @@
 |     separating  normalized/denormalized input.  If the input
 |     is a denormalized number, set the BINDEC_FLG memory word
 |     to signal denorm.  If the input is unnormalized, normalize
-|     the input and test for denormalized result.  
+|     the input and test for denormalized result.
 |
 	fmovel	#rm_mode,%FPCR	|set RM and ext
 	movel	(%a0),L_SCR2(%a6)	|save exponent for sign check
@@ -251,7 +251,7 @@
 	subw	#0x3fff,%d0	|strip off bias
 	faddw	%d0,%fp0		|add in exp
 	fsubs	FONE,%fp0	|subtract off 1.0
-	fbge	pos_res		|if pos, branch 
+	fbge	pos_res		|if pos, branch
 	fmulx	LOG2UP1,%fp0	|if neg, mul by LOG2UP1
 	fmovel	%fp0,%d6		|put ILOG in d6 as a lword
 	bras	A4_str		|go move out ILOG
@@ -261,14 +261,14 @@
 
 
 | A4. Clr INEX bit.
-|     The operation in A3 above may have set INEX2.  
+|     The operation in A3 above may have set INEX2.
 
-A4_str:	
+A4_str:
 	fmovel	#0,%FPSR		|zero all of fpsr - nothing needed
 
 
 | A5. Set ICTR = 0;
-|     ICTR is a flag used in A13.  It must be set before the 
+|     ICTR is a flag used in A13.  It must be set before the
 |     loop entry A6. The lower word of d5 is used for ICTR.
 
 	clrw	%d5		|clear ICTR
@@ -303,7 +303,7 @@
 |	L_SCR1:x/x
 |	L_SCR2:first word of X packed/Unchanged
 
-A6_str:	
+A6_str:
 	tstl	%d7		|branch on sign of k
 	bles	k_neg		|if k <= 0, LEN = ILOG + 1 - k
 	movel	%d7,%d4		|if k > 0, LEN = k
@@ -375,13 +375,13 @@
 |	L_SCR1:x/x
 |	L_SCR2:first word of X packed/Unchanged
 
-A7_str:	
+A7_str:
 	tstl	%d7		|test sign of k
 	bgts	k_pos		|if pos and > 0, skip this
 	cmpl	%d6,%d7		|test k - ILOG
 	blts	k_pos		|if ILOG >= k, skip this
 	movel	%d7,%d6		|if ((k<0) & (ILOG < k)) ILOG = k
-k_pos:	
+k_pos:
 	movel	%d6,%d0		|calc ILOG + 1 - LEN in d0
 	addql	#1,%d0		|add the 1
 	subl	%d4,%d0		|sub off LEN
@@ -395,9 +395,9 @@
 	bgts	no_inf		|if false, skip rest
 	addil	#24,%d0		|add in 24 to iscale
 	movel	#24,%d2		|put 24 in d2 for A9
-no_inf:	
+no_inf:
 	negl	%d0		|and take abs of ISCALE
-iscale:	
+iscale:
 	fmoves	FONE,%fp1	|init fp1 to 1
 	bfextu	USER_FPCR(%a6){#26:#2},%d1 |get initial rmode bits
 	lslw	#1,%d1		|put them in bits 2:1
@@ -425,33 +425,33 @@
 	leal	PTENRM,%a1	|load a1 with RM table base
 rmode:
 	clrl	%d3		|clr table index
-e_loop:	
+e_loop:
 	lsrl	#1,%d0		|shift next bit into carry
 	bccs	e_next		|if zero, skip the mul
 	fmulx	(%a1,%d3),%fp1	|mul by 10**(d3_bit_no)
-e_next:	
+e_next:
 	addl	#12,%d3		|inc d3 to next pwrten table entry
 	tstl	%d0		|test if ISCALE is zero
 	bnes	e_loop		|if not, loop
 
 
 | A8. Clr INEX; Force RZ.
-|     The operation in A3 above may have set INEX2.  
+|     The operation in A3 above may have set INEX2.
 |     RZ mode is forced for the scaling operation to insure
-|     only one rounding error.  The grs bits are collected in 
+|     only one rounding error.  The grs bits are collected in
 |     the INEX flag for use in A10.
 |
 | Register usage:
 |	Input/Output
 
-	fmovel	#0,%FPSR		|clr INEX 
+	fmovel	#0,%FPSR		|clr INEX
 	fmovel	#rz_mode,%FPCR	|set RZ rounding mode
 
 
 | A9. Scale X -> Y.
 |     The mantissa is scaled to the desired number of significant
 |     digits.  The excess digits are collected in INEX2. If mul,
-|     Check d2 for excess 10 exponential value.  If not zero, 
+|     Check d2 for excess 10 exponential value.  If not zero,
 |     the iscale value would have caused the pwrten calculation
 |     to overflow.  Only a negative iscale can cause this, so
 |     multiply by 10^(d2), which is now only allowed to be 24,
@@ -480,7 +480,7 @@
 |	L_SCR1:x/x
 |	L_SCR2:first word of X packed/Unchanged
 
-A9_str:	
+A9_str:
 	fmovex	(%a0),%fp0	|load X from memory
 	fabsx	%fp0		|use abs(X)
 	tstw	%d5		|LAMBDA is in lower word of d5
@@ -498,9 +498,9 @@
 	movel	#18,%d3		|load count for busy stack
 A9_loop:
 	clrl	-(%a7)		|clear lword on stack
-	dbf	%d3,A9_loop	
+	dbf	%d3,A9_loop
 	moveb	VER_TMP(%a6),(%a7) |write current version number
-	moveb	#BUSY_SIZE-4,1(%a7) |write current busy size 
+	moveb	#BUSY_SIZE-4,1(%a7) |write current busy size
 	moveb	#0x10,0x44(%a7)	|set fcefpte[15] bit
 	movew	#0x0023,0x40(%a7)	|load cmdreg1b with mul command
 	moveb	#0xfe,0x8(%a7)	|load all 1s to cu savepc
@@ -537,7 +537,7 @@
 |	fp1: 10^ISCALE/Unchanged
 |	fp2: x/x
 
-A10_st:	
+A10_st:
 	fmovel	%FPSR,%d0		|get FPSR
 	fmovex	%fp0,FP_SCR2(%a6)	|move Y to memory
 	leal	FP_SCR2(%a6),%a2	|load a2 with ptr to FP_SCR2
@@ -553,9 +553,9 @@
 |      routine expects the FPCR value to be in USER_FPCR for
 |      mode and precision.  The original FPCR is saved in L_SCR1.
 
-A11_st:	
+A11_st:
 	movel	USER_FPCR(%a6),L_SCR1(%a6) |save it for later
-	andil	#0x00000030,USER_FPCR(%a6) |set size to ext, 
+	andil	#0x00000030,USER_FPCR(%a6) |set size to ext,
 |					;block exceptions
 
 
@@ -584,13 +584,13 @@
 |	L_SCR2:first word of X packed/Unchanged
 
 A12_st:
-	moveml	%d0-%d1/%a0-%a1,-(%a7)	|save regs used by sintd0	
+	moveml	%d0-%d1/%a0-%a1,-(%a7)	|save regs used by sintd0
 	movel	L_SCR1(%a6),-(%a7)
 	movel	L_SCR2(%a6),-(%a7)
 	leal	FP_SCR2(%a6),%a0		|a0 is ptr to F_SCR2(a6)
 	fmovex	%fp0,(%a0)		|move Y to memory at FP_SCR2(a6)
 	tstl	L_SCR2(%a6)		|test sign of original operand
-	bges	do_fint			|if pos, use Y 
+	bges	do_fint			|if pos, use Y
 	orl	#0x80000000,(%a0)		|if neg, use -Y
 do_fint:
 	movel	USER_FPSR(%a6),-(%a7)
@@ -599,7 +599,7 @@
 	addl	#4,%a7
 	movel	(%a7)+,L_SCR2(%a6)
 	movel	(%a7)+,L_SCR1(%a6)
-	moveml	(%a7)+,%d0-%d1/%a0-%a1	|restore regs used by sint	
+	moveml	(%a7)+,%d0-%d1/%a0-%a1	|restore regs used by sint
 	movel	L_SCR2(%a6),FP_SCR2(%a6)	|restore original exponent
 	movel	L_SCR1(%a6),USER_FPCR(%a6) |restore user's FPCR
 
@@ -635,7 +635,7 @@
 |	L_SCR1:original USER_FPCR/Unchanged
 |	L_SCR2:first word of X packed/Unchanged
 
-A13_st:	
+A13_st:
 	swap	%d5		|put ICTR in lower word of d5
 	tstw	%d5		|check if ICTR = 0
 	bne	not_zr		|if non-zero, go to second test
@@ -646,7 +646,7 @@
 	movel	%d4,%d0		|put LEN in d0
 	subql	#1,%d0		|d0 = LEN -1
 	clrl	%d3		|clr table index
-l_loop:	
+l_loop:
 	lsrl	#1,%d0		|shift next bit into carry
 	bccs	l_next		|if zero, skip the mul
 	fmulx	(%a1,%d3),%fp2	|mul by 10**(d3_bit_no)
@@ -672,7 +672,7 @@
 	subql	#1,%d6		|subtract 1 from ILOG
 	movew	#1,%d5		|set ICTR
 	fmovel	#rm_mode,%FPCR	|set rmode to RM
-	fmuls	FTEN,%fp2	|compute 10^LEN 
+	fmuls	FTEN,%fp2	|compute 10^LEN
 	bra	A6_str		|return to A6 and recompute YINT
 test_2:
 	fmuls	FTEN,%fp2	|compute 10^LEN
@@ -688,7 +688,7 @@
 	fmovel	#rm_mode,%FPCR	|set rmode to RM
 	bra	A6_str		|return to A6 and recompute YINT
 |
-| Since ICTR <> 0, we have already been through one adjustment, 
+| Since ICTR <> 0, we have already been through one adjustment,
 | and shouldn't have another; this is to check if abs(YINT) = 10^LEN
 | 10^LEN is again computed using whatever table is in a1 since the
 | value calculated cannot be inexact.
@@ -715,11 +715,11 @@
 
 
 | A14. Convert the mantissa to bcd.
-|      The binstr routine is used to convert the LEN digit 
+|      The binstr routine is used to convert the LEN digit
 |      mantissa to bcd in memory.  The input to binstr is
 |      to be a fraction; i.e. (mantissa)/10^LEN and adjusted
 |      such that the decimal point is to the left of bit 63.
-|      The bcd digits are stored in the correct position in 
+|      The bcd digits are stored in the correct position in
 |      the final string area in memory.
 |
 |
@@ -745,7 +745,7 @@
 |	L_SCR1:original USER_FPCR/Unchanged
 |	L_SCR2:first word of X packed/Unchanged
 
-A14_st:	
+A14_st:
 	fmovel	#rz_mode,%FPCR	|force rz for conversion
 	fdivx	%fp2,%fp0		|divide abs(YINT) by 10^LEN
 	leal	FP_SCR1(%a6),%a0
@@ -762,7 +762,7 @@
 	bgts	no_sft		|if so, don't shift
 	negl	%d0		|make exp positive
 m_loop:
-	lsrl	#1,%d2		|shift d2:d3 right, add 0s 
+	lsrl	#1,%d2		|shift d2:d3 right, add 0s
 	roxrl	#1,%d3		|the number of places
 	dbf	%d0,m_loop	|given in d0
 no_sft:
@@ -787,9 +787,9 @@
 |
 |      Digits are stored in L_SCR1(a6) on return from BINDEC as:
 |
-|  	 32               16 15                0
+|	 32               16 15                0
 |	-----------------------------------------
-|  	|  0 | e3 | e2 | e1 | e4 |  X |  X |  X |
+|	|  0 | e3 | e2 | e1 | e4 |  X |  X |  X |
 |	-----------------------------------------
 |
 | And are moved into their proper places in FP_SCR1.  If digit e4
@@ -817,7 +817,7 @@
 |	L_SCR1:original USER_FPCR/Exponent digits on return from binstr
 |	L_SCR2:first word of X packed/Unchanged
 
-A15_st:	
+A15_st:
 	tstb	BINDEC_FLG(%a6)	|check for denorm
 	beqs	not_denorm
 	ftstx	%fp0		|test for zero
@@ -839,7 +839,7 @@
 	fbne	not_zero	|if zero, force exponent
 	fmoves	FONE,%fp0	|force exponent to 1
 	bras	convrt		|do it
-not_zero:	
+not_zero:
 	fmovel	%d6,%fp0		|float ILOG
 	fabsx	%fp0		|get abs of ILOG
 convrt:
@@ -852,7 +852,7 @@
 	subiw	#0x3ffd,%d0	|subtract off bias
 	negw	%d0		|make exp positive
 x_loop:
-	lsrl	#1,%d2		|shift d2:d3 right 
+	lsrl	#1,%d2		|shift d2:d3 right
 	roxrl	#1,%d3		|the number of places
 	dbf	%d0,x_loop	|given in d0
 x_loop_fin:
@@ -863,12 +863,12 @@
 	movel	#4,%d0		|put 4 in d0 for binstr call
 	leal	L_SCR1(%a6),%a0	|a0 is ptr to L_SCR1 for exp digits
 	bsr	binstr		|call binstr to convert exp
-	movel	L_SCR1(%a6),%d0	|load L_SCR1 lword to d0 
+	movel	L_SCR1(%a6),%d0	|load L_SCR1 lword to d0
 	movel	#12,%d1		|use d1 for shift count
 	lsrl	%d1,%d0		|shift d0 right by 12
 	bfins	%d0,FP_SCR1(%a6){#4:#12} |put e3:e2:e1 in FP_SCR1
 	lsrl	%d1,%d0		|shift d0 right by 12
-	bfins	%d0,FP_SCR1(%a6){#16:#4} |put e4 in FP_SCR1 
+	bfins	%d0,FP_SCR1(%a6){#16:#4} |put e4 in FP_SCR1
 	tstb	%d0		|check if e4 is zero
 	beqs	A16_st		|if zero, skip rest
 	orl	#opaop_mask,USER_FPSR(%a6) |set OPERR & AIOP in USER_FPSR
@@ -899,14 +899,14 @@
 
 A16_st:
 	clrl	%d0		|clr d0 for collection of signs
-	andib	#0x0f,FP_SCR1(%a6) |clear first nibble of FP_SCR1 
+	andib	#0x0f,FP_SCR1(%a6) |clear first nibble of FP_SCR1
 	tstl	L_SCR2(%a6)	|check sign of original mantissa
 	bges	mant_p		|if pos, don't set SM
 	moveql	#2,%d0		|move 2 in to d0 for SM
 mant_p:
 	tstl	%d6		|check sign of ILOG
 	bges	wr_sgn		|if pos, don't set SE
-	addql	#1,%d0		|set bit 0 in d0 for SE 
+	addql	#1,%d0		|set bit 0 in d0 for SE
 wr_sgn:
 	bfins	%d0,FP_SCR1(%a6){#0:#2} |insert SM and SE into FP_SCR1
 
diff -Nru a/arch/m68k/fpsp040/binstr.S b/arch/m68k/fpsp040/binstr.S
--- a/arch/m68k/fpsp040/binstr.S	Sun May 16 01:18:34 2004
+++ b/arch/m68k/fpsp040/binstr.S	Sun May 16 01:18:34 2004
@@ -60,8 +60,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 |BINSTR    idnt    2,1 | Motorola 040 Floating Point Software Package
diff -Nru a/arch/m68k/fpsp040/bugfix.S b/arch/m68k/fpsp040/bugfix.S
--- a/arch/m68k/fpsp040/bugfix.S	Sun May 16 01:18:35 2004
+++ b/arch/m68k/fpsp040/bugfix.S	Sun May 16 01:18:35 2004
@@ -7,7 +7,7 @@
 |
 |	Fixes for bugs: 1238
 |
-|	Bug: 1238 
+|	Bug: 1238
 |
 |
 |    /* The following dirty_bit clear should be left in
@@ -152,8 +152,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 |BUGFIX    idnt    2,1 | Motorola 040 Floating Point Software Package
@@ -167,8 +167,8 @@
 	.global	b1238_fix
 b1238_fix:
 |
-| This code is entered only on completion of the handling of an 
-| nu-generated ovfl, unfl, or inex exception.  If the version 
+| This code is entered only on completion of the handling of an
+| nu-generated ovfl, unfl, or inex exception.  If the version
 | number of the fsave is not $40, this handler is not necessary.
 | Simply branch to fix_done and exit normally.
 |
@@ -180,11 +180,11 @@
 |
 	moveb	CU_SAVEPC(%a6),%d0
 	andib	#0xFE,%d0
-	beq 	fix_done	|if zero, this is not bug #1238
+	beq	fix_done	|if zero, this is not bug #1238
 
 |
 | Test the register conflict aspect.  If opclass0, check for
-| cu src equal to xu dest or equal to nu dest.  If so, go to 
+| cu src equal to xu dest or equal to nu dest.  If so, go to
 | op0.  Else, or if opclass2, check for cu dest equal to
 | xu dest or equal to nu dest.  If so, go to tst_opcl.  Else,
 | exit, it is not the bug case.
@@ -196,17 +196,17 @@
 	bne	op2sgl			|not opclass 0, check op2
 |
 | Check for cu and nu register conflict.  If one exists, this takes
-| priority over a cu and xu conflict. 
+| priority over a cu and xu conflict.
 |
-	bfextu	CMDREG1B(%a6){#3:#3},%d0	|get 1st src 
+	bfextu	CMDREG1B(%a6){#3:#3},%d0	|get 1st src
 	bfextu	CMDREG3B(%a6){#6:#3},%d1	|get 3rd dest
 	cmpb	%d0,%d1
 	beqs	op0			|if equal, continue bugfix
 |
-| Check for cu dest equal to nu dest.  If so, go and fix the 
+| Check for cu dest equal to nu dest.  If so, go and fix the
 | bug condition.  Otherwise, exit.
 |
-	bfextu	CMDREG1B(%a6){#6:#3},%d0	|get 1st dest 
+	bfextu	CMDREG1B(%a6){#6:#3},%d0	|get 1st dest
 	cmpb	%d0,%d1			|cmp 1st dest with 3rd dest
 	beqs	op0			|if equal, continue bugfix
 |
@@ -215,7 +215,7 @@
 	bfextu	CMDREG2B(%a6){#6:#3},%d1	|get 2nd dest
 	cmpb	%d0,%d1			|cmp 1st dest with 2nd dest
 	beqs	op0_xu			|if equal, continue bugfix
-	bfextu	CMDREG1B(%a6){#3:#3},%d0	|get 1st src 
+	bfextu	CMDREG1B(%a6){#3:#3},%d0	|get 1st src
 	cmpb	%d0,%d1			|cmp 1st src with 2nd dest
 	beq	op0_xu
 	bne	fix_done		|if the reg checks fail, exit
@@ -245,7 +245,7 @@
 
 |
 | We have the case in which a conflict exists between the cu src or
-| dest and the dest of the xu.  We must clear the instruction in 
+| dest and the dest of the xu.  We must clear the instruction in
 | the cu and restore the state, allowing the instruction in the
 | xu to complete.  Remember, the instruction in the nu
 | was exceptional, and was completed by the appropriate handler.
@@ -255,7 +255,7 @@
 | exceptional, we choose to kill the process.
 |
 |	Items saved from the stack:
-|	
+|
 |		$3c stag     - L_SCR1
 |		$40 cmdreg1b - L_SCR2
 |		$44 dtag     - L_SCR3
@@ -264,8 +264,8 @@
 | fpu.
 |
 op0_xu:
-	movel	STAG(%a6),L_SCR1(%a6)	
-	movel	CMDREG1B(%a6),L_SCR2(%a6)	
+	movel	STAG(%a6),L_SCR1(%a6)
+	movel	CMDREG1B(%a6),L_SCR2(%a6)
 	movel	DTAG(%a6),L_SCR3(%a6)
 	andil	#0xe0000000,L_SCR3(%a6)
 	moveb	#0,CU_SAVEPC(%a6)
@@ -274,13 +274,13 @@
 	fsave	-(%a7)
 |
 | Check if the instruction which just completed was exceptional.
-| 
+|
 	cmpw	#0x4060,(%a7)
 	beq	op0_xb
-| 
+|
 | It is necessary to isolate the result of the instruction in the
 | xu if it is to fp0 - fp3 and write that value to the USER_FPn
-| locations on the stack.  The correct destination register is in 
+| locations on the stack.  The correct destination register is in
 | cmdreg2b.
 |
 	bfextu	CMDREG2B(%a6){#6:#3},%d0	|get dest register no
@@ -339,7 +339,7 @@
 
 |
 | The frame returned is busy.  It is not possible to reconstruct
-| the code sequence to allow completion.  We will jump to 
+| the code sequence to allow completion.  We will jump to
 | fpsp_fmt_error and allow the kernel to kill the process.
 |
 op0_xb:
@@ -354,20 +354,20 @@
 	cmpiw	#0x4400,%d0		|test for opclass 2 and size=sgl
 	bne	fix_done		|if not, it is not bug 1238
 |
-| Check for cu dest equal to nu dest or equal to xu dest, with 
+| Check for cu dest equal to nu dest or equal to xu dest, with
 | a cu and nu conflict taking priority an nu conflict.  If either,
 | go and fix the bug condition.  Otherwise, exit.
 |
-	bfextu	CMDREG1B(%a6){#6:#3},%d0	|get 1st dest 
+	bfextu	CMDREG1B(%a6){#6:#3},%d0	|get 1st dest
 	bfextu	CMDREG3B(%a6){#6:#3},%d1	|get 3rd dest
 	cmpb	%d0,%d1			|cmp 1st dest with 3rd dest
 	beq	op2_com			|if equal, continue bugfix
-	bfextu	CMDREG2B(%a6){#6:#3},%d1	|get 2nd dest 
+	bfextu	CMDREG2B(%a6){#6:#3},%d1	|get 2nd dest
 	cmpb	%d0,%d1			|cmp 1st dest with 2nd dest
 	bne	fix_done		|if the reg checks fail, exit
 |
 | We have the case in which a conflict exists between the cu src or
-| dest and the dest of the xu.  We must clear the instruction in 
+| dest and the dest of the xu.  We must clear the instruction in
 | the cu and restore the state, allowing the instruction in the
 | xu to complete.  Remember, the instruction in the nu
 | was exceptional, and was completed by the appropriate handler.
@@ -377,7 +377,7 @@
 | exceptional, we choose to kill the process.
 |
 |	Items saved from the stack:
-|	
+|
 |		$3c stag     - L_SCR1
 |		$40 cmdreg1b - L_SCR2
 |		$44 dtag     - L_SCR3
@@ -387,9 +387,9 @@
 | fpu.
 |
 op2_xu:
-	movel	STAG(%a6),L_SCR1(%a6)	
-	movel	CMDREG1B(%a6),L_SCR2(%a6)	
-	movel	DTAG(%a6),L_SCR3(%a6)	
+	movel	STAG(%a6),L_SCR1(%a6)
+	movel	CMDREG1B(%a6),L_SCR2(%a6)
+	movel	DTAG(%a6),L_SCR3(%a6)
 	andil	#0xe0000000,L_SCR3(%a6)
 	moveb	#0,CU_SAVEPC(%a6)
 	movel	ETEMP(%a6),FP_SCR2(%a6)
@@ -400,13 +400,13 @@
 	fsave	-(%a7)
 |
 | Check if the instruction which just completed was exceptional.
-| 
+|
 	cmpw	#0x4060,(%a7)
 	beq	op2_xb
-| 
+|
 | It is necessary to isolate the result of the instruction in the
 | xu if it is to fp0 - fp3 and write that value to the USER_FPn
-| locations on the stack.  The correct destination register is in 
+| locations on the stack.  The correct destination register is in
 | cmdreg2b.
 |
 	bfextu	CMDREG2B(%a6){#6:#3},%d0	|get dest register no
@@ -459,12 +459,12 @@
 	bnes	case2
 	movew	#0x43FF,ETEMP_EX(%a6)	|to double +max
 	bra	finish
-case2:	
+case2:
 	cmpw	#0xC07F,ETEMP_EX(%a6)	|single -max
 	bnes	case3
 	movew	#0xC3FF,ETEMP_EX(%a6)	|to double -max
 	bra	finish
-case3:	
+case3:
 	cmpw	#0x3F80,ETEMP_EX(%a6)	|single +min
 	bnes	case4
 	movew	#0x3C00,ETEMP_EX(%a6)	|to double +min
@@ -480,7 +480,7 @@
 | an fline illegal instruction to be executed.
 |
 | You should replace the jump to fpsp_fmt_error with a jump
-| to the entry point used to kill a process. 
+| to the entry point used to kill a process.
 |
 op2_xb:
 	jmp	fpsp_fmt_error
diff -Nru a/arch/m68k/fpsp040/decbin.S b/arch/m68k/fpsp040/decbin.S
--- a/arch/m68k/fpsp040/decbin.S	Sun May 16 01:18:36 2004
+++ b/arch/m68k/fpsp040/decbin.S	Sun May 16 01:18:36 2004
@@ -60,17 +60,17 @@
 |	it is negative.
 |
 |	Clean up and return.  Check if the final mul or div resulted
-|	in an inex2 exception.  If so, set inex1 in the fpsr and 
+|	in an inex2 exception.  If so, set inex1 in the fpsr and
 |	check if the inex1 exception is enabled.  If so, set d7 upper
 |	word to $0100.  This will signal unimp.sa that an enabled inex1
 |	exception occurred.  Unimp will fix the stack.
-|	
+|
 
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 |DECBIN    idnt    2,1 | Motorola 040 Floating Point Software Package
@@ -107,12 +107,12 @@
 	.set	FSTRT,0
 |
 	.set	ESTRT,4
-	.set	EDIGITS,2	| 
+	.set	EDIGITS,2	|
 |
 | Constants in single precision
-FZERO: 	.long	0x00000000
-FONE: 	.long	0x3F800000
-FTEN: 	.long	0x41200000
+FZERO:	.long	0x00000000
+FONE:	.long	0x3F800000
+FTEN:	.long	0x41200000
 
 	.set	TEN,10
 
@@ -224,7 +224,7 @@
 	addql	#1,%d1		|inc lw pointer in mantissa
 	cmpl	#2,%d1		|test for last lw
 	ble	loadlw		|if not, get last one
-	
+
 |
 |  Check the sign of the mant and make the value in fp0 the same sign.
 |
@@ -232,7 +232,7 @@
 	btst	#31,(%a0)	|test sign of the mantissa
 	beq	ap_st_z		|if clear, go to append/strip zeros
 	fnegx	%fp0		|if set, negate fp0
-	
+
 |
 | Append/strip zeros:
 |
@@ -407,7 +407,7 @@
 |
 | Pwrten calculates the exponent factor in the selected rounding mode
 | according to the following table:
-|	
+|
 |	Sign of Mant  Sign of Exp  Rounding Mode  PWRTEN Rounding Mode
 |
 |	ANY	  ANY	RN	RN
@@ -495,7 +495,7 @@
 | it will be inex2, but will be reported as inex1 by get_op.
 |
 end_dec:
-	fmovel	%FPSR,%d0		|get status register	
+	fmovel	%FPSR,%d0		|get status register
 	bclrl	#inex2_bit+8,%d0	|test for inex2 and clear it
 	fmovel	%d0,%FPSR		|return status reg w/o inex2
 	beqs	no_exc		|skip this if no exc
diff -Nru a/arch/m68k/fpsp040/do_func.S b/arch/m68k/fpsp040/do_func.S
--- a/arch/m68k/fpsp040/do_func.S	Sun May 16 01:18:35 2004
+++ b/arch/m68k/fpsp040/do_func.S	Sun May 16 01:18:35 2004
@@ -4,11 +4,11 @@
 | Do_func performs the unimplemented operation.  The operation
 | to be performed is determined from the lower 7 bits of the
 | extension word (except in the case of fmovecr and fsincos).
-| The opcode and tag bits form an index into a jump table in 
-| tbldo.sa.  Cases of zero, infinity and NaN are handled in 
+| The opcode and tag bits form an index into a jump table in
+| tbldo.sa.  Cases of zero, infinity and NaN are handled in
 | do_func by forcing the default result.  Normalized and
 | denormalized (there are no unnormalized numbers at this
-| point) are passed onto the emulation code.  
+| point) are passed onto the emulation code.
 |
 | CMDREG1B and STAG are extracted from the fsave frame
 | and combined to form the table index.  The function called
@@ -22,8 +22,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 DO_FUNC:	|idnt    2,1 | Motorola 040 Floating Point Software Package
@@ -35,7 +35,7 @@
 	|xref	t_dz2
 	|xref	t_operr
 	|xref	t_inx2
-	|xref 	t_resdnrm
+	|xref	t_resdnrm
 	|xref	dst_nan
 	|xref	src_nan
 	|xref	nrm_set
@@ -68,7 +68,7 @@
 | directly.
 |
 	bfextu	CMDREG1B(%a6){#0:#6},%d0 |get opclass and src fields
-	cmpil	#0x17,%d0		|if op class and size fields are $17, 
+	cmpil	#0x17,%d0		|if op class and size fields are $17,
 |				;it is FMOVECR; if not, continue
 	bnes	not_fmovecr
 	jmp	smovcr		|fmovecr; jmp directly to emulation
@@ -76,7 +76,7 @@
 not_fmovecr:
 	movew	CMDREG1B(%a6),%d0
 	andl	#0x7F,%d0
-	cmpil	#0x38,%d0		|if the extension is >= $38, 
+	cmpil	#0x38,%d0		|if the extension is >= $38,
 	bge	serror		|it is illegal
 	bfextu	STAG(%a6){#0:#3},%d1
 	lsll	#3,%d0		|make room for STAG
@@ -111,7 +111,7 @@
 	bsr	ld_mzero	|if neg, load neg zero, return here
 	bra	t_inx2		|now, set the inx for the next inst
 |
-| Load a signed zero to fp0; do not set inex2/ainex 
+| Load a signed zero to fp0; do not set inex2/ainex
 |
 	.global	szero
 szero:
@@ -119,7 +119,7 @@
 	bne	ld_mzero	|if neg, load neg zero
 	bra	ld_pzero	|load positive zero
 |
-| Load a signed infinity to fp0; do not set inex2/ainex 
+| Load a signed infinity to fp0; do not set inex2/ainex
 |
 	.global	sinf
 sinf:
@@ -127,7 +127,7 @@
 	bne	ld_minf			|if negative branch
 	bra	ld_pinf
 |
-| Load a signed one to fp0; do not set inex2/ainex 
+| Load a signed one to fp0; do not set inex2/ainex
 |
 	.global	sone
 sone:
@@ -135,7 +135,7 @@
 	bne	ld_mone
 	bra	ld_pone
 |
-| Load a signed pi/2 to fp0; do not set inex2/ainex 
+| Load a signed pi/2 to fp0; do not set inex2/ainex
 |
 	.global	spi_2
 spi_2:
@@ -160,13 +160,13 @@
 	bne	t_operr
 	bra	ld_pinf
 |
-|	FLOGNP1 
+|	FLOGNP1
 |
 	.global	sslognp1
 sslognp1:
 	fmovemx (%a0),%fp0-%fp0
 	fcmpb	#-1,%fp0
-	fbgt	slognp1		
+	fbgt	slognp1
 	fbeq	t_dz2		|if = -1, divide by zero exception
 	fmovel	#0,%FPSR		|clr N flag
 	bra	t_operr		|take care of operands < -1
@@ -186,7 +186,7 @@
 |
 	.global	sslogn
 sslogn:
-	btstb	#sign_bit,LOCAL_EX(%a0) 
+	btstb	#sign_bit,LOCAL_EX(%a0)
 	bne	t_operr		|take care of operands < 0
 	cmpiw	#0x3fff,LOCAL_EX(%a0) |test for 1.0 input
 	bne	slogn
@@ -199,7 +199,7 @@
 
 	.global	sslognd
 sslognd:
-	btstb	#sign_bit,LOCAL_EX(%a0) 
+	btstb	#sign_bit,LOCAL_EX(%a0)
 	beq	slognd
 	bra	t_operr		|take care of operands < 0
 
@@ -221,7 +221,7 @@
 
 	.global	sslog10d
 sslog10d:
-	btstb	#sign_bit,LOCAL_EX(%a0) 
+	btstb	#sign_bit,LOCAL_EX(%a0)
 	beq	slog10d
 	bra	t_operr		|take care of operands < 0
 
@@ -243,7 +243,7 @@
 
 	.global	sslog2d
 sslog2d:
-	btstb	#sign_bit,LOCAL_EX(%a0) 
+	btstb	#sign_bit,LOCAL_EX(%a0)
 	beq	slog2d
 	bra	t_operr		|take care of operands < 0
 
@@ -310,7 +310,7 @@
 	btstl	#7,%d0		|test if + or -
 	beq	ld_pzero	|if pos then load +0
 	bra	ld_mzero	|else neg load -0
-	
+
 smod_fpn:
 	moveb	ETEMP(%a6),%d1	|get sign of src op
 	moveb	FPTEMP(%a6),%d0	|get sign of dst op
@@ -327,7 +327,7 @@
 	fmovel USER_FPCR(%a6),%fpcr |use user's rmode and precision
 	fmovex FPTEMP(%a6),%fp0	|return dest to fp0
 	rts
-		
+
 |
 |	FREM
 |
@@ -372,7 +372,7 @@
 	lea	premt,%a1
 	movel	(%a1,%d1.w*4),%a1
 	jmp	(%a1)
-	
+
 srem_snan:
 	bra	src_nan
 srem_dnan:
@@ -390,7 +390,7 @@
 	btstl	#7,%d0		|test if + or -
 	beq	ld_pzero	|if pos then load +0
 	bra	ld_mzero	|else neg load -0
-	
+
 srem_fpn:
 	moveb	ETEMP(%a6),%d1	|get sign of src op
 	moveb	FPTEMP(%a6),%d0	|get sign of dst op
@@ -424,10 +424,10 @@
 	.long	scl_inf		|  10,00  inf,norm  = +-inf
 	.long	scl_inf		|  10,01  inf,zero  = +-inf
 	.long	scl_opr		|  10,10  inf,inf   = nan with operr
- 	.long	scl_snan	|  10,11  inf,nan   = nan
- 	.long	scl_dnan	|  11,00  nan,norm  = nan
- 	.long	scl_dnan	|  11,01  nan,zero  = nan
- 	.long	scl_dnan	|  11,10  nan,inf   = nan
+	.long	scl_snan	|  10,11  inf,nan   = nan
+	.long	scl_dnan	|  11,00  nan,norm  = nan
+	.long	scl_dnan	|  11,01  nan,zero  = nan
+	.long	scl_dnan	|  11,10  nan,inf   = nan
 	.long	scl_dnan	|  11,11  nan,nan   = nan
 
 	.global	pscale
@@ -478,7 +478,7 @@
 sincosp:
 	fmovex PZERO,%fp0
 sincoscom:
-  	fmovemx PONE,%fp1-%fp1	|do not allow FPSR to be affected
+	fmovemx PONE,%fp1-%fp1	|do not allow FPSR to be affected
 	bra	sto_cos		|store cosine result
 
 	.global	ssincosi
@@ -498,7 +498,7 @@
 	bsr	sto_cos
 	bra	src_nan
 |
-| This code forces default values for the zero, inf, and nan cases 
+| This code forces default values for the zero, inf, and nan cases
 | in the transcendentals code.  The CC bits must be set in the
 | stacked FPSR to be correctly reported.
 |
diff -Nru a/arch/m68k/fpsp040/fpsp.h b/arch/m68k/fpsp040/fpsp.h
--- a/arch/m68k/fpsp040/fpsp.h	Sun May 16 01:18:35 2004
+++ b/arch/m68k/fpsp040/fpsp.h	Sun May 16 01:18:35 2004
@@ -5,15 +5,15 @@
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 |	fpsp.h --- stack frame offsets during FPSP exception handling
 |
 |	These equates are used to access the exception frame, the fsave
 |	frame and any local variables needed by the FPSP package.
-|	
+|
 |	All FPSP handlers begin by executing:
 |
 |		link	a6,#-LOCAL_SIZE
@@ -90,13 +90,13 @@
 	.set	USER_FP2,LV+40		| saved user FP2
 	.set	USER_FP3,LV+52		| saved user FP3
 	.set	USER_FPCR,LV+64		| saved user FPCR
-	.set	FPCR_ENABLE,USER_FPCR+2	| 	FPCR exception enable 
-	.set	FPCR_MODE,USER_FPCR+3	| 	FPCR rounding mode control
+	.set	FPCR_ENABLE,USER_FPCR+2	|	FPCR exception enable
+	.set	FPCR_MODE,USER_FPCR+3	|	FPCR rounding mode control
 	.set	USER_FPSR,LV+68		| saved user FPSR
-	.set	FPSR_CC,USER_FPSR+0	| 	FPSR condition code
-	.set	FPSR_QBYTE,USER_FPSR+1	| 	FPSR quotient
-	.set	FPSR_EXCEPT,USER_FPSR+2	| 	FPSR exception
-	.set	FPSR_AEXCEPT,USER_FPSR+3	| 	FPSR accrued exception
+	.set	FPSR_CC,USER_FPSR+0	|	FPSR condition code
+	.set	FPSR_QBYTE,USER_FPSR+1	|	FPSR quotient
+	.set	FPSR_EXCEPT,USER_FPSR+2	|	FPSR exception
+	.set	FPSR_AEXCEPT,USER_FPSR+3	|	FPSR accrued exception
 	.set	USER_FPIAR,LV+72		| saved user FPIAR
 	.set	FP_SCR1,LV+76		| room for a temporary float value
 	.set	FP_SCR2,LV+92		| room for a temporary float value
@@ -143,8 +143,8 @@
 	.set	CMDREG3B,LV-48		| cmd reg for E3 exceptions (2 bytes)
 |
 	.set	NMNEXC,LV-44		| NMNEXC (unsup,snan bits only)
-	.set	nmn_unsup_bit,1	| 
-	.set	nmn_snan_bit,0	| 
+	.set	nmn_unsup_bit,1	|
+	.set	nmn_snan_bit,0	|
 |
 	.set	NMCEXC,LV-43		| NMNEXC & NMCEXC
 	.set	nmn_operr_bit,7
@@ -249,7 +249,7 @@
 	.set	inf_mask,0x02000000
 	.set	nan_mask,0x01000000
 |
-	.set	bsun_mask,0x00008000	| 
+	.set	bsun_mask,0x00008000	|
 	.set	snan_mask,0x00004000
 	.set	operr_mask,0x00002000
 	.set	ovfl_mask,0x00001000
@@ -268,7 +268,7 @@
 |
 	.set	dzinf_mask,inf_mask+dz_mask+adz_mask
 	.set	opnan_mask,nan_mask+operr_mask+aiop_mask
-	.set	nzi_mask,0x01ffffff 	|  clears N, Z, and I
+	.set	nzi_mask,0x01ffffff	|  clears N, Z, and I
 	.set	unfinx_mask,unfl_mask+inex2_mask+aunfl_mask+ainex_mask
 	.set	unf2inx_mask,unfl_mask+inex2_mask+ainex_mask
 	.set	ovfinx_mask,ovfl_mask+inex2_mask+aovfl_mask+ainex_mask
diff -Nru a/arch/m68k/fpsp040/gen_except.S b/arch/m68k/fpsp040/gen_except.S
--- a/arch/m68k/fpsp040/gen_except.S	Sun May 16 01:18:34 2004
+++ b/arch/m68k/fpsp040/gen_except.S	Sun May 16 01:18:34 2004
@@ -2,10 +2,10 @@
 |	gen_except.sa 3.7 1/16/92
 |
 |	gen_except --- FPSP routine to detect reportable exceptions
-|	
+|
 |	This routine compares the exception enable byte of the
 |	user_fpcr on the stack with the exception status byte
-|	of the user_fpsr. 
+|	of the user_fpsr.
 |
 |	Any routine which may report an exceptions must load
 |	the stack frame in memory with the exceptional operand(s).
@@ -23,14 +23,14 @@
 |
 |	Note: The IEEE standard specifies that inex2 is to be
 |	reported if ovfl occurs and the ovfl enable bit is not
-|	set but the inex2 enable bit is.  
+|	set but the inex2 enable bit is.
 |
 |
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 GEN_EXCEPT:    |idnt    2,1 | Motorola 040 Floating Point Software Package
@@ -70,12 +70,12 @@
 |
 	movel	ETEMP_EX(%a6),ETEMP_EX(%a1) |copy etemp from unimp
 	movel	ETEMP_HI(%a6),ETEMP_HI(%a1) |frame to busy frame
-	movel	ETEMP_LO(%a6),ETEMP_LO(%a1) 
+	movel	ETEMP_LO(%a6),ETEMP_LO(%a1)
 	movel	CMDREG1B(%a6),CMDREG1B(%a1) |set inst in frame to unimp
 	movel	CMDREG1B(%a6),%d0		|fix cmd1b to make it
 	andl	#0x03c30000,%d0		|work for cmd3b
 	bfextu	CMDREG1B(%a6){#13:#1},%d1	|extract bit 2
-	lsll	#5,%d1			
+	lsll	#5,%d1
 	swap	%d1
 	orl	%d1,%d0			|put it in the right place
 	bfextu	CMDREG1B(%a6){#10:#3},%d1	|extract bit 3,4,5
@@ -86,7 +86,7 @@
 |
 | Or in the FPSR from the emulation with the USER_FPSR on the stack.
 |
-	fmovel	%FPSR,%d0		
+	fmovel	%FPSR,%d0
 	orl	%d0,USER_FPSR(%a6)
 	movel	USER_FPSR(%a6),FPSR_SHADOW(%a1) |set exc bits
 	orl	#sx_mask,E_BYTE(%a1)
@@ -108,7 +108,7 @@
 	cmpib	#UNIMP_41_SIZE-4,1(%a7)	|test for rev unimp frame
 	bnel	fpsp_fmt_error		|if not $28 or $30
 	leal	UNIMP_41_SIZE+LOCAL_SIZE(%a7),%a1
-	
+
 unimp_con:
 |
 | Fix up the new unimp frame with entries from the old unimp frame
@@ -117,23 +117,23 @@
 |
 | Or in the FPSR from the emulation with the USER_FPSR on the stack.
 |
-	fmovel	%FPSR,%d0		
+	fmovel	%FPSR,%d0
 	orl	%d0,USER_FPSR(%a6)
 	bra	do_clean
 
 |
 | Frame is idle, so check for exceptions reported through
-| USER_FPSR and set the unimp frame accordingly.  
+| USER_FPSR and set the unimp frame accordingly.
 | A7 must be incremented to the point before the
 | idle fsave vector to the unimp vector.
 |
-	
+
 do_check:
 	addl	#4,%a7			|point A7 back to unimp frame
 |
 | Or in the FPSR from the emulation with the USER_FPSR on the stack.
 |
-	fmovel	%FPSR,%d0		
+	fmovel	%FPSR,%d0
 	orl	%d0,USER_FPSR(%a6)
 |
 | On a busy frame, we must clear the nmnexc bits.
@@ -165,10 +165,10 @@
 bsun_exc:
 	bra	do_clean
 |
-| The typical work to be done to the unimp frame to report an 
+| The typical work to be done to the unimp frame to report an
 | exception is to set the E1/E3 byte and clr the U flag.
-| commonE1 does this for E1 exceptions, which are snan, 
-| operr, and dz.  commonE3 does this for E3 exceptions, which 
+| commonE1 does this for E1 exceptions, which are snan,
+| operr, and dz.  commonE3 does this for E3 exceptions, which
 | are inex2 and inex1, and also clears the E1 exception bit
 | left over from the unimp exception.
 |
@@ -186,7 +186,7 @@
 
 unsE3:
 	tstb	RES_FLG(%a6)
-	bnes	unsE3_0	
+	bnes	unsE3_0
 unsE3_1:
 	bsetb	#E3,E_BYTE(%a6)		|set E3 flag
 unsE3_0:
@@ -194,7 +194,7 @@
 	movel	CMDREG1B(%a6),%d0
 	andl	#0x03c30000,%d0		|work for cmd3b
 	bfextu	CMDREG1B(%a6){#13:#1},%d1	|extract bit 2
-	lsll	#5,%d1			
+	lsll	#5,%d1
 	swap	%d1
 	orl	%d1,%d0			|put it in the right place
 	bfextu	CMDREG1B(%a6){#10:#3},%d1	|extract bit 3,4,5
@@ -218,8 +218,8 @@
 	beqs	no_exc			|if clear, exit
 	bras	ovfl_unfl		|go to unfl_ovfl to determine if
 |					;it is an unsupp or unimp exc
-	
-| No exceptions are to be reported.  If the instruction was 
+
+| No exceptions are to be reported.  If the instruction was
 | unimplemented, no FPU restore is necessary.  If it was
 | unsupported, we must perform the restore.
 no_exc:
@@ -227,7 +227,7 @@
 	beqs	uni_no_exc
 uns_no_exc:
 	tstb	RES_FLG(%a6)	|check if frestore is needed
-	bne	do_clean 	|if clear, no frestore needed
+	bne	do_clean	|if clear, no frestore needed
 uni_no_exc:
 	moveml	USER_DA(%a6),%d0-%d1/%a0-%a1
 	fmovemx USER_FP0(%a6),%fp0-%fp3
@@ -243,13 +243,13 @@
 |
 | Unimplemented Instruction Handler:
 | Ovfl:
-|   Only scosh, setox, ssinh, stwotox, and scale can set overflow in 
+|   Only scosh, setox, ssinh, stwotox, and scale can set overflow in
 |   this manner.
 | Unfl:
 |   Stwotox, setox, and scale can set underflow in this manner.
 |   Any of the other Library Routines such that f(x)=x in which
-|   x is an extended denorm can report an underflow exception. 
-|   It is the responsibility of the exception-causing exception 
+|   x is an extended denorm can report an underflow exception.
+|   It is the responsibility of the exception-causing exception
 |   to make sure that WBTEMP is correct.
 |
 |   The exceptional operand is in FP_SCR1.
@@ -306,7 +306,7 @@
 	movel	CMDREG1B(%a6),%d0		|fix cmd1b to make it
 	andl	#0x03c30000,%d0		|work for cmd3b
 	bfextu	CMDREG1B(%a6){#13:#1},%d1	|extract bit 2
-	lsll	#5,%d1			
+	lsll	#5,%d1
 	swap	%d1
 	orl	%d1,%d0			|put it in the right place
 	bfextu	CMDREG1B(%a6){#10:#3},%d1	|extract bit 3,4,5
@@ -318,10 +318,10 @@
 |
 | Check if the frame to be restored is busy or unimp.
 |** NOTE *** Bug fix for errata (0d43b #3)
-| If the frame is unimp, we must create a busy frame to 
+| If the frame is unimp, we must create a busy frame to
 | fix the bug with the nmnexc bits in cases in which they
 | are set by a previous instruction and not cleared by
-| the save. The frame will be unimp only if the final 
+| the save. The frame will be unimp only if the final
 | instruction in an emulation routine caused the exception
 | by doing an fmove <ea>,fp0.  The exception operand, in
 | internal format, is in fptemp.
@@ -353,7 +353,7 @@
 	leal	BUSY_SIZE+LOCAL_SIZE(%a7),%a1	|init a1 for new frame
 	moveb	VER_TMP(%a6),(%a7)	|write busy fmt word
 	moveb	#BUSY_SIZE-4,1(%a7)
-	movel	FP_SCR1(%a6),WBTEMP_EX(%a1) 	|write
+	movel	FP_SCR1(%a6),WBTEMP_EX(%a1)	|write
 	movel	FP_SCR1+4(%a6),WBTEMP_HI(%a1)	|exceptional op to
 	movel	FP_SCR1+8(%a6),WBTEMP_LO(%a1)	|wbtemp
 |	btst.b	#E1,E_BYTE(%a1)
@@ -362,7 +362,7 @@
 	bfins	%d0,NMCEXC(%a1){#4:#4}	|and insert them in nmcexc
 	movel	USER_FPSR(%a6),FPSR_SHADOW(%a1) |set exc bits
 	orl	#sx_mask,E_BYTE(%a1)
-	
+
 do_restore:
 	moveml	USER_DA(%a6),%d0-%d1/%a0-%a1
 	fmovemx USER_FP0(%a6),%fp0-%fp3
@@ -374,10 +374,10 @@
 cont:
 	unlk	%a6
 |
-| If trace mode enabled, then go to trace handler.  This handler 
-| cannot have any fp instructions.  If there are fp inst's and an 
-| exception has been restored into the machine then the exception 
-| will occur upon execution of the fp inst.  This is not desirable 
+| If trace mode enabled, then go to trace handler.  This handler
+| cannot have any fp instructions.  If there are fp inst's and an
+| exception has been restored into the machine then the exception
+| will occur upon execution of the fp inst.  This is not desirable
 | in the kernel (supervisor mode).  See MC68040 manual Section 9.3.8.
 |
 finish_up:
@@ -436,12 +436,12 @@
         movel  USER_D1(%a6),%d1  | restore d1
 	movel	#0x40280000,-(%sp)
 	frestore (%sp)+
-	unlk  	%a5	
+	unlk	%a5
 	rts
 
 frame_41:
 	tstb	1(%sp)		| check to see if idle
-	bne	notidle	
+	bne	notidle
 idle41:
 	clrl	(%sp)		| get rid of old fsave frame
         movel  %d1,USER_D1(%a6)  | save d1
@@ -451,18 +451,18 @@
         movel  USER_D1(%a6),%d1  | restore d1
 	movel	#0x41300000,-(%sp)
 	frestore (%sp)+
-	unlk	%a5	
+	unlk	%a5
 	rts
 
 notidle:
-	bclrb	#etemp15_bit,-40(%a5) 
+	bclrb	#etemp15_bit,-40(%a5)
 	frestore (%sp)+
-	unlk	%a5	
+	unlk	%a5
 	rts
 
 nofix:
 	frestore (%sp)+
-	unlk	%a5	
+	unlk	%a5
 	rts
 
 	|end
diff -Nru a/arch/m68k/fpsp040/get_op.S b/arch/m68k/fpsp040/get_op.S
--- a/arch/m68k/fpsp040/get_op.S	Sun May 16 01:18:34 2004
+++ b/arch/m68k/fpsp040/get_op.S	Sun May 16 01:18:34 2004
@@ -16,7 +16,7 @@
 |
 | - For unnormalized numbers (opclass 0, 2, or 3) the
 | number(s) is normalized and the operand type tag is updated.
-|		
+|
 | - For a packed number (opclass 2) the number is unpacked and the
 | operand type tag is updated.
 |
@@ -41,7 +41,7 @@
 | the '040.  The '040 then re-executes the fadd.x fpm,fpn with
 | a normalized number in the source and the instruction is
 | successful.
-|		
+|
 | Next consider if in the process of normalizing the un-
 | normalized number it becomes a denormalized number.  The
 | routine which converts the unnorm to a norm (called mk_norm)
@@ -54,8 +54,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 GET_OP:    |idnt    2,1 | Motorola 040 Floating Point Software Package
@@ -194,7 +194,7 @@
 
 uni_getop:
 	bfextu	CMDREG1B(%a6){#0:#6},%d0 |get opclass and src fields
-	cmpil	#0x17,%d0		|if op class and size fields are $17, 
+	cmpil	#0x17,%d0		|if op class and size fields are $17,
 |				;it is FMOVECR; if not, continue
 |
 | If the instruction is fmovecr, exit get_op.  It is handled
@@ -226,21 +226,21 @@
 	movew	FPTEMP_EX(%a6),%d0 |get destination exponent
 	andiw	#0x7fff,%d0	|mask sign, check if exp = 0000
 	beqs	src_op_ck	|if denorm then check source op.
-|				;denorms are taken care of in res_func 
+|				;denorms are taken care of in res_func
 |				;(unsupp) or do_func (unimp)
 |				;else unnorm fall through
 	leal	FPTEMP(%a6),%a0	|point a0 to dop - used in mk_norm
 	bsr	mk_norm		|go normalize - mk_norm returns:
-|				;L_SCR1{7:5} = operand tag 
+|				;L_SCR1{7:5} = operand tag
 |				;	(000 = norm, 100 = denorm)
-|				;L_SCR1{4} = fpte15 or ete15 
+|				;L_SCR1{4} = fpte15 or ete15
 |				;	0 = exp >  $3fff
 |				;	1 = exp <= $3fff
-|				;and puts the normalized num back 
+|				;and puts the normalized num back
 |				;on the fsave stack
 |
-	moveb L_SCR1(%a6),DTAG(%a6) |write the new tag & fpte15 
-|				;to the fsave stack and fall 
+	moveb L_SCR1(%a6),DTAG(%a6) |write the new tag & fpte15
+|				;to the fsave stack and fall
 |				;through to check source operand
 |
 src_op_ck:
@@ -255,19 +255,19 @@
 src_ex_dnrm:
 	movew	ETEMP_EX(%a6),%d0 |get source exponent
 	andiw	#0x7fff,%d0	|mask sign, check if exp = 0000
-	beq	end_getop	|if denorm then exit, denorms are 
+	beq	end_getop	|if denorm then exit, denorms are
 |				;handled in do_func
 	leal	ETEMP(%a6),%a0	|point a0 to sop - used in mk_norm
 	bsr	mk_norm		|go normalize - mk_norm returns:
-|				;L_SCR1{7:5} = operand tag 
+|				;L_SCR1{7:5} = operand tag
 |				;	(000 = norm, 100 = denorm)
-|				;L_SCR1{4} = fpte15 or ete15 
+|				;L_SCR1{4} = fpte15 or ete15
 |				;	0 = exp >  $3fff
 |				;	1 = exp <= $3fff
-|				;and puts the normalized num back 
+|				;and puts the normalized num back
 |				;on the fsave stack
 |
-	moveb	L_SCR1(%a6),STAG(%a6) |write the new tag & ete15 
+	moveb	L_SCR1(%a6),STAG(%a6) |write the new tag & ete15
 	rts			|end_getop
 
 |
@@ -285,7 +285,7 @@
 	movew	#0x3c01,%d1	|write the bias for a dbl denorm
 common:
 	btstb	#sign_bit,ETEMP_EX(%a6) |grab sign bit of mantissa
-	beqs	pos	
+	beqs	pos
 	bset	#15,%d1		|set sign bit because it is negative
 pos:
 	movew	%d1,ETEMP_EX(%a6)
@@ -297,7 +297,7 @@
 	movew	%d1,CMDREG1B(%a6)	|write back to the command word in stack
 |				;this is needed to fix unsupp data stack
 	leal	ETEMP(%a6),%a0	|point a0 to sop
-	
+
 	bsr	mk_norm		|convert sgl/dbl denorm to norm
 	moveb	L_SCR1(%a6),STAG(%a6) |put tag into source tag reg - d0
 	rts			|end_getop
@@ -306,7 +306,7 @@
 | instruction is dyadic or monadic is still unknown
 |
 pack_source:
-	movel	FPTEMP_LO(%a6),ETEMP(%a6)	|write ms part of packed 
+	movel	FPTEMP_LO(%a6),ETEMP(%a6)	|write ms part of packed
 |				;number to etemp slot
 	bsr	chk_dy_mo	|set dyadic/monadic flag
 	bsr	unpack
@@ -325,7 +325,7 @@
 	btstb	#7,DTAG(%a6)	|check dest tag for unnorm or denorm
 	bne	dst_ex_dnrm	|else, handle the unnorm or ext denorm
 |
-| Dest is not denormalized.  Check for norm, and set fpte15 
+| Dest is not denormalized.  Check for norm, and set fpte15
 | accordingly.
 |
 	moveb	DTAG(%a6),%d0
@@ -357,13 +357,13 @@
 | unsupported data type exception.  Set if dyadic.
 |
 chk_dy_mo:
-	movew	CMDREG1B(%a6),%d0	
+	movew	CMDREG1B(%a6),%d0
 	btstl	#5,%d0		|testing extension command word
 	beqs	set_mon		|if bit 5 = 0 then monadic
 	btstl	#4,%d0		|know that bit 5 = 1
 	beqs	set_dya		|if bit 4 = 0 then dyadic
 	andiw	#0x007f,%d0	|get rid of all but extension bits {6:0}
-	cmpiw 	#0x0038,%d0	|if extension = $38 then fcmp (dyadic)
+	cmpiw	#0x0038,%d0	|if extension = $38 then fcmp (dyadic)
 	bnes	set_mon
 set_dya:
 	st	DY_MO_FLG(%a6)	|set the inst flag type to dyadic
@@ -406,7 +406,7 @@
 |	L_SCR1{7:5} = operand tag (000 = norm, 100 = denorm)
 |	L_SCR1{4}   = fpte15 or ete15 (0 = exp > $3fff, 1 = exp <=$3fff)
 |	the normalized operand is placed back on the fsave stack
-mk_norm:	
+mk_norm:
 	clrl	L_SCR1(%a6)
 	bclrb	#sign_bit,LOCAL_EX(%a0)
 	sne	LOCAL_SGN(%a0)	|transform into internal extended format
@@ -426,11 +426,11 @@
 	cmpw	#0x3fff,LOCAL_EX(%a0) |if exp > $3fff
 	bgts	end_mk		|   fpte15/ete15 already set to 0
 	bsetb	#4,L_SCR1(%a6)	|else set fpte15/ete15 to 1
-|				;calling routine actually sets the 
-|				;value on the stack (along with the 
-|				;tag), since this routine doesn't 
+|				;calling routine actually sets the
+|				;value on the stack (along with the
+|				;tag), since this routine doesn't
 |				;know if it should set ete15 or fpte15
-|				;ie, it doesn't know if this is the 
+|				;ie, it doesn't know if this is the
 |				;src op or dest op.
 end_mk:
 	bfclr	LOCAL_SGN(%a0){#0:#8}
@@ -455,7 +455,7 @@
 |
 uns_opx:
 	bsr	nrm_zero	|normalize the number
-	btstb	#7,LOCAL_HI(%a0)	|check if integer bit (j-bit) is set 
+	btstb	#7,LOCAL_HI(%a0)	|check if integer bit (j-bit) is set
 	beqs	uns_den		|if clear then now have a denorm
 uns_nrm:
 	orb	#norm_tag,L_SCR1(%a6) |set tag to norm
@@ -468,7 +468,7 @@
 |
 uni_inst:
 	bsr	nrm_zero
-	btstb	#7,LOCAL_HI(%a0)	|check if integer bit (j-bit) is set 
+	btstb	#7,LOCAL_HI(%a0)	|check if integer bit (j-bit) is set
 	beqs	uni_den		|if clear then now have a denorm
 uni_nrm:
 	orb	#norm_tag,L_SCR1(%a6) |set tag to norm
@@ -480,9 +480,9 @@
 |
 |	Decimal to binary conversion
 |
-| Special cases of inf and NaNs are completed outside of decbin.  
+| Special cases of inf and NaNs are completed outside of decbin.
 | If the input is an snan, the snan bit is not set.
-| 
+|
 | input:
 |	ETEMP(a6)	- points to packed decimal string in memory
 | output:
@@ -610,16 +610,16 @@
 
 finish:
 	movew	CMDREG1B(%a6),%d0	|get the command word
-	andw	#0xfbff,%d0	|change the source specifier field to 
+	andw	#0xfbff,%d0	|change the source specifier field to
 |				;extended (was packed).
 	movew	%d0,CMDREG1B(%a6)	|write command word back to fsave stack
-|				;we need to do this so the 040 will 
-|				;re-execute the inst. without taking 
+|				;we need to do this so the 040 will
+|				;re-execute the inst. without taking
 |				;another packed trap.
 
 fix_stag:
-|Converted result is now in etemp on fsave stack, now set the source 
-|tag (stag) 
+|Converted result is now in etemp on fsave stack, now set the source
+|tag (stag)
 |	if (ete =$7fff) then INF or NAN
 |		if (etemp = $x.0----0) then
 |			stag = INF
@@ -632,12 +632,12 @@
 |			stag = NORM
 |
 | Note also that the etemp_15 bit (just right of the stag) must
-| be set accordingly.  
+| be set accordingly.
 |
 	movew		ETEMP_EX(%a6),%d1
 	andiw		#0x7fff,%d1   |strip sign
-	cmpw  		#0x7fff,%d1
-	bnes  		z_or_nrm
+	cmpw		#0x7fff,%d1
+	bnes		z_or_nrm
 	movel		ETEMP_HI(%a6),%d1
 	bnes		is_nan
 	movel		ETEMP_LO(%a6),%d1
@@ -651,7 +651,7 @@
 	movel		#0x60,%d0
 	rts
 z_or_nrm:
-	tstw		%d1  
+	tstw		%d1
 	bnes		is_nrm
 is_zro:
 | For a zero, set etemp_15
@@ -670,7 +670,7 @@
 	movel		#0,%d0
 end_fix:
 	rts
- 
+
 end_get:
 	rts
 	|end
diff -Nru a/arch/m68k/fpsp040/kernel_ex.S b/arch/m68k/fpsp040/kernel_ex.S
--- a/arch/m68k/fpsp040/kernel_ex.S	Sun May 16 01:18:36 2004
+++ b/arch/m68k/fpsp040/kernel_ex.S	Sun May 16 01:18:36 2004
@@ -1,19 +1,19 @@
 |
-|	kernel_ex.sa 3.3 12/19/90 
+|	kernel_ex.sa 3.3 12/19/90
 |
-| This file contains routines to force exception status in the 
+| This file contains routines to force exception status in the
 | fpu for exceptional cases detected or reported within the
 | transcendental functions.  Typically, the t_xx routine will
 | set the appropriate bits in the USER_FPSR word on the stack.
 | The bits are tested in gen_except.sa to determine if an exceptional
-| situation needs to be created on return from the FPSP. 
+| situation needs to be created on return from the FPSP.
 |
 
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 KERNEL_EX:    |idnt    2,1 | Motorola 040 Floating Point Software Package
@@ -31,7 +31,7 @@
 	|xref	  unf_sub
 	|xref	  nrm_set
 
-	.global   	  t_dz
+	.global	  t_dz
 	.global      t_dz2
 	.global      t_operr
 	.global      t_unfl
@@ -49,7 +49,7 @@
 |
 |	if dz trap disabled
 |		store properly signed inf (use sign of etemp) into fp0
-|		set FPSR exception status dz bit, condition code 
+|		set FPSR exception status dz bit, condition code
 |		inf bit, and accrued dz bit
 |		return
 |		frestore the frame into the machine (done by unimp_hd)
@@ -61,7 +61,7 @@
 |		frestore the frame into the machine (done by unimp_hd)
 |
 | t_dz2 is used by monadic functions such as flogn (from do_func).
-| t_dz is used by monadic functions such as satanh (from the 
+| t_dz is used by monadic functions such as satanh (from the
 | transcendental function).
 |
 t_dz2:
@@ -104,10 +104,10 @@
 |	OPERR exception
 |
 |	if (operr trap disabled)
-|		set FPSR exception status operr bit, condition code 
+|		set FPSR exception status operr bit, condition code
 |		nan bit; Store default NAN into fp0
 |		frestore the frame into the machine (done by unimp_hd)
-|	
+|
 |	else (operr trap enabled)
 |		set FPSR exception status operr bit, accrued operr bit
 |		set flag to disable sto_res from corrupting fp register
@@ -159,13 +159,13 @@
 
 unfl_dis:
 	bfextu	FPCR_MODE(%a6){#0:#2},%d0	|get round precision
-	
+
 	bclrb	#sign_bit,LOCAL_EX(%a0)
 	sne	LOCAL_SGN(%a0)		|convert to internal ext format
 
 	bsr	unf_sub			|returns IEEE result at a0
 |					;and sets FPSR_CC accordingly
-	
+
 	bfclr	LOCAL_SGN(%a0){#0:#8}	|convert back to IEEE ext format
 	beqs	unfl_fin
 
@@ -175,7 +175,7 @@
 unfl_fin:
 	fmovemx (%a0),%fp0-%fp0		|store result in fp0
 	rts
-	
+
 
 |
 |	t_ovfl2 --- OVFL exception (without inex2 returned)
@@ -280,7 +280,7 @@
 |	DST_NAN
 |
 | Determine if the destination nan is signalling or non-signalling,
-| and set the FPSR bits accordingly.  See the MC68040 User's Manual 
+| and set the FPSR bits accordingly.  See the MC68040 User's Manual
 | section 3.2.2.5 NOT-A-NUMBERS.
 |
 dst_nan:
@@ -288,7 +288,7 @@
 	beqs	dst_pos			|if clr, it was positive
 	bsetb	#neg_bit,FPSR_CC(%a6)	|set N bit
 dst_pos:
-	btstb	#signan_bit,FPTEMP_HI(%a6) |check if signalling 
+	btstb	#signan_bit,FPTEMP_HI(%a6) |check if signalling
 	beqs	dst_snan		|branch if signalling
 
 	fmovel	%d1,%fpcr			|restore user's rmode/prec
@@ -300,14 +300,14 @@
 	andib	#0xe0,%d0
 	cmpib	#0x60,%d0
 	bnes	no_snan
-	btstb	#signan_bit,ETEMP_HI(%a6) |check if signalling 
+	btstb	#signan_bit,ETEMP_HI(%a6) |check if signalling
 	bnes	no_snan
 	orl	#snaniop_mask,USER_FPSR(%a6) |set NAN, SNAN, AIOP
 no_snan:
-	rts	
+	rts
 
 dst_snan:
-	btstb	#snan_bit,FPCR_ENABLE(%a6) |check if trap enabled 
+	btstb	#snan_bit,FPCR_ENABLE(%a6) |check if trap enabled
 	beqs	dst_dis			|branch if disabled
 
 	orb	#nan_tag,DTAG(%a6)	|set up dtag for nan
@@ -316,9 +316,9 @@
 	rts
 
 dst_dis:
-	bsetb	#signan_bit,FPTEMP_HI(%a6) |set SNAN bit in sop 
+	bsetb	#signan_bit,FPTEMP_HI(%a6) |set SNAN bit in sop
 	fmovel	%d1,%fpcr			|restore user's rmode/prec
-	fmovex FPTEMP(%a6),%fp0		|load non-sign. nan 
+	fmovex FPTEMP(%a6),%fp0		|load non-sign. nan
 	orl	#snaniop_mask,USER_FPSR(%a6) |set NAN, SNAN, AIOP
 	rts
 
@@ -326,7 +326,7 @@
 |	SRC_NAN
 |
 | Determine if the source nan is signalling or non-signalling,
-| and set the FPSR bits accordingly.  See the MC68040 User's Manual 
+| and set the FPSR bits accordingly.  See the MC68040 User's Manual
 | section 3.2.2.5 NOT-A-NUMBERS.
 |
 src_nan:
@@ -334,16 +334,16 @@
 	beqs	src_pos			|if clr, it was positive
 	bsetb	#neg_bit,FPSR_CC(%a6)	|set N bit
 src_pos:
-	btstb	#signan_bit,ETEMP_HI(%a6) |check if signalling 
+	btstb	#signan_bit,ETEMP_HI(%a6) |check if signalling
 	beqs	src_snan		|branch if signalling
 	fmovel	%d1,%fpcr			|restore user's rmode/prec
 	fmovex ETEMP(%a6),%fp0		|return the non-signalling nan
-	rts	
+	rts
 
 src_snan:
-	btstb	#snan_bit,FPCR_ENABLE(%a6) |check if trap enabled 
+	btstb	#snan_bit,FPCR_ENABLE(%a6) |check if trap enabled
 	beqs	src_dis			|branch if disabled
-	bsetb	#signan_bit,ETEMP_HI(%a6) |set SNAN bit in sop 
+	bsetb	#signan_bit,ETEMP_HI(%a6) |set SNAN bit in sop
 	orb	#norm_tag,DTAG(%a6)	|set up dtag for norm
 	orb	#nan_tag,STAG(%a6)	|set up stag for nan
 	st	STORE_FLG(%a6)		|do not store a result
@@ -351,9 +351,9 @@
 	rts
 
 src_dis:
-	bsetb	#signan_bit,ETEMP_HI(%a6) |set SNAN bit in sop 
+	bsetb	#signan_bit,ETEMP_HI(%a6) |set SNAN bit in sop
 	fmovel	%d1,%fpcr			|restore user's rmode/prec
-	fmovex ETEMP(%a6),%fp0		|load non-sign. nan 
+	fmovex ETEMP(%a6),%fp0		|load non-sign. nan
 	orl	#snaniop_mask,USER_FPSR(%a6) |set NAN, SNAN, AIOP
 	rts
 
@@ -367,7 +367,7 @@
 	bras	xdnrm_con
 |
 | Entry point for scale with extended denorm.  The function does
-| not set inex2, aunfl, or ainex.  
+| not set inex2, aunfl, or ainex.
 |
 t_resdnrm:
 	orl	#unfl_mask,USER_FPSR(%a6)
@@ -402,7 +402,7 @@
 	bfclr	LOCAL_SGN(%a0){#0:#8}	|change back to IEEE ext format
 	beqs	xdep
 	bsetb	#sign_bit,LOCAL_EX(%a0)
-xdep:	
+xdep:
 	bfclr	STAG(%a6){#5:#3}		|clear wbtm66,wbtm1,wbtm0
 	bsetb	#wbtemp15_bit,WB_BYTE(%a6) |set wbtemp15
 	bclrb	#sticky_bit,STICKY(%a6)	|clear sticky bit
@@ -439,7 +439,7 @@
 |
 	.global	t_avoid_unsupp
 t_avoid_unsupp:
-	link	%a2,#-LOCAL_SIZE		|so that a2 fpsp.h negative 
+	link	%a2,#-LOCAL_SIZE		|so that a2 fpsp.h negative
 |					;offsets may be used
 	fsave	-(%a7)
 	tstb	1(%a7)			|check if idle, exit if so
diff -Nru a/arch/m68k/fpsp040/res_func.S b/arch/m68k/fpsp040/res_func.S
--- a/arch/m68k/fpsp040/res_func.S	Sun May 16 01:18:33 2004
+++ b/arch/m68k/fpsp040/res_func.S	Sun May 16 01:18:33 2004
@@ -8,7 +8,7 @@
 | (Exception vector 55).
 |
 | For packed move out (fmove.p fpm,<ea>) the operation is
-| completed here; data is packed and moved to user memory. 
+| completed here; data is packed and moved to user memory.
 | The stack is restored to the 040 only in the case of a
 | reportable exception in the conversion.
 |
@@ -16,8 +16,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 RES_FUNC:    |idnt    2,1 | Motorola 040 Floating Point Software Package
@@ -48,7 +48,7 @@
 	|xref	t_unfl
 
 	.global	res_func
-	.global 	p_move
+	.global	p_move
 
 res_func:
 	clrb	DNRM_FLG(%a6)
@@ -100,7 +100,7 @@
 	movew	CMDREG1B(%a6),%d0	|get command register
 	andil	#0x7f,%d0			|strip to only command word
 |
-| At this point, fabs, fneg, fsmove, fdmove, ftst, fsqrt, fssqrt, and 
+| At this point, fabs, fneg, fsmove, fdmove, ftst, fsqrt, fssqrt, and
 | fdsqrt are possible.
 | For cases fabs, fneg, fsmove, and fdmove goto spos (do not normalize)
 | For cases fsqrt, fssqrt, and fdsqrt goto nrm_src (do normalize)
@@ -143,7 +143,7 @@
 	rts
 cu_ntn:
 	orl	#nan_mask,USER_FPSR(%a6)
-	movel	ETEMP_EX(%a6),FPTEMP_EX(%a6)	|set up fptemp sign for 
+	movel	ETEMP_EX(%a6),FPTEMP_EX(%a6)	|set up fptemp sign for
 |						;snan handler
 
 	rts
@@ -206,7 +206,7 @@
 cu_nmrd:
 	movel	#2,%d0			|set up the size for denorm
 	movew	LOCAL_EX(%a0),%d1		|compare exponent to double threshold
-	andw	#0x7fff,%d1	
+	andw	#0x7fff,%d1
 	cmpw	#0x3c01,%d1
 	bls	cu_nunfl
 	bfextu	FPCR_MODE(%a6){#2:#2},%d1	|get rmode
@@ -359,7 +359,7 @@
 |				;write the new tag & ete15 to the fstack
 mon_dnrm:
 |
-| At this point, check for the cases in which normalizing the 
+| At this point, check for the cases in which normalizing the
 | denorm produces incorrect results.
 |
 	tstb	DY_MO_FLG(%a6)	|all cases of dyadic instructions would
@@ -374,7 +374,7 @@
 	movew	CMDREG1B(%a6),%d0	|get command register
 	andil	#0x7f,%d0			|strip to only command word
 |
-| At this point, fabs, fneg, fsmove, fdmove, ftst, fsqrt, fssqrt, and 
+| At this point, fabs, fneg, fsmove, fdmove, ftst, fsqrt, fssqrt, and
 | fdsqrt are possible.
 | For cases fabs, fneg, fsmove, and fdmove goto spos (do not normalize)
 | For cases fsqrt, fssqrt, and fdsqrt goto nrm_src (do normalize)
@@ -382,12 +382,12 @@
 	btstl	#0,%d0
 	bnes	nrm_src		|weed out fsqrt instructions
 	st	CU_ONLY(%a6)	|set cu-only inst flag
-	bra	cu_dnrm		|fmove, fabs, fneg, ftst 
+	bra	cu_dnrm		|fmove, fabs, fneg, ftst
 |				;cases go to cu_dnrm
 nrm_src:
 	bclrb	#sign_bit,LOCAL_EX(%a0)
 	sne	LOCAL_SGN(%a0)
-	bsr	nrm_set		|normalize number (exponent will go 
+	bsr	nrm_set		|normalize number (exponent will go
 |				; negative)
 	bclrb	#sign_bit,LOCAL_EX(%a0) |get rid of false sign
 
@@ -413,7 +413,7 @@
 
 |
 | cu_dnrm handles all cu-only instructions (fmove, fabs, fneg, and
-| ftst) completely in software without an frestore to the 040. 
+| ftst) completely in software without an frestore to the 040.
 |
 cu_dnrm:
 	st	CU_ONLY(%a6)
@@ -446,7 +446,7 @@
 	rts
 cu_dtn:
 	orl	#nan_mask,USER_FPSR(%a6)
-	movel	ETEMP_EX(%a6),FPTEMP_EX(%a6)	|set up fptemp sign for 
+	movel	ETEMP_EX(%a6),FPTEMP_EX(%a6)	|set up fptemp sign for
 |						;snan handler
 	rts
 cu_dtcz:
@@ -525,7 +525,7 @@
 	bra	cu_sndr			|load single neg zero w/lsb
 |
 | The precision is extended, so the result in etemp is correct.
-| Simply set unfl (not inex2 or aunfl) and write the result to 
+| Simply set unfl (not inex2 or aunfl) and write the result to
 | the correct fp register.
 cu_wrexd:
 	orl	#unfl_mask,USER_FPSR(%a6)
@@ -597,7 +597,7 @@
 	orl	#neg_mask,USER_FPSR(%a6)
 	orl	#unfinx_mask,USER_FPSR(%a6)
 	bra	wr_etemp
-	
+
 |
 | This code checks for 16-bit overflow conditions on dyadic
 | operations which are not restorable into the floating-point
@@ -613,7 +613,7 @@
 |	                  $ff for both ops denormalized
 |
 | The wrap-around condition occurs for add, sub, div, and cmp
-| when 
+| when
 |
 |	abs(dest_exp - src_exp) >= $8000
 |
@@ -627,7 +627,7 @@
 | for this condition.  The restore flag (RES_FLG) is left clear.
 | No frestore is done unless an exception is to be reported.
 |
-| For fadd: 
+| For fadd:
 |	if(sign_of(dest) != sign_of(src))
 |		replace exponent of src with $3fff (keep sign)
 |		use fpu to perform dest+new_src (user's rmode and X)
@@ -689,10 +689,10 @@
 	cmpiw	#cmpcode,%d0
 	beq	wrap_cmp
 |
-| Inst is fdiv.  
+| Inst is fdiv.
 |
 wrap_div:
-	cmpb	#0xff,DNRM_FLG(%a6) |if both ops denorm, 
+	cmpb	#0xff,DNRM_FLG(%a6) |if both ops denorm,
 	beq	fix_stk		 |restore to fpu
 |
 | One of the ops is denormalized.  Test for wrap condition
@@ -722,7 +722,7 @@
 	bra	ck_in_com
 ckinf_nd:
 	moveb	DTAG(%a6),%d0		|check destination tag for inf or nan
-ck_in_com:	
+ck_in_com:
 	andib	#0x60,%d0			|isolate tag bits
 	cmpb	#0x40,%d0			|is it inf?
 	beq	nan_or_inf		|not wrap case
@@ -755,7 +755,7 @@
 	beqs	force_ovf
 	st	WBTEMP_SGN(%a6)
 |
-| This code handles the case of the instruction resulting in 
+| This code handles the case of the instruction resulting in
 | an overflow condition.
 |
 force_ovf:
@@ -777,7 +777,7 @@
 	bfextu	FPCR_MODE(%a6){#0:#2},%d0	|inst not forced - use fpcr prec
 frcovf_rnd:
 
-| The 881/882 does not set inex2 for the following case, so the 
+| The 881/882 does not set inex2 for the following case, so the
 | line is commented out to be compatible with 881/882
 |	tst.b	%d0
 |	beq.b	frcovf_x
@@ -785,7 +785,7 @@
 
 |frcovf_x:
 	bsrl	ovf_res			|get correct result based on
-|					;round precision/mode.  This 
+|					;round precision/mode.  This
 |					;sets FPSR_CC correctly
 |					;returns in external format
 	bfclr	WBTEMP_SGN(%a6){#0:#8}
@@ -796,7 +796,7 @@
 | Inst is fadd.
 |
 wrap_add:
-	cmpb	#0xff,DNRM_FLG(%a6) |if both ops denorm, 
+	cmpb	#0xff,DNRM_FLG(%a6) |if both ops denorm,
 	beq	fix_stk		 |restore to fpu
 |
 | One of the ops is denormalized.  Test for wrap condition
@@ -964,14 +964,14 @@
 | and aovfl, and clr the mantissa (incorrectly set by the
 | round routine.)
 |
-	orl	#inf_mask+ovfl_inx_mask,USER_FPSR(%a6)	
+	orl	#inf_mask+ovfl_inx_mask,USER_FPSR(%a6)
 	clrl	4(%a0)
 	bra	frcfpnr
 |
 | Inst is fsub.
 |
 wrap_sub:
-	cmpb	#0xff,DNRM_FLG(%a6) |if both ops denorm, 
+	cmpb	#0xff,DNRM_FLG(%a6) |if both ops denorm,
 	beq	fix_stk		 |restore to fpu
 |
 | One of the ops is denormalized.  Test for wrap condition
@@ -1145,14 +1145,14 @@
 | and aovfl, and clr the mantissa (incorrectly set by the
 | round routine.)
 |
-	orl	#inf_mask+ovfl_inx_mask,USER_FPSR(%a6)	
+	orl	#inf_mask+ovfl_inx_mask,USER_FPSR(%a6)
 	clrl	4(%a0)
 	bra	frcfpnr
 |
 | Inst is fcmp.
 |
 wrap_cmp:
-	cmpb	#0xff,DNRM_FLG(%a6) |if both ops denorm, 
+	cmpb	#0xff,DNRM_FLG(%a6) |if both ops denorm,
 	beq	fix_stk		 |restore to fpu
 |
 | One of the ops is denormalized.  Test for wrap condition
@@ -1190,7 +1190,7 @@
 | Inst is fmul.
 |
 wrap_mul:
-	cmpb	#0xff,DNRM_FLG(%a6) |if both ops denorm, 
+	cmpb	#0xff,DNRM_FLG(%a6) |if both ops denorm,
 	beq	force_unf	|force an underflow (really!)
 |
 | One of the ops is denormalized.  Test for wrap condition
@@ -1213,9 +1213,9 @@
 	bfexts	ETEMP_EX(%a6){#1:#15},%d1	|get src exp (always neg)
 	addl	%d1,%d0			|subtract src from dest
 	bgt	fix_stk
-	
+
 |
-| This code handles the case of the instruction resulting in 
+| This code handles the case of the instruction resulting in
 | an underflow condition.
 |
 force_unf:
@@ -1245,7 +1245,7 @@
 	bfextu	FPCR_MODE(%a6){#0:#2},%d0	|inst not forced - use fpcr prec
 frcunf_rnd:
 	bsrl	unf_sub			|get correct result based on
-|					;round precision/mode.  This 
+|					;round precision/mode.  This
 |					;sets FPSR_CC correctly
 	bfclr	WBTEMP_SGN(%a6){#0:#8}	|convert back to IEEE ext format
 	beqs	frcfpn
@@ -1277,14 +1277,14 @@
 	bclrb	#sign_bit,WBTEMP_EX(%a6)
 	sne	WBTEMP_SGN(%a6)
 	bsrl	ovf_res			|get correct result based on
-|					;round precision/mode.  This 
+|					;round precision/mode.  This
 |					;sets FPSR_CC correctly
 	bfclr	WBTEMP_SGN(%a6){#0:#8}	|convert back to IEEE ext format
 	beqs	frcfpn_clr
 	bsetb	#sign_bit,WBTEMP_EX(%a6)
 frcfpn_clr:
 	orl	#ovfinx_mask,USER_FPSR(%a6)
-| 
+|
 | Perform the write.
 |
 frcfpn:
@@ -1301,9 +1301,9 @@
 	cmpib	#0,%d0
 	beqs	frc0_dst
 	cmpib	#1,%d0
-	beqs	frc1_dst 
+	beqs	frc1_dst
 	cmpib	#2,%d0
-	beqs	frc2_dst 
+	beqs	frc2_dst
 frc3_dst:
 	movel	WBTEMP_EX(%a6),USER_FP3(%a6)
 	movel	WBTEMP_HI(%a6),USER_FP3+4(%a6)
@@ -1337,7 +1337,7 @@
 	beqs	fmoveinc		|enabled, force restore
 	btstb	#snan_bit,FPCR_ENABLE(%a6) |and don't overwrite
 	beqs	fmoveinc		|the dest
-	movel	ETEMP_EX(%a6),FPTEMP_EX(%a6)	|set up fptemp sign for 
+	movel	ETEMP_EX(%a6),FPTEMP_EX(%a6)	|set up fptemp sign for
 |						;snan handler
 	tstb	ETEMP(%a6)		|check for negative
 	blts	snan_neg
@@ -1361,7 +1361,7 @@
 	cmpib	#0x60,%d0			|check if stag is NaN
 	bnes	fminc_czero
 	orl	#nan_mask,USER_FPSR(%a6) |if nan, nothing yet has set NaN
-	movel	ETEMP_EX(%a6),FPTEMP_EX(%a6)	|set up fptemp sign for 
+	movel	ETEMP_EX(%a6),FPTEMP_EX(%a6)	|set up fptemp sign for
 |						;snan handler
 	tstw	LOCAL_EX(%a0)		|check sign
 	bges	fminc_con
@@ -1389,9 +1389,9 @@
 	cmpib	#0,%d0
 	beqs	fp0_dst
 	cmpib	#1,%d0
-	beqs	fp1_dst 
+	beqs	fp1_dst
 	cmpib	#2,%d0
-	beqs	fp2_dst 
+	beqs	fp2_dst
 fp3_dst:
 	movel	ETEMP_EX(%a6),USER_FP3(%a6)
 	movel	ETEMP_HI(%a6),USER_FP3+4(%a6)
@@ -1421,20 +1421,20 @@
 	beq	pack_out	|else it is norm or denorm
 	bra	mv_out
 
-	
+
 |
 |	MOVE OUT
 |
 
 mv_tbl:
 	.long	li
-	.long 	sgp
-	.long 	xp
-	.long 	mvout_end	|should never be taken
-	.long 	wi
-	.long 	dp
-	.long 	bi
-	.long 	mvout_end	|should never be taken
+	.long	sgp
+	.long	xp
+	.long	mvout_end	|should never be taken
+	.long	wi
+	.long	dp
+	.long	bi
+	.long	mvout_end	|should never be taken
 mv_out:
 	bfextu	CMDREG1B(%a6){#3:#3},%d1	|put source specifier in d1
 	leal	mv_tbl,%a0
@@ -1442,7 +1442,7 @@
 	jmp	(%a0)
 
 |
-| This exit is for move-out to memory.  The aunfl bit is 
+| This exit is for move-out to memory.  The aunfl bit is
 | set if the result is inex and unfl is signalled.
 |
 mvout_end:
@@ -1466,7 +1466,7 @@
 mvout_con:
 	rts
 |
-| This exit is for move-out to int register.  The aunfl bit is 
+| This exit is for move-out to int register.  The aunfl bit is
 | not set in any case for this move.
 |
 mvouti_end:
@@ -1496,7 +1496,7 @@
 	fmovemx ETEMP(%a6),%fp0-%fp0
 	fcmpd	#0x41dfffffffc00000,%fp0
 | 41dfffffffc00000 in dbl prec = 401d0000fffffffe00000000 in ext prec
-	fbge	lo_plrg	
+	fbge	lo_plrg
 	fcmpd	#0xc1e0000000000000,%fp0
 | c1e0000000000000 in dbl prec = c01e00008000000000000000 in ext prec
 	fble	lo_nlrg
@@ -1541,7 +1541,7 @@
 	fmovemx ETEMP(%a6),%fp0-%fp0
 	fcmps	#0x46fffe00,%fp0
 | 46fffe00 in sgl prec = 400d0000fffe000000000000 in ext prec
-	fbge	wo_plrg	
+	fbge	wo_plrg
 	fcmps	#0xc7000000,%fp0
 | c7000000 in sgl prec = c00e00008000000000000000 in ext prec
 	fble	wo_nlrg
@@ -1586,7 +1586,7 @@
 	fmovemx ETEMP(%a6),%fp0-%fp0
 	fcmps	#0x42fe0000,%fp0
 | 42fe0000 in sgl prec = 40050000fe00000000000000 in ext prec
-	fbge	by_plrg	
+	fbge	by_plrg
 	fcmps	#0xc3000000,%fp0
 | c3000000 in sgl prec = c00600008000000000000000 in ext prec
 	fble	by_nlrg
@@ -1629,7 +1629,7 @@
 int_dnrm:
 	movel	#0,L_SCR1(%a6)	| initialize result to 0
 	bfextu	FPCR_MODE(%a6){#2:#2},%d1	| d1 is the rounding mode
-	cmpb	#2,%d1		
+	cmpb	#2,%d1
 	bmis	int_inx		| if RN or RZ, done
 	bnes	int_rp		| if RP, continue below
 	tstw	ETEMP(%a6)	| RM: store -1 in L_SCR1 if src is negative
@@ -1642,7 +1642,7 @@
 	bmis	int_inx		| otherwise, result is 0
 	lea	L_SCR1(%a6),%a1	| a1 is address of L_SCR1
 	addal	%d0,%a1		| offset by destination width -1
-	subal	#1,%a1		
+	subal	#1,%a1
 	bsetb	#0,(%a1)		| set low bit at a1 address
 int_inx:
 	oril	#inx2a_mask,USER_FPSR(%a6)
@@ -1656,10 +1656,10 @@
 
 	oril	#opaop_mask,USER_FPSR(%a6)
 |				;fall through to perform int_wrt
-int_wrt: 
+int_wrt:
 	movel	EXC_EA(%a6),%a1	|load destination address
 	tstl	%a1		|check to see if it is a dest register
-	beqs	wrt_dn		|write data register 
+	beqs	wrt_dn		|write data register
 	lea	L_SCR1(%a6),%a0	|point to supervisor source address
 	bsrl	mem_write
 	bra	mvouti_end
@@ -1680,7 +1680,7 @@
 sz_con:
 	movel	%d0,%d1		|reg_dest expects size:reg in d1
 	bsrl	reg_dest	|load proper data register
-	bra	mvouti_end 
+	bra	mvouti_end
 xp:
 	lea	ETEMP(%a6),%a0
 	bclrb	#sign_bit,LOCAL_EX(%a0)
@@ -1718,7 +1718,7 @@
 	blt	dp_under
 	cmpw	2(%a1),%d0
 	bgt	dp_over
-	
+
 	movel	#2,%d0		|set destination format to double
 |				;fall through to do_fp
 |
@@ -1726,10 +1726,10 @@
 	bfextu	FPCR_MODE(%a6){#2:#2},%d1	|rnd mode in d1
 	swap	%d0			|rnd prec in upper word
 	addl	%d0,%d1			|d1 has PREC/MODE info
-	
-	clrl	%d0			|clear g,r,s 
 
-	bsrl	round			|round 
+	clrl	%d0			|clear g,r,s
+
+	bsrl	round			|round
 
 	movel	%a0,%a1
 	movel	EXC_EA(%a6),%a0
@@ -1764,12 +1764,12 @@
 	bsrl	dest_ext	|store to memory
 	bsetb	#unfl_bit,FPSR_EXCEPT(%a6)
 	bra	mvout_end
-	
+
 sp_under:
 	bsetb	#etemp15_bit,STAG(%a6)
 
 	cmpw	4(%a1),%d0
-	blts	sp_catas	|catastrophic underflow case	
+	blts	sp_catas	|catastrophic underflow case
 
 	movel	#1,%d0		|load in round precision
 	movel	#sgl_thresh,%d1	|load in single denorm threshold
@@ -1784,9 +1784,9 @@
 
 	cmpw	4(%a1),%d0
 	blts	dp_catas	|catastrophic underflow case
-		
+
 	movel	#dbl_thresh,%d1	|load in double precision threshold
-	movel	#2,%d0		
+	movel	#2,%d0
 	bsrl	dpspdnrm	|expects d1 to have proper
 |				;denorm threshold
 |				;expects d0 to have round precision
@@ -1813,11 +1813,11 @@
 
 	movel	%a0,%a1		|a1 has the operand input
 	movel	EXC_EA(%a6),%a0	|a0 has the destination pointer
-	
+
 	bsrl	dest_sgl	|store the result
 	oril	#unfinx_mask,USER_FPSR(%a6)
 	bra	mvout_end
-	
+
 dp_catas:
 | Temp fix for z bit set in unf_sub
 	movel	USER_FPSR(%a6),-(%a7)
@@ -1828,12 +1828,12 @@
 	movel	(%a7)+,USER_FPSR(%a6)
 
 	movel	#1,%d0
-	subw	%d0,LOCAL_EX(%a0) |account for difference between 
+	subw	%d0,LOCAL_EX(%a0) |account for difference between
 |				;denorm/norm bias
 
 	movel	%a0,%a1		|a1 has the operand input
 	movel	EXC_EA(%a6),%a0	|a0 has the destination pointer
-	
+
 	bsrl	dest_dbl	|store the result
 	oril	#unfinx_mask,USER_FPSR(%a6)
 	bra	mvout_end
@@ -1880,7 +1880,7 @@
 	bra	mvout_end
 
 |
-| 	DPSPDNRM
+|	DPSPDNRM
 |
 | This subroutine takes an extended normalized number and denormalizes
 | it to the given round precision. This subroutine also decrements
@@ -1894,7 +1894,7 @@
 |
 | Output: (In the format for dest_sgl or dest_dbl)
 |	 a0   points to the destination
-|   	 a1   points to the operand
+|	 a1   points to the operand
 |
 | Exceptions: Reports inexact 2 exception by setting USER_FPSR bits
 |
@@ -1905,7 +1905,7 @@
 
 	bfextu	FPCR_MODE(%a6){#2:#2},%d1 |get rounding mode
 	swap	%d1
-	movew	2(%a7),%d1	|set rounding precision 
+	movew	2(%a7),%d1	|set rounding precision
 	swap	%d1		|at this point d1 has PREC/MODE info
 	bsrl	round		|round result, sets the inex bit in
 |				;USER_FPSR if needed
@@ -1952,20 +1952,20 @@
 	.long	p_dyd7
 
 pack_out:
- 	leal	p_movet,%a0	|load jmp table address
+	leal	p_movet,%a0	|load jmp table address
 	movew	STAG(%a6),%d0	|get source tag
 	bfextu	%d0{#16:#3},%d0	|isolate source bits
 	movel	(%a0,%d0.w*4),%a0	|load a0 with routine label for tag
 	jmp	(%a0)		|go to the routine
 
 p_write:
-	movel	#0x0c,%d0 	|get byte count
+	movel	#0x0c,%d0	|get byte count
 	movel	EXC_EA(%a6),%a1	|get the destination address
-	bsr 	mem_write	|write the user's destination
+	bsr	mem_write	|write the user's destination
 	moveb	#0,CU_SAVEPC(%a6) |set the cu save pc to all 0's
 
 |
-| Also note that the dtag must be set to norm here - this is because 
+| Also note that the dtag must be set to norm here - this is because
 | the 040 uses the dtag to execute the correct microcode.
 |
         bfclr    DTAG(%a6){#0:#3}  |set dtag to norm
diff -Nru a/arch/m68k/fpsp040/round.S b/arch/m68k/fpsp040/round.S
--- a/arch/m68k/fpsp040/round.S	Sun May 16 01:18:35 2004
+++ b/arch/m68k/fpsp040/round.S	Sun May 16 01:18:35 2004
@@ -8,8 +8,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 |ROUND	idnt    2,1 | Motorola 040 Floating Point Software Package
@@ -21,7 +21,7 @@
 |
 |	round --- round result according to precision/mode
 |
-|	a0 points to the input operand in the internal extended format 
+|	a0 points to the input operand in the internal extended format
 |	d1(high word) contains rounding precision:
 |		ext = $0000xxxx
 |		sgl = $0001xxxx
@@ -44,15 +44,15 @@
 
 	.global	round
 round:
-| If g=r=s=0 then result is exact and round is done, else set 
-| the inex flag in status reg and continue.  
+| If g=r=s=0 then result is exact and round is done, else set
+| the inex flag in status reg and continue.
 |
-	bsrs	ext_grs			|this subroutine looks at the 
-|					:rounding precision and sets 
+	bsrs	ext_grs			|this subroutine looks at the
+|					:rounding precision and sets
 |					;the appropriate g-r-s bits.
 	tstl	%d0			|if grs are zero, go force
 	bne	rnd_cont		|lower bits to zero for size
-	
+
 	swap	%d1			|set up d1.w for round prec.
 	bra	truncate
 
@@ -79,7 +79,7 @@
 |	If sign of fp number = 0 (positive), then add 1 to l.
 |
 rnd_plus:
-	swap 	%d1			|set up d1 for round prec.
+	swap	%d1			|set up d1 for round prec.
 	tstb	LOCAL_SGN(%a0)		|check for sign
 	bmi	truncate		|if positive then truncate
 	movel	#0xffffffff,%d0		|force g,r,s to be all f's
@@ -92,8 +92,8 @@
 |	If sign of fp number = 1 (negative), then add 1 to l.
 |
 rnd_mnus:
-	swap 	%d1			|set up d1 for round prec.
-	tstb	LOCAL_SGN(%a0)		|check for sign	
+	swap	%d1			|set up d1 for round prec.
+	tstb	LOCAL_SGN(%a0)		|check for sign
 	bpl	truncate		|if negative then truncate
 	movel	#0xffffffff,%d0		|force g,r,s to be all f's
 	lea	add_to_l,%a1
@@ -104,7 +104,7 @@
 |
 |	Always truncate.
 rnd_zero:
-	swap 	%d1			|set up d1 for round prec.
+	swap	%d1			|set up d1 for round prec.
 	bra	truncate
 |
 |
@@ -114,7 +114,7 @@
 |	Note that this will round to even in case of a tie.
 |
 rnd_near:
-	swap 	%d1			|set up d1 for round prec.
+	swap	%d1			|set up d1 for round prec.
 	asll	#1,%d0			|shift g-bit to c-bit
 	bcc	truncate		|if (g=1) then
 	lea	add_to_l,%a1
@@ -125,11 +125,11 @@
 |	ext_grs --- extract guard, round and sticky bits
 |
 | Input:	d1 =		PREC:ROUND
-| Output:  	d0{31:29}=	guard, round, sticky
+| Output:	d0{31:29}=	guard, round, sticky
 |
 | The ext_grs extract the guard/round/sticky bits according to the
 | selected rounding precision. It is called by the round subroutine
-| only.  All registers except d0 are kept intact. d0 becomes an 
+| only.  All registers except d0 are kept intact. d0 becomes an
 | updated guard,round,sticky in d0{31:29}
 |
 | Notes: the ext_grs uses the round PREC, and therefore has to swap d1
@@ -140,7 +140,7 @@
 	cmpiw	#0,%d1
 	bnes	sgl_or_dbl
 	bras	end_ext_grs
- 
+
 sgl_or_dbl:
 	moveml	%d2/%d3,-(%a7)		|make some temp registers
 	cmpiw	#1,%d1
@@ -150,19 +150,19 @@
 	movel	#30,%d2			|of the sgl prec. limits
 	lsll	%d2,%d3			|shift g-r bits to MSB of d3
 	movel	LOCAL_HI(%a0),%d2		|get word 2 for s-bit test
-	andil	#0x0000003f,%d2		|s bit is the or of all other 
+	andil	#0x0000003f,%d2		|s bit is the or of all other
 	bnes	st_stky			|bits to the right of g-r
 	tstl	LOCAL_LO(%a0)		|test lower mantissa
 	bnes	st_stky			|if any are set, set sticky
 	tstl	%d0			|test original g,r,s
 	bnes	st_stky			|if any are set, set sticky
 	bras	end_sd			|if words 3 and 4 are clr, exit
-grs_dbl:    
+grs_dbl:
 	bfextu	LOCAL_LO(%a0){#21:#2},%d3	|dbl-prec. g-r are 2 bits right
 	movel	#30,%d2			|of the dbl prec. limits
 	lsll	%d2,%d3			|shift g-r bits to the MSB of d3
 	movel	LOCAL_LO(%a0),%d2		|get lower mantissa  for s-bit test
-	andil	#0x000001ff,%d2		|s bit is the or-ing of all 
+	andil	#0x000001ff,%d2		|s bit is the or-ing of all
 	bnes	st_stky			|other bits to the right of g-r
 	tstl	%d0			|test word original g,r,s
 	bnes	st_stky			|if any are set, set sticky
@@ -269,20 +269,20 @@
 |
 |	NORMALIZE
 |
-| These routines (nrm_zero & nrm_set) normalize the unnorm.  This 
-| is done by shifting the mantissa left while decrementing the 
+| These routines (nrm_zero & nrm_set) normalize the unnorm.  This
+| is done by shifting the mantissa left while decrementing the
 | exponent.
 |
-| NRM_SET shifts and decrements until there is a 1 set in the integer 
+| NRM_SET shifts and decrements until there is a 1 set in the integer
 | bit of the mantissa (msb in d1).
 |
-| NRM_ZERO shifts and decrements until there is a 1 set in the integer 
-| bit of the mantissa (msb in d1) unless this would mean the exponent 
-| would go less than 0.  In that case the number becomes a denorm - the 
-| exponent (d0) is set to 0 and the mantissa (d1 & d2) is not 
+| NRM_ZERO shifts and decrements until there is a 1 set in the integer
+| bit of the mantissa (msb in d1) unless this would mean the exponent
+| would go less than 0.  In that case the number becomes a denorm - the
+| exponent (d0) is set to 0 and the mantissa (d1 & d2) is not
 | normalized.
 |
-| Note that both routines have been optimized (for the worst case) and 
+| Note that both routines have been optimized (for the worst case) and
 | therefore do not have the easy to follow decrement/shift loop.
 |
 |	NRM_ZERO
@@ -304,34 +304,34 @@
 	.global	nrm_zero
 nrm_zero:
 	movew	LOCAL_EX(%a0),%d0
-	cmpw   #64,%d0          |see if exp > 64 
+	cmpw   #64,%d0          |see if exp > 64
 	bmis	d0_less
-	bsr	nrm_set		|exp > 64 so exp won't exceed 0 
+	bsr	nrm_set		|exp > 64 so exp won't exceed 0
 	rts
 d0_less:
 	moveml	%d2/%d3/%d5/%d6,-(%a7)
 	movel	LOCAL_HI(%a0),%d1
 	movel	LOCAL_LO(%a0),%d2
 
-	bfffo	%d1{#0:#32},%d3	|get the distance to the first 1 
+	bfffo	%d1{#0:#32},%d3	|get the distance to the first 1
 |				;in ms mant
 	beqs	ms_clr		|branch if no bits were set
 	cmpw	%d3,%d0		|of X>Y
-	bmis	greater		|then exp will go past 0 (neg) if 
+	bmis	greater		|then exp will go past 0 (neg) if
 |				;it is just shifted
 	bsr	nrm_set		|else exp won't go past 0
 	moveml	(%a7)+,%d2/%d3/%d5/%d6
-	rts	
+	rts
 greater:
 	movel	%d2,%d6		|save ls mant in d6
 	lsll	%d0,%d2		|shift ls mant by count
 	lsll	%d0,%d1		|shift ms mant by count
 	movel	#32,%d5
-	subl	%d0,%d5		|make op a denorm by shifting bits 
-	lsrl	%d5,%d6		|by the number in the exp, then 
+	subl	%d0,%d5		|make op a denorm by shifting bits
+	lsrl	%d5,%d6		|by the number in the exp, then
 |				;set exp = 0.
 	orl	%d6,%d1		|shift the ls mant bits into the ms mant
-	movel	#0,%d0		|same as if decremented exp to 0 
+	movel	#0,%d0		|same as if decremented exp to 0
 |				;while shifting
 	movew	%d0,LOCAL_EX(%a0)
 	movel	%d1,LOCAL_HI(%a0)
@@ -380,7 +380,7 @@
 	rts
 
 |
-| We get here if ms mant was = 0, and we assume ls mant has bits 
+| We get here if ms mant was = 0, and we assume ls mant has bits
 | set (otherwise this would have been tagged a zero not a denorm).
 |
 lower:
@@ -400,26 +400,26 @@
 |
 |	Used by underflow.
 |
-| Input: 
+| Input:
 |	a0	 points to the operand to be denormalized
 |		 (in the internal extended format)
-|		 
-|	d0: 	 rounding precision
+|
+|	d0:	 rounding precision
 | Output:
 |	a0	 points to the denormalized result
 |		 (in the internal extended format)
 |
-|	d0 	is guard,round,sticky
+|	d0	is guard,round,sticky
 |
-| d0 comes into this routine with the rounding precision. It 
-| is then loaded with the denormalized exponent threshold for the 
+| d0 comes into this routine with the rounding precision. It
+| is then loaded with the denormalized exponent threshold for the
 | rounding precision.
 |
 
 	.global	denorm
 denorm:
 	btstb	#6,LOCAL_EX(%a0)	|check for exponents between $7fff-$4000
-	beqs	no_sgn_ext	
+	beqs	no_sgn_ext
 	bsetb	#7,LOCAL_EX(%a0)	|sign extend if it is so
 no_sgn_ext:
 
@@ -442,7 +442,7 @@
 	movel	%d1,%d0		|copy d1 into d0
 	subw	LOCAL_EX(%a0),%d0	|diff = threshold - exp
 	cmpw	#67,%d0		|if diff > 67 (mant + grs bits)
-	bpls	chk_stky	|then branch (all bits would be 
+	bpls	chk_stky	|then branch (all bits would be
 |				; shifted off in denorm routine)
 	clrl	%d0		|else clear the sticky flag
 	bsr	dnrm_lp		|denormalize the number
@@ -455,7 +455,7 @@
 	movel	%d1,%d0		|copy d1 into d0
 	subw	LOCAL_EX(%a0),%d0	|diff = threshold - exp
 	cmpw	#67,%d0		|if diff > 67 (mant + grs bits)
-	bpls	chk_stky	|then branch (all bits would be 
+	bpls	chk_stky	|then branch (all bits would be
 |				; shifted off in denorm routine)
 	clrl	%d0		|else clear the sticky flag
 	bsr	dnrm_lp		|denormalize the number
@@ -474,7 +474,7 @@
 	movel	#0x20000000,%d0	|set sticky bit in return value
 clr_mant:
 	movew	%d1,LOCAL_EX(%a0)		|load exp with threshold
-	movel	#0,LOCAL_HI(%a0) 	|set d1 = 0 (ms mantissa)
+	movel	#0,LOCAL_HI(%a0)	|set d1 = 0 (ms mantissa)
 	movel	#0,LOCAL_LO(%a0)		|set d2 = 0 (ms mantissa)
 	rts
 dnrm_inex:
@@ -487,7 +487,7 @@
 |
 | Input:
 |	a0		points to the operand to be denormalized
-|	d0{31:29} 	initial guard,round,sticky
+|	d0{31:29}	initial guard,round,sticky
 |	d1{15:0}	denormalization threshold
 | Output:
 |	a0		points to the denormalized operand
@@ -496,7 +496,7 @@
 |
 | The LOCAL_LO and LOCAL_GRS parts of the value are copied to FP_SCR2
 | so that bfext can be used to extract the new low part of the mantissa.
-| Dnrm_lp can be called with a0 pointing to ETEMP or WBTEMP and there 
+| Dnrm_lp can be called with a0 pointing to ETEMP or WBTEMP and there
 | is no LOCAL_GRS scratch word following it on the fsave frame.
 |
 	.global	dnrm_lp
@@ -515,8 +515,8 @@
 	movel	%d1,%d0			|copy the denorm threshold
 	subw	LOCAL_EX(%a0),%d1		|d1 = threshold - uns exponent
 	bles	no_lp			|d1 <= 0
-	cmpw	#32,%d1			
-	blts	case_1			|0 = d1 < 32 
+	cmpw	#32,%d1
+	blts	case_1			|0 = d1 < 32
 	cmpw	#64,%d1
 	blts	case_2			|32 <= d1 < 64
 	bra	case_3			|d1 >= 64
@@ -542,7 +542,7 @@
 	movel	%d2,LOCAL_HI(%a0)		|store new LOCAL_HI
 	movel	%d1,LOCAL_LO(%a0)		|store new LOCAL_LO
 	clrb	%d1
-	bftst	%d0{#2:#30}	
+	bftst	%d0{#2:#30}
 	beqs	c1nstky
 	bsetl	#rnd_stky_bit,%d0
 	st	%d1
@@ -585,7 +585,7 @@
 	movel	FP_SCR2+LOCAL_GRS(%a6),%d2	|restore original g,r,s
 	andil	#0xe0000000,%d2		|clear all but G,R,S
 	tstl	%d2			|test if original G,R,S are clear
-	beqs	clear_grs		
+	beqs	clear_grs
 	orl	#0x20000000,%d0		|set sticky bit in d0
 clear_grs:
 	andil	#0xe0000000,%d0		|get rid of all but G,R,S
@@ -621,7 +621,7 @@
 	bfextu	%d0{#2:#30},%d1
 	andil	#0xc0000000,%d0
 	bras	c3com
-	
+
 sixty_five:
 	movel	LOCAL_HI(%a0),%d0
 	bfextu	%d0{#1:#31},%d1
diff -Nru a/arch/m68k/fpsp040/sacos.S b/arch/m68k/fpsp040/sacos.S
--- a/arch/m68k/fpsp040/sacos.S	Sun May 16 01:18:34 2004
+++ b/arch/m68k/fpsp040/sacos.S	Sun May 16 01:18:35 2004
@@ -12,7 +12,7 @@
 |
 |	Accuracy and Monotonicity: The returned result is within 3 ulps in
 |		64 significant bit, i.e. within 0.5001 ulp to 53 bits if the
-|		result is subsequently rounded to double precision. The 
+|		result is subsequently rounded to double precision. The
 |		result is provably monotonic in double precision.
 |
 |	Speed: The program sCOS takes approximately 310 cycles.
@@ -38,8 +38,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 |SACOS	idnt	2,1 | Motorola 040 Floating Point Software Package
@@ -74,17 +74,17 @@
 |--ACOS(X) = 2 * ATAN(	SQRT( (1-X)/(1+X) )	)
 
 	fmoves		#0x3F800000,%fp1
-	faddx		%fp0,%fp1	 	| ...1+X
-	fnegx		%fp0	 	| ... -X
+	faddx		%fp0,%fp1		| ...1+X
+	fnegx		%fp0		| ... -X
 	fadds		#0x3F800000,%fp0	| ...1-X
-	fdivx		%fp1,%fp0	 	| ...(1-X)/(1+X)
+	fdivx		%fp1,%fp0		| ...(1-X)/(1+X)
 	fsqrtx		%fp0		| ...SQRT((1-X)/(1+X))
 	fmovemx	%fp0-%fp0,(%a0)	| ...overwrite input
 	movel		%d1,-(%sp)	|save original users fpcr
 	clrl		%d1
 	bsr		satan		| ...ATAN(SQRT([1-X]/[1+X]))
 	fmovel		(%sp)+,%fpcr	|restore users exceptions
-	faddx		%fp0,%fp0	 	| ...2 * ATAN( STUFF )
+	faddx		%fp0,%fp0		| ...2 * ATAN( STUFF )
 	bra		t_frcinx
 
 ACOSBIG:
@@ -110,6 +110,6 @@
 ACOSP1:
 	fmovel		%d1,%FPCR
 	fmoves		#0x00000000,%fp0
-	rts				|Facos ; of +1 is exact	
+	rts				|Facos ; of +1 is exact
 
 	|end
diff -Nru a/arch/m68k/fpsp040/sasin.S b/arch/m68k/fpsp040/sasin.S
--- a/arch/m68k/fpsp040/sasin.S	Sun May 16 01:18:35 2004
+++ b/arch/m68k/fpsp040/sasin.S	Sun May 16 01:18:35 2004
@@ -12,7 +12,7 @@
 |
 |	Accuracy and Monotonicity: The returned result is within 3 ulps in
 |		64 significant bit, i.e. within 0.5001 ulp to 53 bits if the
-|		result is subsequently rounded to double precision. The 
+|		result is subsequently rounded to double precision. The
 |		result is provably monotonic in double precision.
 |
 |	Speed: The program sASIN takes approximately 310 cycles.
@@ -38,8 +38,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 |SASIN	idnt	2,1 | Motorola 040 Floating Point Software Package
@@ -80,7 +80,7 @@
 	fmulx		%fp2,%fp1		| ...(1+X)(1-X)
 	fmovemx	(%a7)+,%fp2-%fp2
 	fsqrtx		%fp1		| ...SQRT([1-X][1+X])
-	fdivx		%fp1,%fp0	 	| ...X/SQRT([1-X][1+X])
+	fdivx		%fp1,%fp0		| ...X/SQRT([1-X][1+X])
 	fmovemx	%fp0-%fp0,(%a0)
 	bsr		satan
 	bra		t_frcinx
@@ -97,7 +97,7 @@
 	andil		#0x80000000,%d0	| ...SIGN BIT OF X
 	oril		#0x3F800000,%d0	| ...+-1 IN SGL FORMAT
 	movel		%d0,-(%sp)	| ...push SIGN(X) IN SGL-FMT
-	fmovel		%d1,%FPCR		
+	fmovel		%d1,%FPCR
 	fmuls		(%sp)+,%fp0
 	bra		t_frcinx
 
diff -Nru a/arch/m68k/fpsp040/satan.S b/arch/m68k/fpsp040/satan.S
--- a/arch/m68k/fpsp040/satan.S	Sun May 16 01:18:35 2004
+++ b/arch/m68k/fpsp040/satan.S	Sun May 16 01:18:35 2004
@@ -43,8 +43,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 |satan	idnt	2,1 | Motorola 040 Floating Point Software Package
@@ -52,7 +52,7 @@
 	|section	8
 
 #include "fpsp.h"
-	
+
 BOUNDS1:	.long 0x3FFB8000,0x4002FFFF
 
 ONE:	.long 0x3F800000
@@ -322,7 +322,7 @@
 |--THE REASON FOR THIS REARRANGEMENT IS TO MAKE THE INDEPENDENT
 |--PARTS A1*U*V AND (A2 + ... STUFF) MORE LOAD-BALANCED
 
-	
+
 	fmovex		%fp0,%fp1
 	fmulx		%fp1,%fp1
 	fmoved		ATANA3,%fp2
@@ -332,7 +332,7 @@
 	faddd		ATANA2,%fp2	| ...A2+V*(A3+V)
 	fmuld		ATANA1,%fp1	| ...A1*U*V
 	fmulx		%fp2,%fp1		| ...A1*U*V*(A2+V*(A3+V))
-	
+
 	faddx		%fp1,%fp0		| ...ATAN(U), FP1 RELEASED
 	fmovel		%d1,%FPCR		|restore users exceptions
 	faddx		ATANF(%a6),%fp0	| ...ATAN(X)
@@ -356,7 +356,7 @@
 |--COMPUTE POLYNOMIAL
 	fmulx		%fp0,%fp0	| ...FP0 IS Y = X*X
 
-	
+
 	movew		#0x0000,XDCARE(%a6)
 
 	fmovex		%fp0,%fp1
@@ -381,7 +381,7 @@
 	fmulx		X(%a6),%fp0		| ...X*Y
 
 	faddx		%fp2,%fp1		| ...[B1+Z*(B3+Z*B5)]+[Y*(B2+Z*(B4+Z*B6))]
-	
+
 
 	fmulx		%fp1,%fp0	| ...X*Y*([B1+Z*(B3+Z*B5)]+[Y*(B2+Z*(B4+Z*B6))])
 
@@ -413,7 +413,7 @@
 	fmoves		#0xBF800000,%fp1	| ...LOAD -1
 	fdivx		%fp0,%fp1		| ...FP1 IS -1/X
 
-	
+
 |--DIVIDE IS STILL CRANKING
 
 	fmovex		%fp1,%fp0		| ...FP0 IS X'
@@ -439,14 +439,14 @@
 	fmulx		X(%a6),%fp0		| ...X'*Y
 
 	faddx		%fp2,%fp1		| ...[Y*(C2+Z*C4)]+[C1+Z*(C3+Z*C5)]
-	
+
 
 	fmulx		%fp1,%fp0		| ...X'*Y*([B1+Z*(B3+Z*B5)]
 |					...	+[Y*(B2+Z*(B4+Z*B6))])
 	faddx		X(%a6),%fp0
 
 	fmovel		%d1,%FPCR		|restore users exceptions
-	
+
 	btstb		#7,(%a0)
 	beqs		pos_big
 
@@ -474,5 +474,5 @@
 	fmovel		%d1,%fpcr
 	fsubx		PTINY,%fp0
 	bra		t_frcinx
-	
+
 	|end
diff -Nru a/arch/m68k/fpsp040/satanh.S b/arch/m68k/fpsp040/satanh.S
--- a/arch/m68k/fpsp040/satanh.S	Sun May 16 01:18:33 2004
+++ b/arch/m68k/fpsp040/satanh.S	Sun May 16 01:18:33 2004
@@ -13,7 +13,7 @@
 |
 |	Accuracy and Monotonicity: The returned result is within 3 ulps in
 |		64 significant bit, i.e. within 0.5001 ulp to 53 bits if the
-|		result is subsequently rounded to double precision. The 
+|		result is subsequently rounded to double precision. The
 |		result is provably monotonic in double precision.
 |
 |	Speed: The program satanh takes approximately 270 cycles.
@@ -33,7 +33,7 @@
 |	3. If |X| > 1, go to 5.
 |
 |	4. (|X| = 1) Generate infinity with an appropriate sign and
-|		divide-by-zero by	
+|		divide-by-zero by
 |		sgn := sign(X)
 |		atan(X) := sgn / (+0).
 |		Exit.
@@ -45,8 +45,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 |satanh	idnt	2,1 | Motorola 040 Floating Point Software Package
diff -Nru a/arch/m68k/fpsp040/scale.S b/arch/m68k/fpsp040/scale.S
--- a/arch/m68k/fpsp040/scale.S	Sun May 16 01:18:36 2004
+++ b/arch/m68k/fpsp040/scale.S	Sun May 16 01:18:36 2004
@@ -9,7 +9,7 @@
 |	The entry point sscale is called from do_func to emulate
 |	the fscale unimplemented instruction.
 |
-|	Input: Double-extended destination operand in FPTEMP, 
+|	Input: Double-extended destination operand in FPTEMP,
 |		double-extended source operand in ETEMP.
 |
 |	Output: The function returns scale(X,Y) to fp0.
@@ -17,12 +17,12 @@
 |	Modifies: fp0.
 |
 |	Algorithm:
-|		
+|
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 |SCALE    idnt    2,1 | Motorola 040 Floating Point Software Package
@@ -147,7 +147,7 @@
 src_neg:
 	addl		%d0,%d1		|add src to dest
 	beqs		denorm		|if zero, result is denorm
-	blts		fix_dnrm	|if negative, result is 
+	blts		fix_dnrm	|if negative, result is
 |					;needing denormalization
 	tstb		L_SCR1(%a6)
 	beqs		sneg_pos
@@ -161,7 +161,7 @@
 
 |
 | The result exponent is below denorm value.  Test for catastrophic
-| underflow and force zero if true.  If not, try to shift the 
+| underflow and force zero if true.  If not, try to shift the
 | mantissa right until a zero exponent exists.
 |
 fix_dnrm:
@@ -229,7 +229,7 @@
 	rts
 
 |
-| The rounding mode changed the zero to a smallest denorm. Call 
+| The rounding mode changed the zero to a smallest denorm. Call
 | t_resdnrm with exceptional operand in ETEMP.
 |
 sm_dnrm:
@@ -250,7 +250,7 @@
 fix_exit:
 	bras		sm_dnrm
 
-	
+
 |
 | The result has underflowed to zero. Return zero and set
 | unfl, aunfl, and ainex.
@@ -284,7 +284,7 @@
 	clrl		FP_SCR1(%a6)	|clear the exceptional operand
 	clrl		FP_SCR1+4(%a6)	|for gen_except.
 	clrl		FP_SCR1+8(%a6)
-	fmoves		#0x80000000,%fp0	
+	fmoves		#0x80000000,%fp0
 	rts
 pos_zero:
 	clrl		FP_SCR1(%a6)	|clear the exceptional operand
@@ -299,7 +299,7 @@
 | then adding the remainder of the source to the exponent.
 |
 dst_dnrm:
-	moveml		%d2/%d3,-(%a7)	
+	moveml		%d2/%d3,-(%a7)
 	movew		FPTEMP_EX(%a6),%d1
 	movel		FPTEMP_HI(%a6),%d2
 	movel		FPTEMP_LO(%a6),%d3
@@ -313,7 +313,7 @@
 	roxll		#1,%d2
 	bras		dst_loop
 |
-| Destination became normalized.  Simply add the remaining 
+| Destination became normalized.  Simply add the remaining
 | portion of the src to the exponent.
 |
 dst_norm:
diff -Nru a/arch/m68k/fpsp040/scosh.S b/arch/m68k/fpsp040/scosh.S
--- a/arch/m68k/fpsp040/scosh.S	Sun May 16 01:18:33 2004
+++ b/arch/m68k/fpsp040/scosh.S	Sun May 16 01:18:33 2004
@@ -49,8 +49,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 |SCOSH	idnt	2,1 | Motorola 040 Floating Point Software Package
@@ -99,7 +99,7 @@
 	movel		(%sp)+,%d1
 
 	fmoves		#0x3E800000,%fp1	| ...(1/4)
-	fdivx		%fp0,%fp1	 	| ...1/(2 EXP(|X|))
+	fdivx		%fp0,%fp1		| ...1/(2 EXP(|X|))
 
 	fmovel		%d1,%FPCR
 	faddx		%fp1,%fp0
diff -Nru a/arch/m68k/fpsp040/setox.S b/arch/m68k/fpsp040/setox.S
--- a/arch/m68k/fpsp040/setox.S	Sun May 16 01:18:34 2004
+++ b/arch/m68k/fpsp040/setox.S	Sun May 16 01:18:34 2004
@@ -331,8 +331,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 |setox	idnt	2,1 | Motorola 040 Floating Point Software Package
@@ -505,7 +505,7 @@
 	fmovex		%fp0,%fp2
 	fmuls		#0xBC317218,%fp0	| ...N * L1, L1 = lead(-log2/64)
 	fmulx		L2,%fp2		| ...N * L2, L1+L2 = -log2/64
-	faddx		%fp1,%fp0	 	| ...X + N*L1
+	faddx		%fp1,%fp0		| ...X + N*L1
 	faddx		%fp2,%fp0		| ...fp0 is R, reduced arg.
 |	MOVE.W		#$3FA5,EXPA3	...load EXPA3 in cache
 
@@ -516,46 +516,46 @@
 |--[R+R*S*(A2+S*A4)] + [S*(A1+S*(A3+S*A5))]
 
 	fmovex		%fp0,%fp1
-	fmulx		%fp1,%fp1	 	| ...fp1 IS S = R*R
+	fmulx		%fp1,%fp1		| ...fp1 IS S = R*R
 
 	fmoves		#0x3AB60B70,%fp2	| ...fp2 IS A5
 |	MOVE.W		#0,2(%a1)	...load 2^(J/64) in cache
 
-	fmulx		%fp1,%fp2	 	| ...fp2 IS S*A5
+	fmulx		%fp1,%fp2		| ...fp2 IS S*A5
 	fmovex		%fp1,%fp3
 	fmuls		#0x3C088895,%fp3	| ...fp3 IS S*A4
 
 	faddd		EXPA3,%fp2	| ...fp2 IS A3+S*A5
 	faddd		EXPA2,%fp3	| ...fp3 IS A2+S*A4
 
-	fmulx		%fp1,%fp2	 	| ...fp2 IS S*(A3+S*A5)
+	fmulx		%fp1,%fp2		| ...fp2 IS S*(A3+S*A5)
 	movew		%d0,SCALE(%a6)	| ...SCALE is 2^(M) in extended
 	clrw		SCALE+2(%a6)
 	movel		#0x80000000,SCALE+4(%a6)
 	clrl		SCALE+8(%a6)
 
-	fmulx		%fp1,%fp3	 	| ...fp3 IS S*(A2+S*A4)
+	fmulx		%fp1,%fp3		| ...fp3 IS S*(A2+S*A4)
 
 	fadds		#0x3F000000,%fp2	| ...fp2 IS A1+S*(A3+S*A5)
-	fmulx		%fp0,%fp3	 	| ...fp3 IS R*S*(A2+S*A4)
+	fmulx		%fp0,%fp3		| ...fp3 IS R*S*(A2+S*A4)
 
-	fmulx		%fp1,%fp2	 	| ...fp2 IS S*(A1+S*(A3+S*A5))
-	faddx		%fp3,%fp0	 	| ...fp0 IS R+R*S*(A2+S*A4),
+	fmulx		%fp1,%fp2		| ...fp2 IS S*(A1+S*(A3+S*A5))
+	faddx		%fp3,%fp0		| ...fp0 IS R+R*S*(A2+S*A4),
 |					...fp3 released
 
 	fmovex		(%a1)+,%fp1	| ...fp1 is lead. pt. of 2^(J/64)
-	faddx		%fp2,%fp0	 	| ...fp0 is EXP(R) - 1
+	faddx		%fp2,%fp0		| ...fp0 is EXP(R) - 1
 |					...fp2 released
 
 |--Step 5
 |--final reconstruction process
 |--EXP(X) = 2^M * ( 2^(J/64) + 2^(J/64)*(EXP(R)-1) )
 
-	fmulx		%fp1,%fp0	 	| ...2^(J/64)*(Exp(R)-1)
+	fmulx		%fp1,%fp0		| ...2^(J/64)*(Exp(R)-1)
 	fmovemx	(%a7)+,%fp2-%fp2/%fp3	| ...fp2 restored
 	fadds		(%a1),%fp0	| ...accurate 2^(J/64)
 
-	faddx		%fp1,%fp0	 	| ...2^(J/64) + 2^(J/64)*...
+	faddx		%fp1,%fp0		| ...2^(J/64) + 2^(J/64)*...
 	movel		ADJFLAG(%a6),%d0
 
 |--Step 6
@@ -564,7 +564,7 @@
 ADJUST:
 	fmulx		ADJSCALE(%a6),%fp0
 NORMAL:
-	fmovel		%d1,%FPCR	 	| ...restore user FPCR
+	fmovel		%d1,%FPCR		| ...restore user FPCR
 	fmulx		SCALE(%a6),%fp0	| ...multiply 2^(M)
 	bra		t_frcinx
 
diff -Nru a/arch/m68k/fpsp040/sgetem.S b/arch/m68k/fpsp040/sgetem.S
--- a/arch/m68k/fpsp040/sgetem.S	Sun May 16 01:18:35 2004
+++ b/arch/m68k/fpsp040/sgetem.S	Sun May 16 01:18:35 2004
@@ -1,14 +1,14 @@
 |
 |	sgetem.sa 3.1 12/10/90
 |
-|	The entry point sGETEXP returns the exponent portion 
+|	The entry point sGETEXP returns the exponent portion
 |	of the input argument.  The exponent bias is removed
-|	and the exponent value is returned as an extended 
+|	and the exponent value is returned as an extended
 |	precision number in fp0.  sGETEXPD handles denormalized
 |	numbers.
 |
-|	The entry point sGETMAN extracts the mantissa of the 
-|	input argument.  The mantissa is converted to an 
+|	The entry point sGETMAN extracts the mantissa of the
+|	input argument.  The mantissa is converted to an
 |	extended precision number and returned in fp0.  The
 |	range of the result is [1.0 - 2.0).
 |
@@ -24,8 +24,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 |SGETEM	idnt	2,1 | Motorola 040 Floating Point Software Package
@@ -81,7 +81,7 @@
 	fmovel	%d0,%fpcr		|this fpcr setting is used by the 882
 	movew	LOCAL_EX(%a0),%d0	|get the exp (really just want sign bit)
 	orw	#0x7fff,%d0	|clear old exp
-	bclrl	#14,%d0	 	|make it the new exp +-3fff
+	bclrl	#14,%d0		|make it the new exp +-3fff
 	movew	%d0,LOCAL_EX(%a0)	|move the sign & exp back to fsave stack
 	fmovex	(%a0),%fp0	|put new value back in fp0
 	rts
diff -Nru a/arch/m68k/fpsp040/sint.S b/arch/m68k/fpsp040/sint.S
--- a/arch/m68k/fpsp040/sint.S	Sun May 16 01:18:36 2004
+++ b/arch/m68k/fpsp040/sint.S	Sun May 16 01:18:36 2004
@@ -1,8 +1,8 @@
 |
 |	sint.sa 3.1 12/10/90
 |
-|	The entry point sINT computes the rounded integer 
-|	equivalent of the input argument, sINTRZ computes 
+|	The entry point sINT computes the rounded integer
+|	equivalent of the input argument, sINTRZ computes
 |	the integer rounded to zero of the input argument.
 |
 |	Entry points sint and sintrz are called from do_func
@@ -24,10 +24,10 @@
 |
 |	Algorithm: (sint and sintrz)
 |
-|	1. If exp(X) >= 63, return X. 
+|	1. If exp(X) >= 63, return X.
 |	   If exp(X) < 0, return +/- 0 or +/- 1, according to
 |	   the rounding mode.
-|	
+|
 |	2. (X is in range) set rsc = 63 - exp(X). Unnormalize the
 |	   result to the exponent $403e.
 |
@@ -51,8 +51,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 |SINT    idnt    2,1 | Motorola 040 Floating Point Software Package
@@ -78,9 +78,9 @@
 sint:
 	bfextu	FPCR_MODE(%a6){#2:#2},%d1	|use user's mode for rounding
 |					;implicitly has extend precision
-|					;in upper word. 
+|					;in upper word.
 	movel	%d1,L_SCR1(%a6)		|save mode bits
-	bras	sintexc			
+	bras	sintexc
 
 |
 |	FINT with extended denorm inputs.
@@ -115,13 +115,13 @@
 sintrz:
 	movel	#1,L_SCR1(%a6)		|use rz mode for rounding
 |					;implicitly has extend precision
-|					;in upper word. 
-	bras	sintexc			
+|					;in upper word.
+	bras	sintexc
 |
 |	SINTDO
 |
 |	Input:	a0 points to an IEEE extended format operand
-| 	Output:	fp0 has the result 
+|	Output:	fp0 has the result
 |
 | Exceptions:
 |
@@ -133,7 +133,7 @@
 sintdo:
 	bfextu	FPCR_MODE(%a6){#2:#2},%d1	|use user's mode for rounding
 |					;implicitly has ext precision
-|					;in upper word. 
+|					;in upper word.
 	movel	%d1,L_SCR1(%a6)		|save mode bits
 |
 | Real work of sint is in sintexc
@@ -141,7 +141,7 @@
 sintexc:
 	bclrb	#sign_bit,LOCAL_EX(%a0)	|convert to internal extended
 |					;format
-	sne	LOCAL_SGN(%a0)		
+	sne	LOCAL_SGN(%a0)
 	cmpw	#0x403e,LOCAL_EX(%a0)	|check if (unbiased) exp > 63
 	bgts	out_rnge			|branch if exp < 63
 	cmpw	#0x3ffd,LOCAL_EX(%a0)	|check if (unbiased) exp < 0
@@ -187,7 +187,7 @@
 un_rnrz_neg:
 	bsr	ld_mzero
 	bra	t_inx2
-	
+
 |
 | Input is greater than 2^63.  All bits are significant.  Return
 | the input.
@@ -206,7 +206,7 @@
 	rts
 
 in_rnge:
-| 					;shift off fraction bits
+|					;shift off fraction bits
 	clrl	%d0			|clear d0 - initial g,r,s for
 |					;dnrm_lp
 	movel	#0x403e,%d1		|set threshold for dnrm_lp
diff -Nru a/arch/m68k/fpsp040/skeleton.S b/arch/m68k/fpsp040/skeleton.S
--- a/arch/m68k/fpsp040/skeleton.S	Sun May 16 01:18:36 2004
+++ b/arch/m68k/fpsp040/skeleton.S	Sun May 16 01:18:36 2004
@@ -18,20 +18,20 @@
 |	to handle the exception.
 |
 |	If the exception was completely handled by the package, then
-|	the return will be via a 'jmp fpsp_done'.  Unless there is 
+|	the return will be via a 'jmp fpsp_done'.  Unless there is
 |	OS specific work to be done (such as handling a context switch or
 |	interrupt) the user program can be resumed via 'rte'.
 |
 |	In the following skeleton code, some typical 'real_xxxx' handling
 |	code is shown.  This code may need to be moved to an appropriate
 |	place in the target system, or rewritten.
-|	
+|
 
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 |
@@ -50,7 +50,7 @@
 |
 
 	|section 8
- 
+
 #include "fpsp.h"
 
 	|xref	b1238_fix
@@ -72,7 +72,7 @@
 
 	SAVE_ALL_INT
 	GET_CURRENT(%d0)
-	movel	%sp,%sp@- 		| stack frame pointer argument
+	movel	%sp,%sp@-		| stack frame pointer argument
 	bsrl	trap_c
 	addql	#4,%sp
 	bral	ret_from_exception
@@ -82,7 +82,7 @@
 |
 |	All inexact exceptions are real, but the 'real' handler
 |	will probably want to clear the pending exception.
-|	The provided code will clear the E3 exception (if pending), 
+|	The provided code will clear the E3 exception (if pending),
 |	otherwise clear the E1 exception.  The frestore is not really
 |	necessary for E1 exceptions.
 |
@@ -96,7 +96,7 @@
 | to the appropriate  handler for the exception in the fpsr.  Note
 | that this fix is only for d43b parts, and is skipped if the
 | version number is not $40.
-| 
+|
 |
 	.global	real_inex
 	.global	inex
@@ -116,7 +116,7 @@
 	bra		snan
 inex_ckofl:
 	btstb		#ovfl_bit,2(%sp) |test for ovfl
-	beq		inex_ckufl 
+	beq		inex_ckufl
 	addl		#4,%sp
 	frestore	(%sp)+
 	unlk		%a6
@@ -163,11 +163,11 @@
 
 	SAVE_ALL_INT
 	GET_CURRENT(%d0)
-	movel	%sp,%sp@- 		| stack frame pointer argument
+	movel	%sp,%sp@-		| stack frame pointer argument
 	bsrl	trap_c
 	addql	#4,%sp
 	bral	ret_from_exception
-	
+
 |
 |	Overflow exception
 |
@@ -189,11 +189,11 @@
 
 	SAVE_ALL_INT
 	GET_CURRENT(%d0)
-	movel	%sp,%sp@- 		| stack frame pointer argument
+	movel	%sp,%sp@-		| stack frame pointer argument
 	bsrl	trap_c
 	addql	#4,%sp
 	bral	ret_from_exception
-	
+
 |
 |	Underflow exception
 |
@@ -215,11 +215,11 @@
 
 	SAVE_ALL_INT
 	GET_CURRENT(%d0)
-	movel	%sp,%sp@- 		| stack frame pointer argument
+	movel	%sp,%sp@-		| stack frame pointer argument
 	bsrl	trap_c
 	addql	#4,%sp
 	bral	ret_from_exception
-	
+
 |
 |	Signalling NAN exception
 |
@@ -237,11 +237,11 @@
 
 	SAVE_ALL_INT
 	GET_CURRENT(%d0)
-	movel	%sp,%sp@- 		| stack frame pointer argument
+	movel	%sp,%sp@-		| stack frame pointer argument
 	bsrl	trap_c
 	addql	#4,%sp
 	bral	ret_from_exception
-	
+
 |
 |	Operand Error exception
 |
@@ -259,12 +259,12 @@
 
 	SAVE_ALL_INT
 	GET_CURRENT(%d0)
-	movel	%sp,%sp@- 		| stack frame pointer argument
+	movel	%sp,%sp@-		| stack frame pointer argument
 	bsrl	trap_c
 	addql	#4,%sp
 	bral	ret_from_exception
 
-	
+
 |
 |	BSUN exception
 |
@@ -287,7 +287,7 @@
 
 	SAVE_ALL_INT
 	GET_CURRENT(%d0)
-	movel	%sp,%sp@- 		| stack frame pointer argument
+	movel	%sp,%sp@-		| stack frame pointer argument
 	bsrl	trap_c
 	addql	#4,%sp
 	bral	ret_from_exception
@@ -295,7 +295,7 @@
 |
 |	F-line exception
 |
-|	A 'real' F-line exception is one that the FPSP isn't supposed to 
+|	A 'real' F-line exception is one that the FPSP isn't supposed to
 |	handle. E.g. an instruction with a co-processor ID that is not 1.
 |
 |
@@ -308,7 +308,7 @@
 
 	SAVE_ALL_INT
 	GET_CURRENT(%d0)
-	movel	%sp,%sp@- 		| stack frame pointer argument
+	movel	%sp,%sp@-		| stack frame pointer argument
 	bsrl	trap_c
 	addql	#4,%sp
 	bral	ret_from_exception
@@ -330,7 +330,7 @@
 
 	SAVE_ALL_INT
 	GET_CURRENT(%d0)
-	movel	%sp,%sp@- 		| stack frame pointer argument
+	movel	%sp,%sp@-		| stack frame pointer argument
 	bsrl	trap_c
 	addql	#4,%sp
 	bral	ret_from_exception
@@ -355,14 +355,14 @@
 |	{4028, 4130} - unimp frame
 |	{4000, 4100} - idle frame
 |
-|	This entry point simply holds an f-line illegal value.  
+|	This entry point simply holds an f-line illegal value.
 |	Replace this with a call to your kernel panic code or
 |	code to handle future revisions of the fpu.
 |
 	.global	fpsp_fmt_error
 fpsp_fmt_error:
 
-	.long	0xf27f0000	|f-line illegal 
+	.long	0xf27f0000	|f-line illegal
 
 |
 |	fpsp_done --- FPSP exit point
@@ -442,7 +442,7 @@
 |	a1 - supervisor destination address
 |	d0 - number of bytes to read (maximum count is 12)
 |
-| Like mem_write, mem_read always reads with a supervisor 
+| Like mem_write, mem_read always reads with a supervisor
 | destination address on the supervisor stack.  Also like mem_write,
 | the EXC_SR is checked and a simple memory copy is done if reading
 | from supervisor space is indicated.
diff -Nru a/arch/m68k/fpsp040/slog2.S b/arch/m68k/fpsp040/slog2.S
--- a/arch/m68k/fpsp040/slog2.S	Sun May 16 01:18:36 2004
+++ b/arch/m68k/fpsp040/slog2.S	Sun May 16 01:18:36 2004
@@ -1,28 +1,28 @@
 |
 |	slog2.sa 3.1 12/10/90
 |
-|       The entry point slog10 computes the base-10 
+|       The entry point slog10 computes the base-10
 |	logarithm of an input argument X.
-|	slog10d does the same except the input value is a 
-|	denormalized number.  
+|	slog10d does the same except the input value is a
+|	denormalized number.
 |	sLog2 and sLog2d are the base-2 analogues.
 |
-|       INPUT:	Double-extended value in memory location pointed to 
+|       INPUT:	Double-extended value in memory location pointed to
 |		by address register a0.
 |
-|       OUTPUT: log_10(X) or log_2(X) returned in floating-point 
+|       OUTPUT: log_10(X) or log_2(X) returned in floating-point
 |		register fp0.
 |
-|       ACCURACY and MONOTONICITY: The returned result is within 1.7 
-|		ulps in 64 significant bit, i.e. within 0.5003 ulp 
-|		to 53 bits if the result is subsequently rounded 
-|		to double precision. The result is provably monotonic 
+|       ACCURACY and MONOTONICITY: The returned result is within 1.7
+|		ulps in 64 significant bit, i.e. within 0.5003 ulp
+|		to 53 bits if the result is subsequently rounded
+|		to double precision. The result is provably monotonic
 |		in double precision.
 |
-|       SPEED:	Two timings are measured, both in the copy-back mode. 
-|		The first one is measured when the function is invoked 
-|		the first time (so the instructions and data are not 
-|		in cache), and the second one is measured when the 
+|       SPEED:	Two timings are measured, both in the copy-back mode.
+|		The first one is measured when the function is invoked
+|		the first time (so the instructions and data are not
+|		in cache), and the second one is measured when the
 |		function is reinvoked at the same input argument.
 |
 |       ALGORITHM and IMPLEMENTATION NOTES:
@@ -42,7 +42,7 @@
 |            2.2  Return ans := Y * INV_L10.
 |
 |
-|       slog10: 
+|       slog10:
 |
 |       Step 0.   If X < 0, create a NaN and raise the invalid operation
 |                 flag. Otherwise, save FPCR in D1; set FpCR to default.
@@ -96,15 +96,15 @@
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 |SLOG2    idnt    2,1 | Motorola 040 Floating Point Software Package
 
 	|section	8
 
-	|xref	t_frcinx	
+	|xref	t_frcinx
 	|xref	t_operr
 	|xref	slogn
 	|xref	slognd
diff -Nru a/arch/m68k/fpsp040/slogn.S b/arch/m68k/fpsp040/slogn.S
--- a/arch/m68k/fpsp040/slogn.S	Sun May 16 01:18:35 2004
+++ b/arch/m68k/fpsp040/slogn.S	Sun May 16 01:18:35 2004
@@ -13,11 +13,11 @@
 |
 |	Accuracy and Monotonicity: The returned result is within 2 ulps in
 |		64 significant bit, i.e. within 0.5001 ulp to 53 bits if the
-|		result is subsequently rounded to double precision. The 
+|		result is subsequently rounded to double precision. The
 |		result is provably monotonic in double precision.
 |
-|	Speed: The program slogn takes approximately 190 cycles for input 
-|		argument X such that |X-1| >= 1/16, which is the usual 
+|	Speed: The program slogn takes approximately 190 cycles for input
+|		argument X such that |X-1| >= 1/16, which is the usual
 |		situation. For those arguments, slognp1 takes approximately
 |		 210 cycles. For the less common arguments, the program will
 |		 run no worse than 10% slower.
@@ -45,26 +45,26 @@
 |	Step 2: Let 1+X = 2**k * Y, where 1 <= Y < 2. Define F as done in Step 2
 |		of the algorithm for LOGN and compute log(1+X) as
 |		k*log(2) + log(F) + poly where poly approximates log(1+u),
-|		u = (Y-F)/F. 
+|		u = (Y-F)/F.
 |
 |	Implementation Notes:
 |	Note 1. There are 64 different possible values for F, thus 64 log(F)'s
-|		need to be tabulated. Moreover, the values of 1/F are also 
+|		need to be tabulated. Moreover, the values of 1/F are also
 |		tabulated so that the division in (Y-F)/F can be performed by a
 |		multiplication.
 |
 |	Note 2. In Step 2 of lognp1, in order to preserved accuracy, the value
-|		Y-F has to be calculated carefully when 1/2 <= X < 3/2. 
+|		Y-F has to be calculated carefully when 1/2 <= X < 3/2.
 |
 |	Note 3. To fully exploit the pipeline, polynomials are usually separated
 |		into two parts evaluated independently before being added up.
-|	
+|
 
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 |slogn	idnt	2,1 | Motorola 040 Floating Point Software Package
@@ -262,7 +262,7 @@
 |----the value TWOTO100 is no longer needed.
 |----Note that this code assumes the denormalized input is NON-ZERO.
 
-     moveml	%d2-%d7,-(%a7)		| ...save some registers 
+     moveml	%d2-%d7,-(%a7)		| ...save some registers
      movel	#0x00000000,%d3		| ...D3 is exponent of smallest norm. #
      movel	4(%a0),%d4
      movel	8(%a0),%d5		| ...(D4,D5) is (Hi_X,Lo_X)
@@ -347,14 +347,14 @@
 |--NOTE THAT U = (Y-F)/F IS VERY SMALL AND THUS APPROXIMATING
 |--LOG(1+U) CAN BE VERY EFFICIENT.
 |--ALSO NOTE THAT THE VALUE 1/F IS STORED IN A TABLE SO THAT NO
-|--DIVISION IS NEEDED TO CALCULATE (Y-F)/F. 
+|--DIVISION IS NEEDED TO CALCULATE (Y-F)/F.
 
 |--GET K, Y, F, AND ADDRESS OF 1/F.
 	asrl	#8,%d0
 	asrl	#8,%d0		| ...SHIFTED 16 BITS, BIASED EXPO. OF X
-	subil	#0x3FFF,%d0 	| ...THIS IS K
+	subil	#0x3FFF,%d0	| ...THIS IS K
 	addl	ADJK(%a6),%d0	| ...ADJUST K, ORIGINAL INPUT MAY BE  DENORM.
-	lea	LOGTBL,%a0 	| ...BASE ADDRESS OF 1/F AND LOG(F)
+	lea	LOGTBL,%a0	| ...BASE ADDRESS OF 1/F AND LOG(F)
 	fmovel	%d0,%fp1		| ...CONVERT K TO FLOATING-POINT FORMAT
 
 |--WHILE THE CONVERSION IS GOING ON, WE GET F AND ADDRESS OF 1/F
@@ -363,7 +363,7 @@
 	andil	#0xFE000000,FFRAC(%a6) | ...FIRST 7 BITS OF Y
 	oril	#0x01000000,FFRAC(%a6) | ...GET F: ATTACH A 1 AT THE EIGHTH BIT
 	movel	FFRAC(%a6),%d0	| ...READY TO GET ADDRESS OF 1/F
-	andil	#0x7E000000,%d0	
+	andil	#0x7E000000,%d0
 	asrl	#8,%d0
 	asrl	#8,%d0
 	asrl	#4,%d0		| ...SHIFTED 20, D0 IS THE DISPLACEMENT
@@ -390,7 +390,7 @@
 |--[U + V*(A1+V*(A3+V*A5))]  +  [U*V*(A2+V*(A4+V*A6))]
 
 	fmovex	%fp2,%fp3
-	fmovex	%fp2,%fp1	
+	fmovex	%fp2,%fp1
 
 	fmuld	LOGA6,%fp1	| ...V*A6
 	fmuld	LOGA5,%fp2	| ...V*A5
@@ -440,7 +440,7 @@
 	fmovex	%fp1,%fp0
 	fmulx	%fp0,%fp0	| ...FP0 IS V
 	fmovex	%fp1,SAVEU(%a6) | ...STORE U IN MEMORY, FREE FP1
-	fmovex	%fp0,%fp1	
+	fmovex	%fp0,%fp1
 	fmulx	%fp1,%fp1	| ...FP1 IS W
 
 	fmoved	LOGB5,%fp3
@@ -465,7 +465,7 @@
 	fmulx	%fp1,%fp0	| ...U*V*( [B1+W*(B3+W*B5)] + [V*(B2+W*B4)] )
 
 	fmovel	%d1,%fpcr
-	faddx	SAVEU(%a6),%fp0		
+	faddx	SAVEU(%a6),%fp0
 	bra	t_frcinx
 	rts
 
@@ -549,7 +549,7 @@
 	asrl	#8,%d0
 	asrl	#4,%d0		| ...D0 CONTAINS DISPLACEMENT FOR 1/F
 	faddx	%fp1,%fp1		| ...GET 2Z
-	fmovemx %fp2-%fp2/%fp3,-(%sp)	| ...SAVE FP2 
+	fmovemx %fp2-%fp2/%fp3,-(%sp)	| ...SAVE FP2
 	faddx	%fp1,%fp0		| ...FP0 IS Y-F = (2-F)+2Z
 	lea	LOGTBL,%a0	| ...A0 IS ADDRESS OF 1/F
 	addal	%d0,%a0
@@ -569,7 +569,7 @@
 	faddx	%fp1,%fp0		| ...FP0 IS Y-F
 	fmovemx %fp2-%fp2/%fp3,-(%sp)	| ...FP2 SAVED
 	lea	LOGTBL,%a0
-	addal	%d0,%a0	 	| ...A0 IS ADDRESS OF 1/F
+	addal	%d0,%a0		| ...A0 IS ADDRESS OF 1/F
 	fmoves	zero,%fp1	| ...FP1 IS K = 0
 	bra	LP1CONT1
 
diff -Nru a/arch/m68k/fpsp040/smovecr.S b/arch/m68k/fpsp040/smovecr.S
--- a/arch/m68k/fpsp040/smovecr.S	Sun May 16 01:18:36 2004
+++ b/arch/m68k/fpsp040/smovecr.S	Sun May 16 01:18:36 2004
@@ -15,8 +15,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 |SMOVECR	idnt	2,1 | Motorola 040 Floating Point Software Package
@@ -39,7 +39,7 @@
 
 FZERO:	.long	00000000
 |
-|	FMOVECR 
+|	FMOVECR
 |
 	.global	smovcr
 smovcr:
@@ -55,9 +55,9 @@
 	cmpib	#0x0e,%d0		|check range $0b - $0e
 	bles	SM_TBL		|valid constants in this range
 	cmpib	#0x2f,%d0		|check range $10 - $2f
-	bles	Z_VAL		|if in this range, return zero 
+	bles	Z_VAL		|if in this range, return zero
 	cmpib	#0x3f,%d0		|check range $30 - $3f
-	ble  	BG_TBL		|valid constants in this range
+	ble	BG_TBL		|valid constants in this range
 Z_VAL:
 	fmoves	FZERO,%fp0
 	rts
@@ -149,7 +149,7 @@
 	lea	FP_SCR1(%a6),%a0
 	btstb	#sign_bit,LOCAL_EX(%a0)
 	sne	LOCAL_SGN(%a0)		|convert to internal ext. format
-	
+
 	bsr	round			|go round the mantissa
 
 	bfclr	LOCAL_SGN(%a0){#0:#8}	|convert back to IEEE ext format
diff -Nru a/arch/m68k/fpsp040/srem_mod.S b/arch/m68k/fpsp040/srem_mod.S
--- a/arch/m68k/fpsp040/srem_mod.S	Sun May 16 01:18:33 2004
+++ b/arch/m68k/fpsp040/srem_mod.S	Sun May 16 01:18:33 2004
@@ -21,7 +21,7 @@
 |       ---------
 |
 |       Step 1.  Save and strip signs of X and Y: signX := sign(X),
-|                signY := sign(Y), X := |X|, Y := |Y|, 
+|                signY := sign(Y), X := |X|, Y := |Y|,
 |                signQ := signX EOR signY. Record whether MOD or REM
 |                is requested.
 |
@@ -41,7 +41,7 @@
 |
 |       Step 4.  At this point, R = X - QY = MOD(X,Y). Set
 |                Last_Subtract := false (used in Step 7 below). If
-|                MOD is requested, go to Step 6. 
+|                MOD is requested, go to Step 6.
 |
 |       Step 5.  R = MOD(X,Y), but REM(X,Y) is requested.
 |            5.1 If R < Y/2, then R = MOD(X,Y) = REM(X,Y). Go to
@@ -61,13 +61,13 @@
 |                X = 2^(j)*(Q+1)Y. set Q := 2^(j)*(Q+1),
 |                R := 0. Return signQ, last 7 bits of Q, and R.
 |
-|                
-             
+|
+
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 SREM_MOD:    |idnt    2,1 | Motorola 040 Floating Point Software Package
@@ -362,10 +362,10 @@
 |..Get Q
 |
 Get_Q:
-   clrl		%d6		
+   clrl		%d6
    movew               SignQ(%a6),%d6        | ...D6 is sign(Q)
    movel               #8,%d7
-   lsrl                %d7,%d6           
+   lsrl                %d7,%d6
    andil               #0x0000007F,%d3   | ...7 bits of Q
    orl                 %d6,%d3           | ...sign and bits of Q
    swap                 %d3
@@ -391,7 +391,7 @@
 Rem_is_0:
 |..R = 2^(-j)X - Q Y = Y, thus R = 0 and quotient = 2^j (Q+1)
    addql               #1,%d3
-   cmpil               #8,%d0           | ...D0 is j 
+   cmpil               #8,%d0           | ...D0 is j
    bges                Q_Big
 
    lsll                %d0,%d3
diff -Nru a/arch/m68k/fpsp040/ssin.S b/arch/m68k/fpsp040/ssin.S
--- a/arch/m68k/fpsp040/ssin.S	Sun May 16 01:18:34 2004
+++ b/arch/m68k/fpsp040/ssin.S	Sun May 16 01:18:34 2004
@@ -83,8 +83,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 |SSIN	idnt	2,1 | Motorola 040 Floating Point Software Package
@@ -204,7 +204,7 @@
 
 |--HIDE THE NEXT THREE INSTRUCTIONS
 	lea		PITBL+0x200,%a1 | ...TABLE OF N*PI/2, N = -32,...,32
-	
+
 
 |--FP1 IS NOW READY
 	fmovel		%fp1,N(%a6)		| ...CONVERT TO INTEGER
@@ -273,7 +273,7 @@
 	faddx		%fp2,%fp1	| ...[A1+T(A3+T(A5+TA7))]+[S(A2+T(A4+TA6))]
 |--FP3 RELEASED, RESTORE NOW AND TAKE SOME ADVANTAGE OF HIDING
 |--FP2 RELEASED, RESTORE NOW AND TAKE FULL ADVANTAGE OF HIDING
-	
+
 
 	fmulx		%fp1,%fp0		| ...SIN(R')-R'
 |--FP1 RELEASED.
@@ -335,7 +335,7 @@
 	fmulx		%fp2,%fp0	| ...S(B2+T(B4+T(B6+TB8)))
 |--FP3 RELEASED, RESTORE NOW AND TAKE SOME ADVANTAGE OF HIDING
 |--FP2 RELEASED.
-	
+
 
 	faddx		%fp1,%fp0
 |--FP1 RELEASED
@@ -352,7 +352,7 @@
 |--IF |X| < 2**(-40), RETURN X OR 1.
 	cmpil		#0x3FFF8000,%d0
 	bgts		REDUCEX
-        
+
 
 SINSM:
 	movel		ADJN(%a6),%d0
@@ -466,7 +466,7 @@
         movew		%d2,FP_SCR2(%a6)
 	clrw           FP_SCR2+2(%a6)
 	movel		#0xC90FDAA2,FP_SCR2+4(%a6)
-	clrl		FP_SCR2+8(%a6)		| ...FP_SCR2 is  2**(L) * Piby2_1	
+	clrl		FP_SCR2+8(%a6)		| ...FP_SCR2 is  2**(L) * Piby2_1
 
 |--FP2 IS READY
 	fsubs		TWOTO63(%a6),%fp2		| ...FP2 is N
@@ -514,7 +514,7 @@
 	movel		(%a7)+,%d2
 	fmovemx	(%a7)+,%fp2-%fp5
 
-	
+
 	movel		ADJN(%a6),%d0
 	cmpil		#4,%d0
 
@@ -559,7 +559,7 @@
 
 |--HIDE THE NEXT THREE INSTRUCTIONS
 	lea		PITBL+0x200,%a1 | ...TABLE OF N*PI/2, N = -32,...,32
-	
+
 
 |--FP1 IS NOW READY
 	fmovel		%fp1,N(%a6)		| ...CONVERT TO INTEGER
@@ -577,7 +577,7 @@
 |--HIDE THE NEXT TWO
 	movel		N(%a6),%d0
 	rorl		#1,%d0
-	
+
 	cmpil		#0,%d0		| ...D0 < 0 IFF N IS ODD
 	bge		NEVEN
 
@@ -641,7 +641,7 @@
 	fmulx		%fp0,%fp1	 | ...S(A1+...)
 	fmulx		%fp2,%fp0	 | ...S(B2+...)
 
-	
+
 
 	fmulx		RPRIME(%a6),%fp1	| ...R'S(A1+...)
 	fadds		COSB1,%fp0	| ...B1+S(B2...)
@@ -709,7 +709,7 @@
 	fmulx		%fp0,%fp1	 | ...S(B2+...)
 	fmulx		%fp2,%fp0	 | ...s(a1+...)
 
-	
+
 
 	fadds		COSB1,%fp1	| ...B1+S(B2...)
 	fmulx		RPRIME(%a6),%fp0	| ...R'S(A1+...)
@@ -728,7 +728,7 @@
 SCBORS:
 	cmpil		#0x3FFF8000,%d0
 	bgt		REDUCEX
-        
+
 
 SCSM:
 	movew		#0x0000,XDCARE(%a6)
diff -Nru a/arch/m68k/fpsp040/ssinh.S b/arch/m68k/fpsp040/ssinh.S
--- a/arch/m68k/fpsp040/ssinh.S	Sun May 16 01:18:35 2004
+++ b/arch/m68k/fpsp040/ssinh.S	Sun May 16 01:18:35 2004
@@ -5,7 +5,7 @@
 |       an input argument; sSinhd does the same except for denormalized
 |       input.
 |
-|       Input: Double-extended number X in location pointed to 
+|       Input: Double-extended number X in location pointed to
 |		by address register a0.
 |
 |       Output: The value sinh(X) returned in floating-point register Fp0.
@@ -49,8 +49,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 |SSINH	idnt	2,1 | Motorola 040 Floating Point Software Package
@@ -91,7 +91,7 @@
 	moveml	%a1/%d1,-(%sp)
 	fmovemx %fp0-%fp0,(%a0)
 	clrl	%d1
-	bsr	setoxm1	 	| ...FP0 IS Z = EXPM1(Y)
+	bsr	setoxm1		| ...FP0 IS Z = EXPM1(Y)
 	fmovel	#0,%fpcr
 	moveml	(%sp)+,%a1/%d1
 
diff -Nru a/arch/m68k/fpsp040/stan.S b/arch/m68k/fpsp040/stan.S
--- a/arch/m68k/fpsp040/stan.S	Sun May 16 01:18:33 2004
+++ b/arch/m68k/fpsp040/stan.S	Sun May 16 01:18:33 2004
@@ -50,8 +50,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 |STAN	idnt	2,1 | Motorola 040 Floating Point Software Package
@@ -213,34 +213,34 @@
 	blt		NODD
 
 	fmovex		%fp0,%fp1
-	fmulx		%fp1,%fp1	 	| ...S = R*R
+	fmulx		%fp1,%fp1		| ...S = R*R
 
 	fmoved		TANQ4,%fp3
 	fmoved		TANP3,%fp2
 
-	fmulx		%fp1,%fp3	 	| ...SQ4
-	fmulx		%fp1,%fp2	 	| ...SP3
+	fmulx		%fp1,%fp3		| ...SQ4
+	fmulx		%fp1,%fp2		| ...SP3
 
 	faddd		TANQ3,%fp3	| ...Q3+SQ4
 	faddx		TANP2,%fp2	| ...P2+SP3
 
-	fmulx		%fp1,%fp3	 	| ...S(Q3+SQ4)
-	fmulx		%fp1,%fp2	 	| ...S(P2+SP3)
+	fmulx		%fp1,%fp3		| ...S(Q3+SQ4)
+	fmulx		%fp1,%fp2		| ...S(P2+SP3)
 
 	faddx		TANQ2,%fp3	| ...Q2+S(Q3+SQ4)
 	faddx		TANP1,%fp2	| ...P1+S(P2+SP3)
 
-	fmulx		%fp1,%fp3	 	| ...S(Q2+S(Q3+SQ4))
-	fmulx		%fp1,%fp2	 	| ...S(P1+S(P2+SP3))
+	fmulx		%fp1,%fp3		| ...S(Q2+S(Q3+SQ4))
+	fmulx		%fp1,%fp2		| ...S(P1+S(P2+SP3))
 
 	faddx		TANQ1,%fp3	| ...Q1+S(Q2+S(Q3+SQ4))
-	fmulx		%fp0,%fp2	 	| ...RS(P1+S(P2+SP3))
+	fmulx		%fp0,%fp2		| ...RS(P1+S(P2+SP3))
 
-	fmulx		%fp3,%fp1	 	| ...S(Q1+S(Q2+S(Q3+SQ4)))
-	
+	fmulx		%fp3,%fp1		| ...S(Q1+S(Q2+S(Q3+SQ4)))
+
+
+	faddx		%fp2,%fp0		| ...R+RS(P1+S(P2+SP3))
 
-	faddx		%fp2,%fp0	 	| ...R+RS(P1+S(P2+SP3))
-	
 
 	fadds		#0x3F800000,%fp1	| ...1+S(Q1+...)
 
@@ -251,40 +251,40 @@
 
 NODD:
 	fmovex		%fp0,%fp1
-	fmulx		%fp0,%fp0	 	| ...S = R*R
+	fmulx		%fp0,%fp0		| ...S = R*R
 
 	fmoved		TANQ4,%fp3
 	fmoved		TANP3,%fp2
 
-	fmulx		%fp0,%fp3	 	| ...SQ4
-	fmulx		%fp0,%fp2	 	| ...SP3
+	fmulx		%fp0,%fp3		| ...SQ4
+	fmulx		%fp0,%fp2		| ...SP3
 
 	faddd		TANQ3,%fp3	| ...Q3+SQ4
 	faddx		TANP2,%fp2	| ...P2+SP3
 
-	fmulx		%fp0,%fp3	 	| ...S(Q3+SQ4)
-	fmulx		%fp0,%fp2	 	| ...S(P2+SP3)
+	fmulx		%fp0,%fp3		| ...S(Q3+SQ4)
+	fmulx		%fp0,%fp2		| ...S(P2+SP3)
 
 	faddx		TANQ2,%fp3	| ...Q2+S(Q3+SQ4)
 	faddx		TANP1,%fp2	| ...P1+S(P2+SP3)
 
-	fmulx		%fp0,%fp3	 	| ...S(Q2+S(Q3+SQ4))
-	fmulx		%fp0,%fp2	 	| ...S(P1+S(P2+SP3))
+	fmulx		%fp0,%fp3		| ...S(Q2+S(Q3+SQ4))
+	fmulx		%fp0,%fp2		| ...S(P1+S(P2+SP3))
 
 	faddx		TANQ1,%fp3	| ...Q1+S(Q2+S(Q3+SQ4))
-	fmulx		%fp1,%fp2	 	| ...RS(P1+S(P2+SP3))
+	fmulx		%fp1,%fp2		| ...RS(P1+S(P2+SP3))
+
+	fmulx		%fp3,%fp0		| ...S(Q1+S(Q2+S(Q3+SQ4)))
 
-	fmulx		%fp3,%fp0	 	| ...S(Q1+S(Q2+S(Q3+SQ4)))
-	
 
-	faddx		%fp2,%fp1	 	| ...R+RS(P1+S(P2+SP3))
+	faddx		%fp2,%fp1		| ...R+RS(P1+S(P2+SP3))
 	fadds		#0x3F800000,%fp0	| ...1+S(Q1+...)
-	
+
 
 	fmovex		%fp1,-(%sp)
 	eoril		#0x80000000,(%sp)
 
-	fmovel		%d1,%fpcr	 	|restore users exceptions
+	fmovel		%d1,%fpcr		|restore users exceptions
 	fdivx		(%sp)+,%fp0	|last inst - possible exception set
 
 	bra		t_frcinx
@@ -397,7 +397,7 @@
         movew		%d2,FP_SCR2(%a6)
 	clrw           FP_SCR2+2(%a6)
 	movel		#0xC90FDAA2,FP_SCR2+4(%a6)
-	clrl		FP_SCR2+8(%a6)		| ...FP_SCR2 is  2**(L) * Piby2_1	
+	clrl		FP_SCR2+8(%a6)		| ...FP_SCR2 is  2**(L) * Piby2_1
 
 |--FP2 IS READY
 	fsubs		TWOTO63(%a6),%fp2		| ...FP2 is N
@@ -445,7 +445,7 @@
 	movel		(%a7)+,%d2
 	fmovemx	(%a7)+,%fp2-%fp5
 
-	
+
 	movel		N(%a6),%d0
         rorl		#1,%d0
 
diff -Nru a/arch/m68k/fpsp040/stanh.S b/arch/m68k/fpsp040/stanh.S
--- a/arch/m68k/fpsp040/stanh.S	Sun May 16 01:18:34 2004
+++ b/arch/m68k/fpsp040/stanh.S	Sun May 16 01:18:34 2004
@@ -49,14 +49,14 @@
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 |STANH	idnt	2,1 | Motorola 040 Floating Point Software Package
 
 	|section	8
-	
+
 #include "fpsp.h"
 
 	.set	X,FP_SCR5
@@ -106,7 +106,7 @@
 	movel		%d1,-(%a7)
 	clrl		%d1
 	fmovemx	%fp0-%fp0,(%a0)
-	bsr		setoxm1	 	| ...FP0 IS Z = EXPM1(Y)
+	bsr		setoxm1		| ...FP0 IS Z = EXPM1(Y)
 	movel		(%a7)+,%d1
 
 	fmovex		%fp0,%fp1
@@ -149,7 +149,7 @@
 
 	eorl		#0xC0000000,%d0	| ...-SIGN(X)*2
 	fmoves		%d0,%fp1		| ...-SIGN(X)*2 IN SGL FMT
-	fdivx		%fp0,%fp1	 	| ...-SIGN(X)2 / [EXP(Y)+1 ]
+	fdivx		%fp0,%fp1		| ...-SIGN(X)2 / [EXP(Y)+1 ]
 
 	movel		SGN(%a6),%d0
 	orl		#0x3F800000,%d0	| ...SGN
diff -Nru a/arch/m68k/fpsp040/sto_res.S b/arch/m68k/fpsp040/sto_res.S
--- a/arch/m68k/fpsp040/sto_res.S	Sun May 16 01:18:36 2004
+++ b/arch/m68k/fpsp040/sto_res.S	Sun May 16 01:18:36 2004
@@ -5,9 +5,9 @@
 |	Library functions return result in fp0.	If fp0 is not the
 |	users destination register then fp0 is moved to the
 |	correct floating-point destination register.  fp0 and fp1
-|	are then restored to the original contents. 
+|	are then restored to the original contents.
 |
-|	Input:	result in fp0,fp1 
+|	Input:	result in fp0,fp1
 |
 |		d2 & a0 should be kept unmodified
 |
@@ -19,8 +19,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 STO_RES:	|idnt	2,1 | Motorola 040 Floating Point Software Package
diff -Nru a/arch/m68k/fpsp040/stwotox.S b/arch/m68k/fpsp040/stwotox.S
--- a/arch/m68k/fpsp040/stwotox.S	Sun May 16 01:18:34 2004
+++ b/arch/m68k/fpsp040/stwotox.S	Sun May 16 01:18:34 2004
@@ -76,8 +76,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 |STWOTOX	idnt	2,1 | Motorola 040 Floating Point Software Package
@@ -222,17 +222,17 @@
 	cmpil		#0x400D80C0,%d0		| ...|X| > 16480?
 	bles		TWOMAIN
 	bra		EXPBORS
-	
+
 
 TWOMAIN:
 |--USUAL CASE, 2^(-70) <= |X| <= 16480
 
 	fmovex		%fp0,%fp1
 	fmuls		#0x42800000,%fp1  | ...64 * X
-	
+
 	fmovel		%fp1,N(%a6)		| ...N = ROUND-TO-INT(64 X)
 	movel		%d2,-(%sp)
-	lea		EXPTBL,%a1 	| ...LOAD ADDRESS OF TABLE OF 2^(J/64)
+	lea		EXPTBL,%a1	| ...LOAD ADDRESS OF TABLE OF 2^(J/64)
 	fmovel		N(%a6),%fp1		| ...N --> FLOATING FMT
 	movel		N(%a6),%d0
 	movel		%d0,%d2
@@ -244,7 +244,7 @@
 	asrl		#1,%d0		| ...D0 IS M
 	subl		%d0,%d2		| ...d2 IS M', N = 64(M+M') + J
 	addil		#0x3FFF,%d2
-	movew		%d2,ADJFACT(%a6) 	| ...ADJFACT IS 2^(M')
+	movew		%d2,ADJFACT(%a6)	| ...ADJFACT IS 2^(M')
 	movel		(%sp)+,%d2
 |--SUMMARY: a1 IS ADDRESS FOR THE LEADING PORTION OF 2^(J/64),
 |--D0 IS M WHERE N = 64(M+M') + J. NOTE THAT |M| <= 16140 BY DESIGN.
@@ -258,13 +258,13 @@
 	movew		(%a1)+,FACT2(%a6)
 	clrw		FACT2+2(%a6)
 
-	fsubx		%fp1,%fp0	 	| ...X - (1/64)*INT(64 X)
+	fsubx		%fp1,%fp0		| ...X - (1/64)*INT(64 X)
 
 	movew		(%a1)+,FACT2HI(%a6)
 	clrw		FACT2HI+2(%a6)
 	clrl		FACT2LOW(%a6)
 	addw		%d0,FACT1(%a6)
-	
+
 	fmulx		LOG2,%fp0	| ...FP0 IS R
 	addw		%d0,FACT2(%a6)
 
@@ -332,10 +332,10 @@
 
 	fmovex		%fp0,%fp1
 	fmuld		L2TEN64,%fp1	| ...X*64*LOG10/LOG2
-	
+
 	fmovel		%fp1,N(%a6)		| ...N=INT(X*64*LOG10/LOG2)
 	movel		%d2,-(%sp)
-	lea		EXPTBL,%a1 	| ...LOAD ADDRESS OF TABLE OF 2^(J/64)
+	lea		EXPTBL,%a1	| ...LOAD ADDRESS OF TABLE OF 2^(J/64)
 	fmovel		N(%a6),%fp1		| ...N --> FLOATING FMT
 	movel		N(%a6),%d0
 	movel		%d0,%d2
@@ -347,7 +347,7 @@
 	asrl		#1,%d0		| ...D0 IS M
 	subl		%d0,%d2		| ...d2 IS M', N = 64(M+M') + J
 	addil		#0x3FFF,%d2
-	movew		%d2,ADJFACT(%a6) 	| ...ADJFACT IS 2^(M')
+	movew		%d2,ADJFACT(%a6)	| ...ADJFACT IS 2^(M')
 	movel		(%sp)+,%d2
 
 |--SUMMARY: a1 IS ADDRESS FOR THE LEADING PORTION OF 2^(J/64),
@@ -375,7 +375,7 @@
 	clrl		FACT2LOW(%a6)
 
 	fmulx		LOG10,%fp0	| ...FP0 IS R
-	
+
 	addw		%d0,FACT1(%a6)
 	addw		%d0,FACT2(%a6)
 
@@ -405,9 +405,9 @@
 
 	fmulx		%fp1,%fp2		| ...FP2 IS S*(A1+S*(A3+S*A5))
 	faddx		%fp3,%fp0		| ...FP0 IS R+R*S*(A2+S*A4)
-	
+
 	faddx		%fp2,%fp0		| ...FP0 IS EXP(R) - 1
-	
+
 
 |--FINAL RECONSTRUCTION PROCESS
 |--EXP(X) = 2^M*2^(J/64) + 2^M*2^(J/64)*(EXP(R)-1)  -  (1 OR 0)
diff -Nru a/arch/m68k/fpsp040/tbldo.S b/arch/m68k/fpsp040/tbldo.S
--- a/arch/m68k/fpsp040/tbldo.S	Sun May 16 01:18:36 2004
+++ b/arch/m68k/fpsp040/tbldo.S	Sun May 16 01:18:36 2004
@@ -6,19 +6,19 @@
 |			of indirection in do_func for monadic
 |			functions.  Dyadic functions require two
 |			levels, and the tables are still contained
-|			in do_func.  The table is arranged for 
+|			in do_func.  The table is arranged for
 |			index with a 10-bit index, with the first
 |			7 bits the opcode, and the remaining 3
 |			the stag.  For dyadic functions, all
 |			valid addresses are to the generic entry
-|			point. 
+|			point.
 |
 
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 |TBLDO	idnt    2,1 | Motorola 040 Floating Point Software Package
@@ -57,7 +57,7 @@
 	.long	smovcr		|$00-7 fmovecr all
 
 	.long	sint		|$01-0 fint norm
-	.long	szero		|$01-1 fint zero 
+	.long	szero		|$01-1 fint zero
 	.long	sinf		|$01-2 fint inf
 	.long	src_nan		|$01-3 fint nan
 	.long	sintd		|$01-4 fint denorm inx
diff -Nru a/arch/m68k/fpsp040/util.S b/arch/m68k/fpsp040/util.S
--- a/arch/m68k/fpsp040/util.S	Sun May 16 01:18:35 2004
+++ b/arch/m68k/fpsp040/util.S	Sun May 16 01:18:35 2004
@@ -4,20 +4,20 @@
 |	This file contains routines used by other programs.
 |
 |	ovf_res: used by overflow to force the correct
-|		 result. ovf_r_k, ovf_r_x2, ovf_r_x3 are 
+|		 result. ovf_r_k, ovf_r_x2, ovf_r_x3 are
 |		 derivatives of this routine.
 |	get_fline: get user's opcode word
 |	g_dfmtou: returns the destination format.
 |	g_opcls: returns the opclass of the float instruction.
-|	g_rndpr: returns the rounding precision. 
+|	g_rndpr: returns the rounding precision.
 |	reg_dest: write byte, word, or long data to Dn
 |
 |
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 |UTIL	idnt    2,1 | Motorola 040 Floating Point Software Package
@@ -39,13 +39,13 @@
 | are unnecessary as ovf_res always returns the sign separately from
 | the exponent.
 |					;+inf
-EXT_PINF:	.long	0x7fff0000,0x00000000,0x00000000,0x00000000	
+EXT_PINF:	.long	0x7fff0000,0x00000000,0x00000000,0x00000000
 |					;largest +ext
-EXT_PLRG:	.long	0x7ffe0000,0xffffffff,0xffffffff,0x00000000	
+EXT_PLRG:	.long	0x7ffe0000,0xffffffff,0xffffffff,0x00000000
 |					;largest magnitude +sgl in ext
-SGL_PLRG:	.long	0x407e0000,0xffffff00,0x00000000,0x00000000	
+SGL_PLRG:	.long	0x407e0000,0xffffff00,0x00000000,0x00000000
 |					;largest magnitude +dbl in ext
-DBL_PLRG:	.long	0x43fe0000,0xffffffff,0xfffff800,0x00000000	
+DBL_PLRG:	.long	0x43fe0000,0xffffffff,0xfffff800,0x00000000
 |					;largest -ext
 
 tblovfl:
@@ -70,7 +70,7 @@
 |
 |	ovf_r_k --- overflow result calculation
 |
-| This entry point is used by kernel_ex.  
+| This entry point is used by kernel_ex.
 |
 | This forces the destination precision to be extended
 |
@@ -79,7 +79,7 @@
 |
 	.global	ovf_r_k
 ovf_r_k:
-	lea	ETEMP(%a6),%a0	|a0 points to source operand	
+	lea	ETEMP(%a6),%a0	|a0 points to source operand
 	bclrb	#sign_bit,ETEMP_EX(%a6)
 	sne	ETEMP_SGN(%a6)	|convert to internal IEEE format
 
@@ -112,10 +112,10 @@
 	beql	ovff_dbl		|force precision is double
 	movew	CMDREG3B(%a6),%d0		|get the command word again
 	andil	#0x7f,%d0			|clear all except operation
-	cmpil	#0x33,%d0			
+	cmpil	#0x33,%d0
 	beql	ovf_fsgl		|fsglmul or fsgldiv
 	cmpil	#0x30,%d0
-	beql	ovf_fsgl		
+	beql	ovf_fsgl
 	bra	ovf_fpcr		|instruction is none of the above
 |					;use FPCR
 ovf_e1_exc:
@@ -129,10 +129,10 @@
 	andil	#0x0000007f,%d0		|clear all except the op code
 	cmpil	#0x00000027,%d0
 	beql	ovf_fsgl		|fsglmul
-	cmpil 	#0x00000024,%d0
+	cmpil	#0x00000024,%d0
 	beql	ovf_fsgl		|fsgldiv
 	bra	ovf_fpcr		|none of the above, use FPCR
-| 
+|
 |
 | Inst is either fsgldiv or fsglmul.  Force extended precision.
 |
@@ -152,7 +152,7 @@
 ovf_fpcr:
 	bfextu	FPCR_MODE(%a6){#0:#2},%d0 |set round precision
 	bra	ovf_res
-	
+
 |
 |
 |	ovf_r_x3 --- overflow result calculation
@@ -174,9 +174,9 @@
 |	ovf_res --- overflow result calculation
 |
 | Input:
-|	a0 	points to operand in internal extended format
+|	a0	points to operand in internal extended format
 | Output:
-|	a0 	points to result in internal extended format
+|	a0	points to result in internal extended format
 |
 	.global	ovf_res
 ovf_res:
@@ -192,7 +192,7 @@
 EXT_RN:
 	leal	EXT_PINF,%a1	|answer is +/- infinity
 	bsetb	#inf_bit,FPSR_CC(%a6)
-	bra	set_sign	|now go set the sign	
+	bra	set_sign	|now go set the sign
 EXT_RZ:
 	leal	EXT_PLRG,%a1	|answer is +/- large number
 	bra	set_sign	|now go set the sign
@@ -312,10 +312,10 @@
 	movel	(%a7)+,%d0
 	rts
 |
-| 	g_rndpr --- put rounding precision in d0{1:0}
-|	
+|	g_rndpr --- put rounding precision in d0{1:0}
+|
 |	valid return codes are:
-|		00 - extended 
+|		00 - extended
 |		01 - single
 |		10 - double
 |
@@ -350,7 +350,7 @@
 | For move out instructions (opclass 011) the destination format
 | is the same as the rounding precision.  Pass results from g_dfmtou.
 |
-	bsr 	g_dfmtou	
+	bsr	g_dfmtou
 	rts
 op_0x0:
 	btstb	#E3,E_BYTE(%a6)
@@ -364,7 +364,7 @@
 	beql	unff_dbl
 	movew	CMDREG3B(%a6),%d0	|get the command word again
 	andil	#0x7f,%d0		|clear all except operation
-	cmpil	#0x33,%d0			
+	cmpil	#0x33,%d0
 	beql	unf_fsgl	|fsglmul or fsgldiv
 	cmpil	#0x30,%d0
 	beql	unf_fsgl	|fsgldiv or fsglmul
@@ -408,7 +408,7 @@
 | Force extended
 |
 unf_fsgl:
-	movel	#0,%d0		
+	movel	#0,%d0
 	rts
 |
 | Get rounding precision set in FPCR{7:6}.
@@ -436,7 +436,7 @@
 |	If E1, the format is from cmdreg1b{12:10}
 |	If E3, the format is extended.
 |
-|	Dest. Fmt.	
+|	Dest. Fmt.
 |		extended  010 -> 00
 |		single    001 -> 01
 |		double    101 -> 10
@@ -468,26 +468,26 @@
 | are unnecessary as unf_sub always returns the sign separately from
 | the exponent.
 |					;+zero
-EXT_PZRO:	.long	0x00000000,0x00000000,0x00000000,0x00000000	
+EXT_PZRO:	.long	0x00000000,0x00000000,0x00000000,0x00000000
 |					;+zero
-SGL_PZRO:	.long	0x3f810000,0x00000000,0x00000000,0x00000000	
+SGL_PZRO:	.long	0x3f810000,0x00000000,0x00000000,0x00000000
 |					;+zero
-DBL_PZRO:	.long	0x3c010000,0x00000000,0x00000000,0x00000000	
+DBL_PZRO:	.long	0x3c010000,0x00000000,0x00000000,0x00000000
 |					;smallest +ext denorm
-EXT_PSML:	.long	0x00000000,0x00000000,0x00000001,0x00000000	
+EXT_PSML:	.long	0x00000000,0x00000000,0x00000001,0x00000000
 |					;smallest +sgl denorm
-SGL_PSML:	.long	0x3f810000,0x00000100,0x00000000,0x00000000	
+SGL_PSML:	.long	0x3f810000,0x00000100,0x00000000,0x00000000
 |					;smallest +dbl denorm
-DBL_PSML:	.long	0x3c010000,0x00000000,0x00000800,0x00000000	
+DBL_PSML:	.long	0x3c010000,0x00000000,0x00000800,0x00000000
 |
 |	UNF_SUB --- underflow result calculation
 |
 | Input:
-|	d0 	contains round precision
+|	d0	contains round precision
 |	a0	points to input operand in the internal extended format
 |
 | Output:
-|	a0 	points to correct internal extended precision result.
+|	a0	points to correct internal extended precision result.
 |
 
 tblunf:
@@ -522,7 +522,7 @@
 uEXT_RN:
 	leal	EXT_PZRO,%a1	|answer is +/- zero
 	bsetb	#z_bit,FPSR_CC(%a6)
-	bra	uset_sign	|now go set the sign	
+	bra	uset_sign	|now go set the sign
 uEXT_RZ:
 	leal	EXT_PZRO,%a1	|answer is +/- zero
 	bsetb	#z_bit,FPSR_CC(%a6)
@@ -629,7 +629,7 @@
 |
 |
 | Input:
-|	L_SCR1: Data 
+|	L_SCR1: Data
 |	d1:     data size and dest register number formatted as:
 |
 |	32		5    4     3     2     1     0
diff -Nru a/arch/m68k/fpsp040/x_bsun.S b/arch/m68k/fpsp040/x_bsun.S
--- a/arch/m68k/fpsp040/x_bsun.S	Sun May 16 01:18:36 2004
+++ b/arch/m68k/fpsp040/x_bsun.S	Sun May 16 01:18:36 2004
@@ -13,8 +13,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 X_BSUN:	|idnt    2,1 | Motorola 040 Floating Point Software Package
diff -Nru a/arch/m68k/fpsp040/x_fline.S b/arch/m68k/fpsp040/x_fline.S
--- a/arch/m68k/fpsp040/x_fline.S	Sun May 16 01:18:33 2004
+++ b/arch/m68k/fpsp040/x_fline.S	Sun May 16 01:18:33 2004
@@ -13,8 +13,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 X_FLINE:	|idnt    2,1 | Motorola 040 Floating Point Software Package
@@ -52,7 +52,7 @@
 	leal	L_SCR1(%a6),%a1	|use L_SCR1 as scratch
 	movel	#4,%d0
 	addl	#4,%a6		|to offset the sub.l #4,a7 above so that
-|				;a6 can point correctly to the stack frame 
+|				;a6 can point correctly to the stack frame
 |				;before branching to mem_read
 	bsrl	mem_read
 	subl	#4,%a6
@@ -62,7 +62,7 @@
 	bne	not_mvcr	|exit if not
 	bfextu	%d0{#16:#6},%d1
 	cmpib	#0x17,%d1		|check if it is an FMOVECR encoding
-	bne	not_mvcr	
+	bne	not_mvcr
 |				;if an FMOVECR instruction, fix stack
 |				;and go to FPSP_UNIMP
 fix_stack:
diff -Nru a/arch/m68k/fpsp040/x_operr.S b/arch/m68k/fpsp040/x_operr.S
--- a/arch/m68k/fpsp040/x_operr.S	Sun May 16 01:18:35 2004
+++ b/arch/m68k/fpsp040/x_operr.S	Sun May 16 01:18:35 2004
@@ -13,8 +13,8 @@
 | the dest format is integer (b, w, l) and the operr is caused by
 | integer overflow, or the source op is inf, then the result stored is
 | garbage.
-| There are three cases in which operr is incorrectly signaled on the 
-| 040.  This occurs for move_out of format b, w, or l for the largest 
+| There are three cases in which operr is incorrectly signaled on the
+| 040.  This occurs for move_out of format b, w, or l for the largest
 | negative integer (-2^7 for b, -2^15 for w, -2^31 for l).
 |
 |	  On opclass = 011 fmove.(b,w,l) that causes a conversion
@@ -36,15 +36,15 @@
 | Note 2: For trap enabled 040 does the following:
 | If the inst is move_out, then same as Note 1.
 | If the inst is not move_out, the dest is not modified.
-| The exceptional operand is not defined for integer overflow 
+| The exceptional operand is not defined for integer overflow
 | during a move_out.
 |
 
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 X_OPERR:	|idnt    2,1 | Motorola 040 Floating Point Software Package
@@ -77,7 +77,7 @@
 	beqs	operr_end
 
 |
-| If the destination size is B,W,or L, the operr must be 
+| If the destination size is B,W,or L, the operr must be
 | handled here.
 |
 	movel	CMDREG1B(%a6),%d0
@@ -90,9 +90,9 @@
 	beq	operr_byte
 
 |
-| The size is not B,W,or L, so the operr is handled by the 
+| The size is not B,W,or L, so the operr is handled by the
 | kernel handler.  Set the operr bits and clean up, leaving
-| only the integer exception frame on the stack, and the 
+| only the integer exception frame on the stack, and the
 | fpu in the original exceptional state.
 |
 operr_end:
@@ -111,7 +111,7 @@
 	moveb	STAG(%a6),%d0	|test stag for nan
 	andib	#0xe0,%d0		|clr all but tag
 	cmpib	#0x60,%d0		|check for nan
-	beq	operr_nan	
+	beq	operr_nan
 	cmpil	#0x80000000,FPTEMP_LO(%a6) |test if ls lword is special
 	bnes	chklerr		|if not equal, check for incorrect operr
 	bsr	check_upper	|check if exp and ms mant are special
@@ -158,7 +158,7 @@
 	moveb	STAG(%a6),%d0	|test stag for nan
 	andib	#0xe0,%d0		|clr all but tag
 	cmpib	#0x60,%d0		|check for nan
-	beq	operr_nan	
+	beq	operr_nan
 	cmpil	#0xffff8000,FPTEMP_LO(%a6) |test if ls lword is special
 	bnes	chkwerr		|if not equal, check for incorrect operr
 	bsr	check_upper	|check if exp and ms mant are special
@@ -185,7 +185,7 @@
 	moveb	STAG(%a6),%d0	|test stag for nan
 	andib	#0xe0,%d0		|clr all but tag
 	cmpib	#0x60,%d0		|check for nan
-	beqs	operr_nan	
+	beqs	operr_nan
 	cmpil	#0xffffff80,FPTEMP_LO(%a6) |test if ls lword is special
 	bnes	chkberr		|if not equal, check for incorrect operr
 	bsr	check_upper	|check if exp and ms mant are special
@@ -229,7 +229,7 @@
 	bclrb	#inex2_bit,FPSR_EXCEPT(%a6)
 	bclrb	#ainex_bit,FPSR_AEXCEPT(%a6)
 	fmovel	#0,%FPSR
-	
+
 	tstw	FPTEMP_EX(%a6)	|check sign
 	blts	load_neg
 	movel	#0x7fffffff,%d0
@@ -280,7 +280,7 @@
 	bsrl	mem_write
 	rts
 |
-| Check the exponent for $c000 and the upper 32 bits of the 
+| Check the exponent for $c000 and the upper 32 bits of the
 | mantissa for $ffffffff.  If both are true, return d0 clr
 | and store the lower n bits of the least lword of FPTEMP
 | to d0 for write out.  If not, it is a real operr, and set d0.
diff -Nru a/arch/m68k/fpsp040/x_ovfl.S b/arch/m68k/fpsp040/x_ovfl.S
--- a/arch/m68k/fpsp040/x_ovfl.S	Sun May 16 01:18:34 2004
+++ b/arch/m68k/fpsp040/x_ovfl.S	Sun May 16 01:18:34 2004
@@ -8,7 +8,7 @@
 |	or when storing to memory, the contents of a floating-point
 |	data register are too large to be represented in the
 |	destination format.
-|		
+|
 | Trap disabled results
 |
 | If the instruction is move_out, then garbage is stored in the
@@ -35,8 +35,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 X_OVFL:	|idnt    2,1 | Motorola 040 Floating Point Software Package
@@ -73,7 +73,7 @@
 |	if overflow traps not enabled check for inexact exception
 |
 	btstb	#ovfl_bit,FPCR_ENABLE(%a6)
-	beqs	ck_inex	
+	beqs	ck_inex
 |
 	btstb		#E3,E_BYTE(%a6)
 	beqs		no_e3_1
@@ -120,7 +120,7 @@
 	frestore	(%a7)+
 	unlk		%a6
 	bral		real_inex
-	
+
 ovfl_exit:
 	bclrb	#E3,E_BYTE(%a6)	|test and clear E3 bit
 	beqs	e1_set
@@ -152,7 +152,7 @@
 |
 ovf_adj:
 |
-| Have a0 point to the correct operand. 
+| Have a0 point to the correct operand.
 |
 	btstb	#E3,E_BYTE(%a6)	|test E3 bit
 	beqs	ovf_e1
@@ -175,10 +175,10 @@
 | CCs are defined to be 'not affected' for the opclass3 instruction.
 |
 	moveb	FPSR_CC(%a6),L_SCR1(%a6)
- 	bsrl	ovf_r_x3	|returns a0 pointing to result
+	bsrl	ovf_r_x3	|returns a0 pointing to result
 	moveb	L_SCR1(%a6),FPSR_CC(%a6)
 	bral	store		|stores to memory or register
-	
+
 not_opc011:
 	bsrl	ovf_r_x2	|returns a0 pointing to result
 	bral	store		|stores to memory or register
diff -Nru a/arch/m68k/fpsp040/x_snan.S b/arch/m68k/fpsp040/x_snan.S
--- a/arch/m68k/fpsp040/x_snan.S	Sun May 16 01:18:37 2004
+++ b/arch/m68k/fpsp040/x_snan.S	Sun May 16 01:18:37 2004
@@ -14,7 +14,7 @@
 | of the mantissa are sent to the integer unit).
 |
 | For trap enabled the 040 does the following:
-| If the inst is move_out, then the results are the same as for trap 
+| If the inst is move_out, then the results are the same as for trap
 | disabled with the exception posted.  If the instruction is not move_
 | out, the dest. is not modified, and the exception is posted.
 |
@@ -22,8 +22,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 X_SNAN:	|idnt    2,1 | Motorola 040 Floating Point Software Package
@@ -139,7 +139,7 @@
 	bral		fpsp_done
 
 |
-| Move_out 
+| Move_out
 |
 move_out:
 	movel		EXC_EA(%a6),%a0	|get <ea> from exc frame
@@ -147,18 +147,18 @@
 	bfextu		CMDREG1B(%a6){#3:#3},%d0 |move rx field to d0{2:0}
 	cmpil		#0,%d0		|check for long
 	beqs		sto_long	|branch if move_out long
-	
+
 	cmpil		#4,%d0		|check for word
 	beqs		sto_word	|branch if move_out word
-	
+
 	cmpil		#6,%d0		|check for byte
 	beqs		sto_byte	|branch if move_out byte
-	
+
 |
 | Not byte, word or long
 |
 	rts
-|	
+|
 | Get the 32 most significant bits of etemp mantissa
 |
 sto_long:
@@ -167,13 +167,13 @@
 |
 | Set signalling nan bit
 |
-	bsetl		#30,%d1			
+	bsetl		#30,%d1
 |
 | Store to the users destination address
 |
 	tstl		%a0		|check if <ea> is 0
 	beqs		wrt_dn		|destination is a data register
-	
+
 	movel		%d1,-(%a7)	|move the snan onto the stack
 	movel		%a0,%a1		|load dest addr into a1
 	movel		%a7,%a0		|load src addr of snan into a0
@@ -189,7 +189,7 @@
 |
 | Set signalling nan bit
 |
-	bsetl		#30,%d1			
+	bsetl		#30,%d1
 |
 | Store to the users destination address
 |
@@ -211,7 +211,7 @@
 |
 | Set signalling nan bit
 |
-	bsetl		#30,%d1			
+	bsetl		#30,%d1
 |
 | Store to the users destination address
 |
@@ -253,7 +253,7 @@
 | Check if it is a src nan or dst nan
 |
 not_out:
-	movel		DTAG(%a6),%d0	
+	movel		DTAG(%a6),%d0
 	bfextu		%d0{#0:#3},%d0	|isolate dtag in lsbs
 
 	cmpib		#3,%d0		|check for nan in destination
diff -Nru a/arch/m68k/fpsp040/x_store.S b/arch/m68k/fpsp040/x_store.S
--- a/arch/m68k/fpsp040/x_store.S	Sun May 16 01:18:37 2004
+++ b/arch/m68k/fpsp040/x_store.S	Sun May 16 01:18:37 2004
@@ -11,8 +11,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 X_STORE:	|idnt    2,1 | Motorola 040 Floating Point Software Package
@@ -54,7 +54,7 @@
 |	in the USER_FPn variable on the stack because all exception
 |	handlers restore fp0-fp3 from there.
 |
-	cmpb	#0x80,%d0		
+	cmpb	#0x80,%d0
 	bnes	not_fp0
 	fmovemx %fp0-%fp0,USER_FP0(%a6)
 	rts
@@ -115,18 +115,18 @@
 |	get rid of ext integer bit
 |	dbl_mant = ext_mant{62:12}
 |
-|	    	---------------   ---------------    ---------------
+|		---------------   ---------------    ---------------
 |  extended ->  |s|    exp    |   |1| ms mant   |    | ls mant     |
-|	    	---------------   ---------------    ---------------
-|	   	 95	    64    63 62	      32      31     11	  0
+|		---------------   ---------------    ---------------
+|		 95	    64    63 62	      32      31     11	  0
 |				     |			     |
 |				     |			     |
 |				     |			     |
-|		 	             v   		     v
-|	    		      ---------------   ---------------
-|  double   ->  	      |s|exp| mant  |   |  mant       |
-|	    		      ---------------   ---------------
-|	   	 	      63     51   32   31	       0
+|			             v			     v
+|			      ---------------   ---------------
+|  double   ->		      |s|exp| mant  |   |  mant       |
+|			      ---------------   ---------------
+|			      63     51   32   31	       0
 |
 dest_dbl:
 	clrl	%d0		|clear d0
@@ -137,7 +137,7 @@
 	addw	#0x3ff,%d0	|add double precision bias
 	swap	%d0		|d0 now in upper word
 	lsll	#4,%d0		|d0 now in proper place for dbl prec exp
-	tstb	LOCAL_SGN(%a1)	
+	tstb	LOCAL_SGN(%a1)
 	beqs	get_mant	|if positive, go process mantissa
 	bsetl	#31,%d0		|if negative, put in sign information
 |				; before continuing
@@ -186,18 +186,18 @@
 |	get rid of ext integer bit
 |	sgl_mant = ext_mant{62:12}
 |
-|	    	---------------   ---------------    ---------------
+|		---------------   ---------------    ---------------
 |  extended ->  |s|    exp    |   |1| ms mant   |    | ls mant     |
-|	    	---------------   ---------------    ---------------
-|	   	 95	    64    63 62	   40 32      31     12	  0
+|		---------------   ---------------    ---------------
+|		 95	    64    63 62	   40 32      31     12	  0
 |				     |	   |
 |				     |	   |
 |				     |	   |
-|		 	             v     v
-|	    		      ---------------
-|  single   ->  	      |s|exp| mant  |
-|	    		      ---------------
-|	   	 	      31     22     0
+|			             v     v
+|			      ---------------
+|  single   ->		      |s|exp| mant  |
+|			      ---------------
+|			      31     22     0
 |
 dest_sgl:
 	clrl	%d0
@@ -208,7 +208,7 @@
 	addw	#0x7f,%d0		|add single precision bias
 	swap	%d0		|put exp in upper word of d0
 	lsll	#7,%d0		|shift it into single exp bits
-	tstb	LOCAL_SGN(%a1)	
+	tstb	LOCAL_SGN(%a1)
 	beqs	get_sman	|if positive, continue
 	bsetl	#31,%d0		|if negative, put in sign first
 	bras	get_sman	|get mantissa
@@ -240,7 +240,7 @@
 	orl	#0x10,%d1		|reg_dest wants size added to reg#
 	bral	reg_dest	|size is X, rts in reg_dest will
 |				;return to caller of dest_sgl
-	
+
 dest_ext:
 	tstb	LOCAL_SGN(%a1)	|put back sign into exponent word
 	beqs	dstx_cont
diff -Nru a/arch/m68k/fpsp040/x_unfl.S b/arch/m68k/fpsp040/x_unfl.S
--- a/arch/m68k/fpsp040/x_unfl.S	Sun May 16 01:18:33 2004
+++ b/arch/m68k/fpsp040/x_unfl.S	Sun May 16 01:18:33 2004
@@ -4,25 +4,25 @@
 |	fpsp_unfl --- FPSP handler for underflow exception
 |
 | Trap disabled results
-|	For 881/2 compatibility, sw must denormalize the intermediate 
-| result, then store the result.  Denormalization is accomplished 
-| by taking the intermediate result (which is always normalized) and 
-| shifting the mantissa right while incrementing the exponent until 
-| it is equal to the denormalized exponent for the destination 
-| format.  After denormalization, the result is rounded to the 
+|	For 881/2 compatibility, sw must denormalize the intermediate
+| result, then store the result.  Denormalization is accomplished
+| by taking the intermediate result (which is always normalized) and
+| shifting the mantissa right while incrementing the exponent until
+| it is equal to the denormalized exponent for the destination
+| format.  After denormalization, the result is rounded to the
 | destination format.
-|		
+|
 | Trap enabled results
-| 	All trap disabled code applies.	In addition the exceptional 
-| operand needs to made available to the user with a bias of $6000 
+|	All trap disabled code applies.	In addition the exceptional
+| operand needs to made available to the user with a bias of $6000
 | added to the exponent.
 |
 
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 X_UNFL:	|idnt    2,1 | Motorola 040 Floating Point Software Package
@@ -91,7 +91,7 @@
 
 |
 | Inexact enabled and reported, and we must take an inexact exception
-|	
+|
 take_inex:
 	btstb		#E3,E_BYTE(%a6)
 	beqs		no_e3_2
@@ -145,7 +145,7 @@
 |					;1=sgl, 2=dbl
 |					;we need the RND_PREC in the
 |					;upper word for round
-	movew		#0,-(%a7)	
+	movew		#0,-(%a7)
 	movew		%d0,-(%a7)	|copy RND_PREC to stack
 |
 |
@@ -199,7 +199,7 @@
 | must not corrupt a0 and d0.
 |
 |
-| Perform Round	
+| Perform Round
 |	Input:		a0 points to input operand
 |			d0{31:29} has guard, round, sticky
 |			d1{01:00} has rounding mode
@@ -222,7 +222,7 @@
 	bsrl		g_dfmtou
 	tstb		%d0
 	beqs		ext_opc011	|If extended, do not subtract
-| 				;If destination format is sgl/dbl, 
+|				;If destination format is sgl/dbl,
 	tstb		LOCAL_HI(%a0)	|If rounded result is normal,don't
 |					;subtract
 	bmis		ext_opc011
@@ -252,12 +252,12 @@
 	bnes		ck_sgn
 	bsetb		#z_bit,FPSR_CC(%a6) |set condition codes if zero
 ck_sgn:
-	btstb 		#sign_bit,LOCAL_EX(%a0)	|check the sign bit
+	btstb		#sign_bit,LOCAL_EX(%a0)	|check the sign bit
 	beqs		unf_done
 	bsetb		#neg_bit,FPSR_CC(%a6)
 
 |
-| Finish.  
+| Finish.
 |
 unf_done:
 	btstb		#inex2_bit,FPSR_EXCEPT(%a6)
diff -Nru a/arch/m68k/fpsp040/x_unimp.S b/arch/m68k/fpsp040/x_unimp.S
--- a/arch/m68k/fpsp040/x_unimp.S	Sun May 16 01:18:36 2004
+++ b/arch/m68k/fpsp040/x_unimp.S	Sun May 16 01:18:36 2004
@@ -1,14 +1,14 @@
 |
 |	x_unimp.sa 3.3 7/1/91
 |
-|	fpsp_unimp --- FPSP handler for unimplemented instruction	
+|	fpsp_unimp --- FPSP handler for unimplemented instruction
 |	exception.
 |
 | Invoked when the user program encounters a floating-point
 | op-code that hardware does not support.  Trap vector# 11
 | (See table 8-1 MC68030 User's Manual).
 |
-| 
+|
 | Note: An fsave for an unimplemented inst. will create a short
 | fsave stack.
 |
@@ -22,8 +22,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 X_UNIMP:	|idnt    2,1 | Motorola 040 Floating Point Software Package
diff -Nru a/arch/m68k/fpsp040/x_unsupp.S b/arch/m68k/fpsp040/x_unsupp.S
--- a/arch/m68k/fpsp040/x_unsupp.S	Sun May 16 01:18:36 2004
+++ b/arch/m68k/fpsp040/x_unsupp.S	Sun May 16 01:18:36 2004
@@ -3,18 +3,18 @@
 |
 |	fpsp_unsupp --- FPSP handler for unsupported data type exception
 |
-| Trap vector #55	(See table 8-1 Mc68030 User's manual).	
+| Trap vector #55	(See table 8-1 Mc68030 User's manual).
 | Invoked when the user program encounters a data format (packed) that
 | hardware does not support or a data type (denormalized numbers or un-
 | normalized numbers).
-| Normalizes denorms and unnorms, unpacks packed numbers then stores 
-| them back into the machine to let the 040 finish the operation.  
+| Normalizes denorms and unnorms, unpacks packed numbers then stores
+| them back into the machine to let the 040 finish the operation.
 |
 | Unsupp calls two routines:
-| 	1. get_op -  gets the operand(s)
-| 	2. res_func - restore the function back into the 040 or
-| 			if fmove.p fpm,<ea> then pack source (fpm)
-| 			and store in users memory <ea>.
+|	1. get_op -  gets the operand(s)
+|	2. res_func - restore the function back into the 040 or
+|			if fmove.p fpm,<ea> then pack source (fpm)
+|			and store in users memory <ea>.
 |
 |  Input: Long fsave stack frame
 |
@@ -23,8 +23,8 @@
 |		Copyright (C) Motorola, Inc. 1990
 |			All Rights Reserved
 |
-|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA 
-|	The copyright notice above does not evidence any  
+|	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
+|	The copyright notice above does not evidence any
 |	actual or intended publication of such source code.
 
 X_UNSUPP:	|idnt    2,1 | Motorola 040 Floating Point Software Package
diff -Nru a/arch/m68k/hp300/hp300map.map b/arch/m68k/hp300/hp300map.map
--- a/arch/m68k/hp300/hp300map.map	Sun May 16 01:18:36 2004
+++ b/arch/m68k/hp300/hp300map.map	Sun May 16 01:18:36 2004
@@ -3,29 +3,29 @@
 # Change the above line into
 #	keymaps 0-2,4-6,8,12
 # in case you want the entries
-#	altgr   control keycode  83 = Boot            
-#	altgr   control keycode 111 = Boot            
+#	altgr   control keycode  83 = Boot
+#	altgr   control keycode 111 = Boot
 # below.
 #
 # In fact AltGr is used very little, and one more keymap can
 # be saved by mapping AltGr to Alt (and adapting a few entries):
 # keycode 100 = Alt
 #
-keycode   1 = 
+keycode   1 =
 keycode   2 = Alt
 keycode   3 = Alt
 keycode   4 = Shift
 keycode   5 = Shift
 keycode   6 = Control
-keycode   7 = 
-keycode   8 = 
-keycode   9 = 
-keycode  10 = 
-keycode  11 = 
-keycode  12 = 
-keycode  13 = 
+keycode   7 =
+keycode   8 =
+keycode   9 =
+keycode  10 =
+keycode  11 =
+keycode  12 =
+keycode  13 =
 keycode  14 =
-keycode  15 = 
+keycode  15 =
 keycode  16 =
 keycode  17 =
 keycode  18 =
@@ -34,12 +34,12 @@
 keycode  21 =
 keycode  22 =
 keycode  23 =
-keycode  24 = b               
-keycode  25 = v               
+keycode  24 = b
+keycode  25 = v
 keycode  26 = c
 keycode  27 = x
 keycode  28 = z
-keycode  29 = 
+keycode  29 =
 keycode  30 =
 keycode  31 = Escape		Delete
 keycode  32 =
@@ -55,7 +55,7 @@
 keycode  42 = f
 keycode  43 = d
 keycode  44 = s
-keycode  45 = a               
+keycode  45 = a
 keycode  46 =
 keycode  47 = Caps_Lock
 keycode  48 = u
@@ -65,8 +65,8 @@
 keycode  52 = e
 keycode  53 = w
 keycode  54 = q
-keycode  55 = Tab		Tab             
-	alt     keycode    55 = Meta_Tab        
+keycode  55 = Tab		Tab
+	alt     keycode    55 = Meta_Tab
 keycode  56 = seven		ampersand
 keycode  57 = six		asciicircum
 keycode  58 = five		percent
@@ -74,19 +74,19 @@
 keycode  60 = three		numbersign
 keycode  61 = two		at		at
 keycode  62 = one		exclam		exclam
-keycode  63 = grave		asciitilde      
-	control keycode    63 = nul             
-	alt     keycode    63 = Meta_grave      
-keycode  64 =        
-keycode  65 = 
-keycode  66 = 
-keycode  67 = 
-keycode  68 = 
-keycode  69 = 
-keycode  70 = 
-keycode  71 = 
+keycode  63 = grave		asciitilde
+	control keycode    63 = nul
+	alt     keycode    63 = Meta_grave
+keycode  64 =
+keycode  65 =
+keycode  66 =
+keycode  67 =
+keycode  68 =
+keycode  69 =
+keycode  70 =
+keycode  71 =
 keycode  72 =
-keycode  73 = F4       
+keycode  73 = F4
 	control keycode	   73 = Console_4
 keycode  74 = F3
 	control keycode	   74 = Console_3
@@ -107,8 +107,8 @@
 keycode  84 = F8
 	control keycode	   84 = Console_8
 keycode  85 =
-keycode  86 = 
-keycode  87 = 
+keycode  86 =
+keycode  87 =
 keycode  88 = eight		asterisk	asterisk
 keycode  89 = nine		parenleft	bracketleft
 keycode  90 = zero		parenright	bracketright
@@ -122,30 +122,30 @@
 keycode  98 = p
 keycode  99 = bracketleft	braceleft
 keycode 100 = bracketright	braceright
-keycode 101 = backslash		bar             
+keycode 101 = backslash		bar
 	control keycode   101 = Control_backslash
-	alt     keycode   101 = Meta_backslash  
-keycode 102 = 
-keycode 103 = 
+	alt     keycode   101 = Meta_backslash
+keycode 102 =
+keycode 103 =
 keycode 104 = j
 keycode 105 = k
 keycode 106 = l
 keycode 107 = semicolon		colon
-	alt     keycode   107 = Meta_semicolon  
-keycode 108 = apostrophe	quotedbl        
-	control keycode   108 = Control_g       
-	alt     keycode   108 = Meta_apostrophe 
+	alt     keycode   107 = Meta_semicolon
+keycode 108 = apostrophe	quotedbl
+	control keycode   108 = Control_g
+	alt     keycode   108 = Meta_apostrophe
 keycode 109 = Return
-keycode 110 = 
-keycode 111 = 
+keycode 110 =
+keycode 111 =
 keycode 112 = m
 keycode 113 = comma		less
 keycode 114 = period		greater
 keycode 115 = slash		question
-keycode 116 = 
-keycode 117 = 
-keycode 118 = 
-keycode 119 = 
+keycode 116 =
+keycode 117 =
+keycode 118 =
+keycode 119 =
 keycode 120 = n
 keycode 121 = space		space
 keycode 122 =
diff -Nru a/arch/m68k/hp300/ints.c b/arch/m68k/hp300/ints.c
--- a/arch/m68k/hp300/ints.c	Sun May 16 01:18:36 2004
+++ b/arch/m68k/hp300/ints.c	Sun May 16 01:18:36 2004
@@ -29,7 +29,7 @@
  * Service routines are added via hp300_request_irq() and removed
  * via hp300_free_irq(). The device driver should set IRQ_FLG_FAST
  * if it needs to be serviced early (eg FIFOless UARTs); this will
- * cause it to be added at the front of the queue rather than 
+ * cause it to be added at the front of the queue rather than
  * the back.
  * Currently IRQ_FLG_SLOW and flags=0 are treated identically; if
  * we needed three levels of priority we could distinguish them
@@ -52,7 +52,7 @@
                 t->handler(irq, t->dev_id, fp);
         /* We could put in some accounting routines, checks for stray interrupts,
          * etc, in here. Note that currently we can't tell whether or not
-         * a handler handles the interrupt, though. 
+         * a handler handles the interrupt, though.
          */
 	return IRQ_HANDLED;
 }
@@ -80,7 +80,7 @@
                       unsigned long flags, const char *devname, void *dev_id)
 {
         irq_node_t *t, *n = new_irq_node();
-        
+
         if (!n)                                   /* oops, no free nodes */
                 return -ENOMEM;
 
@@ -117,7 +117,7 @@
         unsigned long flags;
 
         spin_lock_irqsave(&irqlist_lock, flags);
-        
+
         t = hp300_irq_list[irq];
         if (!t)                                   /* no handlers at all for that IRQ */
         {
@@ -125,7 +125,7 @@
                 spin_unlock_irqrestore(&irqlist_lock, flags);
 		return;
         }
-        
+
         if (t->dev_id == dev_id)
         {                                         /* removing first handler on chain */
                 t->flags = IRQ_FLG_STD;           /* we probably don't really need these */
@@ -136,9 +136,9 @@
 		spin_unlock_irqrestore(&irqlist_lock, flags);
 		return;
         }
-        
+
         /* OK, must be removing from middle of the chain */
-        
+
         for (t = hp300_irq_list[irq]; t->next && t->next->dev_id != dev_id; t = t->next)
                 /* do nothing */;
         if (!t->next)
@@ -153,7 +153,7 @@
 	t->next->devname = NULL;
 	t->next->handler = NULL;
         t->next = t->next->next;
-        
+
 	spin_unlock_irqrestore(&irqlist_lock, flags);
 }
 
diff -Nru a/arch/m68k/ifpsp060/CHANGES b/arch/m68k/ifpsp060/CHANGES
--- a/arch/m68k/ifpsp060/CHANGES	Sun May 16 01:18:36 2004
+++ b/arch/m68k/ifpsp060/CHANGES	Sun May 16 01:18:36 2004
@@ -5,10 +5,10 @@
 Production Release P1.00 -- October 10, 1994
 
 M68060 Software Package Copyright © 1993, 1994 Motorola Inc.  All rights reserved.
- 
+
 THE SOFTWARE is provided on an "AS IS" basis and without warranty.
 To the maximum extent permitted by applicable law,
-MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, 
+MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED,
 INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
 and any warranty against infringement with regard to the SOFTWARE
 (INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials.
@@ -31,7 +31,7 @@
 ---------------------------
 
 1) "movep" emulation where data was being read from memory
-was reading the intermediate bytes. Emulation now only 
+was reading the intermediate bytes. Emulation now only
 reads the required bytes.
 
 2) "flogn", "flog2", and "flog10" of "1" was setting the
@@ -57,7 +57,7 @@
 	For example, if a user executed "fsin.x ADDR,fp0" where
 	ADDR should cause a "segmentation violation", the memory read
 	requested by the package should return a failing value
-	to the package. Since the package currently ignores this 
+	to the package. Since the package currently ignores this
 	return value, the user program will continue to the
 	next instruction, and the result created in fp0 will be
 	undefined.
@@ -76,16 +76,16 @@
 	as described in the MC68060 User's Manual.
 
 	For instruction read access errors, the info stacked is:
-		SR 	= SR at time of exception
-		PC 	= PC of instruction being emulated
+		SR	= SR at time of exception
+		PC	= PC of instruction being emulated
 		VOFF	= $4008 (stack frame format type)
 		ADDRESS	= PC of instruction being emulated
 		FSLW	= FAULT STATUS LONGWORD
 
 	The valid FSLW bits are:
-		bit 27 		= 1	(misaligned bit)
-		bit 24 		= 1	(read)
-		bit 23 		= 0	(write)
+		bit 27		= 1	(misaligned bit)
+		bit 24		= 1	(read)
+		bit 23		= 0	(write)
 		bit 22:21	= 10	(SIZE = word)
 		bit 20:19	= 00	(TT)
 		bit 18:16	= x10	(TM; x = 1 for supervisor mode)
@@ -98,15 +98,15 @@
 	other bits.
 
 	For data read/write access errors, the info stacked is:
-		SR 	= SR at time of exception
-		PC 	= PC of instruction being emulated
+		SR	= SR at time of exception
+		PC	= PC of instruction being emulated
 		VOFF	= $4008 (stack frame format type)
 		ADDRESS	= Address of source or destination operand
 		FSLW	= FAULT STATUS LONGWORD
 
 	The valid FSLW bits are:
-		bit 27 		= 0	(misaligned bit)
-		bit 24 		= x	(read; 1 if read, 0 if write)
+		bit 27		= 0	(misaligned bit)
+		bit 24		= x	(read; 1 if read, 0 if write)
 		bit 23		= x	(write; 1 if write, 0 if read)
 		bit 22:21	= xx	(SIZE; see MC68060 User's Manual)
 		bit 20:19	= 00	(TT)
diff -Nru a/arch/m68k/ifpsp060/MISC b/arch/m68k/ifpsp060/MISC
--- a/arch/m68k/ifpsp060/MISC	Sun May 16 01:18:34 2004
+++ b/arch/m68k/ifpsp060/MISC	Sun May 16 01:18:34 2004
@@ -5,10 +5,10 @@
 Production Release P1.00 -- October 10, 1994
 
 M68060 Software Package Copyright © 1993, 1994 Motorola Inc.  All rights reserved.
- 
+
 THE SOFTWARE is provided on an "AS IS" basis and without warranty.
 To the maximum extent permitted by applicable law,
-MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, 
+MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED,
 INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
 and any warranty against infringement with regard to the SOFTWARE
 (INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials.
@@ -176,7 +176,7 @@
 imovep.s    : 2.8
 ichk2cmp2.s : 2.6
 idiv64.s    : 2.10
-imul64.s    : 
+imul64.s    :
 icas2.s     : 2.11
 icas.s      : 2.12
 icas2_core.s: 2.6
diff -Nru a/arch/m68k/ifpsp060/README b/arch/m68k/ifpsp060/README
--- a/arch/m68k/ifpsp060/README	Sun May 16 01:18:35 2004
+++ b/arch/m68k/ifpsp060/README	Sun May 16 01:18:35 2004
@@ -5,10 +5,10 @@
 Production Release P1.00 -- October 10, 1994
 
 M68060 Software Package Copyright © 1993, 1994 Motorola Inc.  All rights reserved.
- 
+
 THE SOFTWARE is provided on an "AS IS" basis and without warranty.
 To the maximum extent permitted by applicable law,
-MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, 
+MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED,
 INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
 and any warranty against infringement with regard to the SOFTWARE
 (INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials.
diff -Nru a/arch/m68k/ifpsp060/TEST.DOC b/arch/m68k/ifpsp060/TEST.DOC
--- a/arch/m68k/ifpsp060/TEST.DOC	Sun May 16 01:18:36 2004
+++ b/arch/m68k/ifpsp060/TEST.DOC	Sun May 16 01:18:36 2004
@@ -5,10 +5,10 @@
 Production Release P1.00 -- October 10, 1994
 
 M68060 Software Package Copyright © 1993, 1994 Motorola Inc.  All rights reserved.
- 
+
 THE SOFTWARE is provided on an "AS IS" basis and without warranty.
 To the maximum extent permitted by applicable law,
-MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, 
+MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED,
 INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
 and any warranty against infringement with regard to the SOFTWARE
 (INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials.
@@ -56,7 +56,7 @@
 -----------------------
 
 (top of module)
-	----------------- 
+	-----------------
 	|		| - 128 byte-sized section
    (1)  |   Call-Out	| - 4 bytes per entry (user fills these in)
 	|		|
@@ -74,8 +74,8 @@
 The first section of this module is the "Call-out" section. This section
 is NOT INCLUDED in {i,f}test.sa (an example "Call-out" section is provided at
 the end of this file). The purpose of this section is to allow the test
-routines to reference external printing functions that must be provided 
-by the host operating system. This section MUST be exactly 128 bytes in 
+routines to reference external printing functions that must be provided
+by the host operating system. This section MUST be exactly 128 bytes in
 size. There are 32 fields, each 4 bytes in size. Each field corresponds
 to a function required by the test packages (these functions and their
 location are listed in "68060{ISP,FPSP}-TEST call-outs" below). Each field
@@ -152,7 +152,7 @@
 		    (2) unsupported data type exceptions
 		    (3) non-maskable overflow/underflow exceptions
 
-FP unimplemented: tests FP unimplemented exception. this one is 
+FP unimplemented: tests FP unimplemented exception. this one is
 		  separate from the previous tests for systems that don't
 		  want FP unimplemented instructions.
 
@@ -194,7 +194,7 @@
 # beginning of "Call-out" section; provided by integrator.
 # MUST be 128 bytes long.
 _060FPSP_TEST:
-	long	_print_str - _060FPSP_TEST	
+	long	_print_str - _060FPSP_TEST
 	long	_print_num - _060FPSP_TEST
 	space	120
 
diff -Nru a/arch/m68k/ifpsp060/fplsp.doc b/arch/m68k/ifpsp060/fplsp.doc
--- a/arch/m68k/ifpsp060/fplsp.doc	Sun May 16 01:18:33 2004
+++ b/arch/m68k/ifpsp060/fplsp.doc	Sun May 16 01:18:33 2004
@@ -5,10 +5,10 @@
 Production Release P1.00 -- October 10, 1994
 
 M68060 Software Package Copyright © 1993, 1994 Motorola Inc.  All rights reserved.
- 
+
 THE SOFTWARE is provided on an "AS IS" basis and without warranty.
 To the maximum extent permitted by applicable law,
-MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, 
+MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED,
 INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
 and any warranty against infringement with regard to the SOFTWARE
 (INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials.
@@ -34,7 +34,7 @@
 68060SP Floating-Point Software Package. The routines
 included in this module can be used to emulate the
 FP instructions not implemented in 68060 hardware. These
-instructions normally take exception vector #11 
+instructions normally take exception vector #11
 "FP Unimplemented Instruction".
 
 By re-compiling a program that uses these instructions, and
diff -Nru a/arch/m68k/ifpsp060/fpsp.doc b/arch/m68k/ifpsp060/fpsp.doc
--- a/arch/m68k/ifpsp060/fpsp.doc	Sun May 16 01:18:34 2004
+++ b/arch/m68k/ifpsp060/fpsp.doc	Sun May 16 01:18:34 2004
@@ -5,10 +5,10 @@
 Production Release P1.00 -- October 10, 1994
 
 M68060 Software Package Copyright © 1993, 1994 Motorola Inc.  All rights reserved.
- 
+
 THE SOFTWARE is provided on an "AS IS" basis and without warranty.
 To the maximum extent permitted by applicable law,
-MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, 
+MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED,
 INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
 and any warranty against infringement with regard to the SOFTWARE
 (INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials.
@@ -31,7 +31,7 @@
 
 The file fpsp.sa contains the 68060 Floating-Point Software
 Package. This package is essentially a set of exception handlers
-that can be integrated into an operating system. 
+that can be integrated into an operating system.
 These exception handlers emulate Unimplemented FP instructions,
 instructions using unimplemented data types, and instructions
 using unimplemented addressing modes. In addition, this package
@@ -62,14 +62,14 @@
 -----------------------
 
 (top of module)
-	----------------- 
+	-----------------
 	|		| - 128 byte-sized section
    (1)  |   Call-Out	| - 4 bytes per entry (user fills these in)
 	|		| - example routines in fskeleton.s
 	-----------------
 	|		| - 8 bytes per entry
    (2)  | Entry Point	| - user does "bra" or "jmp" to this address
-	|		| 
+	|		|
 	-----------------
 	|		| - code section
    (3)  ~		~
@@ -79,14 +79,14 @@
 
 The first section of this module is the "Call-out" section. This section
 is NOT INCLUDED in fpsp.sa (an example "Call-out" section is provided at
-the end of the file fskeleton.s). The purpose of this section is to allow 
-the FPSP routines to reference external functions that must be provided 
-by the host operating system. This section MUST be exactly 128 bytes in 
+the end of the file fskeleton.s). The purpose of this section is to allow
+the FPSP routines to reference external functions that must be provided
+by the host operating system. This section MUST be exactly 128 bytes in
 size. There are 32 fields, each 4 bytes in size. Each field corresponds
 to a function required by the FPSP (these functions and their location are
 listed in "68060FPSP call-outs" below). Each field entry should contain
 the address of the corresponding function RELATIVE to the starting address
-of the "call-out" section. The "Call-out" section must sit adjacent to the 
+of the "call-out" section. The "Call-out" section must sit adjacent to the
 fpsp.sa image in memory.
 
 The second section, the "Entry-point" section, is used by external routines
@@ -97,7 +97,7 @@
 would simply execute a "bra" or "jmp" that jumped to the selected function
 entry-point.
 
-For example, if the 68060 hardware took a "Line-F Emulator" exception 
+For example, if the 68060 hardware took a "Line-F Emulator" exception
 (vector #11), the operating system should execute something similar to:
 
 	bra	_060FPSP_TOP+128+48
diff -Nru a/arch/m68k/ifpsp060/fskeleton.S b/arch/m68k/ifpsp060/fskeleton.S
--- a/arch/m68k/ifpsp060/fskeleton.S	Sun May 16 01:18:34 2004
+++ b/arch/m68k/ifpsp060/fskeleton.S	Sun May 16 01:18:34 2004
@@ -5,10 +5,10 @@
 |Production Release P1.00 -- October 10, 1994
 |
 |M68060 Software Package Copyright © 1993, 1994 Motorola Inc.  All rights reserved.
-| 
+|
 |THE SOFTWARE is provided on an "AS IS" basis and without warranty.
 |To the maximum extent permitted by applicable law,
-|MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, 
+|MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED,
 |INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
 |and any warranty against infringement with regard to the SOFTWARE
 |(INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials.
@@ -68,7 +68,7 @@
 | _060_real_ovfl():
 |
 | This is the exit point for the 060FPSP when an enabled overflow exception
-| is present. The routine below should point to the operating system handler 
+| is present. The routine below should point to the operating system handler
 | for enabled overflow conditions. The exception stack frame is an overflow
 | stack frame. The FP state frame holds the EXCEPTIONAL OPERAND.
 |
@@ -87,7 +87,7 @@
 | _060_real_unfl():
 |
 | This is the exit point for the 060FPSP when an enabled underflow exception
-| is present. The routine below should point to the operating system handler 
+| is present. The routine below should point to the operating system handler
 | for enabled underflow conditions. The exception stack frame is an underflow
 | stack frame. The FP state frame holds the EXCEPTIONAL OPERAND.
 |
@@ -105,7 +105,7 @@
 | _060_real_operr():
 |
 | This is the exit point for the 060FPSP when an enabled operand error exception
-| is present. The routine below should point to the operating system handler 
+| is present. The routine below should point to the operating system handler
 | for enabled operand error exceptions. The exception stack frame is an operand error
 | stack frame. The FP state frame holds the source operand of the faulting
 | instruction.
@@ -124,7 +124,7 @@
 | _060_real_snan():
 |
 | This is the exit point for the 060FPSP when an enabled signalling NaN exception
-| is present. The routine below should point to the operating system handler 
+| is present. The routine below should point to the operating system handler
 | for enabled signalling NaN exceptions. The exception stack frame is a signalling NaN
 | stack frame. The FP state frame holds the source operand of the faulting
 | instruction.
@@ -143,7 +143,7 @@
 | _060_real_dz():
 |
 | This is the exit point for the 060FPSP when an enabled divide-by-zero exception
-| is present. The routine below should point to the operating system handler 
+| is present. The routine below should point to the operating system handler
 | for enabled divide-by-zero exceptions. The exception stack frame is a divide-by-zero
 | stack frame. The FP state frame holds the source operand of the faulting
 | instruction.
@@ -162,7 +162,7 @@
 | _060_real_inex():
 |
 | This is the exit point for the 060FPSP when an enabled inexact exception
-| is present. The routine below should point to the operating system handler 
+| is present. The routine below should point to the operating system handler
 | for enabled inexact exceptions. The exception stack frame is an inexact
 | stack frame. The FP state frame holds the source operand of the faulting
 | instruction.
@@ -181,12 +181,12 @@
 | _060_real_bsun():
 |
 | This is the exit point for the 060FPSP when an enabled bsun exception
-| is present. The routine below should point to the operating system handler 
+| is present. The routine below should point to the operating system handler
 | for enabled bsun exceptions. The exception stack frame is a bsun
 | stack frame.
 |
 | The sample routine below clears the exception status bit, clears the NaN
-| bit in the FPSR, and does an "rte". The instruction that caused the 
+| bit in the FPSR, and does an "rte". The instruction that caused the
 | bsun will now be re-executed but with the NaN FPSR bit cleared.
 |
 	.global		_060_real_bsun
@@ -202,13 +202,13 @@
 |
 | _060_real_fline():
 |
-| This is the exit point for the 060FPSP when an F-Line Illegal exception is 
+| This is the exit point for the 060FPSP when an F-Line Illegal exception is
 | encountered. Three different types of exceptions can enter the F-Line exception
 | vector number 11: FP Unimplemented Instructions, FP implemented instructions when
 | the FPU is disabled, and F-Line Illegal instructions. The 060FPSP module
 | _fpsp_fline() distinguishes between the three and acts appropriately. F-Line
 | Illegals branch here.
-| 
+|
 	.global		_060_real_fline
 _060_real_fline:
 	bral		trap	| jump to trap handler
@@ -216,7 +216,7 @@
 |
 | _060_real_fpu_disabled():
 |
-| This is the exit point for the 060FPSP when an FPU disabled exception is 
+| This is the exit point for the 060FPSP when an FPU disabled exception is
 | encountered. Three different types of exceptions can enter the F-Line exception
 | vector number 11: FP Unimplemented Instructions, FP implemented instructions when
 | the FPU is disabled, and F-Line Illegal instructions. The 060FPSP module
diff -Nru a/arch/m68k/ifpsp060/ilsp.doc b/arch/m68k/ifpsp060/ilsp.doc
--- a/arch/m68k/ifpsp060/ilsp.doc	Sun May 16 01:18:33 2004
+++ b/arch/m68k/ifpsp060/ilsp.doc	Sun May 16 01:18:33 2004
@@ -5,10 +5,10 @@
 Production Release P1.00 -- October 10, 1994
 
 M68060 Software Package Copyright © 1993, 1994 Motorola Inc.  All rights reserved.
- 
+
 THE SOFTWARE is provided on an "AS IS" basis and without warranty.
 To the maximum extent permitted by applicable law,
-MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, 
+MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED,
 INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
 and any warranty against infringement with regard to the SOFTWARE
 (INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials.
@@ -32,11 +32,11 @@
 The file ilsp.s contains the "Library version" of the
 68060 Integer Software Package. Routines included in this
 module can be used to emulate 64-bit divide and multiply,
-and the "cmp2" instruction. These instructions are not 
-implemented in hardware on the 68060 and normally take 
+and the "cmp2" instruction. These instructions are not
+implemented in hardware on the 68060 and normally take
 exception vector #61 "Unimplemented Integer Instruction".
 
-By re-compiling a program that uses these instructions, and 
+By re-compiling a program that uses these instructions, and
 making subroutine calls in place of the unimplemented
 instructions, a program can avoid the overhead associated with
 taking the exception.
@@ -63,7 +63,7 @@
 
 Release file structure:
 -----------------------
-The file ilsp.sa contains an "Entry-Point" section and a 
+The file ilsp.sa contains an "Entry-Point" section and a
 code section. The ILSP has no "Call-Out" section. The first section
 is the "Entry-Point" section. In order to access a function in the
 package, a program must "bsr" or "jsr" to the location listed
@@ -77,7 +77,7 @@
 
 For example, to use a 64-bit multiply instruction,
 do a "bsr" or "jsr" to the entry point defined by
-the 060ILSP entry table. A compiler generated code sequence 
+the 060ILSP entry table. A compiler generated code sequence
 for unsigned multiply could look like:
 
 # mulu.l <ea>,Dh:Dl
@@ -107,7 +107,7 @@
 	mov.l	(%sp)+,%d1	# load remainder
 	mov.l	(%sp)+,%d0	# load quotient
 
-The library routines also return the correct condition code 
+The library routines also return the correct condition code
 register value. If this is important, then the caller of the library
 routine must make sure that the value isn't lost while popping
 other items off of the stack.
diff -Nru a/arch/m68k/ifpsp060/iskeleton.S b/arch/m68k/ifpsp060/iskeleton.S
--- a/arch/m68k/ifpsp060/iskeleton.S	Sun May 16 01:18:33 2004
+++ b/arch/m68k/ifpsp060/iskeleton.S	Sun May 16 01:18:33 2004
@@ -5,10 +5,10 @@
 |Production Release P1.00 -- October 10, 1994
 |
 |M68060 Software Package Copyright © 1993, 1994 Motorola Inc.  All rights reserved.
-| 
+|
 |THE SOFTWARE is provided on an "AS IS" basis and without warranty.
 |To the maximum extent permitted by applicable law,
-|MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, 
+|MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED,
 |INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
 |and any warranty against infringement with regard to the SOFTWARE
 |(INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials.
@@ -40,7 +40,7 @@
 
 
 |################################
-| (1) EXAMPLE CALL-OUTS 	#
+| (1) EXAMPLE CALL-OUTS		#
 |				#
 | _060_isp_done()		#
 | _060_real_chk()		#
@@ -56,7 +56,7 @@
 | _060_isp_done():
 |
 | This is and example main exit point for the Unimplemented Integer
-| Instruction exception handler. For a normal exit, the 
+| Instruction exception handler. For a normal exit, the
 | _isp_unimp() branches to here so that the operating system
 | can do any clean-up desired. The stack frame is the
 | Unimplemented Integer Instruction stack frame with
@@ -118,9 +118,9 @@
 |
 | _060_real_divbyzero:
 |
-| This is an alternate exit point for the Unimplemented Integer 
+| This is an alternate exit point for the Unimplemented Integer
 | Instruction exception handler isp_unimp(). If the instruction is a 64-bit
-| integer divide where the source operand is a zero, then the _isp_unimp() 
+| integer divide where the source operand is a zero, then the _isp_unimp()
 | creates a Divide-by-zero exception stack frame from the Unimplemented
 | Integer Instruction stack frame and branches to this routine.
 |
@@ -128,7 +128,7 @@
 | no action associated with the "chk" exception. If tracing is enabled,
 | then it create a Trace exception stack frame from the "chk" exception
 | stack frame and branches to the _real_trace() entry point.
-| 
+|
 | Linux/68k: commented out test for tracing
 
 	.global		_060_real_divbyzero
@@ -185,7 +185,7 @@
 | Entry point for the operating system`s routine to "lock" a page
 | from being paged out. This routine is needed by the cas/cas2
 | algorithms so that no page faults occur within the "core" code
-| region. Note: the routine must lock two pages if the operand 
+| region. Note: the routine must lock two pages if the operand
 | spans two pages.
 | NOTE: THE ROUTINE SHOULD RETURN AN FSLW VALUE IN D0 ON FAILURE
 | SO THAT THE 060SP CAN CREATE A PROPER ACCESS ERROR FRAME.
@@ -212,7 +212,7 @@
 | Note: the routine must unlock two pages if the operand spans
 | two pages.
 | Arguments:
-| 	a0 = operand address
+|	a0 = operand address
 |	d0 = `xxxxxxff -> supervisor; `xxxxxx00 -> user
 |	d1 = `xxxxxxff -> longword; `xxxxxx00 -> word
 |
diff -Nru a/arch/m68k/ifpsp060/isp.doc b/arch/m68k/ifpsp060/isp.doc
--- a/arch/m68k/ifpsp060/isp.doc	Sun May 16 01:18:35 2004
+++ b/arch/m68k/ifpsp060/isp.doc	Sun May 16 01:18:35 2004
@@ -5,10 +5,10 @@
 Production Release P1.00 -- October 10, 1994
 
 M68060 Software Package Copyright © 1993, 1994 Motorola Inc.  All rights reserved.
- 
+
 THE SOFTWARE is provided on an "AS IS" basis and without warranty.
 To the maximum extent permitted by applicable law,
-MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, 
+MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED,
 INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
 and any warranty against infringement with regard to the SOFTWARE
 (INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials.
@@ -77,7 +77,7 @@
 	-----------------
 	|		| - 8 bytes per entry
    (2)  | Entry Point   | - user does a "bra" or "jmp" to this address
-	|               | 
+	|               |
 	-----------------
 	|		| - code section
    (3)  ~		~
@@ -87,14 +87,14 @@
 
 The first section of this module is the "Call-out" section. This section
 is NOT INCLUDED in isp.sa (an example "Call-out" section is provided at
-the end of the file iskeleton.s). The purpose of this section is to allow 
-the ISP routines to reference external functions that must be provided 
-by the host operating system. This section MUST be exactly 128 bytes in 
+the end of the file iskeleton.s). The purpose of this section is to allow
+the ISP routines to reference external functions that must be provided
+by the host operating system. This section MUST be exactly 128 bytes in
 size. There are 32 fields, each 4 bytes in size. Each field corresponds
 to a function required by the ISP (these functions and their location are
 listed in "68060ISP call-outs" below). Each field entry should contain
 the address of the corresponding function RELATIVE to the starting address
-of the "call-out" section. The "Call-out" section must sit adjacent to the 
+of the "call-out" section. The "Call-out" section must sit adjacent to the
 isp.sa image in memory.
 
 The second section, the "Entry-point" section, is used by external routines
@@ -112,7 +112,7 @@
 	bra	_060ISP_TOP+128+0
 
 (_060ISP_TOP is the starting address of the "Call-out" section; the "Call-out"
-section is 128 bytes long; and the Unimplemented Integer ISP handler entry 
+section is 128 bytes long; and the Unimplemented Integer ISP handler entry
 point is located 0 bytes from the top of the "Entry-point" section.)
 
 The third section is the code section. After entering through an "Entry-point",
@@ -177,7 +177,7 @@
 _060_isp_unimp() entry point of the ISP.
 
 After the 060ISP decodes the instruction type and fetches the appropriate
-data registers, and BEFORE the actual emulated transfers occur, the 
+data registers, and BEFORE the actual emulated transfers occur, the
 package calls either the "Call-out" _060_real_cas() or _060_real_cas2().
 If the emulation code provided by the 060ISP is sufficient for the
 host system (see isp.s source code), then these "Call-out"s should be
diff -Nru a/arch/m68k/ifpsp060/os.S b/arch/m68k/ifpsp060/os.S
--- a/arch/m68k/ifpsp060/os.S	Sun May 16 01:18:35 2004
+++ b/arch/m68k/ifpsp060/os.S	Sun May 16 01:18:35 2004
@@ -5,10 +5,10 @@
 |Production Release P1.00 -- October 10, 1994
 |
 |M68060 Software Package Copyright © 1993, 1994 Motorola Inc.  All rights reserved.
-| 
+|
 |THE SOFTWARE is provided on an "AS IS" basis and without warranty.
 |To the maximum extent permitted by applicable law,
-|MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, 
+|MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED,
 |INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
 |and any warranty against infringement with regard to the SOFTWARE
 |(INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials.
@@ -35,8 +35,8 @@
 #include <linux/linkage.h>
 
 |################################
-| EXAMPLE CALL-OUTS 		#
-| 				#
+| EXAMPLE CALL-OUTS		#
+|				#
 | _060_dmem_write()		#
 | _060_dmem_read()		#
 | _060_imem_read()		#
@@ -53,12 +53,12 @@
 | _060_real_access()		#
 |################################
 
-| 
+|
 | Each IO routine checks to see if the memory write/read is to/from user
 | or supervisor application space. The examples below use simple "move"
 | instructions for supervisor mode applications and call _copyin()/_copyout()
 | for user mode applications.
-| When installing the 060SP, the _copyin()/_copyout() equivalents for a 
+| When installing the 060SP, the _copyin()/_copyout() equivalents for a
 | given operating system should be substituted.
 |
 | The addresses within the 060SP are guaranteed to be on the stack.
@@ -76,10 +76,10 @@
 | Writes to data memory while in supervisor mode.
 |
 | INPUTS:
-|	a0 - supervisor source address	
+|	a0 - supervisor source address
 |	a1 - user destination address
-|	d0 - number of bytes to write	
-| 	0x4(%a6),bit5 - 1 = supervisor mode, 0 = user mode
+|	d0 - number of bytes to write
+|	0x4(%a6),bit5 - 1 = supervisor mode, 0 = user mode
 | OUTPUTS:
 |	d1 - 0 = success, !0 = failure
 |
@@ -110,11 +110,11 @@
 |	a0 - user source address
 |	a1 - supervisor destination address
 |	d0 - number of bytes to read
-| 	0x4(%a6),bit5 - 1 = supervisor mode, 0 = user mode
+|	0x4(%a6),bit5 - 1 = supervisor mode, 0 = user mode
 | OUTPUTS:
 |	d1 - 0 = success, !0 = failure
 |
-	.global 		_060_imem_read
+	.global		_060_imem_read
 	.global		_060_dmem_read
 _060_imem_read:
 _060_dmem_read:
@@ -136,17 +136,17 @@
 
 |
 | _060_dmem_read_byte():
-| 
+|
 | Read a data byte from user memory.
 |
 | INPUTS:
 |	a0 - user source address
-| 	0x4(%a6),bit5 - 1 = supervisor mode, 0 = user mode
+|	0x4(%a6),bit5 - 1 = supervisor mode, 0 = user mode
 | OUTPUTS:
 |	d0 - data byte in d0
 |	d1 - 0 = success, !0 = failure
 |
-	.global 		_060_dmem_read_byte
+	.global		_060_dmem_read_byte
 _060_dmem_read_byte:
 	clr.l		%d0			| clear whole longword
 	clr.l		%d1			| assume success
@@ -159,29 +159,29 @@
 
 |
 | _060_dmem_read_word():
-| 
+|
 | Read a data word from user memory.
 |
 | INPUTS:
 |	a0 - user source address
-| 	0x4(%a6),bit5 - 1 = supervisor mode, 0 = user mode
+|	0x4(%a6),bit5 - 1 = supervisor mode, 0 = user mode
 | OUTPUTS:
 |	d0 - data word in d0
 |	d1 - 0 = success, !0 = failure
 |
 | _060_imem_read_word():
-| 
+|
 | Read an instruction word from user memory.
 |
 | INPUTS:
 |	a0 - user source address
-| 	0x4(%a6),bit5 - 1 = supervisor mode, 0 = user mode
+|	0x4(%a6),bit5 - 1 = supervisor mode, 0 = user mode
 | OUTPUTS:
 |	d0 - instruction word in d0
 |	d1 - 0 = success, !0 = failure
 |
-	.global 		_060_dmem_read_word
-	.global 		_060_imem_read_word
+	.global		_060_dmem_read_word
+	.global		_060_imem_read_word
 _060_dmem_read_word:
 _060_imem_read_word:
 	clr.l		%d1			| assume success
@@ -195,29 +195,29 @@
 
 |
 | _060_dmem_read_long():
-| 
+|
 
 |
 | INPUTS:
 |	a0 - user source address
-| 	0x4(%a6),bit5 - 1 = supervisor mode, 0 = user mode
+|	0x4(%a6),bit5 - 1 = supervisor mode, 0 = user mode
 | OUTPUTS:
 |	d0 - data longword in d0
 |	d1 - 0 = success, !0 = failure
 |
 | _060_imem_read_long():
-| 
+|
 | Read an instruction longword from user memory.
 |
 | INPUTS:
 |	a0 - user source address
-| 	0x4(%a6),bit5 - 1 = supervisor mode, 0 = user mode
+|	0x4(%a6),bit5 - 1 = supervisor mode, 0 = user mode
 | OUTPUTS:
 |	d0 - instruction longword in d0
 |	d1 - 0 = success, !0 = failure
 |
-	.global 		_060_dmem_read_long
-	.global 		_060_imem_read_long
+	.global		_060_dmem_read_long
+	.global		_060_imem_read_long
 _060_dmem_read_long:
 _060_imem_read_long:
 	clr.l		%d1			| assume success
@@ -235,12 +235,12 @@
 |
 | INPUTS:
 |	a0 - user destination address
-| 	d0 - data byte in d0
-| 	0x4(%a6),bit5 - 1 = supervisor mode, 0 = user mode
+|	d0 - data byte in d0
+|	0x4(%a6),bit5 - 1 = supervisor mode, 0 = user mode
 | OUTPUTS:
 |	d1 - 0 = success, !0 = failure
 |
-	.global 		_060_dmem_write_byte
+	.global		_060_dmem_write_byte
 _060_dmem_write_byte:
 	clr.l		%d1			| assume success
 	btst		#0x5,0x4(%a6)		| check for supervisor state
@@ -257,12 +257,12 @@
 |
 | INPUTS:
 |	a0 - user destination address
-| 	d0 - data word in d0
-| 	0x4(%a6),bit5 - 1 = supervisor mode, 0 = user mode
+|	d0 - data word in d0
+|	0x4(%a6),bit5 - 1 = supervisor mode, 0 = user mode
 | OUTPUTS:
 |	d1 - 0 = success, !0 = failure
 |
-	.global 		_060_dmem_write_word
+	.global		_060_dmem_write_word
 _060_dmem_write_word:
 	clr.l		%d1			| assume success
 	btst		#0x5,0x4(%a6)		| check for supervisor state
@@ -281,12 +281,12 @@
 |
 | INPUTS:
 |	a0 - user destination address
-| 	d0 - data longword in d0
-| 	0x4(%a6),bit5 - 1 = supervisor mode, 0 = user mode
+|	d0 - data longword in d0
+|	0x4(%a6),bit5 - 1 = supervisor mode, 0 = user mode
 | OUTPUTS:
 |	d1 - 0 = success, !0 = failure
 |
-	.global 		_060_dmem_write_long
+	.global		_060_dmem_write_long
 _060_dmem_write_long:
 	clr.l		%d1			| assume success
 	btst		#0x5,0x4(%a6)		| check for supervisor state
@@ -313,7 +313,7 @@
 |
 | int _copyout(supervisor_addr, user_addr, nbytes)
 |
-	.global 		_copyout
+	.global		_copyout
 _copyout:
 	move.l		4(%sp),%a0		| source
 	move.l		8(%sp),%a1		| destination
@@ -330,14 +330,14 @@
 |
 | int _copyin(user_addr, supervisor_addr, nbytes)
 |
-	.global 		_copyin
+	.global		_copyin
 _copyin:
 	move.l		4(%sp),%a0		| source
 	move.l		8(%sp),%a1		| destination
 	move.l		12(%sp),%d0		| count
     subq.l      #1,%d0
 morein:
-copyinae:	
+copyinae:
 	movs.b		(%a0)+,%d1		| fetch user byte
 	move.b		%d1,(%a1)+		| write supervisor byte
 	dbra		%d0,morein		| are we through yet?
@@ -378,7 +378,7 @@
 
 
 
-| Execption handling for movs access to illegal memory	
+| Execption handling for movs access to illegal memory
 	.section .fixup,#alloc,#execinstr
 	.even
 1:	moveq		#-1,%d1
diff -Nru a/arch/m68k/ifpsp060/src/fplsp.S b/arch/m68k/ifpsp060/src/fplsp.S
--- a/arch/m68k/ifpsp060/src/fplsp.S	Sun May 16 01:18:36 2004
+++ b/arch/m68k/ifpsp060/src/fplsp.S	Sun May 16 01:18:36 2004
@@ -5,10 +5,10 @@
 Production Release P1.00 -- October 10, 1994
 
 M68060 Software Package Copyright © 1993, 1994 Motorola Inc.  All rights reserved.
- 
+
 THE SOFTWARE is provided on an "AS IS" basis and without warranty.
 To the maximum extent permitted by applicable law,
-MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, 
+MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED,
 INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
 and any warranty against infringement with regard to the SOFTWARE
 (INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials.
@@ -304,33 +304,33 @@
 set EXC_D1,		EXC_DREGS+(1*4)
 set EXC_D0,		EXC_DREGS+(0*4)
 
-set EXC_FP0, 		EXC_FPREGS+(0*12)	# offset of saved fp0
-set EXC_FP1, 		EXC_FPREGS+(1*12)	# offset of saved fp1
-set EXC_FP2, 		EXC_FPREGS+(2*12)	# offset of saved fp2 (not used)
+set EXC_FP0,		EXC_FPREGS+(0*12)	# offset of saved fp0
+set EXC_FP1,		EXC_FPREGS+(1*12)	# offset of saved fp1
+set EXC_FP2,		EXC_FPREGS+(2*12)	# offset of saved fp2 (not used)
 
-set FP_SCR1, 		LV+80			# fp scratch 1
-set FP_SCR1_EX, 	FP_SCR1+0
+set FP_SCR1,		LV+80			# fp scratch 1
+set FP_SCR1_EX,		FP_SCR1+0
 set FP_SCR1_SGN,	FP_SCR1+2
-set FP_SCR1_HI, 	FP_SCR1+4
-set FP_SCR1_LO, 	FP_SCR1+8
+set FP_SCR1_HI,		FP_SCR1+4
+set FP_SCR1_LO,		FP_SCR1+8
 
-set FP_SCR0, 		LV+68			# fp scratch 0
-set FP_SCR0_EX, 	FP_SCR0+0
+set FP_SCR0,		LV+68			# fp scratch 0
+set FP_SCR0_EX,		FP_SCR0+0
 set FP_SCR0_SGN,	FP_SCR0+2
-set FP_SCR0_HI, 	FP_SCR0+4
-set FP_SCR0_LO, 	FP_SCR0+8
+set FP_SCR0_HI,		FP_SCR0+4
+set FP_SCR0_LO,		FP_SCR0+8
 
-set FP_DST, 		LV+56			# fp destination operand
-set FP_DST_EX, 		FP_DST+0
+set FP_DST,		LV+56			# fp destination operand
+set FP_DST_EX,		FP_DST+0
 set FP_DST_SGN,		FP_DST+2
-set FP_DST_HI, 		FP_DST+4
-set FP_DST_LO, 		FP_DST+8
+set FP_DST_HI,		FP_DST+4
+set FP_DST_LO,		FP_DST+8
 
-set FP_SRC, 		LV+44			# fp source operand
-set FP_SRC_EX, 		FP_SRC+0
+set FP_SRC,		LV+44			# fp source operand
+set FP_SRC_EX,		FP_SRC+0
 set FP_SRC_SGN,		FP_SRC+2
-set FP_SRC_HI, 		FP_SRC+4
-set FP_SRC_LO, 		FP_SRC+8
+set FP_SRC_HI,		FP_SRC+4
+set FP_SRC_LO,		FP_SRC+8
 
 set USER_FPIAR,		LV+40			# FP instr address register
 
@@ -354,7 +354,7 @@
 set EXC_TEMP,		LV+16			# temporary space
 
 set DTAG,		LV+15			# destination operand type
-set STAG, 		LV+14			# source operand type
+set STAG,		LV+14			# source operand type
 
 set SPCOND_FLG,		LV+10			# flag: special case (see below)
 
@@ -369,17 +369,17 @@
 # Helpful macros
 
 set FTEMP,		0			# offsets within an
-set FTEMP_EX, 		0			# extended precision
+set FTEMP_EX,		0			# extended precision
 set FTEMP_SGN,		2			# value saved in memory.
-set FTEMP_HI, 		4
-set FTEMP_LO, 		8
+set FTEMP_HI,		4
+set FTEMP_LO,		8
 set FTEMP_GRS,		12
 
 set LOCAL,		0			# offsets within an
-set LOCAL_EX, 		0			# extended precision 
+set LOCAL_EX,		0			# extended precision
 set LOCAL_SGN,		2			# value saved in memory.
-set LOCAL_HI, 		4
-set LOCAL_LO, 		8
+set LOCAL_HI,		4
+set LOCAL_LO,		8
 set LOCAL_GRS,		12
 
 set DST,		0			# offsets within an
@@ -469,17 +469,17 @@
 ######################################
 set dzinf_mask,		inf_mask+dz_mask+adz_mask
 set opnan_mask,		nan_mask+operr_mask+aiop_mask
-set nzi_mask,		0x01ffffff 		#clears N, Z, and I
+set nzi_mask,		0x01ffffff		#clears N, Z, and I
 set unfinx_mask,	unfl_mask+inex2_mask+aunfl_mask+ainex_mask
 set unf2inx_mask,	unfl_mask+inex2_mask+ainex_mask
 set ovfinx_mask,	ovfl_mask+inex2_mask+aovfl_mask+ainex_mask
 set inx1a_mask,		inex1_mask+ainex_mask
 set inx2a_mask,		inex2_mask+ainex_mask
-set snaniop_mask, 	nan_mask+snan_mask+aiop_mask
+set snaniop_mask,	nan_mask+snan_mask+aiop_mask
 set snaniop2_mask,	snan_mask+aiop_mask
 set naniop_mask,	nan_mask+aiop_mask
 set neginf_mask,	neg_mask+inf_mask
-set infaiop_mask, 	inf_mask+aiop_mask
+set infaiop_mask,	inf_mask+aiop_mask
 set negz_mask,		neg_mask+z_mask
 set opaop_mask,		operr_mask+aiop_mask
 set unfl_inx_mask,	unfl_mask+aunfl_mask+ainex_mask
@@ -508,8 +508,8 @@
 set mantissalen,	64			# length of mantissa in bits
 
 set BYTE,		1			# len(byte) == 1 byte
-set WORD, 		2			# len(word) == 2 bytes
-set LONG, 		4			# len(longword) == 2 bytes
+set WORD,		2			# len(word) == 2 bytes
+set LONG,		4			# len(longword) == 2 bytes
 
 set BSUN_VEC,		0xc0			# bsun    vector offset
 set INEX_VEC,		0xc4			# inexact vector offset
@@ -4903,7 +4903,7 @@
 #	d0 = round precision,mode					#
 #									#
 # OUTPUT ************************************************************** #
-#	fp0 = sin(X) or cos(X) 						#
+#	fp0 = sin(X) or cos(X)						#
 #									#
 #    For ssincos(X):							#
 #	fp0 = sin(X)							#
@@ -4911,7 +4911,7 @@
 #									#
 # ACCURACY and MONOTONICITY ******************************************* #
 #	The returned result is within 1 ulp in 64 significant bit, i.e.	#
-#	within 0.5001 ulp to 53 bits if the result is subsequently 	#
+#	within 0.5001 ulp to 53 bits if the result is subsequently	#
 #	rounded to double precision. The result is provably monotonic	#
 #	in double precision.						#
 #									#
@@ -4928,8 +4928,8 @@
 #									#
 #	4. If k is even, go to 6.					#
 #									#
-#	5. (k is odd) Set j := (k-1)/2, sgn := (-1)**j. 		#
-#		Return sgn*cos(r) where cos(r) is approximated by an 	#
+#	5. (k is odd) Set j := (k-1)/2, sgn := (-1)**j.			#
+#		Return sgn*cos(r) where cos(r) is approximated by an	#
 #		even polynomial in r, 1 + r*r*(B1+s*(B2+ ... + s*B8)),	#
 #		s = r*r.						#
 #		Exit.							#
@@ -4941,10 +4941,10 @@
 #									#
 #	7. If |X| > 1, go to 9.						#
 #									#
-#	8. (|X|<2**(-40)) If SIN is invoked, return X; 			#
+#	8. (|X|<2**(-40)) If SIN is invoked, return X;			#
 #		otherwise return 1.					#
 #									#
-#	9. Overwrite X by X := X rem 2Pi. Now that |X| <= Pi, 		#
+#	9. Overwrite X by X := X rem 2Pi. Now that |X| <= Pi,		#
 #		go back to 3.						#
 #									#
 #	SINCOS:								#
@@ -4959,19 +4959,19 @@
 #		j1 exclusive or with the l.s.b. of k.			#
 #		sgn1 := (-1)**j1, sgn2 := (-1)**j2.			#
 #		SIN(X) = sgn1 * cos(r) and COS(X) = sgn2*sin(r) where	#
-#		sin(r) and cos(r) are computed as odd and even 		#
+#		sin(r) and cos(r) are computed as odd and even		#
 #		polynomials in r, respectively. Exit			#
 #									#
 #	5. (k is even) Set j1 := k/2, sgn1 := (-1)**j1.			#
 #		SIN(X) = sgn1 * sin(r) and COS(X) = sgn1*cos(r) where	#
-#		sin(r) and cos(r) are computed as odd and even 		#
+#		sin(r) and cos(r) are computed as odd and even		#
 #		polynomials in r, respectively. Exit			#
 #									#
 #	6. If |X| > 1, go to 8.						#
 #									#
 #	7. (|X|<2**(-40)) SIN(X) = X and COS(X) = 1. Exit.		#
 #									#
-#	8. Overwrite X by X := X rem 2Pi. Now that |X| <= Pi, 		#
+#	8. Overwrite X by X := X rem 2Pi. Now that |X| <= Pi,		#
 #		go back to 2.						#
 #									#
 #########################################################################
@@ -5046,9 +5046,9 @@
 #--THE ARGUMENT REDUCTION IS DONE BY TABLE LOOK UP.
 SINMAIN:
 	fmov.x		%fp0,%fp1
-	fmul.d		TWOBYPI(%pc),%fp1 	# X*2/PI
+	fmul.d		TWOBYPI(%pc),%fp1	# X*2/PI
 
-	lea		PITBL+0x200(%pc),%a1 	# TABLE OF N*PI/2, N = -32,...,32
+	lea		PITBL+0x200(%pc),%a1	# TABLE OF N*PI/2, N = -32,...,32
 
 	fmov.l		%fp1,INT(%a6)		# CONVERT TO INTEGER
 
@@ -5058,8 +5058,8 @@
 
 # A1 IS THE ADDRESS OF N*PIBY2
 # ...WHICH IS IN TWO PIECES Y1 & Y2
-	fsub.x		(%a1)+,%fp0 		# X-Y1
-	fsub.s		(%a1),%fp0 		# fp0 = R = (X-Y1)-Y2
+	fsub.x		(%a1)+,%fp0		# X-Y1
+	fsub.s		(%a1),%fp0		# fp0 = R = (X-Y1)-Y2
 
 SINCONT:
 #--continuation from REDUCEX
@@ -5213,7 +5213,7 @@
 COSTINY:
 	fmov.s		&0x3F800000,%fp0	# fp0 = 1.0
 	fmov.l		%d0,%fpcr		# restore users round mode,prec
-	fadd.s 		&0x80800000,%fp0	# last inst - possible exception set
+	fadd.s		&0x80800000,%fp0	# last inst - possible exception set
 	bra		t_pinx2
 
 ################################################
@@ -5645,7 +5645,7 @@
 #									#
 #	7. (|X|<2**(-40)) Tan(X) = X. Exit.				#
 #									#
-#	8. Overwrite X by X := X rem 2Pi. Now that |X| <= Pi, go back 	#
+#	8. Overwrite X by X := X rem 2Pi. Now that |X| <= Pi, go back	#
 #		to 2.							#
 #									#
 #########################################################################
@@ -6048,27 +6048,27 @@
 #	The returned result is within 2 ulps in	64 significant bit,	#
 #	i.e. within 0.5001 ulp to 53 bits if the result is subsequently	#
 #	rounded to double precision. The result is provably monotonic	#
-#	in double precision. 						#
+#	in double precision.						#
 #									#
 # ALGORITHM *********************************************************** #
 #	Step 1. If |X| >= 16 or |X| < 1/16, go to Step 5.		#
 #									#
-#	Step 2. Let X = sgn * 2**k * 1.xxxxxxxx...x. 			#
+#	Step 2. Let X = sgn * 2**k * 1.xxxxxxxx...x.			#
 #		Note that k = -4, -3,..., or 3.				#
-#		Define F = sgn * 2**k * 1.xxxx1, i.e. the first 5 	#
+#		Define F = sgn * 2**k * 1.xxxx1, i.e. the first 5	#
 #		significant bits of X with a bit-1 attached at the 6-th	#
 #		bit position. Define u to be u = (X-F) / (1 + X*F).	#
 #									#
 #	Step 3. Approximate arctan(u) by a polynomial poly.		#
 #									#
-#	Step 4. Return arctan(F) + poly, arctan(F) is fetched from a 	#
+#	Step 4. Return arctan(F) + poly, arctan(F) is fetched from a	#
 #		table of values calculated beforehand. Exit.		#
 #									#
 #	Step 5. If |X| >= 16, go to Step 7.				#
 #									#
 #	Step 6. Approximate arctan(X) by an odd polynomial in X. Exit.	#
 #									#
-#	Step 7. Define X' = -1/X. Approximate arctan(X') by an odd 	#
+#	Step 7. Define X' = -1/X. Approximate arctan(X') by an odd	#
 #		polynomial in X'.					#
 #		Arctan(X) = sign(X)*Pi/2 + arctan(X'). Exit.		#
 #									#
@@ -6334,7 +6334,7 @@
 	fmul.x		%fp2,%fp1		# A1*U*V*(A2+V*(A3+V))
 	fadd.x		%fp1,%fp0		# ATAN(U), FP1 RELEASED
 
-	fmovm.x 	(%sp)+,&0x20		# restore fp2
+	fmovm.x		(%sp)+,&0x20		# restore fp2
 
 	fmov.l		%d0,%fpcr		# restore users rnd mode,prec
 	fadd.x		ATANF(%a6),%fp0		# ATAN(X)
@@ -6491,7 +6491,7 @@
 #	a0 = pointer to extended precision input			#
 #	d0 = round precision,mode					#
 #									#
-# OUTPUT **************************************************************	# 
+# OUTPUT **************************************************************	#
 #	fp0 = arcsin(X)							#
 #									#
 # ACCURACY and MONOTONICITY *******************************************	#
@@ -6531,7 +6531,7 @@
 
 # This catch is added here for the '060 QSP. Originally, the call to
 # satan() would handle this case by causing the exception which would
-# not be caught until gen_except(). Now, with the exceptions being 
+# not be caught until gen_except(). Now, with the exceptions being
 # detected inside of satan(), the exception would have been handled there
 # instead of inside sasin() as expected.
 	cmp.l		%d1,&0x3FD78000
@@ -6680,7 +6680,7 @@
 
 #########################################################################
 # setox():    computes the exponential for a normalized input		#
-# setoxd():   computes the exponential for a denormalized input		# 
+# setoxd():   computes the exponential for a denormalized input		#
 # setoxm1():  computes the exponential minus 1 for a normalized input	#
 # setoxm1d(): computes the exponential minus 1 for a denormalized input	#
 #									#
@@ -6692,9 +6692,9 @@
 #	fp0 = exp(X) or exp(X)-1					#
 #									#
 # ACCURACY and MONOTONICITY ******************************************* #
-#	The returned result is within 0.85 ulps in 64 significant bit, 	#
+#	The returned result is within 0.85 ulps in 64 significant bit,	#
 #	i.e. within 0.5001 ulp to 53 bits if the result is subsequently #
-#	rounded to double precision. The result is provably monotonic 	#
+#	rounded to double precision. The result is provably monotonic	#
 #	in double precision.						#
 #									#
 # ALGORITHM and IMPLEMENTATION **************************************** #
@@ -6718,14 +6718,14 @@
 #	Notes:	The usual case should take the branches 1.1 -> 1.3 -> 2.#
 #		To avoid the use of floating-point comparisons, a	#
 #		compact representation of |X| is used. This format is a	#
-#		32-bit integer, the upper (more significant) 16 bits 	#
-#		are the sign and biased exponent field of |X|; the 	#
+#		32-bit integer, the upper (more significant) 16 bits	#
+#		are the sign and biased exponent field of |X|; the	#
 #		lower 16 bits are the 16 most significant fraction	#
 #		(including the explicit bit) bits of |X|. Consequently,	#
 #		the comparisons in Steps 1.1 and 1.3 can be performed	#
 #		by integer comparison. Note also that the constant	#
 #		16380 log(2) used in Step 1.3 is also in the compact	#
-#		form. Thus taking the branch to Step 2 guarantees 	#
+#		form. Thus taking the branch to Step 2 guarantees	#
 #		|X| < 16380 log(2). There is no harm to have a small	#
 #		number of cases where |X| is less than,	but close to,	#
 #		16380 log(2) and the branch to Step 9 is taken.		#
@@ -6737,7 +6737,7 @@
 #		2.3	Calculate	J = N mod 64; so J = 0,1,2,..., #
 #			or 63.						#
 #		2.4	Calculate	M = (N - J)/64; so N = 64M + J.	#
-#		2.5	Calculate the address of the stored value of 	#
+#		2.5	Calculate the address of the stored value of	#
 #			2^(J/64).					#
 #		2.6	Create the value Scale = 2^M.			#
 #	Notes:	The calculation in 2.2 is really performed by		#
@@ -6746,26 +6746,26 @@
 #		where							#
 #			constant := single-precision( 64/log 2 ).	#
 #									#
-#		Using a single-precision constant avoids memory 	#
+#		Using a single-precision constant avoids memory		#
 #		access. Another effect of using a single-precision	#
-#		"constant" is that the calculated value Z is 		#
+#		"constant" is that the calculated value Z is		#
 #									#
 #			Z = X*(64/log2)*(1+eps), |eps| <= 2^(-24).	#
 #									#
 #		This error has to be considered later in Steps 3 and 4.	#
 #									#
 #	Step 3.	Calculate X - N*log2/64.				#
-#		3.1	R := X + N*L1, 					#
+#		3.1	R := X + N*L1,					#
 #				where L1 := single-precision(-log2/64).	#
-#		3.2	R := R + N*L2, 					#
+#		3.2	R := R + N*L2,					#
 #				L2 := extended-precision(-log2/64 - L1).#
-#	Notes:	a) The way L1 and L2 are chosen ensures L1+L2 		#
+#	Notes:	a) The way L1 and L2 are chosen ensures L1+L2		#
 #		approximate the value -log2/64 to 88 bits of accuracy.	#
 #		b) N*L1 is exact because N is no longer than 22 bits	#
 #		and L1 is no longer than 24 bits.			#
-#		c) The calculation X+N*L1 is also exact due to 		#
+#		c) The calculation X+N*L1 is also exact due to		#
 #		cancellation. Thus, R is practically X+N(L1+L2) to full	#
-#		64 bits. 						#
+#		64 bits.						#
 #		d) It is important to estimate how large can |R| be	#
 #		after Step 3.2.						#
 #									#
@@ -6783,11 +6783,11 @@
 #									#
 #	Step 4.	Approximate exp(R)-1 by a polynomial			#
 #		p = R + R*R*(A1 + R*(A2 + R*(A3 + R*(A4 + R*A5))))	#
-#	Notes:	a) In order to reduce memory access, the coefficients 	#
+#	Notes:	a) In order to reduce memory access, the coefficients	#
 #		are made as "short" as possible: A1 (which is 1/2), A4	#
 #		and A5 are single precision; A2 and A3 are double	#
-#		precision. 						#
-#		b) Even with the restrictions above, 			#
+#		precision.						#
+#		b) Even with the restrictions above,			#
 #		   |p - (exp(R)-1)| < 2^(-68.8) for all |R| <= 0.0062.	#
 #		Note that 0.0062 is slightly bigger than 0.57 log2/64.	#
 #		c) To fully utilize the pipeline, p is separated into	#
@@ -6801,11 +6801,11 @@
 #		where T and t are the stored values for 2^(J/64).	#
 #	Notes:	2^(J/64) is stored as T and t where T+t approximates	#
 #		2^(J/64) to roughly 85 bits; T is in extended precision	#
-#		and t is in single precision. Note also that T is 	#
-#		rounded to 62 bits so that the last two bits of T are 	#
-#		zero. The reason for such a special form is that T-1, 	#
+#		and t is in single precision. Note also that T is	#
+#		rounded to 62 bits so that the last two bits of T are	#
+#		zero. The reason for such a special form is that T-1,	#
 #		T-2, and T-8 will all be exact --- a property that will	#
-#		give much more accurate computation of the function 	#
+#		give much more accurate computation of the function	#
 #		EXPM1.							#
 #									#
 #	Step 6.	Reconstruction of exp(X)				#
@@ -6821,11 +6821,11 @@
 #			X = (M1+M)log2 + Jlog2/64 + R, |M1+M| >= 16380.	#
 #		Hence, exp(X) may overflow or underflow or neither.	#
 #		When that is the case, AdjScale = 2^(M1) where M1 is	#
-#		approximately M. Thus 6.2 will never cause 		#
+#		approximately M. Thus 6.2 will never cause		#
 #		over/underflow. Possible exception in 6.4 is overflow	#
 #		or underflow. The inexact exception is not generated in	#
 #		6.4. Although one can argue that the inexact flag	#
-#		should always be raised, to simulate that exception 	#
+#		should always be raised, to simulate that exception	#
 #		cost to much than the flag is worth in practical uses.	#
 #									#
 #	Step 7.	Return 1 + X.						#
@@ -6838,7 +6838,7 @@
 #		in Step 7.1 to avoid unnecessary trapping. (Although	#
 #		the FMOVEM may not seem relevant since X is normalized,	#
 #		the precaution will be useful in the library version of	#
-#		this code where the separate entry for denormalized 	#
+#		this code where the separate entry for denormalized	#
 #		inputs will be done away with.)				#
 #									#
 #	Step 8.	Handle exp(X) where |X| >= 16380log2.			#
@@ -6846,9 +6846,9 @@
 #		(mimic 2.2 - 2.6)					#
 #		8.2	N := round-to-integer( X * 64/log2 )		#
 #		8.3	Calculate J = N mod 64, J = 0,1,...,63		#
-#		8.4	K := (N-J)/64, M1 := truncate(K/2), M = K-M1, 	#
+#		8.4	K := (N-J)/64, M1 := truncate(K/2), M = K-M1,	#
 #			AdjFlag := 1.					#
-#		8.5	Calculate the address of the stored value 	#
+#		8.5	Calculate the address of the stored value	#
 #			2^(J/64).					#
 #		8.6	Create the values Scale = 2^M, AdjScale = 2^M1.	#
 #		8.7	Go to Step 3.					#
@@ -6885,8 +6885,8 @@
 #		1.4	Go to Step 10.					#
 #	Notes:	The usual case should take the branches 1.1 -> 1.3 -> 2.#
 #		However, it is conceivable |X| can be small very often	#
-#		because EXPM1 is intended to evaluate exp(X)-1 		#
-#		accurately when |X| is small. For further details on 	#
+#		because EXPM1 is intended to evaluate exp(X)-1		#
+#		accurately when |X| is small. For further details on	#
 #		the comparisons, see the notes on Step 1 of setox.	#
 #									#
 #	Step 2.	Calculate N = round-to-nearest-int( X * 64/log2 ).	#
@@ -6894,16 +6894,16 @@
 #		2.2	Calculate	J = N mod 64; so J = 0,1,2,..., #
 #			or 63.						#
 #		2.3	Calculate	M = (N - J)/64; so N = 64M + J.	#
-#		2.4	Calculate the address of the stored value of 	#
+#		2.4	Calculate the address of the stored value of	#
 #			2^(J/64).					#
-#		2.5	Create the values Sc = 2^M and 			#
+#		2.5	Create the values Sc = 2^M and			#
 #			OnebySc := -2^(-M).				#
 #	Notes:	See the notes on Step 2 of setox.			#
 #									#
 #	Step 3.	Calculate X - N*log2/64.				#
-#		3.1	R := X + N*L1, 					#
+#		3.1	R := X + N*L1,					#
 #				where L1 := single-precision(-log2/64).	#
-#		3.2	R := R + N*L2, 					#
+#		3.2	R := R + N*L2,					#
 #				L2 := extended-precision(-log2/64 - L1).#
 #	Notes:	Applying the analysis of Step 3 of setox in this case	#
 #		shows that |R| <= 0.0055 (note that |X| <= 70 log2 in	#
@@ -6911,10 +6911,10 @@
 #									#
 #	Step 4.	Approximate exp(R)-1 by a polynomial			#
 #			p = R+R*R*(A1+R*(A2+R*(A3+R*(A4+R*(A5+R*A6)))))	#
-#	Notes:	a) In order to reduce memory access, the coefficients 	#
-#		are made as "short" as possible: A1 (which is 1/2), A5 	#
-#		and A6 are single precision; A2, A3 and A4 are double 	#
-#		precision. 						#
+#	Notes:	a) In order to reduce memory access, the coefficients	#
+#		are made as "short" as possible: A1 (which is 1/2), A5	#
+#		and A6 are single precision; A2, A3 and A4 are double	#
+#		precision.						#
 #		b) Even with the restriction above,			#
 #			|p - (exp(R)-1)| <	|R| * 2^(-72.7)		#
 #		for all |R| <= 0.0055.					#
@@ -6929,9 +6929,9 @@
 #		where T and t are the stored values for 2^(J/64).	#
 #	Notes:	2^(J/64) is stored as T and t where T+t approximates	#
 #		2^(J/64) to roughly 85 bits; T is in extended precision	#
-#		and t is in single precision. Note also that T is 	#
-#		rounded to 62 bits so that the last two bits of T are 	#
-#		zero. The reason for such a special form is that T-1, 	#
+#		and t is in single precision. Note also that T is	#
+#		rounded to 62 bits so that the last two bits of T are	#
+#		zero. The reason for such a special form is that T-1,	#
 #		T-2, and T-8 will all be exact --- a property that will	#
 #		be exploited in Step 6 below. The total relative error	#
 #		in p is no bigger than 2^(-67.7) compared to the final	#
@@ -6946,7 +6946,7 @@
 #		6.5	ans := (T + OnebySc) + (p + t).			#
 #		6.6	Restore user FPCR.				#
 #		6.7	Return ans := Sc * ans. Exit.			#
-#	Notes:	The various arrangements of the expressions give 	#
+#	Notes:	The various arrangements of the expressions give	#
 #		accurate evaluations.					#
 #									#
 #	Step 7.	exp(X)-1 for |X| < 1/4.					#
@@ -6962,8 +6962,8 @@
 #		 Return ans := ans*2^(140). Exit			#
 #	Notes:	The idea is to return "X - tiny" under the user		#
 #		precision and rounding modes. To avoid unnecessary	#
-#		inefficiency, we stay away from denormalized numbers 	#
-#		the best we can. For |X| >= 2^(-16312), the 		#
+#		inefficiency, we stay away from denormalized numbers	#
+#		the best we can. For |X| >= 2^(-16312), the		#
 #		straightforward 8.2 generates the inexact exception as	#
 #		the case warrants.					#
 #									#
@@ -6971,13 +6971,13 @@
 #			p = X + X*X*(B1 + X*(B2 + ... + X*B12))		#
 #	Notes:	a) In order to reduce memory access, the coefficients	#
 #		are made as "short" as possible: B1 (which is 1/2), B9	#
-#		to B12 are single precision; B3 to B8 are double 	#
+#		to B12 are single precision; B3 to B8 are double	#
 #		precision; and B2 is double extended.			#
 #		b) Even with the restriction above,			#
 #			|p - (exp(X)-1)| < |X| 2^(-70.6)		#
 #		for all |X| <= 0.251.					#
 #		Note that 0.251 is slightly bigger than 1/4.		#
-#		c) To fully preserve accuracy, the polynomial is 	#
+#		c) To fully preserve accuracy, the polynomial is	#
 #		computed as						#
 #			X + ( S*B1 +	Q ) where S = X*X and		#
 #			Q	=	X*S*(B2 + X*(B3 + ... + X*B12))	#
@@ -6987,11 +6987,11 @@
 #				[ S*S*(B3 + S*(B5 + ... + S*B11)) ]	#
 #									#
 #	Step 10. Calculate exp(X)-1 for |X| >= 70 log 2.		#
-#		10.1 If X >= 70log2 , exp(X) - 1 = exp(X) for all 	#
+#		10.1 If X >= 70log2 , exp(X) - 1 = exp(X) for all	#
 #		practical purposes. Therefore, go to Step 1 of setox.	#
 #		10.2 If X <= -70log2, exp(X) - 1 = -1 for all practical	#
-#		purposes. 						#
-#		ans := -1 						#
+#		purposes.						#
+#		ans := -1						#
 #		Restore user FPCR					#
 #		Return ans := ans + 2^(-126). Exit.			#
 #	Notes:	10.2 will always create an inexact and return -1 + tiny	#
@@ -7496,10 +7496,10 @@
 # sgetexp():  returns the exponent portion of the input argument.	#
 #	      The exponent bias is removed and the exponent value is	#
 #	      returned as an extended precision number in fp0.		#
-# sgetexpd(): handles denormalized numbers. 				#
+# sgetexpd(): handles denormalized numbers.				#
 #									#
-# sgetman():  extracts the mantissa of the input argument. The 		#
-#	      mantissa is converted to an extended precision number w/ 	#
+# sgetman():  extracts the mantissa of the input argument. The		#
+#	      mantissa is converted to an extended precision number w/	#
 #	      an exponent of $3fff and is returned in fp0. The range of #
 #	      the result is [1.0 - 2.0).				#
 # sgetmand(): handles denormalized numbers.				#
@@ -7573,9 +7573,9 @@
 #	fp0 = cosh(X)							#
 #									#
 # ACCURACY and MONOTONICITY *******************************************	#
-#	The returned result is within 3 ulps in 64 significant bit, 	#
+#	The returned result is within 3 ulps in 64 significant bit,	#
 #	i.e. within 0.5001 ulp to 53 bits if the result is subsequently	#
-#	rounded to double precision. The result is provably monotonic 	#
+#	rounded to double precision. The result is provably monotonic	#
 #	in double precision.						#
 #									#
 # ALGORITHM ***********************************************************	#
@@ -7592,7 +7592,7 @@
 #									#
 #	4. (16380 log2 < |X| <= 16480 log2)				#
 #		cosh(X) = sign(X) * exp(|X|)/2.				#
-#		However, invoking exp(|X|) may cause premature 		#
+#		However, invoking exp(|X|) may cause premature		#
 #		overflow. Thus, we calculate sinh(X) as follows:	#
 #		Y	:= |X|						#
 #		Fact	:=	2**(16380)				#
@@ -7687,7 +7687,7 @@
 #	fp0 = sinh(X)							#
 #									#
 # ACCURACY and MONOTONICITY *******************************************	#
-#	The returned result is within 3 ulps in 64 significant bit, 	#
+#	The returned result is within 3 ulps in 64 significant bit,	#
 #	i.e. within 0.5001 ulp to 53 bits if the result is subsequently #
 #	rounded to double precision. The result is provably monotonic	#
 #	in double precision.						#
@@ -7805,7 +7805,7 @@
 #	fp0 = tanh(X)							#
 #									#
 # ACCURACY and MONOTONICITY *******************************************	#
-#	The returned result is within 3 ulps in 64 significant bit, 	#
+#	The returned result is within 3 ulps in 64 significant bit,	#
 #	i.e. within 0.5001 ulp to 53 bits if the result is subsequently #
 #	rounded to double precision. The result is provably monotonic	#
 #	in double precision.						#
@@ -7971,51 +7971,51 @@
 #	fp0 = log(X) or log(1+X)					#
 #									#
 # ACCURACY and MONOTONICITY *******************************************	#
-#	The returned result is within 2 ulps in 64 significant bit, 	#
+#	The returned result is within 2 ulps in 64 significant bit,	#
 #	i.e. within 0.5001 ulp to 53 bits if the result is subsequently	#
 #	rounded to double precision. The result is provably monotonic	#
 #	in double precision.						#
 #									#
 # ALGORITHM ***********************************************************	#
 #	LOGN:								#
-#	Step 1. If |X-1| < 1/16, approximate log(X) by an odd 		#
-#		polynomial in u, where u = 2(X-1)/(X+1). Otherwise, 	#
+#	Step 1. If |X-1| < 1/16, approximate log(X) by an odd		#
+#		polynomial in u, where u = 2(X-1)/(X+1). Otherwise,	#
 #		move on to Step 2.					#
 #									#
 #	Step 2. X = 2**k * Y where 1 <= Y < 2. Define F to be the first	#
-#		seven significant bits of Y plus 2**(-7), i.e. 		#
-#		F = 1.xxxxxx1 in base 2 where the six "x" match those 	#
+#		seven significant bits of Y plus 2**(-7), i.e.		#
+#		F = 1.xxxxxx1 in base 2 where the six "x" match those	#
 #		of Y. Note that |Y-F| <= 2**(-7).			#
 #									#
-#	Step 3. Define u = (Y-F)/F. Approximate log(1+u) by a 		#
+#	Step 3. Define u = (Y-F)/F. Approximate log(1+u) by a		#
 #		polynomial in u, log(1+u) = poly.			#
 #									#
-#	Step 4. Reconstruct 						#
+#	Step 4. Reconstruct						#
 #		log(X) = log( 2**k * Y ) = k*log(2) + log(F) + log(1+u)	#
 #		by k*log(2) + (log(F) + poly). The values of log(F) are	#
 #		calculated beforehand and stored in the program.	#
 #									#
 #	lognp1:								#
-#	Step 1: If |X| < 1/16, approximate log(1+X) by an odd 		#
+#	Step 1: If |X| < 1/16, approximate log(1+X) by an odd		#
 #		polynomial in u where u = 2X/(2+X). Otherwise, move on	#
 #		to Step 2.						#
 #									#
 #	Step 2: Let 1+X = 2**k * Y, where 1 <= Y < 2. Define F as done	#
-#		in Step 2 of the algorithm for LOGN and compute 	#
-#		log(1+X) as k*log(2) + log(F) + poly where poly 	#
-#		approximates log(1+u), u = (Y-F)/F. 			#
+#		in Step 2 of the algorithm for LOGN and compute		#
+#		log(1+X) as k*log(2) + log(F) + poly where poly		#
+#		approximates log(1+u), u = (Y-F)/F.			#
 #									#
 #	Implementation Notes:						#
-#	Note 1. There are 64 different possible values for F, thus 64 	#
+#	Note 1. There are 64 different possible values for F, thus 64	#
 #		log(F)'s need to be tabulated. Moreover, the values of	#
 #		1/F are also tabulated so that the division in (Y-F)/F	#
 #		can be performed by a multiplication.			#
 #									#
-#	Note 2. In Step 2 of lognp1, in order to preserved accuracy, 	#
-#		the value Y-F has to be calculated carefully when 	#
-#		1/2 <= X < 3/2. 					#
+#	Note 2. In Step 2 of lognp1, in order to preserved accuracy,	#
+#		the value Y-F has to be calculated carefully when	#
+#		1/2 <= X < 3/2.						#
 #									#
-#	Note 3. To fully exploit the pipeline, polynomials are usually 	#
+#	Note 3. To fully exploit the pipeline, polynomials are usually	#
 #		separated into two parts evaluated independently before	#
 #		being added up.						#
 #									#
@@ -8228,9 +8228,9 @@
 	cmp.l		%d1,&0			# CHECK IF X IS NEGATIVE
 	blt.w		LOGNEG			# LOG OF NEGATIVE ARGUMENT IS INVALID
 # X IS POSITIVE, CHECK IF X IS NEAR 1
-	cmp.l		%d1,&0x3ffef07d 	# IS X < 15/16?
+	cmp.l		%d1,&0x3ffef07d		# IS X < 15/16?
 	blt.b		LOGMAIN			# YES
-	cmp.l		%d1,&0x3fff8841 	# IS X > 17/16?
+	cmp.l		%d1,&0x3fff8841		# IS X > 17/16?
 	ble.w		LOGNEAR1		# NO
 
 LOGMAIN:
@@ -8243,7 +8243,7 @@
 #--NOTE THAT U = (Y-F)/F IS VERY SMALL AND THUS APPROXIMATING
 #--LOG(1+U) CAN BE VERY EFFICIENT.
 #--ALSO NOTE THAT THE VALUE 1/F IS STORED IN A TABLE SO THAT NO
-#--DIVISION IS NEEDED TO CALCULATE (Y-F)/F. 
+#--DIVISION IS NEEDED TO CALCULATE (Y-F)/F.
 
 #--GET K, Y, F, AND ADDRESS OF 1/F.
 	asr.l		&8,%d1
@@ -8458,10 +8458,10 @@
 	mov.l		X(%a6),%d1
 	cmp.l		%d1,&0
 	ble.w		LP1NEG0			# LOG OF ZERO OR -VE
-	cmp.l		%d1,&0x3ffe8000 	# IS BOUNDS [1/2,3/2]?
+	cmp.l		%d1,&0x3ffe8000		# IS BOUNDS [1/2,3/2]?
 	blt.w		LOGMAIN
 	cmp.l		%d1,&0x3fffc000
-	bgt.w		LOGMAIN 
+	bgt.w		LOGMAIN
 #--IF 1+Z > 3/2 OR 1+Z < 1/2, THEN X, WHICH IS ROUNDING 1+Z,
 #--CONTAINS AT LEAST 63 BITS OF INFORMATION OF Z. IN THAT CASE,
 #--SIMPLY INVOKE LOG(X) FOR LOG(1+Z).
@@ -8562,7 +8562,7 @@
 #	a0 = pointer to extended precision input			#
 #	d0 = round precision,mode					#
 #									#
-# OUTPUT **************************************************************	# 
+# OUTPUT **************************************************************	#
 #	fp0 = arctanh(X)						#
 #									#
 # ACCURACY and MONOTONICITY *******************************************	#
@@ -8677,7 +8677,7 @@
 #            2.1 Restore the user FPCR					#
 #            2.2 Return ans := Y * INV_L10.				#
 #									#
-#       slog10: 							#
+#       slog10:								#
 #									#
 #       Step 0. If X < 0, create a NaN and raise the invalid operation	#
 #               flag. Otherwise, save FPCR in D1; set FpCR to default.	#
@@ -8820,7 +8820,7 @@
 #	fp0 = 2**X or 10**X						#
 #									#
 # ACCURACY and MONOTONICITY *******************************************	#
-#	The returned result is within 2 ulps in 64 significant bit, 	#
+#	The returned result is within 2 ulps in 64 significant bit,	#
 #	i.e. within 0.5001 ulp to 53 bits if the result is subsequently	#
 #	rounded to double precision. The result is provably monotonic	#
 #	in double precision.						#
@@ -8851,7 +8851,7 @@
 #									#
 #	4. Define r as							#
 #		r := ((X - N*L1)-N*L2) * L10				#
-#		where L1, L2 are the leading and trailing parts of 	#
+#		where L1, L2 are the leading and trailing parts of	#
 #		log_10(2)/64 and L10 is the natural log of 10. Then	#
 #		10**X = 2**(M') * 2**(M) * 2**(j/64) * exp(r).		#
 #		Go to expr to compute that expression.			#
@@ -8872,7 +8872,7 @@
 #		Exit.							#
 #									#
 #	ExpBig								#
-#	1. Generate overflow by Huge * Huge if X > 0; otherwise, 	#
+#	1. Generate overflow by Huge * Huge if X > 0; otherwise,	#
 #	        generate underflow by Tiny * Tiny.			#
 #									#
 #	ExpSm								#
@@ -9203,7 +9203,7 @@
 
 #########################################################################
 # sscale(): computes the destination operand scaled by the source	#
-#	    operand. If the absoulute value of the source operand is 	#
+#	    operand. If the absoulute value of the source operand is	#
 #	    >= 2^14, an overflow or underflow is returned.		#
 #									#
 # INPUT *************************************************************** #
@@ -9265,7 +9265,7 @@
 	bge.b		sok_norm2		# thank goodness no
 
 # the multiply factor that we're trying to create should be a denorm
-# for the multiply to work. therefore, we're going to actually do a 
+# for the multiply to work. therefore, we're going to actually do a
 # multiply with a denorm which will cause an unimplemented data type
 # exception to be put into the machine which will be caught and corrected
 # later. we don't do this with the DENORMs above because this method
@@ -9280,7 +9280,7 @@
 	clr.l		-(%sp)			# insert zero low mantissa
 	mov.l		%d1,-(%sp)		# insert new high mantissa
 	clr.l		-(%sp)			# make zero exponent
-	bra.b		sok_norm_cont	
+	bra.b		sok_norm_cont
 sok_dnrm_32:
 	subi.b		&0x20,%d0		# get shift count
 	lsr.l		%d0,%d1			# make low mantissa longword
@@ -9288,7 +9288,7 @@
 	clr.l		-(%sp)			# insert zero high mantissa
 	clr.l		-(%sp)			# make zero exponent
 	bra.b		sok_norm_cont
-	
+
 # the src will force the dst to a DENORM value or worse. so, let's
 # create an fp multiply that will create the result.
 sok_norm:
@@ -9346,7 +9346,7 @@
 #	a1 = pointer to extended precision input Y			#
 #	d0 = round precision,mode					#
 #									#
-# 	The input operands X and Y can be either normalized or 		#
+#	The input operands X and Y can be either normalized or		#
 #	denormalized.							#
 #									#
 # OUTPUT ************************************************************** #
@@ -9355,7 +9355,7 @@
 # ALGORITHM *********************************************************** #
 #									#
 #       Step 1.  Save and strip signs of X and Y: signX := sign(X),	#
-#                signY := sign(Y), X := |X|, Y := |Y|, 			#
+#                signY := sign(Y), X := |X|, Y := |Y|,			#
 #                signQ := signX EOR signY. Record whether MOD or REM	#
 #                is requested.						#
 #									#
@@ -9375,7 +9375,7 @@
 #									#
 #       Step 4.  At this point, R = X - QY = MOD(X,Y). Set		#
 #                Last_Subtract := false (used in Step 7 below). If	#
-#                MOD is requested, go to Step 6. 			#
+#                MOD is requested, go to Step 6.			#
 #									#
 #       Step 5.  R = MOD(X,Y), but REM(X,Y) is requested.		#
 #            5.1 If R < Y/2, then R = MOD(X,Y) = REM(X,Y). Go to	#
@@ -9701,8 +9701,8 @@
 	mov.b		&FMUL_OP,%d1		# last inst is MUL
 	fmul.x		Scale(%pc),%fp0		# may cause underflow
 	bra		t_catch2
-# the '040 package did this apparently to see if the dst operand for the 
-# preceding fmul was a denorm. but, it better not have been since the 
+# the '040 package did this apparently to see if the dst operand for the
+# preceding fmul was a denorm. but, it better not have been since the
 # algorithm just got done playing with fp0 and expected no exceptions
 # as a result. trust me...
 #	bra		t_avoid_unsupp		# check for denorm as a
@@ -9716,7 +9716,7 @@
 Rem_is_0:
 #..R = 2^(-j)X - Q Y = Y, thus R = 0 and quotient = 2^j (Q+1)
 	addq.l		&1,%d3
-	cmp.l		%d0,&8			# D0 is j 
+	cmp.l		%d0,&8			# D0 is j
 	bge.b		Q_Big
 
 	lsl.l		%d0,%d3
@@ -9746,7 +9746,7 @@
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	tag(): return the optype of the input ext fp number		#
+#	tag(): return the optype of the input ext fp number		#
 #									#
 #	This routine is used by the 060FPLSP.				#
 #									#
@@ -9755,13 +9755,13 @@
 #									#
 # INPUT ***************************************************************	#
 #	a0 = pointer to extended precision operand			#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	d0 = value of type tag						#
-# 		one of: NORM, INF, QNAN, SNAN, DENORM, ZERO		#
+#		one of: NORM, INF, QNAN, SNAN, DENORM, ZERO		#
 #									#
 # ALGORITHM ***********************************************************	#
-#	Simply test the exponent, j-bit, and mantissa values to 	#
+#	Simply test the exponent, j-bit, and mantissa values to		#
 # determine the type of operand.					#
 #	If it's an unnormalized zero, alter the operand and force it	#
 # to be a normal zero.							#
@@ -9829,15 +9829,15 @@
 #									#
 # INPUT ***************************************************************	#
 #	a0 = pointer to extended precision source operand.		#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	fp0 = default DZ result.					#
 #									#
 # ALGORITHM ***********************************************************	#
-#	Transcendental emulation for the 060FPLSP has detected that 	#
+#	Transcendental emulation for the 060FPLSP has detected that	#
 # a DZ exception should occur for the instruction. If DZ is disabled,	#
 # return the default result.						#
-# 	If DZ is enabled, the dst operand should be returned unscathed	#
+#	If DZ is enabled, the dst operand should be returned unscathed	#
 # in fp0 while fp1 is used to create a DZ exception so that the		#
 # operating system can log that such an event occurred.			#
 #									#
@@ -9898,7 +9898,7 @@
 #									#
 # INPUT ***************************************************************	#
 #	fp1 = source operand						#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	fp0 = default result						#
 #	fp1 = unchanged							#
@@ -9927,7 +9927,7 @@
 # but use fp2 instead. return the dst operand unscathed in fp0.
 operr_ena:
 	fmovm.x		EXC_FP0(%a6),&0x80	# return fp0 unscathed
-	fmov.l		USER_FPCR(%a6),%fpcr	
+	fmov.l		USER_FPCR(%a6),%fpcr
 	fmovm.x		&0x04,-(%sp)		# save fp2
 	fmov.s		&0x7f800000,%fp2	# load +INF
 	fmul.s		&0x00000000,%fp2	# +INF x 0
@@ -9956,7 +9956,7 @@
 #									#
 # INPUT ***************************************************************	#
 #	a0 = pointer to extended precision source operand		#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	fp0 = default underflow result					#
 #									#
@@ -10003,8 +10003,8 @@
 #		  (monadic)						#
 #	t_ovfl2(): Handle 060FPLSP overflow exception during		#
 #	           emulation. result always positive. (dyadic)		#
-#	t_ovfl_sc(): Handle 060FPLSP overflow exception during 		#
-#	             emulation for "fscale". 				#
+#	t_ovfl_sc(): Handle 060FPLSP overflow exception during		#
+#	             emulation for "fscale".				#
 #									#
 #	This routine is used by the 060FPLSP package.			#
 #									#
@@ -10013,7 +10013,7 @@
 #									#
 # INPUT ***************************************************************	#
 #	a0 = pointer to extended precision source operand		#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	fp0 = default underflow result					#
 #									#
@@ -10113,12 +10113,12 @@
 #									#
 # INPUT ***************************************************************	#
 #	fp0 = default underflow or overflow result			#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	fp0 = default result						#
 #									#
 # ALGORITHM ***********************************************************	#
-# 	If an overflow or underflow occurred during the last 		#
+#	If an overflow or underflow occurred during the last		#
 # instruction of transcendental 060FPLSP emulation, then it has already	#
 # occurred and has been logged. Now we need to see if an inexact	#
 # exception should occur.						#
@@ -10147,16 +10147,16 @@
 #									#
 # INPUT ***************************************************************	#
 #	fp0 = default result						#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	fp0 = default result						#
 #									#
 # ALGORITHM ***********************************************************	#
-# 	The last instruction of transcendental emulation for the 	#
+#	The last instruction of transcendental emulation for the	#
 # 060FPLSP should be inexact. So, if inexact is enabled, then we create	#
 # the event here by adding a large and very small number together	#
 # so that the operating system can log the event.			#
-# 	Must check, too, if the result was zero, in which case we just	#
+#	Must check, too, if the result was zero, in which case we just	#
 # set the FPSR bits and return.						#
 #									#
 #########################################################################
@@ -10178,7 +10178,7 @@
 inx2_work:
 	btst		&inex2_bit,FPCR_ENABLE(%a6) # is inexact enabled?
 	bne.b		inx2_work_ena		# yes
-	rts	
+	rts
 inx2_work_ena:
 	fmov.l		USER_FPCR(%a6),%fpcr	# insert user's exceptions
 	fmov.s		&0x3f800000,%fp1	# load +1
@@ -10202,7 +10202,7 @@
 #									#
 # INPUT ***************************************************************	#
 #	a0 = pointer to extended precision input operand		#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	fp0 = default result						#
 #									#
@@ -10235,7 +10235,7 @@
 
 #
 # sto_cos:
-# 	This is used by fsincos library emulation. The correct
+#	This is used by fsincos library emulation. The correct
 # values are already in fp0 and fp1 so we do nothing here.
 #
 	global		sto_cos
@@ -10485,7 +10485,7 @@
 #########################################################################
 	global		dst_zero
 dst_zero:
-	tst.b		DST_EX(%a1) 		# get sign of dst operand
+	tst.b		DST_EX(%a1)		# get sign of dst operand
 	bmi.b		ld_mzero		# if neg, load neg zero
 	bra.b		ld_pzero		# load positive zero
 
@@ -10494,7 +10494,7 @@
 #########################################################################
 	global		src_inf
 src_inf:
-	tst.b		SRC_EX(%a0) 		# get sign of src operand
+	tst.b		SRC_EX(%a0)		# get sign of src operand
 	bmi.b		ld_minf			# if negative branch
 
 #
@@ -10520,7 +10520,7 @@
 #########################################################################
 	global		dst_inf
 dst_inf:
-	tst.b		DST_EX(%a1) 		# get sign of dst operand
+	tst.b		DST_EX(%a1)		# get sign of dst operand
 	bmi.b		ld_minf			# if negative branch
 	bra.b		ld_pinf
 
@@ -10562,7 +10562,7 @@
 #########################################################################
 	global		src_one
 src_one:
-	tst.b		SRC_EX(%a0) 		# check sign of source
+	tst.b		SRC_EX(%a0)		# check sign of source
 	bmi.b		ld_mone
 
 #
@@ -10591,7 +10591,7 @@
 #################################################################
 	global		spi_2
 spi_2:
-	tst.b		SRC_EX(%a0) 		# check sign of source
+	tst.b		SRC_EX(%a0)		# check sign of source
 	bmi.b		ld_mpi2
 
 #
@@ -10618,7 +10618,7 @@
 
 #
 # ssincosz(): When the src operand is ZERO, store a one in the
-# 	      cosine register and return a ZERO in fp0 w/ the same sign
+#	      cosine register and return a ZERO in fp0 w/ the same sign
 #	      as the src operand.
 #
 	global		ssincosz
@@ -10646,7 +10646,7 @@
 
 #
 # ssincosqnan(): When the src operand is a QNAN, store the QNAN in the cosine
-# 		 register and branch to the src QNAN routine.
+#		 register and branch to the src QNAN routine.
 #
 	global		ssincosqnan
 ssincosqnan:
@@ -10827,7 +10827,7 @@
 #	a0 = pointer fp extended precision operand to normalize		#
 #									#
 # OUTPUT ************************************************************** #
-# 	d0 = number of bit positions the mantissa was shifted		#
+#	d0 = number of bit positions the mantissa was shifted		#
 #	a0 = the input operand's mantissa is normalized; the exponent	#
 #	     is unchanged.						#
 #									#
@@ -10854,7 +10854,7 @@
 	mov.l		%d1, FTEMP_LO(%a0)	# store new lo(man)
 
 	mov.l		%d2, %d0		# return shift amount
-	
+
 	mov.l		(%sp)+, %d3		# restore temp regs
 	mov.l		(%sp)+, %d2
 
@@ -10869,7 +10869,7 @@
 	clr.l		FTEMP_LO(%a0)		# lo(man) is now zero
 
 	mov.l		%d2, %d0		# return shift amount
-	
+
 	mov.l		(%sp)+, %d3		# restore temp regs
 	mov.l		(%sp)+, %d2
 
@@ -10974,7 +10974,7 @@
 # whole mantissa is zero so this UNNORM is actually a zero
 #
 unnorm_zero:
-	and.w		&0x8000, FTEMP_EX(%a0) 	# force exponent to zero
+	and.w		&0x8000, FTEMP_EX(%a0)	# force exponent to zero
 
 	mov.b		&ZERO, %d0		# fix optype tag
 	rts
diff -Nru a/arch/m68k/ifpsp060/src/fpsp.S b/arch/m68k/ifpsp060/src/fpsp.S
--- a/arch/m68k/ifpsp060/src/fpsp.S	Sun May 16 01:18:36 2004
+++ b/arch/m68k/ifpsp060/src/fpsp.S	Sun May 16 01:18:36 2004
@@ -5,10 +5,10 @@
 Production Release P1.00 -- October 10, 1994
 
 M68060 Software Package Copyright © 1993, 1994 Motorola Inc.  All rights reserved.
- 
+
 THE SOFTWARE is provided on an "AS IS" basis and without warranty.
 To the maximum extent permitted by applicable law,
-MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, 
+MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED,
 INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
 and any warranty against infringement with regard to the SOFTWARE
 (INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials.
@@ -90,7 +90,7 @@
 	bra.l		_fpsp_effadd
 	short		0x0000
 
-	space 		56
+	space		56
 
 ###############################################################
 	global		_fpsp_done
@@ -324,33 +324,33 @@
 set EXC_D1,		EXC_DREGS+(1*4)
 set EXC_D0,		EXC_DREGS+(0*4)
 
-set EXC_FP0, 		EXC_FPREGS+(0*12)	# offset of saved fp0
-set EXC_FP1, 		EXC_FPREGS+(1*12)	# offset of saved fp1
-set EXC_FP2, 		EXC_FPREGS+(2*12)	# offset of saved fp2 (not used)
+set EXC_FP0,		EXC_FPREGS+(0*12)	# offset of saved fp0
+set EXC_FP1,		EXC_FPREGS+(1*12)	# offset of saved fp1
+set EXC_FP2,		EXC_FPREGS+(2*12)	# offset of saved fp2 (not used)
 
-set FP_SCR1, 		LV+80			# fp scratch 1
-set FP_SCR1_EX, 	FP_SCR1+0
+set FP_SCR1,		LV+80			# fp scratch 1
+set FP_SCR1_EX,		FP_SCR1+0
 set FP_SCR1_SGN,	FP_SCR1+2
-set FP_SCR1_HI, 	FP_SCR1+4
-set FP_SCR1_LO, 	FP_SCR1+8
+set FP_SCR1_HI,		FP_SCR1+4
+set FP_SCR1_LO,		FP_SCR1+8
 
-set FP_SCR0, 		LV+68			# fp scratch 0
-set FP_SCR0_EX, 	FP_SCR0+0
+set FP_SCR0,		LV+68			# fp scratch 0
+set FP_SCR0_EX,		FP_SCR0+0
 set FP_SCR0_SGN,	FP_SCR0+2
-set FP_SCR0_HI, 	FP_SCR0+4
-set FP_SCR0_LO, 	FP_SCR0+8
+set FP_SCR0_HI,		FP_SCR0+4
+set FP_SCR0_LO,		FP_SCR0+8
 
-set FP_DST, 		LV+56			# fp destination operand
-set FP_DST_EX, 		FP_DST+0
+set FP_DST,		LV+56			# fp destination operand
+set FP_DST_EX,		FP_DST+0
 set FP_DST_SGN,		FP_DST+2
-set FP_DST_HI, 		FP_DST+4
-set FP_DST_LO, 		FP_DST+8
+set FP_DST_HI,		FP_DST+4
+set FP_DST_LO,		FP_DST+8
 
-set FP_SRC, 		LV+44			# fp source operand
-set FP_SRC_EX, 		FP_SRC+0
+set FP_SRC,		LV+44			# fp source operand
+set FP_SRC_EX,		FP_SRC+0
 set FP_SRC_SGN,		FP_SRC+2
-set FP_SRC_HI, 		FP_SRC+4
-set FP_SRC_LO, 		FP_SRC+8
+set FP_SRC_HI,		FP_SRC+4
+set FP_SRC_LO,		FP_SRC+8
 
 set USER_FPIAR,		LV+40			# FP instr address register
 
@@ -374,7 +374,7 @@
 set EXC_TEMP,		LV+16			# temporary space
 
 set DTAG,		LV+15			# destination operand type
-set STAG, 		LV+14			# source operand type
+set STAG,		LV+14			# source operand type
 
 set SPCOND_FLG,		LV+10			# flag: special case (see below)
 
@@ -389,17 +389,17 @@
 # Helpful macros
 
 set FTEMP,		0			# offsets within an
-set FTEMP_EX, 		0			# extended precision
+set FTEMP_EX,		0			# extended precision
 set FTEMP_SGN,		2			# value saved in memory.
-set FTEMP_HI, 		4
-set FTEMP_LO, 		8
+set FTEMP_HI,		4
+set FTEMP_LO,		8
 set FTEMP_GRS,		12
 
 set LOCAL,		0			# offsets within an
-set LOCAL_EX, 		0			# extended precision 
+set LOCAL_EX,		0			# extended precision
 set LOCAL_SGN,		2			# value saved in memory.
-set LOCAL_HI, 		4
-set LOCAL_LO, 		8
+set LOCAL_HI,		4
+set LOCAL_LO,		8
 set LOCAL_GRS,		12
 
 set DST,		0			# offsets within an
@@ -489,17 +489,17 @@
 ######################################
 set dzinf_mask,		inf_mask+dz_mask+adz_mask
 set opnan_mask,		nan_mask+operr_mask+aiop_mask
-set nzi_mask,		0x01ffffff 		#clears N, Z, and I
+set nzi_mask,		0x01ffffff		#clears N, Z, and I
 set unfinx_mask,	unfl_mask+inex2_mask+aunfl_mask+ainex_mask
 set unf2inx_mask,	unfl_mask+inex2_mask+ainex_mask
 set ovfinx_mask,	ovfl_mask+inex2_mask+aovfl_mask+ainex_mask
 set inx1a_mask,		inex1_mask+ainex_mask
 set inx2a_mask,		inex2_mask+ainex_mask
-set snaniop_mask, 	nan_mask+snan_mask+aiop_mask
+set snaniop_mask,	nan_mask+snan_mask+aiop_mask
 set snaniop2_mask,	snan_mask+aiop_mask
 set naniop_mask,	nan_mask+aiop_mask
 set neginf_mask,	neg_mask+inf_mask
-set infaiop_mask, 	inf_mask+aiop_mask
+set infaiop_mask,	inf_mask+aiop_mask
 set negz_mask,		neg_mask+z_mask
 set opaop_mask,		operr_mask+aiop_mask
 set unfl_inx_mask,	unfl_mask+aunfl_mask+ainex_mask
@@ -528,8 +528,8 @@
 set mantissalen,	64			# length of mantissa in bits
 
 set BYTE,		1			# len(byte) == 1 byte
-set WORD, 		2			# len(word) == 2 bytes
-set LONG, 		4			# len(longword) == 2 bytes
+set WORD,		2			# len(word) == 2 bytes
+set LONG,		4			# len(longword) == 2 bytes
 
 set BSUN_VEC,		0xc0			# bsun    vector offset
 set INEX_VEC,		0xc4			# inexact vector offset
@@ -599,7 +599,7 @@
 # INPUT ***************************************************************	#
 #	- The system stack contains the FP Ovfl exception stack frame	#
 #	- The fsave frame contains the source operand			#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	Overflow Exception enabled:					#
 #	- The system stack is unchanged					#
@@ -610,24 +610,24 @@
 #									#
 # ALGORITHM ***********************************************************	#
 #	On the 060, if an FP overflow is present as the result of any	#
-# instruction, the 060 will take an overflow exception whether the 	#
-# exception is enabled or disabled in the FPCR. For the disabled case, 	#
+# instruction, the 060 will take an overflow exception whether the	#
+# exception is enabled or disabled in the FPCR. For the disabled case,	#
 # This handler emulates the instruction to determine what the correct	#
 # default result should be for the operation. This default result is	#
-# then stored in either the FP regfile, data regfile, or memory. 	#
-# Finally, the handler exits through the "callout" _fpsp_done() 	#
+# then stored in either the FP regfile, data regfile, or memory.	#
+# Finally, the handler exits through the "callout" _fpsp_done()		#
 # denoting that no exceptional conditions exist within the machine.	#
-# 	If the exception is enabled, then this handler must create the	#
+#	If the exception is enabled, then this handler must create the	#
 # exceptional operand and plave it in the fsave state frame, and store	#
-# the default result (only if the instruction is opclass 3). For 	#
-# exceptions enabled, this handler must exit through the "callout" 	#
+# the default result (only if the instruction is opclass 3). For	#
+# exceptions enabled, this handler must exit through the "callout"	#
 # _real_ovfl() so that the operating system enabled overflow handler	#
 # can handle this case.							#
-#	Two other conditions exist. First, if overflow was disabled 	#
-# but the inexact exception was enabled, this handler must exit 	#
+#	Two other conditions exist. First, if overflow was disabled	#
+# but the inexact exception was enabled, this handler must exit		#
 # through the "callout" _real_inex() regardless of whether the result	#
 # was inexact.								#
-#	Also, in the case of an opclass three instruction where 	#
+#	Also, in the case of an opclass three instruction where		#
 # overflow was disabled and the trace exception was enabled, this	#
 # handler must exit through the "callout" _real_trace().		#
 #									#
@@ -642,9 +642,9 @@
 
 	fsave		FP_SRC(%a6)		# grab the "busy" frame
 
- 	movm.l		&0x0303,EXC_DREGS(%a6)	# save d0-d1/a0-a1
+	movm.l		&0x0303,EXC_DREGS(%a6)	# save d0-d1/a0-a1
 	fmovm.l		%fpcr,%fpsr,%fpiar,USER_FPCR(%a6) # save ctrl regs
- 	fmovm.x		&0xc0,EXC_FPREGS(%a6)	# save fp0-fp1 on stack
+	fmovm.x		&0xc0,EXC_FPREGS(%a6)	# save fp0-fp1 on stack
 
 # the FPIAR holds the "current PC" of the faulting instruction
 	mov.l		USER_FPIAR(%a6),EXC_EXTWPTR(%a6)
@@ -668,7 +668,7 @@
 	bsr.l		set_tag_x		# tag the operand type
 	mov.b		%d0,STAG(%a6)		# maybe NORM,DENORM
 
-# bit five of the fp extension word separates the monadic and dyadic operations 
+# bit five of the fp extension word separates the monadic and dyadic operations
 # that can pass through fpsp_ovfl(). remember that fcmp, ftst, and fsincos
 # will never take this exception.
 	btst		&0x5,1+EXC_CMDREG(%a6)	# is operation monadic or dyadic?
@@ -741,7 +741,7 @@
 fovfl_ovfl_on:
 	fmovm.x		&0x40,FP_SRC(%a6)	# save EXOP (fp1) to stack
 
-	mov.w		&0xe005,2+FP_SRC(%a6) 	# save exc status
+	mov.w		&0xe005,2+FP_SRC(%a6)	# save exc status
 
 	fmovm.x		EXC_FPREGS(%a6),&0xc0	# restore fp0-fp1
 	fmovm.l		USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs
@@ -757,10 +757,10 @@
 # we must jump to real_inex().
 fovfl_inex_on:
 
-	fmovm.x		&0x40,FP_SRC(%a6) 	# save EXOP (fp1) to stack
+	fmovm.x		&0x40,FP_SRC(%a6)	# save EXOP (fp1) to stack
 
 	mov.b		&0xc4,1+EXC_VOFF(%a6)	# vector offset = 0xc4
-	mov.w		&0xe001,2+FP_SRC(%a6) 	# save exc status
+	mov.w		&0xe001,2+FP_SRC(%a6)	# save exc status
 
 	fmovm.x		EXC_FPREGS(%a6),&0xc0	# restore fp0-fp1
 	fmovm.l		USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs
@@ -811,7 +811,7 @@
 	btst		&0x7,(%sp)		# is trace on?
 	beq.l		_fpsp_done		# no
 
-	fmov.l		%fpiar,0x8(%sp)		# "Current PC" is in FPIAR	
+	fmov.l		%fpiar,0x8(%sp)		# "Current PC" is in FPIAR
 	mov.w		&0x2024,0x6(%sp)	# stk fmt = 0x2; voff = 0x024
 	bra.l		_real_trace
 
@@ -839,7 +839,7 @@
 # INPUT ***************************************************************	#
 #	- The system stack contains the FP Unfl exception stack frame	#
 #	- The fsave frame contains the source operand			#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	Underflow Exception enabled:					#
 #	- The system stack is unchanged					#
@@ -850,24 +850,24 @@
 #									#
 # ALGORITHM ***********************************************************	#
 #	On the 060, if an FP underflow is present as the result of any	#
-# instruction, the 060 will take an underflow exception whether the 	#
-# exception is enabled or disabled in the FPCR. For the disabled case, 	#
+# instruction, the 060 will take an underflow exception whether the	#
+# exception is enabled or disabled in the FPCR. For the disabled case,	#
 # This handler emulates the instruction to determine what the correct	#
 # default result should be for the operation. This default result is	#
-# then stored in either the FP regfile, data regfile, or memory. 	#
-# Finally, the handler exits through the "callout" _fpsp_done() 	#
+# then stored in either the FP regfile, data regfile, or memory.	#
+# Finally, the handler exits through the "callout" _fpsp_done()		#
 # denoting that no exceptional conditions exist within the machine.	#
-# 	If the exception is enabled, then this handler must create the	#
+#	If the exception is enabled, then this handler must create the	#
 # exceptional operand and plave it in the fsave state frame, and store	#
-# the default result (only if the instruction is opclass 3). For 	#
-# exceptions enabled, this handler must exit through the "callout" 	#
+# the default result (only if the instruction is opclass 3). For	#
+# exceptions enabled, this handler must exit through the "callout"	#
 # _real_unfl() so that the operating system enabled overflow handler	#
 # can handle this case.							#
-#	Two other conditions exist. First, if underflow was disabled 	#
-# but the inexact exception was enabled and the result was inexact, 	#
+#	Two other conditions exist. First, if underflow was disabled	#
+# but the inexact exception was enabled and the result was inexact,	#
 # this handler must exit through the "callout" _real_inex().		#
 # was inexact.								#
-#	Also, in the case of an opclass three instruction where 	#
+#	Also, in the case of an opclass three instruction where		#
 # underflow was disabled and the trace exception was enabled, this	#
 # handler must exit through the "callout" _real_trace().		#
 #									#
@@ -882,12 +882,12 @@
 
 	fsave		FP_SRC(%a6)		# grab the "busy" frame
 
- 	movm.l		&0x0303,EXC_DREGS(%a6)	# save d0-d1/a0-a1
+	movm.l		&0x0303,EXC_DREGS(%a6)	# save d0-d1/a0-a1
 	fmovm.l		%fpcr,%fpsr,%fpiar,USER_FPCR(%a6) # save ctrl regs
- 	fmovm.x		&0xc0,EXC_FPREGS(%a6)	# save fp0-fp1 on stack
+	fmovm.x		&0xc0,EXC_FPREGS(%a6)	# save fp0-fp1 on stack
 
 # the FPIAR holds the "current PC" of the faulting instruction
-	mov.l		USER_FPIAR(%a6),EXC_EXTWPTR(%a6)	
+	mov.l		USER_FPIAR(%a6),EXC_EXTWPTR(%a6)
 	mov.l		EXC_EXTWPTR(%a6),%a0	# fetch instruction addr
 	addq.l		&0x4,EXC_EXTWPTR(%a6)	# incr instruction ptr
 	bsr.l		_imem_read_long		# fetch the instruction words
@@ -906,13 +906,13 @@
 	bsr.l		set_tag_x		# tag the operand type
 	mov.b		%d0,STAG(%a6)		# maybe NORM,DENORM
 
-# bit five of the fp ext word separates the monadic and dyadic operations 
+# bit five of the fp ext word separates the monadic and dyadic operations
 # that can pass through fpsp_unfl(). remember that fcmp, and ftst
 # will never take this exception.
 	btst		&0x5,1+EXC_CMDREG(%a6)	# is op monadic or dyadic?
 	beq.b		funfl_extract		# monadic
 
-# now, what's left that's not dyadic is fsincos. we can distinguish it 
+# now, what's left that's not dyadic is fsincos. we can distinguish it
 # from all dyadics by the '0110xxx pattern
 	btst		&0x4,1+EXC_CMDREG(%a6)	# is op an fsincos?
 	bne.b		funfl_extract		# yes
@@ -963,7 +963,7 @@
 # (0x00000000_80000000_00000000), then the machine will take an
 # underflow exception. Since this is incorrect, we need to check
 # if our emulation, after re-doing the operation, decided that
-# no underflow was called for. We do these checks only in 
+# no underflow was called for. We do these checks only in
 # funfl_{unfl,inex}_on() because w/ both exceptions disabled, this
 # special case will simply exit gracefully with the correct result.
 
@@ -1003,7 +1003,7 @@
 funfl_unfl_on2:
 	fmovm.x		&0x40,FP_SRC(%a6)	# save EXOP (fp1) to stack
 
-	mov.w		&0xe003,2+FP_SRC(%a6) 	# save exc status
+	mov.w		&0xe003,2+FP_SRC(%a6)	# save exc status
 
 	fmovm.x		EXC_FPREGS(%a6),&0xc0	# restore fp0-fp1
 	fmovm.l		USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs
@@ -1022,7 +1022,7 @@
 # The `060 FPU multiplier hardware is such that if the result of a
 # multiply operation is the smallest possible normalized number
 # (0x00000000_80000000_00000000), then the machine will take an
-# underflow exception. 
+# underflow exception.
 # But, whether bogus or not, if inexact is enabled AND it occurred,
 # then we have to branch to real_inex.
 
@@ -1031,10 +1031,10 @@
 
 funfl_inex_on2:
 
-	fmovm.x		&0x40,FP_SRC(%a6) 	# save EXOP to stack
+	fmovm.x		&0x40,FP_SRC(%a6)	# save EXOP to stack
 
 	mov.b		&0xc4,1+EXC_VOFF(%a6)	# vector offset = 0xc4
-	mov.w		&0xe001,2+FP_SRC(%a6) 	# save exc status
+	mov.w		&0xe001,2+FP_SRC(%a6)	# save exc status
 
 	fmovm.x		EXC_FPREGS(%a6),&0xc0	# restore fp0-fp1
 	fmovm.l		USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs
@@ -1120,7 +1120,7 @@
 # INPUT ***************************************************************	#
 #	- The system stack contains the "Unimp Data Type" stk frame	#
 #	- The fsave frame contains the ssrc op (for UNNORM/DENORM)	#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	If Inexact exception (opclass 3):				#
 #	- The system stack is changed to an Inexact exception stk frame	#
@@ -1139,12 +1139,12 @@
 #									#
 # ALGORITHM ***********************************************************	#
 #	Two main instruction types can enter here: (1) DENORM or UNNORM	#
-# unimplemented data types. These can be either opclass 0,2 or 3 	#
+# unimplemented data types. These can be either opclass 0,2 or 3	#
 # instructions, and (2) PACKED unimplemented data format instructions	#
 # also of opclasses 0,2, or 3.						#
 #	For UNNORM/DENORM opclass 0 and 2, the handler fetches the src	#
 # operand from the fsave state frame and the dst operand (if dyadic)	#
-# from the FP register file. The instruction is then emulated by 	#
+# from the FP register file. The instruction is then emulated by	#
 # choosing an emulation routine from a table of routines indexed by	#
 # instruction type. Once the instruction has been emulated and result	#
 # saved, then we check to see if any enabled exceptions resulted from	#
@@ -1166,7 +1166,7 @@
 # (a Trace stack frame must be created here, too). If an FP exception	#
 # should occur, then we must create an exception stack frame of that	#
 # type and jump to either _real_snan(), _real_operr(), _real_inex(),	#
-# _real_unfl(), or _real_ovfl() as appropriate. PACKED opclass 3 	#
+# _real_unfl(), or _real_ovfl() as appropriate. PACKED opclass 3	#
 # emulation is performed in a similar manner.				#
 #									#
 #########################################################################
@@ -1178,7 +1178,7 @@
 #				*****************
 #				*      EA	*
 #	 pre-instruction	*		*
-# 	*****************	*****************
+#	*****************	*****************
 #	* 0x0 *  0x0dc  *	* 0x3 *  0x0dc  *
 #	*****************	*****************
 #	*     Next	*	*     Next	*
@@ -1207,9 +1207,9 @@
 
 	fsave		FP_SRC(%a6)		# save fp state
 
- 	movm.l		&0x0303,EXC_DREGS(%a6)	# save d0-d1/a0-a1
+	movm.l		&0x0303,EXC_DREGS(%a6)	# save d0-d1/a0-a1
 	fmovm.l		%fpcr,%fpsr,%fpiar,USER_FPCR(%a6) # save ctrl regs
- 	fmovm.x		&0xc0,EXC_FPREGS(%a6)	# save fp0-fp1 on stack
+	fmovm.x		&0xc0,EXC_FPREGS(%a6)	# save fp0-fp1 on stack
 
 	btst		&0x5,EXC_SR(%a6)	# user or supervisor mode?
 	bne.b		fu_s
@@ -1258,7 +1258,7 @@
 	fmov.l		&0x0,%fpsr
 
 # Opclass two w/ memory-to-fpn operation will have an incorrect extended
-# precision format if the src format was single or double and the 
+# precision format if the src format was single or double and the
 # source data type was an INF, NAN, DENORM, or UNNORM
 	lea		FP_SRC(%a6),%a0		# pass ptr to input
 	bsr.l		fix_skewed_ops
@@ -1277,7 +1277,7 @@
 
 	bfextu		EXC_CMDREG(%a6){&6:&3},%d0 # dyadic; load dst reg
 
-# bit five of the fp extension word separates the monadic and dyadic operations 
+# bit five of the fp extension word separates the monadic and dyadic operations
 # at this point
 	btst		&0x5,1+EXC_CMDREG(%a6)	# is operation monadic or dyadic?
 	beq.b		fu_extract		# monadic
@@ -1308,13 +1308,13 @@
 
 #
 # Exceptions in order of precedence:
-# 	BSUN	: none
+#	BSUN	: none
 #	SNAN	: all dyadic ops
 #	OPERR	: fsqrt(-NORM)
 #	OVFL	: all except ftst,fcmp
 #	UNFL	: all except ftst,fcmp
 #	DZ	: fdiv
-# 	INEX2	: all except ftst,fcmp
+#	INEX2	: all except ftst,fcmp
 #	INEX1	: none (packed doesn't go through here)
 #
 
@@ -1351,16 +1351,16 @@
 #
 # No exceptions occurred that were also enabled. Now:
 #
-#   	if (OVFL && ovfl_disabled && inexact_enabled) {
+#	if (OVFL && ovfl_disabled && inexact_enabled) {
 #	    branch to _real_inex() (even if the result was exact!);
-#     	} else {
+#	} else {
 #	    save the result in the proper fp reg (unless the op is fcmp or ftst);
 #	    return;
-#     	}
+#	}
 #
 	btst		&ovfl_bit,FPSR_EXCEPT(%a6) # was overflow set?
 	beq.b		fu_in_cont		# no
-	
+
 fu_in_ovflchk:
 	btst		&inex2_bit,FPCR_ENABLE(%a6) # was inexact enabled?
 	beq.b		fu_in_cont		# no
@@ -1380,7 +1380,7 @@
 #	} else {
 #		restore exc state (SNAN||OPERR||OVFL||UNFL||DZ||INEX) into the FPU;
 #	}
-#	    		
+#
 fu_in_exc:
 	subi.l		&24,%d0			# fix offset to be 0-8
 	cmpi.b		%d0,&0x6		# is exception INEX? (6)
@@ -1393,7 +1393,7 @@
 	bne.w		fu_in_exc_ovfl		# yes
 
 # here, we insert the correct fsave status value into the fsave frame for the
-# corresponding exception. the operand in the fsave frame should be the original 
+# corresponding exception. the operand in the fsave frame should be the original
 # src operand.
 fu_in_exc_exit:
 	mov.l		%d0,-(%sp)		# save d0
@@ -1424,8 +1424,8 @@
 	bra.b		fu_in_exc_exit
 
 # If the input operand to this operation was opclass two and a single
-# or double precision denorm, inf, or nan, the operand needs to be 
-# "corrected" in order to have the proper equivalent extended precision 
+# or double precision denorm, inf, or nan, the operand needs to be
+# "corrected" in order to have the proper equivalent extended precision
 # number.
 	global		fix_skewed_ops
 fix_skewed_ops:
@@ -1453,7 +1453,7 @@
 	bsr.l		norm			# normalize mantissa
 	neg.w		%d0			# -shft amt
 	addi.w		&0x3f81,%d0		# adjust new exponent
-	andi.w		&0x8000,LOCAL_EX(%a0) 	# clear old exponent
+	andi.w		&0x8000,LOCAL_EX(%a0)	# clear old exponent
 	or.w		%d0,LOCAL_EX(%a0)	# insert new exponent
 	rts
 
@@ -1462,7 +1462,7 @@
 	rts
 
 fso_infnan:
-	andi.b		&0x7f,LOCAL_HI(%a0) 	# clear j-bit
+	andi.b		&0x7f,LOCAL_HI(%a0)	# clear j-bit
 	ori.w		&0x7fff,LOCAL_EX(%a0)	# make exponent = $7fff
 	rts
 
@@ -1485,7 +1485,7 @@
 	bsr.l		norm			# normalize mantissa
 	neg.w		%d0			# -shft amt
 	addi.w		&0x3c01,%d0		# adjust new exponent
-	andi.w		&0x8000,LOCAL_EX(%a0) 	# clear old exponent
+	andi.w		&0x8000,LOCAL_EX(%a0)	# clear old exponent
 	or.w		%d0,LOCAL_EX(%a0)	# insert new exponent
 	rts
 
@@ -1537,13 +1537,13 @@
 	bsr.l		fout			# call fmove out routine
 
 # Exceptions in order of precedence:
-# 	BSUN	: none
+#	BSUN	: none
 #	SNAN	: none
 #	OPERR	: fmove.{b,w,l} out of large UNNORM
 #	OVFL	: fmove.{s,d}
 #	UNFL	: fmove.{s,d,x}
 #	DZ	: none
-# 	INEX2	: all
+#	INEX2	: all
 #	INEX1	: none (packed doesn't travel through here)
 
 # determine the highest priority exception(if any) set by the
@@ -1555,7 +1555,7 @@
 
 	mov.l		EXC_A6(%a6),(%a6)	# in case a6 changed
 
-# on extended precision opclass three instructions using pre-decrement or 
+# on extended precision opclass three instructions using pre-decrement or
 # post-increment addressing mode, the address register is not updated. is the
 # address register was the stack pointer used from user mode, then let's update
 # it here. if it was used from supervisor mode, then we have to handle this
@@ -1579,7 +1579,7 @@
 	bra.l		_fpsp_done
 
 # is the ea mode pre-decrement of the stack pointer from supervisor mode?
-# ("fmov.x fpm,-(a7)") if so, 
+# ("fmov.x fpm,-(a7)") if so,
 fu_out_done_s:
 	cmpi.b		SPCOND_FLG(%a6),&mda7_flg
 	bne.b		fu_out_done_cont
@@ -1617,7 +1617,7 @@
 	bfffo		%d0{&24:&8},%d0		# find highest priority exception
 	bne.b		fu_out_exc		# there is at least one set
 
-# no exceptions were set. 
+# no exceptions were set.
 # if a disabled overflow occurred and inexact was enabled but the result
 # was exact, then a branch to _real_inex() is made.
 	btst		&ovfl_bit,FPSR_EXCEPT(%a6) # was overflow set?
@@ -1634,7 +1634,7 @@
 # from FPIAR and put it in the trace stack frame then jump to _real_trace().
 #
 #		  UNSUPP FRAME		   TRACE FRAME
-# 		*****************	*****************
+#		*****************	*****************
 #		*      EA	*	*    Current	*
 #		*		*	*      PC	*
 #		*****************	*****************
@@ -1651,7 +1651,7 @@
 	fmov.l		%fpiar,0x8(%sp)
 	bra.l		_real_trace
 
-# an exception occurred and that exception was enabled. 	
+# an exception occurred and that exception was enabled.
 fu_out_exc:
 	subi.l		&24,%d0			# fix offset to be 0-8
 
@@ -1663,15 +1663,15 @@
 	swbeg		&0x8
 tbl_fu_out:
 	short		tbl_fu_out	- tbl_fu_out	# BSUN can't happen
-	short		tbl_fu_out 	- tbl_fu_out	# SNAN can't happen
+	short		tbl_fu_out	- tbl_fu_out	# SNAN can't happen
 	short		fu_operr	- tbl_fu_out	# OPERR
-	short		fu_ovfl 	- tbl_fu_out	# OVFL
-	short		fu_unfl 	- tbl_fu_out	# UNFL
+	short		fu_ovfl		- tbl_fu_out	# OVFL
+	short		fu_unfl		- tbl_fu_out	# UNFL
 	short		tbl_fu_out	- tbl_fu_out	# DZ can't happen
-	short		fu_inex 	- tbl_fu_out	# INEX2
+	short		fu_inex		- tbl_fu_out	# INEX2
 	short		tbl_fu_out	- tbl_fu_out	# INEX1 won't make it here
 
-# for snan,operr,ovfl,unfl, src op is still in FP_SRC so just 
+# for snan,operr,ovfl,unfl, src op is still in FP_SRC so just
 # frestore it.
 fu_snan:
 	fmovm.x		EXC_FPREGS(%a6),&0xc0	# restore fp0/fp1
@@ -1722,7 +1722,7 @@
 # underflow can happen for extended precision. extended precision opclass
 # three instruction exceptions don't update the stack pointer. so, if the
 # exception occurred from user mode, then simply update a7 and exit normally.
-# if the exception occurred from supervisor mode, check if 
+# if the exception occurred from supervisor mode, check if
 fu_unfl:
 	mov.l		EXC_A6(%a6),(%a6)	# restore a6
 
@@ -1731,7 +1731,7 @@
 
 	mov.l		EXC_A7(%a6),%a0		# restore a7 whether we need
 	mov.l		%a0,%usp		# to or not...
-	
+
 fu_unfl_cont:
 	fmovm.x		&0x40,FP_SRC(%a6)	# save EXOP to the stack
 
@@ -1822,7 +1822,7 @@
 
 	bfextu		EXC_CMDREG(%a6){&6:&3},%d0 # dyadic; load dst reg
 
-# bit five of the fp extension word separates the monadic and dyadic operations 
+# bit five of the fp extension word separates the monadic and dyadic operations
 # at this point
 	btst		&0x5,1+EXC_CMDREG(%a6)	# is operation monadic or dyadic?
 	beq.b		fu_extract_p		# monadic
@@ -1853,13 +1853,13 @@
 
 #
 # Exceptions in order of precedence:
-# 	BSUN	: none
+#	BSUN	: none
 #	SNAN	: all dyadic ops
 #	OPERR	: fsqrt(-NORM)
 #	OVFL	: all except ftst,fcmp
 #	UNFL	: all except ftst,fcmp
 #	DZ	: fdiv
-# 	INEX2	: all except ftst,fcmp
+#	INEX2	: all except ftst,fcmp
 #	INEX1	: all
 #
 
@@ -1929,16 +1929,16 @@
 #
 # No exceptions occurred that were also enabled. Now:
 #
-#   	if (OVFL && ovfl_disabled && inexact_enabled) {
+#	if (OVFL && ovfl_disabled && inexact_enabled) {
 #	    branch to _real_inex() (even if the result was exact!);
-#     	} else {
+#	} else {
 #	    save the result in the proper fp reg (unless the op is fcmp or ftst);
 #	    return;
-#     	}
+#	}
 #
 	btst		&ovfl_bit,FPSR_EXCEPT(%a6) # was overflow set?
 	beq.w		fu_in_cont_p		# no
-	
+
 fu_in_ovflchk_p:
 	btst		&inex2_bit,FPCR_ENABLE(%a6) # was inexact enabled?
 	beq.w		fu_in_cont_p		# no
@@ -1958,7 +1958,7 @@
 #	} else {
 #		restore exc state (SNAN||OPERR||OVFL||UNFL||DZ||INEX) into the FPU;
 #	}
-#	    		
+#
 fu_in_exc_p:
 	subi.l		&24,%d0			# fix offset to be 0-8
 	cmpi.b		%d0,&0x6		# is exception INEX? (6 or 7)
@@ -1971,7 +1971,7 @@
 	bne.w		fu_in_exc_ovfl_p	# yes
 
 # here, we insert the correct fsave status value into the fsave frame for the
-# corresponding exception. the operand in the fsave frame should be the original 
+# corresponding exception. the operand in the fsave frame should be the original
 # src operand.
 # as a reminder for future predicted pain and agony, we are passing in fsave the
 # "non-skewed" operand for cases of sgl and dbl src INFs,NANs, and DENORMs.
@@ -2034,21 +2034,21 @@
 	bne.b		fu_trace_p		# yes
 
 	bra.l		_fpsp_done		# exit to os
-	
+
 #
-# The opclass two PACKED instruction that took an "Unimplemented Data Type" 
-# exception was being traced. Make the "current" PC the FPIAR and put it in the 
+# The opclass two PACKED instruction that took an "Unimplemented Data Type"
+# exception was being traced. Make the "current" PC the FPIAR and put it in the
 # trace stack frame then jump to _real_trace().
-#					
+#
 #		  UNSUPP FRAME		   TRACE FRAME
 #		*****************	*****************
 #		*      EA	*	*    Current	*
 #		*		*	*      PC	*
 #		*****************	*****************
-#		* 0x2 *	0x0dc	* 	* 0x2 *  0x024	*
+#		* 0x2 *	0x0dc	*	* 0x2 *  0x024	*
 #		*****************	*****************
 #		*     Next	*	*     Next	*
-#		*      PC	*      	*      PC	*
+#		*      PC	*	*      PC	*
 #		*****************	*****************
 #		*      SR	*	*      SR	*
 #		*****************	*****************
@@ -2094,13 +2094,13 @@
 	bsr.l		fout			# call fmove out routine
 
 # Exceptions in order of precedence:
-# 	BSUN	: no
+#	BSUN	: no
 #	SNAN	: yes
 #	OPERR	: if ((k_factor > +17) || (dec. exp exceeds 3 digits))
 #	OVFL	: no
 #	UNFL	: no
 #	DZ	: no
-# 	INEX2	: yes
+#	INEX2	: yes
 #	INEX1	: no
 
 # determine the highest priority exception(if any) set by the
@@ -2164,7 +2164,7 @@
 
 	mov.l		EXC_A6(%a6),(%a6)	# restore a6
 
-# an exception occurred and that exception was enabled. 	
+# an exception occurred and that exception was enabled.
 # the only exception possible on packed move out are INEX, OPERR, and SNAN.
 fu_out_exc_p:
 	cmpi.b		%d0,&0x1a
@@ -2191,7 +2191,7 @@
 	movm.l		EXC_DREGS(%a6),&0x0303	# restore d0-d1/a0-a1
 
 	mov.w		&0x30d8,EXC_VOFF(%a6)	# vector offset = 0xd0
-	mov.w		&0xe006,2+FP_SRC(%a6) 	# set fsave status
+	mov.w		&0xe006,2+FP_SRC(%a6)	# set fsave status
 
 	frestore	FP_SRC(%a6)		# restore src operand
 
@@ -2231,7 +2231,7 @@
 	movm.l		EXC_DREGS(%a6),&0x0303	# restore d0-d1/a0-a1
 
 	mov.w		&0x30d0,EXC_VOFF(%a6)	# vector offset = 0xd0
-	mov.w		&0xe004,2+FP_SRC(%a6) 	# set fsave status
+	mov.w		&0xe004,2+FP_SRC(%a6)	# set fsave status
 
 	frestore	FP_SRC(%a6)		# restore src operand
 
@@ -2270,8 +2270,8 @@
 	fmovm.l		USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs
 	movm.l		EXC_DREGS(%a6),&0x0303	# restore d0-d1/a0-a1
 
-	mov.w		&0x30c4,EXC_VOFF(%a6) 	# vector offset = 0xc4
-	mov.w		&0xe001,2+FP_SRC(%a6) 	# set fsave status
+	mov.w		&0x30c4,EXC_VOFF(%a6)	# vector offset = 0xc4
+	mov.w		&0xe001,2+FP_SRC(%a6)	# set fsave status
 
 	frestore	FP_SRC(%a6)		# restore src operand
 
@@ -2312,7 +2312,7 @@
 	andi.w		&0x7fff,%d0		# strip sign
 	beq.b		funimp_skew_sgl_not
 	cmpi.w		%d0,&0x3f80
-	bgt.b		funimp_skew_sgl_not		
+	bgt.b		funimp_skew_sgl_not
 	neg.w		%d0			# make exponent negative
 	addi.w		&0x3f81,%d0		# find amt to shift
 	mov.l		FP_SRC_HI(%a6),%d1	# fetch DENORM hi(man)
@@ -2329,7 +2329,7 @@
 	andi.w		&0x7fff,%d0		# strip sign
 	beq.b		funimp_skew_dbl_not
 	cmpi.w		%d0,&0x3c00
-	bgt.b		funimp_skew_dbl_not		
+	bgt.b		funimp_skew_dbl_not
 
 	tst.b		FP_SRC_EX(%a6)		# make "internal format"
 	smi.b		0x2+FP_SRC(%a6)
@@ -2362,7 +2362,7 @@
 #########################################################################
 # XDEF ****************************************************************	#
 #	_fpsp_effadd(): 060FPSP entry point for FP "Unimplemented	#
-#		     	effective address" exception.			#
+#			effective address" exception.			#
 #									#
 #	This handler should be the first code executed upon taking the	#
 #	FP Unimplemented Effective Address exception in an operating	#
@@ -2387,7 +2387,7 @@
 #									#
 # INPUT ***************************************************************	#
 #	- The system stack contains the "Unimplemented <ea>" stk frame	#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	If access error:						#
 #	- The system stack is changed to an access error stack frame	#
@@ -2408,17 +2408,17 @@
 #	For immediate data operations, the data is read in w/ a		#
 # _mem_read() "callout", converted to FP binary (if packed), and used	#
 # as the source operand to the instruction specified by the instruction	#
-# word. If no FP exception should be reported ads a result of the 	#
+# word. If no FP exception should be reported ads a result of the	#
 # emulation, then the result is stored to the destination register and	#
 # the handler exits through _fpsp_done(). If an enabled exc has been	#
 # signalled as a result of emulation, then an fsave state frame		#
 # corresponding to the FP exception type must be entered into the 060	#
-# FPU before exiting. In either the enabled or disabled cases, we 	#
+# FPU before exiting. In either the enabled or disabled cases, we	#
 # must also check if a Trace exception is pending, in which case, we	#
 # must create a Trace exception stack frame from the current exception	#
 # stack frame. If no Trace is pending, we simply exit through		#
 # _fpsp_done().								#
-#	For "fmovm.x", call the routine fmovm_dynamic() which will 	#
+#	For "fmovm.x", call the routine fmovm_dynamic() which will	#
 # decode and emulate the instruction. No FP exceptions can be pending	#
 # as a result of this operation emulation. A Trace exception can be	#
 # pending, though, which means the current stack frame must be changed	#
@@ -2437,11 +2437,11 @@
 # before the "FPU disabled" exception, but the "FPU disabled" exception	#
 # has higher priority, we check the disabled bit in the PCR. If set,	#
 # then we must create an 8 word "FPU disabled" exception stack frame	#
-# from the current 4 word exception stack frame. This includes 		#
-# reproducing the effective address of the instruction to put on the 	#
+# from the current 4 word exception stack frame. This includes		#
+# reproducing the effective address of the instruction to put on the	#
 # new stack frame.							#
 #									#
-# 	In the process of all emulation work, if a _mem_read()		#
+#	In the process of all emulation work, if a _mem_read()		#
 # "callout" returns a failing result indicating an access error, then	#
 # we must create an access error stack frame from the current stack	#
 # frame. This information includes a faulting address and a fault-	#
@@ -2482,18 +2482,18 @@
 
 #
 # here, we will have:
-# 	fabs	fdabs	fsabs		facos		fmod
+#	fabs	fdabs	fsabs		facos		fmod
 #	fadd	fdadd	fsadd		fasin		frem
-# 	fcmp				fatan		fscale
+#	fcmp				fatan		fscale
 #	fdiv	fddiv	fsdiv		fatanh		fsin
 #	fint				fcos		fsincos
 #	fintrz				fcosh		fsinh
 #	fmove	fdmove	fsmove		fetox		ftan
-# 	fmul	fdmul	fsmul		fetoxm1		ftanh
+#	fmul	fdmul	fsmul		fetoxm1		ftanh
 #	fneg	fdneg	fsneg		fgetexp		ftentox
 #	fsgldiv				fgetman		ftwotox
-# 	fsglmul				flog10
-# 	fsqrt				flog2
+#	fsglmul				flog10
+#	fsqrt				flog2
 #	fsub	fdsub	fssub		flogn
 #	ftst				flognp1
 # which can all use f<op>.{x,p}
@@ -2585,8 +2585,8 @@
 # store a result. then, only fcmp will branch back and pick up a dst operand.
 	st		STORE_FLG(%a6)		# don't store a final result
 	btst		&0x1,1+EXC_CMDREG(%a6)	# is operation fcmp?
-	beq.b		iea_op_loaddst		# yes	
-	
+	beq.b		iea_op_loaddst		# yes
+
 iea_op_extract:
 	clr.l		%d0
 	mov.b		FPCR_MODE(%a6),%d0	# pass: rnd mode,prec
@@ -2659,7 +2659,7 @@
 	btst		&inex2_bit,FPCR_ENABLE(%a6) # is inexact enabled?
 	beq.b		iea_op_store		# no
 	bra.b		iea_op_exc_ovfl		# yes
-	
+
 # an enabled exception occurred. we have to insert the exception type back into
 # the machine.
 iea_op_exc:
@@ -2698,7 +2698,7 @@
 	fmovm.l		USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs
 	movm.l		EXC_DREGS(%a6),&0x0303	# restore d0-d1/a0-a1
 
-	frestore 	FP_SRC(%a6)		# restore exceptional state
+	frestore	FP_SRC(%a6)		# restore exceptional state
 
 	unlk		%a6			# unravel the frame
 
@@ -2706,12 +2706,12 @@
 	bne.b		iea_op_trace		# yes
 
 	bra.l		_fpsp_done		# exit to os
-	
+
 #
 # The opclass two instruction that took an "Unimplemented Effective Address"
 # exception was being traced. Make the "current" PC the FPIAR and put it in
 # the trace stack frame then jump to _real_trace().
-#					
+#
 #		 UNIMP EA FRAME		   TRACE FRAME
 #		*****************	*****************
 #		* 0x0 *  0x0f0	*	*    Current	*
@@ -2744,7 +2744,7 @@
 
 iea_fmovm_data_u:
 	mov.l		%usp,%a0
-	mov.l		%a0,EXC_A7(%a6)		# store current a7	
+	mov.l		%a0,EXC_A7(%a6)		# store current a7
 	bsr.l		fmovm_dynamic		# do dynamic fmovm
 	mov.l		EXC_A7(%a6),%a0		# load possibly new a7
 	mov.l		%a0,%usp		# update usp
@@ -2775,10 +2775,10 @@
 
 	lea		(EXC_SR,%a6,%d0),%a0
 	mov.l		%a0,EXC_SR(%a6)
-	
+
 	fmovm.x		EXC_FP0(%a6),&0xc0	# restore fp0-fp1
 	fmovm.l		USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs
- 	movm.l		EXC_DREGS(%a6),&0x0303 	# restore d0-d1/a0-a1
+	movm.l		EXC_DREGS(%a6),&0x0303	# restore d0-d1/a0-a1
 
 	unlk		%a6
 	mov.l		(%sp)+,%sp
@@ -2792,15 +2792,15 @@
 
 	lea		(EXC_SR-0x4,%a6,%d0),%a0
 	mov.l		%a0,EXC_SR(%a6)
-	
+
 	fmovm.x		EXC_FP0(%a6),&0xc0	# restore fp0-fp1
 	fmovm.l		USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs
- 	movm.l		EXC_DREGS(%a6),&0x0303 	# restore d0-d1/a0-a1
+	movm.l		EXC_DREGS(%a6),&0x0303	# restore d0-d1/a0-a1
 
 	unlk		%a6
 	mov.l		(%sp)+,%sp
 	bra.l		_real_trace
-	
+
 # right now, d1 = size and d0 = the strg.
 iea_fmovm_data_predec:
 	mov.b		%d1,EXC_VOFF(%a6)	# store strg
@@ -2808,7 +2808,7 @@
 
 	fmovm.x		EXC_FP0(%a6),&0xc0	# restore fp0-fp1
 	fmovm.l		USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs
- 	movm.l		EXC_DREGS(%a6),&0x0303 	# restore d0-d1/a0-a1
+	movm.l		EXC_DREGS(%a6),&0x0303	# restore d0-d1/a0-a1
 
 	mov.l		(%a6),-(%sp)		# make a copy of a6
 	mov.l		%d0,-(%sp)		# save d0
@@ -2910,10 +2910,10 @@
 
 #
 # The control reg instruction that took an "Unimplemented Effective Address"
-# exception was being traced. The "Current PC" for the trace frame is the 
+# exception was being traced. The "Current PC" for the trace frame is the
 # PC stacked for Unimp EA. The "Next PC" is in EXC_EXTWPTR.
 # After fixing the stack frame, jump to _real_trace().
-#					
+#
 #		 UNIMP EA FRAME		   TRACE FRAME
 #		*****************	*****************
 #		* 0x0 *  0x0f0	*	*    Current	*
@@ -3066,7 +3066,7 @@
 #	_fpsp_operr(): 060FPSP entry point for FP Operr exception.	#
 #									#
 #	This handler should be the first code executed upon taking the	#
-# 	FP Operand Error exception in an operating system.		#
+#	FP Operand Error exception in an operating system.		#
 #									#
 # XREF ****************************************************************	#
 #	_imem_read_long() - read instruction longword			#
@@ -3079,7 +3079,7 @@
 # INPUT ***************************************************************	#
 #	- The system stack contains the FP Operr exception frame	#
 #	- The fsave frame contains the source operand			#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	No access error:						#
 #	- The system stack is unchanged					#
@@ -3088,16 +3088,16 @@
 # ALGORITHM ***********************************************************	#
 #	In a system where the FP Operr exception is enabled, the goal	#
 # is to get to the handler specified at _real_operr(). But, on the 060,	#
-# for opclass zero and two instruction taking this exception, the 	#
+# for opclass zero and two instruction taking this exception, the	#
 # input operand in the fsave frame may be incorrect for some cases	#
 # and needs to be corrected. This handler calls fix_skewed_ops() to	#
 # do just this and then exits through _real_operr().			#
 #	For opclass 3 instructions, the 060 doesn't store the default	#
 # operr result out to memory or data register file as it should.	#
 # This code must emulate the move out before finally exiting through	#
-# _real_inex(). The move out, if to memory, is performed using 		#
+# _real_inex(). The move out, if to memory, is performed using		#
 # _mem_write() "callout" routines that may return a failing result.	#
-# In this special case, the handler must exit through facc_out() 	#
+# In this special case, the handler must exit through facc_out()	#
 # which creates an access error stack frame from the current operr	#
 # stack frame.								#
 #									#
@@ -3110,13 +3110,13 @@
 
 	fsave		FP_SRC(%a6)		# grab the "busy" frame
 
- 	movm.l		&0x0303,EXC_DREGS(%a6)	# save d0-d1/a0-a1
+	movm.l		&0x0303,EXC_DREGS(%a6)	# save d0-d1/a0-a1
 	fmovm.l		%fpcr,%fpsr,%fpiar,USER_FPCR(%a6) # save ctrl regs
- 	fmovm.x		&0xc0,EXC_FPREGS(%a6)	# save fp0-fp1 on stack
+	fmovm.x		&0xc0,EXC_FPREGS(%a6)	# save fp0-fp1 on stack
 
 # the FPIAR holds the "current PC" of the faulting instruction
 	mov.l		USER_FPIAR(%a6),EXC_EXTWPTR(%a6)
-	
+
 	mov.l		EXC_EXTWPTR(%a6),%a0	# fetch instruction addr
 	addq.l		&0x4,EXC_EXTWPTR(%a6)	# incr instruction ptr
 	bsr.l		_imem_read_long		# fetch the instruction words
@@ -3130,7 +3130,7 @@
 
 # here, we simply see if the operand in the fsave frame needs to be "unskewed".
 # this would be the case for opclass two operations with a source infinity or
-# denorm operand in the sgl or dbl format. NANs also become skewed, but can't 
+# denorm operand in the sgl or dbl format. NANs also become skewed, but can't
 # cause an operr so we don't need to check for them here.
 	lea		FP_SRC(%a6),%a0		# pass: ptr to src op
 	bsr.l		fix_skewed_ops		# fix src op
@@ -3201,7 +3201,7 @@
 	short		tbl_operr    - tbl_operr # dbl prec shouldn't happen
 	short		foperr_out_b - tbl_operr # byte integer
 	short		tbl_operr    - tbl_operr # packed won't enter here
-	
+
 foperr_out_b:
 	mov.b		L_SCR1(%a6),%d0		# load positive default result
 	cmpi.b		%d1,&0x7		# is <ea> mode a data reg?
@@ -3255,7 +3255,7 @@
 #	_fpsp_snan(): 060FPSP entry point for FP SNAN exception.	#
 #									#
 #	This handler should be the first code executed upon taking the	#
-# 	FP Signalling NAN exception in an operating system.		#
+#	FP Signalling NAN exception in an operating system.		#
 #									#
 # XREF ****************************************************************	#
 #	_imem_read_long() - read instruction longword			#
@@ -3269,7 +3269,7 @@
 # INPUT ***************************************************************	#
 #	- The system stack contains the FP SNAN exception frame		#
 #	- The fsave frame contains the source operand			#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	No access error:						#
 #	- The system stack is unchanged					#
@@ -3278,16 +3278,16 @@
 # ALGORITHM ***********************************************************	#
 #	In a system where the FP SNAN exception is enabled, the goal	#
 # is to get to the handler specified at _real_snan(). But, on the 060,	#
-# for opclass zero and two instructions taking this exception, the 	#
+# for opclass zero and two instructions taking this exception, the	#
 # input operand in the fsave frame may be incorrect for some cases	#
 # and needs to be corrected. This handler calls fix_skewed_ops() to	#
 # do just this and then exits through _real_snan().			#
 #	For opclass 3 instructions, the 060 doesn't store the default	#
 # SNAN result out to memory or data register file as it should.		#
 # This code must emulate the move out before finally exiting through	#
-# _real_snan(). The move out, if to memory, is performed using 		#
+# _real_snan(). The move out, if to memory, is performed using		#
 # _mem_write() "callout" routines that may return a failing result.	#
-# In this special case, the handler must exit through facc_out() 	#
+# In this special case, the handler must exit through facc_out()	#
 # which creates an access error stack frame from the current SNAN	#
 # stack frame.								#
 #	For the case of an extended precision opclass 3 instruction,	#
@@ -3306,13 +3306,13 @@
 
 	fsave		FP_SRC(%a6)		# grab the "busy" frame
 
- 	movm.l		&0x0303,EXC_DREGS(%a6)	# save d0-d1/a0-a1
+	movm.l		&0x0303,EXC_DREGS(%a6)	# save d0-d1/a0-a1
 	fmovm.l		%fpcr,%fpsr,%fpiar,USER_FPCR(%a6) # save ctrl regs
- 	fmovm.x		&0xc0,EXC_FPREGS(%a6)	# save fp0-fp1 on stack
+	fmovm.x		&0xc0,EXC_FPREGS(%a6)	# save fp0-fp1 on stack
 
 # the FPIAR holds the "current PC" of the faulting instruction
 	mov.l		USER_FPIAR(%a6),EXC_EXTWPTR(%a6)
-	
+
 	mov.l		EXC_EXTWPTR(%a6),%a0	# fetch instruction addr
 	addq.l		&0x4,EXC_EXTWPTR(%a6)	# incr instruction ptr
 	bsr.l		_imem_read_long		# fetch the instruction words
@@ -3340,7 +3340,7 @@
 
 	unlk		%a6
 	bra.l		_real_snan
-		
+
 ########################################################################
 
 #
@@ -3350,7 +3350,7 @@
 #
 # byte, word, long, and packed destination format operations can pass
 # through here. since packed format operations already were handled by
-# fpsp_unsupp(), then we need to do nothing else for them here. 
+# fpsp_unsupp(), then we need to do nothing else for them here.
 # for byte, word, and long, we simply need to test the sign of the src
 # operand and save the appropriate minimum or maximum integer value
 # to the effective address as pointed to by the stacked effective address.
@@ -3371,7 +3371,7 @@
 	short		fsnan_out_d - tbl_snan # dbl prec shouldn't happen
 	short		fsnan_out_b - tbl_snan # byte integer
 	short		tbl_snan    - tbl_snan # packed needs no help
-	
+
 fsnan_out_b:
 	mov.b		FP_SRC_HI(%a6),%d0	# load upper byte of SNAN
 	bset		&6,%d0			# set SNAN bit
@@ -3497,7 +3497,7 @@
 	mov.l		%usp,%a0		# fetch user stack pointer
 	mov.l		%a0,EXC_A7(%a6)		# save on stack for calc_ea()
 	mov.l		(%a6),EXC_A6(%a6)
-	
+
 	bsr.l		_calc_ea_fout		# find the correct ea,update An
 	mov.l		%a0,%a1
 	mov.l		%a0,EXC_EA(%a6)		# stack correct <ea>
@@ -3546,7 +3546,7 @@
 	mov.l		LOCAL_SIZE+FP_SCR0_LO(%sp),LOCAL_SIZE+EXC_EA(%sp)
 
 	add.l		&LOCAL_SIZE-0x8,%sp
-	
+
 	bra.l		_real_snan
 
 #########################################################################
@@ -3554,7 +3554,7 @@
 #	_fpsp_inex(): 060FPSP entry point for FP Inexact exception.	#
 #									#
 #	This handler should be the first code executed upon taking the	#
-# 	FP Inexact exception in an operating system.			#
+#	FP Inexact exception in an operating system.			#
 #									#
 # XREF ****************************************************************	#
 #	_imem_read_long() - read instruction longword			#
@@ -3571,7 +3571,7 @@
 # INPUT ***************************************************************	#
 #	- The system stack contains the FP Inexact exception frame	#
 #	- The fsave frame contains the source operand			#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	- The system stack is unchanged					#
 #	- The fsave frame contains the adjusted src op for opclass 0,2	#
@@ -3579,10 +3579,10 @@
 # ALGORITHM ***********************************************************	#
 #	In a system where the FP Inexact exception is enabled, the goal	#
 # is to get to the handler specified at _real_inex(). But, on the 060,	#
-# for opclass zero and two instruction taking this exception, the 	#
+# for opclass zero and two instruction taking this exception, the	#
 # hardware doesn't store the correct result to the destination FP	#
-# register as did the '040 and '881/2. This handler must emulate the 	#
-# instruction in order to get this value and then store it to the 	#
+# register as did the '040 and '881/2. This handler must emulate the	#
+# instruction in order to get this value and then store it to the	#
 # correct register before calling _real_inex().				#
 #	For opclass 3 instructions, the 060 doesn't store the default	#
 # inexact result out to memory or data register file as it should.	#
@@ -3598,13 +3598,13 @@
 
 	fsave		FP_SRC(%a6)		# grab the "busy" frame
 
- 	movm.l		&0x0303,EXC_DREGS(%a6)	# save d0-d1/a0-a1
+	movm.l		&0x0303,EXC_DREGS(%a6)	# save d0-d1/a0-a1
 	fmovm.l		%fpcr,%fpsr,%fpiar,USER_FPCR(%a6) # save ctrl regs
- 	fmovm.x		&0xc0,EXC_FPREGS(%a6)	# save fp0-fp1 on stack
+	fmovm.x		&0xc0,EXC_FPREGS(%a6)	# save fp0-fp1 on stack
 
 # the FPIAR holds the "current PC" of the faulting instruction
 	mov.l		USER_FPIAR(%a6),EXC_EXTWPTR(%a6)
-	
+
 	mov.l		EXC_EXTWPTR(%a6),%a0	# fetch instruction addr
 	addq.l		&0x4,EXC_EXTWPTR(%a6)	# incr instruction ptr
 	bsr.l		_imem_read_long		# fetch the instruction words
@@ -3616,7 +3616,7 @@
 	bne.w		finex_out		# fmove out
 
 
-# the hardware, for "fabs" and "fneg" w/ a long source format, puts the 
+# the hardware, for "fabs" and "fneg" w/ a long source format, puts the
 # longword integer directly into the upper longword of the mantissa along
 # w/ an exponent value of 0x401e. we convert this to extended precision here.
 	bfextu		%d0{&19:&3},%d0		# fetch instr size
@@ -3750,7 +3750,7 @@
 # INPUT ***************************************************************	#
 #	- The system stack contains the FP DZ exception stack.		#
 #	- The fsave frame contains the source operand.			#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	- The system stack contains the FP DZ exception stack.		#
 #	- The fsave frame contains the adjusted source operand.		#
@@ -3761,7 +3761,7 @@
 # exception is taken, the input operand in the fsave state frame may	#
 # be incorrect for some cases and need to be adjusted. So, this package	#
 # adjusts the operand using fix_skewed_ops() and then branches to	#
-# _real_dz(). 								#
+# _real_dz().								#
 #									#
 #########################################################################
 
@@ -3772,13 +3772,13 @@
 
 	fsave		FP_SRC(%a6)		# grab the "busy" frame
 
- 	movm.l		&0x0303,EXC_DREGS(%a6)	# save d0-d1/a0-a1
+	movm.l		&0x0303,EXC_DREGS(%a6)	# save d0-d1/a0-a1
 	fmovm.l		%fpcr,%fpsr,%fpiar,USER_FPCR(%a6) # save ctrl regs
- 	fmovm.x		&0xc0,EXC_FPREGS(%a6)	# save fp0-fp1 on stack
+	fmovm.x		&0xc0,EXC_FPREGS(%a6)	# save fp0-fp1 on stack
 
 # the FPIAR holds the "current PC" of the faulting instruction
 	mov.l		USER_FPIAR(%a6),EXC_EXTWPTR(%a6)
-	
+
 	mov.l		EXC_EXTWPTR(%a6),%a0	# fetch instruction addr
 	addq.l		&0x4,EXC_EXTWPTR(%a6)	# incr instruction ptr
 	bsr.l		_imem_read_long		# fetch the instruction words
@@ -3819,7 +3819,7 @@
 # INPUT ***************************************************************	#
 #	- The system stack contains a "Line F Emulator" exception	#
 #	  stack frame.							#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	- The system stack is unchanged					#
 #									#
@@ -3830,7 +3830,7 @@
 #	(2) FPU disabled (8 word stack frame)				#
 #	(3) Line F (4 word stack frame)					#
 #									#
-#	This module determines which and forks the flow off to the 	#
+#	This module determines which and forks the flow off to the	#
 # appropriate "callout" (for "disabled" and "Line F") or to the		#
 # correct emulation code (for "FPU unimplemented").			#
 #	This code also must check for "fmovecr" instructions w/ a	#
@@ -3943,11 +3943,11 @@
 #	_fdbcc() - emulate an "fdbcc" instruction			#
 #	_fscc() - emulate an "fscc" instruction				#
 #	_real_trap() - "callout" for Trap exception			#
-# 	_real_bsun() - "callout" for enabled Bsun exception		#
+#	_real_bsun() - "callout" for enabled Bsun exception		#
 #									#
 # INPUT ***************************************************************	#
 #	- The system stack contains the "Unimplemented Instr" stk frame	#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	If access error:						#
 #	- The system stack is changed to an access error stack frame	#
@@ -3962,21 +3962,21 @@
 # unimplemented on the 040, and (2) "ftrapcc", "fscc", and "fdbcc".	#
 #	For the first set, this handler calls the routine load_fop()	#
 # to load the source and destination (for dyadic) operands to be used	#
-# for instruction emulation. The correct emulation routine is then 	#
-# chosen by decoding the instruction type and indexing into an 		#
-# emulation subroutine index table. After emulation returns, this 	#
+# for instruction emulation. The correct emulation routine is then	#
+# chosen by decoding the instruction type and indexing into an		#
+# emulation subroutine index table. After emulation returns, this	#
 # handler checks to see if an exception should occur as a result of the #
 # FP instruction emulation. If so, then an FP exception of the correct	#
 # type is inserted into the FPU state frame using the "frestore"	#
-# instruction before exiting through _fpsp_done(). In either the 	#
+# instruction before exiting through _fpsp_done(). In either the	#
 # exceptional or non-exceptional cases, we must check to see if the	#
 # Trace exception is enabled. If so, then we must create a Trace	#
 # exception frame from the current exception frame and exit through	#
 # _real_trace().							#
-# 	For "fdbcc", "ftrapcc", and "fscc", the emulation subroutines	#
+#	For "fdbcc", "ftrapcc", and "fscc", the emulation subroutines	#
 # _fdbcc(), _ftrapcc(), and _fscc() respectively are used. All three	#
-# may flag that a BSUN exception should be taken. If so, then the 	#
-# current exception stack frame is converted into a BSUN exception 	#
+# may flag that a BSUN exception should be taken. If so, then the	#
+# current exception stack frame is converted into a BSUN exception	#
 # stack frame and an exit is made through _real_bsun(). If the		#
 # instruction was "ftrapcc" and a Trap exception should result, a Trap	#
 # exception stack frame is created from the current frame and an exit	#
@@ -3985,7 +3985,7 @@
 # is made to _real_trace(). Finally, if none of these conditions exist,	#
 # then the handler exits though the callout _fpsp_done().		#
 #									#
-# 	In any of the above scenarios, if a _mem_read() or _mem_write()	#
+#	In any of the above scenarios, if a _mem_read() or _mem_write()	#
 # "callout" returns a failing value, then an access error stack frame	#
 # is created from the current stack frame and an exit is made through	#
 # _real_access().							#
@@ -4077,7 +4077,7 @@
 	beq.w		funimp_fmovcr		# yes
 
 funimp_gen_op:
-	bsr.l		_load_fop		# load 
+	bsr.l		_load_fop		# load
 
 	clr.l		%d0
 	mov.b		FPCR_MODE(%a6),%d0	# fetch rnd mode
@@ -4104,7 +4104,7 @@
 funimp_gen_exit:
 	fmovm.x		EXC_FP0(%a6),&0xc0	# restore fp0-fp1
 	fmovm.l		USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs
- 	movm.l		EXC_DREGS(%a6),&0x0303 	# restore d0-d1/a0-a1
+	movm.l		EXC_DREGS(%a6),&0x0303	# restore d0-d1/a0-a1
 
 funimp_gen_exit_cmp:
 	cmpi.b		SPCOND_FLG(%a6),&mia7_flg # was the ea mode (sp)+ ?
@@ -4129,7 +4129,7 @@
 	frestore	(%sp)+
 	mov.w		&0x2024,0x6(%sp)	# stk fmt = 0x2; voff = 0x24
 	bra.l		_real_trace
-	
+
 funimp_gen_exit_a7:
 	btst		&0x5,EXC_SR(%a6)	# supervisor or user mode?
 	bne.b		funimp_gen_exit_a7_s	# supervisor
@@ -4156,7 +4156,7 @@
 	unlk		%a6
 
 	add.w		(%sp),%sp		# stack frame shifted
-	bra.b		funimp_gen_exit_cont2		
+	bra.b		funimp_gen_exit_cont2
 
 ######################
 # fmovecr.x #ccc,fpn #
@@ -4212,7 +4212,7 @@
 	btst		&unfl_bit,FPSR_EXCEPT(%a6) # did underflow occur?
 	bne.b		funimp_exc_unfl		# yes
 
-# force the fsave exception status bits to signal an exception of the 
+# force the fsave exception status bits to signal an exception of the
 # appropriate type. don't forget to "skew" the source operand in case we
 # "unskewed" the one the hardware initially gave us.
 funimp_exc_force:
@@ -4242,7 +4242,7 @@
 funimp_gen_exit2:
 	fmovm.x		EXC_FP0(%a6),&0xc0	# restore fp0-fp1
 	fmovm.l		USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs
- 	movm.l		EXC_DREGS(%a6),&0x0303 	# restore d0-d1/a0-a1
+	movm.l		EXC_DREGS(%a6),&0x0303	# restore d0-d1/a0-a1
 
 	frestore	FP_SRC(%a6)		# insert exceptional status
 
@@ -4262,7 +4262,7 @@
 	beq.w		funimp_fdbcc		# yes
 	cmpi.b		%d1,&0x7		# is it an fs<cc>?
 	bne.w		funimp_fscc		# yes
-	bfextu		%d0{&13:&3},%d1	
+	bfextu		%d0{&13:&3},%d1
 	cmpi.b		%d1,&0x2		# is it an fs<cc>?
 	blt.w		funimp_fscc		# yes
 
@@ -4302,7 +4302,7 @@
 
 	fmovm.x		EXC_FP0(%a6),&0xc0	# restore fp0-fp1
 	fmovm.l		USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs
- 	movm.l		EXC_DREGS(%a6),&0x0303 	# restore d0-d1/a0-a1
+	movm.l		EXC_DREGS(%a6),&0x0303	# restore d0-d1/a0-a1
 
 	unlk		%a6
 	bra.l		_real_trap
@@ -4346,7 +4346,7 @@
 funimp_fscc_u:
 	mov.l		EXC_A7(%a6),%a0		# yes; set new USP
 	mov.l		%a0,%usp
-	bra.w		funimp_done		# branch to finish	
+	bra.w		funimp_done		# branch to finish
 
 # remember, I'm assuming that post-increment is bogus...(it IS!!!)
 # so, the least significant WORD of the stacked effective address got
@@ -4361,7 +4361,7 @@
 
 	fmovm.x		EXC_FP0(%a6),&0xc0	# restore fp0-fp1
 	fmovm.l		USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs
- 	movm.l		EXC_DREGS(%a6),&0x0303 	# restore d0-d1/a0-a1
+	movm.l		EXC_DREGS(%a6),&0x0303	# restore d0-d1/a0-a1
 
 	unlk		%a6
 
@@ -4381,7 +4381,7 @@
 	fmov.l		%fpiar,0x8(%sp)		# insert "current PC"
 
 	bra.l		_real_trace
-		
+
 #
 # The ftrap<cc>, fs<cc>, or fdb<cc> is to take an enabled bsun. we must convert
 # the fp unimplemented instruction exception stack frame into a bsun stack frame,
@@ -4409,7 +4409,7 @@
 
 	fmovm.x		EXC_FP0(%a6),&0xc0	# restore fp0-fp1
 	fmovm.l		USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs
- 	movm.l		EXC_DREGS(%a6),&0x0303 	# restore d0-d1/a0-a1
+	movm.l		EXC_DREGS(%a6),&0x0303	# restore d0-d1/a0-a1
 
 	frestore	FP_SRC(%a6)		# restore bsun exception
 
@@ -4424,13 +4424,13 @@
 # and return.
 #
 # as usual, we have to check for trace mode being on here. since instructions
-# modifying the supervisor stack frame don't pass through here, this is a 
+# modifying the supervisor stack frame don't pass through here, this is a
 # relatively easy task.
 #
 funimp_done:
 	fmovm.x		EXC_FP0(%a6),&0xc0	# restore fp0-fp1
 	fmovm.l		USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs
- 	movm.l		EXC_DREGS(%a6),&0x0303 	# restore d0-d1/a0-a1
+	movm.l		EXC_DREGS(%a6),&0x0303	# restore d0-d1/a0-a1
 
 	unlk		%a6
 
@@ -4465,16 +4465,16 @@
 	global		tbl_trans
 	swbeg		&0x1c0
 tbl_trans:
-	short 		tbl_trans - tbl_trans	# $00-0 fmovecr all
-	short 		tbl_trans - tbl_trans	# $00-1 fmovecr all
-	short 		tbl_trans - tbl_trans	# $00-2 fmovecr all
-	short 		tbl_trans - tbl_trans	# $00-3 fmovecr all
-	short 		tbl_trans - tbl_trans	# $00-4 fmovecr all
-	short 		tbl_trans - tbl_trans	# $00-5 fmovecr all
-	short 		tbl_trans - tbl_trans	# $00-6 fmovecr all
-	short 		tbl_trans - tbl_trans	# $00-7 fmovecr all
+	short		tbl_trans - tbl_trans	# $00-0 fmovecr all
+	short		tbl_trans - tbl_trans	# $00-1 fmovecr all
+	short		tbl_trans - tbl_trans	# $00-2 fmovecr all
+	short		tbl_trans - tbl_trans	# $00-3 fmovecr all
+	short		tbl_trans - tbl_trans	# $00-4 fmovecr all
+	short		tbl_trans - tbl_trans	# $00-5 fmovecr all
+	short		tbl_trans - tbl_trans	# $00-6 fmovecr all
+	short		tbl_trans - tbl_trans	# $00-7 fmovecr all
 
-	short 		tbl_trans - tbl_trans	# $01-0 fint norm
+	short		tbl_trans - tbl_trans	# $01-0 fint norm
 	short		tbl_trans - tbl_trans	# $01-1 fint zero
 	short		tbl_trans - tbl_trans	# $01-2 fint inf
 	short		tbl_trans - tbl_trans	# $01-3 fint qnan
@@ -4599,7 +4599,7 @@
 	short		src_snan - tbl_trans	# $0e-4 fsin snan
 	short		tbl_trans - tbl_trans	# $0e-6 fsin unnorm
 	short		tbl_trans - tbl_trans	# $0e-7 ERROR
-	
+
 	short		stan	 - tbl_trans	# $0f-0 ftan norm
 	short		src_zero - tbl_trans	# $0f-1 ftan zero
 	short		t_operr	 - tbl_trans	# $0f-2 ftan inf
@@ -5009,7 +5009,7 @@
 #	d0 = round precision,mode					#
 #									#
 # OUTPUT ************************************************************** #
-#	fp0 = sin(X) or cos(X) 						#
+#	fp0 = sin(X) or cos(X)						#
 #									#
 #    For ssincos(X):							#
 #	fp0 = sin(X)							#
@@ -5017,7 +5017,7 @@
 #									#
 # ACCURACY and MONOTONICITY ******************************************* #
 #	The returned result is within 1 ulp in 64 significant bit, i.e.	#
-#	within 0.5001 ulp to 53 bits if the result is subsequently 	#
+#	within 0.5001 ulp to 53 bits if the result is subsequently	#
 #	rounded to double precision. The result is provably monotonic	#
 #	in double precision.						#
 #									#
@@ -5034,8 +5034,8 @@
 #									#
 #	4. If k is even, go to 6.					#
 #									#
-#	5. (k is odd) Set j := (k-1)/2, sgn := (-1)**j. 		#
-#		Return sgn*cos(r) where cos(r) is approximated by an 	#
+#	5. (k is odd) Set j := (k-1)/2, sgn := (-1)**j.			#
+#		Return sgn*cos(r) where cos(r) is approximated by an	#
 #		even polynomial in r, 1 + r*r*(B1+s*(B2+ ... + s*B8)),	#
 #		s = r*r.						#
 #		Exit.							#
@@ -5047,10 +5047,10 @@
 #									#
 #	7. If |X| > 1, go to 9.						#
 #									#
-#	8. (|X|<2**(-40)) If SIN is invoked, return X; 			#
+#	8. (|X|<2**(-40)) If SIN is invoked, return X;			#
 #		otherwise return 1.					#
 #									#
-#	9. Overwrite X by X := X rem 2Pi. Now that |X| <= Pi, 		#
+#	9. Overwrite X by X := X rem 2Pi. Now that |X| <= Pi,		#
 #		go back to 3.						#
 #									#
 #	SINCOS:								#
@@ -5065,19 +5065,19 @@
 #		j1 exclusive or with the l.s.b. of k.			#
 #		sgn1 := (-1)**j1, sgn2 := (-1)**j2.			#
 #		SIN(X) = sgn1 * cos(r) and COS(X) = sgn2*sin(r) where	#
-#		sin(r) and cos(r) are computed as odd and even 		#
+#		sin(r) and cos(r) are computed as odd and even		#
 #		polynomials in r, respectively. Exit			#
 #									#
 #	5. (k is even) Set j1 := k/2, sgn1 := (-1)**j1.			#
 #		SIN(X) = sgn1 * sin(r) and COS(X) = sgn1*cos(r) where	#
-#		sin(r) and cos(r) are computed as odd and even 		#
+#		sin(r) and cos(r) are computed as odd and even		#
 #		polynomials in r, respectively. Exit			#
 #									#
 #	6. If |X| > 1, go to 8.						#
 #									#
 #	7. (|X|<2**(-40)) SIN(X) = X and COS(X) = 1. Exit.		#
 #									#
-#	8. Overwrite X by X := X rem 2Pi. Now that |X| <= Pi, 		#
+#	8. Overwrite X by X := X rem 2Pi. Now that |X| <= Pi,		#
 #		go back to 2.						#
 #									#
 #########################################################################
@@ -5152,9 +5152,9 @@
 #--THE ARGUMENT REDUCTION IS DONE BY TABLE LOOK UP.
 SINMAIN:
 	fmov.x		%fp0,%fp1
-	fmul.d		TWOBYPI(%pc),%fp1 	# X*2/PI
+	fmul.d		TWOBYPI(%pc),%fp1	# X*2/PI
 
-	lea		PITBL+0x200(%pc),%a1 	# TABLE OF N*PI/2, N = -32,...,32
+	lea		PITBL+0x200(%pc),%a1	# TABLE OF N*PI/2, N = -32,...,32
 
 	fmov.l		%fp1,INT(%a6)		# CONVERT TO INTEGER
 
@@ -5164,8 +5164,8 @@
 
 # A1 IS THE ADDRESS OF N*PIBY2
 # ...WHICH IS IN TWO PIECES Y1 & Y2
-	fsub.x		(%a1)+,%fp0 		# X-Y1
-	fsub.s		(%a1),%fp0 		# fp0 = R = (X-Y1)-Y2
+	fsub.x		(%a1)+,%fp0		# X-Y1
+	fsub.s		(%a1),%fp0		# fp0 = R = (X-Y1)-Y2
 
 SINCONT:
 #--continuation from REDUCEX
@@ -5319,7 +5319,7 @@
 COSTINY:
 	fmov.s		&0x3F800000,%fp0	# fp0 = 1.0
 	fmov.l		%d0,%fpcr		# restore users round mode,prec
-	fadd.s 		&0x80800000,%fp0	# last inst - possible exception set
+	fadd.s		&0x80800000,%fp0	# last inst - possible exception set
 	bra		t_pinx2
 
 ################################################
@@ -5751,7 +5751,7 @@
 #									#
 #	7. (|X|<2**(-40)) Tan(X) = X. Exit.				#
 #									#
-#	8. Overwrite X by X := X rem 2Pi. Now that |X| <= Pi, go back 	#
+#	8. Overwrite X by X := X rem 2Pi. Now that |X| <= Pi, go back	#
 #		to 2.							#
 #									#
 #########################################################################
@@ -6154,27 +6154,27 @@
 #	The returned result is within 2 ulps in	64 significant bit,	#
 #	i.e. within 0.5001 ulp to 53 bits if the result is subsequently	#
 #	rounded to double precision. The result is provably monotonic	#
-#	in double precision. 						#
+#	in double precision.						#
 #									#
 # ALGORITHM *********************************************************** #
 #	Step 1. If |X| >= 16 or |X| < 1/16, go to Step 5.		#
 #									#
-#	Step 2. Let X = sgn * 2**k * 1.xxxxxxxx...x. 			#
+#	Step 2. Let X = sgn * 2**k * 1.xxxxxxxx...x.			#
 #		Note that k = -4, -3,..., or 3.				#
-#		Define F = sgn * 2**k * 1.xxxx1, i.e. the first 5 	#
+#		Define F = sgn * 2**k * 1.xxxx1, i.e. the first 5	#
 #		significant bits of X with a bit-1 attached at the 6-th	#
 #		bit position. Define u to be u = (X-F) / (1 + X*F).	#
 #									#
 #	Step 3. Approximate arctan(u) by a polynomial poly.		#
 #									#
-#	Step 4. Return arctan(F) + poly, arctan(F) is fetched from a 	#
+#	Step 4. Return arctan(F) + poly, arctan(F) is fetched from a	#
 #		table of values calculated beforehand. Exit.		#
 #									#
 #	Step 5. If |X| >= 16, go to Step 7.				#
 #									#
 #	Step 6. Approximate arctan(X) by an odd polynomial in X. Exit.	#
 #									#
-#	Step 7. Define X' = -1/X. Approximate arctan(X') by an odd 	#
+#	Step 7. Define X' = -1/X. Approximate arctan(X') by an odd	#
 #		polynomial in X'.					#
 #		Arctan(X) = sign(X)*Pi/2 + arctan(X'). Exit.		#
 #									#
@@ -6440,7 +6440,7 @@
 	fmul.x		%fp2,%fp1		# A1*U*V*(A2+V*(A3+V))
 	fadd.x		%fp1,%fp0		# ATAN(U), FP1 RELEASED
 
-	fmovm.x 	(%sp)+,&0x20		# restore fp2
+	fmovm.x		(%sp)+,&0x20		# restore fp2
 
 	fmov.l		%d0,%fpcr		# restore users rnd mode,prec
 	fadd.x		ATANF(%a6),%fp0		# ATAN(X)
@@ -6597,7 +6597,7 @@
 #	a0 = pointer to extended precision input			#
 #	d0 = round precision,mode					#
 #									#
-# OUTPUT **************************************************************	# 
+# OUTPUT **************************************************************	#
 #	fp0 = arcsin(X)							#
 #									#
 # ACCURACY and MONOTONICITY *******************************************	#
@@ -6637,7 +6637,7 @@
 
 # This catch is added here for the '060 QSP. Originally, the call to
 # satan() would handle this case by causing the exception which would
-# not be caught until gen_except(). Now, with the exceptions being 
+# not be caught until gen_except(). Now, with the exceptions being
 # detected inside of satan(), the exception would have been handled there
 # instead of inside sasin() as expected.
 	cmp.l		%d1,&0x3FD78000
@@ -6786,7 +6786,7 @@
 
 #########################################################################
 # setox():    computes the exponential for a normalized input		#
-# setoxd():   computes the exponential for a denormalized input		# 
+# setoxd():   computes the exponential for a denormalized input		#
 # setoxm1():  computes the exponential minus 1 for a normalized input	#
 # setoxm1d(): computes the exponential minus 1 for a denormalized input	#
 #									#
@@ -6798,9 +6798,9 @@
 #	fp0 = exp(X) or exp(X)-1					#
 #									#
 # ACCURACY and MONOTONICITY ******************************************* #
-#	The returned result is within 0.85 ulps in 64 significant bit, 	#
+#	The returned result is within 0.85 ulps in 64 significant bit,	#
 #	i.e. within 0.5001 ulp to 53 bits if the result is subsequently #
-#	rounded to double precision. The result is provably monotonic 	#
+#	rounded to double precision. The result is provably monotonic	#
 #	in double precision.						#
 #									#
 # ALGORITHM and IMPLEMENTATION **************************************** #
@@ -6824,14 +6824,14 @@
 #	Notes:	The usual case should take the branches 1.1 -> 1.3 -> 2.#
 #		To avoid the use of floating-point comparisons, a	#
 #		compact representation of |X| is used. This format is a	#
-#		32-bit integer, the upper (more significant) 16 bits 	#
-#		are the sign and biased exponent field of |X|; the 	#
+#		32-bit integer, the upper (more significant) 16 bits	#
+#		are the sign and biased exponent field of |X|; the	#
 #		lower 16 bits are the 16 most significant fraction	#
 #		(including the explicit bit) bits of |X|. Consequently,	#
 #		the comparisons in Steps 1.1 and 1.3 can be performed	#
 #		by integer comparison. Note also that the constant	#
 #		16380 log(2) used in Step 1.3 is also in the compact	#
-#		form. Thus taking the branch to Step 2 guarantees 	#
+#		form. Thus taking the branch to Step 2 guarantees	#
 #		|X| < 16380 log(2). There is no harm to have a small	#
 #		number of cases where |X| is less than,	but close to,	#
 #		16380 log(2) and the branch to Step 9 is taken.		#
@@ -6843,7 +6843,7 @@
 #		2.3	Calculate	J = N mod 64; so J = 0,1,2,..., #
 #			or 63.						#
 #		2.4	Calculate	M = (N - J)/64; so N = 64M + J.	#
-#		2.5	Calculate the address of the stored value of 	#
+#		2.5	Calculate the address of the stored value of	#
 #			2^(J/64).					#
 #		2.6	Create the value Scale = 2^M.			#
 #	Notes:	The calculation in 2.2 is really performed by		#
@@ -6852,26 +6852,26 @@
 #		where							#
 #			constant := single-precision( 64/log 2 ).	#
 #									#
-#		Using a single-precision constant avoids memory 	#
+#		Using a single-precision constant avoids memory		#
 #		access. Another effect of using a single-precision	#
-#		"constant" is that the calculated value Z is 		#
+#		"constant" is that the calculated value Z is		#
 #									#
 #			Z = X*(64/log2)*(1+eps), |eps| <= 2^(-24).	#
 #									#
 #		This error has to be considered later in Steps 3 and 4.	#
 #									#
 #	Step 3.	Calculate X - N*log2/64.				#
-#		3.1	R := X + N*L1, 					#
+#		3.1	R := X + N*L1,					#
 #				where L1 := single-precision(-log2/64).	#
-#		3.2	R := R + N*L2, 					#
+#		3.2	R := R + N*L2,					#
 #				L2 := extended-precision(-log2/64 - L1).#
-#	Notes:	a) The way L1 and L2 are chosen ensures L1+L2 		#
+#	Notes:	a) The way L1 and L2 are chosen ensures L1+L2		#
 #		approximate the value -log2/64 to 88 bits of accuracy.	#
 #		b) N*L1 is exact because N is no longer than 22 bits	#
 #		and L1 is no longer than 24 bits.			#
-#		c) The calculation X+N*L1 is also exact due to 		#
+#		c) The calculation X+N*L1 is also exact due to		#
 #		cancellation. Thus, R is practically X+N(L1+L2) to full	#
-#		64 bits. 						#
+#		64 bits.						#
 #		d) It is important to estimate how large can |R| be	#
 #		after Step 3.2.						#
 #									#
@@ -6889,11 +6889,11 @@
 #									#
 #	Step 4.	Approximate exp(R)-1 by a polynomial			#
 #		p = R + R*R*(A1 + R*(A2 + R*(A3 + R*(A4 + R*A5))))	#
-#	Notes:	a) In order to reduce memory access, the coefficients 	#
+#	Notes:	a) In order to reduce memory access, the coefficients	#
 #		are made as "short" as possible: A1 (which is 1/2), A4	#
 #		and A5 are single precision; A2 and A3 are double	#
-#		precision. 						#
-#		b) Even with the restrictions above, 			#
+#		precision.						#
+#		b) Even with the restrictions above,			#
 #		   |p - (exp(R)-1)| < 2^(-68.8) for all |R| <= 0.0062.	#
 #		Note that 0.0062 is slightly bigger than 0.57 log2/64.	#
 #		c) To fully utilize the pipeline, p is separated into	#
@@ -6907,11 +6907,11 @@
 #		where T and t are the stored values for 2^(J/64).	#
 #	Notes:	2^(J/64) is stored as T and t where T+t approximates	#
 #		2^(J/64) to roughly 85 bits; T is in extended precision	#
-#		and t is in single precision. Note also that T is 	#
-#		rounded to 62 bits so that the last two bits of T are 	#
-#		zero. The reason for such a special form is that T-1, 	#
+#		and t is in single precision. Note also that T is	#
+#		rounded to 62 bits so that the last two bits of T are	#
+#		zero. The reason for such a special form is that T-1,	#
 #		T-2, and T-8 will all be exact --- a property that will	#
-#		give much more accurate computation of the function 	#
+#		give much more accurate computation of the function	#
 #		EXPM1.							#
 #									#
 #	Step 6.	Reconstruction of exp(X)				#
@@ -6927,11 +6927,11 @@
 #			X = (M1+M)log2 + Jlog2/64 + R, |M1+M| >= 16380.	#
 #		Hence, exp(X) may overflow or underflow or neither.	#
 #		When that is the case, AdjScale = 2^(M1) where M1 is	#
-#		approximately M. Thus 6.2 will never cause 		#
+#		approximately M. Thus 6.2 will never cause		#
 #		over/underflow. Possible exception in 6.4 is overflow	#
 #		or underflow. The inexact exception is not generated in	#
 #		6.4. Although one can argue that the inexact flag	#
-#		should always be raised, to simulate that exception 	#
+#		should always be raised, to simulate that exception	#
 #		cost to much than the flag is worth in practical uses.	#
 #									#
 #	Step 7.	Return 1 + X.						#
@@ -6944,7 +6944,7 @@
 #		in Step 7.1 to avoid unnecessary trapping. (Although	#
 #		the FMOVEM may not seem relevant since X is normalized,	#
 #		the precaution will be useful in the library version of	#
-#		this code where the separate entry for denormalized 	#
+#		this code where the separate entry for denormalized	#
 #		inputs will be done away with.)				#
 #									#
 #	Step 8.	Handle exp(X) where |X| >= 16380log2.			#
@@ -6952,9 +6952,9 @@
 #		(mimic 2.2 - 2.6)					#
 #		8.2	N := round-to-integer( X * 64/log2 )		#
 #		8.3	Calculate J = N mod 64, J = 0,1,...,63		#
-#		8.4	K := (N-J)/64, M1 := truncate(K/2), M = K-M1, 	#
+#		8.4	K := (N-J)/64, M1 := truncate(K/2), M = K-M1,	#
 #			AdjFlag := 1.					#
-#		8.5	Calculate the address of the stored value 	#
+#		8.5	Calculate the address of the stored value	#
 #			2^(J/64).					#
 #		8.6	Create the values Scale = 2^M, AdjScale = 2^M1.	#
 #		8.7	Go to Step 3.					#
@@ -6991,8 +6991,8 @@
 #		1.4	Go to Step 10.					#
 #	Notes:	The usual case should take the branches 1.1 -> 1.3 -> 2.#
 #		However, it is conceivable |X| can be small very often	#
-#		because EXPM1 is intended to evaluate exp(X)-1 		#
-#		accurately when |X| is small. For further details on 	#
+#		because EXPM1 is intended to evaluate exp(X)-1		#
+#		accurately when |X| is small. For further details on	#
 #		the comparisons, see the notes on Step 1 of setox.	#
 #									#
 #	Step 2.	Calculate N = round-to-nearest-int( X * 64/log2 ).	#
@@ -7000,16 +7000,16 @@
 #		2.2	Calculate	J = N mod 64; so J = 0,1,2,..., #
 #			or 63.						#
 #		2.3	Calculate	M = (N - J)/64; so N = 64M + J.	#
-#		2.4	Calculate the address of the stored value of 	#
+#		2.4	Calculate the address of the stored value of	#
 #			2^(J/64).					#
-#		2.5	Create the values Sc = 2^M and 			#
+#		2.5	Create the values Sc = 2^M and			#
 #			OnebySc := -2^(-M).				#
 #	Notes:	See the notes on Step 2 of setox.			#
 #									#
 #	Step 3.	Calculate X - N*log2/64.				#
-#		3.1	R := X + N*L1, 					#
+#		3.1	R := X + N*L1,					#
 #				where L1 := single-precision(-log2/64).	#
-#		3.2	R := R + N*L2, 					#
+#		3.2	R := R + N*L2,					#
 #				L2 := extended-precision(-log2/64 - L1).#
 #	Notes:	Applying the analysis of Step 3 of setox in this case	#
 #		shows that |R| <= 0.0055 (note that |X| <= 70 log2 in	#
@@ -7017,10 +7017,10 @@
 #									#
 #	Step 4.	Approximate exp(R)-1 by a polynomial			#
 #			p = R+R*R*(A1+R*(A2+R*(A3+R*(A4+R*(A5+R*A6)))))	#
-#	Notes:	a) In order to reduce memory access, the coefficients 	#
-#		are made as "short" as possible: A1 (which is 1/2), A5 	#
-#		and A6 are single precision; A2, A3 and A4 are double 	#
-#		precision. 						#
+#	Notes:	a) In order to reduce memory access, the coefficients	#
+#		are made as "short" as possible: A1 (which is 1/2), A5	#
+#		and A6 are single precision; A2, A3 and A4 are double	#
+#		precision.						#
 #		b) Even with the restriction above,			#
 #			|p - (exp(R)-1)| <	|R| * 2^(-72.7)		#
 #		for all |R| <= 0.0055.					#
@@ -7035,9 +7035,9 @@
 #		where T and t are the stored values for 2^(J/64).	#
 #	Notes:	2^(J/64) is stored as T and t where T+t approximates	#
 #		2^(J/64) to roughly 85 bits; T is in extended precision	#
-#		and t is in single precision. Note also that T is 	#
-#		rounded to 62 bits so that the last two bits of T are 	#
-#		zero. The reason for such a special form is that T-1, 	#
+#		and t is in single precision. Note also that T is	#
+#		rounded to 62 bits so that the last two bits of T are	#
+#		zero. The reason for such a special form is that T-1,	#
 #		T-2, and T-8 will all be exact --- a property that will	#
 #		be exploited in Step 6 below. The total relative error	#
 #		in p is no bigger than 2^(-67.7) compared to the final	#
@@ -7052,7 +7052,7 @@
 #		6.5	ans := (T + OnebySc) + (p + t).			#
 #		6.6	Restore user FPCR.				#
 #		6.7	Return ans := Sc * ans. Exit.			#
-#	Notes:	The various arrangements of the expressions give 	#
+#	Notes:	The various arrangements of the expressions give	#
 #		accurate evaluations.					#
 #									#
 #	Step 7.	exp(X)-1 for |X| < 1/4.					#
@@ -7068,8 +7068,8 @@
 #		 Return ans := ans*2^(140). Exit			#
 #	Notes:	The idea is to return "X - tiny" under the user		#
 #		precision and rounding modes. To avoid unnecessary	#
-#		inefficiency, we stay away from denormalized numbers 	#
-#		the best we can. For |X| >= 2^(-16312), the 		#
+#		inefficiency, we stay away from denormalized numbers	#
+#		the best we can. For |X| >= 2^(-16312), the		#
 #		straightforward 8.2 generates the inexact exception as	#
 #		the case warrants.					#
 #									#
@@ -7077,13 +7077,13 @@
 #			p = X + X*X*(B1 + X*(B2 + ... + X*B12))		#
 #	Notes:	a) In order to reduce memory access, the coefficients	#
 #		are made as "short" as possible: B1 (which is 1/2), B9	#
-#		to B12 are single precision; B3 to B8 are double 	#
+#		to B12 are single precision; B3 to B8 are double	#
 #		precision; and B2 is double extended.			#
 #		b) Even with the restriction above,			#
 #			|p - (exp(X)-1)| < |X| 2^(-70.6)		#
 #		for all |X| <= 0.251.					#
 #		Note that 0.251 is slightly bigger than 1/4.		#
-#		c) To fully preserve accuracy, the polynomial is 	#
+#		c) To fully preserve accuracy, the polynomial is	#
 #		computed as						#
 #			X + ( S*B1 +	Q ) where S = X*X and		#
 #			Q	=	X*S*(B2 + X*(B3 + ... + X*B12))	#
@@ -7093,11 +7093,11 @@
 #				[ S*S*(B3 + S*(B5 + ... + S*B11)) ]	#
 #									#
 #	Step 10. Calculate exp(X)-1 for |X| >= 70 log 2.		#
-#		10.1 If X >= 70log2 , exp(X) - 1 = exp(X) for all 	#
+#		10.1 If X >= 70log2 , exp(X) - 1 = exp(X) for all	#
 #		practical purposes. Therefore, go to Step 1 of setox.	#
 #		10.2 If X <= -70log2, exp(X) - 1 = -1 for all practical	#
-#		purposes. 						#
-#		ans := -1 						#
+#		purposes.						#
+#		ans := -1						#
 #		Restore user FPCR					#
 #		Return ans := ans + 2^(-126). Exit.			#
 #	Notes:	10.2 will always create an inexact and return -1 + tiny	#
@@ -7602,10 +7602,10 @@
 # sgetexp():  returns the exponent portion of the input argument.	#
 #	      The exponent bias is removed and the exponent value is	#
 #	      returned as an extended precision number in fp0.		#
-# sgetexpd(): handles denormalized numbers. 				#
+# sgetexpd(): handles denormalized numbers.				#
 #									#
-# sgetman():  extracts the mantissa of the input argument. The 		#
-#	      mantissa is converted to an extended precision number w/ 	#
+# sgetman():  extracts the mantissa of the input argument. The		#
+#	      mantissa is converted to an extended precision number w/	#
 #	      an exponent of $3fff and is returned in fp0. The range of #
 #	      the result is [1.0 - 2.0).				#
 # sgetmand(): handles denormalized numbers.				#
@@ -7679,9 +7679,9 @@
 #	fp0 = cosh(X)							#
 #									#
 # ACCURACY and MONOTONICITY *******************************************	#
-#	The returned result is within 3 ulps in 64 significant bit, 	#
+#	The returned result is within 3 ulps in 64 significant bit,	#
 #	i.e. within 0.5001 ulp to 53 bits if the result is subsequently	#
-#	rounded to double precision. The result is provably monotonic 	#
+#	rounded to double precision. The result is provably monotonic	#
 #	in double precision.						#
 #									#
 # ALGORITHM ***********************************************************	#
@@ -7698,7 +7698,7 @@
 #									#
 #	4. (16380 log2 < |X| <= 16480 log2)				#
 #		cosh(X) = sign(X) * exp(|X|)/2.				#
-#		However, invoking exp(|X|) may cause premature 		#
+#		However, invoking exp(|X|) may cause premature		#
 #		overflow. Thus, we calculate sinh(X) as follows:	#
 #		Y	:= |X|						#
 #		Fact	:=	2**(16380)				#
@@ -7793,7 +7793,7 @@
 #	fp0 = sinh(X)							#
 #									#
 # ACCURACY and MONOTONICITY *******************************************	#
-#	The returned result is within 3 ulps in 64 significant bit, 	#
+#	The returned result is within 3 ulps in 64 significant bit,	#
 #	i.e. within 0.5001 ulp to 53 bits if the result is subsequently #
 #	rounded to double precision. The result is provably monotonic	#
 #	in double precision.						#
@@ -7911,7 +7911,7 @@
 #	fp0 = tanh(X)							#
 #									#
 # ACCURACY and MONOTONICITY *******************************************	#
-#	The returned result is within 3 ulps in 64 significant bit, 	#
+#	The returned result is within 3 ulps in 64 significant bit,	#
 #	i.e. within 0.5001 ulp to 53 bits if the result is subsequently #
 #	rounded to double precision. The result is provably monotonic	#
 #	in double precision.						#
@@ -8077,51 +8077,51 @@
 #	fp0 = log(X) or log(1+X)					#
 #									#
 # ACCURACY and MONOTONICITY *******************************************	#
-#	The returned result is within 2 ulps in 64 significant bit, 	#
+#	The returned result is within 2 ulps in 64 significant bit,	#
 #	i.e. within 0.5001 ulp to 53 bits if the result is subsequently	#
 #	rounded to double precision. The result is provably monotonic	#
 #	in double precision.						#
 #									#
 # ALGORITHM ***********************************************************	#
 #	LOGN:								#
-#	Step 1. If |X-1| < 1/16, approximate log(X) by an odd 		#
-#		polynomial in u, where u = 2(X-1)/(X+1). Otherwise, 	#
+#	Step 1. If |X-1| < 1/16, approximate log(X) by an odd		#
+#		polynomial in u, where u = 2(X-1)/(X+1). Otherwise,	#
 #		move on to Step 2.					#
 #									#
 #	Step 2. X = 2**k * Y where 1 <= Y < 2. Define F to be the first	#
-#		seven significant bits of Y plus 2**(-7), i.e. 		#
-#		F = 1.xxxxxx1 in base 2 where the six "x" match those 	#
+#		seven significant bits of Y plus 2**(-7), i.e.		#
+#		F = 1.xxxxxx1 in base 2 where the six "x" match those	#
 #		of Y. Note that |Y-F| <= 2**(-7).			#
 #									#
-#	Step 3. Define u = (Y-F)/F. Approximate log(1+u) by a 		#
+#	Step 3. Define u = (Y-F)/F. Approximate log(1+u) by a		#
 #		polynomial in u, log(1+u) = poly.			#
 #									#
-#	Step 4. Reconstruct 						#
+#	Step 4. Reconstruct						#
 #		log(X) = log( 2**k * Y ) = k*log(2) + log(F) + log(1+u)	#
 #		by k*log(2) + (log(F) + poly). The values of log(F) are	#
 #		calculated beforehand and stored in the program.	#
 #									#
 #	lognp1:								#
-#	Step 1: If |X| < 1/16, approximate log(1+X) by an odd 		#
+#	Step 1: If |X| < 1/16, approximate log(1+X) by an odd		#
 #		polynomial in u where u = 2X/(2+X). Otherwise, move on	#
 #		to Step 2.						#
 #									#
 #	Step 2: Let 1+X = 2**k * Y, where 1 <= Y < 2. Define F as done	#
-#		in Step 2 of the algorithm for LOGN and compute 	#
-#		log(1+X) as k*log(2) + log(F) + poly where poly 	#
-#		approximates log(1+u), u = (Y-F)/F. 			#
+#		in Step 2 of the algorithm for LOGN and compute		#
+#		log(1+X) as k*log(2) + log(F) + poly where poly		#
+#		approximates log(1+u), u = (Y-F)/F.			#
 #									#
 #	Implementation Notes:						#
-#	Note 1. There are 64 different possible values for F, thus 64 	#
+#	Note 1. There are 64 different possible values for F, thus 64	#
 #		log(F)'s need to be tabulated. Moreover, the values of	#
 #		1/F are also tabulated so that the division in (Y-F)/F	#
 #		can be performed by a multiplication.			#
 #									#
-#	Note 2. In Step 2 of lognp1, in order to preserved accuracy, 	#
-#		the value Y-F has to be calculated carefully when 	#
-#		1/2 <= X < 3/2. 					#
+#	Note 2. In Step 2 of lognp1, in order to preserved accuracy,	#
+#		the value Y-F has to be calculated carefully when	#
+#		1/2 <= X < 3/2.						#
 #									#
-#	Note 3. To fully exploit the pipeline, polynomials are usually 	#
+#	Note 3. To fully exploit the pipeline, polynomials are usually	#
 #		separated into two parts evaluated independently before	#
 #		being added up.						#
 #									#
@@ -8334,9 +8334,9 @@
 	cmp.l		%d1,&0			# CHECK IF X IS NEGATIVE
 	blt.w		LOGNEG			# LOG OF NEGATIVE ARGUMENT IS INVALID
 # X IS POSITIVE, CHECK IF X IS NEAR 1
-	cmp.l		%d1,&0x3ffef07d 	# IS X < 15/16?
+	cmp.l		%d1,&0x3ffef07d		# IS X < 15/16?
 	blt.b		LOGMAIN			# YES
-	cmp.l		%d1,&0x3fff8841 	# IS X > 17/16?
+	cmp.l		%d1,&0x3fff8841		# IS X > 17/16?
 	ble.w		LOGNEAR1		# NO
 
 LOGMAIN:
@@ -8349,7 +8349,7 @@
 #--NOTE THAT U = (Y-F)/F IS VERY SMALL AND THUS APPROXIMATING
 #--LOG(1+U) CAN BE VERY EFFICIENT.
 #--ALSO NOTE THAT THE VALUE 1/F IS STORED IN A TABLE SO THAT NO
-#--DIVISION IS NEEDED TO CALCULATE (Y-F)/F. 
+#--DIVISION IS NEEDED TO CALCULATE (Y-F)/F.
 
 #--GET K, Y, F, AND ADDRESS OF 1/F.
 	asr.l		&8,%d1
@@ -8564,10 +8564,10 @@
 	mov.l		X(%a6),%d1
 	cmp.l		%d1,&0
 	ble.w		LP1NEG0			# LOG OF ZERO OR -VE
-	cmp.l		%d1,&0x3ffe8000 	# IS BOUNDS [1/2,3/2]?
+	cmp.l		%d1,&0x3ffe8000		# IS BOUNDS [1/2,3/2]?
 	blt.w		LOGMAIN
 	cmp.l		%d1,&0x3fffc000
-	bgt.w		LOGMAIN 
+	bgt.w		LOGMAIN
 #--IF 1+Z > 3/2 OR 1+Z < 1/2, THEN X, WHICH IS ROUNDING 1+Z,
 #--CONTAINS AT LEAST 63 BITS OF INFORMATION OF Z. IN THAT CASE,
 #--SIMPLY INVOKE LOG(X) FOR LOG(1+Z).
@@ -8668,7 +8668,7 @@
 #	a0 = pointer to extended precision input			#
 #	d0 = round precision,mode					#
 #									#
-# OUTPUT **************************************************************	# 
+# OUTPUT **************************************************************	#
 #	fp0 = arctanh(X)						#
 #									#
 # ACCURACY and MONOTONICITY *******************************************	#
@@ -8783,7 +8783,7 @@
 #            2.1 Restore the user FPCR					#
 #            2.2 Return ans := Y * INV_L10.				#
 #									#
-#       slog10: 							#
+#       slog10:								#
 #									#
 #       Step 0. If X < 0, create a NaN and raise the invalid operation	#
 #               flag. Otherwise, save FPCR in D1; set FpCR to default.	#
@@ -8926,7 +8926,7 @@
 #	fp0 = 2**X or 10**X						#
 #									#
 # ACCURACY and MONOTONICITY *******************************************	#
-#	The returned result is within 2 ulps in 64 significant bit, 	#
+#	The returned result is within 2 ulps in 64 significant bit,	#
 #	i.e. within 0.5001 ulp to 53 bits if the result is subsequently	#
 #	rounded to double precision. The result is provably monotonic	#
 #	in double precision.						#
@@ -8957,7 +8957,7 @@
 #									#
 #	4. Define r as							#
 #		r := ((X - N*L1)-N*L2) * L10				#
-#		where L1, L2 are the leading and trailing parts of 	#
+#		where L1, L2 are the leading and trailing parts of	#
 #		log_10(2)/64 and L10 is the natural log of 10. Then	#
 #		10**X = 2**(M') * 2**(M) * 2**(j/64) * exp(r).		#
 #		Go to expr to compute that expression.			#
@@ -8978,7 +8978,7 @@
 #		Exit.							#
 #									#
 #	ExpBig								#
-#	1. Generate overflow by Huge * Huge if X > 0; otherwise, 	#
+#	1. Generate overflow by Huge * Huge if X > 0; otherwise,	#
 #	        generate underflow by Tiny * Tiny.			#
 #									#
 #	ExpSm								#
@@ -9309,10 +9309,10 @@
 
 #########################################################################
 # smovcr(): returns the ROM constant at the offset specified in d1	#
-#	    rounded to the mode and precision specified in d0. 		#
+#	    rounded to the mode and precision specified in d0.		#
 #									#
 # INPUT	***************************************************************	#
-# 	d0 = rnd prec,mode						#
+#	d0 = rnd prec,mode						#
 #	d1 = ROM offset							#
 #									#
 # OUTPUT **************************************************************	#
@@ -9325,7 +9325,7 @@
 	mov.l		%d1,-(%sp)		# save rom offset for a sec
 
 	lsr.b		&0x4,%d0		# shift ctrl bits to lo
-	mov.l		%d0,%d1			# make a copy 
+	mov.l		%d0,%d1			# make a copy
 	andi.w		&0x3,%d1		# extract rnd mode
 	andi.w		&0xc,%d0		# extract rnd prec
 	swap		%d0			# put rnd prec in hi
@@ -9343,7 +9343,7 @@
 	cmpi.b		%d1,&0x0e		# check range $0b - $0e
 	ble.b		sm_tbl			# valid constants in this range
 	cmpi.b		%d1,&0x2f		# check range $10 - $2f
-	ble.b		z_val			# if in this range, return zero 
+	ble.b		z_val			# if in this range, return zero
 	cmpi.b		%d1,&0x3f		# check range $30 - $3f
 	ble.b		bg_tbl			# valid constants in this range
 
@@ -9378,7 +9378,7 @@
 #	$0C	e		(inexact)
 #	$0D	log2(e)		(inexact)
 #	$0E	log10(e)	(exact)
-# 
+#
 # fetch a pointer to the answer table relating to the proper rounding
 # precision.
 #
@@ -9465,7 +9465,7 @@
 	swap		%d0			# rnd prec in upper word
 
 # call round() to round the answer to the proper precision.
-# exponents out of range for single or double DO NOT cause underflow 
+# exponents out of range for single or double DO NOT cause underflow
 # or overflow.
 	mov.w		0x0(%a0,%d1.w),FP_SCR1_EX(%a6) # load first word
 	mov.l		0x4(%a0,%d1.w),FP_SCR1_HI(%a6) # load second word
@@ -9562,7 +9562,7 @@
 
 #########################################################################
 # sscale(): computes the destination operand scaled by the source	#
-#	    operand. If the absoulute value of the source operand is 	#
+#	    operand. If the absoulute value of the source operand is	#
 #	    >= 2^14, an overflow or underflow is returned.		#
 #									#
 # INPUT *************************************************************** #
@@ -9624,7 +9624,7 @@
 	bge.b		sok_norm2		# thank goodness no
 
 # the multiply factor that we're trying to create should be a denorm
-# for the multiply to work. therefore, we're going to actually do a 
+# for the multiply to work. therefore, we're going to actually do a
 # multiply with a denorm which will cause an unimplemented data type
 # exception to be put into the machine which will be caught and corrected
 # later. we don't do this with the DENORMs above because this method
@@ -9639,7 +9639,7 @@
 	clr.l		-(%sp)			# insert zero low mantissa
 	mov.l		%d1,-(%sp)		# insert new high mantissa
 	clr.l		-(%sp)			# make zero exponent
-	bra.b		sok_norm_cont	
+	bra.b		sok_norm_cont
 sok_dnrm_32:
 	subi.b		&0x20,%d0		# get shift count
 	lsr.l		%d0,%d1			# make low mantissa longword
@@ -9647,7 +9647,7 @@
 	clr.l		-(%sp)			# insert zero high mantissa
 	clr.l		-(%sp)			# make zero exponent
 	bra.b		sok_norm_cont
-	
+
 # the src will force the dst to a DENORM value or worse. so, let's
 # create an fp multiply that will create the result.
 sok_norm:
@@ -9705,7 +9705,7 @@
 #	a1 = pointer to extended precision input Y			#
 #	d0 = round precision,mode					#
 #									#
-# 	The input operands X and Y can be either normalized or 		#
+#	The input operands X and Y can be either normalized or		#
 #	denormalized.							#
 #									#
 # OUTPUT ************************************************************** #
@@ -9714,7 +9714,7 @@
 # ALGORITHM *********************************************************** #
 #									#
 #       Step 1.  Save and strip signs of X and Y: signX := sign(X),	#
-#                signY := sign(Y), X := |X|, Y := |Y|, 			#
+#                signY := sign(Y), X := |X|, Y := |Y|,			#
 #                signQ := signX EOR signY. Record whether MOD or REM	#
 #                is requested.						#
 #									#
@@ -9734,7 +9734,7 @@
 #									#
 #       Step 4.  At this point, R = X - QY = MOD(X,Y). Set		#
 #                Last_Subtract := false (used in Step 7 below). If	#
-#                MOD is requested, go to Step 6. 			#
+#                MOD is requested, go to Step 6.			#
 #									#
 #       Step 5.  R = MOD(X,Y), but REM(X,Y) is requested.		#
 #            5.1 If R < Y/2, then R = MOD(X,Y) = REM(X,Y). Go to	#
@@ -10060,8 +10060,8 @@
 	mov.b		&FMUL_OP,%d1		# last inst is MUL
 	fmul.x		Scale(%pc),%fp0		# may cause underflow
 	bra		t_catch2
-# the '040 package did this apparently to see if the dst operand for the 
-# preceding fmul was a denorm. but, it better not have been since the 
+# the '040 package did this apparently to see if the dst operand for the
+# preceding fmul was a denorm. but, it better not have been since the
 # algorithm just got done playing with fp0 and expected no exceptions
 # as a result. trust me...
 #	bra		t_avoid_unsupp		# check for denorm as a
@@ -10075,7 +10075,7 @@
 Rem_is_0:
 #..R = 2^(-j)X - Q Y = Y, thus R = 0 and quotient = 2^j (Q+1)
 	addq.l		&1,%d3
-	cmp.l		%d0,&8			# D0 is j 
+	cmp.l		%d0,&8			# D0 is j
 	bge.b		Q_Big
 
 	lsl.l		%d0,%d3
@@ -10117,20 +10117,20 @@
 #									#
 # INPUT ***************************************************************	#
 #	a0 = pointer to source operand					#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	fp0 = default result						#
 #									#
 # ALGORITHM ***********************************************************	#
 #	- Store properly signed INF into fp0.				#
-#	- Set FPSR exception status dz bit, ccode inf bit, and 		#
+#	- Set FPSR exception status dz bit, ccode inf bit, and		#
 #	  accrued dz bit.						#
 #									#
 #########################################################################
 
 	global		t_dz
 t_dz:
-	tst.b		SRC_EX(%a0) 		# no; is src negative?
+	tst.b		SRC_EX(%a0)		# no; is src negative?
 	bmi.b		t_dz2			# yes
 
 dz_pinf:
@@ -10146,7 +10146,7 @@
 
 #################################################################
 # OPERR exception:						#
-#	- set FPSR exception status operr bit, condition code 	#
+#	- set FPSR exception status operr bit, condition code	#
 #	  nan bit; Store default NAN into fp0			#
 #################################################################
 	global		t_operr
@@ -10157,7 +10157,7 @@
 
 #################################################################
 # Extended DENORM:						#
-# 	- For all functions that have a denormalized input and	#
+#	- For all functions that have a denormalized input and	#
 #	  that f(x)=x, this is the entry point.			#
 #	- we only return the EXOP here if either underflow or	#
 #	  inexact is enabled.					#
@@ -10224,13 +10224,13 @@
 
 #################################################################
 # UNFL exception:						#
-# 	- This routine is for cases where even an EXOP isn't	#
-#  	  large enough to hold the range of this result.	#
+#	- This routine is for cases where even an EXOP isn't	#
+#	  large enough to hold the range of this result.	#
 #	  In such a case, the EXOP equals zero.			#
-#  	- Return the default result to the proper precision 	#
+#	- Return the default result to the proper precision	#
 #	  with the sign of this result being the same as that	#
 #	  of the src operand.					#
-# 	- t_unfl2() is provided to force the result sign to 	#
+#	- t_unfl2() is provided to force the result sign to	#
 #	  positive which is the desired result for fetox().	#
 #################################################################
 	global		t_unfl
@@ -10259,15 +10259,15 @@
 
 #################################################################
 # OVFL exception:						#
-# 	- This routine is for cases where even an EXOP isn't	#
-#  	  large enough to hold the range of this result.	#
-# 	- Return the default result to the proper precision 	#
-#	  with the sign of this result being the same as that 	#
+#	- This routine is for cases where even an EXOP isn't	#
+#	  large enough to hold the range of this result.	#
+#	- Return the default result to the proper precision	#
+#	  with the sign of this result being the same as that	#
 #	  of the src operand.					#
-# 	- t_ovfl2() is provided to force the result sign to 	#
+#	- t_ovfl2() is provided to force the result sign to	#
 #	  positive which is the desired result for fcosh().	#
-# 	- t_ovfl_sc() is provided for scale() which only sets 	#
-#	  the inexact bits if the number is inexact for the 	#
+#	- t_ovfl_sc() is provided for scale() which only sets	#
+#	  the inexact bits if the number is inexact for the	#
 #	  precision indicated.					#
 #################################################################
 
@@ -10338,10 +10338,10 @@
 	rts
 
 #################################################################
-# t_catch(): 							#
+# t_catch():							#
 #	- the last operation of a transcendental emulation	#
-# 	  routine may have caused an underflow or overflow. 	#
-# 	  we find out if this occurred by doing an fsave and 	#
+#	  routine may have caused an underflow or overflow.	#
+#	  we find out if this occurred by doing an fsave and	#
 #	  checking the exception bit. if one did occur, then we	#
 #	  jump to fgen_except() which creates the default	#
 #	  result and EXOP for us.				#
@@ -10407,8 +10407,8 @@
 # unf_res(): underflow default result calculation for transcendentals	#
 #									#
 # INPUT:								#
-# 	d0   : rnd mode,precision					#
-# 	d1.b : sign bit of result ('11111111 = (-) ; '00000000 = (+))	#
+#	d0   : rnd mode,precision					#
+#	d1.b : sign bit of result ('11111111 = (-) ; '00000000 = (+))	#
 # OUTPUT:								#
 #	a0   : points to result (in instruction memory)			#
 #########################################################################
@@ -10457,7 +10457,7 @@
 	long		0x0,0x0,0x0,0x0
 	long		0x0,0x0,0x0,0x0
 	long		0x0,0x0,0x0,0x0
-	
+
 	long		0x80000000, 0x00000000, 0x00000000, 0x0 # ZERO;ext
 	long		0x80000000, 0x00000000, 0x00000000, 0x0 # ZERO;ext
 	long		0x80000000, 0x00000000, 0x00000001, 0x0 # MIN; ext
@@ -10504,7 +10504,7 @@
 #########################################################################
 	global		dst_zero
 dst_zero:
-	tst.b		DST_EX(%a1) 		# get sign of dst operand
+	tst.b		DST_EX(%a1)		# get sign of dst operand
 	bmi.b		ld_mzero		# if neg, load neg zero
 	bra.b		ld_pzero		# load positive zero
 
@@ -10513,7 +10513,7 @@
 #########################################################################
 	global		src_inf
 src_inf:
-	tst.b		SRC_EX(%a0) 		# get sign of src operand
+	tst.b		SRC_EX(%a0)		# get sign of src operand
 	bmi.b		ld_minf			# if negative branch
 
 #
@@ -10539,7 +10539,7 @@
 #########################################################################
 	global		dst_inf
 dst_inf:
-	tst.b		DST_EX(%a1) 		# get sign of dst operand
+	tst.b		DST_EX(%a1)		# get sign of dst operand
 	bmi.b		ld_minf			# if negative branch
 	bra.b		ld_pinf
 
@@ -10581,7 +10581,7 @@
 #########################################################################
 	global		src_one
 src_one:
-	tst.b		SRC_EX(%a0) 		# check sign of source
+	tst.b		SRC_EX(%a0)		# check sign of source
 	bmi.b		ld_mone
 
 #
@@ -10610,7 +10610,7 @@
 #################################################################
 	global		spi_2
 spi_2:
-	tst.b		SRC_EX(%a0) 		# check sign of source
+	tst.b		SRC_EX(%a0)		# check sign of source
 	bmi.b		ld_mpi2
 
 #
@@ -10637,7 +10637,7 @@
 
 #
 # ssincosz(): When the src operand is ZERO, store a one in the
-# 	      cosine register and return a ZERO in fp0 w/ the same sign
+#	      cosine register and return a ZERO in fp0 w/ the same sign
 #	      as the src operand.
 #
 	global		ssincosz
@@ -10666,7 +10666,7 @@
 
 #
 # ssincosqnan(): When the src operand is a QNAN, store the QNAN in the cosine
-# 		 register and branch to the src QNAN routine.
+#		 register and branch to the src QNAN routine.
 #
 	global		ssincosqnan
 ssincosqnan:
@@ -10719,7 +10719,7 @@
 	fmovm.x		&0x40,EXC_FP1(%a6)
 	rts
 sto_cos_2:
-	fmov.x 		%fp1,%fp2
+	fmov.x		%fp1,%fp2
 	rts
 sto_cos_3:
 	fmov.x		%fp1,%fp3
@@ -10988,8 +10988,8 @@
 # fkern2.s:
 #	These entry points are used by the exception handler
 # routines where an instruction is selected by an index into
-# a large jump table corresponding to a given instruction which 
-# has been decoded. Flow continues here where we now decode 
+# a large jump table corresponding to a given instruction which
+# has been decoded. Flow continues here where we now decode
 # further accoding to the source operand type.
 #
 
@@ -11331,11 +11331,11 @@
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	fgen_except(): catch an exception during transcendental 	#
+#	fgen_except(): catch an exception during transcendental		#
 #		       emulation					#
 #									#
 # XREF ****************************************************************	#
-#	fmul() - emulate a multiply instruction				# 
+#	fmul() - emulate a multiply instruction				#
 #	fadd() - emulate an add instruction				#
 #	fin() - emulate an fmove instruction				#
 #									#
@@ -11343,16 +11343,16 @@
 #	fp0 = destination operand					#
 #	d0  = type of instruction that took exception			#
 #	fsave frame = source operand					#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	fp0 = result							#
 #	fp1 = EXOP							#
 #									#
 # ALGORITHM ***********************************************************	#
-# 	An exception occurred on the last instruction of the 		#
-# transcendental emulation. hopefully, this won't be happening much 	#
+#	An exception occurred on the last instruction of the		#
+# transcendental emulation. hopefully, this won't be happening much	#
 # because it will be VERY slow.						#
-# 	The only exceptions capable of passing through here are		#
+#	The only exceptions capable of passing through here are		#
 # Overflow, Underflow, and Unsupported Data Type.			#
 #									#
 #########################################################################
@@ -11408,11 +11408,11 @@
 
 	swbeg		&109
 tbl_unsupp:
-	long		fin	 	- tbl_unsupp	# 00: fmove
-	long		fint	 	- tbl_unsupp	# 01: fint
-	long		fsinh	 	- tbl_unsupp	# 02: fsinh
-	long		fintrz	 	- tbl_unsupp	# 03: fintrz
-	long		fsqrt	 	- tbl_unsupp	# 04: fsqrt
+	long		fin		- tbl_unsupp	# 00: fmove
+	long		fint		- tbl_unsupp	# 01: fint
+	long		fsinh		- tbl_unsupp	# 02: fsinh
+	long		fintrz		- tbl_unsupp	# 03: fintrz
+	long		fsqrt		- tbl_unsupp	# 04: fsqrt
 	long		tbl_unsupp	- tbl_unsupp
 	long		flognp1		- tbl_unsupp	# 06: flognp1
 	long		tbl_unsupp	- tbl_unsupp
@@ -11432,23 +11432,23 @@
 	long		flog10		- tbl_unsupp	# 15: flog10
 	long		flog2		- tbl_unsupp	# 16: flog2
 	long		tbl_unsupp	- tbl_unsupp
-	long		fabs		- tbl_unsupp 	# 18: fabs
+	long		fabs		- tbl_unsupp	# 18: fabs
 	long		fcosh		- tbl_unsupp	# 19: fcosh
-	long		fneg		- tbl_unsupp 	# 1a: fneg
+	long		fneg		- tbl_unsupp	# 1a: fneg
 	long		tbl_unsupp	- tbl_unsupp
 	long		facos		- tbl_unsupp	# 1c: facos
 	long		fcos		- tbl_unsupp	# 1d: fcos
 	long		fgetexp		- tbl_unsupp	# 1e: fgetexp
 	long		fgetman		- tbl_unsupp	# 1f: fgetman
-	long		fdiv		- tbl_unsupp 	# 20: fdiv
+	long		fdiv		- tbl_unsupp	# 20: fdiv
 	long		fmod		- tbl_unsupp	# 21: fmod
-	long		fadd		- tbl_unsupp 	# 22: fadd
-	long		fmul		- tbl_unsupp 	# 23: fmul
-	long		fsgldiv		- tbl_unsupp 	# 24: fsgldiv
+	long		fadd		- tbl_unsupp	# 22: fadd
+	long		fmul		- tbl_unsupp	# 23: fmul
+	long		fsgldiv		- tbl_unsupp	# 24: fsgldiv
 	long		frem		- tbl_unsupp	# 25: frem
 	long		fscale		- tbl_unsupp	# 26: fscale
-	long		fsglmul		- tbl_unsupp 	# 27: fsglmul
-	long		fsub		- tbl_unsupp 	# 28: fsub
+	long		fsglmul		- tbl_unsupp	# 27: fsglmul
+	long		fsub		- tbl_unsupp	# 28: fsub
 	long		tbl_unsupp	- tbl_unsupp
 	long		tbl_unsupp	- tbl_unsupp
 	long		tbl_unsupp	- tbl_unsupp
@@ -11464,20 +11464,20 @@
 	long		fsincos		- tbl_unsupp	# 35: fsincos
 	long		fsincos		- tbl_unsupp	# 36: fsincos
 	long		fsincos		- tbl_unsupp	# 37: fsincos
-	long		fcmp		- tbl_unsupp 	# 38: fcmp
+	long		fcmp		- tbl_unsupp	# 38: fcmp
 	long		tbl_unsupp	- tbl_unsupp
-	long		ftst		- tbl_unsupp 	# 3a: ftst
+	long		ftst		- tbl_unsupp	# 3a: ftst
 	long		tbl_unsupp	- tbl_unsupp
 	long		tbl_unsupp	- tbl_unsupp
 	long		tbl_unsupp	- tbl_unsupp
 	long		tbl_unsupp	- tbl_unsupp
 	long		tbl_unsupp	- tbl_unsupp
-	long		fsin		- tbl_unsupp 	# 40: fsmove
-	long		fssqrt		- tbl_unsupp 	# 41: fssqrt
+	long		fsin		- tbl_unsupp	# 40: fsmove
+	long		fssqrt		- tbl_unsupp	# 41: fssqrt
 	long		tbl_unsupp	- tbl_unsupp
 	long		tbl_unsupp	- tbl_unsupp
 	long		fdin		- tbl_unsupp	# 44: fdmove
-	long		fdsqrt		- tbl_unsupp 	# 45: fdsqrt
+	long		fdsqrt		- tbl_unsupp	# 45: fdsqrt
 	long		tbl_unsupp	- tbl_unsupp
 	long		tbl_unsupp	- tbl_unsupp
 	long		tbl_unsupp	- tbl_unsupp
@@ -11496,31 +11496,31 @@
 	long		tbl_unsupp	- tbl_unsupp
 	long		tbl_unsupp	- tbl_unsupp
 	long		tbl_unsupp	- tbl_unsupp
-	long		fsabs		- tbl_unsupp 	# 58: fsabs
+	long		fsabs		- tbl_unsupp	# 58: fsabs
 	long		tbl_unsupp	- tbl_unsupp
-	long		fsneg		- tbl_unsupp 	# 5a: fsneg
+	long		fsneg		- tbl_unsupp	# 5a: fsneg
 	long		tbl_unsupp	- tbl_unsupp
 	long		fdabs		- tbl_unsupp	# 5c: fdabs
 	long		tbl_unsupp	- tbl_unsupp
-	long		fdneg		- tbl_unsupp 	# 5e: fdneg
+	long		fdneg		- tbl_unsupp	# 5e: fdneg
 	long		tbl_unsupp	- tbl_unsupp
 	long		fsdiv		- tbl_unsupp	# 60: fsdiv
 	long		tbl_unsupp	- tbl_unsupp
 	long		fsadd		- tbl_unsupp	# 62: fsadd
 	long		fsmul		- tbl_unsupp	# 63: fsmul
-	long		fddiv		- tbl_unsupp 	# 64: fddiv
+	long		fddiv		- tbl_unsupp	# 64: fddiv
 	long		tbl_unsupp	- tbl_unsupp
 	long		fdadd		- tbl_unsupp	# 66: fdadd
-	long		fdmul		- tbl_unsupp 	# 67: fdmul
+	long		fdmul		- tbl_unsupp	# 67: fdmul
 	long		fssub		- tbl_unsupp	# 68: fssub
 	long		tbl_unsupp	- tbl_unsupp
 	long		tbl_unsupp	- tbl_unsupp
 	long		tbl_unsupp	- tbl_unsupp
-	long		fdsub		- tbl_unsupp 	# 6c: fdsub
+	long		fdsub		- tbl_unsupp	# 6c: fdsub
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	fmul(): emulates the fmul instruction				#
+#	fmul(): emulates the fmul instruction				#
 #	fsmul(): emulates the fsmul instruction				#
 #	fdmul(): emulates the fdmul instruction				#
 #									#
@@ -11529,8 +11529,8 @@
 #	scale_to_zero_dst() - scale dst exponent to zero		#
 #	unf_res() - return default underflow result			#
 #	ovf_res() - return default overflow result			#
-# 	res_qnan() - return QNAN result					#
-# 	res_snan() - return SNAN result					#
+#	res_qnan() - return QNAN result					#
+#	res_snan() - return SNAN result					#
 #									#
 # INPUT ***************************************************************	#
 #	a0 = pointer to extended precision source operand		#
@@ -11548,12 +11548,12 @@
 # instruction won't cause an exception. Use the regular fmul to		#
 # compute a result. Check if the regular operands would have taken	#
 # an exception. If so, return the default overflow/underflow result	#
-# and return the EXOP if exceptions are enabled. Else, scale the 	#
+# and return the EXOP if exceptions are enabled. Else, scale the	#
 # result operand to the proper exponent.				#
 #									#
 #########################################################################
 
-	align 		0x10
+	align		0x10
 tbl_fmul_ovfl:
 	long		0x3fff - 0x7ffe		# ext_max
 	long		0x3fff - 0x407e		# sgl_max
@@ -11614,7 +11614,7 @@
 #
 # NORMAL:
 # - the result of the multiply operation will neither overflow nor underflow.
-# - do the multiply to the proper precision and rounding mode. 
+# - do the multiply to the proper precision and rounding mode.
 # - scale the result exponent using the scale factor. if both operands were
 # normalized then we really don't need to go through this scaling. but for now,
 # this will do.
@@ -11625,7 +11625,7 @@
 	fmov.l		L_SCR3(%a6),%fpcr	# set FPCR
 	fmov.l		&0x0,%fpsr		# clear FPSR
 
-	fmul.x		FP_SCR0(%a6),%fp0	# execute multiply	
+	fmul.x		FP_SCR0(%a6),%fp0	# execute multiply
 
 	fmov.l		%fpsr,%d1		# save status
 	fmov.l		&0x0,%fpcr		# clear FPCR
@@ -11665,7 +11665,7 @@
 	fmov.l		L_SCR3(%a6),%fpcr	# set FPCR
 	fmov.l		&0x0,%fpsr		# clear FPSR
 
-	fmul.x		FP_SCR0(%a6),%fp0	# execute multiply	
+	fmul.x		FP_SCR0(%a6),%fp0	# execute multiply
 
 	fmov.l		%fpsr,%d1		# save status
 	fmov.l		&0x0,%fpcr		# clear FPCR
@@ -11744,7 +11744,7 @@
 	fmov.l		&0x0,%fpsr		# clear FPSR
 
 	fmul.x		FP_SCR0(%a6),%fp0	# execute multiply
-	
+
 	fmov.l		%fpsr,%d1		# save status
 	fmov.l		&0x0,%fpcr		# clear FPCR
 
@@ -11753,7 +11753,7 @@
 	fabs.x		%fp0,%fp1		# make a copy of result
 	fcmp.b		%fp1,&0x2		# is |result| >= 2.b?
 	fbge.w		fmul_ovfl_tst		# yes; overflow has occurred
-	
+
 # no, it didn't overflow; we have correct result
 	bra.w		fmul_normal_exit
 
@@ -11770,7 +11770,7 @@
 # of this operation then has its exponent scaled by -0x6000 to create the
 # exceptional operand.
 #
-fmul_unfl:	
+fmul_unfl:
 	bset		&unfl_bit,FPSR_EXCEPT(%a6) # set unfl exc bit
 
 # for fun, let's use only extended precision, round to zero. then, let
@@ -11803,7 +11803,7 @@
 	rts
 
 #
-# UNFL is enabled. 
+# UNFL is enabled.
 #
 fmul_unfl_ena:
 	fmovm.x		FP_SCR1(%a6),&0x40	# load dst op
@@ -11819,7 +11819,7 @@
 fmul_unfl_ena_cont:
 	fmov.l		&0x0,%fpsr		# clear FPSR
 
-	fmul.x		FP_SCR0(%a6),%fp1	# execute multiply	
+	fmul.x		FP_SCR0(%a6),%fp1	# execute multiply
 
 	fmov.l		&0x0,%fpcr		# clear FPCR
 
@@ -11854,7 +11854,7 @@
 	fmov.l		L_SCR3(%a6),%fpcr	# set FPCR
 	fmov.l		&0x0,%fpsr		# clear FPSR
 
-	fmul.x		FP_SCR0(%a6),%fp0	# execute multiply	
+	fmul.x		FP_SCR0(%a6),%fp0	# execute multiply
 
 	fmov.l		%fpsr,%d1		# save status
 	fmov.l		&0x0,%fpcr		# clear FPCR
@@ -11878,11 +11878,11 @@
 	mov.l		L_SCR3(%a6),%d1
 	andi.b		&0xc0,%d1		# keep rnd prec
 	ori.b		&rz_mode*0x10,%d1	# insert RZ
-	
+
 	fmov.l		%d1,%fpcr		# set FPCR
 	fmov.l		&0x0,%fpsr		# clear FPSR
 
-	fmul.x		FP_SCR0(%a6),%fp1	# execute multiply	
+	fmul.x		FP_SCR0(%a6),%fp1	# execute multiply
 
 	fmov.l		&0x0,%fpcr		# clear FPCR
 	fabs.x		%fp1			# make absolute value
@@ -12024,22 +12024,22 @@
 #	norm() - normalize mantissa for EXOP on denorm			#
 #	scale_to_zero_src() - scale src exponent to zero		#
 #	ovf_res() - return default overflow result			#
-# 	unf_res() - return default underflow result			#
+#	unf_res() - return default underflow result			#
 #	res_qnan_1op() - return QNAN result				#
 #	res_snan_1op() - return SNAN result				#
 #									#
 # INPUT ***************************************************************	#
 #	a0 = pointer to extended precision source operand		#
 #	d0 = round prec/mode						#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	fp0 = result							#
 #	fp1 = EXOP (if exception occurred)				#
 #									#
 # ALGORITHM ***********************************************************	#
-# 	Handle NANs, infinities, and zeroes as special cases. Divide	#
+#	Handle NANs, infinities, and zeroes as special cases. Divide	#
 # norms into extended, single, and double precision.			#
-# 	Norms can be emulated w/ a regular fmove instruction. For	#
+#	Norms can be emulated w/ a regular fmove instruction. For	#
 # sgl/dbl, must scale exponent and perform an "fmove". Check to see	#
 # if the result would have overflowed/underflowed. If so, use unf_res()	#
 # or ovf_res() to return the default result. Also return EXOP if	#
@@ -12065,7 +12065,7 @@
 
 	mov.b		STAG(%a6),%d1		# fetch src optype tag
 	bne.w		fin_not_norm		# optimize on non-norm input
-		
+
 #
 # FP MOVE IN: NORMs and DENORMs ONLY!
 #
@@ -12126,9 +12126,9 @@
 
 #
 # operand is to be rounded to single or double precision
-#	
+#
 fin_not_ext:
-	cmpi.b		%d0,&s_mode*0x10 	# separate sgl/dbl prec
+	cmpi.b		%d0,&s_mode*0x10	# separate sgl/dbl prec
 	bne.b		fin_dbl
 
 #
@@ -12212,10 +12212,10 @@
 	bsr.l		unf_res			# calculate default result
 	or.b		%d0,FPSR_CC(%a6)	# unf_res may have set 'Z'
 	fmovm.x		FP_SCR0(%a6),&0x80	# return default result in fp0
-	rts	
+	rts
 
 #
-# operand will underflow AND underflow or inexact is enabled. 
+# operand will underflow AND underflow or inexact is enabled.
 # therefore, we must return the result rounded to extended precision.
 #
 fin_sd_unfl_ena:
@@ -12337,7 +12337,7 @@
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	fdiv(): emulates the fdiv instruction				#
+#	fdiv(): emulates the fdiv instruction				#
 #	fsdiv(): emulates the fsdiv instruction				#
 #	fddiv(): emulates the fddiv instruction				#
 #									#
@@ -12346,8 +12346,8 @@
 #	scale_to_zero_dst() - scale dst exponent to zero		#
 #	unf_res() - return default underflow result			#
 #	ovf_res() - return default overflow result			#
-# 	res_qnan() - return QNAN result					#
-# 	res_snan() - return SNAN result					#
+#	res_qnan() - return QNAN result					#
+#	res_snan() - return SNAN result					#
 #									#
 # INPUT ***************************************************************	#
 #	a0 = pointer to extended precision source operand		#
@@ -12365,7 +12365,7 @@
 # instruction won't cause an exception. Use the regular fdiv to		#
 # compute a result. Check if the regular operands would have taken	#
 # an exception. If so, return the default overflow/underflow result	#
-# and return the EXOP if exceptions are enabled. Else, scale the 	#
+# and return the EXOP if exceptions are enabled. Else, scale the	#
 # result operand to the proper exponent.				#
 #									#
 #########################################################################
@@ -12402,7 +12402,7 @@
 	or.b		STAG(%a6),%d1		# combine src tags
 
 	bne.w		fdiv_not_norm		# optimize on non-norm input
-		
+
 #
 # DIVIDE: NORMs and DENORMs ONLY!
 #
@@ -12468,7 +12468,7 @@
 fdiv_no_ovfl:
 	mov.l		(%sp)+,%d0		# restore scale factor
 	bra.b		fdiv_normal_exit
-	
+
 fdiv_may_ovfl:
 	mov.l		%d0,-(%sp)		# save scale factor
 
@@ -12501,7 +12501,7 @@
 	bne.b		fdiv_ovfl_ena		# yes
 
 fdiv_ovfl_dis:
-	btst		&neg_bit,FPSR_CC(%a6) 	# is result negative?
+	btst		&neg_bit,FPSR_CC(%a6)	# is result negative?
 	sne		%d1			# set sign param accordingly
 	mov.l		L_SCR3(%a6),%d0		# pass prec:rnd
 	bsr.l		ovf_res			# calculate default result
@@ -12573,7 +12573,7 @@
 	rts
 
 #
-# UNFL is enabled. 
+# UNFL is enabled.
 #
 fdiv_unfl_ena:
 	fmovm.x		FP_SCR1(%a6),&0x40	# load dst op
@@ -12637,8 +12637,8 @@
 #
 # we still don't know if underflow occurred. result is ~ equal to 1. but,
 # we don't know if the result was an underflow that rounded up to a 1
-# or a normalized number that rounded down to a 1. so, redo the entire 
-# operation using RZ as the rounding mode to see what the pre-rounded 
+# or a normalized number that rounded down to a 1. so, redo the entire
+# operation using RZ as the rounding mode to see what the pre-rounded
 # result is. this case should be relatively rare.
 #
 	fmovm.x		FP_SCR1(%a6),&0x40	# load dst op into fp1
@@ -12765,8 +12765,8 @@
 	rts
 
 #
-# The destination was an INF w/ an In Range or ZERO source, the result is 
-# an INF w/ the proper sign. 
+# The destination was an INF w/ an In Range or ZERO source, the result is
+# an INF w/ the proper sign.
 # The 68881/882 returns the destination INF w/ the new sign(if the j-bit of the
 # dst INF is set, then then j-bit of the result INF is also set).
 #
@@ -12796,11 +12796,11 @@
 #	fdneg(): emulates the fdneg instruction				#
 #									#
 # XREF ****************************************************************	#
-# 	norm() - normalize a denorm to provide EXOP			#
+#	norm() - normalize a denorm to provide EXOP			#
 #	scale_to_zero_src() - scale sgl/dbl source exponent		#
 #	ovf_res() - return default overflow result			#
 #	unf_res() - return default underflow result			#
-# 	res_qnan_1op() - return QNAN result				#
+#	res_qnan_1op() - return QNAN result				#
 #	res_snan_1op() - return SNAN result				#
 #									#
 # INPUT ***************************************************************	#
@@ -12838,7 +12838,7 @@
 	mov.l		%d0,L_SCR3(%a6)		# store rnd info
 	mov.b		STAG(%a6),%d1
 	bne.w		fneg_not_norm		# optimize on non-norm input
-		
+
 #
 # NEGATE SIGN : norms and denorms ONLY!
 #
@@ -12897,7 +12897,7 @@
 	neg.w		%d0			# new exponent = -(shft val)
 	addi.w		&0x6000,%d0		# add new bias to exponent
 	mov.w		FP_SCR0_EX(%a6),%d1	# fetch old sign,exp
-	andi.w		&0x8000,%d1	 	# keep old sign
+	andi.w		&0x8000,%d1		# keep old sign
 	andi.w		&0x7fff,%d0		# clear sign position
 	or.w		%d1,%d0			# concat old sign, new exponent
 	mov.w		%d0,FP_SCR0_EX(%a6)	# insert new exponent
@@ -12976,7 +12976,7 @@
 fneg_sd_unfl:
 	bset		&unfl_bit,FPSR_EXCEPT(%a6) # set unfl exc bit
 
-	eori.b		&0x80,FP_SCR0_EX(%a6)	# negate sign	
+	eori.b		&0x80,FP_SCR0_EX(%a6)	# negate sign
 	bpl.b		fneg_sd_unfl_tst
 	bset		&neg_bit,FPSR_CC(%a6)	# set 'N' ccode bit
 
@@ -12992,10 +12992,10 @@
 	bsr.l		unf_res			# calculate default result
 	or.b		%d0,FPSR_CC(%a6)	# unf_res may have set 'Z'
 	fmovm.x		FP_SCR0(%a6),&0x80	# return default result in fp0
-	rts	
+	rts
 
 #
-# operand will underflow AND underflow is enabled. 
+# operand will underflow AND underflow is enabled.
 # therefore, we must return the result rounded to extended precision.
 #
 fneg_sd_unfl_ena:
@@ -13117,19 +13117,19 @@
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	ftst(): emulates the ftest instruction				#
+#	ftst(): emulates the ftest instruction				#
 #									#
 # XREF ****************************************************************	#
-# 	res{s,q}nan_1op() - set NAN result for monadic instruction	#
+#	res{s,q}nan_1op() - set NAN result for monadic instruction	#
 #									#
 # INPUT ***************************************************************	#
-# 	a0 = pointer to extended precision source operand		#
+#	a0 = pointer to extended precision source operand		#
 #									#
 # OUTPUT **************************************************************	#
 #	none								#
 #									#
 # ALGORITHM ***********************************************************	#
-# 	Check the source operand tag (STAG) and set the FPCR according	#
+#	Check the source operand tag (STAG) and set the FPCR according	#
 # to the operand type and sign.						#
 #									#
 #########################################################################
@@ -13138,7 +13138,7 @@
 ftst:
 	mov.b		STAG(%a6),%d1
 	bne.b		ftst_not_norm		# optimize on non-norm input
-		
+
 #
 # Norm:
 #
@@ -13186,7 +13186,7 @@
 ftst_inf_m:
 	mov.b		&inf_bmask+neg_bmask,FPSR_CC(%a6) # set 'I','N' ccode bits
 	rts
-	
+
 #
 # Zero:
 #
@@ -13215,13 +13215,13 @@
 #	fp0 = result							#
 #									#
 # ALGORITHM ***********************************************************	#
-# 	Separate according to operand type. Unnorms don't pass through 	#
-# here. For norms, load the rounding mode/prec, execute a "fint", then 	#
+#	Separate according to operand type. Unnorms don't pass through	#
+# here. For norms, load the rounding mode/prec, execute a "fint", then	#
 # store the resulting FPSR bits.					#
-# 	For denorms, force the j-bit to a one and do the same as for	#
-# norms. Denorms are so low that the answer will either be a zero or a 	#
+#	For denorms, force the j-bit to a one and do the same as for	#
+# norms. Denorms are so low that the answer will either be a zero or a	#
 # one.									#
-# 	For zeroes/infs/NANs, return the same while setting the FPSR	#
+#	For zeroes/infs/NANs, return the same while setting the FPSR	#
 # as appropriate.							#
 #									#
 #########################################################################
@@ -13230,7 +13230,7 @@
 fint:
 	mov.b		STAG(%a6),%d1
 	bne.b		fint_not_norm		# optimize on non-norm input
-		
+
 #
 # Norm:
 #
@@ -13240,7 +13240,7 @@
 	fmov.l		%d0,%fpcr		# set FPCR
 	fmov.l		&0x0,%fpsr		# clear FPSR
 
-	fint.x 		SRC(%a0),%fp0		# execute fint
+	fint.x		SRC(%a0),%fp0		# execute fint
 
 	fmov.l		&0x0,%fpcr		# clear FPCR
 	fmov.l		%fpsr,%d0		# save FPSR
@@ -13318,16 +13318,16 @@
 #	d0 = round precision/mode					#
 #									#
 # OUTPUT **************************************************************	#
-# 	fp0 = result							#
+#	fp0 = result							#
 #									#
 # ALGORITHM ***********************************************************	#
 #	Separate according to operand type. Unnorms don't pass through	#
-# here. For norms, load the rounding mode/prec, execute a "fintrz", 	#
+# here. For norms, load the rounding mode/prec, execute a "fintrz",	#
 # then store the resulting FPSR bits.					#
-# 	For denorms, force the j-bit to a one and do the same as for	#
+#	For denorms, force the j-bit to a one and do the same as for	#
 # norms. Denorms are so low that the answer will either be a zero or a	#
 # one.									#
-# 	For zeroes/infs/NANs, return the same while setting the FPSR	#
+#	For zeroes/infs/NANs, return the same while setting the FPSR	#
 # as appropriate.							#
 #									#
 #########################################################################
@@ -13336,7 +13336,7 @@
 fintrz:
 	mov.b		STAG(%a6),%d1
 	bne.b		fintrz_not_norm		# optimize on non-norm input
-		
+
 #
 # Norm:
 #
@@ -13431,17 +13431,17 @@
 #									#
 # ALGORITHM ***********************************************************	#
 #	Handle NANs, infinities, and zeroes as special cases. Divide	#
-# norms into extended, single, and double precision. 			#
-# 	Simply clear sign for extended precision norm. Ext prec denorm	#
+# norms into extended, single, and double precision.			#
+#	Simply clear sign for extended precision norm. Ext prec denorm	#
 # gets an EXOP created for it since it's an underflow.			#
 #	Double and single precision can overflow and underflow. First,	#
 # scale the operand such that the exponent is zero. Perform an "fabs"	#
-# using the correct rnd mode/prec. Check to see if the original 	#
+# using the correct rnd mode/prec. Check to see if the original		#
 # exponent would take an exception. If so, use unf_res() or ovf_res()	#
 # to calculate the default result. Also, create the EXOP for the	#
-# exceptional case. If no exception should occur, insert the correct 	#
+# exceptional case. If no exception should occur, insert the correct	#
 # result exponent and return.						#
-# 	Unnorms don't pass through here.				#
+#	Unnorms don't pass through here.				#
 #									#
 #########################################################################
 
@@ -13461,7 +13461,7 @@
 	mov.l		%d0,L_SCR3(%a6)		# store rnd info
 	mov.b		STAG(%a6),%d1
 	bne.w		fabs_not_norm		# optimize on non-norm input
-		
+
 #
 # ABSOLUTE VALUE: norms and denorms ONLY!
 #
@@ -13607,10 +13607,10 @@
 	bsr.l		unf_res			# calculate default result
 	or.b		%d0,FPSR_CC(%a6)	# set possible 'Z' ccode
 	fmovm.x		FP_SCR0(%a6),&0x80	# return default result in fp0
-	rts	
+	rts
 
 #
-# operand will underflow AND underflow is enabled. 
+# operand will underflow AND underflow is enabled.
 # therefore, we must return the result rounded to extended precision.
 #
 fabs_sd_unfl_ena:
@@ -13732,10 +13732,10 @@
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	fcmp(): fp compare op routine					#
+#	fcmp(): fp compare op routine					#
 #									#
 # XREF ****************************************************************	#
-# 	res_qnan() - return QNAN result					#
+#	res_qnan() - return QNAN result					#
 #	res_snan() - return SNAN result					#
 #									#
 # INPUT ***************************************************************	#
@@ -13747,7 +13747,7 @@
 #	None								#
 #									#
 # ALGORITHM ***********************************************************	#
-# 	Handle NANs and denorms as special cases. For everything else,	#
+#	Handle NANs and denorms as special cases. For everything else,	#
 # just use the actual fcmp instruction to produce the correct condition	#
 # codes.								#
 #									#
@@ -13760,14 +13760,14 @@
 	lsl.b		&0x3,%d1
 	or.b		STAG(%a6),%d1
 	bne.b		fcmp_not_norm		# optimize on non-norm input
-		
+
 #
 # COMPARE FP OPs : NORMs, ZEROs, INFs, and "corrected" DENORMs
 #
 fcmp_norm:
 	fmovm.x		DST(%a1),&0x80		# load dst op
 
-	fcmp.x 		%fp0,SRC(%a0)		# do compare
+	fcmp.x		%fp0,SRC(%a0)		# do compare
 
 	fmov.l		%fpsr,%d0		# save FPSR
 	rol.l		&0x8,%d0		# extract ccode bits
@@ -13788,7 +13788,7 @@
 	short		fcmp_norm	- tbl_fcmp_op # NORM - ZERO
 	short		fcmp_norm	- tbl_fcmp_op # NORM - INF
 	short		fcmp_res_qnan	- tbl_fcmp_op # NORM - QNAN
-	short		fcmp_nrm_dnrm 	- tbl_fcmp_op # NORM - DENORM
+	short		fcmp_nrm_dnrm	- tbl_fcmp_op # NORM - DENORM
 	short		fcmp_res_snan	- tbl_fcmp_op # NORM - SNAN
 	short		tbl_fcmp_op	- tbl_fcmp_op #
 	short		tbl_fcmp_op	- tbl_fcmp_op #
@@ -13850,8 +13850,8 @@
 	rts
 
 #
-# DENORMs are a little more difficult. 
-# If you have a 2 DENORMs, then you can just force the j-bit to a one 
+# DENORMs are a little more difficult.
+# If you have a 2 DENORMs, then you can just force the j-bit to a one
 # and use the fcmp_norm routine.
 # If you have a DENORM and an INF or ZERO, just force the DENORM's j-bit to a one
 # and use the fcmp_norm routine.
@@ -13892,7 +13892,7 @@
 	mov.l		SRC_LO(%a0),FP_SCR0_LO(%a6)
 	lea		FP_SCR1(%a6),%a1
 	lea		FP_SCR0(%a6),%a0
-	bra.w		fcmp_norm	
+	bra.w		fcmp_norm
 
 fcmp_nrm_dnrm:
 	mov.b		SRC_EX(%a0),%d0		# determine if like signs
@@ -13924,15 +13924,15 @@
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	fsglmul(): emulates the fsglmul instruction			#
+#	fsglmul(): emulates the fsglmul instruction			#
 #									#
 # XREF ****************************************************************	#
 #	scale_to_zero_src() - scale src exponent to zero		#
 #	scale_to_zero_dst() - scale dst exponent to zero		#
 #	unf_res4() - return default underflow result for sglop		#
 #	ovf_res() - return default overflow result			#
-# 	res_qnan() - return QNAN result					#
-# 	res_snan() - return SNAN result					#
+#	res_qnan() - return QNAN result					#
+#	res_snan() - return SNAN result					#
 #									#
 # INPUT ***************************************************************	#
 #	a0 = pointer to extended precision source operand		#
@@ -13950,7 +13950,7 @@
 # instruction won't cause an exception. Use the regular fsglmul to	#
 # compute a result. Check if the regular operands would have taken	#
 # an exception. If so, return the default overflow/underflow result	#
-# and return the EXOP if exceptions are enabled. Else, scale the 	#
+# and return the EXOP if exceptions are enabled. Else, scale the	#
 # result operand to the proper exponent.				#
 #									#
 #########################################################################
@@ -13982,11 +13982,11 @@
 
 	add.l		(%sp)+,%d0		# SCALE_FACTOR = scale1 + scale2
 
-	cmpi.l		%d0,&0x3fff-0x7ffe 	# would result ovfl?
+	cmpi.l		%d0,&0x3fff-0x7ffe	# would result ovfl?
 	beq.w		fsglmul_may_ovfl	# result may rnd to overflow
 	blt.w		fsglmul_ovfl		# result will overflow
 
-	cmpi.l		%d0,&0x3fff+0x0001 	# would result unfl?
+	cmpi.l		%d0,&0x3fff+0x0001	# would result unfl?
 	beq.w		fsglmul_may_unfl	# result may rnd to no unfl
 	bgt.w		fsglmul_unfl		# result will underflow
 
@@ -14073,7 +14073,7 @@
 	fmov.l		&0x0,%fpsr		# clear FPSR
 
 	fsglmul.x	FP_SCR0(%a6),%fp0	# execute sgl multiply
-	
+
 	fmov.l		%fpsr,%d1		# save status
 	fmov.l		&0x0,%fpcr		# clear FPCR
 
@@ -14082,7 +14082,7 @@
 	fabs.x		%fp0,%fp1		# make a copy of result
 	fcmp.b		%fp1,&0x2		# is |result| >= 2.b?
 	fbge.w		fsglmul_ovfl_tst	# yes; overflow has occurred
-	
+
 # no, it didn't overflow; we have correct result
 	bra.w		fsglmul_normal_exit
 
@@ -14116,7 +14116,7 @@
 	rts
 
 #
-# UNFL is enabled. 
+# UNFL is enabled.
 #
 fsglmul_unfl_ena:
 	fmovm.x		FP_SCR1(%a6),&0x40	# load dst op
@@ -14124,7 +14124,7 @@
 	fmov.l		L_SCR3(%a6),%fpcr	# set FPCR
 	fmov.l		&0x0,%fpsr		# clear FPSR
 
-	fsglmul.x	FP_SCR0(%a6),%fp1	# execute sgl multiply	
+	fsglmul.x	FP_SCR0(%a6),%fp1	# execute sgl multiply
 
 	fmov.l		&0x0,%fpcr		# clear FPCR
 
@@ -14149,7 +14149,7 @@
 	fmov.l		L_SCR3(%a6),%fpcr	# set FPCR
 	fmov.l		&0x0,%fpsr		# clear FPSR
 
-	fsglmul.x	FP_SCR0(%a6),%fp0	# execute sgl multiply	
+	fsglmul.x	FP_SCR0(%a6),%fp0	# execute sgl multiply
 
 	fmov.l		%fpsr,%d1		# save status
 	fmov.l		&0x0,%fpcr		# clear FPCR
@@ -14173,11 +14173,11 @@
 	mov.l		L_SCR3(%a6),%d1
 	andi.b		&0xc0,%d1		# keep rnd prec
 	ori.b		&rz_mode*0x10,%d1	# insert RZ
-	
+
 	fmov.l		%d1,%fpcr		# set FPCR
 	fmov.l		&0x0,%fpsr		# clear FPSR
 
-	fsglmul.x	FP_SCR0(%a6),%fp1	# execute sgl multiply	
+	fsglmul.x	FP_SCR0(%a6),%fp1	# execute sgl multiply
 
 	fmov.l		&0x0,%fpcr		# clear FPCR
 	fabs.x		%fp1			# make absolute value
@@ -14265,15 +14265,15 @@
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	fsgldiv(): emulates the fsgldiv instruction			#
+#	fsgldiv(): emulates the fsgldiv instruction			#
 #									#
 # XREF ****************************************************************	#
 #	scale_to_zero_src() - scale src exponent to zero		#
 #	scale_to_zero_dst() - scale dst exponent to zero		#
 #	unf_res4() - return default underflow result for sglop		#
 #	ovf_res() - return default overflow result			#
-# 	res_qnan() - return QNAN result					#
-# 	res_snan() - return SNAN result					#
+#	res_qnan() - return QNAN result					#
+#	res_snan() - return SNAN result					#
 #									#
 # INPUT ***************************************************************	#
 #	a0 = pointer to extended precision source operand		#
@@ -14291,7 +14291,7 @@
 # instruction won't cause an exception. Use the regular fsgldiv to	#
 # compute a result. Check if the regular operands would have taken	#
 # an exception. If so, return the default overflow/underflow result	#
-# and return the EXOP if exceptions are enabled. Else, scale the 	#
+# and return the EXOP if exceptions are enabled. Else, scale the	#
 # result operand to the proper exponent.				#
 #									#
 #########################################################################
@@ -14306,7 +14306,7 @@
 	or.b		STAG(%a6),%d1		# combine src tags
 
 	bne.w		fsgldiv_not_norm	# optimize on non-norm input
-		
+
 #
 # DIVIDE: NORMs and DENORMs ONLY!
 #
@@ -14333,7 +14333,7 @@
 	cmpi.l		%d0,&0x3fff-0x7ffe
 	ble.w		fsgldiv_may_ovfl
 
-	cmpi.l		%d0,&0x3fff-0x0000 	# will result underflow?
+	cmpi.l		%d0,&0x3fff-0x0000	# will result underflow?
 	beq.w		fsgldiv_may_unfl	# maybe
 	bgt.w		fsgldiv_unfl		# yes; go handle underflow
 
@@ -14393,7 +14393,7 @@
 	bne.b		fsgldiv_ovfl_ena	# yes
 
 fsgldiv_ovfl_dis:
-	btst		&neg_bit,FPSR_CC(%a6) 	# is result negative
+	btst		&neg_bit,FPSR_CC(%a6)	# is result negative
 	sne		%d1			# set sign param accordingly
 	mov.l		L_SCR3(%a6),%d0		# pass prec:rnd
 	andi.b		&0x30,%d0		# kill precision
@@ -14449,7 +14449,7 @@
 	rts
 
 #
-# UNFL is enabled. 
+# UNFL is enabled.
 #
 fsgldiv_unfl_ena:
 	fmovm.x		FP_SCR1(%a6),&0x40	# load dst op
@@ -14500,8 +14500,8 @@
 #
 # we still don't know if underflow occurred. result is ~ equal to 1. but,
 # we don't know if the result was an underflow that rounded up to a 1
-# or a normalized number that rounded down to a 1. so, redo the entire 
-# operation using RZ as the rounding mode to see what the pre-rounded 
+# or a normalized number that rounded down to a 1. so, redo the entire
+# operation using RZ as the rounding mode to see what the pre-rounded
 # result is. this case should be relatively rare.
 #
 	fmovm.x		FP_SCR1(%a6),&0x40	# load dst op into %fp1
@@ -14605,25 +14605,25 @@
 #	fdadd(): emulates the fdadd instruction				#
 #									#
 # XREF ****************************************************************	#
-# 	addsub_scaler2() - scale the operands so they won't take exc	#
+#	addsub_scaler2() - scale the operands so they won't take exc	#
 #	ovf_res() - return default overflow result			#
 #	unf_res() - return default underflow result			#
 #	res_qnan() - set QNAN result					#
-# 	res_snan() - set SNAN result					#
+#	res_snan() - set SNAN result					#
 #	res_operr() - set OPERR result					#
 #	scale_to_zero_src() - set src operand exponent equal to zero	#
 #	scale_to_zero_dst() - set dst operand exponent equal to zero	#
 #									#
 # INPUT ***************************************************************	#
 #	a0 = pointer to extended precision source operand		#
-# 	a1 = pointer to extended precision destination operand		#
+#	a1 = pointer to extended precision destination operand		#
 #									#
 # OUTPUT **************************************************************	#
 #	fp0 = result							#
 #	fp1 = EXOP (if exception occurred)				#
 #									#
 # ALGORITHM ***********************************************************	#
-# 	Handle NANs, infinities, and zeroes as special cases. Divide	#
+#	Handle NANs, infinities, and zeroes as special cases. Divide	#
 # norms into extended, single, and double precision.			#
 #	Do addition after scaling exponents such that exception won't	#
 # occur. Then, check result exponent to see if exception would have	#
@@ -14837,7 +14837,7 @@
 
 #
 # result is equal to the smallest normalized number in the selected precision
-# if the precision is extended, this result could not have come from an 
+# if the precision is extended, this result could not have come from an
 # underflow that rounded up.
 #
 fadd_may_unfl:
@@ -14859,7 +14859,7 @@
 # ok, so now the result has a exponent equal to the smallest normalized
 # exponent for the selected precision. also, the mantissa is equal to
 # 0x8000000000000000 and this mantissa is the result of rounding non-zero
-# g,r,s. 
+# g,r,s.
 # now, we must determine whether the pre-rounded result was an underflow
 # rounded "up" or a normalized number rounded "down".
 # so, we do this be re-executing the add using RZ as the rounding mode and
@@ -14970,7 +14970,7 @@
 	fmov.s		&0x00000000,%fp0	# return +ZERO
 	mov.b		&z_bmask,FPSR_CC(%a6)	# set Z
 	rts
-	
+
 #
 # the ZEROes have opposite signs:
 # - therefore, we return +ZERO if the rounding modes are RN,RZ, or RP.
@@ -15024,7 +15024,7 @@
 	eor.b		%d1,%d0
 	bmi.l		res_operr		# weed out (-INF)+(+INF)
 
-# ok, so it's not an OPERR. but, we do have to remember to return the 
+# ok, so it's not an OPERR. but, we do have to remember to return the
 # src INF since that's where the 881/882 gets the j-bit from...
 
 #
@@ -15058,25 +15058,25 @@
 #	fdsub(): emulates the fdsub instruction				#
 #									#
 # XREF ****************************************************************	#
-# 	addsub_scaler2() - scale the operands so they won't take exc	#
+#	addsub_scaler2() - scale the operands so they won't take exc	#
 #	ovf_res() - return default overflow result			#
 #	unf_res() - return default underflow result			#
 #	res_qnan() - set QNAN result					#
-# 	res_snan() - set SNAN result					#
+#	res_snan() - set SNAN result					#
 #	res_operr() - set OPERR result					#
 #	scale_to_zero_src() - set src operand exponent equal to zero	#
 #	scale_to_zero_dst() - set dst operand exponent equal to zero	#
 #									#
 # INPUT ***************************************************************	#
 #	a0 = pointer to extended precision source operand		#
-# 	a1 = pointer to extended precision destination operand		#
+#	a1 = pointer to extended precision destination operand		#
 #									#
 # OUTPUT **************************************************************	#
 #	fp0 = result							#
 #	fp1 = EXOP (if exception occurred)				#
 #									#
 # ALGORITHM ***********************************************************	#
-# 	Handle NANs, infinities, and zeroes as special cases. Divide	#
+#	Handle NANs, infinities, and zeroes as special cases. Divide	#
 # norms into extended, single, and double precision.			#
 #	Do subtraction after scaling exponents such that exception won't#
 # occur. Then, check result exponent to see if exception would have	#
@@ -15226,7 +15226,7 @@
 	add.l		&0xc,%sp
 
 	fmovm.x		FP_SCR1(%a6),&0x80	# load dst op
-	
+
 	fmov.l		&rz_mode*0x10,%fpcr	# set FPCR
 	fmov.l		&0x0,%fpsr		# clear FPSR
 
@@ -15290,7 +15290,7 @@
 
 #
 # result is equal to the smallest normalized number in the selected precision
-# if the precision is extended, this result could not have come from an 
+# if the precision is extended, this result could not have come from an
 # underflow that rounded up.
 #
 fsub_may_unfl:
@@ -15312,7 +15312,7 @@
 # ok, so now the result has a exponent equal to the smallest normalized
 # exponent for the selected precision. also, the mantissa is equal to
 # 0x8000000000000000 and this mantissa is the result of rounding non-zero
-# g,r,s. 
+# g,r,s.
 # now, we must determine whether the pre-rounded result was an underflow
 # rounded "up" or a normalized number rounded "down".
 # so, we do this be re-executing the add using RZ as the rounding mode and
@@ -15468,7 +15468,7 @@
 
 #
 # both operands are INFs. an OPERR will result if the INFs have the
-# same signs. else, 
+# same signs. else,
 #
 fsub_inf_2:
 	mov.b		SRC_EX(%a0),%d0		# exclusive or the signs
@@ -15483,7 +15483,7 @@
 	fmovm.x		SRC(%a0),&0x80		# return src INF
 	fneg.x		%fp0			# invert sign
 	fbge.w		fsub_inf_done		# sign is now positive
-	mov.b		&neg_bmask+inf_bmask,FPSR_CC(%a6) # set INF/NEG	
+	mov.b		&neg_bmask+inf_bmask,FPSR_CC(%a6) # set INF/NEG
 	rts
 
 fsub_inf_dst:
@@ -15499,7 +15499,7 @@
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	fsqrt(): emulates the fsqrt instruction				#
+#	fsqrt(): emulates the fsqrt instruction				#
 #	fssqrt(): emulates the fssqrt instruction			#
 #	fdsqrt(): emulates the fdsqrt instruction			#
 #									#
@@ -15507,8 +15507,8 @@
 #	scale_sqrt() - scale the source operand				#
 #	unf_res() - return default underflow result			#
 #	ovf_res() - return default overflow result			#
-# 	res_qnan_1op() - return QNAN result				#
-# 	res_snan_1op() - return SNAN result				#
+#	res_qnan_1op() - return QNAN result				#
+#	res_snan_1op() - return SNAN result				#
 #									#
 # INPUT ***************************************************************	#
 #	a0 = pointer to extended precision source operand		#
@@ -15525,7 +15525,7 @@
 # instruction won't cause an exception. Use the regular fsqrt to	#
 # compute a result. Check if the regular operands would have taken	#
 # an exception. If so, return the default overflow/underflow result	#
-# and return the EXOP if exceptions are enabled. Else, scale the 	#
+# and return the EXOP if exceptions are enabled. Else, scale the	#
 # result operand to the proper exponent.				#
 #									#
 #########################################################################
@@ -15547,7 +15547,7 @@
 	clr.w		%d1
 	mov.b		STAG(%a6),%d1
 	bne.w		fsqrt_not_norm		# optimize on non-norm input
-		
+
 #
 # SQUARE ROOT: norms and denorms ONLY!
 #
@@ -15669,7 +15669,7 @@
 	fmov.l		&rz_mode*0x10,%fpcr	# set FPCR
 	fmov.l		&0x0,%fpsr		# clear FPSR
 
-	fsqrt.x 	FP_SCR0(%a6),%fp0	# execute square root
+	fsqrt.x		FP_SCR0(%a6),%fp0	# execute square root
 
 	fmov.l		%fpsr,%d1		# save status
 	fmov.l		&0x0,%fpcr		# clear FPCR
@@ -15689,10 +15689,10 @@
 	bsr.l		unf_res			# calculate default result
 	or.b		%d0,FPSR_CC(%a6)	# set possible 'Z' ccode
 	fmovm.x		FP_SCR0(%a6),&0x80	# return default result in fp0
-	rts	
+	rts
 
 #
-# operand will underflow AND underflow is enabled. 
+# operand will underflow AND underflow is enabled.
 # therefore, we must return the result rounded to extended precision.
 #
 fsqrt_sd_unfl_ena:
@@ -15808,15 +15808,15 @@
 	bra.l		res_qnan_1op
 
 #
-# 	fsqrt(+0) = +0
-# 	fsqrt(-0) = -0
+#	fsqrt(+0) = +0
+#	fsqrt(-0) = -0
 #	fsqrt(+INF) = +INF
-# 	fsqrt(-INF) = OPERR
+#	fsqrt(-INF) = OPERR
 #
 fsqrt_zero:
 	tst.b		SRC_EX(%a0)		# is ZERO positive or negative?
 	bmi.b		fsqrt_zero_m		# negative
-fsqrt_zero_p:	
+fsqrt_zero_p:
 	fmov.s		&0x00000000,%fp0	# return +ZERO
 	mov.b		&z_bmask,FPSR_CC(%a6)	# set 'Z' ccode bit
 	rts
@@ -15846,14 +15846,14 @@
 # INPUT ***************************************************************	#
 #	FP_SRC(a6) = fp op1(src)					#
 #	FP_DST(a6) = fp op2(dst)					#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	FP_SRC(a6) = fp op1 scaled(src)					#
 #	FP_DST(a6) = fp op2 scaled(dst)					#
 #	d0         = scale amount					#
 #									#
 # ALGORITHM ***********************************************************	#
-# 	If the DST exponent is > the SRC exponent, set the DST exponent	#
+#	If the DST exponent is > the SRC exponent, set the DST exponent	#
 # equal to 0x3fff and scale the SRC exponent by the value that the	#
 # DST exponent was scaled by. If the SRC exponent is greater or equal,	#
 # do the opposite. Return this scale factor in d0.			#
@@ -15916,7 +15916,7 @@
 	andi.w		&0x8000,FP_SCR0_EX(%a6)	# zero src exponent
 	bset		&0x0,1+FP_SCR0_EX(%a6)	# set exp = 1
 
-	mov.l		(%sp)+,%d0		# return SCALE factor	
+	mov.l		(%sp)+,%d0		# return SCALE factor
 	rts
 
 # src exp is >= dst exp; scale src to exp = 0x3fff
@@ -15952,7 +15952,7 @@
 	andi.w		&0x8000,FP_SCR1_EX(%a6)	# zero dst exponent
 	bset		&0x0,1+FP_SCR1_EX(%a6)	# set exp = 1
 
-	mov.l		(%sp)+,%d0		# return SCALE factor	
+	mov.l		(%sp)+,%d0		# return SCALE factor
 	rts
 
 ##########################################################################
@@ -15967,14 +15967,14 @@
 #									#
 # INPUT ***************************************************************	#
 #	FP_SCR0(a6) = extended precision operand to be scaled		#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	FP_SCR0(a6) = scaled extended precision operand			#
 #	d0	    = scale value					#
 #									#
 # ALGORITHM ***********************************************************	#
-# 	Set the exponent of the input operand to 0x3fff. Save the value	#
-# of the difference between the original and new exponent. Then, 	#
+#	Set the exponent of the input operand to 0x3fff. Save the value	#
+# of the difference between the original and new exponent. Then,	#
 # normalize the operand if it was a DENORM. Add this normalization	#
 # value to the previous value. Return the result.			#
 #									#
@@ -16020,17 +16020,17 @@
 #									#
 # INPUT ***************************************************************	#
 #	FP_SCR0(a6) = extended precision operand to be scaled		#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	FP_SCR0(a6) = scaled extended precision operand			#
 #	d0	    = scale value					#
 #									#
 # ALGORITHM ***********************************************************	#
 #	If the input operand is a DENORM, normalize it.			#
-# 	If the exponent of the input operand is even, set the exponent	#
-# to 0x3ffe and return a scale factor of "(exp-0x3ffe)/2". If the 	#
+#	If the exponent of the input operand is even, set the exponent	#
+# to 0x3ffe and return a scale factor of "(exp-0x3ffe)/2". If the	#
 # exponent of the input operand is off, set the exponent to ox3fff and	#
-# return a scale factor of "(exp-0x3fff)/2". 				#
+# return a scale factor of "(exp-0x3fff)/2".				#
 #									#
 #########################################################################
 
@@ -16094,14 +16094,14 @@
 #									#
 # INPUT ***************************************************************	#
 #	FP_SCR1(a6) = extended precision operand to be scaled		#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	FP_SCR1(a6) = scaled extended precision operand			#
 #	d0	    = scale value					#
 #									#
 # ALGORITHM ***********************************************************	#
-# 	Set the exponent of the input operand to 0x3fff. Save the value	#
-# of the difference between the original and new exponent. Then, 	#
+#	Set the exponent of the input operand to 0x3fff. Save the value	#
+# of the difference between the original and new exponent. Then,	#
 # normalize the operand if it was a DENORM. Add this normalization	#
 # value to the previous value. Return the result.			#
 #									#
@@ -16149,21 +16149,21 @@
 # INPUT ***************************************************************	#
 #	FP_SRC(a6) = pointer to extended precision src operand		#
 #	FP_DST(a6) = pointer to extended precision dst operand		#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	fp0 = default result						#
 #									#
 # ALGORITHM ***********************************************************	#
-# 	If either operand (but not both operands) of an operation is a	#
+#	If either operand (but not both operands) of an operation is a	#
 # nonsignalling NAN, then that NAN is returned as the result. If both	#
-# operands are nonsignalling NANs, then the destination operand 	#
+# operands are nonsignalling NANs, then the destination operand		#
 # nonsignalling NAN is returned as the result.				#
-# 	If either operand to an operation is a signalling NAN (SNAN),	#
+#	If either operand to an operation is a signalling NAN (SNAN),	#
 # then, the SNAN bit is set in the FPSR EXC byte. If the SNAN trap	#
-# enable bit is set in the FPCR, then the trap is taken and the 	#
+# enable bit is set in the FPCR, then the trap is taken and the		#
 # destination is not modified. If the SNAN trap enable bit is not set,	#
-# then the SNAN is converted to a nonsignalling NAN (by setting the 	#
-# SNAN bit in the operand to one), and the operation continues as 	#
+# then the SNAN is converted to a nonsignalling NAN (by setting the	#
+# SNAN bit in the operand to one), and the operation continues as	#
 # described in the preceding paragraph, for nonsignalling NANs.		#
 #	Make sure the appropriate FPSR bits are set before exiting.	#
 #									#
@@ -16202,7 +16202,7 @@
 	lea		FP_DST(%a6), %a0
 	cmp.b		STAG(%a6), &SNAN
 	bne		nan_done
-	or.l		&aiop_mask+snan_mask, USER_FPSR(%a6)	
+	or.l		&aiop_mask+snan_mask, USER_FPSR(%a6)
 nan_done:
 	or.l		&nan_mask, USER_FPSR(%a6)
 nan_comp:
@@ -16215,14 +16215,14 @@
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	res_operr(): return default result during operand error		#
+#	res_operr(): return default result during operand error		#
 #									#
 # XREF ****************************************************************	#
 #	None								#
 #									#
 # INPUT ***************************************************************	#
 #	None								#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	fp0 = default operand error result				#
 #									#
@@ -16230,8 +16230,8 @@
 #	An nonsignalling NAN is returned as the default result when	#
 # an operand error occurs for the following cases:			#
 #									#
-# 	Multiply: (Infinity x Zero)					#
-# 	Divide  : (Zero / Zero) || (Infinity / Infinity)		#
+#	Multiply: (Infinity x Zero)					#
+#	Divide  : (Zero / Zero) || (Infinity / Infinity)		#
 #									#
 #########################################################################
 
@@ -16241,7 +16241,7 @@
 	fmovm.x		nan_return(%pc), &0x80
 	rts
 
-nan_return:	
+nan_return:
 	long		0x7fff0000, 0xffffffff, 0xffffffff
 
 #########################################################################
@@ -16268,7 +16268,7 @@
 # or false.								#
 #	If a BSUN exception should be indicated, the BSUN and ABSUN	#
 # bits are set in the stacked FPSR. If the BSUN exception is enabled,	#
-# the fbsun_flg is set in the SPCOND_FLG location on the stack. If an 	#
+# the fbsun_flg is set in the SPCOND_FLG location on the stack. If an	#
 # enabled BSUN should not be flagged and the predicate is true, then	#
 # Dn is fetched and decremented by one. If Dn is not equal to -1, add	#
 # the displacement value to the stacked PC so that when an "rte" is	#
@@ -16286,7 +16286,7 @@
 	ror.l		&0x8,%d1		# rotate to top byte
 	fmov.l		%d1,%fpsr		# insert into FPSR
 
-	mov.w		(tbl_fdbcc.b,%pc,%d0.w*2),%d1 # load table 
+	mov.w		(tbl_fdbcc.b,%pc,%d0.w*2),%d1 # load table
 	jmp		(tbl_fdbcc.b,%pc,%d1.w) # jump to fdbcc routine
 
 tbl_fdbcc:
@@ -16327,7 +16327,7 @@
 #									#
 # IEEE Nonaware tests							#
 #									#
-# For the IEEE nonaware tests, only the false branch changes the 	#
+# For the IEEE nonaware tests, only the false branch changes the	#
 # counter. However, the true branch may set bsun so we check to see	#
 # if the NAN bit is set, in which case BSUN and AIOP will be set.	#
 #									#
@@ -16376,7 +16376,7 @@
 	beq.w		fdbcc_false		# no;go handle counter
 	ori.l		&bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit
 	btst		&bsun_bit, FPCR_ENABLE(%a6) # is BSUN enabled?
-	bne.w		fdbcc_bsun		# yes; we have an exception	
+	bne.w		fdbcc_bsun		# yes; we have an exception
 	bra.w		fdbcc_false		# no; go handle counter
 fdbcc_gt_yes:
 	rts					# do nothing
@@ -16384,7 +16384,7 @@
 #
 # not greater than:
 #
-#	NANvZvN	
+#	NANvZvN
 #
 fdbcc_ngt:
 	fbngt.w		fdbcc_ngt_yes		# not greater than?
@@ -16395,7 +16395,7 @@
 	beq.b		fdbcc_ngt_done		# no;go finish
 	ori.l		&bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit
 	btst		&bsun_bit, FPCR_ENABLE(%a6) # is BSUN enabled?
-	bne.w		fdbcc_bsun		# yes; we have an exception	
+	bne.w		fdbcc_bsun		# yes; we have an exception
 fdbcc_ngt_done:
 	rts					# no; do nothing
 
@@ -16411,14 +16411,14 @@
 	beq.w		fdbcc_false		# no;go handle counter
 	ori.l		&bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit
 	btst		&bsun_bit, FPCR_ENABLE(%a6) # is BSUN enabled?
-	bne.w		fdbcc_bsun		# yes; we have an exception	
+	bne.w		fdbcc_bsun		# yes; we have an exception
 	bra.w		fdbcc_false		# no; go handle counter
 fdbcc_ge_yes:
 	btst		&nan_bit, FPSR_CC(%a6)	# is NAN set in cc?
 	beq.b		fdbcc_ge_yes_done	# no;go do nothing
 	ori.l		&bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit
 	btst		&bsun_bit, FPCR_ENABLE(%a6) # is BSUN enabled?
-	bne.w		fdbcc_bsun		# yes; we have an exception	
+	bne.w		fdbcc_bsun		# yes; we have an exception
 fdbcc_ge_yes_done:
 	rts					# do nothing
 
@@ -16436,7 +16436,7 @@
 	beq.b		fdbcc_nge_done		# no;go finish
 	ori.l		&bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit
 	btst		&bsun_bit, FPCR_ENABLE(%a6) # is BSUN enabled?
-	bne.w		fdbcc_bsun		# yes; we have an exception	
+	bne.w		fdbcc_bsun		# yes; we have an exception
 fdbcc_nge_done:
 	rts					# no; do nothing
 
@@ -16452,7 +16452,7 @@
 	beq.w		fdbcc_false		# no; go handle counter
 	ori.l		&bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit
 	btst		&bsun_bit, FPCR_ENABLE(%a6) # is BSUN enabled?
-	bne.w		fdbcc_bsun		# yes; we have an exception	
+	bne.w		fdbcc_bsun		# yes; we have an exception
 	bra.w		fdbcc_false		# no; go handle counter
 fdbcc_lt_yes:
 	rts					# do nothing
@@ -16471,7 +16471,7 @@
 	beq.b		fdbcc_nlt_done		# no;go finish
 	ori.l		&bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit
 	btst		&bsun_bit, FPCR_ENABLE(%a6) # is BSUN enabled?
-	bne.w		fdbcc_bsun		# yes; we have an exception	
+	bne.w		fdbcc_bsun		# yes; we have an exception
 fdbcc_nlt_done:
 	rts					# no; do nothing
 
@@ -16487,14 +16487,14 @@
 	beq.w		fdbcc_false		# no; go handle counter
 	ori.l		&bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit
 	btst		&bsun_bit, FPCR_ENABLE(%a6) # is BSUN enabled?
-	bne.w		fdbcc_bsun		# yes; we have an exception	
+	bne.w		fdbcc_bsun		# yes; we have an exception
 	bra.w		fdbcc_false		# no; go handle counter
 fdbcc_le_yes:
 	btst		&nan_bit, FPSR_CC(%a6)	# is NAN set in cc?
 	beq.b		fdbcc_le_yes_done	# no; go do nothing
 	ori.l		&bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit
 	btst		&bsun_bit, FPCR_ENABLE(%a6) # is BSUN enabled?
-	bne.w		fdbcc_bsun		# yes; we have an exception	
+	bne.w		fdbcc_bsun		# yes; we have an exception
 fdbcc_le_yes_done:
 	rts					# do nothing
 
@@ -16611,7 +16611,7 @@
 #	False
 #
 fdbcc_sf:
-	btst		&nan_bit, FPSR_CC(%a6) 	# is NAN set?
+	btst		&nan_bit, FPSR_CC(%a6)	# is NAN set?
 	beq.w		fdbcc_false		# no;go handle counter
 	ori.l		&bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit
 	btst		&bsun_bit, FPCR_ENABLE(%a6) # is BSUN enabled?
@@ -16624,7 +16624,7 @@
 #	True
 #
 fdbcc_st:
-	btst		&nan_bit, FPSR_CC(%a6) 	# is NAN set?
+	btst		&nan_bit, FPSR_CC(%a6)	# is NAN set?
 	beq.b		fdbcc_st_done		# no;go finish
 	ori.l		&bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit
 	btst		&bsun_bit, FPCR_ENABLE(%a6) # is BSUN enabled?
@@ -16640,14 +16640,14 @@
 fdbcc_seq:
 	fbseq.w		fdbcc_seq_yes		# signalling equal?
 fdbcc_seq_no:
-	btst		&nan_bit, FPSR_CC(%a6) 	# is NAN set?
+	btst		&nan_bit, FPSR_CC(%a6)	# is NAN set?
 	beq.w		fdbcc_false		# no;go handle counter
 	ori.l		&bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit
 	btst		&bsun_bit, FPCR_ENABLE(%a6) # is BSUN enabled?
 	bne.w		fdbcc_bsun		# yes; we have an exception
 	bra.w		fdbcc_false		# go handle counter
 fdbcc_seq_yes:
-	btst		&nan_bit, FPSR_CC(%a6) 	# is NAN set?
+	btst		&nan_bit, FPSR_CC(%a6)	# is NAN set?
 	beq.b		fdbcc_seq_yes_done	# no;go do nothing
 	ori.l		&bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit
 	btst		&bsun_bit, FPCR_ENABLE(%a6) # is BSUN enabled?
@@ -16663,14 +16663,14 @@
 fdbcc_sneq:
 	fbsneq.w	fdbcc_sneq_yes		# signalling not equal?
 fdbcc_sneq_no:
-	btst		&nan_bit, FPSR_CC(%a6) 	# is NAN set?
+	btst		&nan_bit, FPSR_CC(%a6)	# is NAN set?
 	beq.w		fdbcc_false		# no;go handle counter
 	ori.l		&bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit
 	btst		&bsun_bit, FPCR_ENABLE(%a6) # is BSUN enabled?
 	bne.w		fdbcc_bsun		# yes; we have an exception
 	bra.w		fdbcc_false		# go handle counter
 fdbcc_sneq_yes:
-	btst		&nan_bit, FPSR_CC(%a6) 	# set BSUN exc bit
+	btst		&nan_bit, FPSR_CC(%a6)	# set BSUN exc bit
 	beq.w		fdbcc_sneq_done		# no;go finish
 	ori.l		&bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit
 	btst		&bsun_bit, FPCR_ENABLE(%a6) # is BSUN enabled?
@@ -16684,7 +16684,7 @@
 #									#
 # For the IEEE aware tests, action is only taken if the result is false.#
 # Therefore, the opposite branch type is used to jump to the decrement	#
-# routine. 								#
+# routine.								#
 # The BSUN exception will not be set for any of these tests.		#
 #									#
 #########################################################################
@@ -16845,7 +16845,7 @@
 #	pc += sign_ext(16-bit displacement)
 #
 fdbcc_false:
-	mov.b		1+EXC_OPWORD(%a6), %d1	# fetch lo opword 
+	mov.b		1+EXC_OPWORD(%a6), %d1	# fetch lo opword
 	andi.w		&0x7, %d1		# extract count register
 
 	bsr.l		fetch_dreg		# fetch count value
@@ -16856,7 +16856,7 @@
 	bsr.l		store_dreg_l		# store new count value
 
 	cmpi.w		%d0, &-0x1		# is (Dn == -1)?
-	bne.b		fdbcc_false_cont	# no; 
+	bne.b		fdbcc_false_cont	# no;
 	rts
 
 fdbcc_false_cont:
@@ -16897,7 +16897,7 @@
 # or false.								#
 #	If a BSUN exception should be indicated, the BSUN and ABSUN	#
 # bits are set in the stacked FPSR. If the BSUN exception is enabled,	#
-# the fbsun_flg is set in the SPCOND_FLG location on the stack. If an 	#
+# the fbsun_flg is set in the SPCOND_FLG location on the stack. If an	#
 # enabled BSUN should not be flagged and the predicate is true, then	#
 # the ftrapcc_flg is set in the SPCOND_FLG location. These special	#
 # flags indicate to the calling routine to emulate the exceptional	#
@@ -16914,7 +16914,7 @@
 	ror.l		&0x8,%d1		# rotate to top byte
 	fmov.l		%d1,%fpsr		# insert into FPSR
 
-	mov.w		(tbl_ftrapcc.b,%pc,%d0.w*2), %d1 # load table 
+	mov.w		(tbl_ftrapcc.b,%pc,%d0.w*2), %d1 # load table
 	jmp		(tbl_ftrapcc.b,%pc,%d1.w) # jump to ftrapcc routine
 
 tbl_ftrapcc:
@@ -17006,7 +17006,7 @@
 #
 # not greater than:
 #
-#	NANvZvN	
+#	NANvZvN
 #
 ftrapcc_ngt:
 	fbngt.w		ftrapcc_ngt_yes		# not greater than?
@@ -17226,7 +17226,7 @@
 #	False
 #
 ftrapcc_sf:
-	btst		&nan_bit, FPSR_CC(%a6) 	# set BSUN exc bit
+	btst		&nan_bit, FPSR_CC(%a6)	# set BSUN exc bit
 	beq.b		ftrapcc_sf_done		# no; go finish
 	ori.l		&bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit
 	btst		&bsun_bit, FPCR_ENABLE(%a6) # was BSUN set?
@@ -17240,7 +17240,7 @@
 #	True
 #
 ftrapcc_st:
-	btst		&nan_bit, FPSR_CC(%a6) 	# set BSUN exc bit
+	btst		&nan_bit, FPSR_CC(%a6)	# set BSUN exc bit
 	beq.w		ftrapcc_trap		# no; go take trap
 	ori.l		&bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit
 	btst		&bsun_bit, FPCR_ENABLE(%a6) # was BSUN set?
@@ -17255,7 +17255,7 @@
 ftrapcc_seq:
 	fbseq.w		ftrapcc_seq_yes		# signalling equal?
 ftrapcc_seq_no:
-	btst		&nan_bit, FPSR_CC(%a6) 	# set BSUN exc bit
+	btst		&nan_bit, FPSR_CC(%a6)	# set BSUN exc bit
 	beq.w		ftrapcc_seq_done	# no; go finish
 	ori.l		&bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit
 	btst		&bsun_bit, FPCR_ENABLE(%a6) # was BSUN set?
@@ -17263,7 +17263,7 @@
 ftrapcc_seq_done:
 	rts					# no; do nothing
 ftrapcc_seq_yes:
-	btst		&nan_bit, FPSR_CC(%a6) 	# set BSUN exc bit
+	btst		&nan_bit, FPSR_CC(%a6)	# set BSUN exc bit
 	beq.w		ftrapcc_trap		# no; go take trap
 	ori.l		&bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit
 	btst		&bsun_bit, FPCR_ENABLE(%a6) # was BSUN set?
@@ -17278,7 +17278,7 @@
 ftrapcc_sneq:
 	fbsneq.w	ftrapcc_sneq_yes	# signalling equal?
 ftrapcc_sneq_no:
-	btst		&nan_bit, FPSR_CC(%a6) 	# set BSUN exc bit
+	btst		&nan_bit, FPSR_CC(%a6)	# set BSUN exc bit
 	beq.w		ftrapcc_sneq_no_done	# no; go finish
 	ori.l		&bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit
 	btst		&bsun_bit, FPCR_ENABLE(%a6) # was BSUN set?
@@ -17286,7 +17286,7 @@
 ftrapcc_sneq_no_done:
 	rts					# do nothing
 ftrapcc_sneq_yes:
-	btst		&nan_bit, FPSR_CC(%a6) 	# set BSUN exc bit
+	btst		&nan_bit, FPSR_CC(%a6)	# set BSUN exc bit
 	beq.w		ftrapcc_trap		# no; go take trap
 	ori.l		&bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit
 	btst		&bsun_bit, FPCR_ENABLE(%a6) # was BSUN set?
@@ -17469,7 +17469,7 @@
 # or false.								#
 #	If a BSUN exception should be indicated, the BSUN and ABSUN	#
 # bits are set in the stacked FPSR. If the BSUN exception is enabled,	#
-# the fbsun_flg is set in the SPCOND_FLG location on the stack. If an 	#
+# the fbsun_flg is set in the SPCOND_FLG location on the stack. If an	#
 # enabled BSUN should not be flagged and the predicate is true, then	#
 # the result is stored to the data register file or memory		#
 #									#
@@ -17484,8 +17484,8 @@
 	ror.l		&0x8,%d1		# rotate to top byte
 	fmov.l		%d1,%fpsr		# insert into FPSR
 
-	mov.w		(tbl_fscc.b,%pc,%d0.w*2),%d1 # load table 
-	jmp		(tbl_fscc.b,%pc,%d1.w) 	# jump to fscc routine
+	mov.w		(tbl_fscc.b,%pc,%d0.w*2),%d1 # load table
+	jmp		(tbl_fscc.b,%pc,%d1.w)	# jump to fscc routine
 
 tbl_fscc:
 	short		fscc_f		-	tbl_fscc	# 00
@@ -17585,7 +17585,7 @@
 #
 # not greater than:
 #
-#	NANvZvN	
+#	NANvZvN
 #
 fscc_ngt:
 	fbngt.w		fscc_ngt_yes		# not greater than?
@@ -17613,7 +17613,7 @@
 	ori.l		&bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit
 	bra.w		fscc_chk_bsun		# go finish
 fscc_ge_yes:
-	st		%d0			# set true	
+	st		%d0			# set true
 	btst		&nan_bit, FPSR_CC(%a6)	# is NAN set in cc?
 	beq.w		fscc_done		# no;go finish
 	ori.l		&bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit
@@ -17806,7 +17806,7 @@
 #
 fscc_sf:
 	clr.b		%d0			# set false
-	btst		&nan_bit, FPSR_CC(%a6) 	# set BSUN exc bit
+	btst		&nan_bit, FPSR_CC(%a6)	# set BSUN exc bit
 	beq.w		fscc_done		# no;go finish
 	ori.l		&bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit
 	bra.w		fscc_chk_bsun		# go finish
@@ -17818,7 +17818,7 @@
 #
 fscc_st:
 	st		%d0			# set false
-	btst		&nan_bit, FPSR_CC(%a6) 	# set BSUN exc bit
+	btst		&nan_bit, FPSR_CC(%a6)	# set BSUN exc bit
 	beq.w		fscc_done		# no;go finish
 	ori.l		&bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit
 	bra.w		fscc_chk_bsun		# go finish
@@ -17832,13 +17832,13 @@
 	fbseq.w		fscc_seq_yes		# signalling equal?
 fscc_seq_no:
 	clr.b		%d0			# set false
-	btst		&nan_bit, FPSR_CC(%a6) 	# set BSUN exc bit
+	btst		&nan_bit, FPSR_CC(%a6)	# set BSUN exc bit
 	beq.w		fscc_done		# no;go finish
 	ori.l		&bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit
 	bra.w		fscc_chk_bsun		# go finish
 fscc_seq_yes:
 	st		%d0			# set true
-	btst		&nan_bit, FPSR_CC(%a6) 	# set BSUN exc bit
+	btst		&nan_bit, FPSR_CC(%a6)	# set BSUN exc bit
 	beq.w		fscc_done		# no;go finish
 	ori.l		&bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit
 	bra.w		fscc_chk_bsun		# go finish
@@ -17852,13 +17852,13 @@
 	fbsneq.w	fscc_sneq_yes		# signalling equal?
 fscc_sneq_no:
 	clr.b		%d0			# set false
-	btst		&nan_bit, FPSR_CC(%a6) 	# set BSUN exc bit
+	btst		&nan_bit, FPSR_CC(%a6)	# set BSUN exc bit
 	beq.w		fscc_done		# no;go finish
 	ori.l		&bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit
 	bra.w		fscc_chk_bsun		# go finish
 fscc_sneq_yes:
 	st		%d0			# set true
-	btst		&nan_bit, FPSR_CC(%a6) 	# set BSUN exc bit
+	btst		&nan_bit, FPSR_CC(%a6)	# set BSUN exc bit
 	beq.w		fscc_done		# no;go finish
 	ori.l		&bsun_mask+aiop_mask, USER_FPSR(%a6) # set BSUN exc bit
 	bra.w		fscc_chk_bsun		# go finish
@@ -18044,7 +18044,7 @@
 #######################################################################
 
 #
-# the bsun exception bit was set. now, check to see is BSUN 
+# the bsun exception bit was set. now, check to see is BSUN
 # is enabled. if so, don't store result and correct stack frame
 # for a bsun exception.
 #
@@ -18061,7 +18061,7 @@
 fscc_done:
 	mov.l		%d0,%a0			# save result for a moment
 
-	mov.b		1+EXC_OPWORD(%a6),%d1	# fetch lo opword 
+	mov.b		1+EXC_OPWORD(%a6),%d1	# fetch lo opword
 	mov.l		%d1,%d0			# make a copy
 	andi.b		&0x38,%d1		# extract src mode
 
@@ -18075,7 +18075,7 @@
 
 #
 # the stacked <ea> is correct with the exception of:
-# 	-> Dn : <ea> is garbage
+#	-> Dn : <ea> is garbage
 #
 # if the addressing mode is post-increment or pre-decrement,
 # then the address registers have not been updated.
@@ -18088,7 +18088,7 @@
 
 	mov.l		%a0,%d0			# pass result in d0
 	mov.l		EXC_EA(%a6),%a0		# fetch <ea>
-	bsr.l		_dmem_write_byte	# write result byte	
+	bsr.l		_dmem_write_byte	# write result byte
 
 	tst.l		%d1			# did dstore fail?
 	bne.w		fscc_err		# yes
@@ -18159,7 +18159,7 @@
 #									#
 # INPUT ***************************************************************	#
 #	None								#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	If instr is "fmovm Dn,-(A7)" from supervisor mode,		#
 #		d0 = size of dump					#
@@ -18181,25 +18181,25 @@
 #	The data register is determined and its value loaded to get the	#
 # string of FP registers affected. This value is used as an index into	#
 # a lookup table such that we can determine the number of bytes		#
-# involved. 								#
+# involved.								#
 #	If the instruction is "fmovm.x <ea>,Dn", a _mem_read() is used	#
 # to read in all FP values. Again, _mem_read() may fail and require a	#
-# special exit. 							#
+# special exit.								#
 #	If the instruction is "fmovm.x DN,<ea>", a _mem_write() is used	#
 # to write all FP values. _mem_write() may also fail.			#
-# 	If the instruction is "fmovm.x DN,-(a7)" from supervisor mode,	#
+#	If the instruction is "fmovm.x DN,-(a7)" from supervisor mode,	#
 # then we return the size of the dump and the string to the caller	#
 # so that the move can occur outside of this routine. This special	#
 # case is required so that moves to the system stack are handled	#
 # correctly.								#
 #									#
 # DYNAMIC:								#
-# 	fmovm.x	dn, <ea>						#
-# 	fmovm.x	<ea>, dn						#
+#	fmovm.x	dn, <ea>						#
+#	fmovm.x	<ea>, dn						#
 #									#
 #	      <WORD 1>		      <WORD2>				#
 #	1111 0010 00 |<ea>|	11@& 1000 0$$$ 0000			#
-#					  				#
+#									#
 #	& = (0): predecrement addressing mode				#
 #	    (1): postincrement or control addressing mode		#
 #	@ = (0): move listed regs from memory to the FPU		#
@@ -18468,12 +18468,12 @@
 	byte	0x24,0x30,0x30,0x3c,0x30,0x3c,0x3c,0x48
 	byte	0x30,0x3c,0x3c,0x48,0x3c,0x48,0x48,0x54
 	byte	0x30,0x3c,0x3c,0x48,0x3c,0x48,0x48,0x54
-	byte	0x3c,0x48,0x48,0x54,0x48,0x54,0x54,0x60	
+	byte	0x3c,0x48,0x48,0x54,0x48,0x54,0x54,0x60
 
 #
 # table to convert a pre-decrement bit string into a post-increment
 # or control bit string.
-# ex: 	0x00	==>	0x00
+# ex:	0x00	==>	0x00
 #	0x01	==>	0x80
 #	0x02	==>	0x40
 #		.
@@ -18555,59 +18555,59 @@
 	short		tbl_fea_mode	-	tbl_fea_mode
 	short		tbl_fea_mode	-	tbl_fea_mode
 
-	short		faddr_ind_a0	- 	tbl_fea_mode
-	short		faddr_ind_a1	- 	tbl_fea_mode
-	short		faddr_ind_a2	- 	tbl_fea_mode
-	short		faddr_ind_a3 	- 	tbl_fea_mode
-	short		faddr_ind_a4 	- 	tbl_fea_mode
-	short		faddr_ind_a5 	- 	tbl_fea_mode
-	short		faddr_ind_a6 	- 	tbl_fea_mode
-	short		faddr_ind_a7 	- 	tbl_fea_mode
-
-	short		faddr_ind_p_a0	- 	tbl_fea_mode
-	short		faddr_ind_p_a1 	- 	tbl_fea_mode
-	short		faddr_ind_p_a2 	- 	tbl_fea_mode
-	short		faddr_ind_p_a3 	- 	tbl_fea_mode
-	short		faddr_ind_p_a4 	- 	tbl_fea_mode
-	short		faddr_ind_p_a5 	- 	tbl_fea_mode
-	short		faddr_ind_p_a6 	- 	tbl_fea_mode
-	short		faddr_ind_p_a7 	- 	tbl_fea_mode
-
-	short		faddr_ind_m_a0 	- 	tbl_fea_mode
-	short		faddr_ind_m_a1 	- 	tbl_fea_mode
-	short		faddr_ind_m_a2 	- 	tbl_fea_mode
-	short		faddr_ind_m_a3 	- 	tbl_fea_mode
-	short		faddr_ind_m_a4 	- 	tbl_fea_mode
-	short		faddr_ind_m_a5 	- 	tbl_fea_mode
-	short		faddr_ind_m_a6 	- 	tbl_fea_mode
-	short		faddr_ind_m_a7 	- 	tbl_fea_mode
-
-	short		faddr_ind_disp_a0	- 	tbl_fea_mode
-	short		faddr_ind_disp_a1 	- 	tbl_fea_mode
-	short		faddr_ind_disp_a2 	- 	tbl_fea_mode
-	short		faddr_ind_disp_a3 	- 	tbl_fea_mode
-	short		faddr_ind_disp_a4 	- 	tbl_fea_mode
-	short		faddr_ind_disp_a5 	- 	tbl_fea_mode
-	short		faddr_ind_disp_a6 	- 	tbl_fea_mode
+	short		faddr_ind_a0	-	tbl_fea_mode
+	short		faddr_ind_a1	-	tbl_fea_mode
+	short		faddr_ind_a2	-	tbl_fea_mode
+	short		faddr_ind_a3	-	tbl_fea_mode
+	short		faddr_ind_a4	-	tbl_fea_mode
+	short		faddr_ind_a5	-	tbl_fea_mode
+	short		faddr_ind_a6	-	tbl_fea_mode
+	short		faddr_ind_a7	-	tbl_fea_mode
+
+	short		faddr_ind_p_a0	-	tbl_fea_mode
+	short		faddr_ind_p_a1	-	tbl_fea_mode
+	short		faddr_ind_p_a2	-	tbl_fea_mode
+	short		faddr_ind_p_a3	-	tbl_fea_mode
+	short		faddr_ind_p_a4	-	tbl_fea_mode
+	short		faddr_ind_p_a5	-	tbl_fea_mode
+	short		faddr_ind_p_a6	-	tbl_fea_mode
+	short		faddr_ind_p_a7	-	tbl_fea_mode
+
+	short		faddr_ind_m_a0	-	tbl_fea_mode
+	short		faddr_ind_m_a1	-	tbl_fea_mode
+	short		faddr_ind_m_a2	-	tbl_fea_mode
+	short		faddr_ind_m_a3	-	tbl_fea_mode
+	short		faddr_ind_m_a4	-	tbl_fea_mode
+	short		faddr_ind_m_a5	-	tbl_fea_mode
+	short		faddr_ind_m_a6	-	tbl_fea_mode
+	short		faddr_ind_m_a7	-	tbl_fea_mode
+
+	short		faddr_ind_disp_a0	-	tbl_fea_mode
+	short		faddr_ind_disp_a1	-	tbl_fea_mode
+	short		faddr_ind_disp_a2	-	tbl_fea_mode
+	short		faddr_ind_disp_a3	-	tbl_fea_mode
+	short		faddr_ind_disp_a4	-	tbl_fea_mode
+	short		faddr_ind_disp_a5	-	tbl_fea_mode
+	short		faddr_ind_disp_a6	-	tbl_fea_mode
 	short		faddr_ind_disp_a7	-	tbl_fea_mode
 
-	short		faddr_ind_ext 	- 	tbl_fea_mode
-	short		faddr_ind_ext 	- 	tbl_fea_mode
-	short		faddr_ind_ext 	- 	tbl_fea_mode
-	short		faddr_ind_ext 	- 	tbl_fea_mode
-	short		faddr_ind_ext 	- 	tbl_fea_mode
-	short		faddr_ind_ext 	- 	tbl_fea_mode
-	short		faddr_ind_ext 	- 	tbl_fea_mode
-	short		faddr_ind_ext 	- 	tbl_fea_mode
-
-	short		fabs_short	- 	tbl_fea_mode
-	short		fabs_long	- 	tbl_fea_mode
-	short		fpc_ind		- 	tbl_fea_mode
-	short		fpc_ind_ext	- 	tbl_fea_mode
-	short		tbl_fea_mode	- 	tbl_fea_mode
-	short		tbl_fea_mode	- 	tbl_fea_mode
-	short		tbl_fea_mode	- 	tbl_fea_mode
-	short		tbl_fea_mode	- 	tbl_fea_mode
+	short		faddr_ind_ext	-	tbl_fea_mode
+	short		faddr_ind_ext	-	tbl_fea_mode
+	short		faddr_ind_ext	-	tbl_fea_mode
+	short		faddr_ind_ext	-	tbl_fea_mode
+	short		faddr_ind_ext	-	tbl_fea_mode
+	short		faddr_ind_ext	-	tbl_fea_mode
+	short		faddr_ind_ext	-	tbl_fea_mode
+	short		faddr_ind_ext	-	tbl_fea_mode
+
+	short		fabs_short	-	tbl_fea_mode
+	short		fabs_long	-	tbl_fea_mode
+	short		fpc_ind		-	tbl_fea_mode
+	short		fpc_ind_ext	-	tbl_fea_mode
+	short		tbl_fea_mode	-	tbl_fea_mode
+	short		tbl_fea_mode	-	tbl_fea_mode
+	short		tbl_fea_mode	-	tbl_fea_mode
+	short		tbl_fea_mode	-	tbl_fea_mode
 
 ###################################
 # Address register indirect: (An) #
@@ -18903,7 +18903,7 @@
 
 	btst		&0x8,%d0
 	bne.w		fcalc_mem_ind
-	
+
 	mov.l		%d0,L_SCR1(%a6)		# hold opword
 
 	mov.l		%d0,%d1
@@ -18999,7 +18999,7 @@
 
 	btst		&0x8,%d0		# is disp only 8 bits?
 	bne.w		fcalc_mem_ind		# calc memory indirect
-	
+
 	mov.l		%d0,L_SCR1(%a6)		# store opword
 
 	mov.l		%d0,%d1			# make extword copy
@@ -19076,7 +19076,7 @@
 	bfextu		%d5{&26:&2},%d0		# get bd size
 #	beq.l		fmovm_error		# if (size == 0) it's reserved
 
-	cmpi.b	 	%d0,&0x2
+	cmpi.b		%d0,&0x2
 	blt.b		fno_bd
 	beq.b		fget_word_bd
 
@@ -19098,7 +19098,7 @@
 	bne.l		fcea_iacc		# yes
 
 	ext.l		%d0			# sign extend bd
-	
+
 fchk_ind:
 	add.l		%d0,%d3			# base += bd
 
@@ -19107,10 +19107,10 @@
 	bfextu		%d5{&30:&2},%d0		# is od suppressed?
 	beq.w		faii_bd
 
-	cmpi.b	 	%d0,&0x2
+	cmpi.b		%d0,&0x2
 	blt.b		fnull_od
 	beq.b		fword_od
-	
+
 	mov.l		EXC_EXTWPTR(%a6),%a0	# fetch instruction addr
 	addq.l		&0x4,EXC_EXTWPTR(%a6)	# incr instruction ptr
 	bsr.l		_imem_read_long
@@ -19118,7 +19118,7 @@
 	tst.l		%d1			# did ifetch fail?
 	bne.l		fcea_iacc		# yes
 
-	bra.b 		fadd_them
+	bra.b		fadd_them
 
 fword_od:
 	mov.l		EXC_EXTWPTR(%a6),%a0	# fetch instruction addr
@@ -19171,7 +19171,7 @@
 	rts
 
 #########################################################
-fcea_err:	
+fcea_err:
 	mov.l		%d3,%a0
 
 	movm.l		(%sp)+,&0x003c		# restore d2-d5
@@ -19181,7 +19181,7 @@
 fcea_iacc:
 	movm.l		(%sp)+,&0x003c		# restore d2-d5
 	bra.l		iea_iacc
-	
+
 fmovm_out_err:
 	bsr.l		restore
 	mov.w		&0x00e1,%d0
@@ -19197,7 +19197,7 @@
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	fmovm_ctrl(): emulate fmovm.l of control registers instr	#
+#	fmovm_ctrl(): emulate fmovm.l of control registers instr	#
 #									#
 # XREF ****************************************************************	#
 #	_imem_read_long() - read longword from memory			#
@@ -19205,7 +19205,7 @@
 #									#
 # INPUT ***************************************************************	#
 #	None								#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	If _imem_read_long() doesn't fail:				#
 #		USER_FPCR(a6)  = new FPCR value				#
@@ -19213,14 +19213,14 @@
 #		USER_FPIAR(a6) = new FPIAR value			#
 #									#
 # ALGORITHM ***********************************************************	#
-# 	Decode the instruction type by looking at the extension word 	#
+#	Decode the instruction type by looking at the extension word	#
 # in order to see how many control registers to fetch from memory.	#
 # Fetch them using _imem_read_long(). If this fetch fails, exit through	#
 # the special access error exit handler iea_iacc().			#
 #									#
 # Instruction word decoding:						#
 #									#
-# 	fmovem.l #<data>, {FPIAR&|FPCR&|FPSR}				#
+#	fmovem.l #<data>, {FPIAR&|FPCR&|FPSR}				#
 #									#
 #		WORD1			WORD2				#
 #	1111 0010 00 111100	100$ $$00 0000 0000			#
@@ -19241,7 +19241,7 @@
 	beq.w		fctrl_in_6		# yes
 	cmpi.b		%d0,&0x94		# fpcr & fpiar ?
 	beq.b		fctrl_in_5		# yes
-	
+
 # fmovem.l #<data>, fpsr/fpiar
 fctrl_in_3:
 	mov.l		EXC_EXTWPTR(%a6),%a0	# fetch instruction addr
@@ -19340,21 +19340,21 @@
 #									#
 # INPUT ***************************************************************	#
 #	d0 = number of bytes to adjust <ea> by				#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	None								#
 #									#
 # ALGORITHM ***********************************************************	#
 # "Dummy" CALCulate Effective Address:					#
-# 	The stacked <ea> for FP unimplemented instructions and opclass	#
+#	The stacked <ea> for FP unimplemented instructions and opclass	#
 #	two packed instructions is correct with the exception of...	#
 #									#
 #	1) -(An)   : The register is not updated regardless of size.	#
-#		     Also, for extended precision and packed, the 	#
+#		     Also, for extended precision and packed, the	#
 #		     stacked <ea> value is 8 bytes too big		#
 #	2) (An)+   : The register is not updated.			#
-#	3) #<data> : The upper longword of the immediate operand is 	#
-#		     stacked b,w,l and s sizes are completely stacked. 	#
+#	3) #<data> : The upper longword of the immediate operand is	#
+#		     stacked b,w,l and s sizes are completely stacked.	#
 #		     d,x, and p are not.				#
 #									#
 #########################################################################
@@ -19390,8 +19390,8 @@
 	lea		([USER_FPIAR,%a6],0x4),%a0 # no; return <ea>
 	rts
 
-# here, the <ea> is stacked correctly. however, we must update the 
-# address register...	
+# here, the <ea> is stacked correctly. however, we must update the
+# address register...
 dcea_pi:
 	mov.l		%a0,%d0			# pass amt to inc by
 	bsr.l		inc_areg		# inc addr register
@@ -19399,7 +19399,7 @@
 	mov.l		EXC_EA(%a6),%a0		# stacked <ea> is correct
 	rts
 
-# the <ea> is stacked correctly for all but extended and packed which 
+# the <ea> is stacked correctly for all but extended and packed which
 # the <ea>s are 8 bytes too large.
 # it would make no sense to have a pre-decrement to a7 in supervisor
 # mode so we don't even worry about this tricky case here : )
@@ -19419,7 +19419,7 @@
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	_calc_ea_fout(): calculate correct stacked <ea> for extended	#
+#	_calc_ea_fout(): calculate correct stacked <ea> for extended	#
 #			 and packed data opclass 3 operations.		#
 #									#
 # XREF ****************************************************************	#
@@ -19427,22 +19427,22 @@
 #									#
 # INPUT ***************************************************************	#
 #	None								#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	a0 = return correct effective address				#
 #									#
 # ALGORITHM ***********************************************************	#
 #	For opclass 3 extended and packed data operations, the <ea>	#
 # stacked for the exception is incorrect for -(an) and (an)+ addressing	#
-# modes. Also, while we're at it, the index register itself must get 	#
+# modes. Also, while we're at it, the index register itself must get	#
 # updated.								#
-# 	So, for -(an), we must subtract 8 off of the stacked <ea> value	#
+#	So, for -(an), we must subtract 8 off of the stacked <ea> value	#
 # and return that value as the correct <ea> and store that value in An.	#
 # For (an)+, the stacked <ea> is correct but we must adjust An by +12.	#
 #									#
 #########################################################################
 
-# This calc_ea is currently used to retrieve the correct <ea> 
+# This calc_ea is currently used to retrieve the correct <ea>
 # for fmove outs of type extended and packed.
 	global		_calc_ea_fout
 _calc_ea_fout:
@@ -19463,7 +19463,7 @@
 
 # (An)+ : extended and packed fmove out
 #	: stacked <ea> is correct
-#	: "An" not updated 
+#	: "An" not updated
 ceaf_pi:
 	mov.w		(tbl_ceaf_pi.b,%pc,%d1.w*2),%d1
 	mov.l		EXC_EA(%a6),%a0
@@ -19574,31 +19574,31 @@
 #									#
 # INPUT ***************************************************************	#
 #	None								#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	If memory access doesn't fail:					#
 #		FP_SRC(a6) = source operand in extended precision	#
-# 		FP_DST(a6) = destination operand in extended precision	#
+#		FP_DST(a6) = destination operand in extended precision	#
 #									#
 # ALGORITHM ***********************************************************	#
-# 	This is called from the Unimplemented FP exception handler in	#
+#	This is called from the Unimplemented FP exception handler in	#
 # order to load the source and maybe destination operand into		#
 # FP_SRC(a6) and FP_DST(a6). If the instruction was opclass zero, load	#
 # the source and destination from the FP register file. Set the optype	#
 # tags for both if dyadic, one for monadic. If a number is an UNNORM,	#
 # convert it to a DENORM or a ZERO.					#
-# 	If the instruction is opclass two (memory->reg), then fetch	#
-# the destination from the register file and the source operand from 	#
+#	If the instruction is opclass two (memory->reg), then fetch	#
+# the destination from the register file and the source operand from	#
 # memory. Tag and fix both as above w/ opclass zero instructions.	#
-# 	If the source operand is byte,word,long, or single, it may be	#
+#	If the source operand is byte,word,long, or single, it may be	#
 # in the data register file. If it's actually out in memory, use one of	#
 # the mem_read() routines to fetch it. If the mem_read() access returns	#
 # a failing value, exit through the special facc_in() routine which	#
 # will create an access error exception frame from the current exception #
 # frame.								#
-# 	Immediate data and regular data accesses are separated because 	#
+#	Immediate data and regular data accesses are separated because	#
 # if an immediate data access fails, the resulting fault status		#
-# longword stacked for the access error exception must have the 	#
+# longword stacked for the access error exception must have the		#
 # instruction bit set.							#
 #									#
 #########################################################################
@@ -19644,7 +19644,7 @@
 	cmpi.b		%d0, &UNNORM		# is dst fpreg an UNNORM?
 	beq.b		op000_dst_unnorm	# yes
 op000_dst_cont:
-	mov.b 		%d0, DTAG(%a6)		# store the dst optype tag
+	mov.b		%d0, DTAG(%a6)		# store the dst optype tag
 
 op000_src:
 	bfextu		EXC_CMDREG(%a6){&3:&3}, %d0 # extract src field
@@ -19709,7 +19709,7 @@
 	swbeg		&0x8
 tbl_op010_dreg:
 	short		opd_long	- tbl_op010_dreg
-	short		opd_sgl 	- tbl_op010_dreg
+	short		opd_sgl		- tbl_op010_dreg
 	short		tbl_op010_dreg	- tbl_op010_dreg
 	short		tbl_op010_dreg	- tbl_op010_dreg
 	short		opd_word	- tbl_op010_dreg
@@ -19722,7 +19722,7 @@
 #
 opd_long:
 	bsr.l		fetch_dreg		# fetch long in d0
-	fmov.l		%d0, %fp0 		# load a long
+	fmov.l		%d0, %fp0		# load a long
 	fmovm.x		&0x80, FP_SRC(%a6)	# return src op in FP_SRC
 	fbeq.w		opd_long_zero		# long is a ZERO
 	rts
@@ -19735,7 +19735,7 @@
 #
 opd_word:
 	bsr.l		fetch_dreg		# fetch word in d0
-	fmov.w		%d0, %fp0 		# load a word
+	fmov.w		%d0, %fp0		# load a word
 	fmovm.x		&0x80, FP_SRC(%a6)	# return src op in FP_SRC
 	fbeq.w		opd_word_zero		# WORD is a ZERO
 	rts
@@ -19748,7 +19748,7 @@
 #
 opd_byte:
 	bsr.l		fetch_dreg		# fetch word in d0
-	fmov.b		%d0, %fp0 		# load a byte
+	fmov.b		%d0, %fp0		# load a byte
 	fmovm.x		&0x80, FP_SRC(%a6)	# return src op in FP_SRC
 	fbeq.w		opd_byte_zero		# byte is a ZERO
 	rts
@@ -19766,7 +19766,7 @@
 	bsr.l		fetch_dreg		# fetch sgl in d0
 	mov.l		%d0,L_SCR1(%a6)
 
-	lea		L_SCR1(%a6), %a0 	# pass: ptr to the sgl
+	lea		L_SCR1(%a6), %a0	# pass: ptr to the sgl
 	bsr.l		set_tag_s		# determine sgl type
 	mov.b		%d0, STAG(%a6)		# save the src tag
 
@@ -19813,7 +19813,7 @@
 
 #########################################
 # load a LONG into %fp0:		#
-# 	-number can't fault		#
+#	-number can't fault		#
 #	(1) calc ea			#
 #	(2) read 4 bytes into L_SCR1	#
 #	(3) fmov.l into %fp0		#
@@ -19849,7 +19849,7 @@
 
 #########################################
 # load a WORD into %fp0:		#
-# 	-number can't fault		#
+#	-number can't fault		#
 #	(1) calc ea			#
 #	(2) read 2 bytes into L_SCR1	#
 #	(3) fmov.w into %fp0		#
@@ -19885,7 +19885,7 @@
 
 #########################################
 # load a BYTE into %fp0:		#
-# 	-number can't fault		#
+#	-number can't fault		#
 #	(1) calc ea			#
 #	(2) read 1 byte into L_SCR1	#
 #	(3) fmov.b into %fp0		#
@@ -19921,7 +19921,7 @@
 
 #########################################
 # load a SGL into %fp0:			#
-# 	-number can't fault		#
+#	-number can't fault		#
 #	(1) calc ea			#
 #	(2) read 4 bytes into L_SCR1	#
 #	(3) fmov.s into %fp0		#
@@ -19961,7 +19961,7 @@
 	bne.l		funimp_iacc		# yes
 	bra.b		load_sgl_cont
 
-# must convert sgl denorm format to an Xprec denorm fmt suitable for 
+# must convert sgl denorm format to an Xprec denorm fmt suitable for
 # normalization...
 # %a0 : points to sgl denorm
 get_sgl_denorm:
@@ -20003,7 +20003,7 @@
 
 #########################################
 # load a DBL into %fp0:			#
-# 	-number can't fault		#
+#	-number can't fault		#
 #	(1) calc ea			#
 #	(2) read 8 bytes into L_SCR(1,2)#
 #	(3) fmov.d into %fp0		#
@@ -20046,7 +20046,7 @@
 	bne.l		funimp_iacc		# yes
 	bra.b		load_dbl_cont
 
-# must convert dbl denorm format to an Xprec denorm fmt suitable for 
+# must convert dbl denorm format to an Xprec denorm fmt suitable for
 # normalization...
 # %a0 : loc. of dbl denorm
 get_dbl_denorm:
@@ -20092,7 +20092,7 @@
 
 #################################################
 # load a Xprec into %fp0:			#
-# 	-number can't fault			#
+#	-number can't fault			#
 #	(1) calc ea				#
 #	(2) read 12 bytes into L_SCR(1,2)	#
 #	(3) fmov.x into %fp0			#
@@ -20124,7 +20124,7 @@
 
 #################################################
 # load a packed into %fp0:			#
-# 	-number can't fault			#
+#	-number can't fault			#
 #	(1) calc ea				#
 #	(2) read 12 bytes into L_SCR(1,2,3)	#
 #	(3) fmov.x into %fp0			#
@@ -20143,11 +20143,11 @@
 load_packed_unnorm:
 	bsr.l		unnorm_fix		# fix the UNNORM ZERO
 	mov.b		%d0,STAG(%a6)		# store the src optype tag
-	rts	
+	rts
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	fout(): move from fp register to memory or data register	#
+#	fout(): move from fp register to memory or data register	#
 #									#
 # XREF ****************************************************************	#
 #	_round() - needed to create EXOP for sgl/dbl precision		#
@@ -20167,7 +20167,7 @@
 # INPUT ***************************************************************	#
 #	a0 = pointer to extended precision source operand		#
 #	d0 = round prec,mode						#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	fp0 : intermediate underflow or overflow result if		#
 #	      OVFL/UNFL occurred for a sgl or dbl operand		#
@@ -20186,9 +20186,9 @@
 # w/ the address index register as appropriate w/ _calc_ea_fout(). If	#
 # the source is a denorm and if underflow is enabled, an EXOP must be	#
 # created.								#
-# 	For packed, the k-factor must be fetched from the instruction	#
-# word or a data register. The <ea> must be fixed as w/ extended 	#
-# precision. Then, bindec() is called to create the appropriate 	#
+#	For packed, the k-factor must be fetched from the instruction	#
+# word or a data register. The <ea> must be fixed as w/ extended	#
+# precision. Then, bindec() is called to create the appropriate		#
 # packed result.							#
 #	If at any time an access error is flagged by one of the move-	#
 # to-memory routines, then a special exit must be made so that the	#
@@ -20304,7 +20304,7 @@
 	ori.l		&0x00800000,%d1		# make smallest sgl
 	fmov.s		%d1,%fp0
 	bra.b		fout_word_norm
-	
+
 #################################################################
 # fmove.l out ###################################################
 #################################################################
@@ -20378,7 +20378,7 @@
 	mov.l		&0xc,%d0		# pass: opsize is 12 bytes
 
 # we must not yet write the extended precision data to the stack
-# in the pre-decrement case from supervisor mode or else we'll corrupt 
+# in the pre-decrement case from supervisor mode or else we'll corrupt
 # the stack frame. so, leave it in FP_SRC for now and deal with it later...
 	cmpi.b		SPCOND_FLG(%a6),&mda7_flg
 	beq.b		fout_ext_a7
@@ -20465,7 +20465,7 @@
 	fmov.l		&0x0,%fpcr		# clear FPCR
 	fmov.l		%fpsr,%d1		# save FPSR
 
-	or.w		%d1,2+USER_FPSR(%a6) 	# set possible inex2/ainex
+	or.w		%d1,2+USER_FPSR(%a6)	# set possible inex2/ainex
 
 fout_sgl_exg_write:
 	mov.b		1+EXC_OPWORD(%a6),%d1	# extract dst mode
@@ -20506,7 +20506,7 @@
 
 	lea		FP_SCR0(%a6),%a0
 	bsr.l		norm			# normalize the DENORM
-	
+
 fout_sgl_unfl_cont:
 	lea		FP_SCR0(%a6),%a0	# pass: ptr to operand
 	mov.l		L_SCR3(%a6),%d1		# pass: rnd prec,mode
@@ -20557,7 +20557,7 @@
 
 # call ovf_res() w/ sgl prec and the correct rnd mode to create the default
 # overflow result. DON'T save the returned ccodes from ovf_res() since
-# fmove out doesn't alter them. 
+# fmove out doesn't alter them.
 	tst.b		SRC_EX(%a0)		# is operand negative?
 	smi		%d1			# set if so
 	mov.l		L_SCR3(%a6),%d0		# pass: sgl prec,rnd mode
@@ -20612,7 +20612,7 @@
 
 	fabs.x		%fp0			# need absolute value
 	fcmp.b		%fp0,&0x2		# did exponent increase?
-	fblt.w		fout_sgl_exg		# no; go finish NORM	
+	fblt.w		fout_sgl_exg		# no; go finish NORM
 	bra.w		fout_sgl_ovfl		# yes; go handle overflow
 
 ################
@@ -20703,7 +20703,7 @@
 	fmov.l		&0x0,%fpcr		# clear FPCR
 	fmov.l		%fpsr,%d0		# save FPSR
 
-	or.w		%d0,2+USER_FPSR(%a6) 	# set possible inex2/ainex
+	or.w		%d0,2+USER_FPSR(%a6)	# set possible inex2/ainex
 
 	mov.l		EXC_EA(%a6),%a1		# pass: dst addr
 	lea		L_SCR1(%a6),%a0		# pass: src addr
@@ -20713,7 +20713,7 @@
 	tst.l		%d1			# did dstore fail?
 	bne.l		facc_out_d		# yes
 
-	rts					# no; so we're finished	
+	rts					# no; so we're finished
 
 #
 # here, we know that the operand would UNFL if moved out to double prec,
@@ -20735,7 +20735,7 @@
 
 	lea		FP_SCR0(%a6),%a0
 	bsr.l		norm			# normalize the DENORM
-	
+
 fout_dbl_unfl_cont:
 	lea		FP_SCR0(%a6),%a0	# pass: ptr to operand
 	mov.l		L_SCR3(%a6),%d1		# pass: rnd prec,mode
@@ -20778,7 +20778,7 @@
 
 # call ovf_res() w/ dbl prec and the correct rnd mode to create the default
 # overflow result. DON'T save the returned ccodes from ovf_res() since
-# fmove out doesn't alter them. 
+# fmove out doesn't alter them.
 	tst.b		SRC_EX(%a0)		# is operand negative?
 	smi		%d1			# set if so
 	mov.l		L_SCR3(%a6),%d0		# pass: dbl prec,rnd mode
@@ -20823,19 +20823,19 @@
 
 	fabs.x		%fp0			# need absolute value
 	fcmp.b		%fp0,&0x2		# did exponent increase?
-	fblt.w		fout_dbl_exg		# no; go finish NORM	
+	fblt.w		fout_dbl_exg		# no; go finish NORM
 	bra.w		fout_dbl_ovfl		# yes; go handle overflow
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	dst_dbl(): create double precision value from extended prec.	#
+#	dst_dbl(): create double precision value from extended prec.	#
 #									#
 # XREF ****************************************************************	#
 #	None								#
 #									#
 # INPUT ***************************************************************	#
 #	a0 = pointer to source operand in extended precision		#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	d0 = hi(double precision result)				#
 #	d1 = lo(double precision result)				#
@@ -20849,18 +20849,18 @@
 #	get rid of ext integer bit					#
 #	dbl_mant = ext_mant{62:12}					#
 #									#
-#	    	---------------   ---------------    ---------------	#
+#		---------------   ---------------    ---------------	#
 #  extended ->  |s|    exp    |   |1| ms mant   |    | ls mant     |	#
-#	    	---------------   ---------------    ---------------	#
-#	   	 95	    64    63 62	      32      31     11	  0	#
+#		---------------   ---------------    ---------------	#
+#		 95	    64    63 62	      32      31     11	  0	#
 #				     |			     |		#
 #				     |			     |		#
 #				     |			     |		#
-#		 	             v   		     v		#
-#	    		      ---------------   ---------------		#
-#  double   ->  	      |s|exp| mant  |   |  mant       |		#
-#	    		      ---------------   ---------------		#
-#	   	 	      63     51   32   31	       0	#
+#			             v			     v		#
+#			      ---------------   ---------------		#
+#  double   ->		      |s|exp| mant  |   |  mant       |		#
+#			      ---------------   ---------------		#
+#			      63     51   32   31	       0	#
 #									#
 #########################################################################
 
@@ -20896,13 +20896,13 @@
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	dst_sgl(): create single precision value from extended prec	#
+#	dst_sgl(): create single precision value from extended prec	#
 #									#
 # XREF ****************************************************************	#
 #									#
 # INPUT ***************************************************************	#
 #	a0 = pointer to source operand in extended precision		#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	d0 = single precision result					#
 #									#
@@ -20914,18 +20914,18 @@
 #	get rid of ext integer bit					#
 #	sgl_mant = ext_mant{62:12}					#
 #									#
-#	    	---------------   ---------------    ---------------	#
+#		---------------   ---------------    ---------------	#
 #  extended ->  |s|    exp    |   |1| ms mant   |    | ls mant     |	#
-#	    	---------------   ---------------    ---------------	#
-#	   	 95	    64    63 62	   40 32      31     12	  0	#
+#		---------------   ---------------    ---------------	#
+#		 95	    64    63 62	   40 32      31     12	  0	#
 #				     |	   |				#
 #				     |	   |				#
 #				     |	   |				#
-#		 	             v     v				#
-#	    		      ---------------				#
-#  single   ->  	      |s|exp| mant  |				#
-#	    		      ---------------				#
-#	   	 	      31     22     0				#
+#			             v     v				#
+#			      ---------------				#
+#  single   ->		      |s|exp| mant  |				#
+#			      ---------------				#
+#			      31     22     0				#
 #									#
 #########################################################################
 
@@ -20998,7 +20998,7 @@
 # add the extra condition that only if the k-factor was zero, too, should
 # we zero the exponent
 	tst.l		%d0
-	bne.b		fout_pack_set	
+	bne.b		fout_pack_set
 # "mantissa" is all zero which means that the answer is zero. but, the '040
 # algorithm allows the exponent to be non-zero. the 881/2 do not. therefore,
 # if the mantissa is zero, I will zero the exponent, too.
@@ -21057,13 +21057,13 @@
 #									#
 # INPUT ***************************************************************	#
 #	d1 = index of register to fetch from				#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	d0 = value of register fetched					#
 #									#
 # ALGORITHM ***********************************************************	#
-#	According to the index value in d1 which can range from zero 	#
-# to fifteen, load the corresponding register file value (where 	#
+#	According to the index value in d1 which can range from zero	#
+# to fifteen, load the corresponding register file value (where		#
 # address register indexes start at 8). D0/D1/A0/A1/A6/A7 are on the	#
 # stack. The rest should still be in their original places.		#
 #									#
@@ -21152,7 +21152,7 @@
 # INPUT ***************************************************************	#
 #	d0 = longowrd value to store					#
 #	d1 = index of register to fetch from				#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	(data register is updated)					#
 #									#
@@ -21213,7 +21213,7 @@
 # INPUT ***************************************************************	#
 #	d0 = word value to store					#
 #	d1 = index of register to fetch from				#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	(data register is updated)					#
 #									#
@@ -21274,7 +21274,7 @@
 # INPUT ***************************************************************	#
 #	d0 = byte value to store					#
 #	d1 = index of register to fetch from				#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	(data register is updated)					#
 #									#
@@ -21335,16 +21335,16 @@
 # INPUT ***************************************************************	#
 #	d0 = amount to increment by					#
 #	d1 = index of address register to increment			#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	(address register is updated)					#
 #									#
 # ALGORITHM ***********************************************************	#
-# 	Typically used for an instruction w/ a post-increment <ea>, 	#
+#	Typically used for an instruction w/ a post-increment <ea>,	#
 # this routine adds the increment value in d0 to the address register	#
 # specified by d1. A0/A1/A6/A7 reside on the stack. The rest reside	#
 # in their original places.						#
-# 	For a7, if the increment amount is one, then we have to 	#
+#	For a7, if the increment amount is one, then we have to		#
 # increment by two. For any a7 update, set the mia7_flag so that if	#
 # an access error exception occurs later in emulation, this address	#
 # register update can be undone.					#
@@ -21399,16 +21399,16 @@
 # INPUT ***************************************************************	#
 #	d0 = amount to decrement by					#
 #	d1 = index of address register to decrement			#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	(address register is updated)					#
 #									#
 # ALGORITHM ***********************************************************	#
-# 	Typically used for an instruction w/ a pre-decrement <ea>, 	#
+#	Typically used for an instruction w/ a pre-decrement <ea>,	#
 # this routine adds the decrement value in d0 to the address register	#
 # specified by d1. A0/A1/A6/A7 reside on the stack. The rest reside	#
 # in their original places.						#
-# 	For a7, if the decrement amount is one, then we have to 	#
+#	For a7, if the decrement amount is one, then we have to		#
 # decrement by two. For any a7 update, set the mda7_flag so that if	#
 # an access error exception occurs later in emulation, this address	#
 # register update can be undone.					#
@@ -21464,17 +21464,17 @@
 #									#
 # INPUT ***************************************************************	#
 #	d0 = index of FP register to load				#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	FP_SRC(a6) = value loaded from FP register file			#
 #									#
 # ALGORITHM ***********************************************************	#
-#	Using the index in d0, load FP_SRC(a6) with a number from the 	#
+#	Using the index in d0, load FP_SRC(a6) with a number from the	#
 # FP register file.							#
 #									#
 #########################################################################
 
-	global 		load_fpn1
+	global		load_fpn1
 load_fpn1:
 	mov.w		(tbl_load_fpn1.b,%pc,%d0.w*2), %d0
 	jmp		(tbl_load_fpn1.b,%pc,%d0.w*1)
@@ -21537,12 +21537,12 @@
 #									#
 # INPUT ***************************************************************	#
 #	d0 = index of FP register to load				#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	FP_DST(a6) = value loaded from FP register file			#
 #									#
 # ALGORITHM ***********************************************************	#
-#	Using the index in d0, load FP_DST(a6) with a number from the 	#
+#	Using the index in d0, load FP_DST(a6) with a number from the	#
 # FP register file.							#
 #									#
 #########################################################################
@@ -21603,7 +21603,7 @@
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	store_fpreg(): store an fp value to the fpreg designated d0.	#
+#	store_fpreg(): store an fp value to the fpreg designated d0.	#
 #									#
 # XREF ****************************************************************	#
 #	None								#
@@ -21611,7 +21611,7 @@
 # INPUT ***************************************************************	#
 #	fp0 = extended precision value to store				#
 #	d0  = index of floating-point register				#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	None								#
 #									#
@@ -21644,33 +21644,33 @@
 	fmovm.x		&0x80, EXC_FP1(%a6)
 	rts
 store_fpreg_2:
-	fmovm.x 	&0x01, -(%sp)
+	fmovm.x		&0x01, -(%sp)
 	fmovm.x		(%sp)+, &0x20
 	rts
 store_fpreg_3:
-	fmovm.x 	&0x01, -(%sp)
+	fmovm.x		&0x01, -(%sp)
 	fmovm.x		(%sp)+, &0x10
 	rts
 store_fpreg_4:
-	fmovm.x 	&0x01, -(%sp)
+	fmovm.x		&0x01, -(%sp)
 	fmovm.x		(%sp)+, &0x08
 	rts
 store_fpreg_5:
-	fmovm.x 	&0x01, -(%sp)
+	fmovm.x		&0x01, -(%sp)
 	fmovm.x		(%sp)+, &0x04
 	rts
 store_fpreg_6:
-	fmovm.x 	&0x01, -(%sp)
+	fmovm.x		&0x01, -(%sp)
 	fmovm.x		(%sp)+, &0x02
 	rts
 store_fpreg_7:
-	fmovm.x 	&0x01, -(%sp)
+	fmovm.x		&0x01, -(%sp)
 	fmovm.x		(%sp)+, &0x01
 	rts
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	_denorm(): denormalize an intermediate result			#
+#	_denorm(): denormalize an intermediate result			#
 #									#
 # XREF ****************************************************************	#
 #	None								#
@@ -21678,7 +21678,7 @@
 # INPUT *************************************************************** #
 #	a0 = points to the operand to be denormalized			#
 #		(in the internal extended format)			#
-#		 							#
+#									#
 #	d0 = rounding precision						#
 #									#
 # OUTPUT **************************************************************	#
@@ -21688,10 +21688,10 @@
 #	d0 = guard,round,sticky						#
 #									#
 # ALGORITHM ***********************************************************	#
-# 	According to the exponent underflow threshold for the given	#
+#	According to the exponent underflow threshold for the given	#
 # precision, shift the mantissa bits to the right in order raise the	#
-# exponent of the operand to the threshold value. While shifting the 	#
-# mantissa bits right, maintain the value of the guard, round, and 	#
+# exponent of the operand to the threshold value. While shifting the	#
+# mantissa bits right, maintain the value of the guard, round, and	#
 # sticky bits.								#
 # other notes:								#
 #	(1) _denorm() is called by the underflow routines		#
@@ -21711,7 +21711,7 @@
 _denorm:
 #
 # Load the exponent threshold for the precision selected and check
-# to see if (threshold - exponent) is > 65 in which case we can 
+# to see if (threshold - exponent) is > 65 in which case we can
 # simply calculate the sticky bit and zero the mantissa. otherwise
 # we have to call the denormalization routine.
 #
@@ -21750,7 +21750,7 @@
 #	%d0{31:29} : initial guard,round,sticky				#
 #	%d1{15:0}  : denormalization threshold				#
 # OUTPUT:								#
-#	%a0	   : points to the denormalized operand		 	#
+#	%a0	   : points to the denormalized operand			#
 #	%d0{31:29} : final guard,round,sticky				#
 #									#
 
@@ -21770,7 +21770,7 @@
 
 #
 # check to see how much less than the underflow threshold the operand
-# exponent is. 
+# exponent is.
 #
 	mov.l		%d1, %d0		# copy the denorm threshold
 	sub.w		FTEMP_EX(%a0), %d1	# d1 = threshold - uns exponent
@@ -21785,7 +21785,7 @@
 # No normalization necessary
 #
 dnrm_no_lp:
-	mov.l		GRS(%a6), %d0 		# restore original g,r,s
+	mov.l		GRS(%a6), %d0		# restore original g,r,s
 	rts
 
 #
@@ -21795,7 +21795,7 @@
 # %d1 = "n" = amt to shift
 #
 #	---------------------------------------------------------
-#	|     FTEMP_HI	  |    	FTEMP_LO     |grs000.........000|
+#	|     FTEMP_HI	  |	FTEMP_LO     |grs000.........000|
 #	---------------------------------------------------------
 #	<-(32 - n)-><-(n)-><-(32 - n)-><-(n)-><-(32 - n)-><-(n)->
 #	\	   \		      \			 \
@@ -21806,7 +21806,7 @@
 #	     \		\		   \		      \
 #	      \		 \		    \		       \
 #	       \	  \		     \			\
-#	<-(n)-><-(32 - n)-><------(32)-------><------(32)------->	
+#	<-(n)-><-(32 - n)-><------(32)-------><------(32)------->
 #	---------------------------------------------------------
 #	|0.....0| NEW_HI  |  NEW_FTEMP_LO     |grs		|
 #	---------------------------------------------------------
@@ -21847,17 +21847,17 @@
 # %d1 = "n" = amt to shift
 #
 #	---------------------------------------------------------
-#	|     FTEMP_HI	  |    	FTEMP_LO     |grs000.........000|
+#	|     FTEMP_HI	  |	FTEMP_LO     |grs000.........000|
 #	---------------------------------------------------------
 #	<-(32 - n)-><-(n)-><-(32 - n)-><-(n)-><-(32 - n)-><-(n)->
 #	\	   \		      \
 #	 \	    \		       \
 #	  \	     \			-------------------
 #	   \	      --------------------		   \
-#	    -------------------	  	  \		    \
-#	     		       \	   \		     \
-#	      		 	\     	    \		      \
-#	       		  	 \	     \		       \
+#	    -------------------		  \		    \
+#			       \	   \		     \
+#				\	    \		      \
+#				 \	     \		       \
 #	<-------(32)------><-(n)-><-(32 - n)-><------(32)------->
 #	---------------------------------------------------------
 #	|0...............0|0....0| NEW_LO     |grs		|
@@ -21928,17 +21928,17 @@
 # case (d1 == 64)
 #
 #	---------------------------------------------------------
-#	|     FTEMP_HI	  |    	FTEMP_LO     |grs000.........000|
+#	|     FTEMP_HI	  |	FTEMP_LO     |grs000.........000|
 #	---------------------------------------------------------
 #	<-------(32)------>
-#	\	   	   \
-#	 \	    	    \
-#	  \	     	     \
-#	   \	      	      ------------------------------
+#	\		   \
+#	 \		    \
+#	  \		     \
+#	   \		      ------------------------------
 #	    -------------------------------		    \
-#	     		       		   \		     \
-#	      		 	     	    \		      \
-#	       		  	 	     \		       \
+#					   \		     \
+#					    \		      \
+#					     \		       \
 #					      <-------(32)------>
 #	---------------------------------------------------------
 #	|0...............0|0................0|grs		|
@@ -21956,17 +21956,17 @@
 # case (d1 == 65)
 #
 #	---------------------------------------------------------
-#	|     FTEMP_HI	  |    	FTEMP_LO     |grs000.........000|
+#	|     FTEMP_HI	  |	FTEMP_LO     |grs000.........000|
 #	---------------------------------------------------------
 #	<-------(32)------>
-#	\	   	   \
-#	 \	    	    \
-#	  \	     	     \
-#	   \	      	      ------------------------------
+#	\		   \
+#	 \		    \
+#	  \		     \
+#	   \		      ------------------------------
 #	    --------------------------------		    \
-#	     		       		    \		     \
-#	      		 	     	     \		      \
-#	       		  	 	      \		       \
+#					    \		     \
+#					     \		      \
+#					      \		       \
 #					       <-------(31)----->
 #	---------------------------------------------------------
 #	|0...............0|0................0|0rs		|
@@ -22014,7 +22014,7 @@
 #	None								#
 #									#
 # INPUT ***************************************************************	#
-#	a0	  = ptr to input operand in internal extended format 	#
+#	a0	  = ptr to input operand in internal extended format	#
 #	d1(hi)    = contains rounding precision:			#
 #			ext = $0000xxxx					#
 #			sgl = $0004xxxx					#
@@ -22045,7 +22045,7 @@
 #
 # ext_grs() looks at the rounding precision and sets the appropriate
 # G,R,S bits.
-# If (G,R,S == 0) then result is exact and round is done, else set 
+# If (G,R,S == 0) then result is exact and round is done, else set
 # the inex flag in status reg and continue.
 #
 	bsr.l		ext_grs			# extract G,R,S
@@ -22091,7 +22091,7 @@
 #	If sign of fp number = 1 (negative), then add 1 to l.	#
 #################################################################
 rnd_mnus:
-	tst.b		FTEMP_SGN(%a0)		# check for sign	
+	tst.b		FTEMP_SGN(%a0)		# check for sign
 	bpl.w		truncate		# if negative then truncate
 
 	mov.l		&0xffffffff, %d0	# force g,r,s to be all f's
@@ -22202,7 +22202,7 @@
 #
 # INPUT
 #	d0	   = extended precision g,r,s (in d0{31:29})
-#	d1 	   = {PREC,ROUND}
+#	d1	   = {PREC,ROUND}
 # OUTPUT
 #	d0{31:29}  = guard, round, sticky
 #
@@ -22253,7 +22253,7 @@
 	mov.l		&30, %d2		# of the sgl prec. limits
 	lsl.l		%d2, %d3		# shift g-r bits to MSB of d3
 	mov.l		FTEMP_HI(%a0), %d2	# get word 2 for s-bit test
-	and.l		&0x0000003f, %d2	# s bit is the or of all other 
+	and.l		&0x0000003f, %d2	# s bit is the or of all other
 	bne.b		ext_grs_st_stky		# bits to the right of g-r
 	tst.l		FTEMP_LO(%a0)		# test lower mantissa
 	bne.b		ext_grs_st_stky		# if any are set, set sticky
@@ -22263,9 +22263,9 @@
 
 #
 # dbl:
-#	96		64	  	32	 11	0
+#	96		64		32	 11	0
 #	-----------------------------------------------------
-#	| EXP	|XXXXXXX|	  	|	 |xx	|grs|
+#	| EXP	|XXXXXXX|		|	 |xx	|grs|
 #	-----------------------------------------------------
 #						  nn\	    /
 #						  ee -------
@@ -22278,7 +22278,7 @@
 	mov.l		&30, %d2		# of the dbl prec. limits
 	lsl.l		%d2, %d3		# shift g-r bits to the MSB of d3
 	mov.l		FTEMP_LO(%a0), %d2	# get lower mantissa  for s-bit test
-	and.l		&0x000001ff, %d2	# s bit is the or-ing of all 
+	and.l		&0x000001ff, %d2	# s bit is the or-ing of all
 	bne.b		ext_grs_st_stky		# other bits to the right of g-r
 	tst.l		%d0			# test word original g,r,s
 	bne.b		ext_grs_st_stky		# if any are set, set sticky
@@ -22308,7 +22308,7 @@
 #	a0 = pointer fp extended precision operand to normalize		#
 #									#
 # OUTPUT ************************************************************** #
-# 	d0 = number of bit positions the mantissa was shifted		#
+#	d0 = number of bit positions the mantissa was shifted		#
 #	a0 = the input operand's mantissa is normalized; the exponent	#
 #	     is unchanged.						#
 #									#
@@ -22335,7 +22335,7 @@
 	mov.l		%d1, FTEMP_LO(%a0)	# store new lo(man)
 
 	mov.l		%d2, %d0		# return shift amount
-	
+
 	mov.l		(%sp)+, %d3		# restore temp regs
 	mov.l		(%sp)+, %d2
 
@@ -22350,7 +22350,7 @@
 	clr.l		FTEMP_LO(%a0)		# lo(man) is now zero
 
 	mov.l		%d2, %d0		# return shift amount
-	
+
 	mov.l		(%sp)+, %d3		# restore temp regs
 	mov.l		(%sp)+, %d2
 
@@ -22455,27 +22455,27 @@
 # whole mantissa is zero so this UNNORM is actually a zero
 #
 unnorm_zero:
-	and.w		&0x8000, FTEMP_EX(%a0) 	# force exponent to zero
+	and.w		&0x8000, FTEMP_EX(%a0)	# force exponent to zero
 
 	mov.b		&ZERO, %d0		# fix optype tag
 	rts
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	set_tag_x(): return the optype of the input ext fp number	#
+#	set_tag_x(): return the optype of the input ext fp number	#
 #									#
 # XREF ****************************************************************	#
 #	None								#
 #									#
 # INPUT ***************************************************************	#
 #	a0 = pointer to extended precision operand			#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	d0 = value of type tag						#
-# 		one of: NORM, INF, QNAN, SNAN, DENORM, UNNORM, ZERO	#
+#		one of: NORM, INF, QNAN, SNAN, DENORM, UNNORM, ZERO	#
 #									#
 # ALGORITHM ***********************************************************	#
-#	Simply test the exponent, j-bit, and mantissa values to 	#
+#	Simply test the exponent, j-bit, and mantissa values to		#
 # determine the type of operand.					#
 #	If it's an unnormalized zero, alter the operand and force it	#
 # to be a normal zero.							#
@@ -22542,20 +22542,20 @@
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	set_tag_d(): return the optype of the input dbl fp number	#
+#	set_tag_d(): return the optype of the input dbl fp number	#
 #									#
 # XREF ****************************************************************	#
 #	None								#
 #									#
 # INPUT ***************************************************************	#
 #	a0 = points to double precision operand				#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	d0 = value of type tag						#
-# 		one of: NORM, INF, QNAN, SNAN, DENORM, ZERO		#
+#		one of: NORM, INF, QNAN, SNAN, DENORM, ZERO		#
 #									#
 # ALGORITHM ***********************************************************	#
-#	Simply test the exponent, j-bit, and mantissa values to 	#
+#	Simply test the exponent, j-bit, and mantissa values to		#
 # determine the type of operand.					#
 #									#
 #########################################################################
@@ -22605,20 +22605,20 @@
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	set_tag_s(): return the optype of the input sgl fp number	#
+#	set_tag_s(): return the optype of the input sgl fp number	#
 #									#
 # XREF ****************************************************************	#
 #	None								#
 #									#
 # INPUT ***************************************************************	#
 #	a0 = pointer to single precision operand			#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	d0 = value of type tag						#
-# 		one of: NORM, INF, QNAN, SNAN, DENORM, ZERO		#
+#		one of: NORM, INF, QNAN, SNAN, DENORM, ZERO		#
 #									#
 # ALGORITHM ***********************************************************	#
-#	Simply test the exponent, j-bit, and mantissa values to 	#
+#	Simply test the exponent, j-bit, and mantissa values to		#
 # determine the type of operand.					#
 #									#
 #########################################################################
@@ -22664,15 +22664,15 @@
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	unf_res(): routine to produce default underflow result of a 	#
-#	 	   scaled extended precision number; this is used by 	#
+#	unf_res(): routine to produce default underflow result of a	#
+#		   scaled extended precision number; this is used by	#
 #		   fadd/fdiv/fmul/etc. emulation routines.		#
-# 	unf_res4(): same as above but for fsglmul/fsgldiv which use	#
+#	unf_res4(): same as above but for fsglmul/fsgldiv which use	#
 #		    single round prec and extended prec mode.		#
 #									#
 # XREF ****************************************************************	#
 #	_denorm() - denormalize according to scale factor		#
-# 	_round() - round denormalized number according to rnd prec	#
+#	_round() - round denormalized number according to rnd prec	#
 #									#
 # INPUT ***************************************************************	#
 #	a0 = pointer to extended precison operand			#
@@ -22684,15 +22684,15 @@
 #	d0.b = result FPSR_cc which caller may or may not want to save	#
 #									#
 # ALGORITHM ***********************************************************	#
-# 	Convert the input operand to "internal format" which means the	#
+#	Convert the input operand to "internal format" which means the	#
 # exponent is extended to 16 bits and the sign is stored in the unused	#
 # portion of the extended precison operand. Denormalize the number	#
-# according to the scale factor passed in d0. Then, round the 		#
+# according to the scale factor passed in d0. Then, round the		#
 # denormalized result.							#
-# 	Set the FPSR_exc bits as appropriate but return the cc bits in	#
+#	Set the FPSR_exc bits as appropriate but return the cc bits in	#
 # d0 in case the caller doesn't want to save them (as is the case for	#
 # fmove out).								#
-# 	unf_res4() for fsglmul/fsgldiv forces the denorm to extended	#
+#	unf_res4() for fsglmul/fsgldiv forces the denorm to extended	#
 # precision and the rounding mode to single.				#
 #									#
 #########################################################################
@@ -22830,23 +22830,23 @@
 #	none								#
 #									#
 # INPUT ***************************************************************	#
-#	d1.b 	= '-1' => (-); '0' => (+)				#
+#	d1.b	= '-1' => (-); '0' => (+)				#
 #   ovf_res():								#
-#	d0 	= rnd mode/prec						#
+#	d0	= rnd mode/prec						#
 #   ovf_res2():								#
-#	hi(d0) 	= rnd prec						#
+#	hi(d0)	= rnd prec						#
 #	lo(d0)	= rnd mode						#
 #									#
 # OUTPUT **************************************************************	#
-#	a0   	= points to extended precision result			#
-#	d0.b 	= condition code bits					#
+#	a0	= points to extended precision result			#
+#	d0.b	= condition code bits					#
 #									#
 # ALGORITHM ***********************************************************	#
 #	The default overflow result can be determined by the sign of	#
 # the result and the rounding mode/prec in effect. These bits are	#
-# concatenated together to create an index into the default result 	#
+# concatenated together to create an index into the default result	#
 # table. A pointer to the correct result is returned in a0. The		#
-# resulting condition codes are returned in d0 in case the caller 	#
+# resulting condition codes are returned in d0 in case the caller	#
 # doesn't want FPSR_cc altered (as is the case for fmove out).		#
 #									#
 #########################################################################
@@ -22876,7 +22876,7 @@
 ovf_res_load:
 	mov.b		(tbl_ovfl_cc.b,%pc,%d0.w*1), %d0 # fetch result ccodes
 	lea		(tbl_ovfl_result.b,%pc,%d1.w*8), %a0 # return result ptr
-	
+
 	rts
 
 tbl_ovfl_cc:
@@ -22937,18 +22937,18 @@
 #									#
 # INPUT ***************************************************************	#
 #	None								#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	If no failure on _mem_read():					#
-# 	FP_SRC(a6) = packed operand now as a binary FP number		#
+#	FP_SRC(a6) = packed operand now as a binary FP number		#
 #									#
 # ALGORITHM ***********************************************************	#
-#	Get the correct <ea> whihc is the value on the exception stack 	#
+#	Get the correct <ea> whihc is the value on the exception stack	#
 # frame w/ maybe a correction factor if the <ea> is -(an) or (an)+.	#
 # Then, fetch the operand from memory. If the fetch fails, exit		#
 # through facc_in_x().							#
 #	If the packed operand is a ZERO,NAN, or INF, convert it to	#
-# its binary representation here. Else, call decbin() which will 	#
+# its binary representation here. Else, call decbin() which will	#
 # convert the packed value to an extended precision binary value.	#
 #									#
 #########################################################################
@@ -23005,7 +23005,7 @@
 #	and NaN operands are dispatched without entering this routine)	#
 #	value in 68881/882 format at location (a0).			#
 #									#
-#	A1. Convert the bcd exponent to binary by successive adds and 	#
+#	A1. Convert the bcd exponent to binary by successive adds and	#
 #	muls. Set the sign according to SE. Subtract 16 to compensate	#
 #	for the mantissa which is to be interpreted as 17 integer	#
 #	digits, rather than 1 integer and 16 fraction digits.		#
@@ -23069,7 +23069,7 @@
 
 	global		decbin
 decbin:
-	mov.l		0x0(%a0),FP_SCR0_EX(%a6) # make a copy of input 
+	mov.l		0x0(%a0),FP_SCR0_EX(%a6) # make a copy of input
 	mov.l		0x4(%a0),FP_SCR0_HI(%a6) # so we don't alter it
 	mov.l		0x8(%a0),FP_SCR0_LO(%a6)
 
@@ -23358,7 +23358,7 @@
 #
 # Pwrten calculates the exponent factor in the selected rounding mode
 # according to the following table:
-#	
+#
 #	Sign of Mant  Sign of Exp  Rounding Mode  PWRTEN Rounding Mode
 #
 #	ANY	  ANY	RN	RN
@@ -23446,7 +23446,7 @@
 # it will be inex2, but will be reported as inex1 by get_op.
 #
 end_dec:
-	fmov.l		%fpsr,%d0		# get status register	
+	fmov.l		%fpsr,%d0		# get status register
 	bclr		&inex2_bit+8,%d0	# test for inex2 and clear it
 	beq.b		no_exc			# skip this if no exc
 	ori.w		&inx1a_mask,2+USER_FPSR(%a6) # set INEX1/AINEX
@@ -23463,16 +23463,16 @@
 #									#
 # INPUT ***************************************************************	#
 #	a0 = pointer to the input extended precision value in memory.	#
-#	     the input may be either normalized, unnormalized, or 	#
+#	     the input may be either normalized, unnormalized, or	#
 #	     denormalized.						#
-#	d0 = contains the k-factor sign-extended to 32-bits. 		#
+#	d0 = contains the k-factor sign-extended to 32-bits.		#
 #									#
 # OUTPUT **************************************************************	#
 #	FP_SCR0(a6) = bcd format result on the stack.			#
 #									#
 # ALGORITHM ***********************************************************	#
 #									#
-#	A1.	Set RM and size ext;  Set SIGMA = sign of input.  	#
+#	A1.	Set RM and size ext;  Set SIGMA = sign of input.	#
 #		The k-factor is saved for use in d7. Clear the		#
 #		BINDEC_FLG for separating normalized/denormalized	#
 #		input.  If input is unnormalized or denormalized,	#
@@ -23482,15 +23482,15 @@
 #									#
 #	A3.	Compute ILOG.						#
 #		ILOG is the log base 10 of the input value.  It is	#
-#		approximated by adding e + 0.f when the original 	#
-#		value is viewed as 2^^e * 1.f in extended precision.  	#
+#		approximated by adding e + 0.f when the original	#
+#		value is viewed as 2^^e * 1.f in extended precision.	#
 #		This value is stored in d6.				#
 #									#
 #	A4.	Clr INEX bit.						#
-#		The operation in A3 above may have set INEX2.  		#
+#		The operation in A3 above may have set INEX2.		#
 #									#
 #	A5.	Set ICTR = 0;						#
-#		ICTR is a flag used in A13.  It must be set before the 	#
+#		ICTR is a flag used in A13.  It must be set before the	#
 #		loop entry A6.						#
 #									#
 #	A6.	Calculate LEN.						#
@@ -23512,7 +23512,7 @@
 #		of ISCALE and X.  A table is given in the code.		#
 #									#
 #	A8.	Clr INEX; Force RZ.					#
-#		The operation in A3 above may have set INEX2.  		#
+#		The operation in A3 above may have set INEX2.		#
 #		RZ mode is forced for the scaling operation to insure	#
 #		only one rounding error.  The grs bits are collected in #
 #		the INEX flag for use in A10.				#
@@ -23543,11 +23543,11 @@
 #		the mantissa by 10.					#
 #									#
 #	A14.	Convert the mantissa to bcd.				#
-#		The binstr routine is used to convert the LEN digit 	#
+#		The binstr routine is used to convert the LEN digit	#
 #		mantissa to bcd in memory.  The input to binstr is	#
 #		to be a fraction; i.e. (mantissa)/10^LEN and adjusted	#
 #		such that the decimal point is to the left of bit 63.	#
-#		The bcd digits are stored in the correct position in 	#
+#		The bcd digits are stored in the correct position in	#
 #		the final string area in memory.			#
 #									#
 #	A15.	Convert the exponent to bcd.				#
@@ -23593,7 +23593,7 @@
 #		d2: upper 32-bits of mantissa for binstr
 #		d3: scratch;lower 32-bits of mantissa for binstr
 #		d4: LEN
-#      		d5: LAMBDA/ICTR
+#		d5: LAMBDA/ICTR
 #		d6: ILOG
 #		d7: k-factor
 #		a0: ptr for original operand/final result
@@ -23617,7 +23617,7 @@
 #     separating  normalized/denormalized input.  If the input
 #     is a denormalized number, set the BINDEC_FLG memory word
 #     to signal denorm.  If the input is unnormalized, normalize
-#     the input and test for denormalized result.  
+#     the input and test for denormalized result.
 #
 	fmov.l		&rm_mode*0x10,%fpcr	# set RM and ext
 	mov.l		(%a0),L_SCR2(%a6)	# save exponent for sign check
@@ -23698,7 +23698,7 @@
 	sub.w		&0x3fff,%d0	# strip off bias
 	fadd.w		%d0,%fp0	# add in exp
 	fsub.s		FONE(%pc),%fp0	# subtract off 1.0
-	fbge.w		pos_res		# if pos, branch 
+	fbge.w		pos_res		# if pos, branch
 	fmul.x		PLOG2UP1(%pc),%fp0	# if neg, mul by LOG2UP1
 	fmov.l		%fp0,%d6	# put ILOG in d6 as a lword
 	bra.b		A4_str		# go move out ILOG
@@ -23708,14 +23708,14 @@
 
 
 # A4. Clr INEX bit.
-#     The operation in A3 above may have set INEX2.  
+#     The operation in A3 above may have set INEX2.
 
 A4_str:
 	fmov.l		&0,%fpsr	# zero all of fpsr - nothing needed
 
 
 # A5. Set ICTR = 0;
-#     ICTR is a flag used in A13.  It must be set before the 
+#     ICTR is a flag used in A13.  It must be set before the
 #     loop entry A6. The lower word of d5 is used for ICTR.
 
 	clr.w		%d5		# clear ICTR
@@ -23881,21 +23881,21 @@
 	bne.b		e_loop2		# if not, loop
 
 # A8. Clr INEX; Force RZ.
-#     The operation in A3 above may have set INEX2.  
+#     The operation in A3 above may have set INEX2.
 #     RZ mode is forced for the scaling operation to insure
-#     only one rounding error.  The grs bits are collected in 
+#     only one rounding error.  The grs bits are collected in
 #     the INEX flag for use in A10.
 #
 # Register usage:
 #	Input/Output
 
-	fmov.l		&0,%fpsr	# clr INEX 
+	fmov.l		&0,%fpsr	# clr INEX
 	fmov.l		&rz_mode*0x10,%fpcr	# set RZ rounding mode
 
 # A9. Scale X -> Y.
 #     The mantissa is scaled to the desired number of significant
 #     digits.  The excess digits are collected in INEX2. If mul,
-#     Check d2 for excess 10 exponential value.  If not zero, 
+#     Check d2 for excess 10 exponential value.  If not zero,
 #     the iscale value would have caused the pwrten calculation
 #     to overflow.  Only a negative iscale can cause this, so
 #     multiply by 10^(d2), which is now only allowed to be 24,
@@ -24026,7 +24026,7 @@
 
 A11_st:
 	mov.l		USER_FPCR(%a6),L_SCR1(%a6)	# save it for later
-	and.l		&0x00000030,USER_FPCR(%a6)	# set size to ext, 
+	and.l		&0x00000030,USER_FPCR(%a6)	# set size to ext,
 #					;block exceptions
 
 
@@ -24062,7 +24062,7 @@
 	lea.l		FP_SCR1(%a6),%a0	# a0 is ptr to FP_SCR1(a6)
 	fmov.x		%fp0,(%a0)	# move Y to memory at FP_SCR1(a6)
 	tst.l		L_SCR2(%a6)	# test sign of original operand
-	bge.b		do_fint12		# if pos, use Y 
+	bge.b		do_fint12		# if pos, use Y
 	or.l		&0x80000000,(%a0)	# if neg, use -Y
 do_fint12:
 	mov.l	USER_FPSR(%a6),-(%sp)
@@ -24158,7 +24158,7 @@
 	subq.l		&1,%d6		# subtract 1 from ILOG
 	mov.w		&1,%d5		# set ICTR
 	fmov.l		&rm_mode*0x10,%fpcr	# set rmode to RM
-	fmul.s		FTEN(%pc),%fp2	# compute 10^LEN 
+	fmul.s		FTEN(%pc),%fp2	# compute 10^LEN
 	bra.w		A6_str		# return to A6 and recompute YINT
 test_2:
 	fmul.s		FTEN(%pc),%fp2	# compute 10^LEN
@@ -24174,7 +24174,7 @@
 	fmov.l		&rm_mode*0x10,%fpcr	# set rmode to RM
 	bra.w		A6_str		# return to A6 and recompute YINT
 #
-# Since ICTR <> 0, we have already been through one adjustment, 
+# Since ICTR <> 0, we have already been through one adjustment,
 # and shouldn't have another; this is to check if abs(YINT) = 10^LEN
 # 10^LEN is again computed using whatever table is in a1 since the
 # value calculated cannot be inexact.
@@ -24200,11 +24200,11 @@
 	fmul.s		FTEN(%pc),%fp2	# if LEN++, the get 10^^LEN
 
 # A14. Convert the mantissa to bcd.
-#      The binstr routine is used to convert the LEN digit 
+#      The binstr routine is used to convert the LEN digit
 #      mantissa to bcd in memory.  The input to binstr is
 #      to be a fraction; i.e. (mantissa)/10^LEN and adjusted
 #      such that the decimal point is to the left of bit 63.
-#      The bcd digits are stored in the correct position in 
+#      The bcd digits are stored in the correct position in
 #      the final string area in memory.
 #
 #
@@ -24247,7 +24247,7 @@
 	bgt.b		no_sft		# if so, don't shift
 	neg.l		%d0		# make exp positive
 m_loop:
-	lsr.l		&1,%d2		# shift d2:d3 right, add 0s 
+	lsr.l		&1,%d2		# shift d2:d3 right, add 0s
 	roxr.l		&1,%d3		# the number of places
 	dbf.w		%d0,m_loop	# given in d0
 no_sft:
@@ -24272,9 +24272,9 @@
 #
 #      Digits are stored in L_SCR1(a6) on return from BINDEC as:
 #
-#  	 32               16 15                0
+#	 32               16 15                0
 #	-----------------------------------------
-#  	|  0 | e3 | e2 | e1 | e4 |  X |  X |  X |
+#	|  0 | e3 | e2 | e1 | e4 |  X |  X |  X |
 #	-----------------------------------------
 #
 # And are moved into their proper places in FP_SCR0.  If digit e4
@@ -24337,7 +24337,7 @@
 	sub.w		&0x3ffd,%d0	# subtract off bias
 	neg.w		%d0		# make exp positive
 x_loop:
-	lsr.l		&1,%d2		# shift d2:d3 right 
+	lsr.l		&1,%d2		# shift d2:d3 right
 	roxr.l		&1,%d3		# the number of places
 	dbf.w		%d0,x_loop	# given in d0
 x_loop_fin:
@@ -24348,12 +24348,12 @@
 	mov.l		&4,%d0		# put 4 in d0 for binstr call
 	lea.l		L_SCR1(%a6),%a0	# a0 is ptr to L_SCR1 for exp digits
 	bsr		binstr		# call binstr to convert exp
-	mov.l		L_SCR1(%a6),%d0	# load L_SCR1 lword to d0 
+	mov.l		L_SCR1(%a6),%d0	# load L_SCR1 lword to d0
 	mov.l		&12,%d1		# use d1 for shift count
 	lsr.l		%d1,%d0		# shift d0 right by 12
 	bfins		%d0,FP_SCR0(%a6){&4:&12}	# put e3:e2:e1 in FP_SCR0
 	lsr.l		%d1,%d0		# shift d0 right by 12
-	bfins		%d0,FP_SCR0(%a6){&16:&4}	# put e4 in FP_SCR0 
+	bfins		%d0,FP_SCR0(%a6){&16:&4}	# put e4 in FP_SCR0
 	tst.b		%d0		# check if e4 is zero
 	beq.b		A16_st		# if zero, skip rest
 	or.l		&opaop_mask,USER_FPSR(%a6)	# set OPERR & AIOP in USER_FPSR
@@ -24384,14 +24384,14 @@
 
 A16_st:
 	clr.l		%d0		# clr d0 for collection of signs
-	and.b		&0x0f,FP_SCR0(%a6)	# clear first nibble of FP_SCR0 
+	and.b		&0x0f,FP_SCR0(%a6)	# clear first nibble of FP_SCR0
 	tst.l		L_SCR2(%a6)	# check sign of original mantissa
 	bge.b		mant_p		# if pos, don't set SM
 	mov.l		&2,%d0		# move 2 in to d0 for SM
 mant_p:
 	tst.l		%d6		# check sign of ILOG
 	bge.b		wr_sgn		# if pos, don't set SE
-	addq.l		&1,%d0		# set bit 0 in d0 for SE 
+	addq.l		&1,%d0		# set bit 0 in d0 for SE
 wr_sgn:
 	bfins		%d0,FP_SCR0(%a6){&0:&2}	# insert SM and SE into FP_SCR0
 
@@ -24457,8 +24457,8 @@
 #	d2:d3 = 64-bit binary integer					#
 #	d0    = desired length (LEN)					#
 #	a0    = pointer to start in memory for bcd characters		#
-#          	(This pointer must point to byte 4 of the first		#
-#          	 lword of the packed decimal memory string.)		#
+#		(This pointer must point to byte 4 of the first		#
+#		 lword of the packed decimal memory string.)		#
 #									#
 # OUTPUT ************************************************************** #
 #	a0 = pointer to LEN bcd digits representing the 64-bit integer.	#
@@ -24598,14 +24598,14 @@
 #									#
 # INPUT ***************************************************************	#
 #	None								#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	None								#
 #									#
 # ALGORITHM ***********************************************************	#
-# 	Flow jumps here when an FP data fetch call gets an error 	#
+#	Flow jumps here when an FP data fetch call gets an error	#
 # result. This means the operating system wants an access error frame	#
-# made out of the current exception stack frame. 			#
+# made out of the current exception stack frame.			#
 #	So, we first call restore() which makes sure that any updated	#
 # -(an)+ register gets returned to its pre-exception value and then	#
 # we change the stack to an access error stack frame.			#
@@ -24775,7 +24775,7 @@
 	bne.b		ri_a7_done		# supervisor
 	movc		%usp,%a0		# restore USP
 	sub.l		%d0,%a0
-	movc		%a0,%usp	
+	movc		%a0,%usp
 ri_a7_done:
 	rts
 
diff -Nru a/arch/m68k/ifpsp060/src/ftest.S b/arch/m68k/ifpsp060/src/ftest.S
--- a/arch/m68k/ifpsp060/src/ftest.S	Sun May 16 01:18:34 2004
+++ b/arch/m68k/ifpsp060/src/ftest.S	Sun May 16 01:18:34 2004
@@ -5,10 +5,10 @@
 Production Release P1.00 -- October 10, 1994
 
 M68060 Software Package Copyright © 1993, 1994 Motorola Inc.  All rights reserved.
- 
+
 THE SOFTWARE is provided on an "AS IS" basis and without warranty.
 To the maximum extent permitted by applicable law,
-MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, 
+MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED,
 INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
 and any warranty against infringement with regard to the SOFTWARE
 (INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials.
@@ -86,7 +86,7 @@
 #############################################
 _060TESTS_:
 	link		%a6,&-384
-	
+
 	movm.l		&0x3f3c,-(%sp)
 	fmovm.x		&0xff,-(%sp)
 
@@ -138,7 +138,7 @@
 
 _060TESTS_unimp:
 	link		%a6,&-384
-	
+
 	movm.l		&0x3f3c,-(%sp)
 	fmovm.x		&0xff,-(%sp)
 
@@ -164,7 +164,7 @@
 
 _060TESTS_enable:
 	link		%a6,&-384
-	
+
 	movm.l		&0x3f3c,-(%sp)
 	fmovm.x		&0xff,-(%sp)
 
@@ -687,7 +687,7 @@
 
 	fmovm.l		%fpcr,%fpsr,%fpiar,IFPCREGS(%a6)
 	fmovm.x		&0xff,IFPREGS(%a6)
-	
+
 	mov.w		&0x0000,%cc
 
 	fmovm.x		%d0,-(%sp)
@@ -753,7 +753,7 @@
 	movm.l		&0xffff,IREGS(%a6)
 
 	fmovm.l		%fpcr,%fpsr,%fpiar,IFPCREGS(%a6)
-	
+
 	mov.w		&0x0000,%cc
 
 	fmovm.x		(%sp)+,%d0
@@ -797,7 +797,7 @@
 
 	fmovm.l		%fpcr,%fpsr,%fpiar,IFPCREGS(%a6)
 	fmovm.x		&0xff,IFPREGS(%a6)
-	
+
 	mov.w		&0x0000,%cc
 
 	fmovm.x		%d0,-(%sp)
diff -Nru a/arch/m68k/ifpsp060/src/ilsp.S b/arch/m68k/ifpsp060/src/ilsp.S
--- a/arch/m68k/ifpsp060/src/ilsp.S	Sun May 16 01:18:33 2004
+++ b/arch/m68k/ifpsp060/src/ilsp.S	Sun May 16 01:18:33 2004
@@ -5,10 +5,10 @@
 Production Release P1.00 -- October 10, 1994
 
 M68060 Software Package Copyright © 1993, 1994 Motorola Inc.  All rights reserved.
- 
+
 THE SOFTWARE is provided on an "AS IS" basis and without warranty.
 To the maximum extent permitted by applicable law,
-MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, 
+MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED,
 INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
 and any warranty against infringement with regard to the SOFTWARE
 (INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials.
@@ -27,7 +27,7 @@
 or trademarks of Motorola, Inc.
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 # litop.s:
-# 	This file is appended to the top of the 060FPLSP package
+#	This file is appended to the top of the 060FPLSP package
 # and contains the entry points into the package. The user, in
 # effect, branches to one of the branch table entries located here.
 #
@@ -64,7 +64,7 @@
 #	_060LSP__idivs64_(): Emulate 64-bit signed div instruction.	#
 #									#
 #	This is the library version which is accessed as a subroutine	#
-# 	and therefore does not work exactly like the 680X0 div{s,u}.l	#
+#	and therefore does not work exactly like the 680X0 div{s,u}.l	#
 #	64-bit divide instruction.					#
 #									#
 # XREF ****************************************************************	#
@@ -75,17 +75,17 @@
 #	0x8(sp)  = hi(dividend)						#
 #	0xc(sp)  = lo(dividend)						#
 #	0x10(sp) = pointer to location to place quotient/remainder	#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	0x10(sp) = points to location of remainder/quotient.		#
 #		   remainder is in first longword, quotient is in 2nd.	#
 #									#
 # ALGORITHM ***********************************************************	#
-#	If the operands are signed, make them unsigned and save the 	#
+#	If the operands are signed, make them unsigned and save the	#
 # sign info for later. Separate out special cases like divide-by-zero	#
 # or 32-bit divides if possible. Else, use a special math algorithm	#
 # to calculate the result.						#
-#	Restore sign info if signed instruction. Set the condition 	#
+#	Restore sign info if signed instruction. Set the condition	#
 # codes before performing the final "rts". If the divisor was equal to	#
 # zero, then perform a divide-by-zero using a 16-bit implemented	#
 # divide instruction. This way, the operating system can record that	#
@@ -135,8 +135,8 @@
 
 	beq.w		ldiv64eq0		# divisor is = 0!!!
 
-	mov.l		0xc(%a6), %d5 		# get dividend hi
-	mov.l		0x10(%a6), %d6 		# get dividend lo
+	mov.l		0xc(%a6), %d5		# get dividend hi
+	mov.l		0x10(%a6), %d6		# get dividend lo
 
 # separate signed and unsigned divide
 	tst.b		POSNEG(%a6)		# signed or unsigned?
@@ -161,7 +161,7 @@
 	negx.l		%d5
 
 # extract some special cases:
-# 	- is (dividend == 0) ?
+#	- is (dividend == 0) ?
 #	- is (hi(dividend) == 0 && (divisor <= lo(dividend))) ? (32-bit div)
 ldspecialcases:
 	tst.l		%d5			# is (hi(dividend) == 0)
@@ -170,7 +170,7 @@
 	tst.l		%d6			# is (lo(dividend) == 0), too
 	beq.w		lddone			# yes, so (dividend == 0)
 
-	cmp.l	 	%d7,%d6			# is (divisor <= lo(dividend))
+	cmp.l		%d7,%d6			# is (divisor <= lo(dividend))
 	bls.b		ld32bitdivide		# yes, so use 32 bit divide
 
 	exg		%d5,%d6			# q = 0, r = dividend
@@ -183,7 +183,7 @@
 
 ldnormaldivide:
 # last special case:
-# 	- is hi(dividend) >= divisor ? if yes, then overflow
+#	- is hi(dividend) >= divisor ? if yes, then overflow
 	cmp.l		%d7,%d5
 	bls.b		lddovf			# answer won't fit in 32 bits
 
@@ -196,7 +196,7 @@
 	beq.b		lddone			# divu has no processing!!!
 
 # it was a divs.l, so ccode setting is a little more complicated...
-	tst.b		NDIVIDEND(%a6)		# remainder has same sign 
+	tst.b		NDIVIDEND(%a6)		# remainder has same sign
 	beq.b		ldcc			# as dividend.
 	neg.l		%d5			# sgn(rem) = sgn(dividend)
 ldcc:
@@ -240,8 +240,8 @@
 
 # the result should be the unchanged dividend
 lddovf:
-	mov.l		0xc(%a6), %d5 		# get dividend hi
-	mov.l		0x10(%a6), %d6 		# get dividend lo
+	mov.l		0xc(%a6), %d5		# get dividend hi
+	mov.l		0x10(%a6), %d6		# get dividend lo
 
 	andi.w		&0x1c,DIV64_CC(%a6)
 	ori.w		&0x02,DIV64_CC(%a6)	# set 'V' ccode bit
@@ -271,8 +271,8 @@
 # For this implementation b=2**16, and the target is U1U2U3U4/V1V2,	#
 # where U,V are words of the quadword dividend and longword divisor,	#
 # and U1, V1 are the most significant words.				#
-# 									#
-# The most sig. longword of the 64 bit dividend must be in %d5, least 	#
+#									#
+# The most sig. longword of the 64 bit dividend must be in %d5, least	#
 # in %d6. The divisor must be in the variable ddivisor, and the		#
 # signed/unsigned flag ddusign must be set (0=unsigned,1=signed).	#
 # The quotient is returned in %d6, remainder in %d5, unless the		#
@@ -292,7 +292,7 @@
 # dividing the divisor word into each dividend word. In this case,
 # the first two quotient words must be zero, or overflow would occur.
 # Since we already checked this case above, we can treat the most significant
-# longword of the dividend as (0) remainder (see Knuth) and merely complete 
+# longword of the dividend as (0) remainder (see Knuth) and merely complete
 # the last two divisions to get a quotient longword and word remainder:
 
 	clr.l		%d1
@@ -328,12 +328,12 @@
 	clr.b		DDSECOND(%a6)		# clear flag for quotient digits
 	clr.l		%d1			# %d1 will hold trial quotient
 lddnchk:
-	btst		&31, %d7		# must we normalize? first word of 
+	btst		&31, %d7		# must we normalize? first word of
 	bne.b		lddnormalized		# divisor (V1) must be >= 65536/2
 	addq.l		&0x1, DDNORMAL(%a6)	# count normalization shifts
 	lsl.l		&0x1, %d7		# shift the divisor
 	lsl.l		&0x1, %d6		# shift u4,u3 with overflow to u2
-	roxl.l		&0x1, %d5		# shift u1,u2 
+	roxl.l		&0x1, %d5		# shift u1,u2
 	bra.w		lddnchk
 lddnormalized:
 
@@ -343,12 +343,12 @@
 	mov.l		%d5, %d2		# dividend mslw
 	swap		%d2
 	swap		%d3
-	cmp.w	 	%d2, %d3		# V1 = U1 ?
+	cmp.w		%d2, %d3		# V1 = U1 ?
 	bne.b		lddqcalc1
 	mov.w		&0xffff, %d1		# use max trial quotient word
 	bra.b		lddadj0
 lddqcalc1:
-	mov.l		%d5, %d1		
+	mov.l		%d5, %d1
 
 	divu.w		%d3, %d1		# use quotient of mslw/msw
 
@@ -379,7 +379,7 @@
 
 #	add.l		%d6, %d4		# (U1U2 - V1q) + U3
 
-	cmp.l	 	%d2, %d4
+	cmp.l		%d2, %d4
 	bls.b		lddadjd1		# is V2q > (U1U2-V1q) + U3 ?
 	subq.l		&0x1, %d1		# yes, decrement and recheck
 	bra.b		lddadj1
@@ -416,7 +416,7 @@
 	tst.b		DDSECOND(%a6)	# both q words done?
 	bne.b		lddremain
 # first quotient digit now correct. store digit and shift the
-# (subtracted) dividend 
+# (subtracted) dividend
 	mov.w		%d1, DDQUOTIENT(%a6)
 	clr.l		%d1
 	swap		%d5
@@ -427,7 +427,7 @@
 	bra.w		lddnormalized
 lddremain:
 # add 2nd word to quotient, get the remainder.
-	mov.w 		%d1, DDQUOTIENT+2(%a6)
+	mov.w		%d1, DDQUOTIENT+2(%a6)
 # shift down one word/digit to renormalize remainder.
 	mov.w		%d5, %d6
 	swap		%d6
@@ -441,7 +441,7 @@
 	dbf		%d7, lddnlp
 lddrn:
 	mov.l		%d6, %d5		# remainder
-	mov.l		DDQUOTIENT(%a6), %d6 	# quotient
+	mov.l		DDQUOTIENT(%a6), %d6	# quotient
 
 	rts
 ldmm2:
@@ -471,7 +471,7 @@
 	clr.w		%d2			# lsw of two mixed products used,
 	swap		%d5			# now use msws of longwords
 	swap		%d2
-	add.l		%d2, %d5				
+	add.l		%d2, %d5
 	add.l		%d3, %d5	# %d5 now ms 32 bits of final product
 	rts
 
@@ -491,7 +491,7 @@
 #	0x4(sp) = multiplier						#
 #	0x8(sp) = multiplicand						#
 #	0xc(sp) = pointer to location to place 64-bit result		#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	0xc(sp) = points to location of 64-bit result			#
 #									#
@@ -524,9 +524,9 @@
 
 #########################################################################
 #	63			   32				0	#
-# 	----------------------------					#
-# 	| hi(mplier) * hi(mplicand)|					#
-# 	----------------------------					#
+#	----------------------------					#
+#	| hi(mplier) * hi(mplicand)|					#
+#	----------------------------					#
 #		     -----------------------------			#
 #		     | hi(mplier) * lo(mplicand) |			#
 #		     -----------------------------			#
@@ -589,7 +589,7 @@
 # the values at the location pointed to by a0.
 # use movm here to not disturb the condition codes.
 mulu64_end:
-	exg		%d1,%d0		
+	exg		%d1,%d0
 	movm.l		&0x0003,([0x10,%a6])		# save result
 
 # EPILOGUE BEGIN ########################################################
@@ -643,16 +643,16 @@
 # the result sign is the exclusive or of the operand sign bits.
 muls64_chk_md_sgn:
 	tst.l		%d1			# is multiplicand negative?
-	bge.b		muls64_alg		# no	
+	bge.b		muls64_alg		# no
 	neg.l		%d1			# make multiplicand positive
 
 	eori.b		&0x1,%d5		# calculate correct sign
 
 #########################################################################
 #	63			   32				0	#
-# 	----------------------------					#
-# 	| hi(mplier) * hi(mplicand)|					#
-# 	----------------------------					#
+#	----------------------------					#
+#	| hi(mplier) * hi(mplicand)|					#
+#	----------------------------					#
 #		     -----------------------------			#
 #		     | hi(mplier) * lo(mplicand) |			#
 #		     -----------------------------			#
@@ -726,7 +726,7 @@
 # the values at the location pointed to by a0.
 # use movm here to not disturb the condition codes.
 muls64_end:
-	exg		%d1,%d0		
+	exg		%d1,%d0
 	movm.l		&0x0003,([0x10,%a6])	# save result at (a0)
 
 # EPILOGUE BEGIN ########################################################
@@ -769,12 +769,12 @@
 # INPUT ***************************************************************	#
 #	0x4(sp) = Rn							#
 #	0x8(sp) = pointer to boundary pair				#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	cc = condition codes are set correctly				#
 #									#
 # ALGORITHM ***********************************************************	#
-# 	In the interest of simplicity, all operands are converted to	#
+#	In the interest of simplicity, all operands are converted to	#
 # longword size whether the operation is byte, word, or long. The	#
 # bounds are sign extended accordingly. If Rn is a data regsiter, Rn is #
 # also sign extended. If Rn is an address register, it need not be sign #
@@ -785,7 +785,7 @@
 
 set	CMP2_CC,	-4
 
-	global 		_060LSP__cmp2_Ab_
+	global		_060LSP__cmp2_Ab_
 _060LSP__cmp2_Ab_:
 
 # PROLOGUE BEGIN ########################################################
@@ -795,7 +795,7 @@
 # PROLOGUE END ##########################################################
 
 	mov.w		%cc,CMP2_CC(%a6)
-	mov.l		0x8(%a6), %d2 		# get regval
+	mov.l		0x8(%a6), %d2		# get regval
 
 	mov.b		([0xc,%a6],0x0),%d0
 	mov.b		([0xc,%a6],0x1),%d1
@@ -804,7 +804,7 @@
 	extb.l		%d1			# sign extend hi bnd
 	bra.w		l_cmp2_cmp		# go do the compare emulation
 
-	global 		_060LSP__cmp2_Aw_
+	global		_060LSP__cmp2_Aw_
 _060LSP__cmp2_Aw_:
 
 # PROLOGUE BEGIN ########################################################
@@ -814,7 +814,7 @@
 # PROLOGUE END ##########################################################
 
 	mov.w		%cc,CMP2_CC(%a6)
-	mov.l		0x8(%a6), %d2 		# get regval
+	mov.l		0x8(%a6), %d2		# get regval
 
 	mov.w		([0xc,%a6],0x0),%d0
 	mov.w		([0xc,%a6],0x2),%d1
@@ -823,7 +823,7 @@
 	ext.l		%d1			# sign extend hi bnd
 	bra.w		l_cmp2_cmp		# go do the compare emulation
 
-	global 		_060LSP__cmp2_Al_
+	global		_060LSP__cmp2_Al_
 _060LSP__cmp2_Al_:
 
 # PROLOGUE BEGIN ########################################################
@@ -833,13 +833,13 @@
 # PROLOGUE END ##########################################################
 
 	mov.w		%cc,CMP2_CC(%a6)
-	mov.l		0x8(%a6), %d2 		# get regval
+	mov.l		0x8(%a6), %d2		# get regval
 
 	mov.l		([0xc,%a6],0x0),%d0
 	mov.l		([0xc,%a6],0x4),%d1
 	bra.w		l_cmp2_cmp		# go do the compare emulation
 
-	global 		_060LSP__cmp2_Db_
+	global		_060LSP__cmp2_Db_
 _060LSP__cmp2_Db_:
 
 # PROLOGUE BEGIN ########################################################
@@ -849,7 +849,7 @@
 # PROLOGUE END ##########################################################
 
 	mov.w		%cc,CMP2_CC(%a6)
-	mov.l		0x8(%a6), %d2 		# get regval
+	mov.l		0x8(%a6), %d2		# get regval
 
 	mov.b		([0xc,%a6],0x0),%d0
 	mov.b		([0xc,%a6],0x1),%d1
@@ -862,7 +862,7 @@
 	extb.l		%d2			# sign extend data byte
 	bra.w		l_cmp2_cmp		# go do the compare emulation
 
-	global 		_060LSP__cmp2_Dw_
+	global		_060LSP__cmp2_Dw_
 _060LSP__cmp2_Dw_:
 
 # PROLOGUE BEGIN ########################################################
@@ -872,7 +872,7 @@
 # PROLOGUE END ##########################################################
 
 	mov.w		%cc,CMP2_CC(%a6)
-	mov.l		0x8(%a6), %d2 		# get regval
+	mov.l		0x8(%a6), %d2		# get regval
 
 	mov.w		([0xc,%a6],0x0),%d0
 	mov.w		([0xc,%a6],0x2),%d1
@@ -885,7 +885,7 @@
 	ext.l		%d2			# sign extend data word
 	bra.w		l_cmp2_cmp		# go emulate compare
 
-	global 		_060LSP__cmp2_Dl_
+	global		_060LSP__cmp2_Dl_
 _060LSP__cmp2_Dl_:
 
 # PROLOGUE BEGIN ########################################################
@@ -895,14 +895,14 @@
 # PROLOGUE END ##########################################################
 
 	mov.w		%cc,CMP2_CC(%a6)
-	mov.l		0x8(%a6), %d2 		# get regval
+	mov.l		0x8(%a6), %d2		# get regval
 
 	mov.l		([0xc,%a6],0x0),%d0
 	mov.l		([0xc,%a6],0x4),%d1
 
 #
 # To set the ccodes correctly:
-# 	(1) save 'Z' bit from (Rn - lo)
+#	(1) save 'Z' bit from (Rn - lo)
 #	(2) save 'Z' and 'N' bits from ((hi - lo) - (Rn - hi))
 #	(3) keep 'X', 'N', and 'V' from before instruction
 #	(4) combine ccodes
@@ -912,7 +912,7 @@
 	mov.w		%cc, %d3		# fetch resulting ccodes
 	andi.b		&0x4, %d3		# keep 'Z' bit
 	sub.l		%d0, %d1		# (hi - lo)
-	cmp.l	 	%d1,%d2			# ((hi - lo) - (Rn - hi))
+	cmp.l		%d1,%d2			# ((hi - lo) - (Rn - hi))
 
 	mov.w		%cc, %d4		# fetch resulting ccodes
 	or.b		%d4, %d3		# combine w/ earlier ccodes
diff -Nru a/arch/m68k/ifpsp060/src/isp.S b/arch/m68k/ifpsp060/src/isp.S
--- a/arch/m68k/ifpsp060/src/isp.S	Sun May 16 01:18:34 2004
+++ b/arch/m68k/ifpsp060/src/isp.S	Sun May 16 01:18:34 2004
@@ -5,10 +5,10 @@
 Production Release P1.00 -- October 10, 1994
 
 M68060 Software Package Copyright © 1993, 1994 Motorola Inc.  All rights reserved.
- 
+
 THE SOFTWARE is provided on an "AS IS" basis and without warranty.
 To the maximum extent permitted by applicable law,
-MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, 
+MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED,
 INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
 and any warranty against infringement with regard to the SOFTWARE
 (INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials.
@@ -322,21 +322,21 @@
 # Misc. #
 #########
 set BYTE,		1			# len(byte) == 1 byte
-set WORD, 		2			# len(word) == 2 bytes
-set LONG, 		4			# len(longword) == 4 bytes
+set WORD,		2			# len(word) == 2 bytes
+set LONG,		4			# len(longword) == 4 bytes
 
 #########################################################################
 # XDEF ****************************************************************	#
 #	_isp_unimp(): 060ISP entry point for Unimplemented Instruction	#
 #									#
-#	This handler should be the first code executed upon taking the 	#
-# 	"Unimplemented Integer Instruction" exception in an operating	#
+#	This handler should be the first code executed upon taking the	#
+#	"Unimplemented Integer Instruction" exception in an operating	#
 #	system.								#
 #									#
 # XREF ****************************************************************	#
 #	_imem_read_{word,long}() - read instruction word/longword	#
 #	_mul64() - emulate 64-bit multiply				#
-# 	_div64() - emulate 64-bit divide				#
+#	_div64() - emulate 64-bit divide				#
 #	_moveperipheral() - emulate "movep"				#
 #	_compandset() - emulate misaligned "cas"			#
 #	_compandset2() - emulate "cas2"					#
@@ -349,7 +349,7 @@
 #									#
 # INPUT ***************************************************************	#
 #	- The system stack contains the Unimp Int Instr stack frame	#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	If Trace exception:						#
 #	- The system stack changed to contain Trace exc stack frame	#
@@ -366,8 +366,8 @@
 #	This handler fetches the first instruction longword from	#
 # memory and decodes it to determine which of the unimplemented		#
 # integer instructions caused this exception. This handler then calls	#
-# one of _mul64(), _div64(), _moveperipheral(), _compandset(), 		#
-# _compandset2(), or _chk2_cmp2() as appropriate. 			#
+# one of _mul64(), _div64(), _moveperipheral(), _compandset(),		#
+# _compandset2(), or _chk2_cmp2() as appropriate.			#
 #	Some of these instructions, by their nature, may produce other	#
 # types of exceptions. "div" can produce a divide-by-zero exception,	#
 # and "chk2" can cause a "Chk" exception. In both cases, the current	#
@@ -375,7 +375,7 @@
 # of the correct exception type and an exit must be made through	#
 # _real_divbyzero() or _real_chk() as appropriate. In addition, all	#
 # instructions may be executing while Trace is enabled. If so, then	#
-# a Trace exception stack frame must be created and an exit made 	#
+# a Trace exception stack frame must be created and an exit made	#
 # through _real_trace().						#
 #	Meanwhile, if any read or write to memory using the		#
 # _mem_{read,write}() "callout"s returns a failing value, then an	#
@@ -384,19 +384,19 @@
 #	If none of these occur, then a normal exit is made through	#
 # _isp_done().								#
 #									#
-#	This handler, upon entry, saves almost all user-visible 	#
+#	This handler, upon entry, saves almost all user-visible		#
 # address and data registers to the stack. Although this may seem to	#
 # cause excess memory traffic, it was found that due to having to	#
 # access these register files for things like data retrieval and <ea>	#
 # calculations, it was more efficient to have them on the stack where	#
-# they could be accessed by indexing rather than to make subroutine 	#
-# calls to retrieve a register of a particular index. 			#
+# they could be accessed by indexing rather than to make subroutine	#
+# calls to retrieve a register of a particular index.			#
 #									#
 #########################################################################
 
 	global		_isp_unimp
 _isp_unimp:
-	link.w 		%a6,&-LOCAL_SIZE	# create room for stack frame
+	link.w		%a6,&-LOCAL_SIZE	# create room for stack frame
 
 	movm.l		&0x3fff,EXC_DREGS(%a6)	# store d0-d7/a0-a5
 	mov.l		(%a6),EXC_A6(%a6)	# store a6
@@ -428,9 +428,9 @@
 	bsr.l		_imem_read_long		# fetch opword & extword
 	mov.l		%d0,EXC_OPWORD(%a6)	# store extword on stack
 
-	
+
 #########################################################################
-# muls.l	0100 1100 00 |<ea>|	0*** 1100 0000 0*** 		#
+# muls.l	0100 1100 00 |<ea>|	0*** 1100 0000 0***		#
 # mulu.l	0100 1100 00 |<ea>|	0*** 0100 0000 0***		#
 #									#
 # divs.l	0100 1100 01 |<ea>|	0*** 1100 0000 0***		#
@@ -514,7 +514,7 @@
 	tst.b		EXC_ISR(%a6)		# no; is trace enabled?
 	bmi.w		uieh_trace_a7		# yes
 	bra.w		uieh_a7			# no
-	
+
 #
 # now, w/ group2, make movep's decode the fastest since it will
 # most likely be used the most.
@@ -532,7 +532,7 @@
 	beq.b		uieh_chk2cmp2		# go handle chk2,cmp2
 
 	swap		%d0			# put opword in lo word
-	cmpi.b	 	%d0,&0xfc		# test for cas2
+	cmpi.b		%d0,&0xfc		# test for cas2
 	beq.b		uieh_cas2		# go handle cas2
 
 uieh_cas:
@@ -585,7 +585,7 @@
 	mov.l		%a0,%usp		# restore it
 
 uieh_finish:
-	movm.l		EXC_DREGS(%a6),&0x3fff 	# restore d0-d7/a0-a5
+	movm.l		EXC_DREGS(%a6),&0x3fff	# restore d0-d7/a0-a5
 
 	btst		&0x7,EXC_ISR(%a6)	# is trace mode on?
 	bne.b		uieh_trace		# yes;go handle trace mode
@@ -596,7 +596,7 @@
 	bra.l		_isp_done
 
 #
-# The instruction that was just emulated was also being traced. The trace 
+# The instruction that was just emulated was also being traced. The trace
 # trap for this instruction will be lost unless we jump to the trace handler.
 # So, here we create a Trace Exception format number two exception stack
 # frame from the Unimplemented Integer Intruction Exception stack frame
@@ -607,11 +607,11 @@
 #		* 0x0 *  0x0f4	*	*    Current	*
 #		*****************	*      PC	*
 #		*    Current	*	*****************
-#		*      PC 	*	* 0x2 *  0x024	*
+#		*      PC	*	* 0x2 *  0x024	*
 #		*****************	*****************
 #		*      SR	*	*     Next	*
 #		*****************	*      PC	*
-#	      ->*     Old   	*	*****************
+#	      ->*     Old	*	*****************
 #  from link -->*      A6	*	*      SR	*
 #	        *****************	*****************
 #	       /*      A7	*	*      New	* <-- for final unlink
@@ -651,7 +651,7 @@
 #
 uieh_chk_trap:
 	mov.b		EXC_CC+1(%a6),EXC_ISR+1(%a6) # insert new ccodes
-	movm.l		EXC_DREGS(%a6),&0x3fff 	# restore d0-d7/a0-a5
+	movm.l		EXC_DREGS(%a6),&0x3fff	# restore d0-d7/a0-a5
 
 	mov.w		EXC_ISR(%a6),(%a6)	# put new SR on stack
 	mov.l		EXC_IPC(%a6),0x8(%a6)	# put "Current PC" on stack
@@ -678,14 +678,14 @@
 #				*****************
 #				    (6 words)
 #
-# the divide instruction should take an integer divide by zero trap. so, here 
-# we must create a divbyzero stack frame from an unimplemented integer 
-# instruction exception frame and jump to the user supplied entry point 
+# the divide instruction should take an integer divide by zero trap. so, here
+# we must create a divbyzero stack frame from an unimplemented integer
+# instruction exception frame and jump to the user supplied entry point
 # "_real_divbyzero()".
 #
 uieh_divbyzero:
 	mov.b		EXC_CC+1(%a6),EXC_ISR+1(%a6) # insert new ccodes
-	movm.l		EXC_DREGS(%a6),&0x3fff 	# restore d0-d7/a0-a5
+	movm.l		EXC_DREGS(%a6),&0x3fff	# restore d0-d7/a0-a5
 
 	mov.w		EXC_ISR(%a6),(%a6)	# put new SR on stack
 	mov.l		EXC_IPC(%a6),0x8(%a6)	# put "Current PC" on stack
@@ -712,9 +712,9 @@
 #	*****************	*****************
 #	    (4 words)		    (6 words)
 #
-# the divide instruction should take an integer divide by zero trap. so, here 
-# we must create a divbyzero stack frame from an unimplemented integer 
-# instruction exception frame and jump to the user supplied entry point 
+# the divide instruction should take an integer divide by zero trap. so, here
+# we must create a divbyzero stack frame from an unimplemented integer
+# instruction exception frame and jump to the user supplied entry point
 # "_real_divbyzero()".
 #
 # However, we must also deal with the fact that (a7)+ was used from supervisor
@@ -722,7 +722,7 @@
 #
 uieh_divbyzero_a7:
 	mov.b		EXC_CC+1(%a6),EXC_ISR+1(%a6) # insert new ccodes
-	movm.l		EXC_DREGS(%a6),&0x3fff 	# restore d0-d7/a0-a5
+	movm.l		EXC_DREGS(%a6),&0x3fff	# restore d0-d7/a0-a5
 
 	mov.l		EXC_IPC(%a6),0xc(%a6)	# put "Current PC" on stack
 	mov.w		&0x2014,0xa(%a6)	# put Vector Offset on stack
@@ -748,8 +748,8 @@
 #	*****************	*****************
 #	    (4 words)		    (6 words)
 #
-# 
-# The instruction that was just emulated was also being traced. The trace 
+#
+# The instruction that was just emulated was also being traced. The trace
 # trap for this instruction will be lost unless we jump to the trace handler.
 # So, here we create a Trace Exception format number two exception stack
 # frame from the Unimplemented Integer Intruction Exception stack frame
@@ -760,7 +760,7 @@
 #
 uieh_trace_a7:
 	mov.b		EXC_CC+1(%a6),EXC_ISR+1(%a6) # insert new ccodes
-	movm.l		EXC_DREGS(%a6),&0x3fff 	# restore d0-d7/a0-a5
+	movm.l		EXC_DREGS(%a6),&0x3fff	# restore d0-d7/a0-a5
 
 	mov.l		EXC_IPC(%a6),0xc(%a6)	# put "Current PC" on stack
 	mov.w		&0x2024,0xa(%a6)	# put Vector Offset on stack
@@ -772,12 +772,12 @@
 	bra.l		_real_trace
 
 #
-#				   UIEH FRAME	
+#				   UIEH FRAME
 #				*****************
 #				* 0x0 * 0x0f4	*
 #	   UIEH FRAME		*****************
 #	*****************	*     Next	*
-#	* 0x0 *  0x0f4	*	*      PC	*	
+#	* 0x0 *  0x0f4	*	*      PC	*
 #	*****************	*****************
 #	*    Current	*	*      SR	*
 #	*      PC	*	*****************
@@ -787,7 +787,7 @@
 #	    (4 words)
 uieh_a7:
 	mov.b		EXC_CC+1(%a6),EXC_ISR+1(%a6) # insert new ccodes
-	movm.l		EXC_DREGS(%a6),&0x3fff 	# restore d0-d7/a0-a5
+	movm.l		EXC_DREGS(%a6),&0x3fff	# restore d0-d7/a0-a5
 
 	mov.w		&0x00f4,0xe(%a6)	# put Vector Offset on stack
 	mov.l		EXC_EXTWPTR(%a6),0xa(%a6) # put "Next PC" on stack
@@ -803,11 +803,11 @@
 # a0 = failing address
 # d0 = fslw
 isp_dacc:
-	mov.l		%a0,(%a6)		# save address	
+	mov.l		%a0,(%a6)		# save address
 	mov.l		%d0,-0x4(%a6)		# save partial fslw
 
 	lea		-64(%a6),%sp
-	movm.l		(%sp)+,&0x7fff 		# restore d0-d7/a0-a6
+	movm.l		(%sp)+,&0x7fff		# restore d0-d7/a0-a6
 
 	mov.l		0xc(%sp),-(%sp)		# move voff,hi(pc)
 	mov.l		0x4(%sp),0x10(%sp)	# store fslw
@@ -822,11 +822,11 @@
 # FSLW:
 #	misaligned = true
 #	read = true
-# 	size = word
-# 	instruction = true
-# 	software emulation error = true
+#	size = word
+#	instruction = true
+#	software emulation error = true
 isp_iacc:
-	movm.l		EXC_DREGS(%a6),&0x3fff 	# restore d0-d7/a0-a5
+	movm.l		EXC_DREGS(%a6),&0x3fff	# restore d0-d7/a0-a5
 	unlk		%a6			# unlink frame
 	sub.w		&0x8,%sp		# make room for acc frame
 	mov.l		0x8(%sp),(%sp)		# store sr,lo(pc)
@@ -840,7 +840,7 @@
 	beq.b		isp_acc_exit2		# user
 	bset		&0x2,0xd(%sp)		# set supervisor TM bit
 isp_acc_exit2:
-	bra.l		_real_access		
+	bra.l		_real_access
 
 # if the addressing mode was (an)+ or -(an), the address register must
 # be restored to its pre-exception value before entering _real_access.
@@ -858,14 +858,14 @@
 #	_calc_ea(): routine to calculate effective address		#
 #									#
 # XREF ****************************************************************	#
-# 	_imem_read_word() - read instruction word			#
-# 	_imem_read_long() - read instruction longword			#
-# 	_dmem_read_long() - read data longword (for memory indirect)	#
-# 	isp_iacc() - handle instruction access error exception		#
+#	_imem_read_word() - read instruction word			#
+#	_imem_read_long() - read instruction longword			#
+#	_dmem_read_long() - read data longword (for memory indirect)	#
+#	isp_iacc() - handle instruction access error exception		#
 #	isp_dacc() - handle data access error exception			#
 #									#
 # INPUT ***************************************************************	#
-# 	d0 = number of bytes related to effective address (w,l)		#
+#	d0 = number of bytes related to effective address (w,l)		#
 #									#
 # OUTPUT **************************************************************	#
 #	If exiting through isp_dacc...					#
@@ -877,22 +877,22 @@
 #		a0 = effective address					#
 #									#
 # ALGORITHM ***********************************************************	#
-# 	The effective address type is decoded from the opword residing	#
-# on the stack. A jump table is used to vector to a routine for the 	#
+#	The effective address type is decoded from the opword residing	#
+# on the stack. A jump table is used to vector to a routine for the	#
 # appropriate mode. Since none of the emulated integer instructions	#
 # uses byte-sized operands, only handle word and long operations.	#
 #									#
-# 	Dn,An	- shouldn't enter here					#
+#	Dn,An	- shouldn't enter here					#
 #	(An)	- fetch An value from stack				#
-# 	-(An)	- fetch An value from stack; return decr value;		#
+#	-(An)	- fetch An value from stack; return decr value;		#
 #		  place decr value on stack; store old value in case of	#
-#		  future access error; if -(a7), set mda7_flg in 	#
+#		  future access error; if -(a7), set mda7_flg in	#
 #		  SPCOND_FLG						#
 #	(An)+	- fetch An value from stack; return value;		#
 #		  place incr value on stack; store old value in case of	#
 #		  future access error; if (a7)+, set mia7_flg in	#
 #		  SPCOND_FLG						#
-#	(d16,An) - fetch An value from stack; read d16 using 		#
+#	(d16,An) - fetch An value from stack; read d16 using		#
 #		  _imem_read_word(); fetch may fail -> branch to	#
 #		  isp_iacc()						#
 #	(xxx).w,(xxx).l - use _imem_read_{word,long}() to fetch		#
@@ -904,7 +904,7 @@
 #		  isp_iacc()						#
 #	everything else - read needed displacements as appropriate w/	#
 #		  _imem_read_{word,long}(); read may fail; if memory	#
-# 		  indirect, read indirect address using			#
+#		  indirect, read indirect address using			#
 #		  _dmem_read_long() which may also fail			#
 #									#
 #########################################################################
@@ -944,59 +944,59 @@
 	short		tbl_ea_mode	-	tbl_ea_mode
 	short		tbl_ea_mode	-	tbl_ea_mode
 
-	short		addr_ind_a0	- 	tbl_ea_mode
-	short		addr_ind_a1	- 	tbl_ea_mode
-	short		addr_ind_a2	- 	tbl_ea_mode
-	short		addr_ind_a3 	- 	tbl_ea_mode
-	short		addr_ind_a4 	- 	tbl_ea_mode
-	short		addr_ind_a5 	- 	tbl_ea_mode
-	short		addr_ind_a6 	- 	tbl_ea_mode
-	short		addr_ind_a7 	- 	tbl_ea_mode
-
-	short		addr_ind_p_a0	- 	tbl_ea_mode
-	short		addr_ind_p_a1 	- 	tbl_ea_mode
-	short		addr_ind_p_a2 	- 	tbl_ea_mode
-	short		addr_ind_p_a3 	- 	tbl_ea_mode
-	short		addr_ind_p_a4 	- 	tbl_ea_mode
-	short		addr_ind_p_a5 	- 	tbl_ea_mode
-	short		addr_ind_p_a6 	- 	tbl_ea_mode
-	short		addr_ind_p_a7 	- 	tbl_ea_mode
-
-	short		addr_ind_m_a0 		- 	tbl_ea_mode
-	short		addr_ind_m_a1 		- 	tbl_ea_mode
-	short		addr_ind_m_a2 		- 	tbl_ea_mode
-	short		addr_ind_m_a3 		- 	tbl_ea_mode
-	short		addr_ind_m_a4 		- 	tbl_ea_mode
-	short		addr_ind_m_a5 		- 	tbl_ea_mode
-	short		addr_ind_m_a6 		- 	tbl_ea_mode
-	short		addr_ind_m_a7 		- 	tbl_ea_mode
-
-	short		addr_ind_disp_a0	- 	tbl_ea_mode
-	short		addr_ind_disp_a1 	- 	tbl_ea_mode
-	short		addr_ind_disp_a2 	- 	tbl_ea_mode
-	short		addr_ind_disp_a3 	- 	tbl_ea_mode
-	short		addr_ind_disp_a4 	- 	tbl_ea_mode
-	short		addr_ind_disp_a5 	- 	tbl_ea_mode
-	short		addr_ind_disp_a6 	- 	tbl_ea_mode
+	short		addr_ind_a0	-	tbl_ea_mode
+	short		addr_ind_a1	-	tbl_ea_mode
+	short		addr_ind_a2	-	tbl_ea_mode
+	short		addr_ind_a3	-	tbl_ea_mode
+	short		addr_ind_a4	-	tbl_ea_mode
+	short		addr_ind_a5	-	tbl_ea_mode
+	short		addr_ind_a6	-	tbl_ea_mode
+	short		addr_ind_a7	-	tbl_ea_mode
+
+	short		addr_ind_p_a0	-	tbl_ea_mode
+	short		addr_ind_p_a1	-	tbl_ea_mode
+	short		addr_ind_p_a2	-	tbl_ea_mode
+	short		addr_ind_p_a3	-	tbl_ea_mode
+	short		addr_ind_p_a4	-	tbl_ea_mode
+	short		addr_ind_p_a5	-	tbl_ea_mode
+	short		addr_ind_p_a6	-	tbl_ea_mode
+	short		addr_ind_p_a7	-	tbl_ea_mode
+
+	short		addr_ind_m_a0		-	tbl_ea_mode
+	short		addr_ind_m_a1		-	tbl_ea_mode
+	short		addr_ind_m_a2		-	tbl_ea_mode
+	short		addr_ind_m_a3		-	tbl_ea_mode
+	short		addr_ind_m_a4		-	tbl_ea_mode
+	short		addr_ind_m_a5		-	tbl_ea_mode
+	short		addr_ind_m_a6		-	tbl_ea_mode
+	short		addr_ind_m_a7		-	tbl_ea_mode
+
+	short		addr_ind_disp_a0	-	tbl_ea_mode
+	short		addr_ind_disp_a1	-	tbl_ea_mode
+	short		addr_ind_disp_a2	-	tbl_ea_mode
+	short		addr_ind_disp_a3	-	tbl_ea_mode
+	short		addr_ind_disp_a4	-	tbl_ea_mode
+	short		addr_ind_disp_a5	-	tbl_ea_mode
+	short		addr_ind_disp_a6	-	tbl_ea_mode
 	short		addr_ind_disp_a7	-	tbl_ea_mode
 
-	short		_addr_ind_ext 		- 	tbl_ea_mode
-	short		_addr_ind_ext 		- 	tbl_ea_mode
-	short		_addr_ind_ext 		- 	tbl_ea_mode
-	short		_addr_ind_ext 		- 	tbl_ea_mode
-	short		_addr_ind_ext 		- 	tbl_ea_mode
-	short		_addr_ind_ext 		- 	tbl_ea_mode
-	short		_addr_ind_ext 		- 	tbl_ea_mode
-	short		_addr_ind_ext 		- 	tbl_ea_mode
-
-	short		abs_short		- 	tbl_ea_mode
-	short		abs_long		- 	tbl_ea_mode
-	short		pc_ind			- 	tbl_ea_mode
-	short		pc_ind_ext		- 	tbl_ea_mode
-	short		immediate		- 	tbl_ea_mode
-	short		tbl_ea_mode		- 	tbl_ea_mode
-	short		tbl_ea_mode		- 	tbl_ea_mode
-	short		tbl_ea_mode		- 	tbl_ea_mode
+	short		_addr_ind_ext		-	tbl_ea_mode
+	short		_addr_ind_ext		-	tbl_ea_mode
+	short		_addr_ind_ext		-	tbl_ea_mode
+	short		_addr_ind_ext		-	tbl_ea_mode
+	short		_addr_ind_ext		-	tbl_ea_mode
+	short		_addr_ind_ext		-	tbl_ea_mode
+	short		_addr_ind_ext		-	tbl_ea_mode
+	short		_addr_ind_ext		-	tbl_ea_mode
+
+	short		abs_short		-	tbl_ea_mode
+	short		abs_long		-	tbl_ea_mode
+	short		pc_ind			-	tbl_ea_mode
+	short		pc_ind_ext		-	tbl_ea_mode
+	short		immediate		-	tbl_ea_mode
+	short		tbl_ea_mode		-	tbl_ea_mode
+	short		tbl_ea_mode		-	tbl_ea_mode
+	short		tbl_ea_mode		-	tbl_ea_mode
 
 ###################################
 # Address register indirect: (An) #
@@ -1041,7 +1041,7 @@
 	mov.l		EXC_A0(%a6),%a0		# load current value
 	add.l		%a0,%d0			# increment
 	mov.l		%d0,EXC_A0(%a6)		# save incremented value
-	
+
 	mov.l		%a0,EXC_SAVVAL(%a6)	# save in case of access error
 	mov.b		&0x0,EXC_SAVREG(%a6)	# save regno, too
 	mov.b		&restore_flg,SPCOND_FLG(%a6) # set flag
@@ -1339,7 +1339,7 @@
 	mov.l		%a0,%d3			# put base in d3
 
 	bra.l		calc_mem_ind		# calc memory indirect
-	
+
 addr_ind_index_8bit:
 	mov.l		%d2,-(%sp)		# save old d2
 
@@ -1370,8 +1370,8 @@
 # Immediate: #<data> #
 #########################################################################
 # word, long: <ea> of the data is the current extension word		#
-# 	pointer value. new extension word pointer is simply the old	#
-# 	plus the number of bytes in the data type(2 or 4).		#
+#	pointer value. new extension word pointer is simply the old	#
+#	plus the number of bytes in the data type(2 or 4).		#
 #########################################################################
 immediate:
 	mov.b		&immed_flg,SPCOND_FLG(%a6) # set immediate flag
@@ -1455,9 +1455,9 @@
 	mov.l		%a0,%d3			# put base in d3
 
 	bra.l		calc_mem_ind		# calc memory indirect
-	
+
 pc_ind_index_8bit:
- 	mov.l		%d2,-(%sp)		# create a temp register
+	mov.l		%d2,-(%sp)		# create a temp register
 
 	mov.l		%d0,%d1			# make extword copy
 	rol.w		&0x4,%d1		# rotate reg num into place
@@ -1512,14 +1512,14 @@
 no_base_sup:
 	bfextu		%d5{&26:&2},%d0	# get bd size
 #	beq.l		_error			# if (size == 0) it's reserved
-	cmpi.b	 	%d0,&2
+	cmpi.b		%d0,&2
 	blt.b		no_bd
 	beq.b		get_word_bd
 
 	mov.l		EXC_EXTWPTR(%a6),%a0	# fetch instruction addr
 	addq.l		&0x4,EXC_EXTWPTR(%a6)	# incr instruction ptr
 	bsr.l		_imem_read_long
-	
+
 	tst.l		%d1			# ifetch error?
 	bne.l		isp_iacc		# yes
 
@@ -1533,16 +1533,16 @@
 	bne.l		isp_iacc		# yes
 
 	ext.l		%d0			# sign extend bd
-	
+
 chk_ind:
 	add.l		%d0,%d3			# base += bd
 no_bd:
 	bfextu		%d5{&30:&2},%d0		# is od suppressed?
 	beq.w		aii_bd
-	cmpi.b	 	%d0,&0x2
+	cmpi.b		%d0,&0x2
 	blt.b		null_od
 	beq.b		word_od
-	
+
 	mov.l		EXC_EXTWPTR(%a6),%a0	# fetch instruction addr
 	addq.l		&0x4,EXC_EXTWPTR(%a6)	# incr instruction ptr
 	bsr.l		_imem_read_long
@@ -1550,7 +1550,7 @@
 	tst.l		%d1			# ifetch error?
 	bne.l		isp_iacc		# yes
 
-	bra.b 		add_them
+	bra.b		add_them
 
 word_od:
 	mov.l		EXC_EXTWPTR(%a6),%a0	# fetch instruction addr
@@ -1604,10 +1604,10 @@
 # must create an access error frame. here, we pass a skeleton fslw
 # and the failing address to the routine that creates the new frame.
 # FSLW:
-# 	read = true
-# 	size = longword
+#	read = true
+#	size = longword
 #	TM = data
-# 	software emulation error = true
+#	software emulation error = true
 calc_ea_err:
 	mov.l		%d3,%a0			# pass failing address
 	mov.l		&0x01010001,%d0		# pass fslw
@@ -1615,7 +1615,7 @@
 
 #########################################################################
 # XDEF **************************************************************** #
-# 	_moveperipheral(): routine to emulate movep instruction		#
+#	_moveperipheral(): routine to emulate movep instruction		#
 #									#
 # XREF **************************************************************** #
 #	_dmem_read_byte() - read byte from memory			#
@@ -1647,7 +1647,7 @@
 # movep.(w,l)	Dx,(d,Ay) #
 # movep.(w,l)	(d,Ay),Dx #
 ###########################
-	global 		_moveperipheral
+	global		_moveperipheral
 _moveperipheral:
 	mov.w		EXC_OPWORD(%a6),%d1	# fetch the opcode word
 
@@ -1793,11 +1793,11 @@
 	mov.b		EXC_OPWORD(%a6),%d1
 	lsr.b		&0x1,%d1
 	and.w		&0x7,%d1		# extract Dx from opcode word
-	
+
 	mov.l		%d2,(EXC_DREGS,%a6,%d1.w*4) # store dx
 
 	rts
-	
+
 # a0 = dst addr
 m2rwtrans:
 	mov.l		%a0,%a2			# store addr
@@ -1823,7 +1823,7 @@
 	mov.b		EXC_OPWORD(%a6),%d1
 	lsr.b		&0x1,%d1
 	and.w		&0x7,%d1		# extract Dx from opcode word
-	
+
 	mov.w		%d2,(EXC_DREGS+2,%a6,%d1.w*4) # store dx
 
 	rts
@@ -1832,7 +1832,7 @@
 # must create an access error frame. here, we pass a skeleton fslw
 # and the failing address to the routine that creates the new frame.
 # FSLW:
-# 	write = true
+#	write = true
 #	size = byte
 #	TM = data
 #	software emulation error = true
@@ -1842,7 +1842,7 @@
 	bra.l		isp_dacc
 
 # FSLW:
-# 	read = true
+#	read = true
 #	size = byte
 #	TM = data
 #	software emulation error = true
@@ -1853,12 +1853,12 @@
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	_chk2_cmp2(): routine to emulate chk2/cmp2 instructions		#
+#	_chk2_cmp2(): routine to emulate chk2/cmp2 instructions		#
 #									#
 # XREF ****************************************************************	#
 #	_calc_ea(): calculate effective address				#
 #	_dmem_read_long(): read operands				#
-# 	_dmem_read_word(): read operands				#
+#	_dmem_read_word(): read operands				#
 #	isp_dacc(): handle data access error exception			#
 #									#
 # INPUT ***************************************************************	#
@@ -1869,25 +1869,25 @@
 #		a0 = failing address					#
 #		d0 = FSLW						#
 #	else								#
-# 		none							#
+#		none							#
 #									#
 # ALGORITHM ***********************************************************	#
 #	First, calculate the effective address, then fetch the byte,	#
-# word, or longword sized operands. Then, in the interest of 		#
-# simplicity, all operands are converted to longword size whether the 	#
-# operation is byte, word, or long. The bounds are sign extended 	#
-# accordingly. If Rn is a data regsiter, Rn is also sign extended. If 	#
-# Rn is an address register, it need not be sign extended since the 	#
+# word, or longword sized operands. Then, in the interest of		#
+# simplicity, all operands are converted to longword size whether the	#
+# operation is byte, word, or long. The bounds are sign extended	#
+# accordingly. If Rn is a data regsiter, Rn is also sign extended. If	#
+# Rn is an address register, it need not be sign extended since the	#
 # full register is always used.						#
 #	The comparisons are made and the condition codes calculated.	#
 # If the instruction is chk2 and the Rn value is out-of-bounds, set	#
 # the ichk_flg in SPCOND_FLG.						#
-#	If the memory fetch returns a failing value, pass the failing 	#
+#	If the memory fetch returns a failing value, pass the failing	#
 # address and FSLW to the isp_dacc() routine.				#
 #									#
 #########################################################################
 
-	global 		_chk2_cmp2
+	global		_chk2_cmp2
 _chk2_cmp2:
 
 # passing size parameter doesn't matter since chk2 & cmp2 can't do
@@ -1974,7 +1974,7 @@
 
 #
 # To set the ccodes correctly:
-# 	(1) save 'Z' bit from (Rn - lo)
+#	(1) save 'Z' bit from (Rn - lo)
 #	(2) save 'Z' and 'N' bits from ((hi - lo) - (Rn - hi))
 #	(3) keep 'X', 'N', and 'V' from before instruction
 #	(4) combine ccodes
@@ -1984,7 +1984,7 @@
 	mov.w		%cc, %d3		# fetch resulting ccodes
 	andi.b		&0x4, %d3		# keep 'Z' bit
 	sub.l		%d0, %d1		# (hi - lo)
-	cmp.l	 	%d1,%d2			# ((hi - lo) - (Rn - hi))
+	cmp.l		%d1,%d2			# ((hi - lo) - (Rn - hi))
 
 	mov.w		%cc, %d4		# fetch resulting ccodes
 	or.b		%d4, %d3		# combine w/ earlier ccodes
@@ -2003,7 +2003,7 @@
 # this code handles the only difference between chk2 and cmp2. chk2 would
 # have trapped out if the value was out of bounds. we check this by seeing
 # if the 'N' bit was set by the operation.
-chk2_finish:	
+chk2_finish:
 	btst		&0x0, %d4		# is 'N' bit set?
 	bne.b		chk2_trap		# yes;chk2 should trap
 	rts
@@ -2018,7 +2018,7 @@
 #	read = true
 #	size = longword
 #	TM = data
-# 	software emulation error = true
+#	software emulation error = true
 chk2_cmp2_err_l:
 	mov.l		%a2,%a0			# pass failing address
 	mov.l		&0x01010001,%d0		# pass fslw
@@ -2028,7 +2028,7 @@
 #	read = true
 #	size = word
 #	TM = data
-# 	software emulation error = true
+#	software emulation error = true
 chk2_cmp2_err_w:
 	mov.l		%a2,%a0			# pass failing address
 	mov.l		&0x01410001,%d0		# pass fslw
@@ -2036,12 +2036,12 @@
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	_div64(): routine to emulate div{u,s}.l <ea>,Dr:Dq		#
+#	_div64(): routine to emulate div{u,s}.l <ea>,Dr:Dq		#
 #							64/32->32r:32q	#
 #									#
 # XREF ****************************************************************	#
 #	_calc_ea() - calculate effective address			#
-# 	isp_iacc() - handle instruction access error exception		#
+#	isp_iacc() - handle instruction access error exception		#
 #	isp_dacc() - handle data access error exception			#
 #	isp_restore() - restore An on access error w/ -() or ()+	#
 #									#
@@ -2049,24 +2049,24 @@
 #	none								#
 #									#
 # OUTPUT **************************************************************	#
-# 	If exiting through isp_dacc...					#
+#	If exiting through isp_dacc...					#
 #		a0 = failing address					#
-# 		d0 = FSLW						#
+#		d0 = FSLW						#
 #	else								#
 #		none							#
 #									#
 # ALGORITHM ***********************************************************	#
-# 	First, decode the operand location. If it's in Dn, fetch from	#
-# the stack. If it's in memory, use _calc_ea() to calculate the 	#
+#	First, decode the operand location. If it's in Dn, fetch from	#
+# the stack. If it's in memory, use _calc_ea() to calculate the		#
 # effective address. Use _dmem_read_long() to fetch at that address.	#
 # Unless the operand is immediate data. Then use _imem_read_long().	#
 # Send failures to isp_dacc() or isp_iacc() as appropriate.		#
-#	If the operands are signed, make them unsigned and save	the 	#
+#	If the operands are signed, make them unsigned and save	the	#
 # sign info for later. Separate out special cases like divide-by-zero	#
 # or 32-bit divides if possible. Else, use a special math algorithm	#
-# to calculate the result. 						#
-#	Restore sign info if signed instruction. Set the condition 	#
-# codes. Set idbyz_flg in SPCOND_FLG if divisor was zero. Store the 	#
+# to calculate the result.						#
+#	Restore sign info if signed instruction. Set the condition	#
+# codes. Set idbyz_flg in SPCOND_FLG if divisor was zero. Store the	#
 # quotient and remainder in the appropriate data registers on the stack.#
 #									#
 #########################################################################
@@ -2131,7 +2131,7 @@
 	negx.l		%d5
 
 # extract some special cases:
-# 	- is (dividend == 0) ?
+#	- is (dividend == 0) ?
 #	- is (hi(dividend) == 0 && (divisor <= lo(dividend))) ? (32-bit div)
 dspecialcases:
 	tst.l		%d5			# is (hi(dividend) == 0)
@@ -2140,7 +2140,7 @@
 	tst.l		%d6			# is (lo(dividend) == 0), too
 	beq.w		ddone			# yes, so (dividend == 0)
 
-	cmp.l	 	%d7,%d6			# is (divisor <= lo(dividend))
+	cmp.l		%d7,%d6			# is (divisor <= lo(dividend))
 	bls.b		d32bitdivide		# yes, so use 32 bit divide
 
 	exg		%d5,%d6			# q = 0, r = dividend
@@ -2153,7 +2153,7 @@
 
 dnormaldivide:
 # last special case:
-# 	- is hi(dividend) >= divisor ? if yes, then overflow
+#	- is hi(dividend) >= divisor ? if yes, then overflow
 	cmp.l		%d7,%d5
 	bls.b		ddovf			# answer won't fit in 32 bits
 
@@ -2166,7 +2166,7 @@
 	beq.b		ddone			# divu has no processing!!!
 
 # it was a divs.l, so ccode setting is a little more complicated...
-	tst.b		NDIVIDEND(%a6)		# remainder has same sign 
+	tst.b		NDIVIDEND(%a6)		# remainder has same sign
 	beq.b		dcc			# as dividend.
 	neg.l		%d5			# sgn(rem) = sgn(dividend)
 dcc:
@@ -2194,7 +2194,7 @@
 	mov.w		%cc, EXC_CC(%a6)
 
 	mov.w		NDRSAVE(%a6), %d0	# get Dr off stack
-	mov.w		NDQSAVE(%a6), %d1	# get Dq off stack	
+	mov.w		NDQSAVE(%a6), %d1	# get Dq off stack
 
 # if the register numbers are the same, only the quotient gets saved.
 # so, if we always save the quotient second, we save ourselves a cmp&beq
@@ -2221,8 +2221,8 @@
 # For this implementation b=2**16, and the target is U1U2U3U4/V1V2,	#
 # where U,V are words of the quadword dividend and longword divisor,	#
 # and U1, V1 are the most significant words.				#
-# 									#
-# The most sig. longword of the 64 bit dividend must be in %d5, least 	#
+#									#
+# The most sig. longword of the 64 bit dividend must be in %d5, least	#
 # in %d6. The divisor must be in the variable ddivisor, and the		#
 # signed/unsigned flag ddusign must be set (0=unsigned,1=signed).	#
 # The quotient is returned in %d6, remainder in %d5, unless the		#
@@ -2242,7 +2242,7 @@
 # dividing the divisor word into each dividend word. In this case,
 # the first two quotient words must be zero, or overflow would occur.
 # Since we already checked this case above, we can treat the most significant
-# longword of the dividend as (0) remainder (see Knuth) and merely complete 
+# longword of the dividend as (0) remainder (see Knuth) and merely complete
 # the last two divisions to get a quotient longword and word remainder:
 
 	clr.l		%d1
@@ -2278,12 +2278,12 @@
 	clr.b		DDSECOND(%a6)		# clear flag for quotient digits
 	clr.l		%d1			# %d1 will hold trial quotient
 ddnchk:
-	btst		&31, %d7		# must we normalize? first word of 
+	btst		&31, %d7		# must we normalize? first word of
 	bne.b		ddnormalized		# divisor (V1) must be >= 65536/2
 	addq.l		&0x1, DDNORMAL(%a6)	# count normalization shifts
 	lsl.l		&0x1, %d7		# shift the divisor
 	lsl.l		&0x1, %d6		# shift u4,u3 with overflow to u2
-	roxl.l		&0x1, %d5		# shift u1,u2 
+	roxl.l		&0x1, %d5		# shift u1,u2
 	bra.w		ddnchk
 ddnormalized:
 
@@ -2293,12 +2293,12 @@
 	mov.l		%d5, %d2		# dividend mslw
 	swap		%d2
 	swap		%d3
-	cmp.w	 	%d2, %d3		# V1 = U1 ?
+	cmp.w		%d2, %d3		# V1 = U1 ?
 	bne.b		ddqcalc1
 	mov.w		&0xffff, %d1		# use max trial quotient word
 	bra.b		ddadj0
 ddqcalc1:
-	mov.l		%d5, %d1		
+	mov.l		%d5, %d1
 
 	divu.w		%d3, %d1		# use quotient of mslw/msw
 
@@ -2329,7 +2329,7 @@
 
 #	add.l		%d6, %d4		# (U1U2 - V1q) + U3
 
-	cmp.l	 	%d2, %d4
+	cmp.l		%d2, %d4
 	bls.b		ddadjd1			# is V2q > (U1U2-V1q) + U3 ?
 	subq.l		&0x1, %d1		# yes, decrement and recheck
 	bra.b		ddadj1
@@ -2366,7 +2366,7 @@
 	tst.b		DDSECOND(%a6)		# both q words done?
 	bne.b		ddremain
 # first quotient digit now correct. store digit and shift the
-# (subtracted) dividend 
+# (subtracted) dividend
 	mov.w		%d1, DDQUOTIENT(%a6)
 	clr.l		%d1
 	swap		%d5
@@ -2377,7 +2377,7 @@
 	bra.w		ddnormalized
 ddremain:
 # add 2nd word to quotient, get the remainder.
-	mov.w 		%d1, DDQUOTIENT+2(%a6)
+	mov.w		%d1, DDQUOTIENT+2(%a6)
 # shift down one word/digit to renormalize remainder.
 	mov.w		%d5, %d6
 	swap		%d6
@@ -2391,7 +2391,7 @@
 	dbf		%d7, ddnlp
 ddrn:
 	mov.l		%d6, %d5		# remainder
-	mov.l		DDQUOTIENT(%a6), %d6 	# quotient
+	mov.l		DDQUOTIENT(%a6), %d6	# quotient
 
 	rts
 dmm2:
@@ -2421,7 +2421,7 @@
 	clr.w		%d2			# lsw of two mixed products used,
 	swap		%d5			# now use msws of longwords
 	swap		%d2
-	add.l		%d2, %d5				
+	add.l		%d2, %d5
 	add.l		%d3, %d5		# %d5 now ms 32 bits of final product
 	rts
 
@@ -2463,10 +2463,10 @@
 # also, we call isp_restore in case the effective addressing mode was
 # (an)+ or -(an) in which case the previous "an" value must be restored.
 # FSLW:
-# 	read = true
-# 	size = longword
+#	read = true
+#	size = longword
 #	TM = data
-# 	software emulation error = true
+#	software emulation error = true
 div64_err:
 	bsr.l		isp_restore		# restore addr reg
 	mov.l		%a2,%a0			# pass failing address
@@ -2480,17 +2480,17 @@
 # XREF ****************************************************************	#
 #	_calc_ea() - calculate effective address			#
 #	isp_iacc() - handle instruction access error exception		#
-# 	isp_dacc() - handle data access error exception			#
+#	isp_dacc() - handle data access error exception			#
 #	isp_restore() - restore An on access error w/ -() or ()+	#
 #									#
 # INPUT ***************************************************************	#
 #	none								#
 #									#
 # OUTPUT **************************************************************	#
-# 	If exiting through isp_dacc...					#
+#	If exiting through isp_dacc...					#
 #		a0 = failing address					#
 #		d0 = FSLW						#
-# 	else								#
+#	else								#
 #		none							#
 #									#
 # ALGORITHM ***********************************************************	#
@@ -2499,9 +2499,9 @@
 # effective address. Use _dmem_read_long() to fetch at that address.	#
 # Unless the operand is immediate data. Then use _imem_read_long().	#
 # Send failures to isp_dacc() or isp_iacc() as appropriate.		#
-#	If the operands are signed, make them unsigned and save the 	#
+#	If the operands are signed, make them unsigned and save the	#
 # sign info for later. Perform the multiplication using 16x16->32	#
-# unsigned multiplies and "add" instructions. Store the high and low 	#
+# unsigned multiplies and "add" instructions. Store the high and low	#
 # portions of the result in the appropriate data registers on the	#
 # stack. Calculate the condition codes, also.				#
 #									#
@@ -2554,15 +2554,15 @@
 # the result sign is the exclusive or of the operand sign bits.
 mul64_chk_md_sgn:
 	tst.l		%d4			# is multiplicand negative?
-	bge.b		mul64_alg		# no	
+	bge.b		mul64_alg		# no
 	neg.l		%d4			# make multiplicand positive
 	eori.b		&0x1, EXC_TEMP(%a6)	# calculate correct sign
 
 #########################################################################
 #	63			   32				0	#
-# 	----------------------------					#
-# 	| hi(mplier) * hi(mplicand)|					#
-# 	----------------------------					#
+#	----------------------------					#
+#	| hi(mplier) * hi(mplicand)|					#
+#	----------------------------					#
 #		     -----------------------------			#
 #		     | hi(mplier) * lo(mplicand) |			#
 #		     -----------------------------			#
@@ -2639,7 +2639,7 @@
 	andi.b		&0x8, %d7		# extract 'N' bit
 
 mul64_ccode_set:
-	mov.b		EXC_CC+1(%a6), %d6 	# fetch previous %ccr
+	mov.b		EXC_CC+1(%a6), %d6	# fetch previous %ccr
 	andi.b		&0x10, %d6		# all but 'X' bit changes
 
 	or.b		%d7, %d6		# group 'X' and 'N'
@@ -2698,10 +2698,10 @@
 # also, we call isp_restore in case the effective addressing mode was
 # (an)+ or -(an) in which case the previous "an" value must be restored.
 # FSLW:
-# 	read = true
-# 	size = longword
+#	read = true
+#	size = longword
 #	TM = data
-# 	software emulation error = true
+#	software emulation error = true
 mul64_err:
 	bsr.l		isp_restore		# restore addr reg
 	mov.l		%a2,%a0			# pass failing address
@@ -2728,7 +2728,7 @@
 #									#
 # _isp_cas2_finish():							#
 #	see cas2 core emulation code					#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 # _compandset2():							#
 #	see cas2 core emulation code					#
@@ -2744,7 +2744,7 @@
 # pages from being paged out. If either _real_lock_page() fails, exit	#
 # through _cas_terminate2(). Don't forget to unlock the 1st locked page	#
 # using _real_unlock_paged() if the 2nd lock-page fails.		#
-# Finally, branch to the core cas2 emulation code by calling the 	#
+# Finally, branch to the core cas2 emulation code by calling the	#
 # "callout" _real_cas2().						#
 #									#
 # _isp_cas2_finish():							#
@@ -2793,7 +2793,7 @@
 	lsr.w		&0x6,%d1
 	andi.w		&0x7,%d1		# extract Du1
 	mov.l		(EXC_DREGS,%a6,%d1.w*4),%d4 # fetch Update1 Op
-	
+
 	andi.w		&0x7,%d0		# extract Dc1
 	mov.l		(EXC_DREGS,%a6,%d0.w*4),%d2 # fetch Compare1 Op
 	mov.w		%d0,DC1(%a6)
@@ -2827,7 +2827,7 @@
 
 	bra.l		_real_cas2
 
-# if the 2nd lock attempt fails, then we must still unlock the 
+# if the 2nd lock attempt fails, then we must still unlock the
 # first page(s).
 cas_preterm:
 	mov.l		%d0,-(%sp)		# save FSLW
@@ -2869,7 +2869,7 @@
 	sf		%d1			# pass size
 	mov.l		ADDR1(%a6),%a0		# pass ADDR1
 	bsr.l		_real_unlock_page	# unlock page
-	
+
 	mov.l		%d2,%d0			# pass mode
 	sf		%d1			# pass size
 	mov.l		ADDR2(%a6),%a0		# pass ADDR2
@@ -2900,7 +2900,7 @@
 	st		%d1			# pass size
 	mov.l		ADDR1(%a6),%a0		# pass ADDR1
 	bsr.l		_real_unlock_page	# unlock page
-	
+
 	mov.l		%d2,%d0			# pass mode
 	st		%d1			# pass size
 	mov.l		ADDR2(%a6),%a0		# pass ADDR2
@@ -2928,11 +2928,11 @@
 #			    (external to package)			#
 #									#
 # XREF ****************************************************************	#
-# 	_calc_ea(): calculate effective address				#
+#	_calc_ea(): calculate effective address				#
 #									#
 # INPUT ***************************************************************	#
 # compandset():								#
-# 	none								#
+#	none								#
 # _isp_cas_restart():							#
 #	d6 = previous sfc/dfc						#
 # _isp_cas_finish():							#
@@ -2959,10 +2959,10 @@
 # ALGORITHM ***********************************************************	#
 #									#
 # compandset():								#
-#	First, calculate the effective address. Then, decode the 	#
+#	First, calculate the effective address. Then, decode the	#
 # instruction word and fetch the "compare" (DC) and "update" (Du)	#
 # operands.								#
-# 	Next, call the external routine _real_lock_page() so that the	#
+#	Next, call the external routine _real_lock_page() so that the	#
 # operating system can keep this page from being paged out while we're	#
 # in this routine. If this call fails, jump to _cas_terminate2().	#
 #	The routine then branches to _real_cas(). This external routine	#
@@ -2971,7 +2971,7 @@
 # this purpose.								#
 #									#
 # _isp_cas_finish():							#
-# 	Either way, after emulation, the package is re-entered at	#
+#	Either way, after emulation, the package is re-entered at	#
 # _isp_cas_finish(). This routine re-compares the operands in order to	#
 # set the condition codes. Finally, these routines will call		#
 # _real_unlock_page() in order to unlock the pages that were previously	#
@@ -2984,13 +2984,13 @@
 # _isp_cas_terminate():							#
 #	This routine can be entered from an access error handler where	#
 # an emulation operand access failed and the operating system would	#
-# like an access error stack frame created instead of the current 	#
+# like an access error stack frame created instead of the current	#
 # unimplemented integer instruction frame.				#
-# 	Also, the package enters here if a call to _real_lock_page()	#
+#	Also, the package enters here if a call to _real_lock_page()	#
 # fails.								#
 #									#
 # _isp_cas_inrange():							#
-# 	Checks to see whether the instruction address passed to it in	#
+#	Checks to see whether the instruction address passed to it in	#
 # a0 is within the software package cas/cas2 emulation routines. This	#
 # can be helpful for an operating system to determine whether an access	#
 # error during emulation was due to a cas/cas2 emulation access.	#
@@ -3003,18 +3003,18 @@
 	global		_compandset
 _compandset:
 	btst		&0x1,EXC_OPWORD(%a6)	# word or long operation?
-	bne.b		compandsetl		# long	
+	bne.b		compandsetl		# long
 
 compandsetw:
 	movq.l		&0x2,%d0		# size = 2 bytes
-	bsr.l		_calc_ea		# a0 = calculated <ea>	
+	bsr.l		_calc_ea		# a0 = calculated <ea>
 	mov.l		%a0,ADDR(%a6)		# save <ea> for possible restart
 	sf		%d7			# clear d7 for word size
 	bra.b		compandsetfetch
 
 compandsetl:
 	movq.l		&0x4,%d0		# size = 4 bytes
-	bsr.l		_calc_ea		# a0 = calculated <ea>	
+	bsr.l		_calc_ea		# a0 = calculated <ea>
 	mov.l		%a0,ADDR(%a6)		# save <ea> for possible restart
 	st		%d7			# set d7 for longword size
 
@@ -3040,7 +3040,7 @@
 	tst.l		%d0			# did error occur?
 	bne.w		_cas_terminate2		# yes, clean up the mess
 	mov.l		%a2,%a0			# pass addr in a0
-	
+
 	bra.l		_real_cas
 
 ########
@@ -3053,7 +3053,7 @@
 # from the locked routine...
 cas_finish_w:
 	mov.w		EXC_CC(%a6),%cc		# restore cc
-	cmp.w	 	%d0,%d4			# do word compare
+	cmp.w		%d0,%d4			# do word compare
 	mov.w		%cc,EXC_CC(%a6)		# save cc
 
 	tst.b		%d1			# update compare reg?
@@ -3074,7 +3074,7 @@
 # from the locked routine...
 cas_finish_l:
 	mov.w		EXC_CC(%a6),%cc		# restore cc
-	cmp.l	 	%d0,%d4			# do longword compare
+	cmp.l		%d0,%d4			# do longword compare
 	mov.w		%cc,EXC_CC(%a6)		# save cc
 
 	tst.b		%d1			# update compare reg?
@@ -3092,7 +3092,7 @@
 	rts
 
 ########
-	
+
 	global		_isp_cas_restart
 _isp_cas_restart:
 	mov.l		%d6,%sfc		# restore previous sfc
@@ -3104,7 +3104,7 @@
 	mov.l		ADDR(%a6),%a0		# load <ea>
 	btst		&0x1,EXC_OPWORD(%a6)	# word or long operation?
 	sne		%d7			# set d7 accordingly
-	bra.w		compandsetfetch	
+	bra.w		compandsetfetch
 
 ########
 
@@ -3151,7 +3151,7 @@
 	cmp.l		%a0,%a1			# is PC in range?
 	blt.b		cin_no			# no
 	rts					# yes; return d0 = 0
-cin_no:	
+cin_no:
 	mov.l		&-0x1,%d0		# out of range; return d0 = -1
 	rts
 
@@ -3179,28 +3179,28 @@
 #									#
 # XREF ****************************************************************	#
 #	_isp_cas2_finish() - only exit point for this emulation code;	#
-#			     do clean-up; calculate ccodes; store 	#
+#			     do clean-up; calculate ccodes; store	#
 #			     Compare Ops if appropriate.		#
 #									#
 # INPUT ***************************************************************	#
 #	*see chart below*						#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	*see chart below*						#
 #									#
 # ALGORITHM ***********************************************************	#
 #	(1) Make several copies of the effective address.		#
 #	(2) Save current SR; Then mask off all maskable interrupts.	#
-#	(3) Save current SFC/DFC (ASSUMED TO BE EQUAL!!!); Then set 	#
-#	    according to whether exception occurred in user or 		#
+#	(3) Save current SFC/DFC (ASSUMED TO BE EQUAL!!!); Then set	#
+#	    according to whether exception occurred in user or		#
 #	    supervisor mode.						#
 #	(4) Use "plpaw" instruction to pre-load ATC with effective	#
 #	    address pages(s). THIS SHOULD NOT FAULT!!! The relevant	#
 #	    page(s) should have already been made resident prior to	#
-# 	    entering this routine.					#
-#	(5) Push the operand lines from the cache w/ "cpushl". 		#
+#	    entering this routine.					#
+#	(5) Push the operand lines from the cache w/ "cpushl".		#
 #	    In the 68040, this was done within the locked region. In	#
-# 	    the 68060, it is done outside of the locked region.		#
+#	    the 68060, it is done outside of the locked region.		#
 #	(6) Use "plpar" instruction to do a re-load of ATC entries for	#
 #	    ADDR1 since ADDR2 entries may have pushed ADDR1 out of the	#
 #	    ATC.							#
@@ -3214,19 +3214,19 @@
 #	    back to itself (as w/ the '040) so we can gracefully unlock	#
 #	    the bus (and assert LOCKE*) using BUSCR and the final move.	#
 #	(12)Exit.							#
-#	(13)Write update operand to the DST locations. Use BUSCR to 	#
+#	(13)Write update operand to the DST locations. Use BUSCR to	#
 #	    assert LOCKE* for the final write operation.		#
 #	(14)Exit.							#
 #									#
-# 	The algorithm is actually implemented slightly differently	#
-# depending on the size of the operation and the misalignment of the 	#
+#	The algorithm is actually implemented slightly differently	#
+# depending on the size of the operation and the misalignment of the	#
 # operands. A misaligned operand must be written in aligned chunks or	#
 # else the BUSCR register control gets confused.			#
 #									#
 #########################################################################
 
 #################################################################
-# THIS IS THE STATE OF THE INTEGER REGISTER FILE UPON		# 
+# THIS IS THE STATE OF THE INTEGER REGISTER FILE UPON		#
 # ENTERING _isp_cas2().						#
 #								#
 # D0 = xxxxxxxx							#
@@ -3236,7 +3236,7 @@
 # D4 = update oper 1						#
 # D5 = update oper 2						#
 # D6 = 'xxxxxxff if supervisor mode; 'xxxxxx00 if user mode	#
-# D7 = 'xxxxxxff if longword operation; 'xxxxxx00 if word 	#
+# D7 = 'xxxxxxff if longword operation; 'xxxxxx00 if word	#
 # A0 = ADDR1							#
 # A1 = ADDR2							#
 # A2 = xxxxxxxx							#
@@ -3339,22 +3339,22 @@
 # A4 = bus unlock value
 # A5 = xxxxxxxx
 #
-	align 		0x10
+	align		0x10
 CAS2L_START:
 	movc		%a2,%buscr		# assert LOCK*
 	movs.l		(%a1),%d1		# fetch Dest2[31:0]
 	movs.l		(%a0),%d0		# fetch Dest1[31:0]
-	bra.b 		CAS2L_CONT
+	bra.b		CAS2L_CONT
 CAS2L_ENTER:
 	bra.b		~+16
 
 CAS2L_CONT:
-	cmp.l	 	%d0,%d2			# Dest1 - Compare1
+	cmp.l		%d0,%d2			# Dest1 - Compare1
 	bne.b		CAS2L_NOUPDATE
-	cmp.l	 	%d1,%d3			# Dest2 - Compare2
+	cmp.l		%d1,%d3			# Dest2 - Compare2
 	bne.b		CAS2L_NOUPDATE
 	movs.l		%d5,(%a1)		# Update2[31:0] -> DEST2
-	bra.b 		CAS2L_UPDATE
+	bra.b		CAS2L_UPDATE
 	bra.b		~+16
 
 CAS2L_UPDATE:
@@ -3384,7 +3384,7 @@
 ####
 
 #################################################################
-# THIS MUST BE THE STATE OF THE INTEGER REGISTER FILE UPON	# 
+# THIS MUST BE THE STATE OF THE INTEGER REGISTER FILE UPON	#
 # ENTERING _isp_cas2().						#
 #								#
 # D0 = destination[31:0] operand 1				#
@@ -3430,22 +3430,22 @@
 	bra.l		_isp_cas2_finish
 ####
 
-	align 		0x10
+	align		0x10
 CAS2L2_START:
 	movc		%a2,%buscr		# assert LOCK*
 	movs.l		(%a1),%d1		# fetch Dest2[31:0]
 	movs.l		(%a0),%d0		# fetch Dest1[31:0]
-	bra.b 		CAS2L2_CONT
+	bra.b		CAS2L2_CONT
 CAS2L2_ENTER:
 	bra.b		~+16
 
 CAS2L2_CONT:
-	cmp.l	 	%d0,%d2			# Dest1 - Compare1
+	cmp.l		%d0,%d2			# Dest1 - Compare1
 	bne.b		CAS2L2_NOUPDATE
-	cmp.l	 	%d1,%d3			# Dest2 - Compare2
+	cmp.l		%d1,%d3			# Dest2 - Compare2
 	bne.b		CAS2L2_NOUPDATE
 	movs.l		%d5,(%a1)		# Update2[31:0] -> Dest2
-	bra.b 		CAS2L2_UPDATE
+	bra.b		CAS2L2_UPDATE
 	bra.b		~+16
 
 CAS2L2_UPDATE:
@@ -3490,22 +3490,22 @@
 
 #################################
 
-	align 		0x10
+	align		0x10
 CAS2L3_START:
 	movc		%a2,%buscr		# assert LOCK*
 	movs.l		(%a1),%d1		# fetch Dest2[31:0]
 	movs.l		(%a0),%d0		# fetch Dest1[31:0]
-	bra.b 		CAS2L3_CONT
+	bra.b		CAS2L3_CONT
 CAS2L3_ENTER:
 	bra.b		~+16
 
 CAS2L3_CONT:
-	cmp.l	 	%d0,%d2			# Dest1 - Compare1
+	cmp.l		%d0,%d2			# Dest1 - Compare1
 	bne.b		CAS2L3_NOUPDATE
-	cmp.l	 	%d1,%d3			# Dest2 - Compare2
+	cmp.l		%d1,%d3			# Dest2 - Compare2
 	bne.b		CAS2L3_NOUPDATE
 	movs.l		%d5,(%a1)		# Update2[31:0] -> DEST2
-	bra.b 		CAS2L3_UPDATE
+	bra.b		CAS2L3_UPDATE
 	bra.b		~+16
 
 CAS2L3_UPDATE:
@@ -3531,7 +3531,7 @@
 	nop
 	nop
 	bra.b		~+16
-	
+
 CAS2L3_NOUPDATE:
 	rol.l		&0x8,%d0		# get Dest1[31:24]
 	movs.b		%d0,(%a0)+		# Dest1[31:24] -> DEST1
@@ -3639,22 +3639,22 @@
 # A4 = bus unlock value
 # A5 = xxxxxxxx
 #
-	align 		0x10
+	align		0x10
 CAS2W_START:
 	movc		%a2,%buscr		# assert LOCK*
 	movs.w		(%a1),%d1		# fetch Dest2[15:0]
 	movs.w		(%a0),%d0		# fetch Dest1[15:0]
-	bra.b 		CAS2W_CONT2
+	bra.b		CAS2W_CONT2
 CAS2W_ENTER:
 	bra.b		~+16
 
 CAS2W_CONT2:
-	cmp.w	 	%d0,%d2			# Dest1 - Compare1
+	cmp.w		%d0,%d2			# Dest1 - Compare1
 	bne.b		CAS2W_NOUPDATE
-	cmp.w	 	%d1,%d3			# Dest2 - Compare2
+	cmp.w		%d1,%d3			# Dest2 - Compare2
 	bne.b		CAS2W_NOUPDATE
 	movs.w		%d5,(%a1)		# Update2[15:0] -> DEST2
-	bra.b 		CAS2W_UPDATE
+	bra.b		CAS2W_UPDATE
 	bra.b		~+16
 
 CAS2W_UPDATE:
@@ -3684,7 +3684,7 @@
 ####
 
 #################################################################
-# THIS MUST BE THE STATE OF THE INTEGER REGISTER FILE UPON	# 
+# THIS MUST BE THE STATE OF THE INTEGER REGISTER FILE UPON	#
 # ENTERING _isp_cas2().						#
 #								#
 # D0 = destination[15:0] operand 1				#
@@ -3730,22 +3730,22 @@
 	bra.l		_isp_cas2_finish
 ####
 
-	align 		0x10
+	align		0x10
 CAS2W2_START:
 	movc		%a2,%buscr		# assert LOCK*
 	movs.w		(%a1),%d1		# fetch Dest2[15:0]
 	movs.w		(%a0),%d0		# fetch Dest1[15:0]
-	bra.b 		CAS2W2_CONT2
+	bra.b		CAS2W2_CONT2
 CAS2W2_ENTER:
 	bra.b		~+16
 
 CAS2W2_CONT2:
-	cmp.w	 	%d0,%d2			# Dest1 - Compare1
+	cmp.w		%d0,%d2			# Dest1 - Compare1
 	bne.b		CAS2W2_NOUPDATE
-	cmp.w	 	%d1,%d3			# Dest2 - Compare2
+	cmp.w		%d1,%d3			# Dest2 - Compare2
 	bne.b		CAS2W2_NOUPDATE
 	movs.w		%d5,(%a1)		# Update2[15:0] -> DEST2
-	bra.b 		CAS2W2_UPDATE
+	bra.b		CAS2W2_UPDATE
 	bra.b		~+16
 
 CAS2W2_UPDATE:
@@ -3789,34 +3789,34 @@
 	bra.b		CAS2W2_START
 
 #       ######      ##      ######
-#       #	   #  #     #     
+#       #	   #  #     #
 #	#	  ######    ######
 #	#	  #    #         #
 #       ######    #    #    ######
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	_isp_cas(): "core" emulation code for the cas instruction	#
+#	_isp_cas(): "core" emulation code for the cas instruction	#
 #									#
 # XREF ****************************************************************	#
 #	_isp_cas_finish() - only exit point for this emulation code;	#
 #			    do clean-up					#
 #									#
 # INPUT ***************************************************************	#
-# 	*see entry chart below*						#
+#	*see entry chart below*						#
 #									#
 # OUTPUT **************************************************************	#
 #	*see exit chart below*						#
 #									#
 # ALGORITHM ***********************************************************	#
-# 	(1) Make several copies of the effective address. 		#
-# 	(2) Save current SR; Then mask off all maskable interrupts.	#
+#	(1) Make several copies of the effective address.		#
+#	(2) Save current SR; Then mask off all maskable interrupts.	#
 #	(3) Save current DFC/SFC (ASSUMED TO BE EQUAL!!!); Then set	#
 #	    SFC/DFC according to whether exception occurred in user or	#
 #	    supervisor mode.						#
 #	(4) Use "plpaw" instruction to pre-load ATC with efective	#
 #	    address page(s). THIS SHOULD NOT FAULT!!! The relevant	#
-# 	    page(s) should have been made resident prior to entering 	#
+#	    page(s) should have been made resident prior to entering	#
 #	    this routine.						#
 #	(5) Push the operand lines from the cache w/ "cpushl".		#
 #	    In the 68040, this was done within the locked region. In	#
@@ -3834,8 +3834,8 @@
 #	(12)Write update operand to the DST location. Use BUSCR to	#
 #	    assert LOCKE* for the final write operation.		#
 #	(13)Exit.							#
-# 									#
-# 	The algorithm is actually implemented slightly differently	#
+#									#
+#	The algorithm is actually implemented slightly differently	#
 # depending on the size of the operation and the misalignment of the	#
 # operand. A misaligned operand must be written in aligned chunks or	#
 # else the BUSCR register control gets confused.			#
@@ -3934,9 +3934,9 @@
 CASW_START:
 	movc		%a1,%buscr		# assert LOCK*
 	movs.w		(%a0),%d0		# fetch Dest[15:0]
-	cmp.w	 	%d0,%d4			# Dest - Compare
+	cmp.w		%d0,%d4			# Dest - Compare
 	bne.b		CASW_NOUPDATE
-	bra.b 		CASW_UPDATE
+	bra.b		CASW_UPDATE
 CASW_ENTER:
 	bra.b		~+16
 
@@ -3961,7 +3961,7 @@
 	movs.b		%d0,(%a0)+		# Dest[15:8] -> DEST
 	movc		%a2,%buscr		# assert LOCKE*
 	rol.l		&0x8,%d0		# get Dest[7:0]
-	bra.b 		CASW_NOUPDATE2
+	bra.b		CASW_NOUPDATE2
 	bra.b		~+16
 
 CASW_NOUPDATE2:
@@ -4090,9 +4090,9 @@
 CASL_START:
 	movc		%a1,%buscr		# assert LOCK*
 	movs.l		(%a0),%d0		# fetch Dest[31:0]
-	cmp.l	 	%d0,%d4			# Dest - Compare
+	cmp.l		%d0,%d4			# Dest - Compare
 	bne.b		CASL_NOUPDATE
-	bra.b 		CASL_UPDATE
+	bra.b		CASL_UPDATE
 CASL_ENTER:
 	bra.b		~+16
 
@@ -4117,7 +4117,7 @@
 	movs.w		%d0,(%a0)+		# Dest[31:16] -> DEST
 	swap		%d0			# get Dest[15:0]
 	movc		%a2,%buscr		# assert LOCKE*
-	bra.b 		CASL_NOUPDATE2
+	bra.b		CASL_NOUPDATE2
 	bra.b		~+16
 
 CASL_NOUPDATE2:
@@ -4214,7 +4214,7 @@
 	mov.l		&0xa0000000,%a2		# assert LOCKE* buscr value
 	mov.l		&0x00000000,%a3		# buscr unlock value
 
-# pre-load the instruction cache for the following algorithm. 
+# pre-load the instruction cache for the following algorithm.
 # this will minimize the number of cycles that LOCK* will be asserted.
 	bra.b		CASL2_ENTER		# start pre-loading icache
 
@@ -4238,9 +4238,9 @@
 CASL2_START:
 	movc		%a1,%buscr		# assert LOCK*
 	movs.l		(%a0),%d0		# fetch Dest[31:0]
-	cmp.l	 	%d0,%d4			# Dest - Compare
+	cmp.l		%d0,%d4			# Dest - Compare
 	bne.b		CASL2_NOUPDATE
-	bra.b 		CASL2_UPDATE
+	bra.b		CASL2_UPDATE
 CASL2_ENTER:
 	bra.b		~+16
 
@@ -4263,14 +4263,14 @@
 	movs.b		%d0,(%a0)+		# Dest[31:24] -> DEST
 	swap		%d0			# get Dest[23:8]
 	movs.w		%d0,(%a0)+		# Dest[23:8] -> DEST+0x1
-	bra.b 		CASL2_NOUPDATE2
+	bra.b		CASL2_NOUPDATE2
 	bra.b		~+16
 
 CASL2_NOUPDATE2:
 	rol.l		&0x8,%d0		# get Dest[7:0]
 	movc		%a2,%buscr		# assert LOCKE*
 	movs.b		%d0,(%a0)		# Dest[7:0] -> DEST+0x3
-	bra.b 		CASL2_NOUPDATE3
+	bra.b		CASL2_NOUPDATE3
 	nop
 	bra.b		~+16
 
diff -Nru a/arch/m68k/ifpsp060/src/itest.S b/arch/m68k/ifpsp060/src/itest.S
--- a/arch/m68k/ifpsp060/src/itest.S	Sun May 16 01:18:33 2004
+++ b/arch/m68k/ifpsp060/src/itest.S	Sun May 16 01:18:33 2004
@@ -5,10 +5,10 @@
 Production Release P1.00 -- October 10, 1994
 
 M68060 Software Package Copyright © 1993, 1994 Motorola Inc.  All rights reserved.
- 
+
 THE SOFTWARE is provided on an "AS IS" basis and without warranty.
 To the maximum extent permitted by applicable law,
-MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, 
+MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED,
 INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
 and any warranty against infringement with regard to the SOFTWARE
 (INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials.
@@ -453,8 +453,8 @@
 	bne.l	error
 
 #####################################################
-# movep.w	%d0,(0x0,%a0) 			    #
-# 	- this test has %cc initially equal to zero #
+# movep.w	%d0,(0x0,%a0)			    #
+#	- this test has %cc initially equal to zero #
 #####################################################
 movp_2:
 	addq.l	&0x1,TESTCTR(%a6)
diff -Nru a/arch/m68k/ifpsp060/src/pfpsp.S b/arch/m68k/ifpsp060/src/pfpsp.S
--- a/arch/m68k/ifpsp060/src/pfpsp.S	Sun May 16 01:18:33 2004
+++ b/arch/m68k/ifpsp060/src/pfpsp.S	Sun May 16 01:18:33 2004
@@ -5,10 +5,10 @@
 Production Release P1.00 -- October 10, 1994
 
 M68060 Software Package Copyright © 1993, 1994 Motorola Inc.  All rights reserved.
- 
+
 THE SOFTWARE is provided on an "AS IS" basis and without warranty.
 To the maximum extent permitted by applicable law,
-MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, 
+MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED,
 INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
 and any warranty against infringement with regard to the SOFTWARE
 (INCLUDING ANY MODIFIED VERSIONS THEREOF) and any accompanying written materials.
@@ -89,7 +89,7 @@
 	bra.l		_fpsp_effadd
 	short		0x0000
 
-	space 		56
+	space		56
 
 ###############################################################
 	global		_fpsp_done
@@ -323,33 +323,33 @@
 set EXC_D1,		EXC_DREGS+(1*4)
 set EXC_D0,		EXC_DREGS+(0*4)
 
-set EXC_FP0, 		EXC_FPREGS+(0*12)	# offset of saved fp0
-set EXC_FP1, 		EXC_FPREGS+(1*12)	# offset of saved fp1
-set EXC_FP2, 		EXC_FPREGS+(2*12)	# offset of saved fp2 (not used)
+set EXC_FP0,		EXC_FPREGS+(0*12)	# offset of saved fp0
+set EXC_FP1,		EXC_FPREGS+(1*12)	# offset of saved fp1
+set EXC_FP2,		EXC_FPREGS+(2*12)	# offset of saved fp2 (not used)
 
-set FP_SCR1, 		LV+80			# fp scratch 1
-set FP_SCR1_EX, 	FP_SCR1+0
+set FP_SCR1,		LV+80			# fp scratch 1
+set FP_SCR1_EX,		FP_SCR1+0
 set FP_SCR1_SGN,	FP_SCR1+2
-set FP_SCR1_HI, 	FP_SCR1+4
-set FP_SCR1_LO, 	FP_SCR1+8
+set FP_SCR1_HI,		FP_SCR1+4
+set FP_SCR1_LO,		FP_SCR1+8
 
-set FP_SCR0, 		LV+68			# fp scratch 0
-set FP_SCR0_EX, 	FP_SCR0+0
+set FP_SCR0,		LV+68			# fp scratch 0
+set FP_SCR0_EX,		FP_SCR0+0
 set FP_SCR0_SGN,	FP_SCR0+2
-set FP_SCR0_HI, 	FP_SCR0+4
-set FP_SCR0_LO, 	FP_SCR0+8
+set FP_SCR0_HI,		FP_SCR0+4
+set FP_SCR0_LO,		FP_SCR0+8
 
-set FP_DST, 		LV+56			# fp destination operand
-set FP_DST_EX, 		FP_DST+0
+set FP_DST,		LV+56			# fp destination operand
+set FP_DST_EX,		FP_DST+0
 set FP_DST_SGN,		FP_DST+2
-set FP_DST_HI, 		FP_DST+4
-set FP_DST_LO, 		FP_DST+8
+set FP_DST_HI,		FP_DST+4
+set FP_DST_LO,		FP_DST+8
 
-set FP_SRC, 		LV+44			# fp source operand
-set FP_SRC_EX, 		FP_SRC+0
+set FP_SRC,		LV+44			# fp source operand
+set FP_SRC_EX,		FP_SRC+0
 set FP_SRC_SGN,		FP_SRC+2
-set FP_SRC_HI, 		FP_SRC+4
-set FP_SRC_LO, 		FP_SRC+8
+set FP_SRC_HI,		FP_SRC+4
+set FP_SRC_LO,		FP_SRC+8
 
 set USER_FPIAR,		LV+40			# FP instr address register
 
@@ -373,7 +373,7 @@
 set EXC_TEMP,		LV+16			# temporary space
 
 set DTAG,		LV+15			# destination operand type
-set STAG, 		LV+14			# source operand type
+set STAG,		LV+14			# source operand type
 
 set SPCOND_FLG,		LV+10			# flag: special case (see below)
 
@@ -388,17 +388,17 @@
 # Helpful macros
 
 set FTEMP,		0			# offsets within an
-set FTEMP_EX, 		0			# extended precision
+set FTEMP_EX,		0			# extended precision
 set FTEMP_SGN,		2			# value saved in memory.
-set FTEMP_HI, 		4
-set FTEMP_LO, 		8
+set FTEMP_HI,		4
+set FTEMP_LO,		8
 set FTEMP_GRS,		12
 
 set LOCAL,		0			# offsets within an
-set LOCAL_EX, 		0			# extended precision 
+set LOCAL_EX,		0			# extended precision
 set LOCAL_SGN,		2			# value saved in memory.
-set LOCAL_HI, 		4
-set LOCAL_LO, 		8
+set LOCAL_HI,		4
+set LOCAL_LO,		8
 set LOCAL_GRS,		12
 
 set DST,		0			# offsets within an
@@ -488,17 +488,17 @@
 ######################################
 set dzinf_mask,		inf_mask+dz_mask+adz_mask
 set opnan_mask,		nan_mask+operr_mask+aiop_mask
-set nzi_mask,		0x01ffffff 		#clears N, Z, and I
+set nzi_mask,		0x01ffffff		#clears N, Z, and I
 set unfinx_mask,	unfl_mask+inex2_mask+aunfl_mask+ainex_mask
 set unf2inx_mask,	unfl_mask+inex2_mask+ainex_mask
 set ovfinx_mask,	ovfl_mask+inex2_mask+aovfl_mask+ainex_mask
 set inx1a_mask,		inex1_mask+ainex_mask
 set inx2a_mask,		inex2_mask+ainex_mask
-set snaniop_mask, 	nan_mask+snan_mask+aiop_mask
+set snaniop_mask,	nan_mask+snan_mask+aiop_mask
 set snaniop2_mask,	snan_mask+aiop_mask
 set naniop_mask,	nan_mask+aiop_mask
 set neginf_mask,	neg_mask+inf_mask
-set infaiop_mask, 	inf_mask+aiop_mask
+set infaiop_mask,	inf_mask+aiop_mask
 set negz_mask,		neg_mask+z_mask
 set opaop_mask,		operr_mask+aiop_mask
 set unfl_inx_mask,	unfl_mask+aunfl_mask+ainex_mask
@@ -527,8 +527,8 @@
 set mantissalen,	64			# length of mantissa in bits
 
 set BYTE,		1			# len(byte) == 1 byte
-set WORD, 		2			# len(word) == 2 bytes
-set LONG, 		4			# len(longword) == 2 bytes
+set WORD,		2			# len(word) == 2 bytes
+set LONG,		4			# len(longword) == 2 bytes
 
 set BSUN_VEC,		0xc0			# bsun    vector offset
 set INEX_VEC,		0xc4			# inexact vector offset
@@ -598,7 +598,7 @@
 # INPUT ***************************************************************	#
 #	- The system stack contains the FP Ovfl exception stack frame	#
 #	- The fsave frame contains the source operand			#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	Overflow Exception enabled:					#
 #	- The system stack is unchanged					#
@@ -609,24 +609,24 @@
 #									#
 # ALGORITHM ***********************************************************	#
 #	On the 060, if an FP overflow is present as the result of any	#
-# instruction, the 060 will take an overflow exception whether the 	#
-# exception is enabled or disabled in the FPCR. For the disabled case, 	#
+# instruction, the 060 will take an overflow exception whether the	#
+# exception is enabled or disabled in the FPCR. For the disabled case,	#
 # This handler emulates the instruction to determine what the correct	#
 # default result should be for the operation. This default result is	#
-# then stored in either the FP regfile, data regfile, or memory. 	#
-# Finally, the handler exits through the "callout" _fpsp_done() 	#
+# then stored in either the FP regfile, data regfile, or memory.	#
+# Finally, the handler exits through the "callout" _fpsp_done()		#
 # denoting that no exceptional conditions exist within the machine.	#
-# 	If the exception is enabled, then this handler must create the	#
+#	If the exception is enabled, then this handler must create the	#
 # exceptional operand and plave it in the fsave state frame, and store	#
-# the default result (only if the instruction is opclass 3). For 	#
-# exceptions enabled, this handler must exit through the "callout" 	#
+# the default result (only if the instruction is opclass 3). For	#
+# exceptions enabled, this handler must exit through the "callout"	#
 # _real_ovfl() so that the operating system enabled overflow handler	#
 # can handle this case.							#
-#	Two other conditions exist. First, if overflow was disabled 	#
-# but the inexact exception was enabled, this handler must exit 	#
+#	Two other conditions exist. First, if overflow was disabled	#
+# but the inexact exception was enabled, this handler must exit		#
 # through the "callout" _real_inex() regardless of whether the result	#
 # was inexact.								#
-#	Also, in the case of an opclass three instruction where 	#
+#	Also, in the case of an opclass three instruction where		#
 # overflow was disabled and the trace exception was enabled, this	#
 # handler must exit through the "callout" _real_trace().		#
 #									#
@@ -641,9 +641,9 @@
 
 	fsave		FP_SRC(%a6)		# grab the "busy" frame
 
- 	movm.l		&0x0303,EXC_DREGS(%a6)	# save d0-d1/a0-a1
+	movm.l		&0x0303,EXC_DREGS(%a6)	# save d0-d1/a0-a1
 	fmovm.l		%fpcr,%fpsr,%fpiar,USER_FPCR(%a6) # save ctrl regs
- 	fmovm.x		&0xc0,EXC_FPREGS(%a6)	# save fp0-fp1 on stack
+	fmovm.x		&0xc0,EXC_FPREGS(%a6)	# save fp0-fp1 on stack
 
 # the FPIAR holds the "current PC" of the faulting instruction
 	mov.l		USER_FPIAR(%a6),EXC_EXTWPTR(%a6)
@@ -667,7 +667,7 @@
 	bsr.l		set_tag_x		# tag the operand type
 	mov.b		%d0,STAG(%a6)		# maybe NORM,DENORM
 
-# bit five of the fp extension word separates the monadic and dyadic operations 
+# bit five of the fp extension word separates the monadic and dyadic operations
 # that can pass through fpsp_ovfl(). remember that fcmp, ftst, and fsincos
 # will never take this exception.
 	btst		&0x5,1+EXC_CMDREG(%a6)	# is operation monadic or dyadic?
@@ -740,7 +740,7 @@
 fovfl_ovfl_on:
 	fmovm.x		&0x40,FP_SRC(%a6)	# save EXOP (fp1) to stack
 
-	mov.w		&0xe005,2+FP_SRC(%a6) 	# save exc status
+	mov.w		&0xe005,2+FP_SRC(%a6)	# save exc status
 
 	fmovm.x		EXC_FPREGS(%a6),&0xc0	# restore fp0-fp1
 	fmovm.l		USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs
@@ -756,10 +756,10 @@
 # we must jump to real_inex().
 fovfl_inex_on:
 
-	fmovm.x		&0x40,FP_SRC(%a6) 	# save EXOP (fp1) to stack
+	fmovm.x		&0x40,FP_SRC(%a6)	# save EXOP (fp1) to stack
 
 	mov.b		&0xc4,1+EXC_VOFF(%a6)	# vector offset = 0xc4
-	mov.w		&0xe001,2+FP_SRC(%a6) 	# save exc status
+	mov.w		&0xe001,2+FP_SRC(%a6)	# save exc status
 
 	fmovm.x		EXC_FPREGS(%a6),&0xc0	# restore fp0-fp1
 	fmovm.l		USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs
@@ -810,7 +810,7 @@
 	btst		&0x7,(%sp)		# is trace on?
 	beq.l		_fpsp_done		# no
 
-	fmov.l		%fpiar,0x8(%sp)		# "Current PC" is in FPIAR	
+	fmov.l		%fpiar,0x8(%sp)		# "Current PC" is in FPIAR
 	mov.w		&0x2024,0x6(%sp)	# stk fmt = 0x2; voff = 0x024
 	bra.l		_real_trace
 
@@ -838,7 +838,7 @@
 # INPUT ***************************************************************	#
 #	- The system stack contains the FP Unfl exception stack frame	#
 #	- The fsave frame contains the source operand			#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	Underflow Exception enabled:					#
 #	- The system stack is unchanged					#
@@ -849,24 +849,24 @@
 #									#
 # ALGORITHM ***********************************************************	#
 #	On the 060, if an FP underflow is present as the result of any	#
-# instruction, the 060 will take an underflow exception whether the 	#
-# exception is enabled or disabled in the FPCR. For the disabled case, 	#
+# instruction, the 060 will take an underflow exception whether the	#
+# exception is enabled or disabled in the FPCR. For the disabled case,	#
 # This handler emulates the instruction to determine what the correct	#
 # default result should be for the operation. This default result is	#
-# then stored in either the FP regfile, data regfile, or memory. 	#
-# Finally, the handler exits through the "callout" _fpsp_done() 	#
+# then stored in either the FP regfile, data regfile, or memory.	#
+# Finally, the handler exits through the "callout" _fpsp_done()		#
 # denoting that no exceptional conditions exist within the machine.	#
-# 	If the exception is enabled, then this handler must create the	#
+#	If the exception is enabled, then this handler must create the	#
 # exceptional operand and plave it in the fsave state frame, and store	#
-# the default result (only if the instruction is opclass 3). For 	#
-# exceptions enabled, this handler must exit through the "callout" 	#
+# the default result (only if the instruction is opclass 3). For	#
+# exceptions enabled, this handler must exit through the "callout"	#
 # _real_unfl() so that the operating system enabled overflow handler	#
 # can handle this case.							#
-#	Two other conditions exist. First, if underflow was disabled 	#
-# but the inexact exception was enabled and the result was inexact, 	#
+#	Two other conditions exist. First, if underflow was disabled	#
+# but the inexact exception was enabled and the result was inexact,	#
 # this handler must exit through the "callout" _real_inex().		#
 # was inexact.								#
-#	Also, in the case of an opclass three instruction where 	#
+#	Also, in the case of an opclass three instruction where		#
 # underflow was disabled and the trace exception was enabled, this	#
 # handler must exit through the "callout" _real_trace().		#
 #									#
@@ -881,12 +881,12 @@
 
 	fsave		FP_SRC(%a6)		# grab the "busy" frame
 
- 	movm.l		&0x0303,EXC_DREGS(%a6)	# save d0-d1/a0-a1
+	movm.l		&0x0303,EXC_DREGS(%a6)	# save d0-d1/a0-a1
 	fmovm.l		%fpcr,%fpsr,%fpiar,USER_FPCR(%a6) # save ctrl regs
- 	fmovm.x		&0xc0,EXC_FPREGS(%a6)	# save fp0-fp1 on stack
+	fmovm.x		&0xc0,EXC_FPREGS(%a6)	# save fp0-fp1 on stack
 
 # the FPIAR holds the "current PC" of the faulting instruction
-	mov.l		USER_FPIAR(%a6),EXC_EXTWPTR(%a6)	
+	mov.l		USER_FPIAR(%a6),EXC_EXTWPTR(%a6)
 	mov.l		EXC_EXTWPTR(%a6),%a0	# fetch instruction addr
 	addq.l		&0x4,EXC_EXTWPTR(%a6)	# incr instruction ptr
 	bsr.l		_imem_read_long		# fetch the instruction words
@@ -905,13 +905,13 @@
 	bsr.l		set_tag_x		# tag the operand type
 	mov.b		%d0,STAG(%a6)		# maybe NORM,DENORM
 
-# bit five of the fp ext word separates the monadic and dyadic operations 
+# bit five of the fp ext word separates the monadic and dyadic operations
 # that can pass through fpsp_unfl(). remember that fcmp, and ftst
 # will never take this exception.
 	btst		&0x5,1+EXC_CMDREG(%a6)	# is op monadic or dyadic?
 	beq.b		funfl_extract		# monadic
 
-# now, what's left that's not dyadic is fsincos. we can distinguish it 
+# now, what's left that's not dyadic is fsincos. we can distinguish it
 # from all dyadics by the '0110xxx pattern
 	btst		&0x4,1+EXC_CMDREG(%a6)	# is op an fsincos?
 	bne.b		funfl_extract		# yes
@@ -962,7 +962,7 @@
 # (0x00000000_80000000_00000000), then the machine will take an
 # underflow exception. Since this is incorrect, we need to check
 # if our emulation, after re-doing the operation, decided that
-# no underflow was called for. We do these checks only in 
+# no underflow was called for. We do these checks only in
 # funfl_{unfl,inex}_on() because w/ both exceptions disabled, this
 # special case will simply exit gracefully with the correct result.
 
@@ -1002,7 +1002,7 @@
 funfl_unfl_on2:
 	fmovm.x		&0x40,FP_SRC(%a6)	# save EXOP (fp1) to stack
 
-	mov.w		&0xe003,2+FP_SRC(%a6) 	# save exc status
+	mov.w		&0xe003,2+FP_SRC(%a6)	# save exc status
 
 	fmovm.x		EXC_FPREGS(%a6),&0xc0	# restore fp0-fp1
 	fmovm.l		USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs
@@ -1021,7 +1021,7 @@
 # The `060 FPU multiplier hardware is such that if the result of a
 # multiply operation is the smallest possible normalized number
 # (0x00000000_80000000_00000000), then the machine will take an
-# underflow exception. 
+# underflow exception.
 # But, whether bogus or not, if inexact is enabled AND it occurred,
 # then we have to branch to real_inex.
 
@@ -1030,10 +1030,10 @@
 
 funfl_inex_on2:
 
-	fmovm.x		&0x40,FP_SRC(%a6) 	# save EXOP to stack
+	fmovm.x		&0x40,FP_SRC(%a6)	# save EXOP to stack
 
 	mov.b		&0xc4,1+EXC_VOFF(%a6)	# vector offset = 0xc4
-	mov.w		&0xe001,2+FP_SRC(%a6) 	# save exc status
+	mov.w		&0xe001,2+FP_SRC(%a6)	# save exc status
 
 	fmovm.x		EXC_FPREGS(%a6),&0xc0	# restore fp0-fp1
 	fmovm.l		USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs
@@ -1119,7 +1119,7 @@
 # INPUT ***************************************************************	#
 #	- The system stack contains the "Unimp Data Type" stk frame	#
 #	- The fsave frame contains the ssrc op (for UNNORM/DENORM)	#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	If Inexact exception (opclass 3):				#
 #	- The system stack is changed to an Inexact exception stk frame	#
@@ -1138,12 +1138,12 @@
 #									#
 # ALGORITHM ***********************************************************	#
 #	Two main instruction types can enter here: (1) DENORM or UNNORM	#
-# unimplemented data types. These can be either opclass 0,2 or 3 	#
+# unimplemented data types. These can be either opclass 0,2 or 3	#
 # instructions, and (2) PACKED unimplemented data format instructions	#
 # also of opclasses 0,2, or 3.						#
 #	For UNNORM/DENORM opclass 0 and 2, the handler fetches the src	#
 # operand from the fsave state frame and the dst operand (if dyadic)	#
-# from the FP register file. The instruction is then emulated by 	#
+# from the FP register file. The instruction is then emulated by	#
 # choosing an emulation routine from a table of routines indexed by	#
 # instruction type. Once the instruction has been emulated and result	#
 # saved, then we check to see if any enabled exceptions resulted from	#
@@ -1165,7 +1165,7 @@
 # (a Trace stack frame must be created here, too). If an FP exception	#
 # should occur, then we must create an exception stack frame of that	#
 # type and jump to either _real_snan(), _real_operr(), _real_inex(),	#
-# _real_unfl(), or _real_ovfl() as appropriate. PACKED opclass 3 	#
+# _real_unfl(), or _real_ovfl() as appropriate. PACKED opclass 3	#
 # emulation is performed in a similar manner.				#
 #									#
 #########################################################################
@@ -1177,7 +1177,7 @@
 #				*****************
 #				*      EA	*
 #	 pre-instruction	*		*
-# 	*****************	*****************
+#	*****************	*****************
 #	* 0x0 *  0x0dc  *	* 0x3 *  0x0dc  *
 #	*****************	*****************
 #	*     Next	*	*     Next	*
@@ -1206,9 +1206,9 @@
 
 	fsave		FP_SRC(%a6)		# save fp state
 
- 	movm.l		&0x0303,EXC_DREGS(%a6)	# save d0-d1/a0-a1
+	movm.l		&0x0303,EXC_DREGS(%a6)	# save d0-d1/a0-a1
 	fmovm.l		%fpcr,%fpsr,%fpiar,USER_FPCR(%a6) # save ctrl regs
- 	fmovm.x		&0xc0,EXC_FPREGS(%a6)	# save fp0-fp1 on stack
+	fmovm.x		&0xc0,EXC_FPREGS(%a6)	# save fp0-fp1 on stack
 
 	btst		&0x5,EXC_SR(%a6)	# user or supervisor mode?
 	bne.b		fu_s
@@ -1257,7 +1257,7 @@
 	fmov.l		&0x0,%fpsr
 
 # Opclass two w/ memory-to-fpn operation will have an incorrect extended
-# precision format if the src format was single or double and the 
+# precision format if the src format was single or double and the
 # source data type was an INF, NAN, DENORM, or UNNORM
 	lea		FP_SRC(%a6),%a0		# pass ptr to input
 	bsr.l		fix_skewed_ops
@@ -1276,7 +1276,7 @@
 
 	bfextu		EXC_CMDREG(%a6){&6:&3},%d0 # dyadic; load dst reg
 
-# bit five of the fp extension word separates the monadic and dyadic operations 
+# bit five of the fp extension word separates the monadic and dyadic operations
 # at this point
 	btst		&0x5,1+EXC_CMDREG(%a6)	# is operation monadic or dyadic?
 	beq.b		fu_extract		# monadic
@@ -1307,13 +1307,13 @@
 
 #
 # Exceptions in order of precedence:
-# 	BSUN	: none
+#	BSUN	: none
 #	SNAN	: all dyadic ops
 #	OPERR	: fsqrt(-NORM)
 #	OVFL	: all except ftst,fcmp
 #	UNFL	: all except ftst,fcmp
 #	DZ	: fdiv
-# 	INEX2	: all except ftst,fcmp
+#	INEX2	: all except ftst,fcmp
 #	INEX1	: none (packed doesn't go through here)
 #
 
@@ -1350,16 +1350,16 @@
 #
 # No exceptions occurred that were also enabled. Now:
 #
-#   	if (OVFL && ovfl_disabled && inexact_enabled) {
+#	if (OVFL && ovfl_disabled && inexact_enabled) {
 #	    branch to _real_inex() (even if the result was exact!);
-#     	} else {
+#	} else {
 #	    save the result in the proper fp reg (unless the op is fcmp or ftst);
 #	    return;
-#     	}
+#	}
 #
 	btst		&ovfl_bit,FPSR_EXCEPT(%a6) # was overflow set?
 	beq.b		fu_in_cont		# no
-	
+
 fu_in_ovflchk:
 	btst		&inex2_bit,FPCR_ENABLE(%a6) # was inexact enabled?
 	beq.b		fu_in_cont		# no
@@ -1379,7 +1379,7 @@
 #	} else {
 #		restore exc state (SNAN||OPERR||OVFL||UNFL||DZ||INEX) into the FPU;
 #	}
-#	    		
+#
 fu_in_exc:
 	subi.l		&24,%d0			# fix offset to be 0-8
 	cmpi.b		%d0,&0x6		# is exception INEX? (6)
@@ -1392,7 +1392,7 @@
 	bne.w		fu_in_exc_ovfl		# yes
 
 # here, we insert the correct fsave status value into the fsave frame for the
-# corresponding exception. the operand in the fsave frame should be the original 
+# corresponding exception. the operand in the fsave frame should be the original
 # src operand.
 fu_in_exc_exit:
 	mov.l		%d0,-(%sp)		# save d0
@@ -1423,8 +1423,8 @@
 	bra.b		fu_in_exc_exit
 
 # If the input operand to this operation was opclass two and a single
-# or double precision denorm, inf, or nan, the operand needs to be 
-# "corrected" in order to have the proper equivalent extended precision 
+# or double precision denorm, inf, or nan, the operand needs to be
+# "corrected" in order to have the proper equivalent extended precision
 # number.
 	global		fix_skewed_ops
 fix_skewed_ops:
@@ -1452,7 +1452,7 @@
 	bsr.l		norm			# normalize mantissa
 	neg.w		%d0			# -shft amt
 	addi.w		&0x3f81,%d0		# adjust new exponent
-	andi.w		&0x8000,LOCAL_EX(%a0) 	# clear old exponent
+	andi.w		&0x8000,LOCAL_EX(%a0)	# clear old exponent
 	or.w		%d0,LOCAL_EX(%a0)	# insert new exponent
 	rts
 
@@ -1461,7 +1461,7 @@
 	rts
 
 fso_infnan:
-	andi.b		&0x7f,LOCAL_HI(%a0) 	# clear j-bit
+	andi.b		&0x7f,LOCAL_HI(%a0)	# clear j-bit
 	ori.w		&0x7fff,LOCAL_EX(%a0)	# make exponent = $7fff
 	rts
 
@@ -1484,7 +1484,7 @@
 	bsr.l		norm			# normalize mantissa
 	neg.w		%d0			# -shft amt
 	addi.w		&0x3c01,%d0		# adjust new exponent
-	andi.w		&0x8000,LOCAL_EX(%a0) 	# clear old exponent
+	andi.w		&0x8000,LOCAL_EX(%a0)	# clear old exponent
 	or.w		%d0,LOCAL_EX(%a0)	# insert new exponent
 	rts
 
@@ -1536,13 +1536,13 @@
 	bsr.l		fout			# call fmove out routine
 
 # Exceptions in order of precedence:
-# 	BSUN	: none
+#	BSUN	: none
 #	SNAN	: none
 #	OPERR	: fmove.{b,w,l} out of large UNNORM
 #	OVFL	: fmove.{s,d}
 #	UNFL	: fmove.{s,d,x}
 #	DZ	: none
-# 	INEX2	: all
+#	INEX2	: all
 #	INEX1	: none (packed doesn't travel through here)
 
 # determine the highest priority exception(if any) set by the
@@ -1554,7 +1554,7 @@
 
 	mov.l		EXC_A6(%a6),(%a6)	# in case a6 changed
 
-# on extended precision opclass three instructions using pre-decrement or 
+# on extended precision opclass three instructions using pre-decrement or
 # post-increment addressing mode, the address register is not updated. is the
 # address register was the stack pointer used from user mode, then let's update
 # it here. if it was used from supervisor mode, then we have to handle this
@@ -1578,7 +1578,7 @@
 	bra.l		_fpsp_done
 
 # is the ea mode pre-decrement of the stack pointer from supervisor mode?
-# ("fmov.x fpm,-(a7)") if so, 
+# ("fmov.x fpm,-(a7)") if so,
 fu_out_done_s:
 	cmpi.b		SPCOND_FLG(%a6),&mda7_flg
 	bne.b		fu_out_done_cont
@@ -1616,7 +1616,7 @@
 	bfffo		%d0{&24:&8},%d0		# find highest priority exception
 	bne.b		fu_out_exc		# there is at least one set
 
-# no exceptions were set. 
+# no exceptions were set.
 # if a disabled overflow occurred and inexact was enabled but the result
 # was exact, then a branch to _real_inex() is made.
 	btst		&ovfl_bit,FPSR_EXCEPT(%a6) # was overflow set?
@@ -1633,7 +1633,7 @@
 # from FPIAR and put it in the trace stack frame then jump to _real_trace().
 #
 #		  UNSUPP FRAME		   TRACE FRAME
-# 		*****************	*****************
+#		*****************	*****************
 #		*      EA	*	*    Current	*
 #		*		*	*      PC	*
 #		*****************	*****************
@@ -1650,7 +1650,7 @@
 	fmov.l		%fpiar,0x8(%sp)
 	bra.l		_real_trace
 
-# an exception occurred and that exception was enabled. 	
+# an exception occurred and that exception was enabled.
 fu_out_exc:
 	subi.l		&24,%d0			# fix offset to be 0-8
 
@@ -1662,15 +1662,15 @@
 	swbeg		&0x8
 tbl_fu_out:
 	short		tbl_fu_out	- tbl_fu_out	# BSUN can't happen
-	short		tbl_fu_out 	- tbl_fu_out	# SNAN can't happen
+	short		tbl_fu_out	- tbl_fu_out	# SNAN can't happen
 	short		fu_operr	- tbl_fu_out	# OPERR
-	short		fu_ovfl 	- tbl_fu_out	# OVFL
-	short		fu_unfl 	- tbl_fu_out	# UNFL
+	short		fu_ovfl		- tbl_fu_out	# OVFL
+	short		fu_unfl		- tbl_fu_out	# UNFL
 	short		tbl_fu_out	- tbl_fu_out	# DZ can't happen
-	short		fu_inex 	- tbl_fu_out	# INEX2
+	short		fu_inex		- tbl_fu_out	# INEX2
 	short		tbl_fu_out	- tbl_fu_out	# INEX1 won't make it here
 
-# for snan,operr,ovfl,unfl, src op is still in FP_SRC so just 
+# for snan,operr,ovfl,unfl, src op is still in FP_SRC so just
 # frestore it.
 fu_snan:
 	fmovm.x		EXC_FPREGS(%a6),&0xc0	# restore fp0/fp1
@@ -1721,7 +1721,7 @@
 # underflow can happen for extended precision. extended precision opclass
 # three instruction exceptions don't update the stack pointer. so, if the
 # exception occurred from user mode, then simply update a7 and exit normally.
-# if the exception occurred from supervisor mode, check if 
+# if the exception occurred from supervisor mode, check if
 fu_unfl:
 	mov.l		EXC_A6(%a6),(%a6)	# restore a6
 
@@ -1730,7 +1730,7 @@
 
 	mov.l		EXC_A7(%a6),%a0		# restore a7 whether we need
 	mov.l		%a0,%usp		# to or not...
-	
+
 fu_unfl_cont:
 	fmovm.x		&0x40,FP_SRC(%a6)	# save EXOP to the stack
 
@@ -1821,7 +1821,7 @@
 
 	bfextu		EXC_CMDREG(%a6){&6:&3},%d0 # dyadic; load dst reg
 
-# bit five of the fp extension word separates the monadic and dyadic operations 
+# bit five of the fp extension word separates the monadic and dyadic operations
 # at this point
 	btst		&0x5,1+EXC_CMDREG(%a6)	# is operation monadic or dyadic?
 	beq.b		fu_extract_p		# monadic
@@ -1852,13 +1852,13 @@
 
 #
 # Exceptions in order of precedence:
-# 	BSUN	: none
+#	BSUN	: none
 #	SNAN	: all dyadic ops
 #	OPERR	: fsqrt(-NORM)
 #	OVFL	: all except ftst,fcmp
 #	UNFL	: all except ftst,fcmp
 #	DZ	: fdiv
-# 	INEX2	: all except ftst,fcmp
+#	INEX2	: all except ftst,fcmp
 #	INEX1	: all
 #
 
@@ -1928,16 +1928,16 @@
 #
 # No exceptions occurred that were also enabled. Now:
 #
-#   	if (OVFL && ovfl_disabled && inexact_enabled) {
+#	if (OVFL && ovfl_disabled && inexact_enabled) {
 #	    branch to _real_inex() (even if the result was exact!);
-#     	} else {
+#	} else {
 #	    save the result in the proper fp reg (unless the op is fcmp or ftst);
 #	    return;
-#     	}
+#	}
 #
 	btst		&ovfl_bit,FPSR_EXCEPT(%a6) # was overflow set?
 	beq.w		fu_in_cont_p		# no
-	
+
 fu_in_ovflchk_p:
 	btst		&inex2_bit,FPCR_ENABLE(%a6) # was inexact enabled?
 	beq.w		fu_in_cont_p		# no
@@ -1957,7 +1957,7 @@
 #	} else {
 #		restore exc state (SNAN||OPERR||OVFL||UNFL||DZ||INEX) into the FPU;
 #	}
-#	    		
+#
 fu_in_exc_p:
 	subi.l		&24,%d0			# fix offset to be 0-8
 	cmpi.b		%d0,&0x6		# is exception INEX? (6 or 7)
@@ -1970,7 +1970,7 @@
 	bne.w		fu_in_exc_ovfl_p	# yes
 
 # here, we insert the correct fsave status value into the fsave frame for the
-# corresponding exception. the operand in the fsave frame should be the original 
+# corresponding exception. the operand in the fsave frame should be the original
 # src operand.
 # as a reminder for future predicted pain and agony, we are passing in fsave the
 # "non-skewed" operand for cases of sgl and dbl src INFs,NANs, and DENORMs.
@@ -2033,21 +2033,21 @@
 	bne.b		fu_trace_p		# yes
 
 	bra.l		_fpsp_done		# exit to os
-	
+
 #
-# The opclass two PACKED instruction that took an "Unimplemented Data Type" 
-# exception was being traced. Make the "current" PC the FPIAR and put it in the 
+# The opclass two PACKED instruction that took an "Unimplemented Data Type"
+# exception was being traced. Make the "current" PC the FPIAR and put it in the
 # trace stack frame then jump to _real_trace().
-#					
+#
 #		  UNSUPP FRAME		   TRACE FRAME
 #		*****************	*****************
 #		*      EA	*	*    Current	*
 #		*		*	*      PC	*
 #		*****************	*****************
-#		* 0x2 *	0x0dc	* 	* 0x2 *  0x024	*
+#		* 0x2 *	0x0dc	*	* 0x2 *  0x024	*
 #		*****************	*****************
 #		*     Next	*	*     Next	*
-#		*      PC	*      	*      PC	*
+#		*      PC	*	*      PC	*
 #		*****************	*****************
 #		*      SR	*	*      SR	*
 #		*****************	*****************
@@ -2093,13 +2093,13 @@
 	bsr.l		fout			# call fmove out routine
 
 # Exceptions in order of precedence:
-# 	BSUN	: no
+#	BSUN	: no
 #	SNAN	: yes
 #	OPERR	: if ((k_factor > +17) || (dec. exp exceeds 3 digits))
 #	OVFL	: no
 #	UNFL	: no
 #	DZ	: no
-# 	INEX2	: yes
+#	INEX2	: yes
 #	INEX1	: no
 
 # determine the highest priority exception(if any) set by the
@@ -2163,7 +2163,7 @@
 
 	mov.l		EXC_A6(%a6),(%a6)	# restore a6
 
-# an exception occurred and that exception was enabled. 	
+# an exception occurred and that exception was enabled.
 # the only exception possible on packed move out are INEX, OPERR, and SNAN.
 fu_out_exc_p:
 	cmpi.b		%d0,&0x1a
@@ -2190,7 +2190,7 @@
 	movm.l		EXC_DREGS(%a6),&0x0303	# restore d0-d1/a0-a1
 
 	mov.w		&0x30d8,EXC_VOFF(%a6)	# vector offset = 0xd0
-	mov.w		&0xe006,2+FP_SRC(%a6) 	# set fsave status
+	mov.w		&0xe006,2+FP_SRC(%a6)	# set fsave status
 
 	frestore	FP_SRC(%a6)		# restore src operand
 
@@ -2230,7 +2230,7 @@
 	movm.l		EXC_DREGS(%a6),&0x0303	# restore d0-d1/a0-a1
 
 	mov.w		&0x30d0,EXC_VOFF(%a6)	# vector offset = 0xd0
-	mov.w		&0xe004,2+FP_SRC(%a6) 	# set fsave status
+	mov.w		&0xe004,2+FP_SRC(%a6)	# set fsave status
 
 	frestore	FP_SRC(%a6)		# restore src operand
 
@@ -2269,8 +2269,8 @@
 	fmovm.l		USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs
 	movm.l		EXC_DREGS(%a6),&0x0303	# restore d0-d1/a0-a1
 
-	mov.w		&0x30c4,EXC_VOFF(%a6) 	# vector offset = 0xc4
-	mov.w		&0xe001,2+FP_SRC(%a6) 	# set fsave status
+	mov.w		&0x30c4,EXC_VOFF(%a6)	# vector offset = 0xc4
+	mov.w		&0xe001,2+FP_SRC(%a6)	# set fsave status
 
 	frestore	FP_SRC(%a6)		# restore src operand
 
@@ -2311,7 +2311,7 @@
 	andi.w		&0x7fff,%d0		# strip sign
 	beq.b		funimp_skew_sgl_not
 	cmpi.w		%d0,&0x3f80
-	bgt.b		funimp_skew_sgl_not		
+	bgt.b		funimp_skew_sgl_not
 	neg.w		%d0			# make exponent negative
 	addi.w		&0x3f81,%d0		# find amt to shift
 	mov.l		FP_SRC_HI(%a6),%d1	# fetch DENORM hi(man)
@@ -2328,7 +2328,7 @@
 	andi.w		&0x7fff,%d0		# strip sign
 	beq.b		funimp_skew_dbl_not
 	cmpi.w		%d0,&0x3c00
-	bgt.b		funimp_skew_dbl_not		
+	bgt.b		funimp_skew_dbl_not
 
 	tst.b		FP_SRC_EX(%a6)		# make "internal format"
 	smi.b		0x2+FP_SRC(%a6)
@@ -2361,7 +2361,7 @@
 #########################################################################
 # XDEF ****************************************************************	#
 #	_fpsp_effadd(): 060FPSP entry point for FP "Unimplemented	#
-#		     	effective address" exception.			#
+#			effective address" exception.			#
 #									#
 #	This handler should be the first code executed upon taking the	#
 #	FP Unimplemented Effective Address exception in an operating	#
@@ -2386,7 +2386,7 @@
 #									#
 # INPUT ***************************************************************	#
 #	- The system stack contains the "Unimplemented <ea>" stk frame	#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	If access error:						#
 #	- The system stack is changed to an access error stack frame	#
@@ -2407,17 +2407,17 @@
 #	For immediate data operations, the data is read in w/ a		#
 # _mem_read() "callout", converted to FP binary (if packed), and used	#
 # as the source operand to the instruction specified by the instruction	#
-# word. If no FP exception should be reported ads a result of the 	#
+# word. If no FP exception should be reported ads a result of the	#
 # emulation, then the result is stored to the destination register and	#
 # the handler exits through _fpsp_done(). If an enabled exc has been	#
 # signalled as a result of emulation, then an fsave state frame		#
 # corresponding to the FP exception type must be entered into the 060	#
-# FPU before exiting. In either the enabled or disabled cases, we 	#
+# FPU before exiting. In either the enabled or disabled cases, we	#
 # must also check if a Trace exception is pending, in which case, we	#
 # must create a Trace exception stack frame from the current exception	#
 # stack frame. If no Trace is pending, we simply exit through		#
 # _fpsp_done().								#
-#	For "fmovm.x", call the routine fmovm_dynamic() which will 	#
+#	For "fmovm.x", call the routine fmovm_dynamic() which will	#
 # decode and emulate the instruction. No FP exceptions can be pending	#
 # as a result of this operation emulation. A Trace exception can be	#
 # pending, though, which means the current stack frame must be changed	#
@@ -2436,11 +2436,11 @@
 # before the "FPU disabled" exception, but the "FPU disabled" exception	#
 # has higher priority, we check the disabled bit in the PCR. If set,	#
 # then we must create an 8 word "FPU disabled" exception stack frame	#
-# from the current 4 word exception stack frame. This includes 		#
-# reproducing the effective address of the instruction to put on the 	#
+# from the current 4 word exception stack frame. This includes		#
+# reproducing the effective address of the instruction to put on the	#
 # new stack frame.							#
 #									#
-# 	In the process of all emulation work, if a _mem_read()		#
+#	In the process of all emulation work, if a _mem_read()		#
 # "callout" returns a failing result indicating an access error, then	#
 # we must create an access error stack frame from the current stack	#
 # frame. This information includes a faulting address and a fault-	#
@@ -2481,18 +2481,18 @@
 
 #
 # here, we will have:
-# 	fabs	fdabs	fsabs		facos		fmod
+#	fabs	fdabs	fsabs		facos		fmod
 #	fadd	fdadd	fsadd		fasin		frem
-# 	fcmp				fatan		fscale
+#	fcmp				fatan		fscale
 #	fdiv	fddiv	fsdiv		fatanh		fsin
 #	fint				fcos		fsincos
 #	fintrz				fcosh		fsinh
 #	fmove	fdmove	fsmove		fetox		ftan
-# 	fmul	fdmul	fsmul		fetoxm1		ftanh
+#	fmul	fdmul	fsmul		fetoxm1		ftanh
 #	fneg	fdneg	fsneg		fgetexp		ftentox
 #	fsgldiv				fgetman		ftwotox
-# 	fsglmul				flog10
-# 	fsqrt				flog2
+#	fsglmul				flog10
+#	fsqrt				flog2
 #	fsub	fdsub	fssub		flogn
 #	ftst				flognp1
 # which can all use f<op>.{x,p}
@@ -2584,8 +2584,8 @@
 # store a result. then, only fcmp will branch back and pick up a dst operand.
 	st		STORE_FLG(%a6)		# don't store a final result
 	btst		&0x1,1+EXC_CMDREG(%a6)	# is operation fcmp?
-	beq.b		iea_op_loaddst		# yes	
-	
+	beq.b		iea_op_loaddst		# yes
+
 iea_op_extract:
 	clr.l		%d0
 	mov.b		FPCR_MODE(%a6),%d0	# pass: rnd mode,prec
@@ -2658,7 +2658,7 @@
 	btst		&inex2_bit,FPCR_ENABLE(%a6) # is inexact enabled?
 	beq.b		iea_op_store		# no
 	bra.b		iea_op_exc_ovfl		# yes
-	
+
 # an enabled exception occurred. we have to insert the exception type back into
 # the machine.
 iea_op_exc:
@@ -2697,7 +2697,7 @@
 	fmovm.l		USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs
 	movm.l		EXC_DREGS(%a6),&0x0303	# restore d0-d1/a0-a1
 
-	frestore 	FP_SRC(%a6)		# restore exceptional state
+	frestore	FP_SRC(%a6)		# restore exceptional state
 
 	unlk		%a6			# unravel the frame
 
@@ -2705,12 +2705,12 @@
 	bne.b		iea_op_trace		# yes
 
 	bra.l		_fpsp_done		# exit to os
-	
+
 #
 # The opclass two instruction that took an "Unimplemented Effective Address"
 # exception was being traced. Make the "current" PC the FPIAR and put it in
 # the trace stack frame then jump to _real_trace().
-#					
+#
 #		 UNIMP EA FRAME		   TRACE FRAME
 #		*****************	*****************
 #		* 0x0 *  0x0f0	*	*    Current	*
@@ -2743,7 +2743,7 @@
 
 iea_fmovm_data_u:
 	mov.l		%usp,%a0
-	mov.l		%a0,EXC_A7(%a6)		# store current a7	
+	mov.l		%a0,EXC_A7(%a6)		# store current a7
 	bsr.l		fmovm_dynamic		# do dynamic fmovm
 	mov.l		EXC_A7(%a6),%a0		# load possibly new a7
 	mov.l		%a0,%usp		# update usp
@@ -2774,10 +2774,10 @@
 
 	lea		(EXC_SR,%a6,%d0),%a0
 	mov.l		%a0,EXC_SR(%a6)
-	
+
 	fmovm.x		EXC_FP0(%a6),&0xc0	# restore fp0-fp1
 	fmovm.l		USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs
- 	movm.l		EXC_DREGS(%a6),&0x0303 	# restore d0-d1/a0-a1
+	movm.l		EXC_DREGS(%a6),&0x0303	# restore d0-d1/a0-a1
 
 	unlk		%a6
 	mov.l		(%sp)+,%sp
@@ -2791,15 +2791,15 @@
 
 	lea		(EXC_SR-0x4,%a6,%d0),%a0
 	mov.l		%a0,EXC_SR(%a6)
-	
+
 	fmovm.x		EXC_FP0(%a6),&0xc0	# restore fp0-fp1
 	fmovm.l		USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs
- 	movm.l		EXC_DREGS(%a6),&0x0303 	# restore d0-d1/a0-a1
+	movm.l		EXC_DREGS(%a6),&0x0303	# restore d0-d1/a0-a1
 
 	unlk		%a6
 	mov.l		(%sp)+,%sp
 	bra.l		_real_trace
-	
+
 # right now, d1 = size and d0 = the strg.
 iea_fmovm_data_predec:
 	mov.b		%d1,EXC_VOFF(%a6)	# store strg
@@ -2807,7 +2807,7 @@
 
 	fmovm.x		EXC_FP0(%a6),&0xc0	# restore fp0-fp1
 	fmovm.l		USER_FPCR(%a6),%fpcr,%fpsr,%fpiar # restore ctrl regs
- 	movm.l		EXC_DREGS(%a6),&0x0303 	# restore d0-d1/a0-a1
+	movm.l		EXC_DREGS(%a6),&0x0303	# restore d0-d1/a0-a1
 
 	mov.l		(%a6),-(%sp)		# make a copy of a6
 	mov.l		%d0,-(%sp)		# save d0
@@ -2909,10 +2909,10 @@
 
 #
 # The control reg instruction that took an "Unimplemented Effective Address"
-# exception was being traced. The "Current PC" for the trace frame is the 
+# exception was being traced. The "Current PC" for the trace frame is the
 # PC stacked for Unimp EA. The "Next PC" is in EXC_EXTWPTR.
 # After fixing the stack frame, jump to _real_trace().
-#					
+#
 #		 UNIMP EA FRAME		   TRACE FRAME
 #		*****************	*****************
 #		* 0x0 *  0x0f0	*	*    Current	*
@@ -3065,7 +3065,7 @@
 #	_fpsp_operr(): 060FPSP entry point for FP Operr exception.	#
 #									#
 #	This handler should be the first code executed upon taking the	#
-# 	FP Operand Error exception in an operating system.		#
+#	FP Operand Error exception in an operating system.		#
 #									#
 # XREF ****************************************************************	#
 #	_imem_read_long() - read instruction longword			#
@@ -3078,7 +3078,7 @@
 # INPUT ***************************************************************	#
 #	- The system stack contains the FP Operr exception frame	#
 #	- The fsave frame contains the source operand			#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	No access error:						#
 #	- The system stack is unchanged					#
@@ -3087,16 +3087,16 @@
 # ALGORITHM ***********************************************************	#
 #	In a system where the FP Operr exception is enabled, the goal	#
 # is to get to the handler specified at _real_operr(). But, on the 060,	#
-# for opclass zero and two instruction taking this exception, the 	#
+# for opclass zero and two instruction taking this exception, the	#
 # input operand in the fsave frame may be incorrect for some cases	#
 # and needs to be corrected. This handler calls fix_skewed_ops() to	#
 # do just this and then exits through _real_operr().			#
 #	For opclass 3 instructions, the 060 doesn't store the default	#
 # operr result out to memory or data register file as it should.	#
 # This code must emulate the move out before finally exiting through	#
-# _real_inex(). The move out, if to memory, is performed using 		#
+# _real_inex(). The move out, if to memory, is performed using		#
 # _mem_write() "callout" routines that may return a failing result.	#
-# In this special case, the handler must exit through facc_out() 	#
+# In this special case, the handler must exit through facc_out()	#
 # which creates an access error stack frame from the current operr	#
 # stack frame.								#
 #									#
@@ -3109,13 +3109,13 @@
 
 	fsave		FP_SRC(%a6)		# grab the "busy" frame
 
- 	movm.l		&0x0303,EXC_DREGS(%a6)	# save d0-d1/a0-a1
+	movm.l		&0x0303,EXC_DREGS(%a6)	# save d0-d1/a0-a1
 	fmovm.l		%fpcr,%fpsr,%fpiar,USER_FPCR(%a6) # save ctrl regs
- 	fmovm.x		&0xc0,EXC_FPREGS(%a6)	# save fp0-fp1 on stack
+	fmovm.x		&0xc0,EXC_FPREGS(%a6)	# save fp0-fp1 on stack
 
 # the FPIAR holds the "current PC" of the faulting instruction
 	mov.l		USER_FPIAR(%a6),EXC_EXTWPTR(%a6)
-	
+
 	mov.l		EXC_EXTWPTR(%a6),%a0	# fetch instruction addr
 	addq.l		&0x4,EXC_EXTWPTR(%a6)	# incr instruction ptr
 	bsr.l		_imem_read_long		# fetch the instruction words
@@ -3129,7 +3129,7 @@
 
 # here, we simply see if the operand in the fsave frame needs to be "unskewed".
 # this would be the case for opclass two operations with a source infinity or
-# denorm operand in the sgl or dbl format. NANs also become skewed, but can't 
+# denorm operand in the sgl or dbl format. NANs also become skewed, but can't
 # cause an operr so we don't need to check for them here.
 	lea		FP_SRC(%a6),%a0		# pass: ptr to src op
 	bsr.l		fix_skewed_ops		# fix src op
@@ -3200,7 +3200,7 @@
 	short		tbl_operr    - tbl_operr # dbl prec shouldn't happen
 	short		foperr_out_b - tbl_operr # byte integer
 	short		tbl_operr    - tbl_operr # packed won't enter here
-	
+
 foperr_out_b:
 	mov.b		L_SCR1(%a6),%d0		# load positive default result
 	cmpi.b		%d1,&0x7		# is <ea> mode a data reg?
@@ -3254,7 +3254,7 @@
 #	_fpsp_snan(): 060FPSP entry point for FP SNAN exception.	#
 #									#
 #	This handler should be the first code executed upon taking the	#
-# 	FP Signalling NAN exception in an operating system.		#
+#	FP Signalling NAN exception in an operating system.		#
 #									#
 # XREF ****************************************************************	#
 #	_imem_read_long() - read instruction longword			#
@@ -3268,7 +3268,7 @@
 # INPUT ***************************************************************	#
 #	- The system stack contains the FP SNAN exception frame		#
 #	- The fsave frame contains the source operand			#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	No access error:						#
 #	- The system stack is unchanged					#
@@ -3277,16 +3277,16 @@
 # ALGORITHM ***********************************************************	#
 #	In a system where the FP SNAN exception is enabled, the goal	#
 # is to get to the handler specified at _real_snan(). But, on the 060,	#
-# for opclass zero and two instructions taking this exception, the 	#
+# for opclass zero and two instructions taking this exception, the	#
 # input operand in the fsave frame may be incorrect for some cases	#
 # and needs to be corrected. This handler calls fix_skewed_ops() to	#
 # do just this and then exits through _real_snan().			#
 #	For opclass 3 instructions, the 060 doesn't store the default	#
 # SNAN result out to memory or data register file as it should.		#
 # This code must emulate the move out before finally exiting through	#
-# _real_snan(). The move out, if to memory, is performed using 		#
+# _real_snan(). The move out, if to memory, is performed using		#
 # _mem_write() "callout" routines that may return a failing result.	#
-# In this special case, the handler must exit through facc_out() 	#
+# In this special case, the handler must exit through facc_out()	#
 # which creates an access error stack frame from the current SNAN	#
 # stack frame.								#
 #	For the case of an extended precision opclass 3 instruction,	#
@@ -3305,13 +3305,13 @@
 
 	fsave		FP_SRC(%a6)		# grab the "busy" frame
 
- 	movm.l		&0x0303,EXC_DREGS(%a6)	# save d0-d1/a0-a1
+	movm.l		&0x0303,EXC_DREGS(%a6)	# save d0-d1/a0-a1
 	fmovm.l		%fpcr,%fpsr,%fpiar,USER_FPCR(%a6) # save ctrl regs
- 	fmovm.x		&0xc0,EXC_FPREGS(%a6)	# save fp0-fp1 on stack
+	fmovm.x		&0xc0,EXC_FPREGS(%a6)	# save fp0-fp1 on stack
 
 # the FPIAR holds the "current PC" of the faulting instruction
 	mov.l		USER_FPIAR(%a6),EXC_EXTWPTR(%a6)
-	
+
 	mov.l		EXC_EXTWPTR(%a6),%a0	# fetch instruction addr
 	addq.l		&0x4,EXC_EXTWPTR(%a6)	# incr instruction ptr
 	bsr.l		_imem_read_long		# fetch the instruction words
@@ -3339,7 +3339,7 @@
 
 	unlk		%a6
 	bra.l		_real_snan
-		
+
 ########################################################################
 
 #
@@ -3349,7 +3349,7 @@
 #
 # byte, word, long, and packed destination format operations can pass
 # through here. since packed format operations already were handled by
-# fpsp_unsupp(), then we need to do nothing else for them here. 
+# fpsp_unsupp(), then we need to do nothing else for them here.
 # for byte, word, and long, we simply need to test the sign of the src
 # operand and save the appropriate minimum or maximum integer value
 # to the effective address as pointed to by the stacked effective address.
@@ -3370,7 +3370,7 @@
 	short		fsnan_out_d - tbl_snan # dbl prec shouldn't happen
 	short		fsnan_out_b - tbl_snan # byte integer
 	short		tbl_snan    - tbl_snan # packed needs no help
-	
+
 fsnan_out_b:
 	mov.b		FP_SRC_HI(%a6),%d0	# load upper byte of SNAN
 	bset		&6,%d0			# set SNAN bit
@@ -3496,7 +3496,7 @@
 	mov.l		%usp,%a0		# fetch user stack pointer
 	mov.l		%a0,EXC_A7(%a6)		# save on stack for calc_ea()
 	mov.l		(%a6),EXC_A6(%a6)
-	
+
 	bsr.l		_calc_ea_fout		# find the correct ea,update An
 	mov.l		%a0,%a1
 	mov.l		%a0,EXC_EA(%a6)		# stack correct <ea>
@@ -3545,7 +3545,7 @@
 	mov.l		LOCAL_SIZE+FP_SCR0_LO(%sp),LOCAL_SIZE+EXC_EA(%sp)
 
 	add.l		&LOCAL_SIZE-0x8,%sp
-	
+
 	bra.l		_real_snan
 
 #########################################################################
@@ -3553,7 +3553,7 @@
 #	_fpsp_inex(): 060FPSP entry point for FP Inexact exception.	#
 #									#
 #	This handler should be the first code executed upon taking the	#
-# 	FP Inexact exception in an operating system.			#
+#	FP Inexact exception in an operating system.			#
 #									#
 # XREF ****************************************************************	#
 #	_imem_read_long() - read instruction longword			#
@@ -3570,7 +3570,7 @@
 # INPUT ***************************************************************	#
 #	- The system stack contains the FP Inexact exception frame	#
 #	- The fsave frame contains the source operand			#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	- The system stack is unchanged					#
 #	- The fsave frame contains the adjusted src op for opclass 0,2	#
@@ -3578,10 +3578,10 @@
 # ALGORITHM ***********************************************************	#
 #	In a system where the FP Inexact exception is enabled, the goal	#
 # is to get to the handler specified at _real_inex(). But, on the 060,	#
-# for opclass zero and two instruction taking this exception, the 	#
+# for opclass zero and two instruction taking this exception, the	#
 # hardware doesn't store the correct result to the destination FP	#
-# register as did the '040 and '881/2. This handler must emulate the 	#
-# instruction in order to get this value and then store it to the 	#
+# register as did the '040 and '881/2. This handler must emulate the	#
+# instruction in order to get this value and then store it to the	#
 # correct register before calling _real_inex().				#
 #	For opclass 3 instructions, the 060 doesn't store the default	#
 # inexact result out to memory or data register file as it should.	#
@@ -3597,13 +3597,13 @@
 
 	fsave		FP_SRC(%a6)		# grab the "busy" frame
 
- 	movm.l		&0x0303,EXC_DREGS(%a6)	# save d0-d1/a0-a1
+	movm.l		&0x0303,EXC_DREGS(%a6)	# save d0-d1/a0-a1
 	fmovm.l		%fpcr,%fpsr,%fpiar,USER_FPCR(%a6) # save ctrl regs
- 	fmovm.x		&0xc0,EXC_FPREGS(%a6)	# save fp0-fp1 on stack
+	fmovm.x		&0xc0,EXC_FPREGS(%a6)	# save fp0-fp1 on stack
 
 # the FPIAR holds the "current PC" of the faulting instruction
 	mov.l		USER_FPIAR(%a6),EXC_EXTWPTR(%a6)
-	
+
 	mov.l		EXC_EXTWPTR(%a6),%a0	# fetch instruction addr
 	addq.l		&0x4,EXC_EXTWPTR(%a6)	# incr instruction ptr
 	bsr.l		_imem_read_long		# fetch the instruction words
@@ -3615,7 +3615,7 @@
 	bne.w		finex_out		# fmove out
 
 
-# the hardware, for "fabs" and "fneg" w/ a long source format, puts the 
+# the hardware, for "fabs" and "fneg" w/ a long source format, puts the
 # longword integer directly into the upper longword of the mantissa along
 # w/ an exponent value of 0x401e. we convert this to extended precision here.
 	bfextu		%d0{&19:&3},%d0		# fetch instr size
@@ -3749,7 +3749,7 @@
 # INPUT ***************************************************************	#
 #	- The system stack contains the FP DZ exception stack.		#
 #	- The fsave frame contains the source operand.			#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	- The system stack contains the FP DZ exception stack.		#
 #	- The fsave frame contains the adjusted source operand.		#
@@ -3760,7 +3760,7 @@
 # exception is taken, the input operand in the fsave state frame may	#
 # be incorrect for some cases and need to be adjusted. So, this package	#
 # adjusts the operand using fix_skewed_ops() and then branches to	#
-# _real_dz(). 								#
+# _real_dz().								#
 #									#
 #########################################################################
 
@@ -3771,13 +3771,13 @@
 
 	fsave		FP_SRC(%a6)		# grab the "busy" frame
 
- 	movm.l		&0x0303,EXC_DREGS(%a6)	# save d0-d1/a0-a1
+	movm.l		&0x0303,EXC_DREGS(%a6)	# save d0-d1/a0-a1
 	fmovm.l		%fpcr,%fpsr,%fpiar,USER_FPCR(%a6) # save ctrl regs
- 	fmovm.x		&0xc0,EXC_FPREGS(%a6)	# save fp0-fp1 on stack
+	fmovm.x		&0xc0,EXC_FPREGS(%a6)	# save fp0-fp1 on stack
 
 # the FPIAR holds the "current PC" of the faulting instruction
 	mov.l		USER_FPIAR(%a6),EXC_EXTWPTR(%a6)
-	
+
 	mov.l		EXC_EXTWPTR(%a6),%a0	# fetch instruction addr
 	addq.l		&0x4,EXC_EXTWPTR(%a6)	# incr instruction ptr
 	bsr.l		_imem_read_long		# fetch the instruction words
@@ -3805,7 +3805,7 @@
 #########################################################################
 # XDEF ****************************************************************	#
 #	_fpsp_fline(): 060FPSP entry point for "Line F emulator"	#
-#		       exception when the "reduced" version of the 	#
+#		       exception when the "reduced" version of the	#
 #		       FPSP is implemented that does not emulate	#
 #		       FP unimplemented instructions.			#
 #									#
@@ -3820,12 +3820,12 @@
 # INPUT ***************************************************************	#
 #	- The system stack contains a "Line F Emulator" exception	#
 #	  stack frame.							#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	- The system stack is unchanged.				#
 #									#
 # ALGORITHM ***********************************************************	#
-# 	When a "Line F Emulator" exception occurs in a system where	#
+#	When a "Line F Emulator" exception occurs in a system where	#
 # "FPU Unimplemented" instructions will not be emulated, the exception	#
 # can occur because then FPU is disabled or the instruction is to be	#
 # classifed as "Line F". This module determines which case exists and	#
@@ -3853,21 +3853,21 @@
 #									#
 # INPUT ***************************************************************	#
 #	d0 = number of bytes to adjust <ea> by				#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	None								#
 #									#
 # ALGORITHM ***********************************************************	#
 # "Dummy" CALCulate Effective Address:					#
-# 	The stacked <ea> for FP unimplemented instructions and opclass	#
+#	The stacked <ea> for FP unimplemented instructions and opclass	#
 #	two packed instructions is correct with the exception of...	#
 #									#
 #	1) -(An)   : The register is not updated regardless of size.	#
-#		     Also, for extended precision and packed, the 	#
+#		     Also, for extended precision and packed, the	#
 #		     stacked <ea> value is 8 bytes too big		#
 #	2) (An)+   : The register is not updated.			#
-#	3) #<data> : The upper longword of the immediate operand is 	#
-#		     stacked b,w,l and s sizes are completely stacked. 	#
+#	3) #<data> : The upper longword of the immediate operand is	#
+#		     stacked b,w,l and s sizes are completely stacked.	#
 #		     d,x, and p are not.				#
 #									#
 #########################################################################
@@ -3903,8 +3903,8 @@
 	lea		([USER_FPIAR,%a6],0x4),%a0 # no; return <ea>
 	rts
 
-# here, the <ea> is stacked correctly. however, we must update the 
-# address register...	
+# here, the <ea> is stacked correctly. however, we must update the
+# address register...
 dcea_pi:
 	mov.l		%a0,%d0			# pass amt to inc by
 	bsr.l		inc_areg		# inc addr register
@@ -3912,7 +3912,7 @@
 	mov.l		EXC_EA(%a6),%a0		# stacked <ea> is correct
 	rts
 
-# the <ea> is stacked correctly for all but extended and packed which 
+# the <ea> is stacked correctly for all but extended and packed which
 # the <ea>s are 8 bytes too large.
 # it would make no sense to have a pre-decrement to a7 in supervisor
 # mode so we don't even worry about this tricky case here : )
@@ -3932,7 +3932,7 @@
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	_calc_ea_fout(): calculate correct stacked <ea> for extended	#
+#	_calc_ea_fout(): calculate correct stacked <ea> for extended	#
 #			 and packed data opclass 3 operations.		#
 #									#
 # XREF ****************************************************************	#
@@ -3940,22 +3940,22 @@
 #									#
 # INPUT ***************************************************************	#
 #	None								#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	a0 = return correct effective address				#
 #									#
 # ALGORITHM ***********************************************************	#
 #	For opclass 3 extended and packed data operations, the <ea>	#
 # stacked for the exception is incorrect for -(an) and (an)+ addressing	#
-# modes. Also, while we're at it, the index register itself must get 	#
+# modes. Also, while we're at it, the index register itself must get	#
 # updated.								#
-# 	So, for -(an), we must subtract 8 off of the stacked <ea> value	#
+#	So, for -(an), we must subtract 8 off of the stacked <ea> value	#
 # and return that value as the correct <ea> and store that value in An.	#
 # For (an)+, the stacked <ea> is correct but we must adjust An by +12.	#
 #									#
 #########################################################################
 
-# This calc_ea is currently used to retrieve the correct <ea> 
+# This calc_ea is currently used to retrieve the correct <ea>
 # for fmove outs of type extended and packed.
 	global		_calc_ea_fout
 _calc_ea_fout:
@@ -3976,7 +3976,7 @@
 
 # (An)+ : extended and packed fmove out
 #	: stacked <ea> is correct
-#	: "An" not updated 
+#	: "An" not updated
 ceaf_pi:
 	mov.w		(tbl_ceaf_pi.b,%pc,%d1.w*2),%d1
 	mov.l		EXC_EA(%a6),%a0
@@ -4077,11 +4077,11 @@
 
 	swbeg		&109
 tbl_unsupp:
-	long		fin	 	- tbl_unsupp	# 00: fmove
-	long		fint	 	- tbl_unsupp	# 01: fint
-	long		tbl_unsupp 	- tbl_unsupp	# 02: fsinh
-	long		fintrz	 	- tbl_unsupp	# 03: fintrz
-	long		fsqrt	 	- tbl_unsupp	# 04: fsqrt
+	long		fin		- tbl_unsupp	# 00: fmove
+	long		fint		- tbl_unsupp	# 01: fint
+	long		tbl_unsupp	- tbl_unsupp	# 02: fsinh
+	long		fintrz		- tbl_unsupp	# 03: fintrz
+	long		fsqrt		- tbl_unsupp	# 04: fsqrt
 	long		tbl_unsupp	- tbl_unsupp
 	long		tbl_unsupp	- tbl_unsupp	# 06: flognp1
 	long		tbl_unsupp	- tbl_unsupp
@@ -4101,23 +4101,23 @@
 	long		tbl_unsupp	- tbl_unsupp	# 15: flog10
 	long		tbl_unsupp	- tbl_unsupp	# 16: flog2
 	long		tbl_unsupp	- tbl_unsupp
-	long		fabs		- tbl_unsupp 	# 18: fabs
+	long		fabs		- tbl_unsupp	# 18: fabs
 	long		tbl_unsupp	- tbl_unsupp	# 19: fcosh
-	long		fneg		- tbl_unsupp 	# 1a: fneg
+	long		fneg		- tbl_unsupp	# 1a: fneg
 	long		tbl_unsupp	- tbl_unsupp
 	long		tbl_unsupp	- tbl_unsupp	# 1c: facos
 	long		tbl_unsupp	- tbl_unsupp	# 1d: fcos
 	long		tbl_unsupp	- tbl_unsupp	# 1e: fgetexp
 	long		tbl_unsupp	- tbl_unsupp	# 1f: fgetman
-	long		fdiv		- tbl_unsupp 	# 20: fdiv
+	long		fdiv		- tbl_unsupp	# 20: fdiv
 	long		tbl_unsupp	- tbl_unsupp	# 21: fmod
-	long		fadd		- tbl_unsupp 	# 22: fadd
-	long		fmul		- tbl_unsupp 	# 23: fmul
-	long		fsgldiv		- tbl_unsupp 	# 24: fsgldiv
+	long		fadd		- tbl_unsupp	# 22: fadd
+	long		fmul		- tbl_unsupp	# 23: fmul
+	long		fsgldiv		- tbl_unsupp	# 24: fsgldiv
 	long		tbl_unsupp	- tbl_unsupp	# 25: frem
 	long		tbl_unsupp	- tbl_unsupp	# 26: fscale
-	long		fsglmul		- tbl_unsupp 	# 27: fsglmul
-	long		fsub		- tbl_unsupp 	# 28: fsub
+	long		fsglmul		- tbl_unsupp	# 27: fsglmul
+	long		fsub		- tbl_unsupp	# 28: fsub
 	long		tbl_unsupp	- tbl_unsupp
 	long		tbl_unsupp	- tbl_unsupp
 	long		tbl_unsupp	- tbl_unsupp
@@ -4133,20 +4133,20 @@
 	long		tbl_unsupp	- tbl_unsupp	# 35: fsincos
 	long		tbl_unsupp	- tbl_unsupp	# 36: fsincos
 	long		tbl_unsupp	- tbl_unsupp	# 37: fsincos
-	long		fcmp		- tbl_unsupp 	# 38: fcmp
+	long		fcmp		- tbl_unsupp	# 38: fcmp
 	long		tbl_unsupp	- tbl_unsupp
-	long		ftst		- tbl_unsupp 	# 3a: ftst
+	long		ftst		- tbl_unsupp	# 3a: ftst
 	long		tbl_unsupp	- tbl_unsupp
 	long		tbl_unsupp	- tbl_unsupp
 	long		tbl_unsupp	- tbl_unsupp
 	long		tbl_unsupp	- tbl_unsupp
 	long		tbl_unsupp	- tbl_unsupp
-	long		fsin		- tbl_unsupp 	# 40: fsmove
-	long		fssqrt		- tbl_unsupp 	# 41: fssqrt
+	long		fsin		- tbl_unsupp	# 40: fsmove
+	long		fssqrt		- tbl_unsupp	# 41: fssqrt
 	long		tbl_unsupp	- tbl_unsupp
 	long		tbl_unsupp	- tbl_unsupp
 	long		fdin		- tbl_unsupp	# 44: fdmove
-	long		fdsqrt		- tbl_unsupp 	# 45: fdsqrt
+	long		fdsqrt		- tbl_unsupp	# 45: fdsqrt
 	long		tbl_unsupp	- tbl_unsupp
 	long		tbl_unsupp	- tbl_unsupp
 	long		tbl_unsupp	- tbl_unsupp
@@ -4165,27 +4165,27 @@
 	long		tbl_unsupp	- tbl_unsupp
 	long		tbl_unsupp	- tbl_unsupp
 	long		tbl_unsupp	- tbl_unsupp
-	long		fsabs		- tbl_unsupp 	# 58: fsabs
+	long		fsabs		- tbl_unsupp	# 58: fsabs
 	long		tbl_unsupp	- tbl_unsupp
-	long		fsneg		- tbl_unsupp 	# 5a: fsneg
+	long		fsneg		- tbl_unsupp	# 5a: fsneg
 	long		tbl_unsupp	- tbl_unsupp
 	long		fdabs		- tbl_unsupp	# 5c: fdabs
 	long		tbl_unsupp	- tbl_unsupp
-	long		fdneg		- tbl_unsupp 	# 5e: fdneg
+	long		fdneg		- tbl_unsupp	# 5e: fdneg
 	long		tbl_unsupp	- tbl_unsupp
 	long		fsdiv		- tbl_unsupp	# 60: fsdiv
 	long		tbl_unsupp	- tbl_unsupp
 	long		fsadd		- tbl_unsupp	# 62: fsadd
 	long		fsmul		- tbl_unsupp	# 63: fsmul
-	long		fddiv		- tbl_unsupp 	# 64: fddiv
+	long		fddiv		- tbl_unsupp	# 64: fddiv
 	long		tbl_unsupp	- tbl_unsupp
 	long		fdadd		- tbl_unsupp	# 66: fdadd
-	long		fdmul		- tbl_unsupp 	# 67: fdmul
+	long		fdmul		- tbl_unsupp	# 67: fdmul
 	long		fssub		- tbl_unsupp	# 68: fssub
 	long		tbl_unsupp	- tbl_unsupp
 	long		tbl_unsupp	- tbl_unsupp
 	long		tbl_unsupp	- tbl_unsupp
-	long		fdsub		- tbl_unsupp 	# 6c: fdsub
+	long		fdsub		- tbl_unsupp	# 6c: fdsub
 
 #################################################
 # Add this here so non-fp modules can compile.
@@ -4208,7 +4208,7 @@
 #									#
 # INPUT ***************************************************************	#
 #	None								#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	If instr is "fmovm Dn,-(A7)" from supervisor mode,		#
 #		d0 = size of dump					#
@@ -4230,25 +4230,25 @@
 #	The data register is determined and its value loaded to get the	#
 # string of FP registers affected. This value is used as an index into	#
 # a lookup table such that we can determine the number of bytes		#
-# involved. 								#
+# involved.								#
 #	If the instruction is "fmovm.x <ea>,Dn", a _mem_read() is used	#
 # to read in all FP values. Again, _mem_read() may fail and require a	#
-# special exit. 							#
+# special exit.								#
 #	If the instruction is "fmovm.x DN,<ea>", a _mem_write() is used	#
 # to write all FP values. _mem_write() may also fail.			#
-# 	If the instruction is "fmovm.x DN,-(a7)" from supervisor mode,	#
+#	If the instruction is "fmovm.x DN,-(a7)" from supervisor mode,	#
 # then we return the size of the dump and the string to the caller	#
 # so that the move can occur outside of this routine. This special	#
 # case is required so that moves to the system stack are handled	#
 # correctly.								#
 #									#
 # DYNAMIC:								#
-# 	fmovm.x	dn, <ea>						#
-# 	fmovm.x	<ea>, dn						#
+#	fmovm.x	dn, <ea>						#
+#	fmovm.x	<ea>, dn						#
 #									#
 #	      <WORD 1>		      <WORD2>				#
 #	1111 0010 00 |<ea>|	11@& 1000 0$$$ 0000			#
-#					  				#
+#									#
 #	& = (0): predecrement addressing mode				#
 #	    (1): postincrement or control addressing mode		#
 #	@ = (0): move listed regs from memory to the FPU		#
@@ -4517,12 +4517,12 @@
 	byte	0x24,0x30,0x30,0x3c,0x30,0x3c,0x3c,0x48
 	byte	0x30,0x3c,0x3c,0x48,0x3c,0x48,0x48,0x54
 	byte	0x30,0x3c,0x3c,0x48,0x3c,0x48,0x48,0x54
-	byte	0x3c,0x48,0x48,0x54,0x48,0x54,0x54,0x60	
+	byte	0x3c,0x48,0x48,0x54,0x48,0x54,0x54,0x60
 
 #
 # table to convert a pre-decrement bit string into a post-increment
 # or control bit string.
-# ex: 	0x00	==>	0x00
+# ex:	0x00	==>	0x00
 #	0x01	==>	0x80
 #	0x02	==>	0x40
 #		.
@@ -4604,59 +4604,59 @@
 	short		tbl_fea_mode	-	tbl_fea_mode
 	short		tbl_fea_mode	-	tbl_fea_mode
 
-	short		faddr_ind_a0	- 	tbl_fea_mode
-	short		faddr_ind_a1	- 	tbl_fea_mode
-	short		faddr_ind_a2	- 	tbl_fea_mode
-	short		faddr_ind_a3 	- 	tbl_fea_mode
-	short		faddr_ind_a4 	- 	tbl_fea_mode
-	short		faddr_ind_a5 	- 	tbl_fea_mode
-	short		faddr_ind_a6 	- 	tbl_fea_mode
-	short		faddr_ind_a7 	- 	tbl_fea_mode
-
-	short		faddr_ind_p_a0	- 	tbl_fea_mode
-	short		faddr_ind_p_a1 	- 	tbl_fea_mode
-	short		faddr_ind_p_a2 	- 	tbl_fea_mode
-	short		faddr_ind_p_a3 	- 	tbl_fea_mode
-	short		faddr_ind_p_a4 	- 	tbl_fea_mode
-	short		faddr_ind_p_a5 	- 	tbl_fea_mode
-	short		faddr_ind_p_a6 	- 	tbl_fea_mode
-	short		faddr_ind_p_a7 	- 	tbl_fea_mode
-
-	short		faddr_ind_m_a0 	- 	tbl_fea_mode
-	short		faddr_ind_m_a1 	- 	tbl_fea_mode
-	short		faddr_ind_m_a2 	- 	tbl_fea_mode
-	short		faddr_ind_m_a3 	- 	tbl_fea_mode
-	short		faddr_ind_m_a4 	- 	tbl_fea_mode
-	short		faddr_ind_m_a5 	- 	tbl_fea_mode
-	short		faddr_ind_m_a6 	- 	tbl_fea_mode
-	short		faddr_ind_m_a7 	- 	tbl_fea_mode
-
-	short		faddr_ind_disp_a0	- 	tbl_fea_mode
-	short		faddr_ind_disp_a1 	- 	tbl_fea_mode
-	short		faddr_ind_disp_a2 	- 	tbl_fea_mode
-	short		faddr_ind_disp_a3 	- 	tbl_fea_mode
-	short		faddr_ind_disp_a4 	- 	tbl_fea_mode
-	short		faddr_ind_disp_a5 	- 	tbl_fea_mode
-	short		faddr_ind_disp_a6 	- 	tbl_fea_mode
+	short		faddr_ind_a0	-	tbl_fea_mode
+	short		faddr_ind_a1	-	tbl_fea_mode
+	short		faddr_ind_a2	-	tbl_fea_mode
+	short		faddr_ind_a3	-	tbl_fea_mode
+	short		faddr_ind_a4	-	tbl_fea_mode
+	short		faddr_ind_a5	-	tbl_fea_mode
+	short		faddr_ind_a6	-	tbl_fea_mode
+	short		faddr_ind_a7	-	tbl_fea_mode
+
+	short		faddr_ind_p_a0	-	tbl_fea_mode
+	short		faddr_ind_p_a1	-	tbl_fea_mode
+	short		faddr_ind_p_a2	-	tbl_fea_mode
+	short		faddr_ind_p_a3	-	tbl_fea_mode
+	short		faddr_ind_p_a4	-	tbl_fea_mode
+	short		faddr_ind_p_a5	-	tbl_fea_mode
+	short		faddr_ind_p_a6	-	tbl_fea_mode
+	short		faddr_ind_p_a7	-	tbl_fea_mode
+
+	short		faddr_ind_m_a0	-	tbl_fea_mode
+	short		faddr_ind_m_a1	-	tbl_fea_mode
+	short		faddr_ind_m_a2	-	tbl_fea_mode
+	short		faddr_ind_m_a3	-	tbl_fea_mode
+	short		faddr_ind_m_a4	-	tbl_fea_mode
+	short		faddr_ind_m_a5	-	tbl_fea_mode
+	short		faddr_ind_m_a6	-	tbl_fea_mode
+	short		faddr_ind_m_a7	-	tbl_fea_mode
+
+	short		faddr_ind_disp_a0	-	tbl_fea_mode
+	short		faddr_ind_disp_a1	-	tbl_fea_mode
+	short		faddr_ind_disp_a2	-	tbl_fea_mode
+	short		faddr_ind_disp_a3	-	tbl_fea_mode
+	short		faddr_ind_disp_a4	-	tbl_fea_mode
+	short		faddr_ind_disp_a5	-	tbl_fea_mode
+	short		faddr_ind_disp_a6	-	tbl_fea_mode
 	short		faddr_ind_disp_a7	-	tbl_fea_mode
 
-	short		faddr_ind_ext 	- 	tbl_fea_mode
-	short		faddr_ind_ext 	- 	tbl_fea_mode
-	short		faddr_ind_ext 	- 	tbl_fea_mode
-	short		faddr_ind_ext 	- 	tbl_fea_mode
-	short		faddr_ind_ext 	- 	tbl_fea_mode
-	short		faddr_ind_ext 	- 	tbl_fea_mode
-	short		faddr_ind_ext 	- 	tbl_fea_mode
-	short		faddr_ind_ext 	- 	tbl_fea_mode
-
-	short		fabs_short	- 	tbl_fea_mode
-	short		fabs_long	- 	tbl_fea_mode
-	short		fpc_ind		- 	tbl_fea_mode
-	short		fpc_ind_ext	- 	tbl_fea_mode
-	short		tbl_fea_mode	- 	tbl_fea_mode
-	short		tbl_fea_mode	- 	tbl_fea_mode
-	short		tbl_fea_mode	- 	tbl_fea_mode
-	short		tbl_fea_mode	- 	tbl_fea_mode
+	short		faddr_ind_ext	-	tbl_fea_mode
+	short		faddr_ind_ext	-	tbl_fea_mode
+	short		faddr_ind_ext	-	tbl_fea_mode
+	short		faddr_ind_ext	-	tbl_fea_mode
+	short		faddr_ind_ext	-	tbl_fea_mode
+	short		faddr_ind_ext	-	tbl_fea_mode
+	short		faddr_ind_ext	-	tbl_fea_mode
+	short		faddr_ind_ext	-	tbl_fea_mode
+
+	short		fabs_short	-	tbl_fea_mode
+	short		fabs_long	-	tbl_fea_mode
+	short		fpc_ind		-	tbl_fea_mode
+	short		fpc_ind_ext	-	tbl_fea_mode
+	short		tbl_fea_mode	-	tbl_fea_mode
+	short		tbl_fea_mode	-	tbl_fea_mode
+	short		tbl_fea_mode	-	tbl_fea_mode
+	short		tbl_fea_mode	-	tbl_fea_mode
 
 ###################################
 # Address register indirect: (An) #
@@ -4952,7 +4952,7 @@
 
 	btst		&0x8,%d0
 	bne.w		fcalc_mem_ind
-	
+
 	mov.l		%d0,L_SCR1(%a6)		# hold opword
 
 	mov.l		%d0,%d1
@@ -5048,7 +5048,7 @@
 
 	btst		&0x8,%d0		# is disp only 8 bits?
 	bne.w		fcalc_mem_ind		# calc memory indirect
-	
+
 	mov.l		%d0,L_SCR1(%a6)		# store opword
 
 	mov.l		%d0,%d1			# make extword copy
@@ -5125,7 +5125,7 @@
 	bfextu		%d5{&26:&2},%d0		# get bd size
 #	beq.l		fmovm_error		# if (size == 0) it's reserved
 
-	cmpi.b	 	%d0,&0x2
+	cmpi.b		%d0,&0x2
 	blt.b		fno_bd
 	beq.b		fget_word_bd
 
@@ -5147,7 +5147,7 @@
 	bne.l		fcea_iacc		# yes
 
 	ext.l		%d0			# sign extend bd
-	
+
 fchk_ind:
 	add.l		%d0,%d3			# base += bd
 
@@ -5156,10 +5156,10 @@
 	bfextu		%d5{&30:&2},%d0		# is od suppressed?
 	beq.w		faii_bd
 
-	cmpi.b	 	%d0,&0x2
+	cmpi.b		%d0,&0x2
 	blt.b		fnull_od
 	beq.b		fword_od
-	
+
 	mov.l		EXC_EXTWPTR(%a6),%a0	# fetch instruction addr
 	addq.l		&0x4,EXC_EXTWPTR(%a6)	# incr instruction ptr
 	bsr.l		_imem_read_long
@@ -5167,7 +5167,7 @@
 	tst.l		%d1			# did ifetch fail?
 	bne.l		fcea_iacc		# yes
 
-	bra.b 		fadd_them
+	bra.b		fadd_them
 
 fword_od:
 	mov.l		EXC_EXTWPTR(%a6),%a0	# fetch instruction addr
@@ -5220,7 +5220,7 @@
 	rts
 
 #########################################################
-fcea_err:	
+fcea_err:
 	mov.l		%d3,%a0
 
 	movm.l		(%sp)+,&0x003c		# restore d2-d5
@@ -5230,7 +5230,7 @@
 fcea_iacc:
 	movm.l		(%sp)+,&0x003c		# restore d2-d5
 	bra.l		iea_iacc
-	
+
 fmovm_out_err:
 	bsr.l		restore
 	mov.w		&0x00e1,%d0
@@ -5246,7 +5246,7 @@
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	fmovm_ctrl(): emulate fmovm.l of control registers instr	#
+#	fmovm_ctrl(): emulate fmovm.l of control registers instr	#
 #									#
 # XREF ****************************************************************	#
 #	_imem_read_long() - read longword from memory			#
@@ -5254,7 +5254,7 @@
 #									#
 # INPUT ***************************************************************	#
 #	None								#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	If _imem_read_long() doesn't fail:				#
 #		USER_FPCR(a6)  = new FPCR value				#
@@ -5262,14 +5262,14 @@
 #		USER_FPIAR(a6) = new FPIAR value			#
 #									#
 # ALGORITHM ***********************************************************	#
-# 	Decode the instruction type by looking at the extension word 	#
+#	Decode the instruction type by looking at the extension word	#
 # in order to see how many control registers to fetch from memory.	#
 # Fetch them using _imem_read_long(). If this fetch fails, exit through	#
 # the special access error exit handler iea_iacc().			#
 #									#
 # Instruction word decoding:						#
 #									#
-# 	fmovem.l #<data>, {FPIAR&|FPCR&|FPSR}				#
+#	fmovem.l #<data>, {FPIAR&|FPCR&|FPSR}				#
 #									#
 #		WORD1			WORD2				#
 #	1111 0010 00 111100	100$ $$00 0000 0000			#
@@ -5290,7 +5290,7 @@
 	beq.w		fctrl_in_6		# yes
 	cmpi.b		%d0,&0x94		# fpcr & fpiar ?
 	beq.b		fctrl_in_5		# yes
-	
+
 # fmovem.l #<data>, fpsr/fpiar
 fctrl_in_3:
 	mov.l		EXC_EXTWPTR(%a6),%a0	# fetch instruction addr
@@ -5392,14 +5392,14 @@
 # INPUT ***************************************************************	#
 #	FP_SRC(a6) = fp op1(src)					#
 #	FP_DST(a6) = fp op2(dst)					#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	FP_SRC(a6) = fp op1 scaled(src)					#
 #	FP_DST(a6) = fp op2 scaled(dst)					#
 #	d0         = scale amount					#
 #									#
 # ALGORITHM ***********************************************************	#
-# 	If the DST exponent is > the SRC exponent, set the DST exponent	#
+#	If the DST exponent is > the SRC exponent, set the DST exponent	#
 # equal to 0x3fff and scale the SRC exponent by the value that the	#
 # DST exponent was scaled by. If the SRC exponent is greater or equal,	#
 # do the opposite. Return this scale factor in d0.			#
@@ -5462,7 +5462,7 @@
 	andi.w		&0x8000,FP_SCR0_EX(%a6)	# zero src exponent
 	bset		&0x0,1+FP_SCR0_EX(%a6)	# set exp = 1
 
-	mov.l		(%sp)+,%d0		# return SCALE factor	
+	mov.l		(%sp)+,%d0		# return SCALE factor
 	rts
 
 # src exp is >= dst exp; scale src to exp = 0x3fff
@@ -5498,7 +5498,7 @@
 	andi.w		&0x8000,FP_SCR1_EX(%a6)	# zero dst exponent
 	bset		&0x0,1+FP_SCR1_EX(%a6)	# set exp = 1
 
-	mov.l		(%sp)+,%d0		# return SCALE factor	
+	mov.l		(%sp)+,%d0		# return SCALE factor
 	rts
 
 ##########################################################################
@@ -5513,14 +5513,14 @@
 #									#
 # INPUT ***************************************************************	#
 #	FP_SCR0(a6) = extended precision operand to be scaled		#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	FP_SCR0(a6) = scaled extended precision operand			#
 #	d0	    = scale value					#
 #									#
 # ALGORITHM ***********************************************************	#
-# 	Set the exponent of the input operand to 0x3fff. Save the value	#
-# of the difference between the original and new exponent. Then, 	#
+#	Set the exponent of the input operand to 0x3fff. Save the value	#
+# of the difference between the original and new exponent. Then,	#
 # normalize the operand if it was a DENORM. Add this normalization	#
 # value to the previous value. Return the result.			#
 #									#
@@ -5566,17 +5566,17 @@
 #									#
 # INPUT ***************************************************************	#
 #	FP_SCR0(a6) = extended precision operand to be scaled		#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	FP_SCR0(a6) = scaled extended precision operand			#
 #	d0	    = scale value					#
 #									#
 # ALGORITHM ***********************************************************	#
 #	If the input operand is a DENORM, normalize it.			#
-# 	If the exponent of the input operand is even, set the exponent	#
-# to 0x3ffe and return a scale factor of "(exp-0x3ffe)/2". If the 	#
+#	If the exponent of the input operand is even, set the exponent	#
+# to 0x3ffe and return a scale factor of "(exp-0x3ffe)/2". If the	#
 # exponent of the input operand is off, set the exponent to ox3fff and	#
-# return a scale factor of "(exp-0x3fff)/2". 				#
+# return a scale factor of "(exp-0x3fff)/2".				#
 #									#
 #########################################################################
 
@@ -5640,14 +5640,14 @@
 #									#
 # INPUT ***************************************************************	#
 #	FP_SCR1(a6) = extended precision operand to be scaled		#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	FP_SCR1(a6) = scaled extended precision operand			#
 #	d0	    = scale value					#
 #									#
 # ALGORITHM ***********************************************************	#
-# 	Set the exponent of the input operand to 0x3fff. Save the value	#
-# of the difference between the original and new exponent. Then, 	#
+#	Set the exponent of the input operand to 0x3fff. Save the value	#
+# of the difference between the original and new exponent. Then,	#
 # normalize the operand if it was a DENORM. Add this normalization	#
 # value to the previous value. Return the result.			#
 #									#
@@ -5695,21 +5695,21 @@
 # INPUT ***************************************************************	#
 #	FP_SRC(a6) = pointer to extended precision src operand		#
 #	FP_DST(a6) = pointer to extended precision dst operand		#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	fp0 = default result						#
 #									#
 # ALGORITHM ***********************************************************	#
-# 	If either operand (but not both operands) of an operation is a	#
+#	If either operand (but not both operands) of an operation is a	#
 # nonsignalling NAN, then that NAN is returned as the result. If both	#
-# operands are nonsignalling NANs, then the destination operand 	#
+# operands are nonsignalling NANs, then the destination operand		#
 # nonsignalling NAN is returned as the result.				#
-# 	If either operand to an operation is a signalling NAN (SNAN),	#
+#	If either operand to an operation is a signalling NAN (SNAN),	#
 # then, the SNAN bit is set in the FPSR EXC byte. If the SNAN trap	#
-# enable bit is set in the FPCR, then the trap is taken and the 	#
+# enable bit is set in the FPCR, then the trap is taken and the		#
 # destination is not modified. If the SNAN trap enable bit is not set,	#
-# then the SNAN is converted to a nonsignalling NAN (by setting the 	#
-# SNAN bit in the operand to one), and the operation continues as 	#
+# then the SNAN is converted to a nonsignalling NAN (by setting the	#
+# SNAN bit in the operand to one), and the operation continues as	#
 # described in the preceding paragraph, for nonsignalling NANs.		#
 #	Make sure the appropriate FPSR bits are set before exiting.	#
 #									#
@@ -5748,7 +5748,7 @@
 	lea		FP_DST(%a6), %a0
 	cmp.b		STAG(%a6), &SNAN
 	bne		nan_done
-	or.l		&aiop_mask+snan_mask, USER_FPSR(%a6)	
+	or.l		&aiop_mask+snan_mask, USER_FPSR(%a6)
 nan_done:
 	or.l		&nan_mask, USER_FPSR(%a6)
 nan_comp:
@@ -5761,14 +5761,14 @@
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	res_operr(): return default result during operand error		#
+#	res_operr(): return default result during operand error		#
 #									#
 # XREF ****************************************************************	#
 #	None								#
 #									#
 # INPUT ***************************************************************	#
 #	None								#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	fp0 = default operand error result				#
 #									#
@@ -5776,8 +5776,8 @@
 #	An nonsignalling NAN is returned as the default result when	#
 # an operand error occurs for the following cases:			#
 #									#
-# 	Multiply: (Infinity x Zero)					#
-# 	Divide  : (Zero / Zero) || (Infinity / Infinity)		#
+#	Multiply: (Infinity x Zero)					#
+#	Divide  : (Zero / Zero) || (Infinity / Infinity)		#
 #									#
 #########################################################################
 
@@ -5787,12 +5787,12 @@
 	fmovm.x		nan_return(%pc), &0x80
 	rts
 
-nan_return:	
+nan_return:
 	long		0x7fff0000, 0xffffffff, 0xffffffff
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	_denorm(): denormalize an intermediate result			#
+#	_denorm(): denormalize an intermediate result			#
 #									#
 # XREF ****************************************************************	#
 #	None								#
@@ -5800,7 +5800,7 @@
 # INPUT *************************************************************** #
 #	a0 = points to the operand to be denormalized			#
 #		(in the internal extended format)			#
-#		 							#
+#									#
 #	d0 = rounding precision						#
 #									#
 # OUTPUT **************************************************************	#
@@ -5810,10 +5810,10 @@
 #	d0 = guard,round,sticky						#
 #									#
 # ALGORITHM ***********************************************************	#
-# 	According to the exponent underflow threshold for the given	#
+#	According to the exponent underflow threshold for the given	#
 # precision, shift the mantissa bits to the right in order raise the	#
-# exponent of the operand to the threshold value. While shifting the 	#
-# mantissa bits right, maintain the value of the guard, round, and 	#
+# exponent of the operand to the threshold value. While shifting the	#
+# mantissa bits right, maintain the value of the guard, round, and	#
 # sticky bits.								#
 # other notes:								#
 #	(1) _denorm() is called by the underflow routines		#
@@ -5833,7 +5833,7 @@
 _denorm:
 #
 # Load the exponent threshold for the precision selected and check
-# to see if (threshold - exponent) is > 65 in which case we can 
+# to see if (threshold - exponent) is > 65 in which case we can
 # simply calculate the sticky bit and zero the mantissa. otherwise
 # we have to call the denormalization routine.
 #
@@ -5872,7 +5872,7 @@
 #	%d0{31:29} : initial guard,round,sticky				#
 #	%d1{15:0}  : denormalization threshold				#
 # OUTPUT:								#
-#	%a0	   : points to the denormalized operand		 	#
+#	%a0	   : points to the denormalized operand			#
 #	%d0{31:29} : final guard,round,sticky				#
 #									#
 
@@ -5892,7 +5892,7 @@
 
 #
 # check to see how much less than the underflow threshold the operand
-# exponent is. 
+# exponent is.
 #
 	mov.l		%d1, %d0		# copy the denorm threshold
 	sub.w		FTEMP_EX(%a0), %d1	# d1 = threshold - uns exponent
@@ -5907,7 +5907,7 @@
 # No normalization necessary
 #
 dnrm_no_lp:
-	mov.l		GRS(%a6), %d0 		# restore original g,r,s
+	mov.l		GRS(%a6), %d0		# restore original g,r,s
 	rts
 
 #
@@ -5917,7 +5917,7 @@
 # %d1 = "n" = amt to shift
 #
 #	---------------------------------------------------------
-#	|     FTEMP_HI	  |    	FTEMP_LO     |grs000.........000|
+#	|     FTEMP_HI	  |	FTEMP_LO     |grs000.........000|
 #	---------------------------------------------------------
 #	<-(32 - n)-><-(n)-><-(32 - n)-><-(n)-><-(32 - n)-><-(n)->
 #	\	   \		      \			 \
@@ -5928,7 +5928,7 @@
 #	     \		\		   \		      \
 #	      \		 \		    \		       \
 #	       \	  \		     \			\
-#	<-(n)-><-(32 - n)-><------(32)-------><------(32)------->	
+#	<-(n)-><-(32 - n)-><------(32)-------><------(32)------->
 #	---------------------------------------------------------
 #	|0.....0| NEW_HI  |  NEW_FTEMP_LO     |grs		|
 #	---------------------------------------------------------
@@ -5969,17 +5969,17 @@
 # %d1 = "n" = amt to shift
 #
 #	---------------------------------------------------------
-#	|     FTEMP_HI	  |    	FTEMP_LO     |grs000.........000|
+#	|     FTEMP_HI	  |	FTEMP_LO     |grs000.........000|
 #	---------------------------------------------------------
 #	<-(32 - n)-><-(n)-><-(32 - n)-><-(n)-><-(32 - n)-><-(n)->
 #	\	   \		      \
 #	 \	    \		       \
 #	  \	     \			-------------------
 #	   \	      --------------------		   \
-#	    -------------------	  	  \		    \
-#	     		       \	   \		     \
-#	      		 	\     	    \		      \
-#	       		  	 \	     \		       \
+#	    -------------------		  \		    \
+#			       \	   \		     \
+#				\	    \		      \
+#				 \	     \		       \
 #	<-------(32)------><-(n)-><-(32 - n)-><------(32)------->
 #	---------------------------------------------------------
 #	|0...............0|0....0| NEW_LO     |grs		|
@@ -6050,17 +6050,17 @@
 # case (d1 == 64)
 #
 #	---------------------------------------------------------
-#	|     FTEMP_HI	  |    	FTEMP_LO     |grs000.........000|
+#	|     FTEMP_HI	  |	FTEMP_LO     |grs000.........000|
 #	---------------------------------------------------------
 #	<-------(32)------>
-#	\	   	   \
-#	 \	    	    \
-#	  \	     	     \
-#	   \	      	      ------------------------------
+#	\		   \
+#	 \		    \
+#	  \		     \
+#	   \		      ------------------------------
 #	    -------------------------------		    \
-#	     		       		   \		     \
-#	      		 	     	    \		      \
-#	       		  	 	     \		       \
+#					   \		     \
+#					    \		      \
+#					     \		       \
 #					      <-------(32)------>
 #	---------------------------------------------------------
 #	|0...............0|0................0|grs		|
@@ -6078,17 +6078,17 @@
 # case (d1 == 65)
 #
 #	---------------------------------------------------------
-#	|     FTEMP_HI	  |    	FTEMP_LO     |grs000.........000|
+#	|     FTEMP_HI	  |	FTEMP_LO     |grs000.........000|
 #	---------------------------------------------------------
 #	<-------(32)------>
-#	\	   	   \
-#	 \	    	    \
-#	  \	     	     \
-#	   \	      	      ------------------------------
+#	\		   \
+#	 \		    \
+#	  \		     \
+#	   \		      ------------------------------
 #	    --------------------------------		    \
-#	     		       		    \		     \
-#	      		 	     	     \		      \
-#	       		  	 	      \		       \
+#					    \		     \
+#					     \		      \
+#					      \		       \
 #					       <-------(31)----->
 #	---------------------------------------------------------
 #	|0...............0|0................0|0rs		|
@@ -6136,7 +6136,7 @@
 #	None								#
 #									#
 # INPUT ***************************************************************	#
-#	a0	  = ptr to input operand in internal extended format 	#
+#	a0	  = ptr to input operand in internal extended format	#
 #	d1(hi)    = contains rounding precision:			#
 #			ext = $0000xxxx					#
 #			sgl = $0004xxxx					#
@@ -6167,7 +6167,7 @@
 #
 # ext_grs() looks at the rounding precision and sets the appropriate
 # G,R,S bits.
-# If (G,R,S == 0) then result is exact and round is done, else set 
+# If (G,R,S == 0) then result is exact and round is done, else set
 # the inex flag in status reg and continue.
 #
 	bsr.l		ext_grs			# extract G,R,S
@@ -6213,7 +6213,7 @@
 #	If sign of fp number = 1 (negative), then add 1 to l.	#
 #################################################################
 rnd_mnus:
-	tst.b		FTEMP_SGN(%a0)		# check for sign	
+	tst.b		FTEMP_SGN(%a0)		# check for sign
 	bpl.w		truncate		# if negative then truncate
 
 	mov.l		&0xffffffff, %d0	# force g,r,s to be all f's
@@ -6324,7 +6324,7 @@
 #
 # INPUT
 #	d0	   = extended precision g,r,s (in d0{31:29})
-#	d1 	   = {PREC,ROUND}
+#	d1	   = {PREC,ROUND}
 # OUTPUT
 #	d0{31:29}  = guard, round, sticky
 #
@@ -6375,7 +6375,7 @@
 	mov.l		&30, %d2		# of the sgl prec. limits
 	lsl.l		%d2, %d3		# shift g-r bits to MSB of d3
 	mov.l		FTEMP_HI(%a0), %d2	# get word 2 for s-bit test
-	and.l		&0x0000003f, %d2	# s bit is the or of all other 
+	and.l		&0x0000003f, %d2	# s bit is the or of all other
 	bne.b		ext_grs_st_stky		# bits to the right of g-r
 	tst.l		FTEMP_LO(%a0)		# test lower mantissa
 	bne.b		ext_grs_st_stky		# if any are set, set sticky
@@ -6385,9 +6385,9 @@
 
 #
 # dbl:
-#	96		64	  	32	 11	0
+#	96		64		32	 11	0
 #	-----------------------------------------------------
-#	| EXP	|XXXXXXX|	  	|	 |xx	|grs|
+#	| EXP	|XXXXXXX|		|	 |xx	|grs|
 #	-----------------------------------------------------
 #						  nn\	    /
 #						  ee -------
@@ -6400,7 +6400,7 @@
 	mov.l		&30, %d2		# of the dbl prec. limits
 	lsl.l		%d2, %d3		# shift g-r bits to the MSB of d3
 	mov.l		FTEMP_LO(%a0), %d2	# get lower mantissa  for s-bit test
-	and.l		&0x000001ff, %d2	# s bit is the or-ing of all 
+	and.l		&0x000001ff, %d2	# s bit is the or-ing of all
 	bne.b		ext_grs_st_stky		# other bits to the right of g-r
 	tst.l		%d0			# test word original g,r,s
 	bne.b		ext_grs_st_stky		# if any are set, set sticky
@@ -6430,7 +6430,7 @@
 #	a0 = pointer fp extended precision operand to normalize		#
 #									#
 # OUTPUT ************************************************************** #
-# 	d0 = number of bit positions the mantissa was shifted		#
+#	d0 = number of bit positions the mantissa was shifted		#
 #	a0 = the input operand's mantissa is normalized; the exponent	#
 #	     is unchanged.						#
 #									#
@@ -6457,7 +6457,7 @@
 	mov.l		%d1, FTEMP_LO(%a0)	# store new lo(man)
 
 	mov.l		%d2, %d0		# return shift amount
-	
+
 	mov.l		(%sp)+, %d3		# restore temp regs
 	mov.l		(%sp)+, %d2
 
@@ -6472,7 +6472,7 @@
 	clr.l		FTEMP_LO(%a0)		# lo(man) is now zero
 
 	mov.l		%d2, %d0		# return shift amount
-	
+
 	mov.l		(%sp)+, %d3		# restore temp regs
 	mov.l		(%sp)+, %d2
 
@@ -6577,27 +6577,27 @@
 # whole mantissa is zero so this UNNORM is actually a zero
 #
 unnorm_zero:
-	and.w		&0x8000, FTEMP_EX(%a0) 	# force exponent to zero
+	and.w		&0x8000, FTEMP_EX(%a0)	# force exponent to zero
 
 	mov.b		&ZERO, %d0		# fix optype tag
 	rts
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	set_tag_x(): return the optype of the input ext fp number	#
+#	set_tag_x(): return the optype of the input ext fp number	#
 #									#
 # XREF ****************************************************************	#
 #	None								#
 #									#
 # INPUT ***************************************************************	#
 #	a0 = pointer to extended precision operand			#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	d0 = value of type tag						#
-# 		one of: NORM, INF, QNAN, SNAN, DENORM, UNNORM, ZERO	#
+#		one of: NORM, INF, QNAN, SNAN, DENORM, UNNORM, ZERO	#
 #									#
 # ALGORITHM ***********************************************************	#
-#	Simply test the exponent, j-bit, and mantissa values to 	#
+#	Simply test the exponent, j-bit, and mantissa values to		#
 # determine the type of operand.					#
 #	If it's an unnormalized zero, alter the operand and force it	#
 # to be a normal zero.							#
@@ -6664,20 +6664,20 @@
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	set_tag_d(): return the optype of the input dbl fp number	#
+#	set_tag_d(): return the optype of the input dbl fp number	#
 #									#
 # XREF ****************************************************************	#
 #	None								#
 #									#
 # INPUT ***************************************************************	#
 #	a0 = points to double precision operand				#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	d0 = value of type tag						#
-# 		one of: NORM, INF, QNAN, SNAN, DENORM, ZERO		#
+#		one of: NORM, INF, QNAN, SNAN, DENORM, ZERO		#
 #									#
 # ALGORITHM ***********************************************************	#
-#	Simply test the exponent, j-bit, and mantissa values to 	#
+#	Simply test the exponent, j-bit, and mantissa values to		#
 # determine the type of operand.					#
 #									#
 #########################################################################
@@ -6727,20 +6727,20 @@
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	set_tag_s(): return the optype of the input sgl fp number	#
+#	set_tag_s(): return the optype of the input sgl fp number	#
 #									#
 # XREF ****************************************************************	#
 #	None								#
 #									#
 # INPUT ***************************************************************	#
 #	a0 = pointer to single precision operand			#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	d0 = value of type tag						#
-# 		one of: NORM, INF, QNAN, SNAN, DENORM, ZERO		#
+#		one of: NORM, INF, QNAN, SNAN, DENORM, ZERO		#
 #									#
 # ALGORITHM ***********************************************************	#
-#	Simply test the exponent, j-bit, and mantissa values to 	#
+#	Simply test the exponent, j-bit, and mantissa values to		#
 # determine the type of operand.					#
 #									#
 #########################################################################
@@ -6786,15 +6786,15 @@
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	unf_res(): routine to produce default underflow result of a 	#
-#	 	   scaled extended precision number; this is used by 	#
+#	unf_res(): routine to produce default underflow result of a	#
+#		   scaled extended precision number; this is used by	#
 #		   fadd/fdiv/fmul/etc. emulation routines.		#
-# 	unf_res4(): same as above but for fsglmul/fsgldiv which use	#
+#	unf_res4(): same as above but for fsglmul/fsgldiv which use	#
 #		    single round prec and extended prec mode.		#
 #									#
 # XREF ****************************************************************	#
 #	_denorm() - denormalize according to scale factor		#
-# 	_round() - round denormalized number according to rnd prec	#
+#	_round() - round denormalized number according to rnd prec	#
 #									#
 # INPUT ***************************************************************	#
 #	a0 = pointer to extended precison operand			#
@@ -6806,15 +6806,15 @@
 #	d0.b = result FPSR_cc which caller may or may not want to save	#
 #									#
 # ALGORITHM ***********************************************************	#
-# 	Convert the input operand to "internal format" which means the	#
+#	Convert the input operand to "internal format" which means the	#
 # exponent is extended to 16 bits and the sign is stored in the unused	#
 # portion of the extended precison operand. Denormalize the number	#
-# according to the scale factor passed in d0. Then, round the 		#
+# according to the scale factor passed in d0. Then, round the		#
 # denormalized result.							#
-# 	Set the FPSR_exc bits as appropriate but return the cc bits in	#
+#	Set the FPSR_exc bits as appropriate but return the cc bits in	#
 # d0 in case the caller doesn't want to save them (as is the case for	#
 # fmove out).								#
-# 	unf_res4() for fsglmul/fsgldiv forces the denorm to extended	#
+#	unf_res4() for fsglmul/fsgldiv forces the denorm to extended	#
 # precision and the rounding mode to single.				#
 #									#
 #########################################################################
@@ -6952,23 +6952,23 @@
 #	none								#
 #									#
 # INPUT ***************************************************************	#
-#	d1.b 	= '-1' => (-); '0' => (+)				#
+#	d1.b	= '-1' => (-); '0' => (+)				#
 #   ovf_res():								#
-#	d0 	= rnd mode/prec						#
+#	d0	= rnd mode/prec						#
 #   ovf_res2():								#
-#	hi(d0) 	= rnd prec						#
+#	hi(d0)	= rnd prec						#
 #	lo(d0)	= rnd mode						#
 #									#
 # OUTPUT **************************************************************	#
-#	a0   	= points to extended precision result			#
-#	d0.b 	= condition code bits					#
+#	a0	= points to extended precision result			#
+#	d0.b	= condition code bits					#
 #									#
 # ALGORITHM ***********************************************************	#
 #	The default overflow result can be determined by the sign of	#
 # the result and the rounding mode/prec in effect. These bits are	#
-# concatenated together to create an index into the default result 	#
+# concatenated together to create an index into the default result	#
 # table. A pointer to the correct result is returned in a0. The		#
-# resulting condition codes are returned in d0 in case the caller 	#
+# resulting condition codes are returned in d0 in case the caller	#
 # doesn't want FPSR_cc altered (as is the case for fmove out).		#
 #									#
 #########################################################################
@@ -6998,7 +6998,7 @@
 ovf_res_load:
 	mov.b		(tbl_ovfl_cc.b,%pc,%d0.w*1), %d0 # fetch result ccodes
 	lea		(tbl_ovfl_result.b,%pc,%d1.w*8), %a0 # return result ptr
-	
+
 	rts
 
 tbl_ovfl_cc:
@@ -7048,7 +7048,7 @@
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	fout(): move from fp register to memory or data register	#
+#	fout(): move from fp register to memory or data register	#
 #									#
 # XREF ****************************************************************	#
 #	_round() - needed to create EXOP for sgl/dbl precision		#
@@ -7068,7 +7068,7 @@
 # INPUT ***************************************************************	#
 #	a0 = pointer to extended precision source operand		#
 #	d0 = round prec,mode						#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	fp0 : intermediate underflow or overflow result if		#
 #	      OVFL/UNFL occurred for a sgl or dbl operand		#
@@ -7087,9 +7087,9 @@
 # w/ the address index register as appropriate w/ _calc_ea_fout(). If	#
 # the source is a denorm and if underflow is enabled, an EXOP must be	#
 # created.								#
-# 	For packed, the k-factor must be fetched from the instruction	#
-# word or a data register. The <ea> must be fixed as w/ extended 	#
-# precision. Then, bindec() is called to create the appropriate 	#
+#	For packed, the k-factor must be fetched from the instruction	#
+# word or a data register. The <ea> must be fixed as w/ extended	#
+# precision. Then, bindec() is called to create the appropriate		#
 # packed result.							#
 #	If at any time an access error is flagged by one of the move-	#
 # to-memory routines, then a special exit must be made so that the	#
@@ -7205,7 +7205,7 @@
 	ori.l		&0x00800000,%d1		# make smallest sgl
 	fmov.s		%d1,%fp0
 	bra.b		fout_word_norm
-	
+
 #################################################################
 # fmove.l out ###################################################
 #################################################################
@@ -7279,7 +7279,7 @@
 	mov.l		&0xc,%d0		# pass: opsize is 12 bytes
 
 # we must not yet write the extended precision data to the stack
-# in the pre-decrement case from supervisor mode or else we'll corrupt 
+# in the pre-decrement case from supervisor mode or else we'll corrupt
 # the stack frame. so, leave it in FP_SRC for now and deal with it later...
 	cmpi.b		SPCOND_FLG(%a6),&mda7_flg
 	beq.b		fout_ext_a7
@@ -7366,7 +7366,7 @@
 	fmov.l		&0x0,%fpcr		# clear FPCR
 	fmov.l		%fpsr,%d1		# save FPSR
 
-	or.w		%d1,2+USER_FPSR(%a6) 	# set possible inex2/ainex
+	or.w		%d1,2+USER_FPSR(%a6)	# set possible inex2/ainex
 
 fout_sgl_exg_write:
 	mov.b		1+EXC_OPWORD(%a6),%d1	# extract dst mode
@@ -7407,7 +7407,7 @@
 
 	lea		FP_SCR0(%a6),%a0
 	bsr.l		norm			# normalize the DENORM
-	
+
 fout_sgl_unfl_cont:
 	lea		FP_SCR0(%a6),%a0	# pass: ptr to operand
 	mov.l		L_SCR3(%a6),%d1		# pass: rnd prec,mode
@@ -7458,7 +7458,7 @@
 
 # call ovf_res() w/ sgl prec and the correct rnd mode to create the default
 # overflow result. DON'T save the returned ccodes from ovf_res() since
-# fmove out doesn't alter them. 
+# fmove out doesn't alter them.
 	tst.b		SRC_EX(%a0)		# is operand negative?
 	smi		%d1			# set if so
 	mov.l		L_SCR3(%a6),%d0		# pass: sgl prec,rnd mode
@@ -7513,7 +7513,7 @@
 
 	fabs.x		%fp0			# need absolute value
 	fcmp.b		%fp0,&0x2		# did exponent increase?
-	fblt.w		fout_sgl_exg		# no; go finish NORM	
+	fblt.w		fout_sgl_exg		# no; go finish NORM
 	bra.w		fout_sgl_ovfl		# yes; go handle overflow
 
 ################
@@ -7604,7 +7604,7 @@
 	fmov.l		&0x0,%fpcr		# clear FPCR
 	fmov.l		%fpsr,%d0		# save FPSR
 
-	or.w		%d0,2+USER_FPSR(%a6) 	# set possible inex2/ainex
+	or.w		%d0,2+USER_FPSR(%a6)	# set possible inex2/ainex
 
 	mov.l		EXC_EA(%a6),%a1		# pass: dst addr
 	lea		L_SCR1(%a6),%a0		# pass: src addr
@@ -7614,7 +7614,7 @@
 	tst.l		%d1			# did dstore fail?
 	bne.l		facc_out_d		# yes
 
-	rts					# no; so we're finished	
+	rts					# no; so we're finished
 
 #
 # here, we know that the operand would UNFL if moved out to double prec,
@@ -7636,7 +7636,7 @@
 
 	lea		FP_SCR0(%a6),%a0
 	bsr.l		norm			# normalize the DENORM
-	
+
 fout_dbl_unfl_cont:
 	lea		FP_SCR0(%a6),%a0	# pass: ptr to operand
 	mov.l		L_SCR3(%a6),%d1		# pass: rnd prec,mode
@@ -7679,7 +7679,7 @@
 
 # call ovf_res() w/ dbl prec and the correct rnd mode to create the default
 # overflow result. DON'T save the returned ccodes from ovf_res() since
-# fmove out doesn't alter them. 
+# fmove out doesn't alter them.
 	tst.b		SRC_EX(%a0)		# is operand negative?
 	smi		%d1			# set if so
 	mov.l		L_SCR3(%a6),%d0		# pass: dbl prec,rnd mode
@@ -7724,19 +7724,19 @@
 
 	fabs.x		%fp0			# need absolute value
 	fcmp.b		%fp0,&0x2		# did exponent increase?
-	fblt.w		fout_dbl_exg		# no; go finish NORM	
+	fblt.w		fout_dbl_exg		# no; go finish NORM
 	bra.w		fout_dbl_ovfl		# yes; go handle overflow
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	dst_dbl(): create double precision value from extended prec.	#
+#	dst_dbl(): create double precision value from extended prec.	#
 #									#
 # XREF ****************************************************************	#
 #	None								#
 #									#
 # INPUT ***************************************************************	#
 #	a0 = pointer to source operand in extended precision		#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	d0 = hi(double precision result)				#
 #	d1 = lo(double precision result)				#
@@ -7750,18 +7750,18 @@
 #	get rid of ext integer bit					#
 #	dbl_mant = ext_mant{62:12}					#
 #									#
-#	    	---------------   ---------------    ---------------	#
+#		---------------   ---------------    ---------------	#
 #  extended ->  |s|    exp    |   |1| ms mant   |    | ls mant     |	#
-#	    	---------------   ---------------    ---------------	#
-#	   	 95	    64    63 62	      32      31     11	  0	#
+#		---------------   ---------------    ---------------	#
+#		 95	    64    63 62	      32      31     11	  0	#
 #				     |			     |		#
 #				     |			     |		#
 #				     |			     |		#
-#		 	             v   		     v		#
-#	    		      ---------------   ---------------		#
-#  double   ->  	      |s|exp| mant  |   |  mant       |		#
-#	    		      ---------------   ---------------		#
-#	   	 	      63     51   32   31	       0	#
+#			             v			     v		#
+#			      ---------------   ---------------		#
+#  double   ->		      |s|exp| mant  |   |  mant       |		#
+#			      ---------------   ---------------		#
+#			      63     51   32   31	       0	#
 #									#
 #########################################################################
 
@@ -7797,13 +7797,13 @@
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	dst_sgl(): create single precision value from extended prec	#
+#	dst_sgl(): create single precision value from extended prec	#
 #									#
 # XREF ****************************************************************	#
 #									#
 # INPUT ***************************************************************	#
 #	a0 = pointer to source operand in extended precision		#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	d0 = single precision result					#
 #									#
@@ -7815,18 +7815,18 @@
 #	get rid of ext integer bit					#
 #	sgl_mant = ext_mant{62:12}					#
 #									#
-#	    	---------------   ---------------    ---------------	#
+#		---------------   ---------------    ---------------	#
 #  extended ->  |s|    exp    |   |1| ms mant   |    | ls mant     |	#
-#	    	---------------   ---------------    ---------------	#
-#	   	 95	    64    63 62	   40 32      31     12	  0	#
+#		---------------   ---------------    ---------------	#
+#		 95	    64    63 62	   40 32      31     12	  0	#
 #				     |	   |				#
 #				     |	   |				#
 #				     |	   |				#
-#		 	             v     v				#
-#	    		      ---------------				#
-#  single   ->  	      |s|exp| mant  |				#
-#	    		      ---------------				#
-#	   	 	      31     22     0				#
+#			             v     v				#
+#			      ---------------				#
+#  single   ->		      |s|exp| mant  |				#
+#			      ---------------				#
+#			      31     22     0				#
 #									#
 #########################################################################
 
@@ -7899,7 +7899,7 @@
 # add the extra condition that only if the k-factor was zero, too, should
 # we zero the exponent
 	tst.l		%d0
-	bne.b		fout_pack_set	
+	bne.b		fout_pack_set
 # "mantissa" is all zero which means that the answer is zero. but, the '040
 # algorithm allows the exponent to be non-zero. the 881/2 do not. therefore,
 # if the mantissa is zero, I will zero the exponent, too.
@@ -7951,7 +7951,7 @@
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	fmul(): emulates the fmul instruction				#
+#	fmul(): emulates the fmul instruction				#
 #	fsmul(): emulates the fsmul instruction				#
 #	fdmul(): emulates the fdmul instruction				#
 #									#
@@ -7960,8 +7960,8 @@
 #	scale_to_zero_dst() - scale dst exponent to zero		#
 #	unf_res() - return default underflow result			#
 #	ovf_res() - return default overflow result			#
-# 	res_qnan() - return QNAN result					#
-# 	res_snan() - return SNAN result					#
+#	res_qnan() - return QNAN result					#
+#	res_snan() - return SNAN result					#
 #									#
 # INPUT ***************************************************************	#
 #	a0 = pointer to extended precision source operand		#
@@ -7979,12 +7979,12 @@
 # instruction won't cause an exception. Use the regular fmul to		#
 # compute a result. Check if the regular operands would have taken	#
 # an exception. If so, return the default overflow/underflow result	#
-# and return the EXOP if exceptions are enabled. Else, scale the 	#
+# and return the EXOP if exceptions are enabled. Else, scale the	#
 # result operand to the proper exponent.				#
 #									#
 #########################################################################
 
-	align 		0x10
+	align		0x10
 tbl_fmul_ovfl:
 	long		0x3fff - 0x7ffe		# ext_max
 	long		0x3fff - 0x407e		# sgl_max
@@ -8045,7 +8045,7 @@
 #
 # NORMAL:
 # - the result of the multiply operation will neither overflow nor underflow.
-# - do the multiply to the proper precision and rounding mode. 
+# - do the multiply to the proper precision and rounding mode.
 # - scale the result exponent using the scale factor. if both operands were
 # normalized then we really don't need to go through this scaling. but for now,
 # this will do.
@@ -8056,7 +8056,7 @@
 	fmov.l		L_SCR3(%a6),%fpcr	# set FPCR
 	fmov.l		&0x0,%fpsr		# clear FPSR
 
-	fmul.x		FP_SCR0(%a6),%fp0	# execute multiply	
+	fmul.x		FP_SCR0(%a6),%fp0	# execute multiply
 
 	fmov.l		%fpsr,%d1		# save status
 	fmov.l		&0x0,%fpcr		# clear FPCR
@@ -8096,7 +8096,7 @@
 	fmov.l		L_SCR3(%a6),%fpcr	# set FPCR
 	fmov.l		&0x0,%fpsr		# clear FPSR
 
-	fmul.x		FP_SCR0(%a6),%fp0	# execute multiply	
+	fmul.x		FP_SCR0(%a6),%fp0	# execute multiply
 
 	fmov.l		%fpsr,%d1		# save status
 	fmov.l		&0x0,%fpcr		# clear FPCR
@@ -8175,7 +8175,7 @@
 	fmov.l		&0x0,%fpsr		# clear FPSR
 
 	fmul.x		FP_SCR0(%a6),%fp0	# execute multiply
-	
+
 	fmov.l		%fpsr,%d1		# save status
 	fmov.l		&0x0,%fpcr		# clear FPCR
 
@@ -8184,7 +8184,7 @@
 	fabs.x		%fp0,%fp1		# make a copy of result
 	fcmp.b		%fp1,&0x2		# is |result| >= 2.b?
 	fbge.w		fmul_ovfl_tst		# yes; overflow has occurred
-	
+
 # no, it didn't overflow; we have correct result
 	bra.w		fmul_normal_exit
 
@@ -8201,7 +8201,7 @@
 # of this operation then has its exponent scaled by -0x6000 to create the
 # exceptional operand.
 #
-fmul_unfl:	
+fmul_unfl:
 	bset		&unfl_bit,FPSR_EXCEPT(%a6) # set unfl exc bit
 
 # for fun, let's use only extended precision, round to zero. then, let
@@ -8234,7 +8234,7 @@
 	rts
 
 #
-# UNFL is enabled. 
+# UNFL is enabled.
 #
 fmul_unfl_ena:
 	fmovm.x		FP_SCR1(%a6),&0x40	# load dst op
@@ -8250,7 +8250,7 @@
 fmul_unfl_ena_cont:
 	fmov.l		&0x0,%fpsr		# clear FPSR
 
-	fmul.x		FP_SCR0(%a6),%fp1	# execute multiply	
+	fmul.x		FP_SCR0(%a6),%fp1	# execute multiply
 
 	fmov.l		&0x0,%fpcr		# clear FPCR
 
@@ -8285,7 +8285,7 @@
 	fmov.l		L_SCR3(%a6),%fpcr	# set FPCR
 	fmov.l		&0x0,%fpsr		# clear FPSR
 
-	fmul.x		FP_SCR0(%a6),%fp0	# execute multiply	
+	fmul.x		FP_SCR0(%a6),%fp0	# execute multiply
 
 	fmov.l		%fpsr,%d1		# save status
 	fmov.l		&0x0,%fpcr		# clear FPCR
@@ -8309,11 +8309,11 @@
 	mov.l		L_SCR3(%a6),%d1
 	andi.b		&0xc0,%d1		# keep rnd prec
 	ori.b		&rz_mode*0x10,%d1	# insert RZ
-	
+
 	fmov.l		%d1,%fpcr		# set FPCR
 	fmov.l		&0x0,%fpsr		# clear FPSR
 
-	fmul.x		FP_SCR0(%a6),%fp1	# execute multiply	
+	fmul.x		FP_SCR0(%a6),%fp1	# execute multiply
 
 	fmov.l		&0x0,%fpcr		# clear FPCR
 	fabs.x		%fp1			# make absolute value
@@ -8455,22 +8455,22 @@
 #	norm() - normalize mantissa for EXOP on denorm			#
 #	scale_to_zero_src() - scale src exponent to zero		#
 #	ovf_res() - return default overflow result			#
-# 	unf_res() - return default underflow result			#
+#	unf_res() - return default underflow result			#
 #	res_qnan_1op() - return QNAN result				#
 #	res_snan_1op() - return SNAN result				#
 #									#
 # INPUT ***************************************************************	#
 #	a0 = pointer to extended precision source operand		#
 #	d0 = round prec/mode						#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	fp0 = result							#
 #	fp1 = EXOP (if exception occurred)				#
 #									#
 # ALGORITHM ***********************************************************	#
-# 	Handle NANs, infinities, and zeroes as special cases. Divide	#
+#	Handle NANs, infinities, and zeroes as special cases. Divide	#
 # norms into extended, single, and double precision.			#
-# 	Norms can be emulated w/ a regular fmove instruction. For	#
+#	Norms can be emulated w/ a regular fmove instruction. For	#
 # sgl/dbl, must scale exponent and perform an "fmove". Check to see	#
 # if the result would have overflowed/underflowed. If so, use unf_res()	#
 # or ovf_res() to return the default result. Also return EXOP if	#
@@ -8496,7 +8496,7 @@
 
 	mov.b		STAG(%a6),%d1		# fetch src optype tag
 	bne.w		fin_not_norm		# optimize on non-norm input
-		
+
 #
 # FP MOVE IN: NORMs and DENORMs ONLY!
 #
@@ -8557,9 +8557,9 @@
 
 #
 # operand is to be rounded to single or double precision
-#	
+#
 fin_not_ext:
-	cmpi.b		%d0,&s_mode*0x10 	# separate sgl/dbl prec
+	cmpi.b		%d0,&s_mode*0x10	# separate sgl/dbl prec
 	bne.b		fin_dbl
 
 #
@@ -8643,10 +8643,10 @@
 	bsr.l		unf_res			# calculate default result
 	or.b		%d0,FPSR_CC(%a6)	# unf_res may have set 'Z'
 	fmovm.x		FP_SCR0(%a6),&0x80	# return default result in fp0
-	rts	
+	rts
 
 #
-# operand will underflow AND underflow or inexact is enabled. 
+# operand will underflow AND underflow or inexact is enabled.
 # therefore, we must return the result rounded to extended precision.
 #
 fin_sd_unfl_ena:
@@ -8768,7 +8768,7 @@
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	fdiv(): emulates the fdiv instruction				#
+#	fdiv(): emulates the fdiv instruction				#
 #	fsdiv(): emulates the fsdiv instruction				#
 #	fddiv(): emulates the fddiv instruction				#
 #									#
@@ -8777,8 +8777,8 @@
 #	scale_to_zero_dst() - scale dst exponent to zero		#
 #	unf_res() - return default underflow result			#
 #	ovf_res() - return default overflow result			#
-# 	res_qnan() - return QNAN result					#
-# 	res_snan() - return SNAN result					#
+#	res_qnan() - return QNAN result					#
+#	res_snan() - return SNAN result					#
 #									#
 # INPUT ***************************************************************	#
 #	a0 = pointer to extended precision source operand		#
@@ -8796,7 +8796,7 @@
 # instruction won't cause an exception. Use the regular fdiv to		#
 # compute a result. Check if the regular operands would have taken	#
 # an exception. If so, return the default overflow/underflow result	#
-# and return the EXOP if exceptions are enabled. Else, scale the 	#
+# and return the EXOP if exceptions are enabled. Else, scale the	#
 # result operand to the proper exponent.				#
 #									#
 #########################################################################
@@ -8833,7 +8833,7 @@
 	or.b		STAG(%a6),%d1		# combine src tags
 
 	bne.w		fdiv_not_norm		# optimize on non-norm input
-		
+
 #
 # DIVIDE: NORMs and DENORMs ONLY!
 #
@@ -8899,7 +8899,7 @@
 fdiv_no_ovfl:
 	mov.l		(%sp)+,%d0		# restore scale factor
 	bra.b		fdiv_normal_exit
-	
+
 fdiv_may_ovfl:
 	mov.l		%d0,-(%sp)		# save scale factor
 
@@ -8932,7 +8932,7 @@
 	bne.b		fdiv_ovfl_ena		# yes
 
 fdiv_ovfl_dis:
-	btst		&neg_bit,FPSR_CC(%a6) 	# is result negative?
+	btst		&neg_bit,FPSR_CC(%a6)	# is result negative?
 	sne		%d1			# set sign param accordingly
 	mov.l		L_SCR3(%a6),%d0		# pass prec:rnd
 	bsr.l		ovf_res			# calculate default result
@@ -9004,7 +9004,7 @@
 	rts
 
 #
-# UNFL is enabled. 
+# UNFL is enabled.
 #
 fdiv_unfl_ena:
 	fmovm.x		FP_SCR1(%a6),&0x40	# load dst op
@@ -9068,8 +9068,8 @@
 #
 # we still don't know if underflow occurred. result is ~ equal to 1. but,
 # we don't know if the result was an underflow that rounded up to a 1
-# or a normalized number that rounded down to a 1. so, redo the entire 
-# operation using RZ as the rounding mode to see what the pre-rounded 
+# or a normalized number that rounded down to a 1. so, redo the entire
+# operation using RZ as the rounding mode to see what the pre-rounded
 # result is. this case should be relatively rare.
 #
 	fmovm.x		FP_SCR1(%a6),&0x40	# load dst op into fp1
@@ -9196,8 +9196,8 @@
 	rts
 
 #
-# The destination was an INF w/ an In Range or ZERO source, the result is 
-# an INF w/ the proper sign. 
+# The destination was an INF w/ an In Range or ZERO source, the result is
+# an INF w/ the proper sign.
 # The 68881/882 returns the destination INF w/ the new sign(if the j-bit of the
 # dst INF is set, then then j-bit of the result INF is also set).
 #
@@ -9227,11 +9227,11 @@
 #	fdneg(): emulates the fdneg instruction				#
 #									#
 # XREF ****************************************************************	#
-# 	norm() - normalize a denorm to provide EXOP			#
+#	norm() - normalize a denorm to provide EXOP			#
 #	scale_to_zero_src() - scale sgl/dbl source exponent		#
 #	ovf_res() - return default overflow result			#
 #	unf_res() - return default underflow result			#
-# 	res_qnan_1op() - return QNAN result				#
+#	res_qnan_1op() - return QNAN result				#
 #	res_snan_1op() - return SNAN result				#
 #									#
 # INPUT ***************************************************************	#
@@ -9269,7 +9269,7 @@
 	mov.l		%d0,L_SCR3(%a6)		# store rnd info
 	mov.b		STAG(%a6),%d1
 	bne.w		fneg_not_norm		# optimize on non-norm input
-		
+
 #
 # NEGATE SIGN : norms and denorms ONLY!
 #
@@ -9328,7 +9328,7 @@
 	neg.w		%d0			# new exponent = -(shft val)
 	addi.w		&0x6000,%d0		# add new bias to exponent
 	mov.w		FP_SCR0_EX(%a6),%d1	# fetch old sign,exp
-	andi.w		&0x8000,%d1	 	# keep old sign
+	andi.w		&0x8000,%d1		# keep old sign
 	andi.w		&0x7fff,%d0		# clear sign position
 	or.w		%d1,%d0			# concat old sign, new exponent
 	mov.w		%d0,FP_SCR0_EX(%a6)	# insert new exponent
@@ -9407,7 +9407,7 @@
 fneg_sd_unfl:
 	bset		&unfl_bit,FPSR_EXCEPT(%a6) # set unfl exc bit
 
-	eori.b		&0x80,FP_SCR0_EX(%a6)	# negate sign	
+	eori.b		&0x80,FP_SCR0_EX(%a6)	# negate sign
 	bpl.b		fneg_sd_unfl_tst
 	bset		&neg_bit,FPSR_CC(%a6)	# set 'N' ccode bit
 
@@ -9423,10 +9423,10 @@
 	bsr.l		unf_res			# calculate default result
 	or.b		%d0,FPSR_CC(%a6)	# unf_res may have set 'Z'
 	fmovm.x		FP_SCR0(%a6),&0x80	# return default result in fp0
-	rts	
+	rts
 
 #
-# operand will underflow AND underflow is enabled. 
+# operand will underflow AND underflow is enabled.
 # therefore, we must return the result rounded to extended precision.
 #
 fneg_sd_unfl_ena:
@@ -9548,19 +9548,19 @@
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	ftst(): emulates the ftest instruction				#
+#	ftst(): emulates the ftest instruction				#
 #									#
 # XREF ****************************************************************	#
-# 	res{s,q}nan_1op() - set NAN result for monadic instruction	#
+#	res{s,q}nan_1op() - set NAN result for monadic instruction	#
 #									#
 # INPUT ***************************************************************	#
-# 	a0 = pointer to extended precision source operand		#
+#	a0 = pointer to extended precision source operand		#
 #									#
 # OUTPUT **************************************************************	#
 #	none								#
 #									#
 # ALGORITHM ***********************************************************	#
-# 	Check the source operand tag (STAG) and set the FPCR according	#
+#	Check the source operand tag (STAG) and set the FPCR according	#
 # to the operand type and sign.						#
 #									#
 #########################################################################
@@ -9569,7 +9569,7 @@
 ftst:
 	mov.b		STAG(%a6),%d1
 	bne.b		ftst_not_norm		# optimize on non-norm input
-		
+
 #
 # Norm:
 #
@@ -9617,7 +9617,7 @@
 ftst_inf_m:
 	mov.b		&inf_bmask+neg_bmask,FPSR_CC(%a6) # set 'I','N' ccode bits
 	rts
-	
+
 #
 # Zero:
 #
@@ -9646,13 +9646,13 @@
 #	fp0 = result							#
 #									#
 # ALGORITHM ***********************************************************	#
-# 	Separate according to operand type. Unnorms don't pass through 	#
-# here. For norms, load the rounding mode/prec, execute a "fint", then 	#
+#	Separate according to operand type. Unnorms don't pass through	#
+# here. For norms, load the rounding mode/prec, execute a "fint", then	#
 # store the resulting FPSR bits.					#
-# 	For denorms, force the j-bit to a one and do the same as for	#
-# norms. Denorms are so low that the answer will either be a zero or a 	#
+#	For denorms, force the j-bit to a one and do the same as for	#
+# norms. Denorms are so low that the answer will either be a zero or a	#
 # one.									#
-# 	For zeroes/infs/NANs, return the same while setting the FPSR	#
+#	For zeroes/infs/NANs, return the same while setting the FPSR	#
 # as appropriate.							#
 #									#
 #########################################################################
@@ -9661,7 +9661,7 @@
 fint:
 	mov.b		STAG(%a6),%d1
 	bne.b		fint_not_norm		# optimize on non-norm input
-		
+
 #
 # Norm:
 #
@@ -9671,7 +9671,7 @@
 	fmov.l		%d0,%fpcr		# set FPCR
 	fmov.l		&0x0,%fpsr		# clear FPSR
 
-	fint.x 		SRC(%a0),%fp0		# execute fint
+	fint.x		SRC(%a0),%fp0		# execute fint
 
 	fmov.l		&0x0,%fpcr		# clear FPCR
 	fmov.l		%fpsr,%d0		# save FPSR
@@ -9749,16 +9749,16 @@
 #	d0 = round precision/mode					#
 #									#
 # OUTPUT **************************************************************	#
-# 	fp0 = result							#
+#	fp0 = result							#
 #									#
 # ALGORITHM ***********************************************************	#
 #	Separate according to operand type. Unnorms don't pass through	#
-# here. For norms, load the rounding mode/prec, execute a "fintrz", 	#
+# here. For norms, load the rounding mode/prec, execute a "fintrz",	#
 # then store the resulting FPSR bits.					#
-# 	For denorms, force the j-bit to a one and do the same as for	#
+#	For denorms, force the j-bit to a one and do the same as for	#
 # norms. Denorms are so low that the answer will either be a zero or a	#
 # one.									#
-# 	For zeroes/infs/NANs, return the same while setting the FPSR	#
+#	For zeroes/infs/NANs, return the same while setting the FPSR	#
 # as appropriate.							#
 #									#
 #########################################################################
@@ -9767,7 +9767,7 @@
 fintrz:
 	mov.b		STAG(%a6),%d1
 	bne.b		fintrz_not_norm		# optimize on non-norm input
-		
+
 #
 # Norm:
 #
@@ -9862,17 +9862,17 @@
 #									#
 # ALGORITHM ***********************************************************	#
 #	Handle NANs, infinities, and zeroes as special cases. Divide	#
-# norms into extended, single, and double precision. 			#
-# 	Simply clear sign for extended precision norm. Ext prec denorm	#
+# norms into extended, single, and double precision.			#
+#	Simply clear sign for extended precision norm. Ext prec denorm	#
 # gets an EXOP created for it since it's an underflow.			#
 #	Double and single precision can overflow and underflow. First,	#
 # scale the operand such that the exponent is zero. Perform an "fabs"	#
-# using the correct rnd mode/prec. Check to see if the original 	#
+# using the correct rnd mode/prec. Check to see if the original		#
 # exponent would take an exception. If so, use unf_res() or ovf_res()	#
 # to calculate the default result. Also, create the EXOP for the	#
-# exceptional case. If no exception should occur, insert the correct 	#
+# exceptional case. If no exception should occur, insert the correct	#
 # result exponent and return.						#
-# 	Unnorms don't pass through here.				#
+#	Unnorms don't pass through here.				#
 #									#
 #########################################################################
 
@@ -9892,7 +9892,7 @@
 	mov.l		%d0,L_SCR3(%a6)		# store rnd info
 	mov.b		STAG(%a6),%d1
 	bne.w		fabs_not_norm		# optimize on non-norm input
-		
+
 #
 # ABSOLUTE VALUE: norms and denorms ONLY!
 #
@@ -10038,10 +10038,10 @@
 	bsr.l		unf_res			# calculate default result
 	or.b		%d0,FPSR_CC(%a6)	# set possible 'Z' ccode
 	fmovm.x		FP_SCR0(%a6),&0x80	# return default result in fp0
-	rts	
+	rts
 
 #
-# operand will underflow AND underflow is enabled. 
+# operand will underflow AND underflow is enabled.
 # therefore, we must return the result rounded to extended precision.
 #
 fabs_sd_unfl_ena:
@@ -10163,10 +10163,10 @@
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	fcmp(): fp compare op routine					#
+#	fcmp(): fp compare op routine					#
 #									#
 # XREF ****************************************************************	#
-# 	res_qnan() - return QNAN result					#
+#	res_qnan() - return QNAN result					#
 #	res_snan() - return SNAN result					#
 #									#
 # INPUT ***************************************************************	#
@@ -10178,7 +10178,7 @@
 #	None								#
 #									#
 # ALGORITHM ***********************************************************	#
-# 	Handle NANs and denorms as special cases. For everything else,	#
+#	Handle NANs and denorms as special cases. For everything else,	#
 # just use the actual fcmp instruction to produce the correct condition	#
 # codes.								#
 #									#
@@ -10191,14 +10191,14 @@
 	lsl.b		&0x3,%d1
 	or.b		STAG(%a6),%d1
 	bne.b		fcmp_not_norm		# optimize on non-norm input
-		
+
 #
 # COMPARE FP OPs : NORMs, ZEROs, INFs, and "corrected" DENORMs
 #
 fcmp_norm:
 	fmovm.x		DST(%a1),&0x80		# load dst op
 
-	fcmp.x 		%fp0,SRC(%a0)		# do compare
+	fcmp.x		%fp0,SRC(%a0)		# do compare
 
 	fmov.l		%fpsr,%d0		# save FPSR
 	rol.l		&0x8,%d0		# extract ccode bits
@@ -10219,7 +10219,7 @@
 	short		fcmp_norm	- tbl_fcmp_op # NORM - ZERO
 	short		fcmp_norm	- tbl_fcmp_op # NORM - INF
 	short		fcmp_res_qnan	- tbl_fcmp_op # NORM - QNAN
-	short		fcmp_nrm_dnrm 	- tbl_fcmp_op # NORM - DENORM
+	short		fcmp_nrm_dnrm	- tbl_fcmp_op # NORM - DENORM
 	short		fcmp_res_snan	- tbl_fcmp_op # NORM - SNAN
 	short		tbl_fcmp_op	- tbl_fcmp_op #
 	short		tbl_fcmp_op	- tbl_fcmp_op #
@@ -10281,8 +10281,8 @@
 	rts
 
 #
-# DENORMs are a little more difficult. 
-# If you have a 2 DENORMs, then you can just force the j-bit to a one 
+# DENORMs are a little more difficult.
+# If you have a 2 DENORMs, then you can just force the j-bit to a one
 # and use the fcmp_norm routine.
 # If you have a DENORM and an INF or ZERO, just force the DENORM's j-bit to a one
 # and use the fcmp_norm routine.
@@ -10323,7 +10323,7 @@
 	mov.l		SRC_LO(%a0),FP_SCR0_LO(%a6)
 	lea		FP_SCR1(%a6),%a1
 	lea		FP_SCR0(%a6),%a0
-	bra.w		fcmp_norm	
+	bra.w		fcmp_norm
 
 fcmp_nrm_dnrm:
 	mov.b		SRC_EX(%a0),%d0		# determine if like signs
@@ -10355,15 +10355,15 @@
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	fsglmul(): emulates the fsglmul instruction			#
+#	fsglmul(): emulates the fsglmul instruction			#
 #									#
 # XREF ****************************************************************	#
 #	scale_to_zero_src() - scale src exponent to zero		#
 #	scale_to_zero_dst() - scale dst exponent to zero		#
 #	unf_res4() - return default underflow result for sglop		#
 #	ovf_res() - return default overflow result			#
-# 	res_qnan() - return QNAN result					#
-# 	res_snan() - return SNAN result					#
+#	res_qnan() - return QNAN result					#
+#	res_snan() - return SNAN result					#
 #									#
 # INPUT ***************************************************************	#
 #	a0 = pointer to extended precision source operand		#
@@ -10381,7 +10381,7 @@
 # instruction won't cause an exception. Use the regular fsglmul to	#
 # compute a result. Check if the regular operands would have taken	#
 # an exception. If so, return the default overflow/underflow result	#
-# and return the EXOP if exceptions are enabled. Else, scale the 	#
+# and return the EXOP if exceptions are enabled. Else, scale the	#
 # result operand to the proper exponent.				#
 #									#
 #########################################################################
@@ -10413,11 +10413,11 @@
 
 	add.l		(%sp)+,%d0		# SCALE_FACTOR = scale1 + scale2
 
-	cmpi.l		%d0,&0x3fff-0x7ffe 	# would result ovfl?
+	cmpi.l		%d0,&0x3fff-0x7ffe	# would result ovfl?
 	beq.w		fsglmul_may_ovfl	# result may rnd to overflow
 	blt.w		fsglmul_ovfl		# result will overflow
 
-	cmpi.l		%d0,&0x3fff+0x0001 	# would result unfl?
+	cmpi.l		%d0,&0x3fff+0x0001	# would result unfl?
 	beq.w		fsglmul_may_unfl	# result may rnd to no unfl
 	bgt.w		fsglmul_unfl		# result will underflow
 
@@ -10504,7 +10504,7 @@
 	fmov.l		&0x0,%fpsr		# clear FPSR
 
 	fsglmul.x	FP_SCR0(%a6),%fp0	# execute sgl multiply
-	
+
 	fmov.l		%fpsr,%d1		# save status
 	fmov.l		&0x0,%fpcr		# clear FPCR
 
@@ -10513,7 +10513,7 @@
 	fabs.x		%fp0,%fp1		# make a copy of result
 	fcmp.b		%fp1,&0x2		# is |result| >= 2.b?
 	fbge.w		fsglmul_ovfl_tst	# yes; overflow has occurred
-	
+
 # no, it didn't overflow; we have correct result
 	bra.w		fsglmul_normal_exit
 
@@ -10547,7 +10547,7 @@
 	rts
 
 #
-# UNFL is enabled. 
+# UNFL is enabled.
 #
 fsglmul_unfl_ena:
 	fmovm.x		FP_SCR1(%a6),&0x40	# load dst op
@@ -10555,7 +10555,7 @@
 	fmov.l		L_SCR3(%a6),%fpcr	# set FPCR
 	fmov.l		&0x0,%fpsr		# clear FPSR
 
-	fsglmul.x	FP_SCR0(%a6),%fp1	# execute sgl multiply	
+	fsglmul.x	FP_SCR0(%a6),%fp1	# execute sgl multiply
 
 	fmov.l		&0x0,%fpcr		# clear FPCR
 
@@ -10580,7 +10580,7 @@
 	fmov.l		L_SCR3(%a6),%fpcr	# set FPCR
 	fmov.l		&0x0,%fpsr		# clear FPSR
 
-	fsglmul.x	FP_SCR0(%a6),%fp0	# execute sgl multiply	
+	fsglmul.x	FP_SCR0(%a6),%fp0	# execute sgl multiply
 
 	fmov.l		%fpsr,%d1		# save status
 	fmov.l		&0x0,%fpcr		# clear FPCR
@@ -10604,11 +10604,11 @@
 	mov.l		L_SCR3(%a6),%d1
 	andi.b		&0xc0,%d1		# keep rnd prec
 	ori.b		&rz_mode*0x10,%d1	# insert RZ
-	
+
 	fmov.l		%d1,%fpcr		# set FPCR
 	fmov.l		&0x0,%fpsr		# clear FPSR
 
-	fsglmul.x	FP_SCR0(%a6),%fp1	# execute sgl multiply	
+	fsglmul.x	FP_SCR0(%a6),%fp1	# execute sgl multiply
 
 	fmov.l		&0x0,%fpcr		# clear FPCR
 	fabs.x		%fp1			# make absolute value
@@ -10696,15 +10696,15 @@
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	fsgldiv(): emulates the fsgldiv instruction			#
+#	fsgldiv(): emulates the fsgldiv instruction			#
 #									#
 # XREF ****************************************************************	#
 #	scale_to_zero_src() - scale src exponent to zero		#
 #	scale_to_zero_dst() - scale dst exponent to zero		#
 #	unf_res4() - return default underflow result for sglop		#
 #	ovf_res() - return default overflow result			#
-# 	res_qnan() - return QNAN result					#
-# 	res_snan() - return SNAN result					#
+#	res_qnan() - return QNAN result					#
+#	res_snan() - return SNAN result					#
 #									#
 # INPUT ***************************************************************	#
 #	a0 = pointer to extended precision source operand		#
@@ -10722,7 +10722,7 @@
 # instruction won't cause an exception. Use the regular fsgldiv to	#
 # compute a result. Check if the regular operands would have taken	#
 # an exception. If so, return the default overflow/underflow result	#
-# and return the EXOP if exceptions are enabled. Else, scale the 	#
+# and return the EXOP if exceptions are enabled. Else, scale the	#
 # result operand to the proper exponent.				#
 #									#
 #########################################################################
@@ -10737,7 +10737,7 @@
 	or.b		STAG(%a6),%d1		# combine src tags
 
 	bne.w		fsgldiv_not_norm	# optimize on non-norm input
-		
+
 #
 # DIVIDE: NORMs and DENORMs ONLY!
 #
@@ -10764,7 +10764,7 @@
 	cmpi.l		%d0,&0x3fff-0x7ffe
 	ble.w		fsgldiv_may_ovfl
 
-	cmpi.l		%d0,&0x3fff-0x0000 	# will result underflow?
+	cmpi.l		%d0,&0x3fff-0x0000	# will result underflow?
 	beq.w		fsgldiv_may_unfl	# maybe
 	bgt.w		fsgldiv_unfl		# yes; go handle underflow
 
@@ -10824,7 +10824,7 @@
 	bne.b		fsgldiv_ovfl_ena	# yes
 
 fsgldiv_ovfl_dis:
-	btst		&neg_bit,FPSR_CC(%a6) 	# is result negative
+	btst		&neg_bit,FPSR_CC(%a6)	# is result negative
 	sne		%d1			# set sign param accordingly
 	mov.l		L_SCR3(%a6),%d0		# pass prec:rnd
 	andi.b		&0x30,%d0		# kill precision
@@ -10880,7 +10880,7 @@
 	rts
 
 #
-# UNFL is enabled. 
+# UNFL is enabled.
 #
 fsgldiv_unfl_ena:
 	fmovm.x		FP_SCR1(%a6),&0x40	# load dst op
@@ -10931,8 +10931,8 @@
 #
 # we still don't know if underflow occurred. result is ~ equal to 1. but,
 # we don't know if the result was an underflow that rounded up to a 1
-# or a normalized number that rounded down to a 1. so, redo the entire 
-# operation using RZ as the rounding mode to see what the pre-rounded 
+# or a normalized number that rounded down to a 1. so, redo the entire
+# operation using RZ as the rounding mode to see what the pre-rounded
 # result is. this case should be relatively rare.
 #
 	fmovm.x		FP_SCR1(%a6),&0x40	# load dst op into %fp1
@@ -11036,25 +11036,25 @@
 #	fdadd(): emulates the fdadd instruction				#
 #									#
 # XREF ****************************************************************	#
-# 	addsub_scaler2() - scale the operands so they won't take exc	#
+#	addsub_scaler2() - scale the operands so they won't take exc	#
 #	ovf_res() - return default overflow result			#
 #	unf_res() - return default underflow result			#
 #	res_qnan() - set QNAN result					#
-# 	res_snan() - set SNAN result					#
+#	res_snan() - set SNAN result					#
 #	res_operr() - set OPERR result					#
 #	scale_to_zero_src() - set src operand exponent equal to zero	#
 #	scale_to_zero_dst() - set dst operand exponent equal to zero	#
 #									#
 # INPUT ***************************************************************	#
 #	a0 = pointer to extended precision source operand		#
-# 	a1 = pointer to extended precision destination operand		#
+#	a1 = pointer to extended precision destination operand		#
 #									#
 # OUTPUT **************************************************************	#
 #	fp0 = result							#
 #	fp1 = EXOP (if exception occurred)				#
 #									#
 # ALGORITHM ***********************************************************	#
-# 	Handle NANs, infinities, and zeroes as special cases. Divide	#
+#	Handle NANs, infinities, and zeroes as special cases. Divide	#
 # norms into extended, single, and double precision.			#
 #	Do addition after scaling exponents such that exception won't	#
 # occur. Then, check result exponent to see if exception would have	#
@@ -11268,7 +11268,7 @@
 
 #
 # result is equal to the smallest normalized number in the selected precision
-# if the precision is extended, this result could not have come from an 
+# if the precision is extended, this result could not have come from an
 # underflow that rounded up.
 #
 fadd_may_unfl:
@@ -11290,7 +11290,7 @@
 # ok, so now the result has a exponent equal to the smallest normalized
 # exponent for the selected precision. also, the mantissa is equal to
 # 0x8000000000000000 and this mantissa is the result of rounding non-zero
-# g,r,s. 
+# g,r,s.
 # now, we must determine whether the pre-rounded result was an underflow
 # rounded "up" or a normalized number rounded "down".
 # so, we do this be re-executing the add using RZ as the rounding mode and
@@ -11401,7 +11401,7 @@
 	fmov.s		&0x00000000,%fp0	# return +ZERO
 	mov.b		&z_bmask,FPSR_CC(%a6)	# set Z
 	rts
-	
+
 #
 # the ZEROes have opposite signs:
 # - therefore, we return +ZERO if the rounding modes are RN,RZ, or RP.
@@ -11455,7 +11455,7 @@
 	eor.b		%d1,%d0
 	bmi.l		res_operr		# weed out (-INF)+(+INF)
 
-# ok, so it's not an OPERR. but, we do have to remember to return the 
+# ok, so it's not an OPERR. but, we do have to remember to return the
 # src INF since that's where the 881/882 gets the j-bit from...
 
 #
@@ -11489,25 +11489,25 @@
 #	fdsub(): emulates the fdsub instruction				#
 #									#
 # XREF ****************************************************************	#
-# 	addsub_scaler2() - scale the operands so they won't take exc	#
+#	addsub_scaler2() - scale the operands so they won't take exc	#
 #	ovf_res() - return default overflow result			#
 #	unf_res() - return default underflow result			#
 #	res_qnan() - set QNAN result					#
-# 	res_snan() - set SNAN result					#
+#	res_snan() - set SNAN result					#
 #	res_operr() - set OPERR result					#
 #	scale_to_zero_src() - set src operand exponent equal to zero	#
 #	scale_to_zero_dst() - set dst operand exponent equal to zero	#
 #									#
 # INPUT ***************************************************************	#
 #	a0 = pointer to extended precision source operand		#
-# 	a1 = pointer to extended precision destination operand		#
+#	a1 = pointer to extended precision destination operand		#
 #									#
 # OUTPUT **************************************************************	#
 #	fp0 = result							#
 #	fp1 = EXOP (if exception occurred)				#
 #									#
 # ALGORITHM ***********************************************************	#
-# 	Handle NANs, infinities, and zeroes as special cases. Divide	#
+#	Handle NANs, infinities, and zeroes as special cases. Divide	#
 # norms into extended, single, and double precision.			#
 #	Do subtraction after scaling exponents such that exception won't#
 # occur. Then, check result exponent to see if exception would have	#
@@ -11657,7 +11657,7 @@
 	add.l		&0xc,%sp
 
 	fmovm.x		FP_SCR1(%a6),&0x80	# load dst op
-	
+
 	fmov.l		&rz_mode*0x10,%fpcr	# set FPCR
 	fmov.l		&0x0,%fpsr		# clear FPSR
 
@@ -11721,7 +11721,7 @@
 
 #
 # result is equal to the smallest normalized number in the selected precision
-# if the precision is extended, this result could not have come from an 
+# if the precision is extended, this result could not have come from an
 # underflow that rounded up.
 #
 fsub_may_unfl:
@@ -11743,7 +11743,7 @@
 # ok, so now the result has a exponent equal to the smallest normalized
 # exponent for the selected precision. also, the mantissa is equal to
 # 0x8000000000000000 and this mantissa is the result of rounding non-zero
-# g,r,s. 
+# g,r,s.
 # now, we must determine whether the pre-rounded result was an underflow
 # rounded "up" or a normalized number rounded "down".
 # so, we do this be re-executing the add using RZ as the rounding mode and
@@ -11899,7 +11899,7 @@
 
 #
 # both operands are INFs. an OPERR will result if the INFs have the
-# same signs. else, 
+# same signs. else,
 #
 fsub_inf_2:
 	mov.b		SRC_EX(%a0),%d0		# exclusive or the signs
@@ -11914,7 +11914,7 @@
 	fmovm.x		SRC(%a0),&0x80		# return src INF
 	fneg.x		%fp0			# invert sign
 	fbge.w		fsub_inf_done		# sign is now positive
-	mov.b		&neg_bmask+inf_bmask,FPSR_CC(%a6) # set INF/NEG	
+	mov.b		&neg_bmask+inf_bmask,FPSR_CC(%a6) # set INF/NEG
 	rts
 
 fsub_inf_dst:
@@ -11930,7 +11930,7 @@
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	fsqrt(): emulates the fsqrt instruction				#
+#	fsqrt(): emulates the fsqrt instruction				#
 #	fssqrt(): emulates the fssqrt instruction			#
 #	fdsqrt(): emulates the fdsqrt instruction			#
 #									#
@@ -11938,8 +11938,8 @@
 #	scale_sqrt() - scale the source operand				#
 #	unf_res() - return default underflow result			#
 #	ovf_res() - return default overflow result			#
-# 	res_qnan_1op() - return QNAN result				#
-# 	res_snan_1op() - return SNAN result				#
+#	res_qnan_1op() - return QNAN result				#
+#	res_snan_1op() - return SNAN result				#
 #									#
 # INPUT ***************************************************************	#
 #	a0 = pointer to extended precision source operand		#
@@ -11956,7 +11956,7 @@
 # instruction won't cause an exception. Use the regular fsqrt to	#
 # compute a result. Check if the regular operands would have taken	#
 # an exception. If so, return the default overflow/underflow result	#
-# and return the EXOP if exceptions are enabled. Else, scale the 	#
+# and return the EXOP if exceptions are enabled. Else, scale the	#
 # result operand to the proper exponent.				#
 #									#
 #########################################################################
@@ -11978,7 +11978,7 @@
 	clr.w		%d1
 	mov.b		STAG(%a6),%d1
 	bne.w		fsqrt_not_norm		# optimize on non-norm input
-		
+
 #
 # SQUARE ROOT: norms and denorms ONLY!
 #
@@ -12100,7 +12100,7 @@
 	fmov.l		&rz_mode*0x10,%fpcr	# set FPCR
 	fmov.l		&0x0,%fpsr		# clear FPSR
 
-	fsqrt.x 	FP_SCR0(%a6),%fp0	# execute square root
+	fsqrt.x		FP_SCR0(%a6),%fp0	# execute square root
 
 	fmov.l		%fpsr,%d1		# save status
 	fmov.l		&0x0,%fpcr		# clear FPCR
@@ -12120,10 +12120,10 @@
 	bsr.l		unf_res			# calculate default result
 	or.b		%d0,FPSR_CC(%a6)	# set possible 'Z' ccode
 	fmovm.x		FP_SCR0(%a6),&0x80	# return default result in fp0
-	rts	
+	rts
 
 #
-# operand will underflow AND underflow is enabled. 
+# operand will underflow AND underflow is enabled.
 # therefore, we must return the result rounded to extended precision.
 #
 fsqrt_sd_unfl_ena:
@@ -12239,15 +12239,15 @@
 	bra.l		res_qnan_1op
 
 #
-# 	fsqrt(+0) = +0
-# 	fsqrt(-0) = -0
+#	fsqrt(+0) = +0
+#	fsqrt(-0) = -0
 #	fsqrt(+INF) = +INF
-# 	fsqrt(-INF) = OPERR
+#	fsqrt(-INF) = OPERR
 #
 fsqrt_zero:
 	tst.b		SRC_EX(%a0)		# is ZERO positive or negative?
 	bmi.b		fsqrt_zero_m		# negative
-fsqrt_zero_p:	
+fsqrt_zero_p:
 	fmov.s		&0x00000000,%fp0	# return +ZERO
 	mov.b		&z_bmask,FPSR_CC(%a6)	# set 'Z' ccode bit
 	rts
@@ -12273,13 +12273,13 @@
 #									#
 # INPUT ***************************************************************	#
 #	d1 = index of register to fetch from				#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	d0 = value of register fetched					#
 #									#
 # ALGORITHM ***********************************************************	#
-#	According to the index value in d1 which can range from zero 	#
-# to fifteen, load the corresponding register file value (where 	#
+#	According to the index value in d1 which can range from zero	#
+# to fifteen, load the corresponding register file value (where		#
 # address register indexes start at 8). D0/D1/A0/A1/A6/A7 are on the	#
 # stack. The rest should still be in their original places.		#
 #									#
@@ -12368,7 +12368,7 @@
 # INPUT ***************************************************************	#
 #	d0 = longowrd value to store					#
 #	d1 = index of register to fetch from				#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	(data register is updated)					#
 #									#
@@ -12429,7 +12429,7 @@
 # INPUT ***************************************************************	#
 #	d0 = word value to store					#
 #	d1 = index of register to fetch from				#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	(data register is updated)					#
 #									#
@@ -12490,7 +12490,7 @@
 # INPUT ***************************************************************	#
 #	d0 = byte value to store					#
 #	d1 = index of register to fetch from				#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	(data register is updated)					#
 #									#
@@ -12551,16 +12551,16 @@
 # INPUT ***************************************************************	#
 #	d0 = amount to increment by					#
 #	d1 = index of address register to increment			#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	(address register is updated)					#
 #									#
 # ALGORITHM ***********************************************************	#
-# 	Typically used for an instruction w/ a post-increment <ea>, 	#
+#	Typically used for an instruction w/ a post-increment <ea>,	#
 # this routine adds the increment value in d0 to the address register	#
 # specified by d1. A0/A1/A6/A7 reside on the stack. The rest reside	#
 # in their original places.						#
-# 	For a7, if the increment amount is one, then we have to 	#
+#	For a7, if the increment amount is one, then we have to		#
 # increment by two. For any a7 update, set the mia7_flag so that if	#
 # an access error exception occurs later in emulation, this address	#
 # register update can be undone.					#
@@ -12615,16 +12615,16 @@
 # INPUT ***************************************************************	#
 #	d0 = amount to decrement by					#
 #	d1 = index of address register to decrement			#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	(address register is updated)					#
 #									#
 # ALGORITHM ***********************************************************	#
-# 	Typically used for an instruction w/ a pre-decrement <ea>, 	#
+#	Typically used for an instruction w/ a pre-decrement <ea>,	#
 # this routine adds the decrement value in d0 to the address register	#
 # specified by d1. A0/A1/A6/A7 reside on the stack. The rest reside	#
 # in their original places.						#
-# 	For a7, if the decrement amount is one, then we have to 	#
+#	For a7, if the decrement amount is one, then we have to		#
 # decrement by two. For any a7 update, set the mda7_flag so that if	#
 # an access error exception occurs later in emulation, this address	#
 # register update can be undone.					#
@@ -12680,17 +12680,17 @@
 #									#
 # INPUT ***************************************************************	#
 #	d0 = index of FP register to load				#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	FP_SRC(a6) = value loaded from FP register file			#
 #									#
 # ALGORITHM ***********************************************************	#
-#	Using the index in d0, load FP_SRC(a6) with a number from the 	#
+#	Using the index in d0, load FP_SRC(a6) with a number from the	#
 # FP register file.							#
 #									#
 #########################################################################
 
-	global 		load_fpn1
+	global		load_fpn1
 load_fpn1:
 	mov.w		(tbl_load_fpn1.b,%pc,%d0.w*2), %d0
 	jmp		(tbl_load_fpn1.b,%pc,%d0.w*1)
@@ -12753,12 +12753,12 @@
 #									#
 # INPUT ***************************************************************	#
 #	d0 = index of FP register to load				#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	FP_DST(a6) = value loaded from FP register file			#
 #									#
 # ALGORITHM ***********************************************************	#
-#	Using the index in d0, load FP_DST(a6) with a number from the 	#
+#	Using the index in d0, load FP_DST(a6) with a number from the	#
 # FP register file.							#
 #									#
 #########################################################################
@@ -12819,7 +12819,7 @@
 
 #########################################################################
 # XDEF ****************************************************************	#
-# 	store_fpreg(): store an fp value to the fpreg designated d0.	#
+#	store_fpreg(): store an fp value to the fpreg designated d0.	#
 #									#
 # XREF ****************************************************************	#
 #	None								#
@@ -12827,7 +12827,7 @@
 # INPUT ***************************************************************	#
 #	fp0 = extended precision value to store				#
 #	d0  = index of floating-point register				#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	None								#
 #									#
@@ -12860,27 +12860,27 @@
 	fmovm.x		&0x80, EXC_FP1(%a6)
 	rts
 store_fpreg_2:
-	fmovm.x 	&0x01, -(%sp)
+	fmovm.x		&0x01, -(%sp)
 	fmovm.x		(%sp)+, &0x20
 	rts
 store_fpreg_3:
-	fmovm.x 	&0x01, -(%sp)
+	fmovm.x		&0x01, -(%sp)
 	fmovm.x		(%sp)+, &0x10
 	rts
 store_fpreg_4:
-	fmovm.x 	&0x01, -(%sp)
+	fmovm.x		&0x01, -(%sp)
 	fmovm.x		(%sp)+, &0x08
 	rts
 store_fpreg_5:
-	fmovm.x 	&0x01, -(%sp)
+	fmovm.x		&0x01, -(%sp)
 	fmovm.x		(%sp)+, &0x04
 	rts
 store_fpreg_6:
-	fmovm.x 	&0x01, -(%sp)
+	fmovm.x		&0x01, -(%sp)
 	fmovm.x		(%sp)+, &0x02
 	rts
 store_fpreg_7:
-	fmovm.x 	&0x01, -(%sp)
+	fmovm.x		&0x01, -(%sp)
 	fmovm.x		(%sp)+, &0x01
 	rts
 
@@ -12897,18 +12897,18 @@
 #									#
 # INPUT ***************************************************************	#
 #	None								#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	If no failure on _mem_read():					#
-# 	FP_SRC(a6) = packed operand now as a binary FP number		#
+#	FP_SRC(a6) = packed operand now as a binary FP number		#
 #									#
 # ALGORITHM ***********************************************************	#
-#	Get the correct <ea> whihc is the value on the exception stack 	#
+#	Get the correct <ea> whihc is the value on the exception stack	#
 # frame w/ maybe a correction factor if the <ea> is -(an) or (an)+.	#
 # Then, fetch the operand from memory. If the fetch fails, exit		#
 # through facc_in_x().							#
 #	If the packed operand is a ZERO,NAN, or INF, convert it to	#
-# its binary representation here. Else, call decbin() which will 	#
+# its binary representation here. Else, call decbin() which will	#
 # convert the packed value to an extended precision binary value.	#
 #									#
 #########################################################################
@@ -12965,7 +12965,7 @@
 #	and NaN operands are dispatched without entering this routine)	#
 #	value in 68881/882 format at location (a0).			#
 #									#
-#	A1. Convert the bcd exponent to binary by successive adds and 	#
+#	A1. Convert the bcd exponent to binary by successive adds and	#
 #	muls. Set the sign according to SE. Subtract 16 to compensate	#
 #	for the mantissa which is to be interpreted as 17 integer	#
 #	digits, rather than 1 integer and 16 fraction digits.		#
@@ -13029,7 +13029,7 @@
 
 	global		decbin
 decbin:
-	mov.l		0x0(%a0),FP_SCR0_EX(%a6) # make a copy of input 
+	mov.l		0x0(%a0),FP_SCR0_EX(%a6) # make a copy of input
 	mov.l		0x4(%a0),FP_SCR0_HI(%a6) # so we don't alter it
 	mov.l		0x8(%a0),FP_SCR0_LO(%a6)
 
@@ -13318,7 +13318,7 @@
 #
 # Pwrten calculates the exponent factor in the selected rounding mode
 # according to the following table:
-#	
+#
 #	Sign of Mant  Sign of Exp  Rounding Mode  PWRTEN Rounding Mode
 #
 #	ANY	  ANY	RN	RN
@@ -13406,7 +13406,7 @@
 # it will be inex2, but will be reported as inex1 by get_op.
 #
 end_dec:
-	fmov.l		%fpsr,%d0		# get status register	
+	fmov.l		%fpsr,%d0		# get status register
 	bclr		&inex2_bit+8,%d0	# test for inex2 and clear it
 	beq.b		no_exc			# skip this if no exc
 	ori.w		&inx1a_mask,2+USER_FPSR(%a6) # set INEX1/AINEX
@@ -13423,16 +13423,16 @@
 #									#
 # INPUT ***************************************************************	#
 #	a0 = pointer to the input extended precision value in memory.	#
-#	     the input may be either normalized, unnormalized, or 	#
+#	     the input may be either normalized, unnormalized, or	#
 #	     denormalized.						#
-#	d0 = contains the k-factor sign-extended to 32-bits. 		#
+#	d0 = contains the k-factor sign-extended to 32-bits.		#
 #									#
 # OUTPUT **************************************************************	#
 #	FP_SCR0(a6) = bcd format result on the stack.			#
 #									#
 # ALGORITHM ***********************************************************	#
 #									#
-#	A1.	Set RM and size ext;  Set SIGMA = sign of input.  	#
+#	A1.	Set RM and size ext;  Set SIGMA = sign of input.	#
 #		The k-factor is saved for use in d7. Clear the		#
 #		BINDEC_FLG for separating normalized/denormalized	#
 #		input.  If input is unnormalized or denormalized,	#
@@ -13442,15 +13442,15 @@
 #									#
 #	A3.	Compute ILOG.						#
 #		ILOG is the log base 10 of the input value.  It is	#
-#		approximated by adding e + 0.f when the original 	#
-#		value is viewed as 2^^e * 1.f in extended precision.  	#
+#		approximated by adding e + 0.f when the original	#
+#		value is viewed as 2^^e * 1.f in extended precision.	#
 #		This value is stored in d6.				#
 #									#
 #	A4.	Clr INEX bit.						#
-#		The operation in A3 above may have set INEX2.  		#
+#		The operation in A3 above may have set INEX2.		#
 #									#
 #	A5.	Set ICTR = 0;						#
-#		ICTR is a flag used in A13.  It must be set before the 	#
+#		ICTR is a flag used in A13.  It must be set before the	#
 #		loop entry A6.						#
 #									#
 #	A6.	Calculate LEN.						#
@@ -13472,7 +13472,7 @@
 #		of ISCALE and X.  A table is given in the code.		#
 #									#
 #	A8.	Clr INEX; Force RZ.					#
-#		The operation in A3 above may have set INEX2.  		#
+#		The operation in A3 above may have set INEX2.		#
 #		RZ mode is forced for the scaling operation to insure	#
 #		only one rounding error.  The grs bits are collected in #
 #		the INEX flag for use in A10.				#
@@ -13503,11 +13503,11 @@
 #		the mantissa by 10.					#
 #									#
 #	A14.	Convert the mantissa to bcd.				#
-#		The binstr routine is used to convert the LEN digit 	#
+#		The binstr routine is used to convert the LEN digit	#
 #		mantissa to bcd in memory.  The input to binstr is	#
 #		to be a fraction; i.e. (mantissa)/10^LEN and adjusted	#
 #		such that the decimal point is to the left of bit 63.	#
-#		The bcd digits are stored in the correct position in 	#
+#		The bcd digits are stored in the correct position in	#
 #		the final string area in memory.			#
 #									#
 #	A15.	Convert the exponent to bcd.				#
@@ -13553,7 +13553,7 @@
 #		d2: upper 32-bits of mantissa for binstr
 #		d3: scratch;lower 32-bits of mantissa for binstr
 #		d4: LEN
-#      		d5: LAMBDA/ICTR
+#		d5: LAMBDA/ICTR
 #		d6: ILOG
 #		d7: k-factor
 #		a0: ptr for original operand/final result
@@ -13577,7 +13577,7 @@
 #     separating  normalized/denormalized input.  If the input
 #     is a denormalized number, set the BINDEC_FLG memory word
 #     to signal denorm.  If the input is unnormalized, normalize
-#     the input and test for denormalized result.  
+#     the input and test for denormalized result.
 #
 	fmov.l		&rm_mode*0x10,%fpcr	# set RM and ext
 	mov.l		(%a0),L_SCR2(%a6)	# save exponent for sign check
@@ -13658,7 +13658,7 @@
 	sub.w		&0x3fff,%d0	# strip off bias
 	fadd.w		%d0,%fp0	# add in exp
 	fsub.s		FONE(%pc),%fp0	# subtract off 1.0
-	fbge.w		pos_res		# if pos, branch 
+	fbge.w		pos_res		# if pos, branch
 	fmul.x		PLOG2UP1(%pc),%fp0	# if neg, mul by LOG2UP1
 	fmov.l		%fp0,%d6	# put ILOG in d6 as a lword
 	bra.b		A4_str		# go move out ILOG
@@ -13668,14 +13668,14 @@
 
 
 # A4. Clr INEX bit.
-#     The operation in A3 above may have set INEX2.  
+#     The operation in A3 above may have set INEX2.
 
 A4_str:
 	fmov.l		&0,%fpsr	# zero all of fpsr - nothing needed
 
 
 # A5. Set ICTR = 0;
-#     ICTR is a flag used in A13.  It must be set before the 
+#     ICTR is a flag used in A13.  It must be set before the
 #     loop entry A6. The lower word of d5 is used for ICTR.
 
 	clr.w		%d5		# clear ICTR
@@ -13841,21 +13841,21 @@
 	bne.b		e_loop2		# if not, loop
 
 # A8. Clr INEX; Force RZ.
-#     The operation in A3 above may have set INEX2.  
+#     The operation in A3 above may have set INEX2.
 #     RZ mode is forced for the scaling operation to insure
-#     only one rounding error.  The grs bits are collected in 
+#     only one rounding error.  The grs bits are collected in
 #     the INEX flag for use in A10.
 #
 # Register usage:
 #	Input/Output
 
-	fmov.l		&0,%fpsr	# clr INEX 
+	fmov.l		&0,%fpsr	# clr INEX
 	fmov.l		&rz_mode*0x10,%fpcr	# set RZ rounding mode
 
 # A9. Scale X -> Y.
 #     The mantissa is scaled to the desired number of significant
 #     digits.  The excess digits are collected in INEX2. If mul,
-#     Check d2 for excess 10 exponential value.  If not zero, 
+#     Check d2 for excess 10 exponential value.  If not zero,
 #     the iscale value would have caused the pwrten calculation
 #     to overflow.  Only a negative iscale can cause this, so
 #     multiply by 10^(d2), which is now only allowed to be 24,
@@ -13986,7 +13986,7 @@
 
 A11_st:
 	mov.l		USER_FPCR(%a6),L_SCR1(%a6)	# save it for later
-	and.l		&0x00000030,USER_FPCR(%a6)	# set size to ext, 
+	and.l		&0x00000030,USER_FPCR(%a6)	# set size to ext,
 #					;block exceptions
 
 
@@ -14022,7 +14022,7 @@
 	lea.l		FP_SCR1(%a6),%a0	# a0 is ptr to FP_SCR1(a6)
 	fmov.x		%fp0,(%a0)	# move Y to memory at FP_SCR1(a6)
 	tst.l		L_SCR2(%a6)	# test sign of original operand
-	bge.b		do_fint12		# if pos, use Y 
+	bge.b		do_fint12		# if pos, use Y
 	or.l		&0x80000000,(%a0)	# if neg, use -Y
 do_fint12:
 	mov.l	USER_FPSR(%a6),-(%sp)
@@ -14118,7 +14118,7 @@
 	subq.l		&1,%d6		# subtract 1 from ILOG
 	mov.w		&1,%d5		# set ICTR
 	fmov.l		&rm_mode*0x10,%fpcr	# set rmode to RM
-	fmul.s		FTEN(%pc),%fp2	# compute 10^LEN 
+	fmul.s		FTEN(%pc),%fp2	# compute 10^LEN
 	bra.w		A6_str		# return to A6 and recompute YINT
 test_2:
 	fmul.s		FTEN(%pc),%fp2	# compute 10^LEN
@@ -14134,7 +14134,7 @@
 	fmov.l		&rm_mode*0x10,%fpcr	# set rmode to RM
 	bra.w		A6_str		# return to A6 and recompute YINT
 #
-# Since ICTR <> 0, we have already been through one adjustment, 
+# Since ICTR <> 0, we have already been through one adjustment,
 # and shouldn't have another; this is to check if abs(YINT) = 10^LEN
 # 10^LEN is again computed using whatever table is in a1 since the
 # value calculated cannot be inexact.
@@ -14160,11 +14160,11 @@
 	fmul.s		FTEN(%pc),%fp2	# if LEN++, the get 10^^LEN
 
 # A14. Convert the mantissa to bcd.
-#      The binstr routine is used to convert the LEN digit 
+#      The binstr routine is used to convert the LEN digit
 #      mantissa to bcd in memory.  The input to binstr is
 #      to be a fraction; i.e. (mantissa)/10^LEN and adjusted
 #      such that the decimal point is to the left of bit 63.
-#      The bcd digits are stored in the correct position in 
+#      The bcd digits are stored in the correct position in
 #      the final string area in memory.
 #
 #
@@ -14207,7 +14207,7 @@
 	bgt.b		no_sft		# if so, don't shift
 	neg.l		%d0		# make exp positive
 m_loop:
-	lsr.l		&1,%d2		# shift d2:d3 right, add 0s 
+	lsr.l		&1,%d2		# shift d2:d3 right, add 0s
 	roxr.l		&1,%d3		# the number of places
 	dbf.w		%d0,m_loop	# given in d0
 no_sft:
@@ -14232,9 +14232,9 @@
 #
 #      Digits are stored in L_SCR1(a6) on return from BINDEC as:
 #
-#  	 32               16 15                0
+#	 32               16 15                0
 #	-----------------------------------------
-#  	|  0 | e3 | e2 | e1 | e4 |  X |  X |  X |
+#	|  0 | e3 | e2 | e1 | e4 |  X |  X |  X |
 #	-----------------------------------------
 #
 # And are moved into their proper places in FP_SCR0.  If digit e4
@@ -14297,7 +14297,7 @@
 	sub.w		&0x3ffd,%d0	# subtract off bias
 	neg.w		%d0		# make exp positive
 x_loop:
-	lsr.l		&1,%d2		# shift d2:d3 right 
+	lsr.l		&1,%d2		# shift d2:d3 right
 	roxr.l		&1,%d3		# the number of places
 	dbf.w		%d0,x_loop	# given in d0
 x_loop_fin:
@@ -14308,12 +14308,12 @@
 	mov.l		&4,%d0		# put 4 in d0 for binstr call
 	lea.l		L_SCR1(%a6),%a0	# a0 is ptr to L_SCR1 for exp digits
 	bsr		binstr		# call binstr to convert exp
-	mov.l		L_SCR1(%a6),%d0	# load L_SCR1 lword to d0 
+	mov.l		L_SCR1(%a6),%d0	# load L_SCR1 lword to d0
 	mov.l		&12,%d1		# use d1 for shift count
 	lsr.l		%d1,%d0		# shift d0 right by 12
 	bfins		%d0,FP_SCR0(%a6){&4:&12}	# put e3:e2:e1 in FP_SCR0
 	lsr.l		%d1,%d0		# shift d0 right by 12
-	bfins		%d0,FP_SCR0(%a6){&16:&4}	# put e4 in FP_SCR0 
+	bfins		%d0,FP_SCR0(%a6){&16:&4}	# put e4 in FP_SCR0
 	tst.b		%d0		# check if e4 is zero
 	beq.b		A16_st		# if zero, skip rest
 	or.l		&opaop_mask,USER_FPSR(%a6)	# set OPERR & AIOP in USER_FPSR
@@ -14344,14 +14344,14 @@
 
 A16_st:
 	clr.l		%d0		# clr d0 for collection of signs
-	and.b		&0x0f,FP_SCR0(%a6)	# clear first nibble of FP_SCR0 
+	and.b		&0x0f,FP_SCR0(%a6)	# clear first nibble of FP_SCR0
 	tst.l		L_SCR2(%a6)	# check sign of original mantissa
 	bge.b		mant_p		# if pos, don't set SM
 	mov.l		&2,%d0		# move 2 in to d0 for SM
 mant_p:
 	tst.l		%d6		# check sign of ILOG
 	bge.b		wr_sgn		# if pos, don't set SE
-	addq.l		&1,%d0		# set bit 0 in d0 for SE 
+	addq.l		&1,%d0		# set bit 0 in d0 for SE
 wr_sgn:
 	bfins		%d0,FP_SCR0(%a6){&0:&2}	# insert SM and SE into FP_SCR0
 
@@ -14417,8 +14417,8 @@
 #	d2:d3 = 64-bit binary integer					#
 #	d0    = desired length (LEN)					#
 #	a0    = pointer to start in memory for bcd characters		#
-#          	(This pointer must point to byte 4 of the first		#
-#          	 lword of the packed decimal memory string.)		#
+#		(This pointer must point to byte 4 of the first		#
+#		 lword of the packed decimal memory string.)		#
 #									#
 # OUTPUT ************************************************************** #
 #	a0 = pointer to LEN bcd digits representing the 64-bit integer.	#
@@ -14558,14 +14558,14 @@
 #									#
 # INPUT ***************************************************************	#
 #	None								#
-# 									#
+#									#
 # OUTPUT **************************************************************	#
 #	None								#
 #									#
 # ALGORITHM ***********************************************************	#
-# 	Flow jumps here when an FP data fetch call gets an error 	#
+#	Flow jumps here when an FP data fetch call gets an error	#
 # result. This means the operating system wants an access error frame	#
-# made out of the current exception stack frame. 			#
+# made out of the current exception stack frame.			#
 #	So, we first call restore() which makes sure that any updated	#
 # -(an)+ register gets returned to its pre-exception value and then	#
 # we change the stack to an access error stack frame.			#
@@ -14735,7 +14735,7 @@
 	bne.b		ri_a7_done		# supervisor
 	movc		%usp,%a0		# restore USP
 	sub.l		%d0,%a0
-	movc		%a0,%usp	
+	movc		%a0,%usp
 ri_a7_done:
 	rts
 
diff -Nru a/arch/m68k/kernel/bios32.c b/arch/m68k/kernel/bios32.c
--- a/arch/m68k/kernel/bios32.c	Sun May 16 01:18:35 2004
+++ b/arch/m68k/kernel/bios32.c	Sun May 16 01:18:35 2004
@@ -46,7 +46,7 @@
 
 #define ALIGN(val,align)	(((val) + ((align) - 1)) & ~((align) - 1))
 
-#define MAX(val1, val2) 	(((val1) > (val2)) ? val1 : val2)
+#define MAX(val1, val2)		(((val1) > (val2)) ? val1 : val2)
 
 /*
  * Offsets relative to the I/O and memory base addresses from where resources
diff -Nru a/arch/m68k/kernel/entry.S b/arch/m68k/kernel/entry.S
--- a/arch/m68k/kernel/entry.S	Sun May 16 01:18:33 2004
+++ b/arch/m68k/kernel/entry.S	Sun May 16 01:18:33 2004
@@ -55,7 +55,7 @@
 ENTRY(buserr)
 	SAVE_ALL_INT
 	GET_CURRENT(%d0)
-	movel	%sp,%sp@- 		| stack frame pointer argument
+	movel	%sp,%sp@-		| stack frame pointer argument
 	bsrl	buserr_c
 	addql	#4,%sp
 	jra	ret_from_exception
@@ -63,7 +63,7 @@
 ENTRY(trap)
 	SAVE_ALL_INT
 	GET_CURRENT(%d0)
-	movel	%sp,%sp@- 		| stack frame pointer argument
+	movel	%sp,%sp@-		| stack frame pointer argument
 	bsrl	trap_c
 	addql	#4,%sp
 	jra	ret_from_exception
@@ -99,18 +99,18 @@
 	jbsr	syscall_trace
 
 ret_from_signal:
-	RESTORE_SWITCH_STACK 
+	RESTORE_SWITCH_STACK
 	addql	#4,%sp
-/* on 68040 complete pending writebacks if any */	
+/* on 68040 complete pending writebacks if any */
 #ifdef CONFIG_M68040
-	bfextu	%sp@(PT_VECTOR){#0,#4},%d0  
+	bfextu	%sp@(PT_VECTOR){#0,#4},%d0
 	subql	#7,%d0				| bus error frame ?
 	jbne	1f
 	movel	%sp,%sp@-
 	jbsr	berr_040cleanup
 	addql	#4,%sp
-1:	
-#endif	
+1:
+#endif
 	jra	ret_from_exception
 
 ENTRY(system_call)
@@ -229,18 +229,18 @@
 	bfextu %sp@(PT_VECTOR){#4,#10},%d0
 
 	movel	%sp,%sp@-
-	movel	%d0,%sp@- 		|  put vector # on stack
+	movel	%d0,%sp@-		|  put vector # on stack
 #if defined(MACH_Q40_ONLY) && defined(CONFIG_BLK_DEV_FD)
 	btstb	#4,0xff000000		| Q40 floppy needs very special treatment ...
 	jbeq	1f
-	btstb	#3,0xff000004		
+	btstb	#3,0xff000004
 	jbeq	1f
 	jbsr	floppy_hardint
 	jbra	3f
 1:
-#endif		
+#endif
 	jbsr	process_int		|  process the IRQ
-3:     	addql	#8,%sp			|  pop parameters off stack
+3:	addql	#8,%sp			|  pop parameters off stack
 
 ret_from_interrupt:
 	subqb	#1,%curptr@(TASK_INFO+TINFO_PREEMPT+2)
@@ -266,7 +266,7 @@
 	rte
 
 ENTRY(sys_fork)
-	SAVE_SWITCH_STACK	
+	SAVE_SWITCH_STACK
 	pea	%sp@(SWITCH_STACK_SIZE)
 	jbsr	m68k_fork
 	addql	#4,%sp
@@ -282,7 +282,7 @@
 	rts
 
 ENTRY(sys_vfork)
-	SAVE_SWITCH_STACK	
+	SAVE_SWITCH_STACK
 	pea	%sp@(SWITCH_STACK_SIZE)
 	jbsr	m68k_vfork
 	addql	#4,%sp
@@ -397,7 +397,7 @@
 #if !defined(CPU_M68060_ONLY)
 1:	tstb	%a1@(TASK_THREAD+THREAD_FPSTATE)
 	jeq	3f
-#endif	
+#endif
 2:	fmovemx	%a1@(TASK_THREAD+THREAD_FPREG),%fp0-%fp7
 	fmoveml	%a1@(TASK_THREAD+THREAD_FPCNTL),%fpcr/%fpsr/%fpiar
 3:	frestore %a1@(TASK_THREAD+THREAD_FPSTATE)
@@ -554,7 +554,7 @@
 	.long sys_adjtimex
 	.long sys_mprotect	/* 125 */
 	.long sys_sigprocmask
-	.long sys_ni_syscall		/* old "create_module" */ 
+	.long sys_ni_syscall		/* old "create_module" */
 	.long sys_init_module
 	.long sys_delete_module
 	.long sys_ni_syscall	/* 130 - old "get_kernel_syms" */
diff -Nru a/arch/m68k/kernel/head.S b/arch/m68k/kernel/head.S
--- a/arch/m68k/kernel/head.S	Sun May 16 01:18:37 2004
+++ b/arch/m68k/kernel/head.S	Sun May 16 01:18:37 2004
@@ -19,7 +19,7 @@
 ** ++ Bjoern & Roman: ATARI-68040 support for the Medusa
 ** 95/11/18 Richard Hirst: Added MVME166 support
 ** 96/04/26 Guenther Kelleter: fixed identity mapping for Falcon with
-** 			      Magnum- and FX-alternate ram
+**			      Magnum- and FX-alternate ram
 ** 98/04/25 Phil Blundell: added HP300 support
 ** 1998/08/30 David Kilzer: Added support for font_desc structures
 **            for linux-2.1.115
@@ -67,7 +67,7 @@
  * for the kernel.
  *	There are new subroutines and data structures to make MMU
  * support cleaner and easier to understand.
- * 	First, you will find a routine call "mmu_map" which maps
+ *	First, you will find a routine call "mmu_map" which maps
  * a logical to a physical region for some length given a cache
  * type on behalf of the caller.  This routine makes writing the
  * actual per-machine specific code very simple.
@@ -299,7 +299,7 @@
  * For the head.S console, there are three supported fonts, 6x11, 8x16 and 8x8.
  * The 8x8 font is harder to read but fits more on the screen.
  */
-#define FONT_8x8 	/* default */
+#define FONT_8x8	/* default */
 /* #define FONT_8x16 */	/* 2nd choice */
 /* #define FONT_6x11 */	/* 3rd choice */
 
diff -Nru a/arch/m68k/kernel/process.c b/arch/m68k/kernel/process.c
--- a/arch/m68k/kernel/process.c	Sun May 16 01:18:37 2004
+++ b/arch/m68k/kernel/process.c	Sun May 16 01:18:37 2004
@@ -67,8 +67,7 @@
 {
 	struct switch_stack *sw = (struct switch_stack *)tsk->thread.ksp;
 	/* Check whether the thread is blocked in resume() */
-	if (sw->retpc > (unsigned long)scheduling_functions_start_here &&
-	    sw->retpc < (unsigned long)scheduling_functions_end_here)
+	if (in_sched_functions(sw->retpc))
 		return ((unsigned long *)sw->a6)[1];
 	else
 		return sw->retpc;
@@ -382,12 +381,6 @@
 	return error;
 }
 
-/*
- * These bracket the sleeping functions..
- */
-#define first_sched	((unsigned long) scheduling_functions_start_here)
-#define last_sched	((unsigned long) scheduling_functions_end_here)
-
 unsigned long get_wchan(struct task_struct *p)
 {
 	unsigned long fp, pc;
@@ -403,7 +396,7 @@
 		    fp >= 8184+stack_page)
 			return 0;
 		pc = ((unsigned long *)fp)[1];
-		if (pc < first_sched || pc >= last_sched)
+		if (!in_sched_functions(pc))
 			return pc;
 		fp = *(unsigned long *) fp;
 	} while (count++ < 16);
diff -Nru a/arch/m68k/kernel/ptrace.c b/arch/m68k/kernel/ptrace.c
--- a/arch/m68k/kernel/ptrace.c	Sun May 16 01:18:34 2004
+++ b/arch/m68k/kernel/ptrace.c	Sun May 16 01:18:34 2004
@@ -156,7 +156,7 @@
 
 	switch (request) {
 	/* when I and D space are separate, these will need to be fixed. */
-		case PTRACE_PEEKTEXT: /* read word at location addr. */ 
+		case PTRACE_PEEKTEXT: /* read word at location addr. */
 		case PTRACE_PEEKDATA: {
 			unsigned long tmp;
 			int copied;
@@ -172,12 +172,12 @@
 	/* read the word at location addr in the USER area. */
 		case PTRACE_PEEKUSR: {
 			unsigned long tmp;
-			
+
 			ret = -EIO;
 			if ((addr & 3) || addr < 0 ||
 			    addr > sizeof(struct user) - 3)
 				break;
-			
+
 			tmp = 0;  /* Default return condition */
 			addr = addr >> 2; /* temporary hack. */
 			ret = -EIO;
@@ -217,7 +217,7 @@
 				break;
 
 			addr = addr >> 2; /* temporary hack. */
-			    
+
 			if (addr == PT_SR) {
 				data &= SR_MASK;
 				data <<= 16;
@@ -269,8 +269,8 @@
 		}
 
 /*
- * make the child exit.  Best I can do is send it a sigkill. 
- * perhaps it should be put in the status that it wants to 
+ * make the child exit.  Best I can do is send it a sigkill.
+ * perhaps it should be put in the status that it wants to
  * exit.
  */
 		case PTRACE_KILL: {
@@ -311,7 +311,7 @@
 			break;
 
 		case PTRACE_GETREGS: { /* Get all gp regs from the child. */
-		  	int i;
+			int i;
 			unsigned long tmp;
 			for (i = 0; i < 19; i++) {
 			    tmp = get_reg(child, i);
diff -Nru a/arch/m68k/kernel/setup.c b/arch/m68k/kernel/setup.c
--- a/arch/m68k/kernel/setup.c	Sun May 16 01:18:36 2004
+++ b/arch/m68k/kernel/setup.c	Sun May 16 01:18:36 2004
@@ -85,7 +85,7 @@
 void (*mach_halt)( void );
 void (*mach_power_off)( void );
 long mach_max_dma_address = 0x00ffffff; /* default set to the lower 16MB */
-#if defined(CONFIG_AMIGA_FLOPPY) || defined(CONFIG_ATARI_FLOPPY) 
+#if defined(CONFIG_AMIGA_FLOPPY) || defined(CONFIG_ATARI_FLOPPY)
 void (*mach_floppy_setup) (char *, int *) __initdata = NULL;
 #endif
 #ifdef CONFIG_HEARTBEAT
@@ -143,7 +143,7 @@
 		/* Already set up by head.S */
 		break;
 
- 	    case BI_MEMCHUNK:
+	    case BI_MEMCHUNK:
 		if (m68k_num_memory < NUM_MEMINFO) {
 		    m68k_memory[m68k_num_memory].addr = data[0];
 		    m68k_memory[m68k_num_memory].size = data[1];
@@ -236,7 +236,7 @@
 		volatile int zero = 0;
 		asm __volatile__ ("frestore %0" : : "m" (zero));
 	}
-#endif	
+#endif
 
 	init_mm.start_code = PAGE_OFFSET;
 	init_mm.end_code = (unsigned long) &_etext;
@@ -296,28 +296,28 @@
 #endif
 #ifdef CONFIG_SUN3
 	    case MACH_SUN3:
-	    	config_sun3();
-	    	break;
+		config_sun3();
+		break;
 #endif
 #ifdef CONFIG_APOLLO
 	    case MACH_APOLLO:
-	    	config_apollo();
-	    	break;
+		config_apollo();
+		break;
 #endif
 #ifdef CONFIG_MVME147
 	    case MACH_MVME147:
-	    	config_mvme147();
-	    	break;
+		config_mvme147();
+		break;
 #endif
 #ifdef CONFIG_MVME16x
 	    case MACH_MVME16x:
-	    	config_mvme16x();
-	    	break;
+		config_mvme16x();
+		break;
 #endif
 #ifdef CONFIG_BVME6000
 	    case MACH_BVME6000:
-	    	config_bvme6000();
-	    	break;
+		config_bvme6000();
+		break;
 #endif
 #ifdef CONFIG_HP300
 	    case MACH_HP300:
@@ -384,11 +384,11 @@
 
 /* set ISA defs early as possible */
 #if defined(CONFIG_ISA) && defined(MULTI_ISA)
-#if defined(CONFIG_Q40) 
+#if defined(CONFIG_Q40)
 	if (MACH_IS_Q40) {
 	    isa_type = Q40_ISA;
 	    isa_sex = 0;
-	} 
+	}
 #elif defined(CONFIG_GG2)
 	if (MACH_IS_AMIGA && AMIGAHW_PRESENT(GG2_ISA)){
 	    isa_type = GG2_ISA;
diff -Nru a/arch/m68k/kernel/signal.c b/arch/m68k/kernel/signal.c
--- a/arch/m68k/kernel/signal.c	Sun May 16 01:18:36 2004
+++ b/arch/m68k/kernel/signal.c	Sun May 16 01:18:36 2004
@@ -121,7 +121,7 @@
 	}
 }
 
-asmlinkage int 
+asmlinkage int
 sys_sigaction(int sig, const struct old_sigaction *act,
 	      struct old_sigaction *oact)
 {
@@ -329,7 +329,7 @@
 	/* get previous context */
 	if (copy_from_user(&context, usc, sizeof(context)))
 		goto badframe;
-	
+
 	/* restore passed registers */
 	regs->d1 = context.sc_d1;
 	regs->a0 = context.sc_a0;
@@ -521,7 +521,7 @@
 	sigdelsetmask(&set, ~_BLOCKABLE);
 	current->blocked = set;
 	recalc_sigpending();
-	
+
 	if (restore_sigcontext(regs, &frame->sc, frame + 1, &d0))
 		goto badframe;
 	return d0;
@@ -548,7 +548,7 @@
 	sigdelsetmask(&set, ~_BLOCKABLE);
 	current->blocked = set;
 	recalc_sigpending();
-	
+
 	if (rt_restore_ucontext(regs, sw, &frame->uc, &d0))
 		goto badframe;
 	return d0;
@@ -1091,7 +1091,7 @@
 				current->state = TASK_STOPPED;
 				current->exit_code = signr;
 				sighand = current->parent->sighand;
-				if (sighand && !(sighand->action[SIGCHLD-1].sa.sa_flags 
+				if (sighand && !(sighand->action[SIGCHLD-1].sa.sa_flags
 					     & SA_NOCLDSTOP))
 					notify_parent(current, SIGCHLD);
 				schedule();
diff -Nru a/arch/m68k/kernel/sun3-head.S b/arch/m68k/kernel/sun3-head.S
--- a/arch/m68k/kernel/sun3-head.S	Sun May 16 01:18:33 2004
+++ b/arch/m68k/kernel/sun3-head.S	Sun May 16 01:18:33 2004
@@ -9,7 +9,7 @@
 NBSG            = 0x20000
 ICACHE_ONLY	= 0x00000009
 CACHES_OFF	= 0x00000008	| actually a clear and disable --m
-#define MAS_STACK INT_STACK 
+#define MAS_STACK INT_STACK
 ROOT_TABLE_SIZE = 128
 PAGESIZE	= 8192
 SUN3_INVALID_PMEG = 255
@@ -35,9 +35,9 @@
 
 /* Firstly, disable interrupts and set up function codes. */
 	movew	#PSL_HIGHIPL, %sr
-	moveq	#FC_CONTROL, %d0	
-	movec	%d0, %sfc	
-	movec	%d0, %dfc	
+	moveq	#FC_CONTROL, %d0
+	movec	%d0, %sfc
+	movec	%d0, %dfc
 
 /* Make sure we're in context zero. */
 	moveq	#0, %d0
@@ -45,9 +45,9 @@
 
 /* map everything the bootloader left us into high memory, clean up the
    excess later */
-	lea	(AC_SEGMAP+0),%a0 
-	lea	(AC_SEGMAP+KERNBASE),%a1	
-1:	
+	lea	(AC_SEGMAP+0),%a0
+	lea	(AC_SEGMAP+KERNBASE),%a1
+1:
 	movsb	%a0@, %d1
 	movsb	%d1, %a1@
 	cmpib	#SUN3_INVALID_PMEG, %d1
@@ -55,13 +55,13 @@
 	addl	#NBSG,%a0
 	addl	#NBSG,%a1
 	jmp	1b
-	
-2:				
-	
+
+2:
+
 /* Disable caches and jump to high code. */
 	moveq	#ICACHE_ONLY,%d0	| Cache disabled until we're ready to enable it
 	movc	%d0, %cacr	|   is this the right value? (yes --m)
-	jmp	1f:l		
+	jmp	1f:l
 
 /* Following code executes at high addresses (0xE000xxx). */
 1:	lea	init_task,%curptr			| get initial thread...
@@ -76,7 +76,7 @@
 	movel   %a0@, %a1@
 	addl	#4, %a1
 	dbf	%d0, 1b
-	
+
 /* Point MSP at an invalid page to trap if it's used. --m */
 	movl	#(PAGESIZE),%d0
 	movc	%d0,%msp
@@ -86,9 +86,9 @@
 	jbsr	sun3_init
 
 	jbsr	base_trap_init
-			
+
         jbsr    start_kernel
-	trap	#15			
+	trap	#15
 
         .data
         .even
diff -Nru a/arch/m68k/kernel/sys_m68k.c b/arch/m68k/kernel/sys_m68k.c
--- a/arch/m68k/kernel/sys_m68k.c	Sun May 16 01:18:33 2004
+++ b/arch/m68k/kernel/sys_m68k.c	Sun May 16 01:18:33 2004
@@ -203,10 +203,10 @@
 		default:
 			return -ENOSYS;
 		}
-	if (call <= MSGCTL) 
+	if (call <= MSGCTL)
 		switch (call) {
 		case MSGSND:
-			return sys_msgsnd (first, (struct msgbuf *) ptr, 
+			return sys_msgsnd (first, (struct msgbuf *) ptr,
 					  second, third);
 		case MSGRCV:
 			switch (version) {
@@ -234,7 +234,7 @@
 		default:
 			return -ENOSYS;
 		}
-	if (call <= SHMCTL) 
+	if (call <= SHMCTL)
 		switch (call) {
 		case SHMAT:
 			switch (version) {
@@ -247,7 +247,7 @@
 				return put_user (raddr, (ulong *) third);
 			}
 			}
-		case SHMDT: 
+		case SHMDT:
 			return sys_shmdt ((char *)ptr);
 		case SHMGET:
 			return sys_shmget (first, second, third);
@@ -442,7 +442,7 @@
   unsigned long paddr, i;
 
   /*
-   * 68060 manual says: 
+   * 68060 manual says:
    *  cpush %dc : flush DC, remains valid (with our %cacr setup)
    *  cpush %ic : invalidate IC
    *  cpush %bc : flush DC + invalidate IC
diff -Nru a/arch/m68k/kernel/traps.c b/arch/m68k/kernel/traps.c
--- a/arch/m68k/kernel/traps.c	Sun May 16 01:18:37 2004
+++ b/arch/m68k/kernel/traps.c	Sun May 16 01:18:37 2004
@@ -116,7 +116,7 @@
 
 		__asm__ volatile ("movec %%vbr, %0" : "=r" ((void*)sun3x_prom_vbr));
 	}
-	
+
 	/* setup the exception vector table */
 	__asm__ volatile ("movec %0,%%vbr" : : "r" ((void*)vectors));
 
@@ -352,7 +352,7 @@
 
 	asm volatile (".chip 68040; movec %%mmusr,%0; .chip 68k" : "=r" (mmusr));
 
-	set_fs(old_fs); 
+	set_fs(old_fs);
 
 	return mmusr;
 }
@@ -379,8 +379,8 @@
 	}
 
 	/* set_fs can not be moved, otherwise put_user() may oops */
-	set_fs(old_fs); 
-	
+	set_fs(old_fs);
+
 
 #ifdef DEBUG
 	printk("do_040writeback1, res=%d\n",res);
@@ -390,7 +390,7 @@
 }
 
 /* after an exception in a writeback the stack frame corresponding
- * to that exception is discarded, set a few bits in the old frame 
+ * to that exception is discarded, set a few bits in the old frame
  * to simulate what it should look like
  */
 static inline void fix_xframe040(struct frame *fp, unsigned long wba, unsigned short wbs)
@@ -415,7 +415,7 @@
 				       fp->un.fmt7.wb2d);
 		if (res)
 			fix_xframe040(fp, fp->un.fmt7.wb2a, fp->un.fmt7.wb2s);
-		else 
+		else
 			fp->un.fmt7.wb2s = 0;
 	}
 
@@ -461,9 +461,9 @@
 
 #ifdef DEBUG
 	printk("ssw=%#x, fa=%#lx\n", ssw, fp->un.fmt7.faddr);
-        printk("wb1s=%#x, wb2s=%#x, wb3s=%#x\n", fp->un.fmt7.wb1s,  
+        printk("wb1s=%#x, wb2s=%#x, wb3s=%#x\n", fp->un.fmt7.wb1s,
 		fp->un.fmt7.wb2s, fp->un.fmt7.wb3s);
-	printk ("wb2a=%lx, wb3a=%lx, wb2d=%lx, wb3d=%lx\n", 
+	printk ("wb2a=%lx, wb3a=%lx, wb2d=%lx, wb3d=%lx\n",
 		fp->un.fmt7.wb2a, fp->un.fmt7.wb3a,
 		fp->un.fmt7.wb2d, fp->un.fmt7.wb3d);
 #endif
@@ -491,7 +491,7 @@
 			errorcode = 0;
 		}
 
-		/* despite what documentation seems to say, RMW 
+		/* despite what documentation seems to say, RMW
 		 * accesses have always both the LK and RW bits set */
 		if (!(ssw & RW_040) || (ssw & LK_040))
 			errorcode |= 2;
@@ -547,7 +547,7 @@
 			fp->ptregs.format == 0xa ? fp->ptregs.pc + 2 : fp->un.fmtb.baddr - 2
 			:
 			fp->ptregs.format == 0xa ? fp->ptregs.pc + 4 : fp->un.fmtb.baddr);
-	if (ssw & DF) 
+	if (ssw & DF)
 		printk ("Data %s fault at %#010lx in %s (pc=%#lx)\n",
 			ssw & RW ? "read" : "write",
 			fp->un.fmtb.daddr,
@@ -559,7 +559,7 @@
 	 * the testing for a bad kernel-space access (demand-mapping applies
 	 * to kernel accesses too).
 	 */
-	
+
 	if ((ssw & DF)
 	    && (buserr_type & (SUN3_BUSERR_PROTERR | SUN3_BUSERR_INVALID))) {
 		if (mmu_emu_handle_fault (fp->un.fmtb.daddr, ssw & RW, 0))
@@ -659,7 +659,7 @@
 		printk ("protection fault on insn access (segv).\n");
 #endif
 		force_sig (SIGSEGV, current);
-       }	
+       }
 }
 #else
 #if defined(CPU_M68020_OR_M68030)
@@ -1035,7 +1035,7 @@
 			fp->ptregs.format);
 	else
 		printk ("*** Exception %d ***   FORMAT=%X\n",
-			(fp->ptregs.vector) >> 2, 
+			(fp->ptregs.vector) >> 2,
 			fp->ptregs.format);
 	if (fp->ptregs.vector >> 2 == VEC_ADDRERR && CPU_IS_020_OR_030) {
 		unsigned short ssw = fp->un.fmtb.ssw;
@@ -1187,6 +1187,7 @@
 
 	console_verbose();
 	printk("%s: %08x\n",str,nr);
+	print_modules();
 	printk("PC: [<%08lx>]",fp->pc);
 	print_symbol(" %s\n", fp->pc);
 	printk("\nSR: %04x  SP: %p  a2: %08lx\n",
diff -Nru a/arch/m68k/kernel/vmlinux-std.lds b/arch/m68k/kernel/vmlinux-std.lds
--- a/arch/m68k/kernel/vmlinux-std.lds	Sun May 16 01:18:36 2004
+++ b/arch/m68k/kernel/vmlinux-std.lds	Sun May 16 01:18:36 2004
@@ -41,7 +41,7 @@
   /* will be freed after init */
   . = ALIGN(4096);		/* Init code and data */
   __init_begin = .;
-  .init.text : { 
+  .init.text : {
 	_sinittext = .;
 	*(.init.text)
 	_einittext = .;
@@ -56,12 +56,12 @@
   __stop___param = .;
   __initcall_start = .;
   .initcall.init : {
-	*(.initcall1.init) 
-	*(.initcall2.init) 
-	*(.initcall3.init) 
-	*(.initcall4.init) 
-	*(.initcall5.init) 
-	*(.initcall6.init) 
+	*(.initcall1.init)
+	*(.initcall2.init)
+	*(.initcall3.init)
+	*(.initcall4.init)
+	*(.initcall5.init)
+	*(.initcall6.init)
 	*(.initcall7.init)
   }
   __initcall_end = .;
diff -Nru a/arch/m68k/kernel/vmlinux-sun3.lds b/arch/m68k/kernel/vmlinux-sun3.lds
--- a/arch/m68k/kernel/vmlinux-sun3.lds	Sun May 16 01:18:33 2004
+++ b/arch/m68k/kernel/vmlinux-sun3.lds	Sun May 16 01:18:33 2004
@@ -24,10 +24,10 @@
   .data : {			/* Data */
 	*(.data)
 	CONSTRUCTORS
-  	. = ALIGN(16);		/* Exception table */
-  	__start___ex_table = .;
-  	*(__ex_table) 
-  	__stop___ex_table = .;
+	. = ALIGN(16);		/* Exception table */
+	__start___ex_table = .;
+	*(__ex_table)
+	__stop___ex_table = .;
 	}
   /* End of data goes *here* so that freeing init code works properly. */
   _edata = .;
@@ -35,12 +35,12 @@
   /* will be freed after init */
   . = ALIGN(8192);	/* Init code and data */
 __init_begin = .;
-	.init.text : { 
+	.init.text : {
 		_sinittext = .;
 		*(.init.text)
 		_einittext = .;
 	}
-  	.init.data : { *(.init.data) }
+	.init.data : { *(.init.data) }
 	. = ALIGN(16);
 	__setup_start = .;
 	.init.setup : { *(.init.setup) }
@@ -50,12 +50,12 @@
 	__stop___param = .;
 	__initcall_start = .;
 	.initcall.init : {
-		*(.initcall1.init) 
-		*(.initcall2.init) 
-		*(.initcall3.init) 
-		*(.initcall4.init) 
-		*(.initcall5.init) 
-		*(.initcall6.init) 
+		*(.initcall1.init)
+		*(.initcall2.init)
+		*(.initcall3.init)
+		*(.initcall4.init)
+		*(.initcall5.init)
+		*(.initcall6.init)
 		*(.initcall7.init)
 	}
 	__initcall_end = .;
@@ -70,7 +70,7 @@
 	. = ALIGN(8192);
 	__init_end = .;
 	.init.task : { *(init_task) }
-	
+
 
   .bss : { *(.bss) }		/* BSS */
 
@@ -84,7 +84,7 @@
 	}
 
   .crap : {
-  	/* Stabs debugging sections.  */
+	/* Stabs debugging sections.  */
 	*(.stab)
 	*(.stabstr)
 	*(.stab.excl)
diff -Nru a/arch/m68k/lib/ashldi3.c b/arch/m68k/lib/ashldi3.c
--- a/arch/m68k/lib/ashldi3.c	Sun May 16 01:18:33 2004
+++ b/arch/m68k/lib/ashldi3.c	Sun May 16 01:18:33 2004
@@ -20,7 +20,7 @@
 
 #define BITS_PER_UNIT 8
 
-typedef 	 int SItype	__attribute__ ((mode (SI)));
+typedef		 int SItype	__attribute__ ((mode (SI)));
 typedef unsigned int USItype	__attribute__ ((mode (SI)));
 typedef		 int DItype	__attribute__ ((mode (DI)));
 typedef int word_type __attribute__ ((mode (__word__)));
diff -Nru a/arch/m68k/lib/ashrdi3.c b/arch/m68k/lib/ashrdi3.c
--- a/arch/m68k/lib/ashrdi3.c	Sun May 16 01:18:34 2004
+++ b/arch/m68k/lib/ashrdi3.c	Sun May 16 01:18:34 2004
@@ -20,7 +20,7 @@
 
 #define BITS_PER_UNIT 8
 
-typedef 	 int SItype	__attribute__ ((mode (SI)));
+typedef		 int SItype	__attribute__ ((mode (SI)));
 typedef unsigned int USItype	__attribute__ ((mode (SI)));
 typedef		 int DItype	__attribute__ ((mode (DI)));
 typedef int word_type __attribute__ ((mode (__word__)));
diff -Nru a/arch/m68k/lib/lshrdi3.c b/arch/m68k/lib/lshrdi3.c
--- a/arch/m68k/lib/lshrdi3.c	Sun May 16 01:18:36 2004
+++ b/arch/m68k/lib/lshrdi3.c	Sun May 16 01:18:36 2004
@@ -20,7 +20,7 @@
 
 #define BITS_PER_UNIT 8
 
-typedef 	 int SItype	__attribute__ ((mode (SI)));
+typedef		 int SItype	__attribute__ ((mode (SI)));
 typedef unsigned int USItype	__attribute__ ((mode (SI)));
 typedef		 int DItype	__attribute__ ((mode (DI)));
 typedef int word_type __attribute__ ((mode (__word__)));
diff -Nru a/arch/m68k/lib/muldi3.c b/arch/m68k/lib/muldi3.c
--- a/arch/m68k/lib/muldi3.c	Sun May 16 01:18:34 2004
+++ b/arch/m68k/lib/muldi3.c	Sun May 16 01:18:34 2004
@@ -1,4 +1,4 @@
-/* muldi3.c extracted from gcc-2.7.2.3/libgcc2.c and 
+/* muldi3.c extracted from gcc-2.7.2.3/libgcc2.c and
 			   gcc-2.7.2.3/longlong.h which is: */
 /* Copyright (C) 1989, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
 
@@ -33,7 +33,7 @@
     umul_ppmm (__w.s.high, __w.s.low, u, v);				\
     __w.ll; })
 
-typedef 	 int SItype	__attribute__ ((mode (SI)));
+typedef		 int SItype	__attribute__ ((mode (SI)));
 typedef unsigned int USItype	__attribute__ ((mode (SI)));
 typedef		 int DItype	__attribute__ ((mode (DI)));
 typedef int word_type __attribute__ ((mode (__word__)));
diff -Nru a/arch/m68k/mac/baboon.c b/arch/m68k/mac/baboon.c
--- a/arch/m68k/mac/baboon.c	Sun May 16 01:18:36 2004
+++ b/arch/m68k/mac/baboon.c	Sun May 16 01:18:36 2004
@@ -14,9 +14,9 @@
 #include <linux/ide.h>
 
 #include <asm/traps.h>
-#include <asm/bootinfo.h> 
-#include <asm/macintosh.h> 
-#include <asm/macints.h> 
+#include <asm/bootinfo.h>
+#include <asm/macintosh.h>
+#include <asm/macints.h>
 #include <asm/mac_baboon.h>
 
 /* #define DEBUG_BABOON */
diff -Nru a/arch/m68k/mac/bootparse.c b/arch/m68k/mac/bootparse.c
--- a/arch/m68k/mac/bootparse.c	Sun May 16 01:18:35 2004
+++ b/arch/m68k/mac/bootparse.c	Sun May 16 01:18:35 2004
@@ -9,114 +9,114 @@
 /*
  *	Booter vars
  */
- 
+
 int boothowto;
 int _boothowto;
- 
+
 /*
  *	Called early to parse the environment (passed to us from the booter)
  *	into a bootinfo struct. Will die as soon as we have our own booter
  */
 
 #define atol(x)	simple_strtoul(x,NULL,0)
- 
+
 void parse_booter(char *env)
 {
- 	char *name;
- 	char *value;
+	char *name;
+	char *value;
 #if 0
- 	while(0 && *env)
+	while(0 && *env)
 #else
- 	while(*env)
+	while(*env)
 #endif
- 	{
- 		name=env;
- 		value=name;
- 		while(*value!='='&&*value)
- 			value++;
- 		if(*value=='=')
- 			*value++=0;
- 		env=value;
- 		while(*env)
- 			env++;
- 		env++;
-#if 0 			
- 		if(strcmp(name,"VIDEO_ADDR")==0)
- 			mac_mch.videoaddr=atol(value);
- 		if(strcmp(name,"ROW_BYTES")==0)
- 			mac_mch.videorow=atol(value); 			
- 		if(strcmp(name,"SCREEN_DEPTH")==0)
- 			mac_mch.videodepth=atol(value);
- 		if(strcmp(name,"DIMENSIONS")==0)
- 			mac_mch.dimensions=atol(value);
-#endif 			
- 		if(strcmp(name,"BOOTTIME")==0)
- 			mac_bi_data.boottime=atol(value);
- 		if(strcmp(name,"GMTBIAS")==0)
- 			mac_bi_data.gmtbias=atol(value);
- 		if(strcmp(name,"BOOTERVER")==0)
- 			mac_bi_data.bootver=atol(value);
- 		if(strcmp(name,"MACOS_VIDEO")==0)
- 			mac_bi_data.videological=atol(value);
- 		if(strcmp(name,"MACOS_SCC")==0)
- 			mac_bi_data.sccbase=atol(value);
- 		if(strcmp(name,"MACHINEID")==0)
- 			mac_bi_data.id=atol(value);
- 		if(strcmp(name,"MEMSIZE")==0)
- 			mac_bi_data.memsize=atol(value);
- 		if(strcmp(name,"SERIAL_MODEM_FLAGS")==0)
- 			mac_bi_data.serialmf=atol(value);
- 		if(strcmp(name,"SERIAL_MODEM_HSKICLK")==0)
- 			mac_bi_data.serialhsk=atol(value);
- 		if(strcmp(name,"SERIAL_MODEM_GPICLK")==0)
- 			mac_bi_data.serialgpi=atol(value);
- 		if(strcmp(name,"SERIAL_PRINT_FLAGS")==0)
- 			mac_bi_data.printmf=atol(value);
- 		if(strcmp(name,"SERIAL_PRINT_HSKICLK")==0)
- 			mac_bi_data.printhsk=atol(value);
- 		if(strcmp(name,"SERIAL_PRINT_GPICLK")==0)
- 			mac_bi_data.printgpi=atol(value);
- 		if(strcmp(name,"PROCESSOR")==0)
- 			mac_bi_data.cpuid=atol(value);
- 		if(strcmp(name,"ROMBASE")==0)
- 			mac_bi_data.rombase=atol(value);
- 		if(strcmp(name,"TIMEDBRA")==0)
- 			mac_bi_data.timedbra=atol(value);
- 		if(strcmp(name,"ADBDELAY")==0)
- 			mac_bi_data.adbdelay=atol(value);
- 	}
+	{
+		name=env;
+		value=name;
+		while(*value!='='&&*value)
+			value++;
+		if(*value=='=')
+			*value++=0;
+		env=value;
+		while(*env)
+			env++;
+		env++;
+#if 0
+		if(strcmp(name,"VIDEO_ADDR")==0)
+			mac_mch.videoaddr=atol(value);
+		if(strcmp(name,"ROW_BYTES")==0)
+			mac_mch.videorow=atol(value);
+		if(strcmp(name,"SCREEN_DEPTH")==0)
+			mac_mch.videodepth=atol(value);
+		if(strcmp(name,"DIMENSIONS")==0)
+			mac_mch.dimensions=atol(value);
+#endif
+		if(strcmp(name,"BOOTTIME")==0)
+			mac_bi_data.boottime=atol(value);
+		if(strcmp(name,"GMTBIAS")==0)
+			mac_bi_data.gmtbias=atol(value);
+		if(strcmp(name,"BOOTERVER")==0)
+			mac_bi_data.bootver=atol(value);
+		if(strcmp(name,"MACOS_VIDEO")==0)
+			mac_bi_data.videological=atol(value);
+		if(strcmp(name,"MACOS_SCC")==0)
+			mac_bi_data.sccbase=atol(value);
+		if(strcmp(name,"MACHINEID")==0)
+			mac_bi_data.id=atol(value);
+		if(strcmp(name,"MEMSIZE")==0)
+			mac_bi_data.memsize=atol(value);
+		if(strcmp(name,"SERIAL_MODEM_FLAGS")==0)
+			mac_bi_data.serialmf=atol(value);
+		if(strcmp(name,"SERIAL_MODEM_HSKICLK")==0)
+			mac_bi_data.serialhsk=atol(value);
+		if(strcmp(name,"SERIAL_MODEM_GPICLK")==0)
+			mac_bi_data.serialgpi=atol(value);
+		if(strcmp(name,"SERIAL_PRINT_FLAGS")==0)
+			mac_bi_data.printmf=atol(value);
+		if(strcmp(name,"SERIAL_PRINT_HSKICLK")==0)
+			mac_bi_data.printhsk=atol(value);
+		if(strcmp(name,"SERIAL_PRINT_GPICLK")==0)
+			mac_bi_data.printgpi=atol(value);
+		if(strcmp(name,"PROCESSOR")==0)
+			mac_bi_data.cpuid=atol(value);
+		if(strcmp(name,"ROMBASE")==0)
+			mac_bi_data.rombase=atol(value);
+		if(strcmp(name,"TIMEDBRA")==0)
+			mac_bi_data.timedbra=atol(value);
+		if(strcmp(name,"ADBDELAY")==0)
+			mac_bi_data.adbdelay=atol(value);
+	}
 #if 0	/* XXX: TODO with m68k_mach_* */
- 	/* Fill in the base stuff */
- 	boot_info.machtype=MACH_MAC;
- 	/* Read this from the macinfo we got ! */
+	/* Fill in the base stuff */
+	boot_info.machtype=MACH_MAC;
+	/* Read this from the macinfo we got ! */
 /*	boot_info.cputype=CPU_68020|FPUB_68881;*/
-/* 	boot_info.memory[0].addr=0;*/
-/* 	boot_info.memory[0].size=((mac_bi_data.id>>7)&31)<<20;*/
- 	boot_info.num_memory=1;		/* On a MacII */
- 	boot_info.ramdisk_size=0;	/* For now */
- 	*boot_info.command_line=0;
+/*	boot_info.memory[0].addr=0;*/
+/*	boot_info.memory[0].size=((mac_bi_data.id>>7)&31)<<20;*/
+	boot_info.num_memory=1;		/* On a MacII */
+	boot_info.ramdisk_size=0;	/* For now */
+	*boot_info.command_line=0;
 #endif
  }
- 
+
 
 void print_booter(char *env)
 {
- 	char *name;
- 	char *value;
- 	while(*env)
- 	{
- 		name=env;
- 		value=name;
- 		while(*value!='='&&*value)
- 			value++;
- 		if(*value=='=')
- 			*value++=0;
- 		env=value;
- 		while(*env)
- 			env++;
- 		env++;
- 		printk("%s=%s\n", name,value);
- 	}
+	char *name;
+	char *value;
+	while(*env)
+	{
+		name=env;
+		value=name;
+		while(*value!='='&&*value)
+			value++;
+		if(*value=='=')
+			*value++=0;
+		env=value;
+		while(*env)
+			env++;
+		env++;
+		printk("%s=%s\n", name,value);
+	}
  }
- 
+
 
diff -Nru a/arch/m68k/mac/config.c b/arch/m68k/mac/config.c
--- a/arch/m68k/mac/config.c	Sun May 16 01:18:34 2004
+++ b/arch/m68k/mac/config.c	Sun May 16 01:18:34 2004
@@ -176,7 +176,7 @@
 
 /*
  * Flip into 24bit mode for an instant - flushes the L2 cache card. We
- * have to disable interrupts for this. Our IRQ handlers will crap 
+ * have to disable interrupts for this. Our IRQ handlers will crap
  * themselves if they take an IRQ in 24bit mode!
  */
 
@@ -232,10 +232,10 @@
 	/*
 	 * Determine hardware present
 	 */
-     
+
 	mac_identify();
 	mac_report_hardware();
-    
+
 	/* AFAIK only the IIci takes a cache card.  The IIfx has onboard
 	   cache ... someone needs to figure out how to tell if it's on or
 	   not. */
@@ -252,21 +252,21 @@
 #ifdef OLD_NUBUS_CODE
 	 nubus_sweep_video();
 #endif
-}	
+}
 
 
 /*
- *	Macintosh Table: hardcoded model configuration data. 
+ *	Macintosh Table: hardcoded model configuration data.
  *
- *	Much of this was defined by Alan, based on who knows what docs. 
- *	I've added a lot more, and some of that was pure guesswork based 
- *	on hardware pages present on the Mac web site. Possibly wildly 
+ *	Much of this was defined by Alan, based on who knows what docs.
+ *	I've added a lot more, and some of that was pure guesswork based
+ *	on hardware pages present on the Mac web site. Possibly wildly
  *	inaccurate, so look here if a new Mac model won't run. Example: if
  *	a Mac crashes immediately after the VIA1 registers have been dumped
- *	to the screen, it probably died attempting to read DirB on a RBV. 
+ *	to the screen, it probably died attempting to read DirB on a RBV.
  *	Meaning it should have MAC_VIA_IIci here :-)
  */
- 
+
 struct mac_model *macintosh_config;
 EXPORT_SYMBOL(macintosh_config);
 
@@ -288,9 +288,9 @@
 
 	/*
 	 *	Original MacII hardware
-	 *	
+	 *
 	 */
-	 
+
 	{
 		.ident		= MAC_MODEL_II,
 		.name		= "II",
@@ -324,7 +324,7 @@
 		.scc_type	= MAC_SCC_II,
 		.nubus_type	= MAC_NUBUS
 	},
-	
+
 	/*
 	 *	Weirdified MacII hardware - all subtley different. Gee thanks
 	 *	Apple. All these boxes seem to have VIA2 in a different place to
@@ -373,7 +373,7 @@
 		.scc_type	= MAC_SCC_II,
 		.nubus_type	= MAC_NUBUS
 	},
-	
+
 	/*
 	 *	Classic models (guessing: similar to SE/30 ?? Nope, similar to LC ...)
 	 */
@@ -398,7 +398,7 @@
 	/*
 	 *	Some Mac LC machines. Basically the same as the IIci, ADB like IIsi
 	 */
-	
+
 	{
 		.ident		= MAC_MODEL_LC,
 		.name		= "LC",
@@ -426,15 +426,15 @@
 	},
 
 	/*
-	 *	Quadra. Video is at 0xF9000000, via is like a MacII. We label it differently 
-	 *	as some of the stuff connected to VIA2 seems different. Better SCSI chip and 
-	 *	onboard ethernet using a NatSemi SONIC except the 660AV and 840AV which use an 
+	 *	Quadra. Video is at 0xF9000000, via is like a MacII. We label it differently
+	 *	as some of the stuff connected to VIA2 seems different. Better SCSI chip and
+	 *	onboard ethernet using a NatSemi SONIC except the 660AV and 840AV which use an
 	 *	AMD 79C940 (MACE).
 	 *	The 700, 900 and 950 have some I/O chips in the wrong place to
 	 *	confuse us. The 840AV has a SCSI location of its own (same as
 	 *	the 660AV).
-	 */	 
-	 
+	 */
+
 	{
 		.ident		= MAC_MODEL_Q605,
 		.name		= "Quadra 605",
@@ -528,7 +528,7 @@
 		.nubus_type	= MAC_NUBUS
 	},
 
-	/* 
+	/*
 	 *	Performa - more LC type machines
 	 */
 
@@ -816,7 +816,7 @@
 {
 	struct mac_model *m;
 
-	/* Penguin data useful? */	
+	/* Penguin data useful? */
 	int model = mac_bi_data.id;
 	if (!model) {
 		/* no bootinfo model id -> NetBSD booter was used! */
@@ -825,7 +825,7 @@
 		printk (KERN_WARNING "No bootinfo model ID, using cpuid instead (hey, use Penguin!)\n");
 	}
 
-	macintosh_config = mac_data_table; 
+	macintosh_config = mac_data_table;
 	for (m = macintosh_config ; m->ident != -1 ; m++) {
 		if (m->ident == model) {
 			macintosh_config = m;
@@ -846,19 +846,19 @@
 	 * Report booter data:
 	 */
 	printk (KERN_DEBUG " Penguin bootinfo data:\n");
-	printk (KERN_DEBUG " Video: addr 0x%lx row 0x%lx depth %lx dimensions %ld x %ld\n", 
-		mac_bi_data.videoaddr, mac_bi_data.videorow, 
-		mac_bi_data.videodepth, mac_bi_data.dimensions & 0xFFFF, 
-		mac_bi_data.dimensions >> 16); 
+	printk (KERN_DEBUG " Video: addr 0x%lx row 0x%lx depth %lx dimensions %ld x %ld\n",
+		mac_bi_data.videoaddr, mac_bi_data.videorow,
+		mac_bi_data.videodepth, mac_bi_data.dimensions & 0xFFFF,
+		mac_bi_data.dimensions >> 16);
 	printk (KERN_DEBUG " Videological 0x%lx phys. 0x%lx, SCC at 0x%lx \n",
-		mac_bi_data.videological, mac_orig_videoaddr, 
-		mac_bi_data.sccbase); 
+		mac_bi_data.videological, mac_orig_videoaddr,
+		mac_bi_data.sccbase);
 	printk (KERN_DEBUG " Boottime: 0x%lx GMTBias: 0x%lx \n",
-		mac_bi_data.boottime, mac_bi_data.gmtbias); 
+		mac_bi_data.boottime, mac_bi_data.gmtbias);
 	printk (KERN_DEBUG " Machine ID: %ld CPUid: 0x%lx memory size: 0x%lx \n",
-		mac_bi_data.id, mac_bi_data.cpuid, mac_bi_data.memsize); 
+		mac_bi_data.id, mac_bi_data.cpuid, mac_bi_data.memsize);
 #if 0
-	printk ("Ramdisk: addr 0x%lx size 0x%lx\n", 
+	printk ("Ramdisk: addr 0x%lx size 0x%lx\n",
 		m68k_ramdisk.addr, m68k_ramdisk.size);
 #endif
 
diff -Nru a/arch/m68k/mac/debug.c b/arch/m68k/mac/debug.c
--- a/arch/m68k/mac/debug.c	Sun May 16 01:18:36 2004
+++ b/arch/m68k/mac/debug.c	Sun May 16 01:18:36 2004
@@ -8,7 +8,7 @@
  * Atari debugging and serial console stuff
  *
  * Assembled of parts of former atari/config.c 97-12-18 by Roman Hodek
- *  
+ *
  * This file is subject to the terms and conditions of the GNU General Public
  * License.  See the file COPYING in the main directory of this archive
  * for more details.
@@ -43,7 +43,7 @@
 #define DEBUG_SERIAL
 
 /*
- * These two auxiliary debug functions should go away ASAP. Only usage: 
+ * These two auxiliary debug functions should go away ASAP. Only usage:
  * before the console output is up (after head.S come some other crucial
  * setup routines :-) it permits writing 'data' to the screen as bit patterns
  * (good luck reading those). Helped to figure that the bootinfo contained
@@ -77,9 +77,9 @@
 	/* calculate current offset */
 	pengoffset=(unsigned char *)(mac_videobase+(150+line*2)*mac_rowbytes)
 		    +80*peng;
-	
+
 	pptr=pengoffset;
-	
+
 	for(i=0;i<8*sizeof(short);i++) /* # of bits */
 	{
 		/*        value        mask for bit i, reverse order */
@@ -112,12 +112,12 @@
 		/* printk("debug: #%ld !\n", addr); */
 		return;
 	}
-	
+
 	pengoffset=(unsigned char *)(mac_videobase+(150+line*2)*mac_rowbytes)
 		    +80*peng;
-	
+
 	pptr=pengoffset;
-	
+
 	for(i=0;i<8*sizeof(long);i++) /* # of bits */
 	{
 		*pptr++ = (addr & ( 1 << (8*sizeof(long)-i-1) ) ? 0xFF : 0x00);
@@ -270,7 +270,7 @@
 	for( i = 60*uSEC; i > 0; --i )		\
 	    barrier();				\
     } while(0)
-    
+
 #ifndef CONFIG_SERIAL_CONSOLE
 static void __init mac_init_scc_port( int cflag, int port )
 #else
@@ -285,17 +285,17 @@
 
 	static int clksrc_table[9] =
 		/* reg 11: 0x50 = BRG, 0x00 = RTxC, 0x28 = TRxC */
-    		{ 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x00, 0x00 };
+		{ 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x00, 0x00 };
 	static int clkmode_table[9] =
 		/* reg 4: 0x40 = x16, 0x80 = x32, 0xc0 = x64 */
-    		{ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x80 };
+		{ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x80 };
 	static int div_table[9] =
 		/* reg12 (BRG low) */
-    		{ 94, 62, 46, 22, 10, 4, 1, 0, 0 };
+		{ 94, 62, 46, 22, 10, 4, 1, 0, 0 };
 
     int baud = cflag & CBAUD;
     int clksrc, clkmode, div, reg3, reg5;
-    
+
     if (cflag & CBAUDEX)
 	baud += B38400;
     if (baud < B1200 || baud > B38400+2)
diff -Nru a/arch/m68k/mac/iop.c b/arch/m68k/mac/iop.c
--- a/arch/m68k/mac/iop.c	Sun May 16 01:18:36 2004
+++ b/arch/m68k/mac/iop.c	Sun May 16 01:18:36 2004
@@ -113,9 +113,9 @@
 #include <linux/proc_fs.h>
 #include <linux/interrupt.h>
 
-#include <asm/bootinfo.h> 
-#include <asm/macintosh.h> 
-#include <asm/macints.h> 
+#include <asm/bootinfo.h>
+#include <asm/macintosh.h>
+#include <asm/macints.h>
 #include <asm/mac_iop.h>
 #include <asm/mac_oss.h>
 
@@ -485,7 +485,7 @@
 
 /*
  * Send a message
- * 
+ *
  * The message is placed at the end of the send queue. Afterwards if the
  * channel is idle we force an immediate send of the next message in the
  * queue.
@@ -537,7 +537,7 @@
 	if ((iop_num >= NUM_IOPS) || !iop_base[iop_num]) return;
 
 	iop_loadaddr(iop_base[iop_num], shared_ram_start);
-	
+
 	while (code_len--) {
 		iop_base[iop_num]->ram_data = *code_start++;
 	}
@@ -553,7 +553,7 @@
 	if ((iop_num >= NUM_IOPS) || !iop_base[iop_num]) return;
 
 	iop_loadaddr(iop_base[iop_num], shared_ram_start);
-	
+
 	while (code_len--) {
 		*code_start++ = iop_base[iop_num]->ram_data;
 	}
@@ -571,7 +571,7 @@
 	if ((iop_num >= NUM_IOPS) || !iop_base[iop_num]) return code_start;
 
 	iop_loadaddr(iop_base[iop_num], shared_ram_start);
-	
+
 	while (code_len--) {
 		if (*code_start != iop_base[iop_num]->ram_data) {
 			return code_start;
@@ -666,12 +666,12 @@
 			iop_chan_state(iop_readb(iop, IOP_ADDR_RECV_STATE+i)),
 			iop_listeners[iop_num][i].handler?
 				      iop_listeners[iop_num][i].devname : "");
-			
+
 	}
 	len += sprintf(buf+len, "\n");
 	return len;
 }
- 
+
 static int iop_get_proc_info(char *buf, char **start, off_t pos, int count)
 {
 	int len, cnt;
diff -Nru a/arch/m68k/mac/macboing.c b/arch/m68k/mac/macboing.c
--- a/arch/m68k/mac/macboing.c	Sun May 16 01:18:36 2004
+++ b/arch/m68k/mac/macboing.c	Sun May 16 01:18:36 2004
@@ -1,7 +1,7 @@
 /*
  *	Mac bong noise generator. Note - we ought to put a boingy noise
  *	here 8)
- *	 
+ *
  *	----------------------------------------------------------------------
  *	16.11.98:
  *	rewrote some functions, added support for Enhanced ASC (Quadras)
@@ -22,8 +22,8 @@
 static __u8 mac_asc_wave_tab[ 0x800 ];
 
 /*
- * Alan's original sine table; needs interpolating to 0x800 
- * (hint: interpolate or hardwire [0 -> Pi/2[, it's symmetric) 
+ * Alan's original sine table; needs interpolating to 0x800
+ * (hint: interpolate or hardwire [0 -> Pi/2[, it's symmetric)
  */
 static const signed char sine_data[] = {
 	0,  39,  75,  103,  121,  127,  121,  103,  75,  39,
@@ -35,16 +35,16 @@
  */
 static volatile __u8* mac_asc_regs = ( void* )0x50F14000;
 
-/* 
- * sample rate; is this a good default value? 
+/*
+ * sample rate; is this a good default value?
  */
-static unsigned long mac_asc_samplespersec = 11050;  
+static unsigned long mac_asc_samplespersec = 11050;
 static int mac_bell_duration;
 static unsigned long mac_bell_phase; /* 0..2*Pi -> 0..0x800 (wavetable size) */
 static unsigned long mac_bell_phasepersample;
 
 /*
- * some function protos 
+ * some function protos
  */
 static void mac_init_asc( void );
 static void mac_nosound( unsigned long );
@@ -67,11 +67,11 @@
 {
 	int i;
 
-	/* 
-	 * do some machine specific initialization 
+	/*
+	 * do some machine specific initialization
 	 * BTW:
 	 * the NetBSD Quadra patch identifies the Enhanced Apple Sound Chip via
-	 * 	mac_asc_regs[ 0x800 ] & 0xF0 != 0
+	 *	mac_asc_regs[ 0x800 ] & 0xF0 != 0
 	 * this makes no sense here, because we have to set the default sample
 	 * rate anyway if we want correct frequencies
 	 */
@@ -83,27 +83,27 @@
 			 */
 			mac_asc_regs = ( void* )0x50010000;
 			break;
-			/* 
-			 * not sure about how correct this list is 
-			 * machines with the EASC enhanced apple sound chip 
+			/*
+			 * not sure about how correct this list is
+			 * machines with the EASC enhanced apple sound chip
 			 */
 		case MAC_MODEL_Q630:
 		case MAC_MODEL_P475:
 			mac_special_bell = mac_quadra_start_bell;
 			mac_asc_samplespersec = 22150;
-			break;	
+			break;
 		case MAC_MODEL_C660:
 		case MAC_MODEL_Q840:
 			/*
 			 * The Quadra 660AV and 840AV use the "Singer" custom ASIC for sound I/O.
-			 * It appears to be similar to the "AWACS" custom ASIC in the Power Mac 
-			 * [678]100.  Because Singer and AWACS may have a similar hardware 
-			 * interface, this would imply that the code in drivers/sound/dmasound.c 
+			 * It appears to be similar to the "AWACS" custom ASIC in the Power Mac
+			 * [678]100.  Because Singer and AWACS may have a similar hardware
+			 * interface, this would imply that the code in drivers/sound/dmasound.c
 			 * for AWACS could be used as a basis for Singer support.  All we have to
-			 * do is figure out how to do DMA on the 660AV/840AV through the PSC and 
+			 * do is figure out how to do DMA on the 660AV/840AV through the PSC and
 			 * figure out where the Singer hardware sits in memory. (I'd look in the
-			 * vicinity of the AWACS location in a Power Mac [678]100 first, or the 
-			 * current location of the Apple Sound Chip--ASC--in other Macs.)  The 
+			 * vicinity of the AWACS location in a Power Mac [678]100 first, or the
+			 * current location of the Apple Sound Chip--ASC--in other Macs.)  The
 			 * Power Mac [678]100 info can be found in MkLinux Mach kernel sources.
 			 *
 			 * Quoted from Apple's Tech Info Library, article number 16405:
@@ -111,7 +111,7 @@
 			 *   Macintosh models have 16-bit audio input and output capability
 			 *   because of the AT&T DSP3210 hardware circuitry and the 16-bit Singer
 			 *   codec circuitry in the AVs.  The Audio Waveform Amplifier and
-			 *   Converter (AWAC) chip in the Power Macintosh performs the same 
+			 *   Converter (AWAC) chip in the Power Macintosh performs the same
 			 *   16-bit I/O functionality.  The PowerBook 500 series computers
 			 *   support 16-bit stereo output, but only mono input."
 			 *
@@ -139,8 +139,8 @@
 			break;
 	}
 
-	/* 
-	 * init the wave table with a simple triangular wave 
+	/*
+	 * init the wave table with a simple triangular wave
 	 * A sine wave would sure be nicer here ...
 	 */
 	for ( i = 0; i < 0x400; i++ )
@@ -149,15 +149,15 @@
 		mac_asc_wave_tab[ i + 0x400 ] = 0xFF - i / 4;
 	}
 	mac_asc_inited = 1;
-}	
+}
 
 /*
- * Called to make noise; current single entry to the boing driver. 
+ * Called to make noise; current single entry to the boing driver.
  * Does the job for simple ASC, calls other routines else.
  * XXX Fixme:
- * Should be split into asc_mksound, easc_mksound, av_mksound and 
- * function pointer set in mac_init_asc which would be called at 
- * init time. 
+ * Should be split into asc_mksound, easc_mksound, av_mksound and
+ * function pointer set in mac_init_asc which would be called at
+ * init time.
  * _This_ is rather ugly ...
  */
 void mac_mksound( unsigned int freq, unsigned int length )
@@ -192,7 +192,7 @@
 	del_timer( &mac_sound_timer );
 
 	for ( i = 0; i < 0x800; i++ )
-		mac_asc_regs[ i ] = 0;	
+		mac_asc_regs[ i ] = 0;
 	for ( i = 0; i < 0x800; i++ )
 		mac_asc_regs[ i ] = mac_asc_wave_tab[ i ];
 
@@ -218,7 +218,7 @@
 static void mac_nosound( unsigned long ignored )
 {
 	mac_asc_regs[ ASC_ENABLE ] = 0;
-}	
+}
 
 /*
  * EASC entry; init EASC, don't load wavetable, schedule 'start whining'.
@@ -237,7 +237,7 @@
 	mac_bell_duration = length;
 	mac_bell_phase = 0;
 	mac_bell_phasepersample = ( freq * sizeof( mac_asc_wave_tab ) ) / mac_asc_samplespersec;
-	/* this is reasonably big for small frequencies */ 
+	/* this is reasonably big for small frequencies */
 
 	local_irq_save(flags);
 
@@ -247,11 +247,11 @@
 	/* set up the ASC registers */
 	if ( mac_asc_regs[ 0x801 ] != 1 )
 	{
-		/* select mono mode */	
+		/* select mono mode */
 		mac_asc_regs[ 0x807 ] = 0;
 		/* select sampled sound mode */
 		mac_asc_regs[ 0x802 ] = 0;
-	 	/* ??? */	
+		/* ??? */
 		mac_asc_regs[ 0x801 ] = 1;
 		mac_asc_regs[ 0x803 ] |= 0x80;
 		mac_asc_regs[ 0x803 ] &= 0x7F;
@@ -266,12 +266,12 @@
 
 /*
  * EASC 'start/continue whining'; I'm not sure why the above function didn't
- * already load the wave table, or at least call this one... 
+ * already load the wave table, or at least call this one...
  * This piece keeps reloading the wave table until done.
  */
 static void mac_quadra_ring_bell( unsigned long ignored )
 {
-	int 	i, count = mac_asc_samplespersec / HZ;
+	int	i, count = mac_asc_samplespersec / HZ;
 	__u32 flags;
 
 	/*
@@ -282,7 +282,7 @@
 	 */
 
 	local_irq_save(flags);
-	
+
 	del_timer( &mac_sound_timer );
 
 	if ( mac_bell_duration-- > 0 )
@@ -297,7 +297,7 @@
 	}
 	else
 		mac_asc_regs[ 0x801 ] = 0;
-	
+
 	local_irq_restore(flags);
 }
 
@@ -306,4 +306,4 @@
  */
 static void mac_av_start_bell( unsigned int freq, unsigned int length, unsigned int volume )
 {
-} 
+}
diff -Nru a/arch/m68k/mac/macints.c b/arch/m68k/mac/macints.c
--- a/arch/m68k/mac/macints.c	Sun May 16 01:18:36 2004
+++ b/arch/m68k/mac/macints.c	Sun May 16 01:18:36 2004
@@ -2,8 +2,8 @@
  *	Macintosh interrupts
  *
  * General design:
- * In contrary to the Amiga and Atari platforms, the Mac hardware seems to 
- * exclusively use the autovector interrupts (the 'generic level0-level7' 
+ * In contrary to the Amiga and Atari platforms, the Mac hardware seems to
+ * exclusively use the autovector interrupts (the 'generic level0-level7'
  * interrupts with exception vectors 0x19-0x1f). The following interrupt levels
  * are used:
  *	1	- VIA1
@@ -248,7 +248,7 @@
 	printk("Done.\n");
 #endif /* SHUTUP_SONIC */
 
-	/* 
+	/*
 	 * Now register the handlers for the master IRQ handlers
 	 * at levels 1-7. Most of the work is done elsewhere.
 	 */
@@ -496,7 +496,7 @@
  * FIXME: You can register interrupts on nonexistent source (ie PSC4 on a
  *        non-PSC machine). We should return -EINVAL in those cases.
  */
- 
+
 int mac_request_irq(unsigned int irq,
 		    irqreturn_t (*handler)(int, void *, struct pt_regs *),
 		    unsigned long flags, const char *devname, void *dev_id)
@@ -533,7 +533,7 @@
 
 	return 0;
 }
-                            
+
 /*
  * Removes an interrupt service routine from an interrupt source.
  */
@@ -661,7 +661,7 @@
 irqreturn_t mac_nmi_handler(int irq, void *dev_id, struct pt_regs *fp)
 {
 	int i;
-	/* 
+	/*
 	 * generate debug output on NMI switch if 'debug' kernel option given
 	 * (only works with Penguin!)
 	 */
@@ -691,7 +691,7 @@
 		       fp->d0, fp->d1, fp->d2, fp->d3);
 		printk("d4: %08lx    d5: %08lx    a0: %08lx    a1: %08lx\n",
 		       fp->d4, fp->d5, fp->a0, fp->a1);
-	
+
 		if (STACK_MAGIC != *(unsigned long *)current->kernel_stack_page)
 			printk("Corrupted stack page\n");
 		printk("Process %s (pid: %d, stackpage=%08lx)\n",
diff -Nru a/arch/m68k/mac/misc.c b/arch/m68k/mac/misc.c
--- a/arch/m68k/mac/misc.c	Sun May 16 01:18:35 2004
+++ b/arch/m68k/mac/misc.c	Sun May 16 01:18:35 2004
@@ -1,5 +1,5 @@
 /*
- * Miscellaneous Mac68K-specific stuff 
+ * Miscellaneous Mac68K-specific stuff
  */
 
 #include <linux/config.h>
@@ -67,7 +67,7 @@
 	volatile struct adb_request req;
 
 	data += RTC_OFFSET;
-	
+
 	adb_request((struct adb_request *) &req, NULL,
 			ADBREQ_RAW|ADBREQ_SYNC,
 			6, CUDA_PACKET, CUDA_SET_TIME,
@@ -324,7 +324,7 @@
 	adb_request(NULL, NULL, ADBREQ_RAW|ADBREQ_SYNC,
 			3, PMU_PACKET, PMU_SET_INTR_MASK,
 			PMU_INT_ADB|PMU_INT_TICK);
-	
+
 	adb_request(NULL, NULL, ADBREQ_RAW|ADBREQ_SYNC,
 			2, PMU_PACKET, PMU_RESET);
 }
@@ -477,7 +477,7 @@
                     ".chip 68030\n\t"
 		    "lea %/pc@(1f),%/a0\n\t"
 		    "addl %0,%/a0\n\t"/* fixup target address and stack ptr */
-		    "addl %0,%/sp\n\t" 
+		    "addl %0,%/sp\n\t"
 		    "pflusha\n\t"
 		    "jmp %/a0@\n\t" /* jump into physical memory */
 		    "0:.long 0\n\t" /* a constant zero. */
@@ -494,7 +494,7 @@
 		    "movec %/a0, %/cacr\n\t" /* flush i&d caches */
 		    "movew #0x2700,%/sr\n\t" /* set up status register */
 		    "movel %1@(0x0),%/a0\n\t"/* load interrupt stack pointer */
-		    "movec %/a0, %/isp\n\t" 
+		    "movec %/a0, %/isp\n\t"
 		    "movel %1@(0x4),%/a0\n\t" /* load reset vector */
 		    "reset\n\t" /* reset external devices */
 		    "jmp %/a0@\n\t" /* jump to the reset vector */
@@ -579,7 +579,7 @@
 	return;
 }
 
-/* 
+/*
  * Read/write the hardware clock.
  */
 
diff -Nru a/arch/m68k/mac/oss.c b/arch/m68k/mac/oss.c
--- a/arch/m68k/mac/oss.c	Sun May 16 01:18:35 2004
+++ b/arch/m68k/mac/oss.c	Sun May 16 01:18:35 2004
@@ -20,9 +20,9 @@
 #include <linux/delay.h>
 #include <linux/init.h>
 
-#include <asm/bootinfo.h> 
-#include <asm/machw.h> 
-#include <asm/macintosh.h> 
+#include <asm/bootinfo.h>
+#include <asm/machw.h>
+#include <asm/macintosh.h>
 #include <asm/macints.h>
 #include <asm/mac_via.h>
 #include <asm/mac_oss.h>
@@ -91,7 +91,7 @@
  * Handle miscellaneous OSS interrupts. Right now that's just sound
  * and SCSI; everything else is routed to its own autovector IRQ.
  */
- 
+
 irqreturn_t oss_irq(int irq, void *dev_id, struct pt_regs *regs)
 {
 	int events;
@@ -100,7 +100,7 @@
 	if (!events)
 		return IRQ_NONE;
 
-#ifdef DEBUG_IRQS	
+#ifdef DEBUG_IRQS
 	if ((console_loglevel == 10) && !(events & OSS_IP_SCSI)) {
 		printk("oss_irq: irq %d events = 0x%04X\n", irq,
 			(int) oss->irq_pending);
diff -Nru a/arch/m68k/mac/psc.c b/arch/m68k/mac/psc.c
--- a/arch/m68k/mac/psc.c	Sun May 16 01:18:35 2004
+++ b/arch/m68k/mac/psc.c	Sun May 16 01:18:35 2004
@@ -20,9 +20,9 @@
 #include <linux/init.h>
 
 #include <asm/traps.h>
-#include <asm/bootinfo.h> 
-#include <asm/macintosh.h> 
-#include <asm/macints.h> 
+#include <asm/bootinfo.h>
+#include <asm/macintosh.h>
+#include <asm/macints.h>
 #include <asm/mac_psc.h>
 
 #define DEBUG_PSC
diff -Nru a/arch/m68k/mac/via.c b/arch/m68k/mac/via.c
--- a/arch/m68k/mac/via.c	Sun May 16 01:18:34 2004
+++ b/arch/m68k/mac/via.c	Sun May 16 01:18:34 2004
@@ -26,10 +26,10 @@
 #include <linux/ide.h>
 
 #include <asm/traps.h>
-#include <asm/bootinfo.h> 
-#include <asm/macintosh.h> 
+#include <asm/bootinfo.h>
+#include <asm/macintosh.h>
 #include <asm/macints.h>
-#include <asm/machw.h> 
+#include <asm/machw.h>
 #include <asm/mac_via.h>
 #include <asm/mac_psc.h>
 
@@ -93,7 +93,7 @@
 
 		/* IIci, IIsi, IIvx, IIvi (P6xx), LC series */
 
-		case MAC_VIA_IIci:	
+		case MAC_VIA_IIci:
 			via1 = (void *) VIA1_BASE;
 			if (macintosh_config->ident == MAC_MODEL_IIFX) {
 				via2 = NULL;
@@ -166,7 +166,7 @@
 	via1[vT2CH] = 0;
 	via1[vACR] &= 0x3F;
 
-	/* 
+	/*
 	 * SE/30: disable video IRQ
 	 * XXX: testing for SE/30 VBL
 	 */
@@ -174,8 +174,8 @@
 	if (macintosh_config->ident == MAC_MODEL_SE30) {
 		via1[vDirB] |= 0x40;
 		via1[vBufB] |= 0x40;
-	} 
-	
+	}
+
 	/*
 	 * Set the RTC bits to a known state: all lines to outputs and
 	 * RTC disabled (yes that's 0 to enable and 1 to disable).
@@ -243,7 +243,7 @@
  */
 
 void __init via_init_clock(irqreturn_t (*func)(int, void *, struct pt_regs *))
-{	
+{
 	via1[vACR] |= 0x40;
 	via1[vT1LL] = MAC_CLOCK_LOW;
 	via1[vT1LH] = MAC_CLOCK_HIGH;
@@ -537,7 +537,7 @@
 			/* But not on PowerBooks, that's ADB... */
 			if ((macintosh_config->adb_type != MAC_ADB_PB1) &&
 			   (macintosh_config->adb_type != MAC_ADB_PB2)) {
-			   	switch(macintosh_config->ident)
+				switch(macintosh_config->ident)
 				{
 					case MAC_MODEL_II:
 					case MAC_MODEL_IIX:
diff -Nru a/arch/m68k/math-emu/fp_arith.c b/arch/m68k/math-emu/fp_arith.c
--- a/arch/m68k/math-emu/fp_arith.c	Sun May 16 01:18:34 2004
+++ b/arch/m68k/math-emu/fp_arith.c	Sun May 16 01:18:34 2004
@@ -458,7 +458,7 @@
 		return;
 
 	/* infinities and zeroes */
-	if (IS_INF(dest) || IS_ZERO(dest)) 
+	if (IS_INF(dest) || IS_ZERO(dest))
 		return;
 
 	/* first truncate the lower bits */
diff -Nru a/arch/m68k/math-emu/fp_cond.S b/arch/m68k/math-emu/fp_cond.S
--- a/arch/m68k/math-emu/fp_cond.S	Sun May 16 01:18:36 2004
+++ b/arch/m68k/math-emu/fp_cond.S	Sun May 16 01:18:36 2004
@@ -105,10 +105,10 @@
 	| decode addressing mode
 	fp_decode_addr_mode
 
-	.long 	fp_data, fp_fdbcc
-	.long 	fp_indirect, fp_postinc
-	.long 	fp_predecr, fp_disp16
-	.long 	fp_extmode0, fp_extmode1
+	.long	fp_data, fp_fdbcc
+	.long	fp_indirect, fp_postinc
+	.long	fp_predecr, fp_disp16
+	.long	fp_extmode0, fp_extmode1
 
 	| addressing mode: data register direct
 fp_data:
diff -Nru a/arch/m68k/math-emu/fp_log.c b/arch/m68k/math-emu/fp_log.c
--- a/arch/m68k/math-emu/fp_log.c	Sun May 16 01:18:37 2004
+++ b/arch/m68k/math-emu/fp_log.c	Sun May 16 01:18:37 2004
@@ -48,7 +48,7 @@
 
 	/*
 	 *		 sqrt(m) * 2^(p)	, if e = 2*p
-	 * sqrt(m*2^e) = 
+	 * sqrt(m*2^e) =
 	 *		 sqrt(2*m) * 2^(p)	, if e = 2*p + 1
 	 *
 	 * So we use the last bit of the exponent to decide wether to
@@ -80,7 +80,7 @@
 	 * which has a null point on x = sqrt(r).
 	 *
 	 * It gives:
-	 * 	x' := x - f(x)/f'(x)
+	 *	x' := x - f(x)/f'(x)
 	 *	    = x - (x^2 -r)/(2*x)
 	 *	    = x - (x - r/x)/2
 	 *          = (2*x - x + r/x)/2
diff -Nru a/arch/m68k/math-emu/fp_scan.S b/arch/m68k/math-emu/fp_scan.S
--- a/arch/m68k/math-emu/fp_scan.S	Sun May 16 01:18:35 2004
+++ b/arch/m68k/math-emu/fp_scan.S	Sun May 16 01:18:35 2004
@@ -133,10 +133,10 @@
 	| decode addressing mode for source
 	fp_decode_addr_mode
 
-	.long 	fp_data, fp_ill
-	.long 	fp_indirect, fp_postinc
-	.long 	fp_predecr, fp_disp16
-	.long 	fp_extmode0, fp_extmode1
+	.long	fp_data, fp_ill
+	.long	fp_indirect, fp_postinc
+	.long	fp_predecr, fp_disp16
+	.long	fp_extmode0, fp_extmode1
 
 	| addressing mode: data register direct
 fp_data:
diff -Nru a/arch/m68k/math-emu/fp_util.S b/arch/m68k/math-emu/fp_util.S
--- a/arch/m68k/math-emu/fp_util.S	Sun May 16 01:18:36 2004
+++ b/arch/m68k/math-emu/fp_util.S	Sun May 16 01:18:36 2004
@@ -1337,7 +1337,7 @@
 	jra	fp_finaltest
 
 fp_finalrounding_single_fast:
-	addq.l	#8,%sp 
+	addq.l	#8,%sp
 	jsr	fp_normalize_ext
 	jsr	fp_normalize_single_fast
 	jra	fp_finaltest
diff -Nru a/arch/m68k/mm/fault.c b/arch/m68k/mm/fault.c
--- a/arch/m68k/mm/fault.c	Sun May 16 01:18:35 2004
+++ b/arch/m68k/mm/fault.c	Sun May 16 01:18:35 2004
@@ -157,7 +157,7 @@
  survive:
 	fault = handle_mm_fault(mm, vma, address, write);
 #ifdef DEBUG
- 	printk("handle_mm_fault returns %d\n",fault);
+	printk("handle_mm_fault returns %d\n",fault);
 #endif
 	switch (fault) {
 	case 1:
@@ -186,7 +186,7 @@
 		down_read(&mm->mmap_sem);
 		goto survive;
 	}
-	
+
 	printk("VM: killing process %s\n", current->comm);
 	if (user_mode(regs))
 		do_exit(SIGKILL);
diff -Nru a/arch/m68k/mm/hwtest.c b/arch/m68k/mm/hwtest.c
--- a/arch/m68k/mm/hwtest.c	Sun May 16 01:18:36 2004
+++ b/arch/m68k/mm/hwtest.c	Sun May 16 01:18:36 2004
@@ -3,9 +3,9 @@
  * that it was also in drivers/nubus/nubus.c and I wanted to
  * use it in hp300/config.c, so it seemed sensible to pull it
  * out into its own file.
- * 
+ *
  * The test is for use when trying to read a hardware register
- * that isn't present would cause a bus error. We set up a 
+ * that isn't present would cause a bus error. We set up a
  * temporary handler so that this doesn't kill the kernel.
  *
  * There is a test-by-reading and a test-by-writing; I present
@@ -37,7 +37,7 @@
                 "movec	%4,%/vbr\n\t"
 		"movel	%/sp,%1\n\t"
 		"moveq	#0,%0\n\t"
-		"tstb	%3@\n\t"  
+		"tstb	%3@\n\t"
 		"nop\n\t"
 		"moveq	#1,%0\n"
                 "Lberr1:\n\t"
@@ -50,7 +50,7 @@
     return( ret );
 }
 EXPORT_SYMBOL(hwreg_present);
-  
+
 /* Basically the same, but writes a value into a word register, protected
  * by a bus error handler. Returns 1 if successful, 0 otherwise.
  */
@@ -67,7 +67,7 @@
 		"movec	%4,%/vbr\n\t"
 		"movel	%/sp,%1\n\t"
 		"moveq	#0,%0\n\t"
-		"movew	%5,%3@\n\t"  
+		"movew	%5,%3@\n\t"
 		"nop	\n\t"	/* If this nop isn't present, 'ret' may already be
 				 * loaded with 1 at the time the bus error
 				 * happens! */
diff -Nru a/arch/m68k/mm/init.c b/arch/m68k/mm/init.c
--- a/arch/m68k/mm/init.c	Sun May 16 01:18:36 2004
+++ b/arch/m68k/mm/init.c	Sun May 16 01:18:36 2004
@@ -109,7 +109,7 @@
 			continue;
 		}
 	}
-	
+
 #ifndef CONFIG_SUN3
 	/* insert pointer tables allocated so far into the tablelist */
 	init_pointer_table((unsigned long)kernel_pg_dir);
diff -Nru a/arch/m68k/mm/memory.c b/arch/m68k/mm/memory.c
--- a/arch/m68k/mm/memory.c	Sun May 16 01:18:35 2004
+++ b/arch/m68k/mm/memory.c	Sun May 16 01:18:35 2004
@@ -298,7 +298,7 @@
 		      : "d0");
 #ifdef CONFIG_M68K_L2_CACHE
     if(mach_l2_flush)
-    	mach_l2_flush(0);
+	mach_l2_flush(0);
 #endif
 }
 
@@ -350,7 +350,7 @@
 		      : "d0");
 #ifdef CONFIG_M68K_L2_CACHE
     if(mach_l2_flush)
-    	mach_l2_flush(1);
+	mach_l2_flush(1);
 #endif
 }
 
@@ -387,7 +387,7 @@
 		unsigned long mmusr;
 
 		set_fs(get_ds());
-		
+
 		asm volatile (".chip 68040\n\t"
 			      "ptestr (%1)\n\t"
 			      "movec %%mmusr, %0\n\t"
diff -Nru a/arch/m68k/mm/motorola.c b/arch/m68k/mm/motorola.c
--- a/arch/m68k/mm/motorola.c	Sun May 16 01:18:35 2004
+++ b/arch/m68k/mm/motorola.c	Sun May 16 01:18:35 2004
@@ -2,9 +2,9 @@
  * linux/arch/m68k/motorola.c
  *
  * Routines specific to the Motorola MMU, originally from:
- * linux/arch/m68k/init.c 
+ * linux/arch/m68k/init.c
  * which are Copyright (C) 1995 Hamish Macdonald
- * 
+ *
  * Moved 8/20/1999 Sam Creasey
  */
 
@@ -99,7 +99,7 @@
 	return last_pgtable;
 }
 
-static unsigned long __init 
+static unsigned long __init
 map_chunk (unsigned long addr, long size)
 {
 #define PTRTREESIZE (256*1024)
diff -Nru a/arch/m68k/mm/sun3kmap.c b/arch/m68k/mm/sun3kmap.c
--- a/arch/m68k/mm/sun3kmap.c	Sun May 16 01:18:36 2004
+++ b/arch/m68k/mm/sun3kmap.c	Sun May 16 01:18:36 2004
@@ -26,7 +26,7 @@
 
 extern void mmu_emu_map_pmeg (int context, int vaddr);
 
-static inline void do_page_mapin(unsigned long phys, unsigned long virt, 
+static inline void do_page_mapin(unsigned long phys, unsigned long virt,
 				 unsigned long type)
 {
 	unsigned long pte;
@@ -44,11 +44,11 @@
 
 }
 
-static inline void do_pmeg_mapin(unsigned long phys, unsigned long virt, 
+static inline void do_pmeg_mapin(unsigned long phys, unsigned long virt,
 				 unsigned long type, int pages)
 {
 
-	if(sun3_get_segmap(virt & ~SUN3_PMEG_MASK) == SUN3_INVALID_PMEG) 
+	if(sun3_get_segmap(virt & ~SUN3_PMEG_MASK) == SUN3_INVALID_PMEG)
 		mmu_emu_map_pmeg(sun3_get_context(), virt);
 
 	while(pages) {
@@ -59,7 +59,7 @@
 	}
 }
 
-void *sun3_ioremap(unsigned long phys, unsigned long size, 
+void *sun3_ioremap(unsigned long phys, unsigned long size,
 		   unsigned long type)
 {
 	struct vm_struct *area;
@@ -79,7 +79,7 @@
 		return NULL;
 
 #ifdef SUN3_KMAP_DEBUG
-	printk("ioremap: got virt %p size %lx(%lx)\n", 
+	printk("ioremap: got virt %p size %lx(%lx)\n",
 	       area->addr, size, area->size);
 #endif
 
@@ -93,39 +93,39 @@
 		seg_pages = (SUN3_PMEG_SIZE - (virt & SUN3_PMEG_MASK)) / PAGE_SIZE;
 		if(seg_pages > pages)
 			seg_pages = pages;
-		
+
 		do_pmeg_mapin(phys, virt, type, seg_pages);
 
 		pages -= seg_pages;
 		phys += seg_pages * PAGE_SIZE;
 		virt += seg_pages * PAGE_SIZE;
 	}
-		
+
 	return (void *)ret;
 
 }
- 
- 
+
+
 void *__ioremap(unsigned long phys, unsigned long size, int cache)
 {
-	
+
 	return sun3_ioremap(phys, size, SUN3_PAGE_TYPE_IO);
-	
+
 }
 
 void iounmap(void *addr)
 {
-	vfree((void *)(PAGE_MASK & (unsigned long)addr));	
+	vfree((void *)(PAGE_MASK & (unsigned long)addr));
 }
 
 /* sun3_map_test(addr, val) -- Reads a byte from addr, storing to val,
  * trapping the potential read fault.  Returns 0 if the access faulted,
  * 1 on success.
- *  
+ *
  * This function is primarily used to check addresses on the VME bus.
  *
  * Mucking with the page fault handler seems a little hackish to me, but
- * SunOS, NetBSD, and Mach all implemented this check in such a manner, 
+ * SunOS, NetBSD, and Mach all implemented this check in such a manner,
  * so I figure we're allowed.
  */
 int sun3_map_test(unsigned long addr, char *val)
@@ -151,6 +151,6 @@
 		 "_sun3_map_test_end:\n"
 		 : "=a"(val), "=r"(ret)
 		 : "a"(addr));
-	
+
 	return ret;
 }
diff -Nru a/arch/m68k/mm/sun3mmu.c b/arch/m68k/mm/sun3mmu.c
--- a/arch/m68k/mm/sun3mmu.c	Sun May 16 01:18:34 2004
+++ b/arch/m68k/mm/sun3mmu.c	Sun May 16 01:18:34 2004
@@ -1,4 +1,4 @@
-/* 
+/*
  * linux/arch/m68k/mm/sun3mmu.c
  *
  * Implementations of mm routines specific to the sun3 MMU.
@@ -64,12 +64,12 @@
 
 	size = num_pages * sizeof(pte_t);
 	size = (size + PAGE_SIZE) & ~(PAGE_SIZE-1);
-	
+
 	next_pgtable = (unsigned long)alloc_bootmem_pages(size);
 	bootmem_end = (next_pgtable + size + PAGE_SIZE) & PAGE_MASK;
 
 	/* Map whole memory from PAGE_OFFSET (0x0E000000) */
-	pg_dir += PAGE_OFFSET >> PGDIR_SHIFT; 
+	pg_dir += PAGE_OFFSET >> PGDIR_SHIFT;
 
 	while (address < (unsigned long)high_memory) {
 		pg_table = (pte_t *) __pa (next_pgtable);
@@ -95,7 +95,7 @@
 	/* memory sizing is a hack stolen from motorola.c..  hope it works for us */
 	zones_size[0] = ((unsigned long)high_memory - PAGE_OFFSET) >> PAGE_SHIFT;
 	zones_size[1] = 0;
-	
+
 	free_area_init(zones_size);
 
 }
diff -Nru a/arch/m68k/mvme147/config.c b/arch/m68k/mvme147/config.c
--- a/arch/m68k/mvme147/config.c	Sun May 16 01:18:34 2004
+++ b/arch/m68k/mvme147/config.c	Sun May 16 01:18:34 2004
@@ -120,8 +120,8 @@
 
 static irqreturn_t mvme147_timer_int (int irq, void *dev_id, struct pt_regs *fp)
 {
-	m147_pcc->t1_int_cntrl = PCC_TIMER_INT_CLR;  
-	m147_pcc->t1_int_cntrl = PCC_INT_ENAB|PCC_LEVEL_TIMER1;   
+	m147_pcc->t1_int_cntrl = PCC_TIMER_INT_CLR;
+	m147_pcc->t1_int_cntrl = PCC_INT_ENAB|PCC_LEVEL_TIMER1;
 	return tick_handler(irq, dev_id, fp);
 }
 
@@ -129,16 +129,16 @@
 void mvme147_sched_init (irqreturn_t (*timer_routine)(int, void *, struct pt_regs *))
 {
 	tick_handler = timer_routine;
-	request_irq (PCC_IRQ_TIMER1, mvme147_timer_int, 
+	request_irq (PCC_IRQ_TIMER1, mvme147_timer_int,
 		IRQ_FLG_REPLACE, "timer 1", NULL);
-	
+
 	/* Init the clock with a value */
 	/* our clock goes off every 6.25us */
 	m147_pcc->t1_preload = PCC_TIMER_PRELOAD;
-	m147_pcc->t1_cntrl = 0x0;   	/* clear timer */
-	m147_pcc->t1_cntrl = 0x3; 	/* start timer */
+	m147_pcc->t1_cntrl = 0x0;	/* clear timer */
+	m147_pcc->t1_cntrl = 0x3;	/* start timer */
 	m147_pcc->t1_int_cntrl = PCC_TIMER_INT_CLR;  /* clear pending ints */
-	m147_pcc->t1_int_cntrl = PCC_INT_ENAB|PCC_LEVEL_TIMER1;   
+	m147_pcc->t1_int_cntrl = PCC_INT_ENAB|PCC_LEVEL_TIMER1;
 }
 
 /* This is always executed with interrupts disabled.  */
diff -Nru a/arch/m68k/mvme16x/mvme16x_ksyms.c b/arch/m68k/mvme16x/mvme16x_ksyms.c
--- a/arch/m68k/mvme16x/mvme16x_ksyms.c	Sun May 16 01:18:35 2004
+++ b/arch/m68k/mvme16x/mvme16x_ksyms.c	Sun May 16 01:18:35 2004
@@ -2,5 +2,5 @@
 #include <linux/types.h>
 #include <asm/ptrace.h>
 #include <asm/mvme16xhw.h>
- 
+
 EXPORT_SYMBOL(mvme16x_config);
diff -Nru a/arch/m68k/mvme16x/rtc.c b/arch/m68k/mvme16x/rtc.c
--- a/arch/m68k/mvme16x/rtc.c	Sun May 16 01:18:37 2004
+++ b/arch/m68k/mvme16x/rtc.c	Sun May 16 01:18:37 2004
@@ -43,7 +43,7 @@
 {
 	volatile MK48T08ptr_t rtc = (MK48T08ptr_t)MVME_RTC_BASE;
 	unsigned long flags;
-	struct rtc_time wtime; 
+	struct rtc_time wtime;
 
 	switch (cmd) {
 	case RTC_RD_TIME:	/* Read the time/date from RTC	*/
@@ -101,7 +101,7 @@
 
 		if (yrs >= 2070)
 			return -EINVAL;
-		
+
 		local_irq_save(flags);
 		rtc->ctrl     = RTC_WRITE;
 
diff -Nru a/arch/m68k/q40/Makefile b/arch/m68k/q40/Makefile
--- a/arch/m68k/q40/Makefile	Sun May 16 01:18:35 2004
+++ b/arch/m68k/q40/Makefile	Sun May 16 01:18:35 2004
@@ -2,4 +2,4 @@
 # Makefile for Linux arch/m68k/q40 source directory
 #
 
-obj-y		:= config.o q40ints.o 
+obj-y		:= config.o q40ints.o
diff -Nru a/arch/m68k/q40/README b/arch/m68k/q40/README
--- a/arch/m68k/q40/README	Sun May 16 01:18:33 2004
+++ b/arch/m68k/q40/README	Sun May 16 01:18:33 2004
@@ -9,18 +9,18 @@
 Hints to documentation usually refer to the linux source tree in
 /usr/src/linux/Documentation unless URL given.
 
-It seems IRQ unmasking can't be safely done on a Q40. IRQ probing 
+It seems IRQ unmasking can't be safely done on a Q40. IRQ probing
 is not implemented - do not try it! (See below)
 
 For a list of kernel command-line options read the documentation for the
 particular device drivers.
 
 The floppy imposes a very high interrupt load on the CPU, approx 30K/s.
-When something blocks interrupts (HD) it will lose some of them, so far 
+When something blocks interrupts (HD) it will lose some of them, so far
 this is not known to have caused any data loss. On highly loaded systems
-it can make the floppy very slow or practically stop. Other Q40 OS' simply 
+it can make the floppy very slow or practically stop. Other Q40 OS' simply
 poll the floppy for this reason - something that can't be done in Linux.
-Only possible cure is getting a 82072 controller with fifo instead of 
+Only possible cure is getting a 82072 controller with fifo instead of
 the 8272A.
 
 drivers used by the Q40, apart from the very obvious (console etc.):
@@ -28,7 +28,7 @@
 		     serial.c		# normal PC driver - any speed
 	             lp.c		# printer driver
 		     genrtc.c		# RTC
-		char/joystick/*		# most of this should work, not 
+		char/joystick/*		# most of this should work, not
 				        # in default config.in
 	        block/q40ide.c		# startup for ide
 		      ide*		# see Documentation/ide.txt
@@ -41,30 +41,30 @@
 		sound/dmasound_core.c
 		      dmasound_q40.c
 
-Various other PC drivers can be enabled simply by adding them to 
+Various other PC drivers can be enabled simply by adding them to
 arch/m68k/config.in, especially 8 bit devices should be without any
-problems. For cards using 16bit io/mem more care is required, like 
+problems. For cards using 16bit io/mem more care is required, like
 checking byte order issues, hacking memcpy_*_io etc.
 
 
 Debugging
 =========
 
-Upon startup the kernel will usually output "ABCQGHIJ" into the SRAM, 
-preceded by the booter signature. This is a trace just in case something 
-went wrong during earliest setup stages of head.S. 
-**Changed** to preserve SRAM contents by default, this is only done when 
-requested - SRAM must start with '%LX$' signature to do this. '-d' option 
+Upon startup the kernel will usually output "ABCQGHIJ" into the SRAM,
+preceded by the booter signature. This is a trace just in case something
+went wrong during earliest setup stages of head.S.
+**Changed** to preserve SRAM contents by default, this is only done when
+requested - SRAM must start with '%LX$' signature to do this. '-d' option
 to 'lxx' loader enables this.
 
 SRAM can also be used as additional console device, use debug=mem.
-This will save kernel startup msgs into SRAM, the screen will display 
+This will save kernel startup msgs into SRAM, the screen will display
 only the penguin - and shell prompt if it gets that far..
 Unfortunately only 2000 bytes are available.
 
 Serial console works and can also be used for debugging, see loader_txt
 
-Most problems seem to be caused by fawlty or badly configured io-cards or 
+Most problems seem to be caused by fawlty or badly configured io-cards or
 hard drives anyway.
 Make sure to configure the parallel port as SPP and remove IRQ/DMA jumpers
 for first testing. The Q40 does not support DMA and may have trouble with
@@ -74,7 +74,7 @@
 Q40 Hardware Description
 ========================
 
-This is just an overview, see asm-m68k/* for details ask if you have any 
+This is just an overview, see asm-m68k/* for details ask if you have any
 questions.
 
 The Q40 consists of a 68040@40 MHz, 1MB video RAM, up to 32MB RAM, AT-style
@@ -82,16 +82,16 @@
 shadow ROM.
 The Q60 has any of 68060 or 68LC060 and up to 128 MB RAM.
 
-Most interfacing like floppy, IDE, serial and parallel ports is done via ISA 
-slots. The ISA io and mem range is mapped (sparse&byteswapped!) into separate 
+Most interfacing like floppy, IDE, serial and parallel ports is done via ISA
+slots. The ISA io and mem range is mapped (sparse&byteswapped!) into separate
 regions of the memory.
-The main interrupt register IIRQ_REG will indicate whether an IRQ was internal 
+The main interrupt register IIRQ_REG will indicate whether an IRQ was internal
 or from some ISA devices, EIRQ_REG can distinguish up to 8 ISA IRQs.
 
 The Q40 custom chip is programmable to provide 2 periodic timers:
 	- 50 or 200 Hz - level 2, !!THIS CANT BE DISABLED!!
-	- 10 or 20 KHz - level 4, used for dma-sound 
-  
+	- 10 or 20 KHz - level 4, used for dma-sound
+
 Linux uses the 200 Hz interrupt for timer and beep by default.
 
 
@@ -112,7 +112,7 @@
 because only irq's 4-15 can be disabled - and only all of them at once.
 Thus disable_irq() can effectively block the machine if the driver goes
 asleep.
-One thing to keep in mind when hacking around the interrupt code is 
+One thing to keep in mind when hacking around the interrupt code is
 that there is no way to find out which IRQ caused a request, [EI]IRQ_REG
 displays current state of the various IRQ lines.
 
@@ -123,11 +123,11 @@
 the PC scancodes x86 Linux uses. So by theory every national keyboard should
 work just by loading the appropriate x86 keytable - see any national-HOWTO.
 
-Unfortunately the AT->PC translation isn't quite trivial and even worse, my 
-documentation of it is absolutely minimal - thus some exotic keys may not 
+Unfortunately the AT->PC translation isn't quite trivial and even worse, my
+documentation of it is absolutely minimal - thus some exotic keys may not
 behave exactly as expected.
 
-There is still hope that it can be fixed completely though. If you encounter 
+There is still hope that it can be fixed completely though. If you encounter
 problems, email me ideally this:
 	- exact keypress/release sequence
 	- 'showkey -s' run on q40, non-X session
diff -Nru a/arch/m68k/q40/config.c b/arch/m68k/q40/config.c
--- a/arch/m68k/q40/config.c	Sun May 16 01:18:35 2004
+++ b/arch/m68k/q40/config.c	Sun May 16 01:18:35 2004
@@ -159,7 +159,7 @@
 void q40_disable_irqs(void)
 {
   unsigned i,j;
-  
+
   j=0;
   while((i=serports[j++])) outb(0,i+UART_IER);
   master_outb(0,EXT_ENABLE_REG);
@@ -170,16 +170,16 @@
 {
     mach_sched_init      = q40_sched_init;
 
-    mach_init_IRQ        = q40_init_IRQ;   
-    mach_gettimeoffset   = q40_gettimeoffset; 
-    mach_hwclk           = q40_hwclk; 
+    mach_init_IRQ        = q40_init_IRQ;
+    mach_gettimeoffset   = q40_gettimeoffset;
+    mach_hwclk           = q40_hwclk;
     mach_get_ss          = q40_get_ss;
     mach_get_rtc_pll     = q40_get_rtc_pll;
     mach_set_rtc_pll     = q40_set_rtc_pll;
     mach_set_clock_mmss	 = q40_set_clock_mmss;
 
     mach_reset		 = q40_reset;
-    mach_free_irq	 = q40_free_irq; 
+    mach_free_irq	 = q40_free_irq;
     mach_process_int	 = q40_process_int;
     mach_get_irq_list	 = show_q40_interrupts;
     mach_request_irq	 = q40_request_irq;
@@ -204,9 +204,9 @@
     q40_disable_irqs();
 
     /* no DMA at all, but ide-scsi requires it.. make sure
-     * all physical RAM fits into the boundary - otherwise 
+     * all physical RAM fits into the boundary - otherwise
      * allocator may play costly and useless tricks */
-    mach_max_dma_address = 1024*1024*1024;   
+    mach_max_dma_address = 1024*1024*1024;
 
     /* useful for early debugging stages - writes kernel messages into SRAM */
     if (!strncmp( m68k_debug_device,"mem",3 ))
@@ -286,7 +286,7 @@
 	  t->tm_sec  = bcd2bin (Q40_RTC_SECS);
 
 	  Q40_RTC_CTRL &= ~(Q40_RTC_READ);
-	  
+
 	  if (t->tm_year < 70)
 	    t->tm_year += 100;
 	  t->tm_wday = bcd2bin(Q40_RTC_DOW)-1;
@@ -319,7 +319,7 @@
 	if ((rtc_minutes < real_minutes
 		? real_minutes - rtc_minutes
 			: rtc_minutes - real_minutes) < 30)
-	{	   
+	{
 	        Q40_RTC_CTRL |= Q40_RTC_WRITE;
 		Q40_RTC_MINS = bin2bcd(real_minutes);
 		Q40_RTC_SECS = bin2bcd(real_seconds);
diff -Nru a/arch/m68k/q40/q40ints.c b/arch/m68k/q40/q40ints.c
--- a/arch/m68k/q40/q40ints.c	Sun May 16 01:18:36 2004
+++ b/arch/m68k/q40/q40ints.c	Sun May 16 01:18:36 2004
@@ -30,14 +30,14 @@
 #include <asm/q40_master.h>
 #include <asm/q40ints.h>
 
-/* 
- * Q40 IRQs are defined as follows: 
+/*
+ * Q40 IRQs are defined as follows:
  *            3,4,5,6,7,10,11,14,15 : ISA dev IRQs
  *            16-31: reserved
  *            32   : keyboard int
  *            33   : frame int (50/200 Hz periodic timer)
  *            34   : sample int (10/20 KHz periodic timer)
- *          
+ *
 */
 
 extern int ints_inited;
@@ -122,7 +122,7 @@
 	  case 12: case 13:
 	    printk("%s: ISA IRQ %d from %s not implemented by HW\n", __FUNCTION__, irq, devname);
 	    return -ENXIO;
-	  case 11: 	      
+	  case 11:
 	    printk("warning IRQ 10 and 11 not distinguishable\n");
 	    irq=10;
 	  default:
@@ -131,7 +131,7 @@
 
 	if (irq<Q40_IRQ_SAMPLE)
 	  {
-	    if (irq_tab[irq].dev_id != NULL) 
+	    if (irq_tab[irq].dev_id != NULL)
 		  {
 		    printk("%s: IRQ %d from %s is not replaceable\n",
 			   __FUNCTION__, irq, irq_tab[irq].devname);
@@ -176,13 +176,13 @@
 	  default:
 	    ;
 	  }
-	
+
 	if (irq<Q40_IRQ_SAMPLE)
 	  {
 	    if (irq_tab[irq].dev_id != dev_id)
 	      printk("%s: Removing probably wrong IRQ %d from %s\n",
 		     __FUNCTION__, irq, irq_tab[irq].devname);
-	    
+
 	    irq_tab[irq].handler = q40_defhand;
 	    irq_tab[irq].flags   = 0;
 	    irq_tab[irq].dev_id  = NULL;
@@ -205,7 +205,7 @@
   return IRQ_HANDLED;
 }
 
-/* 
+/*
  * this stuff doesn't really belong here..
 */
 
@@ -267,10 +267,10 @@
 }
 
 
-/* 
- * tables to translate bits into IRQ numbers 
+/*
+ * tables to translate bits into IRQ numbers
  * it is a good idea to order the entries by priority
- * 
+ *
 */
 
 struct IRQ_TABLE{ unsigned mask; int irq ;};
@@ -319,7 +319,7 @@
   mir=master_inb(IIRQ_REG);
   if (mir&Q40_IRQ_FRAME_MASK) {
 	  irq_tab[Q40_IRQ_FRAME].count++;
-	  irq_tab[Q40_IRQ_FRAME].handler(Q40_IRQ_FRAME,irq_tab[Q40_IRQ_FRAME].dev_id,fp);   
+	  irq_tab[Q40_IRQ_FRAME].handler(Q40_IRQ_FRAME,irq_tab[Q40_IRQ_FRAME].dev_id,fp);
 	  master_outb(-1,FRAME_CLEAR_REG);
   }
   if ((mir&Q40_IRQ_SER_MASK) || (mir&Q40_IRQ_EXT_MASK)) {
@@ -356,15 +356,15 @@
 #endif
 				  goto iirq;
 			  }
-			  irq_tab[irq].count++; 
+			  irq_tab[irq].count++;
 			  irq_tab[irq].state |= IRQ_INPROGRESS;
 			  irq_tab[irq].handler(irq,irq_tab[irq].dev_id,fp);
 			  irq_tab[irq].state &= ~IRQ_INPROGRESS;
-			  
+
 			  /* naively enable everything, if that fails than    */
 			  /* this function will be reentered immediately thus */
 			  /* getting another chance to disable the IRQ        */
-			  
+
 			  if ( disabled ) {
 #ifdef IP_USE_DISABLE
 				  if (irq>4){
@@ -379,9 +379,9 @@
 			  return IRQ_HANDLED;
 		  }
 	  }
-	  if (mer && ccleirq>0 && !aliased_irq) 
+	  if (mer && ccleirq>0 && !aliased_irq)
 		  printk("ISA interrupt from unknown source? EIRQ_REG = %x\n",mer),ccleirq--;
-  } 
+  }
  iirq:
   mir=master_inb(IIRQ_REG);
   /* should test whether keyboard irq is really enabled, doing it in defhand */
@@ -399,10 +399,10 @@
 	for (i = 0; i <= Q40_IRQ_MAX; i++) {
 		if (irq_tab[i].count)
 		      seq_printf(p, "%sIRQ %02d: %8d  %s%s\n",
-			      (i<=15) ? "ISA-" : "    " ,		
+			      (i<=15) ? "ISA-" : "    " ,
 			    i, irq_tab[i].count,
 			    irq_tab[i].devname[0] ? irq_tab[i].devname : "?",
-			    irq_tab[i].handler == q40_defhand ? 
+			    irq_tab[i].handler == q40_defhand ?
 					" (now unassigned)" : "");
 	}
 	return 0;
@@ -440,7 +440,7 @@
   {
     mext_disabled--;
     if (mext_disabled>0)
-	  printk("q40_enable_irq : nested disable/enable\n"); 
+	  printk("q40_enable_irq : nested disable/enable\n");
     if (mext_disabled==0)
     master_outb(1,EXT_ENABLE_REG);
     }
diff -Nru a/arch/m68k/sun3/config.c b/arch/m68k/sun3/config.c
--- a/arch/m68k/sun3/config.c	Sun May 16 01:18:35 2004
+++ b/arch/m68k/sun3/config.c	Sun May 16 01:18:35 2004
@@ -42,19 +42,19 @@
 extern void idprom_init (void);
 extern int sun3_hwclk(int set, struct rtc_time *t);
 
-volatile char* clock_va; 
+volatile char* clock_va;
 extern volatile unsigned char* sun3_intreg;
 extern unsigned long availmem;
 unsigned long num_pages;
 
 static int sun3_get_hardware_list(char *buffer)
 {
-	
+
 	int len = 0;
 
 	len += sprintf(buffer + len, "PROM Revision:\t%s\n",
 		       romvec->pv_monid);
-	
+
 	return len;
 
 }
@@ -71,14 +71,14 @@
 	clock_va    =          (char *) 0xfe06000;	/* dark  */
 	sun3_intreg = (unsigned char *) 0xfe0a000;	/* magic */
 	sun3_disable_interrupts();
-	
+
 	prom_init((void *)LINUX_OPPROM_BEGVM);
-		
+
 	GET_CONTROL_BYTE(AC_SENABLE,enable_register);
-	enable_register |= 0x50; /* Enable FPU */	
+	enable_register |= 0x50; /* Enable FPU */
 	SET_CONTROL_BYTE(AC_SENABLE,enable_register);
 	GET_CONTROL_BYTE(AC_SENABLE,enable_register);
-	
+
 	/* This code looks suspicious, because it doesn't subtract
            memory belonging to the kernel from the available space */
 
@@ -122,7 +122,7 @@
 	/* align start/end to page boundaries */
 	memory_start = ((memory_start + (PAGE_SIZE-1)) & PAGE_MASK);
 	memory_end = memory_end & PAGE_MASK;
-		
+
 	start_page = __pa(memory_start) >> PAGE_SHIFT;
 	num_pages = __pa(memory_end) >> PAGE_SHIFT;
 
@@ -134,7 +134,7 @@
 
 	free_bootmem(__pa(availmem), memory_end - (availmem));
 }
-	
+
 
 void __init config_sun3(void)
 {
@@ -145,13 +145,13 @@
 
 	/* Subtract kernel memory from available memory */
 
-        mach_sched_init      =  sun3_sched_init; 
+        mach_sched_init      =  sun3_sched_init;
         mach_init_IRQ        =  sun3_init_IRQ;
         mach_default_handler = &sun3_default_handler;
         mach_request_irq     =  sun3_request_irq;
         mach_free_irq        =  sun3_free_irq;
-	enable_irq     	     =  sun3_enable_irq;
-        disable_irq  	     =  sun3_disable_irq;
+	enable_irq	     =  sun3_enable_irq;
+        disable_irq	     =  sun3_disable_irq;
 	mach_process_int     =  sun3_process_int;
         mach_get_irq_list    =  show_sun3_interrupts;
         mach_reset           =  sun3_reboot;
@@ -161,7 +161,7 @@
 	mach_halt	     =  sun3_halt;
 	mach_get_hardware_list = sun3_get_hardware_list;
 #if defined(CONFIG_DUMMY_CONSOLE)
-	conswitchp 	     = &dummy_con;
+	conswitchp	     = &dummy_con;
 #endif
 
 	memory_start = ((((int)&_end) + 0x2000) & ~0x1fff);
@@ -170,7 +170,7 @@
 
 	m68k_num_memory=1;
         m68k_memory[0].size=*(romvec->pv_sun3mem);
-	
+
 	sun3_bootmem_alloc(memory_start, memory_end);
 }
 
@@ -179,7 +179,7 @@
 	sun3_disable_interrupts();
         intersil_clock->cmd_reg=(INTERSIL_RUN|INTERSIL_INT_DISABLE|INTERSIL_24H_MODE);
         intersil_clock->int_reg=INTERSIL_HZ_100_MASK;
- 	intersil_clear();
+	intersil_clear();
         sun3_enable_irq(5);
         intersil_clock->cmd_reg=(INTERSIL_RUN|INTERSIL_INT_ENABLE|INTERSIL_24H_MODE);
         sun3_enable_interrupts();
diff -Nru a/arch/m68k/sun3/dvma.c b/arch/m68k/sun3/dvma.c
--- a/arch/m68k/sun3/dvma.c	Sun May 16 01:18:34 2004
+++ b/arch/m68k/sun3/dvma.c	Sun May 16 01:18:34 2004
@@ -24,13 +24,13 @@
 	unsigned long pte;
 	unsigned long j;
 	pte_t ptep;
-	
+
 	j = *(volatile unsigned long *)kaddr;
 	*(volatile unsigned long *)kaddr = j;
 
 	ptep = pfn_pte(virt_to_pfn(kaddr), PAGE_KERNEL);
 	pte = pte_val(ptep);
-//		printk("dvma_remap: addr %lx -> %lx pte %08lx len %x\n", 
+//		printk("dvma_remap: addr %lx -> %lx pte %08lx len %x\n",
 //		       kaddr, vaddr, pte, len);
 	if(ptelist[(vaddr & 0xff000) >> PAGE_SHIFT] != pte) {
 		sun3_put_pte(vaddr, pte);
@@ -41,7 +41,7 @@
 
 }
 
-int dvma_map_iommu(unsigned long kaddr, unsigned long baddr, 
+int dvma_map_iommu(unsigned long kaddr, unsigned long baddr,
 			      int len)
 {
 
@@ -51,7 +51,7 @@
 	vaddr = dvma_btov(baddr);
 
 	end = vaddr + len;
-	
+
 	while(vaddr < end) {
 		dvma_page(kaddr, vaddr);
 		kaddr += PAGE_SIZE;
diff -Nru a/arch/m68k/sun3/idprom.c b/arch/m68k/sun3/idprom.c
--- a/arch/m68k/sun3/idprom.c	Sun May 16 01:18:34 2004
+++ b/arch/m68k/sun3/idprom.c	Sun May 16 01:18:34 2004
@@ -67,7 +67,7 @@
 				prom_getproperty(prom_root_node, "banner-name",
 						 sysname, sizeof(sysname));
 				printk("TYPE: %s\n", sysname);
-#endif				
+#endif
 			}
 			return;
 		}
@@ -83,7 +83,7 @@
 
 	for (i = 0; i < NUM_SUN_MACHINES; i++) {
 		if(Sun_Machines[i].id_machtype == idprom->id_machtype) {
-       		        strcpy(model, Sun_Machines[i].name);
+		        strcpy(model, Sun_Machines[i].name);
 			return;
 		}
 	}
diff -Nru a/arch/m68k/sun3/intersil.c b/arch/m68k/sun3/intersil.c
--- a/arch/m68k/sun3/intersil.c	Sun May 16 01:18:33 2004
+++ b/arch/m68k/sun3/intersil.c	Sun May 16 01:18:33 2004
@@ -26,7 +26,7 @@
 
 /* does this need to be implemented? */
 unsigned long sun3_gettimeoffset(void)
-{ 
+{
   return 1;
 }
 
diff -Nru a/arch/m68k/sun3/leds.c b/arch/m68k/sun3/leds.c
--- a/arch/m68k/sun3/leds.c	Sun May 16 01:18:33 2004
+++ b/arch/m68k/sun3/leds.c	Sun May 16 01:18:33 2004
@@ -5,9 +5,9 @@
 void sun3_leds(unsigned char byte)
 {
 	unsigned char dfc;
-	
+
 	GET_DFC(dfc);
         SET_DFC(FC_CONTROL);
-       	SET_CONTROL_BYTE(AC_LEDS,byte);
+	SET_CONTROL_BYTE(AC_LEDS,byte);
 	SET_DFC(dfc);
 }
diff -Nru a/arch/m68k/sun3/mmu_emu.c b/arch/m68k/sun3/mmu_emu.c
--- a/arch/m68k/sun3/mmu_emu.c	Sun May 16 01:18:35 2004
+++ b/arch/m68k/sun3/mmu_emu.c	Sun May 16 01:18:35 2004
@@ -125,12 +125,12 @@
 {
 	unsigned long seg, num;
 	int i,j;
-	
+
 	memset(rom_pages, 0, sizeof(rom_pages));
 	memset(pmeg_vaddr, 0, sizeof(pmeg_vaddr));
 	memset(pmeg_alloc, 0, sizeof(pmeg_alloc));
 	memset(pmeg_ctx, 0, sizeof(pmeg_ctx));
-	
+
 	/* pmeg align the end of bootmem, adding another pmeg,
 	 * later bootmem allocations will likely need it */
 	bootmem_end = (bootmem_end + (2 * SUN3_PMEG_SIZE)) & ~SUN3_PMEG_MASK;
@@ -148,7 +148,7 @@
 	/* liberate all existing mappings in the rest of kernel space */
 	for(seg = bootmem_end; seg < 0x0f800000; seg += SUN3_PMEG_SIZE) {
 		i = sun3_get_segmap(seg);
-		
+
 		if(!pmeg_alloc[i]) {
 #ifdef DEBUG_MMU_EMU
 			printk("freed: ");
@@ -179,13 +179,13 @@
 			pmeg_alloc[sun3_get_segmap(seg)] = 2;
 		}
 	}
-	
+
 	dvma_init();
-	
-	
+
+
 	/* blank everything below the kernel, and we've got the base
 	   mapping to start all the contexts off with... */
-	for(seg = 0; seg < PAGE_OFFSET; seg += SUN3_PMEG_SIZE) 
+	for(seg = 0; seg < PAGE_OFFSET; seg += SUN3_PMEG_SIZE)
 		sun3_put_segmap(seg, SUN3_INVALID_PMEG);
 
 	set_fs(MAKE_MM_SEG(3));
@@ -195,7 +195,7 @@
 			(*(romvec->pv_setctxt))(j, (void *)seg, i);
 	}
 	set_fs(KERNEL_DS);
-	
+
 }
 
 /* erase the mappings for a dead context.  Uses the pg_dir for hints
@@ -207,9 +207,9 @@
 {
      unsigned char oldctx;
      unsigned long i;
-    
+
      if(context) {
-	     if(!ctx_alloc[context]) 
+	     if(!ctx_alloc[context])
 		     panic("clear_context: context not allocated\n");
 
 	     ctx_alloc[context]->context = SUN3_INVALID_CONTEXT;
@@ -229,7 +229,7 @@
 		     pmeg_vaddr[i] = 0;
 	     }
      }
-     
+
      sun3_put_context(oldctx);
 }
 
@@ -239,7 +239,7 @@
    sure it could be much more intellegent...  but it gets the job done
    for now without much overhead in making it's decision. */
 /* todo: come up with optimized scheme for flushing contexts */
-unsigned long get_free_context(struct mm_struct *mm) 
+unsigned long get_free_context(struct mm_struct *mm)
 {
 	unsigned long new = 1;
 	static unsigned char next_to_die = 1;
@@ -259,7 +259,7 @@
 				break;
 		}
 		// check to make sure one was really free...
-		if(new == CONTEXTS_NUM) 
+		if(new == CONTEXTS_NUM)
 			panic("get_free_context: failed to find free context");
 	}
 
@@ -307,7 +307,7 @@
 	if(vaddr >= PAGE_OFFSET) {
 		/* map kernel pmegs into all contexts */
 		unsigned char i;
-		
+
 		for(i = 0; i < CONTEXTS_NUM; i++) {
 			sun3_put_context(i);
 			sun3_put_segmap (vaddr, curr_pmeg);
@@ -315,7 +315,7 @@
 		sun3_put_context(context);
 		pmeg_alloc[curr_pmeg] = 2;
 		pmeg_ctx[curr_pmeg] = 0;
-		
+
 	}
 	else {
 		pmeg_alloc[curr_pmeg] = 1;
@@ -326,7 +326,7 @@
 	pmeg_vaddr[curr_pmeg] = vaddr;
 
 	/* Set hardware mapping and clear the old PTE entries. */
-	for (i=0; i<SUN3_PMEG_SIZE; i+=SUN3_PTE_SIZE) 
+	for (i=0; i<SUN3_PMEG_SIZE; i+=SUN3_PTE_SIZE)
 		sun3_put_pte (vaddr + i, SUN3_PAGE_SYSTEM);
 
 	/* Consider a different one next time. */
@@ -361,7 +361,7 @@
 		context = 0;
 	} else {
 		context = current->mm->context;
-		if(kernel_fault) 
+		if(kernel_fault)
 			crp = swapper_pg_dir;
 		else
 			crp = current->mm->pgd;
@@ -390,11 +390,11 @@
 	pte = (pte_t *) __va ((unsigned long)(pte + offset));
 
 	/* Make sure this is a valid page */
-	if (!(pte_val (*pte) & SUN3_PAGE_VALID)) 
+	if (!(pte_val (*pte) & SUN3_PAGE_VALID))
 		return 0;
 
 	/* Make sure there's a pmeg allocated for the page */
-	if (sun3_get_segmap (vaddr&~SUN3_PMEG_MASK) == SUN3_INVALID_PMEG) 
+	if (sun3_get_segmap (vaddr&~SUN3_PMEG_MASK) == SUN3_INVALID_PMEG)
 		mmu_emu_map_pmeg (context, vaddr);
 
 	/* Write the pte value to hardware MMU */
@@ -409,7 +409,7 @@
 		if (pte_val (*pte) & SUN3_PAGE_WRITEABLE)
 			pte_val (*pte) |= (SUN3_PAGE_ACCESSED
 					   | SUN3_PAGE_MODIFIED);
-		else 
+		else
 			return 0;	/* Write-protect error. */
 	} else
 		pte_val (*pte) |= SUN3_PAGE_ACCESSED;
diff -Nru a/arch/m68k/sun3/prom/init.c b/arch/m68k/sun3/prom/init.c
--- a/arch/m68k/sun3/prom/init.c	Sun May 16 01:18:36 2004
+++ b/arch/m68k/sun3/prom/init.c	Sun May 16 01:18:36 2004
@@ -73,7 +73,7 @@
 	if((prom_root_node == 0) || (prom_root_node == -1))
 		prom_halt();
 
-	if((((unsigned long) prom_nodeops) == 0) || 
+	if((((unsigned long) prom_nodeops) == 0) ||
 	   (((unsigned long) prom_nodeops) == -1))
 		prom_halt();
 
diff -Nru a/arch/m68k/sun3/sun3dvma.c b/arch/m68k/sun3/sun3dvma.c
--- a/arch/m68k/sun3/sun3dvma.c	Sun May 16 01:18:36 2004
+++ b/arch/m68k/sun3/sun3dvma.c	Sun May 16 01:18:36 2004
@@ -52,21 +52,21 @@
 static unsigned long long dvma_alloc_bytes;
 static unsigned long long dvma_free_bytes;
 
-static void print_use(void) 
+static void print_use(void)
 {
-	
+
 	int i;
 	int j = 0;
 
 	printk("dvma entry usage:\n");
-	
+
 	for(i = 0; i < IOMMU_TOTAL_ENTRIES; i++) {
 		if(!iommu_use[i])
 			continue;
-		
+
 		j++;
 
-		printk("dvma entry: %08lx len %08lx\n", 
+		printk("dvma entry: %08lx len %08lx\n",
 		       ( i << DVMA_PAGE_SHIFT) + DVMA_START,
 		       iommu_use[i]);
 	}
@@ -74,28 +74,28 @@
 	printk("%d entries in use total\n", j);
 
 	printk("allocation/free calls: %lu/%lu\n", dvma_allocs, dvma_frees);
-	printk("allocation/free bytes: %Lx/%Lx\n", dvma_alloc_bytes, 
+	printk("allocation/free bytes: %Lx/%Lx\n", dvma_alloc_bytes,
 	       dvma_free_bytes);
 }
 
 static void print_holes(struct list_head *holes)
 {
-	
+
 	struct list_head *cur;
 	struct hole *hole;
 
 	printk("listing dvma holes\n");
 	list_for_each(cur, holes) {
 		hole = list_entry(cur, struct hole, list);
-		
+
 		if((hole->start == 0) && (hole->end == 0) && (hole->size == 0))
 			continue;
-		
+
 		printk("hole: start %08lx end %08lx size %08lx\n", hole->start, hole->end, hole->size);
 	}
-	
+
 	printk("end of hole listing...\n");
-	
+
 }
 #endif /* DVMA_DEBUG */
 
@@ -106,7 +106,7 @@
 	struct hole *prev = NULL;
 	struct list_head *cur;
 	int ret = 0;
-	
+
 	list_for_each(cur, &hole_list) {
 		hole = list_entry(cur, struct hole, list);
 
@@ -114,7 +114,7 @@
 			prev = hole;
 			continue;
 		}
-		
+
 		if(hole->end == prev->start) {
 			hole->size += prev->size;
 			hole->end = prev->end;
@@ -122,12 +122,12 @@
 			list_add(&(prev->list), &hole_cache);
 			ret++;
 		}
-		
+
 	}
 
 	return ret;
 }
-	
+
 static inline struct hole *rmcache(void)
 {
 	struct hole *ret;
@@ -148,7 +148,7 @@
 
 static inline unsigned long get_baddr(int len, unsigned long align)
 {
-	
+
 	struct list_head *cur;
 	struct hole *hole;
 
@@ -166,11 +166,11 @@
 
 		hole = list_entry(cur, struct hole, list);
 
-		if(align > DVMA_PAGE_SIZE) 
+		if(align > DVMA_PAGE_SIZE)
 			newlen = len + ((hole->end - len) & (align-1));
 		else
 			newlen = len;
-		
+
 		if(hole->size > newlen) {
 			hole->end -= newlen;
 			hole->size -= newlen;
@@ -200,7 +200,7 @@
 
 static inline int free_baddr(unsigned long baddr)
 {
-	
+
 	unsigned long len;
 	struct hole *hole;
 	struct list_head *cur;
@@ -219,7 +219,7 @@
 
 	list_for_each(cur, &hole_list) {
 		hole = list_entry(cur, struct hole, list);
-		
+
 		if(hole->end == baddr) {
 			hole->end += len;
 			hole->size += len;
@@ -233,21 +233,21 @@
 	}
 
 	hole = rmcache();
-	
+
 	hole->start = baddr;
 	hole->end = baddr + len;
 	hole->size = len;
-	
+
 //	list_add_tail(&(hole->list), cur);
 	list_add(&(hole->list), cur);
-	
+
 	return 0;
-	
+
 }
 
 void dvma_init(void)
 {
-	
+
 	struct hole *hole;
 	int i;
 
@@ -255,14 +255,14 @@
 	INIT_LIST_HEAD(&hole_cache);
 
 	/* prepare the hole cache */
-	for(i = 0; i < 64; i++) 
+	for(i = 0; i < 64; i++)
 		list_add(&(initholes[i].list), &hole_cache);
-		
+
 	hole = rmcache();
 	hole->start = DVMA_START;
 	hole->end = DVMA_END;
 	hole->size = DVMA_SIZE;
-	
+
 	list_add(&(hole->list), &hole_list);
 
 	memset(iommu_use, 0, sizeof(iommu_use));
@@ -291,7 +291,7 @@
 	}
 
 #ifdef DEBUG
-	printk("dvma_map request %08lx bytes from %08lx\n", 
+	printk("dvma_map request %08lx bytes from %08lx\n",
 	       len, kaddr);
 #endif
 	off = kaddr & ~DVMA_PAGE_MASK;
@@ -309,7 +309,7 @@
 
 	if(!dvma_map_iommu(kaddr, baddr, len))
 		return (baddr + off);
-	
+
 	printk("dvma_map failed kaddr %lx baddr %lx len %x\n", kaddr, baddr, len);
 	BUG();
 	return 0;
@@ -318,14 +318,14 @@
 void dvma_unmap(void *baddr)
 {
 	unsigned long addr;
-	
+
 	addr = (unsigned long)baddr;
 	/* check if this is a vme mapping */
 	if(!(addr & 0x00f00000))
 		addr |= 0xf00000;
-	
+
 	free_baddr(addr);
-	
+
 	return;
 
 }
diff -Nru a/arch/m68k/sun3/sun3ints.c b/arch/m68k/sun3/sun3ints.c
--- a/arch/m68k/sun3/sun3ints.c	Sun May 16 01:18:37 2004
+++ b/arch/m68k/sun3/sun3ints.c	Sun May 16 01:18:37 2004
@@ -28,7 +28,7 @@
 void sun3_enable_interrupts(void)
 {
 	sun3_enable_irq(0);
-}	
+}
 
 int led_pattern[8] = {
        ~(0x80), ~(0x01),
@@ -67,7 +67,7 @@
 static irqreturn_t sun3_int7(int irq, void *dev_id, struct pt_regs *fp)
 {
 	sun3_do_irq(irq,fp);
-	if(!(kstat_cpu(0).irqs[SYS_IRQS + irq] % 2000)) 
+	if(!(kstat_cpu(0).irqs[SYS_IRQS + irq] % 2000))
 		sun3_leds(led_pattern[(kstat_cpu(0).irqs[SYS_IRQS+irq]%16000)
 			  /2000]);
 	return IRQ_HANDLED;
@@ -125,7 +125,7 @@
 
 	for(i = 0; i < (SUN3_INT_VECS-1); i++) {
 		if(sun3_vechandler[i] != NULL) {
-			seq_printf(p, "vec %3d: %10u %s\n", i+64, 
+			seq_printf(p, "vec %3d: %10u %s\n", i+64,
 				   vec_ints[i],
 				   (vec_names[i]) ? vec_names[i] :
 				   "sun3_vechandler");
@@ -166,12 +166,12 @@
 					dev_names[i], NULL);
 	}
 
-	for(i = 0; i < 192; i++) 
+	for(i = 0; i < 192; i++)
 		sun3_vechandler[i] = NULL;
-	
+
 	sun3_vechandler[191] = sun3_vec255;
 }
-                                
+
 int sun3_request_irq(unsigned int irq, irqreturn_t (*handler)(int, void *, struct pt_regs *),
                       unsigned long flags, const char *devname, void *dev_id)
 {
@@ -181,11 +181,11 @@
 			printk("sun3_request_irq: request for irq %d -- already taken!\n", irq);
 			return 1;
 		}
-		
+
 		sun3_inthandler[irq] = handler;
 		dev_ids[irq] = dev_id;
 		dev_names[irq] = devname;
-		
+
 		/* setting devname would be nice */
 		cpu_request_irq(irq, sun3_default_handler[irq], 0, devname,
 				NULL);
@@ -205,7 +205,7 @@
 			vec_ids[vec] = dev_id;
 			vec_names[vec] = devname;
 			vec_ints[vec] = 0;
-			
+
 			return 0;
 		}
 	}
@@ -214,16 +214,16 @@
 	return 1;
 
 }
-                        
+
 void sun3_free_irq(unsigned int irq, void *dev_id)
 {
 
 	if(irq < SYS_IRQS) {
-		if(sun3_inthandler[irq] == NULL) 
+		if(sun3_inthandler[irq] == NULL)
 			panic("sun3_free_int: attempt to free unused irq %d\n", irq);
 		if(dev_ids[irq] != dev_id)
 			panic("sun3_free_int: incorrect dev_id for irq %d\n", irq);
-		
+
 		sun3_inthandler[irq] = NULL;
 		return;
 	} else if((irq >= 64) && (irq <= 255)) {
@@ -234,12 +234,12 @@
 			panic("sun3_free_int: attempt to free unused vector %d\n", irq);
 		if(vec_ids[irq] != dev_id)
 			panic("sun3_free_int: incorrect dev_id for vec %d\n", irq);
-		
+
 		sun3_vechandler[vec] = NULL;
 		return;
 	} else {
 		panic("sun3_free_irq: invalid irq %d\n", irq);
-	}		
+	}
 }
 
 irqreturn_t sun3_process_int(int irq, struct pt_regs *regs)
@@ -249,7 +249,7 @@
 		int vec;
 
 		vec = irq - 64;
-		if(sun3_vechandler[vec] == NULL) 
+		if(sun3_vechandler[vec] == NULL)
 			panic ("bad interrupt vector %d received\n",irq);
 
 		vec_ints[vec]++;
diff -Nru a/arch/m68k/sun3x/config.c b/arch/m68k/sun3x/config.c
--- a/arch/m68k/sun3x/config.c	Sun May 16 01:18:33 2004
+++ b/arch/m68k/sun3x/config.c	Sun May 16 01:18:33 2004
@@ -33,12 +33,12 @@
 
 static int sun3x_get_hardware_list(char *buffer)
 {
-	
+
 	int len = 0;
 
 	len += sprintf(buffer + len, "PROM Revision:\t%s\n",
 		       romvec->pv_monid);
-	
+
 	return len;
 
 }
@@ -62,7 +62,7 @@
 	mach_request_irq     = sun3_request_irq;
 	mach_free_irq        = sun3_free_irq;
 	mach_process_int     = sun3_process_int;
-    
+
 	mach_gettimeoffset   = sun3x_gettimeoffset;
 	mach_reset           = sun3x_reboot;
 
@@ -70,10 +70,14 @@
 	mach_get_model       = sun3_get_model;
 	mach_get_hardware_list = sun3x_get_hardware_list;
 
+#if defined(CONFIG_DUMMY_CONSOLE)
+	conswitchp	     = &dummy_con;
+#endif
+
 	sun3_intreg = (unsigned char *)SUN3X_INTREG;
 
 	/* only the serial console is known to work anyway... */
-#if 0    
+#if 0
 	switch (*(unsigned char *)SUN3X_EEPROM_CONS) {
 	case 0x10:
 		serial_console = 1;
diff -Nru a/arch/m68k/sun3x/dvma.c b/arch/m68k/sun3x/dvma.c
--- a/arch/m68k/sun3x/dvma.c	Sun May 16 01:18:33 2004
+++ b/arch/m68k/sun3x/dvma.c	Sun May 16 01:18:33 2004
@@ -1,11 +1,11 @@
 /*
  * Virtual DMA allocation
  *
- * (C) 1999 Thomas Bogendoerfer (tsbogend@alpha.franken.de) 
+ * (C) 1999 Thomas Bogendoerfer (tsbogend@alpha.franken.de)
  *
- * 11/26/2000 -- disabled the existing code because it didn't work for 
- * me in 2.4.  Replaced with a significantly more primitive version 
- * similar to the sun3 code.  the old functionality was probably more 
+ * 11/26/2000 -- disabled the existing code because it didn't work for
+ * me in 2.4.  Replaced with a significantly more primitive version
+ * similar to the sun3 code.  the old functionality was probably more
  * desirable, but....   -- Sam Creasey (sammy@oh.verio.com)
  *
  */
@@ -42,8 +42,8 @@
 static volatile unsigned long *iommu_pte = (unsigned long *)SUN3X_IOMMU;
 
 
-#define dvma_entry_paddr(index) 	(iommu_pte[index] & IOMMU_ADDR_MASK)
-#define dvma_entry_vaddr(index,paddr) 	((index << DVMA_PAGE_SHIFT) |  \
+#define dvma_entry_paddr(index)		(iommu_pte[index] & IOMMU_ADDR_MASK)
+#define dvma_entry_vaddr(index,paddr)	((index << DVMA_PAGE_SHIFT) |  \
 					 (paddr & (DVMA_PAGE_SIZE-1)))
 #if 0
 #define dvma_entry_set(index,addr)	(iommu_pte[index] =            \
@@ -80,7 +80,7 @@
 
 /* create a virtual mapping for a page assigned within the IOMMU
    so that the cpu can reach it easily */
-inline int dvma_map_cpu(unsigned long kaddr, 
+inline int dvma_map_cpu(unsigned long kaddr,
 			       unsigned long vaddr, int len)
 {
 	pgd_t *pgd;
@@ -97,7 +97,7 @@
 	       kaddr, vaddr);
 #endif
 	pgd = pgd_offset_k(vaddr);
-	
+
 	do {
 		pmd_t *pmd;
 		unsigned long end2;
@@ -107,7 +107,7 @@
 			goto out;
 		}
 
-		if((end & PGDIR_MASK) > (vaddr & PGDIR_MASK)) 
+		if((end & PGDIR_MASK) > (vaddr & PGDIR_MASK))
 			end2 = (vaddr + (PGDIR_SIZE-1)) & PGDIR_MASK;
 		else
 			end2 = end;
@@ -121,7 +121,7 @@
 				goto out;
 			}
 
-			if((end2 & PMD_MASK) > (vaddr & PMD_MASK)) 
+			if((end2 & PMD_MASK) > (vaddr & PMD_MASK))
 				end3 = (vaddr + (PMD_SIZE-1)) & PMD_MASK;
 			else
 				end3 = end2;
@@ -131,17 +131,17 @@
 				printk("mapping %08lx phys to %08lx\n",
 				       __pa(kaddr), vaddr);
 #endif
-				set_pte(pte, pfn_pte(virt_to_pfn(kaddr), 
+				set_pte(pte, pfn_pte(virt_to_pfn(kaddr),
 						     PAGE_KERNEL));
 				pte++;
 				kaddr += PAGE_SIZE;
 				vaddr += PAGE_SIZE;
 			} while(vaddr < end3);
-			
+
 		} while(vaddr < end2);
 
 	} while(vaddr < end);
-	
+
 	flush_tlb_all();
 
  out:
@@ -150,13 +150,13 @@
 
 
 inline int dvma_map_iommu(unsigned long kaddr, unsigned long baddr,
-				 int len) 
+				 int len)
 {
 	unsigned long end, index;
 
 	index = baddr >> DVMA_PAGE_SHIFT;
 	end = ((baddr+len) >> DVMA_PAGE_SHIFT);
-	
+
 	if(len & ~DVMA_PAGE_MASK)
 		end++;
 
@@ -169,12 +169,12 @@
 
 		iommu_pte[index] |= IOMMU_FULL_BLOCK;
 //		dvma_entry_inc(index);
-		
+
 		kaddr += DVMA_PAGE_SIZE;
 	}
 
-#ifdef DEBUG	
-	for(index = (baddr >> DVMA_PAGE_SHIFT); index < end; index++) 
+#ifdef DEBUG
+	for(index = (baddr >> DVMA_PAGE_SHIFT); index < end; index++)
 		dvma_print(index << DVMA_PAGE_SHIFT);
 #endif
 	return 0;
@@ -185,17 +185,17 @@
 {
 
 	int index, end;
-	
-	
+
+
 	index = baddr >> DVMA_PAGE_SHIFT;
 	end = (DVMA_PAGE_ALIGN(baddr+len) >> DVMA_PAGE_SHIFT);
-	
+
 	for(; index < end ; index++) {
 #ifdef DEBUG
 		printk("freeing bus mapping %08x\n", index << DVMA_PAGE_SHIFT);
 #endif
 #if 0
-		if(!dvma_entry_use(index)) 
+		if(!dvma_entry_use(index))
 			printk("dvma_unmap freeing unused entry %04x\n",
 			       index);
 		else
diff -Nru a/arch/m68k/sun3x/prom.c b/arch/m68k/sun3x/prom.c
--- a/arch/m68k/sun3x/prom.c	Sun May 16 01:18:34 2004
+++ b/arch/m68k/sun3x/prom.c	Sun May 16 01:18:34 2004
@@ -119,13 +119,13 @@
      * XXX this is futile since we restore the vbr first - oops
      */
     vectors[VEC_TRAP14] = sun3x_prom_abort;
-    
+
     /* If debug=prom was specified, start the debug console */
 
     if (!strcmp(m68k_debug_device, "prom"))
         register_console(&sun3x_debug);
 
-    
+
 }
 
 /* some prom functions to export */
@@ -159,7 +159,7 @@
         int i;
 
 	/* make a copy of the idprom structure */
-	for(i = 0; i < num_bytes; i++) 
+	for(i = 0; i < num_bytes; i++)
 		idbuf[i] = ((char *)SUN3X_IDPROM)[i];
 
         return idbuf[0];
diff -Nru a/arch/m68k/sun3x/time.c b/arch/m68k/sun3x/time.c
--- a/arch/m68k/sun3x/time.c	Sun May 16 01:18:35 2004
+++ b/arch/m68k/sun3x/time.c	Sun May 16 01:18:35 2004
@@ -39,12 +39,12 @@
 
 int sun3x_hwclk(int set, struct rtc_time *t)
 {
-	volatile struct mostek_dt *h = 
+	volatile struct mostek_dt *h =
 		(struct mostek_dt *)(SUN3X_EEPROM+M_CONTROL);
 	unsigned long flags;
 
 	local_irq_save(flags);
-	
+
 	if(set) {
 		h->csr |= C_WRITE;
 		h->sec = BIN2BCD(t->tm_sec);
@@ -85,16 +85,16 @@
     /* Clear the pending interrupt - pulse the enable line low */
     disable_irq(5);
     enable_irq(5);
-    
+
     vector(irq, NULL, regs);
 }
 #endif
 
 void __init sun3x_sched_init(irqreturn_t (*vector)(int, void *, struct pt_regs *))
 {
-	
+
 	sun3_disable_interrupts();
-	
+
 
     /* Pulse enable low to get the clock started */
 	sun3_disable_irq(5);
diff -Nru a/arch/m68knommu/kernel/process.c b/arch/m68knommu/kernel/process.c
--- a/arch/m68knommu/kernel/process.c	Sun May 16 01:18:34 2004
+++ b/arch/m68knommu/kernel/process.c	Sun May 16 01:18:34 2004
@@ -404,12 +404,6 @@
 	return error;
 }
 
-/*
- * These bracket the sleeping functions..
- */
-#define first_sched	((unsigned long) scheduling_functions_start_here)
-#define last_sched	((unsigned long) scheduling_functions_end_here)
-
 unsigned long get_wchan(struct task_struct *p)
 {
 	unsigned long fp, pc;
@@ -425,7 +419,7 @@
 		    fp >= 8184+stack_page)
 			return 0;
 		pc = ((unsigned long *)fp)[1];
-		if (pc < first_sched || pc >= last_sched)
+		if (!in_sched_functions(pc))
 			return pc;
 		fp = *(unsigned long *) fp;
 	} while (count++ < 16);
@@ -440,8 +434,7 @@
 	struct switch_stack *sw = (struct switch_stack *)tsk->thread.ksp;
 
 	/* Check whether the thread is blocked in resume() */
-	if (sw->retpc > (unsigned long)scheduling_functions_start_here &&
-	    sw->retpc < (unsigned long)scheduling_functions_end_here)
+	if (in_sched_functions(sw->retpc))
 		return ((unsigned long *)sw->a6)[1];
 	else
 		return sw->retpc;
diff -Nru a/arch/mips/Kconfig b/arch/mips/Kconfig
--- a/arch/mips/Kconfig	Sun May 16 01:18:35 2004
+++ b/arch/mips/Kconfig	Sun May 16 01:18:35 2004
@@ -39,6 +39,7 @@
 config ACER_PICA_61
 	bool "Support for Acer PICA 1 chipset (EXPERIMENTAL)"
 	depends on MACH_JAZZ && EXPERIMENTAL
+	select DMA_NONCOHERENT
 	help
 	  This is a machine with a R4400 133/150 MHz CPU. To compile a Linux
 	  kernel that runs on these, say Y here. For details about Linux on
@@ -48,6 +49,7 @@
 config MIPS_MAGNUM_4000
 	bool "Support for MIPS Magnum 4000"
 	depends on MACH_JAZZ
+	select DMA_NONCOHERENT
 	help
 	  This is a machine with a R4000 100 MHz CPU. To compile a Linux
 	  kernel that runs on these, say Y here. For details about Linux on
@@ -57,6 +59,7 @@
 config OLIVETTI_M700
 	bool "Support for Olivetti M700-10"
 	depends on MACH_JAZZ
+	select DMA_NONCOHERENT
 	help
 	  This is a machine with a R4000 100 MHz CPU. To compile a Linux
 	  kernel that runs on these, say Y here. For details about Linux on
@@ -77,23 +80,27 @@
 config CASIO_E55
 	bool "Support for CASIO CASSIOPEIA E-10/15/55/65"
 	depends on MACH_VR41XX
+	select DMA_NONCOHERENT
 	select IRQ_CPU
 	select ISA
 
 config IBM_WORKPAD
 	bool "Support for IBM WorkPad z50"
 	depends on MACH_VR41XX
+	select DMA_NONCOHERENT
 	select IRQ_CPU
 	select ISA
 
 config NEC_EAGLE
 	bool "Support for NEC Eagle/Hawk board"
+	select DMA_NONCOHERENT
 	select IRQ_CPU
 	depends on MACH_VR41XX
 
 config TANBAC_TB0226
 	bool "Support for TANBAC TB0226 (Mbase)"
 	depends on MACH_VR41XX
+	select DMA_NONCOHERENT
 	select IRQ_CPU
 	help
 	  The TANBAC TB0226 (Mbase) is a MIPS-based platform manufactured by TANBAC.
@@ -102,6 +109,7 @@
 config TANBAC_TB0229
 	bool "Support for TANBAC TB0229 (VR4131DIMM)"
 	depends on MACH_VR41XX
+	select DMA_NONCOHERENT
 	select IRQ_CPU
 	help
 	  The TANBAC TB0229 (VR4131DIMM) is a MIPS-based platform manufactured by TANBAC.
@@ -109,25 +117,42 @@
 
 config VICTOR_MPC30X
 	bool "Support for Victor MP-C303/304"
+	select DMA_NONCOHERENT
 	select IRQ_CPU
 	depends on MACH_VR41XX
 
 config ZAO_CAPCELLA
 	bool "Support for ZAO Networks Capcella"
 	depends on MACH_VR41XX
+	select DMA_NONCOHERENT
 	select IRQ_CPU
 
+config VRC4171
+	tristate "add NEC VRC4171 companion chip support"
+	depends on MACH_VR41XX && ISA
+	---help---
+	  The NEC VRC4171/4171A is a companion chip for NEC VR4111/VR4121.
+
+config VRC4173
+	tristate "add NEC VRC4173 companion chip support"
+	depends on MACH_VR41XX && PCI
+	---help---
+	  The NEC VRC4173 is a companion chip for NEC VR4122/VR4131.
+
 config TOSHIBA_JMR3927
 	bool "Support for Toshiba JMR-TX3927 board"
 	depends on MIPS32
+	select DMA_NONCOHERENT
 
 config MIPS_COBALT
 	bool "Support for Cobalt Server (EXPERIMENTAL)"
 	depends on EXPERIMENTAL
+	select DMA_NONCOHERENT
 	select IRQ_CPU
 
 config MACH_DECSTATION
 	bool "Support for DECstations"
+	select DMA_NONCOHERENT
 	select IRQ_CPU
 	depends on MIPS32 || EXPERIMENTAL
 	---help---
@@ -148,6 +173,7 @@
 config MIPS_EV64120
 	bool "Support for Galileo EV64120 Evaluation board (EXPERIMENTAL)"
 	depends on EXPERIMENTAL
+	select DMA_NONCOHERENT
 	help
 	  This is an evaluation board based on the Galileo GT-64120
 	  single-chip system controller that contains a MIPS R5000 compatible
@@ -162,6 +188,7 @@
 config MIPS_EV96100
 	bool "Support for Galileo EV96100 Evaluation board (EXPERIMENTAL)"
 	depends on EXPERIMENTAL
+	select DMA_NONCOHERENT
 	select IRQ_CPU
 	select MIPS_GT96100
 	select RM7000_CPU_SCACHE
@@ -173,6 +200,7 @@
 
 config MIPS_IVR
 	bool "Support for Globespan IVR board"
+	select DMA_NONCOHERENT
 	help
 	  This is an evaluation board built by Globespan to showcase thir
 	  iVR (Internet Video Recorder) design. It utilizes a QED RM5231
@@ -182,6 +210,7 @@
 
 config LASAT
 	bool "Support for LASAT Networks platforms"
+	select DMA_NONCOHERENT
 	select R5000_CPU_SCACHE
 
 config PICVUE
@@ -203,10 +232,12 @@
 config HP_LASERJET
 	bool "Support for Hewlett Packard LaserJet board"
 	depends on BROKEN
+	select DMA_NONCOHERENT
 	select IRQ_CPU
 
 config MIPS_ITE8172
 	bool "Support for ITE 8172G board"
+	select DMA_NONCOHERENT
 	help
 	  Ths is an evaluation board made by ITE <http://www.ite.com.tw/>
 	  with ATX form factor that utilizes a MIPS R5000 to work with its
@@ -225,6 +256,7 @@
 
 config MIPS_ATLAS
 	bool "Support for MIPS Atlas board"
+	select DMA_NONCOHERENT
 	help
 	  This enables support for the QED R5231-based MIPS Atlas evaluation
 	  board.
@@ -232,17 +264,20 @@
 config MIPS_MALTA
 	bool "Support for MIPS Malta board"
 	select HAVE_STD_PC_SERIAL_PORT
+	select DMA_NONCOHERENT
 	help
 	  This enables support for the VR5000-based MIPS Malta evaluation
 	  board.
 
 config MIPS_SEAD
 	bool "Support for MIPS SEAD board (EXPERIMENTAL)"
-	select IRQ_CPU
 	depends on EXPERIMENTAL
+	select IRQ_CPU
+	select DMA_NONCOHERENT
 
 config MOMENCO_OCELOT
 	bool "Support for Momentum Ocelot board"
+	select DMA_NONCOHERENT
 	select IRQ_CPU
 	select IRQ_CPU_RM7K
 	select RM7000_CPU_SCACHE
@@ -252,6 +287,7 @@
 
 config MOMENCO_OCELOT_G
 	bool "Support for Momentum Ocelot-G board"
+	select DMA_NONCOHERENT
 	select IRQ_CPU
 	select IRQ_CPU_RM7K
 	select RM7000_CPU_SCACHE
@@ -261,6 +297,7 @@
 
 config MOMENCO_OCELOT_C
 	bool "Support for Momentum Ocelot-C board"
+	select DMA_NONCOHERENT
 	select IRQ_CPU
 	select RM7000_CPU_SCACHE
 	help
@@ -269,6 +306,7 @@
 
 config MOMENCO_JAGUAR_ATX
 	bool "Support for Momentum Jaguar board"
+	select DMA_NONCOHERENT
 	select IRQ_CPU
 	select IRQ_CPU_RM7K
 	select LIMITED_DMA
@@ -286,6 +324,7 @@
 
 config PMC_YOSEMITE
 	bool "Support for PMC-Sierra Yosemite eval board"
+	select DMA_NONCOHERENT
 	help
 	  Yosemite is an evaluation board for the RM9000x2 processor
 	  manufactured by PMC-Sierra
@@ -297,6 +336,7 @@
 config DDB5074
 	bool "Support for NEC DDB Vrc-5074 (EXPERIMENTAL)"
 	depends on EXPERIMENTAL
+	select DMA_NONCOHERENT
 	select HAVE_STD_PC_SERIAL_PORT
 	select IRQ_CPU
 	select ISA
@@ -306,6 +346,7 @@
 
 config DDB5476
 	bool "Support for NEC DDB Vrc-5476"
+	select DMA_NONCOHERENT
 	select HAVE_STD_PC_SERIAL_PORT
 	select IRQ_CPU
 	select ISA
@@ -319,6 +360,7 @@
 
 config DDB5477
 	bool "Support for NEC DDB Vrc-5477"
+	select DMA_NONCOHERENT
 	select IRQ_CPU
 	help
 	  This enables support for the R5432-based NEC DDB Vrc-5477,
@@ -334,10 +376,12 @@
 	
 config NEC_OSPREY
 	bool "Support for NEC Osprey board"
+	select DMA_NONCOHERENT
 	select IRQ_CPU
 
 config SGI_IP22
 	bool "Support for SGI IP22 (Indy/Indigo2)"
+	select DMA_NONCOHERENT
 	select IP22_CPU_SCACHE
 	select IRQ_CPU
 	help
@@ -348,6 +392,7 @@
 config SGI_IP27
 	bool "Support for SGI IP27 (Origin200/2000)"
 	depends on MIPS64
+	select DMA_IP27
 	help
 	  This are the SGI Origin 200, Origin 2000 and Onyx 2 Graphics
 	  workstations.  To compile a Linux kernel that runs on these, say Y
@@ -411,6 +456,7 @@
 config SGI_IP32
 	bool "Support for SGI IP32 (O2) (EXPERIMENTAL)"
 	depends on EXPERIMENTAL
+	select DMA_NONCOHERENT
 	select R5000_CPU_SCACHE
 	select RM7000_CPU_SCACHE
 	help
@@ -452,30 +498,37 @@
 config MIPS_PB1000
 	bool "PB1000 board"
 	depends on SOC_AU1000
+	select DMA_NONCOHERENT
 
 config MIPS_PB1100
 	bool "PB1100 board"
 	depends on SOC_AU1100
+	select DMA_NONCOHERENT
 
 config MIPS_PB1500
 	bool "PB1500 board"
 	depends on SOC_AU1500
+	select DMA_NONCOHERENT
 
 config MIPS_PB1550
 	bool "PB1550 board"
 	depends on SOC_AU1550
+	select DMA_NONCOHERENT
 
 config MIPS_DB1000
 	bool "DB1000 board"
 	depends on SOC_AU1000
+	select DMA_NONCOHERENT
 
 config MIPS_DB1100
 	bool "DB1100 board"
 	depends on SOC_AU1100
+	select DMA_NONCOHERENT
 
 config MIPS_DB1500
 	bool "DB1500 board"
 	depends on SOC_AU1500
+	select DMA_NONCOHERENT
 
 config MIPS_DB1550
 	bool "DB1550 board"
@@ -484,24 +537,29 @@
 config MIPS_BOSPORUS
 	bool "Bosporus board"
 	depends on SOC_AU1500
+	select DMA_NONCOHERENT
 
 config MIPS_MIRAGE
 	bool "Mirage board"
 	depends on SOC_AU1500
+	select DMA_NONCOHERENT
 
 config MIPS_XXS1500
 	bool "MyCable XXS1500 board"
 	depends on SOC_AU1500
+	select DMA_NONCOHERENT
 
 config MIPS_MTX1
 	bool "4G Systems MTX-1 board"
 	depends on SOC_AU1500
+	select DMA_NONCOHERENT
 
 endchoice
 
 config SIBYTE_SB1xxx_SOC
 	bool "Support for Broadcom BCM1xxx SOCs (EXPERIMENTAL)"
 	depends on EXPERIMENTAL
+	select DMA_COHERENT
 
 choice
 	prompt "BCM1xxx SOC-based board"
@@ -710,6 +768,7 @@
 
 config SNI_RM200_PCI
 	bool "Support for SNI RM200 PCI"
+	select DMA_NONCOHERENT
 	select HAVE_STD_PC_SERIAL_PORT
 	select ISA
 	help
@@ -720,8 +779,9 @@
 
 config TOSHIBA_RBTX4927
 	bool "Support for Toshiba TBTX49[23]7 board"
-	select ISA
 	depends on MIPS32
+	select DMA_NONCOHERENT
+	select ISA
 
 config RWSEM_GENERIC_SPINLOCK
 	bool
@@ -744,18 +804,12 @@
 
 config	DMA_COHERENT
 	bool
-	depends on SIBYTE_SB1xxx_SOC
-	default y
 
 config	DMA_IP27
 	bool
-	depends on SGI_IP27
-	default y
 
 config	DMA_NONCOHERENT
 	bool
-	depends on ZAO_CAPCELLA || VICTOR_MPC30X || TOSHIBA_JMR3927 || TOSHIBA_RBTX4927 || SNI_RM200_PCI || SGI_IP32 || SGI_IP22 || NEC_EAGLE || NEC_OSPREY || DDB5477 || DDB5476 || DDB5074 || MOMENCO_OCELOT || MOMENCO_OCELOT_C || MOMENCO_OCELOT_G || MOMENCO_JAGUAR_ATX || MIPS_BOSPORUS || MIPS_DB1000 || MIPS_DB1100 || MIPS_DB1500 || MIPS_SEAD || MIPS_MALTA || MIPS_MAGNUM_4000 || MIPS_MIRAGE || MIPS_MTX1 || MIPS_XXS1500 || OLIVETTI_M700 || MIPS_ATLAS || LASAT || MIPS_ITE8172 || IBM_WORKPAD || HP_LASERJET || MIPS_IVR || MIPS_EV96100 || MIPS_EV64120 || MACH_DECSTATION || MIPS_COBALT || MIPS_PB1500 || MIPS_PB1100 || MIPS_PB1000 || MIPS_PB1550 || CASIO_E55 || ACER_PICA_61 || TANBAC_TB0226 || TANBAC_TB0229
-	default y
 
 config EARLY_PRINTK
 	bool
@@ -811,14 +865,6 @@
 	depends on ZAO_CAPCELLA || VICTOR_MPC30X || SIBYTE_SB1xxx_SOC || NEC_EAGLE || NEC_OSPREY || DDB5477 || CASIO_E55 || TANBAC_TB0226 || TANBAC_TB0229
 	default y
 
-config VRC4171
-	tristate "NEC VRC4171 Support"
-	depends on IBM_WORKPAD
-
-config VRC4173
-	tristate "NEC VRC4173 Support"
-	depends on NEC_EAGLE || VICTOR_MPC30X
-
 config DDB5XXX_COMMON
 	bool
 	depends on DDB5074 || DDB5476 || DDB5477
@@ -1170,7 +1216,7 @@
 
 config CPU_HAS_PREFETCH
 	bool "Enable prefetches" if CPU_SB1 && !CPU_SB1_PASS_2
-	default y if CPU_MIPS32 || CPU_MIPS64 || CPU_RM7000 || CPU_RM9000
+	default y if CPU_MIPS32 || CPU_MIPS64 || CPU_RM7000 || CPU_RM9000 || CPU_R10000
 
 config VTAG_ICACHE
 	bool "Support for Virtual Tagged I-cache" if CPU_MIPS64 || CPU_MIPS32
diff -Nru a/arch/mips/au1000/common/Makefile b/arch/mips/au1000/common/Makefile
--- a/arch/mips/au1000/common/Makefile	Sun May 16 01:18:36 2004
+++ b/arch/mips/au1000/common/Makefile	Sun May 16 01:18:36 2004
@@ -7,7 +7,7 @@
 #
 
 obj-y += prom.o int-handler.o irq.o puts.o time.o reset.o \
-	au1xxx_irqmap.o clocks.o power.o setup.o sleeper.o
+	au1xxx_irqmap.o clocks.o power.o setup.o sleeper.o cputable.o
 
 obj-$(CONFIG_AU1X00_USB_DEVICE)	+= usbdev.o
 obj-$(CONFIG_KGDB)		+= dbg_io.o
diff -Nru a/arch/mips/au1000/common/cputable.c b/arch/mips/au1000/common/cputable.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/arch/mips/au1000/common/cputable.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,56 @@
+/*
+ *  arch/mips/au1000/common/cputable.c
+ *
+ *  Copyright (C) 2004 Dan Malek (dan@embeddededge.com)
+ *	Copied from PowerPC and updated for Alchemy Au1xxx processors.
+ *
+ *  Copyright (C) 2001 Ben. Herrenschmidt (benh@kernel.crashing.org)
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License
+ *  as published by the Free Software Foundation; either version
+ *  2 of the License, or (at your option) any later version.
+ */
+
+#include <linux/config.h>
+#include <linux/string.h>
+#include <linux/sched.h>
+#include <linux/threads.h>
+#include <linux/init.h>
+#include <asm/mach-au1x00/au1000.h>
+
+struct cpu_spec* cur_cpu_spec[NR_CPUS];
+
+/* With some thought, we can probably use the mask to reduce the
+ * size of the table.
+ */
+struct cpu_spec	cpu_specs[] = {
+    { 0xffffffff, 0x00030100, "Au1000 DA", 1, 0 },
+    { 0xffffffff, 0x00030201, "Au1000 HA", 1, 0 },
+    { 0xffffffff, 0x00030202, "Au1000 HB", 1, 0 },
+    { 0xffffffff, 0x00030203, "Au1000 HC", 1, 1 },
+    { 0xffffffff, 0x00030204, "Au1000 HD", 1, 1 },
+    { 0xffffffff, 0x01030200, "Au1500 AB", 1, 1 },
+    { 0xffffffff, 0x01030201, "Au1500 AC", 0, 1 },
+    { 0xffffffff, 0x01030202, "Au1500 AD", 0, 1 },
+    { 0xffffffff, 0x02030200, "Au1100 AB", 1, 1 },
+    { 0xffffffff, 0x02030201, "Au1100 BA", 1, 1 },
+    { 0xffffffff, 0x02030202, "Au1100 BC", 1, 1 },
+    { 0xffffffff, 0x02030203, "Au1100 BD", 0, 1 },
+    { 0xffffffff, 0x02030204, "Au1100 BE", 0, 1 },
+    { 0xffffffff, 0x03030200, "Au1550 AA", 0, 1 },
+    { 0x00000000, 0x00000000, "Unknown Au1xxx", 1, 0 },
+};
+
+void
+set_cpuspec(void)
+{
+	struct	cpu_spec *sp;
+	u32	prid;
+
+	prid = read_c0_prid();
+	sp = cpu_specs;
+	while ((prid & sp->prid_mask) != sp->prid_value)
+		sp++;
+	cur_cpu_spec[0] = sp;
+}
diff -Nru a/arch/mips/au1000/common/power.c b/arch/mips/au1000/common/power.c
--- a/arch/mips/au1000/common/power.c	Sun May 16 01:18:36 2004
+++ b/arch/mips/au1000/common/power.c	Sun May 16 01:18:36 2004
@@ -320,7 +320,7 @@
 	unsigned long val, pll;
 #define TMPBUFLEN 64
 #define MAX_CPU_FREQ 396
-	char buf[8], *p;
+	char buf[TMPBUFLEN], *p;
 	unsigned long flags, intc0_mask, intc1_mask;
 	unsigned long old_baud_base, old_cpu_freq, baud_rate, old_clk,
 	    old_refresh;
diff -Nru a/arch/mips/au1000/common/setup.c b/arch/mips/au1000/common/setup.c
--- a/arch/mips/au1000/common/setup.c	Sun May 16 01:18:36 2004
+++ b/arch/mips/au1000/common/setup.c	Sun May 16 01:18:36 2004
@@ -65,40 +65,20 @@
 
 static int __init au1x00_setup(void)
 {
+	struct	cpu_spec *sp;
 	char *argptr;
 	unsigned long prid, cpupll, bclk = 1;
 
-	/* Various early Au1000 Errata corrected by this */
-	set_c0_config(1<<19); /* Config[OD] */
+	set_cpuspec();
+	sp = cur_cpu_spec[0];
 
 	board_setup();  /* board specific setup */
 
 	prid = read_c0_prid();
-	switch (prid)
-	{
-		case 0x00030100: printk("Au1000 DA "); bclk = 0; break;
-	 	case 0x00030201: printk("Au1000 HA "); bclk = 0; break;
-		case 0x00030202: printk("Au1000 HB "); bclk = 0; break;
-		case 0x00030203: printk("Au1000 HC "); break;
-		case 0x00030204: printk("Au1000 HD "); break;
-
-		case 0x01030200: printk("Au1500 AB "); break;
-		case 0x01030201: printk("Au1500 AC "); break;
-		case 0x01030202: printk("Au1500 AD "); break;
-
-		case 0x02030200: printk("Au1100 AB "); break;
-		case 0x02030201: printk("Au1100 BA "); break;
-		case 0x02030202: printk("Au1100 BC "); break;
-		case 0x02030203: printk("Au1100 BD "); break;
-		case 0x02030204: printk("Au1100 BE "); break;
-
-		case 0x03030200: printk("Au1550 AA "); break;
-
-		default: printk("Unknown Au1x00! "); bclk = 0; break;
-	}
 	cpupll = (au_readl(0xB1900060) & 0x3F) * 12;
 	printk("(PRId %08X) @ %dMHZ\n", prid, cpupll);
 
+	bclk = sp->cpu_bclk;
 	if (bclk)
 	{
 		/* Enable BCLK switching */
@@ -106,6 +86,15 @@
 		au_writel(bclk | 0x60, 0xB190003C);
 		printk("BCLK switching enabled!\n");
 	}
+
+	if (sp->cpu_od) {
+		/* Various early Au1000 Errata corrected by this */
+		set_c0_config(1<<19); /* Set Config[OD] */
+	}
+	else {
+		/* Clear to obtain best system bus performance */
+		clear_c0_config(1<<19); /* Clear Config[OD] */
+ 	}
 
 	argptr = prom_getcmdline();
 
diff -Nru a/arch/mips/configs/atlas_defconfig b/arch/mips/configs/atlas_defconfig
--- a/arch/mips/configs/atlas_defconfig	Sun May 16 01:18:36 2004
+++ b/arch/mips/configs/atlas_defconfig	Sun May 16 01:18:36 2004
@@ -19,8 +19,10 @@
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 # CONFIG_IKCONFIG is not set
@@ -31,6 +33,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -289,8 +292,6 @@
 # CONFIG_INET_ESP is not set
 # CONFIG_INET_IPCOMP is not set
 # CONFIG_IPV6 is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 # CONFIG_NETFILTER is not set
 CONFIG_XFRM=y
 # CONFIG_XFRM_USER is not set
@@ -300,7 +301,9 @@
 #
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -321,12 +324,12 @@
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
 # CONFIG_EQUALIZER is not set
@@ -334,6 +337,11 @@
 # CONFIG_ETHERTAP is not set
 
 #
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
 # Ethernet (10 or 100Mbit)
 #
 CONFIG_NET_ETHERNET=y
@@ -359,7 +367,6 @@
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
 # CONFIG_R8169 is not set
-# CONFIG_SIS190 is not set
 # CONFIG_SK98LIN is not set
 # CONFIG_TIGON3 is not set
 
@@ -367,10 +374,12 @@
 # Ethernet (10000 Mbit)
 #
 # CONFIG_IXGB is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
+# CONFIG_S2IO is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
 
 #
 # Wireless LAN (non-hamradio)
@@ -378,37 +387,19 @@
 # CONFIG_NET_RADIO is not set
 
 #
-# Token Ring devices
+# Wan interfaces
 #
-# CONFIG_TR is not set
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
 # CONFIG_NET_FC is not set
 # CONFIG_RCPCI is not set
 # CONFIG_SHAPER is not set
 # CONFIG_NETCONSOLE is not set
 
 #
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-
-#
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-# CONFIG_IRDA is not set
-
-#
-# Bluetooth support
-#
-# CONFIG_BT is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
 # ISDN subsystem
 #
 # CONFIG_ISDN is not set
@@ -582,6 +573,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 CONFIG_DEVPTS_FS_XATTR=y
 CONFIG_DEVPTS_FS_SECURITY=y
diff -Nru a/arch/mips/configs/bosporus_defconfig b/arch/mips/configs/bosporus_defconfig
--- a/arch/mips/configs/bosporus_defconfig	Sun May 16 01:18:36 2004
+++ b/arch/mips/configs/bosporus_defconfig	Sun May 16 01:18:36 2004
@@ -19,8 +19,10 @@
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=14
 CONFIG_HOTPLUG=y
 # CONFIG_IKCONFIG is not set
@@ -31,6 +33,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -231,8 +234,6 @@
 #
 # CONFIG_IP_VS is not set
 # CONFIG_IPV6 is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 CONFIG_NETFILTER=y
 # CONFIG_NETFILTER_DEBUG is not set
 
@@ -253,7 +254,9 @@
 #
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -274,6 +277,11 @@
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
@@ -294,31 +302,15 @@
 #
 # Ethernet (10000 Mbit)
 #
-CONFIG_PPP=m
-CONFIG_PPP_MULTILINK=y
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-# CONFIG_PPP_BSDCOMP is not set
-CONFIG_PPPOE=m
-# CONFIG_SLIP is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
 
 #
 # Token Ring devices
 #
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
 
 #
-# Wan interfaces
+# Wireless LAN (non-hamradio)
 #
-# CONFIG_WAN is not set
+# CONFIG_NET_RADIO is not set
 
 #
 # PCMCIA network device support
@@ -334,21 +326,20 @@
 # CONFIG_PCMCIA_AXNET is not set
 
 #
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-# CONFIG_IRDA is not set
-
-#
-# Bluetooth support
+# Wan interfaces
 #
-# CONFIG_BT is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+# CONFIG_PPP_BSDCOMP is not set
+CONFIG_PPPOE=m
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # ISDN subsystem
@@ -531,6 +522,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 CONFIG_DEVPTS_FS_XATTR=y
 CONFIG_DEVPTS_FS_SECURITY=y
diff -Nru a/arch/mips/configs/capcella_defconfig b/arch/mips/configs/capcella_defconfig
--- a/arch/mips/configs/capcella_defconfig	Sun May 16 01:18:34 2004
+++ b/arch/mips/configs/capcella_defconfig	Sun May 16 01:18:34 2004
@@ -19,8 +19,10 @@
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 # CONFIG_IKCONFIG is not set
@@ -31,6 +33,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -56,6 +59,7 @@
 # CONFIG_TANBAC_TB0229 is not set
 # CONFIG_VICTOR_MPC30X is not set
 CONFIG_ZAO_CAPCELLA=y
+# CONFIG_VRC4173 is not set
 # CONFIG_TOSHIBA_JMR3927 is not set
 # CONFIG_MIPS_COBALT is not set
 # CONFIG_MACH_DECSTATION is not set
@@ -251,8 +255,6 @@
 # CONFIG_INET_ESP is not set
 # CONFIG_INET_IPCOMP is not set
 # CONFIG_IPV6 is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 # CONFIG_NETFILTER is not set
 CONFIG_XFRM=y
 # CONFIG_XFRM_USER is not set
@@ -262,7 +264,9 @@
 #
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -283,12 +287,12 @@
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
 # CONFIG_EQUALIZER is not set
@@ -296,6 +300,11 @@
 # CONFIG_ETHERTAP is not set
 
 #
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
 # Ethernet (10 or 100Mbit)
 #
 CONFIG_NET_ETHERNET=y
@@ -321,7 +330,6 @@
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
 # CONFIG_R8169 is not set
-# CONFIG_SIS190 is not set
 # CONFIG_SK98LIN is not set
 # CONFIG_TIGON3 is not set
 
@@ -329,45 +337,29 @@
 # Ethernet (10000 Mbit)
 #
 # CONFIG_IXGB is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
+# CONFIG_S2IO is not set
 
 #
 # Token Ring devices
 #
 # CONFIG_TR is not set
-# CONFIG_RCPCI is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
 
 #
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
+# Wireless LAN (non-hamradio)
 #
-# CONFIG_IRDA is not set
+# CONFIG_NET_RADIO is not set
 
 #
-# Bluetooth support
+# Wan interfaces
 #
-# CONFIG_BT is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_RCPCI is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # ISDN subsystem
@@ -555,6 +547,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 CONFIG_DEVPTS_FS_XATTR=y
 CONFIG_DEVPTS_FS_SECURITY=y
diff -Nru a/arch/mips/configs/cobalt_defconfig b/arch/mips/configs/cobalt_defconfig
--- a/arch/mips/configs/cobalt_defconfig	Sun May 16 01:18:34 2004
+++ b/arch/mips/configs/cobalt_defconfig	Sun May 16 01:18:34 2004
@@ -19,8 +19,10 @@
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 # CONFIG_IKCONFIG is not set
@@ -31,6 +33,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -240,8 +243,6 @@
 # CONFIG_INET_ESP is not set
 # CONFIG_INET_IPCOMP is not set
 # CONFIG_IPV6 is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 # CONFIG_NETFILTER is not set
 CONFIG_XFRM=y
 # CONFIG_XFRM_USER is not set
@@ -251,7 +252,9 @@
 #
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -272,12 +275,12 @@
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
 # CONFIG_EQUALIZER is not set
@@ -285,6 +288,11 @@
 # CONFIG_ETHERTAP is not set
 
 #
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
 # Ethernet (10 or 100Mbit)
 #
 CONFIG_NET_ETHERNET=y
@@ -310,7 +318,6 @@
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
 # CONFIG_R8169 is not set
-# CONFIG_SIS190 is not set
 # CONFIG_SK98LIN is not set
 # CONFIG_TIGON3 is not set
 
@@ -318,45 +325,29 @@
 # Ethernet (10000 Mbit)
 #
 # CONFIG_IXGB is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
+# CONFIG_S2IO is not set
 
 #
 # Token Ring devices
 #
 # CONFIG_TR is not set
-# CONFIG_RCPCI is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
 
 #
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
+# Wireless LAN (non-hamradio)
 #
-# CONFIG_IRDA is not set
+# CONFIG_NET_RADIO is not set
 
 #
-# Bluetooth support
+# Wan interfaces
 #
-# CONFIG_BT is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_RCPCI is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # ISDN subsystem
@@ -535,6 +526,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 CONFIG_DEVPTS_FS_XATTR=y
 CONFIG_DEVPTS_FS_SECURITY=y
diff -Nru a/arch/mips/configs/db1000_defconfig b/arch/mips/configs/db1000_defconfig
--- a/arch/mips/configs/db1000_defconfig	Sun May 16 01:18:35 2004
+++ b/arch/mips/configs/db1000_defconfig	Sun May 16 01:18:35 2004
@@ -19,8 +19,10 @@
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=14
 CONFIG_HOTPLUG=y
 # CONFIG_IKCONFIG is not set
@@ -31,6 +33,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -250,8 +253,6 @@
 #
 # CONFIG_IP_VS is not set
 # CONFIG_IPV6 is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 CONFIG_NETFILTER=y
 # CONFIG_NETFILTER_DEBUG is not set
 
@@ -272,7 +273,9 @@
 #
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -293,6 +296,11 @@
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
@@ -314,31 +322,15 @@
 #
 # Ethernet (10000 Mbit)
 #
-CONFIG_PPP=m
-CONFIG_PPP_MULTILINK=y
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-# CONFIG_PPP_BSDCOMP is not set
-CONFIG_PPPOE=m
-# CONFIG_SLIP is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
 
 #
 # Token Ring devices
 #
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
 
 #
-# Wan interfaces
+# Wireless LAN (non-hamradio)
 #
-# CONFIG_WAN is not set
+# CONFIG_NET_RADIO is not set
 
 #
 # PCMCIA network device support
@@ -354,21 +346,20 @@
 # CONFIG_PCMCIA_AXNET is not set
 
 #
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-# CONFIG_IRDA is not set
-
-#
-# Bluetooth support
+# Wan interfaces
 #
-# CONFIG_BT is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+# CONFIG_PPP_BSDCOMP is not set
+CONFIG_PPPOE=m
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # ISDN subsystem
@@ -557,6 +548,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 CONFIG_DEVPTS_FS_XATTR=y
 CONFIG_DEVPTS_FS_SECURITY=y
diff -Nru a/arch/mips/configs/db1100_defconfig b/arch/mips/configs/db1100_defconfig
--- a/arch/mips/configs/db1100_defconfig	Sun May 16 01:18:34 2004
+++ b/arch/mips/configs/db1100_defconfig	Sun May 16 01:18:34 2004
@@ -19,8 +19,10 @@
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=14
 CONFIG_HOTPLUG=y
 # CONFIG_IKCONFIG is not set
@@ -31,6 +33,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -249,8 +252,6 @@
 #
 # CONFIG_IP_VS is not set
 # CONFIG_IPV6 is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 CONFIG_NETFILTER=y
 # CONFIG_NETFILTER_DEBUG is not set
 
@@ -271,7 +272,9 @@
 #
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -292,6 +295,11 @@
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
@@ -313,31 +321,15 @@
 #
 # Ethernet (10000 Mbit)
 #
-CONFIG_PPP=m
-CONFIG_PPP_MULTILINK=y
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-# CONFIG_PPP_BSDCOMP is not set
-CONFIG_PPPOE=m
-# CONFIG_SLIP is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
 
 #
 # Token Ring devices
 #
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
 
 #
-# Wan interfaces
+# Wireless LAN (non-hamradio)
 #
-# CONFIG_WAN is not set
+# CONFIG_NET_RADIO is not set
 
 #
 # PCMCIA network device support
@@ -353,21 +345,20 @@
 # CONFIG_PCMCIA_AXNET is not set
 
 #
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-# CONFIG_IRDA is not set
-
-#
-# Bluetooth support
+# Wan interfaces
 #
-# CONFIG_BT is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+# CONFIG_PPP_BSDCOMP is not set
+CONFIG_PPPOE=m
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # ISDN subsystem
@@ -553,6 +544,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 CONFIG_DEVPTS_FS_XATTR=y
 CONFIG_DEVPTS_FS_SECURITY=y
diff -Nru a/arch/mips/configs/db1500_defconfig b/arch/mips/configs/db1500_defconfig
--- a/arch/mips/configs/db1500_defconfig	Sun May 16 01:18:34 2004
+++ b/arch/mips/configs/db1500_defconfig	Sun May 16 01:18:34 2004
@@ -19,8 +19,10 @@
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=14
 CONFIG_HOTPLUG=y
 # CONFIG_IKCONFIG is not set
@@ -31,6 +33,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -329,8 +332,6 @@
 #
 # CONFIG_IP_VS is not set
 # CONFIG_IPV6 is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 CONFIG_NETFILTER=y
 # CONFIG_NETFILTER_DEBUG is not set
 
@@ -351,7 +352,9 @@
 #
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -372,6 +375,11 @@
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
@@ -393,31 +401,15 @@
 #
 # Ethernet (10000 Mbit)
 #
-CONFIG_PPP=m
-CONFIG_PPP_MULTILINK=y
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-# CONFIG_PPP_BSDCOMP is not set
-CONFIG_PPPOE=m
-# CONFIG_SLIP is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
 
 #
 # Token Ring devices
 #
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
 
 #
-# Wan interfaces
+# Wireless LAN (non-hamradio)
 #
-# CONFIG_WAN is not set
+# CONFIG_NET_RADIO is not set
 
 #
 # PCMCIA network device support
@@ -433,21 +425,20 @@
 # CONFIG_PCMCIA_AXNET is not set
 
 #
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-# CONFIG_IRDA is not set
-
-#
-# Bluetooth support
+# Wan interfaces
 #
-# CONFIG_BT is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+# CONFIG_PPP_BSDCOMP is not set
+CONFIG_PPPOE=m
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # ISDN subsystem
@@ -627,6 +618,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 CONFIG_DEVPTS_FS_XATTR=y
 CONFIG_DEVPTS_FS_SECURITY=y
diff -Nru a/arch/mips/configs/ddb5476_defconfig b/arch/mips/configs/ddb5476_defconfig
--- a/arch/mips/configs/ddb5476_defconfig	Sun May 16 01:18:34 2004
+++ b/arch/mips/configs/ddb5476_defconfig	Sun May 16 01:18:34 2004
@@ -19,8 +19,10 @@
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 # CONFIG_IKCONFIG is not set
@@ -31,6 +33,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -251,8 +254,6 @@
 # CONFIG_INET_ESP is not set
 # CONFIG_INET_IPCOMP is not set
 # CONFIG_IPV6 is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 # CONFIG_NETFILTER is not set
 CONFIG_XFRM=y
 # CONFIG_XFRM_USER is not set
@@ -262,7 +263,9 @@
 #
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -283,12 +286,12 @@
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
 # CONFIG_EQUALIZER is not set
@@ -296,6 +299,11 @@
 # CONFIG_ETHERTAP is not set
 
 #
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
 # Ethernet (10 or 100Mbit)
 #
 CONFIG_NET_ETHERNET=y
@@ -328,7 +336,6 @@
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
 # CONFIG_R8169 is not set
-# CONFIG_SIS190 is not set
 # CONFIG_SK98LIN is not set
 # CONFIG_TIGON3 is not set
 
@@ -336,45 +343,29 @@
 # Ethernet (10000 Mbit)
 #
 # CONFIG_IXGB is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
+# CONFIG_S2IO is not set
 
 #
 # Token Ring devices
 #
 # CONFIG_TR is not set
-# CONFIG_RCPCI is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
 
 #
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
+# Wireless LAN (non-hamradio)
 #
-# CONFIG_IRDA is not set
+# CONFIG_NET_RADIO is not set
 
 #
-# Bluetooth support
+# Wan interfaces
 #
-# CONFIG_BT is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_RCPCI is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # ISDN subsystem
@@ -573,6 +564,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 CONFIG_DEVPTS_FS_XATTR=y
 CONFIG_DEVPTS_FS_SECURITY=y
diff -Nru a/arch/mips/configs/ddb5477_defconfig b/arch/mips/configs/ddb5477_defconfig
--- a/arch/mips/configs/ddb5477_defconfig	Sun May 16 01:18:36 2004
+++ b/arch/mips/configs/ddb5477_defconfig	Sun May 16 01:18:36 2004
@@ -19,8 +19,10 @@
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 # CONFIG_IKCONFIG is not set
@@ -31,6 +33,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -221,8 +224,6 @@
 # CONFIG_INET_ESP is not set
 # CONFIG_INET_IPCOMP is not set
 # CONFIG_IPV6 is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 # CONFIG_NETFILTER is not set
 CONFIG_XFRM=y
 # CONFIG_XFRM_USER is not set
@@ -232,7 +233,9 @@
 #
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -253,12 +256,12 @@
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
 # CONFIG_EQUALIZER is not set
@@ -266,6 +269,11 @@
 # CONFIG_ETHERTAP is not set
 
 #
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
 # Ethernet (10 or 100Mbit)
 #
 CONFIG_NET_ETHERNET=y
@@ -310,7 +318,6 @@
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
 # CONFIG_R8169 is not set
-# CONFIG_SIS190 is not set
 # CONFIG_SK98LIN is not set
 # CONFIG_TIGON3 is not set
 
@@ -318,45 +325,29 @@
 # Ethernet (10000 Mbit)
 #
 # CONFIG_IXGB is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
+# CONFIG_S2IO is not set
 
 #
 # Token Ring devices
 #
 # CONFIG_TR is not set
-# CONFIG_RCPCI is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
 
 #
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
+# Wireless LAN (non-hamradio)
 #
-# CONFIG_IRDA is not set
+# CONFIG_NET_RADIO is not set
 
 #
-# Bluetooth support
+# Wan interfaces
 #
-# CONFIG_BT is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_RCPCI is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # ISDN subsystem
@@ -532,6 +523,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 CONFIG_DEVPTS_FS_XATTR=y
 CONFIG_DEVPTS_FS_SECURITY=y
diff -Nru a/arch/mips/configs/decstation_defconfig b/arch/mips/configs/decstation_defconfig
--- a/arch/mips/configs/decstation_defconfig	Sun May 16 01:18:35 2004
+++ b/arch/mips/configs/decstation_defconfig	Sun May 16 01:18:35 2004
@@ -19,8 +19,10 @@
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 # CONFIG_IKCONFIG is not set
@@ -31,6 +33,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -247,8 +250,6 @@
 # CONFIG_INET_ESP is not set
 # CONFIG_INET_IPCOMP is not set
 # CONFIG_IPV6 is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 # CONFIG_NETFILTER is not set
 CONFIG_XFRM=y
 # CONFIG_XFRM_USER is not set
@@ -258,7 +259,9 @@
 #
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -279,6 +282,11 @@
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
@@ -300,41 +308,24 @@
 #
 # Ethernet (10000 Mbit)
 #
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
 
 #
-# Wireless LAN (non-hamradio)
+# Token Ring devices
 #
-# CONFIG_NET_RADIO is not set
 
 #
-# Token Ring devices
+# Wireless LAN (non-hamradio)
 #
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
+# CONFIG_NET_RADIO is not set
 
 #
 # Wan interfaces
 #
 # CONFIG_WAN is not set
-
-#
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-# CONFIG_IRDA is not set
-
-#
-# Bluetooth support
-#
-# CONFIG_BT is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # ISDN subsystem
@@ -511,6 +502,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 CONFIG_DEVPTS_FS_XATTR=y
 CONFIG_DEVPTS_FS_SECURITY=y
diff -Nru a/arch/mips/configs/e55_defconfig b/arch/mips/configs/e55_defconfig
--- a/arch/mips/configs/e55_defconfig	Sun May 16 01:18:34 2004
+++ b/arch/mips/configs/e55_defconfig	Sun May 16 01:18:34 2004
@@ -19,8 +19,10 @@
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 # CONFIG_IKCONFIG is not set
@@ -31,6 +33,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -56,6 +59,7 @@
 # CONFIG_TANBAC_TB0229 is not set
 # CONFIG_VICTOR_MPC30X is not set
 # CONFIG_ZAO_CAPCELLA is not set
+# CONFIG_VRC4171 is not set
 # CONFIG_TOSHIBA_JMR3927 is not set
 # CONFIG_MIPS_COBALT is not set
 # CONFIG_MACH_DECSTATION is not set
@@ -246,8 +250,6 @@
 # CONFIG_INET_ESP is not set
 # CONFIG_INET_IPCOMP is not set
 # CONFIG_IPV6 is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 # CONFIG_NETFILTER is not set
 CONFIG_XFRM=y
 # CONFIG_XFRM_USER is not set
@@ -257,7 +259,9 @@
 #
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -278,12 +282,12 @@
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
 # CONFIG_EQUALIZER is not set
@@ -291,6 +295,11 @@
 # CONFIG_ETHERTAP is not set
 
 #
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
 # Ethernet (10 or 100Mbit)
 #
 CONFIG_NET_ETHERNET=y
@@ -313,42 +322,25 @@
 #
 # Ethernet (10000 Mbit)
 #
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
 
 #
 # Token Ring devices
 #
 # CONFIG_TR is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-
-#
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
 
 #
-# IrDA (infrared) support
+# Wireless LAN (non-hamradio)
 #
-# CONFIG_IRDA is not set
+# CONFIG_NET_RADIO is not set
 
 #
-# Bluetooth support
+# Wan interfaces
 #
-# CONFIG_BT is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_WAN is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # ISDN subsystem
@@ -535,6 +527,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 CONFIG_DEVPTS_FS_XATTR=y
 CONFIG_DEVPTS_FS_SECURITY=y
diff -Nru a/arch/mips/configs/eagle_defconfig b/arch/mips/configs/eagle_defconfig
--- a/arch/mips/configs/eagle_defconfig	Sun May 16 01:18:33 2004
+++ b/arch/mips/configs/eagle_defconfig	Sun May 16 01:18:33 2004
@@ -19,8 +19,10 @@
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=14
 CONFIG_HOTPLUG=y
 # CONFIG_IKCONFIG is not set
@@ -31,6 +33,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -56,6 +59,7 @@
 # CONFIG_TANBAC_TB0229 is not set
 # CONFIG_VICTOR_MPC30X is not set
 # CONFIG_ZAO_CAPCELLA is not set
+CONFIG_VRC4173=y
 # CONFIG_TOSHIBA_JMR3927 is not set
 # CONFIG_MIPS_COBALT is not set
 # CONFIG_MACH_DECSTATION is not set
@@ -88,7 +92,6 @@
 CONFIG_CPU_LITTLE_ENDIAN=y
 CONFIG_IRQ_CPU=y
 CONFIG_DUMMY_KEYB=y
-CONFIG_VRC4173=y
 CONFIG_MIPS_L1_CACHE_SHIFT=5
 # CONFIG_FB is not set
 
@@ -329,8 +332,6 @@
 # CONFIG_INET_ESP is not set
 # CONFIG_INET_IPCOMP is not set
 # CONFIG_IPV6 is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 # CONFIG_NETFILTER is not set
 CONFIG_XFRM=y
 # CONFIG_XFRM_USER is not set
@@ -340,7 +341,9 @@
 #
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -361,12 +364,12 @@
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
 # CONFIG_EQUALIZER is not set
@@ -374,6 +377,11 @@
 # CONFIG_ETHERTAP is not set
 
 #
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
 # Ethernet (10 or 100Mbit)
 #
 CONFIG_NET_ETHERNET=y
@@ -399,7 +407,6 @@
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
 # CONFIG_R8169 is not set
-# CONFIG_SIS190 is not set
 # CONFIG_SK98LIN is not set
 # CONFIG_TIGON3 is not set
 
@@ -407,28 +414,17 @@
 # Ethernet (10000 Mbit)
 #
 # CONFIG_IXGB is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
+# CONFIG_S2IO is not set
 
 #
 # Token Ring devices
 #
 # CONFIG_TR is not set
-# CONFIG_RCPCI is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
 
 #
-# Wan interfaces
+# Wireless LAN (non-hamradio)
 #
-# CONFIG_WAN is not set
+# CONFIG_NET_RADIO is not set
 
 #
 # PCMCIA network device support
@@ -444,21 +440,16 @@
 # CONFIG_PCMCIA_AXNET is not set
 
 #
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-# CONFIG_IRDA is not set
-
-#
-# Bluetooth support
+# Wan interfaces
 #
-# CONFIG_BT is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_RCPCI is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # ISDN subsystem
@@ -652,6 +643,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 CONFIG_DEVPTS_FS_XATTR=y
 CONFIG_DEVPTS_FS_SECURITY=y
diff -Nru a/arch/mips/configs/ev64120_defconfig b/arch/mips/configs/ev64120_defconfig
--- a/arch/mips/configs/ev64120_defconfig	Sun May 16 01:18:34 2004
+++ b/arch/mips/configs/ev64120_defconfig	Sun May 16 01:18:34 2004
@@ -19,8 +19,10 @@
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 # CONFIG_IKCONFIG is not set
@@ -31,6 +33,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -227,8 +230,6 @@
 # CONFIG_INET_ESP is not set
 # CONFIG_INET_IPCOMP is not set
 # CONFIG_IPV6 is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 # CONFIG_NETFILTER is not set
 CONFIG_XFRM=y
 # CONFIG_XFRM_USER is not set
@@ -238,7 +239,9 @@
 #
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -259,12 +262,12 @@
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
 # CONFIG_EQUALIZER is not set
@@ -272,6 +275,11 @@
 # CONFIG_ETHERTAP is not set
 
 #
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
 # Ethernet (10 or 100Mbit)
 #
 CONFIG_NET_ETHERNET=y
@@ -297,7 +305,6 @@
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
 # CONFIG_R8169 is not set
-# CONFIG_SIS190 is not set
 # CONFIG_SK98LIN is not set
 # CONFIG_TIGON3 is not set
 
@@ -305,6 +312,22 @@
 # Ethernet (10000 Mbit)
 #
 # CONFIG_IXGB is not set
+# CONFIG_S2IO is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
 # CONFIG_FDDI is not set
 # CONFIG_HIPPI is not set
 CONFIG_PPP=y
@@ -316,43 +339,11 @@
 # CONFIG_PPP_BSDCOMP is not set
 # CONFIG_PPPOE is not set
 # CONFIG_SLIP is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
 # CONFIG_RCPCI is not set
 # CONFIG_SHAPER is not set
 # CONFIG_NETCONSOLE is not set
 
 #
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-
-#
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-# CONFIG_IRDA is not set
-
-#
-# Bluetooth support
-#
-# CONFIG_BT is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
 # ISDN subsystem
 #
 # CONFIG_ISDN is not set
@@ -526,6 +517,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 CONFIG_DEVPTS_FS_XATTR=y
 CONFIG_DEVPTS_FS_SECURITY=y
diff -Nru a/arch/mips/configs/ev96100_defconfig b/arch/mips/configs/ev96100_defconfig
--- a/arch/mips/configs/ev96100_defconfig	Sun May 16 01:18:35 2004
+++ b/arch/mips/configs/ev96100_defconfig	Sun May 16 01:18:35 2004
@@ -19,8 +19,10 @@
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 # CONFIG_IKCONFIG is not set
@@ -31,6 +33,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -220,8 +223,6 @@
 # CONFIG_INET_ESP is not set
 # CONFIG_INET_IPCOMP is not set
 # CONFIG_IPV6 is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 # CONFIG_NETFILTER is not set
 CONFIG_XFRM=y
 # CONFIG_XFRM_USER is not set
@@ -231,7 +232,9 @@
 #
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -252,6 +255,11 @@
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
@@ -273,41 +281,24 @@
 #
 # Ethernet (10000 Mbit)
 #
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
 
 #
-# Wireless LAN (non-hamradio)
+# Token Ring devices
 #
-# CONFIG_NET_RADIO is not set
 
 #
-# Token Ring devices
+# Wireless LAN (non-hamradio)
 #
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
+# CONFIG_NET_RADIO is not set
 
 #
 # Wan interfaces
 #
 # CONFIG_WAN is not set
-
-#
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-# CONFIG_IRDA is not set
-
-#
-# Bluetooth support
-#
-# CONFIG_BT is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # ISDN subsystem
@@ -481,6 +472,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 CONFIG_DEVPTS_FS_XATTR=y
 CONFIG_DEVPTS_FS_SECURITY=y
diff -Nru a/arch/mips/configs/ip22_defconfig b/arch/mips/configs/ip22_defconfig
--- a/arch/mips/configs/ip22_defconfig	Sun May 16 01:18:34 2004
+++ b/arch/mips/configs/ip22_defconfig	Sun May 16 01:18:34 2004
@@ -19,8 +19,10 @@
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 CONFIG_IKCONFIG=y
@@ -32,6 +34,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -298,8 +301,6 @@
 CONFIG_INET6_ESP=m
 CONFIG_INET6_IPCOMP=m
 CONFIG_IPV6_TUNNEL=m
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 CONFIG_NETFILTER=y
 # CONFIG_NETFILTER_DEBUG is not set
 
@@ -359,6 +360,8 @@
 CONFIG_IP_NF_ARP_MANGLE=m
 CONFIG_IP_NF_COMPAT_IPCHAINS=m
 CONFIG_IP_NF_COMPAT_IPFWADM=m
+CONFIG_IP_NF_TARGET_NOTRACK=m
+CONFIG_IP_NF_RAW=m
 
 #
 # IPv6: Netfilter Configuration
@@ -382,6 +385,7 @@
 CONFIG_IP6_NF_TARGET_LOG=m
 CONFIG_IP6_NF_MANGLE=m
 CONFIG_IP6_NF_TARGET_MARK=m
+CONFIG_IP6_NF_RAW=m
 CONFIG_XFRM=y
 CONFIG_XFRM_USER=m
 
@@ -395,7 +399,9 @@
 # CONFIG_SCTP_HMAC_SHA1 is not set
 CONFIG_SCTP_HMAC_MD5=y
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -440,6 +446,11 @@
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
 CONFIG_DUMMY=m
 CONFIG_BONDING=m
@@ -461,41 +472,24 @@
 #
 # Ethernet (10000 Mbit)
 #
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
 
 #
-# Wireless LAN (non-hamradio)
+# Token Ring devices
 #
-# CONFIG_NET_RADIO is not set
 
 #
-# Token Ring devices
+# Wireless LAN (non-hamradio)
 #
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
+# CONFIG_NET_RADIO is not set
 
 #
 # Wan interfaces
 #
 # CONFIG_WAN is not set
-
-#
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-# CONFIG_IRDA is not set
-
-#
-# Bluetooth support
-#
-# CONFIG_BT is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # ISDN subsystem
@@ -709,6 +703,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 CONFIG_DEVPTS_FS_XATTR=y
 CONFIG_DEVPTS_FS_SECURITY=y
diff -Nru a/arch/mips/configs/ip27_defconfig b/arch/mips/configs/ip27_defconfig
--- a/arch/mips/configs/ip27_defconfig	Sun May 16 01:18:34 2004
+++ b/arch/mips/configs/ip27_defconfig	Sun May 16 01:18:34 2004
@@ -17,8 +17,10 @@
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+CONFIG_POSIX_MQUEUE=y
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=15
 # CONFIG_HOTPLUG is not set
 CONFIG_IKCONFIG=y
@@ -30,6 +32,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -112,6 +115,7 @@
 CONFIG_PAGE_SIZE_4KB=y
 # CONFIG_PAGE_SIZE_16KB is not set
 # CONFIG_PAGE_SIZE_64KB is not set
+CONFIG_CPU_HAS_PREFETCH=y
 CONFIG_CPU_HAS_LLSC=y
 CONFIG_CPU_HAS_LLDSCD=y
 CONFIG_CPU_HAS_SYNC=y
@@ -206,7 +210,7 @@
 #
 # SCSI Transport Attributes
 #
-CONFIG_SCSI_SPI_ATTRS=m
+CONFIG_SCSI_SPI_ATTRS=y
 # CONFIG_SCSI_FC_ATTRS is not set
 
 #
@@ -293,8 +297,6 @@
 # CONFIG_INET_ESP is not set
 # CONFIG_INET_IPCOMP is not set
 # CONFIG_IPV6 is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 # CONFIG_NETFILTER is not set
 CONFIG_XFRM=y
 # CONFIG_XFRM_USER is not set
@@ -304,7 +306,9 @@
 #
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -320,40 +324,40 @@
 # QoS and/or fair queueing
 #
 CONFIG_NET_SCHED=y
-CONFIG_NET_SCH_CBQ=m
-CONFIG_NET_SCH_HTB=m
-CONFIG_NET_SCH_HFSC=m
-CONFIG_NET_SCH_CSZ=m
-CONFIG_NET_SCH_PRIO=m
-CONFIG_NET_SCH_RED=m
-CONFIG_NET_SCH_SFQ=m
-CONFIG_NET_SCH_TEQL=m
-CONFIG_NET_SCH_TBF=m
-CONFIG_NET_SCH_GRED=m
-CONFIG_NET_SCH_DSMARK=m
-CONFIG_NET_SCH_DELAY=m
+CONFIG_NET_SCH_CBQ=y
+CONFIG_NET_SCH_HTB=y
+CONFIG_NET_SCH_HFSC=y
+CONFIG_NET_SCH_CSZ=y
+CONFIG_NET_SCH_PRIO=y
+CONFIG_NET_SCH_RED=y
+CONFIG_NET_SCH_SFQ=y
+CONFIG_NET_SCH_TEQL=y
+CONFIG_NET_SCH_TBF=y
+CONFIG_NET_SCH_GRED=y
+CONFIG_NET_SCH_DSMARK=y
+CONFIG_NET_SCH_DELAY=y
 CONFIG_NET_QOS=y
 CONFIG_NET_ESTIMATOR=y
 CONFIG_NET_CLS=y
-CONFIG_NET_CLS_TCINDEX=m
-CONFIG_NET_CLS_ROUTE4=m
+CONFIG_NET_CLS_TCINDEX=y
+CONFIG_NET_CLS_ROUTE4=y
 CONFIG_NET_CLS_ROUTE=y
-CONFIG_NET_CLS_FW=m
-CONFIG_NET_CLS_U32=m
-CONFIG_NET_CLS_RSVP=m
-CONFIG_NET_CLS_RSVP6=m
+CONFIG_NET_CLS_FW=y
+CONFIG_NET_CLS_U32=y
+CONFIG_NET_CLS_RSVP=y
+CONFIG_NET_CLS_RSVP6=y
 CONFIG_NET_CLS_POLICE=y
 
 #
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
 # CONFIG_EQUALIZER is not set
@@ -361,6 +365,11 @@
 # CONFIG_ETHERTAP is not set
 
 #
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
 # Ethernet (10 or 100Mbit)
 #
 CONFIG_NET_ETHERNET=y
@@ -389,7 +398,6 @@
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
 # CONFIG_R8169 is not set
-# CONFIG_SIS190 is not set
 # CONFIG_SK98LIN is not set
 # CONFIG_TIGON3 is not set
 
@@ -397,45 +405,29 @@
 # Ethernet (10000 Mbit)
 #
 # CONFIG_IXGB is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
+# CONFIG_S2IO is not set
 
 #
 # Token Ring devices
 #
 # CONFIG_TR is not set
-# CONFIG_NET_FC is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
 
 #
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
+# Wireless LAN (non-hamradio)
 #
-# CONFIG_IRDA is not set
+# CONFIG_NET_RADIO is not set
 
 #
-# Bluetooth support
+# Wan interfaces
 #
-# CONFIG_BT is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NET_FC is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # ISDN subsystem
@@ -602,6 +594,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 CONFIG_DEVPTS_FS_XATTR=y
 CONFIG_DEVPTS_FS_SECURITY=y
@@ -691,27 +684,27 @@
 #
 CONFIG_CRYPTO=y
 CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_NULL=y
+CONFIG_CRYPTO_MD4=y
 CONFIG_CRYPTO_MD5=y
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_SHA1=y
+CONFIG_CRYPTO_SHA256=y
+CONFIG_CRYPTO_SHA512=y
 CONFIG_CRYPTO_DES=y
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_BLOWFISH=y
+CONFIG_CRYPTO_TWOFISH=y
+CONFIG_CRYPTO_SERPENT=y
+CONFIG_CRYPTO_AES=y
+CONFIG_CRYPTO_CAST5=y
+CONFIG_CRYPTO_CAST6=y
+CONFIG_CRYPTO_ARC4=y
+CONFIG_CRYPTO_DEFLATE=y
+CONFIG_CRYPTO_MICHAEL_MIC=y
 # CONFIG_CRYPTO_TEST is not set
 
 #
 # Library routines
 #
 CONFIG_CRC32=y
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
diff -Nru a/arch/mips/configs/ip32_defconfig b/arch/mips/configs/ip32_defconfig
--- a/arch/mips/configs/ip32_defconfig	Sun May 16 01:18:34 2004
+++ b/arch/mips/configs/ip32_defconfig	Sun May 16 01:18:34 2004
@@ -18,8 +18,10 @@
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
 CONFIG_BSD_PROCESS_ACCT=y
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 # CONFIG_IKCONFIG is not set
@@ -30,6 +32,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -289,8 +292,6 @@
 # CONFIG_INET_ESP is not set
 # CONFIG_INET_IPCOMP is not set
 # CONFIG_IPV6 is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 # CONFIG_NETFILTER is not set
 CONFIG_XFRM=y
 # CONFIG_XFRM_USER is not set
@@ -300,7 +301,9 @@
 #
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -321,12 +324,12 @@
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
 # CONFIG_EQUALIZER is not set
@@ -334,6 +337,11 @@
 # CONFIG_ETHERTAP is not set
 
 #
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
 # Ethernet (10 or 100Mbit)
 #
 CONFIG_NET_ETHERNET=y
@@ -360,7 +368,6 @@
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
 # CONFIG_R8169 is not set
-# CONFIG_SIS190 is not set
 # CONFIG_SK98LIN is not set
 # CONFIG_TIGON3 is not set
 
@@ -368,45 +375,29 @@
 # Ethernet (10000 Mbit)
 #
 # CONFIG_IXGB is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
+# CONFIG_S2IO is not set
 
 #
 # Token Ring devices
 #
 # CONFIG_TR is not set
-# CONFIG_NET_FC is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
 
 #
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
+# Wireless LAN (non-hamradio)
 #
-# CONFIG_IRDA is not set
+# CONFIG_NET_RADIO is not set
 
 #
-# Bluetooth support
+# Wan interfaces
 #
-# CONFIG_BT is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NET_FC is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # ISDN subsystem
@@ -583,6 +574,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 CONFIG_DEVPTS_FS_XATTR=y
 CONFIG_DEVPTS_FS_SECURITY=y
diff -Nru a/arch/mips/configs/it8172_defconfig b/arch/mips/configs/it8172_defconfig
--- a/arch/mips/configs/it8172_defconfig	Sun May 16 01:18:34 2004
+++ b/arch/mips/configs/it8172_defconfig	Sun May 16 01:18:34 2004
@@ -19,8 +19,10 @@
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
 CONFIG_BSD_PROCESS_ACCT=y
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 # CONFIG_IKCONFIG is not set
@@ -31,6 +33,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -294,8 +297,6 @@
 # CONFIG_INET_ESP is not set
 # CONFIG_INET_IPCOMP is not set
 # CONFIG_IPV6 is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 # CONFIG_NETFILTER is not set
 CONFIG_XFRM=y
 # CONFIG_XFRM_USER is not set
@@ -305,7 +306,9 @@
 #
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -326,6 +329,11 @@
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
@@ -346,41 +354,24 @@
 #
 # Ethernet (10000 Mbit)
 #
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
 
 #
-# Wireless LAN (non-hamradio)
+# Token Ring devices
 #
-# CONFIG_NET_RADIO is not set
 
 #
-# Token Ring devices
+# Wireless LAN (non-hamradio)
 #
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
+# CONFIG_NET_RADIO is not set
 
 #
 # Wan interfaces
 #
 # CONFIG_WAN is not set
-
-#
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-# CONFIG_IRDA is not set
-
-#
-# Bluetooth support
-#
-# CONFIG_BT is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # ISDN subsystem
@@ -580,6 +571,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 CONFIG_DEVPTS_FS_XATTR=y
 CONFIG_DEVPTS_FS_SECURITY=y
diff -Nru a/arch/mips/configs/ivr_defconfig b/arch/mips/configs/ivr_defconfig
--- a/arch/mips/configs/ivr_defconfig	Sun May 16 01:18:34 2004
+++ b/arch/mips/configs/ivr_defconfig	Sun May 16 01:18:34 2004
@@ -19,8 +19,10 @@
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
 CONFIG_BSD_PROCESS_ACCT=y
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 # CONFIG_IKCONFIG is not set
@@ -31,6 +33,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -245,8 +248,6 @@
 # CONFIG_INET_ESP is not set
 # CONFIG_INET_IPCOMP is not set
 # CONFIG_IPV6 is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 # CONFIG_NETFILTER is not set
 CONFIG_XFRM=y
 # CONFIG_XFRM_USER is not set
@@ -256,7 +257,9 @@
 #
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -277,12 +280,12 @@
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
 # CONFIG_EQUALIZER is not set
@@ -290,6 +293,11 @@
 # CONFIG_ETHERTAP is not set
 
 #
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
 # Ethernet (10 or 100Mbit)
 #
 CONFIG_NET_ETHERNET=y
@@ -315,7 +323,6 @@
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
 # CONFIG_R8169 is not set
-# CONFIG_SIS190 is not set
 # CONFIG_SK98LIN is not set
 # CONFIG_TIGON3 is not set
 
@@ -323,45 +330,29 @@
 # Ethernet (10000 Mbit)
 #
 # CONFIG_IXGB is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
+# CONFIG_S2IO is not set
 
 #
 # Token Ring devices
 #
 # CONFIG_TR is not set
-# CONFIG_RCPCI is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
 
 #
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
+# Wireless LAN (non-hamradio)
 #
-# CONFIG_IRDA is not set
+# CONFIG_NET_RADIO is not set
 
 #
-# Bluetooth support
+# Wan interfaces
 #
-# CONFIG_BT is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_RCPCI is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # ISDN subsystem
@@ -538,6 +529,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 CONFIG_DEVPTS_FS_XATTR=y
 CONFIG_DEVPTS_FS_SECURITY=y
diff -Nru a/arch/mips/configs/jaguar-atx_defconfig b/arch/mips/configs/jaguar-atx_defconfig
--- a/arch/mips/configs/jaguar-atx_defconfig	Sun May 16 01:18:36 2004
+++ b/arch/mips/configs/jaguar-atx_defconfig	Sun May 16 01:18:36 2004
@@ -21,6 +21,7 @@
 CONFIG_SYSVIPC=y
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 CONFIG_IKCONFIG=y
@@ -32,6 +33,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -219,10 +221,10 @@
 # CONFIG_INET_AH is not set
 # CONFIG_INET_ESP is not set
 # CONFIG_INET_IPCOMP is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 # CONFIG_NETFILTER is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -236,16 +238,21 @@
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
 
 #
 # ARCnet devices
 #
 # CONFIG_ARCNET is not set
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
 
 #
 # Ethernet (10 or 100Mbit)
@@ -299,14 +306,7 @@
 # Ethernet (10000 Mbit)
 #
 # CONFIG_IXGB is not set
-# CONFIG_FDDI is not set
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
+# CONFIG_S2IO is not set
 
 #
 # Token Ring devices
@@ -314,26 +314,17 @@
 # CONFIG_TR is not set
 
 #
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-
-#
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
+# Wireless LAN (non-hamradio)
 #
-# CONFIG_IRDA is not set
+# CONFIG_NET_RADIO is not set
 
 #
-# Bluetooth support
+# Wan interfaces
 #
-# CONFIG_BT is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
 
 #
 # ISDN subsystem
@@ -483,6 +474,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVPTS_FS_XATTR is not set
 # CONFIG_TMPFS is not set
 # CONFIG_HUGETLB_PAGE is not set
diff -Nru a/arch/mips/configs/jmr3927_defconfig b/arch/mips/configs/jmr3927_defconfig
--- a/arch/mips/configs/jmr3927_defconfig	Sun May 16 01:18:34 2004
+++ b/arch/mips/configs/jmr3927_defconfig	Sun May 16 01:18:34 2004
@@ -19,8 +19,10 @@
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 # CONFIG_IKCONFIG is not set
@@ -31,6 +33,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -219,8 +222,6 @@
 # CONFIG_INET_ESP is not set
 # CONFIG_INET_IPCOMP is not set
 # CONFIG_IPV6 is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 # CONFIG_NETFILTER is not set
 CONFIG_XFRM=y
 # CONFIG_XFRM_USER is not set
@@ -230,7 +231,9 @@
 #
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -251,12 +254,12 @@
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
 # CONFIG_EQUALIZER is not set
@@ -264,6 +267,11 @@
 # CONFIG_ETHERTAP is not set
 
 #
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
 # Ethernet (10 or 100Mbit)
 #
 CONFIG_NET_ETHERNET=y
@@ -289,7 +297,6 @@
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
 # CONFIG_R8169 is not set
-# CONFIG_SIS190 is not set
 # CONFIG_SK98LIN is not set
 # CONFIG_TIGON3 is not set
 
@@ -297,45 +304,29 @@
 # Ethernet (10000 Mbit)
 #
 # CONFIG_IXGB is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
+# CONFIG_S2IO is not set
 
 #
 # Token Ring devices
 #
 # CONFIG_TR is not set
-# CONFIG_RCPCI is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
 
 #
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
+# Wireless LAN (non-hamradio)
 #
-# CONFIG_IRDA is not set
+# CONFIG_NET_RADIO is not set
 
 #
-# Bluetooth support
+# Wan interfaces
 #
-# CONFIG_BT is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_RCPCI is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # ISDN subsystem
@@ -547,6 +538,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 # CONFIG_TMPFS is not set
 # CONFIG_HUGETLB_PAGE is not set
diff -Nru a/arch/mips/configs/lasat200_defconfig b/arch/mips/configs/lasat200_defconfig
--- a/arch/mips/configs/lasat200_defconfig	Sun May 16 01:18:35 2004
+++ b/arch/mips/configs/lasat200_defconfig	Sun May 16 01:18:35 2004
@@ -19,8 +19,10 @@
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 # CONFIG_IKCONFIG is not set
@@ -31,6 +33,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -334,8 +337,6 @@
 # CONFIG_INET_ESP is not set
 # CONFIG_INET_IPCOMP is not set
 # CONFIG_IPV6 is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 # CONFIG_NETFILTER is not set
 CONFIG_XFRM=y
 # CONFIG_XFRM_USER is not set
@@ -345,7 +346,9 @@
 #
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -366,16 +369,21 @@
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
 
 #
 # ARCnet devices
 #
 # CONFIG_ARCNET is not set
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
 
 #
 # Ethernet (10 or 100Mbit)
@@ -403,7 +411,6 @@
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
 # CONFIG_R8169 is not set
-# CONFIG_SIS190 is not set
 # CONFIG_SK98LIN is not set
 # CONFIG_TIGON3 is not set
 
@@ -411,45 +418,29 @@
 # Ethernet (10000 Mbit)
 #
 # CONFIG_IXGB is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
+# CONFIG_S2IO is not set
 
 #
 # Token Ring devices
 #
 # CONFIG_TR is not set
-# CONFIG_RCPCI is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
 
 #
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
+# Wireless LAN (non-hamradio)
 #
-# CONFIG_IRDA is not set
+# CONFIG_NET_RADIO is not set
 
 #
-# Bluetooth support
+# Wan interfaces
 #
-# CONFIG_BT is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_RCPCI is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # ISDN subsystem
@@ -630,6 +621,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 CONFIG_DEVPTS_FS_XATTR=y
 CONFIG_DEVPTS_FS_SECURITY=y
diff -Nru a/arch/mips/configs/malta_defconfig b/arch/mips/configs/malta_defconfig
--- a/arch/mips/configs/malta_defconfig	Sun May 16 01:18:36 2004
+++ b/arch/mips/configs/malta_defconfig	Sun May 16 01:18:36 2004
@@ -19,8 +19,10 @@
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 # CONFIG_IKCONFIG is not set
@@ -31,6 +33,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -233,8 +236,6 @@
 # CONFIG_INET_ESP is not set
 # CONFIG_INET_IPCOMP is not set
 # CONFIG_IPV6 is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 # CONFIG_NETFILTER is not set
 CONFIG_XFRM=y
 # CONFIG_XFRM_USER is not set
@@ -244,7 +245,9 @@
 #
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -265,12 +268,12 @@
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
 # CONFIG_EQUALIZER is not set
@@ -278,6 +281,11 @@
 # CONFIG_ETHERTAP is not set
 
 #
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
 # Ethernet (10 or 100Mbit)
 #
 CONFIG_NET_ETHERNET=y
@@ -322,7 +330,6 @@
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
 # CONFIG_R8169 is not set
-# CONFIG_SIS190 is not set
 # CONFIG_SK98LIN is not set
 # CONFIG_TIGON3 is not set
 
@@ -330,45 +337,29 @@
 # Ethernet (10000 Mbit)
 #
 # CONFIG_IXGB is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
+# CONFIG_S2IO is not set
 
 #
 # Token Ring devices
 #
 # CONFIG_TR is not set
-# CONFIG_RCPCI is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
 
 #
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
+# Wireless LAN (non-hamradio)
 #
-# CONFIG_IRDA is not set
+# CONFIG_NET_RADIO is not set
 
 #
-# Bluetooth support
+# Wan interfaces
 #
-# CONFIG_BT is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_RCPCI is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # ISDN subsystem
@@ -543,6 +534,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 CONFIG_DEVPTS_FS_XATTR=y
 CONFIG_DEVPTS_FS_SECURITY=y
diff -Nru a/arch/mips/configs/mirage_defconfig b/arch/mips/configs/mirage_defconfig
--- a/arch/mips/configs/mirage_defconfig	Sun May 16 01:18:36 2004
+++ b/arch/mips/configs/mirage_defconfig	Sun May 16 01:18:36 2004
@@ -19,8 +19,10 @@
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=14
 CONFIG_HOTPLUG=y
 # CONFIG_IKCONFIG is not set
@@ -31,6 +33,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -231,8 +234,6 @@
 #
 # CONFIG_IP_VS is not set
 # CONFIG_IPV6 is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 CONFIG_NETFILTER=y
 # CONFIG_NETFILTER_DEBUG is not set
 
@@ -253,7 +254,9 @@
 #
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -274,6 +277,11 @@
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
@@ -294,31 +302,15 @@
 #
 # Ethernet (10000 Mbit)
 #
-CONFIG_PPP=m
-CONFIG_PPP_MULTILINK=y
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-# CONFIG_PPP_BSDCOMP is not set
-CONFIG_PPPOE=m
-# CONFIG_SLIP is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
 
 #
 # Token Ring devices
 #
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
 
 #
-# Wan interfaces
+# Wireless LAN (non-hamradio)
 #
-# CONFIG_WAN is not set
+# CONFIG_NET_RADIO is not set
 
 #
 # PCMCIA network device support
@@ -334,21 +326,20 @@
 # CONFIG_PCMCIA_AXNET is not set
 
 #
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-# CONFIG_IRDA is not set
-
-#
-# Bluetooth support
+# Wan interfaces
 #
-# CONFIG_BT is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+# CONFIG_PPP_BSDCOMP is not set
+CONFIG_PPPOE=m
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # ISDN subsystem
@@ -531,6 +522,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 CONFIG_DEVPTS_FS_XATTR=y
 CONFIG_DEVPTS_FS_SECURITY=y
diff -Nru a/arch/mips/configs/mpc30x_defconfig b/arch/mips/configs/mpc30x_defconfig
--- a/arch/mips/configs/mpc30x_defconfig	Sun May 16 01:18:36 2004
+++ b/arch/mips/configs/mpc30x_defconfig	Sun May 16 01:18:36 2004
@@ -19,8 +19,10 @@
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 # CONFIG_IKCONFIG is not set
@@ -31,6 +33,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -56,6 +59,7 @@
 # CONFIG_TANBAC_TB0229 is not set
 CONFIG_VICTOR_MPC30X=y
 # CONFIG_ZAO_CAPCELLA is not set
+CONFIG_VRC4173=y
 # CONFIG_TOSHIBA_JMR3927 is not set
 # CONFIG_MIPS_COBALT is not set
 # CONFIG_MACH_DECSTATION is not set
@@ -88,7 +92,6 @@
 CONFIG_CPU_LITTLE_ENDIAN=y
 CONFIG_IRQ_CPU=y
 CONFIG_DUMMY_KEYB=y
-CONFIG_VRC4173=y
 CONFIG_MIPS_L1_CACHE_SHIFT=5
 # CONFIG_FB is not set
 
@@ -123,7 +126,9 @@
 #
 # Bus options (PCI, PCMCIA, EISA, ISA, TC)
 #
-# CONFIG_PCI is not set
+CONFIG_PCI=y
+CONFIG_PCI_LEGACY_PROC=y
+CONFIG_PCI_NAMES=y
 CONFIG_MMU=y
 
 #
@@ -159,8 +164,13 @@
 # Block devices
 #
 # CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
 # CONFIG_BLK_DEV_LOOP is not set
 # CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_CARMEL is not set
 # CONFIG_BLK_DEV_RAM is not set
 # CONFIG_LBD is not set
 
@@ -182,6 +192,7 @@
 #
 # Fusion MPT device support
 #
+# CONFIG_FUSION is not set
 
 #
 # IEEE 1394 (FireWire) support
@@ -191,6 +202,7 @@
 #
 # I2O device support
 #
+# CONFIG_I2O is not set
 
 #
 # Networking support
@@ -221,8 +233,6 @@
 # CONFIG_INET_ESP is not set
 # CONFIG_INET_IPCOMP is not set
 # CONFIG_IPV6 is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 # CONFIG_NETFILTER is not set
 CONFIG_XFRM=y
 # CONFIG_XFRM_USER is not set
@@ -232,7 +242,9 @@
 #
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -253,6 +265,11 @@
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
@@ -261,53 +278,66 @@
 # CONFIG_ETHERTAP is not set
 
 #
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
 # Ethernet (10 or 100Mbit)
 #
 CONFIG_NET_ETHERNET=y
 # CONFIG_MII is not set
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_NET_VENDOR_3COM is not set
 
 #
-# Ethernet (1000 Mbit)
+# Tulip family network device support
 #
+# CONFIG_NET_TULIP is not set
+# CONFIG_HP100 is not set
+# CONFIG_NET_PCI is not set
 
 #
-# Ethernet (10000 Mbit)
+# Ethernet (1000 Mbit)
 #
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_E1000 is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_R8169 is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_TIGON3 is not set
 
 #
-# Wireless LAN (non-hamradio)
+# Ethernet (10000 Mbit)
 #
-# CONFIG_NET_RADIO is not set
+# CONFIG_IXGB is not set
+# CONFIG_S2IO is not set
 
 #
 # Token Ring devices
 #
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
+# CONFIG_TR is not set
 
 #
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
+# Wireless LAN (non-hamradio)
 #
-# CONFIG_IRDA is not set
+# CONFIG_NET_RADIO is not set
 
 #
-# Bluetooth support
+# Wan interfaces
 #
-# CONFIG_BT is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_RCPCI is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # ISDN subsystem
@@ -345,6 +375,7 @@
 CONFIG_SERIO_I8042=y
 CONFIG_SERIO_SERPORT=y
 # CONFIG_SERIO_CT82C710 is not set
+# CONFIG_SERIO_PCIPS2 is not set
 
 #
 # Input Device Drivers
@@ -442,6 +473,7 @@
 #
 # USB support
 #
+# CONFIG_USB is not set
 
 #
 # USB Gadget Support
@@ -481,6 +513,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 CONFIG_DEVPTS_FS_XATTR=y
 CONFIG_DEVPTS_FS_SECURITY=y
diff -Nru a/arch/mips/configs/mtx1_defconfig b/arch/mips/configs/mtx1_defconfig
--- a/arch/mips/configs/mtx1_defconfig	Sun May 16 01:18:35 2004
+++ b/arch/mips/configs/mtx1_defconfig	Sun May 16 01:18:35 2004
@@ -19,8 +19,10 @@
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=14
 CONFIG_HOTPLUG=y
 # CONFIG_IKCONFIG is not set
@@ -31,6 +33,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -231,8 +234,6 @@
 #
 # CONFIG_IP_VS is not set
 # CONFIG_IPV6 is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 CONFIG_NETFILTER=y
 # CONFIG_NETFILTER_DEBUG is not set
 
@@ -253,7 +254,9 @@
 #
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -274,6 +277,11 @@
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
@@ -294,31 +302,15 @@
 #
 # Ethernet (10000 Mbit)
 #
-CONFIG_PPP=m
-CONFIG_PPP_MULTILINK=y
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-# CONFIG_PPP_BSDCOMP is not set
-CONFIG_PPPOE=m
-# CONFIG_SLIP is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
 
 #
 # Token Ring devices
 #
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
 
 #
-# Wan interfaces
+# Wireless LAN (non-hamradio)
 #
-# CONFIG_WAN is not set
+# CONFIG_NET_RADIO is not set
 
 #
 # PCMCIA network device support
@@ -334,21 +326,20 @@
 # CONFIG_PCMCIA_AXNET is not set
 
 #
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-# CONFIG_IRDA is not set
-
-#
-# Bluetooth support
+# Wan interfaces
 #
-# CONFIG_BT is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+# CONFIG_PPP_BSDCOMP is not set
+CONFIG_PPPOE=m
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # ISDN subsystem
@@ -531,6 +522,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 CONFIG_DEVPTS_FS_XATTR=y
 CONFIG_DEVPTS_FS_SECURITY=y
diff -Nru a/arch/mips/configs/ocelot_c_defconfig b/arch/mips/configs/ocelot_c_defconfig
--- a/arch/mips/configs/ocelot_c_defconfig	Sun May 16 01:18:34 2004
+++ b/arch/mips/configs/ocelot_c_defconfig	Sun May 16 01:18:34 2004
@@ -18,8 +18,10 @@
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 # CONFIG_IKCONFIG is not set
@@ -30,6 +32,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -210,8 +213,6 @@
 # CONFIG_INET_ESP is not set
 # CONFIG_INET_IPCOMP is not set
 # CONFIG_IPV6 is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 # CONFIG_NETFILTER is not set
 CONFIG_XFRM=y
 # CONFIG_XFRM_USER is not set
@@ -221,7 +222,9 @@
 #
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -242,6 +245,11 @@
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
@@ -266,41 +274,24 @@
 #
 # Ethernet (10000 Mbit)
 #
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
 
 #
-# Wireless LAN (non-hamradio)
+# Token Ring devices
 #
-# CONFIG_NET_RADIO is not set
 
 #
-# Token Ring devices
+# Wireless LAN (non-hamradio)
 #
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
+# CONFIG_NET_RADIO is not set
 
 #
 # Wan interfaces
 #
 # CONFIG_WAN is not set
-
-#
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-# CONFIG_IRDA is not set
-
-#
-# Bluetooth support
-#
-# CONFIG_BT is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # ISDN subsystem
@@ -474,6 +465,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 CONFIG_DEVPTS_FS_XATTR=y
 CONFIG_DEVPTS_FS_SECURITY=y
diff -Nru a/arch/mips/configs/ocelot_defconfig b/arch/mips/configs/ocelot_defconfig
--- a/arch/mips/configs/ocelot_defconfig	Sun May 16 01:18:34 2004
+++ b/arch/mips/configs/ocelot_defconfig	Sun May 16 01:18:34 2004
@@ -19,8 +19,10 @@
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 # CONFIG_IKCONFIG is not set
@@ -31,6 +33,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -218,8 +221,6 @@
 # CONFIG_INET_ESP is not set
 # CONFIG_INET_IPCOMP is not set
 # CONFIG_IPV6 is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 # CONFIG_NETFILTER is not set
 CONFIG_XFRM=y
 # CONFIG_XFRM_USER is not set
@@ -229,7 +230,9 @@
 #
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -250,6 +253,11 @@
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
@@ -270,41 +278,24 @@
 #
 # Ethernet (10000 Mbit)
 #
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
 
 #
-# Wireless LAN (non-hamradio)
+# Token Ring devices
 #
-# CONFIG_NET_RADIO is not set
 
 #
-# Token Ring devices
+# Wireless LAN (non-hamradio)
 #
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
+# CONFIG_NET_RADIO is not set
 
 #
 # Wan interfaces
 #
 # CONFIG_WAN is not set
-
-#
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-# CONFIG_IRDA is not set
-
-#
-# Bluetooth support
-#
-# CONFIG_BT is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # ISDN subsystem
@@ -478,6 +469,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 CONFIG_DEVPTS_FS_XATTR=y
 CONFIG_DEVPTS_FS_SECURITY=y
diff -Nru a/arch/mips/configs/osprey_defconfig b/arch/mips/configs/osprey_defconfig
--- a/arch/mips/configs/osprey_defconfig	Sun May 16 01:18:33 2004
+++ b/arch/mips/configs/osprey_defconfig	Sun May 16 01:18:33 2004
@@ -19,8 +19,10 @@
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 # CONFIG_IKCONFIG is not set
@@ -31,6 +33,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -212,8 +215,6 @@
 # CONFIG_INET_ESP is not set
 # CONFIG_INET_IPCOMP is not set
 # CONFIG_IPV6 is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 # CONFIG_NETFILTER is not set
 CONFIG_XFRM=y
 # CONFIG_XFRM_USER is not set
@@ -223,7 +224,9 @@
 #
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -244,6 +247,11 @@
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
@@ -264,41 +272,24 @@
 #
 # Ethernet (10000 Mbit)
 #
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
 
 #
-# Wireless LAN (non-hamradio)
+# Token Ring devices
 #
-# CONFIG_NET_RADIO is not set
 
 #
-# Token Ring devices
+# Wireless LAN (non-hamradio)
 #
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
+# CONFIG_NET_RADIO is not set
 
 #
 # Wan interfaces
 #
 # CONFIG_WAN is not set
-
-#
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-# CONFIG_IRDA is not set
-
-#
-# Bluetooth support
-#
-# CONFIG_BT is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # ISDN subsystem
@@ -472,6 +463,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 CONFIG_DEVPTS_FS_XATTR=y
 CONFIG_DEVPTS_FS_SECURITY=y
diff -Nru a/arch/mips/configs/pb1000_defconfig b/arch/mips/configs/pb1000_defconfig
--- a/arch/mips/configs/pb1000_defconfig	Sun May 16 01:18:33 2004
+++ b/arch/mips/configs/pb1000_defconfig	Sun May 16 01:18:33 2004
@@ -19,8 +19,10 @@
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=14
 CONFIG_HOTPLUG=y
 # CONFIG_IKCONFIG is not set
@@ -31,6 +33,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -231,8 +234,6 @@
 #
 # CONFIG_IP_VS is not set
 # CONFIG_IPV6 is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 CONFIG_NETFILTER=y
 # CONFIG_NETFILTER_DEBUG is not set
 
@@ -253,7 +254,9 @@
 #
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -274,6 +277,11 @@
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
@@ -294,31 +302,15 @@
 #
 # Ethernet (10000 Mbit)
 #
-CONFIG_PPP=m
-CONFIG_PPP_MULTILINK=y
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-# CONFIG_PPP_BSDCOMP is not set
-CONFIG_PPPOE=m
-# CONFIG_SLIP is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
 
 #
 # Token Ring devices
 #
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
 
 #
-# Wan interfaces
+# Wireless LAN (non-hamradio)
 #
-# CONFIG_WAN is not set
+# CONFIG_NET_RADIO is not set
 
 #
 # PCMCIA network device support
@@ -334,21 +326,20 @@
 # CONFIG_PCMCIA_AXNET is not set
 
 #
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-# CONFIG_IRDA is not set
-
-#
-# Bluetooth support
+# Wan interfaces
 #
-# CONFIG_BT is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+# CONFIG_PPP_BSDCOMP is not set
+CONFIG_PPPOE=m
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # ISDN subsystem
@@ -531,6 +522,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 CONFIG_DEVPTS_FS_XATTR=y
 CONFIG_DEVPTS_FS_SECURITY=y
diff -Nru a/arch/mips/configs/pb1100_defconfig b/arch/mips/configs/pb1100_defconfig
--- a/arch/mips/configs/pb1100_defconfig	Sun May 16 01:18:35 2004
+++ b/arch/mips/configs/pb1100_defconfig	Sun May 16 01:18:35 2004
@@ -19,8 +19,10 @@
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=14
 CONFIG_HOTPLUG=y
 # CONFIG_IKCONFIG is not set
@@ -31,6 +33,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -231,8 +234,6 @@
 #
 # CONFIG_IP_VS is not set
 # CONFIG_IPV6 is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 CONFIG_NETFILTER=y
 # CONFIG_NETFILTER_DEBUG is not set
 
@@ -253,7 +254,9 @@
 #
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -274,6 +277,11 @@
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
@@ -294,31 +302,15 @@
 #
 # Ethernet (10000 Mbit)
 #
-CONFIG_PPP=m
-CONFIG_PPP_MULTILINK=y
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-# CONFIG_PPP_BSDCOMP is not set
-CONFIG_PPPOE=m
-# CONFIG_SLIP is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
 
 #
 # Token Ring devices
 #
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
 
 #
-# Wan interfaces
+# Wireless LAN (non-hamradio)
 #
-# CONFIG_WAN is not set
+# CONFIG_NET_RADIO is not set
 
 #
 # PCMCIA network device support
@@ -334,21 +326,20 @@
 # CONFIG_PCMCIA_AXNET is not set
 
 #
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-# CONFIG_IRDA is not set
-
-#
-# Bluetooth support
+# Wan interfaces
 #
-# CONFIG_BT is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+# CONFIG_PPP_BSDCOMP is not set
+CONFIG_PPPOE=m
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # ISDN subsystem
@@ -531,6 +522,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 CONFIG_DEVPTS_FS_XATTR=y
 CONFIG_DEVPTS_FS_SECURITY=y
diff -Nru a/arch/mips/configs/pb1500_defconfig b/arch/mips/configs/pb1500_defconfig
--- a/arch/mips/configs/pb1500_defconfig	Sun May 16 01:18:34 2004
+++ b/arch/mips/configs/pb1500_defconfig	Sun May 16 01:18:34 2004
@@ -19,8 +19,10 @@
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=14
 CONFIG_HOTPLUG=y
 # CONFIG_IKCONFIG is not set
@@ -31,6 +33,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -315,8 +318,6 @@
 #
 # CONFIG_IP_VS is not set
 # CONFIG_IPV6 is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 CONFIG_NETFILTER=y
 # CONFIG_NETFILTER_DEBUG is not set
 
@@ -337,7 +338,9 @@
 #
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -358,12 +361,12 @@
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
 # CONFIG_EQUALIZER is not set
@@ -371,6 +374,11 @@
 # CONFIG_ETHERTAP is not set
 
 #
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
 # Ethernet (10 or 100Mbit)
 #
 CONFIG_NET_ETHERNET=y
@@ -397,7 +405,6 @@
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
 # CONFIG_R8169 is not set
-# CONFIG_SIS190 is not set
 # CONFIG_SK98LIN is not set
 # CONFIG_TIGON3 is not set
 
@@ -405,35 +412,17 @@
 # Ethernet (10000 Mbit)
 #
 # CONFIG_IXGB is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-CONFIG_PPP=m
-CONFIG_PPP_MULTILINK=y
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-# CONFIG_PPP_BSDCOMP is not set
-CONFIG_PPPOE=m
-# CONFIG_SLIP is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
+# CONFIG_S2IO is not set
 
 #
 # Token Ring devices
 #
 # CONFIG_TR is not set
-# CONFIG_RCPCI is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
 
 #
-# Wan interfaces
+# Wireless LAN (non-hamradio)
 #
-# CONFIG_WAN is not set
+# CONFIG_NET_RADIO is not set
 
 #
 # PCMCIA network device support
@@ -449,21 +438,23 @@
 # CONFIG_PCMCIA_AXNET is not set
 
 #
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-# CONFIG_IRDA is not set
-
-#
-# Bluetooth support
+# Wan interfaces
 #
-# CONFIG_BT is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+# CONFIG_PPP_BSDCOMP is not set
+CONFIG_PPPOE=m
+# CONFIG_SLIP is not set
+# CONFIG_RCPCI is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # ISDN subsystem
@@ -646,6 +637,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 CONFIG_DEVPTS_FS_XATTR=y
 CONFIG_DEVPTS_FS_SECURITY=y
diff -Nru a/arch/mips/configs/pb1550_defconfig b/arch/mips/configs/pb1550_defconfig
--- a/arch/mips/configs/pb1550_defconfig	Sun May 16 01:18:34 2004
+++ b/arch/mips/configs/pb1550_defconfig	Sun May 16 01:18:34 2004
@@ -19,8 +19,10 @@
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=14
 CONFIG_HOTPLUG=y
 # CONFIG_IKCONFIG is not set
@@ -31,6 +33,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -314,8 +317,6 @@
 #
 # CONFIG_IP_VS is not set
 # CONFIG_IPV6 is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 CONFIG_NETFILTER=y
 # CONFIG_NETFILTER_DEBUG is not set
 
@@ -336,7 +337,9 @@
 #
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -357,12 +360,12 @@
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
 # CONFIG_EQUALIZER is not set
@@ -370,6 +373,11 @@
 # CONFIG_ETHERTAP is not set
 
 #
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
 # Ethernet (10 or 100Mbit)
 #
 CONFIG_NET_ETHERNET=y
@@ -396,7 +404,6 @@
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
 # CONFIG_R8169 is not set
-# CONFIG_SIS190 is not set
 # CONFIG_SK98LIN is not set
 # CONFIG_TIGON3 is not set
 
@@ -404,35 +411,17 @@
 # Ethernet (10000 Mbit)
 #
 # CONFIG_IXGB is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-CONFIG_PPP=m
-CONFIG_PPP_MULTILINK=y
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-# CONFIG_PPP_BSDCOMP is not set
-CONFIG_PPPOE=m
-# CONFIG_SLIP is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
+# CONFIG_S2IO is not set
 
 #
 # Token Ring devices
 #
 # CONFIG_TR is not set
-# CONFIG_RCPCI is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
 
 #
-# Wan interfaces
+# Wireless LAN (non-hamradio)
 #
-# CONFIG_WAN is not set
+# CONFIG_NET_RADIO is not set
 
 #
 # PCMCIA network device support
@@ -448,21 +437,23 @@
 # CONFIG_PCMCIA_AXNET is not set
 
 #
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-# CONFIG_IRDA is not set
-
-#
-# Bluetooth support
+# Wan interfaces
 #
-# CONFIG_BT is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+# CONFIG_PPP_BSDCOMP is not set
+CONFIG_PPPOE=m
+# CONFIG_SLIP is not set
+# CONFIG_RCPCI is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # ISDN subsystem
@@ -645,6 +636,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 CONFIG_DEVPTS_FS_XATTR=y
 CONFIG_DEVPTS_FS_SECURITY=y
diff -Nru a/arch/mips/configs/rm200_defconfig b/arch/mips/configs/rm200_defconfig
--- a/arch/mips/configs/rm200_defconfig	Sun May 16 01:18:34 2004
+++ b/arch/mips/configs/rm200_defconfig	Sun May 16 01:18:34 2004
@@ -19,8 +19,10 @@
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+CONFIG_POSIX_MQUEUE=y
 CONFIG_BSD_PROCESS_ACCT=y
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 CONFIG_IKCONFIG=y
@@ -32,6 +34,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -250,7 +253,7 @@
 #
 # SCSI Transport Attributes
 #
-CONFIG_SCSI_SPI_ATTRS=m
+CONFIG_SCSI_SPI_ATTRS=y
 # CONFIG_SCSI_FC_ATTRS is not set
 
 #
@@ -385,10 +388,6 @@
 CONFIG_INET6_ESP=m
 CONFIG_INET6_IPCOMP=m
 CONFIG_IPV6_TUNNEL=m
-CONFIG_DECNET=m
-# CONFIG_DECNET_SIOCGIFCONF is not set
-# CONFIG_DECNET_ROUTER is not set
-CONFIG_BRIDGE=m
 CONFIG_NETFILTER=y
 # CONFIG_NETFILTER_DEBUG is not set
 CONFIG_BRIDGE_NETFILTER=y
@@ -450,6 +449,8 @@
 CONFIG_IP_NF_ARP_MANGLE=m
 CONFIG_IP_NF_COMPAT_IPCHAINS=m
 CONFIG_IP_NF_COMPAT_IPFWADM=m
+CONFIG_IP_NF_TARGET_NOTRACK=m
+CONFIG_IP_NF_RAW=m
 
 #
 # IPv6: Netfilter Configuration
@@ -473,6 +474,7 @@
 CONFIG_IP6_NF_TARGET_LOG=m
 CONFIG_IP6_NF_MANGLE=m
 CONFIG_IP6_NF_TARGET_MARK=m
+CONFIG_IP6_NF_RAW=m
 
 #
 # DECnet: Netfilter Configuration
@@ -509,7 +511,11 @@
 #
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+CONFIG_BRIDGE=m
 # CONFIG_VLAN_8021Q is not set
+CONFIG_DECNET=m
+# CONFIG_DECNET_SIOCGIFCONF is not set
+# CONFIG_DECNET_ROUTER is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -554,12 +560,34 @@
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
-CONFIG_NETDEVICES=y
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+CONFIG_HAMRADIO=y
 
 #
-# ARCnet devices
+# Packet Radio protocols
 #
-# CONFIG_ARCNET is not set
+CONFIG_AX25=m
+CONFIG_AX25_DAMA_SLAVE=y
+CONFIG_NETROM=m
+CONFIG_ROSE=m
+
+#
+# AX.25 network device drivers
+#
+CONFIG_MKISS=m
+CONFIG_6PACK=m
+CONFIG_BPQETHER=m
+# CONFIG_DMASCC is not set
+# CONFIG_SCC is not set
+# CONFIG_BAYCOM_SER_FDX is not set
+# CONFIG_BAYCOM_SER_HDX is not set
+# CONFIG_BAYCOM_PAR is not set
+# CONFIG_BAYCOM_EPP is not set
+# CONFIG_YAM is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+CONFIG_NETDEVICES=y
 CONFIG_DUMMY=m
 CONFIG_BONDING=m
 CONFIG_EQUALIZER=m
@@ -567,6 +595,11 @@
 CONFIG_ETHERTAP=m
 
 #
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
 # Ethernet (10 or 100Mbit)
 #
 CONFIG_NET_ETHERNET=y
@@ -633,7 +666,6 @@
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
 # CONFIG_R8169 is not set
-# CONFIG_SIS190 is not set
 # CONFIG_SK98LIN is not set
 # CONFIG_TIGON3 is not set
 
@@ -641,11 +673,12 @@
 # Ethernet (10000 Mbit)
 #
 # CONFIG_IXGB is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-CONFIG_PLIP=m
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
+# CONFIG_S2IO is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
 
 #
 # Wireless LAN (non-hamradio)
@@ -653,59 +686,20 @@
 # CONFIG_NET_RADIO is not set
 
 #
-# Token Ring devices
+# Wan interfaces
 #
-# CONFIG_TR is not set
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+CONFIG_PLIP=m
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
 # CONFIG_NET_FC is not set
 # CONFIG_RCPCI is not set
 # CONFIG_SHAPER is not set
 # CONFIG_NETCONSOLE is not set
 
 #
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-
-#
-# Amateur Radio support
-#
-CONFIG_HAMRADIO=y
-
-#
-# Packet Radio protocols
-#
-CONFIG_AX25=m
-CONFIG_AX25_DAMA_SLAVE=y
-CONFIG_NETROM=m
-CONFIG_ROSE=m
-
-#
-# AX.25 network device drivers
-#
-# CONFIG_MKISS is not set
-# CONFIG_6PACK is not set
-CONFIG_BPQETHER=m
-# CONFIG_DMASCC is not set
-# CONFIG_SCC is not set
-# CONFIG_BAYCOM_SER_FDX is not set
-# CONFIG_BAYCOM_SER_HDX is not set
-# CONFIG_BAYCOM_PAR is not set
-# CONFIG_BAYCOM_EPP is not set
-# CONFIG_YAM is not set
-
-#
-# IrDA (infrared) support
-#
-# CONFIG_IRDA is not set
-
-#
-# Bluetooth support
-#
-# CONFIG_BT is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
 # ISDN subsystem
 #
 # CONFIG_ISDN is not set
@@ -873,6 +867,7 @@
 #
 CONFIG_USB_EHCI_HCD=m
 # CONFIG_USB_EHCI_SPLIT_ISO is not set
+# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
 CONFIG_USB_OHCI_HCD=m
 CONFIG_USB_UHCI_HCD=m
 
@@ -1019,7 +1014,8 @@
 CONFIG_USB_RIO500=m
 CONFIG_USB_LEGOTOWER=m
 CONFIG_USB_LCD=m
-# CONFIG_USB_LED is not set
+CONFIG_USB_LED=m
+CONFIG_USB_CYTHERM=m
 CONFIG_USB_TEST=m
 
 #
@@ -1031,9 +1027,11 @@
 # CONFIG_USB_GADGET_PXA2XX is not set
 # CONFIG_USB_GADGET_GOKU is not set
 # CONFIG_USB_GADGET_SA1100 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
 CONFIG_USB_GADGET_DUALSPEED=y
 CONFIG_USB_ZERO=m
 CONFIG_USB_ETH=m
+# CONFIG_USB_ETH_RNDIS is not set
 CONFIG_USB_GADGETFS=m
 # CONFIG_USB_FILE_STORAGE is not set
 # CONFIG_USB_G_SERIAL is not set
@@ -1093,6 +1091,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 CONFIG_DEVPTS_FS_XATTR=y
 CONFIG_DEVPTS_FS_SECURITY=y
@@ -1152,7 +1151,7 @@
 CONFIG_NCPFS_EXTRAS=y
 CONFIG_CODA_FS=m
 CONFIG_CODA_FS_OLD_API=y
-# CONFIG_INTERMEZZO_FS is not set
+CONFIG_INTERMEZZO_FS=m
 CONFIG_AFS_FS=m
 CONFIG_RXRPC=m
 
@@ -1252,7 +1251,7 @@
 CONFIG_CRYPTO_CAST6=m
 # CONFIG_CRYPTO_ARC4 is not set
 CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=y
+CONFIG_CRYPTO_MICHAEL_MIC=m
 CONFIG_CRYPTO_TEST=m
 
 #
diff -Nru a/arch/mips/configs/sb1250-swarm_defconfig b/arch/mips/configs/sb1250-swarm_defconfig
--- a/arch/mips/configs/sb1250-swarm_defconfig	Sun May 16 01:18:37 2004
+++ b/arch/mips/configs/sb1250-swarm_defconfig	Sun May 16 01:18:37 2004
@@ -18,8 +18,10 @@
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=15
 # CONFIG_HOTPLUG is not set
 # CONFIG_IKCONFIG is not set
@@ -30,6 +32,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -265,8 +268,6 @@
 # CONFIG_INET_ESP is not set
 # CONFIG_INET_IPCOMP is not set
 # CONFIG_IPV6 is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 # CONFIG_NETFILTER is not set
 CONFIG_XFRM=y
 # CONFIG_XFRM_USER is not set
@@ -276,7 +277,9 @@
 #
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -297,12 +300,12 @@
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
 # CONFIG_EQUALIZER is not set
@@ -310,6 +313,11 @@
 # CONFIG_ETHERTAP is not set
 
 #
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
 # Ethernet (10 or 100Mbit)
 #
 CONFIG_NET_ETHERNET=y
@@ -336,7 +344,6 @@
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
 # CONFIG_R8169 is not set
-# CONFIG_SIS190 is not set
 # CONFIG_SK98LIN is not set
 # CONFIG_TIGON3 is not set
 
@@ -344,45 +351,29 @@
 # Ethernet (10000 Mbit)
 #
 # CONFIG_IXGB is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
+# CONFIG_S2IO is not set
 
 #
 # Token Ring devices
 #
 # CONFIG_TR is not set
-# CONFIG_RCPCI is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
 
 #
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
+# Wireless LAN (non-hamradio)
 #
-# CONFIG_IRDA is not set
+# CONFIG_NET_RADIO is not set
 
 #
-# Bluetooth support
+# Wan interfaces
 #
-# CONFIG_BT is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_RCPCI is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # ISDN subsystem
@@ -424,6 +415,7 @@
 # CONFIG_VT is not set
 CONFIG_SERIAL_NONSTANDARD=y
 # CONFIG_ROCKETPORT is not set
+# CONFIG_CYCLADES is not set
 # CONFIG_SYNCLINK is not set
 # CONFIG_SYNCLINKMP is not set
 # CONFIG_N_HDLC is not set
@@ -541,6 +533,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 # CONFIG_DEVPTS_FS_XATTR is not set
 # CONFIG_TMPFS is not set
diff -Nru a/arch/mips/configs/sead_defconfig b/arch/mips/configs/sead_defconfig
--- a/arch/mips/configs/sead_defconfig	Sun May 16 01:18:35 2004
+++ b/arch/mips/configs/sead_defconfig	Sun May 16 01:18:35 2004
@@ -19,8 +19,10 @@
 #
 CONFIG_SWAP=y
 # CONFIG_SYSVIPC is not set
+# CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 # CONFIG_IKCONFIG is not set
@@ -31,6 +33,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -194,11 +197,6 @@
 # Networking support
 #
 # CONFIG_NET is not set
-
-#
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
 # CONFIG_NETPOLL is not set
 # CONFIG_NET_POLL_CONTROLLER is not set
 
@@ -376,6 +374,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 # CONFIG_TMPFS is not set
 # CONFIG_HUGETLB_PAGE is not set
diff -Nru a/arch/mips/configs/tb0226_defconfig b/arch/mips/configs/tb0226_defconfig
--- a/arch/mips/configs/tb0226_defconfig	Sun May 16 01:18:35 2004
+++ b/arch/mips/configs/tb0226_defconfig	Sun May 16 01:18:35 2004
@@ -19,8 +19,10 @@
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 # CONFIG_IKCONFIG is not set
@@ -31,6 +33,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -282,8 +285,6 @@
 # CONFIG_INET_ESP is not set
 # CONFIG_INET_IPCOMP is not set
 # CONFIG_IPV6 is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 # CONFIG_NETFILTER is not set
 
 #
@@ -291,7 +292,9 @@
 #
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -312,6 +315,11 @@
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
@@ -332,48 +340,31 @@
 #
 # Ethernet (10000 Mbit)
 #
-CONFIG_PPP=m
-CONFIG_PPP_MULTILINK=y
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-CONFIG_PPP_SYNC_TTY=m
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPPOE=m
-# CONFIG_SLIP is not set
 
 #
-# Wireless LAN (non-hamradio)
+# Token Ring devices
 #
-# CONFIG_NET_RADIO is not set
 
 #
-# Token Ring devices
+# Wireless LAN (non-hamradio)
 #
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
+# CONFIG_NET_RADIO is not set
 
 #
 # Wan interfaces
 #
 # CONFIG_WAN is not set
-
-#
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-# CONFIG_IRDA is not set
-
-#
-# Bluetooth support
-#
-# CONFIG_BT is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPPOE=m
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # ISDN subsystem
@@ -569,6 +560,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 CONFIG_DEVPTS_FS_XATTR=y
 CONFIG_DEVPTS_FS_SECURITY=y
diff -Nru a/arch/mips/configs/tb0229_defconfig b/arch/mips/configs/tb0229_defconfig
--- a/arch/mips/configs/tb0229_defconfig	Sun May 16 01:18:36 2004
+++ b/arch/mips/configs/tb0229_defconfig	Sun May 16 01:18:36 2004
@@ -19,8 +19,10 @@
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 # CONFIG_IKCONFIG is not set
@@ -31,6 +33,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -56,6 +59,7 @@
 CONFIG_TANBAC_TB0229=y
 # CONFIG_VICTOR_MPC30X is not set
 # CONFIG_ZAO_CAPCELLA is not set
+# CONFIG_VRC4173 is not set
 # CONFIG_TOSHIBA_JMR3927 is not set
 # CONFIG_MIPS_COBALT is not set
 # CONFIG_MACH_DECSTATION is not set
@@ -239,8 +243,6 @@
 # CONFIG_INET_ESP is not set
 # CONFIG_INET_IPCOMP is not set
 # CONFIG_IPV6 is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 # CONFIG_NETFILTER is not set
 CONFIG_XFRM=y
 # CONFIG_XFRM_USER is not set
@@ -250,7 +252,9 @@
 #
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -271,12 +275,12 @@
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
 CONFIG_DUMMY=m
 # CONFIG_BONDING is not set
 # CONFIG_EQUALIZER is not set
@@ -284,6 +288,11 @@
 # CONFIG_ETHERTAP is not set
 
 #
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
 # Ethernet (10 or 100Mbit)
 #
 CONFIG_NET_ETHERNET=y
@@ -309,7 +318,6 @@
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
 # CONFIG_R8169 is not set
-# CONFIG_SIS190 is not set
 # CONFIG_SK98LIN is not set
 # CONFIG_TIGON3 is not set
 
@@ -317,6 +325,22 @@
 # Ethernet (10000 Mbit)
 #
 # CONFIG_IXGB is not set
+# CONFIG_S2IO is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
 # CONFIG_FDDI is not set
 # CONFIG_HIPPI is not set
 CONFIG_PPP=m
@@ -331,43 +355,11 @@
 CONFIG_SLIP_COMPRESSED=y
 CONFIG_SLIP_SMART=y
 CONFIG_SLIP_MODE_SLIP6=y
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
 # CONFIG_RCPCI is not set
 # CONFIG_SHAPER is not set
 # CONFIG_NETCONSOLE is not set
 
 #
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-
-#
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-# CONFIG_IRDA is not set
-
-#
-# Bluetooth support
-#
-# CONFIG_BT is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
 # ISDN subsystem
 #
 # CONFIG_ISDN is not set
@@ -559,6 +551,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 CONFIG_DEVPTS_FS_XATTR=y
 CONFIG_DEVPTS_FS_SECURITY=y
diff -Nru a/arch/mips/configs/workpad_defconfig b/arch/mips/configs/workpad_defconfig
--- a/arch/mips/configs/workpad_defconfig	Sun May 16 01:18:36 2004
+++ b/arch/mips/configs/workpad_defconfig	Sun May 16 01:18:36 2004
@@ -19,8 +19,10 @@
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 # CONFIG_IKCONFIG is not set
@@ -31,6 +33,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -56,6 +59,7 @@
 # CONFIG_TANBAC_TB0229 is not set
 # CONFIG_VICTOR_MPC30X is not set
 # CONFIG_ZAO_CAPCELLA is not set
+CONFIG_VRC4171=y
 # CONFIG_TOSHIBA_JMR3927 is not set
 # CONFIG_MIPS_COBALT is not set
 # CONFIG_MACH_DECSTATION is not set
@@ -87,7 +91,6 @@
 CONFIG_DMA_NONCOHERENT=y
 CONFIG_CPU_LITTLE_ENDIAN=y
 CONFIG_IRQ_CPU=y
-CONFIG_VRC4171=y
 CONFIG_MIPS_L1_CACHE_SHIFT=5
 # CONFIG_FB is not set
 
@@ -246,8 +249,6 @@
 # CONFIG_INET_ESP is not set
 # CONFIG_INET_IPCOMP is not set
 # CONFIG_IPV6 is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 # CONFIG_NETFILTER is not set
 CONFIG_XFRM=y
 # CONFIG_XFRM_USER is not set
@@ -257,7 +258,9 @@
 #
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -278,12 +281,12 @@
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
 # CONFIG_EQUALIZER is not set
@@ -291,6 +294,11 @@
 # CONFIG_ETHERTAP is not set
 
 #
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
 # Ethernet (10 or 100Mbit)
 #
 CONFIG_NET_ETHERNET=y
@@ -313,42 +321,25 @@
 #
 # Ethernet (10000 Mbit)
 #
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
 
 #
 # Token Ring devices
 #
 # CONFIG_TR is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-
-#
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
 
 #
-# IrDA (infrared) support
+# Wireless LAN (non-hamradio)
 #
-# CONFIG_IRDA is not set
+# CONFIG_NET_RADIO is not set
 
 #
-# Bluetooth support
+# Wan interfaces
 #
-# CONFIG_BT is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_WAN is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # ISDN subsystem
@@ -539,6 +530,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 CONFIG_DEVPTS_FS_XATTR=y
 CONFIG_DEVPTS_FS_SECURITY=y
diff -Nru a/arch/mips/configs/xxs1500_defconfig b/arch/mips/configs/xxs1500_defconfig
--- a/arch/mips/configs/xxs1500_defconfig	Sun May 16 01:18:36 2004
+++ b/arch/mips/configs/xxs1500_defconfig	Sun May 16 01:18:36 2004
@@ -19,8 +19,10 @@
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=14
 CONFIG_HOTPLUG=y
 # CONFIG_IKCONFIG is not set
@@ -31,6 +33,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -231,8 +234,6 @@
 #
 # CONFIG_IP_VS is not set
 # CONFIG_IPV6 is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 CONFIG_NETFILTER=y
 # CONFIG_NETFILTER_DEBUG is not set
 
@@ -253,7 +254,9 @@
 #
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -274,6 +277,11 @@
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
@@ -294,31 +302,15 @@
 #
 # Ethernet (10000 Mbit)
 #
-CONFIG_PPP=m
-CONFIG_PPP_MULTILINK=y
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-# CONFIG_PPP_BSDCOMP is not set
-CONFIG_PPPOE=m
-# CONFIG_SLIP is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
 
 #
 # Token Ring devices
 #
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
 
 #
-# Wan interfaces
+# Wireless LAN (non-hamradio)
 #
-# CONFIG_WAN is not set
+# CONFIG_NET_RADIO is not set
 
 #
 # PCMCIA network device support
@@ -334,21 +326,20 @@
 # CONFIG_PCMCIA_AXNET is not set
 
 #
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-# CONFIG_IRDA is not set
-
-#
-# Bluetooth support
+# Wan interfaces
 #
-# CONFIG_BT is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+# CONFIG_PPP_BSDCOMP is not set
+CONFIG_PPPOE=m
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # ISDN subsystem
@@ -531,6 +522,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 CONFIG_DEVPTS_FS_XATTR=y
 CONFIG_DEVPTS_FS_SECURITY=y
diff -Nru a/arch/mips/configs/yosemite_defconfig b/arch/mips/configs/yosemite_defconfig
--- a/arch/mips/configs/yosemite_defconfig	Sun May 16 01:18:36 2004
+++ b/arch/mips/configs/yosemite_defconfig	Sun May 16 01:18:36 2004
@@ -18,8 +18,10 @@
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=15
 # CONFIG_HOTPLUG is not set
 CONFIG_IKCONFIG=y
@@ -31,6 +33,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -251,8 +254,6 @@
 # CONFIG_INET_ESP is not set
 # CONFIG_INET_IPCOMP is not set
 # CONFIG_IPV6 is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 # CONFIG_NETFILTER is not set
 
 #
@@ -260,7 +261,9 @@
 #
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -281,6 +284,11 @@
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
@@ -300,41 +308,24 @@
 #
 # Ethernet (10000 Mbit)
 #
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
 
 #
-# Wireless LAN (non-hamradio)
+# Token Ring devices
 #
-# CONFIG_NET_RADIO is not set
 
 #
-# Token Ring devices
+# Wireless LAN (non-hamradio)
 #
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
+# CONFIG_NET_RADIO is not set
 
 #
 # Wan interfaces
 #
 # CONFIG_WAN is not set
-
-#
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-# CONFIG_IRDA is not set
-
-#
-# Bluetooth support
-#
-# CONFIG_BT is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # ISDN subsystem
@@ -375,6 +366,7 @@
 # CONFIG_VT is not set
 CONFIG_SERIAL_NONSTANDARD=y
 # CONFIG_ROCKETPORT is not set
+# CONFIG_CYCLADES is not set
 # CONFIG_SYNCLINK is not set
 # CONFIG_SYNCLINKMP is not set
 # CONFIG_N_HDLC is not set
@@ -489,6 +481,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 # CONFIG_DEVPTS_FS_XATTR is not set
 CONFIG_TMPFS=y
diff -Nru a/arch/mips/defconfig b/arch/mips/defconfig
--- a/arch/mips/defconfig	Sun May 16 01:18:33 2004
+++ b/arch/mips/defconfig	Sun May 16 01:18:33 2004
@@ -19,8 +19,10 @@
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 CONFIG_IKCONFIG=y
@@ -32,6 +34,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
@@ -298,8 +301,6 @@
 CONFIG_INET6_ESP=m
 CONFIG_INET6_IPCOMP=m
 CONFIG_IPV6_TUNNEL=m
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 CONFIG_NETFILTER=y
 # CONFIG_NETFILTER_DEBUG is not set
 
@@ -359,6 +360,8 @@
 CONFIG_IP_NF_ARP_MANGLE=m
 CONFIG_IP_NF_COMPAT_IPCHAINS=m
 CONFIG_IP_NF_COMPAT_IPFWADM=m
+CONFIG_IP_NF_TARGET_NOTRACK=m
+CONFIG_IP_NF_RAW=m
 
 #
 # IPv6: Netfilter Configuration
@@ -382,6 +385,7 @@
 CONFIG_IP6_NF_TARGET_LOG=m
 CONFIG_IP6_NF_MANGLE=m
 CONFIG_IP6_NF_TARGET_MARK=m
+CONFIG_IP6_NF_RAW=m
 CONFIG_XFRM=y
 CONFIG_XFRM_USER=m
 
@@ -395,7 +399,9 @@
 # CONFIG_SCTP_HMAC_SHA1 is not set
 CONFIG_SCTP_HMAC_MD5=y
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -440,6 +446,11 @@
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
 CONFIG_DUMMY=m
 CONFIG_BONDING=m
@@ -461,41 +472,24 @@
 #
 # Ethernet (10000 Mbit)
 #
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
 
 #
-# Wireless LAN (non-hamradio)
+# Token Ring devices
 #
-# CONFIG_NET_RADIO is not set
 
 #
-# Token Ring devices
+# Wireless LAN (non-hamradio)
 #
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
+# CONFIG_NET_RADIO is not set
 
 #
 # Wan interfaces
 #
 # CONFIG_WAN is not set
-
-#
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-# CONFIG_IRDA is not set
-
-#
-# Bluetooth support
-#
-# CONFIG_BT is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # ISDN subsystem
@@ -709,6 +703,7 @@
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 CONFIG_DEVPTS_FS_XATTR=y
 CONFIG_DEVPTS_FS_SECURITY=y
diff -Nru a/arch/mips/gt64120/momenco_ocelot/prom.c b/arch/mips/gt64120/momenco_ocelot/prom.c
--- a/arch/mips/gt64120/momenco_ocelot/prom.c	Sun May 16 01:18:33 2004
+++ b/arch/mips/gt64120/momenco_ocelot/prom.c	Sun May 16 01:18:33 2004
@@ -14,17 +14,7 @@
 
 #include <asm/addrspace.h>
 #include <asm/bootinfo.h>
-
-struct callvectors {
-	int	(*open) (char*, int, int);
-	int	(*close) (int);
-	int	(*read) (int, void*, int);
-	int	(*write) (int, void*, int);
-	off_t	(*lseek) (int, off_t, int);
-	int	(*printf) (const char*, ...);
-	void	(*cacheflush) (void);
-	char*	(*gets) (char*);
-};
+#include <asm/pmon.h>
 
 struct callvectors* debug_vectors;
 
diff -Nru a/arch/mips/kernel/entry.S b/arch/mips/kernel/entry.S
--- a/arch/mips/kernel/entry.S	Sun May 16 01:18:34 2004
+++ b/arch/mips/kernel/entry.S	Sun May 16 01:18:34 2004
@@ -114,11 +114,13 @@
 	SAVE_STATIC
 FEXPORT(syscall_exit_work)
 	LONG_L	t0, TI_FLAGS($28)
-	li	t1, _TIF_SYSCALL_TRACE
+	li	t1, _TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT
 	and	t0, t1
 	beqz	t0, work_pending	# trace bit is set
 	local_irq_enable		# could let do_syscall_trace()
 					# call schedule() instead
+	move	a0, sp
+	li	a1, 1
 	jal	do_syscall_trace
 	b	resume_userspace
 
diff -Nru a/arch/mips/kernel/irixelf.c b/arch/mips/kernel/irixelf.c
--- a/arch/mips/kernel/irixelf.c	Sun May 16 01:18:37 2004
+++ b/arch/mips/kernel/irixelf.c	Sun May 16 01:18:37 2004
@@ -1130,7 +1130,7 @@
 	psinfo.pr_pid = prstatus.pr_pid = current->pid;
 	psinfo.pr_ppid = prstatus.pr_ppid = current->parent->pid;
 	psinfo.pr_pgrp = prstatus.pr_pgrp = process_group(current);
-	psinfo.pr_sid = prstatus.pr_sid = current->session;
+	psinfo.pr_sid = prstatus.pr_sid = current->signal->session;
 	prstatus.pr_utime.tv_sec = CT_TO_SECS(current->utime);
 	prstatus.pr_utime.tv_usec = CT_TO_USECS(current->utime);
 	prstatus.pr_stime.tv_sec = CT_TO_SECS(current->stime);
diff -Nru a/arch/mips/kernel/irixsig.c b/arch/mips/kernel/irixsig.c
--- a/arch/mips/kernel/irixsig.c	Sun May 16 01:18:36 2004
+++ b/arch/mips/kernel/irixsig.c	Sun May 16 01:18:36 2004
@@ -13,12 +13,11 @@
 #include <linux/smp_lock.h>
 #include <linux/time.h>
 #include <linux/ptrace.h>
+#include <linux/suspend.h>
 
 #include <asm/ptrace.h>
 #include <asm/uaccess.h>
 
-extern asmlinkage void do_syscall_trace(void);
-
 #undef DEBUG_SIG
 
 #define _S(nr) (1<<((nr)-1))
@@ -177,6 +176,19 @@
 	siginfo_t info;
 	int signr;
 
+	/*
+	 * We want the common case to go fast, which is why we may in certain
+	 * cases get here from kernel mode. Just return without doing anything
+	 * if so.
+	 */
+	if (!user_mode(regs))
+		return 1;
+
+	if (current->flags & PF_FREEZE) {
+		refrigerator(0);
+		goto no_signal;
+	}
+
 	if (!oldset)
 		oldset = &current->blocked;
 
@@ -186,6 +198,7 @@
 		return 1;
 	}
 
+no_signal:
 	/*
 	 * Who's code doesn't conform to the restartable syscall convention
 	 * dies here!!!  The li instruction, a single machine instruction,
@@ -263,7 +276,7 @@
 	 * Don't let your children do this ...
 	 */
 	if (current_thread_info()->flags & TIF_SYSCALL_TRACE)
-		do_syscall_trace();
+		do_syscall_trace(regs, 1);
 	__asm__ __volatile__(
 		"move\t$29,%0\n\t"
 		"j\tsyscall_exit"
diff -Nru a/arch/mips/kernel/linux32.c b/arch/mips/kernel/linux32.c
--- a/arch/mips/kernel/linux32.c	Sun May 16 01:18:35 2004
+++ b/arch/mips/kernel/linux32.c	Sun May 16 01:18:35 2004
@@ -142,228 +142,6 @@
 }
 
 /*
- * count32() counts the number of arguments/envelopes
- */
-static int count32(u32 * argv, int max)
-{
-	int i = 0;
-
-	if (argv != NULL) {
-		for (;;) {
-			u32 p; int error;
-
-			error = get_user(p,argv);
-			if (error)
-				return error;
-			if (!p)
-				break;
-			argv++;
-			if (++i > max)
-				return -E2BIG;
-		}
-	}
-	return i;
-}
-
-
-/*
- * 'copy_strings32()' copies argument/envelope strings from user
- * memory to free pages in kernel mem. These are in a format ready
- * to be put directly into the top of new user memory.
- */
-int copy_strings32(int argc, u32 * argv, struct linux_binprm *bprm)
-{
-	struct page *kmapped_page = NULL;
-	char *kaddr = NULL;
-	int ret;
-
-	while (argc-- > 0) {
-		u32 str;
-		int len;
-		unsigned long pos;
-
-		if (get_user(str, argv+argc) || !str ||
-		     !(len = strnlen_user((char *)A(str), bprm->p))) {
-			ret = -EFAULT;
-			goto out;
-		}
-
-		if (bprm->p < len)  {
-			ret = -E2BIG;
-			goto out;
-		}
-
-		bprm->p -= len;
-		/* XXX: add architecture specific overflow check here. */
-
-		pos = bprm->p;
-		while (len > 0) {
-			int i, new, err;
-			int offset, bytes_to_copy;
-			struct page *page;
-
-			offset = pos % PAGE_SIZE;
-			i = pos/PAGE_SIZE;
-			page = bprm->page[i];
-			new = 0;
-			if (!page) {
-				page = alloc_page(GFP_HIGHUSER);
-				bprm->page[i] = page;
-				if (!page) {
-					ret = -ENOMEM;
-					goto out;
-				}
-				new = 1;
-			}
-
-			if (page != kmapped_page) {
-				if (kmapped_page)
-					kunmap(kmapped_page);
-				kmapped_page = page;
-				kaddr = kmap(kmapped_page);
-			}
-			if (new && offset)
-				memset(kaddr, 0, offset);
-			bytes_to_copy = PAGE_SIZE - offset;
-			if (bytes_to_copy > len) {
-				bytes_to_copy = len;
-				if (new)
-					memset(kaddr+offset+len, 0,
-					       PAGE_SIZE-offset-len);
-			}
-			err = copy_from_user(kaddr + offset, (char *)A(str),
-			                     bytes_to_copy);
-			if (err) {
-				ret = -EFAULT;
-				goto out;
-			}
-
-			pos += bytes_to_copy;
-			str += bytes_to_copy;
-			len -= bytes_to_copy;
-		}
-	}
-	ret = 0;
-out:
-	if (kmapped_page)
-		kunmap(kmapped_page);
-	return ret;
-}
-
-#ifdef CONFIG_MMU
-
-#define free_arg_pages(bprm) do { } while (0)
-
-#else
-
-static inline void free_arg_pages(struct linux_binprm *bprm)
-{
-	int i;
-
-	for (i = 0; i < MAX_ARG_PAGES; i++) {
-		if (bprm->page[i])
-			__free_page(bprm->page[i]);
-		bprm->page[i] = NULL;
-	}
-}
-
-#endif /* CONFIG_MMU */
-
-/*
- * sys32_execve() executes a new program.
- */
-static inline int 
-do_execve32(char * filename, u32 * argv, u32 * envp, struct pt_regs * regs)
-{
-	struct linux_binprm bprm;
-	struct file * file;
-	int retval;
-
-	sched_balance_exec();
-
-	file = open_exec(filename);
-
-	retval = PTR_ERR(file);
-	if (IS_ERR(file))
-		return retval;
-
-	bprm.p = PAGE_SIZE*MAX_ARG_PAGES-sizeof(void *);
-	memset(bprm.page, 0, MAX_ARG_PAGES * sizeof(bprm.page[0]));
-
-	bprm.file = file;
-	bprm.filename = filename;
-	bprm.interp = filename;
-	bprm.sh_bang = 0;
-	bprm.loader = 0;
-	bprm.exec = 0;
-	bprm.security = NULL;
-	bprm.mm = mm_alloc();
-	retval = -ENOMEM;
-	if (!bprm.mm) 
-		goto out_file;
-
-	retval = init_new_context(current, bprm.mm);
-	if (retval < 0)
-		goto out_mm;
-
-	bprm.argc = count32(argv, bprm.p / sizeof(u32));
-	if ((retval = bprm.argc) < 0)
-		goto out_mm;
-
-	bprm.envc = count32(envp, bprm.p / sizeof(u32));
-	if ((retval = bprm.envc) < 0)
-		goto out_mm;
-
-	retval = security_bprm_alloc(&bprm);
-	if (retval)
-		goto out;
-
-	retval = prepare_binprm(&bprm);
-	if (retval < 0)
-		goto out;
-	
-	retval = copy_strings_kernel(1, &bprm.filename, &bprm);
-	if (retval < 0)
-		goto out;
-
-	bprm.exec = bprm.p;
-	retval = copy_strings32(bprm.envc, envp, &bprm);
-	if (retval < 0)
-		goto out;
-
-	retval = copy_strings32(bprm.argc, argv, &bprm);
-	if (retval < 0)
-		goto out;
-
-	retval = search_binary_handler(&bprm, regs);
-	if (retval >= 0) {
-		free_arg_pages(&bprm);
-
-		/* execve success */
-		security_bprm_free(&bprm);
-		return retval;
-	}
-
-out:
-	/* Something went wrong, return the inode and free the argument pages*/
-	free_arg_pages(&bprm);
-
-	if (bprm.security)
-		security_bprm_free(&bprm);
-
-out_mm:
-	if (bprm.mm)
-		mmdrop(bprm.mm);
-
-out_file:
-	if (bprm.file) {
-		allow_write_access(bprm.file);
-		fput(bprm.file);
-	}
-	return retval;
-}
-
-/*
  * sys_execve() executes a new program.
  */
 asmlinkage int sys32_execve(nabi_no_regargs struct pt_regs regs)
@@ -371,12 +149,12 @@
 	int error;
 	char * filename;
 
-	filename = getname((char *) (long)regs.regs[4]);
+	filename = getname(compat_ptr(regs.regs[4]));
 	error = PTR_ERR(filename);
 	if (IS_ERR(filename))
 		goto out;
-	error = do_execve32(filename, (u32 *) (long)regs.regs[5],
-	                  (u32 *) (long)regs.regs[6], &regs);
+	error = compat_do_execve(filename, compat_ptr(regs.regs[5]),
+				 compat_ptr(regs.regs[6]), &regs);
 	putname(filename);
 
 out:
@@ -671,150 +449,6 @@
 	return sys_llseek(fd, offset_high, offset_low, result, origin);
 }
 
-typedef ssize_t (*IO_fn_t)(struct file *, char *, size_t, loff_t *);
-
-static long
-do_readv_writev32(int type, struct file *file, const struct compat_iovec *vector,
-		  u32 count)
-{
-	unsigned long tot_len;
-	struct iovec iovstack[UIO_FASTIOV];
-	struct iovec *iov=iovstack, *ivp;
-	struct inode *inode;
-	long retval, i;
-	IO_fn_t fn;
-
-	/* First get the "struct iovec" from user memory and
-	 * verify all the pointers
-	 */
-	if (!count)
-		return 0;
-	if(verify_area(VERIFY_READ, vector, sizeof(struct compat_iovec)*count))
-		return -EFAULT;
-	if (count > UIO_MAXIOV)
-		return -EINVAL;
-	if (count > UIO_FASTIOV) {
-		iov = kmalloc(count*sizeof(struct iovec), GFP_KERNEL);
-		if (!iov)
-			return -ENOMEM;
-	}
-
-	tot_len = 0;
-	i = count;
-	ivp = iov;
-	while (i > 0) {
-		u32 len;
-		u32 buf;
-
-		__get_user(len, &vector->iov_len);
-		__get_user(buf, &vector->iov_base);
-		tot_len += len;
-		ivp->iov_base = (void *)A(buf);
-		ivp->iov_len = (__kernel_size_t) len;
-		vector++;
-		ivp++;
-		i--;
-	}
-
-	inode = file->f_dentry->d_inode;
-	/* VERIFY_WRITE actually means a read, as we write to user space */
-	retval = locks_verify_area((type == VERIFY_WRITE
-				    ? FLOCK_VERIFY_READ : FLOCK_VERIFY_WRITE),
-				   inode, file, file->f_pos, tot_len);
-	if (retval) {
-		if (iov != iovstack)
-			kfree(iov);
-		return retval;
-	}
-
-	/* Then do the actual IO.  Note that sockets need to be handled
-	 * specially as they have atomicity guarantees and can handle
-	 * iovec's natively
-	 */
-#ifdef CONFIG_NET
-	if (inode->i_sock) {
-		int err;
-		err = sock_readv_writev(type, inode, file, iov, count, tot_len);
-		if (iov != iovstack)
-			kfree(iov);
-		return err;
-	}
-#endif
-
-	if (!file->f_op) {
-		if (iov != iovstack)
-			kfree(iov);
-		return -EINVAL;
-	}
-	/* VERIFY_WRITE actually means a read, as we write to user space */
-	fn = file->f_op->read;
-	if (type == VERIFY_READ)
-		fn = (IO_fn_t) file->f_op->write;
-	ivp = iov;
-	while (count > 0) {
-		void * base;
-		int len, nr;
-
-		base = ivp->iov_base;
-		len = ivp->iov_len;
-		ivp++;
-		count--;
-		nr = fn(file, base, len, &file->f_pos);
-		if (nr < 0) {
-			if (retval)
-				break;
-			retval = nr;
-			break;
-		}
-		retval += nr;
-		if (nr != len)
-			break;
-	}
-	if (iov != iovstack)
-		kfree(iov);
-
-	return retval;
-}
-
-asmlinkage long
-sys32_readv(int fd, struct compat_iovec *vector, u32 count)
-{
-	struct file *file;
-	ssize_t ret;
-
-	ret = -EBADF;
-	file = fget(fd);
-	if (!file)
-		goto bad_file;
-	if (file->f_op && (file->f_mode & FMODE_READ) &&
-	    (file->f_op->readv || file->f_op->read))
-		ret = do_readv_writev32(VERIFY_WRITE, file, vector, count);
-
-	fput(file);
-
-bad_file:
-	return ret;
-}
-
-asmlinkage long
-sys32_writev(int fd, struct compat_iovec *vector, u32 count)
-{
-	struct file *file;
-	ssize_t ret;
-
-	ret = -EBADF;
-	file = fget(fd);
-	if(!file)
-		goto bad_file;
-	if (file->f_op && (file->f_mode & FMODE_WRITE) &&
-	    (file->f_op->writev || file->f_op->write))
-	        ret = do_readv_writev32(VERIFY_READ, file, vector, count);
-	fput(file);
-
-bad_file:
-	return ret;
-}
-
 /* From the Single Unix Spec: pread & pwrite act like lseek to pos + op +
    lseek back to original location.  They fail just like lseek does on
    non-seekable files.  */
@@ -885,167 +519,6 @@
 bad_file:
 	return ret;
 }
-/*
- * Ooo, nasty.  We need here to frob 32-bit unsigned longs to
- * 64-bit unsigned longs.
- */
-
-static inline int
-get_fd_set32(unsigned long n, unsigned long *fdset, u32 *ufdset)
-{
-	if (ufdset) {
-		unsigned long odd;
-
-		if (verify_area(VERIFY_WRITE, ufdset, n*sizeof(u32)))
-			return -EFAULT;
-
-		odd = n & 1UL;
-		n &= ~1UL;
-		while (n) {
-			unsigned long h, l;
-			__get_user(l, ufdset);
-			__get_user(h, ufdset+1);
-			ufdset += 2;
-			*fdset++ = h << 32 | l;
-			n -= 2;
-		}
-		if (odd)
-			__get_user(*fdset, ufdset);
-	} else {
-		/* Tricky, must clear full unsigned long in the
-		 * kernel fdset at the end, this makes sure that
-		 * actually happens.
-		 */
-		memset(fdset, 0, ((n + 1) & ~1)*sizeof(u32));
-	}
-	return 0;
-}
-
-static inline void
-set_fd_set32(unsigned long n, u32 *ufdset, unsigned long *fdset)
-{
-	unsigned long odd;
-
-	if (!ufdset)
-		return;
-
-	odd = n & 1UL;
-	n &= ~1UL;
-	while (n) {
-		unsigned long h, l;
-		l = *fdset++;
-		h = l >> 32;
-		__put_user(l, ufdset);
-		__put_user(h, ufdset+1);
-		ufdset += 2;
-		n -= 2;
-	}
-	if (odd)
-		__put_user(*fdset, ufdset);
-}
-
-/*
- * We can actually return ERESTARTSYS instead of EINTR, but I'd
- * like to be certain this leads to no problems. So I return
- * EINTR just for safety.
- *
- * Update: ERESTARTSYS breaks at least the xview clock binary, so
- * I'm trying ERESTARTNOHAND which restart only when you want to.
- */
-#define MAX_SELECT_SECONDS \
-	((unsigned long) (MAX_SCHEDULE_TIMEOUT / HZ)-1)
-
-asmlinkage int sys32_select(int n, u32 *inp, u32 *outp, u32 *exp, struct compat_timeval *tvp)
-{
-	fd_set_bits fds;
-	char *bits;
-	unsigned long nn;
-	long timeout;
-	int ret, size;
-
-	timeout = MAX_SCHEDULE_TIMEOUT;
-	if (tvp) {
-		time_t sec, usec;
-
-		if ((ret = verify_area(VERIFY_READ, tvp, sizeof(*tvp)))
-		    || (ret = __get_user(sec, &tvp->tv_sec))
-		    || (ret = __get_user(usec, &tvp->tv_usec)))
-			goto out_nofds;
-
-		ret = -EINVAL;
-		if(sec < 0 || usec < 0)
-			goto out_nofds;
-
-		if ((unsigned long) sec < MAX_SELECT_SECONDS) {
-			timeout = (usec + 1000000/HZ - 1) / (1000000/HZ);
-			timeout += sec * (unsigned long) HZ;
-		}
-	}
-
-	ret = -EINVAL;
-	if (n < 0)
-		goto out_nofds;
-	if (n > current->files->max_fdset)
-		n = current->files->max_fdset;
-
-	/*
-	 * We need 6 bitmaps (in/out/ex for both incoming and outgoing),
-	 * since we used fdset we need to allocate memory in units of
-	 * long-words.
-	 */
-	ret = -ENOMEM;
-	size = FDS_BYTES(n);
-	bits = kmalloc(6 * size, GFP_KERNEL);
-	if (!bits)
-		goto out_nofds;
-	fds.in      = (unsigned long *)  bits;
-	fds.out     = (unsigned long *) (bits +   size);
-	fds.ex      = (unsigned long *) (bits + 2*size);
-	fds.res_in  = (unsigned long *) (bits + 3*size);
-	fds.res_out = (unsigned long *) (bits + 4*size);
-	fds.res_ex  = (unsigned long *) (bits + 5*size);
-
-	nn = (n + 8*sizeof(u32) - 1) / (8*sizeof(u32));
-	if ((ret = get_fd_set32(nn, fds.in, inp)) ||
-	    (ret = get_fd_set32(nn, fds.out, outp)) ||
-	    (ret = get_fd_set32(nn, fds.ex, exp)))
-		goto out;
-	zero_fd_set(n, fds.res_in);
-	zero_fd_set(n, fds.res_out);
-	zero_fd_set(n, fds.res_ex);
-
-	ret = do_select(n, &fds, &timeout);
-
-	if (tvp && !(current->personality & STICKY_TIMEOUTS)) {
-		time_t sec = 0, usec = 0;
-		if (timeout) {
-			sec = timeout / HZ;
-			usec = timeout % HZ;
-			usec *= (1000000/HZ);
-		}
-		put_user(sec, &tvp->tv_sec);
-		put_user(usec, &tvp->tv_usec);
-	}
-
-	if (ret < 0)
-		goto out;
-	if (!ret) {
-		ret = -ERESTARTNOHAND;
-		if (signal_pending(current))
-			goto out;
-		ret = 0;
-	}
-
-	set_fd_set32(nn, inp, fds.res_in);
-	set_fd_set32(nn, outp, fds.res_out);
-	set_fd_set32(nn, exp, fds.res_ex);
-
-out:
-	kfree(bits);
-out_nofds:
-	return ret;
-}
-
 
 asmlinkage int sys32_sched_rr_get_interval(compat_pid_t pid,
 	struct compat_timespec *interval)
diff -Nru a/arch/mips/kernel/mips_ksyms.c b/arch/mips/kernel/mips_ksyms.c
--- a/arch/mips/kernel/mips_ksyms.c	Sun May 16 01:18:34 2004
+++ b/arch/mips/kernel/mips_ksyms.c	Sun May 16 01:18:34 2004
@@ -33,6 +33,9 @@
 EXPORT_SYMBOL_NOVERS(memmove);
 EXPORT_SYMBOL_NOVERS(strcat);
 EXPORT_SYMBOL_NOVERS(strchr);
+#ifdef CONFIG_MIPS64
+EXPORT_SYMBOL_NOVERS(strncmp);
+#endif
 EXPORT_SYMBOL_NOVERS(strlen);
 EXPORT_SYMBOL_NOVERS(strpbrk);
 EXPORT_SYMBOL_NOVERS(strncat);
diff -Nru a/arch/mips/kernel/process.c b/arch/mips/kernel/process.c
--- a/arch/mips/kernel/process.c	Sun May 16 01:18:34 2004
+++ b/arch/mips/kernel/process.c	Sun May 16 01:18:34 2004
@@ -280,12 +280,6 @@
 	return ((unsigned long *)t->reg29)[schedule_frame.pc_offset];
 }
 
-/*
- * These bracket the sleeping functions..
- */
-#define first_sched	((unsigned long) scheduling_functions_start_here)
-#define last_sched	((unsigned long) scheduling_functions_end_here)
-
 /* get_wchan - a maintenance nightmare^W^Wpain in the ass ...  */
 unsigned long get_wchan(struct task_struct *p)
 {
@@ -297,7 +291,7 @@
 	if (!mips_frame_info_initialized)
 		return 0;
 	pc = thread_saved_pc(p);
-	if (pc < first_sched || pc >= last_sched)
+	if (!in_sched_functions(pc))
 		goto out;
 
 	if (pc >= (unsigned long) sleep_on_timeout)
@@ -331,7 +325,7 @@
 	 */
 	pc    = ((unsigned long *)frame)[schedule_timeout_frame.pc_offset];
 
-	if (pc >= first_sched && pc < last_sched) {
+	if (in_sched_functions(pc)) {
 		/* schedule_timeout called by [interruptible_]sleep_on_timeout */
 		frame = ((unsigned long *)frame)[schedule_timeout_frame.frame_offset];
 		pc    = ((unsigned long *)frame)[sleep_on_timeout_frame.pc_offset];
diff -Nru a/arch/mips/kernel/ptrace.c b/arch/mips/kernel/ptrace.c
--- a/arch/mips/kernel/ptrace.c	Sun May 16 01:18:37 2004
+++ b/arch/mips/kernel/ptrace.c	Sun May 16 01:18:37 2004
@@ -303,8 +303,17 @@
  * Notification of system call entry/exit
  * - triggered by current->work.syscall_trace
  */
-asmlinkage void do_syscall_trace(void)
+asmlinkage void do_syscall_trace(struct pt_regs *regs, int entryexit)
 {
+	if (unlikely(current->audit_context)) {
+		if (!entryexit)
+			audit_syscall_entry(current, regs->orig_eax,
+			                    regs->regs[4], regs->regs[5],
+			                    regs->regs[6], regs->regs[7]);
+		else
+			audit_syscall_exit(current, regs->regs[2]);
+	}
+
 	if (!test_thread_flag(TIF_SYSCALL_TRACE))
 		return;
 	if (!(current->ptrace & PT_PTRACED))
diff -Nru a/arch/mips/kernel/scall32-o32.S b/arch/mips/kernel/scall32-o32.S
--- a/arch/mips/kernel/scall32-o32.S	Sun May 16 01:18:33 2004
+++ b/arch/mips/kernel/scall32-o32.S	Sun May 16 01:18:33 2004
@@ -33,8 +33,8 @@
 
 	sltiu	t0, v0, MAX_SYSCALL_NO + 1 # check syscall number
 	addiu	t1, 4			# skip to next instruction
-	beqz	t0, illegal_syscall
 	sw	t1, PT_EPC(sp)
+	beqz	t0, illegal_syscall
 
 	/* XXX Put both in one cacheline, should save a bit. */
 	sll	t0, v0, 2
@@ -49,7 +49,7 @@
 stack_done:
 	sw	a3, PT_R26(sp)          # save for syscall restart
 	LONG_L	t0, TI_FLAGS($28)	# syscall tracing enabled?
-	li	t1, _TIF_SYSCALL_TRACE
+	li	t1, _TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT
 	and	t0, t1, t0
 	bnez	t0, syscall_trace_entry	# -> yes
 
@@ -84,6 +84,8 @@
 syscall_trace_entry:
 	SAVE_STATIC
 	sw	t2, PT_R1(sp)
+	move	a0, sp
+	li	a1, 0
 	jal	do_syscall_trace
 	lw	t2, PT_R1(sp)
 
@@ -233,13 +235,15 @@
 
 	/* Success, so skip usual error handling garbage.  */
 	LONG_L	a2, TI_FLAGS($28)	# syscall tracing enabled?
-	li	t0, _TIF_SYSCALL_TRACE
+	li	t0, _TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT
 	and	t0, a2, t0
 	bnez	t0, 1f
 
 	b	o32_syscall_exit
 
 1:	SAVE_STATIC
+	move	a0, sp
+	li	a1, 1
 	jal	do_syscall_trace
 	j	syscall_exit
 
@@ -614,6 +618,15 @@
 	sys	sys_clock_nanosleep	4	/* 4265 */
 	sys	sys_tgkill		3
 	sys	sys_utimes		2
+	sys	sys_ni_syscall		0	/* sys_mbind */
+	sys	sys_ni_syscall		0	/* sys_get_mempolicy */
+	sys	sys_ni_syscall		0	/* 4270 sys_set_mempolicy */
+	sys	sys_mq_open		4
+	sys	sys_mq_unlink		1
+	sys	sys_mq_timedsend	5
+	sys	sys_mq_timedreceive	5
+	sys	sys_mq_notify		2	/* 4275 */
+	sys	sys_mq_getsetattr	3
 
 	.endm
 
diff -Nru a/arch/mips/kernel/scall64-64.S b/arch/mips/kernel/scall64-64.S
--- a/arch/mips/kernel/scall64-64.S	Sun May 16 01:18:36 2004
+++ b/arch/mips/kernel/scall64-64.S	Sun May 16 01:18:36 2004
@@ -36,14 +36,16 @@
 	STI
 	.set	at
 #endif
-	ld	t1, PT_EPC(sp)		# skip syscall on return
 
 FEXPORT(__handle_sys64)
 	subu	t0, v0, __NR_64_Linux	# check syscall number
 	sltiu	t0, t0,	__NR_64_Linux_syscalls + 1
+#if !defined(CONFIG_MIPS32_O32) && !defined(CONFIG_MIPS32_N32)
+	ld	t1, PT_EPC(sp)		# skip syscall on return
 	daddiu	t1, 4			# skip to next instruction
-	beqz	t0, illegal_syscall
 	sd	t1, PT_EPC(sp)
+#endif
+	beqz	t0, illegal_syscall
 
 	dsll	t0, v0, 3		# offset into table
 	ld	t2, (sys_call_table - (__NR_64_Linux * 8))(t0)
@@ -85,6 +87,8 @@
 syscall_trace_entry:
 	SAVE_STATIC
 	sd	t2,PT_R1(sp)
+	move	a0, sp
+	li	a1, 0
 	jal	do_syscall_trace
 	ld	t2,PT_R1(sp)
 
@@ -165,13 +169,15 @@
 
 	/* Success, so skip usual error handling garbage.  */
 	LONG_L	a2, TI_FLAGS($28)	# syscall tracing enabled?
-	li	t0, _TIF_SYSCALL_TRACE
+	li	t0, _TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT
 	and	t0, a2, t0
 	bnez	t0, 1f
 
 	b	syscall_exit
 
 1:	SAVE_STATIC
+	move	a0, sp
+	li	a1, 1
 	jal	do_syscall_trace
 	j	syscall_exit
 
@@ -432,3 +438,12 @@
 	PTR	sys_clock_nanosleep
 	PTR	sys_tgkill			/* 5225 */
 	PTR	sys_utimes
+	PTR	sys_ni_syscall			/* sys_mbind */
+	PTR	sys_ni_syscall			/* sys_get_mempolicy */
+	PTR	sys_ni_syscall			/* sys_set_mempolicy */
+	PTR	sys_mq_open			/* 5230 */
+	PTR	sys_mq_unlink
+	PTR	sys_mq_timedsend
+	PTR	sys_mq_timedreceive
+	PTR	sys_mq_notify
+	PTR	sys_mq_getsetattr		/* 5235 */
diff -Nru a/arch/mips/kernel/scall64-n32.S b/arch/mips/kernel/scall64-n32.S
--- a/arch/mips/kernel/scall64-n32.S	Sun May 16 01:18:36 2004
+++ b/arch/mips/kernel/scall64-n32.S	Sun May 16 01:18:36 2004
@@ -36,21 +36,26 @@
 	STI
 	.set	at
 #endif
-	ld	t1, PT_EPC(sp)		# skip syscall on return
 
 	subu	t0, v0, __NR_N32_Linux	# check syscall number
 	sltiu	t0, t0,	__NR_N32_Linux_syscalls + 1
+
+#ifndef CONFIG_MIPS32_O32
+	ld	t1, PT_EPC(sp)		# skip syscall on return
 	daddiu	t1, 4			# skip to next instruction
-	beqz	t0, not_n32_scall
 	sd	t1, PT_EPC(sp)
+#endif
+	beqz	t0, not_n32_scall
 
 	dsll	t0, v0, 3		# offset into table
 	ld	t2, (sysn32_call_table - (__NR_N32_Linux * 8))(t0)
 
 	sd	a3, PT_R26(sp)		# save a3 for syscall restarting
 
+	li	t1, _TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT
 	LONG_L	t0, TI_FLAGS($28)	# syscall tracing enabled?
-	bltz	t0, n32_syscall_trace_entry
+	and	t0, t1, t0
+	bnez	t0, n32_syscall_trace_entry
 
 	jalr	t2			# Do The Real Thing (TM)
 
@@ -82,6 +87,8 @@
 n32_syscall_trace_entry:
 	SAVE_STATIC
 	sd	t2,PT_R1(sp)
+	move	a0, sp
+	li	a1, 0
 	jal	do_syscall_trace
 	ld	t2,PT_R1(sp)
 
@@ -128,11 +135,11 @@
 	PTR	compat_sys_ioctl		/* 6015 */
 	PTR	sys_pread64
 	PTR	sys_pwrite64
-	PTR	sys32_readv
-	PTR	sys32_writev
+	PTR	compat_sys_readv
+	PTR	compat_sys_writev
 	PTR	sys_access			/* 6020 */
 	PTR	sys_pipe
-	PTR	sys32_select
+	PTR	compat_sys_select
 	PTR	sys_sched_yield
 	PTR	sys_mremap
 	PTR	sys_msync			/* 6025 */
@@ -341,3 +348,12 @@
 	PTR	sys_clock_nanosleep
 	PTR	sys_tgkill
 	PTR	compat_sys_utimes		/* 6230 */
+	PTR	sys_ni_syscall			/* sys_mbind */
+	PTR	sys_ni_syscall			/* sys_get_mempolicy */
+	PTR	sys_ni_syscall			/* sys_set_mempolicy */
+	PTR	compat_sys_mq_open
+	PTR	sys_mq_unlink			/* 6235 */
+	PTR	compat_sys_mq_timedsend
+	PTR	compat_sys_mq_timedreceive
+	PTR	compat_sys_mq_notify
+	PTR	compat_sys_mq_getsetattr	/* 6239 */
diff -Nru a/arch/mips/kernel/scall64-o32.S b/arch/mips/kernel/scall64-o32.S
--- a/arch/mips/kernel/scall64-o32.S	Sun May 16 01:18:33 2004
+++ b/arch/mips/kernel/scall64-o32.S	Sun May 16 01:18:33 2004
@@ -34,8 +34,8 @@
 	subu	t0, v0, __NR_O32_Linux	# check syscall number
 	sltiu	t0, t0, __NR_O32_Linux_syscalls + 1
 	daddiu	t1, 4			# skip to next instruction
-	beqz	t0, not_o32_scall
 	sd	t1, PT_EPC(sp)
+	beqz	t0, not_o32_scall
 #if 0
  SAVE_ALL
  move a1, v0
@@ -58,8 +58,9 @@
 	bgez	t0, stackargs
 
 stack_done:
-	LONG_L	t0, TI_FLAGS($28)
-					# syscall tracing enabled?
+	li	t1, _TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT
+	LONG_L	t0, TI_FLAGS($28)	# syscall tracing enabled?
+	and	t0, t1, t0
 	bnez	t0, trace_a_syscall
 
 	jalr	t2			# Do The Real Thing (TM)
@@ -97,6 +98,8 @@
 	sd	a7, PT_R11(sp)
 
 	sd	t2,PT_R1(sp)
+	move	a0, sp
+	li	a1, 0
 	jal	do_syscall_trace
 	ld	t2,PT_R1(sp)
 
@@ -397,11 +400,11 @@
 	sys	sys_setfsgid	1
 	sys	sys32_llseek	5			/* 4140 */
 	sys	sys32_getdents	3
-	sys	sys32_select	5
+	sys	compat_sys_select	5
 	sys	sys_flock	2
 	sys	sys_msync	3
-	sys	sys32_readv	3			/* 4145 */
-	sys	sys32_writev	3
+	sys	compat_sys_readv	3		/* 4145 */
+	sys	compat_sys_writev	3
 	sys	sys_cacheflush	3
 	sys	sys_cachectl	3
 	sys	sys_sysmips	4
@@ -523,6 +526,15 @@
 	sys	sys_clock_nanosleep	4		/* 4265 */
 	sys	sys_tgkill		3
 	sys	compat_sys_utimes	2
+	sys	sys_ni_syscall		0	/* sys_mbind */
+	sys	sys_ni_syscall		0	/* sys_get_mempolicy */
+	sys	sys_ni_syscall		0	/* 4270 sys_set_mempolicy */
+	sys	compat_sys_mq_open	4
+	sys	sys_mq_unlink		1
+	sys	compat_sys_mq_timedsend	5
+	sys	compat_sys_mq_timedreceive 5
+	sys	compat_sys_mq_notify	2	/* 4275 */
+	sys	compat_sys_mq_getsetattr 3
 
 	.endm
 
diff -Nru a/arch/mips/kernel/signal.c b/arch/mips/kernel/signal.c
--- a/arch/mips/kernel/signal.c	Sun May 16 01:18:36 2004
+++ b/arch/mips/kernel/signal.c	Sun May 16 01:18:36 2004
@@ -18,6 +18,7 @@
 #include <linux/errno.h>
 #include <linux/wait.h>
 #include <linux/ptrace.h>
+#include <linux/suspend.h>
 #include <linux/unistd.h>
 
 #include <asm/asm.h>
@@ -34,8 +35,6 @@
 
 extern asmlinkage int do_signal(sigset_t *oldset, struct pt_regs *regs);
 
-extern asmlinkage void do_syscall_trace(void);
-
 /*
  * Atomically swap in the new signal mask, and wait for a signal.
  */
@@ -232,7 +231,7 @@
 	 * Don't let your children do this ...
 	 */
 	if (current_thread_info()->flags & TIF_SYSCALL_TRACE)
-		do_syscall_trace();
+		do_syscall_trace(&regs, 1);
 	__asm__ __volatile__(
 		"move\t$29, %0\n\t"
 		"j\tsyscall_exit"
@@ -549,6 +548,19 @@
 	}
 #endif
 
+	/*
+	 * We want the common case to go fast, which is why we may in certain
+	 * cases get here from kernel mode. Just return without doing anything
+	 * if so.
+	 */
+	if (!user_mode(regs))
+		return 1;
+
+	if (current->flags & PF_FREEZE) {
+		refrigerator(0);
+		goto no_signal;
+	}
+
 	if (!oldset)
 		oldset = &current->blocked;
 
@@ -558,6 +570,7 @@
 		return 1;
 	}
 
+no_signal:
 	/*
 	 * Who's code doesn't conform to the restartable syscall convention
 	 * dies here!!!  The li instruction, a single machine instruction,
diff -Nru a/arch/mips/kernel/signal32.c b/arch/mips/kernel/signal32.c
--- a/arch/mips/kernel/signal32.c	Sun May 16 01:18:35 2004
+++ b/arch/mips/kernel/signal32.c	Sun May 16 01:18:35 2004
@@ -18,9 +18,11 @@
 #include <linux/wait.h>
 #include <linux/ptrace.h>
 #include <linux/compat.h>
+#include <linux/suspend.h>
 
 #include <asm/asm.h>
 #include <asm/bitops.h>
+#include <asm/cacheflush.h>
 #include <asm/sim.h>
 #include <asm/uaccess.h>
 #include <asm/ucontext.h>
@@ -40,8 +42,6 @@
 
 extern asmlinkage int do_signal32(sigset_t *oldset, struct pt_regs *regs);
 
-extern asmlinkage void do_syscall_trace(void);
-
 /* 32-bit compatibility types */
 
 #define _NSIG_BPW32	32
@@ -392,7 +392,7 @@
 	 * Don't let your children do this ...
 	 */
 	if (current_thread_info()->flags & TIF_SYSCALL_TRACE)
-		do_syscall_trace();
+		do_syscall_trace(&regs, 1);
 	__asm__ __volatile__(
 		"move\t$29, %0\n\t"
 		"j\tsyscall_exit"
@@ -696,6 +696,19 @@
 	siginfo_t info;
 	int signr;
 
+	/*
+	 * We want the common case to go fast, which is why we may in certain
+	 * cases get here from kernel mode. Just return without doing anything
+	 * if so.
+	 */
+	if (!user_mode(regs))
+		return 1;
+
+	if (current->flags & PF_FREEZE) {
+		refrigerator(0);
+		goto no_signal;
+	}
+
 	if (!oldset)
 		oldset = &current->blocked;
 
@@ -705,6 +718,7 @@
 		return 1;
 	}
 
+no_signal:
 	/*
 	 * Who's code doesn't conform to the restartable syscall convention
 	 * dies here!!!  The li instruction, a single machine instruction,
diff -Nru a/arch/mips/kernel/signal_n32.c b/arch/mips/kernel/signal_n32.c
--- a/arch/mips/kernel/signal_n32.c	Sun May 16 01:18:35 2004
+++ b/arch/mips/kernel/signal_n32.c	Sun May 16 01:18:35 2004
@@ -29,6 +29,7 @@
 
 #include <asm/asm.h>
 #include <asm/bitops.h>
+#include <asm/cacheflush.h>
 #include <asm/sim.h>
 #include <asm/uaccess.h>
 #include <asm/ucontext.h>
diff -Nru a/arch/mips/kernel/smp.c b/arch/mips/kernel/smp.c
--- a/arch/mips/kernel/smp.c	Sun May 16 01:18:33 2004
+++ b/arch/mips/kernel/smp.c	Sun May 16 01:18:33 2004
@@ -151,6 +151,9 @@
 	if (!cpus)
 		return 0;
 
+	/* Can deadlock when called with interrupts disabled */
+	WARN_ON(irqs_disabled());
+
 	data.func = func;
 	data.info = info;
 	atomic_set(&data.started, 0);
diff -Nru a/arch/mips/mm/init.c b/arch/mips/mm/init.c
--- a/arch/mips/mm/init.c	Sun May 16 01:18:36 2004
+++ b/arch/mips/mm/init.c	Sun May 16 01:18:36 2004
@@ -238,7 +238,7 @@
 		set_page_address(page, lowmem_page_address(page));
 #endif
 		set_bit(PG_highmem, &page->flags);
-		atomic_set(&page->count, 1);
+		set_page_count(page, 1);
 		__free_page(page);
 		totalhigh_pages++;
 	}
diff -Nru a/arch/mips/momentum/jaguar_atx/prom.c b/arch/mips/momentum/jaguar_atx/prom.c
--- a/arch/mips/momentum/jaguar_atx/prom.c	Sun May 16 01:18:37 2004
+++ b/arch/mips/momentum/jaguar_atx/prom.c	Sun May 16 01:18:37 2004
@@ -25,21 +25,11 @@
 #include <asm/addrspace.h>
 #include <asm/bootinfo.h>
 #include <asm/mv64340.h>
+#include <asm/pmon.h>
 
 #include "jaguar_atx_fpga.h"
 
 extern void ja_setup_console(void);
-
-struct callvectors {
-	int	(*open) (char*, int, int);		/*	 0 */
-	int	(*close) (int);				/*	 4 */
-	int	(*read) (int, void*, int);		/*	 8 */
-	int	(*write) (int, void*, int);		/*	12 */
-	off_t	(*lseek) (int, off_t, int);		/*	16 */
-	int	(*printf) (const char*, ...);		/*	20 */
-	void	(*cacheflush) (void);			/*	24 */
-	char*	(*gets) (char*);			/*	28 */
-};
 
 struct callvectors *debug_vectors;
 
diff -Nru a/arch/mips/momentum/ocelot_c/prom.c b/arch/mips/momentum/ocelot_c/prom.c
--- a/arch/mips/momentum/ocelot_c/prom.c	Sun May 16 01:18:35 2004
+++ b/arch/mips/momentum/ocelot_c/prom.c	Sun May 16 01:18:35 2004
@@ -23,19 +23,9 @@
 #include <asm/addrspace.h>
 #include <asm/bootinfo.h>
 #include <asm/mv64340.h>
+#include <asm/pmon.h>
 
 #include "ocelot_c_fpga.h"
-
-struct callvectors {
-	int	(*open) (char*, int, int);
-	int	(*close) (int);
-	int	(*read) (int, void*, int);
-	int	(*write) (int, void*, int);
-	off_t	(*lseek) (int, off_t, int);
-	int	(*printf) (const char*, ...);
-	void	(*cacheflush) (void);
-	char*	(*gets) (char*);
-};
 
 struct callvectors* debug_vectors;
 
diff -Nru a/arch/mips/momentum/ocelot_g/prom.c b/arch/mips/momentum/ocelot_g/prom.c
--- a/arch/mips/momentum/ocelot_g/prom.c	Sun May 16 01:18:34 2004
+++ b/arch/mips/momentum/ocelot_g/prom.c	Sun May 16 01:18:34 2004
@@ -19,20 +19,10 @@
 
 #include <asm/addrspace.h>
 #include <asm/bootinfo.h>
+#include <asm/pmon.h>
 
 #include "gt64240.h"
 #include "ocelot_pld.h"
-
-struct callvectors {
-	int	(*open) (char*, int, int);
-	int	(*close) (int);
-	int	(*read) (int, void*, int);
-	int	(*write) (int, void*, int);
-	off_t	(*lseek) (int, off_t, int);
-	int	(*printf) (const char*, ...);
-	void	(*cacheflush) (void);
-	char*	(*gets) (char*);
-};
 
 struct callvectors* debug_vectors;
 
diff -Nru a/arch/mips/pci/fixup-au1000.c b/arch/mips/pci/fixup-au1000.c
--- a/arch/mips/pci/fixup-au1000.c	Sun May 16 01:18:33 2004
+++ b/arch/mips/pci/fixup-au1000.c	Sun May 16 01:18:33 2004
@@ -37,22 +37,72 @@
 /*
  * Shortcut
  */
-#define INTA	AU1000_PCI_INTA
-#define INTB	AU1000_PCI_INTB
+#ifdef CONFIG_SOC_AU1500
+#define INTA AU1000_PCI_INTA
+#define INTB AU1000_PCI_INTB
+#define INTC AU1000_PCI_INTC
+#define INTD AU1000_PCI_INTD
+#endif
+
+#ifdef CONFIG_SOC_AU1550
+#define INTA AU1550_PCI_INTA
+#define INTB AU1550_PCI_INTB
+#define INTC AU1550_PCI_INTC
+#define INTD AU1550_PCI_INTD
+#endif
+
+#define INTX    0xFF /* not valid */
+
+#ifdef CONFIG_MIPS_DB1500
+static char irq_tab_alchemy[][5] __initdata = {
+ [12] =	{ -1, INTA, INTX, INTX, INTX},   /* IDSEL 12 - HPT371   */
+ [13] =	{ -1, INTA, INTB, INTC, INTD},   /* IDSEL 13 - PCI slot */
+};
+#endif
+
+#ifdef CONFIG_MIPS_BOSPORUS
+static char irq_tab_alchemy[][5] __initdata = {
+ [11] =	{ -1, INTA, INTB, INTX, INTX},   /* IDSEL 11 - miniPCI  */
+ [12] =	{ -1, INTA, INTX, INTX, INTX},   /* IDSEL 12 - SN1741   */
+ [13] =	{ -1, INTA, INTB, INTC, INTD},   /* IDSEL 13 - PCI slot */
+};
+#endif
 
+#ifdef CONFIG_MIPS_MIRAGE
 static char irq_tab_alchemy[][5] __initdata = {
- [11] = { -1, INTA, INTA, INTA, INTA },
- [12] = { -1, INTA, INTA, INTA, INTA },
-#if defined( CONFIG_SOC_AU1550 )
- [13] = { -1, INTB, INTB, INTB, INTB }
+ [11] =	{ -1, INTD, INTX, INTX, INTX},   /* IDSEL 11 - SMI VGX */
+ [12] =	{ -1, INTX, INTX, INTC, INTX},   /* IDSEL 12 - PNX1300 */
+ [13] =	{ -1, INTA, INTB, INTX, INTX},   /* IDSEL 13 - miniPCI */
+};
+#endif
+
+#ifdef CONFIG_MIPS_DB1550
+static char irq_tab_alchemy[][5] __initdata = {
+ [11] =	{ -1, INTC, INTX, INTX, INTX},   /* IDSEL 11 - on-board HPT371    */
+ [12] =	{ -1, INTB, INTC, INTD, INTA},   /* IDSEL 12 - PCI slot 2 (left)  */
+ [13] =	{ -1, INTA, INTB, INTC, INTD},   /* IDSEL 13 - PCI slot 1 (right) */
+};
+#endif
+
+#ifdef CONFIG_MIPS_PB1500
+static char irq_tab_alchemy[][5] __initdata = {
+ [12] = { -1, INTA, INTX, INTX, INTX},   /* IDSEL 12 - HPT370   */
+ [13] = { -1, INTA, INTB, INTC, INTD},   /* IDSEL 13 - PCI slot */
+};
 #endif
+
+#ifdef CONFIG_MIPS_PB1550
+static char irq_tab_alchemy[][5] __initdata = {
+ [12] =	{ -1, INTB, INTC, INTD, INTA},   /* IDSEL 12 - PCI slot 2 (left)  */
+ [13] =	{ -1, INTA, INTB, INTC, INTD},   /* IDSEL 13 - PCI slot 1 (right) */
 };
+#endif
 
 int __init pcibios_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
 {
-	return irq_tab_alchemy[slot][pin];
+return irq_tab_alchemy[slot][pin];
 }
 
 struct pci_fixup pcibios_fixups[] __initdata = {
-	{ 0 }
+{ 0 }
 };
diff -Nru a/arch/mips/pci/ops-au1000.c b/arch/mips/pci/ops-au1000.c
--- a/arch/mips/pci/ops-au1000.c	Sun May 16 01:18:36 2004
+++ b/arch/mips/pci/ops-au1000.c	Sun May 16 01:18:36 2004
@@ -33,89 +33,170 @@
 #include <linux/pci.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
+#include <linux/vmalloc.h>
 
 #include <asm/mach-au1x00/au1000.h>
 
+#undef DEBUG
+#ifdef DEBUG
+#define DBG(x...) printk(x)
+#else
+#define DBG(x...)
+#endif
+
 #define PCI_ACCESS_READ  0
 #define PCI_ACCESS_WRITE 1
 
 
+int (*board_pci_idsel)(unsigned int devsel, int assert);
+
+/* CP0 hazard avoidance. */
+#define BARRIER __asm__ __volatile__(".set noreorder\n\t" \
+				     "nop; nop; nop; nop;\t" \
+				     ".set reorder\n\t")
+
+void mod_wired_entry(int entry, unsigned long entrylo0,
+		unsigned long entrylo1, unsigned long entryhi,
+		unsigned long pagemask)
+{
+	unsigned long old_pagemask;
+	unsigned long old_ctx;
+
+	/* Save old context and create impossible VPN2 value */
+	old_ctx = read_c0_entryhi() & 0xff;
+	old_pagemask = read_c0_pagemask();
+	write_c0_index(entry);
+	BARRIER;
+	write_c0_pagemask(pagemask);
+	write_c0_entryhi(entryhi);
+	write_c0_entrylo0(entrylo0);
+	write_c0_entrylo1(entrylo1);
+	BARRIER;
+	tlb_write_indexed();
+	BARRIER;
+	write_c0_entryhi(old_ctx);
+	BARRIER;
+	write_c0_pagemask(old_pagemask);
+}
+
+struct vm_struct *pci_cfg_vm;
+static int pci_cfg_wired_entry;
+static int first_cfg = 1;
+unsigned long last_entryLo0, last_entryLo1;
+
 static int config_access(unsigned char access_type, struct pci_bus *bus,
-			 unsigned int devfn, unsigned char where,
+			 unsigned int dev_fn, unsigned char where,
 			 u32 * data)
 {
-	unsigned int device = PCI_SLOT(devfn);
-	unsigned int function = PCI_FUNC(devfn);
-	unsigned long config, status;
-	unsigned long cfg_addr;
+#if defined( CONFIG_SOC_AU1500 ) || defined( CONFIG_SOC_AU1550 )
+	unsigned int device = PCI_SLOT(dev_fn);
+	unsigned int function = PCI_FUNC(dev_fn);
+	unsigned long offset, status;
+	unsigned long cfg_base;
+	unsigned long flags;
+	int error = PCIBIOS_SUCCESSFUL;
+	unsigned long entryLo0, entryLo1;
 
 	if (device > 19) {
 		*data = 0xffffffff;
 		return -1;
 	}
 
-	au_writel(((0x2000 << 16) |
-		   (au_readl(Au1500_PCI_STATCMD) & 0xffff)),
-		  Au1500_PCI_STATCMD);
-	//au_writel(au_readl(Au1500_PCI_CFG) & ~PCI_ERROR, Au1500_PCI_CFG);
+	local_irq_save(flags);
+	au_writel(((0x2000 << 16) | (au_readl(Au1500_PCI_STATCMD) & 0xffff)),
+			Au1500_PCI_STATCMD);
 	au_sync_udelay(1);
 
-	/* setup the config window */
-	if (bus->number == 0) {
-		cfg_addr = (unsigned long) ioremap(Au1500_EXT_CFG |
-						   ((1 << device) << 11),
-						   0x00100000);
-	} else {
-		cfg_addr = (unsigned long) ioremap(Au1500_EXT_CFG_TYPE1 |
-						   (bus->
-						    number << 16) | (device
-								     <<
-								     11),
-						   0x00100000);
-	}
-
-	if (!cfg_addr)
-		panic(KERN_ERR "PCI unable to ioremap cfg space\n");
-
-	/* setup the lower bits of the 36 bit address */
-	config = cfg_addr | (function << 8) | (where & ~0x3);
-
-#if 1
-	if (access_type == PCI_ACCESS_WRITE) {
-		printk("cfg write:  ");
-	} else {
-		printk("cfg read:  ");
-	}
-	printk("devfn %x, device %x func %x  \n", devfn, device, function);
-	if (access_type == PCI_ACCESS_WRITE) {
-		printk("data %x\n", *data);
+	/*
+	 * We can't ioremap the entire pci config space because it's
+	 * too large. Nor can we call ioremap dynamically because some
+	 * device drivers use the pci config routines from within
+	 * interrupt handlers and that becomes a problem in get_vm_area().
+	 * We use one wired tlb to handle all config accesses for all
+	 * busses. To improve performance, if the current device
+	 * is the same as the last device accessed, we don't touch the
+	 * tlb.
+	 */
+	if (first_cfg) {
+		/* reserve a wired entry for pci config accesses */
+		first_cfg = 0;
+		pci_cfg_vm = get_vm_area(0x2000, 0);
+		if (!pci_cfg_vm)
+			panic (KERN_ERR "PCI unable to get vm area\n");
+		pci_cfg_wired_entry = read_c0_wired();
+		add_wired_entry(0, 0, (unsigned long)pci_cfg_vm->addr, PM_4K);
+		last_entryLo0  = last_entryLo1 = 0xffffffff;
+	}
+
+	/* Since the Au1xxx doesn't do the idsel timing exactly to spec,
+	 * many board vendors implement their own off-chip idsel, so call
+	 * it now.  If it doesn't succeed, may as well bail out at this point.
+	 */
+	if (board_pci_idsel) {
+		if (board_pci_idsel(device, 1) == 0) {
+			*data = 0xffffffff;
+			local_irq_restore(flags);
+			return -1;
+		}
+	}
+
+        /* setup the config window */
+        if (bus->number == 0) {
+                cfg_base = ((1<<device)<<11);
+        } else {
+                cfg_base = 0x80000000 | (bus->number<<16) | (device<<11);
+        }
+
+        /* setup the lower bits of the 36 bit address */
+        offset = (function << 8) | (where & ~0x3);
+	/* pick up any address that falls below the page mask */
+	offset |= cfg_base & ~PAGE_MASK;
+
+	/* page boundary */
+	cfg_base = cfg_base & PAGE_MASK;
+
+	entryLo0 = (6 << 26)  | (cfg_base >> 6) | (2 << 3) | 7;
+	entryLo1 = (6 << 26)  | (cfg_base >> 6) | (0x1000 >> 6) | (2 << 3) | 7;
+
+	if ((entryLo0 != last_entryLo0) || (entryLo1 != last_entryLo1)) {
+		mod_wired_entry(pci_cfg_wired_entry, entryLo0, entryLo1,
+				(unsigned long)pci_cfg_vm->addr, PM_4K);
+		last_entryLo0 = entryLo0;
+		last_entryLo1 = entryLo1;
 	}
-#endif
 
 	if (access_type == PCI_ACCESS_WRITE) {
-		au_writel(*data, config);
+		au_writel(*data, (int)(pci_cfg_vm->addr + offset));
 	} else {
-		*data = au_readl(config);
+		*data = au_readl((int)(pci_cfg_vm->addr + offset));
 	}
 	au_sync_udelay(2);
 
-	/* unmap io space */
-	iounmap((void *) cfg_addr);
+	DBG("cfg_access %d bus->number %d dev %d at %x *data %x conf %x\n",
+			access_type, bus->number, device, where, *data, offset);
 
 	/* check master abort */
 	status = au_readl(Au1500_PCI_STATCMD);
-	if (status & (1 << 29)) {
-		printk("master abort\n");
+
+	if (status & (1<<29)) {
 		*data = 0xffffffff;
-		return -1;
+		error = -1;
+		DBG("Au1x Master Abort\n");
 	} else if ((status >> 28) & 0xf) {
-		printk("PCI ERR detected: status %x\n", status);
+		DBG("PCI ERR detected: status %x\n", status);
 		*data = 0xffffffff;
-		return -1;
-	} else {
-		printk("bios_successful: %x\n", *data);
-		return PCIBIOS_SUCCESSFUL;
+		error = -1;
+	}
+
+	/* Take away the idsel.
+	*/
+	if (board_pci_idsel) {
+		(void)board_pci_idsel(device, 0);
 	}
+
+	local_irq_restore(flags);
+	return error;
+#endif
 }
 
 static int read_config_byte(struct pci_bus *bus, unsigned int devfn,
diff -Nru a/arch/mips/sgi-ip27/ip27-hubio.c b/arch/mips/sgi-ip27/ip27-hubio.c
--- a/arch/mips/sgi-ip27/ip27-hubio.c	Sun May 16 01:18:36 2004
+++ b/arch/mips/sgi-ip27/ip27-hubio.c	Sun May 16 01:18:36 2004
@@ -166,18 +166,18 @@
 	REMOTE_HUB_S(nasid, IIO_OUTWIDGET_ACCESS, ii_iowa);
 }
 
-/**
+/*
  * hub_pio_init  -  PIO-related hub initalization
  *
  * @hub:	hubinfo structure for our hub
- **/
+ */
 void hub_pio_init(cnodeid_t cnode)
 {
 	nasid_t nasid = COMPACT_TO_NASID_NODEID(cnode);
 	unsigned i;
 
 	/* initialize big window piomaps for this hub */
-	CLEAR_BITMAP(HUB_DATA(cnode)->h_bigwin_used, HUB_NUM_BIG_WINDOW);
+	bitmap_zero(HUB_DATA(cnode)->h_bigwin_used, HUB_NUM_BIG_WINDOW);
 	for (i = 0; i < HUB_NUM_BIG_WINDOW; i++)
 		IIO_ITTE_DISABLE(nasid, i);
 
diff -Nru a/arch/mips/vr41xx/casio-e55/setup.c b/arch/mips/vr41xx/casio-e55/setup.c
--- a/arch/mips/vr41xx/casio-e55/setup.c	Sun May 16 01:18:34 2004
+++ b/arch/mips/vr41xx/casio-e55/setup.c	Sun May 16 01:18:34 2004
@@ -35,7 +35,8 @@
 	ioport_resource.end = IO_PORT_RESOURCE_END;
 
 #ifdef CONFIG_SERIAL_8250
-	vr41xx_siu_init(SIU_RS232C, 0);
+	vr41xx_select_siu_interface(SIU_RS232C, IRDA_NONE);
+	vr41xx_siu_init();
 #endif
 
 	return 0;
diff -Nru a/arch/mips/vr41xx/common/icu.c b/arch/mips/vr41xx/common/icu.c
--- a/arch/mips/vr41xx/common/icu.c	Sun May 16 01:18:33 2004
+++ b/arch/mips/vr41xx/common/icu.c	Sun May 16 01:18:33 2004
@@ -1,34 +1,23 @@
 /*
- * FILE NAME
- *	arch/mips/vr41xx/common/icu.c
+ *  icu.c, Interrupt Control Unit routines for the NEC VR4100 series.
  *
- * BRIEF MODULE DESCRIPTION
- *	Interrupt Control Unit routines for the NEC VR4100 series.
- *
- * Author: Yoichi Yuasa
- *         yyuasa@mvista.com or source@mvista.com
- *
- * Copyright 2001,2002 MontaVista Software Inc.
- *
- *  This program is free software; you can redistribute it and/or modify it
- *  under the terms of the GNU General Public License as published by the
- *  Free Software Foundation; either version 2 of the License, or (at your
- *  option) any later version.
- *
- *  THIS SOFTWARE IS PROVIDED ``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 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.
- *
- *  You should have received a copy of the GNU General Public License along
- *  with this program; if not, write to the Free Software Foundation, Inc.,
- *  675 Mass Ave, Cambridge, MA 02139, USA.
+ *  Copyright (C) 2001-2002  MontaVista Software Inc.
+ *    Author: Yoichi Yuasa <yyuasa@mvista.com or source@mvista.com>
+ *  Copyright (C) 2003-2004  Yoichi Yuasa <yuasa@hh.iij4u.or.jp>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 /*
  * Changes:
@@ -90,6 +79,9 @@
 #define MSYSINT2REG	0x06
 #define MGIUINTHREG	0x08
 
+#define MDSIUINTREG	KSEG1ADDR(0x0f000096)
+ #define INTDSIU	0x0800
+
 #define SYSINT1_IRQ_TO_PIN(x)	((x) - SYSINT1_IRQ_BASE)	/* Pin 0-15 */
 #define SYSINT2_IRQ_TO_PIN(x)	((x) - SYSINT2_IRQ_BASE)	/* Pin 0-15 */
 
@@ -144,6 +136,18 @@
 	write_icu2(res, offset);
 
 	return res;
+}
+
+/*=======================================================================*/
+
+void vr41xx_enable_dsiuint(void)
+{
+	writew(INTDSIU, MDSIUINTREG);
+}
+
+void vr41xx_disable_dsiuint(void)
+{
+	writew(0, MDSIUINTREG);
 }
 
 /*=======================================================================*/
diff -Nru a/arch/mips/vr41xx/common/serial.c b/arch/mips/vr41xx/common/serial.c
--- a/arch/mips/vr41xx/common/serial.c	Sun May 16 01:18:34 2004
+++ b/arch/mips/vr41xx/common/serial.c	Sun May 16 01:18:34 2004
@@ -40,14 +40,8 @@
 #include <asm/io.h>
 #include <asm/vr41xx/vr41xx.h>
 
-/* VR4111 and VR4121 SIU Registers */
-#define SIURB_TYPE1		KSEG1ADDR(0x0c000000)
 #define SIUIRSEL_TYPE1		KSEG1ADDR(0x0c000008)
-
-/* VR4122, VR4131 and VR4133 SIU Registers */
-#define SIURB_TYPE2		KSEG1ADDR(0x0f000800)
 #define SIUIRSEL_TYPE2		KSEG1ADDR(0x0f000808)
-
  #define USE_RS232C		0x00
  #define USE_IRDA		0x01
  #define SIU_USES_IRDA		0x00
@@ -58,21 +52,24 @@
  #define TMICTX			0x10
  #define TMICMODE		0x20
 
-#define SIU_BASE_BAUD		1152000
+#define SIU_BASE_TYPE1		0x0c000000UL	/* VR4111 and VR4121 */
+#define SIU_BASE_TYPE2		0x0f000800UL	/* VR4122, VR4131 and VR4133 */
+#define SIU_SIZE		0x8UL
 
-/* VR4122 and VR4131 DSIU Registers */
-#define DSIURB			KSEG1ADDR(0x0f000820)
+#define SIU_BASE_BAUD		1152000
 
-#define MDSIUINTREG		KSEG1ADDR(0x0f000096)
- #define INTDSIU		0x0800
+/* VR4122, VR4131 and VR4133 DSIU Registers */
+#define DSIU_BASE		0x0f000820UL
+#define DSIU_SIZE		0x8UL
 
 #define DSIU_BASE_BAUD		1152000
 
 int vr41xx_serial_ports = 0;
 
-void vr41xx_siu_ifselect(int interface, int module)
+void vr41xx_select_siu_interface(siu_interface_t interface,
+                                 irda_module_t module)
 {
-	u16 val = USE_RS232C;	/* Select RS-232C */
+	uint16_t val = USE_RS232C;	/* Select RS-232C */
 
 	/* Select IrDA */
 	if (interface == SIU_IRDA) {
@@ -86,6 +83,9 @@
 		case IRDA_HP:
 			val = IRDA_MODULE_HP;
 			break;
+		default:
+			printk(KERN_ERR "SIU: unknown IrDA module\n");
+			return;
 		}
 		val |= USE_IRDA | SIU_USES_IRDA;
 	}
@@ -101,45 +101,47 @@
 		writew(val, SIUIRSEL_TYPE2);
 		break;
 	default:
-		printk(KERN_INFO "Unexpected CPU of NEC VR4100 series\n");
+		printk(KERN_ERR "SIU: unsupported CPU of NEC VR4100 series\n");
 		break;
 	}
 }
 
-void __init vr41xx_siu_init(int interface, int module)
+void __init vr41xx_siu_init(void)
 {
 	struct uart_port port;
 
-	vr41xx_siu_ifselect(interface, module);
-
 	memset(&port, 0, sizeof(port));
 
 	port.line = vr41xx_serial_ports;
-	port.uartclk = SIU_BASE_BAUD;
+	port.uartclk = SIU_BASE_BAUD * 16;
 	port.irq = SIU_IRQ;
-	port.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST;
+	port.flags = UPF_RESOURCES | UPF_BOOT_AUTOCONF | UPF_SKIP_TEST;
 	switch (current_cpu_data.cputype) {
 	case CPU_VR4111:
 	case CPU_VR4121:
-		port.membase = (char *)SIURB_TYPE1;
+		port.mapbase = SIU_BASE_TYPE1;
 		break;
 	case CPU_VR4122:
 	case CPU_VR4131:
 	case CPU_VR4133:
-		port.membase = (char *)SIURB_TYPE2;
+		port.mapbase = SIU_BASE_TYPE2;
 		break;
 	default:
-		panic("Unexpected CPU of NEC VR4100 series");
-		break;
+		printk(KERN_ERR "SIU: unsupported CPU of NEC VR4100 series\n");
+		return;
 	}
 	port.regshift = 0;
 	port.iotype = UPIO_MEM;
-	if (early_serial_setup(&port) != 0)
-		printk(KERN_ERR "SIU setup failed!\n");
-
-	vr41xx_supply_clock(SIU_CLOCK);
+	port.membase = ioremap(port.mapbase, SIU_SIZE);
+	if (port.membase != NULL) {
+		if (early_serial_setup(&port) == 0) {
+			vr41xx_supply_clock(SIU_CLOCK);
+			vr41xx_serial_ports++;
+			return;
+		}
+	}
 
-	vr41xx_serial_ports++;
+	printk(KERN_ERR "SIU: setup failed!\n");
 }
 
 void __init vr41xx_dsiu_init(void)
@@ -148,24 +150,29 @@
 
 	if (current_cpu_data.cputype != CPU_VR4122 &&
 	    current_cpu_data.cputype != CPU_VR4131 &&
-	    current_cpu_data.cputype != CPU_VR4133)
+	    current_cpu_data.cputype != CPU_VR4133) {
+		printk(KERN_ERR "DSIU: unsupported CPU of NEC VR4100 series\n");
 		return;
+	}
 
 	memset(&port, 0, sizeof(port));
 
 	port.line = vr41xx_serial_ports;
-	port.uartclk = DSIU_BASE_BAUD;
+	port.uartclk = DSIU_BASE_BAUD * 16;
 	port.irq = DSIU_IRQ;
-	port.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST;
-	port.membase = (char *)DSIURB;
+	port.flags = UPF_RESOURCES | UPF_BOOT_AUTOCONF | UPF_SKIP_TEST;
+	port.mapbase = DSIU_BASE;
 	port.regshift = 0;
 	port.iotype = UPIO_MEM;
-	if (early_serial_setup(&port) != 0)
-		printk(KERN_ERR "DSIU setup failed!\n");
-
-	vr41xx_supply_clock(DSIU_CLOCK);
-
-	writew(INTDSIU, MDSIUINTREG);
+	port.membase = ioremap(port.mapbase, DSIU_SIZE);
+	if (port.membase != NULL) {
+		if (early_serial_setup(&port) == 0) {
+			vr41xx_supply_clock(DSIU_CLOCK);
+			vr41xx_enable_dsiuint();
+			vr41xx_serial_ports++;
+			return;
+		}
+	}
 
-	vr41xx_serial_ports++;
+	printk(KERN_ERR "DSIU: setup failed!\n");
 }
diff -Nru a/arch/mips/vr41xx/ibm-workpad/setup.c b/arch/mips/vr41xx/ibm-workpad/setup.c
--- a/arch/mips/vr41xx/ibm-workpad/setup.c	Sun May 16 01:18:33 2004
+++ b/arch/mips/vr41xx/ibm-workpad/setup.c	Sun May 16 01:18:33 2004
@@ -35,7 +35,8 @@
 	ioport_resource.end = IO_PORT_RESOURCE_END;
 
 #ifdef CONFIG_SERIAL_8250
-	vr41xx_siu_init(SIU_RS232C, 0);
+	vr41xx_select_siu_interface(SIU_RS232C, IRDA_NONE);
+	vr41xx_siu_init();
 #endif
 
 	return 0;
diff -Nru a/arch/mips/vr41xx/nec-eagle/setup.c b/arch/mips/vr41xx/nec-eagle/setup.c
--- a/arch/mips/vr41xx/nec-eagle/setup.c	Sun May 16 01:18:33 2004
+++ b/arch/mips/vr41xx/nec-eagle/setup.c	Sun May 16 01:18:33 2004
@@ -80,8 +80,9 @@
 	ioport_resource.end = IO_PORT_RESOURCE_END;
 
 #ifdef CONFIG_SERIAL_8250
+	vr41xx_select_siu_interface(SIU_RS232C, IRDA_NONE);
+	vr41xx_siu_init();
 	vr41xx_dsiu_init();
-	vr41xx_siu_init(SIU_RS232C, 0);
 #endif
 
 #ifdef CONFIG_PCI
diff -Nru a/arch/mips/vr41xx/tanbac-tb0226/setup.c b/arch/mips/vr41xx/tanbac-tb0226/setup.c
--- a/arch/mips/vr41xx/tanbac-tb0226/setup.c	Sun May 16 01:18:34 2004
+++ b/arch/mips/vr41xx/tanbac-tb0226/setup.c	Sun May 16 01:18:34 2004
@@ -83,7 +83,10 @@
 	ioport_resource.start = IO_PORT_RESOURCE_START;
 	ioport_resource.end = IO_PORT_RESOURCE_END;
 
-	vr41xx_siu_init(SIU_RS232C, 0);
+#ifdef CONFIG_SERIAL_8250
+	vr41xx_select_siu_interface(SIU_RS232C, IRDA_NONE);
+	vr41xx_siu_init();
+#endif
 
 #ifdef CONFIG_PCI
 	vr41xx_pciu_init(&pci_address_map);
diff -Nru a/arch/mips/vr41xx/tanbac-tb0229/setup.c b/arch/mips/vr41xx/tanbac-tb0229/setup.c
--- a/arch/mips/vr41xx/tanbac-tb0229/setup.c	Sun May 16 01:18:35 2004
+++ b/arch/mips/vr41xx/tanbac-tb0229/setup.c	Sun May 16 01:18:35 2004
@@ -87,8 +87,11 @@
 	ioport_resource.start = IO_PORT_RESOURCE_START;
 	ioport_resource.end = IO_PORT_RESOURCE_END;
 
-	vr41xx_siu_init(SIU_RS232C, 0);
+#ifdef CONFIG_SERIAL_8250
+	vr41xx_select_siu_interface(SIU_RS232C, IRDA_NONE);
+	vr41xx_siu_init();
 	vr41xx_dsiu_init();
+#endif
 
 #ifdef CONFIG_PCI
 	vr41xx_pciu_init(&pci_address_map);
diff -Nru a/arch/mips/vr41xx/victor-mpc30x/setup.c b/arch/mips/vr41xx/victor-mpc30x/setup.c
--- a/arch/mips/vr41xx/victor-mpc30x/setup.c	Sun May 16 01:18:36 2004
+++ b/arch/mips/vr41xx/victor-mpc30x/setup.c	Sun May 16 01:18:36 2004
@@ -84,7 +84,8 @@
 	ioport_resource.end = IO_PORT_RESOURCE_END;
 
 #ifdef CONFIG_SERIAL_8250
-	vr41xx_siu_init(SIU_RS232C, 0);
+	vr41xx_select_siu_interface(SIU_RS232C, IRDA_NONE);
+	vr41xx_siu_init();
 #endif
 
 #ifdef CONFIG_PCI
diff -Nru a/arch/mips/vr41xx/zao-capcella/setup.c b/arch/mips/vr41xx/zao-capcella/setup.c
--- a/arch/mips/vr41xx/zao-capcella/setup.c	Sun May 16 01:18:34 2004
+++ b/arch/mips/vr41xx/zao-capcella/setup.c	Sun May 16 01:18:34 2004
@@ -84,7 +84,8 @@
 	ioport_resource.end = IO_PORT_RESOURCE_END;
 
 #ifdef CONFIG_SERIAL_8250
-	vr41xx_siu_init(SIU_RS232C, 0);
+	vr41xx_select_siu_interface(SIU_RS232C, IRDA_NONE);
+	vr41xx_siu_init();
 	vr41xx_dsiu_init();
 #endif
 
diff -Nru a/arch/parisc/Kconfig b/arch/parisc/Kconfig
--- a/arch/parisc/Kconfig	Sun May 16 01:18:35 2004
+++ b/arch/parisc/Kconfig	Sun May 16 01:18:35 2004
@@ -51,25 +51,34 @@
 config PA7000
 	bool "PA7000/PA7100"
 	---help---
-	  This is the processor type of your CPU. This information is used for
-	  optimizing purposes.  In order to compile a kernel that can run on
-	  all PA CPUs (albeit not optimally fast), you can specify "PA7000"
-	  here.
+	  This is the processor type of your CPU.  This information is
+	  used for optimizing purposes.  In order to compile a kernel
+	  that can run on all 32-bit PA CPUs (albeit not optimally fast),
+	  you can specify "PA7000" here.
 
 	  Specifying "PA8000" here will allow you to select a 64-bit kernel
 	  which is required on some machines.
 
 config PA7100LC
-	bool "PA7100LC/PA7300LC"
+	bool "PA7100LC"
 	help
-	  Select this option for a 7100LC or 7300LC processor, as used
-	  in the 712, 715/Mirage, A180, B132, C160L and some other machines.
+	  Select this option for the PCX-L processor, as used in the
+	  712, 715/64, 715/80, 715/100, 715/100XC, 725/100, 743, 748,
+	  D200, D210, D300, D310 and E-class
 
 config PA7200
 	bool "PA7200"
 	help
-	  Select this option for the PCX-T' processor, as used in C110, D100
-	  and similar machines.
+	  Select this option for the PCX-T' processor, as used in the
+	  C100, C110, J100, J110, J210XC, D250, D260, D350, D360,
+	  K100, K200, K210, K220, K400, K410 and K420
+
+config PA7300LC
+	bool "PA7300LC"
+	help
+	  Select this option for the PCX-L2 processor, as used in the
+	  744, A180, B132L, B160L, B180L, C132L, C160L, C180L,
+	  D220, D230, D320 and D330.
 
 config PA8X00
 	bool "PA8000 and up"
@@ -81,14 +90,16 @@
 # Define implied options from the CPU selection here
 
 config PA20
-	bool
+	def_bool y
 	depends on PA8X00
-	default y
 
 config PA11
-	bool
-	depends on PA7000 || PA7100LC || PA7200
-	default y
+	def_bool y
+	depends on PA7000 || PA7100LC || PA7200 || PA7300LC
+
+config PREFETCH
+	def_bool y
+	depends on PA8X00
 
 config PARISC64
 	bool "64-bit kernel"
@@ -105,18 +116,6 @@
 
 config 64BIT
 	def_bool PARISC64
-
-config PDC_NARROW
-	bool "32-bit firmware"
-	depends on PARISC64
-	help
-	  This option will enable owners of C160, C180, C200, C240, C360, J280,
-	  J282, J2240 and some D/K/R class to run a 64bit kernel with their
-	  32bit PDC firmware.
-	
-	  Nobody should try this option unless they know what they are doing.
-	
-	  If unsure, say N.
 
 config SMP
 	bool "Symmetric multi-processing support"
diff -Nru a/arch/parisc/Makefile b/arch/parisc/Makefile
--- a/arch/parisc/Makefile	Sun May 16 01:18:36 2004
+++ b/arch/parisc/Makefile	Sun May 16 01:18:36 2004
@@ -16,7 +16,7 @@
 # Modified for PA-RISC Linux by Paul Lahaie, Alex deVries, 
 # Mike Shaver, Helge Deller and Martin K. Petersen
 #
-NM		= sh arch/parisc/nm
+NM		= sh $(srctree)/arch/parisc/nm
 ifdef CONFIG_PARISC64
 CROSS_COMPILE	:= hppa64-linux-
 UTS_MACHINE	:= parisc64
@@ -48,6 +48,7 @@
 cflags-$(CONFIG_PA7100)		+= -march=1.1 -mschedule=7100
 cflags-$(CONFIG_PA7200)		+= -march=1.1 -mschedule=7200
 cflags-$(CONFIG_PA7100LC)	+= -march=1.1 -mschedule=7100LC
+cflags-$(CONFIG_PA7300LC)	+= -march=1.1 -mschedule=7300
 cflags-$(CONFIG_PA8X00)		+= -march=2.0 -mschedule=8000
 
 head-y			:= arch/parisc/kernel/head.o 
diff -Nru a/arch/parisc/configs/712_defconfig b/arch/parisc/configs/712_defconfig
--- a/arch/parisc/configs/712_defconfig	Sun May 16 01:18:37 2004
+++ b/arch/parisc/configs/712_defconfig	Sun May 16 01:18:37 2004
@@ -142,6 +142,12 @@
 # CONFIG_SCSI_LOGGING is not set
 
 #
+# SCSI Transport Attributes
+#
+CONFIG_SCSI_SPI_ATTRS=y
+CONFIG_SCSI_FC_ATTRS=y
+
+#
 # SCSI low-level drivers
 #
 # CONFIG_SCSI_AIC7XXX_OLD is not set
@@ -180,10 +186,6 @@
 #
 
 #
-# Macintosh device drivers
-#
-
-#
 # Networking support
 #
 CONFIG_NET=y
@@ -206,7 +208,6 @@
 # CONFIG_NET_IPIP is not set
 # CONFIG_NET_IPGRE is not set
 # CONFIG_IP_MROUTE is not set
-CONFIG_INET_ECN=y
 # CONFIG_SYN_COOKIES is not set
 # CONFIG_INET_AH is not set
 # CONFIG_INET_ESP is not set
@@ -290,6 +291,8 @@
 # Bluetooth support
 #
 # CONFIG_BT is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
 
 #
 # ISDN subsystem
@@ -335,6 +338,7 @@
 CONFIG_INPUT_KEYBOARD=y
 # CONFIG_KEYBOARD_ATKBD is not set
 # CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
 # CONFIG_KEYBOARD_XTKBD is not set
 # CONFIG_KEYBOARD_NEWTON is not set
 # CONFIG_KEYBOARD_HIL_OLD is not set
@@ -342,6 +346,7 @@
 CONFIG_INPUT_MOUSE=y
 # CONFIG_MOUSE_PS2 is not set
 # CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_VSXXXAA is not set
 # CONFIG_MOUSE_HIL is not set
 # CONFIG_INPUT_JOYSTICK is not set
 # CONFIG_INPUT_TOUCHSCREEN is not set
@@ -385,11 +390,6 @@
 # CONFIG_LP_CONSOLE is not set
 # CONFIG_PPDEV is not set
 # CONFIG_TIPAR is not set
-
-#
-# Mice
-#
-# CONFIG_BUSMOUSE is not set
 # CONFIG_QIC02_TAPE is not set
 
 #
@@ -401,7 +401,6 @@
 # Watchdog Cards
 #
 # CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
 CONFIG_GEN_RTC=y
 # CONFIG_GEN_RTC_X is not set
 # CONFIG_DTLK is not set
@@ -635,6 +634,7 @@
 # CONFIG_CRYPTO_CAST6 is not set
 # CONFIG_CRYPTO_ARC4 is not set
 # CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
 # CONFIG_CRYPTO_TEST is not set
 
 #
diff -Nru a/arch/parisc/configs/a500_defconfig b/arch/parisc/configs/a500_defconfig
--- a/arch/parisc/configs/a500_defconfig	Sun May 16 01:18:34 2004
+++ b/arch/parisc/configs/a500_defconfig	Sun May 16 01:18:34 2004
@@ -27,7 +27,7 @@
 CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG_PROC=y
 CONFIG_EMBEDDED=y
-# CONFIG_KALLSYMS is not set
+CONFIG_KALLSYMS=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 CONFIG_IOSCHED_NOOP=y
@@ -78,6 +78,7 @@
 # PCMCIA/CardBus support
 #
 CONFIG_PCMCIA=m
+CONFIG_PCMCIA_DEBUG=y
 CONFIG_YENTA=m
 CONFIG_CARDBUS=y
 # CONFIG_I82092 is not set
@@ -129,6 +130,7 @@
 CONFIG_BLK_DEV_LOOP=y
 # CONFIG_BLK_DEV_CRYPTOLOOP is not set
 # CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_CARMEL is not set
 CONFIG_BLK_DEV_RAM=y
 CONFIG_BLK_DEV_RAM_SIZE=6144
 CONFIG_BLK_DEV_INITRD=y
@@ -163,6 +165,12 @@
 # CONFIG_SCSI_LOGGING is not set
 
 #
+# SCSI Transport Attributes
+#
+CONFIG_SCSI_SPI_ATTRS=y
+# CONFIG_SCSI_FC_ATTRS is not set
+
+#
 # SCSI low-level drivers
 #
 # CONFIG_BLK_DEV_3W_XXXX_RAID is not set
@@ -243,10 +251,6 @@
 #
 
 #
-# Macintosh device drivers
-#
-
-#
 # Networking support
 #
 CONFIG_NET=y
@@ -270,7 +274,6 @@
 # CONFIG_NET_IPGRE is not set
 # CONFIG_IP_MROUTE is not set
 # CONFIG_ARPD is not set
-# CONFIG_INET_ECN is not set
 # CONFIG_SYN_COOKIES is not set
 CONFIG_INET_AH=m
 CONFIG_INET_ESP=m
@@ -348,7 +351,6 @@
 #
 # SCTP Configuration (EXPERIMENTAL)
 #
-CONFIG_IPV6_SCTP__=y
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
 # CONFIG_VLAN_8021Q is not set
@@ -504,6 +506,11 @@
 CONFIG_PCMCIA_HERMES=m
 CONFIG_AIRO_CS=m
 # CONFIG_PCMCIA_WL3501 is not set
+
+#
+# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
+#
+# CONFIG_PRISM54 is not set
 CONFIG_NET_WIRELESS=y
 
 #
@@ -512,6 +519,7 @@
 # CONFIG_TR is not set
 # CONFIG_NET_FC is not set
 # CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # Wan interfaces
@@ -545,6 +553,8 @@
 # Bluetooth support
 #
 # CONFIG_BT is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
 
 #
 # ISDN subsystem
@@ -617,11 +627,6 @@
 CONFIG_SERIAL_CORE_CONSOLE=y
 CONFIG_UNIX98_PTYS=y
 # CONFIG_LEGACY_PTYS is not set
-
-#
-# Mice
-#
-# CONFIG_BUSMOUSE is not set
 # CONFIG_QIC02_TAPE is not set
 
 #
@@ -633,7 +638,6 @@
 # Watchdog Cards
 #
 # CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
 CONFIG_GEN_RTC=y
 CONFIG_GEN_RTC_X=y
 # CONFIG_DTLK is not set
@@ -682,7 +686,6 @@
 # Console display driver support
 #
 # CONFIG_MDA_CONSOLE is not set
-# CONFIG_STI_CONSOLE is not set
 CONFIG_DUMMY_CONSOLE_COLUMNS=160
 CONFIG_DUMMY_CONSOLE_ROWS=64
 CONFIG_DUMMY_CONSOLE=y
@@ -788,7 +791,8 @@
 CONFIG_LOCKD_V4=y
 CONFIG_EXPORTFS=m
 CONFIG_SUNRPC=m
-# CONFIG_SUNRPC_GSS is not set
+CONFIG_SUNRPC_GSS=m
+CONFIG_RPCSEC_GSS_KRB5=m
 CONFIG_SMB_FS=m
 CONFIG_SMB_NLS_DEFAULT=y
 CONFIG_SMB_NLS_REMOTE="cp437"
@@ -887,6 +891,7 @@
 CONFIG_CRYPTO_CAST6=m
 # CONFIG_CRYPTO_ARC4 is not set
 CONFIG_CRYPTO_DEFLATE=m
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
 CONFIG_CRYPTO_TEST=m
 
 #
diff -Nru a/arch/parisc/configs/b180_defconfig b/arch/parisc/configs/b180_defconfig
--- a/arch/parisc/configs/b180_defconfig	Sun May 16 01:18:34 2004
+++ b/arch/parisc/configs/b180_defconfig	Sun May 16 01:18:34 2004
@@ -121,6 +121,7 @@
 CONFIG_BLK_DEV_LOOP=y
 CONFIG_BLK_DEV_CRYPTOLOOP=y
 # CONFIG_BLK_DEV_NBD is not set
+CONFIG_BLK_DEV_CARMEL=y
 # CONFIG_BLK_DEV_RAM is not set
 
 #
@@ -153,6 +154,12 @@
 # CONFIG_SCSI_LOGGING is not set
 
 #
+# SCSI Transport Attributes
+#
+CONFIG_SCSI_SPI_ATTRS=y
+# CONFIG_SCSI_FC_ATTRS is not set
+
+#
 # SCSI low-level drivers
 #
 # CONFIG_BLK_DEV_3W_XXXX_RAID is not set
@@ -245,10 +252,6 @@
 # CONFIG_I2O is not set
 
 #
-# Macintosh device drivers
-#
-
-#
 # Networking support
 #
 CONFIG_NET=y
@@ -271,7 +274,6 @@
 # CONFIG_NET_IPIP is not set
 # CONFIG_NET_IPGRE is not set
 # CONFIG_IP_MROUTE is not set
-CONFIG_INET_ECN=y
 # CONFIG_SYN_COOKIES is not set
 # CONFIG_INET_AH is not set
 # CONFIG_INET_ESP is not set
@@ -376,6 +378,10 @@
 #
 # CONFIG_AIRO is not set
 # CONFIG_HERMES is not set
+
+#
+# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
+#
 CONFIG_NET_WIRELESS=y
 
 #
@@ -403,6 +409,8 @@
 # Bluetooth support
 #
 # CONFIG_BT is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
 
 #
 # ISDN subsystem
@@ -449,6 +457,7 @@
 CONFIG_INPUT_KEYBOARD=y
 # CONFIG_KEYBOARD_ATKBD is not set
 # CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
 # CONFIG_KEYBOARD_XTKBD is not set
 # CONFIG_KEYBOARD_NEWTON is not set
 # CONFIG_KEYBOARD_HIL_OLD is not set
@@ -459,6 +468,7 @@
 # CONFIG_MOUSE_INPORT is not set
 # CONFIG_MOUSE_LOGIBM is not set
 # CONFIG_MOUSE_PC110PAD is not set
+# CONFIG_MOUSE_VSXXXAA is not set
 # CONFIG_MOUSE_HIL is not set
 # CONFIG_INPUT_JOYSTICK is not set
 # CONFIG_INPUT_TOUCHSCREEN is not set
@@ -502,11 +512,6 @@
 # CONFIG_LP_CONSOLE is not set
 # CONFIG_PPDEV is not set
 # CONFIG_TIPAR is not set
-
-#
-# Mice
-#
-# CONFIG_BUSMOUSE is not set
 # CONFIG_QIC02_TAPE is not set
 
 #
@@ -518,7 +523,6 @@
 # Watchdog Cards
 #
 # CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
 CONFIG_GEN_RTC=y
 # CONFIG_GEN_RTC_X is not set
 # CONFIG_DTLK is not set
@@ -768,6 +772,7 @@
 # CONFIG_CRYPTO_CAST6 is not set
 # CONFIG_CRYPTO_ARC4 is not set
 # CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
 # CONFIG_CRYPTO_TEST is not set
 
 #
diff -Nru a/arch/parisc/configs/c3000_defconfig b/arch/parisc/configs/c3000_defconfig
--- a/arch/parisc/configs/c3000_defconfig	Sun May 16 01:18:35 2004
+++ b/arch/parisc/configs/c3000_defconfig	Sun May 16 01:18:35 2004
@@ -77,6 +77,7 @@
 # PCMCIA/CardBus support
 #
 CONFIG_PCMCIA=m
+CONFIG_PCMCIA_DEBUG=y
 CONFIG_YENTA=m
 CONFIG_CARDBUS=y
 # CONFIG_I82092 is not set
@@ -128,6 +129,7 @@
 CONFIG_BLK_DEV_LOOP=y
 # CONFIG_BLK_DEV_CRYPTOLOOP is not set
 # CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_CARMEL is not set
 # CONFIG_BLK_DEV_RAM is not set
 
 #
@@ -213,6 +215,12 @@
 # CONFIG_SCSI_LOGGING is not set
 
 #
+# SCSI Transport Attributes
+#
+CONFIG_SCSI_SPI_ATTRS=y
+# CONFIG_SCSI_FC_ATTRS is not set
+
+#
 # SCSI low-level drivers
 #
 # CONFIG_BLK_DEV_3W_XXXX_RAID is not set
@@ -230,6 +238,7 @@
 CONFIG_SCSI_SATA_PROMISE=m
 CONFIG_SCSI_SATA_SIL=m
 CONFIG_SCSI_SATA_VIA=m
+# CONFIG_SCSI_SATA_VITESSE is not set
 # CONFIG_SCSI_BUSLOGIC is not set
 # CONFIG_SCSI_CPQFCTS is not set
 # CONFIG_SCSI_DMX3191D is not set
@@ -304,10 +313,6 @@
 # CONFIG_I2O is not set
 
 #
-# Macintosh device drivers
-#
-
-#
 # Networking support
 #
 CONFIG_NET=y
@@ -331,7 +336,6 @@
 # CONFIG_NET_IPGRE is not set
 # CONFIG_IP_MROUTE is not set
 # CONFIG_ARPD is not set
-# CONFIG_INET_ECN is not set
 # CONFIG_SYN_COOKIES is not set
 CONFIG_INET_AH=m
 CONFIG_INET_ESP=m
@@ -409,7 +413,6 @@
 #
 # SCTP Configuration (EXPERIMENTAL)
 #
-CONFIG_IPV6_SCTP__=y
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
 # CONFIG_VLAN_8021Q is not set
@@ -543,6 +546,7 @@
 # CONFIG_NET_FC is not set
 # CONFIG_RCPCI is not set
 # CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # Wan interfaces
@@ -576,6 +580,8 @@
 # Bluetooth support
 #
 # CONFIG_BT is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
 
 #
 # ISDN subsystem
@@ -619,6 +625,7 @@
 CONFIG_INPUT_KEYBOARD=y
 # CONFIG_KEYBOARD_ATKBD is not set
 # CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
 # CONFIG_KEYBOARD_XTKBD is not set
 # CONFIG_KEYBOARD_NEWTON is not set
 # CONFIG_KEYBOARD_HIL_OLD is not set
@@ -626,6 +633,7 @@
 CONFIG_INPUT_MOUSE=y
 # CONFIG_MOUSE_PS2 is not set
 # CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_VSXXXAA is not set
 # CONFIG_MOUSE_HIL is not set
 # CONFIG_INPUT_JOYSTICK is not set
 # CONFIG_INPUT_TOUCHSCREEN is not set
@@ -663,11 +671,6 @@
 CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
-
-#
-# Mice
-#
-# CONFIG_BUSMOUSE is not set
 # CONFIG_QIC02_TAPE is not set
 
 #
@@ -679,7 +682,6 @@
 # Watchdog Cards
 #
 # CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
 CONFIG_GEN_RTC=y
 CONFIG_GEN_RTC_X=y
 # CONFIG_DTLK is not set
@@ -831,7 +833,9 @@
 CONFIG_USB_WACOM=m
 CONFIG_USB_KBTAB=m
 # CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_MTOUCH is not set
 # CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
 
 #
 # USB Imaging devices
@@ -968,7 +972,7 @@
 CONFIG_LOCKD_V4=y
 CONFIG_EXPORTFS=y
 CONFIG_SUNRPC=y
-# CONFIG_SUNRPC_GSS is not set
+# CONFIG_RPCSEC_GSS_KRB5 is not set
 # CONFIG_SMB_FS is not set
 # CONFIG_CIFS is not set
 # CONFIG_NCP_FS is not set
@@ -1065,6 +1069,7 @@
 CONFIG_CRYPTO_CAST6=m
 # CONFIG_CRYPTO_ARC4 is not set
 CONFIG_CRYPTO_DEFLATE=m
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
 CONFIG_CRYPTO_TEST=m
 
 #
diff -Nru a/arch/parisc/kernel/Makefile b/arch/parisc/kernel/Makefile
--- a/arch/parisc/kernel/Makefile	Sun May 16 01:18:34 2004
+++ b/arch/parisc/kernel/Makefile	Sun May 16 01:18:34 2004
@@ -14,7 +14,7 @@
 		   pa7300lc.o syscall.o entry.o sys_parisc.o firmware.o \
 		   ptrace.o hardware.o inventory.o drivers.o semaphore.o \
 		   signal.o hpmc.o real2.o parisc_ksyms.o unaligned.o \
-		   process.o processor.o pdc_cons.o pdc_chassis.o
+		   process.o processor.o pdc_cons.o pdc_chassis.o unwind.o
 
 obj-$(CONFIG_SMP)	+= smp.o
 obj-$(CONFIG_PA11)	+= pci-dma.o
diff -Nru a/arch/parisc/kernel/asm-offsets.c b/arch/parisc/kernel/asm-offsets.c
--- a/arch/parisc/kernel/asm-offsets.c	Sun May 16 01:18:33 2004
+++ b/arch/parisc/kernel/asm-offsets.c	Sun May 16 01:18:33 2004
@@ -32,6 +32,7 @@
 #include <linux/thread_info.h>
 #include <linux/version.h>
 #include <linux/ptrace.h>
+#include <asm/pgtable.h>
 
 #include <asm/ptrace.h>
 #include <asm/processor.h>
@@ -275,6 +276,20 @@
 	BLANK();
 	DEFINE(PA_BLOCKSTEP_BIT, 31-PT_BLOCKSTEP_BIT);
 	DEFINE(PA_SINGLESTEP_BIT, 31-PT_SINGLESTEP_BIT);
+	BLANK();
+	DEFINE(ASM_PMD_SHIFT, PMD_SHIFT);
+	DEFINE(ASM_PGDIR_SHIFT, PGDIR_SHIFT);
+	DEFINE(ASM_BITS_PER_PGD, BITS_PER_PGD);
+	DEFINE(ASM_BITS_PER_PMD, BITS_PER_PMD);
+	DEFINE(ASM_BITS_PER_PTE, BITS_PER_PTE);
+	DEFINE(ASM_PGD_PMD_OFFSET, -(PAGE_SIZE << PGD_ORDER));
+	DEFINE(ASM_PMD_ENTRY, ((PAGE_OFFSET & PMD_MASK) >> PMD_SHIFT));
+	DEFINE(ASM_PGD_ENTRY, PAGE_OFFSET >> PGDIR_SHIFT);
+	DEFINE(ASM_PGD_ENTRY_SIZE, PGD_ENTRY_SIZE);
+	DEFINE(ASM_PMD_ENTRY_SIZE, PMD_ENTRY_SIZE);
+	DEFINE(ASM_PTE_ENTRY_SIZE, PTE_ENTRY_SIZE);
+	DEFINE(ASM_PT_INITIAL, PT_INITIAL);
+	DEFINE(ASM_PAGE_SIZE, PAGE_SIZE);
 	BLANK();
 	return 0;
 }
diff -Nru a/arch/parisc/kernel/cache.c b/arch/parisc/kernel/cache.c
--- a/arch/parisc/kernel/cache.c	Sun May 16 01:18:34 2004
+++ b/arch/parisc/kernel/cache.c	Sun May 16 01:18:34 2004
@@ -230,27 +230,22 @@
 void __flush_dcache_page(struct page *page)
 {
 	struct address_space *mapping = page_mapping(page);
-	struct mm_struct *mm = current->active_mm;
 	struct list_head *l;
 
 	flush_kernel_dcache_page(page_address(page));
 
 	if (!mapping)
 		return;
-	/* check shared list first if it's not empty...it's usually
-	 * the shortest */
+
+	/* We have ensured in arch_get_unmapped_area() that all shared
+	 * mappings are mapped at equivalent addresses, so we only need
+	 * to flush one for them all to become coherent */
 	list_for_each(l, &mapping->i_mmap_shared) {
 		struct vm_area_struct *mpnt;
-		unsigned long off;
+		unsigned long off, addr;
 
 		mpnt = list_entry(l, struct vm_area_struct, shared);
 
-		/*
-		 * If this VMA is not in our MM, we can ignore it.
-		 */
-		if (mpnt->vm_mm != mm)
-			continue;
-
 		if (page->index < mpnt->vm_pgoff)
 			continue;
 
@@ -258,26 +253,35 @@
 		if (off >= (mpnt->vm_end - mpnt->vm_start) >> PAGE_SHIFT)
 			continue;
 
-		flush_cache_page(mpnt, mpnt->vm_start + (off << PAGE_SHIFT));
+		addr = mpnt->vm_start + (off << PAGE_SHIFT);
+
+		/* flush instructions produce non access tlb misses.
+		 * On PA, we nullify these instructions rather than 
+		 * taking a page fault if the pte doesn't exist, so we
+		 * have to find a congruent address with an existing
+		 * translation */
+
+		if (!translation_exists(mpnt, addr))
+			continue;
+
+		__flush_cache_page(mpnt, addr);
 
-		/* All user shared mappings should be equivalently mapped,
-		 * so once we've flushed one we should be ok
-		 */
+		/* If we find an address to flush, that will also
+		 * bring all the private mappings up to date (see
+		 * comment below) */
 		return;
 	}
 
-	/* then check private mapping list for read only shared mappings
-	 * which are flagged by VM_MAYSHARE */
+	/* we have carefully arranged in arch_get_unmapped_area() that
+	 * *any* mappings of a file are always congruently mapped (whether
+	 * declared as MAP_PRIVATE or MAP_SHARED), so we only need
+	 * to flush one address here too */
 	list_for_each(l, &mapping->i_mmap) {
 		struct vm_area_struct *mpnt;
-		unsigned long off;
+		unsigned long off, addr;
 
 		mpnt = list_entry(l, struct vm_area_struct, shared);
 
-
-		if (mpnt->vm_mm != mm || !(mpnt->vm_flags & VM_MAYSHARE))
-			continue;
-
 		if (page->index < mpnt->vm_pgoff)
 			continue;
 
@@ -285,12 +289,17 @@
 		if (off >= (mpnt->vm_end - mpnt->vm_start) >> PAGE_SHIFT)
 			continue;
 
-		flush_cache_page(mpnt, mpnt->vm_start + (off << PAGE_SHIFT));
+		addr = mpnt->vm_start + (off << PAGE_SHIFT);
 
-		/* All user shared mappings should be equivalently mapped,
-		 * so once we've flushed one we should be ok
-		 */
-		break;
+		/* This is just for speed.  If the page translation isn't
+		 * there there's no point exciting the nadtlb handler into
+		 * a nullification frenzy */
+		if(!translation_exists(mpnt, addr))
+			continue;
+
+		__flush_cache_page(mpnt, addr);
+
+		return;
 	}
 }
 EXPORT_SYMBOL(__flush_dcache_page);
diff -Nru a/arch/parisc/kernel/entry.S b/arch/parisc/kernel/entry.S
--- a/arch/parisc/kernel/entry.S	Sun May 16 01:18:34 2004
+++ b/arch/parisc/kernel/entry.S	Sun May 16 01:18:34 2004
@@ -40,11 +40,13 @@
 #ifdef __LP64__
 #define CMPIB           cmpib,*
 #define CMPB            cmpb,*
+#define COND(x)		*x
 
 	.level 2.0w
 #else
 #define CMPIB           cmpib,
 #define CMPB            cmpb,
+#define COND(x)		x
 
 	.level 2.0
 #endif
@@ -389,6 +391,228 @@
 	.align		32
 	.endm
 
+	/* The following are simple 32 vs 64 bit instruction
+	 * abstractions for the macros */
+	.macro		EXTR	reg1,start,length,reg2
+#ifdef __LP64__
+	extrd,u		\reg1,32+\start,\length,\reg2
+#else
+	extrw,u		\reg1,\start,\length,\reg2
+#endif
+	.endm
+
+	.macro		DEP	reg1,start,length,reg2
+#ifdef __LP64__
+	depd		\reg1,32+\start,\length,\reg2
+#else
+	depw		\reg1,\start,\length,\reg2
+#endif
+	.endm
+
+	.macro		DEPI	val,start,length,reg
+#ifdef __LP64__
+	depdi		\val,32+\start,\length,\reg
+#else
+	depwi		\val,\start,\length,\reg
+#endif
+	.endm
+
+	/* In LP64, the space contains part of the upper 32 bits of the
+	 * fault.  We have to extract this and place it in the va,
+	 * zeroing the corresponding bits in the space register */
+	.macro		space_adjust	spc,va,tmp
+#ifdef __LP64__
+	extrd,u		\spc,63,SPACEID_SHIFT,\tmp
+	depd		%r0,63,SPACEID_SHIFT,\spc
+	depd		\tmp,31,SPACEID_SHIFT,\va
+#endif
+	.endm
+
+	.import		swapper_pg_dir,code
+
+	/* Get the pgd.  For faults on space zero (kernel space), this
+	 * is simply swapper_pg_dir.  For user space faults, the
+	 * pgd is stored in %cr25 */
+	.macro		get_pgd		spc,reg
+	ldil		L%PA(swapper_pg_dir),\reg
+	ldo		R%PA(swapper_pg_dir)(\reg),\reg
+	or,COND(=)	%r0,\spc,%r0
+	mfctl		%cr25,\reg
+	.endm
+
+	/* Only allow faults on different spaces from the
+	 * currently active one if we're the kernel */
+	.macro		space_check	spc,tmp,fault
+	mfsp		%sr7,\tmp
+	or,COND(<>)	%r0,\spc,%r0	/* user may execute gateway page
+					 * as kernel, so defeat the space
+					 * check if it is */
+	copy		\spc,\tmp
+	or,COND(=)	%r0,\tmp,%r0	/* nullify if executing as kernel */
+	cmpb,COND(<>),n	\tmp,\spc,\fault
+	.endm
+
+	/* Look up a PTE in a 2-Level scheme (faulting at each
+	 * level if the entry isn't present 
+	 *
+	 * NOTE: we use ldw even for LP64 because our pte
+	 * and pmd are allocated <4GB */
+	.macro		L2_ptep	pmd,pte,index,va,fault
+#if PT_NLEVELS == 3
+	EXTR		\va,31-ASM_PMD_SHIFT,ASM_BITS_PER_PMD,\index
+#else
+	EXTR		\va,31-ASM_PGDIR_SHIFT,ASM_BITS_PER_PGD,\index
+#endif
+	DEP		%r0,31,PAGE_SHIFT,\pmd	/* clear offset */
+	copy		%r0,\pte
+	ldw,s		\index(\pmd),\pmd
+	EXTR		\va,31-PAGE_SHIFT,ASM_BITS_PER_PTE,\index
+	bb,>=,n		\pmd,_PAGE_PRESENT_BIT,\fault
+	DEP		%r0,31,PAGE_SHIFT,\pmd	/* clear offset */
+	shladd		\index,BITS_PER_PTE_ENTRY,\pmd,\pmd
+	LDREG		%r0(\pmd),\pte		/* pmd is now pte */
+	bb,>=,n		\pte,_PAGE_PRESENT_BIT,\fault
+	.endm
+
+	/* Look up PTE in a 3-Level scheme.
+	 *
+	 * Here we implement a Hybrid L2/L3 scheme: we allocate the
+	 * first pmd adjacent to the pgd.  This means that we can
+	 * subtract a constant offset to get to it.  The pmd and pgd
+	 * sizes are arranged so that a single pmd covers 4GB (giving
+	 * a full LP64 process access to 8TB) so our lookups are
+	 * effectively L2 for the first 4GB of the kernel (i.e. for
+	 * all ILP32 processes and all the kernel for machines with
+	 * under 4GB of memory) */
+	.macro		L3_ptep pgd,pte,index,va,fault
+	extrd,u		\va,63-ASM_PGDIR_SHIFT,ASM_BITS_PER_PGD,\index
+	copy		%r0,\pte
+	extrd,u,*=	\va,31,32,%r0
+	ldw,s		\index(\pgd),\pgd
+	extrd,u,*<>	\va,31,32,%r0
+	ldo		ASM_PGD_PMD_OFFSET(\pgd),\pgd
+	extrd,u,*=	\va,31,32,%r0
+	bb,>=,n		\pgd,_PAGE_PRESENT_BIT,\fault
+	L2_ptep		\pgd,\pte,\index,\va,\fault
+	.endm
+
+	/* Set the _PAGE_ACCESSED bit of the PTE.  Be clever and
+	 * don't needlessly dirty the cache line if it was already set */
+	.macro		update_ptep	ptep,pte,tmp,tmp1
+	ldi		_PAGE_ACCESSED,\tmp1
+	or		\tmp1,\pte,\tmp
+	and,COND(<>)	\tmp1,\pte,%r0
+	STREG		\tmp,0(\ptep)
+	.endm
+
+	/* Set the dirty bit (and accessed bit).  No need to be
+	 * clever, this is only used from the dirty fault */
+	.macro		update_dirty	ptep,pte,tmp,tmp1
+	ldi		_PAGE_ACCESSED|_PAGE_DIRTY,\tmp
+	or		\tmp,\pte,\pte
+	STREG		\pte,0(\ptep)
+	.endm
+
+	/* Convert the pte and prot to tlb insertion values.  How
+	 * this happens is quite subtle, read below */
+	.macro		make_insert_tlb	spc,pte,prot
+	space_to_prot   \spc \prot        /* create prot id from space */
+	/* The following is the real subtlety.  This is depositing
+	 * T <-> _PAGE_REFTRAP
+	 * D <-> _PAGE_DIRTY
+	 * B <-> _PAGE_DMB (memory break)
+	 *
+	 * Then incredible subtlety: The access rights are
+	 * _PAGE_GATEWAY _PAGE_EXEC _PAGE_READ
+	 * See 3-14 of the parisc 2.0 manual
+	 *
+	 * Finally, _PAGE_READ goes in the top bit of PL1 (so we
+	 * trigger an access rights trap in user space if the user
+	 * tries to read an unreadable page */
+	depd            \pte,8,7,\prot
+
+	/* PAGE_USER indicates the page can be read with user privileges,
+	 * so deposit X1|11 to PL1|PL2 (remember the upper bit of PL1
+	 * contains _PAGE_READ */
+	extrd,u,*=      \pte,_PAGE_USER_BIT+32,1,%r0
+	depdi		7,11,3,\prot
+	/* If we're a gateway page, drop PL2 back to zero for promotion
+	 * to kernel privilege (so we can execute the page as kernel).
+	 * Any privilege promotion page always denys read and write */
+	extrd,u,*= 	\pte,_PAGE_GATEWAY_BIT+32,1,%r0
+	depd		%r0,11,2,\prot	/* If Gateway, Set PL2 to 0 */
+
+	/* Get rid of prot bits and convert to page addr for iitlbt */
+
+	depd		%r0,63,PAGE_SHIFT,\pte
+	extrd,u		\pte,56,32,\pte
+	.endm
+
+	/* Identical macro to make_insert_tlb above, except it
+	 * makes the tlb entry for the differently formatted pa11
+	 * insertion instructions */
+	.macro		make_insert_tlb_11	spc,pte,prot
+	zdep		\spc,30,15,\prot
+	dep		\pte,8,7,\prot
+	extru,=		\pte,_PAGE_NO_CACHE_BIT,1,%r0
+	depi		1,12,1,\prot
+	extru,=         \pte,_PAGE_USER_BIT,1,%r0
+	depi		7,11,3,\prot   /* Set for user space (1 rsvd for read) */
+	extru,= 	\pte,_PAGE_GATEWAY_BIT,1,%r0
+	depi		0,11,2,\prot	/* If Gateway, Set PL2 to 0 */
+
+	/* Get rid of prot bits and convert to page addr for iitlba */
+
+	depi		0,31,12,\pte
+	extru		\pte,24,25,\pte
+
+	.endm
+
+	/* This is for ILP32 PA2.0 only.  The TLB insertion needs
+	 * to extend into I/O space if the address is 0xfXXXXXXX
+	 * so we extend the f's into the top word of the pte in
+	 * this case */
+	.macro		f_extend	pte,tmp
+	extrd,s		\pte,42,4,\tmp
+	addi,<>		1,\tmp,%r0
+	extrd,s		\pte,63,25,\pte
+	.endm
+
+	/* The alias region is an 8MB aligned 16MB to do clear and
+	 * copy user pages at addresses congruent with the user
+	 * virtual address.
+	 *
+	 * To use the alias page, you set %r26 up with the to TLB
+	 * entry (identifying the physical page) and %r23 up with
+	 * the from tlb entry (or nothing if only a to entry---for
+	 * clear_user_page_asm) */
+	.macro		do_alias	spc,tmp,tmp1,va,pte,prot,fault
+	cmpib,COND(<>),n 0,\spc,\fault
+	ldil		L%(TMPALIAS_MAP_START),\tmp
+#if defined(__LP64__) && (TMPALIAS_MAP_START >= 0x80000000)
+	/* on LP64, ldi will sign extend into the upper 32 bits,
+	 * which is behaviour we don't want */
+	depdi		0,31,32,\tmp
+#endif
+	copy		\va,\tmp1
+	DEPI		0,31,23,\tmp1
+	cmpb,COND(<>),n	\tmp,\tmp1,\fault
+	ldi		(_PAGE_DIRTY|_PAGE_WRITE|_PAGE_READ),\prot
+	depd,z		\prot,8,7,\prot
+	/*
+	 * OK, it is in the temp alias region, check whether "from" or "to".
+	 * Check "subtle" note in pacache.S re: r23/r26.
+	 */
+#ifdef __LP64__
+	extrd,u,*=	\va,41,1,%r0
+#else
+	extrw,u,=	\va,9,1,%r0
+#endif
+	or,COND(tr)	%r23,%r0,\pte
+	or		%r26,%r0,\pte
+	.endm 
+
+
 	/*
 	 * Align fault_vector_20 on 4K boundary so that both
 	 * fault_vector_11 and fault_vector_20 are on the
@@ -979,82 +1203,23 @@
 #ifdef __LP64__
 
 dtlb_miss_20w:
-	extrd,u         spc,63,7,t1     /* adjust va */
-	depd            t1,31,7,va      /* adjust va */
-	depdi           0,63,7,spc      /* adjust space */
-	mfctl           %cr25,ptp	/* Assume user space miss */
-	or,*<>          %r0,spc,%r0     /* If it is user space, nullify */
-	mfctl           %cr24,ptp	/* Load kernel pgd instead */
-	extrd,u         va,33,9,t1      /* Get pgd index */
-
-	mfsp            %sr7,t0		/* Get current space */
-	or,*=           %r0,t0,%r0      /* If kernel, nullify following test */
-	cmpb,*<>,n       t0,spc,dtlb_fault /* forward */
-
-	/* First level page table lookup */
-
-	ldd,s           t1(ptp),ptp
-	extrd,u         va,42,9,t0     /* get second-level index */
-	bb,>=,n         ptp,_PAGE_PRESENT_BIT,dtlb_check_alias_20w
-	depdi           0,63,12,ptp     /* clear prot bits */
-
-	/* Second level page table lookup */
-
-	ldd,s           t0(ptp),ptp
-	extrd,u         va,51,9,t0     /* get third-level index */
-	bb,>=,n         ptp,_PAGE_PRESENT_BIT,dtlb_check_alias_20w
-	depdi           0,63,12,ptp     /* clear prot bits */
-
-	/* Third level page table lookup */
-
-	shladd           t0,3,ptp,ptp
-	ldi		_PAGE_ACCESSED,t1
-	ldd              0(ptp),pte
-	bb,>=,n          pte,_PAGE_PRESENT_BIT,dtlb_check_alias_20w
-
-	/* Check whether the "accessed" bit was set, otherwise do so */
-
-	or		t1,pte,t0	/* t0 has R bit set */
-	and,*<>         t1,pte,%r0      /* test and nullify if already set */
-	std             t0,0(ptp)       /* write back pte */
-
-	space_to_prot   spc prot        /* create prot id from space */
-	depd            pte,8,7,prot    /* add in prot bits from pte */
-
-	extrd,u,*=      pte,_PAGE_USER_BIT+32,1,r0
-	depdi		7,11,3,prot   /* Set for user space (1 rsvd for read) */
-	extrd,u,*= 	pte,_PAGE_GATEWAY_BIT+32,1,r0
-	depdi		0,11,2,prot	/* If Gateway, Set PL2 to 0 */
+	space_adjust	spc,va,t0
+	get_pgd		spc,ptp
+	space_check	spc,t0,dtlb_fault
 
-	/* Get rid of prot bits and convert to page addr for idtlbt */
+	L3_ptep		ptp,pte,t0,va,dtlb_check_alias_20w
 
-	depdi		0,63,12,pte
-	extrd,u         pte,56,52,pte
+	update_ptep	ptp,pte,t0,t1
+
+	make_insert_tlb	spc,pte,prot
+	
 	idtlbt          pte,prot
 
 	rfir
 	nop
 
 dtlb_check_alias_20w:
-
-	/* Check to see if fault is in the temporary alias region */
-
-	cmpib,*<>,n     0,spc,dtlb_fault /* forward */
-	ldil            L%(TMPALIAS_MAP_START),t0
-	copy            va,t1
-	depdi           0,63,23,t1
-	cmpb,*<>,n      t0,t1,dtlb_fault /* forward */
-	ldi             (_PAGE_DIRTY|_PAGE_WRITE|_PAGE_READ),prot
-	depd,z          prot,8,7,prot
-
-	/*
-	 * OK, it is in the temp alias region, check whether "from" or "to".
-	 * Check "subtle" note in pacache.S re: r23/r26.
-	 */
-
-	extrd,u,*=      va,41,1,r0
-	or,*tr          %r23,%r0,pte    /* If "from" use "from" page */
-	or,*            %r26,%r0,pte    /* else "to", use "to" page  */
+	do_alias	spc,t0,t1,va,pte,prot,dtlb_fault
 
 	idtlbt          pte,prot
 
@@ -1062,51 +1227,16 @@
 	nop
 
 nadtlb_miss_20w:
-	extrd,u         spc,63,7,t1     /* adjust va */
-	depd            t1,31,7,va      /* adjust va */
-	depdi           0,63,7,spc      /* adjust space */
-	mfctl           %cr25,ptp	/* Assume user space miss */
-	or,*<>          %r0,spc,%r0     /* If it is user space, nullify */
-	mfctl           %cr24,ptp	/* Load kernel pgd instead */
-	extrd,u         va,33,9,t1      /* Get pgd index */
-
-	mfsp            %sr7,t0		/* Get current space */
-	or,*=           %r0,t0,%r0      /* If kernel, nullify following test */
-	cmpb,*<>,n       t0,spc,nadtlb_fault /* forward */
-
-	/* First level page table lookup */
-
-	ldd,s           t1(ptp),ptp
-	extrd,u         va,42,9,t0     /* get second-level index */
-	bb,>=,n         ptp,_PAGE_PRESENT_BIT,nadtlb_emulate
-	depdi           0,63,12,ptp     /* clear prot bits */
-
-	/* Second level page table lookup */
-
-	ldd,s           t0(ptp),ptp
-	extrd,u         va,51,9,t0     /* get third-level index */
-	bb,>=,n         ptp,_PAGE_PRESENT_BIT,nadtlb_emulate
-	depdi           0,63,12,ptp     /* clear prot bits */
-
-	/* Third level page table lookup */
-
-	shladd           t0,3,ptp,ptp
-	ldi		_PAGE_ACCESSED,t1
-	ldd              0(ptp),pte
-	bb,>=,n          pte,_PAGE_PRESENT_BIT,nadtlb_check_flush_20w
-
-	space_to_prot   spc prot        /* create prot id from space */
-	depd            pte,8,7,prot    /* add in prot bits from pte */
-
-	extrd,u,*=      pte,_PAGE_USER_BIT+32,1,r0
-	depdi		7,11,3,prot   /* Set for user space (1 rsvd for read) */
-	extrd,u,*= 	pte,_PAGE_GATEWAY_BIT+32,1,r0
-	depdi		0,11,2,prot	/* If Gateway, Set PL2 to 0 */
+	space_adjust	spc,va,t0
+	get_pgd		spc,ptp
+	space_check	spc,t0,nadtlb_fault
 
-	/* Get rid of prot bits and convert to page addr for idtlbt */
+	L3_ptep		ptp,pte,t0,va,nadtlb_check_flush_20w
+
+	update_ptep	ptp,pte,t0,t1
+
+	make_insert_tlb	spc,pte,prot
 
-	depdi		0,63,12,pte
-	extrd,u         pte,56,52,pte
 	idtlbt          pte,prot
 
 	rfir
@@ -1132,49 +1262,15 @@
 #else
 
 dtlb_miss_11:
-	mfctl           %cr25,ptp	/* Assume user space miss */
-	or,<>           %r0,spc,%r0	/* If it is user space, nullify */
-	mfctl           %cr24,ptp	/* Load kernel pgd instead */
-	extru		va,9,10,t1	/* Get pgd index */
-
-	mfsp            %sr7,t0		/* Get current space */
-	or,=            %r0,t0,%r0	/* If kernel, nullify following test */
-	cmpb,<>,n       t0,spc,dtlb_fault /* forward */
-
-	/* First level page table lookup */
-
-	ldwx,s		t1(ptp),ptp
-	extru		va,19,10,t0	/* get second-level index */
-	bb,>=,n         ptp,_PAGE_PRESENT_BIT,dtlb_check_alias_11
-	depi		0,31,12,ptp	/* clear prot bits */
-
-	/* Second level page table lookup */
-
-	sh2addl 	 t0,ptp,ptp
-	ldi		_PAGE_ACCESSED,t1
-	ldw		 0(ptp),pte
-	bb,>=,n          pte,_PAGE_PRESENT_BIT,dtlb_check_alias_11
-
-	/* Check whether the "accessed" bit was set, otherwise do so */
-
-	or		t1,pte,t0	/* t0 has R bit set */
-	and,<>		t1,pte,%r0	/* test and nullify if already set */
-	stw		t0,0(ptp)	/* write back pte */
-
-	zdep            spc,30,15,prot  /* create prot id from space */
-	dep             pte,8,7,prot    /* add in prot bits from pte */
-
-	extru,=		pte,_PAGE_NO_CACHE_BIT,1,r0
-	depi		1,12,1,prot
-	extru,=         pte,_PAGE_USER_BIT,1,r0
-	depi		7,11,3,prot   /* Set for user space (1 rsvd for read) */
-	extru,= 	pte,_PAGE_GATEWAY_BIT,1,r0
-	depi		0,11,2,prot	/* If Gateway, Set PL2 to 0 */
+	get_pgd		spc,ptp
 
-	/* Get rid of prot bits and convert to page addr for idtlba */
+	space_check	spc,t0,dtlb_fault
 
-	depi		0,31,12,pte
-	extru		pte,24,25,pte
+	L2_ptep		ptp,pte,t0,va,dtlb_check_alias_11
+
+	update_ptep	ptp,pte,t0,t1
+
+	make_insert_tlb_11	spc,pte,prot
 
 	mfsp		%sr1,t0  /* Save sr1 so we can use it in tlb inserts */
 	mtsp		spc,%sr1
@@ -1215,43 +1311,16 @@
 	nop
 
 nadtlb_miss_11:
-	mfctl           %cr25,ptp	/* Assume user space miss */
-	or,<>           %r0,spc,%r0	/* If it is user space, nullify */
-	mfctl           %cr24,ptp	/* Load kernel pgd instead */
-	extru		va,9,10,t1	/* Get pgd index */
-
-	mfsp            %sr7,t0		/* Get current space */
-	or,=            %r0,t0,%r0	/* If kernel, nullify following test */
-	cmpb,<>,n       t0,spc,nadtlb_fault /* forward */
-
-	/* First level page table lookup */
-
-	ldwx,s		t1(ptp),ptp
-	extru		va,19,10,t0	/* get second-level index */
-	bb,>=,n         ptp,_PAGE_PRESENT_BIT,nadtlb_emulate
-	depi		0,31,12,ptp	/* clear prot bits */
-
-	/* Second level page table lookup */
-
-	sh2addl 	 t0,ptp,ptp
-	ldi		_PAGE_ACCESSED,t1
-	ldw		 0(ptp),pte
-	bb,>=,n          pte,_PAGE_PRESENT_BIT,nadtlb_check_flush_11
-
-	zdep            spc,30,15,prot  /* create prot id from space */
-	dep             pte,8,7,prot    /* add in prot bits from pte */
-
-	extru,=		pte,_PAGE_NO_CACHE_BIT,1,r0
-	depi		1,12,1,prot
-	extru,=         pte,_PAGE_USER_BIT,1,r0
-	depi		7,11,3,prot   /* Set for user space (1 rsvd for read) */
-	extru,= 	pte,_PAGE_GATEWAY_BIT,1,r0
-	depi		0,11,2,prot	/* If Gateway, Set PL2 to 0 */
+	get_pgd		spc,ptp
 
-	/* Get rid of prot bits and convert to page addr for idtlba */
+	space_check	spc,t0,nadtlb_fault
+
+	L2_ptep		ptp,pte,t0,va,nadtlb_check_flush_11
+
+	update_ptep	ptp,pte,t0,t1
+
+	make_insert_tlb_11	spc,pte,prot
 
-	depi		0,31,12,pte
-	extru		pte,24,25,pte
 
 	mfsp		%sr1,t0  /* Save sr1 so we can use it in tlb inserts */
 	mtsp		spc,%sr1
@@ -1289,120 +1358,44 @@
 	nop
 
 dtlb_miss_20:
-	mfctl           %cr25,ptp	/* Assume user space miss */
-	or,<>           %r0,spc,%r0	/* If it is user space, nullify */
-	mfctl           %cr24,ptp	/* Load kernel pgd instead */
-	extru		va,9,10,t1	/* Get pgd index */
-
-	mfsp            %sr7,t0		/* Get current space */
-	or,=            %r0,t0,%r0	/* If kernel, nullify following test */
-	cmpb,<>,n       t0,spc,dtlb_fault /* forward */
-
-	/* First level page table lookup */
-
-	ldwx,s		t1(ptp),ptp
-	extru		va,19,10,t0	/* get second-level index */
-	bb,>=,n         ptp,_PAGE_PRESENT_BIT,dtlb_check_alias_20
-	depi		0,31,12,ptp	/* clear prot bits */
-
-	/* Second level page table lookup */
-
-	sh2addl 	 t0,ptp,ptp
-	ldi		_PAGE_ACCESSED,t1
-	ldw		 0(ptp),pte
-	bb,>=,n          pte,_PAGE_PRESENT_BIT,dtlb_check_alias_20
-
-	/* Check whether the "accessed" bit was set, otherwise do so */
-
-	or		t1,pte,t0	/* t0 has R bit set */
-	and,<>		t1,pte,%r0	/* test and nullify if already set */
-	stw		t0,0(ptp)	/* write back pte */
-
-	space_to_prot   spc prot        /* create prot id from space */
-	depd            pte,8,7,prot    /* add in prot bits from pte */
-
-	extrd,u,*=      pte,_PAGE_USER_BIT+32,1,r0
-	depdi		7,11,3,prot   /* Set for user space (1 rsvd for read) */
-	extrd,u,*= 	pte,_PAGE_GATEWAY_BIT+32,1,r0
-	depdi		0,11,2,prot	/* If Gateway, Set PL2 to 0 */
+	space_adjust	spc,va,t0
+	get_pgd		spc,ptp
+	space_check	spc,t0,dtlb_fault
 
-	/* Get rid of prot bits and convert to page addr for idtlbt */
+	L2_ptep		ptp,pte,t0,va,dtlb_check_alias_20
+
+	update_ptep	ptp,pte,t0,t1
+
+	make_insert_tlb	spc,pte,prot
+
+	f_extend	pte,t0
 
-	extrd,s         pte,35,4,t0
-	depdi		0,63,12,pte	/* clear lower 12 bits */
-        addi,=          1,t0,0 
-        extrd,u,*tr     pte,56,25,pte 
-	extrd,s		pte,56,25,pte	/* bit 31:8 >> 8  */ 
 	idtlbt          pte,prot
 
 	rfir
 	nop
 
 dtlb_check_alias_20:
-
-	/* Check to see if fault is in the temporary alias region */
-
-	cmpib,<>,n      0,spc,dtlb_fault /* forward */
-	ldil            L%(TMPALIAS_MAP_START),t0
-	copy            va,t1
-	depwi           0,31,23,t1
-	cmpb,<>,n       t0,t1,dtlb_fault /* forward */
-	ldi             (_PAGE_DIRTY|_PAGE_WRITE|_PAGE_READ),prot
-	depd,z          prot,8,7,prot
-
-	/*
-	 * OK, it is in the temp alias region, check whether "from" or "to".
-	 * Check "subtle" note in pacache.S re: r23/r26.
-	 */
-
-	extrw,u,=       va,9,1,r0
-	or,tr           %r23,%r0,pte    /* If "from" use "from" page */
-	or              %r26,%r0,pte    /* else "to", use "to" page  */
-
+	do_alias	spc,t0,t1,va,pte,prot,dtlb_fault
+	
 	idtlbt          pte,prot
 
 	rfir
 	nop
 
 nadtlb_miss_20:
-	mfctl           %cr25,ptp	/* Assume user space miss */
-	or,<>           %r0,spc,%r0	/* If it is user space, nullify */
-	mfctl           %cr24,ptp	/* Load kernel pgd instead */
-	extru		va,9,10,t1	/* Get pgd index */
-
-	mfsp            %sr7,t0		/* Get current space */
-	or,=            %r0,t0,%r0	/* If kernel, nullify following test */
-	cmpb,<>,n       t0,spc,nadtlb_fault /* forward */
-
-	/* First level page table lookup */
-
-	ldwx,s		t1(ptp),ptp
-	extru		va,19,10,t0	/* get second-level index */
-	bb,>=,n         ptp,_PAGE_PRESENT_BIT,nadtlb_emulate
-	depi		0,31,12,ptp	/* clear prot bits */
-
-	/* Second level page table lookup */
-
-	sh2addl 	 t0,ptp,ptp
-	ldi		_PAGE_ACCESSED,t1
-	ldw		 0(ptp),pte
-	bb,>=,n          pte,_PAGE_PRESENT_BIT,nadtlb_check_flush_20
-
-	space_to_prot   spc prot        /* create prot id from space */
-	depd            pte,8,7,prot    /* add in prot bits from pte */
-
-	extrd,u,*=      pte,_PAGE_USER_BIT+32,1,r0
-	depdi		7,11,3,prot   /* Set for user space (1 rsvd for read) */
-	extrd,u,*= 	pte,_PAGE_GATEWAY_BIT+32,1,r0
-	depdi		0,11,2,prot	/* If Gateway, Set PL2 to 0 */
+	get_pgd		spc,ptp
 
-	/* Get rid of prot bits and convert to page addr for idtlbt */
+	space_check	spc,t0,nadtlb_fault
+
+	L2_ptep		ptp,pte,t0,va,nadtlb_check_flush_20
+
+	update_ptep	ptp,pte,t0,t1
+
+	make_insert_tlb	spc,pte,prot
 
-        extrd,s         pte,35,4,t0
-        depdi           0,63,12,pte     /* clear lower 12 bits */
-        addi,=          1,t0,0
-        extrd,u,*tr     pte,56,25,pte
-        extrd,s         pte,56,25,pte   /* bit 31:8 >> 8  */
+	f_extend	pte,t0
+	
         idtlbt          pte,prot
 
 	rfir
@@ -1475,119 +1468,33 @@
 	 * on the gateway page which is in the kernel address space.
 	 */
 
-	extrd,u         spc,63,7,t1     /* adjust va */
-	depd            t1,31,7,va      /* adjust va */
-	depdi           0,63,7,spc      /* adjust space */
-	cmpib,*=        0,spc,itlb_miss_kernel_20w
-	extrd,u         va,33,9,t1      /* Get pgd index */
-
-	mfctl           %cr25,ptp	/* load user pgd */
-
-	mfsp            %sr7,t0		/* Get current space */
-	or,*=           %r0,t0,%r0      /* If kernel, nullify following test */
-	cmpb,*<>,n      t0,spc,itlb_fault /* forward */
-
-	/* First level page table lookup */
-
-itlb_miss_common_20w:
-	ldd,s           t1(ptp),ptp
-	extrd,u         va,42,9,t0     /* get second-level index */
-	bb,>=,n 	ptp,_PAGE_PRESENT_BIT,itlb_fault
-	depdi           0,63,12,ptp     /* clear prot bits */
-
-	/* Second level page table lookup */
+	space_adjust	spc,va,t0
+	get_pgd		spc,ptp
+	space_check	spc,t0,itlb_fault
 
-	ldd,s           t0(ptp),ptp
-	extrd,u         va,51,9,t0     /* get third-level index */
-	bb,>=,n         ptp,_PAGE_PRESENT_BIT,itlb_fault
-	depdi           0,63,12,ptp     /* clear prot bits */
+	L3_ptep		ptp,pte,t0,va,itlb_fault
 
-	/* Third level page table lookup */
+	update_ptep	ptp,pte,t0,t1
 
-	shladd           t0,3,ptp,ptp
-	ldi		_PAGE_ACCESSED,t1
-	ldd              0(ptp),pte
-	bb,>=,n          pte,_PAGE_PRESENT_BIT,itlb_fault
-
-	/* Check whether the "accessed" bit was set, otherwise do so */
-
-	or		t1,pte,t0	/* t0 has R bit set */
-	and,*<>         t1,pte,%r0      /* test and nullify if already set */
-	std             t0,0(ptp)       /* write back pte */
-
-	space_to_prot   spc prot        /* create prot id from space */
-	depd            pte,8,7,prot    /* add in prot bits from pte */
-
-	extrd,u,*=      pte,_PAGE_USER_BIT+32,1,r0
-	depdi		7,11,3,prot   /* Set for user space (1 rsvd for read) */
-	extrd,u,*= 	pte,_PAGE_GATEWAY_BIT+32,1,r0
-	depdi		0,11,2,prot	/* If Gateway, Set PL2 to 0 */
-
-	/* Get rid of prot bits and convert to page addr for iitlbt */
-
-	depdi		0,63,12,pte
-	extrd,u         pte,56,32,pte
+	make_insert_tlb	spc,pte,prot
+	
 	iitlbt          pte,prot
 
 	rfir
 	nop
 
-itlb_miss_kernel_20w:
-	b               itlb_miss_common_20w
-	mfctl           %cr24,ptp	/* Load kernel pgd */
 #else
 
 itlb_miss_11:
+	get_pgd		spc,ptp
 
-	/*
-	 * I miss is a little different, since we allow users to fault
-	 * on the gateway page which is in the kernel address space.
-	 */
-
-	cmpib,=         0,spc,itlb_miss_kernel_11
-	extru		va,9,10,t1	/* Get pgd index */
-
-	mfctl           %cr25,ptp	/* load user pgd */
-
-	mfsp            %sr7,t0		/* Get current space */
-	or,=            %r0,t0,%r0	/* If kernel, nullify following test */
-	cmpb,<>,n       t0,spc,itlb_fault /* forward */
+	space_check	spc,t0,itlb_fault
 
-	/* First level page table lookup */
+	L2_ptep		ptp,pte,t0,va,itlb_fault
 
-itlb_miss_common_11:
-	ldwx,s		t1(ptp),ptp
-	extru		va,19,10,t0	/* get second-level index */
-	bb,>=,n 	ptp,_PAGE_PRESENT_BIT,itlb_fault
-	depi		0,31,12,ptp	/* clear prot bits */
+	update_ptep	ptp,pte,t0,t1
 
-	/* Second level page table lookup */
-
-	sh2addl 	 t0,ptp,ptp
-	ldi		_PAGE_ACCESSED,t1
-	ldw		 0(ptp),pte
-	bb,>=,n 	 pte,_PAGE_PRESENT_BIT,itlb_fault
-
-	/* Check whether the "accessed" bit was set, otherwise do so */
-
-	or		t1,pte,t0	/* t0 has R bit set */
-	and,<>		t1,pte,%r0	/* test and nullify if already set */
-	stw		t0,0(ptp)	/* write back pte */
-
-	zdep            spc,30,15,prot  /* create prot id from space */
-	dep             pte,8,7,prot    /* add in prot bits from pte */
-
-	extru,=		pte,_PAGE_NO_CACHE_BIT,1,r0
-	depi		1,12,1,prot
-	extru,=         pte,_PAGE_USER_BIT,1,r0
-	depi		7,11,3,prot   /* Set for user space (1 rsvd for read) */
-	extru,= 	pte,_PAGE_GATEWAY_BIT,1,r0
-	depi		0,11,2,prot	/* If Gateway, Set PL2 to 0 */
-
-	/* Get rid of prot bits and convert to page addr for iitlba */
-
-	depi		0,31,12,pte
-	extru		pte,24,25,pte
+	make_insert_tlb_11	spc,pte,prot
 
 	mfsp		%sr1,t0  /* Save sr1 so we can use it in tlb inserts */
 	mtsp		spc,%sr1
@@ -1600,106 +1507,35 @@
 	rfir
 	nop
 
-itlb_miss_kernel_11:
-	b               itlb_miss_common_11
-	mfctl           %cr24,ptp	/* Load kernel pgd */
-
 itlb_miss_20:
+	get_pgd		spc,ptp
 
-	/*
-	 * I miss is a little different, since we allow users to fault
-	 * on the gateway page which is in the kernel address space.
-	 */
-
-	cmpib,=         0,spc,itlb_miss_kernel_20
-	extru		va,9,10,t1	/* Get pgd index */
-
-	mfctl           %cr25,ptp	/* load user pgd */
-
-	mfsp            %sr7,t0		/* Get current space */
-	or,=            %r0,t0,%r0	/* If kernel, nullify following test */
-	cmpb,<>,n       t0,spc,itlb_fault /* forward */
-
-	/* First level page table lookup */
-
-itlb_miss_common_20:
-	ldwx,s		t1(ptp),ptp
-	extru		va,19,10,t0	/* get second-level index */
-	bb,>=,n 	ptp,_PAGE_PRESENT_BIT,itlb_fault
-	depi		0,31,12,ptp	/* clear prot bits */
-
-	/* Second level page table lookup */
-
-	sh2addl 	 t0,ptp,ptp
-	ldi		_PAGE_ACCESSED,t1
-	ldw		 0(ptp),pte
-	bb,>=,n 	 pte,_PAGE_PRESENT_BIT,itlb_fault
-
-	/* Check whether the "accessed" bit was set, otherwise do so */
+	space_check	spc,t0,itlb_fault
 
-	or		t1,pte,t0	/* t0 has R bit set */
-	and,<>		t1,pte,%r0	/* test and nullify if already set */
-	stw		t0,0(ptp)	/* write back pte */
+	L2_ptep		ptp,pte,t0,va,itlb_fault
 
-	space_to_prot   spc prot        /* create prot id from space */
-	depd            pte,8,7,prot    /* add in prot bits from pte */
+	update_ptep	ptp,pte,t0,t1
 
-	extrd,u,*=      pte,_PAGE_USER_BIT+32,1,r0
-	depdi		7,11,3,prot   /* Set for user space (1 rsvd for read) */
-	extrd,u,*= 	pte,_PAGE_GATEWAY_BIT+32,1,r0
-	depdi		0,11,2,prot	/* If Gateway, Set PL2 to 0 */
+	make_insert_tlb	spc,pte,prot
 
-	/* Get rid of prot bits and convert to page addr for iitlbt */
+	f_extend	pte,t0	
 
-        extrd,s         pte,35,4,t0 
-        depdi           0,63,12,pte     /* clear lower 12 bits */
-        addi,=          1,t0,0
-        extrd,u,*tr     pte,56,25,pte 
-        extrd,s         pte,56,25,pte   /* bit 31:8 >> 8  */
 	iitlbt          pte,prot
 
 	rfir
 	nop
 
-
-itlb_miss_kernel_20:
-	b               itlb_miss_common_20
-	mfctl           %cr24,ptp	/* Load kernel pgd */
 #endif
 
 #ifdef __LP64__
 
 dbit_trap_20w:
-	extrd,u         spc,63,7,t1     /* adjust va */
-	depd            t1,31,7,va      /* adjust va */
-	depdi           0,1,2,va        /* adjust va */
-	depdi           0,63,7,spc      /* adjust space */
-	mfctl           %cr25,ptp	/* Assume user space miss */
-	or,*<>          %r0,spc,%r0     /* If it is user space, nullify */
-	mfctl           %cr24,ptp	/* Load kernel pgd instead */
-	extrd,u         va,33,9,t1      /* Get pgd index */
-
-	mfsp            %sr7,t0		/* Get current space */
-	or,*=           %r0,t0,%r0      /* If kernel, nullify following test */
-	cmpb,*<>,n       t0,spc,dbit_fault /* forward */
-
-	/* First level page table lookup */
-
-	ldd,s           t1(ptp),ptp
-	extrd,u         va,42,9,t0     /* get second-level index */
-	bb,>=,n         ptp,_PAGE_PRESENT_BIT,dbit_fault
-	depdi           0,63,12,ptp     /* clear prot bits */
-
-	/* Second level page table lookup */
-
-	ldd,s           t0(ptp),ptp
-	extrd,u         va,51,9,t0     /* get third-level index */
-	bb,>=,n         ptp,_PAGE_PRESENT_BIT,dbit_fault
-	depdi           0,63,12,ptp     /* clear prot bits */
+	space_adjust	spc,va,t0
+	get_pgd		spc,ptp
+	space_check	spc,t0,dbit_fault
 
-	/* Third level page table lookup */
+	L3_ptep		ptp,pte,t0,va,dbit_fault
 
-	shladd           t0,3,ptp,ptp
 #ifdef CONFIG_SMP
 	CMPIB=,n        0,spc,dbit_nolock_20w
 	ldil            L%PA(pa_dbit_lock),t0
@@ -1712,27 +1548,10 @@
 
 dbit_nolock_20w:
 #endif
-	ldi		(_PAGE_ACCESSED|_PAGE_DIRTY),t1
-	ldd              0(ptp),pte
-	bb,>=,n          pte,_PAGE_PRESENT_BIT,dbit_fault
-
-	/* Set Accessed and Dirty bits in the pte */
-
-	or		t1,pte,pte
-	std             pte,0(ptp)      /* write back pte */
-
-	space_to_prot   spc prot        /* create prot id from space */
-	depd            pte,8,7,prot    /* add in prot bits from pte */
-
-	extrd,u,*=      pte,_PAGE_USER_BIT+32,1,r0
-	depdi		7,11,3,prot   /* Set for user space (1 rsvd for read) */
-	extrd,u,*= 	pte,_PAGE_GATEWAY_BIT+32,1,r0
-	depdi		0,11,2,prot	/* If Gateway, Set PL2 to 0 */
-
-	/* Get rid of prot bits and convert to page addr for idtlbt */
+	update_dirty	ptp,pte,t0,t1
 
-	depdi		0,63,12,pte
-	extrd,u         pte,56,52,pte
+	make_insert_tlb	spc,pte,prot
+		
 	idtlbt          pte,prot
 #ifdef CONFIG_SMP
 	CMPIB=,n        0,spc,dbit_nounlock_20w
@@ -1747,25 +1566,13 @@
 #else
 
 dbit_trap_11:
-	mfctl           %cr25,ptp	/* Assume user space trap */
-	or,<>           %r0,spc,%r0	/* If it is user space, nullify */
-	mfctl           %cr24,ptp	/* Load kernel pgd instead */
-	extru		va,9,10,t1	/* Get pgd index */
 
-	mfsp            %sr7,t0		/* Get current space */
-	or,=            %r0,t0,%r0	/* If kernel, nullify following test */
-	cmpb,<>,n       t0,spc,dbit_fault /* forward */
+	get_pgd		spc,ptp
 
-	/* First level page table lookup */
+	space_check	spc,t0,dbit_fault
 
-	ldwx,s		t1(ptp),ptp
-	extru		va,19,10,t0	/* get second-level index */
-	bb,>=,n 	ptp,_PAGE_PRESENT_BIT,dbit_fault
-	depi		0,31,12,ptp	/* clear prot bits */
+	L2_ptep		ptp,pte,t0,va,dbit_fault
 
-	/* Second level page table lookup */
-
-	sh2addl 	 t0,ptp,ptp
 #ifdef CONFIG_SMP
 	CMPIB=,n        0,spc,dbit_nolock_11
 	ldil            L%PA(pa_dbit_lock),t0
@@ -1778,29 +1585,9 @@
 
 dbit_nolock_11:
 #endif
-	ldi		(_PAGE_ACCESSED|_PAGE_DIRTY),t1
-	ldw		 0(ptp),pte
-	bb,>=,n 	 pte,_PAGE_PRESENT_BIT,dbit_fault
-
-	/* Set Accessed and Dirty bits in the pte */
-
-	or		t1,pte,pte
-	stw		pte,0(ptp)	/* write back pte */
-
-	zdep            spc,30,15,prot  /* create prot id from space */
-	dep             pte,8,7,prot    /* add in prot bits from pte */
-
-	extru,=		pte,_PAGE_NO_CACHE_BIT,1,r0
-	depi		1,12,1,prot
-	extru,=         pte,_PAGE_USER_BIT,1,r0
-	depi		7,11,3,prot /* Set for user space (1 rsvd for read) */
-	extru,= 	pte,_PAGE_GATEWAY_BIT,1,r0
-	depi		0,11,2,prot	/* If Gateway, Set PL2 to 0 */
-
-	/* Get rid of prot bits and convert to page addr for idtlba */
+	update_dirty	ptp,pte,t0,t1
 
-	depi		0,31,12,pte
-	extru		pte,24,25,pte
+	make_insert_tlb_11	spc,pte,prot
 
 	mfsp            %sr1,t1  /* Save sr1 so we can use it in tlb inserts */
 	mtsp		spc,%sr1
@@ -1821,25 +1608,12 @@
 	nop
 
 dbit_trap_20:
-	mfctl           %cr25,ptp	/* Assume user space trap */
-	or,<>           %r0,spc,%r0	/* If it is user space, nullify */
-	mfctl           %cr24,ptp	/* Load kernel pgd instead */
-	extru		va,9,10,t1	/* Get pgd index */
-
-	mfsp            %sr7,t0		/* Get current space */
-	or,=            %r0,t0,%r0	/* If kernel, nullify following test */
-	cmpb,<>,n       t0,spc,dbit_fault /* forward */
+	get_pgd		spc,ptp
 
-	/* First level page table lookup */
+	space_check	spc,t0,dbit_fault
 
-	ldwx,s		t1(ptp),ptp
-	extru		va,19,10,t0	/* get second-level index */
-	bb,>=,n 	ptp,_PAGE_PRESENT_BIT,dbit_fault
-	depi		0,31,12,ptp	/* clear prot bits */
+	L2_ptep		ptp,pte,t0,va,dbit_fault
 
-	/* Second level page table lookup */
-
-	sh2addl 	 t0,ptp,ptp
 #ifdef CONFIG_SMP
 	CMPIB=,n        0,spc,dbit_nolock_20
 	ldil            L%PA(pa_dbit_lock),t0
@@ -1852,28 +1626,12 @@
 
 dbit_nolock_20:
 #endif
-	ldi		(_PAGE_ACCESSED|_PAGE_DIRTY),t1
-	ldw		 0(ptp),pte
-	bb,>=,n 	 pte,_PAGE_PRESENT_BIT,dbit_fault
-
-	/* Set Accessed and Dirty bits in the pte */
-
-	or		t1,pte,pte
-	stw		pte,0(ptp)	/* write back pte */
-
-	space_to_prot   spc prot        /* create prot id from space */
-	depd            pte,8,7,prot    /* add in prot bits from pte */
-
-	extrd,u,*=      pte,_PAGE_USER_BIT+32,1,r0
-	depdi		7,11,3,prot   /* Set for user space (1 rsvd for read) */
-	extrd,u,*= 	pte,_PAGE_GATEWAY_BIT+32,1,r0
-	depdi		0,11,2,prot	/* If Gateway, Set PL2 to 0 */
-
-        extrd,s         pte,35,4,t0 
-        depdi           0,63,12,pte     /* clear lower 12 bits */
-        addi,=          1,t0,0
-        extrd,u,*tr     pte,56,25,pte 
-        extrd,s         pte,56,25,pte   /* bit 31:8 >> 8  */
+	update_dirty	ptp,pte,t0,t1
+
+	make_insert_tlb	spc,pte,prot
+
+	f_extend	pte,t0
+	
         idtlbt          pte,prot
 
 #ifdef CONFIG_SMP
@@ -2285,9 +2043,13 @@
 	bb,<,n	%r19, 31-TIF_SIGPENDING, syscall_do_signal /* forward */
 
 syscall_restore:
-	LDREG	TI_FLAGS-THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r19    /* get ti flags */
-	bb,<	%r19, 31-TIF_SYSCALL_TRACE,syscall_restore_rfi
-	LDREG	TI_TASK-THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r1	/* delay slot! */
+	/* Are we being ptraced? */
+	LDREG	TI_TASK-THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r1
+
+	LDREG	TASK_PTRACE(%r1), %r19
+	bb,<	%r19,31,syscall_restore_rfi
+	nop
+
 	ldo	TASK_PT_FR31(%r1),%r19		   /* reload fpregs */
 	rest_fp	%r19
 
@@ -2337,7 +2099,6 @@
 	 * the most efficient way of doing things, but it works.
 	 */
 syscall_restore_rfi:
-	LDREG	TASK_PTRACE(%r1), %r19
 	ldo	-1(%r0),%r2			   /* Set recovery cntr to -1 */
 	mtctl	%r2,%cr0			   /*   for immediate trap */
 	LDREG	TASK_PT_PSW(%r1),%r2		   /* Get old PSW */
diff -Nru a/arch/parisc/kernel/firmware.c b/arch/parisc/kernel/firmware.c
--- a/arch/parisc/kernel/firmware.c	Sun May 16 01:18:33 2004
+++ b/arch/parisc/kernel/firmware.c	Sun May 16 01:18:33 2004
@@ -10,6 +10,7 @@
  * Copyright 1999 SuSE GmbH Nuernberg (Philipp Rumpf, prumpf@tux.org)
  * Copyright 1999 The Puffin Group, (Alex deVries, David Kennedy)
  * Copyright 2003 Grant Grundler <grundler parisc-linux org>
+ * Copyright 2003,2004 Ryan Bradetich <rbrad@parisc-linux.org>
  *
  *    This program is free software; you can redistribute it and/or modify
  *    it under the terms of the GNU General Public License as published by
@@ -71,6 +72,15 @@
 static unsigned long pdc_result[32] __attribute__ ((aligned (8)));
 static unsigned long pdc_result2[32] __attribute__ ((aligned (8)));
 
+#ifdef __LP64__
+#define WIDE_FIRMWARE 0x1
+#define NARROW_FIRMWARE 0x2
+
+/* Firmware needs to be initially set to narrow to determine the 
+ * actual firmware width. */
+int parisc_narrow_firmware = 1;
+#endif
+
 /* on all currently-supported platforms, IODC I/O calls are always
  * 32-bit calls, and MEM_PDC calls are always the same width as the OS.
  * This means Cxxx boxes can't run wide kernels right now. -PB
@@ -87,11 +97,11 @@
 #endif
 long real32_call(unsigned long function, ...);
 
-#if defined(__LP64__) && ! defined(CONFIG_PDC_NARROW)
-#define MEM_PDC (unsigned long)(PAGE0->mem_pdc_hi) << 32 | PAGE0->mem_pdc
-#   define mem_pdc_call(args...) real64_call(MEM_PDC, args)
+#ifdef __LP64__
+#   define MEM_PDC (unsigned long)(PAGE0->mem_pdc_hi) << 32 | PAGE0->mem_pdc
+#   define mem_pdc_call(args...) unlikely(parisc_narrow_firmware) ? real32_call(MEM_PDC, args) : real64_call(MEM_PDC, args)
 #else
-#define MEM_PDC (unsigned long)PAGE0->mem_pdc
+#   define MEM_PDC (unsigned long)PAGE0->mem_pdc
 #   define mem_pdc_call(args...) real32_call(MEM_PDC, args)
 #endif
 
@@ -105,12 +115,14 @@
  */
 static unsigned long f_extend(unsigned long address)
 {
-#ifdef CONFIG_PDC_NARROW
-	if((address & 0xff000000) == 0xf0000000)
-		return 0xf0f0f0f000000000 | (u32)address;
+#ifdef __LP64__
+	if(unlikely(parisc_narrow_firmware)) {
+		if((address & 0xff000000) == 0xf0000000)
+			return 0xf0f0f0f000000000 | (u32)address;
 
-	if((address & 0xf0000000) == 0xf0000000)
-		return 0xffffffff00000000 | (u32)address;
+		if((address & 0xf0000000) == 0xf0000000)
+			return 0xffffffff00000000 | (u32)address;
+	}
 #endif
 	return address;
 }
@@ -125,11 +137,34 @@
  */
 static void convert_to_wide(unsigned long *addr)
 {
-#ifdef CONFIG_PDC_NARROW
+#ifdef __LP64__
 	int i;
-	unsigned *p = (unsigned int *)addr;
-	for(i = 31; i >= 0; --i)
-		addr[i] = p[i];
+	unsigned int *p = (unsigned int *)addr;
+
+	if(unlikely(parisc_narrow_firmware)) {
+		for(i = 31; i >= 0; --i)
+			addr[i] = p[i];
+	}
+#endif
+}
+
+/**
+ * set_firmware_width - Determine if the firmware is wide or narrow.
+ * 
+ * This function must be called before any pdc_* function that uses the convert_to_wide
+ * function.
+ */
+void __init set_firmware_width(void)
+{
+#ifdef __LP64__
+	int retval;
+
+        spin_lock_irq(&pdc_lock);
+	retval = mem_pdc_call(PDC_MODEL, PDC_MODEL_CAPABILITIES, __pa(pdc_result), 0);
+	convert_to_wide(pdc_result);
+	if(pdc_result[0] != NARROW_FIRMWARE)
+		parisc_narrow_firmware = 0;
+        spin_unlock_irq(&pdc_lock);
 #endif
 }
 
@@ -582,6 +617,7 @@
 		case 10:  *period = 1000; break;
 		case 20:  *period = 500; break;
 		case 40:  *period = 250; break;
+		case 80:  *period = 125; break;
 		default: /* Do nothing */ break;
 	}
 
diff -Nru a/arch/parisc/kernel/hardware.c b/arch/parisc/kernel/hardware.c
--- a/arch/parisc/kernel/hardware.c	Sun May 16 01:18:34 2004
+++ b/arch/parisc/kernel/hardware.c	Sun May 16 01:18:34 2004
@@ -1273,8 +1273,8 @@
 	{ 0x05e6, 0x0ffe, pcxw2  },  /* 0x05e6 - 0x05e7 */
 	{ 0x05e8, 0x0ff8, pcxw2  },  /* 0x05e8 - 0x05ef */
 	{ 0x05f0, 0x0ff0, pcxw2  },  /* 0x05f0 - 0x05ff */
-	{ 0x0600, 0x0ff0, pcxl   },  /* 0x0600 - 0x060f */
-	{ 0x0610, 0x0ff0, pcxl   },  /* 0x0610 - 0x061f */
+	{ 0x0600, 0x0fe0, pcxl   },  /* 0x0600 - 0x061f */
+	{ 0x0880, 0x0ff0, mako   },  /* 0x0880 - 0x088f */
 	{ 0x0000, 0x0000, pcx    }	/* terminate table */
 };
 
@@ -1289,7 +1289,8 @@
 	[pcxu_]	{ "PA8200 (PCX-U+)",	"2.0" },
 	[pcxw]	{ "PA8500 (PCX-W)",	"2.0" },
 	[pcxw_]	{ "PA8600 (PCX-W+)",	"2.0" },
-	[pcxw2]	{ "PA8700 (PCX-W2)",	"2.0" }
+	[pcxw2]	{ "PA8700 (PCX-W2)",	"2.0" },
+	[mako]	{ "PA8800 (MAKO)",	"2.0" }
 };
 
 const char * __init
diff -Nru a/arch/parisc/kernel/head.S b/arch/parisc/kernel/head.S
--- a/arch/parisc/kernel/head.S	Sun May 16 01:18:36 2004
+++ b/arch/parisc/kernel/head.S	Sun May 16 01:18:36 2004
@@ -82,19 +82,21 @@
 	ldo		R%PA(swapper_pg_dir)(%r4),%r4
 	mtctl		%r4,%cr24	/* Initialize kernel root pointer */
 	mtctl		%r4,%cr25	/* Initialize user root pointer */
+	ldi		ASM_PT_INITIAL,%r1
+	ldo		ASM_PGD_ENTRY*ASM_PGD_ENTRY_SIZE(%r4),%r4
+1:
+	stw             %r3,0(%r4)
+	ldo		ASM_PAGE_SIZE(%r3),%r3
+	addib,>		-1,%r1,1b
+	ldo		ASM_PGD_ENTRY_SIZE(%r4),%r4
 
-#if (__PAGE_OFFSET != 0x10000000UL)
-Error! Code below (the next two stw's) needs to be changed
-#endif
-
-	stw             %r3,0x100(%r4)  /* Hardwired 0x1... kernel Vaddr start*/
-	ldo		0x1000(%r3),%r3
-	stw             %r3,0x104(%r4)
 	ldo		_PAGE_KERNEL(%r0),%r3 /* Hardwired 0 phys addr start */
+	ldil		L%PA(pg0),%r1
+	ldo		R%PA(pg0)(%r1),%r1
 $pgt_fill_loop:
-	stwm		%r3,4(%r1)
-	ldo		0x1000(%r3),%r3
-	bb,>=		%r3,8,$pgt_fill_loop
+	stwm		%r3,ASM_PTE_ENTRY_SIZE(%r1)
+	ldo		ASM_PAGE_SIZE(%r3),%r3
+	bb,>=		%r3,31-KERNEL_INITIAL_ORDER,$pgt_fill_loop
 	nop
 
 
diff -Nru a/arch/parisc/kernel/head64.S b/arch/parisc/kernel/head64.S
--- a/arch/parisc/kernel/head64.S	Sun May 16 01:18:33 2004
+++ b/arch/parisc/kernel/head64.S	Sun May 16 01:18:33 2004
@@ -88,26 +88,25 @@
 	mtctl		%r4,%cr24	/* Initialize kernel root pointer */
 	mtctl		%r4,%cr25	/* Initialize user root pointer */
 
-#if (__PAGE_OFFSET != 0x10000000UL)
-Error! Code below (the next five std's) needs to be changed
-#endif
-
-	std             %r3,0x00(%r4)   /* Hardwired 0x1... kernel Vaddr start*/
+	stw             %r3,ASM_PGD_ENTRY*ASM_PGD_ENTRY_SIZE(%r4)
 
 	ldo		_PAGE_TABLE(%r1),%r3
-	std             %r3,0x400(%r5)  /* Hardwired 0x1... kernel Vaddr start*/
-	ldo		0x1000(%r3),%r3
-	std             %r3,0x408(%r5)
-	ldo		0x1000(%r3),%r3
-	std             %r3,0x410(%r5)
-	ldo		0x1000(%r3),%r3
-	std             %r3,0x418(%r5)
+	ldo		ASM_PMD_ENTRY*ASM_PMD_ENTRY_SIZE(%r5),%r5
+	ldi		ASM_PT_INITIAL,%r1
+1:
+	stw		%r3,0(%r5)
+	ldo		ASM_PAGE_SIZE(%r3),%r3
+	addib,>		-1,%r1,1b
+	ldo		ASM_PMD_ENTRY_SIZE(%r5),%r5
 
 	ldo		_PAGE_KERNEL(%r0),%r3 /* Hardwired 0 phys addr start */
+	ldil		L%PA(pg0),%r1
+	ldo		R%PA(pg0)(%r1),%r1
+
 $pgt_fill_loop:
-	std,ma		%r3,8(%r1)
-	ldo		0x1000(%r3),%r3
-	bb,>=		%r3,8,$pgt_fill_loop
+	std,ma		%r3,ASM_PTE_ENTRY_SIZE(%r1)
+	ldo		ASM_PAGE_SIZE(%r3),%r3
+	bb,>=		%r3,31-KERNEL_INITIAL_ORDER,$pgt_fill_loop
 	nop
 
 	/* And the RFI Target address too */
@@ -169,7 +168,6 @@
 	tophys_r1	%r10
 	std		%r11,  TASK_PT_GR11(%r10)
 
-#ifndef CONFIG_PDC_NARROW
 	/* Switch to wide mode; Superdome doesn't support narrow PDC
 	** calls.
 	*/
@@ -179,7 +177,6 @@
 	bv		(%rp)
 	ssm		PSW_SM_W,%r0
 2:
-#endif /* CONFIG_PDC_NARROW */
 
 	/* Set Wide mode as the "Default" (eg for traps)
 	** First trap occurs *right* after (or part of) rfi for slave CPUs.
diff -Nru a/arch/parisc/kernel/init_task.c b/arch/parisc/kernel/init_task.c
--- a/arch/parisc/kernel/init_task.c	Sun May 16 01:18:35 2004
+++ b/arch/parisc/kernel/init_task.c	Sun May 16 01:18:35 2004
@@ -52,11 +52,13 @@
 	__attribute__((aligned(128))) __attribute__((__section__(".data.init_task"))) =
 		{ INIT_THREAD_INFO(init_task) };
 
-pgd_t swapper_pg_dir[PTRS_PER_PGD] __attribute__ ((aligned(4096))) = { {0}, };
 #ifdef __LP64__
-unsigned long pmd0[PTRS_PER_PMD] __attribute__ ((aligned(4096))) = { 0, };
+/* NOTE: This layout exactly conforms to the hybrid L2/L3 page table layout
+ * with the first pmd adjacent to the pgd and below it */
+pmd_t pmd0[PTRS_PER_PMD] __attribute__ ((aligned(PAGE_SIZE))) = { {0}, };
 #endif
-unsigned long pg0[PT_INITIAL * PTRS_PER_PTE] __attribute__ ((aligned(4096))) = { 0, };
+pgd_t swapper_pg_dir[PTRS_PER_PGD] __attribute__ ((aligned(PAGE_SIZE))) = { {0}, };
+pte_t pg0[PT_INITIAL * PTRS_PER_PTE] __attribute__ ((aligned(PAGE_SIZE))) = { {0}, };
 
 /*
  * Initial task structure.
diff -Nru a/arch/parisc/kernel/pacache.S b/arch/parisc/kernel/pacache.S
--- a/arch/parisc/kernel/pacache.S	Sun May 16 01:18:34 2004
+++ b/arch/parisc/kernel/pacache.S	Sun May 16 01:18:34 2004
@@ -350,10 +350,6 @@
 
 	.procend
 
-#if (TMPALIAS_MAP_START >= 0x80000000UL)
-Warning TMPALIAS_MAP_START changed. If > 2 Gb, code in pacache.S is bogus
-#endif
-
 /*
  * NOTE: Code in clear_user_page has a hard coded dependency on the
  *       maximum alias boundary being 4 Mb. We've been assured by the
@@ -490,6 +486,9 @@
 
 	ldil    L%(TMPALIAS_MAP_START),%r28
 #ifdef __LP64__
+#if (TMPALIAS_MAP_START >= 0x80000000)
+	depdi	0,31,32,%r28	/* clear any sign extension */
+#endif
 	extrd,u %r26,56,32,%r26 /* convert phys addr to tlb insert format */
 	depd    %r25,63,22,%r28 /* Form aliased virtual address 'to' */
 	depdi   0,63,12,%r28    /* Clear any offset bits */
@@ -574,6 +573,95 @@
 	.exit
 
 	.procend
+	
+	.export flush_user_dcache_page
+
+flush_user_dcache_page:
+	.proc
+	.callinfo NO_CALLS
+	.entry
+
+	ldil    L%dcache_stride,%r1
+	ldw     R%dcache_stride(%r1),%r23
+
+#ifdef __LP64__
+	depdi,z 1,63-PAGE_SHIFT,1,%r25
+#else
+	depwi,z 1,31-PAGE_SHIFT,1,%r25
+#endif
+	add     %r26,%r25,%r25
+	sub     %r25,%r23,%r25
+
+
+1:      fdc,m   %r23(%sr3,%r26)
+	fdc,m   %r23(%sr3,%r26)
+	fdc,m   %r23(%sr3,%r26)
+	fdc,m   %r23(%sr3,%r26)
+	fdc,m   %r23(%sr3,%r26)
+	fdc,m   %r23(%sr3,%r26)
+	fdc,m   %r23(%sr3,%r26)
+	fdc,m   %r23(%sr3,%r26)
+	fdc,m   %r23(%sr3,%r26)
+	fdc,m   %r23(%sr3,%r26)
+	fdc,m   %r23(%sr3,%r26)
+	fdc,m   %r23(%sr3,%r26)
+	fdc,m   %r23(%sr3,%r26)
+	fdc,m   %r23(%sr3,%r26)
+	fdc,m   %r23(%sr3,%r26)
+	CMPB<<  %r26,%r25,1b
+	fdc,m   %r23(%sr3,%r26)
+
+	sync
+	bv      %r0(%r2)
+	nop
+	.exit
+
+	.procend
+
+	.export flush_user_icache_page
+
+flush_user_icache_page:
+	.proc
+	.callinfo NO_CALLS
+	.entry
+
+	ldil    L%dcache_stride,%r1
+	ldw     R%dcache_stride(%r1),%r23
+
+#ifdef __LP64__
+	depdi,z 1,63-PAGE_SHIFT,1,%r25
+#else
+	depwi,z 1,31-PAGE_SHIFT,1,%r25
+#endif
+	add     %r26,%r25,%r25
+	sub     %r25,%r23,%r25
+
+
+1:      fic,m   %r23(%sr3,%r26)
+	fic,m   %r23(%sr3,%r26)
+	fic,m   %r23(%sr3,%r26)
+	fic,m   %r23(%sr3,%r26)
+	fic,m   %r23(%sr3,%r26)
+	fic,m   %r23(%sr3,%r26)
+	fic,m   %r23(%sr3,%r26)
+	fic,m   %r23(%sr3,%r26)
+	fic,m   %r23(%sr3,%r26)
+	fic,m   %r23(%sr3,%r26)
+	fic,m   %r23(%sr3,%r26)
+	fic,m   %r23(%sr3,%r26)
+	fic,m   %r23(%sr3,%r26)
+	fic,m   %r23(%sr3,%r26)
+	fic,m   %r23(%sr3,%r26)
+	CMPB<<  %r26,%r25,1b
+	fic,m   %r23(%sr3,%r26)
+
+	sync
+	bv      %r0(%r2)
+	nop
+	.exit
+
+	.procend
+
 
 	.export purge_kernel_dcache_page
 
diff -Nru a/arch/parisc/kernel/pci-dma.c b/arch/parisc/kernel/pci-dma.c
--- a/arch/parisc/kernel/pci-dma.c	Sun May 16 01:18:36 2004
+++ b/arch/parisc/kernel/pci-dma.c	Sun May 16 01:18:36 2004
@@ -539,10 +539,10 @@
 	.unmap_single =		pa11_dma_unmap_single,
 	.map_sg =		pa11_dma_map_sg,
 	.unmap_sg =		pa11_dma_unmap_sg,
-	.dma_sync_single_cpu =	pa11_dma_sync_single_cpu,
-	.dma_sync_single_device = pa11_dma_sync_single_device,
-	.dma_sync_sg_cpu =	pa11_dma_sync_sg_cpu,
-	.dma_sync_sg_device =	pa11_dma_sync_sg_device,
+	.dma_sync_single_for_cpu =	pa11_dma_sync_single_for_cpu,
+	.dma_sync_single_for_device =	pa11_dma_sync_single_for_device,
+	.dma_sync_sg_for_cpu =		pa11_dma_sync_sg_for_cpu,
+	.dma_sync_sg_for_device =	pa11_dma_sync_sg_for_device,
 };
 
 
diff -Nru a/arch/parisc/kernel/perf.c b/arch/parisc/kernel/perf.c
--- a/arch/parisc/kernel/perf.c	Sun May 16 01:18:34 2004
+++ b/arch/parisc/kernel/perf.c	Sun May 16 01:18:34 2004
@@ -506,9 +506,11 @@
 		perf_processor_interface = ONYX_INTF;
 	} else if (boot_cpu_data.cpu_type == pcxw ||
 		 boot_cpu_data.cpu_type == pcxw_ ||
-		 boot_cpu_data.cpu_type == pcxw2) {
+		 boot_cpu_data.cpu_type == pcxw2 ||
+		 boot_cpu_data.cpu_type == mako) {
 		perf_processor_interface = CUDA_INTF;
-		if (boot_cpu_data.cpu_type == pcxw2) 
+		if (boot_cpu_data.cpu_type == pcxw2 ||
+		    boot_cpu_data.cpu_type == mako) 
 			bitmask_array = perf_bitmasks_piranha;
 	} else {
 		perf_processor_interface = UNKNOWN_INTF;
diff -Nru a/arch/parisc/kernel/process.c b/arch/parisc/kernel/process.c
--- a/arch/parisc/kernel/process.c	Sun May 16 01:18:37 2004
+++ b/arch/parisc/kernel/process.c	Sun May 16 01:18:37 2004
@@ -44,6 +44,7 @@
 #include <linux/sched.h>
 #include <linux/stddef.h>
 #include <linux/unistd.h>
+#include <linux/kallsyms.h>
 
 #include <asm/io.h>
 #include <asm/offsets.h>
@@ -51,6 +52,7 @@
 #include <asm/pdc_chassis.h>
 #include <asm/pgalloc.h>
 #include <asm/uaccess.h>
+#include <asm/unwind.h>
 
 int hlt_counter;
 
@@ -367,4 +369,29 @@
 out:
 
 	return error;
+}
+
+unsigned long 
+get_wchan(struct task_struct *p)
+{
+	struct unwind_frame_info info;
+	unsigned long ip;
+	int count = 0;
+	/*
+	 * These bracket the sleeping functions..
+	 */
+#	define first_sched	((unsigned long) scheduling_functions_start_here)
+#	define last_sched	((unsigned long) scheduling_functions_end_here)
+
+	unwind_frame_init_from_blocked_task(&info, p);
+	do {
+		if (unwind_once(&info) < 0)
+			return 0;
+		ip = info.ip;
+		if (ip < first_sched || ip >= last_sched)
+			return ip;
+	} while (count++ < 16);
+	return 0;
+#	undef first_sched
+#	undef last_sched
 }
diff -Nru a/arch/parisc/kernel/processor.c b/arch/parisc/kernel/processor.c
--- a/arch/parisc/kernel/processor.c	Sun May 16 01:18:36 2004
+++ b/arch/parisc/kernel/processor.c	Sun May 16 01:18:36 2004
@@ -231,9 +231,7 @@
 	boot_cpu_data.hversion =  boot_cpu_data.pdc.model.hversion;
 	boot_cpu_data.sversion =  boot_cpu_data.pdc.model.sversion;
 
-	boot_cpu_data.cpu_type =
-			parisc_get_cpu_type(boot_cpu_data.hversion);
-
+	boot_cpu_data.cpu_type = parisc_get_cpu_type(boot_cpu_data.hversion);
 	boot_cpu_data.cpu_name = cpu_name_version[boot_cpu_data.cpu_type][0];
 	boot_cpu_data.family_name = cpu_name_version[boot_cpu_data.cpu_type][1];
 }
@@ -276,6 +274,7 @@
 	int ret;
 	struct pdc_coproc_cfg coproc_cfg;
 
+	set_firmware_width();
 	ret = pdc_coproc_cfg(&coproc_cfg);
 
 	if(ret >= 0 && coproc_cfg.ccr_functional) {
diff -Nru a/arch/parisc/kernel/real2.S b/arch/parisc/kernel/real2.S
--- a/arch/parisc/kernel/real2.S	Sun May 16 01:18:35 2004
+++ b/arch/parisc/kernel/real2.S	Sun May 16 01:18:35 2004
@@ -26,6 +26,7 @@
 
 save_cr_space:
 	.block	REG_SZ * N_SAVED_REGS
+save_cr_end:
 
 
 /************************ 32-bit real-mode calls ***********************/
@@ -123,7 +124,7 @@
 	nop
 
 restore_control_regs:
-	load32	PA(save_cr_space+(N_SAVED_REGS*REG_SZ)), %r26
+	load32	PA(save_cr_end), %r26
 	POP_CR(%cr15, %r26)
 	POP_CR(%cr31, %r26)
 	POP_CR(%cr30, %r26)
diff -Nru a/arch/parisc/kernel/setup.c b/arch/parisc/kernel/setup.c
--- a/arch/parisc/kernel/setup.c	Sun May 16 01:18:36 2004
+++ b/arch/parisc/kernel/setup.c	Sun May 16 01:18:36 2004
@@ -121,8 +121,11 @@
 
 	pdc_console_init();
 
-#ifdef CONFIG_PDC_NARROW
-	printk(KERN_INFO "Kernel is using PDC in 32-bit mode.\n");
+#ifdef __LP64__
+	extern int parisc_narrow_firmware;
+	if(parisc_narrow_firmware) {
+		printk(KERN_INFO "Kernel is using PDC in 32-bit mode.\n");
+	}
 #endif
 	setup_pdc();
 	setup_cmdline(cmdline_p);
@@ -204,6 +207,7 @@
         case pcxw:
         case pcxw_:
         case pcxw2:
+	case mako:	/* XXX : this is really mckinley bus */
                 if (NULL == proc_runway_root)
                 {
                         proc_runway_root = proc_mkdir("bus/runway", 0);
diff -Nru a/arch/parisc/kernel/signal.c b/arch/parisc/kernel/signal.c
--- a/arch/parisc/kernel/signal.c	Sun May 16 01:18:36 2004
+++ b/arch/parisc/kernel/signal.c	Sun May 16 01:18:36 2004
@@ -353,12 +353,17 @@
 		goto give_sigsegv;
 
 	/* Set up to return from userspace.  If provided, use a stub
-	   already in userspace.  */
+	   already in userspace. The first words of tramp are used to
+	   save the previous sigrestartblock trampoline that might be
+	   on the stack. We start the sigreturn trampoline at 
+	   SIGRESTARTBLOCK_TRAMP+X. */
 	err |= __put_user(in_syscall ? INSN_LDI_R25_1 : INSN_LDI_R25_0,
-			&frame->tramp[SIGRETURN_TRAMP+0]);
-	err |= __put_user(INSN_LDI_R20, &frame->tramp[SIGRETURN_TRAMP+1]);
-	err |= __put_user(INSN_BLE_SR2_R0, &frame->tramp[SIGRETURN_TRAMP+2]);
-	err |= __put_user(INSN_NOP, &frame->tramp[SIGRETURN_TRAMP+3]);
+			&frame->tramp[SIGRESTARTBLOCK_TRAMP+0]);
+	err |= __put_user(INSN_LDI_R20, 
+			&frame->tramp[SIGRESTARTBLOCK_TRAMP+1]);
+	err |= __put_user(INSN_BLE_SR2_R0, 
+			&frame->tramp[SIGRESTARTBLOCK_TRAMP+2]);
+	err |= __put_user(INSN_NOP, &frame->tramp[SIGRESTARTBLOCK_TRAMP+3]);
 
 #if DEBUG_SIG
 	/* Assert that we're flushing in the correct space... */
@@ -370,12 +375,16 @@
 	}
 #endif
 
-	flush_user_dcache_range((unsigned long) &frame->tramp[SIGRETURN_TRAMP],
+	flush_user_dcache_range((unsigned long) &frame->tramp[0],
 			   (unsigned long) &frame->tramp[TRAMP_SIZE]);
-	flush_user_icache_range((unsigned long) &frame->tramp[SIGRETURN_TRAMP],
+	flush_user_icache_range((unsigned long) &frame->tramp[0],
 			   (unsigned long) &frame->tramp[TRAMP_SIZE]);
 
-	rp = (unsigned long) &frame->tramp[SIGRETURN_TRAMP];
+	/* TRAMP Words 0-4, Lenght 5 = SIGRESTARTBLOCK_TRAMP
+	 * TRAMP Words 5-9, Length 4 = SIGRETURN_TRAMP
+	 * So the SIGRETURN_TRAMP is at the end of SIGRESTARTBLOCK_TRAMP
+	 */
+	rp = (unsigned long) &frame->tramp[SIGRESTARTBLOCK_TRAMP];
 
 	if (err)
 		goto give_sigsegv;
diff -Nru a/arch/parisc/kernel/smp.c b/arch/parisc/kernel/smp.c
--- a/arch/parisc/kernel/smp.c	Sun May 16 01:18:36 2004
+++ b/arch/parisc/kernel/smp.c	Sun May 16 01:18:36 2004
@@ -3,7 +3,7 @@
 **
 ** Copyright (C) 1999 Walt Drummond <drummond@valinux.com>
 ** Copyright (C) 1999 David Mosberger-Tang <davidm@hpl.hp.com>
-** Copyright (C) 2001 Grant Grundler <grundler@parisc-linux.org>
+** Copyright (C) 2001,2004 Grant Grundler <grundler@parisc-linux.org>
 ** 
 ** Lots of stuff stolen from arch/alpha/kernel/smp.c
 ** ...and then parisc stole from arch/ia64/kernel/smp.c. Thanks David! :^)
@@ -60,20 +60,16 @@
 
 volatile struct task_struct *smp_init_current_idle_task;
 
-static volatile int smp_commenced = 0;   /* Set when the idlers are all forked */
-static volatile int cpu_now_booting = 0;      /* track which CPU is booting */
-cpumask_t cpu_online_map = CPU_MASK_NONE;   /* Bitmap of online CPUs */
-#define IS_LOGGED_IN(cpunum) (cpu_isset(cpunum, cpu_online_map))
+static volatile int cpu_now_booting = 0;	/* track which CPU is booting */
+static int parisc_max_cpus = -1;		/* Command line */
 
-EXPORT_SYMBOL(cpu_online_map);
+unsigned long cache_decay_ticks;	/* declared by include/linux/sched.h */
+cpumask_t cpu_online_map = CPU_MASK_NONE;	/* Bitmap of online CPUs */
+cpumask_t cpu_possible_map = CPU_MASK_NONE;	/* Bitmap of Present CPUs */
 
-int smp_num_cpus = 1;
-int smp_threads_ready = 0;
-unsigned long cache_decay_ticks;
-static int max_cpus = -1;			     /* Command line */
-cpumask_t cpu_present_mask;
+EXPORT_SYMBOL(cpu_online_map);
+EXPORT_SYMBOL(cpu_possible_map);
 
-EXPORT_SYMBOL(cpu_present_mask);
 
 struct smp_call_struct {
 	void (*func) (void *info);
@@ -114,7 +110,7 @@
 
 #error verify IRQ_OFFSET(IPI_IRQ) is ipi_interrupt() in new IRQ region
 
-	if(IS_LOGGED_IN(cpuid) )
+	if(cpu_online(cpuid) )
 	{
 		switch_to_idle_task(current);
 	}
@@ -293,12 +289,13 @@
 {
 	int i;
 	
-	for (i = 0; i < smp_num_cpus; i++) {
-		if (i != smp_processor_id())
+	for (i = 0; i < parisc_max_cpus; i++) {
+		if (cpu_online(i) && i != smp_processor_id())
 			send_IPI_single(i, op);
 	}
 }
 
+
 inline void 
 smp_send_stop(void)	{ send_IPI_allbutself(IPI_CPU_STOP); }
 
@@ -327,12 +324,15 @@
 	struct smp_call_struct data;
 	unsigned long timeout;
 	static spinlock_t lock = SPIN_LOCK_UNLOCKED;
+
+	/* Can deadlock when called with interrupts disabled */
+	WARN_ON(irqs_disabled());
 	
 	data.func = func;
 	data.info = info;
 	data.wait = wait;
-	atomic_set(&data.unstarted_count, smp_num_cpus - 1);
-	atomic_set(&data.unfinished_count, smp_num_cpus - 1);
+	atomic_set(&data.unstarted_count, num_online_cpus() - 1);
+	atomic_set(&data.unfinished_count, num_online_cpus() - 1);
 
 	if (retry) {
 		spin_lock (&lock);
@@ -392,7 +392,7 @@
 
 static int __init nosmp(char *str)
 {
-	max_cpus = 0;
+	parisc_max_cpus = 0;
 	return 1;
 }
 
@@ -400,7 +400,7 @@
 
 static int __init maxcpus(char *str)
 {
-	get_option(&str, &max_cpus);
+	get_option(&str, &parisc_max_cpus);
 	return 1;
 }
 
@@ -496,17 +496,13 @@
 
 	local_irq_enable();  /* Interrupts have been off until now */
 
-	/* Slaves wait here until Big Poppa daddy say "jump" */
-	mb();	/* PARANOID */
-	while (!smp_commenced) ;
-	mb();	/* PARANOID */
-
 	cpu_idle();      /* Wait for timer to schedule some work */
 
 	/* NOTREACHED */
 	panic("smp_callin() AAAAaaaaahhhh....\n");
 }
 
+#if 0
 /*
  * Create the idle task for a new Slave CPU.  DO NOT use kernel_thread()
  * because that could end up calling schedule(). If it did, the new idle
@@ -528,7 +524,7 @@
 /*
  * Bring one cpu online.
  */
-static int __init smp_boot_one_cpu(int cpuid, int cpunum)
+int __init smp_boot_one_cpu(int cpuid, int cpunum)
 {
 	struct task_struct *idle;
 	long timeout;
@@ -573,12 +569,11 @@
 
 	/* 
 	 * OK, wait a bit for that CPU to finish staggering about. 
-	 * Slave will set a bit when it reaches smp_cpu_init() and then
-	 * wait for smp_commenced to be 1.
-	 * Once we see the bit change, we can move on.
+	 * Slave will set a bit when it reaches smp_cpu_init().
+	 * Once the "monarch CPU" sees the bit change, it can move on.
 	 */
 	for (timeout = 0; timeout < 10000; timeout++) {
-		if(IS_LOGGED_IN(cpunum)) {
+		if(cpu_online(cpunum)) {
 			/* Which implies Slave has started up */
 			cpu_now_booting = 0;
 			smp_init_current_idle_task = NULL;
@@ -605,120 +600,56 @@
 #endif
 	return 0;
 }
+#endif
 
 
-
-
-/*
-** inventory.c:do_inventory() has already 'discovered' the additional CPU's.
-** We are ready to wrest them from PDC's control now.
-** Called by smp_init bring all the secondaries online and hold them.  
-**
-** o Setup of the IPI irq handler is done in irq.c.
-** o MEM_RENDEZ is initialzed in head.S:stext()
-**
-*/
-void __init smp_boot_cpus(void)
+void __devinit smp_prepare_boot_cpu(void)
 {
-	int i, cpu_count = 1;
-	unsigned long bogosum = cpu_data[0].loops_per_jiffy; /* Count Monarch */
-
-	/* REVISIT - assumes first CPU reported by PAT PDC is BSP */
 	int bootstrap_processor=cpu_data[0].cpuid;	/* CPU ID of BSP */
 
+#ifdef ENTRY_SYS_CPUS
+	cpu_data[0].state = STATE_RUNNING;
+#endif
+
 	/* Setup BSP mappings */
 	printk(KERN_DEBUG "SMP: bootstrap CPU ID is %d\n",bootstrap_processor);
 	init_task.thread_info->cpu = bootstrap_processor; 
 	current->thread_info->cpu = bootstrap_processor;
-	/* Mark Boostrap processor as present */
-	cpu_online_map = cpumask_of_cpu(bootstrap_processor);
-	current->active_mm = &init_mm;
 
-#ifdef ENTRY_SYS_CPUS
-	cpu_data[0].state = STATE_RUNNING;
-#endif
-	cpu_present_mask = cpumask_of_cpu(bootstrap_processor);
+	cpu_set(bootstrap_processor, cpu_online_map);
+	cpu_set(bootstrap_processor, cpu_possible_map);
 
-	/* Nothing to do when told not to.  */
-	if (max_cpus == 0) {
-		printk(KERN_INFO "SMP mode deactivated.\n");
-		return;
-	}
+	/* Mark Boostrap processor as present */
+	current->active_mm = &init_mm;
 
-	if (max_cpus != -1) 
-		printk(KERN_INFO "Limiting CPUs to %d\n", max_cpus);
+	cache_decay_ticks = HZ/100;	/* FIXME very rough.  */
+}
 
-	/* We found more than one CPU.... */
-	if (boot_cpu_data.cpu_count > 1) {
 
-		for (i = 0; i < NR_CPUS; i++) {
-			if (cpu_data[i].cpuid == NO_PROC_ID || 
-			    cpu_data[i].cpuid == bootstrap_processor)
-				continue;
 
-			if (smp_boot_one_cpu(cpu_data[i].cpuid, cpu_count) < 0)
-				continue;
-
-			bogosum += cpu_data[i].loops_per_jiffy;
-			cpu_count++; /* Count good CPUs only... */
-			
-			cpu_present_mask |= 1UL << i;
-			
-			/* Bail when we've started as many CPUS as told to */
-			if (cpu_count == max_cpus)
-				break;
-		}
-	}
-	if (cpu_count == 1) {
-		printk(KERN_INFO "SMP: Bootstrap processor only.\n");
-	}
+/*
+** inventory.c:do_inventory() hasn't yet been run and thus we
+** don't 'discover' the additional CPU's until later.
+*/
+void __init smp_prepare_cpus(unsigned int max_cpus)
+{
 
-	/*
-	 * FIXME very rough.
-	 */
-	cache_decay_ticks = HZ/100;
+	if (max_cpus != -1) 
+		printk(KERN_INFO "SMP: Limited to %d CPUs\n", max_cpus);
 
-	printk(KERN_INFO "SMP: Total %d of %d processors activated "
-	       "(%lu.%02lu BogoMIPS noticed) (Present Mask: %lu).\n",
-	       cpu_count, boot_cpu_data.cpu_count, (bogosum + 25) / 5000,
-	       ((bogosum + 25) / 50) % 100, cpu_present_mask);
+	printk(KERN_INFO "SMP: Monarch CPU activated (%lu.%02lu BogoMIPS)\n",
+	       (cpu_data[0].loops_per_jiffy + 25) / 5000,
+	       ((cpu_data[0].loops_per_jiffy + 25) / 50) % 100);
 
-	smp_num_cpus = cpu_count;
-#ifdef PER_CPU_IRQ_REGION
-	ipi_init();
-#endif
 	return;
 }
 
-/* 
- * Called from main.c by Monarch Processor.
- * After this, any CPU can schedule any task.
- */
-void smp_commence(void)
-{
-	smp_commenced = 1;
-	mb();
-	return;
-}
 
-/*
- * XXX FIXME : do nothing
- */
 void smp_cpus_done(unsigned int cpu_max)
 {
-	smp_threads_ready = 1;
-}
-
-void __init smp_prepare_cpus(unsigned int max_cpus)
-{
-	smp_boot_cpus();
+	return;
 }
 
-void __devinit smp_prepare_boot_cpu(void)
-{
-	cpu_set(smp_processor_id(), cpu_online_map);
-	cpu_set(smp_processor_id(), cpu_present_mask);
-}
 
 int __devinit __cpu_up(unsigned int cpu)
 {
@@ -745,7 +676,7 @@
 #ifdef DUMP_MORE_STATE
 		for(i=0; i<NR_CPUS; i++) {
 			int cpus_per_line = 4;
-			if(IS_LOGGED_IN(i)) {
+			if(cpu_online(i)) {
 				if (j++ % cpus_per_line)
 					printk(" %3d",i);
 				else
@@ -760,7 +691,7 @@
 		printk("\nCPUSTATE  TASK CPUNUM CPUID HARDCPU(HPA)\n");
 #ifdef DUMP_MORE_STATE
 		for(i=0;i<NR_CPUS;i++) {
-			if (!IS_LOGGED_IN(i))
+			if (!cpu_online(i))
 				continue;
 			if (cpu_data[i].cpuid != NO_PROC_ID) {
 				switch(cpu_data[i].state) {
@@ -780,7 +711,7 @@
 						printk("%08x?", cpu_data[i].state);
 						break;
 				}
-				if(IS_LOGGED_IN(i)) {
+				if(cpu_online(i)) {
 					printk(" %4d",current_pid(i));
 				}	
 				printk(" %6d",cpu_number_map(i));
@@ -796,7 +727,7 @@
 #ifdef DUMP_MORE_STATE
      		printk("\nCPUSTATE   CPUID\n");
 		for (i=0;i<NR_CPUS;i++) {
-			if (!IS_LOGGED_IN(i))
+			if (!cpu_online(i))
 				continue;
 			if (cpu_data[i].cpuid != NO_PROC_ID) {
 				switch(cpu_data[i].state) {
diff -Nru a/arch/parisc/kernel/sys_parisc.c b/arch/parisc/kernel/sys_parisc.c
--- a/arch/parisc/kernel/sys_parisc.c	Sun May 16 01:18:36 2004
+++ b/arch/parisc/kernel/sys_parisc.c	Sun May 16 01:18:36 2004
@@ -93,7 +93,7 @@
 		unsigned long addr, unsigned long len, unsigned long pgoff)
 {
 	struct vm_area_struct *vma;
-	int offset = get_offset(mapping);
+	int offset = mapping ? get_offset(mapping) : 0;
 
 	addr = DCACHE_ALIGN(addr - offset) + offset;
 
@@ -117,8 +117,10 @@
 	if (!addr)
 		addr = TASK_UNMAPPED_BASE;
 
-	if (filp && (flags & MAP_SHARED)) {
+	if (filp) {
 		addr = get_shared_area(filp->f_mapping, addr, len, pgoff);
+	} else if(flags & MAP_SHARED) {
+		addr = get_shared_area(NULL, addr, len, pgoff);
 	} else {
 		addr = get_unshared_area(addr, len);
 	}
diff -Nru a/arch/parisc/kernel/sys_parisc32.c b/arch/parisc/kernel/sys_parisc32.c
--- a/arch/parisc/kernel/sys_parisc32.c	Sun May 16 01:18:34 2004
+++ b/arch/parisc/kernel/sys_parisc32.c	Sun May 16 01:18:34 2004
@@ -65,189 +65,6 @@
 #endif
 
 /*
- * count32() counts the number of arguments/envelopes. It is basically
- *           a copy of count() from fs/exec.c, except that it works
- *           with 32 bit argv and envp pointers.
- */
-
-static int count32(u32 *argv, int max)
-{
-	int i = 0;
-
-	if (argv != NULL) {
-		for (;;) {
-			u32 p;
-			int error;
-
-			error = get_user(p,argv);
-			if (error)
-				return error;
-			if (!p)
-				break;
-			argv++;
-			if(++i > max)
-				return -E2BIG;
-		}
-	}
-	return i;
-}
-
-
-/*
- * copy_strings32() is basically a copy of copy_strings() from fs/exec.c
- *                  except that it works with 32 bit argv and envp pointers.
- */
-
-
-static int copy_strings32(int argc, u32 *argv, struct linux_binprm *bprm)
-{
-	while (argc-- > 0) {
-		u32 str;
-		int len;
-		unsigned long pos;
-
-		if (get_user(str, argv + argc) ||
-		    !str ||
-		    !(len = strnlen_user((char *)compat_ptr(str), bprm->p)))
-			return -EFAULT;
-
-		if (bprm->p < len) 
-			return -E2BIG; 
-
-		bprm->p -= len;
-
-		pos = bprm->p;
-		while (len > 0) {
-			char *kaddr;
-			int i, new, err;
-			struct page *page;
-			int offset, bytes_to_copy;
-
-			offset = pos % PAGE_SIZE;
-			i = pos/PAGE_SIZE;
-			page = bprm->page[i];
-			new = 0;
-			if (!page) {
-				page = alloc_page(GFP_HIGHUSER);
-				bprm->page[i] = page;
-				if (!page)
-					return -ENOMEM;
-				new = 1;
-			}
-			kaddr = (char *)kmap(page);
-
-			if (new && offset)
-				memset(kaddr, 0, offset);
-			bytes_to_copy = PAGE_SIZE - offset;
-			if (bytes_to_copy > len) {
-				bytes_to_copy = len;
-				if (new)
-					memset(kaddr+offset+len, 0, PAGE_SIZE-offset-len);
-			}
-			err = copy_from_user(kaddr + offset, (char *)compat_ptr(str), bytes_to_copy);
-			flush_dcache_page(page);
-			kunmap(page);
-
-			if (err)
-				return -EFAULT; 
-
-			pos += bytes_to_copy;
-			str += bytes_to_copy;
-			len -= bytes_to_copy;
-		}
-	}
-	return 0;
-}
-
-/*
- * do_execve32() is mostly a copy of do_execve(), with the exception
- * that it processes 32 bit argv and envp pointers.
- */
-
-static inline int 
-do_execve32(char * filename, u32 * argv, u32 * envp, struct pt_regs * regs)
-{
-	struct linux_binprm bprm;
-	struct file *file;
-	int retval;
-	int i;
-
-	file = open_exec(filename);
-
-	retval = PTR_ERR(file);
-	if (IS_ERR(file))
-		return retval;
-
-	bprm.p = PAGE_SIZE*MAX_ARG_PAGES-sizeof(void *);
-	memset(bprm.page, 0, MAX_ARG_PAGES*sizeof(bprm.page[0]));
-
-	DBG(("do_execve32(%s, %p, %p, %p)\n", filename, argv, envp, regs));
-
-	bprm.file = file;
-	bprm.filename = filename;
-	bprm.interp = filename;
-	bprm.sh_bang = 0;
-	bprm.loader = 0;
-	bprm.exec = 0;
-
-	bprm.mm = mm_alloc();
-	retval = -ENOMEM;
-	if (!bprm.mm)
-		goto out_file;
-
-	retval = init_new_context(current, bprm.mm);
-	if (retval < 0)
-		goto out_mm;
-
-	if ((bprm.argc = count32(argv, bprm.p / sizeof(u32))) < 0) 
-		goto out_mm;
-
-	if ((bprm.envc = count32(envp, bprm.p / sizeof(u32))) < 0) 
-		goto out_mm;
-
-	retval = prepare_binprm(&bprm);
-	if (retval < 0)
-		goto out;
-	
-	retval = copy_strings_kernel(1, &bprm.filename, &bprm);
-	if (retval < 0)
-		goto out;
-
-	bprm.exec = bprm.p;
-	retval = copy_strings32(bprm.envc, envp, &bprm);
-	if (retval < 0)
-		goto out;
-
-	retval = copy_strings32(bprm.argc, argv, &bprm);
-	if (retval < 0)
-		goto out;
-
-	retval = search_binary_handler(&bprm,regs);
-	if (retval >= 0)
-		/* execve success */
-		return retval;
-
-out:
-	/* Something went wrong, return the inode and free the argument pages*/
-	for (i = 0; i < MAX_ARG_PAGES; i++) {
-		struct page *page = bprm.page[i];
-		if (page)
-			__free_page(page);
-	}
-
-out_mm:
-	mmdrop(bprm.mm);
-
-out_file:
-	if (bprm.file) {
-		allow_write_access(bprm.file);
-		fput(bprm.file);
-	}
-
-	return retval;
-}
-
-/*
  * sys32_execve() executes a new program.
  */
 
@@ -261,8 +78,8 @@
 	error = PTR_ERR(filename);
 	if (IS_ERR(filename))
 		goto out;
-	error = do_execve32(filename, (u32 *) regs->gr[25],
-		(u32 *) regs->gr[24], regs);
+	error = compat_do_execve(filename, compat_ptr(regs->gr[25]),
+				 compat_ptr(regs->gr[24]), regs);
 	if (error == 0)
 		current->ptrace &= ~PT_DTRACE;
 	putname(filename);
@@ -609,149 +426,6 @@
 	return error;
 }
 
-/* readv/writev stolen from mips64 */
-typedef ssize_t (*IO_fn_t)(struct file *, char *, size_t, loff_t *);
-
-static long
-do_readv_writev32(int type, struct file *file, const struct compat_iovec *vector,
-		  u32 count)
-{
-	unsigned long tot_len;
-	struct iovec iovstack[UIO_FASTIOV];
-	struct iovec *iov=iovstack, *ivp;
-	struct inode *inode;
-	long retval, i;
-	IO_fn_t fn;
-
-	/* First get the "struct iovec" from user memory and
-	 * verify all the pointers
-	 */
-	if (!count)
-		return 0;
-	if(verify_area(VERIFY_READ, vector, sizeof(struct compat_iovec)*count))
-		return -EFAULT;
-	if (count > UIO_MAXIOV)
-		return -EINVAL;
-	if (count > UIO_FASTIOV) {
-		iov = kmalloc(count*sizeof(struct iovec), GFP_KERNEL);
-		if (!iov)
-			return -ENOMEM;
-	}
-
-	tot_len = 0;
-	i = count;
-	ivp = iov;
-	while (i > 0) {
-		u32 len;
-		u32 buf;
-
-		__get_user(len, &vector->iov_len);
-		__get_user(buf, &vector->iov_base);
-		tot_len += len;
-		ivp->iov_base = compat_ptr(buf);
-		ivp->iov_len = (compat_size_t) len;
-		vector++;
-		ivp++;
-		i--;
-	}
-
-	inode = file->f_dentry->d_inode;
-	/* VERIFY_WRITE actually means a read, as we write to user space */
-	retval = locks_verify_area((type == VERIFY_WRITE
-				    ? FLOCK_VERIFY_READ : FLOCK_VERIFY_WRITE),
-				   inode, file, file->f_pos, tot_len);
-	if (retval) {
-		if (iov != iovstack)
-			kfree(iov);
-		return retval;
-	}
-
-	/* Then do the actual IO.  Note that sockets need to be handled
-	 * specially as they have atomicity guarantees and can handle
-	 * iovec's natively
-	 */
-	if (inode->i_sock) {
-		int err;
-		err = sock_readv_writev(type, inode, file, iov, count, tot_len);
-		if (iov != iovstack)
-			kfree(iov);
-		return err;
-	}
-
-	if (!file->f_op) {
-		if (iov != iovstack)
-			kfree(iov);
-		return -EINVAL;
-	}
-	/* VERIFY_WRITE actually means a read, as we write to user space */
-	fn = file->f_op->read;
-	if (type == VERIFY_READ)
-		fn = (IO_fn_t) file->f_op->write;		
-	ivp = iov;
-	while (count > 0) {
-		void * base;
-		int len, nr;
-
-		base = ivp->iov_base;
-		len = ivp->iov_len;
-		ivp++;
-		count--;
-		nr = fn(file, base, len, &file->f_pos);
-		if (nr < 0) {
-			if (retval)
-				break;
-			retval = nr;
-			break;
-		}
-		retval += nr;
-		if (nr != len)
-			break;
-	}
-	if (iov != iovstack)
-		kfree(iov);
-
-	return retval;
-}
-
-asmlinkage long
-sys32_readv(int fd, struct compat_iovec *vector, u32 count)
-{
-	struct file *file;
-	ssize_t ret;
-
-	ret = -EBADF;
-	file = fget(fd);
-	if (!file)
-		goto bad_file;
-	if (file->f_op && (file->f_mode & FMODE_READ) &&
-	    (file->f_op->readv || file->f_op->read))
-		ret = do_readv_writev32(VERIFY_WRITE, file, vector, count);
-
-	fput(file);
-
-bad_file:
-	return ret;
-}
-
-asmlinkage long
-sys32_writev(int fd, struct compat_iovec *vector, u32 count)
-{
-	struct file *file;
-	ssize_t ret;
-
-	ret = -EBADF;
-	file = fget(fd);
-	if(!file)
-		goto bad_file;
-	if (file->f_op && (file->f_mode & FMODE_WRITE) &&
-	    (file->f_op->writev || file->f_op->write))
-	        ret = do_readv_writev32(VERIFY_READ, file, vector, count);
-	fput(file);
-
-bad_file:
-	return ret;
-}
-
 /*** copied from mips64 ***/
 /*
  * Ooo, nasty.  We need here to frob 32-bit unsigned longs to
@@ -814,126 +488,6 @@
 		__put_user(*fdset, ufdset);
 }
 
-/*** This is a virtual copy of sys_select from fs/select.c and probably
- *** should be compared to it from time to time
- ***/
-static inline void *select_bits_alloc(int size)
-{
-	return kmalloc(6 * size, GFP_KERNEL);
-}
-
-static inline void select_bits_free(void *bits, int size)
-{
-	kfree(bits);
-}
-
-/*
- * We can actually return ERESTARTSYS instead of EINTR, but I'd
- * like to be certain this leads to no problems. So I return
- * EINTR just for safety.
- *
- * Update: ERESTARTSYS breaks at least the xview clock binary, so
- * I'm trying ERESTARTNOHAND which restart only when you want to.
- */
-#define MAX_SELECT_SECONDS \
-	((unsigned long) (MAX_SCHEDULE_TIMEOUT / HZ)-1)
-#define DIVIDE_ROUND_UP(x,y) (((x)+(y)-1)/(y))
-
-asmlinkage long
-sys32_select(int n, u32 *inp, u32 *outp, u32 *exp, struct compat_timeval *tvp)
-{
-	fd_set_bits fds;
-	char *bits;
-	long timeout;
-	int ret, size, err;
-
-	timeout = MAX_SCHEDULE_TIMEOUT;
-	if (tvp) {
-		struct compat_timeval tv32;
-		time_t sec, usec;
-
-		if ((ret = copy_from_user(&tv32, tvp, sizeof tv32)))
-			goto out_nofds;
-
-		sec = tv32.tv_sec;
-		usec = tv32.tv_usec;
-
-		ret = -EINVAL;
-		if (sec < 0 || usec < 0)
-			goto out_nofds;
-
-		if ((unsigned long) sec < MAX_SELECT_SECONDS) {
-			timeout = DIVIDE_ROUND_UP(usec, 1000000/HZ);
-			timeout += sec * (unsigned long) HZ;
-		}
-	}
-
-	ret = -EINVAL;
-	if (n < 0)
-		goto out_nofds;
-
-	if (n > current->files->max_fdset)
-		n = current->files->max_fdset;
-
-	/*
-	 * We need 6 bitmaps (in/out/ex for both incoming and outgoing),
-	 * since we used fdset we need to allocate memory in units of
-	 * long-words. 
-	 */
-	ret = -ENOMEM;
-	size = FDS_BYTES(n);
-	bits = select_bits_alloc(size);
-	if (!bits)
-		goto out_nofds;
-	fds.in      = (unsigned long *)  bits;
-	fds.out     = (unsigned long *) (bits +   size);
-	fds.ex      = (unsigned long *) (bits + 2*size);
-	fds.res_in  = (unsigned long *) (bits + 3*size);
-	fds.res_out = (unsigned long *) (bits + 4*size);
-	fds.res_ex  = (unsigned long *) (bits + 5*size);
-
-	if ((ret = get_fd_set32(n, inp, fds.in)) ||
-	    (ret = get_fd_set32(n, outp, fds.out)) ||
-	    (ret = get_fd_set32(n, exp, fds.ex)))
-		goto out;
-	zero_fd_set(n, fds.res_in);
-	zero_fd_set(n, fds.res_out);
-	zero_fd_set(n, fds.res_ex);
-
-	ret = do_select(n, &fds, &timeout);
-
-	if (tvp && !(current->personality & STICKY_TIMEOUTS)) {
-		time_t sec = 0, usec = 0;
-		if (timeout) {
-			sec = timeout / HZ;
-			usec = timeout % HZ;
-			usec *= (1000000/HZ);
-		}
-		err = put_user(sec, &tvp->tv_sec);
-		err |= __put_user(usec, &tvp->tv_usec);
-		if (err)
-			ret = -EFAULT;
-	}
-
-	if (ret < 0)
-		goto out;
-	if (!ret) {
-		ret = -ERESTARTNOHAND;
-		if (signal_pending(current))
-			goto out;
-		ret = 0;
-	}
-
-	set_fd_set32(n, inp, fds.res_in);
-	set_fd_set32(n, outp, fds.res_out);
-	set_fd_set32(n, exp, fds.res_ex);
-
-out:
-	select_bits_free(bits, size);
-out_nofds:
-	return ret;
-}
-
 struct msgbuf32 {
     int mtype;
     char mtext[1];
@@ -991,7 +545,6 @@
 	return err;
 }
 
-
 asmlinkage int sys32_sendfile(int out_fd, int in_fd, compat_off_t *offset, s32 count)
 {
         mm_segment_t old_fs = get_fs();
@@ -1009,94 +562,6 @@
                 return -EFAULT;
 
         return ret;
-}
-
-/* EXPORT/UNEXPORT */
-struct nfsctl_export32 {
-	char		ex_client[NFSCLNT_IDMAX+1];
-	char		ex_path[NFS_MAXPATHLEN+1];
-	__kernel_old_dev_t ex_dev;
-	compat_ino_t	ex_ino;
-	int		ex_flags;
-	__kernel_uid_t	ex_anon_uid;
-	__kernel_gid_t	ex_anon_gid;
-};
-
-struct nfsctl_arg32 {
-	int			ca_version;	/* safeguard */
-	/* wide kernel places this union on 8-byte boundary, narrow on 4 */
-	union {
-		struct nfsctl_svc	u_svc;
-		struct nfsctl_client	u_client;
-		struct nfsctl_export32	u_export;
-		struct nfsctl_fdparm	u_getfd;
-		struct nfsctl_fsparm	u_getfs;
-	} u;
-};
-
-asmlinkage int sys32_nfsservctl(int cmd, void *argp, void *resp)
-{
-	int ret, tmp;
-	struct nfsctl_arg32 n32;
-	struct nfsctl_arg n;
-
-	ret = copy_from_user(&n, argp, sizeof n.ca_version);
-	if (ret != 0)
-		return ret;
-
-	/* adjust argp to point at the union inside the user's n32 struct */
-	tmp = (unsigned long)&n32.u - (unsigned long)&n32;
-	argp = (void *)((unsigned long)argp + tmp);
-	switch(cmd) {
-	case NFSCTL_SVC:
-		ret = copy_from_user(&n.u, argp, sizeof n.u.u_svc);
-		break;
-
-	case NFSCTL_ADDCLIENT:
-	case NFSCTL_DELCLIENT:
-		ret = copy_from_user(&n.u, argp, sizeof n.u.u_client);
-		break;
-
-	case NFSCTL_GETFD:
-		ret = copy_from_user(&n.u, argp, sizeof n.u.u_getfd);
-		break;
-
-	case NFSCTL_GETFS:
-		ret = copy_from_user(&n.u, argp, sizeof n.u.u_getfs);
-		break;
-
-	case NFSCTL_UNEXPORT:		/* nfsctl_export */
-	case NFSCTL_EXPORT:		/* nfsctl_export */
-		ret = copy_from_user(&n32.u, argp, sizeof n32.u.u_export);
-#undef CP
-#define CP(x)	n.u.u_export.ex_##x = n32.u.u_export.ex_##x
-		memcpy(n.u.u_export.ex_client, n32.u.u_export.ex_client, sizeof n32.u.u_export.ex_client);
-		memcpy(n.u.u_export.ex_path, n32.u.u_export.ex_path, sizeof n32.u.u_export.ex_path);
-		CP(dev);
-		CP(ino);
-		CP(flags);
-		CP(anon_uid);
-		CP(anon_gid);
-		break;
-
-	default:
-		/* lockd probes for some other values (0x10000);
-		 * so don't BUG() */
-		ret = -EINVAL;
-		break;
-	}
-
-	if (ret == 0) {
-		unsigned char rbuf[NFS_FHSIZE + sizeof (struct knfsd_fh)];
-		KERNEL_SYSCALL(ret, sys_nfsservctl, cmd, &n, &rbuf);
-		if (cmd == NFSCTL_GETFD) {
-			ret = copy_to_user(resp, rbuf, NFS_FHSIZE);
-		} else if (cmd == NFSCTL_GETFS) {
-			ret = copy_to_user(resp, rbuf, sizeof (struct knfsd_fh));
-		}
-	}
-
-	return ret;
 }
 
 typedef long __kernel_loff_t32;		/* move this to asm/posix_types.h? */
diff -Nru a/arch/parisc/kernel/syscall.S b/arch/parisc/kernel/syscall.S
--- a/arch/parisc/kernel/syscall.S	Sun May 16 01:18:37 2004
+++ b/arch/parisc/kernel/syscall.S	Sun May 16 01:18:37 2004
@@ -155,9 +155,10 @@
 	stw     %r21, -56(%r30)                 /* 6th argument */
 #endif
 
+	/* Are we being ptraced? */
 	mfctl	%cr30, %r1
-	LDREG	TI_FLAGS(%r1), %r19
-	bb,<,n	%r19,31-TIF_SYSCALL_TRACE,.Ltracesys
+	LDREG	TASK_PTRACE(%r1), %r1
+	bb,<,n	%r1,31,.Ltracesys
 	
 	/* Note!  We cannot use the syscall table that is mapped
 	nearby since the gateway page is mapped execute-only. */
diff -Nru a/arch/parisc/kernel/syscall_table.S b/arch/parisc/kernel/syscall_table.S
--- a/arch/parisc/kernel/syscall_table.S	Sun May 16 01:18:33 2004
+++ b/arch/parisc/kernel/syscall_table.S	Sun May 16 01:18:33 2004
@@ -232,12 +232,12 @@
 	ENTRY_DIFF(getdents)
 	/* it is POSSIBLE that select will be OK because even though fd_set
 	 * contains longs, the macros and sizes are clever. */
-	ENTRY_DIFF(select)
+	ENTRY_COMP(select)
 	ENTRY_SAME(flock)
 	ENTRY_SAME(msync)
 	/* struct iovec contains pointers */
-	ENTRY_DIFF(readv)		/* 145 */
-	ENTRY_DIFF(writev)
+	ENTRY_COMP(readv)		/* 145 */
+	ENTRY_COMP(writev)
 	ENTRY_SAME(getsid)
 	ENTRY_SAME(fdatasync)
 	/* struct __sysctl_args is a mess */
@@ -266,7 +266,7 @@
 	ENTRY_SAME(ni_syscall)		/* query_module */
 	ENTRY_SAME(poll)
 	/* structs contain pointers and an in_addr... */
-	ENTRY_DIFF(nfsservctl)
+	ENTRY_COMP(nfsservctl)
 	ENTRY_SAME(setresgid)		/* 170 */
 	ENTRY_SAME(getresgid)
 	ENTRY_SAME(prctl)
@@ -334,3 +334,12 @@
 	ENTRY_SAME(epoll_ctl)		/* 225 */
 	ENTRY_SAME(epoll_wait)
  	ENTRY_SAME(remap_file_pages)
+  ENTRY_SAME(semtimedop)
+  ENTRY_SAME(mq_open)
+  ENTRY_SAME(mq_unlink)   /* 230 */
+  ENTRY_SAME(mq_timedsend)
+  ENTRY_SAME(mq_timedreceive)
+  ENTRY_SAME(mq_notify)
+  ENTRY_SAME(mq_getsetattr)
+  /* Nothing yet */       /* 235 */
+
diff -Nru a/arch/parisc/kernel/unwind.c b/arch/parisc/kernel/unwind.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/arch/parisc/kernel/unwind.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,295 @@
+/*
+ * Kernel unwinding support
+ *
+ * (c) 2002-2004 Randolph Chung <tausq@debian.org>
+ *
+ * Derived partially from the IA64 implementation. The PA-RISC
+ * Runtime Architecture Document is also a useful reference to
+ * understand what is happening here
+ */
+
+/*
+ * J. David Anglin writes:
+ *
+ * "You have to adjust the current sp to that at the begining of the function.
+ * There can be up to two stack additions to allocate the frame in the
+ * prologue.  Similar things happen in the epilogue.  In the presence of
+ * interrupts, you have to be concerned about where you are in the function
+ * and what stack adjustments have taken place."
+ *
+ * For now these cases are not handled, but they should be!
+ */
+
+#include <linux/config.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/slab.h>
+
+#include <asm/uaccess.h>
+
+#include <asm/unwind.h>
+
+/* #define DEBUG 1 */
+#ifdef DEBUG
+#define dbg(x...) printk(x)
+#else
+#define dbg(x...)
+#endif
+
+extern const struct unwind_table_entry __start___unwind[];
+extern const struct unwind_table_entry __stop___unwind[];
+
+static spinlock_t unwind_lock;
+/*
+ * the kernel unwind block is not dynamically allocated so that
+ * we can call unwind_init as early in the bootup process as 
+ * possible (before the slab allocator is initialized)
+ */
+static struct unwind_table kernel_unwind_table;
+static struct unwind_table *unwind_tables, *unwind_tables_end;
+
+
+static inline const struct unwind_table_entry *
+find_unwind_entry_in_table(const struct unwind_table *table, unsigned long addr)
+{
+	const struct unwind_table_entry *e = 0;
+	unsigned long lo, hi, mid;
+
+	addr -= table->base_addr;
+
+	for (lo = 0, hi = table->length; lo < hi; )
+	{
+		mid = (lo + hi) / 2;
+		e = &table->table[mid];
+		if (addr < e->region_start)
+			hi = mid;
+		else if (addr > e->region_end)
+			lo = mid + 1;
+		else
+			break;
+	}
+
+	return e;
+}
+
+static inline const struct unwind_table_entry *
+find_unwind_entry(unsigned long addr)
+{
+	struct unwind_table *table = unwind_tables;
+	const struct unwind_table_entry *e = NULL;
+
+	if (addr >= kernel_unwind_table.start && 
+	    addr <= kernel_unwind_table.end)
+		e = find_unwind_entry_in_table(&kernel_unwind_table, addr);
+	else
+		for (; table; table = table->next)
+		{
+			if (addr >= table->start && 
+			    addr <= table->end)
+				e = find_unwind_entry_in_table(table, addr);
+			if (e)
+				break;
+		}
+
+	return e;
+}
+
+static void
+unwind_table_init(struct unwind_table *table, const char *name,
+		  unsigned long base_addr, unsigned long gp,
+		  const void *table_start, const void *table_end)
+{
+	const struct unwind_table_entry *start = table_start;
+	const struct unwind_table_entry *end = table_end - 1;
+
+	table->name = name;
+	table->base_addr = base_addr;
+	table->gp = gp;
+	table->start = base_addr + start->region_start;
+	table->end = base_addr + end->region_end;
+	table->table = (struct unwind_table_entry *)table_start;
+	table->length = end - start;
+	table->next = NULL;
+}
+
+void *
+unwind_table_add(const char *name, unsigned long base_addr, 
+		 unsigned long gp,
+                 const void *start, const void *end)
+{
+	struct unwind_table *table;
+	unsigned long flags;
+
+	table = kmalloc(sizeof(struct unwind_table), GFP_USER);
+	if (table == NULL)
+		return 0;
+	unwind_table_init(table, name, base_addr, gp, start, end);
+	spin_lock_irqsave(&unwind_lock, flags);
+	if (unwind_tables)
+	{
+		unwind_tables_end->next = table;
+		unwind_tables_end = table;
+	}
+	else
+	{
+		unwind_tables = unwind_tables_end = table;
+	}
+	spin_unlock_irqrestore(&unwind_lock, flags);
+
+	return table;
+}
+
+/* Called from setup_arch to import the kernel unwind info */
+static int unwind_init(void)
+{
+	long start, stop;
+	register unsigned long gp __asm__ ("r27");
+
+	start = (long)&__start___unwind[0];
+	stop = (long)&__stop___unwind[0];
+
+	printk("unwind_init: start = 0x%lx, end = 0x%lx, entries = %lu\n", 
+	    start, stop,
+	    (stop - start) / sizeof(struct unwind_table_entry));
+
+	unwind_table_init(&kernel_unwind_table, "kernel", KERNEL_START,
+			  gp, 
+			  &__start___unwind[0], &__stop___unwind[0]);
+#if 0
+	{
+		int i;
+		for (i = 0; i < 10; i++)
+		{
+			printk("region 0x%x-0x%x\n", 
+				__start___unwind[i].region_start, 
+				__start___unwind[i].region_end);
+		}
+	}
+#endif
+	return 0;
+}
+
+static void unwind_frame_regs(struct unwind_frame_info *info)
+{
+	const struct unwind_table_entry *e;
+	unsigned long npc;
+	unsigned int insn;
+	long frame_size = 0;
+	int looking_for_rp, rpoffset = 0;
+
+	e = find_unwind_entry(info->ip);
+	if (!e) {
+		unsigned long sp;
+		extern char _stext[], _etext[];
+
+		dbg("Cannot find unwind entry for 0x%lx; forced unwinding\n", info->ip);
+
+		/* Since we are doing the unwinding blind, we don't know if
+		   we are adjusting the stack correctly or extracting the rp
+		   correctly. The rp is checked to see if it belongs to the
+		   kernel text section, if not we assume we don't have a 
+		   correct stack frame and we continue to unwind the stack.
+		   This is not quite correct, and will fail for loadable
+		   modules. */
+		sp = info->sp & ~63;
+		do {
+			info->prev_sp = sp - 64;
+
+			/* FIXME: what happens if we unwind too far so that 
+			   sp no longer falls in a mapped kernel page? */
+#ifndef __LP64__
+			info->prev_ip = *(unsigned long *)(info->prev_sp - 20);
+#else
+			info->prev_ip = *(unsigned long *)(info->prev_sp - 16);
+#endif
+
+			sp = info->prev_sp;
+		} while (info->prev_ip < (unsigned long)_stext ||
+			 info->prev_ip > (unsigned long)_etext);
+	} else {
+
+		dbg("e->start = 0x%x, e->end = 0x%x, Save_SP = %d, Save_RP = %d size = %u\n",
+				e->region_start, e->region_end, e->Save_SP, e->Save_RP, e->Total_frame_size);
+
+		looking_for_rp = e->Save_RP;
+
+		for (npc = e->region_start; 
+		     (frame_size < (e->Total_frame_size << 3) || looking_for_rp) && 
+		     npc < info->ip; 
+		     npc += 4) {
+
+			insn = *(unsigned int *)npc;
+
+			if ((insn & 0xffffc000) == 0x37de0000 ||
+			    (insn & 0xffe00000) == 0x6fc00000) {
+				/* ldo X(sp), sp, or stwm X,D(sp) */
+				frame_size += (insn & 0x1 ? -1 << 13 : 0) | 
+					((insn & 0x3fff) >> 1);
+			} else if ((insn & 0xffe00008) == 0x7ec00008) {
+				/* std,ma X,D(sp) */
+				frame_size += (insn & 0x1 ? -1 << 13 : 0) | 
+					(((insn >> 4) & 0x3ff) << 3);
+			} else if (insn == 0x6bc23fd9) { 
+				/* stw rp,-20(sp) */
+				rpoffset = 20;
+				looking_for_rp = 0;
+			} else if (insn == 0x0fc212c1) {
+				/* std rp,-16(sr0,sp) */
+				rpoffset = 16;
+				looking_for_rp = 0;
+			}
+		}
+
+		info->prev_sp = info->sp - frame_size;
+		if (rpoffset)
+			info->prev_ip = *(unsigned long *)(info->prev_sp - rpoffset);
+	}
+}
+
+void unwind_frame_init(struct unwind_frame_info *info, struct task_struct *t, 
+		       struct pt_regs *regs)
+{
+	memset(info, 0, sizeof(struct unwind_frame_info));
+	info->t = t;
+	info->sp = regs->ksp;
+	info->ip = regs->kpc;
+
+	dbg("(%d) Start unwind from sp=%08lx ip=%08lx\n", (int)t->pid, info->sp, info->ip);
+}
+
+void unwind_frame_init_from_blocked_task(struct unwind_frame_info *info, struct task_struct *t)
+{
+	struct pt_regs *regs = &t->thread.regs;
+	unwind_frame_init(info, t, regs);
+}
+
+int unwind_once(struct unwind_frame_info *next_frame)
+{
+	unwind_frame_regs(next_frame);
+
+	if (next_frame->prev_sp == 0 ||
+	    next_frame->prev_ip == 0)
+		return -1;
+
+	next_frame->sp = next_frame->prev_sp;
+	next_frame->ip = next_frame->prev_ip;
+	next_frame->prev_sp = 0;
+	next_frame->prev_ip = 0;
+
+	dbg("(%d) Continue unwind to sp=%08lx ip=%08lx\n", (int)next_frame->t->pid, next_frame->sp, next_frame->ip);
+
+	return 0;
+}
+
+int unwind_to_user(struct unwind_frame_info *info)
+{
+	int ret;
+	
+	do {
+		ret = unwind_once(info);
+	} while (!ret && !(info->ip & 3));
+
+	return ret;
+}
+
+module_init(unwind_init);
diff -Nru a/arch/parisc/kernel/vmlinux.lds.S b/arch/parisc/kernel/vmlinux.lds.S
--- a/arch/parisc/kernel/vmlinux.lds.S	Sun May 16 01:18:34 2004
+++ b/arch/parisc/kernel/vmlinux.lds.S	Sun May 16 01:18:34 2004
@@ -26,6 +26,7 @@
 #include <asm-generic/vmlinux.lds.h>
 /* needed for the processor specific cache alignment size */	
 #include <asm/cache.h>
+#include <asm/page.h>
 	
 /* ld script to make hppa Linux kernel */
 #ifndef CONFIG_PARISC64
@@ -45,13 +46,17 @@
 SECTIONS
 {
 
-  . = 0x10100000;
+  . = KERNEL_BINARY_TEXT_START;
 
   _text = .;			/* Text and read-only data */
   .text ALIGN(16) : {
-	*(.text*)
+	*(.text)
 	SCHED_TEXT
-	*(.PARISC.unwind)
+	*(.text.do_softirq)
+	*(.text.sys_exit)
+	*(.text.do_sigaltstack)
+	*(.text.do_fork)
+	*(.text.*)
 	*(.fixup)
 	*(.lock.text)		/* out-of-line lock text */
 	*(.gnu.warning)
@@ -72,6 +77,10 @@
   __ex_table : { *(__ex_table) }
   __stop___ex_table = .;
 
+  __start___unwind = .;         /* unwind info */
+  .PARISC.unwind : { *(.PARISC.unwind) }
+  __stop___unwind = .;
+ 
   .data : {			/* Data */
 	*(.data)
 	CONSTRUCTORS
@@ -87,6 +96,10 @@
 
   . = ALIGN(L1_CACHE_BYTES);
   .data.cacheline_aligned : { *(.data.cacheline_aligned) }
+
+  /* PA-RISC locks requires 16-byte alignment */
+  . = ALIGN(16);
+  .data.lock_aligned : { *(.data.lock_aligned) }
 
   _edata = .;			/* End of data section */
 
diff -Nru a/arch/parisc/lib/bitops.c b/arch/parisc/lib/bitops.c
--- a/arch/parisc/lib/bitops.c	Sun May 16 01:18:33 2004
+++ b/arch/parisc/lib/bitops.c	Sun May 16 01:18:33 2004
@@ -13,22 +13,20 @@
 #include <asm/atomic.h>
 
 #ifdef CONFIG_SMP
-spinlock_t __atomic_hash[ATOMIC_HASH_SIZE] = {
-	[0 ... (ATOMIC_HASH_SIZE-1)]  = SPIN_LOCK_UNLOCKED
+atomic_lock_t __atomic_hash[ATOMIC_HASH_SIZE] __lock_aligned = {
+	[0 ... (ATOMIC_HASH_SIZE-1)]  = (atomic_lock_t) { { 1, 1, 1, 1 } }
 };
 #endif
 
-spinlock_t __atomic_lock = SPIN_LOCK_UNLOCKED;
-
 #ifdef __LP64__
 unsigned long __xchg64(unsigned long x, unsigned long *ptr)
 {
 	unsigned long temp, flags;
 
-	SPIN_LOCK_IRQSAVE(ATOMIC_HASH(ptr), flags);
+	atomic_spin_lock_irqsave(ATOMIC_HASH(ptr), flags);
 	temp = *ptr;
 	*ptr = x;
-	SPIN_UNLOCK_IRQRESTORE(ATOMIC_HASH(ptr), flags);
+	atomic_spin_unlock_irqrestore(ATOMIC_HASH(ptr), flags);
 	return temp;
 }
 #endif
@@ -38,10 +36,10 @@
 	unsigned long flags;
 	unsigned long temp;
 
-	SPIN_LOCK_IRQSAVE(ATOMIC_HASH(ptr), flags);
+	atomic_spin_lock_irqsave(ATOMIC_HASH(ptr), flags);
 	(long) temp = (long) *ptr;	/* XXX - sign extension wanted? */
 	*ptr = x;
-	SPIN_UNLOCK_IRQRESTORE(ATOMIC_HASH(ptr), flags);
+	atomic_spin_unlock_irqrestore(ATOMIC_HASH(ptr), flags);
 	return temp;
 }
 
@@ -51,10 +49,10 @@
 	unsigned long flags;
 	unsigned long temp;
 
-	SPIN_LOCK_IRQSAVE(ATOMIC_HASH(ptr), flags);
+	atomic_spin_lock_irqsave(ATOMIC_HASH(ptr), flags);
 	(long) temp = (long) *ptr;	/* XXX - sign extension wanted? */
 	*ptr = x;
-	SPIN_UNLOCK_IRQRESTORE(ATOMIC_HASH(ptr), flags);
+	atomic_spin_unlock_irqrestore(ATOMIC_HASH(ptr), flags);
 	return temp;
 }
 
@@ -65,10 +63,10 @@
 	unsigned long flags;
 	unsigned long prev;
 
-	SPIN_LOCK_IRQSAVE(ATOMIC_HASH(ptr), flags);
+	atomic_spin_lock_irqsave(ATOMIC_HASH(ptr), flags);
 	if ((prev = *ptr) == old)
 		*ptr = new;
-	SPIN_UNLOCK_IRQRESTORE(ATOMIC_HASH(ptr), flags);
+	atomic_spin_unlock_irqrestore(ATOMIC_HASH(ptr), flags);
 	return prev;
 }
 #endif
@@ -78,9 +76,9 @@
 	unsigned long flags;
 	unsigned int prev;
 
-	SPIN_LOCK_IRQSAVE(ATOMIC_HASH(ptr), flags);
+	atomic_spin_lock_irqsave(ATOMIC_HASH(ptr), flags);
 	if ((prev = *ptr) == old)
 		*ptr = new;
-	SPIN_UNLOCK_IRQRESTORE(ATOMIC_HASH(ptr), flags);
+	atomic_spin_unlock_irqrestore(ATOMIC_HASH(ptr), flags);
 	return (unsigned long)prev;
 }
diff -Nru a/arch/parisc/mm/init.c b/arch/parisc/mm/init.c
--- a/arch/parisc/mm/init.c	Sun May 16 01:18:35 2004
+++ b/arch/parisc/mm/init.c	Sun May 16 01:18:35 2004
@@ -424,7 +424,12 @@
  * a hole of 4kB between each vmalloced area for the same reason.
  */
 
-#define MAP_START 0x4000 /* Leave room for gateway page expansion */
+ /* Leave room for gateway page expansion */
+#if KERNEL_MAP_START < GATEWAY_PAGE_SIZE
+#error KERNEL_MAP_START is in gateway reserved region
+#endif
+#define MAP_START (KERNEL_MAP_START)
+
 #define VM_MAP_OFFSET  (32*1024)
 #define SET_MAP_OFFSET(x) ((void *)(((unsigned long)(x) + VM_MAP_OFFSET) \
 				     & ~(VM_MAP_OFFSET-1)))
@@ -545,7 +550,7 @@
 		 */
 
 		if (!pmd) {
-			pmd = (pmd_t *) alloc_bootmem_low_pages_node(NODE_DATA(0),PAGE_SIZE);
+			pmd = (pmd_t *) alloc_bootmem_low_pages_node(NODE_DATA(0),PAGE_SIZE << PMD_ORDER);
 			pmd = (pmd_t *) __pa(pmd);
 		}
 
diff -Nru a/arch/ppc/8xx_io/commproc.c b/arch/ppc/8xx_io/commproc.c
--- a/arch/ppc/8xx_io/commproc.c	Sun May 16 01:18:35 2004
+++ b/arch/ppc/8xx_io/commproc.c	Sun May 16 01:18:35 2004
@@ -33,6 +33,7 @@
 #include <asm/pgtable.h>
 #include <asm/8xx_immap.h>
 #include <asm/commproc.h>
+#include <asm/io.h>
 
 extern int get_pteptr(struct mm_struct *mm, unsigned long addr, pte_t **ptep);
 
@@ -55,11 +56,10 @@
 
 #if 1
 void
-m8xx_cpm_reset()
+m8xx_cpm_reset(void)
 {
 	volatile immap_t	 *imp;
 	volatile cpm8xx_t	*commproc;
-	pte_t			*pte;
 
 	imp = (immap_t *)IMAP_ADDR;
 	commproc = (cpm8xx_t *)&imp->im_cpm;
diff -Nru a/arch/ppc/Kconfig b/arch/ppc/Kconfig
--- a/arch/ppc/Kconfig	Sun May 16 01:18:36 2004
+++ b/arch/ppc/Kconfig	Sun May 16 01:18:36 2004
@@ -1238,7 +1238,7 @@
 	bool "Support for early boot texts over serial port"
 	depends on 4xx || GT64260 || LOPEC || PPLUS || PRPMC800 || PPC_GEN550
 
-config OCP
+config PPC_OCP
 	bool
 	depends on IBM_OCP
 	default y
diff -Nru a/arch/ppc/Makefile b/arch/ppc/Makefile
--- a/arch/ppc/Makefile	Sun May 16 01:18:33 2004
+++ b/arch/ppc/Makefile	Sun May 16 01:18:33 2004
@@ -43,7 +43,6 @@
 drivers-$(CONFIG_8xx)		+= arch/ppc/8xx_io/
 drivers-$(CONFIG_4xx)		+= arch/ppc/4xx_io/
 drivers-$(CONFIG_8260)		+= arch/ppc/8260_io/
-drivers-$(CONFIG_OCP)		+= arch/ppc/ocp/
 
 BOOT_TARGETS = zImage zImage.initrd znetboot znetboot.initrd vmlinux.sm
 
diff -Nru a/arch/ppc/boot/simple/embed_config.c b/arch/ppc/boot/simple/embed_config.c
--- a/arch/ppc/boot/simple/embed_config.c	Sun May 16 01:18:33 2004
+++ b/arch/ppc/boot/simple/embed_config.c	Sun May 16 01:18:33 2004
@@ -705,7 +705,7 @@
 #ifdef CONFIG_IBM_OPENBIOS
 /* This could possibly work for all treeboot roms.
 */
-#if defined(CONFIG_ASH) || defined(CONFIG_BEECH)
+#if defined(CONFIG_ASH) || defined(CONFIG_BEECH) || defined(CONFIG_BUBINGA)
 #define BOARD_INFO_VECTOR       0xFFF80B50 /* openbios 1.19 moved this vector down  - armin */
 #else
 #define BOARD_INFO_VECTOR	0xFFFE0B50
@@ -742,7 +742,7 @@
 	 */
 	mtdcr(DCRN_MALCR(DCRN_MAL_BASE), MALCR_MMSR);     /* 1st reset MAL */
 	while (mfdcr(DCRN_MALCR(DCRN_MAL_BASE)) & MALCR_MMSR) {}; /* wait for the reset */	
-	out_be32(EMAC0_BASE,0x20000000);        /* then reset EMAC */
+	out_be32((volatile u32*)EMAC0_BASE,0x20000000);        /* then reset EMAC */
 #endif
 
 	bd = &bdinfo;
diff -Nru a/arch/ppc/configs/ash_defconfig b/arch/ppc/configs/ash_defconfig
--- a/arch/ppc/configs/ash_defconfig	Sun May 16 01:18:33 2004
+++ b/arch/ppc/configs/ash_defconfig	Sun May 16 01:18:33 2004
@@ -4,11 +4,17 @@
 CONFIG_MMU=y
 CONFIG_RWSEM_XCHGADD_ALGORITHM=y
 CONFIG_HAVE_DEC_LOCK=y
+CONFIG_PPC=y
+CONFIG_PPC32=y
+CONFIG_GENERIC_NVRAM=y
 
 #
 # Code maturity level options
 #
 CONFIG_EXPERIMENTAL=y
+CONFIG_CLEAN_COMPILE=y
+CONFIG_STANDALONE=y
+CONFIG_BROKEN_ON_SMP=y
 
 #
 # General setup
@@ -18,9 +24,16 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_HOTPLUG is not set
+# CONFIG_IKCONFIG is not set
 CONFIG_EMBEDDED=y
+# CONFIG_KALLSYMS is not set
 CONFIG_FUTEX=y
 # CONFIG_EPOLL is not set
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
 # Loadable module support
@@ -33,66 +46,61 @@
 CONFIG_KMOD=y
 
 #
-# Platform support
+# Processor
 #
-CONFIG_PPC=y
-CONFIG_PPC32=y
 # CONFIG_6xx is not set
 CONFIG_40x=y
+# CONFIG_44x is not set
 # CONFIG_POWER3 is not set
+# CONFIG_POWER4 is not set
 # CONFIG_8xx is not set
+# CONFIG_MATH_EMULATION is not set
+# CONFIG_CPU_FREQ is not set
 CONFIG_4xx=y
 
 #
 # IBM 4xx options
 #
 CONFIG_ASH=y
-# CONFIG_BEECH is not set
-# CONFIG_CEDAR is not set
 # CONFIG_CPCI405 is not set
 # CONFIG_EP405 is not set
+# CONFIG_EVB405EP is not set
 # CONFIG_OAK is not set
-# CONFIG_REDWOOD_4 is not set
 # CONFIG_REDWOOD_5 is not set
 # CONFIG_REDWOOD_6 is not set
 # CONFIG_SYCAMORE is not set
-# CONFIG_TIVO is not set
 # CONFIG_WALNUT is not set
 CONFIG_NP405H=y
 CONFIG_IBM405_ERR77=y
 CONFIG_IBM405_ERR51=y
 CONFIG_IBM_OCP=y
+CONFIG_PPC_OCP=y
 CONFIG_IBM_OPENBIOS=y
-# CONFIG_405_DMA is not set
 # CONFIG_PM is not set
 CONFIG_UART0_TTYS0=y
 # CONFIG_UART0_TTYS1 is not set
 CONFIG_NOT_COHERENT_CACHE=y
-# CONFIG_SMP is not set
-# CONFIG_PREEMPT is not set
-# CONFIG_MATH_EMULATION is not set
-# CONFIG_CPU_FREQ is not set
 
 #
-# General setup
+# Platform options
 #
-# CONFIG_HIGHMEM is not set
-CONFIG_PCI=y
-CONFIG_PCI_DOMAINS=y
 # CONFIG_PC_KEYBOARD is not set
-CONFIG_KCORE_ELF=y
-CONFIG_BINFMT_ELF=y
+# CONFIG_SMP is not set
+# CONFIG_PREEMPT is not set
+# CONFIG_HIGHMEM is not set
 CONFIG_KERNEL_ELF=y
+CONFIG_BINFMT_ELF=y
 # CONFIG_BINFMT_MISC is not set
-CONFIG_PCI_LEGACY_PROC=y
-# CONFIG_PCI_NAMES is not set
-# CONFIG_HOTPLUG is not set
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="ip=on"
 
 #
-# Parallel port support
+# Bus options
 #
-# CONFIG_PARPORT is not set
-# CONFIG_CMDLINE_BOOL is not set
+CONFIG_PCI=y
+CONFIG_PCI_DOMAINS=y
+CONFIG_PCI_LEGACY_PROC=y
+# CONFIG_PCI_NAMES is not set
 
 #
 # Advanced setup
@@ -109,14 +117,26 @@
 CONFIG_BOOT_LOAD=0x00400000
 
 #
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+
+#
 # Memory Technology Devices (MTD)
 #
 # CONFIG_MTD is not set
 
 #
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
 # Plug and Play support
 #
-# CONFIG_PNP is not set
 
 #
 # Block devices
@@ -127,32 +147,36 @@
 # CONFIG_BLK_DEV_DAC960 is not set
 # CONFIG_BLK_DEV_UMEM is not set
 CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
 # CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_CARMEL is not set
 CONFIG_BLK_DEV_RAM=y
 CONFIG_BLK_DEV_RAM_SIZE=4096
 CONFIG_BLK_DEV_INITRD=y
+# CONFIG_LBD is not set
 
 #
-# Multi-device support (RAID and LVM)
+# ATA/ATAPI/MFM/RLL support
 #
-# CONFIG_MD is not set
+# CONFIG_IDE is not set
 
 #
-# ATA/IDE/MFM/RLL support
+# SCSI device support
 #
-# CONFIG_IDE is not set
+# CONFIG_SCSI is not set
 
 #
-# SCSI support
+# Multi-device support (RAID and LVM)
 #
-# CONFIG_SCSI is not set
+# CONFIG_MD is not set
 
 #
 # Fusion MPT device support
 #
+# CONFIG_FUSION is not set
 
 #
-# IEEE 1394 (FireWire) support (EXPERIMENTAL)
+# IEEE 1394 (FireWire) support
 #
 # CONFIG_IEEE1394 is not set
 
@@ -162,6 +186,10 @@
 # CONFIG_I2O is not set
 
 #
+# Macintosh device drivers
+#
+
+#
 # Networking support
 #
 CONFIG_NET=y
@@ -171,38 +199,37 @@
 #
 # CONFIG_PACKET is not set
 # CONFIG_NETLINK_DEV is not set
-# CONFIG_NETFILTER is not set
 CONFIG_UNIX=y
 # CONFIG_NET_KEY is not set
 CONFIG_INET=y
 CONFIG_IP_MULTICAST=y
 # CONFIG_IP_ADVANCED_ROUTER is not set
 CONFIG_IP_PNP=y
-CONFIG_IP_PNP_DHCP=y
+# CONFIG_IP_PNP_DHCP is not set
 CONFIG_IP_PNP_BOOTP=y
-CONFIG_IP_PNP_RARP=y
+# CONFIG_IP_PNP_RARP is not set
 # CONFIG_NET_IPIP is not set
 # CONFIG_NET_IPGRE is not set
 # CONFIG_IP_MROUTE is not set
 # CONFIG_ARPD is not set
-# CONFIG_INET_ECN is not set
 CONFIG_SYN_COOKIES=y
 # CONFIG_INET_AH is not set
 # CONFIG_INET_ESP is not set
 # CONFIG_INET_IPCOMP is not set
 # CONFIG_IPV6 is not set
-# CONFIG_XFRM_USER is not set
+# CONFIG_DECNET is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_NETFILTER is not set
 
 #
 # SCTP Configuration (EXPERIMENTAL)
 #
-CONFIG_IPV6_SCTP__=y
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
 # CONFIG_VLAN_8021Q is not set
-# CONFIG_LLC is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
 # CONFIG_X25 is not set
 # CONFIG_LAPB is not set
 # CONFIG_NET_DIVERT is not set
@@ -230,7 +257,6 @@
 # CONFIG_BONDING is not set
 # CONFIG_EQUALIZER is not set
 # CONFIG_TUN is not set
-# CONFIG_ETHERTAP is not set
 
 #
 # Ethernet (10 or 100Mbit)
@@ -247,6 +273,7 @@
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
 # CONFIG_R8169 is not set
+# CONFIG_SIS190 is not set
 # CONFIG_SK98LIN is not set
 # CONFIG_TIGON3 is not set
 
@@ -254,6 +281,12 @@
 # Ethernet (10000 Mbit)
 #
 # CONFIG_IXGB is not set
+CONFIG_IBM_EMAC=y
+# CONFIG_IBM_EMAC_ERRMSG is not set
+CONFIG_IBM_EMAC_RXB=64
+CONFIG_IBM_EMAC_TXB=8
+CONFIG_IBM_EMAC_FGAP=8
+CONFIG_IBM_EMAC_SKBRES=0
 # CONFIG_FDDI is not set
 # CONFIG_HIPPI is not set
 # CONFIG_PPP is not set
@@ -265,10 +298,12 @@
 # CONFIG_NET_RADIO is not set
 
 #
-# Token Ring devices (depends on LLC=y)
+# Token Ring devices
 #
+# CONFIG_TR is not set
 # CONFIG_RCPCI is not set
 # CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # Wan interfaces
@@ -286,47 +321,71 @@
 # CONFIG_IRDA is not set
 
 #
-# ISDN subsystem
+# Bluetooth support
 #
-# CONFIG_ISDN_BOOL is not set
+# CONFIG_BT is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
 
 #
-# Graphics support
+# ISDN subsystem
 #
-# CONFIG_FB is not set
+# CONFIG_ISDN is not set
 
 #
-# Old CD-ROM drivers (not SCSI, not IDE)
+# Telephony Support
 #
-# CONFIG_CD_NO_IDESCSI is not set
+# CONFIG_PHONE is not set
 
 #
 # Input device support
 #
-# CONFIG_INPUT is not set
+CONFIG_INPUT=y
 
 #
 # Userland interfaces
 #
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_EVBUG is not set
 
 #
 # Input I/O drivers
 #
 # CONFIG_GAMEPORT is not set
 CONFIG_SOUND_GAMEPORT=y
-# CONFIG_SERIO is not set
+CONFIG_SERIO=y
+CONFIG_SERIO_I8042=y
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_CT82C710 is not set
+# CONFIG_SERIO_PCIPS2 is not set
 
 #
 # Input Device Drivers
 #
-
-#
-# Macintosh device drivers
-#
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=y
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
 
 #
 # Character devices
 #
+# CONFIG_VT is not set
 # CONFIG_SERIAL_NONSTANDARD is not set
 
 #
@@ -334,6 +393,7 @@
 #
 CONFIG_SERIAL_8250=y
 CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_NR_UARTS=4
 # CONFIG_SERIAL_8250_EXTENDED is not set
 
 #
@@ -342,100 +402,145 @@
 CONFIG_SERIAL_CORE=y
 CONFIG_SERIAL_CORE_CONSOLE=y
 CONFIG_UNIX98_PTYS=y
-CONFIG_UNIX98_PTY_COUNT=256
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+# CONFIG_QIC02_TAPE is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+
+#
+# PCI-based Watchdog Cards
+#
+# CONFIG_PCIPCWATCHDOG is not set
+# CONFIG_WDTPCI is not set
+# CONFIG_NVRAM is not set
+CONFIG_GEN_RTC=y
+# CONFIG_GEN_RTC_X is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_FTAPE is not set
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
+# CONFIG_RAW_DRIVER is not set
 
 #
 # I2C support
 #
 CONFIG_I2C=y
+# CONFIG_I2C_CHARDEV is not set
+
+#
+# I2C Algorithms
+#
 # CONFIG_I2C_ALGOBIT is not set
 # CONFIG_I2C_ALGOPCF is not set
-CONFIG_I2C_IBM_OCP_ALGO=y
-CONFIG_I2C_IBM_OCP_ADAP=y
-# CONFIG_I2C_CHARDEV is not set
 
 #
-# I2C Hardware Sensors Mainboard support
+# I2C Hardware Bus support
 #
+# CONFIG_I2C_ALI1535 is not set
 # CONFIG_I2C_ALI15X3 is not set
 # CONFIG_I2C_AMD756 is not set
 # CONFIG_I2C_AMD8111 is not set
 # CONFIG_I2C_I801 is not set
+# CONFIG_I2C_I810 is not set
+# CONFIG_I2C_IBM_IIC is not set
+# CONFIG_I2C_ISA is not set
+# CONFIG_I2C_NFORCE2 is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
 # CONFIG_I2C_PIIX4 is not set
+# CONFIG_I2C_PROSAVAGE is not set
+# CONFIG_I2C_SAVAGE4 is not set
+# CONFIG_SCx200_ACB is not set
+# CONFIG_I2C_SIS5595 is not set
+# CONFIG_I2C_SIS630 is not set
 # CONFIG_I2C_SIS96X is not set
+# CONFIG_I2C_VIA is not set
 # CONFIG_I2C_VIAPRO is not set
+# CONFIG_I2C_VOODOO3 is not set
 
 #
-# I2C Hardware Sensors Chip support
+# Hardware Sensors Chip support
 #
+# CONFIG_I2C_SENSOR is not set
 # CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ASB100 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_FSCHER is not set
+# CONFIG_SENSORS_GL518SM is not set
 # CONFIG_SENSORS_IT87 is not set
 # CONFIG_SENSORS_LM75 is not set
+# CONFIG_SENSORS_LM78 is not set
+# CONFIG_SENSORS_LM80 is not set
+# CONFIG_SENSORS_LM83 is not set
 # CONFIG_SENSORS_LM85 is not set
+# CONFIG_SENSORS_LM90 is not set
 # CONFIG_SENSORS_VIA686A is not set
 # CONFIG_SENSORS_W83781D is not set
-# CONFIG_I2C_SENSOR is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83627HF is not set
 
 #
-# Mice
+# Other I2C Chip support
 #
-# CONFIG_BUSMOUSE is not set
-# CONFIG_QIC02_TAPE is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
 
 #
-# IPMI
+# Misc devices
 #
-# CONFIG_IPMI_HANDLER is not set
 
 #
-# Watchdog Cards
+# Multimedia devices
 #
-CONFIG_WATCHDOG=y
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-# CONFIG_SOFT_WATCHDOG is not set
-# CONFIG_WDT is not set
-# CONFIG_WDTPCI is not set
-# CONFIG_PCWATCHDOG is not set
-# CONFIG_ACQUIRE_WDT is not set
-# CONFIG_ADVANTECH_WDT is not set
-# CONFIG_EUROTECH_WDT is not set
-# CONFIG_IB700_WDT is not set
-# CONFIG_MIXCOMWD is not set
-# CONFIG_SCx200_WDT is not set
-# CONFIG_60XX_WDT is not set
-# CONFIG_W83877F_WDT is not set
-# CONFIG_MACHZ_WDT is not set
-# CONFIG_SC520_WDT is not set
-# CONFIG_AMD7XX_TCO is not set
-# CONFIG_ALIM7101_WDT is not set
-# CONFIG_SC1200_WDT is not set
-# CONFIG_WAFER_WDT is not set
-# CONFIG_CPU5_WDT is not set
-# CONFIG_NVRAM is not set
-CONFIG_GEN_RTC=y
-# CONFIG_GEN_RTC_X is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
+# CONFIG_VIDEO_DEV is not set
 
 #
-# Ftape, the floppy tape device driver
+# Digital Video Broadcasting Devices
 #
-# CONFIG_FTAPE is not set
-# CONFIG_AGP is not set
-# CONFIG_DRM is not set
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_HANGCHECK_TIMER is not set
+# CONFIG_DVB is not set
 
 #
-# Multimedia devices
+# Graphics support
 #
-# CONFIG_VIDEO_DEV is not set
+# CONFIG_FB is not set
 
 #
-# Digital Video Broadcasting Devices
+# Sound
 #
-# CONFIG_DVB is not set
+# CONFIG_SOUND is not set
+
+#
+# USB support
+#
+# CONFIG_USB is not set
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
 
 #
 # File systems
@@ -469,10 +574,11 @@
 # Pseudo filesystems
 #
 CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
 # CONFIG_DEVFS_FS is not set
-CONFIG_DEVPTS_FS=y
 # CONFIG_DEVPTS_FS_XATTR is not set
 CONFIG_TMPFS=y
+# CONFIG_HUGETLB_PAGE is not set
 CONFIG_RAMFS=y
 
 #
@@ -481,6 +587,7 @@
 # CONFIG_ADFS_FS is not set
 # CONFIG_AFFS_FS is not set
 # CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
 # CONFIG_BEFS_FS is not set
 # CONFIG_BFS_FS is not set
 # CONFIG_EFS_FS is not set
@@ -497,12 +604,13 @@
 CONFIG_NFS_FS=y
 # CONFIG_NFS_V3 is not set
 # CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
 # CONFIG_NFSD is not set
 CONFIG_ROOT_NFS=y
 CONFIG_LOCKD=y
 # CONFIG_EXPORTFS is not set
 CONFIG_SUNRPC=y
-# CONFIG_SUNRPC_GSS is not set
+# CONFIG_RPCSEC_GSS_KRB5 is not set
 # CONFIG_SMB_FS is not set
 # CONFIG_CIFS is not set
 # CONFIG_NCP_FS is not set
@@ -528,26 +636,15 @@
 # CONFIG_EFI_PARTITION is not set
 
 #
-# Sound
+# Native Language Support
 #
-# CONFIG_SOUND is not set
+# CONFIG_NLS is not set
 
 #
 # IBM 40x options
 #
 
 #
-# USB support
-#
-# CONFIG_USB is not set
-# CONFIG_USB_GADGET is not set
-
-#
-# Bluetooth support
-#
-# CONFIG_BT is not set
-
-#
 # Library routines
 #
 CONFIG_CRC32=y
@@ -556,7 +653,6 @@
 # Kernel hacking
 #
 # CONFIG_DEBUG_KERNEL is not set
-# CONFIG_KALLSYMS is not set
 # CONFIG_SERIAL_TEXT_DEBUG is not set
 CONFIG_OCP=y
 
diff -Nru a/arch/ppc/configs/bubinga_defconfig b/arch/ppc/configs/bubinga_defconfig
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/arch/ppc/configs/bubinga_defconfig	Sun May 16 01:18:37 2004
@@ -0,0 +1,593 @@
+#
+# Automatically generated make config: don't edit
+#
+CONFIG_MMU=y
+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
+CONFIG_HAVE_DEC_LOCK=y
+CONFIG_PPC=y
+CONFIG_PPC32=y
+CONFIG_GENERIC_NVRAM=y
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_CLEAN_COMPILE=y
+# CONFIG_STANDALONE is not set
+CONFIG_BROKEN_ON_SMP=y
+
+#
+# General setup
+#
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SYSCTL=y
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_HOTPLUG is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_EMBEDDED=y
+# CONFIG_KALLSYMS is not set
+CONFIG_FUTEX=y
+# CONFIG_EPOLL is not set
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+CONFIG_OBSOLETE_MODPARM=y
+# CONFIG_MODVERSIONS is not set
+CONFIG_KMOD=y
+
+#
+# Processor
+#
+# CONFIG_6xx is not set
+CONFIG_40x=y
+# CONFIG_44x is not set
+# CONFIG_POWER3 is not set
+# CONFIG_POWER4 is not set
+# CONFIG_8xx is not set
+# CONFIG_MATH_EMULATION is not set
+# CONFIG_CPU_FREQ is not set
+CONFIG_4xx=y
+
+#
+# IBM 4xx options
+#
+# CONFIG_ASH is not set
+CONFIG_BUBINGA=y
+# CONFIG_CPCI405 is not set
+# CONFIG_EP405 is not set
+# CONFIG_OAK is not set
+# CONFIG_REDWOOD_5 is not set
+# CONFIG_REDWOOD_6 is not set
+# CONFIG_SYCAMORE is not set
+# CONFIG_WALNUT is not set
+CONFIG_IBM405_ERR77=y
+CONFIG_IBM405_ERR51=y
+CONFIG_IBM_OCP=y
+CONFIG_BIOS_FIXUP=y
+CONFIG_405EP=y
+CONFIG_IBM_OPENBIOS=y
+# CONFIG_PM is not set
+CONFIG_UART0_TTYS0=y
+# CONFIG_UART0_TTYS1 is not set
+CONFIG_NOT_COHERENT_CACHE=y
+
+#
+# Platform options
+#
+# CONFIG_PC_KEYBOARD is not set
+# CONFIG_SMP is not set
+# CONFIG_PREEMPT is not set
+# CONFIG_HIGHMEM is not set
+CONFIG_KERNEL_ELF=y
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_MISC is not set
+# CONFIG_CMDLINE_BOOL is not set
+
+#
+# Bus options
+#
+CONFIG_PCI=y
+CONFIG_PCI_DOMAINS=y
+CONFIG_PCI_LEGACY_PROC=y
+# CONFIG_PCI_NAMES is not set
+
+#
+# Advanced setup
+#
+# CONFIG_ADVANCED_OPTIONS is not set
+
+#
+# Default settings for advanced configuration options are used
+#
+CONFIG_HIGHMEM_START=0xfe000000
+CONFIG_LOWMEM_SIZE=0x30000000
+CONFIG_KERNEL_START=0xc0000000
+CONFIG_TASK_SIZE=0x80000000
+CONFIG_BOOT_LOAD=0x00400000
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+
+#
+# Memory Technology Devices (MTD)
+#
+# CONFIG_MTD is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_CARMEL is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_LBD is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_SCSI is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_IEEE1394 is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+
+#
+# Macintosh device drivers
+#
+
+#
+# Networking support
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_PACKET is not set
+# CONFIG_NETLINK_DEV is not set
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_IPV6 is not set
+# CONFIG_DECNET is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_NETFILTER is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+# CONFIG_ATM is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_FASTROUTE is not set
+# CONFIG_NET_HW_FLOWCONTROL is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+CONFIG_NETDEVICES=y
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_OAKNET is not set
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_NET_VENDOR_3COM is not set
+
+#
+# Tulip family network device support
+#
+# CONFIG_NET_TULIP is not set
+# CONFIG_HP100 is not set
+# CONFIG_NET_PCI is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_E1000 is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_R8169 is not set
+# CONFIG_SIS190 is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_TIGON3 is not set
+
+#
+# Ethernet (10000 Mbit)
+#
+# CONFIG_IXGB is not set
+CONFIG_IBM_EMAC=y
+# CONFIG_IBM_EMAC_ERRMSG is not set
+CONFIG_IBM_EMAC_RXB=64
+CONFIG_IBM_EMAC_TXB=8
+CONFIG_IBM_EMAC_FGAP=8
+CONFIG_IBM_EMAC_SKBRES=0
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+# CONFIG_RCPCI is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+
+#
+# Amateur Radio support
+#
+# CONFIG_HAMRADIO is not set
+
+#
+# IrDA (infrared) support
+#
+# CONFIG_IRDA is not set
+
+#
+# Bluetooth support
+#
+# CONFIG_BT is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input I/O drivers
+#
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+CONFIG_SERIO=y
+# CONFIG_SERIO_I8042 is not set
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_CT82C710 is not set
+# CONFIG_SERIO_PCIPS2 is not set
+
+#
+# Input Device Drivers
+#
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Character devices
+#
+# CONFIG_VT is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_NR_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+# CONFIG_QIC02_TAPE is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_NVRAM is not set
+# CONFIG_GEN_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_FTAPE is not set
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+# CONFIG_FB is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# USB support
+#
+# CONFIG_USB is not set
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_JBD is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_QUOTA is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+# CONFIG_FAT_FS is not set
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+# CONFIG_DEVFS_FS is not set
+# CONFIG_DEVPTS_FS_XATTR is not set
+CONFIG_TMPFS=y
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+# CONFIG_NFS_V3 is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+# CONFIG_EXPORTFS is not set
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_INTERMEZZO_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+# CONFIG_MSDOS_PARTITION is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_NEC98_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+# CONFIG_NLS is not set
+
+#
+# IBM 40x options
+#
+
+#
+# Library routines
+#
+CONFIG_CRC32=y
+
+#
+# Kernel hacking
+#
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_SERIAL_TEXT_DEBUG is not set
+CONFIG_PPC_OCP=y
+
+#
+# Security options
+#
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
diff -Nru a/arch/ppc/configs/cpci405_defconfig b/arch/ppc/configs/cpci405_defconfig
--- a/arch/ppc/configs/cpci405_defconfig	Sun May 16 01:18:36 2004
+++ b/arch/ppc/configs/cpci405_defconfig	Sun May 16 01:18:36 2004
@@ -6,6 +6,7 @@
 CONFIG_HAVE_DEC_LOCK=y
 CONFIG_PPC=y
 CONFIG_PPC32=y
+CONFIG_GENERIC_NVRAM=y
 
 #
 # Code maturity level options
@@ -23,6 +24,7 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_HOTPLUG is not set
 # CONFIG_IKCONFIG is not set
 CONFIG_EMBEDDED=y
 # CONFIG_KALLSYMS is not set
@@ -31,6 +33,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
 # Loadable module support
@@ -59,22 +62,19 @@
 # IBM 4xx options
 #
 # CONFIG_ASH is not set
-# CONFIG_BEECH is not set
-# CONFIG_CEDAR is not set
 CONFIG_CPCI405=y
 # CONFIG_EP405 is not set
+# CONFIG_EVB405EP is not set
 # CONFIG_OAK is not set
-# CONFIG_REDWOOD_4 is not set
 # CONFIG_REDWOOD_5 is not set
 # CONFIG_REDWOOD_6 is not set
 # CONFIG_SYCAMORE is not set
-# CONFIG_TIVO is not set
 # CONFIG_WALNUT is not set
 CONFIG_IBM405_ERR77=y
 CONFIG_IBM405_ERR51=y
 CONFIG_IBM_OCP=y
+CONFIG_PPC_OCP=y
 CONFIG_405GP=y
-# CONFIG_405_DMA is not set
 # CONFIG_PM is not set
 CONFIG_UART0_TTYS0=y
 # CONFIG_UART0_TTYS1 is not set
@@ -90,7 +90,8 @@
 CONFIG_KERNEL_ELF=y
 CONFIG_BINFMT_ELF=y
 # CONFIG_BINFMT_MISC is not set
-# CONFIG_CMDLINE_BOOL is not set
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="ip=on"
 
 #
 # Bus options
@@ -99,12 +100,6 @@
 CONFIG_PCI_DOMAINS=y
 CONFIG_PCI_LEGACY_PROC=y
 # CONFIG_PCI_NAMES is not set
-# CONFIG_HOTPLUG is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
 
 #
 # Advanced setup
@@ -121,6 +116,10 @@
 CONFIG_BOOT_LOAD=0x00400000
 
 #
+# Device Drivers
+#
+
+#
 # Generic Driver Options
 #
 
@@ -130,30 +129,31 @@
 # CONFIG_MTD is not set
 
 #
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
 # Plug and Play support
 #
-# CONFIG_PNP is not set
 
 #
 # Block devices
 #
+# CONFIG_BLK_DEV_FD is not set
 # CONFIG_BLK_CPQ_DA is not set
 # CONFIG_BLK_CPQ_CISS_DA is not set
 # CONFIG_BLK_DEV_DAC960 is not set
 # CONFIG_BLK_DEV_UMEM is not set
 # CONFIG_BLK_DEV_LOOP is not set
 # CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_CARMEL is not set
 CONFIG_BLK_DEV_RAM=y
 CONFIG_BLK_DEV_RAM_SIZE=4096
 CONFIG_BLK_DEV_INITRD=y
 # CONFIG_LBD is not set
 
 #
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
 # ATA/ATAPI/MFM/RLL support
 #
 CONFIG_IDE=y
@@ -174,6 +174,7 @@
 #
 # IDE chipset support/bugfixes
 #
+CONFIG_IDE_GENERIC=y
 # CONFIG_BLK_DEV_IDEPCI is not set
 # CONFIG_BLK_DEV_IDEDMA is not set
 # CONFIG_IDEDMA_AUTO is not set
@@ -185,11 +186,17 @@
 # CONFIG_SCSI is not set
 
 #
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
 # Fusion MPT device support
 #
+# CONFIG_FUSION is not set
 
 #
-# IEEE 1394 (FireWire) support (EXPERIMENTAL)
+# IEEE 1394 (FireWire) support
 #
 # CONFIG_IEEE1394 is not set
 
@@ -199,6 +206,10 @@
 # CONFIG_I2O is not set
 
 #
+# Macintosh device drivers
+#
+
+#
 # Networking support
 #
 CONFIG_NET=y
@@ -214,14 +225,13 @@
 CONFIG_IP_MULTICAST=y
 # CONFIG_IP_ADVANCED_ROUTER is not set
 CONFIG_IP_PNP=y
-CONFIG_IP_PNP_DHCP=y
+# CONFIG_IP_PNP_DHCP is not set
 CONFIG_IP_PNP_BOOTP=y
-CONFIG_IP_PNP_RARP=y
+# CONFIG_IP_PNP_RARP is not set
 # CONFIG_NET_IPIP is not set
 # CONFIG_NET_IPGRE is not set
 # CONFIG_IP_MROUTE is not set
 # CONFIG_ARPD is not set
-# CONFIG_INET_ECN is not set
 CONFIG_SYN_COOKIES=y
 # CONFIG_INET_AH is not set
 # CONFIG_INET_ESP is not set
@@ -234,7 +244,6 @@
 #
 # SCTP Configuration (EXPERIMENTAL)
 #
-CONFIG_IPV6_SCTP__=y
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
 # CONFIG_VLAN_8021Q is not set
@@ -292,6 +301,12 @@
 # Ethernet (10000 Mbit)
 #
 # CONFIG_IXGB is not set
+CONFIG_IBM_EMAC=y
+# CONFIG_IBM_EMAC_ERRMSG is not set
+CONFIG_IBM_EMAC_RXB=64
+CONFIG_IBM_EMAC_TXB=8
+CONFIG_IBM_EMAC_FGAP=8
+CONFIG_IBM_EMAC_SKBRES=0
 # CONFIG_FDDI is not set
 # CONFIG_HIPPI is not set
 # CONFIG_PPP is not set
@@ -308,6 +323,7 @@
 # CONFIG_TR is not set
 # CONFIG_RCPCI is not set
 # CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # Wan interfaces
@@ -328,16 +344,18 @@
 # Bluetooth support
 #
 # CONFIG_BT is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
 
 #
 # ISDN subsystem
 #
-# CONFIG_ISDN_BOOL is not set
+# CONFIG_ISDN is not set
 
 #
-# Graphics support
+# Telephony Support
 #
-# CONFIG_FB is not set
+# CONFIG_PHONE is not set
 
 #
 # Input device support
@@ -374,10 +392,6 @@
 # CONFIG_INPUT_MISC is not set
 
 #
-# Macintosh device drivers
-#
-
-#
 # Character devices
 #
 # CONFIG_VT is not set
@@ -397,52 +411,8 @@
 CONFIG_SERIAL_CORE=y
 CONFIG_SERIAL_CORE_CONSOLE=y
 # CONFIG_UNIX98_PTYS is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-CONFIG_I2C_CHARDEV=y
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-
-#
-# I2C Hardware Bus support
-#
-# CONFIG_I2C_ALI1535 is not set
-# CONFIG_I2C_ALI15X3 is not set
-# CONFIG_I2C_AMD756 is not set
-# CONFIG_I2C_AMD8111 is not set
-# CONFIG_I2C_I801 is not set
-CONFIG_I2C_IBM_IIC=y
-# CONFIG_I2C_NFORCE2 is not set
-# CONFIG_I2C_PIIX4 is not set
-# CONFIG_I2C_SIS5595 is not set
-# CONFIG_I2C_SIS630 is not set
-# CONFIG_I2C_SIS96X is not set
-# CONFIG_I2C_VIAPRO is not set
-
-#
-# I2C Hardware Sensors Chip support
-#
-# CONFIG_I2C_SENSOR is not set
-# CONFIG_SENSORS_ADM1021 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_IT87 is not set
-# CONFIG_SENSORS_LM75 is not set
-# CONFIG_SENSORS_LM78 is not set
-# CONFIG_SENSORS_LM85 is not set
-# CONFIG_SENSORS_VIA686A is not set
-# CONFIG_SENSORS_W83781D is not set
-
-#
-# Mice
-#
-# CONFIG_BUSMOUSE is not set
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
 # CONFIG_QIC02_TAPE is not set
 
 #
@@ -470,6 +440,15 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# Misc devices
+#
+
+#
 # Multimedia devices
 #
 # CONFIG_VIDEO_DEV is not set
@@ -480,6 +459,26 @@
 # CONFIG_DVB is not set
 
 #
+# Graphics support
+#
+# CONFIG_FB is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# USB support
+#
+# CONFIG_USB is not set
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
 # File systems
 #
 CONFIG_EXT2_FS=y
@@ -525,6 +524,7 @@
 # CONFIG_ADFS_FS is not set
 # CONFIG_AFFS_FS is not set
 # CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
 # CONFIG_BEFS_FS is not set
 # CONFIG_BFS_FS is not set
 # CONFIG_EFS_FS is not set
@@ -541,13 +541,14 @@
 CONFIG_NFS_FS=y
 CONFIG_NFS_V3=y
 # CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
 # CONFIG_NFSD is not set
 CONFIG_ROOT_NFS=y
 CONFIG_LOCKD=y
 CONFIG_LOCKD_V4=y
 # CONFIG_EXPORTFS is not set
 CONFIG_SUNRPC=y
-# CONFIG_SUNRPC_GSS is not set
+# CONFIG_RPCSEC_GSS_KRB5 is not set
 # CONFIG_SMB_FS is not set
 # CONFIG_CIFS is not set
 # CONFIG_NCP_FS is not set
@@ -560,11 +561,11 @@
 #
 # CONFIG_PARTITION_ADVANCED is not set
 CONFIG_MSDOS_PARTITION=y
-CONFIG_NLS=y
 
 #
 # Native Language Support
 #
+CONFIG_NLS=y
 CONFIG_NLS_DEFAULT="iso8859-1"
 # CONFIG_NLS_CODEPAGE_437 is not set
 # CONFIG_NLS_CODEPAGE_737 is not set
@@ -605,19 +606,8 @@
 # CONFIG_NLS_UTF8 is not set
 
 #
-# Sound
-#
-# CONFIG_SOUND is not set
-
-#
 # IBM 40x options
 #
-
-#
-# USB support
-#
-# CONFIG_USB is not set
-# CONFIG_USB_GADGET is not set
 
 #
 # Library routines
diff -Nru a/arch/ppc/configs/ebony_defconfig b/arch/ppc/configs/ebony_defconfig
--- a/arch/ppc/configs/ebony_defconfig	Sun May 16 01:18:34 2004
+++ b/arch/ppc/configs/ebony_defconfig	Sun May 16 01:18:34 2004
@@ -285,6 +285,12 @@
 # Ethernet (10000 Mbit)
 #
 # CONFIG_IXGB is not set
+CONFIG_IBM_EMAC=y
+# CONFIG_IBM_EMAC_ERRMSG is not set
+CONFIG_IBM_EMAC_RXB=64
+CONFIG_IBM_EMAC_TXB=8
+CONFIG_IBM_EMAC_FGAP=8
+CONFIG_IBM_EMAC_SKBRES=0
 # CONFIG_FDDI is not set
 # CONFIG_HIPPI is not set
 # CONFIG_PPP is not set
diff -Nru a/arch/ppc/configs/ep405_defconfig b/arch/ppc/configs/ep405_defconfig
--- a/arch/ppc/configs/ep405_defconfig	Sun May 16 01:18:36 2004
+++ b/arch/ppc/configs/ep405_defconfig	Sun May 16 01:18:36 2004
@@ -6,6 +6,7 @@
 CONFIG_HAVE_DEC_LOCK=y
 CONFIG_PPC=y
 CONFIG_PPC32=y
+CONFIG_GENERIC_NVRAM=y
 
 #
 # Code maturity level options
@@ -23,14 +24,16 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_HOTPLUG is not set
 # CONFIG_IKCONFIG is not set
-# CONFIG_EMBEDDED is not set
+CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
 # Loadable module support
@@ -59,25 +62,22 @@
 # IBM 4xx options
 #
 # CONFIG_ASH is not set
-# CONFIG_BEECH is not set
-# CONFIG_CEDAR is not set
 # CONFIG_CPCI405 is not set
 CONFIG_EP405=y
+# CONFIG_EVB405EP is not set
 # CONFIG_OAK is not set
-# CONFIG_REDWOOD_4 is not set
 # CONFIG_REDWOOD_5 is not set
 # CONFIG_REDWOOD_6 is not set
 # CONFIG_SYCAMORE is not set
-# CONFIG_TIVO is not set
 # CONFIG_WALNUT is not set
 # CONFIG_EP405PC is not set
 CONFIG_IBM405_ERR77=y
 CONFIG_IBM405_ERR51=y
 CONFIG_IBM_OCP=y
+CONFIG_PPC_OCP=y
 CONFIG_BIOS_FIXUP=y
 CONFIG_405GP=y
 CONFIG_EMBEDDEDBOOT=y
-# CONFIG_405_DMA is not set
 # CONFIG_PM is not set
 CONFIG_UART0_TTYS0=y
 # CONFIG_UART0_TTYS1 is not set
@@ -93,7 +93,8 @@
 CONFIG_KERNEL_ELF=y
 CONFIG_BINFMT_ELF=y
 # CONFIG_BINFMT_MISC is not set
-# CONFIG_CMDLINE_BOOL is not set
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="ip=on"
 
 #
 # Bus options
@@ -102,12 +103,6 @@
 CONFIG_PCI_DOMAINS=y
 # CONFIG_PCI_LEGACY_PROC is not set
 # CONFIG_PCI_NAMES is not set
-# CONFIG_HOTPLUG is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
 
 #
 # Advanced setup
@@ -124,6 +119,10 @@
 CONFIG_BOOT_LOAD=0x00400000
 
 #
+# Device Drivers
+#
+
+#
 # Generic Driver Options
 #
 
@@ -133,13 +132,18 @@
 # CONFIG_MTD is not set
 
 #
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
 # Plug and Play support
 #
-# CONFIG_PNP is not set
 
 #
 # Block devices
 #
+# CONFIG_BLK_DEV_FD is not set
 # CONFIG_BLK_CPQ_DA is not set
 # CONFIG_BLK_CPQ_CISS_DA is not set
 # CONFIG_BLK_DEV_DAC960 is not set
@@ -147,17 +151,13 @@
 CONFIG_BLK_DEV_LOOP=y
 # CONFIG_BLK_DEV_CRYPTOLOOP is not set
 # CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_CARMEL is not set
 CONFIG_BLK_DEV_RAM=y
 CONFIG_BLK_DEV_RAM_SIZE=4096
 CONFIG_BLK_DEV_INITRD=y
 # CONFIG_LBD is not set
 
 #
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
 # ATA/ATAPI/MFM/RLL support
 #
 # CONFIG_IDE is not set
@@ -168,11 +168,17 @@
 # CONFIG_SCSI is not set
 
 #
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
 # Fusion MPT device support
 #
+# CONFIG_FUSION is not set
 
 #
-# IEEE 1394 (FireWire) support (EXPERIMENTAL)
+# IEEE 1394 (FireWire) support
 #
 # CONFIG_IEEE1394 is not set
 
@@ -182,6 +188,10 @@
 # CONFIG_I2O is not set
 
 #
+# Macintosh device drivers
+#
+
+#
 # Networking support
 #
 CONFIG_NET=y
@@ -197,14 +207,13 @@
 CONFIG_IP_MULTICAST=y
 # CONFIG_IP_ADVANCED_ROUTER is not set
 CONFIG_IP_PNP=y
-CONFIG_IP_PNP_DHCP=y
+# CONFIG_IP_PNP_DHCP is not set
 CONFIG_IP_PNP_BOOTP=y
-CONFIG_IP_PNP_RARP=y
+# CONFIG_IP_PNP_RARP is not set
 # CONFIG_NET_IPIP is not set
 # CONFIG_NET_IPGRE is not set
 # CONFIG_IP_MROUTE is not set
 # CONFIG_ARPD is not set
-# CONFIG_INET_ECN is not set
 CONFIG_SYN_COOKIES=y
 # CONFIG_INET_AH is not set
 # CONFIG_INET_ESP is not set
@@ -217,7 +226,6 @@
 #
 # SCTP Configuration (EXPERIMENTAL)
 #
-CONFIG_IPV6_SCTP__=y
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
 # CONFIG_VLAN_8021Q is not set
@@ -287,6 +295,12 @@
 # Ethernet (10000 Mbit)
 #
 # CONFIG_IXGB is not set
+CONFIG_IBM_EMAC=y
+# CONFIG_IBM_EMAC_ERRMSG is not set
+CONFIG_IBM_EMAC_RXB=64
+CONFIG_IBM_EMAC_TXB=8
+CONFIG_IBM_EMAC_FGAP=8
+CONFIG_IBM_EMAC_SKBRES=0
 # CONFIG_FDDI is not set
 # CONFIG_HIPPI is not set
 # CONFIG_PPP is not set
@@ -303,6 +317,7 @@
 # CONFIG_TR is not set
 # CONFIG_RCPCI is not set
 # CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # Wan interfaces
@@ -323,23 +338,18 @@
 # Bluetooth support
 #
 # CONFIG_BT is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
 
 #
 # ISDN subsystem
 #
-# CONFIG_ISDN_BOOL is not set
-
-#
-# Graphics support
-#
-# CONFIG_FB is not set
+# CONFIG_ISDN is not set
 
 #
-# Console display driver support
+# Telephony Support
 #
-# CONFIG_VGA_CONSOLE is not set
-# CONFIG_MDA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
+# CONFIG_PHONE is not set
 
 #
 # Input device support
@@ -379,15 +389,9 @@
 # CONFIG_INPUT_MISC is not set
 
 #
-# Macintosh device drivers
-#
-
-#
 # Character devices
 #
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
+# CONFIG_VT is not set
 # CONFIG_SERIAL_NONSTANDARD is not set
 
 #
@@ -403,53 +407,9 @@
 #
 CONFIG_SERIAL_CORE=y
 CONFIG_SERIAL_CORE_CONSOLE=y
-# CONFIG_UNIX98_PTYS is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-
-#
-# I2C Hardware Bus support
-#
-# CONFIG_I2C_ALI1535 is not set
-# CONFIG_I2C_ALI15X3 is not set
-# CONFIG_I2C_AMD756 is not set
-# CONFIG_I2C_AMD8111 is not set
-# CONFIG_I2C_I801 is not set
-CONFIG_I2C_IBM_IIC=y
-# CONFIG_I2C_NFORCE2 is not set
-# CONFIG_I2C_PIIX4 is not set
-# CONFIG_I2C_SIS5595 is not set
-# CONFIG_I2C_SIS630 is not set
-# CONFIG_I2C_SIS96X is not set
-# CONFIG_I2C_VIAPRO is not set
-
-#
-# I2C Hardware Sensors Chip support
-#
-# CONFIG_I2C_SENSOR is not set
-# CONFIG_SENSORS_ADM1021 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_IT87 is not set
-# CONFIG_SENSORS_LM75 is not set
-# CONFIG_SENSORS_LM78 is not set
-# CONFIG_SENSORS_LM85 is not set
-# CONFIG_SENSORS_VIA686A is not set
-# CONFIG_SENSORS_W83781D is not set
-
-#
-# Mice
-#
-# CONFIG_BUSMOUSE is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
 # CONFIG_QIC02_TAPE is not set
 
 #
@@ -477,6 +437,15 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# Misc devices
+#
+
+#
 # Multimedia devices
 #
 # CONFIG_VIDEO_DEV is not set
@@ -487,6 +456,26 @@
 # CONFIG_DVB is not set
 
 #
+# Graphics support
+#
+# CONFIG_FB is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# USB support
+#
+# CONFIG_USB is not set
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
 # File systems
 #
 CONFIG_EXT2_FS=y
@@ -520,6 +509,7 @@
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
 # CONFIG_DEVFS_FS is not set
+# CONFIG_DEVPTS_FS_XATTR is not set
 CONFIG_TMPFS=y
 # CONFIG_HUGETLB_PAGE is not set
 CONFIG_RAMFS=y
@@ -530,6 +520,7 @@
 # CONFIG_ADFS_FS is not set
 # CONFIG_AFFS_FS is not set
 # CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
 # CONFIG_BEFS_FS is not set
 # CONFIG_BFS_FS is not set
 # CONFIG_EFS_FS is not set
@@ -546,12 +537,13 @@
 CONFIG_NFS_FS=y
 # CONFIG_NFS_V3 is not set
 # CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
 # CONFIG_NFSD is not set
 CONFIG_ROOT_NFS=y
 CONFIG_LOCKD=y
 # CONFIG_EXPORTFS is not set
 CONFIG_SUNRPC=y
-# CONFIG_SUNRPC_GSS is not set
+# CONFIG_RPCSEC_GSS_KRB5 is not set
 # CONFIG_SMB_FS is not set
 # CONFIG_CIFS is not set
 # CONFIG_NCP_FS is not set
@@ -566,19 +558,13 @@
 CONFIG_MSDOS_PARTITION=y
 
 #
-# Sound
+# Native Language Support
 #
-# CONFIG_SOUND is not set
+# CONFIG_NLS is not set
 
 #
 # IBM 40x options
 #
-
-#
-# USB support
-#
-# CONFIG_USB is not set
-# CONFIG_USB_GADGET is not set
 
 #
 # Library routines
diff -Nru a/arch/ppc/configs/ocotea_defconfig b/arch/ppc/configs/ocotea_defconfig
--- a/arch/ppc/configs/ocotea_defconfig	Sun May 16 01:18:36 2004
+++ b/arch/ppc/configs/ocotea_defconfig	Sun May 16 01:18:36 2004
@@ -6,6 +6,7 @@
 CONFIG_HAVE_DEC_LOCK=y
 CONFIG_PPC=y
 CONFIG_PPC32=y
+CONFIG_GENERIC_NVRAM=y
 
 #
 # Code maturity level options
@@ -23,14 +24,16 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_HOTPLUG is not set
 # CONFIG_IKCONFIG is not set
-# CONFIG_EMBEDDED is not set
+CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
 # Loadable module support
@@ -63,9 +66,9 @@
 CONFIG_OCOTEA=y
 CONFIG_440GX=y
 CONFIG_440A=y
-CONFIG_PIN_TLB=y
 CONFIG_BOOKE=y
 CONFIG_IBM_OCP=y
+CONFIG_PPC_OCP=y
 CONFIG_IBM_EMAC4=y
 # CONFIG_PM is not set
 CONFIG_NOT_COHERENT_CACHE=y
@@ -90,12 +93,6 @@
 CONFIG_PCI_DOMAINS=y
 # CONFIG_PCI_LEGACY_PROC is not set
 # CONFIG_PCI_NAMES is not set
-# CONFIG_HOTPLUG is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
 
 #
 # Advanced setup
@@ -112,8 +109,13 @@
 CONFIG_BOOT_LOAD=0x01000000
 
 #
+# Device Drivers
+#
+
+#
 # Generic Driver Options
 #
+# CONFIG_DEBUG_DRIVER is not set
 
 #
 # Memory Technology Devices (MTD)
@@ -121,29 +123,29 @@
 # CONFIG_MTD is not set
 
 #
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
 # Plug and Play support
 #
-# CONFIG_PNP is not set
 
 #
 # Block devices
 #
+# CONFIG_BLK_DEV_FD is not set
 # CONFIG_BLK_CPQ_DA is not set
 # CONFIG_BLK_CPQ_CISS_DA is not set
 # CONFIG_BLK_DEV_DAC960 is not set
 # CONFIG_BLK_DEV_UMEM is not set
 # CONFIG_BLK_DEV_LOOP is not set
 # CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_CARMEL is not set
 # CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_INITRD is not set
 # CONFIG_LBD is not set
 
 #
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
 # ATA/ATAPI/MFM/RLL support
 #
 # CONFIG_IDE is not set
@@ -154,11 +156,17 @@
 # CONFIG_SCSI is not set
 
 #
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
 # Fusion MPT device support
 #
+# CONFIG_FUSION is not set
 
 #
-# IEEE 1394 (FireWire) support (EXPERIMENTAL)
+# IEEE 1394 (FireWire) support
 #
 # CONFIG_IEEE1394 is not set
 
@@ -168,6 +176,10 @@
 # CONFIG_I2O is not set
 
 #
+# Macintosh device drivers
+#
+
+#
 # Networking support
 #
 CONFIG_NET=y
@@ -190,7 +202,6 @@
 # CONFIG_NET_IPIP is not set
 # CONFIG_NET_IPGRE is not set
 # CONFIG_ARPD is not set
-# CONFIG_INET_ECN is not set
 # CONFIG_SYN_COOKIES is not set
 # CONFIG_INET_AH is not set
 # CONFIG_INET_ESP is not set
@@ -219,7 +230,6 @@
 #
 # SCTP Configuration (EXPERIMENTAL)
 #
-CONFIG_IPV6_SCTP__=y
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
 # CONFIG_VLAN_8021Q is not set
@@ -289,6 +299,12 @@
 # Ethernet (10000 Mbit)
 #
 # CONFIG_IXGB is not set
+CONFIG_IBM_EMAC=y
+# CONFIG_IBM_EMAC_ERRMSG is not set
+CONFIG_IBM_EMAC_RXB=128
+CONFIG_IBM_EMAC_TXB=128
+CONFIG_IBM_EMAC_FGAP=8
+CONFIG_IBM_EMAC_SKBRES=0
 # CONFIG_FDDI is not set
 # CONFIG_HIPPI is not set
 # CONFIG_PPP is not set
@@ -305,6 +321,7 @@
 # CONFIG_TR is not set
 # CONFIG_RCPCI is not set
 # CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # Wan interfaces
@@ -325,23 +342,18 @@
 # Bluetooth support
 #
 # CONFIG_BT is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
 
 #
 # ISDN subsystem
 #
-# CONFIG_ISDN_BOOL is not set
-
-#
-# Graphics support
-#
-# CONFIG_FB is not set
+# CONFIG_ISDN is not set
 
 #
-# Console display driver support
+# Telephony Support
 #
-CONFIG_VGA_CONSOLE=y
-# CONFIG_MDA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
+# CONFIG_PHONE is not set
 
 #
 # Input device support
@@ -381,15 +393,9 @@
 # CONFIG_INPUT_MISC is not set
 
 #
-# Macintosh device drivers
-#
-
-#
 # Character devices
 #
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
+# CONFIG_VT is not set
 # CONFIG_SERIAL_NONSTANDARD is not set
 
 #
@@ -411,30 +417,8 @@
 CONFIG_SERIAL_CORE=y
 CONFIG_SERIAL_CORE_CONSOLE=y
 CONFIG_UNIX98_PTYS=y
-CONFIG_UNIX98_PTY_COUNT=256
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# I2C Algorithms
-#
-
-#
-# I2C Hardware Bus support
-#
-
-#
-# I2C Hardware Sensors Chip support
-#
-# CONFIG_I2C_SENSOR is not set
-
-#
-# Mice
-#
-# CONFIG_BUSMOUSE is not set
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
 # CONFIG_QIC02_TAPE is not set
 
 #
@@ -461,6 +445,15 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# Misc devices
+#
+
+#
 # Multimedia devices
 #
 # CONFIG_VIDEO_DEV is not set
@@ -471,6 +464,26 @@
 # CONFIG_DVB is not set
 
 #
+# Graphics support
+#
+# CONFIG_FB is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# USB support
+#
+# CONFIG_USB is not set
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
 # File systems
 #
 # CONFIG_EXT2_FS is not set
@@ -503,7 +516,6 @@
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
 # CONFIG_DEVFS_FS is not set
-CONFIG_DEVPTS_FS=y
 # CONFIG_DEVPTS_FS_XATTR is not set
 # CONFIG_TMPFS is not set
 # CONFIG_HUGETLB_PAGE is not set
@@ -515,6 +527,7 @@
 # CONFIG_ADFS_FS is not set
 # CONFIG_AFFS_FS is not set
 # CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
 # CONFIG_BEFS_FS is not set
 # CONFIG_BFS_FS is not set
 # CONFIG_EFS_FS is not set
@@ -531,12 +544,13 @@
 CONFIG_NFS_FS=y
 # CONFIG_NFS_V3 is not set
 # CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
 # CONFIG_NFSD is not set
 CONFIG_ROOT_NFS=y
 CONFIG_LOCKD=y
 # CONFIG_EXPORTFS is not set
 CONFIG_SUNRPC=y
-# CONFIG_SUNRPC_GSS is not set
+# CONFIG_RPCSEC_GSS_KRB5 is not set
 # CONFIG_SMB_FS is not set
 # CONFIG_CIFS is not set
 # CONFIG_NCP_FS is not set
@@ -551,15 +565,9 @@
 CONFIG_MSDOS_PARTITION=y
 
 #
-# Sound
+# Native Language Support
 #
-# CONFIG_SOUND is not set
-
-#
-# USB support
-#
-# CONFIG_USB is not set
-# CONFIG_USB_GADGET is not set
+# CONFIG_NLS is not set
 
 #
 # Library routines
diff -Nru a/arch/ppc/configs/redwood5_defconfig b/arch/ppc/configs/redwood5_defconfig
--- a/arch/ppc/configs/redwood5_defconfig	Sun May 16 01:18:36 2004
+++ b/arch/ppc/configs/redwood5_defconfig	Sun May 16 01:18:36 2004
@@ -6,6 +6,7 @@
 CONFIG_HAVE_DEC_LOCK=y
 CONFIG_PPC=y
 CONFIG_PPC32=y
+CONFIG_GENERIC_NVRAM=y
 
 #
 # Code maturity level options
@@ -23,6 +24,7 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_HOTPLUG is not set
 # CONFIG_IKCONFIG is not set
 CONFIG_EMBEDDED=y
 # CONFIG_KALLSYMS is not set
@@ -31,6 +33,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
 # Loadable module support
@@ -59,23 +62,19 @@
 # IBM 4xx options
 #
 # CONFIG_ASH is not set
-# CONFIG_BEECH is not set
-# CONFIG_CEDAR is not set
 # CONFIG_CPCI405 is not set
 # CONFIG_EP405 is not set
 # CONFIG_OAK is not set
-# CONFIG_REDWOOD_4 is not set
 CONFIG_REDWOOD_5=y
 # CONFIG_REDWOOD_6 is not set
 # CONFIG_SYCAMORE is not set
-# CONFIG_TIVO is not set
 # CONFIG_WALNUT is not set
 CONFIG_IBM405_ERR77=y
 CONFIG_IBM405_ERR51=y
 CONFIG_IBM_OCP=y
+CONFIG_PPC_OCP=y
 CONFIG_STB03xxx=y
 CONFIG_IBM_OPENBIOS=y
-# CONFIG_405_DMA is not set
 # CONFIG_PM is not set
 CONFIG_UART0_TTYS0=y
 # CONFIG_UART0_TTYS1 is not set
@@ -92,19 +91,14 @@
 CONFIG_KERNEL_ELF=y
 CONFIG_BINFMT_ELF=y
 # CONFIG_BINFMT_MISC is not set
-# CONFIG_CMDLINE_BOOL is not set
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="ip=on"
 
 #
 # Bus options
 #
 # CONFIG_PCI is not set
 # CONFIG_PCI_DOMAINS is not set
-# CONFIG_HOTPLUG is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
 
 #
 # Advanced setup
@@ -121,6 +115,10 @@
 CONFIG_BOOT_LOAD=0x00400000
 
 #
+# Device Drivers
+#
+
+#
 # Generic Driver Options
 #
 
@@ -130,13 +128,18 @@
 # CONFIG_MTD is not set
 
 #
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
 # Plug and Play support
 #
-# CONFIG_PNP is not set
 
 #
 # Block devices
 #
+# CONFIG_BLK_DEV_FD is not set
 CONFIG_BLK_DEV_LOOP=y
 # CONFIG_BLK_DEV_CRYPTOLOOP is not set
 # CONFIG_BLK_DEV_NBD is not set
@@ -146,11 +149,6 @@
 # CONFIG_LBD is not set
 
 #
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
 # ATA/ATAPI/MFM/RLL support
 #
 CONFIG_IDE=y
@@ -171,6 +169,7 @@
 #
 # IDE chipset support/bugfixes
 #
+CONFIG_IDE_GENERIC=y
 # CONFIG_BLK_DEV_IDEDMA is not set
 # CONFIG_IDEDMA_AUTO is not set
 # CONFIG_BLK_DEV_HD is not set
@@ -181,14 +180,28 @@
 # CONFIG_SCSI is not set
 
 #
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
 # Fusion MPT device support
 #
 
 #
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_IEEE1394 is not set
+
+#
 # I2O device support
 #
 
 #
+# Macintosh device drivers
+#
+
+#
 # Networking support
 #
 CONFIG_NET=y
@@ -211,7 +224,6 @@
 # CONFIG_NET_IPGRE is not set
 # CONFIG_IP_MROUTE is not set
 # CONFIG_ARPD is not set
-# CONFIG_INET_ECN is not set
 CONFIG_SYN_COOKIES=y
 # CONFIG_INET_AH is not set
 # CONFIG_INET_ESP is not set
@@ -224,7 +236,6 @@
 #
 # SCTP Configuration (EXPERIMENTAL)
 #
-CONFIG_IPV6_SCTP__=y
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
 # CONFIG_VLAN_8021Q is not set
@@ -268,6 +279,7 @@
 #
 # Ethernet (10000 Mbit)
 #
+# CONFIG_IBM_EMAC is not set
 # CONFIG_PPP is not set
 # CONFIG_SLIP is not set
 
@@ -280,6 +292,7 @@
 # Token Ring devices
 #
 # CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # Wan interfaces
@@ -300,16 +313,18 @@
 # Bluetooth support
 #
 # CONFIG_BT is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
 
 #
 # ISDN subsystem
 #
-# CONFIG_ISDN_BOOL is not set
+# CONFIG_ISDN is not set
 
 #
-# Graphics support
+# Telephony Support
 #
-# CONFIG_FB is not set
+# CONFIG_PHONE is not set
 
 #
 # Input device support
@@ -345,10 +360,6 @@
 # CONFIG_INPUT_MISC is not set
 
 #
-# Macintosh device drivers
-#
-
-#
 # Character devices
 #
 # CONFIG_VT is not set
@@ -368,43 +379,8 @@
 CONFIG_SERIAL_CORE=y
 CONFIG_SERIAL_CORE_CONSOLE=y
 # CONFIG_UNIX98_PTYS is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-
-#
-# I2C Hardware Bus support
-#
-# CONFIG_I2C_AMD756 is not set
-# CONFIG_I2C_AMD8111 is not set
-CONFIG_I2C_IBM_IIC=y
-
-#
-# I2C Hardware Sensors Chip support
-#
-# CONFIG_I2C_SENSOR is not set
-# CONFIG_SENSORS_ADM1021 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_IT87 is not set
-# CONFIG_SENSORS_LM75 is not set
-# CONFIG_SENSORS_LM78 is not set
-# CONFIG_SENSORS_LM85 is not set
-# CONFIG_SENSORS_VIA686A is not set
-# CONFIG_SENSORS_W83781D is not set
-
-#
-# Mice
-#
-# CONFIG_BUSMOUSE is not set
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
 # CONFIG_QIC02_TAPE is not set
 
 #
@@ -432,6 +408,15 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# Misc devices
+#
+
+#
 # Multimedia devices
 #
 # CONFIG_VIDEO_DEV is not set
@@ -442,6 +427,25 @@
 # CONFIG_DVB is not set
 
 #
+# Graphics support
+#
+# CONFIG_FB is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# USB support
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
 # File systems
 #
 CONFIG_EXT2_FS=y
@@ -485,6 +489,7 @@
 # CONFIG_ADFS_FS is not set
 # CONFIG_AFFS_FS is not set
 # CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
 # CONFIG_BEFS_FS is not set
 # CONFIG_BFS_FS is not set
 # CONFIG_EFS_FS is not set
@@ -501,12 +506,13 @@
 CONFIG_NFS_FS=y
 # CONFIG_NFS_V3 is not set
 # CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
 # CONFIG_NFSD is not set
 CONFIG_ROOT_NFS=y
 CONFIG_LOCKD=y
 # CONFIG_EXPORTFS is not set
 CONFIG_SUNRPC=y
-# CONFIG_SUNRPC_GSS is not set
+# CONFIG_RPCSEC_GSS_KRB5 is not set
 # CONFIG_SMB_FS is not set
 # CONFIG_CIFS is not set
 # CONFIG_NCP_FS is not set
@@ -521,18 +527,13 @@
 CONFIG_MSDOS_PARTITION=y
 
 #
-# Sound
+# Native Language Support
 #
-# CONFIG_SOUND is not set
+# CONFIG_NLS is not set
 
 #
 # IBM 40x options
 #
-
-#
-# USB support
-#
-# CONFIG_USB_GADGET is not set
 
 #
 # Library routines
diff -Nru a/arch/ppc/configs/redwood6_defconfig b/arch/ppc/configs/redwood6_defconfig
--- a/arch/ppc/configs/redwood6_defconfig	Sun May 16 01:18:35 2004
+++ b/arch/ppc/configs/redwood6_defconfig	Sun May 16 01:18:35 2004
@@ -6,6 +6,7 @@
 CONFIG_HAVE_DEC_LOCK=y
 CONFIG_PPC=y
 CONFIG_PPC32=y
+CONFIG_GENERIC_NVRAM=y
 
 #
 # Code maturity level options
@@ -23,6 +24,7 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_HOTPLUG is not set
 # CONFIG_IKCONFIG is not set
 CONFIG_EMBEDDED=y
 # CONFIG_KALLSYMS is not set
@@ -31,6 +33,7 @@
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_AS=y
 CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
 # Loadable module support
@@ -58,23 +61,19 @@
 # IBM 4xx options
 #
 # CONFIG_ASH is not set
-# CONFIG_BEECH is not set
-# CONFIG_CEDAR is not set
 # CONFIG_CPCI405 is not set
 # CONFIG_EP405 is not set
 # CONFIG_OAK is not set
-# CONFIG_REDWOOD_4 is not set
 # CONFIG_REDWOOD_5 is not set
 CONFIG_REDWOOD_6=y
 # CONFIG_SYCAMORE is not set
-# CONFIG_TIVO is not set
 # CONFIG_WALNUT is not set
 CONFIG_IBM405_ERR77=y
 CONFIG_IBM405_ERR51=y
 CONFIG_IBM_OCP=y
+CONFIG_PPC_OCP=y
 CONFIG_STB03xxx=y
 CONFIG_IBM_OPENBIOS=y
-# CONFIG_405_DMA is not set
 # CONFIG_PM is not set
 CONFIG_UART0_TTYS0=y
 # CONFIG_UART0_TTYS1 is not set
@@ -91,19 +90,14 @@
 CONFIG_KERNEL_ELF=y
 CONFIG_BINFMT_ELF=y
 # CONFIG_BINFMT_MISC is not set
-# CONFIG_CMDLINE_BOOL is not set
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="ip=on"
 
 #
 # Bus options
 #
 # CONFIG_PCI is not set
 # CONFIG_PCI_DOMAINS is not set
-# CONFIG_HOTPLUG is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
 
 #
 # Advanced setup
@@ -120,6 +114,10 @@
 CONFIG_BOOT_LOAD=0x00400000
 
 #
+# Device Drivers
+#
+
+#
 # Generic Driver Options
 #
 
@@ -129,13 +127,18 @@
 # CONFIG_MTD is not set
 
 #
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
 # Plug and Play support
 #
-# CONFIG_PNP is not set
 
 #
 # Block devices
 #
+# CONFIG_BLK_DEV_FD is not set
 CONFIG_BLK_DEV_LOOP=y
 # CONFIG_BLK_DEV_CRYPTOLOOP is not set
 # CONFIG_BLK_DEV_NBD is not set
@@ -145,11 +148,6 @@
 # CONFIG_LBD is not set
 
 #
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
 # ATA/ATAPI/MFM/RLL support
 #
 # CONFIG_IDE is not set
@@ -160,14 +158,28 @@
 # CONFIG_SCSI is not set
 
 #
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
 # Fusion MPT device support
 #
 
 #
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_IEEE1394 is not set
+
+#
 # I2O device support
 #
 
 #
+# Macintosh device drivers
+#
+
+#
 # Networking support
 #
 CONFIG_NET=y
@@ -190,7 +202,6 @@
 # CONFIG_NET_IPGRE is not set
 # CONFIG_IP_MROUTE is not set
 # CONFIG_ARPD is not set
-# CONFIG_INET_ECN is not set
 CONFIG_SYN_COOKIES=y
 # CONFIG_INET_AH is not set
 # CONFIG_INET_ESP is not set
@@ -203,7 +214,6 @@
 #
 # SCTP Configuration (EXPERIMENTAL)
 #
-CONFIG_IPV6_SCTP__=y
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
 # CONFIG_VLAN_8021Q is not set
@@ -247,6 +257,7 @@
 #
 # Ethernet (10000 Mbit)
 #
+# CONFIG_IBM_EMAC is not set
 # CONFIG_PPP is not set
 # CONFIG_SLIP is not set
 
@@ -259,6 +270,7 @@
 # Token Ring devices
 #
 # CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # Wan interfaces
@@ -279,16 +291,18 @@
 # Bluetooth support
 #
 # CONFIG_BT is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
 
 #
 # ISDN subsystem
 #
-# CONFIG_ISDN_BOOL is not set
+# CONFIG_ISDN is not set
 
 #
-# Graphics support
+# Telephony Support
 #
-# CONFIG_FB is not set
+# CONFIG_PHONE is not set
 
 #
 # Input device support
@@ -324,10 +338,6 @@
 # CONFIG_INPUT_MISC is not set
 
 #
-# Macintosh device drivers
-#
-
-#
 # Character devices
 #
 # CONFIG_VT is not set
@@ -347,30 +357,8 @@
 CONFIG_SERIAL_CORE=y
 CONFIG_SERIAL_CORE_CONSOLE=y
 CONFIG_UNIX98_PTYS=y
-CONFIG_UNIX98_PTY_COUNT=256
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# I2C Algorithms
-#
-
-#
-# I2C Hardware Bus support
-#
-
-#
-# I2C Hardware Sensors Chip support
-#
-# CONFIG_I2C_SENSOR is not set
-
-#
-# Mice
-#
-# CONFIG_BUSMOUSE is not set
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
 # CONFIG_QIC02_TAPE is not set
 
 #
@@ -397,6 +385,15 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# Misc devices
+#
+
+#
 # Multimedia devices
 #
 # CONFIG_VIDEO_DEV is not set
@@ -407,6 +404,25 @@
 # CONFIG_DVB is not set
 
 #
+# Graphics support
+#
+# CONFIG_FB is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# USB support
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
 # File systems
 #
 CONFIG_EXT2_FS=y
@@ -440,7 +456,6 @@
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
 # CONFIG_DEVFS_FS is not set
-CONFIG_DEVPTS_FS=y
 # CONFIG_DEVPTS_FS_XATTR is not set
 CONFIG_TMPFS=y
 # CONFIG_HUGETLB_PAGE is not set
@@ -452,6 +467,7 @@
 # CONFIG_ADFS_FS is not set
 # CONFIG_AFFS_FS is not set
 # CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
 # CONFIG_BEFS_FS is not set
 # CONFIG_BFS_FS is not set
 # CONFIG_EFS_FS is not set
@@ -468,12 +484,13 @@
 CONFIG_NFS_FS=y
 # CONFIG_NFS_V3 is not set
 # CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
 # CONFIG_NFSD is not set
 CONFIG_ROOT_NFS=y
 CONFIG_LOCKD=y
 # CONFIG_EXPORTFS is not set
 CONFIG_SUNRPC=y
-# CONFIG_SUNRPC_GSS is not set
+# CONFIG_RPCSEC_GSS_KRB5 is not set
 # CONFIG_SMB_FS is not set
 # CONFIG_CIFS is not set
 # CONFIG_NCP_FS is not set
@@ -488,18 +505,13 @@
 CONFIG_MSDOS_PARTITION=y
 
 #
-# Sound
+# Native Language Support
 #
-# CONFIG_SOUND is not set
+# CONFIG_NLS is not set
 
 #
 # IBM 40x options
 #
-
-#
-# USB support
-#
-# CONFIG_USB_GADGET is not set
 
 #
 # Library routines
diff -Nru a/arch/ppc/configs/sycamore_defconfig b/arch/ppc/configs/sycamore_defconfig
--- a/arch/ppc/configs/sycamore_defconfig	Sun May 16 01:18:33 2004
+++ b/arch/ppc/configs/sycamore_defconfig	Sun May 16 01:18:33 2004
@@ -4,11 +4,17 @@
 CONFIG_MMU=y
 CONFIG_RWSEM_XCHGADD_ALGORITHM=y
 CONFIG_HAVE_DEC_LOCK=y
+CONFIG_PPC=y
+CONFIG_PPC32=y
+CONFIG_GENERIC_NVRAM=y
 
 #
 # Code maturity level options
 #
 CONFIG_EXPERIMENTAL=y
+CONFIG_CLEAN_COMPILE=y
+CONFIG_STANDALONE=y
+CONFIG_BROKEN_ON_SMP=y
 
 #
 # General setup
@@ -18,9 +24,16 @@
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_HOTPLUG is not set
+# CONFIG_IKCONFIG is not set
 CONFIG_EMBEDDED=y
+# CONFIG_KALLSYMS is not set
 CONFIG_FUTEX=y
 # CONFIG_EPOLL is not set
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 
 #
 # Loadable module support
@@ -33,66 +46,60 @@
 CONFIG_KMOD=y
 
 #
-# Platform support
+# Processor
 #
-CONFIG_PPC=y
-CONFIG_PPC32=y
 # CONFIG_6xx is not set
 CONFIG_40x=y
+# CONFIG_44x is not set
 # CONFIG_POWER3 is not set
+# CONFIG_POWER4 is not set
 # CONFIG_8xx is not set
+# CONFIG_MATH_EMULATION is not set
+# CONFIG_CPU_FREQ is not set
 CONFIG_4xx=y
 
 #
 # IBM 4xx options
 #
 # CONFIG_ASH is not set
-# CONFIG_BEECH is not set
-# CONFIG_CEDAR is not set
 # CONFIG_CPCI405 is not set
 # CONFIG_EP405 is not set
+# CONFIG_EVB405EP is not set
 # CONFIG_OAK is not set
-# CONFIG_REDWOOD_4 is not set
 # CONFIG_REDWOOD_5 is not set
 # CONFIG_REDWOOD_6 is not set
 CONFIG_SYCAMORE=y
-# CONFIG_TIVO is not set
 # CONFIG_WALNUT is not set
-CONFIG_IBM405_ERR77=y
-CONFIG_IBM405_ERR51=y
 CONFIG_IBM_OCP=y
+CONFIG_PPC_OCP=y
 CONFIG_BIOS_FIXUP=y
+CONFIG_405GPR=y
 CONFIG_IBM_OPENBIOS=y
-# CONFIG_405_DMA is not set
-CONFIG_PM=y
+# CONFIG_PM is not set
 CONFIG_UART0_TTYS0=y
 # CONFIG_UART0_TTYS1 is not set
 CONFIG_NOT_COHERENT_CACHE=y
-# CONFIG_SMP is not set
-# CONFIG_PREEMPT is not set
-# CONFIG_MATH_EMULATION is not set
-# CONFIG_CPU_FREQ is not set
 
 #
-# General setup
+# Platform options
 #
-# CONFIG_HIGHMEM is not set
-CONFIG_PCI=y
-CONFIG_PCI_DOMAINS=y
 # CONFIG_PC_KEYBOARD is not set
-CONFIG_KCORE_ELF=y
-CONFIG_BINFMT_ELF=y
+# CONFIG_SMP is not set
+# CONFIG_PREEMPT is not set
+# CONFIG_HIGHMEM is not set
 CONFIG_KERNEL_ELF=y
+CONFIG_BINFMT_ELF=y
 # CONFIG_BINFMT_MISC is not set
-# CONFIG_PCI_LEGACY_PROC is not set
-# CONFIG_PCI_NAMES is not set
-# CONFIG_HOTPLUG is not set
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="ip=on"
 
 #
-# Parallel port support
+# Bus options
 #
-# CONFIG_PARPORT is not set
-# CONFIG_CMDLINE_BOOL is not set
+CONFIG_PCI=y
+CONFIG_PCI_DOMAINS=y
+# CONFIG_PCI_LEGACY_PROC is not set
+# CONFIG_PCI_NAMES is not set
 
 #
 # Advanced setup
@@ -109,14 +116,26 @@
 CONFIG_BOOT_LOAD=0x00400000
 
 #
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+
+#
 # Memory Technology Devices (MTD)
 #
 # CONFIG_MTD is not set
 
 #
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
 # Plug and Play support
 #
-# CONFIG_PNP is not set
 
 #
 # Block devices
@@ -127,32 +146,36 @@
 # CONFIG_BLK_DEV_DAC960 is not set
 # CONFIG_BLK_DEV_UMEM is not set
 CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
 # CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_CARMEL is not set
 CONFIG_BLK_DEV_RAM=y
 CONFIG_BLK_DEV_RAM_SIZE=4096
 CONFIG_BLK_DEV_INITRD=y
+# CONFIG_LBD is not set
 
 #
-# Multi-device support (RAID and LVM)
+# ATA/ATAPI/MFM/RLL support
 #
-# CONFIG_MD is not set
+# CONFIG_IDE is not set
 
 #
-# ATA/IDE/MFM/RLL support
+# SCSI device support
 #
-# CONFIG_IDE is not set
+# CONFIG_SCSI is not set
 
 #
-# SCSI support
+# Multi-device support (RAID and LVM)
 #
-# CONFIG_SCSI is not set
+# CONFIG_MD is not set
 
 #
 # Fusion MPT device support
 #
+# CONFIG_FUSION is not set
 
 #
-# IEEE 1394 (FireWire) support (EXPERIMENTAL)
+# IEEE 1394 (FireWire) support
 #
 # CONFIG_IEEE1394 is not set
 
@@ -162,6 +185,10 @@
 # CONFIG_I2O is not set
 
 #
+# Macintosh device drivers
+#
+
+#
 # Networking support
 #
 CONFIG_NET=y
@@ -171,7 +198,6 @@
 #
 # CONFIG_PACKET is not set
 # CONFIG_NETLINK_DEV is not set
-# CONFIG_NETFILTER is not set
 CONFIG_UNIX=y
 # CONFIG_NET_KEY is not set
 CONFIG_INET=y
@@ -180,29 +206,29 @@
 CONFIG_IP_PNP=y
 # CONFIG_IP_PNP_DHCP is not set
 CONFIG_IP_PNP_BOOTP=y
-CONFIG_IP_PNP_RARP=y
+# CONFIG_IP_PNP_RARP is not set
 # CONFIG_NET_IPIP is not set
 # CONFIG_NET_IPGRE is not set
 # CONFIG_IP_MROUTE is not set
 # CONFIG_ARPD is not set
-# CONFIG_INET_ECN is not set
 CONFIG_SYN_COOKIES=y
 # CONFIG_INET_AH is not set
 # CONFIG_INET_ESP is not set
 # CONFIG_INET_IPCOMP is not set
 # CONFIG_IPV6 is not set
-# CONFIG_XFRM_USER is not set
+# CONFIG_DECNET is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_NETFILTER is not set
 
 #
 # SCTP Configuration (EXPERIMENTAL)
 #
-CONFIG_IPV6_SCTP__=y
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
 # CONFIG_VLAN_8021Q is not set
-# CONFIG_LLC is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
 # CONFIG_X25 is not set
 # CONFIG_LAPB is not set
 # CONFIG_NET_DIVERT is not set
@@ -230,7 +256,6 @@
 # CONFIG_BONDING is not set
 # CONFIG_EQUALIZER is not set
 # CONFIG_TUN is not set
-# CONFIG_ETHERTAP is not set
 
 #
 # Ethernet (10 or 100Mbit)
@@ -259,6 +284,7 @@
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
 # CONFIG_R8169 is not set
+# CONFIG_SIS190 is not set
 # CONFIG_SK98LIN is not set
 # CONFIG_TIGON3 is not set
 
@@ -266,6 +292,12 @@
 # Ethernet (10000 Mbit)
 #
 # CONFIG_IXGB is not set
+CONFIG_IBM_EMAC=y
+# CONFIG_IBM_EMAC_ERRMSG is not set
+CONFIG_IBM_EMAC_RXB=64
+CONFIG_IBM_EMAC_TXB=8
+CONFIG_IBM_EMAC_FGAP=8
+CONFIG_IBM_EMAC_SKBRES=0
 # CONFIG_FDDI is not set
 # CONFIG_HIPPI is not set
 # CONFIG_PPP is not set
@@ -277,10 +309,12 @@
 # CONFIG_NET_RADIO is not set
 
 #
-# Token Ring devices (depends on LLC=y)
+# Token Ring devices
 #
+# CONFIG_TR is not set
 # CONFIG_RCPCI is not set
 # CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
 # Wan interfaces
@@ -298,28 +332,38 @@
 # CONFIG_IRDA is not set
 
 #
-# ISDN subsystem
+# Bluetooth support
 #
-# CONFIG_ISDN_BOOL is not set
+# CONFIG_BT is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
 
 #
-# Graphics support
+# ISDN subsystem
 #
-# CONFIG_FB is not set
+# CONFIG_ISDN is not set
 
 #
-# Old CD-ROM drivers (not SCSI, not IDE)
+# Telephony Support
 #
-# CONFIG_CD_NO_IDESCSI is not set
+# CONFIG_PHONE is not set
 
 #
 # Input device support
 #
-# CONFIG_INPUT is not set
+CONFIG_INPUT=y
 
 #
 # Userland interfaces
 #
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_EVBUG is not set
 
 #
 # Input I/O drivers
@@ -330,18 +374,29 @@
 CONFIG_SERIO_I8042=y
 CONFIG_SERIO_SERPORT=y
 # CONFIG_SERIO_CT82C710 is not set
+# CONFIG_SERIO_PCIPS2 is not set
 
 #
 # Input Device Drivers
 #
-
-#
-# Macintosh device drivers
-#
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=y
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
 
 #
 # Character devices
 #
+# CONFIG_VT is not set
 # CONFIG_SERIAL_NONSTANDARD is not set
 
 #
@@ -349,6 +404,7 @@
 #
 CONFIG_SERIAL_8250=y
 CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_NR_UARTS=4
 # CONFIG_SERIAL_8250_EXTENDED is not set
 
 #
@@ -357,79 +413,132 @@
 CONFIG_SERIAL_CORE=y
 CONFIG_SERIAL_CORE_CONSOLE=y
 CONFIG_UNIX98_PTYS=y
-CONFIG_UNIX98_PTY_COUNT=256
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+# CONFIG_QIC02_TAPE is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_NVRAM is not set
+# CONFIG_GEN_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_FTAPE is not set
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
+# CONFIG_RAW_DRIVER is not set
 
 #
 # I2C support
 #
 CONFIG_I2C=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
 # CONFIG_I2C_ALGOBIT is not set
 # CONFIG_I2C_ALGOPCF is not set
-CONFIG_I2C_IBM_OCP_ALGO=y
-CONFIG_I2C_IBM_OCP_ADAP=y
-CONFIG_I2C_CHARDEV=y
 
 #
-# I2C Hardware Sensors Mainboard support
+# I2C Hardware Bus support
 #
+# CONFIG_I2C_ALI1535 is not set
 # CONFIG_I2C_ALI15X3 is not set
 # CONFIG_I2C_AMD756 is not set
 # CONFIG_I2C_AMD8111 is not set
 # CONFIG_I2C_I801 is not set
+# CONFIG_I2C_I810 is not set
+# CONFIG_I2C_IBM_IIC is not set
+# CONFIG_I2C_ISA is not set
+# CONFIG_I2C_NFORCE2 is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
 # CONFIG_I2C_PIIX4 is not set
+# CONFIG_I2C_PROSAVAGE is not set
+# CONFIG_I2C_SAVAGE4 is not set
+# CONFIG_SCx200_ACB is not set
+# CONFIG_I2C_SIS5595 is not set
+# CONFIG_I2C_SIS630 is not set
 # CONFIG_I2C_SIS96X is not set
+# CONFIG_I2C_VIA is not set
 # CONFIG_I2C_VIAPRO is not set
+# CONFIG_I2C_VOODOO3 is not set
 
 #
-# I2C Hardware Sensors Chip support
+# Hardware Sensors Chip support
 #
+# CONFIG_I2C_SENSOR is not set
 # CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ASB100 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_FSCHER is not set
+# CONFIG_SENSORS_GL518SM is not set
 # CONFIG_SENSORS_IT87 is not set
 # CONFIG_SENSORS_LM75 is not set
+# CONFIG_SENSORS_LM78 is not set
+# CONFIG_SENSORS_LM80 is not set
+# CONFIG_SENSORS_LM83 is not set
 # CONFIG_SENSORS_LM85 is not set
+# CONFIG_SENSORS_LM90 is not set
 # CONFIG_SENSORS_VIA686A is not set
 # CONFIG_SENSORS_W83781D is not set
-# CONFIG_I2C_SENSOR is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83627HF is not set
 
 #
-# Mice
+# Other I2C Chip support
 #
-# CONFIG_BUSMOUSE is not set
-# CONFIG_QIC02_TAPE is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
 
 #
-# IPMI
+# Misc devices
 #
-# CONFIG_IPMI_HANDLER is not set
 
 #
-# Watchdog Cards
+# Multimedia devices
 #
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_GEN_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
+# CONFIG_VIDEO_DEV is not set
 
 #
-# Ftape, the floppy tape device driver
+# Digital Video Broadcasting Devices
 #
-# CONFIG_FTAPE is not set
-# CONFIG_AGP is not set
-# CONFIG_DRM is not set
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_HANGCHECK_TIMER is not set
+# CONFIG_DVB is not set
 
 #
-# Multimedia devices
+# Graphics support
 #
-# CONFIG_VIDEO_DEV is not set
+# CONFIG_FB is not set
 
 #
-# Digital Video Broadcasting Devices
+# Sound
 #
-# CONFIG_DVB is not set
+# CONFIG_SOUND is not set
+
+#
+# USB support
+#
+# CONFIG_USB is not set
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
 
 #
 # File systems
@@ -463,10 +572,11 @@
 # Pseudo filesystems
 #
 CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
 # CONFIG_DEVFS_FS is not set
-CONFIG_DEVPTS_FS=y
 # CONFIG_DEVPTS_FS_XATTR is not set
 CONFIG_TMPFS=y
+# CONFIG_HUGETLB_PAGE is not set
 CONFIG_RAMFS=y
 
 #
@@ -475,6 +585,7 @@
 # CONFIG_ADFS_FS is not set
 # CONFIG_AFFS_FS is not set
 # CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
 # CONFIG_BEFS_FS is not set
 # CONFIG_BFS_FS is not set
 # CONFIG_EFS_FS is not set
@@ -491,12 +602,13 @@
 CONFIG_NFS_FS=y
 # CONFIG_NFS_V3 is not set
 # CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
 # CONFIG_NFSD is not set
 CONFIG_ROOT_NFS=y
 CONFIG_LOCKD=y
 # CONFIG_EXPORTFS is not set
 CONFIG_SUNRPC=y
-# CONFIG_SUNRPC_GSS is not set
+# CONFIG_RPCSEC_GSS_KRB5 is not set
 # CONFIG_SMB_FS is not set
 # CONFIG_CIFS is not set
 # CONFIG_NCP_FS is not set
@@ -522,35 +634,23 @@
 # CONFIG_EFI_PARTITION is not set
 
 #
-# Sound
+# Native Language Support
 #
-# CONFIG_SOUND is not set
+# CONFIG_NLS is not set
 
 #
 # IBM 40x options
 #
 
 #
-# USB support
-#
-# CONFIG_USB is not set
-# CONFIG_USB_GADGET is not set
-
-#
-# Bluetooth support
-#
-# CONFIG_BT is not set
-
-#
 # Library routines
 #
-# CONFIG_CRC32 is not set
+CONFIG_CRC32=y
 
 #
 # Kernel hacking
 #
 # CONFIG_DEBUG_KERNEL is not set
-# CONFIG_KALLSYMS is not set
 # CONFIG_SERIAL_TEXT_DEBUG is not set
 CONFIG_OCP=y
 
diff -Nru a/arch/ppc/configs/walnut_defconfig b/arch/ppc/configs/walnut_defconfig
--- a/arch/ppc/configs/walnut_defconfig	Sun May 16 01:18:36 2004
+++ b/arch/ppc/configs/walnut_defconfig	Sun May 16 01:18:36 2004
@@ -64,6 +64,7 @@
 # CONFIG_ASH is not set
 # CONFIG_CPCI405 is not set
 # CONFIG_EP405 is not set
+# CONFIG_EVB405EP is not set
 # CONFIG_OAK is not set
 # CONFIG_REDWOOD_5 is not set
 # CONFIG_REDWOOD_6 is not set
@@ -91,7 +92,8 @@
 CONFIG_KERNEL_ELF=y
 CONFIG_BINFMT_ELF=y
 # CONFIG_BINFMT_MISC is not set
-# CONFIG_CMDLINE_BOOL is not set
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="ip=on"
 
 #
 # Bus options
@@ -204,9 +206,9 @@
 CONFIG_IP_MULTICAST=y
 # CONFIG_IP_ADVANCED_ROUTER is not set
 CONFIG_IP_PNP=y
-CONFIG_IP_PNP_DHCP=y
+# CONFIG_IP_PNP_DHCP is not set
 CONFIG_IP_PNP_BOOTP=y
-CONFIG_IP_PNP_RARP=y
+# CONFIG_IP_PNP_RARP is not set
 # CONFIG_NET_IPIP is not set
 # CONFIG_NET_IPGRE is not set
 # CONFIG_IP_MROUTE is not set
@@ -292,6 +294,12 @@
 # Ethernet (10000 Mbit)
 #
 # CONFIG_IXGB is not set
+CONFIG_IBM_EMAC=y
+# CONFIG_IBM_EMAC_ERRMSG is not set
+CONFIG_IBM_EMAC_RXB=64
+CONFIG_IBM_EMAC_TXB=8
+CONFIG_IBM_EMAC_FGAP=8
+CONFIG_IBM_EMAC_SKBRES=0
 # CONFIG_FDDI is not set
 # CONFIG_HIPPI is not set
 # CONFIG_PPP is not set
diff -Nru a/arch/ppc/kernel/entry.S b/arch/ppc/kernel/entry.S
--- a/arch/ppc/kernel/entry.S	Sun May 16 01:18:36 2004
+++ b/arch/ppc/kernel/entry.S	Sun May 16 01:18:36 2004
@@ -44,13 +44,41 @@
 #define LOAD_MSR_KERNEL(r, x)	li r,(x)
 #endif
 
-#ifdef CONFIG_4xx
+#ifdef CONFIG_BOOKE
+#define	COR	r8
+#define BOOKE_LOAD_COR	lis COR,crit_save@ha
+#define BOOKE_REST_COR	mfspr COR,SPRG2
+#define BOOKE_SAVE_COR	mtspr SPRG2,COR
+#else
+#define COR	0
+#define BOOKE_LOAD_COR
+#define BOOKE_REST_COR
+#define BOOKE_SAVE_COR
+#endif
+
+#ifdef CONFIG_BOOKE
+	.globl	mcheck_transfer_to_handler
+mcheck_transfer_to_handler:
+	mtspr	SPRG6W,r8
+	lis	r8,mcheck_save@ha
+	lwz	r0,mcheck_r10@l(r8)
+	stw	r0,GPR10(r11)
+	lwz	r0,mcheck_r11@l(r8)
+	stw	r0,GPR11(r11)
+	mfspr	r8,SPRG6R
+	b	transfer_to_handler_full
+#endif
+
+#if defined(CONFIG_40x) || defined(CONFIG_BOOKE)
 	.globl	crit_transfer_to_handler
 crit_transfer_to_handler:
-	lwz	r0,crit_r10@l(0)
+	BOOKE_SAVE_COR
+	BOOKE_LOAD_COR
+	lwz	r0,crit_r10@l(COR)
 	stw	r0,GPR10(r11)
-	lwz	r0,crit_r11@l(0)
+	lwz	r0,crit_r11@l(COR)
 	stw	r0,GPR11(r11)
+	BOOKE_REST_COR
 	/* fall through */
 #endif
 
@@ -82,7 +110,7 @@
 	beq	2f			/* if from user, fix up THREAD.regs */
 	addi	r11,r1,STACK_FRAME_OVERHEAD
 	stw	r11,PT_REGS(r12)
-#ifdef CONFIG_4xx
+#if defined(CONFIG_40x) || defined(CONFIG_BOOKE)
 	lwz	r12,PTRACE-THREAD(r12)
 	andi.	r12,r12,PT_PTRACED
 	beq+	3f
@@ -695,12 +723,14 @@
 	mtlr	r11
 	lwz	r10,_CCR(r1)
 	mtcrf	0xff,r10
+#ifdef CONFIG_40x
 	/* avoid any possible TLB misses here by turning off MSR.DR, we
 	 * assume the instructions here are mapped by a pinned TLB entry */
 	li	r10,MSR_IR
 	mtmsr	r10
 	isync
 	tophys(r1, r1)
+#endif
 	lwz	r9,_DEAR(r1)
 	lwz	r10,_ESR(r1)
 	mtspr	SPRN_DEAR,r9
@@ -711,30 +741,103 @@
 	mtspr	CSRR1,r12
 	lwz	r9,GPR9(r1)
 	lwz	r12,GPR12(r1)
-	lwz	r10,crit_sprg0@l(0)
+	BOOKE_SAVE_COR
+	BOOKE_LOAD_COR
+	lwz	r10,crit_sprg0@l(COR)
 	mtspr	SPRN_SPRG0,r10
-	lwz	r10,crit_sprg1@l(0)
+	lwz	r10,crit_sprg1@l(COR)
 	mtspr	SPRN_SPRG1,r10
-	lwz	r10,crit_sprg4@l(0)
+	lwz	r10,crit_sprg4@l(COR)
 	mtspr	SPRN_SPRG4,r10
-	lwz	r10,crit_sprg5@l(0)
+	lwz	r10,crit_sprg5@l(COR)
 	mtspr	SPRN_SPRG5,r10
-	lwz	r10,crit_sprg6@l(0)
+#ifdef CONFIG_40x
+	lwz	r10,crit_sprg6@l(COR)
 	mtspr	SPRN_SPRG6,r10
-	lwz	r10,crit_sprg7@l(0)
+#endif
+	lwz	r10,crit_sprg7@l(COR)
 	mtspr	SPRN_SPRG7,r10
-	lwz	r10,crit_srr0@l(0)
+	lwz	r10,crit_srr0@l(COR)
 	mtspr	SRR0,r10
-	lwz	r10,crit_srr1@l(0)
+	lwz	r10,crit_srr1@l(COR)
 	mtspr	SRR1,r10
-	lwz	r10,crit_pid@l(0)
+	lwz	r10,crit_pid@l(COR)
 	mtspr	SPRN_PID,r10
 	lwz	r10,GPR10(r1)
 	lwz	r11,GPR11(r1)
 	lwz	r1,GPR1(r1)
+	BOOKE_REST_COR
 	PPC405_ERR77_SYNC
 	rfci
 	b	.		/* prevent prefetch past rfci */
+
+#ifdef CONFIG_BOOKE
+/*
+ * Return from a machine check interrupt, similar to a critical
+ * interrupt.
+ */
+	.globl	ret_from_mcheck_exc
+ret_from_mcheck_exc:
+	REST_NVGPRS(r1)
+	lwz	r3,_MSR(r1)
+	andi.	r3,r3,MSR_PR
+	LOAD_MSR_KERNEL(r10,MSR_KERNEL)
+	bne	user_exc_return
+
+	lwz	r0,GPR0(r1)
+	lwz	r2,GPR2(r1)
+	REST_4GPRS(3, r1)
+	REST_2GPRS(7, r1)
+
+	lwz	r10,_XER(r1)
+	lwz	r11,_CTR(r1)
+	mtspr	XER,r10
+	mtctr	r11
+
+	stwcx.	r0,0,r1			/* to clear the reservation */
+
+	lwz	r11,_LINK(r1)
+	mtlr	r11
+	lwz	r10,_CCR(r1)
+	mtcrf	0xff,r10
+	lwz	r9,_DEAR(r1)
+	lwz	r10,_ESR(r1)
+	mtspr	SPRN_DEAR,r9
+	mtspr	SPRN_ESR,r10
+	lwz	r11,_NIP(r1)
+	lwz	r12,_MSR(r1)
+	mtspr	MCSRR0,r11
+	mtspr	MCSRR1,r12
+	lwz	r9,GPR9(r1)
+	lwz	r12,GPR12(r1)
+	mtspr	SPRG6W,r8
+	lis	r8,mcheck_save@ha
+	lwz	r10,mcheck_sprg0@l(r8)
+	mtspr	SPRN_SPRG0,r10
+	lwz	r10,mcheck_sprg1@l(r8)
+	mtspr	SPRN_SPRG1,r10
+	lwz	r10,mcheck_sprg4@l(r8)
+	mtspr	SPRN_SPRG4,r10
+	lwz	r10,mcheck_sprg5@l(r8)
+	mtspr	SPRN_SPRG5,r10
+	lwz	r10,mcheck_sprg7@l(r8)
+	mtspr	SPRN_SPRG7,r10
+	lwz	r10,mcheck_srr0@l(r8)
+	mtspr	SRR0,r10
+	lwz	r10,mcheck_srr1@l(r8)
+	mtspr	SRR1,r10
+	lwz	r10,mcheck_csrr0@l(r8)
+	mtspr	CSRR0,r10
+	lwz	r10,mcheck_csrr1@l(r8)
+	mtspr	CSRR1,r10
+	lwz	r10,mcheck_pid@l(r8)
+	mtspr	SPRN_PID,r10
+	lwz	r10,GPR10(r1)
+	lwz	r11,GPR11(r1)
+	lwz	r1,GPR1(r1)
+	mfspr	r8,SPRG6R
+	RFMCI
+#endif /* CONFIG_BOOKE */
 
 /*
  * Load the DBCR0 value for a task that is being ptraced,
diff -Nru a/arch/ppc/kernel/head_44x.S b/arch/ppc/kernel/head_44x.S
--- a/arch/ppc/kernel/head_44x.S	Sun May 16 01:18:34 2004
+++ b/arch/ppc/kernel/head_44x.S	Sun May 16 01:18:34 2004
@@ -313,7 +313,7 @@
 #define NORMAL_EXCEPTION_PROLOG						     \
 	mtspr	SPRN_SPRG0,r10;		/* save two registers to work with */\
 	mtspr	SPRN_SPRG1,r11;						     \
-	mtspr	SPRN_SPRG2,r1;						     \
+	mtspr	SPRN_SPRG4W,r1;						     \
 	mfcr	r10;			/* save CR in r10 for now	   */\
 	mfspr	r11,SPRN_SRR1;		/* check whether user or kernel    */\
 	andi.	r11,r11,MSR_PR;						     \
@@ -332,7 +332,7 @@
 	stw	r12,GPR11(r11);						     \
 	mflr	r10;							     \
 	stw	r10,_LINK(r11);						     \
-	mfspr	r10,SPRG2;						     \
+	mfspr	r10,SPRG4R;						     \
 	mfspr	r12,SRR0;						     \
 	stw	r10,GPR1(r11);						     \
 	mfspr	r9,SRR1;						     \
@@ -348,30 +348,34 @@
  * can potentially occur at any point during normal exception processing.
  * Thus we cannot use the same SPRG registers as the normal prolog above.
  * Instead we use a couple of words of memory at low physical addresses.
- * This is OK since we don't support SMP on these processors.
+ * This is OK since we don't support SMP on these processors. For Book E
+ * processors, we also have a reserved register (SPRG2) that is only used
+ * in critical exceptions so we can free up a GPR to use as the base for
+ * indirect access to the critical exception save area.  This is necessary
+ * since the MMU is always on and the save area is offset from KERNELBASE.
  */
-/* XXX but we don't have RAM mapped at 0 in space 0  -- paulus. */
 #define CRITICAL_EXCEPTION_PROLOG					     \
-	stw	r10,crit_r10@l(0);	/* save two registers to work with */\
-	stw	r11,crit_r11@l(0);					     \
+	mtspr	SPRG2,r8;		/* SPRG2 only used in criticals */   \
+	lis	r8,crit_save@ha;					     \
+	stw	r10,crit_r10@l(r8);					     \
+	stw	r11,crit_r11@l(r8);					     \
 	mfspr	r10,SPRG0;						     \
-	stw	r10,crit_sprg0@l(0);					     \
+	stw	r10,crit_sprg0@l(r8);					     \
 	mfspr	r10,SPRG1;						     \
-	stw	r10,crit_sprg1@l(0);					     \
+	stw	r10,crit_sprg1@l(r8);					     \
 	mfspr	r10,SPRG4R;						     \
-	stw	r10,crit_sprg4@l(0);					     \
+	stw	r10,crit_sprg4@l(r8);					     \
 	mfspr	r10,SPRG5R;						     \
-	stw	r10,crit_sprg5@l(0);					     \
-	mfspr	r10,SPRG6R;						     \
-	stw	r10,crit_sprg6@l(0);					     \
+	stw	r10,crit_sprg5@l(r8);					     \
 	mfspr	r10,SPRG7R;						     \
-	stw	r10,crit_sprg7@l(0);					     \
+	stw	r10,crit_sprg7@l(r8);					     \
 	mfspr	r10,SPRN_PID;						     \
-	stw	r10,crit_pid@l(0);					     \
+	stw	r10,crit_pid@l(r8);					     \
 	mfspr	r10,SRR0;						     \
-	stw	r10,crit_srr0@l(0);					     \
+	stw	r10,crit_srr0@l(r8);					     \
 	mfspr	r10,SRR1;						     \
-	stw	r10,crit_srr1@l(0);					     \
+	stw	r10,crit_srr1@l(r8);					     \
+	mfspr	r8,SPRG2;		/* SPRG2 only used in criticals */   \
 	mfcr	r10;			/* save CR in r10 for now	   */\
 	mfspr	r11,SPRN_CSRR1;		/* check whether user or kernel    */\
 	andi.	r11,r11,MSR_PR;						     \
@@ -383,7 +387,6 @@
 	lwz	r11,THREAD_INFO-THREAD(r11); /* this thread's kernel stack */\
 	addi	r11,r11,THREAD_SIZE;					     \
 1:	subi	r11,r11,INT_FRAME_SIZE;	/* Allocate an exception frame     */\
-	tophys(r11,r11);						     \
 	stw	r10,_CCR(r11);          /* save various registers	   */\
 	stw	r12,GPR12(r11);						     \
 	stw	r9,GPR9(r11);						     \
@@ -404,6 +407,71 @@
 	SAVE_2GPRS(7, r11)
 
 /*
+ * Exception prolog for machine check exceptions.  This is similar to
+ * the critical exception prolog, except that machine check exceptions
+ * have their own save area.  For Book E processors, we also have a
+ * reserved register (SPRG6) that is only used in machine check exceptions
+ * so we can free up a GPR to use as the base for indirect access to the
+ * machine check exception save area.  This is necessary since the MMU
+ * is always on and the save area is offset from KERNELBASE.
+ */
+#define MCHECK_EXCEPTION_PROLOG					     \
+	mtspr	SPRG6W,r8;		/* SPRG6 used in machine checks */   \
+	lis	r8,mcheck_save@ha;					     \
+	stw	r10,mcheck_r10@l(r8);					     \
+	stw	r11,mcheck_r11@l(r8);					     \
+	mfspr	r10,SPRG0;						     \
+	stw	r10,mcheck_sprg0@l(r8);					     \
+	mfspr	r10,SPRG1;						     \
+	stw	r10,mcheck_sprg1@l(r8);					     \
+	mfspr	r10,SPRG4R;						     \
+	stw	r10,mcheck_sprg4@l(r8);					     \
+	mfspr	r10,SPRG5R;						     \
+	stw	r10,mcheck_sprg5@l(r8);					     \
+	mfspr	r10,SPRG7R;						     \
+	stw	r10,mcheck_sprg7@l(r8);					     \
+	mfspr	r10,SPRN_PID;						     \
+	stw	r10,mcheck_pid@l(r8);					     \
+	mfspr	r10,SRR0;						     \
+	stw	r10,mcheck_srr0@l(r8);					     \
+	mfspr	r10,SRR1;						     \
+	stw	r10,mcheck_srr1@l(r8);					     \
+	mfspr	r10,CSRR0;						     \
+	stw	r10,mcheck_csrr0@l(r8);					     \
+	mfspr	r10,CSRR1;						     \
+	stw	r10,mcheck_csrr1@l(r8);					     \
+	mfspr	r8,SPRG6R;		/* SPRG6 used in machine checks */   \
+	mfcr	r10;			/* save CR in r10 for now	   */\
+	mfspr	r11,SPRN_MCSRR1;	/* check whether user or kernel    */\
+	andi.	r11,r11,MSR_PR;						     \
+	lis	r11,mcheck_stack_top@h;					     \
+	ori	r11,r11,mcheck_stack_top@l;				     \
+	beq	1f;							     \
+	/* COMING FROM USER MODE */					     \
+	mfspr	r11,SPRG3;		/* if from user, start at top of   */\
+	lwz	r11,THREAD_INFO-THREAD(r11); /* this thread's kernel stack */\
+	addi	r11,r11,THREAD_SIZE;					     \
+1:	subi	r11,r11,INT_FRAME_SIZE;	/* Allocate an exception frame     */\
+	stw	r10,_CCR(r11);          /* save various registers	   */\
+	stw	r12,GPR12(r11);						     \
+	stw	r9,GPR9(r11);						     \
+	mflr	r10;							     \
+	stw	r10,_LINK(r11);						     \
+	mfspr	r12,SPRN_DEAR;		/* save DEAR and ESR in the frame  */\
+	stw	r12,_DEAR(r11);		/* since they may have had stuff   */\
+	mfspr	r9,SPRN_ESR;		/* in them at the point where the  */\
+	stw	r9,_ESR(r11);		/* exception was taken		   */\
+	mfspr	r12,MCSRR0;						     \
+	stw	r1,GPR1(r11);						     \
+	mfspr	r9,MCSRR1;						     \
+	stw	r1,0(r11);						     \
+	tovirt(r1,r11);							     \
+	rlwinm	r9,r9,0,14,12;		/* clear MSR_WE (necessary?)	   */\
+	stw	r0,GPR0(r11);						     \
+	SAVE_4GPRS(3, r11);						     \
+	SAVE_2GPRS(7, r11)
+
+/*
  * Exception vectors.
  */
 #define	START_EXCEPTION(label)						     \
@@ -429,6 +497,18 @@
 			  NOCOPY, transfer_to_handler_full, \
 			  ret_from_except_full)
 
+#define MCHECK_EXCEPTION(n, label, hdlr)			\
+	START_EXCEPTION(label);					\
+	MCHECK_EXCEPTION_PROLOG;				\
+	lis	r4,MCSR_MCS@h;					\
+	mtspr	SPRN_MCSR,r4;					\
+	mfspr	r5,SPRN_ESR;					\
+	stw	r5,_ESR(r11);					\
+	addi	r3,r1,STACK_FRAME_OVERHEAD;			\
+	EXC_XFER_TEMPLATE(hdlr, n+2, (MSR_KERNEL & ~(MSR_ME|MSR_DE|MSR_CE)), \
+			  NOCOPY, mcheck_transfer_to_handler,   \
+			  ret_from_mcheck_exc)
+
 #define EXC_XFER_TEMPLATE(hdlr, trap, msr, copyee, tfer, ret)	\
 	li	r10,trap;					\
 	stw	r10,TRAP(r11);					\
@@ -463,7 +543,11 @@
 	CRITICAL_EXCEPTION(0x0100, CriticalInput, UnknownException)
 
 	/* Machine Check Interrupt */
+#ifdef CONFIG_440A
+	MCHECK_EXCEPTION(0x0200, MachineCheck, MachineCheckException)
+#else
 	CRITICAL_EXCEPTION(0x0200, MachineCheck, MachineCheckException)
+#endif
 
 	/* Data Storage Interrupt */
 	START_EXCEPTION(DataStorage)
@@ -471,7 +555,6 @@
 	mtspr	SPRG1, r11
 	mtspr	SPRG4W, r12
 	mtspr	SPRG5W, r13
-	mtspr	SPRG6W, r14
 	mfcr	r11
 	mtspr	SPRG7W, r11
 
@@ -544,15 +627,14 @@
 	rlwinm	r11,r11,0,20,15		/* Clear U0-U3 */
 
 	/* find the TLB index that caused the fault.  It has to be here. */
-	tlbsx	r14, 0, r10
+	tlbsx	r10, 0, r10
 
-	tlbwe	r11, r14, PPC44x_TLB_ATTRIB	/* Write ATTRIB */
+	tlbwe	r11, r10, PPC44x_TLB_ATTRIB	/* Write ATTRIB */
 
 	/* Done...restore registers and get out of here.
 	*/
 	mfspr	r11, SPRG7R
 	mtcr	r11
-	mfspr	r14, SPRG6R
 	mfspr	r13, SPRG5R
 	mfspr	r12, SPRG4R
 
@@ -567,7 +649,6 @@
 	 */
 	mfspr	r11, SPRG7R
 	mtcr	r11
-	mfspr	r14, SPRG6R
 	mfspr	r13, SPRG5R
 	mfspr	r12, SPRG4R
 
@@ -635,7 +716,6 @@
 	mtspr	SPRG1, r11
 	mtspr	SPRG4W, r12
 	mtspr	SPRG5W, r13
-	mtspr	SPRG6W, r14
 	mfcr	r11
 	mtspr	SPRG7W, r11
 	mfspr	r10, SPRN_DEAR		/* Get faulting address */
@@ -688,7 +768,6 @@
 	 */
 	mfspr	r11, SPRG7R
 	mtcr	r11
-	mfspr	r14, SPRG6R
 	mfspr	r13, SPRG5R
 	mfspr	r12, SPRG4R
 	mfspr	r11, SPRG1
@@ -706,7 +785,6 @@
 	mtspr	SPRG1, r11
 	mtspr	SPRG4W, r12
 	mtspr	SPRG5W, r13
-	mtspr	SPRG6W, r14
 	mfcr	r11
 	mtspr	SPRG7W, r11
 	mfspr	r10, SRR0		/* Get faulting address */
@@ -759,7 +837,6 @@
 	 */
 	mfspr	r11, SPRG7R
 	mtcr	r11
-	mfspr	r14, SPRG6R
 	mfspr	r13, SPRG5R
 	mfspr	r12, SPRG4R
 	mfspr	r11, SPRG1
@@ -780,61 +857,50 @@
  * the MSR_DE bit set.
  */
 	/* Debug Interrupt */
-	CRITICAL_EXCEPTION(0x2000, Debug, DebugException)
-#if 0
 	START_EXCEPTION(Debug)
-	/* This first instruction was already executed by the exception
-	 * handler and must be the first instruction of every exception
-	 * handler.
-	 */
-	mtspr	SPRN_SPRG0,r10		/* Save some working registers... */
-	mtspr	SPRN_SPRG1,r11
-	mtspr	SPRN_SPRG4W,r12
-	mfcr	r10			/* ..and the cr because we change it */
-
-	mfspr   r11,SPRN_CSRR1		/* MSR at the time of fault */
-	andi.   r11,r11,MSR_PR
-	bne+    2f			/* trapped from problem state */
-
-	mfspr   r11,SPRN_CSRR0		/* Faulting instruction address */
-	lis	r12, KERNELBASE@h
-	ori	r12, r12, KERNELBASE@l
-	cmplw   r11,r12
-	blt+    2f			/* addr below exception vectors */
-
-	lis	r12, Debug@h
-	ori	r12, r12, Debug@l
-	cmplw   r11,r12
-	bgt+    2f			/* addr above TLB exception vectors */
-
-	lis     r11,DBSR_IC@h           /* Remove the trap status */
-	mtspr   SPRN_DBSR,r11
-
-	mfspr	r11,SPRN_CSRR1
-	rlwinm	r11,r11,0,23,21		/* clear MSR_DE */
-	mtspr	SPRN_CSRR1, r11		/* restore MSR at rcfi without DE */
-
-	mtcrf   0xff,r10                /* restore registers */
-	mfspr	r12,SPRN_SPRG4R
-	mfspr   r11,SPRN_SPRG1
-	mfspr   r10,SPRN_SPRG0
-
-	sync
-	rfci                            /* return to the exception handler  */
-	b	.			/* prevent prefetch past rfci */
+	CRITICAL_EXCEPTION_PROLOG
 
-2:
-	mtcrf   0xff,r10                /* restore registers */
-	mfspr   r12,SPRN_SPRG4R
-	mfspr   r11,SPRN_SPRG1
-	mfspr   r10,SPRN_SPRG0
+	/*
+	 * If this is a single step or branch-taken exception in an
+	 * exception entry sequence, it was probably meant to apply to
+	 * the code where the exception occurred (since exception entry
+	 * doesn't turn off DE automatically).  We simulate the effect
+	 * of turning off DE on entry to an exception handler by turning
+	 * off DE in the CSRR1 value and clearing the debug status.
+	 */
+	mfspr	r10,SPRN_DBSR		/* check single-step/branch taken */
+	andis.	r10,r10,(DBSR_IC|DBSR_BT)@h
+	beq+	1f
+	andi.	r0,r9,MSR_PR		/* check supervisor */
+	beq	2f			/* branch if we need to fix it up... */
 
-	CRIT_EXCEPTION_PROLOG
+	/* continue normal handling for a critical exception... */
+1:	mfspr	r4,SPRN_DBSR
 	addi	r3,r1,STACK_FRAME_OVERHEAD
-	li	r7,CRIT_EXC;
-        li      r9,MSR_KERNEL
-	FINISH_EXCEPTION(DebugException)
-#endif
+	EXC_XFER_TEMPLATE(DebugException, 0x2002, \
+		(MSR_KERNEL & ~(MSR_ME|MSR_DE|MSR_CE)), \
+		NOCOPY, crit_transfer_to_handler, ret_from_crit_exc)
+
+	/* here it looks like we got an inappropriate debug exception. */
+2:	rlwinm	r9,r9,0,~MSR_DE		/* clear DE in the CSRR1 value */
+	mtspr	SPRN_DBSR,r10		/* clear the IC/BT debug intr status */
+	/* restore state and get out */
+	lwz	r10,_CCR(r11)
+	lwz	r0,GPR0(r11)
+	lwz	r1,GPR1(r11)
+	mtcrf	0x80,r10
+	mtspr	CSRR0,r12
+	mtspr	CSRR1,r9
+	lwz	r9,GPR9(r11)
+
+	mtspr	SPRG2,r8;		/* SPRG2 only used in criticals */
+	lis	r8,crit_save@ha;
+	lwz	r10,crit_r10@l(r8)
+	lwz	r11,crit_r11@l(r8)
+	mfspr	r8,SPRG2
+
+	rfci
+	b	.
 
 /*
  * Local functions
@@ -860,7 +926,6 @@
  * 	r11 - available to use
  *	r12 - Pointer to the 64-bit PTE
  *	r13 - available to use
- *	r14 - available to use
  *	MMUCR - loaded with proper value when we get here
  *	Upon exit, we reload everything and RFI.
  */
@@ -875,51 +940,50 @@
 
 	/* Load the next available TLB index */
 	lis	r13, tlb_44x_index@ha
-	lwz	r14, tlb_44x_index@l(r13)
+	lwz	r13, tlb_44x_index@l(r13)
 	/* Load the TLB high watermark */
-	lis	r13, tlb_44x_hwater@ha
-	lwz	r11, tlb_44x_hwater@l(r13)
+	lis	r11, tlb_44x_hwater@ha
+	lwz	r11, tlb_44x_hwater@l(r11)
 
 	/* Increment, rollover, and store TLB index */
-	addi	r14, r14, 1
-	cmpw	0, r14, r11			/* reserve entries */
+	addi	r13, r13, 1
+	cmpw	0, r13, r11			/* reserve entries */
 	ble	7f
-	li	r14, 0
+	li	r13, 0
 7:
 	/* Store the next available TLB index */
-	lis	r13, tlb_44x_index@ha
-	stw	r14, tlb_44x_index@l(r13)
+	lis	r11, tlb_44x_index@ha
+	stw	r13, tlb_44x_index@l(r11)
 
-	lwz	r13, 0(r12)			/* Get MS word of PTE */
-	lwz	r11, 4(r12)			/* Get LS word of PTE */
-	rlwimi	r13, r11, 0, 0 , 19		/* Insert RPN */
-	tlbwe	r13, r14, PPC44x_TLB_XLAT	/* Write XLAT */
+	lwz	r11, 0(r12)			/* Get MS word of PTE */
+	lwz	r12, 4(r12)			/* Get LS word of PTE */
+	rlwimi	r11, r12, 0, 0 , 19		/* Insert RPN */
+	tlbwe	r11, r13, PPC44x_TLB_XLAT	/* Write XLAT */
 
 	/*
 	 * Create PAGEID. This is the faulting address,
 	 * page size, and valid flag.
 	 */
-	li	r12, PPC44x_TLB_VALID | PPC44x_TLB_4K
-	rlwimi	r10, r12, 0, 20, 31		/* Insert valid and page size */
-	tlbwe	r10, r14, PPC44x_TLB_PAGEID	/* Write PAGEID */
-
-	li	r13, PPC44x_TLB_SR@l		/* Set SR */
-	rlwimi	r13, r11, 0, 30, 30		/* Set SW = _PAGE_RW */
-	rlwimi	r13, r11, 29, 29, 29		/* SX = _PAGE_HWEXEC */
-	rlwimi	r13, r11, 29, 28, 28		/* UR = _PAGE_USER */
-	rlwimi	r12, r11, 31, 26, 26		/* (_PAGE_USER>>1)->r12 */
-	and	r12, r12, r11			/* HWEXEC & USER */
-	rlwimi	r13, r12, 0, 26, 26		/* UX = HWEXEC & USER */
-
-	rlwimi	r11, r13, 0, 26, 31		/* Insert static perms */
-	rlwinm	r11, r11, 0, 20, 15		/* Clear U0-U3 */
-	tlbwe	r11, r14, PPC44x_TLB_ATTRIB	/* Write ATTRIB */
+	li	r11, PPC44x_TLB_VALID | PPC44x_TLB_4K
+	rlwimi	r10, r11, 0, 20, 31		/* Insert valid and page size */
+	tlbwe	r10, r13, PPC44x_TLB_PAGEID	/* Write PAGEID */
+
+	li	r10, PPC44x_TLB_SR@l		/* Set SR */
+	rlwimi	r10, r12, 0, 30, 30		/* Set SW = _PAGE_RW */
+	rlwimi	r10, r12, 29, 29, 29		/* SX = _PAGE_HWEXEC */
+	rlwimi	r10, r12, 29, 28, 28		/* UR = _PAGE_USER */
+	rlwimi	r11, r12, 31, 26, 26		/* (_PAGE_USER>>1)->r12 */
+	and	r11, r12, r11			/* HWEXEC & USER */
+	rlwimi	r10, r11, 0, 26, 26		/* UX = HWEXEC & USER */
+
+	rlwimi	r12, r10, 0, 26, 31		/* Insert static perms */
+	rlwinm	r12, r12, 0, 20, 15		/* Clear U0-U3 */
+	tlbwe	r12, r13, PPC44x_TLB_ATTRIB	/* Write ATTRIB */
 
 	/* Done...restore registers and get out of here.
 	*/
 	mfspr	r11, SPRG7R
 	mtcr	r11
-	mfspr	r14, SPRG6R
 	mfspr	r13, SPRG5R
 	mfspr	r12, SPRG4R
 	mfspr	r11, SPRG1
@@ -985,32 +1049,30 @@
 _GLOBAL(swapper_pg_dir)
 	.space	8192
 
-/* Stack for handling critical exceptions from kernel mode */
 	.section .bss
+/* Stack for handling critical exceptions from kernel mode */
 critical_stack_bottom:
 	.space 4096
 critical_stack_top:
 	.previous
 
-/*
- * This space gets a copy of optional info passed to us by the bootstrap
- * which is used to pass parameters into the kernel like root=/dev/sda1, etc.
- */
-_GLOBAL(cmd_line)
-	.space	512
-
-/*
- * Room for two PTE pointers, usually the kernel and current user pointers
- * to their respective root page table.
- */
-abatron_pteptrs:
-	.space	8
+/* Stack for handling machine check exceptions from kernel mode */
+mcheck_stack_bottom:
+	.space 4096
+mcheck_stack_top:
+	.previous
 
 /*
  * This area is used for temporarily saving registers during the
- * critical exception prolog.
+ * critical and machine check exception prologs. It must always
+ * follow the page aligned allocations, so it starts on a page
+ * boundary, ensuring that all crit_save areas are in a single
+ * page.
  */
-crit_save:
+
+/* crit_save */
+_GLOBAL(crit_save)
+	.space  4
 _GLOBAL(crit_r10)
 	.space	4
 _GLOBAL(crit_r11)
@@ -1023,8 +1085,6 @@
 	.space	4
 _GLOBAL(crit_sprg5)
 	.space	4
-_GLOBAL(crit_sprg6)
-	.space	4
 _GLOBAL(crit_sprg7)
 	.space	4
 _GLOBAL(crit_pid)
@@ -1033,3 +1093,47 @@
 	.space	4
 _GLOBAL(crit_srr1)
 	.space	4
+
+/* mcheck_save */
+_GLOBAL(mcheck_save)
+	.space  4
+_GLOBAL(mcheck_r10)
+	.space	4
+_GLOBAL(mcheck_r11)
+	.space	4
+_GLOBAL(mcheck_sprg0)
+	.space	4
+_GLOBAL(mcheck_sprg1)
+	.space	4
+_GLOBAL(mcheck_sprg4)
+	.space	4
+_GLOBAL(mcheck_sprg5)
+	.space	4
+_GLOBAL(mcheck_sprg7)
+	.space	4
+_GLOBAL(mcheck_pid)
+	.space	4
+_GLOBAL(mcheck_srr0)
+	.space	4
+_GLOBAL(mcheck_srr1)
+	.space	4
+_GLOBAL(mcheck_csrr0)
+	.space	4
+_GLOBAL(mcheck_csrr1)
+	.space	4
+
+/*
+ * This space gets a copy of optional info passed to us by the bootstrap
+ * which is used to pass parameters into the kernel like root=/dev/sda1, etc.
+ */
+_GLOBAL(cmd_line)
+	.space	512
+
+/*
+ * Room for two PTE pointers, usually the kernel and current user pointers
+ * to their respective root page table.
+ */
+abatron_pteptrs:
+	.space	8
+
+
diff -Nru a/arch/ppc/kernel/misc.S b/arch/ppc/kernel/misc.S
--- a/arch/ppc/kernel/misc.S	Sun May 16 01:18:36 2004
+++ b/arch/ppc/kernel/misc.S	Sun May 16 01:18:36 2004
@@ -780,9 +780,18 @@
 _GLOBAL(copy_page)
 	addi	r3,r3,-4
 	addi	r4,r4,-4
+
+#ifdef CONFIG_8xx
+	/* don't use prefetch on 8xx */
+    	li	r0,4096/L1_CACHE_LINE_SIZE
+	mtctr	r0
+1:	COPY_16_BYTES
+	bdnz	1b
+	blr
+
+#else	/* not 8xx, we can prefetch */
 	li	r5,4
 
-#ifndef CONFIG_8xx
 #if MAX_COPY_PREFETCH > 1
 	li	r0,MAX_COPY_PREFETCH
 	li	r11,4
@@ -790,19 +799,17 @@
 11:	dcbt	r11,r4
 	addi	r11,r11,L1_CACHE_LINE_SIZE
 	bdnz	11b
-#else /* MAX_L1_COPY_PREFETCH == 1 */
+#else /* MAX_COPY_PREFETCH == 1 */
 	dcbt	r5,r4
 	li	r11,L1_CACHE_LINE_SIZE+4
-#endif /* MAX_L1_COPY_PREFETCH */
-#endif /* CONFIG_8xx */
-
-	li	r0,4096/L1_CACHE_LINE_SIZE
+#endif /* MAX_COPY_PREFETCH */
+	li	r0,4096/L1_CACHE_LINE_SIZE - MAX_COPY_PREFETCH
+	crclr	4*cr0+eq
+2:
 	mtctr	r0
 1:
-#ifndef CONFIG_8xx
 	dcbt	r11,r4
 	dcbz	r5,r3
-#endif
 	COPY_16_BYTES
 #if L1_CACHE_LINE_SIZE >= 32
 	COPY_16_BYTES
@@ -818,7 +825,12 @@
 #endif
 #endif
 	bdnz	1b
-	blr
+	beqlr
+	crnot	4*cr0+eq,4*cr0+eq
+	li	r0,MAX_COPY_PREFETCH
+	li	r11,4
+	b	2b
+#endif	/* CONFIG_8xx */
 
 /*
  * void atomic_clear_mask(atomic_t mask, atomic_t *addr)
diff -Nru a/arch/ppc/kernel/ppc_ksyms.c b/arch/ppc/kernel/ppc_ksyms.c
--- a/arch/ppc/kernel/ppc_ksyms.c	Sun May 16 01:18:36 2004
+++ b/arch/ppc/kernel/ppc_ksyms.c	Sun May 16 01:18:36 2004
@@ -72,7 +72,7 @@
 
 extern unsigned long mm_ptov (unsigned long paddr);
 
-EXPORT_SYMBOL(clear_page);
+EXPORT_SYMBOL(clear_pages);
 EXPORT_SYMBOL(clear_user_page);
 EXPORT_SYMBOL(do_signal);
 EXPORT_SYMBOL(do_syscall_trace);
@@ -336,7 +336,7 @@
 EXPORT_SYMBOL(cpm_install_handler);
 EXPORT_SYMBOL(cpm_free_handler);
 #endif /* CONFIG_8xx */
-#if defined(CONFIG_8xx) || defined(CONFIG_4xx)
+#if defined(CONFIG_8xx) || defined(CONFIG_40x)
 EXPORT_SYMBOL(__res);
 #endif
 #if defined(CONFIG_8xx)
diff -Nru a/arch/ppc/kernel/process.c b/arch/ppc/kernel/process.c
--- a/arch/ppc/kernel/process.c	Sun May 16 01:18:35 2004
+++ b/arch/ppc/kernel/process.c	Sun May 16 01:18:35 2004
@@ -668,12 +668,6 @@
 }
 #endif
 
-/*
- * These bracket the sleeping functions..
- */
-#define first_sched    ((unsigned long) scheduling_functions_start_here)
-#define last_sched     ((unsigned long) scheduling_functions_end_here)
-
 unsigned long get_wchan(struct task_struct *p)
 {
 	unsigned long ip, sp;
@@ -688,7 +682,7 @@
 			return 0;
 		if (count > 0) {
 			ip = *(unsigned long *)(sp + 4);
-			if (ip < first_sched || ip >= last_sched)
+			if (!in_sched_functions(ip))
 				return ip;
 		}
 	} while (count++ < 16);
diff -Nru a/arch/ppc/kernel/setup.c b/arch/ppc/kernel/setup.c
--- a/arch/ppc/kernel/setup.c	Sun May 16 01:18:36 2004
+++ b/arch/ppc/kernel/setup.c	Sun May 16 01:18:36 2004
@@ -37,6 +37,7 @@
 #include <asm/sections.h>
 #include <asm/nvram.h>
 #include <asm/xmon.h>
+#include <asm/ocp.h>
 
 #if defined CONFIG_KGDB
 #include <asm/kgdb.h>
@@ -682,6 +683,12 @@
 	/* set up the bootmem stuff with available memory */
 	do_init_bootmem();
 	if ( ppc_md.progress ) ppc_md.progress("setup_arch: bootmem", 0x3eab);
+
+#ifdef CONFIG_PPC_OCP
+	/* Initialize OCP device list */
+	ocp_early_init();
+	if ( ppc_md.progress ) ppc_md.progress("ocp: exit", 0x3eab);
+#endif
 
 	ppc_md.setup_arch();
 	if ( ppc_md.progress ) ppc_md.progress("arch: exit", 0x3eab);
diff -Nru a/arch/ppc/kernel/smp.c b/arch/ppc/kernel/smp.c
--- a/arch/ppc/kernel/smp.c	Sun May 16 01:18:36 2004
+++ b/arch/ppc/kernel/smp.c	Sun May 16 01:18:36 2004
@@ -211,6 +211,8 @@
            bitmask. --RR */
 	if (num_online_cpus() <= 1)
 		return 0;
+	/* Can deadlock when called with interrupts disabled */
+	WARN_ON(irqs_disabled());
 	return __smp_call_function(func, info, wait, MSG_ALL_BUT_SELF);
 }
 
diff -Nru a/arch/ppc/kernel/traps.c b/arch/ppc/kernel/traps.c
--- a/arch/ppc/kernel/traps.c	Sun May 16 01:18:34 2004
+++ b/arch/ppc/kernel/traps.c	Sun May 16 01:18:34 2004
@@ -41,9 +41,6 @@
 #include <asm/backlight.h>
 #endif
 
-extern int fix_alignment(struct pt_regs *);
-extern void bad_page_fault(struct pt_regs *, unsigned long, int sig);
-
 #ifdef CONFIG_XMON
 void (*debugger)(struct pt_regs *regs) = xmon;
 int (*debugger_bpt)(struct pt_regs *regs) = xmon_bpt;
@@ -222,14 +219,43 @@
 	if (check_io_access(regs))
 		return;
 
-#ifdef CONFIG_4xx
+#if defined(CONFIG_4xx) && !defined(CONFIG_440A)
 	if (reason & ESR_IMCP) {
 		printk("Instruction");
 		mtspr(SPRN_ESR, reason & ~ESR_IMCP);
 	} else
 		printk("Data");
 	printk(" machine check in kernel mode.\n");
+#elif defined(CONFIG_440A)
+	printk("Machine check in kernel mode.\n");
+	if (reason & ESR_IMCP){
+		printk("Instruction Synchronous Machine Check exception\n");
+		mtspr(SPRN_ESR, reason & ~ESR_IMCP);
+	}
+	else {
+		u32 mcsr = mfspr(SPRN_MCSR);
+		if (mcsr & MCSR_IB)
+			printk("Instruction Read PLB Error\n");
+		if (mcsr & MCSR_DRB)
+			printk("Data Read PLB Error\n");
+		if (mcsr & MCSR_DWB)
+			printk("Data Write PLB Error\n");
+		if (mcsr & MCSR_TLBP)
+			printk("TLB Parity Error\n");
+		if (mcsr & MCSR_ICP){
+			flush_instruction_cache();
+			printk("I-Cache Parity Error\n");
+		}
+		if (mcsr & MCSR_DCSP)
+			printk("D-Cache Search Parity Error\n");
+		if (mcsr & MCSR_DCFP)
+			printk("D-Cache Flush Parity Error\n");
+		if (mcsr & MCSR_IMPE)
+			printk("Machine Check exception is imprecise\n");
 
+		/* Clear MCSR */
+		mtspr(SPRN_MCSR, mcsr);
+	}
 #else /* !CONFIG_4xx */
 	printk("Machine check in kernel mode.\n");
 	printk("Caused by (from SRR1=%lx): ", reason);
diff -Nru a/arch/ppc/lib/string.S b/arch/ppc/lib/string.S
--- a/arch/ppc/lib/string.S	Sun May 16 01:18:35 2004
+++ b/arch/ppc/lib/string.S	Sun May 16 01:18:35 2004
@@ -436,48 +436,57 @@
 73:	stwu	r9,4(r6)
 	bdnz	72b
 
+	.section __ex_table,"a"
+	.align	2
+	.long	70b,100f
+	.long	71b,101f
+	.long	72b,102f
+	.long	73b,103f
+	.text
+
 58:	srwi.	r0,r5,LG_CACHELINE_BYTES /* # complete cachelines */
 	clrlwi	r5,r5,32-LG_CACHELINE_BYTES
 	li	r11,4
 	beq	63f
 
-#if !defined(CONFIG_8xx)
+#ifdef CONFIG_8xx
+	/* Don't use prefetch on 8xx */
+	mtctr	r0
+53:	COPY_16_BYTES_WITHEX(0)
+	bdnz	53b
+
+#else /* not CONFIG_8xx */
 	/* Here we decide how far ahead to prefetch the source */
+	li	r3,4
+	cmpwi	r0,1
+	li	r7,0
+	ble	114f
+	li	r7,1
 #if MAX_COPY_PREFETCH > 1
 	/* Heuristically, for large transfers we prefetch
 	   MAX_COPY_PREFETCH cachelines ahead.  For small transfers
 	   we prefetch 1 cacheline ahead. */
 	cmpwi	r0,MAX_COPY_PREFETCH
-	li	r7,1
-	li	r3,4
-	ble	111f
+	ble	112f
 	li	r7,MAX_COPY_PREFETCH
-111:	mtctr	r7
-112:	dcbt	r3,r4
+112:	mtctr	r7
+111:	dcbt	r3,r4
 	addi	r3,r3,CACHELINE_BYTES
-	bdnz	112b
-#else /* MAX_COPY_PREFETCH == 1 */
-	li	r3,CACHELINE_BYTES + 4
-	dcbt	r11,r4
-#endif /* MAX_COPY_PREFETCH */
-#endif /* CONFIG_8xx */
-
-	mtctr	r0
-53:
-#if !defined(CONFIG_8xx)
+	bdnz	111b
+#else
 	dcbt	r3,r4
+	addi	r3,r3,CACHELINE_BYTES
+#endif /* MAX_COPY_PREFETCH > 1 */
+
+114:	subf	r8,r7,r0
+	mr	r0,r7
+	mtctr	r8
+
+53:	dcbt	r3,r4
 54:	dcbz	r11,r6
-#endif
-/* had to move these to keep extable in order */
 	.section __ex_table,"a"
 	.align	2
-	.long	70b,100f
-	.long	71b,101f
-	.long	72b,102f
-	.long	73b,103f
-#if !defined(CONFIG_8xx)
 	.long	54b,105f
-#endif
 	.text
 /* the main body of the cacheline loop */
 	COPY_16_BYTES_WITHEX(0)
@@ -495,6 +504,11 @@
 #endif
 #endif
 	bdnz	53b
+	cmpwi	r0,0
+	li	r3,4
+	li	r7,0
+	bne	114b
+#endif /* CONFIG_8xx */
 
 63:	srwi.	r0,r5,2
 	mtctr	r0
diff -Nru a/arch/ppc/mm/fault.c b/arch/ppc/mm/fault.c
--- a/arch/ppc/mm/fault.c	Sun May 16 01:18:34 2004
+++ b/arch/ppc/mm/fault.c	Sun May 16 01:18:34 2004
@@ -51,11 +51,6 @@
 unsigned long pte_errors;	/* updated by do_page_fault() */
 unsigned int probingmem;
 
-extern void die_if_kernel(char *, struct pt_regs *, long);
-void bad_page_fault(struct pt_regs *, unsigned long, int sig);
-void do_page_fault(struct pt_regs *, unsigned long, unsigned long);
-extern int get_pteptr(struct mm_struct *mm, unsigned long addr, pte_t **ptep);
-
 /*
  * Check whether the instruction at regs->nip is a store using
  * an update addressing form which will update r1.
@@ -227,8 +222,7 @@
 			struct page *page = pte_page(*ptep);
 
 			if (! test_bit(PG_arch_1, &page->flags)) {
-				unsigned long phys = page_to_pfn(page) << PAGE_SHIFT;
-				__flush_dcache_icache_phys(phys);
+				flush_dcache_icache_page(page);
 				set_bit(PG_arch_1, &page->flags);
 			}
 			pte_update(ptep, 0, _PAGE_HWEXEC);
@@ -332,7 +326,6 @@
 void
 bad_page_fault(struct pt_regs *regs, unsigned long address, int sig)
 {
-	extern void die(const char *,struct pt_regs *,long);
 	const struct exception_table_entry *entry;
 
 	/* Are we prepared to handle this fault?  */
@@ -359,7 +352,6 @@
 	pgd_t *dir;
 	pmd_t *pmd;
 	pte_t *pte;
-	struct mm_struct *mm;
 
 	if (address < TASK_SIZE)
 		return NULL;
diff -Nru a/arch/ppc/mm/init.c b/arch/ppc/mm/init.c
--- a/arch/ppc/mm/init.c	Sun May 16 01:18:34 2004
+++ b/arch/ppc/mm/init.c	Sun May 16 01:18:34 2004
@@ -458,7 +458,7 @@
 
 			ClearPageReserved(page);
 			set_bit(PG_highmem, &page->flags);
-			atomic_set(&page->count, 1);
+			set_page_count(page, 1);
 			__free_page(page);
 			totalhigh_pages++;
 		}
@@ -572,6 +572,16 @@
 	clear_bit(PG_arch_1, &page->flags);
 }
 
+void flush_dcache_icache_page(struct page *page)
+{
+#ifdef CONFIG_BOOKE
+	__flush_dcache_icache(kmap(page));
+	kunmap(page);
+#else
+	__flush_dcache_icache_phys(page_to_pfn(page) << PAGE_SHIFT);
+#endif
+
+}
 void clear_user_page(void *page, unsigned long vaddr, struct page *pg)
 {
 	clear_page(page);
@@ -614,7 +624,7 @@
 			if (vma->vm_mm == current->active_mm)
 				__flush_dcache_icache((void *) address);
 			else
-				__flush_dcache_icache_phys(pfn << PAGE_SHIFT);
+				flush_dcache_icache_page(page);
 			set_bit(PG_arch_1, &page->flags);
 		}
 	}
diff -Nru a/arch/ppc/ocp/Makefile b/arch/ppc/ocp/Makefile
--- a/arch/ppc/ocp/Makefile	Sun May 16 01:18:34 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,6 +0,0 @@
-#
-# Makefile for the linux kernel.
-#
-
-obj-y   	:= ocp.o ocp-driver.o ocp-probe.o
-
diff -Nru a/arch/ppc/ocp/ocp-driver.c b/arch/ppc/ocp/ocp-driver.c
--- a/arch/ppc/ocp/ocp-driver.c	Sun May 16 01:18:35 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,195 +0,0 @@
-/*
- * FILE NAME: ocp-driver.c
- *
- * BRIEF MODULE DESCRIPTION:
- * driver callback, id matching and registration
- * Based on drivers/pci/pci-driver, Copyright (c) 1997--1999 Martin Mares
- *
- * Maintained by: Armin <akuster@mvista.com>
- *
- *
- *  This program is free software; you can redistribute  it and/or modify it
- *  under  the terms of  the GNU General  Public License as published by the
- *  Free Software Foundation;  either version 2 of the  License, or (at your
- *  option) any later version.
- *
- *  THIS  SOFTWARE  IS PROVIDED   ``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  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.
- *
- *  You should have received a copy of the  GNU General Public License along
- *  with this program; if not, write  to the Free Software Foundation, Inc.,
- *  675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include <asm/ocp.h>
-#include <linux/module.h>
-#include <linux/init.h>
-
-/*
- *  Registration of OCP drivers and handling of hot-pluggable devices.
- */
-
-static int
-ocp_device_probe(struct device *dev)
-{
-	int error = 0;
-	struct ocp_driver *drv;
-	struct ocp_device *ocp_dev;
-
-	drv = to_ocp_driver(dev->driver);
-	ocp_dev = to_ocp_dev(dev);
-
-	if (drv->probe) {
-		error = drv->probe(ocp_dev);
-		DBG("probe return code %d\n", error);
-		if (error >= 0) {
-			ocp_dev->driver = drv;
-			error = 0;
-		}
-	}
-	return error;
-}
-
-static int
-ocp_device_remove(struct device *dev)
-{
-	struct ocp_device *ocp_dev = to_ocp_dev(dev);
-
-	if (ocp_dev->driver) {
-		if (ocp_dev->driver->remove)
-			ocp_dev->driver->remove(ocp_dev);
-		ocp_dev->driver = NULL;
-	}
-	return 0;
-}
-
-static int
-ocp_device_suspend(struct device *dev, u32 state, u32 level)
-{
-	struct ocp_device *ocp_dev = to_ocp_dev(dev);
-
-	int error = 0;
-
-	if (ocp_dev->driver) {
-		if (level == SUSPEND_SAVE_STATE && ocp_dev->driver->save_state)
-			error = ocp_dev->driver->save_state(ocp_dev, state);
-		else if (level == SUSPEND_POWER_DOWN
-			 && ocp_dev->driver->suspend)
-			error = ocp_dev->driver->suspend(ocp_dev, state);
-	}
-	return error;
-}
-
-static int
-ocp_device_resume(struct device *dev, u32 level)
-{
-	struct ocp_device *ocp_dev = to_ocp_dev(dev);
-
-	if (ocp_dev->driver) {
-		if (level == RESUME_POWER_ON && ocp_dev->driver->resume)
-			ocp_dev->driver->resume(ocp_dev);
-	}
-	return 0;
-}
-
-/**
- * ocp_bus_match - Works out whether an OCP device matches any
- * of the IDs listed for a given OCP driver.
- * @dev: the generic device struct for the OCP device
- * @drv: the generic driver struct for the OCP driver
- *
- * Used by a driver to check whether a OCP device present in the
- * system is in its list of supported devices.  Returns 1 for a
- * match, or 0 if there is no match.
- */
-static int
-ocp_bus_match(struct device *dev, struct device_driver *drv)
-{
-	struct ocp_device *ocp_dev = to_ocp_dev(dev);
-	struct ocp_driver *ocp_drv = to_ocp_driver(drv);
-	const struct ocp_device_id *ids = ocp_drv->id_table;
-
-	if (!ids)
-		return 0;
-
-	while (ids->vendor || ids->device) {
-		if ((ids->vendor == OCP_ANY_ID
-		     || ids->vendor == ocp_dev->vendor)
-		    && (ids->device == OCP_ANY_ID
-			|| ids->device == ocp_dev->device)) {
-			DBG("Bus match -vendor:%x device:%x\n", ids->vendor,
-			    ids->device);
-			return 1;
-		}
-		ids++;
-	}
-	return 0;
-}
-
-struct bus_type ocp_bus_type = {
-	.name = "ocp",
-	.match = ocp_bus_match,
-};
-
-static int __init
-ocp_driver_init(void)
-{
-	return bus_register(&ocp_bus_type);
-}
-
-postcore_initcall(ocp_driver_init);
-
-/**
- * ocp_register_driver - register a new ocp driver
- * @drv: the driver structure to register
- *
- * Adds the driver structure to the list of registered drivers
- * Returns the number of ocp devices which were claimed by the driver
- * during registration.  The driver remains registered even if the
- * return value is zero.
- */
-int
-ocp_register_driver(struct ocp_driver *drv)
-{
-	int count = 0;
-
-	/* initialize common driver fields */
-	drv->driver.name = drv->name;
-	drv->driver.bus = &ocp_bus_type;
-	drv->driver.probe = ocp_device_probe;
-	drv->driver.resume = ocp_device_resume;
-	drv->driver.suspend = ocp_device_suspend;
-	drv->driver.remove = ocp_device_remove;
-
-	/* register with core */
-	count = driver_register(&drv->driver);
-	return count ? count : 1;
-}
-
-/**
- * ocp_unregister_driver - unregister a ocp driver
- * @drv: the driver structure to unregister
- *
- * Deletes the driver structure from the list of registered OCP drivers,
- * gives it a chance to clean up by calling its remove() function for
- * each device it was responsible for, and marks those devices as
- * driverless.
- */
-
-void
-ocp_unregister_driver(struct ocp_driver *drv)
-{
-	driver_unregister(&drv->driver);
-}
-
-EXPORT_SYMBOL(ocp_register_driver);
-EXPORT_SYMBOL(ocp_unregister_driver);
-EXPORT_SYMBOL(ocp_bus_type);
diff -Nru a/arch/ppc/ocp/ocp-probe.c b/arch/ppc/ocp/ocp-probe.c
--- a/arch/ppc/ocp/ocp-probe.c	Sun May 16 01:18:37 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,113 +0,0 @@
-/*
- * FILE NAME: ocp-probe.c
- *
- * BRIEF MODULE DESCRIPTION:
- * Device scanning & bus set routines
- * Based on drivers/pci/probe, Copyright (c) 1997--1999 Martin Mares
- *
- * Maintained by: Armin <akuster@mvista.com>
- *
- *
- *  This program is free software; you can redistribute  it and/or modify it
- *  under  the terms of  the GNU General  Public License as published by the
- *  Free Software Foundation;  either version 2 of the  License, or (at your
- *  option) any later version.
- *
- *  THIS  SOFTWARE  IS PROVIDED   ``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  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.
- *
- *  You should have received a copy of the  GNU General Public License along
- *  with this program; if not, write  to the Free Software Foundation, Inc.,
- *  675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include <linux/init.h>
-#include <linux/slab.h>
-#include <linux/module.h>
-#include <linux/device.h>
-#include <asm/ocp.h>
-
-LIST_HEAD(ocp_devices);
-struct device *ocp_bus;
-
-static struct ocp_device * __devinit
-ocp_setup_dev(struct ocp_def *odef, unsigned int index)
-{
-	struct ocp_device *dev;
-
-	dev = kmalloc(sizeof(*dev), GFP_KERNEL);
-	if (!dev)
-		return NULL;
-	memset(dev, 0, sizeof(*dev));
-
-	dev->vendor = odef->vendor;
-	dev->device = odef->device;
-	dev->num = ocp_get_num(dev->device);
-	dev->paddr = odef->paddr;
-	dev->irq = odef->irq;
-	dev->pm = odef->pm;
-	dev->current_state = 4;
-
-	sprintf(dev->name, "OCP device %04x:%04x", dev->vendor, dev->device);
-
-	DBG("%s %s 0x%lx irq:%d pm:0x%lx \n", dev->slot_name, dev->name,
-	    (unsigned long) dev->paddr, dev->irq, dev->pm);
-
-	/* now put in global tree */
-	sprintf(dev->dev.bus_id, "%d", index);
-	dev->dev.parent = ocp_bus;
-	dev->dev.bus = &ocp_bus_type;
-	device_register(&dev->dev);
-
-	return dev;
-}
-
-static struct device * __devinit ocp_alloc_primary_bus(void)
-{
-	struct device *b;
-
-	b = kmalloc(sizeof(struct device), GFP_KERNEL);
-	if (b == NULL)
-		return NULL;
-	memset(b, 0, sizeof(struct device));
-	strcpy(b->bus_id, "ocp");
-
-	device_register(b);
-
-	return b;
-}
-
-void __devinit ocp_setup_devices(struct ocp_def *odef)
-{
-	int index;
-	struct ocp_device *dev;
-
-	if (ocp_bus == NULL)
-		ocp_bus = ocp_alloc_primary_bus();
-	for (index = 0; odef->vendor != OCP_VENDOR_INVALID; ++index, ++odef) {
-		dev = ocp_setup_dev(odef, index);
-		if (dev != NULL)
-			list_add_tail(&dev->global_list, &ocp_devices);
-	}
-}
-
-extern struct ocp_def core_ocp[];
-
-static int __init
-ocparch_init(void)
-{
-	ocp_setup_devices(core_ocp);
-	return 0;
-}
-
-subsys_initcall(ocparch_init);
-
-EXPORT_SYMBOL(ocp_devices);
diff -Nru a/arch/ppc/ocp/ocp.c b/arch/ppc/ocp/ocp.c
--- a/arch/ppc/ocp/ocp.c	Sun May 16 01:18:33 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,109 +0,0 @@
-/*
- * ocp.c
- *
- *	The is drived from pci.c
- *
- * 	Current Maintainer
- *      Armin Kuster akuster@dslextreme.com
- *      Jan, 2002
- *
- *
- *
- * This program is free software; you can redistribute  it and/or modify it
- *  under  the terms of  the GNU General  Public License as published by the
- *  Free Software Foundation;  either version 2 of the  License, or (at your
- *  option) any later version.
- *
- *  THIS  SOFTWARE  IS PROVIDED   ``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  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.
- *
- *  You should have received a copy of the  GNU General Public License along
- *  with this program; if not, write  to the Free Software Foundation, Inc.,
- *  675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include <linux/list.h>
-#include <linux/init.h>
-#include <linux/module.h>
-#include <linux/config.h>
-#include <linux/stddef.h>
-#include <linux/slab.h>
-#include <linux/types.h>
-#include <asm/io.h>
-#include <asm/ocp.h>
-#include <asm/errno.h>
-
-/**
- * ocp_get_num - This determines how many OCP devices of a given
- * device are registered
- * @device: OCP device such as HOST, PCI, GPT, UART, OPB, IIC, GPIO, EMAC, ZMII,
- *
- * The routine returns the number that devices which is registered
- */
-unsigned int ocp_get_num(unsigned int device)
-{
-	unsigned int count = 0;
-	struct ocp_device *ocp;
-	struct list_head *ocp_l;
-
-	list_for_each(ocp_l, &ocp_devices) {
-		ocp = list_entry(ocp_l, struct ocp_device, global_list);
-		if (device == ocp->device)
-			count++;
-	}
-	return count;
-}
-
-/**
- * ocp_get_dev - get ocp driver pointer for ocp device and instance of it
- * @device: OCP device such as PCI, GPT, UART, OPB, IIC, GPIO, EMAC, ZMII
- * @dev_num: ocp device number whos paddr you want
- *
- * The routine returns ocp device pointer
- * in list based on device and instance of that device
- *
- */
-struct ocp_device *
-ocp_get_dev(unsigned int device, int dev_num)
-{
-	struct ocp_device *ocp;
-	struct list_head *ocp_l;
-	int count = 0;
-
-	list_for_each(ocp_l, &ocp_devices) {
-		ocp = list_entry(ocp_l, struct ocp_device, global_list);
-		if (device == ocp->device) {
-			if (dev_num == count)
-				return ocp;
-			count++;
-		}
-	}
-	return NULL;
-}
-
-EXPORT_SYMBOL(ocp_get_dev);
-EXPORT_SYMBOL(ocp_get_num);
-
-#ifdef CONFIG_PM
-int ocp_generic_suspend(struct ocp_device *pdev, u32 state)
-{
-	ocp_force_power_off(pdev);
-	return 0;
-}
-
-int ocp_generic_resume(struct ocp_device *pdev)
-{
-	ocp_force_power_on(pdev);
-}
-
-EXPORT_SYMBOL(ocp_generic_suspend);
-EXPORT_SYMBOL(ocp_generic_resume);
-#endif /* CONFIG_PM */
diff -Nru a/arch/ppc/platforms/4xx/Kconfig b/arch/ppc/platforms/4xx/Kconfig
--- a/arch/ppc/platforms/4xx/Kconfig	Sun May 16 01:18:33 2004
+++ b/arch/ppc/platforms/4xx/Kconfig	Sun May 16 01:18:33 2004
@@ -16,6 +16,11 @@
 	help
 	  This option enables support for the IBM NP405H evaluation board.
 
+config BUBINGA
+	bool "Bubinga"
+	help
+	  This option enables support for the IBM 405EP evaluation board.
+
 config CPCI405
 	bool "CPCI405"
 	help
@@ -122,7 +127,7 @@
 
 config IBM_OCP
 	bool
-	depends on ASH || CPCI405 || EBONY || EP405 || OCOTEA || REDWOOD_5 || REDWOOD_6 || SYCAMORE || WALNUT
+	depends on ASH || BUBINGA || CPCI405 || EBONY || EP405 || OCOTEA || REDWOOD_5 || REDWOOD_6 || SYCAMORE || WALNUT
 	default y
 
 config IBM_EMAC4
@@ -132,7 +137,7 @@
 
 config BIOS_FIXUP
 	bool
-	depends on EP405 || SYCAMORE || WALNUT
+	depends on BUBINGA || EP405 || SYCAMORE || WALNUT
 	default y
 
 config 403GCX
@@ -140,6 +145,11 @@
 	depends OAK
 	default y
 
+config 405EP
+	bool
+	depends on BUBINGA
+	default y
+
 config 405GP
 	bool
 	depends on CPCI405 || EP405 || WALNUT
@@ -148,6 +158,7 @@
 config 405GPR
 	bool
 	depends on SYCAMORE
+	default y
 
 config STB03xxx
 	bool
@@ -161,7 +172,7 @@
 
 config IBM_OPENBIOS
 	bool
-	depends on ASH || REDWOOD_5 || REDWOOD_6 || SYCAMORE || WALNUT
+	depends on ASH || BUBINGA || REDWOOD_5 || REDWOOD_6 || SYCAMORE || WALNUT
 	default y
 
 config PM
diff -Nru a/arch/ppc/platforms/4xx/Makefile b/arch/ppc/platforms/4xx/Makefile
--- a/arch/ppc/platforms/4xx/Makefile	Sun May 16 01:18:36 2004
+++ b/arch/ppc/platforms/4xx/Makefile	Sun May 16 01:18:36 2004
@@ -5,6 +5,7 @@
 obj-$(CONFIG_CPCI405)		+= cpci405.o
 obj-$(CONFIG_EBONY)		+= ebony.o
 obj-$(CONFIG_EP405)		+= ep405.o
+obj-$(CONFIG_BUBINGA)		+= bubinga.o
 obj-$(CONFIG_OAK)		+= oak.o
 obj-$(CONFIG_OCOTEA)		+= ocotea.o
 obj-$(CONFIG_REDWOOD_5)		+= redwood5.o
@@ -16,6 +17,7 @@
 obj-$(CONFIG_REDWOOD_5)		+= ibmstb4.o
 obj-$(CONFIG_NP405H)		+= ibmnp405h.o
 obj-$(CONFIG_REDWOOD_6)		+= ibmstbx25.o
-obj-$(CONFIG_EBONY)		+= ibm440gp.o
-obj-$(CONFIG_OCOTEA)		+= ibm440gx.o
+obj-$(CONFIG_440GP)		+= ibm440gp.o
+obj-$(CONFIG_440GX)		+= ibm440gx.o
+obj-$(CONFIG_405EP)		+= ibm405ep.o
 obj-$(CONFIG_405GPR)		+= ibm405gpr.o
diff -Nru a/arch/ppc/platforms/4xx/ash.c b/arch/ppc/platforms/4xx/ash.c
--- a/arch/ppc/platforms/4xx/ash.c	Sun May 16 01:18:33 2004
+++ b/arch/ppc/platforms/4xx/ash.c	Sun May 16 01:18:33 2004
@@ -18,6 +18,8 @@
 #include <asm/machdep.h>
 #include <asm/pci-bridge.h>
 #include <asm/io.h>
+#include <asm/ocp.h>
+#include <asm/ibm_ocp_pci.h>
 #include <asm/todc.h>
 
 #ifdef DEBUG
@@ -53,10 +55,10 @@
 void __init
 ash_setup_arch(void)
 {
-	bd_t *bip = &__res;
-
 	ppc4xx_setup_arch();
 
+	ibm_ocp_set_emac(0, 3);
+
 #ifdef CONFIG_DEBUG_BRINGUP
 	int i;
 	printk("\n");
@@ -96,8 +98,6 @@
 void __init
 bios_fixup(struct pci_controller *hose, struct pcil0_regs *pcip)
 {
-
-	unsigned int bar_response, bar;
 	/*
 	 * Expected PCI mapping:
 	 *
diff -Nru a/arch/ppc/platforms/4xx/ash.h b/arch/ppc/platforms/4xx/ash.h
--- a/arch/ppc/platforms/4xx/ash.h	Sun May 16 01:18:33 2004
+++ b/arch/ppc/platforms/4xx/ash.h	Sun May 16 01:18:33 2004
@@ -15,7 +15,6 @@
 #ifdef __KERNEL__
 #ifndef __ASM_ASH_H__
 #define __ASM_ASH_H__
-#include <asm/ibm_ocp.h>
 #include <platforms/4xx/ibmnp405h.h>
 
 #ifndef __ASSEMBLY__
diff -Nru a/arch/ppc/platforms/4xx/bubinga.c b/arch/ppc/platforms/4xx/bubinga.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/arch/ppc/platforms/4xx/bubinga.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,263 @@
+/*
+ * Support for IBM PPC 405EP evaluation board (Bubinga).
+ *
+ * Author: SAW (IBM), derived from walnut.c.
+ *         Maintained by MontaVista Software <source@mvista.com>
+ *
+ * 2003 (c) MontaVista Softare Inc.  This file is licensed under the
+ * terms of the GNU General Public License version 2. This program is
+ * licensed "as is" without any warranty of any kind, whether express
+ * or implied.
+ */
+
+#include <linux/config.h>
+#include <linux/init.h>
+#include <linux/smp.h>
+#include <linux/threads.h>
+#include <linux/param.h>
+#include <linux/string.h>
+#include <linux/blkdev.h>
+#include <linux/pci.h>
+#include <linux/rtc.h>
+#include <linux/tty.h>
+#include <linux/serial.h>
+#include <linux/serial_core.h>
+
+#include <asm/system.h>
+#include <asm/pci-bridge.h>
+#include <asm/processor.h>
+#include <asm/machdep.h>
+#include <asm/page.h>
+#include <asm/time.h>
+#include <asm/io.h>
+#include <asm/todc.h>
+#include <asm/kgdb.h>
+#include <asm/ocp.h>
+#include <asm/ibm_ocp_pci.h>
+
+#include <platforms/4xx/ibm405ep.h>
+
+#undef DEBUG
+
+#ifdef DEBUG
+#define DBG(x...) printk(x)
+#else
+#define DBG(x...)
+#endif
+
+extern bd_t __res;
+
+void *bubinga_rtc_base;
+
+/* Some IRQs unique to the board
+ * Used by the generic 405 PCI setup functions in ppc4xx_pci.c
+ */
+int __init
+ppc405_map_irq(struct pci_dev *dev, unsigned char idsel, unsigned char pin)
+{
+	static char pci_irq_table[][4] =
+	    /*
+	     *      PCI IDSEL/INTPIN->INTLINE
+	     *      A       B       C       D
+	     */
+	{
+		{28, 28, 28, 28},	/* IDSEL 1 - PCI slot 1 */
+		{29, 29, 29, 29},	/* IDSEL 2 - PCI slot 2 */
+		{30, 30, 30, 30},	/* IDSEL 3 - PCI slot 3 */
+		{31, 31, 31, 31},	/* IDSEL 4 - PCI slot 4 */
+	};
+
+	const long min_idsel = 1, max_idsel = 4, irqs_per_slot = 4;
+	return PCI_IRQ_TABLE_LOOKUP;
+};
+
+/* The serial clock for the chip is an internal clock determined by
+ * different clock speeds/dividers.
+ * Calculate the proper input baud rate and setup the serial driver.
+ */
+static void __init
+bubinga_early_serial_map(void)
+{
+	u32 uart_div;
+	int uart_clock;
+	struct uart_port port;
+
+         /* Calculate the serial clock input frequency
+          *
+          * The base baud is the PLL OUTA (provided in the board info
+          * structure) divided by the external UART Divisor, divided
+          * by 16.
+          */
+	uart_div = (mfdcr(DCRN_CPC0_UCR_BASE) & DCRN_CPC0_UCR_U0DIV);
+	uart_clock = __res.bi_pllouta_freq / uart_div;
+
+	/* Setup serial port access */
+	memset(&port, 0, sizeof(port));
+	port.membase = (void*)ACTING_UART0_IO_BASE;
+	port.irq = ACTING_UART0_INT;
+	port.uartclk = uart_clock;
+	port.regshift = 0;
+	port.iotype = SERIAL_IO_MEM;
+	port.flags = ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST;
+	port.line = 0;
+
+	if (early_serial_setup(&port) != 0) {
+		printk("Early serial init of port 0 failed\n");
+	}
+
+	port.membase = (void*)ACTING_UART1_IO_BASE;
+	port.irq = ACTING_UART1_INT;
+	port.line = 1;
+
+	if (early_serial_setup(&port) != 0) {
+		printk("Early serial init of port 1 failed\n");
+	}
+}
+
+void __init
+bios_fixup(struct pci_controller *hose, struct pcil0_regs *pcip)
+{
+
+	unsigned int bar_response, bar;
+	/*
+	 * Expected PCI mapping:
+	 *
+	 *  PLB addr             PCI memory addr
+	 *  ---------------------       ---------------------
+	 *  0000'0000 - 7fff'ffff <---  0000'0000 - 7fff'ffff
+	 *  8000'0000 - Bfff'ffff --->  8000'0000 - Bfff'ffff
+	 *
+	 *  PLB addr             PCI io addr
+	 *  ---------------------       ---------------------
+	 *  e800'0000 - e800'ffff --->  0000'0000 - 0001'0000
+	 *
+	 * The following code is simplified by assuming that the bootrom
+	 * has been well behaved in following this mapping.
+	 */
+
+#ifdef DEBUG
+	int i;
+
+	printk("ioremap PCLIO_BASE = 0x%x\n", pcip);
+	printk("PCI bridge regs before fixup \n");
+	for (i = 0; i <= 3; i++) {
+		printk(" pmm%dma\t0x%x\n", i, in_le32(&(pcip->pmm[i].ma)));
+		printk(" pmm%dma\t0x%x\n", i, in_le32(&(pcip->pmm[i].la)));
+		printk(" pmm%dma\t0x%x\n", i, in_le32(&(pcip->pmm[i].pcila)));
+		printk(" pmm%dma\t0x%x\n", i, in_le32(&(pcip->pmm[i].pciha)));
+	}
+	printk(" ptm1ms\t0x%x\n", in_le32(&(pcip->ptm1ms)));
+	printk(" ptm1la\t0x%x\n", in_le32(&(pcip->ptm1la)));
+	printk(" ptm2ms\t0x%x\n", in_le32(&(pcip->ptm2ms)));
+	printk(" ptm2la\t0x%x\n", in_le32(&(pcip->ptm2la)));
+
+#endif
+
+	/* added for IBM boot rom version 1.15 bios bar changes  -AK */
+
+	/* Disable region first */
+	out_le32((void *) &(pcip->pmm[0].ma), 0x00000000);
+	/* PLB starting addr, PCI: 0x80000000 */
+	out_le32((void *) &(pcip->pmm[0].la), 0x80000000);
+	/* PCI start addr, 0x80000000 */
+	out_le32((void *) &(pcip->pmm[0].pcila), PPC405_PCI_MEM_BASE);
+	/* 512MB range of PLB to PCI */
+	out_le32((void *) &(pcip->pmm[0].pciha), 0x00000000);
+	/* Enable no pre-fetch, enable region */
+	out_le32((void *) &(pcip->pmm[0].ma), ((0xffffffff -
+						(PPC405_PCI_UPPER_MEM -
+						 PPC405_PCI_MEM_BASE)) | 0x01));
+
+	/* Disable region one */
+	out_le32((void *) &(pcip->pmm[1].ma), 0x00000000);
+	out_le32((void *) &(pcip->pmm[1].la), 0x00000000);
+	out_le32((void *) &(pcip->pmm[1].pcila), 0x00000000);
+	out_le32((void *) &(pcip->pmm[1].pciha), 0x00000000);
+	out_le32((void *) &(pcip->pmm[1].ma), 0x00000000);
+	out_le32((void *) &(pcip->ptm1ms), 0x00000001);
+
+	/* Disable region two */
+	out_le32((void *) &(pcip->pmm[2].ma), 0x00000000);
+	out_le32((void *) &(pcip->pmm[2].la), 0x00000000);
+	out_le32((void *) &(pcip->pmm[2].pcila), 0x00000000);
+	out_le32((void *) &(pcip->pmm[2].pciha), 0x00000000);
+	out_le32((void *) &(pcip->pmm[2].ma), 0x00000000);
+	out_le32((void *) &(pcip->ptm2ms), 0x00000000);
+	out_le32((void *) &(pcip->ptm2la), 0x00000000);
+
+	/* Zero config bars */
+	for (bar = PCI_BASE_ADDRESS_1; bar <= PCI_BASE_ADDRESS_2; bar += 4) {
+		early_write_config_dword(hose, hose->first_busno,
+					 PCI_FUNC(hose->first_busno), bar,
+					 0x00000000);
+		early_read_config_dword(hose, hose->first_busno,
+					PCI_FUNC(hose->first_busno), bar,
+					&bar_response);
+		DBG("BUS %d, device %d, Function %d bar 0x%8.8x is 0x%8.8x\n",
+		    hose->first_busno, PCI_SLOT(hose->first_busno),
+		    PCI_FUNC(hose->first_busno), bar, bar_response);
+	}
+	/* end work arround */
+
+#ifdef DEBUG
+	printk("PCI bridge regs after fixup \n");
+	for (i = 0; i <= 3; i++) {
+		printk(" pmm%dma\t0x%x\n", i, in_le32(&(pcip->pmm[i].ma)));
+		printk(" pmm%dma\t0x%x\n", i, in_le32(&(pcip->pmm[i].la)));
+		printk(" pmm%dma\t0x%x\n", i, in_le32(&(pcip->pmm[i].pcila)));
+		printk(" pmm%dma\t0x%x\n", i, in_le32(&(pcip->pmm[i].pciha)));
+	}
+	printk(" ptm1ms\t0x%x\n", in_le32(&(pcip->ptm1ms)));
+	printk(" ptm1la\t0x%x\n", in_le32(&(pcip->ptm1la)));
+	printk(" ptm2ms\t0x%x\n", in_le32(&(pcip->ptm2ms)));
+	printk(" ptm2la\t0x%x\n", in_le32(&(pcip->ptm2la)));
+
+#endif
+}
+
+void __init
+bubinga_setup_arch(void)
+{
+	ppc4xx_setup_arch();
+
+	ibm_ocp_set_emac(0, 1);
+
+        bubinga_early_serial_map();
+
+        /* RTC step for the evb405ep */
+        bubinga_rtc_base = (void *) BUBINGA_RTC_VADDR;
+        TODC_INIT(TODC_TYPE_DS1743, bubinga_rtc_base, bubinga_rtc_base,
+                  bubinga_rtc_base, 8);
+        /* Identify the system */
+        printk("IBM Bubinga port (MontaVista Software, Inc. <source@mvista.com>)\n");
+}
+
+void __init
+bubinga_map_io(void)
+{
+	ppc4xx_map_io();
+     	io_block_mapping(BUBINGA_RTC_VADDR,
+                         BUBINGA_RTC_PADDR, BUBINGA_RTC_SIZE, _PAGE_IO);
+}
+
+void __init
+platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
+	      unsigned long r6, unsigned long r7)
+{
+	ppc4xx_init(r3, r4, r5, r6, r7);
+
+	ppc_md.setup_arch = bubinga_setup_arch;
+	ppc_md.setup_io_mappings = bubinga_map_io;
+
+#ifdef CONFIG_GEN_RTC
+	ppc_md.time_init = todc_time_init;
+	ppc_md.set_rtc_time = todc_set_rtc_time;
+	ppc_md.get_rtc_time = todc_get_rtc_time;
+	ppc_md.nvram_read_val = todc_direct_read_val;
+	ppc_md.nvram_write_val = todc_direct_write_val;
+#endif
+#ifdef CONFIG_KGDB
+	ppc_md.early_serial_map = bubinga_early_serial_map;
+#endif
+}
+
diff -Nru a/arch/ppc/platforms/4xx/bubinga.h b/arch/ppc/platforms/4xx/bubinga.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/arch/ppc/platforms/4xx/bubinga.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,69 @@
+/*
+ * Support for IBM PPC 405EP evaluation board (Bubinga).
+ *
+ * Author: SAW (IBM), derived from walnut.h.
+ *         Maintained by MontaVista Software <source@mvista.com>
+ *
+ * 2003 (c) MontaVista Softare Inc.  This file is licensed under the
+ * terms of the GNU General Public License version 2. This program is
+ * licensed "as is" without any warranty of any kind, whether express
+ * or implied.
+ */
+
+#ifdef __KERNEL__
+#ifndef __BUBINGA_H__
+#define __BUBINGA_H__
+
+/* 405EP */
+#include <platforms/4xx/ibm405ep.h>
+
+#ifndef __ASSEMBLY__
+/*
+ * Data structure defining board information maintained by the boot
+ * ROM on IBM's evaluation board. An effort has been made to
+ * keep the field names consistent with the 8xx 'bd_t' board info
+ * structures.
+ */
+
+typedef struct board_info {
+        unsigned char    bi_s_version[4];       /* Version of this structure */
+        unsigned char    bi_r_version[30];      /* Version of the IBM ROM */
+        unsigned int     bi_memsize;            /* DRAM installed, in bytes */
+        unsigned char    bi_enetaddr[2][6];     /* Local Ethernet MAC address */        unsigned char    bi_pci_enetaddr[6];    /* PCI Ethernet MAC address */
+        unsigned int     bi_intfreq;            /* Processor speed, in Hz */
+        unsigned int     bi_busfreq;            /* PLB Bus speed, in Hz */
+        unsigned int     bi_pci_busfreq;        /* PCI Bus speed, in Hz */
+        unsigned int     bi_opb_busfreq;        /* OPB Bus speed, in Hz */
+        unsigned int     bi_pllouta_freq;       /* PLL OUTA speed, in Hz */
+} bd_t;
+
+/* Some 4xx parts use a different timebase frequency from the internal clock.
+*/
+#define bi_tbfreq bi_intfreq
+
+
+/* Memory map for the Bubinga board.
+ * Generic 4xx plus RTC.
+ */
+
+extern void *bubinga_rtc_base;
+#define BUBINGA_RTC_PADDR	((uint)0xf0000000)
+#define BUBINGA_RTC_VADDR	BUBINGA_RTC_PADDR
+#define BUBINGA_RTC_SIZE	((uint)8*1024)
+
+/* The UART clock is based off an internal clock -
+ * define BASE_BAUD based on the internal clock and divider(s).
+ * Since BASE_BAUD must be a constant, we will initialize it
+ * using clock/divider values which OpenBIOS initializes
+ * for typical configurations at various CPU speeds.
+ * The base baud is calculated as (FWDA / EXT UART DIV / 16)
+ */
+#define BASE_BAUD       0
+
+#define BUBINGA_FPGA_BASE      0xF0300000
+
+#define PPC4xx_MACHINE_NAME     "IBM Bubinga"
+
+#endif /* !__ASSEMBLY__ */
+#endif /* __BUBINGA_H__ */
+#endif /* __KERNEL__ */
diff -Nru a/arch/ppc/platforms/4xx/cpci405.c b/arch/ppc/platforms/4xx/cpci405.c
--- a/arch/ppc/platforms/4xx/cpci405.c	Sun May 16 01:18:36 2004
+++ b/arch/ppc/platforms/4xx/cpci405.c	Sun May 16 01:18:36 2004
@@ -22,6 +22,7 @@
 #include <asm/pci-bridge.h>
 #include <asm/machdep.h>
 #include <asm/todc.h>
+#include <asm/ocp.h>
 
 void *cpci405_nvram;
 
@@ -53,6 +54,9 @@
 cpci405_setup_arch(void)
 {
 	ppc4xx_setup_arch();
+
+	ibm_ocp_set_emac(0, 0);
+
 	TODC_INIT(TODC_TYPE_MK48T35, cpci405_nvram, cpci405_nvram, cpci405_nvram, 8);
 }
 
diff -Nru a/arch/ppc/platforms/4xx/ebony.c b/arch/ppc/platforms/4xx/ebony.c
--- a/arch/ppc/platforms/4xx/ebony.c	Sun May 16 01:18:37 2004
+++ b/arch/ppc/platforms/4xx/ebony.c	Sun May 16 01:18:37 2004
@@ -41,6 +41,7 @@
 #include <asm/dma.h>
 #include <asm/io.h>
 #include <asm/machdep.h>
+#include <asm/ocp.h>
 #include <asm/pci-bridge.h>
 #include <asm/time.h>
 #include <asm/todc.h>
@@ -119,9 +120,6 @@
 
 extern void abort(void);
 
-/* Global Variables */
-bd_t __res;
-
 static void __init
 ebony_calibrate_decr(void)
 {
@@ -308,7 +306,9 @@
 ebony_setup_arch(void)
 {
 	unsigned char * vpd_base;
-	struct ibm440gp_clocks clocks;
+	struct ibm44x_clocks clocks;
+	struct ocp_def *def;
+	struct ocp_func_emac_data *emacdata;
 
 #if !defined(CONFIG_BDI_SWITCH)
 	/*
@@ -318,10 +318,15 @@
         mtspr(SPRN_DBCR0, (DBCR0_TDE | DBCR0_IDM));
 #endif
 
-	/* Retrieve MAC addresses */
+	/* Set mac_addr for each EMAC */
 	vpd_base = ioremap64(EBONY_VPD_BASE, EBONY_VPD_SIZE);
-	memcpy(__res.bi_enetaddr[0],EBONY_NA0_ADDR(vpd_base),6);
-	memcpy(__res.bi_enetaddr[1],EBONY_NA1_ADDR(vpd_base),6);
+	def = ocp_get_one_device(OCP_VENDOR_IBM, OCP_FUNC_EMAC, 0);
+	emacdata = def->additions;
+	memcpy(emacdata->mac_addr, EBONY_NA0_ADDR(vpd_base), 6);
+	def = ocp_get_one_device(OCP_VENDOR_IBM, OCP_FUNC_EMAC, 1);
+	emacdata = def->additions;
+	memcpy(emacdata->mac_addr, EBONY_NA1_ADDR(vpd_base), 6);
+	iounmap(vpd_base);
 
 	/*
 	 * Determine various clocks.
@@ -330,10 +335,7 @@
 	 * --ebs
 	 */
 	ibm440gp_get_clocks(&clocks, 33333333, 6 * 1843200);
-	__res.bi_opb_busfreq = clocks.opb;
-
-	/* Use IIC in standard (100 kHz) mode */
-	__res.bi_iic_fast[0] = __res.bi_iic_fast[1] = 0;
+	ocp_sys_info.opb_bus_freq = clocks.opb;
 
 	/* Setup TODC access */
 	TODC_INIT(TODC_TYPE_DS1743,
diff -Nru a/arch/ppc/platforms/4xx/ebony.h b/arch/ppc/platforms/4xx/ebony.h
--- a/arch/ppc/platforms/4xx/ebony.h	Sun May 16 01:18:36 2004
+++ b/arch/ppc/platforms/4xx/ebony.h	Sun May 16 01:18:36 2004
@@ -65,8 +65,6 @@
 #define UART1_IO_BASE	(u8 *) 0xE0000300
 
 #define BASE_BAUD	33000000/3/16
-#define UART0_INT	0
-#define UART1_INT	1
 
 #define STD_UART_OP(num)					\
 	{ 0, BASE_BAUD, 0, UART##num##_INT,			\
diff -Nru a/arch/ppc/platforms/4xx/ep405.c b/arch/ppc/platforms/4xx/ep405.c
--- a/arch/ppc/platforms/4xx/ep405.c	Sun May 16 01:18:33 2004
+++ b/arch/ppc/platforms/4xx/ep405.c	Sun May 16 01:18:33 2004
@@ -18,6 +18,7 @@
 #include <asm/pci-bridge.h>
 #include <asm/machdep.h>
 #include <asm/todc.h>
+#include <asm/ocp.h>
 #include <asm/ibm_ocp_pci.h>
 
 #undef DEBUG
@@ -58,6 +59,8 @@
 ep405_setup_arch(void)
 {
 	ppc4xx_setup_arch();
+
+	ibm_ocp_set_emac(0, 0);
 
 	if (__res.bi_nvramsize == 512*1024) {
 		/* FIXME: we should properly handle NVRTCs of different sizes */
diff -Nru a/arch/ppc/platforms/4xx/ibm405ep.c b/arch/ppc/platforms/4xx/ibm405ep.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/arch/ppc/platforms/4xx/ibm405ep.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,134 @@
+/*
+ * arch/ppc/platforms/ibm405ep.c
+ *
+ * Support for IBM PPC 405EP processors.
+ *
+ * Author: SAW (IBM), derived from ibmnp405l.c.
+ *         Maintained by MontaVista Software <source@mvista.com>
+ *
+ * 2003 (c) MontaVista Softare Inc.  This file is licensed under the
+ * terms of the GNU General Public License version 2. This program is
+ * licensed "as is" without any warranty of any kind, whether express
+ * or implied.
+ */
+
+#include <linux/config.h>
+#include <linux/init.h>
+#include <linux/smp.h>
+#include <linux/threads.h>
+#include <linux/param.h>
+#include <linux/string.h>
+
+#include <asm/ibm4xx.h>
+#include <asm/ocp.h>
+
+#include <platforms/4xx/ibm405ep.h>
+
+static struct ocp_func_mal_data ibm405ep_mal0_def = {
+	.num_tx_chans	= 4,		/* Number of TX channels */
+	.num_rx_chans	= 2,		/* Number of RX channels */
+	.txeob_irq	= 11,		/* TX End Of Buffer IRQ  */
+	.rxeob_irq	= 12,		/* RX End Of Buffer IRQ  */
+	.txde_irq	= 13,		/* TX Descriptor Error IRQ */
+	.rxde_irq	= 14,		/* RX Descriptor Error IRQ */
+	.serr_irq	= 10,		/* MAL System Error IRQ    */
+};
+OCP_SYSFS_MAL_DATA()
+
+static struct ocp_func_emac_data ibm405ep_emac0_def = {
+	.rgmii_idx	= -1,		/* No RGMII */
+	.rgmii_mux	= -1,		/* No RGMII */
+	.zmii_idx	= -1,		/* ZMII device index */
+	.zmii_mux	= 0,		/* ZMII input of this EMAC */
+	.mal_idx	= 0,		/* MAL device index */
+	.mal_rx_chan	= 0,		/* MAL rx channel number */
+	.mal_tx_chan	= 0,		/* MAL tx channel number */
+	.wol_irq	= 9,		/* WOL interrupt number */
+	.mdio_idx	= 0,		/* MDIO via EMAC0 */
+	.tah_idx	= -1,		/* No TAH */
+};
+
+static struct ocp_func_emac_data ibm405ep_emac1_def = {
+	.rgmii_idx	= -1,		/* No RGMII */
+	.rgmii_mux	= -1,		/* No RGMII */
+	.zmii_idx	= -1,		/* ZMII device index */
+	.zmii_mux	= 0,		/* ZMII input of this EMAC */
+	.mal_idx	= 0,		/* MAL device index */
+	.mal_rx_chan	= 1,		/* MAL rx channel number */
+	.mal_tx_chan	= 2,		/* MAL tx channel number */
+	.wol_irq	= 9,		/* WOL interrupt number */
+	.mdio_idx	= 0,		/* MDIO via EMAC0 */
+	.tah_idx	= -1,		/* No TAH */
+};
+OCP_SYSFS_EMAC_DATA()
+
+static struct ocp_func_iic_data ibm405ep_iic0_def = {
+	.fast_mode	= 0,		/* Use standad mode (100Khz) */
+};
+OCP_SYSFS_IIC_DATA()
+
+struct ocp_def core_ocp[] = {
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_OPB,
+	  .index	= 0,
+	  .paddr	= 0xEF600000,
+	  .irq		= OCP_IRQ_NA,
+	  .pm		= OCP_CPM_NA,
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_16550,
+	  .index	= 0,
+	  .paddr	= UART0_IO_BASE,
+	  .irq		= UART0_INT,
+	  .pm		= IBM_CPM_UART0
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_16550,
+	  .index	= 1,
+	  .paddr	= UART1_IO_BASE,
+	  .irq		= UART1_INT,
+	  .pm		= IBM_CPM_UART1
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_IIC,
+	  .paddr	= 0xEF600500,
+	  .irq		= 2,
+	  .pm		= IBM_CPM_IIC0,
+	  .additions	= &ibm405ep_iic0_def,
+	  .show		= &ocp_show_iic_data
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_GPIO,
+	  .paddr	= 0xEF600700,
+	  .irq		= OCP_IRQ_NA,
+	  .pm		= IBM_CPM_GPIO0
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_MAL,
+	  .paddr	= OCP_PADDR_NA,
+	  .irq		= OCP_IRQ_NA,
+	  .pm		= OCP_CPM_NA,
+	  .additions	= &ibm405ep_mal0_def,
+	  .show		= &ocp_show_mal_data
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_EMAC,
+	  .index	= 0,
+	  .paddr	= EMAC0_BASE,
+	  .irq		= 15,
+	  .pm		= OCP_CPM_NA,
+	  .additions	= &ibm405ep_emac0_def,
+	  .show		= &ocp_show_emac_data
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_EMAC,
+	  .index	= 1,
+	  .paddr	= 0xEF600900,
+	  .irq		= 17,
+	  .pm		= OCP_CPM_NA,
+	  .additions	= &ibm405ep_emac1_def,
+	  .show		= &ocp_show_emac_data
+	},
+	{ .vendor	= OCP_VENDOR_INVALID
+	}
+};
diff -Nru a/arch/ppc/platforms/4xx/ibm405ep.h b/arch/ppc/platforms/4xx/ibm405ep.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/arch/ppc/platforms/4xx/ibm405ep.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,148 @@
+/*
+ * arch/ppc/platforms/4xx/ibm405ep.h
+ *
+ * IBM PPC 405EP processor defines.
+ *
+ * Author: SAW (IBM), derived from ibm405gp.h.
+ *         Maintained by MontaVista Software <source@mvista.com>
+ *
+ * 2003 (c) MontaVista Softare Inc.  This file is licensed under the
+ * terms of the GNU General Public License version 2. This program is
+ * licensed "as is" without any warranty of any kind, whether express
+ * or implied.
+ */
+
+#ifdef __KERNEL__
+#ifndef __ASM_IBM405EP_H__
+#define __ASM_IBM405EP_H__
+
+#include <linux/config.h>
+
+/* ibm405.h at bottom of this file */
+
+/* PCI
+ * PCI Bridge config reg definitions
+ * see 17-19 of manual
+ */
+
+#define PPC405_PCI_CONFIG_ADDR	0xeec00000
+#define PPC405_PCI_CONFIG_DATA	0xeec00004
+
+#define PPC405_PCI_PHY_MEM_BASE	0x80000000	/* hose_a->pci_mem_offset */
+						/* setbat */
+#define PPC405_PCI_MEM_BASE	PPC405_PCI_PHY_MEM_BASE	/* setbat */
+#define PPC405_PCI_PHY_IO_BASE	0xe8000000	/* setbat */
+#define PPC405_PCI_IO_BASE	PPC405_PCI_PHY_IO_BASE	/* setbat */
+
+#define PPC405_PCI_LOWER_MEM	0x80000000	/* hose_a->mem_space.start */
+#define PPC405_PCI_UPPER_MEM	0xBfffffff	/* hose_a->mem_space.end */
+#define PPC405_PCI_LOWER_IO	0x00000000	/* hose_a->io_space.start */
+#define PPC405_PCI_UPPER_IO	0x0000ffff	/* hose_a->io_space.end */
+
+#define PPC405_ISA_IO_BASE	PPC405_PCI_IO_BASE
+
+#define PPC4xx_PCI_IO_PADDR	((uint)PPC405_PCI_PHY_IO_BASE)
+#define PPC4xx_PCI_IO_VADDR	PPC4xx_PCI_IO_PADDR
+#define PPC4xx_PCI_IO_SIZE	((uint)64*1024)
+#define PPC4xx_PCI_CFG_PADDR	((uint)PPC405_PCI_CONFIG_ADDR)
+#define PPC4xx_PCI_CFG_VADDR	PPC4xx_PCI_CFG_PADDR
+#define PPC4xx_PCI_CFG_SIZE	((uint)4*1024)
+#define PPC4xx_PCI_LCFG_PADDR	((uint)0xef400000)
+#define PPC4xx_PCI_LCFG_VADDR	PPC4xx_PCI_LCFG_PADDR
+#define PPC4xx_PCI_LCFG_SIZE	((uint)4*1024)
+#define PPC4xx_ONB_IO_PADDR	((uint)0xef600000)
+#define PPC4xx_ONB_IO_VADDR	PPC4xx_ONB_IO_PADDR
+#define PPC4xx_ONB_IO_SIZE	((uint)4*1024)
+
+/* serial port defines */
+#define RS_TABLE_SIZE	2
+
+#define UART0_INT	0
+#define UART1_INT	1
+
+#define PCIL0_BASE	0xEF400000
+#define UART0_IO_BASE	0xEF600300
+#define UART1_IO_BASE	0xEF600400
+#define EMAC0_BASE	0xEF600800
+
+#define BD_EMAC_ADDR(e,i) bi_enetaddr[e][i]
+
+#if defined(CONFIG_UART0_TTYS0)
+#define ACTING_UART0_IO_BASE	UART0_IO_BASE
+#define ACTING_UART1_IO_BASE	UART1_IO_BASE
+#define ACTING_UART0_INT	UART0_INT
+#define ACTING_UART1_INT	UART1_INT
+#else
+#define ACTING_UART0_IO_BASE	UART1_IO_BASE
+#define ACTING_UART1_IO_BASE	UART0_IO_BASE
+#define ACTING_UART0_INT	UART1_INT
+#define ACTING_UART1_INT	UART0_INT
+#endif
+
+#define STD_UART_OP(num)					\
+	{ 0, BASE_BAUD, 0, ACTING_UART##num##_INT,			\
+		(ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST),	\
+		iomem_base: (u8 *)ACTING_UART##num##_IO_BASE,		\
+		io_type: SERIAL_IO_MEM},
+
+#define SERIAL_DEBUG_IO_BASE	ACTING_UART0_IO_BASE
+#define SERIAL_PORT_DFNS	\
+	STD_UART_OP(0)		\
+	STD_UART_OP(1)
+
+/* DCR defines */
+#define DCRN_CPMSR_BASE         0x0BA
+#define DCRN_CPMFR_BASE         0x0B9
+
+#define DCRN_CPC0_PLLMR0_BASE   0x0F0
+#define DCRN_CPC0_BOOT_BASE     0x0F1
+#define DCRN_CPC0_CR1_BASE      0x0F2
+#define DCRN_CPC0_EPRCSR_BASE   0x0F3
+#define DCRN_CPC0_PLLMR1_BASE   0x0F4
+#define DCRN_CPC0_UCR_BASE      0x0F5
+#define DCRN_CPC0_UCR_U0DIV     0x07F
+#define DCRN_CPC0_SRR_BASE      0x0F6
+#define DCRN_CPC0_JTAGID_BASE   0x0F7
+#define DCRN_CPC0_SPARE_BASE    0x0F8
+#define DCRN_CPC0_PCI_BASE      0x0F9
+
+
+#define IBM_CPM_GPT             0x80000000      /* GPT interface */
+#define IBM_CPM_PCI             0x40000000      /* PCI bridge */
+#define IBM_CPM_UIC             0x00010000      /* Universal Int Controller */
+#define IBM_CPM_CPU             0x00008000      /* processor core */
+#define IBM_CPM_EBC             0x00002000      /* EBC controller */
+#define IBM_CPM_SDRAM0          0x00004000      /* SDRAM memory controller */
+#define IBM_CPM_GPIO0           0x00001000      /* General Purpose IO */
+#define IBM_CPM_TMRCLK          0x00000400      /* CPU timers */
+#define IBM_CPM_PLB             0x00000100      /* PLB bus arbiter */
+#define IBM_CPM_OPB             0x00000080      /* PLB to OPB bridge */
+#define IBM_CPM_DMA             0x00000040      /* DMA controller */
+#define IBM_CPM_IIC0            0x00000010      /* IIC interface */
+#define IBM_CPM_UART1           0x00000002      /* serial port 0 */
+#define IBM_CPM_UART0           0x00000001      /* serial port 1 */
+#define DFLT_IBM4xx_PM          ~(IBM_CPM_PCI | IBM_CPM_CPU | IBM_CPM_DMA \
+                                        | IBM_CPM_OPB | IBM_CPM_EBC \
+                                        | IBM_CPM_SDRAM0 | IBM_CPM_PLB \
+                                        | IBM_CPM_UIC | IBM_CPM_TMRCLK)
+#define DCRN_DMA0_BASE          0x100
+#define DCRN_DMA1_BASE          0x108
+#define DCRN_DMA2_BASE          0x110
+#define DCRN_DMA3_BASE          0x118
+#define DCRNCAP_DMA_SG          1       /* have DMA scatter/gather capability */
+#define DCRN_DMASR_BASE         0x120
+#define DCRN_EBC_BASE           0x012
+#define DCRN_DCP0_BASE          0x014
+#define DCRN_MAL_BASE           0x180
+#define DCRN_OCM0_BASE          0x018
+#define DCRN_PLB0_BASE          0x084
+#define DCRN_PLLMR_BASE         0x0B0
+#define DCRN_POB0_BASE          0x0A0
+#define DCRN_SDRAM0_BASE        0x010
+#define DCRN_UIC0_BASE          0x0C0
+#define UIC0 DCRN_UIC0_BASE
+
+#include <asm/ibm405.h>
+
+#endif				/* __ASM_IBM405EP_H__ */
+#endif				/* __KERNEL__ */
diff -Nru a/arch/ppc/platforms/4xx/ibm405gp.c b/arch/ppc/platforms/4xx/ibm405gp.c
--- a/arch/ppc/platforms/4xx/ibm405gp.c	Sun May 16 01:18:35 2004
+++ b/arch/ppc/platforms/4xx/ibm405gp.c	Sun May 16 01:18:35 2004
@@ -1,26 +1,111 @@
 /*
- * arch/ppc/platforms/4xx/ibm405gp.c
  *
- * Author: Armin Kuster <akuster@mvista.com>
+ *    Copyright 2000-2001 MontaVista Software Inc.
+ *      Original author: Armin Kuster akuster@mvista.com
+ *
+ *    Module name: ibm405gp.c
+ *
+ *
+ * This program is free software; you can redistribute  it and/or modify it
+ * under  the terms of  the GNU General Public License as published by the
+ * Free Software Foundation;  either version 2 of the  License, or (at your
+ * option) any later version.
  *
- * 2001 (c) MontaVista, Software, Inc.  This file is licensed under
- * the terms of the GNU General Public License version 2.  This program
- * is licensed "as is" without any warranty of any kind, whether express
- * or implied.
  */
 
 #include <linux/config.h>
 #include <linux/init.h>
-#include <asm/ocp.h>
+#include <linux/smp.h>
+#include <linux/threads.h>
+#include <linux/param.h>
+#include <linux/string.h>
 #include <platforms/4xx/ibm405gp.h>
+#include <asm/ibm4xx.h>
+#include <asm/ocp.h>
+
+static struct ocp_func_emac_data ibm405gp_emac0_def = {
+	.rgmii_idx	= -1,		/* No RGMII */
+	.rgmii_mux	= -1,		/* No RGMII */
+	.zmii_idx	= -1,		/* ZMII device index */
+	.zmii_mux	= 0,		/* ZMII input of this EMAC */
+	.mal_idx	= 0,		/* MAL device index */
+	.mal_rx_chan	= 0,		/* MAL rx channel number */
+	.mal_tx_chan	= 0,		/* MAL tx channel number */
+	.wol_irq	= 9,		/* WOL interrupt number */
+	.mdio_idx	= -1,		/* No shared MDIO */
+	.tah_idx	= -1,		/* No TAH */
+};
+OCP_SYSFS_EMAC_DATA()
+
+static struct ocp_func_mal_data ibm405gp_mal0_def = {
+	.num_tx_chans	= 1,		/* Number of TX channels */
+	.num_rx_chans	= 1,		/* Number of RX channels */
+	.txeob_irq	= 11,		/* TX End Of Buffer IRQ  */
+	.rxeob_irq	= 12,		/* RX End Of Buffer IRQ  */
+	.txde_irq	= 13,		/* TX Descriptor Error IRQ */
+	.rxde_irq	= 14,		/* RX Descriptor Error IRQ */
+	.serr_irq	= 10,		/* MAL System Error IRQ    */
+};
+OCP_SYSFS_MAL_DATA()
 
-struct ocp_def core_ocp[]  __initdata = {
-	{OCP_VENDOR_IBM, OCP_FUNC_OPB, OPB_BASE_START, OCP_IRQ_NA, OCP_CPM_NA},
-	{OCP_VENDOR_IBM, OCP_FUNC_16550, UART0_IO_BASE, UART0_INT,IBM_CPM_UART0},
-	{OCP_VENDOR_IBM, OCP_FUNC_16550, UART1_IO_BASE, UART1_INT, IBM_CPM_UART1},
-	{OCP_VENDOR_IBM, OCP_FUNC_IIC, IIC0_BASE, IIC0_IRQ, IBM_CPM_IIC0},
-	{OCP_VENDOR_IBM, OCP_FUNC_GPIO, GPIO0_BASE, OCP_IRQ_NA, IBM_CPM_GPIO0},
-	{OCP_VENDOR_IBM, OCP_FUNC_EMAC, EMAC0_BASE, BL_MAC_ETH0, IBM_CPM_EMAC0},
-	{OCP_VENDOR_INVALID, OCP_FUNC_INVALID, 0x0, OCP_IRQ_NA, OCP_CPM_NA},
+static struct ocp_func_iic_data ibm405gp_iic0_def = {
+	.fast_mode	= 0,		/* Use standad mode (100Khz) */
+};
+OCP_SYSFS_IIC_DATA()
 
+struct ocp_def core_ocp[] = {
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_OPB,
+	  .index	= 0,
+	  .paddr	= 0xEF600000,
+	  .irq		= OCP_IRQ_NA,
+	  .pm		= OCP_CPM_NA,
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_16550,
+	  .index	= 0,
+	  .paddr	= UART0_IO_BASE,
+	  .irq		= UART0_INT,
+	  .pm		= IBM_CPM_UART0
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_16550,
+	  .index	= 1,
+	  .paddr	= UART1_IO_BASE,
+	  .irq		= UART1_INT,
+	  .pm		= IBM_CPM_UART1
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_IIC,
+	  .paddr	= 0xEF600500,
+	  .irq		= 2,
+	  .pm		= IBM_CPM_IIC0,
+	  .additions	= &ibm405gp_iic0_def,
+	  .show		= &ocp_show_iic_data,
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_GPIO,
+	  .paddr	= 0xEF600700,
+	  .irq		= OCP_IRQ_NA,
+	  .pm		= IBM_CPM_GPIO0
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_MAL,
+	  .paddr	= OCP_PADDR_NA,
+	  .irq		= OCP_IRQ_NA,
+	  .pm		= OCP_CPM_NA,
+	  .additions	= &ibm405gp_mal0_def,
+	  .show		= &ocp_show_mal_data,
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_EMAC,
+	  .index	= 0,
+	  .paddr	= EMAC0_BASE,
+	  .irq		= 15,
+	  .pm		= IBM_CPM_EMAC0,
+	  .additions	= &ibm405gp_emac0_def,
+	  .show		= &ocp_show_emac_data,
+	},
+	{ .vendor	= OCP_VENDOR_INVALID
+	}
 };
diff -Nru a/arch/ppc/platforms/4xx/ibm405gp.h b/arch/ppc/platforms/4xx/ibm405gp.h
--- a/arch/ppc/platforms/4xx/ibm405gp.h	Sun May 16 01:18:33 2004
+++ b/arch/ppc/platforms/4xx/ibm405gp.h	Sun May 16 01:18:33 2004
@@ -51,9 +51,6 @@
 #define PPC4xx_ONB_IO_VADDR	PPC4xx_ONB_IO_PADDR
 #define PPC4xx_ONB_IO_SIZE	((uint)4*1024)
 
-#define OPB_BASE_START	0x40000000
-#define EBIU_BASE_START	0xF0100000
-
 /* serial port defines */
 #define RS_TABLE_SIZE	2
 
@@ -63,24 +60,8 @@
 #define PCIL0_BASE	0xEF400000
 #define UART0_IO_BASE	0xEF600300
 #define UART1_IO_BASE	0xEF600400
-#define IIC0_BASE	0xEF600500
-#define OPB0_BASE	0xEF600600
-#define GPIO0_BASE	0xEF600700
 #define EMAC0_BASE	0xEF600800
-#define BL_MAC_WOL	9	/* WOL */
-#define BL_MAL_SERR	10	/* MAL SERR */
-#define BL_MAL_TXDE	13	/* MAL TXDE */
-#define BL_MAL_RXDE	14	/* MAL RXDE */
-#define BL_MAL_TXEOB	11	/* MAL TX EOB */
-#define BL_MAL_RXEOB	12	/* MAL RX EOB */
-#define BL_MAC_ETH0	15	/* MAC */
-
-#define EMAC_NUMS	1
-#define IIC0_IRQ	2
-#define IIC1_IRQ	0
 
-#define IIC_OWN		0x55
-#define IIC_CLOCK	50
 #define BD_EMAC_ADDR(e,i) bi_enetaddr[i]
 
 #define STD_UART_OP(num)					\
diff -Nru a/arch/ppc/platforms/4xx/ibm405gpr.c b/arch/ppc/platforms/4xx/ibm405gpr.c
--- a/arch/ppc/platforms/4xx/ibm405gpr.c	Sun May 16 01:18:35 2004
+++ b/arch/ppc/platforms/4xx/ibm405gpr.c	Sun May 16 01:18:35 2004
@@ -11,17 +11,98 @@
 
 #include <linux/config.h>
 #include <linux/init.h>
+#include <linux/smp.h>
+#include <linux/threads.h>
+#include <linux/param.h>
+#include <linux/string.h>
+#include <platforms/4xx/ibm405gpr.h>
+#include <asm/ibm4xx.h>
 #include <asm/ocp.h>
 
-#include "ibm405gpr.h"
+static struct ocp_func_emac_data ibm405gpr_emac0_def = {
+	.rgmii_idx	= -1,		/* No RGMII */
+	.rgmii_mux	= -1,		/* No RGMII */
+	.zmii_idx	= -1,		/* ZMII device index */
+	.zmii_mux	= 0,		/* ZMII input of this EMAC */
+	.mal_idx	= 0,		/* MAL device index */
+	.mal_rx_chan	= 0,		/* MAL rx channel number */
+	.mal_tx_chan	= 0,		/* MAL tx channel number */
+	.wol_irq	= 9,		/* WOL interrupt number */
+	.mdio_idx	= -1,		/* No shared MDIO */
+	.tah_idx	= -1,		/* No TAH */
+};
+OCP_SYSFS_EMAC_DATA()
 
-struct ocp_def core_ocp[]  __initdata = {
-	{OCP_VENDOR_IBM, OCP_FUNC_OPB, OPB_BASE_START, OCP_IRQ_NA, OCP_CPM_NA},
-	{OCP_VENDOR_IBM, OCP_FUNC_16550, UART0_IO_BASE, UART0_INT,IBM_CPM_UART0},
-	{OCP_VENDOR_IBM, OCP_FUNC_16550, UART1_IO_BASE, UART1_INT, IBM_CPM_UART1},
-	{OCP_VENDOR_IBM, OCP_FUNC_IIC, IIC0_BASE, IIC0_IRQ, IBM_CPM_IIC0},
-	{OCP_VENDOR_IBM, OCP_FUNC_GPIO, GPIO0_BASE, OCP_IRQ_NA, IBM_CPM_GPIO0},
-	{OCP_VENDOR_IBM, OCP_FUNC_EMAC, EMAC0_BASE, BL_MAC_ETH0, IBM_CPM_EMAC0},
-	{OCP_VENDOR_INVALID, OCP_FUNC_INVALID, 0x0, OCP_IRQ_NA, OCP_CPM_NA},
+static struct ocp_func_mal_data ibm405gpr_mal0_def = {
+	.num_tx_chans	= 1,		/* Number of TX channels */
+	.num_rx_chans	= 1,		/* Number of RX channels */
+	.txeob_irq	= 11,		/* TX End Of Buffer IRQ  */
+	.rxeob_irq	= 12,		/* RX End Of Buffer IRQ  */
+	.txde_irq	= 13,		/* TX Descriptor Error IRQ */
+	.rxde_irq	= 14,		/* RX Descriptor Error IRQ */
+	.serr_irq	= 10,		/* MAL System Error IRQ    */
+};
+OCP_SYSFS_MAL_DATA()
 
+static struct ocp_func_iic_data ibm405gpr_iic0_def = {
+	.fast_mode	= 0,		/* Use standad mode (100Khz) */
+};
+
+OCP_SYSFS_IIC_DATA()
+
+struct ocp_def core_ocp[] = {
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_OPB,
+	  .index	= 0,
+	  .paddr	= 0xEF600000,
+	  .irq		= OCP_IRQ_NA,
+	  .pm		= OCP_CPM_NA,
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_16550,
+	  .index	= 0,
+	  .paddr	= UART0_IO_BASE,
+	  .irq		= UART0_INT,
+	  .pm		= IBM_CPM_UART0
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_16550,
+	  .index	= 1,
+	  .paddr	= UART1_IO_BASE,
+	  .irq		= UART1_INT,
+	  .pm		= IBM_CPM_UART1
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_IIC,
+	  .paddr	= 0xEF600500,
+	  .irq		= 2,
+	  .pm		= IBM_CPM_IIC0,
+	  .additions	= &ibm405gpr_iic0_def,
+	  .show		= &ocp_show_iic_data,
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_GPIO,
+	  .paddr	= 0xEF600700,
+	  .irq		= OCP_IRQ_NA,
+	  .pm		= IBM_CPM_GPIO0
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_MAL,
+	  .paddr	= OCP_PADDR_NA,
+	  .irq		= OCP_IRQ_NA,
+	  .pm		= OCP_CPM_NA,
+	  .additions	= &ibm405gpr_mal0_def,
+	  .show		= &ocp_show_mal_data,
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_EMAC,
+	  .index	= 0,
+	  .paddr	= EMAC0_BASE,
+	  .irq		= 15,
+	  .pm		= IBM_CPM_EMAC0,
+	  .additions	= &ibm405gpr_emac0_def,
+	  .show		= &ocp_show_emac_data,
+	},
+	{ .vendor	= OCP_VENDOR_INVALID
+	}
 };
diff -Nru a/arch/ppc/platforms/4xx/ibm405gpr.h b/arch/ppc/platforms/4xx/ibm405gpr.h
--- a/arch/ppc/platforms/4xx/ibm405gpr.h	Sun May 16 01:18:35 2004
+++ b/arch/ppc/platforms/4xx/ibm405gpr.h	Sun May 16 01:18:35 2004
@@ -51,9 +51,6 @@
 #define PPC4xx_ONB_IO_VADDR	PPC4xx_ONB_IO_PADDR
 #define PPC4xx_ONB_IO_SIZE	((uint)4*1024)
 
-#define OPB_BASE_START	0x40000000
-#define EBIU_BASE_START	0xF0100000
-
 /* serial port defines */
 #define RS_TABLE_SIZE	2
 
@@ -63,20 +60,8 @@
 #define PCIL0_BASE	0xEF400000
 #define UART0_IO_BASE	0xEF600300
 #define UART1_IO_BASE	0xEF600400
-#define IIC0_BASE	0xEF600500
-#define OPB0_BASE	0xEF600600
-#define GPIO0_BASE	0xEF600700
 #define EMAC0_BASE	0xEF600800
-#define BL_MAC_WOL	9	/* WOL */
-#define BL_MAL_SERR	10	/* MAL SERR */
-#define BL_MAL_TXDE	13	/* MAL TXDE */
-#define BL_MAL_RXDE	14	/* MAL RXDE */
-#define BL_MAL_TXEOB	11	/* MAL TX EOB */
-#define BL_MAL_RXEOB	12	/* MAL RX EOB */
-#define BL_MAC_ETH0	15	/* MAC */
 
-#define IIC_OWN		0x55
-#define IIC_CLOCK	50
 #define BD_EMAC_ADDR(e,i) bi_enetaddr[i]
 
 #define STD_UART_OP(num)					\
diff -Nru a/arch/ppc/platforms/4xx/ibm440gp.c b/arch/ppc/platforms/4xx/ibm440gp.c
--- a/arch/ppc/platforms/4xx/ibm440gp.c	Sun May 16 01:18:35 2004
+++ b/arch/ppc/platforms/4xx/ibm440gp.c	Sun May 16 01:18:35 2004
@@ -4,8 +4,10 @@
  * PPC440GP I/O descriptions
  *
  * Matt Porter <mporter@mvista.com>
+ * Copyright 2002-2004 MontaVista Software Inc.
  *
- * Copyright 2002 MontaVista Software Inc.
+ * Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>
+ * Copyright (c) 2003, 2004 Zultys Technologies
  *
  * This program is free software; you can redistribute  it and/or modify it
  * under  the terms of  the GNU General  Public License as published by the
@@ -13,19 +15,137 @@
  * option) any later version.
  *
  */
+#include <linux/init.h>
+#include <linux/module.h>
 #include <platforms/4xx/ibm440gp.h>
 #include <asm/ocp.h>
-#include <linux/init.h>
 
-struct ocp_def core_ocp[] __initdata = {
-	{OCP_VENDOR_IBM, OCP_FUNC_OPB, PPC440GP_OPB_BASE_START, OCP_IRQ_NA, OCP_CPM_NA},
-	{OCP_VENDOR_IBM, OCP_FUNC_16550, PPC440GP_UART0_ADDR, UART0_INT, IBM_CPM_UART0},
-	{OCP_VENDOR_IBM, OCP_FUNC_16550, PPC440GP_UART1_ADDR, UART1_INT, IBM_CPM_UART1},
-	{OCP_VENDOR_IBM, OCP_FUNC_IIC, PPC440GP_IIC0_ADDR, IIC0_IRQ, IBM_CPM_IIC0},
-	{OCP_VENDOR_IBM, OCP_FUNC_IIC, PPC440GP_IIC1_ADDR, IIC1_IRQ, IBM_CPM_IIC1},
-	{OCP_VENDOR_IBM, OCP_FUNC_GPIO, PPC440GP_GPIO0_ADDR, OCP_IRQ_NA, IBM_CPM_GPIO0},
-	{OCP_VENDOR_IBM, OCP_FUNC_EMAC, PPC440GP_EMAC0_ADDR, BL_MAC_ETH0, OCP_CPM_NA},
-	{OCP_VENDOR_IBM, OCP_FUNC_EMAC, PPC440GP_EMAC1_ADDR, BL_MAC_ETH1, OCP_CPM_NA},
-	{OCP_VENDOR_IBM, OCP_FUNC_ZMII, PPC440GP_ZMII_ADDR, OCP_IRQ_NA, OCP_CPM_NA},
-	{OCP_VENDOR_INVALID, OCP_FUNC_INVALID, 0x0, OCP_IRQ_NA, OCP_CPM_NA},
+static struct ocp_func_emac_data ibm440gp_emac0_def = {
+	.rgmii_idx	= -1,           /* No RGMII */
+	.rgmii_mux	= -1,           /* No RGMII */
+	.zmii_idx       = 0,            /* ZMII device index */
+	.zmii_mux       = 0,            /* ZMII input of this EMAC */
+	.mal_idx        = 0,            /* MAL device index */
+	.mal_rx_chan    = 0,            /* MAL rx channel number */
+	.mal_tx_chan    = 0,            /* MAL tx channel number */
+	.wol_irq        = 61,		/* WOL interrupt number */
+	.mdio_idx       = -1,           /* No shared MDIO */
+	.tah_idx	= -1,           /* No TAH */
+};
+
+static struct ocp_func_emac_data ibm440gp_emac1_def = {
+	.rgmii_idx	= -1,           /* No RGMII */
+	.rgmii_mux	= -1,           /* No RGMII */
+	.zmii_idx       = 0,            /* ZMII device index */
+	.zmii_mux       = 1,            /* ZMII input of this EMAC */
+	.mal_idx        = 0,            /* MAL device index */
+	.mal_rx_chan    = 1,            /* MAL rx channel number */
+	.mal_tx_chan    = 2,            /* MAL tx channel number */
+	.wol_irq        = 63,  		/* WOL interrupt number */
+	.mdio_idx       = -1,           /* No shared MDIO */
+	.tah_idx	= -1,           /* No TAH */
+};
+OCP_SYSFS_EMAC_DATA()
+
+static struct ocp_func_mal_data ibm440gp_mal0_def = {
+	.num_tx_chans   = 4,  		/* Number of TX channels */
+	.num_rx_chans   = 2,    	/* Number of RX channels */
+	.txeob_irq	= 10,		/* TX End Of Buffer IRQ  */
+	.rxeob_irq	= 11,		/* RX End Of Buffer IRQ  */
+	.txde_irq	= 33,		/* TX Descriptor Error IRQ */
+	.rxde_irq	= 34,		/* RX Descriptor Error IRQ */
+	.serr_irq	= 32,		/* MAL System Error IRQ    */
+};
+OCP_SYSFS_MAL_DATA()
+
+static struct ocp_func_iic_data ibm440gp_iic0_def = {
+	.fast_mode	= 0,		/* Use standad mode (100Khz) */
+};
+
+static struct ocp_func_iic_data ibm440gp_iic1_def = {
+	.fast_mode	= 0,		/* Use standad mode (100Khz) */
+};
+OCP_SYSFS_IIC_DATA()
+
+struct ocp_def core_ocp[] = {
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_OPB,
+	  .index	= 0,
+	  .paddr	= 0x0000000140000000ULL,
+	  .irq		= OCP_IRQ_NA,
+	  .pm		= OCP_CPM_NA,
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_16550,
+	  .index	= 0,
+	  .paddr	= PPC440GP_UART0_ADDR,
+	  .irq		= UART0_INT,
+	  .pm		= IBM_CPM_UART0,
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_16550,
+	  .index	= 1,
+	  .paddr	= PPC440GP_UART1_ADDR,
+	  .irq		= UART1_INT,
+	  .pm		= IBM_CPM_UART1,
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_IIC,
+	  .index	= 0,
+	  .paddr	= 0x0000000140000400ULL,
+	  .irq		= 2,
+	  .pm		= IBM_CPM_IIC0,
+	  .additions	= &ibm440gp_iic0_def,
+	  .show		= &ocp_show_iic_data
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_IIC,
+	  .index	= 1,
+	  .paddr	= 0x0000000140000500ULL,
+	  .irq		= 3,
+	  .pm		= IBM_CPM_IIC1,
+	  .additions	= &ibm440gp_iic1_def,
+	  .show		= &ocp_show_iic_data
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_GPIO,
+	  .index	= 0,
+	  .paddr	= 0x0000000140000700ULL,
+	  .irq		= OCP_IRQ_NA,
+	  .pm		= IBM_CPM_GPIO0,
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_MAL,
+	  .paddr	= OCP_PADDR_NA,
+	  .irq		= OCP_IRQ_NA,
+	  .pm		= OCP_CPM_NA,
+	  .additions	= &ibm440gp_mal0_def,
+	  .show		= &ocp_show_mal_data,
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_EMAC,
+	  .index	= 0,
+	  .paddr	= 0x0000000140000800UL,
+	  .irq		= 60,
+	  .pm		= OCP_CPM_NA,
+	  .additions	= &ibm440gp_emac0_def,
+	  .show		= &ocp_show_emac_data,
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_EMAC,
+	  .index	= 1,
+	  .paddr	= 0x0000000140000900ULL,
+	  .irq		= 62,
+	  .pm		= OCP_CPM_NA,
+	  .additions	= &ibm440gp_emac1_def,
+	  .show		= &ocp_show_emac_data,
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_ZMII,
+	  .paddr	= 0x0000000140000780ULL,
+	  .irq		= OCP_IRQ_NA,
+	  .pm		= OCP_CPM_NA,
+	},
+	{ .vendor	= OCP_VENDOR_INVALID
+	}
 };
diff -Nru a/arch/ppc/platforms/4xx/ibm440gp.h b/arch/ppc/platforms/4xx/ibm440gp.h
--- a/arch/ppc/platforms/4xx/ibm440gp.h	Sun May 16 01:18:34 2004
+++ b/arch/ppc/platforms/4xx/ibm440gp.h	Sun May 16 01:18:34 2004
@@ -22,44 +22,11 @@
 
 #include <linux/config.h>
 
-#define EMAC_NUMS		2
-#define UART_NUMS		2
-#define ZMII_NUMS		1
-#define IIC_NUMS		2
-#define IIC0_IRQ		2
-#define IIC1_IRQ		3
-#define GPIO_NUMS		1
-
-/* UART location */
+/* UART */
 #define PPC440GP_UART0_ADDR	0x0000000140000200ULL
 #define PPC440GP_UART1_ADDR	0x0000000140000300ULL
-
-/* EMAC location */
-#define PPC440GP_EMAC0_ADDR	0x0000000140000800ULL
-#define PPC440GP_EMAC1_ADDR	0x0000000140000900ULL
-#define PPC440GP_EMAC_SIZE	0x70
-
-/* EMAC IRQ's */
-#define BL_MAC_WOL	61	/* WOL */
-#define BL_MAC_WOL1	63	/* WOL */
-#define BL_MAL_SERR	32	/* MAL SERR */
-#define BL_MAL_TXDE	33	/* MAL TXDE */
-#define BL_MAL_RXDE	34	/* MAL RXDE */
-#define BL_MAL_TXEOB	10	/* MAL TX EOB */
-#define BL_MAL_RXEOB	11	/* MAL RX EOB */
-#define BL_MAC_ETH0	60	/* MAC */
-#define BL_MAC_ETH1	62	/* MAC */
-
-/* ZMII location */
-#define PPC440GP_ZMII_ADDR	0x0000000140000780ULL
-#define PPC440GP_ZMII_SIZE	0x0c
-
-/* I2C location */
-#define PPC440GP_IIC0_ADDR	0x40000400
-#define PPC440GP_IIC1_ADDR	0x40000500
-
-/* GPIO location */
-#define PPC440GP_GPIO0_ADDR	0x0000000140000700ULL
+#define UART0_INT		0
+#define UART1_INT		1
 
 /* Clock and Power Management */
 #define IBM_CPM_IIC0		0x80000000	/* IIC interface */
@@ -87,9 +54,6 @@
 				| IBM_CPM_EBC | IBM_CPM_SRAM | IBM_CPM_BGO \
 				| IBM_CPM_EBM | IBM_CPM_PLB | IBM_CPM_OPB \
 				| IBM_CPM_TMRCLK | IBM_CPM_DMA | IBM_CPM_PCI)
-
-#define PPC440GP_OPB_BASE_START	0x0000000140000000ULL
-
 /*
  * Serial port defines
  */
diff -Nru a/arch/ppc/platforms/4xx/ibm440gx.c b/arch/ppc/platforms/4xx/ibm440gx.c
--- a/arch/ppc/platforms/4xx/ibm440gx.c	Sun May 16 01:18:35 2004
+++ b/arch/ppc/platforms/4xx/ibm440gx.c	Sun May 16 01:18:35 2004
@@ -1,11 +1,13 @@
 /*
- * arch/ppc/platforms/ibm440gx.c
+ * arch/ppc/platforms/4xx/ibm440gx.c
  *
  * PPC440GX I/O descriptions
  *
  * Matt Porter <mporter@mvista.com>
+ * Copyright 2002-2004 MontaVista Software Inc.
  *
- * Copyright 2002-2003 MontaVista Software Inc.
+ * Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>
+ * Copyright (c) 2003, 2004 Zultys Technologies
  *
  * This program is free software; you can redistribute  it and/or modify it
  * under  the terms of  the GNU General  Public License as published by the
@@ -13,25 +15,203 @@
  * option) any later version.
  *
  */
-
-#include <linux/config.h>
 #include <linux/init.h>
-#include <linux/smp.h>
-#include <linux/threads.h>
-#include <linux/param.h>
-#include <linux/string.h>
-#include <asm/ocp.h>
+#include <linux/module.h>
 #include <platforms/4xx/ibm440gx.h>
+#include <asm/ocp.h>
+
+static struct ocp_func_emac_data ibm440gx_emac0_def = {
+	.rgmii_idx	= -1,		/* No RGMII */
+	.rgmii_mux	= -1,		/* No RGMII */
+	.zmii_idx       = 0,            /* ZMII device index */
+	.zmii_mux       = 0,            /* ZMII input of this EMAC */
+	.mal_idx        = 0,            /* MAL device index */
+	.mal_rx_chan    = 0,            /* MAL rx channel number */
+	.mal_tx_chan    = 0,            /* MAL tx channel number */
+	.wol_irq        = 61,   	/* WOL interrupt number */
+	.mdio_idx       = -1,           /* No shared MDIO */
+	.tah_idx	= -1,		/* No TAH */
+};
+
+static struct ocp_func_emac_data ibm440gx_emac1_def = {
+	.rgmii_idx	= -1,		/* No RGMII */
+	.rgmii_mux	= -1,		/* No RGMII */
+	.zmii_idx       = 0,            /* ZMII device index */
+	.zmii_mux       = 1,            /* ZMII input of this EMAC */
+	.mal_idx        = 0,            /* MAL device index */
+	.mal_rx_chan    = 1,            /* MAL rx channel number */
+	.mal_tx_chan    = 1,            /* MAL tx channel number */
+	.wol_irq        = 63,  		/* WOL interrupt number */
+	.mdio_idx       = -1,           /* No shared MDIO */
+	.tah_idx	= -1,		/* No TAH */
+};
+
+static struct ocp_func_emac_data ibm440gx_emac2_def = {
+	.rgmii_idx	= 0,		/* RGMII device index */
+	.rgmii_mux	= 0,		/* RGMII input of this EMAC */
+	.zmii_idx       = 0,            /* ZMII device index */
+	.zmii_mux       = 2,            /* ZMII input of this EMAC */
+	.mal_idx        = 0,            /* MAL device index */
+	.mal_rx_chan    = 2,            /* MAL rx channel number */
+	.mal_tx_chan    = 2,            /* MAL tx channel number */
+	.wol_irq        = 65,  		/* WOL interrupt number */
+	.mdio_idx       = -1,           /* No shared MDIO */
+	.tah_idx	= 0,		/* TAH device index */
+	.jumbo		= 1,		/* Jumbo frames supported */
+};
+
+static struct ocp_func_emac_data ibm440gx_emac3_def = {
+	.rgmii_idx	= 0,		/* RGMII device index */
+	.rgmii_mux	= 1,		/* RGMII input of this EMAC */
+	.zmii_idx       = 0,            /* ZMII device index */
+	.zmii_mux       = 3,            /* ZMII input of this EMAC */
+	.mal_idx        = 0,            /* MAL device index */
+	.mal_rx_chan    = 3,            /* MAL rx channel number */
+	.mal_tx_chan    = 3,            /* MAL tx channel number */
+	.wol_irq        = 67,  		/* WOL interrupt number */
+	.mdio_idx       = -1,           /* No shared MDIO */
+	.tah_idx	= 1,		/* TAH device index */
+	.jumbo		= 1,		/* Jumbo frames supported */
+};
+OCP_SYSFS_EMAC_DATA()
+
+static struct ocp_func_mal_data ibm440gx_mal0_def = {
+	.num_tx_chans   = 4,    	/* Number of TX channels */
+	.num_rx_chans   = 4,    	/* Number of RX channels */
+	.txeob_irq	= 10,		/* TX End Of Buffer IRQ  */
+	.rxeob_irq	= 11,		/* RX End Of Buffer IRQ  */
+	.txde_irq	= 33,		/* TX Descriptor Error IRQ */
+	.rxde_irq	= 34,		/* RX Descriptor Error IRQ */
+	.serr_irq	= 32,		/* MAL System Error IRQ    */
+};
+OCP_SYSFS_MAL_DATA()
+
+static struct ocp_func_iic_data ibm440gx_iic0_def = {
+	.fast_mode	= 0,		/* Use standad mode (100Khz) */
+};
+
+static struct ocp_func_iic_data ibm440gx_iic1_def = {
+	.fast_mode	= 0,		/* Use standad mode (100Khz) */
+};
+OCP_SYSFS_IIC_DATA()
 
-struct ocp_def core_ocp[] __initdata = {
-	{OCP_VENDOR_IBM, OCP_FUNC_OPB, PPC440GX_OPB_BASE_START, OCP_IRQ_NA, OCP_CPM_NA},
-	{OCP_VENDOR_IBM, OCP_FUNC_16550, PPC440GX_UART0_ADDR, UART0_IRQ, IBM_CPM_UART0},
-	{OCP_VENDOR_IBM, OCP_FUNC_16550, PPC440GX_UART1_ADDR, UART1_IRQ, IBM_CPM_UART1},
-	{OCP_VENDOR_IBM, OCP_FUNC_IIC, PPC440GX_IIC0_ADDR, IIC0_IRQ, IBM_CPM_IIC0},
-	{OCP_VENDOR_IBM, OCP_FUNC_IIC, PPC440GX_IIC1_ADDR, IIC1_IRQ, IBM_CPM_IIC1},
-	{OCP_VENDOR_IBM, OCP_FUNC_GPIO, PPC440GX_GPIO0_ADDR, OCP_IRQ_NA, IBM_CPM_GPIO0},
-	{OCP_VENDOR_IBM, OCP_FUNC_EMAC, PPC440GX_EMAC0_ADDR, BL_MAC_ETH0, OCP_CPM_NA},
-	{OCP_VENDOR_IBM, OCP_FUNC_EMAC, PPC440GX_EMAC1_ADDR, BL_MAC_ETH1, OCP_CPM_NA},
-	{OCP_VENDOR_IBM, OCP_FUNC_ZMII, PPC440GX_ZMII_ADDR, OCP_IRQ_NA, OCP_CPM_NA},
-	{OCP_VENDOR_INVALID, OCP_FUNC_INVALID, 0x0, OCP_IRQ_NA, OCP_CPM_NA},
+struct ocp_def core_ocp[] = {
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_OPB,
+	  .index	= 0,
+	  .paddr	= 0x0000000140000000ULL,
+	  .irq		= OCP_IRQ_NA,
+	  .pm		= OCP_CPM_NA,
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_16550,
+	  .index	= 0,
+	  .paddr	= PPC440GX_UART0_ADDR,
+	  .irq		= UART0_INT,
+	  .pm		= IBM_CPM_UART0,
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_16550,
+	  .index	= 1,
+	  .paddr	= PPC440GX_UART1_ADDR,
+	  .irq		= UART1_INT,
+	  .pm		= IBM_CPM_UART1,
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_IIC,
+	  .index	= 0,
+	  .paddr	= 0x0000000140000400ULL,
+	  .irq		= 2,
+	  .pm		= IBM_CPM_IIC0,
+	  .additions	= &ibm440gx_iic0_def,
+	  .show		= &ocp_show_iic_data
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_IIC,
+	  .index	= 1,
+	  .paddr	= 0x0000000140000500ULL,
+	  .irq		= 3,
+	  .pm		= IBM_CPM_IIC1,
+	  .additions	= &ibm440gx_iic1_def,
+	  .show		= &ocp_show_iic_data
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_GPIO,
+	  .index	= 0,
+	  .paddr	= 0x0000000140000700ULL,
+	  .irq		= OCP_IRQ_NA,
+	  .pm		= IBM_CPM_GPIO0,
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_MAL,
+	  .paddr	= OCP_PADDR_NA,
+	  .irq		= OCP_IRQ_NA,
+	  .pm		= OCP_CPM_NA,
+	  .additions	= &ibm440gx_mal0_def,
+	  .show		= &ocp_show_mal_data,
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_EMAC,
+	  .index	= 0,
+	  .paddr	= 0x0000000140000800ULL,
+	  .irq		= 60,
+	  .pm		= OCP_CPM_NA,
+	  .additions	= &ibm440gx_emac0_def,
+	  .show		= &ocp_show_emac_data,
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_EMAC,
+	  .index	= 1,
+	  .paddr	= 0x0000000140000900ULL,
+	  .irq		= 62,
+	  .pm		= OCP_CPM_NA,
+	  .additions	= &ibm440gx_emac1_def,
+	  .show		= &ocp_show_emac_data,
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_EMAC,
+	  .index	= 2,
+	  .paddr	= 0x0000000140000C00ULL,
+	  .irq		= 64,
+	  .pm		= OCP_CPM_NA,
+	  .additions	= &ibm440gx_emac2_def,
+	  .show		= &ocp_show_emac_data,
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_EMAC,
+	  .index	= 3,
+	  .paddr	= 0x0000000140000E00ULL,
+	  .irq		= 66,
+	  .pm		= OCP_CPM_NA,
+	  .additions	= &ibm440gx_emac3_def,
+	  .show		= &ocp_show_emac_data,
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_RGMII,
+	  .paddr	= 0x0000000140000790ULL,
+	  .irq		= OCP_IRQ_NA,
+	  .pm		= OCP_CPM_NA,
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_ZMII,
+	  .paddr	= 0x0000000140000780ULL,
+	  .irq		= OCP_IRQ_NA,
+	  .pm		= OCP_CPM_NA,
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_TAH,
+	  .index	= 0,
+	  .paddr	= 0x0000000140000b50ULL,
+	  .irq		= 68,
+	  .pm		= OCP_CPM_NA,
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_TAH,
+	  .index	= 1,
+	  .paddr	= 0x0000000140000d50ULL,
+	  .irq		= 69,
+	  .pm		= OCP_CPM_NA,
+	},
+	{ .vendor	= OCP_VENDOR_INVALID
+	}
 };
diff -Nru a/arch/ppc/platforms/4xx/ibm440gx.h b/arch/ppc/platforms/4xx/ibm440gx.h
--- a/arch/ppc/platforms/4xx/ibm440gx.h	Sun May 16 01:18:37 2004
+++ b/arch/ppc/platforms/4xx/ibm440gx.h	Sun May 16 01:18:37 2004
@@ -26,53 +26,8 @@
 /* UART */
 #define PPC440GX_UART0_ADDR	0x0000000140000200ULL
 #define PPC440GX_UART1_ADDR	0x0000000140000300ULL
-#define UART0_IRQ		0
-#define UART1_IRQ		1
-
-/* EMAC */
-#define PPC440GX_EMAC0_ADDR	0x0000000140000800ULL
-#define PPC440GX_EMAC1_ADDR	0x0000000140000900ULL
-#define PPC440GX_EMAC2_ADDR	0x0000000140000C00ULL
-#define PPC440GX_EMAC3_ADDR	0x0000000140000E00ULL
-#define PPC440GX_EMAC_SIZE	0xFC
-#define EMAC_NUMS               2
-#define BL_MAC_WOL	61	/* WOL */
-#define BL_MAC_WOL1	63	/* WOL */
-#define BL_MAC_WOL2	65	/* WOL */
-#define BL_MAC_WOL3	67	/* WOL */
-#define BL_MAL_SERR	32	/* MAL SERR */
-#define BL_MAL_TXDE	33	/* MAL TXDE */
-#define BL_MAL_RXDE	34	/* MAL RXDE */
-#define BL_MAL_TXEOB	10	/* MAL TX EOB */
-#define BL_MAL_RXEOB	11	/* MAL RX EOB */
-#define BL_MAC_ETH0	60	/* MAC */
-#define BL_MAC_ETH1	62	/* MAC */
-#define BL_MAC_ETH2	64	/* MAC */
-#define BL_MAC_ETH3	66	/* MAC */
-#define BL_TAH0		68	/* TAH 0 */
-#define BL_TAH1		69	/* TAH 1 */
-
-/* TAH */
-#define PPC440GX_TAH0_ADDR	0x0000000140000B00ULL
-#define PPC440GX_TAH1_ADDR	0x0000000140000D00ULL
-#define PPC440GX_TAH_SIZE	0xFC
-
-/* ZMII */
-#define PPC440GX_ZMII_ADDR	0x0000000140000780ULL
-#define PPC440GX_ZMII_SIZE	0x0c
-
-/* RGMII */
-#define PPC440GX_RGMII_ADDR	0x0000000140000790ULL
-#define PPC440GX_RGMII_SIZE	0x0c
-
-/* IIC  */
-#define PPC440GX_IIC0_ADDR	0x40000400
-#define PPC440GX_IIC1_ADDR	0x40000500
-#define IIC0_IRQ		2
-#define IIC1_IRQ		3
-
-/* GPIO */
-#define PPC440GX_GPIO0_ADDR	0x0000000140000700ULL
+#define UART0_INT		0
+#define UART1_INT		1
 
 /* Clock and Power Management */
 #define IBM_CPM_IIC0		0x80000000	/* IIC interface */
@@ -110,10 +65,6 @@
 				| IBM_CPM_TAHOE0 | IBM_CPM_TAHOE1 \
 				| IBM_CPM_EMAC0 | IBM_CPM_EMAC1 \
 			  	| IBM_CPM_EMAC2 | IBM_CPM_EMAC3 )
-
-/* OPB */
-#define PPC440GX_OPB_BASE_START	0x0000000140000000ULL
-
 /*
  * Serial port defines
  */
diff -Nru a/arch/ppc/platforms/4xx/ibmnp405h.c b/arch/ppc/platforms/4xx/ibmnp405h.c
--- a/arch/ppc/platforms/4xx/ibmnp405h.c	Sun May 16 01:18:36 2004
+++ b/arch/ppc/platforms/4xx/ibmnp405h.c	Sun May 16 01:18:36 2004
@@ -14,21 +14,159 @@
 #include <asm/ocp.h>
 #include <platforms/4xx/ibmnp405h.h>
 
+static struct ocp_func_emac_data ibmnp405h_emac0_def = {
+	.rgmii_idx	= -1,		/* No RGMII */
+	.rgmii_mux	= -1,		/* No RGMII */
+	.zmii_idx	= 0,		/* ZMII device index */
+	.zmii_mux	= 0,		/* ZMII input of this EMAC */
+	.mal_idx	= 0,		/* MAL device index */
+	.mal_rx_chan	= 0,		/* MAL rx channel number */
+	.mal_tx_chan	= 0,		/* MAL tx channel number */
+	.wol_irq	= 41,		/* WOL interrupt number */
+	.mdio_idx	= -1,		/* No shared MDIO */
+	.tah_idx	= -1,		/* No TAH */
+};
+
+static struct ocp_func_emac_data ibmnp405h_emac1_def = {
+	.rgmii_idx	= -1,		/* No RGMII */
+	.rgmii_mux	= -1,		/* No RGMII */
+	.zmii_idx	= 0,		/* ZMII device index */
+	.zmii_mux	= 1,		/* ZMII input of this EMAC */
+	.mal_idx	= 0,		/* MAL device index */
+	.mal_rx_chan	= 1,		/* MAL rx channel number */
+	.mal_tx_chan	= 1,		/* MAL tx channel number */
+	.wol_irq	= 41,		/* WOL interrupt number */
+	.mdio_idx	= -1,		/* No shared MDIO */
+	.tah_idx	= -1,		/* No TAH */
+};
+static struct ocp_func_emac_data ibmnp405h_emac2_def = {
+	.rgmii_idx	= -1,		/* No RGMII */
+	.rgmii_mux	= -1,		/* No RGMII */
+	.zmii_idx	= 0,		/* ZMII device index */
+	.zmii_mux	= 2,		/* ZMII input of this EMAC */
+	.mal_idx	= 0,		/* MAL device index */
+	.mal_rx_chan	= 2,		/* MAL rx channel number */
+	.mal_tx_chan	= 2,		/* MAL tx channel number */
+	.wol_irq	= 41,		/* WOL interrupt number */
+	.mdio_idx	= -1,		/* No shared MDIO */
+	.tah_idx	= -1,		/* No TAH */
+};
+static struct ocp_func_emac_data ibmnp405h_emac3_def = {
+	.rgmii_idx	= -1,		/* No RGMII */
+	.rgmii_mux	= -1,		/* No RGMII */
+	.zmii_idx	= 0,		/* ZMII device index */
+	.zmii_mux	= 3,		/* ZMII input of this EMAC */
+	.mal_idx	= 0,		/* MAL device index */
+	.mal_rx_chan	= 3,		/* MAL rx channel number */
+	.mal_tx_chan	= 3,		/* MAL tx channel number */
+	.wol_irq	= 41,		/* WOL interrupt number */
+	.mdio_idx	= -1,		/* No shared MDIO */
+	.tah_idx	= -1,		/* No TAH */
+};
+OCP_SYSFS_EMAC_DATA()
+
+static struct ocp_func_mal_data ibmnp405h_mal0_def = {
+	.num_tx_chans	= 8,		/* Number of TX channels */
+	.num_rx_chans	= 4,		/* Number of RX channels */
+	.txeob_irq	= 17,		/* TX End Of Buffer IRQ  */
+	.rxeob_irq	= 18,		/* RX End Of Buffer IRQ  */
+	.txde_irq	= 46,		/* TX Descriptor Error IRQ */
+	.rxde_irq	= 47,		/* RX Descriptor Error IRQ */
+	.serr_irq	= 45,		/* MAL System Error IRQ    */
+};
+OCP_SYSFS_MAL_DATA()
+
+static struct ocp_func_iic_data ibmnp405h_iic0_def = {
+	.fast_mode	= 0,		/* Use standad mode (100Khz) */
+};
+OCP_SYSFS_IIC_DATA()
 
 struct ocp_def core_ocp[] = {
-//	{OCP_VENDOR_IBM, OCP_FUNC_PLB, 0x0, OCP_IRQ_NA, OCP_CPM_NA},
-	{OCP_VENDOR_IBM, OCP_FUNC_OPB, OPB_BASE_START, OCP_IRQ_NA, OCP_CPM_NA},
-	{OCP_VENDOR_IBM, OCP_FUNC_16550, UART0_IO_BASE, UART0_INT,IBM_CPM_UART0},
-	{OCP_VENDOR_IBM, OCP_FUNC_16550, UART1_IO_BASE, UART1_INT, IBM_CPM_UART1},
-	{OCP_VENDOR_IBM, OCP_FUNC_IIC, IIC0_BASE, IIC0_IRQ, IBM_CPM_IIC0},
-	{OCP_VENDOR_IBM, OCP_FUNC_GPIO, GPIO0_BASE, OCP_IRQ_NA, IBM_CPM_GPIO0},
-	{OCP_VENDOR_IBM, OCP_FUNC_EMAC, EMAC0_BASE, BL_MAC_ETH0, IBM_CPM_EMAC0},
-	{OCP_VENDOR_IBM, OCP_FUNC_EMAC, EMAC0_BASE, BL_MAC_ETH0, IBM_CPM_EMAC0},
-	{OCP_VENDOR_IBM, OCP_FUNC_EMAC, EMAC1_BASE, BL_MAC_ETH1, IBM_CPM_EMAC1},
-	{OCP_VENDOR_IBM, OCP_FUNC_EMAC, EMAC2_BASE, BL_MAC_ETH2, IBM_CPM_EMAC2},
-	{OCP_VENDOR_IBM, OCP_FUNC_EMAC, EMAC3_BASE, BL_MAC_ETH3, IBM_CPM_EMAC3},
-	{OCP_VENDOR_IBM, OCP_FUNC_PHY, ZMII0_BASE, OCP_IRQ_NA, OCP_CPM_NA},
-//	{OCP_VENDOR_IBM, OCP_FUNC_EXT, EBIU_BASE_START, OCP_IRQ_NA,IBM_CPM_EBC},
-//	{OCP_VENDOR_IBM, OCP_FUNC_PCI, PCIL0_BASE, OCP_IRQ_NA, IBM_CPM_PCI},
-	{OCP_VENDOR_INVALID, OCP_FUNC_INVALID, 0x0, OCP_IRQ_NA, OCP_CPM_NA},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_OPB,
+	  .index	= 0,
+	  .paddr	= 0xEF600000,
+	  .irq		= OCP_IRQ_NA,
+	  .pm		= OCP_CPM_NA,
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_16550,
+	  .index	= 0,
+	  .paddr	= UART0_IO_BASE,
+	  .irq		= UART0_INT,
+	  .pm		= IBM_CPM_UART0
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_16550,
+	  .index	= 1,
+	  .paddr	= UART1_IO_BASE,
+	  .irq		= UART1_INT,
+	  .pm		= IBM_CPM_UART1
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_IIC,
+	  .paddr	= 0xEF600500,
+	  .irq		= 2,
+	  .pm		= IBM_CPM_IIC0,
+	  .additions	= &ibmnp405h_iic0_def,
+	  .show		= &ocp_show_iic_data
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_GPIO,
+	  .paddr	= 0xEF600700,
+	  .irq		= OCP_IRQ_NA,
+	  .pm		= IBM_CPM_GPIO0
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_MAL,
+	  .paddr	= OCP_PADDR_NA,
+	  .irq		= OCP_IRQ_NA,
+	  .pm		= OCP_CPM_NA,
+	  .additions	= &ibmnp405h_mal0_def,
+	  .show		= &ocp_show_mal_data,
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_EMAC,
+	  .index	= 0,
+	  .paddr	= EMAC0_BASE,
+	  .irq		= 37,
+	  .pm		= IBM_CPM_EMAC0,
+	  .additions	= &ibmnp405h_emac0_def,
+	  .show		= &ocp_show_emac_data,
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_EMAC,
+	  .index	= 1,
+	  .paddr	= 0xEF600900,
+	  .irq		= 38,
+	  .pm		= IBM_CPM_EMAC1,
+	  .additions	= &ibmnp405h_emac1_def,
+	  .show		= &ocp_show_emac_data,
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_EMAC,
+	  .index	= 2,
+	  .paddr	= 0xEF600a00,
+	  .irq		= 39,
+	  .pm		= IBM_CPM_EMAC2,
+	  .additions	= &ibmnp405h_emac2_def,
+	  .show		= &ocp_show_emac_data,
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_EMAC,
+	  .index	= 3,
+	  .paddr	= 0xEF600b00,
+	  .irq		= 40,
+	  .pm		= IBM_CPM_EMAC3,
+	  .additions	= &ibmnp405h_emac3_def,
+	  .show		= &ocp_show_emac_data,
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_ZMII,
+	  .paddr	= 0xEF600C10,
+	  .irq		= OCP_IRQ_NA,
+	  .pm		= OCP_CPM_NA,
+	},
+	{ .vendor	= OCP_VENDOR_INVALID
+	}
 };
diff -Nru a/arch/ppc/platforms/4xx/ibmnp405h.h b/arch/ppc/platforms/4xx/ibmnp405h.h
--- a/arch/ppc/platforms/4xx/ibmnp405h.h	Sun May 16 01:18:35 2004
+++ b/arch/ppc/platforms/4xx/ibmnp405h.h	Sun May 16 01:18:35 2004
@@ -14,7 +14,6 @@
 #define __ASM_IBMNP405H_H__
 
 #include <linux/config.h>
-#include <asm/ibm_ocp.h>
 
 /* ibm405.h at bottom of this file */
 
@@ -42,9 +41,6 @@
 #define PPC4xx_ONB_IO_ADDR	((uint)0xef600000)
 #define PPC4xx_ONB_IO_SIZE	((uint)4*1024)
 
-#define OPB_BASE_START	0x40000000
-#define EBIU_BASE_START	0xF0100000
-
 /* serial port defines */
 #define RS_TABLE_SIZE	4
 
@@ -53,27 +49,8 @@
 #define PCIL0_BASE	0xEF400000
 #define UART0_IO_BASE	0xEF600300
 #define UART1_IO_BASE	0xEF600400
-#define IIC0_BASE	0xEF600500
 #define OPB0_BASE	0xEF600600
-#define GPIO0_BASE	0xEF600700
 #define EMAC0_BASE	0xEF600800
-#define EMAC1_BASE	0xEF600900
-#define EMAC2_BASE	0xEF600a00
-#define EMAC3_BASE	0xEF600b00
-#define ZMII0_BASE	0xEF600C10
-#define BL_MAC_WOL	41 	/* WOL */
-#define BL_MAL_SERR	45	/* MAL SERR */
-#define BL_MAL_TXDE	46	/* MAL TXDE */
-#define BL_MAL_RXDE	47	/* MAL RXDE */
-#define BL_MAL_TXEOB	17	/* MAL TX EOB */
-#define BL_MAL_RXEOB	18	/* MAL RX EOB */
-#define BL_MAC_ETH0	37	/* MAC */
-#define BL_MAC_ETH1	38	/* MAC */
-#define BL_MAC_ETH2	39	/* MAC */
-#define BL_MAC_ETH3	40	/* MAC */
-
-#define EMAC_NUMS	4
-#define IIC0_IRQ	2
 
 #define BD_EMAC_ADDR(e,i) bi_enetaddr[e][i]
 
diff -Nru a/arch/ppc/platforms/4xx/ibmstb4.c b/arch/ppc/platforms/4xx/ibmstb4.c
--- a/arch/ppc/platforms/4xx/ibmstb4.c	Sun May 16 01:18:33 2004
+++ b/arch/ppc/platforms/4xx/ibmstb4.c	Sun May 16 01:18:33 2004
@@ -9,19 +9,75 @@
  * or implied.
  */
 
-#include <linux/config.h>
-#include <linux/module.h>
-#include "ibmstb4.h"
+#include <linux/init.h>
 #include <asm/ocp.h>
+#include <platforms/4xx/ibmstb4.h>
 
-struct ocp_def core_ocp[] = {
-	{UART, UART0_IO_BASE, UART0_INT,IBM_CPM_UART0},
-	{UART, UART1_IO_BASE, UART1_INT, IBM_CPM_UART1},
-	{UART, UART2_IO_BASE, UART2_INT, IBM_CPM_UART2},
-	{IIC, IIC0_BASE, IIC0_IRQ, IBM_CPM_IIC0},
-	{IIC, IIC1_BASE, IIC1_IRQ, IBM_CPM_IIC1},
-	{GPIO, GPIO0_BASE, OCP_IRQ_NA, IBM_CPM_GPIO0},
-	{IDE, IDE0_BASE, IDE0_IRQ, OCP_CPM_NA},
-	{USB, USB0_BASE, USB0_IRQ, IBM_CPM_USB0},
-	{OCP_NULL_TYPE, 0x0, OCP_IRQ_NA, OCP_CPM_NA},
+static struct ocp_func_iic_data ibmstb4_iic0_def = {
+	.fast_mode	= 0,		/* Use standad mode (100Khz) */
+};
+
+static struct ocp_func_iic_data ibmstb4_iic1_def = {
+	.fast_mode	= 0,		/* Use standad mode (100Khz) */
+};
+OCP_SYSFS_IIC_DATA()
+
+struct ocp_def core_ocp[] __initdata = {
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_16550,
+	  .index	= 0,
+	  .paddr	= UART0_IO_BASE,
+	  .irq		= UART0_INT,
+	  .pm		= IBM_CPM_UART0,
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_16550,
+	  .index	= 1,
+	  .paddr	= UART1_IO_BASE,
+	  .irq		= UART1_INT,
+	  .pm		= IBM_CPM_UART1,
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_16550,
+	  .index	= 2,
+	  .paddr	= UART2_IO_BASE,
+	  .irq		= UART2_INT,
+	  .pm		= IBM_CPM_UART2,
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_IIC,
+	  .paddr	= IIC0_BASE,
+	  .irq		= IIC0_IRQ,
+	  .pm		= IBM_CPM_IIC0,
+	  .additions	= &ibmstb4_iic0_def,
+	  .show		= &ocp_show_iic_data
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_IIC,
+	  .paddr	= IIC1_BASE,
+	  .irq		= IIC1_IRQ,
+	  .pm		= IBM_CPM_IIC1,
+	  .additions	= &ibmstb4_iic1_def,
+	  .show		= &ocp_show_iic_data
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_GPIO,
+	  .paddr	= GPIO0_BASE,
+	  .irq		= OCP_IRQ_NA,
+	  .pm		= IBM_CPM_GPIO0,
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_IDE,
+	  .paddr	= IDE0_BASE,
+	  .irq		= IDE0_IRQ,
+	  .pm		= OCP_CPM_NA,
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_USB,
+	  .paddr	= USB0_BASE,
+	  .irq		= USB0_IRQ,
+	  .pm		= OCP_CPM_NA,
+	},
+	{ .vendor	= OCP_VENDOR_INVALID,
+	}
 };
diff -Nru a/arch/ppc/platforms/4xx/ibmstb4.h b/arch/ppc/platforms/4xx/ibmstb4.h
--- a/arch/ppc/platforms/4xx/ibmstb4.h	Sun May 16 01:18:36 2004
+++ b/arch/ppc/platforms/4xx/ibmstb4.h	Sun May 16 01:18:36 2004
@@ -14,7 +14,6 @@
 #define __ASM_IBMSTB4_H__
 
 #include <linux/config.h>
-#include <platforms/4xx/ibm_ocp.h>
 
 /* serial port defines */
 #define STB04xxx_IO_BASE	((uint)0xe0000000)
diff -Nru a/arch/ppc/platforms/4xx/ibmstbx25.c b/arch/ppc/platforms/4xx/ibmstbx25.c
--- a/arch/ppc/platforms/4xx/ibmstbx25.c	Sun May 16 01:18:33 2004
+++ b/arch/ppc/platforms/4xx/ibmstbx25.c	Sun May 16 01:18:33 2004
@@ -9,22 +9,51 @@
  * or implied.
  */
 
-#include <linux/config.h>
-#include <linux/module.h>
 #include <linux/init.h>
 #include <asm/ocp.h>
-#include "ibmstbx25.h"
+#include <platforms/4xx/ibmstbx25.h>
 
-struct ocp_def core_ocp[]  __initdata = {
-	{OCP_VENDOR_IBM, OCP_FUNC_PLB, 0x0, OCP_IRQ_NA, OCP_CPM_NA},
-	{OCP_VENDOR_IBM, OCP_FUNC_OPB, OPB_BASE_START, OCP_IRQ_NA, OCP_CPM_NA},
-	{OCP_VENDOR_IBM, OCP_FUNC_16550, UART0_IO_BASE, UART0_INT,IBM_CPM_UART0},
-	{OCP_VENDOR_IBM, OCP_FUNC_16550, UART1_IO_BASE, UART1_INT, IBM_CPM_UART1},
-	{OCP_VENDOR_IBM, OCP_FUNC_16550, UART2_IO_BASE,UART2_INT, IBM_CPM_UART2},
-	{OCP_VENDOR_IBM, OCP_FUNC_IIC, IIC0_BASE, IIC0_IRQ, IBM_CPM_IIC0},
-	{OCP_VENDOR_IBM, OCP_FUNC_GPIO, GPIO0_BASE, OCP_IRQ_NA, IBM_CPM_GPIO0},
-	{OCP_VENDOR_IBM, OCP_FUNC_IDE, IDE0_BASE, IDE0_IRQ, OCP_CPM_NA},
-	{OCP_VENDOR_IBM, OCP_FUNC_EXT, EBIU_BASE_START, OCP_IRQ_NA,IBM_CPM_EBIU},
-	{OCP_VENDOR_INVALID, OCP_FUNC_INVALID, 0x0, OCP_IRQ_NA, OCP_CPM_NA},
+static struct ocp_func_iic_data ibmstbx25_iic0_def = {
+	.fast_mode	= 0,		/* Use standad mode (100Khz) */
+};
+OCP_SYSFS_IIC_DATA()
 
+struct ocp_def core_ocp[] __initdata = {
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_16550,
+	  .index        = 0,
+	  .paddr	= UART0_IO_BASE,
+	  .irq		= UART0_INT,
+	  .pm		= IBM_CPM_UART0,
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_16550,
+	  .index	= 1,
+	  .paddr	= UART1_IO_BASE,
+	  .irq		= UART1_INT,
+	  .pm		= IBM_CPM_UART1,
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_16550,
+	  .index	= 2,
+	  .paddr	= UART2_IO_BASE,
+	  .irq		= UART2_INT,
+	  .pm		= IBM_CPM_UART2,
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_IIC,
+	  .paddr	= IIC0_BASE,
+	  .irq		= IIC0_IRQ,
+	  .pm		= IBM_CPM_IIC0,
+	  .additions	= &ibmstbx25_iic0_def,
+	  .show		= &ocp_show_iic_data
+	},
+	{ .vendor	= OCP_VENDOR_IBM,
+	  .function	= OCP_FUNC_GPIO,
+	  .paddr	= GPIO0_BASE,
+	  .irq		= OCP_IRQ_NA,
+	  .pm		= IBM_CPM_GPIO0,
+	},
+	{ .vendor	= OCP_VENDOR_INVALID
+	}
 };
diff -Nru a/arch/ppc/platforms/4xx/ocotea.c b/arch/ppc/platforms/4xx/ocotea.c
--- a/arch/ppc/platforms/4xx/ocotea.c	Sun May 16 01:18:36 2004
+++ b/arch/ppc/platforms/4xx/ocotea.c	Sun May 16 01:18:36 2004
@@ -41,16 +41,23 @@
 #include <asm/dma.h>
 #include <asm/io.h>
 #include <asm/machdep.h>
+#include <asm/ocp.h>
 #include <asm/pci-bridge.h>
 #include <asm/time.h>
 #include <asm/todc.h>
 #include <asm/bootinfo.h>
 #include <asm/ppc4xx_pic.h>
 
-extern void abort(void);
+#include <syslib/ibm440gx_common.h>
 
-/* Global Variables */
-bd_t __res;
+/*
+ * This is a horrible kludge, we eventually need to abstract this
+ * generic PHY stuff, so the  standard phy mode defines can be
+ * easily used from arch code.
+ */
+#include "../../../../drivers/net/ibm_emac/ibm_emac_phy.h"
+
+extern void abort(void);
 
 static void __init
 ocotea_calibrate_decr(void)
@@ -202,15 +209,15 @@
 TODC_ALLOC();
 
 static void __init
-ocotea_early_serial_map(void)
+ocotea_early_serial_map(const struct ibm44x_clocks *clks)
 {
 	struct uart_port port;
 
 	/* Setup ioremapped serial port access */
 	memset(&port, 0, sizeof(port));
 	port.membase = ioremap64(PPC440GX_UART0_ADDR, 8);
-	port.irq = 0;
-	port.uartclk = BASE_BAUD * 16;
+	port.irq = UART0_INT;
+	port.uartclk = clks->uart0;
 	port.regshift = 0;
 	port.iotype = SERIAL_IO_MEM;
 	port.flags = ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST;
@@ -221,7 +228,8 @@
 	}
 
 	port.membase = ioremap64(PPC440GX_UART1_ADDR, 8);
-	port.irq = 1;
+	port.irq = UART1_INT;
+	port.uartclk = clks->uart1;
 	port.line = 1;
 
 	if (early_serial_setup(&port) != 0) {
@@ -234,15 +242,42 @@
 {
 	unsigned char *addr;
 	unsigned long long mac64;
+	struct ocp_def *def;
+	struct ocp_func_emac_data *emacdata;
+	int i;
+	struct ibm44x_clocks clocks;
 
-	/* Retrieve MAC addresses from flash */
+	/*
+	 * Note: Current rev. board only operates in Group 4a
+	 * mode, so we always set EMAC0-1 for SMII and EMAC2-3
+	 * for RGMII (though these could run in RTBI just the same).
+	 *
+	 * The FPGA reg 3 information isn't even suitable for
+	 * determining the phy_mode, so if the board becomes
+	 * usable in !4a, it will be necessary to parse an environment
+	 * variable from the firmware or similar to properly configure
+	 * the phy_map/phy_mode.
+	 */
+	/* Set phy_map, phy_mode, and mac_addr for each EMAC */
 	addr = ioremap64(OCOTEA_MAC_BASE, OCOTEA_MAC_SIZE);
-	mac64 = simple_strtoull(addr, 0, 16);
-	memcpy(__res.bi_enetaddr[0], (char *)&mac64+2, 6);
-	mac64 = simple_strtoull(addr+OCOTEA_MAC1_OFFSET, 0, 16);
-	memcpy(__res.bi_enetaddr[1], (char *)&mac64+2, 6);
+	for (i=0; i<4; i++) {
+		mac64 = simple_strtoull(addr+OCOTEA_MAC_OFFSET*i, 0, 16);
+		def = ocp_get_one_device(OCP_VENDOR_IBM, OCP_FUNC_EMAC, i);
+		emacdata = def->additions;
+		if (i < 2) {
+			emacdata->phy_map = 0x00000001;	/* Skip 0x00 */
+			emacdata->phy_mode = PHY_MODE_SMII;
+		}
+		else {
+			emacdata->phy_map = 0x0000ffff; /* Skip 0x00-0x0f */
+			emacdata->phy_mode = PHY_MODE_RGMII;
+		}
+		memcpy(emacdata->mac_addr, (char *)&mac64+2, 6);
+	}
 	iounmap(addr);
 
+	ibm440gx_tah_enable();
+
 #if !defined(CONFIG_BDI_SWITCH)
 	/*
 	 * The Abatron BDI JTAG debugger does not tolerate others
@@ -251,6 +286,15 @@
         mtspr(SPRN_DBCR0, (DBCR0_TDE | DBCR0_IDM));
 #endif
 
+	/*
+	 * Determine various clocks.
+	 * To be completely correct we should get SysClk
+	 * from FPGA, because it can be changed by on-board switches
+	 * --ebs
+	 */
+	ibm440gx_get_clocks(&clocks, 33333333, 6 * 1843200);
+	ocp_sys_info.opb_bus_freq = clocks.opb;
+
 	/* Setup TODC access */
 	TODC_INIT(TODC_TYPE_DS1743,
 			0,
@@ -279,7 +323,7 @@
 	conswitchp = &dummy_con;
 #endif
 
-	ocotea_early_serial_map();
+	ocotea_early_serial_map(&clocks);
 
 	/* Identify the system */
 	printk("IBM Ocotea port (MontaVista Software, Inc. <source@mvista.com>)\n");
@@ -370,9 +414,6 @@
 {
 	int i;
 
-	/* Enable PPC440GP interrupt compatibility mode */
-	SDR_WRITE(DCRN_SDR_MFR,SDR_READ(DCRN_SDR_MFR) | DCRN_SDR_MFR_PCM);
-
 	ppc4xx_pic_init();
 
 	for (i = 0; i < NR_IRQS; i++)
@@ -430,6 +471,9 @@
 		unsigned long r5, unsigned long r6, unsigned long r7)
 {
 	parse_bootinfo((struct bi_record *) (r3 + KERNELBASE));
+
+	/* Disable L2-Cache due to hardware issues */
+	ibm440gx_l2c_disable();
 
 	ppc_md.setup_arch = ocotea_setup_arch;
 	ppc_md.show_cpuinfo = ocotea_show_cpuinfo;
diff -Nru a/arch/ppc/platforms/4xx/ocotea.h b/arch/ppc/platforms/4xx/ocotea.h
--- a/arch/ppc/platforms/4xx/ocotea.h	Sun May 16 01:18:35 2004
+++ b/arch/ppc/platforms/4xx/ocotea.h	Sun May 16 01:18:35 2004
@@ -25,9 +25,9 @@
 #define PPC44x_EMAC0_MR0	0xE0000800
 
 /* Location of MAC addresses in firmware */
-#define OCOTEA_MAC_BASE		(OCOTEA_SMALL_FLASH_HIGH+0xc0500)
+#define OCOTEA_MAC_BASE		(OCOTEA_SMALL_FLASH_HIGH+0xb0500)
 #define OCOTEA_MAC_SIZE		0x200
-#define OCOTEA_MAC1_OFFSET	0x100
+#define OCOTEA_MAC_OFFSET	0x100
 
 /* Default clock rate */
 #define OCOTEA_SYSCLK		25000000
@@ -37,7 +37,7 @@
 #define OCOTEA_RTC_SIZE		0x2000
 
 /* Flash */
-#define OCOTEA_FPGA_ADDR		0x0000000148300000ULL
+#define OCOTEA_FPGA_REG_0		0x0000000148300000ULL
 #define OCOTEA_BOOT_LARGE_FLASH(x)	(x & 0x40)
 #define OCOTEA_SMALL_FLASH_LOW		0x00000001ff900000ULL
 #define OCOTEA_SMALL_FLASH_HIGH		0x00000001fff00000ULL
@@ -46,6 +46,9 @@
 #define OCOTEA_LARGE_FLASH_HIGH		0x00000001ffc00000ULL
 #define OCOTEA_LARGE_FLASH_SIZE		0x400000
 
+/* FPGA_REG_3 (Ethernet Groups) */
+#define OCOTEA_FPGA_REG_3		0x0000000148300003ULL
+
 /*
  * Serial port defines
  */
@@ -57,7 +60,7 @@
 
 #define BASE_BAUD	11059200/16
 #define STD_UART_OP(num)					\
-	{ 0, BASE_BAUD, 0, UART##num##_IRQ,			\
+	{ 0, BASE_BAUD, 0, UART##num##_INT,			\
 		(ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST),	\
 		iomem_base: UART##num##_IO_BASE,		\
 		io_type: SERIAL_IO_MEM},
diff -Nru a/arch/ppc/platforms/4xx/redwood5.c b/arch/ppc/platforms/4xx/redwood5.c
--- a/arch/ppc/platforms/4xx/redwood5.c	Sun May 16 01:18:34 2004
+++ b/arch/ppc/platforms/4xx/redwood5.c	Sun May 16 01:18:34 2004
@@ -20,8 +20,6 @@
 void __init
 redwood5_setup_arch(void)
 {
-	bd_t *bip = &__res;
-
 	ppc4xx_setup_arch();
 
 #ifdef CONFIG_DEBUG_BRINGUP
diff -Nru a/arch/ppc/platforms/4xx/sycamore.c b/arch/ppc/platforms/4xx/sycamore.c
--- a/arch/ppc/platforms/4xx/sycamore.c	Sun May 16 01:18:35 2004
+++ b/arch/ppc/platforms/4xx/sycamore.c	Sun May 16 01:18:35 2004
@@ -28,6 +28,7 @@
 #include <asm/page.h>
 #include <asm/time.h>
 #include <asm/io.h>
+#include <asm/ibm_ocp_pci.h>
 #include <asm/todc.h>
 
 #undef DEBUG
@@ -119,6 +120,8 @@
 
 	ppc4xx_setup_arch();
 
+	ibm_ocp_set_emac(0, 1);
+
 	kb_data = ioremap(SYCAMORE_PS2_BASE, 8);
 	if (!kb_data) {
 		printk(KERN_CRIT
@@ -218,21 +221,25 @@
 						(PPC405_PCI_UPPER_MEM -
 						 PPC405_PCI_MEM_BASE)) | 0x01));
 
-	/* Disable region one */
+	/* Enable inbound region one - 1GB size */
+	out_le32((void *) &(pcip->ptm1ms), 0xc0000001);
+
+	/* Disable outbound region one */
 	out_le32((void *) &(pcip->pmm[1].ma), 0x00000000);
 	out_le32((void *) &(pcip->pmm[1].la), 0x00000000);
 	out_le32((void *) &(pcip->pmm[1].pcila), 0x00000000);
 	out_le32((void *) &(pcip->pmm[1].pciha), 0x00000000);
 	out_le32((void *) &(pcip->pmm[1].ma), 0x00000000);
-	out_le32((void *) &(pcip->ptm1ms), 0x00000000);
 
-	/* Disable region two */
+	/* Disable inbound region two */
+	out_le32((void *) &(pcip->ptm2ms), 0x00000000);
+
+	/* Disable outbound region two */
 	out_le32((void *) &(pcip->pmm[2].ma), 0x00000000);
 	out_le32((void *) &(pcip->pmm[2].la), 0x00000000);
 	out_le32((void *) &(pcip->pmm[2].pcila), 0x00000000);
 	out_le32((void *) &(pcip->pmm[2].pciha), 0x00000000);
 	out_le32((void *) &(pcip->pmm[2].ma), 0x00000000);
-	out_le32((void *) &(pcip->ptm2ms), 0x00000000);
 
 	/* Zero config bars */
 	for (bar = PCI_BASE_ADDRESS_1; bar <= PCI_BASE_ADDRESS_2; bar += 4) {
@@ -283,9 +290,11 @@
 	ppc_md.setup_arch = sycamore_setup_arch;
 	ppc_md.setup_io_mappings = sycamore_map_io;
 
+#ifdef CONFIG_GEN_RTC
 	ppc_md.time_init = todc_time_init;
 	ppc_md.set_rtc_time = todc_set_rtc_time;
 	ppc_md.get_rtc_time = todc_get_rtc_time;
 	ppc_md.nvram_read_val = todc_direct_read_val;
 	ppc_md.nvram_write_val = todc_direct_write_val;
+#endif
 }
diff -Nru a/arch/ppc/platforms/4xx/walnut.c b/arch/ppc/platforms/4xx/walnut.c
--- a/arch/ppc/platforms/4xx/walnut.c	Sun May 16 01:18:35 2004
+++ b/arch/ppc/platforms/4xx/walnut.c	Sun May 16 01:18:35 2004
@@ -28,6 +28,7 @@
 #include <asm/page.h>
 #include <asm/time.h>
 #include <asm/io.h>
+#include <asm/ocp.h>
 #include <asm/ibm_ocp_pci.h>
 #include <asm/todc.h>
 
@@ -77,6 +78,8 @@
 	void *fpga_trigger;
 
 	ppc4xx_setup_arch();
+
+	ibm_ocp_set_emac(0, 0);
 
 	kb_data = ioremap(WALNUT_PS2_BASE, 8);
 	if (!kb_data) {
diff -Nru a/arch/ppc/syslib/Makefile b/arch/ppc/syslib/Makefile
--- a/arch/ppc/syslib/Makefile	Sun May 16 01:18:33 2004
+++ b/arch/ppc/syslib/Makefile	Sun May 16 01:18:33 2004
@@ -13,8 +13,11 @@
 CFLAGS_btext.o          += -mrelocatable-lib
 
 obj-$(CONFIG_PPCBUG_NVRAM)	+= prep_nvram.o
+obj-$(CONFIG_PPC_OCP)		+= ocp.o
+obj-$(CONFIG_IBM_OCP)		+= ibm_ocp.o
 obj-$(CONFIG_44x)		+= ibm44x_common.o
 obj-$(CONFIG_440GP)		+= ibm440gp_common.o
+obj-$(CONFIG_440GX)		+= ibm440gx_common.o
 ifeq ($(CONFIG_4xx),y)
 obj-$(CONFIG_4xx)		+= ppc4xx_pic.o
 obj-$(CONFIG_40x)		+= ppc4xx_setup.o
diff -Nru a/arch/ppc/syslib/ibm440gp_common.c b/arch/ppc/syslib/ibm440gp_common.c
--- a/arch/ppc/syslib/ibm440gp_common.c	Sun May 16 01:18:34 2004
+++ b/arch/ppc/syslib/ibm440gp_common.c	Sun May 16 01:18:34 2004
@@ -24,7 +24,7 @@
 /*
  * Calculate 440GP clocks
  */
-void __init ibm440gp_get_clocks(struct ibm440gp_clocks* p,
+void __init ibm440gp_get_clocks(struct ibm44x_clocks* p,
 				unsigned int sys_clk,
 				unsigned int ser_clk)
 {
@@ -68,11 +68,11 @@
 
 	if (cpc0_cr0 & 0x00400000){
 		/* External UART clock */
-		p->uart = ser_clk;
+		p->uart0 = p->uart1 = ser_clk;
 	}
 	else {
 		/* Internal UART clock */
     		u32 uart_div = ((cpc0_cr0 >> 16) & 0x1f) + 1;
-		p->uart = p->plb / uart_div;
+		p->uart0 = p->uart1 = p->plb / uart_div;
 	}
 }
diff -Nru a/arch/ppc/syslib/ibm440gp_common.h b/arch/ppc/syslib/ibm440gp_common.h
--- a/arch/ppc/syslib/ibm440gp_common.h	Sun May 16 01:18:34 2004
+++ b/arch/ppc/syslib/ibm440gp_common.h	Sun May 16 01:18:34 2004
@@ -1,5 +1,5 @@
 /*
- * arch/ppc/syslib/ibm440gp_common.h
+ * arch/ppc/kernel/ibm440gp_common.h
  *
  * PPC440GP system library
  *
@@ -20,24 +20,14 @@
 
 #include <linux/config.h>
 #include <linux/init.h>
-
-/*
- * All clocks are in Hz
- */
-struct ibm440gp_clocks {
-	unsigned int cpu;	/* CPUCoreClk */
-	unsigned int plb;	/* PLBClk */
-	unsigned int opb;	/* OPBClk */
-	unsigned int ebc;	/* PerClk */
-	unsigned int uart;
-};
+#include <syslib/ibm44x_common.h>
 
 /*
  * Please, refer to the Figure 13.1 in 440GP user manual
  *
  * if internal UART clock is used, ser_clk is ignored
  */
-void ibm440gp_get_clocks(struct ibm440gp_clocks*, unsigned int sys_clk,
+void ibm440gp_get_clocks(struct ibm44x_clocks*, unsigned int sys_clk,
 	unsigned int ser_clk) __init;
 
 #endif /* __ASSEMBLY__ */
diff -Nru a/arch/ppc/syslib/ibm440gx_common.c b/arch/ppc/syslib/ibm440gx_common.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/arch/ppc/syslib/ibm440gx_common.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,212 @@
+/*
+ * arch/ppc/kernel/ibm440gx_common.c
+ *
+ * PPC440GX system library
+ *
+ * Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>
+ * Copyright (c) 2003 Zultys Technologies
+ *
+ * This program is free software; you can redistribute  it and/or modify it
+ * under  the terms of  the GNU General  Public License as published by the
+ * Free Software Foundation;  either version 2 of the  License, or (at your
+ * option) any later version.
+ *
+ */
+#include <linux/config.h>
+#include <linux/kernel.h>
+#include <asm/ibm44x.h>
+#include <asm/mmu.h>
+#include <asm/processor.h>
+#include <syslib/ibm440gx_common.h>
+
+/*
+ * Calculate 440GX clocks
+ */
+static inline u32 __fix_zero(u32 v, u32 def){
+	return v ? v : def;
+}
+
+void __init ibm440gx_get_clocks(struct ibm44x_clocks* p, unsigned int sys_clk,
+	unsigned int ser_clk)
+{
+	u32 pllc  = CPR_READ(DCRN_CPR_PLLC);
+	u32 plld  = CPR_READ(DCRN_CPR_PLLD);
+	u32 uart0 = SDR_READ(DCRN_SDR_UART0);
+	u32 uart1 = SDR_READ(DCRN_SDR_UART1);
+
+	/* Dividers */
+	u32 fbdv   = __fix_zero((plld >> 24) & 0x1f, 32);
+	u32 fwdva  = __fix_zero((plld >> 16) & 0xf, 16);
+	u32 fwdvb  = __fix_zero((plld >> 8) & 7, 8);
+	u32 lfbdv  = __fix_zero(plld & 0x3f, 64);
+	u32 pradv0 = __fix_zero((CPR_READ(DCRN_CPR_PRIMAD) >> 24) & 7, 8);
+	u32 prbdv0 = __fix_zero((CPR_READ(DCRN_CPR_PRIMBD) >> 24) & 7, 8);
+	u32 opbdv0 = __fix_zero((CPR_READ(DCRN_CPR_OPBD) >> 24) & 3, 4);
+	u32 perdv0 = __fix_zero((CPR_READ(DCRN_CPR_PERD) >> 24) & 3, 4);
+
+	/* Input clocks for primary dividers */
+	u32 clk_a, clk_b;
+
+	if (pllc & 0x40000000){
+		u32 m;
+
+		/* Feedback path */
+		switch ((pllc >> 24) & 7){
+		case 0:
+			/* PLLOUTx */
+			m = ((pllc & 0x20000000) ? fwdvb : fwdva) * lfbdv;
+			break;
+		case 1:
+			/* CPU */
+			m = fwdva * pradv0;
+			break;
+		case 5:
+			/* PERClk */
+			m = fwdvb * prbdv0 * opbdv0 * perdv0;
+			break;
+		default:
+			printk(KERN_EMERG "invalid PLL feedback source\n");
+			goto bypass;
+		}
+		m *= fbdv;
+		p->vco = sys_clk * m;
+		clk_a = p->vco / fwdva;
+		clk_b = p->vco / fwdvb;
+	}
+	else {
+bypass:
+		/* Bypass system PLL */
+		p->vco = 0;
+		clk_a = clk_b = sys_clk;
+	}
+
+	p->cpu = clk_a / pradv0;
+	p->plb = clk_b / prbdv0;
+	p->opb = p->plb / opbdv0;
+	p->ebc = p->opb / perdv0;
+
+	/* UARTs clock */
+	if (uart0 & 0x00800000)
+		p->uart0 = ser_clk;
+	else
+		p->uart0 = p->plb / __fix_zero(uart0 & 0xff, 256);
+
+	if (uart1 & 0x00800000)
+		p->uart1 = ser_clk;
+	else
+		p->uart1 = p->plb / __fix_zero(uart1 & 0xff, 256);
+}
+
+/* Enable L2 cache (call with IRQs disabled) */
+void __init ibm440gx_l2c_enable(void){
+	u32 r;
+
+	asm volatile ("sync" ::: "memory");
+
+	/* Disable SRAM */
+	mtdcr(DCRN_SRAM0_DPC,   mfdcr(DCRN_SRAM0_DPC)   & ~SRAM_DPC_ENABLE);
+	mtdcr(DCRN_SRAM0_SB0CR, mfdcr(DCRN_SRAM0_SB0CR) & ~SRAM_SBCR_BU_MASK);
+	mtdcr(DCRN_SRAM0_SB1CR, mfdcr(DCRN_SRAM0_SB1CR) & ~SRAM_SBCR_BU_MASK);
+	mtdcr(DCRN_SRAM0_SB2CR, mfdcr(DCRN_SRAM0_SB2CR) & ~SRAM_SBCR_BU_MASK);
+	mtdcr(DCRN_SRAM0_SB3CR, mfdcr(DCRN_SRAM0_SB3CR) & ~SRAM_SBCR_BU_MASK);
+
+	/* Enable L2_MODE without ICU/DCU */
+	r = mfdcr(DCRN_L2C0_CFG) & ~(L2C_CFG_ICU | L2C_CFG_DCU | L2C_CFG_SS_MASK);
+	r |= L2C_CFG_L2M | L2C_CFG_SS_256;
+	mtdcr(DCRN_L2C0_CFG, r);
+
+	mtdcr(DCRN_L2C0_ADDR, 0);
+
+	/* Hardware Clear Command */
+	mtdcr(DCRN_L2C0_CMD, L2C_CMD_HCC);
+	while (!(mfdcr(DCRN_L2C0_SR) & L2C_SR_CC)) ;
+
+	/* Clear Cache Parity and Tag Errors */
+	mtdcr(DCRN_L2C0_CMD, L2C_CMD_CCP | L2C_CMD_CTE);
+
+	/* Enable 64G snoop region starting at 0 */
+	r = mfdcr(DCRN_L2C0_SNP0) & ~(L2C_SNP_BA_MASK | L2C_SNP_SSR_MASK);
+	r |= L2C_SNP_SSR_32G | L2C_SNP_ESR;
+	mtdcr(DCRN_L2C0_SNP0, r);
+
+	r = mfdcr(DCRN_L2C0_SNP1) & ~(L2C_SNP_BA_MASK | L2C_SNP_SSR_MASK);
+	r |= 0x80000000 | L2C_SNP_SSR_32G | L2C_SNP_ESR;
+	mtdcr(DCRN_L2C0_SNP1, r);
+
+	asm volatile ("sync" ::: "memory");
+
+	/* Enable ICU/DCU ports */
+	r = mfdcr(DCRN_L2C0_CFG);
+	r &= ~(L2C_CFG_DCW_MASK | L2C_CFG_CPIM | L2C_CFG_TPIM | L2C_CFG_LIM
+		| L2C_CFG_PMUX_MASK | L2C_CFG_PMIM | L2C_CFG_TPEI | L2C_CFG_CPEI
+		| L2C_CFG_NAM | L2C_CFG_NBRM);
+	r |= L2C_CFG_ICU | L2C_CFG_DCU | L2C_CFG_TPC | L2C_CFG_CPC | L2C_CFG_FRAN
+		| L2C_CFG_SMCM;
+	mtdcr(DCRN_L2C0_CFG, r);
+
+	asm volatile ("sync; isync" ::: "memory");
+}
+
+/* Disable L2 cache (call with IRQs disabled) */
+void __init ibm440gx_l2c_disable(void){
+	u32 r;
+
+	asm volatile ("sync" ::: "memory");
+
+	/* Disable L2C mode */
+	r = mfdcr(DCRN_L2C0_CFG) & ~(L2C_CFG_L2M | L2C_CFG_ICU | L2C_CFG_DCU);
+	mtdcr(DCRN_L2C0_CFG, r);
+
+	/* Enable SRAM */
+	mtdcr(DCRN_SRAM0_DPC, mfdcr(DCRN_SRAM0_DPC) | SRAM_DPC_ENABLE);
+	mtdcr(DCRN_SRAM0_SB0CR,
+	      SRAM_SBCR_BAS0 | SRAM_SBCR_BS_64KB | SRAM_SBCR_BU_RW);
+	mtdcr(DCRN_SRAM0_SB1CR,
+	      SRAM_SBCR_BAS1 | SRAM_SBCR_BS_64KB | SRAM_SBCR_BU_RW);
+	mtdcr(DCRN_SRAM0_SB2CR,
+	      SRAM_SBCR_BAS2 | SRAM_SBCR_BS_64KB | SRAM_SBCR_BU_RW);
+	mtdcr(DCRN_SRAM0_SB3CR,
+	      SRAM_SBCR_BAS3 | SRAM_SBCR_BS_64KB | SRAM_SBCR_BU_RW);
+
+	asm volatile ("sync; isync" ::: "memory");
+}
+
+int __init ibm440gx_get_eth_grp(void)
+{
+	return (SDR_READ(DCRN_SDR_PFC1) & DCRN_SDR_PFC1_EPS) >> DCRN_SDR_PFC1_EPS_SHIFT;
+}
+
+void __init ibm440gx_set_eth_grp(int group)
+{
+	SDR_WRITE(DCRN_SDR_PFC1, (SDR_READ(DCRN_SDR_PFC1) & ~DCRN_SDR_PFC1_EPS) | (group << DCRN_SDR_PFC1_EPS_SHIFT));
+}
+
+void __init ibm440gx_tah_enable(void)
+{
+	/* Enable TAH0 and TAH1 */
+	SDR_WRITE(DCRN_SDR_MFR,SDR_READ(DCRN_SDR_MFR) &
+			~DCRN_SDR_MFR_TAH0);
+	SDR_WRITE(DCRN_SDR_MFR,SDR_READ(DCRN_SDR_MFR) &
+			~DCRN_SDR_MFR_TAH1);
+}
+
+int ibm440gx_show_cpuinfo(struct seq_file *m){
+
+	u32 l2c_cfg = mfdcr(DCRN_L2C0_CFG);
+	const char* s;
+	if (l2c_cfg & L2C_CFG_L2M){
+	    switch (l2c_cfg & (L2C_CFG_ICU | L2C_CFG_DCU)){
+		case L2C_CFG_ICU: s = "I-Cache only";    break;
+		case L2C_CFG_DCU: s = "D-Cache only";    break;
+		default:	  s = "I-Cache/D-Cache"; break;
+	    }
+	}
+	else
+	    s = "disabled";
+
+	seq_printf(m, "L2-Cache\t: %s (0x%08x 0x%08x)\n", s,
+	    l2c_cfg, mfdcr(DCRN_L2C0_SR));
+
+	return 0;
+}
+
diff -Nru a/arch/ppc/syslib/ibm440gx_common.h b/arch/ppc/syslib/ibm440gx_common.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/arch/ppc/syslib/ibm440gx_common.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,54 @@
+/*
+ * arch/ppc/kernel/ibm440gx_common.h
+ *
+ * PPC440GX system library
+ *
+ * Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>
+ * Copyright (c) 2003 Zultys Technologies
+ *
+ * This program is free software; you can redistribute  it and/or modify it
+ * under  the terms of  the GNU General  Public License as published by the
+ * Free Software Foundation;  either version 2 of the  License, or (at your
+ * option) any later version.
+ *
+ */
+#ifdef __KERNEL__
+#ifndef __PPC_SYSLIB_IBM440GX_COMMON_H
+#define __PPC_SYSLIB_IBM440GX_COMMON_H
+
+#ifndef __ASSEMBLY__
+
+#include <linux/config.h>
+#include <linux/init.h>
+#include <linux/seq_file.h>
+#include <syslib/ibm44x_common.h>
+
+/*
+ * Please, refer to the Figure 14.1 in 440GX user manual
+ *
+ * if internal UART clock is used, ser_clk is ignored
+ */
+void ibm440gx_get_clocks(struct ibm44x_clocks*, unsigned int sys_clk,
+	unsigned int ser_clk) __init;
+
+/* Enable L2 cache */
+void ibm440gx_l2c_enable(void) __init;
+
+/* Disable L2 cache */
+void ibm440gx_l2c_disable(void) __init;
+
+/* Get Ethernet Group */
+int ibm440gx_get_eth_grp(void) __init;
+
+/* Set Ethernet Group */
+void ibm440gx_set_eth_grp(int group) __init;
+
+/* Enable TAH devices */
+void ibm440gx_tah_enable(void) __init;
+
+/* Add L2C info to /proc/cpuinfo */
+int ibm440gx_show_cpuinfo(struct seq_file*);
+
+#endif /* __ASSEMBLY__ */
+#endif /* __PPC_SYSLIB_IBM440GX_COMMON_H */
+#endif /* __KERNEL__ */
diff -Nru a/arch/ppc/syslib/ibm44x_common.h b/arch/ppc/syslib/ibm44x_common.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/arch/ppc/syslib/ibm44x_common.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,36 @@
+/*
+ * arch/ppc/kernel/ibm44x_common.h
+ *
+ * PPC44x system library
+ *
+ * Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>
+ * Copyright (c) 2003 Zultys Technologies
+ *
+ * This program is free software; you can redistribute  it and/or modify it
+ * under  the terms of  the GNU General  Public License as published by the
+ * Free Software Foundation;  either version 2 of the  License, or (at your
+ * option) any later version.
+ *
+ */
+#ifdef __KERNEL__
+#ifndef __PPC_SYSLIB_IBM44x_COMMON_H
+#define __PPC_SYSLIB_IBM44x_COMMON_H
+
+#ifndef __ASSEMBLY__
+
+/*
+ * All clocks are in Hz
+ */
+struct ibm44x_clocks {
+	unsigned int vco;	/* VCO, 0 if system PLL is bypassed */
+	unsigned int cpu;	/* CPUCoreClk */
+	unsigned int plb;	/* PLBClk */
+	unsigned int opb;	/* OPBClk */
+	unsigned int ebc;	/* PerClk */
+	unsigned int uart0;
+	unsigned int uart1;
+};
+
+#endif /* __ASSEMBLY__ */
+#endif /* __PPC_SYSLIB_IBM44x_COMMON_H */
+#endif /* __KERNEL__ */
diff -Nru a/arch/ppc/syslib/ibm_ocp.c b/arch/ppc/syslib/ibm_ocp.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/arch/ppc/syslib/ibm_ocp.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,9 @@
+#include <linux/module.h>
+#include <asm/ocp.h>
+
+struct ocp_sys_info_data ocp_sys_info = {
+	.opb_bus_freq	=	50000000,	/* OPB Bus Frequency (Hz) */
+	.ebc_bus_freq	=	33333333,	/* EBC Bus Frequency (Hz) */
+};
+
+EXPORT_SYMBOL(ocp_sys_info);
diff -Nru a/arch/ppc/syslib/m8xx_setup.c b/arch/ppc/syslib/m8xx_setup.c
--- a/arch/ppc/syslib/m8xx_setup.c	Sun May 16 01:18:34 2004
+++ b/arch/ppc/syslib/m8xx_setup.c	Sun May 16 01:18:34 2004
@@ -214,14 +214,13 @@
 m8xx_restart(char *cmd)
 {
 	__volatile__ unsigned char dummy;
-	uint	msr;
 
 	cli();
 	((immap_t *)IMAP_ADDR)->im_clkrst.car_plprcr |= 0x00000080;
 
 	/* Clear the ME bit in MSR to cause checkstop on machine check
 	*/
-	mtmsr(mfmsr(msr) & ~0x1000);
+	mtmsr(mfmsr() & ~0x1000);
 
 	dummy = ((immap_t *)IMAP_ADDR)->im_clkrst.res[0];
 	printk("Restart failed\n");
@@ -248,8 +247,8 @@
 
 	bp = (bd_t *)__res;
 
-	seq_printf(m, "clock\t\t: %dMHz\n"
-		   "bus clock\t: %dMHz\n",
+	seq_printf(m, "clock\t\t: %ldMHz\n"
+		   "bus clock\t: %ldMHz\n",
 		   bp->bi_intfreq / 1000000,
 		   bp->bi_busfreq / 1000000);
 
diff -Nru a/arch/ppc/syslib/ocp.c b/arch/ppc/syslib/ocp.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/arch/ppc/syslib/ocp.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,493 @@
+/*
+ * ocp.c
+ *
+ *      (c) Benjamin Herrenschmidt (benh@kernel.crashing.org)
+ *          Mipsys - France
+ *
+ *          Derived from work (c) Armin Kuster akuster@pacbell.net
+ *
+ *          Additional support and port to 2.6 LDM/sysfs by
+ *          Matt Porter <mporter@kernel.crashing.org>
+ *          Copyright 2004 MontaVista Software, Inc.
+ *
+ *  This program is free software; you can redistribute  it and/or modify it
+ *  under  the terms of  the GNU General Public License as published by the
+ *  Free Software Foundation;  either version 2 of the  License, or (at your
+ *  option) any later version.
+ *
+ *  OCP (On Chip Peripheral) is a software emulated "bus" with a
+ *  pseudo discovery method for dumb peripherals. Usually these type
+ *  of peripherals are found on embedded SoC (System On a Chip)
+ *  processors or highly integrated system controllers that have
+ *  a host bridge and many peripherals.  Common examples where
+ *  this is already used include the PPC4xx, PPC85xx, MPC52xx,
+ *  and MV64xxx parts.
+ *
+ *  This subsystem creates a standard OCP bus type within the
+ *  device model.  The devices on the OCP bus are seeded by an
+ *  an initial OCP device array created by the arch-specific
+ *  Device entries can be added/removed/modified through OCP
+ *  helper functions to accomodate system and  board-specific
+ *  parameters commonly found in embedded systems. OCP also
+ *  provides a standard method for devices to describe extended
+ *  attributes about themselves to the system.  A standard access
+ *  method allows OCP drivers to obtain the information, both
+ *  SoC-specific and system/board-specific, needed for operation.
+ */
+
+#include <linux/module.h>
+#include <linux/config.h>
+#include <linux/list.h>
+#include <linux/miscdevice.h>
+#include <linux/slab.h>
+#include <linux/types.h>
+#include <linux/init.h>
+#include <linux/pm.h>
+#include <linux/bootmem.h>
+#include <linux/device.h>
+
+#include <asm/io.h>
+#include <asm/ocp.h>
+#include <asm/errno.h>
+#include <asm/rwsem.h>
+#include <asm/semaphore.h>
+
+//#define DBG(x)	printk x
+#define DBG(x)
+
+extern int mem_init_done;
+
+extern struct ocp_def core_ocp[];	/* Static list of devices, provided by
+					   CPU core */
+
+LIST_HEAD(ocp_devices);			/* List of all OCP devices */
+DECLARE_RWSEM(ocp_devices_sem);		/* Global semaphores for those lists */
+
+static int ocp_inited;
+
+/* Sysfs support */
+#define OCP_DEF_ATTR(field, format_string)				\
+static ssize_t								\
+show_##field(struct device *dev, char *buf)				\
+{									\
+	struct ocp_device *odev = to_ocp_dev(dev);			\
+									\
+	return sprintf(buf, format_string, odev->def->field);		\
+}									\
+static DEVICE_ATTR(field, S_IRUGO, show_##field, NULL);
+
+OCP_DEF_ATTR(vendor, "0x%04x\n");
+OCP_DEF_ATTR(function, "0x%04x\n");
+OCP_DEF_ATTR(index, "0x%04x\n");
+#ifdef CONFIG_PTE_64BIT
+OCP_DEF_ATTR(paddr, "0x%16Lx\n");
+#else
+OCP_DEF_ATTR(paddr, "0x%08lx\n");
+#endif
+OCP_DEF_ATTR(irq, "%d\n");
+OCP_DEF_ATTR(pm, "%lu\n");
+
+void ocp_create_sysfs_dev_files(struct ocp_device *odev)
+{
+	struct device *dev = &odev->dev;
+
+	/* Current OCP device def attributes */
+	device_create_file(dev, &dev_attr_vendor);
+	device_create_file(dev, &dev_attr_function);
+	device_create_file(dev, &dev_attr_index);
+	device_create_file(dev, &dev_attr_paddr);
+	device_create_file(dev, &dev_attr_irq);
+	device_create_file(dev, &dev_attr_pm);
+	/* Current OCP device additions attributes */
+	if (odev->def->additions && odev->def->show)
+		odev->def->show(dev);
+}
+
+/**
+ *	ocp_device_match	-	Match one driver to one device
+ *	@drv: driver to match
+ *	@dev: device to match
+ *
+ *	This function returns 0 if the driver and device don't match
+ */
+static int
+ocp_device_match(struct device *dev, struct device_driver *drv)
+{
+	struct ocp_device *ocp_dev = to_ocp_dev(dev);
+	struct ocp_driver *ocp_drv = to_ocp_drv(drv);
+	const struct ocp_device_id *ids = ocp_drv->id_table;
+
+	if (!ids)
+		return 0;
+
+	while (ids->vendor || ids->function) {
+		if ((ids->vendor == OCP_ANY_ID
+		     || ids->vendor == ocp_dev->def->vendor)
+		    && (ids->function == OCP_ANY_ID
+			|| ids->function == ocp_dev->def->function))
+		        return 1;
+		ids++;
+	}
+	return 0;
+}
+
+static int
+ocp_device_probe(struct device *dev)
+{
+	int error = 0;
+	struct ocp_driver *drv;
+	struct ocp_device *ocp_dev;
+
+	drv = to_ocp_drv(dev->driver);
+	ocp_dev = to_ocp_dev(dev);
+
+	if (drv->probe) {
+		error = drv->probe(ocp_dev);
+		if (error >= 0) {
+			ocp_dev->driver = drv;
+			error = 0;
+		}
+	}
+	return error;
+}
+
+static int
+ocp_device_remove(struct device *dev)
+{
+	struct ocp_device *ocp_dev = to_ocp_dev(dev);
+
+	if (ocp_dev->driver) {
+		if (ocp_dev->driver->remove)
+			ocp_dev->driver->remove(ocp_dev);
+		ocp_dev->driver = NULL;
+	}
+	return 0;
+}
+
+static int
+ocp_device_suspend(struct device *dev, u32 state)
+{
+	struct ocp_device *ocp_dev = to_ocp_dev(dev);
+	struct ocp_driver *ocp_drv = to_ocp_drv(dev->driver);
+
+	if (dev->driver && ocp_drv->suspend)
+		return ocp_drv->suspend(ocp_dev, state);
+	return 0;
+}
+
+static int
+ocp_device_resume(struct device *dev)
+{
+	struct ocp_device *ocp_dev = to_ocp_dev(dev);
+	struct ocp_driver *ocp_drv = to_ocp_drv(dev->driver);
+
+	if (dev->driver && ocp_drv->resume)
+		return ocp_drv->resume(ocp_dev);
+	return 0;
+}
+
+struct bus_type ocp_bus_type = {
+	.name = "ocp",
+	.match = ocp_device_match,
+	.suspend = ocp_device_suspend,
+	.resume = ocp_device_resume,
+};
+
+/**
+ *	ocp_register_driver	-	Register an OCP driver
+ *	@drv: pointer to statically defined ocp_driver structure
+ *
+ *	The driver's probe() callback is called either recursively
+ *	by this function or upon later call of ocp_driver_init
+ *
+ *	NOTE: Detection of devices is a 2 pass step on this implementation,
+ *	hotswap isn't supported. First, all OCP devices are put in the device
+ *	list, _then_ all drivers are probed on each match.
+ *
+ *	This function returns a count of how many devices actually matched
+ *	(whether the probe routine returned 0 or -ENODEV, a different error
+ *	code isn't considered as a match).
+ */
+int
+ocp_register_driver(struct ocp_driver *drv)
+{
+	int count = 0;
+
+	/* initialize common driver fields */
+	drv->driver.name = drv->name;
+	drv->driver.bus = &ocp_bus_type;
+	drv->driver.probe = ocp_device_probe;
+	drv->driver.remove = ocp_device_remove;
+
+	/* register with core */
+	count = driver_register(&drv->driver);
+
+	return count ? count : 1;
+}
+
+/**
+ *	ocp_unregister_driver	-	Unregister an OCP driver
+ *	@drv: pointer to statically defined ocp_driver structure
+ *
+ *	The driver's remove() callback is called recursively
+ *	by this function for any device already registered
+ */
+void
+ocp_unregister_driver(struct ocp_driver *drv)
+{
+	DBG(("ocp: ocp_unregister_driver(%s)...\n", drv->name));
+
+	driver_unregister(&drv->driver);
+
+	DBG(("ocp: ocp_unregister_driver(%s)... done.\n", drv->name));
+}
+
+/* Core of ocp_find_device(). Caller must hold ocp_devices_sem */
+static struct ocp_device *
+__ocp_find_device(unsigned int vendor, unsigned int function, int index)
+{
+	struct list_head	*entry;
+	struct ocp_device	*dev, *found = NULL;
+
+	DBG(("ocp: __ocp_find_device(vendor: %x, function: %x, index: %d)...\n", vendor, function, index));
+
+	list_for_each(entry, &ocp_devices) {
+		dev = list_entry(entry, struct ocp_device, link);
+		if (vendor != OCP_ANY_ID && vendor != dev->def->vendor)
+			continue;
+		if (function != OCP_ANY_ID && function != dev->def->function)
+			continue;
+		if (index != OCP_ANY_INDEX && index != dev->def->index)
+			continue;
+		found = dev;
+		break;
+	}
+
+	DBG(("ocp: __ocp_find_device(vendor: %x, function: %x, index: %d)... done\n", vendor, function, index));
+
+	return found;
+}
+
+/**
+ *	ocp_find_device	-	Find a device by function & index
+ *      @vendor: vendor ID of the device (or OCP_ANY_ID)
+ *	@function: function code of the device (or OCP_ANY_ID)
+ *	@idx: index of the device (or OCP_ANY_INDEX)
+ *
+ *	This function allows a lookup of a given function by it's
+ *	index, it's typically used to find the MAL or ZMII associated
+ *	with an EMAC or similar horrors.
+ *      You can pass vendor, though you usually want OCP_ANY_ID there...
+ */
+struct ocp_device *
+ocp_find_device(unsigned int vendor, unsigned int function, int index)
+{
+	struct ocp_device	*dev;
+
+	down_read(&ocp_devices_sem);
+	dev = __ocp_find_device(vendor, function, index);
+	up_read(&ocp_devices_sem);
+
+	return dev;
+}
+
+/**
+ *	ocp_get_one_device -	Find a def by function & index
+ *      @vendor: vendor ID of the device (or OCP_ANY_ID)
+ *	@function: function code of the device (or OCP_ANY_ID)
+ *	@idx: index of the device (or OCP_ANY_INDEX)
+ *
+ *	This function allows a lookup of a given ocp_def by it's
+ *	vendor, function, and index.  The main purpose for is to
+ *	allow modification of the def before binding to the driver
+ */
+struct ocp_def *
+ocp_get_one_device(unsigned int vendor, unsigned int function, int index)
+{
+	struct ocp_device	*dev;
+	struct ocp_def		*found = NULL;
+
+	DBG(("ocp: ocp_get_one_device(vendor: %x, function: %x, index: %d)...\n",
+		vendor, function, index));
+
+	dev = ocp_find_device(vendor, function, index);
+
+	if (dev)
+		found = dev->def;
+
+	DBG(("ocp: ocp_get_one_device(vendor: %x, function: %x, index: %d)... done.\n",
+		vendor, function, index));
+
+	return found;
+}
+
+/**
+ *	ocp_add_one_device	-	Add a device
+ *	@def: static device definition structure
+ *
+ *	This function adds a device definition to the
+ *	device list. It may only be called before
+ *	ocp_driver_init() and will return an error
+ *	otherwise.
+ */
+int
+ocp_add_one_device(struct ocp_def *def)
+{
+	struct	ocp_device	*dev;
+
+	DBG(("ocp: ocp_add_one_device()...\n"));
+
+	/* Can't be called after ocp driver init */
+	if (ocp_inited)
+		return 1;
+
+	if (mem_init_done)
+		dev = kmalloc(sizeof(*dev), GFP_KERNEL);
+	else
+		dev = alloc_bootmem(sizeof(*dev));
+
+	if (dev == NULL)
+		return 1;
+	memset(dev, 0, sizeof(*dev));
+	dev->def = def;
+	dev->current_state = 4;
+	sprintf(dev->name, "OCP device %04x:%04x:%04x",
+		dev->def->vendor, dev->def->function, dev->def->index);
+	down_write(&ocp_devices_sem);
+	list_add_tail(&dev->link, &ocp_devices);
+	up_write(&ocp_devices_sem);
+
+	DBG(("ocp: ocp_add_one_device()...done\n"));
+
+	return 0;
+}
+
+/**
+ *	ocp_remove_one_device -	Remove a device by function & index
+ *      @vendor: vendor ID of the device (or OCP_ANY_ID)
+ *	@function: function code of the device (or OCP_ANY_ID)
+ *	@idx: index of the device (or OCP_ANY_INDEX)
+ *
+ *	This function allows removal of a given function by its
+ *	index. It may only be called before ocp_driver_init()
+ *	and will return an error otherwise.
+ */
+int
+ocp_remove_one_device(unsigned int vendor, unsigned int function, int index)
+{
+	struct ocp_device *dev;
+
+	DBG(("ocp: ocp_remove_one_device(vendor: %x, function: %x, index: %d)...\n", vendor, function, index));
+
+	/* Can't be called after ocp driver init */
+	if (ocp_inited)
+		return 1;
+
+	down_write(&ocp_devices_sem);
+	dev = __ocp_find_device(vendor, function, index);
+	list_del((struct list_head *)dev);
+	up_write(&ocp_devices_sem);
+
+	DBG(("ocp: ocp_remove_one_device(vendor: %x, function: %x, index: %d)... done.\n", vendor, function, index));
+
+	return 0;
+}
+
+/**
+ *	ocp_for_each_device	-	Iterate over OCP devices
+ *	@callback: routine to execute for each ocp device.
+ *	@arg: user data to be passed to callback routine.
+ *
+ *	This routine holds the ocp_device semaphore, so the
+ *	callback routine cannot modify the ocp_device list.
+ */
+void
+ocp_for_each_device(void(*callback)(struct ocp_device *, void *arg), void *arg)
+{
+	struct list_head *entry;
+
+	if (callback) {
+		down_read(&ocp_devices_sem);
+		list_for_each(entry, &ocp_devices)
+			callback(list_entry(entry, struct ocp_device, link),
+				arg);
+		up_read(&ocp_devices_sem);
+	}
+}
+
+/**
+ *	ocp_early_init	-	Init OCP device management
+ *
+ *	This function builds the list of devices before setup_arch.
+ *	This allows platform code to modify the device lists before
+ *	they are bound to drivers (changes to paddr, removing devices
+ *	etc)
+ */
+int __init
+ocp_early_init(void)
+{
+	struct ocp_def	*def;
+
+	DBG(("ocp: ocp_early_init()...\n"));
+
+	/* Fill the devices list */
+	for (def = core_ocp; def->vendor != OCP_VENDOR_INVALID; def++)
+		ocp_add_one_device(def);
+
+	DBG(("ocp: ocp_early_init()... done.\n"));
+
+	return 0;
+}
+
+/**
+ *	ocp_driver_init	-	Init OCP device management
+ *
+ *	This function is meant to be called via OCP bus registration.
+ */
+static int __init
+ocp_driver_init(void)
+{
+	int ret = 0, index = 0;
+	struct device *ocp_bus;
+	struct list_head *entry;
+	struct ocp_device *dev;
+
+	if (ocp_inited)
+		return ret;
+	ocp_inited = 1;
+
+	DBG(("ocp: ocp_driver_init()...\n"));
+
+	/* Allocate/register primary OCP bus */
+	ocp_bus = kmalloc(sizeof(struct device), GFP_KERNEL);
+	if (ocp_bus == NULL)
+		return 1;
+	memset(ocp_bus, 0, sizeof(struct device));
+	strcpy(ocp_bus->bus_id, "ocp");
+
+	bus_register(&ocp_bus_type);
+
+	device_register(ocp_bus);
+
+	/* Put each OCP device into global device list */
+	list_for_each(entry, &ocp_devices) {
+		dev = list_entry(entry, struct ocp_device, link);
+		sprintf(dev->dev.bus_id, "%2.2x", index);
+		dev->dev.parent = ocp_bus;
+		dev->dev.bus = &ocp_bus_type;
+		device_register(&dev->dev);
+		ocp_create_sysfs_dev_files(dev);
+		index++;
+	}
+
+	DBG(("ocp: ocp_driver_init()... done.\n"));
+
+	return 0;
+}
+
+postcore_initcall(ocp_driver_init);
+
+EXPORT_SYMBOL(ocp_bus_type);
+EXPORT_SYMBOL(ocp_find_device);
+EXPORT_SYMBOL(ocp_register_driver);
+EXPORT_SYMBOL(ocp_unregister_driver);
diff -Nru a/arch/ppc/syslib/ppc405_pci.c b/arch/ppc/syslib/ppc405_pci.c
--- a/arch/ppc/syslib/ppc405_pci.c	Sun May 16 01:18:35 2004
+++ b/arch/ppc/syslib/ppc405_pci.c	Sun May 16 01:18:35 2004
@@ -57,14 +57,6 @@
 		    )
 		    ) {
 
-			DBG(KERN_ERR "PCI: 0x%lx <= resource[%d] <= 0x%lx"
-			    ", bus 0x%x dev 0x%2.2x.%1.1x,\n"
-			    KERN_ERR "  %s\n"
-			    KERN_ERR "  fixup will be attempted later\n",
-			    min_host_addr, i, max_host_addr,
-			    dev->bus->number, PCI_SLOT(dev->devfn),
-			    PCI_FUNC(dev->devfn), dev->slot.name);
-
 			/* force pcibios_assign_resources() to assign a new address */
 			res->end -= res->start;
 			res->start = 0;
diff -Nru a/arch/ppc/syslib/ppc4xx_pic.c b/arch/ppc/syslib/ppc4xx_pic.c
--- a/arch/ppc/syslib/ppc4xx_pic.c	Sun May 16 01:18:33 2004
+++ b/arch/ppc/syslib/ppc4xx_pic.c	Sun May 16 01:18:33 2004
@@ -142,9 +142,12 @@
 #ifndef UIC1
 #define UIC1 UIC0
 #endif
+#ifndef UIC2
+#define UIC2 UIC1
+#endif
 
 static void
-ppc405_uic_enable(unsigned int irq)
+ppc4xx_uic_enable(unsigned int irq)
 {
 	int bit, word;
 	irq_desc_t *desc = irq_desc + irq;
@@ -153,7 +156,7 @@
 	word = irq >> 5;
 
 #ifdef UIC_DEBUG
-	printk("ppc405_uic_enable - irq %d word %d bit 0x%x\n", irq, word, bit);
+	printk("ppc4xx_uic_enable - irq %d word %d bit 0x%x\n", irq, word, bit);
 #endif
 	ppc_cached_irq_mask[word] |= 1 << (31 - bit);
 	switch (word) {
@@ -162,38 +165,35 @@
 		if ((mfdcr(DCRN_UIC_TR(UIC0)) & (1 << (31 - bit))) == 0)
 			desc->status |= IRQ_LEVEL;
 		else
-		/* lets hope this works since in linux/irq.h
-		 * there is no define for EDGE and it's assumed
-		 * once you set status to LEVEL you would not
-		 * want to change it - Armin
-		 */
-		desc->status = desc->status & ~IRQ_LEVEL;
+			desc->status = desc->status & ~IRQ_LEVEL;
 		break;
 	case 1:
 		mtdcr(DCRN_UIC_ER(UIC1), ppc_cached_irq_mask[word]);
 		if ((mfdcr(DCRN_UIC_TR(UIC1)) & (1 << (31 - bit))) == 0)
 			desc->status |= IRQ_LEVEL;
 		else
-		/* lets hope this works since in linux/irq.h
-		 * there is no define for EDGE and it's assumed
-		 * once you set status to LEVEL you would not
-		 * want to change it - Armin
-		 */
-		desc->status = desc->status & ~IRQ_LEVEL;
+			desc->status = desc->status & ~IRQ_LEVEL;
+	break;
+	case 2:
+		mtdcr(DCRN_UIC_ER(UIC2), ppc_cached_irq_mask[word]);
+		if ((mfdcr(DCRN_UIC_TR(UIC2)) & (1 << (31 - bit))) == 0)
+			desc->status |= IRQ_LEVEL;
+		else
+			desc->status = desc->status & ~IRQ_LEVEL;
 	break;
 	}
 
 }
 
 static void
-ppc405_uic_disable(unsigned int irq)
+ppc4xx_uic_disable(unsigned int irq)
 {
 	int bit, word;
 
 	bit = irq & 0x1f;
 	word = irq >> 5;
 #ifdef UIC_DEBUG
-	printk("ppc405_uic_disable - irq %d word %d bit 0x%x\n", irq, word,
+	printk("ppc4xx_uic_disable - irq %d word %d bit 0x%x\n", irq, word,
 	       bit);
 #endif
 	ppc_cached_irq_mask[word] &= ~(1 << (31 - bit));
@@ -204,11 +204,14 @@
 	case 1:
 		mtdcr(DCRN_UIC_ER(UIC1), ppc_cached_irq_mask[word]);
 		break;
+	case 2:
+		mtdcr(DCRN_UIC_ER(UIC2), ppc_cached_irq_mask[word]);
+		break;
 	}
 }
 
 static void
-ppc405_uic_disable_and_ack(unsigned int irq)
+ppc4xx_uic_disable_and_ack(unsigned int irq)
 {
 	int bit, word;
 
@@ -216,7 +219,7 @@
 	word = irq >> 5;
 
 #ifdef UIC_DEBUG
-	printk("ppc405_uic_disable_and_ack - irq %d word %d bit 0x%x\n", irq,
+	printk("ppc4xx_uic_disable_and_ack - irq %d word %d bit 0x%x\n", irq,
 	       word, bit);
 #endif
 	ppc_cached_irq_mask[word] &= ~(1 << (31 - bit));
@@ -224,16 +227,30 @@
 	case 0:
 		mtdcr(DCRN_UIC_ER(UIC0), ppc_cached_irq_mask[word]);
 		mtdcr(DCRN_UIC_SR(UIC0), (1 << (31 - bit)));
+#if (NR_UICS > 2)
+		mtdcr(DCRN_UIC_SR(UICB), UICB_UIC0NC);
+#endif
 		break;
 	case 1:
 		mtdcr(DCRN_UIC_ER(UIC1), ppc_cached_irq_mask[word]);
 		mtdcr(DCRN_UIC_SR(UIC1), (1 << (31 - bit)));
+#if (NR_UICS > 2)
+		mtdcr(DCRN_UIC_SR(UICB), UICB_UIC1NC);
+#endif
+		break;
+	case 2:
+		mtdcr(DCRN_UIC_ER(UIC2), ppc_cached_irq_mask[word]);
+		mtdcr(DCRN_UIC_SR(UIC2), (1 << (31 - bit)));
+#if (NR_UICS > 2)
+		mtdcr(DCRN_UIC_SR(UICB), UICB_UIC2NC);
+#endif
 		break;
 	}
+
 }
 
 static void
-ppc405_uic_end(unsigned int irq)
+ppc4xx_uic_end(unsigned int irq)
 {
 	int bit, word;
 	unsigned int tr_bits;
@@ -242,7 +259,7 @@
 	word = irq >> 5;
 
 #ifdef UIC_DEBUG
-	printk("ppc405_uic_end - irq %d word %d bit 0x%x\n", irq, word, bit);
+	printk("ppc4xx_uic_end - irq %d word %d bit 0x%x\n", irq, word, bit);
 #endif
 
 	switch (word) {
@@ -259,9 +276,21 @@
 		switch (word) {
 		case 0:
 			mtdcr(DCRN_UIC_SR(UIC0), 1 << (31 - bit));
+#if (NR_UICS > 2)
+			mtdcr(DCRN_UIC_SR(UICB),  UICB_UIC0NC);
+#endif
 			break;
 		case 1:
 			mtdcr(DCRN_UIC_SR(UIC1), 1 << (31 - bit));
+#if (NR_UICS > 2)
+			mtdcr(DCRN_UIC_SR(UICB),  UICB_UIC1NC);
+#endif
+			break;
+		case 2:
+			mtdcr(DCRN_UIC_SR(UIC2), 1 << (31 - bit));
+#if (NR_UICS > 2)
+			mtdcr(DCRN_UIC_SR(UICB),  UICB_UIC2NC);
+#endif
 			break;
 		}
 	}
@@ -275,11 +304,14 @@
 		case 1:
 			mtdcr(DCRN_UIC_ER(UIC1), ppc_cached_irq_mask[word]);
 			break;
+		case 2:
+			mtdcr(DCRN_UIC_ER(UIC2), ppc_cached_irq_mask[word]);
+			break;
 		}
 	}
 }
 
-static struct hw_interrupt_type ppc405_uic = {
+static struct hw_interrupt_type ppc4xx_uic = {
 #if (NR_UICS == 1)
 	"IBM UIC",
 #else
@@ -287,15 +319,15 @@
 #endif
 	NULL,
 	NULL,
-	ppc405_uic_enable,
-	ppc405_uic_disable,
-	ppc405_uic_disable_and_ack,
-	ppc405_uic_end,
+	ppc4xx_uic_enable,
+	ppc4xx_uic_disable,
+	ppc4xx_uic_disable_and_ack,
+	ppc4xx_uic_end,
 	0
 };
 
 int
-ppc405_pic_get_irq(struct pt_regs *regs)
+ppc4xx_pic_get_irq(struct pt_regs *regs)
 {
 	int irq, cas_irq;
 	unsigned long bits;
@@ -305,9 +337,25 @@
 	 * enabled.
 	 */
 
+#if (NR_UICS > 2)
+	bits = mfdcr(DCRN_UIC_MSR(UICB));
+#else
 	bits = mfdcr(DCRN_UIC_MSR(UIC0));
-
-#if (NR_UICS > 1)
+#endif
+#if (NR_UICS > 2)
+	if (bits & UICB_UIC0NC) {
+		bits = mfdcr(DCRN_UIC_MSR(UIC0));
+		irq = 32 - ffs(bits);
+	} else if (bits & UICB_UIC1NC) {
+		bits = mfdcr(DCRN_UIC_MSR(UIC1));
+		irq = 64 - ffs(bits);
+	} else if (bits & UICB_UIC2NC) {
+		bits = mfdcr(DCRN_UIC_MSR(UIC2));
+		irq = 96 - ffs(bits);
+	} else {
+		irq = -1;
+	}
+#elif (NR_UICS > 1)
 	if (bits & UIC_CASCADE_MASK) {
 		bits = mfdcr(DCRN_UIC_MSR(UIC1));
 		cas_irq = 32 - ffs(bits);
@@ -330,7 +378,7 @@
 		irq = -1;
 
 #ifdef UIC_DEBUG
-	printk("ppc405_pic_get_irq - irq %d bit 0x%x\n", irq, bits);
+	printk("ppc4xx_pic_get_irq - irq %d bit 0x%x\n", irq, bits);
 #endif
 
 	return (irq);
@@ -354,8 +402,10 @@
 	unsigned long ppc_cached_pol_mask[NR_MASK_WORDS];
 	ppc_cached_sense_mask[0] = 0;
 	ppc_cached_sense_mask[1] = 0;
+	ppc_cached_sense_mask[2] = 0;
 	ppc_cached_pol_mask[0] = 0;
 	ppc_cached_pol_mask[1] = 0;
+	ppc_cached_pol_mask[2] = 0;
 
 	for (irq = 0; irq < NR_IRQS; irq++) {
 
@@ -398,6 +448,18 @@
 			mtdcr(DCRN_UIC_TR(UIC1), ppc_cached_sense_mask[word]);
 
 			break;
+		case 2:
+#ifdef PPC4xx_PIC_DEBUG
+			printk("Pol %x ", mfdcr(DCRN_UIC_PR(UIC2)));
+			printk("Level %x\n", mfdcr(DCRN_UIC_TR(UIC2)));
+#endif
+			/* polarity  setting */
+			mtdcr(DCRN_UIC_PR(UIC2), ppc_cached_pol_mask[word]);
+
+			/* Level setting */
+			mtdcr(DCRN_UIC_TR(UIC2), ppc_cached_sense_mask[word]);
+
+			break;
 		}
 	}
 
@@ -405,13 +467,13 @@
 void __init
 ppc4xx_pic_init(void)
 {
-
 	/*
 	 * Disable all external interrupts until they are
 	 * explicity requested.
 	 */
 	ppc_cached_irq_mask[0] = 0;
 	ppc_cached_irq_mask[1] = 0;
+	ppc_cached_irq_mask[2] = 0;
 
 #if defined CONFIG_403
 	mtdcr(DCRN_EXIER, ppc_cached_irq_mask[0]);
@@ -419,11 +481,21 @@
 	ppc4xx_pic = &ppc403_aic;
 	ppc_md.get_irq = ppc403_pic_get_irq;
 #else
+#if  (NR_UICS > 2)
+	mtdcr(DCRN_UIC_ER(UICB), UICB_UIC0NC | UICB_UIC1NC | UICB_UIC2NC);
+	mtdcr(DCRN_UIC_CR(UICB), 0);
+
+	mtdcr(DCRN_UIC_ER(UIC2), ppc_cached_irq_mask[2]);
+	mtdcr(DCRN_UIC_CR(UIC2), 0);
+
+#endif
 #if  (NR_UICS > 1)
-	ppc_cached_irq_mask[0] |= 1 << (31 - UIC0_UIC1NC);	/* enable cascading interrupt */
+#if  (NR_UICS == 2)
+	/* enable cascading interrupt */
+	ppc_cached_irq_mask[0] |= 1 << (31 - UIC0_UIC1NC);
+#endif
 	mtdcr(DCRN_UIC_ER(UIC1), ppc_cached_irq_mask[1]);
 	mtdcr(DCRN_UIC_CR(UIC1), 0);
-
 #endif
 	mtdcr(DCRN_UIC_ER(UIC0), ppc_cached_irq_mask[0]);
 	mtdcr(DCRN_UIC_CR(UIC0), 0);
@@ -432,13 +504,16 @@
 		ppc4xx_extpic_init();
 
 	/* Clear any pending interrupts */
+#if (NR_UICS > 2)
+	mtdcr(DCRN_UIC_SR(UICB), 0xffffffff);
+	mtdcr(DCRN_UIC_SR(UIC2), 0xffffffff);
+#endif
 #if (NR_UICS > 1)
 	mtdcr(DCRN_UIC_SR(UIC1), 0xffffffff);
 #endif
 	mtdcr(DCRN_UIC_SR(UIC0), 0xffffffff);
 
-	ppc4xx_pic = &ppc405_uic;
-	ppc_md.get_irq = ppc405_pic_get_irq;
+	ppc4xx_pic = &ppc4xx_uic;
+	ppc_md.get_irq = ppc4xx_pic_get_irq;
 #endif
-
 }
diff -Nru a/arch/ppc/syslib/ppc8xx_pic.h b/arch/ppc/syslib/ppc8xx_pic.h
--- a/arch/ppc/syslib/ppc8xx_pic.h	Sun May 16 01:18:34 2004
+++ b/arch/ppc/syslib/ppc8xx_pic.h	Sun May 16 01:18:34 2004
@@ -3,6 +3,7 @@
 
 #include <linux/config.h>
 #include <linux/irq.h>
+#include <linux/interrupt.h>
 
 extern struct hw_interrupt_type ppc8xx_pic;
 
diff -Nru a/arch/ppc64/Kconfig b/arch/ppc64/Kconfig
--- a/arch/ppc64/Kconfig	Sun May 16 01:18:35 2004
+++ b/arch/ppc64/Kconfig	Sun May 16 01:18:35 2004
@@ -49,6 +49,10 @@
 
 source "init/Kconfig"
 
+config SYSVIPC_COMPAT
+	bool
+	depends on COMPAT && SYSVIPC
+	default y
 
 menu "Platform support"
 
@@ -89,6 +93,16 @@
 	bool "Apple PowerMac G5 support"
 	select ADB_PMU
 
+config PPC_SPLPAR
+	depends on PPC_PSERIES
+	bool "Support for shared-processor logical partitions"
+	default n
+	help
+	  Enabling this option will make the kernel run more efficiently
+	  on logically-partitioned pSeries systems which use shared
+	  processors, that is, which share physical processors between
+	  two or more partitions.
+
 config PMAC_DART
 	bool "Enable DART/IOMMU on PowerMac (allow >2G of RAM)"
 	depends on PPC_PMAC
@@ -173,6 +187,15 @@
 	bool "NUMA support"
 	depends on DISCONTIGMEM
 
+config SCHED_SMT
+	bool "SMT (Hyperthreading) scheduler support"
+	depends on SMP
+	default off
+	help
+	  SMT scheduler support improves the CPU scheduler's decision making
+	  when dealing with POWER5 cpus at a cost of slightly increased
+	  overhead in some places. If unsure say N here.
+
 config PREEMPT
 	bool "Preemptible Kernel"
 	depends on BROKEN
@@ -396,6 +419,16 @@
 	  If you don't debug the kernel, you can say N.
 	  
 endmenu
+
+config SPINLINE
+	bool "Inline spinlock code at each call site"
+	depends on SMP && !PPC_SPLPAR && !PPC_ISERIES
+	help
+	  Say Y if you want to have the code for acquiring spinlocks
+	  and rwlocks inlined at each call site.  This makes the kernel
+	  somewhat bigger, but can be useful when profiling the kernel.
+
+	  If in doubt, say N.
 
 source "security/Kconfig"
 
diff -Nru a/arch/ppc64/kernel/cpu_setup_power4.S b/arch/ppc64/kernel/cpu_setup_power4.S
--- a/arch/ppc64/kernel/cpu_setup_power4.S	Sun May 16 01:18:33 2004
+++ b/arch/ppc64/kernel/cpu_setup_power4.S	Sun May 16 01:18:33 2004
@@ -119,7 +119,9 @@
 	/* We only deal with 970 for now */
 	mfspr	r0,SPRN_PVR
 	srwi	r0,r0,16
-	cmpwi	r0,0x39
+	cmpwi	cr0,r0,0x39
+	cmpwi	cr1,r0,0x3c
+	cror	4*cr0+eq,4*cr0+eq,4*cr1+eq
 	bne	1f
 
 	/* Save HID0,1,4 and 5 */
@@ -149,7 +151,9 @@
 	/* We only deal with 970 for now */
 	mfspr	r0,SPRN_PVR
 	srwi	r0,r0,16
-	cmpwi	r0,0x39
+	cmpwi	cr0,r0,0x39
+	cmpwi	cr1,r0,0x3c
+	cror	4*cr0+eq,4*cr0+eq,4*cr1+eq
 	bne	1f
 
 	/* Clear interrupt prefix */
diff -Nru a/arch/ppc64/kernel/head.S b/arch/ppc64/kernel/head.S
--- a/arch/ppc64/kernel/head.S	Sun May 16 01:18:35 2004
+++ b/arch/ppc64/kernel/head.S	Sun May 16 01:18:35 2004
@@ -265,6 +265,9 @@
 	mfspr	r23,SPRG2;		/* Save r20 in exc. frame      */ \
 	std	r23,EX_R20(r21);	                                  \
                                                                          \
+	mfmsr	r22;			    /* set MSR.RI		   */ \
+	ori	r22,r22,MSR_RI;						      \
+	mtmsrd	r22,1;							      \
 	mfcr    r23;                        /* save CR in r23              */
 
 /*
diff -Nru a/arch/ppc64/kernel/irq.c b/arch/ppc64/kernel/irq.c
--- a/arch/ppc64/kernel/irq.c	Sun May 16 01:18:34 2004
+++ b/arch/ppc64/kernel/irq.c	Sun May 16 01:18:34 2004
@@ -376,10 +376,8 @@
 	int status = 0;
 	int retval = 0;
 
-#ifndef CONFIG_PPC_ISERIES
 	if (!(action->flags & SA_INTERRUPT))
 		local_irq_enable();
-#endif
 
 	do {
 		status |= action->flags;
@@ -388,9 +386,7 @@
 	} while (action);
 	if (status & SA_SAMPLE_RANDOM)
 		add_interrupt_randomness(irq);
-#ifndef CONFIG_PPC_ISERIES
 	local_irq_disable();
-#endif
 	return retval;
 }
 
diff -Nru a/arch/ppc64/kernel/misc.S b/arch/ppc64/kernel/misc.S
--- a/arch/ppc64/kernel/misc.S	Sun May 16 01:18:36 2004
+++ b/arch/ppc64/kernel/misc.S	Sun May 16 01:18:36 2004
@@ -316,6 +316,8 @@
 	eieio
 	stbu	r5,1(r4)
 	bdnz	00b
+	twi	0,r5,0
+	isync
 	blr
 
 _GLOBAL(_outsb)
@@ -325,8 +327,8 @@
 	blelr-
 00:	lbzu	r5,1(r4)
 	stb	r5,0(r3)
-	eieio
 	bdnz	00b
+	sync
 	blr	
 
 _GLOBAL(_insw)
@@ -338,6 +340,8 @@
 	eieio
 	sthu	r5,2(r4)
 	bdnz	00b
+	twi	0,r5,0
+	isync
 	blr
 
 _GLOBAL(_outsw)
@@ -346,9 +350,9 @@
 	subi	r4,r4,2
 	blelr-
 00:	lhzu	r5,2(r4)
-	eieio
 	sthbrx	r5,0,r3	
 	bdnz	00b
+	sync
 	blr	
 
 _GLOBAL(_insl)
@@ -360,6 +364,8 @@
 	eieio
 	stwu	r5,4(r4)
 	bdnz	00b
+	twi	0,r5,0
+	isync
 	blr
 
 _GLOBAL(_outsl)
@@ -369,8 +375,8 @@
 	blelr-
 00:	lwzu	r5,4(r4)
 	stwbrx	r5,0,r3
-	eieio
 	bdnz	00b
+	sync
 	blr	
 
 /* _GLOBAL(ide_insw) now in drivers/ide/ide-iops.c */
@@ -383,6 +389,8 @@
 	eieio
 	sthu	r5,2(r4)
 	bdnz	00b
+	twi	0,r5,0
+	isync
 	blr
 
 /* _GLOBAL(ide_outsw) now in drivers/ide/ide-iops.c */
@@ -393,8 +401,8 @@
 	blelr-
 00:	lhzu	r5,2(r4)
 	sth	r5,0(r3)
-	eieio
 	bdnz	00b
+	sync
 	blr	
 
 _GLOBAL(_insl_ns)
@@ -406,6 +414,8 @@
 	eieio
 	stwu	r5,4(r4)
 	bdnz	00b
+	twi	0,r5,0
+	isync
 	blr
 
 _GLOBAL(_outsl_ns)
@@ -415,8 +425,8 @@
 	blelr-
 00:	lwzu	r5,4(r4)
 	stw	r5,0(r3)
-	eieio
 	bdnz	00b
+	sync
 	blr	
 
 _GLOBAL(abs)
@@ -717,8 +727,8 @@
 	.llong .ppc32_select
 	.llong .sys_flock
 	.llong .sys_msync
-	.llong .sys32_readv		/* 145 */
-	.llong .sys32_writev
+	.llong .compat_sys_readv	/* 145 */
+	.llong .compat_sys_writev
 	.llong .sys32_getsid
 	.llong .sys_fdatasync
 	.llong .sys32_sysctl
@@ -740,7 +750,7 @@
 	.llong .sys_getresuid	        /* 165 */
 	.llong .sys_ni_syscall		/* old query_module syscall */
 	.llong .sys_poll
-	.llong .sys32_nfsservctl
+	.llong .compat_sys_nfsservctl
 	.llong .sys_setresgid
 	.llong .sys_getresgid	        /* 170 */
 	.llong .sys32_prctl
diff -Nru a/arch/ppc64/kernel/module.c b/arch/ppc64/kernel/module.c
--- a/arch/ppc64/kernel/module.c	Sun May 16 01:18:36 2004
+++ b/arch/ppc64/kernel/module.c	Sun May 16 01:18:36 2004
@@ -138,6 +138,16 @@
 	return relocs * sizeof(struct ppc64_stub_entry);
 }
 
+static void dedotify_versions(struct modversion_info *vers,
+			      unsigned long size)
+{
+	struct modversion_info *end;
+
+	for (end = (void *)vers + size; vers < end; vers++)
+		if (vers->name[0] == '.')
+			memmove(vers->name, vers->name+1, strlen(vers->name));
+}
+
 /* Undefined symbols which refer to .funcname, hack to funcname */
 static void dedotify(Elf64_Sym *syms, unsigned int numsyms, char *strtab)
 {
@@ -166,6 +176,9 @@
 			me->arch.stubs_section = i;
 		else if (strcmp(secstrings + sechdrs[i].sh_name, ".toc") == 0)
 			me->arch.toc_section = i;
+		else if (strcmp(secstrings+sechdrs[i].sh_name,"__versions")==0)
+			dedotify_versions((void *)hdr + sechdrs[i].sh_offset,
+					  sechdrs[i].sh_size);
 
 		/* We don't handle .init for the moment: rename to _init */
 		while ((p = strstr(secstrings + sechdrs[i].sh_name, ".init")))
diff -Nru a/arch/ppc64/kernel/pSeries_nvram.c b/arch/ppc64/kernel/pSeries_nvram.c
--- a/arch/ppc64/kernel/pSeries_nvram.c	Sun May 16 01:18:36 2004
+++ b/arch/ppc64/kernel/pSeries_nvram.c	Sun May 16 01:18:36 2004
@@ -29,7 +29,7 @@
 #include <asm/machdep.h>
 
 static unsigned int nvram_size;
-static unsigned int nvram_fetch, nvram_store;
+static int nvram_fetch, nvram_store;
 static char nvram_buf[NVRW_CNT];	/* assume this is in the first 4GB */
 static spinlock_t nvram_lock = SPIN_LOCK_UNLOCKED;
 
diff -Nru a/arch/ppc64/kernel/pacaData.c b/arch/ppc64/kernel/pacaData.c
--- a/arch/ppc64/kernel/pacaData.c	Sun May 16 01:18:36 2004
+++ b/arch/ppc64/kernel/pacaData.c	Sun May 16 01:18:36 2004
@@ -36,6 +36,7 @@
 {									    \
 	.xLpPacaPtr = &paca[number].xLpPaca,				    \
 	.xLpRegSavePtr = &paca[number].xRegSav,				    \
+	.lock_token = 0x8000,						    \
 	.xPacaIndex = (number),		/* Paca Index */		    \
 	.default_decr = 0x00ff0000,	/* Initial Decr */		    \
 	.xStab_data = {							    \
diff -Nru a/arch/ppc64/kernel/process.c b/arch/ppc64/kernel/process.c
--- a/arch/ppc64/kernel/process.c	Sun May 16 01:18:35 2004
+++ b/arch/ppc64/kernel/process.c	Sun May 16 01:18:35 2004
@@ -469,12 +469,6 @@
 	return 1;
 }
 
-/*
- * These bracket the sleeping functions..
- */
-#define first_sched    (*(unsigned long *)scheduling_functions_start_here)
-#define last_sched     (*(unsigned long *)scheduling_functions_end_here)
-
 unsigned long get_wchan(struct task_struct *p)
 {
 	unsigned long ip, sp;
@@ -493,7 +487,7 @@
 			return 0;
 		if (count > 0) {
 			ip = *(unsigned long *)(sp + 16);
-			if (ip < first_sched || ip >= last_sched)
+			if (!in_sched_functions(ip))
 				return ip;
 		}
 	} while (count++ < 16);
diff -Nru a/arch/ppc64/kernel/smp.c b/arch/ppc64/kernel/smp.c
--- a/arch/ppc64/kernel/smp.c	Sun May 16 01:18:36 2004
+++ b/arch/ppc64/kernel/smp.c	Sun May 16 01:18:36 2004
@@ -692,6 +692,9 @@
 	int ret = -1, cpus;
 	unsigned long timeout;
 
+	/* Can deadlock when called with interrupts disabled */
+	WARN_ON(irqs_disabled());
+
 	data.func = func;
 	data.info = info;
 	atomic_set(&data.started, 0);
@@ -834,11 +837,6 @@
 	paca[boot_cpuid].prof_counter = 1;
 	paca[boot_cpuid].prof_multiplier = 1;
 
-	/*
-	 * XXX very rough. 
-	 */
-	cache_decay_ticks = HZ/100;
-
 #ifndef CONFIG_PPC_ISERIES
 	paca[boot_cpuid].next_jiffy_update_tb = tb_last_stamp = get_tb();
 
@@ -992,3 +990,218 @@
 
 	set_cpus_allowed(current, old_mask);
 }
+
+#ifdef CONFIG_SCHED_SMT
+#ifdef CONFIG_NUMA
+static struct sched_group sched_group_cpus[NR_CPUS];
+static struct sched_group sched_group_phys[NR_CPUS];
+static struct sched_group sched_group_nodes[MAX_NUMNODES];
+static DEFINE_PER_CPU(struct sched_domain, cpu_domains);
+static DEFINE_PER_CPU(struct sched_domain, phys_domains);
+static DEFINE_PER_CPU(struct sched_domain, node_domains);
+__init void arch_init_sched_domains(void)
+{
+	int i;
+	struct sched_group *first = NULL, *last = NULL;
+
+	/* Set up domains */
+	for_each_cpu(i) {
+		struct sched_domain *cpu_domain = &per_cpu(cpu_domains, i);
+		struct sched_domain *phys_domain = &per_cpu(phys_domains, i);
+		struct sched_domain *node_domain = &per_cpu(node_domains, i);
+		int node = cpu_to_node(i);
+		cpumask_t nodemask = node_to_cpumask(node);
+		cpumask_t my_cpumask = cpumask_of_cpu(i);
+		cpumask_t sibling_cpumask = cpumask_of_cpu(i ^ 0x1);
+
+		*cpu_domain = SD_SIBLING_INIT;
+		if (cur_cpu_spec->cpu_features & CPU_FTR_SMT)
+			cpus_or(cpu_domain->span, my_cpumask, sibling_cpumask);
+		else
+			cpu_domain->span = my_cpumask;
+		cpu_domain->parent = phys_domain;
+		cpu_domain->groups = &sched_group_cpus[i];
+
+		*phys_domain = SD_CPU_INIT;
+		phys_domain->span = nodemask;
+		phys_domain->parent = node_domain;
+		phys_domain->groups = &sched_group_phys[first_cpu(cpu_domain->span)];
+
+		*node_domain = SD_NODE_INIT;
+		node_domain->span = cpu_possible_map;
+		node_domain->groups = &sched_group_nodes[node];
+	}
+
+	/* Set up CPU (sibling) groups */
+	for_each_cpu(i) {
+		struct sched_domain *cpu_domain = &per_cpu(cpu_domains, i);
+		int j;
+		first = last = NULL;
+
+		if (i != first_cpu(cpu_domain->span))
+			continue;
+
+		for_each_cpu_mask(j, cpu_domain->span) {
+			struct sched_group *cpu = &sched_group_cpus[j];
+
+			cpus_clear(cpu->cpumask);
+			cpu_set(j, cpu->cpumask);
+			cpu->cpu_power = SCHED_LOAD_SCALE;
+
+			if (!first)
+				first = cpu;
+			if (last)
+				last->next = cpu;
+			last = cpu;
+		}
+		last->next = first;
+	}
+
+	for (i = 0; i < MAX_NUMNODES; i++) {
+		int j;
+		cpumask_t nodemask;
+		struct sched_group *node = &sched_group_nodes[i];
+		cpumask_t node_cpumask = node_to_cpumask(i);
+		cpus_and(nodemask, node_cpumask, cpu_possible_map);
+
+		if (cpus_empty(nodemask))
+			continue;
+
+		first = last = NULL;
+		/* Set up physical groups */
+		for_each_cpu_mask(j, nodemask) {
+			struct sched_domain *cpu_domain = &per_cpu(cpu_domains, j);
+			struct sched_group *cpu = &sched_group_phys[j];
+
+			if (j != first_cpu(cpu_domain->span))
+				continue;
+
+			cpu->cpumask = cpu_domain->span;
+			/*
+			 * Make each extra sibling increase power by 10% of
+			 * the basic CPU. This is very arbitrary.
+			 */
+			cpu->cpu_power = SCHED_LOAD_SCALE + SCHED_LOAD_SCALE*(cpus_weight(cpu->cpumask)-1) / 10;
+			node->cpu_power += cpu->cpu_power;
+
+			if (!first)
+				first = cpu;
+			if (last)
+				last->next = cpu;
+			last = cpu;
+		}
+		last->next = first;
+	}
+
+	/* Set up nodes */
+	first = last = NULL;
+	for (i = 0; i < MAX_NUMNODES; i++) {
+		struct sched_group *cpu = &sched_group_nodes[i];
+		cpumask_t nodemask;
+		cpumask_t node_cpumask = node_to_cpumask(i);
+		cpus_and(nodemask, node_cpumask, cpu_possible_map);
+
+		if (cpus_empty(nodemask))
+			continue;
+
+		cpu->cpumask = nodemask;
+		/* ->cpu_power already setup */
+
+		if (!first)
+			first = cpu;
+		if (last)
+			last->next = cpu;
+		last = cpu;
+	}
+	last->next = first;
+
+	mb();
+	for_each_cpu(i) {
+		struct sched_domain *cpu_domain = &per_cpu(cpu_domains, i);
+		cpu_attach_domain(cpu_domain, i);
+	}
+}
+#else /* !CONFIG_NUMA */
+static struct sched_group sched_group_cpus[NR_CPUS];
+static struct sched_group sched_group_phys[NR_CPUS];
+static DEFINE_PER_CPU(struct sched_domain, cpu_domains);
+static DEFINE_PER_CPU(struct sched_domain, phys_domains);
+__init void arch_init_sched_domains(void)
+{
+	int i;
+	struct sched_group *first = NULL, *last = NULL;
+
+	/* Set up domains */
+	for_each_cpu(i) {
+		struct sched_domain *cpu_domain = &per_cpu(cpu_domains, i);
+		struct sched_domain *phys_domain = &per_cpu(phys_domains, i);
+		cpumask_t my_cpumask = cpumask_of_cpu(i);
+		cpumask_t sibling_cpumask = cpumask_of_cpu(i ^ 0x1);
+
+		*cpu_domain = SD_SIBLING_INIT;
+		if (cur_cpu_spec->cpu_features & CPU_FTR_SMT)
+			cpus_or(cpu_domain->span, my_cpumask, sibling_cpumask);
+		else
+			cpu_domain->span = my_cpumask;
+		cpu_domain->parent = phys_domain;
+		cpu_domain->groups = &sched_group_cpus[i];
+
+		*phys_domain = SD_CPU_INIT;
+		phys_domain->span = cpu_possible_map;
+		phys_domain->groups = &sched_group_phys[first_cpu(cpu_domain->span)];
+	}
+
+	/* Set up CPU (sibling) groups */
+	for_each_cpu(i) {
+		struct sched_domain *cpu_domain = &per_cpu(cpu_domains, i);
+		int j;
+		first = last = NULL;
+
+		if (i != first_cpu(cpu_domain->span))
+			continue;
+
+		for_each_cpu_mask(j, cpu_domain->span) {
+			struct sched_group *cpu = &sched_group_cpus[j];
+
+			cpus_clear(cpu->cpumask);
+			cpu_set(j, cpu->cpumask);
+			cpu->cpu_power = SCHED_LOAD_SCALE;
+
+			if (!first)
+				first = cpu;
+			if (last)
+				last->next = cpu;
+			last = cpu;
+		}
+		last->next = first;
+	}
+
+	first = last = NULL;
+	/* Set up physical groups */
+	for_each_cpu(i) {
+		struct sched_domain *cpu_domain = &per_cpu(cpu_domains, i);
+		struct sched_group *cpu = &sched_group_phys[i];
+
+		if (i != first_cpu(cpu_domain->span))
+			continue;
+
+		cpu->cpumask = cpu_domain->span;
+		/* See SMT+NUMA setup for comment */
+		cpu->cpu_power = SCHED_LOAD_SCALE + SCHED_LOAD_SCALE*(cpus_weight(cpu->cpumask)-1) / 10;
+
+		if (!first)
+			first = cpu;
+		if (last)
+			last->next = cpu;
+		last = cpu;
+	}
+	last->next = first;
+
+	mb();
+	for_each_cpu(i) {
+		struct sched_domain *cpu_domain = &per_cpu(cpu_domains, i);
+		cpu_attach_domain(cpu_domain, i);
+	}
+}
+#endif /* CONFIG_NUMA */
+#endif /* CONFIG_SCHED_SMT */
diff -Nru a/arch/ppc64/kernel/sys_ppc32.c b/arch/ppc64/kernel/sys_ppc32.c
--- a/arch/ppc64/kernel/sys_ppc32.c	Sun May 16 01:18:36 2004
+++ b/arch/ppc64/kernel/sys_ppc32.c	Sun May 16 01:18:36 2004
@@ -15,7 +15,6 @@
  */
 
 #include <linux/config.h>
-#include <asm/ptrace.h>
 #include <linux/kernel.h>
 #include <linux/sched.h>
 #include <linux/fs.h> 
@@ -60,17 +59,17 @@
 #include <linux/compat.h>
 #include <linux/ptrace.h>
 #include <linux/aio_abi.h>
+#include <linux/elf.h>
+
+#include <net/scm.h>
+#include <net/sock.h>
 
+#include <asm/ptrace.h>
 #include <asm/types.h>
 #include <asm/ipc.h>
 #include <asm/uaccess.h>
 #include <asm/unistd.h>
-
 #include <asm/semaphore.h>
-
-#include <net/scm.h>
-#include <net/sock.h>
-#include <linux/elf.h>
 #include <asm/ppcdebug.h>
 #include <asm/time.h>
 #include <asm/ppc32.h>
@@ -78,178 +77,6 @@
 
 #include "pci.h"
 
-typedef ssize_t (*io_fn_t)(struct file *, char *, size_t, loff_t *);
-typedef ssize_t (*iov_fn_t)(struct file *, const struct iovec *, unsigned long, loff_t *);
-
-static long do_readv_writev32(int type, struct file *file,
-			      const struct compat_iovec *vector, u32 count)
-{
-	compat_ssize_t tot_len;
-	struct iovec iovstack[UIO_FASTIOV];
-	struct iovec *iov=iovstack, *ivp;
-	struct inode *inode;
-	long retval, i;
-	io_fn_t fn;
-	iov_fn_t fnv;
-
-	/*
-	 * SuS says "The readv() function *may* fail if the iovcnt argument
-	 * was less than or equal to 0, or greater than {IOV_MAX}.  Linux has
-	 * traditionally returned zero for zero segments, so...
-	 */
-	retval = 0;
-	if (count == 0)
-		goto out;
-
-	/* First get the "struct iovec" from user memory and
-	 * verify all the pointers
-	 */
-	retval = -EINVAL;
-	if (count > UIO_MAXIOV)
-		goto out;
-	if (!file->f_op)
-		goto out;
-	if (count > UIO_FASTIOV) {
-		retval = -ENOMEM;
-		iov = kmalloc(count*sizeof(struct iovec), GFP_KERNEL);
-		if (!iov)
-			goto out;
-	}
-	retval = -EFAULT;
-	if (verify_area(VERIFY_READ, vector, sizeof(struct compat_iovec)*count))
-		goto out;
-
-	/*
-	 * Single unix specification:
-	 * We should -EINVAL if an element length is not >= 0 and fitting an
-	 * ssize_t.  The total length is fitting an ssize_t
-	 *
-	 * Be careful here because iov_len is a size_t not an ssize_t
-	 */
-	tot_len = 0;
-	i = count;
-	ivp = iov;
-	retval = -EINVAL;
-	while(i > 0) {
-		compat_ssize_t tmp = tot_len;
-		compat_ssize_t len;
-		u32 buf;
-
-		if (__get_user(len, &vector->iov_len) ||
-		    __get_user(buf, &vector->iov_base)) {
-			retval = -EFAULT;
-			goto out;
-		}
-		if (len < 0)	/* size_t not fitting an compat_ssize_t .. */
-			goto out;
-		tot_len += len;
-		if (tot_len < tmp) /* maths overflow on the compat_ssize_t */
-			goto out;
-		ivp->iov_base = (void *)A(buf);
-		ivp->iov_len = (__kernel_size_t) len;
-		vector++;
-		ivp++;
-		i--;
-	}
-	if (tot_len == 0) {
-		retval = 0;
-		goto out;
-	}
-
-	inode = file->f_dentry->d_inode;
-	/* VERIFY_WRITE actually means a read, as we write to user space */
-	retval = locks_verify_area((type == READ
-				    ? FLOCK_VERIFY_READ : FLOCK_VERIFY_WRITE),
-				   inode, file, file->f_pos, tot_len);
-	if (retval)
-		goto out;
-
-	if (type == READ) {
-		fn = file->f_op->read;
-		fnv = file->f_op->readv;
-	} else {
-		fn = (io_fn_t)file->f_op->write;
-		fnv = file->f_op->writev;
-	}
-	if (fnv) {
-		retval = fnv(file, iov, count, &file->f_pos);
-		goto out;
-	}
-
-	/* Do it by hand, with file-ops */
-	ivp = iov;
-	while (count > 0) {
-		void * base;
-		int len, nr;
-
-		base = ivp->iov_base;
-		len = ivp->iov_len;
-		ivp++;
-		count--;
-
-		nr = fn(file, base, len, &file->f_pos);
-
-		if (nr < 0) {
-			if (!retval)
-				retval = nr;
-			break;
-		}
-		retval += nr;
-		if (nr != len)
-			break;
-	}
-out:
-	if (iov != iovstack)
-		kfree(iov);
-	if ((retval + (type == READ)) > 0)
-		dnotify_parent(file->f_dentry,
-			       (type == READ) ? DN_ACCESS : DN_MODIFY);
-
-	return retval;
-}
-
-asmlinkage long sys32_readv(int fd, struct compat_iovec *vector, u32 count)
-{
-	struct file *file;
-	int ret = -EBADF;
-
-	file = fget(fd);
-	if (!file || !(file->f_mode & FMODE_READ))
-		goto out; 
-
-	ret = -EINVAL;
-	if (!file->f_op || (!file->f_op->readv && !file->f_op->read))
-		goto out;
-
-	ret = do_readv_writev32(READ, file, vector, count);
-
-out:
-	if (file)
-		fput(file);
-	return ret;
-}
-
-asmlinkage long sys32_writev(int fd, struct compat_iovec *vector, u32 count)
-{
-	struct file *file;
-	int ret = -EBADF;
-
-	file = fget(fd);
-	if (!file || !(file->f_mode & FMODE_WRITE))
-		goto out;
-
-	ret = -EINVAL;
-	if (!file->f_op || (!file->f_op->writev && !file->f_op->write))
-		goto out;
-
-	ret = do_readv_writev32(WRITE, file, vector, count);
-
-out:
-	if (file)
-		fput(file);
-	return ret;
-}
-
 /* readdir & getdents */
 #define NAME_OFFSET(de) ((int) ((de)->d_name - (char *) (de)))
 #define ROUND_UP(x) (((x)+sizeof(u32)-1) & ~(sizeof(u32)-1))
@@ -398,167 +225,12 @@
 	return error;
 }
 
-/*
- * Ooo, nasty.  We need here to frob 32-bit unsigned longs to
- * 64-bit unsigned longs.
- */
-static inline int
-get_fd_set32(unsigned long n, unsigned long *fdset, u32 *ufdset)
-{
-	if (ufdset) {
-		unsigned long odd;
-
-		if (verify_area(VERIFY_WRITE, ufdset, n*sizeof(u32)))
-			return -EFAULT;
-
-		odd = n & 1UL;
-		n &= ~1UL;
-		while (n) {
-			unsigned long h, l;
-			__get_user(l, ufdset);
-			__get_user(h, ufdset+1);
-			ufdset += 2;
-			*fdset++ = h << 32 | l;
-			n -= 2;
-		}
-		if (odd)
-			__get_user(*fdset, ufdset);
-	} else {
-		/* Tricky, must clear full unsigned long in the
-		 * kernel fdset at the end, this makes sure that
-		 * actually happens.
-		 */
-		memset(fdset, 0, ((n + 1) & ~1)*sizeof(u32));
-	}
-	return 0;
-}
-
-static inline void
-set_fd_set32(unsigned long n, u32 *ufdset, unsigned long *fdset)
-{
-	unsigned long odd;
-
-	if (!ufdset)
-		return;
-
-	odd = n & 1UL;
-	n &= ~1UL;
-	while (n) {
-		unsigned long h, l;
-		l = *fdset++;
-		h = l >> 32;
-		__put_user(l, ufdset);
-		__put_user(h, ufdset+1);
-		ufdset += 2;
-		n -= 2;
-	}
-	if (odd)
-		__put_user(*fdset, ufdset);
-}
-
-
-
-#define MAX_SELECT_SECONDS ((unsigned long) (MAX_SCHEDULE_TIMEOUT / HZ)-1)
-
-asmlinkage long sys32_select(int n, u32 *inp, u32 *outp, u32 *exp, u32 tvp_x)
-{
-	fd_set_bits fds;
-	struct compat_timeval *tvp = (struct compat_timeval *)AA(tvp_x);
-	char *bits;
-	unsigned long nn;
-	long timeout;
-	int ret, size, max_fdset;
-
-	timeout = MAX_SCHEDULE_TIMEOUT;
-	if (tvp) {
-		time_t sec, usec;
-		if ((ret = verify_area(VERIFY_READ, tvp, sizeof(*tvp)))
-		    || (ret = __get_user(sec, &tvp->tv_sec))
-		    || (ret = __get_user(usec, &tvp->tv_usec)))
-			goto out_nofds;
-
-		ret = -EINVAL;
-		if(sec < 0 || usec < 0)
-			goto out_nofds;
-
-		if ((unsigned long) sec < MAX_SELECT_SECONDS) {
-			timeout = (usec + 1000000/HZ - 1) / (1000000/HZ);
-			timeout += sec * (unsigned long) HZ;
-		}
-	}
-
-	ret = -EINVAL;
-	if (n < 0)
-		goto out_nofds;
-
-	/* max_fdset can increase, so grab it once to avoid race */
-	max_fdset = current->files->max_fdset;
-	if (n > max_fdset)
-		n = max_fdset;
-
-	/*
-	 * We need 6 bitmaps (in/out/ex for both incoming and outgoing),
-	 * since we used fdset we need to allocate memory in units of
-	 * long-words. 
-	 */
-	ret = -ENOMEM;
-	size = FDS_BYTES(n);
-	bits = kmalloc(6 * size, GFP_KERNEL);
-	if (!bits)
-		goto out_nofds;
-	fds.in      = (unsigned long *)  bits;
-	fds.out     = (unsigned long *) (bits +   size);
-	fds.ex      = (unsigned long *) (bits + 2*size);
-	fds.res_in  = (unsigned long *) (bits + 3*size);
-	fds.res_out = (unsigned long *) (bits + 4*size);
-	fds.res_ex  = (unsigned long *) (bits + 5*size);
-
-	nn = (n + 8*sizeof(u32) - 1) / (8*sizeof(u32));
-	if ((ret = get_fd_set32(nn, fds.in, inp)) ||
-	    (ret = get_fd_set32(nn, fds.out, outp)) ||
-	    (ret = get_fd_set32(nn, fds.ex, exp)))
-		goto out;
-	zero_fd_set(n, fds.res_in);
-	zero_fd_set(n, fds.res_out);
-	zero_fd_set(n, fds.res_ex);
-
-	ret = do_select(n, &fds, &timeout);
-
-	if (tvp && !(current->personality & STICKY_TIMEOUTS)) {
-		time_t sec = 0, usec = 0;
-		if (timeout) {
-			sec = timeout / HZ;
-			usec = timeout % HZ;
-			usec *= (1000000/HZ);
-		}
-		put_user(sec, &tvp->tv_sec);
-		put_user(usec, &tvp->tv_usec);
-	}
-
-	if (ret < 0)
-		goto out;
-	if (!ret) {
-		ret = -ERESTARTNOHAND;
-		if (signal_pending(current))
-			goto out;
-		ret = 0;
-	}
-
-	set_fd_set32(nn, inp, fds.res_in);
-	set_fd_set32(nn, outp, fds.res_out);
-	set_fd_set32(nn, exp, fds.res_ex);
-  
-out:
-	kfree(bits);
-
-out_nofds:
-	return ret;
-}
-
-int ppc32_select(u32 n, u32* inp, u32* outp, u32* exp, u32 tvp_x)
+asmlinkage long ppc32_select(u32 n, compat_ulong_t __user *inp,
+		compat_ulong_t __user *outp, compat_ulong_t __user *exp,
+		compat_uptr_t tvp_x)
 {
 	/* sign extend n */
-	return sys32_select((int)n, inp, outp, exp, tvp_x);
+	return compat_sys_select((int)n, inp, outp, exp, compat_ptr(tvp_x));
 }
 
 int cp_compat_stat(struct kstat *stat, struct compat_stat *statbuf)
@@ -678,245 +350,6 @@
 	return ret;
 }
 
-/* Stuff for NFS server syscalls... */
-struct nfsctl_svc32 {
-	u16			svc32_port;
-	s32			svc32_nthreads;
-};
-
-struct nfsctl_client32 {
-	s8			cl32_ident[NFSCLNT_IDMAX+1];
-	s32			cl32_naddr;
-	struct in_addr		cl32_addrlist[NFSCLNT_ADDRMAX];
-	s32			cl32_fhkeytype;
-	s32			cl32_fhkeylen;
-	u8			cl32_fhkey[NFSCLNT_KEYMAX];
-};
-
-struct nfsctl_export32 {
-	s8			ex32_client[NFSCLNT_IDMAX+1];
-	s8			ex32_path[NFS_MAXPATHLEN+1];
-	compat_dev_t	ex32_dev;
-	compat_ino_t	ex32_ino;
-	s32			ex32_flags;
-	compat_uid_t	ex32_anon_uid;
-	compat_gid_t	ex32_anon_gid;
-};
-
-struct nfsctl_fdparm32 {
-	struct sockaddr		gd32_addr;
-	s8			gd32_path[NFS_MAXPATHLEN+1];
-	s32			gd32_version;
-};
-
-struct nfsctl_fsparm32 {
-	struct sockaddr		gd32_addr;
-	s8			gd32_path[NFS_MAXPATHLEN+1];
-	s32			gd32_maxlen;
-};
-
-struct nfsctl_arg32 {
-	s32			ca32_version;	/* safeguard */
-	union {
-		struct nfsctl_svc32	u32_svc;
-		struct nfsctl_client32	u32_client;
-		struct nfsctl_export32	u32_export;
-		struct nfsctl_fdparm32	u32_getfd;
-		struct nfsctl_fsparm32	u32_getfs;
-	} u;
-#define ca32_svc	u.u32_svc
-#define ca32_client	u.u32_client
-#define ca32_export	u.u32_export
-#define ca32_getfd	u.u32_getfd
-#define ca32_getfs	u.u32_getfs
-};
-
-union nfsctl_res32 {
-	__u8			cr32_getfh[NFS_FHSIZE];
-	struct knfsd_fh		cr32_getfs;
-};
-
-static int nfs_svc32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32)
-{
-	int err;
-	
-	err = __get_user(karg->ca_version, &arg32->ca32_version);
-	err |= __get_user(karg->ca_svc.svc_port, &arg32->ca32_svc.svc32_port);
-	err |= __get_user(karg->ca_svc.svc_nthreads, &arg32->ca32_svc.svc32_nthreads);
-	return err;
-}
-
-static int nfs_clnt32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32)
-{
-	int err;
-	
-	err = __get_user(karg->ca_version, &arg32->ca32_version);
-	err |= copy_from_user(&karg->ca_client.cl_ident[0],
-			  &arg32->ca32_client.cl32_ident[0],
-			  NFSCLNT_IDMAX);
-	err |= __get_user(karg->ca_client.cl_naddr, &arg32->ca32_client.cl32_naddr);
-	err |= copy_from_user(&karg->ca_client.cl_addrlist[0],
-			  &arg32->ca32_client.cl32_addrlist[0],
-			  (sizeof(struct in_addr) * NFSCLNT_ADDRMAX));
-	err |= __get_user(karg->ca_client.cl_fhkeytype,
-		      &arg32->ca32_client.cl32_fhkeytype);
-	err |= __get_user(karg->ca_client.cl_fhkeylen,
-		      &arg32->ca32_client.cl32_fhkeylen);
-	err |= copy_from_user(&karg->ca_client.cl_fhkey[0],
-			  &arg32->ca32_client.cl32_fhkey[0],
-			  NFSCLNT_KEYMAX);
-
-	if(err) return -EFAULT;
-	return 0;
-}
-
-static int nfs_exp32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32)
-{
-	int err;
-	
-	err = __get_user(karg->ca_version, &arg32->ca32_version);
-	err |= copy_from_user(&karg->ca_export.ex_client[0],
-			  &arg32->ca32_export.ex32_client[0],
-			  NFSCLNT_IDMAX);
-	err |= copy_from_user(&karg->ca_export.ex_path[0],
-			  &arg32->ca32_export.ex32_path[0],
-			  NFS_MAXPATHLEN);
-	err |= __get_user(karg->ca_export.ex_dev,
-		      &arg32->ca32_export.ex32_dev);
-	err |= __get_user(karg->ca_export.ex_ino,
-		      &arg32->ca32_export.ex32_ino);
-	err |= __get_user(karg->ca_export.ex_flags,
-		      &arg32->ca32_export.ex32_flags);
-	err |= __get_user(karg->ca_export.ex_anon_uid,
-		      &arg32->ca32_export.ex32_anon_uid);
-	err |= __get_user(karg->ca_export.ex_anon_gid,
-		      &arg32->ca32_export.ex32_anon_gid);
-	karg->ca_export.ex_anon_uid = karg->ca_export.ex_anon_uid;
-	karg->ca_export.ex_anon_gid = karg->ca_export.ex_anon_gid;
-
-	if(err) return -EFAULT;
-	return 0;
-}
-
-static int nfs_getfd32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32)
-{
-	int err;
-	
-	err = __get_user(karg->ca_version, &arg32->ca32_version);
-	err |= copy_from_user(&karg->ca_getfd.gd_addr,
-			  &arg32->ca32_getfd.gd32_addr,
-			  (sizeof(struct sockaddr)));
-	err |= copy_from_user(&karg->ca_getfd.gd_path,
-			  &arg32->ca32_getfd.gd32_path,
-			  (NFS_MAXPATHLEN+1));
-	err |= __get_user(karg->ca_getfd.gd_version,
-		      &arg32->ca32_getfd.gd32_version);
-
-	if(err) return -EFAULT;
-	return 0;
-}
-
-static int nfs_getfs32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32)
-{
-	int err;
-	
-	err = __get_user(karg->ca_version, &arg32->ca32_version);
-	err |= copy_from_user(&karg->ca_getfs.gd_addr,
-			  &arg32->ca32_getfs.gd32_addr,
-			  (sizeof(struct sockaddr)));
-	err |= copy_from_user(&karg->ca_getfs.gd_path,
-			  &arg32->ca32_getfs.gd32_path,
-			  (NFS_MAXPATHLEN+1));
-	err |= __get_user(karg->ca_getfs.gd_maxlen,
-		      &arg32->ca32_getfs.gd32_maxlen);
-
-	if(err) return -EFAULT;
-	return 0;
-}
-
-/* This really doesn't need translations, we are only passing
- * back a union which contains opaque nfs file handle data.
- */
-static int nfs_getfh32_res_trans(union nfsctl_res *kres, union nfsctl_res32 *res32)
-{
-	int err;
-
-	err = copy_to_user(res32, kres, sizeof(*res32));
-
-	if(err) return -EFAULT;
-	return 0;
-}
-
-/* Note: it is necessary to treat cmd_parm as an unsigned int, 
- * with the corresponding cast to a signed int to insure that the 
- * proper conversion (sign extension) between the register representation of a signed int (msr in 32-bit mode)
- * and the register representation of a signed int (msr in 64-bit mode) is performed.
- */
-int asmlinkage sys32_nfsservctl(u32 cmd_parm, struct nfsctl_arg32 *arg32, union nfsctl_res32 *res32)
-{
-  int cmd = (int)cmd_parm;
-	struct nfsctl_arg *karg = NULL;
-	union nfsctl_res *kres = NULL;
-	mm_segment_t oldfs;
-	int err;
-
-	karg = kmalloc(sizeof(*karg), GFP_USER);
-	if(!karg)
-		return -ENOMEM;
-	if(res32) {
-		kres = kmalloc(sizeof(*kres), GFP_USER);
-		if(!kres) {
-			kfree(karg);
-			return -ENOMEM;
-		}
-	}
-	switch(cmd) {
-	case NFSCTL_SVC:
-		err = nfs_svc32_trans(karg, arg32);
-		break;
-	case NFSCTL_ADDCLIENT:
-		err = nfs_clnt32_trans(karg, arg32);
-		break;
-	case NFSCTL_DELCLIENT:
-		err = nfs_clnt32_trans(karg, arg32);
-		break;
-	case NFSCTL_EXPORT:
-	case NFSCTL_UNEXPORT:
-		err = nfs_exp32_trans(karg, arg32);
-		break;
-	case NFSCTL_GETFD:
-		err = nfs_getfd32_trans(karg, arg32);
-		break;
-	case NFSCTL_GETFS:
-		err = nfs_getfs32_trans(karg, arg32);
-		break;
-	default:
-		err = -EINVAL;
-		break;
-	}
-	if(err)
-		goto done;
-	oldfs = get_fs();
-	set_fs(KERNEL_DS);
-	err = sys_nfsservctl(cmd, karg, kres);
-	set_fs(oldfs);
-
-	if (err)
-		goto done;
-
-	if((cmd == NFSCTL_GETFD) ||
-	   (cmd == NFSCTL_GETFS))
-		err = nfs_getfh32_res_trans(kres, res32);
-
-done:
-	if(karg)
-		kfree(karg);
-	if(kres)
-		kfree(kres);
-	return err;
-}
-
-
 
 /* These are here just in case some old sparc32 binary calls it. */
 asmlinkage long sys32_pause(void)
@@ -1057,625 +490,69 @@
 	return do_sys_settimeofday(tv ? &kts : NULL, tz ? &ktz : NULL);
 }
 
-
-struct msgbuf32 {
-	compat_long_t mtype; 
-	char mtext[1];
-};
-
-struct semid_ds32 {
-	struct ipc_perm sem_perm;
-	compat_time_t sem_otime;
-	compat_time_t sem_ctime;
-	compat_uptr_t sem_base;
-	compat_uptr_t sem_pending;
-	compat_uptr_t sem_pending_last;
-	compat_uptr_t undo;
-	unsigned short sem_nsems;
-};
-
-struct semid64_ds32 {
-	struct ipc64_perm sem_perm;
-	unsigned int __unused1;
-	compat_time_t sem_otime;
-	unsigned int __unused2;
-	compat_time_t sem_ctime;
-	compat_ulong_t sem_nsems;
-	compat_ulong_t __unused3;
-	compat_ulong_t __unused4;
-};
-
-struct msqid_ds32 {
-	struct ipc_perm msg_perm;
-	compat_uptr_t msg_first;
-	compat_uptr_t msg_last;
-	compat_time_t msg_stime;
-	compat_time_t msg_rtime;
-	compat_time_t msg_ctime;
-	compat_ulong_t msg_lcbytes;
-	compat_ulong_t msg_lqbytes;
-	unsigned short msg_cbytes;
-	unsigned short msg_qnum;
-	unsigned short msg_qbytes;
-	compat_ipc_pid_t msg_lspid;
-	compat_ipc_pid_t msg_lrpid;
-};
-
-struct msqid64_ds32 {
-	struct ipc64_perm msg_perm;
-	unsigned int __unused1;
-	compat_time_t msg_stime;
-	unsigned int __unused2;
-	compat_time_t msg_rtime;
-	unsigned int __unused3;
-	compat_time_t msg_ctime;
-	compat_ulong_t msg_cbytes;
-	compat_ulong_t msg_qnum;
-	compat_ulong_t msg_qbytes;
-	compat_pid_t msg_lspid;
-	compat_pid_t msg_lrpid;
-	compat_ulong_t __unused4;
-	compat_ulong_t __unused5;
-};
-
-struct shmid_ds32 {
-	struct ipc_perm shm_perm;
-	int shm_segsz;
-	compat_time_t shm_atime;
-	compat_time_t shm_dtime;
-	compat_time_t shm_ctime;
-	compat_ipc_pid_t shm_cpid;
-	compat_ipc_pid_t shm_lpid;
-	unsigned short shm_nattch;
-	unsigned short __unused;
-	compat_uptr_t __unused2;
-	compat_uptr_t __unused3;
-};
-
-struct shmid64_ds32 {
-	struct ipc64_perm shm_perm;
-	unsigned int __unused1;
-	compat_time_t shm_atime;
-	unsigned int __unused2;
-	compat_time_t shm_dtime;
-	unsigned int __unused3;
-	compat_time_t shm_ctime;
-	unsigned int __unused4;
-	compat_size_t shm_segsz;
-	compat_pid_t shm_cpid;
-	compat_pid_t shm_lpid;
-	compat_ulong_t shm_nattch;
-	compat_ulong_t __unused5;
-	compat_ulong_t __unused6;
-};
-
-/*
- * sys32_ipc() is the de-multiplexer for the SysV IPC calls in 32bit
- * emulation..
- *
- * This is really horribly ugly.
- */
-static long do_sys32_semctl(int first, int second, int third, void *uptr)
-{
-	union semun fourth;
-	u32 pad;
-	int err, err2;
-	mm_segment_t old_fs;
-
-	if (!uptr)
-		return -EINVAL;
-	err = -EFAULT;
-	if (get_user(pad, (u32 *)uptr))
-		return err;
-	if ((third & ~IPC_64) == SETVAL)
-		fourth.val = (int)pad;
-	else
-		fourth.__pad = (void *)A(pad);
-	switch (third & (~IPC_64)) {
-
-	case IPC_INFO:
-	case IPC_RMID:
-	case SEM_INFO:
-	case GETVAL:
-	case GETPID:
-	case GETNCNT:
-	case GETZCNT:
-	case GETALL:
-	case SETALL:
-	case SETVAL:
-		err = sys_semctl(first, second, third, fourth);
-		break;
-
-	case IPC_STAT:
-	case SEM_STAT:
-		if (third & IPC_64) {
-			struct semid64_ds s64;
-			struct semid64_ds32 *usp;
-
-			usp = (struct semid64_ds32 *)A(pad);
-			fourth.__pad = &s64;
-			old_fs = get_fs();
-			set_fs(KERNEL_DS);
-			err = sys_semctl(first, second, third, fourth);
-			set_fs(old_fs);
-			err2 = copy_to_user(&usp->sem_perm, &s64.sem_perm,
-					    sizeof(struct ipc64_perm));
-			err2 |= __put_user(s64.sem_otime, &usp->sem_otime);
-			err2 |= __put_user(s64.sem_ctime, &usp->sem_ctime);
-			err2 |= __put_user(s64.sem_nsems, &usp->sem_nsems);
-			if (err2)
-				err = -EFAULT;
-		} else {
-			struct semid_ds s;
-			struct semid_ds32 *usp;
-
-			usp = (struct semid_ds32 *)A(pad);
-			fourth.__pad = &s;
-			old_fs = get_fs();
-			set_fs(KERNEL_DS);
-			err = sys_semctl(first, second, third, fourth);
-			set_fs(old_fs);
-			err2 = copy_to_user(&usp->sem_perm, &s.sem_perm,
-					    sizeof(struct ipc_perm));
-			err2 |= __put_user(s.sem_otime, &usp->sem_otime);
-			err2 |= __put_user(s.sem_ctime, &usp->sem_ctime);
-			err2 |= __put_user(s.sem_nsems, &usp->sem_nsems);
-			if (err2)
-				err = -EFAULT;
-		}
-		break;
- 
-	case IPC_SET:
-		if (third & IPC_64) {
-			struct semid64_ds s64;
-			struct semid64_ds32 *usp;
-
-			usp = (struct semid64_ds32 *)A(pad);
-
-			err = get_user(s64.sem_perm.uid, &usp->sem_perm.uid);
-			err |= __get_user(s64.sem_perm.gid,
-					  &usp->sem_perm.gid);
-			err |= __get_user(s64.sem_perm.mode,
-					  &usp->sem_perm.mode);
-			if (err)
-				goto out;
-			fourth.__pad = &s64;
-
-			old_fs = get_fs();
-			set_fs(KERNEL_DS);
-			err = sys_semctl(first, second, third, fourth);
-			set_fs(old_fs);
-
-		} else {
-			struct semid_ds s;
-			struct semid_ds32 *usp;
-
-			usp = (struct semid_ds32 *)A(pad);
-
-			err = get_user(s.sem_perm.uid, &usp->sem_perm.uid);
-			err |= __get_user(s.sem_perm.gid,
-					  &usp->sem_perm.gid);
-			err |= __get_user(s.sem_perm.mode,
-					  &usp->sem_perm.mode);
-			if (err)
-				goto out;
-			fourth.__pad = &s;
-
-			old_fs = get_fs();
-			set_fs(KERNEL_DS);
-			err = sys_semctl(first, second, third, fourth);
-			set_fs(old_fs);
-		}
-		break;
-	default:
-		err = -EINVAL;
-	}
-out:
-	return err;
-}
-
-#define MAXBUF (64*1024)
-
-static int 
-do_sys32_msgsnd(int first, int second, int third, void *uptr)
-{
-	struct msgbuf *p;
-	struct msgbuf32 *up = (struct msgbuf32 *)uptr;
-	mm_segment_t old_fs;
-	int err;
-
-	if (second < 0 || (second >= MAXBUF-sizeof(struct msgbuf)))
-		return -EINVAL;
-
-	p = kmalloc(second + sizeof(struct msgbuf), GFP_USER);
-	if (!p)
-		return -ENOMEM;
-	err = get_user(p->mtype, &up->mtype);
-	err |= copy_from_user(p->mtext, &up->mtext, second);
-	if (err) {
-		err = -EFAULT;
-		goto out;
-	}
-	old_fs = get_fs();
-	set_fs(KERNEL_DS);
-	err = sys_msgsnd(first, p, second, third);
-	set_fs(old_fs);
-out:
-	kfree(p);
-	return err;
-}
-
-static int
-do_sys32_msgrcv(int first, int second, int msgtyp, int third,
-		int version, void *uptr)
-{
-	struct msgbuf32 *up;
-	struct msgbuf *p;
-	mm_segment_t old_fs;
-	int err;
-
-	if (second < 0 || (second >= MAXBUF-sizeof(struct msgbuf)))
-		return -EINVAL;
-
-	if (!version) {
-		struct ipc_kludge_32 *uipck = (struct ipc_kludge_32 *)uptr;
-		struct ipc_kludge_32 ipck;
-
-		err = -EINVAL;
-		if (!uptr)
-			goto out;
-		err = -EFAULT;
-		if (copy_from_user(&ipck, uipck, sizeof(struct ipc_kludge_32)))
-			goto out;
-		uptr = (void *)A(ipck.msgp);
-		msgtyp = ipck.msgtyp;
-	}
-	err = -ENOMEM;
-	p = kmalloc(second + sizeof (struct msgbuf), GFP_USER);
-	if (!p)
-		goto out;
-	old_fs = get_fs();
-	set_fs(KERNEL_DS);
-	err = sys_msgrcv(first, p, second, msgtyp, third);
-	set_fs(old_fs);
-	if (err < 0)
-		goto free_then_out;
-	up = (struct msgbuf32 *)uptr;
-	if (put_user(p->mtype, &up->mtype) ||
-	    copy_to_user(&up->mtext, p->mtext, err))
-		err = -EFAULT;
-free_then_out:
-	kfree(p);
-out:
-	return err;
-}
-
-static int
-do_sys32_msgctl(int first, int second, void *uptr)
+long sys32_ipc(u32 call, u32 first, u32 second, u32 third, compat_uptr_t ptr,
+	       u32 fifth)
 {
-	int err = -EINVAL, err2;
-	mm_segment_t old_fs;
+	int version;
 
-	switch (second & (~IPC_64)) {
-
-	case IPC_INFO:
-	case IPC_RMID:
-	case MSG_INFO:
-		err = sys_msgctl(first, second, (struct msqid_ds *)uptr);
-		break;
-
-	case IPC_SET:
-		if (second & IPC_64) {
-			struct msqid64_ds m64;
-			struct msqid64_ds32 *up = (struct msqid64_ds32 *)uptr;
-
-			err2 = copy_from_user(&m64.msg_perm, &up->msg_perm,
-					      sizeof(struct ipc64_perm));
-			err2 |= __get_user(m64.msg_qbytes, &up->msg_qbytes);
-			if (err2) {
-				err = -EFAULT;
-				break;
-			}
-			old_fs = get_fs();
-			set_fs(KERNEL_DS);
-			err = sys_msgctl(first, second,
-					 (struct msqid_ds *)&m64);
-			set_fs(old_fs);
-		} else {
-			struct msqid_ds m;
-			struct msqid_ds32 *up = (struct msqid_ds32 *)uptr;
-
-			err2 = copy_from_user(&m.msg_perm, &up->msg_perm,
-					      sizeof(struct ipc_perm));
-			err2 |= __get_user(m.msg_qbytes, &up->msg_qbytes);
-			if (err2) {
-				err = -EFAULT;
-				break;
-			}
-			old_fs = get_fs();
-			set_fs(KERNEL_DS);
-			err = sys_msgctl(first, second, &m);
-			set_fs(old_fs);
-		}
-		break;
-
-	case IPC_STAT:
-	case MSG_STAT:
-		if (second & IPC_64) {
-			struct msqid64_ds m64;
-			struct msqid64_ds32 *up = (struct msqid64_ds32 *)uptr;
-
-			old_fs = get_fs();
-			set_fs(KERNEL_DS);
-			err = sys_msgctl(first, second,
-					 (struct msqid_ds *)&m64);
-			set_fs(old_fs);
-
-			err2 = copy_to_user(&up->msg_perm, &m64.msg_perm,
-					    sizeof(struct ipc64_perm));
- 			err2 |= __put_user(m64.msg_stime, &up->msg_stime);
-			err2 |= __put_user(m64.msg_rtime, &up->msg_rtime);
-			err2 |= __put_user(m64.msg_ctime, &up->msg_ctime);
-			err2 |= __put_user(m64.msg_cbytes, &up->msg_cbytes);
-			err2 |= __put_user(m64.msg_qnum, &up->msg_qnum);
-			err2 |= __put_user(m64.msg_qbytes, &up->msg_qbytes);
-			err2 |= __put_user(m64.msg_lspid, &up->msg_lspid);
-			err2 |= __put_user(m64.msg_lrpid, &up->msg_lrpid);
-			if (err2)
-				err = -EFAULT;
-		} else {
-			struct msqid64_ds m;
-			struct msqid_ds32 *up = (struct msqid_ds32 *)uptr;
-
-			old_fs = get_fs();
-			set_fs(KERNEL_DS);
-			err = sys_msgctl(first, second, (struct msqid_ds *)&m);
-			set_fs(old_fs);
-
-			err2 = copy_to_user(&up->msg_perm, &m.msg_perm,
-					    sizeof(struct ipc_perm));
- 			err2 |= __put_user(m.msg_stime, &up->msg_stime);
-			err2 |= __put_user(m.msg_rtime, &up->msg_rtime);
-			err2 |= __put_user(m.msg_ctime, &up->msg_ctime);
-			err2 |= __put_user(m.msg_cbytes, &up->msg_cbytes);
-			err2 |= __put_user(m.msg_qnum, &up->msg_qnum);
-			err2 |= __put_user(m.msg_qbytes, &up->msg_qbytes);
-			err2 |= __put_user(m.msg_lspid, &up->msg_lspid);
-			err2 |= __put_user(m.msg_lrpid, &up->msg_lrpid);
-			if (err2)
-				err = -EFAULT;
-		}
-		break;
-	}
-	return err;
-}
-
-static int
-do_sys32_shmat(int first, int second, int third, int version, void *uptr)
-{
-	unsigned long raddr;
-	u32 *uaddr = (u32 *)A((u32)third);
-	int err = -EINVAL;
-
-	if (version == 1)
-		return err;
-	err = do_shmat(first, uptr, second, &raddr);
-	if (err)
-		return err;
-	err = put_user(raddr, uaddr);
-	return err;
-}
-
-static int
-do_sys32_shmctl(int first, int second, void *uptr)
-{
-	int err = -EINVAL, err2;
-	mm_segment_t old_fs;
-
-	switch (second & (~IPC_64)) {
-
-	case IPC_INFO:
-	case IPC_RMID:
-	case SHM_LOCK:
-	case SHM_UNLOCK:
-		err = sys_shmctl(first, second, (struct shmid_ds *)uptr);
-		break;
-	case IPC_SET:
-		if (second & IPC_64) {
-			struct shmid64_ds32 *up = (struct shmid64_ds32 *)uptr;
-			struct shmid64_ds s64;
-
-			err = get_user(s64.shm_perm.uid, &up->shm_perm.uid);
-			err |= __get_user(s64.shm_perm.gid, &up->shm_perm.gid);
-			err |= __get_user(s64.shm_perm.mode,
-					  &up->shm_perm.mode);
-			if (err)
-				break;
-			old_fs = get_fs();
-			set_fs(KERNEL_DS);
-			err = sys_shmctl(first, second,
-					 (struct shmid_ds *)&s64);
-			set_fs(old_fs);
-		} else {
-			struct shmid_ds32 *up = (struct shmid_ds32 *)uptr;
-			struct shmid_ds s;
-
-			err = get_user(s.shm_perm.uid, &up->shm_perm.uid);
-			err |= __get_user(s.shm_perm.gid, &up->shm_perm.gid);
-			err |= __get_user(s.shm_perm.mode, &up->shm_perm.mode);
-			if (err)
-				break;
-			old_fs = get_fs();
-			set_fs(KERNEL_DS);
-			err = sys_shmctl(first, second, &s);
-			set_fs(old_fs);
-		}
-		break;
-
-	case IPC_STAT:
-	case SHM_STAT:
-		if (second & IPC_64) {
-			struct shmid64_ds32 *up = (struct shmid64_ds32 *)uptr;
-			struct shmid64_ds s64;
-
-			old_fs = get_fs();
-			set_fs(KERNEL_DS);
-			err = sys_shmctl(first, second,
-					 (struct shmid_ds *)&s64);
-			set_fs(old_fs);
-			if (err < 0)
-				break;
-
-			err2 = copy_to_user(&up->shm_perm, &s64.shm_perm,
-					    sizeof(struct ipc64_perm));
-			err2 |= __put_user(s64.shm_atime, &up->shm_atime);
-			err2 |= __put_user(s64.shm_dtime, &up->shm_dtime);
-			err2 |= __put_user(s64.shm_ctime, &up->shm_ctime);
-			err2 |= __put_user(s64.shm_segsz, &up->shm_segsz);
-			err2 |= __put_user(s64.shm_nattch, &up->shm_nattch);
-			err2 |= __put_user(s64.shm_cpid, &up->shm_cpid);
-			err2 |= __put_user(s64.shm_lpid, &up->shm_lpid);
-			if (err2)
-				err = -EFAULT;
-		} else {
-			struct shmid_ds32 *up = (struct shmid_ds32 *)uptr;
-			struct shmid_ds s;
-
-			old_fs = get_fs();
-			set_fs(KERNEL_DS);
-			err = sys_shmctl(first, second, &s);
-			set_fs(old_fs);
-			if (err < 0)
-				break;
-
-			err2 = copy_to_user(&up->shm_perm, &s.shm_perm,
-					    sizeof(struct ipc_perm));
-			err2 |= __put_user (s.shm_atime, &up->shm_atime);
-			err2 |= __put_user (s.shm_dtime, &up->shm_dtime);
-			err2 |= __put_user (s.shm_ctime, &up->shm_ctime);
-			err2 |= __put_user (s.shm_segsz, &up->shm_segsz);
-			err2 |= __put_user (s.shm_nattch, &up->shm_nattch);
-			err2 |= __put_user (s.shm_cpid, &up->shm_cpid);
-			err2 |= __put_user (s.shm_lpid, &up->shm_lpid);
-			if (err2)
-				err = -EFAULT;
-		}
-		break;
-
-	case SHM_INFO: {
-		struct shm_info si;
-		struct shm_info32 {
-			int used_ids;
-			u32 shm_tot, shm_rss, shm_swp;
-			u32 swap_attempts, swap_successes;
-		} *uip = (struct shm_info32 *)uptr;
-
-		old_fs = get_fs();
-		set_fs(KERNEL_DS);
-		err = sys_shmctl(first, second, (struct shmid_ds *)&si);
-		set_fs(old_fs);
-		if (err < 0)
-			break;
-		err2 = put_user(si.used_ids, &uip->used_ids);
-		err2 |= __put_user(si.shm_tot, &uip->shm_tot);
-		err2 |= __put_user(si.shm_rss, &uip->shm_rss);
-		err2 |= __put_user(si.shm_swp, &uip->shm_swp);
-		err2 |= __put_user(si.swap_attempts, &uip->swap_attempts);
-		err2 |= __put_user(si.swap_successes, &uip->swap_successes);
-		if (err2)
-			err = -EFAULT;
-		break;
-	}
-	}
-	return err;
-}
-
-static int sys32_semtimedop(int semid, struct sembuf *tsems, int nsems,
-			    const struct compat_timespec *timeout32)
-{
-	struct compat_timespec t32;
-	struct timespec *t64 = compat_alloc_user_space(sizeof(*t64));
-
-	if (copy_from_user(&t32, timeout32, sizeof(t32)))
-		return -EFAULT;
-
-	if (put_user(t32.tv_sec, &t64->tv_sec) ||
-	    put_user(t32.tv_nsec, &t64->tv_nsec))
-		return -EFAULT;
-
-	return sys_semtimedop(semid, tsems, nsems, t64);
-}
-
-/*
- * Note: it is necessary to treat first_parm, second_parm, and
- * third_parm as unsigned ints, with the corresponding cast to a
- * signed int to insure that the proper conversion (sign extension)
- * between the register representation of a signed int (msr in 32-bit
- * mode) and the register representation of a signed int (msr in
- * 64-bit mode) is performed.
- */
-asmlinkage long sys32_ipc(u32 call, u32 first_parm, u32 second_parm, u32 third_parm, u32 ptr, u32 fifth)
-{
-	int first  = (int)first_parm;
-	int second = (int)second_parm;
-	int third  = (int)third_parm;
-	int version, err;
-	
 	version = call >> 16; /* hack for backward compatibility */
 	call &= 0xffff;
 
 	switch (call) {
 
+	case SEMTIMEDOP:
+		if (third)
+			/* sign extend semid */
+			return compat_sys_semtimedop((int)first,
+						     compat_ptr(ptr), second,
+						     compat_ptr(third));
+		/* else fall through for normal semop() */
 	case SEMOP:
 		/* struct sembuf is the same on 32 and 64bit :)) */
-		err = sys_semtimedop(first, (struct sembuf *)AA(ptr),
-				     second, NULL);
-		break;
-	case SEMTIMEDOP:
-		err = sys32_semtimedop(first, (struct sembuf *)AA(ptr), second,
-				       (const struct compat_timespec *)AA(fifth));
-		break;
+		/* sign extend semid */
+		return sys_semtimedop((int)first, compat_ptr(ptr), second,
+				      NULL);
 	case SEMGET:
-		err = sys_semget(first, second, third);
-		break;
+		/* sign extend key, nsems */
+		return sys_semget((int)first, (int)second, third);
 	case SEMCTL:
-		err = do_sys32_semctl(first, second, third,
-				      (void *)AA(ptr));
-		break;
+		/* sign extend semid, semnum */
+		return compat_sys_semctl((int)first, (int)second, third,
+					 compat_ptr(ptr));
 
 	case MSGSND:
-		err = do_sys32_msgsnd(first, second, third,
-				      (void *)AA(ptr));
-		break;
+		/* sign extend msqid */
+		return compat_sys_msgsnd((int)first, (int)second, third,
+					 compat_ptr(ptr));
 	case MSGRCV:
-		err = do_sys32_msgrcv(first, second, fifth, third,
-				      version, (void *)AA(ptr));
-		break;
+		/* sign extend msqid, msgtyp */
+		return compat_sys_msgrcv((int)first, second, (int)fifth,
+					 third, version, compat_ptr(ptr));
 	case MSGGET:
-		err = sys_msgget((key_t)first, second);
-		break;
+		/* sign extend key */
+		return sys_msgget((int)first, second);
 	case MSGCTL:
-		err = do_sys32_msgctl(first, second, (void *)AA(ptr));
-		break;
+		/* sign extend msqid */
+		return compat_sys_msgctl((int)first, second, compat_ptr(ptr));
 
 	case SHMAT:
-		err = do_sys32_shmat(first, second, third,
-				     version, (void *)AA(ptr));
-		break;
-	case SHMDT: 
-		err = sys_shmdt((char *)AA(ptr));
-		break;
+		/* sign extend shmid */
+		return compat_sys_shmat((int)first, second, third, version,
+					compat_ptr(ptr));
+	case SHMDT:
+		return sys_shmdt(compat_ptr(ptr));
 	case SHMGET:
-		err = sys_shmget(first, second_parm, third);
-		break;
+		/* sign extend key_t */
+		return sys_shmget((int)first, second, third);
 	case SHMCTL:
-		err = do_sys32_shmctl(first, second, (void *)AA(ptr));
-		break;
+		/* sign extend shmid */
+		return compat_sys_shmctl((int)first, second, compat_ptr(ptr));
+
 	default:
-		err = -ENOSYS;
-		break;
+		return -ENOSYS;
 	}
-	return err;
+
+	return -ENOSYS;
 }
 
 /* Note: it is necessary to treat out_fd and in_fd as unsigned ints, 
@@ -1721,191 +598,6 @@
 	return ret;
 }
 
-/*
- * count32() counts the number of arguments/envelopes
- */
-static int count32(u32 * argv, int max)
-{
-	int i = 0;
-
-	if (argv != NULL) {
-		for (;;) {
-			u32 p; int error;
-
-			error = get_user(p,argv);
-			if (error)
-				return error;
-			if (!p)
-				break;
-			argv++;
-			if (++i > max)
-				return -E2BIG;
-		}
-	}
-	return i;
-}
-
-/*
- * 'copy_string32()' copies argument/envelope strings from user
- * memory to free pages in kernel mem. These are in a format ready
- * to be put directly into the top of new user memory.
- */
-static int copy_strings32(int argc, u32 * argv, struct linux_binprm *bprm)
-{
-	while (argc-- > 0) {
-		u32 str;
-		int len;
-		unsigned long pos;
-
-		if (get_user(str, argv + argc) ||
-		    !str ||
-		    !(len = strnlen_user((char *)A(str), bprm->p)))
-			return -EFAULT;
-
-		if (bprm->p < len)
-			return -E2BIG;
-
-		bprm->p -= len;
-
-		pos = bprm->p;
-		while (len) {
-			char *kaddr;
-			struct page *page;
-			int offset, bytes_to_copy, new, err;
-
-			offset = pos % PAGE_SIZE;
-			page = bprm->page[pos / PAGE_SIZE];
-			new = 0;
-			if (!page) {
-				page = alloc_page(GFP_USER);
-				bprm->page[pos / PAGE_SIZE] = page;
-				if (!page)
-					return -ENOMEM;
-				new = 1;
-			}
-			kaddr = (char *)kmap(page);
-
-			if (new && offset)
-				memset(kaddr, 0, offset);
-			bytes_to_copy = PAGE_SIZE - offset;
-			if (bytes_to_copy > len) {
-				bytes_to_copy = len;
-				if (new)
-					memset(kaddr+offset+len, 0,
-					       PAGE_SIZE-offset-len);
-			}
-
-			err = copy_from_user(kaddr + offset, (char *)A(str),
-					     bytes_to_copy);
-			kunmap((unsigned long)kaddr);
-
-			if (err)
-				return -EFAULT;
-
-			pos += bytes_to_copy;
-			str += bytes_to_copy;
-			len -= bytes_to_copy;
-		}
-	}
-	return 0;
-}
-
-/*
- * sys32_execve() executes a new program.
- */
-static int do_execve32(char * filename, u32 * argv, u32 * envp, struct pt_regs * regs)
-{
-	struct linux_binprm bprm;
-	struct file * file;
-	int retval;
-	int i;
-
-	sched_balance_exec();
-
-	file = open_exec(filename);
-
-	retval = PTR_ERR(file);
-	if (IS_ERR(file))
-		return retval;
-
-	bprm.p = PAGE_SIZE*MAX_ARG_PAGES-sizeof(void *);
-	memset(bprm.page, 0, MAX_ARG_PAGES * sizeof(bprm.page[0]));
-
-	bprm.file = file;
-	bprm.filename = filename;
-	bprm.interp = filename;
-	bprm.sh_bang = 0;
-	bprm.loader = 0;
-	bprm.exec = 0;
-	bprm.security = NULL;
-	bprm.mm = mm_alloc();
-	retval = -ENOMEM;
-	if (!bprm.mm)
-		goto out_file;
-
-	retval = init_new_context(current, bprm.mm);
-	if (retval < 0)
-		goto out_mm;
-
-	bprm.argc = count32(argv, bprm.p / sizeof(u32));
-	if ((retval = bprm.argc) < 0)
-		goto out_mm;
-
-	bprm.envc = count32(envp, bprm.p / sizeof(u32));
-	if ((retval = bprm.envc) < 0)
-		goto out_mm;
-
-	retval = security_bprm_alloc(&bprm);
-	if (retval)
-		goto out;
-
-	retval = prepare_binprm(&bprm);
-	if (retval < 0) 
-		goto out; 
-
-	retval = copy_strings_kernel(1, &bprm.filename, &bprm);
-	if (retval < 0) 
-		goto out; 
-
-	bprm.exec = bprm.p;
-	retval = copy_strings32(bprm.envc, envp, &bprm);
-	if (retval < 0) 
-		goto out; 
-
-	retval = copy_strings32(bprm.argc, argv, &bprm);
-	if (retval < 0) 
-		goto out; 
-
-	retval = search_binary_handler(&bprm,regs);
-	if (retval >= 0) {
-		/* execve success */
-		security_bprm_free(&bprm);
-		return retval;
-	}
-
-out:
-	/* Something went wrong, return the inode and free the argument pages*/
-	for (i = 0 ; i < MAX_ARG_PAGES ; i++) {
-		struct page * page = bprm.page[i];
-		if (page)
-			__free_page(page);
-	}
-
-	if (bprm.security)
-		security_bprm_free(&bprm);
-
-out_mm:
-	if (bprm.mm)
-		mmdrop(bprm.mm);
-
-out_file:
-	if (bprm.file) {
-		allow_write_access(bprm.file);
-		fput(bprm.file);
-	}
-	return retval;
-}
-
 long sys32_execve(unsigned long a0, unsigned long a1, unsigned long a2,
 		  unsigned long a3, unsigned long a4, unsigned long a5,
 		  struct pt_regs *regs)
@@ -1924,7 +616,7 @@
 		giveup_altivec(current);
 #endif /* CONFIG_ALTIVEC */
 
-	error = do_execve32(filename, (u32*) a1, (u32*) a2, regs);
+	error = compat_do_execve(filename, compat_ptr(a1), compat_ptr(a2), regs);
 
 	if (error == 0)
 		current->ptrace &= ~PT_DTRACE;
diff -Nru a/arch/ppc64/kernel/time.c b/arch/ppc64/kernel/time.c
--- a/arch/ppc64/kernel/time.c	Sun May 16 01:18:36 2004
+++ b/arch/ppc64/kernel/time.c	Sun May 16 01:18:36 2004
@@ -66,7 +66,7 @@
 
 void smp_local_timer_interrupt(struct pt_regs *);
 
-u64 jiffies_64 = INITIAL_JIFFIES;
+u64 jiffies_64 __cacheline_aligned_in_smp = INITIAL_JIFFIES;
 
 EXPORT_SYMBOL(jiffies_64);
 
@@ -256,7 +256,7 @@
  * call will not be needed)
  */
 
-unsigned long tb_last_stamp=0;
+unsigned long tb_last_stamp __cacheline_aligned_in_smp;
 
 /*
  * timer_interrupt - gets called when the decrementer overflows,
diff -Nru a/arch/ppc64/kernel/xics.c b/arch/ppc64/kernel/xics.c
--- a/arch/ppc64/kernel/xics.c	Sun May 16 01:18:35 2004
+++ b/arch/ppc64/kernel/xics.c	Sun May 16 01:18:35 2004
@@ -56,7 +56,7 @@
 };
 
 /* This is used to map real irq numbers to virtual */
-static struct radix_tree_root irq_map = RADIX_TREE_INIT(GFP_KERNEL);
+static struct radix_tree_root irq_map = RADIX_TREE_INIT(GFP_ATOMIC);
 
 #define XICS_IPI		2
 #define XICS_IRQ_SPURIOUS	0
diff -Nru a/arch/ppc64/lib/Makefile b/arch/ppc64/lib/Makefile
--- a/arch/ppc64/lib/Makefile	Sun May 16 01:18:33 2004
+++ b/arch/ppc64/lib/Makefile	Sun May 16 01:18:33 2004
@@ -3,4 +3,4 @@
 #
 
 lib-y := checksum.o dec_and_lock.o string.o strcase.o
-lib-y += copypage.o memcpy.o copyuser.o
+lib-y += copypage.o memcpy.o copyuser.o locks.o
diff -Nru a/arch/ppc64/lib/locks.c b/arch/ppc64/lib/locks.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/arch/ppc64/lib/locks.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,285 @@
+/*
+ * Spin and read/write lock operations.
+ *
+ * Copyright (C) 2001-2004 Paul Mackerras <paulus@au.ibm.com>, IBM
+ * Copyright (C) 2001 Anton Blanchard <anton@au.ibm.com>, IBM
+ * Copyright (C) 2002 Dave Engebretsen <engebret@us.ibm.com>, IBM
+ *   Rework to support virtual processors
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ */
+
+#include <linux/config.h>
+#include <linux/kernel.h>
+#include <linux/spinlock.h>
+#include <linux/module.h>
+#include <asm/hvcall.h>
+#include <asm/iSeries/HvCall.h>
+
+#ifndef CONFIG_SPINLINE
+
+/*
+ * On a system with shared processors (that is, where a physical
+ * processor is multiplexed between several virtual processors),
+ * there is no point spinning on a lock if the holder of the lock
+ * isn't currently scheduled on a physical processor.  Instead
+ * we detect this situation and ask the hypervisor to give the
+ * rest of our timeslice to the lock holder.
+ *
+ * So that we can tell which virtual processor is holding a lock,
+ * we put 0x80000000 | smp_processor_id() in the lock when it is
+ * held.  Conveniently, we have a word in the paca that holds this
+ * value.
+ */
+
+/* waiting for a spinlock... */
+#if defined(CONFIG_PPC_SPLPAR) || defined(CONFIG_PPC_ISERIES)
+void __spin_yield(spinlock_t *lock)
+{
+	unsigned int lock_value, holder_cpu, yield_count;
+	struct paca_struct *holder_paca;
+
+	lock_value = lock->lock;
+	if (lock_value == 0)
+		return;
+	holder_cpu = lock_value & 0xffff;
+	BUG_ON(holder_cpu >= NR_CPUS);
+	holder_paca = &paca[holder_cpu];
+	yield_count = holder_paca->xLpPaca.xYieldCount;
+	if ((yield_count & 1) == 0)
+		return;		/* virtual cpu is currently running */
+	rmb();
+	if (lock->lock != lock_value)
+		return;		/* something has changed */
+#ifdef CONFIG_PPC_ISERIES
+	HvCall2(HvCallBaseYieldProcessor, HvCall_YieldToProc,
+		((u64)holder_cpu << 32) | yield_count);
+#else
+	plpar_hcall_norets(H_CONFER, holder_cpu, yield_count);
+#endif
+}
+
+#else /* SPLPAR || ISERIES */
+#define __spin_yield(x)	barrier()
+#endif
+
+/*
+ * This returns the old value in the lock, so we succeeded
+ * in getting the lock if the return value is 0.
+ */
+static __inline__ unsigned long __spin_trylock(spinlock_t *lock)
+{
+	unsigned long tmp, tmp2;
+
+	__asm__ __volatile__(
+"	lwz		%1,24(13)		# __spin_trylock\n\
+1:	lwarx		%0,0,%2\n\
+	cmpwi		0,%0,0\n\
+	bne-		2f\n\
+	stwcx.		%1,0,%2\n\
+	bne-		1b\n\
+	isync\n\
+2:"	: "=&r" (tmp), "=&r" (tmp2)
+	: "r" (&lock->lock)
+	: "cr0", "memory");
+
+	return tmp;
+}
+
+int _raw_spin_trylock(spinlock_t *lock)
+{
+	return __spin_trylock(lock) == 0;
+}
+
+EXPORT_SYMBOL(_raw_spin_trylock);
+
+void _raw_spin_lock(spinlock_t *lock)
+{
+	while (1) {
+		if (likely(__spin_trylock(lock) == 0))
+			break;
+		do {
+			HMT_low();
+			__spin_yield(lock);
+		} while (likely(lock->lock != 0));
+		HMT_medium();
+	}
+}
+
+EXPORT_SYMBOL(_raw_spin_lock);
+
+void _raw_spin_lock_flags(spinlock_t *lock, unsigned long flags)
+{
+	unsigned long flags_dis;
+
+	while (1) {
+		if (likely(__spin_trylock(lock) == 0))
+			break;
+		local_save_flags(flags_dis);
+		local_irq_restore(flags);
+		do {
+			HMT_low();
+			__spin_yield(lock);
+		} while (likely(lock->lock != 0));
+		HMT_medium();
+		local_irq_restore(flags_dis);
+	}
+}
+
+EXPORT_SYMBOL(_raw_spin_lock_flags);
+
+void spin_unlock_wait(spinlock_t *lock)
+{
+	while (lock->lock)
+		__spin_yield(lock);
+}
+
+EXPORT_SYMBOL(spin_unlock_wait);
+
+/*
+ * Waiting for a read lock or a write lock on a rwlock...
+ * This turns out to be the same for read and write locks, since
+ * we only know the holder if it is write-locked.
+ */
+#if defined(CONFIG_PPC_SPLPAR) || defined(CONFIG_PPC_ISERIES)
+void __rw_yield(rwlock_t *rw)
+{
+	int lock_value;
+	unsigned int holder_cpu, yield_count;
+	struct paca_struct *holder_paca;
+
+	lock_value = rw->lock;
+	if (lock_value >= 0)
+		return;		/* no write lock at present */
+	holder_cpu = lock_value & 0xffff;
+	BUG_ON(holder_cpu >= NR_CPUS);
+	holder_paca = &paca[holder_cpu];
+	yield_count = holder_paca->xLpPaca.xYieldCount;
+	if ((yield_count & 1) == 0)
+		return;		/* virtual cpu is currently running */
+	rmb();
+	if (rw->lock != lock_value)
+		return;		/* something has changed */
+#ifdef CONFIG_PPC_ISERIES
+	HvCall2(HvCallBaseYieldProcessor, HvCall_YieldToProc,
+		((u64)holder_cpu << 32) | yield_count);
+#else
+	plpar_hcall_norets(H_CONFER, holder_cpu, yield_count);
+#endif
+}
+
+#else /* SPLPAR || ISERIES */
+#define __rw_yield(x)	barrier()
+#endif
+
+/*
+ * This returns the old value in the lock + 1,
+ * so we got a read lock if the return value is > 0.
+ */
+static __inline__ long __read_trylock(rwlock_t *rw)
+{
+	long tmp;
+
+	__asm__ __volatile__(
+"1:	lwarx		%0,0,%1		# read_trylock\n\
+	extsw		%0,%0\n\
+	addic.		%0,%0,1\n\
+	ble-		2f\n\
+	stwcx.		%0,0,%1\n\
+	bne-		1b\n\
+	isync\n\
+2:"	: "=&r" (tmp)
+	: "r" (&rw->lock)
+	: "cr0", "xer", "memory");
+
+	return tmp;
+}
+
+int _raw_read_trylock(rwlock_t *rw)
+{
+	return __read_trylock(rw) > 0;
+}
+
+EXPORT_SYMBOL(_raw_read_trylock);
+
+void _raw_read_lock(rwlock_t *rw)
+{
+	while (1) {
+		if (likely(__read_trylock(rw) > 0))
+			break;
+		do {
+			HMT_low();
+			__rw_yield(rw);
+		} while (likely(rw->lock < 0));
+		HMT_medium();
+	}
+}
+
+EXPORT_SYMBOL(_raw_read_lock);
+
+void _raw_read_unlock(rwlock_t *rw)
+{
+	long tmp;
+
+	__asm__ __volatile__(
+	"eieio				# read_unlock\n\
+1:	lwarx		%0,0,%1\n\
+	addic		%0,%0,-1\n\
+	stwcx.		%0,0,%1\n\
+	bne-		1b"
+	: "=&r"(tmp)
+	: "r"(&rw->lock)
+	: "cr0", "memory");
+}
+
+EXPORT_SYMBOL(_raw_read_unlock);
+
+/*
+ * This returns the old value in the lock,
+ * so we got the write lock if the return value is 0.
+ */
+static __inline__ long __write_trylock(rwlock_t *rw)
+{
+	long tmp, tmp2;
+
+	__asm__ __volatile__(
+"	lwz		%1,24(13)		# write_trylock\n\
+1:	lwarx		%0,0,%2\n\
+	cmpwi		0,%0,0\n\
+	bne-		2f\n\
+	stwcx.		%1,0,%2\n\
+	bne-		1b\n\
+	isync\n\
+2:"	: "=&r" (tmp), "=&r" (tmp2)
+	: "r" (&rw->lock)
+	: "cr0", "memory");
+
+	return tmp;
+}
+
+int _raw_write_trylock(rwlock_t *rw)
+{
+	return __write_trylock(rw) == 0;
+}
+
+EXPORT_SYMBOL(_raw_write_trylock);
+
+void _raw_write_lock(rwlock_t *rw)
+{
+	while (1) {
+		if (likely(__write_trylock(rw) == 0))
+			break;
+		do {
+			HMT_low();
+			__rw_yield(rw);
+		} while (likely(rw->lock != 0));
+		HMT_medium();
+	}
+}
+
+EXPORT_SYMBOL(_raw_write_lock);
+
+#endif /* CONFIG_SPINLINE */
diff -Nru a/arch/ppc64/mm/hugetlbpage.c b/arch/ppc64/mm/hugetlbpage.c
--- a/arch/ppc64/mm/hugetlbpage.c	Sun May 16 01:18:35 2004
+++ b/arch/ppc64/mm/hugetlbpage.c	Sun May 16 01:18:35 2004
@@ -452,8 +452,9 @@
 				goto out;
 			}
 			ret = add_to_page_cache(page, mapping, idx, GFP_ATOMIC);
-			unlock_page(page);
-			if (ret) {
+			if (! ret) {
+				unlock_page(page);
+			} else {
 				hugetlb_put_quota(mapping);
 				free_huge_page(page);
 				goto out;
diff -Nru a/arch/s390/defconfig b/arch/s390/defconfig
--- a/arch/s390/defconfig	Sun May 16 01:18:36 2004
+++ b/arch/s390/defconfig	Sun May 16 01:18:36 2004
@@ -178,6 +178,8 @@
 # S/390 character device drivers
 #
 CONFIG_TN3270=y
+CONFIG_TN3270_TTY=y
+CONFIG_TN3270_FS=m
 CONFIG_TN3270_CONSOLE=y
 CONFIG_TN3215=y
 CONFIG_TN3215_CONSOLE=y
@@ -433,7 +435,6 @@
 # CONFIG_CIFS is not set
 # CONFIG_NCP_FS is not set
 # CONFIG_CODA_FS is not set
-# CONFIG_INTERMEZZO_FS is not set
 # CONFIG_AFS_FS is not set
 
 #
@@ -505,9 +506,11 @@
 # CONFIG_CRYPTO_ARC4 is not set
 # CONFIG_CRYPTO_DEFLATE is not set
 # CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
 # CONFIG_CRYPTO_TEST is not set
 
 #
 # Library routines
 #
 # CONFIG_CRC32 is not set
+# CONFIG_LIBCRC32C is not set
diff -Nru a/arch/s390/kernel/binfmt_elf32.c b/arch/s390/kernel/binfmt_elf32.c
--- a/arch/s390/kernel/binfmt_elf32.c	Sun May 16 01:18:36 2004
+++ b/arch/s390/kernel/binfmt_elf32.c	Sun May 16 01:18:36 2004
@@ -32,10 +32,6 @@
 #define NUM_FPRS      16
 #define NUM_ACRS      16    
 
-#define TASK31_SIZE		(0x80000000UL)
-#undef TASK_SIZE
-#define TASK_SIZE TASK31_SIZE
-
 /* For SVR4/S390 the function pointer to be registered with `atexit` is
    passed in R14. */
 #define ELF_PLAT_INIT(_r, load_addr) \
@@ -51,7 +47,7 @@
    the loader.  We need to make sure that it is out of the way of the program
    that it will "exec", and that there is sufficient room for the brk.  */
 
-#define ELF_ET_DYN_BASE         (TASK31_SIZE / 3 * 2)
+#define ELF_ET_DYN_BASE         (TASK_SIZE / 3 * 2)
 
 /* Wow, the "main" arch needs arch dependent functions too.. :) */
 
@@ -169,7 +165,6 @@
 #undef start_thread
 #define start_thread                    start_thread31 
 #define setup_arg_pages(bprm, exec)     setup_arg_pages32(bprm, exec)
-#define elf_map				elf_map32
 
 MODULE_DESCRIPTION("Binary format loader for compatibility with 32bit Linux for S390 binaries,"
                    " Copyright 2000 IBM Corporation"); 
@@ -188,19 +183,3 @@
 
 #include "../../../fs/binfmt_elf.c"
 
-static unsigned long
-elf_map32 (struct file *filep, unsigned long addr, struct elf_phdr *eppnt, int prot, int type)
-{
-	unsigned long map_addr;
-
-	if (!addr) 
-		addr = TASK_UNMAPPED_BASE;
-
-	down_write(&current->mm->mmap_sem);
-	map_addr = do_mmap(filep, ELF_PAGESTART(addr),
-			   eppnt->p_filesz + ELF_PAGEOFFSET(eppnt->p_vaddr),
-			   prot, type,
-			   eppnt->p_offset - ELF_PAGEOFFSET(eppnt->p_vaddr));
-	up_write(&current->mm->mmap_sem);
-	return(map_addr);
-}
diff -Nru a/arch/s390/kernel/compat_exec.c b/arch/s390/kernel/compat_exec.c
--- a/arch/s390/kernel/compat_exec.c	Sun May 16 01:18:36 2004
+++ b/arch/s390/kernel/compat_exec.c	Sun May 16 01:18:36 2004
@@ -34,9 +34,6 @@
 #endif
 
 
-#undef STACK_TOP
-#define STACK_TOP TASK31_SIZE
-
 int setup_arg_pages32(struct linux_binprm *bprm, int executable_stack)
 {
 	unsigned long stack_base;
diff -Nru a/arch/s390/kernel/compat_linux.c b/arch/s390/kernel/compat_linux.c
--- a/arch/s390/kernel/compat_linux.c	Sun May 16 01:18:36 2004
+++ b/arch/s390/kernel/compat_linux.c	Sun May 16 01:18:36 2004
@@ -355,144 +355,6 @@
 		return sys_ftruncate(fd, (high << 32) | low);
 }
 
-typedef ssize_t (*io_fn_t)(struct file *, char *, size_t, loff_t *);
-typedef ssize_t (*iov_fn_t)(struct file *, const struct iovec *, unsigned long, loff_t *);
-
-static long do_readv_writev32(int type, struct file *file,
-			      const struct compat_iovec *vector, u32 count)
-{
-	unsigned long tot_len;
-	struct iovec iovstack[UIO_FASTIOV];
-	struct iovec *iov=iovstack, *ivp;
-	struct inode *inode;
-	long retval, i;
-	io_fn_t fn;
-	iov_fn_t fnv;
-
-	/* First get the "struct iovec" from user memory and
-	 * verify all the pointers
-	 */
-	if (!count)
-		return 0;
-	if (verify_area(VERIFY_READ, vector, sizeof(struct compat_iovec)*count))
-		return -EFAULT;
-	if (count > UIO_MAXIOV)
-		return -EINVAL;
-	if (count > UIO_FASTIOV) {
-		iov = kmalloc(count*sizeof(struct iovec), GFP_KERNEL);
-		if (!iov)
-			return -ENOMEM;
-	}
-
-	tot_len = 0;
-	i = count;
-	ivp = iov;
-	retval = -EINVAL;
-	while(i > 0) {
-		compat_ssize_t tmp = tot_len;
-		compat_ssize_t len;
-		u32 buf;
-
-		if (__get_user(len, &vector->iov_len) ||
-		    __get_user(buf, &vector->iov_base)) {
-			retval = -EFAULT;
-			goto out;
-		}
-		if (len < 0)	/* size_t not fitting an ssize_t32 .. */
-			goto out;
-		tot_len += len;
-		if (tot_len < tmp) /* maths overflow on the compat_ssize_t */
-			goto out;
-		ivp->iov_base = (void *)A(buf);
-		ivp->iov_len = (__kernel_size_t) len;
-		vector++;
-		ivp++;
-		i--;
-	}
-	if (tot_len == 0) {
-		retval = 0;
-		goto out;
-	}
-
-	inode = file->f_dentry->d_inode;
-	/* VERIFY_WRITE actually means a read, as we write to user space */
-	retval = locks_verify_area((type == VERIFY_WRITE
-				    ? FLOCK_VERIFY_READ : FLOCK_VERIFY_WRITE),
-				   inode, file, file->f_pos, tot_len);
-	if (retval)
-		goto out;
-
-	/* VERIFY_WRITE actually means a read, as we write to user space */
-	fnv = (type == VERIFY_WRITE ? file->f_op->readv : file->f_op->writev);
-	if (fnv) {
-		retval = fnv(file, iov, count, &file->f_pos);
-		goto out;
-	}
-
-	fn = (type == VERIFY_WRITE ? file->f_op->read :
-	      (io_fn_t) file->f_op->write);
-
-	ivp = iov;
-	while (count > 0) {
-		void * base;
-		int len, nr;
-
-		base = ivp->iov_base;
-		len = ivp->iov_len;
-		ivp++;
-		count--;
-		nr = fn(file, base, len, &file->f_pos);
-		if (nr < 0) {
-			if (!retval)
-				retval = nr;
-			break;
-		}
-		retval += nr;
-		if (nr != len)
-			break;
-	}
-out:
-	if (iov != iovstack)
-		kfree(iov);
-
-	return retval;
-}
-
-asmlinkage long sys32_readv(int fd, struct compat_iovec *vector, unsigned long count)
-{
-	struct file *file;
-	long ret = -EBADF;
-
-	file = fget(fd);
-	if(!file)
-		goto bad_file;
-
-	if (file->f_op && (file->f_mode & FMODE_READ) &&
-	    (file->f_op->readv || file->f_op->read))
-		ret = do_readv_writev32(VERIFY_WRITE, file, vector, count);
-	fput(file);
-
-bad_file:
-	return ret;
-}
-
-asmlinkage long sys32_writev(int fd, struct compat_iovec *vector, unsigned long count)
-{
-	struct file *file;
-	int ret = -EBADF;
-
-	file = fget(fd);
-	if(!file)
-		goto bad_file;
-	if (file->f_op && (file->f_mode & FMODE_WRITE) &&
-	    (file->f_op->writev || file->f_op->write))
-		ret = do_readv_writev32(VERIFY_READ, file, vector, count);
-	fput(file);
-
-bad_file:
-	return ret;
-}
-
 /* readdir & getdents */
 
 #define NAME_OFFSET(de) ((int) ((de)->d_name - (char *) (de)))
@@ -623,160 +485,6 @@
 
 /* end of readdir & getdents */
 
-/*
- * Ooo, nasty.  We need here to frob 32-bit unsigned longs to
- * 64-bit unsigned longs.
- */
-
-static inline int
-get_fd_set32(unsigned long n, unsigned long *fdset, u32 *ufdset)
-{
-	if (ufdset) {
-		unsigned long odd;
-
-		if (verify_area(VERIFY_WRITE, ufdset, n*sizeof(u32)))
-			return -EFAULT;
-
-		odd = n & 1UL;
-		n &= ~1UL;
-		while (n) {
-			unsigned long h, l;
-			__get_user(l, ufdset);
-			__get_user(h, ufdset+1);
-			ufdset += 2;
-			*fdset++ = h << 32 | l;
-			n -= 2;
-		}
-		if (odd)
-			__get_user(*fdset, ufdset);
-	} else {
-		/* Tricky, must clear full unsigned long in the
-		 * kernel fdset at the end, this makes sure that
-		 * actually happens.
-		 */
-		memset(fdset, 0, ((n + 1) & ~1)*sizeof(u32));
-	}
-	return 0;
-}
-
-static inline void
-set_fd_set32(unsigned long n, u32 *ufdset, unsigned long *fdset)
-{
-	unsigned long odd;
-
-	if (!ufdset)
-		return;
-
-	odd = n & 1UL;
-	n &= ~1UL;
-	while (n) {
-		unsigned long h, l;
-		l = *fdset++;
-		h = l >> 32;
-		__put_user(l, ufdset);
-		__put_user(h, ufdset+1);
-		ufdset += 2;
-		n -= 2;
-	}
-	if (odd)
-		__put_user(*fdset, ufdset);
-}
-
-#define MAX_SELECT_SECONDS \
-	((unsigned long) (MAX_SCHEDULE_TIMEOUT / HZ)-1)
-
-asmlinkage long sys32_select(int n, u32 *inp, u32 *outp, u32 *exp,
-				struct compat_timeval *tvp)
-{
-	fd_set_bits fds;
-	char *bits;
-	unsigned long nn;
-	long timeout;
-	int ret, size;
-
-	timeout = MAX_SCHEDULE_TIMEOUT;
-	if (tvp) {
-		int sec, usec;
-
-		if ((ret = verify_area(VERIFY_READ, tvp, sizeof(*tvp)))
-		    || (ret = __get_user(sec, &tvp->tv_sec))
-		    || (ret = __get_user(usec, &tvp->tv_usec)))
-			goto out_nofds;
-
-		ret = -EINVAL;
-		if(sec < 0 || usec < 0)
-			goto out_nofds;
-
-		if ((unsigned long) sec < MAX_SELECT_SECONDS) {
-			timeout = (usec + 1000000/HZ - 1) / (1000000/HZ);
-			timeout += sec * (unsigned long) HZ;
-		}
-	}
-
-	ret = -EINVAL;
-	if (n < 0)
-		goto out_nofds;
-	if (n > current->files->max_fdset)
-		n = current->files->max_fdset;
-
-	/*
-	 * We need 6 bitmaps (in/out/ex for both incoming and outgoing),
-	 * since we used fdset we need to allocate memory in units of
-	 * long-words. 
-	 */
-	ret = -ENOMEM;
-	size = FDS_BYTES(n);
-	bits = kmalloc(6 * size, GFP_KERNEL);
-	if (!bits)
-		goto out_nofds;
-	fds.in      = (unsigned long *)  bits;
-	fds.out     = (unsigned long *) (bits +   size);
-	fds.ex      = (unsigned long *) (bits + 2*size);
-	fds.res_in  = (unsigned long *) (bits + 3*size);
-	fds.res_out = (unsigned long *) (bits + 4*size);
-	fds.res_ex  = (unsigned long *) (bits + 5*size);
-
-	nn = (n + 8*sizeof(u32) - 1) / (8*sizeof(u32));
-	if ((ret = get_fd_set32(nn, fds.in, inp)) ||
-	    (ret = get_fd_set32(nn, fds.out, outp)) ||
-	    (ret = get_fd_set32(nn, fds.ex, exp)))
-		goto out;
-	zero_fd_set(n, fds.res_in);
-	zero_fd_set(n, fds.res_out);
-	zero_fd_set(n, fds.res_ex);
-
-	ret = do_select(n, &fds, &timeout);
-
-	if (tvp && !(current->personality & STICKY_TIMEOUTS)) {
-		int sec = 0, usec = 0;
-		if (timeout) {
-			sec = timeout / HZ;
-			usec = timeout % HZ;
-			usec *= (1000000/HZ);
-		}
-		put_user(sec, &tvp->tv_sec);
-		put_user(usec, &tvp->tv_usec);
-	}
-
-	if (ret < 0)
-		goto out;
-	if (!ret) {
-		ret = -ERESTARTNOHAND;
-		if (signal_pending(current))
-			goto out;
-		ret = 0;
-	}
-
-	set_fd_set32(nn, inp, fds.res_in);
-	set_fd_set32(nn, outp, fds.res_out);
-	set_fd_set32(nn, exp, fds.res_ex);
-
-out:
-	kfree(bits);
-out_nofds:
-	return ret;
-}
-
 int cp_compat_stat(struct kstat *stat, struct compat_stat *statbuf)
 {
 	int err;
@@ -1026,188 +734,6 @@
 	return ret;
 }
 
-extern void check_pending(int signum);
-
-/*
- * count32() counts the number of arguments/envelopes
- */
-static int count32(u32 * argv)
-{
-	int i = 0;
-
-	if (argv != NULL) {
-		for (;;) {
-			u32 p; int error;
-
-			error = get_user(p,argv);
-			if (error) return error;
-			if (!p) break;
-			argv++; i++;
-		}
-	}
-	return i;
-}
-
-/*
- * 'copy_string32()' copies argument/envelope strings from user
- * memory to free pages in kernel mem. These are in a format ready
- * to be put directly into the top of new user memory.
- */
-static int copy_strings32(int argc, u32 * argv, struct linux_binprm *bprm)
-{
-	while (argc-- > 0) {
-		u32 str;
-		int len;
-		unsigned long pos;
-
-		if (get_user(str, argv + argc) ||
-		    !str ||
-		    !(len = strnlen_user((char *)A(str), bprm->p)))
-			return -EFAULT;
-
-		if (bprm->p < len)
-			return -E2BIG;
-
-		bprm->p -= len;
-
-		pos = bprm->p;
-		while (len) {
-			char *kaddr;
-			struct page *page;
-			int offset, bytes_to_copy, new, err;
-
-			offset = pos % PAGE_SIZE;
-			page = bprm->page[pos / PAGE_SIZE];
-			new = 0;
-			if (!page) {
-				page = alloc_page(GFP_USER);
-				bprm->page[pos / PAGE_SIZE] = page;
-				if (!page)
-					return -ENOMEM;
-				new = 1;
-			}
-			kaddr = (char *)kmap(page);
-
-			if (new && offset)
-				memset(kaddr, 0, offset);
-			bytes_to_copy = PAGE_SIZE - offset;
-			if (bytes_to_copy > len) {
-				bytes_to_copy = len;
-				if (new)
-					memset(kaddr+offset+len, 0,
-					       PAGE_SIZE-offset-len);
-			}
-
-			err = copy_from_user(kaddr + offset, (char *)A(str),
-					     bytes_to_copy);
-			kunmap(page);
-
-			if (err)
-				return -EFAULT;
-
-			pos += bytes_to_copy;
-			str += bytes_to_copy;
-			len -= bytes_to_copy;
-		}
-	}
-	return 0;
-}
-
-/*
- * sys32_execve() executes a new program.
- */
-static inline int 
-do_execve32(char * filename, u32 * argv, u32 * envp, struct pt_regs * regs)
-{
-	struct linux_binprm bprm;
-	struct file * file;
-	int retval;
-	int i;
-
-	sched_balance_exec();
-
-	file = open_exec(filename);
-
-	retval = PTR_ERR(file);
-	if (IS_ERR(file))
-		return retval;
-
-	bprm.p = PAGE_SIZE*MAX_ARG_PAGES-sizeof(void *);
-	memset(bprm.page, 0, MAX_ARG_PAGES * sizeof(bprm.page[0]));
-
-	bprm.file = file;
-	bprm.filename = filename;
-	bprm.interp = filename;
-	bprm.sh_bang = 0;
-	bprm.loader = 0;
-	bprm.exec = 0;
-	bprm.mm = mm_alloc();
-	retval = -ENOMEM;
-	if (!bprm.mm)
-		goto out_file;
-
-	/* init_new_context is empty for s390x. */
-
-	bprm.argc = count32(argv);
-	if ((retval = bprm.argc) < 0)
-		goto out_mm;
-
-	bprm.envc = count32(envp);
-	if ((retval = bprm.envc) < 0)
-		goto out_mm;
-
-	retval = security_bprm_alloc(&bprm);
-	if (retval)
-		goto out;
-
-	retval = prepare_binprm(&bprm);
-	if (retval < 0)
-		goto out;
-	
-	retval = copy_strings_kernel(1, &bprm.filename, &bprm);
-	if (retval < 0)
-		goto out;
-
-	bprm.exec = bprm.p;
-	retval = copy_strings32(bprm.envc, envp, &bprm);
-	if (retval < 0)
-		goto out;
-
-	retval = copy_strings32(bprm.argc, argv, &bprm);
-	if (retval < 0)
-		goto out;
-
-	retval = search_binary_handler(&bprm, regs);
-	if (retval >= 0) {
-		/* execve success */
-		security_bprm_free(&bprm);
-		return retval;
-	}
-
-out:
-	/* Something went wrong, return the inode and free the argument pages*/
-	for (i=0 ; i<MAX_ARG_PAGES ; i++) {
-		struct page * page = bprm.page[i];
-		if (page)
-			__free_page(page);
-	}
-
-	if (bprm.security)
-		security_bprm_free(&bprm);
-
-out_mm:
-	if (bprm.mm)
-		mmdrop(bprm.mm);
-
-out_file:
-	if (bprm.file) {
-		allow_write_access(bprm.file);
-		fput(bprm.file);
-	}
-
-	return retval;
-}
-
 /*
  * sys32_execve() executes a new program after the asm stub has set
  * things up for us.  This should basically do what I want it to.
@@ -1218,11 +744,12 @@
         int error;
         char * filename;
 
-        filename = getname((char *)A(regs.orig_gpr2));
+        filename = getname(compat_ptr(regs.orig_gpr2));
         error = PTR_ERR(filename);
         if (IS_ERR(filename))
                 goto out;
-        error = do_execve32(filename, (u32 *)A(regs.gprs[3]), (u32 *)A(regs.gprs[4]), &regs);
+        error = compat_do_execve(filename, compat_ptr(regs.gprs[3]),
+				 compat_ptr(regs.gprs[4]), &regs);
 	if (error == 0)
 	{
 		current->ptrace &= ~PT_DTRACE;
@@ -1269,226 +796,6 @@
 }
 
 #endif  /* CONFIG_MODULES */
-
-/* Stuff for NFS server syscalls... */
-struct nfsctl_svc32 {
-	u16			svc32_port;
-	s32			svc32_nthreads;
-};
-
-struct nfsctl_client32 {
-	s8			cl32_ident[NFSCLNT_IDMAX+1];
-	s32			cl32_naddr;
-	struct in_addr		cl32_addrlist[NFSCLNT_ADDRMAX];
-	s32			cl32_fhkeytype;
-	s32			cl32_fhkeylen;
-	u8			cl32_fhkey[NFSCLNT_KEYMAX];
-};
-
-struct nfsctl_export32 {
-	s8			ex32_client[NFSCLNT_IDMAX+1];
-	s8			ex32_path[NFS_MAXPATHLEN+1];
-	compat_dev_t	ex32_dev;
-	compat_ino_t	ex32_ino;
-	s32			ex32_flags;
-	compat_uid_t	ex32_anon_uid;
-	compat_gid_t	ex32_anon_gid;
-};
-
-struct nfsctl_fdparm32 {
-	struct sockaddr		gd32_addr;
-	s8			gd32_path[NFS_MAXPATHLEN+1];
-	s32			gd32_version;
-};
-
-struct nfsctl_fsparm32 {
-	struct sockaddr		gd32_addr;
-	s8			gd32_path[NFS_MAXPATHLEN+1];
-	s32			gd32_maxlen;
-};
-
-struct nfsctl_arg32 {
-	s32			ca32_version;	/* safeguard */
-	union {
-		struct nfsctl_svc32	u32_svc;
-		struct nfsctl_client32	u32_client;
-		struct nfsctl_export32	u32_export;
-		struct nfsctl_fdparm32	u32_getfd;
-		struct nfsctl_fsparm32	u32_getfs;
-	} u;
-#define ca32_svc	u.u32_svc
-#define ca32_client	u.u32_client
-#define ca32_export	u.u32_export
-#define ca32_getfd	u.u32_getfd
-#define ca32_getfs	u.u32_getfs
-#define ca32_authd	u.u32_authd
-};
-
-union nfsctl_res32 {
-	__u8			cr32_getfh[NFS_FHSIZE];
-	struct knfsd_fh		cr32_getfs;
-};
-
-static int nfs_svc32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32)
-{
-	int err;
-	
-	err = __get_user(karg->ca_version, &arg32->ca32_version);
-	err |= __get_user(karg->ca_svc.svc_port, &arg32->ca32_svc.svc32_port);
-	err |= __get_user(karg->ca_svc.svc_nthreads, &arg32->ca32_svc.svc32_nthreads);
-	return err;
-}
-
-static int nfs_clnt32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32)
-{
-	int err;
-	
-	err = __get_user(karg->ca_version, &arg32->ca32_version);
-	err |= copy_from_user(&karg->ca_client.cl_ident[0],
-			  &arg32->ca32_client.cl32_ident[0],
-			  NFSCLNT_IDMAX);
-	err |= __get_user(karg->ca_client.cl_naddr, &arg32->ca32_client.cl32_naddr);
-	err |= copy_from_user(&karg->ca_client.cl_addrlist[0],
-			  &arg32->ca32_client.cl32_addrlist[0],
-			  (sizeof(struct in_addr) * NFSCLNT_ADDRMAX));
-	err |= __get_user(karg->ca_client.cl_fhkeytype,
-		      &arg32->ca32_client.cl32_fhkeytype);
-	err |= __get_user(karg->ca_client.cl_fhkeylen,
-		      &arg32->ca32_client.cl32_fhkeylen);
-	err |= copy_from_user(&karg->ca_client.cl_fhkey[0],
-			  &arg32->ca32_client.cl32_fhkey[0],
-			  NFSCLNT_KEYMAX);
-	return err;
-}
-
-static int nfs_exp32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32)
-{
-	int err;
-	
-	err = __get_user(karg->ca_version, &arg32->ca32_version);
-	err |= copy_from_user(&karg->ca_export.ex_client[0],
-			  &arg32->ca32_export.ex32_client[0],
-			  NFSCLNT_IDMAX);
-	err |= copy_from_user(&karg->ca_export.ex_path[0],
-			  &arg32->ca32_export.ex32_path[0],
-			  NFS_MAXPATHLEN);
-	err |= __get_user(karg->ca_export.ex_dev,
-		      &arg32->ca32_export.ex32_dev);
-	err |= __get_user(karg->ca_export.ex_ino,
-		      &arg32->ca32_export.ex32_ino);
-	err |= __get_user(karg->ca_export.ex_flags,
-		      &arg32->ca32_export.ex32_flags);
-	err |= __get_user(karg->ca_export.ex_anon_uid,
-		      &arg32->ca32_export.ex32_anon_uid);
-	err |= __get_user(karg->ca_export.ex_anon_gid,
-		      &arg32->ca32_export.ex32_anon_gid);
-	karg->ca_export.ex_anon_uid = high2lowuid(karg->ca_export.ex_anon_uid);
-	karg->ca_export.ex_anon_gid = high2lowgid(karg->ca_export.ex_anon_gid);
-	return err;
-}
-
-static int nfs_getfd32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32)
-{
-	int err;
-	
-	err = __get_user(karg->ca_version, &arg32->ca32_version);
-	err |= copy_from_user(&karg->ca_getfd.gd_addr,
-			  &arg32->ca32_getfd.gd32_addr,
-			  (sizeof(struct sockaddr)));
-	err |= copy_from_user(&karg->ca_getfd.gd_path,
-			  &arg32->ca32_getfd.gd32_path,
-			  (NFS_MAXPATHLEN+1));
-	err |= __get_user(karg->ca_getfd.gd_version,
-		      &arg32->ca32_getfd.gd32_version);
-	return err;
-}
-
-static int nfs_getfs32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32)
-{
-	int err;
-	
-	err = __get_user(karg->ca_version, &arg32->ca32_version);
-	err |= copy_from_user(&karg->ca_getfs.gd_addr,
-			  &arg32->ca32_getfs.gd32_addr,
-			  (sizeof(struct sockaddr)));
-	err |= copy_from_user(&karg->ca_getfs.gd_path,
-			  &arg32->ca32_getfs.gd32_path,
-			  (NFS_MAXPATHLEN+1));
-	err |= __get_user(karg->ca_getfs.gd_maxlen,
-		      &arg32->ca32_getfs.gd32_maxlen);
-	return err;
-}
-
-/* This really doesn't need translations, we are only passing
- * back a union which contains opaque nfs file handle data.
- */
-static int nfs_getfh32_res_trans(union nfsctl_res *kres, union nfsctl_res32 *res32)
-{
-	return copy_to_user(res32, kres, sizeof(*res32)) ? -EFAULT : 0;
-}
-
-long asmlinkage sys32_nfsservctl(int cmd, struct nfsctl_arg32 *arg32, union nfsctl_res32 *res32)
-{
-	struct nfsctl_arg *karg = NULL;
-	union nfsctl_res *kres = NULL;
-	mm_segment_t oldfs;
-	int err;
-
-	karg = kmalloc(sizeof(*karg), GFP_USER);
-	if(!karg)
-		return -ENOMEM;
-	if(res32) {
-		kres = kmalloc(sizeof(*kres), GFP_USER);
-		if(!kres) {
-			kfree(karg);
-			return -ENOMEM;
-		}
-	}
-	switch(cmd) {
-	case NFSCTL_SVC:
-		err = nfs_svc32_trans(karg, arg32);
-		break;
-	case NFSCTL_ADDCLIENT:
-		err = nfs_clnt32_trans(karg, arg32);
-		break;
-	case NFSCTL_DELCLIENT:
-		err = nfs_clnt32_trans(karg, arg32);
-		break;
-	case NFSCTL_EXPORT:
-	case NFSCTL_UNEXPORT:
-		err = nfs_exp32_trans(karg, arg32);
-		break;
-	case NFSCTL_GETFD:
-		err = nfs_getfd32_trans(karg, arg32);
-		break;
-	case NFSCTL_GETFS:
-		err = nfs_getfs32_trans(karg, arg32);
-		break;
-	default:
-		err = -EINVAL;
-		break;
-	}
-	if(err)
-		goto done;
-	oldfs = get_fs();
-	set_fs(KERNEL_DS);
-	err = sys_nfsservctl(cmd, karg, kres);
-	set_fs(oldfs);
-
-	if (err)
-		goto done;
-
-	if((cmd == NFSCTL_GETFD) ||
-	   (cmd == NFSCTL_GETFS))
-		err = nfs_getfh32_res_trans(kres, res32);
-
-done:
-	if(karg)
-		kfree(karg);
-	if(kres)
-		kfree(kres);
-	return err;
-}
 
 /* Translations due to time_t size differences.  Which affects all
    sorts of things, like timeval and itimerval.  */
diff -Nru a/arch/s390/kernel/compat_wrapper.S b/arch/s390/kernel/compat_wrapper.S
--- a/arch/s390/kernel/compat_wrapper.S	Sun May 16 01:18:37 2004
+++ b/arch/s390/kernel/compat_wrapper.S	Sun May 16 01:18:37 2004
@@ -641,14 +641,14 @@
 	llgfr	%r4,%r4			# unsigned int
 	jg	sys32_getdents		# branch to system call
 
-	.globl  sys32_select_wrapper 
-sys32_select_wrapper:
+	.globl  compat_sys_select_wrapper
+compat_sys_select_wrapper:
 	lgfr	%r2,%r2			# int
-	llgtr	%r3,%r3			# fd_set *
-	llgtr	%r4,%r4			# fd_set *
-	llgtr	%r5,%r5			# fd_set *
-	llgtr	%r6,%r6			# struct timeval_emu31 *
-	jg	sys32_select		# branch to system call
+	llgtr	%r3,%r3			# compat_fd_set *
+	llgtr	%r4,%r4			# compat_fd_set *
+	llgtr	%r5,%r5			# compat_fd_set *
+	llgtr	%r6,%r6			# struct compat_timeval *
+	jg	compat_sys_select	# branch to system call
 
 	.globl  sys32_flock_wrapper 
 sys32_flock_wrapper:
@@ -663,19 +663,19 @@
 	lgfr	%r4,%r4			# int
 	jg	sys_msync		# branch to system call
 
-	.globl  sys32_readv_wrapper 
-sys32_readv_wrapper:
+	.globl  compat_sys_readv_wrapper
+compat_sys_readv_wrapper:
 	lgfr	%r2,%r2			# int
-	llgtr	%r3,%r3			# const struct iovec_emu31 *
+	llgtr	%r3,%r3			# const struct compat_iovec *
 	llgfr	%r4,%r4			# unsigned long
-	jg	sys32_readv		# branch to system call
+	jg	compat_sys_readv	# branch to system call
 
-	.globl  sys32_writev_wrapper 
-sys32_writev_wrapper:
+	.globl  compat_sys_writev_wrapper
+compat_sys_writev_wrapper:
 	lgfr	%r2,%r2			# int
-	llgtr	%r3,%r3			# const struct iovec_emu31 *
+	llgtr	%r3,%r3			# const struct compat_iovec *
 	llgfr	%r4,%r4			# unsigned long
-	jg	sys32_writev		# branch to system call
+	jg	compat_sys_writev	# branch to system call
 
 	.globl  sys32_getsid_wrapper 
 sys32_getsid_wrapper:
@@ -786,12 +786,12 @@
 	lgfr	%r4,%r4			# long 
 	jg	sys_poll		# branch to system call
 
-	.globl  sys32_nfsservctl_wrapper 
-sys32_nfsservctl_wrapper:
+	.globl  compat_sys_nfsservctl_wrapper
+compat_sys_nfsservctl_wrapper:
 	lgfr	%r2,%r2			# int 
-	llgtr	%r3,%r3			# struct nfsctl_arg_emu31 * 
-	llgtr	%r4,%r4			# union nfsctl_res_emu31 * 
-	jg	sys32_nfsservctl	# branch to system call
+	llgtr	%r3,%r3			# struct compat_nfsctl_arg*
+	llgtr	%r4,%r4			# union compat_nfsctl_res*
+	jg	compat_sys_nfsservctl	# branch to system call
 
 	.globl  sys32_setresgid16_wrapper 
 sys32_setresgid16_wrapper:
diff -Nru a/arch/s390/kernel/entry.S b/arch/s390/kernel/entry.S
--- a/arch/s390/kernel/entry.S	Sun May 16 01:18:34 2004
+++ b/arch/s390/kernel/entry.S	Sun May 16 01:18:34 2004
@@ -471,9 +471,10 @@
 pgm_per_std:
 	SAVE_ALL __LC_PGM_OLD_PSW,__LC_SAVE_AREA,1
 	GET_THREAD_INFO
-	mvc	__THREAD_per+__PER_atmid(2,%r9),__LC_PER_ATMID
-	mvc	__THREAD_per+__PER_address(4,%r9),__LC_PER_ADDRESS
-	mvc	__THREAD_per+__PER_access_id(1,%r9),__LC_PER_ACCESS_ID
+	l	%r1,__TI_task(%r9)
+	mvc	__THREAD_per+__PER_atmid(2,%r1),__LC_PER_ATMID
+	mvc	__THREAD_per+__PER_address(4,%r1),__LC_PER_ADDRESS
+	mvc	__THREAD_per+__PER_access_id(1,%r1),__LC_PER_ACCESS_ID
 	la	%r4,0x7f
 	l	%r3,__LC_PGM_ILC	 # load program interruption code
         nr      %r4,%r3                  # clear per-event-bit and ilc
@@ -495,11 +496,12 @@
 pgm_svcper:
 	SAVE_ALL __LC_SVC_OLD_PSW,__LC_SAVE_AREA,1
 	lh	%r7,0x8a	  # get svc number from lowcore
-        stosm   24(%r15),0x03     # reenable interrupts
         GET_THREAD_INFO           # load pointer to task_struct to R9
-	mvc	__THREAD_per+__PER_atmid(2,%r9),__LC_PER_ATMID
-	mvc	__THREAD_per+__PER_address(4,%r9),__LC_PER_ADDRESS
-	mvc	__THREAD_per+__PER_access_id(1,%r9),__LC_PER_ACCESS_ID
+	l	%r1,__TI_task(%r9)
+	mvc	__THREAD_per+__PER_atmid(2,%r1),__LC_PER_ATMID
+	mvc	__THREAD_per+__PER_address(4,%r1),__LC_PER_ADDRESS
+	mvc	__THREAD_per+__PER_access_id(1,%r1),__LC_PER_ACCESS_ID
+        stosm   24(%r15),0x03     # reenable interrupts
         sla     %r7,2             # *4 and test for svc 0
 	bnz	BASED(pgm_svcstd) # svc number > 0 ?
 	# svc 0: system call number in %r1
diff -Nru a/arch/s390/kernel/entry64.S b/arch/s390/kernel/entry64.S
--- a/arch/s390/kernel/entry64.S	Sun May 16 01:18:34 2004
+++ b/arch/s390/kernel/entry64.S	Sun May 16 01:18:34 2004
@@ -505,9 +505,10 @@
 pgm_per_std:
 	SAVE_ALL __LC_PGM_OLD_PSW,__LC_SAVE_AREA,1
 	GET_THREAD_INFO
-	mvc	__THREAD_per+__PER_atmid(2,%r9),__LC_PER_ATMID
-	mvc	__THREAD_per+__PER_address(8,%r9),__LC_PER_ADDRESS
-	mvc	__THREAD_per+__PER_access_id(1,%r9),__LC_PER_ACCESS_ID
+	lg	%r1,__TI_task(%r9)
+	mvc	__THREAD_per+__PER_atmid(2,%r1),__LC_PER_ATMID
+	mvc	__THREAD_per+__PER_address(8,%r1),__LC_PER_ADDRESS
+	mvc	__THREAD_per+__PER_access_id(1,%r1),__LC_PER_ACCESS_ID
 	lghi    %r4,0x7f
 	lgf     %r3,__LC_PGM_ILC	 # load program interruption code
         nr      %r4,%r3			 # clear per-event-bit and ilc
@@ -528,11 +529,12 @@
 pgm_svcper:
 	SAVE_ALL __LC_SVC_OLD_PSW,__LC_SAVE_AREA,1
 	llgh    %r7,__LC_SVC_INT_CODE # get svc number from lowcore
-	stosm   48(%r15),0x03     # reenable interrupts
         GET_THREAD_INFO           # load pointer to task_struct to R9
-	mvc	__THREAD_per+__PER_atmid(2,%r9),__LC_PER_ATMID
-	mvc	__THREAD_per+__PER_address(8,%r9),__LC_PER_ADDRESS
-	mvc	__THREAD_per+__PER_access_id(1,%r9),__LC_PER_ACCESS_ID
+	lg	%r1,__TI_task(%r9)
+	mvc	__THREAD_per+__PER_atmid(2,%r1),__LC_PER_ATMID
+	mvc	__THREAD_per+__PER_address(8,%r1),__LC_PER_ADDRESS
+	mvc	__THREAD_per+__PER_access_id(1,%r1),__LC_PER_ACCESS_ID
+	stosm   48(%r15),0x03     # reenable interrupts
 	slag	%r7,%r7,2         # *4 and test for svc 0
 	jnz	pgm_svcstd
 	# svc 0: system call number in %r1
diff -Nru a/arch/s390/kernel/module.c b/arch/s390/kernel/module.c
--- a/arch/s390/kernel/module.c	Sun May 16 01:18:36 2004
+++ b/arch/s390/kernel/module.c	Sun May 16 01:18:36 2004
@@ -277,7 +277,8 @@
 			*(unsigned int *) loc = val;
 		else if (r_type == R_390_GOTENT ||
 			 r_type == R_390_GOTPLTENT)
-			*(unsigned int *) loc = val >> 1;
+			*(unsigned int *) loc =
+				(val + (Elf_Addr) me->module_core - loc) >> 1;
 		else if (r_type == R_390_GOT64 ||
 			 r_type == R_390_GOTPLT64)
 			*(unsigned long *) loc = val;
diff -Nru a/arch/s390/kernel/process.c b/arch/s390/kernel/process.c
--- a/arch/s390/kernel/process.c	Sun May 16 01:18:36 2004
+++ b/arch/s390/kernel/process.c	Sun May 16 01:18:36 2004
@@ -385,12 +385,6 @@
 	dump->regs.per_info = current->thread.per_info;
 }
 
-/*
- * These bracket the sleeping functions..
- */
-#define first_sched	((unsigned long) scheduling_functions_start_here)
-#define last_sched	((unsigned long) scheduling_functions_end_here)
-
 unsigned long get_wchan(struct task_struct *p)
 {
 	unsigned long r14, r15, bc;
@@ -413,12 +407,10 @@
 #else
 		r14 = *(unsigned long *) (bc+112);
 #endif
-		if (r14 < first_sched || r14 >= last_sched)
+		if (!in_sched_functions(r14))
 			return r14;
 		bc = (*(unsigned long *) bc) & PSW_ADDR_INSN;
 	} while (count++ < 16);
 	return 0;
 }
-#undef last_sched
-#undef first_sched
 
diff -Nru a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c
--- a/arch/s390/kernel/smp.c	Sun May 16 01:18:33 2004
+++ b/arch/s390/kernel/smp.c	Sun May 16 01:18:33 2004
@@ -31,6 +31,7 @@
 #include <linux/delay.h>
 #include <linux/cache.h>
 #include <linux/interrupt.h>
+#include <linux/cpu.h>
 
 #include <asm/sigp.h>
 #include <asm/pgalloc.h>
@@ -127,6 +128,9 @@
 	if (cpus <= 0)
 		return 0;
 
+	/* Can deadlock when called with interrupts disabled */
+	WARN_ON(irqs_disabled());
+
 	data.func = func;
 	data.info = info;
 	atomic_set(&data.started, 0);
@@ -647,6 +651,24 @@
 {
         return 0;
 }
+
+static DEFINE_PER_CPU(struct cpu, cpu_devices);
+
+static int __init topology_init(void)
+{
+	int cpu;
+	int ret;
+
+	for_each_cpu(cpu) {
+		ret = register_cpu(&per_cpu(cpu_devices, cpu), cpu, NULL);
+		if (ret)
+			printk(KERN_WARNING "topology_init: register_cpu %d "
+			       "failed (%d)\n", cpu, ret);
+	}
+	return 0;
+}
+
+subsys_initcall(topology_init);
 
 EXPORT_SYMBOL(cpu_possible_map);
 EXPORT_SYMBOL(lowcore_ptr);
diff -Nru a/arch/s390/kernel/sys_s390.c b/arch/s390/kernel/sys_s390.c
--- a/arch/s390/kernel/sys_s390.c	Sun May 16 01:18:34 2004
+++ b/arch/s390/kernel/sys_s390.c	Sun May 16 01:18:34 2004
@@ -138,38 +138,6 @@
 	return sys_select(a.n, a.inp, a.outp, a.exp, a.tvp);
 
 }
-#else /* CONFIG_ARCH_S390X */
-unsigned long
-arch_get_unmapped_area(struct file *filp, unsigned long addr,
-		       unsigned long len, unsigned long pgoff,
-		       unsigned long flags)
-{
-	struct vm_area_struct *vma;
-	unsigned long end;
-
-	if (test_thread_flag(TIF_31BIT)) { 
-		if (!addr) 
-			addr = 0x40000000; 
-		end = 0x80000000;		
-	} else { 
-		if (!addr) 
-			addr = TASK_SIZE / 2;
-		end = TASK_SIZE; 
-	}
-
-	if (len > end)
-		return -ENOMEM;
-	addr = PAGE_ALIGN(addr);
-
-	for (vma = find_vma(current->mm, addr); ; vma = vma->vm_next) {
-		/* At this point:  (!vma || addr < vma->vm_end). */
-		if (end - len < addr)
-			return -ENOMEM;
-		if (!vma || addr + len <= vma->vm_start)
-			return addr;
-		addr = vma->vm_end;
-	}
-}
 #endif /* CONFIG_ARCH_S390X */
 
 /*
diff -Nru a/arch/s390/kernel/syscalls.S b/arch/s390/kernel/syscalls.S
--- a/arch/s390/kernel/syscalls.S	Sun May 16 01:18:33 2004
+++ b/arch/s390/kernel/syscalls.S	Sun May 16 01:18:33 2004
@@ -150,11 +150,11 @@
 SYSCALL(sys_setfsgid16,sys_ni_syscall,sys32_setfsgid16_wrapper)	/* old setfsgid16 syscall */
 SYSCALL(sys_llseek,sys_llseek,sys32_llseek_wrapper)		/* 140 */
 SYSCALL(sys_getdents,sys_getdents,sys32_getdents_wrapper)
-SYSCALL(sys_select,sys_select,sys32_select_wrapper)
+SYSCALL(sys_select,sys_select,compat_sys_select_wrapper)
 SYSCALL(sys_flock,sys_flock,sys32_flock_wrapper)
 SYSCALL(sys_msync,sys_msync,sys32_msync_wrapper)
-SYSCALL(sys_readv,sys_readv,sys32_readv_wrapper)		/* 145 */
-SYSCALL(sys_writev,sys_writev,sys32_writev_wrapper)
+SYSCALL(sys_readv,sys_readv,compat_sys_readv_wrapper)		/* 145 */
+SYSCALL(sys_writev,sys_writev,compat_sys_writev_wrapper)
 SYSCALL(sys_getsid,sys_getsid,sys32_getsid_wrapper)
 SYSCALL(sys_fdatasync,sys_fdatasync,sys32_fdatasync_wrapper)
 SYSCALL(sys_sysctl,sys_sysctl,sys32_sysctl_wrapper)
@@ -177,7 +177,7 @@
 NI_SYSCALL							/* for vm86 */
 NI_SYSCALL							/* old sys_query_module */
 SYSCALL(sys_poll,sys_poll,sys32_poll_wrapper)
-SYSCALL(sys_nfsservctl,sys_nfsservctl,sys32_nfsservctl_wrapper)
+SYSCALL(sys_nfsservctl,sys_nfsservctl,compat_sys_nfsservctl_wrapper)
 SYSCALL(sys_setresgid16,sys_ni_syscall,sys32_setresgid16_wrapper)	/* 170 old setresgid16 syscall */
 SYSCALL(sys_getresgid16,sys_ni_syscall,sys32_getresgid16_wrapper)	/* old getresgid16 syscall */
 SYSCALL(sys_prctl,sys_prctl,sys32_prctl_wrapper)
diff -Nru a/arch/s390/kernel/time.c b/arch/s390/kernel/time.c
--- a/arch/s390/kernel/time.c	Sun May 16 01:18:33 2004
+++ b/arch/s390/kernel/time.c	Sun May 16 01:18:33 2004
@@ -468,7 +468,7 @@
 	__u64 tmp;
 	__u32 ticks;
 
-	if (!cpu_isset(smp_processor_id(), idle_cpu_mask))
+	if (!cpu_isset(smp_processor_id(), nohz_cpu_mask))
 		return;
 
 	/* Calculate how many ticks have passed */
@@ -511,7 +511,7 @@
 			do_timer(regs);
 #endif
 	}
-	cpu_clear(smp_processor_id(), idle_cpu_mask);
+	cpu_clear(smp_processor_id(), nohz_cpu_mask);
 }
 
 /*
@@ -536,7 +536,7 @@
 	 * This cpu is going really idle. Set up the clock comparator
 	 * for the next event.
 	 */
-	cpu_set(smp_processor_id(), idle_cpu_mask);
+	cpu_set(smp_processor_id(), nohz_cpu_mask);
 	timer = (__u64) (next_timer_interrupt() - jiffies) + jiffies_64;
 	timer = jiffies_timer_cc + timer * CLK_TICKS_PER_JIFFY;
 	asm volatile ("SCKC %0" : : "m" (timer));
diff -Nru a/arch/s390/mm/init.c b/arch/s390/mm/init.c
--- a/arch/s390/mm/init.c	Sun May 16 01:18:36 2004
+++ b/arch/s390/mm/init.c	Sun May 16 01:18:36 2004
@@ -69,7 +69,7 @@
                 else if (PageSwapCache(mem_map+i))
                         cached++;
                 else if (page_count(mem_map+i))
-                        shared += atomic_read(&mem_map[i].count) - 1;
+                        shared += page_count(mem_map+i) - 1;
         }
         printk("%d pages of RAM\n",total);
         printk("%d reserved pages\n",reserved);
diff -Nru a/arch/sh/kernel/process.c b/arch/sh/kernel/process.c
--- a/arch/sh/kernel/process.c	Sun May 16 01:18:36 2004
+++ b/arch/sh/kernel/process.c	Sun May 16 01:18:36 2004
@@ -461,12 +461,6 @@
 	return error;
 }
 
-/*
- * These bracket the sleeping functions..
- */
-#define first_sched	((unsigned long) scheduling_functions_start_here)
-#define last_sched	((unsigned long) scheduling_functions_end_here)
-
 unsigned long get_wchan(struct task_struct *p)
 {
 	unsigned long schedule_frame;
@@ -479,7 +473,7 @@
 	 * The same comment as on the Alpha applies here, too ...
 	 */
 	pc = thread_saved_pc(p);
-	if (pc >= first_sched && pc < last_sched) {
+	if (in_sched_functions(pc)) {
 		schedule_frame = ((unsigned long *)(long)p->thread.sp)[1];
 		return (unsigned long)((unsigned long *)schedule_frame)[1];
 	}
diff -Nru a/arch/sh/kernel/smp.c b/arch/sh/kernel/smp.c
--- a/arch/sh/kernel/smp.c	Sun May 16 01:18:35 2004
+++ b/arch/sh/kernel/smp.c	Sun May 16 01:18:35 2004
@@ -181,6 +181,9 @@
 	if (nr_cpus < 2)
 		return 0;
 
+	/* Can deadlock when called with interrupts disabled */
+	WARN_ON(irqs_disabled());
+
 	spin_lock(&smp_fn_call.lock);
 
 	atomic_set(&smp_fn_call.finished, 0);
diff -Nru a/arch/sh/mm/hugetlbpage.c b/arch/sh/mm/hugetlbpage.c
--- a/arch/sh/mm/hugetlbpage.c	Sun May 16 01:18:35 2004
+++ b/arch/sh/mm/hugetlbpage.c	Sun May 16 01:18:35 2004
@@ -248,8 +248,9 @@
 				goto out;
 			}
 			ret = add_to_page_cache(page, mapping, idx, GFP_ATOMIC);
-			unlock_page(page);
-			if (ret) {
+			if (! ret) {
+				unlock_page(page);
+			} else {
 				hugetlb_put_quota(mapping);
 				free_huge_page(page);
 				goto out;
diff -Nru a/arch/sparc/kernel/process.c b/arch/sparc/kernel/process.c
--- a/arch/sparc/kernel/process.c	Sun May 16 01:18:33 2004
+++ b/arch/sparc/kernel/process.c	Sun May 16 01:18:33 2004
@@ -721,8 +721,7 @@
 			break;
 		rw = (struct reg_window *) fp;
 		pc = rw->ins[7];
-		if (pc < ((unsigned long) scheduling_functions_start_here) ||
-                    pc >= ((unsigned long) scheduling_functions_end_here)) {
+		if (!in_sched_functions(pc)) {
 			ret = pc;
 			goto out;
 		}
diff -Nru a/arch/sparc/mm/init.c b/arch/sparc/mm/init.c
--- a/arch/sparc/mm/init.c	Sun May 16 01:18:34 2004
+++ b/arch/sparc/mm/init.c	Sun May 16 01:18:34 2004
@@ -388,7 +388,7 @@
 
 		ClearPageReserved(page);
 		set_bit(PG_highmem, &page->flags);
-		atomic_set(&page->count, 1);
+		set_page_count(page, 1);
 		__free_page(page);
 		totalhigh_pages++;
 	}
diff -Nru a/arch/sparc64/kernel/process.c b/arch/sparc64/kernel/process.c
--- a/arch/sparc64/kernel/process.c	Sun May 16 01:18:34 2004
+++ b/arch/sparc64/kernel/process.c	Sun May 16 01:18:34 2004
@@ -847,8 +847,7 @@
 			break;
 		rw = (struct reg_window *) fp;
 		pc = rw->ins[7];
-		if (pc < ((unsigned long) scheduling_functions_start_here) ||
-		    pc >= ((unsigned long) scheduling_functions_end_here)) {
+		if (!in_sched_functions(pc)) {
 			ret = pc;
 			goto out;
 		}
diff -Nru a/arch/sparc64/kernel/smp.c b/arch/sparc64/kernel/smp.c
--- a/arch/sparc64/kernel/smp.c	Sun May 16 01:18:33 2004
+++ b/arch/sparc64/kernel/smp.c	Sun May 16 01:18:33 2004
@@ -598,6 +598,9 @@
 	if (!cpus)
 		return 0;
 
+	/* Can deadlock when called with interrupts disabled */
+	WARN_ON(irqs_disabled());
+
 	data.func = func;
 	data.info = info;
 	atomic_set(&data.finished, 0);
diff -Nru a/arch/sparc64/kernel/sys_sparc32.c b/arch/sparc64/kernel/sys_sparc32.c
--- a/arch/sparc64/kernel/sys_sparc32.c	Sun May 16 01:18:35 2004
+++ b/arch/sparc64/kernel/sys_sparc32.c	Sun May 16 01:18:35 2004
@@ -832,182 +832,6 @@
 		return sys_ftruncate(fd, (high << 32) | low);
 }
 
-typedef ssize_t (*io_fn_t)(struct file *, char *, size_t, loff_t *);
-typedef ssize_t (*iov_fn_t)(struct file *, const struct iovec *, unsigned long, loff_t *);
-
-static long do_readv_writev32(int type, struct file *file,
-			      const struct compat_iovec *vector, u32 count)
-{
-	compat_ssize_t tot_len;
-	struct iovec iovstack[UIO_FASTIOV];
-	struct iovec *iov=iovstack, *ivp;
-	struct inode *inode;
-	long retval, i;
-	io_fn_t fn;
-	iov_fn_t fnv;
-
-	/*
-	 * SuS says "The readv() function *may* fail if the iovcnt argument
-	 * was less than or equal to 0, or greater than {IOV_MAX}.  Linux has
-	 * traditionally returned zero for zero segments, so...
-	 */
-	retval = 0;
-	if (count == 0)
-		goto out;
-
-	/* First get the "struct iovec" from user memory and
-	 * verify all the pointers
-	 */
-	retval = -EINVAL;
-	if (count > UIO_MAXIOV)
-		goto out;
-	if (!file->f_op)
-		goto out;
-	if (count > UIO_FASTIOV) {
-		retval = -ENOMEM;
-		iov = kmalloc(count*sizeof(struct iovec), GFP_KERNEL);
-		if (!iov)
-			goto out;
-	}
-	retval = -EFAULT;
-	if (verify_area(VERIFY_READ, vector, sizeof(struct compat_iovec)*count))
-		goto out;
-
-	/*
-	 * Single unix specification:
-	 * We should -EINVAL if an element length is not >= 0 and fitting an
-	 * ssize_t.  The total length is fitting an ssize_t
-	 *
-	 * Be careful here because iov_len is a size_t not an ssize_t
-	 */
-	tot_len = 0;
-	i = count;
-	ivp = iov;
-	retval = -EINVAL;
-	while(i > 0) {
-		compat_ssize_t tmp = tot_len;
-		compat_ssize_t len;
-		u32 buf;
-
-		if (__get_user(len, &vector->iov_len) ||
-		    __get_user(buf, &vector->iov_base)) {
-			retval = -EFAULT;
-			goto out;
-		}
-		if (len < 0)	/* size_t not fitting an ssize_t32 .. */
-			goto out;
-		tot_len += len;
-		if (tot_len < tmp) /* maths overflow on the compat_ssize_t */
-			goto out;
-		ivp->iov_base = (void *)A(buf);
-		ivp->iov_len = (__kernel_size_t) len;
-		vector++;
-		ivp++;
-		i--;
-	}
-	if (tot_len == 0) {
-		retval = 0;
-		goto out;
-	}
-
-	inode = file->f_dentry->d_inode;
-	/* VERIFY_WRITE actually means a read, as we write to user space */
-	retval = locks_verify_area((type == READ
-				    ? FLOCK_VERIFY_READ : FLOCK_VERIFY_WRITE),
-				   inode, file, file->f_pos, tot_len);
-	if (retval)
-		goto out;
-
-	if (type == READ) {
-		fn = file->f_op->read;
-		fnv = file->f_op->readv;
-	} else {
-		fn = (io_fn_t)file->f_op->write;
-		fnv = file->f_op->writev;
-	}
-	if (fnv) {
-		retval = fnv(file, iov, count, &file->f_pos);
-		goto out;
-	}
-
-	/* Do it by hand, with file-ops */
-	ivp = iov;
-	while (count > 0) {
-		void * base;
-		int len, nr;
-
-		base = ivp->iov_base;
-		len = ivp->iov_len;
-		ivp++;
-		count--;
-
-		nr = fn(file, base, len, &file->f_pos);
-
-		if (nr < 0) {
-			if (!retval)
-				retval = nr;
-			break;
-		}
-		retval += nr;
-		if (nr != len)
-			break;
-	}
-out:
-	if (iov != iovstack)
-		kfree(iov);
-	if ((retval + (type == READ)) > 0)
-		dnotify_parent(file->f_dentry,
-			(type == READ) ? DN_ACCESS : DN_MODIFY);
-
-	return retval;
-}
-
-asmlinkage long sys32_readv(int fd, struct compat_iovec *vector, u32 count)
-{
-	struct file *file;
-	int ret;
-
-	file = fget(fd);
-	if(!file)
-		return -EBADF;
-
-	ret = -EBADF;
-	if (!(file->f_mode & FMODE_READ))
-		goto out;
-	ret = -EINVAL;
-	if (!file->f_op || (!file->f_op->readv && !file->f_op->read))
-		goto out;
-
-	ret = do_readv_writev32(READ, file, vector, count);
-
-out:
-	fput(file);
-	return ret;
-}
-
-asmlinkage long sys32_writev(int fd, struct compat_iovec *vector, u32 count)
-{
-	struct file *file;
-	int ret;
-
-	file = fget(fd);
-	if(!file)
-		return -EBADF;
-
-	ret = -EBADF;
-	if (!(file->f_mode & FMODE_WRITE))
-		goto out;
-	ret = -EINVAL;
-	if (!file->f_op || (!file->f_op->writev && !file->f_op->write))
-		goto out;
-
-	ret = do_readv_writev32(WRITE, file, vector, count);
-
-out:
-	fput(file);
-	return ret;
-}
-
 /* readdir & getdents */
 
 #define NAME_OFFSET(de) ((int) ((de)->d_name - (char *) (de)))
@@ -1140,158 +964,6 @@
 
 /* end of readdir & getdents */
 
-/*
- * Ooo, nasty.  We need here to frob 32-bit unsigned longs to
- * 64-bit unsigned longs.
- */
-
-static int get_fd_set32(unsigned long n, unsigned long *fdset, u32 *ufdset)
-{
-	if (ufdset) {
-		unsigned long odd;
-
-		if (verify_area(VERIFY_WRITE, ufdset, n*sizeof(u32)))
-			return -EFAULT;
-
-		odd = n & 1UL;
-		n &= ~1UL;
-		while (n) {
-			unsigned long h, l;
-			__get_user(l, ufdset);
-			__get_user(h, ufdset+1);
-			ufdset += 2;
-			*fdset++ = h << 32 | l;
-			n -= 2;
-		}
-		if (odd)
-			__get_user(*fdset, ufdset);
-	} else {
-		/* Tricky, must clear full unsigned long in the
-		 * kernel fdset at the end, this makes sure that
-		 * actually happens.
-		 */
-		memset(fdset, 0, ((n + 1) & ~1)*sizeof(u32));
-	}
-	return 0;
-}
-
-static void set_fd_set32(unsigned long n, u32 *ufdset, unsigned long *fdset)
-{
-	unsigned long odd;
-
-	if (!ufdset)
-		return;
-
-	odd = n & 1UL;
-	n &= ~1UL;
-	while (n) {
-		unsigned long h, l;
-		l = *fdset++;
-		h = l >> 32;
-		__put_user(l, ufdset);
-		__put_user(h, ufdset+1);
-		ufdset += 2;
-		n -= 2;
-	}
-	if (odd)
-		__put_user(*fdset, ufdset);
-}
-
-#define MAX_SELECT_SECONDS \
-	((unsigned long) (MAX_SCHEDULE_TIMEOUT / HZ)-1)
-
-asmlinkage int sys32_select(int n, u32 *inp, u32 *outp, u32 *exp, u32 tvp_x)
-{
-	fd_set_bits fds;
-	struct compat_timeval *tvp = (struct compat_timeval *)AA(tvp_x);
-	char *bits;
-	unsigned long nn;
-	long timeout;
-	int ret, size;
-
-	timeout = MAX_SCHEDULE_TIMEOUT;
-	if (tvp) {
-		time_t sec, usec;
-
-		if ((ret = verify_area(VERIFY_READ, tvp, sizeof(*tvp)))
-		    || (ret = __get_user(sec, &tvp->tv_sec))
-		    || (ret = __get_user(usec, &tvp->tv_usec)))
-			goto out_nofds;
-
-		ret = -EINVAL;
-		if(sec < 0 || usec < 0)
-			goto out_nofds;
-
-		if ((unsigned long) sec < MAX_SELECT_SECONDS) {
-			timeout = (usec + 1000000/HZ - 1) / (1000000/HZ);
-			timeout += sec * (unsigned long) HZ;
-		}
-	}
-
-	ret = -EINVAL;
-	if (n < 0)
-		goto out_nofds;
-	if (n > current->files->max_fdset)
-		n = current->files->max_fdset;
-
-	/*
-	 * We need 6 bitmaps (in/out/ex for both incoming and outgoing),
-	 * since we used fdset we need to allocate memory in units of
-	 * long-words. 
-	 */
-	ret = -ENOMEM;
-	size = FDS_BYTES(n);
-	bits = kmalloc(6 * size, GFP_KERNEL);
-	if (!bits)
-		goto out_nofds;
-	fds.in      = (unsigned long *)  bits;
-	fds.out     = (unsigned long *) (bits +   size);
-	fds.ex      = (unsigned long *) (bits + 2*size);
-	fds.res_in  = (unsigned long *) (bits + 3*size);
-	fds.res_out = (unsigned long *) (bits + 4*size);
-	fds.res_ex  = (unsigned long *) (bits + 5*size);
-
-	nn = (n + 8*sizeof(u32) - 1) / (8*sizeof(u32));
-	if ((ret = get_fd_set32(nn, fds.in, inp)) ||
-	    (ret = get_fd_set32(nn, fds.out, outp)) ||
-	    (ret = get_fd_set32(nn, fds.ex, exp)))
-		goto out;
-	zero_fd_set(n, fds.res_in);
-	zero_fd_set(n, fds.res_out);
-	zero_fd_set(n, fds.res_ex);
-
-	ret = do_select(n, &fds, &timeout);
-
-	if (tvp && !(current->personality & STICKY_TIMEOUTS)) {
-		time_t sec = 0, usec = 0;
-		if (timeout) {
-			sec = timeout / HZ;
-			usec = timeout % HZ;
-			usec *= (1000000/HZ);
-		}
-		put_user(sec, &tvp->tv_sec);
-		put_user(usec, &tvp->tv_usec);
-	}
-
-	if (ret < 0)
-		goto out;
-	if (!ret) {
-		ret = -ERESTARTNOHAND;
-		if (signal_pending(current))
-			goto out;
-		ret = 0;
-	}
-
-	set_fd_set32(nn, inp, fds.res_in);
-	set_fd_set32(nn, outp, fds.res_out);
-	set_fd_set32(nn, exp, fds.res_ex);
-
-out:
-	kfree(bits);
-out_nofds:
-	return ret;
-}
-
 int cp_compat_stat(struct kstat *stat, struct compat_stat *statbuf)
 {
 	int err;
@@ -1562,8 +1234,6 @@
 	return ret;
 }
 
-extern void check_pending(int signum);
-
 asmlinkage int sys32_sigaction (int sig, struct old_sigaction32 *act, struct old_sigaction32 *oact)
 {
         struct k_sigaction new_ka, old_ka;
@@ -1659,193 +1329,6 @@
         return ret;
 }
 
-
-/*
- * count32() counts the number of arguments/envelopes
- */
-static int count32(u32 * argv, int max)
-{
-	int i = 0;
-
-	if (argv != NULL) {
-		for (;;) {
-			u32 p; int error;
-
-			error = get_user(p,argv);
-			if (error)
-				return error;
-			if (!p)
-				break;
-			argv++;
-			if (++i > max)
-				return -E2BIG;
-		}
-	}
-	return i;
-}
-
-/*
- * 'copy_string32()' copies argument/envelope strings from user
- * memory to free pages in kernel mem. These are in a format ready
- * to be put directly into the top of new user memory.
- */
-static int copy_strings32(int argc, u32 * argv, struct linux_binprm *bprm)
-{
-	while (argc-- > 0) {
-		u32 str;
-		int len;
-		unsigned long pos;
-
-		if (get_user(str, argv + argc) ||
-		    !str ||
-		    !(len = strnlen_user((char *)A(str), bprm->p)))
-			return -EFAULT;
-
-		if (bprm->p < len)
-			return -E2BIG;
-
-		bprm->p -= len;
-
-		pos = bprm->p;
-		while (len) {
-			char *kaddr;
-			struct page *page;
-			int offset, bytes_to_copy, new, err;
-
-			offset = pos % PAGE_SIZE;
-			page = bprm->page[pos / PAGE_SIZE];
-			new = 0;
-			if (!page) {
-				page = alloc_page(GFP_USER);
-				bprm->page[pos / PAGE_SIZE] = page;
-				if (!page)
-					return -ENOMEM;
-				new = 1;
-			}
-			kaddr = kmap(page);
-
-			if (new && offset)
-				memset(kaddr, 0, offset);
-			bytes_to_copy = PAGE_SIZE - offset;
-			if (bytes_to_copy > len) {
-				bytes_to_copy = len;
-				if (new)
-					memset(kaddr+offset+len, 0,
-					       PAGE_SIZE-offset-len);
-			}
-
-			err = copy_from_user(kaddr + offset, (char *)A(str),
-					     bytes_to_copy);
-			kunmap(page);
-
-			if (err)
-				return -EFAULT;
-
-			pos += bytes_to_copy;
-			str += bytes_to_copy;
-			len -= bytes_to_copy;
-		}
-	}
-	return 0;
-}
-
-/*
- * sys32_execve() executes a new program.
- */
-static inline int 
-do_execve32(char * filename, u32 * argv, u32 * envp, struct pt_regs * regs)
-{
-	struct linux_binprm bprm;
-	struct file * file;
-	int retval;
-	int i;
-
-	sched_balance_exec();
-
-	file = open_exec(filename);
-
-	retval = PTR_ERR(file);
-	if (IS_ERR(file))
-		return retval;
-
-	bprm.p = PAGE_SIZE*MAX_ARG_PAGES-sizeof(void *);
-	memset(bprm.page, 0, MAX_ARG_PAGES * sizeof(bprm.page[0]));
-
-	bprm.file = file;
-	bprm.filename = filename;
-	bprm.interp = filename;
-	bprm.sh_bang = 0;
-	bprm.loader = 0;
-	bprm.exec = 0;
-	bprm.security = NULL;
-	bprm.mm = mm_alloc();
-	retval = -ENOMEM;
-	if (!bprm.mm) 
-		goto out_file;
-
-	retval = init_new_context(current, bprm.mm);
-	if (retval < 0)
-		goto out_mm;
-
-	bprm.argc = count32(argv, bprm.p / sizeof(u32));
-	if ((retval = bprm.argc) < 0)
-		goto out_mm;
-
-	bprm.envc = count32(envp, bprm.p / sizeof(u32));
-	if ((retval = bprm.envc) < 0)
-		goto out_mm;
-
-	retval = security_bprm_alloc(&bprm);
-	if (retval)
-		goto out;
-
-	retval = prepare_binprm(&bprm);
-	if (retval < 0)
-		goto out;
-	
-	retval = copy_strings_kernel(1, &bprm.filename, &bprm);
-	if (retval < 0)
-		goto out;
-
-	bprm.exec = bprm.p;
-	retval = copy_strings32(bprm.envc, envp, &bprm);
-	if (retval < 0)
-		goto out;
-
-	retval = copy_strings32(bprm.argc, argv, &bprm);
-	if (retval < 0)
-		goto out;
-
-	retval = search_binary_handler(&bprm, regs);
-	if (retval >= 0) {
-		/* execve success */
-		security_bprm_free(&bprm);
-		return retval;
-	}
-
-out:
-	/* Something went wrong, return the inode and free the argument pages*/
-	for (i = 0 ; i < MAX_ARG_PAGES ; i++) {
-		struct page * page = bprm.page[i];
-		if (page)
-			__free_page(page);
-	}
-
-	if (bprm.security)
-		security_bprm_free(&bprm);
-
-out_mm:
-	if (bprm.mm)
-		mmdrop(bprm.mm);
-
-out_file:
-	if (bprm.file) {
-		allow_write_access(bprm.file);
-		fput(bprm.file);
-	}
-	return retval;
-}
-
 /*
  * sparc32_execve() executes a new program after the asm stub has set
  * things up for us.  This should basically do what I want it to.
@@ -1865,9 +1348,9 @@
 	error = PTR_ERR(filename);
         if(IS_ERR(filename))
                 goto out;
-        error = do_execve32(filename,
-        	(u32 *)AA((u32)regs->u_regs[base + UREG_I1]),
-        	(u32 *)AA((u32)regs->u_regs[base + UREG_I2]), regs);
+        error = compat_do_execve(filename,
+        	compat_ptr((u32)regs->u_regs[base + UREG_I1]),
+        	compat_ptr((u32)regs->u_regs[base + UREG_I2]), regs);
         putname(filename);
 
 	if(!error) {
@@ -1908,232 +1391,6 @@
 }
 
 #endif  /* CONFIG_MODULES */
-
-#if defined(CONFIG_NFSD) || defined(CONFIG_NFSD_MODULE)
-/* Stuff for NFS server syscalls... */
-struct nfsctl_svc32 {
-	u16			svc32_port;
-	s32			svc32_nthreads;
-};
-
-struct nfsctl_client32 {
-	s8			cl32_ident[NFSCLNT_IDMAX+1];
-	s32			cl32_naddr;
-	struct in_addr		cl32_addrlist[NFSCLNT_ADDRMAX];
-	s32			cl32_fhkeytype;
-	s32			cl32_fhkeylen;
-	u8			cl32_fhkey[NFSCLNT_KEYMAX];
-};
-
-struct nfsctl_export32 {
-	s8			ex32_client[NFSCLNT_IDMAX+1];
-	s8			ex32_path[NFS_MAXPATHLEN+1];
-	compat_dev_t	ex32_dev;
-	compat_ino_t	ex32_ino;
-	s32			ex32_flags;
-	compat_uid_t	ex32_anon_uid;
-	compat_gid_t	ex32_anon_gid;
-};
-
-struct nfsctl_fdparm32 {
-	struct sockaddr		gd32_addr;
-	s8			gd32_path[NFS_MAXPATHLEN+1];
-	s32			gd32_version;
-};
-
-struct nfsctl_fsparm32 {
-	struct sockaddr		gd32_addr;
-	s8			gd32_path[NFS_MAXPATHLEN+1];
-	s32			gd32_maxlen;
-};
-
-struct nfsctl_arg32 {
-	s32			ca32_version;	/* safeguard */
-	union {
-		struct nfsctl_svc32	u32_svc;
-		struct nfsctl_client32	u32_client;
-		struct nfsctl_export32	u32_export;
-		struct nfsctl_fdparm32	u32_getfd;
-		struct nfsctl_fsparm32	u32_getfs;
-	} u;
-#define ca32_svc	u.u32_svc
-#define ca32_client	u.u32_client
-#define ca32_export	u.u32_export
-#define ca32_getfd	u.u32_getfd
-#define ca32_getfs	u.u32_getfs
-};
-
-union nfsctl_res32 {
-	__u8			cr32_getfh[NFS_FHSIZE];
-	struct knfsd_fh		cr32_getfs;
-};
-
-static int nfs_svc32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32)
-{
-	int err;
-	
-	err = __get_user(karg->ca_version, &arg32->ca32_version);
-	err |= __get_user(karg->ca_svc.svc_port, &arg32->ca32_svc.svc32_port);
-	err |= __get_user(karg->ca_svc.svc_nthreads, &arg32->ca32_svc.svc32_nthreads);
-	return err;
-}
-
-static int nfs_clnt32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32)
-{
-	int err;
-	
-	err = __get_user(karg->ca_version, &arg32->ca32_version);
-	err |= copy_from_user(&karg->ca_client.cl_ident[0],
-			  &arg32->ca32_client.cl32_ident[0],
-			  NFSCLNT_IDMAX);
-	err |= __get_user(karg->ca_client.cl_naddr, &arg32->ca32_client.cl32_naddr);
-	err |= copy_from_user(&karg->ca_client.cl_addrlist[0],
-			  &arg32->ca32_client.cl32_addrlist[0],
-			  (sizeof(struct in_addr) * NFSCLNT_ADDRMAX));
-	err |= __get_user(karg->ca_client.cl_fhkeytype,
-		      &arg32->ca32_client.cl32_fhkeytype);
-	err |= __get_user(karg->ca_client.cl_fhkeylen,
-		      &arg32->ca32_client.cl32_fhkeylen);
-	err |= copy_from_user(&karg->ca_client.cl_fhkey[0],
-			  &arg32->ca32_client.cl32_fhkey[0],
-			  NFSCLNT_KEYMAX);
-	return (err ? -EFAULT : 0);
-}
-
-static int nfs_exp32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32)
-{
-	int err;
-	
-	err = __get_user(karg->ca_version, &arg32->ca32_version);
-	err |= copy_from_user(&karg->ca_export.ex_client[0],
-			  &arg32->ca32_export.ex32_client[0],
-			  NFSCLNT_IDMAX);
-	err |= copy_from_user(&karg->ca_export.ex_path[0],
-			  &arg32->ca32_export.ex32_path[0],
-			  NFS_MAXPATHLEN);
-	err |= __get_user(karg->ca_export.ex_dev,
-		      &arg32->ca32_export.ex32_dev);
-	err |= __get_user(karg->ca_export.ex_ino,
-		      &arg32->ca32_export.ex32_ino);
-	err |= __get_user(karg->ca_export.ex_flags,
-		      &arg32->ca32_export.ex32_flags);
-	err |= __get_user(karg->ca_export.ex_anon_uid,
-		      &arg32->ca32_export.ex32_anon_uid);
-	err |= __get_user(karg->ca_export.ex_anon_gid,
-		      &arg32->ca32_export.ex32_anon_gid);
-	karg->ca_export.ex_anon_uid = high2lowuid(karg->ca_export.ex_anon_uid);
-	karg->ca_export.ex_anon_gid = high2lowgid(karg->ca_export.ex_anon_gid);
-	return (err ? -EFAULT : 0);
-}
-
-static int nfs_getfd32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32)
-{
-	int err;
-	
-	err = __get_user(karg->ca_version, &arg32->ca32_version);
-	err |= copy_from_user(&karg->ca_getfd.gd_addr,
-			  &arg32->ca32_getfd.gd32_addr,
-			  (sizeof(struct sockaddr)));
-	err |= copy_from_user(&karg->ca_getfd.gd_path,
-			  &arg32->ca32_getfd.gd32_path,
-			  (NFS_MAXPATHLEN+1));
-	err |= __get_user(karg->ca_getfd.gd_version,
-		      &arg32->ca32_getfd.gd32_version);
-	return (err ? -EFAULT : 0);
-}
-
-static int nfs_getfs32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32)
-{
-	int err;
-	
-	err = __get_user(karg->ca_version, &arg32->ca32_version);
-	err |= copy_from_user(&karg->ca_getfs.gd_addr,
-			  &arg32->ca32_getfs.gd32_addr,
-			  (sizeof(struct sockaddr)));
-	err |= copy_from_user(&karg->ca_getfs.gd_path,
-			  &arg32->ca32_getfs.gd32_path,
-			  (NFS_MAXPATHLEN+1));
-	err |= __get_user(karg->ca_getfs.gd_maxlen,
-		      &arg32->ca32_getfs.gd32_maxlen);
-	return (err ? -EFAULT : 0);
-}
-
-/* This really doesn't need translations, we are only passing
- * back a union which contains opaque nfs file handle data.
- */
-static int nfs_getfh32_res_trans(union nfsctl_res *kres, union nfsctl_res32 *res32)
-{
-	return (copy_to_user(res32, kres, sizeof(*res32)) ? -EFAULT : 0);
-}
-
-int asmlinkage sys32_nfsservctl(int cmd, struct nfsctl_arg32 *arg32, union nfsctl_res32 *res32)
-{
-	struct nfsctl_arg *karg = NULL;
-	union nfsctl_res *kres = NULL;
-	mm_segment_t oldfs;
-	int err;
-
-	karg = kmalloc(sizeof(*karg), GFP_USER);
-	if(!karg)
-		return -ENOMEM;
-	if(res32) {
-		kres = kmalloc(sizeof(*kres), GFP_USER);
-		if(!kres) {
-			kfree(karg);
-			return -ENOMEM;
-		}
-	}
-	switch(cmd) {
-	case NFSCTL_SVC:
-		err = nfs_svc32_trans(karg, arg32);
-		break;
-	case NFSCTL_ADDCLIENT:
-		err = nfs_clnt32_trans(karg, arg32);
-		break;
-	case NFSCTL_DELCLIENT:
-		err = nfs_clnt32_trans(karg, arg32);
-		break;
-	case NFSCTL_EXPORT:
-	case NFSCTL_UNEXPORT:
-		err = nfs_exp32_trans(karg, arg32);
-		break;
-	case NFSCTL_GETFD:
-		err = nfs_getfd32_trans(karg, arg32);
-		break;
-	case NFSCTL_GETFS:
-		err = nfs_getfs32_trans(karg, arg32);
-		break;
-	default:
-		err = -EINVAL;
-		break;
-	}
-	if(err)
-		goto done;
-	oldfs = get_fs();
-	set_fs(KERNEL_DS);
-	err = sys_nfsservctl(cmd, karg, kres);
-	set_fs(oldfs);
-
-	if (err)
-		goto done;
-
-	if((cmd == NFSCTL_GETFD) ||
-	   (cmd == NFSCTL_GETFS))
-		err = nfs_getfh32_res_trans(kres, res32);
-
-done:
-	if(karg)
-		kfree(karg);
-	if(kres)
-		kfree(kres);
-	return err;
-}
-#else /* !NFSD */
-int asmlinkage sys32_nfsservctl(int cmd, void *notused, void *notused2)
-{
-	return sys_ni_syscall();
-}
-#endif
 
 /* Translations due to time_t size differences.  Which affects all
    sorts of things, like timeval and itimerval.  */
diff -Nru a/arch/sparc64/kernel/sys_sunos32.c b/arch/sparc64/kernel/sys_sunos32.c
--- a/arch/sparc64/kernel/sys_sunos32.c	Sun May 16 01:18:35 2004
+++ b/arch/sparc64/kernel/sys_sunos32.c	Sun May 16 01:18:35 2004
@@ -528,18 +528,15 @@
 	return ret;
 }
 
-/* SunOS mount system call emulation */
-extern asmlinkage int
-sys32_select(int n, u32 inp, u32 outp, u32 exp, u32 tvp);
-
 asmlinkage int sunos_select(int width, u32 inp, u32 outp, u32 exp, u32 tvp_x)
 {
 	int ret;
 
 	/* SunOS binaries expect that select won't change the tvp contents */
-	ret = sys32_select (width, inp, outp, exp, tvp_x);
+	ret = compat_sys_select(width, compat_ptr(inp), compat_ptr(outp),
+				compat_ptr(exp), compat_ptr(tvp_x));
 	if (ret == -EINTR && tvp_x) {
-		struct compat_timeval *tvp = (struct compat_timeval *)A(tvp_x);
+		struct compat_timeval *tvp = compat_ptr(tvp_x);
 		time_t sec, usec;
 
 		__get_user(sec, &tvp->tv_sec);
@@ -1203,9 +1200,6 @@
 	return ret;
 }
 
-extern asmlinkage int sys32_readv(u32 fd, u32 vector, s32 count);
-extern asmlinkage int sys32_writev(u32 fd, u32 vector, s32 count);
-
 asmlinkage int sunos_read(unsigned int fd, u32 buf, u32 count)
 {
 	int ret;
@@ -1218,7 +1212,7 @@
 {
 	int ret;
 
-	ret = check_nonblock(sys32_readv(fd, vector, count), fd);
+	ret = check_nonblock(compat_sys_readv(fd, (void*)A(vector), count), fd);
 	return ret;
 }
 
@@ -1234,7 +1228,7 @@
 {
 	int ret;
 
-	ret = check_nonblock(sys32_writev(fd, vector, count), fd);
+	ret = check_nonblock(compat_sys_writev(fd, (void*)A(vector), count), fd);
 	return ret;
 }
 
diff -Nru a/arch/sparc64/kernel/systbls.S b/arch/sparc64/kernel/systbls.S
--- a/arch/sparc64/kernel/systbls.S	Sun May 16 01:18:34 2004
+++ b/arch/sparc64/kernel/systbls.S	Sun May 16 01:18:34 2004
@@ -37,13 +37,13 @@
 	.word sys_madvise, sys_vhangup, sys32_truncate64, sys_mincore, sys32_getgroups16
 /*80*/	.word sys32_setgroups16, sys_getpgrp, sys_setgroups, compat_sys_setitimer, sys32_ftruncate64
 	.word sys_swapon, compat_sys_getitimer, sys_setuid, sys_sethostname, sys_setgid
-/*90*/	.word sys_dup2, sys_setfsuid, compat_sys_fcntl, sys32_select, sys_setfsgid
+/*90*/	.word sys_dup2, sys_setfsuid, compat_sys_fcntl, compat_sys_select, sys_setfsgid
 	.word sys_fsync, sys_setpriority32, sys_nis_syscall, sys_nis_syscall, sys_nis_syscall
 /*100*/ .word sys_getpriority, sys32_rt_sigreturn, sys32_rt_sigaction, sys32_rt_sigprocmask, sys32_rt_sigpending
 	.word sys32_rt_sigtimedwait, sys32_rt_sigqueueinfo, sys32_rt_sigsuspend, sys_setresuid, sys_getresuid
 /*110*/	.word sys_setresgid, sys_getresgid, sys_setregid, sys_nis_syscall, sys_nis_syscall
 	.word sys_getgroups, sys32_gettimeofday, compat_sys_getrusage, sys_nis_syscall, sys_getcwd
-/*120*/	.word sys32_readv, sys32_writev, sys32_settimeofday, sys32_fchown16, sys_fchmod
+/*120*/	.word compat_sys_readv, compat_sys_writev, sys32_settimeofday, sys32_fchown16, sys_fchmod
 	.word sys_nis_syscall, sys32_setreuid16, sys32_setregid16, sys_rename, sys_truncate
 /*130*/	.word sys_ftruncate, sys_flock, sys_lstat64, sys_nis_syscall, sys_nis_syscall
 	.word sys_nis_syscall, sys_mkdir, sys_rmdir, sys32_utimes, sys_stat64
@@ -65,11 +65,11 @@
 	.word sys32_ipc, sys32_sigreturn, sys_clone, sys_nis_syscall, sys32_adjtimex
 /*220*/	.word compat_sys_sigprocmask, sys_ni_syscall, sys32_delete_module, sys_ni_syscall, sys_getpgid
 	.word sys32_bdflush, sys32_sysfs, sys_nis_syscall, sys32_setfsuid16, sys32_setfsgid16
-/*230*/	.word sys32_select, sys_time, sys_nis_syscall, sys_stime, compat_statfs64
+/*230*/	.word compat_sys_select, sys_time, sys_nis_syscall, sys_stime, compat_statfs64
 	.word compat_fstatfs64, sys_llseek, sys_mlock, sys_munlock, sys_mlockall
 /*240*/	.word sys_munlockall, sys_sched_setparam, sys_sched_getparam, sys_sched_setscheduler, sys_sched_getscheduler
 	.word sys_sched_yield, sys_sched_get_priority_max, sys_sched_get_priority_min, sys32_sched_rr_get_interval, compat_sys_nanosleep
-/*250*/	.word sys32_mremap, sys32_sysctl, sys_getsid, sys_fdatasync, sys32_nfsservctl
+/*250*/	.word sys32_mremap, sys32_sysctl, sys_getsid, sys_fdatasync, compat_sys_nfsservctl
 	.word sys_ni_syscall, compat_clock_settime, compat_clock_gettime, compat_clock_getres, compat_clock_nanosleep
 /*260*/	.word compat_sys_sched_getaffinity, compat_sys_sched_setaffinity, compat_timer_settime, compat_timer_gettime, sys_timer_getoverrun
 	.word sys_timer_delete, sys32_timer_create, sys_ni_syscall, compat_sys_io_setup, sys_io_destroy
diff -Nru a/arch/sparc64/mm/hugetlbpage.c b/arch/sparc64/mm/hugetlbpage.c
--- a/arch/sparc64/mm/hugetlbpage.c	Sun May 16 01:18:35 2004
+++ b/arch/sparc64/mm/hugetlbpage.c	Sun May 16 01:18:35 2004
@@ -245,8 +245,9 @@
 				goto out;
 			}
 			ret = add_to_page_cache(page, mapping, idx, GFP_ATOMIC);
-			unlock_page(page);
-			if (ret) {
+			if (! ret) {
+				unlock_page(page);
+			} else {
 				hugetlb_put_quota(mapping);
 				free_huge_page(page);
 				goto out;
diff -Nru a/arch/um/drivers/harddog_kern.c b/arch/um/drivers/harddog_kern.c
--- a/arch/um/drivers/harddog_kern.c	Sun May 16 01:18:35 2004
+++ b/arch/um/drivers/harddog_kern.c	Sun May 16 01:18:35 2004
@@ -71,7 +71,7 @@
 	if(timer_alive)
 		return -EBUSY;
 #ifdef CONFIG_HARDDOG_NOWAYOUT	 
-	MOD_INC_USE_COUNT;
+	__module_get(THIS_MODULE);
 #endif
 
 #ifdef CONFIG_MCONSOLE
diff -Nru a/arch/um/drivers/net_kern.c b/arch/um/drivers/net_kern.c
--- a/arch/um/drivers/net_kern.c	Sun May 16 01:18:35 2004
+++ b/arch/um/drivers/net_kern.c	Sun May 16 01:18:35 2004
@@ -124,7 +124,6 @@
 	spin_lock(&opened_lock);
 	list_add(&lp->list, &opened);
 	spin_unlock(&opened_lock);
-	MOD_INC_USE_COUNT;
  out:
 	spin_unlock(&lp->lock);
 	return(err);
@@ -144,7 +143,6 @@
 	list_del(&lp->list);
 	spin_unlock(&opened_lock);
 
-	MOD_DEC_USE_COUNT;
 	spin_unlock(&lp->lock);
 	return 0;
 }
diff -Nru a/arch/um/kernel/mem.c b/arch/um/kernel/mem.c
--- a/arch/um/kernel/mem.c	Sun May 16 01:18:34 2004
+++ b/arch/um/kernel/mem.c	Sun May 16 01:18:34 2004
@@ -294,7 +294,7 @@
 			page = &map[i];
 			ClearPageReserved(page);
 			set_bit(PG_highmem, &page->flags);
-			atomic_set(&page->count, 1);
+			set_page_count(page, 1);
 			__free_page(page);
 		}
 		phys += cur;
diff -Nru a/arch/um/kernel/smp.c b/arch/um/kernel/smp.c
--- a/arch/um/kernel/smp.c	Sun May 16 01:18:34 2004
+++ b/arch/um/kernel/smp.c	Sun May 16 01:18:34 2004
@@ -266,6 +266,9 @@
 	if (!cpus)
 		return 0;
 
+	/* Can deadlock when called with interrupts disabled */
+	WARN_ON(irqs_disabled());
+
 	spin_lock_bh(&call_lock);
 	atomic_set(&scf_started, 0);
 	atomic_set(&scf_finished, 0);
diff -Nru a/arch/v850/kernel/process.c b/arch/v850/kernel/process.c
--- a/arch/v850/kernel/process.c	Sun May 16 01:18:33 2004
+++ b/arch/v850/kernel/process.c	Sun May 16 01:18:33 2004
@@ -203,8 +203,8 @@
 /*
  * These bracket the sleeping functions..
  */
-#define first_sched	((unsigned long) scheduling_functions_start_here)
-#define last_sched	((unsigned long) scheduling_functions_end_here)
+#define first_sched	((unsigned long)__sched_text_start)
+#define last_sched	((unsigned long)__sched_text_end)
 
 unsigned long get_wchan (struct task_struct *p)
 {
diff -Nru a/arch/v850/kernel/vmlinux.lds.S b/arch/v850/kernel/vmlinux.lds.S
--- a/arch/v850/kernel/vmlinux.lds.S	Sun May 16 01:18:35 2004
+++ b/arch/v850/kernel/vmlinux.lds.S	Sun May 16 01:18:35 2004
@@ -12,6 +12,7 @@
  */
 
 #include <linux/config.h>
+#define VMLINUX_SYMBOL(_sym_) _##_sym_
 #include <asm-generic/vmlinux.lds.h>
 
 /* For most platforms, this will define useful things like RAM addr/size.  */
diff -Nru a/arch/x86_64/Kconfig b/arch/x86_64/Kconfig
--- a/arch/x86_64/Kconfig	Sun May 16 01:18:36 2004
+++ b/arch/x86_64/Kconfig	Sun May 16 01:18:36 2004
@@ -239,7 +239,16 @@
 	  Say Y here if you are feeling brave and building a kernel for a 
 	  desktop, embedded or real-time system.  Say N if you are unsure. 
 
-# someone write a better help text please.
+config SCHED_SMT
+	bool "SMT (Hyperthreading) scheduler support"
+	depends on SMP
+	default off
+	help
+	  SMT scheduler support improves the CPU scheduler's decision making
+	  when dealing with Intel Pentium 4 chips with HyperThreading at a
+	  cost of slightly increased overhead in some places. If unsure say
+	  N here.
+
 config K8_NUMA
        bool "K8 NUMA support"
        depends on SMP
@@ -247,9 +256,9 @@
 	  Enable NUMA (Non Unified Memory Architecture) support for
 	  AMD Opteron Multiprocessor systems. The kernel will try to allocate
 	  memory used by a CPU on the local memory controller of the CPU
-	  and in the future do more optimizations. This may improve performance 
-	  or it may not. Code is still experimental.
-	  Say N if unsure.
+	  and add some more NUMA awareness to the kernel.
+	  This code is recommended on all multiprocessor Opteron systems
+	  and normally doesn't hurt on others.
 
 config DISCONTIGMEM
        bool
diff -Nru a/arch/x86_64/boot/compressed/misc.c b/arch/x86_64/boot/compressed/misc.c
--- a/arch/x86_64/boot/compressed/misc.c	Sun May 16 01:18:34 2004
+++ b/arch/x86_64/boot/compressed/misc.c	Sun May 16 01:18:34 2004
@@ -92,7 +92,7 @@
 static void *malloc(int size);
 static void free(void *where);
  
-static void puts(const char *);
+static void putstr(const char *);
   
 extern int end;
 static long free_mem_ptr = (long)&end;
@@ -153,7 +153,7 @@
 		vidmem[i] = ' ';
 }
 
-static void puts(const char *s)
+static void putstr(const char *s)
 {
 	int x,y,pos;
 	char c;
@@ -270,9 +270,9 @@
 
 static void error(char *x)
 {
-	puts("\n\n");
-	puts(x);
-	puts("\n\n -- System halted");
+	putstr("\n\n");
+	putstr(x);
+	putstr("\n\n -- System halted");
 
 	while(1);
 }
@@ -346,9 +346,9 @@
 	else setup_output_buffer_if_we_run_high(mv);
 
 	makecrc();
-	puts(".\nDecompressing Linux...");
+	putstr(".\nDecompressing Linux...");
 	gunzip();
-	puts("done.\nBooting the kernel.\n");
+	putstr("done.\nBooting the kernel.\n");
 	if (high_loaded) close_output_buffer_if_we_run_high(mv);
 	return high_loaded;
 }
diff -Nru a/arch/x86_64/boot/setup.S b/arch/x86_64/boot/setup.S
--- a/arch/x86_64/boot/setup.S	Sun May 16 01:18:36 2004
+++ b/arch/x86_64/boot/setup.S	Sun May 16 01:18:36 2004
@@ -132,7 +132,7 @@
 ramdisk_size:	.long	0		# its size in bytes
 
 bootsect_kludge:
-		.word  bootsect_helper, SETUPSEG
+		.long	0		# obsolete
 
 heap_end_ptr:	.word	modelist+1024	# (Header version 0x0201 or later)
 					# space from here (exclusive) down to
@@ -759,87 +759,6 @@
 	outb	%al, $0x70
 	lret
 
-# This routine only gets called, if we get loaded by the simple
-# bootsect loader _and_ have a bzImage to load.
-# Because there is no place left in the 512 bytes of the boot sector,
-# we must emigrate to code space here.
-bootsect_helper:
-	cmpw	$0, %cs:bootsect_es
-	jnz	bootsect_second
-
-	movb	$0x20, %cs:type_of_loader
-	movw	%es, %ax
-	shrw	$4, %ax
-	movb	%ah, %cs:bootsect_src_base+2
-	movw	%es, %ax
-	movw	%ax, %cs:bootsect_es
-	subw	$SYSSEG, %ax
-	lret					# nothing else to do for now
-
-bootsect_second:
-	pushw	%cx
-	pushw	%si
-	pushw	%bx
-	testw	%bx, %bx			# 64K full?
-	jne	bootsect_ex
-
-	movw	$0x8000, %cx			# full 64K, INT15 moves words
-	pushw	%cs
-	popw	%es
-	movw	$bootsect_gdt, %si
-	movw	$0x8700, %ax
-	int	$0x15
-	jc	bootsect_panic			# this, if INT15 fails
-
-	movw	%cs:bootsect_es, %es		# we reset %es to always point
-	incb	%cs:bootsect_dst_base+2		# to 0x10000
-bootsect_ex:
-	movb	%cs:bootsect_dst_base+2, %ah
-	shlb	$4, %ah				# we now have the number of
-						# moved frames in %ax
-	xorb	%al, %al
-	popw	%bx
-	popw	%si
-	popw	%cx
-	lret
-
-bootsect_gdt:
-	.word	0, 0, 0, 0
-	.word	0, 0, 0, 0
-
-bootsect_src:
-	.word	0xffff
-
-bootsect_src_base:
-	.byte	0x00, 0x00, 0x01		# base = 0x010000
-	.byte	0x93				# typbyte
-	.word	0				# limit16,base24 =0
-
-bootsect_dst:
-	.word	0xffff
-
-bootsect_dst_base:
-	.byte	0x00, 0x00, 0x10		# base = 0x100000
-	.byte	0x93				# typbyte
-	.word	0				# limit16,base24 =0
-	.word	0, 0, 0, 0			# BIOS CS
-	.word	0, 0, 0, 0			# BIOS DS
-
-bootsect_es:
-	.word	0
-
-bootsect_panic:
-	pushw	%cs
-	popw	%ds
-	cld
-	leaw	bootsect_panic_mess, %si
-	call	prtstr
-	
-bootsect_panic_loop:
-	jmp	bootsect_panic_loop
-
-bootsect_panic_mess:
-	.string	"INT15 refuses to access high mem, giving up."
 
 # This routine checks that the keyboard command queue is empty
 # (after emptying the output buffers)
diff -Nru a/arch/x86_64/defconfig b/arch/x86_64/defconfig
--- a/arch/x86_64/defconfig	Sun May 16 01:18:35 2004
+++ b/arch/x86_64/defconfig	Sun May 16 01:18:35 2004
@@ -72,6 +72,7 @@
 CONFIG_MTRR=y
 CONFIG_SMP=y
 # CONFIG_PREEMPT is not set
+CONFIG_SCHED_SMT=y
 CONFIG_K8_NUMA=y
 CONFIG_DISCONTIGMEM=y
 CONFIG_NUMA=y
@@ -282,6 +283,7 @@
 # CONFIG_SCSI_SATA_SVW is not set
 CONFIG_SCSI_ATA_PIIX=y
 # CONFIG_SCSI_SATA_PROMISE is not set
+# CONFIG_SCSI_SATA_SX4 is not set
 # CONFIG_SCSI_SATA_SIL is not set
 # CONFIG_SCSI_SATA_SIS is not set
 CONFIG_SCSI_SATA_VIA=y
@@ -296,6 +298,7 @@
 # CONFIG_SCSI_IPS is not set
 # CONFIG_SCSI_INIA100 is not set
 # CONFIG_SCSI_SYM53C8XX_2 is not set
+# CONFIG_SCSI_IPR is not set
 # CONFIG_SCSI_QLOGIC_ISP is not set
 # CONFIG_SCSI_QLOGIC_FC is not set
 # CONFIG_SCSI_QLOGIC_1280 is not set
@@ -331,6 +334,7 @@
 #
 # I2O device support
 #
+# CONFIG_I2O is not set
 
 #
 # Networking support
@@ -363,8 +367,6 @@
 # CONFIG_INET6_ESP is not set
 # CONFIG_INET6_IPCOMP is not set
 # CONFIG_IPV6_TUNNEL is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 # CONFIG_NETFILTER is not set
 
 #
@@ -372,7 +374,9 @@
 #
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -393,16 +397,23 @@
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+CONFIG_NETPOLL=y
+# CONFIG_NETPOLL_RX is not set
+# CONFIG_NETPOLL_TRAP is not set
+CONFIG_NET_POLL_CONTROLLER=y
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
 
 #
 # ARCnet devices
 #
 # CONFIG_ARCNET is not set
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
 
 #
 # Ethernet (10 or 100Mbit)
@@ -421,6 +432,7 @@
 CONFIG_NET_PCI=y
 # CONFIG_PCNET32 is not set
 CONFIG_AMD8111_ETH=y
+# CONFIG_AMD8111E_NAPI is not set
 # CONFIG_ADAPTEC_STARFIRE is not set
 # CONFIG_B44 is not set
 CONFIG_FORCEDETH=y
@@ -436,7 +448,6 @@
 # CONFIG_8139TOO_TUNE_TWISTER is not set
 # CONFIG_8139TOO_8129 is not set
 # CONFIG_8139_OLD_RX_RESET is not set
-CONFIG_8139_RXBUF_IDX=2
 # CONFIG_SIS900 is not set
 # CONFIG_EPIC100 is not set
 # CONFIG_SUNDANCE is not set
@@ -453,7 +464,6 @@
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
 # CONFIG_R8169 is not set
-# CONFIG_SIS190 is not set
 # CONFIG_SK98LIN is not set
 CONFIG_TIGON3=y
 
@@ -461,47 +471,29 @@
 # Ethernet (10000 Mbit)
 #
 # CONFIG_IXGB is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
+# CONFIG_S2IO is not set
 
 #
 # Token Ring devices
 #
 # CONFIG_TR is not set
-# CONFIG_NET_FC is not set
-# CONFIG_SHAPER is not set
-CONFIG_NETCONSOLE=y
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-
-#
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
 
 #
-# IrDA (infrared) support
+# Wireless LAN (non-hamradio)
 #
-# CONFIG_IRDA is not set
+# CONFIG_NET_RADIO is not set
 
 #
-# Bluetooth support
+# Wan interfaces
 #
-# CONFIG_BT is not set
-CONFIG_NETPOLL=y
-# CONFIG_NETPOLL_RX is not set
-# CONFIG_NETPOLL_TRAP is not set
-CONFIG_NET_POLL_CONTROLLER=y
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NET_FC is not set
+# CONFIG_SHAPER is not set
+CONFIG_NETCONSOLE=y
 
 #
 # ISDN subsystem
@@ -685,7 +677,108 @@
 #
 # USB support
 #
-# CONFIG_USB is not set
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_EHCI_HCD=y
+# CONFIG_USB_EHCI_SPLIT_ISO is not set
+# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_UHCI_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_AUDIO is not set
+# CONFIG_USB_BLUETOOTH_TTY is not set
+# CONFIG_USB_MIDI is not set
+# CONFIG_USB_ACM is not set
+CONFIG_USB_PRINTER=y
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_HP8200e is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+
+#
+# USB Human Interface Devices (HID)
+#
+CONFIG_USB_HID=y
+CONFIG_USB_HIDINPUT=y
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_MTOUCH is not set
+# CONFIG_USB_EGALAX is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+# CONFIG_USB_HPUSBSCSI is not set
+
+#
+# USB Multimedia devices
+#
+# CONFIG_USB_DABUSB is not set
+
+#
+# Video4Linux support is needed for USB Multimedia device support
+#
+
+#
+# USB Network adaptors
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_TIGL is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGETSERVO is not set
+# CONFIG_USB_TEST is not set
 
 #
 # USB Gadget Support
@@ -696,6 +789,7 @@
 # Firmware Drivers
 #
 # CONFIG_EDD is not set
+# CONFIG_SMBIOS is not set
 
 #
 # File systems
@@ -714,6 +808,9 @@
 CONFIG_REISERFS_FS=y
 # CONFIG_REISERFS_CHECK is not set
 # CONFIG_REISERFS_PROC_INFO is not set
+CONFIG_REISERFS_FS_XATTR=y
+CONFIG_REISERFS_FS_POSIX_ACL=y
+# CONFIG_REISERFS_FS_SECURITY is not set
 # CONFIG_JFS_FS is not set
 CONFIG_FS_POSIX_ACL=y
 # CONFIG_XFS_FS is not set
@@ -787,7 +884,6 @@
 # CONFIG_CIFS is not set
 # CONFIG_NCP_FS is not set
 # CONFIG_CODA_FS is not set
-# CONFIG_INTERMEZZO_FS is not set
 # CONFIG_AFS_FS is not set
 
 #
@@ -833,3 +929,4 @@
 # Library routines
 #
 CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
diff -Nru a/arch/x86_64/ia32/ia32_signal.c b/arch/x86_64/ia32/ia32_signal.c
--- a/arch/x86_64/ia32/ia32_signal.c	Sun May 16 01:18:36 2004
+++ b/arch/x86_64/ia32/ia32_signal.c	Sun May 16 01:18:36 2004
@@ -98,6 +98,7 @@
 int ia32_copy_siginfo_from_user(siginfo_t *to, siginfo_t32 __user *from)
 {
 	int err;
+	u32 ptr32;
 	if (!access_ok (VERIFY_READ, from, sizeof(siginfo_t32)))
 		return -EFAULT;
 
@@ -107,7 +108,8 @@
 
 	err |= __get_user(to->si_pid, &from->si_pid);
 	err |= __get_user(to->si_uid, &from->si_uid);
-	err |= __get_user((u32)(u64)to->si_ptr, &from->si_ptr);
+	err |= __get_user(ptr32, &from->si_ptr);
+	to->si_ptr = (void*)(u64)ptr32;
 
 	return err;
 }
diff -Nru a/arch/x86_64/ia32/ia32entry.S b/arch/x86_64/ia32/ia32entry.S
--- a/arch/x86_64/ia32/ia32entry.S	Sun May 16 01:18:35 2004
+++ b/arch/x86_64/ia32/ia32entry.S	Sun May 16 01:18:35 2004
@@ -447,11 +447,11 @@
 	.quad sys_setfsgid16
 	.quad sys_llseek		/* 140 */
 	.quad sys32_getdents
-	.quad sys32_select
+	.quad compat_sys_select
 	.quad sys_flock
 	.quad sys_msync
-	.quad sys32_readv		/* 145 */
-	.quad sys32_writev
+	.quad compat_sys_readv		/* 145 */
+	.quad compat_sys_writev
 	.quad sys_getsid
 	.quad sys_fdatasync
 	.quad sys32_sysctl	/* sysctl */
@@ -474,7 +474,7 @@
 	.quad sys32_vm86_warning	/* vm86 */ 
 	.quad quiet_ni_syscall	/* query_module */
 	.quad sys_poll
-	.quad sys32_nfsservctl
+	.quad compat_sys_nfsservctl
 	.quad sys_setresgid16	/* 170 */
 	.quad sys_getresgid16
 	.quad sys_prctl
diff -Nru a/arch/x86_64/ia32/ptrace32.c b/arch/x86_64/ia32/ptrace32.c
--- a/arch/x86_64/ia32/ptrace32.c	Sun May 16 01:18:34 2004
+++ b/arch/x86_64/ia32/ptrace32.c	Sun May 16 01:18:34 2004
@@ -17,6 +17,7 @@
 #include <linux/syscalls.h>
 #include <linux/unistd.h>
 #include <linux/mm.h>
+#include <linux/ptrace.h>
 #include <asm/ptrace.h>
 #include <asm/uaccess.h>
 #include <asm/user32.h>
@@ -25,8 +26,6 @@
 #include <asm/debugreg.h>
 #include <asm/i387.h>
 #include <asm/fpu32.h>
-#include <linux/ptrace.h>
-#include <linux/mm.h>
 
 /* determines which flags the user has access to. */
 /* 1 = access 0 = no access */
diff -Nru a/arch/x86_64/ia32/sys_ia32.c b/arch/x86_64/ia32/sys_ia32.c
--- a/arch/x86_64/ia32/sys_ia32.c	Sun May 16 01:18:34 2004
+++ b/arch/x86_64/ia32/sys_ia32.c	Sun May 16 01:18:34 2004
@@ -606,107 +606,6 @@
 	return error;
 }
 
-/*
- * We can actually return ERESTARTSYS instead of EINTR, but I'd
- * like to be certain this leads to no problems. So I return
- * EINTR just for safety.
- *
- * Update: ERESTARTSYS breaks at least the xview clock binary, so
- * I'm trying ERESTARTNOHAND which restart only when you want to.
- */
-#define MAX_SELECT_SECONDS \
-	((unsigned long) (MAX_SCHEDULE_TIMEOUT / HZ)-1)
-#define ROUND_UP_TIME(x,y) (((x)+(y)-1)/(y))
-
-asmlinkage long
-sys32_select(int n, fd_set *inp, fd_set *outp, fd_set *exp, struct compat_timeval *tvp32)
-{
-	fd_set_bits fds;
-	char *bits;
-	long timeout;
-	int ret, size;
-
-	timeout = MAX_SCHEDULE_TIMEOUT;
-	if (tvp32) {
-		time_t sec, usec;
-
-		get_user(sec, &tvp32->tv_sec);
-		get_user(usec, &tvp32->tv_usec);
-
-		ret = -EINVAL;
-		if (sec < 0 || usec < 0)
-			goto out_nofds;
-
-		if ((unsigned long) sec < MAX_SELECT_SECONDS) {
-			timeout = ROUND_UP_TIME(usec, 1000000/HZ);
-			timeout += sec * (unsigned long) HZ;
-		}
-	}
-
-	ret = -EINVAL;
-	if (n < 0)
-		goto out_nofds;
-
-	if (n > current->files->max_fdset)
-		n = current->files->max_fdset;
-
-	/*
-	 * We need 6 bitmaps (in/out/ex for both incoming and outgoing),
-	 * since we used fdset we need to allocate memory in units of
-	 * long-words. 
-	 */
-	ret = -ENOMEM;
-	size = FDS_BYTES(n);
-	bits = kmalloc(6 * size, GFP_KERNEL);
-	if (!bits)
-		goto out_nofds;
-	fds.in      = (unsigned long *)  bits;
-	fds.out     = (unsigned long *) (bits +   size);
-	fds.ex      = (unsigned long *) (bits + 2*size);
-	fds.res_in  = (unsigned long *) (bits + 3*size);
-	fds.res_out = (unsigned long *) (bits + 4*size);
-	fds.res_ex  = (unsigned long *) (bits + 5*size);
-
-	if ((ret = get_fd_set(n, inp, fds.in)) ||
-	    (ret = get_fd_set(n, outp, fds.out)) ||
-	    (ret = get_fd_set(n, exp, fds.ex)))
-		goto out;
-	zero_fd_set(n, fds.res_in);
-	zero_fd_set(n, fds.res_out);
-	zero_fd_set(n, fds.res_ex);
-
-	ret = do_select(n, &fds, &timeout);
-
-	if (tvp32 && !(current->personality & STICKY_TIMEOUTS)) {
-		time_t sec = 0, usec = 0;
-		if (timeout) {
-			sec = timeout / HZ;
-			usec = timeout % HZ;
-			usec *= (1000000/HZ);
-		}
-		put_user(sec, (int *)&tvp32->tv_sec);
-		put_user(usec, (int *)&tvp32->tv_usec);
-	}
-
-	if (ret < 0)
-		goto out;
-	if (!ret) {
-		ret = -ERESTARTNOHAND;
-		if (signal_pending(current))
-			goto out;
-		ret = 0;
-	}
-
-	set_fd_set(n, inp, fds.res_in);
-	set_fd_set(n, outp, fds.res_out);
-	set_fd_set(n, exp, fds.res_ex);
-
-out:
-	kfree(bits);
-out_nofds:
-	return ret;
-}
-
 struct sel_arg_struct {
 	unsigned int n;
 	unsigned int inp;
@@ -722,106 +621,8 @@
 
 	if (copy_from_user(&a, arg, sizeof(a)))
 		return -EFAULT;
-	return sys32_select(a.n, (fd_set *)A(a.inp), (fd_set *)A(a.outp), (fd_set *)A(a.exp),
-			    (struct compat_timeval *)A(a.tvp));
-}
-
-static struct iovec *
-get_compat_iovec(struct compat_iovec *iov32, struct iovec *iov_buf, u32 *count, int type, int *errp)
-{
-	int i;
-	u32 buf, len;
-	struct iovec *ivp, *iov;
-	unsigned long totlen; 
-
-	/* Get the "struct iovec" from user memory */
-
-	*errp = 0;
-	if (!*count)
-		return 0;
-	*errp = -EINVAL;
-	if (*count > UIO_MAXIOV)
-		return(struct iovec *)0;
-	*errp = -EFAULT;
-	if(verify_area(VERIFY_READ, iov32, sizeof(struct compat_iovec)*(*count)))
-		return(struct iovec *)0;
-	if (*count > UIO_FASTIOV) {
-		*errp = -ENOMEM; 
-		iov = kmalloc(*count*sizeof(struct iovec), GFP_KERNEL);
-		if (!iov)
-			return((struct iovec *)0);
-	} else
-		iov = iov_buf;
-
-	ivp = iov;
-	totlen = 0;
-	for (i = 0; i < *count; i++) {
-		*errp = __get_user(len, &iov32->iov_len) |
-		  	__get_user(buf, &iov32->iov_base);	
-		if (*errp)
-			goto error;
-		*errp = verify_area(type, (void *)A(buf), len);
-		if (*errp) {
-			if (i > 0) { 
-				*count = i;
-				break;
-			} 
-			goto error;
-		}
-		/* SuS checks: */
-		*errp = -EINVAL; 
-		if ((int)len < 0)
-			goto error;
-		if ((totlen += len) >= 0x7fffffff)
-			goto error;			
-		ivp->iov_base = (void *)A(buf);
-		ivp->iov_len = (__kernel_size_t)len;
-		iov32++;
-		ivp++;
-	}
-	*errp = 0;
-	return(iov);
-
-error:
-	if (iov != iov_buf)
-		kfree(iov);
-	return NULL;
-}
-
-asmlinkage long
-sys32_readv(int fd, struct compat_iovec *vector, u32 count)
-{
-	struct iovec iovstack[UIO_FASTIOV];
-	struct iovec *iov;
-	int ret;
-	mm_segment_t old_fs = get_fs();
-
-	if ((iov = get_compat_iovec(vector, iovstack, &count, VERIFY_WRITE, &ret)) == NULL)
-		return ret;
-	set_fs(KERNEL_DS);
-	ret = sys_readv(fd, iov, count);
-	set_fs(old_fs);
-	if (iov != iovstack)
-		kfree(iov);
-	return ret;
-}
-
-asmlinkage long
-sys32_writev(int fd, struct compat_iovec *vector, u32 count)
-{
-	struct iovec iovstack[UIO_FASTIOV];
-	struct iovec *iov;
-	int ret;
-	mm_segment_t old_fs = get_fs();
-
-	if ((iov = get_compat_iovec(vector, iovstack, &count, VERIFY_READ, &ret)) == NULL)
-		return ret;
-	set_fs(KERNEL_DS);
-	ret = sys_writev(fd, iov, count);
-	set_fs(old_fs);
-	if (iov != iovstack)
-		kfree(iov);
-	return ret;
+	return compat_sys_select(a.n, compat_ptr(a.inp), compat_ptr(a.outp),
+				 compat_ptr(a.exp), compat_ptr(a.tvp));
 }
 
 /*
@@ -1323,93 +1124,22 @@
 	return ret;
 } 
 
-static int nargs(u32 src, char **dst) 
-{ 
-	int cnt;
-	u32 val; 
-
-	cnt = 0; 
-	do { 		
-		int ret = get_user(val, (__u32 *)(u64)src); 
-		if (ret)
-			return ret;
-		if (dst)
-			dst[cnt] = (char *)(u64)val; 
-		cnt++;
-		src += 4; 	
-		if (cnt >= (MAX_ARG_PAGES*PAGE_SIZE)/sizeof(void*))
-			return -E2BIG; 
-	} while(val); 
-	if (dst)
-		dst[cnt-1] = 0; 
-	return cnt; 
-} 
-
-asmlinkage long sys32_execve(char *name, u32 argv, u32 envp, struct pt_regs regs)
-{ 
-	mm_segment_t oldseg; 
-	char **buf = NULL; 
-	int na = 0,ne = 0;
-	int ret;
-	unsigned sz = 0; 
-
-	if (argv) {
-	na = nargs(argv, NULL); 
-	if (na < 0) 
-		return -EFAULT; 
-	} 	
-	if (envp) { 
-	ne = nargs(envp, NULL); 
-	if (ne < 0) 
-		return -EFAULT; 
-	}
-
-	if (argv || envp) { 
-	sz = (na+ne)*sizeof(void *); 
-	if (sz > PAGE_SIZE) 
-		buf = vmalloc(sz); 
-	else
-		buf = kmalloc(sz, GFP_KERNEL); 
-	if (!buf)
-		return -ENOMEM; 
-	} 
-	
-	if (argv) { 
-	ret = nargs(argv, buf);
-	if (ret < 0)
-		goto free;
-	}
-
-	if (envp) { 
-	ret = nargs(envp, buf + na); 
-	if (ret < 0)
-		goto free; 
-	}
-
-	name = getname(name); 
-	ret = PTR_ERR(name); 
-	if (IS_ERR(name))
-		goto free; 
-
-	oldseg = get_fs(); 
-	set_fs(KERNEL_DS);
-	ret = do_execve(name, argv ? buf : NULL, envp ? buf+na : NULL, &regs);  
-	set_fs(oldseg); 
+asmlinkage long sys32_execve(char *name, compat_uptr_t __user *argv,
+			     compat_uptr_t __user *envp, struct pt_regs regs)
+{
+	long error;
+	char * filename;
 
-	if (ret == 0)
+	filename = getname(name);
+	error = PTR_ERR(filename);
+	if (IS_ERR(filename))
+		return error;
+	error = compat_do_execve(filename, argv, envp, &regs);
+	if (error == 0)
 		current->ptrace &= ~PT_DTRACE;
-
-	putname(name);
- 
-free:
-	if (argv || envp) { 
-	if (sz > PAGE_SIZE)
-		vfree(buf); 
-	else
-	kfree(buf);
-	}
-	return ret; 
-} 
+	putname(filename);
+	return error;
+}
 
 asmlinkage long sys32_clone(unsigned int clone_flags, unsigned int newsp, struct pt_regs regs)
 {
@@ -1435,233 +1165,6 @@
 	return sys_kill(pid, sig);
 }
  
-
-#if defined(CONFIG_NFSD) || defined(CONFIG_NFSD_MODULE)
-/* Stuff for NFS server syscalls... */
-struct nfsctl_svc32 {
-	u16			svc32_port;
-	s32			svc32_nthreads;
-};
-
-struct nfsctl_client32 {
-	s8			cl32_ident[NFSCLNT_IDMAX+1];
-	s32			cl32_naddr;
-	struct in_addr		cl32_addrlist[NFSCLNT_ADDRMAX];
-	s32			cl32_fhkeytype;
-	s32			cl32_fhkeylen;
-	u8			cl32_fhkey[NFSCLNT_KEYMAX];
-};
-
-struct nfsctl_export32 {
-	s8			ex32_client[NFSCLNT_IDMAX+1];
-	s8			ex32_path[NFS_MAXPATHLEN+1];
-	compat_dev_t	ex32_dev;
-	compat_ino_t	ex32_ino;
-	s32			ex32_flags;
-	compat_pid_t	ex32_anon_uid;
-	compat_gid_t	ex32_anon_gid;
-};
-
-struct nfsctl_fdparm32 {
-	struct sockaddr		gd32_addr;
-	s8			gd32_path[NFS_MAXPATHLEN+1];
-	s32			gd32_version;
-};
-
-struct nfsctl_fsparm32 {
-	struct sockaddr		gd32_addr;
-	s8			gd32_path[NFS_MAXPATHLEN+1];
-	s32			gd32_maxlen;
-};
-
-struct nfsctl_arg32 {
-	s32			ca32_version;	/* safeguard */
-	union {
-		struct nfsctl_svc32	u32_svc;
-		struct nfsctl_client32	u32_client;
-		struct nfsctl_export32	u32_export;
-		struct nfsctl_fdparm32	u32_getfd;
-		struct nfsctl_fsparm32	u32_getfs;
-	} u;
-#define ca32_svc	u.u32_svc
-#define ca32_client	u.u32_client
-#define ca32_export	u.u32_export
-#define ca32_getfd	u.u32_getfd
-#define ca32_getfs	u.u32_getfs
-};
-
-union nfsctl_res32 {
-	__u8			cr32_getfh[NFS_FHSIZE];
-	struct knfsd_fh		cr32_getfs;
-};
-
-static int nfs_svc32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32)
-{
-	int err;
-	
-	err = get_user(karg->ca_version, &arg32->ca32_version);
-	err |= __get_user(karg->ca_svc.svc_port, &arg32->ca32_svc.svc32_port);
-	err |= __get_user(karg->ca_svc.svc_nthreads, &arg32->ca32_svc.svc32_nthreads);
-	return err;
-}
-
-static int nfs_clnt32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32)
-{
-	int err;
-	
-	err = get_user(karg->ca_version, &arg32->ca32_version);
-	err |= copy_from_user(&karg->ca_client.cl_ident[0],
-			  &arg32->ca32_client.cl32_ident[0],
-			  NFSCLNT_IDMAX);
-	err |= __get_user(karg->ca_client.cl_naddr, &arg32->ca32_client.cl32_naddr);
-	err |= copy_from_user(&karg->ca_client.cl_addrlist[0],
-			  &arg32->ca32_client.cl32_addrlist[0],
-			  (sizeof(struct in_addr) * NFSCLNT_ADDRMAX));
-	err |= __get_user(karg->ca_client.cl_fhkeytype,
-		      &arg32->ca32_client.cl32_fhkeytype);
-	err |= __get_user(karg->ca_client.cl_fhkeylen,
-		      &arg32->ca32_client.cl32_fhkeylen);
-	err |= copy_from_user(&karg->ca_client.cl_fhkey[0],
-			  &arg32->ca32_client.cl32_fhkey[0],
-			  NFSCLNT_KEYMAX);
-	return err;
-}
-
-static int nfs_exp32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32)
-{
-	int err;
-	
-	err = get_user(karg->ca_version, &arg32->ca32_version);
-	err |= copy_from_user(&karg->ca_export.ex_client[0],
-			  &arg32->ca32_export.ex32_client[0],
-			  NFSCLNT_IDMAX);
-	err |= copy_from_user(&karg->ca_export.ex_path[0],
-			  &arg32->ca32_export.ex32_path[0],
-			  NFS_MAXPATHLEN);
-	err |= __get_user(karg->ca_export.ex_dev,
-		      &arg32->ca32_export.ex32_dev);
-	err |= __get_user(karg->ca_export.ex_ino,
-		      &arg32->ca32_export.ex32_ino);
-	err |= __get_user(karg->ca_export.ex_flags,
-		      &arg32->ca32_export.ex32_flags);
-	err |= __get_user(karg->ca_export.ex_anon_uid,
-		      &arg32->ca32_export.ex32_anon_uid);
-	err |= __get_user(karg->ca_export.ex_anon_gid,
-		      &arg32->ca32_export.ex32_anon_gid);
-	SET_UID(karg->ca_export.ex_anon_uid, karg->ca_export.ex_anon_uid);
-	SET_GID(karg->ca_export.ex_anon_gid, karg->ca_export.ex_anon_gid);
-	return err;
-}
-
-
-static int nfs_getfd32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32)
-{
-	int err;
-	
-	err = get_user(karg->ca_version, &arg32->ca32_version);
-	err |= copy_from_user(&karg->ca_getfd.gd_addr,
-			  &arg32->ca32_getfd.gd32_addr,
-			  (sizeof(struct sockaddr)));
-	err |= copy_from_user(&karg->ca_getfd.gd_path,
-			  &arg32->ca32_getfd.gd32_path,
-			  (NFS_MAXPATHLEN+1));
-	err |= get_user(karg->ca_getfd.gd_version,
-		      &arg32->ca32_getfd.gd32_version);
-	return err;
-}
-
-static int nfs_getfs32_trans(struct nfsctl_arg *karg, struct nfsctl_arg32 *arg32)
-{
-	int err;
-	
-	err = get_user(karg->ca_version, &arg32->ca32_version);
-	err |= copy_from_user(&karg->ca_getfs.gd_addr,
-			  &arg32->ca32_getfs.gd32_addr,
-			  (sizeof(struct sockaddr)));
-	err |= copy_from_user(&karg->ca_getfs.gd_path,
-			  &arg32->ca32_getfs.gd32_path,
-			  (NFS_MAXPATHLEN+1));
-	err |= get_user(karg->ca_getfs.gd_maxlen,
-		      &arg32->ca32_getfs.gd32_maxlen);
-	return err;
-}
-
-/* This really doesn't need translations, we are only passing
- * back a union which contains opaque nfs file handle data.
- */
-static int nfs_getfh32_res_trans(union nfsctl_res *kres, union nfsctl_res32 *res32)
-{
-	return copy_to_user(res32, kres, sizeof(*res32)) ? -EFAULT : 0;
-}
-
-long asmlinkage sys32_nfsservctl(int cmd, struct nfsctl_arg32 *arg32, union nfsctl_res32 *res32)
-{
-	struct nfsctl_arg *karg = NULL;
-	union nfsctl_res *kres = NULL;
-	mm_segment_t oldfs;
-	int err;
-
-	karg = kmalloc(sizeof(*karg), GFP_USER);
-	if(!karg)
-		return -ENOMEM;
-	if(res32) {
-		kres = kmalloc(sizeof(*kres), GFP_USER);
-		if(!kres) {
-			kfree(karg);
-			return -ENOMEM;
-		}
-	}
-	switch(cmd) {
-	case NFSCTL_SVC:
-		err = nfs_svc32_trans(karg, arg32);
-		break;
-	case NFSCTL_ADDCLIENT:
-		err = nfs_clnt32_trans(karg, arg32);
-		break;
-	case NFSCTL_DELCLIENT:
-		err = nfs_clnt32_trans(karg, arg32);
-		break;
-	case NFSCTL_EXPORT:
-	case NFSCTL_UNEXPORT:
-		err = nfs_exp32_trans(karg, arg32);
-		break;
-	case NFSCTL_GETFD:
-		err = nfs_getfd32_trans(karg, arg32);
-		break;
-	case NFSCTL_GETFS:
-		err = nfs_getfs32_trans(karg, arg32);
-		break;
-	default:
-		err = -EINVAL;
-		break;
-	}
-	if(err)
-		goto done;
-	oldfs = get_fs();
-	set_fs(KERNEL_DS);
-	err = sys_nfsservctl(cmd, karg, kres);
-	set_fs(oldfs);
-
-	if (err)
-		goto done;
-
-	if((cmd == NFSCTL_GETFD) ||
-	   (cmd == NFSCTL_GETFS))
-		err = nfs_getfh32_res_trans(kres, res32);
-
-done:
-	if(karg)
-		kfree(karg);
-	if(kres)
-		kfree(kres);
-	return err;
-}
-#else /* !NFSD */
-long asmlinkage sys32_nfsservctl(int cmd, void *notused, void *notused2)
-{
-	return sys_ni_syscall();
-}
-#endif
 
 long sys32_io_setup(unsigned nr_reqs, u32 *ctx32p)
 { 
diff -Nru a/arch/x86_64/ia32/tls32.c b/arch/x86_64/ia32/tls32.c
--- a/arch/x86_64/ia32/tls32.c	Sun May 16 01:18:36 2004
+++ b/arch/x86_64/ia32/tls32.c	Sun May 16 01:18:36 2004
@@ -94,7 +94,7 @@
 	((desc)->a & 0x0ffff) | \
 	 ((desc)->b & 0xf0000) )
 	
-#define GET_32BIT(desc)		(((desc)->b >> 23) & 1)
+#define GET_32BIT(desc)		(((desc)->b >> 22) & 1)
 #define GET_CONTENTS(desc)	(((desc)->b >> 10) & 3)
 #define GET_WRITABLE(desc)	(((desc)->b >>  9) & 1)
 #define GET_LIMIT_PAGES(desc)	(((desc)->b >> 23) & 1)
diff -Nru a/arch/x86_64/kernel/Makefile b/arch/x86_64/kernel/Makefile
--- a/arch/x86_64/kernel/Makefile	Sun May 16 01:18:36 2004
+++ b/arch/x86_64/kernel/Makefile	Sun May 16 01:18:36 2004
@@ -25,6 +25,7 @@
 obj-$(CONFIG_GART_IOMMU)	+= pci-gart.o aperture.o
 obj-$(CONFIG_DUMMY_IOMMU)	+= pci-nommu.o pci-dma.o
 obj-$(CONFIG_SWIOTLB)		+= swiotlb.o
+obj-$(CONFIG_SCHED_SMT)		+= domain.o
 
 obj-$(CONFIG_MODULES)		+= module.o
 
diff -Nru a/arch/x86_64/kernel/domain.c b/arch/x86_64/kernel/domain.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/arch/x86_64/kernel/domain.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,93 @@
+#include <linux/init.h>
+#include <linux/sched.h>
+
+/* Don't do any NUMA setup on Opteron right now. They seem to be
+   better off with flat scheduling. This is just for SMT. */
+
+#ifdef CONFIG_SCHED_SMT
+
+static struct sched_group sched_group_cpus[NR_CPUS];
+static struct sched_group sched_group_phys[NR_CPUS];
+static DEFINE_PER_CPU(struct sched_domain, cpu_domains);
+static DEFINE_PER_CPU(struct sched_domain, phys_domains);
+__init void arch_init_sched_domains(void)
+{
+	int i;
+	struct sched_group *first = NULL, *last = NULL;
+
+	/* Set up domains */
+	for_each_cpu(i) {
+		struct sched_domain *cpu_domain = &per_cpu(cpu_domains, i);
+		struct sched_domain *phys_domain = &per_cpu(phys_domains, i);
+
+		*cpu_domain = SD_SIBLING_INIT;
+		/* Disable SMT NICE for CMP */
+		/* RED-PEN use a generic flag */ 
+		if (cpu_data[i].x86_vendor == X86_VENDOR_AMD) 
+			cpu_domain->flags &= ~SD_SHARE_CPUPOWER; 
+		cpu_domain->span = cpu_sibling_map[i];
+		cpu_domain->parent = phys_domain;
+		cpu_domain->groups = &sched_group_cpus[i];
+
+		*phys_domain = SD_CPU_INIT;
+		phys_domain->span = cpu_possible_map;
+		phys_domain->groups = &sched_group_phys[first_cpu(cpu_domain->span)];
+	}
+
+	/* Set up CPU (sibling) groups */
+	for_each_cpu(i) {
+		struct sched_domain *cpu_domain = &per_cpu(cpu_domains, i);
+		int j;
+		first = last = NULL;
+
+		if (i != first_cpu(cpu_domain->span))
+			continue;
+
+		for_each_cpu_mask(j, cpu_domain->span) {
+			struct sched_group *cpu = &sched_group_cpus[j];
+
+			cpus_clear(cpu->cpumask);
+			cpu_set(j, cpu->cpumask);
+			cpu->cpu_power = SCHED_LOAD_SCALE;
+
+			if (!first)
+				first = cpu;
+			if (last)
+				last->next = cpu;
+			last = cpu;
+		}
+		last->next = first;
+	}
+
+	first = last = NULL;
+	/* Set up physical groups */
+	for_each_cpu(i) {
+		struct sched_domain *cpu_domain = &per_cpu(cpu_domains, i);
+		struct sched_group *cpu = &sched_group_phys[i];
+
+		if (i != first_cpu(cpu_domain->span))
+			continue;
+
+		cpu->cpumask = cpu_domain->span;
+		/*
+		 * Make each extra sibling increase power by 10% of
+		 * the basic CPU. This is very arbitrary.
+		 */
+		cpu->cpu_power = SCHED_LOAD_SCALE + SCHED_LOAD_SCALE*(cpus_weight(cpu->cpumask)-1) / 10;
+
+		if (!first)
+			first = cpu;
+		if (last)
+			last->next = cpu;
+		last = cpu;
+	}
+	last->next = first;
+
+	mb();
+	for_each_cpu(i) {
+		struct sched_domain *cpu_domain = &per_cpu(cpu_domains, i);
+		cpu_attach_domain(cpu_domain, i);
+	}
+}
+
+#endif
diff -Nru a/arch/x86_64/kernel/io_apic.c b/arch/x86_64/kernel/io_apic.c
--- a/arch/x86_64/kernel/io_apic.c	Sun May 16 01:18:35 2004
+++ b/arch/x86_64/kernel/io_apic.c	Sun May 16 01:18:35 2004
@@ -237,6 +237,7 @@
 			for (func = 0; func < 8; func++) { 
 				u32 class;
 				u32 vendor;
+				u8 type;
 				class = read_pci_config(num,slot,func,
 							PCI_CLASS_REVISION);
 				if (class == 0xffffffff)
@@ -270,8 +271,8 @@
 				} 
 
 				/* No multi-function device? */
-				u8 type = read_pci_config_byte(num,slot,func,
-							       PCI_HEADER_TYPE);
+				type = read_pci_config_byte(num,slot,func,
+							    PCI_HEADER_TYPE);
 				if (!(type & 0x80))
 					break;
 			} 
diff -Nru a/arch/x86_64/kernel/mpparse.c b/arch/x86_64/kernel/mpparse.c
--- a/arch/x86_64/kernel/mpparse.c	Sun May 16 01:18:34 2004
+++ b/arch/x86_64/kernel/mpparse.c	Sun May 16 01:18:34 2004
@@ -920,8 +920,11 @@
 		}
 
 		/* Don't set up the ACPI SCI because it's already set up */
-		if (acpi_fadt.sci_int == gsi)
+		if (acpi_fadt.sci_int == gsi) {
+			/* we still need to set up the entry's irq */
+			acpi_gsi_to_irq(gsi, &entry->irq);
 			continue;
+		}
 
 		ioapic = mp_find_ioapic(gsi);
 		if (ioapic < 0)
diff -Nru a/arch/x86_64/kernel/msr.c b/arch/x86_64/kernel/msr.c
--- a/arch/x86_64/kernel/msr.c	Sun May 16 01:18:33 2004
+++ b/arch/x86_64/kernel/msr.c	Sun May 16 01:18:33 2004
@@ -1,4 +1,3 @@
-#ident "$Id$"
 /* ----------------------------------------------------------------------- *
  *   
  *   Copyright 2000 H. Peter Anvin - All Rights Reserved
diff -Nru a/arch/x86_64/kernel/pci-gart.c b/arch/x86_64/kernel/pci-gart.c
--- a/arch/x86_64/kernel/pci-gart.c	Sun May 16 01:18:34 2004
+++ b/arch/x86_64/kernel/pci-gart.c	Sun May 16 01:18:34 2004
@@ -30,7 +30,6 @@
 #include <asm/proto.h>
 #include <asm/cacheflush.h>
 #include <asm/kdebug.h>
-#include <asm/proto.h>
 
 #ifdef CONFIG_PREEMPT
 #define preempt_atomic() in_atomic()
diff -Nru a/arch/x86_64/kernel/process.c b/arch/x86_64/kernel/process.c
--- a/arch/x86_64/kernel/process.c	Sun May 16 01:18:35 2004
+++ b/arch/x86_64/kernel/process.c	Sun May 16 01:18:35 2004
@@ -574,12 +574,6 @@
 		    NULL, NULL);
 }
 
-/*
- * These bracket the sleeping functions..
- */
-#define first_sched	((unsigned long) scheduling_functions_start_here)
-#define last_sched	((unsigned long) scheduling_functions_end_here)
-
 unsigned long get_wchan(struct task_struct *p)
 {
 	unsigned long stack;
@@ -596,14 +590,12 @@
 		if (fp < (unsigned long)stack || fp > (unsigned long)stack+THREAD_SIZE)
 			return 0; 
 		rip = *(u64 *)(fp+8); 
-		if (rip < first_sched || rip >= last_sched)
+		if (!in_sched_functions(rip))
 			return rip; 
 		fp = *(u64 *)fp; 
 	} while (count++ < 16); 
 	return 0;
 }
-#undef last_sched
-#undef first_sched
 
 long do_arch_prctl(struct task_struct *task, int code, unsigned long addr)
 { 
diff -Nru a/arch/x86_64/kernel/reboot.c b/arch/x86_64/kernel/reboot.c
--- a/arch/x86_64/kernel/reboot.c	Sun May 16 01:18:36 2004
+++ b/arch/x86_64/kernel/reboot.c	Sun May 16 01:18:36 2004
@@ -29,9 +29,9 @@
 static int reboot_mode = 0;
 
 /* reboot=b[ios] | t[riple] | k[bd] [, [w]arm | [c]old]
-   bios	  Use the CPU reboto vector for warm reset
+   bios	  Use the CPU reboot vector for warm reset
    warm   Don't set the cold reboot flag
-   cold   Set the cold reboto flag
+   cold   Set the cold reboot flag
    triple Force a triple fault (init)
    kbd    Use the keyboard controller. cold reset (default)
  */ 
diff -Nru a/arch/x86_64/kernel/setup.c b/arch/x86_64/kernel/setup.c
--- a/arch/x86_64/kernel/setup.c	Sun May 16 01:18:33 2004
+++ b/arch/x86_64/kernel/setup.c	Sun May 16 01:18:33 2004
@@ -663,7 +663,7 @@
 	return r;
 }
 
-static void __init detect_ht(void)
+static void __init detect_ht(struct cpuinfo_x86 *c)
 {
 #ifdef CONFIG_SMP
 	u32 	eax, ebx, ecx, edx;
@@ -671,6 +671,9 @@
 	int	initial_apic_id;
 	int 	cpu = smp_processor_id();
 	
+	if (!cpu_has(c, X86_FEATURE_HT))
+		return;
+
 	cpuid(1, &eax, &ebx, &ecx, &edx);
 	smp_num_siblings = (ebx & 0xff0000) >> 16;
 	
@@ -768,7 +771,6 @@
 	unsigned int trace = 0, l1i = 0, l1d = 0, l2 = 0, l3 = 0; 
 	unsigned n;
 
-	select_idle_routine(c);
 	if (c->cpuid_level > 1) {
 		/* supports eax=2  call */
 		int i, j, n;
@@ -837,9 +839,6 @@
 		c->x86_cache_size = l2 ? l2 : (l1i+l1d);
 	}
 
-	if (cpu_has(c, X86_FEATURE_HT))
-		detect_ht(); 
-
 	n = cpuid_eax(0x80000000);
 	if (n >= 0x80000008) {
 		unsigned eax = cpuid_eax(0x80000008);
@@ -969,6 +968,9 @@
 			break;
 	}
 	
+	select_idle_routine(c);
+	detect_ht(c); 
+		
 	/*
 	 * On SMP, boot_cpu_data holds the common feature set between
 	 * all CPUs; so make sure that we indicate which features are
diff -Nru a/arch/x86_64/kernel/smp.c b/arch/x86_64/kernel/smp.c
--- a/arch/x86_64/kernel/smp.c	Sun May 16 01:18:34 2004
+++ b/arch/x86_64/kernel/smp.c	Sun May 16 01:18:34 2004
@@ -404,6 +404,9 @@
 	if (!cpus)
 		return 0;
 
+	/* Can deadlock when called with interrupts disabled */
+	WARN_ON(irqs_disabled());
+
 	data.func = func;
 	data.info = info;
 	atomic_set(&data.started, 0);
diff -Nru a/arch/x86_64/kernel/smpboot.c b/arch/x86_64/kernel/smpboot.c
--- a/arch/x86_64/kernel/smpboot.c	Sun May 16 01:18:37 2004
+++ b/arch/x86_64/kernel/smpboot.c	Sun May 16 01:18:37 2004
@@ -73,7 +73,7 @@
 /* Set when the idlers are all forked */
 int smp_threads_ready;
 
-char cpu_sibling_map[NR_CPUS] __cacheline_aligned;
+cpumask_t cpu_sibling_map[NR_CPUS] __cacheline_aligned;
 
 /*
  * Trampoline 80x86 program as an array.
@@ -874,31 +874,36 @@
 	}
 
 	/*
-	 * If Hyper-Threading is avaialble, construct cpu_sibling_map[], so
-	 * that we can tell the sibling CPU efficiently.
+	 * Construct cpu_sibling_map[], so that we can tell the
+	 * sibling CPU efficiently.
 	 */
-	if (cpu_has_ht && smp_num_siblings > 1) {
-		for (cpu = 0; cpu < NR_CPUS; cpu++)
-			cpu_sibling_map[cpu] = NO_PROC_ID;
-		
-		for (cpu = 0; cpu < NR_CPUS; cpu++) {
-			int 	i;
-			if (!cpu_isset(cpu, cpu_callout_map))
-				continue;
+	for (cpu = 0; cpu < NR_CPUS; cpu++)
+		cpus_clear(cpu_sibling_map[cpu]);
+
+	for (cpu = 0; cpu < NR_CPUS; cpu++) {
+		int siblings = 0;
+		int i;
+		if (!cpu_isset(cpu, cpu_callout_map))
+			continue;
 
+		if (smp_num_siblings > 1) {
 			for (i = 0; i < NR_CPUS; i++) {
-				if (i == cpu || !cpu_isset(i, cpu_callout_map))
+				if (!cpu_isset(i, cpu_callout_map))
 					continue;
 				if (phys_proc_id[cpu] == phys_proc_id[i]) {
-					cpu_sibling_map[cpu] = i;
-					break;
+					siblings++;
+					cpu_set(i, cpu_sibling_map[cpu]);
 				}
 			}
-			if (cpu_sibling_map[cpu] == (char)NO_PROC_ID) {
-				smp_num_siblings = 1;
-				printk(KERN_WARNING "WARNING: No sibling found for CPU %d.\n", cpu);
-			}
+		} else {
+			siblings++;
+			cpu_set(cpu, cpu_sibling_map[cpu]);
 		}
+
+		if (siblings != smp_num_siblings)
+			printk(KERN_WARNING
+	       "WARNING: %d siblings found for CPU%d, should be %d\n",
+			       siblings, cpu, smp_num_siblings);
 	}
 
 	Dprintk("Boot done.\n");
diff -Nru a/arch/x86_64/kernel/time.c b/arch/x86_64/kernel/time.c
--- a/arch/x86_64/kernel/time.c	Sun May 16 01:18:35 2004
+++ b/arch/x86_64/kernel/time.c	Sun May 16 01:18:35 2004
@@ -27,6 +27,7 @@
 #include <linux/sysdev.h>
 #include <linux/bcd.h>
 #include <linux/kallsyms.h>
+#include <asm/8253pit.h>
 #include <asm/pgtable.h>
 #include <asm/vsyscall.h>
 #include <asm/timex.h>
@@ -54,7 +55,7 @@
 unsigned int cpu_khz;					/* TSC clocks / usec, not used here */
 unsigned long hpet_period;				/* fsecs / HPET clock */
 unsigned long hpet_tick;				/* HPET clocks / interrupt */
-unsigned long vxtime_hz = 1193182;
+unsigned long vxtime_hz = PIT_TICK_RATE;
 int report_lost_ticks;				/* command line option */
 unsigned long long monotonic_base;
 
@@ -600,8 +601,8 @@
 	outb((inb(0x61) & ~0x02) | 0x01, 0x61);
 
 	outb(0xb0, 0x43);
-	outb((1193182 / (1000 / 50)) & 0xff, 0x42);
-	outb((1193182 / (1000 / 50)) >> 8, 0x42);
+	outb((PIT_TICK_RATE / (1000 / 50)) & 0xff, 0x42);
+	outb((PIT_TICK_RATE / (1000 / 50)) >> 8, 0x42);
 	rdtscll(start);
 	sync_core();
 	while ((inb(0x61) & 0x20) == 0);
diff -Nru a/arch/x86_64/kernel/traps.c b/arch/x86_64/kernel/traps.c
--- a/arch/x86_64/kernel/traps.c	Sun May 16 01:18:33 2004
+++ b/arch/x86_64/kernel/traps.c	Sun May 16 01:18:33 2004
@@ -256,8 +256,8 @@
 
 	printk("CPU %d ", cpu);
 	__show_regs(regs);
-	printk("Process %s (pid: %d, stackpage=%08lx)\n",
-		cur->comm, cur->pid, 4096+(unsigned long)cur);
+	printk("Process %s (pid: %d, threadinfo %p, task %p)\n",
+		cur->comm, cur->pid, cur->thread_info, cur);
 
 	/*
 	 * When in-kernel, we also print out the stack and code at the
diff -Nru a/arch/x86_64/kernel/x8664_ksyms.c b/arch/x86_64/kernel/x8664_ksyms.c
--- a/arch/x86_64/kernel/x8664_ksyms.c	Sun May 16 01:18:33 2004
+++ b/arch/x86_64/kernel/x8664_ksyms.c	Sun May 16 01:18:33 2004
@@ -151,6 +151,7 @@
 #undef strcmp 
 #undef strcpy 
 #undef strcat
+#undef memcmp
 
 extern void * memset(void *,int,__kernel_size_t);
 extern size_t strlen(const char *);
@@ -161,6 +162,7 @@
 extern void * memcpy(void *,const void *,__kernel_size_t);
 extern void * __memcpy(void *,const void *,__kernel_size_t);
 extern char * strcat(char *, const char *);
+extern int memcmp(const void * cs,const void * ct,size_t count);
 
 EXPORT_SYMBOL_NOVERS(memset);
 EXPORT_SYMBOL_NOVERS(strlen);
@@ -178,6 +180,7 @@
 EXPORT_SYMBOL_NOVERS(memscan);
 EXPORT_SYMBOL_NOVERS(memcpy);
 EXPORT_SYMBOL_NOVERS(__memcpy);
+EXPORT_SYMBOL_NOVERS(memcmp);
 
 /* syscall export needed for misdesigned sound drivers. */
 EXPORT_SYMBOL(sys_read);
diff -Nru a/arch/x86_64/mm/ioremap.c b/arch/x86_64/mm/ioremap.c
--- a/arch/x86_64/mm/ioremap.c	Sun May 16 01:18:36 2004
+++ b/arch/x86_64/mm/ioremap.c	Sun May 16 01:18:36 2004
@@ -132,13 +132,13 @@
 	 * Don't allow anybody to remap normal RAM that we're using..
 	 */
 	if (phys_addr < virt_to_phys(high_memory)) {
+#ifndef CONFIG_DISCONTIGMEM
 		char *t_addr, *t_end;
+ 		struct page *page;
 
 		t_addr = __va(phys_addr);
 		t_end = t_addr + (size - 1);
 	   
-#ifndef CONFIG_DISCONTIGMEM	 
- 		struct page *page;
 		for(page = virt_to_page(t_addr); page <= virt_to_page(t_end); page++)
 			if(!PageReserved(page))
 				return NULL;
diff -Nru a/arch/x86_64/mm/pageattr.c b/arch/x86_64/mm/pageattr.c
--- a/arch/x86_64/mm/pageattr.c	Sun May 16 01:18:35 2004
+++ b/arch/x86_64/mm/pageattr.c	Sun May 16 01:18:35 2004
@@ -32,7 +32,8 @@
 	return pte;
 } 
 
-static struct page *split_large_page(unsigned long address, pgprot_t prot)
+static struct page *split_large_page(unsigned long address, pgprot_t prot,
+				     pgprot_t ref_prot)
 { 
 	int i; 
 	unsigned long addr;
@@ -45,7 +46,7 @@
 	pbase = (pte_t *)page_address(base);
 	for (i = 0; i < PTRS_PER_PTE; i++, addr += PAGE_SIZE) {
 		pbase[i] = pfn_pte(addr >> PAGE_SHIFT, 
-				   addr == address ? prot : PAGE_KERNEL);
+				   addr == address ? prot : ref_prot);
 	}
 	return base;
 } 
@@ -95,7 +96,8 @@
  * No more special protections in this 2/4MB area - revert to a
  * large page again. 
  */
-static void revert_page(struct page *kpte_page, unsigned long address)
+static void revert_page(struct page *kpte_page, unsigned long address, 
+			pgprot_t ref_prot)
 {
        pgd_t *pgd;
        pmd_t *pmd; 
@@ -104,12 +106,14 @@
        pgd = pgd_offset_k(address); 
        pmd = pmd_offset(pgd, address);
        BUG_ON(pmd_val(*pmd) & _PAGE_PSE); 
-       large_pte = mk_pte_phys(__pa(address) & LARGE_PAGE_MASK, PAGE_KERNEL_LARGE);
+       pgprot_val(ref_prot) |= _PAGE_PSE;
+       large_pte = mk_pte_phys(__pa(address) & LARGE_PAGE_MASK, ref_prot);
        set_pte((pte_t *)pmd, large_pte);
 }      
 
 static int
-__change_page_attr(unsigned long address, struct page *page, pgprot_t prot)
+__change_page_attr(unsigned long address, struct page *page, pgprot_t prot, 
+		   pgprot_t ref_prot)
 { 
 	pte_t *kpte; 
 	struct page *kpte_page;
@@ -119,29 +123,29 @@
 	if (!kpte) return 0;
 	kpte_page = virt_to_page(((unsigned long)kpte) & PAGE_MASK);
 	kpte_flags = pte_val(*kpte); 
-	if (pgprot_val(prot) != pgprot_val(PAGE_KERNEL)) { 
+	if (pgprot_val(prot) != pgprot_val(ref_prot)) { 
 		if ((kpte_flags & _PAGE_PSE) == 0) { 
 			pte_t old = *kpte;
-			pte_t standard = mk_pte(page, PAGE_KERNEL); 
+			pte_t standard = mk_pte(page, ref_prot); 
 
 			set_pte(kpte, mk_pte(page, prot)); 
 			if (pte_same(old,standard))
-				atomic_inc(&kpte_page->count);
+				get_page(kpte_page);
 		} else {
-			struct page *split = split_large_page(address, prot); 
+			struct page *split = split_large_page(address, prot, ref_prot); 
 			if (!split)
 				return -ENOMEM;
-			atomic_inc(&kpte_page->count);
-			set_pte(kpte,mk_pte(split, PAGE_KERNEL));
+			get_page(kpte_page);
+			set_pte(kpte,mk_pte(split, ref_prot));
 		}	
 	} else if ((kpte_flags & _PAGE_PSE) == 0) { 
-		set_pte(kpte, mk_pte(page, PAGE_KERNEL));
-		atomic_dec(&kpte_page->count); 
+		set_pte(kpte, mk_pte(page, ref_prot));
+		__put_page(kpte_page);
 	}
 
-	if (atomic_read(&kpte_page->count) == 1) { 
+	if (page_count(kpte_page) == 1) {
 		save_page(address, kpte_page); 		     
-		revert_page(kpte_page, address);
+		revert_page(kpte_page, address, ref_prot);
 	} 
 	return 0;
 } 
@@ -167,13 +171,16 @@
 	down_write(&init_mm.mmap_sem);
 	for (i = 0; i < numpages; !err && i++, page++) { 
 		unsigned long address = (unsigned long)page_address(page); 
-		err = __change_page_attr(address, page, prot); 
+		err = __change_page_attr(address, page, prot, PAGE_KERNEL); 
 		if (err) 
 			break; 
-		/* Handle kernel mapping too which aliases part of the lowmem */
+		/* Handle kernel mapping too which aliases part of the
+		 * lowmem */
 		if (page_to_phys(page) < KERNEL_TEXT_SIZE) {		
-			unsigned long addr2 = __START_KERNEL_map + page_to_phys(page);
-			err = __change_page_attr(addr2, page, prot);
+			unsigned long addr2;
+			addr2 = __START_KERNEL_map + page_to_phys(page);
+			err = __change_page_attr(addr2, page, prot, 
+						 PAGE_KERNEL_EXECUTABLE);
 		} 
 	} 	
 	up_write(&init_mm.mmap_sem); 
diff -Nru a/drivers/acpi/pci_link.c b/drivers/acpi/pci_link.c
--- a/drivers/acpi/pci_link.c	Sun May 16 01:18:33 2004
+++ b/drivers/acpi/pci_link.c	Sun May 16 01:18:33 2004
@@ -479,7 +479,7 @@
 	PIRQ_PENALTY_PCI_AVAILABLE,	/* IRQ9  PCI, often acpi */
 	PIRQ_PENALTY_PCI_AVAILABLE,	/* IRQ10 PCI */
 	PIRQ_PENALTY_PCI_AVAILABLE,	/* IRQ11 PCI */
-	PIRQ_PENALTY_ISA_TYPICAL,	/* IRQ12 mouse */
+	PIRQ_PENALTY_ISA_USED,	/* IRQ12 mouse */
 	PIRQ_PENALTY_ISA_USED,	/* IRQ13 fpe, sometimes */
 	PIRQ_PENALTY_ISA_USED,	/* IRQ14 ide0 */
 	PIRQ_PENALTY_ISA_USED,	/* IRQ15 ide1 */
@@ -546,17 +546,23 @@
 		if (link->irq.active == link->irq.possible[i])
 			break;
 	}
+	/*
+	 * forget active IRQ that is not in possible list
+	 */
+	if (i == link->irq.possible_count) {
+		if (acpi_strict)
+			printk(KERN_WARNING PREFIX "_CRS %d not found"
+				" in _PRS\n", link->irq.active);
+		link->irq.active = 0;
+	}
 
 	/*
 	 * if active found, use it; else pick entry from end of possible list.
 	 */
-	if (i != link->irq.possible_count) {
+	if (link->irq.active) {
 		irq = link->irq.active;
 	} else {
 		irq = link->irq.possible[link->irq.possible_count - 1];
-		if (acpi_strict)
-			printk(KERN_WARNING PREFIX "_CRS %d not found"
-				" in _PRS\n", link->irq.active);
 	}
 
 	if (acpi_irq_balance || !link->irq.active) {
diff -Nru a/drivers/base/bus.c b/drivers/base/bus.c
--- a/drivers/base/bus.c	Sun May 16 01:18:34 2004
+++ b/drivers/base/bus.c	Sun May 16 01:18:34 2004
@@ -451,7 +451,11 @@
 
 	if (bus) {
 		pr_debug("bus %s: add driver %s\n",bus->name,drv->name);
-		kobject_set_name(&drv->kobj,drv->name);
+		error = kobject_set_name(&drv->kobj,drv->name);
+		if (error) {
+			put_bus(bus);
+			return error;
+		}
 		drv->kobj.kset = &bus->drivers;
 		if ((error = kobject_register(&drv->kobj))) {
 			put_bus(bus);
@@ -555,21 +559,39 @@
  */
 int bus_register(struct bus_type * bus)
 {
-	kobject_set_name(&bus->subsys.kset.kobj,bus->name);
+	int retval;
+
+	retval = kobject_set_name(&bus->subsys.kset.kobj,bus->name);
+	if (retval)
+		goto out;
+
 	subsys_set_kset(bus,bus_subsys);
-	subsystem_register(&bus->subsys);
+	retval = subsystem_register(&bus->subsys);
+	if (retval) 
+		goto out;
 
 	kobject_set_name(&bus->devices.kobj, "devices");
 	bus->devices.subsys = &bus->subsys;
-	kset_register(&bus->devices);
+	retval = kset_register(&bus->devices);
+	if (retval)
+		goto bus_devices_fail;
 
 	kobject_set_name(&bus->drivers.kobj, "drivers");
 	bus->drivers.subsys = &bus->subsys;
 	bus->drivers.ktype = &ktype_driver;
-	kset_register(&bus->drivers);
+	retval = kset_register(&bus->drivers);
+	if (retval)
+		goto bus_drivers_fail;
 
 	pr_debug("bus type '%s' registered\n",bus->name);
 	return 0;
+
+bus_drivers_fail:
+	kset_unregister(&bus->devices);
+bus_devices_fail:
+	subsystem_unregister(&bus->subsys);
+out:
+	return retval;
 }
 
 
diff -Nru a/drivers/base/class.c b/drivers/base/class.c
--- a/drivers/base/class.c	Sun May 16 01:18:37 2004
+++ b/drivers/base/class.c	Sun May 16 01:18:37 2004
@@ -361,6 +361,8 @@
 
 int class_device_rename(struct class_device *class_dev, char *new_name)
 {
+	int error = 0;
+
 	class_dev = class_device_get(class_dev);
 	if (!class_dev)
 		return -EINVAL;
@@ -370,11 +372,11 @@
 
 	strlcpy(class_dev->class_id, new_name, KOBJ_NAME_LEN);
 
-	kobject_rename(&class_dev->kobj, new_name);
+	error = kobject_rename(&class_dev->kobj, new_name);
 
 	class_device_put(class_dev);
 
-	return 0;
+	return error;
 }
 
 struct class_device * class_device_get(struct class_device *class_dev)
diff -Nru a/drivers/base/map.c b/drivers/base/map.c
--- a/drivers/base/map.c	Sun May 16 01:18:35 2004
+++ b/drivers/base/map.c	Sun May 16 01:18:35 2004
@@ -138,6 +138,13 @@
 	struct kobj_map *p = kmalloc(sizeof(struct kobj_map), GFP_KERNEL);
 	struct probe *base = kmalloc(sizeof(struct probe), GFP_KERNEL);
 	int i;
+
+	if ((p == NULL) || (base == NULL)) {
+		kfree(p);
+		kfree(base);
+		return NULL;
+	}
+
 	memset(base, 0, sizeof(struct probe));
 	base->dev = 1;
 	base->range = ~0;
diff -Nru a/drivers/base/platform.c b/drivers/base/platform.c
--- a/drivers/base/platform.c	Sun May 16 01:18:33 2004
+++ b/drivers/base/platform.c	Sun May 16 01:18:33 2004
@@ -57,8 +57,9 @@
  *	type of device, like "pci" or "floppy", and <instance> is the 
  *	enumerated instance of the device, like '0' or '42'.
  *	Driver IDs are simply "<name>". 
- *	So, extract the <name> from the device, and compare it against 
- *	the name of the driver. Return whether they match or not.
+ *	So, extract the <name> from the platform_device structure, 
+ *	and compare it against the name of the driver. Return whether 
+ *	they match or not.
  */
 
 static int platform_match(struct device * dev, struct device_driver * drv)
diff -Nru a/drivers/base/sys.c b/drivers/base/sys.c
--- a/drivers/base/sys.c	Sun May 16 01:18:33 2004
+++ b/drivers/base/sys.c	Sun May 16 01:18:33 2004
@@ -180,8 +180,11 @@
 
 	/* But make sure we point to the right type for sysfs translation */
 	sysdev->kobj.ktype = &ktype_sysdev;
-	kobject_set_name(&sysdev->kobj,"%s%d",
+	error = kobject_set_name(&sysdev->kobj,"%s%d",
 			 kobject_name(&cls->kset.kobj),sysdev->id);
+	if (error)
+		return error;
+
 	pr_debug("Registering sys device '%s'\n",kobject_name(&sysdev->kobj));
 
 	/* Register the object */
diff -Nru a/drivers/block/as-iosched.c b/drivers/block/as-iosched.c
--- a/drivers/block/as-iosched.c	Sun May 16 01:18:33 2004
+++ b/drivers/block/as-iosched.c	Sun May 16 01:18:33 2004
@@ -43,7 +43,7 @@
  * read_batch_expire describes how long we will allow a stream of reads to
  * persist before looking to see whether it is time to switch over to writes.
  */
-#define default_read_batch_expire (HZ / 4)
+#define default_read_batch_expire (HZ / 2)
 
 /*
  * write_batch_expire describes how long we want a stream of writes to run for.
@@ -51,7 +51,7 @@
  * See, the problem is: we can send a lot of writes to disk cache / TCQ in
  * a short amount of time...
  */
-#define default_write_batch_expire (HZ / 16)
+#define default_write_batch_expire (HZ / 8)
 
 /*
  * max time we may wait to anticipate a read (default around 6ms)
@@ -1216,13 +1216,12 @@
 	}
 
 	as_remove_queued_request(ad->q, rq);
+	WARN_ON(arq->state != AS_RQ_QUEUED);
+
 	list_add(&rq->queuelist, insert);
+	arq->state = AS_RQ_DISPATCHED;
 	if (arq->io_context && arq->io_context->aic)
 		atomic_inc(&arq->io_context->aic->nr_dispatched);
-
-	WARN_ON(arq->state != AS_RQ_QUEUED);
-	arq->state = AS_RQ_DISPATCHED;
-
 	ad->nr_dispatched++;
 }
 
@@ -1492,6 +1491,21 @@
 	as_antic_stop(ad);
 }
 
+/*
+ * Account a request that is inserted directly onto the dispatch queue.
+ * arq->io_context->aic->nr_dispatched should not need to be incremented
+ * because only new requests should come through here: requeues go through
+ * our explicit requeue handler.
+ */
+static void as_account_queued_request(struct as_data *ad, struct request *rq)
+{
+	if (blk_fs_request(rq)) {
+		struct as_rq *arq = RQ_DATA(rq);
+		arq->state = AS_RQ_DISPATCHED;
+		ad->nr_dispatched++;
+	}
+}
+
 static void
 as_insert_request(request_queue_t *q, struct request *rq, int where)
 {
@@ -1522,10 +1536,12 @@
 				as_move_to_dispatch(ad, ad->next_arq[REQ_ASYNC]);
 
 			list_add_tail(&rq->queuelist, ad->dispatch);
+			as_account_queued_request(ad, rq);
 			as_antic_stop(ad);
 			break;
 		case ELEVATOR_INSERT_FRONT:
 			list_add(&rq->queuelist, ad->dispatch);
+			as_account_queued_request(ad, rq);
 			as_antic_stop(ad);
 			break;
 		case ELEVATOR_INSERT_SORT:
diff -Nru a/drivers/block/carmel.c b/drivers/block/carmel.c
--- a/drivers/block/carmel.c	Sun May 16 01:18:36 2004
+++ b/drivers/block/carmel.c	Sun May 16 01:18:36 2004
@@ -438,11 +438,6 @@
 	return -EOPNOTSUPP;
 }
 
-static inline unsigned long msecs_to_jiffies(unsigned long msecs)
-{
-	return ((HZ * msecs + 999) / 1000);
-}
-
 static void msleep(unsigned long msecs)
 {
 	set_current_state(TASK_UNINTERRUPTIBLE);
diff -Nru a/drivers/block/cpqarray.c b/drivers/block/cpqarray.c
--- a/drivers/block/cpqarray.c	Sun May 16 01:18:33 2004
+++ b/drivers/block/cpqarray.c	Sun May 16 01:18:33 2004
@@ -1193,7 +1193,7 @@
 		if (error)
 			goto out_passthru;
 		error = -EFAULT;
-		if (copy_to_user(io, &my_io, sizeof(*my_io)))
+		if (copy_to_user(io, my_io, sizeof(*my_io)))
 			goto out_passthru;
 		error = 0;
 out_passthru:
diff -Nru a/drivers/block/elevator.c b/drivers/block/elevator.c
--- a/drivers/block/elevator.c	Sun May 16 01:18:36 2004
+++ b/drivers/block/elevator.c	Sun May 16 01:18:36 2004
@@ -169,6 +169,13 @@
 void __elv_add_request(request_queue_t *q, struct request *rq, int where,
 		       int plug)
 {
+	/*
+	 * barriers implicitly indicate back insertion
+	 */
+	if (rq->flags & (REQ_SOFTBARRIER | REQ_HARDBARRIER) &&
+	    where == ELEVATOR_INSERT_SORT)
+		where = ELEVATOR_INSERT_BACK;
+
 	if (plug)
 		blk_plug_device(q);
 
diff -Nru a/drivers/block/floppy.c b/drivers/block/floppy.c
--- a/drivers/block/floppy.c	Sun May 16 01:18:33 2004
+++ b/drivers/block/floppy.c	Sun May 16 01:18:33 2004
@@ -604,28 +604,27 @@
 }
 #endif
 
-#ifdef DEBUGT
-static long unsigned debugtimer;
-#endif
-
 /*
  * Debugging
  * =========
  */
+#ifdef DEBUGT
+static long unsigned debugtimer;
+
 static inline void set_debugt(void)
 {
-#ifdef DEBUGT
 	debugtimer = jiffies;
-#endif
 }
 
 static inline void debugt(const char *message)
 {
-#ifdef DEBUGT
 	if (DP->flags & DEBUGT)
 		printk("%s dtime=%lu\n", message, jiffies - debugtimer);
-#endif
 }
+#else
+static inline void set_debugt(void) { }
+static inline void debugt(const char *message) { }
+#endif /* DEBUGT */
 
 typedef void (*timeout_fn) (unsigned long);
 static struct timer_list fd_timeout = TIMER_INITIALIZER(floppy_shutdown, 0, 0);
@@ -1546,9 +1545,8 @@
 	for (i = 0; i < raw_cmd->cmd_count; i++)
 		r |= output_byte(raw_cmd->cmd[i]);
 
-#ifdef DEBUGT
 	debugt("rw_command: ");
-#endif
+
 	if (r) {
 		cont->error();
 		reset_fdc();
@@ -1570,9 +1568,7 @@
  */
 static void seek_interrupt(void)
 {
-#ifdef DEBUGT
 	debugt("seek interrupt:");
-#endif
 	if (inr != 2 || (ST0 & 0xF8) != 0x20) {
 		DPRINT("seek failed\n");
 		DRS->track = NEED_2_RECAL;
@@ -1676,24 +1672,18 @@
 	output_byte(FD_SEEK);
 	output_byte(UNIT(current_drive));
 	LAST_OUT(track);
-#ifdef DEBUGT
 	debugt("seek command:");
-#endif
 }
 
 static void recal_interrupt(void)
 {
-#ifdef DEBUGT
 	debugt("recal interrupt:");
-#endif
 	if (inr != 2)
 		FDCS->reset = 1;
 	else if (ST0 & ST0_ECE) {
 		switch (DRS->track) {
 		case NEED_1_RECAL:
-#ifdef DEBUGT
 			debugt("recal interrupt need 1 recal:");
-#endif
 			/* after a second recalibrate, we still haven't
 			 * reached track 0. Probably no drive. Raise an
 			 * error, as failing immediately might upset
@@ -1702,9 +1692,7 @@
 			cont->redo();
 			return;
 		case NEED_2_RECAL:
-#ifdef DEBUGT
 			debugt("recal interrupt need 2 recal:");
-#endif
 			/* If we already did a recalibrate,
 			 * and we are not at track 0, this
 			 * means we have moved. (The only way
@@ -1722,9 +1710,7 @@
 			DRS->select_date = jiffies;
 			/* fall through */
 		default:
-#ifdef DEBUGT
 			debugt("recal interrupt default:");
-#endif
 			/* Recalibrate moves the head by at
 			 * most 80 steps. If after one
 			 * recalibrate we don't have reached
@@ -1813,9 +1799,7 @@
 
 static void recalibrate_floppy(void)
 {
-#ifdef DEBUGT
 	debugt("recalibrate floppy:");
-#endif
 	do_floppy = recal_interrupt;
 	output_byte(FD_RECALIBRATE);
 	LAST_OUT(UNIT(current_drive));
@@ -1826,9 +1810,7 @@
  */
 static void reset_interrupt(void)
 {
-#ifdef DEBUGT
 	debugt("reset interrupt:");
-#endif
 	result();		/* get the status ready for set_fdc */
 	if (FDCS->reset) {
 		printk("reset set in interrupt, calling %p\n", cont->error);
@@ -2266,9 +2248,7 @@
 	buffer_track = -1;
 	setup_format_params(format_req.track << STRETCH(_floppy));
 	floppy_start();
-#ifdef DEBUGT
 	debugt("queue format request");
-#endif
 }
 
 static struct cont_t format_cont = {
@@ -2992,9 +2972,7 @@
 		if (TESTF(FD_NEED_TWADDLE))
 			twaddle();
 		schedule_bh(floppy_start);
-#ifdef DEBUGT
 		debugt("queue fd request");
-#endif
 		return;
 	}
 #undef REPEAT
@@ -4247,35 +4225,40 @@
 int __init floppy_init(void)
 {
 	int i, unit, drive;
-	int err;
+	int err, dr;
 
 	raw_cmd = NULL;
+	i = 0;
 
-	for (i = 0; i < N_DRIVE; i++) {
-		disks[i] = alloc_disk(1);
-		if (!disks[i])
-			goto Enomem;
-
-		disks[i]->major = FLOPPY_MAJOR;
-		disks[i]->first_minor = TOMINOR(i);
-		disks[i]->fops = &floppy_fops;
-		sprintf(disks[i]->disk_name, "fd%d", i);
-
-		init_timer(&motor_off_timer[i]);
-		motor_off_timer[i].data = i;
-		motor_off_timer[i].function = motor_off_callback;
+	for (dr = 0; dr < N_DRIVE; dr++) {
+		disks[dr] = alloc_disk(1);
+		if (!disks[dr]) {
+			err = -ENOMEM;
+			goto out_put_disk;
+		}
+
+		disks[dr]->major = FLOPPY_MAJOR;
+		disks[dr]->first_minor = TOMINOR(i);
+		disks[dr]->fops = &floppy_fops;
+		sprintf(disks[dr]->disk_name, "fd%d", dr);
+
+		init_timer(&motor_off_timer[dr]);
+		motor_off_timer[dr].data = dr;
+		motor_off_timer[dr].function = motor_off_callback;
 	}
 
 	devfs_mk_dir("floppy");
-	if ((err = register_blkdev(FLOPPY_MAJOR, "fd")))
-		goto out;
+
+	err = register_blkdev(FLOPPY_MAJOR, "fd");
+	if (err)
+		goto out_devfs_remove;
 
 	floppy_queue = blk_init_queue(do_fd_request, &floppy_lock);
-	blk_queue_max_sectors(floppy_queue, 64);
 	if (!floppy_queue) {
 		err = -ENOMEM;
-		goto fail_queue;
+		goto out_unreg_blkdev;
 	}
+	blk_queue_max_sectors(floppy_queue, 64);
 
 	blk_register_region(MKDEV(FLOPPY_MAJOR, 0), 256, THIS_MODULE,
 			    floppy_find, NULL, NULL);
@@ -4306,17 +4289,20 @@
 	use_virtual_dma = can_use_virtual_dma & 1;
 	fdc_state[0].address = FDC1;
 	if (fdc_state[0].address == -1) {
+		del_timer(&fd_timeout);
 		err = -ENODEV;
-		goto out1;
+		goto out_unreg_region;
 	}
 #if N_FDC > 1
 	fdc_state[1].address = FDC2;
 #endif
 
 	fdc = 0;		/* reset fdc in case of unexpected interrupt */
-	if (floppy_grab_irq_and_dma()) {
+	err = floppy_grab_irq_and_dma();
+	if (err) {
+		del_timer(&fd_timeout);
 		err = -EBUSY;
-		goto out1;
+		goto out_unreg_region;
 	}
 
 	/* initialise drive state */
@@ -4373,11 +4359,8 @@
 	initialising = 0;
 	if (have_no_fdc) {
 		DPRINT("no floppy controllers found\n");
-		flush_scheduled_work();
-		if (usage_count)
-			floppy_release_irq_and_dma();
 		err = have_no_fdc;
-		goto out2;
+		goto out_flush_work;
 	}
 
 	for (drive = 0; drive < N_DRIVE; drive++) {
@@ -4392,26 +4375,37 @@
 		add_disk(disks[drive]);
 	}
 
-	platform_device_register(&floppy_device);
+	err = platform_device_register(&floppy_device);
+	if (err)
+		goto out_del_disk;
+
 	return 0;
 
-out1:
-	del_timer(&fd_timeout);
-out2:
+out_del_disk:
+	for (drive = 0; drive < N_DRIVE; drive++) {
+		if (!(allowed_drive_mask & (1 << drive)))
+			continue;
+		if (fdc_state[FDC(drive)].version == FDC_NONE)
+			continue;
+		del_gendisk(disks[drive]);
+	}
+out_flush_work:
+	flush_scheduled_work();
+	if (usage_count)
+		floppy_release_irq_and_dma();
+out_unreg_region:
 	blk_unregister_region(MKDEV(FLOPPY_MAJOR, 0), 256);
 	blk_cleanup_queue(floppy_queue);
-fail_queue:
+out_unreg_blkdev:
 	unregister_blkdev(FLOPPY_MAJOR, "fd");
-out:
-	for (i = 0; i < N_DRIVE; i++)
-		put_disk(disks[i]);
+out_devfs_remove:
 	devfs_remove("floppy");
+out_put_disk:
+	while (dr--) {
+		del_timer(&motor_off_timer[dr]);
+		put_disk(disks[dr]);
+	}
 	return err;
-
-Enomem:
-	while (i--)
-		put_disk(disks[i]);
-	return -ENOMEM;
 }
 
 static spinlock_t floppy_usage_lock = SPIN_LOCK_UNLOCKED;
diff -Nru a/drivers/block/genhd.c b/drivers/block/genhd.c
--- a/drivers/block/genhd.c	Sun May 16 01:18:35 2004
+++ b/drivers/block/genhd.c	Sun May 16 01:18:35 2004
@@ -357,16 +357,6 @@
 	return sprintf(page, "%llu\n", (unsigned long long)get_capacity(disk));
 }
 
-static inline unsigned jiffies_to_msec(unsigned jif)
-{
-#if 1000 % HZ == 0
-	return jif * (1000 / HZ);
-#elif HZ % 1000 == 0
-	return jif / (HZ / 1000);
-#else
-	return (jif / HZ) * 1000 + (jif % HZ) * 1000 / HZ;
-#endif
-}
 static ssize_t disk_stats_read(struct gendisk * disk, char *page)
 {
 	disk_round_stats(disk);
@@ -377,14 +367,14 @@
 		"\n",
 		disk_stat_read(disk, reads), disk_stat_read(disk, read_merges),
 		(unsigned long long)disk_stat_read(disk, read_sectors),
-		jiffies_to_msec(disk_stat_read(disk, read_ticks)),
+		jiffies_to_msecs(disk_stat_read(disk, read_ticks)),
 		disk_stat_read(disk, writes), 
 		disk_stat_read(disk, write_merges),
 		(unsigned long long)disk_stat_read(disk, write_sectors),
-		jiffies_to_msec(disk_stat_read(disk, write_ticks)),
+		jiffies_to_msecs(disk_stat_read(disk, write_ticks)),
 		disk->in_flight,
-		jiffies_to_msec(disk_stat_read(disk, io_ticks)),
-		jiffies_to_msec(disk_stat_read(disk, time_in_queue)));
+		jiffies_to_msecs(disk_stat_read(disk, io_ticks)),
+		jiffies_to_msecs(disk_stat_read(disk, time_in_queue)));
 }
 static struct disk_attribute disk_attr_dev = {
 	.attr = {.name = "dev", .mode = S_IRUGO },
@@ -498,13 +488,13 @@
 		gp->major, n + gp->first_minor, disk_name(gp, n, buf),
 		disk_stat_read(gp, reads), disk_stat_read(gp, read_merges),
 		(unsigned long long)disk_stat_read(gp, read_sectors),
-		jiffies_to_msec(disk_stat_read(gp, read_ticks)),
+		jiffies_to_msecs(disk_stat_read(gp, read_ticks)),
 		disk_stat_read(gp, writes), disk_stat_read(gp, write_merges),
 		(unsigned long long)disk_stat_read(gp, write_sectors),
-		jiffies_to_msec(disk_stat_read(gp, write_ticks)),
+		jiffies_to_msecs(disk_stat_read(gp, write_ticks)),
 		gp->in_flight,
-		jiffies_to_msec(disk_stat_read(gp, io_ticks)),
-		jiffies_to_msec(disk_stat_read(gp, time_in_queue)));
+		jiffies_to_msecs(disk_stat_read(gp, io_ticks)),
+		jiffies_to_msecs(disk_stat_read(gp, time_in_queue)));
 
 	/* now show all non-0 size partitions of it */
 	for (n = 0; n < gp->minors - 1; n++) {
diff -Nru a/drivers/block/ida_cmd.h b/drivers/block/ida_cmd.h
--- a/drivers/block/ida_cmd.h	Sun May 16 01:18:34 2004
+++ b/drivers/block/ida_cmd.h	Sun May 16 01:18:34 2004
@@ -67,7 +67,7 @@
 	__u8	reserved;
 } rhdr_t;
 
-#define SG_MAX			31
+#define SG_MAX			32
 typedef struct {
 	rhdr_t	hdr;
 	sg_t	sg[SG_MAX];
diff -Nru a/drivers/block/ioctl.c b/drivers/block/ioctl.c
--- a/drivers/block/ioctl.c	Sun May 16 01:18:33 2004
+++ b/drivers/block/ioctl.c	Sun May 16 01:18:33 2004
@@ -203,7 +203,8 @@
 	case BLKROSET:
 		if (disk->fops->ioctl) {
 			ret = disk->fops->ioctl(inode, file, cmd, arg);
-			if (ret != -EINVAL)
+			/* -EINVAL to handle old uncorrected drivers */
+			if (ret != -EINVAL && ret != -ENOTTY)
 				return ret;
 		}
 		if (!capable(CAP_SYS_ADMIN))
diff -Nru a/drivers/block/ll_rw_blk.c b/drivers/block/ll_rw_blk.c
--- a/drivers/block/ll_rw_blk.c	Sun May 16 01:18:33 2004
+++ b/drivers/block/ll_rw_blk.c	Sun May 16 01:18:33 2004
@@ -42,6 +42,16 @@
  */
 static kmem_cache_t *request_cachep;
 
+/*
+ * For queue allocation
+ */
+static kmem_cache_t *requestq_cachep;
+
+/*
+ * For io context allocations
+ */
+static kmem_cache_t *iocontext_cachep;
+
 static wait_queue_head_t congestion_wqh[2] = {
 		__WAIT_QUEUE_HEAD_INITIALIZER(congestion_wqh[0]),
 		__WAIT_QUEUE_HEAD_INITIALIZER(congestion_wqh[1])
@@ -70,14 +80,7 @@
  */
 static inline int queue_congestion_on_threshold(struct request_queue *q)
 {
-	int ret;
-
-	ret = q->nr_requests - (q->nr_requests / 8) + 1;
-
-	if (ret > q->nr_requests)
-		ret = q->nr_requests;
-
-	return ret;
+	return q->nr_congestion_on;
 }
 
 /*
@@ -85,14 +88,22 @@
  */
 static inline int queue_congestion_off_threshold(struct request_queue *q)
 {
-	int ret;
+	return q->nr_congestion_off;
+}
 
-	ret = q->nr_requests - (q->nr_requests / 8) - 1;
+static void blk_queue_congestion_threshold(struct request_queue *q)
+{
+	int nr;
 
-	if (ret < 1)
-		ret = 1;
+	nr = q->nr_requests - (q->nr_requests / 8) + 1;
+	if (nr > q->nr_requests)
+		nr = q->nr_requests;
+	q->nr_congestion_on = nr;
 
-	return ret;
+	nr = q->nr_requests - (q->nr_requests / 8) - 1;
+	if (nr < 1)
+		nr = 1;
+	q->nr_congestion_off = nr;
 }
 
 /*
@@ -229,6 +240,7 @@
 	blk_queue_max_sectors(q, MAX_SECTORS);
 	blk_queue_hardsect_size(q, 512);
 	blk_queue_dma_alignment(q, 511);
+	blk_queue_congestion_threshold(q);
 
 	q->unplug_thresh = 4;		/* hmm */
 	q->unplug_delay = (3 * HZ) / 1000;	/* 3 milliseconds */
@@ -265,8 +277,6 @@
 void blk_queue_bounce_limit(request_queue_t *q, u64 dma_addr)
 {
 	unsigned long bounce_pfn = dma_addr >> PAGE_SHIFT;
-	unsigned long mb = dma_addr >> 20;
-	static request_queue_t *last_q;
 
 	/*
 	 * set appropriate bounce gfp mask -- unfortunately we don't have a
@@ -280,19 +290,7 @@
 	} else
 		q->bounce_gfp = GFP_NOIO;
 
-	/*
-	 * keep this for debugging for now...
-	 */
-	if (dma_addr != BLK_BOUNCE_HIGH && q != last_q) {
-		printk("blk: queue %p, ", q);
-		if (dma_addr == BLK_BOUNCE_ANY)
-			printk("no I/O memory limit\n");
-		else
-			printk("I/O limit %luMb (mask 0x%Lx)\n", mb, (long long) dma_addr);
-	}
-
 	q->bounce_pfn = bounce_pfn;
-	last_q = q;
 }
 
 EXPORT_SYMBOL(blk_queue_bounce_limit);
@@ -1142,7 +1140,7 @@
 
 /**
  * generic_unplug_device - fire a request queue
- * @data:    The &request_queue_t in question
+ * @q:    The &request_queue_t in question
  *
  * Description:
  *   Linux uses plugging to build bigger requests queues before letting
@@ -1159,7 +1157,8 @@
 }
 EXPORT_SYMBOL(generic_unplug_device);
 
-static void blk_backing_dev_unplug(struct backing_dev_info *bdi)
+static void blk_backing_dev_unplug(struct backing_dev_info *bdi,
+				   struct page *page)
 {
 	request_queue_t *q = bdi->unplug_io_data;
 
@@ -1206,7 +1205,7 @@
 		clear_bit(QUEUE_FLAG_REENTER, &q->queue_flags);
 	} else {
 		blk_plug_device(q);
-		schedule_work(&q->unplug_work);
+		kblockd_schedule_work(&q->unplug_work);
 	}
 }
 
@@ -1283,7 +1282,7 @@
 	if (blk_queue_tagged(q))
 		blk_queue_free_tags(q);
 
-	kfree(q);
+	kmem_cache_free(requestq_cachep, q);
 }
 
 EXPORT_SYMBOL(blk_cleanup_queue);
@@ -1347,7 +1346,7 @@
 
 request_queue_t *blk_alloc_queue(int gfp_mask)
 {
-	request_queue_t *q = kmalloc(sizeof(*q), gfp_mask);
+	request_queue_t *q = kmem_cache_alloc(requestq_cachep, gfp_mask);
 
 	if (!q)
 		return NULL;
@@ -1436,7 +1435,7 @@
 out_elv:
 	blk_cleanup_queue(q);
 out_init:
-	kfree(q);
+	kmem_cache_free(requestq_cachep, q);
 	return NULL;
 }
 
@@ -2444,7 +2443,7 @@
 
 	if (unlikely(block_dump)) {
 		char b[BDEVNAME_SIZE];
-		printk("%s(%d): %s block %Lu on %s\n",
+		printk(KERN_DEBUG "%s(%d): %s block %Lu on %s\n",
 			current->comm, current->pid,
 			(rw & WRITE) ? "WRITE" : "READ",
 			(unsigned long long)bio->bi_sector,
@@ -2828,6 +2827,16 @@
 	if (!request_cachep)
 		panic("Can't create request pool slab cache\n");
 
+	requestq_cachep = kmem_cache_create("blkdev_queue",
+			sizeof(request_queue_t), 0, 0, NULL, NULL);
+	if (!requestq_cachep)
+		panic("Can't create request queue slab cache\n");
+
+	iocontext_cachep = kmem_cache_create("blkdev_ioc",
+			sizeof(struct io_context), 0, 0, NULL, NULL);
+	if (!iocontext_cachep)
+		panic("Can't create io context slab cache\n");
+
 	blk_max_low_pfn = max_low_pfn;
 	blk_max_pfn = max_pfn;
 	return 0;
@@ -2846,7 +2855,7 @@
 	if (atomic_dec_and_test(&ioc->refcount)) {
 		if (ioc->aic && ioc->aic->dtor)
 			ioc->aic->dtor(ioc->aic);
-		kfree(ioc);
+		kmem_cache_free(iocontext_cachep, ioc);
 	}
 }
 
@@ -2885,7 +2894,7 @@
 	local_irq_save(flags);
 	ret = tsk->io_context;
 	if (ret == NULL) {
-		ret = kmalloc(sizeof(*ret), GFP_ATOMIC);
+		ret = kmem_cache_alloc(iocontext_cachep, GFP_ATOMIC);
 		if (ret) {
 			atomic_set(&ret->refcount, 1);
 			ret->pid = tsk->pid;
@@ -2960,6 +2969,7 @@
 	int ret = queue_var_store(&q->nr_requests, page, count);
 	if (q->nr_requests < BLKDEV_MIN_RQ)
 		q->nr_requests = BLKDEV_MIN_RQ;
+	blk_queue_congestion_threshold(q);
 
 	if (rl->count[READ] >= queue_congestion_on_threshold(q))
 		set_queue_congested(q, READ);
@@ -2987,14 +2997,41 @@
 	return ret;
 }
 
+static ssize_t queue_ra_show(struct request_queue *q, char *page)
+{
+	int ra_kb = q->backing_dev_info.ra_pages << (PAGE_CACHE_SHIFT - 10);
+
+	return queue_var_show(ra_kb, (page));
+}
+
+static ssize_t
+queue_ra_store(struct request_queue *q, const char *page, size_t count)
+{
+	unsigned long ra_kb;
+	ssize_t ret = queue_var_store(&ra_kb, page, count);
+
+	if (ra_kb > (q->max_sectors >> 1))
+		ra_kb = (q->max_sectors >> 1);
+
+	q->backing_dev_info.ra_pages = ra_kb >> (PAGE_CACHE_SHIFT - 10);
+	return ret;
+}
+
 static struct queue_sysfs_entry queue_requests_entry = {
 	.attr = {.name = "nr_requests", .mode = S_IRUGO | S_IWUSR },
 	.show = queue_requests_show,
 	.store = queue_requests_store,
 };
 
+static struct queue_sysfs_entry queue_ra_entry = {
+	.attr = {.name = "read_ahead_kb", .mode = S_IRUGO | S_IWUSR },
+	.show = queue_ra_show,
+	.store = queue_ra_store,
+};
+
 static struct attribute *default_attrs[] = {
 	&queue_requests_entry.attr,
+	&queue_ra_entry.attr,
 	NULL,
 };
 
diff -Nru a/drivers/block/paride/pg.c b/drivers/block/paride/pg.c
--- a/drivers/block/paride/pg.c	Sun May 16 01:18:36 2004
+++ b/drivers/block/paride/pg.c	Sun May 16 01:18:36 2004
@@ -161,6 +161,7 @@
 #include <linux/slab.h>
 #include <linux/mtio.h>
 #include <linux/pg.h>
+#include <linux/device.h>
 
 #include <asm/uaccess.h>
 
@@ -240,6 +241,8 @@
 
 static char pg_scratch[512];	/* scratch block buffer */
 
+static struct class_simple *pg_class;
+
 /* kernel glue structures */
 
 static struct file_operations pg_fops = {
@@ -658,15 +661,19 @@
 
 static int __init pg_init(void)
 {
-	int unit;
+	int unit, err = 0;
 
-	if (disable)
-		return -1;
+	if (disable){
+		err = -1;
+		goto out;
+	}
 
 	pg_init_units();
 
-	if (pg_detect())
-		return -1;
+	if (pg_detect()) {
+		err = -1;
+		goto out;
+	}
 
 	if (register_chrdev(major, name, &pg_fops)) {
 		printk("pg_init: unable to get major number %d\n", major);
@@ -675,18 +682,37 @@
 			if (dev->present)
 				pi_release(dev->pi);
 		}
-		return -1;
+		err = -1;
+		goto out;
+	}
+	pg_class = class_simple_create(THIS_MODULE, "pg");
+	if (IS_ERR(pg_class)) {
+		err = PTR_ERR(pg_class);
+		goto out_chrdev;
 	}
 	devfs_mk_dir("pg");
 	for (unit = 0; unit < PG_UNITS; unit++) {
 		struct pg *dev = &devices[unit];
 		if (dev->present) {
-			devfs_mk_cdev(MKDEV(major, unit),
+			class_simple_device_add(pg_class, MKDEV(major, unit), 
+					NULL, "pg%u", unit);
+			err = devfs_mk_cdev(MKDEV(major, unit),
 				      S_IFCHR | S_IRUSR | S_IWUSR, "pg/%u",
 				      unit);
+			if (err) 
+				goto out_class;
 		}
 	}
-	return 0;
+	err = 0;
+	goto out;
+
+out_class:
+	class_simple_device_remove(MKDEV(major, unit));
+	class_simple_destroy(pg_class);
+out_chrdev:
+	unregister_chrdev(major, "pg");
+out:
+	return err;
 }
 
 static void __exit pg_exit(void)
@@ -695,10 +721,12 @@
 
 	for (unit = 0; unit < PG_UNITS; unit++) {
 		struct pg *dev = &devices[unit];
-		if (dev->present)
+		if (dev->present) {
+			class_simple_device_remove(MKDEV(major, unit));
 			devfs_remove("pg/%u", unit);
+		}
 	}
-
+	class_simple_destroy(pg_class);
 	devfs_remove("pg");
 	unregister_chrdev(major, name);
 
diff -Nru a/drivers/block/paride/pt.c b/drivers/block/paride/pt.c
--- a/drivers/block/paride/pt.c	Sun May 16 01:18:34 2004
+++ b/drivers/block/paride/pt.c	Sun May 16 01:18:34 2004
@@ -145,6 +145,7 @@
 #include <linux/delay.h>
 #include <linux/slab.h>
 #include <linux/mtio.h>
+#include <linux/device.h>
 
 #include <asm/uaccess.h>
 
@@ -260,6 +261,9 @@
 	.release = pt_release,
 };
 
+/* sysfs class support */
+static struct class_simple *pt_class;
+
 static inline int status_reg(struct pi_adapter *pi)
 {
 	return pi_read_regr(pi, 1, 6);
@@ -959,33 +963,62 @@
 
 static int __init pt_init(void)
 {
-	int unit;
+	int unit, err = 0;
 
-	if (disable)
-		return -1;
+	if (disable) {
+		err = -1;
+		goto out;
+	}
 
-	if (pt_detect())
-		return -1;
+	if (pt_detect()) {
+		err = -1;
+		goto out;
+	}
 
 	if (register_chrdev(major, name, &pt_fops)) {
 		printk("pt_init: unable to get major number %d\n", major);
 		for (unit = 0; unit < PT_UNITS; unit++)
 			if (pt[unit].present)
 				pi_release(pt[unit].pi);
-		return -1;
+		err = -1;
+		goto out;
+	}
+	pt_class = class_simple_create(THIS_MODULE, "pt");
+	if (IS_ERR(pt_class)) {
+		err = PTR_ERR(pt_class);
+		goto out_chrdev;
 	}
 
 	devfs_mk_dir("pt");
 	for (unit = 0; unit < PT_UNITS; unit++)
 		if (pt[unit].present) {
-			devfs_mk_cdev(MKDEV(major, unit),
+			class_simple_device_add(pt_class, MKDEV(major, unit), 
+					NULL, "pt%d", unit);
+			err = devfs_mk_cdev(MKDEV(major, unit),
 				      S_IFCHR | S_IRUSR | S_IWUSR,
 				      "pt/%d", unit);
-			devfs_mk_cdev(MKDEV(major, unit + 128),
+			if (err) {
+				class_simple_device_remove(MKDEV(major, unit));
+				goto out_class;
+			}
+			class_simple_device_add(pt_class, MKDEV(major, unit + 128),
+					NULL, "pt%dn", unit);
+			err = devfs_mk_cdev(MKDEV(major, unit + 128),
 				      S_IFCHR | S_IRUSR | S_IWUSR,
 				      "pt/%dn", unit);
+			if (err) {
+				class_simple_device_remove(MKDEV(major, unit + 128));
+				goto out_class;
+			}
 		}
-	return 0;
+	goto out;
+
+out_class:
+	class_simple_destroy(pt_class);
+out_chrdev:
+	unregister_chrdev(major, "pt");
+out:
+	return err;
 }
 
 static void __exit pt_exit(void)
@@ -993,9 +1026,12 @@
 	int unit;
 	for (unit = 0; unit < PT_UNITS; unit++)
 		if (pt[unit].present) {
+			class_simple_device_remove(MKDEV(major, unit));
 			devfs_remove("pt/%d", unit);
+			class_simple_device_remove(MKDEV(major, unit + 128));
 			devfs_remove("pt/%dn", unit);
 		}
+	class_simple_destroy(pt_class);
 	devfs_remove("pt");
 	unregister_chrdev(major, name);
 	for (unit = 0; unit < PT_UNITS; unit++)
diff -Nru a/drivers/block/viodasd.c b/drivers/block/viodasd.c
--- a/drivers/block/viodasd.c	Sun May 16 01:18:34 2004
+++ b/drivers/block/viodasd.c	Sun May 16 01:18:34 2004
@@ -175,6 +175,13 @@
 	struct viodasd_device *d = ino->i_bdev->bd_disk->private_data;
 	HvLpEvent_Rc hvrc;
 	struct viodasd_waitevent we;
+	u16 flags = 0;
+
+	if (d->read_only) {
+		if ((fil != NULL) && (fil->f_mode & FMODE_WRITE))
+			return -EROFS;
+		flags = vioblockflags_ro;
+	}
 
 	init_completion(&we.com);
 
@@ -186,7 +193,7 @@
 			viopath_sourceinst(viopath_hostLp),
 			viopath_targetinst(viopath_hostLp),
 			(u64)(unsigned long)&we, VIOVERSION << 16,
-			((u64)DEVICE_NO(d) << 48) /* | ((u64)flags << 32) */,
+			((u64)DEVICE_NO(d) << 48) | ((u64)flags << 32),
 			0, 0, 0);
 	if (hvrc != 0) {
 		printk(VIOD_KERN_WARNING "HV open failed %d\n", (int)hvrc);
@@ -456,7 +463,9 @@
 	int dev_no = DEVICE_NO(d);
 	struct gendisk *g;
 	struct request_queue *q;
+	u16 flags = 0;
 
+retry:
 	init_completion(&we.com);
 
 	/* Send the open event to OS/400 */
@@ -467,7 +476,7 @@
 			viopath_sourceinst(viopath_hostLp),
 			viopath_targetinst(viopath_hostLp),
 			(u64)(unsigned long)&we, VIOVERSION << 16,
-			((u64)dev_no << 48) | ((u64)vioblockflags_ro << 32),
+			((u64)dev_no << 48) | ((u64)flags<< 32),
 			0, 0, 0);
 	if (hvrc != 0) {
 		printk(VIOD_KERN_WARNING "bad rc on HV open %d\n", (int)hvrc);
@@ -476,8 +485,13 @@
 
 	wait_for_completion(&we.com);
 
-	if (we.rc != 0)
-		return;
+	if (we.rc != 0) {
+		if (flags != 0)
+			return;
+		/* try again with read only flag set */
+		flags = vioblockflags_ro;
+		goto retry;
+	}
 	if (we.max_disk > (MAX_DISKNO - 1)) {
 		static int warned;
 
@@ -498,7 +512,7 @@
 			viopath_sourceinst(viopath_hostLp),
 			viopath_targetinst(viopath_hostLp),
 			0, VIOVERSION << 16,
-			((u64)dev_no << 48) | ((u64)vioblockflags_ro << 32),
+			((u64)dev_no << 48) | ((u64)flags << 32),
 			0, 0, 0);
 	if (hvrc != 0) {
 		printk(VIOD_KERN_WARNING
@@ -506,11 +520,12 @@
 		return;
 	}
 	printk(VIOD_KERN_INFO "disk %d: %lu sectors (%lu MB) "
-			"CHS=%d/%d/%d sector size %d\n",
+			"CHS=%d/%d/%d sector size %d%s\n",
 			dev_no, (unsigned long)(d->size >> 9),
 			(unsigned long)(d->size >> 20),
 			(int)d->cylinders, (int)d->tracks,
-			(int)d->sectors, (int)d->bytes_per_sector);
+			(int)d->sectors, (int)d->bytes_per_sector,
+			d->read_only ? " (RO)" : "");
 	/* create the request queue for the disk */
 	spin_lock_init(&d->q_lock);
 	q = blk_init_queue(do_viodasd_request, &d->q_lock);
diff -Nru a/drivers/bluetooth/bcm203x.c b/drivers/bluetooth/bcm203x.c
--- a/drivers/bluetooth/bcm203x.c	Sun May 16 01:18:33 2004
+++ b/drivers/bluetooth/bcm203x.c	Sun May 16 01:18:33 2004
@@ -174,7 +174,7 @@
 
 	BT_DBG("intf %p id %p", intf, id);
 
-	if (intf->altsetting->desc.bInterfaceNumber != 0)
+	if (intf->cur_altsetting->desc.bInterfaceNumber != 0)
 		return -ENODEV;
 
 	data = kmalloc(sizeof(*data), GFP_KERNEL);
diff -Nru a/drivers/bluetooth/bfusb.c b/drivers/bluetooth/bfusb.c
--- a/drivers/bluetooth/bfusb.c	Sun May 16 01:18:36 2004
+++ b/drivers/bluetooth/bfusb.c	Sun May 16 01:18:36 2004
@@ -98,14 +98,6 @@
 static void bfusb_tx_complete(struct urb *urb, struct pt_regs *regs);
 static void bfusb_rx_complete(struct urb *urb, struct pt_regs *regs);
 
-static inline void bfusb_wait_for_urb(struct urb *urb)
-{
-	while (atomic_read(&urb->count) > 1) {
-		current->state = TASK_UNINTERRUPTIBLE;
-		schedule_timeout((5 * HZ + 999) / 1000);
-	}
-}
-
 static struct urb *bfusb_get_completed(struct bfusb *bfusb)
 {
 	struct sk_buff *skb;
@@ -132,7 +124,6 @@
 	while ((skb = skb_dequeue(&bfusb->pending_q))) {
 		urb = ((struct bfusb_scb *) skb->cb)->urb;
 		usb_unlink_urb(urb);
-		bfusb_wait_for_urb(urb);
 		skb_queue_tail(&bfusb->completed_q, skb);
 	}
 
@@ -661,11 +652,11 @@
 	BT_DBG("intf %p id %p", intf, id);
 
 	/* Check number of endpoints */
-	if (intf->altsetting[0].desc.bNumEndpoints < 2)
+	if (intf->cur_altsetting->desc.bNumEndpoints < 2)
 		return -EIO;
 
-	bulk_out_ep = &intf->altsetting[0].endpoint[0];
-	bulk_in_ep  = &intf->altsetting[0].endpoint[1];
+	bulk_out_ep = &intf->cur_altsetting->endpoint[0];
+	bulk_in_ep  = &intf->cur_altsetting->endpoint[1];
 
 	if (!bulk_out_ep || !bulk_in_ep) {
 		BT_ERR("Bulk endpoints not found");
diff -Nru a/drivers/bluetooth/hci_usb.c b/drivers/bluetooth/hci_usb.c
--- a/drivers/bluetooth/hci_usb.c	Sun May 16 01:18:36 2004
+++ b/drivers/bluetooth/hci_usb.c	Sun May 16 01:18:36 2004
@@ -342,7 +342,7 @@
 
 static inline void hci_usb_wait_for_urb(struct urb *urb)
 {
-	while (atomic_read(&urb->count) > 1) {
+	while (atomic_read(&urb->kref.refcount) > 1) {
 		current->state = TASK_UNINTERRUPTIBLE;
 		schedule_timeout((5 * HZ + 999) / 1000);
 	}
@@ -795,17 +795,15 @@
 int hci_usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
 {
 	struct usb_device *udev = interface_to_usbdev(intf);
-	struct usb_host_endpoint *bulk_out_ep[HCI_MAX_IFACE_NUM];
-	struct usb_host_endpoint *isoc_out_ep[HCI_MAX_IFACE_NUM];
-	struct usb_host_endpoint *bulk_in_ep[HCI_MAX_IFACE_NUM];
-	struct usb_host_endpoint *isoc_in_ep[HCI_MAX_IFACE_NUM];
-	struct usb_host_endpoint *intr_in_ep[HCI_MAX_IFACE_NUM];
+	struct usb_host_endpoint *bulk_out_ep = NULL;
+	struct usb_host_endpoint *bulk_in_ep = NULL;
+	struct usb_host_endpoint *intr_in_ep = NULL;
 	struct usb_host_endpoint  *ep;
 	struct usb_host_interface *uif;
-	struct usb_interface *iface, *isoc_iface;
+	struct usb_interface *isoc_iface;
 	struct hci_usb *husb;
 	struct hci_dev *hdev;
-	int i, a, e, size, ifn, isoc_ifnum, isoc_alts;
+	int i, e, size, isoc_ifnum, isoc_alts;
 
 	BT_DBG("udev %p intf %p", udev, intf);
 
@@ -816,84 +814,38 @@
 			id = match;
 	}
 
-	iface = udev->actconfig->interface[0];
-
 	if (id->driver_info & HCI_IGNORE)
 		return -ENODEV;
 
-	if (intf->altsetting->desc.bInterfaceNumber > 0)
+	if (intf->cur_altsetting->desc.bInterfaceNumber > 0)
 		return -ENODEV;
-
-	/* Check number of endpoints */
-	if (intf->altsetting[0].desc.bNumEndpoints < 3)
-		return -EIO;
-
-	memset(bulk_out_ep, 0, sizeof(bulk_out_ep));
-	memset(isoc_out_ep, 0, sizeof(isoc_out_ep));
-	memset(bulk_in_ep,  0, sizeof(bulk_in_ep));
-	memset(isoc_in_ep,  0, sizeof(isoc_in_ep));
-	memset(intr_in_ep,  0, sizeof(intr_in_ep));
-
-	size = 0; 
-	isoc_iface = NULL;
-	isoc_alts  = isoc_ifnum = 0;
 	
 	/* Find endpoints that we need */
 
-	ifn = min_t(unsigned int, udev->actconfig->desc.bNumInterfaces, HCI_MAX_IFACE_NUM);
-	for (i = 0; i < ifn; i++) {
-		iface = udev->actconfig->interface[i];
-		for (a = 0; a < iface->num_altsetting; a++) {
-			uif = &iface->altsetting[a];
-			for (e = 0; e < uif->desc.bNumEndpoints; e++) {
-				ep = &uif->endpoint[e];
-
-				switch (ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
-				case USB_ENDPOINT_XFER_INT:
-					if (ep->desc.bEndpointAddress & USB_DIR_IN)
-						intr_in_ep[i] = ep;
-					break;
-
-				case USB_ENDPOINT_XFER_BULK:
-					if (ep->desc.bEndpointAddress & USB_DIR_IN)
-						bulk_in_ep[i]  = ep;
-					else
-						bulk_out_ep[i] = ep;
-					break;
-
-#ifdef CONFIG_BT_HCIUSB_SCO
-				case USB_ENDPOINT_XFER_ISOC:
-					if (ep->desc.wMaxPacketSize < size || a > 2)
-						break;
-					size = ep->desc.wMaxPacketSize;
-
-					isoc_iface = iface;
-					isoc_alts  = a;
-					isoc_ifnum = i;
-
-					if (ep->desc.bEndpointAddress & USB_DIR_IN)
-						isoc_in_ep[i]  = ep;
-					else
-						isoc_out_ep[i] = ep;
-					break;
-#endif
-				}
-			}
+	uif = intf->cur_altsetting;
+	for (e = 0; e < uif->desc.bNumEndpoints; e++) {
+		ep = &uif->endpoint[e];
+
+		switch (ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
+		case USB_ENDPOINT_XFER_INT:
+			if (ep->desc.bEndpointAddress & USB_DIR_IN)
+				intr_in_ep = ep;
+			break;
+
+		case USB_ENDPOINT_XFER_BULK:
+			if (ep->desc.bEndpointAddress & USB_DIR_IN)
+				bulk_in_ep  = ep;
+			else
+				bulk_out_ep = ep;
+			break;
 		}
 	}
 
-	if (!bulk_in_ep[0] || !bulk_out_ep[0] || !intr_in_ep[0]) {
+	if (!bulk_in_ep || !bulk_out_ep || !intr_in_ep) {
 		BT_DBG("Bulk endpoints not found");
 		goto done;
 	}
 
-#ifdef CONFIG_BT_HCIUSB_SCO
-	if (!isoc_in_ep[1] || !isoc_out_ep[1]) {
-		BT_DBG("Isoc endpoints not found");
-		isoc_iface = NULL;
-	}
-#endif
-
 	if (!(husb = kmalloc(sizeof(struct hci_usb), GFP_KERNEL))) {
 		BT_ERR("Can't allocate: control structure");
 		goto done;
@@ -902,26 +854,67 @@
 	memset(husb, 0, sizeof(struct hci_usb));
 
 	husb->udev = udev;
-	husb->bulk_out_ep = bulk_out_ep[0];
-	husb->bulk_in_ep  = bulk_in_ep[0];
-	husb->intr_in_ep  = intr_in_ep[0];
+	husb->bulk_out_ep = bulk_out_ep;
+	husb->bulk_in_ep  = bulk_in_ep;
+	husb->intr_in_ep  = intr_in_ep;
 
 	if (id->driver_info & HCI_DIGIANSWER)
 		husb->ctrl_req = HCI_DIGI_REQ;
 	else
 		husb->ctrl_req = HCI_CTRL_REQ;
+	
+	/* Find isochronous endpoints that we can use */
+
+	size = 0; 
+	isoc_iface = NULL;
+	isoc_alts  = 0;
+	isoc_ifnum = 1;
 
 #ifdef CONFIG_BT_HCIUSB_SCO
+	isoc_iface = usb_ifnum_to_if(udev, isoc_ifnum);
 	if (isoc_iface) {
-		BT_DBG("isoc ifnum %d alts %d", isoc_ifnum, isoc_alts);
-		if (usb_set_interface(udev, isoc_ifnum, isoc_alts)) {
-			BT_ERR("Can't set isoc interface settings");
-			isoc_iface = NULL;
-		}
-		usb_driver_claim_interface(&hci_usb_driver, isoc_iface, husb);
-		husb->isoc_iface  = isoc_iface;
-		husb->isoc_in_ep  = isoc_in_ep[isoc_ifnum];
-		husb->isoc_out_ep = isoc_out_ep[isoc_ifnum];
+		int a;
+		struct usb_host_endpoint *isoc_out_ep = NULL;
+		struct usb_host_endpoint *isoc_in_ep = NULL;
+
+		for (a = 0; a < isoc_iface->num_altsetting; a++) {
+			uif = &isoc_iface->altsetting[a];
+			for (e = 0; e < uif->desc.bNumEndpoints; e++) {
+				ep = &uif->endpoint[e];
+
+				switch (ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
+				case USB_ENDPOINT_XFER_ISOC:
+					if (ep->desc.wMaxPacketSize < size ||
+							uif->desc.bAlternateSetting > 2)
+						break;
+					size = ep->desc.wMaxPacketSize;
+
+					isoc_alts = uif->desc.bAlternateSetting;
+
+					if (ep->desc.bEndpointAddress & USB_DIR_IN)
+						isoc_in_ep  = ep;
+					else
+						isoc_out_ep = ep;
+					break;
+				}
+			}
+		}
+
+		if (!isoc_in_ep || !isoc_out_ep)
+			BT_DBG("Isoc endpoints not found");
+		else {
+			BT_DBG("isoc ifnum %d alts %d", isoc_ifnum, isoc_alts);
+			if (usb_driver_claim_interface(&hci_usb_driver, isoc_iface, husb) != 0)
+				BT_ERR("Can't claim isoc interface");
+			else if (usb_set_interface(udev, isoc_ifnum, isoc_alts)) {
+				BT_ERR("Can't set isoc interface settings");
+				usb_driver_release_interface(&hci_usb_driver, isoc_iface);
+			} else {
+				husb->isoc_iface  = isoc_iface;
+				husb->isoc_in_ep  = isoc_in_ep;
+				husb->isoc_out_ep = isoc_out_ep;
+			}
+		}
 	}
 #endif
 	
@@ -967,6 +960,8 @@
 	return 0;
 
 probe_error:
+	if (husb->isoc_iface)
+		usb_driver_release_interface(&hci_usb_driver, husb->isoc_iface);
 	kfree(husb);
 
 done:
@@ -976,11 +971,13 @@
 static void hci_usb_disconnect(struct usb_interface *intf)
 {
 	struct hci_usb *husb = usb_get_intfdata(intf);
-	struct hci_dev *hdev = husb->hdev;
+	struct hci_dev *hdev;
 
-	if (!husb)
+	if (!husb || intf == husb->isoc_iface)
 		return;
+
 	usb_set_intfdata(intf, NULL);
+	hdev = husb->hdev;
 
 	BT_DBG("%s", hdev->name);
 
diff -Nru a/drivers/char/Kconfig b/drivers/char/Kconfig
--- a/drivers/char/Kconfig	Sun May 16 01:18:33 2004
+++ b/drivers/char/Kconfig	Sun May 16 01:18:33 2004
@@ -112,14 +112,12 @@
 	tristate "Cyclades async mux support"
 	depends on SERIAL_NONSTANDARD
 	---help---
-	  This is a driver for a card that gives you many serial ports. You
-	  would need something like this to connect more than two modems to
+	  This driver supports Cyclades Z and Y multiserial boards.
+	  You would need something like this to connect more than two modems to
 	  your Linux box, for instance in order to become a dial-in server.
+
 	  For information about the Cyclades-Z card, read
 	  <file:drivers/char/README.cycladesZ>.
-
-	  As of 1.3.9x kernels, this driver's minor numbers start at 0 instead
-	  of 32.
 
 	  To compile this driver as a module, choose M here: the
 	  module will be called cyclades.
diff -Nru a/drivers/char/Makefile b/drivers/char/Makefile
--- a/drivers/char/Makefile	Sun May 16 01:18:36 2004
+++ b/drivers/char/Makefile	Sun May 16 01:18:36 2004
@@ -39,7 +39,6 @@
 obj-$(CONFIG_AMIGA_BUILTIN_SERIAL) += amiserial.o
 obj-$(CONFIG_SX)		+= sx.o generic_serial.o
 obj-$(CONFIG_RIO)		+= rio/ generic_serial.o
-obj-$(CONFIG_SH_SCI)		+= sh-sci.o generic_serial.o
 obj-$(CONFIG_HVC_CONSOLE)	+= hvc_console.o
 obj-$(CONFIG_RAW_DRIVER)	+= raw.o
 obj-$(CONFIG_SGI_L1_SERIAL)	+= sn_serial.o
@@ -70,7 +69,6 @@
 obj-$(CONFIG_FTAPE) += ftape/
 obj-$(CONFIG_H8) += h8.o
 obj-$(CONFIG_PPDEV) += ppdev.o
-obj-$(CONFIG_DZ) += dz.o
 obj-$(CONFIG_NWBUTTON) += nwbutton.o
 obj-$(CONFIG_NWFLASH) += nwflash.o
 obj-$(CONFIG_SCx200_GPIO) += scx200_gpio.o
diff -Nru a/drivers/char/consolemap.c b/drivers/char/consolemap.c
--- a/drivers/char/consolemap.c	Sun May 16 01:18:36 2004
+++ b/drivers/char/consolemap.c	Sun May 16 01:18:36 2004
@@ -577,6 +577,7 @@
 	dflt = p;
 	return err;
 }
+EXPORT_SYMBOL(con_set_default_unimap);
 
 int
 con_copy_unimap(int dstcon, int srccon)
diff -Nru a/drivers/char/cyclades.c b/drivers/char/cyclades.c
--- a/drivers/char/cyclades.c	Sun May 16 01:18:34 2004
+++ b/drivers/char/cyclades.c	Sun May 16 01:18:34 2004
@@ -681,20 +681,6 @@
 static void cy_throttle (struct tty_struct *tty);
 static void cy_send_xchar (struct tty_struct *tty, char ch);
 
-static unsigned long 
-cy_get_user(unsigned long *addr)
-{
-	unsigned long result = 0;
-	int error = get_user (result, addr);
-	if (error)
-		printk ("cyclades: cy_get_user: error == %d\n", error);
-	return result;
-}
-
-#ifndef MIN
-#define MIN(a,b)        ((a) < (b) ? (a) : (b))
-#endif
-
 #define IS_CYC_Z(card) ((card).num_chips == -1)
 
 #define Z_FPGA_CHECK(card) \
@@ -708,7 +694,7 @@
 			((card).base_addr+ID_ADDRESS))->signature)))
 
 #ifndef SERIAL_XMIT_SIZE
-#define	SERIAL_XMIT_SIZE	(MIN(PAGE_SIZE, 4096))
+#define	SERIAL_XMIT_SIZE	(min(PAGE_SIZE, 4096))
 #endif
 #define WAKEUP_CHARS		256
 
@@ -2680,7 +2666,7 @@
   unsigned char *base_addr;
   int card,chip,channel,index;
   unsigned long orig_jiffies;
-  signed long char_time;
+  int char_time;
 	
     if (serial_paranoia_check(info, tty->name, "cy_wait_until_sent"))
 	return;
@@ -2705,7 +2691,7 @@
     if (timeout < 0)
 	timeout = 0;
     if (timeout)
-	char_time = MIN(char_time, timeout);
+	char_time = min(char_time, timeout);
     /*
      * If the transmitter hasn't cleared in twice the approximate
      * amount of time to send the entire FIFO, it probably won't
@@ -2932,8 +2918,8 @@
 	while (1) {
 	    int c1;
 	    
-	    c = MIN(count, MIN(SERIAL_XMIT_SIZE - info->xmit_cnt - 1,
-				SERIAL_XMIT_SIZE - info->xmit_head));
+	    c = min(count, min((int)(SERIAL_XMIT_SIZE - info->xmit_cnt - 1),
+				(int)(SERIAL_XMIT_SIZE - info->xmit_head)));
 	    if (c <= 0)
 		break;
 
@@ -2945,8 +2931,8 @@
 		break;
 	    }
 	    CY_LOCK(info, flags);
-	    c1 = MIN(c, MIN(SERIAL_XMIT_SIZE - info->xmit_cnt - 1,
-			SERIAL_XMIT_SIZE - info->xmit_head));
+	    c1 = min(c, min((int)(SERIAL_XMIT_SIZE - info->xmit_cnt - 1),
+			(int)(SERIAL_XMIT_SIZE - info->xmit_head)));
 			
 	    if (c1 < c)
 	    	c = c1;
@@ -2962,8 +2948,8 @@
     } else {
 	CY_LOCK(info, flags);
 	while (1) {
-	    c = MIN(count, MIN(SERIAL_XMIT_SIZE - info->xmit_cnt - 1, 
-			SERIAL_XMIT_SIZE - info->xmit_head));
+	    c = min(count, min((int)(SERIAL_XMIT_SIZE - info->xmit_cnt - 1),
+			(int)(SERIAL_XMIT_SIZE - info->xmit_head)));
 	        
 	    if (c <= 0)
 		break;
@@ -5648,8 +5634,10 @@
 #endif /* CONFIG_CYZ_INTR */
 	    )
 		free_irq(cy_card[i].irq, &cy_card[i]);
+#ifdef CONFIG_PCI
 		if (cy_card[i].pdev)
 			pci_release_regions(cy_card[i].pdev);
+#endif
         }
     }
     if (tmp_buf) {
diff -Nru a/drivers/char/drm/ati_pcigart.h b/drivers/char/drm/ati_pcigart.h
--- a/drivers/char/drm/ati_pcigart.h	Sun May 16 01:18:36 2004
+++ b/drivers/char/drm/ati_pcigart.h	Sun May 16 01:18:36 2004
@@ -67,7 +67,7 @@
 	page = virt_to_page( address );
 
 	for ( i = 0 ; i < ATI_PCIGART_TABLE_PAGES ; i++, page++ ) {
-		atomic_inc( &page->count );
+		get_page(page);
 		SetPageReserved( page );
 	}
 
@@ -84,7 +84,7 @@
 	page = virt_to_page( address );
 
 	for ( i = 0 ; i < ATI_PCIGART_TABLE_PAGES ; i++, page++ ) {
-		atomic_dec( &page->count );
+		__put_page(page);
 		ClearPageReserved( page );
 	}
 
diff -Nru a/drivers/char/drm/drm.h b/drivers/char/drm/drm.h
--- a/drivers/char/drm/drm.h	Sun May 16 01:18:34 2004
+++ b/drivers/char/drm/drm.h	Sun May 16 01:18:34 2004
@@ -46,8 +46,8 @@
 #define DRM_IOC_WRITE		_IOC_WRITE
 #define DRM_IOC_READWRITE	_IOC_READ|_IOC_WRITE
 #define DRM_IOC(dir, group, nr, size) _IOC(dir, group, nr, size)
-#elif defined(__FreeBSD__) || defined(__NetBSD__)
-#if defined(__FreeBSD__) && defined(XFree86Server)
+#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
+#if defined(__FreeBSD__) && defined(IN_MODULE)
 /* Prevent name collision when including sys/ioccom.h */
 #undef ioctl
 #include <sys/ioccom.h>
@@ -130,6 +130,18 @@
 	unsigned int	age;
 } drm_tex_region_t;
 
+/**
+ * Hardware lock.
+ *
+ * The lock structure is a simple cache-line aligned integer.  To avoid
+ * processor bus contention on a multiprocessor system, there should not be any
+ * other data stored in the same cache line.
+ */
+typedef struct drm_hw_lock {
+	__volatile__ unsigned int lock;		/**< lock variable */
+	char			  padding[60];	/**< Pad to cache line */
+} drm_hw_lock_t;
+
 
 /**
  * DRM_IOCTL_VERSION ioctl argument type.
@@ -580,6 +592,16 @@
 	unsigned long handle;	/**< Used for mapping / unmapping */
 } drm_scatter_gather_t;
 
+/**
+ * DRM_IOCTL_SET_VERSION ioctl argument type.
+ */
+typedef struct drm_set_version {
+	int drm_di_major;
+	int drm_di_minor;
+	int drm_dd_major;
+	int drm_dd_minor;
+} drm_set_version_t;
+
 
 #define DRM_IOCTL_BASE			'd'
 #define DRM_IO(nr)			_IO(DRM_IOCTL_BASE,nr)
@@ -594,6 +616,7 @@
 #define DRM_IOCTL_GET_MAP               DRM_IOWR(0x04, drm_map_t)
 #define DRM_IOCTL_GET_CLIENT            DRM_IOWR(0x05, drm_client_t)
 #define DRM_IOCTL_GET_STATS             DRM_IOR( 0x06, drm_stats_t)
+#define DRM_IOCTL_SET_VERSION		DRM_IOWR(0x07, drm_set_version_t)
 
 #define DRM_IOCTL_SET_UNIQUE		DRM_IOW( 0x10, drm_unique_t)
 #define DRM_IOCTL_AUTH_MAGIC		DRM_IOW( 0x11, drm_auth_t)
diff -Nru a/drivers/char/drm/drmP.h b/drivers/char/drm/drmP.h
--- a/drivers/char/drm/drmP.h	Sun May 16 01:18:36 2004
+++ b/drivers/char/drm/drmP.h	Sun May 16 01:18:36 2004
@@ -92,8 +92,8 @@
 #ifndef __HAVE_DMA
 #define __HAVE_DMA		0
 #endif
-#ifndef __HAVE_DMA_IRQ
-#define __HAVE_DMA_IRQ		0
+#ifndef __HAVE_IRQ
+#define __HAVE_IRQ		0
 #endif
 #ifndef __HAVE_DMA_WAITLIST
 #define __HAVE_DMA_WAITLIST	0
@@ -148,6 +148,7 @@
 #define DRM_MEM_CTXBITMAP 18
 #define DRM_MEM_STUB      19
 #define DRM_MEM_SGLISTS   20
+#define DRM_MEM_CTXLIST  21
 
 #define DRM_MAX_CTXBITMAP (PAGE_SIZE * 8)
 	
@@ -324,6 +325,7 @@
 #define DRM_BUFCOUNT(x) ((x)->count - DRM_LEFTCOUNT(x))
 #define DRM_WAITCOUNT(dev,idx) DRM_BUFCOUNT(&dev->queuelist[idx]->waitlist)
 
+#define DRM_IF_VERSION(maj, min) (maj << 16 | min)
 /**
  * Get the private SAREA mapping.
  *
@@ -362,11 +364,6 @@
 typedef int drm_ioctl_t( struct inode *inode, struct file *filp,
 			 unsigned int cmd, unsigned long arg );
 
-typedef struct drm_pci_list {
-	u16 vendor;
-	u16 device;
-} drm_pci_list_t;
-
 typedef struct drm_ioctl_desc {
 	drm_ioctl_t	     *func;
 	int		     auth_needed;
@@ -463,18 +460,6 @@
 	drm_freelist_t	  freelist;
 } drm_buf_entry_t;
 
-/**
- * Hardware lock.
- *
- * The lock structure is a simple cache-line aligned integer.  To avoid
- * processor bus contention on a multiprocessor system, there should not be any
- * other data stored in the same cache line.
- */
-typedef struct drm_hw_lock {
-	__volatile__ unsigned int lock;		/**< lock variable */
-	char			  padding[60];	/**< Pad to cache line */
-} drm_hw_lock_t;
-
 /** File private data */
 typedef struct drm_file {
 	int		  authenticated;
@@ -488,6 +473,9 @@
 	struct drm_device *dev;
 	int 		  remove_auth_on_close;
 	unsigned long     lock_count;
+#ifdef DRIVER_FILE_FIELDS
+	DRIVER_FILE_FIELDS;
+#endif
 } drm_file_t;
 
 /** Wait queue */
@@ -602,6 +590,15 @@
 
 typedef drm_map_t drm_local_map_t;
 
+/**
+ * Context handle list
+ */
+typedef struct drm_ctx_list {
+	struct list_head	head;   /**< list head */
+	drm_context_t		handle; /**< context handle */
+	drm_file_t		*tag;   /**< associated fd private data */
+} drm_ctx_list_t;
+
 #if __HAVE_VBL_IRQ
 
 typedef struct drm_vbl_sig {
@@ -622,6 +619,8 @@
 	int		  unique_len;	/**< Length of unique field */
 	dev_t		  device;	/**< Device number for mknod */
 	char		  *devname;	/**< For /proc/interrupts */
+	int		  minor;        /**< Minor device number */
+	int		  if_version;	/**< Highest interface version set */
 
 	int		  blocked;	/**< Blocked due to VC switch? */
 	struct proc_dir_entry *root;	/**< Root for this device's entries */
@@ -660,6 +659,12 @@
 	drm_map_list_t	  *maplist;	/**< Linked list of regions */
 	int		  map_count;	/**< Number of mappable regions */
 
+	/** \name Context handle management */
+	/*@{*/
+	drm_ctx_list_t	  *ctxlist;	/**< Linked list of context handles */
+	int		  ctx_count;	/**< Number of context handles */
+	struct semaphore  ctxlist_sem;	/**< For ctxlist */
+
 	drm_map_t	  **context_sareas; /**< per-context SAREA's */
 	int		  max_context;
 
@@ -679,6 +684,7 @@
 	/** \name Context support */
 	/*@{*/
 	int		  irq;		/**< Interrupt used by board */
+	int		  irq_enabled;	/**< True if irq handler is enabled */
 	__volatile__ long context_flag;	/**< Context swapping flag */
 	__volatile__ long interrupt_flag; /**< Interruption handler flag */
 	__volatile__ long dma_flag;	/**< DMA dispatch flag */
@@ -714,7 +720,12 @@
 #if __REALLY_HAVE_AGP
 	drm_agp_head_t    *agp;	/**< AGP data */
 #endif
-	struct pci_dev *pdev;		/**< PCI device structure */
+
+	struct pci_dev    *pdev;	/**< PCI device structure */
+	int               pci_domain;	/**< PCI bus domain number */
+	int               pci_bus;	/**< PCI bus number */
+	int               pci_slot;	/**< PCI slot number */
+	int               pci_func;	/**< PCI function number */
 #ifdef __alpha__
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,3)
 	struct pci_controler *hose;
@@ -758,18 +769,6 @@
 extern int	     DRM(fasync)(int fd, struct file *filp, int on);
 
 				/* Mapping support (drm_vm.h) */
-extern struct page *DRM(vm_nopage)(struct vm_area_struct *vma,
-				   unsigned long address,
-				   int *type);
-extern struct page *DRM(vm_shm_nopage)(struct vm_area_struct *vma,
-				       unsigned long address,
-				       int *type);
-extern struct page *DRM(vm_dma_nopage)(struct vm_area_struct *vma,
-				       unsigned long address,
-				       int *type);
-extern struct page *DRM(vm_sg_nopage)(struct vm_area_struct *vma,
-				      unsigned long address,
-				      int *type);
 extern void	     DRM(vm_open)(struct vm_area_struct *vma);
 extern void	     DRM(vm_close)(struct vm_area_struct *vma);
 extern void	     DRM(vm_shm_close)(struct vm_area_struct *vma);
@@ -804,8 +803,8 @@
 #endif
 
 				/* Misc. IOCTL support (drm_ioctl.h) */
-extern int	     DRM(irq_busid)(struct inode *inode, struct file *filp,
-				    unsigned int cmd, unsigned long arg);
+extern int	     DRM(irq_by_busid)(struct inode *inode, struct file *filp,
+				       unsigned int cmd, unsigned long arg);
 extern int	     DRM(getunique)(struct inode *inode, struct file *filp,
 				    unsigned int cmd, unsigned long arg);
 extern int	     DRM(setunique)(struct inode *inode, struct file *filp,
@@ -816,6 +815,8 @@
 				    unsigned int cmd, unsigned long arg);
 extern int	     DRM(getstats)(struct inode *inode, struct file *filp,
 				   unsigned int cmd, unsigned long arg);
+extern int	     DRM(setversion)(struct inode *inode, struct file *filp,
+				     unsigned int cmd, unsigned long arg);
 
 				/* Context IOCTL support (drm_context.h) */
 extern int	     DRM(resctx)( struct inode *inode, struct file *filp,
@@ -900,12 +901,17 @@
 extern void	     DRM(dma_takedown)(drm_device_t *dev);
 extern void	     DRM(free_buffer)(drm_device_t *dev, drm_buf_t *buf);
 extern void	     DRM(reclaim_buffers)( struct file *filp );
-#if __HAVE_DMA_IRQ
+#endif /* __HAVE_DMA */
+
+				/* IRQ support (drm_irq.h) */
+#if __HAVE_IRQ || __HAVE_DMA
 extern int           DRM(control)( struct inode *inode, struct file *filp,
 				   unsigned int cmd, unsigned long arg );
-extern int           DRM(irq_install)( drm_device_t *dev, int irq );
+#endif
+#if __HAVE_IRQ
+extern int           DRM(irq_install)( drm_device_t *dev );
 extern int           DRM(irq_uninstall)( drm_device_t *dev );
-extern irqreturn_t   DRM(dma_service)( DRM_IRQ_ARGS );
+extern irqreturn_t   DRM(irq_handler)( DRM_IRQ_ARGS );
 extern void          DRM(driver_irq_preinstall)( drm_device_t *dev );
 extern void          DRM(driver_irq_postinstall)( drm_device_t *dev );
 extern void          DRM(driver_irq_uninstall)( drm_device_t *dev );
@@ -915,12 +921,11 @@
 extern int           DRM(vblank_wait)(drm_device_t *dev, unsigned int *vbl_seq);
 extern void          DRM(vbl_send_signals)( drm_device_t *dev );
 #endif
-#if __HAVE_DMA_IRQ_BH
-extern void          DRM(dma_immediate_bh)( void *dev );
+#if __HAVE_IRQ_BH
+extern void          DRM(irq_immediate_bh)( void *dev );
 #endif
 #endif
 
-#endif /* __HAVE_DMA */
 
 #if __REALLY_HAVE_AGP
 				/* AGP/GART support (drm_agpsupport.h) */
diff -Nru a/drivers/char/drm/drm_agpsupport.h b/drivers/char/drm/drm_agpsupport.h
--- a/drivers/char/drm/drm_agpsupport.h	Sun May 16 01:18:33 2004
+++ b/drivers/char/drm/drm_agpsupport.h	Sun May 16 01:18:33 2004
@@ -103,7 +103,13 @@
 	drm_device_t	 *dev	 = priv->dev;
 	int              retcode;
 
-	if (!dev->agp || dev->agp->acquired || !drm_agp->acquire)
+	if (!dev->agp)
+		return -ENODEV;
+	if (dev->agp->acquired)
+		return -EBUSY;
+	if (!drm_agp->acquire)
+		return -EINVAL;
+	if ( dev->agp->cant_use_aperture )
 		return -EINVAL;
 	if ((retcode = drm_agp->acquire()))
 		return retcode;
diff -Nru a/drivers/char/drm/drm_bufs.h b/drivers/char/drm/drm_bufs.h
--- a/drivers/char/drm/drm_bufs.h	Sun May 16 01:18:34 2004
+++ b/drivers/char/drm/drm_bufs.h	Sun May 16 01:18:34 2004
@@ -147,7 +147,9 @@
 					      MTRR_TYPE_WRCOMB, 1 );
 		}
 #endif
-		map->handle = DRM(ioremap)( map->offset, map->size, dev );
+		if (map->type == _DRM_REGISTERS)
+			map->handle = DRM(ioremap)( map->offset, map->size,
+						    dev );
 		break;
 
 	case _DRM_SHM:
@@ -160,6 +162,12 @@
 		}
 		map->offset = (unsigned long)map->handle;
 		if ( map->flags & _DRM_CONTAINS_LOCK ) {
+			/* Prevent a 2nd X Server from creating a 2nd lock */
+			if (dev->lock.hw_lock != NULL) {
+				vfree( map->handle );
+				DRM(free)( map, sizeof(*map), DRM_MEM_MAPS );
+				return -EBUSY;
+			}
 			dev->sigdata.lock =
 			dev->lock.hw_lock = map->handle; /* Pointer to lock */
 		}
@@ -767,7 +775,7 @@
 }
 #endif /* __HAVE_PCI_DMA */
 
-#ifdef __HAVE_SG
+#if __HAVE_SG
 int DRM(addbufs_sg)( struct inode *inode, struct file *filp,
                      unsigned int cmd, unsigned long arg )
 {
diff -Nru a/drivers/char/drm/drm_context.h b/drivers/char/drm/drm_context.h
--- a/drivers/char/drm/drm_context.h	Sun May 16 01:18:33 2004
+++ b/drivers/char/drm/drm_context.h	Sun May 16 01:18:33 2004
@@ -401,6 +401,7 @@
 {
 	drm_file_t *priv = filp->private_data;
 	drm_device_t *dev = priv->dev;
+	drm_ctx_list_t * ctx_entry;
 	drm_ctx_t ctx;
 
 	if ( copy_from_user( &ctx, (drm_ctx_t *)arg, sizeof(ctx) ) )
@@ -421,6 +422,20 @@
 	if ( ctx.handle != DRM_KERNEL_CONTEXT )
 		DRIVER_CTX_CTOR(ctx.handle); /* XXX: also pass dev ? */
 #endif
+	ctx_entry = DRM(alloc)( sizeof(*ctx_entry), DRM_MEM_CTXLIST );
+	if ( !ctx_entry ) {
+		DRM_DEBUG("out of memory\n");
+		return -ENOMEM;
+	}
+
+	INIT_LIST_HEAD( &ctx_entry->head );
+	ctx_entry->handle = ctx.handle;
+	ctx_entry->tag = priv;
+
+	down( &dev->ctxlist_sem );
+	list_add( &ctx_entry->head, &dev->ctxlist->head );
+	++dev->ctx_count;
+	up( &dev->ctxlist_sem );
 
 	if ( copy_to_user( (drm_ctx_t *)arg, &ctx, sizeof(ctx) ) )
 		return -EFAULT;
@@ -542,6 +557,20 @@
 #endif
 		DRM(ctxbitmap_free)( dev, ctx.handle );
 	}
+
+	down( &dev->ctxlist_sem );
+	if ( !list_empty( &dev->ctxlist->head ) ) {
+		drm_ctx_list_t *pos, *n;
+
+		list_for_each_entry_safe( pos, n, &dev->ctxlist->head, head ) {
+			if ( pos->handle == ctx.handle ) {
+				list_del( &pos->head );
+				DRM(free)( pos, sizeof(*pos), DRM_MEM_CTXLIST );
+				--dev->ctx_count;
+			}
+		}
+	}
+	up( &dev->ctxlist_sem );
 
 	return 0;
 }
diff -Nru a/drivers/char/drm/drm_dma.h b/drivers/char/drm/drm_dma.h
--- a/drivers/char/drm/drm_dma.h	Sun May 16 01:18:35 2004
+++ b/drivers/char/drm/drm_dma.h	Sun May 16 01:18:35 2004
@@ -35,7 +35,6 @@
 
 #include "drmP.h"
 
-#include <linux/interrupt.h>	/* For task queue support */
 
 #ifndef __HAVE_DMA_WAITQUEUE
 #define __HAVE_DMA_WAITQUEUE	0
@@ -43,15 +42,6 @@
 #ifndef __HAVE_DMA_RECLAIM
 #define __HAVE_DMA_RECLAIM	0
 #endif
-#ifndef __HAVE_SHARED_IRQ
-#define __HAVE_SHARED_IRQ	0
-#endif
-
-#if __HAVE_SHARED_IRQ
-#define DRM_IRQ_TYPE		SA_SHIRQ
-#else
-#define DRM_IRQ_TYPE		0
-#endif
 
 #if __HAVE_DMA
 
@@ -214,293 +204,11 @@
 }
 #endif
 
-
-
-
-#if __HAVE_DMA_IRQ
-
-/**
- * Install IRQ handler.
- *
- * \param dev DRM device.
- * \param irq IRQ number.
- *
- * Initializes the IRQ related data, and setups drm_device::vbl_queue. Installs the handler, calling the driver
- * \c DRM(driver_irq_preinstall)() and \c DRM(driver_irq_postinstall)() functions
- * before and after the installation.
- */
-int DRM(irq_install)( drm_device_t *dev, int irq )
-{
-	int ret;
-
-	if ( !irq )
-		return -EINVAL;
-
-	down( &dev->struct_sem );
-
-	/* Driver must have been initialized */
-	if ( !dev->dev_private ) {
-		up( &dev->struct_sem );
-		return -EINVAL;
-	}
-
-	if ( dev->irq ) {
-		up( &dev->struct_sem );
-		return -EBUSY;
-	}
-	dev->irq = irq;
-	up( &dev->struct_sem );
-
-	DRM_DEBUG( "%s: irq=%d\n", __FUNCTION__, irq );
-
-	dev->context_flag = 0;
-	dev->interrupt_flag = 0;
-	dev->dma_flag = 0;
-
-	dev->dma->next_buffer = NULL;
-	dev->dma->next_queue = NULL;
-	dev->dma->this_buffer = NULL;
-
-#if __HAVE_DMA_IRQ_BH
-	INIT_WORK(&dev->work, DRM(dma_immediate_bh), dev);
-#endif
-
-#if __HAVE_VBL_IRQ
-	init_waitqueue_head(&dev->vbl_queue);
-
-	spin_lock_init( &dev->vbl_lock );
-
-	INIT_LIST_HEAD( &dev->vbl_sigs.head );
-
-	dev->vbl_pending = 0;
-#endif
-
-				/* Before installing handler */
-	DRM(driver_irq_preinstall)(dev);
-
-				/* Install handler */
-	ret = request_irq( dev->irq, DRM(dma_service),
-			   DRM_IRQ_TYPE, dev->devname, dev );
-	if ( ret < 0 ) {
-		down( &dev->struct_sem );
-		dev->irq = 0;
-		up( &dev->struct_sem );
-		return ret;
-	}
-
-				/* After installing handler */
-	DRM(driver_irq_postinstall)(dev);
-
-	return 0;
-}
-
-/**
- * Uninstall the IRQ handler.
- *
- * \param dev DRM device.
- *
- * Calls the driver's \c DRM(driver_irq_uninstall)() function, and stops the irq.
- */
-int DRM(irq_uninstall)( drm_device_t *dev )
-{
-	int irq;
-
-	down( &dev->struct_sem );
-	irq = dev->irq;
-	dev->irq = 0;
-	up( &dev->struct_sem );
-
-	if ( !irq )
-		return -EINVAL;
-
-	DRM_DEBUG( "%s: irq=%d\n", __FUNCTION__, irq );
-
-	DRM(driver_irq_uninstall)( dev );
-
-	free_irq( irq, dev );
-
-	return 0;
-}
-
-/**
- * IRQ control ioctl.
- *
- * \param inode device inode.
- * \param filp file pointer.
- * \param cmd command.
- * \param arg user argument, pointing to a drm_control structure.
- * \return zero on success or a negative number on failure.
- *
- * Calls irq_install() or irq_uninstall() according to \p arg.
- */
-int DRM(control)( struct inode *inode, struct file *filp,
-		  unsigned int cmd, unsigned long arg )
-{
-	drm_file_t *priv = filp->private_data;
-	drm_device_t *dev = priv->dev;
-	drm_control_t ctl;
-
-	if ( copy_from_user( &ctl, (drm_control_t *)arg, sizeof(ctl) ) )
-		return -EFAULT;
-
-	switch ( ctl.func ) {
-	case DRM_INST_HANDLER:
-		return DRM(irq_install)( dev, ctl.irq );
-	case DRM_UNINST_HANDLER:
-		return DRM(irq_uninstall)( dev );
-	default:
-		return -EINVAL;
-	}
-}
-
-#if __HAVE_VBL_IRQ
-
-/**
- * Wait for VBLANK.
- *
- * \param inode device inode.
- * \param filp file pointer.
- * \param cmd command.
- * \param data user argument, pointing to a drm_wait_vblank structure.
- * \return zero on success or a negative number on failure.
- *
- * Verifies the IRQ is installed. 
- *
- * If a signal is requested checks if this task has already scheduled the same signal
- * for the same vblank sequence number - nothing to be done in
- * that case. If the number of tasks waiting for the interrupt exceeds 100 the
- * function fails. Otherwise adds a new entry to drm_device::vbl_sigs for this
- * task.
- *
- * If a signal is not requested, then calls vblank_wait().
- */
-int DRM(wait_vblank)( DRM_IOCTL_ARGS )
-{
-	drm_file_t *priv = filp->private_data;
-	drm_device_t *dev = priv->dev;
-	drm_wait_vblank_t vblwait;
-	struct timeval now;
-	int ret = 0;
-	unsigned int flags;
-
-	if (!dev->irq)
-		return -EINVAL;
-
-	DRM_COPY_FROM_USER_IOCTL( vblwait, (drm_wait_vblank_t *)data,
-				  sizeof(vblwait) );
-
-	switch ( vblwait.request.type & ~_DRM_VBLANK_FLAGS_MASK ) {
-	case _DRM_VBLANK_RELATIVE:
-		vblwait.request.sequence += atomic_read( &dev->vbl_received );
-		vblwait.request.type &= ~_DRM_VBLANK_RELATIVE;
-	case _DRM_VBLANK_ABSOLUTE:
-		break;
-	default:
-		return -EINVAL;
-	}
-
-	flags = vblwait.request.type & _DRM_VBLANK_FLAGS_MASK;
-	
-	if ( flags & _DRM_VBLANK_SIGNAL ) {
-		unsigned long irqflags;
-		drm_vbl_sig_t *vbl_sig;
-		
-		vblwait.reply.sequence = atomic_read( &dev->vbl_received );
-
-		spin_lock_irqsave( &dev->vbl_lock, irqflags );
-
-		/* Check if this task has already scheduled the same signal
-		 * for the same vblank sequence number; nothing to be done in
-		 * that case
-		 */
-		list_for_each_entry( vbl_sig, &dev->vbl_sigs.head, head ) {
-			if (vbl_sig->sequence == vblwait.request.sequence
-			    && vbl_sig->info.si_signo == vblwait.request.signal
-			    && vbl_sig->task == current)
-			{
-				spin_unlock_irqrestore( &dev->vbl_lock, irqflags );
-				goto done;
-			}
-		}
-
-		if ( dev->vbl_pending >= 100 ) {
-			spin_unlock_irqrestore( &dev->vbl_lock, irqflags );
-			return -EBUSY;
-		}
-
-		dev->vbl_pending++;
-
-		spin_unlock_irqrestore( &dev->vbl_lock, irqflags );
-
-		if ( !( vbl_sig = DRM_MALLOC( sizeof( drm_vbl_sig_t ) ) ) ) {
-			return -ENOMEM;
-		}
-
-		memset( (void *)vbl_sig, 0, sizeof(*vbl_sig) );
-
-		vbl_sig->sequence = vblwait.request.sequence;
-		vbl_sig->info.si_signo = vblwait.request.signal;
-		vbl_sig->task = current;
-
-		spin_lock_irqsave( &dev->vbl_lock, irqflags );
-
-		list_add_tail( (struct list_head *) vbl_sig, &dev->vbl_sigs.head );
-
-		spin_unlock_irqrestore( &dev->vbl_lock, irqflags );
-	} else {
-		ret = DRM(vblank_wait)( dev, &vblwait.request.sequence );
-
-		do_gettimeofday( &now );
-		vblwait.reply.tval_sec = now.tv_sec;
-		vblwait.reply.tval_usec = now.tv_usec;
-	}
-
-done:
-	DRM_COPY_TO_USER_IOCTL( (drm_wait_vblank_t *)data, vblwait,
-				sizeof(vblwait) );
-
-	return ret;
-}
-
-/**
- * Send the VBLANK signals.
- *
- * \param dev DRM device.
- *
- * Sends a signal for each task in drm_device::vbl_sigs and empties the list.
- *
- * If a signal is not requested, then calls vblank_wait().
+#if !__HAVE_IRQ
+/* This stub DRM_IOCTL_CONTROL handler is for the drivers that used to require
+ * IRQs for DMA but no longer do.  It maintains compatibility with the X Servers
+ * that try to use the control ioctl by simply returning success.
  */
-void DRM(vbl_send_signals)( drm_device_t *dev )
-{
-	struct list_head *list, *tmp;
-	drm_vbl_sig_t *vbl_sig;
-	unsigned int vbl_seq = atomic_read( &dev->vbl_received );
-	unsigned long flags;
-
-	spin_lock_irqsave( &dev->vbl_lock, flags );
-
-	list_for_each_safe( list, tmp, &dev->vbl_sigs.head ) {
-		vbl_sig = list_entry( list, drm_vbl_sig_t, head );
-		if ( ( vbl_seq - vbl_sig->sequence ) <= (1<<23) ) {
-			vbl_sig->info.si_code = vbl_seq;
-			send_sig_info( vbl_sig->info.si_signo, &vbl_sig->info, vbl_sig->task );
-
-			list_del( list );
-
-			DRM_FREE( vbl_sig, sizeof(*vbl_sig) );
-
-			dev->vbl_pending--;
-		}
-	}
-
-	spin_unlock_irqrestore( &dev->vbl_lock, flags );
-}
-
-#endif	/* __HAVE_VBL_IRQ */
-
-#else
-
 int DRM(control)( struct inode *inode, struct file *filp,
 		  unsigned int cmd, unsigned long arg )
 {
@@ -517,7 +225,6 @@
 		return -EINVAL;
 	}
 }
-
-#endif /* __HAVE_DMA_IRQ */
+#endif
 
 #endif /* __HAVE_DMA */
diff -Nru a/drivers/char/drm/drm_drv.h b/drivers/char/drm/drm_drv.h
--- a/drivers/char/drm/drm_drv.h	Sun May 16 01:18:36 2004
+++ b/drivers/char/drm/drm_drv.h	Sun May 16 01:18:36 2004
@@ -58,8 +58,8 @@
 #ifndef __HAVE_CTX_BITMAP
 #define __HAVE_CTX_BITMAP		0
 #endif
-#ifndef __HAVE_DMA_IRQ
-#define __HAVE_DMA_IRQ			0
+#ifndef __HAVE_IRQ
+#define __HAVE_IRQ			0
 #endif
 #ifndef __HAVE_DMA_QUEUE
 #define __HAVE_DMA_QUEUE		0
@@ -126,6 +126,9 @@
 #ifndef DRIVER_IOCTLS
 #define DRIVER_IOCTLS
 #endif
+#ifndef DRIVER_OPEN_HELPER
+#define DRIVER_OPEN_HELPER( priv, dev )
+#endif
 #ifndef DRIVER_FOPS
 #define DRIVER_FOPS				\
 static struct file_operations	DRM(fops) = {	\
@@ -159,15 +162,8 @@
 #undef DRM_OPTIONS_FUNC
 #endif
 
-/**
- * The default number of instances (minor numbers) to initialize.
- */
-#ifndef DRIVER_NUM_CARDS
-#define DRIVER_NUM_CARDS 1
-#endif
-
-static drm_device_t	*DRM(device);
-static int		*DRM(minor);
+#define MAX_DEVICES 4
+static drm_device_t	DRM(device)[MAX_DEVICES];
 static int		DRM(numdevs) = 0;
 
 DRIVER_FOPS;
@@ -177,10 +173,13 @@
 	[DRM_IOCTL_NR(DRM_IOCTL_VERSION)]       = { DRM(version),     0, 0 },
 	[DRM_IOCTL_NR(DRM_IOCTL_GET_UNIQUE)]    = { DRM(getunique),   0, 0 },
 	[DRM_IOCTL_NR(DRM_IOCTL_GET_MAGIC)]     = { DRM(getmagic),    0, 0 },
-	[DRM_IOCTL_NR(DRM_IOCTL_IRQ_BUSID)]     = { DRM(irq_busid),   0, 1 },
+#if __HAVE_IRQ
+	[DRM_IOCTL_NR(DRM_IOCTL_IRQ_BUSID)]     = { DRM(irq_by_busid), 0, 1 },
+#endif
 	[DRM_IOCTL_NR(DRM_IOCTL_GET_MAP)]       = { DRM(getmap),      0, 0 },
 	[DRM_IOCTL_NR(DRM_IOCTL_GET_CLIENT)]    = { DRM(getclient),   0, 0 },
 	[DRM_IOCTL_NR(DRM_IOCTL_GET_STATS)]     = { DRM(getstats),    0, 0 },
+	[DRM_IOCTL_NR(DRM_IOCTL_SET_VERSION)]   = { DRM(setversion),  0, 1 },
 
 	[DRM_IOCTL_NR(DRM_IOCTL_SET_UNIQUE)]    = { DRM(setunique),   1, 1 },
 	[DRM_IOCTL_NR(DRM_IOCTL_BLOCK)]         = { DRM(noop),        1, 1 },
@@ -222,9 +221,9 @@
 	[DRM_IOCTL_NR(DRM_IOCTL_INFO_BUFS)]     = { DRM(infobufs),    1, 0 },
 	[DRM_IOCTL_NR(DRM_IOCTL_MAP_BUFS)]      = { DRM(mapbufs),     1, 0 },
 	[DRM_IOCTL_NR(DRM_IOCTL_FREE_BUFS)]     = { DRM(freebufs),    1, 0 },
-
-	/* The DRM_IOCTL_DMA ioctl should be defined by the driver.
-	 */
+	/* The DRM_IOCTL_DMA ioctl should be defined by the driver. */
+#endif
+#if __HAVE_IRQ || __HAVE_DMA
 	[DRM_IOCTL_NR(DRM_IOCTL_CONTROL)]       = { DRM(control),     1, 1 },
 #endif
 
@@ -330,6 +329,12 @@
 	memset(dev->maplist, 0, sizeof(*dev->maplist));
 	INIT_LIST_HEAD(&dev->maplist->head);
 
+	dev->ctxlist = DRM(alloc)(sizeof(*dev->ctxlist),
+				  DRM_MEM_CTXLIST);
+	if(dev->ctxlist == NULL) return -ENOMEM;
+	memset(dev->ctxlist, 0, sizeof(*dev->ctxlist));
+	INIT_LIST_HEAD(&dev->ctxlist->head);
+
 	dev->vmalist = NULL;
 	dev->sigdata.lock = dev->lock.hw_lock = NULL;
 	init_waitqueue_head( &dev->lock.lock_queue );
@@ -337,7 +342,7 @@
 	dev->queue_reserved = 0;
 	dev->queue_slots = 0;
 	dev->queuelist = NULL;
-	dev->irq = 0;
+	dev->irq_enabled = 0;
 	dev->context_flag = 0;
 	dev->interrupt_flag = 0;
 	dev->dma_flag = 0;
@@ -345,6 +350,7 @@
 	dev->last_switch = 0;
 	dev->last_checked = 0;
 	init_waitqueue_head( &dev->context_wait );
+	dev->if_version = 0;
 
 	dev->ctx_start = 0;
 	dev->lck_start = 0;
@@ -391,8 +397,8 @@
 	DRM_DEBUG( "\n" );
 
 	DRIVER_PRETAKEDOWN();
-#if __HAVE_DMA_IRQ
-	if ( dev->irq ) DRM(irq_uninstall)( dev );
+#if __HAVE_IRQ
+	if ( dev->irq_enabled ) DRM(irq_uninstall)( dev );
 #endif
 
 	down( &dev->struct_sem );
@@ -534,43 +540,104 @@
 	return 0;
 }
 
-/**
- * Figure out how many instances to initialize.
- *
- * \return number of cards found.
- *
- * Searches for every PCI card in \c DRIVER_CARD_LIST with matching vendor and device ids.
- */
-static int drm_count_cards(void)
+#include "drm_pciids.h"
+
+static struct pci_device_id DRM(pciidlist)[] = {
+	DRM(PCI_IDS)
+};
+
+static int DRM(probe)(struct pci_dev *pdev)
 {
-	int num = 0;
-#if defined(DRIVER_CARD_LIST)
-	int i;
-	drm_pci_list_t *l;
-	u16 device, vendor;
-	struct pci_dev *pdev = NULL;
+	drm_device_t *dev;
+#if __HAVE_CTX_BITMAP
+	int retcode;
 #endif
+	int i;
+	int is_compat = 0;
 
 	DRM_DEBUG( "\n" );
 
-#if defined(DRIVER_COUNT_CARDS)
-	num = DRIVER_COUNT_CARDS();
-#elif defined(DRIVER_CARD_LIST)
-	for (i = 0, l = DRIVER_CARD_LIST; l[i].vendor != 0; i++) {
-		pdev = NULL;
-		vendor = l[i].vendor;
-		device = l[i].device;
-		if(device == 0xffff) device = PCI_ANY_ID;
-		if(vendor == 0xffff) vendor = PCI_ANY_ID;
-		while ((pdev = pci_find_device(vendor, device, pdev))) {
-			num++;
+	for (i = 0; DRM(pciidlist)[i].vendor != 0; i++) {
+		if ((DRM(pciidlist)[i].vendor == pdev->vendor) &&
+		    (DRM(pciidlist)[i].device == pdev->device)) {
+			is_compat = 1;
 		}
 	}
+	if (is_compat == 0)
+		return -ENODEV;
+
+	if (DRM(numdevs) >= MAX_DEVICES)
+		return -ENODEV;
+
+	dev = &(DRM(device)[DRM(numdevs)]);
+
+	memset( (void *)dev, 0, sizeof(*dev) );
+	dev->count_lock = SPIN_LOCK_UNLOCKED;
+	init_timer( &dev->timer );
+	sema_init( &dev->struct_sem, 1 );
+	sema_init( &dev->ctxlist_sem, 1 );
+
+	if ((dev->minor = DRM(stub_register)(DRIVER_NAME, &DRM(fops),dev)) < 0)
+		return -EPERM;
+	dev->device = MKDEV(DRM_MAJOR, dev->minor );
+	dev->name   = DRIVER_NAME;
+
+	dev->pdev   = pdev;
+#ifdef __alpha__
+	dev->hose   = pdev->sysdata;
+	dev->pci_domain = dev->hose->bus->number;
 #else
-	num = DRIVER_NUM_CARDS;
+	dev->pci_domain = 0;
+#endif
+	dev->pci_bus = pdev->bus->number;
+	dev->pci_slot = PCI_SLOT(pdev->devfn);
+	dev->pci_func = PCI_FUNC(pdev->devfn);
+	dev->irq = pdev->irq;
+
+	DRIVER_PREINIT();
+
+#if __REALLY_HAVE_AGP
+	dev->agp = DRM(agp_init)();
+#if __MUST_HAVE_AGP
+	if ( dev->agp == NULL ) {
+		DRM_ERROR( "Cannot initialize the agpgart module.\n" );
+		DRM(stub_unregister)(dev->minor);
+		DRM(takedown)( dev );
+		return -EINVAL;
+	}
+#endif
+#if __REALLY_HAVE_MTRR
+	if (dev->agp)
+		dev->agp->agp_mtrr = mtrr_add( dev->agp->agp_info.aper_base,
+					dev->agp->agp_info.aper_size*1024*1024,
+					MTRR_TYPE_WRCOMB,
+					1 );
+#endif
+#endif
+
+#if __HAVE_CTX_BITMAP
+	retcode = DRM(ctxbitmap_init)( dev );
+	if( retcode ) {
+		DRM_ERROR( "Cannot allocate memory for context bitmap.\n" );
+		DRM(stub_unregister)(dev->minor);
+		DRM(takedown)( dev );
+		return retcode;
+ 	}
 #endif
-	DRM_DEBUG("numdevs = %d\n", num);
-	return num;
+	DRM(numdevs)++; /* no errors, mark it reserved */
+	
+	DRM_INFO( "Initialized %s %d.%d.%d %s on minor %d: %s\n",
+		DRIVER_NAME,
+		DRIVER_MAJOR,
+		DRIVER_MINOR,
+		DRIVER_PATCHLEVEL,
+		DRIVER_DATE,
+		dev->minor,
+		pci_pretty_name(pdev));
+
+	DRIVER_POSTINIT();
+
+	return 0;
 }
 
 /**
@@ -579,7 +646,7 @@
  *
  * \return zero on success or a negative number on failure.
  *
- * Allocates and initialize an array of drm_device structures, and attempts to
+ * Initializes an array of drm_device structures, and attempts to
  * initialize all available devices, using consecutive minors, registering the
  * stubs and initializing the AGP device.
  * 
@@ -588,88 +655,19 @@
  */
 static int __init drm_init( void )
 {
+	struct pci_dev *pdev = NULL;
 
-	drm_device_t *dev;
-	int i;
-#if __HAVE_CTX_BITMAP
-	int retcode;
-#endif
 	DRM_DEBUG( "\n" );
 
 #ifdef MODULE
 	DRM(parse_options)( drm_opts );
 #endif
 
-	DRM(numdevs) = drm_count_cards();
-	/* Force at least one instance. */
-	if (DRM(numdevs) <= 0)
-		DRM(numdevs) = 1;
-
-	DRM(device) = kmalloc(sizeof(*DRM(device)) * DRM(numdevs), GFP_KERNEL);
-	if (!DRM(device)) {
-		return -ENOMEM;
-	}
-	DRM(minor) = kmalloc(sizeof(*DRM(minor)) * DRM(numdevs), GFP_KERNEL);
-	if (!DRM(minor)) {
-		kfree(DRM(device));
-		return -ENOMEM;
-	}
-
-	DRIVER_PREINIT();
-
 	DRM(mem_init)();
 
-	for (i = 0; i < DRM(numdevs); i++) {
-		dev = &(DRM(device)[i]);
-		memset( (void *)dev, 0, sizeof(*dev) );
-		dev->count_lock = SPIN_LOCK_UNLOCKED;
-		init_timer( &dev->timer );
-		sema_init( &dev->struct_sem, 1 );
-
-		if ((DRM(minor)[i] = DRM(stub_register)(DRIVER_NAME, &DRM(fops),dev)) < 0)
-			return -EPERM;
-		dev->device = MKDEV(DRM_MAJOR, DRM(minor)[i] );
-		dev->name   = DRIVER_NAME;
-
-#if __REALLY_HAVE_AGP
-		dev->agp = DRM(agp_init)();
-#if __MUST_HAVE_AGP
-		if ( dev->agp == NULL ) {
-			DRM_ERROR( "Cannot initialize the agpgart module.\n" );
-			DRM(stub_unregister)(DRM(minor)[i]);
-			DRM(takedown)( dev );
-			return -EINVAL;
-		}
-#endif
-#if __REALLY_HAVE_MTRR
-		if (dev->agp)
-			dev->agp->agp_mtrr = mtrr_add( dev->agp->agp_info.aper_base,
-				       dev->agp->agp_info.aper_size*1024*1024,
-				       MTRR_TYPE_WRCOMB,
-				       1 );
-#endif
-#endif
-
-#if __HAVE_CTX_BITMAP
-		retcode = DRM(ctxbitmap_init)( dev );
-		if( retcode ) {
-			DRM_ERROR( "Cannot allocate memory for context bitmap.\n" );
-			DRM(stub_unregister)(DRM(minor)[i]);
-			DRM(takedown)( dev );
-			return retcode;
-		}
-#endif
-		DRM_INFO( "Initialized %s %d.%d.%d %s on minor %d\n",
-		  	DRIVER_NAME,
-		  	DRIVER_MAJOR,
-		  	DRIVER_MINOR,
-		  	DRIVER_PATCHLEVEL,
-		  	DRIVER_DATE,
-		  	DRM(minor)[i] );
+	while ((pdev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, pdev)) != NULL) {
+		DRM(probe)(pdev);
 	}
-
-	DRIVER_POSTINIT();
-
 	return 0;
 }
 
@@ -689,10 +687,10 @@
 
 	for (i = DRM(numdevs) - 1; i >= 0; i--) {
 		dev = &(DRM(device)[i]);
-		if ( DRM(stub_unregister)(DRM(minor)[i]) ) {
+		if ( DRM(stub_unregister)(dev->minor) ) {
 			DRM_ERROR( "Cannot unload module\n" );
 		} else {
-			DRM_DEBUG("minor %d unregistered\n", DRM(minor)[i]);
+			DRM_DEBUG("minor %d unregistered\n", dev->minor);
 			if (i == 0) {
 				DRM_INFO( "Module unloaded\n" );
 			}
@@ -722,8 +720,6 @@
 #endif
 	}
 	DRIVER_POSTCLEANUP();
-	kfree(DRM(minor));
-	kfree(DRM(device));
 	DRM(numdevs) = 0;
 }
 
@@ -795,7 +791,7 @@
 	int i;
 
 	for (i = 0; i < DRM(numdevs); i++) {
-		if (iminor(inode) == DRM(minor)[i]) {
+		if (iminor(inode) == DRM(device)[i].minor) {
 			dev = &(DRM(device)[i]);
 			break;
 		}
@@ -907,6 +903,26 @@
 #endif
 
 	DRM(fasync)( -1, filp, 0 );
+
+	down( &dev->ctxlist_sem );
+	if ( !list_empty( &dev->ctxlist->head ) ) {
+		drm_ctx_list_t *pos, *n;
+
+		list_for_each_entry_safe( pos, n, &dev->ctxlist->head, head ) {
+			if ( pos->tag == priv &&
+			     pos->handle != DRM_KERNEL_CONTEXT ) {
+#ifdef DRIVER_CTX_DTOR
+				DRIVER_CTX_DTOR(pos->handle);
+#endif
+#if __HAVE_CTX_BITMAP
+				DRM(ctxbitmap_free)( dev, pos->handle );
+#endif
+				list_del( &pos->head );
+				DRM(free)( pos, sizeof(*pos), DRM_MEM_CTXLIST );
+			}
+		}
+	}
+	up( &dev->ctxlist_sem );
 
 	down( &dev->struct_sem );
 	if ( priv->remove_auth_on_close == 1 ) {
diff -Nru a/drivers/char/drm/drm_fops.h b/drivers/char/drm/drm_fops.h
--- a/drivers/char/drm/drm_fops.h	Sun May 16 01:18:35 2004
+++ b/drivers/char/drm/drm_fops.h	Sun May 16 01:18:35 2004
@@ -72,6 +72,8 @@
 	priv->authenticated = capable(CAP_SYS_ADMIN);
 	priv->lock_count    = 0;
 
+	DRIVER_OPEN_HELPER( priv, dev );
+
 	down(&dev->struct_sem);
 	if (!dev->file_last) {
 		priv->next	= NULL;
diff -Nru a/drivers/char/drm/drm_ioctl.h b/drivers/char/drm/drm_ioctl.h
--- a/drivers/char/drm/drm_ioctl.h	Sun May 16 01:18:34 2004
+++ b/drivers/char/drm/drm_ioctl.h	Sun May 16 01:18:34 2004
@@ -35,69 +35,7 @@
 
 #include "drmP.h"
 
-
-/**
- * Get interrupt from bus id.
- * 
- * \param inode device inode.
- * \param filp file pointer.
- * \param cmd command.
- * \param arg user argument, pointing to a drm_irq_busid structure.
- * \return zero on success or a negative number on failure.
- * 
- * Finds the PCI device with the specified bus id and gets its IRQ number.
- */
-int DRM(irq_busid)(struct inode *inode, struct file *filp,
-		   unsigned int cmd, unsigned long arg)
-{
-	drm_irq_busid_t p;
-	struct pci_dev	*dev;
-
-	if (copy_from_user(&p, (drm_irq_busid_t *)arg, sizeof(p)))
-		return -EFAULT;
-#ifdef __alpha__
-	{
-		int domain = p.busnum >> 8;
-		p.busnum &= 0xff;
-
-		/*
-		 * Find the hose the device is on (the domain number is the
-		 * hose index) and offset the bus by the root bus of that
-		 * hose.
-		 */
-                for(dev = pci_find_device(PCI_ANY_ID,PCI_ANY_ID,NULL);
-                    dev;
-                    dev = pci_find_device(PCI_ANY_ID,PCI_ANY_ID,dev)) {
-			struct pci_controller *hose = dev->sysdata;
-			
-			if (hose->index == domain) {
-				p.busnum += hose->bus->number;
-				break;
-			}
-		}
-	}
-#endif
-	dev = pci_find_slot(p.busnum, PCI_DEVFN(p.devnum, p.funcnum));
-	if (!dev) {
-		DRM_ERROR("pci_find_slot failed for %d:%d:%d\n",
-			  p.busnum, p.devnum, p.funcnum);
-		p.irq = 0;
-		goto out;
-	}			
-	if (pci_enable_device(dev) != 0) {
-		DRM_ERROR("pci_enable_device failed for %d:%d:%d\n",
-			  p.busnum, p.devnum, p.funcnum);
-		p.irq = 0;
-		goto out;
-	}		
-	p.irq = dev->irq;
- out:
-	DRM_DEBUG("%d:%d:%d => IRQ %d\n",
-		  p.busnum, p.devnum, p.funcnum, p.irq);
-	if (copy_to_user((drm_irq_busid_t *)arg, &p, sizeof(p)))
-		return -EFAULT;
-	return 0;
-}
+#include "linux/pci.h"
 
 /**
  * Get the bus id.
@@ -138,8 +76,10 @@
  * \param arg user argument, pointing to a drm_unique structure.
  * \return zero on success or a negative number on failure.
  *
- * Copies the bus id from userspace into drm_device::unique, and searches for
- * the respective PCI device, updating drm_device::pdev.
+ * Copies the bus id from userspace into drm_device::unique, and verifies that
+ * it matches the device this DRM is attached to (EINVAL otherwise).  Deprecated
+ * in interface version 1.1 and will return EBUSY when setversion has requested
+ * version 1.1 or greater.
  */
 int DRM(setunique)(struct inode *inode, struct file *filp,
 		   unsigned int cmd, unsigned long arg)
@@ -147,6 +87,7 @@
 	drm_file_t	 *priv	 = filp->private_data;
 	drm_device_t	 *dev	 = priv->dev;
 	drm_unique_t	 u;
+	int		 domain, bus, slot, func, ret;
 
 	if (dev->unique_len || dev->unique) return -EBUSY;
 
@@ -164,55 +105,42 @@
 
 	dev->devname = DRM(alloc)(strlen(dev->name) + strlen(dev->unique) + 2,
 				  DRM_MEM_DRIVER);
-	if(!dev->devname) {
-		DRM(free)(dev->devname, sizeof(*dev->devname), DRM_MEM_DRIVER);
+	if (!dev->devname)
 		return -ENOMEM;
-	}
+
 	sprintf(dev->devname, "%s@%s", dev->name, dev->unique);
 
-	do {
-		struct pci_dev *pci_dev;
-                int domain, b, d, f;
-                char *p;
- 
-                for(p = dev->unique; p && *p && *p != ':'; p++);
-                if (!p || !*p) break;
-                b = (int)simple_strtoul(p+1, &p, 10);
-                if (*p != ':') break;
-                d = (int)simple_strtoul(p+1, &p, 10);
-                if (*p != ':') break;
-                f = (int)simple_strtoul(p+1, &p, 10);
-                if (*p) break;
- 
-		domain = b >> 8;
-		b &= 0xff;
-
-#ifdef __alpha__
-		/*
-		 * Find the hose the device is on (the domain number is the
-		 * hose index) and offset the bus by the root bus of that
-		 * hose.
-		 */
-                for(pci_dev = pci_find_device(PCI_ANY_ID,PCI_ANY_ID,NULL);
-                    pci_dev;
-                    pci_dev = pci_find_device(PCI_ANY_ID,PCI_ANY_ID,pci_dev)) {
-			struct pci_controller *hose = pci_dev->sysdata;
-			
-			if (hose->index == domain) {
-				b += hose->bus->number;
-				break;
-			}
-		}
-#endif
+	/* Return error if the busid submitted doesn't match the device's actual
+	 * busid.
+	 */
+	ret = sscanf(dev->unique, "PCI:%d:%d:%d", &bus, &slot, &func);
+	if (ret != 3)
+		return DRM_ERR(EINVAL);
+	domain = bus >> 8;
+	bus &= 0xff;
+	
+	if ((domain != dev->pci_domain) ||
+	    (bus != dev->pci_bus) ||
+	    (slot != dev->pci_slot) ||
+	    (func != dev->pci_func))
+		return -EINVAL;
 
-                pci_dev = pci_find_slot(b, PCI_DEVFN(d,f));
-                if (pci_dev) {
-			dev->pdev = pci_dev;
-#ifdef __alpha__
-			dev->hose = pci_dev->sysdata;
-#endif
-		}
-        } while(0);
+	return 0;
+}
+
+static int
+DRM(set_busid)(drm_device_t *dev)
+{
+	if (dev->unique != NULL)
+		return EBUSY;
+
+	dev->unique_len = 20;
+	dev->unique = DRM(alloc)(dev->unique_len + 1, DRM_MEM_DRIVER);
+	if (dev->unique == NULL)
+		return ENOMEM;
+
+	snprintf(dev->unique, dev->unique_len, "pci:%04x:%02x:%02x.%d",
+		dev->pci_domain, dev->pci_bus, dev->pci_slot, dev->pci_func);
 
 	return 0;
 }
@@ -361,5 +289,49 @@
 
 	if (copy_to_user((drm_stats_t *)arg, &stats, sizeof(stats)))
 		return -EFAULT;
+	return 0;
+}
+
+#define DRM_IF_MAJOR	1
+#define DRM_IF_MINOR	2
+
+int DRM(setversion)(DRM_IOCTL_ARGS)
+{
+	DRM_DEVICE;
+	drm_set_version_t sv;
+	drm_set_version_t retv;
+	int if_version;
+
+	DRM_COPY_FROM_USER_IOCTL(sv, (drm_set_version_t *)data, sizeof(sv));
+
+	retv.drm_di_major = DRM_IF_MAJOR;
+	retv.drm_di_minor = DRM_IF_MINOR;
+	retv.drm_dd_major = DRIVER_MAJOR;
+	retv.drm_dd_minor = DRIVER_MINOR;
+
+	DRM_COPY_TO_USER_IOCTL((drm_set_version_t *)data, retv, sizeof(sv));
+
+	if (sv.drm_di_major != -1) {
+		if (sv.drm_di_major != DRM_IF_MAJOR ||
+		    sv.drm_di_minor < 0 || sv.drm_di_minor > DRM_IF_MINOR)
+			return EINVAL;
+		if_version = DRM_IF_VERSION(sv.drm_di_major, sv.drm_dd_minor);
+		dev->if_version = DRM_MAX(if_version, dev->if_version);
+		if (sv.drm_di_minor >= 1) {
+			/*
+			 * Version 1.1 includes tying of DRM to specific device
+			 */
+			DRM(set_busid)(dev);
+		}
+	}
+
+	if (sv.drm_dd_major != -1) {
+		if (sv.drm_dd_major != DRIVER_MAJOR ||
+		    sv.drm_dd_minor < 0 || sv.drm_dd_minor > DRIVER_MINOR)
+			return EINVAL;
+#ifdef DRIVER_SETVERSION
+		DRIVER_SETVERSION(dev, &sv);
+#endif
+	}
 	return 0;
 }
diff -Nru a/drivers/char/drm/drm_irq.h b/drivers/char/drm/drm_irq.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/drivers/char/drm/drm_irq.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,371 @@
+/**
+ * \file drm_irq.h 
+ * IRQ support
+ *
+ * \author Rickard E. (Rik) Faith <faith@valinux.com>
+ * \author Gareth Hughes <gareth@valinux.com>
+ */
+
+/*
+ * Created: Fri Mar 19 14:30:16 1999 by faith@valinux.com
+ *
+ * Copyright 1999, 2000 Precision Insight, Inc., Cedar Park, Texas.
+ * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#include "drmP.h"
+
+#include <linux/interrupt.h>	/* For task queue support */
+
+#ifndef __HAVE_SHARED_IRQ
+#define __HAVE_SHARED_IRQ	0
+#endif
+
+#if __HAVE_SHARED_IRQ
+#define DRM_IRQ_TYPE		SA_SHIRQ
+#else
+#define DRM_IRQ_TYPE		0
+#endif
+
+/**
+ * Get interrupt from bus id.
+ * 
+ * \param inode device inode.
+ * \param filp file pointer.
+ * \param cmd command.
+ * \param arg user argument, pointing to a drm_irq_busid structure.
+ * \return zero on success or a negative number on failure.
+ * 
+ * Finds the PCI device with the specified bus id and gets its IRQ number.
+ * This IOCTL is deprecated, and will now return EINVAL for any busid not equal
+ * to that of the device that this DRM instance attached to.
+ */
+int DRM(irq_by_busid)(struct inode *inode, struct file *filp,
+		   unsigned int cmd, unsigned long arg)
+{
+	drm_file_t *priv = filp->private_data;
+	drm_device_t *dev = priv->dev;
+	drm_irq_busid_t p;
+
+	if (copy_from_user(&p, (drm_irq_busid_t *)arg, sizeof(p)))
+		return -EFAULT;
+
+	if ((p.busnum >> 8) != dev->pci_domain ||
+	    (p.busnum & 0xff) != dev->pci_bus ||
+	    p.devnum != dev->pci_slot ||
+	    p.funcnum != dev->pci_func)
+		return -EINVAL;
+
+	p.irq = dev->irq;
+
+	DRM_DEBUG("%d:%d:%d => IRQ %d\n",
+		  p.busnum, p.devnum, p.funcnum, p.irq);
+	if (copy_to_user((drm_irq_busid_t *)arg, &p, sizeof(p)))
+		return -EFAULT;
+	return 0;
+}
+
+#if __HAVE_IRQ
+
+/**
+ * Install IRQ handler.
+ *
+ * \param dev DRM device.
+ * \param irq IRQ number.
+ *
+ * Initializes the IRQ related data, and setups drm_device::vbl_queue. Installs the handler, calling the driver
+ * \c DRM(driver_irq_preinstall)() and \c DRM(driver_irq_postinstall)() functions
+ * before and after the installation.
+ */
+int DRM(irq_install)( drm_device_t *dev )
+{
+	int ret;
+ 
+	if ( dev->irq == 0 )
+		return -EINVAL;
+
+	down( &dev->struct_sem );
+
+	/* Driver must have been initialized */
+	if ( !dev->dev_private ) {
+		up( &dev->struct_sem );
+		return -EINVAL;
+	}
+
+	if ( dev->irq_enabled ) {
+		up( &dev->struct_sem );
+		return -EBUSY;
+	}
+	dev->irq_enabled = 1;
+	up( &dev->struct_sem );
+
+	DRM_DEBUG( "%s: irq=%d\n", __FUNCTION__, dev->irq );
+
+#if __HAVE_DMA
+	dev->dma->next_buffer = NULL;
+	dev->dma->next_queue = NULL;
+	dev->dma->this_buffer = NULL;
+#endif
+
+#if __HAVE_IRQ_BH
+	INIT_WORK(&dev->work, DRM(irq_immediate_bh), dev);
+#endif
+
+#if __HAVE_VBL_IRQ
+	init_waitqueue_head(&dev->vbl_queue);
+
+	spin_lock_init( &dev->vbl_lock );
+
+	INIT_LIST_HEAD( &dev->vbl_sigs.head );
+
+	dev->vbl_pending = 0;
+#endif
+
+				/* Before installing handler */
+	DRM(driver_irq_preinstall)(dev);
+
+				/* Install handler */
+	ret = request_irq( dev->irq, DRM(irq_handler),
+			   DRM_IRQ_TYPE, dev->devname, dev );
+	if ( ret < 0 ) {
+		down( &dev->struct_sem );
+		dev->irq_enabled = 0;
+		up( &dev->struct_sem );
+		return ret;
+	}
+
+				/* After installing handler */
+	DRM(driver_irq_postinstall)(dev);
+
+	return 0;
+}
+
+/**
+ * Uninstall the IRQ handler.
+ *
+ * \param dev DRM device.
+ *
+ * Calls the driver's \c DRM(driver_irq_uninstall)() function, and stops the irq.
+ */
+int DRM(irq_uninstall)( drm_device_t *dev )
+{
+	int irq_enabled;
+
+	down( &dev->struct_sem );
+	irq_enabled = dev->irq_enabled;
+	dev->irq_enabled = 0;
+	up( &dev->struct_sem );
+
+	if ( !irq_enabled )
+		return -EINVAL;
+
+	DRM_DEBUG( "%s: irq=%d\n", __FUNCTION__, dev->irq );
+
+	DRM(driver_irq_uninstall)( dev );
+
+	free_irq( dev->irq, dev );
+
+	return 0;
+}
+
+/**
+ * IRQ control ioctl.
+ *
+ * \param inode device inode.
+ * \param filp file pointer.
+ * \param cmd command.
+ * \param arg user argument, pointing to a drm_control structure.
+ * \return zero on success or a negative number on failure.
+ *
+ * Calls irq_install() or irq_uninstall() according to \p arg.
+ */
+int DRM(control)( struct inode *inode, struct file *filp,
+		  unsigned int cmd, unsigned long arg )
+{
+	drm_file_t *priv = filp->private_data;
+	drm_device_t *dev = priv->dev;
+	drm_control_t ctl;
+
+	if ( copy_from_user( &ctl, (drm_control_t *)arg, sizeof(ctl) ) )
+		return -EFAULT;
+
+	switch ( ctl.func ) {
+	case DRM_INST_HANDLER:
+		if (dev->if_version < DRM_IF_VERSION(1, 2) &&
+		    ctl.irq != dev->irq)
+			return -EINVAL;
+		return DRM(irq_install)( dev );
+	case DRM_UNINST_HANDLER:
+		return DRM(irq_uninstall)( dev );
+	default:
+		return -EINVAL;
+	}
+}
+
+#if __HAVE_VBL_IRQ
+
+/**
+ * Wait for VBLANK.
+ *
+ * \param inode device inode.
+ * \param filp file pointer.
+ * \param cmd command.
+ * \param data user argument, pointing to a drm_wait_vblank structure.
+ * \return zero on success or a negative number on failure.
+ *
+ * Verifies the IRQ is installed. 
+ *
+ * If a signal is requested checks if this task has already scheduled the same signal
+ * for the same vblank sequence number - nothing to be done in
+ * that case. If the number of tasks waiting for the interrupt exceeds 100 the
+ * function fails. Otherwise adds a new entry to drm_device::vbl_sigs for this
+ * task.
+ *
+ * If a signal is not requested, then calls vblank_wait().
+ */
+int DRM(wait_vblank)( DRM_IOCTL_ARGS )
+{
+	drm_file_t *priv = filp->private_data;
+	drm_device_t *dev = priv->dev;
+	drm_wait_vblank_t vblwait;
+	struct timeval now;
+	int ret = 0;
+	unsigned int flags;
+
+	if (!dev->irq)
+		return -EINVAL;
+
+	DRM_COPY_FROM_USER_IOCTL( vblwait, (drm_wait_vblank_t *)data,
+				  sizeof(vblwait) );
+
+	switch ( vblwait.request.type & ~_DRM_VBLANK_FLAGS_MASK ) {
+	case _DRM_VBLANK_RELATIVE:
+		vblwait.request.sequence += atomic_read( &dev->vbl_received );
+		vblwait.request.type &= ~_DRM_VBLANK_RELATIVE;
+	case _DRM_VBLANK_ABSOLUTE:
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	flags = vblwait.request.type & _DRM_VBLANK_FLAGS_MASK;
+	
+	if ( flags & _DRM_VBLANK_SIGNAL ) {
+		unsigned long irqflags;
+		drm_vbl_sig_t *vbl_sig;
+		
+		vblwait.reply.sequence = atomic_read( &dev->vbl_received );
+
+		spin_lock_irqsave( &dev->vbl_lock, irqflags );
+
+		/* Check if this task has already scheduled the same signal
+		 * for the same vblank sequence number; nothing to be done in
+		 * that case
+		 */
+		list_for_each_entry( vbl_sig, &dev->vbl_sigs.head, head ) {
+			if (vbl_sig->sequence == vblwait.request.sequence
+			    && vbl_sig->info.si_signo == vblwait.request.signal
+			    && vbl_sig->task == current)
+			{
+				spin_unlock_irqrestore( &dev->vbl_lock, irqflags );
+				goto done;
+			}
+		}
+
+		if ( dev->vbl_pending >= 100 ) {
+			spin_unlock_irqrestore( &dev->vbl_lock, irqflags );
+			return -EBUSY;
+		}
+
+		dev->vbl_pending++;
+
+		spin_unlock_irqrestore( &dev->vbl_lock, irqflags );
+
+		if ( !( vbl_sig = DRM_MALLOC( sizeof( drm_vbl_sig_t ) ) ) ) {
+			return -ENOMEM;
+		}
+
+		memset( (void *)vbl_sig, 0, sizeof(*vbl_sig) );
+
+		vbl_sig->sequence = vblwait.request.sequence;
+		vbl_sig->info.si_signo = vblwait.request.signal;
+		vbl_sig->task = current;
+
+		spin_lock_irqsave( &dev->vbl_lock, irqflags );
+
+		list_add_tail( (struct list_head *) vbl_sig, &dev->vbl_sigs.head );
+
+		spin_unlock_irqrestore( &dev->vbl_lock, irqflags );
+	} else {
+		ret = DRM(vblank_wait)( dev, &vblwait.request.sequence );
+
+		do_gettimeofday( &now );
+		vblwait.reply.tval_sec = now.tv_sec;
+		vblwait.reply.tval_usec = now.tv_usec;
+	}
+
+done:
+	DRM_COPY_TO_USER_IOCTL( (drm_wait_vblank_t *)data, vblwait,
+				sizeof(vblwait) );
+
+	return ret;
+}
+
+/**
+ * Send the VBLANK signals.
+ *
+ * \param dev DRM device.
+ *
+ * Sends a signal for each task in drm_device::vbl_sigs and empties the list.
+ *
+ * If a signal is not requested, then calls vblank_wait().
+ */
+void DRM(vbl_send_signals)( drm_device_t *dev )
+{
+	struct list_head *list, *tmp;
+	drm_vbl_sig_t *vbl_sig;
+	unsigned int vbl_seq = atomic_read( &dev->vbl_received );
+	unsigned long flags;
+
+	spin_lock_irqsave( &dev->vbl_lock, flags );
+
+	list_for_each_safe( list, tmp, &dev->vbl_sigs.head ) {
+		vbl_sig = list_entry( list, drm_vbl_sig_t, head );
+		if ( ( vbl_seq - vbl_sig->sequence ) <= (1<<23) ) {
+			vbl_sig->info.si_code = vbl_seq;
+			send_sig_info( vbl_sig->info.si_signo, &vbl_sig->info, vbl_sig->task );
+
+			list_del( list );
+
+			DRM_FREE( vbl_sig, sizeof(*vbl_sig) );
+
+			dev->vbl_pending--;
+		}
+	}
+
+	spin_unlock_irqrestore( &dev->vbl_lock, flags );
+}
+
+#endif	/* __HAVE_VBL_IRQ */
+
+#endif /* __HAVE_IRQ */
diff -Nru a/drivers/char/drm/drm_memory_debug.h b/drivers/char/drm/drm_memory_debug.h
--- a/drivers/char/drm/drm_memory_debug.h	Sun May 16 01:18:33 2004
+++ b/drivers/char/drm/drm_memory_debug.h	Sun May 16 01:18:33 2004
@@ -67,6 +67,7 @@
 	[DRM_MEM_TOTALAGP]  = { "totalagp" },
 	[DRM_MEM_BOUNDAGP]  = { "boundagp" },
 	[DRM_MEM_CTXBITMAP] = { "ctxbitmap"},
+	[DRM_MEM_CTXLIST]   = { "ctxlist"  },
 	[DRM_MEM_STUB]      = { "stub"     },
 	{ NULL, 0, }		/* Last entry must be null */
 };
diff -Nru a/drivers/char/drm/drm_os_linux.h b/drivers/char/drm/drm_os_linux.h
--- a/drivers/char/drm/drm_os_linux.h	Sun May 16 01:18:36 2004
+++ b/drivers/char/drm/drm_os_linux.h	Sun May 16 01:18:36 2004
@@ -62,14 +62,20 @@
 	verify_area( VERIFY_READ, uaddr, size )
 #define DRM_COPY_FROM_USER_UNCHECKED(arg1, arg2, arg3) 	\
 	__copy_from_user(arg1, arg2, arg3)
+#define DRM_COPY_TO_USER_UNCHECKED(arg1, arg2, arg3)	\
+	__copy_to_user(arg1, arg2, arg3)
 #define DRM_GET_USER_UNCHECKED(val, uaddr)		\
 	__get_user(val, uaddr)
+#define DRM_PUT_USER_UNCHECKED(uaddr, val)		\
+	__put_user(val, uaddr)
 
 
 /** 'malloc' without the overhead of DRM(alloc)() */
 #define DRM_MALLOC(x) kmalloc(x, GFP_KERNEL)
 /** 'free' without the overhead of DRM(free)() */
 #define DRM_FREE(x,size) kfree(x)
+
+#define DRM_GET_PRIV_WITH_RETURN(_priv, _filp) _priv = _filp->private_data
 
 /** 
  * Get the pointer to the SAREA.
diff -Nru a/drivers/char/drm/drm_pciids.h b/drivers/char/drm/drm_pciids.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/drivers/char/drm/drm_pciids.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,203 @@
+/*
+   This file is auto-generated from the drm_pciids.txt in the DRM CVS
+   Please contact dri-devel@lists.sf.net to add new cards to this list
+*/
+#define radeon_PCI_IDS \
+	{0x1002, 0x4136, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x4137, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x4237, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x4242, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x4242, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x4336, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x4337, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x4437, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x4964, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x4965, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x4966, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x4967, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x4C57, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x4C58, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x4C59, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x4C5A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x4C64, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x4C65, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x4C66, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x4C67, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5144, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5145, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5146, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5147, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5148, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5149, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x514A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x514B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x514C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x514D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x514E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x514F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5157, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5158, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5159, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x515A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5168, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5169, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x516A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x516B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x516C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5834, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5835, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5836, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5837, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5960, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5961, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5962, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5963, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5964, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5968, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5969, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x596A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x596B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5c61, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5c62, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5c63, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5c64, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0, 0, 0}
+
+#define r128_PCI_IDS \
+	{0x1002, 0x4c45, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x4c46, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x4d46, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x4d4c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5041, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5042, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5043, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5044, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5045, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5046, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5047, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5048, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5049, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x504A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x504B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x504C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x504D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x504E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x504F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5050, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5051, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5052, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5053, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5054, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5055, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5056, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5057, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5058, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5245, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5246, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5247, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x524b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x524c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x534d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5446, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x544C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x5452, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0, 0, 0}
+
+#define mga_PCI_IDS \
+	{0x102b, 0x0521, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x102b, 0x0525, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x102b, 0x2527, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0, 0, 0}
+
+#define mach64_PCI_IDS \
+	{0x1002, 0x4749, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x4750, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x4751, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x4742, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x4744, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x4c49, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x4c50, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x4c51, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x4c42, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x4c44, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x474c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x474f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x4752, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x4753, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x474d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x474e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x4c52, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x4c53, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x4c4d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1002, 0x4c4e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0, 0, 0}
+
+#define sisdrv_PCI_IDS \
+	{0x1039, 0x0300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1039, 0x5300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1039, 0x6300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1039, 0x7300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0, 0, 0}
+
+#define tdfx_PCI_IDS \
+	{0x121a, 0x0003, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x121a, 0x0004, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x121a, 0x0005, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x121a, 0x0007, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x121a, 0x0009, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x121a, 0x000b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0, 0, 0}
+
+#define viadrv_PCI_IDS \
+	{0x1106, 0x3022, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1106, 0x3122, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1106, 0x7205, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x1106, 0x7204, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0, 0, 0}
+
+#define i810_PCI_IDS \
+	{0x8086, 0x7121, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x8086, 0x7123, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x8086, 0x7125, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x8086, 0x1132, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0, 0, 0}
+
+#define i830_PCI_IDS \
+	{0x8086, 0x3577, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x8086, 0x2562, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x8086, 0x3582, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x8086, 0x2572, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0, 0, 0}
+
+#define gamma_PCI_IDS \
+	{0x3d3d, 0x0008, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0, 0, 0}
+
+#define savage_PCI_IDS \
+	{0x5333, 0x8a22, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x5333, 0x8a23, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x5333, 0x8c10, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x5333, 0x8c11, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x5333, 0x8c12, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x5333, 0x8c13, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x5333, 0x8c20, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x5333, 0x8c21, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x5333, 0x8c22, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x5333, 0x8c24, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x5333, 0x8c26, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x5333, 0x8c2a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x5333, 0x8c2b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x5333, 0x8c2c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x5333, 0x8c2d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x5333, 0x8c2e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x5333, 0x8c2f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x5333, 0x8a25, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x5333, 0x8a26, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x5333, 0x8d01, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x5333, 0x8d02, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0x5333, 0x8d04, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
+	{0, 0, 0}
+
+#define ffb_PCI_IDS \
+	{0, 0, 0}
+
diff -Nru a/drivers/char/drm/drm_sarea.h b/drivers/char/drm/drm_sarea.h
--- a/drivers/char/drm/drm_sarea.h	Sun May 16 01:18:37 2004
+++ b/drivers/char/drm/drm_sarea.h	Sun May 16 01:18:37 2004
@@ -32,8 +32,22 @@
 #ifndef _DRM_SAREA_H_
 #define _DRM_SAREA_H_
 
+#include "drm.h"
+
+/* SAREA area needs to be at least a page */
+#if defined(__alpha__)
+#define SAREA_MAX                       0x2000
+#elif defined(__ia64__)
+#define SAREA_MAX                       0x10000         /* 64kB */
+#else
+/* Intel 830M driver needs at least 8k SAREA */
+#define SAREA_MAX                       0x2000
+#endif
+
 /** Maximum number of drawables in the SAREA */
 #define SAREA_MAX_DRAWABLES 		256
+
+#define SAREA_DRAWABLE_CLAIMED_ENTRY    0x80000000
 
 /** SAREA drawable */
 typedef struct drm_sarea_drawable {
diff -Nru a/drivers/char/drm/drm_stub.h b/drivers/char/drm/drm_stub.h
--- a/drivers/char/drm/drm_stub.h	Sun May 16 01:18:36 2004
+++ b/drivers/char/drm/drm_stub.h	Sun May 16 01:18:36 2004
@@ -209,8 +209,8 @@
 		ret2 = DRM(stub_info).info_register(name, fops, dev);
 		if (ret2) {
 			if (!ret1) {
-			unregister_chrdev(DRM_MAJOR, "drm");
-			class_simple_destroy(drm_class);
+				unregister_chrdev(DRM_MAJOR, "drm");
+				class_simple_destroy(drm_class);
 			}
 			if (!i)
 				inter_module_unregister("drm");
diff -Nru a/drivers/char/drm/drm_vm.h b/drivers/char/drm/drm_vm.h
--- a/drivers/char/drm/drm_vm.h	Sun May 16 01:18:37 2004
+++ b/drivers/char/drm/drm_vm.h	Sun May 16 01:18:37 2004
@@ -35,48 +35,19 @@
 
 #include "drmP.h"
 
-/** AGP virtual memory operations */
-struct vm_operations_struct   DRM(vm_ops) = {
-	.nopage = DRM(vm_nopage),
-	.open	= DRM(vm_open),
-	.close	= DRM(vm_close),
-};
-
-/** Shared virtual memory operations */
-struct vm_operations_struct   DRM(vm_shm_ops) = {
-	.nopage = DRM(vm_shm_nopage),
-	.open	= DRM(vm_open),
-	.close	= DRM(vm_shm_close),
-};
-
-/** DMA virtual memory operations */
-struct vm_operations_struct   DRM(vm_dma_ops) = {
-	.nopage = DRM(vm_dma_nopage),
-	.open	= DRM(vm_open),
-	.close	= DRM(vm_close),
-};
-
-/** Scatter-gather virtual memory operations */
-struct vm_operations_struct   DRM(vm_sg_ops) = {
-	.nopage = DRM(vm_sg_nopage),
-	.open   = DRM(vm_open),
-	.close  = DRM(vm_close),
-};
 
 /**
  * \c nopage method for AGP virtual memory.
  *
  * \param vma virtual memory area.
  * \param address access address.
- * \param write_access sharing.
  * \return pointer to the page structure.
  * 
  * Find the right map and if it's AGP memory find the real physical page to
  * map, get the page, increment the use count and return it.
  */
-struct page *DRM(vm_nopage)(struct vm_area_struct *vma,
-			    unsigned long address,
-			    int *type)
+static __inline__ struct page *DRM(do_vm_nopage)(struct vm_area_struct *vma,
+						 unsigned long address)
 {
 #if __REALLY_HAVE_AGP
 	drm_file_t *priv  = vma->vm_file->private_data;
@@ -131,10 +102,8 @@
 
 		DRM_DEBUG("baddr = 0x%lx page = 0x%p, offset = 0x%lx, count=%d\n",
 			  baddr, __va(agpmem->memory->memory[offset]), offset,
-			  atomic_read(&page->count));
+			  page_count(page));
 
-		if (type)
-			*type = VM_FAULT_MINOR;
 		return page;
         }
 vm_nopage_error:
@@ -148,15 +117,13 @@
  *
  * \param vma virtual memory area.
  * \param address access address.
- * \param write_access sharing.
  * \return pointer to the page structure.
  * 
  * Get the the mapping, find the real physical page to map, get the page, and
  * return it.
  */
-struct page *DRM(vm_shm_nopage)(struct vm_area_struct *vma,
-				unsigned long address,
-				int *type)
+static __inline__ struct page *DRM(do_vm_shm_nopage)(struct vm_area_struct *vma,
+						     unsigned long address)
 {
 	drm_map_t	 *map	 = (drm_map_t *)vma->vm_private_data;
 	unsigned long	 offset;
@@ -172,8 +139,6 @@
 	if (!page)
 		return NOPAGE_OOM;
 	get_page(page);
-	if (type)
-		*type = VM_FAULT_MINOR;
 
 	DRM_DEBUG("shm_nopage 0x%lx\n", address);
 	return page;
@@ -265,14 +230,12 @@
  *
  * \param vma virtual memory area.
  * \param address access address.
- * \param write_access sharing.
  * \return pointer to the page structure.
  * 
  * Determine the page number from the page offset and get it from drm_device_dma::pagelist.
  */
-struct page *DRM(vm_dma_nopage)(struct vm_area_struct *vma,
-				unsigned long address,
-				int *type)
+static __inline__ struct page *DRM(do_vm_dma_nopage)(struct vm_area_struct *vma,
+						     unsigned long address)
 {
 	drm_file_t	 *priv	 = vma->vm_file->private_data;
 	drm_device_t	 *dev	 = priv->dev;
@@ -291,8 +254,6 @@
 			     (offset & (~PAGE_MASK))));
 
 	get_page(page);
-	if (type)
-		*type = VM_FAULT_MINOR;
 
 	DRM_DEBUG("dma_nopage 0x%lx (page %lu)\n", address, page_nr);
 	return page;
@@ -303,14 +264,12 @@
  *
  * \param vma virtual memory area.
  * \param address access address.
- * \param write_access sharing.
  * \return pointer to the page structure.
  * 
  * Determine the map offset from the page offset and get it from drm_sg_mem::pagelist.
  */
-struct page *DRM(vm_sg_nopage)(struct vm_area_struct *vma,
-			       unsigned long address,
-			       int *type)
+static __inline__ struct page *DRM(do_vm_sg_nopage)(struct vm_area_struct *vma,
+						    unsigned long address)
 {
 	drm_map_t        *map    = (drm_map_t *)vma->vm_private_data;
 	drm_file_t *priv = vma->vm_file->private_data;
@@ -331,11 +290,98 @@
 	page_offset = (offset >> PAGE_SHIFT) + (map_offset >> PAGE_SHIFT);
 	page = entry->pagelist[page_offset];
 	get_page(page);
-	if (type)
-		*type = VM_FAULT_MINOR;
 
 	return page;
 }
+
+
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,0)
+
+static struct page *DRM(vm_nopage)(struct vm_area_struct *vma,
+				   unsigned long address,
+				   int *type) {
+	if (type) *type = VM_FAULT_MINOR;
+	return DRM(do_vm_nopage)(vma, address);
+}
+
+static struct page *DRM(vm_shm_nopage)(struct vm_area_struct *vma,
+				       unsigned long address,
+				       int *type) {
+	if (type) *type = VM_FAULT_MINOR;
+	return DRM(do_vm_shm_nopage)(vma, address);
+}
+
+static struct page *DRM(vm_dma_nopage)(struct vm_area_struct *vma,
+				       unsigned long address,
+				       int *type) {
+	if (type) *type = VM_FAULT_MINOR;
+	return DRM(do_vm_dma_nopage)(vma, address);
+}
+
+static struct page *DRM(vm_sg_nopage)(struct vm_area_struct *vma,
+				      unsigned long address,
+				      int *type) {
+	if (type) *type = VM_FAULT_MINOR;
+	return DRM(do_vm_sg_nopage)(vma, address);
+}
+
+#else	/* LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,0) */
+
+static struct page *DRM(vm_nopage)(struct vm_area_struct *vma,
+				   unsigned long address,
+				   int unused) {
+	return DRM(do_vm_nopage)(vma, address);
+}
+
+static struct page *DRM(vm_shm_nopage)(struct vm_area_struct *vma,
+				       unsigned long address,
+				       int unused) {
+	return DRM(do_vm_shm_nopage)(vma, address);
+}
+
+static struct page *DRM(vm_dma_nopage)(struct vm_area_struct *vma,
+				       unsigned long address,
+				       int unused) {
+	return DRM(do_vm_dma_nopage)(vma, address);
+}
+
+static struct page *DRM(vm_sg_nopage)(struct vm_area_struct *vma,
+				      unsigned long address,
+				      int unused) {
+	return DRM(do_vm_sg_nopage)(vma, address);
+}
+
+#endif
+
+
+/** AGP virtual memory operations */
+static struct vm_operations_struct   DRM(vm_ops) = {
+	.nopage = DRM(vm_nopage),
+	.open	= DRM(vm_open),
+	.close	= DRM(vm_close),
+};
+
+/** Shared virtual memory operations */
+static struct vm_operations_struct   DRM(vm_shm_ops) = {
+	.nopage = DRM(vm_shm_nopage),
+	.open	= DRM(vm_open),
+	.close	= DRM(vm_shm_close),
+};
+
+/** DMA virtual memory operations */
+static struct vm_operations_struct   DRM(vm_dma_ops) = {
+	.nopage = DRM(vm_dma_nopage),
+	.open	= DRM(vm_open),
+	.close	= DRM(vm_close),
+};
+
+/** Scatter-gather virtual memory operations */
+static struct vm_operations_struct   DRM(vm_sg_ops) = {
+	.nopage = DRM(vm_sg_nopage),
+	.open   = DRM(vm_open),
+	.close  = DRM(vm_close),
+};
+
 
 /**
  * \c open method for shared virtual memory.
diff -Nru a/drivers/char/drm/ffb.h b/drivers/char/drm/ffb.h
--- a/drivers/char/drm/ffb.h	Sun May 16 01:18:35 2004
+++ b/drivers/char/drm/ffb.h	Sun May 16 01:18:35 2004
@@ -13,3 +13,4 @@
 #define __HAVE_KERNEL_CTX_SWITCH	1
 #define __HAVE_RELEASE			1
 #endif
+
diff -Nru a/drivers/char/drm/gamma.h b/drivers/char/drm/gamma.h
--- a/drivers/char/drm/gamma.h	Sun May 16 01:18:33 2004
+++ b/drivers/char/drm/gamma.h	Sun May 16 01:18:33 2004
@@ -104,8 +104,8 @@
 	return 0;							\
 } while (0)
 
-#define __HAVE_DMA_IRQ			1
-#define __HAVE_DMA_IRQ_BH		1
+#define __HAVE_IRQ			1
+#define __HAVE_IRQ_BH			1
 
 #define DRIVER_AGP_BUFFERS_MAP( dev )					\
 	((drm_gamma_private_t *)((dev)->dev_private))->buffers
diff -Nru a/drivers/char/drm/gamma_dma.c b/drivers/char/drm/gamma_dma.c
--- a/drivers/char/drm/gamma_dma.c	Sun May 16 01:18:36 2004
+++ b/drivers/char/drm/gamma_dma.c	Sun May 16 01:18:36 2004
@@ -116,7 +116,7 @@
 	return (!GAMMA_READ(GAMMA_DMACOUNT));
 }
 
-irqreturn_t gamma_dma_service( DRM_IRQ_ARGS )
+irqreturn_t gamma_irq_handler( DRM_IRQ_ARGS )
 {
 	drm_device_t	 *dev = (drm_device_t *)arg;
 	drm_device_dma_t *dma = dev->dma;
@@ -262,7 +262,7 @@
 	gamma_dma_schedule((drm_device_t *)dev, 0);
 }
 
-void gamma_dma_immediate_bh(void *dev)
+void gamma_irq_immediate_bh(void *dev)
 {
 	gamma_dma_schedule(dev, 0);
 }
@@ -656,12 +656,12 @@
 {
 	DRM_DEBUG( "%s\n", __FUNCTION__ );
 
-#if _HAVE_DMA_IRQ
+#if __HAVE_IRQ
 	/* Make sure interrupts are disabled here because the uninstall ioctl
 	 * may not have been called from userspace and after dev_private
 	 * is freed, it's too late.
 	 */
-	if ( dev->irq ) DRM(irq_uninstall)(dev);
+	if ( dev->irq_enabled ) DRM(irq_uninstall)(dev);
 #endif
 
 	if ( dev->dev_private ) {
diff -Nru a/drivers/char/drm/gamma_drv.c b/drivers/char/drm/gamma_drv.c
--- a/drivers/char/drm/gamma_drv.c	Sun May 16 01:18:36 2004
+++ b/drivers/char/drm/gamma_drv.c	Sun May 16 01:18:36 2004
@@ -48,6 +48,7 @@
 #include "drm_fops.h"
 #include "drm_init.h"
 #include "drm_ioctl.h"
+#include "drm_irq.h"
 #include "gamma_lists.h"        /* NOTE */
 #include "drm_lock.h"
 #include "gamma_lock.h"		/* NOTE */
diff -Nru a/drivers/char/drm/i810.h b/drivers/char/drm/i810.h
--- a/drivers/char/drm/i810.h	Sun May 16 01:18:34 2004
+++ b/drivers/char/drm/i810.h	Sun May 16 01:18:34 2004
@@ -77,7 +77,6 @@
 	[DRM_IOCTL_NR(DRM_IOCTL_I810_MC)]      = { i810_dma_mc,     1, 1 }, \
 	[DRM_IOCTL_NR(DRM_IOCTL_I810_RSTATUS)] = { i810_rstatus,    1, 0 }, \
 	[DRM_IOCTL_NR(DRM_IOCTL_I810_FLIP)] =    { i810_flip_bufs,  1, 0 }
- 
 
 #define __HAVE_COUNTERS         4
 #define __HAVE_COUNTER6         _DRM_STAT_IRQ
@@ -112,7 +111,7 @@
  * a noop stub is generated for compatibility.
  */
 /* XXX: Add vblank support? */
-#define __HAVE_DMA_IRQ		0
+#define __HAVE_IRQ		0
 
 /* Buffer customization:
  */
diff -Nru a/drivers/char/drm/i810_dma.c b/drivers/char/drm/i810_dma.c
--- a/drivers/char/drm/i810_dma.c	Sun May 16 01:18:34 2004
+++ b/drivers/char/drm/i810_dma.c	Sun May 16 01:18:34 2004
@@ -232,12 +232,12 @@
 {
 	drm_device_dma_t *dma = dev->dma;
 
-#if _HAVE_DMA_IRQ
+#if __HAVE_IRQ
 	/* Make sure interrupts are disabled here because the uninstall ioctl
 	 * may not have been called from userspace and after dev_private
 	 * is freed, it's too late.
 	 */
-	if (dev->irq) DRM(irq_uninstall)(dev);
+	if ( dev->irq_enabled ) DRM(irq_uninstall)(dev);
 #endif
 
 	if (dev->dev_private) {
diff -Nru a/drivers/char/drm/i830.h b/drivers/char/drm/i830.h
--- a/drivers/char/drm/i830.h	Sun May 16 01:18:34 2004
+++ b/drivers/char/drm/i830.h	Sun May 16 01:18:34 2004
@@ -115,10 +115,10 @@
 #define USE_IRQS 0
 
 #if USE_IRQS
-#define __HAVE_DMA_IRQ		1
+#define __HAVE_IRQ		1
 #define __HAVE_SHARED_IRQ	1
 #else
-#define __HAVE_DMA_IRQ          0
+#define __HAVE_IRQ          0
 #endif
 
 
diff -Nru a/drivers/char/drm/i830_dma.c b/drivers/char/drm/i830_dma.c
--- a/drivers/char/drm/i830_dma.c	Sun May 16 01:18:33 2004
+++ b/drivers/char/drm/i830_dma.c	Sun May 16 01:18:33 2004
@@ -232,12 +232,12 @@
 {
 	drm_device_dma_t *dma = dev->dma;
 
-#if _HAVE_DMA_IRQ
+#if __HAVE_IRQ
 	/* Make sure interrupts are disabled here because the uninstall ioctl
 	 * may not have been called from userspace and after dev_private
 	 * is freed, it's too late.
 	 */
-	if (dev->irq) DRM(irq_uninstall)(dev);
+	if ( dev->irq_enabled ) DRM(irq_uninstall)(dev);
 #endif
 
 	if (dev->dev_private) {
@@ -1540,7 +1540,7 @@
 
 	switch( param.param ) {
 	case I830_PARAM_IRQ_ACTIVE:
-		value = dev->irq ? 1 : 0;
+		value = dev->irq_enabled;
 		break;
 	default:
 		return -EINVAL;
diff -Nru a/drivers/char/drm/i830_drv.c b/drivers/char/drm/i830_drv.c
--- a/drivers/char/drm/i830_drv.c	Sun May 16 01:18:34 2004
+++ b/drivers/char/drm/i830_drv.c	Sun May 16 01:18:34 2004
@@ -50,6 +50,7 @@
 #include "drm_fops.h"
 #include "drm_init.h"
 #include "drm_ioctl.h"
+#include "drm_irq.h"
 #include "drm_lock.h"
 #include "drm_memory.h"
 #include "drm_proc.h"
diff -Nru a/drivers/char/drm/i830_irq.c b/drivers/char/drm/i830_irq.c
--- a/drivers/char/drm/i830_irq.c	Sun May 16 01:18:36 2004
+++ b/drivers/char/drm/i830_irq.c	Sun May 16 01:18:36 2004
@@ -35,7 +35,7 @@
 #include <linux/delay.h>
 
 
-irqreturn_t DRM(dma_service)( DRM_IRQ_ARGS )
+irqreturn_t DRM(irq_handler)( DRM_IRQ_ARGS )
 {
 	drm_device_t	 *dev = (drm_device_t *)arg;
       	drm_i830_private_t *dev_priv = (drm_i830_private_t *)dev->dev_private;
diff -Nru a/drivers/char/drm/mga.h b/drivers/char/drm/mga.h
--- a/drivers/char/drm/mga.h	Sun May 16 01:18:37 2004
+++ b/drivers/char/drm/mga.h	Sun May 16 01:18:37 2004
@@ -78,7 +78,7 @@
 /* DMA customization:
  */
 #define __HAVE_DMA		1
-#define __HAVE_DMA_IRQ		1
+#define __HAVE_IRQ		1
 #define __HAVE_VBL_IRQ		1
 #define __HAVE_SHARED_IRQ       1
 
diff -Nru a/drivers/char/drm/mga_dma.c b/drivers/char/drm/mga_dma.c
--- a/drivers/char/drm/mga_dma.c	Sun May 16 01:18:36 2004
+++ b/drivers/char/drm/mga_dma.c	Sun May 16 01:18:36 2004
@@ -500,14 +500,6 @@
 		return DRM_ERR(EINVAL);
 	}
 
-	DRM_FIND_MAP( dev_priv->fb, init->fb_offset );
-	if(!dev_priv->fb) {
-		DRM_ERROR( "failed to find framebuffer!\n" );
-		/* Assign dev_private so we can do cleanup. */
-		dev->dev_private = (void *)dev_priv;
-		mga_do_cleanup_dma( dev );
-		return DRM_ERR(EINVAL);
-	}
 	DRM_FIND_MAP( dev_priv->mmio, init->mmio_offset );
 	if(!dev_priv->mmio) {
 		DRM_ERROR( "failed to find mmio region!\n" );
@@ -639,12 +631,12 @@
 {
 	DRM_DEBUG( "\n" );
 
-#if _HAVE_DMA_IRQ
+#if __HAVE_IRQ
 	/* Make sure interrupts are disabled here because the uninstall ioctl
 	 * may not have been called from userspace and after dev_private
 	 * is freed, it's too late.
 	 */
-	if ( dev->irq ) DRM(irq_uninstall)(dev);
+	if ( dev->irq_enabled ) DRM(irq_uninstall)(dev);
 #endif
 
 	if ( dev->dev_private ) {
diff -Nru a/drivers/char/drm/mga_drm.h b/drivers/char/drm/mga_drm.h
--- a/drivers/char/drm/mga_drm.h	Sun May 16 01:18:36 2004
+++ b/drivers/char/drm/mga_drm.h	Sun May 16 01:18:36 2004
@@ -117,6 +117,8 @@
 #define MGA_NR_TEX_REGIONS		16
 #define MGA_LOG_MIN_TEX_REGION_SIZE	16
 
+#define  DRM_MGA_IDLE_RETRY          2048
+
 #endif /* __MGA_SAREA_DEFINES__ */
 
 
@@ -230,16 +232,27 @@
 /* MGA specific ioctls
  * The device specific ioctl range is 0x40 to 0x79.
  */
-#define DRM_IOCTL_MGA_INIT		DRM_IOW( 0x40, drm_mga_init_t)
-#define DRM_IOCTL_MGA_FLUSH		DRM_IOW( 0x41, drm_lock_t)
-#define DRM_IOCTL_MGA_RESET		DRM_IO(  0x42)
-#define DRM_IOCTL_MGA_SWAP		DRM_IO(  0x43)
-#define DRM_IOCTL_MGA_CLEAR		DRM_IOW( 0x44, drm_mga_clear_t)
-#define DRM_IOCTL_MGA_VERTEX		DRM_IOW( 0x45, drm_mga_vertex_t)
-#define DRM_IOCTL_MGA_INDICES		DRM_IOW( 0x46, drm_mga_indices_t)
-#define DRM_IOCTL_MGA_ILOAD		DRM_IOW( 0x47, drm_mga_iload_t)
-#define DRM_IOCTL_MGA_BLIT		DRM_IOW( 0x48, drm_mga_blit_t)
-#define DRM_IOCTL_MGA_GETPARAM		DRM_IOWR(0x49, drm_mga_getparam_t)
+#define DRM_MGA_INIT     0x00
+#define DRM_MGA_FLUSH    0x01
+#define DRM_MGA_RESET    0x02
+#define DRM_MGA_SWAP     0x03
+#define DRM_MGA_CLEAR    0x04
+#define DRM_MGA_VERTEX   0x05
+#define DRM_MGA_INDICES  0x06
+#define DRM_MGA_ILOAD    0x07
+#define DRM_MGA_BLIT     0x08
+#define DRM_MGA_GETPARAM 0x09
+
+#define DRM_IOCTL_MGA_INIT     DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_INIT, drm_mga_init_t)
+#define DRM_IOCTL_MGA_FLUSH    DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_FLUSH, drm_lock_t)
+#define DRM_IOCTL_MGA_RESET    DRM_IO(  DRM_COMMAND_BASE + DRM_MGA_RESET)
+#define DRM_IOCTL_MGA_SWAP     DRM_IO(  DRM_COMMAND_BASE + DRM_MGA_SWAP)
+#define DRM_IOCTL_MGA_CLEAR    DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_CLEAR, drm_mga_clear_t)
+#define DRM_IOCTL_MGA_VERTEX   DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_VERTEX, drm_mga_vertex_t)
+#define DRM_IOCTL_MGA_INDICES  DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_INDICES, drm_mga_indices_t)
+#define DRM_IOCTL_MGA_ILOAD    DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_ILOAD, drm_mga_iload_t)
+#define DRM_IOCTL_MGA_BLIT     DRM_IOW( DRM_COMMAND_BASE + DRM_MGA_BLIT, drm_mga_blit_t)
+#define DRM_IOCTL_MGA_GETPARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_MGA_GETPARAM, drm_mga_getparam_t)
 
 typedef struct _drm_mga_warp_index {
    	int installed;
@@ -330,7 +343,7 @@
 
 typedef struct drm_mga_getparam {
 	int param;
-	int *value;
+	void *value;
 } drm_mga_getparam_t;
 
 #endif
diff -Nru a/drivers/char/drm/mga_drv.c b/drivers/char/drm/mga_drv.c
--- a/drivers/char/drm/mga_drv.c	Sun May 16 01:18:34 2004
+++ b/drivers/char/drm/mga_drv.c	Sun May 16 01:18:34 2004
@@ -45,6 +45,7 @@
 #include "drm_fops.h"
 #include "drm_init.h"
 #include "drm_ioctl.h"
+#include "drm_irq.h"
 #include "drm_lock.h"
 #include "drm_memory.h"
 #include "drm_proc.h"
diff -Nru a/drivers/char/drm/mga_drv.h b/drivers/char/drm/mga_drv.h
--- a/drivers/char/drm/mga_drv.h	Sun May 16 01:18:36 2004
+++ b/drivers/char/drm/mga_drv.h	Sun May 16 01:18:36 2004
@@ -91,7 +91,6 @@
 	unsigned int texture_size;
 
 	drm_local_map_t *sarea;
-	drm_local_map_t *fb;
 	drm_local_map_t *mmio;
 	drm_local_map_t *status;
 	drm_local_map_t *warp;
diff -Nru a/drivers/char/drm/mga_irq.c b/drivers/char/drm/mga_irq.c
--- a/drivers/char/drm/mga_irq.c	Sun May 16 01:18:33 2004
+++ b/drivers/char/drm/mga_irq.c	Sun May 16 01:18:33 2004
@@ -36,7 +36,7 @@
 #include "mga_drm.h"
 #include "mga_drv.h"
 
-irqreturn_t mga_dma_service( DRM_IRQ_ARGS )
+irqreturn_t mga_irq_handler( DRM_IRQ_ARGS )
 {
 	drm_device_t *dev = (drm_device_t *) arg;
 	drm_mga_private_t *dev_priv = 
diff -Nru a/drivers/char/drm/r128.h b/drivers/char/drm/r128.h
--- a/drivers/char/drm/r128.h	Sun May 16 01:18:34 2004
+++ b/drivers/char/drm/r128.h	Sun May 16 01:18:34 2004
@@ -97,7 +97,7 @@
 /* DMA customization:
  */
 #define __HAVE_DMA		1
-#define __HAVE_DMA_IRQ		1
+#define __HAVE_IRQ		1
 #define __HAVE_VBL_IRQ		1
 #define __HAVE_SHARED_IRQ       1
 
diff -Nru a/drivers/char/drm/r128_cce.c b/drivers/char/drm/r128_cce.c
--- a/drivers/char/drm/r128_cce.c	Sun May 16 01:18:33 2004
+++ b/drivers/char/drm/r128_cce.c	Sun May 16 01:18:33 2004
@@ -212,7 +212,7 @@
 	int i;
 
 	for ( i = 0 ; i < dev_priv->usec_timeout ; i++ ) {
-		if ( GET_RING_HEAD( &dev_priv->ring ) == dev_priv->ring.tail ) {
+		if ( GET_RING_HEAD( dev_priv ) == dev_priv->ring.tail ) {
 			int pm4stat = R128_READ( R128_PM4_STAT );
 			if ( ( (pm4stat & R128_PM4_FIFOCNT_MASK) >=
 			       dev_priv->cce_fifo_size ) &&
@@ -238,7 +238,8 @@
 	r128_do_wait_for_idle( dev_priv );
 
 	R128_WRITE( R128_PM4_BUFFER_CNTL,
-		    dev_priv->cce_mode | dev_priv->ring.size_l2qw );
+		    dev_priv->cce_mode | dev_priv->ring.size_l2qw
+		    | R128_PM4_BUFFER_CNTL_NOUPDATE );
 	R128_READ( R128_PM4_BUFFER_ADDR ); /* as per the sample code */
 	R128_WRITE( R128_PM4_MICRO_CNTL, R128_PM4_MICRO_FREERUN );
 
@@ -253,7 +254,6 @@
 {
 	R128_WRITE( R128_PM4_BUFFER_DL_WPTR, 0 );
 	R128_WRITE( R128_PM4_BUFFER_DL_RPTR, 0 );
-	SET_RING_HEAD( &dev_priv->ring, 0 );
 	dev_priv->ring.tail = 0;
 }
 
@@ -264,7 +264,8 @@
 static void r128_do_cce_stop( drm_r128_private_t *dev_priv )
 {
 	R128_WRITE( R128_PM4_MICRO_CNTL, 0 );
-	R128_WRITE( R128_PM4_BUFFER_CNTL, R128_PM4_NONPM4 );
+	R128_WRITE( R128_PM4_BUFFER_CNTL,
+		    R128_PM4_NONPM4 | R128_PM4_BUFFER_CNTL_NOUPDATE );
 
 	dev_priv->cce_running = 0;
 }
@@ -333,26 +334,6 @@
 	R128_WRITE( R128_PM4_BUFFER_DL_WPTR, 0 );
 	R128_WRITE( R128_PM4_BUFFER_DL_RPTR, 0 );
 
-	/* DL_RPTR_ADDR is a physical address in AGP space. */
-	SET_RING_HEAD( &dev_priv->ring, 0 );
-
-	if ( !dev_priv->is_pci ) {
-		R128_WRITE( R128_PM4_BUFFER_DL_RPTR_ADDR,
-			    dev_priv->ring_rptr->offset );
-	} else {
-		drm_sg_mem_t *entry = dev->sg;
-		unsigned long tmp_ofs, page_ofs;
-
-		tmp_ofs = dev_priv->ring_rptr->offset - dev->sg->handle;
-		page_ofs = tmp_ofs >> PAGE_SHIFT;
-
-		R128_WRITE( R128_PM4_BUFFER_DL_RPTR_ADDR,
-     			    entry->busaddr[page_ofs]);
-		DRM_DEBUG( "ring rptr: offset=0x%08lx handle=0x%08lx\n",
-			   (unsigned long) entry->busaddr[page_ofs],
-     			   entry->handle + tmp_ofs );
-	}
-
 	/* Set watermark control */
 	R128_WRITE( R128_PM4_BUFFER_WM_CNTL,
 		    ((R128_WATERMARK_L/4) << R128_WMA_SHIFT)
@@ -486,13 +467,6 @@
 		return DRM_ERR(EINVAL);
 	}
 
-	DRM_FIND_MAP( dev_priv->fb, init->fb_offset );
-	if(!dev_priv->fb) {
-		DRM_ERROR("could not find framebuffer!\n");
-		dev->dev_private = (void *)dev_priv;
-		r128_do_cleanup_cce( dev );
-		return DRM_ERR(EINVAL);
-	}
 	DRM_FIND_MAP( dev_priv->mmio, init->mmio_offset );
 	if(!dev_priv->mmio) {
 		DRM_ERROR("could not find mmio region!\n");
@@ -567,9 +541,6 @@
 #endif
 		dev_priv->cce_buffers_offset = dev->sg->handle;
 
-	dev_priv->ring.head = ((__volatile__ u32 *)
-			       dev_priv->ring_rptr->handle);
-
 	dev_priv->ring.start = (u32 *)dev_priv->cce_ring->handle;
 	dev_priv->ring.end = ((u32 *)dev_priv->cce_ring->handle
 			      + init->ring_size / sizeof(u32));
@@ -580,7 +551,6 @@
 		(dev_priv->ring.size / sizeof(u32)) - 1;
 
 	dev_priv->ring.high_mark = 128;
-	dev_priv->ring.ring_rptr = dev_priv->ring_rptr;
 
 	dev_priv->sarea_priv->last_frame = 0;
 	R128_WRITE( R128_LAST_FRAME_REG, dev_priv->sarea_priv->last_frame );
@@ -589,8 +559,9 @@
 	R128_WRITE( R128_LAST_DISPATCH_REG,
 		    dev_priv->sarea_priv->last_dispatch );
 
-#if __REALLY_HAVE_SG
+#if __REALLY_HAVE_AGP
 	if ( dev_priv->is_pci ) {
+#endif
 		if (!DRM(ati_pcigart_init)( dev, &dev_priv->phys_pci_gart,
      					    &dev_priv->bus_pci_gart) ) {
 			DRM_ERROR( "failed to init PCI GART!\n" );
@@ -599,6 +570,7 @@
 			return DRM_ERR(ENOMEM);
 		}
 		R128_WRITE( R128_PCI_GART_PAGE, dev_priv->bus_pci_gart );
+#if __REALLY_HAVE_AGP
 	}
 #endif
 
@@ -615,12 +587,12 @@
 int r128_do_cleanup_cce( drm_device_t *dev )
 {
 
-#if _HAVE_DMA_IRQ
+#if __HAVE_IRQ
 	/* Make sure interrupts are disabled here because the uninstall ioctl
 	 * may not have been called from userspace and after dev_private
 	 * is freed, it's too late.
 	 */
-	if ( dev->irq ) DRM(irq_uninstall)(dev);
+	if ( dev->irq_enabled ) DRM(irq_uninstall)(dev);
 #endif
 
 	if ( dev->dev_private ) {
@@ -901,7 +873,7 @@
 	int i;
 
 	for ( i = 0 ; i < dev_priv->usec_timeout ; i++ ) {
-		r128_update_ring_snapshot( ring );
+		r128_update_ring_snapshot( dev_priv );
 		if ( ring->space >= n )
 			return 0;
 		DRM_UDELAY( 1 );
diff -Nru a/drivers/char/drm/r128_drm.h b/drivers/char/drm/r128_drm.h
--- a/drivers/char/drm/r128_drm.h	Sun May 16 01:18:35 2004
+++ b/drivers/char/drm/r128_drm.h	Sun May 16 01:18:35 2004
@@ -176,24 +176,47 @@
 /* Rage 128 specific ioctls
  * The device specific ioctl range is 0x40 to 0x79.
  */
-#define DRM_IOCTL_R128_INIT		DRM_IOW( 0x40, drm_r128_init_t)
-#define DRM_IOCTL_R128_CCE_START	DRM_IO(  0x41)
-#define DRM_IOCTL_R128_CCE_STOP		DRM_IOW( 0x42, drm_r128_cce_stop_t)
-#define DRM_IOCTL_R128_CCE_RESET	DRM_IO(  0x43)
-#define DRM_IOCTL_R128_CCE_IDLE		DRM_IO(  0x44)
-#define DRM_IOCTL_R128_RESET		DRM_IO(  0x46)
-#define DRM_IOCTL_R128_SWAP		DRM_IO(  0x47)
-#define DRM_IOCTL_R128_CLEAR		DRM_IOW( 0x48, drm_r128_clear_t)
-#define DRM_IOCTL_R128_VERTEX		DRM_IOW( 0x49, drm_r128_vertex_t)
-#define DRM_IOCTL_R128_INDICES		DRM_IOW( 0x4a, drm_r128_indices_t)
-#define DRM_IOCTL_R128_BLIT		DRM_IOW( 0x4b, drm_r128_blit_t)
-#define DRM_IOCTL_R128_DEPTH		DRM_IOW( 0x4c, drm_r128_depth_t)
-#define DRM_IOCTL_R128_STIPPLE		DRM_IOW( 0x4d, drm_r128_stipple_t)
-#define DRM_IOCTL_R128_INDIRECT		DRM_IOWR(0x4f, drm_r128_indirect_t)
-#define DRM_IOCTL_R128_FULLSCREEN	DRM_IOW( 0x50, drm_r128_fullscreen_t)
-#define DRM_IOCTL_R128_CLEAR2		DRM_IOW( 0x51, drm_r128_clear2_t)
-#define DRM_IOCTL_R128_GETPARAM		DRM_IOW( 0x52, drm_r128_getparam_t)
-#define DRM_IOCTL_R128_FLIP		DRM_IO(  0x53)
+#define DRM_R128_INIT       0x00
+#define DRM_R128_CCE_START  0x01
+#define DRM_R128_CCE_STOP   0x02
+#define DRM_R128_CCE_RESET  0x03
+#define DRM_R128_CCE_IDLE   0x04
+/* 0x05 not used */
+#define DRM_R128_RESET      0x06
+#define DRM_R128_SWAP       0x07
+#define DRM_R128_CLEAR      0x08
+#define DRM_R128_VERTEX     0x09
+#define DRM_R128_INDICES    0x0a
+#define DRM_R128_BLIT       0x0b
+#define DRM_R128_DEPTH      0x0c
+#define DRM_R128_STIPPLE    0x0d
+/* 0x0e not used */
+#define DRM_R128_INDIRECT   0x0f
+#define DRM_R128_FULLSCREEN 0x10
+#define DRM_R128_CLEAR2     0x11
+#define DRM_R128_GETPARAM   0x12
+#define DRM_R128_FLIP       0x13
+
+#define DRM_IOCTL_R128_INIT       DRM_IOW( DRM_COMMAND_BASE + DRM_R128_INIT, drm_r128_init_t)
+#define DRM_IOCTL_R128_CCE_START  DRM_IO(  DRM_COMMAND_BASE + DRM_R128_CCE_START)
+#define DRM_IOCTL_R128_CCE_STOP   DRM_IOW( DRM_COMMAND_BASE + DRM_R128_CCE_STOP, drm_r128_cce_stop_t)
+#define DRM_IOCTL_R128_CCE_RESET  DRM_IO(  DRM_COMMAND_BASE + DRM_R128_CCE_RESET)
+#define DRM_IOCTL_R128_CCE_IDLE   DRM_IO(  DRM_COMMAND_BASE + DRM_R128_CCE_IDLE)
+/* 0x05 not used */
+#define DRM_IOCTL_R128_RESET      DRM_IO(  DRM_COMMAND_BASE + DRM_R128_RESET)
+#define DRM_IOCTL_R128_SWAP       DRM_IO(  DRM_COMMAND_BASE + DRM_R128_SWAP)
+#define DRM_IOCTL_R128_CLEAR      DRM_IOW( DRM_COMMAND_BASE + DRM_R128_CLEAR, drm_r128_clear_t)
+#define DRM_IOCTL_R128_VERTEX     DRM_IOW( DRM_COMMAND_BASE + DRM_R128_VERTEX, drm_r128_vertex_t)
+#define DRM_IOCTL_R128_INDICES    DRM_IOW( DRM_COMMAND_BASE + DRM_R128_INDICES, drm_r128_indices_t)
+#define DRM_IOCTL_R128_BLIT       DRM_IOW( DRM_COMMAND_BASE + DRM_R128_BLIT, drm_r128_blit_t)
+#define DRM_IOCTL_R128_DEPTH      DRM_IOW( DRM_COMMAND_BASE + DRM_R128_DEPTH, drm_r128_depth_t)
+#define DRM_IOCTL_R128_STIPPLE    DRM_IOW( DRM_COMMAND_BASE + DRM_R128_STIPPLE, drm_r128_stipple_t)
+/* 0x0e not used */
+#define DRM_IOCTL_R128_INDIRECT   DRM_IOWR(DRM_COMMAND_BASE + DRM_R128_INDIRECT, drm_r128_indirect_t)
+#define DRM_IOCTL_R128_FULLSCREEN DRM_IOW( DRM_COMMAND_BASE + DRM_R128_FULLSCREEN, drm_r128_fullscreen_t)
+#define DRM_IOCTL_R128_CLEAR2     DRM_IOW( DRM_COMMAND_BASE + DRM_R128_CLEAR2, drm_r128_clear2_t)
+#define DRM_IOCTL_R128_GETPARAM   DRM_IOW( DRM_COMMAND_BASE + DRM_R128_GETPARAM, drm_r128_getparam_t)
+#define DRM_IOCTL_R128_FLIP       DRM_IO(  DRM_COMMAND_BASE + DRM_R128_FLIP)
 
 typedef struct drm_r128_init {
 	enum {
@@ -316,7 +339,7 @@
 
 typedef struct drm_r128_getparam {
 	int param;
-	int *value;
+	void *value;
 } drm_r128_getparam_t;
 
 #endif
diff -Nru a/drivers/char/drm/r128_drv.c b/drivers/char/drm/r128_drv.c
--- a/drivers/char/drm/r128_drv.c	Sun May 16 01:18:34 2004
+++ b/drivers/char/drm/r128_drv.c	Sun May 16 01:18:34 2004
@@ -47,6 +47,7 @@
 #include "drm_fops.h"
 #include "drm_init.h"
 #include "drm_ioctl.h"
+#include "drm_irq.h"
 #include "drm_lock.h"
 #include "drm_memory.h"
 #include "drm_proc.h"
diff -Nru a/drivers/char/drm/r128_drv.h b/drivers/char/drm/r128_drv.h
--- a/drivers/char/drm/r128_drv.h	Sun May 16 01:18:37 2004
+++ b/drivers/char/drm/r128_drv.h	Sun May 16 01:18:37 2004
@@ -34,8 +34,7 @@
 #ifndef __R128_DRV_H__
 #define __R128_DRV_H__
 
-#define GET_RING_HEAD(ring)		DRM_READ32(  (ring)->ring_rptr, 0 ) /* (ring)->head */
-#define SET_RING_HEAD(ring,val)		DRM_WRITE32( (ring)->ring_rptr, 0, (val) ) /* (ring)->head */
+#define GET_RING_HEAD(dev_priv)		R128_READ( R128_PM4_BUFFER_DL_RPTR )
 
 typedef struct drm_r128_freelist {
    	unsigned int age;
@@ -50,13 +49,11 @@
 	int size;
 	int size_l2qw;
 
-	volatile u32 *head;
 	u32 tail;
 	u32 tail_mask;
 	int space;
 
 	int high_mark;
-	drm_local_map_t *ring_rptr;
 } drm_r128_ring_buffer_t;
 
 typedef struct drm_r128_private {
@@ -100,7 +97,6 @@
 	u32 span_pitch_offset_c;
 
 	drm_local_map_t *sarea;
-	drm_local_map_t *fb;
 	drm_local_map_t *mmio;
 	drm_local_map_t *cce_ring;
 	drm_local_map_t *ring_rptr;
@@ -132,14 +128,6 @@
 
 extern int r128_wait_ring( drm_r128_private_t *dev_priv, int n );
 
-static __inline__ void
-r128_update_ring_snapshot( drm_r128_ring_buffer_t *ring )
-{
-	ring->space = (GET_RING_HEAD( ring ) - ring->tail) * sizeof(u32);
-	if ( ring->space <= 0 )
-		ring->space += ring->size;
-}
-
 extern int r128_do_cce_idle( drm_r128_private_t *dev_priv );
 extern int r128_do_cleanup_cce( drm_device_t *dev );
 extern int r128_do_cleanup_pageflip( drm_device_t *dev );
@@ -279,6 +267,7 @@
 #	define R128_PM4_64PIO_64VCBM_64INDBM	(7  << 28)
 #	define R128_PM4_64BM_64VCBM_64INDBM	(8  << 28)
 #	define R128_PM4_64PIO_64VCPIO_64INDPIO	(15 << 28)
+#	define R128_PM4_BUFFER_CNTL_NOUPDATE	(1  << 27)
 
 #define R128_PM4_BUFFER_WM_CNTL		0x0708
 #	define R128_WMA_SHIFT			0
@@ -403,6 +392,15 @@
 					 (pkt) | ((n) << 16))
 
 
+static __inline__ void
+r128_update_ring_snapshot( drm_r128_private_t *dev_priv )
+{
+	drm_r128_ring_buffer_t *ring = &dev_priv->ring;
+	ring->space = (GET_RING_HEAD( dev_priv ) - ring->tail) * sizeof(u32);
+	if ( ring->space <= 0 )
+		ring->space += ring->size;
+}
+
 /* ================================================================
  * Misc helper macros
  */
@@ -412,7 +410,7 @@
 	drm_r128_ring_buffer_t *ring = &dev_priv->ring; int i;		\
 	if ( ring->space < ring->high_mark ) {				\
 		for ( i = 0 ; i < dev_priv->usec_timeout ; i++ ) {	\
-			r128_update_ring_snapshot( ring );		\
+			r128_update_ring_snapshot( dev_priv );		\
 			if ( ring->space >= ring->high_mark )		\
 				goto __ring_space_done;			\
 			DRM_UDELAY(1);				\
@@ -445,17 +443,10 @@
  * Ring control
  */
 
-#if defined(__powerpc__)
-#define r128_flush_write_combine()	(void) GET_RING_HEAD( &dev_priv->ring )
-#else
-#define r128_flush_write_combine()	DRM_WRITEMEMORYBARRIER()
-#endif
-
-
 #define R128_VERBOSE	0
 
 #define RING_LOCALS							\
-	int write; unsigned int tail_mask; volatile u32 *ring;
+	int write, _nr; unsigned int tail_mask; volatile u32 *ring;
 
 #define BEGIN_RING( n ) do {						\
 	if ( R128_VERBOSE ) {						\
@@ -463,9 +454,10 @@
 			   (n), __FUNCTION__ );				\
 	}								\
 	if ( dev_priv->ring.space <= (n) * sizeof(u32) ) {		\
+		COMMIT_RING();						\
 		r128_wait_ring( dev_priv, (n) * sizeof(u32) );		\
 	}								\
-	dev_priv->ring.space -= (n) * sizeof(u32);			\
+	_nr = n; dev_priv->ring.space -= (n) * sizeof(u32);		\
 	ring = dev_priv->ring.start;					\
 	write = dev_priv->ring.tail;					\
 	tail_mask = dev_priv->ring.tail_mask;				\
@@ -488,9 +480,23 @@
 			dev_priv->ring.start,				\
 			write * sizeof(u32) );				\
 	}								\
-	r128_flush_write_combine();					\
-	dev_priv->ring.tail = write;					\
-	R128_WRITE( R128_PM4_BUFFER_DL_WPTR, write );			\
+	if (((dev_priv->ring.tail + _nr) & tail_mask) != write) {	\
+		DRM_ERROR( 						\
+			"ADVANCE_RING(): mismatch: nr: %x write: %x line: %d\n",	\
+			((dev_priv->ring.tail + _nr) & tail_mask),	\
+			write, __LINE__);				\
+	} else								\
+		dev_priv->ring.tail = write;				\
+} while (0)
+
+#define COMMIT_RING() do {						\
+	if ( R128_VERBOSE ) {						\
+		DRM_INFO( "COMMIT_RING() tail=0x%06x\n",		\
+			dev_priv->ring.tail );				\
+	}								\
+	DRM_MEMORYBARRIER();						\
+	R128_WRITE( R128_PM4_BUFFER_DL_WPTR, dev_priv->ring.tail );	\
+	R128_READ( R128_PM4_BUFFER_DL_WPTR );				\
 } while (0)
 
 #define OUT_RING( x ) do {						\
diff -Nru a/drivers/char/drm/r128_irq.c b/drivers/char/drm/r128_irq.c
--- a/drivers/char/drm/r128_irq.c	Sun May 16 01:18:37 2004
+++ b/drivers/char/drm/r128_irq.c	Sun May 16 01:18:37 2004
@@ -36,7 +36,7 @@
 #include "r128_drm.h"
 #include "r128_drv.h"
 
-irqreturn_t r128_dma_service( DRM_IRQ_ARGS )
+irqreturn_t r128_irq_handler( DRM_IRQ_ARGS )
 {
 	drm_device_t *dev = (drm_device_t *) arg;
 	drm_r128_private_t *dev_priv = 
diff -Nru a/drivers/char/drm/r128_state.c b/drivers/char/drm/r128_state.c
--- a/drivers/char/drm/r128_state.c	Sun May 16 01:18:33 2004
+++ b/drivers/char/drm/r128_state.c	Sun May 16 01:18:33 2004
@@ -45,7 +45,7 @@
 	RING_LOCALS;
 	DRM_DEBUG( "    %s\n", __FUNCTION__ );
 
-	BEGIN_RING( 17 );
+	BEGIN_RING( (count < 3? count: 3) * 5 + 2 );
 
 	if ( count >= 1 ) {
 		OUT_RING( CCE_PACKET0( R128_AUX1_SC_LEFT, 3 ) );
@@ -1011,7 +1011,7 @@
 	DRM_DEBUG( "\n" );
 
 	count = depth->n;
-	if (count > 4096  || count <= 0)
+	if (count > 4096 || count <= 0)
 		return -EMSGSIZE;
 
 	xbuf_size = count * sizeof(*x);
@@ -1280,6 +1280,7 @@
 		sarea_priv->nbox = R128_NR_SAREA_CLIPRECTS;
 
 	r128_cce_dispatch_clear( dev, &clear );
+	COMMIT_RING();
 
 	/* Make sure we restore the 3D state next time.
 	 */
@@ -1315,8 +1316,10 @@
 	R128_WRITE( R128_CRTC_OFFSET,      dev_priv->crtc_offset );
 	R128_WRITE( R128_CRTC_OFFSET_CNTL, dev_priv->crtc_offset_cntl );
 
-	if (dev_priv->current_page != 0)
+	if (dev_priv->current_page != 0) {
 		r128_cce_dispatch_flip( dev );
+		COMMIT_RING();
+	}
 
 	dev_priv->page_flipping = 0;
 	return 0;
@@ -1341,6 +1344,7 @@
 
 	r128_cce_dispatch_flip( dev );
 
+	COMMIT_RING();
 	return 0;
 }
 
@@ -1362,6 +1366,7 @@
 	dev_priv->sarea_priv->dirty |= (R128_UPLOAD_CONTEXT |
 					R128_UPLOAD_MASKS);
 
+	COMMIT_RING();
 	return 0;
 }
 
@@ -1421,6 +1426,7 @@
 
 	r128_cce_dispatch_vertex( dev, buf );
 
+	COMMIT_RING();
 	return 0;
 }
 
@@ -1492,6 +1498,7 @@
 
 	r128_cce_dispatch_indices( dev, buf, elts.start, elts.end, count );
 
+	COMMIT_RING();
 	return 0;
 }
 
@@ -1501,6 +1508,7 @@
 	drm_device_dma_t *dma = dev->dma;
 	drm_r128_private_t *dev_priv = dev->dev_private;
 	drm_r128_blit_t blit;
+	int ret;
 
 	LOCK_TEST_WITH_RETURN( dev, filp );
 
@@ -1518,7 +1526,10 @@
 	RING_SPACE_TEST_WITH_RETURN( dev_priv );
 	VB_AGE_TEST_WITH_RETURN( dev_priv );
 
-	return r128_cce_dispatch_blit( filp, dev, &blit );
+	ret = r128_cce_dispatch_blit( filp, dev, &blit );
+
+	COMMIT_RING();
+	return ret;
 }
 
 int r128_cce_depth( DRM_IOCTL_ARGS )
@@ -1526,6 +1537,7 @@
 	DRM_DEVICE;
 	drm_r128_private_t *dev_priv = dev->dev_private;
 	drm_r128_depth_t depth;
+	int ret;
 
 	LOCK_TEST_WITH_RETURN( dev, filp );
 
@@ -1534,18 +1546,20 @@
 
 	RING_SPACE_TEST_WITH_RETURN( dev_priv );
 
+	ret = DRM_ERR(EINVAL);
 	switch ( depth.func ) {
 	case R128_WRITE_SPAN:
-		return r128_cce_dispatch_write_span( dev, &depth );
+		ret = r128_cce_dispatch_write_span( dev, &depth );
 	case R128_WRITE_PIXELS:
-		return r128_cce_dispatch_write_pixels( dev, &depth );
+		ret = r128_cce_dispatch_write_pixels( dev, &depth );
 	case R128_READ_SPAN:
-		return r128_cce_dispatch_read_span( dev, &depth );
+		ret = r128_cce_dispatch_read_span( dev, &depth );
 	case R128_READ_PIXELS:
-		return r128_cce_dispatch_read_pixels( dev, &depth );
+		ret = r128_cce_dispatch_read_pixels( dev, &depth );
 	}
 
-	return DRM_ERR(EINVAL);
+	COMMIT_RING();
+	return ret;
 }
 
 int r128_cce_stipple( DRM_IOCTL_ARGS )
@@ -1568,6 +1582,7 @@
 
 	r128_cce_dispatch_stipple( dev, mask );
 
+	COMMIT_RING();
 	return 0;
 }
 
@@ -1643,6 +1658,7 @@
 	 */
 	r128_cce_dispatch_indirect( dev, buf, indirect.start, indirect.end );
 
+	COMMIT_RING();
 	return 0;
 }
 
diff -Nru a/drivers/char/drm/radeon.h b/drivers/char/drm/radeon.h
--- a/drivers/char/drm/radeon.h	Sun May 16 01:18:36 2004
+++ b/drivers/char/drm/radeon.h	Sun May 16 01:18:36 2004
@@ -51,7 +51,7 @@
 #define DRIVER_DATE		"20020828"
 
 #define DRIVER_MAJOR		1
-#define DRIVER_MINOR		9
+#define DRIVER_MINOR		10
 #define DRIVER_PATCHLEVEL	0
 
 /* Interface history:
@@ -81,6 +81,9 @@
  *       Add 'GET' queries for starting additional clients on different VT's.
  * 1.9 - Add DRM_IOCTL_RADEON_CP_RESUME ioctl.
  *       Add texture rectangle support for r100.
+ * 1.10- Add SETPARAM ioctl; first parameter to set is FB_LOCATION, which
+ *       clients use to tell the DRM where they think the framebuffer is 
+ *       located in the card's address space
  */
 #define DRIVER_IOCTLS							     \
  [DRM_IOCTL_NR(DRM_IOCTL_DMA)]               = { radeon_cp_buffers,  1, 0 }, \
@@ -106,10 +109,21 @@
  [DRM_IOCTL_NR(DRM_IOCTL_RADEON_ALLOC)]      = { radeon_mem_alloc,   1, 0 }, \
  [DRM_IOCTL_NR(DRM_IOCTL_RADEON_FREE)]       = { radeon_mem_free,    1, 0 }, \
  [DRM_IOCTL_NR(DRM_IOCTL_RADEON_INIT_HEAP)]  = { radeon_mem_init_heap, 1, 1 }, \
- [DRM_IOCTL_NR(DRM_IOCTL_RADEON_IRQ_EMIT)]   = { radeon_irq_emit, 1, 0 }, \
- [DRM_IOCTL_NR(DRM_IOCTL_RADEON_IRQ_WAIT)]   = { radeon_irq_wait, 1, 0 },
+ [DRM_IOCTL_NR(DRM_IOCTL_RADEON_IRQ_EMIT)]   = { radeon_irq_emit,    1, 0 }, \
+ [DRM_IOCTL_NR(DRM_IOCTL_RADEON_IRQ_WAIT)]   = { radeon_irq_wait,    1, 0 }, \
+ [DRM_IOCTL_NR(DRM_IOCTL_RADEON_SETPARAM)]   = { radeon_cp_setparam, 1, 0 }, \
 
+#define DRIVER_FILE_FIELDS						\
+	int64_t radeon_fb_delta;					\
 
+#define DRIVER_OPEN_HELPER( filp_priv, dev )				\
+do {									\
+	drm_radeon_private_t *dev_priv = dev->dev_private;		\
+	if ( dev_priv )							\
+		filp_priv->radeon_fb_delta = dev_priv->fb_location;	\
+	else								\
+		filp_priv->radeon_fb_delta = 0;				\
+} while( 0 )
 
 /* When a client dies:
  *    - Check for and clean up flipped page state
@@ -142,7 +156,7 @@
 /* DMA customization:
  */
 #define __HAVE_DMA		1
-#define __HAVE_DMA_IRQ		1
+#define __HAVE_IRQ		1
 #define __HAVE_VBL_IRQ		1
 #define __HAVE_SHARED_IRQ       1
 
diff -Nru a/drivers/char/drm/radeon_cp.c b/drivers/char/drm/radeon_cp.c
--- a/drivers/char/drm/radeon_cp.c	Sun May 16 01:18:34 2004
+++ b/drivers/char/drm/radeon_cp.c	Sun May 16 01:18:34 2004
@@ -855,7 +855,8 @@
 
 	/* Initialize the memory controller */
 	RADEON_WRITE( RADEON_MC_FB_LOCATION,
-		      (dev_priv->gart_vm_start - 1) & 0xffff0000 );
+		      ( ( dev_priv->gart_vm_start - 1 ) & 0xffff0000 )
+		    | ( dev_priv->fb_location >> 16 ) );
 
 #if __REALLY_HAVE_AGP
 	if ( !dev_priv->is_pci ) {
@@ -1071,13 +1072,6 @@
 	dev_priv->depth_offset	= init->depth_offset;
 	dev_priv->depth_pitch	= init->depth_pitch;
 
-	dev_priv->front_pitch_offset = (((dev_priv->front_pitch/64) << 22) |
-					(dev_priv->front_offset >> 10));
-	dev_priv->back_pitch_offset = (((dev_priv->back_pitch/64) << 22) |
-				       (dev_priv->back_offset >> 10));
-	dev_priv->depth_pitch_offset = (((dev_priv->depth_pitch/64) << 22) |
-					(dev_priv->depth_offset >> 10));
-
 	/* Hardware state for depth clears.  Remove this if/when we no
 	 * longer clear the depth buffer with a 3D rectangle.  Hard-code
 	 * all values to prevent unwanted 3D state from slipping through
@@ -1124,13 +1118,6 @@
 		return DRM_ERR(EINVAL);
 	}
 
-	DRM_FIND_MAP( dev_priv->fb, init->fb_offset );
-	if(!dev_priv->fb) {
-		DRM_ERROR("could not find framebuffer!\n");
-		dev->dev_private = (void *)dev_priv;
-		radeon_do_cleanup_cp(dev);
-		return DRM_ERR(EINVAL);
-	}
 	DRM_FIND_MAP( dev_priv->mmio, init->mmio_offset );
 	if(!dev_priv->mmio) {
 		DRM_ERROR("could not find mmio region!\n");
@@ -1204,9 +1191,26 @@
 			   dev_priv->buffers->handle );
 	}
 
+	dev_priv->fb_location = ( RADEON_READ( RADEON_MC_FB_LOCATION )
+				& 0xffff ) << 16;
+
+	dev_priv->front_pitch_offset = (((dev_priv->front_pitch/64) << 22) |
+					( ( dev_priv->front_offset
+					  + dev_priv->fb_location ) >> 10 ) );
+
+	dev_priv->back_pitch_offset = (((dev_priv->back_pitch/64) << 22) |
+				       ( ( dev_priv->back_offset
+					 + dev_priv->fb_location ) >> 10 ) );
+
+	dev_priv->depth_pitch_offset = (((dev_priv->depth_pitch/64) << 22) |
+					( ( dev_priv->depth_offset
+					  + dev_priv->fb_location ) >> 10 ) );
+
 
 	dev_priv->gart_size = init->gart_size;
-	dev_priv->gart_vm_start = RADEON_READ( RADEON_CONFIG_APER_SIZE );
+	dev_priv->gart_vm_start = dev_priv->fb_location
+				+ RADEON_READ( RADEON_CONFIG_APER_SIZE );
+
 #if __REALLY_HAVE_AGP
 	if ( !dev_priv->is_pci )
 		dev_priv->gart_buffers_offset = (dev_priv->buffers->offset
@@ -1271,12 +1275,12 @@
 {
 	DRM_DEBUG( "\n" );
 
-#if _HAVE_DMA_IRQ
+#if __HAVE_IRQ
 	/* Make sure interrupts are disabled here because the uninstall ioctl
 	 * may not have been called from userspace and after dev_private
 	 * is freed, it's too late.
 	 */
-	if ( dev->irq ) DRM(irq_uninstall)(dev);
+	if ( dev->irq_enabled ) DRM(irq_uninstall)(dev);
 #endif
 
 	if ( dev->dev_private ) {
diff -Nru a/drivers/char/drm/radeon_drm.h b/drivers/char/drm/radeon_drm.h
--- a/drivers/char/drm/radeon_drm.h	Sun May 16 01:18:35 2004
+++ b/drivers/char/drm/radeon_drm.h	Sun May 16 01:18:35 2004
@@ -226,6 +226,13 @@
 #define RADEON_MAX_TEXTURE_LEVELS	12
 #define RADEON_MAX_TEXTURE_UNITS	3
 
+/* Blits have strict offset rules.  All blit offset must be aligned on
+ * a 1K-byte boundary.
+ */
+#define RADEON_OFFSET_SHIFT             10
+#define RADEON_OFFSET_ALIGN             (1 << RADEON_OFFSET_SHIFT)
+#define RADEON_OFFSET_MASK              (RADEON_OFFSET_ALIGN - 1)
+
 #endif /* __RADEON_SAREA_DEFINES__ */
 
 typedef struct {
@@ -365,31 +372,58 @@
 /* Radeon specific ioctls
  * The device specific ioctl range is 0x40 to 0x79.
  */
-#define DRM_IOCTL_RADEON_CP_INIT    DRM_IOW( 0x40, drm_radeon_init_t)
-#define DRM_IOCTL_RADEON_CP_START   DRM_IO(  0x41)
-#define DRM_IOCTL_RADEON_CP_STOP    DRM_IOW( 0x42, drm_radeon_cp_stop_t)
-#define DRM_IOCTL_RADEON_CP_RESET   DRM_IO(  0x43)
-#define DRM_IOCTL_RADEON_CP_IDLE    DRM_IO(  0x44)
-#define DRM_IOCTL_RADEON_RESET      DRM_IO(  0x45)
-#define DRM_IOCTL_RADEON_FULLSCREEN DRM_IOW( 0x46, drm_radeon_fullscreen_t)
-#define DRM_IOCTL_RADEON_SWAP       DRM_IO(  0x47)
-#define DRM_IOCTL_RADEON_CLEAR      DRM_IOW( 0x48, drm_radeon_clear_t)
-#define DRM_IOCTL_RADEON_VERTEX     DRM_IOW( 0x49, drm_radeon_vertex_t)
-#define DRM_IOCTL_RADEON_INDICES    DRM_IOW( 0x4a, drm_radeon_indices_t)
-#define DRM_IOCTL_RADEON_STIPPLE    DRM_IOW( 0x4c, drm_radeon_stipple_t)
-#define DRM_IOCTL_RADEON_INDIRECT   DRM_IOWR(0x4d, drm_radeon_indirect_t)
-#define DRM_IOCTL_RADEON_TEXTURE    DRM_IOWR(0x4e, drm_radeon_texture_t)
-#define DRM_IOCTL_RADEON_VERTEX2    DRM_IOW( 0x4f, drm_radeon_vertex2_t)
-#define DRM_IOCTL_RADEON_CMDBUF     DRM_IOW( 0x50, drm_radeon_cmd_buffer_t)
-#define DRM_IOCTL_RADEON_GETPARAM   DRM_IOWR(0x51, drm_radeon_getparam_t)
-#define DRM_IOCTL_RADEON_FLIP	    DRM_IO(  0x52)
-#define DRM_IOCTL_RADEON_ALLOC      DRM_IOWR( 0x53, drm_radeon_mem_alloc_t)
-#define DRM_IOCTL_RADEON_FREE       DRM_IOW( 0x54, drm_radeon_mem_free_t)
-#define DRM_IOCTL_RADEON_INIT_HEAP  DRM_IOW( 0x55, drm_radeon_mem_init_heap_t)
-#define DRM_IOCTL_RADEON_IRQ_EMIT   DRM_IOWR( 0x56, drm_radeon_irq_emit_t)
-#define DRM_IOCTL_RADEON_IRQ_WAIT   DRM_IOW( 0x57, drm_radeon_irq_wait_t)
-/* added by Charl P. Botha - see radeon_cp.c for details */
-#define DRM_IOCTL_RADEON_CP_RESUME  DRM_IO(0x58)
+#define DRM_RADEON_CP_INIT    0x00 
+#define DRM_RADEON_CP_START   0x01 
+#define DRM_RADEON_CP_STOP    0x02
+#define DRM_RADEON_CP_RESET   0x03
+#define DRM_RADEON_CP_IDLE    0x04
+#define DRM_RADEON_RESET      0x05 
+#define DRM_RADEON_FULLSCREEN 0x06
+#define DRM_RADEON_SWAP       0x07 
+#define DRM_RADEON_CLEAR      0x08 
+#define DRM_RADEON_VERTEX     0x09
+#define DRM_RADEON_INDICES    0x0A
+#define DRM_RADEON_NOT_USED
+#define DRM_RADEON_STIPPLE    0x0C
+#define DRM_RADEON_INDIRECT   0x0D
+#define DRM_RADEON_TEXTURE    0x0E
+#define DRM_RADEON_VERTEX2    0x0F
+#define DRM_RADEON_CMDBUF     0x10
+#define DRM_RADEON_GETPARAM   0x11
+#define DRM_RADEON_FLIP       0x12
+#define DRM_RADEON_ALLOC      0x13
+#define DRM_RADEON_FREE       0x14
+#define DRM_RADEON_INIT_HEAP  0x15
+#define DRM_RADEON_IRQ_EMIT   0x16
+#define DRM_RADEON_IRQ_WAIT   0x17
+#define DRM_RADEON_CP_RESUME  0x18
+#define DRM_RADEON_SETPARAM   0x19
+
+#define DRM_IOCTL_RADEON_CP_INIT    DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_CP_INIT, drm_radeon_init_t)
+#define DRM_IOCTL_RADEON_CP_START   DRM_IO(  DRM_COMMAND_BASE + DRM_RADEON_CP_START)
+#define DRM_IOCTL_RADEON_CP_STOP    DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_CP_STOP, drm_radeon_cp_stop_t)
+#define DRM_IOCTL_RADEON_CP_RESET   DRM_IO(  DRM_COMMAND_BASE + DRM_RADEON_CP_RESET)
+#define DRM_IOCTL_RADEON_CP_IDLE    DRM_IO(  DRM_COMMAND_BASE + DRM_RADEON_CP_IDLE)
+#define DRM_IOCTL_RADEON_RESET      DRM_IO(  DRM_COMMAND_BASE + DRM_RADEON_RESET)
+#define DRM_IOCTL_RADEON_FULLSCREEN DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_FULLSCREEN, drm_radeon_fullscreen_t)
+#define DRM_IOCTL_RADEON_SWAP       DRM_IO(  DRM_COMMAND_BASE + DRM_RADEON_SWAP)
+#define DRM_IOCTL_RADEON_CLEAR      DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_CLEAR, drm_radeon_clear_t)
+#define DRM_IOCTL_RADEON_VERTEX     DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_VERTEX, drm_radeon_vertex_t)
+#define DRM_IOCTL_RADEON_INDICES    DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_INDICES, drm_radeon_indices_t)
+#define DRM_IOCTL_RADEON_STIPPLE    DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_STIPPLE, drm_radeon_stipple_t)
+#define DRM_IOCTL_RADEON_INDIRECT   DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_INDIRECT, drm_radeon_indirect_t)
+#define DRM_IOCTL_RADEON_TEXTURE    DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_TEXTURE, drm_radeon_texture_t)
+#define DRM_IOCTL_RADEON_VERTEX2    DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_VERTEX2, drm_radeon_vertex2_t)
+#define DRM_IOCTL_RADEON_CMDBUF     DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_CMDBUF, drm_radeon_cmd_buffer_t)
+#define DRM_IOCTL_RADEON_GETPARAM   DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GETPARAM, drm_radeon_getparam_t)
+#define DRM_IOCTL_RADEON_FLIP       DRM_IO(  DRM_COMMAND_BASE + DRM_RADEON_FLIP)
+#define DRM_IOCTL_RADEON_ALLOC      DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_ALLOC, drm_radeon_mem_alloc_t)
+#define DRM_IOCTL_RADEON_FREE       DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_FREE, drm_radeon_mem_free_t)
+#define DRM_IOCTL_RADEON_INIT_HEAP  DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_INIT_HEAP, drm_radeon_mem_init_heap_t)
+#define DRM_IOCTL_RADEON_IRQ_EMIT   DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_IRQ_EMIT, drm_radeon_irq_emit_t)
+#define DRM_IOCTL_RADEON_IRQ_WAIT   DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_IRQ_WAIT, drm_radeon_irq_wait_t)
+#define DRM_IOCTL_RADEON_CP_RESUME  DRM_IO(  DRM_COMMAND_BASE + DRM_RADEON_CP_RESUME)
+#define DRM_IOCTL_RADEON_SETPARAM   DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_SETPARAM, drm_radeon_setparam_t)
 
 typedef struct drm_radeon_init {
 	enum {
@@ -502,7 +536,7 @@
 } drm_radeon_tex_image_t;
 
 typedef struct drm_radeon_texture {
-	int offset;
+	unsigned int offset;
 	int pitch;
 	int format;
 	int width;			/* Texture image coordinates */
@@ -537,10 +571,11 @@
 #define RADEON_PARAM_STATUS_HANDLE         8
 #define RADEON_PARAM_SAREA_HANDLE          9
 #define RADEON_PARAM_GART_TEX_HANDLE       10
+#define RADEON_PARAM_SCRATCH_OFFSET        11
 
 typedef struct drm_radeon_getparam {
 	int param;
-	int *value;
+	void *value;
 } drm_radeon_getparam_t;
 
 /* 1.6: Set up a memory manager for regions of shared memory:
@@ -576,6 +611,18 @@
 typedef struct drm_radeon_irq_wait {
 	int irq_seq;
 } drm_radeon_irq_wait_t;
+
+
+/* 1.10: Clients tell the DRM where they think the framebuffer is located in
+ * the card's address space, via a new generic ioctl to set parameters
+ */
+
+typedef struct drm_radeon_setparam {
+	unsigned int param;
+	int64_t      value;
+} drm_radeon_setparam_t;
+
+#define RADEON_SETPARAM_FB_LOCATION    1 /* determined framebuffer location */
 
 
 #endif
diff -Nru a/drivers/char/drm/radeon_drv.c b/drivers/char/drm/radeon_drv.c
--- a/drivers/char/drm/radeon_drv.c	Sun May 16 01:18:36 2004
+++ b/drivers/char/drm/radeon_drv.c	Sun May 16 01:18:36 2004
@@ -48,6 +48,7 @@
 #include "drm_fops.h"
 #include "drm_init.h"
 #include "drm_ioctl.h"
+#include "drm_irq.h"
 #include "drm_lock.h"
 #include "drm_memory.h"
 #include "drm_proc.h"
diff -Nru a/drivers/char/drm/radeon_drv.h b/drivers/char/drm/radeon_drv.h
--- a/drivers/char/drm/radeon_drv.h	Sun May 16 01:18:35 2004
+++ b/drivers/char/drm/radeon_drv.h	Sun May 16 01:18:35 2004
@@ -73,6 +73,8 @@
 	drm_radeon_ring_buffer_t ring;
 	drm_radeon_sarea_t *sarea_priv;
 
+	u32 fb_location;
+
 	int gart_size;
 	u32 gart_vm_start;
 	unsigned long gart_buffers_offset;
@@ -133,7 +135,6 @@
 	unsigned long gart_textures_offset;
 
 	drm_local_map_t *sarea;
-	drm_local_map_t *fb;
 	drm_local_map_t *mmio;
 	drm_local_map_t *cp_ring;
 	drm_local_map_t *ring_rptr;
@@ -184,6 +185,7 @@
 extern int radeon_cp_vertex2( DRM_IOCTL_ARGS );
 extern int radeon_cp_cmdbuf( DRM_IOCTL_ARGS );
 extern int radeon_cp_getparam( DRM_IOCTL_ARGS );
+extern int radeon_cp_setparam( DRM_IOCTL_ARGS );
 extern int radeon_cp_flip( DRM_IOCTL_ARGS );
 
 extern int radeon_mem_alloc( DRM_IOCTL_ARGS );
@@ -239,6 +241,7 @@
 #define RADEON_CRTC2_OFFSET		0x0324
 #define RADEON_CRTC2_OFFSET_CNTL	0x0328
 
+#define RADEON_RB3D_COLOROFFSET		0x1c40
 #define RADEON_RB3D_COLORPITCH		0x1c48
 
 #define RADEON_DP_GUI_MASTER_CNTL	0x146c
@@ -332,6 +335,7 @@
 #define RADEON_PP_MISC			0x1c14
 #define RADEON_PP_ROT_MATRIX_0		0x1d58
 #define RADEON_PP_TXFILTER_0		0x1c54
+#define RADEON_PP_TXOFFSET_0		0x1c5c
 #define RADEON_PP_TXFILTER_1		0x1c6c
 #define RADEON_PP_TXFILTER_2		0x1c84
 
diff -Nru a/drivers/char/drm/radeon_irq.c b/drivers/char/drm/radeon_irq.c
--- a/drivers/char/drm/radeon_irq.c	Sun May 16 01:18:36 2004
+++ b/drivers/char/drm/radeon_irq.c	Sun May 16 01:18:36 2004
@@ -54,7 +54,7 @@
  * tied to dma at all, this is just a hangover from dri prehistory.
  */
 
-irqreturn_t DRM(dma_service)( DRM_IRQ_ARGS )
+irqreturn_t DRM(irq_handler)( DRM_IRQ_ARGS )
 {
 	drm_device_t *dev = (drm_device_t *) arg;
 	drm_radeon_private_t *dev_priv = 
diff -Nru a/drivers/char/drm/radeon_state.c b/drivers/char/drm/radeon_state.c
--- a/drivers/char/drm/radeon_state.c	Sun May 16 01:18:36 2004
+++ b/drivers/char/drm/radeon_state.c	Sun May 16 01:18:36 2004
@@ -36,6 +36,240 @@
 
 
 /* ================================================================
+ * Helper functions for client state checking and fixup
+ */
+
+static __inline__ int radeon_check_and_fixup_offset( drm_radeon_private_t *dev_priv,
+						     drm_file_t *filp_priv,
+						     u32 *offset ) {
+	u32 off = *offset;
+
+	if ( off >= dev_priv->fb_location &&
+	     off < ( dev_priv->gart_vm_start + dev_priv->gart_size ) )
+		return 0;
+
+	off += filp_priv->radeon_fb_delta;
+
+	DRM_DEBUG( "offset fixed up to 0x%x\n", off );
+
+	if ( off < dev_priv->fb_location ||
+	     off >= ( dev_priv->gart_vm_start + dev_priv->gart_size ) )
+		return DRM_ERR( EINVAL );
+
+	*offset = off;
+
+	return 0;
+}
+
+static __inline__ int radeon_check_and_fixup_offset_user( drm_radeon_private_t *dev_priv,
+							  drm_file_t *filp_priv,
+							  u32 *offset ) {
+	u32 off;
+
+	DRM_GET_USER_UNCHECKED( off, offset );
+
+	if ( radeon_check_and_fixup_offset( dev_priv, filp_priv, &off ) )
+		return DRM_ERR( EINVAL );
+
+	DRM_PUT_USER_UNCHECKED( offset, off );
+
+	return 0;
+}
+
+static __inline__ int radeon_check_and_fixup_packets( drm_radeon_private_t *dev_priv,
+						      drm_file_t *filp_priv,
+						      int id,
+						      u32 *data ) {
+	switch ( id ) {
+
+	case RADEON_EMIT_PP_MISC:
+		if ( radeon_check_and_fixup_offset_user( dev_priv, filp_priv,
+							 &data[( RADEON_RB3D_DEPTHOFFSET
+								 - RADEON_PP_MISC ) / 4] ) ) {
+			DRM_ERROR( "Invalid depth buffer offset\n" );
+			return DRM_ERR( EINVAL );
+		}
+		break;
+
+	case RADEON_EMIT_PP_CNTL:
+		if ( radeon_check_and_fixup_offset_user( dev_priv, filp_priv,
+							 &data[( RADEON_RB3D_COLOROFFSET
+								 - RADEON_PP_CNTL ) / 4] ) ) {
+			DRM_ERROR( "Invalid colour buffer offset\n" );
+			return DRM_ERR( EINVAL );
+		}
+		break;
+
+	case R200_EMIT_PP_TXOFFSET_0:
+	case R200_EMIT_PP_TXOFFSET_1:
+	case R200_EMIT_PP_TXOFFSET_2:
+	case R200_EMIT_PP_TXOFFSET_3:
+	case R200_EMIT_PP_TXOFFSET_4:
+	case R200_EMIT_PP_TXOFFSET_5:
+		if ( radeon_check_and_fixup_offset_user( dev_priv, filp_priv,
+							 &data[0] ) ) {
+			DRM_ERROR( "Invalid R200 texture offset\n" );
+			return DRM_ERR( EINVAL );
+		}
+		break;
+
+	case RADEON_EMIT_PP_TXFILTER_0:
+	case RADEON_EMIT_PP_TXFILTER_1:
+	case RADEON_EMIT_PP_TXFILTER_2:
+		if ( radeon_check_and_fixup_offset_user( dev_priv, filp_priv,
+							 &data[( RADEON_PP_TXOFFSET_0
+								 - RADEON_PP_TXFILTER_0 ) / 4] ) ) {
+			DRM_ERROR( "Invalid R100 texture offset\n" );
+			return DRM_ERR( EINVAL );
+		}
+		break;
+
+	case R200_EMIT_PP_CUBIC_OFFSETS_0:
+	case R200_EMIT_PP_CUBIC_OFFSETS_1:
+	case R200_EMIT_PP_CUBIC_OFFSETS_2:
+	case R200_EMIT_PP_CUBIC_OFFSETS_3:
+	case R200_EMIT_PP_CUBIC_OFFSETS_4:
+	case R200_EMIT_PP_CUBIC_OFFSETS_5: {
+		int i;
+		for ( i = 0; i < 5; i++ ) {
+			if ( radeon_check_and_fixup_offset_user( dev_priv,
+								 filp_priv,
+								 &data[i] ) ) {
+				DRM_ERROR( "Invalid R200 cubic texture offset\n" );
+				return DRM_ERR( EINVAL );
+			}
+		}
+		break;
+	}
+
+	case RADEON_EMIT_RB3D_COLORPITCH:
+	case RADEON_EMIT_RE_LINE_PATTERN:
+	case RADEON_EMIT_SE_LINE_WIDTH:
+	case RADEON_EMIT_PP_LUM_MATRIX:
+	case RADEON_EMIT_PP_ROT_MATRIX_0:
+	case RADEON_EMIT_RB3D_STENCILREFMASK:
+	case RADEON_EMIT_SE_VPORT_XSCALE:
+	case RADEON_EMIT_SE_CNTL:
+	case RADEON_EMIT_SE_CNTL_STATUS:
+	case RADEON_EMIT_RE_MISC:
+	case RADEON_EMIT_PP_BORDER_COLOR_0:
+	case RADEON_EMIT_PP_BORDER_COLOR_1:
+	case RADEON_EMIT_PP_BORDER_COLOR_2:
+	case RADEON_EMIT_SE_ZBIAS_FACTOR:
+	case RADEON_EMIT_SE_TCL_OUTPUT_VTX_FMT:
+	case RADEON_EMIT_SE_TCL_MATERIAL_EMMISSIVE_RED:
+	case R200_EMIT_PP_TXCBLEND_0:
+	case R200_EMIT_PP_TXCBLEND_1:
+	case R200_EMIT_PP_TXCBLEND_2:
+	case R200_EMIT_PP_TXCBLEND_3:
+	case R200_EMIT_PP_TXCBLEND_4:
+	case R200_EMIT_PP_TXCBLEND_5:
+	case R200_EMIT_PP_TXCBLEND_6:
+	case R200_EMIT_PP_TXCBLEND_7:
+	case R200_EMIT_TCL_LIGHT_MODEL_CTL_0:
+	case R200_EMIT_TFACTOR_0:
+	case R200_EMIT_VTX_FMT_0:
+	case R200_EMIT_VAP_CTL:
+	case R200_EMIT_MATRIX_SELECT_0:
+	case R200_EMIT_TEX_PROC_CTL_2:
+	case R200_EMIT_TCL_UCP_VERT_BLEND_CTL:
+	case R200_EMIT_PP_TXFILTER_0:
+	case R200_EMIT_PP_TXFILTER_1:
+	case R200_EMIT_PP_TXFILTER_2:
+	case R200_EMIT_PP_TXFILTER_3:
+	case R200_EMIT_PP_TXFILTER_4:
+	case R200_EMIT_PP_TXFILTER_5:
+	case R200_EMIT_VTE_CNTL:
+	case R200_EMIT_OUTPUT_VTX_COMP_SEL:
+	case R200_EMIT_PP_TAM_DEBUG3:
+	case R200_EMIT_PP_CNTL_X:
+	case R200_EMIT_RB3D_DEPTHXY_OFFSET:
+	case R200_EMIT_RE_AUX_SCISSOR_CNTL:
+	case R200_EMIT_RE_SCISSOR_TL_0:
+	case R200_EMIT_RE_SCISSOR_TL_1:
+	case R200_EMIT_RE_SCISSOR_TL_2:
+	case R200_EMIT_SE_VAP_CNTL_STATUS:
+	case R200_EMIT_SE_VTX_STATE_CNTL:
+	case R200_EMIT_RE_POINTSIZE:
+	case R200_EMIT_TCL_INPUT_VTX_VECTOR_ADDR_0:
+	case R200_EMIT_PP_CUBIC_FACES_0:
+	case R200_EMIT_PP_CUBIC_FACES_1:
+	case R200_EMIT_PP_CUBIC_FACES_2:
+	case R200_EMIT_PP_CUBIC_FACES_3:
+	case R200_EMIT_PP_CUBIC_FACES_4:
+	case R200_EMIT_PP_CUBIC_FACES_5:
+	case RADEON_EMIT_PP_TEX_SIZE_0:
+	case RADEON_EMIT_PP_TEX_SIZE_1:
+	case RADEON_EMIT_PP_TEX_SIZE_2:
+		/* These packets don't contain memory offsets */
+		break;
+
+	default:
+		DRM_ERROR( "Unknown state packet ID %d\n", id );
+		return DRM_ERR( EINVAL );
+	}
+
+	return 0;
+}
+
+static __inline__ int radeon_check_and_fixup_packet3( drm_radeon_private_t *dev_priv,
+						      drm_file_t *filp_priv,
+						      drm_radeon_cmd_buffer_t *cmdbuf,
+						      unsigned int *cmdsz ) {
+	u32 tmp[4], *cmd = ( u32* )cmdbuf->buf;
+
+	if ( DRM_COPY_FROM_USER_UNCHECKED( tmp, cmd, sizeof( tmp ) ) ) {
+		DRM_ERROR( "Failed to copy data from user space\n" );
+		return DRM_ERR( EFAULT );
+	}
+
+	*cmdsz = 2 + ( ( tmp[0] & RADEON_CP_PACKET_COUNT_MASK ) >> 16 );
+
+	if ( ( tmp[0] & 0xc0000000 ) != RADEON_CP_PACKET3 ) {
+		DRM_ERROR( "Not a type 3 packet\n" );
+		return DRM_ERR( EINVAL );
+	}
+
+	if ( 4 * *cmdsz > cmdbuf->bufsz ) {
+		DRM_ERROR( "Packet size larger than size of data provided\n" );
+		return DRM_ERR( EINVAL );
+	}
+
+	/* Check client state and fix it up if necessary */
+	if ( tmp[0] & 0x8000 ) { /* MSB of opcode: next DWORD GUI_CNTL */
+		u32 offset;
+
+		if ( tmp[1] & ( RADEON_GMC_SRC_PITCH_OFFSET_CNTL
+			      | RADEON_GMC_DST_PITCH_OFFSET_CNTL ) ) {
+			offset = tmp[2] << 10;
+			if ( radeon_check_and_fixup_offset( dev_priv, filp_priv, &offset ) ) {
+				DRM_ERROR( "Invalid first packet offset\n" );
+				return DRM_ERR( EINVAL );
+			}
+			tmp[2] = ( tmp[2] & 0xffc00000 ) | offset >> 10;
+		}
+
+		if ( ( tmp[1] & RADEON_GMC_SRC_PITCH_OFFSET_CNTL ) &&
+		     ( tmp[1] & RADEON_GMC_DST_PITCH_OFFSET_CNTL ) ) {
+			offset = tmp[3] << 10;
+			if ( radeon_check_and_fixup_offset( dev_priv, filp_priv, &offset ) ) {
+				DRM_ERROR( "Invalid second packet offset\n" );
+				return DRM_ERR( EINVAL );
+			}
+			tmp[3] = ( tmp[3] & 0xffc00000 ) | offset >> 10;
+		}
+
+		if ( DRM_COPY_TO_USER_UNCHECKED( cmd, tmp, sizeof( tmp ) ) ) {
+			DRM_ERROR( "Failed to copy data to user space\n" );
+			return DRM_ERR( EFAULT );
+		}
+	}
+
+	return 0;
+}
+
+
+/* ================================================================
  * CP hardware state programming functions
  */
 
@@ -57,15 +291,28 @@
 
 /* Emit 1.1 state
  */
-static void radeon_emit_state( drm_radeon_private_t *dev_priv,
-			       drm_radeon_context_regs_t *ctx,
-			       drm_radeon_texture_regs_t *tex,
-			       unsigned int dirty )
+static int radeon_emit_state( drm_radeon_private_t *dev_priv,
+			      drm_file_t *filp_priv,
+			      drm_radeon_context_regs_t *ctx,
+			      drm_radeon_texture_regs_t *tex,
+			      unsigned int dirty )
 {
 	RING_LOCALS;
 	DRM_DEBUG( "dirty=0x%08x\n", dirty );
 
 	if ( dirty & RADEON_UPLOAD_CONTEXT ) {
+		if ( radeon_check_and_fixup_offset( dev_priv, filp_priv,
+						    &ctx->rb3d_depthoffset ) ) {
+			DRM_ERROR( "Invalid depth buffer offset\n" );
+			return DRM_ERR( EINVAL );
+		}
+
+		if ( radeon_check_and_fixup_offset( dev_priv, filp_priv,
+						    &ctx->rb3d_coloroffset ) ) {
+			DRM_ERROR( "Invalid depth buffer offset\n" );
+			return DRM_ERR( EINVAL );
+		}
+
 		BEGIN_RING( 14 );
 		OUT_RING( CP_PACKET0( RADEON_PP_MISC, 6 ) );
 		OUT_RING( ctx->pp_misc );
@@ -149,6 +396,12 @@
 	}
 
 	if ( dirty & RADEON_UPLOAD_TEX0 ) {
+		if ( radeon_check_and_fixup_offset( dev_priv, filp_priv,
+						    &tex[0].pp_txoffset ) ) {
+			DRM_ERROR( "Invalid texture offset for unit 0\n" );
+			return DRM_ERR( EINVAL );
+		}
+
 		BEGIN_RING( 9 );
 		OUT_RING( CP_PACKET0( RADEON_PP_TXFILTER_0, 5 ) );
 		OUT_RING( tex[0].pp_txfilter );
@@ -163,6 +416,12 @@
 	}
 
 	if ( dirty & RADEON_UPLOAD_TEX1 ) {
+		if ( radeon_check_and_fixup_offset( dev_priv, filp_priv,
+						    &tex[1].pp_txoffset ) ) {
+			DRM_ERROR( "Invalid texture offset for unit 1\n" );
+			return DRM_ERR( EINVAL );
+		}
+
 		BEGIN_RING( 9 );
 		OUT_RING( CP_PACKET0( RADEON_PP_TXFILTER_1, 5 ) );
 		OUT_RING( tex[1].pp_txfilter );
@@ -177,6 +436,12 @@
 	}
 
 	if ( dirty & RADEON_UPLOAD_TEX2 ) {
+		if ( radeon_check_and_fixup_offset( dev_priv, filp_priv,
+						    &tex[2].pp_txoffset ) ) {
+			DRM_ERROR( "Invalid texture offset for unit 2\n" );
+			return DRM_ERR( EINVAL );
+		}
+
 		BEGIN_RING( 9 );
 		OUT_RING( CP_PACKET0( RADEON_PP_TXFILTER_2, 5 ) );
 		OUT_RING( tex[2].pp_txfilter );
@@ -189,12 +454,15 @@
 		OUT_RING( tex[2].pp_border_color );
 		ADVANCE_RING();
 	}
+
+	return 0;
 }
 
 /* Emit 1.2 state
  */
-static void radeon_emit_state2( drm_radeon_private_t *dev_priv,
-				drm_radeon_state_t *state )
+static int radeon_emit_state2( drm_radeon_private_t *dev_priv,
+			       drm_file_t *filp_priv,
+			       drm_radeon_state_t *state )
 {
 	RING_LOCALS;
 
@@ -206,7 +474,7 @@
 		ADVANCE_RING();
 	}
 
-	radeon_emit_state( dev_priv, &state->context, 
+	return radeon_emit_state( dev_priv, filp_priv, &state->context,
 			   state->tex, state->dirty );
 }
 
@@ -1065,6 +1333,7 @@
 				       drm_radeon_tex_image_t *image )
 {
 	drm_radeon_private_t *dev_priv = dev->dev_private;
+	drm_file_t *filp_priv;
 	drm_buf_t *buf;
 	u32 format;
 	u32 *buffer;
@@ -1074,6 +1343,13 @@
 	int i;
 	RING_LOCALS;
 
+	DRM_GET_PRIV_WITH_RETURN( filp_priv, filp );
+
+	if ( radeon_check_and_fixup_offset( dev_priv, filp_priv, &tex->offset ) ) {
+		DRM_ERROR( "Invalid destination offset\n" );
+		return DRM_ERR( EINVAL );
+	}
+
 	dev_priv->stats.boxes |= RADEON_BOX_TEXTURE_LOAD;
 
 	/* Flush the pixel cache.  This ensures no pixel data gets mixed
@@ -1377,6 +1653,7 @@
 {
 	DRM_DEVICE;
 	drm_radeon_private_t *dev_priv = dev->dev_private;
+	drm_file_t *filp_priv;
 	drm_radeon_sarea_t *sarea_priv = dev_priv->sarea_priv;
 	drm_device_dma_t *dma = dev->dma;
 	drm_buf_t *buf;
@@ -1390,6 +1667,8 @@
 		return DRM_ERR(EINVAL);
 	}
 
+	DRM_GET_PRIV_WITH_RETURN( filp_priv, filp );
+
 	DRM_COPY_FROM_USER_IOCTL( vertex, (drm_radeon_vertex_t *)data,
 			     sizeof(vertex) );
 
@@ -1429,11 +1708,14 @@
 		buf->used = vertex.count; /* not used? */
 
 		if ( sarea_priv->dirty & ~RADEON_UPLOAD_CLIPRECTS ) {
-			radeon_emit_state( dev_priv,
-					   &sarea_priv->context_state,
-					   sarea_priv->tex_state,
-					   sarea_priv->dirty );
-			
+			if ( radeon_emit_state( dev_priv, filp_priv,
+						&sarea_priv->context_state,
+						sarea_priv->tex_state,
+						sarea_priv->dirty ) ) {
+				DRM_ERROR( "radeon_emit_state failed\n" );
+				return DRM_ERR( EINVAL );
+			}
+
 			sarea_priv->dirty &= ~(RADEON_UPLOAD_TEX0IMAGES |
 					       RADEON_UPLOAD_TEX1IMAGES |
 					       RADEON_UPLOAD_TEX2IMAGES |
@@ -1461,6 +1743,7 @@
 {
 	DRM_DEVICE;
 	drm_radeon_private_t *dev_priv = dev->dev_private;
+	drm_file_t *filp_priv;
 	drm_radeon_sarea_t *sarea_priv = dev_priv->sarea_priv;
 	drm_device_dma_t *dma = dev->dma;
 	drm_buf_t *buf;
@@ -1475,6 +1758,8 @@
 		return DRM_ERR(EINVAL);
 	}
 
+	DRM_GET_PRIV_WITH_RETURN( filp_priv, filp );
+
 	DRM_COPY_FROM_USER_IOCTL( elts, (drm_radeon_indices_t *)data,
 			     sizeof(elts) );
 
@@ -1523,10 +1808,13 @@
 	buf->used = elts.end;
 
 	if ( sarea_priv->dirty & ~RADEON_UPLOAD_CLIPRECTS ) {
-		radeon_emit_state( dev_priv,
-				   &sarea_priv->context_state,
-				   sarea_priv->tex_state,
-				   sarea_priv->dirty );
+		if ( radeon_emit_state( dev_priv, filp_priv,
+					&sarea_priv->context_state,
+					sarea_priv->tex_state,
+					sarea_priv->dirty ) ) {
+			DRM_ERROR( "radeon_emit_state failed\n" );
+			return DRM_ERR( EINVAL );
+		}
 
 		sarea_priv->dirty &= ~(RADEON_UPLOAD_TEX0IMAGES |
 				       RADEON_UPLOAD_TEX1IMAGES |
@@ -1686,6 +1974,7 @@
 {
 	DRM_DEVICE;
 	drm_radeon_private_t *dev_priv = dev->dev_private;
+	drm_file_t *filp_priv;
 	drm_radeon_sarea_t *sarea_priv = dev_priv->sarea_priv;
 	drm_device_dma_t *dma = dev->dma;
 	drm_buf_t *buf;
@@ -1700,6 +1989,8 @@
 		return DRM_ERR(EINVAL);
 	}
 
+	DRM_GET_PRIV_WITH_RETURN( filp_priv, filp );
+
 	DRM_COPY_FROM_USER_IOCTL( vertex, (drm_radeon_vertex2_t *)data,
 			     sizeof(vertex) );
 
@@ -1747,7 +2038,10 @@
 					     sizeof(state) ) )
 				return DRM_ERR(EFAULT);
 
-			radeon_emit_state2( dev_priv, &state );
+			if ( radeon_emit_state2( dev_priv, filp_priv, &state ) ) {
+				DRM_ERROR( "radeon_emit_state2 failed\n" );
+				return DRM_ERR( EINVAL );
+			}
 
 			laststate = prim.stateidx;
 		}
@@ -1784,6 +2078,7 @@
 
 static int radeon_emit_packets( 
 	drm_radeon_private_t *dev_priv,
+	drm_file_t *filp_priv,
 	drm_radeon_cmd_header_t header,
 	drm_radeon_cmd_buffer_t *cmdbuf )
 {
@@ -1798,8 +2093,15 @@
 	sz = packet[id].len;
 	reg = packet[id].start;
 
-	if (sz * sizeof(int) > cmdbuf->bufsz) 
+	if (sz * sizeof(int) > cmdbuf->bufsz) {
+		DRM_ERROR( "Packet size provided larger than data provided\n" );
 		return DRM_ERR(EINVAL);
+	}
+
+	if ( radeon_check_and_fixup_packets( dev_priv, filp_priv, id, data ) ) {
+		DRM_ERROR( "Packet verification failed\n" );
+		return DRM_ERR( EINVAL );
+	}
 
 	BEGIN_RING(sz+1);
 	OUT_RING( CP_PACKET0( reg, (sz-1) ) );
@@ -1882,24 +2184,21 @@
 
 
 static int radeon_emit_packet3( drm_device_t *dev,
+				drm_file_t *filp_priv,
 				drm_radeon_cmd_buffer_t *cmdbuf )
 {
 	drm_radeon_private_t *dev_priv = dev->dev_private;
-	int cmdsz, tmp;
-	int *cmd = (int *)cmdbuf->buf;
+	unsigned int cmdsz;
+	int *cmd = (int *)cmdbuf->buf, ret;
 	RING_LOCALS;
 
-
 	DRM_DEBUG("\n");
 
-	if (DRM_GET_USER_UNCHECKED( tmp, &cmd[0]))
-		return DRM_ERR(EFAULT);
-
-	cmdsz = 2 + ((tmp & RADEON_CP_PACKET_COUNT_MASK) >> 16);
-
-	if ((tmp & 0xc0000000) != RADEON_CP_PACKET3 ||
-	    cmdsz * 4 > cmdbuf->bufsz)
-		return DRM_ERR(EINVAL);
+	if ( ( ret = radeon_check_and_fixup_packet3( dev_priv, filp_priv,
+						     cmdbuf, &cmdsz ) ) ) {
+		DRM_ERROR( "Packet verification failed\n" );
+		return ret;
+	}
 
 	BEGIN_RING( cmdsz );
 	OUT_RING_USER_TABLE( cmd, cmdsz );
@@ -1912,27 +2211,25 @@
 
 
 static int radeon_emit_packet3_cliprect( drm_device_t *dev,
+					 drm_file_t *filp_priv,
 					 drm_radeon_cmd_buffer_t *cmdbuf,
 					 int orig_nbox )
 {
 	drm_radeon_private_t *dev_priv = dev->dev_private;
 	drm_clip_rect_t box;
-	int cmdsz, tmp;
-	int *cmd = (int *)cmdbuf->buf;
+	unsigned int cmdsz;
+	int *cmd = (int *)cmdbuf->buf, ret;
 	drm_clip_rect_t *boxes = cmdbuf->boxes;
 	int i = 0;
 	RING_LOCALS;
 
 	DRM_DEBUG("\n");
 
-	if (DRM_GET_USER_UNCHECKED( tmp, &cmd[0]))
-		return DRM_ERR(EFAULT);
-
-	cmdsz = 2 + ((tmp & RADEON_CP_PACKET_COUNT_MASK) >> 16);
-
-	if ((tmp & 0xc0000000) != RADEON_CP_PACKET3 ||
-	    cmdsz * 4 > cmdbuf->bufsz)
-		return DRM_ERR(EINVAL);
+	if ( ( ret = radeon_check_and_fixup_packet3( dev_priv, filp_priv,
+						     cmdbuf, &cmdsz ) ) ) {
+		DRM_ERROR( "Packet verification failed\n" );
+		return ret;
+	}
 
 	if (!orig_nbox)
 		goto out;
@@ -2009,6 +2306,7 @@
 {
 	DRM_DEVICE;
 	drm_radeon_private_t *dev_priv = dev->dev_private;
+	drm_file_t *filp_priv;
 	drm_device_dma_t *dma = dev->dma;
 	drm_buf_t *buf = 0;
 	int idx;
@@ -2023,6 +2321,8 @@
 		return DRM_ERR(EINVAL);
 	}
 
+	DRM_GET_PRIV_WITH_RETURN( filp_priv, filp );
+
 	DRM_COPY_FROM_USER_IOCTL( cmdbuf, (drm_radeon_cmd_buffer_t *)data,
 			     sizeof(cmdbuf) );
 
@@ -2053,7 +2353,7 @@
 		switch (header.header.cmd_type) {
 		case RADEON_CMD_PACKET: 
 			DRM_DEBUG("RADEON_CMD_PACKET\n");
-			if (radeon_emit_packets( dev_priv, header, &cmdbuf )) {
+			if (radeon_emit_packets( dev_priv, filp_priv, header, &cmdbuf )) {
 				DRM_ERROR("radeon_emit_packets failed\n");
 				return DRM_ERR(EINVAL);
 			}
@@ -2096,7 +2396,7 @@
 
 		case RADEON_CMD_PACKET3:
 			DRM_DEBUG("RADEON_CMD_PACKET3\n");
-			if (radeon_emit_packet3( dev, &cmdbuf )) {
+			if (radeon_emit_packet3( dev, filp_priv, &cmdbuf )) {
 				DRM_ERROR("radeon_emit_packet3 failed\n");
 				return DRM_ERR(EINVAL);
 			}
@@ -2104,7 +2404,7 @@
 
 		case RADEON_CMD_PACKET3_CLIP:
 			DRM_DEBUG("RADEON_CMD_PACKET3_CLIP\n");
-			if (radeon_emit_packet3_cliprect( dev, &cmdbuf, orig_nbox )) {
+			if (radeon_emit_packet3_cliprect( dev, filp_priv, &cmdbuf, orig_nbox )) {
 				DRM_ERROR("radeon_emit_packet3_clip failed\n");
 				return DRM_ERR(EINVAL);
 			}
@@ -2212,5 +2512,33 @@
 		return DRM_ERR(EFAULT);
 	}
 	
+	return 0;
+}
+
+int radeon_cp_setparam( DRM_IOCTL_ARGS ) {
+	DRM_DEVICE;
+	drm_radeon_private_t *dev_priv = dev->dev_private;
+	drm_file_t *filp_priv;
+	drm_radeon_setparam_t sp;
+
+	if ( !dev_priv ) {
+		DRM_ERROR( "%s called with no initialization\n", __FUNCTION__ );
+		return DRM_ERR( EINVAL );
+	}
+
+	DRM_GET_PRIV_WITH_RETURN( filp_priv, filp );
+
+	DRM_COPY_FROM_USER_IOCTL( sp, ( drm_radeon_setparam_t* )data,
+				  sizeof( sp ) );
+
+	switch( sp.param ) {
+	case RADEON_SETPARAM_FB_LOCATION:
+		filp_priv->radeon_fb_delta = dev_priv->fb_location - sp.value;
+		break;
+	default:
+		DRM_DEBUG( "Invalid parameter %d\n", sp.param );
+		return DRM_ERR( EINVAL );
+	}
+
 	return 0;
 }
diff -Nru a/drivers/char/drm/tdfx.h b/drivers/char/drm/tdfx.h
--- a/drivers/char/drm/tdfx.h	Sun May 16 01:18:35 2004
+++ b/drivers/char/drm/tdfx.h	Sun May 16 01:18:35 2004
@@ -39,4 +39,14 @@
 #define __HAVE_MTRR		1
 #define __HAVE_CTX_BITMAP	1
 
+#define DRIVER_AUTHOR		"VA Linux Systems Inc."
+
+#define DRIVER_NAME		"tdfx"
+#define DRIVER_DESC		"3dfx Banshee/Voodoo3+"
+#define DRIVER_DATE		"20010216"
+
+#define DRIVER_MAJOR		1
+#define DRIVER_MINOR		0
+#define DRIVER_PATCHLEVEL	0
+
 #endif
diff -Nru a/drivers/char/drm/tdfx_drv.c b/drivers/char/drm/tdfx_drv.c
--- a/drivers/char/drm/tdfx_drv.c	Sun May 16 01:18:35 2004
+++ b/drivers/char/drm/tdfx_drv.c	Sun May 16 01:18:35 2004
@@ -34,47 +34,6 @@
 #include "tdfx.h"
 #include "drmP.h"
 
-#define DRIVER_AUTHOR		"VA Linux Systems Inc."
-
-#define DRIVER_NAME		"tdfx"
-#define DRIVER_DESC		"3dfx Banshee/Voodoo3+"
-#define DRIVER_DATE		"20010216"
-
-#define DRIVER_MAJOR		1
-#define DRIVER_MINOR		0
-#define DRIVER_PATCHLEVEL	0
-
-#ifndef PCI_VENDOR_ID_3DFX
-#define PCI_VENDOR_ID_3DFX 0x121A
-#endif
-#ifndef PCI_DEVICE_ID_3DFX_VOODOO5
-#define PCI_DEVICE_ID_3DFX_VOODOO5 0x0009
-#endif
-#ifndef PCI_DEVICE_ID_3DFX_VOODOO4
-#define PCI_DEVICE_ID_3DFX_VOODOO4 0x0007
-#endif
-#ifndef PCI_DEVICE_ID_3DFX_VOODOO3_3000 /* Voodoo3 3000 */
-#define PCI_DEVICE_ID_3DFX_VOODOO3_3000 0x0005
-#endif
-#ifndef PCI_DEVICE_ID_3DFX_VOODOO3_2000 /* Voodoo3 3000 */
-#define PCI_DEVICE_ID_3DFX_VOODOO3_2000 0x0004
-#endif
-#ifndef PCI_DEVICE_ID_3DFX_BANSHEE
-#define PCI_DEVICE_ID_3DFX_BANSHEE 0x0003
-#endif
-
-static drm_pci_list_t DRM(idlist)[] = {
-	{ PCI_VENDOR_ID_3DFX, PCI_DEVICE_ID_3DFX_BANSHEE },
-	{ PCI_VENDOR_ID_3DFX, PCI_DEVICE_ID_3DFX_VOODOO3_2000 },
-	{ PCI_VENDOR_ID_3DFX, PCI_DEVICE_ID_3DFX_VOODOO3_3000 },
-	{ PCI_VENDOR_ID_3DFX, PCI_DEVICE_ID_3DFX_VOODOO4 },
-	{ PCI_VENDOR_ID_3DFX, PCI_DEVICE_ID_3DFX_VOODOO5 },
-	{ 0, 0 }
-};
-
-#define DRIVER_CARD_LIST DRM(idlist)
-
-
 #include "drm_auth.h"
 #include "drm_bufs.h"
 #include "drm_context.h"
diff -Nru a/drivers/char/dz.c b/drivers/char/dz.c
--- a/drivers/char/dz.c	Sun May 16 01:18:33 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,1540 +0,0 @@
-/*
- * dz.c: Serial port driver for DECStations equiped 
- *       with the DZ chipset.
- *
- * Copyright (C) 1998 Olivier A. D. Lebaillif 
- *             
- * Email: olivier.lebaillif@ifrsys.com
- *
- * [31-AUG-98] triemer
- * Changed IRQ to use Harald's dec internals interrupts.h
- * removed base_addr code - moving address assignment to setup.c
- * Changed name of dz_init to rs_init to be consistent with tc code
- * [13-NOV-98] triemer fixed code to receive characters
- *    after patches by harald to irq code.  
- * [09-JAN-99] triemer minor fix for schedule - due to removal of timeout
- *            field from "current" - somewhere between 2.1.121 and 2.1.131
-Qua Jun 27 15:02:26 BRT 2001
- * [27-JUN-2001] Arnaldo Carvalho de Melo <acme@conectiva.com.br> - cleanups
- *  
- * Parts (C) 1999 David Airlie, airlied@linux.ie 
- * [07-SEP-99] Bugfixes 
- */
-
-/* #define DEBUG_DZ 1 */
-
-#include <linux/module.h>
-
-#include <linux/config.h>
-#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/init.h> 
-#include <linux/slab.h>
-#include <linux/mm.h>
-#include <linux/major.h>
-#include <linux/param.h>
-#include <linux/interrupt.h>
-#include <linux/serial.h>
-#include <linux/serialP.h>
-#include <asm-mips/wbflush.h>
-#include <asm/dec/interrupts.h>			/* for definition of SERIAL */
-
-/* for definition of struct console */
-#ifdef CONFIG_SERIAL_CONSOLE
-#define CONSOLE_LINE (3)
-#endif /* ifdef CONFIG_SERIAL_CONSOLE */
-#if defined(CONFIG_SERIAL_CONSOLE) || defined(DEBUG_DZ)
-#include <linux/console.h>
-#endif /* if defined(CONFIG_SERIAL_CONSOLE) || defined(DEBUG_DZ) */
-
-#include <linux/tty.h>
-#include <linux/tty_flip.h>
-
-#include <asm/uaccess.h>
-#include <asm/irq.h>
-#include <asm/dec/machtype.h>
-#include <asm/dec/kn01.h>
-#include <asm/dec/kn02.h>
-
-#ifdef DEBUG_DZ
-#include <linux/ptrace.h>
-#include <linux/fs.h>
-#include <asm/bootinfo.h>
-
-extern int (*prom_printf) (char *,...);
-#endif
-
-
-
-#include "dz.h"
-
-#define DZ_INTR_DEBUG 1
-
-DECLARE_TASK_QUEUE(tq_serial);
-
-static struct dz_serial *lines[4];
-static unsigned char tmp_buffer[256];
-
-
-
-#ifdef DEBUG_DZ
-/*
- * debugging code to send out chars via prom 
- */
-static void debug_console( const char *s,int count)
-{
-	unsigned i;
-
-	for (i = 0; i < count; i++) {
-		if (*s == 10)
-			prom_printf("%c", 13);
-		prom_printf("%c", *s++);
-	}
-}
-#endif
-
-/*
- * ------------------------------------------------------------
- * dz_in () and dz_out ()
- *
- * These routines are used to access the registers of the DZ 
- * chip, hiding relocation differences between implementation.
- * ------------------------------------------------------------
- */
-
-static inline unsigned short dz_in (struct dz_serial *info, unsigned offset)
-{
-	volatile u16 *addr = (volatile u16 *)(info->port + offset);
-
-	return *addr;
-}
-
-static inline void dz_out (struct dz_serial *info, unsigned offset,
-                           unsigned short value)
-{
-	volatile u16 *addr = (volatile u16 *)(info->port + offset);
-	*addr = value;
-}
-
-/*
- * ------------------------------------------------------------
- * rs_stop () and rs_start ()
- *
- * These routines are called before setting or resetting 
- * tty->stopped. They enable or disable transmitter interrupts, 
- * as necessary.
- * ------------------------------------------------------------
- */
-
-static void dz_stop (struct tty_struct *tty)
-{
-	struct dz_serial *info; 
-	unsigned short mask, tmp;
-
-	if (!tty) 
-		return; 
- 
-	info = (struct dz_serial *)tty->driver_data; 
-
-	mask = 1 << info->line;
-	tmp = dz_in (info, DZ_TCR);       /* read the TX flag */
-
-	tmp &= ~mask;                   /* clear the TX flag */
-	dz_out (info, DZ_TCR, tmp);
-}
-
-static void dz_start (struct tty_struct *tty)
-{
-	struct dz_serial *info = (struct dz_serial *)tty->driver_data;
-	unsigned short mask, tmp;
-
-	mask = 1 << info->line;
-	tmp = dz_in (info, DZ_TCR);      /* read the TX flag */
-
-	tmp |= mask;                   /* set the TX flag */
-	dz_out (info, DZ_TCR, tmp);
-}
-
-/*
- * ------------------------------------------------------------
- * Here starts the interrupt handling routines.  All of the 
- * following subroutines are declared as inline and are folded 
- * into dz_interrupt.  They were separated out for readability's 
- * sake. 
- *
- * Note: rs_interrupt() is a "fast" interrupt, which means that it
- * runs with interrupts turned off.  People who may want to modify
- * rs_interrupt() should try to keep the interrupt handler as fast as
- * possible.  After you are done making modifications, it is not a bad
- * idea to do:
- * 
- * gcc -S -DKERNEL -Wall -Wstrict-prototypes -O6 -fomit-frame-pointer dz.c
- *
- * and look at the resulting assemble code in serial.s.
- *
- * ------------------------------------------------------------
- */
-
-/*
- * ------------------------------------------------------------
- * dz_sched_event ()
- *
- * This routine is used by the interrupt handler to schedule
- * processing in the software interrupt portion of the driver.
- * ------------------------------------------------------------
- */
-static inline void dz_sched_event (struct dz_serial *info, int event)
-{
-	info->event |= 1 << event;
-	queue_task(&info->tqueue, &tq_serial);
-	mark_bh(SERIAL_BH);
-}
-
-/*
- * ------------------------------------------------------------
- * receive_char ()
- *
- * This routine deals with inputs from any lines.
- * ------------------------------------------------------------
- */
-static inline void receive_chars (struct dz_serial *info_in)
-{
-	struct dz_serial *info;
-	struct tty_struct *tty = 0;
-	struct async_icount *icount;
-	int ignore = 0;
-	unsigned short status, tmp;
-	unsigned char ch;
-
-	/*
-	 * This code is going to be a problem...  the call to tty_flip_buffer
-	 * is going to need to be rethought...
-	 */
-	do {
-		status = dz_in (info_in, DZ_RBUF);
-		info = lines[LINE(status)];
-
-		/* punt so we don't get duplicate characters */
-		if (!(status & DZ_DVAL))
-			goto ignore_char;
-
-		ch = UCHAR(status);			/* grab the char */
-
-#if 0
-		if (info->is_console) {
-			if (ch == 0)
-				return;			/* it's a break ... */
-		}
-#endif
-
-		tty = info->tty;	/* now tty points to the proper dev */
-		icount = &info->icount;
-
-		if (!tty)
-			break;
-		if (tty->flip.count >= TTY_FLIPBUF_SIZE) break;
-
-		*tty->flip.char_buf_ptr = ch;
-		*tty->flip.flag_buf_ptr = 0;
-		icount->rx++;
-
-		/* keep track of the statistics */
-		if (status & (DZ_OERR | DZ_FERR | DZ_PERR)) {
-			if (status & DZ_PERR)		/* parity error */
-				icount->parity++;
-			else if (status & DZ_FERR)	/* frame error */
-				icount->frame++;
-			if (status & DZ_OERR)		/* overrun error */
-				icount->overrun++;
-
-			/*
-			 * Check to see if we should ignore the character and
-			 * mask off conditions that should be ignored
-			 */
-
-			if (status & info->ignore_status_mask) {
-				if (++ignore > 100)
-					break;
-				goto ignore_char;
-			}
-
-			/* mask off the error conditions we want to ignore */
-			tmp = status & info->read_status_mask;
-
-			if (tmp & DZ_PERR) {
-				*tty->flip.flag_buf_ptr = TTY_PARITY;
-#ifdef DEBUG_DZ
-				debug_console("PERR\n",5);
-#endif /* DEBUG_DZ */
-			} else if (tmp & DZ_FERR) {
-				*tty->flip.flag_buf_ptr = TTY_FRAME;
-#ifdef DEBUG_DZ
-				debug_console("FERR\n",5);
-#endif /* DEBUG_DZ */
-			} if (tmp & DZ_OERR) { 
-#ifdef DEBUG_DZ
-				debug_console("OERR\n",5);
-#endif /* DEBUG_DZ */
-				if (tty->flip.count < TTY_FLIPBUF_SIZE) {
-					tty->flip.count++;
-					tty->flip.flag_buf_ptr++;
-					tty->flip.char_buf_ptr++;
-					*tty->flip.flag_buf_ptr = TTY_OVERRUN;
-				}
-			}
-		}
-	tty->flip.flag_buf_ptr++;
-	tty->flip.char_buf_ptr++;
-	tty->flip.count++;
-ignore_char:
-	;
-	} while (status & DZ_DVAL);
-
-	if (tty)
-		tty_flip_buffer_push(tty);
-}
-
-/*
- * ------------------------------------------------------------
- * transmit_char ()
- *
- * This routine deals with outputs to any lines.
- * ------------------------------------------------------------
- */
-static inline void transmit_chars (struct dz_serial *info)
-{
-	unsigned char tmp;
-
-	if (info->x_char) {           /* XON/XOFF chars */
-		dz_out(info, DZ_TDR, info->x_char);
-		info->icount.tx++;
-		info->x_char = 0;
-		return;
-	}
-
-	/* if nothing to do or stopped or hardware stopped */
-	if ((info->xmit_cnt <= 0) || info->tty->stopped ||
-	    info->tty->hw_stopped) {
-		dz_stop(info->tty);
-		return;
-	}
-
-	/*
-	 * If something to do ... (rember the dz has no output fifo so we go
-	 * one char at a time :-<
-	 */
-	tmp = (unsigned short) info->xmit_buf[info->xmit_tail++];
-	dz_out(info, DZ_TDR, tmp);
-	info->xmit_tail = info->xmit_tail & (DZ_XMIT_SIZE - 1);
-	info->icount.tx++;
-
-	if (--info->xmit_cnt < WAKEUP_CHARS)
-	dz_sched_event(info, DZ_EVENT_WRITE_WAKEUP);
-
-	/* Are we done */
-	if (info->xmit_cnt <= 0)
-		dz_stop(info->tty);
-}
-
-/*
- * ------------------------------------------------------------
- * check_modem_status ()
- *
- * Only valid for the MODEM line duh !
- * ------------------------------------------------------------
- */
-static inline void check_modem_status (struct dz_serial *info)
-{
-	unsigned short status;
-
-	/* if not ne modem line just return */
-	if (info->line != DZ_MODEM)
-		return;
-
-	status = dz_in(info, DZ_MSR);
-  
-	/* it's easy, since DSR2 is the only bit in the register */
-	if (status)
-		info->icount.dsr++;
-}
-
-/*
- * ------------------------------------------------------------
- * dz_interrupt ()
- *
- * this is the main interrupt routine for the DZ chip.
- * It deals with the multiple ports.
- * ------------------------------------------------------------
- */
-static void dz_interrupt (int irq, void *dev, struct pt_regs *regs)
-{
-	struct dz_serial *info;
-	unsigned short status;
-
-	 /* get the reason why we just got an irq */
-	status = dz_in((struct dz_serial *)dev, DZ_CSR);
-	info = lines[LINE(status)];     /* re-arrange info the proper port */
-
-	if (status & DZ_RDONE) 
-		receive_chars(info);	/* the receive function */
-
-	if (status & DZ_TRDY) 
-		transmit_chars (info);
-}
-
-/*
- * -------------------------------------------------------------------
- * Here ends the DZ interrupt routines.
- * -------------------------------------------------------------------
- */
-
-/*
- * This routine is used to handle the "bottom half" processing for the
- * serial driver, known also the "software interrupt" processing.
- * This processing is done at the kernel interrupt level, after the
- * rs_interrupt() has returned, BUT WITH INTERRUPTS TURNED ON.  This
- * is where time-consuming activities which can not be done in the
- * interrupt driver proper are done; the interrupt driver schedules
- * them using rs_sched_event(), and they get done here.
- */
-static void do_serial_bh (void)
-{
-	run_task_queue (&tq_serial);
-}
-
-static void do_softint (void *private_data)
-{
-	struct dz_serial *info = (struct dz_serial *) private_data;
-	struct tty_struct *tty = info->tty;
-
-	if (!tty)
-		return;
-
-	if (test_and_clear_bit(DZ_EVENT_WRITE_WAKEUP, &info->event)) {
-		if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) &&
-		    tty->ldisc.write_wakeup)
-			(tty->ldisc.write_wakeup) (tty);
-		wake_up_interruptible (&tty->write_wait);
-	}
-}
-
-/*
- * -------------------------------------------------------------------
- * This routine is called from the scheduler tqueue when the interrupt
- * routine has signalled that a hangup has occurred.  The path of
- * hangup processing is:
- *
- *      serial interrupt routine -> (scheduler tqueue) ->
- *      do_serial_hangup() -> tty->hangup() -> rs_hangup()
- * ------------------------------------------------------------------- 
- */
-static void do_serial_hangup (void *private_data)
-{
-	struct dz_serial *info = (struct dz_serial *) private_data;
-	struct tty_struct *tty = info->tty;
-        
-	if (!tty)
-		return;
-
-	tty_hangup(tty);
-}
-
-/*
- * -------------------------------------------------------------------
- * startup ()
- *
- * various initialization tasks
- * ------------------------------------------------------------------- 
- */
-static int startup (struct dz_serial *info)
-{
-	unsigned long page, flags;
-	unsigned short tmp;
-
-	if (info->is_initialized)
-		return 0;
-  
-	save_and_cli(flags);
-
-	if (!info->port) {
-		if (info->tty) set_bit(TTY_IO_ERROR, &info->tty->flags);
-		restore_flags(flags);
-		return -ENODEV;
-	}
-
-	if (!info->xmit_buf) {
-		page = get_zeroed_page(GFP_KERNEL);
-		if (!page) {
-			restore_flags (flags);
-		return -ENOMEM;
-		}
-		info->xmit_buf = (unsigned char *)page;
-	}
-
-	if (info->tty)
-		clear_bit(TTY_IO_ERROR, &info->tty->flags);
-
-	/* enable the interrupt and the scanning */
-	tmp = dz_in(info, DZ_CSR);
-	tmp |= (DZ_RIE | DZ_TIE | DZ_MSE);
-	dz_out(info, DZ_CSR, tmp);
-
-	info->xmit_cnt = info->xmit_head = info->xmit_tail = 0;
-
-	change_speed(info);			/* set up the speed */
-
-	/*
-	 * Clear the line transmitter buffer I can't figure out why I need to
-	 * do this - but its necessary - in order for the console portion and
-	 * the interrupt portion to live happily side by side.
-	 */
-
-	info->is_initialized = 1;
-
-	restore_flags(flags);
-
-	return 0;
-}
-
-/* 
- * -------------------------------------------------------------------
- * shutdown ()
- *
- * This routine will shutdown a serial port; interrupts are disabled, and
- * DTR is dropped if the hangup on close termio flag is on.
- * ------------------------------------------------------------------- 
- */
-static void shutdown (struct dz_serial *info)
-{
-	unsigned long flags;
-	unsigned short tmp;
-
-	if (!info->is_initialized)
-		return;
-
-	save_and_cli(flags);
-
-	dz_stop (info->tty);
-
-	info->cflags &= ~DZ_CREAD;	/* turn off receive enable flag */
-	dz_out(info, DZ_LPR, info->cflags);
-
-	if (info->xmit_buf) {               /* free Tx buffer */
-		free_page((unsigned long)info->xmit_buf);
-		info->xmit_buf = 0;
-	}
-
-	if (!info->tty || (info->tty->termios->c_cflag & HUPCL)) {
-		tmp = dz_in(info, DZ_TCR);
-		if (tmp & DZ_MODEM_DTR) {
-			tmp &= ~DZ_MODEM_DTR;
-			dz_out(info, DZ_TCR, tmp);
-		}
-	}
-
-	if (info->tty)
-		set_bit (TTY_IO_ERROR, &info->tty->flags);
-
-	info->is_initialized = 0;
-
-	restore_flags (flags);
-}
-
-/* 
- * -------------------------------------------------------------------
- * change_speed ()
- *
- * set the baud rate.
- * ------------------------------------------------------------------- 
- */
-static void change_speed (struct dz_serial *info)
-{
-	unsigned long flags;
-	unsigned cflag;
-	int baud;
-
-	if (!info->tty || !info->tty->termios)
-		return;
-  
-	save_and_cli(flags);
-  
-	info->cflags = info->line;
-
-	cflag = info->tty->termios->c_cflag;
-
-	switch (cflag & CSIZE) {
-		case CS5:
-			info->cflags |= DZ_CS5;
-			break;
-		case CS6:
-			info->cflags |= DZ_CS6;
-			break;
-		case CS7:
-			info->cflags |= DZ_CS7;
-			break;
-		case CS8: 
-		default:
-			info->cflags |= DZ_CS8;
-	}
-
-	if (cflag & CSTOPB)
-		info->cflags |= DZ_CSTOPB;
-	if (cflag & PARENB)
-		info->cflags |= DZ_PARENB;
-	if (cflag & PARODD)
-		info->cflags |= DZ_PARODD;
-  
-	baud = tty_get_baud_rate(info->tty);
-	switch (baud) {
-	case 50:
-		info->cflags |= DZ_B50;
-		break;
-	case 75:
-		info->cflags |= DZ_B75;
-		break;
-	case 110:
-		info->cflags |= DZ_B110;
-		break;
-	case 134:
-		info->cflags |= DZ_B134;
-		break; 
-	case 150:
-		info->cflags |= DZ_B150;
-		break;
-	case 300:
-		info->cflags |= DZ_B300;
-		break; 
-	case 600:
-		info->cflags |= DZ_B600;
-		break;
-	case 1200:
-		info->cflags |= DZ_B1200;
-		break; 
-	case 1800:
-		info->cflags |= DZ_B1800;
-		break;
-	case 2000:
-		info->cflags |= DZ_B2000;
-		break;
-	case 2400:
-		info->cflags |= DZ_B2400;
-		break;
-	case 3600:
-		info->cflags |= DZ_B3600;
-		break; 
-	case 4800:
-		info->cflags |= DZ_B4800;
-		break;
-	case 7200:
-		info->cflags |= DZ_B7200;
-		break; 
-	case 9600: 
-	default:
-		info->cflags |= DZ_B9600; 
-	}
-
-	info->cflags |= DZ_RXENAB;
-	dz_out(info, DZ_LPR, info->cflags);
-
-	/* setup accept flag */
-	info->read_status_mask = DZ_OERR;
-	if (I_INPCK(info->tty))
-		info->read_status_mask |= (DZ_FERR | DZ_PERR); 
-  
-	/* characters to ignore */
-	info->ignore_status_mask = 0;
-	if (I_IGNPAR(info->tty))
-		info->ignore_status_mask |= (DZ_FERR | DZ_PERR);
-
-	restore_flags(flags);
-}
-
-/* 
- * -------------------------------------------------------------------
- * dz_flush_char ()
- *
- * Flush the buffer.
- * ------------------------------------------------------------------- 
- */
-static void dz_flush_chars (struct tty_struct *tty)
-{
-	struct dz_serial *info = (struct dz_serial *)tty->driver_data;
-	unsigned long flags;
-
-	if (info->xmit_cnt <= 0 || tty->stopped || tty->hw_stopped ||
-	    !info->xmit_buf)
-		return;
-
-	save_and_cli(flags);
-	dz_start (info->tty);
-	restore_flags(flags);
-}
-
-
-/* 
- * -------------------------------------------------------------------
- * dz_write ()
- *
- * main output routine.
- * ------------------------------------------------------------------- 
- */
-static int dz_write (struct tty_struct *tty, int from_user,
-                     const unsigned char *buf, int count)
-{
-	struct dz_serial *info = (struct dz_serial *)tty->driver_data;
-	unsigned long flags;
-	int c, ret = 0;
-
-	if (!tty )
-		return ret;
-	if (!info->xmit_buf)
-		return ret;
-	if (!tmp_buf)
-		tmp_buf = tmp_buffer;
-
-	if (from_user) {
-		down (&tmp_buf_sem);
-		while (1) {
-			c = MIN(count, MIN(DZ_XMIT_SIZE - info->xmit_cnt - 1,
-			                   DZ_XMIT_SIZE - info->xmit_head));
-			if (c <= 0)
-				break;
-
-			c -= copy_from_user (tmp_buf, buf, c);
-			if (!c) {
-				if (!ret)
-					ret = -EFAULT;
-				break;
-			}
-
-			save_and_cli(flags);
-
-			c = MIN(c, MIN(DZ_XMIT_SIZE - info->xmit_cnt - 1,
-			               DZ_XMIT_SIZE - info->xmit_head));
-			memcpy(info->xmit_buf + info->xmit_head, tmp_buf, c);
-			info->xmit_head = ((info->xmit_head + c) &
-					   (DZ_XMIT_SIZE - 1));
-			info->xmit_cnt += c;
-			restore_flags(flags);
-
-			buf += c;
-			count -= c;
-			ret += c;
-		}
-		up(&tmp_buf_sem);
-	} else {
-		while (1) {
-			save_and_cli(flags);
-
-			c = MIN(count, MIN(DZ_XMIT_SIZE - info->xmit_cnt - 1,
-			                   DZ_XMIT_SIZE - info->xmit_head));
-			if (c <= 0) {
-				restore_flags (flags);
-				break;
-			}
-			memcpy(info->xmit_buf + info->xmit_head, buf, c);
-			info->xmit_head = ((info->xmit_head + c) &
-			                   (DZ_XMIT_SIZE-1));
-			info->xmit_cnt += c;
-			restore_flags(flags);
-
-			buf += c;
-			count -= c;
-			ret += c;
-		}
-	}
-
-	if (info->xmit_cnt) {
-		if (!tty->stopped) {
-			if (!tty->hw_stopped) {
-				dz_start (info->tty);
-			}
-		}
-	}
-
-	return ret;
-}
-
-/* 
- * -------------------------------------------------------------------
- * dz_write_room ()
- *
- * compute the amount of space available for writing.
- * ------------------------------------------------------------------- 
- */
-static int dz_write_room (struct tty_struct *tty)
-{
-	struct dz_serial *info = (struct dz_serial *)tty->driver_data;
-	int ret;
-
-	ret = DZ_XMIT_SIZE - info->xmit_cnt - 1;
-	if (ret < 0)
-		ret = 0;
-
-	return ret;
-}
-
-/* 
- * -------------------------------------------------------------------
- * dz_chars_in_buffer ()
- *
- * compute the amount of char left to be transmitted
- * ------------------------------------------------------------------- 
- */
-static int dz_chars_in_buffer (struct tty_struct *tty)
-{
-	struct dz_serial *info = (struct dz_serial *)tty->driver_data;
-  
-	return info->xmit_cnt;
-}
-
-/* 
- * -------------------------------------------------------------------
- * dz_flush_buffer ()
- *
- * Empty the output buffer
- * ------------------------------------------------------------------- 
- */
-static void dz_flush_buffer (struct tty_struct *tty)
-{
-	struct dz_serial *info = (struct dz_serial *)tty->driver_data;
-                                
-	cli();
-	info->xmit_cnt = info->xmit_head = info->xmit_tail = 0;
-	sti();
-
-	wake_up_interruptible (&tty->write_wait);
-
-	if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) &&
-	     tty->ldisc.write_wakeup)
-		tty->ldisc.write_wakeup(tty);
-}
-
-/*
- * ------------------------------------------------------------
- * dz_throttle () and dz_unthrottle ()
- * 
- * This routine is called by the upper-layer tty layer to signal that
- * incoming characters should be throttled (or not).
- * ------------------------------------------------------------
- */
-static void dz_throttle (struct tty_struct *tty)
-{
-	struct dz_serial *info = (struct dz_serial *)tty->driver_data;  
-
-	if (I_IXOFF(tty))
-		info->x_char = STOP_CHAR(tty);
-}
-
-static void dz_unthrottle (struct tty_struct *tty)
-{
-	struct dz_serial *info = (struct dz_serial *)tty->driver_data;  
-
-	if (I_IXOFF(tty)) {
-		if (info->x_char)
-			info->x_char = 0;
-		else
-			info->x_char = START_CHAR(tty);
-	}
-}
-
-static void dz_send_xchar (struct tty_struct *tty, char ch)
-{
-	struct dz_serial *info = (struct dz_serial *)tty->driver_data;
-
-	info->x_char = ch;
-
-	if (ch)
-		dz_start(info->tty);
-}
-
-/*
- * ------------------------------------------------------------
- * rs_ioctl () and friends
- * ------------------------------------------------------------
- */
-static int get_serial_info(struct dz_serial *info,
-                           struct serial_struct *retinfo)
-{
-	struct serial_struct tmp;
-  
-	if (!retinfo)
-		return -EFAULT;
-
-	memset (&tmp, 0, sizeof(tmp));
-
-	tmp.type = info->type;
-	tmp.line = info->line;
-	tmp.port = info->port;
-	tmp.irq = SERIAL;
-	tmp.flags = info->flags;
-	tmp.baud_base = info->baud_base;
-	tmp.close_delay = info->close_delay;
-	tmp.closing_wait = info->closing_wait;
-
-	return copy_to_user(retinfo, &tmp, sizeof(*retinfo)) ? -EFAULT : 0;
-}
-
-static int set_serial_info (struct dz_serial *info,
-                            struct serial_struct *new_info)
-{
-	struct serial_struct new_serial;
-	struct dz_serial old_info;
-	int retval = 0;
-
-	if (!new_info)
-		return -EFAULT;
-
-	if (copy_from_user(&new_serial, new_info, sizeof(new_serial)))
-		return -EFAULT;
-
-	old_info = *info;
-
-	if (!capable(CAP_SYS_ADMIN))
-		return -EPERM;
-
-	if (info->count > 1)
-		return -EBUSY;
-
-	/*
-	 * OK, past this point, all the error checking has been done.
-	 * At this point, we start making changes.....
-	 */
-
-	info->baud_base = new_serial.baud_base;
-	info->type = new_serial.type;
-	info->close_delay = new_serial.close_delay;
-	info->closing_wait = new_serial.closing_wait;
-
-	retval = startup(info);
-
-	return retval;
-}
-
-/*
- * get_lsr_info - get line status register info
- *
- * Purpose: Let user call ioctl() to get info when the UART physically
- *          is emptied.  On bus types like RS485, the transmitter must
- *          release the bus after transmitting. This must be done when
- *          the transmit shift register is empty, not be done when the
- *          transmit holding register is empty.  This functionality
- *          allows an RS485 driver to be written in user space. 
- */
-static int get_lsr_info (struct dz_serial *info, unsigned int *value)
-{
-	unsigned short status = dz_in (info, DZ_LPR);
-
-	return put_user (status, value);
-}
-
-/*
- * This routine sends a break character out the serial port.
- */
-static void send_break (struct dz_serial *info, int duration)
-{
-	unsigned long flags;
-	unsigned short tmp, mask;
-
-	if (!info->port)
-		return;
-
-	mask = 1 << info->line;
-	tmp = dz_in (info, DZ_TCR);
-	tmp |= mask;
-
-	current->state = TASK_INTERRUPTIBLE;
-
-	save_and_cli(flags);
-	dz_out(info, DZ_TCR, tmp);
-	schedule_timeout(duration);
-	tmp &= ~mask;
-	dz_out(info, DZ_TCR, tmp);
-	restore_flags(flags);
-}
-
-static int dz_ioctl(struct tty_struct *tty, struct file *file,
-                    unsigned int cmd, unsigned long arg)
-{
-	int error;
-	struct dz_serial * info = (struct dz_serial *)tty->driver_data;
-	int retval;
-
-	if (cmd != TIOCGSERIAL && cmd != TIOCSSERIAL &&
-	    cmd != TIOCSERCONFIG && cmd != TIOCSERGWILD  &&
-	    cmd != TIOCSERSWILD && cmd != TIOCSERGSTRUCT) {
-		if (tty->flags & (1 << TTY_IO_ERROR))
-			return -EIO;
-	}
-
-	switch (cmd) {
-	case TCSBRK:		/* SVID version: non-zero arg --> no break */
-		retval = tty_check_change(tty);
-		if (retval)
-			return retval;
-		tty_wait_until_sent(tty, 0);
-		if (!arg)
-			send_break(info, HZ/4); /* 1/4 second */
-		return 0;
-
-	case TCSBRKP:		/* support for POSIX tcsendbreak() */
-		retval = tty_check_change(tty);
-		if (retval)
-			return retval;
-		tty_wait_until_sent(tty, 0);
-		send_break(info, arg ? arg*(HZ/10) : HZ/4);
-		return 0;
-
-	case TIOCGSOFTCAR:
-		return put_user(C_CLOCAL(tty) ? 1 : 0, (unsigned long *)arg);
-
-	case TIOCSSOFTCAR:
-		if (get_user (arg, (unsigned long *)arg))
-			return -EFAULT;
-
-		tty->termios->c_cflag = (tty->termios->c_cflag & ~CLOCAL) |
-		                        (arg ? CLOCAL : 0);
-		return 0;
-
-	case TIOCGSERIAL:
-		return get_serial_info(info, (struct serial_struct *)arg);
-
-	case TIOCSSERIAL:
-		return set_serial_info(info, (struct serial_struct *) arg);
-
-	case TIOCSERGETLSR:		/* Get line status register */
-		return get_lsr_info (info, (unsigned int *)arg);
-
-	case TIOCSERGSTRUCT:
-		return copy_to_user((struct dz_serial *)arg, info,
-		                    sizeof(struct dz_serial)) ? -EFAULT : 0;
- 
-	default:
-		return -ENOIOCTLCMD;
-	}
-
-	return 0;
-}
-
-static void dz_set_termios (struct tty_struct *tty,
-			    struct termios *old_termios)
-{
-	struct dz_serial *info = (struct dz_serial *)tty->driver_data;
-
-	if (tty->termios->c_cflag == old_termios->c_cflag)
-		return;
-
-	change_speed (info);
-
-	if ((old_termios->c_cflag & CRTSCTS) &&
-	    !(tty->termios->c_cflag & CRTSCTS)) {
-		tty->hw_stopped = 0;
-		dz_start(tty);
-	}
-}
-
-/*
- * ------------------------------------------------------------
- * dz_close()
- * 
- * This routine is called when the serial port gets closed.  First, we
- * wait for the last remaining data to be sent.  Then, we turn off
- * the transmit enable and receive enable flags.
- * ------------------------------------------------------------
- */
-static void dz_close(struct tty_struct *tty, struct file *filp)
-{
-	struct dz_serial * info = (struct dz_serial *)tty->driver_data;
-	unsigned long flags;
-
-	if (!info)
-		return;
- 
-	save_and_cli(flags); 
-
-	if (tty_hung_up_p(filp)) {
-		restore_flags(flags);
-		return;
-	}
-
-	if ((tty->count == 1) && (info->count != 1)) {
-		/*
-		 * Uh, oh.  tty->count is 1, which means that the tty structure
-		 * will be freed.  Info->count should always be one in these
-		 * conditions.  If it's greater than one, we've got real
-		 * problems, since it means the serial port won't be shutdown.
-		 */
-		printk("dz_close: bad serial port count; tty->count is 1, "
-		       "info->count is %d\n", info->count);
-		info->count = 1;
-	}
-
-	if (--info->count < 0) {
-		printk("ds_close: bad serial port count for ttyS%02d: %d\n",
-		       info->line, info->count);
-		info->count = 0;
-	}
-
-	if (info->count) {
-		restore_flags(flags);
-		return;
-	}
-	info->flags |= DZ_CLOSING;
-	/*
-	 * Now we wait for the transmit buffer to clear; and we notify the line
-	 * discipline to only process XON/XOFF characters.
-	 */
-	tty->closing = 1;
-
-	if (info->closing_wait != DZ_CLOSING_WAIT_NONE)
-		tty_wait_until_sent(tty, info->closing_wait);
-
-	/*
-	 * At this point we stop accepting input.  To do this, we disable the
-	 * receive line status interrupts.
-	 */
-	shutdown(info);
-
-	if (tty->driver->flush_buffer)
-		tty->driver->flush_buffer (tty);
-	if (tty->ldisc.flush_buffer)
-		tty->ldisc.flush_buffer (tty);
-	tty->closing = 0;
-	info->event = 0;
-	info->tty = 0;
-
-	if (tty->ldisc.num != ldiscs[N_TTY].num) {
-		if (tty->ldisc.close)
-			tty->ldisc.close(tty);
-		tty->ldisc = ldiscs[N_TTY];
-		tty->termios->c_line = N_TTY;
-		if (tty->ldisc.open)
-			tty->ldisc.open(tty);
-	}
-	if (info->blocked_open) {
-		if (info->close_delay) {
-			current->state = TASK_INTERRUPTIBLE;
-			schedule_timeout(info->close_delay);
-		}
-		wake_up_interruptible(&info->open_wait);
-	}
-
-	info->flags &= ~(DZ_NORMAL_ACTIVE | DZ_CLOSING);
-	wake_up_interruptible(&info->close_wait);
-
-	restore_flags(flags);
-}
-
-/*
- * dz_hangup () --- called by tty_hangup() when a hangup is signaled.
- */
-static void dz_hangup (struct tty_struct *tty)
-{
-	struct dz_serial *info = (struct dz_serial *) tty->driver_data;
-  
-	dz_flush_buffer(tty);
-	shutdown(info);
-	info->event = 0;
-	info->count = 0;
-	info->flags &= ~DZ_NORMAL_ACTIVE;
-	info->tty = 0;
-	wake_up_interruptible(&info->open_wait);
-}
-
-/*
- * ------------------------------------------------------------
- * rs_open() and friends
- * ------------------------------------------------------------
- */
-static int block_til_ready(struct tty_struct *tty, struct file *filp,
-                           struct dz_serial *info)
-{
-	DECLARE_WAITQUEUE(wait, current); 
-	int retval;
-	int do_clocal = 0;
-
-	/*
-	 * If the device is in the middle of being closed, then block
-	 * until it's done, and then try again.
-	 */
-	if (info->flags & DZ_CLOSING) {
-		interruptible_sleep_on(&info->close_wait);
-		return -EAGAIN;
-	}
-
-	/*
-	 * If non-blocking mode is set, or the port is not enabled, then make
-	 * the check up front and then exit.
-	 */
-	if ((filp->f_flags & O_NONBLOCK) ||
-	    (tty->flags & (1 << TTY_IO_ERROR))) {
-		info->flags |= DZ_NORMAL_ACTIVE;
-
-		return 0;
-	}
-
-	if (tty->termios->c_cflag & CLOCAL)
-		do_clocal = 1;
-
-	/*
-	 * Block waiting for the carrier detect and the line to become free
-	 * (i.e., not in use by the callout).  While we are in this loop,
-	 * info->count is dropped by one, so that dz_close() knows when to free
-	 * things.  We restore it upon exit, either normal or abnormal.
-	 */
-	retval = 0;
-	add_wait_queue(&info->open_wait, &wait);
-
-	info->count--;
-	info->blocked_open++;
-	while (1) {
-		set_current_state(TASK_INTERRUPTIBLE);
-		if (tty_hung_up_p (filp) || !(info->is_initialized)) {
-			retval = -EAGAIN;
-			break;
-		}
-		if (!(info->flags & DZ_CLOSING) && do_clocal)
-			break;
-		if (signal_pending(current)) {
-			retval = -ERESTARTSYS;
-			break;
-		}
-		schedule();
-	}
-		
-	current->state = TASK_RUNNING;
-	remove_wait_queue (&info->open_wait, &wait);
-	if (!tty_hung_up_p(filp))
-		info->count++;
-	info->blocked_open--;
-
-	if (retval)
-		return retval;
-	info->flags |= DZ_NORMAL_ACTIVE;
-	return 0;
-}
-
-/*
- * This routine is called whenever a serial port is opened.  It
- * enables interrupts for a serial port. It also performs the 
- * serial-specific initialization for the tty structure.
- */
-static int dz_open (struct tty_struct *tty, struct file *filp)
-{
-	struct dz_serial *info;
-	int retval, line;
-
-	line = tty->index;
-
-	/*
-	 * The dz lines for the mouse/keyboard must be opened using their
-	 * respective drivers.
-	 */
-	if ((line < 0) || (line >= DZ_NB_PORT))
-		return -ENODEV;
-
-	if ((line == DZ_KEYBOARD) || (line == DZ_MOUSE))
-		return -ENODEV;
-
-	info = lines[line];
-	info->count++;
-
-	tty->driver_data = info;
-	info->tty = tty;
-
-	/*
-	 * Start up serial port
-	 */
-	retval = startup (info);
-	if (retval)
-		return retval;
-
-	retval = block_til_ready (tty, filp, info);
-	if (retval)
-		return retval;
-
-	return 0;
-}
-
-static void show_serial_version (void)
-{
-	printk("%s%s\n", dz_name, dz_version);
-}
-
-static struct tty_driver *serial_driver;
-
-static struct tty_operations serial_ops = {
-	.open = dz_open,
-	.close = dz_close,
-	.write = dz_write,
-	.flush_chars = dz_flush_chars,
-	.write_room = dz_write_room,
-	.chars_in_buffer = dz_chars_in_buffer,
-	.flush_buffer = dz_flush_buffer,
-	.ioctl = dz_ioctl,
-	.throttle = dz_throttle,
-	.unthrottle = dz_unthrottle,
-	.send_xchar = dz_send_xchar,
-	.set_termios = dz_set_termios,
-	.stop = dz_stop,
-	.start = dz_start,
-	.hangup = dz_hangup,
-};
-
-int __init dz_init(void)
-{
-	int i, flags;
-	struct dz_serial *info;
-
-	serial_driver = alloc_tty_driver(DZ_NB_PORT);
-	if (!serial_driver)
-		return -ENOMEM;
-
-	/* Setup base handler, and timer table. */
-	init_bh(SERIAL_BH, do_serial_bh);
-
-	show_serial_version();
-
-	serial_driver->owner = THIS_MODULE;
-	serial_driver->devfs_name = "tts/";
-	serial_driver->name = "ttyS";
-	serial_driver->major = TTY_MAJOR;
-	serial_driver->minor_start = 64;
-	serial_driver->type = TTY_DRIVER_TYPE_SERIAL;
-	serial_driver->subtype = SERIAL_TYPE_NORMAL;
-	serial_driver->init_termios = tty_std_termios;
-	serial_driver->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL |
-	                                     CLOCAL;
-	serial_driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_NO_DEVFS;
-	tty_set_operations(serial_driver, &serial_ops);
-
-	if (tty_register_driver(serial_driver))
-		panic("Couldn't register serial driver\n");
-
-	save_flags(flags); cli();
-	for (i=0; i < DZ_NB_PORT;  i++) {
-		info = &multi[i]; 
-		lines[i] = info;
-		info->magic = SERIAL_MAGIC;
-
-		if ((mips_machtype == MACH_DS23100) ||
-		    (mips_machtype == MACH_DS5100)) 
-			info->port = (unsigned long) KN01_DZ11_BASE;
-		else 
-			info->port = (unsigned long) KN02_DZ11_BASE;
-
-		info->line = i;
-		info->tty = 0;
-		info->close_delay = 50;
-		info->closing_wait = 3000;
-		info->x_char = 0;
-		info->event = 0;
-		info->count = 0;
-		info->blocked_open = 0;
-		info->tqueue.routine = do_softint;
-		info->tqueue.data = info;
-		info->tqueue_hangup.routine = do_serial_hangup;
-		info->tqueue_hangup.data = info;
-		init_waitqueue_head(&info->open_wait); 
-		init_waitqueue_head(&info->close_wait); 
-
-		/*
-		 * If we are pointing to address zero then punt - not correctly
-		 * set up in setup.c to handle this.
-		 */
-		if (! info->port)
-			return 0;
-
-		printk("ttyS%02d at 0x%08x (irq = %d)\n", info->line,
-		       info->port, SERIAL);
-
-		tty_register_device(serial_driver, info->line, NULL);
-	}
-
-	/* Reset the chip */
-#ifndef CONFIG_SERIAL_CONSOLE
-	{
-		int tmp;
-		dz_out(info, DZ_CSR, DZ_CLR);
-		while ((tmp = dz_in(info,DZ_CSR)) & DZ_CLR);
-		wbflush();
-  
-		/* Enable scanning */
-		dz_out(info, DZ_CSR, DZ_MSE); 
-	}
-#endif
-  
-	/*
-	 * Order matters here... the trick is that flags is updated... in
-	 * request_irq - to immediatedly obliterate it is unwise.
-	 */
-	restore_flags(flags);
-
-	if (request_irq(SERIAL, dz_interrupt, SA_INTERRUPT, "DZ", lines[0]))
-		panic("Unable to register DZ interrupt\n");
- 
-	return 0;
-}
-
-#ifdef CONFIG_SERIAL_CONSOLE
-static void dz_console_put_char (unsigned char ch)
-{
-	unsigned long flags;
-	int  loops = 2500;
-	unsigned short tmp = ch;
-	/*
-	 * this code sends stuff out to serial device - spinning its wheels and
-	 * waiting.
-	 */
-
-	/* force the issue - point it at lines[3]*/
-	dz_console = &multi[CONSOLE_LINE];
-
-	save_and_cli(flags);
-
-	/* spin our wheels */
-	while (((dz_in(dz_console, DZ_CSR) & DZ_TRDY) != DZ_TRDY) &&  loops--)
-		;
-  
-	/* Actually transmit the character. */
-	dz_out(dz_console, DZ_TDR, tmp);
-
-	restore_flags(flags); 
-}
-
-/* 
- * -------------------------------------------------------------------
- * dz_console_print ()
- *
- * dz_console_print is registered for printk.
- * The console must be locked when we get here.
- * ------------------------------------------------------------------- 
- */
-static void dz_console_print (struct console *cons, 
-			      const char *str, 
-			      unsigned int count)
-{
-#ifdef DEBUG_DZ
-	prom_printf((char *)str);
-#endif
-	while (count--) {
-		if (*str == '\n')
-			dz_console_put_char('\r');
-		dz_console_put_char(*str++);
-	}
-}
-
-static struct tty_driver *dz_console_device(struct console *c, int *index)
-{
-	*index = c->index;
-	return serial_driver;
-}
-
-static int __init dz_console_setup(struct console *co, char *options)
-{
-	int baud = 9600;
-	int bits = 8;
-	int parity = 'n';
-	int cflag = CREAD | HUPCL | CLOCAL;
-	char *s;
-	unsigned short mask,tmp;
-
-	if (options) {
-		baud = simple_strtoul(options, NULL, 10);
-		s = options;
-		while (*s >= '0' && *s <= '9')
-			s++;
-		if (*s)
-			parity = *s++;
-		if (*s)
-			bits   = *s - '0';
-	}
-
-	/*
-	 * Now construct a cflag setting.
-	 */
-	switch (baud) {
-	case 1200:
-		cflag |= DZ_B1200;
-		break;
-	case 2400:
-		cflag |= DZ_B2400;
-		break;
-	case 4800:
-		cflag |= DZ_B4800;
-		break;
-	case 9600:
-	default:
-		cflag |= DZ_B9600;
-		break;
-	}
-	switch (bits) {
-	case 7:
-		cflag |= DZ_CS7;
-		break;
-	default:
-	case 8:
-		cflag |= DZ_CS8;
-		break;
-	}
-	switch (parity) {
-	case 'o':
-	case 'O':
-		cflag |= DZ_PARODD;
-		break;
-	case 'e':
-	case 'E':
-		cflag |= DZ_PARENB;
-		break;
-	}
-	co->cflag = cflag;
-
-	/* TOFIX: force to console line */
-	dz_console = &multi[CONSOLE_LINE];
-	if ((mips_machtype == MACH_DS23100) || (mips_machtype == MACH_DS5100)) 
-		dz_console->port = KN01_DZ11_BASE;
-	else 
-		dz_console->port = KN02_DZ11_BASE; 
-	dz_console->line = CONSOLE_LINE;
-
-	dz_out(dz_console, DZ_CSR, DZ_CLR);
-	while ((tmp = dz_in(dz_console,DZ_CSR)) & DZ_CLR)
-		;
-
-	/* enable scanning */
-	dz_out(dz_console, DZ_CSR, DZ_MSE); 
-
-	/*  Set up flags... */
-	dz_console->cflags = 0;
-	dz_console->cflags |= DZ_B9600;
-	dz_console->cflags |= DZ_CS8;
-	dz_console->cflags |= DZ_PARENB;
-	dz_out(dz_console, DZ_LPR, dz_console->cflags);
-
-	mask = 1 << dz_console->line;
-	tmp = dz_in (dz_console, DZ_TCR);		/* read the TX flag */
-	if (!(tmp & mask)) {
-		tmp |= mask;				/* set the TX flag */
-		dz_out (dz_console, DZ_TCR, tmp); 
-	}
-
-	return 0;
-}
-
-static struct console dz_sercons = {
-    .name	= "ttyS",
-    .write	= dz_console_print,
-    .device	= dz_console_device,
-    .setup	= dz_console_setup,
-    .flags	= CON_CONSDEV | CON_PRINTBUFFER,
-    .index	= CONSOLE_LINE,
-};
-
-void __init dz_serial_console_init(void)
-{
-	register_console(&dz_sercons);
-}
-
-#endif /* ifdef CONFIG_SERIAL_CONSOLE */
-
-MODULE_LICENSE("GPL");
diff -Nru a/drivers/char/dz.h b/drivers/char/dz.h
--- a/drivers/char/dz.h	Sun May 16 01:18:34 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,230 +0,0 @@
-/*
- * dz.h: Serial port driver for DECStations equiped 
- *       with the DZ chipset.
- *
- * Copyright (C) 1998 Olivier A. D. Lebaillif 
- *             
- * Email: olivier.lebaillif@ifrsys.com
- *
- */
-#ifndef DZ_SERIAL_H
-#define DZ_SERIAL_H
-
-/*
- * Definitions for the Control and Status Received.
- */
-#define DZ_TRDY        0x8000                 /* Transmitter empty */
-#define DZ_TIE         0x4000                 /* Transmitter Interrupt Enable */
-#define DZ_RDONE       0x0080                 /* Receiver data ready */
-#define DZ_RIE         0x0040                 /* Receive Interrupt Enable */
-#define DZ_MSE         0x0020                 /* Master Scan Enable */
-#define DZ_CLR         0x0010                 /* Master reset */
-#define DZ_MAINT       0x0008                 /* Loop Back Mode */
-
-/*
- * Definitions for the Received buffer. 
- */
-#define DZ_RBUF_MASK   0x00FF                 /* Data Mask in the Receive Buffer */
-#define DZ_LINE_MASK   0x0300                 /* Line Mask in the Receive Buffer */
-#define DZ_DVAL        0x8000                 /* Valid Data indicator */
-#define DZ_OERR        0x4000                 /* Overrun error indicator */
-#define DZ_FERR        0x2000                 /* Frame error indicator */
-#define DZ_PERR        0x1000                 /* Parity error indicator */
-
-#define LINE(x) (x & DZ_LINE_MASK) >> 8       /* Get the line number from the input buffer */
-#define UCHAR(x) (unsigned char)(x & DZ_RBUF_MASK)
-
-/*
- * Definitions for the Transmit Register.
- */
-#define DZ_LINE_KEYBOARD 0x0001
-#define DZ_LINE_MOUSE    0x0002
-#define DZ_LINE_MODEM    0x0004
-#define DZ_LINE_PRINTER  0x0008
-
-#define DZ_MODEM_DTR     0x0400               /* DTR for the modem line (2) */
-
-/*
- * Definitions for the Modem Status Register.
- */
-#define DZ_MODEM_DSR     0x0200               /* DSR for the modem line (2) */
-
-/*
- * Definitions for the Transmit Data Register.
- */
-#define DZ_BRK0          0x0100               /* Break assertion for line 0 */
-#define DZ_BRK1          0x0200               /* Break assertion for line 1 */
-#define DZ_BRK2          0x0400               /* Break assertion for line 2 */
-#define DZ_BRK3          0x0800               /* Break assertion for line 3 */
-
-/*
- * Definitions for the Line Parameter Register.
- */
-#define DZ_KEYBOARD      0x0000               /* line 0 = keyboard */
-#define DZ_MOUSE         0x0001               /* line 1 = mouse */
-#define DZ_MODEM         0x0002               /* line 2 = modem */
-#define DZ_PRINTER       0x0003               /* line 3 = printer */
-
-#define DZ_CSIZE         0x0018               /* Number of bits per byte (mask) */
-#define DZ_CS5           0x0000               /* 5 bits per byte */
-#define DZ_CS6           0x0008               /* 6 bits per byte */
-#define DZ_CS7           0x0010               /* 7 bits per byte */
-#define DZ_CS8           0x0018               /* 8 bits per byte */
-
-#define DZ_CSTOPB        0x0020               /* 2 stop bits instead of one */ 
-
-#define DZ_PARENB        0x0040               /* Parity enable */
-#define DZ_PARODD        0x0080               /* Odd parity instead of even */
-
-#define DZ_CBAUD         0x0E00               /* Baud Rate (mask) */
-#define DZ_B50           0x0000
-#define DZ_B75           0x0100
-#define DZ_B110          0x0200
-#define DZ_B134          0x0300
-#define DZ_B150          0x0400
-#define DZ_B300          0x0500
-#define DZ_B600          0x0600
-#define DZ_B1200         0x0700 
-#define DZ_B1800         0x0800
-#define DZ_B2000         0x0900
-#define DZ_B2400         0x0A00
-#define DZ_B3600         0x0B00
-#define DZ_B4800         0x0C00
-#define DZ_B7200         0x0D00
-#define DZ_B9600         0x0E00
-
-#define DZ_CREAD         0x1000               /* Enable receiver */
-#define DZ_RXENAB        0x1000               /* enable receive char */
-/*
- * Addresses for the DZ registers
- */
-#define DZ_CSR       0x00            /* Control and Status Register */
-#define DZ_RBUF      0x08            /* Receive Buffer */
-#define DZ_LPR       0x08            /* Line Parameters Register */
-#define DZ_TCR       0x10            /* Transmitter Control Register */
-#define DZ_MSR       0x18            /* Modem Status Register */
-#define DZ_TDR       0x18            /* Transmit Data Register */
-
-
-#define DZ_NB_PORT 4
-
-#define DZ_XMIT_SIZE   4096                 /* buffer size */
-#define WAKEUP_CHARS   DZ_XMIT_SIZE/4
-
-#define DZ_EVENT_WRITE_WAKEUP   0
-
-#ifndef MIN
-#define MIN(a,b)        ((a) < (b) ? (a) : (b))
-
-#define DZ_INITIALIZED       0x80000000 /* Serial port was initialized */
-#define DZ_CALLOUT_ACTIVE    0x40000000 /* Call out device is active */
-#define DZ_NORMAL_ACTIVE     0x20000000 /* Normal device is active */
-#define DZ_BOOT_AUTOCONF     0x10000000 /* Autoconfigure port on bootup */
-#define DZ_CLOSING           0x08000000 /* Serial port is closing */
-#define DZ_CTS_FLOW          0x04000000 /* Do CTS flow control */
-#define DZ_CHECK_CD          0x02000000 /* i.e., CLOCAL */
-
-#define DZ_CLOSING_WAIT_INF  0
-#define DZ_CLOSING_WAIT_NONE 65535
-
-#define DZ_SPLIT_TERMIOS   0x0008 /* Separate termios for dialin/callout */
-#define DZ_SESSION_LOCKOUT 0x0100 /* Lock out cua opens based on session */
-#define DZ_PGRP_LOCKOUT    0x0200 /* Lock out cua opens based on pgrp */
-
-struct dz_serial {
-  unsigned                port;                /* base address for the port */
-  int                     type;
-  int                     flags; 
-  int                     baud_base;
-  int                     blocked_open;
-  unsigned short          close_delay;
-  unsigned short          closing_wait;
-  unsigned short          line;                /* port/line number */
-  unsigned short          cflags;              /* line configuration flag */
-  unsigned short          x_char;              /* xon/xoff character */
-  unsigned short          read_status_mask;    /* mask for read condition */
-  unsigned short          ignore_status_mask;  /* mask for ignore condition */
-  unsigned long           event;               /* mask used in BH */
-  unsigned char           *xmit_buf;           /* Transmit buffer */
-  int                     xmit_head;           /* Position of the head */
-  int                     xmit_tail;           /* Position of the tail */
-  int                     xmit_cnt;            /* Count of the chars in the buffer */
-  int                     count;               /* indicates how many times it has been opened */
-  int                     magic;
-
-  struct async_icount     icount;              /* keep track of things ... */
-  struct tty_struct       *tty;                /* tty associated */
-  struct tq_struct        tqueue;              /* Queue for BH */
-  struct tq_struct        tqueue_hangup;
-  wait_queue_head_t       open_wait;
-  wait_queue_head_t       close_wait;
-
-  unsigned char           is_console;          /* flag indicating a serial console */
-  unsigned char           is_initialized;
-};
-
-static struct dz_serial multi[DZ_NB_PORT];    /* Four serial lines in the DZ chip */
-static struct dz_serial *dz_console;
-
-/*
- * tmp_buf is used as a temporary buffer by serial_write.  We need to
- * lock it in case the copy_from_user blocks while swapping in a page,
- * and some other program tries to do a serial write at the same time.
- * Since the lock will only come under contention when the system is
- * swapping and available memory is low, it makes sense to share one
- * buffer across all the serial ports, since it significantly saves
- * memory if large numbers of serial ports are open.
- */
-static unsigned char *tmp_buf;
-static DECLARE_MUTEX(tmp_buf_sem);
-
-static char *dz_name = "DECstation DZ serial driver version ";
-static char *dz_version = "1.02";
-
-static inline unsigned short dz_in (struct dz_serial *, unsigned);
-static inline void dz_out (struct dz_serial *, unsigned, unsigned short);
-
-static inline void dz_sched_event (struct dz_serial *, int);
-static inline void receive_chars (struct dz_serial *);
-static inline void transmit_chars (struct dz_serial *);
-static inline void check_modem_status (struct dz_serial *);
-
-static void dz_stop (struct tty_struct *);
-static void dz_start (struct tty_struct *);
-static void dz_interrupt (int, void *, struct pt_regs *);
-static void do_serial_bh (void);
-static void do_softint (void *);
-static void do_serial_hangup (void *);
-static void change_speed (struct dz_serial *);
-static void dz_flush_chars (struct tty_struct *);
-static void dz_console_print (struct console *, const char *, unsigned int);
-static void dz_flush_buffer (struct tty_struct *);
-static void dz_throttle (struct tty_struct *);
-static void dz_unthrottle (struct tty_struct *);
-static void dz_send_xchar (struct tty_struct *, char);
-static void shutdown (struct dz_serial *);
-static void send_break (struct dz_serial *, int);
-static void dz_set_termios (struct tty_struct *, struct termios *);
-static void dz_close (struct tty_struct *, struct file *);
-static void dz_hangup (struct tty_struct *);
-static void show_serial_version (void);
-
-static int dz_write (struct tty_struct *, int, const unsigned char *, int);
-static int dz_write_room (struct tty_struct *);
-static int dz_chars_in_buffer (struct tty_struct *);
-static int startup (struct dz_serial *);
-static int get_serial_info (struct dz_serial *, struct serial_struct *);
-static int set_serial_info (struct dz_serial *, struct serial_struct *);
-static int get_lsr_info (struct dz_serial *, unsigned int *);
-static int dz_ioctl (struct tty_struct *, struct file *, unsigned int, unsigned long);
-static int block_til_ready (struct tty_struct *, struct file *, struct dz_serial *);
-static int dz_open (struct tty_struct *, struct file *);
-
-#ifdef MODULE
-int init_module (void)
-void cleanup_module (void)
-#endif
-
-#endif
-
-#endif /* DZ_SERIAL_H */
diff -Nru a/drivers/char/ip2main.c b/drivers/char/ip2main.c
--- a/drivers/char/ip2main.c	Sun May 16 01:18:37 2004
+++ b/drivers/char/ip2main.c	Sun May 16 01:18:37 2004
@@ -99,6 +99,7 @@
 #include <linux/slab.h>
 #include <linux/major.h>
 #include <linux/wait.h>
+#include <linux/device.h>
 
 #include <linux/tty.h>
 #include <linux/tty_flip.h>
@@ -301,6 +302,9 @@
 static char rirqs[IP2_MAX_BOARDS];
 static int Valid_Irqs[] = { 3, 4, 5, 7, 10, 11, 12, 15, 0};
 
+/* for sysfs class support */
+static struct class_simple *ip2_class;
+
 // Some functions to keep track of what irq's we have
 
 static int __init
@@ -411,7 +415,9 @@
 			iiResetDelay( i2BoardPtrTable[i] );
 			/* free io addresses and Tibet */
 			release_region( ip2config.addr[i], 8 );
+			class_simple_device_remove(MKDEV(IP2_IPL_MAJOR, 4 * i)); 
 			devfs_remove("ip2/ipl%d", i);
+			class_simple_device_remove(MKDEV(IP2_IPL_MAJOR, 4 * i + 1));
 			devfs_remove("ip2/stat%d", i);
 		}
 		/* Disable and remove interrupt handler. */
@@ -420,6 +426,7 @@
 			clear_requested_irq( ip2config.irq[i]);
 		}
 	}
+	class_simple_destroy(ip2_class);
 	devfs_remove("ip2");
 	if ( ( err = tty_unregister_driver ( ip2_tty_driver ) ) ) {
 		printk(KERN_ERR "IP2: failed to unregister tty driver (%d)\n", err);
@@ -494,7 +501,7 @@
 ip2_loadmain(int *iop, int *irqp, unsigned char *firmware, int firmsize) 
 {
 	int i, j, box;
-	int err;
+	int err = 0;
 	int status = 0;
 	static int loaded;
 	i2eBordStrPtr pB = NULL;
@@ -683,7 +690,14 @@
 	/* Register the IPL driver. */
 	if ( ( err = register_chrdev ( IP2_IPL_MAJOR, pcIpl, &ip2_ipl ) ) ) {
 		printk(KERN_ERR "IP2: failed to register IPL device (%d)\n", err );
-	} else
+	} else {
+		/* create the sysfs class */
+		ip2_class = class_simple_create(THIS_MODULE, "ip2");
+		if (IS_ERR(ip2_class)) {
+			err = PTR_ERR(ip2_class);
+			goto out_chrdev;	
+		}
+	}
 	/* Register the read_procmem thing */
 	if (!create_proc_info_entry("ip2mem",0,&proc_root,ip2_read_procmem)) {
 		printk(KERN_ERR "IP2: failed to register read_procmem\n");
@@ -700,13 +714,27 @@
 			}
 
 			if ( NULL != ( pB = i2BoardPtrTable[i] ) ) {
-				devfs_mk_cdev(MKDEV(IP2_IPL_MAJOR, 4 * i),
+				class_simple_device_add(ip2_class, MKDEV(IP2_IPL_MAJOR, 
+						4 * i), NULL, "ipl%d", i);
+				err = devfs_mk_cdev(MKDEV(IP2_IPL_MAJOR, 4 * i),
 						S_IRUSR | S_IWUSR | S_IRGRP | S_IFCHR,
 						"ip2/ipl%d", i);
+				if (err) {
+					class_simple_device_remove(MKDEV(IP2_IPL_MAJOR, 
+						4 * i));
+					goto out_class;
+				}
 
-				devfs_mk_cdev(MKDEV(IP2_IPL_MAJOR, 4 * i + 1),
+				class_simple_device_add(ip2_class, MKDEV(IP2_IPL_MAJOR, 
+						4 * i + 1), NULL, "stat%d", i);
+				err = devfs_mk_cdev(MKDEV(IP2_IPL_MAJOR, 4 * i + 1),
 						S_IRUSR | S_IWUSR | S_IRGRP | S_IFCHR,
 						"ip2/stat%d", i);
+				if (err) {
+					class_simple_device_remove(MKDEV(IP2_IPL_MAJOR, 
+						4 * i + 1));
+					goto out_class;
+				}
 
 			    for ( box = 0; box < ABS_MAX_BOXES; ++box )
 			    {
@@ -759,8 +787,14 @@
 		}
 	}
 	ip2trace (ITRC_NO_PORT, ITRC_INIT, ITRC_RETURN, 0 );
+	goto out;
 
-	return 0;
+out_class:
+	class_simple_destroy(ip2_class);
+out_chrdev:
+	unregister_chrdev(IP2_IPL_MAJOR, "ip2");
+out:
+	return err;
 }
 
 EXPORT_SYMBOL(ip2_loadmain);
diff -Nru a/drivers/char/mem.c b/drivers/char/mem.c
--- a/drivers/char/mem.c	Sun May 16 01:18:35 2004
+++ b/drivers/char/mem.c	Sun May 16 01:18:35 2004
@@ -62,6 +62,19 @@
 		  test_bit(X86_FEATURE_CYRIX_ARR, boot_cpu_data.x86_capability) ||
 		  test_bit(X86_FEATURE_CENTAUR_MCR, boot_cpu_data.x86_capability) )
 	  && addr >= __pa(high_memory);
+#elif defined(__x86_64__)
+	/* 
+	 * This is broken because it can generate memory type aliases,
+	 * which can cause cache corruptions
+	 * But it is only available for root and we have to be bug-to-bug
+	 * compatible with i386.
+	 */
+	if (file->f_flags & O_SYNC)
+		return 1;
+	/* same behaviour as i386. PAT always set to cached and MTRRs control the
+	   caching behaviour. 
+	   Hopefully a full PAT implementation will fix that soon. */	   
+	return 0;
 #elif defined(CONFIG_IA64)
 	/*
 	 * On ia64, we ignore O_SYNC because we cannot tolerate memory attribute aliases.
diff -Nru a/drivers/char/mwave/mwavedd.c b/drivers/char/mwave/mwavedd.c
--- a/drivers/char/mwave/mwavedd.c	Sun May 16 01:18:34 2004
+++ b/drivers/char/mwave/mwavedd.c	Sun May 16 01:18:34 2004
@@ -466,6 +466,7 @@
 
 static struct miscdevice mwave_misc_dev = { MWAVE_MINOR, "mwave", &mwave_fops };
 
+#if 0 /* totally b0rked */
 /*
  * sysfs support <paulsch@us.ibm.com>
  */
@@ -499,6 +500,7 @@
 	&dev_attr_uart_irq,
 	&dev_attr_uart_io,
 };
+#endif
 
 /*
 * mwave_init is called on module load
@@ -508,11 +510,11 @@
 */
 static void mwave_exit(void)
 {
-	int i;
 	pMWAVE_DEVICE_DATA pDrvData = &mwave_s_mdd;
 
 	PRINTK_1(TRACE_MWAVE, "mwavedd::mwave_exit entry\n");
 
+#if 0
 	for (i = 0; i < pDrvData->nr_registered_attrs; i++)
 		device_remove_file(&mwave_device, mwave_dev_attrs[i]);
 	pDrvData->nr_registered_attrs = 0;
@@ -521,6 +523,7 @@
 		device_unregister(&mwave_device);
 		pDrvData->device_registered = FALSE;
 	}
+#endif
 
 	if ( pDrvData->sLine >= 0 ) {
 		unregister_serial(pDrvData->sLine);
@@ -638,6 +641,7 @@
 	}
 	/* uart is registered */
 
+#if 0
 	/* sysfs */
 	memset(&mwave_device, 0, sizeof (struct device));
 	snprintf(mwave_device.bus_id, BUS_ID_SIZE, "mwave");
@@ -655,6 +659,7 @@
 		}
 		pDrvData->nr_registered_attrs++;
 	}
+#endif
 
 	/* SUCCESS! */
 	return 0;
diff -Nru a/drivers/char/ppdev.c b/drivers/char/ppdev.c
--- a/drivers/char/ppdev.c	Sun May 16 01:18:36 2004
+++ b/drivers/char/ppdev.c	Sun May 16 01:18:36 2004
@@ -59,6 +59,7 @@
 #include <linux/module.h>
 #include <linux/init.h>
 #include <linux/sched.h>
+#include <linux/device.h>
 #include <linux/devfs_fs_kernel.h>
 #include <linux/ioctl.h>
 #include <linux/parport.h>
@@ -739,6 +740,8 @@
 	return mask;
 }
 
+static struct class_simple *ppdev_class;
+
 static struct file_operations pp_fops = {
 	.owner		= THIS_MODULE,
 	.llseek		= no_llseek,
@@ -750,23 +753,59 @@
 	.release	= pp_release,
 };
 
+static void pp_attach(struct parport *port)
+{
+	class_simple_device_add(ppdev_class, MKDEV(PP_MAJOR, port->number),
+			NULL, "parport%d", port->number);
+}
+
+static void pp_detach(struct parport *port)
+{
+	class_simple_device_remove(MKDEV(PP_MAJOR, port->number));
+}
+
+static struct parport_driver pp_driver = {
+	.name		= CHRDEV,
+	.attach		= pp_attach,
+	.detach		= pp_detach,
+};
+
 static int __init ppdev_init (void)
 {
-	int i;
+	int i, err = 0;
 
 	if (register_chrdev (PP_MAJOR, CHRDEV, &pp_fops)) {
 		printk (KERN_WARNING CHRDEV ": unable to get major %d\n",
 			PP_MAJOR);
 		return -EIO;
 	}
+	ppdev_class = class_simple_create(THIS_MODULE, CHRDEV);
+	if (IS_ERR(ppdev_class)) {
+		err = PTR_ERR(ppdev_class);
+		goto out_chrdev;
+	}
 	devfs_mk_dir("parports");
 	for (i = 0; i < PARPORT_MAX; i++) {
 		devfs_mk_cdev(MKDEV(PP_MAJOR, i),
 				S_IFCHR | S_IRUGO | S_IWUGO, "parports/%d", i);
 	}
+	if (parport_register_driver(&pp_driver)) {
+		printk (KERN_WARNING CHRDEV ": unable to register with parport\n");
+		goto out_class;
+	}
 
 	printk (KERN_INFO PP_VERSION "\n");
-	return 0;
+	goto out;
+
+out_class:
+	for (i = 0; i < PARPORT_MAX; i++)
+		devfs_remove("parports/%d", i);
+	devfs_remove("parports");
+	class_simple_destroy(ppdev_class);
+out_chrdev:
+	unregister_chrdev(PP_MAJOR, CHRDEV);
+out:
+	return err;
 }
 
 static void __exit ppdev_cleanup (void)
@@ -775,7 +814,9 @@
 	/* Clean up all parport stuff */
 	for (i = 0; i < PARPORT_MAX; i++)
 		devfs_remove("parports/%d", i);
+	parport_unregister_driver(&pp_driver);
 	devfs_remove("parports");
+	class_simple_destroy(ppdev_class);
 	unregister_chrdev (PP_MAJOR, CHRDEV);
 }
 
diff -Nru a/drivers/char/sh-sci.c b/drivers/char/sh-sci.c
--- a/drivers/char/sh-sci.c	Sun May 16 01:18:36 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,1646 +0,0 @@
-/* $Id: sh-sci.c,v 1.16 2004/02/10 17:04:17 lethal Exp $
- *
- *  linux/drivers/char/sh-sci.c
- *
- *  SuperH on-chip serial module support.  (SCI with no FIFO / with FIFO)
- *  Copyright (C) 1999, 2000  Niibe Yutaka
- *  Copyright (C) 2000  Sugioka Toshinobu
- *  Modified to support multiple serial ports. Stuart Menefy (May 2000).
- *  Modified to support SH7760 SCIF. Paul Mundt (Oct 2003).
- *  Modified to support H8/300 Series. Yoshinori Sato (Feb 2004).
- *
- * TTY code is based on sx.c (Specialix SX driver) by:
- *
- *   (C) 1998 R.E.Wolff@BitWizard.nl
- *
- */
-
-#include <linux/config.h>
-#include <linux/module.h>
-#include <linux/errno.h>
-#include <linux/signal.h>
-#include <linux/sched.h>
-#include <linux/timer.h>
-#include <linux/interrupt.h>
-#include <linux/tty.h>
-#include <linux/tty_flip.h>
-#include <linux/serial.h>
-#include <linux/major.h>
-#include <linux/string.h>
-#include <linux/fcntl.h>
-#include <linux/ptrace.h>
-#include <linux/ioport.h>
-#include <linux/mm.h>
-#include <linux/slab.h>
-#include <linux/init.h>
-#include <linux/delay.h>
-#if defined(CONFIG_SERIAL_CONSOLE) || defined(CONFIG_SH_KGDB_CONSOLE)
-#include <linux/console.h>
-#endif
-#ifdef CONFIG_CPU_FREQ
-#include <linux/notifier.h>
-#include <linux/cpufreq.h>
-#endif
-
-#include <asm/system.h>
-#include <asm/io.h>
-#include <asm/irq.h>
-#include <asm/uaccess.h>
-#include <asm/bitops.h>
-
-#include <linux/generic_serial.h>
-
-#ifdef CONFIG_SH_STANDARD_BIOS
-#include <asm/sh_bios.h>
-#endif
-
-#include "sh-sci.h"
-
-#ifdef CONFIG_SH_KGDB
-#include <asm/kgdb.h>
-
-int kgdb_sci_setup(void);
-static int kgdb_get_char(struct sci_port *port);
-static void kgdb_put_char(struct sci_port *port, char c);
-static void kgdb_handle_error(struct sci_port *port);
-static struct sci_port *kgdb_sci_port;
-
-#ifdef CONFIG_SH_KGDB_CONSOLE
-static struct console kgdbcons;
-void __init kgdb_console_init(void);
-#endif /* CONFIG_SH_KGDB_CONSOLE */
-
-#endif /* CONFIG_SH_KGDB */
-
-#ifdef CONFIG_SERIAL_CONSOLE
-static struct console sercons;
-static struct sci_port* sercons_port=0;
-static int sercons_baud;
-#ifdef CONFIG_MAGIC_SYSRQ
-#include <linux/sysrq.h>
-static int break_pressed;
-#endif /* CONFIG_MAGIC_SYSRQ */
-#endif /* CONFIG_SERIAL_CONSOLE */
-
-/* Function prototypes */
-static void sci_init_pins_sci(struct sci_port* port, unsigned int cflag);
-#ifndef SCI_ONLY
-static void sci_init_pins_scif(struct sci_port* port, unsigned int cflag);
-#if defined(CONFIG_CPU_SH3)
-static void sci_init_pins_irda(struct sci_port* port, unsigned int cflag);
-#endif
-#endif
-static void sci_disable_tx_interrupts(void *ptr);
-static void sci_enable_tx_interrupts(void *ptr);
-static void sci_disable_rx_interrupts(void *ptr);
-static void sci_enable_rx_interrupts(void *ptr);
-static int  sci_get_CD(void *ptr);
-static void sci_shutdown_port(void *ptr);
-static int sci_set_real_termios(void *ptr);
-static void sci_hungup(void *ptr);
-static void sci_close(void *ptr);
-static int sci_chars_in_buffer(void *ptr);
-static int sci_request_irq(struct sci_port *port);
-static void sci_free_irq(struct sci_port *port);
-static int sci_init_drivers(void);
-
-static struct tty_driver *sci_driver;
-
-static struct sci_port sci_ports[SCI_NPORTS] = SCI_INIT;
-
-static int sci_debug = 0;
-
-#ifdef MODULE
-MODULE_PARM(sci_debug, "i");
-#endif
-
-#define dprintk(x...) do { if (sci_debug) printk(x); } while(0)
-
-#ifdef CONFIG_SERIAL_CONSOLE
-static void put_char(struct sci_port *port, char c)
-{
-	unsigned long flags;
-	unsigned short status;
-
-	local_irq_save(flags);
-
-	do
-		status = sci_in(port, SCxSR);
-	while (!(status & SCxSR_TDxE(port)));
-	
-	sci_out(port, SCxTDR, c);
-	sci_in(port, SCxSR);            /* Dummy read */
-	sci_out(port, SCxSR, SCxSR_TDxE_CLEAR(port));
-
-	local_irq_restore(flags);
-}
-#endif
-
-#if defined(CONFIG_SH_STANDARD_BIOS) || defined(CONFIG_SH_KGDB)
-
-static void handle_error(struct sci_port *port)
-{				/* Clear error flags */
-	sci_out(port, SCxSR, SCxSR_ERROR_CLEAR(port));
-}
-
-static int get_char(struct sci_port *port)
-{
-	unsigned long flags;
-	unsigned short status;
-	int c;
-
-	local_irq_save(flags);
-        do {
-		status = sci_in(port, SCxSR);
-		if (status & SCxSR_ERRORS(port)) {
-			handle_error(port);
-			continue;
-		}
-	} while (!(status & SCxSR_RDxF(port)));
-	c = sci_in(port, SCxRDR);
-	sci_in(port, SCxSR);            /* Dummy read */
-	sci_out(port, SCxSR, SCxSR_RDxF_CLEAR(port));
-	local_irq_restore(flags);
-
-	return c;
-}
-
-/* Taken from sh-stub.c of GDB 4.18 */
-static const char hexchars[] = "0123456789abcdef";
-
-static __inline__ char highhex(int  x)
-{
-	return hexchars[(x >> 4) & 0xf];
-}
-
-static __inline__ char lowhex(int  x)
-{
-	return hexchars[x & 0xf];
-}
-
-#endif /* CONFIG_SH_STANDARD_BIOS || CONFIG_SH_KGDB */
-
-/*
- * Send the packet in buffer.  The host gets one chance to read it.
- * This routine does not wait for a positive acknowledge.
- */
-
-#ifdef CONFIG_SERIAL_CONSOLE
-static void put_string(struct sci_port *port, const char *buffer, int count)
-{
-	int i;
-	const unsigned char *p = buffer;
-
-#if defined(CONFIG_SH_STANDARD_BIOS) || defined(CONFIG_SH_KGDB)
-	int checksum;
-	int usegdb=0;
-
-#ifdef CONFIG_SH_STANDARD_BIOS
-    	/* This call only does a trap the first time it is
-	 * called, and so is safe to do here unconditionally
-	 */
-	usegdb |= sh_bios_in_gdb_mode();
-#endif
-#ifdef CONFIG_SH_KGDB
-	usegdb |= (kgdb_in_gdb_mode && (port == kgdb_sci_port));
-#endif
-
-	if (usegdb) {
-	    /*  $<packet info>#<checksum>. */
-	    do {
-		unsigned char c;
-		put_char(port, '$');
-		put_char(port, 'O'); /* 'O'utput to console */
-		checksum = 'O';
-
-		for (i=0; i<count; i++) { /* Don't use run length encoding */
-			int h, l;
-
-			c = *p++;
-			h = highhex(c);
-			l = lowhex(c);
-			put_char(port, h);
-			put_char(port, l);
-			checksum += h + l;
-		}
-		put_char(port, '#');
-		put_char(port, highhex(checksum));
-		put_char(port, lowhex(checksum));
-	    } while  (get_char(port) != '+');
-	} else
-#endif /* CONFIG_SH_STANDARD_BIOS || CONFIG_SH_KGDB */
-	for (i=0; i<count; i++) {
-		if (*p == 10)
-			put_char(port, '\r');
-		put_char(port, *p++);
-	}
-}
-#endif /* CONFIG_SERIAL_CONSOLE */
-
-
-#ifdef CONFIG_SH_KGDB
-
-/* Is the SCI ready, ie is there a char waiting? */
-static int kgdb_is_char_ready(struct sci_port *port)
-{
-        unsigned short status = sci_in(port, SCxSR);
-
-        if (status & (SCxSR_ERRORS(port) | SCxSR_BRK(port)))
-                kgdb_handle_error(port);
-
-        return (status & SCxSR_RDxF(port));
-}
-
-/* Write a char */
-static void kgdb_put_char(struct sci_port *port, char c)
-{
-        unsigned short status;
-
-        do
-                status = sci_in(port, SCxSR);
-        while (!(status & SCxSR_TDxE(port)));
-
-        sci_out(port, SCxTDR, c);
-        sci_in(port, SCxSR);    /* Dummy read */
-        sci_out(port, SCxSR, SCxSR_TDxE_CLEAR(port));
-}
-
-/* Get a char if there is one, else ret -1 */
-static int kgdb_get_char(struct sci_port *port)
-{
-        int c;
-
-        if (kgdb_is_char_ready(port) == 0)
-                c = -1;
-        else {
-                c = sci_in(port, SCxRDR);
-                sci_in(port, SCxSR);    /* Dummy read */
-                sci_out(port, SCxSR, SCxSR_RDxF_CLEAR(port));
-        }
-
-        return c;
-}
-
-/* Called from kgdbstub.c to get a character, i.e. is blocking */
-static int kgdb_sci_getchar(void)
-{
-        volatile int c;
-
-        /* Keep trying to read a character, this could be neater */
-        while ((c = kgdb_get_char(kgdb_sci_port)) < 0);
-
-        return c;
-}
-
-/* Called from kgdbstub.c to put a character, just a wrapper */
-static void kgdb_sci_putchar(int c)
-{
-
-        kgdb_put_char(kgdb_sci_port, c);
-}
-
-/* Clear any errors on the SCI */
-static void kgdb_handle_error(struct sci_port *port)
-{
-        sci_out(port, SCxSR, SCxSR_ERROR_CLEAR(port));  /* Clear error flags */
-}
-
-/* Breakpoint if there's a break sent on the serial port */
-static void kgdb_break_interrupt(int irq, void *ptr, struct pt_regs *regs)
-{
-        struct sci_port *port = ptr;
-        unsigned short status = sci_in(port, SCxSR);
-
-        if (status & SCxSR_BRK(port)) {
-
-                /* Break into the debugger if a break is detected */
-                BREAKPOINT();
-
-                /* Clear */
-                sci_out(port, SCxSR, SCxSR_BREAK_CLEAR(port));
-                return;
-        }
-}
-
-#endif /* CONFIG_SH_KGDB */
-
-static struct real_driver sci_real_driver = {
-	sci_disable_tx_interrupts,
-	sci_enable_tx_interrupts,
-	sci_disable_rx_interrupts,
-	sci_enable_rx_interrupts,
-	sci_get_CD,
-	sci_shutdown_port,
-	sci_set_real_termios,
-	sci_chars_in_buffer,
-        sci_close,
-        sci_hungup,
-	NULL
-};
-
-#if !defined(__H8300H__) && !defined(__H8300S__)
-#if defined(SCI_ONLY) || defined(SCI_AND_SCIF)
-static void sci_init_pins_sci(struct sci_port* port, unsigned int cflag)
-{
-}
-#endif
-
-#if defined(SCIF_ONLY) || defined(SCI_AND_SCIF)
-#if defined(CONFIG_CPU_SH3)
-/* For SH7707, SH7709, SH7709A, SH7729 */
-static void sci_init_pins_scif(struct sci_port* port, unsigned int cflag)
-{
-	unsigned int fcr_val = 0;
-
-	{
-		unsigned short data;
-
-		/* We need to set SCPCR to enable RTS/CTS */
-		data = ctrl_inw(SCPCR);
-		/* Clear out SCP7MD1,0, SCP6MD1,0, SCP4MD1,0*/
-		ctrl_outw(data&0x0cff, SCPCR);
-	}
-	if (cflag & CRTSCTS)
-		fcr_val |= SCFCR_MCE;
-	else {
-		unsigned short data;
-
-		/* We need to set SCPCR to enable RTS/CTS */
-		data = ctrl_inw(SCPCR);
-		/* Clear out SCP7MD1,0, SCP4MD1,0,
-		   Set SCP6MD1,0 = {01} (output)  */
-		ctrl_outw((data&0x0cff)|0x1000, SCPCR);
-
-		data = ctrl_inb(SCPDR);
-		/* Set /RTS2 (bit6) = 0 */
-		ctrl_outb(data&0xbf, SCPDR);
-	}
-	sci_out(port, SCFCR, fcr_val);
-}
-
-static void sci_init_pins_irda(struct sci_port* port, unsigned int cflag)
-{
-	unsigned int fcr_val = 0;
-
-	if (cflag & CRTSCTS)
-		fcr_val |= SCFCR_MCE;
-
-	sci_out(port, SCFCR, fcr_val);
-}
-
-#else
-
-/* For SH7750 */
-static void sci_init_pins_scif(struct sci_port* port, unsigned int cflag)
-{
-	unsigned int fcr_val = 0;
-
-	if (cflag & CRTSCTS) {
-		fcr_val |= SCFCR_MCE;
-	} else {
-		ctrl_outw(0x0080, SCSPTR2); /* Set RTS = 1 */
-	}
-	sci_out(port, SCFCR, fcr_val);
-}
-
-#endif
-#endif /* SCIF_ONLY || SCI_AND_SCIF */
-#else /* !defined(__H8300H__) && !defined(__H8300S__) */
-static void sci_init_pins_sci(struct sci_port* port, unsigned int cflag)
-{
-	int ch = (port->base - SMR0) >> 3;
-	/* set DDR regs */
-	H8300_GPIO_DDR(h8300_sci_pins[ch].port,h8300_sci_pins[ch].rx,H8300_GPIO_INPUT);
-	H8300_GPIO_DDR(h8300_sci_pins[ch].port,h8300_sci_pins[ch].tx,H8300_GPIO_OUTPUT);
-	/* tx mark output*/
-	H8300_SCI_DR(ch) |= h8300_sci_pins[ch].tx;
-}
-
-#if defined(__H8300S__)
-enum {sci_disable,sci_enable};
-
-static void h8300_sci_enable(struct sci_port* port, unsigned int ctrl)
-{
-	volatile unsigned char *mstpcrl=(volatile unsigned char *)MSTPCRL;
-	int ch = (port->base  - SMR0) >> 3;
-	unsigned char mask = 1 << (ch+1);
-	if (ctrl == sci_disable)
-		*mstpcrl |= mask;
-	else
-		*mstpcrl &= ~mask;
-}
-#endif
-#endif
-
-static void sci_setsignals(struct sci_port *port, int dtr, int rts)
-{
-	/* This routine is used for seting signals of: DTR, DCD, CTS/RTS */
-	/* We use SCIF's hardware for CTS/RTS, so don't need any for that. */
-	/* If you have signals for DTR and DCD, please implement here. */
-	;
-}
-
-static int sci_getsignals(struct sci_port *port)
-{
-	/* This routine is used for geting signals of: DTR, DCD, DSR, RI,
-	   and CTS/RTS */
-
-	return TIOCM_DTR|TIOCM_RTS|TIOCM_DSR;
-/*
-	(((o_stat & OP_DTR)?TIOCM_DTR:0) |
-	 ((o_stat & OP_RTS)?TIOCM_RTS:0) |
-	 ((i_stat & IP_CTS)?TIOCM_CTS:0) |
-	 ((i_stat & IP_DCD)?TIOCM_CAR:0) |
-	 ((i_stat & IP_DSR)?TIOCM_DSR:0) |
-	 ((i_stat & IP_RI) ?TIOCM_RNG:0)
-*/
-}
-
-static void sci_set_baud(struct sci_port *port, int baud)
-{
-	int t;
-
-	switch (baud) {
-	case 0:
-		t = -1;
-		break;
-	case 2400:
-		t = BPS_2400;
-		break;
-	case 4800:
-		t = BPS_4800;
-		break;
-	case 9600:
-		t = BPS_9600;
-		break;
-	case 19200:
-		t = BPS_19200;
-		break;
-	case 38400:
-		t = BPS_38400;
-		break;
-	case 57600:
-		t = BPS_57600;
-		break;
-	default:
-		printk(KERN_INFO "sci: unsupported baud rate: %d, using 115200 instead.\n", baud);
-	case 115200:
-		t = BPS_115200;
-		break;
-	}
-
-	if (t > 0) {
-		sci_setsignals (port, 1, -1);
-		if(t >= 256) {
-			sci_out(port, SCSMR, (sci_in(port, SCSMR) & ~3) | 1);
-			t >>= 2;
-		} else {
-			sci_out(port, SCSMR, sci_in(port, SCSMR) & ~3);
-		}
-		sci_out(port, SCBRR, t);
-		udelay((1000000+(baud-1)) / baud); /* Wait one bit interval */
-	} else {
-		sci_setsignals (port, 0, -1);
-	}
-}
-
-static void sci_set_termios_cflag(struct sci_port *port, int cflag, int baud)
-{
-	unsigned int status;
-	unsigned int smr_val;
-
-	do
-		status = sci_in(port, SCxSR);
-	while (!(status & SCxSR_TEND(port)));
-
-	sci_out(port, SCSCR, 0x00);	/* TE=0, RE=0, CKE1=0 */
-
-#if !defined(SCI_ONLY)
-	if (port->type == PORT_SCIF) {
-		sci_out(port, SCFCR, SCFCR_RFRST | SCFCR_TFRST);
-	}
-#endif
-
-	smr_val = sci_in(port, SCSMR) & 3;
-	if ((cflag & CSIZE) == CS7)
-		smr_val |= 0x40;
-	if (cflag & PARENB)
-		smr_val |= 0x20;
-	if (cflag & PARODD)
-		smr_val |= 0x30;
-	if (cflag & CSTOPB)
-		smr_val |= 0x08;
-	sci_out(port, SCSMR, smr_val);
-	sci_set_baud(port, baud);
-
-	port->init_pins(port, cflag);
-	sci_out(port, SCSCR, SCSCR_INIT(port));
-}
-
-static int sci_set_real_termios(void *ptr)
-{
-	struct sci_port *port = ptr;
-
-	if (port->old_cflag != port->gs.tty->termios->c_cflag) {
-		port->old_cflag = port->gs.tty->termios->c_cflag;
-		sci_set_termios_cflag(port, port->old_cflag, port->gs.baud);
-		sci_enable_rx_interrupts(port);
-	}
-
-	return 0;
-}
-
-/* ********************************************************************** *
- *                   the interrupt related routines                       *
- * ********************************************************************** */
-
-/*
- * This routine is used by the interrupt handler to schedule
- * processing in the software interrupt portion of the driver.
- */
-static inline void sci_sched_event(struct sci_port *port, int event)
-{
-	port->event |= 1 << event;
-	schedule_work(&port->tqueue);
-}
-
-static void sci_transmit_chars(struct sci_port *port)
-{
-	int count, i;
-	int txroom;
-	unsigned long flags;
-	unsigned short status;
-	unsigned short ctrl;
-	unsigned char c;
-
-	status = sci_in(port, SCxSR);
-	if (!(status & SCxSR_TDxE(port))) {
-		local_irq_save(flags);
-		ctrl = sci_in(port, SCSCR);
-		if (port->gs.xmit_cnt == 0) {
-			ctrl &= ~SCI_CTRL_FLAGS_TIE;
-			port->gs.flags &= ~GS_TX_INTEN;
-		} else
-			ctrl |= SCI_CTRL_FLAGS_TIE;
-		sci_out(port, SCSCR, ctrl);
-		local_irq_restore(flags);
-		return;
-	}
-
-	while (1) {
-		count = port->gs.xmit_cnt;
-#if !defined(SCI_ONLY)
-		if (port->type == PORT_SCIF) {
-			txroom = 16 - (sci_in(port, SCFDR)>>8);
-		} else {
-			txroom = (sci_in(port, SCxSR) & SCI_TDRE)?1:0;
-		}
-#else
-		txroom = (sci_in(port, SCxSR) & SCI_TDRE)?1:0;
-#endif
-		if (count > txroom)
-			count = txroom;
-
-		/* Don't copy past the end of the source buffer */
-		if (count > SERIAL_XMIT_SIZE - port->gs.xmit_tail)
-                	count = SERIAL_XMIT_SIZE - port->gs.xmit_tail;
-
-		/* If for one reason or another, we can't copy more data, we're done! */
-		if (count == 0)
-			break;
-
-		for (i=0; i<count; i++) {
-			c = port->gs.xmit_buf[port->gs.xmit_tail + i];
-			sci_out(port, SCxTDR, c);
-		}
-		sci_out(port, SCxSR, SCxSR_TDxE_CLEAR(port));
-
-		port->icount.tx += count;
-
-		/* Update the kernel buffer end */
-		port->gs.xmit_tail = (port->gs.xmit_tail + count) & (SERIAL_XMIT_SIZE-1);
-
-		/* This one last. (this is essential)
-		   It would allow others to start putting more data into the buffer! */
-		port->gs.xmit_cnt -= count;
-	}
-
-	if (port->gs.xmit_cnt <= port->gs.wakeup_chars)
-		sci_sched_event(port, SCI_EVENT_WRITE_WAKEUP);
-
-	local_irq_save(flags);
-	ctrl = sci_in(port, SCSCR);
-	if (port->gs.xmit_cnt == 0) {
-		ctrl &= ~SCI_CTRL_FLAGS_TIE;
-		port->gs.flags &= ~GS_TX_INTEN;
-	} else {
-#if !defined(SCI_ONLY)
-		if (port->type == PORT_SCIF) {
-			sci_in(port, SCxSR); /* Dummy read */
-			sci_out(port, SCxSR, SCxSR_TDxE_CLEAR(port));
-		}
-#endif
-		ctrl |= SCI_CTRL_FLAGS_TIE;
-	}
-	sci_out(port, SCSCR, ctrl);
-	local_irq_restore(flags);
-}
-
-/* On SH3, SCIF may read end-of-break as a space->mark char */
-#define STEPFN(c)  ({int __c=(c); (((__c-1)|(__c)) == -1); })
-
-static inline void sci_receive_chars(struct sci_port *port,
-				     struct pt_regs *regs)
-{
-	int i, count;
-	struct tty_struct *tty;
-	int copied=0;
-	unsigned short status;
-
-	status = sci_in(port, SCxSR);
-	if (!(status & SCxSR_RDxF(port)))
-		return;
-
-	tty = port->gs.tty;
-	while (1) {
-#if !defined(SCI_ONLY)
-		if (port->type == PORT_SCIF) {
-			count = sci_in(port, SCFDR)&0x001f;
-		} else {
-			count = (sci_in(port, SCxSR)&SCxSR_RDxF(port))?1:0;
-		}
-#else
-		count = (sci_in(port, SCxSR)&SCxSR_RDxF(port))?1:0;
-#endif
-
-		/* Don't copy more bytes than there is room for in the buffer */
-		if (tty->flip.count + count > TTY_FLIPBUF_SIZE)
-			count = TTY_FLIPBUF_SIZE - tty->flip.count;
-
-		/* If for any reason we can't copy more data, we're done! */
-		if (count == 0)
-			break;
-
-		if (port->type == PORT_SCI) {
-			tty->flip.char_buf_ptr[0] = sci_in(port, SCxRDR);
-			tty->flip.flag_buf_ptr[0] = TTY_NORMAL;
-		} else {
-			for (i=0; i<count; i++) {
-				char c = sci_in(port, SCxRDR);
-				status = sci_in(port, SCxSR);
-#if defined(__SH3__)
-				/* Skip "chars" during break */
-				if (port->break_flag) {
-					if ((c == 0) &&
-					    (status & SCxSR_FER(port))) {
-						count--; i--;
-						continue;
-					}
-					/* Nonzero => end-of-break */
-					dprintk("scif: debounce<%02x>\n", c);
-					port->break_flag = 0;
-					if (STEPFN(c)) {
-						count--; i--;
-						continue;
-					}
-				}
-#endif /* __SH3__ */
-#if defined(CONFIG_SERIAL_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
-				if (break_pressed && (port == sercons_port)) {
-					if (c != 0 &&
-					    time_before(jiffies,
-							break_pressed + HZ*5)) {
-						handle_sysrq(c, regs, NULL);
-						break_pressed = 0;
-						count--; i--;
-						continue;
-					} else if (c != 0) {
-						break_pressed = 0;
-					}
-				}
-#endif /* CONFIG_SERIAL_CONSOLE && CONFIG_MAGIC_SYSRQ */
-
-				/* Store data and status */
-				tty->flip.char_buf_ptr[i] = c;
-				if (status&SCxSR_FER(port)) {
-					tty->flip.flag_buf_ptr[i] = TTY_FRAME;
-					dprintk("sci: frame error\n");
-				} else if (status&SCxSR_PER(port)) {
-					tty->flip.flag_buf_ptr[i] = TTY_PARITY;
-					dprintk("sci: parity error\n");
-				} else {
-					tty->flip.flag_buf_ptr[i] = TTY_NORMAL;
-				}
-			}
-		}
-
-		sci_in(port, SCxSR); /* dummy read */
-		sci_out(port, SCxSR, SCxSR_RDxF_CLEAR(port));
-
-		/* Update the kernel buffer end */
-		tty->flip.count += count;
-		tty->flip.char_buf_ptr += count;
-		tty->flip.flag_buf_ptr += count;
-
-		copied += count;
-		port->icount.rx += count;
-	}
-
-	if (copied)
-		/* Tell the rest of the system the news. New characters! */
-		tty_flip_buffer_push(tty);
-	else {
-		sci_in(port, SCxSR); /* dummy read */
-		sci_out(port, SCxSR, SCxSR_RDxF_CLEAR(port));
-	}
-}
-
-static inline int sci_handle_errors(struct sci_port *port)
-{
-	int copied = 0;
-	unsigned short status = sci_in(port, SCxSR);
-	struct tty_struct *tty = port->gs.tty;
-
-	if (status&SCxSR_ORER(port) && tty->flip.count<TTY_FLIPBUF_SIZE) {
-		/* overrun error */
-		copied++;
-		*tty->flip.flag_buf_ptr++ = TTY_OVERRUN;
-		dprintk("sci: overrun error\n");
-	}
-
-	if (status&SCxSR_FER(port) && tty->flip.count<TTY_FLIPBUF_SIZE) {
-		if (sci_rxd_in(port) == 0) {
-			/* Notify of BREAK */
-			copied++;
-			*tty->flip.flag_buf_ptr++ = TTY_BREAK;
-			dprintk("sci: BREAK detected\n");
-		}
-		else {
-			/* frame error */
-			copied++;
-			*tty->flip.flag_buf_ptr++ = TTY_FRAME;
-			dprintk("sci: frame error\n");
-		}
-	}
-
-	if (status&SCxSR_PER(port) && tty->flip.count<TTY_FLIPBUF_SIZE) {
-		/* parity error */
-		copied++;
-		*tty->flip.flag_buf_ptr++ = TTY_PARITY;
-		dprintk("sci: parity error\n");
-	}
-
-	if (copied) {
-		tty->flip.count += copied;
-		tty_flip_buffer_push(tty);
-	}
-
-	return copied;
-}
-
-static inline int sci_handle_breaks(struct sci_port *port)
-{
-	int copied = 0;
-	unsigned short status = sci_in(port, SCxSR);
-	struct tty_struct *tty = port->gs.tty;
-
-	if (status&SCxSR_BRK(port) && tty->flip.count<TTY_FLIPBUF_SIZE) {
-#if defined(__SH3__)
-		/* Debounce break */
-		if (port->break_flag)
-			goto break_continue;
-		port->break_flag = 1;
-#endif
-#if defined(CONFIG_SERIAL_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
-		if (port == sercons_port) {
-			if (break_pressed == 0) {
-				break_pressed = jiffies;
-				dprintk("sci: implied sysrq\n");
-				goto break_continue;
-			}
-			/* Double break implies a real break */
-			break_pressed = 0;
-		}
-#endif
-		/* Notify of BREAK */
-		copied++;
-		*tty->flip.flag_buf_ptr++ = TTY_BREAK;
-		dprintk("sci: BREAK detected\n");
-	}
- break_continue:
-
-#if defined(CONFIG_CPU_SUBTYPE_SH7750) || defined(CONFIG_CPU_SUBTYPE_ST40STB1) || \
-    defined(CONFIG_CPU_SUBTYPE_SH7760)
-	/* XXX: Handle SCIF overrun error */
-	if (port->type == PORT_SCIF && (sci_in(port, SCLSR) & SCIF_ORER) != 0) {
-		sci_out(port, SCLSR, 0);
-		if(tty->flip.count<TTY_FLIPBUF_SIZE) {
-			copied++;
-			*tty->flip.flag_buf_ptr++ = TTY_OVERRUN;
-			dprintk("sci: overrun error\n");
-		}
-	}
-#endif
-
-	if (copied) {
-		tty->flip.count += copied;
-		tty_flip_buffer_push(tty);
-	}
-
-	return copied;
-}
-
-static irqreturn_t sci_rx_interrupt(int irq, void *ptr, struct pt_regs *regs)
-{
-	struct sci_port *port = ptr;
-
-	if (port->gs.flags & GS_ACTIVE)
-		if (!(port->gs.flags & SCI_RX_THROTTLE)) {
-			sci_receive_chars(port, regs);
-			return IRQ_HANDLED;
-
-		}
-	sci_disable_rx_interrupts(port);
-
-	return IRQ_HANDLED;
-}
-
-static irqreturn_t sci_tx_interrupt(int irq, void *ptr, struct pt_regs *regs)
-{
-	struct sci_port *port = ptr;
-
-	if (port->gs.flags & GS_ACTIVE)
-		sci_transmit_chars(port);
-	else {
-		sci_disable_tx_interrupts(port);
-	}
-
-	return IRQ_HANDLED;
-}
-
-static irqreturn_t sci_er_interrupt(int irq, void *ptr, struct pt_regs *regs)
-{
-	struct sci_port *port = ptr;
-
-	/* Handle errors */
-	if (port->type == PORT_SCI) {
-		if(sci_handle_errors(port)) {
-			/* discard character in rx buffer */
-			sci_in(port, SCxSR);
-			sci_out(port, SCxSR, SCxSR_RDxF_CLEAR(port));
-		}
-	}
-	else
-		sci_rx_interrupt(irq, ptr, regs);
-		
-	sci_out(port, SCxSR, SCxSR_ERROR_CLEAR(port));
-
-	/* Kick the transmission */
-	sci_tx_interrupt(irq, ptr, regs);
-
-	return IRQ_HANDLED;
-}
-
-#if !defined(SCI_ONLY)
-static irqreturn_t sci_br_interrupt(int irq, void *ptr, struct pt_regs *regs)
-{
-	struct sci_port *port = ptr;
-
-	/* Handle BREAKs */
-	sci_handle_breaks(port);
-	sci_out(port, SCxSR, SCxSR_BREAK_CLEAR(port));
-
-	return IRQ_HANDLED;
-}
-#endif
-
-static void do_softint(void *private_)
-{
-	struct sci_port *port = (struct sci_port *) private_;
-	struct tty_struct	*tty;
-	
-	tty = port->gs.tty;
-	if (!tty)
-		return;
-
-	if (test_and_clear_bit(SCI_EVENT_WRITE_WAKEUP, &port->event)) {
-		if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) &&
-		    tty->ldisc.write_wakeup)
-			(tty->ldisc.write_wakeup)(tty);
-		wake_up_interruptible(&tty->write_wait);
-	}
-}
-
-/* ********************************************************************** *
- *                Here are the routines that actually                     *
- *              interface with the generic_serial driver                  *
- * ********************************************************************** */
-
-static void sci_disable_tx_interrupts(void *ptr)
-{
-	struct sci_port *port = ptr;
-	unsigned long flags;
-	unsigned short ctrl;
-
-	/* Clear TIE (Transmit Interrupt Enable) bit in SCSCR */
-	local_irq_save(flags);
-	ctrl = sci_in(port, SCSCR);
-	ctrl &= ~SCI_CTRL_FLAGS_TIE;
-	sci_out(port, SCSCR, ctrl);
-	local_irq_restore(flags);
-}
-
-static void sci_enable_tx_interrupts(void *ptr)
-{
-	struct sci_port *port = ptr; 
-
-	disable_irq(port->irqs[SCIx_TXI_IRQ]);
-	sci_transmit_chars(port);
-	enable_irq(port->irqs[SCIx_TXI_IRQ]);
-}
-
-static void sci_disable_rx_interrupts(void * ptr)
-{
-	struct sci_port *port = ptr;
-	unsigned long flags;
-	unsigned short ctrl;
-
-	/* Clear RIE (Receive Interrupt Enable) bit in SCSCR */
-	local_irq_save(flags);
-	ctrl = sci_in(port, SCSCR);
-	ctrl &= ~SCI_CTRL_FLAGS_RIE;
-	sci_out(port, SCSCR, ctrl);
-	local_irq_restore(flags);
-}
-
-static void sci_enable_rx_interrupts(void * ptr)
-{
-	struct sci_port *port = ptr;
-	unsigned long flags;
-	unsigned short ctrl;
-
-	/* Set RIE (Receive Interrupt Enable) bit in SCSCR */
-	local_irq_save(flags);
-	ctrl = sci_in(port, SCSCR);
-	ctrl |= SCI_CTRL_FLAGS_RIE;
-	sci_out(port, SCSCR, ctrl);
-	local_irq_restore(flags);
-}
-
-static int sci_get_CD(void * ptr)
-{
-	/* If you have signal for CD (Carrier Detect), please change here. */
-	return 1;
-}
-
-static int sci_chars_in_buffer(void * ptr)
-{
-	struct sci_port *port = ptr;
-
-#if !defined(SCI_ONLY)
-	if (port->type == PORT_SCIF) {
-		return (sci_in(port, SCFDR) >> 8) + ((sci_in(port, SCxSR) & SCxSR_TEND(port))? 0: 1);
-	} else {
-		return (sci_in(port, SCxSR) & SCxSR_TEND(port))? 0: 1;
-	}
-#else
-	return (sci_in(port, SCxSR) & SCxSR_TEND(port))? 0: 1;
-#endif
-}
-
-static void sci_shutdown_port(void * ptr)
-{
-	struct sci_port *port = ptr; 
-
-	port->gs.flags &= ~ GS_ACTIVE;
-	if (port->gs.tty && port->gs.tty->termios->c_cflag & HUPCL)
-		sci_setsignals(port, 0, 0);
-	sci_free_irq(port);
-#if defined(__H8300S__)
-	h8300_sci_enable(port,sci_disable);
-#endif
-}
-
-/* ********************************************************************** *
- *                Here are the routines that actually                     *
- *               interface with the rest of the system                    *
- * ********************************************************************** */
-
-static int sci_open(struct tty_struct * tty, struct file * filp)
-{
-	struct sci_port *port;
-	int retval, line;
-
-	line = tty->index;
-
-	if ((line < 0) || (line >= SCI_NPORTS))
-		return -ENODEV;
-
-	port = &sci_ports[line];
-
-	tty->driver_data = port;
-	port->gs.tty = tty;
-	port->gs.count++;
-
-	port->event = 0;
-	INIT_WORK(&port->tqueue, do_softint, port);
-
-#if defined(__H8300S__)
-		h8300_sci_enable(port,sci_enable);
-#endif
-
-	/*
-	 * Start up serial port
-	 */
-	retval = gs_init_port(&port->gs);
-	if (retval) {
-		goto failed_1;
-	}
-
-	port->gs.flags |= GS_ACTIVE;
-	sci_setsignals(port, 1,1);
-
-	if (port->gs.count == 1) {
-		retval = sci_request_irq(port);
-	}
-
-	retval = gs_block_til_ready(port, filp);
-
-	if (retval) {
-		goto failed_3;
-	}
-
-#ifdef CONFIG_SERIAL_CONSOLE
-	if (sercons.cflag && sercons.index == line) {
-		tty->termios->c_cflag = sercons.cflag;
-		port->gs.baud = sercons_baud;
-		sercons.cflag = 0;
-		sci_set_real_termios(port);
-	}
-#endif
-
-#ifdef CONFIG_SH_KGDB_CONSOLE
-        if (kgdbcons.cflag && kgdbcons.index == line) {
-                tty->termios->c_cflag = kgdbcons.cflag;
-                port->gs.baud = kgdb_baud;
-                sercons.cflag = 0;
-                sci_set_real_termios(port);
-        }
-#endif
-
-	sci_enable_rx_interrupts(port);
-
-	return 0;
-
-failed_3:
-	sci_free_irq(port);
-failed_1:
-	port->gs.count--;
-	return retval;
-}
-
-static void sci_hungup(void *ptr)
-{
-        return;
-}
-
-static void sci_close(void *ptr)
-{
-        return;
-}
-
-static int sci_tiocmget(struct tty_struct *tty, struct file *file)
-{
-	struct sci_port *port = tty->driver_data;
-	return sci_getsignals(port);
-}
-
-static int sci_tiocmset(struct tty_struct *tty, struct file *file,
-			unsigned int set, unsigned int clear)
-{
-	struct sci_port *port = tty->driver_data;
-	int rts = -1, dtr = -1;
-
-	if (set & TIOCM_RTS)
-		rts = 1;
-	if (set & TIOCM_DTR)
-		dtr = 1;
-	if (clear & TIOCM_RTS)
-		rts = 0;
-	if (clear & TIOCM_DTR)
-		dtr = 0;
-
-	sci_setsignals(port, dtr, rts);
-	return 0;
-}
-
-static int sci_ioctl(struct tty_struct * tty, struct file * filp, 
-                     unsigned int cmd, unsigned long arg)
-{
-	int rc;
-	struct sci_port *port = tty->driver_data;
-	int ival;
-
-	rc = 0;
-	switch (cmd) {
-	case TIOCGSOFTCAR:
-		rc = put_user(((tty->termios->c_cflag & CLOCAL) ? 1 : 0),
-		              (unsigned int __user *) arg);
-		break;
-	case TIOCSSOFTCAR:
-		if ((rc = get_user(ival, (unsigned int __user *) arg)) == 0)
-			tty->termios->c_cflag =
-				(tty->termios->c_cflag & ~CLOCAL) |
-				(ival ? CLOCAL : 0);
-		break;
-	case TIOCGSERIAL:
-		if ((rc = verify_area(VERIFY_WRITE, (void __user *) arg,
-		                      sizeof(struct serial_struct))) == 0)
-			rc = gs_getserial(&port->gs, (struct serial_struct *) arg);
-		break;
-	case TIOCSSERIAL:
-		if ((rc = verify_area(VERIFY_READ, (void __user *) arg,
-		                      sizeof(struct serial_struct))) == 0)
-			rc = gs_setserial(&port->gs,
-					  (struct serial_struct *) arg);
-		break;
-	default:
-		rc = -ENOIOCTLCMD;
-		break;
-	}
-
-	return rc;
-}
-
-static void sci_throttle(struct tty_struct * tty)
-{
-	struct sci_port *port = (struct sci_port *)tty->driver_data;
-
-	/* If the port is using any type of input flow
-	 * control then throttle the port.
-	 */
-	if ((tty->termios->c_cflag & CRTSCTS) || (I_IXOFF(tty)) )
-		port->gs.flags |= SCI_RX_THROTTLE;
-}
-
-static void sci_unthrottle(struct tty_struct * tty)
-{
-	struct sci_port *port = (struct sci_port *)tty->driver_data;
-
-	/* Always unthrottle even if flow control is not enabled on
-	 * this port in case we disabled flow control while the port
-	 * was throttled
-	 */
-	port->gs.flags &= ~SCI_RX_THROTTLE;
-	sci_enable_rx_interrupts(port);
-	return;
-}
-
-#ifdef CONFIG_PROC_FS
-static int sci_read_proc(char *page, char **start, off_t off, int count,
-			 int *eof, void *data)
-{
-	int i;
-	struct sci_port *port;
-	int len = 0;
-	
-        len += sprintf(page, "sciinfo:0.1\n");
-	for (i = 0; i < SCI_NPORTS && len < 4000; i++) {
-		port = &sci_ports[i];
-		len += sprintf(page+len, "%d: uart:%s address: %08x", i,
-			       (port->type == PORT_SCI) ? "SCI" : "SCIF",
-			       port->base);
-		len += sprintf(page+len, " baud:%d", port->gs.baud);
-		len += sprintf(page+len, " tx:%d rx:%d",
-			       port->icount.tx, port->icount.rx);
-
-		if (port->icount.frame)
-			len += sprintf(page+len, " fe:%d", port->icount.frame);
-		if (port->icount.parity)
-			len += sprintf(page+len, " pe:%d", port->icount.parity);
-		if (port->icount.brk)
-			len += sprintf(page+len, " brk:%d", port->icount.brk);
-		if (port->icount.overrun)
-			len += sprintf(page+len, " oe:%d", port->icount.overrun);
-		len += sprintf(page+len, "\n");
-	}
-	return len;
-}
-#endif
-
-#ifdef CONFIG_CPU_FREQ
-/*
- * Here we define a transistion notifier so that we can update all of our
- * ports' baud rate when the peripheral clock changes.
- */
-
-static int sci_notifier(struct notifier_block *self, unsigned long phase, void *p)
-{
-	struct cpufreq_freqs *freqs = p;
-	int i;
-
-	if (phase == CPUFREQ_POSTCHANGE) {
-		for (i = 0; i < SCI_NPORTS; i++) {
-			/*
-			 * This will force a baud rate change in hardware.
-			 */
-			if (sci_ports[i].gs.tty != NULL) {
-				sci_set_baud(&sci_ports[i], sci_ports[i].gs.baud);
-			}
-		}
-		printk("%s: got a postchange notification for cpu %d (old %d, new %d)\n",
-				__FUNCTION__, freqs->cpu, freqs->old, freqs->new);
-	}
-
-	return NOTIFY_OK;
-}
-
-static struct notifier_block sci_nb = { &sci_notifier, NULL, 0 };
-#endif /* CONFIG_CPU_FREQ */
-
-static struct tty_operations sci_ops = {
-	.open	= sci_open,
-	.close = gs_close,
-	.write = gs_write,
-	.put_char = gs_put_char,
-	.flush_chars = gs_flush_chars,
-	.write_room = gs_write_room,
-	.chars_in_buffer = gs_chars_in_buffer,
-	.flush_buffer = gs_flush_buffer,
-	.ioctl = sci_ioctl,
-	.throttle = sci_throttle,
-	.unthrottle = sci_unthrottle,
-	.set_termios = gs_set_termios,
-	.stop = gs_stop,
-	.start = gs_start,
-	.hangup = gs_hangup,
-#ifdef CONFIG_PROC_FS
-	.read_proc = sci_read_proc,
-#endif
-	.tiocmget = sci_tiocmget,
-	.tiocmset = sci_tiocmset,
-};
-
-/* ********************************************************************** *
- *                    Here are the initialization routines.               *
- * ********************************************************************** */
-
-static int sci_init_drivers(void)
-{
-	int error;
-	struct sci_port *port;
-	sci_driver = alloc_tty_driver(SCI_NPORTS);
-	if (!sci_driver)
-		return -ENOMEM;
-
-	sci_driver->owner = THIS_MODULE;
-	sci_driver->driver_name = "sci";
-	sci_driver->name = "ttySC";
-	sci_driver->devfs_name = "ttsc/";
-	sci_driver->major = SCI_MAJOR;
-	sci_driver->minor_start = SCI_MINOR_START;
-	sci_driver->type = TTY_DRIVER_TYPE_SERIAL;
-	sci_driver->subtype = SERIAL_TYPE_NORMAL;
-	sci_driver->init_termios = tty_std_termios;
-	sci_driver->init_termios.c_cflag =
-		B9600 | CS8 | CREAD | HUPCL | CLOCAL | CRTSCTS;
-	sci_driver->flags = TTY_DRIVER_REAL_RAW;
-	tty_set_operations(sci_driver, &sci_ops);
-	if ((error = tty_register_driver(sci_driver))) {
-		printk(KERN_ERR "sci: Couldn't register SCI driver, error = %d\n",
-		       error);
-		put_tty_driver(sci_driver);
-		return 1;
-	}
-
-	for (port = &sci_ports[0]; port < &sci_ports[SCI_NPORTS]; port++) {
-		port->gs.magic = SCI_MAGIC;
-		port->gs.close_delay = HZ/2;
-		port->gs.closing_wait = 30 * HZ;
-		port->gs.rd = &sci_real_driver;
-		init_waitqueue_head(&port->gs.open_wait);
-		init_waitqueue_head(&port->gs.close_wait);
-		port->old_cflag = 0;
-		port->icount.cts = port->icount.dsr = 
-			port->icount.rng = port->icount.dcd = 0;
-		port->icount.rx = port->icount.tx = 0;
-		port->icount.frame = port->icount.parity = 0;
-		port->icount.overrun = port->icount.brk = 0;
-	}
-
-#ifdef CONFIG_CPU_FREQ
-	/* Setup transition notifier */
-	if (cpufreq_register_notifier(&sci_nb, CPUFREQ_TRANSITION_NOTIFIER) < 0) {
-		printk(KERN_ERR "sci: Unable to register CPU frequency notifier\n");
-		return 1;
-	}
-	printk("sci: CPU frequency notifier registered\n");
-#endif
-	return 0;
-}
-
-static int sci_request_irq(struct sci_port *port)
-{
-	int i;
-#if !defined(SCI_ONLY)
-	irqreturn_t (*handlers[4])(int irq, void *p, struct pt_regs *regs) = {
-		sci_er_interrupt, sci_rx_interrupt, sci_tx_interrupt,
-		sci_br_interrupt,
-	};
-#else
-	void (*handlers[3])(int irq, void *ptr, struct pt_regs *regs) = {
-		sci_er_interrupt, sci_rx_interrupt, sci_tx_interrupt,
-	};
-#endif
-	for (i=0; i<(sizeof(handlers)/sizeof(handlers[0])); i++) {
-		if (!port->irqs[i]) continue;
-		if (request_irq(port->irqs[i], handlers[i], SA_INTERRUPT,
-				"sci", port)) {
-			printk(KERN_ERR "sci: Cannot allocate irq.\n");
-			return -ENODEV;
-		}
-	}
-	return 0;
-}
-
-static void sci_free_irq(struct sci_port *port)
-{
-	int i;
-
-	for (i=0; i<4; i++) {
-		if (!port->irqs[i]) continue;
-		free_irq(port->irqs[i], port);
-	}
-}
-
-static char banner[] __initdata =
-	KERN_INFO "SuperH SCI(F) driver initialized\n";
-
-int __init sci_init(void)
-{
-	struct sci_port *port;
-	int j;
-
-	printk("%s", banner);
-
-	for (j=0; j<SCI_NPORTS; j++) {
-		port = &sci_ports[j];
-		printk(KERN_INFO "ttySC%d at 0x%08x is a %s\n", j, port->base,
-		       (port->type == PORT_SCI) ? "SCI" : "SCIF");
-	}
-
-	sci_init_drivers();
-
-#ifdef CONFIG_SH_STANDARD_BIOS
-	sh_bios_gdb_detach();
-#endif
-	return 0;		/* Return -EIO when not detected */
-}
-
-module_init(sci_init);
-
-#ifdef MODULE
-#undef func_enter
-#undef func_exit
-
-void cleanup_module(void)
-{
-	tty_unregister_driver(sci_driver);
-	put_tty_driver(sci_driver);
-}
-
-#include "generic_serial.c"
-#endif
-
-#ifdef CONFIG_SERIAL_CONSOLE
-/*
- *	Print a string to the serial port trying not to disturb
- *	any possible real use of the port...
- */
-static void serial_console_write(struct console *co, const char *s,
-				 unsigned count)
-{
-	put_string(sercons_port, s, count);
-}
-
-static struct tty_driver *serial_console_device(struct console *c, int *index)
-{
-	*index = c->index;
-	return sci_driver;
-}
-
-/*
- *	Setup initial baud/bits/parity. We do two things here:
- *	- construct a cflag setting for the first rs_open()
- *	- initialize the serial port
- *	Return non-zero if we didn't find a serial port.
- */
-static int __init serial_console_setup(struct console *co, char *options)
-{
-	int	baud = 9600;
-	int	bits = 8;
-	int	parity = 'n';
-	int	cflag = CREAD | HUPCL | CLOCAL;
-	char	*s;
-
-	sercons_port = &sci_ports[co->index];
-
-	if (options) {
-		baud = simple_strtoul(options, NULL, 10);
-		s = options;
-		while(*s >= '0' && *s <= '9')
-			s++;
-		if (*s) parity = *s++;
-		if (*s) bits   = *s - '0';
-	}
-
-	/*
-	 *	Now construct a cflag setting.
-	 */
-	switch (baud) {
-		case 19200:
-			cflag |= B19200;
-			break;
-		case 38400:
-			cflag |= B38400;
-			break;
-		case 57600:
-			cflag |= B57600;
-			break;
-		case 115200:
-			cflag |= B115200;
-			break;
-		case 9600:
-		default:
-			cflag |= B9600;
-			baud = 9600;
-			break;
-	}
-	switch (bits) {
-		case 7:
-			cflag |= CS7;
-			break;
-		default:
-		case 8:
-			cflag |= CS8;
-			break;
-	}
-	switch (parity) {
-		case 'o': case 'O':
-			cflag |= PARODD;
-			break;
-		case 'e': case 'E':
-			cflag |= PARENB;
-			break;
-	}
-
-	co->cflag = cflag;
-	sercons_baud = baud;
-
-#if defined(__H8300S__)
-	h8300_sci_enable(sercons_port,sci_enable);
-#endif
-	sci_set_termios_cflag(sercons_port, cflag, baud);
-	sercons_port->old_cflag = cflag;
-
-	return 0;
-}
-
-static struct console sercons = {
-	.name		= "ttySC",
-	.write		= serial_console_write,
-	.device		= serial_console_device,
-	.setup		= serial_console_setup,
-	.flags		= CON_PRINTBUFFER,
-	.index		= -1,
-};
-
-/*
- *	Register console.
- */
-
-#ifdef CONFIG_SH_EARLY_PRINTK
-extern void sh_console_unregister (void);
-#endif
-
-static int __init sci_console_init(void)
-{
-	register_console(&sercons);
-#ifdef CONFIG_SH_EARLY_PRINTK
-	/* Now that the real console is available, unregister the one we
-	 * used while first booting.
-	 */
-	sh_console_unregister();
-#endif
-	return 0;
-}
-console_initcall(sci_console_init);
-
-#endif /* CONFIG_SERIAL_CONSOLE */
-
-
-#ifdef CONFIG_SH_KGDB
-
-/* Initialise the KGDB serial port */
-int kgdb_sci_setup(void)
-{
-	int cflag = CREAD | HUPCL | CLOCAL;
-
-	if ((kgdb_portnum < 0) || (kgdb_portnum >= SCI_NPORTS))
-		return -1;
-
-        kgdb_sci_port = &sci_ports[kgdb_portnum];
-
-	switch (kgdb_baud) {
-        case 115200:
-                cflag |= B115200;
-                break;
-	case 57600:
-                cflag |= B57600;
-                break;
-        case 38400:
-                cflag |= B38400;
-                break;
-        case 19200:
-                cflag |= B19200;
-                break;
-        case 9600:
-        default:
-                cflag |= B9600;
-                kgdb_baud = 9600;
-                break;
-        }
-
-	switch (kgdb_bits) {
-        case '7':
-                cflag |= CS7;
-                break;
-        default:
-        case '8':
-                cflag |= CS8;
-                break;
-        }
-
-        switch (kgdb_parity) {
-        case 'O':
-                cflag |= PARODD;
-                break;
-        case 'E':
-                cflag |= PARENB;
-                break;
-        }
-
-        kgdb_cflag = cflag;
-        sci_set_termios_cflag(kgdb_sci_port, kgdb_cflag, kgdb_baud);
-
-        /* Set up the interrupt for BREAK from GDB */
-	/* Commented out for now since it may not be possible yet...
-	   request_irq(kgdb_sci_port->irqs[0], kgdb_break_interrupt,
-	               SA_INTERRUPT, "sci", kgdb_sci_port);
-	   sci_enable_rx_interrupts(kgdb_sci_port);
-	*/
-
-	/* Setup complete: initialize function pointers */
-	kgdb_getchar = kgdb_sci_getchar;
-	kgdb_putchar = kgdb_sci_putchar;
-
-        return 0;
-}
-
-#ifdef CONFIG_SH_KGDB_CONSOLE
-
-/* Create a console device */
-static kdev_t kgdb_console_device(struct console *c)
-{
-        return MKDEV(SCI_MAJOR, SCI_MINOR_START + c->index);
-}
-
-/* Set up the KGDB console */
-static int __init kgdb_console_setup(struct console *co, char *options)
-{
-        /* NB we ignore 'options' because we've already done the setup */
-        co->cflag = kgdb_cflag;
-
-        return 0;
-}
-
-/* Register the KGDB console so we get messages (d'oh!) */
-void __init kgdb_console_init(void)
-{
-        register_console(&kgdbcons);
-}
-
-/* The console structure for KGDB */
-static struct console kgdbcons = {
-        name:"ttySC",
-        write:kgdb_console_write,
-        device:kgdb_console_device,
-        wait_key:serial_console_wait_key,
-        setup:kgdb_console_setup,
-        flags:CON_PRINTBUFFER | CON_ENABLED,
-        index:-1,
-};
-
-#endif /* CONFIG_SH_KGDB_CONSOLE */
-
-#endif /* CONFIG_SH_KGDB */
diff -Nru a/drivers/char/sh-sci.h b/drivers/char/sh-sci.h
--- a/drivers/char/sh-sci.h	Sun May 16 01:18:35 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,478 +0,0 @@
-/* $Id: sh-sci.h,v 1.7 2004/02/10 17:04:17 lethal Exp $
- *
- *  linux/drivers/char/sh-sci.h
- *
- *  SuperH on-chip serial module support.  (SCI with no FIFO / with FIFO)
- *  Copyright (C) 1999, 2000  Niibe Yutaka
- *  Copyright (C) 2000  Greg Banks
- *  Modified to support multiple serial ports. Stuart Menefy (May 2000).
- *  Modified to support SH7760 SCIF. Paul Mundt (Oct 2003).
- *  Modified to support H8/300 Serise Yoshinori Sato (Feb 2004). 
- *
- */
-#include <linux/config.h>
-
-#if defined(__H8300H__) || defined(__H8300S__)
-#include <asm/gpio.h>
-#if defined(CONFIG_H83007) || defined(CONFIG_H83068)
-#include <asm/regs306x.h>
-#endif
-#if defined(CONFIG_H8S2678)
-#include <asm/regs267x.h>
-#endif
-#endif
-
-/* Values for sci_port->type */
-#define PORT_SCI  0
-#define PORT_SCIF 1
-#define PORT_IRDA 1		/* XXX: temporary assignment */
-
-/* Offsets into the sci_port->irqs array */
-#define SCIx_ERI_IRQ 0
-#define SCIx_RXI_IRQ 1
-#define SCIx_TXI_IRQ 2
-
-/*                     ERI, RXI, TXI, BRI */
-#define SCI_IRQS      { 23,  24,  25,   0 }
-#define SH3_SCIF_IRQS { 56,  57,  59,  58 }
-#define SH3_IRDA_IRQS { 52,  53,  55,  54 }
-#define SH4_SCIF_IRQS { 40,  41,  43,  42 }
-#define STB1_SCIF1_IRQS {23, 24,  26,  25 }
-#define SH7760_SCIF0_IRQS { 52, 53, 55, 54 }
-#define SH7760_SCIF1_IRQS { 72, 73, 75, 74 }
-#define SH7760_SCIF2_IRQS { 76, 77, 79, 78 }
-#define H8300H_SCI_IRQS0 {52, 53, 54,   0 }
-#define H8300H_SCI_IRQS1 {56, 57, 58,   0 }
-#define H8300H_SCI_IRQS2 {60, 61, 62,   0 }
-#define H8S_SCI_IRQS0 {88, 89, 90,   0 }
-#define H8S_SCI_IRQS1 {92, 93, 94,   0 }
-#define H8S_SCI_IRQS2 {96, 97, 98,   0 }
-
-#if defined(CONFIG_CPU_SUBTYPE_SH7708)
-# define SCI_NPORTS 1
-# define SCI_INIT { \
-  { {}, PORT_SCI,  0xfffffe80, SCI_IRQS,      sci_init_pins_sci  } \
-}
-# define SCSPTR 0xffffff7c /* 8 bit */
-# define SCSCR_INIT(port)          0x30 /* TIE=0,RIE=0,TE=1,RE=1 */
-# define SCI_ONLY
-#elif defined(CONFIG_CPU_SUBTYPE_SH7707) || defined(CONFIG_CPU_SUBTYPE_SH7709)
-# define SCI_NPORTS 3
-# define SCI_INIT { \
-  { {}, PORT_SCI,  0xfffffe80, SCI_IRQS,      sci_init_pins_sci  }, \
-  { {}, PORT_SCIF, 0xA4000150, SH3_SCIF_IRQS, sci_init_pins_scif }, \
-  { {}, PORT_SCIF, 0xA4000140, SH3_IRDA_IRQS, sci_init_pins_irda }  \
-}
-# define SCPCR  0xA4000116 /* 16 bit SCI and SCIF */
-# define SCPDR  0xA4000136 /* 8  bit SCI and SCIF */
-# define SCSCR_INIT(port)          0x30 /* TIE=0,RIE=0,TE=1,RE=1 */
-# define SCI_AND_SCIF
-#elif defined(CONFIG_CPU_SUBTYPE_SH7750) || defined(CONFIG_CPU_SUBTYPE_SH7751)
-# define SCI_NPORTS 2
-# define SCI_INIT { \
-  { {}, PORT_SCI,  0xffe00000, SCI_IRQS,      sci_init_pins_sci  }, \
-  { {}, PORT_SCIF, 0xFFE80000, SH4_SCIF_IRQS, sci_init_pins_scif }  \
-}
-# define SCSPTR1 0xffe0001c /* 8  bit SCI */
-# define SCSPTR2 0xFFE80020 /* 16 bit SCIF */
-# define SCIF_ORER 0x0001   /* overrun error bit */
-# define SCSCR_INIT(port) (((port)->type == PORT_SCI) ? \
-	0x30 /* TIE=0,RIE=0,TE=1,RE=1 */ : \
-	0x38 /* TIE=0,RIE=0,TE=1,RE=1,REIE=1 */ )
-# define SCI_AND_SCIF
-#elif defined(CONFIG_CPU_SUBTYPE_SH7760)
-# define SCI_NPORTS 3
-# define SCI_INIT { \
-  { {}, PORT_SCIF, 0xfe600000, SH7760_SCIF0_IRQS, sci_init_pins_scif }, \
-  { {}, PORT_SCIF, 0xfe610000, SH7760_SCIF1_IRQS, sci_init_pins_scif }, \
-  { {}, PORT_SCIF, 0xfe620000, SH7760_SCIF2_IRQS, sci_init_pins_scif }  \
-}
-# define SCSPTR0 0xfe600024 /* 16 bit SCIF */
-# define SCSPTR1 0xfe610024 /* 16 bit SCIF */
-# define SCSPTR2 0xfe620024 /* 16 bit SCIF */
-# define SCIF_ORDER 0x0001  /* overrun error bit */
-# define SCSCR_INIT(port)          0x38 /* TIE=0,RIE=0,TE=1,RE=1,REIE=1 */
-# define SCIF_ONLY
-#elif defined(CONFIG_CPU_SUBTYPE_ST40STB1)
-# define SCI_NPORTS 2
-# define SCI_INIT { \
-  { {}, PORT_SCIF, 0xffe00000, STB1_SCIF1_IRQS, sci_init_pins_scif }, \
-  { {}, PORT_SCIF, 0xffe80000, SH4_SCIF_IRQS,   sci_init_pins_scif }  \
-}
-# define SCSPTR1 0xffe00020 /* 16 bit SCIF */
-# define SCSPTR2 0xffe80020 /* 16 bit SCIF */
-# define SCIF_ORER 0x0001   /* overrun error bit */
-# define SCSCR_INIT(port)          0x38 /* TIE=0,RIE=0,TE=1,RE=1,REIE=1 */
-# define SCIF_ONLY
-#elif defined(CONFIG_H83007) || defined(CONFIG_H83068)
-# define SCI_NPORTS 3
-# define SCI_INIT { \
-  { {}, PORT_SCI,  0x00ffffb0, H8300H_SCI_IRQS0, sci_init_pins_sci }, \
-  { {}, PORT_SCI,  0x00ffffb8, H8300H_SCI_IRQS1, sci_init_pins_sci }, \
-  { {}, PORT_SCI,  0x00ffffc0, H8300H_SCI_IRQS2, sci_init_pins_sci }  \
-}
-# define SCSCR_INIT(port)          0x30 /* TIE=0,RIE=0,TE=1,RE=1 */
-# define SCI_ONLY
-# define H8300_SCI_DR(ch) *(volatile char *)(P1DR + h8300_sci_pins[ch].port)
-#elif defined(CONFIG_H8S2678)
-# define SCI_NPORTS 3
-# define SCI_INIT { \
-  { {}, PORT_SCI,  0x00ffff78, H8S_SCI_IRQS0, sci_init_pins_sci }, \
-  { {}, PORT_SCI,  0x00ffff80, H8S_SCI_IRQS1, sci_init_pins_sci }, \
-  { {}, PORT_SCI,  0x00ffff88, H8S_SCI_IRQS2, sci_init_pins_sci }  \
-}
-# define SCSCR_INIT(port)          0x30 /* TIE=0,RIE=0,TE=1,RE=1 */
-# define SCI_ONLY
-# define H8300_SCI_DR(ch) *(volatile char *)(P1DR + h8300_sci_pins[ch].port)
-#else
-# error CPU subtype not defined
-#endif
-
-/* SCSCR */
-#define SCI_CTRL_FLAGS_TIE  0x80 /* all */
-#define SCI_CTRL_FLAGS_RIE  0x40 /* all */
-#define SCI_CTRL_FLAGS_TE   0x20 /* all */
-#define SCI_CTRL_FLAGS_RE   0x10 /* all */
-/*      SCI_CTRL_FLAGS_REIE 0x08  * 7750 SCIF */
-/*      SCI_CTRL_FLAGS_MPIE 0x08  * 7707 SCI, 7708 SCI, 7709 SCI, 7750 SCI */
-/*      SCI_CTRL_FLAGS_TEIE 0x04  * 7707 SCI, 7708 SCI, 7709 SCI, 7750 SCI */
-/*      SCI_CTRL_FLAGS_CKE1 0x02  * all */
-/*      SCI_CTRL_FLAGS_CKE0 0x01  * 7707 SCI/SCIF, 7708 SCI, 7709 SCI/SCIF, 7750 SCI */
-
-/* SCxSR SCI */
-#define SCI_TDRE  0x80 /* 7707 SCI, 7708 SCI, 7709 SCI, 7750 SCI */
-#define SCI_RDRF  0x40 /* 7707 SCI, 7708 SCI, 7709 SCI, 7750 SCI */
-#define SCI_ORER  0x20 /* 7707 SCI, 7708 SCI, 7709 SCI, 7750 SCI */
-#define SCI_FER   0x10 /* 7707 SCI, 7708 SCI, 7709 SCI, 7750 SCI */
-#define SCI_PER   0x08 /* 7707 SCI, 7708 SCI, 7709 SCI, 7750 SCI */
-#define SCI_TEND  0x04 /* 7707 SCI, 7708 SCI, 7709 SCI, 7750 SCI */
-/*      SCI_MPB   0x02  * 7707 SCI, 7708 SCI, 7709 SCI, 7750 SCI */
-/*      SCI_MPBT  0x01  * 7707 SCI, 7708 SCI, 7709 SCI, 7750 SCI */
-
-#define SCI_ERRORS ( SCI_PER | SCI_FER | SCI_ORER)
-
-/* SCxSR SCIF */
-#define SCIF_ER    0x0080 /* 7707 SCIF, 7709 SCIF, 7750 SCIF */
-#define SCIF_TEND  0x0040 /* 7707 SCIF, 7709 SCIF, 7750 SCIF */
-#define SCIF_TDFE  0x0020 /* 7707 SCIF, 7709 SCIF, 7750 SCIF */
-#define SCIF_BRK   0x0010 /* 7707 SCIF, 7709 SCIF, 7750 SCIF */
-#define SCIF_FER   0x0008 /* 7707 SCIF, 7709 SCIF, 7750 SCIF */
-#define SCIF_PER   0x0004 /* 7707 SCIF, 7709 SCIF, 7750 SCIF */
-#define SCIF_RDF   0x0002 /* 7707 SCIF, 7709 SCIF, 7750 SCIF */
-#define SCIF_DR    0x0001 /* 7707 SCIF, 7709 SCIF, 7750 SCIF */
-
-#define SCIF_ERRORS ( SCIF_PER | SCIF_FER | SCIF_ER | SCIF_BRK)
-
-#if defined(SCI_ONLY)
-# define SCxSR_TEND(port)		SCI_TEND
-# define SCxSR_ERRORS(port)		SCI_ERRORS
-# define SCxSR_RDxF(port)               SCI_RDRF
-# define SCxSR_TDxE(port)               SCI_TDRE
-# define SCxSR_ORER(port)		SCI_ORER
-# define SCxSR_FER(port)		SCI_FER
-# define SCxSR_PER(port)		SCI_PER
-# define SCxSR_BRK(port)		0x00
-# define SCxSR_RDxF_CLEAR(port)		0xbc
-# define SCxSR_ERROR_CLEAR(port)	0xc4
-# define SCxSR_TDxE_CLEAR(port)		0x78
-# define SCxSR_BREAK_CLEAR(port)   	0xc4
-#elif defined(SCIF_ONLY) 
-# define SCxSR_TEND(port)		SCIF_TEND
-# define SCxSR_ERRORS(port)		SCIF_ERRORS
-# define SCxSR_RDxF(port)               SCIF_RDF
-# define SCxSR_TDxE(port)               SCIF_TDFE
-# define SCxSR_ORER(port)		0x0000
-# define SCxSR_FER(port)		SCIF_FER
-# define SCxSR_PER(port)		SCIF_PER
-# define SCxSR_BRK(port)		SCIF_BRK
-# define SCxSR_RDxF_CLEAR(port)		0x00fc
-# define SCxSR_ERROR_CLEAR(port)	0x0073
-# define SCxSR_TDxE_CLEAR(port)		0x00df
-# define SCxSR_BREAK_CLEAR(port)   	0x00e3
-#else
-# define SCxSR_TEND(port)	 (((port)->type == PORT_SCI) ? SCI_TEND   : SCIF_TEND)
-# define SCxSR_ERRORS(port)	 (((port)->type == PORT_SCI) ? SCI_ERRORS : SCIF_ERRORS)
-# define SCxSR_RDxF(port)        (((port)->type == PORT_SCI) ? SCI_RDRF   : SCIF_RDF)
-# define SCxSR_TDxE(port)        (((port)->type == PORT_SCI) ? SCI_TDRE   : SCIF_TDFE)
-# define SCxSR_ORER(port)        (((port)->type == PORT_SCI) ? SCI_ORER   : 0x0000)
-# define SCxSR_FER(port)         (((port)->type == PORT_SCI) ? SCI_FER    : SCIF_FER)
-# define SCxSR_PER(port)         (((port)->type == PORT_SCI) ? SCI_PER    : SCIF_PER)
-# define SCxSR_BRK(port)         (((port)->type == PORT_SCI) ? 0x00       : SCIF_BRK)
-# define SCxSR_RDxF_CLEAR(port)	 (((port)->type == PORT_SCI) ? 0xbc : 0x00fc)
-# define SCxSR_ERROR_CLEAR(port) (((port)->type == PORT_SCI) ? 0xc4 : 0x0073)
-# define SCxSR_TDxE_CLEAR(port)  (((port)->type == PORT_SCI) ? 0x78 : 0x00df)
-# define SCxSR_BREAK_CLEAR(port) (((port)->type == PORT_SCI) ? 0xc4 : 0x00e3)
-#endif
-
-/* SCFCR */
-#define SCFCR_RFRST 0x0002
-#define SCFCR_TFRST 0x0004
-#define SCFCR_MCE   0x0008
-
-#define SCI_MAJOR		204
-#define SCI_MINOR_START		8
-
-/* Generic serial flags */
-#define SCI_RX_THROTTLE		0x0000001
-
-#define SCI_MAGIC 0xbabeface
-
-/*
- * Events are used to schedule things to happen at timer-interrupt
- * time, instead of at rs interrupt time.
- */
-#define SCI_EVENT_WRITE_WAKEUP	0
-
-struct sci_port {
-	struct gs_port gs;
-	int type;
-	unsigned int base;
-	unsigned char irqs[4]; /* ERI, RXI, TXI, BRI */
-	void (*init_pins)(struct sci_port* port, unsigned int cflag);
-	unsigned int old_cflag;
-	struct async_icount icount;
-	struct work_struct tqueue;
-	unsigned long event;
-	int break_flag;
-};
-
-#define SCI_IN(size, offset)					\
-  unsigned int addr = port->base + (offset);			\
-  if ((size) == 8) { 						\
-    return ctrl_inb(addr);					\
-  } else {					 		\
-    return ctrl_inw(addr);					\
-  }
-#define SCI_OUT(size, offset, value)				\
-  unsigned int addr = port->base + (offset);			\
-  if ((size) == 8) { 						\
-    ctrl_outb(value, addr);					\
-  } else {							\
-    ctrl_outw(value, addr);					\
-  }
-
-#define CPU_SCIx_FNS(name, sci_offset, sci_size, scif_offset, scif_size)\
-  static inline unsigned int sci_##name##_in(struct sci_port* port)	\
-  {									\
-    if (port->type == PORT_SCI) { 					\
-      SCI_IN(sci_size, sci_offset)					\
-    } else {								\
-      SCI_IN(scif_size, scif_offset);		 			\
-    }									\
-  }									\
-  static inline void sci_##name##_out(struct sci_port* port, unsigned int value) \
-  {									\
-    if (port->type == PORT_SCI) {					\
-      SCI_OUT(sci_size, sci_offset, value)				\
-    } else {								\
-      SCI_OUT(scif_size, scif_offset, value);				\
-    }									\
-  }
-
-#define CPU_SCIF_FNS(name, scif_offset, scif_size)				\
-  static inline unsigned int sci_##name##_in(struct sci_port* port)	\
-  {									\
-    SCI_IN(scif_size, scif_offset);		 			\
-  }									\
-  static inline void sci_##name##_out(struct sci_port* port, unsigned int value) \
-  {									\
-    SCI_OUT(scif_size, scif_offset, value);				\
-  }
-
-#define CPU_SCI_FNS(name, sci_offset, sci_size)				\
-  static inline unsigned int sci_##name##_in(struct sci_port* port)	\
-  {									\
-    SCI_IN(sci_size, sci_offset);		 			\
-  }									\
-  static inline void sci_##name##_out(struct sci_port* port, unsigned int value) \
-  {									\
-    SCI_OUT(sci_size, sci_offset, value);				\
-  }
-
-#ifdef CONFIG_CPU_SH3
-#define SCIx_FNS(name, sh3_sci_offset, sh3_sci_size, sh4_sci_offset, sh4_sci_size, \
-		 sh3_scif_offset, sh3_scif_size, sh4_scif_offset, sh4_scif_size, \
-                 h8_sci_offset, h8_sci_size) \
-  CPU_SCIx_FNS(name, sh3_sci_offset, sh3_sci_size, sh3_scif_offset, sh3_scif_size)
-#define SCIF_FNS(name, sh3_scif_offset, sh3_scif_size, sh4_scif_offset, sh4_scif_size) \
-  CPU_SCIF_FNS(name, sh3_scif_offset, sh3_scif_size)
-#elif defined(__H8300H__) || defined(__H8300S__)
-#define SCIx_FNS(name, sh3_sci_offset, sh3_sci_size, sh4_sci_offset, sh4_sci_size, \
-		 sh3_scif_offset, sh3_scif_size, sh4_scif_offset, sh4_scif_size, \
-                 h8_sci_offset, h8_sci_size) \
-  CPU_SCI_FNS(name, h8_sci_offset, h8_sci_size)
-#define SCIF_FNS(name, sh3_scif_offset, sh3_scif_size, sh4_scif_offset, sh4_scif_size)
-#else
-#define SCIx_FNS(name, sh3_sci_offset, sh3_sci_size, sh4_sci_offset, sh4_sci_size, \
-		 sh3_scif_offset, sh3_scif_size, sh4_scif_offset, sh4_scif_size, \
-		 h8_sci_offset, h8_sci_size) \
-  CPU_SCIx_FNS(name, sh4_sci_offset, sh4_sci_size, sh4_scif_offset, sh4_scif_size)
-#define SCIF_FNS(name, sh3_scif_offset, sh3_scif_size, sh4_scif_offset, sh4_scif_size) \
-  CPU_SCIF_FNS(name, sh4_scif_offset, sh4_scif_size)
-#endif
-
-/*      reg      SCI/SH3   SCI/SH4  SCIF/SH3   SCIF/SH4  SCI/H8*/
-/*      name     off  sz   off  sz   off  sz   off  sz   off  sz*/
-SCIx_FNS(SCSMR,  0x00,  8, 0x00,  8, 0x00,  8, 0x00, 16, 0x00,  8)
-SCIx_FNS(SCBRR,  0x02,  8, 0x04,  8, 0x02,  8, 0x04,  8, 0x01,  8)
-SCIx_FNS(SCSCR,  0x04,  8, 0x08,  8, 0x04,  8, 0x08, 16, 0x02,  8)
-SCIx_FNS(SCxTDR, 0x06,  8, 0x0c,  8, 0x06,  8, 0x0C,  8, 0x03,  8)
-SCIx_FNS(SCxSR,  0x08,  8, 0x10,  8, 0x08, 16, 0x10, 16, 0x04,  8)
-SCIx_FNS(SCxRDR, 0x0a,  8, 0x14,  8, 0x0A,  8, 0x14,  8, 0x05,  8)
-SCIF_FNS(SCFCR,                      0x0c,  8, 0x18, 16)
-SCIF_FNS(SCFDR,                      0x0e, 16, 0x1C, 16)
-SCIF_FNS(SCLSR,                         0,  0, 0x24, 16)
-
-#define sci_in(port, reg) sci_##reg##_in(port)
-#define sci_out(port, reg, value) sci_##reg##_out(port, value)
-
-/* H8/300 series SCI pins assignment */
-#if defined(__H8300H__) || defined(__H8300S__)
-static const struct __attribute__((packed))
-{
-	int port;             /* GPIO port no */
-	unsigned short rx,tx; /* GPIO bit no */
-} h8300_sci_pins[] =
-{
-#if defined(CONFIG_H83007) || defined(CONFIG_H83068)
-	{    /* SCI0 */
-		.port = H8300_GPIO_P9,
-		.rx   = H8300_GPIO_B2,
-		.tx   = H8300_GPIO_B0,
-	},
-	{    /* SCI1 */
-		.port = H8300_GPIO_P9,
-		.rx   = H8300_GPIO_B3,
-		.tx   = H8300_GPIO_B1,
-	},
-	{    /* SCI2 */
-		.port = H8300_GPIO_PB,
-		.rx   = H8300_GPIO_B7,
-		.tx   = H8300_GPIO_B6,
-	}
-#elif defined(CONFIG_H8S2678)
-	{    /* SCI0 */
-		.port = H8300_GPIO_P3,
-		.rx   = H8300_GPIO_B2,
-		.tx   = H8300_GPIO_B0,
-	},
-	{    /* SCI1 */
-		.port = H8300_GPIO_P3,
-		.rx   = H8300_GPIO_B3,
-		.tx   = H8300_GPIO_B1,
-	},
-	{    /* SCI2 */
-		.port = H8300_GPIO_P5,
-		.rx   = H8300_GPIO_B1,
-		.tx   = H8300_GPIO_B0,
-	}
-#endif
-};
-#endif
-
-#if defined(CONFIG_CPU_SUBTYPE_SH7708)
-static inline int sci_rxd_in(struct sci_port *port)
-{
-	if (port->base == 0xfffffe80)
-		return ctrl_inb(SCSPTR)&0x01 ? 1 : 0; /* SCI */
-	return 1;
-}
-#elif defined(CONFIG_CPU_SUBTYPE_SH7707) || defined(CONFIG_CPU_SUBTYPE_SH7709)
-static inline int sci_rxd_in(struct sci_port *port)
-{
-	if (port->base == 0xfffffe80)
-		return ctrl_inb(SCPDR)&0x01 ? 1 : 0; /* SCI */
-	if (port->base == 0xa4000150)
-		return ctrl_inb(SCPDR)&0x10 ? 1 : 0; /* SCIF */
-	if (port->base == 0xa4000140)
-		return ctrl_inb(SCPDR)&0x04 ? 1 : 0; /* IRDA */
-	return 1;
-}
-#elif defined(CONFIG_CPU_SUBTYPE_SH7750) || defined(CONFIG_CPU_SUBTYPE_SH7751)
-static inline int sci_rxd_in(struct sci_port *port)
-{
-#ifndef SCIF_ONLY
-	if (port->base == 0xffe00000)
-		return ctrl_inb(SCSPTR1)&0x01 ? 1 : 0; /* SCI */
-#endif
-#ifndef SCI_ONLY
-	if (port->base == 0xffe80000)
-		return ctrl_inw(SCSPTR2)&0x0001 ? 1 : 0; /* SCIF */
-#endif
-	return 1;
-}
-#elif defined(CONFIG_CPU_SUBTYPE_SH7760)
-static inline int sci_rxd_in(struct sci_port *port)
-{
-	if (port->base == 0xfe600000)
-		return ctrl_inw(SCSPTR0) & 0x0001 ? 1 : 0; /* SCIF */
-	if (port->base == 0xfe610000)
-		return ctrl_inw(SCSPTR1) & 0x0001 ? 1 : 0; /* SCIF */
-	if (port->base == 0xfe620000)
-		return ctrl_inw(SCSPTR2) & 0x0001 ? 1 : 0; /* SCIF */
-}
-#elif defined(CONFIG_CPU_SUBTYPE_ST40STB1)
-static inline int sci_rxd_in(struct sci_port *port)
-{
-	if (port->base == 0xffe00000)
-		return ctrl_inw(SCSPTR1)&0x0001 ? 1 : 0; /* SCIF */
-	else
-		return ctrl_inw(SCSPTR2)&0x0001 ? 1 : 0; /* SCIF */
-
-}
-#elif defined(__H8300H__) || defined(__H8300S__)
-static inline int sci_rxd_in(struct sci_port *port)
-{
-	int ch = (port->base - SMR0) >> 3;
-	return (H8300_SCI_DR(ch) & h8300_sci_pins[ch].rx) ? 1 : 0;
-}
-#endif
-
-/*
- * Values for the BitRate Register (SCBRR)
- *
- * The values are actually divisors for a frequency which can
- * be internal to the SH3 (14.7456MHz) or derived from an external
- * clock source.  This driver assumes the internal clock is used;
- * to support using an external clock source, config options or
- * possibly command-line options would need to be added.
- *
- * Also, to support speeds below 2400 (why?) the lower 2 bits of
- * the SCSMR register would also need to be set to non-zero values.
- *
- * -- Greg Banks 27Feb2000
- *
- * Answer: The SCBRR register is only eight bits, and the value in
- * it gets larger with lower baud rates. At around 2400 (depending on
- * the peripherial module clock) you run out of bits. However the
- * lower two bits of SCSMR allow the module clock to be divided down,
- * scaling the value which is needed in SCBRR.
- *
- * -- Stuart Menefy - 23 May 2000
- *
- * I meant, why would anyone bother with bitrates below 2400.
- *
- * -- Greg Banks - 7Jul2000
- *
- * You "speedist"!  How will I use my 110bps ASR-33 teletype with paper
- * tape reader as a console!
- *
- * -- Mitch Davis - 15 Jul 2000
- */
-
-#define PCLK           (current_cpu_data.module_clock)
-
-#if !defined(__H8300H__) && !defined(__H8300S__)
-#define SCBRR_VALUE(bps) ((PCLK+16*bps)/(32*bps)-1)
-#else
-#define SCBRR_VALUE(bps) (((CONFIG_CPU_CLOCK*1000/32)/bps)-1)
-#endif
-#define BPS_2400       SCBRR_VALUE(2400)
-#define BPS_4800       SCBRR_VALUE(4800)
-#define BPS_9600       SCBRR_VALUE(9600)
-#define BPS_19200      SCBRR_VALUE(19200)
-#define BPS_38400      SCBRR_VALUE(38400)
-#define BPS_57600      SCBRR_VALUE(57600)
-#define BPS_115200     SCBRR_VALUE(115200)
-#define BPS_230400     SCBRR_VALUE(230400)
-
diff -Nru a/drivers/char/sysrq.c b/drivers/char/sysrq.c
--- a/drivers/char/sysrq.c	Sun May 16 01:18:36 2004
+++ b/drivers/char/sysrq.c	Sun May 16 01:18:36 2004
@@ -313,36 +313,18 @@
 }
 
 /*
- * This function is called by the keyboard handler when SysRq is pressed
- * and any other keycode arrives.
- */
-
-void handle_sysrq(int key, struct pt_regs *pt_regs, struct tty_struct *tty)
-{
-	if (!sysrq_enabled)
-		return;
-
-	__sysrq_lock_table();
-	__handle_sysrq_nolock(key, pt_regs, tty);
-	__sysrq_unlock_table();
-}
-
-/*
  * This is the non-locking version of handle_sysrq
  * It must/can only be called by sysrq key handlers,
  * as they are inside of the lock
  */
 
-void __handle_sysrq_nolock(int key, struct pt_regs *pt_regs,
-		  	   struct tty_struct *tty) 
+void __handle_sysrq(int key, struct pt_regs *pt_regs, struct tty_struct *tty)
 {
 	struct sysrq_key_op *op_p;
 	int orig_log_level;
 	int i, j;
-	
-	if (!sysrq_enabled)
-		return;
 
+	__sysrq_lock_table();
 	orig_log_level = console_loglevel;
 	console_loglevel = 7;
 	printk(KERN_INFO "SysRq : ");
@@ -364,10 +346,22 @@
 		printk ("\n");
 		console_loglevel = orig_log_level;
 	}
+	__sysrq_unlock_table();
+}
+
+/*
+ * This function is called by the keyboard handler when SysRq is pressed
+ * and any other keycode arrives.
+ */
+
+void handle_sysrq(int key, struct pt_regs *pt_regs, struct tty_struct *tty)
+{
+	if (!sysrq_enabled)
+		return;
+	__handle_sysrq(key, pt_regs, tty);
 }
 
 EXPORT_SYMBOL(handle_sysrq);
-EXPORT_SYMBOL(__handle_sysrq_nolock);
 EXPORT_SYMBOL(__sysrq_lock_table);
 EXPORT_SYMBOL(__sysrq_unlock_table);
 EXPORT_SYMBOL(__sysrq_get_key_op);
diff -Nru a/drivers/char/tipar.c b/drivers/char/tipar.c
--- a/drivers/char/tipar.c	Sun May 16 01:18:36 2004
+++ b/drivers/char/tipar.c	Sun May 16 01:18:36 2004
@@ -58,6 +58,7 @@
 #include <asm/bitops.h>
 #include <linux/devfs_fs_kernel.h>	/* DevFs support */
 #include <linux/parport.h>	/* Our code depend on parport */
+#include <linux/device.h>
 
 /*
  * TI definitions
@@ -92,6 +93,8 @@
 static unsigned int tp_count;	/* tipar count */
 static unsigned long opened;	/* opened devices */
 
+static struct class_simple *tipar_class;
+
 /* --- macros for parport access -------------------------------------- */
 
 #define r_dtr(x)        (parport_read_data(table[(x)].dev->port))
@@ -424,18 +427,26 @@
 static int
 tipar_register(int nr, struct parport *port)
 {
+	int err = 0;
+
 	/* Register our module into parport */
 	table[nr].dev = parport_register_device(port, "tipar",
 						NULL, NULL, NULL, 0,
 						(void *) &table[nr]);
 
-	if (table[nr].dev == NULL)
-		return 1;
+	if (table[nr].dev == NULL) {
+		err = 1;
+		goto out;
+	}
 
+	class_simple_device_add(tipar_class, MKDEV(TIPAR_MAJOR, TIPAR_MINOR + nr),
+			NULL, "par%d", nr);
 	/* Use devfs, tree: /dev/ticables/par/[0..2] */
-	devfs_mk_cdev(MKDEV(TIPAR_MAJOR, TIPAR_MINOR + nr),
+	err = devfs_mk_cdev(MKDEV(TIPAR_MAJOR, TIPAR_MINOR + nr),
 			S_IFCHR | S_IRUGO | S_IWUGO,
 			"ticables/par/%d", nr);
+	if (err)
+		goto out_class;
 
 	/* Display informations */
 	printk(KERN_INFO "tipar%d: using %s (%s).\n", nr, port->name,
@@ -447,7 +458,14 @@
 	else
 		printk("tipar%d: link cable not found.\n", nr);
 
-	return 0;
+	err = 0;
+	goto out;
+
+out_class:
+	class_simple_device_remove(MKDEV(TIPAR_MAJOR, TIPAR_MINOR + nr));
+	class_simple_destroy(tipar_class);
+out:
+	return err;
 }
 
 static void
@@ -477,23 +495,38 @@
 int __init
 tipar_init_module(void)
 {
+	int err = 0;
+
 	printk("tipar: parallel link cable driver, version %s\n",
 	       DRIVER_VERSION);
 
 	if (register_chrdev(TIPAR_MAJOR, "tipar", &tipar_fops)) {
 		printk("tipar: unable to get major %d\n", TIPAR_MAJOR);
-		return -EIO;
+		err = -EIO;
+		goto out;
 	}
 
 	/* Use devfs with tree: /dev/ticables/par/[0..2] */
 	devfs_mk_dir("ticables/par");
 
+	tipar_class = class_simple_create(THIS_MODULE, "ticables");
+	if (IS_ERR(tipar_class)) {
+		err = PTR_ERR(tipar_class);
+		goto out_chrdev;
+	}
 	if (parport_register_driver(&tipar_driver)) {
 		printk("tipar: unable to register with parport\n");
-		return -EIO;
+		err = -EIO;
+		goto out;
 	}
 
-	return 0;
+	err = 0;
+	goto out;
+
+out_chrdev:
+	unregister_chrdev(TIPAR_MAJOR, "tipar");
+out:
+	return err;	
 }
 
 void __exit
@@ -510,8 +543,10 @@
 		if (table[i].dev == NULL)
 			continue;
 		parport_unregister_device(table[i].dev);
+		class_simple_device_remove(MKDEV(TIPAR_MAJOR, i));
 		devfs_remove("ticables/par/%d", i);
 	}
+	class_simple_destroy(tipar_class);
 	devfs_remove("ticables/par");
 
 	printk("tipar: module unloaded !\n");
diff -Nru a/drivers/char/tty_io.c b/drivers/char/tty_io.c
--- a/drivers/char/tty_io.c	Sun May 16 01:18:35 2004
+++ b/drivers/char/tty_io.c	Sun May 16 01:18:35 2004
@@ -1267,6 +1267,18 @@
 #endif
 
 	/*
+	 * Prevent flush_to_ldisc() from rescheduling the work for later.  Then
+	 * kill any delayed work.
+	 */
+	clear_bit(TTY_DONT_FLIP, &tty->flags);
+	cancel_delayed_work(&tty->flip.work);
+
+	/*
+	 * Wait for ->hangup_work and ->flip.work handlers to terminate
+	 */
+	flush_scheduled_work();
+
+	/*
 	 * Shutdown the current line discipline, and reset it to N_TTY.
 	 * N.B. why reset ldisc when we're releasing the memory??
 	 */
@@ -1282,18 +1294,6 @@
 		module_put(o_tty->ldisc.owner);
 		o_tty->ldisc = ldiscs[N_TTY];
 	}
-	
-	/*
-	 * Prevent flush_to_ldisc() from rescheduling the work for later.  Then
-	 * kill any delayed work.
-	 */
-	clear_bit(TTY_DONT_FLIP, &tty->flags);
-	cancel_delayed_work(&tty->flip.work);
-
-	/*
-	 * Wait for ->hangup_work and ->flip.work handlers to terminate
-	 */
-	flush_scheduled_work();
 
 	/* 
 	 * The release_mem function takes care of the details of clearing
diff -Nru a/drivers/char/vt.c b/drivers/char/vt.c
--- a/drivers/char/vt.c	Sun May 16 01:18:36 2004
+++ b/drivers/char/vt.c	Sun May 16 01:18:36 2004
@@ -661,11 +661,14 @@
 static void visual_init(int currcons, int init)
 {
     /* ++Geert: sw->con_init determines console size */
+    if (sw)
+	module_put(sw->owner);
     sw = conswitchp;
 #ifndef VT_SINGLE_DRIVER
     if (con_driver_map[currcons])
 	sw = con_driver_map[currcons];
 #endif
+    __module_get(sw->owner);
     cons_num = currcons;
     display_fg = &master_display_fg;
     vc_cons[currcons].d->vc_uni_pagedir_loc = &vc_cons[currcons].d->vc_uni_pagedir;
@@ -2668,25 +2671,38 @@
  *	and become default driver for newly opened ones.
  */
 
-void take_over_console(const struct consw *csw, int first, int last, int deflt)
+int take_over_console(const struct consw *csw, int first, int last, int deflt)
 {
 	int i, j = -1;
 	const char *desc;
+	struct module *owner;
+
+	owner = csw->owner;
+	if (!try_module_get(owner))
+		return -ENODEV;
 
 	acquire_console_sem();
 
 	desc = csw->con_startup();
 	if (!desc) {
 		release_console_sem();
-		return;
+		module_put(owner);
+		return -ENODEV;
 	}
-	if (deflt)
+	if (deflt) {
+		if (conswitchp)
+			module_put(conswitchp->owner);
+		__module_get(owner);
 		conswitchp = csw;
+	}
 
 	for (i = first; i <= last; i++) {
 		int old_was_color;
 		int currcons = i;
 
+		if (con_driver_map[i])
+			module_put(con_driver_map[i]->owner);
+		__module_get(owner);
 		con_driver_map[i] = csw;
 
 		if (!vc_cons[i].d || !vc_cons[i].d->vc_sw)
@@ -2721,6 +2737,9 @@
 		printk("to %s\n", desc);
 
 	release_console_sem();
+
+	module_put(owner);
+	return 0;
 }
 
 void give_up_console(const struct consw *csw)
@@ -2728,8 +2747,10 @@
 	int i;
 
 	for(i = 0; i < MAX_NR_CONSOLES; i++)
-		if (con_driver_map[i] == csw)
+		if (con_driver_map[i] == csw) {
+			module_put(csw->owner);
 			con_driver_map[i] = NULL;
+		}
 }
 
 #endif
diff -Nru a/drivers/char/watchdog/Kconfig b/drivers/char/watchdog/Kconfig
--- a/drivers/char/watchdog/Kconfig	Sun May 16 01:18:35 2004
+++ b/drivers/char/watchdog/Kconfig	Sun May 16 01:18:35 2004
@@ -84,6 +84,17 @@
 
 	  Not sure? It's safe to say N.
 
+config IXP4XX_WATCHDOG
+	tristate "IXP4xx Watchdog"
+	depends on WATCHDOG && ARCH_IXP4XX
+	help
+	  Say Y here if to include support for the watchdog timer
+	  in the Intel IXP4xx network processors. This driver can
+	  be built as a module by choosing M. The module will
+	  be called ixp4xx_wdt.
+
+	  Say N if you are unsure.
+
 config SA1100_WATCHDOG
 	tristate "SA1100 watchdog"
 	depends on WATCHDOG && ARCH_SA1100
diff -Nru a/drivers/char/watchdog/Makefile b/drivers/char/watchdog/Makefile
--- a/drivers/char/watchdog/Makefile	Sun May 16 01:18:36 2004
+++ b/drivers/char/watchdog/Makefile	Sun May 16 01:18:36 2004
@@ -35,3 +35,4 @@
 obj-$(CONFIG_INDYDOG) += indydog.o
 obj-$(CONFIG_PCIPCWATCHDOG) += pcwd_pci.o
 obj-$(CONFIG_USBPCWATCHDOG) += pcwd_usb.o
+obj-$(CONFIG_IXP4XX_WATCHDOG) += ixp4xx_wdt.o
diff -Nru a/drivers/char/watchdog/ib700wdt.c b/drivers/char/watchdog/ib700wdt.c
--- a/drivers/char/watchdog/ib700wdt.c	Sun May 16 01:18:36 2004
+++ b/drivers/char/watchdog/ib700wdt.c	Sun May 16 01:18:36 2004
@@ -135,7 +135,7 @@
 ibwdt_ping(void)
 {
 	/* Write a watchdog value */
-	outb_p(wd_times[wd_margin], WDT_START);
+	outb_p(wd_margin, WDT_START);
 }
 
 static ssize_t
@@ -234,7 +234,7 @@
 {
 	spin_lock(&ibwdt_lock);
 	if (expect_close == 42)
-		outb_p(wd_times[wd_margin], WDT_STOP);
+		outb_p(0, WDT_STOP);
 	else
 		printk(KERN_CRIT PFX "WDT device closed unexpectedly.  WDT will not stop!\n");
 
@@ -254,7 +254,7 @@
 {
 	if (code == SYS_DOWN || code == SYS_HALT) {
 		/* Turn the WDT off */
-		outb_p(wd_times[wd_margin], WDT_STOP);
+		outb_p(0, WDT_STOP);
 	}
 	return NOTIFY_DONE;
 }
diff -Nru a/drivers/char/watchdog/ixp4xx_wdt.c b/drivers/char/watchdog/ixp4xx_wdt.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/drivers/char/watchdog/ixp4xx_wdt.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,233 @@
+/*
+ * drivers/watchdog/ixp4xx_wdt.c
+ *
+ * Watchdog driver for Intel IXP4xx network processors
+ *
+ * Author: Deepak Saxena <dsaxena@plexity.net>
+ *
+ * Copyright 2004 (c) MontaVista, Software, Inc.
+ * Based on sa1100 driver, Copyright (C) 2000 Oleg Drokin <green@crimea.edu>
+ *
+ * This file is licensed under  the terms of the GNU General Public
+ * License version 2. This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#include <linux/config.h>
+#include <linux/module.h>
+#include <linux/moduleparam.h>
+#include <linux/types.h>
+#include <linux/kernel.h>
+#include <linux/fs.h>
+#include <linux/miscdevice.h>
+#include <linux/watchdog.h>
+#include <linux/init.h>
+
+#include <asm/hardware.h>
+#include <asm/bitops.h>
+#include <asm/uaccess.h>
+
+#ifdef CONFIG_WATCHDOG_NOWAYOUT
+static int nowayout = 1;
+#else
+static int nowayout = 0;
+#endif
+static int heartbeat = 60;	/* (secs) Default is 1 minute */
+static unsigned long wdt_status;
+static unsigned long boot_status;
+
+#define WDT_TICK_RATE (IXP4XX_PERIPHERAL_BUS_CLOCK * 1000000UL)
+
+#define	WDT_IN_USE		0
+#define	WDT_OK_TO_CLOSE		1
+
+static void
+wdt_enable(void)
+{
+	*IXP4XX_OSWK = IXP4XX_WDT_KEY;
+	*IXP4XX_OSWE = 0;
+	*IXP4XX_OSWT = WDT_TICK_RATE * heartbeat;
+	*IXP4XX_OSWE = IXP4XX_WDT_COUNT_ENABLE | IXP4XX_WDT_RESET_ENABLE;
+	*IXP4XX_OSWK = 0;
+}
+
+static void
+wdt_disable(void)
+{
+	*IXP4XX_OSWK = IXP4XX_WDT_KEY;
+	*IXP4XX_OSWE = 0;
+	*IXP4XX_OSWK = 0;
+}
+
+static int
+ixp4xx_wdt_open(struct inode *inode, struct file *file)
+{
+	if (test_and_set_bit(WDT_IN_USE, &wdt_status))
+		return -EBUSY;
+
+	clear_bit(WDT_OK_TO_CLOSE, &wdt_status);
+
+	wdt_enable();
+
+	return 0;
+}
+
+static ssize_t
+ixp4xx_wdt_write(struct file *file, const char *data, size_t len, loff_t *ppos)
+{
+	/* Can't seek (pwrite) on this device  */
+	if (ppos != &file->f_pos)
+		return -ESPIPE;
+
+	if (len) {
+		if (!nowayout) {
+			size_t i;
+
+			clear_bit(WDT_OK_TO_CLOSE, &wdt_status);
+
+			for (i = 0; i != len; i++) {
+				char c;
+
+				if (get_user(c, data + i))
+					return -EFAULT;
+				if (c == 'V')
+					set_bit(WDT_OK_TO_CLOSE, &wdt_status);
+			}
+		}
+		wdt_enable();
+	}
+
+	return len;
+}
+
+static struct watchdog_info ident = {
+	.options	= WDIOF_CARDRESET | WDIOF_MAGICCLOSE |
+			  WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING,
+	.identity	= "IXP4xx Watchdog",
+};
+
+
+static int
+ixp4xx_wdt_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
+			unsigned long arg)
+{
+	int ret = -ENOIOCTLCMD;
+	int time;
+
+	switch (cmd) {
+	case WDIOC_GETSUPPORT:
+		ret = copy_to_user((struct watchdog_info *)arg, &ident,
+				   sizeof(ident)) ? -EFAULT : 0;
+		break;
+
+	case WDIOC_GETSTATUS:
+		ret = put_user(0, (int *)arg);
+		break;
+
+	case WDIOC_GETBOOTSTATUS:
+		ret = put_user(boot_status, (int *)arg);
+		break;
+
+	case WDIOC_SETTIMEOUT:
+		ret = get_user(time, (int *)arg);
+		if (ret)
+			break;
+
+		if (time <= 0 || time > 60) {
+			ret = -EINVAL;
+			break;
+		}
+
+		heartbeat = time;
+		wdt_enable();
+		/* Fall through */
+
+	case WDIOC_GETTIMEOUT:
+		ret = put_user(heartbeat, (int *)arg);
+		break;
+
+	case WDIOC_KEEPALIVE:
+		wdt_enable();
+		ret = 0;
+		break;
+	}
+	return ret;
+}
+
+static int
+ixp4xx_wdt_release(struct inode *inode, struct file *file)
+{
+	if (test_bit(WDT_OK_TO_CLOSE, &wdt_status)) {
+		wdt_disable();
+	} else {
+		printk(KERN_CRIT "WATCHDOG: Device closed unexpectdly - "
+					"timer will not stop\n");
+	}
+
+	clear_bit(WDT_IN_USE, &wdt_status);
+	clear_bit(WDT_OK_TO_CLOSE, &wdt_status);
+
+	return 0;
+}
+
+
+static struct file_operations ixp4xx_wdt_fops =
+{
+	.owner		= THIS_MODULE,
+	.write		= ixp4xx_wdt_write,
+	.ioctl		= ixp4xx_wdt_ioctl,
+	.open		= ixp4xx_wdt_open,
+	.release	= ixp4xx_wdt_release,
+};
+
+static struct miscdevice ixp4xx_wdt_miscdev =
+{
+	.minor		= WATCHDOG_MINOR,
+	.name		= "IXP4xx Watchdog",
+	.fops		= &ixp4xx_wdt_fops,
+};
+
+static int __init ixp4xx_wdt_init(void)
+{
+	int ret;
+	unsigned long processor_id;
+
+	asm("mrc p15, 0, %0, cr0, cr0, 0;" : "=r"(processor_id) :);
+	if (!(processor_id & 0xf)) {
+		printk("IXP4XXX Watchdog: Rev. A0 CPU detected - "
+			"watchdog disabled\n");
+
+		return -ENODEV;
+	}
+
+	ret = misc_register(&ixp4xx_wdt_miscdev);
+	if (ret == 0)
+		printk("IXP4xx Watchdog Timer: heartbeat %d sec\n", heartbeat);
+
+	boot_status = (*IXP4XX_OSST & IXP4XX_OSST_TIMER_WARM_RESET) ?
+			WDIOF_CARDRESET : 0;
+
+	return ret;
+}
+
+static void __exit ixp4xx_wdt_exit(void)
+{
+	misc_deregister(&ixp4xx_wdt_miscdev);
+}
+
+
+module_init(ixp4xx_wdt_init);
+module_exit(ixp4xx_wdt_exit);
+
+MODULE_AUTHOR("Deepak Saxena <dsaxena@plexity.net">);
+MODULE_DESCRIPTION("IXP4xx Network Processor Watchdog");
+
+module_param(heartbeat, int, 0);
+MODULE_PARM_DESC(heartbeat, "Watchdog heartbeat in seconds (default 60s)");
+
+module_param(nowayout, int, 0);
+MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started");
+
+MODULE_LICENSE("GPL");
+MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR);
+
diff -Nru a/drivers/char/watchdog/shwdt.c b/drivers/char/watchdog/shwdt.c
--- a/drivers/char/watchdog/shwdt.c	Sun May 16 01:18:34 2004
+++ b/drivers/char/watchdog/shwdt.c	Sun May 16 01:18:34 2004
@@ -64,7 +64,6 @@
  */
 static int clock_division_ratio = WTCSR_CKS_4096;
 
-#define msecs_to_jiffies(msecs)	(jiffies + (HZ * msecs + 9999) / 10000)
 #define next_ping_period(cks)	msecs_to_jiffies(cks - 4)
 
 static unsigned long shwdt_is_open;
diff -Nru a/drivers/firmware/Kconfig b/drivers/firmware/Kconfig
--- a/drivers/firmware/Kconfig	Sun May 16 01:18:33 2004
+++ b/drivers/firmware/Kconfig	Sun May 16 01:18:33 2004
@@ -12,7 +12,7 @@
 	help
 	  Say Y or M here if you want to enable BIOS Enhanced Disk Drive
 	  Services real mode BIOS calls to determine which disk
-	  BIOS tries boot from.  This information is then exported via driverfs.
+	  BIOS tries boot from.  This information is then exported via sysfs.
 
 	  This option is experimental, but believed to be safe,
 	  and most disk controller BIOS vendors do not yet implement this feature.
@@ -33,5 +33,13 @@
 
 	  Subsequent efibootmgr releases may be found at:
 	  http://linux.dell.com/efibootmgr
+
+config SMBIOS
+	tristate "BIOS SMBIOS table access driver."
+	help
+	  Say Y or M here if you want to enable access to the SMBIOS table
+	  via driverfs. It exposes /sys/firmware/smbios/ subdirectory tree
+	  containing a binary dump of the SMBIOS table header as well as the SMBIOS
+	  table.
 
 endmenu
diff -Nru a/drivers/firmware/Makefile b/drivers/firmware/Makefile
--- a/drivers/firmware/Makefile	Sun May 16 01:18:36 2004
+++ b/drivers/firmware/Makefile	Sun May 16 01:18:36 2004
@@ -3,3 +3,4 @@
 #
 obj-$(CONFIG_EDD)             	+= edd.o
 obj-$(CONFIG_EFI_VARS)		+= efivars.o
+obj-$(CONFIG_SMBIOS)            += smbios.o
diff -Nru a/drivers/firmware/edd.c b/drivers/firmware/edd.c
--- a/drivers/firmware/edd.c	Sun May 16 01:18:34 2004
+++ b/drivers/firmware/edd.c	Sun May 16 01:18:34 2004
@@ -15,9 +15,8 @@
  * made in setup.S, copied to safe structures in setup.c,
  * and presents it in sysfs.
  *
- * Please see http://domsch.com/linux/edd30/results.html for
+ * Please see http://linux.dell.com/edd30/results.html for
  * the list of BIOSs which have been reported to implement EDD.
- * If you don't see yours listed, please send a report as described there.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License v2.0 as published by
@@ -30,15 +29,6 @@
  *
  */
 
-/*
- * Known issues:
- * - refcounting of struct device objects could be improved.
- *
- * TODO:
- * - Add IDE and USB disk device support
- * - move edd.[ch] to better locations if/when one is decided
- */
-
 #include <linux/module.h>
 #include <linux/string.h>
 #include <linux/types.h>
@@ -57,13 +47,13 @@
 #include <../drivers/scsi/scsi.h>
 #include <../drivers/scsi/hosts.h>
 
+#define EDD_VERSION "0.14"
+#define EDD_DATE    "2004-Apr-28"
+
 MODULE_AUTHOR("Matt Domsch <Matt_Domsch@Dell.com>");
 MODULE_DESCRIPTION("sysfs interface to BIOS EDD information");
 MODULE_LICENSE("GPL");
-
-#define EDD_VERSION "0.13 2004-Mar-09"
-#define EDD_DEVICE_NAME_SIZE 16
-#define REPORT_URL "http://linux.dell.com/edd/results.html"
+MODULE_VERSION(EDD_VERSION);
 
 #define left (PAGE_SIZE - (p - buf) - 1)
 
@@ -690,103 +680,6 @@
 	return sysfs_create_link(&edev->kobj,&pci_dev->dev.kobj,"pci_dev");
 }
 
-/*
- * FIXME - as of 15-Jan-2003, there are some non-"scsi_device"s on the
- * scsi_bus list.  The following functions could possibly mis-access
- * memory in that case.  This is actually a problem with the SCSI
- * layer, which is being addressed there.  Until then, don't use the
- * SCSI functions.
- */
-
-#undef CONFIG_SCSI
-#undef CONFIG_SCSI_MODULE
-#if defined(CONFIG_SCSI) || defined(CONFIG_SCSI_MODULE)
-
-struct edd_match_data {
-	struct edd_device	* edev;
-	struct scsi_device	* sd;
-};
-
-/**
- * edd_match_scsidev()
- * @edev - EDD device is a known SCSI device
- * @sd - scsi_device with host who's parent is a PCI controller
- *
- * returns 1 if a match is found, 0 if not.
- */
-static int edd_match_scsidev(struct device * dev, void * d)
-{
-	struct edd_match_data * data = (struct edd_match_data *)d;
-	struct edd_info *info = edd_dev_get_info(data->edev);
-	struct scsi_device * sd = to_scsi_device(dev);
-
-	if (info) {
-		if ((sd->channel == info->params.interface_path.pci.channel) &&
-		    (sd->id == info->params.device_path.scsi.id) &&
-		    (sd->lun == info->params.device_path.scsi.lun)) {
-			data->sd = sd;
-			return 1;
-		}
-	}
-	return 0;
-}
-
-/**
- * edd_find_matching_device()
- * @edev - edd_device to match
- *
- * Search the SCSI devices for a drive that matches the EDD
- * device descriptor we have. If we find a match, return it,
- * otherwise, return NULL.
- */
-
-static struct scsi_device *
-edd_find_matching_scsi_device(struct edd_device *edev)
-{
-	struct edd_match_data data;
-	struct bus_type * scsi_bus = find_bus("scsi");
-
-	if (!scsi_bus) {
-		return NULL;
-	}
-
-	data.edev = edev;
-
-	if (edd_dev_is_type(edev, "SCSI")) {
-		if (bus_for_each_dev(scsi_bus,NULL,&data,edd_match_scsidev))
-			return data.sd;
-	}
-	return NULL;
-}
-
-static int
-edd_create_symlink_to_scsidev(struct edd_device *edev)
-{
-	struct pci_dev *pci_dev;
-	int rc = -EINVAL;
-
-	pci_dev = edd_get_pci_dev(edev);
-	if (pci_dev) {
-		struct scsi_device * sdev = edd_find_matching_scsi_device(edev);
-		if (sdev && get_device(&sdev->sdev_driverfs_dev)) {
-			rc = sysfs_create_link(&edev->kobj,
-					       &sdev->sdev_driverfs_dev.kobj,
-					       "disc");
-			put_device(&sdev->sdev_driverfs_dev);
-		}
-	}
-	return rc;
-}
-
-#else
-static int
-edd_create_symlink_to_scsidev(struct edd_device *edev)
-{
-	return -ENOSYS;
-}
-#endif
-
-
 static inline void
 edd_device_unregister(struct edd_device *edev)
 {
@@ -807,7 +700,6 @@
 
 	if (!error) {
 		edd_create_symlink_to_pcidev(edev);
-		edd_create_symlink_to_scsidev(edev);
 	}
 }
 
@@ -820,8 +712,8 @@
 		return 1;
 	memset(edev, 0, sizeof (*edev));
 	edd_dev_set_info(edev, &edd[i]);
-	snprintf(edev->kobj.name, EDD_DEVICE_NAME_SIZE, "int13_dev%02x",
-		 edd[i].device);
+	kobject_set_name(&edev->kobj, "int13_dev%02x",
+			 edd[i].device);
 	kobj_set_kset_s(edev,edd_subsys);
 	error = kobject_register(&edev->kobj);
 	if (!error)
@@ -842,9 +734,8 @@
 	int rc=0;
 	struct edd_device *edev;
 
-	printk(KERN_INFO "BIOS EDD facility v%s, %d devices found\n",
-	       EDD_VERSION, eddnr);
-	printk(KERN_INFO "Please report your BIOS at %s\n", REPORT_URL);
+	printk(KERN_INFO "BIOS EDD facility v%s %s, %d devices found\n",
+	       EDD_VERSION, EDD_DATE, eddnr);
 
 	if (!eddnr) {
 		printk(KERN_INFO "EDD information not available.\n");
diff -Nru a/drivers/firmware/efivars.c b/drivers/firmware/efivars.c
--- a/drivers/firmware/efivars.c	Sun May 16 01:18:36 2004
+++ b/drivers/firmware/efivars.c	Sun May 16 01:18:36 2004
@@ -664,6 +664,9 @@
 	unsigned long variable_name_size = 1024;
 	int i, rc = 0, error = 0;
 
+	if (!efi_enabled)
+		return -ENODEV;
+
 	printk(KERN_INFO "EFI Variables Facility v%s\n", EFIVARS_VERSION);
 
 	/*
@@ -732,6 +735,9 @@
 efivars_exit(void)
 {
 	struct list_head *pos, *n;
+
+	if (!efi_enabled)
+		return;
 
 	list_for_each_safe(pos, n, &efivar_list)
 		efivar_unregister(get_efivar_entry(pos));
diff -Nru a/drivers/firmware/smbios.c b/drivers/firmware/smbios.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/drivers/firmware/smbios.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,248 @@
+/*
+ * linux/drivers/firmware/smbios.c
+ *  Copyright (C) 2004 Dell Inc.
+ *  by Michael Brown <Michael_E_Brown@dell.com>
+ *  vim:noet:ts=8:sw=8:filetype=c:textwidth=80:
+ *
+ * BIOS SMBIOS Table access
+ * conformant to DMTF SMBIOS definition
+ *   at http://www.dmtf.org/standards/smbios
+ *
+ * This code takes information provided by SMBIOS tables
+ * and presents it in sysfs as:
+ *    /sys/firmware/smbios
+ *			|--> /table_entry_point
+ *			|--> /table
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License v2.0 as published by
+ * the Free Software Foundation
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+
+
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/device.h>
+#include <asm/io.h>
+#include <asm/uaccess.h>
+#include "smbios.h"
+
+MODULE_AUTHOR("Michael Brown <Michael_E_Brown@Dell.com>");
+MODULE_DESCRIPTION("sysfs interface to SMBIOS information");
+MODULE_LICENSE("GPL");
+
+#define SMBIOS_VERSION "1.0 2004-04-19"
+
+struct smbios_device {
+	struct smbios_table_entry_point table_eps;
+	unsigned int smbios_table_real_length;
+};
+
+/* there shall be only one */
+static struct smbios_device the_smbios_device;
+
+#define to_smbios_device(obj) container_of(obj,struct smbios_device,kobj)
+
+/* don't currently have any "normal" attributes, so we don't need a way to
+ * show them. */
+static struct sysfs_ops smbios_attr_ops = { };
+
+static __init int
+checksum_eps(struct smbios_table_entry_point *table_eps)
+{
+	u8 *p = (u8 *)table_eps;
+	u8 checksum = 0;
+	int i=0;
+	for (i=0; i < table_eps->eps_length && i < sizeof(*table_eps); ++i) {
+		checksum += p[i];
+	}
+	return( checksum == 0 );
+}
+
+static __init int
+find_table_entry_point(struct smbios_device *sdev)
+{
+	struct smbios_table_entry_point *table_eps = &(sdev->table_eps);
+	u32 fp = 0xF0000;
+	while (fp < 0xFFFFF) {
+		isa_memcpy_fromio(table_eps, fp, sizeof(*table_eps));
+		if (memcmp(table_eps->anchor, "_SM_", 4)==0 &&
+					checksum_eps(table_eps)) {
+			return 0;
+		}
+		fp += 16;
+	}
+
+	printk(KERN_INFO "SMBIOS table entry point not found in "
+			"0xF0000 - 0xFFFFF\n");
+	return -ENODEV;
+}
+
+static __init int
+find_table_max_address(struct smbios_device *sdev)
+{
+	/* break out on one of three conditions:
+	 *   -- hit table_eps.table_length
+	 *   -- hit number of items that table claims we have
+	 *   -- hit structure type 127
+	 */
+
+	u8 *buf = ioremap(sdev->table_eps.table_address,
+			sdev->table_eps.table_length);
+	u8 *ptr = buf;
+	int count = 0, keep_going = 1;
+	int max_count = sdev->table_eps.table_num_structs;
+	int max_length = sdev->table_eps.table_length;
+	while(keep_going && ((ptr - buf) <= max_length) && count < max_count){
+		if( ptr[0] == 0x7F )   /* ptr[0] is type */
+			keep_going = 0;
+
+		ptr += ptr[1]; /* ptr[1] is length, skip structure */
+		/* skip strings at end of structure */
+		while((ptr-buf) < max_length && (ptr[0] || ptr[1]))
+			++ptr;
+
+		/* string area ends in double-null. skip it. */
+		ptr += 2;
+		++count;
+	}
+	sdev->smbios_table_real_length = (ptr - buf);
+	iounmap(buf);
+
+	if( count != max_count )
+		printk(KERN_INFO "Warning: SMBIOS table structure count"
+				" does not match count specified in the"
+				" table entry point.\n"
+				" Table entry point count: %d\n"
+				" Actual count: %d\n",
+				max_count, count );
+
+	if(keep_going != 0)
+		printk(KERN_INFO "Warning: SMBIOS table does not end with a"
+				" structure type 127. This may indicate a"
+				" truncated table.");
+
+	if(sdev->smbios_table_real_length != max_length)
+		printk(KERN_INFO "Warning: BIOS specified SMBIOS table length"
+				" does not match calculated length.\n"
+				" BIOS specified: %d\n"
+				" calculated length: %d\n",
+				max_length, sdev->smbios_table_real_length);
+
+	return sdev->smbios_table_real_length;
+}
+
+static ssize_t
+smbios_read_table_entry_point(struct kobject *kobj, char *buffer,
+				loff_t pos, size_t size)
+{
+	struct smbios_device *sdev = &the_smbios_device;
+	const char *p = (const char *)&(sdev->table_eps);
+	unsigned int count =
+		size > sizeof(sdev->table_eps) ?
+			sizeof(sdev->table_eps) : size;
+	memcpy( buffer, p, count );
+	return count;
+}
+
+static ssize_t
+smbios_read_table(struct kobject *kobj, char *buffer,
+				loff_t pos, size_t size)
+{
+	struct smbios_device *sdev = &the_smbios_device;
+	u8 *buf;
+	unsigned int count = sdev->smbios_table_real_length - pos;
+	int i = 0;
+	count = count < size ? count : size;
+
+	if (pos > sdev->smbios_table_real_length)
+		return 0;
+
+	buf = ioremap(sdev->table_eps.table_address, sdev->smbios_table_real_length);
+	if (buf == NULL)
+		return -ENXIO;
+
+	/* memcpy( buffer, buf+pos, count ); */
+	for (i = 0; i < count; ++i) {
+		buffer[i] = readb( buf+pos+i );
+	}
+
+	iounmap(buf);
+
+	return count;
+}
+
+static struct bin_attribute tep_attr = {
+	.attr = {.name = "table_entry_point", .owner = THIS_MODULE, .mode = 0444},
+	.size = sizeof(struct smbios_table_entry_point),
+	.read = smbios_read_table_entry_point,
+	/* not writeable */
+};
+
+static struct bin_attribute table_attr = {
+	.attr = { .name = "table", .owner = THIS_MODULE, .mode = 0444 },
+	/* size set later, we don't know it here. */
+	.read = smbios_read_table,
+	/* not writeable */
+};
+
+/* no default attributes yet. */
+static struct attribute * def_attrs[] = { NULL, };
+
+static struct kobj_type ktype_smbios = {
+	.sysfs_ops	= &smbios_attr_ops,
+	.default_attrs	= def_attrs,
+	/* statically allocated, no release method necessary */
+};
+
+static decl_subsys(smbios,&ktype_smbios,NULL);
+
+static void smbios_device_unregister(void)
+{
+	sysfs_remove_bin_file(&smbios_subsys.kset.kobj, &tep_attr );
+	sysfs_remove_bin_file(&smbios_subsys.kset.kobj, &table_attr );
+}
+
+static void __init smbios_device_register(void)
+{
+	sysfs_create_bin_file(&smbios_subsys.kset.kobj, &tep_attr );
+	sysfs_create_bin_file(&smbios_subsys.kset.kobj, &table_attr );
+}
+
+static int __init
+smbios_init(void)
+{
+	int rc=0;
+
+	printk(KERN_INFO "SMBIOS facility v%s\n", SMBIOS_VERSION );
+
+	rc = find_table_entry_point(&the_smbios_device);
+	if (rc)
+		return rc;
+
+	table_attr.size = find_table_max_address(&the_smbios_device);
+
+	rc = firmware_register(&smbios_subsys);
+	if (rc)
+		return rc;
+
+	smbios_device_register();
+
+	return rc;
+}
+
+static void __exit
+smbios_exit(void)
+{
+	smbios_device_unregister();
+	firmware_unregister(&smbios_subsys);
+}
+
+late_initcall(smbios_init);
+module_exit(smbios_exit);
diff -Nru a/drivers/firmware/smbios.h b/drivers/firmware/smbios.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/drivers/firmware/smbios.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,53 @@
+/*
+ * linux/drivers/firmware/smbios.c
+ *  Copyright (C) 2002, 2003, 2004 Dell Inc.
+ *  by Michael Brown <Michael_E_Brown@dell.com>
+ *  vim:noet:ts=8:sw=8:filetype=c:textwidth=80:
+ *
+ * BIOS SMBIOS Table access 
+ * conformant to DMTF SMBIOS definition
+ *   at http://www.dmtf.org/standards/smbios
+ *
+ * This code takes information provided by SMBIOS tables
+ * and presents it in sysfs.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License v2.0 as published by
+ * the Free Software Foundation
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#ifndef _LINUX_SMBIOS_H
+#define _LINUX_SMBIOS_H
+
+#include <linux/types.h>
+
+struct smbios_table_entry_point {
+	u8 anchor[4];
+	u8 checksum;
+	u8 eps_length;
+	u8 major_ver;
+	u8 minor_ver;
+	u16 max_struct_size;
+	u8 revision;
+	u8 formatted_area[5];
+	u8 dmi_anchor[5];
+	u8 intermediate_checksum;
+	u16 table_length;
+	u32 table_address;
+	u16 table_num_structs;
+	u8 smbios_bcd_revision;
+} __attribute__ ((packed));
+
+struct smbios_structure_header {
+	u8 type;
+	u8 length;
+	u16 handle;
+} __attribute__ ((packed));
+
+#endif				/* _LINUX_SMBIOS_H */
diff -Nru a/drivers/i2c/algos/i2c-algo-bit.c b/drivers/i2c/algos/i2c-algo-bit.c
--- a/drivers/i2c/algos/i2c-algo-bit.c	Sun May 16 01:18:35 2004
+++ b/drivers/i2c/algos/i2c-algo-bit.c	Sun May 16 01:18:35 2004
@@ -381,7 +381,13 @@
 			break;
 		}
 
-		if ( count > 1 ) {		/* send ack */
+		temp++;
+		count--;
+
+		if (msg->flags & I2C_M_NO_RD_ACK)
+			continue;
+
+		if ( count > 0 ) {		/* send ack */
 			sdalo(adap);
 			DEBPROTO(printk(" Am "));
 		} else {
@@ -395,8 +401,6 @@
 		};
 		scllo(adap);
 		sdahi(adap);
-		temp++;
-		count--;
 	}
 	return rdcount;
 }
diff -Nru a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig
--- a/drivers/i2c/busses/Kconfig	Sun May 16 01:18:36 2004
+++ b/drivers/i2c/busses/Kconfig	Sun May 16 01:18:36 2004
@@ -95,6 +95,8 @@
 	    82801CA/CAM
 	    82801DB
 	    82801EB
+	    6300ESB
+	    ICH6
 
 	  This driver can also be built as a module.  If so, the module
 	  will be called i2c-i801.
@@ -145,16 +147,16 @@
 	  This support is also available as a module.  If so, the module 
 	  will be called i2c-ite.
 
-config I2C_IXP42X
-	tristate "IXP42x GPIO-Based I2C Interface"
-	depends on I2C && ARCH_IXP425
+config I2C_IXP4XX
+	tristate "IXP4xx GPIO-Based I2C Interface"
+	depends on I2C && ARCH_IXP4XX
 	select I2C_ALGOBIT
 	help
-	  Say Y here if you have an Intel IXP42x(420,421,422,425) based 
+	  Say Y here if you have an Intel IXP4xx(420,421,422,425) based 
 	  system and are using GPIO lines for an I2C bus.
 
 	  This support is also available as a module. If so, the module
-	  will be called i2c-ixp42x.
+	  will be called i2c-ixp4xx.
 
 config I2C_KEYWEST
 	tristate "Powermac Keywest I2C interface"
diff -Nru a/drivers/i2c/busses/Makefile b/drivers/i2c/busses/Makefile
--- a/drivers/i2c/busses/Makefile	Sun May 16 01:18:33 2004
+++ b/drivers/i2c/busses/Makefile	Sun May 16 01:18:33 2004
@@ -15,7 +15,7 @@
 obj-$(CONFIG_I2C_IOP3XX)	+= i2c-iop3xx.o
 obj-$(CONFIG_I2C_ISA)		+= i2c-isa.o
 obj-$(CONFIG_I2C_ITE)		+= i2c-ite.o
-obj-$(CONFIG_I2C_IXP42X)	+= i2c-ixp42x.o
+obj-$(CONFIG_I2C_IXP4XX)	+= i2c-ixp4xx.o
 obj-$(CONFIG_I2C_KEYWEST)	+= i2c-keywest.o
 obj-$(CONFIG_I2C_NFORCE2)	+= i2c-nforce2.o
 obj-$(CONFIG_I2C_PARPORT)	+= i2c-parport.o
diff -Nru a/drivers/i2c/busses/i2c-ali1535.c b/drivers/i2c/busses/i2c-ali1535.c
--- a/drivers/i2c/busses/i2c-ali1535.c	Sun May 16 01:18:36 2004
+++ b/drivers/i2c/busses/i2c-ali1535.c	Sun May 16 01:18:36 2004
@@ -480,7 +480,7 @@
 
 static struct i2c_adapter ali1535_adapter = {
 	.owner		= THIS_MODULE,
-	.class          = I2C_ADAP_CLASS_SMBUS,
+	.class          = I2C_CLASS_HWMON,
 	.algo		= &smbus_algorithm,
 	.name		= "unset",
 };
diff -Nru a/drivers/i2c/busses/i2c-ali1563.c b/drivers/i2c/busses/i2c-ali1563.c
--- a/drivers/i2c/busses/i2c-ali1563.c	Sun May 16 01:18:35 2004
+++ b/drivers/i2c/busses/i2c-ali1563.c	Sun May 16 01:18:35 2004
@@ -357,7 +357,7 @@
 
 static struct i2c_adapter ali1563_adapter = {
 	.owner	= THIS_MODULE,
-	.class	= I2C_ADAP_CLASS_SMBUS,
+	.class	= I2C_CLASS_HWMON,
 	.algo	= &ali1563_algorithm,
 };
 
diff -Nru a/drivers/i2c/busses/i2c-ali15x3.c b/drivers/i2c/busses/i2c-ali15x3.c
--- a/drivers/i2c/busses/i2c-ali15x3.c	Sun May 16 01:18:35 2004
+++ b/drivers/i2c/busses/i2c-ali15x3.c	Sun May 16 01:18:35 2004
@@ -470,7 +470,7 @@
 
 static struct i2c_adapter ali15x3_adapter = {
 	.owner		= THIS_MODULE,
-	.class          = I2C_ADAP_CLASS_SMBUS,
+	.class          = I2C_CLASS_HWMON,
 	.algo		= &smbus_algorithm,
 	.name		= "unset",
 };
diff -Nru a/drivers/i2c/busses/i2c-amd756.c b/drivers/i2c/busses/i2c-amd756.c
--- a/drivers/i2c/busses/i2c-amd756.c	Sun May 16 01:18:36 2004
+++ b/drivers/i2c/busses/i2c-amd756.c	Sun May 16 01:18:36 2004
@@ -303,7 +303,7 @@
 
 static struct i2c_adapter amd756_adapter = {
 	.owner		= THIS_MODULE,
-	.class          = I2C_ADAP_CLASS_SMBUS,
+	.class          = I2C_CLASS_HWMON,
 	.algo		= &smbus_algorithm,
 	.name		= "unset",
 };
diff -Nru a/drivers/i2c/busses/i2c-amd8111.c b/drivers/i2c/busses/i2c-amd8111.c
--- a/drivers/i2c/busses/i2c-amd8111.c	Sun May 16 01:18:36 2004
+++ b/drivers/i2c/busses/i2c-amd8111.c	Sun May 16 01:18:36 2004
@@ -359,7 +359,7 @@
 	smbus->adapter.owner = THIS_MODULE;
 	snprintf(smbus->adapter.name, I2C_NAME_SIZE,
 		"SMBus2 AMD8111 adapter at %04x", smbus->base);
-	smbus->adapter.class = I2C_ADAP_CLASS_SMBUS;
+	smbus->adapter.class = I2C_CLASS_HWMON;
 	smbus->adapter.algo = &smbus_algorithm;
 	smbus->adapter.algo_data = smbus;
 
diff -Nru a/drivers/i2c/busses/i2c-i801.c b/drivers/i2c/busses/i2c-i801.c
--- a/drivers/i2c/busses/i2c-i801.c	Sun May 16 01:18:35 2004
+++ b/drivers/i2c/busses/i2c-i801.c	Sun May 16 01:18:35 2004
@@ -28,7 +28,8 @@
     82801CA/CAM		2483           
     82801DB		24C3   (HW PEC supported, 32 byte buffer not supported)
     82801EB		24D3   (HW PEC supported, 32 byte buffer not supported)
-
+    6300ESB		25A4
+    ICH6		266A
     This driver supports several versions of Intel's I/O Controller Hubs (ICH).
     For SMBus support, they are similar to the PIIX4 and are part
     of Intel's '810' and other chipsets.
@@ -121,7 +122,8 @@
 
 	I801_dev = dev;
 	if ((dev->device == PCI_DEVICE_ID_INTEL_82801DB_3) ||
-	    (dev->device == PCI_DEVICE_ID_INTEL_82801EB_3))
+	    (dev->device == PCI_DEVICE_ID_INTEL_82801EB_3) ||
+	    (dev->device == PCI_DEVICE_ID_INTEL_ESB_4))
 		isich4 = 1;
 	else
 		isich4 = 0;
@@ -539,7 +541,7 @@
 
 static struct i2c_adapter i801_adapter = {
 	.owner		= THIS_MODULE,
-	.class		= I2C_ADAP_CLASS_SMBUS,
+	.class		= I2C_CLASS_HWMON,
 	.algo		= &smbus_algorithm,
 	.name		= "unset",
 };
@@ -576,10 +578,22 @@
 		.subdevice =	PCI_ANY_ID,
 	},
 	{
-		.vendor =   PCI_VENDOR_ID_INTEL,
-		.device =   PCI_DEVICE_ID_INTEL_82801EB_3,
-		.subvendor =    PCI_ANY_ID,
-		.subdevice =    PCI_ANY_ID,
+		.vendor =	PCI_VENDOR_ID_INTEL,
+		.device =	PCI_DEVICE_ID_INTEL_82801EB_3,
+		.subvendor =	PCI_ANY_ID,
+		.subdevice =	PCI_ANY_ID,
+	},
+	{
+		.vendor =	PCI_VENDOR_ID_INTEL,
+		.device =	PCI_DEVICE_ID_INTEL_ESB_4,
+		.subvendor =	PCI_ANY_ID,
+		.subdevice = 	PCI_ANY_ID,
+	},
+	{
+		.vendor =	PCI_VENDOR_ID_INTEL,
+		.device =	PCI_DEVICE_ID_INTEL_ICH6_16,
+		.subvendor =	PCI_ANY_ID,
+		.subdevice =	PCI_ANY_ID,
 	},
 	{ 0, }
 };
diff -Nru a/drivers/i2c/busses/i2c-isa.c b/drivers/i2c/busses/i2c-isa.c
--- a/drivers/i2c/busses/i2c-isa.c	Sun May 16 01:18:35 2004
+++ b/drivers/i2c/busses/i2c-isa.c	Sun May 16 01:18:35 2004
@@ -43,7 +43,7 @@
 /* There can only be one... */
 static struct i2c_adapter isa_adapter = {
 	.owner		= THIS_MODULE,
-	.class          = I2C_ADAP_CLASS_SMBUS,
+	.class          = I2C_CLASS_HWMON,
 	.algo		= &isa_algorithm,
 	.name		= "ISA main adapter",
 };
diff -Nru a/drivers/i2c/busses/i2c-ixp42x.c b/drivers/i2c/busses/i2c-ixp42x.c
--- a/drivers/i2c/busses/i2c-ixp42x.c	Sun May 16 01:18:35 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,176 +0,0 @@
-/*
- * drivers/i2c/i2c-adap-ixp42x.c
- *
- * Intel's IXP42x XScale NPU chipsets (IXP420, 421, 422, 425) do not have
- * an on board I2C controller but provide 16 GPIO pins that are often
- * used to create an I2C bus. This driver provides an i2c_adapter 
- * interface that plugs in under algo_bit and drives the GPIO pins
- * as instructed by the alogorithm driver.
- *
- * Author: Deepak Saxena <dsaxena@plexity.net>
- *
- * Copyright (c) 2003-2004 MontaVista Software Inc.
- *
- * This file is licensed under the terms of the GNU General Public 
- * License version 2. This program is licensed "as is" without any 
- * warranty of any kind, whether express or implied.
- *
- * NOTE: Since different platforms will use different GPIO pins for
- *       I2C, this driver uses an IXP42x-specific platform_data
- *       pointer to pass the GPIO numbers to the driver. This 
- *       allows us to support all the different IXP42x platforms
- *       w/o having to put #ifdefs in this driver.
- *
- *       See arch/arm/mach-ixp42x/ixdp425.c for an example of building a 
- *       device list and filling in the ixp42x_i2c_pins data structure 
- *       that is passed as the platform_data to this driver.
- */
-
-#include <linux/config.h>
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/device.h>
-#include <linux/module.h>
-#include <linux/i2c.h>
-
-#include <asm/hardware.h>	/* Pick up IXP42x-specific bits */
-
-static inline int ixp42x_scl_pin(void *data)
-{
-	return ((struct ixp42x_i2c_pins*)data)->scl_pin;
-}
-
-static inline int ixp42x_sda_pin(void *data)
-{
-	return ((struct ixp42x_i2c_pins*)data)->sda_pin;
-}
-
-static void ixp42x_bit_setscl(void *data, int val)
-{
-	gpio_line_set(ixp42x_scl_pin(data), 0);
-	gpio_line_config(ixp42x_scl_pin(data),
-		val ? IXP425_GPIO_IN : IXP425_GPIO_OUT );
-}
-
-static void ixp42x_bit_setsda(void *data, int val)
-{
-	gpio_line_set(ixp42x_sda_pin(data), 0);
-	gpio_line_config(ixp42x_sda_pin(data),
-		val ? IXP425_GPIO_IN : IXP425_GPIO_OUT );
-}
-
-static int ixp42x_bit_getscl(void *data)
-{
-	int scl;
-
-	gpio_line_config(ixp42x_scl_pin(data), IXP425_GPIO_IN );
-	gpio_line_get(ixp42x_scl_pin(data), &scl);
-
-	return scl;
-}	
-
-static int ixp42x_bit_getsda(void *data)
-{
-	int sda;
-
-	gpio_line_config(ixp42x_sda_pin(data), IXP425_GPIO_IN );
-	gpio_line_get(ixp42x_sda_pin(data), &sda);
-
-	return sda;
-}	
-
-struct ixp42x_i2c_data {
-	struct ixp42x_i2c_pins *gpio_pins;
-	struct i2c_adapter adapter;
-	struct i2c_algo_bit_data algo_data;
-};
-
-static int ixp42x_i2c_remove(struct device *dev)
-{
-	struct platform_device *plat_dev = to_platform_device(dev);
-	struct ixp42x_i2c_data *drv_data = dev_get_drvdata(&plat_dev->dev);
-
-	dev_set_drvdata(&plat_dev->dev, NULL);
-
-	i2c_bit_del_bus(&drv_data->adapter);
-
-	kfree(drv_data);
-
-	return 0;
-}
-
-static int ixp42x_i2c_probe(struct device *dev)
-{
-	int err;
-	struct platform_device *plat_dev = to_platform_device(dev);
-	struct ixp42x_i2c_pins *gpio = plat_dev->dev.platform_data;
-	struct ixp42x_i2c_data *drv_data = 
-		kmalloc(sizeof(struct ixp42x_i2c_data), GFP_KERNEL);
-
-	if(!drv_data)
-		return -ENOMEM;
-
-	memzero(drv_data, sizeof(struct ixp42x_i2c_data));
-	drv_data->gpio_pins = gpio;
-
-	/*
-	 * We could make a lot of these structures static, but
-	 * certain platforms may have multiple GPIO-based I2C
-	 * buses for various device domains, so we need per-device
-	 * algo_data->data. 
-	 */
-	drv_data->algo_data.data = gpio;
-	drv_data->algo_data.setsda = ixp42x_bit_setsda;
-	drv_data->algo_data.setscl = ixp42x_bit_setscl;
-	drv_data->algo_data.getsda = ixp42x_bit_getsda;
-	drv_data->algo_data.getscl = ixp42x_bit_getscl;
-	drv_data->algo_data.udelay = 10;
-	drv_data->algo_data.mdelay = 10;
-	drv_data->algo_data.timeout = 100;
-
-	drv_data->adapter.id = I2C_HW_B_IXP425,
-	drv_data->adapter.algo_data = &drv_data->algo_data,
-
-	drv_data->adapter.dev.parent = &plat_dev->dev;
-
-	gpio_line_config(gpio->scl_pin, IXP425_GPIO_IN);
-	gpio_line_config(gpio->sda_pin, IXP425_GPIO_IN);
-	gpio_line_set(gpio->scl_pin, 0);
-	gpio_line_set(gpio->sda_pin, 0);
-
-	if ((err = i2c_bit_add_bus(&drv_data->adapter) != 0)) {
-		printk(KERN_ERR "ERROR: Could not install %s\n", dev->bus_id);
-
-		kfree(drv_data);
-		return err;
-	}
-
-	dev_set_drvdata(&plat_dev->dev, drv_data);
-
-	return 0;
-}
-
-static struct device_driver ixp42x_i2c_driver = {
-	.name		= "IXP42X-I2C",
-	.bus		= &platform_bus_type,
-	.probe		= ixp42x_i2c_probe,
-	.remove		= ixp42x_i2c_remove,
-};
-
-static int __init ixp42x_i2c_init(void)
-{
-	return driver_register(&ixp42x_i2c_driver);
-}
-
-static void __exit ixp42x_i2c_exit(void)
-{
-	driver_unregister(&ixp42x_i2c_driver);
-}
-
-module_init(ixp42x_i2c_init);
-module_exit(ixp42x_i2c_exit);
-
-MODULE_DESCRIPTION("GPIO-based I2C driver for IXP42x systems");
-MODULE_LICENSE("GPL");
-MODULE_AUTHOR("Deepak Saxena <dsaxena@plexity.net>");
-
diff -Nru a/drivers/i2c/busses/i2c-ixp4xx.c b/drivers/i2c/busses/i2c-ixp4xx.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/drivers/i2c/busses/i2c-ixp4xx.c	Sun May 16 01:18:35 2004
@@ -0,0 +1,181 @@
+/*
+ * drivers/i2c/i2c-adap-ixp4xx.c
+ *
+ * Intel's IXP4xx XScale NPU chipsets (IXP420, 421, 422, 425) do not have
+ * an on board I2C controller but provide 16 GPIO pins that are often
+ * used to create an I2C bus. This driver provides an i2c_adapter 
+ * interface that plugs in under algo_bit and drives the GPIO pins
+ * as instructed by the alogorithm driver.
+ *
+ * Author: Deepak Saxena <dsaxena@plexity.net>
+ *
+ * Copyright (c) 2003-2004 MontaVista Software Inc.
+ *
+ * This file is licensed under the terms of the GNU General Public 
+ * License version 2. This program is licensed "as is" without any 
+ * warranty of any kind, whether express or implied.
+ *
+ * NOTE: Since different platforms will use different GPIO pins for
+ *       I2C, this driver uses an IXP4xx-specific platform_data
+ *       pointer to pass the GPIO numbers to the driver. This 
+ *       allows us to support all the different IXP4xx platforms
+ *       w/o having to put #ifdefs in this driver.
+ *
+ *       See arch/arm/mach-ixp4xx/ixdp425.c for an example of building a 
+ *       device list and filling in the ixp4xx_i2c_pins data structure 
+ *       that is passed as the platform_data to this driver.
+ */
+
+#include <linux/config.h>
+#ifdef CONFIG_I2C_DEBUG_BUS
+#define DEBUG	1
+#endif
+
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/device.h>
+#include <linux/module.h>
+#include <linux/i2c.h>
+#include <linux/i2c-algo-bit.h>
+
+#include <asm/hardware.h>	/* Pick up IXP4xx-specific bits */
+
+static inline int ixp4xx_scl_pin(void *data)
+{
+	return ((struct ixp4xx_i2c_pins*)data)->scl_pin;
+}
+
+static inline int ixp4xx_sda_pin(void *data)
+{
+	return ((struct ixp4xx_i2c_pins*)data)->sda_pin;
+}
+
+static void ixp4xx_bit_setscl(void *data, int val)
+{
+	gpio_line_set(ixp4xx_scl_pin(data), 0);
+	gpio_line_config(ixp4xx_scl_pin(data),
+		val ? IXP4XX_GPIO_IN : IXP4XX_GPIO_OUT );
+}
+
+static void ixp4xx_bit_setsda(void *data, int val)
+{
+	gpio_line_set(ixp4xx_sda_pin(data), 0);
+	gpio_line_config(ixp4xx_sda_pin(data),
+		val ? IXP4XX_GPIO_IN : IXP4XX_GPIO_OUT );
+}
+
+static int ixp4xx_bit_getscl(void *data)
+{
+	int scl;
+
+	gpio_line_config(ixp4xx_scl_pin(data), IXP4XX_GPIO_IN );
+	gpio_line_get(ixp4xx_scl_pin(data), &scl);
+
+	return scl;
+}	
+
+static int ixp4xx_bit_getsda(void *data)
+{
+	int sda;
+
+	gpio_line_config(ixp4xx_sda_pin(data), IXP4XX_GPIO_IN );
+	gpio_line_get(ixp4xx_sda_pin(data), &sda);
+
+	return sda;
+}	
+
+struct ixp4xx_i2c_data {
+	struct ixp4xx_i2c_pins *gpio_pins;
+	struct i2c_adapter adapter;
+	struct i2c_algo_bit_data algo_data;
+};
+
+static int ixp4xx_i2c_remove(struct device *dev)
+{
+	struct platform_device *plat_dev = to_platform_device(dev);
+	struct ixp4xx_i2c_data *drv_data = dev_get_drvdata(&plat_dev->dev);
+
+	dev_set_drvdata(&plat_dev->dev, NULL);
+
+	i2c_bit_del_bus(&drv_data->adapter);
+
+	kfree(drv_data);
+
+	return 0;
+}
+
+static int ixp4xx_i2c_probe(struct device *dev)
+{
+	int err;
+	struct platform_device *plat_dev = to_platform_device(dev);
+	struct ixp4xx_i2c_pins *gpio = plat_dev->dev.platform_data;
+	struct ixp4xx_i2c_data *drv_data = 
+		kmalloc(sizeof(struct ixp4xx_i2c_data), GFP_KERNEL);
+
+	if(!drv_data)
+		return -ENOMEM;
+
+	memzero(drv_data, sizeof(struct ixp4xx_i2c_data));
+	drv_data->gpio_pins = gpio;
+
+	/*
+	 * We could make a lot of these structures static, but
+	 * certain platforms may have multiple GPIO-based I2C
+	 * buses for various device domains, so we need per-device
+	 * algo_data->data. 
+	 */
+	drv_data->algo_data.data = gpio;
+	drv_data->algo_data.setsda = ixp4xx_bit_setsda;
+	drv_data->algo_data.setscl = ixp4xx_bit_setscl;
+	drv_data->algo_data.getsda = ixp4xx_bit_getsda;
+	drv_data->algo_data.getscl = ixp4xx_bit_getscl;
+	drv_data->algo_data.udelay = 10;
+	drv_data->algo_data.mdelay = 10;
+	drv_data->algo_data.timeout = 100;
+
+	drv_data->adapter.id = I2C_HW_B_IXP4XX,
+	drv_data->adapter.algo_data = &drv_data->algo_data,
+
+	drv_data->adapter.dev.parent = &plat_dev->dev;
+
+	gpio_line_config(gpio->scl_pin, IXP4XX_GPIO_IN);
+	gpio_line_config(gpio->sda_pin, IXP4XX_GPIO_IN);
+	gpio_line_set(gpio->scl_pin, 0);
+	gpio_line_set(gpio->sda_pin, 0);
+
+	if ((err = i2c_bit_add_bus(&drv_data->adapter) != 0)) {
+		printk(KERN_ERR "ERROR: Could not install %s\n", dev->bus_id);
+
+		kfree(drv_data);
+		return err;
+	}
+
+	dev_set_drvdata(&plat_dev->dev, drv_data);
+
+	return 0;
+}
+
+static struct device_driver ixp4xx_i2c_driver = {
+	.name		= "IXP4XX-I2C",
+	.bus		= &platform_bus_type,
+	.probe		= ixp4xx_i2c_probe,
+	.remove		= ixp4xx_i2c_remove,
+};
+
+static int __init ixp4xx_i2c_init(void)
+{
+	return driver_register(&ixp4xx_i2c_driver);
+}
+
+static void __exit ixp4xx_i2c_exit(void)
+{
+	driver_unregister(&ixp4xx_i2c_driver);
+}
+
+module_init(ixp4xx_i2c_init);
+module_exit(ixp4xx_i2c_exit);
+
+MODULE_DESCRIPTION("GPIO-based I2C adapter for IXP4xx systems");
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Deepak Saxena <dsaxena@plexity.net>");
+
diff -Nru a/drivers/i2c/busses/i2c-keywest.c b/drivers/i2c/busses/i2c-keywest.c
--- a/drivers/i2c/busses/i2c-keywest.c	Sun May 16 01:18:35 2004
+++ b/drivers/i2c/busses/i2c-keywest.c	Sun May 16 01:18:35 2004
@@ -48,7 +48,6 @@
 
 #include <linux/config.h>
 #include <linux/module.h>
-#include <linux/config.h>
 #include <linux/kernel.h>
 #include <linux/ioport.h>
 #include <linux/pci.h>
diff -Nru a/drivers/i2c/busses/i2c-nforce2.c b/drivers/i2c/busses/i2c-nforce2.c
--- a/drivers/i2c/busses/i2c-nforce2.c	Sun May 16 01:18:33 2004
+++ b/drivers/i2c/busses/i2c-nforce2.c	Sun May 16 01:18:33 2004
@@ -119,7 +119,7 @@
 
 static struct i2c_adapter nforce2_adapter = {
 	.owner          = THIS_MODULE,
-	.class          = I2C_ADAP_CLASS_SMBUS,
+	.class          = I2C_CLASS_HWMON,
 	.algo           = &smbus_algorithm,
 	.name   	= "unset",
 };
diff -Nru a/drivers/i2c/busses/i2c-parport-light.c b/drivers/i2c/busses/i2c-parport-light.c
--- a/drivers/i2c/busses/i2c-parport-light.c	Sun May 16 01:18:36 2004
+++ b/drivers/i2c/busses/i2c-parport-light.c	Sun May 16 01:18:36 2004
@@ -112,7 +112,7 @@
 
 static struct i2c_adapter parport_adapter = {
 	.owner		= THIS_MODULE,
-	.class		= I2C_ADAP_CLASS_SMBUS,
+	.class		= I2C_CLASS_HWMON,
 	.id		= I2C_HW_B_LP,
 	.algo_data	= &parport_algo_data,
 	.name		= "Parallel port adapter (light)",
diff -Nru a/drivers/i2c/busses/i2c-parport.c b/drivers/i2c/busses/i2c-parport.c
--- a/drivers/i2c/busses/i2c-parport.c	Sun May 16 01:18:35 2004
+++ b/drivers/i2c/busses/i2c-parport.c	Sun May 16 01:18:35 2004
@@ -147,7 +147,7 @@
 
 static struct i2c_adapter parport_adapter = {
 	.owner		= THIS_MODULE,
-	.class		= I2C_ADAP_CLASS_SMBUS,
+	.class		= I2C_CLASS_HWMON,
 	.id		= I2C_HW_B_LP,
 	.name		= "Parallel port adapter",
 };
diff -Nru a/drivers/i2c/busses/i2c-piix4.c b/drivers/i2c/busses/i2c-piix4.c
--- a/drivers/i2c/busses/i2c-piix4.c	Sun May 16 01:18:34 2004
+++ b/drivers/i2c/busses/i2c-piix4.c	Sun May 16 01:18:34 2004
@@ -31,7 +31,6 @@
 #include <linux/config.h>
 #include <linux/module.h>
 #include <linux/moduleparam.h>
-#include <linux/config.h>
 #include <linux/pci.h>
 #include <linux/kernel.h>
 #include <linux/stddef.h>
@@ -410,7 +409,7 @@
 
 static struct i2c_adapter piix4_adapter = {
 	.owner		= THIS_MODULE,
-	.class		= I2C_ADAP_CLASS_SMBUS,
+	.class		= I2C_CLASS_HWMON,
 	.algo		= &smbus_algorithm,
 	.name		= "unset",
 };
diff -Nru a/drivers/i2c/busses/i2c-sis5595.c b/drivers/i2c/busses/i2c-sis5595.c
--- a/drivers/i2c/busses/i2c-sis5595.c	Sun May 16 01:18:34 2004
+++ b/drivers/i2c/busses/i2c-sis5595.c	Sun May 16 01:18:34 2004
@@ -360,7 +360,7 @@
 
 static struct i2c_adapter sis5595_adapter = {
 	.owner		= THIS_MODULE,
-	.class          = I2C_ADAP_CLASS_SMBUS,
+	.class          = I2C_CLASS_HWMON,
 	.name		= "unset",
 	.algo		= &smbus_algorithm,
 };
diff -Nru a/drivers/i2c/busses/i2c-sis630.c b/drivers/i2c/busses/i2c-sis630.c
--- a/drivers/i2c/busses/i2c-sis630.c	Sun May 16 01:18:34 2004
+++ b/drivers/i2c/busses/i2c-sis630.c	Sun May 16 01:18:34 2004
@@ -456,7 +456,7 @@
 
 static struct i2c_adapter sis630_adapter = {
 	.owner		= THIS_MODULE,
-	.class		= I2C_ADAP_CLASS_SMBUS,
+	.class		= I2C_CLASS_HWMON,
 	.name		= "unset",
 	.algo		= &smbus_algorithm,
 };
diff -Nru a/drivers/i2c/busses/i2c-sis96x.c b/drivers/i2c/busses/i2c-sis96x.c
--- a/drivers/i2c/busses/i2c-sis96x.c	Sun May 16 01:18:34 2004
+++ b/drivers/i2c/busses/i2c-sis96x.c	Sun May 16 01:18:34 2004
@@ -260,7 +260,7 @@
 
 static struct i2c_adapter sis96x_adapter = {
 	.owner		= THIS_MODULE,
-	.class		= I2C_ADAP_CLASS_SMBUS,
+	.class		= I2C_CLASS_HWMON,
 	.algo		= &smbus_algorithm,
 	.name		= "unset",
 };
diff -Nru a/drivers/i2c/busses/i2c-via.c b/drivers/i2c/busses/i2c-via.c
--- a/drivers/i2c/busses/i2c-via.c	Sun May 16 01:18:35 2004
+++ b/drivers/i2c/busses/i2c-via.c	Sun May 16 01:18:35 2004
@@ -88,7 +88,7 @@
 
 static struct i2c_adapter vt586b_adapter = {
 	.owner		= THIS_MODULE,
-	.class          = I2C_ADAP_CLASS_SMBUS,
+	.class          = I2C_CLASS_HWMON,
 	.name		= "VIA i2c",
 	.algo_data	= &bit_data,
 };
diff -Nru a/drivers/i2c/busses/i2c-viapro.c b/drivers/i2c/busses/i2c-viapro.c
--- a/drivers/i2c/busses/i2c-viapro.c	Sun May 16 01:18:36 2004
+++ b/drivers/i2c/busses/i2c-viapro.c	Sun May 16 01:18:36 2004
@@ -289,7 +289,7 @@
 
 static struct i2c_adapter vt596_adapter = {
 	.owner		= THIS_MODULE,
-	.class		= I2C_ADAP_CLASS_SMBUS,
+	.class		= I2C_CLASS_HWMON,
 	.algo		= &smbus_algorithm,
 	.name		= "unset",
 };
diff -Nru a/drivers/i2c/busses/i2c-voodoo3.c b/drivers/i2c/busses/i2c-voodoo3.c
--- a/drivers/i2c/busses/i2c-voodoo3.c	Sun May 16 01:18:35 2004
+++ b/drivers/i2c/busses/i2c-voodoo3.c	Sun May 16 01:18:35 2004
@@ -167,7 +167,7 @@
 
 static struct i2c_adapter voodoo3_i2c_adapter = {
 	.owner		= THIS_MODULE,
-	.class		= I2C_ADAP_CLASS_TV_ANALOG, 
+	.class		= I2C_CLASS_TV_ANALOG, 
 	.name		= "I2C Voodoo3/Banshee adapter",
 	.algo_data	= &voo_i2c_bit_data,
 };
@@ -184,7 +184,7 @@
 
 static struct i2c_adapter voodoo3_ddc_adapter = {
 	.owner		= THIS_MODULE,
-	.class		= I2C_ADAP_CLASS_DDC, 
+	.class		= I2C_CLASS_DDC, 
 	.name		= "DDC Voodoo3/Banshee adapter",
 	.algo_data	= &voo_ddc_bit_data,
 };
diff -Nru a/drivers/i2c/busses/scx200_acb.c b/drivers/i2c/busses/scx200_acb.c
--- a/drivers/i2c/busses/scx200_acb.c	Sun May 16 01:18:35 2004
+++ b/drivers/i2c/busses/scx200_acb.c	Sun May 16 01:18:35 2004
@@ -25,7 +25,6 @@
 */
 
 #include <linux/config.h>
-#include <linux/config.h>
 #include <linux/module.h>
 #include <linux/errno.h>
 #include <linux/kernel.h>
diff -Nru a/drivers/i2c/busses/scx200_i2c.c b/drivers/i2c/busses/scx200_i2c.c
--- a/drivers/i2c/busses/scx200_i2c.c	Sun May 16 01:18:35 2004
+++ b/drivers/i2c/busses/scx200_i2c.c	Sun May 16 01:18:35 2004
@@ -22,7 +22,6 @@
 */
 
 #include <linux/config.h>
-#include <linux/config.h>
 #include <linux/module.h>
 #include <linux/errno.h>
 #include <linux/kernel.h>
diff -Nru a/drivers/i2c/chips/Kconfig b/drivers/i2c/chips/Kconfig
--- a/drivers/i2c/chips/Kconfig	Sun May 16 01:18:35 2004
+++ b/drivers/i2c/chips/Kconfig	Sun May 16 01:18:35 2004
@@ -136,11 +136,11 @@
 
 config SENSORS_LM90
 	tristate "National Semiconductor LM90 and compatibles"
-	depends on I2C && EXPERIMENTAL
+	depends on I2C
 	select I2C_SENSOR
 	help
-	  If you say yes here you get support for National Semiconductor LM90
-	  and Analog Devices ADM1032 sensor chips.
+	  If you say yes here you get support for National Semiconductor LM90,
+	  LM89 and LM99, and Analog Devices ADM1032 sensor chips.
 
 	  This driver can also be built as a module.  If so, the module
 	  will be called lm90.
@@ -163,7 +163,7 @@
 	select I2C_SENSOR
 	help
 	  If you say yes here you get support for the Winbond W8378x series
-	  of sensor chips: the W83781D, W83782D, W83783S and W83682HF,
+	  of sensor chips: the W83781D, W83782D, W83783S and W83627HF,
 	  and the similar Asus AS99127F.
 	  
 	  This driver can also be built as a module.  If so, the module
@@ -229,5 +229,15 @@
 
 	  This driver can also be built as a module.  If so, the module
 	  will be called pcf8591.
+
+config SENSORS_RTC8564
+	tristate "Epson 8564 RTC chip"
+	depends on I2C && EXPERIMENTAL
+	select I2C_SENSOR
+	help
+	  If you say yes here you get support for the Epson 8564 RTC chip.
+
+	  This driver can also be built as a module.  If so, the module
+	  will be called i2c-rtc8564.
 
 endmenu
diff -Nru a/drivers/i2c/chips/Makefile b/drivers/i2c/chips/Makefile
--- a/drivers/i2c/chips/Makefile	Sun May 16 01:18:37 2004
+++ b/drivers/i2c/chips/Makefile	Sun May 16 01:18:37 2004
@@ -21,6 +21,7 @@
 obj-$(CONFIG_SENSORS_LM90)	+= lm90.o
 obj-$(CONFIG_SENSORS_PCF8574)	+= pcf8574.o
 obj-$(CONFIG_SENSORS_PCF8591)	+= pcf8591.o
+obj-$(CONFIG_SENSORS_RTC8564)	+= rtc8564.o
 obj-$(CONFIG_SENSORS_VIA686A)	+= via686a.o
 obj-$(CONFIG_SENSORS_W83L785TS)	+= w83l785ts.o
 
diff -Nru a/drivers/i2c/chips/adm1021.c b/drivers/i2c/chips/adm1021.c
--- a/drivers/i2c/chips/adm1021.c	Sun May 16 01:18:33 2004
+++ b/drivers/i2c/chips/adm1021.c	Sun May 16 01:18:33 2004
@@ -200,7 +200,7 @@
 
 static int adm1021_attach_adapter(struct i2c_adapter *adapter)
 {
-	if (!(adapter->class & I2C_ADAP_CLASS_SMBUS))
+	if (!(adapter->class & I2C_CLASS_HWMON))
 		return 0;
 	return i2c_detect(adapter, &addr_data, adm1021_detect);
 }
diff -Nru a/drivers/i2c/chips/asb100.c b/drivers/i2c/chips/asb100.c
--- a/drivers/i2c/chips/asb100.c	Sun May 16 01:18:35 2004
+++ b/drivers/i2c/chips/asb100.c	Sun May 16 01:18:35 2004
@@ -609,7 +609,7 @@
  */
 static int asb100_attach_adapter(struct i2c_adapter *adapter)
 {
-	if (!(adapter->class & I2C_ADAP_CLASS_SMBUS))
+	if (!(adapter->class & I2C_CLASS_HWMON))
 		return 0;
 	return i2c_detect(adapter, &addr_data, asb100_detect);
 }
@@ -855,7 +855,13 @@
 		return err;
 	}
 
-	kfree(i2c_get_clientdata(client));
+	if (i2c_get_clientdata(client)==NULL) {
+		/* subclients */
+		kfree(client);
+	} else {
+		/* main client */
+		kfree(i2c_get_clientdata(client));
+	}
 
 	return 0;
 }
diff -Nru a/drivers/i2c/chips/fscher.c b/drivers/i2c/chips/fscher.c
--- a/drivers/i2c/chips/fscher.c	Sun May 16 01:18:35 2004
+++ b/drivers/i2c/chips/fscher.c	Sun May 16 01:18:35 2004
@@ -293,7 +293,7 @@
 
 static int fscher_attach_adapter(struct i2c_adapter *adapter)
 {
-	if (!(adapter->class & I2C_ADAP_CLASS_SMBUS))
+	if (!(adapter->class & I2C_CLASS_HWMON))
 		return 0;
 	return i2c_detect(adapter, &addr_data, fscher_detect);
 }
diff -Nru a/drivers/i2c/chips/gl518sm.c b/drivers/i2c/chips/gl518sm.c
--- a/drivers/i2c/chips/gl518sm.c	Sun May 16 01:18:36 2004
+++ b/drivers/i2c/chips/gl518sm.c	Sun May 16 01:18:36 2004
@@ -335,7 +335,7 @@
 
 static int gl518_attach_adapter(struct i2c_adapter *adapter)
 {
-	if (!(adapter->class & I2C_ADAP_CLASS_SMBUS))
+	if (!(adapter->class & I2C_CLASS_HWMON))
 		return 0;
 	return i2c_detect(adapter, &addr_data, gl518_detect);
 }
diff -Nru a/drivers/i2c/chips/it87.c b/drivers/i2c/chips/it87.c
--- a/drivers/i2c/chips/it87.c	Sun May 16 01:18:36 2004
+++ b/drivers/i2c/chips/it87.c	Sun May 16 01:18:36 2004
@@ -49,6 +49,54 @@
 /* Insmod parameters */
 SENSORS_INSMOD_1(it87);
 
+#define	REG	0x2e	/* The register to read/write */
+#define	DEV	0x07	/* Register: Logical device select */
+#define	VAL	0x2f	/* The value to read/write */
+#define PME	0x04	/* The device with the fan registers in it */
+#define	DEVID	0x20	/* Register: Device ID */
+
+static inline void
+superio_outb(int reg, int val)
+{
+	outb(reg, REG);
+	outb(val, VAL);
+}
+
+static inline int
+superio_inb(int reg)
+{
+	outb(reg, REG);
+	return inb(VAL);
+}
+
+static inline void
+superio_select(void)
+{
+	outb(DEV, REG);
+	outb(PME, VAL);
+}
+
+static inline void
+superio_enter(void)
+{
+	outb(0x87, REG);
+	outb(0x01, REG);
+	outb(0x55, REG);
+	outb(0x55, REG);
+}
+
+static inline void
+superio_exit(void)
+{
+	outb(0x02, REG);
+	outb(0x02, VAL);
+}
+
+/* just IT8712F for now - this should be extended to support the other
+   chips as well */
+#define IT8712F_DEVID 0x8712
+#define IT87_ACT_REG  0x30
+#define IT87_BASE_REG 0x60
 
 /* Update battery voltage after every reading if true */
 static int update_vbat;
@@ -158,6 +206,7 @@
 
 
 static int it87_attach_adapter(struct i2c_adapter *adapter);
+static int it87_find(int *address);
 static int it87_detect(struct i2c_adapter *adapter, int address, int kind);
 static int it87_detach_client(struct i2c_client *client);
 
@@ -500,11 +549,35 @@
      * when a new adapter is inserted (and it87_driver is still present) */
 static int it87_attach_adapter(struct i2c_adapter *adapter)
 {
-	if (!(adapter->class & I2C_ADAP_CLASS_SMBUS))
+	if (!(adapter->class & I2C_CLASS_HWMON))
 		return 0;
 	return i2c_detect(adapter, &addr_data, it87_detect);
 }
 
+/* SuperIO detection - will change normal_isa[0] if a chip is found */
+static int it87_find(int *address)
+{
+	u16 val;
+
+	superio_enter();
+	val = (superio_inb(DEVID) << 8) |
+	       superio_inb(DEVID + 1);
+	if (val != IT8712F_DEVID) {
+		superio_exit();
+		return -ENODEV;
+	}
+
+	superio_select();
+	val = (superio_inb(IT87_BASE_REG) << 8) |
+	       superio_inb(IT87_BASE_REG + 1);
+	superio_exit();
+	*address = val & ~(IT87_EXTENT - 1);
+	if (*address == 0) {
+		return -ENODEV;
+	}
+	return 0;
+}
+
 /* This function is called by i2c_detect */
 int it87_detect(struct i2c_adapter *adapter, int address, int kind)
 {
@@ -853,6 +926,11 @@
 
 static int __init sm_it87_init(void)
 {
+	int addr;
+
+	if (!it87_find(&addr)) {
+		normal_isa[0] = addr;
+	}
 	return i2c_add_driver(&it87_driver);
 }
 
diff -Nru a/drivers/i2c/chips/lm75.c b/drivers/i2c/chips/lm75.c
--- a/drivers/i2c/chips/lm75.c	Sun May 16 01:18:33 2004
+++ b/drivers/i2c/chips/lm75.c	Sun May 16 01:18:33 2004
@@ -105,7 +105,7 @@
 
 static int lm75_attach_adapter(struct i2c_adapter *adapter)
 {
-	if (!(adapter->class & I2C_ADAP_CLASS_SMBUS))
+	if (!(adapter->class & I2C_CLASS_HWMON))
 		return 0;
 	return i2c_detect(adapter, &addr_data, lm75_detect);
 }
diff -Nru a/drivers/i2c/chips/lm78.c b/drivers/i2c/chips/lm78.c
--- a/drivers/i2c/chips/lm78.c	Sun May 16 01:18:36 2004
+++ b/drivers/i2c/chips/lm78.c	Sun May 16 01:18:36 2004
@@ -488,7 +488,7 @@
      * when a new adapter is inserted (and lm78_driver is still present) */
 static int lm78_attach_adapter(struct i2c_adapter *adapter)
 {
-	if (!(adapter->class & I2C_ADAP_CLASS_SMBUS))
+	if (!(adapter->class & I2C_CLASS_HWMON))
 		return 0;
 	return i2c_detect(adapter, &addr_data, lm78_detect);
 }
diff -Nru a/drivers/i2c/chips/lm80.c b/drivers/i2c/chips/lm80.c
--- a/drivers/i2c/chips/lm80.c	Sun May 16 01:18:33 2004
+++ b/drivers/i2c/chips/lm80.c	Sun May 16 01:18:33 2004
@@ -376,7 +376,7 @@
 
 static int lm80_attach_adapter(struct i2c_adapter *adapter)
 {
-	if (!(adapter->class & I2C_ADAP_CLASS_SMBUS))
+	if (!(adapter->class & I2C_CLASS_HWMON))
 		return 0;
 	return i2c_detect(adapter, &addr_data, lm80_detect);
 }
diff -Nru a/drivers/i2c/chips/lm83.c b/drivers/i2c/chips/lm83.c
--- a/drivers/i2c/chips/lm83.c	Sun May 16 01:18:34 2004
+++ b/drivers/i2c/chips/lm83.c	Sun May 16 01:18:34 2004
@@ -216,7 +216,7 @@
 
 static int lm83_attach_adapter(struct i2c_adapter *adapter)
 {
-	if (!(adapter->class & I2C_ADAP_CLASS_SMBUS))
+	if (!(adapter->class & I2C_CLASS_HWMON))
 		return 0;
 	return i2c_detect(adapter, &addr_data, lm83_detect);
 }
diff -Nru a/drivers/i2c/chips/lm90.c b/drivers/i2c/chips/lm90.c
--- a/drivers/i2c/chips/lm90.c	Sun May 16 01:18:33 2004
+++ b/drivers/i2c/chips/lm90.c	Sun May 16 01:18:33 2004
@@ -1,7 +1,7 @@
 /*
  * lm90.c - Part of lm_sensors, Linux kernel modules for hardware
  *          monitoring
- * Copyright (C) 2003  Jean Delvare <khali@linux-fr.org>
+ * Copyright (C) 2003-2004  Jean Delvare <khali@linux-fr.org>
  *
  * Based on the lm83 driver. The LM90 is a sensor chip made by National
  * Semiconductor. It reports up to two temperatures (its own plus up to
@@ -10,6 +10,17 @@
  * obtained from National's website at:
  *   http://www.national.com/pf/LM/LM90.html
  *
+ * This driver also supports the LM89 and LM99, two other sensor chips
+ * made by National Semiconductor. Both have an increased remote
+ * temperature measurement accuracy (1 degree), and the LM99
+ * additionally shifts remote temperatures (measured and limits) by 16
+ * degrees, which allows for higher temperatures measurement. The
+ * driver doesn't handle it since it can be done easily in user-space.
+ * Complete datasheets can be obtained from National's website at:
+ *   http://www.national.com/pf/LM/LM89.html
+ *   http://www.national.com/pf/LM/LM99.html
+ * Note that there is no way to differenciate between both chips.
+ *
  * This driver also supports the ADM1032, a sensor chip made by Analog
  * Devices. That chip is similar to the LM90, with a few differences
  * that are not handled by this driver. Complete datasheet can be
@@ -45,9 +56,11 @@
 /*
  * Addresses to scan
  * Address is fully defined internally and cannot be changed.
+ * LM89, LM90, LM99 and ADM1032 have address 0x4c.
+ * LM89-1, and LM99-1 have address 0x4d.
  */
 
-static unsigned short normal_i2c[] = { 0x4c, I2C_CLIENT_END };
+static unsigned short normal_i2c[] = { 0x4c, 0x4d, I2C_CLIENT_END };
 static unsigned short normal_i2c_range[] = { I2C_CLIENT_END };
 static unsigned int normal_isa[] = { I2C_CLIENT_ISA_END };
 static unsigned int normal_isa_range[] = { I2C_CLIENT_ISA_END };
@@ -56,7 +69,7 @@
  * Insmod parameters
  */
 
-SENSORS_INSMOD_2(lm90, adm1032);
+SENSORS_INSMOD_3(lm90, adm1032, lm99);
 
 /*
  * The LM90 registers
@@ -261,7 +274,7 @@
 
 static int lm90_attach_adapter(struct i2c_adapter *adapter)
 {
-	if (!(adapter->class & I2C_ADAP_CLASS_SMBUS))
+	if (!(adapter->class & I2C_CLASS_HWMON))
 		return 0;
 	return i2c_detect(adapter, &addr_data, lm90_detect);
 }
@@ -330,16 +343,26 @@
 			  LM90_REG_R_CHIP_ID);
 		
 		if (man_id == 0x01) { /* National Semiconductor */
-			if (chip_id >= 0x21 && chip_id < 0x30 /* LM90 */
-			 && (kind == 0 /* skip detection */
-			  || ((i2c_smbus_read_byte_data(new_client,
-				LM90_REG_R_CONFIG2) & 0xF8) == 0x00
-			   && reg_convrate <= 0x09))) {
-				kind = lm90;
+			u8 reg_config2;
+
+			reg_config2 = i2c_smbus_read_byte_data(new_client,
+				      LM90_REG_R_CONFIG2);
+
+			if (kind == 0 /* skip detection */
+			 || ((reg_config2 & 0xF8) == 0x00
+			  && reg_convrate <= 0x09)) {
+				if (address == 0x4C
+				 && (chip_id & 0xF0) == 0x20) { /* LM90 */
+					kind = lm90;
+				} else
+				if ((chip_id & 0xF0) == 0x30) { /* LM89/LM99 */
+					kind = lm99;
+				}
 			}
-		}
-		else if (man_id == 0x41) { /* Analog Devices */
-			if ((chip_id & 0xF0) == 0x40 /* ADM1032 */
+		} else
+		if (man_id == 0x41) { /* Analog Devices */
+			if (address == 0x4C
+			 && (chip_id & 0xF0) == 0x40 /* ADM1032 */
 			 && (kind == 0 /* skip detection */
 			  || (reg_config1 & 0x3F) == 0x00)) {
 				kind = adm1032;
@@ -358,6 +381,8 @@
 		name = "lm90";
 	} else if (kind == adm1032) {
 		name = "adm1032";
+	} else if (kind == lm99) {
+		name = "lm99";
 	}
 
 	/* We can fill in the remaining client fields */
diff -Nru a/drivers/i2c/chips/rtc8564.c b/drivers/i2c/chips/rtc8564.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/drivers/i2c/chips/rtc8564.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,396 @@
+/*
+ *  linux/drivers/i2c/chips/rtc8564.c
+ *
+ *  Copyright (C) 2002-2004 Stefan Eletzhofer
+ *
+ *	based on linux/drivers/acron/char/pcf8583.c
+ *  Copyright (C) 2000 Russell King
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * Driver for system3's EPSON RTC 8564 chip
+ */
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/i2c.h>
+#include <linux/slab.h>
+#include <linux/string.h>
+#include <linux/rtc.h>		/* get the user-level API */
+#include <linux/init.h>
+#include <linux/init.h>
+
+#include "rtc8564.h"
+
+#ifdef DEBUG
+# define _DBG(x, fmt, args...) do{ if (debug>=x) printk(KERN_DEBUG"%s: " fmt "\n", __FUNCTION__, ##args); } while(0);
+#else
+# define _DBG(x, fmt, args...) do { } while(0);
+#endif
+
+#define _DBGRTCTM(x, rtctm) if (debug>=x) printk("%s: secs=%d, mins=%d, hours=%d, mday=%d, " \
+			"mon=%d, year=%d, wday=%d VL=%d\n", __FUNCTION__, \
+			(rtctm).secs, (rtctm).mins, (rtctm).hours, (rtctm).mday, \
+			(rtctm).mon, (rtctm).year, (rtctm).wday, (rtctm).vl);
+
+struct rtc8564_data {
+	struct i2c_client client;
+	u16 ctrl;
+};
+
+static inline u8 _rtc8564_ctrl1(struct i2c_client *client)
+{
+	struct rtc8564_data *data = i2c_get_clientdata(client);
+	return data->ctrl & 0xff;
+}
+static inline u8 _rtc8564_ctrl2(struct i2c_client *client)
+{
+	struct rtc8564_data *data = i2c_get_clientdata(client);
+	return (data->ctrl & 0xff00) >> 8;
+}
+
+#define CTRL1(c) _rtc8564_ctrl1(c)
+#define CTRL2(c) _rtc8564_ctrl2(c)
+
+#define BCD_TO_BIN(val) (((val)&15) + ((val)>>4)*10)
+#define BIN_TO_BCD(val) ((((val)/10)<<4) + (val)%10)
+
+static int debug = 0;
+MODULE_PARM(debug, "i");
+
+static struct i2c_driver rtc8564_driver;
+
+static unsigned short ignore[] = { I2C_CLIENT_END };
+static unsigned short normal_addr[] = { 0x51, I2C_CLIENT_END };
+
+static struct i2c_client_address_data addr_data = {
+	.normal_i2c		= normal_addr,
+	.normal_i2c_range	= ignore,
+	.probe			= ignore,
+	.probe_range		= ignore,
+	.ignore			= ignore,
+	.ignore_range		= ignore,
+	.force			= ignore,
+};
+
+static int rtc8564_read_mem(struct i2c_client *client, struct mem *mem);
+static int rtc8564_write_mem(struct i2c_client *client, struct mem *mem);
+
+static int rtc8564_read(struct i2c_client *client, unsigned char adr,
+			unsigned char *buf, unsigned char len)
+{
+	int ret = -EIO;
+	unsigned char addr[1] = { adr };
+	struct i2c_msg msgs[2] = {
+		{client->addr, 0, 1, addr},
+		{client->addr, I2C_M_RD, len, buf}
+	};
+
+	_DBG(1, "client=%p, adr=%d, buf=%p, len=%d", client, adr, buf, len);
+
+	if (!buf || !client) {
+		ret = -EINVAL;
+		goto done;
+	}
+
+	ret = i2c_transfer(client->adapter, msgs, 2);
+	if (ret == 2) {
+		ret = 0;
+	}
+
+done:
+	return ret;
+}
+
+static int rtc8564_write(struct i2c_client *client, unsigned char adr,
+			 unsigned char *data, unsigned char len)
+{
+	int ret = 0;
+	unsigned char _data[16];
+	struct i2c_msg wr;
+	int i;
+
+	if (!client || !data || len > 15) {
+		ret = -EINVAL;
+		goto done;
+	}
+
+	_DBG(1, "client=%p, adr=%d, buf=%p, len=%d", client, adr, data, len);
+
+	_data[0] = adr;
+	for (i = 0; i < len; i++) {
+		_data[i + 1] = data[i];
+		_DBG(5, "data[%d] = 0x%02x (%d)", i, data[i], data[i]);
+	}
+
+	wr.addr = client->addr;
+	wr.flags = 0;
+	wr.len = len + 1;
+	wr.buf = _data;
+
+	ret = i2c_transfer(client->adapter, &wr, 1);
+	if (ret == 1) {
+		ret = 0;
+	}
+
+done:
+	return ret;
+}
+
+static int rtc8564_attach(struct i2c_adapter *adap, int addr, int kind)
+{
+	int ret;
+	struct i2c_client *new_client;
+	struct rtc8564_data *d;
+	unsigned char data[10];
+	unsigned char ad[1] = { 0 };
+	struct i2c_msg ctrl_wr[1] = {
+		{addr, 0, 2, data}
+	};
+	struct i2c_msg ctrl_rd[2] = {
+		{addr, 0, 1, ad},
+		{addr, I2C_M_RD, 2, data}
+	};
+
+	d = kmalloc(sizeof(struct rtc8564_data), GFP_KERNEL);
+	if (!d) {
+		ret = -ENOMEM;
+		goto done;
+	}
+	memset(d, 0, sizeof(struct rtc8564_data));
+	new_client = &d->client;
+
+	strlcpy(new_client->name, "RTC8564", I2C_NAME_SIZE);
+	i2c_set_clientdata(new_client, d);
+	new_client->id = rtc8564_driver.id;
+	new_client->flags = I2C_CLIENT_ALLOW_USE | I2C_DF_NOTIFY;
+	new_client->addr = addr;
+	new_client->adapter = adap;
+	new_client->driver = &rtc8564_driver;
+
+	_DBG(1, "client=%p", new_client);
+	_DBG(1, "client.id=%d", new_client->id);
+
+	/* init ctrl1 reg */
+	data[0] = 0;
+	data[1] = 0;
+	ret = i2c_transfer(new_client->adapter, ctrl_wr, 1);
+	if (ret != 1) {
+		printk(KERN_INFO "rtc8564: cant init ctrl1\n");
+		ret = -ENODEV;
+		goto done;
+	}
+
+	/* read back ctrl1 and ctrl2 */
+	ret = i2c_transfer(new_client->adapter, ctrl_rd, 2);
+	if (ret != 2) {
+		printk(KERN_INFO "rtc8564: cant read ctrl\n");
+		ret = -ENODEV;
+		goto done;
+	}
+
+	d->ctrl = data[0] | (data[1] << 8);
+
+	_DBG(1, "RTC8564_REG_CTRL1=%02x, RTC8564_REG_CTRL2=%02x",
+	     data[0], data[1]);
+
+	ret = i2c_attach_client(new_client);
+done:
+	if (ret) {
+		kfree(d);
+	}
+	return ret;
+}
+
+static int rtc8564_probe(struct i2c_adapter *adap)
+{
+	return i2c_probe(adap, &addr_data, rtc8564_attach);
+}
+
+static int rtc8564_detach(struct i2c_client *client)
+{
+	i2c_detach_client(client);
+	kfree(i2c_get_clientdata(client));
+	return 0;
+}
+
+static int rtc8564_get_datetime(struct i2c_client *client, struct rtc_tm *dt)
+{
+	int ret = -EIO;
+	unsigned char buf[15];
+
+	_DBG(1, "client=%p, dt=%p", client, dt);
+
+	if (!dt || !client)
+		return -EINVAL;
+
+	memset(buf, 0, sizeof(buf));
+
+	ret = rtc8564_read(client, 0, buf, 15);
+	if (ret)
+		return ret;
+
+	/* century stored in minute alarm reg */
+	dt->year = BCD_TO_BIN(buf[RTC8564_REG_YEAR]);
+	dt->year += 100 * BCD_TO_BIN(buf[RTC8564_REG_AL_MIN] & 0x3f);
+	dt->mday = BCD_TO_BIN(buf[RTC8564_REG_DAY] & 0x3f);
+	dt->wday = BCD_TO_BIN(buf[RTC8564_REG_WDAY] & 7);
+	dt->mon = BCD_TO_BIN(buf[RTC8564_REG_MON_CENT] & 0x1f);
+
+	dt->secs = BCD_TO_BIN(buf[RTC8564_REG_SEC] & 0x7f);
+	dt->vl = (buf[RTC8564_REG_SEC] & 0x80) == 0x80;
+	dt->mins = BCD_TO_BIN(buf[RTC8564_REG_MIN] & 0x7f);
+	dt->hours = BCD_TO_BIN(buf[RTC8564_REG_HR] & 0x3f);
+
+	_DBGRTCTM(2, *dt);
+
+	return 0;
+}
+
+static int
+rtc8564_set_datetime(struct i2c_client *client, struct rtc_tm *dt, int datetoo)
+{
+	int ret, len = 5;
+	unsigned char buf[15];
+
+	_DBG(1, "client=%p, dt=%p", client, dt);
+
+	if (!dt || !client)
+		return -EINVAL;
+
+	_DBGRTCTM(2, *dt);
+
+	buf[RTC8564_REG_CTRL1] = CTRL1(client) | RTC8564_CTRL1_STOP;
+	buf[RTC8564_REG_CTRL2] = CTRL2(client);
+	buf[RTC8564_REG_SEC] = BIN_TO_BCD(dt->secs);
+	buf[RTC8564_REG_MIN] = BIN_TO_BCD(dt->mins);
+	buf[RTC8564_REG_HR] = BIN_TO_BCD(dt->hours);
+
+	if (datetoo) {
+		len += 5;
+		buf[RTC8564_REG_DAY] = BIN_TO_BCD(dt->mday);
+		buf[RTC8564_REG_WDAY] = BIN_TO_BCD(dt->wday);
+		buf[RTC8564_REG_MON_CENT] = BIN_TO_BCD(dt->mon) & 0x1f;
+		/* century stored in minute alarm reg */
+		buf[RTC8564_REG_YEAR] = BIN_TO_BCD(dt->year % 100);
+		buf[RTC8564_REG_AL_MIN] = BIN_TO_BCD(dt->year / 100);
+	}
+
+	ret = rtc8564_write(client, 0, buf, len);
+	if (ret) {
+		_DBG(1, "error writing data! %d", ret);
+	}
+
+	buf[RTC8564_REG_CTRL1] = CTRL1(client);
+	ret = rtc8564_write(client, 0, buf, 1);
+	if (ret) {
+		_DBG(1, "error writing data! %d", ret);
+	}
+
+	return ret;
+}
+
+static int rtc8564_get_ctrl(struct i2c_client *client, unsigned int *ctrl)
+{
+	struct rtc8564_data *data = i2c_get_clientdata(client);
+
+	if (!ctrl || !client)
+		return -1;
+
+	*ctrl = data->ctrl;
+	return 0;
+}
+
+static int rtc8564_set_ctrl(struct i2c_client *client, unsigned int *ctrl)
+{
+	struct rtc8564_data *data = i2c_get_clientdata(client);
+	unsigned char buf[2];
+
+	if (!ctrl || !client)
+		return -1;
+
+	buf[0] = *ctrl & 0xff;
+	buf[1] = (*ctrl & 0xff00) >> 8;
+	data->ctrl = *ctrl;
+
+	return rtc8564_write(client, 0, buf, 2);
+}
+
+static int rtc8564_read_mem(struct i2c_client *client, struct mem *mem)
+{
+
+	if (!mem || !client)
+		return -EINVAL;
+
+	return rtc8564_read(client, mem->loc, mem->data, mem->nr);
+}
+
+static int rtc8564_write_mem(struct i2c_client *client, struct mem *mem)
+{
+
+	if (!mem || !client)
+		return -EINVAL;
+
+	return rtc8564_write(client, mem->loc, mem->data, mem->nr);
+}
+
+static int
+rtc8564_command(struct i2c_client *client, unsigned int cmd, void *arg)
+{
+
+	_DBG(1, "cmd=%d", cmd);
+
+	switch (cmd) {
+	case RTC_GETDATETIME:
+		return rtc8564_get_datetime(client, arg);
+
+	case RTC_SETTIME:
+		return rtc8564_set_datetime(client, arg, 0);
+
+	case RTC_SETDATETIME:
+		return rtc8564_set_datetime(client, arg, 1);
+
+	case RTC_GETCTRL:
+		return rtc8564_get_ctrl(client, arg);
+
+	case RTC_SETCTRL:
+		return rtc8564_set_ctrl(client, arg);
+
+	case MEM_READ:
+		return rtc8564_read_mem(client, arg);
+
+	case MEM_WRITE:
+		return rtc8564_write_mem(client, arg);
+
+	default:
+		return -EINVAL;
+	}
+}
+
+static struct i2c_driver rtc8564_driver = {
+	.owner		= THIS_MODULE,
+	.name		= "RTC8564",
+	.id		= I2C_DRIVERID_RTC8564,
+	.flags		= I2C_DF_NOTIFY,
+	.attach_adapter = rtc8564_probe,
+	.detach_client	= rtc8564_detach,
+	.command	= rtc8564_command
+};
+
+static __init int rtc8564_init(void)
+{
+	return i2c_add_driver(&rtc8564_driver);
+}
+
+static __exit void rtc8564_exit(void)
+{
+	i2c_del_driver(&rtc8564_driver);
+}
+
+MODULE_AUTHOR("Stefan Eletzhofer <Stefan.Eletzhofer@eletztrick.de>");
+MODULE_DESCRIPTION("EPSON RTC8564 Driver");
+MODULE_LICENSE("GPL");
+
+module_init(rtc8564_init);
+module_exit(rtc8564_exit);
diff -Nru a/drivers/i2c/chips/rtc8564.h b/drivers/i2c/chips/rtc8564.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/drivers/i2c/chips/rtc8564.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,78 @@
+/*
+ *  linux/drivers/i2c/chips/rtc8564.h
+ *
+ *  Copyright (C) 2002-2004 Stefan Eletzhofer
+ *
+ *	based on linux/drivers/acron/char/pcf8583.h
+ *  Copyright (C) 2000 Russell King
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+struct rtc_tm {
+	unsigned char	secs;
+	unsigned char	mins;
+	unsigned char	hours;
+	unsigned char	mday;
+	unsigned char	mon;
+	unsigned short	year; /* xxxx 4 digits :) */
+	unsigned char	wday;
+	unsigned char	vl;
+};
+
+struct mem {
+	unsigned int	loc;
+	unsigned int	nr;
+	unsigned char	*data;
+};
+
+#define RTC_GETDATETIME	0
+#define RTC_SETTIME	1
+#define RTC_SETDATETIME	2
+#define RTC_GETCTRL	3
+#define RTC_SETCTRL	4
+#define MEM_READ	5
+#define MEM_WRITE	6
+
+#define RTC8564_REG_CTRL1		0x0 /* T  0 S 0 | T 0 0 0 */
+#define RTC8564_REG_CTRL2		0x1 /* 0  0 0 TI/TP | AF TF AIE TIE */
+#define RTC8564_REG_SEC			0x2 /* VL 4 2 1 | 8 4 2 1 */
+#define RTC8564_REG_MIN			0x3 /* x  4 2 1 | 8 4 2 1 */
+#define RTC8564_REG_HR			0x4 /* x  x 2 1 | 8 4 2 1 */
+#define RTC8564_REG_DAY			0x5 /* x  x 2 1 | 8 4 2 1 */
+#define RTC8564_REG_WDAY		0x6 /* x  x x x | x 4 2 1 */
+#define RTC8564_REG_MON_CENT	0x7 /* C  x x 1 | 8 4 2 1 */
+#define RTC8564_REG_YEAR		0x8 /* 8  4 2 1 | 8 4 2 1 */
+#define RTC8564_REG_AL_MIN		0x9 /* AE 4 2 1 | 8 4 2 1 */
+#define RTC8564_REG_AL_HR		0xa /* AE 4 2 1 | 8 4 2 1 */
+#define RTC8564_REG_AL_DAY		0xb /* AE x 2 1 | 8 4 2 1 */
+#define RTC8564_REG_AL_WDAY		0xc /* AE x x x | x 4 2 1 */
+#define RTC8564_REG_CLKOUT		0xd /* FE x x x | x x FD1 FD0 */
+#define RTC8564_REG_TCTL		0xe /* TE x x x | x x FD1 FD0 */
+#define RTC8564_REG_TIMER		0xf /* 8 bit binary */
+
+/* Control reg */
+#define RTC8564_CTRL1_TEST1		(1<<3)
+#define RTC8564_CTRL1_STOP		(1<<5)
+#define RTC8564_CTRL1_TEST2		(1<<7)
+
+#define RTC8564_CTRL2_TIE		(1<<0)
+#define RTC8564_CTRL2_AIE		(1<<1)
+#define RTC8564_CTRL2_TF		(1<<2)
+#define RTC8564_CTRL2_AF		(1<<3)
+#define RTC8564_CTRL2_TI_TP		(1<<4)
+
+/* CLKOUT frequencies */
+#define RTC8564_FD_32768HZ		(0x0)
+#define RTC8564_FD_1024HZ		(0x1)
+#define RTC8564_FD_32			(0x2)
+#define RTC8564_FD_1HZ			(0x3)
+
+/* Timer CTRL */
+#define RTC8564_TD_4096HZ		(0x0)
+#define RTC8564_TD_64HZ			(0x1)
+#define RTC8564_TD_1HZ			(0x2)
+#define RTC8564_TD_1_60HZ		(0x3)
+
+#define I2C_DRIVERID_RTC8564 0xf000
diff -Nru a/drivers/i2c/chips/via686a.c b/drivers/i2c/chips/via686a.c
--- a/drivers/i2c/chips/via686a.c	Sun May 16 01:18:33 2004
+++ b/drivers/i2c/chips/via686a.c	Sun May 16 01:18:33 2004
@@ -108,7 +108,7 @@
 #define VIA686A_TEMP_MODE_MASK 0x3F
 #define VIA686A_TEMP_MODE_CONTINUOUS (0x00)
 
-/* Conversions. Rounding and limit checking is only done on the TO_REG
+/* Conversions. Limit checking is only done on the TO_REG
    variants. 
 
 ********* VOLTAGE CONVERSIONS (Bob Dougherty) ********
@@ -123,49 +123,41 @@
  volts = (25*regVal+133)*factor
  regVal = (volts/factor-133)/25
  (These conversions were contributed by Jonathan Teh Soon Yew 
- <j.teh@iname.com>)
- 
- These get us close, but they don't completely agree with what my BIOS 
- says- they are all a bit low.  But, it all we have to go on... */
+ <j.teh@iname.com>) */
 static inline u8 IN_TO_REG(long val, int inNum)
 {
-	/* to avoid floating point, we multiply everything by 100.
-	 val is guaranteed to be positive, so we can achieve the effect of 
-	 rounding by (...*10+5)/10.  Note that the *10 is hidden in the 
-	 /250 (which should really be /2500).
-	 At the end, we need to /100 because we *100 everything and we need
-	 to /10 because of the rounding thing, so we /1000.   */
+	/* To avoid floating point, we multiply constants by 10 (100 for +12V).
+	   Rounding is done (120500 is actually 133000 - 12500).
+	   Remember that val is expressed in 0.001V/bit, which is why we divide
+	   by an additional 10000 (100000 for +12V): 1000 for val and 10 (100)
+	   for the constants. */
 	if (inNum <= 1)
 		return (u8)
-		    SENSORS_LIMIT(((val * 210240 - 13300) / 250 + 5) / 1000, 
-				  0, 255);
+		    SENSORS_LIMIT((val * 21024 - 1205000) / 250000, 0, 255);
 	else if (inNum == 2)
 		return (u8)
-		    SENSORS_LIMIT(((val * 157370 - 13300) / 250 + 5) / 1000, 
-				  0, 255);
+		    SENSORS_LIMIT((val * 15737 - 1205000) / 250000, 0, 255);
 	else if (inNum == 3)
 		return (u8)
-		    SENSORS_LIMIT(((val * 101080 - 13300) / 250 + 5) / 1000, 
-				  0, 255);
+		    SENSORS_LIMIT((val * 10108 - 1205000) / 250000, 0, 255);
 	else
-		return (u8) SENSORS_LIMIT(((val * 41714 - 13300) / 250 + 5)
-					  / 1000, 0, 255);
+		return (u8)
+		    SENSORS_LIMIT((val * 41714 - 12050000) / 2500000, 0, 255);
 }
 
 static inline long IN_FROM_REG(u8 val, int inNum)
 {
-	/* to avoid floating point, we multiply everything by 100.
-	 val is guaranteed to be positive, so we can achieve the effect of
-	 rounding by adding 0.5.  Or, to avoid fp math, we do (...*10+5)/10.
-	 We need to scale with *100 anyway, so no need to /100 at the end. */
+	/* To avoid floating point, we multiply constants by 10 (100 for +12V).
+	   We also multiply them by 1000 because we want 0.001V/bit for the
+	   output value. Rounding is done. */
 	if (inNum <= 1)
-		return (long) (((250000 * val + 13300) / 210240 * 10 + 5) /10);
+		return (long) ((250000 * val + 1330000 + 21024 / 2) / 21024);
 	else if (inNum == 2)
-		return (long) (((250000 * val + 13300) / 157370 * 10 + 5) /10);
+		return (long) ((250000 * val + 1330000 + 15737 / 2) / 15737);
 	else if (inNum == 3)
-		return (long) (((250000 * val + 13300) / 101080 * 10 + 5) /10);
+		return (long) ((250000 * val + 1330000 + 10108 / 2) / 10108);
 	else
-		return (long) (((250000 * val + 13300) / 41714 * 10 + 5) /10);
+		return (long) ((2500000 * val + 13300000 + 41714 / 2) / 41714);
 }
 
 /********* FAN RPM CONVERSIONS ********/
@@ -276,52 +268,31 @@
 	    239, 240
 };
 
-/* Converting temps to (8-bit) hyst and over registers 
- No interpolation here.  Just check the limits and go.
- The +5 effectively rounds off properly and the +50 is because 
- the temps start at -50 */
+/* Converting temps to (8-bit) hyst and over registers
+   No interpolation here.
+   The +50 is because the temps start at -50 */
 static inline u8 TEMP_TO_REG(long val)
 {
-	return (u8)
-	    SENSORS_LIMIT(viaLUT[((val <= -500) ? 0 : (val >= 1100) ? 160 : 
-				  ((val + 5) / 10 + 50))], 0, 255);
+	return viaLUT[val <= -50000 ? 0 : val >= 110000 ? 160 : 
+		      (val < 0 ? val - 500 : val + 500) / 1000 + 50];
 }
 
-/* for 8-bit temperature hyst and over registers 
- The temp values are already *10, so we don't need to do that.
- But we _will_ round these off to the nearest degree with (...*10+5)/10 */
-#define TEMP_FROM_REG(val) ((tempLUT[(val)]*10+5)/10)
-
-/* for 10-bit temperature readings 
- You might _think_ this is too long to inline, but's it's really only
- called once... */
+/* for 8-bit temperature hyst and over registers */
+#define TEMP_FROM_REG(val) (tempLUT[(val)] * 100)
+
+/* for 10-bit temperature readings */
 static inline long TEMP_FROM_REG10(u16 val)
 {
-	/* the temp values are already *10, so we don't need to do that. */
-	long temp;
 	u16 eightBits = val >> 2;
 	u16 twoBits = val & 3;
 
-	/* handle the extremes first (they won't interpolate well! ;-) */
-	if (val == 0)
-		return (long) tempLUT[0];
-	if (val == 1023)
-		return (long) tempLUT[255];
-
-	if (twoBits == 0)
-		return (long) tempLUT[eightBits];
-	else {
-		/* do some interpolation by multipying the lower and upper
-		 bounds by 25, 50 or 75, then /100. */
-		temp = ((25 * (4 - twoBits)) * tempLUT[eightBits]
-			+ (25 * twoBits) * tempLUT[eightBits + 1]);
-		/* increase the magnitude by 50 to achieve rounding. */
-		if (temp > 0)
-			temp += 50;
-		else
-			temp -= 50;
-		return (temp / 100);
-	}
+	/* no interpolation for these */
+	if (twoBits == 0 || eightBits == 255)
+		return TEMP_FROM_REG(eightBits);
+
+	/* do some linear interpolation */
+	return (tempLUT[eightBits] * (4 - twoBits) +
+	        tempLUT[eightBits + 1] * twoBits) * 25;
 }
 
 #define ALARMS_FROM_REG(val) (val)
@@ -375,24 +346,24 @@
 /* 7 voltage sensors */
 static ssize_t show_in(struct device *dev, char *buf, int nr) {
 	struct via686a_data *data = via686a_update_device(dev);
-	return sprintf(buf, "%ld\n", IN_FROM_REG(data->in[nr], nr)*10 );
+	return sprintf(buf, "%ld\n", IN_FROM_REG(data->in[nr], nr));
 }
 
 static ssize_t show_in_min(struct device *dev, char *buf, int nr) {
 	struct via686a_data *data = via686a_update_device(dev);
-	return sprintf(buf, "%ld\n", IN_FROM_REG(data->in_min[nr], nr)*10 );
+	return sprintf(buf, "%ld\n", IN_FROM_REG(data->in_min[nr], nr));
 }
 
 static ssize_t show_in_max(struct device *dev, char *buf, int nr) {
 	struct via686a_data *data = via686a_update_device(dev);
-	return sprintf(buf, "%ld\n", IN_FROM_REG(data->in_max[nr], nr)*10 );
+	return sprintf(buf, "%ld\n", IN_FROM_REG(data->in_max[nr], nr));
 }
 
 static ssize_t set_in_min(struct device *dev, const char *buf, 
 		size_t count, int nr) {
 	struct i2c_client *client = to_i2c_client(dev);
 	struct via686a_data *data = i2c_get_clientdata(client);
-	unsigned long val = simple_strtoul(buf, NULL, 10)/10;
+	unsigned long val = simple_strtoul(buf, NULL, 10);
 	data->in_min[nr] = IN_TO_REG(val,nr);
 	via686a_write_value(client, VIA686A_REG_IN_MIN(nr), 
 			data->in_min[nr]);
@@ -402,7 +373,7 @@
 		size_t count, int nr) {
 	struct i2c_client *client = to_i2c_client(dev);
 	struct via686a_data *data = i2c_get_clientdata(client);
-	unsigned long val = simple_strtoul(buf, NULL, 10)/10;
+	unsigned long val = simple_strtoul(buf, NULL, 10);
 	data->in_max[nr] = IN_TO_REG(val,nr);
 	via686a_write_value(client, VIA686A_REG_IN_MAX(nr), 
 			data->in_max[nr]);
@@ -449,21 +420,21 @@
 /* 3 temperatures */
 static ssize_t show_temp(struct device *dev, char *buf, int nr) {
 	struct via686a_data *data = via686a_update_device(dev);
-	return sprintf(buf, "%ld\n", TEMP_FROM_REG10(data->temp[nr])*100 );
+	return sprintf(buf, "%ld\n", TEMP_FROM_REG10(data->temp[nr]));
 }
 static ssize_t show_temp_over(struct device *dev, char *buf, int nr) {
 	struct via686a_data *data = via686a_update_device(dev);
-	return sprintf(buf, "%ld\n", TEMP_FROM_REG(data->temp_over[nr])*100);
+	return sprintf(buf, "%ld\n", TEMP_FROM_REG(data->temp_over[nr]));
 }
 static ssize_t show_temp_hyst(struct device *dev, char *buf, int nr) {
 	struct via686a_data *data = via686a_update_device(dev);
-	return sprintf(buf, "%ld\n", TEMP_FROM_REG(data->temp_hyst[nr])*100);
+	return sprintf(buf, "%ld\n", TEMP_FROM_REG(data->temp_hyst[nr]));
 }
 static ssize_t set_temp_over(struct device *dev, const char *buf, 
 		size_t count, int nr) {
 	struct i2c_client *client = to_i2c_client(dev);
 	struct via686a_data *data = i2c_get_clientdata(client);
-	int val = simple_strtol(buf, NULL, 10)/100;
+	int val = simple_strtol(buf, NULL, 10);
 	data->temp_over[nr] = TEMP_TO_REG(val);
 	via686a_write_value(client, VIA686A_REG_TEMP_OVER(nr), data->temp_over[nr]);
 	return count;
@@ -472,7 +443,7 @@
 		size_t count, int nr) {
 	struct i2c_client *client = to_i2c_client(dev);
 	struct via686a_data *data = i2c_get_clientdata(client);
-	int val = simple_strtol(buf, NULL, 10)/100;
+	int val = simple_strtol(buf, NULL, 10);
 	data->temp_hyst[nr] = TEMP_TO_REG(val);
 	via686a_write_value(client, VIA686A_REG_TEMP_HYST(nr), data->temp_hyst[nr]);
 	return count;
@@ -602,7 +573,7 @@
 /* This is called when the module is loaded */
 static int via686a_attach_adapter(struct i2c_adapter *adapter)
 {
-	if (!(adapter->class & I2C_ADAP_CLASS_SMBUS))
+	if (!(adapter->class & I2C_CLASS_HWMON))
 		return 0;
 	return i2c_detect(adapter, &addr_data, via686a_detect);
 }
diff -Nru a/drivers/i2c/chips/w83781d.c b/drivers/i2c/chips/w83781d.c
--- a/drivers/i2c/chips/w83781d.c	Sun May 16 01:18:33 2004
+++ b/drivers/i2c/chips/w83781d.c	Sun May 16 01:18:33 2004
@@ -183,8 +183,10 @@
 #define ALARMS_FROM_REG(val)		(val)
 #define PWM_FROM_REG(val)		(val)
 #define PWM_TO_REG(val)			(SENSORS_LIMIT((val),0,255))
-#define BEEP_MASK_FROM_REG(val)		(val)
-#define BEEP_MASK_TO_REG(val)		((val) & 0xffffff)
+#define BEEP_MASK_FROM_REG(val,type)	((type) == as99127f ? \
+					 (val) ^ 0x7fff : (val))
+#define BEEP_MASK_TO_REG(val,type)	((type) == as99127f ? \
+					 (~(val)) & 0x7fff : (val) & 0xffffff)
 
 #define BEEP_ENABLE_TO_REG(val)		((val) ? 1 : 0)
 #define BEEP_ENABLE_FROM_REG(val)	((val) ? 1 : 0)
@@ -539,14 +541,18 @@
 DEVICE_ATTR(alarms, S_IRUGO, show_alarms_reg, NULL)
 #define device_create_file_alarms(client) \
 device_create_file(&client->dev, &dev_attr_alarms);
-#define show_beep_reg(REG, reg) \
-static ssize_t show_beep_##reg (struct device *dev, char *buf) \
-{ \
-	struct w83781d_data *data = w83781d_update_device(dev); \
-	return sprintf(buf,"%ld\n", (long)BEEP_##REG##_FROM_REG(data->beep_##reg)); \
+static ssize_t show_beep_mask (struct device *dev, char *buf)
+{
+	struct w83781d_data *data = w83781d_update_device(dev);
+	return sprintf(buf, "%ld\n",
+		       (long)BEEP_MASK_FROM_REG(data->beep_mask, data->type));
+}
+static ssize_t show_beep_enable (struct device *dev, char *buf)
+{
+	struct w83781d_data *data = w83781d_update_device(dev);
+	return sprintf(buf, "%ld\n",
+		       (long)BEEP_ENABLE_FROM_REG(data->beep_enable));
 }
-show_beep_reg(ENABLE, enable);
-show_beep_reg(MASK, mask);
 
 #define BEEP_ENABLE			0	/* Store beep_enable */
 #define BEEP_MASK			1	/* Store beep_mask */
@@ -562,7 +568,7 @@
 	val = simple_strtoul(buf, NULL, 10);
 
 	if (update_mask == BEEP_MASK) {	/* We are storing beep_mask */
-		data->beep_mask = BEEP_MASK_TO_REG(val);
+		data->beep_mask = BEEP_MASK_TO_REG(val, data->type);
 		w83781d_write_value(client, W83781D_REG_BEEP_INTS1,
 				    data->beep_mask & 0xff);
 
@@ -905,7 +911,7 @@
 static int
 w83781d_attach_adapter(struct i2c_adapter *adapter)
 {
-	if (!(adapter->class & I2C_ADAP_CLASS_SMBUS))
+	if (!(adapter->class & I2C_CLASS_HWMON))
 		return 0;
 	return i2c_detect(adapter, &addr_data, w83781d_detect);
 }
@@ -1330,7 +1336,13 @@
 		return err;
 	}
 
-	kfree(i2c_get_clientdata(client));
+	if (i2c_get_clientdata(client)==NULL) {
+		/* subclients */
+		kfree(client);
+	} else {
+		/* main client */
+		kfree(i2c_get_clientdata(client));
+	}
 
 	return 0;
 }
diff -Nru a/drivers/i2c/chips/w83l785ts.c b/drivers/i2c/chips/w83l785ts.c
--- a/drivers/i2c/chips/w83l785ts.c	Sun May 16 01:18:34 2004
+++ b/drivers/i2c/chips/w83l785ts.c	Sun May 16 01:18:34 2004
@@ -145,7 +145,7 @@
 
 static int w83l785ts_attach_adapter(struct i2c_adapter *adapter)
 {
-	if (!(adapter->class & I2C_ADAP_CLASS_SMBUS))
+	if (!(adapter->class & I2C_CLASS_HWMON))
 		return 0;
 	return i2c_detect(adapter, &addr_data, w83l785ts_detect);
 }
diff -Nru a/drivers/ide/ide-disk.c b/drivers/ide/ide-disk.c
--- a/drivers/ide/ide-disk.c	Sun May 16 01:18:34 2004
+++ b/drivers/ide/ide-disk.c	Sun May 16 01:18:34 2004
@@ -740,8 +740,6 @@
 		return __ide_do_rw_disk(drive, rq, block);
 }
 
-static int do_idedisk_flushcache(ide_drive_t *drive);
-
 static u8 idedisk_dump_status (ide_drive_t *drive, const char *msg, u8 stat)
 {
 	ide_hwif_t *hwif = HWIF(drive);
@@ -1359,11 +1357,18 @@
 	return 0;
 }
 
+/* check if CACHE FLUSH (EXT) command is supported (bits defined in ATA-6) */
+#define ide_id_has_flush_cache(id)	((id)->cfs_enable_2 & 0x3000)
+
+/* some Maxtor disks have bit 13 defined incorrectly so check bit 10 too */
+#define ide_id_has_flush_cache_ext(id)	\
+	(((id)->cfs_enable_2 & 0x2400) == 0x2400)
+
 static int write_cache (ide_drive_t *drive, int arg)
 {
 	ide_task_t args;
 
-	if (!(drive->id->cfs_enable_2 & 0x3000))
+	if (!ide_id_has_flush_cache(drive->id))
 		return 1;
 
 	memset(&args, 0, sizeof(ide_task_t));
@@ -1383,7 +1388,7 @@
 	ide_task_t args;
 
 	memset(&args, 0, sizeof(ide_task_t));
-	if (drive->id->cfs_enable_2 & 0x2400)
+	if (ide_id_has_flush_cache_ext(drive->id))
 		args.tfRegister[IDE_COMMAND_OFFSET]	= WIN_FLUSH_CACHE_EXT;
 	else
 		args.tfRegister[IDE_COMMAND_OFFSET]	= WIN_FLUSH_CACHE;
@@ -1513,11 +1518,11 @@
 	switch (rq->pm->pm_step) {
 	case idedisk_pm_flush_cache:	/* Suspend step 1 (flush cache) */
 		/* Not supported? Switch to next step now. */
-		if (!drive->wcache) {
+		if (!drive->wcache || !ide_id_has_flush_cache(drive->id)) {
 			idedisk_complete_power_step(drive, rq, 0, 0);
 			return ide_stopped;
 		}
-		if (drive->id->cfs_enable_2 & 0x2400)
+		if (ide_id_has_flush_cache_ext(drive->id))
 			args->tfRegister[IDE_COMMAND_OFFSET] = WIN_FLUSH_CACHE_EXT;
 		else
 			args->tfRegister[IDE_COMMAND_OFFSET] = WIN_FLUSH_CACHE;
@@ -1678,8 +1683,12 @@
 #endif	/* CONFIG_IDEDISK_MULTI_MODE */
 	}
 	drive->no_io_32bit = id->dword_io ? 1 : 0;
-	if (drive->id->cfs_enable_2 & 0x3000)
-		write_cache(drive, (id->cfs_enable_2 & 0x3000));
+
+	/* write cache enabled? */
+	if ((id->csfo & 1) || (id->cfs_enable_1 & (1 << 5)))
+		drive->wcache = 1;
+
+	write_cache(drive, 1);
 
 #ifdef CONFIG_BLK_DEV_IDE_TCQ_DEFAULT
 	if (drive->using_dma)
@@ -1687,9 +1696,17 @@
 #endif
 }
 
+static void ide_cacheflush_p(ide_drive_t *drive)
+{
+	if (!drive->wcache || !ide_id_has_flush_cache(drive->id))
+		return;
+
+	if (do_idedisk_flushcache(drive))
+		printk(KERN_INFO "%s: wcache flush failed!\n", drive->name);
+}
+
 static int idedisk_cleanup (ide_drive_t *drive)
 {
-	static int ide_cacheflush_p(ide_drive_t *drive);
 	struct gendisk *g = drive->disk;
 	ide_cacheflush_p(drive);
 	if (ide_unregister_subdriver(drive))
@@ -1740,7 +1757,6 @@
 
 static int idedisk_open(struct inode *inode, struct file *filp)
 {
-	u8 cf;
 	ide_drive_t *drive = inode->i_bdev->bd_disk->private_data;
 	drive->usage++;
 	if (drive->removable && drive->usage == 1) {
@@ -1758,35 +1774,6 @@
 		if (drive->doorlocking && ide_raw_taskfile(drive, &args, NULL))
 			drive->doorlocking = 0;
 	}
-	drive->wcache = 0;
-	/* Cache enabled? */
-	if (drive->id->csfo & 1)
-		drive->wcache = 1;
-	/* Cache command set available? */
-	if (drive->id->cfs_enable_1 & (1 << 5))
-		drive->wcache = 1;
-	/* ATA6 cache extended commands */
-	cf = drive->id->command_set_2 >> 24;
-	if ((cf & 0xC0) == 0x40 && (cf & 0x30) != 0)
-		drive->wcache = 1;
-	return 0;
-}
-
-static int ide_cacheflush_p(ide_drive_t *drive)
-{
-	if (!(drive->id->cfs_enable_2 & 0x3000))
-		return 0;
-
-	if(drive->wcache)
-	{
-		if (do_idedisk_flushcache(drive))
-		{
-			printk (KERN_INFO "%s: Write Cache FAILED Flushing!\n",
-				drive->name);
-			return -EIO;
-		}
-		return 1;
-	}
 	return 0;
 }
 
@@ -1867,10 +1854,7 @@
 	if ((!drive->head || drive->head > 16) && !drive->select.b.lba) {
 		printk(KERN_ERR "%s: INVALID GEOMETRY: %d PHYSICAL HEADS?\n",
 			drive->name, drive->head);
-		if ((drive->id->cfs_enable_2 & 0x3000) && drive->wcache)
-			if (do_idedisk_flushcache(drive))
-				printk (KERN_INFO "%s: Write Cache FAILED Flushing!\n",
-					drive->name);
+		ide_cacheflush_p(drive);
 		ide_unregister_subdriver(drive);
 		DRIVER(drive)->busy--;
 		goto failed;
diff -Nru a/drivers/ide/pci/cmd640.h b/drivers/ide/pci/cmd640.h
--- a/drivers/ide/pci/cmd640.h	Sun May 16 01:18:36 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,32 +0,0 @@
-#ifndef CMD640_H
-#define CMD640_H
-
-#include <linux/config.h>
-#include <linux/pci.h>
-#include <linux/ide.h>
-
-#define IDE_IGNORE      ((void *)-1)
-
-static ide_pci_device_t cmd640_chipsets[] __initdata = {
-	{
-		.vendor		= PCI_VENDOR_ID_CMD,
-		.device		= PCI_DEVICE_ID_CMD_640,
-		.name		= "CMD640",
-		.init_setup	= NULL,
-		.init_chipset	= NULL,
-		.init_iops	= NULL,
-		.init_hwif	= IDE_IGNORE,
-		.init_dma	= NULL,
-		.channels	= 2,
-		.autodma	= NODMA,
-		.enablebits	= {{0x00,0x00,0x00}, {0x00,0x00,0x00}},
-		.bootable	= ON_BOARD,
-		.extra		= 0
-	},{
-		.vendor		= 0,
-		.device		= 0,
-		.bootable	= EOL,
-	}
-}
-
-#endif /* CMD640_H */
diff -Nru a/drivers/ide/pci/piix.c b/drivers/ide/pci/piix.c
--- a/drivers/ide/pci/piix.c	Sun May 16 01:18:33 2004
+++ b/drivers/ide/pci/piix.c	Sun May 16 01:18:33 2004
@@ -153,7 +153,7 @@
 			case PCI_DEVICE_ID_INTEL_82801EB_11:
 			case PCI_DEVICE_ID_INTEL_82801E_11:
 			case PCI_DEVICE_ID_INTEL_ESB_2:
-			case PCI_DEVICE_ID_INTEL_ICH6_2:
+			case PCI_DEVICE_ID_INTEL_ICH6_19:
 				p += sprintf(p, "PIIX4 Ultra 100 ");
 				break;
 			case PCI_DEVICE_ID_INTEL_82372FB_1:
@@ -292,7 +292,7 @@
 		case PCI_DEVICE_ID_INTEL_82801DB_11:
 		case PCI_DEVICE_ID_INTEL_82801EB_11:
 		case PCI_DEVICE_ID_INTEL_ESB_2:
-		case PCI_DEVICE_ID_INTEL_ICH6_2:
+		case PCI_DEVICE_ID_INTEL_ICH6_19:
 			mode = 3;
 			break;
 		/* UDMA 66 capable */
@@ -627,7 +627,7 @@
 		case PCI_DEVICE_ID_INTEL_82801EB_11:
 		case PCI_DEVICE_ID_INTEL_82801E_11:
 		case PCI_DEVICE_ID_INTEL_ESB_2:
-		case PCI_DEVICE_ID_INTEL_ICH6_2:
+		case PCI_DEVICE_ID_INTEL_ICH6_19:
 		{
 			unsigned int extra = 0;
 			pci_read_config_dword(dev, 0x54, &extra);
@@ -804,7 +804,7 @@
  	{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 18},
 #endif /* !CONFIG_SCSI_SATA */
 	{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB_2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 19},
-	{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 20},
+	{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_19, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 20},
 	{ 0, },
 };
 MODULE_DEVICE_TABLE(pci, piix_pci_tbl);
diff -Nru a/drivers/ide/pci/piix.h b/drivers/ide/pci/piix.h
--- a/drivers/ide/pci/piix.h	Sun May 16 01:18:34 2004
+++ b/drivers/ide/pci/piix.h	Sun May 16 01:18:34 2004
@@ -70,7 +70,7 @@
 	/* 17 */ DECLARE_PIIX_DEV(PCI_DEVICE_ID_INTEL_82801DB_10, "ICH4"),
 	/* 18 */ DECLARE_PIIX_DEV(PCI_DEVICE_ID_INTEL_82801EB_1,  "ICH5-SATA"),
 	/* 19 */ DECLARE_PIIX_DEV(PCI_DEVICE_ID_INTEL_ESB_2,      "ICH5"),
-	/* 20 */ DECLARE_PIIX_DEV(PCI_DEVICE_ID_INTEL_ICH6_2,     "ICH6"),
+	/* 20 */ DECLARE_PIIX_DEV(PCI_DEVICE_ID_INTEL_ICH6_19,     "ICH6"),
 	{
 		.vendor		= 0,
 		.device		= 0,
diff -Nru a/drivers/input/joystick/analog.c b/drivers/input/joystick/analog.c
--- a/drivers/input/joystick/analog.c	Sun May 16 01:18:36 2004
+++ b/drivers/input/joystick/analog.c	Sun May 16 01:18:36 2004
@@ -142,7 +142,7 @@
 
 #ifdef __i386__
 #define GET_TIME(x)	do { if (cpu_has_tsc) rdtscl(x); else x = get_time_pit(); } while (0)
-#define DELTA(x,y)	(cpu_has_tsc?((y)-(x)):((x)-(y)+((x)<(y)?1193182L/HZ:0)))
+#define DELTA(x,y)	(cpu_has_tsc ? ((y) - (x)) : ((x) - (y) + ((x) < (y) ? CLOCK_TICK_RATE / HZ : 0)))
 #define TIME_NAME	(cpu_has_tsc?"TSC":"PIT")
 static unsigned int get_time_pit(void)
 {
diff -Nru a/drivers/input/misc/98spkr.c b/drivers/input/misc/98spkr.c
--- a/drivers/input/misc/98spkr.c	Sun May 16 01:18:34 2004
+++ b/drivers/input/misc/98spkr.c	Sun May 16 01:18:34 2004
@@ -17,6 +17,7 @@
 #include <linux/module.h>
 #include <linux/init.h>
 #include <linux/input.h>
+#include <asm/8253pit.h>
 #include <asm/io.h>
 
 MODULE_AUTHOR("Osamu Tomita <tomita@cinet.co.jp>");
@@ -44,7 +45,7 @@
 	} 
 
 	if (value > 20 && value < 32767)
-		count = CLOCK_TICK_RATE / value;
+		count = PIT_TICK_RATE / value;
 	
 	spin_lock_irqsave(&i8253_beep_lock, flags);
 
diff -Nru a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig
--- a/drivers/input/misc/Kconfig	Sun May 16 01:18:34 2004
+++ b/drivers/input/misc/Kconfig	Sun May 16 01:18:34 2004
@@ -14,7 +14,7 @@
 
 config INPUT_PCSPKR
 	tristate "PC Speaker support"
-	depends on INPUT && INPUT_MISC
+	depends on (ALPHA || X86 || X86_64 || MIPS) && INPUT && INPUT_MISC
 	help
 	  Say Y here if you want the standard PC Speaker to be used for
 	  bells and whistles.
diff -Nru a/drivers/input/misc/pcspkr.c b/drivers/input/misc/pcspkr.c
--- a/drivers/input/misc/pcspkr.c	Sun May 16 01:18:35 2004
+++ b/drivers/input/misc/pcspkr.c	Sun May 16 01:18:35 2004
@@ -16,6 +16,7 @@
 #include <linux/module.h>
 #include <linux/init.h>
 #include <linux/input.h>
+#include <asm/8253pit.h>
 #include <asm/io.h>
 
 MODULE_AUTHOR("Vojtech Pavlik <vojtech@ucw.cz>");
@@ -43,7 +44,7 @@
 	} 
 
 	if (value > 20 && value < 32767)
-		count = CLOCK_TICK_RATE / value;
+		count = PIT_TICK_RATE / value;
 	
 	spin_lock_irqsave(&i8253_beep_lock, flags);
 
diff -Nru a/drivers/isdn/hardware/avm/avm_cs.c b/drivers/isdn/hardware/avm/avm_cs.c
--- a/drivers/isdn/hardware/avm/avm_cs.c	Sun May 16 01:18:33 2004
+++ b/drivers/isdn/hardware/avm/avm_cs.c	Sun May 16 01:18:33 2004
@@ -505,12 +505,12 @@
 } /* avmcs_event */
 
 static struct pcmcia_driver avmcs_driver = {
-	.owner		= THIS_MODULE,
-	.drv		= {
-		.name	= "avmcs_cs",
+	.owner	= THIS_MODULE,
+	.drv	= {
+		.name	= "avm_cs",
 	},
-	.attach		= avmcs_attach,
-	.detach		= avmcs_detach,
+	.attach	= avmcs_attach,
+	.detach	= avmcs_detach,
 };
 
 static int __init avmcs_init(void)
diff -Nru a/drivers/isdn/hisax/st5481_b.c b/drivers/isdn/hisax/st5481_b.c
--- a/drivers/isdn/hisax/st5481_b.c	Sun May 16 01:18:34 2004
+++ b/drivers/isdn/hisax/st5481_b.c	Sun May 16 01:18:34 2004
@@ -257,13 +257,18 @@
 static int st5481_setup_b_out(struct st5481_bcs *bcs)
 {
 	struct usb_device *dev = bcs->adapter->usb_dev;
-	struct usb_host_interface *altsetting;
+	struct usb_interface *intf;
+	struct usb_host_interface *altsetting = NULL;
 	struct usb_host_endpoint *endpoint;
   	struct st5481_b_out *b_out = &bcs->b_out;
 
 	DBG(4,"");
 
-	altsetting = &(dev->config->interface[0]->altsetting[3]);
+	intf = usb_ifnum_to_if(dev, 0);
+	if (intf)
+		altsetting = usb_altnum_to_altsetting(intf, 3);
+	if (!altsetting)
+		return -ENXIO;
 
 	// Allocate URBs and buffers for the B channel out
 	endpoint = &altsetting->endpoint[EP_B1_OUT - 1 + bcs->channel * 2];
diff -Nru a/drivers/isdn/hisax/st5481_d.c b/drivers/isdn/hisax/st5481_d.c
--- a/drivers/isdn/hisax/st5481_d.c	Sun May 16 01:18:35 2004
+++ b/drivers/isdn/hisax/st5481_d.c	Sun May 16 01:18:35 2004
@@ -652,13 +652,18 @@
 static int st5481_setup_d_out(struct st5481_adapter *adapter)
 {
 	struct usb_device *dev = adapter->usb_dev;
-	struct usb_host_interface *altsetting;
+	struct usb_interface *intf;
+	struct usb_host_interface *altsetting = NULL;
 	struct usb_host_endpoint *endpoint;
 	struct st5481_d_out *d_out = &adapter->d_out;
 
 	DBG(2,"");
 
-	altsetting = &(dev->config->interface[0]->altsetting[3]);
+	intf = usb_ifnum_to_if(dev, 0);
+	if (intf)
+		altsetting = usb_altnum_to_altsetting(intf, 3);
+	if (!altsetting)
+		return -ENXIO;
 
 	// Allocate URBs and buffers for the D channel out
 	endpoint = &altsetting->endpoint[EP_D_OUT-1];
diff -Nru a/drivers/isdn/hisax/st5481_usb.c b/drivers/isdn/hisax/st5481_usb.c
--- a/drivers/isdn/hisax/st5481_usb.c	Sun May 16 01:18:35 2004
+++ b/drivers/isdn/hisax/st5481_usb.c	Sun May 16 01:18:35 2004
@@ -244,7 +244,8 @@
 	struct usb_device *dev = adapter->usb_dev;
 	struct st5481_ctrl *ctrl = &adapter->ctrl;
 	struct st5481_intr *intr = &adapter->intr;
-	struct usb_host_interface *altsetting;
+	struct usb_interface *intf;
+	struct usb_host_interface *altsetting = NULL;
 	struct usb_host_endpoint *endpoint;
 	int status;
 	struct urb *urb;
@@ -257,8 +258,11 @@
 		return status;
 	}
 
-	
-	altsetting = &(dev->config->interface[0]->altsetting[3]);	
+	intf = usb_ifnum_to_if(dev, 0);
+	if (intf)
+		altsetting = usb_altnum_to_altsetting(intf, 3);
+	if (!altsetting)
+		return -ENXIO;
 
 	// Check if the config is sane
 	if ( altsetting->desc.bNumEndpoints != 7 ) {
diff -Nru a/drivers/macintosh/adb.c b/drivers/macintosh/adb.c
--- a/drivers/macintosh/adb.c	Sun May 16 01:18:37 2004
+++ b/drivers/macintosh/adb.c	Sun May 16 01:18:37 2004
@@ -10,7 +10,7 @@
  *
  * To do:
  *
- * - /proc/adb to list the devices and infos
+ * - /sys/bus/adb to list the devices and infos
  * - more /dev/adb to allow userland to receive the
  *   flow of auto-polling datas from a given device.
  * - move bus probe to a kernel thread
@@ -23,7 +23,6 @@
 #include <linux/slab.h>
 #include <linux/module.h>
 #include <linux/fs.h>
-#include <linux/devfs_fs_kernel.h>
 #include <linux/mm.h>
 #include <linux/sched.h>
 #include <linux/smp_lock.h>
@@ -36,6 +35,7 @@
 #include <linux/delay.h>
 #include <linux/spinlock.h>
 #include <linux/completion.h>
+#include <linux/device.h>
 #include <asm/uaccess.h>
 #include <asm/semaphore.h>
 #ifdef CONFIG_PPC
@@ -75,6 +75,8 @@
 	NULL
 };
 
+static struct class_simple *adb_dev_class;
+
 struct adb_driver *adb_controller;
 struct notifier_block *adb_client_list = NULL;
 static int adb_got_sleep;
@@ -883,6 +885,7 @@
 }
 
 static struct file_operations adb_fops = {
+	.owner		= THIS_MODULE,
 	.llseek		= no_llseek,
 	.read		= adb_read,
 	.write		= adb_write,
@@ -893,9 +896,13 @@
 static void
 adbdev_init(void)
 {
-	if (register_chrdev(ADB_MAJOR, "adb", &adb_fops))
+	if (register_chrdev(ADB_MAJOR, "adb", &adb_fops)) {
 		printk(KERN_ERR "adb: unable to get major %d\n", ADB_MAJOR);
-	else
-		devfs_mk_cdev(MKDEV(ADB_MAJOR, 0),
-				S_IFCHR | S_IRUSR | S_IWUSR, "adb");
+		return;
+	}
+	adb_dev_class = class_simple_create(THIS_MODULE, "adb");
+	if (IS_ERR(adb_dev_class)) {
+		return;
+	}
+	class_simple_device_add(adb_dev_class, MKDEV(ADB_MAJOR, 0), NULL, "adb");
 }
diff -Nru a/drivers/media/radio/radio-typhoon.c b/drivers/media/radio/radio-typhoon.c
--- a/drivers/media/radio/radio-typhoon.c	Sun May 16 01:18:34 2004
+++ b/drivers/media/radio/radio-typhoon.c	Sun May 16 01:18:34 2004
@@ -326,7 +326,6 @@
 		return -EINVAL;
 	}
 	typhoon_unit.iobase = io;
-	init_MUTEX(&typhoon_unit.lock);
 
 	if (mutefreq < 87000 || mutefreq > 108500) {
 		printk(KERN_ERR "radio-typhoon: You must set a frequency (in kHz) used when muting the card,\n");
@@ -337,6 +336,7 @@
 #endif /* MODULE */
 
 	printk(KERN_INFO BANNER);
+	init_MUTEX(&typhoon_unit.lock);
 	io = typhoon_unit.iobase;
 	if (!request_region(io, 8, "typhoon")) {
 		printk(KERN_ERR "radio-typhoon: port 0x%x already in use\n",
diff -Nru a/drivers/media/video/bt832.c b/drivers/media/video/bt832.c
--- a/drivers/media/video/bt832.c	Sun May 16 01:18:36 2004
+++ b/drivers/media/video/bt832.c	Sun May 16 01:18:36 2004
@@ -197,7 +197,7 @@
 
 static int bt832_probe(struct i2c_adapter *adap)
 {
-	if (adap->class & I2C_ADAP_CLASS_TV_ANALOG)
+	if (adap->class & I2C_CLASS_TV_ANALOG)
 		return i2c_probe(adap, &addr_data, bt832_attach);
 	return 0;
 }
diff -Nru a/drivers/media/video/bttv-i2c.c b/drivers/media/video/bttv-i2c.c
--- a/drivers/media/video/bttv-i2c.c	Sun May 16 01:18:33 2004
+++ b/drivers/media/video/bttv-i2c.c	Sun May 16 01:18:33 2004
@@ -108,8 +108,8 @@
 	.inc_use           = bttv_inc_use,
 	.dec_use           = bttv_dec_use,
 #endif
-#ifdef I2C_ADAP_CLASS_TV_ANALOG
-	.class             = I2C_ADAP_CLASS_TV_ANALOG,
+#ifdef I2C_CLASS_TV_ANALOG
+	.class             = I2C_CLASS_TV_ANALOG,
 #endif
 	I2C_DEVNAME("bt848"),
 	.id                = I2C_HW_B_BT848,
@@ -291,8 +291,8 @@
 	.inc_use       = bttv_inc_use,
 	.dec_use       = bttv_dec_use,
 #endif
-#ifdef I2C_ADAP_CLASS_TV_ANALOG
-	.class         = I2C_ADAP_CLASS_TV_ANALOG,
+#ifdef I2C_CLASS_TV_ANALOG
+	.class         = I2C_CLASS_TV_ANALOG,
 #endif
 	I2C_DEVNAME("bt878"),
 	.id            = I2C_ALGO_BIT | I2C_HW_B_BT848 /* FIXME */,
diff -Nru a/drivers/media/video/cpia_usb.c b/drivers/media/video/cpia_usb.c
--- a/drivers/media/video/cpia_usb.c	Sun May 16 01:18:33 2004
+++ b/drivers/media/video/cpia_usb.c	Sun May 16 01:18:33 2004
@@ -499,7 +499,7 @@
 	if (udev->descriptor.bNumConfigurations != 1)
 		return -ENODEV;
 
-	interface = &intf->altsetting[0];
+	interface = intf->cur_altsetting;
 
 	printk(KERN_INFO "USB CPiA camera found\n");
 
@@ -620,8 +620,6 @@
 		wake_up_interruptible(&ucpia->wq_stream);
 
 	udev = interface_to_usbdev(intf);
-	usb_driver_release_interface(&cpia_driver,
-				     udev->actconfig->interface[0]);
 
 	ucpia->curbuff = ucpia->workbuff = NULL;
 
diff -Nru a/drivers/media/video/cx88/cx88-i2c.c b/drivers/media/video/cx88/cx88-i2c.c
--- a/drivers/media/video/cx88/cx88-i2c.c	Sun May 16 01:18:34 2004
+++ b/drivers/media/video/cx88/cx88-i2c.c	Sun May 16 01:18:34 2004
@@ -128,8 +128,8 @@
 	.inc_use           = cx8800_inc_use,
 	.dec_use           = cx8800_dec_use,
 #endif
-#ifdef I2C_ADAP_CLASS_TV_ANALOG
-	.class             = I2C_ADAP_CLASS_TV_ANALOG,
+#ifdef I2C_CLASS_TV_ANALOG
+	.class             = I2C_CLASS_TV_ANALOG,
 #endif
 	I2C_DEVNAME("cx2388x"),
 	.id                = I2C_HW_B_BT848,
diff -Nru a/drivers/media/video/dpc7146.c b/drivers/media/video/dpc7146.c
--- a/drivers/media/video/dpc7146.c	Sun May 16 01:18:34 2004
+++ b/drivers/media/video/dpc7146.c	Sun May 16 01:18:34 2004
@@ -106,7 +106,7 @@
 	   video port pins should be enabled here ?! */
 	saa7146_write(dev, MC1, (MASK_08 | MASK_24 | MASK_10 | MASK_26));
 
-	saa7146_i2c_adapter_prepare(dev, &dpc->i2c_adapter, I2C_ADAP_CLASS_TV_ANALOG, SAA7146_I2C_BUS_BIT_RATE_480);
+	saa7146_i2c_adapter_prepare(dev, &dpc->i2c_adapter, I2C_CLASS_TV_ANALOG, SAA7146_I2C_BUS_BIT_RATE_480);
 	if(i2c_add_adapter(&dpc->i2c_adapter) < 0) {
 		DEB_S(("cannot register i2c-device. skipping.\n"));
 		kfree(dpc);
diff -Nru a/drivers/media/video/hexium_gemini.c b/drivers/media/video/hexium_gemini.c
--- a/drivers/media/video/hexium_gemini.c	Sun May 16 01:18:34 2004
+++ b/drivers/media/video/hexium_gemini.c	Sun May 16 01:18:34 2004
@@ -250,7 +250,7 @@
 	/* enable i2c-port pins */
 	saa7146_write(dev, MC1, (MASK_08 | MASK_24 | MASK_10 | MASK_26));
 
-	saa7146_i2c_adapter_prepare(dev, &hexium->i2c_adapter, I2C_ADAP_CLASS_TV_ANALOG, SAA7146_I2C_BUS_BIT_RATE_480);
+	saa7146_i2c_adapter_prepare(dev, &hexium->i2c_adapter, I2C_CLASS_TV_ANALOG, SAA7146_I2C_BUS_BIT_RATE_480);
 	if (i2c_add_adapter(&hexium->i2c_adapter) < 0) {
 		DEB_S(("cannot register i2c-device. skipping.\n"));
 		kfree(hexium);
diff -Nru a/drivers/media/video/hexium_orion.c b/drivers/media/video/hexium_orion.c
--- a/drivers/media/video/hexium_orion.c	Sun May 16 01:18:37 2004
+++ b/drivers/media/video/hexium_orion.c	Sun May 16 01:18:37 2004
@@ -237,7 +237,7 @@
 	saa7146_write(dev, DD1_STREAM_B, 0x00000000);
 	saa7146_write(dev, MC2, (MASK_09 | MASK_25 | MASK_10 | MASK_26));
 
-	saa7146_i2c_adapter_prepare(dev, &hexium->i2c_adapter, I2C_ADAP_CLASS_TV_ANALOG, SAA7146_I2C_BUS_BIT_RATE_480);
+	saa7146_i2c_adapter_prepare(dev, &hexium->i2c_adapter, I2C_CLASS_TV_ANALOG, SAA7146_I2C_BUS_BIT_RATE_480);
 	if (i2c_add_adapter(&hexium->i2c_adapter) < 0) {
 		DEB_S(("cannot register i2c-device. skipping.\n"));
 		kfree(hexium);
diff -Nru a/drivers/media/video/msp3400.c b/drivers/media/video/msp3400.c
--- a/drivers/media/video/msp3400.c	Sun May 16 01:18:35 2004
+++ b/drivers/media/video/msp3400.c	Sun May 16 01:18:35 2004
@@ -1353,8 +1353,8 @@
 
 static int msp_probe(struct i2c_adapter *adap)
 {
-#ifdef I2C_ADAP_CLASS_TV_ANALOG
-	if (adap->class & I2C_ADAP_CLASS_TV_ANALOG)
+#ifdef I2C_CLASS_TV_ANALOG
+	if (adap->class & I2C_CLASS_TV_ANALOG)
 		return i2c_probe(adap, &addr_data, msp_attach);
 #else
 	switch (adap->id) {
diff -Nru a/drivers/media/video/mxb.c b/drivers/media/video/mxb.c
--- a/drivers/media/video/mxb.c	Sun May 16 01:18:33 2004
+++ b/drivers/media/video/mxb.c	Sun May 16 01:18:33 2004
@@ -223,7 +223,7 @@
 	   video port pins should be enabled here ?! */
 	saa7146_write(dev, MC1, (MASK_08 | MASK_24 | MASK_10 | MASK_26));
 
-	saa7146_i2c_adapter_prepare(dev, &mxb->i2c_adapter, I2C_ADAP_CLASS_TV_ANALOG, SAA7146_I2C_BUS_BIT_RATE_480);
+	saa7146_i2c_adapter_prepare(dev, &mxb->i2c_adapter, I2C_CLASS_TV_ANALOG, SAA7146_I2C_BUS_BIT_RATE_480);
 	if(i2c_add_adapter(&mxb->i2c_adapter) < 0) {
 		DEB_S(("cannot register i2c-device. skipping.\n"));
 		kfree(mxb);
diff -Nru a/drivers/media/video/saa5246a.c b/drivers/media/video/saa5246a.c
--- a/drivers/media/video/saa5246a.c	Sun May 16 01:18:35 2004
+++ b/drivers/media/video/saa5246a.c	Sun May 16 01:18:35 2004
@@ -143,7 +143,7 @@
  */
 static int saa5246a_probe(struct i2c_adapter *adap)
 {
-	if (adap->class & I2C_ADAP_CLASS_TV_ANALOG)
+	if (adap->class & I2C_CLASS_TV_ANALOG)
 		return i2c_probe(adap, &addr_data, saa5246a_attach);
 	return 0;
 }
diff -Nru a/drivers/media/video/saa5249.c b/drivers/media/video/saa5249.c
--- a/drivers/media/video/saa5249.c	Sun May 16 01:18:36 2004
+++ b/drivers/media/video/saa5249.c	Sun May 16 01:18:36 2004
@@ -219,7 +219,7 @@
  
 static int saa5249_probe(struct i2c_adapter *adap)
 {
-	if (adap->class & I2C_ADAP_CLASS_TV_ANALOG)
+	if (adap->class & I2C_CLASS_TV_ANALOG)
 		return i2c_probe(adap, &addr_data, saa5249_attach);
 	return 0;
 }
diff -Nru a/drivers/media/video/saa7111.c b/drivers/media/video/saa7111.c
--- a/drivers/media/video/saa7111.c	Sun May 16 01:18:34 2004
+++ b/drivers/media/video/saa7111.c	Sun May 16 01:18:34 2004
@@ -9,6 +9,9 @@
  * Changes by Ronald Bultje <rbultje@ronald.bitfreak.net>
  *    - moved over to linux>=2.4.x i2c protocol (1/1/2003)
  *
+ * Changes by Michael Hunold <michael@mihu.de>
+ *    - implemented DECODER_SET_GPIO, DECODER_INIT, DECODER_SET_VBI_BYPASS
+ *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
@@ -112,7 +115,7 @@
 		u8 block_data[32];
 
 		msg.addr = client->addr;
-		msg.flags = client->flags;
+		msg.flags = 0;
 		while (len >= 2) {
 			msg.buf = (char *) block_data;
 			msg.len = 0;
@@ -142,6 +145,13 @@
 	return ret;
 }
 
+static int
+saa7111_init_decoder (struct i2c_client *client,
+	      struct video_decoder_init *init)
+{
+	return saa7111_write_block(client, init->data, init->len);
+}
+
 static inline int
 saa7111_read (struct i2c_client *client,
 	      u8                 reg)
@@ -151,7 +161,7 @@
 
 /* ----------------------------------------------------------------------- */
 
-static const unsigned char init[] = {
+static const unsigned char saa7111_i2c_init[] = {
 	0x00, 0x00,		/* 00 - ID byte */
 	0x01, 0x00,		/* 01 - reserved */
 
@@ -201,8 +211,18 @@
 	switch (cmd) {
 
 	case 0:
-		//saa7111_write_block(client, init, sizeof(init));
-		break;
+	case DECODER_INIT:
+	{
+		struct video_decoder_init *init = arg;
+		if (NULL != init)
+			return saa7111_init_decoder(client, init);
+		else {
+			struct video_decoder_init vdi;
+			vdi.data = saa7111_i2c_init;
+			vdi.len = sizeof(saa7111_i2c_init);
+			return saa7111_init_decoder(client, &vdi);
+		}
+	}
 
 	case DECODER_DUMP:
 	{
@@ -274,6 +294,32 @@
 	}
 		break;
 
+	case DECODER_SET_GPIO:
+	{
+		int *iarg = arg;
+		if (0 != *iarg) {
+			saa7111_write(client, 0x11,
+				(decoder->reg[0x11] | 0x80));
+		} else {
+			saa7111_write(client, 0x11,
+				(decoder->reg[0x11] & 0x7f));
+		}
+		break;
+	}
+
+	case DECODER_SET_VBI_BYPASS:
+	{
+		int *iarg = arg;
+		if (0 != *iarg) {
+			saa7111_write(client, 0x13,
+				(decoder->reg[0x13] & 0xf0) | 0x0a);
+		} else {
+			saa7111_write(client, 0x13,
+				(decoder->reg[0x13] & 0xf0));
+		}
+		break;
+	}
+
 	case DECODER_SET_NORM:
 	{
 		int *iarg = arg;
@@ -465,6 +511,7 @@
 	int i;
 	struct i2c_client *client;
 	struct saa7111 *decoder;
+	struct video_decoder_init vdi;
 
 	dprintk(1,
 		KERN_INFO
@@ -509,7 +556,9 @@
 		return i;
 	}
 
-	i = saa7111_write_block(client, init, sizeof(init));
+	vdi.data = saa7111_i2c_init;
+	vdi.len = sizeof(saa7111_i2c_init);
+	i = saa7111_init_decoder(client, &vdi);
 	if (i < 0) {
 		dprintk(1, KERN_ERR "%s_attach error: init status %d\n",
 			I2C_NAME(client), i);
diff -Nru a/drivers/media/video/saa7134/saa6752hs.c b/drivers/media/video/saa7134/saa6752hs.c
--- a/drivers/media/video/saa7134/saa6752hs.c	Sun May 16 01:18:36 2004
+++ b/drivers/media/video/saa7134/saa6752hs.c	Sun May 16 01:18:36 2004
@@ -335,7 +335,7 @@
 
 static int saa6752hs_probe(struct i2c_adapter *adap)
 {
-	if (adap->class & I2C_ADAP_CLASS_TV_ANALOG)
+	if (adap->class & I2C_CLASS_TV_ANALOG)
 		return i2c_probe(adap, &addr_data, saa6752hs_attach);
 
 	return 0;
diff -Nru a/drivers/media/video/saa7134/saa7134-i2c.c b/drivers/media/video/saa7134/saa7134-i2c.c
--- a/drivers/media/video/saa7134/saa7134-i2c.c	Sun May 16 01:18:33 2004
+++ b/drivers/media/video/saa7134/saa7134-i2c.c	Sun May 16 01:18:33 2004
@@ -347,8 +347,8 @@
 	.inc_use       = inc_use,
 	.dec_use       = dec_use,
 #endif
-#ifdef I2C_ADAP_CLASS_TV_ANALOG
-	.class         = I2C_ADAP_CLASS_TV_ANALOG,
+#ifdef I2C_CLASS_TV_ANALOG
+	.class         = I2C_CLASS_TV_ANALOG,
 #endif
 	I2C_DEVNAME("saa7134"),
 	.id            = I2C_ALGO_SAA7134,
diff -Nru a/drivers/media/video/tda7432.c b/drivers/media/video/tda7432.c
--- a/drivers/media/video/tda7432.c	Sun May 16 01:18:36 2004
+++ b/drivers/media/video/tda7432.c	Sun May 16 01:18:36 2004
@@ -338,8 +338,8 @@
 
 static int tda7432_probe(struct i2c_adapter *adap)
 {
-#ifdef I2C_ADAP_CLASS_TV_ANALOG
-	if (adap->class & I2C_ADAP_CLASS_TV_ANALOG)
+#ifdef I2C_CLASS_TV_ANALOG
+	if (adap->class & I2C_CLASS_TV_ANALOG)
 		return i2c_probe(adap, &addr_data, tda7432_attach);
 #else
 	if (adap->id == (I2C_ALGO_BIT | I2C_HW_B_BT848))
diff -Nru a/drivers/media/video/tda9875.c b/drivers/media/video/tda9875.c
--- a/drivers/media/video/tda9875.c	Sun May 16 01:18:34 2004
+++ b/drivers/media/video/tda9875.c	Sun May 16 01:18:34 2004
@@ -272,8 +272,8 @@
 
 static int tda9875_probe(struct i2c_adapter *adap)
 {
-#ifdef I2C_ADAP_CLASS_TV_ANALOG
-	if (adap->class & I2C_ADAP_CLASS_TV_ANALOG)
+#ifdef I2C_CLASS_TV_ANALOG
+	if (adap->class & I2C_CLASS_TV_ANALOG)
 		return i2c_probe(adap, &addr_data, tda9875_attach);
 #else
 	if (adap->id == (I2C_ALGO_BIT | I2C_HW_B_BT848))
diff -Nru a/drivers/media/video/tda9887.c b/drivers/media/video/tda9887.c
--- a/drivers/media/video/tda9887.c	Sun May 16 01:18:33 2004
+++ b/drivers/media/video/tda9887.c	Sun May 16 01:18:33 2004
@@ -370,8 +370,8 @@
 
 static int tda9887_probe(struct i2c_adapter *adap)
 {
-#ifdef I2C_ADAP_CLASS_TV_ANALOG
-	if (adap->class & I2C_ADAP_CLASS_TV_ANALOG)
+#ifdef I2C_CLASS_TV_ANALOG
+	if (adap->class & I2C_CLASS_TV_ANALOG)
 		return i2c_probe(adap, &addr_data, tda9887_attach);
 #else
 	switch (adap->id) {
diff -Nru a/drivers/media/video/tuner.c b/drivers/media/video/tuner.c
--- a/drivers/media/video/tuner.c	Sun May 16 01:18:36 2004
+++ b/drivers/media/video/tuner.c	Sun May 16 01:18:36 2004
@@ -1067,8 +1067,8 @@
 	}
 	this_adap = 0;
 
-#ifdef I2C_ADAP_CLASS_TV_ANALOG
-	if (adap->class & I2C_ADAP_CLASS_TV_ANALOG)
+#ifdef I2C_CLASS_TV_ANALOG
+	if (adap->class & I2C_CLASS_TV_ANALOG)
 		return i2c_probe(adap, &addr_data, tuner_attach);
 #else
 	switch (adap->id) {
diff -Nru a/drivers/media/video/tvaudio.c b/drivers/media/video/tvaudio.c
--- a/drivers/media/video/tvaudio.c	Sun May 16 01:18:34 2004
+++ b/drivers/media/video/tvaudio.c	Sun May 16 01:18:34 2004
@@ -1497,8 +1497,8 @@
 
 static int chip_probe(struct i2c_adapter *adap)
 {
-#ifdef I2C_ADAP_CLASS_TV_ANALOG
-	if (adap->class & I2C_ADAP_CLASS_TV_ANALOG)
+#ifdef I2C_CLASS_TV_ANALOG
+	if (adap->class & I2C_CLASS_TV_ANALOG)
 		return i2c_probe(adap, &addr_data, chip_attach);
 #else
 	switch (adap->id) {
diff -Nru a/drivers/media/video/tvmixer.c b/drivers/media/video/tvmixer.c
--- a/drivers/media/video/tvmixer.c	Sun May 16 01:18:36 2004
+++ b/drivers/media/video/tvmixer.c	Sun May 16 01:18:36 2004
@@ -263,8 +263,8 @@
 	struct video_audio va;
 	int i,minor;
 
-#ifdef I2C_ADAP_CLASS_TV_ANALOG
-	if (!(client->adapter->class & I2C_ADAP_CLASS_TV_ANALOG))
+#ifdef I2C_CLASS_TV_ANALOG
+	if (!(client->adapter->class & I2C_CLASS_TV_ANALOG))
 		return -1;
 #else
 	/* TV card ??? */
diff -Nru a/drivers/media/video/videodev.c b/drivers/media/video/videodev.c
--- a/drivers/media/video/videodev.c	Sun May 16 01:18:33 2004
+++ b/drivers/media/video/videodev.c	Sun May 16 01:18:33 2004
@@ -397,12 +397,21 @@
  
 static int __init videodev_init(void)
 {
+	int ret;
+
 	printk(KERN_INFO "Linux video capture interface: v1.00\n");
-	if (register_chrdev(VIDEO_MAJOR,VIDEO_NAME, &video_fops)) {
-		printk("video_dev: unable to get major %d\n", VIDEO_MAJOR);
+	if (register_chrdev(VIDEO_MAJOR, VIDEO_NAME, &video_fops)) {
+		printk(KERN_WARNING "video_dev: unable to get major %d\n", VIDEO_MAJOR);
 		return -EIO;
 	}
-	class_register(&video_class);
+
+	ret = class_register(&video_class);
+	if (ret < 0) {
+		unregister_chrdev(VIDEO_MAJOR, VIDEO_NAME);
+		printk(KERN_WARNING "video_dev: class_register failed\n");
+		return -EIO;
+	}
+
 	return 0;
 }
 
diff -Nru a/drivers/message/fusion/Kconfig b/drivers/message/fusion/Kconfig
--- a/drivers/message/fusion/Kconfig	Sun May 16 01:18:37 2004
+++ b/drivers/message/fusion/Kconfig	Sun May 16 01:18:37 2004
@@ -3,7 +3,7 @@
 
 config FUSION
 	tristate "Fusion MPT (base + ScsiHost) drivers"
-	depends on PCI
+	depends on PCI && SCSI
 	---help---
 	  LSI Logic Fusion(TM) Message Passing Technology (MPT) device support
 	  provides high performance SCSI host initiator, and LAN [1] interface
diff -Nru a/drivers/message/fusion/mptbase.c b/drivers/message/fusion/mptbase.c
--- a/drivers/message/fusion/mptbase.c	Sun May 16 01:18:34 2004
+++ b/drivers/message/fusion/mptbase.c	Sun May 16 01:18:34 2004
@@ -223,6 +223,7 @@
 
 //int		mpt_HardResetHandler(MPT_ADAPTER *ioc, int sleepFlag);
 static int	ProcessEventNotification(MPT_ADAPTER *ioc, EventNotificationReply_t *evReply, int *evHandlers);
+static void	mpt_sp_ioc_info(MPT_ADAPTER *ioc, u32 ioc_status, MPT_FRAME_HDR *mf);
 static void	mpt_fc_log_info(MPT_ADAPTER *ioc, u32 log_info);
 static void	mpt_sp_log_info(MPT_ADAPTER *ioc, u32 log_info);
 
@@ -263,6 +264,8 @@
  */
 
 static struct pci_device_id mptbase_pci_table[] = {
+	{ PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_FC909,
+		PCI_ANY_ID, PCI_ANY_ID },
 	{ PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_FC929,
 		PCI_ANY_ID, PCI_ANY_ID },
 	{ PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_FC919,
@@ -389,6 +392,12 @@
 				else
 					mpt_sp_log_info(ioc, log_info);
 			}
+			if (ioc_stat & MPI_IOCSTATUS_MASK) {
+				if ((int)ioc->chip_type <= (int)FC929)
+						;
+				else
+					mpt_sp_ioc_info(ioc, (u32)ioc_stat, mf);
+			}
 		} else {
 			/*
 			 *  Process turbo (context) reply...
@@ -1350,6 +1359,10 @@
 	}
 
 	ioc->chip_type = FCUNK;
+	if (pdev->device == MPI_MANUFACTPAGE_DEVICEID_FC909) {
+		ioc->chip_type = FC909;
+		ioc->prod_name = "LSIFC909";
+	}
 	if (pdev->device == MPI_MANUFACTPAGE_DEVICEID_FC929) {
 		ioc->chip_type = FC929;
 		ioc->prod_name = "LSIFC929";
@@ -6086,9 +6099,153 @@
 	case 0x00080000:
 		desc = "Outbound DMA Overrun";
 		break;
+	
+	case 0x00090000:
+		desc = "Task Management";
+		break;
+
+	case 0x000A0000:
+		desc = "Device Problem";
+		break;
+
+	case 0x000B0000:
+		desc = "Invalid Phase Change";
+		break;
+
+	case 0x000C0000:
+		desc = "Untagged Table Size";
+		break;
+	
 	}
 
 	printk(MYIOC_s_INFO_FMT "LogInfo(0x%08x): F/W: %s\n", ioc->name, log_info, desc);
+}
+
+/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
+/*
+ *	mpt_sp_ioc_info - IOC information returned from SCSI Parallel IOC.
+ *	@ioc: Pointer to MPT_ADAPTER structure
+ *	@ioc_status: U32 IOCStatus word from IOC
+ *	@mf: Pointer to MPT request frame
+ *
+ *	Refer to lsi/mpi.h.
+ */
+static void
+mpt_sp_ioc_info(MPT_ADAPTER *ioc, u32 ioc_status, MPT_FRAME_HDR *mf)
+{
+	u32 status = ioc_status & MPI_IOCSTATUS_MASK;
+	char *desc = "";
+
+	switch (status) {
+	case MPI_IOCSTATUS_INVALID_FUNCTION: /* 0x0001 */
+		desc = "Invalid Function";
+		break;
+
+	case MPI_IOCSTATUS_BUSY: /* 0x0002 */
+		desc = "Busy";
+		break;
+
+	case MPI_IOCSTATUS_INVALID_SGL: /* 0x0003 */
+		desc = "Invalid SGL";
+		break;
+
+	case MPI_IOCSTATUS_INTERNAL_ERROR: /* 0x0004 */
+		desc = "Internal Error";
+		break;
+
+	case MPI_IOCSTATUS_RESERVED: /* 0x0005 */
+		desc = "Reserved";
+		break;
+
+	case MPI_IOCSTATUS_INSUFFICIENT_RESOURCES: /* 0x0006 */
+		desc = "Insufficient Resources";
+		break;
+
+	case MPI_IOCSTATUS_INVALID_FIELD: /* 0x0007 */
+		desc = "Invalid Field";
+		break;
+
+	case MPI_IOCSTATUS_INVALID_STATE: /* 0x0008 */
+		desc = "Invalid State";
+		break;
+
+	case MPI_IOCSTATUS_CONFIG_INVALID_ACTION: /* 0x0020 */
+	case MPI_IOCSTATUS_CONFIG_INVALID_TYPE:   /* 0x0021 */
+	case MPI_IOCSTATUS_CONFIG_INVALID_PAGE:   /* 0x0022 */
+	case MPI_IOCSTATUS_CONFIG_INVALID_DATA:   /* 0x0023 */
+	case MPI_IOCSTATUS_CONFIG_NO_DEFAULTS:    /* 0x0024 */
+	case MPI_IOCSTATUS_CONFIG_CANT_COMMIT:    /* 0x0025 */
+		/* No message for Config IOCStatus values */
+		break;
+
+	case MPI_IOCSTATUS_SCSI_RECOVERED_ERROR: /* 0x0040 */
+		/* No message for recovered error
+		desc = "SCSI Recovered Error";
+		*/
+		break;
+
+	case MPI_IOCSTATUS_SCSI_INVALID_BUS: /* 0x0041 */
+		desc = "SCSI Invalid Bus";
+		break;
+
+	case MPI_IOCSTATUS_SCSI_INVALID_TARGETID: /* 0x0042 */
+		desc = "SCSI Invalid TargetID";
+		break;
+
+	case MPI_IOCSTATUS_SCSI_DEVICE_NOT_THERE: /* 0x0043 */
+	  {
+		SCSIIORequest_t *pScsiReq = (SCSIIORequest_t *) mf;
+		U8 cdb = pScsiReq->CDB[0];
+		if (cdb != 0x12) { /* Inquiry is issued for device scanning */
+			desc = "SCSI Device Not There";
+		}
+		break;
+	  }
+
+	case MPI_IOCSTATUS_SCSI_DATA_OVERRUN: /* 0x0044 */
+		desc = "SCSI Data Overrun";
+		break;
+
+	case MPI_IOCSTATUS_SCSI_DATA_UNDERRUN: /* 0x0045 */
+		/* This error is checked in scsi_io_done(). Skip. 
+		desc = "SCSI Data Underrun";
+		*/
+		break;
+
+	case MPI_IOCSTATUS_SCSI_IO_DATA_ERROR: /* 0x0046 */
+		desc = "SCSI I/O Data Error";
+		break;
+
+	case MPI_IOCSTATUS_SCSI_PROTOCOL_ERROR: /* 0x0047 */
+		desc = "SCSI Protocol Error";
+		break;
+
+	case MPI_IOCSTATUS_SCSI_TASK_TERMINATED: /* 0x0048 */
+		desc = "SCSI Task Terminated";
+		break;
+
+	case MPI_IOCSTATUS_SCSI_RESIDUAL_MISMATCH: /* 0x0049 */
+		desc = "SCSI Residual Mismatch";
+		break;
+
+	case MPI_IOCSTATUS_SCSI_TASK_MGMT_FAILED: /* 0x004A */
+		desc = "SCSI Task Management Failed";
+		break;
+
+	case MPI_IOCSTATUS_SCSI_IOC_TERMINATED: /* 0x004B */
+		desc = "SCSI IOC Terminated";
+		break;
+
+	case MPI_IOCSTATUS_SCSI_EXT_TERMINATED: /* 0x004C */
+		desc = "SCSI Ext Terminated";
+		break;
+
+	default:
+		desc = "Others";
+		break;
+	}
+	if (desc != "")
+		printk(MYIOC_s_INFO_FMT "IOCStatus(0x%04x): %s\n", ioc->name, status, desc);
 }
 
 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
diff -Nru a/drivers/message/fusion/mptbase.h b/drivers/message/fusion/mptbase.h
--- a/drivers/message/fusion/mptbase.h	Sun May 16 01:18:33 2004
+++ b/drivers/message/fusion/mptbase.h	Sun May 16 01:18:33 2004
@@ -81,8 +81,8 @@
 #define COPYRIGHT	"Copyright (c) 1999-2004 " MODULEAUTHOR
 #endif
 
-#define MPT_LINUX_VERSION_COMMON	"3.01.03"
-#define MPT_LINUX_PACKAGE_NAME		"@(#)mptlinux-3.01.03"
+#define MPT_LINUX_VERSION_COMMON	"3.01.06"
+#define MPT_LINUX_PACKAGE_NAME		"@(#)mptlinux-3.01.06"
 #define WHAT_MAGIC_STRING		"@" "(" "#" ")"
 
 #define show_mptmod_ver(s,ver)  \
diff -Nru a/drivers/message/fusion/mptctl.c b/drivers/message/fusion/mptctl.c
--- a/drivers/message/fusion/mptctl.c	Sun May 16 01:18:33 2004
+++ b/drivers/message/fusion/mptctl.c	Sun May 16 01:18:33 2004
@@ -1199,7 +1199,7 @@
 mptctl_getiocinfo (unsigned long arg, unsigned int data_size)
 {
 	struct mpt_ioctl_iocinfo *uarg = (struct mpt_ioctl_iocinfo *) arg;
-	struct mpt_ioctl_iocinfo karg;
+	struct mpt_ioctl_iocinfo *karg;
 	MPT_ADAPTER		*ioc;
 	struct pci_dev		*pdev;
 	struct Scsi_Host	*sh;
@@ -1219,34 +1219,46 @@
 	 */
 	if (data_size == sizeof(struct mpt_ioctl_iocinfo_rev0))
 		cim_rev = 0;
-	else if (data_size == sizeof(struct mpt_ioctl_iocinfo))
+	else if (data_size == sizeof(struct mpt_ioctl_iocinfo_rev1))
 		cim_rev = 1;
+	else if (data_size == sizeof(struct mpt_ioctl_iocinfo))
+		cim_rev = 2;
 	else if (data_size == (sizeof(struct mpt_ioctl_iocinfo_rev0)+12))
 		cim_rev = 0;	/* obsolete */
 	else
 		return -EFAULT;
-
-	if (copy_from_user(&karg, uarg, data_size)) {
+	
+	karg = kmalloc(data_size, GFP_KERNEL);
+	if (karg == NULL) {
+		printk(KERN_ERR "%s::mpt_ioctl_iocinfo() @%d - no memory available!\n",
+				__FILE__, __LINE__);
+		return -ENOMEM;
+	}
+		
+	if (copy_from_user(karg, uarg, data_size)) {
 		printk(KERN_ERR "%s@%d::mptctl_getiocinfo - "
 			"Unable to read in mpt_ioctl_iocinfo struct @ %p\n",
 				__FILE__, __LINE__, (void*)uarg);
+		kfree(karg);
 		return -EFAULT;
 	}
 
-	if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) ||
+	if (((iocnum = mpt_verify_adapter(karg->hdr.iocnum, &ioc)) < 0) ||
 	    (ioc == NULL)) {
 		dctlprintk((KERN_ERR "%s::mptctl_getiocinfo() @%d - ioc%d not found!\n",
 				__FILE__, __LINE__, iocnum));
+		kfree(karg);
 		return -ENODEV;
 	}
 
 	/* Verify the data transfer size is correct.
 	 * Ignore the port setting.
 	 */
-	if (karg.hdr.maxDataSize != data_size) {
+	if (karg->hdr.maxDataSize != data_size) {
 		printk(KERN_ERR "%s@%d::mptctl_getiocinfo - "
 			"Structure size mismatch. Command not completed.\n",
 				__FILE__, __LINE__);
+		kfree(karg);
 		return -EFAULT;
 	}
 
@@ -1254,29 +1266,37 @@
 	 * program
 	 */
 	if ((int)ioc->chip_type <= (int) FC929)
-		karg.adapterType = MPT_IOCTL_INTERFACE_FC;
+		karg->adapterType = MPT_IOCTL_INTERFACE_FC;
 	else
-		karg.adapterType = MPT_IOCTL_INTERFACE_SCSI;
+		karg->adapterType = MPT_IOCTL_INTERFACE_SCSI;
 
-	port = karg.hdr.port;
+	port = karg->hdr.port;
 
-	karg.port = port;
+	karg->port = port;
 	pdev = (struct pci_dev *) ioc->pcidev;
 
-	karg.pciId = pdev->device;
+	karg->pciId = pdev->device;
 	pci_read_config_byte(pdev, PCI_CLASS_REVISION, &revision);
-	karg.hwRev = revision;
+	karg->hwRev = revision;
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
-	karg.subSystemDevice = pdev->subsystem_device;
-	karg.subSystemVendor = pdev->subsystem_vendor;
+	karg->subSystemDevice = pdev->subsystem_device;
+	karg->subSystemVendor = pdev->subsystem_vendor;
 #endif
 
 	if (cim_rev == 1) {
 		/* Get the PCI bus, device, and function numbers for the IOC
 		 */
-		karg.pciInfo.u.bits.busNumber = pdev->bus->number;
-		karg.pciInfo.u.bits.deviceNumber = PCI_SLOT( pdev->devfn );
-		karg.pciInfo.u.bits.functionNumber = PCI_FUNC( pdev->devfn );
+		karg->pciInfo.u.bits.busNumber = pdev->bus->number;
+		karg->pciInfo.u.bits.deviceNumber = PCI_SLOT( pdev->devfn );
+		karg->pciInfo.u.bits.functionNumber = PCI_FUNC( pdev->devfn );
+	} else if (cim_rev == 2) {
+		/* Get the PCI bus, device, function and segment ID numbers 
+		   for the IOC */
+		karg->pciInfo.u.bits.busNumber = pdev->bus->number;
+		karg->pciInfo.u.bits.deviceNumber = PCI_SLOT( pdev->devfn );
+		karg->pciInfo.u.bits.functionNumber = PCI_FUNC( pdev->devfn );
+		karg->pciInfo.u.bits.functionNumber = PCI_FUNC( pdev->devfn );
+		karg->pciInfo.segmentID = pci_domain_nr(pdev->bus);
 	}
 
 	/* Get number of devices
@@ -1297,31 +1317,33 @@
 			}
 		}
 	}
-	karg.numDevices = numDevices;
+	karg->numDevices = numDevices;
 
 	/* Set the BIOS and FW Version
 	 */
-	karg.FWVersion = ioc->facts.FWVersion.Word;
-	karg.BIOSVersion = ioc->biosVersion;
+	karg->FWVersion = ioc->facts.FWVersion.Word;
+	karg->BIOSVersion = ioc->biosVersion;
 
 	/* Set the Version Strings.
 	 */
-	strncpy (karg.driverVersion, MPT_LINUX_PACKAGE_NAME, MPT_IOCTL_VERSION_LENGTH);
-	karg.driverVersion[MPT_IOCTL_VERSION_LENGTH-1]='\0';
+	strncpy (karg->driverVersion, MPT_LINUX_PACKAGE_NAME, MPT_IOCTL_VERSION_LENGTH);
+	karg->driverVersion[MPT_IOCTL_VERSION_LENGTH-1]='\0';
 
-	karg.busChangeEvent = 0;
-	karg.hostId = ioc->pfacts[port].PortSCSIID;
-	karg.rsvd[0] = karg.rsvd[1] = 0;
+	karg->busChangeEvent = 0;
+	karg->hostId = ioc->pfacts[port].PortSCSIID;
+	karg->rsvd[0] = karg->rsvd[1] = 0;
 
 	/* Copy the data from kernel memory to user memory
 	 */
-	if (copy_to_user((char *)arg, &karg, data_size)) {
+	if (copy_to_user((char *)arg, karg, data_size)) {
 		printk(KERN_ERR "%s@%d::mptctl_getiocinfo - "
 			"Unable to write out mpt_ioctl_iocinfo struct @ %p\n",
 				__FILE__, __LINE__, (void*)uarg);
+		kfree(karg);
 		return -EFAULT;
 	}
 
+	kfree(karg);
 	return 0;
 }
 
@@ -2909,6 +2931,8 @@
 	if (++where && err) goto out_fail;
 	err = register_ioctl32_conversion(MPTIOCINFO1, compat_mptctl_ioctl);
 	if (++where && err) goto out_fail;
+	err = register_ioctl32_conversion(MPTIOCINFO2, compat_mptctl_ioctl);
+	if (++where && err) goto out_fail;
 	err = register_ioctl32_conversion(MPTTARGETINFO, compat_mptctl_ioctl);
 	if (++where && err) goto out_fail;
 	err = register_ioctl32_conversion(MPTTEST, compat_mptctl_ioctl);
@@ -2968,6 +2992,7 @@
 			" (%d:err=%d)\n", where, err);
 	unregister_ioctl32_conversion(MPTIOCINFO);
 	unregister_ioctl32_conversion(MPTIOCINFO1);
+	unregister_ioctl32_conversion(MPTIOCINFO2);
 	unregister_ioctl32_conversion(MPTTARGETINFO);
 	unregister_ioctl32_conversion(MPTTEST);
 	unregister_ioctl32_conversion(MPTEVENTQUERY);
@@ -3018,6 +3043,7 @@
 #ifdef CONFIG_COMPAT
 	unregister_ioctl32_conversion(MPTIOCINFO);
 	unregister_ioctl32_conversion(MPTIOCINFO1);
+	unregister_ioctl32_conversion(MPTIOCINFO2);
 	unregister_ioctl32_conversion(MPTTARGETINFO);
 	unregister_ioctl32_conversion(MPTTEST);
 	unregister_ioctl32_conversion(MPTEVENTQUERY);
diff -Nru a/drivers/message/fusion/mptctl.h b/drivers/message/fusion/mptctl.h
--- a/drivers/message/fusion/mptctl.h	Sun May 16 01:18:35 2004
+++ b/drivers/message/fusion/mptctl.h	Sun May 16 01:18:35 2004
@@ -91,6 +91,7 @@
 
 #define MPTIOCINFO		_IOWR(MPT_MAGIC_NUMBER,17,struct mpt_ioctl_iocinfo)
 #define MPTIOCINFO1		_IOWR(MPT_MAGIC_NUMBER,17,struct mpt_ioctl_iocinfo_rev0)
+#define MPTIOCINFO2		_IOWR(MPT_MAGIC_NUMBER,17,struct mpt_ioctl_iocinfo_rev1)
 #define MPTTARGETINFO		_IOWR(MPT_MAGIC_NUMBER,18,struct mpt_ioctl_targetinfo)
 #define MPTTEST			_IOWR(MPT_MAGIC_NUMBER,19,struct mpt_ioctl_test)
 #define MPTEVENTQUERY		_IOWR(MPT_MAGIC_NUMBER,21,struct mpt_ioctl_eventquery)
@@ -165,6 +166,18 @@
 	} u;
 };
 
+struct mpt_ioctl_pci_info2 {
+	union {
+		struct {
+			unsigned int  deviceNumber   :  5;
+			unsigned int  functionNumber :  3;
+			unsigned int  busNumber      : 24;
+		} bits;
+		unsigned int  asUlong;
+	} u;
+  int segmentID;
+};
+
 /*
  *  Adapter Information Page
  *  Read only.
@@ -175,6 +188,24 @@
 #define MPT_IOCTL_VERSION_LENGTH	(32)
 
 struct mpt_ioctl_iocinfo {
+	mpt_ioctl_header hdr;
+	int		 adapterType;	/* SCSI or FCP */
+	int		 port;		/* port number */
+	int		 pciId;		/* PCI Id. */
+	int		 hwRev;		/* hardware revision */
+	int		 subSystemDevice;	/* PCI subsystem Device ID */
+	int		 subSystemVendor;	/* PCI subsystem Vendor ID */
+	int		 numDevices;		/* number of devices */
+	int		 FWVersion;		/* FW Version (integer) */
+	int		 BIOSVersion;		/* BIOS Version (integer) */
+	char		 driverVersion[MPT_IOCTL_VERSION_LENGTH];	/* Driver Version (string) */
+	char		 busChangeEvent;
+	char		 hostId;
+	char		 rsvd[2];
+	struct mpt_ioctl_pci_info2  pciInfo; /* Added Rev 2 */
+};
+
+struct mpt_ioctl_iocinfo_rev1 {
 	mpt_ioctl_header hdr;
 	int		 adapterType;	/* SCSI or FCP */
 	int		 port;		/* port number */
diff -Nru a/drivers/message/fusion/mptscsih.c b/drivers/message/fusion/mptscsih.c
--- a/drivers/message/fusion/mptscsih.c	Sun May 16 01:18:37 2004
+++ b/drivers/message/fusion/mptscsih.c	Sun May 16 01:18:37 2004
@@ -805,6 +805,14 @@
 
 		if (scsi_state & MPI_SCSI_STATE_AUTOSENSE_VALID)
 			copy_sense_data(sc, hd, mf, pScsiReply);
+                
+		/*
+		 *  Look for + dump FCP ResponseInfo[]!
+		 */
+		if (scsi_state & MPI_SCSI_STATE_RESPONSE_INFO_VALID) {
+			printk(KERN_NOTICE "  FCP_ResponseInfo=%08xh\n",
+			le32_to_cpu(pScsiReply->ResponseInfo));
+		}
 
 		switch(status) {
 		case MPI_IOCSTATUS_BUSY:			/* 0x0002 */
@@ -932,10 +940,6 @@
 			break;
 
 		case MPI_IOCSTATUS_SCSI_PROTOCOL_ERROR:		/* 0x0047 */
-			if (pScsiReply->SCSIState & MPI_SCSI_STATE_TERMINATED) {
-				/*  Not real sure here either...  */
-				sc->result = DID_RESET << 16;
-			} else
 				sc->result = DID_SOFT_ERROR << 16;
 			break;
 
@@ -1106,16 +1110,21 @@
 			 * Do OS callback
 			 * Free driver resources (chain, msg buffers)
 			 */
-			if (SCpnt->use_sg) {
-				pci_unmap_sg(hd->ioc->pcidev, (struct scatterlist *) SCpnt->request_buffer,
-					    SCpnt->use_sg, scsi_to_pci_dma_dir(SCpnt->sc_data_direction));
-			} else if (SCpnt->request_bufflen) {
-				scPrivate	*my_priv;
-
-				my_priv = (scPrivate *) &SCpnt->SCp;
-				pci_unmap_single(hd->ioc->pcidev, (dma_addr_t)(ulong)my_priv->p1,
-					   SCpnt->request_bufflen,
-					   scsi_to_pci_dma_dir(SCpnt->sc_data_direction));
+			if (scsi_device_online(SCpnt->device)) {
+				if (SCpnt->use_sg) {
+					pci_unmap_sg(hd->ioc->pcidev,
+						(struct scatterlist *) SCpnt->request_buffer,
+						SCpnt->use_sg,
+						scsi_to_pci_dma_dir(SCpnt->sc_data_direction));
+				} else if (SCpnt->request_bufflen) {
+					scPrivate	*my_priv;
+
+					my_priv = (scPrivate *) &SCpnt->SCp;
+					pci_unmap_single(hd->ioc->pcidev,
+						(dma_addr_t)(ulong)my_priv->p1,
+						SCpnt->request_bufflen,
+						scsi_to_pci_dma_dir(SCpnt->sc_data_direction));
+				}
 			}
 			SCpnt->result = DID_RESET << 16;
 			SCpnt->host_scribble = NULL;
diff -Nru a/drivers/message/i2o/Kconfig b/drivers/message/i2o/Kconfig
--- a/drivers/message/i2o/Kconfig	Sun May 16 01:18:33 2004
+++ b/drivers/message/i2o/Kconfig	Sun May 16 01:18:33 2004
@@ -3,7 +3,7 @@
 
 config I2O
 	tristate "I2O support"
-	depends on PCI && !64BIT
+	depends on PCI
 	---help---
 	  The Intelligent Input/Output (I2O) architecture allows hardware
 	  drivers to be split into two parts: an operating system specific
@@ -20,19 +20,20 @@
 	  drivers and OSM's with the following questions.
 
 	  To compile this support as a module, choose M here: the
-	  modules will be called i2o_core and i2o_config.
+	  modules will be called i2o_core.
 
 	  If unsure, say N.
 
-config I2O_PCI
-	tristate "I2O PCI support"
+config I2O_CONFIG
+	tristate "I2O Configuration support"
 	depends on PCI && I2O
 	help
-	  Say Y for support of PCI bus I2O interface adapters. Currently this
-	  is the only variety supported, so you should say Y.
+	  Say Y for support of the configuration interface for the I2O adapters.
+	  If you have a RAID controller from Adaptec and you want to use the
+	  raidutils to manage your RAID array, you have to say Y here.
 
 	  To compile this support as a module, choose M here: the
-	  module will be called i2o_pci.
+	  module will be called i2o_config.
 
 config I2O_BLOCK
 	tristate "I2O Block OSM"
diff -Nru a/drivers/message/i2o/Makefile b/drivers/message/i2o/Makefile
--- a/drivers/message/i2o/Makefile	Sun May 16 01:18:36 2004
+++ b/drivers/message/i2o/Makefile	Sun May 16 01:18:36 2004
@@ -5,7 +5,8 @@
 # In the future, some of these should be built conditionally.
 #
 
-obj-$(CONFIG_I2O)	+= i2o_core.o i2o_config.o
+obj-$(CONFIG_I2O)	+= i2o_core.o
+obj-$(CONFIG_I2O_CONFIG)+= i2o_config.o
 obj-$(CONFIG_I2O_BLOCK)	+= i2o_block.o
 obj-$(CONFIG_I2O_SCSI)	+= i2o_scsi.o
 obj-$(CONFIG_I2O_PROC)	+= i2o_proc.o
diff -Nru a/drivers/message/i2o/i2o_block.c b/drivers/message/i2o/i2o_block.c
--- a/drivers/message/i2o/i2o_block.c	Sun May 16 01:18:36 2004
+++ b/drivers/message/i2o/i2o_block.c	Sun May 16 01:18:36 2004
@@ -83,7 +83,6 @@
 #include <asm/semaphore.h>
 #include <linux/completion.h>
 #include <asm/io.h>
-#include <asm/atomic.h>
 #include <linux/smp_lock.h>
 #include <linux/wait.h>
 
@@ -111,16 +110,12 @@
 				 I2O_EVT_IND_BSA_SCSI_SMART )
 
 
-#define I2O_LOCK(unit)	(i2ob_dev[(unit)].req_queue->queue_lock)
-
 /*
  *	Some of these can be made smaller later
  */
 
-static int i2ob_media_change_flag[MAX_I2OB];
-static u32 i2ob_max_sectors[MAX_I2OB<<4];
-
 static int i2ob_context;
+static struct block_device_operations i2ob_fops;
 
 /*
  * I2O Block device descriptor 
@@ -143,6 +138,9 @@
 	int wcache;
 	int power;
 	int index;
+	int media_change_flag;
+	u32 max_sectors;
+	struct gendisk *gd;
 };
 
 /*
@@ -162,16 +160,16 @@
 };
 
 /*
- * Per IOP requst queue information
+ * Per IOP request queue information
  *
- * We have a separate requeust_queue_t per IOP so that a heavilly
+ * We have a separate request_queue_t per IOP so that a heavilly
  * loaded I2O block device on an IOP does not starve block devices
  * across all I2O controllers.
  * 
  */
 struct i2ob_iop_queue
 {
-	atomic_t queue_depth;
+	unsigned int queue_depth;
 	struct i2ob_request request_queue[MAX_I2OB_DEPTH];
 	struct i2ob_request *i2ob_qhead;
 	request_queue_t *req_queue;
@@ -183,9 +181,8 @@
  *	Each I2O disk is one of these.
  */
 
-static struct i2ob_device i2ob_dev[MAX_I2OB<<4];
+static struct i2ob_device i2ob_dev[MAX_I2OB];
 static int i2ob_dev_count = 0;
-static struct gendisk *i2ob_disk[MAX_I2OB];
 
 /*
  * Mutex and spin lock for event handling synchronization
@@ -312,7 +309,6 @@
 	/* 
 	 * Mask out partitions from now on
 	 */
-	unit &= 0xF0;
 		
 	/* This can be optimised later - just want to be sure its right for
 	   starters */
@@ -402,7 +398,7 @@
 	}
 
 	i2o_post_message(c,m);
-	atomic_inc(&i2ob_queues[c->unit]->queue_depth);
+	i2ob_queues[c->unit]->queue_depth ++;
 
 	return 0;
 }
@@ -453,8 +449,8 @@
 	struct i2ob_request *ireq = NULL;
 	u8 st;
 	u32 *m = (u32 *)msg;
-	u8 unit = (m[2]>>8)&0xF0;	/* low 4 bits are partition */
-	struct i2ob_device *dev = &i2ob_dev[(unit&0xF0)];
+	u8 unit = m[2]>>8;
+	struct i2ob_device *dev = &i2ob_dev[unit];
 
 	/*
 	 * FAILed message
@@ -475,10 +471,10 @@
 		ireq=&i2ob_queues[c->unit]->request_queue[m[3]];
 		ireq->req->errors++;
 
-		spin_lock_irqsave(I2O_LOCK(c->unit), flags);
+		spin_lock_irqsave(dev->req_queue->queue_lock, flags);
 		i2ob_unhook_request(ireq, c->unit);
 		i2ob_end_request(ireq->req);
-		spin_unlock_irqrestore(I2O_LOCK(c->unit), flags);
+		spin_unlock_irqrestore(dev->req_queue->queue_lock, flags);
 	
 		/* Now flush the message by making it a NOP */
 		m[0]&=0x00FFFFFF;
@@ -509,10 +505,10 @@
 		ireq=&i2ob_queues[c->unit]->request_queue[m[3]];
 		ireq->req->errors++;
 		printk(KERN_WARNING "I2O Block: Data transfer to deleted device!\n");
-		spin_lock_irqsave(I2O_LOCK(c->unit), flags);
+		spin_lock_irqsave(dev->req_queue->queue_lock, flags);
 		i2ob_unhook_request(ireq, c->unit);
 		i2ob_end_request(ireq->req);
-		spin_unlock_irqrestore(I2O_LOCK(c->unit), flags);
+		spin_unlock_irqrestore(dev->req_queue->queue_lock, flags);
 		return;
 	}	
 
@@ -576,17 +572,17 @@
 	 */
 	
 	i2ob_free_sglist(dev, ireq);
-	spin_lock_irqsave(I2O_LOCK(c->unit), flags);
+	spin_lock_irqsave(dev->req_queue->queue_lock, flags);
 	i2ob_unhook_request(ireq, c->unit);
 	i2ob_end_request(ireq->req);
-	atomic_dec(&i2ob_queues[c->unit]->queue_depth);
+	i2ob_queues[c->unit]->queue_depth --;
 	
 	/*
 	 *	We may be able to do more I/O
 	 */
 	 
-	i2ob_request(dev->req_queue);
-	spin_unlock_irqrestore(I2O_LOCK(c->unit), flags);
+	i2ob_request(dev->gd->queue);
+	spin_unlock_irqrestore(dev->req_queue->queue_lock, flags);
 }
 
 /* 
@@ -598,8 +594,8 @@
 {
 	unsigned int evt;
 	unsigned long flags;
+	struct i2ob_device *dev;
 	int unit;
-	int i;
 	//The only event that has data is the SCSI_SMART event.
 	struct i2o_reply {
 		u32 header[4];
@@ -638,6 +634,7 @@
 		unit = le32_to_cpu(evt_local->header[3]);
 		evt = le32_to_cpu(evt_local->evt_indicator);
 
+		dev = &i2ob_dev[unit];
 		switch(evt)
 		{
 			/*
@@ -648,10 +645,9 @@
 			 */
 			case I2O_EVT_IND_BSA_VOLUME_LOAD:
 			{
-				struct gendisk *p = i2ob_disk[unit>>4];
-				i2ob_install_device(i2ob_dev[unit].i2odev->controller, 
-					i2ob_dev[unit].i2odev, unit);
-				add_disk(p);
+				i2ob_install_device(dev->i2odev->controller,
+					dev->i2odev, unit);
+				add_disk(dev->gd);
 				break;
 			}
 
@@ -663,17 +659,18 @@
 			 */
 			case I2O_EVT_IND_BSA_VOLUME_UNLOAD:
 			{
-				struct gendisk *p = i2ob_disk[unit>>4];
+				struct gendisk *p = dev->gd;
+				blk_queue_max_sectors(dev->gd->queue, 0);
 				del_gendisk(p);
-				for(i = unit; i <= unit+15; i++)
-					blk_queue_max_sectors(i2ob_dev[i].req_queue, 0);
-				i2ob_media_change_flag[unit] = 1;
+				put_disk(p);
+				dev->gd = NULL;
+				dev->media_change_flag = 1;
 				break;
 			}
 
 			case I2O_EVT_IND_BSA_VOLUME_UNLOAD_REQ:
 				printk(KERN_WARNING "%s: Attempt to eject locked media\n", 
-					i2ob_dev[unit].i2odev->dev_name);
+					dev->i2odev->dev_name);
 				break;
 
 			/*
@@ -691,12 +688,12 @@
 			{
 				u64 size;
 
-	  			if(i2ob_query_device(&i2ob_dev[unit], 0x0004, 0, &size, 8) !=0 )
-					i2ob_query_device(&i2ob_dev[unit], 0x0000, 4, &size, 8);
+	  			if(i2ob_query_device(dev, 0x0004, 0, &size, 8) !=0 )
+					i2ob_query_device(dev, 0x0000, 4, &size, 8);
 
-				spin_lock_irqsave(I2O_LOCK(unit), flags);	
-				set_capacity(i2ob_disk[unit>>4], size>>9);
-				spin_unlock_irqrestore(I2O_LOCK(unit), flags);	
+				spin_lock_irqsave(dev->req_queue->queue_lock, flags);
+				set_capacity(dev->gd, size>>9);
+				spin_unlock_irqrestore(dev->req_queue->queue_lock, flags);
 				break;
 			}
 
@@ -708,7 +705,7 @@
 			case I2O_EVT_IND_BSA_SCSI_SMART:
 			{
 				char buf[16];
-				printk(KERN_INFO "I2O Block: %s received a SCSI SMART Event\n",i2ob_dev[unit].i2odev->dev_name);
+				printk(KERN_INFO "I2O Block: %s received a SCSI SMART Event\n",dev->i2odev->dev_name);
 				evt_local->data[16]='\0';
 				sprintf(buf,"%s",&evt_local->data[0]);
 				printk(KERN_INFO "      Disk Serial#:%s\n",buf);
@@ -735,12 +732,12 @@
 				 * hit the fan big time. The card seems to recover but loses
 				 * the pending writes. Deeply ungood except for testing fsck
 				 */
-				if(i2ob_dev[unit].i2odev->controller->promise)
+				if(dev->i2odev->controller->promise)
 					panic("I2O controller firmware failed. Reboot and force a filesystem check.\n");
 			default:
 				printk(KERN_INFO "%s: Received event 0x%X we didn't register for\n"
 					KERN_INFO "   Blame the I2O card manufacturer 8)\n", 
-					i2ob_dev[unit].i2odev->dev_name, evt);
+					dev->i2odev->dev_name, evt);
 				break;
 		}
 	};
@@ -765,14 +762,6 @@
 	u32 m;
 	
 	while ((req = elv_next_request(q)) != NULL) {
-		/*
-		 *	On an IRQ completion if there is an inactive
-		 *	request on the queue head it means it isnt yet
-		 *	ready to dispatch.
-		 */
-		if(req->rq_status == RQ_INACTIVE)
-			return;
-
 		dev = req->rq_disk->private_data;
 
 		/* 
@@ -780,7 +769,7 @@
 		 *	generic IOP commit control. Certainly it's not right 
 		 *	its global!  
 		 */
-		if(atomic_read(&i2ob_queues[dev->unit]->queue_depth) >= dev->depth)
+		if(i2ob_queues[dev->unit]->queue_depth >= dev->depth)
 			break;
 		
 		/* Get a message */
@@ -788,7 +777,7 @@
 
 		if(m==0xFFFFFFFF)
 		{
-			if(atomic_read(&i2ob_queues[dev->unit]->queue_depth) == 0)
+			if(i2ob_queues[dev->unit]->queue_depth == 0)
 				printk(KERN_ERR "i2o_block: message queue and request queue empty!!\n");
 			break;
 		}
@@ -797,13 +786,12 @@
 		 */
 		req->errors = 0;
 		blkdev_dequeue_request(req);	
-		req->waiting = NULL;
 		
 		ireq = i2ob_queues[dev->unit]->i2ob_qhead;
 		i2ob_queues[dev->unit]->i2ob_qhead = ireq->next;
 		ireq->req = req;
 
-		i2ob_send(m, dev, ireq, (dev->unit&0xF0));
+		i2ob_send(m, dev, ireq, dev->index);
 	}
 }
 
@@ -1065,7 +1053,10 @@
 	u16 power;
 	u32 flags, status;
 	struct i2ob_device *dev=&i2ob_dev[unit];
-	int i;
+	struct gendisk *disk;
+	request_queue_t *q;
+	int segments;
+
 
 	/*
 	 * For logging purposes...
@@ -1079,21 +1070,35 @@
 	 * before any I/O can be performed. If it fails, this
 	 * device is useless.
 	 */
-	if(!i2ob_queues[unit]) {
-		if(i2ob_init_iop(unit))
+	if(!i2ob_queues[c->unit]) {
+		if(i2ob_init_iop(c->unit))
 			return 1;
 	}
 
+	q = i2ob_queues[c->unit]->req_queue;
+
 	/*
 	 * This will save one level of lookup/indirection in critical
 	 * code so that we can directly get the queue ptr from the
 	 * device instead of having to go the IOP data structure.
 	 */
-	dev->req_queue = i2ob_queues[unit]->req_queue;
+	dev->req_queue = q;
 
+	/*
+	 * Allocate a gendisk structure and initialize it
+	 */
+	disk = alloc_disk(16);
+	if (!disk)
+		return 1;
+
+	dev->gd = disk;
 	/* initialize gendik structure */
-	i2ob_disk[unit>>4]->private_data = dev;
-	i2ob_disk[unit>>4]->queue = dev->req_queue;
+	disk->major = MAJOR_NR;
+	disk->first_minor = unit<<4;
+	disk->queue = q;
+	disk->fops = &i2ob_fops;
+	sprintf(disk->disk_name, "i2o/hd%c", 'a' + unit);
+	disk->private_data = dev;
 
 	/*
 	 *	Ask for the current media data. If that isn't supported
@@ -1110,53 +1115,49 @@
 		power = 0;
 	i2ob_query_device(dev, 0x0000, 5, &flags, 4);
 	i2ob_query_device(dev, 0x0000, 6, &status, 4);
-	set_capacity(i2ob_disk[unit>>4], size>>9);
+	set_capacity(disk, size>>9);
 
 	/*
 	 * Max number of Scatter-Gather Elements
 	 */	
 
-	i2ob_dev[unit].power = power;	/* Save power state in device proper */
-	i2ob_dev[unit].flags = flags;
+	dev->power = power;	/* Save power state in device proper */
+	dev->flags = flags;
 
-	for(i=unit;i<=unit+15;i++)
-	{
-		request_queue_t *q = i2ob_dev[unit].req_queue;
-		int segments = (d->controller->status_block->inbound_frame_size - 7) / 2;
+	segments = (d->controller->status_block->inbound_frame_size - 7) / 2;
+
+	if(segments > 16)
+		segments = 16;
 
-		if(segments > 16)
-			segments = 16;
-					
-		i2ob_dev[i].power = power;	/* Save power state */
-		i2ob_dev[unit].flags = flags;	/* Keep the type info */
+	dev->power = power;	/* Save power state */
+	dev->flags = flags;	/* Keep the type info */
 		
-		blk_queue_max_sectors(q, 96);	/* 256 might be nicer but many controllers 
+	blk_queue_max_sectors(q, 96);	/* 256 might be nicer but many controllers
 						   explode on 65536 or higher */
-		blk_queue_max_phys_segments(q, segments);
-		blk_queue_max_hw_segments(q, segments);
+	blk_queue_max_phys_segments(q, segments);
+	blk_queue_max_hw_segments(q, segments);
 		
-		i2ob_dev[i].rcache = CACHE_SMARTFETCH;
-		i2ob_dev[i].wcache = CACHE_WRITETHROUGH;
+	dev->rcache = CACHE_SMARTFETCH;
+	dev->wcache = CACHE_WRITETHROUGH;
 		
-		if(d->controller->battery == 0)
-			i2ob_dev[i].wcache = CACHE_WRITETHROUGH;
+	if(d->controller->battery == 0)
+		dev->wcache = CACHE_WRITETHROUGH;
 
-		if(d->controller->promise)
-			i2ob_dev[i].wcache = CACHE_WRITETHROUGH;
+	if(d->controller->promise)
+		dev->wcache = CACHE_WRITETHROUGH;
 
-		if(d->controller->short_req)
-		{
-			blk_queue_max_sectors(q, 8);
-			blk_queue_max_phys_segments(q, 8);
-			blk_queue_max_hw_segments(q, 8);
-		}
+	if(d->controller->short_req)
+	{
+		blk_queue_max_sectors(q, 8);
+		blk_queue_max_phys_segments(q, 8);
+		blk_queue_max_hw_segments(q, 8);
 	}
 
-	strcpy(d->dev_name, i2ob_disk[unit>>4]->disk_name);
-	strcpy(i2ob_disk[unit>>4]->devfs_name, i2ob_disk[unit>>4]->disk_name);
+	strcpy(d->dev_name, disk->disk_name);
+	strcpy(disk->devfs_name, disk->disk_name);
 
 	printk(KERN_INFO "%s: Max segments %d, queue depth %d, byte limit %d.\n",
-		 d->dev_name, i2ob_dev[unit].max_segments, i2ob_dev[unit].depth, i2ob_max_sectors[unit]<<9);
+		 d->dev_name, dev->max_segments, dev->depth, dev->max_sectors<<9);
 
 	i2ob_query_device(dev, 0x0000, 0, &type, 1);
 
@@ -1197,7 +1198,7 @@
 	}
 	printk(".\n");
 	printk(KERN_INFO "%s: Maximum sectors/read set to %d.\n", 
-		d->dev_name, i2ob_max_sectors[unit]);
+		d->dev_name, dev->max_sectors);
 
 	/*
 	 * Register for the events we're interested in and that the
@@ -1233,7 +1234,7 @@
 	/* Queue is MAX_I2OB + 1... */
 	i2ob_queues[unit]->request_queue[i].next = NULL;
 	i2ob_queues[unit]->i2ob_qhead = &i2ob_queues[unit]->request_queue[0];
-	atomic_set(&i2ob_queues[unit]->queue_depth, 0);
+	i2ob_queues[unit]->queue_depth = 0;
 
 	i2ob_queues[unit]->lock = SPIN_LOCK_UNLOCKED;
 	i2ob_queues[unit]->req_queue = blk_init_queue(i2ob_request, &i2ob_queues[unit]->lock);
@@ -1257,7 +1258,6 @@
 
 	struct i2o_device *d, *b=NULL;
 	struct i2o_controller *c;
-	struct i2ob_device *dev;
 		
 	for(i=0; i< MAX_I2O_CONTROLLERS; i++)
 	{
@@ -1313,44 +1313,12 @@
 					continue; /*Already claimed on pass 1 */
 			}
 
-			if(i2o_claim_device(d, &i2o_block_handler))
-			{
-				printk(KERN_WARNING "i2o_block: Controller %d, TID %d\n", c->unit,
-					d->lct_data.tid);
-				printk(KERN_WARNING "\t%sevice refused claim! Skipping installation\n", bios?"Boot d":"D");
-				continue;
-			}
-
-			i2o_release_device(d, &i2o_block_handler);
-
-			if(scan_unit<MAX_I2OB<<4)
-			{
- 				/*
-				 * Get the device and fill in the
-				 * Tid and controller.
-				 */
-				dev=&i2ob_dev[scan_unit];
-				dev->i2odev = d; 
-				dev->controller = c;
-				dev->unit = c->unit;
-				dev->tid = d->lct_data.tid;
-
-				if(i2ob_install_device(c,d,scan_unit))
-					printk(KERN_WARNING "Could not install I2O block device\n");
-				else
-				{
-					add_disk(i2ob_disk[scan_unit>>4]);
-					scan_unit+=16;
-					i2ob_dev_count++;
-
-					/* We want to know when device goes away */
-					i2o_device_notify_on(d, &i2o_block_handler);
-				}
-			}
+			if(scan_unit<MAX_I2OB)
+				i2ob_new_device(c, d);
 			else
 			{
 				if(!warned++)
-					printk(KERN_WARNING "i2o_block: too many device, registering only %d.\n", scan_unit>>4);
+					printk(KERN_WARNING "i2o_block: too many device, registering only %d.\n", scan_unit);
 			}
 		}
 		i2o_unlock_controller(c);
@@ -1399,12 +1367,12 @@
 	printk(KERN_INFO "   Controller %d Tid %d\n",c->unit, d->lct_data.tid);
 
 	/* Check for available space */
-	if(i2ob_dev_count>=MAX_I2OB<<4)
+	if(i2ob_dev_count>=MAX_I2OB)
 	{
 		printk(KERN_ERR "i2o_block: No more devices allowed!\n");
 		return;
 	}
-	for(unit = 0; unit < (MAX_I2OB<<4); unit += 16)
+	for(unit = 0; unit < MAX_I2OB; unit ++)
 	{
 		if(!i2ob_dev[unit].i2odev)
 			break;
@@ -1420,18 +1388,20 @@
 	dev->i2odev = d; 
 	dev->controller = c;
 	dev->tid = d->lct_data.tid;
+	dev->unit = c->unit;
 
-	if(i2ob_install_device(c,d,unit))
+	if(i2ob_install_device(c,d,unit)) {
+		i2o_release_device(d, &i2o_block_handler);
 		printk(KERN_ERR "i2o_block: Could not install new device\n");
+	}
 	else	
 	{
-		add_disk(i2ob_disk[unit>>4]);
+		i2o_release_device(d, &i2o_block_handler);
+		add_disk(dev->gd);
 		i2ob_dev_count++;
 		i2o_device_notify_on(d, &i2o_block_handler);
 	}
 
-	i2o_release_device(d, &i2o_block_handler);
- 
 	return;
 }
 
@@ -1443,64 +1413,58 @@
 void i2ob_del_device(struct i2o_controller *c, struct i2o_device *d)
 {	
 	int unit = 0;
-	int i = 0;
 	unsigned long flags;
+	struct i2ob_device *dev;
 
-	spin_lock_irqsave(I2O_LOCK(c->unit), flags);
-
-	/*
-	 * Need to do this...we somtimes get two events from the IRTOS
-	 * in a row and that causes lots of problems.
-	 */
-	i2o_device_notify_off(d, &i2o_block_handler);
-
-	printk(KERN_INFO "I2O Block Device Deleted\n");
-
-	for(unit = 0; unit < MAX_I2OB<<4; unit += 16)
+	for(unit = 0; unit < MAX_I2OB; unit ++)
 	{
-		if(i2ob_dev[unit].i2odev == d)
+		dev = &i2ob_dev[unit];
+		if(dev->i2odev == d)
 		{
 			printk(KERN_INFO "  /dev/%s: Controller %d Tid %d\n", 
 				d->dev_name, c->unit, d->lct_data.tid);
 			break;
 		}
 	}
-	if(unit >= MAX_I2OB<<4)
+
+	printk(KERN_INFO "I2O Block Device Deleted\n");
+
+	if(unit >= MAX_I2OB)
 	{
 		printk(KERN_ERR "i2ob_del_device called, but not in dev table!\n");
-		spin_unlock_irqrestore(I2O_LOCK(c->unit), flags);
 		return;
 	}
 
+	spin_lock_irqsave(dev->req_queue->queue_lock, flags);
+
+	/*
+	 * Need to do this...we somtimes get two events from the IRTOS
+	 * in a row and that causes lots of problems.
+	 */
+	i2o_device_notify_off(d, &i2o_block_handler);
+
 	/* 
 	 * This will force errors when i2ob_get_queue() is called
 	 * by the kenrel.
 	 */
-	del_gendisk(i2ob_disk[unit>>4]);
-	i2ob_dev[unit].req_queue = NULL;
-	for(i = unit; i <= unit+15; i++)
-	{
-		i2ob_dev[i].i2odev = NULL;
-		blk_queue_max_sectors(i2ob_dev[i].req_queue, 0);
-	}
-	spin_unlock_irqrestore(I2O_LOCK(c->unit), flags);
-
-	/*
-	 * Decrease usage count for module
-	 */	
-
-	while(i2ob_dev[unit].refcnt--)
-		MOD_DEC_USE_COUNT;
-
-	i2ob_dev[unit].refcnt = 0;
-	
-	i2ob_dev[i].tid = 0;
+	if(dev->gd) {
+		struct gendisk *gd = dev->gd;
+		gd->queue = NULL;
+		del_gendisk(gd);
+		put_disk(gd);
+		dev->gd = NULL;
+	}
+	spin_unlock_irqrestore(dev->req_queue->queue_lock, flags);
+	dev->req_queue = NULL;
+	dev->i2odev = NULL;
+	dev->refcnt = 0;
+	dev->tid = 0;
 
 	/* 
 	 * Do we need this?
 	 * The media didn't really change...the device is just gone
 	 */
-	i2ob_media_change_flag[unit] = 1;
+	dev->media_change_flag = 1;
 
 	i2ob_dev_count--;	
 }
@@ -1511,10 +1475,9 @@
 static int i2ob_media_change(struct gendisk *disk)
 {
 	struct i2ob_device *p = disk->private_data;
-	int i = p->index;
-	if(i2ob_media_change_flag[i])
+	if(p->media_change_flag)
 	{
-		i2ob_media_change_flag[i]=0;
+		p->media_change_flag=0;
 		return 1;
 	}
 	return 0;
@@ -1523,7 +1486,7 @@
 static int i2ob_revalidate(struct gendisk *disk)
 {
 	struct i2ob_device *p = disk->private_data;
-	return i2ob_install_device(p->controller, p->i2odev, p->index<<4);
+	return i2ob_install_device(p->controller, p->i2odev, p->index);
 }
 
 /*
@@ -1536,7 +1499,7 @@
 	
 	for(i=0;i<MAX_I2OB;i++)
 	{
-		struct i2ob_device *dev=&i2ob_dev[(i<<4)];
+		struct i2ob_device *dev=&i2ob_dev[i];
 		
 		if(dev->refcnt!=0)
 		{
@@ -1598,51 +1561,36 @@
 	if (register_blkdev(MAJOR_NR, "i2o_block"))
 		return -EIO;
 
-	for (i = 0; i < MAX_I2OB; i++) {
-		struct gendisk *disk = alloc_disk(16);
-		if (!disk)
-			goto oom;
-		i2ob_dev[i<<4].index = i;
-		disk->queue = i2ob_dev[i<<4].req_queue;
-		i2ob_disk[i] = disk;
-	}
 #ifdef MODULE
 	printk(KERN_INFO "i2o_block: registered device at major %d\n", MAJOR_NR);
 #endif
 
 	/*
+	 *	Set up the queue
+	 */
+	for(i = 0; i < MAX_I2O_CONTROLLERS; i++)
+		i2ob_queues[i] = NULL;
+
+	/*
 	 *	Now fill in the boiler plate
 	 */
 	 
-	for (i = 0; i < MAX_I2OB << 4; i++) {
-		i2ob_dev[i].refcnt = 0;
-		i2ob_dev[i].flags = 0;
-		i2ob_dev[i].controller = NULL;
-		i2ob_dev[i].i2odev = NULL;
-		i2ob_dev[i].tid = 0;
-		i2ob_dev[i].head = NULL;
-		i2ob_dev[i].tail = NULL;
-		i2ob_dev[i].depth = MAX_I2OB_DEPTH;
-		i2ob_max_sectors[i] = 2;
-	}
-	
 	for (i = 0; i < MAX_I2OB; i++) {
-		struct gendisk *disk = i2ob_disk[i];
-		disk->major = MAJOR_NR;
-		disk->first_minor = i<<4;
-		disk->fops = &i2ob_fops;
-		sprintf(disk->disk_name, "i2o/hd%c", 'a' + i);
+		struct i2ob_device *dev = &i2ob_dev[i];
+		dev->index = i;
+		dev->refcnt = 0;
+		dev->flags = 0;
+		dev->controller = NULL;
+		dev->i2odev = NULL;
+		dev->tid = 0;
+		dev->head = NULL;
+		dev->tail = NULL;
+		dev->depth = MAX_I2OB_DEPTH;
+		dev->max_sectors = 2;
+		dev->gd = NULL;
 	}
 	
 	/*
-	 *	Set up the queue
-	 */
-	for(i = 0; i < MAX_I2O_CONTROLLERS; i++)
-	{
-		i2ob_queues[i] = NULL;
-	}
-
-	/*
 	 *	Register the OSM handler as we will need this to probe for
 	 *	drives, geometry and other goodies.
 	 */
@@ -1671,9 +1619,6 @@
 
 	return 0;
 
-oom:
-	while (i--)
-		put_disk(i2ob_disk[i]);
 	unregister_blkdev(MAJOR_NR, "i2o_block");
 	return -ENOMEM;
 }
@@ -1701,11 +1646,8 @@
 	if(i2ob_dev_count) {
 		struct i2o_device *d;
 		for(i = 0; i < MAX_I2OB; i++)
-		if((d=i2ob_dev[i<<4].i2odev)) {
-			i2o_device_notify_off(d, &i2o_block_handler);
-			i2o_event_register(d->controller, d->lct_data.tid, 
-				i2ob_context, i<<4, 0);
-		}
+			if((d = i2ob_dev[i].i2odev))
+				i2ob_del_device(d->controller, d);
 	}
 	
 	/*
@@ -1725,15 +1667,21 @@
 	 */
 
 	i2o_remove_handler(&i2o_block_handler);
-		 
-	for (i = 0; i < MAX_I2OB; i++)
-		put_disk(i2ob_disk[i]);
 
 	/*
 	 *	Return the block device
 	 */
 	if (unregister_blkdev(MAJOR_NR, "i2o_block") != 0)
 		printk("i2o_block: cleanup_module failed\n");
+
+	/*
+	 *	release request queue
+	 */
+	for (i = 0; i < MAX_I2O_CONTROLLERS; i ++)
+		if(i2ob_queues[i]) {
+			blk_cleanup_queue(i2ob_queues[i]->req_queue);
+			kfree(i2ob_queues[i]);
+		}
 }
 
 MODULE_AUTHOR("Red Hat");
diff -Nru a/drivers/message/i2o/i2o_config.c b/drivers/message/i2o/i2o_config.c
--- a/drivers/message/i2o/i2o_config.c	Sun May 16 01:18:36 2004
+++ b/drivers/message/i2o/i2o_config.c	Sun May 16 01:18:36 2004
@@ -5,21 +5,24 @@
  *	
  * Written by Alan Cox, Building Number Three Ltd
  *
- * Modified 04/20/1999 by Deepak Saxena
- *   - Added basic ioctl() support
- * Modified 06/07/1999 by Deepak Saxena
- *   - Added software download ioctl (still testing)
- * Modified 09/10/1999 by Auvo Häkkinen
- *   - Changes to i2o_cfg_reply(), ioctl_parms()
- *   - Added ioct_validate()
- * Modified 09/30/1999 by Taneli Vähäkangas
- *   - Fixed ioctl_swdl()
- * Modified 10/04/1999 by Taneli Vähäkangas
- *   - Changed ioctl_swdl(), implemented ioctl_swul() and ioctl_swdel()
- * Modified 11/18/1999 by Deepak Saxena
- *   - Added event managmenet support
- *
- * 2.4 rewrite ported to 2.5 - Alan Cox <alan@redhat.com>
+ * Fixes/additions:
+ *	Deepak Saxena (04/20/1999):
+ *		Added basic ioctl() support
+ *	Deepak Saxena (06/07/1999):
+ *		Added software download ioctl (still testing)
+ *	Auvo Häkkinen (09/10/1999):
+ *		Changes to i2o_cfg_reply(), ioctl_parms()
+ *		Added ioct_validate()
+ *	Taneli Vähäkangas (09/30/1999):
+ *		Fixed ioctl_swdl()
+ *	Taneli Vähäkangas (10/04/1999):
+ *		Changed ioctl_swdl(), implemented ioctl_swul() and ioctl_swdel()
+ *	Deepak Saxena (11/18/1999):
+ *		Added event managmenet support
+ *	Alan Cox <alan@redhat.com>:
+ *		2.4 rewrite ported to 2.5
+ *	Markus Lidel <Markus.Lidel@shadowconnect.com>:
+ *		Added pass-thru support for Adaptec's raidutils
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -49,6 +52,11 @@
 
 #define MODINC(x,y) ((x) = ((x) + 1) % (y))
 
+struct sg_simple_element {
+	u32  flag_count;
+	u32 addr_bus;
+};
+
 struct i2o_cfg_info
 {
 	struct file* fp;
@@ -75,6 +83,7 @@
 static int ioctl_validate(unsigned long); 
 static int ioctl_evt_reg(unsigned long, struct file *);
 static int ioctl_evt_get(unsigned long, struct file *);
+static int ioctl_passthru(unsigned long);
 static int cfg_fasync(int, struct file*, int);
 
 /*
@@ -256,6 +265,10 @@
 			ret = ioctl_evt_get(arg, fp);
 			break;
 
+		case I2OPASSTHRU:
+			ret = ioctl_passthru(arg);
+			break;
+
 		default:
 			ret = -EINVAL;
 	}
@@ -825,6 +838,165 @@
 	if(copy_to_user(uget, &kget, sizeof(struct i2o_evt_get)))
 		return -EFAULT;
 	return 0;
+}
+
+static int ioctl_passthru(unsigned long arg)
+{
+	struct i2o_cmd_passthru *cmd = (struct i2o_cmd_passthru *) arg;
+	struct i2o_controller *c;
+	u32 msg[MSG_FRAME_SIZE];
+	u32 *user_msg = (u32*)cmd->msg;
+	u32 *reply = NULL;
+	u32 *user_reply = NULL;
+	u32 size = 0;
+	u32 reply_size = 0;
+	u32 rcode = 0;
+	ulong sg_list[SG_TABLESIZE];
+	u32 sg_offset = 0;
+	u32 sg_count = 0;
+	int sg_index = 0;
+	u32 i = 0;
+	ulong p = 0;
+
+	c = i2o_find_controller(cmd->iop);
+	if(!c)
+                return -ENXIO;
+
+	memset(&msg, 0, MSG_FRAME_SIZE*4);
+	if(get_user(size, &user_msg[0]))
+		return -EFAULT;
+	size = size>>16;
+
+	user_reply = &user_msg[size];
+	if(size > MSG_FRAME_SIZE)
+		return -EFAULT;
+	size *= 4; // Convert to bytes
+
+	/* Copy in the user's I2O command */
+	if(copy_from_user((void*)msg, (void*)user_msg, size))
+		return -EFAULT;
+	if(get_user(reply_size, &user_reply[0]) < 0)
+		return -EFAULT;
+
+	reply_size = reply_size>>16;
+	reply = kmalloc(REPLY_FRAME_SIZE*4, GFP_KERNEL);
+	if(!reply) {
+		printk(KERN_WARNING"%s: Could not allocate reply buffer\n",c->name);
+		return -ENOMEM;
+	}
+	memset(reply, 0, REPLY_FRAME_SIZE*4);
+	sg_offset = (msg[0]>>4)&0x0f;
+	msg[2] = (u32)i2o_cfg_context;
+	msg[3] = (u32)reply;
+
+	memset(sg_list,0, sizeof(sg_list[0])*SG_TABLESIZE);
+	if(sg_offset) {
+		struct sg_simple_element *sg;
+
+		if(sg_offset * 4 >= size) {
+			rcode = -EFAULT;
+			goto cleanup;
+		}
+		// TODO 64bit fix
+		sg = (struct sg_simple_element*) (msg+sg_offset);
+		sg_count = (size - sg_offset*4) / sizeof(struct sg_simple_element);
+		if (sg_count > SG_TABLESIZE) {
+			printk(KERN_DEBUG"%s:IOCTL SG List too large (%u)\n", c->name,sg_count);
+			kfree (reply);
+			return -EINVAL;
+		}
+
+		for(i = 0; i < sg_count; i++) {
+			int sg_size;
+
+			if (!(sg[i].flag_count & 0x10000000 /*I2O_SGL_FLAGS_SIMPLE_ADDRESS_ELEMENT*/)) {
+				printk(KERN_DEBUG"%s:Bad SG element %d - not simple (%x)\n",c->name,i,  sg[i].flag_count);
+				rcode = -EINVAL;
+				goto cleanup;
+			}
+			sg_size = sg[i].flag_count & 0xffffff;
+			/* Allocate memory for the transfer */
+			p = (ulong)kmalloc(sg_size, GFP_KERNEL);
+			if (!p) {
+				printk(KERN_DEBUG"%s: Could not allocate SG buffer - size = %d buffer number %d of %d\n", c->name,sg_size,i,sg_count);
+				rcode = -ENOMEM;
+				goto cleanup;
+			}
+			sg_list[sg_index++] = p; // sglist indexed with input frame, not our internal frame.
+			/* Copy in the user's SG buffer if necessary */
+			if(sg[i].flag_count & 0x04000000 /*I2O_SGL_FLAGS_DIR*/) {
+				// TODO 64bit fix
+			        if (copy_from_user((void*)p,(void*)sg[i].addr_bus, sg_size)) {
+					printk(KERN_DEBUG"%s: Could not copy SG buf %d FROM user\n",c->name,i);
+					rcode = -EFAULT;
+					goto cleanup;
+				}
+			}
+			//TODO 64bit fix
+			sg[i].addr_bus = (u32)virt_to_bus((void*)p);
+		}
+	}
+
+	rcode = i2o_post_wait(c, msg, size, 60);
+	if(rcode)
+		goto cleanup;
+
+	if(sg_offset) {
+		/* Copy back the Scatter Gather buffers back to user space */
+		u32 j;
+		// TODO 64bit fix
+		struct sg_simple_element* sg;
+		int sg_size;
+
+		// re-acquire the original message to handle correctly the sg copy operation
+		memset(&msg, 0, MSG_FRAME_SIZE*4);
+		// get user msg size in u32s
+		if (get_user(size, &user_msg[0])) {
+			rcode = -EFAULT;
+			goto cleanup;
+		}
+		size = size>>16;
+		size *= 4;
+		/* Copy in the user's I2O command */
+		if (copy_from_user ((void*)msg, (void*)user_msg, size)) {
+			rcode = -EFAULT;
+			goto cleanup;
+		}
+		sg_count = (size - sg_offset*4) / sizeof(struct sg_simple_element);
+
+		 // TODO 64bit fix
+		sg = (struct sg_simple_element*)(msg + sg_offset);
+		for (j = 0; j < sg_count; j++) {
+			/* Copy out the SG list to user's buffer if necessary */
+			if (!(sg[j].flag_count & 0x4000000 /*I2O_SGL_FLAGS_DIR*/)) {
+				sg_size = sg[j].flag_count & 0xffffff;
+				// TODO 64bit fix
+				if (copy_to_user((void*)sg[j].addr_bus,(void*)sg_list[j], sg_size)) {
+					printk(KERN_WARNING"%s: Could not copy %lx TO user %x\n",c->name, sg_list[j], sg[j].addr_bus);
+					rcode = -EFAULT;
+					goto cleanup;
+				}
+			}
+		}
+	}
+
+	/* Copy back the reply to user space */
+        if (reply_size) {
+		// we wrote our own values for context - now restore the user supplied ones
+		if(copy_from_user(reply+2, user_msg+2, sizeof(u32)*2)) {
+			printk(KERN_WARNING"%s: Could not copy message context FROM user\n",c->name);
+			rcode = -EFAULT;
+		}
+		if(copy_to_user(user_reply, reply, reply_size)) {
+			printk(KERN_WARNING"%s: Could not copy reply TO user\n",c->name);
+			rcode = -EFAULT;
+		}
+	}
+
+cleanup:
+	kfree(reply);
+	i2o_unlock_controller(c);
+	return rcode;
 }
 
 static int cfg_open(struct inode *inode, struct file *file)
diff -Nru a/drivers/message/i2o/i2o_core.c b/drivers/message/i2o/i2o_core.c
--- a/drivers/message/i2o/i2o_core.c	Sun May 16 01:18:35 2004
+++ b/drivers/message/i2o/i2o_core.c	Sun May 16 01:18:35 2004
@@ -213,6 +213,135 @@
 
 static int verbose;
 
+#if BITS_PER_LONG == 64
+/**
+ *      i2o_context_list_add -	append an ptr to the context list and return a
+ *				matching context id.
+ *	@ptr: pointer to add to the context list
+ *	@c: controller to which the context list belong
+ *	returns context id, which could be used in the transaction context
+ *	field.
+ *
+ *	Because the context field in I2O is only 32-bit large, on 64-bit the
+ *	pointer is to large to fit in the context field. The i2o_context_list
+ *	functiones map pointers to context fields.
+ */
+u32 i2o_context_list_add(void *ptr, struct i2o_controller *c) {
+	u32 context = 1;
+	struct i2o_context_list_element **entry = &c->context_list;
+	struct i2o_context_list_element *element;
+	unsigned long flags;
+
+	spin_lock_irqsave(&c->context_list_lock, flags);
+	while(*entry && ((*entry)->flags & I2O_CONTEXT_LIST_USED)) {
+		if((*entry)->context >= context)
+			context = (*entry)->context + 1;
+		entry = &((*entry)->next);
+	}
+
+	if(!*entry) {
+		if(unlikely(!context)) {
+			spin_unlock_irqrestore(&c->context_list_lock, flags);
+			printk(KERN_EMERG "i2o_core: context list overflow\n");
+			return 0;
+		}
+
+		element = kmalloc(sizeof(struct i2o_context_list_element), GFP_KERNEL);
+		if(!element) {
+			printk(KERN_EMERG "i2o_core: could not allocate memory for context list element\n");
+			return 0;
+		}
+		element->context = context;
+		element->next = NULL;
+		*entry = element;
+	} else
+		element = *entry;
+
+	element->ptr = ptr;
+	element->flags = I2O_CONTEXT_LIST_USED;
+
+	spin_unlock_irqrestore(&c->context_list_lock, flags);
+	dprintk(KERN_DEBUG "i2o_core: add context to list %p -> %d\n", ptr, context);
+	return context;
+}
+
+/**
+ *      i2o_context_list_remove - remove a ptr from the context list and return
+ *				  the matching context id.
+ *	@ptr: pointer to be removed from the context list
+ *	@c: controller to which the context list belong
+ *	returns context id, which could be used in the transaction context
+ *	field.
+ */
+u32 i2o_context_list_remove(void *ptr, struct i2o_controller *c) {
+	struct i2o_context_list_element **entry = &c->context_list;
+	struct i2o_context_list_element *element;
+	u32 context;
+	unsigned long flags;
+
+	spin_lock_irqsave(&c->context_list_lock, flags);
+	while(*entry && ((*entry)->ptr != ptr))
+		entry = &((*entry)->next);
+
+	if(unlikely(!*entry)) {
+		spin_unlock_irqrestore(&c->context_list_lock, flags);
+		printk(KERN_WARNING "i2o_core: could not remove nonexistent ptr %p\n", ptr);
+		return 0;
+	}
+
+	element = *entry;
+
+	context = element->context;
+	element->ptr = NULL;
+	element->flags |= I2O_CONTEXT_LIST_DELETED;
+
+	spin_unlock_irqrestore(&c->context_list_lock, flags);
+	dprintk(KERN_DEBUG "i2o_core: markt as deleted in context list %p -> %d\n", ptr, context);
+	return context;
+}
+
+/**
+ *      i2o_context_list_get -	get a ptr from the context list and remove it
+ *				from the list.
+ *	@context: context id to which the pointer belong
+ *	@c: controller to which the context list belong
+ *	returns pointer to the matching context id
+ */
+void *i2o_context_list_get(u32 context, struct i2o_controller *c) {
+	struct i2o_context_list_element **entry = &c->context_list;
+	struct i2o_context_list_element *element;
+	void *ptr;
+	int count = 0;
+	unsigned long flags;
+
+	spin_lock_irqsave(&c->context_list_lock, flags);
+	while(*entry && ((*entry)->context != context)) {
+		entry = &((*entry)->next);
+		count ++;
+	}
+
+	if(unlikely(!*entry)) {
+		spin_unlock_irqrestore(&c->context_list_lock, flags);
+		printk(KERN_WARNING "i2o_core: context id %d not found\n", context);
+		return NULL;
+	}
+
+	element = *entry;
+	ptr = element->ptr;
+	if(count >= I2O_CONTEXT_LIST_MIN_LENGTH) {
+		*entry = (*entry)->next;
+		kfree(element);
+	} else {
+		element->ptr = NULL;
+		element->flags &= !I2O_CONTEXT_LIST_USED;
+	}
+
+	spin_unlock_irqrestore(&c->context_list_lock, flags);
+	dprintk(KERN_DEBUG "i2o_core: get ptr from context list %d -> %p\n", context, ptr);
+	return ptr;
+}
+#endif
+
 /*
  * I2O Core reply handler
  */
@@ -3551,6 +3680,10 @@
 	c->short_req = 0;
 	c->pdev = dev;
 
+#if BITS_PER_LONG == 64
+	c->context_list_lock = SPIN_LOCK_UNLOCKED;
+#endif
+
 	c->irq_mask = mem+0x34;
 	c->post_port = mem+0x40;
 	c->reply_port = mem+0x44;
@@ -3788,3 +3921,6 @@
 EXPORT_SYMBOL(i2o_report_status);
 EXPORT_SYMBOL(i2o_dump_message);
 EXPORT_SYMBOL(i2o_get_class_name);
+EXPORT_SYMBOL(i2o_context_list_add);
+EXPORT_SYMBOL(i2o_context_list_get);
+EXPORT_SYMBOL(i2o_context_list_remove);
diff -Nru a/drivers/message/i2o/i2o_proc.c b/drivers/message/i2o/i2o_proc.c
--- a/drivers/message/i2o/i2o_proc.c	Sun May 16 01:18:35 2004
+++ b/drivers/message/i2o/i2o_proc.c	Sun May 16 01:18:35 2004
@@ -43,6 +43,7 @@
 #include <linux/pci.h>
 #include <linux/i2o.h>
 #include <linux/proc_fs.h>
+#include <linux/seq_file.h>
 #include <linux/init.h>
 #include <linux/module.h>
 #include <linux/errno.h>
@@ -64,13 +65,14 @@
 	mode_t mode;			/* mode */
 	read_proc_t *read_proc;		/* read func */
 	write_proc_t *write_proc;	/* write func */
+	struct file_operations *fops_proc;	/* file operations func */
 } i2o_proc_entry;
 
 // #define DRIVERDEBUG
 
-static int i2o_proc_read_lct(char *, char **, off_t, int, int *, void *);
-static int i2o_proc_read_hrt(char *, char **, off_t, int, int *, void *);
-static int i2o_proc_read_status(char *, char **, off_t, int, int *, void *);
+static int i2o_seq_show_lct(struct seq_file *, void *);
+static int i2o_seq_show_hrt(struct seq_file *, void *);
+static int i2o_seq_show_status(struct seq_file *, void *);
 
 static int i2o_proc_read_hw(char *, char **, off_t, int, int *, void *);
 static int i2o_proc_read_ddm_table(char *, char **, off_t, int, int *, void *);
@@ -151,20 +153,56 @@
 	0xffffffff	// All classes
 };
 
+static int i2o_seq_open_hrt(struct inode *inode, struct file *file)
+{
+	return single_open(file, i2o_seq_show_hrt, PDE(inode)->data);
+};
+
+struct file_operations i2o_seq_fops_hrt = {
+	.open	= i2o_seq_open_hrt,
+	.read	= seq_read,
+	.llseek	= seq_lseek,
+	.release = single_release
+};
+
+static int i2o_seq_open_lct(struct inode *inode, struct file *file)
+{
+	return single_open(file, i2o_seq_show_lct, PDE(inode)->data);
+};
+
+struct file_operations i2o_seq_fops_lct = {
+	.open	= i2o_seq_open_lct,
+	.read	= seq_read,
+	.llseek	= seq_lseek,
+	.release = single_release
+};
+
+static int i2o_seq_open_status(struct inode *inode, struct file *file)
+{
+	return single_open(file, i2o_seq_show_status, PDE(inode)->data);
+};
+
+struct file_operations i2o_seq_fops_status = {
+	.open	= i2o_seq_open_status,
+	.read	= seq_read,
+	.llseek	= seq_lseek,
+	.release = single_release
+};
+
 /*
  * IOP specific entries...write field just in case someone 
  * ever wants one.
  */
 static i2o_proc_entry generic_iop_entries[] = 
 {
-	{"hrt", S_IFREG|S_IRUGO, i2o_proc_read_hrt, NULL},
-	{"lct", S_IFREG|S_IRUGO, i2o_proc_read_lct, NULL},
-	{"status", S_IFREG|S_IRUGO, i2o_proc_read_status, NULL},
-	{"hw", S_IFREG|S_IRUGO, i2o_proc_read_hw, NULL},
-	{"ddm_table", S_IFREG|S_IRUGO, i2o_proc_read_ddm_table, NULL},
-	{"driver_store", S_IFREG|S_IRUGO, i2o_proc_read_driver_store, NULL},
-	{"drivers_stored", S_IFREG|S_IRUGO, i2o_proc_read_drivers_stored, NULL},
-	{NULL, 0, NULL, NULL}
+	{"hrt", S_IFREG|S_IRUGO, NULL, NULL, &i2o_seq_fops_hrt},
+	{"lct", S_IFREG|S_IRUGO, NULL, NULL, &i2o_seq_fops_lct},
+	{"status", S_IFREG|S_IRUGO, NULL, NULL, &i2o_seq_fops_status},
+	{"hw", S_IFREG|S_IRUGO, i2o_proc_read_hw, NULL, NULL},
+	{"ddm_table", S_IFREG|S_IRUGO, i2o_proc_read_ddm_table, NULL, NULL},
+	{"driver_store", S_IFREG|S_IRUGO, i2o_proc_read_driver_store, NULL, NULL},
+	{"drivers_stored", S_IFREG|S_IRUGO, i2o_proc_read_drivers_stored, NULL, NULL},
+	{NULL, 0, NULL, NULL, NULL}
 };
 
 /*
@@ -172,18 +210,18 @@
  */
 static i2o_proc_entry generic_dev_entries[] = 
 {
-	{"groups", S_IFREG|S_IRUGO, i2o_proc_read_groups, NULL},
-	{"phys_dev", S_IFREG|S_IRUGO, i2o_proc_read_phys_device, NULL},
-	{"claimed", S_IFREG|S_IRUGO, i2o_proc_read_claimed, NULL},
-	{"users", S_IFREG|S_IRUGO, i2o_proc_read_users, NULL},
-	{"priv_msgs", S_IFREG|S_IRUGO, i2o_proc_read_priv_msgs, NULL},
-	{"authorized_users", S_IFREG|S_IRUGO, i2o_proc_read_authorized_users, NULL},
-	{"dev_identity", S_IFREG|S_IRUGO, i2o_proc_read_dev_identity, NULL},
-	{"ddm_identity", S_IFREG|S_IRUGO, i2o_proc_read_ddm_identity, NULL},
-	{"user_info", S_IFREG|S_IRUGO, i2o_proc_read_uinfo, NULL},
-	{"sgl_limits", S_IFREG|S_IRUGO, i2o_proc_read_sgl_limits, NULL},
-	{"sensors", S_IFREG|S_IRUGO, i2o_proc_read_sensors, NULL},
-	{NULL, 0, NULL, NULL}
+	{"groups", S_IFREG|S_IRUGO, i2o_proc_read_groups, NULL, NULL},
+	{"phys_dev", S_IFREG|S_IRUGO, i2o_proc_read_phys_device, NULL, NULL},
+	{"claimed", S_IFREG|S_IRUGO, i2o_proc_read_claimed, NULL, NULL},
+	{"users", S_IFREG|S_IRUGO, i2o_proc_read_users, NULL, NULL},
+	{"priv_msgs", S_IFREG|S_IRUGO, i2o_proc_read_priv_msgs, NULL, NULL},
+	{"authorized_users", S_IFREG|S_IRUGO, i2o_proc_read_authorized_users, NULL, NULL},
+	{"dev_identity", S_IFREG|S_IRUGO, i2o_proc_read_dev_identity, NULL, NULL},
+	{"ddm_identity", S_IFREG|S_IRUGO, i2o_proc_read_ddm_identity, NULL, NULL},
+	{"user_info", S_IFREG|S_IRUGO, i2o_proc_read_uinfo, NULL, NULL},
+	{"sgl_limits", S_IFREG|S_IRUGO, i2o_proc_read_sgl_limits, NULL, NULL},
+	{"sensors", S_IFREG|S_IRUGO, i2o_proc_read_sensors, NULL, NULL},
+	{NULL, 0, NULL, NULL, NULL}
 };
 
 /*
@@ -191,7 +229,7 @@
  */
 static i2o_proc_entry rbs_dev_entries[] = 
 {
-	{"dev_name", S_IFREG|S_IRUGO, i2o_proc_read_dev_name, NULL},
+	{"dev_name", S_IFREG|S_IRUGO, i2o_proc_read_dev_name, NULL, NULL},
 	{NULL, 0, NULL, NULL}
 };
 
@@ -223,21 +261,21 @@
  */
 static i2o_proc_entry lan_entries[] = 
 {
-	{"lan_dev_info", S_IFREG|S_IRUGO, i2o_proc_read_lan_dev_info, NULL},
-	{"lan_mac_addr", S_IFREG|S_IRUGO, i2o_proc_read_lan_mac_addr, NULL},
+	{"lan_dev_info", S_IFREG|S_IRUGO, i2o_proc_read_lan_dev_info, NULL, NULL},
+	{"lan_mac_addr", S_IFREG|S_IRUGO, i2o_proc_read_lan_mac_addr, NULL, NULL},
 	{"lan_mcast_addr", S_IFREG|S_IRUGO|S_IWUSR,
-	 i2o_proc_read_lan_mcast_addr, NULL},
+	 i2o_proc_read_lan_mcast_addr, NULL, NULL},
 	{"lan_batch_ctrl", S_IFREG|S_IRUGO|S_IWUSR,
-	 i2o_proc_read_lan_batch_control, NULL},
-	{"lan_operation", S_IFREG|S_IRUGO, i2o_proc_read_lan_operation, NULL},
+	 i2o_proc_read_lan_batch_control, NULL, NULL},
+	{"lan_operation", S_IFREG|S_IRUGO, i2o_proc_read_lan_operation, NULL, NULL},
 	{"lan_media_operation", S_IFREG|S_IRUGO,
-	 i2o_proc_read_lan_media_operation, NULL},
-	{"lan_alt_addr", S_IFREG|S_IRUGO, i2o_proc_read_lan_alt_addr, NULL},
-	{"lan_tx_info", S_IFREG|S_IRUGO, i2o_proc_read_lan_tx_info, NULL},
-	{"lan_rx_info", S_IFREG|S_IRUGO, i2o_proc_read_lan_rx_info, NULL},
+	 i2o_proc_read_lan_media_operation, NULL, NULL},
+	{"lan_alt_addr", S_IFREG|S_IRUGO, i2o_proc_read_lan_alt_addr, NULL, NULL},
+	{"lan_tx_info", S_IFREG|S_IRUGO, i2o_proc_read_lan_tx_info, NULL, NULL},
+	{"lan_rx_info", S_IFREG|S_IRUGO, i2o_proc_read_lan_rx_info, NULL, NULL},
 
-	{"lan_hist_stats", S_IFREG|S_IRUGO, i2o_proc_read_lan_hist_stats, NULL},
-	{NULL, 0, NULL, NULL}
+	{"lan_hist_stats", S_IFREG|S_IRUGO, i2o_proc_read_lan_hist_stats, NULL, NULL},
+	{NULL, 0, NULL, NULL, NULL}
 };
 
 /*
@@ -246,20 +284,20 @@
  */
 static i2o_proc_entry lan_eth_entries[] = 
 {
-	{"lan_eth_stats", S_IFREG|S_IRUGO, i2o_proc_read_lan_eth_stats, NULL},
-	{NULL, 0, NULL, NULL}
+	{"lan_eth_stats", S_IFREG|S_IRUGO, i2o_proc_read_lan_eth_stats, NULL, NULL},
+	{NULL, 0, NULL, NULL, NULL}
 };
 
 static i2o_proc_entry lan_tr_entries[] = 
 {
-	{"lan_tr_stats", S_IFREG|S_IRUGO, i2o_proc_read_lan_tr_stats, NULL},
-	{NULL, 0, NULL, NULL}
+	{"lan_tr_stats", S_IFREG|S_IRUGO, i2o_proc_read_lan_tr_stats, NULL, NULL},
+	{NULL, 0, NULL, NULL, NULL}
 };
 
 static i2o_proc_entry lan_fddi_entries[] = 
 {
-	{"lan_fddi_stats", S_IFREG|S_IRUGO, i2o_proc_read_lan_fddi_stats, NULL},
-	{NULL, 0, NULL, NULL}
+	{"lan_fddi_stats", S_IFREG|S_IRUGO, i2o_proc_read_lan_fddi_stats, NULL, NULL},
+	{NULL, 0, NULL, NULL, NULL}
 };
 
 
@@ -300,116 +338,98 @@
 
 static spinlock_t i2o_proc_lock = SPIN_LOCK_UNLOCKED;
 
-int i2o_proc_read_hrt(char *buf, char **start, off_t offset, int count, 
-		      int *eof, void *data)
+int i2o_seq_show_hrt(struct seq_file *seq, void *v)
 {
-	struct i2o_controller *c = (struct i2o_controller *)data;
+	struct i2o_controller *c = (struct i2o_controller *)seq->private;
 	i2o_hrt *hrt = (i2o_hrt *)c->hrt;
 	u32 bus;
-	int len, i;
-
-	spin_lock(&i2o_proc_lock);
-
-	len = 0;
+	int i;
 
 	if(hrt->hrt_version)
 	{
-		len += sprintf(buf+len, 
-			       "HRT table for controller is too new a version.\n");
-		spin_unlock(&i2o_proc_lock);
-		return len;
+		seq_printf(seq, "HRT table for controller is too new a version.\n");
+		return 0;
 	}
 
-	if((hrt->num_entries * hrt->entry_len + 8) > 2048) {
-		printk(KERN_WARNING "i2o_proc: HRT does not fit into buffer\n");
-		len += sprintf(buf+len,
-			       "HRT table too big to fit in buffer.\n");
-		spin_unlock(&i2o_proc_lock);
-		return len;
-	}
-	
-	len += sprintf(buf+len, "HRT has %d entries of %d bytes each.\n",
+	seq_printf(seq, "HRT has %d entries of %d bytes each.\n",
 		       hrt->num_entries, hrt->entry_len << 2);
 
-	for(i = 0; i < hrt->num_entries && len < count; i++)
+	for(i = 0; i < hrt->num_entries; i++)
 	{
-		len += sprintf(buf+len, "Entry %d:\n", i);
-		len += sprintf(buf+len, "   Adapter ID: %0#10x\n", 
+		seq_printf(seq, "Entry %d:\n", i);
+		seq_printf(seq, "   Adapter ID: %0#10x\n",
 					hrt->hrt_entry[i].adapter_id);
-		len += sprintf(buf+len, "   Controlling tid: %0#6x\n",
+		seq_printf(seq, "   Controlling tid: %0#6x\n",
 					hrt->hrt_entry[i].parent_tid);
 
 		if(hrt->hrt_entry[i].bus_type != 0x80)
 		{
 			bus = hrt->hrt_entry[i].bus_type;
-			len += sprintf(buf+len, "   %s Information\n", bus_strings[bus]);
+			seq_printf(seq, "   %s Information\n", bus_strings[bus]);
 
 			switch(bus)
 			{
 				case I2O_BUS_LOCAL:
-					len += sprintf(buf+len, "     IOBase: %0#6x,",
+					seq_printf(seq, "     IOBase: %0#6x,",
 								hrt->hrt_entry[i].bus.local_bus.LbBaseIOPort);
-					len += sprintf(buf+len, " MemoryBase: %0#10x\n",
+					seq_printf(seq, " MemoryBase: %0#10x\n",
 								hrt->hrt_entry[i].bus.local_bus.LbBaseMemoryAddress);
 					break;
 
 				case I2O_BUS_ISA:
-					len += sprintf(buf+len, "     IOBase: %0#6x,",
+					seq_printf(seq, "     IOBase: %0#6x,",
 								hrt->hrt_entry[i].bus.isa_bus.IsaBaseIOPort);
-					len += sprintf(buf+len, " MemoryBase: %0#10x,",
+					seq_printf(seq, " MemoryBase: %0#10x,",
 								hrt->hrt_entry[i].bus.isa_bus.IsaBaseMemoryAddress);
-					len += sprintf(buf+len, " CSN: %0#4x,",
+					seq_printf(seq, " CSN: %0#4x,",
 								hrt->hrt_entry[i].bus.isa_bus.CSN);
 					break;
 
 				case I2O_BUS_EISA:
-					len += sprintf(buf+len, "     IOBase: %0#6x,",
+					seq_printf(seq, "     IOBase: %0#6x,",
 								hrt->hrt_entry[i].bus.eisa_bus.EisaBaseIOPort);
-					len += sprintf(buf+len, " MemoryBase: %0#10x,",
+					seq_printf(seq, " MemoryBase: %0#10x,",
 								hrt->hrt_entry[i].bus.eisa_bus.EisaBaseMemoryAddress);
-					len += sprintf(buf+len, " Slot: %0#4x,",
+					seq_printf(seq, " Slot: %0#4x,",
 								hrt->hrt_entry[i].bus.eisa_bus.EisaSlotNumber);
 					break;
 			 
 				case I2O_BUS_MCA:
-					len += sprintf(buf+len, "     IOBase: %0#6x,",
+					seq_printf(seq, "     IOBase: %0#6x,",
 								hrt->hrt_entry[i].bus.mca_bus.McaBaseIOPort);
-					len += sprintf(buf+len, " MemoryBase: %0#10x,",
+					seq_printf(seq, " MemoryBase: %0#10x,",
 								hrt->hrt_entry[i].bus.mca_bus.McaBaseMemoryAddress);
-					len += sprintf(buf+len, " Slot: %0#4x,",
+					seq_printf(seq, " Slot: %0#4x,",
 								hrt->hrt_entry[i].bus.mca_bus.McaSlotNumber);
 					break;
 
 				case I2O_BUS_PCI:
-					len += sprintf(buf+len, "     Bus: %0#4x",
+					seq_printf(seq, "     Bus: %0#4x",
 								hrt->hrt_entry[i].bus.pci_bus.PciBusNumber);
-					len += sprintf(buf+len, " Dev: %0#4x",
+					seq_printf(seq, " Dev: %0#4x",
 								hrt->hrt_entry[i].bus.pci_bus.PciDeviceNumber);
-					len += sprintf(buf+len, " Func: %0#4x",
+					seq_printf(seq, " Func: %0#4x",
 								hrt->hrt_entry[i].bus.pci_bus.PciFunctionNumber);
-					len += sprintf(buf+len, " Vendor: %0#6x",
+					seq_printf(seq, " Vendor: %0#6x",
 								hrt->hrt_entry[i].bus.pci_bus.PciVendorID);
-					len += sprintf(buf+len, " Device: %0#6x\n",
+					seq_printf(seq, " Device: %0#6x\n",
 								hrt->hrt_entry[i].bus.pci_bus.PciDeviceID);
 					break;
 
 				default:
-					len += sprintf(buf+len, "      Unsupported Bus Type\n");
+					seq_printf(seq, "      Unsupported Bus Type\n");
 			}
 		}
 		else
-			len += sprintf(buf+len, "   Unknown Bus Type\n");
+			seq_printf(seq, "   Unknown Bus Type\n");
 	}
-
-	spin_unlock(&i2o_proc_lock);
 	
-	return len;
+	return 0;
 }
 
-int i2o_proc_read_lct(char *buf, char **start, off_t offset, int len,
-	int *eof, void *data)
+int i2o_seq_show_lct(struct seq_file *seq, void *v)
 {
-	struct i2o_controller *c = (struct i2o_controller*)data;
+	struct i2o_controller *c = (struct i2o_controller*)seq->private;
 	i2o_lct *lct = (i2o_lct *)c->lct;
 	int entries;
 	int i;
@@ -422,23 +442,19 @@
 		"Fibre Channel Bus"
 	};
 
-	spin_lock(&i2o_proc_lock);
-	len = 0;
-
 	entries = (lct->table_size - 3)/9;
 
-	len += sprintf(buf, "LCT contains %d %s\n", entries,
+	seq_printf(seq, "LCT contains %d %s\n", entries,
 						entries == 1 ? "entry" : "entries");
 	if(lct->boot_tid)	
-		len += sprintf(buf+len, "Boot Device @ ID %d\n", lct->boot_tid);
+		seq_printf(seq, "Boot Device @ ID %d\n", lct->boot_tid);
 
-	len += 
-		sprintf(buf+len, "Current Change Indicator: %#10x\n", lct->change_ind);
+	seq_printf(seq, "Current Change Indicator: %#10x\n", lct->change_ind);
 
 	for(i = 0; i < entries; i++)
 	{
-		len += sprintf(buf+len, "Entry %d\n", i);
-		len += sprintf(buf+len, "  Class, SubClass  : %s", i2o_get_class_name(lct->lct_entry[i].class_id));
+		seq_printf(seq, "Entry %d\n", i);
+		seq_printf(seq, "  Class, SubClass  : %s", i2o_get_class_name(lct->lct_entry[i].class_id));
 	
 		/*
 		 *	Classes which we'll print subclass info for
@@ -449,23 +465,23 @@
 				switch(lct->lct_entry[i].sub_class)
 				{
 					case 0x00:
-						len += sprintf(buf+len, ", Direct-Access Read/Write");
+						seq_printf(seq, ", Direct-Access Read/Write");
 						break;
 
 					case 0x04:
-						len += sprintf(buf+len, ", WORM Drive");
+						seq_printf(seq, ", WORM Drive");
 						break;
 	
 					case 0x05:
-						len += sprintf(buf+len, ", CD-ROM Drive");
+						seq_printf(seq, ", CD-ROM Drive");
 						break;
 
 					case 0x07:
-						len += sprintf(buf+len, ", Optical Memory Device");
+						seq_printf(seq, ", Optical Memory Device");
 						break;
 
 					default:
-						len += sprintf(buf+len, ", Unknown (0x%02x)",
+						seq_printf(seq, ", Unknown (0x%02x)",
 							       lct->lct_entry[i].sub_class);
 						break;
 				}
@@ -475,27 +491,27 @@
 				switch(lct->lct_entry[i].sub_class & 0xFF)
 				{
 					case 0x30:
-						len += sprintf(buf+len, ", Ethernet");
+						seq_printf(seq, ", Ethernet");
 						break;
 
 					case 0x40:
-						len += sprintf(buf+len, ", 100base VG");
+						seq_printf(seq, ", 100base VG");
 						break;
 
 					case 0x50:
-						len += sprintf(buf+len, ", IEEE 802.5/Token-Ring");
+						seq_printf(seq, ", IEEE 802.5/Token-Ring");
 						break;
 
 					case 0x60:
-						len += sprintf(buf+len, ", ANSI X3T9.5 FDDI");
+						seq_printf(seq, ", ANSI X3T9.5 FDDI");
 						break;
 		
 					case 0x70:
-						len += sprintf(buf+len, ", Fibre Channel");
+						seq_printf(seq, ", Fibre Channel");
 						break;
 
 					default:
-						len += sprintf(buf+len, ", Unknown Sub-Class (0x%02x)",
+						seq_printf(seq, ", Unknown Sub-Class (0x%02x)",
 							       lct->lct_entry[i].sub_class & 0xFF);
 						break;
 				}
@@ -503,27 +519,27 @@
 
 			case I2O_CLASS_SCSI_PERIPHERAL:
 				if(lct->lct_entry[i].sub_class < SCSI_TABLE_SIZE)
-					len += sprintf(buf+len, ", %s", 
+					seq_printf(seq, ", %s",
 								scsi_devices[lct->lct_entry[i].sub_class]);
 				else
-					len += sprintf(buf+len, ", Unknown Device Type");
+					seq_printf(seq, ", Unknown Device Type");
 				break;
 
 			case I2O_CLASS_BUS_ADAPTER_PORT:
 				if(lct->lct_entry[i].sub_class < BUS_TABLE_SIZE)
-					len += sprintf(buf+len, ", %s", 
+					seq_printf(seq, ", %s",
 								bus_ports[lct->lct_entry[i].sub_class]);
 				else
-					len += sprintf(buf+len, ", Unknown Bus Type");
+					seq_printf(seq, ", Unknown Bus Type");
 				break;
 		}
-		len += sprintf(buf+len, "\n");
+		seq_printf(seq, "\n");
 		
-		len += sprintf(buf+len, "  Local TID        : 0x%03x\n", lct->lct_entry[i].tid);
-		len += sprintf(buf+len, "  User TID         : 0x%03x\n", lct->lct_entry[i].user_tid);
-		len += sprintf(buf+len, "  Parent TID       : 0x%03x\n", 
+		seq_printf(seq, "  Local TID        : 0x%03x\n", lct->lct_entry[i].tid);
+		seq_printf(seq, "  User TID         : 0x%03x\n", lct->lct_entry[i].user_tid);
+		seq_printf(seq, "  Parent TID       : 0x%03x\n",
 					lct->lct_entry[i].parent_tid);
-		len += sprintf(buf+len, "  Identity Tag     : 0x%x%x%x%x%x%x%x%x\n",
+		seq_printf(seq, "  Identity Tag     : 0x%x%x%x%x%x%x%x%x\n",
 					lct->lct_entry[i].identity_tag[0],
 					lct->lct_entry[i].identity_tag[1],
 					lct->lct_entry[i].identity_tag[2],
@@ -532,214 +548,207 @@
 					lct->lct_entry[i].identity_tag[5],
 					lct->lct_entry[i].identity_tag[6],
 					lct->lct_entry[i].identity_tag[7]);
-		len += sprintf(buf+len, "  Change Indicator : %0#10x\n", 
+		seq_printf(seq, "  Change Indicator : %0#10x\n",
 				lct->lct_entry[i].change_ind);
-		len += sprintf(buf+len, "  Event Capab Mask : %0#10x\n", 
+		seq_printf(seq, "  Event Capab Mask : %0#10x\n",
 				lct->lct_entry[i].device_flags);
 	}
 
-	spin_unlock(&i2o_proc_lock);
-	return len;
+	return 0;
 }
 
-int i2o_proc_read_status(char *buf, char **start, off_t offset, int len, 
-			 int *eof, void *data)
+int i2o_seq_show_status(struct seq_file *seq, void *v)
 {
-	struct i2o_controller *c = (struct i2o_controller*)data;
+	struct i2o_controller *c = (struct i2o_controller*)seq->private;
 	char prodstr[25];
 	int version;
 	
-	spin_lock(&i2o_proc_lock);
-	len = 0;
-
 	i2o_status_get(c); // reread the status block
 
-	len += sprintf(buf+len,"Organization ID        : %0#6x\n", 
+	seq_printf(seq, "Organization ID        : %0#6x\n",
 				c->status_block->org_id);
 
 	version = c->status_block->i2o_version;
 	
 /* FIXME for Spec 2.0
 	if (version == 0x02) {
-		len += sprintf(buf+len,"Lowest I2O version supported: ");
+		seq_printf(seq, "Lowest I2O version supported: ");
 		switch(workspace[2]) {
 			case 0x00:
-				len += sprintf(buf+len,"1.0\n");
+				seq_printf(seq, "1.0\n");
 				break;
 			case 0x01:
-				len += sprintf(buf+len,"1.5\n");
+				seq_printf(seq, "1.5\n");
 				break;
 			case 0x02:
-				len += sprintf(buf+len,"2.0\n");
+				seq_printf(seq, "2.0\n");
 				break;
 		}
 
-		len += sprintf(buf+len, "Highest I2O version supported: ");
+		seq_printf(seq, "Highest I2O version supported: ");
 		switch(workspace[3]) {
 			case 0x00:
-				len += sprintf(buf+len,"1.0\n");
+				seq_printf(seq, "1.0\n");
 				break;
 			case 0x01:
-				len += sprintf(buf+len,"1.5\n");
+				seq_printf(seq, "1.5\n");
 				break;
 			case 0x02:
-				len += sprintf(buf+len,"2.0\n");
+				seq_printf(seq, "2.0\n");
 				break;
 		}
 	}
 */
-	len += sprintf(buf+len,"IOP ID                 : %0#5x\n", 
+	seq_printf(seq, "IOP ID                 : %0#5x\n",
 				c->status_block->iop_id);
-	len += sprintf(buf+len,"Host Unit ID           : %0#6x\n",
+	seq_printf(seq, "Host Unit ID           : %0#6x\n",
 				c->status_block->host_unit_id);
-	len += sprintf(buf+len,"Segment Number         : %0#5x\n",
+	seq_printf(seq, "Segment Number         : %0#5x\n",
 				c->status_block->segment_number);
 
-	len += sprintf(buf+len, "I2O version            : ");
+	seq_printf(seq, "I2O version            : ");
 	switch (version) {
 		case 0x00:
-			len += sprintf(buf+len,"1.0\n");
+			seq_printf(seq, "1.0\n");
 			break;
 		case 0x01:
-			len += sprintf(buf+len,"1.5\n");
+			seq_printf(seq, "1.5\n");
 			break;
 		case 0x02:
-			len += sprintf(buf+len,"2.0\n");
+			seq_printf(seq, "2.0\n");
 			break;
 		default:
-			len += sprintf(buf+len,"Unknown version\n");
+			seq_printf(seq, "Unknown version\n");
 	}
 
-	len += sprintf(buf+len, "IOP State              : ");
+	seq_printf(seq, "IOP State              : ");
 	switch (c->status_block->iop_state) {
 		case 0x01:
-			len += sprintf(buf+len,"INIT\n");
+			seq_printf(seq, "INIT\n");
 			break;
 
 		case 0x02:
-			len += sprintf(buf+len,"RESET\n");
+			seq_printf(seq, "RESET\n");
 			break;
 
 		case 0x04:
-			len += sprintf(buf+len,"HOLD\n");
+			seq_printf(seq, "HOLD\n");
 			break;
 
 		case 0x05:
-			len += sprintf(buf+len,"READY\n");
+			seq_printf(seq, "READY\n");
 			break;
 
 		case 0x08:
-			len += sprintf(buf+len,"OPERATIONAL\n");
+			seq_printf(seq, "OPERATIONAL\n");
 			break;
 
 		case 0x10:
-			len += sprintf(buf+len,"FAILED\n");
+			seq_printf(seq, "FAILED\n");
 			break;
 
 		case 0x11:
-			len += sprintf(buf+len,"FAULTED\n");
+			seq_printf(seq, "FAULTED\n");
 			break;
 
 		default:
-			len += sprintf(buf+len,"Unknown\n");
+			seq_printf(seq, "Unknown\n");
 			break;
 	}
 
-	len += sprintf(buf+len,"Messenger Type         : ");
+	seq_printf(seq, "Messenger Type         : ");
 	switch (c->status_block->msg_type) { 
 		case 0x00:
-			len += sprintf(buf+len,"Memory mapped\n");
+			seq_printf(seq, "Memory mapped\n");
 			break;
 		case 0x01:
-			len += sprintf(buf+len,"Memory mapped only\n");
+			seq_printf(seq, "Memory mapped only\n");
 			break;
 		case 0x02:
-			len += sprintf(buf+len,"Remote only\n");
+			seq_printf(seq,"Remote only\n");
 			break;
 		case 0x03:
-			len += sprintf(buf+len,"Memory mapped and remote\n");
+			seq_printf(seq, "Memory mapped and remote\n");
 			break;
 		default:
-			len += sprintf(buf+len,"Unknown\n");
+			seq_printf(seq, "Unknown\n");
 	}
 
-	len += sprintf(buf+len,"Inbound Frame Size     : %d bytes\n", 
+	seq_printf(seq, "Inbound Frame Size     : %d bytes\n",
 				c->status_block->inbound_frame_size<<2);
-	len += sprintf(buf+len,"Max Inbound Frames     : %d\n", 
+	seq_printf(seq, "Max Inbound Frames     : %d\n",
 				c->status_block->max_inbound_frames);
-	len += sprintf(buf+len,"Current Inbound Frames : %d\n", 
+	seq_printf(seq, "Current Inbound Frames : %d\n",
 				c->status_block->cur_inbound_frames);
-	len += sprintf(buf+len,"Max Outbound Frames    : %d\n", 
+	seq_printf(seq, "Max Outbound Frames    : %d\n",
 				c->status_block->max_outbound_frames);
 
 	/* Spec doesn't say if NULL terminated or not... */
 	memcpy(prodstr, c->status_block->product_id, 24);
 	prodstr[24] = '\0';
-	len += sprintf(buf+len,"Product ID             : %s\n", prodstr);
-	len += sprintf(buf+len,"Expected LCT Size      : %d bytes\n", 
+	seq_printf(seq, "Product ID             : %s\n", prodstr);
+	seq_printf(seq, "Expected LCT Size      : %d bytes\n",
 				c->status_block->expected_lct_size);
 
-	len += sprintf(buf+len,"IOP Capabilities\n");
-	len += sprintf(buf+len,"    Context Field Size Support : ");
+	seq_printf(seq, "IOP Capabilities\n");
+	seq_printf(seq, "    Context Field Size Support : ");
 	switch (c->status_block->iop_capabilities & 0x0000003) {
 		case 0:
-			len += sprintf(buf+len,"Supports only 32-bit context fields\n");
+			seq_printf(seq, "Supports only 32-bit context fields\n");
 			break;
 		case 1:
-			len += sprintf(buf+len,"Supports only 64-bit context fields\n");
+			seq_printf(seq, "Supports only 64-bit context fields\n");
 			break;
 		case 2:
-			len += sprintf(buf+len,"Supports 32-bit and 64-bit context fields, "
+			seq_printf(seq, "Supports 32-bit and 64-bit context fields, "
 						"but not concurrently\n");
 			break;
 		case 3:
-			len += sprintf(buf+len,"Supports 32-bit and 64-bit context fields "
+			seq_printf(seq, "Supports 32-bit and 64-bit context fields "
 						"concurrently\n");
 			break;
 		default:
-			len += sprintf(buf+len,"0x%08x\n",c->status_block->iop_capabilities);
+			seq_printf(seq, "0x%08x\n",c->status_block->iop_capabilities);
 	}
-	len += sprintf(buf+len,"    Current Context Field Size : ");
+	seq_printf(seq, "    Current Context Field Size : ");
 	switch (c->status_block->iop_capabilities & 0x0000000C) {
 		case 0:
-			len += sprintf(buf+len,"not configured\n");
+			seq_printf(seq, "not configured\n");
 			break;
 		case 4:
-			len += sprintf(buf+len,"Supports only 32-bit context fields\n");
+			seq_printf(seq, "Supports only 32-bit context fields\n");
 			break;
 		case 8:
-			len += sprintf(buf+len,"Supports only 64-bit context fields\n");
+			seq_printf(seq, "Supports only 64-bit context fields\n");
 			break;
 		case 12:
-			len += sprintf(buf+len,"Supports both 32-bit or 64-bit context fields "
+			seq_printf(seq, "Supports both 32-bit or 64-bit context fields "
 						"concurrently\n");
 			break;
 		default:
-			len += sprintf(buf+len,"\n");
+			seq_printf(seq, "\n");
 	}
-	len += sprintf(buf+len,"    Inbound Peer Support       : %s\n",
+	seq_printf(seq, "    Inbound Peer Support       : %s\n",
 			(c->status_block->iop_capabilities & 0x00000010) ? "Supported" : "Not supported");
-	len += sprintf(buf+len,"    Outbound Peer Support      : %s\n",
+	seq_printf(seq, "    Outbound Peer Support      : %s\n",
 			(c->status_block->iop_capabilities & 0x00000020) ? "Supported" : "Not supported");
-	len += sprintf(buf+len,"    Peer to Peer Support       : %s\n",
+	seq_printf(seq, "    Peer to Peer Support       : %s\n",
 			(c->status_block->iop_capabilities & 0x00000040) ? "Supported" : "Not supported");
 
-	len += sprintf(buf+len, "Desired private memory size   : %d kB\n", 
+	seq_printf(seq, "Desired private memory size   : %d kB\n",
 				c->status_block->desired_mem_size>>10);
-	len += sprintf(buf+len, "Allocated private memory size : %d kB\n", 
+	seq_printf(seq, "Allocated private memory size : %d kB\n",
 				c->status_block->current_mem_size>>10);
-	len += sprintf(buf+len, "Private memory base address   : %0#10x\n", 
+	seq_printf(seq, "Private memory base address   : %0#10x\n",
 				c->status_block->current_mem_base);
-	len += sprintf(buf+len, "Desired private I/O size      : %d kB\n", 
+	seq_printf(seq, "Desired private I/O size      : %d kB\n",
 				c->status_block->desired_io_size>>10);
-	len += sprintf(buf+len, "Allocated private I/O size    : %d kB\n", 
+	seq_printf(seq, "Allocated private I/O size    : %d kB\n",
 				c->status_block->current_io_size>>10);
-	len += sprintf(buf+len, "Private I/O base address      : %0#10x\n", 
+	seq_printf(seq, "Private I/O base address      : %0#10x\n",
 				c->status_block->current_io_base);
 
-	spin_unlock(&i2o_proc_lock);
-
-	return len;
+	return 0;
 }
 
 int i2o_proc_read_hw(char *buf, char **start, off_t offset, int len, 
@@ -3146,6 +3155,9 @@
 		ent->data = data;
 		ent->read_proc = pentry->read_proc;
 		ent->write_proc = pentry->write_proc;
+		if(pentry->fops_proc)
+			ent->proc_fops = pentry->fops_proc;
+
 		ent->nlink = 1;
 
 		pentry++;
@@ -3266,7 +3278,6 @@
 		sprintf(buff, "iop%d", pctrl->unit);
 
 		i2o_proc_remove_entries(generic_iop_entries, pctrl->proc_entry);
-
 		remove_proc_entry(buff, parent);
 		pctrl->proc_entry = NULL;
 	}
@@ -3306,8 +3317,8 @@
 					break;
 				}
 			}
-			remove_proc_entry(dev_id, dev->controller->proc_entry);
 		}
+		remove_proc_entry(dev_id, dev->controller->proc_entry);
 	}
 }
 	
@@ -3329,6 +3340,7 @@
 	i2o_proc_dir_root = proc_mkdir("i2o", 0);
 	if(!i2o_proc_dir_root)
 		return -1;
+	i2o_proc_dir_root->owner = THIS_MODULE;
 
 	for(i = 0; i < MAX_I2O_CONTROLLERS; i++)
 	{
diff -Nru a/drivers/message/i2o/i2o_scsi.c b/drivers/message/i2o/i2o_scsi.c
--- a/drivers/message/i2o/i2o_scsi.c	Sun May 16 01:18:36 2004
+++ b/drivers/message/i2o/i2o_scsi.c	Sun May 16 01:18:36 2004
@@ -62,9 +62,6 @@
 #include "../../scsi/scsi.h"
 #include "../../scsi/hosts.h"
 
-#if BITS_PER_LONG == 64
-#error FIXME: driver does not support 64-bit platforms
-#endif
 
 
 #define VERSION_STRING        "Version 0.1.2"
@@ -233,7 +230,10 @@
 		{
 			spin_unlock_irqrestore(&retry_lock, flags);
 			/* Create a scsi error for this */
-			current_command = (Scsi_Cmnd *)m[3];
+			current_command = (Scsi_Cmnd *)i2o_context_list_get(m[3], c);
+			if(!current_command)
+				return;
+
 			lock = current_command->device->host->host_lock;
 			printk("Aborted %ld\n", current_command->serial_number);
 
@@ -276,16 +276,15 @@
 		printk(KERN_INFO "i2o_scsi: bus reset completed.\n");
 		return;
 	}
-	/*
- 	 *	FIXME: 64bit breakage
-	 */
 
-	current_command = (Scsi_Cmnd *)m[3];
+	current_command = (Scsi_Cmnd *)i2o_context_list_get(m[3], c);
 	
 	/*
 	 *	Is this a control request coming back - eg an abort ?
 	 */
 	 
+	atomic_dec(&queue_depth);
+
 	if(current_command==NULL)
 	{
 		if(st)
@@ -296,8 +295,6 @@
 	
 	dprintk(KERN_INFO "Completed %ld\n", current_command->serial_number);
 	
-	atomic_dec(&queue_depth);
-	
 	if(st == 0x06)
 	{
 		if(le32_to_cpu(m[5]) < current_command->underflow)
@@ -647,9 +644,7 @@
 	if(tid == -1)
 	{
 		SCpnt->result = DID_NO_CONNECT << 16;
-		spin_lock_irqsave(host->host_lock, flags);
 		done(SCpnt);
-		spin_unlock_irqrestore(host->host_lock, flags);
 		return 0;
 	}
 	
@@ -699,8 +694,7 @@
 	
 	i2o_raw_writel(I2O_CMD_SCSI_EXEC<<24|HOST_TID<<12|tid, &msg[1]);
 	i2o_raw_writel(scsi_context, &msg[2]);	/* So the I2O layer passes to us */
-	/* Sorry 64bit folks. FIXME */
-	i2o_raw_writel((u32)SCpnt, &msg[3]);	/* We want the SCSI control block back */
+	i2o_raw_writel(i2o_context_list_add(SCpnt, c), &msg[3]);	/* We want the SCSI control block back */
 
 	/* LSI_920_PCI_QUIRK
 	 *
@@ -883,7 +877,7 @@
  *	@SCpnt: command to abort
  *
  *	Ask the I2O controller to abort a command. This is an asynchrnous
- *	process and oru callback handler will see the command complete
+ *	process and our callback handler will see the command complete
  *	with an aborted message if it succeeds. 
  *
  *	Locks: no locks are held or needed
@@ -894,10 +888,9 @@
 	struct i2o_controller *c;
 	struct Scsi_Host *host;
 	struct i2o_scsi_host *hostdata;
-	unsigned long msg;
-	u32 m;
+	u32 msg[5];
 	int tid;
-	unsigned long timeout;
+	int status = FAILED;
 	
 	printk(KERN_WARNING "i2o_scsi: Aborting command block.\n");
 	
@@ -907,37 +900,22 @@
 	if(tid==-1)
 	{
 		printk(KERN_ERR "i2o_scsi: Impossible command to abort!\n");
-		return FAILED;
+		return status;
 	}
 	c = hostdata->controller;
 
 	spin_unlock_irq(host->host_lock);
 		
-	timeout = jiffies+2*HZ;
-	do
-	{
-		m = le32_to_cpu(I2O_POST_READ32(c));
-		if(m != 0xFFFFFFFF)
-			break;
-		set_current_state(TASK_UNINTERRUPTIBLE);
-		schedule_timeout(1);
-		mb();
-	}
-	while(time_before(jiffies, timeout));
-	
-	msg = c->mem_offset + m;
-	
-	i2o_raw_writel(FIVE_WORD_MSG_SIZE, msg);
-	i2o_raw_writel(I2O_CMD_SCSI_ABORT<<24|HOST_TID<<12|tid, msg+4);
-	i2o_raw_writel(scsi_context, msg+8);
-	i2o_raw_writel(0, msg+12);	/* Not needed for an abort */
-	i2o_raw_writel((u32)SCpnt, msg+16);	
-	wmb();
-	i2o_post_message(c,m);
-	wmb();
-	
+	msg[0] = FIVE_WORD_MSG_SIZE;
+	msg[1] = I2O_CMD_SCSI_ABORT<<24|HOST_TID<<12|tid;
+	msg[2] = scsi_context;
+	msg[3] = 0;
+	msg[4] = i2o_context_list_remove(SCpnt, c);
+	if(i2o_post_wait(c, msg, sizeof(msg), 240))
+		status = SUCCESS;
+
 	spin_lock_irq(host->host_lock);
-	return SUCCESS;
+	return status;
 }
 
 /**
diff -Nru a/drivers/misc/Kconfig b/drivers/misc/Kconfig
--- a/drivers/misc/Kconfig	Sun May 16 01:18:34 2004
+++ b/drivers/misc/Kconfig	Sun May 16 01:18:34 2004
@@ -6,7 +6,7 @@
 
 config IBM_ASM
 	tristate "Device driver for IBM RSA service processor"
-	depends on X86
+	depends on X86 && EXPERIMENTAL
 	default n
 	---help---
 	  This option enables device driver support for in-band access to the
@@ -20,6 +20,12 @@
 	  this feature serial driver support (CONFIG_SERIAL_8250) must be
 	  enabled.
 	  
+	  WARNING: This software may not be supported or function
+	  correctly on your IBM server. Please consult the IBM ServerProven
+	  website http://www.pc.ibm/ww/eserver/xseries/serverproven for
+	  information on the specific driver level and support statement
+	  for your IBM server.
+
 
 	  If unsure, say N.
 
diff -Nru a/drivers/misc/ibmasm/module.c b/drivers/misc/ibmasm/module.c
--- a/drivers/misc/ibmasm/module.c	Sun May 16 01:18:35 2004
+++ b/drivers/misc/ibmasm/module.c	Sun May 16 01:18:35 2004
@@ -126,6 +126,13 @@
 
 	ibmasm_register_uart(sp);
 
+	dev_printk(KERN_DEBUG, &pdev->dev, "WARNING: This software may not be supported or function\n");
+	dev_printk(KERN_DEBUG, &pdev->dev, "correctly on your IBM server. Please consult the IBM\n");
+	dev_printk(KERN_DEBUG, &pdev->dev, "ServerProven website\n");
+	dev_printk(KERN_DEBUG, &pdev->dev, "http://www.pc.ibm.com/ww/eserver/xseries/serverproven\n");
+	dev_printk(KERN_DEBUG, &pdev->dev, "for information on the specific driver level and support\n");
+	dev_printk(KERN_DEBUG, &pdev->dev, "statement for your IBM server.\n");
+
 	return 0;
 
 error_send_message:
diff -Nru a/drivers/mtd/chips/amd_flash.c b/drivers/mtd/chips/amd_flash.c
--- a/drivers/mtd/chips/amd_flash.c	Sun May 16 01:18:34 2004
+++ b/drivers/mtd/chips/amd_flash.c	Sun May 16 01:18:34 2004
@@ -780,8 +780,8 @@
 	map->fldrv_priv = private;
 
 	map->fldrv = &amd_flash_chipdrv;
-	MOD_INC_USE_COUNT;
 
+	__module_get(THIS_MODULE);
 	return mtd;
 }
 
diff -Nru a/drivers/mtd/chips/cfi_cmdset_0001.c b/drivers/mtd/chips/cfi_cmdset_0001.c
--- a/drivers/mtd/chips/cfi_cmdset_0001.c	Sun May 16 01:18:34 2004
+++ b/drivers/mtd/chips/cfi_cmdset_0001.c	Sun May 16 01:18:34 2004
@@ -431,6 +431,7 @@
 		break;
 
 	case FL_READY:
+	case FL_STATUS:
 		/* We should really make set_vpp() count, rather than doing this */
 		DISABLE_VPP(map);
 		break;
diff -Nru a/drivers/mtd/chips/sharp.c b/drivers/mtd/chips/sharp.c
--- a/drivers/mtd/chips/sharp.c	Sun May 16 01:18:35 2004
+++ b/drivers/mtd/chips/sharp.c	Sun May 16 01:18:35 2004
@@ -154,7 +154,7 @@
 	map->fldrv = &sharp_chipdrv;
 	map->fldrv_priv = sharp;
 
-	MOD_INC_USE_COUNT;
+	__module_get(THIS_MODULE);
 	return mtd;
 }
 
diff -Nru a/drivers/mtd/maps/tqm8xxl.c b/drivers/mtd/maps/tqm8xxl.c
--- a/drivers/mtd/maps/tqm8xxl.c	Sun May 16 01:18:34 2004
+++ b/drivers/mtd/maps/tqm8xxl.c	Sun May 16 01:18:34 2004
@@ -105,7 +105,7 @@
 	  .name = "jffs",
 	  .offset = 0x00200000,
 	  .size = 0x00200000,
-	  .//size = MTDPART_SIZ_FULL,
+	  //.size = MTDPART_SIZ_FULL,
 	}
 };
 #endif
diff -Nru a/drivers/net/3c59x.c b/drivers/net/3c59x.c
--- a/drivers/net/3c59x.c	Sun May 16 01:18:33 2004
+++ b/drivers/net/3c59x.c	Sun May 16 01:18:33 2004
@@ -520,7 +520,7 @@
 	{"3c905B-FX Cyclone 100baseFx",
 	 PCI_USES_IO|PCI_USES_MASTER, IS_CYCLONE|HAS_HWCKSM, 128, },
 	{"3c905C Tornado",
-	 PCI_USES_IO|PCI_USES_MASTER, IS_TORNADO|HAS_NWAY|HAS_HWCKSM, 128, },
+	PCI_USES_IO|PCI_USES_MASTER, IS_TORNADO|HAS_NWAY|HAS_HWCKSM|EXTRA_PREAMBLE, 128, },
 	{"3c980 Cyclone",
 	 PCI_USES_IO|PCI_USES_MASTER, IS_CYCLONE|HAS_HWCKSM, 128, },
 	{"3c980C Python-T",
diff -Nru a/drivers/net/8139too.c b/drivers/net/8139too.c
--- a/drivers/net/8139too.c	Sun May 16 01:18:33 2004
+++ b/drivers/net/8139too.c	Sun May 16 01:18:33 2004
@@ -1677,11 +1677,17 @@
 	u8 tmp8;
 	unsigned long flags;
 
-	DPRINTK ("%s: Transmit timeout, status %2.2x %4.4x "
-		 "media %2.2x.\n", dev->name,
-		 RTL_R8 (ChipCmd),
-		 RTL_R16 (IntrStatus),
-		 RTL_R8 (MediaStatus));
+	printk (KERN_DEBUG "%s: Transmit timeout, status %2.2x %4.4x %4.4x "
+		"media %2.2x.\n", dev->name, RTL_R8 (ChipCmd),
+		RTL_R16(IntrStatus), RTL_R16(IntrMask), RTL_R8(MediaStatus));
+	/* Emit info to figure out what went wrong. */
+	printk (KERN_DEBUG "%s: Tx queue start entry %ld  dirty entry %ld.\n",
+		dev->name, tp->cur_tx, tp->dirty_tx);
+	for (i = 0; i < NUM_TX_DESC; i++)
+		printk (KERN_DEBUG "%s:  Tx descriptor %d is %8.8lx.%s\n",
+			dev->name, i, RTL_R32 (TxStatus0 + (i * 4)),
+			i == tp->dirty_tx % NUM_TX_DESC ?
+				" (queue head)" : "");
 
 	tp->xstats.tx_timeouts++;
 
@@ -1694,15 +1700,6 @@
 	/* Disable interrupts by clearing the interrupt mask. */
 	RTL_W16 (IntrMask, 0x0000);
 
-	/* Emit info to figure out what went wrong. */
-	printk (KERN_DEBUG "%s: Tx queue start entry %ld  dirty entry %ld.\n",
-		dev->name, tp->cur_tx, tp->dirty_tx);
-	for (i = 0; i < NUM_TX_DESC; i++)
-		printk (KERN_DEBUG "%s:  Tx descriptor %d is %8.8lx.%s\n",
-			dev->name, i, RTL_R32 (TxStatus0 + (i * 4)),
-			i == tp->dirty_tx % NUM_TX_DESC ?
-				" (queue head)" : "");
-
 	/* Stop a shared interrupt from scavenging while we are. */
 	spin_lock_irqsave (&tp->lock, flags);
 	rtl8139_tx_clear (tp);
@@ -1714,7 +1711,6 @@
 		netif_wake_queue (dev);
 	}
 	spin_unlock(&tp->rx_lock);
-	
 }
 
 
@@ -2558,6 +2554,8 @@
 	void *ioaddr = tp->mmio_addr;
 	unsigned long flags;
 
+	pci_save_state (pdev, tp->pci_state);
+
 	if (!netif_running (dev))
 		return 0;
 
@@ -2576,7 +2574,6 @@
 	spin_unlock_irqrestore (&tp->lock, flags);
 
 	pci_set_power_state (pdev, 3);
-	pci_save_state (pdev, tp->pci_state);
 
 	return 0;
 }
@@ -2587,9 +2584,9 @@
 	struct net_device *dev = pci_get_drvdata (pdev);
 	struct rtl8139_private *tp = dev->priv;
 
+	pci_restore_state (pdev, tp->pci_state);
 	if (!netif_running (dev))
 		return 0;
-	pci_restore_state (pdev, tp->pci_state);
 	pci_set_power_state (pdev, 0);
 	rtl8139_init_ring (dev);
 	rtl8139_hw_start (dev);
diff -Nru a/drivers/net/8390.h b/drivers/net/8390.h
--- a/drivers/net/8390.h	Sun May 16 01:18:36 2004
+++ b/drivers/net/8390.h	Sun May 16 01:18:36 2004
@@ -143,7 +143,7 @@
 #define inb_p(_p)	inb(_p)
 #define outb_p(_v,_p)	outb(_v,_p)
 
-#elif defined(CONFIG_NET_CBUS)
+#elif defined(CONFIG_NET_CBUS) || defined(CONFIG_NE_H8300)
 #define EI_SHIFT(x)	(ei_local->reg_offset[x])
 #else
 #define EI_SHIFT(x)	(x)
diff -Nru a/drivers/net/Kconfig b/drivers/net/Kconfig
--- a/drivers/net/Kconfig	Sun May 16 01:18:36 2004
+++ b/drivers/net/Kconfig	Sun May 16 01:18:36 2004
@@ -1828,6 +1828,13 @@
 	  Say Y here if you want to use the built-in 10/100 Fast ethernet
 	  controller on the Motorola ColdFire 5272 processor.
 
+config NE_H8300
+	bool "NE2000 compatible support for H8/300"
+	depends on H8300 && NET_ETHERNET
+	help
+	  Say Y here if you want to use the NE2000 compatible
+	  controller on the Renesas H8/300 processor.
+
 endmenu
 
 #
diff -Nru a/drivers/net/Makefile b/drivers/net/Makefile
--- a/drivers/net/Makefile	Sun May 16 01:18:34 2004
+++ b/drivers/net/Makefile	Sun May 16 01:18:34 2004
@@ -95,6 +95,7 @@
 obj-$(CONFIG_NET_SB1250_MAC) += sb1250-mac.o
 obj-$(CONFIG_B44) += b44.o
 obj-$(CONFIG_FORCEDETH) += forcedeth.o
+obj-$(CONFIG_NE_H8300) += ne-h8300.o 8390.o
 
 obj-$(CONFIG_PPP) += ppp_generic.o slhc.o
 obj-$(CONFIG_PPP_ASYNC) += ppp_async.o
diff -Nru a/drivers/net/Space.c b/drivers/net/Space.c
--- a/drivers/net/Space.c	Sun May 16 01:18:33 2004
+++ b/drivers/net/Space.c	Sun May 16 01:18:33 2004
@@ -191,7 +191,8 @@
 #ifdef CONFIG_E2100		/* Cabletron E21xx series. */
 	{e2100_probe, 0},
 #endif
-#if defined(CONFIG_NE2000) || defined(CONFIG_NE2K_CBUS)	/* ISA & PC-9800 CBUS (use ne2k-pci for PCI cards) */
+#if defined(CONFIG_NE2000) || defined(CONFIG_NE2K_CBUS)	|| \
+    defined(CONFIG_NE_H8300)  /* ISA & PC-9800 CBUS (use ne2k-pci for PCI cards) */
 	{ne_probe, 0},
 #endif
 #ifdef CONFIG_LANCE		/* ISA/VLB (use pcnet32 for PCI cards) */
diff -Nru a/drivers/net/arcnet/com90xx.c b/drivers/net/arcnet/com90xx.c
--- a/drivers/net/arcnet/com90xx.c	Sun May 16 01:18:36 2004
+++ b/drivers/net/arcnet/com90xx.c	Sun May 16 01:18:36 2004
@@ -155,7 +155,7 @@
 		ioaddr = *port;
 
 		if (!request_region(*port, ARCNET_TOTAL_SIZE, "arcnet (90xx)")) {
-			BUGMSG2(D_INIT_REASONS, "(check_region)\n");
+			BUGMSG2(D_INIT_REASONS, "(request_region)\n");
 			BUGMSG2(D_INIT_REASONS, "S1: ");
 			BUGLVL(D_INIT_REASONS) numprint = 0;
 			*port-- = ports[--numports];
@@ -214,7 +214,7 @@
 		BUGMSG2(D_INIT, "%lXh ", *p);
 
 		if (!request_mem_region(*p, BUFFER_SIZE, "arcnet (90xx)")) {
-			BUGMSG2(D_INIT_REASONS, "(check_mem_region)\n");
+			BUGMSG2(D_INIT_REASONS, "(request_mem_region)\n");
 			BUGMSG2(D_INIT_REASONS, "Stage 3: ");
 			BUGLVL(D_INIT_REASONS) numprint = 0;
 			*p-- = shmems[--numshmems];
diff -Nru a/drivers/net/b44.c b/drivers/net/b44.c
--- a/drivers/net/b44.c	Sun May 16 01:18:34 2004
+++ b/drivers/net/b44.c	Sun May 16 01:18:34 2004
@@ -27,8 +27,8 @@
 
 #define DRV_MODULE_NAME		"b44"
 #define PFX DRV_MODULE_NAME	": "
-#define DRV_MODULE_VERSION	"0.93"
-#define DRV_MODULE_RELDATE	"Mar, 2004"
+#define DRV_MODULE_VERSION	"0.94"
+#define DRV_MODULE_RELDATE	"May 4, 2004"
 
 #define B44_DEF_MSG_ENABLE	  \
 	(NETIF_MSG_DRV		| \
@@ -96,7 +96,7 @@
 
 static void b44_halt(struct b44 *);
 static void b44_init_rings(struct b44 *);
-static int b44_init_hw(struct b44 *);
+static void b44_init_hw(struct b44 *);
 
 static int b44_wait_bit(struct b44 *bp, unsigned long reg,
 			u32 bit, unsigned long timeout, const int clear)
@@ -331,6 +331,29 @@
 	return b44_wait_bit(bp, B44_EMAC_ISTAT, EMAC_INT_MII, 100, 0);
 }
 
+/* miilib interface */
+/* FIXME FIXME: phy_id is ignored, bp->phy_addr use is unconditional
+ * due to code existing before miilib use was added to this driver.
+ * Someone should remove this artificial driver limitation in
+ * b44_{read,write}phy.  bp->phy_addr itself is fine (and needed).
+ */
+static int b44_mii_read(struct net_device *dev, int phy_id, int location)
+{
+	u32 val;
+	struct b44 *bp = netdev_priv(dev);
+	int rc = b44_readphy(bp, location, &val);
+	if (rc)
+		return 0xffffffff;
+	return val;
+}
+
+static void b44_mii_write(struct net_device *dev, int phy_id, int location,
+			 int val)
+{
+	struct b44 *bp = netdev_priv(dev);
+	b44_writephy(bp, location, val);
+}
+
 static int b44_phy_reset(struct b44 *bp)
 {
 	u32 val;
@@ -771,7 +794,7 @@
 
 static int b44_poll(struct net_device *netdev, int *budget)
 {
-	struct b44 *bp = netdev->priv;
+	struct b44 *bp = netdev_priv(netdev);
 	int done;
 
 	spin_lock_irq(&bp->lock);
@@ -821,7 +844,7 @@
 static irqreturn_t b44_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
 	struct net_device *dev = dev_id;
-	struct b44 *bp = dev->priv;
+	struct b44 *bp = netdev_priv(dev);
 	unsigned long flags;
 	u32 istat, imask;
 	int handled = 0;
@@ -858,7 +881,7 @@
 
 static void b44_tx_timeout(struct net_device *dev)
 {
-	struct b44 *bp = dev->priv;
+	struct b44 *bp = netdev_priv(dev);
 
 	printk(KERN_ERR PFX "%s: transmit timed out, resetting\n",
 	       dev->name);
@@ -878,7 +901,7 @@
 
 static int b44_start_xmit(struct sk_buff *skb, struct net_device *dev)
 {
-	struct b44 *bp = dev->priv;
+	struct b44 *bp = netdev_priv(dev);
 	dma_addr_t mapping;
 	u32 len, entry, ctrl;
 
@@ -932,7 +955,7 @@
 
 static int b44_change_mtu(struct net_device *dev, int new_mtu)
 {
-	struct b44 *bp = dev->priv;
+	struct b44 *bp = netdev_priv(dev);
 
 	if (new_mtu < B44_MIN_MTU || new_mtu > B44_MAX_MTU)
 		return -EINVAL;
@@ -1161,7 +1184,7 @@
 
 static int b44_set_mac_addr(struct net_device *dev, void *p)
 {
-	struct b44 *bp = dev->priv;
+	struct b44 *bp = netdev_priv(dev);
 	struct sockaddr *addr = p;
 
 	if (netif_running(dev))
@@ -1180,7 +1203,7 @@
  * packet processing.  Invoked with bp->lock held.
  */
 static void __b44_set_rx_mode(struct net_device *);
-static int b44_init_hw(struct b44 *bp)
+static void b44_init_hw(struct b44 *bp)
 {
 	u32 val;
 
@@ -1212,13 +1235,11 @@
 
 	val = br32(B44_ENET_CTRL);
 	bw32(B44_ENET_CTRL, (val | ENET_CTRL_ENABLE));
-
-	return 0;
 }
 
 static int b44_open(struct net_device *dev)
 {
-	struct b44 *bp = dev->priv;
+	struct b44 *bp = netdev_priv(dev);
 	int err;
 
 	err = b44_alloc_consistent(bp);
@@ -1232,9 +1253,7 @@
 	spin_lock_irq(&bp->lock);
 
 	b44_init_rings(bp);
-	err = b44_init_hw(bp);
-	if (err)
-		goto err_out_noinit;
+	b44_init_hw(bp);
 	bp->flags |= B44_FLAG_INIT_COMPLETE;
 
 	spin_unlock_irq(&bp->lock);
@@ -1249,11 +1268,6 @@
 
 	return 0;
 
-err_out_noinit:
-	b44_halt(bp);
-	b44_free_rings(bp);
-	spin_unlock_irq(&bp->lock);
-	free_irq(dev->irq, dev);
 err_out_free:
 	b44_free_consistent(bp);
 	return err;
@@ -1273,7 +1287,7 @@
 
 static int b44_close(struct net_device *dev)
 {
-	struct b44 *bp = dev->priv;
+	struct b44 *bp = netdev_priv(dev);
 
 	netif_stop_queue(dev);
 
@@ -1300,7 +1314,7 @@
 
 static struct net_device_stats *b44_get_stats(struct net_device *dev)
 {
-	struct b44 *bp = dev->priv;
+	struct b44 *bp = netdev_priv(dev);
 	struct net_device_stats *nstat = &bp->stats;
 	struct b44_hw_stats *hwstat = &bp->hw_stats;
 
@@ -1351,7 +1365,7 @@
 
 static void __b44_set_rx_mode(struct net_device *dev)
 {
-	struct b44 *bp = dev->priv;
+	struct b44 *bp = netdev_priv(dev);
 	u32 val;
 
 	val = br32(B44_RXCONFIG);
@@ -1375,295 +1389,252 @@
 
 static void b44_set_rx_mode(struct net_device *dev)
 {
-	struct b44 *bp = dev->priv;
+	struct b44 *bp = netdev_priv(dev);
 
 	spin_lock_irq(&bp->lock);
 	__b44_set_rx_mode(dev);
 	spin_unlock_irq(&bp->lock);
 }
 
-static int b44_ethtool_ioctl (struct net_device *dev, void __user *useraddr)
+static u32 b44_get_msglevel(struct net_device *dev)
 {
-	struct b44 *bp = dev->priv;
-	struct pci_dev *pci_dev = bp->pdev;
-	u32 ethcmd;
+	struct b44 *bp = netdev_priv(dev);
+	return bp->msg_enable;
+}
 
-	if (copy_from_user (&ethcmd, useraddr, sizeof (ethcmd)))
-		return -EFAULT;
+static void b44_set_msglevel(struct net_device *dev, u32 value)
+{
+	struct b44 *bp = netdev_priv(dev);
+	bp->msg_enable = value;
+}
 
-	switch (ethcmd) {
-	case ETHTOOL_GDRVINFO:{
-		struct ethtool_drvinfo info = { ETHTOOL_GDRVINFO };
-		strcpy (info.driver, DRV_MODULE_NAME);
-		strcpy (info.version, DRV_MODULE_VERSION);
-		memset(&info.fw_version, 0, sizeof(info.fw_version));
-		strcpy (info.bus_info, pci_name(pci_dev));
-		info.eedump_len = 0;
-		info.regdump_len = 0;
-		if (copy_to_user (useraddr, &info, sizeof (info)))
-			return -EFAULT;
-		return 0;
-	}
+static void b44_get_drvinfo (struct net_device *dev, struct ethtool_drvinfo *info)
+{
+	struct b44 *bp = netdev_priv(dev);
+	struct pci_dev *pci_dev = bp->pdev;
 
-	case ETHTOOL_GSET: {
-		struct ethtool_cmd cmd = { ETHTOOL_GSET };
+	strcpy (info->driver, DRV_MODULE_NAME);
+	strcpy (info->version, DRV_MODULE_VERSION);
+	strcpy (info->bus_info, pci_name(pci_dev));
+}
 
-		if (!(bp->flags & B44_FLAG_INIT_COMPLETE))
-			return -EAGAIN;
-		cmd.supported = (SUPPORTED_Autoneg);
-		cmd.supported |= (SUPPORTED_100baseT_Half |
-				  SUPPORTED_100baseT_Full |
-				  SUPPORTED_10baseT_Half |
-				  SUPPORTED_10baseT_Full |
-				  SUPPORTED_MII);
+static int b44_nway_reset(struct net_device *dev)
+{
+	struct b44 *bp = netdev_priv(dev);
+	u32 bmcr;
+	int r;
 
-		cmd.advertising = 0;
-		if (bp->flags & B44_FLAG_ADV_10HALF)
-			cmd.advertising |= ADVERTISE_10HALF;
-		if (bp->flags & B44_FLAG_ADV_10FULL)
-			cmd.advertising |= ADVERTISE_10FULL;
-		if (bp->flags & B44_FLAG_ADV_100HALF)
-			cmd.advertising |= ADVERTISE_100HALF;
-		if (bp->flags & B44_FLAG_ADV_100FULL)
-			cmd.advertising |= ADVERTISE_100FULL;
-		cmd.advertising |= ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM;
-		cmd.speed = (bp->flags & B44_FLAG_100_BASE_T) ?
-			SPEED_100 : SPEED_10;
-		cmd.duplex = (bp->flags & B44_FLAG_FULL_DUPLEX) ?
-			DUPLEX_FULL : DUPLEX_HALF;
-		cmd.port = 0;
-		cmd.phy_address = bp->phy_addr;
-		cmd.transceiver = (bp->flags & B44_FLAG_INTERNAL_PHY) ?
-			XCVR_INTERNAL : XCVR_EXTERNAL;
-		cmd.autoneg = (bp->flags & B44_FLAG_FORCE_LINK) ?
-			AUTONEG_DISABLE : AUTONEG_ENABLE;
-		cmd.maxtxpkt = 0;
-		cmd.maxrxpkt = 0;
-		if (copy_to_user(useraddr, &cmd, sizeof(cmd)))
-			return -EFAULT;
-		return 0;
+	spin_lock_irq(&bp->lock);
+	b44_readphy(bp, MII_BMCR, &bmcr);
+	b44_readphy(bp, MII_BMCR, &bmcr);
+	r = -EINVAL;
+	if (bmcr & BMCR_ANENABLE) {
+		b44_writephy(bp, MII_BMCR,
+			     bmcr | BMCR_ANRESTART);
+		r = 0;
 	}
-	case ETHTOOL_SSET: {
-		struct ethtool_cmd cmd;
+	spin_unlock_irq(&bp->lock);
 
-		if (!(bp->flags & B44_FLAG_INIT_COMPLETE))
-			return -EAGAIN;
+	return r;
+}
 
-		if (copy_from_user(&cmd, useraddr, sizeof(cmd)))
-			return -EFAULT;
+static int b44_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
+{
+	struct b44 *bp = netdev_priv(dev);
 
-		/* We do not support gigabit. */
-		if (cmd.autoneg == AUTONEG_ENABLE) {
-			if (cmd.advertising &
-			    (ADVERTISED_1000baseT_Half |
-			     ADVERTISED_1000baseT_Full))
-				return -EINVAL;
-		} else if ((cmd.speed != SPEED_100 &&
-			    cmd.speed != SPEED_10) ||
-			   (cmd.duplex != DUPLEX_HALF &&
-			    cmd.duplex != DUPLEX_FULL)) {
-				return -EINVAL;
-		}
+	if (!(bp->flags & B44_FLAG_INIT_COMPLETE))
+		return -EAGAIN;
+	cmd->supported = (SUPPORTED_Autoneg);
+	cmd->supported |= (SUPPORTED_100baseT_Half |
+			  SUPPORTED_100baseT_Full |
+			  SUPPORTED_10baseT_Half |
+			  SUPPORTED_10baseT_Full |
+			  SUPPORTED_MII);
+
+	cmd->advertising = 0;
+	if (bp->flags & B44_FLAG_ADV_10HALF)
+		cmd->advertising |= ADVERTISE_10HALF;
+	if (bp->flags & B44_FLAG_ADV_10FULL)
+		cmd->advertising |= ADVERTISE_10FULL;
+	if (bp->flags & B44_FLAG_ADV_100HALF)
+		cmd->advertising |= ADVERTISE_100HALF;
+	if (bp->flags & B44_FLAG_ADV_100FULL)
+		cmd->advertising |= ADVERTISE_100FULL;
+	cmd->advertising |= ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM;
+	cmd->speed = (bp->flags & B44_FLAG_100_BASE_T) ?
+		SPEED_100 : SPEED_10;
+	cmd->duplex = (bp->flags & B44_FLAG_FULL_DUPLEX) ?
+		DUPLEX_FULL : DUPLEX_HALF;
+	cmd->port = 0;
+	cmd->phy_address = bp->phy_addr;
+	cmd->transceiver = (bp->flags & B44_FLAG_INTERNAL_PHY) ?
+		XCVR_INTERNAL : XCVR_EXTERNAL;
+	cmd->autoneg = (bp->flags & B44_FLAG_FORCE_LINK) ?
+		AUTONEG_DISABLE : AUTONEG_ENABLE;
+	cmd->maxtxpkt = 0;
+	cmd->maxrxpkt = 0;
+	return 0;
+}
 
-		spin_lock_irq(&bp->lock);
+static int b44_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
+{
+	struct b44 *bp = netdev_priv(dev);
 
-		if (cmd.autoneg == AUTONEG_ENABLE) {
-			bp->flags &= ~B44_FLAG_FORCE_LINK;
-			bp->flags &= ~(B44_FLAG_ADV_10HALF |
-				       B44_FLAG_ADV_10FULL |
-				       B44_FLAG_ADV_100HALF |
-				       B44_FLAG_ADV_100FULL);
-			if (cmd.advertising & ADVERTISE_10HALF)
-				bp->flags |= B44_FLAG_ADV_10HALF;
-			if (cmd.advertising & ADVERTISE_10FULL)
-				bp->flags |= B44_FLAG_ADV_10FULL;
-			if (cmd.advertising & ADVERTISE_100HALF)
-				bp->flags |= B44_FLAG_ADV_100HALF;
-			if (cmd.advertising & ADVERTISE_100FULL)
-				bp->flags |= B44_FLAG_ADV_100FULL;
-		} else {
-			bp->flags |= B44_FLAG_FORCE_LINK;
-			if (cmd.speed == SPEED_100)
-				bp->flags |= B44_FLAG_100_BASE_T;
-			if (cmd.duplex == DUPLEX_FULL)
-				bp->flags |= B44_FLAG_FULL_DUPLEX;
-		}
+	if (!(bp->flags & B44_FLAG_INIT_COMPLETE))
+		return -EAGAIN;
 
-		b44_setup_phy(bp);
+	/* We do not support gigabit. */
+	if (cmd->autoneg == AUTONEG_ENABLE) {
+		if (cmd->advertising &
+		    (ADVERTISED_1000baseT_Half |
+		     ADVERTISED_1000baseT_Full))
+			return -EINVAL;
+	} else if ((cmd->speed != SPEED_100 &&
+		    cmd->speed != SPEED_10) ||
+		   (cmd->duplex != DUPLEX_HALF &&
+		    cmd->duplex != DUPLEX_FULL)) {
+			return -EINVAL;
+	}
 
-		spin_unlock_irq(&bp->lock);
+	spin_lock_irq(&bp->lock);
 
-		return 0;
+	if (cmd->autoneg == AUTONEG_ENABLE) {
+		bp->flags &= ~B44_FLAG_FORCE_LINK;
+		bp->flags &= ~(B44_FLAG_ADV_10HALF |
+			       B44_FLAG_ADV_10FULL |
+			       B44_FLAG_ADV_100HALF |
+			       B44_FLAG_ADV_100FULL);
+		if (cmd->advertising & ADVERTISE_10HALF)
+			bp->flags |= B44_FLAG_ADV_10HALF;
+		if (cmd->advertising & ADVERTISE_10FULL)
+			bp->flags |= B44_FLAG_ADV_10FULL;
+		if (cmd->advertising & ADVERTISE_100HALF)
+			bp->flags |= B44_FLAG_ADV_100HALF;
+		if (cmd->advertising & ADVERTISE_100FULL)
+			bp->flags |= B44_FLAG_ADV_100FULL;
+	} else {
+		bp->flags |= B44_FLAG_FORCE_LINK;
+		if (cmd->speed == SPEED_100)
+			bp->flags |= B44_FLAG_100_BASE_T;
+		if (cmd->duplex == DUPLEX_FULL)
+			bp->flags |= B44_FLAG_FULL_DUPLEX;
 	}
 
-	case ETHTOOL_GMSGLVL: {
-		struct ethtool_value edata = { ETHTOOL_GMSGLVL };
-		edata.data = bp->msg_enable;
-		if (copy_to_user(useraddr, &edata, sizeof(edata)))
-			return -EFAULT;
-		return 0;
-	}
-	case ETHTOOL_SMSGLVL: {
-		struct ethtool_value edata;
-		if (copy_from_user(&edata, useraddr, sizeof(edata)))
-			return -EFAULT;
-		bp->msg_enable = edata.data;
-		return 0;
-	}
-	case ETHTOOL_NWAY_RST: {
-		u32 bmcr;
-		int r;
+	b44_setup_phy(bp);
 
-		spin_lock_irq(&bp->lock);
-		b44_readphy(bp, MII_BMCR, &bmcr);
-		b44_readphy(bp, MII_BMCR, &bmcr);
-		r = -EINVAL;
-		if (bmcr & BMCR_ANENABLE) {
-			b44_writephy(bp, MII_BMCR,
-				     bmcr | BMCR_ANRESTART);
-			r = 0;
-		}
-		spin_unlock_irq(&bp->lock);
+	spin_unlock_irq(&bp->lock);
 
-		return r;
-	}
-	case ETHTOOL_GLINK: {
-		struct ethtool_value edata = { ETHTOOL_GLINK };
-		edata.data = netif_carrier_ok(bp->dev) ? 1 : 0;
-		if (copy_to_user(useraddr, &edata, sizeof(edata)))
-			return -EFAULT;
-		return 0;
-	}
-	case ETHTOOL_GRINGPARAM: {
-		struct ethtool_ringparam ering = { ETHTOOL_GRINGPARAM };
+	return 0;
+}
 
-		ering.rx_max_pending = B44_RX_RING_SIZE - 1;
-		ering.rx_pending = bp->rx_pending;
+static void b44_get_ringparam(struct net_device *dev,
+			      struct ethtool_ringparam *ering)
+{
+	struct b44 *bp = netdev_priv(dev);
 
-		/* XXX ethtool lacks a tx_max_pending, oops... */
+	ering->rx_max_pending = B44_RX_RING_SIZE - 1;
+	ering->rx_pending = bp->rx_pending;
 
-		if (copy_to_user(useraddr, &ering, sizeof(ering)))
-			return -EFAULT;
-		return 0;
-	}
-	case ETHTOOL_SRINGPARAM: {
-		struct ethtool_ringparam ering;
+	/* XXX ethtool lacks a tx_max_pending, oops... */
+}
 
-		if (copy_from_user(&ering, useraddr, sizeof(ering)))
-			return -EFAULT;
+static int b44_set_ringparam(struct net_device *dev,
+			     struct ethtool_ringparam *ering)
+{
+	struct b44 *bp = netdev_priv(dev);
 
-		if ((ering.rx_pending > B44_RX_RING_SIZE - 1) ||
-		    (ering.rx_mini_pending != 0) ||
-		    (ering.rx_jumbo_pending != 0) ||
-		    (ering.tx_pending > B44_TX_RING_SIZE - 1))
-			return -EINVAL;
+	if ((ering->rx_pending > B44_RX_RING_SIZE - 1) ||
+	    (ering->rx_mini_pending != 0) ||
+	    (ering->rx_jumbo_pending != 0) ||
+	    (ering->tx_pending > B44_TX_RING_SIZE - 1))
+		return -EINVAL;
 
-		spin_lock_irq(&bp->lock);
+	spin_lock_irq(&bp->lock);
 
-		bp->rx_pending = ering.rx_pending;
-		bp->tx_pending = ering.tx_pending;
+	bp->rx_pending = ering->rx_pending;
+	bp->tx_pending = ering->tx_pending;
 
-		b44_halt(bp);
-		b44_init_rings(bp);
-		b44_init_hw(bp);
-		netif_wake_queue(bp->dev);
-		spin_unlock_irq(&bp->lock);
+	b44_halt(bp);
+	b44_init_rings(bp);
+	b44_init_hw(bp);
+	netif_wake_queue(bp->dev);
+	spin_unlock_irq(&bp->lock);
 
-		b44_enable_ints(bp);
-		
-		return 0;
-	}
-	case ETHTOOL_GPAUSEPARAM: {
-		struct ethtool_pauseparam epause = { ETHTOOL_GPAUSEPARAM };
+	b44_enable_ints(bp);
+	
+	return 0;
+}
 
-		epause.autoneg =
-			(bp->flags & B44_FLAG_PAUSE_AUTO) != 0;
-		epause.rx_pause =
-			(bp->flags & B44_FLAG_RX_PAUSE) != 0;
-		epause.tx_pause =
-			(bp->flags & B44_FLAG_TX_PAUSE) != 0;
-		if (copy_to_user(useraddr, &epause, sizeof(epause)))
-			return -EFAULT;
-		return 0;
-	}
-	case ETHTOOL_SPAUSEPARAM: {
-		struct ethtool_pauseparam epause;
+static void b44_get_pauseparam(struct net_device *dev,
+				struct ethtool_pauseparam *epause)
+{
+	struct b44 *bp = netdev_priv(dev);
 
-		if (copy_from_user(&epause, useraddr, sizeof(epause)))
-			return -EFAULT;
+	epause->autoneg =
+		(bp->flags & B44_FLAG_PAUSE_AUTO) != 0;
+	epause->rx_pause =
+		(bp->flags & B44_FLAG_RX_PAUSE) != 0;
+	epause->tx_pause =
+		(bp->flags & B44_FLAG_TX_PAUSE) != 0;
+}
 
-		spin_lock_irq(&bp->lock);
-		if (epause.autoneg)
-			bp->flags |= B44_FLAG_PAUSE_AUTO;
-		else
-			bp->flags &= ~B44_FLAG_PAUSE_AUTO;
-		if (epause.rx_pause)
-			bp->flags |= B44_FLAG_RX_PAUSE;
-		else
-			bp->flags &= ~B44_FLAG_RX_PAUSE;
-		if (epause.tx_pause)
-			bp->flags |= B44_FLAG_TX_PAUSE;
-		else
-			bp->flags &= ~B44_FLAG_TX_PAUSE;
-		if (bp->flags & B44_FLAG_PAUSE_AUTO) {
-			b44_halt(bp);
-			b44_init_rings(bp);
-			b44_init_hw(bp);
-		} else {
-			__b44_set_flow_ctrl(bp, bp->flags);
-		}
-		spin_unlock_irq(&bp->lock);
+static int b44_set_pauseparam(struct net_device *dev,
+				struct ethtool_pauseparam *epause)
+{
+	struct b44 *bp = netdev_priv(dev);
 
-		b44_enable_ints(bp);
-		
-		return 0;
+	spin_lock_irq(&bp->lock);
+	if (epause->autoneg)
+		bp->flags |= B44_FLAG_PAUSE_AUTO;
+	else
+		bp->flags &= ~B44_FLAG_PAUSE_AUTO;
+	if (epause->rx_pause)
+		bp->flags |= B44_FLAG_RX_PAUSE;
+	else
+		bp->flags &= ~B44_FLAG_RX_PAUSE;
+	if (epause->tx_pause)
+		bp->flags |= B44_FLAG_TX_PAUSE;
+	else
+		bp->flags &= ~B44_FLAG_TX_PAUSE;
+	if (bp->flags & B44_FLAG_PAUSE_AUTO) {
+		b44_halt(bp);
+		b44_init_rings(bp);
+		b44_init_hw(bp);
+	} else {
+		__b44_set_flow_ctrl(bp, bp->flags);
 	}
-	};
+	spin_unlock_irq(&bp->lock);
 
-	return -EOPNOTSUPP;
+	b44_enable_ints(bp);
+	
+	return 0;
 }
 
+static struct ethtool_ops b44_ethtool_ops = {
+	.get_drvinfo		= b44_get_drvinfo,
+	.get_settings		= b44_get_settings,
+	.set_settings		= b44_set_settings,
+	.nway_reset		= b44_nway_reset,
+	.get_link		= ethtool_op_get_link,
+	.get_ringparam		= b44_get_ringparam,
+	.set_ringparam		= b44_set_ringparam,
+	.get_pauseparam		= b44_get_pauseparam,
+	.set_pauseparam		= b44_set_pauseparam,
+	.get_msglevel		= b44_get_msglevel,
+	.set_msglevel		= b44_set_msglevel,
+};
+
 static int b44_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
 {
 	struct mii_ioctl_data __user *data = (struct mii_ioctl_data __user *)&ifr->ifr_data;
-	struct b44 *bp = dev->priv;
+	struct b44 *bp = netdev_priv(dev);
 	int err;
 
-	switch (cmd) {
-	case SIOCETHTOOL:
-		return b44_ethtool_ioctl(dev, (void __user*) ifr->ifr_data);
-
-	case SIOCGMIIPHY:
-		data->phy_id = bp->phy_addr;
-
-		/* fallthru */
-	case SIOCGMIIREG: {
-		u32 mii_regval;
-
-		spin_lock_irq(&bp->lock);
-		err = b44_readphy(bp, data->reg_num & 0x1f, &mii_regval);
-		spin_unlock_irq(&bp->lock);
-
-		data->val_out = mii_regval;
-
-		return err;
-	}
-
-	case SIOCSMIIREG:
-		if (!capable(CAP_NET_ADMIN))
-			return -EPERM;
-
-		spin_lock_irq(&bp->lock);
-		err = b44_writephy(bp, data->reg_num & 0x1f, data->val_in);
-		spin_unlock_irq(&bp->lock);
-
-		return err;
+	spin_lock_irq(&bp->lock);
+	err = generic_mii_ioctl(&bp->mii_if, data, cmd, NULL);
+	spin_unlock_irq(&bp->lock);
 
-	default:
-		/* do nothing */
-		break;
-	};
-	return -EOPNOTSUPP;
+	return err;
 }
 
 /* Read 128-bytes of EEPROM. */
@@ -1772,7 +1743,7 @@
 	/* No interesting netdevice features in this card... */
 	dev->features |= 0;
 
-	bp = dev->priv;
+	bp = netdev_priv(dev);
 	bp->pdev = pdev;
 	bp->dev = dev;
 	if (b44_debug >= 0)
@@ -1806,6 +1777,7 @@
 	dev->watchdog_timeo = B44_TX_TIMEOUT;
 	dev->change_mtu = b44_change_mtu;
 	dev->irq = pdev->irq;
+	SET_ETHTOOL_OPS(dev, &b44_ethtool_ops);
 
 	err = b44_get_invariants(bp);
 	if (err) {
@@ -1814,6 +1786,13 @@
 		goto err_out_iounmap;
 	}
 
+	bp->mii_if.dev = dev;
+	bp->mii_if.mdio_read = b44_mii_read;
+	bp->mii_if.mdio_write = b44_mii_write;
+	bp->mii_if.phy_id = bp->phy_addr;
+	bp->mii_if.phy_id_mask = 0x1f;
+	bp->mii_if.reg_num_mask = 0x1f;
+
 	/* By default, advertise all speed/duplex settings. */
 	bp->flags |= (B44_FLAG_ADV_10HALF | B44_FLAG_ADV_10FULL |
 		      B44_FLAG_ADV_100HALF | B44_FLAG_ADV_100FULL);
@@ -1859,8 +1838,10 @@
 	struct net_device *dev = pci_get_drvdata(pdev);
 
 	if (dev) {
+		struct b44 *bp = netdev_priv(dev);
+
 		unregister_netdev(dev);
-		iounmap((void *) ((struct b44 *)(dev->priv))->regs);
+		iounmap((void *) bp->regs);
 		free_netdev(dev);
 		pci_release_regions(pdev);
 		pci_disable_device(pdev);
diff -Nru a/drivers/net/b44.h b/drivers/net/b44.h
--- a/drivers/net/b44.h	Sun May 16 01:18:35 2004
+++ b/drivers/net/b44.h	Sun May 16 01:18:35 2004
@@ -542,6 +542,8 @@
 	u8			phy_addr;
 	u8			mdc_port;
 	u8			core_unit;
+
+	struct mii_if_info	mii_if;
 };
 
 #endif /* _B44_H */
diff -Nru a/drivers/net/gt96100eth.c b/drivers/net/gt96100eth.c
--- a/drivers/net/gt96100eth.c	Sun May 16 01:18:36 2004
+++ b/drivers/net/gt96100eth.c	Sun May 16 01:18:36 2004
@@ -1070,22 +1070,18 @@
 {
 	int retval;
     
-	MOD_INC_USE_COUNT;
-
 	dbg(2, "%s: dev=%p\n", __FUNCTION__, dev);
 
 	// Initialize and startup the GT-96100 ethernet port
 	if ((retval = gt96100_init(dev))) {
 		err("error in gt96100_init\n");
 		free_irq(dev->irq, dev);
-		MOD_DEC_USE_COUNT;
 		return retval;
 	}
 
 	if ((retval = request_irq(dev->irq, &gt96100_interrupt,
 				  SA_SHIRQ, dev->name, dev))) {
 		err("unable to get IRQ %d\n", dev->irq);
-		MOD_DEC_USE_COUNT;
 		return retval;
 	}
 	
@@ -1106,8 +1102,6 @@
 	}
 
 	free_irq(dev->irq, dev);
-    
-	MOD_DEC_USE_COUNT;
 	return 0;
 }
 
diff -Nru a/drivers/net/hamradio/dmascc.c b/drivers/net/hamradio/dmascc.c
--- a/drivers/net/hamradio/dmascc.c	Sun May 16 01:18:34 2004
+++ b/drivers/net/hamradio/dmascc.c	Sun May 16 01:18:34 2004
@@ -48,21 +48,6 @@
 #include "z8530.h"
 
 
-/* Linux 2.2 and 2.3 compatibility */
-
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,14)
-#define net_device device
-#endif
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,43)
-#define netif_start_queue(dev) { dev->tbusy = 0; }
-#define netif_stop_queue(dev) { dev->tbusy = 1; }
-#define netif_wake_queue(dev) { dev->tbusy = 0; mark_bh(NET_BH); }
-#endif
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,47)
-#define netif_running(dev) (dev->flags & IFF_UP)
-#endif
-
-
 /* Number of buffers per channel */
 
 #define NUM_TX_BUF      2          /* NUM_TX_BUF >= 1 (min. 2 recommended) */
@@ -210,9 +195,6 @@
 };
 
 struct scc_priv {
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)
-  char name[IFNAMSIZ];
-#endif
   int type;
   int chip;
   struct net_device *dev;
diff -Nru a/drivers/net/ibmveth.c b/drivers/net/ibmveth.c
--- a/drivers/net/ibmveth.c	Sun May 16 01:18:33 2004
+++ b/drivers/net/ibmveth.c	Sun May 16 01:18:33 2004
@@ -874,14 +874,14 @@
 	struct net_device *netdev;
 	struct ibmveth_adapter *adapter;
 
-	unsigned int *mac_addr_p;
+	unsigned char *mac_addr_p;
 	unsigned int *mcastFilterSize_p;
 
 
 	ibmveth_debug_printk_no_adapter("entering ibmveth_probe for UA 0x%x\n", 
 					dev->unit_address);
 
-	mac_addr_p = (unsigned int *) vio_get_attribute(dev, VETH_MAC_ADDR, 0);
+	mac_addr_p = (unsigned char *) vio_get_attribute(dev, VETH_MAC_ADDR, 0);
 	if(!mac_addr_p) {
 		ibmveth_error_printk("Can't find VETH_MAC_ADDR attribute\n");
 		return 0;
@@ -916,8 +916,8 @@
 		The RPA doc specifies that the first byte must be 10b, so 
 		we'll just look for it to solve this 8 vs. 6 byte field issue */
 
-	while (*((char*)mac_addr_p) != (char)(0x02))
-		((char*)mac_addr_p)++;
+	if ((*mac_addr_p & 0x3) != 0x02)
+		mac_addr_p += 2;
 
 	adapter->mac_addr = 0;
 	memcpy(&adapter->mac_addr, mac_addr_p, 6);
@@ -935,6 +935,7 @@
 	netdev->do_ioctl           = ibmveth_ioctl;
 	netdev->ethtool_ops           = &netdev_ethtool_ops;
 	netdev->change_mtu         = ibmveth_change_mtu;
+	SET_NETDEV_DEV(netdev, &dev->dev);
 
 	memcpy(&netdev->dev_addr, &adapter->mac_addr, netdev->addr_len);
 
diff -Nru a/drivers/net/irda/act200l-sir.c b/drivers/net/irda/act200l-sir.c
--- a/drivers/net/irda/act200l-sir.c	Sun May 16 01:18:34 2004
+++ b/drivers/net/irda/act200l-sir.c	Sun May 16 01:18:34 2004
@@ -178,7 +178,7 @@
 	/* Write control bytes */
 	sirdev_raw_write(dev, control, 3);
 	set_current_state(TASK_UNINTERRUPTIBLE);
-	schedule_timeout(MSECS_TO_JIFFIES(5));
+	schedule_timeout(msecs_to_jiffies(5));
 
 	/* Go back to normal mode */
 	sirdev_set_dtr_rts(dev, TRUE, TRUE);
diff -Nru a/drivers/net/irda/act200l.c b/drivers/net/irda/act200l.c
--- a/drivers/net/irda/act200l.c	Sun May 16 01:18:35 2004
+++ b/drivers/net/irda/act200l.c	Sun May 16 01:18:35 2004
@@ -148,7 +148,7 @@
 			irda_task_next_state(task, IRDA_TASK_CHILD_WAIT);
 
 			/* Give reset 1 sec to finish */
-			ret = MSECS_TO_JIFFIES(1000);
+			ret = msecs_to_jiffies(1000);
 		}
 		break;
 	case IRDA_TASK_CHILD_WAIT:
@@ -187,7 +187,7 @@
 		/* Write control bytes */
 		self->write(self->dev, control, 3);
 		irda_task_next_state(task, IRDA_TASK_WAIT);
-		ret = MSECS_TO_JIFFIES(5);
+		ret = msecs_to_jiffies(5);
 		break;
 	case IRDA_TASK_WAIT:
 		/* Go back to normal mode */
@@ -237,14 +237,14 @@
 		self->set_dtr_rts(self->dev, TRUE, TRUE);
 
 		irda_task_next_state(task, IRDA_TASK_WAIT1);
-		ret = MSECS_TO_JIFFIES(50);
+		ret = msecs_to_jiffies(50);
 		break;
 	case IRDA_TASK_WAIT1:
 		/* Reset the dongle : set RTS low for 25 ms */
 		self->set_dtr_rts(self->dev, TRUE, FALSE);
 
 		irda_task_next_state(task, IRDA_TASK_WAIT2);
-		ret = MSECS_TO_JIFFIES(50);
+		ret = msecs_to_jiffies(50);
 		break;
 	case IRDA_TASK_WAIT2:
 		/* Clear DTR and set RTS to enter command mode */
@@ -253,7 +253,7 @@
 		/* Write control bytes */
 		self->write(self->dev, control, 9);
 		irda_task_next_state(task, IRDA_TASK_WAIT3);
-		ret = MSECS_TO_JIFFIES(15);
+		ret = msecs_to_jiffies(15);
 		break;
 	case IRDA_TASK_WAIT3:
 		/* Go back to normal mode */
diff -Nru a/drivers/net/irda/actisys.c b/drivers/net/irda/actisys.c
--- a/drivers/net/irda/actisys.c	Sun May 16 01:18:37 2004
+++ b/drivers/net/irda/actisys.c	Sun May 16 01:18:37 2004
@@ -238,7 +238,7 @@
 		self->set_dtr_rts(self->dev, TRUE, TRUE);
 		
 		/* Sleep 50 ms to make sure capacitor is charged */
-		ret = MSECS_TO_JIFFIES(50);
+		ret = msecs_to_jiffies(50);
 		irda_task_next_state(task, IRDA_TASK_WAIT);
 		break;
 	case IRDA_TASK_WAIT:			
diff -Nru a/drivers/net/irda/girbil.c b/drivers/net/irda/girbil.c
--- a/drivers/net/irda/girbil.c	Sun May 16 01:18:33 2004
+++ b/drivers/net/irda/girbil.c	Sun May 16 01:18:33 2004
@@ -119,7 +119,7 @@
 			irda_task_next_state(task, IRDA_TASK_CHILD_WAIT);
 
 			/* Give reset 1 sec to finish */
-			ret = MSECS_TO_JIFFIES(1000);
+			ret = msecs_to_jiffies(1000);
 		}
 		break;
 	case IRDA_TASK_CHILD_WAIT:
@@ -153,7 +153,7 @@
 		/* Write control bytes */
 		self->write(self->dev, control, 2);
 		irda_task_next_state(task, IRDA_TASK_WAIT);
-		ret = MSECS_TO_JIFFIES(100);
+		ret = msecs_to_jiffies(100);
 		break;
 	case IRDA_TASK_WAIT:
 		/* Go back to normal mode */
@@ -194,19 +194,19 @@
 		self->set_dtr_rts(self->dev, TRUE, FALSE);
 		irda_task_next_state(task, IRDA_TASK_WAIT1);
 		/* Sleep at least 5 ms */
-		ret = MSECS_TO_JIFFIES(20);
+		ret = msecs_to_jiffies(20);
 		break;
 	case IRDA_TASK_WAIT1:
 		/* Set DTR and clear RTS to enter command mode */
 		self->set_dtr_rts(self->dev, FALSE, TRUE);
 		irda_task_next_state(task, IRDA_TASK_WAIT2);
-		ret = MSECS_TO_JIFFIES(20);
+		ret = msecs_to_jiffies(20);
 		break;
 	case IRDA_TASK_WAIT2:
 		/* Write control byte */
 		self->write(self->dev, &control, 1);
 		irda_task_next_state(task, IRDA_TASK_WAIT3);
-		ret = MSECS_TO_JIFFIES(20);
+		ret = msecs_to_jiffies(20);
 		break;
 	case IRDA_TASK_WAIT3:
 		/* Go back to normal mode */
diff -Nru a/drivers/net/irda/irda-usb.c b/drivers/net/irda/irda-usb.c
--- a/drivers/net/irda/irda-usb.c	Sun May 16 01:18:35 2004
+++ b/drivers/net/irda/irda-usb.c	Sun May 16 01:18:35 2004
@@ -268,7 +268,7 @@
                       speed_bulk_callback, self);
 	urb->transfer_buffer_length = USB_IRDA_HEADER;
 	urb->transfer_flags = URB_ASYNC_UNLINK;
-	urb->timeout = MSECS_TO_JIFFIES(100);
+	urb->timeout = msecs_to_jiffies(100);
 
 	/* Irq disabled -> GFP_ATOMIC */
 	if ((ret = usb_submit_urb(urb, GFP_ATOMIC))) {
@@ -412,7 +412,7 @@
 	 * This is how the dongle will detect the end of packet - Jean II */
 	urb->transfer_flags |= URB_ZERO_PACKET;
 	/* Timeout need to be shorter than NET watchdog timer */
-	urb->timeout = MSECS_TO_JIFFIES(200);
+	urb->timeout = msecs_to_jiffies(200);
 
 	/* Generate min turn time. FIXME: can we do better than this? */
 	/* Trying to a turnaround time at this level is trying to measure
@@ -1311,7 +1311,7 @@
 		IU_REQ_GET_CLASS_DESC,
 		USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
 		0, intf->altsetting->desc.bInterfaceNumber, desc,
-		sizeof(*desc), MSECS_TO_JIFFIES(500));
+		sizeof(*desc), msecs_to_jiffies(500));
 	
 	IRDA_DEBUG(1, "%s(), ret=%d\n", __FUNCTION__, ret);
 	if (ret < sizeof(*desc)) {
@@ -1421,7 +1421,7 @@
 	}
 
 	/* Find our endpoints */
-	interface = &intf->altsetting[0];
+	interface = intf->cur_altsetting;
 	if(!irda_usb_parse_endpoints(self, interface->endpoint,
 				     interface->desc.bNumEndpoints)) {
 		ERROR("%s(), Bogus endpoints...\n", __FUNCTION__);
diff -Nru a/drivers/net/irda/irport.c b/drivers/net/irda/irport.c
--- a/drivers/net/irda/irport.c	Sun May 16 01:18:35 2004
+++ b/drivers/net/irda/irport.c	Sun May 16 01:18:35 2004
@@ -452,7 +452,7 @@
 			task->state = IRDA_TASK_WAIT;
 
 			/* Try again later */
-			ret = MSECS_TO_JIFFIES(20);
+			ret = msecs_to_jiffies(20);
 			break;
 		}
 
@@ -474,7 +474,7 @@
 			irda_task_next_state(task, IRDA_TASK_CHILD_WAIT);
 
 			/* Give dongle 1 sec to finish */
-			ret = MSECS_TO_JIFFIES(1000);
+			ret = msecs_to_jiffies(1000);
 		} else
 			/* Child finished immediately */
 			irda_task_next_state(task, IRDA_TASK_CHILD_DONE);
diff -Nru a/drivers/net/irda/irtty-sir.c b/drivers/net/irda/irtty-sir.c
--- a/drivers/net/irda/irtty-sir.c	Sun May 16 01:18:33 2004
+++ b/drivers/net/irda/irtty-sir.c	Sun May 16 01:18:33 2004
@@ -93,12 +93,12 @@
 	tty = priv->tty;
 	if (tty->driver->wait_until_sent) {
 		lock_kernel();
-		tty->driver->wait_until_sent(tty, MSECS_TO_JIFFIES(100));
+		tty->driver->wait_until_sent(tty, msecs_to_jiffies(100));
 		unlock_kernel();
 	}
 	else {
 		set_task_state(current, TASK_UNINTERRUPTIBLE);
-		schedule_timeout(MSECS_TO_JIFFIES(USBSERIAL_TX_DONE_DELAY));
+		schedule_timeout(msecs_to_jiffies(USBSERIAL_TX_DONE_DELAY));
 	}
 }
 
diff -Nru a/drivers/net/irda/ma600-sir.c b/drivers/net/irda/ma600-sir.c
--- a/drivers/net/irda/ma600-sir.c	Sun May 16 01:18:35 2004
+++ b/drivers/net/irda/ma600-sir.c	Sun May 16 01:18:35 2004
@@ -192,7 +192,7 @@
 
 	/* Wait at least 10ms: fake wait_until_sent - 10 bits at 9600 baud*/
 	set_current_state(TASK_UNINTERRUPTIBLE);
-	schedule_timeout(MSECS_TO_JIFFIES(15));		/* old ma600 uses 15ms */
+	schedule_timeout(msecs_to_jiffies(15));		/* old ma600 uses 15ms */
 
 #if 1
 	/* read-back of the control byte. ma600 is the first dongle driver
@@ -216,7 +216,7 @@
 
 	/* Wait at least 10ms */
 	set_current_state(TASK_UNINTERRUPTIBLE);
-	schedule_timeout(MSECS_TO_JIFFIES(10));
+	schedule_timeout(msecs_to_jiffies(10));
 
 	/* dongle is now switched to the new speed */
 	dev->speed = speed;
@@ -246,12 +246,12 @@
 	/* Reset the dongle : set DTR low for 10 ms */
 	sirdev_set_dtr_rts(dev, FALSE, TRUE);
 	set_current_state(TASK_UNINTERRUPTIBLE);
-	schedule_timeout(MSECS_TO_JIFFIES(10));
+	schedule_timeout(msecs_to_jiffies(10));
 
 	/* Go back to normal mode */
 	sirdev_set_dtr_rts(dev, TRUE, TRUE);
 	set_current_state(TASK_UNINTERRUPTIBLE);
-	schedule_timeout(MSECS_TO_JIFFIES(10));
+	schedule_timeout(msecs_to_jiffies(10));
 
 	dev->speed = 9600;      /* That's the dongle-default */
 
diff -Nru a/drivers/net/irda/ma600.c b/drivers/net/irda/ma600.c
--- a/drivers/net/irda/ma600.c	Sun May 16 01:18:35 2004
+++ b/drivers/net/irda/ma600.c	Sun May 16 01:18:35 2004
@@ -184,7 +184,7 @@
 
 	if (self->speed_task && self->speed_task != task) {
 		IRDA_DEBUG(0, "%s(), busy!\n", __FUNCTION__);
-		return MSECS_TO_JIFFIES(10);
+		return msecs_to_jiffies(10);
 	} else {
 		self->speed_task = task;
 	}
@@ -202,7 +202,7 @@
 			irda_task_next_state(task, IRDA_TASK_CHILD_WAIT);
 	
 			/* give 1 second to finish */
-			ret = MSECS_TO_JIFFIES(1000);
+			ret = msecs_to_jiffies(1000);
 		} else {
 			irda_task_next_state(task, IRDA_TASK_CHILD_DONE);
 		}
@@ -217,7 +217,7 @@
 		/* Set DTR, Clear RTS */
 		self->set_dtr_rts(self->dev, TRUE, FALSE);
 	
-		ret = MSECS_TO_JIFFIES(1);		/* Sleep 1 ms */
+		ret = msecs_to_jiffies(1);		/* Sleep 1 ms */
 		irda_task_next_state(task, IRDA_TASK_WAIT);
 		break;
 
@@ -231,7 +231,7 @@
 		irda_task_next_state(task, IRDA_TASK_WAIT1);
 
 		/* Wait at least 10 ms */
-		ret = MSECS_TO_JIFFIES(15);
+		ret = msecs_to_jiffies(15);
 		break;
 
 	case IRDA_TASK_WAIT1:
@@ -258,7 +258,7 @@
 		irda_task_next_state(task, IRDA_TASK_WAIT2);
 
 		/* Wait at least 10 ms */
-		ret = MSECS_TO_JIFFIES(10);
+		ret = msecs_to_jiffies(10);
 		break;
 
 	case IRDA_TASK_WAIT2:
@@ -298,7 +298,7 @@
 
 	if (self->reset_task && self->reset_task != task) {
 		IRDA_DEBUG(0, "%s(), busy!\n", __FUNCTION__);
-		return MSECS_TO_JIFFIES(10);
+		return msecs_to_jiffies(10);
 	} else
 		self->reset_task = task;
 	
@@ -307,13 +307,13 @@
 		/* Clear DTR and Set RTS */
 		self->set_dtr_rts(self->dev, FALSE, TRUE);
 		irda_task_next_state(task, IRDA_TASK_WAIT1);
-		ret = MSECS_TO_JIFFIES(10);		/* Sleep 10 ms */
+		ret = msecs_to_jiffies(10);		/* Sleep 10 ms */
 		break;
 	case IRDA_TASK_WAIT1:
 		/* Set DTR and RTS */
 		self->set_dtr_rts(self->dev, TRUE, TRUE);
 		irda_task_next_state(task, IRDA_TASK_WAIT2);
-		ret = MSECS_TO_JIFFIES(10);		/* Sleep 10 ms */
+		ret = msecs_to_jiffies(10);		/* Sleep 10 ms */
 		break;
 	case IRDA_TASK_WAIT2:
 		irda_task_next_state(task, IRDA_TASK_DONE);
diff -Nru a/drivers/net/irda/mcp2120.c b/drivers/net/irda/mcp2120.c
--- a/drivers/net/irda/mcp2120.c	Sun May 16 01:18:36 2004
+++ b/drivers/net/irda/mcp2120.c	Sun May 16 01:18:36 2004
@@ -99,7 +99,7 @@
 			irda_task_next_state(task, IRDA_TASK_CHILD_WAIT);
 
 			/* Give reset 1 sec to finish */
-			ret = MSECS_TO_JIFFIES(1000);
+			ret = msecs_to_jiffies(1000);
 		}
 		break;
 	case IRDA_TASK_CHILD_WAIT:
@@ -140,7 +140,7 @@
                 self->write(self->dev, control, 2);
  
                 irda_task_next_state(task, IRDA_TASK_WAIT);
-		ret = MSECS_TO_JIFFIES(100);
+		ret = msecs_to_jiffies(100);
                 //printk("mcp2120_change_speed irda_child_done\n");
 		break;
 	case IRDA_TASK_WAIT:
@@ -189,14 +189,14 @@
 		/* Reset dongle by setting RTS*/
 		self->set_dtr_rts(self->dev, TRUE, TRUE);
 		irda_task_next_state(task, IRDA_TASK_WAIT1);
-		ret = MSECS_TO_JIFFIES(50);
+		ret = msecs_to_jiffies(50);
 		break;
 	case IRDA_TASK_WAIT1:
                 //printk("mcp2120_reset irda_task_wait1\n");
                 /* clear RTS and wait for at least 30 ms. */
 		self->set_dtr_rts(self->dev, FALSE, FALSE);
 		irda_task_next_state(task, IRDA_TASK_WAIT2);
-		ret = MSECS_TO_JIFFIES(50);
+		ret = msecs_to_jiffies(50);
 		break;
 	case IRDA_TASK_WAIT2:
                 //printk("mcp2120_reset irda_task_wait2\n");
diff -Nru a/drivers/net/irda/sir_dev.c b/drivers/net/irda/sir_dev.c
--- a/drivers/net/irda/sir_dev.c	Sun May 16 01:18:35 2004
+++ b/drivers/net/irda/sir_dev.c	Sun May 16 01:18:35 2004
@@ -74,7 +74,7 @@
 	while (dev->tx_buff.len > 0) {			/* wait until tx idle */
 		spin_unlock_irqrestore(&dev->tx_lock, flags);
 		set_current_state(TASK_UNINTERRUPTIBLE);
-		schedule_timeout(MSECS_TO_JIFFIES(10));
+		schedule_timeout(msecs_to_jiffies(10));
 		spin_lock_irqsave(&dev->tx_lock, flags);
 	}
 
diff -Nru a/drivers/net/irda/sir_kthread.c b/drivers/net/irda/sir_kthread.c
--- a/drivers/net/irda/sir_kthread.c	Sun May 16 01:18:36 2004
+++ b/drivers/net/irda/sir_kthread.c	Sun May 16 01:18:36 2004
@@ -415,7 +415,7 @@
 		fsm->state = next_state;
 	} while(!delay);
 
-	irda_queue_delayed_request(&fsm->rq, MSECS_TO_JIFFIES(delay));
+	irda_queue_delayed_request(&fsm->rq, msecs_to_jiffies(delay));
 }
 
 /* schedule some device configuration task for execution by kIrDAd
diff -Nru a/drivers/net/irda/stir4200.c b/drivers/net/irda/stir4200.c
--- a/drivers/net/irda/stir4200.c	Sun May 16 01:18:34 2004
+++ b/drivers/net/irda/stir4200.c	Sun May 16 01:18:34 2004
@@ -208,7 +208,7 @@
 			       REQ_WRITE_SINGLE,
 			       USB_DIR_OUT|USB_TYPE_VENDOR|USB_RECIP_DEVICE,
 			       value, reg, NULL, 0,
-			       MSECS_TO_JIFFIES(CTRL_TIMEOUT));
+			       msecs_to_jiffies(CTRL_TIMEOUT));
 }
 
 /* Send control message to read multiple registers */
@@ -221,7 +221,7 @@
 			       REQ_READ_REG,
 			       USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
 			       0, reg, data, count,
-			       MSECS_TO_JIFFIES(CTRL_TIMEOUT));
+			       msecs_to_jiffies(CTRL_TIMEOUT));
 }
 
 static inline int isfir(u32 speed)
@@ -745,7 +745,7 @@
 
 	if (usb_bulk_msg(stir->usbdev, usb_sndbulkpipe(stir->usbdev, 1),
 			 stir->io_buf, wraplen,
-			 NULL, MSECS_TO_JIFFIES(TRANSMIT_TIMEOUT))) 
+			 NULL, msecs_to_jiffies(TRANSMIT_TIMEOUT)))
 		stir->stats.tx_errors++;
 }
 
diff -Nru a/drivers/net/irda/tekram-sir.c b/drivers/net/irda/tekram-sir.c
--- a/drivers/net/irda/tekram-sir.c	Sun May 16 01:18:34 2004
+++ b/drivers/net/irda/tekram-sir.c	Sun May 16 01:18:34 2004
@@ -211,7 +211,7 @@
 
 	/* Should sleep 1 ms */
 	set_current_state(TASK_UNINTERRUPTIBLE);
-	schedule_timeout(MSECS_TO_JIFFIES(1));
+	schedule_timeout(msecs_to_jiffies(1));
 
 	/* Set DTR, Set RTS */
 	sirdev_set_dtr_rts(dev, TRUE, TRUE);
diff -Nru a/drivers/net/irda/tekram.c b/drivers/net/irda/tekram.c
--- a/drivers/net/irda/tekram.c	Sun May 16 01:18:35 2004
+++ b/drivers/net/irda/tekram.c	Sun May 16 01:18:35 2004
@@ -113,7 +113,7 @@
 
 	if (self->speed_task && self->speed_task != task) {
 		IRDA_DEBUG(0, "%s(), busy!\n", __FUNCTION__ );
-		return MSECS_TO_JIFFIES(10);
+		return msecs_to_jiffies(10);
 	} else
 		self->speed_task = task;
 
@@ -150,7 +150,7 @@
 			irda_task_next_state(task, IRDA_TASK_CHILD_WAIT);
 
 			/* Give reset 1 sec to finish */
-			ret = MSECS_TO_JIFFIES(1000);
+			ret = msecs_to_jiffies(1000);
 		} else
 			irda_task_next_state(task, IRDA_TASK_CHILD_DONE);
 		break;
@@ -171,7 +171,7 @@
 		irda_task_next_state(task, IRDA_TASK_WAIT);
 
 		/* Wait at least 100 ms */
-		ret = MSECS_TO_JIFFIES(150);
+		ret = msecs_to_jiffies(150);
 		break;
 	case IRDA_TASK_WAIT:
 		/* Set DTR, Set RTS */
@@ -214,7 +214,7 @@
 
 	if (self->reset_task && self->reset_task != task) {
 		IRDA_DEBUG(0, "%s(), busy!\n", __FUNCTION__ );
-		return MSECS_TO_JIFFIES(10);
+		return msecs_to_jiffies(10);
 	} else
 		self->reset_task = task;
 	
@@ -227,7 +227,7 @@
 		irda_task_next_state(task, IRDA_TASK_WAIT1);
 
 		/* Sleep 50 ms */
-		ret = MSECS_TO_JIFFIES(50);
+		ret = msecs_to_jiffies(50);
 		break;
 	case IRDA_TASK_WAIT1:
 		/* Clear DTR, Set RTS */
@@ -236,7 +236,7 @@
 		irda_task_next_state(task, IRDA_TASK_WAIT2);
 		
 		/* Should sleep 1 ms */
-		ret = MSECS_TO_JIFFIES(1);
+		ret = msecs_to_jiffies(1);
 		break;
 	case IRDA_TASK_WAIT2:
 		/* Set DTR, Set RTS */
diff -Nru a/drivers/net/lance.c b/drivers/net/lance.c
--- a/drivers/net/lance.c	Sun May 16 01:18:33 2004
+++ b/drivers/net/lance.c	Sun May 16 01:18:33 2004
@@ -37,6 +37,9 @@
 
     Get rid of check_region, check kmalloc return in lance_probe1
     Arnaldo Carvalho de Melo <acme@conectiva.com.br> - 11/01/2001
+
+	Reworked detection, added support for Racal InterLan EtherBlaster cards
+	Vesselin Kostadinov <vesok at yahoo dot com > - 22/4/2004
 */
 
 static const char version[] = "lance.c:v1.15ac 1999/11/13 dplatt@3do.com, becker@cesdis.gsfc.nasa.gov\n";
@@ -62,6 +65,26 @@
 static int lance_probe1(struct net_device *dev, int ioaddr, int irq, int options);
 static int __init do_lance_probe(struct net_device *dev);
 
+
+static struct card {
+	char id_offset14;
+	char id_offset15;
+} cards[] = {
+	{	//"normal"
+		.id_offset14 = 0x57,
+		.id_offset15 = 0x57,
+	},
+	{	//NI6510EB
+		.id_offset14 = 0x52,
+		.id_offset15 = 0x44,
+	},
+	{	//Racal InterLan EtherBlaster
+		.id_offset14 = 0x52,
+		.id_offset15 = 0x49,
+	},
+};
+#define NUM_CARDS 3
+
 #ifdef LANCE_DEBUG
 static int lance_debug = LANCE_DEBUG;
 #else
@@ -380,13 +403,20 @@
 							"lance-probe");
 
 		if (r) {
-			/* Detect "normal" 0x57 0x57 and the NI6510EB 0x52 0x44
-			   signatures w/ minimal I/O reads */
-			char offset15, offset14 = inb(ioaddr + 14);
-			
-			if ((offset14 == 0x52 || offset14 == 0x57) &&
-				((offset15 = inb(ioaddr + 15)) == 0x57 ||
-				 offset15 == 0x44)) {
+			/* Detect the card with minimal I/O reads */
+			char offset14 = inb(ioaddr + 14);
+			int card;
+			for (card = 0; card < NUM_CARDS; ++card)
+				if (cards[card].id_offset14 == offset14)
+					break;
+			if (card < NUM_CARDS) {/*yes, the first byte matches*/
+				char offset15 = inb(ioaddr + 15);
+				for (card = 0; card < NUM_CARDS; ++card)
+					if ((cards[card].id_offset14 == offset14) &&
+						(cards[card].id_offset15 == offset15))
+						break;
+			}
+			if (card < NUM_CARDS) { /*Signature OK*/
 				result = lance_probe1(dev, ioaddr, 0, 0);
 				if (!result) {
 					struct lance_private *lp = dev->priv;
diff -Nru a/drivers/net/ne-h8300.c b/drivers/net/ne-h8300.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/drivers/net/ne-h8300.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,657 @@
+/* ne-h8300.c: A NE2000 clone on H8/300 driver for linux. */
+/*
+    original ne.c
+    Written 1992-94 by Donald Becker.
+
+    Copyright 1993 United States Government as represented by the
+    Director, National Security Agency.
+
+    This software may be used and distributed according to the terms
+    of the GNU General Public License, incorporated herein by reference.
+
+    The author may be reached as becker@scyld.com, or C/O
+    Scyld Computing Corporation, 410 Severn Ave., Suite 210, Annapolis MD 21403
+
+    H8/300 modified
+    Yoshinori Sato <ysato@users.sourceforge.jp>
+*/
+
+static const char version1[] =
+"ne-h8300.c:v1.00 2004/04/11 ysato\n";
+
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/errno.h>
+#include <linux/init.h>
+#include <linux/interrupt.h>
+#include <linux/delay.h>
+#include <linux/netdevice.h>
+#include <linux/etherdevice.h>
+
+#include <asm/system.h>
+#include <asm/io.h>
+#include <asm/irq.h>
+
+#include "8390.h"
+
+/* Some defines that people can play with if so inclined. */
+
+/* Do we perform extra sanity checks on stuff ? */
+/* #define NE_SANITY_CHECK */
+
+/* Do we implement the read before write bugfix ? */
+/* #define NE_RW_BUGFIX */
+
+/* Do we have a non std. amount of memory? (in units of 256 byte pages) */
+/* #define PACKETBUF_MEMSIZE	0x40 */
+
+/* A zero-terminated list of I/O addresses to be probed at boot. */
+
+/* ---- No user-serviceable parts below ---- */
+
+#define NE_BASE	 (dev->base_addr)
+#define NE_CMD	 	0x00
+#define NE_DATAPORT	(ei_status.word16?0x20:0x10)	/* NatSemi-defined port window offset. */
+#define NE_RESET	(ei_status.word16?0x3f:0x1f)	/* Issue a read to reset, a write to clear. */
+#define NE_IO_EXTENT	(ei_status.word16?0x40:0x20)
+
+#define NESM_START_PG	0x40	/* First page of TX buffer */
+#define NESM_STOP_PG	0x80	/* Last page +1 of RX ring */
+
+static int ne_probe1(struct net_device *dev, int ioaddr);
+
+static int ne_open(struct net_device *dev);
+static int ne_close(struct net_device *dev);
+
+static void ne_reset_8390(struct net_device *dev);
+static void ne_get_8390_hdr(struct net_device *dev, struct e8390_pkt_hdr *hdr,
+			  int ring_page);
+static void ne_block_input(struct net_device *dev, int count,
+			  struct sk_buff *skb, int ring_offset);
+static void ne_block_output(struct net_device *dev, const int count,
+		const unsigned char *buf, const int start_page);
+
+
+static u32 reg_offset[16];
+
+static int __init init_reg_offset(struct net_device *dev,unsigned long base_addr)
+{
+	struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
+	int i;
+	unsigned char bus_width;
+
+	bus_width = *(volatile unsigned char *)ABWCR;
+	bus_width &= 1 << ((base_addr >> 21) & 7);
+
+	for (i = 0; i < sizeof(reg_offset) / sizeof(u32); i++)
+		if (bus_width == 0)
+			reg_offset[i] = i * 2 + 1;
+		else
+			reg_offset[i] = i;
+
+	ei_local->reg_offset = reg_offset;
+	return 0;
+}
+
+static int __initdata h8300_ne_count = 0;
+#ifdef CONFIG_H8300H_H8MAX
+static unsigned long __initdata h8300_ne_base[] = { 0x800600 };
+static int h8300_ne_irq[] = {EXT_IRQ4};
+#endif
+#ifdef CONFIG_H8300H_AKI3068NET
+static unsigned long __initdata h8300_ne_base[] = { 0x200000 };
+static int h8300_ne_irq[] = {EXT_IRQ5};
+#endif
+
+static inline int init_dev(struct net_device *dev)
+{
+	if (h8300_ne_count < (sizeof(h8300_ne_base) / sizeof(unsigned long))) {
+		dev->base_addr = h8300_ne_base[h8300_ne_count];
+		dev->irq       = h8300_ne_irq[h8300_ne_count];
+		h8300_ne_count++;
+		return 0;
+	} else
+		return -ENODEV;
+}
+
+/*  Probe for various non-shared-memory ethercards.
+
+   NEx000-clone boards have a Station Address PROM (SAPROM) in the packet
+   buffer memory space.  NE2000 clones have 0x57,0x57 in bytes 0x0e,0x0f of
+   the SAPROM, while other supposed NE2000 clones must be detected by their
+   SA prefix.
+
+   Reading the SAPROM from a word-wide card with the 8390 set in byte-wide
+   mode results in doubled values, which can be detected and compensated for.
+
+   The probe is also responsible for initializing the card and filling
+   in the 'dev' and 'ei_status' structures.
+
+   We use the minimum memory size for some ethercard product lines, iff we can't
+   distinguish models.  You can increase the packet buffer size by setting
+   PACKETBUF_MEMSIZE.  Reported Cabletron packet buffer locations are:
+	E1010   starts at 0x100 and ends at 0x2000.
+	E1010-x starts at 0x100 and ends at 0x8000. ("-x" means "more memory")
+	E2010	 starts at 0x100 and ends at 0x4000.
+	E2010-x starts at 0x100 and ends at 0xffff.  */
+
+static int __init do_ne_probe(struct net_device *dev)
+{
+	unsigned int base_addr = dev->base_addr;
+
+	SET_MODULE_OWNER(dev);
+
+	/* First check any supplied i/o locations. User knows best. <cough> */
+	if (base_addr > 0x1ff)	/* Check a single specified location. */
+		return ne_probe1(dev, base_addr);
+	else if (base_addr != 0)	/* Don't probe at all. */
+		return -ENXIO;
+
+	return -ENODEV;
+}
+
+static void cleanup_card(struct net_device *dev)
+{
+	free_irq(dev->irq, dev);
+	release_region(dev->base_addr, NE_IO_EXTENT);
+}
+
+struct net_device * __init ne_probe(int unit)
+{
+	struct net_device *dev = alloc_ei_netdev();
+	int err;
+
+	if (!dev)
+		return ERR_PTR(-ENOMEM);
+
+	if (init_dev(dev))
+		return ERR_PTR(-ENODEV);
+
+	sprintf(dev->name, "eth%d", unit);
+	netdev_boot_setup_check(dev);
+
+	err = init_reg_offset(dev, dev->base_addr);
+	if (err)
+		goto out;
+
+	err = do_ne_probe(dev);
+	if (err)
+		goto out;
+	err = register_netdev(dev);
+	if (err)
+		goto out1;
+	return dev;
+out1:
+	cleanup_card(dev);
+out:
+	free_netdev(dev);
+	return ERR_PTR(err);
+}
+
+static int __init ne_probe1(struct net_device *dev, int ioaddr)
+{
+	int i;
+	unsigned char SA_prom[16];
+	int wordlength = 2;
+	const char *name = NULL;
+	int start_page, stop_page;
+	int reg0, ret;
+	static unsigned version_printed;
+	struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
+	unsigned char bus_width;
+
+	if (!request_region(ioaddr, NE_IO_EXTENT, dev->name))
+		return -EBUSY;
+
+	reg0 = inb_p(ioaddr);
+	if (reg0 == 0xFF) {
+		ret = -ENODEV;
+		goto err_out;
+	}
+
+	/* Do a preliminary verification that we have a 8390. */
+	{
+		int regd;
+		outb_p(E8390_NODMA+E8390_PAGE1+E8390_STOP, ioaddr + E8390_CMD);
+		regd = inb_p(ioaddr + EI_SHIFT(0x0d));
+		outb_p(0xff, ioaddr + EI_SHIFT(0x0d));
+		outb_p(E8390_NODMA+E8390_PAGE0, ioaddr + E8390_CMD);
+		inb_p(ioaddr + EN0_COUNTER0); /* Clear the counter by reading. */
+		if (inb_p(ioaddr + EN0_COUNTER0) != 0) {
+			outb_p(reg0, ioaddr + EI_SHIFT(0));
+			outb_p(regd, ioaddr + EI_SHIFT(0x0d));	/* Restore the old values. */
+			ret = -ENODEV;
+			goto err_out;
+		}
+	}
+
+	if (ei_debug  &&  version_printed++ == 0)
+		printk(KERN_INFO "%s", version1);
+
+	printk(KERN_INFO "NE*000 ethercard probe at %08x:", ioaddr);
+
+	/* Read the 16 bytes of station address PROM.
+	   We must first initialize registers, similar to NS8390_init(eifdev, 0).
+	   We can't reliably read the SAPROM address without this.
+	   (I learned the hard way!). */
+	{
+		struct {unsigned char value, offset; } program_seq[] =
+		{
+			{E8390_NODMA+E8390_PAGE0+E8390_STOP, E8390_CMD}, /* Select page 0*/
+			{0x48,	EN0_DCFG},	/* Set byte-wide (0x48) access. */
+			{0x00,	EN0_RCNTLO},	/* Clear the count regs. */
+			{0x00,	EN0_RCNTHI},
+			{0x00,	EN0_IMR},	/* Mask completion irq. */
+			{0xFF,	EN0_ISR},
+			{E8390_RXOFF, EN0_RXCR},	/* 0x20  Set to monitor */
+			{E8390_TXOFF, EN0_TXCR},	/* 0x02  and loopback mode. */
+			{32,	EN0_RCNTLO},
+			{0x00,	EN0_RCNTHI},
+			{0x00,	EN0_RSARLO},	/* DMA starting at 0x0000. */
+			{0x00,	EN0_RSARHI},
+			{E8390_RREAD+E8390_START, E8390_CMD},
+		};
+
+		for (i = 0; i < sizeof(program_seq)/sizeof(program_seq[0]); i++)
+			outb_p(program_seq[i].value, ioaddr + program_seq[i].offset);
+
+	}
+	bus_width = *(volatile unsigned char *)ABWCR;
+	bus_width &= 1 << ((ioaddr >> 21) & 7);
+	ei_status.word16 = (bus_width == 0); /* temporary setting */
+	for(i = 0; i < 16 /*sizeof(SA_prom)*/; i++) {
+		SA_prom[i] = inb(ioaddr + NE_DATAPORT);
+		inb(ioaddr + NE_DATAPORT); /* dummy read */
+	}
+
+	start_page = NESM_START_PG;
+	stop_page = NESM_STOP_PG;
+
+	if (bus_width)
+		wordlength = 1;
+	else
+		outb_p(0x49, ioaddr + EN0_DCFG);
+
+	/* Set up the rest of the parameters. */
+	name = (wordlength == 2) ? "NE2000" : "NE1000";
+
+	if (! dev->irq) {
+		printk(" failed to detect IRQ line.\n");
+		ret = -EAGAIN;
+		goto err_out;
+	}
+
+	/* Snarf the interrupt now.  There's no point in waiting since we cannot
+	   share and the board will usually be enabled. */
+	ret = request_irq(dev->irq, ei_interrupt, 0, name, dev);
+	if (ret) {
+		printk (" unable to get IRQ %d (errno=%d).\n", dev->irq, ret);
+		goto err_out;
+	}
+
+	dev->base_addr = ioaddr;
+
+	for(i = 0; i < ETHER_ADDR_LEN; i++) {
+		printk(" %2.2x", SA_prom[i]);
+		dev->dev_addr[i] = SA_prom[i];
+	}
+
+	printk("\n%s: %s found at %#x, using IRQ %d.\n",
+		dev->name, name, ioaddr, dev->irq);
+
+	ei_status.name = name;
+	ei_status.tx_start_page = start_page;
+	ei_status.stop_page = stop_page;
+	ei_status.word16 = (wordlength == 2);
+
+	ei_status.rx_start_page = start_page + TX_PAGES;
+#ifdef PACKETBUF_MEMSIZE
+	 /* Allow the packet buffer size to be overridden by know-it-alls. */
+	ei_status.stop_page = ei_status.tx_start_page + PACKETBUF_MEMSIZE;
+#endif
+
+	ei_status.reset_8390 = &ne_reset_8390;
+	ei_status.block_input = &ne_block_input;
+	ei_status.block_output = &ne_block_output;
+	ei_status.get_8390_hdr = &ne_get_8390_hdr;
+	ei_status.priv = 0;
+	dev->open = &ne_open;
+	dev->stop = &ne_close;
+#ifdef CONFIG_NET_POLL_CONTROLLER
+	dev->poll_controller = ei_poll;
+#endif
+	NS8390_init(dev, 0);
+	return 0;
+
+err_out:
+	release_region(ioaddr, NE_IO_EXTENT);
+	return ret;
+}
+
+static int ne_open(struct net_device *dev)
+{
+	ei_open(dev);
+	return 0;
+}
+
+static int ne_close(struct net_device *dev)
+{
+	if (ei_debug > 1)
+		printk(KERN_DEBUG "%s: Shutting down ethercard.\n", dev->name);
+	ei_close(dev);
+	return 0;
+}
+
+/* Hard reset the card.  This used to pause for the same period that a
+   8390 reset command required, but that shouldn't be necessary. */
+
+static void ne_reset_8390(struct net_device *dev)
+{
+	unsigned long reset_start_time = jiffies;
+	struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
+
+	if (ei_debug > 1)
+		printk(KERN_DEBUG "resetting the 8390 t=%ld...", jiffies);
+
+	/* DON'T change these to inb_p/outb_p or reset will fail on clones. */
+	outb(inb(NE_BASE + NE_RESET), NE_BASE + NE_RESET);
+
+	ei_status.txing = 0;
+	ei_status.dmaing = 0;
+
+	/* This check _should_not_ be necessary, omit eventually. */
+	while ((inb_p(NE_BASE+EN0_ISR) & ENISR_RESET) == 0)
+		if (jiffies - reset_start_time > 2*HZ/100) {
+			printk(KERN_WARNING "%s: ne_reset_8390() did not complete.\n", dev->name);
+			break;
+		}
+	outb_p(ENISR_RESET, NE_BASE + EN0_ISR);	/* Ack intr. */
+}
+
+/* Grab the 8390 specific header. Similar to the block_input routine, but
+   we don't need to be concerned with ring wrap as the header will be at
+   the start of a page, so we optimize accordingly. */
+
+static void ne_get_8390_hdr(struct net_device *dev, struct e8390_pkt_hdr *hdr, int ring_page)
+{
+	struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
+	/* This *shouldn't* happen. If it does, it's the last thing you'll see */
+
+	if (ei_status.dmaing)
+	{
+		printk(KERN_EMERG "%s: DMAing conflict in ne_get_8390_hdr "
+			"[DMAstat:%d][irqlock:%d].\n",
+			dev->name, ei_status.dmaing, ei_status.irqlock);
+		return;
+	}
+
+	ei_status.dmaing |= 0x01;
+	outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, NE_BASE + NE_CMD);
+	outb_p(sizeof(struct e8390_pkt_hdr), NE_BASE + EN0_RCNTLO);
+	outb_p(0, NE_BASE + EN0_RCNTHI);
+	outb_p(0, NE_BASE + EN0_RSARLO);		/* On page boundary */
+	outb_p(ring_page, NE_BASE + EN0_RSARHI);
+	outb_p(E8390_RREAD+E8390_START, NE_BASE + NE_CMD);
+
+	if (ei_status.word16) {
+		int len;
+		unsigned short *p = (unsigned short *)hdr;
+		for (len = sizeof(struct e8390_pkt_hdr)>>1; len > 0; len--)
+			*p++ = inw(NE_BASE + NE_DATAPORT);
+	} else
+		insb(NE_BASE + NE_DATAPORT, hdr, sizeof(struct e8390_pkt_hdr));
+
+	outb_p(ENISR_RDC, NE_BASE + EN0_ISR);	/* Ack intr. */
+	ei_status.dmaing &= ~0x01;
+
+	le16_to_cpus(&hdr->count);
+}
+
+/* Block input and output, similar to the Crynwr packet driver.  If you
+   are porting to a new ethercard, look at the packet driver source for hints.
+   The NEx000 doesn't share the on-board packet memory -- you have to put
+   the packet out through the "remote DMA" dataport using outb. */
+
+static void ne_block_input(struct net_device *dev, int count, struct sk_buff *skb, int ring_offset)
+{
+	struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
+#ifdef NE_SANITY_CHECK
+	int xfer_count = count;
+#endif
+	char *buf = skb->data;
+
+	/* This *shouldn't* happen. If it does, it's the last thing you'll see */
+	if (ei_status.dmaing)
+	{
+		printk(KERN_EMERG "%s: DMAing conflict in ne_block_input "
+			"[DMAstat:%d][irqlock:%d].\n",
+			dev->name, ei_status.dmaing, ei_status.irqlock);
+		return;
+	}
+	ei_status.dmaing |= 0x01;
+	outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, NE_BASE + NE_CMD);
+	outb_p(count & 0xff, NE_BASE + EN0_RCNTLO);
+	outb_p(count >> 8, NE_BASE + EN0_RCNTHI);
+	outb_p(ring_offset & 0xff, NE_BASE + EN0_RSARLO);
+	outb_p(ring_offset >> 8, NE_BASE + EN0_RSARHI);
+	outb_p(E8390_RREAD+E8390_START, NE_BASE + NE_CMD);
+	if (ei_status.word16)
+	{
+		int len;
+		unsigned short *p = (unsigned short *)buf;
+		for (len = count>>1; len > 0; len--)
+			*p++ = inw(NE_BASE + NE_DATAPORT);
+		if (count & 0x01)
+		{
+			buf[count-1] = inb(NE_BASE + NE_DATAPORT);
+#ifdef NE_SANITY_CHECK
+			xfer_count++;
+#endif
+		}
+	} else {
+		insb(NE_BASE + NE_DATAPORT, buf, count);
+	}
+
+#ifdef NE_SANITY_CHECK
+	/* This was for the ALPHA version only, but enough people have
+	   been encountering problems so it is still here.  If you see
+	   this message you either 1) have a slightly incompatible clone
+	   or 2) have noise/speed problems with your bus. */
+
+	if (ei_debug > 1)
+	{
+		/* DMA termination address check... */
+		int addr, tries = 20;
+		do {
+			/* DON'T check for 'inb_p(EN0_ISR) & ENISR_RDC' here
+			   -- it's broken for Rx on some cards! */
+			int high = inb_p(NE_BASE + EN0_RSARHI);
+			int low = inb_p(NE_BASE + EN0_RSARLO);
+			addr = (high << 8) + low;
+			if (((ring_offset + xfer_count) & 0xff) == low)
+				break;
+		} while (--tries > 0);
+	 	if (tries <= 0)
+			printk(KERN_WARNING "%s: RX transfer address mismatch,"
+				"%#4.4x (expected) vs. %#4.4x (actual).\n",
+				dev->name, ring_offset + xfer_count, addr);
+	}
+#endif
+	outb_p(ENISR_RDC, NE_BASE + EN0_ISR);	/* Ack intr. */
+	ei_status.dmaing &= ~0x01;
+}
+
+static void ne_block_output(struct net_device *dev, int count,
+		const unsigned char *buf, const int start_page)
+{
+	struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
+	unsigned long dma_start;
+#ifdef NE_SANITY_CHECK
+	int retries = 0;
+#endif
+
+	/* Round the count up for word writes.  Do we need to do this?
+	   What effect will an odd byte count have on the 8390?
+	   I should check someday. */
+
+	if (ei_status.word16 && (count & 0x01))
+		count++;
+
+	/* This *shouldn't* happen. If it does, it's the last thing you'll see */
+	if (ei_status.dmaing)
+	{
+		printk(KERN_EMERG "%s: DMAing conflict in ne_block_output."
+			"[DMAstat:%d][irqlock:%d]\n",
+			dev->name, ei_status.dmaing, ei_status.irqlock);
+		return;
+	}
+	ei_status.dmaing |= 0x01;
+	/* We should already be in page 0, but to be safe... */
+	outb_p(E8390_PAGE0+E8390_START+E8390_NODMA, NE_BASE + NE_CMD);
+
+#ifdef NE_SANITY_CHECK
+retry:
+#endif
+
+#ifdef NE8390_RW_BUGFIX
+	/* Handle the read-before-write bug the same way as the
+	   Crynwr packet driver -- the NatSemi method doesn't work.
+	   Actually this doesn't always work either, but if you have
+	   problems with your NEx000 this is better than nothing! */
+
+	outb_p(0x42, NE_BASE + EN0_RCNTLO);
+	outb_p(0x00, NE_BASE + EN0_RCNTHI);
+	outb_p(0x42, NE_BASE + EN0_RSARLO);
+	outb_p(0x00, NE_BASE + EN0_RSARHI);
+	outb_p(E8390_RREAD+E8390_START, NE_BASE + NE_CMD);
+	/* Make certain that the dummy read has occurred. */
+	udelay(6);
+#endif
+
+	outb_p(ENISR_RDC, NE_BASE + EN0_ISR);
+
+	/* Now the normal output. */
+	outb_p(count & 0xff, NE_BASE + EN0_RCNTLO);
+	outb_p(count >> 8,   NE_BASE + EN0_RCNTHI);
+	outb_p(0x00, NE_BASE + EN0_RSARLO);
+	outb_p(start_page, NE_BASE + EN0_RSARHI);
+
+	outb_p(E8390_RWRITE+E8390_START, NE_BASE + NE_CMD);
+	if (ei_status.word16) {
+		int len;
+		unsigned short *p = (unsigned short *)buf;
+		for (len = count>>1; len > 0; len--)
+			outw(*p++, NE_BASE + NE_DATAPORT);
+	} else {
+		outsb(NE_BASE + NE_DATAPORT, buf, count);
+	}
+
+	dma_start = jiffies;
+
+#ifdef NE_SANITY_CHECK
+	/* This was for the ALPHA version only, but enough people have
+	   been encountering problems so it is still here. */
+
+	if (ei_debug > 1)
+	{
+		/* DMA termination address check... */
+		int addr, tries = 20;
+		do {
+			int high = inb_p(NE_BASE + EN0_RSARHI);
+			int low = inb_p(NE_BASE + EN0_RSARLO);
+			addr = (high << 8) + low;
+			if ((start_page << 8) + count == addr)
+				break;
+		} while (--tries > 0);
+
+		if (tries <= 0)
+		{
+			printk(KERN_WARNING "%s: Tx packet transfer address mismatch,"
+				"%#4.4x (expected) vs. %#4.4x (actual).\n",
+				dev->name, (start_page << 8) + count, addr);
+			if (retries++ == 0)
+				goto retry;
+		}
+	}
+#endif
+
+	while ((inb_p(NE_BASE + EN0_ISR) & ENISR_RDC) == 0)
+		if (jiffies - dma_start > 2*HZ/100) {		/* 20ms */
+			printk(KERN_WARNING "%s: timeout waiting for Tx RDC.\n", dev->name);
+			ne_reset_8390(dev);
+			NS8390_init(dev,1);
+			break;
+		}
+
+	outb_p(ENISR_RDC, NE_BASE + EN0_ISR);	/* Ack intr. */
+	ei_status.dmaing &= ~0x01;
+	return;
+}
+
+
+#ifdef MODULE
+#define MAX_NE_CARDS	4	/* Max number of NE cards per module */
+static struct net_device *dev_ne[MAX_NE_CARDS];
+static int io[MAX_NE_CARDS];
+static int irq[MAX_NE_CARDS];
+static int bad[MAX_NE_CARDS];	/* 0xbad = bad sig or no reset ack */
+
+MODULE_PARM(io, "1-" __MODULE_STRING(MAX_NE_CARDS) "i");
+MODULE_PARM(irq, "1-" __MODULE_STRING(MAX_NE_CARDS) "i");
+MODULE_PARM(bad, "1-" __MODULE_STRING(MAX_NE_CARDS) "i");
+MODULE_PARM_DESC(io, "I/O base address(es),required");
+MODULE_PARM_DESC(irq, "IRQ number(s)");
+MODULE_DESCRIPTION("H8/300 NE2000 Ethernet driver");
+MODULE_LICENSE("GPL");
+
+/* This is set up so that no ISA autoprobe takes place. We can't guarantee
+that the ne2k probe is the last 8390 based probe to take place (as it
+is at boot) and so the probe will get confused by any other 8390 cards.
+ISA device autoprobes on a running machine are not recommended anyway. */
+
+int init_module(void)
+{
+	int this_dev, found = 0;
+
+	for (this_dev = 0; this_dev < MAX_NE_CARDS; this_dev++) {
+		struct net_device *dev = alloc_ei_netdev();
+		if (!dev)
+			break;
+		dev->irq = irq[this_dev];
+		dev->mem_end = bad[this_dev];
+		dev->base_addr = io[this_dev];
+		if (do_ne_probe(dev) == 0) {
+			if (register_netdev(dev) == 0) {
+				dev_ne[found++] = dev;
+				continue;
+			}
+			cleanup_card(dev);
+		}
+		free_netdev(dev);
+		if (found)
+			break;
+		if (io[this_dev] != 0)
+			printk(KERN_WARNING "ne.c: No NE*000 card found at i/o = %#x\n", io[this_dev]);
+		else
+			printk(KERN_NOTICE "ne.c: You must supply \"io=0xNNN\" value(s) for ISA cards.\n");
+		return -ENXIO;
+	}
+	if (found)
+		return 0;
+	return -ENODEV;
+}
+
+void cleanup_module(void)
+{
+	int this_dev;
+
+	for (this_dev = 0; this_dev < MAX_NE_CARDS; this_dev++) {
+		struct net_device *dev = dev_ne[this_dev];
+		if (dev) {
+			unregister_netdev(dev);
+			cleanup_card(dev);
+			free_netdev(dev);
+		}
+	}
+}
+#endif /* MODULE */
diff -Nru a/drivers/net/pcnet32.c b/drivers/net/pcnet32.c
--- a/drivers/net/pcnet32.c	Sun May 16 01:18:34 2004
+++ b/drivers/net/pcnet32.c	Sun May 16 01:18:34 2004
@@ -132,6 +132,8 @@
 };
 #define PCNET32_TEST_LEN (sizeof(pcnet32_gstrings_test) / ETH_GSTRING_LEN)
 
+#define PCNET32_NUM_REGS 146
+
 #define MAX_UNITS 8	/* More are supported, limit only on options */
 static int options[MAX_UNITS];
 static int full_duplex[MAX_UNITS];
@@ -234,7 +236,9 @@
  *	   Jim Lewis <jklewis@us.ibm.com> added ethernet loopback test.
  *	   Thomas Munck Steenholdt <tmus@tmus.dk> non-mii ioctl corrections.
  * v1.29   6 Apr 2004 Jim Lewis <jklewis@us.ibm.com> added physical
- *	   identification code (blink led's).
+ *	   identification code (blink led's) and register dump.
+ *	   Don Fry added timer for 971/972 so skbufs don't remain on tx ring
+ *	   forever.
  */
 
 
@@ -372,6 +376,9 @@
 static int pcnet32_loopback_test(struct net_device *dev, uint64_t *data1);
 static int pcnet32_phys_id(struct net_device *dev, u32 data);
 static void pcnet32_led_blink_callback(struct net_device *dev);
+static int pcnet32_get_regs_len(struct net_device *dev);
+static void pcnet32_get_regs(struct net_device *dev, struct ethtool_regs *regs,
+	void *ptr);
 
 enum pci_flags_bit {
     PCI_USES_IO=1, PCI_USES_MEM=2, PCI_USES_MASTER=4,
@@ -492,9 +499,9 @@
 #ifdef CONFIG_NET_POLL_CONTROLLER
 static void pcnet32_poll_controller(struct net_device *dev)
 {
-	disable_irq(dev->irq);
-	pcnet32_interrupt(0, dev, NULL);
-	enable_irq(dev->irq);
+    disable_irq(dev->irq);
+    pcnet32_interrupt(0, dev, NULL);
+    enable_irq(dev->irq);
 }
 #endif
 
@@ -681,7 +688,7 @@
 	    for (i=0; i<6; i++)
 		*packet++ = dev->dev_addr[i];
 	    for (i=0; i<6; i++)
-		*packet++ = dev->dev_addr[i]; 
+		*packet++ = dev->dev_addr[i];
 	    /* type */
 	    *packet++ = 0x08;
 	    *packet++ = 0x06;
@@ -837,6 +844,72 @@
     return 0;
 }
 
+int pcnet32_get_regs_len(struct net_device *dev)
+{
+    return(PCNET32_NUM_REGS * sizeof(u16));
+}
+
+void pcnet32_get_regs(struct net_device *dev, struct ethtool_regs *regs,
+	void *ptr)
+{
+    int i, csr0;
+    u16 *buff = ptr;
+    struct pcnet32_private *lp = dev->priv;
+    struct pcnet32_access *a = &lp->a;
+    ulong ioaddr = dev->base_addr;
+    int ticks;
+    unsigned long flags;
+
+    spin_lock_irqsave(&lp->lock, flags);
+
+    csr0 = a->read_csr(ioaddr, 0);
+    if (!(csr0 & 0x0004)) {	/* If not stopped */
+	/* set SUSPEND (SPND) - CSR5 bit 0 */
+	a->write_csr(ioaddr, 5, 0x0001);
+
+	/* poll waiting for bit to be set */
+	ticks = 0;
+	while (!(a->read_csr(ioaddr, 5) & 0x0001)) {
+	    spin_unlock_irqrestore(&lp->lock, flags);
+	    mdelay(1);
+	    spin_lock_irqsave(&lp->lock, flags);
+	    ticks++;
+	    if (ticks > 200) {
+		if (netif_msg_hw(lp))
+		    printk(KERN_DEBUG "%s: Error getting into suspend!\n",
+			    dev->name);
+		break;
+	    }
+	}
+    }
+
+    /* read address PROM */
+    for (i=0; i<16; i += 2)
+	*buff++ = inw(ioaddr + i);
+
+    for (i = 0; i <= 89; i++) {
+	*buff++ = a->read_csr(ioaddr, i);
+    }
+
+    *buff++ = a->read_csr(ioaddr, 112);
+    *buff++ = a->read_csr(ioaddr, 114);
+
+    for (i = 0; i <= 35; i++) {
+	*buff++ = a->read_bcr(ioaddr, i);
+    }
+
+    if (!(csr0 & 0x0004)) {	/* If not stopped */
+	/* clear SUSPEND (SPND) - CSR5 bit 0 */
+	a->write_csr(ioaddr, 5, 0x0000);
+    }
+
+    i = buff - (u16 *)ptr;
+    for (; i < PCNET32_NUM_REGS; i++)
+	*buff++ = 0;
+
+    spin_unlock_irqrestore(&lp->lock, flags);
+}
+
 static struct ethtool_ops pcnet32_ethtool_ops = {
     .get_settings	= pcnet32_get_settings,
     .set_settings	= pcnet32_set_settings,
@@ -853,6 +926,8 @@
     .self_test_count	= pcnet32_self_test_count,
     .self_test		= pcnet32_ethtool_test,
     .phys_id		= pcnet32_phys_id,
+    .get_regs_len	= pcnet32_get_regs_len,
+    .get_regs		= pcnet32_get_regs,
 };
 
 /* only probes for non-PCI devices, the rest are handled by
@@ -1032,6 +1107,13 @@
 	ltint = 1;
     }
 
+    if (ltint) {
+	/* Enable timer to prevent skbuffs from remaining on the tx ring
+	 * forever if no other tx being done.  Set timer period to about
+	 * 122 ms */
+	a->write_bcr(ioaddr, 31, 0x253b);
+    }
+
     dev = alloc_etherdev(0);
     if (!dev) {
 	if (pcnet32_debug & NETIF_MSG_PROBE)
@@ -1371,13 +1453,18 @@
 
     /* Re-initialize the PCNET32, and start it when done. */
     lp->a.write_csr (ioaddr, 1, (lp->dma_addr +
-	     offsetof(struct pcnet32_private, init_block)) & 0xffff);
+		offsetof(struct pcnet32_private, init_block)) & 0xffff);
     lp->a.write_csr (ioaddr, 2, (lp->dma_addr +
 		offsetof(struct pcnet32_private, init_block)) >> 16);
 
     lp->a.write_csr (ioaddr, 4, 0x0915);
     lp->a.write_csr (ioaddr, 0, 0x0001);
 
+    if (lp->ltint) {
+	/* start the software timer */
+	lp->a.write_csr(ioaddr, 7, 0x0400);	/* set STINTE */
+    }
+
     netif_start_queue(dev);
 
     /* If we have mii, print the link status and start the watchdog */
@@ -1579,13 +1666,13 @@
     int entry;
     unsigned long flags;
 
+    spin_lock_irqsave(&lp->lock, flags);
+
     if (netif_msg_tx_queued(lp)) {
 	printk(KERN_DEBUG "%s: pcnet32_start_xmit() called, csr0 %4.4x.\n",
 	       dev->name, lp->a.read_csr(ioaddr, 0));
     }
 
-    spin_lock_irqsave(&lp->lock, flags);
-
     /* Default status -- will not enable Successful-TxDone
      * interrupt when that option is available to us.
      */
@@ -1646,7 +1733,7 @@
     struct net_device *dev = dev_id;
     struct pcnet32_private *lp;
     unsigned long ioaddr;
-    u16 csr0,rap;
+    u16 csr0, csr7, rap;
     int boguscnt =  max_interrupt_work;
     int must_restart;
 
@@ -1663,13 +1750,19 @@
     spin_lock(&lp->lock);
 
     rap = lp->a.read_rap(ioaddr);
-    while ((csr0 = lp->a.read_csr (ioaddr, 0)) & 0x8600 && --boguscnt >= 0) {
+    csr0 = lp->a.read_csr (ioaddr, 0);
+    csr7 = lp->ltint ? lp->a.read_csr(ioaddr, 7) : 0;
+
+    while ((csr0 & 0x8600 || csr7 & 0x0800) && --boguscnt >= 0) {
 	if (csr0 == 0xffff) {
 	    break;			/* PCMCIA remove happened */
 	}
 	/* Acknowledge all of the current interrupt sources ASAP. */
 	lp->a.write_csr (ioaddr, 0, csr0 & ~0x004f);
 
+	if (csr7 & 0x0800)
+	    lp->a.write_csr(ioaddr, 7, csr7);
+
 	must_restart = 0;
 
 	if (netif_msg_intr(lp))
@@ -1679,7 +1772,7 @@
 	if (csr0 & 0x0400)		/* Rx interrupt */
 	    pcnet32_rx(dev);
 
-	if (csr0 & 0x0200) {		/* Tx-done interrupt */
+	if (csr0 & 0x0200 || csr7 & 0x0800) {	/* Tx-done or Timer interrupt */
 	    unsigned int dirty_tx = lp->dirty_tx;
 	    int delta;
 
@@ -1786,6 +1879,9 @@
 	    lp->a.write_csr (ioaddr, 0, 0x0004);
 	    pcnet32_restart(dev, 0x0002);
 	}
+
+	csr0 = lp->a.read_csr (ioaddr, 0);
+	csr7 = lp->ltint ? lp->a.read_csr(ioaddr, 7) : 0;
     }
 
     /* Clear any other interrupt, and set interrupt enable. */
@@ -1872,6 +1968,7 @@
 		    if (i > RX_RING_SIZE -2) {
 			lp->stats.rx_dropped++;
 			lp->rx_ring[entry].status |= le16_to_cpu(0x8000);
+			wmb();	/* Make sure adapter sees owner change */
 			lp->cur_rx++;
 		    }
 		    break;
@@ -1935,6 +2032,10 @@
     /* We stop the PCNET32 here -- it occasionally polls memory if we don't. */
     lp->a.write_csr (ioaddr, 0, 0x0004);
 
+    if (lp->ltint) {	/* Disable timer interrupts */
+	lp->a.write_csr(ioaddr, 7, 0x0000);
+    }
+
     /*
      * Switch back to 16bit mode to avoid problems with dumb
      * DOS packet driver after a warm reboot
@@ -1945,9 +2046,12 @@
 
     free_irq(dev->irq, dev);
 
+    spin_lock_irqsave(&lp->lock, flags);
+
     /* free all allocated skbuffs */
     for (i = 0; i < RX_RING_SIZE; i++) {
 	lp->rx_ring[i].status = 0;
+	wmb();		/* Make sure adapter sees owner change */
 	if (lp->rx_skbuff[i]) {
 	    pci_unmap_single(lp->pci_dev, lp->rx_dma_addr[i], PKT_BUF_SZ-2,
 		    PCI_DMA_FROMDEVICE);
@@ -1958,6 +2062,8 @@
     }
 
     for (i = 0; i < TX_RING_SIZE; i++) {
+	lp->tx_ring[i].status = 0;	/* CPU owns buffer */
+	wmb();		/* Make sure adapter sees owner change */
 	if (lp->tx_skbuff[i]) {
 	    pci_unmap_single(lp->pci_dev, lp->tx_dma_addr[i],
 		    lp->tx_skbuff[i]->len, PCI_DMA_TODEVICE);
@@ -1966,6 +2072,8 @@
 	lp->tx_skbuff[i] = NULL;
 	lp->tx_dma_addr[i] = 0;
     }
+
+    spin_unlock_irqrestore(&lp->lock, flags);
 
     return 0;
 }
diff -Nru a/drivers/net/r8169.c b/drivers/net/r8169.c
--- a/drivers/net/r8169.c	Sun May 16 01:18:35 2004
+++ b/drivers/net/r8169.c	Sun May 16 01:18:35 2004
@@ -1156,7 +1156,7 @@
 
 static inline void rtl8169_make_unusable_by_asic(struct RxDesc *desc)
 {
-	desc->addr = 0x0badbadbadbadbad;
+	desc->addr = 0x0badbadbadbadbadull;
 	desc->status &= ~cpu_to_le32(OWNbit | RsvdMask);
 }
 
diff -Nru a/drivers/net/s2io.c b/drivers/net/s2io.c
--- a/drivers/net/s2io.c	Sun May 16 01:18:35 2004
+++ b/drivers/net/s2io.c	Sun May 16 01:18:35 2004
@@ -2339,9 +2339,6 @@
 	struct net_device *dev = (struct net_device *) dev_id;
 	nic_t *sp = dev->priv;
 	XENA_dev_config_t *bar0 = (XENA_dev_config_t *) sp->bar0;
-#ifndef CONFIG_S2IO_NAPI
-	int i, ret;
-#endif
 	u64 reason = 0, general_mask = 0;
 	mac_info_t *mac_control;
 	struct config_param *config;
diff -Nru a/drivers/net/tlan.c b/drivers/net/tlan.c
--- a/drivers/net/tlan.c	Sun May 16 01:18:33 2004
+++ b/drivers/net/tlan.c	Sun May 16 01:18:33 2004
@@ -446,7 +446,9 @@
 		pci_free_consistent(priv->pciDev, priv->dmaSize, priv->dmaStorage, priv->dmaStorageDMA );
 	}
 
+#ifdef CONFIG_PCI
 	pci_release_regions(pdev);
+#endif
 	
 	free_netdev( dev );
 		
@@ -673,8 +675,10 @@
 err_out_free_dev:
 	free_netdev(dev);
 err_out_regions:
+#ifdef CONFIG_PCI
 	if (pdev)
 		pci_release_regions(pdev);
+#endif
 err_out:
 	if (pdev)
 		pci_disable_device(pdev);
diff -Nru a/drivers/net/tulip/de2104x.c b/drivers/net/tulip/de2104x.c
--- a/drivers/net/tulip/de2104x.c	Sun May 16 01:18:36 2004
+++ b/drivers/net/tulip/de2104x.c	Sun May 16 01:18:36 2004
@@ -357,13 +357,6 @@
 static u16 t21041_csr15[] = { 0x0008, 0x0006, 0x000E, 0x0008, 0x0008, };
 
 
-static inline unsigned long
-msec_to_jiffies(unsigned long ms)
-{
-	return (((ms)*HZ+999)/1000);
-}
-
-
 #define dr32(reg)		readl(de->regs + (reg))
 #define dw32(reg,val)		writel((val), de->regs + (reg))
 
@@ -1216,7 +1209,7 @@
 
 		/* de4x5.c delays, so we do too */
 		current->state = TASK_UNINTERRUPTIBLE;
-		schedule_timeout(msec_to_jiffies(10));
+		schedule_timeout(msecs_to_jiffies(10));
 	}
 }
 
diff -Nru a/drivers/net/tulip/dmfe.c b/drivers/net/tulip/dmfe.c
--- a/drivers/net/tulip/dmfe.c	Sun May 16 01:18:36 2004
+++ b/drivers/net/tulip/dmfe.c	Sun May 16 01:18:36 2004
@@ -299,6 +299,9 @@
 static struct ethtool_ops netdev_ethtool_ops;
 static u16 read_srom_word(long ,int);
 static irqreturn_t dmfe_interrupt(int , void *, struct pt_regs *);
+#ifdef CONFIG_NET_POLL_CONTROLLER
+static void poll_dmfe (struct net_device *dev);
+#endif
 static void dmfe_descriptor_init(struct dmfe_board_info *, unsigned long);
 static void allocate_rx_buffer(struct dmfe_board_info *);
 static void update_cr6(u32, unsigned long);
@@ -417,6 +420,9 @@
 	dev->stop = &dmfe_stop;
 	dev->get_stats = &dmfe_get_stats;
 	dev->set_multicast_list = &dmfe_set_filter_mode;
+#ifdef CONFIG_NET_POLL_CONTROLLER
+	dev->poll_controller = &poll_dmfe;
+#endif
 	dev->ethtool_ops = &netdev_ethtool_ops;
 	spin_lock_init(&db->lock);
 
@@ -790,6 +796,23 @@
 	return IRQ_HANDLED;
 }
 
+
+#ifdef CONFIG_NET_POLL_CONTROLLER
+/*
+ * Polling 'interrupt' - used by things like netconsole to send skbs
+ * without having to re-enable interrupts. It's not called while
+ * the interrupt routine is executing.
+ */
+
+static void poll_dmfe (struct net_device *dev)
+{
+	/* disable_irq here is not very nice, but with the lockless
+	   interrupt handler we have no other choice. */
+	disable_irq(dev->irq);
+	dmfe_interrupt (dev->irq, dev, NULL);
+	enable_irq(dev->irq);
+}
+#endif
 
 /*
  *	Free TX resource after TX complete
diff -Nru a/drivers/net/wan/cosa.c b/drivers/net/wan/cosa.c
--- a/drivers/net/wan/cosa.c	Sun May 16 01:18:33 2004
+++ b/drivers/net/wan/cosa.c	Sun May 16 01:18:33 2004
@@ -93,6 +93,7 @@
 #include <linux/netdevice.h>
 #include <linux/spinlock.h>
 #include <linux/smp_lock.h>
+#include <linux/device.h>
 
 #undef COSA_SLOW_IO	/* for testing purposes only */
 #undef REALLY_SLOW_IO
@@ -233,6 +234,9 @@
 /* IRQ can be safely autoprobed */
 static int irq[MAX_CARDS+1] = { -1, -1, -1, -1, -1, -1, 0, };
 
+/* for class stuff*/
+static struct class_simple *cosa_class;
+
 #ifdef MODULE
 MODULE_PARM(io, "1-" __MODULE_STRING(MAX_CARDS) "i");
 MODULE_PARM_DESC(io, "The I/O bases of the COSA or SRP cards");
@@ -359,7 +363,7 @@
 
 static int __init cosa_init(void)
 {
-	int i;
+	int i, err = 0;
 
 	printk(KERN_INFO "cosa v1.08 (c) 1997-2000 Jan Kasprzak <kas@fi.muni.cz>\n");
 #ifdef CONFIG_SMP
@@ -369,12 +373,14 @@
 		if (register_chrdev(cosa_major, "cosa", &cosa_fops)) {
 			printk(KERN_WARNING "cosa: unable to get major %d\n",
 				cosa_major);
-			return -EIO;
+			err = -EIO;
+			goto out;
 		}
 	} else {
 		if (!(cosa_major=register_chrdev(0, "cosa", &cosa_fops))) {
 			printk(KERN_WARNING "cosa: unable to register chardev\n");
-			return -EIO;
+			err = -EIO;
+			goto out;
 		}
 	}
 	for (i=0; i<MAX_CARDS; i++)
@@ -384,15 +390,33 @@
 	if (!nr_cards) {
 		printk(KERN_WARNING "cosa: no devices found.\n");
 		unregister_chrdev(cosa_major, "cosa");
-		return -ENODEV;
+		err = -ENODEV;
+		goto out;
 	}
 	devfs_mk_dir("cosa");
+	cosa_class = class_simple_create(THIS_MODULE, "cosa");
+	if (IS_ERR(cosa_class)) {
+		err = PTR_ERR(cosa_class);
+		goto out_chrdev;
+	}
 	for (i=0; i<nr_cards; i++) {
-		devfs_mk_cdev(MKDEV(cosa_major, i),
+		class_simple_device_add(cosa_class, MKDEV(cosa_major, i),
+				NULL, "cosa%d", i);
+		err = devfs_mk_cdev(MKDEV(cosa_major, i),
 				S_IFCHR|S_IRUSR|S_IWUSR,
 				"cosa/%d", i);
+		if (err) {
+			class_simple_device_remove(MKDEV(cosa_major, i));
+			goto out_chrdev;		
+		}
 	}
-	return 0;
+	err = 0;
+	goto out;
+	
+out_chrdev:
+	unregister_chrdev(cosa_major, "cosa");
+out:
+	return err;
 }
 module_init(cosa_init);
 
@@ -402,8 +426,11 @@
 	int i;
 	printk(KERN_INFO "Unloading the cosa module\n");
 
-	for (i=0; i<nr_cards; i++)
+	for (i=0; i<nr_cards; i++) {
+		class_simple_device_remove(MKDEV(cosa_major, i));
 		devfs_remove("cosa/%d", i);
+	}
+	class_simple_destroy(cosa_class);
 	devfs_remove("cosa");
 	for (cosa=cosa_cards; nr_cards--; cosa++) {
 		/* Clean up the per-channel data */
diff -Nru a/drivers/parisc/superio.c b/drivers/parisc/superio.c
--- a/drivers/parisc/superio.c	Sun May 16 01:18:35 2004
+++ b/drivers/parisc/superio.c	Sun May 16 01:18:35 2004
@@ -63,7 +63,6 @@
 #include <linux/ioport.h>
 #include <linux/serial.h>
 #include <linux/pci.h>
-#include <linux/ioport.h>
 #include <linux/parport.h>
 #include <linux/parport_pc.h>
 #include <linux/termios.h>
@@ -71,6 +70,7 @@
 #include <linux/serial_core.h>
 #include <linux/delay.h>
 #include <linux/ide.h>
+
 #include <asm/io.h>
 #include <asm/hardware.h>
 #include <asm/irq.h>
diff -Nru a/drivers/parisc/wax.c b/drivers/parisc/wax.c
--- a/drivers/parisc/wax.c	Sun May 16 01:18:36 2004
+++ b/drivers/parisc/wax.c	Sun May 16 01:18:36 2004
@@ -17,7 +17,6 @@
 #include <linux/ioport.h>
 #include <linux/slab.h>
 #include <linux/module.h>
-#include <linux/slab.h>
 #include <linux/types.h>
 
 #include <asm/io.h>
diff -Nru a/drivers/parport/parport_pc.c b/drivers/parport/parport_pc.c
--- a/drivers/parport/parport_pc.c	Sun May 16 01:18:36 2004
+++ b/drivers/parport/parport_pc.c	Sun May 16 01:18:36 2004
@@ -2699,7 +2699,7 @@
 	 * and 840 locks up if you write 1 to bit 2! */
 	/* oxsemi_954 */		{ 1, { { 0, -1 }, } },
 	/* oxsemi_840 */		{ 1, { { 0, -1 }, } },
-	/* aks_0100 */			{ 1, { { 0, 1 }, } },
+	/* aks_0100 */                  { 1, { { 0, -1 }, } },
 	/* mobility_pp */		{ 1, { { 0, 1 }, } },
 };
 
diff -Nru a/drivers/parport/share.c b/drivers/parport/share.c
--- a/drivers/parport/share.c	Sun May 16 01:18:35 2004
+++ b/drivers/parport/share.c	Sun May 16 01:18:35 2004
@@ -169,7 +169,7 @@
 
 /**
  *	parport_unregister_driver - deregister a parallel port device driver
- *	@arg: structure describing the driver that was given to
+ *	@drv: structure describing the driver that was given to
  *	      parport_register_driver()
  *
  *	This should be called by a parallel port device driver that
diff -Nru a/drivers/pci/hotplug/shpchp_ctrl.c b/drivers/pci/hotplug/shpchp_ctrl.c
--- a/drivers/pci/hotplug/shpchp_ctrl.c	Sun May 16 01:18:36 2004
+++ b/drivers/pci/hotplug/shpchp_ctrl.c	Sun May 16 01:18:36 2004
@@ -1572,7 +1572,7 @@
 
 			retval = p_slot->hpc_ops->check_cmd_status(ctrl);
 			if (retval) {
-				err("%s: Failed to disable slot, error code(%d)\n", __FUNCTION__, rc);
+				err("%s: Failed to disable slot, error code(%d)\n", __FUNCTION__, retval);
 				/* Done with exclusive hardware access */
 				up(&ctrl->crit_sect);
 				return retval;  
diff -Nru a/drivers/pci/pci.ids b/drivers/pci/pci.ids
--- a/drivers/pci/pci.ids	Sun May 16 01:18:35 2004
+++ b/drivers/pci/pci.ids	Sun May 16 01:18:35 2004
@@ -1820,6 +1820,8 @@
 	0010  DAC960PX
 	0050  AcceleRAID 352/170/160 support Device
 	b166  Gemstone chipset SCSI controller
+		1014 0266  Dual Channel PCI-X U320 SCSI Adapter
+		1014 0278  Dual Channel PCI-X U320 SCSI RAID Adapter
 	ba55  eXtremeRAID 1100 support Device
 	ba56  eXtremeRAID 2000/3000 support Device
 106a  Aten Research Inc
diff -Nru a/drivers/pcmcia/Kconfig b/drivers/pcmcia/Kconfig
--- a/drivers/pcmcia/Kconfig	Sun May 16 01:18:36 2004
+++ b/drivers/pcmcia/Kconfig	Sun May 16 01:18:36 2004
@@ -120,6 +120,13 @@
 
 	  This driver is also available as a module called sa1111_cs.
 
+config PCMCIA_PXA2XX
+	tristate "PXA2xx support"
+	depends on ARM && ARCH_PXA && PCMCIA
+	help
+	  Say Y here to include support for the PXA2xx PCMCIA controller
+
+
 config PCMCIA_PROBE
 	bool
 	default y if ISA && !ARCH_SA1100 && !ARCH_CLPS711X
diff -Nru a/drivers/pcmcia/Makefile b/drivers/pcmcia/Makefile
--- a/drivers/pcmcia/Makefile	Sun May 16 01:18:36 2004
+++ b/drivers/pcmcia/Makefile	Sun May 16 01:18:36 2004
@@ -15,10 +15,14 @@
 obj-$(CONFIG_HD64465_PCMCIA)			+= hd64465_ss.o
 obj-$(CONFIG_PCMCIA_SA1100)			+= sa11xx_core.o sa1100_cs.o
 obj-$(CONFIG_PCMCIA_SA1111)			+= sa11xx_core.o sa1111_cs.o
+obj-$(CONFIG_PCMCIA_PXA2XX)                     += pxa2xx_core.o pxa2xx_cs.o
 
 pcmcia_core-y					+= cistpl.o rsrc_mgr.o bulkmem.o cs.o
 pcmcia_core-$(CONFIG_CARDBUS)			+= cardbus.o
 
+sa11xx_core-y					+= soc_common.o sa11xx_base.o
+pxa2xx_core-y					+= soc_common.o pxa2xx_base.o
+
 sa1111_cs-y					+= sa1111_generic.o
 sa1111_cs-$(CONFIG_SA1100_ADSBITSY)		+= sa1100_adsbitsy.o
 sa1111_cs-$(CONFIG_ASSABET_NEPONSET)		+= sa1100_neponset.o
@@ -42,3 +46,6 @@
 sa1100_cs-$(CONFIG_SA1100_STORK)		+= sa1100_stork.o
 sa1100_cs-$(CONFIG_SA1100_TRIZEPS) 		+= sa1100_trizeps.o
 sa1100_cs-$(CONFIG_SA1100_YOPY)			+= sa1100_yopy.o
+
+pxa2xx_cs-$(CONFIG_ARCH_LUBBOCK)		+= pxa2xx_lubbock.o sa1111_generic.o
+
diff -Nru a/drivers/pcmcia/i82365.c b/drivers/pcmcia/i82365.c
--- a/drivers/pcmcia/i82365.c	Sun May 16 01:18:36 2004
+++ b/drivers/pcmcia/i82365.c	Sun May 16 01:18:36 2004
@@ -68,7 +68,7 @@
 #include "o2micro.h"
 
 #ifdef DEBUG
-static const char *version =
+static const char version[] =
 "i82365.c 1.265 1999/11/10 18:36:21 (David Hinds)";
 
 static int pc_debug;
diff -Nru a/drivers/pcmcia/pxa2xx_base.c b/drivers/pcmcia/pxa2xx_base.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/drivers/pcmcia/pxa2xx_base.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,335 @@
+/*======================================================================
+
+  Device driver for the PCMCIA control functionality of PXA2xx
+  microprocessors.
+
+    The contents of this file may be used under the
+    terms of the GNU Public License version 2 (the "GPL")
+
+    (c) Ian Molton (spyro@f2s.com) 2003
+    (c) Stefan Eletzhofer (stefan.eletzhofer@inquant.de) 2003,4
+
+    derived from sa11xx_base.c
+
+     Portions created by John G. Dorsey are
+     Copyright (C) 1999 John G. Dorsey.
+
+  ======================================================================*/
+
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/config.h>
+#include <linux/cpufreq.h>
+#include <linux/ioport.h>
+#include <linux/kernel.h>
+#include <linux/notifier.h>
+#include <linux/spinlock.h>
+
+#include <asm/hardware.h>
+#include <asm/io.h>
+#include <asm/irq.h>
+#include <asm/system.h>
+
+#include <pcmcia/cs_types.h>
+#include <pcmcia/ss.h>
+#include <pcmcia/bulkmem.h>
+#include <pcmcia/cistpl.h>
+
+#include "cs_internal.h"
+#include "soc_common.h"
+#include "pxa2xx_base.h"
+
+
+#define MCXX_SETUP_MASK     (0x7f)
+#define MCXX_ASST_MASK      (0x1f)
+#define MCXX_HOLD_MASK      (0x3f)
+#define MCXX_SETUP_SHIFT    (0)
+#define MCXX_ASST_SHIFT     (7)
+#define MCXX_HOLD_SHIFT     (14)
+
+static inline u_int pxa2xx_mcxx_hold(u_int pcmcia_cycle_ns,
+				     u_int mem_clk_10khz)
+{
+	u_int code = pcmcia_cycle_ns * mem_clk_10khz;
+	return (code / 300000) + ((code % 300000) ? 1 : 0) - 1;
+}
+
+static inline u_int pxa2xx_mcxx_asst(u_int pcmcia_cycle_ns,
+				     u_int mem_clk_10khz)
+{
+	u_int code = pcmcia_cycle_ns * mem_clk_10khz;
+	return (code / 300000) + ((code % 300000) ? 1 : 0) - 1;
+}
+
+static inline u_int pxa2xx_mcxx_setup(u_int pcmcia_cycle_ns,
+				      u_int mem_clk_10khz)
+{
+	u_int code = pcmcia_cycle_ns * mem_clk_10khz;
+	return (code / 100000) + ((code % 100000) ? 1 : 0) - 1;
+}
+
+/* This function returns the (approximate) command assertion period, in
+ * nanoseconds, for a given CPU clock frequency and MCXX_ASST value:
+ */
+static inline u_int pxa2xx_pcmcia_cmd_time(u_int mem_clk_10khz,
+					   u_int pcmcia_mcxx_asst)
+{
+	return (300000 * (pcmcia_mcxx_asst + 1) / mem_clk_10khz);
+}
+
+static int pxa2xx_pcmcia_set_mcmem( int sock, int speed, int clock )
+{
+	MCMEM(sock) = ((pxa2xx_mcxx_setup(speed, clock)
+		& MCXX_SETUP_MASK) << MCXX_SETUP_SHIFT)
+		| ((pxa2xx_mcxx_asst(speed, clock)
+		& MCXX_ASST_MASK) << MCXX_ASST_SHIFT)
+		| ((pxa2xx_mcxx_hold(speed, clock)
+		& MCXX_HOLD_MASK) << MCXX_HOLD_SHIFT);
+
+	return 0;
+}
+
+static int pxa2xx_pcmcia_set_mcio( int sock, int speed, int clock )
+{
+	MCIO(sock) = ((pxa2xx_mcxx_setup(speed, clock)
+		& MCXX_SETUP_MASK) << MCXX_SETUP_SHIFT)
+		| ((pxa2xx_mcxx_asst(speed, clock)
+		& MCXX_ASST_MASK) << MCXX_ASST_SHIFT)
+		| ((pxa2xx_mcxx_hold(speed, clock)
+		& MCXX_HOLD_MASK) << MCXX_HOLD_SHIFT);
+
+	return 0;
+}
+
+static int pxa2xx_pcmcia_set_mcatt( int sock, int speed, int clock )
+{
+	MCATT(sock) = ((pxa2xx_mcxx_setup(speed, clock)
+		& MCXX_SETUP_MASK) << MCXX_SETUP_SHIFT)
+		| ((pxa2xx_mcxx_asst(speed, clock)
+		& MCXX_ASST_MASK) << MCXX_ASST_SHIFT)
+		| ((pxa2xx_mcxx_hold(speed, clock)
+		& MCXX_HOLD_MASK) << MCXX_HOLD_SHIFT);
+
+	return 0;
+}
+
+static int pxa2xx_pcmcia_set_mcxx(struct soc_pcmcia_socket *skt, unsigned int lclk)
+{
+	int sock = skt->nr;
+
+	pxa2xx_pcmcia_set_mcmem( sock, SOC_PCMCIA_5V_MEM_ACCESS, lclk );
+	pxa2xx_pcmcia_set_mcatt( sock, SOC_PCMCIA_ATTR_MEM_ACCESS, lclk );
+	pxa2xx_pcmcia_set_mcio( sock, SOC_PCMCIA_IO_ACCESS, lclk );
+
+	return 0;
+}
+
+static int pxa2xx_pcmcia_set_timing(struct soc_pcmcia_socket *skt)
+{
+	unsigned int lclk = get_lclk_frequency_10khz();
+	return pxa2xx_pcmcia_set_mcxx(skt, lclk);
+}
+
+int pxa2xx_drv_pcmcia_probe(struct device *dev)
+{
+	int ret;
+	struct pcmcia_low_level *ops;
+	int first, nr;
+
+	if (!dev || !dev->platform_data)
+		return -ENODEV;
+
+	ops = (struct pcmcia_low_level *)dev->platform_data;
+	first = ops->first;
+	nr = ops->nr;
+
+	/* Setup GPIOs for PCMCIA/CF alternate function mode.
+	 *
+	 * It would be nice if set_GPIO_mode included support
+	 * for driving GPIO outputs to default high/low state
+	 * before programming GPIOs as outputs. Setting GPIO
+	 * outputs to default high/low state via GPSR/GPCR
+	 * before defining them as outputs should reduce
+	 * the possibility of glitching outputs during GPIO
+	 * setup. This of course assumes external terminators
+	 * are present to hold GPIOs in a defined state.
+	 *
+	 * In the meantime, setup default state of GPIO
+	 * outputs before we enable them as outputs.
+	 */
+
+	GPSR(GPIO48_nPOE) = GPIO_bit(GPIO48_nPOE) |
+		GPIO_bit(GPIO49_nPWE) |
+		GPIO_bit(GPIO50_nPIOR) |
+		GPIO_bit(GPIO51_nPIOW) |
+		GPIO_bit(GPIO52_nPCE_1) |
+		GPIO_bit(GPIO53_nPCE_2);
+
+	pxa_gpio_mode(GPIO48_nPOE_MD);
+	pxa_gpio_mode(GPIO49_nPWE_MD);
+	pxa_gpio_mode(GPIO50_nPIOR_MD);
+	pxa_gpio_mode(GPIO51_nPIOW_MD);
+	pxa_gpio_mode(GPIO52_nPCE_1_MD);
+	pxa_gpio_mode(GPIO53_nPCE_2_MD);
+	pxa_gpio_mode(GPIO54_pSKTSEL_MD); /* REVISIT: s/b dependent on num sockets */
+	pxa_gpio_mode(GPIO55_nPREG_MD);
+	pxa_gpio_mode(GPIO56_nPWAIT_MD);
+	pxa_gpio_mode(GPIO57_nIOIS16_MD);
+
+	/* Provide our PXA2xx specific timing routines. */
+	ops->set_timing  = pxa2xx_pcmcia_set_timing;
+
+	ret = soc_common_drv_pcmcia_probe(dev, ops, first, nr);
+
+	if (ret == 0) {
+		/*
+		 * We have at least one socket, so set MECR:CIT
+		 * (Card Is There)
+		 */
+		MECR |= MECR_CIT;
+
+		/* Set MECR:NOS (Number Of Sockets) */
+		if (nr > 1)
+			MECR |= MECR_NOS;
+		else
+			MECR &= ~MECR_NOS;
+	}
+
+	return ret;
+}
+EXPORT_SYMBOL(pxa2xx_drv_pcmcia_probe);
+
+static int pxa2xx_drv_pcmcia_suspend(struct device *dev, u32 state, u32 level)
+{
+	int ret = 0;
+	if (level == SUSPEND_SAVE_STATE)
+		ret = pcmcia_socket_dev_suspend(dev, state);
+	return ret;
+}
+
+static int pxa2xx_drv_pcmcia_resume(struct device *dev, u32 level)
+{
+	int ret = 0;
+	if (level == RESUME_RESTORE_STATE)
+		ret = pcmcia_socket_dev_resume(dev);
+	return ret;
+}
+
+static struct device_driver pxa2xx_pcmcia_driver = {
+	.probe		= pxa2xx_drv_pcmcia_probe,
+	.remove		= soc_common_drv_pcmcia_remove,
+	.suspend 	= pxa2xx_drv_pcmcia_suspend,
+	.resume 	= pxa2xx_drv_pcmcia_resume,
+	.name		= "pxa2xx-pcmcia",
+	.bus		= &platform_bus_type,
+};
+
+#ifdef CONFIG_CPU_FREQ
+
+/*
+ * When pxa2xx_pcmcia_notifier() decides that a MC{IO,MEM,ATT} adjustment (due
+ * to a core clock frequency change) is needed, this routine establishes
+ * new values consistent with the clock speed `clock'.
+ */
+static void pxa2xx_pcmcia_update_mcxx(unsigned int clock)
+{
+	struct soc_pcmcia_socket *skt;
+
+	down(&soc_sockets_lock);
+	list_for_each_entry(skt, &soc_sockets, node) {
+		pxa2xx_pcmcia_set_mcio(skt->nr, calc_speed(skt->spd_io,
+				       MAX_IO_WIN, SOC_PCMCIA_IO_ACCESS), clock);
+		pxa2xx_pcmcia_set_mcmem(skt->nr, calc_speed(skt->spd_io,
+					MAX_IO_WIN, SOC_PCMCIA_3V_MEM_ACCESS), clock );
+		pxa2xx_pcmcia_set_mcatt(skt->nr, calc_speed(skt->spd_io,
+					MAX_IO_WIN, SOC_PCMCIA_3V_MEM_ACCESS), clock );
+	}
+	up(&soc_sockets_lock);
+}
+
+/*
+ * When changing the processor L clock frequency, it is necessary
+ * to adjust the MCXX timings accordingly. We've recorded the timings
+ * requested by Card Services, so this is just a matter of finding
+ * out what our current speed is, and then recomputing the new MCXX
+ * values.
+ *
+ * Returns: 0 on success, -1 on error
+ */
+static int
+pxa2xx_pcmcia_notifier(struct notifier_block *nb, unsigned long val, void *data)
+{
+	struct cpufreq_freqs *freqs = data;
+
+#warning "it's not clear if this is right since the core CPU (N) clock has no effect on the memory (L) clock"
+	switch (val) {
+		case CPUFREQ_PRECHANGE:
+			if (freqs->new > freqs->old) {
+				debug( 2, "new frequency %u.%uMHz > %u.%uMHz, "
+						"pre-updating\n",
+						freqs->new / 1000, (freqs->new / 100) % 10,
+						freqs->old / 1000, (freqs->old / 100) % 10);
+				pxa2xx_pcmcia_update_mcxx(freqs->new);
+			}
+			break;
+
+		case CPUFREQ_POSTCHANGE:
+			if (freqs->new < freqs->old) {
+				debug( 2, "new frequency %u.%uMHz < %u.%uMHz, "
+						"post-updating\n",
+						freqs->new / 1000, (freqs->new / 100) % 10,
+						freqs->old / 1000, (freqs->old / 100) % 10);
+				pxa2xx_pcmcia_update_mcxx(freqs->new);
+			}
+			break;
+	}
+
+	return 0;
+}
+
+static struct notifier_block pxa2xx_pcmcia_notifier_block = {
+	.notifier_call	= pxa2xx_pcmcia_notifier
+};
+
+static int __init pxa2xx_pcmcia_cpufreq_init(void)
+{
+	int ret;
+
+	ret = cpufreq_register_notifier(&pxa2xx_pcmcia_notifier_block,
+					CPUFREQ_TRANSITION_NOTIFIER);
+	if (ret < 0)
+		printk(KERN_ERR "Unable to register CPU frequency change "
+				"notifier for PCMCIA (%d)\n", ret);
+	return ret;
+}
+
+static void __exit pxa2xx_pcmcia_cpufreq_exit(void)
+{
+	cpufreq_unregister_notifier(&pxa2xx_pcmcia_notifier_block, CPUFREQ_TRANSITION_NOTIFIER);
+}
+
+#else
+#define pxa2xx_pcmcia_cpufreq_init()
+#define pxa2xx_pcmcia_cpufreq_exit()
+#endif
+
+static int __init pxa2xx_pcmcia_init(void)
+{
+	int ret = driver_register(&pxa2xx_pcmcia_driver);
+	if (ret == 0)
+		pxa2xx_pcmcia_cpufreq_init();
+	return ret;
+}
+
+static void __exit pxa2xx_pcmcia_exit(void)
+{
+	pxa2xx_pcmcia_cpufreq_exit();
+	driver_unregister(&pxa2xx_pcmcia_driver);
+}
+
+module_init(pxa2xx_pcmcia_init);
+module_exit(pxa2xx_pcmcia_exit);
+
+MODULE_AUTHOR("Stefan Eletzhofer <stefan.eletzhofer@inquant.de> and Ian Molton <spyro@f2s.com>");
+MODULE_DESCRIPTION("Linux PCMCIA Card Services: PXA2xx core socket driver");
+MODULE_LICENSE("GPL");
diff -Nru a/drivers/pcmcia/pxa2xx_base.h b/drivers/pcmcia/pxa2xx_base.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/drivers/pcmcia/pxa2xx_base.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,3 @@
+/* temporary measure */
+extern int pxa2xx_drv_pcmcia_probe(struct device *);
+
diff -Nru a/drivers/pcmcia/pxa2xx_lubbock.c b/drivers/pcmcia/pxa2xx_lubbock.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/drivers/pcmcia/pxa2xx_lubbock.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,221 @@
+/*
+ * linux/drivers/pcmcia/pxa2xx_lubbock.c
+ *
+ * Author:	George Davis
+ * Created:	Jan 10, 2002
+ * Copyright:	MontaVista Software Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * Originally based upon linux/drivers/pcmcia/sa1100_neponset.c
+ *
+ * Lubbock PCMCIA specific routines.
+ *
+ */
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/sched.h>
+#include <linux/device.h>
+#include <linux/errno.h>
+#include <linux/init.h>
+
+#include <asm/hardware.h>
+#include <asm/hardware/sa1111.h>
+
+#include "sa1111_generic.h"
+
+static int
+lubbock_pcmcia_configure_socket(struct soc_pcmcia_socket *skt,
+				const socket_state_t *state)
+{
+  unsigned long flags, gpio, misc_wr;
+  int ret = 1;
+  struct pcmcia_state new_state;
+
+  local_irq_save(flags);
+
+  gpio = PA_DWR;
+  misc_wr = LUB_MISC_WR;
+
+  /* Lubbock uses the Maxim MAX1602, with the following connections:
+   *
+   * Socket 0 (PCMCIA):
+   *	MAX1602	Lubbock		Register
+   *	Pin	Signal
+   *	-----	-------		----------------------
+   *	A0VPP	S0_PWR0		SA-1111 GPIO A<0>
+   *	A1VPP	S0_PWR1		SA-1111 GPIO A<1>
+   *	A0VCC	S0_PWR2		SA-1111 GPIO A<2>
+   *	A1VCC	S0_PWR3		SA-1111 GPIO A<3>
+   *	VX	VCC
+   *	VY	+3.3V
+   *	12IN	+12V
+   *	CODE	+3.3V		Cirrus  Code, CODE = High (VY)
+   *
+   * Socket 1 (CF):
+   *	MAX1602	Lubbock		Register
+   *	Pin	Signal
+   *	-----	-------		----------------------
+   *	A0VPP	GND		VPP is not connected
+   *	A1VPP	GND		VPP is not connected
+   *	A0VCC	S1_PWR0		MISC_WR<14>
+   *	A1VCC	S1_PWR0		MISC_WR<15>
+   *	VX	VCC
+   *	VY	+3.3V
+   *	12IN	GND		VPP is not connected
+   *	CODE	+3.3V		Cirrus  Code, CODE = High (VY)
+   *
+   */
+
+again:
+  switch(skt->nr){
+  case 0:
+
+    switch(state->Vcc){
+    case 0:
+      gpio &= ~(GPIO_bit(2) | GPIO_bit(3));
+      break;
+
+    case 33:
+      gpio = (gpio & ~(GPIO_bit(2) | GPIO_bit(3))) | GPIO_bit(3);
+      break;
+
+    case 50:
+      gpio = (gpio & ~(GPIO_bit(2) | GPIO_bit(3))) | GPIO_bit(2);
+      break;
+
+    default:
+      printk(KERN_ERR "%s(): unrecognized Vcc %u\n", __FUNCTION__, state->Vcc);
+      ret = -1;
+    }
+
+    switch(state->Vpp){
+    case 0:
+      gpio &= ~(GPIO_bit(0) | GPIO_bit(1));
+      break;
+
+    case 120:
+      gpio = (gpio & ~(GPIO_bit(0) | GPIO_bit(1))) | GPIO_bit(1);
+      break;
+
+    default:
+      /* REVISIT: I'm not sure about this? Is this correct?
+         Is it always safe or do we have potential problems
+         with bogus combinations of Vcc and Vpp settings? */
+      if(state->Vpp == state->Vcc)
+        gpio = (gpio & ~(GPIO_bit(0) | GPIO_bit(1))) | GPIO_bit(0);
+      else {
+	printk(KERN_ERR "%s(): unrecognized Vpp %u\n", __FUNCTION__, state->Vpp);
+	ret = -1;
+	break;
+      }
+    }
+
+    break;
+
+  case 1:
+    switch(state->Vcc){
+    case 0:
+      misc_wr &= ~((1 << 15) | (1 << 14));
+      break;
+
+    case 33:
+      misc_wr = (misc_wr & ~(1 << 15)) | (1 << 14);
+      gpio = (gpio & ~(GPIO_bit(2) | GPIO_bit(3))) | GPIO_bit(2);
+      break;
+
+    case 50:
+      misc_wr = (misc_wr & ~(1 << 15)) | (1 << 14);
+      break;
+
+    default:
+      printk(KERN_ERR "%s(): unrecognized Vcc %u\n", __FUNCTION__, state->Vcc);
+      ret = -1;
+      break;
+    }
+
+    if(state->Vpp!=state->Vcc && state->Vpp!=0){
+      printk(KERN_ERR "%s(): CF slot cannot support Vpp %u\n", __FUNCTION__, state->Vpp);
+      ret = -1;
+      break;
+    }
+
+    break;
+
+  default:
+    ret = -1;
+  }
+
+  if (ret >= 0) {
+    sa1111_pcmcia_configure_socket(skt, state);
+    LUB_MISC_WR = misc_wr;
+    PA_DWR = gpio;
+  }
+
+  if (ret > 0) {
+    ret = 0;
+#if 1
+    /*
+     * HACK ALERT:
+     * We can't sense the voltage properly on Lubbock before actually
+     * applying some power to the socket (catch 22).
+     * Resense the socket Voltage Sense pins after applying socket power.
+     */
+    sa1111_pcmcia_socket_state(skt, &new_state);
+    if (state->Vcc == 33 && !new_state.vs_3v && !new_state.vs_Xv) {
+      /* Switch to 5V,  Configure socket with 5V voltage */
+      PA_DWR &= ~(GPIO_bit(0) | GPIO_bit(1) | GPIO_bit(2) | GPIO_bit(3));
+      PA_DDR &= ~(GPIO_bit(0) | GPIO_bit(1) | GPIO_bit(2) | GPIO_bit(3));
+      /* We need to hack around the const qualifier as well to keep this
+         ugly workaround localized and not force it to the rest of the code.
+         Barf bags avaliable in the seat pocket in front of you! */
+      ((socket_state_t *)state)->Vcc = 50;
+      ((socket_state_t *)state)->Vpp = 50;
+      goto again;
+    }
+#endif
+  }
+
+  local_irq_restore(flags);
+  return ret;
+}
+
+static struct pcmcia_low_level lubbock_pcmcia_ops = {
+	.owner			= THIS_MODULE,
+	.hw_init		= sa1111_pcmcia_hw_init,
+	.hw_shutdown		= sa1111_pcmcia_hw_shutdown,
+	.socket_state		= sa1111_pcmcia_socket_state,
+	.configure_socket	= lubbock_pcmcia_configure_socket,
+	.socket_init		= sa1111_pcmcia_socket_init,
+	.socket_suspend		= sa1111_pcmcia_socket_suspend,
+	.first			= 0,
+	.nr			= 2,
+};
+
+#include "pxa2xx_base.h"
+
+int __init pcmcia_lubbock_init(struct device *dev)
+{
+	int ret = -ENODEV;
+
+	if (machine_is_lubbock()) {
+		/*
+		 * Set GPIO_A<3:0> to be outputs for the MAX1600,
+		 * and switch to standby mode.
+		 */
+		PA_DWR = 0;
+		PA_DDR = 0;
+		PA_SDR = 0;
+		PA_SSR = 0;
+
+		/* Set CF Socket 1 power to standby mode. */
+		LUB_MISC_WR &= ~(GPIO_bit(15) | GPIO_bit(14));
+
+		dev->platform_data = &lubbock_pcmcia_ops;
+		ret = pxa2xx_drv_pcmcia_probe(dev);
+	}
+
+	return ret;
+}
diff -Nru a/drivers/pcmcia/sa1100.h b/drivers/pcmcia/sa1100.h
--- a/drivers/pcmcia/sa1100.h	Sun May 16 01:18:35 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,164 +0,0 @@
-/*======================================================================
-
-    Device driver for the PCMCIA control functionality of StrongARM
-    SA-1100 microprocessors.
-
-    The contents of this file are subject to the Mozilla Public
-    License Version 1.1 (the "License"); you may not use this file
-    except in compliance with the License. You may obtain a copy of
-    the License at http://www.mozilla.org/MPL/
-
-    Software distributed under the License is distributed on an "AS
-    IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-    implied. See the License for the specific language governing
-    rights and limitations under the License.
-
-    The initial developer of the original code is John G. Dorsey
-    <john+@cs.cmu.edu>.  Portions created by John G. Dorsey are
-    Copyright (C) 1999 John G. Dorsey.  All Rights Reserved.
-
-    Alternatively, the contents of this file may be used under the
-    terms of the GNU Public License version 2 (the "GPL"), in which
-    case the provisions of the GPL are applicable instead of the
-    above.  If you wish to allow the use of your version of this file
-    only under the terms of the GPL and not to allow others to use
-    your version of this file under the MPL, indicate your decision
-    by deleting the provisions above and replace them with the notice
-    and other provisions required by the GPL.  If you do not delete
-    the provisions above, a recipient may use your version of this
-    file under either the MPL or the GPL.
-    
-======================================================================*/
-
-#if !defined(_PCMCIA_SA1100_H)
-# define _PCMCIA_SA1100_H
-
-#include <pcmcia/cs_types.h>
-#include <pcmcia/ss.h>
-#include <pcmcia/bulkmem.h>
-#include <pcmcia/cistpl.h>
-#include "cs_internal.h"
-#include "sa1100_generic.h"
-
-/* MECR: Expansion Memory Configuration Register
- * (SA-1100 Developers Manual, p.10-13; SA-1110 Developers Manual, p.10-24)
- *
- * MECR layout is:  
- *
- *   FAST1 BSM1<4:0> BSA1<4:0> BSIO1<4:0> FAST0 BSM0<4:0> BSA0<4:0> BSIO0<4:0>
- *
- * (This layout is actually true only for the SA-1110; the FASTn bits are
- * reserved on the SA-1100.)
- */
-
-#define MECR_SOCKET_0_SHIFT (0)
-#define MECR_SOCKET_1_SHIFT (16)
-
-#define MECR_BS_MASK        (0x1f)
-#define MECR_FAST_MODE_MASK (0x01)
-
-#define MECR_BSIO_SHIFT (0)
-#define MECR_BSA_SHIFT  (5)
-#define MECR_BSM_SHIFT  (10)
-#define MECR_FAST_SHIFT (15)
-
-#define MECR_SET(mecr, sock, shift, mask, bs) \
-((mecr)=((mecr)&~(((mask)<<(shift))<<\
-                  ((sock)==0?MECR_SOCKET_0_SHIFT:MECR_SOCKET_1_SHIFT)))|\
-        (((bs)<<(shift))<<((sock)==0?MECR_SOCKET_0_SHIFT:MECR_SOCKET_1_SHIFT)))
-
-#define MECR_GET(mecr, sock, shift, mask) \
-((((mecr)>>(((sock)==0)?MECR_SOCKET_0_SHIFT:MECR_SOCKET_1_SHIFT))>>\
- (shift))&(mask))
-
-#define MECR_BSIO_SET(mecr, sock, bs) \
-MECR_SET((mecr), (sock), MECR_BSIO_SHIFT, MECR_BS_MASK, (bs))
-
-#define MECR_BSIO_GET(mecr, sock) \
-MECR_GET((mecr), (sock), MECR_BSIO_SHIFT, MECR_BS_MASK)
-
-#define MECR_BSA_SET(mecr, sock, bs) \
-MECR_SET((mecr), (sock), MECR_BSA_SHIFT, MECR_BS_MASK, (bs))
-
-#define MECR_BSA_GET(mecr, sock) \
-MECR_GET((mecr), (sock), MECR_BSA_SHIFT, MECR_BS_MASK)
-
-#define MECR_BSM_SET(mecr, sock, bs) \
-MECR_SET((mecr), (sock), MECR_BSM_SHIFT, MECR_BS_MASK, (bs))
-
-#define MECR_BSM_GET(mecr, sock) \
-MECR_GET((mecr), (sock), MECR_BSM_SHIFT, MECR_BS_MASK)
-
-#define MECR_FAST_SET(mecr, sock, fast) \
-MECR_SET((mecr), (sock), MECR_FAST_SHIFT, MECR_FAST_MODE_MASK, (fast))
-
-#define MECR_FAST_GET(mecr, sock) \
-MECR_GET((mecr), (sock), MECR_FAST_SHIFT, MECR_FAST_MODE_MASK)
-
-
-/* This function implements the BS value calculation for setting the MECR
- * using integer arithmetic:
- */
-static inline unsigned int sa1100_pcmcia_mecr_bs(unsigned int pcmcia_cycle_ns,
-						 unsigned int cpu_clock_khz){
-  unsigned int t = ((pcmcia_cycle_ns * cpu_clock_khz) / 6) - 1000000;
-  return (t / 1000000) + (((t % 1000000) == 0) ? 0 : 1);
-}
-
-/* This function returns the (approxmiate) command assertion period, in
- * nanoseconds, for a given CPU clock frequency and MECR BS value:
- */
-static inline unsigned int sa1100_pcmcia_cmd_time(unsigned int cpu_clock_khz,
-						  unsigned int pcmcia_mecr_bs){
-  return (((10000000 * 2) / cpu_clock_khz) * (3 * (pcmcia_mecr_bs + 1))) / 10;
-}
-
-
-/* SA-1100 PCMCIA Memory and I/O timing
- * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- * The SA-1110 Developer's Manual, section 10.2.5, says the following:
- *
- *  "To calculate the recommended BS_xx value for each address space:
- *   divide the command width time (the greater of twIOWR and twIORD,
- *   or the greater of twWE and twOE) by processor cycle time; divide
- *   by 2; divide again by 3 (number of BCLK's per command assertion);
- *   round up to the next whole number; and subtract 1."
- *
- * The PC Card Standard, Release 7, section 4.13.4, says that twIORD
- * has a minimum value of 165ns. Section 4.13.5 says that twIOWR has
- * a minimum value of 165ns, as well. Section 4.7.2 (describing
- * common and attribute memory write timing) says that twWE has a
- * minimum value of 150ns for a 250ns cycle time (for 5V operation;
- * see section 4.7.4), or 300ns for a 600ns cycle time (for 3.3V
- * operation, also section 4.7.4). Section 4.7.3 says that taOE
- * has a maximum value of 150ns for a 300ns cycle time (for 5V
- * operation), or 300ns for a 600ns cycle time (for 3.3V operation).
- *
- * When configuring memory maps, Card Services appears to adopt the policy
- * that a memory access time of "0" means "use the default." The default
- * PCMCIA I/O command width time is 165ns. The default PCMCIA 5V attribute
- * and memory command width time is 150ns; the PCMCIA 3.3V attribute and
- * memory command width time is 300ns.
- */
-#define SA1100_PCMCIA_IO_ACCESS      (165)
-#define SA1100_PCMCIA_5V_MEM_ACCESS  (150)
-#define SA1100_PCMCIA_3V_MEM_ACCESS  (300)
-
-
-/* The socket driver actually works nicely in interrupt-driven form,
- * so the (relatively infrequent) polling is "just to be sure."
- */
-#define SA1100_PCMCIA_POLL_PERIOD    (2*HZ)
-
-struct pcmcia_low_level;
-
-/* I/O pins replacing memory pins
- * (PCMCIA System Architecture, 2nd ed., by Don Anderson, p.75)
- *
- * These signals change meaning when going from memory-only to 
- * memory-or-I/O interface:
- */
-#define iostschg bvd1
-#define iospkr   bvd2
-
-#endif  /* !defined(_PCMCIA_SA1100_H) */
diff -Nru a/drivers/pcmcia/sa1100_adsbitsy.c b/drivers/pcmcia/sa1100_adsbitsy.c
--- a/drivers/pcmcia/sa1100_adsbitsy.c	Sun May 16 01:18:37 2004
+++ b/drivers/pcmcia/sa1100_adsbitsy.c	Sun May 16 01:18:37 2004
@@ -20,7 +20,7 @@
 
 #include "sa1111_generic.h"
 
-static int adsbitsy_pcmcia_hw_init(struct sa1100_pcmcia_socket *skt)
+static int adsbitsy_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
 {
 	/* Set GPIO_A<3:0> to be outputs for PCMCIA/CF power controller: */
 	PA_DDR &= ~(GPIO_GPIO0 | GPIO_GPIO1 | GPIO_GPIO2 | GPIO_GPIO3);
@@ -35,7 +35,7 @@
 }
 
 static int
-adsbitsy_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt, const socket_state_t *state)
+adsbitsy_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state)
 {
 	unsigned int pa_dwr_mask, pa_dwr_set;
 	int ret;
diff -Nru a/drivers/pcmcia/sa1100_assabet.c b/drivers/pcmcia/sa1100_assabet.c
--- a/drivers/pcmcia/sa1100_assabet.c	Sun May 16 01:18:36 2004
+++ b/drivers/pcmcia/sa1100_assabet.c	Sun May 16 01:18:36 2004
@@ -25,23 +25,23 @@
 	{ 1, ASSABET_IRQ_GPIO_CF_BVD1, "CF BVD1" },
 };
 
-static int assabet_pcmcia_hw_init(struct sa1100_pcmcia_socket *skt)
+static int assabet_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
 {
 	skt->irq = ASSABET_IRQ_GPIO_CF_IRQ;
 
-	return sa11xx_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
 /*
  * Release all resources.
  */
-static void assabet_pcmcia_hw_shutdown(struct sa1100_pcmcia_socket *skt)
+static void assabet_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt)
 {
-	sa11xx_free_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	soc_pcmcia_free_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
 static void
-assabet_pcmcia_socket_state(struct sa1100_pcmcia_socket *skt, struct pcmcia_state *state)
+assabet_pcmcia_socket_state(struct soc_pcmcia_socket *skt, struct pcmcia_state *state)
 {
 	unsigned long levels = GPLR;
 
@@ -55,7 +55,7 @@
 }
 
 static int
-assabet_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt, const socket_state_t *state)
+assabet_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state)
 {
 	unsigned int mask;
 
@@ -93,22 +93,22 @@
  * be called at initialisation, power management event, or
  * pcmcia event.
  */
-static void assabet_pcmcia_socket_init(struct sa1100_pcmcia_socket *skt)
+static void assabet_pcmcia_socket_init(struct soc_pcmcia_socket *skt)
 {
 	/*
 	 * Enable CF bus
 	 */
 	ASSABET_BCR_clear(ASSABET_BCR_CF_BUS_OFF);
 
-	sa11xx_enable_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	soc_pcmcia_enable_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
 /*
  * Disable card status IRQs on suspend.
  */
-static void assabet_pcmcia_socket_suspend(struct sa1100_pcmcia_socket *skt)
+static void assabet_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt)
 {
-	sa11xx_disable_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	soc_pcmcia_disable_irqs(skt, irqs, ARRAY_SIZE(irqs));
 
 	/*
 	 * Tristate the CF bus signals.  Also assert CF
diff -Nru a/drivers/pcmcia/sa1100_badge4.c b/drivers/pcmcia/sa1100_badge4.c
--- a/drivers/pcmcia/sa1100_badge4.c	Sun May 16 01:18:34 2004
+++ b/drivers/pcmcia/sa1100_badge4.c	Sun May 16 01:18:34 2004
@@ -75,7 +75,7 @@
 }
 
 static int
-badge4_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt, const socket_state_t *state)
+badge4_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state)
 {
 	int ret;
 
diff -Nru a/drivers/pcmcia/sa1100_cerf.c b/drivers/pcmcia/sa1100_cerf.c
--- a/drivers/pcmcia/sa1100_cerf.c	Sun May 16 01:18:36 2004
+++ b/drivers/pcmcia/sa1100_cerf.c	Sun May 16 01:18:36 2004
@@ -27,20 +27,20 @@
 	{ CERF_SOCKET, CERF_IRQ_GPIO_CF_BVD1, "CF_BVD1" }
 };
 
-static int cerf_pcmcia_hw_init(struct sa1100_pcmcia_socket *skt)
+static int cerf_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
 {
 	skt->irq = CERF_IRQ_GPIO_CF_IRQ;
 
-	return sa11xx_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
-static void cerf_pcmcia_hw_shutdown(struct sa1100_pcmcia_socket *skt)
+static void cerf_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt)
 {
-	sa11xx_free_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	soc_pcmcia_free_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
 static void
-cerf_pcmcia_socket_state(struct sa1100_pcmcia_socket *skt, struct pcmcia_state *state)
+cerf_pcmcia_socket_state(struct soc_pcmcia_socket *skt, struct pcmcia_state *state)
 {
 	unsigned long levels = GPLR;
 
@@ -54,7 +54,7 @@
 }
 
 static int
-cerf_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt,
+cerf_pcmcia_configure_socket(struct soc_pcmcia_socket *skt,
 			     const socket_state_t *state)
 {
 	switch (state->Vcc) {
@@ -78,14 +78,14 @@
 	return 0;
 }
 
-static void cerf_pcmcia_socket_init(struct sa1100_pcmcia_socket *skt)
+static void cerf_pcmcia_socket_init(struct soc_pcmcia_socket *skt)
 {
-	sa11xx_enable_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	soc_pcmcia_enable_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
-static void cerf_pcmcia_socket_suspend(struct sa1100_pcmcia_socket *skt)
+static void cerf_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt)
 {
-	sa11xx_disable_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	soc_pcmcia_disable_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
 static struct pcmcia_low_level cerf_pcmcia_ops = { 
diff -Nru a/drivers/pcmcia/sa1100_flexanet.c b/drivers/pcmcia/sa1100_flexanet.c
--- a/drivers/pcmcia/sa1100_flexanet.c	Sun May 16 01:18:35 2004
+++ b/drivers/pcmcia/sa1100_flexanet.c	Sun May 16 01:18:35 2004
@@ -28,20 +28,20 @@
  *
  * Called by sa1100_pcmcia_driver_init on startup.
  */
-static int flexanet_pcmcia_hw_init(struct sa1100_pcmcia_socket *skt)
+static int flexanet_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
 {
 	skt->irq = skt->nr ? IRQ_GPIO_CF2_IRQ : IRQ_GPIO_CF1_IRQ;
 
-	return sa11xx_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
 
 /*
  * Socket shutdown
  */
-static void flexanet_pcmcia_hw_shutdown(struct sa1100_pcmcia_socket *skt)
+static void flexanet_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt)
 {
-	sa11xx_free_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	soc_pcmcia_free_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
 
@@ -52,7 +52,7 @@
  *
  */
 static void
-flexanet_pcmcia_socket_state(struct sa1100_pcmcia_socket *skt,
+flexanet_pcmcia_socket_state(struct soc_pcmcia_socket *skt,
 			     struct pcmcia_state *state)
 {
 	unsigned long levels = GPLR; /* Sense the GPIOs, asynchronously */
@@ -85,7 +85,7 @@
  *
  */
 static int
-flexanet_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt,
+flexanet_pcmcia_configure_socket(struct soc_pcmcia_socket *skt,
 				 const socket_state_t *state)
 {
 	unsigned long value, flags, mask;
@@ -133,14 +133,14 @@
 	return 0;
 }
 
-static void flexanet_pcmcia_socket_init(struct sa1100_pcmcia_socket *skt)
+static void flexanet_pcmcia_socket_init(struct soc_pcmcia_socket *skt)
 {
-	sa11xx_enable_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	soc_pcmcia_enable_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
-static void flexanet_pcmcia_socket_suspend(struct sa1100_pcmcia_socket *skt)
+static void flexanet_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt)
 {
-	sa11xx_disable_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	soc_pcmcia_disable_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
 /*
diff -Nru a/drivers/pcmcia/sa1100_freebird.c b/drivers/pcmcia/sa1100_freebird.c
--- a/drivers/pcmcia/sa1100_freebird.c	Sun May 16 01:18:33 2004
+++ b/drivers/pcmcia/sa1100_freebird.c	Sun May 16 01:18:33 2004
@@ -20,7 +20,7 @@
 	{ 0, IRQ_GPIO_FREEBIRD_CF_BVD, "CF_BVD1" },
 };
 
-static int freebird_pcmcia_init(struct sa1100_pcmcia_socket *skt)
+static int freebird_pcmcia_init(struct soc_pcmcia_socket *skt)
 {
 	/* Enable Linkup CF card */
 	LINKUP_PRC = 0xc0;
@@ -35,12 +35,12 @@
 
 	skt->irq = IRQ_GPIO_FREEBIRD_CF_IRQ;
 
-	return sa11xx_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
-static void freebird_pcmcia_shutdown(struct sa1100_pcmcia_socket *skt)
+static void freebird_pcmcia_shutdown(struct soc_pcmcia_socket *skt)
 {
-	sa11xx_free_irqs(skt, irqs, ARRAY_SIZE(irqs);
+	soc_pcmcia_free_irqs(skt, irqs, ARRAY_SIZE(irqs);
 
 	/* Disable CF card */
 	LINKUP_PRC = 0x40;  /* SSP=1   SOE=0 */
@@ -48,7 +48,7 @@
 }
 
 static void
-freebird_pcmcia_socket_state(struct sa1100_pcmcia_socket *skt, struct pcmcia_state *state)
+freebird_pcmcia_socket_state(struct soc_pcmcia_socket *skt, struct pcmcia_state *state)
 {
 	unsigned long levels = LINKUP_PRS;
 //	printk("LINKUP_PRS=%x\n",levels);
@@ -63,7 +63,7 @@
 }
 
 static int
-freebird_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt,
+freebird_pcmcia_configure_socket(struct soc_pcmcia_socket *skt,
 				 socket_state_t *state)
 {
 	unsigned long value, flags;
@@ -103,14 +103,14 @@
 	return 0;
 }
 
-static void freebird_pcmcia_socket_init(struct sa1100_pcmcia_socket *skt)
+static void freebird_pcmcia_socket_init(struct soc_pcmcia_socket *skt)
 {
-	sa11xx_disable_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	soc_pcmcia_disable_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
-static void freebird_pcmcia_socket_suspend(struct sa1100_pcmcia_socket *skt)
+static void freebird_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt)
 {
-	sa11xx_enable_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	soc_pcmcia_enable_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
 static struct pcmcia_low_level freebird_pcmcia_ops = {
diff -Nru a/drivers/pcmcia/sa1100_generic.c b/drivers/pcmcia/sa1100_generic.c
--- a/drivers/pcmcia/sa1100_generic.c	Sun May 16 01:18:35 2004
+++ b/drivers/pcmcia/sa1100_generic.c	Sun May 16 01:18:35 2004
@@ -43,7 +43,7 @@
 #include <pcmcia/cs.h>
 #include <pcmcia/ss.h>
 
-#include "sa1100.h"
+#include "sa1100_generic.h"
 
 static int (*sa11x0_pcmcia_hw_init[])(struct device *dev) = {
 #ifdef CONFIG_SA1100_ASSABET
@@ -118,7 +118,7 @@
 
 static struct device_driver sa11x0_pcmcia_driver = {
 	.probe		= sa11x0_drv_pcmcia_probe,
-	.remove		= sa11xx_drv_pcmcia_remove,
+	.remove		= soc_common_drv_pcmcia_remove,
 	.name		= "sa11x0-pcmcia",
 	.bus		= &platform_bus_type,
 	.suspend 	= sa11x0_drv_pcmcia_suspend,
diff -Nru a/drivers/pcmcia/sa1100_generic.h b/drivers/pcmcia/sa1100_generic.h
--- a/drivers/pcmcia/sa1100_generic.h	Sun May 16 01:18:35 2004
+++ b/drivers/pcmcia/sa1100_generic.h	Sun May 16 01:18:35 2004
@@ -1,4 +1,5 @@
-#include "sa11xx_core.h"
+#include "soc_common.h"
+#include "sa11xx_base.h"
 
 /*
  * Declaration for all machine specific init/exit functions.
diff -Nru a/drivers/pcmcia/sa1100_graphicsclient.c b/drivers/pcmcia/sa1100_graphicsclient.c
--- a/drivers/pcmcia/sa1100_graphicsclient.c	Sun May 16 01:18:33 2004
+++ b/drivers/pcmcia/sa1100_graphicsclient.c	Sun May 16 01:18:33 2004
@@ -38,7 +38,7 @@
 	{ 0, S0_CD_IRQ, "PCMCIA 0 CD" },
 };
 
-static int gcplus_pcmcia_init(struct sa1100_pcmcia_socket *skt)
+static int gcplus_pcmcia_init(struct soc_pcmcia_socket *skt)
 {
 	// Reset PCMCIA
 	// Reset Timing for CPLD(U2) version 8001E or later
@@ -54,10 +54,10 @@
 	skt->irq = S0_STS_IRQ;
 
 	/* Register interrupts */
-	return sa11xx_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
-static void gcplus_pcmcia_hw_shutdown(struct sa1100_pcmcia_socket *skt)
+static void gcplus_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt)
 {
 	/* disable IRQs */
 	free_irq(S0_CD_IRQ, skt);
@@ -68,7 +68,7 @@
 }
 
 static void
-gcplus_pcmcia_socket_state(struct sa1100_pcmcia_socket *skt, struct pcmcia_state *state)
+gcplus_pcmcia_socket_state(struct soc_pcmcia_socket *skt, struct pcmcia_state *state)
 {
 	unsigned long levels = *PCMCIA_Status;
 
@@ -82,7 +82,7 @@
 }
 
 static int
-gcplus_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt,
+gcplus_pcmcia_configure_socket(struct soc_pcmcia_socket *skt,
 			       const socket_state_t *state)
 {
 	unsigned long flags;
@@ -125,11 +125,11 @@
 	return 0;
 }
 
-static void gcplus_pcmcia_socket_init(struct sa1100_pcmcia_socket *skt)
+static void gcplus_pcmcia_socket_init(struct soc_pcmcia_socket *skt)
 {
 }
 
-static void gcplus_pcmcia_socket_suspend(struct sa1100_pcmcia_socket *skt)
+static void gcplus_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt)
 {
 }
 
diff -Nru a/drivers/pcmcia/sa1100_graphicsmaster.c b/drivers/pcmcia/sa1100_graphicsmaster.c
--- a/drivers/pcmcia/sa1100_graphicsmaster.c	Sun May 16 01:18:36 2004
+++ b/drivers/pcmcia/sa1100_graphicsmaster.c	Sun May 16 01:18:36 2004
@@ -19,7 +19,7 @@
 
 #include "sa1111_generic.h"
 
-static int graphicsmaster_pcmcia_hw_init(struct sa1100_pcmcia_socket *skt)
+static int graphicsmaster_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
 {
   int return_val=0;
 
@@ -36,7 +36,7 @@
 }
 
 static int
-graphicsmaster_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt,
+graphicsmaster_pcmcia_configure_socket(struct soc_pcmcia_socket *skt,
 				       const socket_state_t *state)
 {
 	unsigned int pa_dwr_mask, pa_dwr_set;
diff -Nru a/drivers/pcmcia/sa1100_h3600.c b/drivers/pcmcia/sa1100_h3600.c
--- a/drivers/pcmcia/sa1100_h3600.c	Sun May 16 01:18:36 2004
+++ b/drivers/pcmcia/sa1100_h3600.c	Sun May 16 01:18:36 2004
@@ -23,18 +23,18 @@
 	{ 1, IRQ_GPIO_H3600_PCMCIA_CD1, "PCMCIA CD1" }
 };
 
-static int h3600_pcmcia_hw_init(struct sa1100_pcmcia_socket *skt)
+static int h3600_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
 {
 	skt->irq = skt->nr ? IRQ_GPIO_H3600_PCMCIA_IRQ1
 			   : IRQ_GPIO_H3600_PCMCIA_IRQ0;
 
 
-	return sa11xx_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
-static void h3600_pcmcia_hw_shutdown(struct sa1100_pcmcia_socket *skt)
+static void h3600_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt)
 {
-	sa11xx_free_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	soc_pcmcia_free_irqs(skt, irqs, ARRAY_SIZE(irqs));
   
 	/* Disable CF bus: */
 	clr_h3600_egpio(IPAQ_EGPIO_OPT_NVRAM_ON);
@@ -43,7 +43,7 @@
 }
 
 static void
-h3600_pcmcia_socket_state(struct sa1100_pcmcia_socket *skt, struct pcmcia_state *state)
+h3600_pcmcia_socket_state(struct soc_pcmcia_socket *skt, struct pcmcia_state *state)
 {
 	unsigned long levels = GPLR;
 
@@ -71,7 +71,7 @@
 }
 
 static int
-h3600_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt, const socket_state_t *state)
+h3600_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state)
 {
 	if (state->Vcc != 0 && state->Vcc != 33 && state->Vcc != 50) {
 		printk(KERN_ERR "h3600_pcmcia: unrecognized Vcc %u.%uV\n",
@@ -89,7 +89,7 @@
 	return 0;
 }
 
-static void h3600_pcmcia_socket_init(struct sa1100_pcmcia_socket *skt)
+static void h3600_pcmcia_socket_init(struct soc_pcmcia_socket *skt)
 {
 	/* Enable CF bus: */
 	set_h3600_egpio(IPAQ_EGPIO_OPT_NVRAM_ON);
@@ -99,12 +99,12 @@
 	set_current_state(TASK_UNINTERRUPTIBLE);
 	schedule_timeout(10*HZ / 1000);
 
-	sa11xx_enable_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	soc_pcmcia_enable_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
-static void h3600_pcmcia_socket_suspend(struct sa1100_pcmcia_socket *skt)
+static void h3600_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt)
 {
-	sa11xx_disable_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	soc_pcmcia_disable_irqs(skt, irqs, ARRAY_SIZE(irqs));
 
 	/*
 	 * FIXME:  This doesn't fit well.  We don't have the mechanism in
diff -Nru a/drivers/pcmcia/sa1100_jornada720.c b/drivers/pcmcia/sa1100_jornada720.c
--- a/drivers/pcmcia/sa1100_jornada720.c	Sun May 16 01:18:34 2004
+++ b/drivers/pcmcia/sa1100_jornada720.c	Sun May 16 01:18:34 2004
@@ -23,7 +23,7 @@
 #warning *** Does SOCKET1_3V actually do anything?
 #define SOCKET1_3V	GPIO_GPIO3
 
-static int jornada720_pcmcia_hw_init(struct sa1100_pcmcia_socket *skt)
+static int jornada720_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
 {
   /*
    * What is all this crap for?
@@ -49,7 +49,7 @@
 }
 
 static int
-jornada720_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt, const socket_state_t *state)
+jornada720_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state)
 {
   unsigned int pa_dwr_mask, pa_dwr_set;
   int ret;
diff -Nru a/drivers/pcmcia/sa1100_neponset.c b/drivers/pcmcia/sa1100_neponset.c
--- a/drivers/pcmcia/sa1100_neponset.c	Sun May 16 01:18:36 2004
+++ b/drivers/pcmcia/sa1100_neponset.c	Sun May 16 01:18:36 2004
@@ -42,7 +42,7 @@
  */
 
 static int
-neponset_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt, const socket_state_t *state)
+neponset_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state)
 {
 	unsigned int ncr_mask, ncr_set, pa_dwr_mask, pa_dwr_set;
 	int ret;
@@ -106,7 +106,7 @@
 	return 0;
 }
 
-static void neponset_pcmcia_socket_init(struct sa1100_pcmcia_socket *skt)
+static void neponset_pcmcia_socket_init(struct soc_pcmcia_socket *skt)
 {
 	if (skt->nr == 0)
 		NCR_0 &= ~(NCR_A0VPP | NCR_A1VPP);
diff -Nru a/drivers/pcmcia/sa1100_pangolin.c b/drivers/pcmcia/sa1100_pangolin.c
--- a/drivers/pcmcia/sa1100_pangolin.c	Sun May 16 01:18:33 2004
+++ b/drivers/pcmcia/sa1100_pangolin.c	Sun May 16 01:18:33 2004
@@ -26,7 +26,7 @@
 	{ PANGOLIN_SOCK, IRQ_PCMCIA_CD, "PCMCIA CD" },
 };
 
-static int pangolin_pcmcia_hw_init(struct sa1100_pcmcia_socket *skt)
+static int pangolin_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
 {
 	int res;
 
@@ -37,12 +37,12 @@
 
 	skt->irq = IRQ_PCMCIA_IRQ;
 
-	return sa11xx_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
-static void pangolin_pcmcia_hw_shutdown(struct sa1100_pcmcia_socket *skt)
+static void pangolin_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt)
 {
-	sa11xx_free_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	soc_pcmcia_free_irqs(skt, irqs, ARRAY_SIZE(irqs));
 
 #ifndef CONFIG_SA1100_PANGOLIN_PCMCIA_IDE
 	/* Disable PCMCIA bus: */
@@ -51,7 +51,7 @@
 }
 
 static void
-pangolin_pcmcia_socket_state(struct sa1100_pcmcia_socket *skt,
+pangolin_pcmcia_socket_state(struct soc_pcmcia_socket *skt,
 			     struct pcmcia_state *state)
 {
 	unsigned long levels = GPLR;
@@ -66,7 +66,7 @@
 }
 
 static int
-pangolin_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt,
+pangolin_pcmcia_configure_socket(struct soc_pcmcia_socket *skt,
 				 const socket_state_t *state)
 {
 	unsigned long value, flags;
@@ -115,14 +115,14 @@
 	return 0;
 }
 
-static void pangolin_pcmcia_socket_init(struct sa1100_pcmcia_socket *skt)
+static void pangolin_pcmcia_socket_init(struct soc_pcmcia_socket *skt)
 {
-	sa11xx_enable_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	soc_pcmcia_enable_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
-static void pangolin_pcmcia_socket_suspend(struct sa1100_pcmcia_socket *skt)
+static void pangolin_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt)
 {
-	sa11xx_disable_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	soc_pcmcia_disable_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
 static struct pcmcia_low_level pangolin_pcmcia_ops = { 
diff -Nru a/drivers/pcmcia/sa1100_pfs168.c b/drivers/pcmcia/sa1100_pfs168.c
--- a/drivers/pcmcia/sa1100_pfs168.c	Sun May 16 01:18:34 2004
+++ b/drivers/pcmcia/sa1100_pfs168.c	Sun May 16 01:18:34 2004
@@ -18,7 +18,7 @@
 
 #include "sa1111_generic.h"
 
-static int pfs168_pcmcia_init(struct sa1100_pcmcia_socket *skt)
+static int pfs168_pcmcia_init(struct soc_pcmcia_socket *skt)
 {
   /* TPS2211 to standby mode: */
   PA_DWR &= ~(GPIO_GPIO0 | GPIO_GPIO1 | GPIO_GPIO2 | GPIO_GPIO3);
@@ -30,7 +30,7 @@
 }
 
 static int
-pfs168_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt,
+pfs168_pcmcia_configure_socket(struct soc_pcmcia_socket *skt,
 			       const socket_state_t *state)
 {
   unsigned int pa_dwr_mask = 0, pa_dwr_set = 0;
diff -Nru a/drivers/pcmcia/sa1100_shannon.c b/drivers/pcmcia/sa1100_shannon.c
--- a/drivers/pcmcia/sa1100_shannon.c	Sun May 16 01:18:36 2004
+++ b/drivers/pcmcia/sa1100_shannon.c	Sun May 16 01:18:36 2004
@@ -21,7 +21,7 @@
 	{ 1, SHANNON_IRQ_GPIO_EJECT_1, "PCMCIA_CD_1" },
 };
 
-static int shannon_pcmcia_hw_init(struct sa1100_pcmcia_socket *skt)
+static int shannon_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
 {
 	/* All those are inputs */
 	GPDR &= ~(SHANNON_GPIO_EJECT_0 | SHANNON_GPIO_EJECT_1 | 
@@ -31,16 +31,16 @@
 
 	skt->irq = skt->nr ? SHANNON_IRQ_GPIO_RDY_1 : SHANNON_IRQ_GPIO_RDY_0;
 
-	return sa11xx_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
-static void shannon_pcmcia_hw_shutdown(struct sa1100_pcmcia_socket *skt)
+static void shannon_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt)
 {
-	sa11xx_free_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	soc_pcmcia_free_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
 static void
-shannon_pcmcia_socket_state(struct sa1100_pcmcia_socket *skt,
+shannon_pcmcia_socket_state(struct soc_pcmcia_socket *skt,
 			    struct pcmcia_state *state)
 {
 	unsigned long levels = GPLR;
@@ -69,7 +69,7 @@
 }
 
 static int
-shannon_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt,
+shannon_pcmcia_configure_socket(struct soc_pcmcia_socket *skt,
 				const socket_state_t *state)
 {
 	switch (state->Vcc) {
@@ -93,14 +93,14 @@
 	return 0;
 }
 
-static void shannon_pcmcia_socket_init(struct sa1100_pcmcia_socket *skt)
+static void shannon_pcmcia_socket_init(struct soc_pcmcia_socket *skt)
 {
-	sa11xx_enable_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	soc_pcmcia_enable_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
-static void shannon_pcmcia_socket_suspend(struct sa1100_pcmcia_socket *skt)
+static void shannon_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt)
 {
-	sa11xx_disable_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	soc_pcmcia_disable_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
 static struct pcmcia_low_level shannon_pcmcia_ops = {
diff -Nru a/drivers/pcmcia/sa1100_simpad.c b/drivers/pcmcia/sa1100_simpad.c
--- a/drivers/pcmcia/sa1100_simpad.c	Sun May 16 01:18:36 2004
+++ b/drivers/pcmcia/sa1100_simpad.c	Sun May 16 01:18:36 2004
@@ -24,19 +24,19 @@
 	{ 1, IRQ_GPIO_CF_CD, "CF_CD" },
 };
 
-static int simpad_pcmcia_hw_init(struct sa1100_pcmcia_socket *skt)
+static int simpad_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
 {
 
 	clear_cs3_bit(VCC_3V_EN|VCC_5V_EN|EN0|EN1);
 
 	skt->irq = IRQ_GPIO_CF_IRQ;
 
-	return sa11xx_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
-static void simpad_pcmcia_hw_shutdown(struct sa1100_pcmcia_socket *skt)
+static void simpad_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt)
 {
-	sa11xx_free_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	soc_pcmcia_free_irqs(skt, irqs, ARRAY_SIZE(irqs));
 
 	/* Disable CF bus: */
 	//set_cs3_bit(PCMCIA_BUFF_DIS);
@@ -44,7 +44,7 @@
 }
 
 static void
-simpad_pcmcia_socket_state(struct sa1100_pcmcia_socket *skt,
+simpad_pcmcia_socket_state(struct soc_pcmcia_socket *skt,
 			   struct pcmcia_state *state)
 {
 	unsigned long levels = GPLR;
@@ -66,7 +66,7 @@
 }
 
 static int
-simpad_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt,
+simpad_pcmcia_configure_socket(struct soc_pcmcia_socket *skt,
 			       const socket_state_t *state)
 {
 	unsigned long flags;
@@ -103,14 +103,14 @@
 	return 0;
 }
 
-static void simpad_pcmcia_socket_init(struct sa1100_pcmcia_socket *skt)
+static void simpad_pcmcia_socket_init(struct soc_pcmcia_socket *skt)
 {
-	sa11xx_enable_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	soc_pcmcia_enable_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
-static void simpad_pcmcia_socket_suspend(struct sa1100_pcmcia_socket *skt)
+static void simpad_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt)
 {
-	sa11xx_disable_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	soc_pcmcia_disable_irqs(skt, irqs, ARRAY_SIZE(irqs));
 	set_cs3_bit(PCMCIA_RESET);
 }
 
diff -Nru a/drivers/pcmcia/sa1100_stork.c b/drivers/pcmcia/sa1100_stork.c
--- a/drivers/pcmcia/sa1100_stork.c	Sun May 16 01:18:35 2004
+++ b/drivers/pcmcia/sa1100_stork.c	Sun May 16 01:18:35 2004
@@ -36,24 +36,24 @@
 	{ 1, IRQ_GPIO_STORK_PCMCIA_B_CARD_DETECT, "PCMCIA_CD1" },
 };
 
-static int stork_pcmcia_hw_init(struct sa1100_pcmcia_socket *skt)
+static int stork_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
 {
 	printk("in stork_pcmcia_init\n");
 
 	skt->irq = skt->nr ? IRQ_GPIO_STORK_PCMCIA_B_RDY
 			   : IRQ_GPIO_STORK_PCMCIA_A_RDY;
 
-	return sa11xx_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
-static void stork_pcmcia_hw_shutdown(struct sa1100_pcmcia_socket *skt)
+static void stork_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt)
 {
 	int i;
 
         printk("%s\n", __FUNCTION__);
 
         /* disable IRQs */
-        sa11xx_free_irqs(skt, irqs, ARRAY_SIZE(irqs));
+        soc_pcmcia_free_irqs(skt, irqs, ARRAY_SIZE(irqs));
   
         /* Disable CF bus: */
         storkClearLatchA(STORK_PCMCIA_PULL_UPS_POWER_ON);
@@ -62,7 +62,7 @@
 }
 
 static void
-stork_pcmcia_socket_state(struct sa1100_pcmcia_socket *skt,
+stork_pcmcia_socket_state(struct soc_pcmcia_socket *skt,
 			  struct pcmcia_state *state)
 {
         unsigned long levels = GPLR;
@@ -95,7 +95,7 @@
 }
 
 static int
-stork_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt,
+stork_pcmcia_configure_socket(struct soc_pcmcia_socket *skt,
 			      const socket_state_t *state)
 {
 	unsigned long flags;
@@ -156,16 +156,16 @@
         return 0;
 }
 
-static void stork_pcmcia_socket_init(struct sa1100_pcmcia_socket *skt)
+static void stork_pcmcia_socket_init(struct soc_pcmcia_socket *skt)
 {
         storkSetLatchA(STORK_PCMCIA_PULL_UPS_POWER_ON);
 
-        sa11xx_enable_irqs(skt, irqs, ARRAY_SIZE(irqs));
+        soc_pcmcia_enable_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
-static void stork_pcmcia_socket_suspend(struct sa1100_pcmcia_socket *skt)
+static void stork_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt)
 {
-	sa11xx_disable_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	soc_pcmcia_disable_irqs(skt, irqs, ARRAY_SIZE(irqs));
 
 	/*
 	 * Hack!
diff -Nru a/drivers/pcmcia/sa1100_system3.c b/drivers/pcmcia/sa1100_system3.c
--- a/drivers/pcmcia/sa1100_system3.c	Sun May 16 01:18:37 2004
+++ b/drivers/pcmcia/sa1100_system3.c	Sun May 16 01:18:37 2004
@@ -47,7 +47,7 @@
 #	define DPRINTK( x, args... )	/* nix */
 #endif
 
-static int system3_pcmcia_hw_init(struct sa1100_pcmcia_socket *skt)
+static int system3_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
 {
 	skt->irq = skt->nr ? IRQ_S1_READY_NINT : IRQ_S0_READY_NINT;
 
@@ -55,12 +55,12 @@
 	return 0;
 }
 
-void system3_pcmcia_hw_shutdown(struct sa1100_pcmcia_socket *skt)
+void system3_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt)
 {
 }
 
 static void
-system3_pcmcia_socket_state(struct sa1100_pcmcia_socket *skt, struct pcmcia_state *state)
+system3_pcmcia_socket_state(struct soc_pcmcia_socket *skt, struct pcmcia_state *state)
 {
 	unsigned long status = PCSR;
 
diff -Nru a/drivers/pcmcia/sa1100_trizeps.c b/drivers/pcmcia/sa1100_trizeps.c
--- a/drivers/pcmcia/sa1100_trizeps.c	Sun May 16 01:18:35 2004
+++ b/drivers/pcmcia/sa1100_trizeps.c	Sun May 16 01:18:35 2004
@@ -32,7 +32,7 @@
  *
  *
  ******************************************************/
-static int trizeps_pcmcia_init(struct sa1100_pcmcia_socket *skt)
+static int trizeps_pcmcia_init(struct soc_pcmcia_socket *skt)
 {
 	skt->irq = TRIZEPS_IRQ_PCMCIA_IRQ0;
 
@@ -43,18 +43,18 @@
 	GPDR &= ~((GPIO_GPIO(TRIZEPS_GPIO_PCMCIA_CD0))
 		    | (GPIO_GPIO(TRIZEPS_GPIO_PCMCIA_IRQ0)));
 
-	return sa11xx_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
 /**
  *
  *
  ******************************************************/
-static void trizeps_pcmcia_shutdown(struct sa1100_pcmcia_socket *skt)
+static void trizeps_pcmcia_shutdown(struct soc_pcmcia_socket *skt)
 {
 	printk(">>>>>PCMCIA TRIZEPS shutdown\n");
 
-	sa11xx_free_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	soc_pcmcia_free_irqs(skt, irqs, ARRAY_SIZE(irqs));
 
 	/* Disable CF bus: */
 	TRIZEPS_BCR_set(TRIZEPS_BCR1, TRIZEPS_nPCM_ENA_REG);
@@ -64,7 +64,7 @@
  *
  ******************************************************/
 static void
-trizeps_pcmcia_socket_state(struct sa1100_pcmcia_socket *skt,
+trizeps_pcmcia_socket_state(struct soc_pcmcia_socket *skt,
 			    struct pcmcia_state *state_array)
 {
 	unsigned long levels = GPLR;
@@ -83,7 +83,7 @@
  *
  ******************************************************/
 static int
-trizeps_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt,
+trizeps_pcmcia_configure_socket(struct soc_pcmcia_socket *skt,
 				const socket_state_t *state)
 {
 	unsigned long flags;
@@ -129,14 +129,14 @@
 	return 0;
 }
 
-static void trizeps_pcmcia_socket_init(struct sa1100_pcmcia_socket *skt)
+static void trizeps_pcmcia_socket_init(struct soc_pcmcia_socket *skt)
 {
-	sa11xx_enable_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	soc_pcmcia_enable_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
-static void trizeps_pcmcia_socket_suspend(struct sa1100_pcmcia_socket *skt)
+static void trizeps_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt)
 {
-	sa11xx_disable_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	soc_pcmcia_disable_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
 /**
diff -Nru a/drivers/pcmcia/sa1100_xp860.c b/drivers/pcmcia/sa1100_xp860.c
--- a/drivers/pcmcia/sa1100_xp860.c	Sun May 16 01:18:34 2004
+++ b/drivers/pcmcia/sa1100_xp860.c	Sun May 16 01:18:34 2004
@@ -19,7 +19,7 @@
 #define NCR_A0VPP	(1<<16)
 #define NCR_A1VPP	(1<<17)
 
-static int xp860_pcmcia_hw_init(struct sa1100_pcmcia_socket *skt)
+static int xp860_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
 {
   /* Set GPIO_A<3:0> to be outputs for PCMCIA/CF power controller: */
   PA_DDR &= ~(GPIO_GPIO0 | GPIO_GPIO1 | GPIO_GPIO2 | GPIO_GPIO3);
@@ -42,7 +42,7 @@
 }
 
 static int
-xp860_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt, const socket_state_t *state)
+xp860_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state)
 {
   unsigned int gpio_mask, pa_dwr_mask;
   unsigned int gpio_set, pa_dwr_set;
diff -Nru a/drivers/pcmcia/sa1100_yopy.c b/drivers/pcmcia/sa1100_yopy.c
--- a/drivers/pcmcia/sa1100_yopy.c	Sun May 16 01:18:36 2004
+++ b/drivers/pcmcia/sa1100_yopy.c	Sun May 16 01:18:36 2004
@@ -33,19 +33,19 @@
 	{ 0, IRQ_CF_BVD1, "CF_BVD1" },
 };
 
-static int yopy_pcmcia_hw_init(struct sa1100_pcmcia_socket *skt)
+static int yopy_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
 {
 	skt->irq = IRQ_CF_IREQ;
 
 	pcmcia_power(0);
 	pcmcia_reset(1);
 
-	return sa11xx_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
-static void yopy_pcmcia_hw_shutdown(struct sa1100_pcmcia_socket *skt)
+static void yopy_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt)
 {
-	sa11xx_free_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	soc_pcmcia_free_irqs(skt, irqs, ARRAY_SIZE(irqs));
 
 	/* Disable CF */
 	pcmcia_reset(1);
@@ -53,7 +53,7 @@
 }
 
 static void
-yopy_pcmcia_socket_state(struct sa1100_pcmcia_socket *skt,
+yopy_pcmcia_socket_state(struct soc_pcmcia_socket *skt,
 			 struct pcmcia_state_array *state)
 {
 	unsigned long levels = GPLR;
@@ -68,7 +68,7 @@
 }
 
 static int
-yopy_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt,
+yopy_pcmcia_configure_socket(struct soc_pcmcia_socket *skt,
 			     const socket_state_t *state)
 {
 	switch (state->Vcc) {
@@ -93,14 +93,14 @@
 	return 0;
 }
 
-static void yopy_pcmcia_socket_init(struct sa1100_pcmcia_socket *skt)
+static void yopy_pcmcia_socket_init(struct soc_pcmcia_socket *skt)
 {
-	sa11xx_enable_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	soc_pcmcia_enable_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
-static void yopy_pcmcia_socket_suspend(struct sa1100_pcmcia_socket *skt)
+static void yopy_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt)
 {
-	sa11xx_disable_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	soc_pcmcia_disable_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
 static struct pcmcia_low_level yopy_pcmcia_ops = {
diff -Nru a/drivers/pcmcia/sa1111_generic.c b/drivers/pcmcia/sa1111_generic.c
--- a/drivers/pcmcia/sa1111_generic.c	Sun May 16 01:18:34 2004
+++ b/drivers/pcmcia/sa1111_generic.c	Sun May 16 01:18:34 2004
@@ -29,20 +29,20 @@
 	{ 1, IRQ_S1_BVD1_STSCHG, "SA1111 CF BVD1"            },
 };
 
-int sa1111_pcmcia_hw_init(struct sa1100_pcmcia_socket *skt)
+int sa1111_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
 {
 	if (skt->irq == NO_IRQ)
 		skt->irq = skt->nr ? IRQ_S1_READY_NINT : IRQ_S0_READY_NINT;
 
-	return sa11xx_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
-void sa1111_pcmcia_hw_shutdown(struct sa1100_pcmcia_socket *skt)
+void sa1111_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt)
 {
-	sa11xx_free_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	soc_pcmcia_free_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
-void sa1111_pcmcia_socket_state(struct sa1100_pcmcia_socket *skt, struct pcmcia_state *state)
+void sa1111_pcmcia_socket_state(struct soc_pcmcia_socket *skt, struct pcmcia_state *state)
 {
 	struct sa1111_dev *sadev = SA1111_DEV(skt->dev);
 	unsigned long status = sa1111_readl(sadev->mapbase + SA1111_PCSR);
@@ -70,7 +70,7 @@
 	}
 }
 
-int sa1111_pcmcia_configure_socket(struct sa1100_pcmcia_socket *skt, const socket_state_t *state)
+int sa1111_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state)
 {
 	struct sa1111_dev *sadev = SA1111_DEV(skt->dev);
 	unsigned int pccr_skt_mask, pccr_set_mask, val;
@@ -110,14 +110,14 @@
 	return 0;
 }
 
-void sa1111_pcmcia_socket_init(struct sa1100_pcmcia_socket *skt)
+void sa1111_pcmcia_socket_init(struct soc_pcmcia_socket *skt)
 {
-	sa11xx_enable_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	soc_pcmcia_enable_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
-void sa1111_pcmcia_socket_suspend(struct sa1100_pcmcia_socket *skt)
+void sa1111_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt)
 {
-	sa11xx_disable_irqs(skt, irqs, ARRAY_SIZE(irqs));
+	soc_pcmcia_disable_irqs(skt, irqs, ARRAY_SIZE(irqs));
 }
 
 static int pcmcia_probe(struct sa1111_dev *dev)
@@ -148,6 +148,9 @@
 #ifdef CONFIG_SA1100_JORNADA720
 	pcmcia_jornada720_init(&dev->dev);
 #endif
+#ifdef CONFIG_ARCH_LUBBOCK
+	pcmcia_lubbock_init(&dev->dev);
+#endif
 #ifdef CONFIG_ASSABET_NEPONSET
 	pcmcia_neponset_init(dev);
 #endif
@@ -165,7 +168,7 @@
 
 static int __devexit pcmcia_remove(struct sa1111_dev *dev)
 {
-	sa11xx_drv_pcmcia_remove(&dev->dev);
+	soc_common_drv_pcmcia_remove(&dev->dev);
 	release_mem_region(dev->res.start, 512);
 	return 0;
 }
diff -Nru a/drivers/pcmcia/sa1111_generic.h b/drivers/pcmcia/sa1111_generic.h
--- a/drivers/pcmcia/sa1111_generic.h	Sun May 16 01:18:36 2004
+++ b/drivers/pcmcia/sa1111_generic.h	Sun May 16 01:18:36 2004
@@ -1,13 +1,15 @@
-#include "sa11xx_core.h"
+#include "soc_common.h"
+#include "sa11xx_base.h"
 
-extern int sa1111_pcmcia_hw_init(struct sa1100_pcmcia_socket *);
-extern void sa1111_pcmcia_hw_shutdown(struct sa1100_pcmcia_socket *);
-extern void sa1111_pcmcia_socket_state(struct sa1100_pcmcia_socket *, struct pcmcia_state *);
-extern int sa1111_pcmcia_configure_socket(struct sa1100_pcmcia_socket *, const socket_state_t *);
-extern void sa1111_pcmcia_socket_init(struct sa1100_pcmcia_socket *);
-extern void sa1111_pcmcia_socket_suspend(struct sa1100_pcmcia_socket *);
+extern int sa1111_pcmcia_hw_init(struct soc_pcmcia_socket *);
+extern void sa1111_pcmcia_hw_shutdown(struct soc_pcmcia_socket *);
+extern void sa1111_pcmcia_socket_state(struct soc_pcmcia_socket *, struct pcmcia_state *);
+extern int sa1111_pcmcia_configure_socket(struct soc_pcmcia_socket *, const socket_state_t *);
+extern void sa1111_pcmcia_socket_init(struct soc_pcmcia_socket *);
+extern void sa1111_pcmcia_socket_suspend(struct soc_pcmcia_socket *);
 
 extern int pcmcia_badge4_init(struct device *);
 extern int pcmcia_jornada720_init(struct device *);
+extern int pcmcia_lubbock_init(struct device *);
 extern int pcmcia_neponset_init(struct sa1111_dev *);
 
diff -Nru a/drivers/pcmcia/sa11xx_base.c b/drivers/pcmcia/sa11xx_base.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/drivers/pcmcia/sa11xx_base.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,257 @@
+/*======================================================================
+
+    Device driver for the PCMCIA control functionality of StrongARM
+    SA-1100 microprocessors.
+
+    The contents of this file are subject to the Mozilla Public
+    License Version 1.1 (the "License"); you may not use this file
+    except in compliance with the License. You may obtain a copy of
+    the License at http://www.mozilla.org/MPL/
+
+    Software distributed under the License is distributed on an "AS
+    IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+    implied. See the License for the specific language governing
+    rights and limitations under the License.
+
+    The initial developer of the original code is John G. Dorsey
+    <john+@cs.cmu.edu>.  Portions created by John G. Dorsey are
+    Copyright (C) 1999 John G. Dorsey.  All Rights Reserved.
+
+    Alternatively, the contents of this file may be used under the
+    terms of the GNU Public License version 2 (the "GPL"), in which
+    case the provisions of the GPL are applicable instead of the
+    above.  If you wish to allow the use of your version of this file
+    only under the terms of the GPL and not to allow others to use
+    your version of this file under the MPL, indicate your decision
+    by deleting the provisions above and replace them with the notice
+    and other provisions required by the GPL.  If you do not delete
+    the provisions above, a recipient may use your version of this
+    file under either the MPL or the GPL.
+
+======================================================================*/
+
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/config.h>
+#include <linux/cpufreq.h>
+#include <linux/ioport.h>
+#include <linux/kernel.h>
+#include <linux/notifier.h>
+#include <linux/spinlock.h>
+
+#include <asm/hardware.h>
+#include <asm/io.h>
+#include <asm/irq.h>
+#include <asm/system.h>
+
+#include "soc_common.h"
+#include "sa11xx_base.h"
+
+
+/*
+ * sa1100_pcmcia_default_mecr_timing
+ * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ *
+ * Calculate MECR clock wait states for given CPU clock
+ * speed and command wait state. This function can be over-
+ * written by a board specific version.
+ *
+ * The default is to simply calculate the BS values as specified in
+ * the INTEL SA1100 development manual
+ * "Expansion Memory (PCMCIA) Configuration Register (MECR)"
+ * that's section 10.2.5 in _my_ version of the manual ;)
+ */
+static unsigned int
+sa1100_pcmcia_default_mecr_timing(struct soc_pcmcia_socket *skt,
+				  unsigned int cpu_speed,
+				  unsigned int cmd_time)
+{
+	return sa1100_pcmcia_mecr_bs(cmd_time, cpu_speed);
+}
+
+static unsigned short
+calc_speed(unsigned short *spds, int num, unsigned short dflt)
+{
+	unsigned short speed = 0;
+	int i;
+
+	for (i = 0; i < num; i++)
+		if (speed < spds[i])
+			speed = spds[i];
+	if (speed == 0)
+		speed = dflt;
+
+	return speed;
+}
+
+/* sa1100_pcmcia_set_mecr()
+ * ^^^^^^^^^^^^^^^^^^^^^^^^
+ *
+ * set MECR value for socket <sock> based on this sockets
+ * io, mem and attribute space access speed.
+ * Call board specific BS value calculation to allow boards
+ * to tweak the BS values.
+ */
+static int
+sa1100_pcmcia_set_mecr(struct soc_pcmcia_socket *skt, unsigned int cpu_clock)
+{
+	u32 mecr, old_mecr;
+	unsigned long flags;
+	unsigned short speed;
+	unsigned int bs_io, bs_mem, bs_attr;
+
+	speed = calc_speed(skt->spd_io, MAX_IO_WIN, SOC_PCMCIA_IO_ACCESS);
+	bs_io = skt->ops->get_timing(skt, cpu_clock, speed);
+
+	speed = calc_speed(skt->spd_mem, MAX_WIN, SOC_PCMCIA_3V_MEM_ACCESS);
+	bs_mem = skt->ops->get_timing(skt, cpu_clock, speed);
+
+	speed = calc_speed(skt->spd_attr, MAX_WIN, SOC_PCMCIA_3V_MEM_ACCESS);
+	bs_attr = skt->ops->get_timing(skt, cpu_clock, speed);
+
+	local_irq_save(flags);
+
+	old_mecr = mecr = MECR;
+	MECR_FAST_SET(mecr, skt->nr, 0);
+	MECR_BSIO_SET(mecr, skt->nr, bs_io);
+	MECR_BSA_SET(mecr, skt->nr, bs_attr);
+	MECR_BSM_SET(mecr, skt->nr, bs_mem);
+	if (old_mecr != mecr)
+		MECR = mecr;
+
+	local_irq_restore(flags);
+
+	debug(skt, 2, "FAST %X  BSM %X  BSA %X  BSIO %X\n",
+	      MECR_FAST_GET(mecr, skt->nr),
+	      MECR_BSM_GET(mecr, skt->nr), MECR_BSA_GET(mecr, skt->nr),
+	      MECR_BSIO_GET(mecr, skt->nr));
+
+	return 0;
+}
+
+static int
+sa1100_pcmcia_set_timing(struct soc_pcmcia_socket *skt)
+{
+	return sa1100_pcmcia_set_mecr(skt, cpufreq_get(0));
+}
+
+static int
+sa1100_pcmcia_show_timing(struct soc_pcmcia_socket *skt, char *buf)
+{
+	unsigned int clock = cpufreq_get(0);
+	unsigned long mecr = MECR;
+	char *p = buf;
+
+	p+=sprintf(p, "I/O      : %u (%u)\n",
+		   calc_speed(skt->spd_io, MAX_IO_WIN, SOC_PCMCIA_IO_ACCESS),
+		   sa1100_pcmcia_cmd_time(clock, MECR_BSIO_GET(mecr, skt->nr)));
+
+	p+=sprintf(p, "attribute: %u (%u)\n",
+		   calc_speed(skt->spd_attr, MAX_WIN, SOC_PCMCIA_3V_MEM_ACCESS),
+		   sa1100_pcmcia_cmd_time(clock, MECR_BSA_GET(mecr, skt->nr)));
+
+	p+=sprintf(p, "common   : %u (%u)\n",
+		   calc_speed(skt->spd_mem, MAX_WIN, SOC_PCMCIA_3V_MEM_ACCESS),
+		   sa1100_pcmcia_cmd_time(clock, MECR_BSM_GET(mecr, skt->nr)));
+
+	return p - buf;
+}
+
+int sa11xx_drv_pcmcia_probe(struct device *dev, struct pcmcia_low_level *ops,
+			    int first, int nr)
+{
+	/*
+	 * set default MECR calculation if the board specific
+	 * code did not specify one...
+	 */
+	if (!ops->get_timing)
+		ops->get_timing = sa1100_pcmcia_default_mecr_timing;
+
+	/* Provide our SA11x0 specific timing routines. */
+	ops->set_timing  = sa1100_pcmcia_set_timing;
+	ops->show_timing = sa1100_pcmcia_show_timing;
+
+	return soc_common_drv_pcmcia_probe(dev, ops, first, nr);
+}
+EXPORT_SYMBOL(sa11xx_drv_pcmcia_probe);
+
+#ifdef CONFIG_CPU_FREQ
+
+/* sa1100_pcmcia_update_mecr()
+ * ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ * When sa1100_pcmcia_notifier() decides that a MECR adjustment (due
+ * to a core clock frequency change) is needed, this routine establishes
+ * new BS_xx values consistent with the clock speed `clock'.
+ */
+static void sa1100_pcmcia_update_mecr(unsigned int clock)
+{
+	struct soc_pcmcia_socket *skt;
+
+	down(&soc_pcmcia_sockets_lock);
+	list_for_each_entry(skt, &soc_pcmcia_sockets, node)
+		sa1100_pcmcia_set_mecr(skt, clock);
+	up(&soc_pcmcia_sockets_lock);
+}
+
+/* sa1100_pcmcia_notifier()
+ * ^^^^^^^^^^^^^^^^^^^^^^^^
+ * When changing the processor core clock frequency, it is necessary
+ * to adjust the MECR timings accordingly. We've recorded the timings
+ * requested by Card Services, so this is just a matter of finding
+ * out what our current speed is, and then recomputing the new MECR
+ * values.
+ *
+ * Returns: 0 on success, -1 on error
+ */
+static int
+sa1100_pcmcia_notifier(struct notifier_block *nb, unsigned long val,
+		       void *data)
+{
+	struct cpufreq_freqs *freqs = data;
+
+	switch (val) {
+	case CPUFREQ_PRECHANGE:
+		if (freqs->new > freqs->old)
+			sa1100_pcmcia_update_mecr(freqs->new);
+		break;
+
+	case CPUFREQ_POSTCHANGE:
+		if (freqs->new < freqs->old)
+			sa1100_pcmcia_update_mecr(freqs->new);
+		break;
+	}
+
+	return 0;
+}
+
+static struct notifier_block sa1100_pcmcia_notifier_block = {
+	.notifier_call	= sa1100_pcmcia_notifier
+};
+
+static int __init sa11xx_pcmcia_init(void)
+{
+	int ret;
+
+	printk(KERN_INFO "SA11xx PCMCIA\n");
+
+	ret = cpufreq_register_notifier(&sa1100_pcmcia_notifier_block,
+					CPUFREQ_TRANSITION_NOTIFIER);
+	if (ret < 0)
+		printk(KERN_ERR "Unable to register CPU frequency change "
+			"notifier (%d)\n", ret);
+
+	return ret;
+}
+module_init(sa11xx_pcmcia_init);
+
+static void __exit sa11xx_pcmcia_exit(void)
+{
+	cpufreq_unregister_notifier(&sa1100_pcmcia_notifier_block, CPUFREQ_TRANSITION_NOTIFIER);
+}
+
+module_exit(sa11xx_pcmcia_exit);
+#endif
+
+MODULE_AUTHOR("John Dorsey <john+@cs.cmu.edu>");
+MODULE_DESCRIPTION("Linux PCMCIA Card Services: SA-11xx core socket driver");
+MODULE_LICENSE("Dual MPL/GPL");
diff -Nru a/drivers/pcmcia/sa11xx_base.h b/drivers/pcmcia/sa11xx_base.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/drivers/pcmcia/sa11xx_base.h	Sun May 16 01:18:35 2004
@@ -0,0 +1,123 @@
+/*======================================================================
+
+    Device driver for the PCMCIA control functionality of StrongARM
+    SA-1100 microprocessors.
+
+    The contents of this file are subject to the Mozilla Public
+    License Version 1.1 (the "License"); you may not use this file
+    except in compliance with the License. You may obtain a copy of
+    the License at http://www.mozilla.org/MPL/
+
+    Software distributed under the License is distributed on an "AS
+    IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+    implied. See the License for the specific language governing
+    rights and limitations under the License.
+
+    The initial developer of the original code is John G. Dorsey
+    <john+@cs.cmu.edu>.  Portions created by John G. Dorsey are
+    Copyright (C) 1999 John G. Dorsey.  All Rights Reserved.
+
+    Alternatively, the contents of this file may be used under the
+    terms of the GNU Public License version 2 (the "GPL"), in which
+    case the provisions of the GPL are applicable instead of the
+    above.  If you wish to allow the use of your version of this file
+    only under the terms of the GPL and not to allow others to use
+    your version of this file under the MPL, indicate your decision
+    by deleting the provisions above and replace them with the notice
+    and other provisions required by the GPL.  If you do not delete
+    the provisions above, a recipient may use your version of this
+    file under either the MPL or the GPL.
+
+======================================================================*/
+
+#if !defined(_PCMCIA_SA1100_H)
+# define _PCMCIA_SA1100_H
+
+/* SA-1100 PCMCIA Memory and I/O timing
+ * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ * The SA-1110 Developer's Manual, section 10.2.5, says the following:
+ *
+ *  "To calculate the recommended BS_xx value for each address space:
+ *   divide the command width time (the greater of twIOWR and twIORD,
+ *   or the greater of twWE and twOE) by processor cycle time; divide
+ *   by 2; divide again by 3 (number of BCLK's per command assertion);
+ *   round up to the next whole number; and subtract 1."
+ */
+
+/* MECR: Expansion Memory Configuration Register
+ * (SA-1100 Developers Manual, p.10-13; SA-1110 Developers Manual, p.10-24)
+ *
+ * MECR layout is:
+ *
+ *   FAST1 BSM1<4:0> BSA1<4:0> BSIO1<4:0> FAST0 BSM0<4:0> BSA0<4:0> BSIO0<4:0>
+ *
+ * (This layout is actually true only for the SA-1110; the FASTn bits are
+ * reserved on the SA-1100.)
+ */
+
+#define MECR_SOCKET_0_SHIFT (0)
+#define MECR_SOCKET_1_SHIFT (16)
+
+#define MECR_BS_MASK        (0x1f)
+#define MECR_FAST_MODE_MASK (0x01)
+
+#define MECR_BSIO_SHIFT (0)
+#define MECR_BSA_SHIFT  (5)
+#define MECR_BSM_SHIFT  (10)
+#define MECR_FAST_SHIFT (15)
+
+#define MECR_SET(mecr, sock, shift, mask, bs) \
+((mecr)=((mecr)&~(((mask)<<(shift))<<\
+                  ((sock)==0?MECR_SOCKET_0_SHIFT:MECR_SOCKET_1_SHIFT)))|\
+        (((bs)<<(shift))<<((sock)==0?MECR_SOCKET_0_SHIFT:MECR_SOCKET_1_SHIFT)))
+
+#define MECR_GET(mecr, sock, shift, mask) \
+((((mecr)>>(((sock)==0)?MECR_SOCKET_0_SHIFT:MECR_SOCKET_1_SHIFT))>>\
+ (shift))&(mask))
+
+#define MECR_BSIO_SET(mecr, sock, bs) \
+MECR_SET((mecr), (sock), MECR_BSIO_SHIFT, MECR_BS_MASK, (bs))
+
+#define MECR_BSIO_GET(mecr, sock) \
+MECR_GET((mecr), (sock), MECR_BSIO_SHIFT, MECR_BS_MASK)
+
+#define MECR_BSA_SET(mecr, sock, bs) \
+MECR_SET((mecr), (sock), MECR_BSA_SHIFT, MECR_BS_MASK, (bs))
+
+#define MECR_BSA_GET(mecr, sock) \
+MECR_GET((mecr), (sock), MECR_BSA_SHIFT, MECR_BS_MASK)
+
+#define MECR_BSM_SET(mecr, sock, bs) \
+MECR_SET((mecr), (sock), MECR_BSM_SHIFT, MECR_BS_MASK, (bs))
+
+#define MECR_BSM_GET(mecr, sock) \
+MECR_GET((mecr), (sock), MECR_BSM_SHIFT, MECR_BS_MASK)
+
+#define MECR_FAST_SET(mecr, sock, fast) \
+MECR_SET((mecr), (sock), MECR_FAST_SHIFT, MECR_FAST_MODE_MASK, (fast))
+
+#define MECR_FAST_GET(mecr, sock) \
+MECR_GET((mecr), (sock), MECR_FAST_SHIFT, MECR_FAST_MODE_MASK)
+
+
+/* This function implements the BS value calculation for setting the MECR
+ * using integer arithmetic:
+ */
+static inline unsigned int sa1100_pcmcia_mecr_bs(unsigned int pcmcia_cycle_ns,
+						 unsigned int cpu_clock_khz){
+  unsigned int t = ((pcmcia_cycle_ns * cpu_clock_khz) / 6) - 1000000;
+  return (t / 1000000) + (((t % 1000000) == 0) ? 0 : 1);
+}
+
+/* This function returns the (approximate) command assertion period, in
+ * nanoseconds, for a given CPU clock frequency and MECR BS value:
+ */
+static inline unsigned int sa1100_pcmcia_cmd_time(unsigned int cpu_clock_khz,
+						  unsigned int pcmcia_mecr_bs){
+  return (((10000000 * 2) / cpu_clock_khz) * (3 * (pcmcia_mecr_bs + 1))) / 10;
+}
+
+
+extern int sa11xx_drv_pcmcia_probe(struct device *dev, struct pcmcia_low_level *ops, int first, int nr);
+
+#endif  /* !defined(_PCMCIA_SA1100_H) */
diff -Nru a/drivers/pcmcia/sa11xx_core.c b/drivers/pcmcia/sa11xx_core.c
--- a/drivers/pcmcia/sa11xx_core.c	Sun May 16 01:18:34 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,971 +0,0 @@
-/*======================================================================
-
-    Device driver for the PCMCIA control functionality of StrongARM
-    SA-1100 microprocessors.
-
-    The contents of this file are subject to the Mozilla Public
-    License Version 1.1 (the "License"); you may not use this file
-    except in compliance with the License. You may obtain a copy of
-    the License at http://www.mozilla.org/MPL/
-
-    Software distributed under the License is distributed on an "AS
-    IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-    implied. See the License for the specific language governing
-    rights and limitations under the License.
-
-    The initial developer of the original code is John G. Dorsey
-    <john+@cs.cmu.edu>.  Portions created by John G. Dorsey are
-    Copyright (C) 1999 John G. Dorsey.  All Rights Reserved.
-
-    Alternatively, the contents of this file may be used under the
-    terms of the GNU Public License version 2 (the "GPL"), in which
-    case the provisions of the GPL are applicable instead of the
-    above.  If you wish to allow the use of your version of this file
-    only under the terms of the GPL and not to allow others to use
-    your version of this file under the MPL, indicate your decision
-    by deleting the provisions above and replace them with the notice
-    and other provisions required by the GPL.  If you do not delete
-    the provisions above, a recipient may use your version of this
-    file under either the MPL or the GPL.
-    
-======================================================================*/
-/*
- * Please see linux/Documentation/arm/SA1100/PCMCIA for more information
- * on the low-level kernel interface.
- */
-
-#include <linux/module.h>
-#include <linux/moduleparam.h>
-#include <linux/init.h>
-#include <linux/config.h>
-#include <linux/cpufreq.h>
-#include <linux/ioport.h>
-#include <linux/kernel.h>
-#include <linux/timer.h>
-#include <linux/mm.h>
-#include <linux/notifier.h>
-#include <linux/interrupt.h>
-#include <linux/spinlock.h>
-
-#include <asm/hardware.h>
-#include <asm/io.h>
-#include <asm/irq.h>
-#include <asm/system.h>
-
-#include "sa11xx_core.h"
-#include "sa1100.h"
-
-#ifdef DEBUG
-static int pc_debug;
-
-module_param(pc_debug, int, 0644);
-
-#define debug(skt, lvl, fmt, arg...) do {			\
-	if (pc_debug > (lvl))					\
-		printk(KERN_DEBUG "skt%u: %s: " fmt,		\
-		       (skt)->nr, __func__ , ## arg);		\
-} while (0)
-
-#else
-#define debug(skt, lvl, fmt, arg...) do { } while (0)
-#endif
-
-#define to_sa1100_socket(x)	container_of(x, struct sa1100_pcmcia_socket, socket)
-
-/*
- * sa1100_pcmcia_default_mecr_timing
- * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- *
- * Calculate MECR clock wait states for given CPU clock
- * speed and command wait state. This function can be over-
- * written by a board specific version.
- *
- * The default is to simply calculate the BS values as specified in
- * the INTEL SA1100 development manual
- * "Expansion Memory (PCMCIA) Configuration Register (MECR)"
- * that's section 10.2.5 in _my_ version of the manual ;)
- */
-static unsigned int
-sa1100_pcmcia_default_mecr_timing(struct sa1100_pcmcia_socket *skt,
-				  unsigned int cpu_speed,
-				  unsigned int cmd_time)
-{
-	return sa1100_pcmcia_mecr_bs(cmd_time, cpu_speed);
-}
-
-static unsigned short
-calc_speed(unsigned short *spds, int num, unsigned short dflt)
-{
-	unsigned short speed = 0;
-	int i;
-
-	for (i = 0; i < num; i++)
-		if (speed < spds[i])
-			speed = spds[i];
-	if (speed == 0)
-		speed = dflt;
-
-	return speed;
-}
-
-/* sa1100_pcmcia_set_mecr()
- * ^^^^^^^^^^^^^^^^^^^^^^^^^^^
- *
- * set MECR value for socket <sock> based on this sockets
- * io, mem and attribute space access speed.
- * Call board specific BS value calculation to allow boards
- * to tweak the BS values.
- */
-static int
-sa1100_pcmcia_set_mecr(struct sa1100_pcmcia_socket *skt, unsigned int cpu_clock)
-{
-	u32 mecr, old_mecr;
-	unsigned long flags;
-	unsigned short speed;
-	unsigned int bs_io, bs_mem, bs_attr;
-
-	speed = calc_speed(skt->spd_io, MAX_IO_WIN, SA1100_PCMCIA_IO_ACCESS);
-	bs_io = skt->ops->socket_get_timing(skt, cpu_clock, speed);
-
-	speed = calc_speed(skt->spd_mem, MAX_WIN, SA1100_PCMCIA_3V_MEM_ACCESS);
-	bs_mem = skt->ops->socket_get_timing(skt, cpu_clock, speed);
-
-	speed = calc_speed(skt->spd_attr, MAX_WIN, SA1100_PCMCIA_3V_MEM_ACCESS);
-	bs_attr = skt->ops->socket_get_timing(skt, cpu_clock, speed);
-
-	local_irq_save(flags);
-
-	old_mecr = mecr = MECR;
-	MECR_FAST_SET(mecr, skt->nr, 0);
-	MECR_BSIO_SET(mecr, skt->nr, bs_io);
-	MECR_BSA_SET(mecr, skt->nr, bs_attr);
-	MECR_BSM_SET(mecr, skt->nr, bs_mem);
-	if (old_mecr != mecr)
-		MECR = mecr;
-
-	local_irq_restore(flags);
-
-	debug(skt, 2, "FAST %X  BSM %X  BSA %X  BSIO %X\n",
-	      MECR_FAST_GET(mecr, skt->nr),
-	      MECR_BSM_GET(mecr, skt->nr), MECR_BSA_GET(mecr, skt->nr),
-	      MECR_BSIO_GET(mecr, skt->nr));
-
-	return 0;
-}
-
-static unsigned int sa1100_pcmcia_skt_state(struct sa1100_pcmcia_socket *skt)
-{
-	struct pcmcia_state state;
-	unsigned int stat;
-
-	memset(&state, 0, sizeof(struct pcmcia_state));
-
-	skt->ops->socket_state(skt, &state);
-
-	stat = state.detect  ? SS_DETECT : 0;
-	stat |= state.ready  ? SS_READY  : 0;
-	stat |= state.wrprot ? SS_WRPROT : 0;
-	stat |= state.vs_3v  ? SS_3VCARD : 0;
-	stat |= state.vs_Xv  ? SS_XVCARD : 0;
-
-	/* The power status of individual sockets is not available
-	 * explicitly from the hardware, so we just remember the state
-	 * and regurgitate it upon request:
-	 */
-	stat |= skt->cs_state.Vcc ? SS_POWERON : 0;
-
-	if (skt->cs_state.flags & SS_IOCARD)
-		stat |= state.bvd1 ? SS_STSCHG : 0;
-	else {
-		if (state.bvd1 == 0)
-			stat |= SS_BATDEAD;
-		else if (state.bvd2 == 0)
-			stat |= SS_BATWARN;
-	}
-	return stat;
-}
-
-/*
- * sa1100_pcmcia_config_skt
- * ^^^^^^^^^^^^^^^^^^^^^^^^
- *
- * Convert PCMCIA socket state to our socket configure structure.
- */
-static int
-sa1100_pcmcia_config_skt(struct sa1100_pcmcia_socket *skt, socket_state_t *state)
-{
-	int ret;
-
-	ret = skt->ops->configure_socket(skt, state);
-	if (ret == 0) {
-		/*
-		 * This really needs a better solution.  The IRQ
-		 * may or may not be claimed by the driver.
-		 */
-		if (skt->irq_state != 1 && state->io_irq) {
-			skt->irq_state = 1;
-			set_irq_type(skt->irq, IRQT_FALLING);
-		} else if (skt->irq_state == 1 && state->io_irq == 0) {
-			skt->irq_state = 0;
-			set_irq_type(skt->irq, IRQT_NOEDGE);
-		}
-
-		skt->cs_state = *state;
-	}
-
-	if (ret < 0)
-		printk(KERN_ERR "sa1100_pcmcia: unable to configure "
-		       "socket %d\n", skt->nr);
-
-	return ret;
-}
-
-/* sa1100_pcmcia_sock_init()
- * ^^^^^^^^^^^^^^^^^^^^^^^^^
- *
- * (Re-)Initialise the socket, turning on status interrupts
- * and PCMCIA bus.  This must wait for power to stabilise
- * so that the card status signals report correctly.
- *
- * Returns: 0
- */
-static int sa1100_pcmcia_sock_init(struct pcmcia_socket *sock)
-{
-	struct sa1100_pcmcia_socket *skt = to_sa1100_socket(sock);
-
-	debug(skt, 2, "initializing socket\n");
-
-	skt->ops->socket_init(skt);
-	return 0;
-}
-
-
-/*
- * sa1100_pcmcia_suspend()
- * ^^^^^^^^^^^^^^^^^^^^^^^
- *
- * Remove power on the socket, disable IRQs from the card.
- * Turn off status interrupts, and disable the PCMCIA bus.
- *
- * Returns: 0
- */
-static int sa1100_pcmcia_suspend(struct pcmcia_socket *sock)
-{
-	struct sa1100_pcmcia_socket *skt = to_sa1100_socket(sock);
-	int ret;
-
-	debug(skt, 2, "suspending socket\n");
-
-	ret = sa1100_pcmcia_config_skt(skt, &dead_socket);
-	if (ret == 0)
-		skt->ops->socket_suspend(skt);
-
-	return ret;
-}
-
-static spinlock_t status_lock = SPIN_LOCK_UNLOCKED;
-
-/* sa1100_check_status()
- * ^^^^^^^^^^^^^^^^^^^^^
- */
-static void sa1100_check_status(struct sa1100_pcmcia_socket *skt)
-{
-	unsigned int events;
-
-	debug(skt, 4, "entering PCMCIA monitoring thread\n");
-
-	do {
-		unsigned int status;
-		unsigned long flags;
-
-		status = sa1100_pcmcia_skt_state(skt);
-
-		spin_lock_irqsave(&status_lock, flags);
-		events = (status ^ skt->status) & skt->cs_state.csc_mask;
-		skt->status = status;
-		spin_unlock_irqrestore(&status_lock, flags);
-
-		debug(skt, 4, "events: %s%s%s%s%s%s\n",
-			events == 0         ? "<NONE>"   : "",
-			events & SS_DETECT  ? "DETECT "  : "",
-			events & SS_READY   ? "READY "   : "",
-			events & SS_BATDEAD ? "BATDEAD " : "",
-			events & SS_BATWARN ? "BATWARN " : "",
-			events & SS_STSCHG  ? "STSCHG "  : "");
-
-		if (events)
-			pcmcia_parse_events(&skt->socket, events);
-	} while (events);
-}
-
-/* sa1100_pcmcia_poll_event()
- * ^^^^^^^^^^^^^^^^^^^^^^^^^^
- * Let's poll for events in addition to IRQs since IRQ only is unreliable...
- */
-static void sa1100_pcmcia_poll_event(unsigned long dummy)
-{
-	struct sa1100_pcmcia_socket *skt = (struct sa1100_pcmcia_socket *)dummy;
-	debug(skt, 4, "polling for events\n");
-
-	mod_timer(&skt->poll_timer, jiffies + SA1100_PCMCIA_POLL_PERIOD);
-
-	sa1100_check_status(skt);
-}
-
-
-/* sa1100_pcmcia_interrupt()
- * ^^^^^^^^^^^^^^^^^^^^^^^^^
- * Service routine for socket driver interrupts (requested by the
- * low-level PCMCIA init() operation via sa1100_pcmcia_thread()).
- * The actual interrupt-servicing work is performed by
- * sa1100_pcmcia_thread(), largely because the Card Services event-
- * handling code performs scheduling operations which cannot be
- * executed from within an interrupt context.
- */
-static irqreturn_t sa1100_pcmcia_interrupt(int irq, void *dev, struct pt_regs *regs)
-{
-	struct sa1100_pcmcia_socket *skt = dev;
-
-	debug(skt, 3, "servicing IRQ %d\n", irq);
-
-	sa1100_check_status(skt);
-
-	return IRQ_HANDLED;
-}
-
-
-/* sa1100_pcmcia_get_status()
- * ^^^^^^^^^^^^^^^^^^^^^^^^^^
- * Implements the get_status() operation for the in-kernel PCMCIA
- * service (formerly SS_GetStatus in Card Services). Essentially just
- * fills in bits in `status' according to internal driver state or
- * the value of the voltage detect chipselect register.
- *
- * As a debugging note, during card startup, the PCMCIA core issues
- * three set_socket() commands in a row the first with RESET deasserted,
- * the second with RESET asserted, and the last with RESET deasserted
- * again. Following the third set_socket(), a get_status() command will
- * be issued. The kernel is looking for the SS_READY flag (see
- * setup_socket(), reset_socket(), and unreset_socket() in cs.c).
- *
- * Returns: 0
- */
-static int
-sa1100_pcmcia_get_status(struct pcmcia_socket *sock, unsigned int *status)
-{
-	struct sa1100_pcmcia_socket *skt = to_sa1100_socket(sock);
-
-	skt->status = sa1100_pcmcia_skt_state(skt);
-	*status = skt->status;
-
-	return 0;
-}
-
-
-/* sa1100_pcmcia_get_socket()
- * ^^^^^^^^^^^^^^^^^^^^^^^^^^
- * Implements the get_socket() operation for the in-kernel PCMCIA
- * service (formerly SS_GetSocket in Card Services). Not a very 
- * exciting routine.
- *
- * Returns: 0
- */
-static int
-sa1100_pcmcia_get_socket(struct pcmcia_socket *sock, socket_state_t *state)
-{
-  struct sa1100_pcmcia_socket *skt = to_sa1100_socket(sock);
-
-  debug(skt, 2, "\n");
-
-  *state = skt->cs_state;
-
-  return 0;
-}
-
-/* sa1100_pcmcia_set_socket()
- * ^^^^^^^^^^^^^^^^^^^^^^^^^^
- * Implements the set_socket() operation for the in-kernel PCMCIA
- * service (formerly SS_SetSocket in Card Services). We more or
- * less punt all of this work and let the kernel handle the details
- * of power configuration, reset, &c. We also record the value of
- * `state' in order to regurgitate it to the PCMCIA core later.
- *
- * Returns: 0
- */
-static int
-sa1100_pcmcia_set_socket(struct pcmcia_socket *sock, socket_state_t *state)
-{
-  struct sa1100_pcmcia_socket *skt = to_sa1100_socket(sock);
-
-  debug(skt, 2, "mask: %s%s%s%s%s%sflags: %s%s%s%s%s%sVcc %d Vpp %d irq %d\n",
-	(state->csc_mask==0)?"<NONE> ":"",
-	(state->csc_mask&SS_DETECT)?"DETECT ":"",
-	(state->csc_mask&SS_READY)?"READY ":"",
-	(state->csc_mask&SS_BATDEAD)?"BATDEAD ":"",
-	(state->csc_mask&SS_BATWARN)?"BATWARN ":"",
-	(state->csc_mask&SS_STSCHG)?"STSCHG ":"",
-	(state->flags==0)?"<NONE> ":"",
-	(state->flags&SS_PWR_AUTO)?"PWR_AUTO ":"",
-	(state->flags&SS_IOCARD)?"IOCARD ":"",
-	(state->flags&SS_RESET)?"RESET ":"",
-	(state->flags&SS_SPKR_ENA)?"SPKR_ENA ":"",
-	(state->flags&SS_OUTPUT_ENA)?"OUTPUT_ENA ":"",
-	state->Vcc, state->Vpp, state->io_irq);
-
-  return sa1100_pcmcia_config_skt(skt, state);
-}  /* sa1100_pcmcia_set_socket() */
-
-
-/* sa1100_pcmcia_set_io_map()
- * ^^^^^^^^^^^^^^^^^^^^^^^^^^
- * Implements the set_io_map() operation for the in-kernel PCMCIA
- * service (formerly SS_SetIOMap in Card Services). We configure
- * the map speed as requested, but override the address ranges
- * supplied by Card Services.
- *
- * Returns: 0 on success, -1 on error
- */
-static int
-sa1100_pcmcia_set_io_map(struct pcmcia_socket *sock, struct pccard_io_map *map)
-{
-	struct sa1100_pcmcia_socket *skt = to_sa1100_socket(sock);
-	unsigned short speed = map->speed;
-
-	debug(skt, 2, "map %u  speed %u start 0x%08x stop 0x%08x\n",
-		map->map, map->speed, map->start, map->stop);
-	debug(skt, 2, "flags: %s%s%s%s%s%s%s%s\n",
-		(map->flags==0)?"<NONE>":"",
-		(map->flags&MAP_ACTIVE)?"ACTIVE ":"",
-		(map->flags&MAP_16BIT)?"16BIT ":"",
-		(map->flags&MAP_AUTOSZ)?"AUTOSZ ":"",
-		(map->flags&MAP_0WS)?"0WS ":"",
-		(map->flags&MAP_WRPROT)?"WRPROT ":"",
-		(map->flags&MAP_USE_WAIT)?"USE_WAIT ":"",
-		(map->flags&MAP_PREFETCH)?"PREFETCH ":"");
-
-	if (map->map >= MAX_IO_WIN) {
-		printk(KERN_ERR "%s(): map (%d) out of range\n", __FUNCTION__,
-		       map->map);
-		return -1;
-	}
-
-	if (map->flags & MAP_ACTIVE) {
-		if (speed == 0)
-			speed = SA1100_PCMCIA_IO_ACCESS;
-	} else {
-		speed = 0;
-	}
-
-	skt->spd_io[map->map] = speed;
-	sa1100_pcmcia_set_mecr(skt, cpufreq_get(0));
-
-	if (map->stop == 1)
-		map->stop = PAGE_SIZE-1;
-
-	map->stop -= map->start;
-	map->stop += (unsigned long)skt->virt_io;
-	map->start = (unsigned long)skt->virt_io;
-
-	return 0;
-}  /* sa1100_pcmcia_set_io_map() */
-
-
-/* sa1100_pcmcia_set_mem_map()
- * ^^^^^^^^^^^^^^^^^^^^^^^^^^^
- * Implements the set_mem_map() operation for the in-kernel PCMCIA
- * service (formerly SS_SetMemMap in Card Services). We configure
- * the map speed as requested, but override the address ranges
- * supplied by Card Services.
- *
- * Returns: 0 on success, -1 on error
- */
-static int
-sa1100_pcmcia_set_mem_map(struct pcmcia_socket *sock, struct pccard_mem_map *map)
-{
-	struct sa1100_pcmcia_socket *skt = to_sa1100_socket(sock);
-	struct resource *res;
-	unsigned short speed = map->speed;
-
-	debug(skt, 2, "map %u speed %u card_start %08x\n",
-		map->map, map->speed, map->card_start);
-	debug(skt, 2, "flags: %s%s%s%s%s%s%s%s\n",
-		(map->flags==0)?"<NONE>":"",
-		(map->flags&MAP_ACTIVE)?"ACTIVE ":"",
-		(map->flags&MAP_16BIT)?"16BIT ":"",
-		(map->flags&MAP_AUTOSZ)?"AUTOSZ ":"",
-		(map->flags&MAP_0WS)?"0WS ":"",
-		(map->flags&MAP_WRPROT)?"WRPROT ":"",
-		(map->flags&MAP_ATTRIB)?"ATTRIB ":"",
-		(map->flags&MAP_USE_WAIT)?"USE_WAIT ":"");
-
-	if (map->map >= MAX_WIN)
-		return -EINVAL;
-
-	if (map->flags & MAP_ACTIVE) {
-		if (speed == 0)
-			speed = 300;
-	} else {
-		speed = 0;
-	}
-
-	if (map->flags & MAP_ATTRIB) {
-		res = &skt->res_attr;
-		skt->spd_attr[map->map] = speed;
-		skt->spd_mem[map->map] = 0;
-	} else {
-		res = &skt->res_mem;
-		skt->spd_attr[map->map] = 0;
-		skt->spd_mem[map->map] = speed;
-	}
-
-	sa1100_pcmcia_set_mecr(skt, cpufreq_get(0));
-
-	map->sys_stop -= map->sys_start;
-	map->sys_stop += res->start + map->card_start;
-	map->sys_start = res->start + map->card_start;
-
-	return 0;
-}
-
-struct bittbl {
-	unsigned int mask;
-	const char *name;
-};
-
-static struct bittbl status_bits[] = {
-	{ SS_WRPROT,		"SS_WRPROT"	},
-	{ SS_BATDEAD,		"SS_BATDEAD"	},
-	{ SS_BATWARN,		"SS_BATWARN"	},
-	{ SS_READY,		"SS_READY"	},
-	{ SS_DETECT,		"SS_DETECT"	},
-	{ SS_POWERON,		"SS_POWERON"	},
-	{ SS_STSCHG,		"SS_STSCHG"	},
-	{ SS_3VCARD,		"SS_3VCARD"	},
-	{ SS_XVCARD,		"SS_XVCARD"	},
-};
-
-static struct bittbl conf_bits[] = {
-	{ SS_PWR_AUTO,		"SS_PWR_AUTO"	},
-	{ SS_IOCARD,		"SS_IOCARD"	},
-	{ SS_RESET,		"SS_RESET"	},
-	{ SS_DMA_MODE,		"SS_DMA_MODE"	},
-	{ SS_SPKR_ENA,		"SS_SPKR_ENA"	},
-	{ SS_OUTPUT_ENA,	"SS_OUTPUT_ENA"	},
-};
-
-static void
-dump_bits(char **p, const char *prefix, unsigned int val, struct bittbl *bits, int sz)
-{
-	char *b = *p;
-	int i;
-
-	b += sprintf(b, "%-9s:", prefix);
-	for (i = 0; i < sz; i++)
-		if (val & bits[i].mask)
-			b += sprintf(b, " %s", bits[i].name);
-	*b++ = '\n';
-	*p = b;
-}
-
-/* show_status()
- * ^^^^^^^^^^^^^^^^^^^^^^^^^^^
- * Implements the /sys/class/pcmcia_socket/??/status file.
- *
- * Returns: the number of characters added to the buffer
- */
-static ssize_t show_status(struct class_device *class_dev, char *buf)
-{
-	struct sa1100_pcmcia_socket *skt = container_of(class_dev, 
-				struct sa1100_pcmcia_socket, socket.dev);
-	unsigned int clock = cpufreq_get(0);
-	unsigned long mecr = MECR;
-	char *p = buf;
-
-	p+=sprintf(p, "slot     : %d\n", skt->nr);
-
-	dump_bits(&p, "status", skt->status,
-		  status_bits, ARRAY_SIZE(status_bits));
-	dump_bits(&p, "csc_mask", skt->cs_state.csc_mask,
-		  status_bits, ARRAY_SIZE(status_bits));
-	dump_bits(&p, "cs_flags", skt->cs_state.flags,
-		  conf_bits, ARRAY_SIZE(conf_bits));
-
-	p+=sprintf(p, "Vcc      : %d\n", skt->cs_state.Vcc);
-	p+=sprintf(p, "Vpp      : %d\n", skt->cs_state.Vpp);
-	p+=sprintf(p, "IRQ      : %d (%d)\n", skt->cs_state.io_irq, skt->irq);
-
-	p+=sprintf(p, "I/O      : %u (%u)\n",
-		calc_speed(skt->spd_io, MAX_IO_WIN, SA1100_PCMCIA_IO_ACCESS),
-		sa1100_pcmcia_cmd_time(clock, MECR_BSIO_GET(mecr, skt->nr)));
-
-	p+=sprintf(p, "attribute: %u (%u)\n",
-		calc_speed(skt->spd_attr, MAX_WIN, SA1100_PCMCIA_3V_MEM_ACCESS),
-		sa1100_pcmcia_cmd_time(clock, MECR_BSA_GET(mecr, skt->nr)));
-
-	p+=sprintf(p, "common   : %u (%u)\n",
-		calc_speed(skt->spd_mem, MAX_WIN, SA1100_PCMCIA_3V_MEM_ACCESS),
-		sa1100_pcmcia_cmd_time(clock, MECR_BSM_GET(mecr, skt->nr)));
-
-	return p-buf;
-}
-static CLASS_DEVICE_ATTR(status, S_IRUGO, show_status, NULL);
-
-
-static struct pccard_operations sa11xx_pcmcia_operations = {
-	.init			= sa1100_pcmcia_sock_init,
-	.suspend		= sa1100_pcmcia_suspend,
-	.get_status		= sa1100_pcmcia_get_status,
-	.get_socket		= sa1100_pcmcia_get_socket,
-	.set_socket		= sa1100_pcmcia_set_socket,
-	.set_io_map		= sa1100_pcmcia_set_io_map,
-	.set_mem_map		= sa1100_pcmcia_set_mem_map,
-};
-
-int sa11xx_request_irqs(struct sa1100_pcmcia_socket *skt, struct pcmcia_irqs *irqs, int nr)
-{
-	int i, res = 0;
-
-	for (i = 0; i < nr; i++) {
-		if (irqs[i].sock != skt->nr)
-			continue;
-		res = request_irq(irqs[i].irq, sa1100_pcmcia_interrupt,
-				  SA_INTERRUPT, irqs[i].str, skt);
-		if (res)
-			break;
-		set_irq_type(irqs[i].irq, IRQT_NOEDGE);
-	}
-
-	if (res) {
-		printk(KERN_ERR "PCMCIA: request for IRQ%d failed (%d)\n",
-			irqs[i].irq, res);
-
-		while (i--)
-			if (irqs[i].sock == skt->nr)
-				free_irq(irqs[i].irq, skt);
-	}
-	return res;
-}
-EXPORT_SYMBOL(sa11xx_request_irqs);
-
-void sa11xx_free_irqs(struct sa1100_pcmcia_socket *skt, struct pcmcia_irqs *irqs, int nr)
-{
-	int i;
-
-	for (i = 0; i < nr; i++)
-		if (irqs[i].sock == skt->nr)
-			free_irq(irqs[i].irq, skt);
-}
-EXPORT_SYMBOL(sa11xx_free_irqs);
-
-void sa11xx_disable_irqs(struct sa1100_pcmcia_socket *skt, struct pcmcia_irqs *irqs, int nr)
-{
-	int i;
-
-	for (i = 0; i < nr; i++)
-		if (irqs[i].sock == skt->nr)
-			set_irq_type(irqs[i].irq, IRQT_NOEDGE);
-}
-EXPORT_SYMBOL(sa11xx_disable_irqs);
-
-void sa11xx_enable_irqs(struct sa1100_pcmcia_socket *skt, struct pcmcia_irqs *irqs, int nr)
-{
-	int i;
-
-	for (i = 0; i < nr; i++)
-		if (irqs[i].sock == skt->nr) {
-			set_irq_type(irqs[i].irq, IRQT_RISING);
-			set_irq_type(irqs[i].irq, IRQT_BOTHEDGE);
-		}
-}
-EXPORT_SYMBOL(sa11xx_enable_irqs);
-
-static LIST_HEAD(sa1100_sockets);
-static DECLARE_MUTEX(sa1100_sockets_lock);
-
-static const char *skt_names[] = {
-	"PCMCIA socket 0",
-	"PCMCIA socket 1",
-};
-
-struct skt_dev_info {
-	int nskt;
-	struct sa1100_pcmcia_socket skt[0];
-};
-
-#define SKT_DEV_INFO_SIZE(n) \
-	(sizeof(struct skt_dev_info) + (n)*sizeof(struct sa1100_pcmcia_socket))
-
-int sa11xx_drv_pcmcia_probe(struct device *dev, struct pcmcia_low_level *ops, int first, int nr)
-{
-	struct skt_dev_info *sinfo;
-	unsigned int cpu_clock;
-	int ret, i;
-
-	/*
-	 * set default MECR calculation if the board specific
-	 * code did not specify one...
-	 */
-	if (!ops->socket_get_timing)
-		ops->socket_get_timing = sa1100_pcmcia_default_mecr_timing;
-
-	down(&sa1100_sockets_lock);
-
-	sinfo = kmalloc(SKT_DEV_INFO_SIZE(nr), GFP_KERNEL);
-	if (!sinfo) {
-		ret = -ENOMEM;
-		goto out;
-	}
-
-	memset(sinfo, 0, SKT_DEV_INFO_SIZE(nr));
-	sinfo->nskt = nr;
-
-	cpu_clock = cpufreq_get(0);
-
-	/*
-	 * Initialise the per-socket structure.
-	 */
-	for (i = 0; i < nr; i++) {
-		struct sa1100_pcmcia_socket *skt = &sinfo->skt[i];
-
-		skt->socket.ops = &sa11xx_pcmcia_operations;
-		skt->socket.owner = ops->owner;
-		skt->socket.dev.dev = dev;
-
-		init_timer(&skt->poll_timer);
-		skt->poll_timer.function = sa1100_pcmcia_poll_event;
-		skt->poll_timer.data = (unsigned long)skt;
-		skt->poll_timer.expires = jiffies + SA1100_PCMCIA_POLL_PERIOD;
-
-		skt->nr		= first + i;
-		skt->irq	= NO_IRQ;
-		skt->dev	= dev;
-		skt->ops	= ops;
-
-		skt->res_skt.start	= _PCMCIA(skt->nr);
-		skt->res_skt.end	= _PCMCIA(skt->nr) + PCMCIASp - 1;
-		skt->res_skt.name	= skt_names[skt->nr];
-		skt->res_skt.flags	= IORESOURCE_MEM;
-
-		ret = request_resource(&iomem_resource, &skt->res_skt);
-		if (ret)
-			goto out_err_1;
-
-		skt->res_io.start	= _PCMCIAIO(skt->nr);
-		skt->res_io.end		= _PCMCIAIO(skt->nr) + PCMCIAIOSp - 1;
-		skt->res_io.name	= "io";
-		skt->res_io.flags	= IORESOURCE_MEM | IORESOURCE_BUSY;
-
-		ret = request_resource(&skt->res_skt, &skt->res_io);
-		if (ret)
-			goto out_err_2;
-
-		skt->res_mem.start	= _PCMCIAMem(skt->nr);
-		skt->res_mem.end	= _PCMCIAMem(skt->nr) + PCMCIAMemSp - 1;
-		skt->res_mem.name	= "memory";
-		skt->res_mem.flags	= IORESOURCE_MEM;
-
-		ret = request_resource(&skt->res_skt, &skt->res_mem);
-		if (ret)
-			goto out_err_3;
-
-		skt->res_attr.start	= _PCMCIAAttr(skt->nr);
-		skt->res_attr.end	= _PCMCIAAttr(skt->nr) + PCMCIAAttrSp - 1;
-		skt->res_attr.name	= "attribute";
-		skt->res_attr.flags	= IORESOURCE_MEM;
-		
-		ret = request_resource(&skt->res_skt, &skt->res_attr);
-		if (ret)
-			goto out_err_4;
-
-		skt->virt_io = ioremap(skt->res_io.start, 0x10000);
-		if (skt->virt_io == NULL) {
-			ret = -ENOMEM;
-			goto out_err_5;
-		}
-
-		list_add(&skt->node, &sa1100_sockets);
-
-		/*
-		 * We initialize the MECR to default values here, because
-		 * we are not guaranteed to see a SetIOMap operation at
-		 * runtime.
-		 */
-		sa1100_pcmcia_set_mecr(skt, cpu_clock);
-
-		ret = ops->hw_init(skt);
-		if (ret)
-			goto out_err_6;
-
-		skt->socket.features = SS_CAP_STATIC_MAP|SS_CAP_PCCARD;
-		skt->socket.irq_mask = 0;
-		skt->socket.map_size = PAGE_SIZE;
-		skt->socket.pci_irq = skt->irq;
-		skt->socket.io_offset = (unsigned long)skt->virt_io;
-
-		skt->status = sa1100_pcmcia_skt_state(skt);
-
-		ret = pcmcia_register_socket(&skt->socket);
-		if (ret)
-			goto out_err_7;
-
-		WARN_ON(skt->socket.sock != i);
-
-		add_timer(&skt->poll_timer);
-
-		class_device_create_file(&skt->socket.dev, &class_device_attr_status);
-	}
-
-	dev_set_drvdata(dev, sinfo);
-	ret = 0;
-	goto out;
-
-	do {
-		struct sa1100_pcmcia_socket *skt = &sinfo->skt[i];
-
-		del_timer_sync(&skt->poll_timer);
-		pcmcia_unregister_socket(&skt->socket);
-
- out_err_7:
-		flush_scheduled_work();
-
-		ops->hw_shutdown(skt);
- out_err_6:
- 		list_del(&skt->node);
-		iounmap(skt->virt_io);
- out_err_5:
-		release_resource(&skt->res_attr);
- out_err_4:
-		release_resource(&skt->res_mem);
- out_err_3:
-		release_resource(&skt->res_io);
- out_err_2:
-		release_resource(&skt->res_skt);
- out_err_1:
-		i--;
-	} while (i > 0);
-
-	kfree(sinfo);
-
- out:
-	up(&sa1100_sockets_lock);
-	return ret;
-}
-EXPORT_SYMBOL(sa11xx_drv_pcmcia_probe);
-
-int sa11xx_drv_pcmcia_remove(struct device *dev)
-{
-	struct skt_dev_info *sinfo = dev_get_drvdata(dev);
-	int i;
-
-	dev_set_drvdata(dev, NULL);
-
-	down(&sa1100_sockets_lock);
-	for (i = 0; i < sinfo->nskt; i++) {
-		struct sa1100_pcmcia_socket *skt = &sinfo->skt[i];
-
-		del_timer_sync(&skt->poll_timer);
-
-		pcmcia_unregister_socket(&skt->socket);
-
-		flush_scheduled_work();
-
-		skt->ops->hw_shutdown(skt);
-
-		sa1100_pcmcia_config_skt(skt, &dead_socket);
-
-		list_del(&skt->node);
-		iounmap(skt->virt_io);
-		skt->virt_io = NULL;
-		release_resource(&skt->res_attr);
-		release_resource(&skt->res_mem);
-		release_resource(&skt->res_io);
-		release_resource(&skt->res_skt);
-	}
-	up(&sa1100_sockets_lock);
-
-	kfree(sinfo);
-
-	return 0;
-}
-EXPORT_SYMBOL(sa11xx_drv_pcmcia_remove);
-
-#ifdef CONFIG_CPU_FREQ
-
-/* sa1100_pcmcia_update_mecr()
- * ^^^^^^^^^^^^^^^^^^^^^^^^^^^
- * When sa1100_pcmcia_notifier() decides that a MECR adjustment (due
- * to a core clock frequency change) is needed, this routine establishes
- * new BS_xx values consistent with the clock speed `clock'.
- */
-static void sa1100_pcmcia_update_mecr(unsigned int clock)
-{
-	struct sa1100_pcmcia_socket *skt;
-
-	down(&sa1100_sockets_lock);
-	list_for_each_entry(skt, &sa1100_sockets, node)
-		sa1100_pcmcia_set_mecr(skt, clock);
-	up(&sa1100_sockets_lock);
-}
-
-/* sa1100_pcmcia_notifier()
- * ^^^^^^^^^^^^^^^^^^^^^^^^
- * When changing the processor core clock frequency, it is necessary
- * to adjust the MECR timings accordingly. We've recorded the timings
- * requested by Card Services, so this is just a matter of finding
- * out what our current speed is, and then recomputing the new MECR
- * values.
- *
- * Returns: 0 on success, -1 on error
- */
-static int
-sa1100_pcmcia_notifier(struct notifier_block *nb, unsigned long val,
-		       void *data)
-{
-	struct cpufreq_freqs *freqs = data;
-
-	switch (val) {
-	case CPUFREQ_PRECHANGE:
-		if (freqs->new > freqs->old)
-			sa1100_pcmcia_update_mecr(freqs->new);
-		break;
-
-	case CPUFREQ_POSTCHANGE:
-		if (freqs->new < freqs->old)
-			sa1100_pcmcia_update_mecr(freqs->new);
-		break;
-	}
-
-	return 0;
-}
-
-static struct notifier_block sa1100_pcmcia_notifier_block = {
-	.notifier_call	= sa1100_pcmcia_notifier
-};
-
-static int __init sa11xx_pcmcia_init(void)
-{
-	int ret;
-
-	printk(KERN_INFO "SA11xx PCMCIA\n");
-
-	ret = cpufreq_register_notifier(&sa1100_pcmcia_notifier_block,
-					CPUFREQ_TRANSITION_NOTIFIER);
-	if (ret < 0)
-		printk(KERN_ERR "Unable to register CPU frequency change "
-			"notifier (%d)\n", ret);
-
-	return ret;
-}
-module_init(sa11xx_pcmcia_init);
-
-static void __exit sa11xx_pcmcia_exit(void)
-{
-	cpufreq_unregister_notifier(&sa1100_pcmcia_notifier_block, CPUFREQ_TRANSITION_NOTIFIER);
-}
-
-module_exit(sa11xx_pcmcia_exit);
-#endif
-
-MODULE_AUTHOR("John Dorsey <john+@cs.cmu.edu>");
-MODULE_DESCRIPTION("Linux PCMCIA Card Services: SA-11xx core socket driver");
-MODULE_LICENSE("Dual MPL/GPL");
diff -Nru a/drivers/pcmcia/sa11xx_core.h b/drivers/pcmcia/sa11xx_core.h
--- a/drivers/pcmcia/sa11xx_core.h	Sun May 16 01:18:36 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,121 +0,0 @@
-/*
- * linux/include/asm/arch/pcmcia.h
- *
- * Copyright (C) 2000 John G Dorsey <john+@cs.cmu.edu>
- *
- * This file contains definitions for the low-level SA-1100 kernel PCMCIA
- * interface. Please see linux/Documentation/arm/SA1100/PCMCIA for details.
- */
-#ifndef _ASM_ARCH_PCMCIA
-#define _ASM_ARCH_PCMCIA
-
-/* include the world */
-#include <pcmcia/version.h>
-#include <pcmcia/cs_types.h>
-#include <pcmcia/cs.h>
-#include <pcmcia/ss.h>
-#include <pcmcia/bulkmem.h>
-#include <pcmcia/cistpl.h>
-#include "cs_internal.h"
-
-struct device;
-
-/* Ideally, we'd support up to MAX_SOCK sockets, but the SA-1100 only
- * has support for two. This shows up in lots of hardwired ways, such
- * as the fact that MECR only has enough bits to configure two sockets.
- * Since it's so entrenched in the hardware, limiting the software
- * in this way doesn't seem too terrible.
- */
-#define SA1100_PCMCIA_MAX_SOCK   (2)
-
-struct pcmcia_state {
-  unsigned detect: 1,
-            ready: 1,
-             bvd1: 1,
-             bvd2: 1,
-           wrprot: 1,
-            vs_3v: 1,
-            vs_Xv: 1;
-};
-
-/*
- * This structure encapsulates per-socket state which we might need to
- * use when responding to a Card Services query of some kind.
- */
-struct sa1100_pcmcia_socket {
-	struct pcmcia_socket	socket;
-
-	/*
-	 * Info from low level handler
-	 */
-	struct device		*dev;
-	unsigned int		nr;
-	unsigned int		irq;
-
-	/*
-	 * Core PCMCIA state
-	 */
-	struct pcmcia_low_level *ops;
-
-	unsigned int		status;
-	socket_state_t		cs_state;
-
-	unsigned short		spd_io[MAX_IO_WIN];
-	unsigned short		spd_mem[MAX_WIN];
-	unsigned short		spd_attr[MAX_WIN];
-
-	struct resource		res_skt;
-	struct resource		res_io;
-	struct resource		res_mem;
-	struct resource		res_attr;
-	void			*virt_io;
-
-	unsigned int		irq_state;
-
-	struct timer_list	poll_timer;
-	struct list_head	node;
-};
-
-struct pcmcia_low_level {
-	struct module *owner;
-
-	int (*hw_init)(struct sa1100_pcmcia_socket *);
-	void (*hw_shutdown)(struct sa1100_pcmcia_socket *);
-
-	void (*socket_state)(struct sa1100_pcmcia_socket *, struct pcmcia_state *);
-	int (*configure_socket)(struct sa1100_pcmcia_socket *, const socket_state_t *);
-
-	/*
-	 * Enable card status IRQs on (re-)initialisation.  This can
-	 * be called at initialisation, power management event, or
-	 * pcmcia event.
-	 */
-	void (*socket_init)(struct sa1100_pcmcia_socket *);
-
-	/*
-	 * Disable card status IRQs and PCMCIA bus on suspend.
-	 */
-	void (*socket_suspend)(struct sa1100_pcmcia_socket *);
-
-	/*
-	 * Calculate MECR timing clock wait states
-	 */
-	unsigned int (*socket_get_timing)(struct sa1100_pcmcia_socket *,
-			unsigned int cpu_speed, unsigned int cmd_time);
-};
-
-struct pcmcia_irqs {
-	int sock;
-	int irq;
-	const char *str;
-};
-
-int sa11xx_request_irqs(struct sa1100_pcmcia_socket *skt, struct pcmcia_irqs *irqs, int nr);
-void sa11xx_free_irqs(struct sa1100_pcmcia_socket *skt, struct pcmcia_irqs *irqs, int nr);
-void sa11xx_disable_irqs(struct sa1100_pcmcia_socket *skt, struct pcmcia_irqs *irqs, int nr);
-void sa11xx_enable_irqs(struct sa1100_pcmcia_socket *skt, struct pcmcia_irqs *irqs, int nr);
-
-extern int sa11xx_drv_pcmcia_probe(struct device *dev, struct pcmcia_low_level *ops, int first, int nr);
-extern int sa11xx_drv_pcmcia_remove(struct device *dev);
-
-#endif
diff -Nru a/drivers/pcmcia/soc_common.c b/drivers/pcmcia/soc_common.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/drivers/pcmcia/soc_common.c	Sun May 16 01:18:34 2004
@@ -0,0 +1,774 @@
+/*======================================================================
+
+    Common support code for the PCMCIA control functionality of
+    integrated SOCs like the SA-11x0 and PXA2xx microprocessors.
+
+    The contents of this file are subject to the Mozilla Public
+    License Version 1.1 (the "License"); you may not use this file
+    except in compliance with the License. You may obtain a copy of
+    the License at http://www.mozilla.org/MPL/
+
+    Software distributed under the License is distributed on an "AS
+    IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+    implied. See the License for the specific language governing
+    rights and limitations under the License.
+
+    The initial developer of the original code is John G. Dorsey
+    <john+@cs.cmu.edu>.  Portions created by John G. Dorsey are
+    Copyright (C) 1999 John G. Dorsey.  All Rights Reserved.
+
+    Alternatively, the contents of this file may be used under the
+    terms of the GNU Public License version 2 (the "GPL"), in which
+    case the provisions of the GPL are applicable instead of the
+    above.  If you wish to allow the use of your version of this file
+    only under the terms of the GPL and not to allow others to use
+    your version of this file under the MPL, indicate your decision
+    by deleting the provisions above and replace them with the notice
+    and other provisions required by the GPL.  If you do not delete
+    the provisions above, a recipient may use your version of this
+    file under either the MPL or the GPL.
+
+======================================================================*/
+
+
+#include <linux/module.h>
+#include <linux/moduleparam.h>
+#include <linux/init.h>
+#include <linux/kernel.h>
+#include <linux/timer.h>
+#include <linux/mm.h>
+#include <linux/interrupt.h>
+#include <linux/spinlock.h>
+
+#include <asm/hardware.h>
+#include <asm/io.h>
+#include <asm/irq.h>
+#include <asm/system.h>
+
+#include "soc_common.h"
+
+#ifdef DEBUG
+
+static int pc_debug;
+module_param(pc_debug, int, 0644);
+
+void soc_pcmcia_debug(struct soc_pcmcia_socket *skt, const char *func,
+		      int lvl, const char *fmt, ...)
+{
+	va_list args;
+	if (pc_debug > lvl) {
+		printk(KERN_DEBUG "skt%u: %s: ", skt->nr, func);
+		va_start(args, fmt);
+		printk(fmt, args);
+		va_end(args);
+	}
+}
+
+#endif
+
+#define to_soc_pcmcia_socket(x)	container_of(x, struct soc_pcmcia_socket, socket)
+
+static unsigned int soc_common_pcmcia_skt_state(struct soc_pcmcia_socket *skt)
+{
+	struct pcmcia_state state;
+	unsigned int stat;
+
+	memset(&state, 0, sizeof(struct pcmcia_state));
+
+	skt->ops->socket_state(skt, &state);
+
+	stat = state.detect  ? SS_DETECT : 0;
+	stat |= state.ready  ? SS_READY  : 0;
+	stat |= state.wrprot ? SS_WRPROT : 0;
+	stat |= state.vs_3v  ? SS_3VCARD : 0;
+	stat |= state.vs_Xv  ? SS_XVCARD : 0;
+
+	/* The power status of individual sockets is not available
+	 * explicitly from the hardware, so we just remember the state
+	 * and regurgitate it upon request:
+	 */
+	stat |= skt->cs_state.Vcc ? SS_POWERON : 0;
+
+	if (skt->cs_state.flags & SS_IOCARD)
+		stat |= state.bvd1 ? SS_STSCHG : 0;
+	else {
+		if (state.bvd1 == 0)
+			stat |= SS_BATDEAD;
+		else if (state.bvd2 == 0)
+			stat |= SS_BATWARN;
+	}
+	return stat;
+}
+
+/*
+ * soc_common_pcmcia_config_skt
+ * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ *
+ * Convert PCMCIA socket state to our socket configure structure.
+ */
+static int
+soc_common_pcmcia_config_skt(struct soc_pcmcia_socket *skt, socket_state_t *state)
+{
+	int ret;
+
+	ret = skt->ops->configure_socket(skt, state);
+	if (ret == 0) {
+		/*
+		 * This really needs a better solution.  The IRQ
+		 * may or may not be claimed by the driver.
+		 */
+		if (skt->irq_state != 1 && state->io_irq) {
+			skt->irq_state = 1;
+			set_irq_type(skt->irq, IRQT_FALLING);
+		} else if (skt->irq_state == 1 && state->io_irq == 0) {
+			skt->irq_state = 0;
+			set_irq_type(skt->irq, IRQT_NOEDGE);
+		}
+
+		skt->cs_state = *state;
+	}
+
+	if (ret < 0)
+		printk(KERN_ERR "soc_common_pcmcia: unable to configure "
+		       "socket %d\n", skt->nr);
+
+	return ret;
+}
+
+/* soc_common_pcmcia_sock_init()
+ * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ *
+ * (Re-)Initialise the socket, turning on status interrupts
+ * and PCMCIA bus.  This must wait for power to stabilise
+ * so that the card status signals report correctly.
+ *
+ * Returns: 0
+ */
+static int soc_common_pcmcia_sock_init(struct pcmcia_socket *sock)
+{
+	struct soc_pcmcia_socket *skt = to_soc_pcmcia_socket(sock);
+
+	debug(skt, 2, "initializing socket\n");
+
+	skt->ops->socket_init(skt);
+	return 0;
+}
+
+
+/*
+ * soc_common_pcmcia_suspend()
+ * ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ *
+ * Remove power on the socket, disable IRQs from the card.
+ * Turn off status interrupts, and disable the PCMCIA bus.
+ *
+ * Returns: 0
+ */
+static int soc_common_pcmcia_suspend(struct pcmcia_socket *sock)
+{
+	struct soc_pcmcia_socket *skt = to_soc_pcmcia_socket(sock);
+	int ret;
+
+	debug(skt, 2, "suspending socket\n");
+
+	ret = soc_common_pcmcia_config_skt(skt, &dead_socket);
+	if (ret == 0)
+		skt->ops->socket_suspend(skt);
+
+	return ret;
+}
+
+static spinlock_t status_lock = SPIN_LOCK_UNLOCKED;
+
+static void soc_common_check_status(struct soc_pcmcia_socket *skt)
+{
+	unsigned int events;
+
+	debug(skt, 4, "entering PCMCIA monitoring thread\n");
+
+	do {
+		unsigned int status;
+		unsigned long flags;
+
+		status = soc_common_pcmcia_skt_state(skt);
+
+		spin_lock_irqsave(&status_lock, flags);
+		events = (status ^ skt->status) & skt->cs_state.csc_mask;
+		skt->status = status;
+		spin_unlock_irqrestore(&status_lock, flags);
+
+		debug(skt, 4, "events: %s%s%s%s%s%s\n",
+			events == 0         ? "<NONE>"   : "",
+			events & SS_DETECT  ? "DETECT "  : "",
+			events & SS_READY   ? "READY "   : "",
+			events & SS_BATDEAD ? "BATDEAD " : "",
+			events & SS_BATWARN ? "BATWARN " : "",
+			events & SS_STSCHG  ? "STSCHG "  : "");
+
+		if (events)
+			pcmcia_parse_events(&skt->socket, events);
+	} while (events);
+}
+
+/* Let's poll for events in addition to IRQs since IRQ only is unreliable... */
+static void soc_common_pcmcia_poll_event(unsigned long dummy)
+{
+	struct soc_pcmcia_socket *skt = (struct soc_pcmcia_socket *)dummy;
+	debug(skt, 4, "polling for events\n");
+
+	mod_timer(&skt->poll_timer, jiffies + SOC_PCMCIA_POLL_PERIOD);
+
+	soc_common_check_status(skt);
+}
+
+
+/*
+ * Service routine for socket driver interrupts (requested by the
+ * low-level PCMCIA init() operation via soc_common_pcmcia_thread()).
+ * The actual interrupt-servicing work is performed by
+ * soc_common_pcmcia_thread(), largely because the Card Services event-
+ * handling code performs scheduling operations which cannot be
+ * executed from within an interrupt context.
+ */
+static irqreturn_t soc_common_pcmcia_interrupt(int irq, void *dev, struct pt_regs *regs)
+{
+	struct soc_pcmcia_socket *skt = dev;
+
+	debug(skt, 3, "servicing IRQ %d\n", irq);
+
+	soc_common_check_status(skt);
+
+	return IRQ_HANDLED;
+}
+
+
+/*
+ *  Implements the get_status() operation for the in-kernel PCMCIA
+ * service (formerly SS_GetStatus in Card Services). Essentially just
+ * fills in bits in `status' according to internal driver state or
+ * the value of the voltage detect chipselect register.
+ *
+ * As a debugging note, during card startup, the PCMCIA core issues
+ * three set_socket() commands in a row the first with RESET deasserted,
+ * the second with RESET asserted, and the last with RESET deasserted
+ * again. Following the third set_socket(), a get_status() command will
+ * be issued. The kernel is looking for the SS_READY flag (see
+ * setup_socket(), reset_socket(), and unreset_socket() in cs.c).
+ *
+ * Returns: 0
+ */
+static int
+soc_common_pcmcia_get_status(struct pcmcia_socket *sock, unsigned int *status)
+{
+	struct soc_pcmcia_socket *skt = to_soc_pcmcia_socket(sock);
+
+	skt->status = soc_common_pcmcia_skt_state(skt);
+	*status = skt->status;
+
+	return 0;
+}
+
+
+/*
+ * Implements the get_socket() operation for the in-kernel PCMCIA
+ * service (formerly SS_GetSocket in Card Services). Not a very
+ * exciting routine.
+ *
+ * Returns: 0
+ */
+static int
+soc_common_pcmcia_get_socket(struct pcmcia_socket *sock, socket_state_t *state)
+{
+	struct soc_pcmcia_socket *skt = to_soc_pcmcia_socket(sock);
+
+	debug(skt, 2, "\n");
+
+	*state = skt->cs_state;
+
+	return 0;
+}
+
+/*
+ * Implements the set_socket() operation for the in-kernel PCMCIA
+ * service (formerly SS_SetSocket in Card Services). We more or
+ * less punt all of this work and let the kernel handle the details
+ * of power configuration, reset, &c. We also record the value of
+ * `state' in order to regurgitate it to the PCMCIA core later.
+ *
+ * Returns: 0
+ */
+static int
+soc_common_pcmcia_set_socket(struct pcmcia_socket *sock, socket_state_t *state)
+{
+	struct soc_pcmcia_socket *skt = to_soc_pcmcia_socket(sock);
+
+	debug(skt, 2, "mask: %s%s%s%s%s%sflags: %s%s%s%s%s%sVcc %d Vpp %d irq %d\n",
+			(state->csc_mask==0)?"<NONE> ":"",
+			(state->csc_mask&SS_DETECT)?"DETECT ":"",
+			(state->csc_mask&SS_READY)?"READY ":"",
+			(state->csc_mask&SS_BATDEAD)?"BATDEAD ":"",
+			(state->csc_mask&SS_BATWARN)?"BATWARN ":"",
+			(state->csc_mask&SS_STSCHG)?"STSCHG ":"",
+			(state->flags==0)?"<NONE> ":"",
+			(state->flags&SS_PWR_AUTO)?"PWR_AUTO ":"",
+			(state->flags&SS_IOCARD)?"IOCARD ":"",
+			(state->flags&SS_RESET)?"RESET ":"",
+			(state->flags&SS_SPKR_ENA)?"SPKR_ENA ":"",
+			(state->flags&SS_OUTPUT_ENA)?"OUTPUT_ENA ":"",
+			state->Vcc, state->Vpp, state->io_irq);
+
+	return soc_common_pcmcia_config_skt(skt, state);
+}
+
+
+/*
+ * Implements the set_io_map() operation for the in-kernel PCMCIA
+ * service (formerly SS_SetIOMap in Card Services). We configure
+ * the map speed as requested, but override the address ranges
+ * supplied by Card Services.
+ *
+ * Returns: 0 on success, -1 on error
+ */
+static int
+soc_common_pcmcia_set_io_map(struct pcmcia_socket *sock, struct pccard_io_map *map)
+{
+	struct soc_pcmcia_socket *skt = to_soc_pcmcia_socket(sock);
+	unsigned short speed = map->speed;
+
+	debug(skt, 2, "map %u  speed %u start 0x%08x stop 0x%08x\n",
+		map->map, map->speed, map->start, map->stop);
+	debug(skt, 2, "flags: %s%s%s%s%s%s%s%s\n",
+		(map->flags==0)?"<NONE>":"",
+		(map->flags&MAP_ACTIVE)?"ACTIVE ":"",
+		(map->flags&MAP_16BIT)?"16BIT ":"",
+		(map->flags&MAP_AUTOSZ)?"AUTOSZ ":"",
+		(map->flags&MAP_0WS)?"0WS ":"",
+		(map->flags&MAP_WRPROT)?"WRPROT ":"",
+		(map->flags&MAP_USE_WAIT)?"USE_WAIT ":"",
+		(map->flags&MAP_PREFETCH)?"PREFETCH ":"");
+
+	if (map->map >= MAX_IO_WIN) {
+		printk(KERN_ERR "%s(): map (%d) out of range\n", __FUNCTION__,
+		       map->map);
+		return -1;
+	}
+
+	if (map->flags & MAP_ACTIVE) {
+		if (speed == 0)
+			speed = SOC_PCMCIA_IO_ACCESS;
+	} else {
+		speed = 0;
+	}
+
+	skt->spd_io[map->map] = speed;
+	skt->ops->set_timing(skt);
+
+	if (map->stop == 1)
+		map->stop = PAGE_SIZE-1;
+
+	map->stop -= map->start;
+	map->stop += (unsigned long)skt->virt_io;
+	map->start = (unsigned long)skt->virt_io;
+
+	return 0;
+}
+
+
+/*
+ * Implements the set_mem_map() operation for the in-kernel PCMCIA
+ * service (formerly SS_SetMemMap in Card Services). We configure
+ * the map speed as requested, but override the address ranges
+ * supplied by Card Services.
+ *
+ * Returns: 0 on success, -1 on error
+ */
+static int
+soc_common_pcmcia_set_mem_map(struct pcmcia_socket *sock, struct pccard_mem_map *map)
+{
+	struct soc_pcmcia_socket *skt = to_soc_pcmcia_socket(sock);
+	struct resource *res;
+	unsigned short speed = map->speed;
+
+	debug(skt, 2, "map %u speed %u card_start %08x\n",
+		map->map, map->speed, map->card_start);
+	debug(skt, 2, "flags: %s%s%s%s%s%s%s%s\n",
+		(map->flags==0)?"<NONE>":"",
+		(map->flags&MAP_ACTIVE)?"ACTIVE ":"",
+		(map->flags&MAP_16BIT)?"16BIT ":"",
+		(map->flags&MAP_AUTOSZ)?"AUTOSZ ":"",
+		(map->flags&MAP_0WS)?"0WS ":"",
+		(map->flags&MAP_WRPROT)?"WRPROT ":"",
+		(map->flags&MAP_ATTRIB)?"ATTRIB ":"",
+		(map->flags&MAP_USE_WAIT)?"USE_WAIT ":"");
+
+	if (map->map >= MAX_WIN)
+		return -EINVAL;
+
+	if (map->flags & MAP_ACTIVE) {
+		if (speed == 0)
+			speed = 300;
+	} else {
+		speed = 0;
+	}
+
+	if (map->flags & MAP_ATTRIB) {
+		res = &skt->res_attr;
+		skt->spd_attr[map->map] = speed;
+		skt->spd_mem[map->map] = 0;
+	} else {
+		res = &skt->res_mem;
+		skt->spd_attr[map->map] = 0;
+		skt->spd_mem[map->map] = speed;
+	}
+
+	skt->ops->set_timing(skt);
+
+	map->sys_stop -= map->sys_start;
+	map->sys_stop += res->start + map->card_start;
+	map->sys_start = res->start + map->card_start;
+
+	return 0;
+}
+
+struct bittbl {
+	unsigned int mask;
+	const char *name;
+};
+
+static struct bittbl status_bits[] = {
+	{ SS_WRPROT,		"SS_WRPROT"	},
+	{ SS_BATDEAD,		"SS_BATDEAD"	},
+	{ SS_BATWARN,		"SS_BATWARN"	},
+	{ SS_READY,		"SS_READY"	},
+	{ SS_DETECT,		"SS_DETECT"	},
+	{ SS_POWERON,		"SS_POWERON"	},
+	{ SS_STSCHG,		"SS_STSCHG"	},
+	{ SS_3VCARD,		"SS_3VCARD"	},
+	{ SS_XVCARD,		"SS_XVCARD"	},
+};
+
+static struct bittbl conf_bits[] = {
+	{ SS_PWR_AUTO,		"SS_PWR_AUTO"	},
+	{ SS_IOCARD,		"SS_IOCARD"	},
+	{ SS_RESET,		"SS_RESET"	},
+	{ SS_DMA_MODE,		"SS_DMA_MODE"	},
+	{ SS_SPKR_ENA,		"SS_SPKR_ENA"	},
+	{ SS_OUTPUT_ENA,	"SS_OUTPUT_ENA"	},
+};
+
+static void
+dump_bits(char **p, const char *prefix, unsigned int val, struct bittbl *bits, int sz)
+{
+	char *b = *p;
+	int i;
+
+	b += sprintf(b, "%-9s:", prefix);
+	for (i = 0; i < sz; i++)
+		if (val & bits[i].mask)
+			b += sprintf(b, " %s", bits[i].name);
+	*b++ = '\n';
+	*p = b;
+}
+
+/*
+ * Implements the /sys/class/pcmcia_socket/??/status file.
+ *
+ * Returns: the number of characters added to the buffer
+ */
+static ssize_t show_status(struct class_device *class_dev, char *buf)
+{
+	struct soc_pcmcia_socket *skt =
+		container_of(class_dev, struct soc_pcmcia_socket, socket.dev);
+	char *p = buf;
+
+	p+=sprintf(p, "slot     : %d\n", skt->nr);
+
+	dump_bits(&p, "status", skt->status,
+		  status_bits, ARRAY_SIZE(status_bits));
+	dump_bits(&p, "csc_mask", skt->cs_state.csc_mask,
+		  status_bits, ARRAY_SIZE(status_bits));
+	dump_bits(&p, "cs_flags", skt->cs_state.flags,
+		  conf_bits, ARRAY_SIZE(conf_bits));
+
+	p+=sprintf(p, "Vcc      : %d\n", skt->cs_state.Vcc);
+	p+=sprintf(p, "Vpp      : %d\n", skt->cs_state.Vpp);
+	p+=sprintf(p, "IRQ      : %d (%d)\n", skt->cs_state.io_irq, skt->irq);
+	if (skt->ops->show_timing)
+		p+=skt->ops->show_timing(skt, p);
+
+	return p-buf;
+}
+static CLASS_DEVICE_ATTR(status, S_IRUGO, show_status, NULL);
+
+
+static struct pccard_operations soc_common_pcmcia_operations = {
+	.init			= soc_common_pcmcia_sock_init,
+	.suspend		= soc_common_pcmcia_suspend,
+	.get_status		= soc_common_pcmcia_get_status,
+	.get_socket		= soc_common_pcmcia_get_socket,
+	.set_socket		= soc_common_pcmcia_set_socket,
+	.set_io_map		= soc_common_pcmcia_set_io_map,
+	.set_mem_map		= soc_common_pcmcia_set_mem_map,
+};
+
+
+int soc_pcmcia_request_irqs(struct soc_pcmcia_socket *skt,
+			    struct pcmcia_irqs *irqs, int nr)
+{
+	int i, res = 0;
+
+	for (i = 0; i < nr; i++) {
+		if (irqs[i].sock != skt->nr)
+			continue;
+		res = request_irq(irqs[i].irq, soc_common_pcmcia_interrupt,
+				  SA_INTERRUPT, irqs[i].str, skt);
+		if (res)
+			break;
+		set_irq_type(irqs[i].irq, IRQT_NOEDGE);
+	}
+
+	if (res) {
+		printk(KERN_ERR "PCMCIA: request for IRQ%d failed (%d)\n",
+			irqs[i].irq, res);
+
+		while (i--)
+			if (irqs[i].sock == skt->nr)
+				free_irq(irqs[i].irq, skt);
+	}
+	return res;
+}
+EXPORT_SYMBOL(soc_pcmcia_request_irqs);
+
+void soc_pcmcia_free_irqs(struct soc_pcmcia_socket *skt,
+			  struct pcmcia_irqs *irqs, int nr)
+{
+	int i;
+
+	for (i = 0; i < nr; i++)
+		if (irqs[i].sock == skt->nr)
+			free_irq(irqs[i].irq, skt);
+}
+EXPORT_SYMBOL(soc_pcmcia_free_irqs);
+
+void soc_pcmcia_disable_irqs(struct soc_pcmcia_socket *skt,
+			     struct pcmcia_irqs *irqs, int nr)
+{
+	int i;
+
+	for (i = 0; i < nr; i++)
+		if (irqs[i].sock == skt->nr)
+			set_irq_type(irqs[i].irq, IRQT_NOEDGE);
+}
+EXPORT_SYMBOL(soc_pcmcia_disable_irqs);
+
+void soc_pcmcia_enable_irqs(struct soc_pcmcia_socket *skt,
+			    struct pcmcia_irqs *irqs, int nr)
+{
+	int i;
+
+	for (i = 0; i < nr; i++)
+		if (irqs[i].sock == skt->nr) {
+			set_irq_type(irqs[i].irq, IRQT_RISING);
+			set_irq_type(irqs[i].irq, IRQT_BOTHEDGE);
+		}
+}
+EXPORT_SYMBOL(soc_pcmcia_enable_irqs);
+
+
+LIST_HEAD(soc_pcmcia_sockets);
+DECLARE_MUTEX(soc_pcmcia_sockets_lock);
+
+static const char *skt_names[] = {
+	"PCMCIA socket 0",
+	"PCMCIA socket 1",
+};
+
+struct skt_dev_info {
+	int nskt;
+	struct soc_pcmcia_socket skt[0];
+};
+
+#define SKT_DEV_INFO_SIZE(n) \
+	(sizeof(struct skt_dev_info) + (n)*sizeof(struct soc_pcmcia_socket))
+
+int soc_common_drv_pcmcia_probe(struct device *dev, struct pcmcia_low_level *ops, int first, int nr)
+{
+	struct skt_dev_info *sinfo;
+	int ret, i;
+
+	down(&soc_pcmcia_sockets_lock);
+
+	sinfo = kmalloc(SKT_DEV_INFO_SIZE(nr), GFP_KERNEL);
+	if (!sinfo) {
+		ret = -ENOMEM;
+		goto out;
+	}
+
+	memset(sinfo, 0, SKT_DEV_INFO_SIZE(nr));
+	sinfo->nskt = nr;
+
+	/*
+	 * Initialise the per-socket structure.
+	 */
+	for (i = 0; i < nr; i++) {
+		struct soc_pcmcia_socket *skt = &sinfo->skt[i];
+
+		skt->socket.ops = &soc_common_pcmcia_operations;
+		skt->socket.owner = ops->owner;
+		skt->socket.dev.dev = dev;
+
+		init_timer(&skt->poll_timer);
+		skt->poll_timer.function = soc_common_pcmcia_poll_event;
+		skt->poll_timer.data = (unsigned long)skt;
+		skt->poll_timer.expires = jiffies + SOC_PCMCIA_POLL_PERIOD;
+
+		skt->nr		= first + i;
+		skt->irq	= NO_IRQ;
+		skt->dev	= dev;
+		skt->ops	= ops;
+
+		skt->res_skt.start	= _PCMCIA(skt->nr);
+		skt->res_skt.end	= _PCMCIA(skt->nr) + PCMCIASp - 1;
+		skt->res_skt.name	= skt_names[skt->nr];
+		skt->res_skt.flags	= IORESOURCE_MEM;
+
+		ret = request_resource(&iomem_resource, &skt->res_skt);
+		if (ret)
+			goto out_err_1;
+
+		skt->res_io.start	= _PCMCIAIO(skt->nr);
+		skt->res_io.end		= _PCMCIAIO(skt->nr) + PCMCIAIOSp - 1;
+		skt->res_io.name	= "io";
+		skt->res_io.flags	= IORESOURCE_MEM | IORESOURCE_BUSY;
+
+		ret = request_resource(&skt->res_skt, &skt->res_io);
+		if (ret)
+			goto out_err_2;
+
+		skt->res_mem.start	= _PCMCIAMem(skt->nr);
+		skt->res_mem.end	= _PCMCIAMem(skt->nr) + PCMCIAMemSp - 1;
+		skt->res_mem.name	= "memory";
+		skt->res_mem.flags	= IORESOURCE_MEM;
+
+		ret = request_resource(&skt->res_skt, &skt->res_mem);
+		if (ret)
+			goto out_err_3;
+
+		skt->res_attr.start	= _PCMCIAAttr(skt->nr);
+		skt->res_attr.end	= _PCMCIAAttr(skt->nr) + PCMCIAAttrSp - 1;
+		skt->res_attr.name	= "attribute";
+		skt->res_attr.flags	= IORESOURCE_MEM;
+
+		ret = request_resource(&skt->res_skt, &skt->res_attr);
+		if (ret)
+			goto out_err_4;
+
+		skt->virt_io = ioremap(skt->res_io.start, 0x10000);
+		if (skt->virt_io == NULL) {
+			ret = -ENOMEM;
+			goto out_err_5;
+		}
+
+		list_add(&skt->node, &soc_pcmcia_sockets);
+
+		/*
+		 * We initialize default socket timing here, because
+		 * we are not guaranteed to see a SetIOMap operation at
+		 * runtime.
+		 */
+		ops->set_timing(skt);
+
+		ret = ops->hw_init(skt);
+		if (ret)
+			goto out_err_6;
+
+		skt->socket.features = SS_CAP_STATIC_MAP|SS_CAP_PCCARD;
+		skt->socket.irq_mask = 0;
+		skt->socket.map_size = PAGE_SIZE;
+		skt->socket.pci_irq = skt->irq;
+		skt->socket.io_offset = (unsigned long)skt->virt_io;
+
+		skt->status = soc_common_pcmcia_skt_state(skt);
+
+		ret = pcmcia_register_socket(&skt->socket);
+		if (ret)
+			goto out_err_7;
+
+		WARN_ON(skt->socket.sock != i);
+
+		add_timer(&skt->poll_timer);
+
+		class_device_create_file(&skt->socket.dev, &class_device_attr_status);
+	}
+
+	dev_set_drvdata(dev, sinfo);
+	ret = 0;
+	goto out;
+
+	do {
+		struct soc_pcmcia_socket *skt = &sinfo->skt[i];
+
+		del_timer_sync(&skt->poll_timer);
+		pcmcia_unregister_socket(&skt->socket);
+
+ out_err_7:
+		flush_scheduled_work();
+
+		ops->hw_shutdown(skt);
+ out_err_6:
+ 		list_del(&skt->node);
+		iounmap(skt->virt_io);
+ out_err_5:
+		release_resource(&skt->res_attr);
+ out_err_4:
+		release_resource(&skt->res_mem);
+ out_err_3:
+		release_resource(&skt->res_io);
+ out_err_2:
+		release_resource(&skt->res_skt);
+ out_err_1:
+		i--;
+	} while (i > 0);
+
+	kfree(sinfo);
+
+ out:
+	up(&soc_pcmcia_sockets_lock);
+	return ret;
+}
+
+int soc_common_drv_pcmcia_remove(struct device *dev)
+{
+	struct skt_dev_info *sinfo = dev_get_drvdata(dev);
+	int i;
+
+	dev_set_drvdata(dev, NULL);
+
+	down(&soc_pcmcia_sockets_lock);
+	for (i = 0; i < sinfo->nskt; i++) {
+		struct soc_pcmcia_socket *skt = &sinfo->skt[i];
+
+		del_timer_sync(&skt->poll_timer);
+
+		pcmcia_unregister_socket(&skt->socket);
+
+		flush_scheduled_work();
+
+		skt->ops->hw_shutdown(skt);
+
+		soc_common_pcmcia_config_skt(skt, &dead_socket);
+
+		list_del(&skt->node);
+		iounmap(skt->virt_io);
+		skt->virt_io = NULL;
+		release_resource(&skt->res_attr);
+		release_resource(&skt->res_mem);
+		release_resource(&skt->res_io);
+		release_resource(&skt->res_skt);
+	}
+	up(&soc_pcmcia_sockets_lock);
+
+	kfree(sinfo);
+
+	return 0;
+}
diff -Nru a/drivers/pcmcia/soc_common.h b/drivers/pcmcia/soc_common.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/drivers/pcmcia/soc_common.h	Sun May 16 01:18:36 2004
@@ -0,0 +1,179 @@
+/*
+ * linux/drivers/pcmcia/soc_common.h
+ *
+ * Copyright (C) 2000 John G Dorsey <john+@cs.cmu.edu>
+ *
+ * This file contains definitions for the PCMCIA support code common to
+ * integrated SOCs like the SA-11x0 and PXA2xx microprocessors.
+ */
+#ifndef _ASM_ARCH_PCMCIA
+#define _ASM_ARCH_PCMCIA
+
+/* include the world */
+#include <pcmcia/version.h>
+#include <pcmcia/cs_types.h>
+#include <pcmcia/cs.h>
+#include <pcmcia/ss.h>
+#include <pcmcia/bulkmem.h>
+#include <pcmcia/cistpl.h>
+#include "cs_internal.h"
+
+
+struct device;
+struct pcmcia_low_level;
+
+/*
+ * This structure encapsulates per-socket state which we might need to
+ * use when responding to a Card Services query of some kind.
+ */
+struct soc_pcmcia_socket {
+	struct pcmcia_socket	socket;
+
+	/*
+	 * Info from low level handler
+	 */
+	struct device		*dev;
+	unsigned int		nr;
+	unsigned int		irq;
+
+	/*
+	 * Core PCMCIA state
+	 */
+	struct pcmcia_low_level *ops;
+
+	unsigned int		status;
+	socket_state_t		cs_state;
+
+	unsigned short		spd_io[MAX_IO_WIN];
+	unsigned short		spd_mem[MAX_WIN];
+	unsigned short		spd_attr[MAX_WIN];
+
+	struct resource		res_skt;
+	struct resource		res_io;
+	struct resource		res_mem;
+	struct resource		res_attr;
+	void			*virt_io;
+
+	unsigned int		irq_state;
+
+	struct timer_list	poll_timer;
+	struct list_head	node;
+};
+
+struct pcmcia_state {
+  unsigned detect: 1,
+            ready: 1,
+             bvd1: 1,
+             bvd2: 1,
+           wrprot: 1,
+            vs_3v: 1,
+            vs_Xv: 1;
+};
+
+struct pcmcia_low_level {
+	struct module *owner;
+
+	/* first socket in system */
+	int first;
+	/* nr of sockets */
+	int nr;
+
+	int (*hw_init)(struct soc_pcmcia_socket *);
+	void (*hw_shutdown)(struct soc_pcmcia_socket *);
+
+	void (*socket_state)(struct soc_pcmcia_socket *, struct pcmcia_state *);
+	int (*configure_socket)(struct soc_pcmcia_socket *, const socket_state_t *);
+
+	/*
+	 * Enable card status IRQs on (re-)initialisation.  This can
+	 * be called at initialisation, power management event, or
+	 * pcmcia event.
+	 */
+	void (*socket_init)(struct soc_pcmcia_socket *);
+
+	/*
+	 * Disable card status IRQs and PCMCIA bus on suspend.
+	 */
+	void (*socket_suspend)(struct soc_pcmcia_socket *);
+
+	/*
+	 * Hardware specific timing routines.
+	 * If provided, the get_timing routine overrides the SOC default.
+	 */
+	unsigned int (*get_timing)(struct soc_pcmcia_socket *, unsigned int, unsigned int);
+	int (*set_timing)(struct soc_pcmcia_socket *);
+	int (*show_timing)(struct soc_pcmcia_socket *, char *);
+};
+
+
+struct pcmcia_irqs {
+	int sock;
+	int irq;
+	const char *str;
+};
+
+extern int soc_pcmcia_request_irqs(struct soc_pcmcia_socket *skt, struct pcmcia_irqs *irqs, int nr);
+extern void soc_pcmcia_free_irqs(struct soc_pcmcia_socket *skt, struct pcmcia_irqs *irqs, int nr);
+extern void soc_pcmcia_disable_irqs(struct soc_pcmcia_socket *skt, struct pcmcia_irqs *irqs, int nr);
+extern void soc_pcmcia_enable_irqs(struct soc_pcmcia_socket *skt, struct pcmcia_irqs *irqs, int nr);
+
+
+extern struct list_head soc_pcmcia_sockets;
+extern struct semaphore soc_pcmcia_sockets_lock;
+
+extern int soc_common_drv_pcmcia_probe(struct device *dev, struct pcmcia_low_level *ops, int first, int nr);
+extern int soc_common_drv_pcmcia_remove(struct device *dev);
+
+
+#ifdef DEBUG
+
+extern void soc_pcmcia_debug(struct soc_pcmcia_socket *skt, const char *func,
+			     int lvl, const char *fmt, ...);
+
+#define debug(skt, lvl, fmt, arg...) \
+	soc_pcmcia_debug(skt, __func__, lvl, fmt , ## arg)
+
+#else
+#define debug(skt, lvl, fmt, arg...) do { } while (0)
+#endif
+
+
+/*
+ * The PC Card Standard, Release 7, section 4.13.4, says that twIORD
+ * has a minimum value of 165ns. Section 4.13.5 says that twIOWR has
+ * a minimum value of 165ns, as well. Section 4.7.2 (describing
+ * common and attribute memory write timing) says that twWE has a
+ * minimum value of 150ns for a 250ns cycle time (for 5V operation;
+ * see section 4.7.4), or 300ns for a 600ns cycle time (for 3.3V
+ * operation, also section 4.7.4). Section 4.7.3 says that taOE
+ * has a maximum value of 150ns for a 300ns cycle time (for 5V
+ * operation), or 300ns for a 600ns cycle time (for 3.3V operation).
+ *
+ * When configuring memory maps, Card Services appears to adopt the policy
+ * that a memory access time of "0" means "use the default." The default
+ * PCMCIA I/O command width time is 165ns. The default PCMCIA 5V attribute
+ * and memory command width time is 150ns; the PCMCIA 3.3V attribute and
+ * memory command width time is 300ns.
+ */
+#define SOC_PCMCIA_IO_ACCESS		(165)
+#define SOC_PCMCIA_5V_MEM_ACCESS	(150)
+#define SOC_PCMCIA_3V_MEM_ACCESS	(300)
+#define SOC_PCMCIA_ATTR_MEM_ACCESS	(300)
+
+/*
+ * The socket driver actually works nicely in interrupt-driven form,
+ * so the (relatively infrequent) polling is "just to be sure."
+ */
+#define SOC_PCMCIA_POLL_PERIOD    (2*HZ)
+
+
+/* I/O pins replacing memory pins
+ * (PCMCIA System Architecture, 2nd ed., by Don Anderson, p.75)
+ *
+ * These signals change meaning when going from memory-only to
+ * memory-or-I/O interface:
+ */
+#define iostschg bvd1
+#define iospkr   bvd2
+
+#endif
diff -Nru a/drivers/pcmcia/tcic.c b/drivers/pcmcia/tcic.c
--- a/drivers/pcmcia/tcic.c	Sun May 16 01:18:35 2004
+++ b/drivers/pcmcia/tcic.c	Sun May 16 01:18:35 2004
@@ -60,7 +60,7 @@
 static int pc_debug;
 
 module_param(pc_debug, int, 0644);
-static const char *version =
+static const char version[] =
 "tcic.c 1.111 2000/02/15 04:13:12 (David Hinds)";
 
 #define debug(lvl, fmt, arg...) do {				\
diff -Nru a/drivers/s390/Kconfig b/drivers/s390/Kconfig
--- a/drivers/s390/Kconfig	Sun May 16 01:18:36 2004
+++ b/drivers/s390/Kconfig	Sun May 16 01:18:36 2004
@@ -54,17 +54,28 @@
 comment "S/390 character device drivers"
 
 config TN3270
-	tristate "Support for locally attached 3270 tubes"
+	tristate "Support for locally attached 3270 terminals"
 	help
-	  Include support for IBM 3270 line-mode terminals.
+	  Include support for IBM 3270 terminals.
+
+config TN3270_TTY
+	tristate "Support for tty input/output on 3270 terminals"
+	depends on TN3270
+	help
+	  Include support for using an IBM 3270 terminal as a Linux tty.
+
+config TN3270_FS
+	tristate "Support for fullscreen applications on 3270 terminals"
+	depends on TN3270
+	help
+	  Include support for fullscreen applications on an IBM 3270 terminal.
 
 config TN3270_CONSOLE
-	bool "Support for console on 3270 line mode terminal"
-	depends on TN3270=y
+	bool "Support for console on 3270 terminal"
+	depends on TN3270=y && TN3270_TTY=y
 	help
-	  Include support for using an IBM 3270 line-mode terminal as a Linux
-	  system console.  Available only if 3270 support is compiled in
-	  statically.
+	  Include support for using an IBM 3270 terminal as a Linux system
+	  console.  Available only if 3270 support is compiled in statically.
 
 config TN3215
 	bool "Support for 3215 line mode terminal"
diff -Nru a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c
--- a/drivers/s390/block/dasd.c	Sun May 16 01:18:35 2004
+++ b/drivers/s390/block/dasd.c	Sun May 16 01:18:35 2004
@@ -7,7 +7,7 @@
  * Bugreports.to..: <Linux390@de.ibm.com>
  * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999-2001
  *
- * $Revision: 1.139 $
+ * $Revision: 1.141 $
  */
 
 #include <linux/config.h>
@@ -751,16 +751,16 @@
 		break;
 	case -EBUSY:
 		DBF_DEV_EVENT(DBF_ERR, device, "%s",
-			      "device busy, retry later");
+			      "start_IO: device busy, retry later");
 		break;
 	case -ETIMEDOUT:
 		DBF_DEV_EVENT(DBF_ERR, device, "%s",
-			      "request timeout - terminated");
+			      "start_IO: request timeout, retry later");
+		break;
 	case -ENODEV:
 	case -EIO:
-		cqr->status = DASD_CQR_FAILED;
-		cqr->stopclk = cqr->startclk;
-		dasd_schedule_bh(device);
+		DBF_DEV_EVENT(DBF_ERR, device, "%s",
+			      "start_IO: device gone, retry");
 		break;
 	default:
 		DEV_MESSAGE(KERN_ERR, device,
@@ -1008,8 +1008,9 @@
 				if (device->discipline->start_IO(next) == 0)
 					expires = next->expires;
 				else
-					MESSAGE(KERN_WARNING, "%s",
-						"Interrupt fastpath failed!");
+					DEV_MESSAGE(KERN_DEBUG, device, "%s",
+						    "Interrupt fastpath "
+						    "failed!");
 			}
 		}
 	} else {		/* error */
@@ -1018,8 +1019,8 @@
 		if (cqr->dstat)
 			memcpy(cqr->dstat, irb, sizeof (struct irb));
 		else
-			MESSAGE(KERN_ERR, "%s",
-				"no memory for dstat...ignoring");
+			DEV_MESSAGE(KERN_ERR, device, "%s",
+				    "no memory for dstat...ignoring");
 #ifdef ERP_DEBUG
 		/* dump sense data */
 		dasd_log_sense(cqr, irb);
diff -Nru a/drivers/s390/block/dasd_eckd.c b/drivers/s390/block/dasd_eckd.c
--- a/drivers/s390/block/dasd_eckd.c	Sun May 16 01:18:33 2004
+++ b/drivers/s390/block/dasd_eckd.c	Sun May 16 01:18:33 2004
@@ -7,7 +7,7 @@
  * Bugreports.to..: <Linux390@de.ibm.com>
  * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000
  *
- * $Revision: 1.54 $
+ * $Revision: 1.55 $
  */
 
 #include <linux/config.h>
@@ -1070,7 +1070,7 @@
 	cqr->device = device;
 	cqr->expires = 5 * 60 * HZ;	/* 5 minutes */
 	cqr->lpm = LPM_ANYPATH;
-	cqr->retries = 2;
+	cqr->retries = 256;
 	cqr->buildclk = get_clock();
 	cqr->status = DASD_CQR_FILLED;
 	return cqr;
diff -Nru a/drivers/s390/block/dasd_erp.c b/drivers/s390/block/dasd_erp.c
--- a/drivers/s390/block/dasd_erp.c	Sun May 16 01:18:33 2004
+++ b/drivers/s390/block/dasd_erp.c	Sun May 16 01:18:33 2004
@@ -7,7 +7,7 @@
  * Bugreports.to..: <Linux390@de.ibm.com>
  * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999-2001
  *
- * $Revision: 1.10 $
+ * $Revision: 1.11 $
  */
 
 #include <linux/config.h>
@@ -67,7 +67,8 @@
 	}
 	strncpy((char *) &cqr->magic, magic, 4);
 	ASCEBC((char *) &cqr->magic, 4);
-	atomic_inc(&device->ref_count);
+	set_bit(DASD_CQR_FLAGS_USE_ERP, &cqr->flags);
+	dasd_get_device(device);
 	return cqr;
 }
 
diff -Nru a/drivers/s390/char/Makefile b/drivers/s390/char/Makefile
--- a/drivers/s390/char/Makefile	Sun May 16 01:18:35 2004
+++ b/drivers/s390/char/Makefile	Sun May 16 01:18:35 2004
@@ -4,9 +4,10 @@
 
 obj-y += ctrlchar.o keyboard.o defkeymap.o
 
-tub3270-objs := raw3270.o tty3270.o fs3270.o
-obj-$(CONFIG_TN3270) += tub3270.o
+obj-$(CONFIG_TN3270) += raw3270.o
 obj-$(CONFIG_TN3270_CONSOLE) += con3270.o
+obj-$(CONFIG_TN3270_TTY) += tty3270.o
+obj-$(CONFIG_TN3270_FS) += fs3270.o
 
 obj-$(CONFIG_TN3215) += con3215.o
 
diff -Nru a/drivers/s390/char/raw3270.c b/drivers/s390/char/raw3270.c
--- a/drivers/s390/char/raw3270.c	Sun May 16 01:18:36 2004
+++ b/drivers/s390/char/raw3270.c	Sun May 16 01:18:36 2004
@@ -47,11 +47,11 @@
 #define RAW3270_FLAGS_14BITADDR	0	/* 14-bit buffer addresses */
 #define RAW3270_FLAGS_BUSY	1	/* Device busy, leave it alone */
 #define RAW3270_FLAGS_ATTN	2	/* Device sent an ATTN interrupt */
-#define RAW3270_FLAGS_SHUTDOWN	4	/* Device is in offline processing */
+#define RAW3270_FLAGS_READY	4	/* Device is useable by views */
 #define RAW3270_FLAGS_CONSOLE	8	/* Device is the console. */
 
-/* Lock to protect global data of raw3270 (devices, views, etc). */
-static spinlock_t raw3270_lock = SPIN_LOCK_UNLOCKED;
+/* Semaphore to protect global data of raw3270 (devices, views, etc). */
+static DECLARE_MUTEX(raw3270_sem);
 
 /* List of 3270 devices. */
 static struct list_head raw3270_devices = LIST_HEAD_INIT(raw3270_devices);
@@ -308,7 +308,7 @@
 	rp = view->dev;
 	if (!rp || rp->view != view)
 		rc = -EACCES;
-	else if (test_bit(RAW3270_FLAGS_SHUTDOWN, &rp->flags))
+	else if (!test_bit(RAW3270_FLAGS_READY, &rp->flags))
 		rc = -ENODEV;
 	else
 		rc =  __raw3270_start(rp, view, rq);
@@ -603,7 +603,6 @@
 {
 	static const unsigned char wbuf[] =
 		{ 0x00, 0x07, 0x01, 0xff, 0x03, 0x00, 0x81 };
-	unsigned long flags;
 	struct raw3270_ua *uap;
 	unsigned short count;
 	int rc;
@@ -638,6 +637,8 @@
 	/* Wait for attention interrupt. */
 #ifdef CONFIG_TN3270_CONSOLE
 	if (raw3270_registered == 0) {
+		unsigned long flags;
+
 		spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags);
 		while (!test_and_clear_bit(RAW3270_FLAGS_ATTN, &rp->flags))
 			wait_cons_dev();
@@ -764,7 +765,7 @@
 	 * Add device to list and find the smallest unused minor
 	 * number for it.
 	 */
-	spin_lock(&raw3270_lock);
+	down(&raw3270_sem);
 	/* Keep the list sorted. */
 	minor = 0;
 	rp->minor = -1;
@@ -781,7 +782,7 @@
 		rp->minor = minor;
 		list_add_tail(&rp->list, &raw3270_devices);
 	}
-	spin_unlock(&raw3270_lock);
+	up(&raw3270_sem);
 	/* No free minor number? Then give up. */
 	if (rp->minor == -1)
 		return -EUSERS;
@@ -811,6 +812,7 @@
 	raw3270_reset_device(rp);
 	raw3270_size_device(rp);
 	raw3270_reset_device(rp);
+	set_bit(RAW3270_FLAGS_READY, &rp->flags);
 	return rp;
 }
 
@@ -872,7 +874,7 @@
 	spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags);
 	if (rp->view == view)
 		rc = 0;
-	else if (test_bit(RAW3270_FLAGS_SHUTDOWN, &rp->flags))
+	else if (!test_bit(RAW3270_FLAGS_READY, &rp->flags))
 		rc = -ENODEV;
 	else {
 		oldview = 0;
@@ -921,7 +923,7 @@
 		list_del_init(&view->list);
 		list_add_tail(&view->list, &rp->view_list);
 		/* Try to activate another view. */
-		if (!test_bit(RAW3270_FLAGS_SHUTDOWN, &rp->flags)) {
+		if (test_bit(RAW3270_FLAGS_READY, &rp->flags)) {
 			list_for_each_entry(view, &rp->view_list, list)
 				if (view->fn->activate(view) == 0) {
 					rp->view = view;
@@ -942,13 +944,13 @@
 	struct raw3270 *rp;
 	int rc;
 
-	spin_lock(&raw3270_lock);
+	down(&raw3270_sem);
 	rc = -ENODEV;
 	list_for_each_entry(rp, &raw3270_devices, list) {
 		if (rp->minor != minor)
 			continue;
 		spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags);
-		if (!test_bit(RAW3270_FLAGS_SHUTDOWN, &rp->flags)) {
+		if (test_bit(RAW3270_FLAGS_READY, &rp->flags)) {
 			atomic_set(&view->ref_count, 2);
 			view->dev = rp;
 			view->fn = fn;
@@ -963,7 +965,7 @@
 		spin_unlock_irqrestore(get_ccwdev_lock(rp->cdev), flags);
 		break;
 	}
-	spin_unlock(&raw3270_lock);
+	up(&raw3270_sem);
 	return rc;
 }
 
@@ -977,25 +979,26 @@
 	struct raw3270_view *view, *tmp;
 	unsigned long flags;
 
-	spin_lock(&raw3270_lock);
+	down(&raw3270_sem);
 	view = ERR_PTR(-ENODEV);
 	list_for_each_entry(rp, &raw3270_devices, list) {
 		if (rp->minor != minor)
 			continue;
 		spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags);
-		if (!test_bit(RAW3270_FLAGS_SHUTDOWN, &rp->flags)) {
+		if (test_bit(RAW3270_FLAGS_READY, &rp->flags)) {
+			view = ERR_PTR(-ENOENT);
 			list_for_each_entry(tmp, &rp->view_list, list) {
 				if (tmp->fn == fn) {
 					raw3270_get_view(tmp);
 					view = tmp;
+					break;
 				}
 			}
-		} else
-			view = ERR_PTR(-ENOENT);
+		}
 		spin_unlock_irqrestore(get_ccwdev_lock(rp->cdev), flags);
 		break;
 	}
-	spin_unlock(&raw3270_lock);
+	up(&raw3270_sem);
 	return view;
 }
 
@@ -1007,6 +1010,7 @@
 {
 	unsigned long flags;
 	struct raw3270 *rp;
+	struct raw3270_view *nv;
 
 	rp = view->dev;
 	spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags);
@@ -1015,17 +1019,18 @@
 		rp->view = 0;
 	}
 	list_del_init(&view->list);
-	if (!rp->view && !test_bit(RAW3270_FLAGS_SHUTDOWN, &rp->flags)) {
+	if (!rp->view && test_bit(RAW3270_FLAGS_READY, &rp->flags)) {
 		/* Try to activate another view. */
-		list_for_each_entry(view, &rp->view_list, list)
-			if (view->fn->activate(view) == 0) {
-				rp->view = view;
+		list_for_each_entry(nv, &rp->view_list, list) {
+			if (nv->fn->activate(view) == 0) {
+				rp->view = nv;
 				break;
 			}
+		}
 	}
 	spin_unlock_irqrestore(get_ccwdev_lock(rp->cdev), flags);
 	/* Wait for reference counter to drop to zero. */
-	atomic_dec(&view->ref_count);
+	atomic_sub(2, &view->ref_count);
 	wait_event(raw3270_wait_queue, atomic_read(&view->ref_count) == 0);
 	if (view->fn->free)
 		view->fn->free(view);
@@ -1040,9 +1045,9 @@
 	struct ccw_device *cdev;
 
 	/* Remove from device chain. */
-	spin_lock(&raw3270_lock);
+	down(&raw3270_sem);
 	list_del_init(&rp->list);
-	spin_unlock(&raw3270_lock);
+	up(&raw3270_sem);
 
 	/* Disconnect from ccw_device. */
 	cdev = rp->cdev;
@@ -1109,8 +1114,48 @@
 	sysfs_create_group(&rp->cdev->dev.kobj, &raw3270_attr_group);
 }
 
-/* Hackish. A notifier chain would be cleaner. */
-extern void tty3270_notifier(int index, int active);
+/*
+ * Notifier for device addition/removal
+ */
+struct raw3270_notifier {
+	struct list_head list;
+	void (*notifier)(int, int);
+};
+
+static struct list_head raw3270_notifier = LIST_HEAD_INIT(raw3270_notifier);
+
+int raw3270_register_notifier(void (*notifier)(int, int))
+{
+	struct raw3270_notifier *np;
+	struct raw3270 *rp;
+
+	np = kmalloc(sizeof(struct raw3270_notifier), GFP_KERNEL);
+	if (!np)
+		return -ENOMEM;
+	np->notifier = notifier;
+	down(&raw3270_sem);
+	list_add_tail(&np->list, &raw3270_notifier);
+	list_for_each_entry(rp, &raw3270_devices, list) {
+		get_device(&rp->cdev->dev);
+		notifier(rp->minor, 1);
+	}
+	up(&raw3270_sem);
+	return 0;
+}
+
+void raw3270_unregister_notifier(void (*notifier)(int, int))
+{
+	struct raw3270_notifier *np;
+
+	down(&raw3270_sem);
+	list_for_each_entry(np, &raw3270_notifier, list)
+		if (np->notifier == notifier) {
+			list_del(&np->list);
+			kfree(np);
+			break;
+		}
+	up(&raw3270_sem);
+}
 
 /*
  * Set 3270 device online.
@@ -1119,6 +1164,7 @@
 raw3270_set_online (struct ccw_device *cdev)
 {
 	struct raw3270 *rp;
+	struct raw3270_notifier *np;
 
 	rp = raw3270_create_device(cdev);
 	if (IS_ERR(rp))
@@ -1127,7 +1173,11 @@
 	raw3270_size_device(rp);
 	raw3270_reset_device(rp);
 	raw3270_create_attributes(rp);
-	tty3270_notifier(rp->minor, 1);
+	set_bit(RAW3270_FLAGS_READY, &rp->flags);
+	down(&raw3270_sem);
+	list_for_each_entry(np, &raw3270_notifier, list)
+		np->notifier(rp->minor, 1);
+	up(&raw3270_sem);
 	return 0;
 }
 
@@ -1140,9 +1190,10 @@
 	unsigned long flags;
 	struct raw3270 *rp;
 	struct raw3270_view *v;
+	struct raw3270_notifier *np;
 
 	rp = cdev->dev.driver_data;
-	set_bit(RAW3270_FLAGS_SHUTDOWN, &rp->flags);
+	clear_bit(RAW3270_FLAGS_READY, &rp->flags);
 
 	sysfs_remove_group(&cdev->dev.kobj, &raw3270_attr_group);
 
@@ -1162,7 +1213,10 @@
 	}
 	spin_unlock_irqrestore(get_ccwdev_lock(cdev), flags);
 
-	tty3270_notifier(rp->minor, 0);
+	down(&raw3270_sem);
+	list_for_each_entry(np, &raw3270_notifier, list)
+		np->notifier(rp->minor, 0);
+	up(&raw3270_sem);
 
 	/* Reset 3270 device. */
 	raw3270_reset_device(rp);
@@ -1210,7 +1264,7 @@
 	.set_offline	= &raw3270_set_offline,
 };
 
-int
+static int
 raw3270_init(void)
 {
 	struct raw3270 *rp;
@@ -1222,18 +1276,17 @@
 	rc = ccw_driver_register(&raw3270_ccw_driver);
 	if (rc == 0) {
 		/* Create attributes for early (= console) device. */
-		spin_lock(&raw3270_lock);
+		down(&raw3270_sem);
 		list_for_each_entry(rp, &raw3270_devices, list) {
 			get_device(&rp->cdev->dev);
 			raw3270_create_attributes(rp);
-			tty3270_notifier(rp->minor, 1);
 		}
-		spin_unlock(&raw3270_lock);
+		up(&raw3270_sem);
 	}
 	return rc;
 }
 
-void
+static void
 raw3270_exit(void)
 {
 	ccw_driver_unregister(&raw3270_ccw_driver);
@@ -1241,8 +1294,9 @@
 
 MODULE_LICENSE("GPL");
 
-EXPORT_SYMBOL(raw3270_init);
-EXPORT_SYMBOL(raw3270_exit);
+module_init(raw3270_init);
+module_exit(raw3270_exit);
+
 EXPORT_SYMBOL(raw3270_request_alloc);
 EXPORT_SYMBOL(raw3270_request_free);
 EXPORT_SYMBOL(raw3270_request_reset);
@@ -1258,3 +1312,6 @@
 EXPORT_SYMBOL(raw3270_deactivate_view);
 EXPORT_SYMBOL(raw3270_start);
 EXPORT_SYMBOL(raw3270_start_irq);
+EXPORT_SYMBOL(raw3270_register_notifier);
+EXPORT_SYMBOL(raw3270_unregister_notifier);
+EXPORT_SYMBOL(raw3270_wait_queue);
diff -Nru a/drivers/s390/char/raw3270.h b/drivers/s390/char/raw3270.h
--- a/drivers/s390/char/raw3270.h	Sun May 16 01:18:35 2004
+++ b/drivers/s390/char/raw3270.h	Sun May 16 01:18:35 2004
@@ -78,9 +78,6 @@
 
 #define RAW3270_MAXDEVS	256
 
-int raw3270_init(void);
-void raw3270_exit(void);
-
 /* For TUBGETMOD and TUBSETMOD. Should include. */
 struct raw3270_iocb {
 	short model;
@@ -189,6 +186,10 @@
 
 struct raw3270 *raw3270_setup_console(struct ccw_device *cdev);
 void raw3270_wait_cons_dev(struct raw3270 *);
+
+/* Notifier for device addition/removal */
+int raw3270_register_notifier(void (*notifier)(int, int));
+void raw3270_unregister_notifier(void (*notifier)(int, int));
 
 /*
  * Little memory allocator for string objects. 
diff -Nru a/drivers/s390/char/tty3270.c b/drivers/s390/char/tty3270.c
--- a/drivers/s390/char/tty3270.c	Sun May 16 01:18:34 2004
+++ b/drivers/s390/char/tty3270.c	Sun May 16 01:18:34 2004
@@ -35,6 +35,7 @@
 #define TTY3270_STRING_PAGES 5
 
 struct tty_driver *tty3270_driver;
+static int tty3270_max_index;
 
 struct raw3270_fn tty3270_fn;
 
@@ -836,6 +837,22 @@
 	tty3270_free_view((struct tty3270 *) view);
 }
 
+/*
+ * Delayed freeing of tty3270 views.
+ */
+static void
+tty3270_del_views(void)
+{
+	struct tty3270 *tp;
+	int i;
+
+	for (i = 0; i < tty3270_max_index; i++) {
+		tp = (struct tty3270 *) raw3270_find_view(&tty3270_fn, i);
+		if (!IS_ERR(tp))
+			raw3270_del_view(&tp->view);
+	}
+}
+
 struct raw3270_fn tty3270_fn = {
 	.activate = tty3270_activate,
 	.deactivate = tty3270_deactivate,
@@ -867,6 +884,12 @@
 		tp->inattr = TF_INPUT;
 		return 0;
 	}
+	if (tty3270_max_index < tty->index + 1)
+		tty3270_max_index = tty->index + 1;
+
+	/* Quick exit if there is no device for tty->index. */
+	if (PTR_ERR(tp) == -ENODEV)
+		return -ENODEV;
 
 	/* Allocate tty3270 structure on first open. */
 	tp = tty3270_alloc_view();
@@ -1778,9 +1801,6 @@
 	struct tty_driver *driver;
 	int ret;
 
-	ret = raw3270_init();
-	if (ret)
-		return ret;
 	driver = alloc_tty_driver(256);
 	if (!driver)
 		return -ENOMEM;
@@ -1807,6 +1827,14 @@
 		return ret;
 	}
 	tty3270_driver = driver;
+	ret = raw3270_register_notifier(tty3270_notifier);
+	if (ret) {
+		printk(KERN_ERR "tty3270 notifier registration failed "
+		       "with %d\n", ret);
+		put_tty_driver(driver);
+		return ret;
+
+	}
 	return 0;
 }
 
@@ -1815,10 +1843,11 @@
 {
 	struct tty_driver *driver;
 
+	raw3270_unregister_notifier(tty3270_notifier);
 	driver = tty3270_driver;
 	tty3270_driver = 0;
 	tty_unregister_driver(driver);
-	raw3270_exit();
+	tty3270_del_views();
 }
 
 MODULE_LICENSE("GPL");
diff -Nru a/drivers/s390/cio/css.c b/drivers/s390/cio/css.c
--- a/drivers/s390/cio/css.c	Sun May 16 01:18:33 2004
+++ b/drivers/s390/cio/css.c	Sun May 16 01:18:33 2004
@@ -1,7 +1,7 @@
 /*
  *  drivers/s390/cio/css.c
  *  driver for channel subsystem
- *   $Revision: 1.73 $
+ *   $Revision: 1.74 $
  *
  *    Copyright (C) 2002 IBM Deutschland Entwicklung GmbH,
  *			 IBM Corporation
@@ -218,12 +218,21 @@
 		 * We don't notify the driver since we have to throw the device
 		 * away in any case.
 		 */
-		device_unregister(&sch->dev);
-		/* Reset intparm to zeroes. */
-		sch->schib.pmcw.intparm = 0;
-		cio_modify(sch);
-		put_device(&sch->dev);
-		ret = css_probe_device(irq);
+		if (!disc) {
+			device_unregister(&sch->dev);
+			/* Reset intparm to zeroes. */
+			sch->schib.pmcw.intparm = 0;
+			cio_modify(sch);
+			put_device(&sch->dev);
+			ret = css_probe_device(irq);
+		} else {
+			/*
+			 * We can't immediately deregister the disconnected
+			 * device since it might block.
+			 */
+			device_trigger_reprobe(sch);
+			ret = 0;
+		}
 		break;
 	case CIO_OPER:
 		if (disc)
diff -Nru a/drivers/s390/cio/device.c b/drivers/s390/cio/device.c
--- a/drivers/s390/cio/device.c	Sun May 16 01:18:36 2004
+++ b/drivers/s390/cio/device.c	Sun May 16 01:18:36 2004
@@ -1,7 +1,7 @@
 /*
  *  drivers/s390/cio/device.c
  *  bus driver for ccw devices
- *   $Revision: 1.115 $
+ *   $Revision: 1.117 $
  *
  *    Copyright (C) 2002 IBM Deutschland Entwicklung GmbH,
  *			 IBM Corporation
@@ -26,6 +26,7 @@
 #include "cio.h"
 #include "css.h"
 #include "device.h"
+#include "ioasm.h"
 
 /******************* bus type handling ***********************/
 
@@ -499,20 +500,93 @@
 	return ret;
 }
 
-void
-ccw_device_do_unreg_rereg(void *data)
+static struct ccw_device *
+get_disc_ccwdev_by_devno(unsigned int devno, struct ccw_device *sibling)
 {
+	struct ccw_device *cdev;
+	struct list_head *entry;
 	struct device *dev;
 
-	dev = (struct device *)data;
-	device_remove_files(dev);
-	device_del(dev);
-	if (device_add(dev)) {
+	if (!get_bus(&ccw_bus_type))
+		return NULL;
+	down_read(&ccw_bus_type.subsys.rwsem);
+	cdev = NULL;
+	list_for_each(entry, &ccw_bus_type.devices.list) {
+		dev = get_device(container_of(entry,
+					      struct device, bus_list));
+		if (!dev)
+			continue;
+		cdev = to_ccwdev(dev);
+		if ((cdev->private->state == DEV_STATE_DISCONNECTED) &&
+		    (cdev->private->devno == devno) &&
+		    (!strncmp(cdev->dev.bus_id, sibling->dev.bus_id, 4))) {
+			cdev->private->state = DEV_STATE_NOT_OPER;
+			break;
+		}
 		put_device(dev);
+		cdev = NULL;
+	}
+	up_read(&ccw_bus_type.subsys.rwsem);
+	put_bus(&ccw_bus_type);
+
+	return cdev;
+}
+
+void
+ccw_device_do_unreg_rereg(void *data)
+{
+	struct ccw_device *cdev;
+	struct subchannel *sch;
+	int need_rename;
+
+	cdev = (struct ccw_device *)data;
+	sch = to_subchannel(cdev->dev.parent);
+	if (cdev->private->devno != sch->schib.pmcw.dev) {
+		/*
+		 * The device number has changed. This is usually only when
+		 * a device has been detached under VM and then re-appeared
+		 * on another subchannel because of a different attachment
+		 * order than before. Ideally, we should should just switch
+		 * subchannels, but unfortunately, this is not possible with
+		 * the current implementation.
+		 * Instead, we search for the old subchannel for this device
+		 * number and deregister so there are no collisions with the
+		 * newly registered ccw_device.
+		 * FIXME: Find another solution so the block layer doesn't
+		 *        get possibly sick...
+		 */
+		struct ccw_device *other_cdev;
+
+		need_rename = 1;
+		other_cdev = get_disc_ccwdev_by_devno(sch->schib.pmcw.dev,
+						      cdev);
+		if (other_cdev) {
+			struct subchannel *other_sch;
+
+			other_sch = to_subchannel(other_cdev->dev.parent);
+			if (get_device(&other_sch->dev)) {
+				stsch(other_sch->irq, &other_sch->schib);
+				if (other_sch->schib.pmcw.dnv) {
+					other_sch->schib.pmcw.intparm = 0;
+					cio_modify(other_sch);
+				}
+				device_unregister(&other_sch->dev);
+			}
+		}
+		cdev->private->devno = sch->schib.pmcw.dev;
+	} else
+		need_rename = 0;
+	device_remove_files(&cdev->dev);
+	device_del(&cdev->dev);
+	if (need_rename)
+		snprintf (cdev->dev.bus_id, BUS_ID_SIZE, "0.0.%04x",
+			  sch->schib.pmcw.dev);
+	if (device_add(&cdev->dev)) {
+		put_device(&cdev->dev);
 		return;
 	}
-	if (device_add_files(dev))
-		device_unregister(dev);
+	if (device_add_files(&cdev->dev))
+		device_unregister(&cdev->dev);
 }
 
 static void
diff -Nru a/drivers/s390/cio/device_fsm.c b/drivers/s390/cio/device_fsm.c
--- a/drivers/s390/cio/device_fsm.c	Sun May 16 01:18:35 2004
+++ b/drivers/s390/cio/device_fsm.c	Sun May 16 01:18:35 2004
@@ -152,14 +152,15 @@
 	/*
 	 * Check if cu type and device type still match. If
 	 * not, it is certainly another device and we have to
-	 * de- and re-register.
+	 * de- and re-register. Also check here for non-matching devno.
 	 */
 	if (cdev->id.cu_type != cdev->private->senseid.cu_type ||
 	    cdev->id.cu_model != cdev->private->senseid.cu_model ||
 	    cdev->id.dev_type != cdev->private->senseid.dev_type ||
-	    cdev->id.dev_model != cdev->private->senseid.dev_model) {
+	    cdev->id.dev_model != cdev->private->senseid.dev_model ||
+	    cdev->private->devno != sch->schib.pmcw.dev) {
 		PREPARE_WORK(&cdev->private->kick_work,
-			     ccw_device_do_unreg_rereg, (void *)&cdev->dev);
+			     ccw_device_do_unreg_rereg, (void *)cdev);
 		queue_work(ccw_device_work, &cdev->private->kick_work);
 		return;
 	}
@@ -295,7 +296,7 @@
 		sch->driver->notify(&sch->dev, CIO_OPER) : 0;
 	if (!ret)
 		/* Driver doesn't want device back. */
-		ccw_device_do_unreg_rereg((void *)&cdev->dev);
+		ccw_device_do_unreg_rereg((void *)cdev);
 	else
 		wake_up(&cdev->private->wait_q);
 }
@@ -476,6 +477,8 @@
 {
 	cdev->private->flags.doverify = 0;
 	switch (err) {
+	case -EOPNOTSUPP: /* path grouping not supported, just set online. */
+		cdev->private->options.pgroup = 0;
 	case 0:
 		ccw_device_done(cdev, DEV_STATE_ONLINE);
 		break;
diff -Nru a/drivers/s390/cio/device_pgid.c b/drivers/s390/cio/device_pgid.c
--- a/drivers/s390/cio/device_pgid.c	Sun May 16 01:18:35 2004
+++ b/drivers/s390/cio/device_pgid.c	Sun May 16 01:18:35 2004
@@ -338,6 +338,10 @@
 		 * One of those strange devices which claim to be able
 		 * to do multipathing but not for Set Path Group ID.
 		 */
+		if (cdev->private->flags.pgid_single) {
+			ccw_device_verify_done(cdev, -EOPNOTSUPP);
+			break;
+		}
 		cdev->private->flags.pgid_single = 1;
 		/* fall through. */
 	case -EAGAIN:		/* Try again. */
diff -Nru a/drivers/s390/net/iucv.c b/drivers/s390/net/iucv.c
--- a/drivers/s390/net/iucv.c	Sun May 16 01:18:33 2004
+++ b/drivers/s390/net/iucv.c	Sun May 16 01:18:33 2004
@@ -1,5 +1,5 @@
 /* 
- * $Id: iucv.c,v 1.28 2004/04/15 06:34:58 braunu Exp $
+ * $Id: iucv.c,v 1.30 2004/05/13 09:21:23 braunu Exp $
  *
  * IUCV network driver
  *
@@ -29,7 +29,7 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
- * RELEASE-TAG: IUCV lowlevel driver $Revision: 1.28 $
+ * RELEASE-TAG: IUCV lowlevel driver $Revision: 1.30 $
  *
  */
 
@@ -98,7 +98,7 @@
 	__u8  res3[24];
 } iucv_GeneralInterrupt;
 
-static iucv_GeneralInterrupt *iucv_external_int_buffer;
+static iucv_GeneralInterrupt *iucv_external_int_buffer = NULL;
 
 /* Spin Lock declaration */
 
@@ -351,7 +351,7 @@
 static void
 iucv_banner(void)
 {
-	char vbuf[] = "$Revision: 1.28 $";
+	char vbuf[] = "$Revision: 1.30 $";
 	char *version = vbuf;
 
 	if ((version = strchr(version, ':'))) {
@@ -403,6 +403,7 @@
 		       "%s: Could not allocate external interrupt buffer\n",
 		       __FUNCTION__);
 		s390_root_dev_unregister(iucv_root);
+		bus_unregister(&iucv_bus);
 		return -ENOMEM;
 	}
 	memset(iucv_external_int_buffer, 0, sizeof(iucv_GeneralInterrupt));
@@ -416,6 +417,7 @@
 		kfree(iucv_external_int_buffer);
 		iucv_external_int_buffer = NULL;
 		s390_root_dev_unregister(iucv_root);
+		bus_unregister(&iucv_bus);
 		return -ENOMEM;
 	}
 	memset(iucv_param_pool, 0, sizeof(iucv_param) * PARAM_POOL_SIZE);
@@ -441,10 +443,14 @@
 iucv_exit(void)
 {
 	iucv_retrieve_buffer();
-      	if (iucv_external_int_buffer)
+      	if (iucv_external_int_buffer) {
 		kfree(iucv_external_int_buffer);
-	if (iucv_param_pool)
+		iucv_external_int_buffer = NULL;
+	}
+	if (iucv_param_pool) {
 		kfree(iucv_param_pool);
+		iucv_param_pool = NULL;
+	}
 	s390_root_dev_unregister(iucv_root);
 	bus_unregister(&iucv_bus);
 	printk(KERN_INFO "IUCV lowlevel driver unloaded\n");
diff -Nru a/drivers/s390/net/lcs.c b/drivers/s390/net/lcs.c
--- a/drivers/s390/net/lcs.c	Sun May 16 01:18:33 2004
+++ b/drivers/s390/net/lcs.c	Sun May 16 01:18:33 2004
@@ -11,7 +11,7 @@
  *			  Frank Pavlic (pavlic@de.ibm.com) and
  *		 	  Martin Schwidefsky <schwidefsky@de.ibm.com>
  *
- *    $Revision: 1.74 $	 $Date: 2004/04/05 00:01:04 $
+ *    $Revision: 1.80 $	 $Date: 2004/05/13 08:22:06 $
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -58,7 +58,7 @@
 /**
  * initialization string for output
  */
-#define VERSION_LCS_C  "$Revision: 1.74 $"
+#define VERSION_LCS_C  "$Revision: 1.80 $"
 
 static char version[] __initdata = "LCS driver ("VERSION_LCS_C "/" VERSION_LCS_H ")";
 static char debug_buffer[255];
@@ -99,9 +99,9 @@
 		return -ENOMEM;
 	}
 	debug_register_view(lcs_dbf_setup, &debug_hex_ascii_view);
-	debug_set_level(lcs_dbf_setup, 5);
+	debug_set_level(lcs_dbf_setup, 2);
 	debug_register_view(lcs_dbf_trace, &debug_hex_ascii_view);
-	debug_set_level(lcs_dbf_trace, 5);
+	debug_set_level(lcs_dbf_trace, 2);
 	return 0;
 }
 
@@ -338,6 +338,7 @@
 		  (void *)lcs_start_kernel_thread,card);
 	card->thread_mask = 0;
 	spin_lock_init(&card->lock);
+	spin_lock_init(&card->ipm_lock);
 #ifdef CONFIG_IP_MULTICAST
 	INIT_LIST_HEAD(&card->ipm_list);
 #endif
@@ -935,18 +936,14 @@
 /**
  * set or del multicast address on LCS card
  */
-static int
-lcs_fix_multicast_list(void *data)
+static void
+lcs_fix_multicast_list(struct lcs_card *card)
 {
 	struct list_head *l, *n;
 	struct lcs_ipm_list *ipm;
-	struct lcs_card *card;
 
-	card = (struct lcs_card *) data;
-
-	daemonize("fixipm");
 	LCS_DBF_TEXT(4,trace, "fixipm");
-	spin_lock(&card->lock);
+	spin_lock(&card->ipm_lock);
 	list_for_each_safe(l, n, &card->ipm_list) {
 		ipm = list_entry(l, struct lcs_ipm_list, list);
 		switch (ipm->ipm_state) {
@@ -968,8 +965,7 @@
 	}
 	if (card->state == DEV_STATE_UP)
 		netif_wake_queue(card->dev);
-	spin_unlock(&card->lock);
-	return 0;
+	spin_unlock(&card->ipm_lock);
 }
 
 /**
@@ -988,28 +984,30 @@
 /**
  * function called by net device to handle multicast address relevant things
  */
-static void
-lcs_set_multicast_list(struct net_device *dev)
+static int
+lcs_register_mc_addresses(void *data)
 {
+	struct lcs_card *card;
 	char buf[MAX_ADDR_LEN];
 	struct list_head *l;
 	struct ip_mc_list *im4;
 	struct in_device *in4_dev;
 	struct lcs_ipm_list *ipm, *tmp;
-	struct lcs_card *card;
 
-	LCS_DBF_TEXT(4, trace, "setmulti");
-	in4_dev = in_dev_get(dev);
+	daemonize("regipm");
+	LCS_DBF_TEXT(4, trace, "regmulti");
+
+	card = (struct lcs_card *) data;
+	in4_dev = in_dev_get(card->dev);
 	if (in4_dev == NULL)
-		return;
+		return 0;
 	read_lock(&in4_dev->lock);
-	card = (struct lcs_card *) dev->priv;
-	spin_lock(&card->lock);
+	spin_lock(&card->ipm_lock);
 	/* Check for multicast addresses to be removed. */
 	list_for_each(l, &card->ipm_list) {
 		ipm = list_entry(l, struct lcs_ipm_list, list);
 		for (im4 = in4_dev->mc_list; im4 != NULL; im4 = im4->next) {
-			lcs_get_mac_for_ipm(im4->multiaddr, buf, dev);
+			lcs_get_mac_for_ipm(im4->multiaddr, buf, card->dev);
 			if (memcmp(buf, &ipm->ipm.mac_addr,
 				   LCS_MAC_LENGTH) == 0 &&
 			    ipm->ipm.ip_addr == im4->multiaddr)
@@ -1020,7 +1018,7 @@
 	}
 	/* Check for multicast addresses to be added. */
 	for (im4 = in4_dev->mc_list; im4; im4 = im4->next) {
-		lcs_get_mac_for_ipm(im4->multiaddr, buf, dev);
+		lcs_get_mac_for_ipm(im4->multiaddr, buf, card->dev);
 		ipm = NULL;
 		list_for_each(l, &card->ipm_list) {
 			tmp = list_entry(l, struct lcs_ipm_list, list);
@@ -1046,14 +1044,56 @@
 		ipm->ipm_state = LCS_IPM_STATE_SET_REQUIRED;
 		list_add(&ipm->list, &card->ipm_list);
 	}
-	spin_unlock(&card->lock);
+	spin_unlock(&card->ipm_lock);
 	read_unlock(&in4_dev->lock);
-	set_bit(3, &card->thread_mask);
-	schedule_work(&card->kernel_thread_starter);
+	lcs_fix_multicast_list(card);
+	in_dev_put(in4_dev);
+	return 0;
+}
+/**
+ * function called by net device to
+ * handle multicast address relevant things
+ */
+static void
+lcs_set_multicast_list(struct net_device *dev)
+{
+        struct lcs_card *card;
+
+        LCS_DBF_TEXT(4, trace, "setmulti");
+        card = (struct lcs_card *) dev->priv;
+        set_bit(3, &card->thread_mask);
+        schedule_work(&card->kernel_thread_starter);
 }
 
 #endif /* CONFIG_IP_MULTICAST */
 
+static long
+lcs_check_irb_error(struct ccw_device *cdev, struct irb *irb)
+{
+	if (!IS_ERR(irb))
+		return 0;
+
+	switch (PTR_ERR(irb)) {
+	case -EIO:
+		PRINT_WARN("i/o-error on device %s\n", cdev->dev.bus_id);
+		LCS_DBF_TEXT(2, trace, "ckirberr");
+		LCS_DBF_TEXT_(2, trace, "  rc%d", -EIO);
+		break;
+	case -ETIMEDOUT:
+		PRINT_WARN("timeout on device %s\n", cdev->dev.bus_id);
+		LCS_DBF_TEXT(2, trace, "ckirberr");
+		LCS_DBF_TEXT_(2, trace, "  rc%d", -ETIMEDOUT);
+		break;
+	default:
+		PRINT_WARN("unknown error %ld on device %s\n", PTR_ERR(irb),
+			   cdev->dev.bus_id);
+		LCS_DBF_TEXT(2, trace, "ckirberr");
+		LCS_DBF_TEXT(2, trace, "  rc???");
+	}
+	return PTR_ERR(irb);
+}
+
+
 /**
  * IRQ Handler for LCS channels
  */
@@ -1064,6 +1104,9 @@
 	struct lcs_channel *channel;
 	int index;
 
+	if (lcs_check_irb_error(cdev, irb))
+		return;
+
 	card = CARD_FROM_DEV(cdev);
 	if (card->read.ccwdev == cdev)
 		channel = &card->read;
@@ -1513,7 +1556,7 @@
 		kernel_thread(lcs_lgw_stoplan_thread, (void *) card, SIGCHLD);
 #ifdef CONFIG_IP_MULTICAST
 	if (test_and_clear_bit(3, &card->thread_mask))
-		kernel_thread(lcs_fix_multicast_list, (void *) card, SIGCHLD);
+		kernel_thread(lcs_register_mc_addresses, (void *) card, SIGCHLD);
 #endif
 }
 
@@ -1903,7 +1946,7 @@
 		goto out;
 	memcpy(card->dev->dev_addr, card->mac, LCS_MAC_LENGTH);
 #ifdef CONFIG_IP_MULTICAST
-	if (lcs_check_multicast_support(card))
+	if (!lcs_check_multicast_support(card))
 		card->dev->set_multicast_list = lcs_set_multicast_list;
 #endif
 	netif_stop_queue(card->dev);
diff -Nru a/drivers/s390/net/lcs.h b/drivers/s390/net/lcs.h
--- a/drivers/s390/net/lcs.h	Sun May 16 01:18:36 2004
+++ b/drivers/s390/net/lcs.h	Sun May 16 01:18:36 2004
@@ -6,7 +6,7 @@
 #include <linux/workqueue.h>
 #include <asm/ccwdev.h>
 
-#define VERSION_LCS_H "$Revision: 1.15 $"
+#define VERSION_LCS_H "$Revision: 1.16 $"
 
 #define LCS_DBF_TEXT(level, name, text) \
 	do { \
@@ -273,6 +273,7 @@
  */
 struct lcs_card {
 	spinlock_t lock;
+	spinlock_t ipm_lock;
 	enum lcs_dev_states state;
 	struct net_device *dev;
 	struct net_device_stats stats;
diff -Nru a/drivers/s390/net/netiucv.c b/drivers/s390/net/netiucv.c
--- a/drivers/s390/net/netiucv.c	Sun May 16 01:18:35 2004
+++ b/drivers/s390/net/netiucv.c	Sun May 16 01:18:35 2004
@@ -1,5 +1,5 @@
 /*
- * $Id: netiucv.c,v 1.51 2004/04/23 08:11:21 mschwide Exp $
+ * $Id: netiucv.c,v 1.53 2004/05/07 14:29:37 mschwide Exp $
  *
  * IUCV network driver
  *
@@ -30,7 +30,7 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
- * RELEASE-TAG: IUCV network driver $Revision: 1.51 $
+ * RELEASE-TAG: IUCV network driver $Revision: 1.53 $
  *
  */
 
@@ -60,6 +60,7 @@
 #include <asm/io.h>
 #include <asm/bitops.h>
 #include <asm/uaccess.h>
+#include <asm/ebcdic.h>
 
 #include "iucv.h"
 #include "fsm.h"
@@ -113,9 +114,6 @@
  */
 static struct iucv_connection *connections;
 
-/* Keep track of interfaces. */
-static int ifno;
-
 /**
  * Representation of event-data for the
  * connection state machine.
@@ -549,7 +547,7 @@
 	iucv_MessagePending *eib = (iucv_MessagePending *)ev->data;
 	struct netiucv_priv *privptr = (struct netiucv_priv *)conn->netdev->priv;
 
-	__u16 msglen = eib->ln1msg2.ipbfln1f;
+	__u32 msglen = eib->ln1msg2.ipbfln1f;
 	int rc;
 
 	pr_debug("%s() called\n", __FUNCTION__);
@@ -571,6 +569,7 @@
 			  conn->rx_buff->data, msglen, NULL, NULL, NULL);
 	if (rc != 0 || msglen < 5) {
 		privptr->stats.rx_errors++;
+		printk(KERN_INFO "iucv_receive returned %08x\n", rc);
 		return;
 	}
 	netiucv_unpack_skb(conn, conn->rx_buff);
@@ -647,7 +646,7 @@
 			fsm_newstate(fi, CONN_STATE_IDLE);
 			if (privptr)
 				privptr->stats.tx_errors += txpackets;
-			printk(KERN_DEBUG "iucv_send returned %08x\n",
+			printk(KERN_INFO "iucv_send returned %08x\n",
 				rc);
 		} else {
 			if (privptr) {
@@ -770,7 +769,7 @@
 	struct iucv_event *ev = (struct iucv_event *)arg;
 	struct iucv_connection *conn = ev->conn;
 	__u16 msglimit;
-	int rc;
+	int rc, len;
 	__u8 iucvMagic[16] = {
 	0xF0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
         0xF0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40
@@ -778,7 +777,10 @@
 
 	pr_debug("%s() called\n", __FUNCTION__);
 
-	memcpy(iucvMagic, conn->netdev->name, IFNAMSIZ);
+	len = (IFNAMSIZ < sizeof(conn->netdev->name)) ?
+		IFNAMSIZ : sizeof(conn->netdev->name);
+	memcpy(iucvMagic, conn->netdev->name, len);
+	ASCEBC (iucvMagic, len);
 	if (conn->handle == 0) {
 		conn->handle =
 			iucv_register_program(iucvMagic, conn->userid, mask,
@@ -992,6 +994,7 @@
 dev_action_connup(fsm_instance *fi, int event, void *arg)
 {
 	struct net_device   *dev = (struct net_device *)arg;
+	struct netiucv_priv *privptr = dev->priv;
 
 	pr_debug("%s() called\n", __FUNCTION__);
 
@@ -999,8 +1002,8 @@
 		case DEV_STATE_STARTWAIT:
 			fsm_newstate(fi, DEV_STATE_RUNNING);
 			printk(KERN_INFO
-			       "%s: connected with remote side\n",
-			       dev->name);
+			       "%s: connected with remote side %s\n",
+			       dev->name, privptr->conn->userid);
 			break;
 		case DEV_STATE_STOPWAIT:
 			printk(KERN_INFO
@@ -1140,7 +1143,7 @@
 				skb_pull(skb, NETIUCV_HDRLEN);
 				skb_trim(skb, skb->len - NETIUCV_HDRLEN);
 			}
-			printk(KERN_DEBUG "iucv_send returned %08x\n",
+			printk(KERN_INFO "iucv_send returned %08x\n",
 				rc);
 		} else {
 			if (copied)
@@ -1612,7 +1615,7 @@
 }
 
 static int
-netiucv_register_device(struct net_device *ndev, int ifno)
+netiucv_register_device(struct net_device *ndev)
 {
 	struct netiucv_priv *priv = ndev->priv;
 	struct device *dev = kmalloc(sizeof(struct device), GFP_KERNEL);
@@ -1623,7 +1626,7 @@
 
 	if (dev) {
 		memset(dev, 0, sizeof(struct device));
-		snprintf(dev->bus_id, BUS_ID_SIZE, "netiucv%x", ifno);
+		snprintf(dev->bus_id, BUS_ID_SIZE, "net%s", ndev->name);
 		dev->bus = &iucv_bus;
 		dev->parent = iucv_root;
 		/*
@@ -1801,16 +1804,15 @@
  * Allocate and initialize everything of a net device.
  */
 static struct net_device *
-netiucv_init_netdevice(int ifno, char *username)
+netiucv_init_netdevice(char *username)
 {
 	struct netiucv_priv *privptr;
 	struct net_device *dev;
 
-	dev = alloc_netdev(sizeof(struct netiucv_priv), "",
+	dev = alloc_netdev(sizeof(struct netiucv_priv), "iucv%d",
 			   netiucv_setup_netdevice);
 	if (!dev)
 		return NULL;
-	sprintf(dev->name, "iucv%d", ifno);
 
         privptr = (struct netiucv_priv *)dev->priv;
 	privptr->fsm = init_fsm("netiucvdev", dev_state_names,
@@ -1861,7 +1863,7 @@
 	while (i<9)
 		username[i++] = ' ';
 	username[9] = '\0';
-	dev = netiucv_init_netdevice(ifno, username);
+	dev = netiucv_init_netdevice(username);
 	if (!dev) {
 		printk(KERN_WARNING
 		       "netiucv: Could not allocate network device structure "
@@ -1869,16 +1871,18 @@
 		return -ENODEV;
 	}
 	
-	if ((ret = netiucv_register_device(dev, ifno)))
-		goto out_free_ndev;
-	/* sysfs magic */
-	SET_NETDEV_DEV(dev, (struct device*)((struct netiucv_priv*)dev->priv)->dev);
 	if ((ret = register_netdev(dev))) {
-		netiucv_unregister_device((struct device*)((struct netiucv_priv*)dev->priv)->dev);
 		goto out_free_ndev;
 	}
+
+	if ((ret = netiucv_register_device(dev))) {
+		unregister_netdev(dev);
+		goto out_free_ndev;
+	}
+
+	/* sysfs magic */
+	SET_NETDEV_DEV(dev, (struct device*)((struct netiucv_priv*)dev->priv)->dev);
 	printk(KERN_INFO "%s: '%s'\n", dev->name, netiucv_printname(username));
-	ifno++;
 	
 	return count;
 
@@ -1891,6 +1895,61 @@
 
 DRIVER_ATTR(connection, 0200, NULL, conn_write);
 
+static ssize_t
+remove_write (struct device_driver *drv, const char *buf, size_t count)
+{
+	struct iucv_connection **clist = &connections;
+        struct net_device *ndev;
+        struct netiucv_priv *priv;
+        struct device *dev;
+        char name[IFNAMSIZ];
+        char *p;
+        int i;
+
+        pr_debug("%s() called\n", __FUNCTION__);
+
+        if (count >= IFNAMSIZ)
+                count = IFNAMSIZ-1;
+
+        for (i=0, p=(char *)buf; i<count && *p; i++, p++) {
+                if ((*p == '\n') | (*p == ' ')) {
+                        /* trailing lf, grr */
+                        break;
+                } else {
+                        name[i]=*p;
+                }
+        }
+        name[i] = '\0';
+
+        while (*clist) {
+                ndev = (*clist)->netdev;
+                priv = (struct netiucv_priv*)ndev->priv;
+                dev = priv->dev;
+
+                if (strncmp(name, ndev->name, count)) {
+                        clist = &((*clist)->next);
+                        continue;
+                }
+                if (ndev->flags & (IFF_UP | IFF_RUNNING)) {
+                        printk(KERN_WARNING
+                                "netiucv: net device %s active with peer %s\n",
+                                ndev->name, priv->conn->userid);
+                        printk(KERN_WARNING
+                                "netiucv: %s cannot be removed\n",
+                                ndev->name);
+                        return -EBUSY;
+                }
+                unregister_netdev(ndev);
+                netiucv_unregister_device(dev);
+                return count;
+        }
+        printk(KERN_WARNING
+                "netiucv: net device %s unknown\n", name);
+        return -EINVAL;
+}
+
+DRIVER_ATTR(remove, 0200, NULL, remove_write);
+
 static struct device_driver netiucv_driver = {
 	.name = "netiucv",
 	.bus  = &iucv_bus,
@@ -1899,7 +1958,7 @@
 static void
 netiucv_banner(void)
 {
-	char vbuf[] = "$Revision: 1.51 $";
+	char vbuf[] = "$Revision: 1.53 $";
 	char *version = vbuf;
 
 	if ((version = strchr(version, ':'))) {
@@ -1924,6 +1983,7 @@
 	}
 
 	driver_remove_file(&netiucv_driver, &driver_attr_connection);
+	driver_remove_file(&netiucv_driver, &driver_attr_remove);
 	driver_unregister(&netiucv_driver);
 
 	printk(KERN_INFO "NETIUCV driver unloaded\n");
@@ -1943,10 +2003,10 @@
 
 	/* Add entry for specifying connections. */
 	ret = driver_create_file(&netiucv_driver, &driver_attr_connection);
-
-	if (ret == 0)
+	if (ret == 0) {
+		ret = driver_create_file(&netiucv_driver, &driver_attr_remove);
 		netiucv_banner();
-	else {
+	} else {
 		printk(KERN_ERR "NETIUCV: failed to add driver attribute.\n");
 		driver_unregister(&netiucv_driver);
 	}
diff -Nru a/drivers/s390/net/qeth.h b/drivers/s390/net/qeth.h
--- a/drivers/s390/net/qeth.h	Sun May 16 01:18:33 2004
+++ b/drivers/s390/net/qeth.h	Sun May 16 01:18:33 2004
@@ -23,7 +23,7 @@
 
 #include "qeth_mpc.h"
 
-#define VERSION_QETH_H 		"$Revision: 1.102 $"
+#define VERSION_QETH_H 		"$Revision: 1.107 $"
 
 #ifdef CONFIG_QETH_IPV6
 #define QETH_VERSION_IPV6 	":IPv6"
@@ -186,6 +186,8 @@
 	__u64 outbound_start_time;
 	unsigned int outbound_cnt;
 	unsigned int outbound_time;
+	unsigned int inbound_do_qdio;
+	unsigned int outbound_do_qdio;
 };
 #endif /* CONFIG_QETH_PERF_STATS */
 
@@ -279,7 +281,7 @@
 #define QETH_IN_BUF_COUNT_MAX 128
 #define QETH_MAX_BUFFER_ELEMENTS(card) ((card)->qdio.in_buf_size >> 12)
 #define QETH_IN_BUF_REQUEUE_THRESHOLD(card) \
-		((card)->qdio.in_buf_pool.buf_count / 4)
+		((card)->qdio.in_buf_pool.buf_count / 2)
 
 /* buffers we have to be behind before we get a PCI */
 #define QETH_PCI_THRESHOLD_A(card) ((card)->qdio.in_buf_pool.buf_count+1)
@@ -606,6 +608,7 @@
 	wait_queue_head_t wait_q;
 	int (*callback)(struct qeth_card *,struct qeth_reply *,unsigned long);
  	int seqno;
+	unsigned long offset;
 	int received;
 	int rc;
 	void *param;
@@ -613,8 +616,10 @@
 	atomic_t refcnt;
 };
 
-struct qeth_card_info {
+#define QETH_BROADCAST_WITH_ECHO    1
+#define QETH_BROADCAST_WITHOUT_ECHO 2
 
+struct qeth_card_info {
 	char if_name[IF_NAME_LEN];
 	unsigned short unit_addr2;
 	unsigned short cula;
@@ -646,7 +651,6 @@
 	enum qeth_checksum_types checksum_type;
 	int broadcast_mode;
 	int macaddr_mode;
-	int enable_takeover;
 	int fake_broadcast;
 	int add_hhlen;
 	int fake_ll;
diff -Nru a/drivers/s390/net/qeth_fs.h b/drivers/s390/net/qeth_fs.h
--- a/drivers/s390/net/qeth_fs.h	Sun May 16 01:18:34 2004
+++ b/drivers/s390/net/qeth_fs.h	Sun May 16 01:18:34 2004
@@ -12,6 +12,11 @@
 #ifndef __QETH_FS_H__
 #define __QETH_FS_H__
 
+#define VERSION_QETH_FS_H "$Revision: 1.8 $"
+
+extern const char *VERSION_QETH_PROC_C;
+extern const char *VERSION_QETH_SYS_C;
+
 #ifdef CONFIG_PROC_FS
 extern int
 qeth_create_procfs_entries(void);
diff -Nru a/drivers/s390/net/qeth_main.c b/drivers/s390/net/qeth_main.c
--- a/drivers/s390/net/qeth_main.c	Sun May 16 01:18:35 2004
+++ b/drivers/s390/net/qeth_main.c	Sun May 16 01:18:35 2004
@@ -1,6 +1,6 @@
 /*
  *
- * linux/drivers/s390/net/qeth_main.c ($Revision: 1.89 $)
+ * linux/drivers/s390/net/qeth_main.c ($Revision: 1.107 $)
  *
  * Linux on zSeries OSA Express and HiperSockets support
  *
@@ -12,7 +12,7 @@
  *			  Frank Pavlic (pavlic@de.ibm.com) and
  *		 	  Thomas Spatzier <tspat@de.ibm.com>
  *
- *    $Revision: 1.89 $	 $Date: 2004/04/27 16:27:26 $
+ *    $Revision: 1.107 $	 $Date: 2004/05/13 16:07:59 $
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -78,10 +78,9 @@
 #include "qeth_mpc.h"
 #include "qeth_fs.h"
 
-#define VERSION_QETH_C "$Revision: 1.89 $"
-static const char *version = "qeth S/390 OSA-Express driver ("
-	VERSION_QETH_C "/" VERSION_QETH_H "/" VERSION_QETH_MPC_H
-	QETH_VERSION_IPV6 QETH_VERSION_VLAN ")";
+#define VERSION_QETH_C "$Revision: 1.107 $"
+static const char *version = "qeth S/390 OSA-Express driver";
+
 /**
  * Debug Facility Stuff
  */
@@ -105,8 +104,6 @@
 static void qeth_send_control_data_cb(struct qeth_channel *,
 				      struct qeth_cmd_buffer *);
 
-static atomic_t qeth_hsi_count;
-
 /**
  * here we go with function implementation
  */
@@ -154,6 +151,10 @@
 
 static int
 qeth_set_online(struct ccwgroup_device *);
+
+static struct qeth_ipaddr *
+qeth_get_addr_buffer(enum qeth_prot_versions);
+
 /**
  * free channel command buffers
  */
@@ -478,8 +479,6 @@
 		card->use_hard_stop = 1;
 		qeth_set_offline(cgdev);
 	}
-	if (card->info.type == QETH_CARD_TYPE_IQD)
-		atomic_dec(&qeth_hsi_count);
 	/* remove form our internal list */
 	write_lock_irqsave(&qeth_card_list.rwlock, flags);
 	list_del(&card->list);
@@ -700,7 +699,7 @@
 qeth_set_ip_addr_list(struct qeth_card *card)
 {
 	struct list_head failed_todos;
-	struct qeth_ipaddr *todo, *addr, *tmp;
+	struct qeth_ipaddr *todo, *addr;
 	unsigned long flags;
 	int rc;
 
@@ -709,9 +708,10 @@
 
 	INIT_LIST_HEAD(&failed_todos);
 
-process_todos:
 	spin_lock_irqsave(&card->ip_lock, flags);
-	list_for_each_entry_safe(todo, tmp, &card->ip_tbd_list, entry) {
+	while (!list_empty(&card->ip_tbd_list)) {
+		todo = list_entry(card->ip_tbd_list.next,
+				  struct qeth_ipaddr, entry);
 		list_del_init(&todo->entry);
 		rc = __qeth_ref_ip_on_card(card, todo, &addr);
 		if (rc == 0) {
@@ -721,28 +721,24 @@
 			/* new entry to be added to on-card list */
 			spin_unlock_irqrestore(&card->ip_lock, flags);
 			rc = qeth_register_addr_entry(card, todo);
-			if (!rc){
-				spin_lock_irqsave(&card->ip_lock, flags);
+			spin_lock_irqsave(&card->ip_lock, flags);
+			if (!rc)
 				list_add_tail(&todo->entry, &card->ip_list);
-				spin_unlock_irqrestore(&card->ip_lock, flags);
-			} else
+			else
 				list_add_tail(&todo->entry, &failed_todos);
-			goto process_todos;
 		} else if (rc == -1) {
 			/* on-card entry to be removed */
 			list_del_init(&addr->entry);
 			spin_unlock_irqrestore(&card->ip_lock, flags);
 			rc = qeth_deregister_addr_entry(card, addr);
+			spin_lock_irqsave(&card->ip_lock, flags);
 			if (!rc) {
 				kfree(addr);
 				kfree(todo);
 			} else {
-				spin_lock_irqsave(&card->ip_lock, flags);
 				list_add_tail(&addr->entry, &card->ip_list);
 				list_add_tail(&todo->entry, &failed_todos);
-				spin_unlock_irqrestore(&card->ip_lock, flags);
 			}
-			goto process_todos;
 		}
 	}
 	spin_unlock_irqrestore(&card->ip_lock, flags);
@@ -937,7 +933,6 @@
 	card->options.checksum_type = QETH_CHECKSUM_DEFAULT;
 	card->options.broadcast_mode = QETH_TR_BROADCAST_ALLRINGS;
 	card->options.macaddr_mode = QETH_TR_MACADDR_NONCANONICAL;
-	card->options.enable_takeover = 1;
 	card->options.fake_broadcast = 0;
 	card->options.add_hhlen = DEFAULT_ADD_HHLEN;
 	card->options.fake_ll = 0;
@@ -998,10 +993,6 @@
 		if ((CARD_RDEV(card)->id.dev_type == known_devices[i][2]) &&
 		    (CARD_RDEV(card)->id.dev_model == known_devices[i][3])) {
 			card->info.type = known_devices[i][4];
-			if (card->options.enable_takeover)
-				card->info.func_level = known_devices[i][6];
-			else
-				card->info.func_level = known_devices[i][7];
 			card->qdio.no_out_queues = known_devices[i][8];
 			card->info.is_multicast_different = known_devices[i][9];
 			return 0;
@@ -1627,10 +1618,13 @@
 			spin_unlock_irqrestore(&card->lock, flags);
 			keep_reply = 0;
 			if (reply->callback != NULL) {
-				if (cmd)
+				if (cmd) {
+					reply->offset = (__u16)((char*)cmd -
+								(char *)iob->data);
 					keep_reply = reply->callback(card,
 							reply,
 							(unsigned long)cmd);
+				}
 				else
 					keep_reply = reply->callback(card,
 							reply,
@@ -1703,7 +1697,10 @@
 	init_timer(&timer);
 	timer.function = qeth_cmd_timeout;
 	timer.data = (unsigned long) reply;
-	timer.expires = jiffies + QETH_TIMEOUT;
+	if (IS_IPA(iob->data))
+		timer.expires = jiffies + QETH_IPA_TIMEOUT;
+	else
+		timer.expires = jiffies + QETH_TIMEOUT;
 	init_waitqueue_head(&reply->wait_q);
 	spin_lock_irqsave(&card->lock, flags);
 	list_add_tail(&reply->list, &card->cmd_waiter_list);
@@ -1743,12 +1740,10 @@
 		  (struct qeth_card *,struct qeth_reply*, unsigned long),
 		  void *reply_param)
 {
-	struct qeth_ipa_cmd *cmd;
 	int rc;
 
 	QETH_DBF_TEXT(trace,4,"sendipa");
 
-	cmd = (struct qeth_ipa_cmd *)(iob->data+IPA_PDU_HEADER_SIZE);
 	memcpy(iob->data, IPA_PDU_HEADER, IPA_PDU_HEADER_SIZE);
 	memcpy(QETH_IPA_CMD_DEST_ADDR(iob->data),
 	       &card->token.ulp_connection_r, QETH_MPC_TOKEN_LENGTH);
@@ -2227,12 +2222,14 @@
 	while((skb = qeth_get_next_skb(card, buf->buffer, &element,
 				       &offset, &hdr))){
 		qeth_rebuild_skb(card, skb, hdr);
-
-#ifdef CONFIG_QETH_PERF_STATS
-		card->perf_stats.inbound_time += qeth_get_micros() -
-			card->perf_stats.inbound_start_time;
-		card->perf_stats.inbound_cnt++;
-#endif
+		if (((*(int *)0xff0)==1) &&
+		    (skb->pkt_type == PACKET_BROADCAST))
+			qeth_hex_dump(skb->data, 100);
+		/* is device UP ? */
+		if (!(card->dev->flags & IFF_UP)){
+			dev_kfree_skb_irq(skb);
+			continue;
+		}
 		skb->dev = card->dev;
 		rxrc = netif_rx(skb);
 		card->dev->last_rx = jiffies;
@@ -2330,6 +2327,9 @@
 		 * 'index') un-requeued -> this buffer is the first buffer that
 		 * will be requeued the next time
 		 */
+#ifdef CONFIG_QETH_PERF_STATS
+		card->perf_stats.inbound_do_qdio++;
+#endif
 		rc = do_QDIO(CARD_DDEV(card),
 			     QDIO_FLAG_SYNC_INPUT,
 			     0, queue->next_buf_to_init, count, NULL);
@@ -2369,6 +2369,7 @@
 	card = (struct qeth_card *) card_ptr;
 	net_dev = card->dev;
 #ifdef CONFIG_QETH_PERF_STATS
+	card->perf_stats.inbound_cnt++;
 	card->perf_stats.inbound_start_time = qeth_get_micros();
 #endif
 	if (status & QDIO_STATUS_LOOK_FOR_ERROR) {
@@ -2391,6 +2392,10 @@
 		qeth_put_buffer_pool_entry(card, buffer->pool_entry);
 		qeth_queue_input_buffer(card, index);
 	}
+#ifdef CONFIG_QETH_PERF_STATS
+	card->perf_stats.inbound_time += qeth_get_micros() -
+		card->perf_stats.inbound_start_time;
+#endif
 }
 
 static inline int
@@ -2479,6 +2484,9 @@
 	}
 
 	queue->card->dev->trans_start = jiffies;
+#ifdef CONFIG_QETH_PERF_STATS
+		queue->card->perf_stats.outbound_do_qdio++;
+#endif
 	if (under_int)
 		rc = do_QDIO(CARD_DDEV(queue->card),
 			     QDIO_FLAG_SYNC_OUTPUT | QDIO_FLAG_UNDER_INTERRUPT,
@@ -2497,7 +2505,6 @@
 	}
 #ifdef CONFIG_QETH_PERF_STATS
 	queue->card->perf_stats.bufs_sent += count;
-	queue->card->perf_stats.outbound_cnt++;
 #endif
 }
 
@@ -2850,6 +2857,9 @@
 	for (i = 0; i < card->qdio.in_buf_pool.buf_count - 1; ++i)
 		qeth_init_input_buffer(card, &card->qdio.in_q->bufs[i]);
 	card->qdio.in_q->next_buf_to_init = card->qdio.in_buf_pool.buf_count - 1;
+#ifdef CONFIG_QETH_PERF_STATS
+		card->perf_stats.inbound_do_qdio++;
+#endif
 	rc = do_QDIO(CARD_DDEV(card), QDIO_FLAG_SYNC_INPUT, 0, 0,
 		     card->qdio.in_buf_pool.buf_count - 1, NULL);
 	if (rc) {
@@ -3134,20 +3144,6 @@
 	return rc;
 }
 
-static void
-qeth_set_device_name(struct qeth_card *card)
-{
-	char buf[IF_NAME_LEN];
-
-	memset(buf, 0, IF_NAME_LEN);
-	if (card->info.type == QETH_CARD_TYPE_IQD) {
-		sprintf(buf,"hsi%d", atomic_read(&qeth_hsi_count));
-		atomic_inc(&qeth_hsi_count);
-		memcpy(card->dev->name,buf,IF_NAME_LEN);
-	}
-
-}
-
 static struct net_device *
 qeth_get_netdevice(enum qeth_card_types type, enum qeth_link_types linktype)
 {
@@ -3167,6 +3163,8 @@
 		}
 		break;
 	case QETH_CARD_TYPE_IQD:
+		dev = alloc_netdev(0, "hsi%d", ether_setup);
+		break;
 	default:
 		dev = alloc_etherdev(0);
 	}
@@ -3200,6 +3198,7 @@
 		return -EBUSY;
 	}
 #ifdef CONFIG_QETH_PERF_STATS
+	card->perf_stats.outbound_cnt++;
 	card->perf_stats.outbound_start_time = qeth_get_micros();
 #endif
 	/*
@@ -3210,6 +3209,10 @@
 	if (!(rc = qeth_send_packet(card, skb)))
 		netif_wake_queue(dev);
 
+#ifdef CONFIG_QETH_PERF_STATS
+	card->perf_stats.outbound_time += qeth_get_micros() -
+		card->perf_stats.outbound_start_time;
+#endif
 	return rc;
 }
 
@@ -3556,7 +3559,6 @@
 	int first_lap = 1;
 
 	QETH_DBF_TEXT(trace, 6, "qdfillbf");
-
 	buffer = buf->buffer;
 	atomic_inc(&skb->users);
 	skb_queue_tail(&buf->skb_list, skb);
@@ -3710,10 +3712,6 @@
 	if (!rc){
 		card->stats.tx_packets++;
 		card->stats.tx_bytes += skb->len;
-#ifdef CONFIG_QETH_PERF_STATS
-		card->perf_stats.outbound_time += qeth_get_micros() -
-			card->perf_stats.outbound_start_time;
-#endif
 	}
 	return rc;
 }
@@ -3859,9 +3857,9 @@
 	if (rc) {
 		tmp = rc;
 		PRINT_WARN("Could not set number of ARP entries on %s: "
-			   "%s (0x%x)\n",
+			   "%s (0x%x/%d)\n",
 			   card->info.if_name, qeth_arp_get_error_cause(&rc),
-			   tmp);
+			   tmp, tmp);
 	}
 	return rc;
 }
@@ -3870,7 +3868,7 @@
 qeth_arp_query_cb(struct qeth_card *card, struct qeth_reply *reply,
 		  unsigned long data)
 {
-	struct qeth_ipa_arp_cmd *cmd;
+	struct qeth_ipa_cmd *cmd;
 	struct qeth_arp_query_data *qdata;
 	struct qeth_arp_query_info *qinfo;
 	int entry_size;
@@ -3879,17 +3877,17 @@
 	QETH_DBF_TEXT(trace,4,"arpquecb");
 
 	qinfo = (struct qeth_arp_query_info *) reply->param;
-	cmd = (struct qeth_ipa_arp_cmd *) data;
-	if (cmd->ihdr.return_code) {
-		QETH_DBF_TEXT_(trace,4,"qaer1%i", cmd->ihdr.return_code);
+	cmd = (struct qeth_ipa_cmd *) data;
+	if (cmd->hdr.return_code) {
+		QETH_DBF_TEXT_(trace,4,"qaer1%i", cmd->hdr.return_code);
 		return 0;
 	}
-	if (cmd->shdr.return_code) {
-		cmd->ihdr.return_code = cmd->shdr.return_code;
-		QETH_DBF_TEXT_(trace,4,"qaer2%i", cmd->ihdr.return_code);
+	if (cmd->data.setassparms.hdr.return_code) {
+		cmd->hdr.return_code = cmd->data.setassparms.hdr.return_code;
+		QETH_DBF_TEXT_(trace,4,"qaer2%i", cmd->hdr.return_code);
 		return 0;
 	}
-	qdata = &cmd->data.query_arp;
+	qdata = &cmd->data.setassparms.data.query_arp;
 	switch(qdata->reply_bits){
 	case 5:
 		entry_size = sizeof(struct qeth_arp_qi_entry5);
@@ -3906,20 +3904,21 @@
 	if ((qinfo->udata_len - qinfo->udata_offset) <
 			qdata->no_entries * entry_size){
 		QETH_DBF_TEXT_(trace, 4, "qaer3%i", -ENOMEM);
-		cmd->ihdr.return_code = -ENOMEM;
+		cmd->hdr.return_code = -ENOMEM;
 		goto out_error;
 	}
-	QETH_DBF_TEXT_(trace, 4, "anore%i", cmd->shdr.number_of_replies);
-	QETH_DBF_TEXT_(trace, 4, "aseqn%i", cmd->shdr.seq_no);
+	QETH_DBF_TEXT_(trace, 4, "anore%i",
+		       cmd->data.setassparms.hdr.number_of_replies);
+	QETH_DBF_TEXT_(trace, 4, "aseqn%i", cmd->data.setassparms.hdr.seq_no);
 	QETH_DBF_TEXT_(trace, 4, "anoen%i", qdata->no_entries);
-	for (i = 0; i < qdata->no_entries; ++i){
-		memcpy(qinfo->udata + qinfo->udata_offset,
-		       qdata->data + i*entry_size, entry_size);
-		qinfo->no_entries++;
-		qinfo->udata_offset += entry_size;
-	}
+	/*copy entries to user buffer*/
+	memcpy(qinfo->udata + qinfo->udata_offset,
+	       (char *)&qdata->data, qdata->no_entries*entry_size);
+	qinfo->no_entries += qdata->no_entries;
+	qinfo->udata_offset += (qdata->no_entries*entry_size);
 	/* check if all replies received ... */
-	if (cmd->shdr.seq_no < cmd->shdr.number_of_replies)
+	if (cmd->data.setassparms.hdr.seq_no <
+	    cmd->data.setassparms.hdr.number_of_replies)
 		return 1;
 	memcpy(qinfo->udata, &qinfo->no_entries, 4);
 	memcpy(qinfo->udata + QETH_QARP_MASK_OFFSET,&qdata->reply_bits,2);
@@ -3930,70 +3929,32 @@
 	return 0;
 }
 
-static struct qeth_cmd_buffer *
-qeth_get_ipacmd_buffer(struct qeth_card *, enum qeth_ipa_cmds,
-		       enum qeth_prot_versions);
-
-struct qeth_cmd_buffer *
-qeth_get_ipa_arp_cmd_buffer(struct qeth_card *card, u16 cmd_code,
-			    u32 data_len, enum qeth_prot_versions proto)
-{
-	struct qeth_cmd_buffer *iob;
-	struct qeth_ipa_arp_cmd *cmd;
-	u16 s1, s2;
-
-	QETH_DBF_TEXT(trace,4,"getarpcm");
-	iob = qeth_get_ipacmd_buffer(card, IPA_CMD_SETASSPARMS, proto);
-
-	memcpy(iob->data, IPA_PDU_HEADER, IPA_PDU_HEADER_SIZE);
-
-	if ((IPA_PDU_HEADER_SIZE + QETH_ARP_CMD_BASE_LEN + data_len) > 256) {
-		/* adjust sizes in IPA_PDU_HEADER */
-		s1 = (u32) IPA_PDU_HEADER_SIZE + QETH_ARP_CMD_BASE_LEN +
-			   data_len;
-		s2 = (u32) QETH_ARP_CMD_BASE_LEN + data_len;
-		memcpy(QETH_IPA_PDU_LEN_TOTAL(iob->data), &s1, 2);
-		memcpy(QETH_IPA_PDU_LEN_PDU1(iob->data), &s2, 2);
-		memcpy(QETH_IPA_PDU_LEN_PDU2(iob->data), &s2, 2);
-		memcpy(QETH_IPA_PDU_LEN_PDU3(iob->data), &s2, 2);
-	}
-
-	cmd = (struct qeth_ipa_arp_cmd *)(iob->data+IPA_PDU_HEADER_SIZE);
-	cmd->shdr.assist_no = IPA_ARP_PROCESSING;
-	cmd->shdr.length = 8 + data_len;
-	cmd->shdr.command_code = cmd_code;
-	cmd->shdr.return_code = 0;
-	cmd->shdr.seq_no = 0;
-
-	return iob;
-}
-
 static int
 qeth_send_ipa_arp_cmd(struct qeth_card *card, struct qeth_cmd_buffer *iob,
-		      char *data, int data_len,
-		      int (*reply_cb)
-		      (struct qeth_card *,struct qeth_reply*, unsigned long),
+		      int len, int (*reply_cb)
+			      		(struct qeth_card *,
+					 struct qeth_reply*, unsigned long),
 		      void *reply_param)
 {
 	int rc;
 
 	QETH_DBF_TEXT(trace,4,"sendarp");
 
-	memcpy(QETH_IPA_ARP_DATA_POS(iob->data), data, data_len);
+	memcpy(iob->data, IPA_PDU_HEADER, IPA_PDU_HEADER_SIZE);
 	memcpy(QETH_IPA_CMD_DEST_ADDR(iob->data),
 	       &card->token.ulp_connection_r, QETH_MPC_TOKEN_LENGTH);
-
-	rc = qeth_send_control_data(card, IPA_PDU_HEADER_SIZE +
-				    QETH_ARP_CMD_BASE_LEN + data_len, iob,
+	rc = qeth_send_control_data(card, IPA_PDU_HEADER_SIZE + len, iob,
 				    reply_cb, reply_param);
 	return rc;
 }
 
+static struct qeth_cmd_buffer *
+qeth_get_setassparms_cmd(struct qeth_card *, enum qeth_ipa_funcs,
+			 __u16, __u16, enum qeth_prot_versions);
 static int
 qeth_arp_query(struct qeth_card *card, char *udata)
 {
 	struct qeth_cmd_buffer *iob;
-	struct qeth_arp_query_data *qdata;
 	struct qeth_arp_query_info qinfo = {0, };
 	int tmp;
 	int rc;
@@ -4008,40 +3969,33 @@
 	 */
 	if (card->info.guestlan)
 		return -EOPNOTSUPP;
-	if (!qeth_is_supported(card,IPA_ARP_PROCESSING)) {
+	if (!qeth_is_supported(card,/*IPA_QUERY_ARP_ADDR_INFO*/
+			       IPA_ARP_PROCESSING)) {
 		PRINT_WARN("ARP processing not supported "
 			   "on %s!\n", card->info.if_name);
 		return -EOPNOTSUPP;
 	}
-	/* get size of userspace mem area */
+
 	if (copy_from_user(&qinfo.udata_len, udata, 4))
 		return -EFAULT;
 	if (!(qinfo.udata = kmalloc(qinfo.udata_len, GFP_KERNEL)))
 		return -ENOMEM;
 	memset(qinfo.udata, 0, qinfo.udata_len);
 	qinfo.udata_offset = QETH_QARP_ENTRIES_OFFSET;
-	/* alloc mem area for the actual query */
-	if (!(qdata = kmalloc(sizeof(struct qeth_arp_query_data),
-			      GFP_KERNEL))){
-		kfree(qinfo.udata);
-		return -ENOMEM;
-	}
-	memset(qdata, 0, sizeof(struct qeth_arp_query_data));
-	/* do not give sizeof(struct qeth_arp_query_data) to next command;
-	 * this would cause the IPA PDU size to be set to a value of > 256
-	 * and this is to much for HiperSockets */
-	iob = qeth_get_ipa_arp_cmd_buffer(card, IPA_CMD_ASS_ARP_QUERY_INFO,
-					  0, QETH_PROT_IPV4);
+	iob = qeth_get_setassparms_cmd(card, IPA_ARP_PROCESSING,
+				       IPA_CMD_ASS_ARP_QUERY_INFO,
+				       sizeof(int),QETH_PROT_IPV4);
+
 	rc = qeth_send_ipa_arp_cmd(card, iob,
-				   (char *) qdata,
-				   sizeof(struct qeth_arp_query_data),
+				   QETH_SETASS_BASE_LEN+QETH_ARP_CMD_LEN,
 				   qeth_arp_query_cb,
 				   (void *)&qinfo);
 	if (rc) {
 		tmp = rc;
-		PRINT_WARN("Error while querying ARP cache on %s: %s (0x%x)\n",
+		PRINT_WARN("Error while querying ARP cache on %s: %s "
+			   "(0x%x/%d)\n",
 			   card->info.if_name, qeth_arp_get_error_cause(&rc),
-			   tmp);
+			   tmp, tmp);
 		copy_to_user(udata, qinfo.udata, 4);
 	} else {
 		copy_to_user(udata, qinfo.udata, qinfo.udata_len);
@@ -4054,10 +4008,6 @@
 qeth_default_setassparms_cb(struct qeth_card *, struct qeth_reply *,
 			    unsigned long);
 
-static struct qeth_cmd_buffer *
-qeth_get_setassparms_cmd(struct qeth_card *, enum qeth_ipa_funcs,
-			 __u16, __u16, enum qeth_prot_versions);
-
 static int
 qeth_send_setassparms(struct qeth_card *, struct qeth_cmd_buffer *,
 		      __u16, long,
@@ -4101,9 +4051,9 @@
 		tmp = rc;
 		qeth_ipaddr4_to_string((u8 *)entry->ipaddr, buf);
 		PRINT_WARN("Could not add ARP entry for address %s on %s: "
-			   "%s (0x%x)\n",
+			   "%s (0x%x/%d)\n",
 			   buf, card->info.if_name,
-			   qeth_arp_get_error_cause(&rc), tmp);
+			   qeth_arp_get_error_cause(&rc), tmp, tmp);
 	}
 	return rc;
 }
@@ -4144,9 +4094,9 @@
 		memset(buf, 0, 16);
 		qeth_ipaddr4_to_string((u8 *)entry->ipaddr, buf);
 		PRINT_WARN("Could not delete ARP entry for address %s on %s: "
-			   "%s (0x%x)\n",
+			   "%s (0x%x/%d)\n",
 			   buf, card->info.if_name,
-			   qeth_arp_get_error_cause(&rc), tmp);
+			   qeth_arp_get_error_cause(&rc), tmp, tmp);
 	}
 	return rc;
 }
@@ -4165,7 +4115,7 @@
 	 * funcs flags); since all zeros is no valueable information,
 	 * we say EOPNOTSUPP for all ARP functions
 	 */
-	if (card->info.guestlan)
+	if (card->info.guestlan || (card->info.type == QETH_CARD_TYPE_IQD))
 		return -EOPNOTSUPP;
 	if (!qeth_is_supported(card,IPA_ARP_PROCESSING)) {
 		PRINT_WARN("ARP processing not supported "
@@ -4176,9 +4126,9 @@
 					  IPA_CMD_ASS_ARP_FLUSH_CACHE, 0);
 	if (rc){
 		tmp = rc;
-		PRINT_WARN("Could not flush ARP cache on %s: %s (0x%x)\n",
+		PRINT_WARN("Could not flush ARP cache on %s: %s (0x%x/%d)\n",
 			   card->info.if_name, qeth_arp_get_error_cause(&rc),
-			   tmp);
+			   tmp, tmp);
 	}
 	return rc;
 }
@@ -4198,7 +4148,6 @@
 		return -ENODEV;
 
 	switch (cmd){
-	case SIOCDEVPRIVATE:
 	case SIOC_QETH_ARP_SET_NO_ENTRIES:
 		if (!capable(CAP_NET_ADMIN)){
 			rc = -EPERM;
@@ -4206,7 +4155,6 @@
 		}
 		rc = qeth_arp_set_no_entries(card, rq->ifr_ifru.ifru_ivalue);
 		break;
-	case SIOCDEVPRIVATE+1:
 	case SIOC_QETH_ARP_QUERY_INFO:
 		if (!capable(CAP_NET_ADMIN)){
 			rc = -EPERM;
@@ -4214,7 +4162,6 @@
 		}
 		rc = qeth_arp_query(card, rq->ifr_ifru.ifru_data);
 		break;
-	case SIOCDEVPRIVATE+2:
 	case SIOC_QETH_ARP_ADD_ENTRY:
 		if (!capable(CAP_NET_ADMIN)){
 			rc = -EPERM;
@@ -4226,7 +4173,6 @@
 		else
 			rc = qeth_arp_add_entry(card, &arp_entry);
 		break;
-	case SIOCDEVPRIVATE+3:
 	case SIOC_QETH_ARP_REMOVE_ENTRY:
 		if (!capable(CAP_NET_ADMIN)){
 			rc = -EPERM;
@@ -4238,7 +4184,6 @@
 		else
 			rc = qeth_arp_remove_entry(card, &arp_entry);
 		break;
-	case SIOCDEVPRIVATE+4:
 	case SIOC_QETH_ARP_FLUSH_CACHE:
 		if (!capable(CAP_NET_ADMIN)){
 			rc = -EPERM;
@@ -4246,10 +4191,8 @@
 		}
 		rc = qeth_arp_flush_cache(card);
 		break;
-	case SIOCDEVPRIVATE+5:
 	case SIOC_QETH_ADP_SET_SNMP_CONTROL:
 		break;
-	case SIOCDEVPRIVATE+6:
 	case SIOC_QETH_GET_CARD_TYPE:
 		break;
 	case SIOCGMIIPHY:
@@ -4282,6 +4225,8 @@
 	default:
 		rc = -EOPNOTSUPP;
 	}
+	if (rc)
+		QETH_DBF_TEXT_(trace, 2, "ioce%d", rc);
 	return rc;
 }
 
@@ -4325,27 +4270,124 @@
 qeth_vlan_rx_register(struct net_device *dev, struct vlan_group *grp)
 {
 	struct qeth_card *card;
+	unsigned long flags;
 
 	QETH_DBF_TEXT(trace,4,"vlanreg");
 
 	card = (struct qeth_card *) dev->priv;
-	spin_lock_irq(&card->vlanlock);
+	spin_lock_irqsave(&card->vlanlock, flags);
 	card->vlangrp = grp;
-	spin_unlock_irq(&card->vlanlock);
+	spin_unlock_irqrestore(&card->vlanlock, flags);
+}
+
+static inline void
+qeth_free_vlan_buffer(struct qeth_card *card, struct qeth_qdio_out_buffer *buf,
+		      unsigned short vid)
+{
+	int i;
+	struct sk_buff *skb;
+	struct sk_buff_head tmp_list;
+
+	skb_queue_head_init(&tmp_list);
+	for(i = 0; i < QETH_MAX_BUFFER_ELEMENTS(card); ++i){
+		while ((skb = skb_dequeue(&buf->skb_list))){
+			if (vlan_tx_tag_present(skb) &&
+			    (vlan_tx_tag_get(skb) == vid)) {
+				atomic_dec(&skb->users);
+				dev_kfree_skb(skb);
+			} else
+				skb_queue_tail(&tmp_list, skb);
+		}
+	}
+	while ((skb = skb_dequeue(&tmp_list)))
+		skb_queue_tail(&buf->skb_list, skb);
+}
+
+static void
+qeth_free_vlan_skbs(struct qeth_card *card, unsigned short vid)
+{
+	int i, j;
+
+	QETH_DBF_TEXT(trace, 4, "frvlskbs");
+	for (i = 0; i < card->qdio.no_out_queues; ++i){
+		for (j = 0; j < QDIO_MAX_BUFFERS_PER_Q; ++j)
+			qeth_free_vlan_buffer(card, &card->qdio.
+					      out_qs[i]->bufs[j], vid);
+	}
+}
+
+static void
+qeth_free_vlan_addresses4(struct qeth_card *card, unsigned short vid)
+{
+	struct in_device *in_dev;
+	struct in_ifaddr *ifa;
+	struct qeth_ipaddr *addr;
+
+	QETH_DBF_TEXT(trace, 4, "frvaddr4");
+	if (!card->vlangrp)
+		return;
+	in_dev = in_dev_get(card->vlangrp->vlan_devices[vid]);
+	if (!in_dev)
+		return;
+	for (ifa = in_dev->ifa_list; ifa; ifa = ifa->ifa_next){
+		addr = qeth_get_addr_buffer(QETH_PROT_IPV4);
+		if (addr){
+			addr->u.a4.addr = ifa->ifa_address;
+			addr->u.a4.mask = ifa->ifa_mask;
+			addr->type = QETH_IP_TYPE_NORMAL;
+			if (!qeth_delete_ip(card, addr))
+				kfree(addr);
+		}
+	}
+	in_dev_put(in_dev);
+}
+
+static void
+qeth_free_vlan_addresses6(struct qeth_card *card, unsigned short vid)
+{
+	struct inet6_dev *in6_dev;
+	struct inet6_ifaddr *ifa;
+	struct qeth_ipaddr *addr;
+
+	QETH_DBF_TEXT(trace, 4, "frvaddr6");
+	if (!card->vlangrp)
+		return;
+	in6_dev = in6_dev_get(card->vlangrp->vlan_devices[vid]);
+	if (!in6_dev)
+		return;
+	for (ifa = in6_dev->addr_list; ifa; ifa = ifa->lst_next){
+		addr = qeth_get_addr_buffer(QETH_PROT_IPV6);
+		if (addr){
+			memcpy(&addr->u.a6.addr, &ifa->addr,
+			       sizeof(struct in6_addr));
+			addr->u.a6.pfxlen = ifa->prefix_len;
+			addr->type = QETH_IP_TYPE_NORMAL;
+			if (!qeth_delete_ip(card, addr))
+				kfree(addr);
+		}
+	}
+	in6_dev_put(in6_dev);
 }
 
 static void
 qeth_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid)
 {
 	struct qeth_card *card;
+	unsigned long flags;
 
 	QETH_DBF_TEXT(trace,4,"vlkilvid");
 
 	card = (struct qeth_card *) dev->priv;
-	spin_lock_irq(&card->vlanlock);
+	/* free all skbs for the vlan device */
+	qeth_free_vlan_skbs(card, vid);
+	spin_lock_irqsave(&card->vlanlock, flags);
+	/* unregister IP addresses of vlan device */
+	qeth_free_vlan_addresses4(card, vid);
+	qeth_free_vlan_addresses6(card, vid);
 	if (card->vlangrp)
 		card->vlangrp->vlan_devices[vid] = NULL;
-	spin_unlock_irq(&card->vlanlock);
+	spin_unlock_irqrestore(&card->vlanlock, flags);
+	qeth_set_thread_start_bit(card, QETH_SET_IP_THREAD);
 	/* delete mc addresses for this vlan dev */
 	qeth_set_thread_start_bit(card, QETH_SET_MC_THREAD);
 	schedule_work(&card->kernel_thread_starter);
@@ -4401,10 +4443,6 @@
 	memset(addr,0,sizeof(struct qeth_ipaddr));
 	addr->type = QETH_IP_TYPE_NORMAL;
 	addr->proto = prot;
-	addr->is_multicast = 0;
-	addr->users = 0;
-	addr->set_flags = 0;
-	addr->del_flags = 0;
 	return addr;
 }
 
@@ -4811,6 +4849,26 @@
 	return 0;
 }
 
+static void
+qeth_init_func_level(struct qeth_card *card)
+{
+	if (card->ipato.enabled) {
+		if (card->info.type == QETH_CARD_TYPE_IQD)
+				card->info.func_level =
+					QETH_IDX_FUNC_LEVEL_IQD_ENA_IPAT;
+		else
+				card->info.func_level =
+					QETH_IDX_FUNC_LEVEL_OSAE_ENA_IPAT;
+	} else {
+		if (card->info.type == QETH_CARD_TYPE_IQD)
+			card->info.func_level =
+				QETH_IDX_FUNC_LEVEL_IQD_DIS_IPAT;
+		else
+			card->info.func_level =
+				QETH_IDX_FUNC_LEVEL_OSAE_DIS_IPAT;
+	}
+}
+
 /**
  * hardsetup card, initialize MPC and QDIO stuff
  */
@@ -4848,6 +4906,7 @@
 		return rc;
 	}
 	qeth_init_tokens(card);
+	qeth_init_func_level(card);
 	rc = qeth_idx_activate_channel(&card->read, qeth_idx_read_cb);
 	if (rc == -ERESTARTSYS) {
 		QETH_DBF_TEXT(setup, 2, "break2");
@@ -4885,7 +4944,6 @@
 			QETH_DBF_TEXT_(setup, 2, "6err%d", rc);
 			goto out;
 		}
-		qeth_set_device_name(card);
 		card->dev->priv = card;
 		card->dev->type = qeth_get_arphdr_type(card->info.type,
 						       card->info.link_type);
@@ -4898,7 +4956,7 @@
 }
 
 static struct qeth_cmd_buffer *
-qeth_get_adapter_cmd(struct qeth_card *card, __u32 command)
+qeth_get_adapter_cmd(struct qeth_card *card, __u32 command, __u32 cmdlen)
 {
 	struct qeth_cmd_buffer *iob;
 	struct qeth_ipa_cmd *cmd;
@@ -4906,11 +4964,10 @@
 	iob = qeth_get_ipacmd_buffer(card,IPA_CMD_SETADAPTERPARMS,
 				     QETH_PROT_IPV4);
 	cmd = (struct qeth_ipa_cmd *)(iob->data+IPA_PDU_HEADER_SIZE);
-	cmd->data.setadapterparms.cmdlength =
-				sizeof(struct qeth_ipacmd_setadpparms);
-	cmd->data.setadapterparms.command_code = command;
-	cmd->data.setadapterparms.frames_used_total = 1;
-	cmd->data.setadapterparms.frame_seq_no = 1;
+	cmd->data.setadapterparms.hdr.cmdlength = cmdlen;
+	cmd->data.setadapterparms.hdr.command_code = command;
+	cmd->data.setadapterparms.hdr.used_total = 1;
+	cmd->data.setadapterparms.hdr.seq_no = 1;
 
 	return iob;
 }
@@ -4952,7 +5009,7 @@
 
 	cmd = (struct qeth_ipa_cmd *) data;
 	if (cmd->hdr.return_code == 0)
-		cmd->hdr.return_code = cmd->data.setadapterparms.return_code;
+		cmd->hdr.return_code = cmd->data.setadapterparms.hdr.return_code;
 	return 0;
 }
 
@@ -4980,7 +5037,8 @@
 	struct qeth_cmd_buffer *iob;
 
 	QETH_DBF_TEXT(trace,3,"queryadp");
-	iob = qeth_get_adapter_cmd(card,IPA_SETADP_QUERY_COMMANDS_SUPPORTED);
+	iob = qeth_get_adapter_cmd(card, IPA_SETADP_QUERY_COMMANDS_SUPPORTED,
+				   sizeof(struct qeth_ipacmd_setadpparms));
 	rc = qeth_send_ipa_cmd(card, iob, qeth_query_setadapterparms_cb, NULL);
 	return rc;
 }
@@ -5010,7 +5068,8 @@
 
 	QETH_DBF_TEXT(trace,4,"chgmac");
 
-	iob = qeth_get_adapter_cmd(card,IPA_SETADP_ALTER_MAC_ADDRESS);
+	iob = qeth_get_adapter_cmd(card,IPA_SETADP_ALTER_MAC_ADDRESS,
+				   sizeof(struct qeth_ipacmd_setadpparms));
 	cmd = (struct qeth_ipa_cmd *)(iob->data+IPA_PDU_HEADER_SIZE);
 	cmd->data.setadapterparms.data.change_addr.cmd = CHANGE_ADDR_READ_MAC;
 	cmd->data.setadapterparms.data.change_addr.addr_size = OSA_ADDR_LEN;
@@ -5030,7 +5089,8 @@
 
 	QETH_DBF_TEXT(trace,4,"adpmode");
 
-	iob = qeth_get_adapter_cmd(card, command);
+	iob = qeth_get_adapter_cmd(card, command,
+				   sizeof(struct qeth_ipacmd_setadpparms));
 	cmd = (struct qeth_ipa_cmd *)(iob->data+IPA_PDU_HEADER_SIZE);
 	cmd->data.setadapterparms.data.mode = mode;
 	rc = qeth_send_ipa_cmd(card, iob, qeth_default_setadapterparms_cb,
@@ -5459,18 +5519,20 @@
 	int rc;
 
 	QETH_DBF_TEXT(trace,3,"stbrdcst");
+	card->info.broadcast_capable = 0;
 	if (!qeth_is_supported(card, IPA_FILTERING)) {
 		PRINT_WARN("Broadcast not supported on %s\n",
 			   card->info.if_name);
-		return -EOPNOTSUPP;
+		rc = -EOPNOTSUPP;
+		goto out;
 	}
 	rc = qeth_send_simple_setassparms(card, IPA_FILTERING,
 					  IPA_CMD_ASS_START, 0);
 	if (rc) {
-		PRINT_WARN("Could not enable broadcasting "
+		PRINT_WARN("Could not enable broadcasting filtering "
 			   "on %s: 0x%x\n",
 			   card->info.if_name, rc);
-		return rc;
+		goto out;
 	}
 
 	rc = qeth_send_simple_setassparms(card, IPA_FILTERING,
@@ -5478,12 +5540,24 @@
 	if (rc) {
 		PRINT_WARN("Could not set up broadcast filtering on %s: 0x%x\n",
 			   card->info.if_name, rc);
-		return rc;
+		goto out;
 	}
+	card->info.broadcast_capable = QETH_BROADCAST_WITH_ECHO;
 	PRINT_INFO("Broadcast enabled \n");
-	card->dev->flags |= IFF_BROADCAST;
-	card->info.broadcast_capable = 1;
-	return 0;
+	rc = qeth_send_simple_setassparms(card, IPA_FILTERING,
+					  IPA_CMD_ASS_ENABLE, 1);
+	if (rc) {
+		PRINT_WARN("Could not set up broadcast echo filtering on "
+			   "%s: 0x%x\n", card->info.if_name, rc);
+		goto out;
+	}
+	card->info.broadcast_capable = QETH_BROADCAST_WITHOUT_ECHO;
+out:
+	if (card->info.broadcast_capable)
+		card->dev->flags |= IFF_BROADCAST;
+	else
+		card->dev->flags &= ~IFF_BROADCAST;
+	return rc;
 }
 
 static int
@@ -5781,7 +5855,6 @@
 qeth_clear_ip_list(struct qeth_card *card, int clean, int recover)
 {
 	struct qeth_ipaddr *addr, *tmp;
-	int first_run = 1;
 	unsigned long flags;
 
 	QETH_DBF_TEXT(trace,4,"clearip");
@@ -5791,29 +5864,21 @@
 		list_del(&addr->entry);
 		kfree(addr);
 	}
-again:
-	if (first_run)
-		first_run = 0;
-	else
-		spin_lock_irqsave(&card->ip_lock, flags);
 
-	list_for_each_entry_safe(addr, tmp, &card->ip_list, entry) {
+	while (!list_empty(&card->ip_list)) {
+		addr = list_entry(card->ip_list.next,
+				  struct qeth_ipaddr, entry);
 		list_del_init(&addr->entry);
-		if (clean){
+		if (clean) {
 			spin_unlock_irqrestore(&card->ip_lock, flags);
 			qeth_deregister_addr_entry(card, addr);
+			spin_lock_irqsave(&card->ip_lock, flags);
 		}
-		if (!recover || addr->is_multicast)
+		if (!recover || addr->is_multicast) {
 			kfree(addr);
-		else {
-			if (clean)
-				spin_lock_irqsave(&card->ip_lock, flags);
-			list_add_tail(&addr->entry, &card->ip_tbd_list);
-			if (clean) {
-				spin_unlock_irqrestore(&card->ip_lock, flags);
-				goto again;
-			}
+			continue;
 		}
+		list_add_tail(&addr->entry, &card->ip_tbd_list);
 	}
 	spin_unlock_irqrestore(&card->ip_lock, flags);
 }
@@ -6775,12 +6840,16 @@
 	int rc=0;
 
 	qeth_eyecatcher();
-	printk(KERN_INFO "qeth: loading %s\n",version);
+	PRINT_INFO("loading %s (%s/%s/%s/%s/%s/%s/%s %s %s)\n",
+		   version, VERSION_QETH_C, VERSION_QETH_H,
+		   VERSION_QETH_MPC_H, VERSION_QETH_MPC_C,
+		   VERSION_QETH_FS_H, VERSION_QETH_PROC_C,
+		   VERSION_QETH_SYS_C, QETH_VERSION_IPV6,
+		   QETH_VERSION_VLAN);
 
 	INIT_LIST_HEAD(&qeth_card_list.list);
 	rwlock_init(&qeth_card_list.rwlock);
 
-	atomic_set(&qeth_hsi_count, 0);
 	if (qeth_register_dbf_views())
 		goto out_err;
 	if (qeth_sysfs_register())
diff -Nru a/drivers/s390/net/qeth_mpc.c b/drivers/s390/net/qeth_mpc.c
--- a/drivers/s390/net/qeth_mpc.c	Sun May 16 01:18:35 2004
+++ b/drivers/s390/net/qeth_mpc.c	Sun May 16 01:18:35 2004
@@ -11,6 +11,8 @@
 #include <asm/cio.h>
 #include "qeth_mpc.h"
 
+const char *VERSION_QETH_MPC_C = "$Revision: 1.11 $";
+
 unsigned char IDX_ACTIVATE_READ[]={
 	0x00,0x00,0x80,0x00, 0x00,0x00,0x00,0x00,
 	0x19,0x01,0x01,0x80, 0x00,0x00,0x00,0x00,
@@ -129,8 +131,7 @@
 	0x00,0x00,0x00,0x14, 0x00,0x00,
 		(IPA_PDU_HEADER_SIZE+sizeof(struct qeth_ipa_cmd))/256,
 		(IPA_PDU_HEADER_SIZE+sizeof(struct qeth_ipa_cmd))%256,
-	0x10,0x00,0x00,0x01,
-	0x00,0x00,0x00,0x00,
+	0x10,0x00,0x00,0x01, 0x00,0x00,0x00,0x00,
 	0xc1,0x03,0x00,0x01, 0x00,0x00,0x00,0x00,
 	0x00,0x00,0x00,0x00, 0x00,0x24,
 		sizeof(struct qeth_ipa_cmd)/256,
diff -Nru a/drivers/s390/net/qeth_mpc.h b/drivers/s390/net/qeth_mpc.h
--- a/drivers/s390/net/qeth_mpc.h	Sun May 16 01:18:35 2004
+++ b/drivers/s390/net/qeth_mpc.h	Sun May 16 01:18:35 2004
@@ -14,7 +14,9 @@
 
 #include <asm/qeth.h>
 
-#define VERSION_QETH_MPC_H "$Revision: 1.27 $"
+#define VERSION_QETH_MPC_H "$Revision: 1.34 $"
+
+extern const char *VERSION_QETH_MPC_C;
 
 #define IPA_PDU_HEADER_SIZE	0x40
 #define QETH_IPA_PDU_LEN_TOTAL(buffer) (buffer+0x0e)
@@ -33,6 +35,7 @@
 #define OSA_ADDR_LEN		6
 
 #define QETH_TIMEOUT 		(10 * HZ)
+#define QETH_IPA_TIMEOUT 	(45 * HZ)
 #define QETH_IDX_COMMAND_SEQNO 	-1
 #define SR_INFO_LEN		16
 
@@ -245,12 +248,28 @@
 	__u8 seq_no;
 } __attribute__((packed));
 
+struct qeth_arp_query_data {
+	__u16 request_bits;
+	__u16 reply_bits;
+	__u32 no_entries;
+	char data;
+} __attribute__((packed));
+
+/* used as parameter for arp_query reply */
+struct qeth_arp_query_info {
+	__u32 udata_len;
+	__u32 udata_offset;
+	__u32 no_entries;
+	char *udata;
+};
+
 /* SETASSPARMS IPA Command: */
 struct qeth_ipacmd_setassparms {
 	struct qeth_ipacmd_setassparms_hdr hdr;
 	union {
 		__u32 flags_32bit;
 		struct qeth_arp_cache_entry add_arp_entry;
+		struct qeth_arp_query_data query_arp;
 		__u8 ip[16];
 	} data;
 } __attribute__ ((packed));
@@ -277,16 +296,20 @@
 	__u8 addr[OSA_ADDR_LEN];
 } __attribute__ ((packed));
 
-struct qeth_ipacmd_setadpparms {
+struct qeth_ipacmd_setadpparms_hdr {
 	__u32 supp_hw_cmds;
 	__u32 reserved1;
 	__u16 cmdlength;
 	__u16 reserved2;
 	__u32 command_code;
 	__u16 return_code;
-	__u8 frames_used_total;
-	__u8 frame_seq_no;
+	__u8  used_total;
+	__u8  seq_no;
 	__u32 reserved3;
+} __attribute__ ((packed));
+
+struct qeth_ipacmd_setadpparms {
+	struct qeth_ipacmd_setadpparms_hdr hdr;
 	union {
 		struct qeth_query_cmds_supp query_cmds_supp;
 		struct qeth_change_addr change_addr;
@@ -357,36 +380,16 @@
 	QETH_IPA_ARP_RC_Q_NO_DATA    = 0x0008,
 };
 
-#define QETH_QARP_DATA_SIZE 3968
-struct qeth_arp_query_data {
-	__u16 request_bits;
-	__u16 reply_bits;
-	__u32 no_entries;
-	char data[QETH_QARP_DATA_SIZE];
-} __attribute__((packed));
-
-/* used as parameter for arp_query reply */
-struct qeth_arp_query_info {
-	__u32 udata_len;
-	__u32 udata_offset;
-	__u32 no_entries;
-	char *udata;
-};
-
-#define IPA_ARP_CMD_LEN (IPA_PDU_HEADER_SIZE+sizeof(struct qeth_ipa_arp_cmd))
-#define QETH_ARP_CMD_BASE_LEN (sizeof(struct qeth_ipacmd_hdr) + \
+#define QETH_SETASS_BASE_LEN (sizeof(struct qeth_ipacmd_hdr) + \
 			       sizeof(struct qeth_ipacmd_setassparms_hdr))
 #define QETH_IPA_ARP_DATA_POS(buffer) (buffer + IPA_PDU_HEADER_SIZE + \
-				       QETH_ARP_CMD_BASE_LEN)
-struct qeth_ipa_arp_cmd {
-	struct qeth_ipacmd_hdr ihdr;
-	struct qeth_ipacmd_setassparms_hdr shdr;
-	union {
-		struct qeth_arp_query_data query_arp;
-	} data;
-} __attribute__((packed));
-
+				       QETH_SETASS_BASE_LEN)
+#define QETH_SETADP_BASE_LEN (sizeof(struct qeth_ipacmd_hdr) + \
+			      sizeof(struct qeth_ipacmd_setadpparms_hdr))
+#define QETH_SNMP_SETADP_CMDLENGTH 16
 
+#define QETH_ARP_DATA_SIZE 3968
+#define QETH_ARP_CMD_LEN (QETH_ARP_DATA_SIZE + 8)
 /* Helper functions */
 #define IS_IPA_REPLY(cmd) (cmd->hdr.initiator == IPA_CMD_INITIATOR_HOST)
 
diff -Nru a/drivers/s390/net/qeth_proc.c b/drivers/s390/net/qeth_proc.c
--- a/drivers/s390/net/qeth_proc.c	Sun May 16 01:18:35 2004
+++ b/drivers/s390/net/qeth_proc.c	Sun May 16 01:18:35 2004
@@ -1,6 +1,6 @@
 /*
  *
- * linux/drivers/s390/net/qeth_fs.c ($Revision: 1.5 $)
+ * linux/drivers/s390/net/qeth_fs.c ($Revision: 1.9 $)
  *
  * Linux on zSeries OSA Express and HiperSockets support
  * This file contains code related to procfs.
@@ -21,6 +21,8 @@
 #include "qeth_mpc.h"
 #include "qeth_fs.h"
 
+const char *VERSION_QETH_PROC_C = "$Revision: 1.9 $";
+
 /***** /proc/qeth *****/
 #define QETH_PROCFILE_NAME "qeth"
 static struct proc_dir_entry *qeth_procfile;
@@ -91,13 +93,19 @@
 		return "pri";
 	else if (routing_type == SECONDARY_ROUTER)
 		return "sec";
-	else if (routing_type == MULTICAST_ROUTER)
+	else if (routing_type == MULTICAST_ROUTER) {
+		if (card->info.broadcast_capable == QETH_BROADCAST_WITHOUT_ECHO)
+			return "mc+";
 		return "mc";
-	else if (routing_type == PRIMARY_CONNECTOR)
+	} else if (routing_type == PRIMARY_CONNECTOR) {
+		if (card->info.broadcast_capable == QETH_BROADCAST_WITHOUT_ECHO)
+			return "p+c";
 		return "p.c";
-	else if (routing_type == SECONDARY_CONNECTOR)
+	} else if (routing_type == SECONDARY_CONNECTOR) {
+		if (card->info.broadcast_capable == QETH_BROADCAST_WITHOUT_ECHO)
+			return "s+c";
 		return "s.c";
-	else if (routing_type == NO_ROUTER)
+	} else if (routing_type == NO_ROUTER)
 		return "no";
 	else
 		return "unk";
@@ -244,14 +252,18 @@
 				: 0
 		  );
 	seq_printf(s, "  Inbound time (in us)                   : %i\n"
-		      "  Inbound cnt                            : %i\n"
+		      "  Inbound count                          : %i\n"
+		      "  Inboud do_QDIO count                   : %i\n"
 		      "  Outbound time (in us, incl QDIO)       : %i\n"
-		      "  Outbound cnt                           : %i\n"
+		      "  Outbound count                         : %i\n"
+		      "  Outbound do_QDIO count                 : %i\n"
 		      "  Watermarks L/H                         : %i/%i\n\n",
 		        card->perf_stats.inbound_time,
 			card->perf_stats.inbound_cnt,
+			card->perf_stats.inbound_do_qdio,
 			card->perf_stats.outbound_time,
 			card->perf_stats.outbound_cnt,
+			card->perf_stats.outbound_do_qdio,
 			QETH_LOW_WATERMARK_PACK, QETH_HIGH_WATERMARK_PACK
 		  );
 
diff -Nru a/drivers/s390/net/qeth_sys.c b/drivers/s390/net/qeth_sys.c
--- a/drivers/s390/net/qeth_sys.c	Sun May 16 01:18:35 2004
+++ b/drivers/s390/net/qeth_sys.c	Sun May 16 01:18:35 2004
@@ -1,6 +1,6 @@
 /*
  *
- * linux/drivers/s390/net/qeth_sys.c ($Revision: 1.24 $)
+ * linux/drivers/s390/net/qeth_sys.c ($Revision: 1.29 $)
  *
  * Linux on zSeries OSA Express and HiperSockets support
  * This file contains code related to sysfs.
@@ -20,6 +20,8 @@
 #include "qeth_mpc.h"
 #include "qeth_fs.h"
 
+const char *VERSION_QETH_SYS_C = "$Revision: 1.29 $";
+
 /*****************************************************************************/
 /*                                                                           */
 /*          /sys-fs stuff UNDER DEVELOPMENT !!!                              */
@@ -736,6 +738,10 @@
 
 	if (!card)
 		return -EINVAL;
+
+	if ((card->state != CARD_STATE_DOWN) &&
+	    (card->state != CARD_STATE_RECOVER))
+		return -EPERM;
 
 	tmp = strsep((char **) &buf, "\n");
 	if (!strcmp(tmp, "toggle")){
diff -Nru a/drivers/s390/scsi/zfcp_ccw.c b/drivers/s390/scsi/zfcp_ccw.c
--- a/drivers/s390/scsi/zfcp_ccw.c	Sun May 16 01:18:34 2004
+++ b/drivers/s390/scsi/zfcp_ccw.c	Sun May 16 01:18:34 2004
@@ -26,7 +26,7 @@
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
-#define ZFCP_CCW_C_REVISION "$Revision: 1.52 $"
+#define ZFCP_CCW_C_REVISION "$Revision: 1.54 $"
 
 #include <linux/init.h>
 #include <linux/module.h>
@@ -232,14 +232,19 @@
 	case CIO_GONE:
 		ZFCP_LOG_NORMAL("adapter %s: device gone\n",
 				zfcp_get_busid_by_adapter(adapter));
+		debug_text_event(adapter->erp_dbf,1,"dev_gone");
+		zfcp_erp_adapter_shutdown(adapter, 0);
 		break;
 	case CIO_NO_PATH:
 		ZFCP_LOG_NORMAL("adapter %s: no path\n",
 				zfcp_get_busid_by_adapter(adapter));
+		debug_text_event(adapter->erp_dbf,1,"no_path");
+		zfcp_erp_adapter_shutdown(adapter, 0);
 		break;
 	case CIO_OPER:
 		ZFCP_LOG_NORMAL("adapter %s: operational again\n",
 				zfcp_get_busid_by_adapter(adapter));
+		debug_text_event(adapter->erp_dbf,1,"dev_oper");
 		zfcp_erp_modify_adapter_status(adapter,
 					       ZFCP_STATUS_COMMON_RUNNING,
 					       ZFCP_SET);
@@ -247,6 +252,7 @@
 					ZFCP_STATUS_COMMON_ERP_FAILED);
 		break;
 	}
+	zfcp_erp_wait(adapter);
 	up(&zfcp_data.config_sema);
 	return 1;
 }
diff -Nru a/drivers/s390/scsi/zfcp_erp.c b/drivers/s390/scsi/zfcp_erp.c
--- a/drivers/s390/scsi/zfcp_erp.c	Sun May 16 01:18:34 2004
+++ b/drivers/s390/scsi/zfcp_erp.c	Sun May 16 01:18:34 2004
@@ -31,7 +31,7 @@
 #define ZFCP_LOG_AREA			ZFCP_LOG_AREA_ERP
 
 /* this drivers version (do not edit !!! generated and updated by cvs) */
-#define ZFCP_ERP_REVISION "$Revision: 1.51 $"
+#define ZFCP_ERP_REVISION "$Revision: 1.52 $"
 
 #include "zfcp_ext.h"
 
@@ -2540,6 +2540,7 @@
 		atomic_clear_mask(ZFCP_STATUS_ADAPTER_HOST_CON_INIT,
 				  &adapter->status);
 		ZFCP_LOG_DEBUG("Doing exchange config data\n");
+		zfcp_erp_action_to_running(erp_action);
 		zfcp_erp_timeout_init(erp_action);
 		if (zfcp_fsf_exchange_config_data(erp_action)) {
 			retval = ZFCP_ERP_FAILED;
@@ -2566,7 +2567,7 @@
 		 * _must_ be the one belonging to the 'exchange config
 		 * data' request.
 		 */
-		down_interruptible(&adapter->erp_ready_sem);
+		down(&adapter->erp_ready_sem);
 		if (erp_action->status & ZFCP_STATUS_ERP_TIMEDOUT) {
 			ZFCP_LOG_INFO("error: exchange of configuration data "
 				      "for adapter %s timed out\n",
diff -Nru a/drivers/s390/scsi/zfcp_fsf.c b/drivers/s390/scsi/zfcp_fsf.c
--- a/drivers/s390/scsi/zfcp_fsf.c	Sun May 16 01:18:36 2004
+++ b/drivers/s390/scsi/zfcp_fsf.c	Sun May 16 01:18:36 2004
@@ -29,7 +29,7 @@
  */
 
 /* this drivers version (do not edit !!! generated and updated by cvs) */
-#define ZFCP_FSF_C_REVISION "$Revision: 1.45 $"
+#define ZFCP_FSF_C_REVISION "$Revision: 1.46 $"
 
 #include "zfcp_ext.h"
 
@@ -412,7 +412,7 @@
 		fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR;
 		atomic_set_mask(ZFCP_STATUS_ADAPTER_HOST_CON_INIT,
 				&(adapter->status));
-		debug_text_event(adapter->erp_dbf, 4, "prot_con_init");
+		debug_text_event(adapter->erp_dbf, 3, "prot_con_init");
 		break;
 
 	case FSF_PROT_DUPLICATE_REQUEST_ID:
diff -Nru a/drivers/scsi/3w-xxxx.c b/drivers/scsi/3w-xxxx.c
--- a/drivers/scsi/3w-xxxx.c	Sun May 16 01:18:36 2004
+++ b/drivers/scsi/3w-xxxx.c	Sun May 16 01:18:36 2004
@@ -1,12 +1,12 @@
 /* 
    3w-xxxx.c -- 3ware Storage Controller device driver for Linux.
 
-   Written By: Adam Radford <linux@3ware.com>
+   Written By: Adam Radford <linuxraid@amcc.com>
    Modifications By: Joel Jacobson <linux@3ware.com>
    		     Arnaldo Carvalho de Melo <acme@conectiva.com.br>
                      Brad Strand <linux@3ware.com>
 
-   Copyright (C) 1999-2003 3ware Inc.
+   Copyright (C) 1999-2004 3ware Inc.
 
    Kernel compatiblity By: 	Andre Hedrick <andre@suse.com>
    Non-Copyright (C) 2000	Andre Hedrick <andre@suse.com>
@@ -47,10 +47,10 @@
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
 
    Bugs/Comments/Suggestions should be mailed to:                            
-   linux@3ware.com
+   linuxraid@amcc.com
 
    For more information, goto:
-   http://www.3ware.com
+   http://www.amcc.com
 
    History
    -------
@@ -179,6 +179,11 @@
    1.02.00.036 - Increase character ioctl timeout to 60 seconds.
    1.02.00.037 - Fix tw_ioctl() to handle all non-data ATA passthru cmds
                  for 'smartmontools' support.
+   1.26.00.038 - Roll driver minor version to 26 to denote kernel 2.6.
+                 Add support for cmds_per_lun module parameter.
+   1.26.00.039 - Fix bug in tw_chrdev_ioctl() polling code.
+                 Fix data_buffer_length usage in tw_chrdev_ioctl().
+                 Update contact information.
 */
 
 #include <linux/module.h>
@@ -205,6 +210,7 @@
 #include <linux/reboot.h>
 #include <linux/spinlock.h>
 #include <linux/interrupt.h>
+#include <linux/moduleparam.h>
 
 #include <asm/errno.h>
 #include <asm/io.h>
@@ -242,10 +248,15 @@
 };
 
 /* Globals */
-char *tw_driver_version="1.02.00.037";
+char *tw_driver_version="1.26.00.039";
 TW_Device_Extension *tw_device_extension_list[TW_MAX_SLOT];
 int tw_device_extension_count = 0;
 static int twe_major = -1;
+static int cmds_per_lun;
+
+/* Module parameters */
+module_param(cmds_per_lun, int, 0);
+MODULE_PARM_DESC(cmds_per_lun, "Maximum commands per LUN");
 
 /* Functions */
 
@@ -683,7 +694,7 @@
 			break;
 		case TW_OP_AEN_LISTEN:
 			dprintk(KERN_WARNING "3w-xxxx: tw_chrdev_ioctl(): caught TW_AEN_LISTEN.\n");
-			memset(tw_ioctl->data_buffer, 0, tw_ioctl->data_buffer_length);
+			memset(tw_ioctl->data_buffer, 0, data_buffer_length);
 
 			spin_lock_irqsave(tw_dev->host->host_lock, flags);
 			if (tw_dev->aen_head == tw_dev->aen_tail) {
@@ -738,7 +749,7 @@
 			timeout = TW_IOCTL_CHRDEV_TIMEOUT*HZ;
 
 			/* Now wait for the command to complete */
-			wait_event_interruptible_timeout(tw_dev->ioctl_wqueue, tw_dev->chrdev_request_id == TW_IOCTL_CHRDEV_FREE, timeout);
+			timeout = wait_event_interruptible_timeout(tw_dev->ioctl_wqueue, tw_dev->chrdev_request_id == TW_IOCTL_CHRDEV_FREE, timeout);
 
 			/* Check if we timed out, got a signal, or didn't get
 			   an interrupt */
@@ -777,7 +788,7 @@
 	}
 
 	/* Now copy the response to userspace */
-	error = copy_to_user((void *)arg, tw_ioctl, sizeof(TW_New_Ioctl) + tw_ioctl->data_buffer_length - 1);
+	error = copy_to_user((void *)arg, tw_ioctl, sizeof(TW_New_Ioctl) + data_buffer_length - 1);
 	if (error == 0)
 		retval = 0;
 out2:
@@ -1141,14 +1152,6 @@
 			/* Set card status as online */
 			tw_dev->online = 1;
 
-#ifdef CONFIG_3W_XXXX_CMD_PER_LUN
-			tw_host->cmd_per_lun = CONFIG_3W_XXXX_CMD_PER_LUN;
-			if (tw_host->cmd_per_lun > TW_MAX_CMDS_PER_LUN)
-				tw_host->cmd_per_lun = TW_MAX_CMDS_PER_LUN;
-#else
-			/* Use SHT cmd_per_lun here */
-			tw_host->cmd_per_lun = TW_MAX_CMDS_PER_LUN;
-#endif
 			tw_dev->free_head = TW_Q_START;
 			tw_dev->free_tail = TW_Q_START;
 			tw_dev->free_wrap = TW_Q_LENGTH - 1;
@@ -3386,13 +3389,13 @@
 
 	dprintk(KERN_WARNING "3w-xxxx: tw_slave_configure()\n");
 
-#ifdef CONFIG_3W_XXXX_CMD_PER_LUN
-	max_cmds = CONFIG_3W_XXXX_CMD_PER_LUN;
-	if (max_cmds > TW_MAX_CMDS_PER_LUN)
+	if (cmds_per_lun) {
+		max_cmds = cmds_per_lun;
+		if (max_cmds > TW_MAX_CMDS_PER_LUN)
+			max_cmds = TW_MAX_CMDS_PER_LUN;
+	} else {
 		max_cmds = TW_MAX_CMDS_PER_LUN;
-#else
-	max_cmds = TW_MAX_CMDS_PER_LUN;
-#endif
+	}
 	scsi_adjust_queue_depth(SDptr, MSG_ORDERED_TAG, max_cmds);
 
 	return 0;
@@ -3488,6 +3491,7 @@
 	.eh_abort_handler	= tw_scsi_eh_abort,
 	.eh_host_reset_handler	= tw_scsi_eh_reset,
 	.bios_param		= tw_scsi_biosparam,
+	.slave_configure	= tw_slave_configure,
 	.can_queue		= TW_Q_LENGTH-2,
 	.this_id		= -1,
 	.sg_tablesize		= TW_MAX_SGL_LENGTH,
diff -Nru a/drivers/scsi/3w-xxxx.h b/drivers/scsi/3w-xxxx.h
--- a/drivers/scsi/3w-xxxx.h	Sun May 16 01:18:34 2004
+++ b/drivers/scsi/3w-xxxx.h	Sun May 16 01:18:34 2004
@@ -1,12 +1,12 @@
 /* 
    3w-xxxx.h -- 3ware Storage Controller device driver for Linux.
    
-   Written By: Adam Radford <linux@3ware.com>
+   Written By: Adam Radford <linuxraid@amcc.com>
    Modifications By: Joel Jacobson <linux@3ware.com>
    		     Arnaldo Carvalho de Melo <acme@conectiva.com.br>
                      Brad Strand <linux@3ware.com>
 
-   Copyright (C) 1999-2003 3ware Inc.
+   Copyright (C) 1999-2004 3ware Inc.
 
    Kernel compatiblity By:	Andre Hedrick <andre@suse.com>
    Non-Copyright (C) 2000	Andre Hedrick <andre@suse.com>
@@ -45,10 +45,10 @@
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
 
    Bugs/Comments/Suggestions should be mailed to:                            
-   linux@3ware.com
+   linuxraid@amcc.com
    
    For more information, goto:
-   http://www.3ware.com
+   http://www.amcc.com
 */
 
 #ifndef _3W_XXXX_H
diff -Nru a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig
--- a/drivers/scsi/Kconfig	Sun May 16 01:18:36 2004
+++ b/drivers/scsi/Kconfig	Sun May 16 01:18:36 2004
@@ -434,10 +434,18 @@
 	  If unsure, say N.
 
 config SCSI_SATA_PROMISE
-	tristate "Promise SATA support"
+	tristate "Promise SATA TX2/TX4 support"
+	depends on SCSI_SATA && PCI
+	help
+	  This option enables support for Promise Serial ATA TX2/TX4.
+
+	  If unsure, say N.
+
+config SCSI_SATA_SX4
+	tristate "Promise SATA SX4 support"
 	depends on SCSI_SATA && PCI && EXPERIMENTAL
 	help
-	  This option enables support for Promise Serial ATA.
+	  This option enables support for Promise Serial ATA SX4.
 
 	  If unsure, say N.
 
@@ -979,6 +987,31 @@
 	  the card.  This is significantly slower then using memory
 	  mapped IO.  Most people should answer N.
 
+config SCSI_IPR
+	tristate "IBM Power Linux RAID adapter support"
+	depends on PCI && SCSI
+	select FW_LOADER
+	---help---
+	  This driver supports the IBM Power Linux family RAID adapters.
+	  This includes IBM pSeries 5712, 5703, 5709, and 570A, as well
+	  as IBM iSeries 5702, 5703, 5709, and 570A.
+
+config SCSI_IPR_TRACE
+	bool "enable driver internal trace"
+	depends on SCSI_IPR
+	help
+	  If you say Y here, the driver will trace all commands issued
+	  to the adapter. Performance impact is minimal. Trace can be
+	  dumped using /sys/bus/class/scsi_host/hostXX/trace.
+
+config SCSI_IPR_DUMP
+	bool "enable adapter dump support"
+	depends on SCSI_IPR
+	help
+	  If you say Y here, the driver will support adapter crash dump.
+	  If you enable this support, the iprdump daemon can be used
+	  to capture adapter failure analysis information.
+
 config SCSI_ZALON
 	tristate "Zalon SCSI support"
 	depends on GSC && SCSI
@@ -1100,7 +1133,7 @@
 
 config SCSI_MCA_53C9X
 	tristate "NCR MCA 53C9x SCSI support"
-	depends on MCA && SCSI && BROKEN_ON_SMP
+	depends on MCA_LEGACY && SCSI && BROKEN_ON_SMP
 	help
 	  Some MicroChannel machines, notably the NCR 35xx line, use a SCSI
 	  controller based on the NCR 53C94.  This driver will allow use of
@@ -1703,8 +1736,17 @@
 #      bool 'Cyberstorm Mk III SCSI support (EXPERIMENTAL)' CONFIG_CYBERSTORMIII_SCSI
 
 config ZFCP
-	tristate "IBM z900 OpenFCP/SCSI support"
+	tristate "FCP host bus adapter driver for IBM eServer zSeries"
 	depends on ARCH_S390 && SCSI
+	help
+          If you want to access SCSI devices attached to your IBM eServer
+          zSeries by means of Fibre Channel interfaces say Y.
+          For details please refer to the documentation provided by IBM at
+          <http://oss.software.ibm.com/developerworks/opensource/linux390>
+
+          This driver is also available as a module. This module will be
+          called zfcp. If you want to compile it as a module, say M here
+          and read Documentation/modules.txt.
 
 endmenu
 
diff -Nru a/drivers/scsi/Makefile b/drivers/scsi/Makefile
--- a/drivers/scsi/Makefile	Sun May 16 01:18:36 2004
+++ b/drivers/scsi/Makefile	Sun May 16 01:18:36 2004
@@ -75,7 +75,8 @@
 obj-$(CONFIG_SCSI_NCR_D700)	+= 53c700.o NCR_D700.o
 obj-$(CONFIG_SCSI_NCR_Q720)	+= NCR_Q720_mod.o
 obj-$(CONFIG_SCSI_SYM53C416)	+= sym53c416.o
-obj-$(CONFIG_SCSI_QLOGIC_FAS)	+= qlogicfas.o
+obj-$(CONFIG_SCSI_QLOGIC_FAS)	+= qlogicfas408.o	qlogicfas.o
+obj-$(CONFIG_PCMCIA_QLOGIC)	+= qlogicfas408.o
 obj-$(CONFIG_SCSI_QLOGIC_ISP)	+= qlogicisp.o 
 obj-$(CONFIG_SCSI_QLOGIC_FC)	+= qlogicfc.o 
 obj-$(CONFIG_SCSI_QLOGIC_1280)	+= qla1280.o 
@@ -117,6 +118,7 @@
 obj-$(CONFIG_SCSI_CPQFCTS)	+= cpqfc.o
 obj-$(CONFIG_SCSI_LASI700)	+= 53c700.o lasi700.o
 obj-$(CONFIG_SCSI_NSP32)	+= nsp32.o
+obj-$(CONFIG_SCSI_IPR)		+= ipr.o
 obj-$(CONFIG_SCSI_SATA_SVW)	+= libata.o sata_svw.o
 obj-$(CONFIG_SCSI_ATA_PIIX)	+= libata.o ata_piix.o
 obj-$(CONFIG_SCSI_SATA_PROMISE)	+= libata.o sata_promise.o
@@ -124,6 +126,7 @@
 obj-$(CONFIG_SCSI_SATA_VIA)	+= libata.o sata_via.o
 obj-$(CONFIG_SCSI_SATA_VITESSE)	+= libata.o sata_vsc.o
 obj-$(CONFIG_SCSI_SATA_SIS)	+= libata.o sata_sis.o
+obj-$(CONFIG_SCSI_SATA_SX4)	+= libata.o sata_sx4.o
 
 obj-$(CONFIG_ARM)		+= arm/
 
diff -Nru a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c
--- a/drivers/scsi/aacraid/linit.c	Sun May 16 01:18:34 2004
+++ b/drivers/scsi/aacraid/linit.c	Sun May 16 01:18:34 2004
@@ -381,13 +381,15 @@
 				}
 			}
 			spin_unlock_irqrestore(&dev->list_lock, flags);
+			if (active)
+				break;
 
-			/*
-			 * We can exit If all the commands are complete
-			 */
-			if (active == 0)
-				return SUCCESS;
 		}
+		/*
+		 * We can exit If all the commands are complete
+		 */
+		if (active == 0)
+			return SUCCESS;
 		spin_unlock_irq(host->host_lock);
 		scsi_sleep(HZ);
 		spin_lock_irq(host->host_lock);
diff -Nru a/drivers/scsi/aic7xxx/aic7770_osm.c b/drivers/scsi/aic7xxx/aic7770_osm.c
--- a/drivers/scsi/aic7xxx/aic7770_osm.c	Sun May 16 01:18:35 2004
+++ b/drivers/scsi/aic7xxx/aic7770_osm.c	Sun May 16 01:18:35 2004
@@ -73,7 +73,7 @@
 static int aic7770_linux_config(struct aic7770_identity *entry,
 				aic7770_dev_t dev, u_int eisaBase);
 
-void
+int
 ahc_linux_eisa_init(void)
 {
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
@@ -82,7 +82,7 @@
 	int i;
 
 	if (aic7xxx_probe_eisa_vl == 0)
-		return;
+		return -ENODEV;
 
 	/*
 	 * Linux requires the EISA IDs to be specified in
@@ -93,7 +93,7 @@
 					 (ahc_num_aic7770_devs + 1),
 					 M_DEVBUF, M_NOWAIT);
 	if (aic7770_driver.id_table == NULL)
-		return;
+		return -ENOMEM;
 
 	for (eid = (struct eisa_device_id *)aic7770_driver.id_table,
 	     id = aic7770_ident_table, i = 0;
@@ -109,15 +109,16 @@
 	}
 	eid->sig[0] = 0;
 
-	eisa_driver_register(&aic7770_driver);
+	return eisa_driver_register(&aic7770_driver);
 #else /* LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) */
 	struct aic7770_identity *entry;
 	u_int  slot;
 	u_int  eisaBase;
 	u_int  i;
+	int ret = -ENODEV;
 
 	if (aic7xxx_probe_eisa_vl == 0)
-		return;
+		return ret;
 
 	eisaBase = 0x1000 + AHC_EISA_SLOT_OFFSET;
 	for (slot = 1; slot < NUMSLOTS; eisaBase+=0x1000, slot++) {
@@ -146,24 +147,22 @@
 			continue;  /* no EISA card in slot */
 
 		entry = aic7770_find_device(eisa_id);
-		if (entry != NULL)
+		if (entry != NULL) {
 			aic7770_linux_config(entry, NULL, eisaBase);
+			ret = 0;
+		}
 	}
+	return ret;
 #endif
 }
 
 void
 ahc_linux_eisa_exit(void)
 {
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
-	if (aic7xxx_probe_eisa_vl == 0)
-		return;
-
-	if (aic7770_driver.id_table != NULL) {
+	if(aic7xxx_probe_eisa_vl != 0 && aic7770_driver.id_table != NULL) {
 		eisa_driver_unregister(&aic7770_driver);
 		free(aic7770_driver.id_table, M_DEVBUF);
 	}
-#endif
 }
 
 static int
diff -Nru a/drivers/scsi/aic7xxx/aic79xx_osm.c b/drivers/scsi/aic7xxx/aic79xx_osm.c
--- a/drivers/scsi/aic7xxx/aic79xx_osm.c	Sun May 16 01:18:35 2004
+++ b/drivers/scsi/aic7xxx/aic79xx_osm.c	Sun May 16 01:18:35 2004
@@ -2591,6 +2591,7 @@
 	sprintf(current->comm, "ahd_dv_%d", ahd->unit);
 #else
 	daemonize("ahd_dv_%d", ahd->unit);
+	current->flags |= PF_FREEZE;
 #endif
 	unlock_kernel();
 
diff -Nru a/drivers/scsi/aic7xxx/aic7xxx_osm.c b/drivers/scsi/aic7xxx/aic7xxx_osm.c
--- a/drivers/scsi/aic7xxx/aic7xxx_osm.c	Sun May 16 01:18:33 2004
+++ b/drivers/scsi/aic7xxx/aic7xxx_osm.c	Sun May 16 01:18:33 2004
@@ -843,7 +843,8 @@
 ahc_linux_detect(Scsi_Host_Template *template)
 {
 	struct	ahc_softc *ahc;
-	int     found;
+	int     found = 0;
+	int	eisa_err, pci_err;
 
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
 	/*
@@ -891,28 +892,29 @@
 	 */
 	ahc_list_lockinit();
 
-#ifdef CONFIG_PCI
-	ahc_linux_pci_init();
-#endif
+	pci_err = ahc_linux_pci_init();
+	eisa_err = ahc_linux_eisa_init();
+
+	if(pci_err && eisa_err)
+		goto out;
 
-#ifdef CONFIG_EISA
-	ahc_linux_eisa_init();
-#endif
 
 	/*
 	 * Register with the SCSI layer all
 	 * controllers we've found.
 	 */
-	found = 0;
 	TAILQ_FOREACH(ahc, &ahc_tailq, links) {
 
 		if (ahc_linux_register_host(ahc, template) == 0)
 			found++;
 	}
+out:
+
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
 	spin_lock_irq(&io_request_lock);
 #endif
 	aic7xxx_detect_complete++;
+
 	return (found);
 }
 
@@ -1534,6 +1536,7 @@
 
 	/* Still equal.  Sort by BIOS address, ioport, or bus/slot/func. */
 	switch (rvalue) {
+#ifdef CONFIG_PCI
 	case AHC_PCI:
 	{
 		char primary_channel;
@@ -1566,6 +1569,7 @@
 			value = 1;
 		break;
 	}
+#endif
 	case AHC_EISA:
 		if ((rahc->flags & AHC_BIOS_ENABLED) != 0) {
 			value = rahc->platform_data->bios_address
@@ -2296,6 +2300,7 @@
 	sprintf(current->comm, "ahc_dv_%d", ahc->unit);
 #else
 	daemonize("ahc_dv_%d", ahc->unit);
+	current->flags |= PF_FREEZE;
 #endif
 	unlock_kernel();
 
@@ -3969,11 +3974,10 @@
 }
 
 static void
-ahc_linux_free_device(struct ahc_softc *ahc, struct ahc_linux_device *dev)
+__ahc_linux_free_device(struct ahc_softc *ahc, struct ahc_linux_device *dev)
 {
 	struct ahc_linux_target *targ;
 
-	del_timer_sync(&dev->timer);
 	targ = dev->target;
 	targ->devices[dev->lun] = NULL;
 	free(dev, M_DEVBUF);
@@ -3983,6 +3987,13 @@
 		ahc_linux_free_target(ahc, targ);
 }
 
+static void
+ahc_linux_free_device(struct ahc_softc *ahc, struct ahc_linux_device *dev)
+{
+	del_timer_sync(&dev->timer);
+	__ahc_linux_free_device(ahc, dev);
+}
+
 void
 ahc_send_async(struct ahc_softc *ahc, char channel,
 	       u_int target, u_int lun, ac_code code, void *arg)
@@ -4693,7 +4704,7 @@
 		ahc_linux_run_device_queue(ahc, dev);
 	if (TAILQ_EMPTY(&dev->busyq)
 	 && dev->active == 0)
-		ahc_linux_free_device(ahc, dev);
+		__ahc_linux_free_device(ahc, dev);
 	ahc_unlock(ahc, &s);
 }
 
@@ -5067,11 +5078,17 @@
 	}
 }
 
+static void ahc_linux_exit(void);
+
 static int __init
 ahc_linux_init(void)
 {
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
-	return (ahc_linux_detect(&aic7xxx_driver_template) ? 0 : -ENODEV);
+	int rc = ahc_linux_detect(&aic7xxx_driver_template);
+	if (rc)
+		return rc;
+	ahc_linux_exit();
+	return -ENODEV;
 #else
 	scsi_register_module(MODULE_SCSI_HA, &aic7xxx_driver_template);
 	if (aic7xxx_driver_template.present == 0) {
@@ -5084,7 +5101,7 @@
 #endif
 }
 
-static void __exit
+static void
 ahc_linux_exit(void)
 {
 	struct ahc_softc *ahc;
@@ -5111,12 +5128,8 @@
 	 */
 	scsi_unregister_module(MODULE_SCSI_HA, &aic7xxx_driver_template);
 #endif
-#ifdef CONFIG_PCI
 	ahc_linux_pci_exit();
-#endif
-#ifdef CONFIG_EISA
 	ahc_linux_eisa_exit();
-#endif
 }
 
 module_init(ahc_linux_init);
diff -Nru a/drivers/scsi/aic7xxx/aic7xxx_osm.h b/drivers/scsi/aic7xxx/aic7xxx_osm.h
--- a/drivers/scsi/aic7xxx/aic7xxx_osm.h	Sun May 16 01:18:34 2004
+++ b/drivers/scsi/aic7xxx/aic7xxx_osm.h	Sun May 16 01:18:34 2004
@@ -840,11 +840,17 @@
 
 #ifdef CONFIG_EISA
 extern uint32_t aic7xxx_probe_eisa_vl;
-void			 ahc_linux_eisa_init(void);
+int			 ahc_linux_eisa_init(void);
 void			 ahc_linux_eisa_exit(void);
 int			 aic7770_map_registers(struct ahc_softc *ahc,
 					       u_int port);
 int			 aic7770_map_int(struct ahc_softc *ahc, u_int irq);
+#else
+static inline int	ahc_linux_eisa_init(void) {
+	return -ENODEV;
+}
+static inline void	ahc_linux_eisa_exit(void) {
+}
 #endif
 
 /******************************* PCI Routines *********************************/
@@ -931,6 +937,12 @@
 ahc_get_pci_bus(ahc_dev_softc_t pci)
 {
 	return (pci->bus->number);
+}
+#else
+static inline int ahc_linux_pci_init(void) {
+	return -ENODEV;
+}
+static inline void ahc_linux_pci_exit(void) {
 }
 #endif
 
diff -Nru a/drivers/scsi/aic7xxx_old/aic7xxx_proc.c b/drivers/scsi/aic7xxx_old/aic7xxx_proc.c
--- a/drivers/scsi/aic7xxx_old/aic7xxx_proc.c	Sun May 16 01:18:36 2004
+++ b/drivers/scsi/aic7xxx_old/aic7xxx_proc.c	Sun May 16 01:18:36 2004
@@ -319,13 +319,13 @@
         aic_dev->r_total+aic_dev->w_total, aic_dev->r_total, aic_dev->w_total);
     size += sprintf(BLS, "%s\n", HDRB);
     size += sprintf(BLS, "   Reads:");
-    for (i = 0; i < NUMBER(aic_dev->r_bins); i++)
+    for (i = 0; i < ARRAY_SIZE(aic_dev->r_bins); i++)
     {
       size += sprintf(BLS, " %10ld", aic_dev->r_bins[i]);
     }
     size += sprintf(BLS, "\n");
     size += sprintf(BLS, "  Writes:");
-    for (i = 0; i < NUMBER(aic_dev->w_bins); i++)
+    for (i = 0; i < ARRAY_SIZE(aic_dev->w_bins); i++)
     {
       size += sprintf(BLS, " %10ld", aic_dev->w_bins[i]);
     }
@@ -347,7 +347,7 @@
   else
   {
     *start = buffer;
-    length = MIN(length, size - offset);
+    length = min_t(int, length, size - offset);
     memcpy(buffer, &aic7xxx_buffer[offset], length);
   }
 
diff -Nru a/drivers/scsi/aic7xxx_old.c b/drivers/scsi/aic7xxx_old.c
--- a/drivers/scsi/aic7xxx_old.c	Sun May 16 01:18:34 2004
+++ b/drivers/scsi/aic7xxx_old.c	Sun May 16 01:18:34 2004
@@ -254,9 +254,6 @@
 
 #define AIC7XXX_C_VERSION  "5.2.6"
 
-#define NUMBER(arr)     (sizeof(arr) / sizeof(arr[0]))
-#define MIN(a,b)        (((a) < (b)) ? (a) : (b))
-#define MAX(a,b)        (((a) > (b)) ? (a) : (b))
 #define ALL_TARGETS -1
 #define ALL_CHANNELS -1
 #define ALL_LUNS -1
@@ -1376,7 +1373,7 @@
 
   while ((p = strsep(&s, ",.")) != NULL)
   {
-    for (i = 0; i < NUMBER(options); i++)
+    for (i = 0; i < ARRAY_SIZE(options); i++)
     {
       n = strlen(options[i].name);
       if (!strncmp(options[i].name, p, n))
@@ -1423,7 +1420,7 @@
                   else if (instance >= 0)
                     instance++;
                   if ( (device >= MAX_TARGETS) || 
-                       (instance >= NUMBER(aic7xxx_tag_info)) )
+                       (instance >= ARRAY_SIZE(aic7xxx_tag_info)) )
                     done = TRUE;
                   tok++;
                   if (!done)
@@ -1447,7 +1444,7 @@
                     }
                   }
                   if ( (instance >= 0) && (device >= 0) &&
-                       (instance < NUMBER(aic7xxx_tag_info)) &&
+                       (instance < ARRAY_SIZE(aic7xxx_tag_info)) &&
                        (device < MAX_TARGETS) )
                     aic7xxx_tag_info[instance].tag_commands[device] =
                       simple_strtoul(tok, NULL, 0) & 0xff;
@@ -1658,7 +1655,7 @@
         {
           int end_addr;
 
-          end_addr = MIN(address, skip_addr);
+          end_addr = min_t(int, address, skip_addr);
           address_offset += end_addr - i;
           i = skip_addr;
         }
@@ -1884,7 +1881,7 @@
       if(!(p->features & AHC_ULTRA3))
       {
         *options = 0;
-        maxsync = MAX(maxsync, AHC_SYNCRATE_ULTRA2);
+        maxsync = max_t(unsigned int, maxsync, AHC_SYNCRATE_ULTRA2);
       }
       break;
     case MSG_EXT_PPR_OPTION_DT_CRC_QUICK:
@@ -1892,7 +1889,7 @@
       if(!(p->features & AHC_ULTRA3))
       {
         *options = 0;
-        maxsync = MAX(maxsync, AHC_SYNCRATE_ULTRA2);
+        maxsync = max_t(unsigned int, maxsync, AHC_SYNCRATE_ULTRA2);
       }
       else
       {
@@ -1916,7 +1913,7 @@
       break;
     default:
       *options = 0;
-      maxsync = MAX(maxsync, AHC_SYNCRATE_ULTRA2);
+      maxsync = max_t(unsigned int, maxsync, AHC_SYNCRATE_ULTRA2);
       break;
   }
   syncrate = &aic7xxx_syncrates[maxsync];
@@ -2057,7 +2054,7 @@
     else
       maxoffset = MAX_OFFSET_8BIT;
   }
-  *offset = MIN(*offset, maxoffset);
+  *offset = min(*offset, maxoffset);
 }
 
 /*+F*************************************************************************
@@ -2570,7 +2567,7 @@
         break;
       }
     }
-    scb_count = MIN( (i-1), p->scb_data->maxscbs - p->scb_data->numscbs);
+    scb_count = min( (i-1), p->scb_data->maxscbs - p->scb_data->numscbs);
     scb_ap = (struct aic7xxx_scb *)kmalloc(sizeof (struct aic7xxx_scb) * scb_count
 					   + sizeof(struct aic7xxx_scb_dma), GFP_ATOMIC);
     if (scb_ap == NULL)
@@ -5042,7 +5039,7 @@
             if(p->user[tindex].offset)
             {
               aic_dev->needsdtr_copy = 1;
-              aic_dev->goal.period = MAX(10,p->user[tindex].period);
+              aic_dev->goal.period = max_t(unsigned char, 10,p->user[tindex].period);
               if(p->features & AHC_ULTRA2)
               {
                 aic_dev->goal.offset = MAX_OFFSET_ULTRA2;
@@ -5086,8 +5083,8 @@
            * the device isn't allowed to send values greater than the ones
            * we first sent to it.
            */
-          new_period = MAX(period, aic_dev->goal.period);
-          new_offset = MIN(offset, aic_dev->goal.offset);
+          new_period = max_t(unsigned int, period, aic_dev->goal.period);
+          new_offset = min_t(unsigned int, offset, aic_dev->goal.offset);
         }
  
         /*
@@ -5208,7 +5205,7 @@
             if(p->user[tindex].offset)
             {
               aic_dev->needsdtr_copy = 1;
-              aic_dev->goal.period = MAX(10,p->user[tindex].period);
+              aic_dev->goal.period = max_t(unsigned char, 10, p->user[tindex].period);
               if(p->features & AHC_ULTRA2)
               {
                 aic_dev->goal.offset = MAX_OFFSET_ULTRA2;
@@ -6413,7 +6410,7 @@
     unsigned char errno = aic_inb(p, ERROR);
 
     printk(KERN_ERR "(scsi%d) BRKADRINT error(0x%x):\n", p->host_no, errno);
-    for (i = 0; i < NUMBER(hard_error); i++)
+    for (i = 0; i < ARRAY_SIZE(hard_error); i++)
     {
       if (errno & hard_error[i].errno)
       {
@@ -6562,7 +6559,7 @@
       else
       {
         aic_dev->needsdtr = aic_dev->needsdtr_copy = 1;
-        aic_dev->goal.period = MAX(10, aic_dev->goal.period);
+        aic_dev->goal.period = max_t(unsigned char, 10, aic_dev->goal.period);
         aic_dev->goal.options = 0;
       }
     }
@@ -6673,7 +6670,7 @@
     }
     else
     {
-      if (p->instance >= NUMBER(aic7xxx_tag_info))
+      if (p->instance >= ARRAY_SIZE(aic7xxx_tag_info))
       {
         static int print_warning = TRUE;
         if(print_warning)
@@ -6850,7 +6847,7 @@
     buf[i] = inb(base + i);
   }
 
-  for (i = 0; i < NUMBER(AIC7xxx); i++)
+  for (i = 0; i < ARRAY_SIZE(AIC7xxx); i++)
   {
     /*
      * Signature match on enabled card?
@@ -9199,7 +9196,7 @@
     unsigned int  devconfig, i, oldverbose;
     struct pci_dev *pdev = NULL;
 
-    for (i = 0; i < NUMBER(aic_pdevs); i++)
+    for (i = 0; i < ARRAY_SIZE(aic_pdevs); i++)
     {
       pdev = NULL;
       while ((pdev = pci_find_device(aic_pdevs[i].vendor_id,
@@ -9678,7 +9675,9 @@
           found++;
 	  continue;
 skip_pci_controller:
+#ifdef CONFIG_PCI
 	  pci_release_regions(temp_p->pdev);
+#endif
 	  kfree(temp_p);
         }  /* Found an Adaptec PCI device. */
         else /* Well, we found one, but we couldn't get any memory */
@@ -9698,7 +9697,7 @@
    * EISA/VL-bus card signature probe.
    */
   slot = MINSLOT;
-  while ( (slot <= MAXSLOT) && 
+  while ( (slot <= MAXSLOT) &&
          !(aic7xxx_no_probe) )
   {
     base = SLOTBASE(slot) + MINREG;
@@ -10097,7 +10096,7 @@
       int i;
       
       left = found;
-      for (i=0; i<NUMBER(sort_list); i++)
+      for (i=0; i<ARRAY_SIZE(sort_list); i++)
       {
         temp_p = sort_list[i];
         while(temp_p != NULL)
@@ -10970,8 +10969,10 @@
 #endif /* MMAPIO */
   if(!p->pdev)
     release_region(p->base, MAXREG - MINREG);
+#ifdef CONFIG_PCI
   else
     pci_release_regions(p->pdev);
+#endif
   prev = NULL;
   next = first_aic7xxx;
   while(next != NULL)
diff -Nru a/drivers/scsi/ata_piix.c b/drivers/scsi/ata_piix.c
--- a/drivers/scsi/ata_piix.c	Sun May 16 01:18:35 2004
+++ b/drivers/scsi/ata_piix.c	Sun May 16 01:18:35 2004
@@ -2,6 +2,10 @@
 
     ata_piix.c - Intel PATA/SATA controllers
 
+    Maintained by:  Jeff Garzik <jgarzik@pobox.com>
+    		    Please ALWAYS copy linux-ide@vger.kernel.org
+		    on emails.
+
 
 	Copyright 2003-2004 Red Hat Inc
 	Copyright 2003-2004 Jeff Garzik
@@ -132,6 +136,7 @@
 
 	.phy_reset		= piix_pata_phy_reset,
 
+	.bmdma_setup		= ata_bmdma_setup_pio,
 	.bmdma_start		= ata_bmdma_start_pio,
 	.fill_sg		= ata_fill_sg,
 	.eng_timeout		= ata_eng_timeout,
@@ -154,6 +159,7 @@
 
 	.phy_reset		= piix_sata_phy_reset,
 
+	.bmdma_setup		= ata_bmdma_setup_pio,
 	.bmdma_start		= ata_bmdma_start_pio,
 	.fill_sg		= ata_fill_sg,
 	.eng_timeout		= ata_eng_timeout,
diff -Nru a/drivers/scsi/hosts.c b/drivers/scsi/hosts.c
--- a/drivers/scsi/hosts.c	Sun May 16 01:18:33 2004
+++ b/drivers/scsi/hosts.c	Sun May 16 01:18:33 2004
@@ -345,7 +345,7 @@
 }
 
 /**
- * *scsi_host_get - inc a Scsi_Host ref count
+ * scsi_host_get - inc a Scsi_Host ref count
  * @shost:	Pointer to Scsi_Host to inc.
  **/
 struct Scsi_Host *scsi_host_get(struct Scsi_Host *shost)
@@ -357,7 +357,7 @@
 }
 
 /**
- * *scsi_host_put - dec a Scsi_Host ref count
+ * scsi_host_put - dec a Scsi_Host ref count
  * @shost:	Pointer to Scsi_Host to dec.
  **/
 void scsi_host_put(struct Scsi_Host *shost)
diff -Nru a/drivers/scsi/imm.c b/drivers/scsi/imm.c
--- a/drivers/scsi/imm.c	Sun May 16 01:18:37 2004
+++ b/drivers/scsi/imm.c	Sun May 16 01:18:37 2004
@@ -12,6 +12,18 @@
  */
 
 #include <linux/config.h>
+#include <linux/init.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/blkdev.h>
+#include <linux/parport.h>
+#include <linux/workqueue.h>
+#include <asm/io.h>
+
+#include <scsi/scsi.h>
+#include <scsi/scsi_cmnd.h>
+#include <scsi/scsi_device.h>
+#include <scsi/scsi_host.h>
 
 /* The following #define is to avoid a clash with hosts.c */
 #define IMM_PROBE_SPP   0x0001
@@ -20,22 +32,13 @@
 #define IMM_PROBE_EPP17 0x0100
 #define IMM_PROBE_EPP19 0x0200
 
-#include <linux/init.h>
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/blkdev.h>
-#include <asm/io.h>
-#include <linux/parport.h>
-#include <linux/workqueue.h>
-#include "scsi.h"
-#include "hosts.h"
 
 typedef struct {
 	struct pardevice *dev;	/* Parport device entry         */
 	int base;		/* Actual port address          */
 	int base_hi;		/* Hi Base address for ECP-ISA chipset */
 	int mode;		/* Transfer mode                */
-	Scsi_Cmnd *cur_cmd;	/* Current queued command       */
+	struct scsi_cmnd *cur_cmd;	/* Current queued command       */
 	struct work_struct imm_tq;	/* Polling interrupt stuff       */
 	unsigned long jstart;	/* Jiffies at start             */
 	unsigned failed:1;	/* Failure flag                 */
@@ -613,7 +616,7 @@
 	return device_check(dev);
 }
 
-static inline int imm_send_command(Scsi_Cmnd *cmd)
+static inline int imm_send_command(struct scsi_cmnd *cmd)
 {
 	imm_struct *dev = imm_dev(cmd->device->host);
 	int k;
@@ -633,7 +636,7 @@
  * The driver appears to remain stable if we speed up the parallel port
  * i/o in this function, but not elsewhere.
  */
-static int imm_completion(Scsi_Cmnd *cmd)
+static int imm_completion(struct scsi_cmnd *cmd)
 {
 	/* Return codes:
 	 * -1     Error
@@ -736,7 +739,7 @@
 static void imm_interrupt(void *data)
 {
 	imm_struct *dev = (imm_struct *) data;
-	Scsi_Cmnd *cmd = dev->cur_cmd;
+	struct scsi_cmnd *cmd = dev->cur_cmd;
 	struct Scsi_Host *host = cmd->device->host;
 	unsigned long flags;
 
@@ -796,7 +799,7 @@
 	return;
 }
 
-static int imm_engine(imm_struct *dev, Scsi_Cmnd *cmd)
+static int imm_engine(imm_struct *dev, struct scsi_cmnd *cmd)
 {
 	unsigned short ppb = dev->base;
 	unsigned char l = 0, h = 0;
@@ -937,7 +940,8 @@
 	return 0;
 }
 
-static int imm_queuecommand(Scsi_Cmnd *cmd, void (*done)(Scsi_Cmnd *))
+static int imm_queuecommand(struct scsi_cmnd *cmd,
+		void (*done)(struct scsi_cmnd *))
 {
 	imm_struct *dev = imm_dev(cmd->device->host);
 
@@ -980,7 +984,7 @@
 	return 0;
 }
 
-static int imm_abort(Scsi_Cmnd *cmd)
+static int imm_abort(struct scsi_cmnd *cmd)
 {
 	imm_struct *dev = imm_dev(cmd->device->host);
 	/*
@@ -1012,7 +1016,7 @@
 	w_ctr(base, 0x04);
 }
 
-static int imm_reset(Scsi_Cmnd *cmd)
+static int imm_reset(struct scsi_cmnd *cmd)
 {
 	imm_struct *dev = imm_dev(cmd->device->host);
 
@@ -1114,7 +1118,7 @@
 	return -ENODEV;
 }
 
-static Scsi_Host_Template imm_template = {
+static struct scsi_host_template imm_template = {
 	.module			= THIS_MODULE,
 	.proc_name		= "imm",
 	.proc_info		= imm_proc_info,
diff -Nru a/drivers/scsi/imm.h b/drivers/scsi/imm.h
--- a/drivers/scsi/imm.h	Sun May 16 01:18:33 2004
+++ b/drivers/scsi/imm.h	Sun May 16 01:18:33 2004
@@ -139,6 +139,6 @@
 #define w_ctr(x,y)      outb(y, (x)+2)
 #endif
 
-static int imm_engine(imm_struct *, Scsi_Cmnd *);
+static int imm_engine(imm_struct *, struct scsi_cmnd *);
 
 #endif				/* _IMM_H */
diff -Nru a/drivers/scsi/ini9100u.c b/drivers/scsi/ini9100u.c
--- a/drivers/scsi/ini9100u.c	Sun May 16 01:18:34 2004
+++ b/drivers/scsi/ini9100u.c	Sun May 16 01:18:34 2004
@@ -106,6 +106,8 @@
  *		- Changed the assumption that HZ = 100
  * 10/17/03 mc	- v1.04
  *		- added new DMA API support
+ * 06/01/04 jmd	- v1.04a
+ *		- Re-add reset_bus support
  **************************************************************************/
 
 #define CVT_LINUX_VERSION(V,P,S)        (V * 65536 + P * 256 + S)
@@ -149,6 +151,7 @@
 	.queuecommand	= i91u_queue,
 //	.abort		= i91u_abort,
 //	.reset		= i91u_reset,
+	.eh_bus_reset_handler = i91u_bus_reset,
 	.bios_param	= i91u_biosparam,
 	.can_queue	= 1,
 	.this_id	= 1,
@@ -161,7 +164,7 @@
 char *i91uCopyright = "Copyright (C) 1996-98";
 char *i91uInitioName = "by Initio Corporation";
 char *i91uProductName = "INI-9X00U/UW";
-char *i91uVersion = "v1.04";
+char *i91uVersion = "v1.04a";
 
 #define TULSZ(sz)     (sizeof(sz) / sizeof(sz[0]))
 #define TUL_RDWORD(x,y)         (short)(inl((int)((ULONG)((ULONG)x+(UCHAR)y)) ))
@@ -548,6 +551,15 @@
 		return tul_reset_scsi_bus(pHCB);
 	else
 		return tul_device_reset(pHCB, (ULONG) SCpnt, SCpnt->device->id, reset_flags);
+}
+
+int i91u_bus_reset(Scsi_Cmnd * SCpnt)
+{
+	HCS *pHCB;
+
+	pHCB = (HCS *) SCpnt->device->host->base;
+	tul_reset_scsi(pHCB, 0);
+	return SUCCESS;
 }
 
 /*
diff -Nru a/drivers/scsi/ini9100u.h b/drivers/scsi/ini9100u.h
--- a/drivers/scsi/ini9100u.h	Sun May 16 01:18:35 2004
+++ b/drivers/scsi/ini9100u.h	Sun May 16 01:18:35 2004
@@ -82,10 +82,11 @@
 extern int i91u_queue(Scsi_Cmnd *, void (*done) (Scsi_Cmnd *));
 extern int i91u_abort(Scsi_Cmnd *);
 extern int i91u_reset(Scsi_Cmnd *, unsigned int);
+extern int i91u_bus_reset(Scsi_Cmnd *);
 extern int i91u_biosparam(struct scsi_device *, struct block_device *,
 		sector_t, int *);
 
-#define i91u_REVID "Initio INI-9X00U/UW SCSI device driver; Revision: 1.03g"
+#define i91u_REVID "Initio INI-9X00U/UW SCSI device driver; Revision: 1.04a"
 
 #define VIRT_TO_BUS(i)  (unsigned int) virt_to_bus((void *)(i))
 #define ULONG   unsigned long
diff -Nru a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/drivers/scsi/ipr.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,6012 @@
+/*
+ * ipr.c -- driver for IBM Power Linux RAID adapters
+ *
+ * Written By: Brian King, IBM Corporation
+ *
+ * Copyright (C) 2003, 2004 IBM Corporation
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ */
+
+/*
+ * Notes:
+ *
+ * This driver is used to control the following SCSI adapters:
+ *
+ * IBM iSeries: 5702, 5703, 2780, 5709, 570A, 570B
+ *
+ * IBM pSeries: PCI-X Dual Channel Ultra 320 SCSI RAID Adapter
+ *              PCI-X Dual Channel Ultra 320 SCSI Adapter
+ *              PCI-X Dual Channel Ultra 320 SCSI RAID Enablement Card
+ *              Embedded SCSI adapter on p615 and p655 systems
+ *
+ * Supported Hardware Features:
+ *	- Ultra 320 SCSI controller
+ *	- PCI-X host interface
+ *	- Embedded PowerPC RISC Processor and Hardware XOR DMA Engine
+ *	- Non-Volatile Write Cache
+ *	- Supports attachment of non-RAID disks, tape, and optical devices
+ *	- RAID Levels 0, 5, 10
+ *	- Hot spare
+ *	- Background Parity Checking
+ *	- Background Data Scrubbing
+ *	- Ability to increase the capacity of an existing RAID 5 disk array
+ *		by adding disks
+ *
+ * Driver Features:
+ *	- Tagged command queuing
+ *	- Adapter microcode download
+ *	- PCI hot plug
+ *	- SCSI device hot plug
+ *
+ */
+
+#include <linux/config.h>
+#include <linux/fs.h>
+#include <linux/init.h>
+#include <linux/types.h>
+#include <linux/errno.h>
+#include <linux/kernel.h>
+#include <linux/ioport.h>
+#include <linux/delay.h>
+#include <linux/pci.h>
+#include <linux/wait.h>
+#include <linux/spinlock.h>
+#include <linux/sched.h>
+#include <linux/interrupt.h>
+#include <linux/blkdev.h>
+#include <linux/firmware.h>
+#include <linux/module.h>
+#include <linux/moduleparam.h>
+#include <asm/io.h>
+#include <asm/irq.h>
+#include <asm/processor.h>
+#include <scsi/scsi.h>
+#include <scsi/scsi_host.h>
+#include <scsi/scsi_tcq.h>
+#include <scsi/scsi_eh.h>
+#include <scsi/scsi_cmnd.h>
+#include <scsi/scsi_request.h>
+#include "ipr.h"
+
+/*
+ *   Global Data
+ */
+static struct list_head ipr_ioa_head = LIST_HEAD_INIT(ipr_ioa_head);
+static unsigned int ipr_log_level = IPR_DEFAULT_LOG_LEVEL;
+static unsigned int ipr_max_speed = 1;
+static int ipr_testmode = 0;
+static spinlock_t ipr_driver_lock = SPIN_LOCK_UNLOCKED;
+
+/* This table describes the differences between DMA controller chips */
+static const struct ipr_chip_cfg_t ipr_chip_cfg[] = {
+	{ /* Gemstone */
+		.mailbox = 0x0042C,
+		.cache_line_size = 0x20,
+		{
+			.set_interrupt_mask_reg = 0x0022C,
+			.clr_interrupt_mask_reg = 0x00230,
+			.sense_interrupt_mask_reg = 0x0022C,
+			.clr_interrupt_reg = 0x00228,
+			.sense_interrupt_reg = 0x00224,
+			.ioarrin_reg = 0x00404,
+			.sense_uproc_interrupt_reg = 0x00214,
+			.set_uproc_interrupt_reg = 0x00214,
+			.clr_uproc_interrupt_reg = 0x00218
+		}
+	},
+	{ /* Snipe */
+		.mailbox = 0x0052C,
+		.cache_line_size = 0x20,
+		{
+			.set_interrupt_mask_reg = 0x00288,
+			.clr_interrupt_mask_reg = 0x0028C,
+			.sense_interrupt_mask_reg = 0x00288,
+			.clr_interrupt_reg = 0x00284,
+			.sense_interrupt_reg = 0x00280,
+			.ioarrin_reg = 0x00504,
+			.sense_uproc_interrupt_reg = 0x00290,
+			.set_uproc_interrupt_reg = 0x00290,
+			.clr_uproc_interrupt_reg = 0x00294
+		}
+	},
+};
+
+static int ipr_max_bus_speeds [] = {
+	IPR_80MBs_SCSI_RATE, IPR_U160_SCSI_RATE, IPR_U320_SCSI_RATE
+};
+
+MODULE_AUTHOR("Brian King <brking@us.ibm.com>");
+MODULE_DESCRIPTION("IBM Power RAID SCSI Adapter Driver");
+module_param_named(max_speed, ipr_max_speed, uint, 0);
+MODULE_PARM_DESC(max_speed, "Maximum bus speed (0-2). Default: 1=U160. Speeds: 0=80 MB/s, 1=U160, 2=U320");
+module_param_named(log_level, ipr_log_level, uint, 0);
+MODULE_PARM_DESC(log_level, "Set to 0 - 4 for increasing verbosity of device driver");
+module_param_named(testmode, ipr_testmode, int, 0);
+MODULE_PARM_DESC(testmode, "DANGEROUS!!! Allows unsupported configurations");
+MODULE_LICENSE("GPL");
+MODULE_VERSION(IPR_DRIVER_VERSION);
+
+static const char *ipr_gpdd_dev_end_states[] = {
+	"Command complete",
+	"Terminated by host",
+	"Terminated by device reset",
+	"Terminated by bus reset",
+	"Unknown",
+	"Command not started"
+};
+
+static const char *ipr_gpdd_dev_bus_phases[] = {
+	"Bus free",
+	"Arbitration",
+	"Selection",
+	"Message out",
+	"Command",
+	"Message in",
+	"Data out",
+	"Data in",
+	"Status",
+	"Reselection",
+	"Unknown"
+};
+
+/*  A constant array of IOASCs/URCs/Error Messages */
+static const
+struct ipr_error_table_t ipr_error_table[] = {
+	{0x00000000, 1, 1,
+	"8155: An unknown error was received"},
+	{0x00330000, 0, 0,
+	"Soft underlength error"},
+	{0x005A0000, 0, 0,
+	"Command to be cancelled not found"},
+	{0x00808000, 0, 0,
+	"Qualified success"},
+	{0x01080000, 1, 1,
+	"FFFE: Soft device bus error recovered by the IOA"},
+	{0x01170600, 0, 1,
+	"FFF9: Device sector reassign successful"},
+	{0x01170900, 0, 1,
+	"FFF7: Media error recovered by device rewrite procedures"},
+	{0x01180200, 0, 1,
+	"7001: IOA sector reassignment successful"},
+	{0x01180500, 0, 1,
+	"FFF9: Soft media error. Sector reassignment recommended"},
+	{0x01180600, 0, 1,
+	"FFF7: Media error recovered by IOA rewrite procedures"},
+	{0x01418000, 0, 1,
+	"FF3D: Soft PCI bus error recovered by the IOA"},
+	{0x01440000, 1, 1,
+	"FFF6: Device hardware error recovered by the IOA"},
+	{0x01448100, 0, 1,
+	"FFF6: Device hardware error recovered by the device"},
+	{0x01448200, 1, 1,
+	"FF3D: Soft IOA error recovered by the IOA"},
+	{0x01448300, 0, 1,
+	"FFFA: Undefined device response recovered by the IOA"},
+	{0x014A0000, 1, 1,
+	"FFF6: Device bus error, message or command phase"},
+	{0x015D0000, 0, 1,
+	"FFF6: Failure prediction threshold exceeded"},
+	{0x015D9200, 0, 1,
+	"8009: Impending cache battery pack failure"},
+	{0x02040400, 0, 0,
+	"34FF: Disk device format in progress"},
+	{0x023F0000, 0, 0,
+	"Synchronization required"},
+	{0x024E0000, 0, 0,
+	"No ready, IOA shutdown"},
+	{0x02670100, 0, 1,
+	"3020: Storage subsystem configuration error"},
+	{0x03110B00, 0, 0,
+	"FFF5: Medium error, data unreadable, recommend reassign"},
+	{0x03110C00, 0, 0,
+	"7000: Medium error, data unreadable, do not reassign"},
+	{0x03310000, 0, 1,
+	"FFF3: Disk media format bad"},
+	{0x04050000, 0, 1,
+	"3002: Addressed device failed to respond to selection"},
+	{0x04080000, 1, 1,
+	"3100: Device bus error"},
+	{0x04080100, 0, 1,
+	"3109: IOA timed out a device command"},
+	{0x04088000, 0, 0,
+	"3120: SCSI bus is not operational"},
+	{0x04118000, 0, 1,
+	"9000: IOA reserved area data check"},
+	{0x04118100, 0, 1,
+	"9001: IOA reserved area invalid data pattern"},
+	{0x04118200, 0, 1,
+	"9002: IOA reserved area LRC error"},
+	{0x04320000, 0, 1,
+	"102E: Out of alternate sectors for disk storage"},
+	{0x04330000, 1, 1,
+	"FFF4: Data transfer underlength error"},
+	{0x04338000, 1, 1,
+	"FFF4: Data transfer overlength error"},
+	{0x043E0100, 0, 1,
+	"3400: Logical unit failure"},
+	{0x04408500, 0, 1,
+	"FFF4: Device microcode is corrupt"},
+	{0x04418000, 1, 1,
+	"8150: PCI bus error"},
+	{0x04430000, 1, 0,
+	"Unsupported device bus message received"},
+	{0x04440000, 1, 1,
+	"FFF4: Disk device problem"},
+	{0x04448200, 1, 1,
+	"8150: Permanent IOA failure"},
+	{0x04448300, 0, 1,
+	"3010: Disk device returned wrong response to IOA"},
+	{0x04448400, 0, 1,
+	"8151: IOA microcode error"},
+	{0x04448500, 0, 0,
+	"Device bus status error"},
+	{0x04448600, 0, 1,
+	"8157: IOA error requiring IOA reset to recover"},
+	{0x04490000, 0, 0,
+	"Message reject received from the device"},
+	{0x04449200, 0, 1,
+	"8008: A permanent cache battery pack failure occurred"},
+	{0x0444A000, 0, 1,
+	"9090: Disk unit has been modified after the last known status"},
+	{0x0444A200, 0, 1,
+	"9081: IOA detected device error"},
+	{0x0444A300, 0, 1,
+	"9082: IOA detected device error"},
+	{0x044A0000, 1, 1,
+	"3110: Device bus error, message or command phase"},
+	{0x04670400, 0, 1,
+	"9091: Incorrect hardware configuration change has been detected"},
+	{0x046E0000, 0, 1,
+	"FFF4: Command to logical unit failed"},
+	{0x05240000, 1, 0,
+	"Illegal request, invalid request type or request packet"},
+	{0x05250000, 0, 0,
+	"Illegal request, invalid resource handle"},
+	{0x05260000, 0, 0,
+	"Illegal request, invalid field in parameter list"},
+	{0x05260100, 0, 0,
+	"Illegal request, parameter not supported"},
+	{0x05260200, 0, 0,
+	"Illegal request, parameter value invalid"},
+	{0x052C0000, 0, 0,
+	"Illegal request, command sequence error"},
+	{0x06040500, 0, 1,
+	"9031: Array protection temporarily suspended, protection resuming"},
+	{0x06040600, 0, 1,
+	"9040: Array protection temporarily suspended, protection resuming"},
+	{0x06290000, 0, 1,
+	"FFFB: SCSI bus was reset"},
+	{0x06290500, 0, 0,
+	"FFFE: SCSI bus transition to single ended"},
+	{0x06290600, 0, 0,
+	"FFFE: SCSI bus transition to LVD"},
+	{0x06298000, 0, 1,
+	"FFFB: SCSI bus was reset by another initiator"},
+	{0x063F0300, 0, 1,
+	"3029: A device replacement has occurred"},
+	{0x064C8000, 0, 1,
+	"9051: IOA cache data exists for a missing or failed device"},
+	{0x06670100, 0, 1,
+	"9025: Disk unit is not supported at its physical location"},
+	{0x06670600, 0, 1,
+	"3020: IOA detected a SCSI bus configuration error"},
+	{0x06678000, 0, 1,
+	"3150: SCSI bus configuration error"},
+	{0x06690200, 0, 1,
+	"9041: Array protection temporarily suspended"},
+	{0x066B0200, 0, 1,
+	"9030: Array no longer protected due to missing or failed disk unit"},
+	{0x07270000, 0, 0,
+	"Failure due to other device"},
+	{0x07278000, 0, 1,
+	"9008: IOA does not support functions expected by devices"},
+	{0x07278100, 0, 1,
+	"9010: Cache data associated with attached devices cannot be found"},
+	{0x07278200, 0, 1,
+	"9011: Cache data belongs to devices other than those attached"},
+	{0x07278400, 0, 1,
+	"9020: Array missing 2 or more devices with only 1 device present"},
+	{0x07278500, 0, 1,
+	"9021: Array missing 2 or more devices with 2 or more devices present"},
+	{0x07278600, 0, 1,
+	"9022: Exposed array is missing a required device"},
+	{0x07278700, 0, 1,
+	"9023: Array member(s) not at required physical locations"},
+	{0x07278800, 0, 1,
+	"9024: Array not functional due to present hardware configuration"},
+	{0x07278900, 0, 1,
+	"9026: Array not functional due to present hardware configuration"},
+	{0x07278A00, 0, 1,
+	"9027: Array is missing a device and parity is out of sync"},
+	{0x07278B00, 0, 1,
+	"9028: Maximum number of arrays already exist"},
+	{0x07278C00, 0, 1,
+	"9050: Required cache data cannot be located for a disk unit"},
+	{0x07278D00, 0, 1,
+	"9052: Cache data exists for a device that has been modified"},
+	{0x07278F00, 0, 1,
+	"9054: IOA resources not available due to previous problems"},
+	{0x07279100, 0, 1,
+	"9092: Disk unit requires initialization before use"},
+	{0x07279200, 0, 1,
+	"9029: Incorrect hardware configuration change has been detected"},
+	{0x07279600, 0, 1,
+	"9060: One or more disk pairs are missing from an array"},
+	{0x07279700, 0, 1,
+	"9061: One or more disks are missing from an array"},
+	{0x07279800, 0, 1,
+	"9062: One or more disks are missing from an array"},
+	{0x07279900, 0, 1,
+	"9063: Maximum number of functional arrays has been exceeded"},
+	{0x0B260000, 0, 0,
+	"Aborted command, invalid descriptor"},
+	{0x0B5A0000, 0, 0,
+	"Command terminated by host"}
+};
+
+static const struct ipr_ses_table_entry ipr_ses_table[] = {
+	{ "2104-DL1        ", "XXXXXXXXXXXXXXXX", 80 },
+	{ "2104-TL1        ", "XXXXXXXXXXXXXXXX", 80 },
+	{ "HSBP07M P U2SCSI", "XXXXXXXXXXXXXXXX", 80 }, /* Hidive 7 slot */
+	{ "HSBP05M P U2SCSI", "XXXXXXXXXXXXXXXX", 80 }, /* Hidive 5 slot */
+	{ "HSBP05M S U2SCSI", "XXXXXXXXXXXXXXXX", 80 }, /* Bowtie */
+	{ "HSBP06E ASU2SCSI", "XXXXXXXXXXXXXXXX", 80 }, /* MartinFenning */
+	{ "2104-DU3        ", "XXXXXXXXXXXXXXXX", 160 },
+	{ "2104-TU3        ", "XXXXXXXXXXXXXXXX", 160 },
+	{ "HSBP04C RSU2SCSI", "XXXXXXX*XXXXXXXX", 160 },
+	{ "HSBP06E RSU2SCSI", "XXXXXXX*XXXXXXXX", 160 },
+	{ "St  V1S2        ", "XXXXXXXXXXXXXXXX", 160 },
+	{ "HSBPD4M  PU3SCSI", "XXXXXXX*XXXXXXXX", 160 },
+	{ "VSBPD1H   U3SCSI", "XXXXXXX*XXXXXXXX", 160 }
+};
+
+/*
+ *  Function Prototypes
+ */
+static int ipr_reset_alert(struct ipr_cmnd *);
+static void ipr_process_ccn(struct ipr_cmnd *);
+static void ipr_process_error(struct ipr_cmnd *);
+static void ipr_reset_ioa_job(struct ipr_cmnd *);
+static void ipr_initiate_ioa_reset(struct ipr_ioa_cfg *,
+				   enum ipr_shutdown_type);
+
+#ifdef CONFIG_SCSI_IPR_TRACE
+/**
+ * ipr_trc_hook - Add a trace entry to the driver trace
+ * @ipr_cmd:	ipr command struct
+ * @type:		trace type
+ * @add_data:	additional data
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_trc_hook(struct ipr_cmnd *ipr_cmd,
+			 u8 type, u32 add_data)
+{
+	struct ipr_trace_entry *trace_entry;
+	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
+
+	trace_entry = &ioa_cfg->trace[ioa_cfg->trace_index++];
+	trace_entry->time = jiffies;
+	trace_entry->op_code = ipr_cmd->ioarcb.cmd_pkt.cdb[0];
+	trace_entry->type = type;
+	trace_entry->cmd_index = ipr_cmd->cmd_index;
+	trace_entry->res_handle = ipr_cmd->ioarcb.res_handle;
+	trace_entry->add_data = add_data;
+}
+#else
+#define ipr_trc_hook(ipr_cmd, type, add_data) do { } while(0)
+#endif
+
+/**
+ * ipr_reinit_ipr_cmnd - Re-initialize an IPR Cmnd block for reuse
+ * @ipr_cmd:	ipr command struct
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_reinit_ipr_cmnd(struct ipr_cmnd *ipr_cmd)
+{
+	struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb;
+	struct ipr_ioasa *ioasa = &ipr_cmd->ioasa;
+
+	memset(&ioarcb->cmd_pkt, 0, sizeof(struct ipr_cmd_pkt));
+	ioarcb->write_data_transfer_length = 0;
+	ioarcb->read_data_transfer_length = 0;
+	ioarcb->write_ioadl_len = 0;
+	ioarcb->read_ioadl_len = 0;
+	ioasa->ioasc = 0;
+	ioasa->residual_data_len = 0;
+
+	ipr_cmd->scsi_cmd = NULL;
+	ipr_cmd->sense_buffer[0] = 0;
+	ipr_cmd->dma_use_sg = 0;
+}
+
+/**
+ * ipr_init_ipr_cmnd - Initialize an IPR Cmnd block
+ * @ipr_cmd:	ipr command struct
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_init_ipr_cmnd(struct ipr_cmnd *ipr_cmd)
+{
+	ipr_reinit_ipr_cmnd(ipr_cmd);
+	ipr_cmd->scratch = 0;
+	init_timer(&ipr_cmd->timer);
+}
+
+/**
+ * ipr_get_free_ipr_cmnd - Get a free IPR Cmnd block
+ * @ioa_cfg:	ioa config struct
+ *
+ * Return value:
+ * 	pointer to ipr command struct
+ **/
+static
+struct ipr_cmnd *ipr_get_free_ipr_cmnd(struct ipr_ioa_cfg *ioa_cfg)
+{
+	struct ipr_cmnd *ipr_cmd;
+
+	ipr_cmd = list_entry(ioa_cfg->free_q.next, struct ipr_cmnd, queue);
+	list_del(&ipr_cmd->queue);
+	ipr_init_ipr_cmnd(ipr_cmd);
+
+	return ipr_cmd;
+}
+
+/**
+ * ipr_unmap_sglist - Unmap scatterlist if mapped
+ * @ioa_cfg:	ioa config struct
+ * @ipr_cmd:	ipr command struct
+ *
+ * Return value:
+ * 	nothing
+ **/
+static void ipr_unmap_sglist(struct ipr_ioa_cfg *ioa_cfg,
+			     struct ipr_cmnd *ipr_cmd)
+{
+	struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd;
+
+	if (ipr_cmd->dma_use_sg) {
+		if (scsi_cmd->use_sg > 0) {
+			pci_unmap_sg(ioa_cfg->pdev, scsi_cmd->request_buffer,
+				     scsi_cmd->use_sg,
+				     scsi_cmd->sc_data_direction);
+		} else {
+			pci_unmap_single(ioa_cfg->pdev, ipr_cmd->dma_handle,
+					 scsi_cmd->request_bufflen,
+					 scsi_cmd->sc_data_direction);
+		}
+	}
+}
+
+/**
+ * ipr_mask_and_clear_interrupts - Mask all and clear specified interrupts
+ * @ioa_cfg:	ioa config struct
+ * @clr_ints:     interrupts to clear
+ *
+ * This function masks all interrupts on the adapter, then clears the
+ * interrupts specified in the mask
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_mask_and_clear_interrupts(struct ipr_ioa_cfg *ioa_cfg,
+					  u32 clr_ints)
+{
+	volatile u32 int_reg;
+
+	/* Stop new interrupts */
+	ioa_cfg->allow_interrupts = 0;
+
+	/* Set interrupt mask to stop all new interrupts */
+	writel(~0, ioa_cfg->regs.set_interrupt_mask_reg);
+
+	/* Clear any pending interrupts */
+	writel(clr_ints, ioa_cfg->regs.clr_interrupt_reg);
+	int_reg = readl(ioa_cfg->regs.sense_interrupt_reg);
+}
+
+/**
+ * ipr_save_pcix_cmd_reg - Save PCI-X command register
+ * @ioa_cfg:	ioa config struct
+ *
+ * Return value:
+ * 	0 on success / -EIO on failure
+ **/
+static int ipr_save_pcix_cmd_reg(struct ipr_ioa_cfg *ioa_cfg)
+{
+	int pcix_cmd_reg = pci_find_capability(ioa_cfg->pdev, PCI_CAP_ID_PCIX);
+
+	if (pcix_cmd_reg == 0) {
+		dev_err(&ioa_cfg->pdev->dev, "Failed to save PCI-X command register\n");
+		return -EIO;
+	}
+
+	if (pci_read_config_word(ioa_cfg->pdev, pcix_cmd_reg,
+				 &ioa_cfg->saved_pcix_cmd_reg) != PCIBIOS_SUCCESSFUL) {
+		dev_err(&ioa_cfg->pdev->dev, "Failed to save PCI-X command register\n");
+		return -EIO;
+	}
+
+	ioa_cfg->saved_pcix_cmd_reg |= PCI_X_CMD_DPERR_E | PCI_X_CMD_ERO;
+	return 0;
+}
+
+/**
+ * ipr_set_pcix_cmd_reg - Setup PCI-X command register
+ * @ioa_cfg:	ioa config struct
+ *
+ * Return value:
+ * 	0 on success / -EIO on failure
+ **/
+static int ipr_set_pcix_cmd_reg(struct ipr_ioa_cfg *ioa_cfg)
+{
+	int pcix_cmd_reg = pci_find_capability(ioa_cfg->pdev, PCI_CAP_ID_PCIX);
+
+	if (pcix_cmd_reg) {
+		if (pci_write_config_word(ioa_cfg->pdev, pcix_cmd_reg,
+					  ioa_cfg->saved_pcix_cmd_reg) != PCIBIOS_SUCCESSFUL) {
+			dev_err(&ioa_cfg->pdev->dev, "Failed to setup PCI-X command register\n");
+			return -EIO;
+		}
+	} else {
+		dev_err(&ioa_cfg->pdev->dev,
+			"Failed to setup PCI-X command register\n");
+		return -EIO;
+	}
+
+	return 0;
+}
+
+/**
+ * ipr_scsi_eh_done - mid-layer done function for aborted ops
+ * @ipr_cmd:	ipr command struct
+ *
+ * This function is invoked by the interrupt handler for
+ * ops generated by the SCSI mid-layer which are being aborted.
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_scsi_eh_done(struct ipr_cmnd *ipr_cmd)
+{
+	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
+	struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd;
+
+	scsi_cmd->result |= (DID_ERROR << 16);
+
+	ipr_unmap_sglist(ioa_cfg, ipr_cmd);
+	scsi_cmd->scsi_done(scsi_cmd);
+	list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
+}
+
+/**
+ * ipr_fail_all_ops - Fails all outstanding ops.
+ * @ioa_cfg:	ioa config struct
+ *
+ * This function fails all outstanding ops.
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_fail_all_ops(struct ipr_ioa_cfg *ioa_cfg)
+{
+	struct ipr_cmnd *ipr_cmd, *temp;
+
+	ENTER;
+	list_for_each_entry_safe(ipr_cmd, temp, &ioa_cfg->pending_q, queue) {
+		list_del(&ipr_cmd->queue);
+
+		ipr_cmd->ioasa.ioasc = cpu_to_be32(IPR_IOASC_IOA_WAS_RESET);
+		ipr_cmd->ioasa.ilid = cpu_to_be32(IPR_DRIVER_ILID);
+
+		if (ipr_cmd->scsi_cmd)
+			ipr_cmd->done = ipr_scsi_eh_done;
+
+		ipr_trc_hook(ipr_cmd, IPR_TRACE_FINISH, IPR_IOASC_IOA_WAS_RESET);
+		del_timer(&ipr_cmd->timer);
+		ipr_cmd->done(ipr_cmd);
+	}
+
+	LEAVE;
+}
+
+/**
+ * ipr_do_req -  Send driver initiated requests.
+ * @ipr_cmd:		ipr command struct
+ * @done:			done function
+ * @timeout_func:	timeout function
+ * @timeout:		timeout value
+ *
+ * This function sends the specified command to the adapter with the
+ * timeout given. The done function is invoked on command completion.
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_do_req(struct ipr_cmnd *ipr_cmd,
+		       void (*done) (struct ipr_cmnd *),
+		       void (*timeout_func) (struct ipr_cmnd *), u32 timeout)
+{
+	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
+
+	list_add_tail(&ipr_cmd->queue, &ioa_cfg->pending_q);
+
+	ipr_cmd->done = done;
+
+	ipr_cmd->timer.data = (unsigned long) ipr_cmd;
+	ipr_cmd->timer.expires = jiffies + timeout;
+	ipr_cmd->timer.function = (void (*)(unsigned long))timeout_func;
+
+	add_timer(&ipr_cmd->timer);
+
+	ipr_trc_hook(ipr_cmd, IPR_TRACE_START, 0);
+
+	mb();
+	writel(be32_to_cpu(ipr_cmd->ioarcb.ioarcb_host_pci_addr),
+	       ioa_cfg->regs.ioarrin_reg);
+}
+
+/**
+ * ipr_internal_cmd_done - Op done function for an internally generated op.
+ * @ipr_cmd:	ipr command struct
+ *
+ * This function is the op done function for an internally generated,
+ * blocking op. It simply wakes the sleeping thread.
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_internal_cmd_done(struct ipr_cmnd *ipr_cmd)
+{
+	if (ipr_cmd->sibling)
+		ipr_cmd->sibling = NULL;
+	else
+		complete(&ipr_cmd->completion);
+}
+
+/**
+ * ipr_send_blocking_cmd - Send command and sleep on its completion.
+ * @ipr_cmd:	ipr command struct
+ * @timeout_func:	function to invoke if command times out
+ * @timeout:	timeout
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_send_blocking_cmd(struct ipr_cmnd *ipr_cmd,
+				  void (*timeout_func) (struct ipr_cmnd *ipr_cmd),
+				  u32 timeout)
+{
+	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
+
+	init_completion(&ipr_cmd->completion);
+	ipr_do_req(ipr_cmd, ipr_internal_cmd_done, timeout_func, timeout);
+
+	spin_unlock_irq(ioa_cfg->host->host_lock);
+	wait_for_completion(&ipr_cmd->completion);
+	spin_lock_irq(ioa_cfg->host->host_lock);
+}
+
+/**
+ * ipr_send_hcam - Send an HCAM to the adapter.
+ * @ioa_cfg:	ioa config struct
+ * @type:		HCAM type
+ * @hostrcb:	hostrcb struct
+ *
+ * This function will send a Host Controlled Async command to the adapter.
+ * If HCAMs are currently not allowed to be issued to the adapter, it will
+ * place the hostrcb on the free queue.
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_send_hcam(struct ipr_ioa_cfg *ioa_cfg, u8 type,
+			  struct ipr_hostrcb *hostrcb)
+{
+	struct ipr_cmnd *ipr_cmd;
+	struct ipr_ioarcb *ioarcb;
+
+	if (ioa_cfg->allow_cmds) {
+		ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg);
+		list_add_tail(&ipr_cmd->queue, &ioa_cfg->pending_q);
+		list_add_tail(&hostrcb->queue, &ioa_cfg->hostrcb_pending_q);
+
+		ipr_cmd->hostrcb = hostrcb;
+		ioarcb = &ipr_cmd->ioarcb;
+
+		ioarcb->res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE);
+		ioarcb->cmd_pkt.request_type = IPR_RQTYPE_HCAM;
+		ioarcb->cmd_pkt.cdb[0] = IPR_HOST_CONTROLLED_ASYNC;
+		ioarcb->cmd_pkt.cdb[1] = type;
+		ioarcb->cmd_pkt.cdb[7] = (IPR_HOSTRCB_SZ >> 8) & 0xff;
+		ioarcb->cmd_pkt.cdb[8] = IPR_HOSTRCB_SZ & 0xff;
+
+		ioarcb->read_data_transfer_length = cpu_to_be32(IPR_HOSTRCB_SZ);
+		ioarcb->read_ioadl_len = cpu_to_be32(sizeof(struct ipr_ioadl_desc));
+		ipr_cmd->ioadl[0].flags_and_data_len =
+			cpu_to_be32(IPR_IOADL_FLAGS_READ_LAST | IPR_HOSTRCB_SZ);
+		ipr_cmd->ioadl[0].address = cpu_to_be32(hostrcb->hostrcb_dma);
+
+		if (type == IPR_HCAM_CDB_OP_CODE_CONFIG_CHANGE)
+			ipr_cmd->done = ipr_process_ccn;
+		else
+			ipr_cmd->done = ipr_process_error;
+
+		ipr_trc_hook(ipr_cmd, IPR_TRACE_START, IPR_IOA_RES_ADDR);
+
+		mb();
+		writel(be32_to_cpu(ipr_cmd->ioarcb.ioarcb_host_pci_addr),
+		       ioa_cfg->regs.ioarrin_reg);
+	} else {
+		list_add_tail(&hostrcb->queue, &ioa_cfg->hostrcb_free_q);
+	}
+}
+
+/**
+ * ipr_init_res_entry - Initialize a resource entry struct.
+ * @res:	resource entry struct
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_init_res_entry(struct ipr_resource_entry *res)
+{
+	res->needs_sync_complete = 1;
+	res->in_erp = 0;
+	res->add_to_ml = 0;
+	res->del_from_ml = 0;
+	res->resetting_device = 0;
+	res->tcq_active = 0;
+	res->qdepth = IPR_MAX_CMD_PER_LUN;
+	res->sdev = NULL;
+}
+
+/**
+ * ipr_handle_config_change - Handle a config change from the adapter
+ * @ioa_cfg:	ioa config struct
+ * @hostrcb:	hostrcb
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_handle_config_change(struct ipr_ioa_cfg *ioa_cfg,
+			      struct ipr_hostrcb *hostrcb)
+{
+	struct ipr_resource_entry *res = NULL;
+	struct ipr_config_table_entry *cfgte;
+	u32 is_ndn = 1;
+
+	cfgte = &hostrcb->ccn.cfgte;
+
+	list_for_each_entry(res, &ioa_cfg->used_res_q, queue) {
+		if (!memcmp(&res->cfgte.res_addr, &cfgte->res_addr,
+			    sizeof(cfgte->res_addr))) {
+			is_ndn = 0;
+			break;
+		}
+	}
+
+	if (is_ndn) {
+		if (list_empty(&ioa_cfg->free_res_q)) {
+			ipr_send_hcam(ioa_cfg,
+				      IPR_HCAM_CDB_OP_CODE_CONFIG_CHANGE,
+				      hostrcb);
+			return;
+		}
+
+		res = list_entry(ioa_cfg->free_res_q.next,
+				 struct ipr_resource_entry, queue);
+
+		list_del(&res->queue);
+		ipr_init_res_entry(res);
+		list_add_tail(&res->queue, &ioa_cfg->used_res_q);
+	}
+
+	memcpy(&res->cfgte, cfgte, sizeof(struct ipr_config_table_entry));
+
+	if (hostrcb->notify_type == IPR_HOST_RCB_NOTIF_TYPE_REM_ENTRY) {
+		if (res->sdev) {
+			res->sdev->hostdata = NULL;
+			res->del_from_ml = 1;
+			if (ioa_cfg->allow_ml_add_del)
+				schedule_work(&ioa_cfg->work_q);
+		} else
+			list_move_tail(&res->queue, &ioa_cfg->free_res_q);
+	} else if (!res->sdev) {
+		res->add_to_ml = 1;
+		if (ioa_cfg->allow_ml_add_del)
+			schedule_work(&ioa_cfg->work_q);
+	}
+
+	ipr_send_hcam(ioa_cfg, IPR_HCAM_CDB_OP_CODE_CONFIG_CHANGE, hostrcb);
+}
+
+/**
+ * ipr_process_ccn - Op done function for a CCN.
+ * @ipr_cmd:	ipr command struct
+ *
+ * This function is the op done function for a configuration
+ * change notification host controlled async from the adapter.
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_process_ccn(struct ipr_cmnd *ipr_cmd)
+{
+	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
+	struct ipr_hostrcb *hostrcb = ipr_cmd->hostrcb;
+	u32 ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc);
+
+	list_del(&hostrcb->queue);
+	list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
+
+	if (ioasc) {
+		if (ioasc != IPR_IOASC_IOA_WAS_RESET)
+			dev_err(&ioa_cfg->pdev->dev,
+				"Host RCB failed with IOASC: 0x%08X\n", ioasc);
+
+		ipr_send_hcam(ioa_cfg, IPR_HCAM_CDB_OP_CODE_CONFIG_CHANGE, hostrcb);
+	} else {
+		ipr_handle_config_change(ioa_cfg, hostrcb);
+	}
+}
+
+/**
+ * ipr_log_vpd - Log the passed VPD to the error log.
+ * @vpids:			vendor/product id struct
+ * @serial_num:		serial number string
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_log_vpd(struct ipr_std_inq_vpids *vpids, u8 *serial_num)
+{
+	char buffer[max_t(int, sizeof(struct ipr_std_inq_vpids),
+			  IPR_SERIAL_NUM_LEN) + 1];
+
+	memcpy(buffer, vpids, sizeof(struct ipr_std_inq_vpids));
+	buffer[sizeof(struct ipr_std_inq_vpids)] = '\0';
+	ipr_err("Vendor/Product ID: %s\n", buffer);
+
+	memcpy(buffer, serial_num, IPR_SERIAL_NUM_LEN);
+	buffer[IPR_SERIAL_NUM_LEN] = '\0';
+	ipr_err("    Serial Number: %s\n", buffer);
+}
+
+/**
+ * ipr_log_cache_error - Log a cache error.
+ * @ioa_cfg:	ioa config struct
+ * @hostrcb:	hostrcb struct
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_log_cache_error(struct ipr_ioa_cfg *ioa_cfg,
+				struct ipr_hostrcb *hostrcb)
+{
+	struct ipr_hostrcb_type_02_error *error = &hostrcb->error.type_02_error;
+
+	ipr_err("-----Current Configuration-----\n");
+	ipr_err("Cache Directory Card Information:\n");
+	ipr_log_vpd(&error->ioa_vpids, error->ioa_sn);
+	ipr_err("Adapter Card Information:\n");
+	ipr_log_vpd(&error->cfc_vpids, error->cfc_sn);
+
+	ipr_err("-----Expected Configuration-----\n");
+	ipr_err("Cache Directory Card Information:\n");
+	ipr_log_vpd(&error->ioa_last_attached_to_cfc_vpids,
+		    error->ioa_last_attached_to_cfc_sn);
+	ipr_err("Adapter Card Information:\n");
+	ipr_log_vpd(&error->cfc_last_attached_to_ioa_vpids,
+		    error->cfc_last_attached_to_ioa_sn);
+
+	ipr_err("Additional IOA Data: %08X %08X %08X\n",
+		     be32_to_cpu(error->ioa_data[0]),
+		     be32_to_cpu(error->ioa_data[1]),
+		     be32_to_cpu(error->ioa_data[2]));
+}
+
+/**
+ * ipr_log_config_error - Log a configuration error.
+ * @ioa_cfg:	ioa config struct
+ * @hostrcb:	hostrcb struct
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_log_config_error(struct ipr_ioa_cfg *ioa_cfg,
+				 struct ipr_hostrcb *hostrcb)
+{
+	int errors_logged, i;
+	struct ipr_hostrcb_device_data_entry *dev_entry;
+
+	errors_logged = be32_to_cpu(hostrcb->error.type_03_error.errors_logged);
+
+	ipr_err("Device Errors Detected/Logged: %d/%d\n",
+		be32_to_cpu(hostrcb->error.type_03_error.errors_detected),
+		errors_logged);
+
+	dev_entry = hostrcb->error.type_03_error.dev_entry;
+
+	for (i = 0; i < errors_logged; i++, dev_entry++) {
+		ipr_err_separator;
+
+		if (dev_entry->dev_res_addr.bus >= IPR_MAX_NUM_BUSES) {
+			ipr_err("Device %d: missing\n", i + 1);
+		} else {
+			ipr_err("Device %d: %d:%d:%d:%d\n", i + 1,
+				ioa_cfg->host->host_no, dev_entry->dev_res_addr.bus,
+				dev_entry->dev_res_addr.target, dev_entry->dev_res_addr.lun);
+		}
+		ipr_log_vpd(&dev_entry->dev_vpids, dev_entry->dev_sn);
+
+		ipr_err("-----New Device Information-----\n");
+		ipr_log_vpd(&dev_entry->new_dev_vpids, dev_entry->new_dev_sn);
+
+		ipr_err("Cache Directory Card Information:\n");
+		ipr_log_vpd(&dev_entry->ioa_last_with_dev_vpids,
+			    dev_entry->ioa_last_with_dev_sn);
+
+		ipr_err("Adapter Card Information:\n");
+		ipr_log_vpd(&dev_entry->cfc_last_with_dev_vpids,
+			    dev_entry->cfc_last_with_dev_sn);
+
+		ipr_err("Additional IOA Data: %08X %08X %08X %08X %08X\n",
+			be32_to_cpu(dev_entry->ioa_data[0]),
+			be32_to_cpu(dev_entry->ioa_data[1]),
+			be32_to_cpu(dev_entry->ioa_data[2]),
+			be32_to_cpu(dev_entry->ioa_data[3]),
+			be32_to_cpu(dev_entry->ioa_data[4]));
+	}
+}
+
+/**
+ * ipr_log_array_error - Log an array configuration error.
+ * @ioa_cfg:	ioa config struct
+ * @hostrcb:	hostrcb struct
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_log_array_error(struct ipr_ioa_cfg *ioa_cfg,
+				struct ipr_hostrcb *hostrcb)
+{
+	int i;
+	struct ipr_hostrcb_type_04_error *error;
+	struct ipr_hostrcb_array_data_entry *array_entry;
+	u8 zero_sn[IPR_SERIAL_NUM_LEN];
+
+	memset(zero_sn, '0', IPR_SERIAL_NUM_LEN);
+
+	error = &hostrcb->error.type_04_error;
+
+	ipr_err_separator;
+
+	ipr_err("RAID %s Array Configuration: %d:%d:%d:%d\n",
+		error->protection_level,
+		ioa_cfg->host->host_no,
+		error->last_func_vset_res_addr.bus,
+		error->last_func_vset_res_addr.target,
+		error->last_func_vset_res_addr.lun);
+
+	ipr_err_separator;
+
+	array_entry = error->array_member;
+
+	for (i = 0; i < 18; i++) {
+		if (!memcmp(array_entry->serial_num, zero_sn, IPR_SERIAL_NUM_LEN))
+			continue;
+
+		if (error->exposed_mode_adn == i) {
+			ipr_err("Exposed Array Member %d:\n", i);
+		} else {
+			ipr_err("Array Member %d:\n", i);
+		}
+
+		ipr_log_vpd(&array_entry->vpids, array_entry->serial_num);
+
+		if (array_entry->dev_res_addr.bus >= IPR_MAX_NUM_BUSES) {
+			ipr_err("Current Location: unknown\n");
+		} else {
+			ipr_err("Current Location: %d:%d:%d:%d\n",
+				ioa_cfg->host->host_no,
+				array_entry->dev_res_addr.bus,
+				array_entry->dev_res_addr.target,
+				array_entry->dev_res_addr.lun);
+		}
+
+		if (array_entry->dev_res_addr.bus >= IPR_MAX_NUM_BUSES) {
+			ipr_err("Expected Location: unknown\n");
+		} else {
+			ipr_err("Expected Location: %d:%d:%d:%d\n",
+				ioa_cfg->host->host_no,
+				array_entry->expected_dev_res_addr.bus,
+				array_entry->expected_dev_res_addr.target,
+				array_entry->expected_dev_res_addr.lun);
+		}
+
+		ipr_err_separator;
+
+		if (i == 9)
+			array_entry = error->array_member2;
+		else
+			array_entry++;
+	}
+}
+
+/**
+ * ipr_log_generic_error - Log an adapter error.
+ * @ioa_cfg:	ioa config struct
+ * @hostrcb:	hostrcb struct
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_log_generic_error(struct ipr_ioa_cfg *ioa_cfg,
+				  struct ipr_hostrcb *hostrcb)
+{
+	int i;
+	int ioa_data_len = be32_to_cpu(hostrcb->length);
+
+	if (ioa_data_len == 0)
+		return;
+
+	ipr_err("IOA Error Data:\n");
+	ipr_err("Offset    0 1 2 3  4 5 6 7  8 9 A B  C D E F\n");
+
+	for (i = 0; i < ioa_data_len / 4; i += 4) {
+		ipr_err("%08X: %08X %08X %08X %08X\n", i*4,
+			be32_to_cpu(hostrcb->raw.data[i]),
+			be32_to_cpu(hostrcb->raw.data[i+1]),
+			be32_to_cpu(hostrcb->raw.data[i+2]),
+			be32_to_cpu(hostrcb->raw.data[i+3]));
+	}
+}
+
+/**
+ * ipr_get_error - Find the specfied IOASC in the ipr_error_table.
+ * @ioasc:	IOASC
+ *
+ * This function will return the index of into the ipr_error_table
+ * for the specified IOASC. If the IOASC is not in the table,
+ * 0 will be returned, which points to the entry used for unknown errors.
+ *
+ * Return value:
+ * 	index into the ipr_error_table
+ **/
+static u32 ipr_get_error(u32 ioasc)
+{
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(ipr_error_table); i++)
+		if (ipr_error_table[i].ioasc == ioasc)
+			return i;
+
+	return 0;
+}
+
+/**
+ * ipr_handle_log_data - Log an adapter error.
+ * @ioa_cfg:	ioa config struct
+ * @hostrcb:	hostrcb struct
+ *
+ * This function logs an adapter error to the system.
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_handle_log_data(struct ipr_ioa_cfg *ioa_cfg,
+				struct ipr_hostrcb *hostrcb)
+{
+	u32 ioasc;
+	int error_index;
+
+	if (hostrcb->notify_type != IPR_HOST_RCB_NOTIF_TYPE_ERROR_LOG_ENTRY)
+		return;
+
+	if (hostrcb->notifications_lost == IPR_HOST_RCB_NOTIFICATIONS_LOST)
+		dev_err(&ioa_cfg->pdev->dev, "Error notifications lost\n");
+
+	ioasc = be32_to_cpu(hostrcb->error.failing_dev_ioasc);
+
+	if (ioasc == IPR_IOASC_BUS_WAS_RESET ||
+	    ioasc == IPR_IOASC_BUS_WAS_RESET_BY_OTHER) {
+		/* Tell the midlayer we had a bus reset so it will handle the UA properly */
+		scsi_report_bus_reset(ioa_cfg->host,
+				      hostrcb->error.failing_dev_res_addr.bus);
+	}
+
+	error_index = ipr_get_error(ioasc);
+
+	if (!ipr_error_table[error_index].log_hcam)
+		return;
+
+	if (ipr_is_device(&hostrcb->error.failing_dev_res_addr)) {
+		ipr_res_err(ioa_cfg, hostrcb->error.failing_dev_res_addr,
+			    "%s\n", ipr_error_table[error_index].error);
+	} else {
+		dev_err(&ioa_cfg->pdev->dev, "%s\n",
+			ipr_error_table[error_index].error);
+	}
+
+	/* Set indication we have logged an error */
+	ioa_cfg->errors_logged++;
+
+	if (ioa_cfg->log_level < IPR_DEFAULT_LOG_LEVEL)
+		return;
+
+	switch (hostrcb->overlay_id) {
+	case IPR_HOST_RCB_OVERLAY_ID_1:
+		ipr_log_generic_error(ioa_cfg, hostrcb);
+		break;
+	case IPR_HOST_RCB_OVERLAY_ID_2:
+		ipr_log_cache_error(ioa_cfg, hostrcb);
+		break;
+	case IPR_HOST_RCB_OVERLAY_ID_3:
+		ipr_log_config_error(ioa_cfg, hostrcb);
+		break;
+	case IPR_HOST_RCB_OVERLAY_ID_4:
+	case IPR_HOST_RCB_OVERLAY_ID_6:
+		ipr_log_array_error(ioa_cfg, hostrcb);
+		break;
+	case IPR_HOST_RCB_OVERLAY_ID_DEFAULT:
+		ipr_log_generic_error(ioa_cfg, hostrcb);
+		break;
+	default:
+		dev_err(&ioa_cfg->pdev->dev,
+			"Unknown error received. Overlay ID: %d\n",
+			hostrcb->overlay_id);
+		break;
+	}
+}
+
+/**
+ * ipr_process_error - Op done function for an adapter error log.
+ * @ipr_cmd:	ipr command struct
+ *
+ * This function is the op done function for an error log host
+ * controlled async from the adapter. It will log the error and
+ * send the HCAM back to the adapter.
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_process_error(struct ipr_cmnd *ipr_cmd)
+{
+	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
+	struct ipr_hostrcb *hostrcb = ipr_cmd->hostrcb;
+	u32 ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc);
+
+	list_del(&hostrcb->queue);
+	list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
+
+	if (!ioasc) {
+		ipr_handle_log_data(ioa_cfg, hostrcb);
+	} else if (ioasc != IPR_IOASC_IOA_WAS_RESET) {
+		dev_err(&ioa_cfg->pdev->dev,
+			"Host RCB failed with IOASC: 0x%08X\n", ioasc);
+	}
+
+	ipr_send_hcam(ioa_cfg, IPR_HCAM_CDB_OP_CODE_LOG_DATA, hostrcb);
+}
+
+/**
+ * ipr_timeout -  An internally generated op has timed out.
+ * @ipr_cmd:	ipr command struct
+ *
+ * This function blocks host requests and initiates an
+ * adapter reset.
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_timeout(struct ipr_cmnd *ipr_cmd)
+{
+	unsigned long lock_flags = 0;
+	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
+
+	ENTER;
+	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
+
+	ioa_cfg->errors_logged++;
+	dev_err(&ioa_cfg->pdev->dev,
+		"Adapter being reset due to command timeout.\n");
+
+	if (WAIT_FOR_DUMP == ioa_cfg->sdt_state)
+		ioa_cfg->sdt_state = GET_DUMP;
+
+	if (!ioa_cfg->in_reset_reload || ioa_cfg->reset_cmd == ipr_cmd)
+		ipr_initiate_ioa_reset(ioa_cfg, IPR_SHUTDOWN_NONE);
+
+	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+	LEAVE;
+}
+
+/**
+ * ipr_reset_reload - Reset/Reload the IOA
+ * @ioa_cfg:		ioa config struct
+ * @shutdown_type:	shutdown type
+ *
+ * This function resets the adapter and re-initializes it.
+ * This function assumes that all new host commands have been stopped.
+ * Return value:
+ * 	SUCCESS / FAILED
+ **/
+static int ipr_reset_reload(struct ipr_ioa_cfg *ioa_cfg,
+			    enum ipr_shutdown_type shutdown_type)
+{
+	if (!ioa_cfg->in_reset_reload)
+		ipr_initiate_ioa_reset(ioa_cfg, shutdown_type);
+
+	spin_unlock_irq(ioa_cfg->host->host_lock);
+	wait_event(ioa_cfg->reset_wait_q, !ioa_cfg->in_reset_reload);
+	spin_lock_irq(ioa_cfg->host->host_lock);
+
+	/* If we got hit with a host reset while we were already resetting
+	 the adapter for some reason, and the reset failed. */
+	if (ioa_cfg->ioa_is_dead) {
+		ipr_trace;
+		return FAILED;
+	}
+
+	return SUCCESS;
+}
+
+/**
+ * ipr_find_ses_entry - Find matching SES in SES table
+ * @res:	resource entry struct of SES
+ *
+ * Return value:
+ * 	pointer to SES table entry / NULL on failure
+ **/
+static const struct ipr_ses_table_entry *
+ipr_find_ses_entry(struct ipr_resource_entry *res)
+{
+	int i, j, matches;
+	const struct ipr_ses_table_entry *ste = ipr_ses_table;
+
+	for (i = 0; i < ARRAY_SIZE(ipr_ses_table); i++, ste++) {
+		for (j = 0, matches = 0; j < IPR_PROD_ID_LEN; j++) {
+			if (ste->compare_product_id_byte[j] == 'X') {
+				if (res->cfgte.std_inq_data.vpids.product_id[j] == ste->product_id[j])
+					matches++;
+				else
+					break;
+			} else
+				matches++;
+		}
+
+		if (matches == IPR_PROD_ID_LEN)
+			return ste;
+	}
+
+	return NULL;
+}
+
+/**
+ * ipr_get_max_scsi_speed - Determine max SCSI speed for a given bus
+ * @ioa_cfg:	ioa config struct
+ * @bus:		SCSI bus
+ * @bus_width:	bus width
+ *
+ * Return value:
+ *	SCSI bus speed in units of 100KHz, 1600 is 160 MHz
+ *	For a 2-byte wide SCSI bus, the maximum transfer speed is
+ *	twice the maximum transfer rate (e.g. for a wide enabled bus,
+ *	max 160MHz = max 320MB/sec).
+ **/
+static u32 ipr_get_max_scsi_speed(struct ipr_ioa_cfg *ioa_cfg, u8 bus, u8 bus_width)
+{
+	struct ipr_resource_entry *res;
+	const struct ipr_ses_table_entry *ste;
+	u32 max_xfer_rate = IPR_MAX_SCSI_RATE(bus_width);
+
+	/* Loop through each config table entry in the config table buffer */
+	list_for_each_entry(res, &ioa_cfg->used_res_q, queue) {
+		if (!(IPR_IS_SES_DEVICE(res->cfgte.std_inq_data)))
+			continue;
+
+		if (bus != res->cfgte.res_addr.bus)
+			continue;
+
+		if (!(ste = ipr_find_ses_entry(res)))
+			continue;
+
+		max_xfer_rate = (ste->max_bus_speed_limit * 10) / (bus_width / 8);
+	}
+
+	return max_xfer_rate;
+}
+
+/**
+ * ipr_wait_iodbg_ack - Wait for an IODEBUG ACK from the IOA
+ * @ioa_cfg:		ioa config struct
+ * @max_delay:		max delay in micro-seconds to wait
+ *
+ * Waits for an IODEBUG ACK from the IOA, doing busy looping.
+ *
+ * Return value:
+ * 	0 on success / other on failure
+ **/
+static int ipr_wait_iodbg_ack(struct ipr_ioa_cfg *ioa_cfg, int max_delay)
+{
+	volatile u32 pcii_reg;
+	int delay = 1;
+
+	/* Read interrupt reg until IOA signals IO Debug Acknowledge */
+	while (delay < max_delay) {
+		pcii_reg = readl(ioa_cfg->regs.sense_interrupt_reg);
+
+		if (pcii_reg & IPR_PCII_IO_DEBUG_ACKNOWLEDGE)
+			return 0;
+
+		/* udelay cannot be used if delay is more than a few milliseconds */
+		if ((delay / 1000) > MAX_UDELAY_MS)
+			mdelay(delay / 1000);
+		else
+			udelay(delay);
+
+		delay += delay;
+	}
+	return -EIO;
+}
+
+/**
+ * ipr_get_ldump_data_section - Dump IOA memory
+ * @ioa_cfg:			ioa config struct
+ * @start_addr:			adapter address to dump
+ * @dest:				destination kernel buffer
+ * @length_in_words:	length to dump in 4 byte words
+ *
+ * Return value:
+ * 	0 on success / -EIO on failure
+ **/
+static int ipr_get_ldump_data_section(struct ipr_ioa_cfg *ioa_cfg,
+				      u32 start_addr,
+				      u32 *dest, u32 length_in_words)
+{
+	volatile u32 temp_pcii_reg;
+	int i, delay = 0;
+
+	/* Write IOA interrupt reg starting LDUMP state  */
+	writel((IPR_UPROCI_RESET_ALERT | IPR_UPROCI_IO_DEBUG_ALERT),
+	       ioa_cfg->regs.set_uproc_interrupt_reg);
+
+	/* Wait for IO debug acknowledge */
+	if (ipr_wait_iodbg_ack(ioa_cfg,
+			       IPR_LDUMP_MAX_LONG_ACK_DELAY_IN_USEC)) {
+		dev_err(&ioa_cfg->pdev->dev,
+			"IOA dump long data transfer timeout\n");
+		return -EIO;
+	}
+
+	/* Signal LDUMP interlocked - clear IO debug ack */
+	writel(IPR_PCII_IO_DEBUG_ACKNOWLEDGE,
+	       ioa_cfg->regs.clr_interrupt_reg);
+
+	/* Write Mailbox with starting address */
+	writel(start_addr, ioa_cfg->ioa_mailbox);
+
+	/* Signal address valid - clear IOA Reset alert */
+	writel(IPR_UPROCI_RESET_ALERT,
+	       ioa_cfg->regs.clr_uproc_interrupt_reg);
+
+	for (i = 0; i < length_in_words; i++) {
+		/* Wait for IO debug acknowledge */
+		if (ipr_wait_iodbg_ack(ioa_cfg,
+				       IPR_LDUMP_MAX_SHORT_ACK_DELAY_IN_USEC)) {
+			dev_err(&ioa_cfg->pdev->dev,
+				"IOA dump short data transfer timeout\n");
+			return -EIO;
+		}
+
+		/* Read data from mailbox and increment destination pointer */
+		*dest = cpu_to_be32(readl(ioa_cfg->ioa_mailbox));
+		dest++;
+
+		/* For all but the last word of data, signal data received */
+		if (i < (length_in_words - 1)) {
+			/* Signal dump data received - Clear IO debug Ack */
+			writel(IPR_PCII_IO_DEBUG_ACKNOWLEDGE,
+			       ioa_cfg->regs.clr_interrupt_reg);
+		}
+	}
+
+	/* Signal end of block transfer. Set reset alert then clear IO debug ack */
+	writel(IPR_UPROCI_RESET_ALERT,
+	       ioa_cfg->regs.set_uproc_interrupt_reg);
+
+	writel(IPR_UPROCI_IO_DEBUG_ALERT,
+	       ioa_cfg->regs.clr_uproc_interrupt_reg);
+
+	/* Signal dump data received - Clear IO debug Ack */
+	writel(IPR_PCII_IO_DEBUG_ACKNOWLEDGE,
+	       ioa_cfg->regs.clr_interrupt_reg);
+
+	/* Wait for IOA to signal LDUMP exit - IOA reset alert will be cleared */
+	while (delay < IPR_LDUMP_MAX_SHORT_ACK_DELAY_IN_USEC) {
+		temp_pcii_reg =
+		    readl(ioa_cfg->regs.sense_uproc_interrupt_reg);
+
+		if (!(temp_pcii_reg & IPR_UPROCI_RESET_ALERT))
+			return 0;
+
+		udelay(10);
+		delay += 10;
+	}
+
+	return 0;
+}
+
+#ifdef CONFIG_SCSI_IPR_DUMP
+/**
+ * ipr_sdt_copy - Copy Smart Dump Table to kernel buffer
+ * @ioa_cfg:		ioa config struct
+ * @pci_address:	adapter address
+ * @length:			length of data to copy
+ *
+ * Copy data from PCI adapter to kernel buffer.
+ * Note: length MUST be a 4 byte multiple
+ * Return value:
+ * 	0 on success / other on failure
+ **/
+static int ipr_sdt_copy(struct ipr_ioa_cfg *ioa_cfg,
+			unsigned long pci_address, u32 length)
+{
+	int bytes_copied = 0;
+	int cur_len, rc, rem_len, rem_page_len;
+	u32 *page;
+	unsigned long lock_flags = 0;
+	struct ipr_ioa_dump *ioa_dump = &ioa_cfg->dump->ioa_dump;
+
+	while (bytes_copied < length &&
+	       (ioa_dump->hdr.len + bytes_copied) < IPR_MAX_IOA_DUMP_SIZE) {
+		if (ioa_dump->page_offset >= PAGE_SIZE ||
+		    ioa_dump->page_offset == 0) {
+			page = (u32 *)__get_free_page(GFP_ATOMIC);
+
+			if (!page) {
+				ipr_trace;
+				return bytes_copied;
+			}
+
+			ioa_dump->page_offset = 0;
+			ioa_dump->ioa_data[ioa_dump->next_page_index] = page;
+			ioa_dump->next_page_index++;
+		} else
+			page = ioa_dump->ioa_data[ioa_dump->next_page_index - 1];
+
+		rem_len = length - bytes_copied;
+		rem_page_len = PAGE_SIZE - ioa_dump->page_offset;
+		cur_len = min(rem_len, rem_page_len);
+
+		spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
+		if (ioa_cfg->sdt_state == ABORT_DUMP) {
+			rc = -EIO;
+		} else {
+			rc = ipr_get_ldump_data_section(ioa_cfg,
+							pci_address + bytes_copied,
+							&page[ioa_dump->page_offset / 4],
+							(cur_len / sizeof(u32)));
+		}
+		spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+
+		if (!rc) {
+			ioa_dump->page_offset += cur_len;
+			bytes_copied += cur_len;
+		} else {
+			ipr_trace;
+			break;
+		}
+		schedule();
+	}
+
+	return bytes_copied;
+}
+
+/**
+ * ipr_init_dump_entry_hdr - Initialize a dump entry header.
+ * @hdr:	dump entry header struct
+ *
+ * Return value:
+ * 	nothing
+ **/
+static void ipr_init_dump_entry_hdr(struct ipr_dump_entry_header *hdr)
+{
+	hdr->eye_catcher = IPR_DUMP_EYE_CATCHER;
+	hdr->num_elems = 1;
+	hdr->offset = sizeof(*hdr);
+	hdr->status = IPR_DUMP_STATUS_SUCCESS;
+}
+
+/**
+ * ipr_dump_ioa_type_data - Fill in the adapter type in the dump.
+ * @ioa_cfg:	ioa config struct
+ * @driver_dump:	driver dump struct
+ *
+ * Return value:
+ * 	nothing
+ **/
+static void ipr_dump_ioa_type_data(struct ipr_ioa_cfg *ioa_cfg,
+				   struct ipr_driver_dump *driver_dump)
+{
+	struct ipr_inquiry_page3 *ucode_vpd = &ioa_cfg->vpd_cbs->page3_data;
+
+	ipr_init_dump_entry_hdr(&driver_dump->ioa_type_entry.hdr);
+	driver_dump->ioa_type_entry.hdr.len =
+		sizeof(struct ipr_dump_ioa_type_entry) -
+		sizeof(struct ipr_dump_entry_header);
+	driver_dump->ioa_type_entry.hdr.data_type = IPR_DUMP_DATA_TYPE_BINARY;
+	driver_dump->ioa_type_entry.hdr.id = IPR_DUMP_DRIVER_TYPE_ID;
+	driver_dump->ioa_type_entry.type = ioa_cfg->type;
+	driver_dump->ioa_type_entry.fw_version = (ucode_vpd->major_release << 24) |
+		(ucode_vpd->card_type << 16) | (ucode_vpd->minor_release[0] << 8) |
+		ucode_vpd->minor_release[1];
+	driver_dump->hdr.num_entries++;
+}
+
+/**
+ * ipr_dump_version_data - Fill in the driver version in the dump.
+ * @ioa_cfg:	ioa config struct
+ * @driver_dump:	driver dump struct
+ *
+ * Return value:
+ * 	nothing
+ **/
+static void ipr_dump_version_data(struct ipr_ioa_cfg *ioa_cfg,
+				  struct ipr_driver_dump *driver_dump)
+{
+	ipr_init_dump_entry_hdr(&driver_dump->version_entry.hdr);
+	driver_dump->version_entry.hdr.len =
+		sizeof(struct ipr_dump_version_entry) -
+		sizeof(struct ipr_dump_entry_header);
+	driver_dump->version_entry.hdr.data_type = IPR_DUMP_DATA_TYPE_ASCII;
+	driver_dump->version_entry.hdr.id = IPR_DUMP_DRIVER_VERSION_ID;
+	strcpy(driver_dump->version_entry.version, IPR_DRIVER_VERSION);
+	driver_dump->hdr.num_entries++;
+}
+
+/**
+ * ipr_dump_trace_data - Fill in the IOA trace in the dump.
+ * @ioa_cfg:	ioa config struct
+ * @driver_dump:	driver dump struct
+ *
+ * Return value:
+ * 	nothing
+ **/
+static void ipr_dump_trace_data(struct ipr_ioa_cfg *ioa_cfg,
+				   struct ipr_driver_dump *driver_dump)
+{
+	ipr_init_dump_entry_hdr(&driver_dump->trace_entry.hdr);
+	driver_dump->trace_entry.hdr.len =
+		sizeof(struct ipr_dump_trace_entry) -
+		sizeof(struct ipr_dump_entry_header);
+	driver_dump->trace_entry.hdr.data_type = IPR_DUMP_DATA_TYPE_BINARY;
+	driver_dump->trace_entry.hdr.id = IPR_DUMP_TRACE_ID;
+	memcpy(driver_dump->trace_entry.trace, ioa_cfg->trace, IPR_TRACE_SIZE);
+	driver_dump->hdr.num_entries++;
+}
+
+/**
+ * ipr_dump_location_data - Fill in the IOA location in the dump.
+ * @ioa_cfg:	ioa config struct
+ * @driver_dump:	driver dump struct
+ *
+ * Return value:
+ * 	nothing
+ **/
+static void ipr_dump_location_data(struct ipr_ioa_cfg *ioa_cfg,
+				   struct ipr_driver_dump *driver_dump)
+{
+	ipr_init_dump_entry_hdr(&driver_dump->location_entry.hdr);
+	driver_dump->location_entry.hdr.len =
+		sizeof(struct ipr_dump_location_entry) -
+		sizeof(struct ipr_dump_entry_header);
+	driver_dump->location_entry.hdr.data_type = IPR_DUMP_DATA_TYPE_ASCII;
+	driver_dump->location_entry.hdr.id = IPR_DUMP_LOCATION_ID;
+	strcpy(driver_dump->location_entry.location, ioa_cfg->pdev->dev.bus_id);
+	driver_dump->hdr.num_entries++;
+}
+
+/**
+ * ipr_get_ioa_dump - Perform a dump of the driver and adapter.
+ * @ioa_cfg:	ioa config struct
+ * @dump:		dump struct
+ *
+ * Return value:
+ * 	nothing
+ **/
+static void ipr_get_ioa_dump(struct ipr_ioa_cfg *ioa_cfg, struct ipr_dump *dump)
+{
+	unsigned long start_addr, sdt_word;
+	unsigned long lock_flags = 0;
+	struct ipr_driver_dump *driver_dump = &dump->driver_dump;
+	struct ipr_ioa_dump *ioa_dump = &dump->ioa_dump;
+	u32 num_entries, start_off, end_off;
+	u32 bytes_to_copy, bytes_copied, rc;
+	struct ipr_sdt *sdt;
+	int i;
+
+	ENTER;
+
+	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
+
+	if (ioa_cfg->sdt_state != GET_DUMP) {
+		spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+		return;
+	}
+
+	start_addr = readl(ioa_cfg->ioa_mailbox);
+
+	if (!ipr_sdt_is_fmt2(start_addr)) {
+		dev_err(&ioa_cfg->pdev->dev,
+			"Invalid dump table format: %lx\n", start_addr);
+		spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+		return;
+	}
+
+	dev_err(&ioa_cfg->pdev->dev, "Dump of IOA initiated\n");
+
+	driver_dump->hdr.eye_catcher = IPR_DUMP_EYE_CATCHER;
+
+	/* Initialize the overall dump header */
+	driver_dump->hdr.len = sizeof(struct ipr_driver_dump);
+	driver_dump->hdr.num_entries = 1;
+	driver_dump->hdr.first_entry_offset = sizeof(struct ipr_dump_header);
+	driver_dump->hdr.status = IPR_DUMP_STATUS_SUCCESS;
+	driver_dump->hdr.os = IPR_DUMP_OS_LINUX;
+	driver_dump->hdr.driver_name = IPR_DUMP_DRIVER_NAME;
+
+	ipr_dump_version_data(ioa_cfg, driver_dump);
+	ipr_dump_location_data(ioa_cfg, driver_dump);
+	ipr_dump_ioa_type_data(ioa_cfg, driver_dump);
+	ipr_dump_trace_data(ioa_cfg, driver_dump);
+
+	/* Update dump_header */
+	driver_dump->hdr.len += sizeof(struct ipr_dump_entry_header);
+
+	/* IOA Dump entry */
+	ipr_init_dump_entry_hdr(&ioa_dump->hdr);
+	ioa_dump->format = IPR_SDT_FMT2;
+	ioa_dump->hdr.len = 0;
+	ioa_dump->hdr.data_type = IPR_DUMP_DATA_TYPE_BINARY;
+	ioa_dump->hdr.id = IPR_DUMP_IOA_DUMP_ID;
+
+	/* First entries in sdt are actually a list of dump addresses and
+	 lengths to gather the real dump data.  sdt represents the pointer
+	 to the ioa generated dump table.  Dump data will be extracted based
+	 on entries in this table */
+	sdt = &ioa_dump->sdt;
+
+	rc = ipr_get_ldump_data_section(ioa_cfg, start_addr, (u32 *)sdt,
+					sizeof(struct ipr_sdt) / sizeof(u32));
+
+	/* Smart Dump table is ready to use and the first entry is valid */
+	if (rc || (be32_to_cpu(sdt->hdr.state) != IPR_FMT2_SDT_READY_TO_USE)) {
+		dev_err(&ioa_cfg->pdev->dev,
+			"Dump of IOA failed. Dump table not valid: %d, %X.\n",
+			rc, be32_to_cpu(sdt->hdr.state));
+		driver_dump->hdr.status = IPR_DUMP_STATUS_FAILED;
+		ioa_cfg->sdt_state = DUMP_OBTAINED;
+		spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+		return;
+	}
+
+	num_entries = be32_to_cpu(sdt->hdr.num_entries_used);
+
+	if (num_entries > IPR_NUM_SDT_ENTRIES)
+		num_entries = IPR_NUM_SDT_ENTRIES;
+
+	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+
+	for (i = 0; i < num_entries; i++) {
+		if (ioa_dump->hdr.len > IPR_MAX_IOA_DUMP_SIZE) {
+			driver_dump->hdr.status = IPR_DUMP_STATUS_QUAL_SUCCESS;
+			break;
+		}
+
+		if (sdt->entry[i].flags & IPR_SDT_VALID_ENTRY) {
+			sdt_word = be32_to_cpu(sdt->entry[i].bar_str_offset);
+			start_off = sdt_word & IPR_FMT2_MBX_ADDR_MASK;
+			end_off = be32_to_cpu(sdt->entry[i].end_offset);
+
+			if (ipr_sdt_is_fmt2(sdt_word) && sdt_word) {
+				bytes_to_copy = end_off - start_off;
+				if (bytes_to_copy > IPR_MAX_IOA_DUMP_SIZE) {
+					sdt->entry[i].flags &= ~IPR_SDT_VALID_ENTRY;
+					continue;
+				}
+
+				/* Copy data from adapter to driver buffers */
+				bytes_copied = ipr_sdt_copy(ioa_cfg, sdt_word,
+							    bytes_to_copy);
+
+				ioa_dump->hdr.len += bytes_copied;
+
+				if (bytes_copied != bytes_to_copy) {
+					driver_dump->hdr.status = IPR_DUMP_STATUS_QUAL_SUCCESS;
+					break;
+				}
+			}
+		}
+	}
+
+	dev_err(&ioa_cfg->pdev->dev, "Dump of IOA completed.\n");
+
+	/* Update dump_header */
+	driver_dump->hdr.len += ioa_dump->hdr.len;
+	wmb();
+	ioa_cfg->sdt_state = DUMP_OBTAINED;
+	LEAVE;
+}
+
+#else
+#define ipr_get_ioa_dump(ioa_cfg, dump) do { } while(0)
+#endif
+
+/**
+ * ipr_worker_thread - Worker thread
+ * @data:		ioa config struct
+ *
+ * Called at task level from a work thread. This function takes care
+ * of adding and removing device from the mid-layer as configuration
+ * changes are detected by the adapter.
+ *
+ * Return value:
+ * 	nothing
+ **/
+static void ipr_worker_thread(void *data)
+{
+	unsigned long lock_flags;
+	struct ipr_resource_entry *res;
+	struct scsi_device *sdev;
+	struct ipr_dump *dump;
+	struct ipr_ioa_cfg *ioa_cfg = data;
+	u8 bus, target, lun;
+	int did_work;
+
+	ENTER;
+	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
+
+	if (ioa_cfg->sdt_state == GET_DUMP) {
+		dump = ioa_cfg->dump;
+		if (!dump || !kobject_get(&dump->kobj)) {
+			spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+			return;
+		}
+		spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+		ipr_get_ioa_dump(ioa_cfg, dump);
+		kobject_put(&dump->kobj);
+
+		spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
+		if (ioa_cfg->sdt_state == DUMP_OBTAINED)
+			ipr_initiate_ioa_reset(ioa_cfg, IPR_SHUTDOWN_NONE);
+		spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+		return;
+	}
+
+restart:
+	do {
+		did_work = 0;
+		if (!ioa_cfg->allow_cmds || !ioa_cfg->allow_ml_add_del) {
+			spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+			return;
+		}
+
+		list_for_each_entry(res, &ioa_cfg->used_res_q, queue) {
+			if (res->del_from_ml && res->sdev) {
+				did_work = 1;
+				sdev = res->sdev;
+				if (!scsi_device_get(sdev)) {
+					res->sdev = NULL;
+					list_move_tail(&res->queue, &ioa_cfg->free_res_q);
+					spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+					scsi_remove_device(sdev);
+					scsi_device_put(sdev);
+					spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
+				}
+				break;
+			}
+		}
+	} while(did_work);
+
+	list_for_each_entry(res, &ioa_cfg->used_res_q, queue) {
+		if (res->add_to_ml) {
+			bus = res->cfgte.res_addr.bus;
+			target = res->cfgte.res_addr.target;
+			lun = res->cfgte.res_addr.lun;
+			spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+			scsi_add_device(ioa_cfg->host, bus, target, lun);
+			spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
+			goto restart;
+		}
+	}
+
+	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+	LEAVE;
+}
+
+#ifdef CONFIG_SCSI_IPR_TRACE
+/**
+ * ipr_read_trace - Dump the adapter trace
+ * @kobj:		kobject struct
+ * @buf:		buffer
+ * @off:		offset
+ * @count:		buffer size
+ *
+ * Return value:
+ *	number of bytes printed to buffer
+ **/
+static ssize_t ipr_read_trace(struct kobject *kobj, char *buf,
+			      loff_t off, size_t count)
+{
+	struct class_device *cdev = container_of(kobj,struct class_device,kobj);
+	struct Scsi_Host *shost = class_to_shost(cdev);
+	struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata;
+	unsigned long lock_flags = 0;
+	int size = IPR_TRACE_SIZE;
+	char *src = (char *)ioa_cfg->trace;
+
+	if (off > size)
+		return 0;
+	if (off + count > size) {
+		size -= off;
+		count = size;
+	}
+
+	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
+	memcpy(buf, &src[off], count);
+	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+	return count;
+}
+
+static struct bin_attribute ipr_trace_attr = {
+	.attr =	{
+		.name = "trace",
+		.mode = S_IRUGO,
+	},
+	.size = 0,
+	.read = ipr_read_trace,
+};
+#endif
+
+/**
+ * ipr_show_fw_version - Show the firmware version
+ * @class_dev:	class device struct
+ * @buf:		buffer
+ *
+ * Return value:
+ *	number of bytes printed to buffer
+ **/
+static ssize_t ipr_show_fw_version(struct class_device *class_dev, char *buf)
+{
+	struct Scsi_Host *shost = class_to_shost(class_dev);
+	struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata;
+	struct ipr_inquiry_page3 *ucode_vpd = &ioa_cfg->vpd_cbs->page3_data;
+	unsigned long lock_flags = 0;
+	int len;
+
+	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
+	len = snprintf(buf, PAGE_SIZE, "%02X%02X%02X%02X\n",
+		       ucode_vpd->major_release, ucode_vpd->card_type,
+		       ucode_vpd->minor_release[0],
+		       ucode_vpd->minor_release[1]);
+	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+	return len;
+}
+
+static struct class_device_attribute ipr_fw_version_attr = {
+	.attr = {
+		.name =		"fw_version",
+		.mode =		S_IRUGO,
+	},
+	.show = ipr_show_fw_version,
+};
+
+/**
+ * ipr_show_log_level - Show the adapter's error logging level
+ * @class_dev:	class device struct
+ * @buf:		buffer
+ *
+ * Return value:
+ * 	number of bytes printed to buffer
+ **/
+static ssize_t ipr_show_log_level(struct class_device *class_dev, char *buf)
+{
+	struct Scsi_Host *shost = class_to_shost(class_dev);
+	struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata;
+	unsigned long lock_flags = 0;
+	int len;
+
+	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
+	len = snprintf(buf, PAGE_SIZE, "%d\n", ioa_cfg->log_level);
+	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+	return len;
+}
+
+/**
+ * ipr_store_log_level - Change the adapter's error logging level
+ * @class_dev:	class device struct
+ * @buf:		buffer
+ *
+ * Return value:
+ * 	number of bytes printed to buffer
+ **/
+static ssize_t ipr_store_log_level(struct class_device *class_dev,
+				   const char *buf, size_t count)
+{
+	struct Scsi_Host *shost = class_to_shost(class_dev);
+	struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata;
+	unsigned long lock_flags = 0;
+
+	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
+	ioa_cfg->log_level = simple_strtoul(buf, NULL, 10);
+	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+	return strlen(buf);
+}
+
+static struct class_device_attribute ipr_log_level_attr = {
+	.attr = {
+		.name =		"log_level",
+		.mode =		S_IRUGO | S_IWUSR,
+	},
+	.show = ipr_show_log_level,
+	.store = ipr_store_log_level
+};
+
+/**
+ * ipr_store_diagnostics - IOA Diagnostics interface
+ * @class_dev:	class_device struct
+ * @buf:		buffer
+ * @count:		buffer size
+ *
+ * This function will reset the adapter and wait a reasonable
+ * amount of time for any errors that the adapter might log.
+ *
+ * Return value:
+ * 	count on success / other on failure
+ **/
+static ssize_t ipr_store_diagnostics(struct class_device *class_dev,
+				     const char *buf, size_t count)
+{
+	struct Scsi_Host *shost = class_to_shost(class_dev);
+	struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata;
+	unsigned long lock_flags = 0;
+	int rc = count;
+
+	if (!capable(CAP_SYS_ADMIN))
+		return -EACCES;
+
+	wait_event(ioa_cfg->reset_wait_q, !ioa_cfg->in_reset_reload);
+	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
+	ioa_cfg->errors_logged = 0;
+	ipr_initiate_ioa_reset(ioa_cfg, IPR_SHUTDOWN_NORMAL);
+
+	if (ioa_cfg->in_reset_reload) {
+		spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+		wait_event(ioa_cfg->reset_wait_q, !ioa_cfg->in_reset_reload);
+
+		/* Wait for a second for any errors to be logged */
+		schedule_timeout(HZ);
+	} else {
+		spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+		return -EIO;
+	}
+
+	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
+	if (ioa_cfg->in_reset_reload || ioa_cfg->errors_logged)
+		rc = -EIO;
+	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+
+	return rc;
+}
+
+static struct class_device_attribute ipr_diagnostics_attr = {
+	.attr = {
+		.name =		"run_diagnostics",
+		.mode =		S_IWUSR,
+	},
+	.store = ipr_store_diagnostics
+};
+
+/**
+ * ipr_store_reset_adapter - Reset the adapter
+ * @class_dev:	class_device struct
+ * @buf:		buffer
+ * @count:		buffer size
+ *
+ * This function will reset the adapter.
+ *
+ * Return value:
+ * 	count on success / other on failure
+ **/
+static ssize_t ipr_store_reset_adapter(struct class_device *class_dev,
+				       const char *buf, size_t count)
+{
+	struct Scsi_Host *shost = class_to_shost(class_dev);
+	struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata;
+	unsigned long lock_flags;
+	int result = count;
+
+	if (!capable(CAP_SYS_ADMIN))
+		return -EACCES;
+
+	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
+	if (!ioa_cfg->in_reset_reload)
+		ipr_initiate_ioa_reset(ioa_cfg, IPR_SHUTDOWN_NORMAL);
+	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+	wait_event(ioa_cfg->reset_wait_q, !ioa_cfg->in_reset_reload);
+
+	return result;
+}
+
+static struct class_device_attribute ipr_ioa_reset_attr = {
+	.attr = {
+		.name =		"reset_host",
+		.mode =		S_IWUSR,
+	},
+	.store = ipr_store_reset_adapter
+};
+
+/**
+ * ipr_alloc_ucode_buffer - Allocates a microcode download buffer
+ * @buf_len:		buffer length
+ *
+ * Allocates a DMA'able buffer in chunks and assembles a scatter/gather
+ * list to use for microcode download
+ *
+ * Return value:
+ * 	pointer to sglist / NULL on failure
+ **/
+static struct ipr_sglist *ipr_alloc_ucode_buffer(int buf_len)
+{
+	int sg_size, order, bsize_elem, num_elem, i, j;
+	struct ipr_sglist *sglist;
+	struct scatterlist *scatterlist;
+	struct page *page;
+
+	/* Get the minimum size per scatter/gather element */
+	sg_size = buf_len / (IPR_MAX_SGLIST - 1);
+
+	/* Get the actual size per element */
+	order = get_order(sg_size);
+
+	/* Determine the actual number of bytes per element */
+	bsize_elem = PAGE_SIZE * (1 << order);
+
+	/* Determine the actual number of sg entries needed */
+	if (buf_len % bsize_elem)
+		num_elem = (buf_len / bsize_elem) + 1;
+	else
+		num_elem = buf_len / bsize_elem;
+
+	/* Allocate a scatter/gather list for the DMA */
+	sglist = kmalloc(sizeof(struct ipr_sglist) +
+			 (sizeof(struct scatterlist) * (num_elem - 1)),
+			 GFP_KERNEL);
+
+	if (sglist == NULL) {
+		ipr_trace;
+		return NULL;
+	}
+
+	memset(sglist, 0, sizeof(struct ipr_sglist) +
+	       (sizeof(struct scatterlist) * (num_elem - 1)));
+
+	scatterlist = sglist->scatterlist;
+
+	sglist->order = order;
+	sglist->num_sg = num_elem;
+
+	/* Allocate a bunch of sg elements */
+	for (i = 0; i < num_elem; i++) {
+		page = alloc_pages(GFP_KERNEL, order);
+		if (!page) {
+			ipr_trace;
+
+			/* Free up what we already allocated */
+			for (j = i - 1; j >= 0; j--)
+				__free_pages(scatterlist[j].page, order);
+			kfree(sglist);
+			return NULL;
+		}
+
+		scatterlist[i].page = page;
+	}
+
+	return sglist;
+}
+
+/**
+ * ipr_free_ucode_buffer - Frees a microcode download buffer
+ * @p_dnld:		scatter/gather list pointer
+ *
+ * Free a DMA'able ucode download buffer previously allocated with
+ * ipr_alloc_ucode_buffer
+ *
+ * Return value:
+ * 	nothing
+ **/
+static void ipr_free_ucode_buffer(struct ipr_sglist *sglist)
+{
+	int i;
+
+	for (i = 0; i < sglist->num_sg; i++)
+		__free_pages(sglist->scatterlist[i].page, sglist->order);
+
+	kfree(sglist);
+}
+
+/**
+ * ipr_copy_ucode_buffer - Copy user buffer to kernel buffer
+ * @sglist:		scatter/gather list pointer
+ * @buffer:		buffer pointer
+ * @len:		buffer length
+ *
+ * Copy a microcode image from a user buffer into a buffer allocated by
+ * ipr_alloc_ucode_buffer
+ *
+ * Return value:
+ * 	0 on success / other on failure
+ **/
+static int ipr_copy_ucode_buffer(struct ipr_sglist *sglist,
+				 u8 *buffer, u32 len)
+{
+	int bsize_elem, i, result = 0;
+	struct scatterlist *scatterlist;
+	void *kaddr;
+
+	/* Determine the actual number of bytes per element */
+	bsize_elem = PAGE_SIZE * (1 << sglist->order);
+
+	scatterlist = sglist->scatterlist;
+
+	for (i = 0; i < (len / bsize_elem); i++, buffer += bsize_elem) {
+		kaddr = kmap(scatterlist[i].page);
+		memcpy(kaddr, buffer, bsize_elem);
+		kunmap(scatterlist[i].page);
+
+		scatterlist[i].length = bsize_elem;
+
+		if (result != 0) {
+			ipr_trace;
+			return result;
+		}
+	}
+
+	if (len % bsize_elem) {
+		kaddr = kmap(scatterlist[i].page);
+		memcpy(kaddr, buffer, len % bsize_elem);
+		kunmap(scatterlist[i].page);
+
+		scatterlist[i].length = len % bsize_elem;
+	}
+
+	sglist->buffer_len = len;
+	return result;
+}
+
+/**
+ * ipr_map_ucode_buffer - Map a microcode download buffer
+ * @ipr_cmd:	ipr command struct
+ * @sglist:		scatter/gather list
+ * @len:		total length of download buffer
+ *
+ * Maps a microcode download scatter/gather list for DMA and
+ * builds the IOADL.
+ *
+ * Return value:
+ * 	0 on success / -EIO on failure
+ **/
+static int ipr_map_ucode_buffer(struct ipr_cmnd *ipr_cmd,
+				struct ipr_sglist *sglist, int len)
+{
+	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
+	struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb;
+	struct ipr_ioadl_desc *ioadl = ipr_cmd->ioadl;
+	struct scatterlist *scatterlist = sglist->scatterlist;
+	int i;
+
+	ipr_cmd->dma_use_sg = pci_map_sg(ioa_cfg->pdev, scatterlist,
+					 sglist->num_sg, DMA_TO_DEVICE);
+
+	ioarcb->cmd_pkt.flags_hi |= IPR_FLAGS_HI_WRITE_NOT_READ;
+	ioarcb->write_data_transfer_length = cpu_to_be32(len);
+	ioarcb->write_ioadl_len =
+		cpu_to_be32(sizeof(struct ipr_ioadl_desc) * ipr_cmd->dma_use_sg);
+
+	for (i = 0; i < ipr_cmd->dma_use_sg; i++) {
+		ioadl[i].flags_and_data_len =
+			cpu_to_be32(IPR_IOADL_FLAGS_WRITE | sg_dma_len(&scatterlist[i]));
+		ioadl[i].address =
+			cpu_to_be32(sg_dma_address(&scatterlist[i]));
+	}
+
+	if (likely(ipr_cmd->dma_use_sg)) {
+		ioadl[i-1].flags_and_data_len |=
+			cpu_to_be32(IPR_IOADL_FLAGS_LAST);
+	}
+	else {
+		dev_err(&ioa_cfg->pdev->dev, "pci_map_sg failed!\n");
+		return -EIO;
+	}
+
+	return 0;
+}
+
+/**
+ * ipr_store_update_fw - Update the firmware on the adapter
+ * @class_dev:	class_device struct
+ * @buf:		buffer
+ * @count:		buffer size
+ *
+ * This function will update the firmware on the adapter.
+ *
+ * Return value:
+ * 	count on success / other on failure
+ **/
+static ssize_t ipr_store_update_fw(struct class_device *class_dev,
+				       const char *buf, size_t count)
+{
+	struct Scsi_Host *shost = class_to_shost(class_dev);
+	struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata;
+	struct ipr_ucode_image_header *image_hdr;
+	const struct firmware *fw_entry;
+	struct ipr_sglist *sglist;
+	unsigned long lock_flags;
+	char fname[100];
+	char *src;
+	int len, result, dnld_size;
+
+	if (!capable(CAP_SYS_ADMIN))
+		return -EACCES;
+
+	len = snprintf(fname, 99, "%s", buf);
+	fname[len-1] = '\0';
+
+	if(request_firmware(&fw_entry, fname, &ioa_cfg->pdev->dev)) {
+		dev_err(&ioa_cfg->pdev->dev, "Firmware file %s not found\n", fname);
+		return -EIO;
+	}
+
+	image_hdr = (struct ipr_ucode_image_header *)fw_entry->data;
+
+	if (be32_to_cpu(image_hdr->header_length) > fw_entry->size ||
+	    (ioa_cfg->vpd_cbs->page3_data.card_type &&
+	     ioa_cfg->vpd_cbs->page3_data.card_type != image_hdr->card_type)) {
+		dev_err(&ioa_cfg->pdev->dev, "Invalid microcode buffer\n");
+		release_firmware(fw_entry);
+		return -EINVAL;
+	}
+
+	src = (u8 *)image_hdr + be32_to_cpu(image_hdr->header_length);
+	dnld_size = fw_entry->size - be32_to_cpu(image_hdr->header_length);
+	sglist = ipr_alloc_ucode_buffer(dnld_size);
+
+	if (!sglist) {
+		dev_err(&ioa_cfg->pdev->dev, "Microcode buffer allocation failed\n");
+		release_firmware(fw_entry);
+		return -ENOMEM;
+	}
+
+	result = ipr_copy_ucode_buffer(sglist, src, dnld_size);
+
+	if (result) {
+		dev_err(&ioa_cfg->pdev->dev,
+			"Microcode buffer copy to DMA buffer failed\n");
+		ipr_free_ucode_buffer(sglist);
+		release_firmware(fw_entry);
+		return result;
+	}
+
+	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
+
+	if (ioa_cfg->ucode_sglist) {
+		spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+		dev_err(&ioa_cfg->pdev->dev,
+			"Microcode download already in progress\n");
+		ipr_free_ucode_buffer(sglist);
+		release_firmware(fw_entry);
+		return -EIO;
+	}
+
+	ioa_cfg->ucode_sglist = sglist;
+	ipr_initiate_ioa_reset(ioa_cfg, IPR_SHUTDOWN_NORMAL);
+	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+	wait_event(ioa_cfg->reset_wait_q, !ioa_cfg->in_reset_reload);
+
+	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
+	ioa_cfg->ucode_sglist = NULL;
+	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+
+	ipr_free_ucode_buffer(sglist);
+	release_firmware(fw_entry);
+
+	return count;
+}
+
+static struct class_device_attribute ipr_update_fw_attr = {
+	.attr = {
+		.name =		"update_fw",
+		.mode =		S_IWUSR,
+	},
+	.store = ipr_store_update_fw
+};
+
+static struct class_device_attribute *ipr_ioa_attrs[] = {
+	&ipr_fw_version_attr,
+	&ipr_log_level_attr,
+	&ipr_diagnostics_attr,
+	&ipr_ioa_reset_attr,
+	&ipr_update_fw_attr,
+	NULL,
+};
+
+#ifdef CONFIG_SCSI_IPR_DUMP
+/**
+ * ipr_read_dump - Dump the adapter
+ * @kobj:		kobject struct
+ * @buf:		buffer
+ * @off:		offset
+ * @count:		buffer size
+ *
+ * Return value:
+ *	number of bytes printed to buffer
+ **/
+static ssize_t ipr_read_dump(struct kobject *kobj, char *buf,
+			      loff_t off, size_t count)
+{
+	struct class_device *cdev = container_of(kobj,struct class_device,kobj);
+	struct Scsi_Host *shost = class_to_shost(cdev);
+	struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata;
+	struct ipr_dump *dump;
+	unsigned long lock_flags = 0;
+	char *src;
+	int len;
+	size_t rc = count;
+
+	if (!capable(CAP_SYS_ADMIN))
+		return -EACCES;
+
+	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
+	dump = ioa_cfg->dump;
+
+	if (ioa_cfg->sdt_state != DUMP_OBTAINED || !dump || !kobject_get(&dump->kobj)) {
+		spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+		return 0;
+	}
+
+	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+
+	if (off > dump->driver_dump.hdr.len) {
+		kobject_put(&dump->kobj);
+		return 0;
+	}
+
+	if (off + count > dump->driver_dump.hdr.len) {
+		count = dump->driver_dump.hdr.len - off;
+		rc = count;
+	}
+
+	if (count && off < sizeof(dump->driver_dump)) {
+		if (off + count > sizeof(dump->driver_dump))
+			len = sizeof(dump->driver_dump) - off;
+		else
+			len = count;
+		src = (u8 *)&dump->driver_dump + off;
+		memcpy(buf, src, len);
+		buf += len;
+		off += len;
+		count -= len;
+	}
+
+	off -= sizeof(dump->driver_dump);
+
+	if (count && off < offsetof(struct ipr_ioa_dump, ioa_data)) {
+		if (off + count > offsetof(struct ipr_ioa_dump, ioa_data))
+			len = offsetof(struct ipr_ioa_dump, ioa_data) - off;
+		else
+			len = count;
+		src = (u8 *)&dump->ioa_dump + off;
+		memcpy(buf, src, len);
+		buf += len;
+		off += len;
+		count -= len;
+	}
+
+	off -= offsetof(struct ipr_ioa_dump, ioa_data);
+
+	while (count) {
+		if ((off & PAGE_MASK) != ((off + count) & PAGE_MASK))
+			len = PAGE_ALIGN(off) - off;
+		else
+			len = count;
+		src = (u8 *)dump->ioa_dump.ioa_data[(off & PAGE_MASK) >> PAGE_SHIFT];
+		src += off & ~PAGE_MASK;
+		memcpy(buf, src, len);
+		buf += len;
+		off += len;
+		count -= len;
+	}
+
+	kobject_put(&dump->kobj);
+	return rc;
+}
+
+/**
+ * ipr_release_dump - Free adapter dump memory
+ * @kobj:	kobject struct
+ *
+ * Return value:
+ *	nothing
+ **/
+static void ipr_release_dump(struct kobject *kobj)
+{
+	struct ipr_dump *dump = container_of(kobj,struct ipr_dump,kobj);
+	struct ipr_ioa_cfg *ioa_cfg = dump->ioa_cfg;
+	unsigned long lock_flags = 0;
+	int i;
+
+	ENTER;
+	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
+	ioa_cfg->dump = NULL;
+	ioa_cfg->sdt_state = INACTIVE;
+	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+
+	for (i = 0; i < dump->ioa_dump.next_page_index; i++)
+		free_page((unsigned long) dump->ioa_dump.ioa_data[i]);
+
+	kfree(dump);
+	LEAVE;
+}
+
+static struct kobj_type ipr_dump_kobj_type = {
+	.release = ipr_release_dump,
+};
+
+/**
+ * ipr_alloc_dump - Prepare for adapter dump
+ * @ioa_cfg:	ioa config struct
+ *
+ * Return value:
+ *	0 on success / other on failure
+ **/
+static int ipr_alloc_dump(struct ipr_ioa_cfg *ioa_cfg)
+{
+	struct ipr_dump *dump;
+	unsigned long lock_flags = 0;
+
+	ENTER;
+	dump = kmalloc(sizeof(struct ipr_dump), GFP_KERNEL);
+
+	if (!dump) {
+		ipr_err("Dump memory allocation failed\n");
+		return -ENOMEM;
+	}
+
+	memset(dump, 0, sizeof(struct ipr_dump));
+	kobject_init(&dump->kobj);
+	dump->kobj.ktype = &ipr_dump_kobj_type;
+	dump->ioa_cfg = ioa_cfg;
+
+	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
+
+	if (INACTIVE != ioa_cfg->sdt_state) {
+		spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+		kfree(dump);
+		return 0;
+	}
+
+	ioa_cfg->dump = dump;
+	ioa_cfg->sdt_state = WAIT_FOR_DUMP;
+	if (ioa_cfg->ioa_is_dead && !ioa_cfg->dump_taken) {
+		ioa_cfg->dump_taken = 1;
+		schedule_work(&ioa_cfg->work_q);
+	}
+	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+
+	LEAVE;
+	return 0;
+}
+
+/**
+ * ipr_free_dump - Free adapter dump memory
+ * @ioa_cfg:	ioa config struct
+ *
+ * Return value:
+ *	0 on success / other on failure
+ **/
+static int ipr_free_dump(struct ipr_ioa_cfg *ioa_cfg)
+{
+	struct ipr_dump *dump;
+	unsigned long lock_flags = 0;
+
+	ENTER;
+
+	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
+	dump = ioa_cfg->dump;
+	if (!dump) {
+		spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+		return 0;
+	}
+
+	ioa_cfg->dump = NULL;
+	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+
+	kobject_put(&dump->kobj);
+
+	LEAVE;
+	return 0;
+}
+
+/**
+ * ipr_write_dump - Setup dump state of adapter
+ * @kobj:		kobject struct
+ * @buf:		buffer
+ * @off:		offset
+ * @count:		buffer size
+ *
+ * Return value:
+ *	number of bytes printed to buffer
+ **/
+static ssize_t ipr_write_dump(struct kobject *kobj, char *buf,
+			      loff_t off, size_t count)
+{
+	struct class_device *cdev = container_of(kobj,struct class_device,kobj);
+	struct Scsi_Host *shost = class_to_shost(cdev);
+	struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata;
+	int rc;
+
+	if (!capable(CAP_SYS_ADMIN))
+		return -EACCES;
+
+	if (buf[0] == '1')
+		rc = ipr_alloc_dump(ioa_cfg);
+	else if (buf[0] == '0')
+		rc = ipr_free_dump(ioa_cfg);
+	else
+		return -EINVAL;
+
+	if (rc)
+		return rc;
+	else
+		return count;
+}
+
+static struct bin_attribute ipr_dump_attr = {
+	.attr =	{
+		.name = "dump",
+		.mode = S_IRUSR | S_IWUSR,
+	},
+	.size = 0,
+	.read = ipr_read_dump,
+	.write = ipr_write_dump
+};
+#else
+static int ipr_free_dump(struct ipr_ioa_cfg *ioa_cfg) { return 0; };
+#endif
+
+/**
+ * ipr_store_queue_depth - Change the device's queue depth
+ * @dev:	device struct
+ * @buf:	buffer
+ *
+ * Return value:
+ * 	number of bytes printed to buffer
+ **/
+static ssize_t ipr_store_queue_depth(struct device *dev,
+				    const char *buf, size_t count)
+{
+	struct scsi_device *sdev = to_scsi_device(dev);
+	struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)sdev->host->hostdata;
+	struct ipr_resource_entry *res;
+	int qdepth = simple_strtoul(buf, NULL, 10);
+	int tagged = 0;
+	unsigned long lock_flags = 0;
+	ssize_t len = -ENXIO;
+
+	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
+	res = (struct ipr_resource_entry *)sdev->hostdata;
+	if (res) {
+		res->qdepth = qdepth;
+
+		if (ipr_is_gscsi(res) && res->tcq_active)
+			tagged = MSG_ORDERED_TAG;
+
+		len = strlen(buf);
+	}
+
+	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+	scsi_adjust_queue_depth(sdev, tagged, qdepth);
+	return len;
+}
+
+static struct device_attribute ipr_queue_depth_attr = {
+	.attr = {
+		.name = 	"queue_depth",
+		.mode =		S_IRUSR | S_IWUSR,
+	},
+	.store = ipr_store_queue_depth
+};
+
+/**
+ * ipr_show_tcq_enable - Show if the device is enabled for tcqing
+ * @dev:	device struct
+ * @buf:	buffer
+ *
+ * Return value:
+ * 	number of bytes printed to buffer
+ **/
+static ssize_t ipr_show_tcq_enable(struct device *dev, char *buf)
+{
+	struct scsi_device *sdev = to_scsi_device(dev);
+	struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)sdev->host->hostdata;
+	struct ipr_resource_entry *res;
+	unsigned long lock_flags = 0;
+	ssize_t len = -ENXIO;
+
+	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
+	res = (struct ipr_resource_entry *)sdev->hostdata;
+	if (res)
+		len = snprintf(buf, PAGE_SIZE, "%d\n", res->tcq_active);
+	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+	return len;
+}
+
+/**
+ * ipr_store_tcq_enable - Change the device's TCQing state
+ * @dev:	device struct
+ * @buf:	buffer
+ *
+ * Return value:
+ * 	number of bytes printed to buffer
+ **/
+static ssize_t ipr_store_tcq_enable(struct device *dev,
+				    const char *buf, size_t count)
+{
+	struct scsi_device *sdev = to_scsi_device(dev);
+	struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)sdev->host->hostdata;
+	struct ipr_resource_entry *res;
+	unsigned long lock_flags = 0;
+	int tcq_active = simple_strtoul(buf, NULL, 10);
+	int qdepth = IPR_MAX_CMD_PER_LUN;
+	int tagged = 0;
+	ssize_t len = -ENXIO;
+
+	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
+
+	res = (struct ipr_resource_entry *)sdev->hostdata;
+
+	if (res) {
+		res->tcq_active = 0;
+		qdepth = res->qdepth;
+
+		if (ipr_is_gscsi(res) && sdev->tagged_supported) {
+			if (tcq_active) {
+				tagged = MSG_ORDERED_TAG;
+				res->tcq_active = 1;
+			}
+
+			len = strlen(buf);
+		} else if (tcq_active) {
+			len = -EINVAL;
+		}
+	}
+
+	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+	scsi_adjust_queue_depth(sdev, tagged, qdepth);
+	return len;
+}
+
+static struct device_attribute ipr_tcqing_attr = {
+	.attr = {
+		.name = 	"tcq_enable",
+		.mode =		S_IRUSR | S_IWUSR,
+	},
+	.store = ipr_store_tcq_enable,
+	.show = ipr_show_tcq_enable
+};
+
+/**
+ * ipr_show_adapter_handle - Show the adapter's resource handle for this device
+ * @dev:	device struct
+ * @buf:	buffer
+ *
+ * Return value:
+ * 	number of bytes printed to buffer
+ **/
+static ssize_t ipr_show_adapter_handle(struct device *dev, char *buf)
+{
+	struct scsi_device *sdev = to_scsi_device(dev);
+	struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)sdev->host->hostdata;
+	struct ipr_resource_entry *res;
+	unsigned long lock_flags = 0;
+	ssize_t len = -ENXIO;
+
+	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
+	res = (struct ipr_resource_entry *)sdev->hostdata;
+	if (res)
+		len = snprintf(buf, PAGE_SIZE, "%08X\n", res->cfgte.res_handle);
+	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+	return len;
+}
+
+static struct device_attribute ipr_adapter_handle_attr = {
+	.attr = {
+		.name = 	"adapter_handle",
+		.mode =		S_IRUSR,
+	},
+	.show = ipr_show_adapter_handle
+};
+
+static struct device_attribute *ipr_dev_attrs[] = {
+	&ipr_queue_depth_attr,
+	&ipr_tcqing_attr,
+	&ipr_adapter_handle_attr,
+	NULL,
+};
+
+/**
+ * ipr_biosparam - Return the HSC mapping
+ * @sdev:			scsi device struct
+ * @block_device:	block device pointer
+ * @capacity:		capacity of the device
+ * @parm:			Array containing returned HSC values.
+ *
+ * This function generates the HSC parms that fdisk uses.
+ * We want to make sure we return something that places partitions
+ * on 4k boundaries for best performance with the IOA.
+ *
+ * Return value:
+ * 	0 on success
+ **/
+static int ipr_biosparam(struct scsi_device *sdev,
+			 struct block_device *block_device,
+			 sector_t capacity, int *parm)
+{
+	int heads, sectors, cylinders;
+
+	heads = 128;
+	sectors = 32;
+
+	cylinders = capacity;
+	sector_div(cylinders, (128 * 32));
+
+	/* return result */
+	parm[0] = heads;
+	parm[1] = sectors;
+	parm[2] = cylinders;
+
+	return 0;
+}
+
+/**
+ * ipr_slave_destroy - Unconfigure a SCSI device
+ * @sdev:	scsi device struct
+ *
+ * Return value:
+ * 	nothing
+ **/
+static void ipr_slave_destroy(struct scsi_device *sdev)
+{
+	struct ipr_resource_entry *res;
+	struct ipr_ioa_cfg *ioa_cfg;
+	unsigned long lock_flags = 0;
+
+	ioa_cfg = (struct ipr_ioa_cfg *) sdev->host->hostdata;
+
+	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
+	res = (struct ipr_resource_entry *) sdev->hostdata;
+	if (res) {
+		sdev->hostdata = NULL;
+		res->sdev = NULL;
+	}
+	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+}
+
+/**
+ * ipr_slave_configure - Configure a SCSI device
+ * @sdev:	scsi device struct
+ *
+ * This function configures the specified scsi device.
+ *
+ * Return value:
+ * 	0 on success
+ **/
+static int ipr_slave_configure(struct scsi_device *sdev)
+{
+	struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *) sdev->host->hostdata;
+	struct ipr_resource_entry *res;
+	unsigned long lock_flags = 0;
+
+	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
+	res = sdev->hostdata;
+	if (res) {
+		if (ipr_is_af_dasd_device(res))
+			sdev->type = TYPE_RAID;
+		if (ipr_is_af_dasd_device(res) || ipr_is_ioa_resource(res))
+			sdev->scsi_level = 4;
+		if (ipr_is_vset_device(res))
+			sdev->timeout = IPR_VSET_RW_TIMEOUT;
+
+		sdev->allow_restart = 1;
+		scsi_adjust_queue_depth(sdev, 0, res->qdepth);
+	}
+	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+	return 0;
+}
+
+/**
+ * ipr_slave_alloc - Prepare for commands to a device.
+ * @sdev:	scsi device struct
+ *
+ * This function saves a pointer to the resource entry
+ * in the scsi device struct if the device exists. We
+ * can then use this pointer in ipr_queuecommand when
+ * handling new commands.
+ *
+ * Return value:
+ * 	0 on success
+ **/
+static int ipr_slave_alloc(struct scsi_device *sdev)
+{
+	struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *) sdev->host->hostdata;
+	struct ipr_resource_entry *res;
+	unsigned long lock_flags;
+
+	sdev->hostdata = NULL;
+
+	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
+
+	list_for_each_entry(res, &ioa_cfg->used_res_q, queue) {
+		if ((res->cfgte.res_addr.bus == sdev->channel) &&
+		    (res->cfgte.res_addr.target == sdev->id) &&
+		    (res->cfgte.res_addr.lun == sdev->lun)) {
+			res->sdev = sdev;
+			res->add_to_ml = 0;
+			sdev->hostdata = res;
+			res->needs_sync_complete = 1;
+			break;
+		}
+	}
+
+	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+
+	return 0;
+}
+
+/**
+ * ipr_eh_host_reset - Reset the host adapter
+ * @scsi_cmd:	scsi command struct
+ *
+ * Return value:
+ * 	SUCCESS / FAILED
+ **/
+static int ipr_eh_host_reset(struct scsi_cmnd * scsi_cmd)
+{
+	struct ipr_ioa_cfg *ioa_cfg;
+	int rc;
+
+	ENTER;
+	ioa_cfg = (struct ipr_ioa_cfg *) scsi_cmd->device->host->hostdata;
+
+	dev_err(&ioa_cfg->pdev->dev,
+		"Adapter being reset as a result of error recovery.\n");
+
+	if (WAIT_FOR_DUMP == ioa_cfg->sdt_state)
+		ioa_cfg->sdt_state = GET_DUMP;
+
+	rc = ipr_reset_reload(ioa_cfg, IPR_SHUTDOWN_ABBREV);
+
+	LEAVE;
+	return rc;
+}
+
+/**
+ * ipr_eh_dev_reset - Reset the device
+ * @scsi_cmd:	scsi command struct
+ *
+ * This function issues a device reset to the affected device.
+ * A LUN reset will be sent to the device first. If that does
+ * not work, a target reset will be sent.
+ *
+ * Return value:
+ *	SUCCESS / FAILED
+ **/
+static int ipr_eh_dev_reset(struct scsi_cmnd * scsi_cmd)
+{
+	struct ipr_cmnd *ipr_cmd;
+	struct ipr_ioa_cfg *ioa_cfg;
+	struct ipr_resource_entry *res;
+	struct ipr_cmd_pkt *cmd_pkt;
+	u32 ioasc;
+
+	ENTER;
+	ioa_cfg = (struct ipr_ioa_cfg *) scsi_cmd->device->host->hostdata;
+	res = scsi_cmd->device->hostdata;
+
+	if (!res || (!ipr_is_gscsi(res) && !ipr_is_vset_device(res)))
+		return FAILED;
+
+	/*
+	 * If we are currently going through reset/reload, return failed. This will force the
+	 * mid-layer to call ipr_eh_host_reset, which will then go to sleep and wait for the
+	 * reset to complete
+	 */
+	if (ioa_cfg->in_reset_reload)
+		return FAILED;
+	if (ioa_cfg->ioa_is_dead)
+		return FAILED;
+
+	list_for_each_entry(ipr_cmd, &ioa_cfg->pending_q, queue) {
+		if (ipr_cmd->ioarcb.res_handle == res->cfgte.res_handle) {
+			if (ipr_cmd->scsi_cmd)
+				ipr_cmd->done = ipr_scsi_eh_done;
+		}
+	}
+
+	res->resetting_device = 1;
+
+	ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg);
+
+	ipr_cmd->ioarcb.res_handle = res->cfgte.res_handle;
+	cmd_pkt = &ipr_cmd->ioarcb.cmd_pkt;
+	cmd_pkt->request_type = IPR_RQTYPE_IOACMD;
+	cmd_pkt->cdb[0] = IPR_RESET_DEVICE;
+
+	ipr_send_blocking_cmd(ipr_cmd, ipr_timeout, IPR_DEVICE_RESET_TIMEOUT);
+
+	ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc);
+
+	res->resetting_device = 0;
+
+	list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
+
+	LEAVE;
+	return (IPR_IOASC_SENSE_KEY(ioasc) ? FAILED : SUCCESS);
+}
+
+/**
+ * ipr_bus_reset_done - Op done function for bus reset.
+ * @ipr_cmd:	ipr command struct
+ *
+ * This function is the op done function for a bus reset
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_bus_reset_done(struct ipr_cmnd *ipr_cmd)
+{
+	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
+	struct ipr_resource_entry *res;
+
+	ENTER;
+	list_for_each_entry(res, &ioa_cfg->used_res_q, queue) {
+		if (!memcmp(&res->cfgte.res_handle, &ipr_cmd->ioarcb.res_handle,
+			    sizeof(res->cfgte.res_handle))) {
+			scsi_report_bus_reset(ioa_cfg->host, res->cfgte.res_addr.bus);
+			break;
+		}
+	}
+
+	/*
+	 * If abort has not completed, indicate the reset has, else call the
+	 * abort's done function to wake the sleeping eh thread
+	 */
+	if (ipr_cmd->sibling->sibling)
+		ipr_cmd->sibling->sibling = NULL;
+	else
+		ipr_cmd->sibling->done(ipr_cmd->sibling);
+
+	list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
+	LEAVE;
+}
+
+/**
+ * ipr_abort_timeout - An abort task has timed out
+ * @ipr_cmd:	ipr command struct
+ *
+ * This function handles when an abort task times out. If this
+ * happens we issue a bus reset since we have resources tied
+ * up that must be freed before returning to the midlayer.
+ *
+ * Return value:
+ *	none
+ **/
+static void ipr_abort_timeout(struct ipr_cmnd *ipr_cmd)
+{
+	struct ipr_cmnd *reset_cmd;
+	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
+	struct ipr_cmd_pkt *cmd_pkt;
+	unsigned long lock_flags = 0;
+
+	ENTER;
+	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
+	if (ipr_cmd->completion.done || ioa_cfg->in_reset_reload) {
+		spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+		return;
+	}
+
+	reset_cmd = ipr_get_free_ipr_cmnd(ioa_cfg);
+	ipr_cmd->sibling = reset_cmd;
+	reset_cmd->sibling = ipr_cmd;
+	reset_cmd->ioarcb.res_handle = ipr_cmd->ioarcb.res_handle;
+	cmd_pkt = &reset_cmd->ioarcb.cmd_pkt;
+	cmd_pkt->request_type = IPR_RQTYPE_IOACMD;
+	cmd_pkt->cdb[0] = IPR_RESET_DEVICE;
+	cmd_pkt->cdb[2] = IPR_RESET_TYPE_SELECT | IPR_BUS_RESET;
+
+	ipr_do_req(reset_cmd, ipr_bus_reset_done, ipr_timeout, IPR_DEVICE_RESET_TIMEOUT);
+	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+	LEAVE;
+}
+
+/**
+ * ipr_cancel_op - Cancel specified op
+ * @scsi_cmd:	scsi command struct
+ *
+ * This function cancels specified op.
+ *
+ * Return value:
+ *	SUCCESS / FAILED
+ **/
+static int ipr_cancel_op(struct scsi_cmnd * scsi_cmd)
+{
+	struct ipr_cmnd *ipr_cmd;
+	struct ipr_ioa_cfg *ioa_cfg;
+	struct ipr_resource_entry *res;
+	struct ipr_cmd_pkt *cmd_pkt;
+	u32 ioasc, ioarcb_addr;
+	int op_found = 0;
+
+	ENTER;
+	ioa_cfg = (struct ipr_ioa_cfg *)scsi_cmd->device->host->hostdata;
+	res = scsi_cmd->device->hostdata;
+
+	if (!res || (!ipr_is_gscsi(res) && !ipr_is_vset_device(res)))
+		return FAILED;
+
+	list_for_each_entry(ipr_cmd, &ioa_cfg->pending_q, queue) {
+		if (ipr_cmd->scsi_cmd == scsi_cmd) {
+			ipr_cmd->done = ipr_scsi_eh_done;
+			op_found = 1;
+			break;
+		}
+	}
+
+	if (!op_found)
+		return SUCCESS;
+
+	ioarcb_addr = be32_to_cpu(ipr_cmd->ioarcb.ioarcb_host_pci_addr);
+
+	ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg);
+	ipr_cmd->ioarcb.res_handle = res->cfgte.res_handle;
+	cmd_pkt = &ipr_cmd->ioarcb.cmd_pkt;
+	cmd_pkt->request_type = IPR_RQTYPE_IOACMD;
+	cmd_pkt->cdb[0] = IPR_ABORT_TASK;
+	cmd_pkt->cdb[2] = (ioarcb_addr >> 24) & 0xff;
+	cmd_pkt->cdb[3] = (ioarcb_addr >> 16) & 0xff;
+	cmd_pkt->cdb[4] = (ioarcb_addr >> 8) & 0xff;
+	cmd_pkt->cdb[5] = ioarcb_addr & 0xff;
+
+	ipr_send_blocking_cmd(ipr_cmd, ipr_abort_timeout, IPR_ABORT_TASK_TIMEOUT);
+	ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc);
+
+	/*
+	 * If the abort task timed out and we sent a bus reset, we will get
+	 * one the following responses to the abort
+	 */
+	if (ioasc == IPR_IOASC_BUS_WAS_RESET || ioasc == IPR_IOASC_SYNC_REQUIRED) {
+		ioasc = 0;
+		ipr_trace;
+	}
+
+	list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
+	res->needs_sync_complete = 1;
+
+	LEAVE;
+	return (IPR_IOASC_SENSE_KEY(ioasc) ? FAILED : SUCCESS);
+}
+
+/**
+ * ipr_eh_abort - Abort a single op
+ * @scsi_cmd:	scsi command struct
+ *
+ * Return value:
+ * 	SUCCESS / FAILED
+ **/
+static int ipr_eh_abort(struct scsi_cmnd * scsi_cmd)
+{
+	struct ipr_ioa_cfg *ioa_cfg;
+
+	ENTER;
+	ioa_cfg = (struct ipr_ioa_cfg *) scsi_cmd->device->host->hostdata;
+
+	/* If we are currently going through reset/reload, return failed. This will force the
+	   mid-layer to call ipr_eh_host_reset, which will then go to sleep and wait for the
+	   reset to complete */
+	if (ioa_cfg->in_reset_reload)
+		return FAILED;
+	if (ioa_cfg->ioa_is_dead)
+		return FAILED;
+	if (!scsi_cmd->device->hostdata)
+		return FAILED;
+
+	LEAVE;
+	return ipr_cancel_op(scsi_cmd);
+}
+
+/**
+ * ipr_handle_other_interrupt - Handle "other" interrupts
+ * @ioa_cfg:	ioa config struct
+ * @int_reg:	interrupt register
+ *
+ * Return value:
+ * 	IRQ_NONE / IRQ_HANDLED
+ **/
+static irqreturn_t ipr_handle_other_interrupt(struct ipr_ioa_cfg *ioa_cfg,
+					      volatile u32 int_reg)
+{
+	irqreturn_t rc = IRQ_HANDLED;
+
+	if (int_reg & IPR_PCII_IOA_TRANS_TO_OPER) {
+		/* Mask the interrupt */
+		writel(IPR_PCII_IOA_TRANS_TO_OPER, ioa_cfg->regs.set_interrupt_mask_reg);
+
+		/* Clear the interrupt */
+		writel(IPR_PCII_IOA_TRANS_TO_OPER, ioa_cfg->regs.clr_interrupt_reg);
+		int_reg = readl(ioa_cfg->regs.sense_interrupt_reg);
+
+		del_timer(&ioa_cfg->reset_cmd->timer);
+		ipr_reset_ioa_job(ioa_cfg->reset_cmd);
+	} else {
+		if (int_reg & IPR_PCII_IOA_UNIT_CHECKED)
+			ioa_cfg->ioa_unit_checked = 1;
+		else
+			dev_err(&ioa_cfg->pdev->dev,
+				"Permanent IOA failure. 0x%08X\n", int_reg);
+
+		if (WAIT_FOR_DUMP == ioa_cfg->sdt_state)
+			ioa_cfg->sdt_state = GET_DUMP;
+
+		ipr_mask_and_clear_interrupts(ioa_cfg, ~0);
+		ipr_initiate_ioa_reset(ioa_cfg, IPR_SHUTDOWN_NONE);
+	}
+
+	return rc;
+}
+
+/**
+ * ipr_isr - Interrupt service routine
+ * @irq:	irq number
+ * @devp:	pointer to ioa config struct
+ * @regs:	pt_regs struct
+ *
+ * Return value:
+ * 	IRQ_NONE / IRQ_HANDLED
+ **/
+static irqreturn_t ipr_isr(int irq, void *devp, struct pt_regs *regs)
+{
+	struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)devp;
+	unsigned long lock_flags = 0;
+	volatile u32 int_reg, int_mask_reg;
+	u32 ioasc;
+	u16 cmd_index;
+	struct ipr_cmnd *ipr_cmd;
+	irqreturn_t rc = IRQ_NONE;
+
+	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
+
+	/* If interrupts are disabled, ignore the interrupt */
+	if (!ioa_cfg->allow_interrupts) {
+		spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+		return IRQ_NONE;
+	}
+
+	int_mask_reg = readl(ioa_cfg->regs.sense_interrupt_mask_reg);
+	int_reg = readl(ioa_cfg->regs.sense_interrupt_reg) & ~int_mask_reg;
+
+	/* If an interrupt on the adapter did not occur, ignore it */
+	if (unlikely((int_reg & IPR_PCII_OPER_INTERRUPTS) == 0)) {
+		spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+		return IRQ_NONE;
+	}
+
+	while (1) {
+		ipr_cmd = NULL;
+
+		while ((be32_to_cpu(*ioa_cfg->hrrq_curr) & IPR_HRRQ_TOGGLE_BIT) ==
+		       ioa_cfg->toggle_bit) {
+
+			cmd_index = (be32_to_cpu(*ioa_cfg->hrrq_curr) &
+				     IPR_HRRQ_REQ_RESP_HANDLE_MASK) >> IPR_HRRQ_REQ_RESP_HANDLE_SHIFT;
+
+			if (unlikely(cmd_index >= IPR_NUM_CMD_BLKS)) {
+				ioa_cfg->errors_logged++;
+				dev_err(&ioa_cfg->pdev->dev, "Invalid response handle from IOA\n");
+
+				if (WAIT_FOR_DUMP == ioa_cfg->sdt_state)
+					ioa_cfg->sdt_state = GET_DUMP;
+
+				ipr_initiate_ioa_reset(ioa_cfg, IPR_SHUTDOWN_NONE);
+				spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+				return IRQ_HANDLED;
+			}
+
+			ipr_cmd = ioa_cfg->ipr_cmnd_list[cmd_index];
+
+			ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc);
+
+			ipr_trc_hook(ipr_cmd, IPR_TRACE_FINISH, ioasc);
+
+			list_del(&ipr_cmd->queue);
+			del_timer(&ipr_cmd->timer);
+			ipr_cmd->done(ipr_cmd);
+
+			rc = IRQ_HANDLED;
+
+			if (ioa_cfg->hrrq_curr < ioa_cfg->hrrq_end) {
+				ioa_cfg->hrrq_curr++;
+			} else {
+				ioa_cfg->hrrq_curr = ioa_cfg->hrrq_start;
+				ioa_cfg->toggle_bit ^= 1u;
+			}
+		}
+
+		if (ipr_cmd != NULL) {
+			/* Clear the PCI interrupt */
+			writel(IPR_PCII_HRRQ_UPDATED, ioa_cfg->regs.clr_interrupt_reg);
+			int_reg = readl(ioa_cfg->regs.sense_interrupt_reg) & ~int_mask_reg;
+		} else
+			break;
+	}
+
+	if (unlikely(rc == IRQ_NONE))
+		rc = ipr_handle_other_interrupt(ioa_cfg, int_reg);
+
+	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+	return rc;
+}
+
+/**
+ * ipr_build_ioadl - Build a scatter/gather list and map the buffer
+ * @ioa_cfg:	ioa config struct
+ * @ipr_cmd:	ipr command struct
+ *
+ * Return value:
+ * 	0 on success / -1 on failure
+ **/
+static int ipr_build_ioadl(struct ipr_ioa_cfg *ioa_cfg,
+			   struct ipr_cmnd *ipr_cmd)
+{
+	int i;
+	struct scatterlist *sglist;
+	u32 length;
+	u32 ioadl_flags = 0;
+	struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd;
+	struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb;
+	struct ipr_ioadl_desc *ioadl = ipr_cmd->ioadl;
+
+	length = scsi_cmd->request_bufflen;
+
+	if (length == 0)
+		return 0;
+
+	if (scsi_cmd->use_sg) {
+		ipr_cmd->dma_use_sg = pci_map_sg(ioa_cfg->pdev,
+						 scsi_cmd->request_buffer,
+						 scsi_cmd->use_sg,
+						 scsi_cmd->sc_data_direction);
+
+		if (scsi_cmd->sc_data_direction == DMA_TO_DEVICE) {
+			ioadl_flags = IPR_IOADL_FLAGS_WRITE;
+			ioarcb->cmd_pkt.flags_hi |= IPR_FLAGS_HI_WRITE_NOT_READ;
+			ioarcb->write_data_transfer_length = cpu_to_be32(length);
+			ioarcb->write_ioadl_len =
+				cpu_to_be32(sizeof(struct ipr_ioadl_desc) * ipr_cmd->dma_use_sg);
+		} else if (scsi_cmd->sc_data_direction == DMA_FROM_DEVICE) {
+			ioadl_flags = IPR_IOADL_FLAGS_READ;
+			ioarcb->read_data_transfer_length = cpu_to_be32(length);
+			ioarcb->read_ioadl_len =
+				cpu_to_be32(sizeof(struct ipr_ioadl_desc) * ipr_cmd->dma_use_sg);
+		}
+
+		sglist = scsi_cmd->request_buffer;
+
+		for (i = 0; i < ipr_cmd->dma_use_sg; i++) {
+			ioadl[i].flags_and_data_len =
+				cpu_to_be32(ioadl_flags | sg_dma_len(&sglist[i]));
+			ioadl[i].address =
+				cpu_to_be32(sg_dma_address(&sglist[i]));
+		}
+
+		if (likely(ipr_cmd->dma_use_sg)) {
+			ioadl[i-1].flags_and_data_len |=
+				cpu_to_be32(IPR_IOADL_FLAGS_LAST);
+			return 0;
+		} else
+			dev_err(&ioa_cfg->pdev->dev, "pci_map_sg failed!\n");
+	} else {
+		if (scsi_cmd->sc_data_direction == DMA_TO_DEVICE) {
+			ioadl_flags = IPR_IOADL_FLAGS_WRITE;
+			ioarcb->cmd_pkt.flags_hi |= IPR_FLAGS_HI_WRITE_NOT_READ;
+			ioarcb->write_data_transfer_length = cpu_to_be32(length);
+			ioarcb->write_ioadl_len = cpu_to_be32(sizeof(struct ipr_ioadl_desc));
+		} else if (scsi_cmd->sc_data_direction == DMA_FROM_DEVICE) {
+			ioadl_flags = IPR_IOADL_FLAGS_READ;
+			ioarcb->read_data_transfer_length = cpu_to_be32(length);
+			ioarcb->read_ioadl_len = cpu_to_be32(sizeof(struct ipr_ioadl_desc));
+		}
+
+		ipr_cmd->dma_handle = pci_map_single(ioa_cfg->pdev,
+						     scsi_cmd->request_buffer, length,
+						     scsi_cmd->sc_data_direction);
+
+		if (likely(!pci_dma_mapping_error(ipr_cmd->dma_handle))) {
+			ipr_cmd->dma_use_sg = 1;
+			ioadl[0].flags_and_data_len =
+				cpu_to_be32(ioadl_flags | length | IPR_IOADL_FLAGS_LAST);
+			ioadl[0].address = cpu_to_be32(ipr_cmd->dma_handle);
+			return 0;
+		} else
+			dev_err(&ioa_cfg->pdev->dev, "pci_map_single failed!\n");
+	}
+
+	return -1;
+}
+
+/**
+ * ipr_get_task_attributes - Translate SPI Q-Tag to task attributes
+ * @scsi_cmd:	scsi command struct
+ *
+ * Return value:
+ * 	task attributes
+ **/
+static u8 ipr_get_task_attributes(struct scsi_cmnd *scsi_cmd)
+{
+	u8 tag[2];
+	u8 rc = IPR_FLAGS_LO_UNTAGGED_TASK;
+
+	if (scsi_populate_tag_msg(scsi_cmd, tag)) {
+		switch (tag[0]) {
+		case MSG_SIMPLE_TAG:
+			rc = IPR_FLAGS_LO_SIMPLE_TASK;
+			break;
+		case MSG_HEAD_TAG:
+			rc = IPR_FLAGS_LO_HEAD_OF_Q_TASK;
+			break;
+		case MSG_ORDERED_TAG:
+			rc = IPR_FLAGS_LO_ORDERED_TASK;
+			break;
+		};
+	}
+
+	return rc;
+}
+
+/**
+ * ipr_erp_done - Process completion of ERP for a device
+ * @ipr_cmd:		ipr command struct
+ *
+ * This function copies the sense buffer into the scsi_cmd
+ * struct and pushes the scsi_done function.
+ *
+ * Return value:
+ * 	nothing
+ **/
+static void ipr_erp_done(struct ipr_cmnd *ipr_cmd)
+{
+	struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd;
+	struct ipr_resource_entry *res = scsi_cmd->device->hostdata;
+	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
+	u32 ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc);
+
+	if (IPR_IOASC_SENSE_KEY(ioasc) > 0) {
+		scsi_cmd->result |= (DID_ERROR << 16);
+		ipr_sdev_err(scsi_cmd->device,
+			     "Request Sense failed with IOASC: 0x%08X\n", ioasc);
+	} else {
+		memcpy(scsi_cmd->sense_buffer, ipr_cmd->sense_buffer,
+		       SCSI_SENSE_BUFFERSIZE);
+	}
+
+	if (res)
+		res->needs_sync_complete = 1;
+	ipr_unmap_sglist(ioa_cfg, ipr_cmd);
+	list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
+	scsi_cmd->scsi_done(scsi_cmd);
+}
+
+/**
+ * ipr_reinit_ipr_cmnd_for_erp - Re-initialize a cmnd block to be used for ERP
+ * @ipr_cmd:	ipr command struct
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_reinit_ipr_cmnd_for_erp(struct ipr_cmnd *ipr_cmd)
+{
+	struct ipr_ioarcb *ioarcb;
+	struct ipr_ioasa *ioasa;
+
+	ioarcb = &ipr_cmd->ioarcb;
+	ioasa = &ipr_cmd->ioasa;
+
+	memset(&ioarcb->cmd_pkt, 0, sizeof(struct ipr_cmd_pkt));
+	ioarcb->write_data_transfer_length = 0;
+	ioarcb->read_data_transfer_length = 0;
+	ioarcb->write_ioadl_len = 0;
+	ioarcb->read_ioadl_len = 0;
+	ioasa->ioasc = 0;
+	ioasa->residual_data_len = 0;
+}
+
+/**
+ * ipr_erp_request_sense - Send request sense to a device
+ * @ipr_cmd:	ipr command struct
+ *
+ * This function sends a request sense to a device as a result
+ * of a check condition.
+ *
+ * Return value:
+ * 	nothing
+ **/
+static void ipr_erp_request_sense(struct ipr_cmnd *ipr_cmd)
+{
+	struct ipr_cmd_pkt *cmd_pkt = &ipr_cmd->ioarcb.cmd_pkt;
+
+	ipr_reinit_ipr_cmnd_for_erp(ipr_cmd);
+
+	cmd_pkt->request_type = IPR_RQTYPE_SCSICDB;
+	cmd_pkt->cdb[0] = REQUEST_SENSE;
+	cmd_pkt->cdb[4] = SCSI_SENSE_BUFFERSIZE;
+	cmd_pkt->flags_hi |= IPR_FLAGS_HI_SYNC_OVERRIDE;
+	cmd_pkt->flags_hi |= IPR_FLAGS_HI_NO_ULEN_CHK;
+	cmd_pkt->timeout = cpu_to_be16(IPR_REQUEST_SENSE_TIMEOUT / HZ);
+
+	ipr_cmd->ioadl[0].flags_and_data_len =
+		cpu_to_be32(IPR_IOADL_FLAGS_READ_LAST | SCSI_SENSE_BUFFERSIZE);
+	ipr_cmd->ioadl[0].address =
+		cpu_to_be32(ipr_cmd->sense_buffer_dma);
+
+	ipr_cmd->ioarcb.read_ioadl_len =
+		cpu_to_be32(sizeof(struct ipr_ioadl_desc));
+	ipr_cmd->ioarcb.read_data_transfer_length =
+		cpu_to_be32(SCSI_SENSE_BUFFERSIZE);
+
+	ipr_do_req(ipr_cmd, ipr_erp_done, ipr_timeout,
+		   IPR_REQUEST_SENSE_TIMEOUT * 2);
+}
+
+/**
+ * ipr_erp_cancel_all - Send cancel all to a device
+ * @ipr_cmd:	ipr command struct
+ *
+ * This function sends a cancel all to a device to clear the
+ * queue. If we are running TCQ on the device, QERR is set to 1,
+ * which means all outstanding ops have been dropped on the floor.
+ * Cancel all will return them to us.
+ *
+ * Return value:
+ * 	nothing
+ **/
+static void ipr_erp_cancel_all(struct ipr_cmnd *ipr_cmd)
+{
+	struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd;
+	struct ipr_resource_entry *res = scsi_cmd->device->hostdata;
+	struct ipr_cmd_pkt *cmd_pkt;
+
+	res->in_erp = 1;
+
+	ipr_reinit_ipr_cmnd_for_erp(ipr_cmd);
+
+	cmd_pkt = &ipr_cmd->ioarcb.cmd_pkt;
+	cmd_pkt->request_type = IPR_RQTYPE_IOACMD;
+	cmd_pkt->cdb[0] = IPR_CANCEL_ALL_REQUESTS;
+
+	ipr_do_req(ipr_cmd, ipr_erp_request_sense, ipr_timeout,
+		   IPR_CANCEL_ALL_TIMEOUT);
+}
+
+/**
+ * ipr_dump_ioasa - Dump contents of IOASA
+ * @ioa_cfg:	ioa config struct
+ * @ipr_cmd:	ipr command struct
+ *
+ * This function is invoked by the interrupt handler when ops
+ * fail. It will log the IOASA if appropriate. Only called
+ * for GPDD ops.
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_dump_ioasa(struct ipr_ioa_cfg *ioa_cfg,
+			   struct ipr_cmnd *ipr_cmd)
+{
+	int i;
+	u16 data_len;
+	u32 ioasc;
+	struct ipr_ioasa *ioasa = &ipr_cmd->ioasa;
+	u32 *ioasa_data = (u32 *)ioasa;
+	int error_index;
+
+	ioasc = be32_to_cpu(ioasa->ioasc) & IPR_IOASC_IOASC_MASK;
+
+	if (0 == ioasc)
+		return;
+
+	if (ioa_cfg->log_level < IPR_DEFAULT_LOG_LEVEL)
+		return;
+
+	error_index = ipr_get_error(ioasc);
+
+	if (ioa_cfg->log_level < IPR_MAX_LOG_LEVEL) {
+		/* Don't log an error if the IOA already logged one */
+		if (ioasa->ilid != 0)
+			return;
+
+		if (ipr_error_table[error_index].log_ioasa == 0)
+			return;
+	}
+
+	ipr_sdev_err(ipr_cmd->scsi_cmd->device, "%s\n",
+		     ipr_error_table[error_index].error);
+
+	if ((ioasa->gpdd.device_end_state <= ARRAY_SIZE(ipr_gpdd_dev_end_states)) &&
+	    (ioasa->gpdd.device_bus_phase <= ARRAY_SIZE(ipr_gpdd_dev_bus_phases))) {
+		ipr_sdev_err(ipr_cmd->scsi_cmd->device,
+			     "Device End state: %s Phase: %s\n",
+			     ipr_gpdd_dev_end_states[ioasa->gpdd.device_end_state],
+			     ipr_gpdd_dev_bus_phases[ioasa->gpdd.device_bus_phase]);
+	}
+
+	if (sizeof(struct ipr_ioasa) < be16_to_cpu(ioasa->ret_stat_len))
+		data_len = sizeof(struct ipr_ioasa);
+	else
+		data_len = be16_to_cpu(ioasa->ret_stat_len);
+
+	ipr_err("IOASA Dump:\n");
+
+	for (i = 0; i < data_len / 4; i += 4) {
+		ipr_err("%08X: %08X %08X %08X %08X\n", i*4,
+			be32_to_cpu(ioasa_data[i]),
+			be32_to_cpu(ioasa_data[i+1]),
+			be32_to_cpu(ioasa_data[i+2]),
+			be32_to_cpu(ioasa_data[i+3]));
+	}
+}
+
+/**
+ * ipr_gen_sense - Generate SCSI sense data from an IOASA
+ * @ioasa:		IOASA
+ * @sense_buf:	sense data buffer
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_gen_sense(struct ipr_cmnd *ipr_cmd)
+{
+	u32 failing_lba;
+	u8 *sense_buf = ipr_cmd->scsi_cmd->sense_buffer;
+	struct ipr_resource_entry *res = ipr_cmd->scsi_cmd->device->hostdata;
+	struct ipr_ioasa *ioasa = &ipr_cmd->ioasa;
+	u32 ioasc = be32_to_cpu(ioasa->ioasc);
+
+	memset(sense_buf, 0, SCSI_SENSE_BUFFERSIZE);
+
+	if (ioasc >= IPR_FIRST_DRIVER_IOASC)
+		return;
+
+	ipr_cmd->scsi_cmd->result = SAM_STAT_CHECK_CONDITION;
+
+	if (ipr_is_vset_device(res) &&
+	    ioasc == IPR_IOASC_MED_DO_NOT_REALLOC &&
+	    ioasa->vset.failing_lba_hi != 0) {
+		sense_buf[0] = 0x72;
+		sense_buf[1] = IPR_IOASC_SENSE_KEY(ioasc);
+		sense_buf[2] = IPR_IOASC_SENSE_CODE(ioasc);
+		sense_buf[3] = IPR_IOASC_SENSE_QUAL(ioasc);
+
+		sense_buf[7] = 12;
+		sense_buf[8] = 0;
+		sense_buf[9] = 0x0A;
+		sense_buf[10] = 0x80;
+
+		failing_lba = be32_to_cpu(ioasa->vset.failing_lba_hi);
+
+		sense_buf[12] = (failing_lba & 0xff000000) >> 24;
+		sense_buf[13] = (failing_lba & 0x00ff0000) >> 16;
+		sense_buf[14] = (failing_lba & 0x0000ff00) >> 8;
+		sense_buf[15] = failing_lba & 0x000000ff;
+
+		failing_lba = be32_to_cpu(ioasa->vset.failing_lba_lo);
+
+		sense_buf[16] = (failing_lba & 0xff000000) >> 24;
+		sense_buf[17] = (failing_lba & 0x00ff0000) >> 16;
+		sense_buf[18] = (failing_lba & 0x0000ff00) >> 8;
+		sense_buf[19] = failing_lba & 0x000000ff;
+	} else {
+		sense_buf[0] = 0x70;
+		sense_buf[2] = IPR_IOASC_SENSE_KEY(ioasc);
+		sense_buf[12] = IPR_IOASC_SENSE_CODE(ioasc);
+		sense_buf[13] = IPR_IOASC_SENSE_QUAL(ioasc);
+
+		/* Illegal request */
+		if ((IPR_IOASC_SENSE_KEY(ioasc) == 0x05) &&
+		    (be32_to_cpu(ioasa->ioasc_specific) & IPR_FIELD_POINTER_VALID)) {
+			sense_buf[7] = 10;	/* additional length */
+
+			/* IOARCB was in error */
+			if (IPR_IOASC_SENSE_CODE(ioasc) == 0x24)
+				sense_buf[15] = 0xC0;
+			else	/* Parameter data was invalid */
+				sense_buf[15] = 0x80;
+
+			sense_buf[16] =
+			    ((IPR_FIELD_POINTER_MASK &
+			      be32_to_cpu(ioasa->ioasc_specific)) >> 8) & 0xff;
+			sense_buf[17] =
+			    (IPR_FIELD_POINTER_MASK &
+			     be32_to_cpu(ioasa->ioasc_specific)) & 0xff;
+		} else {
+			if (ioasc == IPR_IOASC_MED_DO_NOT_REALLOC) {
+				if (ipr_is_vset_device(res))
+					failing_lba = be32_to_cpu(ioasa->vset.failing_lba_lo);
+				else
+					failing_lba = be32_to_cpu(ioasa->dasd.failing_lba);
+
+				sense_buf[0] |= 0x80;	/* Or in the Valid bit */
+				sense_buf[3] = (failing_lba & 0xff000000) >> 24;
+				sense_buf[4] = (failing_lba & 0x00ff0000) >> 16;
+				sense_buf[5] = (failing_lba & 0x0000ff00) >> 8;
+				sense_buf[6] = failing_lba & 0x000000ff;
+			}
+
+			sense_buf[7] = 6;	/* additional length */
+		}
+	}
+}
+
+/**
+ * ipr_erp_start - Process an error response for a SCSI op
+ * @ioa_cfg:	ioa config struct
+ * @ipr_cmd:	ipr command struct
+ *
+ * This function determines whether or not to initiate ERP
+ * on the affected device.
+ *
+ * Return value:
+ * 	nothing
+ **/
+static void ipr_erp_start(struct ipr_ioa_cfg *ioa_cfg,
+			      struct ipr_cmnd *ipr_cmd)
+{
+	struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd;
+	struct ipr_resource_entry *res = scsi_cmd->device->hostdata;
+	u32 ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc);
+
+	if (!res) {
+		ipr_scsi_eh_done(ipr_cmd);
+		return;
+	}
+
+	if (ipr_is_gscsi(res))
+		ipr_dump_ioasa(ioa_cfg, ipr_cmd);
+	else
+		ipr_gen_sense(ipr_cmd);
+
+	switch (ioasc & IPR_IOASC_IOASC_MASK) {
+	case IPR_IOASC_ABORTED_CMD_TERM_BY_HOST:
+		scsi_cmd->result |= (DID_ERROR << 16);
+		break;
+	case IPR_IOASC_IR_RESOURCE_HANDLE:
+		scsi_cmd->result |= (DID_NO_CONNECT << 16);
+		break;
+	case IPR_IOASC_HW_SEL_TIMEOUT:
+		scsi_cmd->result |= (DID_NO_CONNECT << 16);
+		res->needs_sync_complete = 1;
+		break;
+	case IPR_IOASC_SYNC_REQUIRED:
+		if (!res->in_erp)
+			res->needs_sync_complete = 1;
+		scsi_cmd->result |= (DID_IMM_RETRY << 16);
+		break;
+	case IPR_IOASC_MED_DO_NOT_REALLOC: /* prevent retries */
+		scsi_cmd->result |= (DID_PASSTHROUGH << 16);
+		break;
+	case IPR_IOASC_BUS_WAS_RESET:
+	case IPR_IOASC_BUS_WAS_RESET_BY_OTHER:
+		/*
+		 * Report the bus reset and ask for a retry. The device
+		 * will give CC/UA the next command.
+		 */
+		if (!res->resetting_device)
+			scsi_report_bus_reset(ioa_cfg->host, scsi_cmd->device->channel);
+		scsi_cmd->result |= (DID_ERROR << 16);
+		res->needs_sync_complete = 1;
+		break;
+	case IPR_IOASC_HW_DEV_BUS_STATUS:
+		scsi_cmd->result |= IPR_IOASC_SENSE_STATUS(ioasc);
+		if (IPR_IOASC_SENSE_STATUS(ioasc) == SAM_STAT_CHECK_CONDITION) {
+			ipr_erp_cancel_all(ipr_cmd);
+			return;
+		}
+		break;
+	case IPR_IOASC_NR_INIT_CMD_REQUIRED:
+		break;
+	default:
+		scsi_cmd->result |= (DID_ERROR << 16);
+		if (!ipr_is_vset_device(res))
+			res->needs_sync_complete = 1;
+		break;
+	}
+
+	ipr_unmap_sglist(ioa_cfg, ipr_cmd);
+	list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
+	scsi_cmd->scsi_done(scsi_cmd);
+}
+
+/**
+ * ipr_scsi_done - mid-layer done function
+ * @ipr_cmd:	ipr command struct
+ *
+ * This function is invoked by the interrupt handler for
+ * ops generated by the SCSI mid-layer
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_scsi_done(struct ipr_cmnd *ipr_cmd)
+{
+	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
+	struct scsi_cmnd *scsi_cmd = ipr_cmd->scsi_cmd;
+	u32 ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc);
+
+	scsi_cmd->resid = be32_to_cpu(ipr_cmd->ioasa.residual_data_len);
+
+	if (likely(IPR_IOASC_SENSE_KEY(ioasc) == 0)) {
+		ipr_unmap_sglist(ioa_cfg, ipr_cmd);
+		list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
+		scsi_cmd->scsi_done(scsi_cmd);
+	} else
+		ipr_erp_start(ioa_cfg, ipr_cmd);
+}
+
+/**
+ * ipr_save_ioafp_mode_select - Save adapters mode select data
+ * @ioa_cfg:	ioa config struct
+ * @scsi_cmd:	scsi command struct
+ *
+ * This function saves mode select data for the adapter to
+ * use following an adapter reset.
+ *
+ * Return value:
+ *	0 on success / SCSI_MLQUEUE_HOST_BUSY on failure
+ **/
+static int ipr_save_ioafp_mode_select(struct ipr_ioa_cfg *ioa_cfg,
+				       struct scsi_cmnd *scsi_cmd)
+{
+	if (!ioa_cfg->saved_mode_pages) {
+		ioa_cfg->saved_mode_pages  = kmalloc(sizeof(struct ipr_mode_pages),
+						     GFP_ATOMIC);
+		if (!ioa_cfg->saved_mode_pages) {
+			dev_err(&ioa_cfg->pdev->dev,
+				"IOA mode select buffer allocation failed\n");
+			return SCSI_MLQUEUE_HOST_BUSY;
+		}
+	}
+
+	memcpy(ioa_cfg->saved_mode_pages, scsi_cmd->buffer, scsi_cmd->cmnd[4]);
+	ioa_cfg->saved_mode_page_len = scsi_cmd->cmnd[4];
+	return 0;
+}
+
+/**
+ * ipr_queuecommand - Queue a mid-layer request
+ * @scsi_cmd:	scsi command struct
+ * @done:		done function
+ *
+ * This function queues a request generated by the mid-layer.
+ *
+ * Return value:
+ *	0 on success
+ *	SCSI_MLQUEUE_DEVICE_BUSY if device is busy
+ *	SCSI_MLQUEUE_HOST_BUSY if host is busy
+ **/
+static int ipr_queuecommand(struct scsi_cmnd *scsi_cmd,
+			    void (*done) (struct scsi_cmnd *))
+{
+	struct ipr_ioa_cfg *ioa_cfg;
+	struct ipr_resource_entry *res;
+	struct ipr_ioarcb *ioarcb;
+	struct ipr_cmnd *ipr_cmd;
+	int rc = 0;
+
+	scsi_cmd->scsi_done = done;
+	ioa_cfg = (struct ipr_ioa_cfg *)scsi_cmd->device->host->hostdata;
+	res = scsi_cmd->device->hostdata;
+	scsi_cmd->result = (DID_OK << 16);
+
+	/*
+	 * We are currently blocking all devices due to a host reset
+	 * We have told the host to stop giving us new requests, but
+	 * ERP ops don't count. FIXME
+	 */
+	if (unlikely(!ioa_cfg->allow_cmds))
+		return SCSI_MLQUEUE_HOST_BUSY;
+
+	/*
+	 * FIXME - Create scsi_set_host_offline interface
+	 *  and the ioa_is_dead check can be removed
+	 */
+	if (unlikely(ioa_cfg->ioa_is_dead || !res)) {
+		memset(scsi_cmd->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE);
+		scsi_cmd->result = (DID_NO_CONNECT << 16);
+		scsi_cmd->scsi_done(scsi_cmd);
+		return 0;
+	}
+
+	ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg);
+	ioarcb = &ipr_cmd->ioarcb;
+	list_add_tail(&ipr_cmd->queue, &ioa_cfg->pending_q);
+
+	memcpy(ioarcb->cmd_pkt.cdb, scsi_cmd->cmnd, scsi_cmd->cmd_len);
+	ipr_cmd->scsi_cmd = scsi_cmd;
+	ioarcb->res_handle = res->cfgte.res_handle;
+	ipr_cmd->done = ipr_scsi_done;
+	ipr_trc_hook(ipr_cmd, IPR_TRACE_START, IPR_GET_PHYS_LOC(res->cfgte.res_addr));
+
+	if (ipr_is_gscsi(res) || ipr_is_vset_device(res)) {
+		if (scsi_cmd->underflow == 0)
+			ioarcb->cmd_pkt.flags_hi |= IPR_FLAGS_HI_NO_ULEN_CHK;
+
+		if (res->needs_sync_complete) {
+			ioarcb->cmd_pkt.flags_hi |= IPR_FLAGS_HI_SYNC_COMPLETE;
+			res->needs_sync_complete = 0;
+		}
+
+		ioarcb->cmd_pkt.flags_hi |= IPR_FLAGS_HI_NO_LINK_DESC;
+		ioarcb->cmd_pkt.flags_lo |= IPR_FLAGS_LO_DELAY_AFTER_RST;
+		ioarcb->cmd_pkt.flags_lo |= IPR_FLAGS_LO_ALIGNED_BFR;
+		ioarcb->cmd_pkt.flags_lo |= ipr_get_task_attributes(scsi_cmd);
+	}
+
+	if (!ipr_is_gscsi(res) && scsi_cmd->cmnd[0] >= 0xC0)
+		ioarcb->cmd_pkt.request_type = IPR_RQTYPE_IOACMD;
+
+	if (ipr_is_ioa_resource(res) && scsi_cmd->cmnd[0] == MODE_SELECT)
+		rc = ipr_save_ioafp_mode_select(ioa_cfg, scsi_cmd);
+
+	if (likely(rc == 0))
+		rc = ipr_build_ioadl(ioa_cfg, ipr_cmd);
+
+	if (likely(rc == 0)) {
+		mb();
+		writel(be32_to_cpu(ipr_cmd->ioarcb.ioarcb_host_pci_addr),
+		       ioa_cfg->regs.ioarrin_reg);
+	} else {
+		 list_move_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
+		 return SCSI_MLQUEUE_HOST_BUSY;
+	}
+
+	return 0;
+}
+
+/**
+ * ipr_info - Get information about the card/driver
+ * @scsi_host:	scsi host struct
+ *
+ * Return value:
+ * 	pointer to buffer with description string
+ **/
+static const char * ipr_ioa_info(struct Scsi_Host *host)
+{
+	static char buffer[512];
+	struct ipr_ioa_cfg *ioa_cfg;
+	unsigned long lock_flags = 0;
+
+	ioa_cfg = (struct ipr_ioa_cfg *) host->hostdata;
+
+	spin_lock_irqsave(host->host_lock, lock_flags);
+	sprintf(buffer, "IBM %X Storage Adapter", ioa_cfg->type);
+	spin_unlock_irqrestore(host->host_lock, lock_flags);
+
+	return buffer;
+}
+
+static struct scsi_host_template driver_template = {
+	.module = THIS_MODULE,
+	.name = "IPR",
+	.info = ipr_ioa_info,
+	.queuecommand = ipr_queuecommand,
+	.eh_abort_handler = ipr_eh_abort,
+	.eh_device_reset_handler = ipr_eh_dev_reset,
+	.eh_host_reset_handler = ipr_eh_host_reset,
+	.slave_alloc = ipr_slave_alloc,
+	.slave_configure = ipr_slave_configure,
+	.slave_destroy = ipr_slave_destroy,
+	.bios_param = ipr_biosparam,
+	.can_queue = IPR_MAX_COMMANDS,
+	.this_id = -1,
+	.sg_tablesize = IPR_MAX_SGLIST,
+	.max_sectors = IPR_MAX_SECTORS,
+	.cmd_per_lun = IPR_MAX_CMD_PER_LUN,
+	.use_clustering = ENABLE_CLUSTERING,
+	.shost_attrs = ipr_ioa_attrs,
+	.sdev_attrs = ipr_dev_attrs,
+	.proc_name = IPR_NAME
+};
+
+#ifdef CONFIG_PPC_PSERIES
+static const u16 ipr_blocked_processors[] = {
+	PV_NORTHSTAR,
+	PV_PULSAR,
+	PV_POWER4,
+	PV_ICESTAR,
+	PV_SSTAR,
+	PV_POWER4p,
+	PV_630,
+	PV_630p
+};
+
+/**
+ * ipr_invalid_adapter - Determine if this adapter is supported on this hardware
+ * @ioa_cfg:	ioa cfg struct
+ *
+ * Adapters that use Gemstone revision < 3.1 do not work reliably on
+ * certain pSeries hardware. This function determines if the given
+ * adapter is in one of these confgurations or not.
+ *
+ * Return value:
+ * 	1 if adapter is not supported / 0 if adapter is supported
+ **/
+static int ipr_invalid_adapter(struct ipr_ioa_cfg *ioa_cfg)
+{
+	u8 rev_id;
+	int i;
+
+	if (ioa_cfg->type == 0x5702) {
+		if (pci_read_config_byte(ioa_cfg->pdev, PCI_REVISION_ID,
+					 &rev_id) == PCIBIOS_SUCCESSFUL) {
+			if (rev_id < 4) {
+				for (i = 0; i < ARRAY_SIZE(ipr_blocked_processors); i++){
+					if (__is_processor(ipr_blocked_processors[i]))
+						return 1;
+				}
+			}
+		}
+	}
+	return 0;
+}
+#else
+#define ipr_invalid_adapter(ioa_cfg) 0
+#endif
+
+/**
+ * ipr_ioa_bringdown_done - IOA bring down completion.
+ * @ipr_cmd:	ipr command struct
+ *
+ * This function processes the completion of an adapter bring down.
+ * It wakes any reset sleepers.
+ *
+ * Return value:
+ * 	IPR_RC_JOB_RETURN
+ **/
+static int ipr_ioa_bringdown_done(struct ipr_cmnd *ipr_cmd)
+{
+	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
+
+	ENTER;
+	ioa_cfg->in_reset_reload = 0;
+	ioa_cfg->reset_retries = 0;
+	list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
+	wake_up_all(&ioa_cfg->reset_wait_q);
+
+	spin_unlock_irq(ioa_cfg->host->host_lock);
+	scsi_unblock_requests(ioa_cfg->host);
+	spin_lock_irq(ioa_cfg->host->host_lock);
+	LEAVE;
+
+	return IPR_RC_JOB_RETURN;
+}
+
+/**
+ * ipr_ioa_reset_done - IOA reset completion.
+ * @ipr_cmd:	ipr command struct
+ *
+ * This function processes the completion of an adapter reset.
+ * It schedules any necessary mid-layer add/removes and
+ * wakes any reset sleepers.
+ *
+ * Return value:
+ * 	IPR_RC_JOB_RETURN
+ **/
+static int ipr_ioa_reset_done(struct ipr_cmnd *ipr_cmd)
+{
+	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
+	struct ipr_resource_entry *res;
+	struct ipr_hostrcb *hostrcb, *temp;
+	int i = 0;
+
+	ENTER;
+	ioa_cfg->in_reset_reload = 0;
+	ioa_cfg->allow_cmds = 1;
+	ioa_cfg->reset_cmd = NULL;
+
+	list_for_each_entry(res, &ioa_cfg->used_res_q, queue) {
+		if (ioa_cfg->allow_ml_add_del && (res->add_to_ml || res->del_from_ml)) {
+			ipr_trace;
+			schedule_work(&ioa_cfg->work_q);
+			break;
+		}
+	}
+
+	list_for_each_entry_safe(hostrcb, temp, &ioa_cfg->hostrcb_free_q, queue) {
+		list_del(&hostrcb->queue);
+		if (i++ < IPR_NUM_LOG_HCAMS)
+			ipr_send_hcam(ioa_cfg, IPR_HCAM_CDB_OP_CODE_LOG_DATA, hostrcb);
+		else
+			ipr_send_hcam(ioa_cfg, IPR_HCAM_CDB_OP_CODE_CONFIG_CHANGE, hostrcb);
+	}
+
+	dev_info(&ioa_cfg->pdev->dev, "IOA initialized.\n");
+
+	ioa_cfg->reset_retries = 0;
+	list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
+	wake_up_all(&ioa_cfg->reset_wait_q);
+
+	spin_unlock_irq(ioa_cfg->host->host_lock);
+	scsi_unblock_requests(ioa_cfg->host);
+	spin_lock_irq(ioa_cfg->host->host_lock);
+
+	if (!ioa_cfg->allow_cmds)
+		scsi_block_requests(ioa_cfg->host);
+
+	LEAVE;
+	return IPR_RC_JOB_RETURN;
+}
+
+/**
+ * ipr_set_sup_dev_dflt - Initialize a Set Supported Device buffer
+ * @supported_dev:	supported device struct
+ * @vpids:			vendor product id struct
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_set_sup_dev_dflt(struct ipr_supported_device *supported_dev,
+				 struct ipr_std_inq_vpids *vpids)
+{
+	memset(supported_dev, 0, sizeof(struct ipr_supported_device));
+	memcpy(&supported_dev->vpids, vpids, sizeof(struct ipr_std_inq_vpids));
+	supported_dev->num_records = 1;
+	supported_dev->data_length =
+		cpu_to_be16(sizeof(struct ipr_supported_device));
+	supported_dev->reserved = 0;
+}
+
+/**
+ * ipr_set_supported_devs - Send Set Supported Devices for a device
+ * @ipr_cmd:	ipr command struct
+ *
+ * This function send a Set Supported Devices to the adapter
+ *
+ * Return value:
+ * 	IPR_RC_JOB_CONTINUE / IPR_RC_JOB_RETURN
+ **/
+static int ipr_set_supported_devs(struct ipr_cmnd *ipr_cmd)
+{
+	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
+	struct ipr_supported_device *supp_dev = &ioa_cfg->vpd_cbs->supp_dev;
+	struct ipr_ioadl_desc *ioadl = ipr_cmd->ioadl;
+	struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb;
+	struct ipr_resource_entry *res = ipr_cmd->res;
+
+	ipr_cmd->job_step = ipr_ioa_reset_done;
+
+	list_for_each_entry_continue(res, &ioa_cfg->used_res_q, queue) {
+		if (!ipr_is_af_dasd_device(res))
+			continue;
+
+		ipr_cmd->res = res;
+		ipr_set_sup_dev_dflt(supp_dev, &res->cfgte.std_inq_data.vpids);
+
+		ioarcb->res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE);
+		ioarcb->cmd_pkt.flags_hi |= IPR_FLAGS_HI_WRITE_NOT_READ;
+		ioarcb->cmd_pkt.request_type = IPR_RQTYPE_IOACMD;
+
+		ioarcb->cmd_pkt.cdb[0] = IPR_SET_SUPPORTED_DEVICES;
+		ioarcb->cmd_pkt.cdb[7] = (sizeof(struct ipr_supported_device) >> 8) & 0xff;
+		ioarcb->cmd_pkt.cdb[8] = sizeof(struct ipr_supported_device) & 0xff;
+
+		ioadl->flags_and_data_len = cpu_to_be32(IPR_IOADL_FLAGS_WRITE_LAST |
+							sizeof(struct ipr_supported_device));
+		ioadl->address = cpu_to_be32(ioa_cfg->vpd_cbs_dma +
+					     offsetof(struct ipr_misc_cbs, supp_dev));
+		ioarcb->write_ioadl_len = cpu_to_be32(sizeof(struct ipr_ioadl_desc));
+		ioarcb->write_data_transfer_length =
+			cpu_to_be32(sizeof(struct ipr_supported_device));
+
+		ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout,
+			   IPR_SET_SUP_DEVICE_TIMEOUT);
+
+		ipr_cmd->job_step = ipr_set_supported_devs;
+		return IPR_RC_JOB_RETURN;
+	}
+
+	return IPR_RC_JOB_CONTINUE;
+}
+
+/**
+ * ipr_get_mode_page - Locate specified mode page
+ * @mode_pages:	mode page buffer
+ * @page_code:	page code to find
+ * @len:		minimum required length for mode page
+ *
+ * Return value:
+ * 	pointer to mode page / NULL on failure
+ **/
+static void *ipr_get_mode_page(struct ipr_mode_pages *mode_pages,
+			       u32 page_code, u32 len)
+{
+	struct ipr_mode_page_hdr *mode_hdr;
+	u32 page_length;
+	u32 length;
+
+	if (!mode_pages || (mode_pages->hdr.length == 0))
+		return NULL;
+
+	length = (mode_pages->hdr.length + 1) - 4 - mode_pages->hdr.block_desc_len;
+	mode_hdr = (struct ipr_mode_page_hdr *)
+		(mode_pages->data + mode_pages->hdr.block_desc_len);
+
+	while (length) {
+		if (IPR_GET_MODE_PAGE_CODE(mode_hdr) == page_code) {
+			if (mode_hdr->page_length >= (len - sizeof(struct ipr_mode_page_hdr)))
+				return mode_hdr;
+			break;
+		} else {
+			page_length = (sizeof(struct ipr_mode_page_hdr) +
+				       mode_hdr->page_length);
+			length -= page_length;
+			mode_hdr = (struct ipr_mode_page_hdr *)
+				((unsigned long)mode_hdr + page_length);
+		}
+	}
+	return NULL;
+}
+
+/**
+ * ipr_check_term_power - Check for term power errors
+ * @ioa_cfg:	ioa config struct
+ * @mode_pages:	IOAFP mode pages buffer
+ *
+ * Check the IOAFP's mode page 28 for term power errors
+ *
+ * Return value:
+ * 	nothing
+ **/
+static void ipr_check_term_power(struct ipr_ioa_cfg *ioa_cfg,
+				 struct ipr_mode_pages *mode_pages)
+{
+	int i;
+	int entry_length;
+	struct ipr_dev_bus_entry *bus;
+	struct ipr_mode_page28 *mode_page;
+
+	mode_page = ipr_get_mode_page(mode_pages, 0x28,
+				      sizeof(struct ipr_mode_page28));
+
+	entry_length = mode_page->entry_length;
+
+	bus = mode_page->bus;
+
+	for (i = 0; i < mode_page->num_entries; i++) {
+		if (bus->flags & IPR_SCSI_ATTR_NO_TERM_PWR) {
+			dev_err(&ioa_cfg->pdev->dev,
+				"Term power is absent on scsi bus %d\n",
+				bus->res_addr.bus);
+		}
+
+		bus = (struct ipr_dev_bus_entry *)((char *)bus + entry_length);
+	}
+}
+
+/**
+ * ipr_scsi_bus_speed_limit - Limit the SCSI speed based on SES table
+ * @ioa_cfg:	ioa config struct
+ *
+ * Looks through the config table checking for SES devices. If
+ * the SES device is in the SES table indicating a maximum SCSI
+ * bus speed, the speed is limited for the bus.
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_scsi_bus_speed_limit(struct ipr_ioa_cfg *ioa_cfg)
+{
+	u32 max_xfer_rate;
+	int i;
+
+	for (i = 0; i < IPR_MAX_NUM_BUSES; i++) {
+		max_xfer_rate = ipr_get_max_scsi_speed(ioa_cfg, i,
+						       ioa_cfg->bus_attr[i].bus_width);
+
+		if (max_xfer_rate < ioa_cfg->bus_attr[i].max_xfer_rate)
+			ioa_cfg->bus_attr[i].max_xfer_rate = max_xfer_rate;
+	}
+}
+
+/**
+ * ipr_modify_ioafp_mode_page_28 - Modify IOAFP Mode Page 28
+ * @ioa_cfg:	ioa config struct
+ * @mode_pages:	mode page 28 buffer
+ *
+ * Updates mode page 28 based on driver configuration
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_modify_ioafp_mode_page_28(struct ipr_ioa_cfg *ioa_cfg,
+					  	struct ipr_mode_pages *mode_pages)
+{
+	int i, entry_length;
+	struct ipr_dev_bus_entry *bus;
+	struct ipr_bus_attributes *bus_attr;
+	struct ipr_mode_page28 *mode_page;
+
+	mode_page = ipr_get_mode_page(mode_pages, 0x28,
+				      sizeof(struct ipr_mode_page28));
+
+	entry_length = mode_page->entry_length;
+
+	/* Loop for each device bus entry */
+	for (i = 0, bus = mode_page->bus;
+	     i < mode_page->num_entries;
+	     i++, bus = (struct ipr_dev_bus_entry *)((u8 *)bus + entry_length)) {
+		if (bus->res_addr.bus > IPR_MAX_NUM_BUSES) {
+			dev_err(&ioa_cfg->pdev->dev,
+				"Invalid resource address reported: 0x%08X\n",
+				IPR_GET_PHYS_LOC(bus->res_addr));
+			continue;
+		}
+
+		bus_attr = &ioa_cfg->bus_attr[i];
+		bus->extended_reset_delay = IPR_EXTENDED_RESET_DELAY;
+		bus->bus_width = bus_attr->bus_width;
+		bus->max_xfer_rate = cpu_to_be32(bus_attr->max_xfer_rate);
+		bus->flags &= ~IPR_SCSI_ATTR_QAS_MASK;
+		if (bus_attr->qas_enabled)
+			bus->flags |= IPR_SCSI_ATTR_ENABLE_QAS;
+		else
+			bus->flags |= IPR_SCSI_ATTR_DISABLE_QAS;
+	}
+}
+
+/**
+ * ipr_build_mode_select - Build a mode select command
+ * @ipr_cmd:	ipr command struct
+ * @res_handle:	resource handle to send command to
+ * @parm:		Byte 2 of Mode Sense command
+ * @dma_addr:	DMA buffer address
+ * @xfer_len:	data transfer length
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_build_mode_select(struct ipr_cmnd *ipr_cmd,
+				  u32 res_handle, u8 parm, u32 dma_addr,
+				  u8 xfer_len)
+{
+	struct ipr_ioadl_desc *ioadl = ipr_cmd->ioadl;
+	struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb;
+
+	ioarcb->res_handle = res_handle;
+	ioarcb->cmd_pkt.request_type = IPR_RQTYPE_SCSICDB;
+	ioarcb->cmd_pkt.flags_hi |= IPR_FLAGS_HI_WRITE_NOT_READ;
+	ioarcb->cmd_pkt.cdb[0] = MODE_SELECT;
+	ioarcb->cmd_pkt.cdb[1] = parm;
+	ioarcb->cmd_pkt.cdb[4] = xfer_len;
+
+	ioadl->flags_and_data_len =
+		cpu_to_be32(IPR_IOADL_FLAGS_WRITE_LAST | xfer_len);
+	ioadl->address = cpu_to_be32(dma_addr);
+	ioarcb->write_ioadl_len = cpu_to_be32(sizeof(struct ipr_ioadl_desc));
+	ioarcb->write_data_transfer_length = cpu_to_be32(xfer_len);
+}
+
+/**
+ * ipr_ioafp_mode_select_page28 - Issue Mode Select Page 28 to IOA
+ * @ipr_cmd:	ipr command struct
+ *
+ * This function sets up the SCSI bus attributes and sends
+ * a Mode Select for Page 28 to activate them.
+ *
+ * Return value:
+ * 	IPR_RC_JOB_RETURN
+ **/
+static int ipr_ioafp_mode_select_page28(struct ipr_cmnd *ipr_cmd)
+{
+	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
+	struct ipr_mode_pages *mode_pages = &ioa_cfg->vpd_cbs->mode_pages;
+	int length;
+
+	ENTER;
+	if (ioa_cfg->saved_mode_pages) {
+		memcpy(mode_pages, ioa_cfg->saved_mode_pages,
+		       ioa_cfg->saved_mode_page_len);
+		length = ioa_cfg->saved_mode_page_len;
+	} else {
+		ipr_scsi_bus_speed_limit(ioa_cfg);
+		ipr_check_term_power(ioa_cfg, mode_pages);
+		ipr_modify_ioafp_mode_page_28(ioa_cfg, mode_pages);
+		length = mode_pages->hdr.length + 1;
+		mode_pages->hdr.length = 0;
+	}
+
+	ipr_build_mode_select(ipr_cmd, cpu_to_be32(IPR_IOA_RES_HANDLE), 0x11,
+			      ioa_cfg->vpd_cbs_dma + offsetof(struct ipr_misc_cbs, mode_pages),
+			      length);
+
+	ipr_cmd->job_step = ipr_set_supported_devs;
+	ipr_cmd->res = list_entry(ioa_cfg->used_res_q.next,
+				  struct ipr_resource_entry, queue);
+
+	ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT);
+
+	LEAVE;
+	return IPR_RC_JOB_RETURN;
+}
+
+/**
+ * ipr_build_mode_sense - Builds a mode sense command
+ * @ipr_cmd:	ipr command struct
+ * @res:		resource entry struct
+ * @parm:		Byte 2 of mode sense command
+ * @dma_addr:	DMA address of mode sense buffer
+ * @xfer_len:	Size of DMA buffer
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_build_mode_sense(struct ipr_cmnd *ipr_cmd,
+				 u32 res_handle,
+				 u8 parm, u32 dma_addr, u8 xfer_len)
+{
+	struct ipr_ioadl_desc *ioadl = ipr_cmd->ioadl;
+	struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb;
+
+	ioarcb->res_handle = res_handle;
+	ioarcb->cmd_pkt.cdb[0] = MODE_SENSE;
+	ioarcb->cmd_pkt.cdb[2] = parm;
+	ioarcb->cmd_pkt.cdb[4] = xfer_len;
+	ioarcb->cmd_pkt.request_type = IPR_RQTYPE_SCSICDB;
+
+	ioadl->flags_and_data_len =
+		cpu_to_be32(IPR_IOADL_FLAGS_READ_LAST | xfer_len);
+	ioadl->address = cpu_to_be32(dma_addr);
+	ioarcb->read_ioadl_len = cpu_to_be32(sizeof(struct ipr_ioadl_desc));
+	ioarcb->read_data_transfer_length = cpu_to_be32(xfer_len);
+}
+
+/**
+ * ipr_ioafp_mode_sense_page28 - Issue Mode Sense Page 28 to IOA
+ * @ipr_cmd:	ipr command struct
+ *
+ * This function send a Page 28 mode sense to the IOA to
+ * retrieve SCSI bus attributes.
+ *
+ * Return value:
+ * 	IPR_RC_JOB_RETURN
+ **/
+static int ipr_ioafp_mode_sense_page28(struct ipr_cmnd *ipr_cmd)
+{
+	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
+
+	ENTER;
+	ipr_build_mode_sense(ipr_cmd, cpu_to_be32(IPR_IOA_RES_HANDLE),
+			     0x28, ioa_cfg->vpd_cbs_dma +
+			     offsetof(struct ipr_misc_cbs, mode_pages),
+			     sizeof(struct ipr_mode_pages));
+
+	ipr_cmd->job_step = ipr_ioafp_mode_select_page28;
+
+	ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT);
+
+	LEAVE;
+	return IPR_RC_JOB_RETURN;
+}
+
+/**
+ * ipr_init_res_table - Initialize the resource table
+ * @ipr_cmd:	ipr command struct
+ *
+ * This function looks through the existing resource table, comparing
+ * it with the config table. This function will take care of old/new
+ * devices and schedule adding/removing them from the mid-layer
+ * as appropriate.
+ *
+ * Return value:
+ * 	IPR_RC_JOB_CONTINUE
+ **/
+static int ipr_init_res_table(struct ipr_cmnd *ipr_cmd)
+{
+	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
+	struct ipr_resource_entry *res, *temp;
+	struct ipr_config_table_entry *cfgte;
+	int found, i;
+	LIST_HEAD(old_res);
+
+	ENTER;
+	if (ioa_cfg->cfg_table->hdr.flags & IPR_UCODE_DOWNLOAD_REQ)
+		dev_err(&ioa_cfg->pdev->dev, "Microcode download required\n");
+
+	list_for_each_entry_safe(res, temp, &ioa_cfg->used_res_q, queue)
+		list_move_tail(&res->queue, &old_res);
+
+	for (i = 0; i < ioa_cfg->cfg_table->hdr.num_entries; i++) {
+		cfgte = &ioa_cfg->cfg_table->dev[i];
+		found = 0;
+
+		list_for_each_entry_safe(res, temp, &old_res, queue) {
+			if (!memcmp(&res->cfgte.res_addr,
+				    &cfgte->res_addr, sizeof(cfgte->res_addr))) {
+				list_move_tail(&res->queue, &ioa_cfg->used_res_q);
+				found = 1;
+				break;
+			}
+		}
+
+		if (!found) {
+			if (list_empty(&ioa_cfg->free_res_q)) {
+				dev_err(&ioa_cfg->pdev->dev, "Too many devices attached\n");
+				break;
+			}
+
+			found = 1;
+			res = list_entry(ioa_cfg->free_res_q.next,
+					 struct ipr_resource_entry, queue);
+			list_move_tail(&res->queue, &ioa_cfg->used_res_q);
+			ipr_init_res_entry(res);
+			res->add_to_ml = 1;
+		}
+
+		if (found)
+			memcpy(&res->cfgte, cfgte, sizeof(struct ipr_config_table_entry));
+	}
+
+	list_for_each_entry_safe(res, temp, &old_res, queue) {
+		if (res->sdev) {
+			res->del_from_ml = 1;
+			list_move_tail(&res->queue, &ioa_cfg->used_res_q);
+		} else {
+			list_move_tail(&res->queue, &ioa_cfg->free_res_q);
+		}
+	}
+
+	ipr_cmd->job_step = ipr_ioafp_mode_sense_page28;
+
+	LEAVE;
+	return IPR_RC_JOB_CONTINUE;
+}
+
+/**
+ * ipr_ioafp_query_ioa_cfg - Send a Query IOA Config to the adapter.
+ * @ipr_cmd:	ipr command struct
+ *
+ * This function sends a Query IOA Configuration command
+ * to the adapter to retrieve the IOA configuration table.
+ *
+ * Return value:
+ * 	IPR_RC_JOB_RETURN
+ **/
+static int ipr_ioafp_query_ioa_cfg(struct ipr_cmnd *ipr_cmd)
+{
+	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
+	struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb;
+	struct ipr_ioadl_desc *ioadl = ipr_cmd->ioadl;
+	struct ipr_inquiry_page3 *ucode_vpd = &ioa_cfg->vpd_cbs->page3_data;
+
+	ENTER;
+	dev_info(&ioa_cfg->pdev->dev, "Adapter firmware version: %02X%02X%02X%02X\n",
+		 ucode_vpd->major_release, ucode_vpd->card_type,
+		 ucode_vpd->minor_release[0], ucode_vpd->minor_release[1]);
+	ioarcb->cmd_pkt.request_type = IPR_RQTYPE_IOACMD;
+	ioarcb->res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE);
+
+	ioarcb->cmd_pkt.cdb[0] = IPR_QUERY_IOA_CONFIG;
+	ioarcb->cmd_pkt.cdb[7] = (sizeof(struct ipr_config_table) >> 8) & 0xff;
+	ioarcb->cmd_pkt.cdb[8] = sizeof(struct ipr_config_table) & 0xff;
+
+	ioarcb->read_ioadl_len = cpu_to_be32(sizeof(struct ipr_ioadl_desc));
+	ioarcb->read_data_transfer_length =
+		cpu_to_be32(sizeof(struct ipr_config_table));
+
+	ioadl->address = cpu_to_be32(ioa_cfg->cfg_table_dma);
+	ioadl->flags_and_data_len =
+		cpu_to_be32(IPR_IOADL_FLAGS_READ_LAST | sizeof(struct ipr_config_table));
+
+	ipr_cmd->job_step = ipr_init_res_table;
+
+	ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT);
+
+	LEAVE;
+	return IPR_RC_JOB_RETURN;
+}
+
+/**
+ * ipr_ioafp_inquiry - Send an Inquiry to the adapter.
+ * @ipr_cmd:	ipr command struct
+ *
+ * This utility function sends an inquiry to the adapter.
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_ioafp_inquiry(struct ipr_cmnd *ipr_cmd, u8 flags, u8 page,
+			      u32 dma_addr, u8 xfer_len)
+{
+	struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb;
+	struct ipr_ioadl_desc *ioadl = ipr_cmd->ioadl;
+
+	ENTER;
+	ioarcb->cmd_pkt.request_type = IPR_RQTYPE_SCSICDB;
+	ioarcb->res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE);
+
+	ioarcb->cmd_pkt.cdb[0] = INQUIRY;
+	ioarcb->cmd_pkt.cdb[1] = flags;
+	ioarcb->cmd_pkt.cdb[2] = page;
+	ioarcb->cmd_pkt.cdb[4] = xfer_len;
+
+	ioarcb->read_ioadl_len = cpu_to_be32(sizeof(struct ipr_ioadl_desc));
+	ioarcb->read_data_transfer_length = cpu_to_be32(xfer_len);
+
+	ioadl->address = cpu_to_be32(dma_addr);
+	ioadl->flags_and_data_len =
+		cpu_to_be32(IPR_IOADL_FLAGS_READ_LAST | xfer_len);
+
+	ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT);
+	LEAVE;
+}
+
+/**
+ * ipr_ioafp_page3_inquiry - Send a Page 3 Inquiry to the adapter.
+ * @ipr_cmd:	ipr command struct
+ *
+ * This function sends a Page 3 inquiry to the adapter
+ * to retrieve software VPD information.
+ *
+ * Return value:
+ * 	IPR_RC_JOB_CONTINUE / IPR_RC_JOB_RETURN
+ **/
+static int ipr_ioafp_page3_inquiry(struct ipr_cmnd *ipr_cmd)
+{
+	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
+	char type[5];
+
+	ENTER;
+
+	/* Grab the type out of the VPD and store it away */
+	memcpy(type, ioa_cfg->vpd_cbs->ioa_vpd.std_inq_data.vpids.product_id, 4);
+	type[4] = '\0';
+	ioa_cfg->type = simple_strtoul((char *)type, NULL, 16);
+
+	ipr_cmd->job_step = ipr_ioafp_query_ioa_cfg;
+
+	ipr_ioafp_inquiry(ipr_cmd, 1, 3,
+			  ioa_cfg->vpd_cbs_dma + offsetof(struct ipr_misc_cbs, page3_data),
+			  sizeof(struct ipr_inquiry_page3));
+
+	LEAVE;
+	return IPR_RC_JOB_RETURN;
+}
+
+/**
+ * ipr_ioafp_std_inquiry - Send a Standard Inquiry to the adapter.
+ * @ipr_cmd:	ipr command struct
+ *
+ * This function sends a standard inquiry to the adapter.
+ *
+ * Return value:
+ * 	IPR_RC_JOB_RETURN
+ **/
+static int ipr_ioafp_std_inquiry(struct ipr_cmnd *ipr_cmd)
+{
+	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
+
+	ENTER;
+	ipr_cmd->job_step = ipr_ioafp_page3_inquiry;
+
+	ipr_ioafp_inquiry(ipr_cmd, 0, 0,
+			  ioa_cfg->vpd_cbs_dma + offsetof(struct ipr_misc_cbs, ioa_vpd),
+			  sizeof(struct ipr_ioa_vpd));
+
+	LEAVE;
+	return IPR_RC_JOB_RETURN;
+}
+
+/**
+ * ipr_ioafp_indentify_hrrq - Send Identify Host RRQ.
+ * @ipr_cmd:	ipr command struct
+ *
+ * This function send an Identify Host Request Response Queue
+ * command to establish the HRRQ with the adapter.
+ *
+ * Return value:
+ * 	IPR_RC_JOB_RETURN
+ **/
+static int ipr_ioafp_indentify_hrrq(struct ipr_cmnd *ipr_cmd)
+{
+	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
+	struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb;
+
+	ENTER;
+	dev_info(&ioa_cfg->pdev->dev, "Starting IOA initialization sequence.\n");
+
+	ioarcb->cmd_pkt.cdb[0] = IPR_ID_HOST_RR_Q;
+	ioarcb->res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE);
+
+	ioarcb->cmd_pkt.request_type = IPR_RQTYPE_IOACMD;
+	ioarcb->cmd_pkt.cdb[2] =
+		((u32) ioa_cfg->host_rrq_dma >> 24) & 0xff;
+	ioarcb->cmd_pkt.cdb[3] =
+		((u32) ioa_cfg->host_rrq_dma >> 16) & 0xff;
+	ioarcb->cmd_pkt.cdb[4] =
+		((u32) ioa_cfg->host_rrq_dma >> 8) & 0xff;
+	ioarcb->cmd_pkt.cdb[5] =
+		((u32) ioa_cfg->host_rrq_dma) & 0xff;
+	ioarcb->cmd_pkt.cdb[7] =
+		((sizeof(u32) * IPR_NUM_CMD_BLKS) >> 8) & 0xff;
+	ioarcb->cmd_pkt.cdb[8] =
+		(sizeof(u32) * IPR_NUM_CMD_BLKS) & 0xff;
+
+	ipr_cmd->job_step = ipr_ioafp_std_inquiry;
+
+	ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, IPR_INTERNAL_TIMEOUT);
+
+	LEAVE;
+	return IPR_RC_JOB_RETURN;
+}
+
+/**
+ * ipr_reset_timer_done - Adapter reset timer function
+ * @ipr_cmd:	ipr command struct
+ *
+ * Description: This function is used in adapter reset processing
+ * for timing events. If the reset_cmd pointer in the IOA
+ * config struct is not this adapter's we are doing nested
+ * resets and fail_all_ops will take care of freeing the
+ * command block.
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_reset_timer_done(struct ipr_cmnd *ipr_cmd)
+{
+	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
+	unsigned long lock_flags = 0;
+
+	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
+
+	if (ioa_cfg->reset_cmd == ipr_cmd) {
+		list_del(&ipr_cmd->queue);
+		ipr_cmd->done(ipr_cmd);
+	}
+
+	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+}
+
+/**
+ * ipr_reset_start_timer - Start a timer for adapter reset job
+ * @ipr_cmd:	ipr command struct
+ * @timeout:	timeout value
+ *
+ * Description: This function is used in adapter reset processing
+ * for timing events. If the reset_cmd pointer in the IOA
+ * config struct is not this adapter's we are doing nested
+ * resets and fail_all_ops will take care of freeing the
+ * command block.
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_reset_start_timer(struct ipr_cmnd *ipr_cmd,
+				  unsigned long timeout)
+{
+	list_add_tail(&ipr_cmd->queue, &ipr_cmd->ioa_cfg->pending_q);
+	ipr_cmd->done = ipr_reset_ioa_job;
+
+	ipr_cmd->timer.data = (unsigned long) ipr_cmd;
+	ipr_cmd->timer.expires = jiffies + timeout;
+	ipr_cmd->timer.function = (void (*)(unsigned long))ipr_reset_timer_done;
+	add_timer(&ipr_cmd->timer);
+}
+
+/**
+ * ipr_init_ioa_mem - Initialize ioa_cfg control block
+ * @ioa_cfg:	ioa cfg struct
+ *
+ * Return value:
+ * 	nothing
+ **/
+static void ipr_init_ioa_mem(struct ipr_ioa_cfg *ioa_cfg)
+{
+	memset(ioa_cfg->host_rrq, 0, sizeof(u32) * IPR_NUM_CMD_BLKS);
+
+	/* Initialize Host RRQ pointers */
+	ioa_cfg->hrrq_start = ioa_cfg->host_rrq;
+	ioa_cfg->hrrq_end = &ioa_cfg->host_rrq[IPR_NUM_CMD_BLKS - 1];
+	ioa_cfg->hrrq_curr = ioa_cfg->hrrq_start;
+	ioa_cfg->toggle_bit = 1;
+
+	/* Zero out config table */
+	memset(ioa_cfg->cfg_table, 0, sizeof(struct ipr_config_table));
+}
+
+/**
+ * ipr_reset_enable_ioa - Enable the IOA following a reset.
+ * @ipr_cmd:	ipr command struct
+ *
+ * This function reinitializes some control blocks and
+ * enables destructive diagnostics on the adapter.
+ *
+ * Return value:
+ * 	IPR_RC_JOB_RETURN
+ **/
+static int ipr_reset_enable_ioa(struct ipr_cmnd *ipr_cmd)
+{
+	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
+	volatile u32 int_reg;
+
+	ENTER;
+	ipr_cmd->job_step = ipr_ioafp_indentify_hrrq;
+	ipr_init_ioa_mem(ioa_cfg);
+
+	ioa_cfg->allow_interrupts = 1;
+	int_reg = readl(ioa_cfg->regs.sense_interrupt_reg);
+
+	if (int_reg & IPR_PCII_IOA_TRANS_TO_OPER) {
+		writel((IPR_PCII_ERROR_INTERRUPTS | IPR_PCII_HRRQ_UPDATED),
+		       ioa_cfg->regs.clr_interrupt_mask_reg);
+		int_reg = readl(ioa_cfg->regs.sense_interrupt_mask_reg);
+		return IPR_RC_JOB_CONTINUE;
+	}
+
+	/* Enable destructive diagnostics on IOA */
+	writel(IPR_DOORBELL, ioa_cfg->regs.set_uproc_interrupt_reg);
+
+	writel(IPR_PCII_OPER_INTERRUPTS, ioa_cfg->regs.clr_interrupt_mask_reg);
+	int_reg = readl(ioa_cfg->regs.sense_interrupt_mask_reg);
+
+	dev_info(&ioa_cfg->pdev->dev, "Initializing IOA.\n");
+
+	ipr_cmd->timer.data = (unsigned long) ipr_cmd;
+	ipr_cmd->timer.expires = jiffies + IPR_OPERATIONAL_TIMEOUT;
+	ipr_cmd->timer.function = (void (*)(unsigned long))ipr_timeout;
+	add_timer(&ipr_cmd->timer);
+
+	LEAVE;
+	return IPR_RC_JOB_RETURN;
+}
+
+/**
+ * ipr_reset_wait_for_dump - Wait for a dump to timeout.
+ * @ipr_cmd:	ipr command struct
+ *
+ * This function is invoked when an adapter dump has run out
+ * of processing time.
+ *
+ * Return value:
+ * 	IPR_RC_JOB_CONTINUE
+ **/
+static int ipr_reset_wait_for_dump(struct ipr_cmnd *ipr_cmd)
+{
+	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
+
+	if (ioa_cfg->sdt_state == GET_DUMP)
+		ioa_cfg->sdt_state = ABORT_DUMP;
+
+	ipr_cmd->job_step = ipr_reset_alert;
+
+	return IPR_RC_JOB_CONTINUE;
+}
+
+/**
+ * ipr_unit_check_no_data - Log a unit check/no data error log
+ * @ioa_cfg:		ioa config struct
+ *
+ * Logs an error indicating the adapter unit checked, but for some
+ * reason, we were unable to fetch the unit check buffer.
+ *
+ * Return value:
+ * 	nothing
+ **/
+static void ipr_unit_check_no_data(struct ipr_ioa_cfg *ioa_cfg)
+{
+	ioa_cfg->errors_logged++;
+	dev_err(&ioa_cfg->pdev->dev, "IOA unit check with no data\n");
+}
+
+/**
+ * ipr_get_unit_check_buffer - Get the unit check buffer from the IOA
+ * @ioa_cfg:		ioa config struct
+ *
+ * Fetches the unit check buffer from the adapter by clocking the data
+ * through the mailbox register.
+ *
+ * Return value:
+ * 	nothing
+ **/
+static void ipr_get_unit_check_buffer(struct ipr_ioa_cfg *ioa_cfg)
+{
+	unsigned long mailbox;
+	struct ipr_hostrcb *hostrcb;
+	struct ipr_uc_sdt sdt;
+	int rc, length;
+
+	mailbox = readl(ioa_cfg->ioa_mailbox);
+
+	if (!ipr_sdt_is_fmt2(mailbox)) {
+		ipr_unit_check_no_data(ioa_cfg);
+		return;
+	}
+
+	memset(&sdt, 0, sizeof(struct ipr_uc_sdt));
+	rc = ipr_get_ldump_data_section(ioa_cfg, mailbox, (u32 *) &sdt,
+					(sizeof(struct ipr_uc_sdt)) / sizeof(u32));
+
+	if (rc || (be32_to_cpu(sdt.hdr.state) != IPR_FMT2_SDT_READY_TO_USE) ||
+	    !(sdt.entry[0].flags & IPR_SDT_VALID_ENTRY)) {
+		ipr_unit_check_no_data(ioa_cfg);
+		return;
+	}
+
+	/* Find length of the first sdt entry (UC buffer) */
+	length = (be32_to_cpu(sdt.entry[0].end_offset) -
+		  be32_to_cpu(sdt.entry[0].bar_str_offset)) & IPR_FMT2_MBX_ADDR_MASK;
+
+	hostrcb = list_entry(ioa_cfg->hostrcb_free_q.next,
+			     struct ipr_hostrcb, queue);
+	list_del(&hostrcb->queue);
+	memset(hostrcb, 0, IPR_HOSTRCB_SZ);
+
+	rc = ipr_get_ldump_data_section(ioa_cfg,
+					be32_to_cpu(sdt.entry[0].bar_str_offset),
+					(u32 *)hostrcb,
+					min(length, (int)IPR_HOSTRCB_SZ) / sizeof(u32));
+
+	if (!rc)
+		ipr_handle_log_data(ioa_cfg, hostrcb);
+	else
+		ipr_unit_check_no_data(ioa_cfg);
+
+	list_add_tail(&hostrcb->queue, &ioa_cfg->hostrcb_free_q);
+}
+
+/**
+ * ipr_reset_restore_cfg_space - Restore PCI config space.
+ * @ipr_cmd:	ipr command struct
+ *
+ * Description: This function restores the saved PCI config space of
+ * the adapter, fails all outstanding ops back to the callers, and
+ * fetches the dump/unit check if applicable to this reset.
+ *
+ * Return value:
+ * 	IPR_RC_JOB_CONTINUE / IPR_RC_JOB_RETURN
+ **/
+static int ipr_reset_restore_cfg_space(struct ipr_cmnd *ipr_cmd)
+{
+	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
+	int rc;
+
+	ENTER;
+	rc = pci_restore_state(ioa_cfg->pdev, ioa_cfg->pci_cfg_buf);
+
+	if (rc != PCIBIOS_SUCCESSFUL) {
+		ipr_cmd->ioasa.ioasc = cpu_to_be32(IPR_IOASC_PCI_ACCESS_ERROR);
+		return IPR_RC_JOB_CONTINUE;
+	}
+
+	if (ipr_set_pcix_cmd_reg(ioa_cfg)) {
+		ipr_cmd->ioasa.ioasc = cpu_to_be32(IPR_IOASC_PCI_ACCESS_ERROR);
+		return IPR_RC_JOB_CONTINUE;
+	}
+
+	ipr_fail_all_ops(ioa_cfg);
+
+	if (ioa_cfg->ioa_unit_checked) {
+		ioa_cfg->ioa_unit_checked = 0;
+		ipr_get_unit_check_buffer(ioa_cfg);
+		ipr_cmd->job_step = ipr_reset_alert;
+		ipr_reset_start_timer(ipr_cmd, 0);
+		return IPR_RC_JOB_RETURN;
+	}
+
+	if (ioa_cfg->in_ioa_bringdown) {
+		ipr_cmd->job_step = ipr_ioa_bringdown_done;
+	} else {
+		ipr_cmd->job_step = ipr_reset_enable_ioa;
+
+		if (GET_DUMP == ioa_cfg->sdt_state) {
+			ipr_reset_start_timer(ipr_cmd, IPR_DUMP_TIMEOUT);
+			ipr_cmd->job_step = ipr_reset_wait_for_dump;
+			schedule_work(&ioa_cfg->work_q);
+			return IPR_RC_JOB_RETURN;
+		}
+	}
+
+	ENTER;
+	return IPR_RC_JOB_CONTINUE;
+}
+
+/**
+ * ipr_reset_start_bist - Run BIST on the adapter.
+ * @ipr_cmd:	ipr command struct
+ *
+ * Description: This function runs BIST on the adapter, then delays 2 seconds.
+ *
+ * Return value:
+ * 	IPR_RC_JOB_CONTINUE / IPR_RC_JOB_RETURN
+ **/
+static int ipr_reset_start_bist(struct ipr_cmnd *ipr_cmd)
+{
+	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
+	int rc;
+
+	ENTER;
+	rc = pci_write_config_byte(ioa_cfg->pdev, PCI_BIST, PCI_BIST_START);
+
+	if (rc != PCIBIOS_SUCCESSFUL) {
+		ipr_cmd->ioasa.ioasc = cpu_to_be32(IPR_IOASC_PCI_ACCESS_ERROR);
+		rc = IPR_RC_JOB_CONTINUE;
+	} else {
+		ipr_cmd->job_step = ipr_reset_restore_cfg_space;
+		ipr_reset_start_timer(ipr_cmd, IPR_WAIT_FOR_BIST_TIMEOUT);
+		rc = IPR_RC_JOB_RETURN;
+	}
+
+	LEAVE;
+	return rc;
+}
+
+/**
+ * ipr_reset_allowed - Query whether or not IOA can be reset
+ * @ioa_cfg:	ioa config struct
+ *
+ * Return value:
+ * 	0 if reset not allowed / non-zero if reset is allowed
+ **/
+static int ipr_reset_allowed(struct ipr_ioa_cfg *ioa_cfg)
+{
+	volatile u32 temp_reg;
+
+	temp_reg = readl(ioa_cfg->regs.sense_interrupt_reg);
+	return ((temp_reg & IPR_PCII_CRITICAL_OPERATION) == 0);
+}
+
+/**
+ * ipr_reset_wait_to_start_bist - Wait for permission to reset IOA.
+ * @ipr_cmd:	ipr command struct
+ *
+ * Description: This function waits for adapter permission to run BIST,
+ * then runs BIST. If the adapter does not give permission after a
+ * reasonable time, we will reset the adapter anyway. The impact of
+ * resetting the adapter without warning the adapter is the risk of
+ * losing the persistent error log on the adapter. If the adapter is
+ * reset while it is writing to the flash on the adapter, the flash
+ * segment will have bad ECC and be zeroed.
+ *
+ * Return value:
+ * 	IPR_RC_JOB_CONTINUE / IPR_RC_JOB_RETURN
+ **/
+static int ipr_reset_wait_to_start_bist(struct ipr_cmnd *ipr_cmd)
+{
+	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
+	int rc = IPR_RC_JOB_RETURN;
+
+	if (!ipr_reset_allowed(ioa_cfg) && ipr_cmd->time_left) {
+		ipr_cmd->time_left -= IPR_CHECK_FOR_RESET_TIMEOUT;
+		ipr_reset_start_timer(ipr_cmd, IPR_CHECK_FOR_RESET_TIMEOUT);
+	} else {
+		ipr_cmd->job_step = ipr_reset_start_bist;
+		rc = IPR_RC_JOB_CONTINUE;
+	}
+
+	return rc;
+}
+
+/**
+ * ipr_reset_alert_part2 - Alert the adapter of a pending reset
+ * @ipr_cmd:	ipr command struct
+ *
+ * Description: This function alerts the adapter that it will be reset.
+ * If memory space is not currently enabled, proceed directly
+ * to running BIST on the adapter. The timer must always be started
+ * so we guarantee we do not run BIST from ipr_isr.
+ *
+ * Return value:
+ * 	IPR_RC_JOB_RETURN
+ **/
+static int ipr_reset_alert(struct ipr_cmnd *ipr_cmd)
+{
+	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
+	u16 cmd_reg;
+	int rc;
+
+	ENTER;
+	rc = pci_read_config_word(ioa_cfg->pdev, PCI_COMMAND, &cmd_reg);
+
+	if ((rc == PCIBIOS_SUCCESSFUL) && (cmd_reg & PCI_COMMAND_MEMORY)) {
+		ipr_mask_and_clear_interrupts(ioa_cfg, ~0);
+		writel(IPR_UPROCI_RESET_ALERT, ioa_cfg->regs.set_uproc_interrupt_reg);
+		ipr_cmd->job_step = ipr_reset_wait_to_start_bist;
+	} else {
+		ipr_cmd->job_step = ipr_reset_start_bist;
+	}
+
+	ipr_cmd->time_left = IPR_WAIT_FOR_RESET_TIMEOUT;
+	ipr_reset_start_timer(ipr_cmd, IPR_CHECK_FOR_RESET_TIMEOUT);
+
+	LEAVE;
+	return IPR_RC_JOB_RETURN;
+}
+
+/**
+ * ipr_reset_ucode_download_done - Microcode download completion
+ * @ipr_cmd:	ipr command struct
+ *
+ * Description: This function unmaps the microcode download buffer.
+ *
+ * Return value:
+ * 	IPR_RC_JOB_CONTINUE
+ **/
+static int ipr_reset_ucode_download_done(struct ipr_cmnd *ipr_cmd)
+{
+	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
+	struct ipr_sglist *sglist = ioa_cfg->ucode_sglist;
+
+	pci_unmap_sg(ioa_cfg->pdev, sglist->scatterlist,
+		     sglist->num_sg, DMA_TO_DEVICE);
+
+	ipr_cmd->job_step = ipr_reset_alert;
+	return IPR_RC_JOB_CONTINUE;
+}
+
+/**
+ * ipr_reset_ucode_download - Download microcode to the adapter
+ * @ipr_cmd:	ipr command struct
+ *
+ * Description: This function checks to see if it there is microcode
+ * to download to the adapter. If there is, a download is performed.
+ *
+ * Return value:
+ * 	IPR_RC_JOB_CONTINUE / IPR_RC_JOB_RETURN
+ **/
+static int ipr_reset_ucode_download(struct ipr_cmnd *ipr_cmd)
+{
+	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
+	struct ipr_sglist *sglist = ioa_cfg->ucode_sglist;
+
+	ENTER;
+	ipr_cmd->job_step = ipr_reset_alert;
+
+	if (!sglist)
+		return IPR_RC_JOB_CONTINUE;
+
+	ipr_cmd->ioarcb.res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE);
+	ipr_cmd->ioarcb.cmd_pkt.request_type = IPR_RQTYPE_SCSICDB;
+	ipr_cmd->ioarcb.cmd_pkt.cdb[0] = WRITE_BUFFER;
+	ipr_cmd->ioarcb.cmd_pkt.cdb[1] = IPR_WR_BUF_DOWNLOAD_AND_SAVE;
+	ipr_cmd->ioarcb.cmd_pkt.cdb[6] = (sglist->buffer_len & 0xff0000) >> 16;
+	ipr_cmd->ioarcb.cmd_pkt.cdb[7] = (sglist->buffer_len & 0x00ff00) >> 8;
+	ipr_cmd->ioarcb.cmd_pkt.cdb[8] = sglist->buffer_len & 0x0000ff;
+
+	if (ipr_map_ucode_buffer(ipr_cmd, sglist, sglist->buffer_len)) {
+		dev_err(&ioa_cfg->pdev->dev,
+			"Failed to map microcode download buffer\n");
+		return IPR_RC_JOB_CONTINUE;
+	}
+
+	ipr_cmd->job_step = ipr_reset_ucode_download_done;
+
+	ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout,
+		   IPR_WRITE_BUFFER_TIMEOUT);
+
+	LEAVE;
+	return IPR_RC_JOB_RETURN;
+}
+
+/**
+ * ipr_reset_shutdown_ioa - Shutdown the adapter
+ * @ipr_cmd:	ipr command struct
+ *
+ * Description: This function issues an adapter shutdown of the
+ * specified type to the specified adapter as part of the
+ * adapter reset job.
+ *
+ * Return value:
+ * 	IPR_RC_JOB_CONTINUE / IPR_RC_JOB_RETURN
+ **/
+static int ipr_reset_shutdown_ioa(struct ipr_cmnd *ipr_cmd)
+{
+	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
+	enum ipr_shutdown_type shutdown_type = ipr_cmd->shutdown_type;
+	unsigned long timeout;
+	int rc = IPR_RC_JOB_CONTINUE;
+
+	ENTER;
+	if (shutdown_type != IPR_SHUTDOWN_NONE && !ioa_cfg->ioa_is_dead) {
+		ipr_cmd->ioarcb.res_handle = cpu_to_be32(IPR_IOA_RES_HANDLE);
+		ipr_cmd->ioarcb.cmd_pkt.request_type = IPR_RQTYPE_IOACMD;
+		ipr_cmd->ioarcb.cmd_pkt.cdb[0] = IPR_IOA_SHUTDOWN;
+		ipr_cmd->ioarcb.cmd_pkt.cdb[1] = shutdown_type;
+
+		if (shutdown_type == IPR_SHUTDOWN_ABBREV)
+			timeout = IPR_ABBREV_SHUTDOWN_TIMEOUT;
+		else if (shutdown_type == IPR_SHUTDOWN_PREPARE_FOR_NORMAL)
+			timeout = IPR_INTERNAL_TIMEOUT;
+		else
+			timeout = IPR_SHUTDOWN_TIMEOUT;
+
+		ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout, timeout);
+
+		rc = IPR_RC_JOB_RETURN;
+		ipr_cmd->job_step = ipr_reset_ucode_download;
+	} else
+		ipr_cmd->job_step = ipr_reset_alert;
+
+	LEAVE;
+	return rc;
+}
+
+/**
+ * ipr_reset_ioa_job - Adapter reset job
+ * @ipr_cmd:	ipr command struct
+ *
+ * Description: This function is the job router for the adapter reset job.
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_reset_ioa_job(struct ipr_cmnd *ipr_cmd)
+{
+	u32 rc, ioasc;
+	unsigned long scratch = ipr_cmd->scratch;
+	struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
+
+	do {
+		ioasc = be32_to_cpu(ipr_cmd->ioasa.ioasc);
+
+		if (ioa_cfg->reset_cmd != ipr_cmd) {
+			/*
+			 * We are doing nested adapter resets and this is
+			 * not the current reset job.
+			 */
+			list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
+			return;
+		}
+
+		if (IPR_IOASC_SENSE_KEY(ioasc)) {
+			dev_err(&ioa_cfg->pdev->dev,
+				"0x%02X failed with IOASC: 0x%08X\n",
+				ipr_cmd->ioarcb.cmd_pkt.cdb[0], ioasc);
+
+			ipr_initiate_ioa_reset(ioa_cfg, IPR_SHUTDOWN_NONE);
+			list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
+			return;
+		}
+
+		ipr_reinit_ipr_cmnd(ipr_cmd);
+		ipr_cmd->scratch = scratch;
+		rc = ipr_cmd->job_step(ipr_cmd);
+	} while(rc == IPR_RC_JOB_CONTINUE);
+}
+
+/**
+ * _ipr_initiate_ioa_reset - Initiate an adapter reset
+ * @ioa_cfg:		ioa config struct
+ * @job_step:		first job step of reset job
+ * @shutdown_type:	shutdown type
+ *
+ * Description: This function will initiate the reset of the given adapter
+ * starting at the selected job step.
+ * If the caller needs to wait on the completion of the reset,
+ * the caller must sleep on the reset_wait_q.
+ *
+ * Return value:
+ * 	none
+ **/
+static void _ipr_initiate_ioa_reset(struct ipr_ioa_cfg *ioa_cfg,
+				    int (*job_step) (struct ipr_cmnd *),
+				    enum ipr_shutdown_type shutdown_type)
+{
+	struct ipr_cmnd *ipr_cmd;
+
+	ioa_cfg->in_reset_reload = 1;
+	ioa_cfg->allow_cmds = 0;
+	scsi_block_requests(ioa_cfg->host);
+
+	ipr_cmd = ipr_get_free_ipr_cmnd(ioa_cfg);
+	ioa_cfg->reset_cmd = ipr_cmd;
+	ipr_cmd->job_step = job_step;
+	ipr_cmd->shutdown_type = shutdown_type;
+
+	ipr_reset_ioa_job(ipr_cmd);
+}
+
+/**
+ * ipr_initiate_ioa_reset - Initiate an adapter reset
+ * @ioa_cfg:		ioa config struct
+ * @shutdown_type:	shutdown type
+ *
+ * Description: This function will initiate the reset of the given adapter.
+ * If the caller needs to wait on the completion of the reset,
+ * the caller must sleep on the reset_wait_q.
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_initiate_ioa_reset(struct ipr_ioa_cfg *ioa_cfg,
+				   enum ipr_shutdown_type shutdown_type)
+{
+	if (ioa_cfg->ioa_is_dead)
+		return;
+
+	if (ioa_cfg->in_reset_reload && ioa_cfg->sdt_state == GET_DUMP)
+		ioa_cfg->sdt_state = ABORT_DUMP;
+
+	if (ioa_cfg->reset_retries++ > IPR_NUM_RESET_RELOAD_RETRIES) {
+		dev_err(&ioa_cfg->pdev->dev,
+			"IOA taken offline - error recovery failed\n");
+
+		ioa_cfg->reset_retries = 0;
+		ioa_cfg->ioa_is_dead = 1;
+
+		if (ioa_cfg->in_ioa_bringdown) {
+			ioa_cfg->reset_cmd = NULL;
+			ioa_cfg->in_reset_reload = 0;
+			ipr_fail_all_ops(ioa_cfg);
+			wake_up_all(&ioa_cfg->reset_wait_q);
+
+			spin_unlock_irq(ioa_cfg->host->host_lock);
+			scsi_unblock_requests(ioa_cfg->host);
+			spin_lock_irq(ioa_cfg->host->host_lock);
+			return;
+		} else {
+			ioa_cfg->in_ioa_bringdown = 1;
+			shutdown_type = IPR_SHUTDOWN_NONE;
+		}
+	}
+
+	_ipr_initiate_ioa_reset(ioa_cfg, ipr_reset_shutdown_ioa,
+				shutdown_type);
+}
+
+/**
+ * ipr_probe_ioa_part2 - Initializes IOAs found in ipr_probe_ioa(..)
+ * @ioa_cfg:	ioa cfg struct
+ *
+ * Description: This is the second phase of adapter intialization
+ * This function takes care of initilizing the adapter to the point
+ * where it can accept new commands.
+
+ * Return value:
+ * 	0 on sucess / -EIO on failure
+ **/
+static int __devinit ipr_probe_ioa_part2(struct ipr_ioa_cfg *ioa_cfg)
+{
+	int rc = 0;
+	unsigned long host_lock_flags = 0;
+
+	ENTER;
+	spin_lock_irqsave(ioa_cfg->host->host_lock, host_lock_flags);
+	dev_dbg(&ioa_cfg->pdev->dev, "ioa_cfg adx: 0x%p\n", ioa_cfg);
+	_ipr_initiate_ioa_reset(ioa_cfg, ipr_reset_enable_ioa, IPR_SHUTDOWN_NONE);
+
+	spin_unlock_irqrestore(ioa_cfg->host->host_lock, host_lock_flags);
+	wait_event(ioa_cfg->reset_wait_q, !ioa_cfg->in_reset_reload);
+	spin_lock_irqsave(ioa_cfg->host->host_lock, host_lock_flags);
+
+	if (ioa_cfg->ioa_is_dead) {
+		rc = -EIO;
+	} else if (ipr_invalid_adapter(ioa_cfg)) {
+		if (!ipr_testmode)
+			rc = -EIO;
+
+		dev_err(&ioa_cfg->pdev->dev,
+			"Adapter not supported in this hardware configuration.\n");
+	}
+
+	spin_unlock_irqrestore(ioa_cfg->host->host_lock, host_lock_flags);
+
+	LEAVE;
+	return rc;
+}
+
+/**
+ * ipr_free_cmd_blks - Frees command blocks allocated for an adapter
+ * @ioa_cfg:	ioa config struct
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_free_cmd_blks(struct ipr_ioa_cfg *ioa_cfg)
+{
+	int i;
+
+	for (i = 0; i < IPR_NUM_CMD_BLKS; i++) {
+		if (ioa_cfg->ipr_cmnd_list[i])
+			pci_pool_free(ioa_cfg->ipr_cmd_pool,
+				      ioa_cfg->ipr_cmnd_list[i],
+				      ioa_cfg->ipr_cmnd_list_dma[i]);
+
+		ioa_cfg->ipr_cmnd_list[i] = NULL;
+	}
+
+	if (ioa_cfg->ipr_cmd_pool)
+		pci_pool_destroy (ioa_cfg->ipr_cmd_pool);
+
+	ioa_cfg->ipr_cmd_pool = NULL;
+}
+
+/**
+ * ipr_free_mem - Frees memory allocated for an adapter
+ * @ioa_cfg:	ioa cfg struct
+ *
+ * Return value:
+ * 	nothing
+ **/
+static void ipr_free_mem(struct ipr_ioa_cfg *ioa_cfg)
+{
+	int i;
+
+	kfree(ioa_cfg->res_entries);
+	pci_free_consistent(ioa_cfg->pdev, sizeof(struct ipr_misc_cbs),
+			    ioa_cfg->vpd_cbs, ioa_cfg->vpd_cbs_dma);
+	ipr_free_cmd_blks(ioa_cfg);
+	pci_free_consistent(ioa_cfg->pdev, sizeof(u32) * IPR_NUM_CMD_BLKS,
+			    ioa_cfg->host_rrq, ioa_cfg->host_rrq_dma);
+	pci_free_consistent(ioa_cfg->pdev, sizeof(struct ipr_config_table),
+			    ioa_cfg->cfg_table,
+			    ioa_cfg->cfg_table_dma);
+
+	for (i = 0; i < IPR_NUM_HCAMS; i++) {
+		pci_free_consistent(ioa_cfg->pdev,
+				    sizeof(struct ipr_hostrcb),
+				    ioa_cfg->hostrcb[i],
+				    ioa_cfg->hostrcb_dma[i]);
+	}
+
+	ipr_free_dump(ioa_cfg);
+	kfree(ioa_cfg->saved_mode_pages);
+	kfree(ioa_cfg->trace);
+}
+
+/**
+ * ipr_free_all_resources - Free all allocated resources for an adapter.
+ * @ipr_cmd:	ipr command struct
+ *
+ * This function frees all allocated resources for the
+ * specified adapter.
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_free_all_resources(struct ipr_ioa_cfg *ioa_cfg)
+{
+	ENTER;
+	free_irq(ioa_cfg->pdev->irq, ioa_cfg);
+	iounmap((void *) ioa_cfg->hdw_dma_regs);
+	release_mem_region(ioa_cfg->hdw_dma_regs_pci,
+			   pci_resource_len(ioa_cfg->pdev, 0));
+	ipr_free_mem(ioa_cfg);
+	scsi_host_put(ioa_cfg->host);
+	LEAVE;
+}
+
+/**
+ * ipr_alloc_cmd_blks - Allocate command blocks for an adapter
+ * @ioa_cfg:	ioa config struct
+ *
+ * Return value:
+ * 	0 on success / -ENOMEM on allocation failure
+ **/
+static int __devinit ipr_alloc_cmd_blks(struct ipr_ioa_cfg *ioa_cfg)
+{
+	struct ipr_cmnd *ipr_cmd;
+	struct ipr_ioarcb *ioarcb;
+	u32 dma_addr;
+	int i;
+
+	ioa_cfg->ipr_cmd_pool = pci_pool_create (IPR_NAME, ioa_cfg->pdev,
+						 sizeof(struct ipr_cmnd), 8, 0);
+
+	if (!ioa_cfg->ipr_cmd_pool)
+		return -ENOMEM;
+
+	for (i = 0; i < IPR_NUM_CMD_BLKS; i++) {
+		ipr_cmd = pci_pool_alloc (ioa_cfg->ipr_cmd_pool, SLAB_KERNEL, &dma_addr);
+
+		if (!ipr_cmd) {
+			ipr_free_cmd_blks(ioa_cfg);
+			return -ENOMEM;
+		}
+
+		memset(ipr_cmd, 0, sizeof(*ipr_cmd));
+		ioa_cfg->ipr_cmnd_list[i] = ipr_cmd;
+		ioa_cfg->ipr_cmnd_list_dma[i] = dma_addr;
+
+		ioarcb = &ipr_cmd->ioarcb;
+		ioarcb->ioarcb_host_pci_addr = cpu_to_be32(dma_addr);
+		ioarcb->host_response_handle = cpu_to_be32(i << 2);
+		ioarcb->write_ioadl_addr =
+			cpu_to_be32(dma_addr + offsetof(struct ipr_cmnd, ioadl));
+		ioarcb->read_ioadl_addr = ioarcb->write_ioadl_addr;
+		ioarcb->ioasa_host_pci_addr =
+			cpu_to_be32(dma_addr + offsetof(struct ipr_cmnd, ioasa));
+		ioarcb->ioasa_len = cpu_to_be16(sizeof(struct ipr_ioasa));
+		ipr_cmd->cmd_index = i;
+		ipr_cmd->ioa_cfg = ioa_cfg;
+		ipr_cmd->sense_buffer_dma = dma_addr +
+			offsetof(struct ipr_cmnd, sense_buffer);
+
+		list_add_tail(&ipr_cmd->queue, &ioa_cfg->free_q);
+	}
+
+	return 0;
+}
+
+/**
+ * ipr_alloc_mem - Allocate memory for an adapter
+ * @ioa_cfg:	ioa config struct
+ *
+ * Return value:
+ * 	0 on success / non-zero for error
+ **/
+static int __devinit ipr_alloc_mem(struct ipr_ioa_cfg *ioa_cfg)
+{
+	int i;
+
+	ENTER;
+	ioa_cfg->res_entries = kmalloc(sizeof(struct ipr_resource_entry) *
+				       IPR_MAX_PHYSICAL_DEVS, GFP_KERNEL);
+
+	if (!ioa_cfg->res_entries)
+		goto cleanup;
+
+	memset(ioa_cfg->res_entries, 0,
+	       sizeof(struct ipr_resource_entry) * IPR_MAX_PHYSICAL_DEVS);
+
+	for (i = 0; i < IPR_MAX_PHYSICAL_DEVS; i++)
+		list_add_tail(&ioa_cfg->res_entries[i].queue, &ioa_cfg->free_res_q);
+
+	ioa_cfg->vpd_cbs = pci_alloc_consistent(ioa_cfg->pdev,
+						sizeof(struct ipr_misc_cbs),
+						&ioa_cfg->vpd_cbs_dma);
+
+	if (!ioa_cfg->vpd_cbs)
+		goto cleanup;
+
+	if (ipr_alloc_cmd_blks(ioa_cfg))
+		goto cleanup;
+
+	ioa_cfg->host_rrq = pci_alloc_consistent(ioa_cfg->pdev,
+						 sizeof(u32) * IPR_NUM_CMD_BLKS,
+						 &ioa_cfg->host_rrq_dma);
+
+	if (!ioa_cfg->host_rrq)
+		goto cleanup;
+
+	ioa_cfg->cfg_table = pci_alloc_consistent(ioa_cfg->pdev,
+						  sizeof(struct ipr_config_table),
+						  &ioa_cfg->cfg_table_dma);
+
+	if (!ioa_cfg->cfg_table)
+		goto cleanup;
+
+	for (i = 0; i < IPR_NUM_HCAMS; i++) {
+		ioa_cfg->hostrcb[i] = pci_alloc_consistent(ioa_cfg->pdev,
+							   sizeof(struct ipr_hostrcb),
+							   &ioa_cfg->hostrcb_dma[i]);
+
+		if (!ioa_cfg->hostrcb[i])
+			goto cleanup;
+
+		memset(ioa_cfg->hostrcb[i], 0, sizeof(struct ipr_hostrcb));
+		ioa_cfg->hostrcb[i]->hostrcb_dma = ioa_cfg->hostrcb_dma[i];
+		list_add_tail(&ioa_cfg->hostrcb[i]->queue, &ioa_cfg->hostrcb_free_q);
+	}
+
+	ioa_cfg->trace = kmalloc(sizeof(struct ipr_trace_entry) *
+				 IPR_NUM_TRACE_ENTRIES, GFP_KERNEL);
+
+	if (!ioa_cfg->trace)
+		goto cleanup;
+
+	memset(ioa_cfg->trace, 0,
+	       sizeof(struct ipr_trace_entry) * IPR_NUM_TRACE_ENTRIES);
+
+	LEAVE;
+	return 0;
+
+cleanup:
+	ipr_free_mem(ioa_cfg);
+
+	LEAVE;
+	return -ENOMEM;
+}
+
+/**
+ * ipr_initialize_bus_attr - Initialize SCSI bus attributes to default values
+ * @ioa_cfg:	ioa config struct
+ *
+ * Return value:
+ * 	none
+ **/
+static void __devinit ipr_initialize_bus_attr(struct ipr_ioa_cfg *ioa_cfg)
+{
+	int i;
+
+	for (i = 0; i < IPR_MAX_NUM_BUSES; i++) {
+		ioa_cfg->bus_attr[i].bus = i;
+		ioa_cfg->bus_attr[i].qas_enabled = 0;
+		ioa_cfg->bus_attr[i].bus_width = IPR_DEFAULT_BUS_WIDTH;
+		if (ipr_max_speed < ARRAY_SIZE(ipr_max_bus_speeds))
+			ioa_cfg->bus_attr[i].max_xfer_rate = ipr_max_bus_speeds[ipr_max_speed];
+		else
+			ioa_cfg->bus_attr[i].max_xfer_rate = IPR_U160_SCSI_RATE;
+	}
+}
+
+/**
+ * ipr_init_ioa_cfg - Initialize IOA config struct
+ * @ioa_cfg:	ioa config struct
+ * @host:		scsi host struct
+ * @pdev:		PCI dev struct
+ *
+ * Return value:
+ * 	none
+ **/
+static void __devinit ipr_init_ioa_cfg(struct ipr_ioa_cfg *ioa_cfg,
+				       struct Scsi_Host *host, struct pci_dev *pdev)
+{
+	ioa_cfg->host = host;
+	ioa_cfg->pdev = pdev;
+	ioa_cfg->log_level = ipr_log_level;
+	sprintf(ioa_cfg->eye_catcher, IPR_EYECATCHER);
+	sprintf(ioa_cfg->trace_start, IPR_TRACE_START_LABEL);
+	sprintf(ioa_cfg->ipr_free_label, IPR_FREEQ_LABEL);
+	sprintf(ioa_cfg->ipr_pending_label, IPR_PENDQ_LABEL);
+	sprintf(ioa_cfg->cfg_table_start, IPR_CFG_TBL_START);
+	sprintf(ioa_cfg->resource_table_label, IPR_RES_TABLE_LABEL);
+	sprintf(ioa_cfg->ipr_hcam_label, IPR_HCAM_LABEL);
+	sprintf(ioa_cfg->ipr_cmd_label, IPR_CMD_LABEL);
+
+	INIT_LIST_HEAD(&ioa_cfg->free_q);
+	INIT_LIST_HEAD(&ioa_cfg->pending_q);
+	INIT_LIST_HEAD(&ioa_cfg->hostrcb_free_q);
+	INIT_LIST_HEAD(&ioa_cfg->hostrcb_pending_q);
+	INIT_LIST_HEAD(&ioa_cfg->free_res_q);
+	INIT_LIST_HEAD(&ioa_cfg->used_res_q);
+	INIT_WORK(&ioa_cfg->work_q, ipr_worker_thread, ioa_cfg);
+	init_waitqueue_head(&ioa_cfg->reset_wait_q);
+	ioa_cfg->sdt_state = INACTIVE;
+
+	ipr_initialize_bus_attr(ioa_cfg);
+
+	host->max_id = IPR_MAX_NUM_TARGETS_PER_BUS;
+	host->max_lun = IPR_MAX_NUM_LUNS_PER_TARGET;
+	host->max_channel = IPR_MAX_BUS_TO_SCAN;
+	host->unique_id = host->host_no;
+	host->max_cmd_len = IPR_MAX_CDB_LEN;
+	pci_set_drvdata(pdev, ioa_cfg);
+
+	memcpy(&ioa_cfg->regs, &ioa_cfg->chip_cfg->regs, sizeof(ioa_cfg->regs));
+
+	ioa_cfg->regs.set_interrupt_mask_reg += ioa_cfg->hdw_dma_regs;
+	ioa_cfg->regs.clr_interrupt_mask_reg += ioa_cfg->hdw_dma_regs;
+	ioa_cfg->regs.sense_interrupt_mask_reg += ioa_cfg->hdw_dma_regs;
+	ioa_cfg->regs.clr_interrupt_reg += ioa_cfg->hdw_dma_regs;
+	ioa_cfg->regs.sense_interrupt_reg += ioa_cfg->hdw_dma_regs;
+	ioa_cfg->regs.ioarrin_reg += ioa_cfg->hdw_dma_regs;
+	ioa_cfg->regs.sense_uproc_interrupt_reg += ioa_cfg->hdw_dma_regs;
+	ioa_cfg->regs.set_uproc_interrupt_reg += ioa_cfg->hdw_dma_regs;
+	ioa_cfg->regs.clr_uproc_interrupt_reg += ioa_cfg->hdw_dma_regs;
+}
+
+/**
+ * ipr_probe_ioa - Allocates memory and does first stage of initialization
+ * @pdev:		PCI device struct
+ * @dev_id:		PCI device id struct
+ *
+ * Return value:
+ * 	0 on success / non-zero on failure
+ **/
+static int __devinit ipr_probe_ioa(struct pci_dev *pdev,
+				   const struct pci_device_id *dev_id)
+{
+	struct ipr_ioa_cfg *ioa_cfg;
+	struct Scsi_Host *host;
+	unsigned long ipr_regs, ipr_regs_pci;
+	u32 rc = PCIBIOS_SUCCESSFUL;
+
+	ENTER;
+
+	if ((rc = pci_enable_device(pdev))) {
+		dev_err(&pdev->dev, "Cannot enable adapter\n");
+		return rc;
+	}
+
+	dev_info(&pdev->dev, "Found IOA with IRQ: %d\n", pdev->irq);
+
+	host = scsi_host_alloc(&driver_template, sizeof(*ioa_cfg));
+
+	if (!host) {
+		dev_err(&pdev->dev, "call to scsi_host_alloc failed!\n");
+		return -ENOMEM;
+	}
+
+	ioa_cfg = (struct ipr_ioa_cfg *)host->hostdata;
+	memset(ioa_cfg, 0, sizeof(struct ipr_ioa_cfg));
+
+	ioa_cfg->chip_cfg = (const struct ipr_chip_cfg_t *)dev_id->driver_data;
+
+	ipr_regs_pci = pci_resource_start(pdev, 0);
+
+	if (!request_mem_region(ipr_regs_pci,
+				pci_resource_len(pdev, 0), IPR_NAME)) {
+		dev_err(&pdev->dev,
+			"Couldn't register memory range of registers\n");
+		scsi_host_put(host);
+		return -ENOMEM;
+	}
+
+	ipr_regs = (unsigned long)ioremap(ipr_regs_pci,
+					  pci_resource_len(pdev, 0));
+
+	if (!ipr_regs) {
+		dev_err(&pdev->dev,
+			"Couldn't map memory range of registers\n");
+		release_mem_region(ipr_regs_pci, pci_resource_len(pdev, 0));
+		scsi_host_put(host);
+		return -ENOMEM;
+	}
+
+	ioa_cfg->hdw_dma_regs = ipr_regs;
+	ioa_cfg->hdw_dma_regs_pci = ipr_regs_pci;
+	ioa_cfg->ioa_mailbox = ioa_cfg->chip_cfg->mailbox + ipr_regs;
+
+	ipr_init_ioa_cfg(ioa_cfg, host, pdev);
+
+	pci_set_master(pdev);
+	rc = pci_set_dma_mask(pdev, 0xffffffff);
+
+	if (rc != PCIBIOS_SUCCESSFUL) {
+		dev_err(&pdev->dev, "Failed to set PCI DMA mask\n");
+		rc = -EIO;
+		goto cleanup_nomem;
+	}
+
+	rc = pci_write_config_byte(pdev, PCI_CACHE_LINE_SIZE,
+				   ioa_cfg->chip_cfg->cache_line_size);
+
+	if (rc != PCIBIOS_SUCCESSFUL) {
+		dev_err(&pdev->dev, "Write of cache line size failed\n");
+		rc = -EIO;
+		goto cleanup_nomem;
+	}
+
+	/* Save away PCI config space for use following IOA reset */
+	rc = pci_save_state(pdev, ioa_cfg->pci_cfg_buf);
+
+	if (rc != PCIBIOS_SUCCESSFUL) {
+		dev_err(&pdev->dev, "Failed to save PCI config space\n");
+		rc = -EIO;
+		goto cleanup_nomem;
+	}
+
+	if ((rc = ipr_save_pcix_cmd_reg(ioa_cfg)))
+		goto cleanup_nomem;
+
+	if ((rc = ipr_set_pcix_cmd_reg(ioa_cfg)))
+		goto cleanup_nomem;
+
+	if ((rc = ipr_alloc_mem(ioa_cfg)))
+		goto cleanup;
+
+	ipr_mask_and_clear_interrupts(ioa_cfg, ~IPR_PCII_IOA_TRANS_TO_OPER);
+	rc = request_irq(pdev->irq, ipr_isr, SA_SHIRQ, IPR_NAME, ioa_cfg);
+
+	if (rc) {
+		dev_err(&pdev->dev, "Couldn't register IRQ %d! rc=%d\n",
+			pdev->irq, rc);
+		goto cleanup_nolog;
+	}
+
+	spin_lock(&ipr_driver_lock);
+	list_add_tail(&ioa_cfg->queue, &ipr_ioa_head);
+	spin_unlock(&ipr_driver_lock);
+
+	LEAVE;
+	return 0;
+
+cleanup:
+	dev_err(&pdev->dev, "Couldn't allocate enough memory for device driver!\n");
+cleanup_nolog:
+	ipr_free_mem(ioa_cfg);
+cleanup_nomem:
+	iounmap((void *) ipr_regs);
+	release_mem_region(ipr_regs_pci, pci_resource_len(pdev, 0));
+	scsi_host_put(host);
+
+	return rc;
+}
+
+/**
+ * ipr_scan_vsets - Scans for VSET devices
+ * @ioa_cfg:	ioa config struct
+ *
+ * Description: Since the VSET resources do not follow SAM in that we can have
+ * sparse LUNs with no LUN 0, we have to scan for these ourselves.
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_scan_vsets(struct ipr_ioa_cfg *ioa_cfg)
+{
+	int target, lun;
+
+	for (target = 0; target < IPR_MAX_NUM_TARGETS_PER_BUS; target++)
+		for (lun = 0; lun < IPR_MAX_NUM_VSET_LUNS_PER_TARGET; lun++ )
+			scsi_add_device(ioa_cfg->host, IPR_VSET_BUS, target, lun);
+}
+
+/**
+ * ipr_initiate_ioa_bringdown - Bring down an adapter
+ * @ioa_cfg:		ioa config struct
+ * @shutdown_type:	shutdown type
+ *
+ * Description: This function will initiate bringing down the adapter.
+ * This consists of issuing an IOA shutdown to the adapter
+ * to flush the cache, and running BIST.
+ * If the caller needs to wait on the completion of the reset,
+ * the caller must sleep on the reset_wait_q.
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_initiate_ioa_bringdown(struct ipr_ioa_cfg *ioa_cfg,
+				       enum ipr_shutdown_type shutdown_type)
+{
+	ENTER;
+	if (ioa_cfg->sdt_state == WAIT_FOR_DUMP)
+		ioa_cfg->sdt_state = ABORT_DUMP;
+	ioa_cfg->reset_retries = 0;
+	ioa_cfg->in_ioa_bringdown = 1;
+	ipr_initiate_ioa_reset(ioa_cfg, shutdown_type);
+	LEAVE;
+}
+
+/**
+ * __ipr_remove - Remove a single adapter
+ * @pdev:	pci device struct
+ *
+ * Adapter hot plug remove entry point.
+ *
+ * Return value:
+ * 	none
+ **/
+static void __ipr_remove(struct pci_dev *pdev)
+{
+	unsigned long host_lock_flags = 0;
+	struct ipr_ioa_cfg *ioa_cfg = pci_get_drvdata(pdev);
+	ENTER;
+
+	spin_lock_irqsave(ioa_cfg->host->host_lock, host_lock_flags);
+	ipr_initiate_ioa_bringdown(ioa_cfg, IPR_SHUTDOWN_NORMAL);
+
+	spin_unlock_irqrestore(ioa_cfg->host->host_lock, host_lock_flags);
+	wait_event(ioa_cfg->reset_wait_q, !ioa_cfg->in_reset_reload);
+	spin_lock_irqsave(ioa_cfg->host->host_lock, host_lock_flags);
+
+	spin_lock(&ipr_driver_lock);
+	list_del(&ioa_cfg->queue);
+	spin_unlock(&ipr_driver_lock);
+
+	if (ioa_cfg->sdt_state == ABORT_DUMP)
+		ioa_cfg->sdt_state = WAIT_FOR_DUMP;
+	spin_unlock_irqrestore(ioa_cfg->host->host_lock, host_lock_flags);
+
+	ipr_free_all_resources(ioa_cfg);
+
+	LEAVE;
+}
+
+/**
+ * ipr_remove - IOA hot plug remove entry point
+ * @pdev:	pci device struct
+ *
+ * Adapter hot plug remove entry point.
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_remove(struct pci_dev *pdev)
+{
+	struct ipr_ioa_cfg *ioa_cfg = pci_get_drvdata(pdev);
+
+	ENTER;
+
+	ioa_cfg->allow_cmds = 0;
+	flush_scheduled_work();
+	ipr_remove_trace_file(&ioa_cfg->host->shost_classdev.kobj,
+			      &ipr_trace_attr);
+	ipr_remove_dump_file(&ioa_cfg->host->shost_classdev.kobj,
+			     &ipr_dump_attr);
+	scsi_remove_host(ioa_cfg->host);
+
+	__ipr_remove(pdev);
+
+	LEAVE;
+}
+
+/**
+ * ipr_probe - Adapter hot plug add entry point
+ *
+ * Return value:
+ * 	0 on success / non-zero on failure
+ **/
+static int __devinit ipr_probe(struct pci_dev *pdev,
+			       const struct pci_device_id *dev_id)
+{
+	struct ipr_ioa_cfg *ioa_cfg;
+	int rc;
+
+	rc = ipr_probe_ioa(pdev, dev_id);
+
+	if (rc)
+		return rc;
+
+	ioa_cfg = pci_get_drvdata(pdev);
+	rc = ipr_probe_ioa_part2(ioa_cfg);
+
+	if (rc) {
+		__ipr_remove(pdev);
+		return rc;
+	}
+
+	rc = scsi_add_host(ioa_cfg->host, &pdev->dev);
+
+	if (rc) {
+		__ipr_remove(pdev);
+		return rc;
+	}
+
+	rc = ipr_create_trace_file(&ioa_cfg->host->shost_classdev.kobj,
+				   &ipr_trace_attr);
+
+	if (rc) {
+		scsi_remove_host(ioa_cfg->host);
+		__ipr_remove(pdev);
+		return rc;
+	}
+
+	rc = ipr_create_dump_file(&ioa_cfg->host->shost_classdev.kobj,
+				   &ipr_dump_attr);
+
+	if (rc) {
+		ipr_remove_trace_file(&ioa_cfg->host->shost_classdev.kobj,
+				      &ipr_trace_attr);
+		scsi_remove_host(ioa_cfg->host);
+		__ipr_remove(pdev);
+		return rc;
+	}
+
+	scsi_scan_host(ioa_cfg->host);
+	ipr_scan_vsets(ioa_cfg);
+	scsi_add_device(ioa_cfg->host, IPR_IOA_BUS, IPR_IOA_TARGET, IPR_IOA_LUN);
+	ioa_cfg->allow_ml_add_del = 1;
+	schedule_work(&ioa_cfg->work_q);
+	return 0;
+}
+
+/**
+ * ipr_shutdown - Shutdown handler.
+ * @dev:	device struct
+ *
+ * This function is invoked upon system shutdown/reboot. It will issue
+ * an adapter shutdown to the adapter to flush the write cache.
+ *
+ * Return value:
+ * 	none
+ **/
+static void ipr_shutdown(struct device *dev)
+{
+	struct ipr_ioa_cfg *ioa_cfg = pci_get_drvdata(to_pci_dev(dev));
+	unsigned long lock_flags = 0;
+
+	spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
+	ipr_initiate_ioa_bringdown(ioa_cfg, IPR_SHUTDOWN_NORMAL);
+	spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+	wait_event(ioa_cfg->reset_wait_q, !ioa_cfg->in_reset_reload);
+}
+
+static struct pci_device_id ipr_pci_table[] __devinitdata = {
+	{ PCI_VENDOR_ID_MYLEX, PCI_DEVICE_ID_IBM_GEMSTONE,
+		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_5702,
+		0, 0, (kernel_ulong_t)&ipr_chip_cfg[0] },
+	{ PCI_VENDOR_ID_MYLEX, PCI_DEVICE_ID_IBM_GEMSTONE,
+		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_572E,
+		0, 0, (kernel_ulong_t)&ipr_chip_cfg[0] },
+	{ PCI_VENDOR_ID_MYLEX, PCI_DEVICE_ID_IBM_GEMSTONE,
+		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_5703,
+	      0, 0, (kernel_ulong_t)&ipr_chip_cfg[0] },
+	{ PCI_VENDOR_ID_MYLEX, PCI_DEVICE_ID_IBM_GEMSTONE,
+		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_573D,
+	      0, 0, (kernel_ulong_t)&ipr_chip_cfg[0] },
+	{ PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_SNIPE,
+		PCI_VENDOR_ID_IBM, IPR_SUBS_DEV_ID_2780,
+		0, 0, (kernel_ulong_t)&ipr_chip_cfg[1] },
+	{ }
+};
+MODULE_DEVICE_TABLE(pci, ipr_pci_table);
+
+static struct pci_driver ipr_driver = {
+	.name = IPR_NAME,
+	.id_table = ipr_pci_table,
+	.probe = ipr_probe,
+	.remove = ipr_remove,
+	.driver = {
+		.shutdown = ipr_shutdown,
+	},
+};
+
+/**
+ * ipr_init - Module entry point
+ *
+ * Return value:
+ * 	0 on success / non-zero on failure
+ **/
+static int __init ipr_init(void)
+{
+	ipr_info("IBM Power RAID SCSI Device Driver version: %s %s\n",
+		 IPR_DRIVER_VERSION, IPR_DRIVER_DATE);
+
+	pci_register_driver(&ipr_driver);
+
+	return 0;
+}
+
+/**
+ * ipr_exit - Module unload
+ *
+ * Module unload entry point.
+ *
+ * Return value:
+ * 	none
+ **/
+static void __exit ipr_exit(void)
+{
+	pci_unregister_driver(&ipr_driver);
+}
+
+module_init(ipr_init);
+module_exit(ipr_exit);
diff -Nru a/drivers/scsi/ipr.h b/drivers/scsi/ipr.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/drivers/scsi/ipr.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,1251 @@
+/*
+ * ipr.h -- driver for IBM Power Linux RAID adapters
+ *
+ * Written By: Brian King, IBM Corporation
+ *
+ * Copyright (C) 2003, 2004 IBM Corporation
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ */
+
+#ifndef _IPR_H
+#define _IPR_H
+
+#include <linux/types.h>
+#include <linux/completion.h>
+#include <linux/list.h>
+#include <scsi/scsi.h>
+#include <scsi/scsi_cmnd.h>
+#ifdef CONFIG_KDB
+#include <linux/kdb.h>
+#endif
+
+/*
+ * Literals
+ */
+#define IPR_DRIVER_VERSION "2.0.6"
+#define IPR_DRIVER_DATE "(May 3, 2004)"
+
+/*
+ * IPR_DBG_TRACE: Setting this to 1 will turn on some general function tracing
+ *			resulting in a bunch of extra debugging printks to the console
+ *
+ * IPR_DEBUG:	Setting this to 1 will turn on some error path tracing.
+ *			Enables the ipr_trace macro.
+ */
+#ifdef IPR_DEBUG_ALL
+#define IPR_DEBUG				1
+#define IPR_DBG_TRACE			1
+#else
+#define IPR_DEBUG				0
+#define IPR_DBG_TRACE			0
+#endif
+
+/*
+ * IPR_MAX_CMD_PER_LUN: This defines the maximum number of outstanding
+ *	ops per device for devices not running tagged command queuing.
+ *	This can be adjusted at runtime through sysfs device attributes.
+ */
+#define IPR_MAX_CMD_PER_LUN				6
+
+/*
+ * IPR_NUM_BASE_CMD_BLKS: This defines the maximum number of
+ *	ops the mid-layer can send to the adapter.
+ */
+#define IPR_NUM_BASE_CMD_BLKS				100
+
+#define IPR_SUBS_DEV_ID_2780	0x0264
+#define IPR_SUBS_DEV_ID_5702	0x0266
+#define IPR_SUBS_DEV_ID_5703	0x0278
+#define IPR_SUBS_DEV_ID_572E  0x02D3
+#define IPR_SUBS_DEV_ID_573D  0x02D4
+
+#define IPR_NAME				"ipr"
+
+/*
+ * Return codes
+ */
+#define IPR_RC_JOB_CONTINUE		1
+#define IPR_RC_JOB_RETURN		2
+
+/*
+ * IOASCs
+ */
+#define IPR_IOASC_NR_INIT_CMD_REQUIRED		0x02040200
+#define IPR_IOASC_SYNC_REQUIRED			0x023f0000
+#define IPR_IOASC_MED_DO_NOT_REALLOC		0x03110C00
+#define IPR_IOASC_HW_SEL_TIMEOUT			0x04050000
+#define IPR_IOASC_HW_DEV_BUS_STATUS			0x04448500
+#define	IPR_IOASC_IOASC_MASK			0xFFFFFF00
+#define	IPR_IOASC_SCSI_STATUS_MASK		0x000000FF
+#define IPR_IOASC_IR_RESOURCE_HANDLE		0x05250000
+#define IPR_IOASC_BUS_WAS_RESET			0x06290000
+#define IPR_IOASC_BUS_WAS_RESET_BY_OTHER		0x06298000
+#define IPR_IOASC_ABORTED_CMD_TERM_BY_HOST	0x0B5A0000
+
+#define IPR_FIRST_DRIVER_IOASC			0x10000000
+#define IPR_IOASC_IOA_WAS_RESET			0x10000001
+#define IPR_IOASC_PCI_ACCESS_ERROR			0x10000002
+
+#define IPR_NUM_LOG_HCAMS				2
+#define IPR_NUM_CFG_CHG_HCAMS				2
+#define IPR_NUM_HCAMS	(IPR_NUM_LOG_HCAMS + IPR_NUM_CFG_CHG_HCAMS)
+#define IPR_MAX_NUM_TARGETS_PER_BUS			0x10
+#define IPR_MAX_NUM_LUNS_PER_TARGET			256
+#define IPR_MAX_NUM_VSET_LUNS_PER_TARGET	8
+#define IPR_VSET_BUS					0xff
+#define IPR_IOA_BUS						0xff
+#define IPR_IOA_TARGET					0xff
+#define IPR_IOA_LUN						0xff
+#define IPR_MAX_NUM_BUSES				4
+#define IPR_MAX_BUS_TO_SCAN				IPR_MAX_NUM_BUSES
+
+#define IPR_NUM_RESET_RELOAD_RETRIES		3
+
+/* We need resources for HCAMS, IOA reset, IOA bringdown, and ERP */
+#define IPR_NUM_INTERNAL_CMD_BLKS	(IPR_NUM_HCAMS + \
+                                     ((IPR_NUM_RESET_RELOAD_RETRIES + 1) * 2) + 3)
+
+#define IPR_MAX_COMMANDS		IPR_NUM_BASE_CMD_BLKS
+#define IPR_NUM_CMD_BLKS		(IPR_NUM_BASE_CMD_BLKS + \
+						IPR_NUM_INTERNAL_CMD_BLKS)
+
+#define IPR_MAX_PHYSICAL_DEVS				192
+
+#define IPR_MAX_SGLIST					64
+#define IPR_MAX_SECTORS					512
+#define IPR_MAX_CDB_LEN					16
+
+#define IPR_DEFAULT_BUS_WIDTH				16
+#define IPR_80MBs_SCSI_RATE		((80 * 10) / (IPR_DEFAULT_BUS_WIDTH / 8))
+#define IPR_U160_SCSI_RATE	((160 * 10) / (IPR_DEFAULT_BUS_WIDTH / 8))
+#define IPR_U320_SCSI_RATE	((320 * 10) / (IPR_DEFAULT_BUS_WIDTH / 8))
+#define IPR_MAX_SCSI_RATE(width) ((320 * 10) / ((width) / 8))
+
+#define IPR_IOA_RES_HANDLE				0xffffffff
+#define IPR_IOA_RES_ADDR				0x00ffffff
+
+/*
+ * Adapter Commands
+ */
+#define IPR_RESET_DEVICE				0xC3
+#define	IPR_RESET_TYPE_SELECT				0x80
+#define	IPR_LUN_RESET					0x40
+#define	IPR_TARGET_RESET					0x20
+#define	IPR_BUS_RESET					0x10
+#define IPR_ID_HOST_RR_Q				0xC4
+#define IPR_QUERY_IOA_CONFIG				0xC5
+#define IPR_ABORT_TASK					0xC7
+#define IPR_CANCEL_ALL_REQUESTS			0xCE
+#define IPR_HOST_CONTROLLED_ASYNC			0xCF
+#define	IPR_HCAM_CDB_OP_CODE_CONFIG_CHANGE	0x01
+#define	IPR_HCAM_CDB_OP_CODE_LOG_DATA		0x02
+#define IPR_SET_SUPPORTED_DEVICES			0xFB
+#define IPR_IOA_SHUTDOWN				0xF7
+#define	IPR_WR_BUF_DOWNLOAD_AND_SAVE			0x05
+
+/*
+ * Timeouts
+ */
+#define IPR_SHUTDOWN_TIMEOUT			(10 * 60 * HZ)
+#define IPR_VSET_RW_TIMEOUT			(2 * 60 * HZ)
+#define IPR_ABBREV_SHUTDOWN_TIMEOUT		(10 * HZ)
+#define IPR_DEVICE_RESET_TIMEOUT		(30 * HZ)
+#define IPR_CANCEL_ALL_TIMEOUT		(30 * HZ)
+#define IPR_ABORT_TASK_TIMEOUT		(30 * HZ)
+#define IPR_INTERNAL_TIMEOUT			(30 * HZ)
+#define IPR_WRITE_BUFFER_TIMEOUT		(10 * 60 * HZ)
+#define IPR_SET_SUP_DEVICE_TIMEOUT		(2 * 60 * HZ)
+#define IPR_REQUEST_SENSE_TIMEOUT		(10 * HZ)
+#define IPR_OPERATIONAL_TIMEOUT		(5 * 60 * HZ)
+#define IPR_WAIT_FOR_RESET_TIMEOUT		(2 * HZ)
+#define IPR_CHECK_FOR_RESET_TIMEOUT		(HZ / 10)
+#define IPR_WAIT_FOR_BIST_TIMEOUT		(2 * HZ)
+#define IPR_DUMP_TIMEOUT			(15 * HZ)
+
+/*
+ * SCSI Literals
+ */
+#define IPR_VENDOR_ID_LEN			8
+#define IPR_PROD_ID_LEN				16
+#define IPR_SERIAL_NUM_LEN			8
+
+/*
+ * Hardware literals
+ */
+#define IPR_FMT2_MBX_ADDR_MASK				0x0fffffff
+#define IPR_FMT2_MBX_BAR_SEL_MASK			0xf0000000
+#define IPR_FMT2_MKR_BAR_SEL_SHIFT			28
+#define IPR_GET_FMT2_BAR_SEL(mbx) \
+(((mbx) & IPR_FMT2_MBX_BAR_SEL_MASK) >> IPR_FMT2_MKR_BAR_SEL_SHIFT)
+#define IPR_SDT_FMT2_BAR0_SEL				0x0
+#define IPR_SDT_FMT2_BAR1_SEL				0x1
+#define IPR_SDT_FMT2_BAR2_SEL				0x2
+#define IPR_SDT_FMT2_BAR3_SEL				0x3
+#define IPR_SDT_FMT2_BAR4_SEL				0x4
+#define IPR_SDT_FMT2_BAR5_SEL				0x5
+#define IPR_SDT_FMT2_EXP_ROM_SEL			0x8
+#define IPR_FMT2_SDT_READY_TO_USE			0xC4D4E3F2
+#define IPR_DOORBELL					0x82800000
+
+#define IPR_PCII_IOA_TRANS_TO_OPER			(0x80000000 >> 0)
+#define IPR_PCII_IOARCB_XFER_FAILED			(0x80000000 >> 3)
+#define IPR_PCII_IOA_UNIT_CHECKED			(0x80000000 >> 4)
+#define IPR_PCII_NO_HOST_RRQ				(0x80000000 >> 5)
+#define IPR_PCII_CRITICAL_OPERATION			(0x80000000 >> 6)
+#define IPR_PCII_IO_DEBUG_ACKNOWLEDGE		(0x80000000 >> 7)
+#define IPR_PCII_IOARRIN_LOST				(0x80000000 >> 27)
+#define IPR_PCII_MMIO_ERROR				(0x80000000 >> 28)
+#define IPR_PCII_PROC_ERR_STATE			(0x80000000 >> 29)
+#define IPR_PCII_HRRQ_UPDATED				(0x80000000 >> 30)
+#define IPR_PCII_CORE_ISSUED_RST_REQ		(0x80000000 >> 31)
+
+#define IPR_PCII_ERROR_INTERRUPTS \
+(IPR_PCII_IOARCB_XFER_FAILED | IPR_PCII_IOA_UNIT_CHECKED | \
+IPR_PCII_NO_HOST_RRQ | IPR_PCII_IOARRIN_LOST | IPR_PCII_MMIO_ERROR)
+
+#define IPR_PCII_OPER_INTERRUPTS \
+(IPR_PCII_ERROR_INTERRUPTS | IPR_PCII_HRRQ_UPDATED | IPR_PCII_IOA_TRANS_TO_OPER)
+
+#define IPR_UPROCI_RESET_ALERT			(0x80000000 >> 7)
+#define IPR_UPROCI_IO_DEBUG_ALERT			(0x80000000 >> 9)
+
+#define IPR_LDUMP_MAX_LONG_ACK_DELAY_IN_USEC		200000	/* 200 ms */
+#define IPR_LDUMP_MAX_SHORT_ACK_DELAY_IN_USEC		200000	/* 200 ms */
+
+/*
+ * Dump literals
+ */
+#define IPR_MAX_IOA_DUMP_SIZE				(4 * 1024 * 1024)
+#define IPR_NUM_SDT_ENTRIES				511
+#define IPR_MAX_NUM_DUMP_PAGES	((IPR_MAX_IOA_DUMP_SIZE / PAGE_SIZE) + 1)
+
+/*
+ * Misc literals
+ */
+#define IPR_NUM_IOADL_ENTRIES			IPR_MAX_SGLIST
+
+/*
+ * Adapter interface types
+ */
+
+struct ipr_res_addr {
+	u8 reserved;
+	u8 bus;
+	u8 target;
+	u8 lun;
+#define IPR_GET_PHYS_LOC(res_addr) \
+	(((res_addr).bus << 16) | ((res_addr).target << 8) | (res_addr).lun)
+}__attribute__((packed, aligned (4)));
+
+struct ipr_std_inq_vpids {
+	u8 vendor_id[IPR_VENDOR_ID_LEN];
+	u8 product_id[IPR_PROD_ID_LEN];
+}__attribute__((packed));
+
+struct ipr_std_inq_data {
+	u8 peri_qual_dev_type;
+#define IPR_STD_INQ_PERI_QUAL(peri) ((peri) >> 5)
+#define IPR_STD_INQ_PERI_DEV_TYPE(peri) ((peri) & 0x1F)
+
+	u8 removeable_medium_rsvd;
+#define IPR_STD_INQ_REMOVEABLE_MEDIUM 0x80
+
+#define IPR_IS_DASD_DEVICE(std_inq) \
+((IPR_STD_INQ_PERI_DEV_TYPE((std_inq).peri_qual_dev_type) == TYPE_DISK) && \
+!(((std_inq).removeable_medium_rsvd) & IPR_STD_INQ_REMOVEABLE_MEDIUM))
+
+#define IPR_IS_SES_DEVICE(std_inq) \
+(IPR_STD_INQ_PERI_DEV_TYPE((std_inq).peri_qual_dev_type) == TYPE_ENCLOSURE)
+
+	u8 version;
+	u8 aen_naca_fmt;
+	u8 additional_len;
+	u8 sccs_rsvd;
+	u8 bq_enc_multi;
+	u8 sync_cmdq_flags;
+
+	struct ipr_std_inq_vpids vpids;
+
+	u8 ros_rsvd_ram_rsvd[4];
+
+	u8 serial_num[IPR_SERIAL_NUM_LEN];
+}__attribute__ ((packed));
+
+struct ipr_config_table_entry {
+	u8 service_level;
+	u8 array_id;
+	u8 flags;
+#define IPR_IS_IOA_RESOURCE	0x80
+#define IPR_IS_ARRAY_MEMBER 0x20
+#define IPR_IS_HOT_SPARE	0x10
+
+	u8 rsvd_subtype;
+#define IPR_RES_SUBTYPE(res) (((res)->cfgte.rsvd_subtype) & 0x0f)
+#define IPR_SUBTYPE_AF_DASD			0
+#define IPR_SUBTYPE_GENERIC_SCSI	1
+#define IPR_SUBTYPE_VOLUME_SET		2
+
+	struct ipr_res_addr res_addr;
+	u32 res_handle;
+	u32 reserved4[2];
+	struct ipr_std_inq_data std_inq_data;
+}__attribute__ ((packed, aligned (4)));
+
+struct ipr_config_table_hdr {
+	u8 num_entries;
+	u8 flags;
+#define IPR_UCODE_DOWNLOAD_REQ	0x10
+	u16 reserved;
+}__attribute__((packed, aligned (4)));
+
+struct ipr_config_table {
+	struct ipr_config_table_hdr hdr;
+	struct ipr_config_table_entry dev[IPR_MAX_PHYSICAL_DEVS];
+}__attribute__((packed, aligned (4)));
+
+struct ipr_hostrcb_cfg_ch_not {
+	struct ipr_config_table_entry cfgte;
+	u8 reserved[936];
+}__attribute__((packed, aligned (4)));
+
+struct ipr_supported_device {
+	u16 data_length;
+	u8 reserved;
+	u8 num_records;
+	struct ipr_std_inq_vpids vpids;
+	u8 reserved2[16];
+}__attribute__((packed, aligned (4)));
+
+/* Command packet structure */
+struct ipr_cmd_pkt {
+	u16 reserved;		/* Reserved by IOA */
+	u8 request_type;
+#define IPR_RQTYPE_SCSICDB		0x00
+#define IPR_RQTYPE_IOACMD		0x01
+#define IPR_RQTYPE_HCAM			0x02
+
+	u8 luntar_luntrn;
+
+	u8 flags_hi;
+#define IPR_FLAGS_HI_WRITE_NOT_READ		0x80
+#define IPR_FLAGS_HI_NO_ULEN_CHK		0x20
+#define IPR_FLAGS_HI_SYNC_OVERRIDE		0x10
+#define IPR_FLAGS_HI_SYNC_COMPLETE		0x08
+#define IPR_FLAGS_HI_NO_LINK_DESC		0x04
+
+	u8 flags_lo;
+#define IPR_FLAGS_LO_ALIGNED_BFR		0x20
+#define IPR_FLAGS_LO_DELAY_AFTER_RST	0x10
+#define IPR_FLAGS_LO_UNTAGGED_TASK		0x00
+#define IPR_FLAGS_LO_SIMPLE_TASK		0x02
+#define IPR_FLAGS_LO_ORDERED_TASK		0x04
+#define IPR_FLAGS_LO_HEAD_OF_Q_TASK		0x06
+#define IPR_FLAGS_LO_ACA_TASK			0x08
+
+	u8 cdb[16];
+	u16 timeout;
+}__attribute__ ((packed, aligned(4)));
+
+/* IOA Request Control Block    128 bytes  */
+struct ipr_ioarcb {
+	u32 ioarcb_host_pci_addr;
+	u32 reserved;
+	u32 res_handle;
+	u32 host_response_handle;
+	u32 reserved1;
+	u32 reserved2;
+	u32 reserved3;
+
+	u32 write_data_transfer_length;
+	u32 read_data_transfer_length;
+	u32 write_ioadl_addr;
+	u32 write_ioadl_len;
+	u32 read_ioadl_addr;
+	u32 read_ioadl_len;
+
+	u32 ioasa_host_pci_addr;
+	u16 ioasa_len;
+	u16 reserved4;
+
+	struct ipr_cmd_pkt cmd_pkt;
+
+	u32 add_cmd_parms_len;
+	u32 add_cmd_parms[10];
+}__attribute__((packed, aligned (4)));
+
+struct ipr_ioadl_desc {
+	u32 flags_and_data_len;
+#define IPR_IOADL_FLAGS_MASK		0xff000000
+#define IPR_IOADL_GET_FLAGS(x) (be32_to_cpu(x) & IPR_IOADL_FLAGS_MASK)
+#define IPR_IOADL_DATA_LEN_MASK		0x00ffffff
+#define IPR_IOADL_GET_DATA_LEN(x) (be32_to_cpu(x) & IPR_IOADL_DATA_LEN_MASK)
+#define IPR_IOADL_FLAGS_READ		0x48000000
+#define IPR_IOADL_FLAGS_READ_LAST	0x49000000
+#define IPR_IOADL_FLAGS_WRITE		0x68000000
+#define IPR_IOADL_FLAGS_WRITE_LAST	0x69000000
+#define IPR_IOADL_FLAGS_LAST		0x01000000
+
+	u32 address;
+}__attribute__((packed, aligned (8)));
+
+struct ipr_ioasa_vset {
+	u32 failing_lba_hi;
+	u32 failing_lba_lo;
+	u32 ioa_data[22];
+}__attribute__((packed, aligned (4)));
+
+struct ipr_ioasa_af_dasd {
+	u32 failing_lba;
+}__attribute__((packed, aligned (4)));
+
+struct ipr_ioasa_gpdd {
+	u8 device_end_state;
+	u8 device_bus_phase;
+	u16 reserved;
+	u32 ioa_data[23];
+}__attribute__((packed, aligned (4)));
+
+struct ipr_ioasa_raw {
+	u32 ioa_data[24];
+}__attribute__((packed, aligned (4)));
+
+struct ipr_ioasa {
+	u32 ioasc;
+#define IPR_IOASC_SENSE_KEY(ioasc) ((ioasc) >> 24)
+#define IPR_IOASC_SENSE_CODE(ioasc) (((ioasc) & 0x00ff0000) >> 16)
+#define IPR_IOASC_SENSE_QUAL(ioasc) (((ioasc) & 0x0000ff00) >> 8)
+#define IPR_IOASC_SENSE_STATUS(ioasc) ((ioasc) & 0x000000ff)
+
+	u16 ret_stat_len;	/* Length of the returned IOASA */
+
+	u16 avail_stat_len;	/* Total Length of status available. */
+
+	u32 residual_data_len;	/* number of bytes in the host data */
+	/* buffers that were not used by the IOARCB command. */
+
+	u32 ilid;
+#define IPR_NO_ILID			0
+#define IPR_DRIVER_ILID		0xffffffff
+
+	u32 fd_ioasc;
+
+	u32 fd_phys_locator;
+
+	u32 fd_res_handle;
+
+	u32 ioasc_specific;	/* status code specific field */
+#define IPR_IOASC_SPECIFIC_MASK		0x00ffffff
+#define IPR_FIELD_POINTER_VALID		(0x80000000 >> 8)
+#define IPR_FIELD_POINTER_MASK		0x0000ffff
+
+	union {
+		struct ipr_ioasa_vset vset;
+		struct ipr_ioasa_af_dasd dasd;
+		struct ipr_ioasa_gpdd gpdd;
+		struct ipr_ioasa_raw raw;
+	};
+}__attribute__((packed, aligned (4)));
+
+struct ipr_mode_parm_hdr {
+	u8 length;
+	u8 medium_type;
+	u8 device_spec_parms;
+	u8 block_desc_len;
+}__attribute__((packed));
+
+struct ipr_mode_pages {
+	struct ipr_mode_parm_hdr hdr;
+	u8 data[255 - sizeof(struct ipr_mode_parm_hdr)];
+}__attribute__((packed));
+
+struct ipr_mode_page_hdr {
+	u8 ps_page_code;
+#define IPR_MODE_PAGE_PS	0x80
+#define IPR_GET_MODE_PAGE_CODE(hdr) ((hdr)->ps_page_code & 0x3F)
+	u8 page_length;
+}__attribute__ ((packed));
+
+struct ipr_dev_bus_entry {
+	struct ipr_res_addr res_addr;
+	u8 flags;
+#define IPR_SCSI_ATTR_ENABLE_QAS			0x80
+#define IPR_SCSI_ATTR_DISABLE_QAS			0x40
+#define IPR_SCSI_ATTR_QAS_MASK				0xC0
+#define IPR_SCSI_ATTR_ENABLE_TM				0x20
+#define IPR_SCSI_ATTR_NO_TERM_PWR			0x10
+#define IPR_SCSI_ATTR_TM_SUPPORTED			0x08
+#define IPR_SCSI_ATTR_LVD_TO_SE_NOT_ALLOWED	0x04
+
+	u8 scsi_id;
+	u8 bus_width;
+	u8 extended_reset_delay;
+#define IPR_EXTENDED_RESET_DELAY	7
+
+	u32 max_xfer_rate;
+
+	u8 spinup_delay;
+	u8 reserved3;
+	u16 reserved4;
+}__attribute__((packed, aligned (4)));
+
+struct ipr_mode_page28 {
+	struct ipr_mode_page_hdr hdr;
+	u8 num_entries;
+	u8 entry_length;
+	struct ipr_dev_bus_entry bus[0];
+}__attribute__((packed));
+
+struct ipr_ioa_vpd {
+	struct ipr_std_inq_data std_inq_data;
+	u8 ascii_part_num[12];
+	u8 reserved[40];
+	u8 ascii_plant_code[4];
+}__attribute__((packed));
+
+struct ipr_inquiry_page3 {
+	u8 peri_qual_dev_type;
+	u8 page_code;
+	u8 reserved1;
+	u8 page_length;
+	u8 ascii_len;
+	u8 reserved2[3];
+	u8 load_id[4];
+	u8 major_release;
+	u8 card_type;
+	u8 minor_release[2];
+	u8 ptf_number[4];
+	u8 patch_number[4];
+}__attribute__((packed));
+
+struct ipr_hostrcb_device_data_entry {
+	struct ipr_std_inq_vpids dev_vpids;
+	u8 dev_sn[IPR_SERIAL_NUM_LEN];
+	struct ipr_res_addr dev_res_addr;
+	struct ipr_std_inq_vpids new_dev_vpids;
+	u8 new_dev_sn[IPR_SERIAL_NUM_LEN];
+	struct ipr_std_inq_vpids ioa_last_with_dev_vpids;
+	u8 ioa_last_with_dev_sn[IPR_SERIAL_NUM_LEN];
+	struct ipr_std_inq_vpids cfc_last_with_dev_vpids;
+	u8 cfc_last_with_dev_sn[IPR_SERIAL_NUM_LEN];
+	u32 ioa_data[5];
+}__attribute__((packed, aligned (4)));
+
+struct ipr_hostrcb_array_data_entry {
+	struct ipr_std_inq_vpids vpids;
+	u8 serial_num[IPR_SERIAL_NUM_LEN];
+	struct ipr_res_addr expected_dev_res_addr;
+	struct ipr_res_addr dev_res_addr;
+}__attribute__((packed, aligned (4)));
+
+struct ipr_hostrcb_type_ff_error {
+	u32 ioa_data[246];
+}__attribute__((packed, aligned (4)));
+
+struct ipr_hostrcb_type_01_error {
+	u32 seek_counter;
+	u32 read_counter;
+	u8 sense_data[32];
+	u32 ioa_data[236];
+}__attribute__((packed, aligned (4)));
+
+struct ipr_hostrcb_type_02_error {
+	struct ipr_std_inq_vpids ioa_vpids;
+	u8 ioa_sn[IPR_SERIAL_NUM_LEN];
+	struct ipr_std_inq_vpids cfc_vpids;
+	u8 cfc_sn[IPR_SERIAL_NUM_LEN];
+	struct ipr_std_inq_vpids ioa_last_attached_to_cfc_vpids;
+	u8 ioa_last_attached_to_cfc_sn[IPR_SERIAL_NUM_LEN];
+	struct ipr_std_inq_vpids cfc_last_attached_to_ioa_vpids;
+	u8 cfc_last_attached_to_ioa_sn[IPR_SERIAL_NUM_LEN];
+	u32 ioa_data[3];
+	u8 reserved[844];
+}__attribute__((packed, aligned (4)));
+
+struct ipr_hostrcb_type_03_error {
+	struct ipr_std_inq_vpids ioa_vpids;
+	u8 ioa_sn[IPR_SERIAL_NUM_LEN];
+	struct ipr_std_inq_vpids cfc_vpids;
+	u8 cfc_sn[IPR_SERIAL_NUM_LEN];
+	u32 errors_detected;
+	u32 errors_logged;
+	u8 ioa_data[12];
+	struct ipr_hostrcb_device_data_entry dev_entry[3];
+	u8 reserved[444];
+}__attribute__((packed, aligned (4)));
+
+struct ipr_hostrcb_type_04_error {
+	struct ipr_std_inq_vpids ioa_vpids;
+	u8 ioa_sn[IPR_SERIAL_NUM_LEN];
+	struct ipr_std_inq_vpids cfc_vpids;
+	u8 cfc_sn[IPR_SERIAL_NUM_LEN];
+	u8 ioa_data[12];
+	struct ipr_hostrcb_array_data_entry array_member[10];
+	u32 exposed_mode_adn;
+	u32 array_id;
+	struct ipr_std_inq_vpids incomp_dev_vpids;
+	u8 incomp_dev_sn[IPR_SERIAL_NUM_LEN];
+	u32 ioa_data2;
+	struct ipr_hostrcb_array_data_entry array_member2[8];
+	struct ipr_res_addr last_func_vset_res_addr;
+	u8 vset_serial_num[IPR_SERIAL_NUM_LEN];
+	u8 protection_level[8];
+	u8 reserved[124];
+}__attribute__((packed, aligned (4)));
+
+struct ipr_hostrcb_error {
+	u32 failing_dev_ioasc;
+	struct ipr_res_addr failing_dev_res_addr;
+	u32 failing_dev_res_handle;
+	u32 prc;
+	union {
+		struct ipr_hostrcb_type_ff_error type_ff_error;
+		struct ipr_hostrcb_type_01_error type_01_error;
+		struct ipr_hostrcb_type_02_error type_02_error;
+		struct ipr_hostrcb_type_03_error type_03_error;
+		struct ipr_hostrcb_type_04_error type_04_error;
+	};
+}__attribute__((packed, aligned (4)));
+
+struct ipr_hostrcb_raw {
+	u32 data[sizeof(struct ipr_hostrcb_error)/sizeof(u32)];
+}__attribute__((packed, aligned (4)));
+
+struct ipr_hostrcb {
+	u8 op_code;
+#define IPR_HOST_RCB_OP_CODE_CONFIG_CHANGE			0xE1
+#define IPR_HOST_RCB_OP_CODE_LOG_DATA				0xE2
+
+	u8 notify_type;
+#define IPR_HOST_RCB_NOTIF_TYPE_EXISTING_CHANGED	0x00
+#define IPR_HOST_RCB_NOTIF_TYPE_NEW_ENTRY			0x01
+#define IPR_HOST_RCB_NOTIF_TYPE_REM_ENTRY			0x02
+#define IPR_HOST_RCB_NOTIF_TYPE_ERROR_LOG_ENTRY		0x10
+#define IPR_HOST_RCB_NOTIF_TYPE_INFORMATION_ENTRY	0x11
+
+	u8 notifications_lost;
+#define IPR_HOST_RCB_NO_NOTIFICATIONS_LOST			0
+#define IPR_HOST_RCB_NOTIFICATIONS_LOST				0x80
+
+	u8 flags;
+#define IPR_HOSTRCB_INTERNAL_OPER	0x80
+#define IPR_HOSTRCB_ERR_RESP_SENT	0x40
+
+	u8 overlay_id;
+#define IPR_HOST_RCB_OVERLAY_ID_1				0x01
+#define IPR_HOST_RCB_OVERLAY_ID_2				0x02
+#define IPR_HOST_RCB_OVERLAY_ID_3				0x03
+#define IPR_HOST_RCB_OVERLAY_ID_4				0x04
+#define IPR_HOST_RCB_OVERLAY_ID_6				0x06
+#define IPR_HOST_RCB_OVERLAY_ID_DEFAULT			0xFF
+
+	u8 reserved1[3];
+	u32 ilid;
+	u32 time_since_last_ioa_reset;
+	u32 reserved2;
+	u32 length;
+
+	union {
+		struct ipr_hostrcb_error error;
+		struct ipr_hostrcb_cfg_ch_not ccn;
+		struct ipr_hostrcb_raw raw;
+	};
+
+	/* Driver added data */
+	u32 hostrcb_dma;
+	struct list_head queue;
+}__attribute__((packed, aligned (4)));
+
+#define IPR_HOSTRCB_SZ offsetof(struct ipr_hostrcb, hostrcb_dma)
+
+/* IPR smart dump table structures */
+struct ipr_sdt_entry {
+	u32 bar_str_offset;
+	u32 end_offset;
+	u8 entry_byte;
+	u8 reserved[3];
+
+	u8 flags;
+#define IPR_SDT_ENDIAN		0x80
+#define IPR_SDT_VALID_ENTRY	0x20
+
+	u8 resv;
+	u16 priority;
+}__attribute__((packed, aligned (4)));
+
+struct ipr_sdt_header {
+	u32 state;
+	u32 num_entries;
+	u32 num_entries_used;
+	u32 dump_size;
+}__attribute__((packed, aligned (4)));
+
+struct ipr_sdt {
+	struct ipr_sdt_header hdr;
+	struct ipr_sdt_entry entry[IPR_NUM_SDT_ENTRIES];
+}__attribute__((packed, aligned (4)));
+
+struct ipr_uc_sdt {
+	struct ipr_sdt_header hdr;
+	struct ipr_sdt_entry entry[1];
+}__attribute__((packed, aligned (4)));
+
+/*
+ * Driver types
+ */
+struct ipr_bus_attributes {
+	u8 bus;
+	u8 qas_enabled;
+	u8 bus_width;
+	u8 reserved;
+	u32 max_xfer_rate;
+};
+
+struct ipr_resource_entry {
+	struct ipr_config_table_entry cfgte;
+	u8 needs_sync_complete:1;
+	u8 in_erp:1;
+	u8 add_to_ml:1;
+	u8 del_from_ml:1;
+	u8 resetting_device:1;
+	u8 tcq_active:1;
+
+	int qdepth;
+	struct scsi_device *sdev;
+	struct list_head queue;
+};
+
+struct ipr_resource_hdr {
+	u16 num_entries;
+	u16 reserved;
+};
+
+struct ipr_resource_table {
+	struct ipr_resource_hdr hdr;
+	struct ipr_resource_entry dev[IPR_MAX_PHYSICAL_DEVS];
+};
+
+struct ipr_misc_cbs {
+	struct ipr_ioa_vpd ioa_vpd;
+	struct ipr_inquiry_page3 page3_data;
+	struct ipr_mode_pages mode_pages;
+	struct ipr_supported_device supp_dev;
+};
+
+struct ipr_interrupts {
+	unsigned long set_interrupt_mask_reg;
+	unsigned long clr_interrupt_mask_reg;
+	unsigned long sense_interrupt_mask_reg;
+	unsigned long clr_interrupt_reg;
+
+	unsigned long sense_interrupt_reg;
+	unsigned long ioarrin_reg;
+	unsigned long sense_uproc_interrupt_reg;
+	unsigned long set_uproc_interrupt_reg;
+	unsigned long clr_uproc_interrupt_reg;
+};
+
+struct ipr_chip_cfg_t {
+	u32 mailbox;
+	u8 cache_line_size;
+	struct ipr_interrupts regs;
+};
+
+enum ipr_shutdown_type {
+	IPR_SHUTDOWN_NORMAL = 0x00,
+	IPR_SHUTDOWN_PREPARE_FOR_NORMAL = 0x40,
+	IPR_SHUTDOWN_ABBREV = 0x80,
+	IPR_SHUTDOWN_NONE = 0x100
+};
+
+struct ipr_trace_entry {
+	u32 time;
+
+	u8 op_code;
+	u8 type;
+#define IPR_TRACE_START			0x00
+#define IPR_TRACE_FINISH		0xff
+	u16 cmd_index;
+
+	u32 res_handle;
+	union {
+		u32 ioasc;
+		u32 add_data;
+		u32 res_addr;
+	};
+};
+
+struct ipr_sglist {
+	u32 order;
+	u32 num_sg;
+	u32 buffer_len;
+	struct scatterlist scatterlist[1];
+};
+
+enum ipr_sdt_state {
+	INACTIVE,
+	WAIT_FOR_DUMP,
+	GET_DUMP,
+	ABORT_DUMP,
+	DUMP_OBTAINED
+};
+
+/* Per-controller data */
+struct ipr_ioa_cfg {
+	char eye_catcher[8];
+#define IPR_EYECATCHER			"iprcfg"
+
+	struct list_head queue;
+
+	u8 allow_interrupts:1;
+	u8 in_reset_reload:1;
+	u8 in_ioa_bringdown:1;
+	u8 ioa_unit_checked:1;
+	u8 ioa_is_dead:1;
+	u8 dump_taken:1;
+	u8 allow_cmds:1;
+	u8 allow_ml_add_del:1;
+
+	u16 type; /* CCIN of the card */
+
+	u8 log_level;
+#define IPR_MAX_LOG_LEVEL			4
+#define IPR_DEFAULT_LOG_LEVEL		2
+
+#define IPR_NUM_TRACE_INDEX_BITS	8
+#define IPR_NUM_TRACE_ENTRIES		(1 << IPR_NUM_TRACE_INDEX_BITS)
+#define IPR_TRACE_SIZE	(sizeof(struct ipr_trace_entry) * IPR_NUM_TRACE_ENTRIES)
+	char trace_start[8];
+#define IPR_TRACE_START_LABEL			"trace"
+	struct ipr_trace_entry *trace;
+	u32 trace_index:IPR_NUM_TRACE_INDEX_BITS;
+
+	/*
+	 * Queue for free command blocks
+	 */
+	char ipr_free_label[8];
+#define IPR_FREEQ_LABEL			"free-q"
+	struct list_head free_q;
+
+	/*
+	 * Queue for command blocks outstanding to the adapter
+	 */
+	char ipr_pending_label[8];
+#define IPR_PENDQ_LABEL			"pend-q"
+	struct list_head pending_q;
+
+	char cfg_table_start[8];
+#define IPR_CFG_TBL_START		"cfg"
+	struct ipr_config_table *cfg_table;
+	u32 cfg_table_dma;
+
+	char resource_table_label[8];
+#define IPR_RES_TABLE_LABEL		"res_tbl"
+	struct ipr_resource_entry *res_entries;
+	struct list_head free_res_q;
+	struct list_head used_res_q;
+
+	char ipr_hcam_label[8];
+#define IPR_HCAM_LABEL			"hcams"
+	struct ipr_hostrcb *hostrcb[IPR_NUM_HCAMS];
+	u32 hostrcb_dma[IPR_NUM_HCAMS];
+	struct list_head hostrcb_free_q;
+	struct list_head hostrcb_pending_q;
+
+	u32 *host_rrq;
+	u32 host_rrq_dma;
+#define IPR_HRRQ_REQ_RESP_HANDLE_MASK	0xfffffffc
+#define IPR_HRRQ_RESP_BIT_SET			0x00000002
+#define IPR_HRRQ_TOGGLE_BIT				0x00000001
+#define IPR_HRRQ_REQ_RESP_HANDLE_SHIFT	2
+	volatile u32 *hrrq_start;
+	volatile u32 *hrrq_end;
+	volatile u32 *hrrq_curr;
+	volatile u32 toggle_bit;
+
+	struct ipr_bus_attributes bus_attr[IPR_MAX_NUM_BUSES];
+
+	const struct ipr_chip_cfg_t *chip_cfg;
+
+	unsigned long hdw_dma_regs;	/* iomapped PCI memory space */
+	unsigned long hdw_dma_regs_pci;	/* raw PCI memory space */
+	unsigned long ioa_mailbox;
+	struct ipr_interrupts regs;
+
+	u32 pci_cfg_buf[64];
+	u16 saved_pcix_cmd_reg;
+	u16 reset_retries;
+
+	u32 errors_logged;
+
+	struct Scsi_Host *host;
+	struct pci_dev *pdev;
+	struct ipr_sglist *ucode_sglist;
+	struct ipr_mode_pages *saved_mode_pages;
+	u8 saved_mode_page_len;
+
+	struct work_struct work_q;
+
+	wait_queue_head_t reset_wait_q;
+
+	struct ipr_dump *dump;
+	enum ipr_sdt_state sdt_state;
+
+	struct ipr_misc_cbs *vpd_cbs;
+	u32 vpd_cbs_dma;
+
+	struct pci_pool *ipr_cmd_pool;
+
+	struct ipr_cmnd *reset_cmd;
+
+	char ipr_cmd_label[8];
+#define IPR_CMD_LABEL		"ipr_cmnd"
+	struct ipr_cmnd *ipr_cmnd_list[IPR_NUM_CMD_BLKS];
+	u32 ipr_cmnd_list_dma[IPR_NUM_CMD_BLKS];
+};
+
+struct ipr_cmnd {
+	struct ipr_ioarcb ioarcb;
+	struct ipr_ioasa ioasa;
+	struct ipr_ioadl_desc ioadl[IPR_NUM_IOADL_ENTRIES];
+	struct list_head queue;
+	struct scsi_cmnd *scsi_cmd;
+	struct completion completion;
+	struct timer_list timer;
+	void (*done) (struct ipr_cmnd *);
+	int (*job_step) (struct ipr_cmnd *);
+	u16 cmd_index;
+	u8 sense_buffer[SCSI_SENSE_BUFFERSIZE];
+	dma_addr_t sense_buffer_dma;
+	unsigned short dma_use_sg;
+	dma_addr_t dma_handle;
+	union {
+		enum ipr_shutdown_type shutdown_type;
+		struct ipr_hostrcb *hostrcb;
+		unsigned long time_left;
+		unsigned long scratch;
+		struct ipr_resource_entry *res;
+		struct ipr_cmnd *sibling;
+	};
+
+	struct ipr_ioa_cfg *ioa_cfg;
+};
+
+struct ipr_ses_table_entry {
+	char product_id[17];
+	char compare_product_id_byte[17];
+	u32 max_bus_speed_limit;	/* MB/sec limit for this backplane */
+};
+
+struct ipr_dump_header {
+	u32 eye_catcher;
+#define IPR_DUMP_EYE_CATCHER		0xC5D4E3F2
+	u32 len;
+	u32 num_entries;
+	u32 first_entry_offset;
+	u32 status;
+#define IPR_DUMP_STATUS_SUCCESS			0
+#define IPR_DUMP_STATUS_QUAL_SUCCESS		2
+#define IPR_DUMP_STATUS_FAILED			0xffffffff
+	u32 os;
+#define IPR_DUMP_OS_LINUX	0x4C4E5558
+	u32 driver_name;
+#define IPR_DUMP_DRIVER_NAME	0x49505232
+}__attribute__((packed, aligned (4)));
+
+struct ipr_dump_entry_header {
+	u32 eye_catcher;
+#define IPR_DUMP_EYE_CATCHER		0xC5D4E3F2
+	u32 len;
+	u32 num_elems;
+	u32 offset;
+	u32 data_type;
+#define IPR_DUMP_DATA_TYPE_ASCII	0x41534349
+#define IPR_DUMP_DATA_TYPE_BINARY	0x42494E41
+	u32 id;
+#define IPR_DUMP_IOA_DUMP_ID		0x494F4131
+#define IPR_DUMP_LOCATION_ID		0x4C4F4341
+#define IPR_DUMP_TRACE_ID		0x54524143
+#define IPR_DUMP_DRIVER_VERSION_ID	0x44525652
+#define IPR_DUMP_DRIVER_TYPE_ID	0x54595045
+#define IPR_DUMP_IOA_CTRL_BLK		0x494F4342
+#define IPR_DUMP_PEND_OPS		0x414F5053
+	u32 status;
+}__attribute__((packed, aligned (4)));
+
+struct ipr_dump_location_entry {
+	struct ipr_dump_entry_header hdr;
+	u8 location[BUS_ID_SIZE];
+}__attribute__((packed));
+
+struct ipr_dump_trace_entry {
+	struct ipr_dump_entry_header hdr;
+	u32 trace[IPR_TRACE_SIZE / sizeof(u32)];
+}__attribute__((packed, aligned (4)));
+
+struct ipr_dump_version_entry {
+	struct ipr_dump_entry_header hdr;
+	u8 version[sizeof(IPR_DRIVER_VERSION)];
+};
+
+struct ipr_dump_ioa_type_entry {
+	struct ipr_dump_entry_header hdr;
+	u32 type;
+	u32 fw_version;
+};
+
+struct ipr_driver_dump {
+	struct ipr_dump_header hdr;
+	struct ipr_dump_version_entry version_entry;
+	struct ipr_dump_location_entry location_entry;
+	struct ipr_dump_ioa_type_entry ioa_type_entry;
+	struct ipr_dump_trace_entry trace_entry;
+}__attribute__((packed));
+
+struct ipr_ioa_dump {
+	struct ipr_dump_entry_header hdr;
+	struct ipr_sdt sdt;
+	u32 *ioa_data[IPR_MAX_NUM_DUMP_PAGES];
+	u32 reserved;
+	u32 next_page_index;
+	u32 page_offset;
+	u32 format;
+#define IPR_SDT_FMT2		2
+#define IPR_SDT_UNKNOWN		3
+}__attribute__((packed, aligned (4)));
+
+struct ipr_dump {
+	struct kobject kobj;
+	struct ipr_ioa_cfg *ioa_cfg;
+	struct ipr_driver_dump driver_dump;
+	struct ipr_ioa_dump ioa_dump;
+};
+
+struct ipr_error_table_t {
+	u32 ioasc;
+	int log_ioasa;
+	int log_hcam;
+	char *error;
+};
+
+struct ipr_software_inq_lid_info {
+    u32  load_id;
+    u32  timestamp[3];
+}__attribute__((packed, aligned (4)));
+
+struct ipr_ucode_image_header {
+    u32 header_length;
+    u32 lid_table_offset;
+    u8 major_release;
+    u8 card_type;
+    u8 minor_release[2];
+    u8 reserved[20];
+    char eyecatcher[16];
+    u32 num_lids;
+    struct ipr_software_inq_lid_info lid[1];
+}__attribute__((packed, aligned (4)));
+
+/*
+ * Macros
+ */
+#if IPR_DEBUG
+#define IPR_DBG_CMD(CMD) do { CMD; } while (0)
+#else
+#define IPR_DBG_CMD(CMD)
+#endif
+
+#define ipr_breakpoint_data KERN_ERR IPR_NAME\
+": %s: %s: Line: %d ioa_cfg: %p\n", __FILE__, \
+__FUNCTION__, __LINE__, ioa_cfg
+
+#if defined(CONFIG_KDB) && !defined(CONFIG_PPC_ISERIES)
+#define ipr_breakpoint {printk(ipr_breakpoint_data); KDB_ENTER();}
+#define ipr_breakpoint_or_die {printk(ipr_breakpoint_data); KDB_ENTER();}
+#else
+#define ipr_breakpoint
+#define ipr_breakpoint_or_die panic(ipr_breakpoint_data)
+#endif
+
+#ifdef CONFIG_SCSI_IPR_TRACE
+#define ipr_create_trace_file(kobj, attr) sysfs_create_bin_file(kobj, attr)
+#define ipr_remove_trace_file(kobj, attr) sysfs_remove_bin_file(kobj, attr)
+#else
+#define ipr_create_trace_file(kobj, attr) 0
+#define ipr_remove_trace_file(kobj, attr) do { } while(0)
+#endif
+
+#ifdef CONFIG_SCSI_IPR_DUMP
+#define ipr_create_dump_file(kobj, attr) sysfs_create_bin_file(kobj, attr)
+#define ipr_remove_dump_file(kobj, attr) sysfs_remove_bin_file(kobj, attr)
+#else
+#define ipr_create_dump_file(kobj, attr) 0
+#define ipr_remove_dump_file(kobj, attr) do { } while(0)
+#endif
+
+/*
+ * Error logging macros
+ */
+#define ipr_err(...) printk(KERN_ERR IPR_NAME ": "__VA_ARGS__)
+#define ipr_info(...) printk(KERN_INFO IPR_NAME ": "__VA_ARGS__)
+#define ipr_crit(...) printk(KERN_CRIT IPR_NAME ": "__VA_ARGS__)
+#define ipr_warn(...) printk(KERN_WARNING IPR_NAME": "__VA_ARGS__)
+#define ipr_dbg(...) IPR_DBG_CMD(printk(KERN_INFO IPR_NAME ": "__VA_ARGS__))
+
+#define ipr_sdev_printk(level, sdev, fmt, ...) \
+	printk(level IPR_NAME ": %d:%d:%d:%d: " fmt, sdev->host->host_no, \
+		sdev->channel, sdev->id, sdev->lun, ##__VA_ARGS__)
+
+#define ipr_sdev_err(sdev, fmt, ...) \
+	ipr_sdev_printk(KERN_ERR, sdev, fmt, ##__VA_ARGS__)
+
+#define ipr_sdev_info(sdev, fmt, ...) \
+	ipr_sdev_printk(KERN_INFO, sdev, fmt, ##__VA_ARGS__)
+
+#define ipr_sdev_dbg(sdev, fmt, ...) \
+	IPR_DBG_CMD(ipr_sdev_printk(KERN_INFO, sdev, fmt, ##__VA_ARGS__))
+
+#define ipr_res_printk(level, ioa_cfg, res, fmt, ...) \
+	printk(level IPR_NAME ": %d:%d:%d:%d: " fmt, ioa_cfg->host->host_no, \
+		res.bus, res.target, res.lun, ##__VA_ARGS__)
+
+#define ipr_res_err(ioa_cfg, res, fmt, ...) \
+	ipr_res_printk(KERN_ERR, ioa_cfg, res, fmt, ##__VA_ARGS__)
+#define ipr_res_dbg(ioa_cfg, res, fmt, ...) \
+	IPR_DBG_CMD(ipr_res_printk(KERN_INFO, ioa_cfg, res, fmt, ##__VA_ARGS__))
+
+#define ipr_trace ipr_dbg("%s: %s: Line: %d\n",\
+	__FILE__, __FUNCTION__, __LINE__)
+
+#if IPR_DBG_TRACE
+#define ENTER printk(KERN_INFO IPR_NAME": Entering %s\n", __FUNCTION__)
+#define LEAVE printk(KERN_INFO IPR_NAME": Leaving %s\n", __FUNCTION__)
+#else
+#define ENTER
+#define LEAVE
+#endif
+
+#define ipr_err_separator \
+ipr_err("----------------------------------------------------------\n")
+
+
+/*
+ * Inlines
+ */
+
+/**
+ * ipr_is_ioa_resource - Determine if a resource is the IOA
+ * @res:	resource entry struct
+ *
+ * Return value:
+ * 	1 if IOA / 0 if not IOA
+ **/
+static inline int ipr_is_ioa_resource(struct ipr_resource_entry *res)
+{
+	return (res->cfgte.flags & IPR_IS_IOA_RESOURCE) ? 1 : 0;
+}
+
+/**
+ * ipr_is_af_dasd_device - Determine if a resource is an AF DASD
+ * @res:	resource entry struct
+ *
+ * Return value:
+ * 	1 if AF DASD / 0 if not AF DASD
+ **/
+static inline int ipr_is_af_dasd_device(struct ipr_resource_entry *res)
+{
+	if (IPR_IS_DASD_DEVICE(res->cfgte.std_inq_data) &&
+	    !ipr_is_ioa_resource(res) &&
+	    IPR_RES_SUBTYPE(res) == IPR_SUBTYPE_AF_DASD)
+		return 1;
+	else
+		return 0;
+}
+
+/**
+ * ipr_is_vset_device - Determine if a resource is a VSET
+ * @res:	resource entry struct
+ *
+ * Return value:
+ * 	1 if VSET / 0 if not VSET
+ **/
+static inline int ipr_is_vset_device(struct ipr_resource_entry *res)
+{
+	if (IPR_IS_DASD_DEVICE(res->cfgte.std_inq_data) &&
+	    !ipr_is_ioa_resource(res) &&
+	    IPR_RES_SUBTYPE(res) == IPR_SUBTYPE_VOLUME_SET)
+		return 1;
+	else
+		return 0;
+}
+
+/**
+ * ipr_is_gscsi - Determine if a resource is a generic scsi resource
+ * @res:	resource entry struct
+ *
+ * Return value:
+ * 	1 if GSCSI / 0 if not GSCSI
+ **/
+static inline int ipr_is_gscsi(struct ipr_resource_entry *res)
+{
+	if (!ipr_is_ioa_resource(res) &&
+	    IPR_RES_SUBTYPE(res) == IPR_SUBTYPE_GENERIC_SCSI)
+		return 1;
+	else
+		return 0;
+}
+
+/**
+ * ipr_is_device - Determine if resource address is that of a device
+ * @res_addr:	resource address struct
+ *
+ * Return value:
+ * 	1 if AF / 0 if not AF
+ **/
+static inline int ipr_is_device(struct ipr_res_addr *res_addr)
+{
+	if ((res_addr->bus < IPR_MAX_NUM_BUSES) &&
+	    (res_addr->target < IPR_MAX_NUM_TARGETS_PER_BUS))
+		return 1;
+
+	return 0;
+}
+
+/**
+ * ipr_sdt_is_fmt2 - Determine if a SDT address is in format 2
+ * @sdt_word:	SDT address
+ *
+ * Return value:
+ * 	1 if format 2 / 0 if not
+ **/
+static inline int ipr_sdt_is_fmt2(u32 sdt_word)
+{
+	u32 bar_sel = IPR_GET_FMT2_BAR_SEL(sdt_word);
+
+	switch (bar_sel) {
+	case IPR_SDT_FMT2_BAR0_SEL:
+	case IPR_SDT_FMT2_BAR1_SEL:
+	case IPR_SDT_FMT2_BAR2_SEL:
+	case IPR_SDT_FMT2_BAR3_SEL:
+	case IPR_SDT_FMT2_BAR4_SEL:
+	case IPR_SDT_FMT2_BAR5_SEL:
+	case IPR_SDT_FMT2_EXP_ROM_SEL:
+		return 1;
+	};
+
+	return 0;
+}
+
+#endif
diff -Nru a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c
--- a/drivers/scsi/libata-core.c	Sun May 16 01:18:33 2004
+++ b/drivers/scsi/libata-core.c	Sun May 16 01:18:33 2004
@@ -34,7 +34,9 @@
 #include <linux/delay.h>
 #include <linux/timer.h>
 #include <linux/interrupt.h>
+#include <linux/completion.h>
 #include <linux/suspend.h>
+#include <linux/workqueue.h>
 #include <scsi/scsi.h>
 #include "scsi.h"
 #include "hosts.h"
@@ -44,23 +46,20 @@
 
 #include "libata.h"
 
-static void atapi_cdb_send(struct ata_port *ap);
 static unsigned int ata_busy_sleep (struct ata_port *ap,
 				    unsigned long tmout_pat,
 			    	    unsigned long tmout);
 static void __ata_dev_select (struct ata_port *ap, unsigned int device);
-#if 0 /* to be used eventually */
-static void ata_qc_push (struct ata_queued_cmd *qc, unsigned int append);
-#endif
-static void ata_dma_complete(struct ata_port *ap, u8 host_stat,
-			     unsigned int done_late);
+static void ata_dma_complete(struct ata_queued_cmd *qc, u8 host_stat);
 static void ata_host_set_pio(struct ata_port *ap);
 static void ata_host_set_udma(struct ata_port *ap);
 static void ata_dev_set_pio(struct ata_port *ap, unsigned int device);
 static void ata_dev_set_udma(struct ata_port *ap, unsigned int device);
 static void ata_set_mode(struct ata_port *ap);
+static int ata_qc_issue_prot(struct ata_queued_cmd *qc);
 
 static unsigned int ata_unique_id = 1;
+static struct workqueue_struct *ata_wq;
 
 MODULE_AUTHOR("Jeff Garzik");
 MODULE_DESCRIPTION("Library module for ATA devices");
@@ -74,13 +73,6 @@
 	"THR_IDLE",
 	"THR_PROBE_SUCCESS",
 	"THR_PROBE_START",
-	"THR_PIO_POLL",
-	"THR_PIO_TMOUT",
-	"THR_PIO",
-	"THR_PIO_LAST",
-	"THR_PIO_LAST_POLL",
-	"THR_PIO_ERR",
-	"THR_PACKET",
 };
 
 /**
@@ -315,8 +307,6 @@
 
 static void ata_tf_to_host(struct ata_port *ap, struct ata_taskfile *tf)
 {
-	init_MUTEX_LOCKED(&ap->sem);
-
 	ap->ops->tf_load(ap, tf);
 
 	ata_exec(ap, tf);
@@ -337,8 +327,6 @@
 
 void ata_tf_to_host_nolock(struct ata_port *ap, struct ata_taskfile *tf)
 {
-	init_MUTEX_LOCKED(&ap->sem);
-
 	ap->ops->tf_load(ap, tf);
 	ap->ops->exec_command(ap, tf);
 }
@@ -440,6 +428,77 @@
 }
 
 /**
+ *	ata_tf_to_fis - Convert ATA taskfile to SATA FIS structure
+ *	@tf: Taskfile to convert
+ *	@fis: Buffer into which data will output
+ *
+ *	Converts a standard ATA taskfile to a Serial ATA
+ *	FIS structure (Register - Host to Device).
+ *
+ *	LOCKING:
+ *	Inherited from caller.
+ */
+
+void ata_tf_to_fis(struct ata_taskfile *tf, u8 *fis, u8 pmp)
+{
+	fis[0] = 0x27;	/* Register - Host to Device FIS */
+	fis[1] = (pmp & 0xf) | (1 << 7); /* Port multiplier number,
+					    bit 7 indicates Command FIS */
+	fis[2] = tf->command;
+	fis[3] = tf->feature;
+
+	fis[4] = tf->lbal;
+	fis[5] = tf->lbam;
+	fis[6] = tf->lbah;
+	fis[7] = tf->device;
+
+	fis[8] = tf->hob_lbal;
+	fis[9] = tf->hob_lbam;
+	fis[10] = tf->hob_lbah;
+	fis[11] = tf->hob_feature;
+
+	fis[12] = tf->nsect;
+	fis[13] = tf->hob_nsect;
+	fis[14] = 0;
+	fis[15] = tf->ctl;
+
+	fis[16] = 0;
+	fis[17] = 0;
+	fis[18] = 0;
+	fis[19] = 0;
+}
+
+/**
+ *	ata_tf_from_fis - Convert SATA FIS to ATA taskfile
+ *	@fis: Buffer from which data will be input
+ *	@tf: Taskfile to output
+ *
+ *	Converts a standard ATA taskfile to a Serial ATA
+ *	FIS structure (Register - Host to Device).
+ *
+ *	LOCKING:
+ *	Inherited from caller.
+ */
+
+void ata_tf_from_fis(u8 *fis, struct ata_taskfile *tf)
+{
+	tf->command	= fis[2];	/* status */
+	tf->feature	= fis[3];	/* error */
+
+	tf->lbal	= fis[4];
+	tf->lbam	= fis[5];
+	tf->lbah	= fis[6];
+	tf->device	= fis[7];
+
+	tf->hob_lbal	= fis[8];
+	tf->hob_lbam	= fis[9];
+	tf->hob_lbah	= fis[10];
+
+	tf->nsect	= fis[12];
+	tf->hob_nsect	= fis[13];
+}
+
+/**
  *	ata_prot_to_cmd - determine which read/write opcodes to use
  *	@protocol: ATA_PROT_xxx taskfile protocol
  *	@lba48: true is lba48 is present
@@ -1096,11 +1155,11 @@
 		ap->host->max_cmd_len = 16;
 
 		/* print device info to dmesg */
-		printk(KERN_INFO "ata%u: dev %u ATA, max %s, %Lu sectors%s\n",
+		printk(KERN_INFO "ata%u: dev %u ATA, max %s, %Lu sectors:%s\n",
 		       ap->id, device,
 		       ata_udma_string(udma_modes),
 		       (unsigned long long)dev->n_sectors,
-		       dev->flags & ATA_DFLAG_LBA48 ? " (lba48)" : "");
+		       dev->flags & ATA_DFLAG_LBA48 ? " lba48" : "");
 	}
 
 	/* ATAPI-specific feature tests */
@@ -1928,20 +1987,20 @@
 static unsigned long ata_pio_poll(struct ata_port *ap)
 {
 	u8 status;
-	unsigned int poll_state = THR_UNKNOWN;
-	unsigned int reg_state = THR_UNKNOWN;
-	const unsigned int tmout_state = THR_PIO_TMOUT;
-
-	switch (ap->thr_state) {
-	case THR_PIO:
-	case THR_PIO_POLL:
-		poll_state = THR_PIO_POLL;
-		reg_state = THR_PIO;
-		break;
-	case THR_PIO_LAST:
-	case THR_PIO_LAST_POLL:
-		poll_state = THR_PIO_LAST_POLL;
-		reg_state = THR_PIO_LAST;
+	unsigned int poll_state = PIO_ST_UNKNOWN;
+	unsigned int reg_state = PIO_ST_UNKNOWN;
+	const unsigned int tmout_state = PIO_ST_TMOUT;
+
+	switch (ap->pio_task_state) {
+	case PIO_ST:
+	case PIO_ST_POLL:
+		poll_state = PIO_ST_POLL;
+		reg_state = PIO_ST;
+		break;
+	case PIO_ST_LAST:
+	case PIO_ST_LAST_POLL:
+		poll_state = PIO_ST_LAST_POLL;
+		reg_state = PIO_ST_LAST;
 		break;
 	default:
 		BUG();
@@ -1950,39 +2009,19 @@
 
 	status = ata_chk_status(ap);
 	if (status & ATA_BUSY) {
-		if (time_after(jiffies, ap->thr_timeout)) {
-			ap->thr_state = tmout_state;
+		if (time_after(jiffies, ap->pio_task_timeout)) {
+			ap->pio_task_state = tmout_state;
 			return 0;
 		}
-		ap->thr_state = poll_state;
+		ap->pio_task_state = poll_state;
 		return ATA_SHORT_PAUSE;
 	}
 
-	ap->thr_state = reg_state;
+	ap->pio_task_state = reg_state;
 	return 0;
 }
 
 /**
- *	ata_pio_start -
- *	@qc:
- *
- *	LOCKING:
- *	spin_lock_irqsave(host_set lock)
- */
-
-static void ata_pio_start (struct ata_queued_cmd *qc)
-{
-	struct ata_port *ap = qc->ap;
-
-	assert(qc->tf.protocol == ATA_PROT_PIO);
-
-	qc->flags |= ATA_QCFLAG_POLL;
-	qc->tf.ctl |= ATA_NIEN;	/* disable interrupts */
-	ata_tf_to_host_nolock(ap, &qc->tf);
-	ata_thread_wake(ap, THR_PIO);
-}
-
-/**
  *	ata_pio_complete -
  *	@ap:
  *
@@ -1992,7 +2031,6 @@
 static void ata_pio_complete (struct ata_port *ap)
 {
 	struct ata_queued_cmd *qc;
-	unsigned long flags;
 	u8 drv_stat;
 
 	/*
@@ -2001,35 +2039,33 @@
 	 * a chk-status or two.  If not, the drive is probably seeking
 	 * or something.  Snooze for a couple msecs, then
 	 * chk-status again.  If still busy, fall back to
-	 * THR_PIO_POLL state.
+	 * PIO_ST_POLL state.
 	 */
 	drv_stat = ata_busy_wait(ap, ATA_BUSY | ATA_DRQ, 10);
 	if (drv_stat & (ATA_BUSY | ATA_DRQ)) {
 		msleep(2);
 		drv_stat = ata_busy_wait(ap, ATA_BUSY | ATA_DRQ, 10);
 		if (drv_stat & (ATA_BUSY | ATA_DRQ)) {
-			ap->thr_state = THR_PIO_LAST_POLL;
-			ap->thr_timeout = jiffies + ATA_TMOUT_PIO;
+			ap->pio_task_state = PIO_ST_LAST_POLL;
+			ap->pio_task_timeout = jiffies + ATA_TMOUT_PIO;
 			return;
 		}
 	}
 
 	drv_stat = ata_wait_idle(ap);
 	if (drv_stat & (ATA_BUSY | ATA_DRQ)) {
-		ap->thr_state = THR_PIO_ERR;
+		ap->pio_task_state = PIO_ST_ERR;
 		return;
 	}
 
 	qc = ata_qc_from_tag(ap, ap->active_tag);
 	assert(qc != NULL);
 
-	spin_lock_irqsave(&ap->host_set->lock, flags);
-	ap->thr_state = THR_IDLE;
-	spin_unlock_irqrestore(&ap->host_set->lock, flags);
+	ap->pio_task_state = PIO_ST_IDLE;
 
 	ata_irq_on(ap);
 
-	ata_qc_complete(qc, drv_stat, 0);
+	ata_qc_complete(qc, drv_stat);
 }
 
 /**
@@ -2053,22 +2089,22 @@
 	 * a chk-status or two.  If not, the drive is probably seeking
 	 * or something.  Snooze for a couple msecs, then
 	 * chk-status again.  If still busy, fall back to
-	 * THR_PIO_POLL state.
+	 * PIO_ST_POLL state.
 	 */
 	status = ata_busy_wait(ap, ATA_BUSY, 5);
 	if (status & ATA_BUSY) {
 		msleep(2);
 		status = ata_busy_wait(ap, ATA_BUSY, 10);
 		if (status & ATA_BUSY) {
-			ap->thr_state = THR_PIO_POLL;
-			ap->thr_timeout = jiffies + ATA_TMOUT_PIO;
+			ap->pio_task_state = PIO_ST_POLL;
+			ap->pio_task_timeout = jiffies + ATA_TMOUT_PIO;
 			return;
 		}
 	}
 
 	/* handle BSY=0, DRQ=0 as error */
 	if ((status & ATA_DRQ) == 0) {
-		ap->thr_state = THR_PIO_ERR;
+		ap->pio_task_state = PIO_ST_ERR;
 		return;
 	}
 
@@ -2079,7 +2115,7 @@
 	sg = qc->sg;
 
 	if (qc->cursect == (qc->nsect - 1))
-		ap->thr_state = THR_PIO_LAST;
+		ap->pio_task_state = PIO_ST_LAST;
 
 	buf = kmap(sg[qc->cursg].page) +
 	      sg[qc->cursg].offset + (qc->cursg_ofs * ATA_SECT_SIZE);
@@ -2107,20 +2143,48 @@
 	kunmap(sg[qc->cursg].page);
 }
 
-#if 0 /* to be used eventually */
-/**
- *	ata_eng_schedule - run an iteration of the pio/dma/whatever engine
- *	@ap: port on which activity will occur
- *	@eng: instance of engine
- *
- *	LOCKING:
- *	spin_lock_irqsave(host_set lock)
- */
-static void ata_eng_schedule (struct ata_port *ap, struct ata_engine *eng)
+static void ata_pio_task(void *_data)
 {
-	/* FIXME */
+	struct ata_port *ap = _data;
+	unsigned long timeout = 0;
+
+	switch (ap->pio_task_state) {
+	case PIO_ST:
+		ata_pio_sector(ap);
+		break;
+
+	case PIO_ST_LAST:
+		ata_pio_complete(ap);
+		break;
+
+	case PIO_ST_POLL:
+	case PIO_ST_LAST_POLL:
+		timeout = ata_pio_poll(ap);
+		break;
+
+	case PIO_ST_TMOUT:
+		printk(KERN_ERR "ata%d: FIXME: PIO_ST_TMOUT\n", /* FIXME */
+		       ap->id);
+		timeout = 11 * HZ;
+		break;
+
+	case PIO_ST_ERR:
+		printk(KERN_ERR "ata%d: FIXME: PIO_ST_ERR\n", /* FIXME */
+		       ap->id);
+		timeout = 11 * HZ;
+		break;
+	}
+
+	if ((ap->pio_task_state != PIO_ST_IDLE) &&
+	    (ap->pio_task_state != PIO_ST_TMOUT) &&
+	    (ap->pio_task_state != PIO_ST_ERR)) {
+		if (timeout)
+			queue_delayed_work(ata_wq, &ap->pio_task,
+					   timeout);
+		else
+			queue_work(ata_wq, &ap->pio_task);
+	}
 }
-#endif
 
 /**
  *	ata_eng_timeout - Handle timeout of queued command
@@ -2174,7 +2238,7 @@
 		printk(KERN_ERR "ata%u: DMA timeout, stat 0x%x\n",
 		       ap->id, host_stat);
 
-		ata_dma_complete(ap, host_stat, 1);
+		ata_dma_complete(qc, host_stat);
 		break;
 
 	case ATA_PROT_NODATA:
@@ -2183,7 +2247,7 @@
 		printk(KERN_ERR "ata%u: command 0x%x timeout, stat 0x%x\n",
 		       ap->id, qc->tf.command, drv_stat);
 
-		ata_qc_complete(qc, drv_stat, 1);
+		ata_qc_complete(qc, drv_stat);
 		break;
 
 	default:
@@ -2192,7 +2256,7 @@
 		printk(KERN_ERR "ata%u: unknown timeout, cmd 0x%x stat 0x%x\n",
 		       ap->id, qc->tf.command, drv_stat);
 
-		ata_qc_complete(qc, drv_stat, 1);
+		ata_qc_complete(qc, drv_stat);
 		break;
 	}
 
@@ -2246,8 +2310,7 @@
 		qc->ap = ap;
 		qc->dev = dev;
 		qc->cursect = qc->cursg = qc->cursg_ofs = 0;
-		INIT_LIST_HEAD(&qc->node);
-		init_MUTEX_LOCKED(&qc->sem);
+		qc->nsect = 0;
 
 		ata_tf_init(ap, &qc->tf, dev->devno);
 
@@ -2264,13 +2327,12 @@
  *	ata_qc_complete -
  *	@qc:
  *	@drv_stat:
- *	@done_late:
  *
  *	LOCKING:
  *
  */
 
-void ata_qc_complete(struct ata_queued_cmd *qc, u8 drv_stat, unsigned int done_late)
+void ata_qc_complete(struct ata_queued_cmd *qc, u8 drv_stat)
 {
 	struct ata_port *ap = qc->ap;
 	struct scsi_cmnd *cmd = qc->scsicmd;
@@ -2304,89 +2366,124 @@
 		do_clear = 1;
 	}
 
-	up(&qc->sem);
+	if (qc->waiting)
+		complete(qc->waiting);
 
 	if (likely(do_clear))
 		clear_bit(tag, &ap->qactive);
 }
 
-#if 0 /* to be used eventually */
 /**
- *	ata_qc_push -
- *	@qc:
- *	@append:
+ *	ata_qc_issue - issue taskfile to device
+ *	@qc: command to issue to device
+ *
+ *	Prepare an ATA command to submission to device.
+ *	This includes mapping the data into a DMA-able
+ *	area, filling in the S/G table, and finally
+ *	writing the taskfile to hardware, starting the command.
  *
  *	LOCKING:
  *	spin_lock_irqsave(host_set lock)
+ *
+ *	RETURNS:
+ *	Zero on success, negative on error.
  */
-static void ata_qc_push (struct ata_queued_cmd *qc, unsigned int append)
+
+int ata_qc_issue(struct ata_queued_cmd *qc)
 {
 	struct ata_port *ap = qc->ap;
-	struct ata_engine *eng = &ap->eng;
+	struct scsi_cmnd *cmd = qc->scsicmd;
 
-	if (likely(append))
-		list_add_tail(&qc->node, &eng->q);
-	else
-		list_add(&qc->node, &eng->q);
+	if (qc->flags & ATA_QCFLAG_SG) {
+		/* set up SG table */
+		if (cmd->use_sg) {
+			if (ata_sg_setup(qc))
+				goto err_out;
+		} else {
+			if (ata_sg_setup_one(qc))
+				goto err_out;
+		}
+
+		ap->ops->fill_sg(qc);
+	}
 
-	if (!test_and_set_bit(ATA_EFLG_ACTIVE, &eng->flags))
-		ata_eng_schedule(ap, eng);
+	qc->ap->active_tag = qc->tag;
+	qc->flags |= ATA_QCFLAG_ACTIVE;
+
+	return ata_qc_issue_prot(qc);
+
+err_out:
+	return -1;
 }
-#endif
 
 /**
- *	ata_qc_issue -
- *	@qc:
+ *	ata_qc_issue_prot - issue taskfile to device in proto-dependent manner
+ *	@qc: command to issue to device
+ *
+ *	Using various libata functions and hooks, this function
+ *	starts an ATA command.  ATA commands are grouped into
+ *	classes called "protocols", and issuing each type of protocol
+ *	is slightly different.
  *
  *	LOCKING:
+ *	spin_lock_irqsave(host_set lock)
  *
  *	RETURNS:
- *
+ *	Zero on success, negative on error.
  */
-int ata_qc_issue(struct ata_queued_cmd *qc)
+
+static int ata_qc_issue_prot(struct ata_queued_cmd *qc)
 {
 	struct ata_port *ap = qc->ap;
-	struct scsi_cmnd *cmd = qc->scsicmd;
-	unsigned int dma = qc->flags & ATA_QCFLAG_DMA;
 
 	ata_dev_select(ap, qc->dev->devno, 1, 0);
 
-	/* set up SG table */
-	if (cmd->use_sg) {
-		if (ata_sg_setup(qc))
-			goto err_out;
-	} else {
-		if (ata_sg_setup_one(qc))
-			goto err_out;
-	}
+	switch (qc->tf.protocol) {
+	case ATA_PROT_NODATA:
+		ata_tf_to_host_nolock(ap, &qc->tf);
+		break;
 
-	ap->ops->fill_sg(qc);
+	case ATA_PROT_DMA:
+		ap->ops->tf_load(ap, &qc->tf);	 /* load tf registers */
+		ap->ops->bmdma_setup(qc);	    /* set up bmdma */
+		ap->ops->bmdma_start(qc);	    /* initiate bmdma */
+		break;
 
-	qc->ap->active_tag = qc->tag;
-	qc->flags |= ATA_QCFLAG_ACTIVE;
+	case ATA_PROT_PIO: /* load tf registers, initiate polling pio */
+		ata_qc_set_polling(qc);
+		ata_tf_to_host_nolock(ap, &qc->tf);
+		ap->pio_task_state = PIO_ST;
+		queue_work(ata_wq, &ap->pio_task);
+		break;
 
-	if (likely(dma)) {
-		ap->ops->tf_load(ap, &qc->tf);	/* load tf registers */
-		ap->ops->bmdma_start(qc);	/* initiate bmdma */
-	} else
-		/* load tf registers, initiate polling pio */
-		ata_pio_start(qc);
+	case ATA_PROT_ATAPI:
+		ata_tf_to_host_nolock(ap, &qc->tf);
+		queue_work(ata_wq, &ap->packet_task);
+		break;
 
-	return 0;
+	case ATA_PROT_ATAPI_DMA:
+		ap->ops->tf_load(ap, &qc->tf);	 /* load tf registers */
+		ap->ops->bmdma_setup(qc);	    /* set up bmdma */
+		queue_work(ata_wq, &ap->packet_task);
+		break;
 
-err_out:
-	return -1;
+	default:
+		WARN_ON(1);
+		return -1;
+	}
+
+	return 0;
 }
 
 /**
- *	ata_bmdma_start_mmio -
- *	@qc:
+ *	ata_bmdma_setup_mmio - Set up PCI IDE BMDMA transaction (MMIO)
+ *	@qc: Info associated with this ATA transaction.
  *
  *	LOCKING:
  *	spin_lock_irqsave(host_set lock)
  */
 
-void ata_bmdma_start_mmio (struct ata_queued_cmd *qc)
+void ata_bmdma_setup_mmio (struct ata_queued_cmd *qc)
 {
 	struct ata_port *ap = qc->ap;
 	unsigned int rw = (qc->tf.flags & ATA_TFLAG_WRITE);
@@ -2410,8 +2507,24 @@
 
 	/* issue r/w command */
 	ap->ops->exec_command(ap, &qc->tf);
+}
+
+/**
+ *	ata_bmdma_start_mmio - Start a PCI IDE BMDMA transaction (MMIO)
+ *	@qc: Info associated with this ATA transaction.
+ *
+ *	LOCKING:
+ *	spin_lock_irqsave(host_set lock)
+ */
+
+void ata_bmdma_start_mmio (struct ata_queued_cmd *qc)
+{
+	struct ata_port *ap = qc->ap;
+	void *mmio = (void *) ap->ioaddr.bmdma_addr;
+	u8 dmactl;
 
 	/* start host DMA transaction */
+	dmactl = readb(mmio + ATA_DMA_CMD);
 	writeb(dmactl | ATA_DMA_START, mmio + ATA_DMA_CMD);
 
 	/* Strictly, one may wish to issue a readb() here, to
@@ -2428,14 +2541,14 @@
 }
 
 /**
- *	ata_bmdma_start_pio -
- *	@qc:
+ *	ata_bmdma_setup_pio - Set up PCI IDE BMDMA transaction (PIO)
+ *	@qc: Info associated with this ATA transaction.
  *
  *	LOCKING:
  *	spin_lock_irqsave(host_set lock)
  */
 
-void ata_bmdma_start_pio (struct ata_queued_cmd *qc)
+void ata_bmdma_setup_pio (struct ata_queued_cmd *qc)
 {
 	struct ata_port *ap = qc->ap;
 	unsigned int rw = (qc->tf.flags & ATA_TFLAG_WRITE);
@@ -2458,24 +2571,38 @@
 
 	/* issue r/w command */
 	ap->ops->exec_command(ap, &qc->tf);
+}
+
+/**
+ *	ata_bmdma_start_pio - Start a PCI IDE BMDMA transaction (PIO)
+ *	@qc: Info associated with this ATA transaction.
+ *
+ *	LOCKING:
+ *	spin_lock_irqsave(host_set lock)
+ */
+
+void ata_bmdma_start_pio (struct ata_queued_cmd *qc)
+{
+	struct ata_port *ap = qc->ap;
+	u8 dmactl;
 
 	/* start host DMA transaction */
+	dmactl = inb(ap->ioaddr.bmdma_addr + ATA_DMA_CMD);
 	outb(dmactl | ATA_DMA_START,
 	     ap->ioaddr.bmdma_addr + ATA_DMA_CMD);
 }
 
 /**
  *	ata_dma_complete -
- *	@ap:
+ *	@qc:
  *	@host_stat:
- *	@done_late:
  *
  *	LOCKING:
  */
 
-static void ata_dma_complete(struct ata_port *ap, u8 host_stat,
-			     unsigned int done_late)
+static void ata_dma_complete(struct ata_queued_cmd *qc, u8 host_stat)
 {
+	struct ata_port *ap = qc->ap;
 	VPRINTK("ENTER\n");
 
 	if (ap->flags & ATA_FLAG_MMIO) {
@@ -2506,8 +2633,7 @@
 		ap->id, (u32) host_stat, (u32) ata_chk_status(ap));
 
 	/* get drive status; clear intr; complete txn */
-	ata_qc_complete(ata_qc_from_tag(ap, ap->active_tag),
-			ata_wait_idle(ap), done_late);
+	ata_qc_complete(qc, ata_wait_idle(ap));
 }
 
 /**
@@ -2534,6 +2660,7 @@
 
 	switch (qc->tf.protocol) {
 	case ATA_PROT_DMA:
+	case ATA_PROT_ATAPI_DMA:
 		if (ap->flags & ATA_FLAG_MMIO) {
 			void *mmio = (void *) ap->ioaddr.bmdma_addr;
 			host_stat = readb(mmio + ATA_DMA_STATUS);
@@ -2546,14 +2673,14 @@
 			break;
 		}
 
-		ata_dma_complete(ap, host_stat, 0);
+		ata_dma_complete(qc, host_stat);
 		handled = 1;
 		break;
 
 	case ATA_PROT_NODATA:	/* command completion, but no data xfer */
 		status = ata_busy_wait(ap, ATA_BUSY | ATA_DRQ, 1000);
 		DPRINTK("BUS_NODATA (drv_stat 0x%X)\n", status);
-		ata_qc_complete(qc, status, 0);
+		ata_qc_complete(qc, status);
 		handled = 1;
 		break;
 
@@ -2603,7 +2730,7 @@
 			struct ata_queued_cmd *qc;
 
 			qc = ata_qc_from_tag(ap, ap->active_tag);
-			if (qc && ((qc->flags & ATA_QCFLAG_POLL) == 0))
+			if (qc && (!(qc->tf.ctl & ATA_NIEN)))
 				handled += ata_host_intr(ap, qc);
 		}
 	}
@@ -2614,36 +2741,6 @@
 }
 
 /**
- *	ata_thread_wake -
- *	@ap:
- *	@thr_state:
- *
- *	LOCKING:
- *	spin_lock_irqsave(host_set lock)
- */
-
-void ata_thread_wake(struct ata_port *ap, unsigned int thr_state)
-{
-	assert(ap->thr_state == THR_IDLE);
-	ap->thr_state = thr_state;
-	up(&ap->thr_sem);
-}
-
-/**
- *	ata_thread_timer -
- *	@opaque:
- *
- *	LOCKING:
- */
-
-static void ata_thread_timer(unsigned long opaque)
-{
-	struct ata_port *ap = (struct ata_port *) opaque;
-
-	up(&ap->thr_sem);
-}
-
-/**
  *	ata_thread_iter -
  *	@ap:
  *
@@ -2666,7 +2763,6 @@
 		break;
 
 	case THR_PROBE_START:
-		down(&ap->sem);
 		ap->thr_state = THR_PORT_RESET;
 		break;
 
@@ -2685,40 +2781,8 @@
 		break;
 
 	case THR_AWAIT_DEATH:
-		timeout = -1;
-		break;
-
 	case THR_IDLE:
-		timeout = 30 * HZ;
-		break;
-
-	case THR_PIO:
-		ata_pio_sector(ap);
-		break;
-
-	case THR_PIO_LAST:
-		ata_pio_complete(ap);
-		break;
-
-	case THR_PIO_POLL:
-	case THR_PIO_LAST_POLL:
-		timeout = ata_pio_poll(ap);
-		break;
-
-	case THR_PIO_TMOUT:
-		printk(KERN_ERR "ata%d: FIXME: THR_PIO_TMOUT\n", /* FIXME */
-		       ap->id);
-		timeout = 11 * HZ;
-		break;
-
-	case THR_PIO_ERR:
-		printk(KERN_ERR "ata%d: FIXME: THR_PIO_ERR\n", /* FIXME */
-		       ap->id);
-		timeout = 11 * HZ;
-		break;
-
-	case THR_PACKET:
-		atapi_cdb_send(ap);
+		timeout = -1;
 		break;
 
 	default:
@@ -2733,86 +2797,8 @@
 }
 
 /**
- *	ata_thread -
- *	@data:
- *
- *	LOCKING:
- *
- *	RETURNS:
- *
- */
-
-static int ata_thread (void *data)
-{
-        struct ata_port *ap = data;
-	long timeout;
-
-	daemonize ("katad-%u", ap->id);
-	allow_signal(SIGTERM);
-
-        while (1) {
-		cond_resched();
-
-		timeout = ata_thread_iter(ap);
-
-                if (signal_pending (current))
-                        flush_signals(current);
-                        
-                if (current->flags & PF_FREEZE)
-			refrigerator(PF_FREEZE);
-                                                        
-
-                if ((timeout < 0) || (ap->time_to_die))
-                        break;
-
- 		/* note sleeping for full timeout not guaranteed (that's ok) */
-		if (timeout) {
-			mod_timer(&ap->thr_timer, jiffies + timeout);
-			down_interruptible(&ap->thr_sem);
-
-                	if (signal_pending (current))
-                        	flush_signals(current);
-
-                	if (ap->time_to_die)
-                        	break;
-		}
-        }
-
-	printk(KERN_DEBUG "ata%u: thread exiting\n", ap->id);
-	ap->thr_pid = -1;
-	del_timer_sync(&ap->thr_timer);
-	complete_and_exit (&ap->thr_exited, 0);
-}
-
-/**
- *	ata_thread_kill - kill per-port kernel thread
- *	@ap: port those thread is to be killed
- *
- *	LOCKING:
- *
- */
-
-static int ata_thread_kill(struct ata_port *ap)
-{
-	int ret = 0;
-
-	if (ap->thr_pid >= 0) {
-		ap->time_to_die = 1;
-		wmb();
-		ret = kill_proc(ap->thr_pid, SIGTERM, 1);
-		if (ret)
-			printk(KERN_ERR "ata%d: unable to kill kernel thread\n",
-			       ap->id);
-		else
-			wait_for_completion(&ap->thr_exited);
-	}
-
-	return ret;
-}
-
-/**
- *	atapi_cdb_send - Write CDB bytes to hardware
- *	@ap: Port to which ATAPI device is attached.
+ *	atapi_packet_task - Write CDB bytes to hardware
+ *	@_data: Port to which ATAPI device is attached.
  *
  *	When device has indicated its readiness to accept
  *	a CDB, this function is called.  Send the CDB.
@@ -2824,8 +2810,9 @@
  *	Kernel thread context (may sleep)
  */
 
-static void atapi_cdb_send(struct ata_port *ap)
+static void atapi_packet_task(void *_data)
 {
+	struct ata_port *ap = _data;
 	struct ata_queued_cmd *qc;
 	u8 status;
 
@@ -2850,30 +2837,17 @@
 	      qc->scsicmd->cmnd, ap->host->max_cmd_len / 4);
 
 	/* if we are DMA'ing, irq handler takes over from here */
-	if (qc->tf.feature == ATAPI_PKT_DMA)
-		goto out;
-
-	/* sleep-wait for BSY to clear */
-	DPRINTK("busy wait 2\n");
-	if (ata_busy_sleep(ap, ATA_TMOUT_CDB_QUICK, ATA_TMOUT_CDB))
-		goto err_out;
-
-	/* wait for BSY,DRQ to clear */
-	status = ata_wait_idle(ap);
-	if (status & (ATA_BUSY | ATA_DRQ))
-		goto err_out;
-
-	/* transaction completed, indicate such to scsi stack */
-	ata_qc_complete(qc, status, 0);
-	ata_irq_on(ap);
+	if (qc->tf.protocol == ATA_PROT_ATAPI_DMA) {
+		ap->ops->bmdma_start(qc);	    /* initiate bmdma */
+	} else {
+		ap->pio_task_state = PIO_ST;
+		queue_work(ata_wq, &ap->pio_task);
+	}
 
-out:
-	ap->thr_state = THR_IDLE;
 	return;
 
 err_out:
-	ata_qc_complete(qc, ATA_ERR, 0);
-	goto out;
+	ata_qc_complete(qc, ATA_ERR);
 }
 
 int ata_port_start (struct ata_port *ap)
@@ -2883,7 +2857,7 @@
 	ap->prd = pci_alloc_consistent(pdev, ATA_PRD_TBL_SZ, &ap->prd_dma);
 	if (!ap->prd)
 		return -ENOMEM;
-	
+
 	DPRINTK("prd alloc, virt %p, dma %llx\n", ap->prd, (unsigned long long) ap->prd_dma);
 
 	return 0;
@@ -2896,6 +2870,21 @@
 	pci_free_consistent(pdev, ATA_PRD_TBL_SZ, ap->prd, ap->prd_dma);
 }
 
+static void ata_probe_task(void *_data)
+{
+	struct ata_port *ap = _data;
+	long timeout;
+
+	timeout = ata_thread_iter(ap);
+	if (timeout < 0)
+		return;
+
+	if (timeout > 0)
+		queue_delayed_work(ata_wq, &ap->probe_task, timeout);
+	else
+		queue_work(ata_wq, &ap->probe_task);
+}
+
 /**
  *	ata_host_remove -
  *	@ap:
@@ -2913,8 +2902,6 @@
 	if (do_unregister)
 		scsi_remove_host(sh);
 
-	ata_thread_kill(ap);	/* FIXME: check return val */
-
 	ap->ops->port_stop(ap);
 }
 
@@ -2958,21 +2945,14 @@
 	ap->active_tag = ATA_TAG_POISON;
 	ap->last_ctl = 0xFF;
 
-	/* ata_engine init */
-	ap->eng.flags = 0;
-	INIT_LIST_HEAD(&ap->eng.q);
+	INIT_WORK(&ap->packet_task, atapi_packet_task, ap);
+	INIT_WORK(&ap->pio_task, ata_pio_task, ap);
+	INIT_WORK(&ap->probe_task, ata_probe_task, ap);
 
 	for (i = 0; i < ATA_MAX_DEVICES; i++)
 		ap->device[i].devno = i;
 
-	init_completion(&ap->thr_exited);
 	init_MUTEX_LOCKED(&ap->probe_sem);
-	init_MUTEX_LOCKED(&ap->sem);
-	init_MUTEX_LOCKED(&ap->thr_sem);
-
-	init_timer(&ap->thr_timer);
-	ap->thr_timer.function = ata_thread_timer;
-	ap->thr_timer.data = (unsigned long) ap;
 
 #ifdef ATA_IRQ_TRAP
 	ap->stats.unhandled_irq = 1;
@@ -3015,18 +2995,8 @@
 	if (rc)
 		goto err_out;
 
-	ap->thr_pid = kernel_thread(ata_thread, ap, CLONE_FS | CLONE_FILES);
-	if (ap->thr_pid < 0) {
-		printk(KERN_ERR "ata%d: unable to start kernel thread\n",
-		       ap->id);
-		goto err_out_free;
-	}
-
 	return ap;
 
-err_out_free:
-	ap->ops->port_stop(ap);
-
 err_out:
 	scsi_host_put(host);
 	return NULL;
@@ -3106,7 +3076,7 @@
 		ap = host_set->ports[i];
 
 		DPRINTK("ata%u: probe begin\n", ap->id);
-		up(&ap->sem);		/* start probe */
+		queue_work(ata_wq, &ap->probe_task);	/* start probe */
 
 		DPRINTK("ata%u: probe-wait begin\n", ap->id);
 		down(&ap->probe_sem);	/* wait for end */
@@ -3489,11 +3459,21 @@
 
 static int __init ata_init(void)
 {
+	ata_wq = create_workqueue("ata");
+	if (!ata_wq)
+		return -ENOMEM;
+
 	printk(KERN_DEBUG "libata version " DRV_VERSION " loaded.\n");
 	return 0;
 }
 
+static void __exit ata_exit(void)
+{
+	destroy_workqueue(ata_wq);
+}
+
 module_init(ata_init);
+module_exit(ata_exit);
 
 /*
  * libata is essentially a library of internal helper functions for
@@ -3512,6 +3492,8 @@
 EXPORT_SYMBOL_GPL(ata_tf_load_mmio);
 EXPORT_SYMBOL_GPL(ata_tf_read_pio);
 EXPORT_SYMBOL_GPL(ata_tf_read_mmio);
+EXPORT_SYMBOL_GPL(ata_tf_to_fis);
+EXPORT_SYMBOL_GPL(ata_tf_from_fis);
 EXPORT_SYMBOL_GPL(ata_check_status_pio);
 EXPORT_SYMBOL_GPL(ata_check_status_mmio);
 EXPORT_SYMBOL_GPL(ata_exec_command_pio);
@@ -3520,7 +3502,9 @@
 EXPORT_SYMBOL_GPL(ata_port_stop);
 EXPORT_SYMBOL_GPL(ata_interrupt);
 EXPORT_SYMBOL_GPL(ata_fill_sg);
+EXPORT_SYMBOL_GPL(ata_bmdma_setup_pio);
 EXPORT_SYMBOL_GPL(ata_bmdma_start_pio);
+EXPORT_SYMBOL_GPL(ata_bmdma_setup_mmio);
 EXPORT_SYMBOL_GPL(ata_bmdma_start_mmio);
 EXPORT_SYMBOL_GPL(ata_port_probe);
 EXPORT_SYMBOL_GPL(sata_phy_reset);
diff -Nru a/drivers/scsi/libata-scsi.c b/drivers/scsi/libata-scsi.c
--- a/drivers/scsi/libata-scsi.c	Sun May 16 01:18:34 2004
+++ b/drivers/scsi/libata-scsi.c	Sun May 16 01:18:34 2004
@@ -167,8 +167,27 @@
 {
 	sdev->use_10_for_rw = 1;
 	sdev->use_10_for_ms = 1;
+
 	blk_queue_max_phys_segments(sdev->request_queue, LIBATA_MAX_PRD);
 
+	if (sdev->id < ATA_MAX_DEVICES) {
+		struct ata_port *ap;
+		struct ata_device *dev;
+
+		ap = (struct ata_port *) &sdev->host->hostdata[0];
+		dev = &ap->device[sdev->id];
+
+		/* TODO: 1024 is an arbitrary number, not the
+		 * hardware maximum.  This should be increased to
+		 * 65534 when Jens Axboe's patch for dynamically
+		 * determining max_sectors is merged.
+		 */
+		if (dev->flags & ATA_DFLAG_LBA48) {
+			sdev->host->max_sectors = 2048;
+			blk_queue_max_sectors(sdev->request_queue, 2048);
+		}
+	}
+
 	return 0;	/* scsi layer doesn't check return value, sigh */
 }
 
@@ -866,54 +885,20 @@
 }
 
 /**
- *	atapi_scsi_queuecmd - Send CDB to ATAPI device
- *	@ap: Port to which ATAPI device is attached.
- *	@dev: Target device for CDB.
- *	@cmd: SCSI command being sent to device.
- *	@done: SCSI command completion function.
- *
- *	Sends CDB to ATAPI device.  If the Linux SCSI layer sends a
- *	non-data command, then this function handles the command
- *	directly, via polling.  Otherwise, the bmdma engine is started.
+ *	atapi_xlat - Initialize PACKET taskfile
+ *	@qc: command structure to be initialized
+ *	@scsicmd: SCSI CDB associated with this PACKET command
  *
  *	LOCKING:
  *	spin_lock_irqsave(host_set lock)
+ *
+ *	RETURNS:
+ *	Zero on success, non-zero on failure.
  */
 
-static void atapi_scsi_queuecmd(struct ata_port *ap, struct ata_device *dev,
-			       struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *))
+static unsigned int atapi_xlat(struct ata_queued_cmd *qc, u8 *scsicmd)
 {
-	struct ata_queued_cmd *qc;
-	u8 *scsicmd = cmd->cmnd, status;
-	unsigned int doing_dma = 0;
-
-	VPRINTK("ENTER, drv_stat = 0x%x\n", ata_chk_status(ap));
-
-	if (cmd->sc_data_direction == SCSI_DATA_UNKNOWN) {
-		DPRINTK("unknown data, scsicmd 0x%x\n", scsicmd[0]);
-		ata_bad_cdb(cmd, done);
-		return;
-	}
-
-	switch(scsicmd[0]) {
-	case READ_6:
-	case WRITE_6:
-	case MODE_SELECT:
-	case MODE_SENSE:
-		DPRINTK("read6/write6/modesel/modesense trap\n");
-		ata_bad_scsiop(cmd, done);
-		return;
-
-	default:
-		/* do nothing */
-		break;
-	}
-
-	qc = ata_scsi_qc_new(ap, dev, cmd, done);
-	if (!qc) {
-		printk(KERN_ERR "ata%u: command queue empty\n", ap->id);
-		return;
-	}
+	struct scsi_cmnd *cmd = qc->scsicmd;
 
 	qc->flags |= ATA_QCFLAG_ATAPI;
 
@@ -925,52 +910,19 @@
 
 	qc->tf.command = ATA_CMD_PACKET;
 
-	/* set up SG table */
-	if (cmd->sc_data_direction == SCSI_DATA_NONE) {
-		ap->active_tag = qc->tag;
-		qc->flags |= ATA_QCFLAG_ACTIVE | ATA_QCFLAG_POLL;
+	if ((cmd->sc_data_direction == SCSI_DATA_NONE) ||
+	    ((qc->flags & ATA_QCFLAG_DMA) == 0)) {
+		ata_qc_set_polling(qc);
 		qc->tf.protocol = ATA_PROT_ATAPI;
-
-		ata_dev_select(ap, dev->devno, 1, 0);
-
-		DPRINTK("direction: none\n");
-		qc->tf.ctl |= ATA_NIEN;	/* disable interrupts */
-		ata_tf_to_host_nolock(ap, &qc->tf);
+		qc->tf.lbam = (8 * 1024) & 0xff;
+		qc->tf.lbah = (8 * 1024) >> 8;
 	} else {
 		qc->flags |= ATA_QCFLAG_SG; /* data is present; dma-map it */
-		qc->tf.feature = ATAPI_PKT_DMA;
 		qc->tf.protocol = ATA_PROT_ATAPI_DMA;
-
-		doing_dma = 1;
-
-		/* select device, send command to hardware */
-		if (ata_qc_issue(qc))
-			goto err_out;
-	}
-
-	status = ata_busy_wait(ap, ATA_BUSY, 1000);
-	if (status & ATA_BUSY) {
-		ata_thread_wake(ap, THR_PACKET);
-		return;
+		qc->tf.feature |= ATAPI_PKT_DMA;
 	}
-	if ((status & ATA_DRQ) == 0)
-		goto err_out;
-
-	/* FIXME: mmio-ize */
-	DPRINTK("writing cdb\n");
-	outsl(ap->ioaddr.data_addr, scsicmd, ap->host->max_cmd_len / 4);
-
-	if (!doing_dma)
-		ata_thread_wake(ap, THR_PACKET);
-
-	VPRINTK("EXIT\n");
-	return;
 
-err_out:
-	if (!doing_dma)
-		ata_irq_on(ap);	/* re-enable interrupts */
-	ata_bad_cdb(cmd, done);
-	DPRINTK("EXIT - badcmd\n");
+	return 0;
 }
 
 /**
@@ -1109,7 +1061,7 @@
 		else
 			ata_scsi_simulate(ap, dev, cmd, done);
 	} else
-		atapi_scsi_queuecmd(ap, dev, cmd, done);
+		ata_scsi_translate(ap, dev, cmd, done, atapi_xlat);
 
 out_unlock:
 	return 0;
diff -Nru a/drivers/scsi/libata.h b/drivers/scsi/libata.h
--- a/drivers/scsi/libata.h	Sun May 16 01:18:34 2004
+++ b/drivers/scsi/libata.h	Sun May 16 01:18:34 2004
@@ -35,7 +35,6 @@
 	void			(*done)(struct scsi_cmnd *);
 };
 
-
 /* libata-core.c */
 extern void ata_dev_id_string(struct ata_device *dev, unsigned char *s,
 			      unsigned int ofs, unsigned int len);
@@ -45,7 +44,6 @@
 extern void ata_dev_select(struct ata_port *ap, unsigned int device,
                            unsigned int wait, unsigned int can_sleep);
 extern void ata_tf_to_host_nolock(struct ata_port *ap, struct ata_taskfile *tf);
-extern void ata_thread_wake(struct ata_port *ap, unsigned int thr_state);
 
 
 /* libata-scsi.c */
diff -Nru a/drivers/scsi/megaraid.c b/drivers/scsi/megaraid.c
--- a/drivers/scsi/megaraid.c	Sun May 16 01:18:33 2004
+++ b/drivers/scsi/megaraid.c	Sun May 16 01:18:33 2004
@@ -4606,6 +4606,7 @@
 
 	if (pci_enable_device(pdev))
 		goto out;
+	pci_set_master(pdev);
 
 	pci_bus = pdev->bus->number;
 	pci_dev_func = pdev->devfn;
diff -Nru a/drivers/scsi/ncr53c8xx.c b/drivers/scsi/ncr53c8xx.c
--- a/drivers/scsi/ncr53c8xx.c	Sun May 16 01:18:34 2004
+++ b/drivers/scsi/ncr53c8xx.c	Sun May 16 01:18:34 2004
@@ -307,7 +307,7 @@
 **    The maximum number of segments a transfer is split into.
 **    We support up to 127 segments for both read and write.
 **    The data scripts are broken into 2 sub-scripts.
-**    80 (MAX_SCATTERL) segments are moved from a sub-script 
+**    80 (MAX_SCATTERL) segments are moved from a sub-script
 **    in on-chip RAM. This makes data transfers shorter than 
 **    80k (assuming 1k fs) as fast as possible.
 */
@@ -4542,7 +4542,7 @@
 	/*
 	**	command
 	*/
-	memcpy(cp->cdb_buf, cmd->cmnd, MIN(cmd->cmd_len, sizeof(cp->cdb_buf)));
+	memcpy(cp->cdb_buf, cmd->cmnd, min_t(int, cmd->cmd_len, sizeof(cp->cdb_buf)));
 	cp->phys.cmd.addr		= cpu_to_scr(CCB_PHYS (cp, cdb_buf[0]));
 	cp->phys.cmd.size		= cpu_to_scr(cmd->cmd_len);
 
@@ -5172,7 +5172,7 @@
 		**	Copy back sense data to caller's buffer.
 		*/
 		memcpy(cmd->sense_buffer, cp->sense_buf,
-		       MIN(sizeof(cmd->sense_buffer), sizeof(cp->sense_buf)));
+		       min(sizeof(cmd->sense_buffer), sizeof(cp->sense_buf)));
 
 		if (DEBUG_FLAGS & (DEBUG_RESULT|DEBUG_TINY)) {
 			u_char * p = (u_char*) & cmd->sense_buffer;
diff -Nru a/drivers/scsi/nsp32.c b/drivers/scsi/nsp32.c
--- a/drivers/scsi/nsp32.c	Sun May 16 01:18:34 2004
+++ b/drivers/scsi/nsp32.c	Sun May 16 01:18:34 2004
@@ -859,7 +859,7 @@
 	 * or current nexus is not existed, unexpected
 	 * reselection is occurred. Send reject message.
 	 */
-	if (newid >= NUMBER(data->lunt) || newlun >= NUMBER(data->lunt[0])) {
+	if (newid >= ARRAY_SIZE(data->lunt) || newlun >= ARRAY_SIZE(data->lunt[0])) {
 		nsp32_msg(KERN_WARNING, "unknown id/lun");
 		return FALSE;
 	} else if(data->lunt[newid][newlun].SCpnt == NULL) {
@@ -1568,7 +1568,7 @@
 
 
 	SPRINTF("SDTR status\n");
-	for(id = 0; id < NUMBER(data->target); id++) {
+	for (id = 0; id < ARRAY_SIZE(data->target); id++) {
 
                 SPRINTF("id %d: ", id);
 
@@ -1610,7 +1610,7 @@
         }
 
 
-	thislength = MIN(thislength, length);
+	thislength = min(thislength, length);
 	*start = buffer + offset;
 
 	return thislength;
@@ -2753,17 +2753,17 @@
 	case CLOCK_4:
 		/* If data->clock is CLOCK_4, then select 40M sync table. */
 		data->synct   = nsp32_sync_table_40M;
-		data->syncnum = NUMBER(nsp32_sync_table_40M);
+		data->syncnum = ARRAY_SIZE(nsp32_sync_table_40M);
 		break;
 	case CLOCK_2:
 		/* If data->clock is CLOCK_2, then select 20M sync table. */
 		data->synct   = nsp32_sync_table_20M;
-		data->syncnum = NUMBER(nsp32_sync_table_20M);
+		data->syncnum = ARRAY_SIZE(nsp32_sync_table_20M);
 		break;
 	case PCICLK:
 		/* If data->clock is PCICLK, then select pci sync table. */
 		data->synct   = nsp32_sync_table_pci;
-		data->syncnum = NUMBER(nsp32_sync_table_pci);
+		data->syncnum = ARRAY_SIZE(nsp32_sync_table_pci);
 		break;
 	default:
 		nsp32_msg(KERN_WARNING,
@@ -2771,7 +2771,7 @@
 		/* Use default value CLOCK_4 */
 		data->clock   = CLOCK_4;
 		data->synct   = nsp32_sync_table_40M;
-		data->syncnum = NUMBER(nsp32_sync_table_40M);
+		data->syncnum = ARRAY_SIZE(nsp32_sync_table_40M);
 	}
 
 	/*
@@ -2805,9 +2805,9 @@
 		goto free_autoparam;
 	}
 
-	for (i = 0; i < NUMBER(data->lunt); i++) {
-		for (j = 0; j < NUMBER(data->lunt[0]); j++) {
-			int offset = i * NUMBER(data->lunt[0]) + j;
+	for (i = 0; i < ARRAY_SIZE(data->lunt); i++) {
+		for (j = 0; j < ARRAY_SIZE(data->lunt[0]); j++) {
+			int offset = i * ARRAY_SIZE(data->lunt[0]) + j;
 			nsp32_lunt tmp = {
 				.SCpnt       = NULL,
 				.save_datp   = 0,
@@ -2825,7 +2825,7 @@
 	/*
 	 * setup target
 	 */
-	for (i = 0; i < NUMBER(data->target); i++) {
+	for (i = 0; i < ARRAY_SIZE(data->target); i++) {
 		nsp32_target *target = &(data->target[i]);
 
 		target->limit_entry  = 0;
@@ -3021,7 +3021,7 @@
 	 * fall back to asynchronous transfer mode
 	 * initialize SDTR negotiation flag
 	 */
-	for (i = 0; i < NUMBER(data->target); i++) {
+	for (i = 0; i < ARRAY_SIZE(data->target); i++) {
 		nsp32_target *target = &data->target[i];
 
 		target->sync_flag = 0;
diff -Nru a/drivers/scsi/nsp32.h b/drivers/scsi/nsp32.h
--- a/drivers/scsi/nsp32.h	Sun May 16 01:18:33 2004
+++ b/drivers/scsi/nsp32.h	Sun May 16 01:18:33 2004
@@ -70,11 +70,7 @@
 /*
  * MACRO
  */
-#define NUMBER(arr) ((int) (sizeof(arr) / sizeof(arr[0])))
 #define BIT(x)      (1UL << (x))
-#ifndef MIN
-# define MIN(a,b)   ((a) > (b) ? (b) : (a))
-#endif
 
 /*
  * BASIC Definitions
diff -Nru a/drivers/scsi/pcmcia/Kconfig b/drivers/scsi/pcmcia/Kconfig
--- a/drivers/scsi/pcmcia/Kconfig	Sun May 16 01:18:35 2004
+++ b/drivers/scsi/pcmcia/Kconfig	Sun May 16 01:18:35 2004
@@ -69,4 +69,14 @@
 	  To compile this driver as a module, choose M here: the
 	  module will be called qlogic_cs.
 
+config PCMCIA_SYM53C500
+	tristate "Symbios 53c500 PCMCIA support"
+	depends on m
+	help
+	  Say Y here if you have a New Media Bus Toaster or other PCMCIA
+	  SCSI adapter based on the Symbios 53c500 controller.
+
+	  To compile this driver as a module, choose M here: the
+	  module will be called sym53c500_cs.
+
 endmenu
diff -Nru a/drivers/scsi/pcmcia/Makefile b/drivers/scsi/pcmcia/Makefile
--- a/drivers/scsi/pcmcia/Makefile	Sun May 16 01:18:35 2004
+++ b/drivers/scsi/pcmcia/Makefile	Sun May 16 01:18:35 2004
@@ -6,7 +6,8 @@
 obj-$(CONFIG_PCMCIA_FDOMAIN)	+= fdomain_cs.o
 obj-$(CONFIG_PCMCIA_AHA152X)	+= aha152x_cs.o
 obj-$(CONFIG_PCMCIA_NINJA_SCSI)	+= nsp_cs.o
+obj-$(CONFIG_PCMCIA_SYM53C500)	+= sym53c500_cs.o
 
 aha152x_cs-objs	:= aha152x_stub.o aha152x_core.o
 fdomain_cs-objs	:= fdomain_stub.o fdomain_core.o
-qlogic_cs-objs	:= qlogic_stub.o qlogic_core.o
+qlogic_cs-objs	:= qlogic_stub.o
diff -Nru a/drivers/scsi/pcmcia/nsp_cs.c b/drivers/scsi/pcmcia/nsp_cs.c
--- a/drivers/scsi/pcmcia/nsp_cs.c	Sun May 16 01:18:36 2004
+++ b/drivers/scsi/pcmcia/nsp_cs.c	Sun May 16 01:18:36 2004
@@ -315,7 +315,7 @@
 	int i;
 
 	/* setup sync data */
-	for ( i = 0; i < NUMBER(data->Sync); i++ ) {
+	for ( i = 0; i < ARRAY_SIZE(data->Sync); i++ ) {
 		data->Sync[i] = tmp_sync;
 	}
 }
@@ -600,7 +600,7 @@
 	unsigned int  base = SCpnt->device->host->io_port;
 	nsp_hw_data  *data = (nsp_hw_data *)SCpnt->device->host->hostdata;
 	char	     *buf  = data->MsgBuffer;
-	int	      len  = MIN(MSGBUF_SIZE, data->MsgLen);
+	int	      len  = min(MSGBUF_SIZE, data->MsgLen);
 	int	      ptr;
 	int	      ret;
 
@@ -774,7 +774,7 @@
 			continue;
 		}
 
-		res = MIN(res, SCpnt->SCp.this_residual);
+		res = min(res, SCpnt->SCp.this_residual);
 
 		switch (data->TransferMode) {
 		case MODE_IO32:
@@ -868,7 +868,7 @@
 			continue;
 		}
 
-		res = MIN(SCpnt->SCp.this_residual, WFIFO_CRIT);
+		res = min(SCpnt->SCp.this_residual, WFIFO_CRIT);
 
 		//nsp_dbg(NSP_DEBUG_DATA_IO, "ptr=0x%p this=0x%x res=0x%x", SCpnt->SCp.ptr, SCpnt->SCp.this_residual, res);
 		switch (data->TransferMode) {
@@ -1490,7 +1490,7 @@
 	spin_unlock_irqrestore(&(data->Lock), flags);
 
 	SPRINTF("SDTR status\n");
-	for(id = 0; id < NUMBER(data->Sync); id++) {
+	for(id = 0; id < ARRAY_SIZE(data->Sync); id++) {
 
 		SPRINTF("id %d: ", id);
 
@@ -1534,7 +1534,7 @@
         }
 
 
-	thislength = MIN(thislength, length);
+	thislength = min(thislength, length);
 	*start = buffer + offset;
 
 	return thislength;
diff -Nru a/drivers/scsi/pcmcia/nsp_cs.h b/drivers/scsi/pcmcia/nsp_cs.h
--- a/drivers/scsi/pcmcia/nsp_cs.h	Sun May 16 01:18:34 2004
+++ b/drivers/scsi/pcmcia/nsp_cs.h	Sun May 16 01:18:34 2004
@@ -26,9 +26,7 @@
 /************************************
  * Some useful macros...
  */
-#define NUMBER(arr) ((int) (sizeof(arr) / sizeof(arr[0]))) /* from XtNumber() in /usr/X11R6/include/X11/Intrinsic.h */
 #define BIT(x)      (1L << (x))
-#define MIN(a,b)    ((a) > (b) ? (b) : (a))
 
 /* SCSI initiator must be ID 7 */
 #define NSP_INITIATOR_ID  7
diff -Nru a/drivers/scsi/pcmcia/qlogic_core.c b/drivers/scsi/pcmcia/qlogic_core.c
--- a/drivers/scsi/pcmcia/qlogic_core.c	Sun May 16 01:18:37 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,2 +0,0 @@
-#define PCMCIA 1
-#include "qlogicfas.c"
diff -Nru a/drivers/scsi/pcmcia/qlogic_stub.c b/drivers/scsi/pcmcia/qlogic_stub.c
--- a/drivers/scsi/pcmcia/qlogic_stub.c	Sun May 16 01:18:35 2004
+++ b/drivers/scsi/pcmcia/qlogic_stub.c	Sun May 16 01:18:35 2004
@@ -47,7 +47,7 @@
 
 #include "scsi.h"
 #include "hosts.h"
-#include "../qlogicfas.h"
+#include "../qlogicfas408.h"
 
 #include <pcmcia/version.h>
 #include <pcmcia/cs_types.h>
@@ -56,13 +56,13 @@
 #include <pcmcia/ds.h>
 #include <pcmcia/ciscode.h>
 
+/* Set the following to 2 to use normal interrupt (active high/totempole-
+ * tristate), otherwise use 0 (REQUIRED FOR PCMCIA) for active low, open
+ * drain
+ */
+#define INT_TYPE	0
 
-extern Scsi_Host_Template qlogicfas_driver_template;
-extern void qlogicfas_preset(int port, int irq);
-extern int qlogicfas_bus_reset(Scsi_Cmnd *);
-extern irqreturn_t do_ql_ihandl(int irq, void *dev_id, struct pt_regs *regs);
-
-static char *qlogic_name = "qlogic_cs";
+static char qlogic_name[] = "qlogic_cs";
 
 #ifdef PCMCIA_DEBUG
 static int pc_debug = PCMCIA_DEBUG;
@@ -73,6 +73,24 @@
 #define DEBUG(n, args...)
 #endif
 
+static Scsi_Host_Template qlogicfas_driver_template = {
+	.module			= THIS_MODULE,
+	.name			= qlogic_name,
+	.proc_name		= qlogic_name,
+	.info			= qlogicfas408_info,
+	.queuecommand		= qlogicfas408_queuecommand,
+	.eh_abort_handler	= qlogicfas408_abort,
+	.eh_bus_reset_handler	= qlogicfas408_bus_reset,
+	.eh_device_reset_handler= qlogicfas408_device_reset,
+	.eh_host_reset_handler	= qlogicfas408_host_reset,
+	.bios_param		= qlogicfas408_biosparam,
+	.can_queue		= 1,
+	.this_id		= -1,
+	.sg_tablesize		= SG_ALL,
+	.cmd_per_lun		= 1,
+	.use_clustering		= DISABLE_CLUSTERING,
+};
+
 /*====================================================================*/
 
 /* Parameters that can be set with 'insmod' */
@@ -110,29 +128,17 @@
 	int qltyp;		/* type of chip */
 	int qinitid;
 	struct Scsi_Host *shost;	/* registered host structure */
-	qlogicfas_priv_t priv;
+	struct qlogicfas408_priv *priv;
 
-	qltyp = inb(qbase + 0xe) & 0xf8;
+	qltyp = qlogicfas408_get_chip_type(qbase, INT_TYPE);
 	qinitid = host->this_id;
 	if (qinitid < 0)
 		qinitid = 7;	/* if no ID, use 7 */
-	outb(1, qbase + 8);	/* set for PIO pseudo DMA */
-	REG0;
-	outb(0x40 | qlcfg8 | qinitid, qbase + 8);	/* (ini) bus id, disable scsi rst */
-	outb(qlcfg5, qbase + 5);	/* select timer */
-	outb(qlcfg9, qbase + 9);	/* prescaler */
-
-#if QL_RESET_AT_START
-	outb(3, qbase + 3);
-	REG1;
-	/* FIXME: timeout */
-	while (inb(qbase + 0xf) & 4)
-		cpu_relax();
-	REG0;
-#endif
+
+	qlogicfas408_setup(qbase, qinitid, INT_TYPE);
 
 	host->name = qlogic_name;
-	shost = scsi_host_alloc(host, sizeof(struct qlogicfas_priv));
+	shost = scsi_host_alloc(host, sizeof(struct qlogicfas408_priv));
 	if (!shost)
 		goto err;
 	shost->io_port = qbase;
@@ -141,12 +147,14 @@
 	if (qlirq != -1)
 		shost->irq = qlirq;
 
-	priv = (qlogicfas_priv_t)&(shost->hostdata[0]);
+	priv = get_priv_by_host(shost);
 	priv->qlirq = qlirq;
 	priv->qbase = qbase;
 	priv->qinitid = qinitid;
+	priv->shost = shost;
+	priv->int_type = INT_TYPE;					
 
-	if (request_irq(qlirq, do_ql_ihandl, 0, qlogic_name, shost))
+	if (request_irq(qlirq, qlogicfas408_ihandl, 0, qlogic_name, shost))
 		goto free_scsi_host;
 
 	sprintf(priv->qinfo,
@@ -307,9 +315,6 @@
 		outb(0x04, link->io.BasePort1 + 0xd);
 	}
 
-	qlogicfas_driver_template.name = qlogic_name;
-	qlogicfas_driver_template.proc_name = qlogic_name;
-
 	/* The KXL-810AN has a bigger IO port window */
 	if (link->io.NumPorts1 == 32)
 		host = qlogic_detect(&qlogicfas_driver_template, link,
@@ -402,7 +407,7 @@
 				outb(0x04, link->io.BasePort1 + 0xd);
 			}
 			/* Ugggglllyyyy!!! */
-			qlogicfas_bus_reset(NULL);
+			qlogicfas408_bus_reset(NULL);
 		}
 		break;
 	}
diff -Nru a/drivers/scsi/pcmcia/sym53c500_cs.c b/drivers/scsi/pcmcia/sym53c500_cs.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/drivers/scsi/pcmcia/sym53c500_cs.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,1042 @@
+/*
+*  sym53c500_cs.c	Bob Tracy (rct@frus.com)
+*
+*  A rewrite of the pcmcia-cs add-on driver for newer (circa 1997)
+*  New Media Bus Toaster PCMCIA SCSI cards using the Symbios Logic
+*  53c500 controller: intended for use with 2.6 and later kernels.
+*  The pcmcia-cs add-on version of this driver is not supported
+*  beyond 2.4.  It consisted of three files with history/copyright
+*  information as follows:
+*
+*  SYM53C500.h
+*	Bob Tracy (rct@frus.com)
+*	Original by Tom Corner (tcorner@via.at).
+*	Adapted from NCR53c406a.h which is Copyrighted (C) 1994
+*	Normunds Saumanis (normunds@rx.tech.swh.lv)
+*
+*  SYM53C500.c
+*	Bob Tracy (rct@frus.com)
+*	Original driver by Tom Corner (tcorner@via.at) was adapted
+*	from NCR53c406a.c which is Copyrighted (C) 1994, 1995, 1996 
+*	Normunds Saumanis (normunds@fi.ibm.com)
+*
+*  sym53c500.c
+*	Bob Tracy (rct@frus.com)
+*	Original by Tom Corner (tcorner@via.at) was adapted from a
+*	driver for the Qlogic SCSI card written by
+*	David Hinds (dhinds@allegro.stanford.edu).
+* 
+*  This program is free software; you can redistribute it and/or modify it
+*  under the terms of the GNU General Public License as published by the
+*  Free Software Foundation; either version 2, or (at your option) any
+*  later version.
+*
+*  This program is distributed in the hope that it will be useful, but
+*  WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+*  General Public License for more details.
+*/
+
+#define SYM53C500_DEBUG 0
+#define VERBOSE_SYM53C500_DEBUG 0
+
+/*
+*  Set this to 0 if you encounter kernel lockups while transferring 
+*  data in PIO mode.  Note this can be changed via "sysfs".
+*/
+#define USE_FAST_PIO 1
+
+/* =============== End of user configurable parameters ============== */
+
+#include <linux/module.h>
+#include <linux/moduleparam.h>
+#include <linux/errno.h>
+#include <linux/init.h>
+#include <linux/interrupt.h>
+#include <linux/kernel.h>
+#include <linux/sched.h>
+#include <linux/slab.h>
+#include <linux/string.h>
+#include <linux/ioport.h>
+#include <linux/blkdev.h>
+#include <linux/spinlock.h>
+#include <linux/bitops.h>
+
+#include <asm/io.h>
+#include <asm/dma.h>
+#include <asm/irq.h>
+
+#include <scsi/scsi_ioctl.h>
+#include <scsi/scsi_cmnd.h>
+#include <scsi/scsi_device.h>
+#include <scsi/scsi.h>
+#include <scsi/scsi_host.h>
+
+#include <pcmcia/cs_types.h>
+#include <pcmcia/cs.h>
+#include <pcmcia/cistpl.h>
+#include <pcmcia/ds.h>
+#include <pcmcia/ciscode.h>
+
+/* ================================================================== */
+
+#ifdef PCMCIA_DEBUG
+static int pc_debug = PCMCIA_DEBUG;
+module_param(pc_debug, int, 0);
+#define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
+static char *version =
+"sym53c500_cs.c 0.9b 2004/05/10 (Bob Tracy)";
+#else
+#define DEBUG(n, args...)
+#endif
+
+/* ================================================================== */
+
+/* Parameters that can be set with 'insmod' */
+
+/* Bit map of interrupts to choose from */
+static unsigned int irq_mask = 0xdeb8;	/* 3, 6, 7, 9-12, 14, 15 */
+static int irq_list[4] = { -1 };
+static int num_irqs = 1;
+
+module_param(irq_mask, int, 0);
+MODULE_PARM_DESC(irq_mask, "IRQ mask bits (default: 0xdeb8)");
+module_param_array(irq_list, int, num_irqs, 0);
+MODULE_PARM_DESC(irq_list, "Comma-separated list of up to 4 IRQs to try (default: auto select).");
+
+/* ================================================================== */
+
+#define SYNC_MODE 0 		/* Synchronous transfer mode */
+
+/* Default configuration */
+#define C1_IMG   0x07		/* ID=7 */
+#define C2_IMG   0x48		/* FE SCSI2 */
+#define C3_IMG   0x20		/* CDB */
+#define C4_IMG   0x04		/* ANE */
+#define C5_IMG   0xa4		/* ? changed from b6= AA PI SIE POL */
+#define C7_IMG   0x80		/* added for SYM53C500 t. corner */
+
+/* Hardware Registers: offsets from io_port (base) */
+
+/* Control Register Set 0 */
+#define TC_LSB		0x00		/* transfer counter lsb */
+#define TC_MSB		0x01		/* transfer counter msb */
+#define SCSI_FIFO	0x02		/* scsi fifo register */
+#define CMD_REG		0x03		/* command register */
+#define STAT_REG	0x04		/* status register */
+#define DEST_ID		0x04		/* selection/reselection bus id */
+#define INT_REG		0x05		/* interrupt status register */
+#define SRTIMOUT	0x05		/* select/reselect timeout reg */
+#define SEQ_REG		0x06		/* sequence step register */
+#define SYNCPRD		0x06		/* synchronous transfer period */
+#define FIFO_FLAGS	0x07		/* indicates # of bytes in fifo */
+#define SYNCOFF		0x07		/* synchronous offset register */
+#define CONFIG1		0x08		/* configuration register */
+#define CLKCONV		0x09		/* clock conversion register */
+/* #define TESTREG	0x0A */		/* test mode register */
+#define CONFIG2		0x0B		/* configuration 2 register */
+#define CONFIG3		0x0C		/* configuration 3 register */
+#define CONFIG4		0x0D		/* configuration 4 register */
+#define TC_HIGH		0x0E		/* transfer counter high */
+/* #define FIFO_BOTTOM	0x0F */		/* reserve FIFO byte register */
+
+/* Control Register Set 1 */
+/* #define JUMPER_SENSE	0x00 */		/* jumper sense port reg (r/w) */
+/* #define SRAM_PTR	0x01 */		/* SRAM address pointer reg (r/w) */
+/* #define SRAM_DATA	0x02 */		/* SRAM data register (r/w) */
+#define PIO_FIFO	0x04		/* PIO FIFO registers (r/w) */
+/* #define PIO_FIFO1	0x05 */		/*  */
+/* #define PIO_FIFO2	0x06 */		/*  */
+/* #define PIO_FIFO3	0x07 */		/*  */
+#define PIO_STATUS	0x08		/* PIO status (r/w) */
+/* #define ATA_CMD	0x09 */		/* ATA command/status reg (r/w) */
+/* #define ATA_ERR	0x0A */		/* ATA features/error reg (r/w) */
+#define PIO_FLAG	0x0B		/* PIO flag interrupt enable (r/w) */
+#define CONFIG5		0x09		/* configuration 5 register */
+/* #define SIGNATURE	0x0E */		/* signature register (r) */
+/* #define CONFIG6	0x0F */		/* configuration 6 register (r) */
+#define CONFIG7		0x0d
+
+/* select register set 0 */
+#define REG0(x)		(outb(C4_IMG, (x) + CONFIG4))
+/* select register set 1 */
+#define REG1(x)		outb(C7_IMG, (x) + CONFIG7); outb(C5_IMG, (x) + CONFIG5)
+
+#if SYM53C500_DEBUG
+#define DEB(x) x
+#else
+#define DEB(x)
+#endif
+
+#if VERBOSE_SYM53C500_DEBUG
+#define VDEB(x) x
+#else
+#define VDEB(x)
+#endif
+
+#define LOAD_DMA_COUNT(x, count) \
+  outb(count & 0xff, (x) + TC_LSB); \
+  outb((count >> 8) & 0xff, (x) + TC_MSB); \
+  outb((count >> 16) & 0xff, (x) + TC_HIGH);
+
+/* Chip commands */
+#define DMA_OP               0x80
+
+#define SCSI_NOP             0x00
+#define FLUSH_FIFO           0x01
+#define CHIP_RESET           0x02
+#define SCSI_RESET           0x03
+#define RESELECT             0x40
+#define SELECT_NO_ATN        0x41
+#define SELECT_ATN           0x42
+#define SELECT_ATN_STOP      0x43
+#define ENABLE_SEL           0x44
+#define DISABLE_SEL          0x45
+#define SELECT_ATN3          0x46
+#define RESELECT3            0x47
+#define TRANSFER_INFO        0x10
+#define INIT_CMD_COMPLETE    0x11
+#define MSG_ACCEPT           0x12
+#define TRANSFER_PAD         0x18
+#define SET_ATN              0x1a
+#define RESET_ATN            0x1b
+#define SEND_MSG             0x20
+#define SEND_STATUS          0x21
+#define SEND_DATA            0x22
+#define DISCONN_SEQ          0x23
+#define TERMINATE_SEQ        0x24
+#define TARG_CMD_COMPLETE    0x25
+#define DISCONN              0x27
+#define RECV_MSG             0x28
+#define RECV_CMD             0x29
+#define RECV_DATA            0x2a
+#define RECV_CMD_SEQ         0x2b
+#define TARGET_ABORT_DMA     0x04
+
+/* ================================================================== */
+
+struct scsi_info_t {
+	dev_link_t link;
+	dev_node_t node;
+	struct Scsi_Host *host;
+	unsigned short manf_id;
+};
+
+/*
+*  Repository for per-instance host data.
+*/
+struct sym53c500_data {
+	struct scsi_cmnd *current_SC;
+	int fast_pio;
+};
+
+enum Phase {
+    idle,
+    data_out,
+    data_in,
+    command_ph,
+    status_ph,
+    message_out,
+    message_in
+};
+
+/* ================================================================== */
+
+/*
+*  Global (within this module) variables other than
+*  sym53c500_driver_template (the scsi_host_template).
+*/
+static dev_link_t *dev_list;
+static dev_info_t dev_info = "sym53c500_cs";
+
+/* ================================================================== */
+
+static void
+chip_init(int io_port)
+{
+	REG1(io_port);
+	outb(0x01, io_port + PIO_STATUS);
+	outb(0x00, io_port + PIO_FLAG);
+
+	outb(C4_IMG, io_port + CONFIG4);	/* REG0(io_port); */
+	outb(C3_IMG, io_port + CONFIG3);
+	outb(C2_IMG, io_port + CONFIG2);
+	outb(C1_IMG, io_port + CONFIG1);
+
+	outb(0x05, io_port + CLKCONV);	/* clock conversion factor */
+	outb(0x9C, io_port + SRTIMOUT);	/* Selection timeout */
+	outb(0x05, io_port + SYNCPRD);	/* Synchronous transfer period */
+	outb(SYNC_MODE, io_port + SYNCOFF);	/* synchronous mode */  
+}
+
+static void
+SYM53C500_int_host_reset(int io_port)
+{
+	outb(C4_IMG, io_port + CONFIG4);	/* REG0(io_port); */
+	outb(CHIP_RESET, io_port + CMD_REG);
+	outb(SCSI_NOP, io_port + CMD_REG);	/* required after reset */
+	outb(SCSI_RESET, io_port + CMD_REG);
+	chip_init(io_port);
+}
+
+static __inline__ int
+SYM53C500_pio_read(int fast_pio, int base, unsigned char *request, unsigned int reqlen)
+{
+	int i;
+	int len;	/* current scsi fifo size */
+
+	REG1(base);
+	while (reqlen) {
+		i = inb(base + PIO_STATUS);
+		/* VDEB(printk("pio_status=%x\n", i)); */
+		if (i & 0x80) 
+			return 0;
+
+		switch (i & 0x1e) {
+		default:
+		case 0x10:	/* fifo empty */
+			len = 0;
+			break;
+		case 0x0:
+			len = 1;
+			break; 
+		case 0x8:	/* fifo 1/3 full */
+			len = 42;
+			break;
+		case 0xc:	/* fifo 2/3 full */
+			len = 84;
+			break;
+		case 0xe:	/* fifo full */
+			len = 128;
+			break;
+		}
+
+		if ((i & 0x40) && len == 0) { /* fifo empty and interrupt occurred */
+			return 0;
+		}
+
+		if (len) {
+			if (len > reqlen) 
+				len = reqlen;
+
+			if (fast_pio && len > 3) {
+				insl(base + PIO_FIFO, request, len >> 2);
+				request += len & 0xfc; 
+				reqlen -= len & 0xfc; 
+			} else {
+				while (len--) {
+					*request++ = inb(base + PIO_FIFO);
+					reqlen--;
+				}
+			} 
+		}
+	}
+	return 0;
+}
+
+static __inline__ int
+SYM53C500_pio_write(int fast_pio, int base, unsigned char *request, unsigned int reqlen)
+{
+	int i = 0;
+	int len;	/* current scsi fifo size */
+
+	REG1(base);
+	while (reqlen && !(i & 0x40)) {
+		i = inb(base + PIO_STATUS);
+		/* VDEB(printk("pio_status=%x\n", i)); */
+		if (i & 0x80)	/* error */
+			return 0;
+
+		switch (i & 0x1e) {
+		case 0x10:
+			len = 128;
+			break;
+		case 0x0:
+			len = 84;
+			break;
+		case 0x8:
+			len = 42;
+			break;
+		case 0xc:
+			len = 1;
+			break;
+		default:
+		case 0xe:
+			len = 0;
+			break;
+		}
+
+		if (len) {
+			if (len > reqlen)
+				len = reqlen;
+
+			if (fast_pio && len > 3) {
+				outsl(base + PIO_FIFO, request, len >> 2);
+				request += len & 0xfc;
+				reqlen -= len & 0xfc;
+			} else {
+				while (len--) {
+					outb(*request++, base + PIO_FIFO);
+					reqlen--;
+				}
+			}
+		}
+	}
+	return 0;
+}
+
+static irqreturn_t
+SYM53C500_intr(int irq, void *dev_id, struct pt_regs *regs)
+{
+	unsigned long flags;
+	struct Scsi_Host *dev = dev_id;
+	DEB(unsigned char fifo_size;)
+	DEB(unsigned char seq_reg;)
+	unsigned char status, int_reg;
+	unsigned char pio_status;
+	struct scatterlist *sglist;
+	unsigned int sgcount;
+	int port_base = dev->io_port;
+	struct sym53c500_data *data =
+	    (struct sym53c500_data *)dev->hostdata;
+	struct scsi_cmnd *curSC = data->current_SC;
+	int fast_pio = data->fast_pio;
+
+	spin_lock_irqsave(dev->host_lock, flags);
+
+	VDEB(printk("SYM53C500_intr called\n"));
+
+	REG1(port_base);
+	pio_status = inb(port_base + PIO_STATUS);
+	REG0(port_base);
+	status = inb(port_base + STAT_REG);
+	DEB(seq_reg = inb(port_base + SEQ_REG));
+	int_reg = inb(port_base + INT_REG);
+	DEB(fifo_size = inb(port_base + FIFO_FLAGS) & 0x1f);
+
+#if SYM53C500_DEBUG
+	printk("status=%02x, seq_reg=%02x, int_reg=%02x, fifo_size=%02x", 
+	    status, seq_reg, int_reg, fifo_size);
+	printk(", pio=%02x\n", pio_status);
+#endif /* SYM53C500_DEBUG */
+
+	if (int_reg & 0x80) {	/* SCSI reset intr */
+		DEB(printk("SYM53C500: reset intr received\n"));
+		curSC->result = DID_RESET << 16;
+		goto idle_out;
+	}
+
+	if (pio_status & 0x80) {
+		printk("SYM53C500: Warning: PIO error!\n");
+		curSC->result = DID_ERROR << 16;
+		goto idle_out;
+	}
+
+	if (status & 0x20) {		/* Parity error */
+		printk("SYM53C500: Warning: parity error!\n");
+		curSC->result = DID_PARITY << 16;
+		goto idle_out;
+	}
+
+	if (status & 0x40) {		/* Gross error */
+		printk("SYM53C500: Warning: gross error!\n");
+		curSC->result = DID_ERROR << 16;
+		goto idle_out;
+	}
+
+	if (int_reg & 0x20) {		/* Disconnect */
+		DEB(printk("SYM53C500: disconnect intr received\n"));
+		if (curSC->SCp.phase != message_in) {	/* Unexpected disconnect */
+			curSC->result = DID_NO_CONNECT << 16;
+		} else {	/* Command complete, return status and message */
+			curSC->result = (curSC->SCp.Status & 0xff)
+			    | ((curSC->SCp.Message & 0xff) << 8) | (DID_OK << 16);
+		}
+		goto idle_out;
+	}
+
+	switch (status & 0x07) {	/* scsi phase */
+	case 0x00:			/* DATA-OUT */
+		if (int_reg & 0x10) {	/* Target requesting info transfer */
+			curSC->SCp.phase = data_out;
+			VDEB(printk("SYM53C500: Data-Out phase\n"));
+			outb(FLUSH_FIFO, port_base + CMD_REG);
+			LOAD_DMA_COUNT(port_base, curSC->request_bufflen);	/* Max transfer size */
+			outb(TRANSFER_INFO | DMA_OP, port_base + CMD_REG);
+			if (!curSC->use_sg)	/* Don't use scatter-gather */
+				SYM53C500_pio_write(fast_pio, port_base, curSC->request_buffer, curSC->request_bufflen);
+			else {	/* use scatter-gather */
+				sgcount = curSC->use_sg;
+				sglist = curSC->request_buffer;
+				while (sgcount--) {
+					SYM53C500_pio_write(fast_pio, port_base, page_address(sglist->page) + sglist->offset, sglist->length);
+					sglist++;
+				}
+			}
+			REG0(port_base);
+		}
+		break;
+
+	case 0x01:		/* DATA-IN */
+		if (int_reg & 0x10) {	/* Target requesting info transfer */
+			curSC->SCp.phase = data_in;
+			VDEB(printk("SYM53C500: Data-In phase\n"));
+			outb(FLUSH_FIFO, port_base + CMD_REG);
+			LOAD_DMA_COUNT(port_base, curSC->request_bufflen);	/* Max transfer size */
+			outb(TRANSFER_INFO | DMA_OP, port_base + CMD_REG);
+			if (!curSC->use_sg)	/* Don't use scatter-gather */
+				SYM53C500_pio_read(fast_pio, port_base, curSC->request_buffer, curSC->request_bufflen);
+			else {	/* Use scatter-gather */
+				sgcount = curSC->use_sg;
+				sglist = curSC->request_buffer;
+				while (sgcount--) {
+					SYM53C500_pio_read(fast_pio, port_base, page_address(sglist->page) + sglist->offset, sglist->length);
+					sglist++;
+				}
+			}
+			REG0(port_base);
+		}
+		break;
+
+	case 0x02:		/* COMMAND */
+		curSC->SCp.phase = command_ph;
+		printk("SYM53C500: Warning: Unknown interrupt occurred in command phase!\n");
+		break;
+
+	case 0x03:		/* STATUS */
+		curSC->SCp.phase = status_ph;
+		VDEB(printk("SYM53C500: Status phase\n"));
+		outb(FLUSH_FIFO, port_base + CMD_REG);
+		outb(INIT_CMD_COMPLETE, port_base + CMD_REG);
+		break;
+
+	case 0x04:		/* Reserved */
+	case 0x05:		/* Reserved */
+		printk("SYM53C500: WARNING: Reserved phase!!!\n");
+		break;
+
+	case 0x06:		/* MESSAGE-OUT */
+		DEB(printk("SYM53C500: Message-Out phase\n"));
+		curSC->SCp.phase = message_out;
+		outb(SET_ATN, port_base + CMD_REG);	/* Reject the message */
+		outb(MSG_ACCEPT, port_base + CMD_REG);
+		break;
+
+	case 0x07:		/* MESSAGE-IN */
+		VDEB(printk("SYM53C500: Message-In phase\n"));
+		curSC->SCp.phase = message_in;
+
+		curSC->SCp.Status = inb(port_base + SCSI_FIFO);
+		curSC->SCp.Message = inb(port_base + SCSI_FIFO);
+
+		VDEB(printk("SCSI FIFO size=%d\n", inb(port_base + FIFO_FLAGS) & 0x1f));
+		DEB(printk("Status = %02x  Message = %02x\n", curSC->SCp.Status, curSC->SCp.Message));
+
+		if (curSC->SCp.Message == SAVE_POINTERS || curSC->SCp.Message == DISCONNECT) {
+			outb(SET_ATN, port_base + CMD_REG);	/* Reject message */
+			DEB(printk("Discarding SAVE_POINTERS message\n"));
+		}
+		outb(MSG_ACCEPT, port_base + CMD_REG);
+		break;
+	}
+out:
+	spin_unlock_irqrestore(dev->host_lock, flags);
+	return IRQ_HANDLED;
+
+idle_out:
+	curSC->SCp.phase = idle;
+	curSC->scsi_done(curSC);
+	goto out;
+}
+
+static void
+SYM53C500_release(dev_link_t *link)
+{
+	struct scsi_info_t *info = link->priv;
+	struct Scsi_Host *shost = info->host;
+
+	DEBUG(0, "SYM53C500_release(0x%p)\n", link);
+
+	/*
+	*  Do this before releasing/freeing resources.
+	*/
+	scsi_remove_host(shost);
+
+	/*
+	*  Interrupts getting hosed on card removal.  Try
+	*  the following code, mostly from qlogicfas.c.
+	*/
+	if (shost->irq)
+		free_irq(shost->irq, shost);
+	if (shost->dma_channel != 0xff)
+		free_dma(shost->dma_channel);
+	if (shost->io_port && shost->n_io_port)
+		release_region(shost->io_port, shost->n_io_port);
+
+	link->dev = NULL;
+
+	pcmcia_release_configuration(link->handle);
+	pcmcia_release_io(link->handle, &link->io);
+	pcmcia_release_irq(link->handle, &link->irq);
+
+	link->state &= ~DEV_CONFIG;
+
+	scsi_host_put(shost);
+} /* SYM53C500_release */
+
+static const char*
+SYM53C500_info(struct Scsi_Host *SChost)
+{
+	static char info_msg[256];
+	struct sym53c500_data *data =
+	    (struct sym53c500_data *)SChost->hostdata;
+
+	DEB(printk("SYM53C500_info called\n"));
+	(void)snprintf(info_msg, sizeof(info_msg),
+	    "SYM53C500 at 0x%lx, IRQ %d, %s PIO mode.", 
+	    SChost->io_port, SChost->irq, data->fast_pio ? "fast" : "slow");
+	return (info_msg);
+}
+
+static int 
+SYM53C500_queue(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_cmnd *))
+{
+	int i;
+	int port_base = SCpnt->device->host->io_port;
+	struct sym53c500_data *data =
+	    (struct sym53c500_data *)SCpnt->device->host->hostdata;
+
+	VDEB(printk("SYM53C500_queue called\n"));
+
+	DEB(printk("cmd=%02x, cmd_len=%02x, target=%02x, lun=%02x, bufflen=%d\n", 
+	    SCpnt->cmnd[0], SCpnt->cmd_len, SCpnt->device->id, 
+	    SCpnt->device->lun,  SCpnt->request_bufflen));
+
+	VDEB(for (i = 0; i < SCpnt->cmd_len; i++)
+	    printk("cmd[%d]=%02x  ", i, SCpnt->cmnd[i]));
+	VDEB(printk("\n"));
+
+	data->current_SC = SCpnt;
+	data->current_SC->scsi_done = done;
+	data->current_SC->SCp.phase = command_ph;
+	data->current_SC->SCp.Status = 0;
+	data->current_SC->SCp.Message = 0;
+
+	/* We are locked here already by the mid layer */
+	REG0(port_base);
+	outb(SCpnt->device->id, port_base + DEST_ID);	/* set destination */
+	outb(FLUSH_FIFO, port_base + CMD_REG);	/* reset the fifos */
+
+	for (i = 0; i < SCpnt->cmd_len; i++) {
+		outb(SCpnt->cmnd[i], port_base + SCSI_FIFO);
+	}
+	outb(SELECT_NO_ATN, port_base + CMD_REG);
+
+	return 0;
+}
+
+static int 
+SYM53C500_host_reset(struct scsi_cmnd *SCpnt)
+{
+	int port_base = SCpnt->device->host->io_port;
+
+	DEB(printk("SYM53C500_host_reset called\n"));
+	SYM53C500_int_host_reset(port_base);
+
+	return SUCCESS;
+}
+
+static int 
+SYM53C500_biosparm(struct scsi_device *disk,
+    struct block_device *dev,
+    sector_t capacity, int *info_array)
+{
+	int size;
+
+	DEB(printk("SYM53C500_biosparm called\n"));
+
+	size = capacity;
+	info_array[0] = 64;		/* heads */
+	info_array[1] = 32;		/* sectors */
+	info_array[2] = size >> 11;	/* cylinders */
+	if (info_array[2] > 1024) {	/* big disk */
+		info_array[0] = 255;
+		info_array[1] = 63;
+		info_array[2] = size / (255 * 63);
+	}
+	return 0;
+}
+
+static ssize_t
+SYM53C500_show_pio(struct class_device *cdev, char *buf)
+{
+	struct Scsi_Host *SHp = class_to_shost(cdev);
+	struct sym53c500_data *data =
+	    (struct sym53c500_data *)SHp->hostdata;
+
+	return snprintf(buf, 4, "%d\n", data->fast_pio);
+}
+
+static ssize_t
+SYM53C500_store_pio(struct class_device *cdev, const char *buf, size_t count)
+{
+	int pio;
+	struct Scsi_Host *SHp = class_to_shost(cdev);
+	struct sym53c500_data *data =
+	    (struct sym53c500_data *)SHp->hostdata;
+
+	pio = simple_strtoul(buf, NULL, 0);
+	if (pio == 0 || pio == 1) {
+		data->fast_pio = pio;
+		return count;
+	}
+	else
+		return -EINVAL;
+}
+
+/*
+*  SCSI HBA device attributes we want to
+*  make available via sysfs.
+*/
+static struct class_device_attribute SYM53C500_pio_attr = {
+	.attr = {
+		.name = "fast_pio",
+		.mode = (S_IRUGO | S_IWUSR),
+	},
+	.show = SYM53C500_show_pio,
+	.store = SYM53C500_store_pio,
+};
+
+static struct class_device_attribute *SYM53C500_shost_attrs[] = {
+	&SYM53C500_pio_attr,
+	NULL,
+};
+
+/*
+*  scsi_host_template initializer
+*/
+static struct scsi_host_template sym53c500_driver_template = {
+     .module			= THIS_MODULE,
+     .name			= "SYM53C500",
+     .info			= SYM53C500_info,
+     .queuecommand		= SYM53C500_queue,
+     .eh_host_reset_handler	= SYM53C500_host_reset,
+     .bios_param		= SYM53C500_biosparm,
+     .proc_name			= "SYM53C500",
+     .can_queue			= 1,
+     .this_id			= 7,
+     .sg_tablesize		= 32,
+     .cmd_per_lun		= 1,
+     .use_clustering		= ENABLE_CLUSTERING,
+     .shost_attrs		= SYM53C500_shost_attrs
+};
+
+#define CS_CHECK(fn, ret) \
+do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
+
+static void
+SYM53C500_config(dev_link_t *link)
+{
+	client_handle_t handle = link->handle;
+	struct scsi_info_t *info = link->priv;
+	tuple_t tuple;
+	cisparse_t parse;
+	int i, last_ret, last_fn;
+	int irq_level, port_base;
+	unsigned short tuple_data[32];
+	struct Scsi_Host *host;
+	struct scsi_host_template *tpnt = &sym53c500_driver_template;
+	struct sym53c500_data *data;
+
+	DEBUG(0, "SYM53C500_config(0x%p)\n", link);
+
+	tuple.TupleData = (cisdata_t *)tuple_data;
+	tuple.TupleDataMax = 64;
+	tuple.TupleOffset = 0;
+	tuple.DesiredTuple = CISTPL_CONFIG;
+	CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
+	CS_CHECK(GetTupleData, pcmcia_get_tuple_data(handle, &tuple));
+	CS_CHECK(ParseTuple, pcmcia_parse_tuple(handle, &tuple, &parse));
+	link->conf.ConfigBase = parse.config.base;
+
+	tuple.DesiredTuple = CISTPL_MANFID;
+	if ((pcmcia_get_first_tuple(handle, &tuple) == CS_SUCCESS) &&
+	    (pcmcia_get_tuple_data(handle, &tuple) == CS_SUCCESS))
+		info->manf_id = le16_to_cpu(tuple.TupleData[0]);
+
+	/* Configure card */
+	link->state |= DEV_CONFIG;
+
+	tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
+	CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(handle, &tuple));
+	while (1) {
+		if (pcmcia_get_tuple_data(handle, &tuple) != 0 ||
+		    pcmcia_parse_tuple(handle, &tuple, &parse) != 0)
+			goto next_entry;
+		link->conf.ConfigIndex = parse.cftable_entry.index;
+		link->io.BasePort1 = parse.cftable_entry.io.win[0].base;
+		link->io.NumPorts1 = parse.cftable_entry.io.win[0].len;
+
+		if (link->io.BasePort1 != 0) {
+			i = pcmcia_request_io(handle, &link->io);
+			if (i == CS_SUCCESS)
+				break;
+		}
+next_entry:
+		CS_CHECK(GetNextTuple, pcmcia_get_next_tuple(handle, &tuple));
+	}
+
+	CS_CHECK(RequestIRQ, pcmcia_request_irq(handle, &link->irq));
+	CS_CHECK(RequestConfiguration, pcmcia_request_configuration(handle, &link->conf));
+
+	/*
+	*  That's the trouble with copying liberally from another driver.
+	*  Some things probably aren't relevant, and I suspect this entire
+	*  section dealing with manufacturer IDs can be scrapped.	--rct
+	*/
+	if ((info->manf_id == MANFID_MACNICA) ||
+	    (info->manf_id == MANFID_PIONEER) ||
+	    (info->manf_id == 0x0098)) {
+		/* set ATAcmd */
+		outb(0xb4, link->io.BasePort1 + 0xd);
+		outb(0x24, link->io.BasePort1 + 0x9);
+		outb(0x04, link->io.BasePort1 + 0xd);
+	}
+
+	/*
+	*  irq_level == 0 implies tpnt->can_queue == 0, which
+	*  is not supported in 2.6.  Thus, only irq_level > 0
+	*  will be allowed.
+	*
+	*  Possible port_base values are as follows:
+	*
+	*	0x130, 0x230, 0x280, 0x290,
+	*	0x320, 0x330, 0x340, 0x350
+	*/
+	port_base = link->io.BasePort1;
+	irq_level = link->irq.AssignedIRQ;
+
+	DEB(printk("SYM53C500: port_base=0x%x, irq=%d, fast_pio=%d\n",
+	    port_base, irq_level, USE_FAST_PIO);)
+
+	chip_init(port_base);
+
+	host = scsi_host_alloc(tpnt, sizeof(struct sym53c500_data));
+	if (!host) {
+		printk("SYM53C500: Unable to register host, giving up.\n");
+		goto err_release;
+	}
+
+	data = (struct sym53c500_data *)host->hostdata;
+
+	if (irq_level > 0) {
+		if (request_irq(irq_level, SYM53C500_intr, 0, "SYM53C500", host)) {
+			printk("SYM53C500: unable to allocate IRQ %d\n", irq_level);
+			goto err_free_scsi;
+		}
+		DEB(printk("SYM53C500: allocated IRQ %d\n", irq_level));
+	} else if (irq_level == 0) {
+		DEB(printk("SYM53C500: No interrupts detected\n"));
+		goto err_free_scsi;
+	} else {
+		DEB(printk("SYM53C500: Shouldn't get here!\n"));
+		goto err_free_scsi;
+	}
+
+	host->unique_id = port_base;
+	host->irq = irq_level;
+	host->io_port = port_base;
+	host->n_io_port = 0x10;
+	host->dma_channel = -1;
+
+	/*
+	*  Note fast_pio is set to USE_FAST_PIO by
+	*  default, but can be changed via "sysfs".
+	*/
+	data->fast_pio = USE_FAST_PIO;
+
+	sprintf(info->node.dev_name, "scsi%d", host->host_no);
+	link->dev = &info->node;
+	info->host = host;
+
+	if (scsi_add_host(host, NULL))
+		goto err_free_irq;
+
+	scsi_scan_host(host);
+
+	goto out;	/* SUCCESS */
+
+err_free_irq:
+	free_irq(irq_level, host);
+err_free_scsi:
+	scsi_host_put(host);
+err_release:
+	release_region(port_base, 0x10);
+	printk(KERN_INFO "sym53c500_cs: no SCSI devices found\n");
+
+out:
+	link->state &= ~DEV_CONFIG_PENDING;
+	return;
+
+cs_failed:
+	cs_error(link->handle, last_fn, last_ret);
+	SYM53C500_release(link);
+	return;
+} /* SYM53C500_config */
+
+static int
+SYM53C500_event(event_t event, int priority, event_callback_args_t *args)
+{
+	dev_link_t *link = args->client_data;
+	struct scsi_info_t *info = link->priv;
+
+	DEBUG(1, "SYM53C500_event(0x%06x)\n", event);
+
+	switch (event) {
+	case CS_EVENT_CARD_REMOVAL:
+		link->state &= ~DEV_PRESENT;
+		if (link->state & DEV_CONFIG)
+			SYM53C500_release(link);
+		break;
+	case CS_EVENT_CARD_INSERTION:
+		link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
+		SYM53C500_config(link);
+		break;
+	case CS_EVENT_PM_SUSPEND:
+		link->state |= DEV_SUSPEND;
+		/* Fall through... */
+	case CS_EVENT_RESET_PHYSICAL:
+		if (link->state & DEV_CONFIG)
+			pcmcia_release_configuration(link->handle);
+		break;
+	case CS_EVENT_PM_RESUME:
+		link->state &= ~DEV_SUSPEND;
+		/* Fall through... */
+	case CS_EVENT_CARD_RESET:
+		if (link->state & DEV_CONFIG) {
+			pcmcia_request_configuration(link->handle, &link->conf);
+			/* See earlier comment about manufacturer IDs. */
+			if ((info->manf_id == MANFID_MACNICA) ||
+			    (info->manf_id == MANFID_PIONEER) ||
+			    (info->manf_id == 0x0098)) {
+				outb(0x80, link->io.BasePort1 + 0xd);
+				outb(0x24, link->io.BasePort1 + 0x9);
+				outb(0x04, link->io.BasePort1 + 0xd);
+			}
+			/*
+			*  If things don't work after a "resume",
+			*  this is a good place to start looking.
+			*/
+			SYM53C500_int_host_reset(link->io.BasePort1);
+		}
+		break;
+	}
+	return 0;
+} /* SYM53C500_event */
+
+static void
+SYM53C500_detach(dev_link_t *link)
+{
+	dev_link_t **linkp;
+
+	DEBUG(0, "SYM53C500_detach(0x%p)\n", link);
+
+	/* Locate device structure */
+	for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next)
+		if (*linkp == link)
+			break;
+	if (*linkp == NULL)
+		return;
+
+	if (link->state & DEV_CONFIG)
+		SYM53C500_release(link);
+
+	if (link->handle)
+		pcmcia_deregister_client(link->handle);
+
+	/* Unlink device structure, free bits. */
+	*linkp = link->next;
+	kfree(link->priv);
+	link->priv = NULL;
+} /* SYM53C500_detach */
+
+static dev_link_t *
+SYM53C500_attach(void)
+{
+	struct scsi_info_t *info;
+	client_reg_t client_reg;
+	dev_link_t *link;
+	int i, ret;
+
+	DEBUG(0, "SYM53C500_attach()\n");
+
+	/* Create new SCSI device */
+	info = kmalloc(sizeof(*info), GFP_KERNEL);
+	if (!info)
+		return NULL;
+	memset(info, 0, sizeof(*info));
+	link = &info->link;
+	link->priv = info;
+	link->io.NumPorts1 = 16;
+	link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
+	link->io.IOAddrLines = 10;
+	link->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
+	link->irq.IRQInfo1 = IRQ_INFO2_VALID | IRQ_LEVEL_ID;
+	if (irq_list[0] == -1)
+		link->irq.IRQInfo2 = irq_mask;
+	else
+		for (i = 0; i < 4; i++)
+			link->irq.IRQInfo2 |= 1 << irq_list[i];
+	link->conf.Attributes = CONF_ENABLE_IRQ;
+	link->conf.Vcc = 50;
+	link->conf.IntType = INT_MEMORY_AND_IO;
+	link->conf.Present = PRESENT_OPTION;
+
+	/* Register with Card Services */
+	link->next = dev_list;
+	dev_list = link;
+	client_reg.dev_info = &dev_info;
+	client_reg.Attributes = INFO_IO_CLIENT | INFO_CARD_SHARE;
+	client_reg.event_handler = &SYM53C500_event;
+	client_reg.EventMask = CS_EVENT_RESET_REQUEST | CS_EVENT_CARD_RESET |
+	    CS_EVENT_CARD_INSERTION | CS_EVENT_CARD_REMOVAL |
+	    CS_EVENT_PM_SUSPEND | CS_EVENT_PM_RESUME;
+	client_reg.Version = 0x0210;
+	client_reg.event_callback_args.client_data = link;
+	ret = pcmcia_register_client(&link->handle, &client_reg);
+	if (ret != 0) {
+		cs_error(link->handle, RegisterClient, ret);
+		SYM53C500_detach(link);
+		return NULL;
+	}
+
+	return link;
+} /* SYM53C500_attach */
+
+MODULE_AUTHOR("Bob Tracy <rct@frus.com>");
+MODULE_DESCRIPTION("SYM53C500 PCMCIA SCSI driver");
+MODULE_LICENSE("GPL");
+
+static struct pcmcia_driver sym53c500_cs_driver = {
+	.owner		= THIS_MODULE,
+	.drv		= {
+		.name	= "sym53c500_cs",
+	},
+	.attach		= SYM53C500_attach,
+	.detach		= SYM53C500_detach,
+};
+
+static int __init
+init_sym53c500_cs(void)
+{
+	return pcmcia_register_driver(&sym53c500_cs_driver);
+}
+
+static void __exit
+exit_sym53c500_cs(void)
+{
+	pcmcia_unregister_driver(&sym53c500_cs_driver);
+}
+
+module_init(init_sym53c500_cs);
+module_exit(exit_sym53c500_cs);
diff -Nru a/drivers/scsi/ppa.c b/drivers/scsi/ppa.c
--- a/drivers/scsi/ppa.c	Sun May 16 01:18:35 2004
+++ b/drivers/scsi/ppa.c	Sun May 16 01:18:35 2004
@@ -15,18 +15,23 @@
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/blkdev.h>
-#include <asm/io.h>
 #include <linux/parport.h>
 #include <linux/workqueue.h>
-#include "scsi.h"
-#include "hosts.h"
+#include <asm/io.h>
+
+#include <scsi/scsi.h>
+#include <scsi/scsi_cmnd.h>
+#include <scsi/scsi_device.h>
+#include <scsi/scsi_host.h>
+
+
 static void ppa_reset_pulse(unsigned int base);
 
 typedef struct {
 	struct pardevice *dev;	/* Parport device entry         */
 	int base;		/* Actual port address          */
 	int mode;		/* Transfer mode                */
-	Scsi_Cmnd *cur_cmd;	/* Current queued command       */
+	struct scsi_cmnd *cur_cmd;	/* Current queued command       */
 	struct work_struct ppa_tq;	/* Polling interrupt stuff       */
 	unsigned long jstart;	/* Jiffies at start             */
 	unsigned long recon_tmo;	/* How many usecs to wait for reconnection (6th bit) */
@@ -501,7 +506,7 @@
 	return device_check(dev);
 }
 
-static inline int ppa_send_command(Scsi_Cmnd *cmd)
+static inline int ppa_send_command(struct scsi_cmnd *cmd)
 {
 	ppa_struct *dev = ppa_dev(cmd->device->host);
 	int k;
@@ -522,7 +527,7 @@
  * The driver appears to remain stable if we speed up the parallel port
  * i/o in this function, but not elsewhere.
  */
-static int ppa_completion(Scsi_Cmnd *cmd)
+static int ppa_completion(struct scsi_cmnd *cmd)
 {
 	/* Return codes:
 	 * -1     Error
@@ -626,7 +631,7 @@
 static void ppa_interrupt(void *data)
 {
 	ppa_struct *dev = (ppa_struct *) data;
-	Scsi_Cmnd *cmd = dev->cur_cmd;
+	struct scsi_cmnd *cmd = dev->cur_cmd;
 
 	if (!cmd) {
 		printk("PPA: bug in ppa_interrupt\n");
@@ -682,7 +687,7 @@
 	cmd->scsi_done(cmd);
 }
 
-static int ppa_engine(ppa_struct *dev, Scsi_Cmnd *cmd)
+static int ppa_engine(ppa_struct *dev, struct scsi_cmnd *cmd)
 {
 	unsigned short ppb = dev->base;
 	unsigned char l = 0, h = 0;
@@ -802,7 +807,8 @@
 	return 0;
 }
 
-static int ppa_queuecommand(Scsi_Cmnd *cmd, void (*done) (Scsi_Cmnd *))
+static int ppa_queuecommand(struct scsi_cmnd *cmd,
+		void (*done) (struct scsi_cmnd *))
 {
 	ppa_struct *dev = ppa_dev(cmd->device->host);
 
@@ -847,7 +853,7 @@
 	return 0;
 }
 
-static int ppa_abort(Scsi_Cmnd *cmd)
+static int ppa_abort(struct scsi_cmnd *cmd)
 {
 	ppa_struct *dev = ppa_dev(cmd->device->host);
 	/*
@@ -875,7 +881,7 @@
 	w_ctr(base, 0xc);
 }
 
-static int ppa_reset(Scsi_Cmnd *cmd)
+static int ppa_reset(struct scsi_cmnd *cmd)
 {
 	ppa_struct *dev = ppa_dev(cmd->device->host);
 
@@ -974,7 +980,7 @@
 	return -ENODEV;
 }
 
-static Scsi_Host_Template ppa_template = {
+static struct scsi_host_template ppa_template = {
 	.module			= THIS_MODULE,
 	.proc_name		= "ppa",
 	.proc_info		= ppa_proc_info,
diff -Nru a/drivers/scsi/ppa.h b/drivers/scsi/ppa.h
--- a/drivers/scsi/ppa.h	Sun May 16 01:18:36 2004
+++ b/drivers/scsi/ppa.h	Sun May 16 01:18:36 2004
@@ -146,6 +146,6 @@
 #define w_ctr(x,y)      outb(y, (x)+2)
 #endif
 
-static int ppa_engine(ppa_struct *, Scsi_Cmnd *);
+static int ppa_engine(ppa_struct *, struct scsi_cmnd *);
 
 #endif				/* _PPA_H */
diff -Nru a/drivers/scsi/qla1280.c b/drivers/scsi/qla1280.c
--- a/drivers/scsi/qla1280.c	Sun May 16 01:18:37 2004
+++ b/drivers/scsi/qla1280.c	Sun May 16 01:18:37 2004
@@ -3371,6 +3371,7 @@
 	sp->flags |= SRB_SENT;
 	ha->actthreads++;
 	WRT_REG_WORD(&reg->mailbox4, ha->req_ring_index);
+	(void) RD_REG_WORD(&reg->mailbox4); /* PCI posted write flush */
 
  out:
 	if (status)
@@ -3639,6 +3640,7 @@
 	sp->flags |= SRB_SENT;
 	ha->actthreads++;
 	WRT_REG_WORD(&reg->mailbox4, ha->req_ring_index);
+	(void) RD_REG_WORD(&reg->mailbox4); /* PCI posted write flush */
 
 out:
 	if (status)
@@ -3750,6 +3752,7 @@
 
 	/* Set chip new ring index. */
 	WRT_REG_WORD(&reg->mailbox4, ha->req_ring_index);
+	(void) RD_REG_WORD(&reg->mailbox4); /* PCI posted write flush */
 
 	LEAVE("qla1280_isp_cmd");
 }
@@ -3788,7 +3791,7 @@
 
 	/* Check for mailbox interrupt. */
 
-	mailbox[0] = RD_REG_WORD(&reg->semaphore);
+	mailbox[0] = RD_REG_WORD_dmasync(&reg->semaphore);
 
 	if (mailbox[0] & BIT_0) {
 		/* Get mailbox data. */
diff -Nru a/drivers/scsi/qla1280.h b/drivers/scsi/qla1280.h
--- a/drivers/scsi/qla1280.h	Sun May 16 01:18:37 2004
+++ b/drivers/scsi/qla1280.h	Sun May 16 01:18:37 2004
@@ -57,7 +57,8 @@
 #define BIT_31	0x80000000
 
 #if MEMORY_MAPPED_IO
-#define RD_REG_WORD(addr)		readw(addr)
+#define RD_REG_WORD(addr)		readw_relaxed(addr)
+#define RD_REG_WORD_dmasync(addr)	readw(addr)
 #define WRT_REG_WORD(addr, data)	writew(data, addr)
 #else				/* MEMORY_MAPPED_IO */
 #define RD_REG_WORD(addr)		inw((unsigned long)addr)
diff -Nru a/drivers/scsi/qla2xxx/ql2300_fw.c b/drivers/scsi/qla2xxx/ql2300_fw.c
--- a/drivers/scsi/qla2xxx/ql2300_fw.c	Sun May 16 01:18:35 2004
+++ b/drivers/scsi/qla2xxx/ql2300_fw.c	Sun May 16 01:18:35 2004
@@ -18,7 +18,7 @@
  *************************************************************************/
 
 /*
- *	Firmware Version 3.02.26 (08:42 Mar 11, 2004)
+ *	Firmware Version 3.02.28 (13:56 Apr 03, 2004)
  */
 
 #ifdef UNIQUE_FW_NAME
@@ -28,15 +28,15 @@
 #endif
 
 #ifdef UNIQUE_FW_NAME
-unsigned char fw2300ipx_version_str[] = {3, 2,26};
+unsigned char fw2300ipx_version_str[] = {3, 2,28};
 #else
-unsigned char firmware_version[] = {3, 2,26};
+unsigned char firmware_version[] = {3, 2,28};
 #endif
 
 #ifdef UNIQUE_FW_NAME
-#define fw2300ipx_VERSION_STRING "3.02.26"
+#define fw2300ipx_VERSION_STRING "3.02.28"
 #else
-#define FW_VERSION_STRING "3.02.26"
+#define FW_VERSION_STRING "3.02.28"
 #endif
 
 #ifdef UNIQUE_FW_NAME
@@ -50,12 +50,12 @@
 #else
 unsigned short risc_code01[] = { 
 #endif
-	0x0470, 0x0000, 0x0000, 0xe9a6, 0x0000, 0x0003, 0x0002, 0x001a,
+	0x0470, 0x0000, 0x0000, 0xe9c7, 0x0000, 0x0003, 0x0002, 0x001c,
 	0x0137, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2032, 0x3030,
 	0x3120, 0x514c, 0x4f47, 0x4943, 0x2043, 0x4f52, 0x504f, 0x5241,
 	0x5449, 0x4f4e, 0x2049, 0x5350, 0x3233, 0x3030, 0x2046, 0x6972,
 	0x6d77, 0x6172, 0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030,
-	0x332e, 0x3032, 0x2e32, 0x3620, 0x2020, 0x2020, 0x2400, 0x20a9,
+	0x332e, 0x3032, 0x2e32, 0x3820, 0x2020, 0x2020, 0x2400, 0x20a9,
 	0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2200, 0x20a9, 0x000f,
 	0x2001, 0x0000, 0x400f, 0x2091, 0x2400, 0x20a9, 0x000f, 0x2001,
 	0x0000, 0x400f, 0x2091, 0x2600, 0x20a9, 0x000f, 0x2001, 0x0000,
@@ -78,98 +78,98 @@
 	0x1800, 0x810d, 0x810d, 0x810d, 0x810d, 0x810d, 0x918c, 0x001f,
 	0x2001, 0x0001, 0x9112, 0x20e9, 0x0001, 0x20a1, 0x0800, 0x900e,
 	0x20a9, 0x0800, 0x4104, 0x8211, 0x1dd8, 0x080c, 0x0f17, 0x080c,
-	0x6029, 0x080c, 0xaddd, 0x080c, 0x10ce, 0x080c, 0x12ed, 0x080c,
-	0x1ba4, 0x080c, 0x0d69, 0x080c, 0x1053, 0x080c, 0x341e, 0x080c,
-	0x76ac, 0x080c, 0x698e, 0x080c, 0x86cd, 0x080c, 0x8401, 0x080c,
-	0x2478, 0x080c, 0x8f6f, 0x080c, 0x7d76, 0x080c, 0x22b1, 0x080c,
+	0x6028, 0x080c, 0xadf7, 0x080c, 0x10ce, 0x080c, 0x12ed, 0x080c,
+	0x1ba4, 0x080c, 0x0d69, 0x080c, 0x1053, 0x080c, 0x3425, 0x080c,
+	0x76b8, 0x080c, 0x6996, 0x080c, 0x86f6, 0x080c, 0x842a, 0x080c,
+	0x2478, 0x080c, 0x8f98, 0x080c, 0x7d82, 0x080c, 0x22b1, 0x080c,
 	0x23e5, 0x080c, 0x246d, 0x2091, 0x3009, 0x7883, 0x0000, 0x1004,
 	0x091f, 0x7880, 0x9086, 0x0002, 0x1190, 0x7883, 0x4000, 0x7837,
 	0x4000, 0x7833, 0x0010, 0x0e04, 0x0913, 0x2091, 0x5000, 0x2091,
 	0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119b, 0x2071,
 	0x1800, 0x7003, 0x0000, 0x2071, 0x1800, 0x7000, 0x908e, 0x0003,
-	0x1178, 0x080c, 0x4bca, 0x080c, 0x3445, 0x080c, 0x771d, 0x080c,
-	0x6ecf, 0x080c, 0x87ab, 0x080c, 0x842a, 0x080c, 0x2c93, 0x0c58,
+	0x1178, 0x080c, 0x4bc9, 0x080c, 0x344c, 0x080c, 0x7729, 0x080c,
+	0x6ed7, 0x080c, 0x87d4, 0x080c, 0x8453, 0x080c, 0x2c93, 0x0c58,
 	0x000b, 0x0c78, 0x0944, 0x0945, 0x0ae7, 0x0942, 0x0bae, 0x0d68,
 	0x0d68, 0x0d68, 0x080c, 0x0dd5, 0x0005, 0x0126, 0x00f6, 0x2091,
-	0x8000, 0x7000, 0x9086, 0x0001, 0x1904, 0x0aba, 0x080c, 0x56df,
+	0x8000, 0x7000, 0x9086, 0x0001, 0x1904, 0x0aba, 0x080c, 0x56de,
 	0x1130, 0x0026, 0x2011, 0x0080, 0x080c, 0x0edf, 0x002e, 0x080c,
-	0x73b0, 0x0150, 0x080c, 0x73d3, 0x15a0, 0x2079, 0x0100, 0x7828,
-	0x9085, 0x1800, 0x782a, 0x0468, 0x080c, 0x72e2, 0x7000, 0x9086,
+	0x73bc, 0x0150, 0x080c, 0x73df, 0x15a0, 0x2079, 0x0100, 0x7828,
+	0x9085, 0x1800, 0x782a, 0x0468, 0x080c, 0x72ee, 0x7000, 0x9086,
 	0x0001, 0x1904, 0x0aba, 0x7098, 0x9086, 0x0028, 0x1904, 0x0aba,
-	0x080c, 0x83f9, 0x080c, 0x83eb, 0x2001, 0x0161, 0x2003, 0x0001,
+	0x080c, 0x8422, 0x080c, 0x8414, 0x2001, 0x0161, 0x2003, 0x0001,
 	0x2079, 0x0100, 0x7827, 0xffff, 0x7a28, 0x9295, 0x5e2f, 0x7a2a,
-	0x2011, 0x7246, 0x080c, 0x84ca, 0x2011, 0x7239, 0x080c, 0x85a4,
-	0x2011, 0x5e84, 0x080c, 0x84ca, 0x2011, 0x8030, 0x901e, 0x7396,
-	0x04d0, 0x080c, 0x5731, 0x2079, 0x0100, 0x7844, 0x9005, 0x1904,
-	0x0aba, 0x2011, 0x5e84, 0x080c, 0x84ca, 0x2011, 0x7246, 0x080c,
-	0x84ca, 0x2011, 0x7239, 0x080c, 0x85a4, 0x2001, 0x0265, 0x2001,
+	0x2011, 0x7252, 0x080c, 0x84f3, 0x2011, 0x7245, 0x080c, 0x85cd,
+	0x2011, 0x5e83, 0x080c, 0x84f3, 0x2011, 0x8030, 0x901e, 0x7396,
+	0x04d0, 0x080c, 0x5730, 0x2079, 0x0100, 0x7844, 0x9005, 0x1904,
+	0x0aba, 0x2011, 0x5e83, 0x080c, 0x84f3, 0x2011, 0x7252, 0x080c,
+	0x84f3, 0x2011, 0x7245, 0x080c, 0x85cd, 0x2001, 0x0265, 0x2001,
 	0x0205, 0x2003, 0x0000, 0x7840, 0x9084, 0xfffb, 0x7842, 0x2001,
 	0x19a6, 0x2004, 0x9005, 0x1140, 0x00c6, 0x2061, 0x0100, 0x080c,
-	0x5fd1, 0x00ce, 0x0804, 0x0aba, 0x780f, 0x006b, 0x7a28, 0x080c,
-	0x73b8, 0x0118, 0x9295, 0x5e2f, 0x0010, 0x9295, 0x402f, 0x7a2a,
+	0x5fd0, 0x00ce, 0x0804, 0x0aba, 0x780f, 0x006b, 0x7a28, 0x080c,
+	0x73c4, 0x0118, 0x9295, 0x5e2f, 0x0010, 0x9295, 0x402f, 0x7a2a,
 	0x2011, 0x8010, 0x73d8, 0x2001, 0x19a7, 0x2003, 0x0001, 0x080c,
-	0x2b59, 0x080c, 0x4b05, 0x7248, 0xc284, 0x724a, 0x2001, 0x180c,
-	0x200c, 0xc1ac, 0xc1cc, 0x2102, 0x080c, 0xa503, 0x2011, 0x0004,
-	0x080c, 0xcb2b, 0x080c, 0x6823, 0x080c, 0x73b0, 0x1120, 0x080c,
-	0x2b9d, 0x02e0, 0x0400, 0x080c, 0x5fd8, 0x0140, 0x7097, 0x0001,
-	0x70d3, 0x0000, 0x080c, 0x58fe, 0x0804, 0x0aba, 0x080c, 0x56d0,
+	0x2b59, 0x080c, 0x4b04, 0x7248, 0xc284, 0x724a, 0x2001, 0x180c,
+	0x200c, 0xc1ac, 0xc1cc, 0x2102, 0x080c, 0xa51d, 0x2011, 0x0004,
+	0x080c, 0xcb45, 0x080c, 0x6822, 0x080c, 0x73bc, 0x1120, 0x080c,
+	0x2b9d, 0x02e0, 0x0400, 0x080c, 0x5fd7, 0x0140, 0x7097, 0x0001,
+	0x70d3, 0x0000, 0x080c, 0x58fd, 0x0804, 0x0aba, 0x080c, 0x56cf,
 	0xd094, 0x0188, 0x2011, 0x180c, 0x2204, 0xc0cd, 0x2012, 0x080c,
-	0x56d4, 0xd0d4, 0x1118, 0x080c, 0x2b9d, 0x1270, 0x2011, 0x180c,
-	0x2204, 0xc0bc, 0x00a8, 0x080c, 0x56d4, 0xd0d4, 0x1db8, 0x2011,
+	0x56d3, 0xd0d4, 0x1118, 0x080c, 0x2b9d, 0x1270, 0x2011, 0x180c,
+	0x2204, 0xc0bc, 0x00a8, 0x080c, 0x56d3, 0xd0d4, 0x1db8, 0x2011,
 	0x180c, 0x2204, 0xc0bd, 0x0060, 0x2011, 0x180c, 0x2204, 0xc0bd,
-	0x2012, 0x080c, 0x6962, 0x1128, 0xd0a4, 0x0118, 0x2204, 0xc0fd,
-	0x2012, 0x080c, 0x6928, 0x0120, 0x7a0c, 0xc2b4, 0x7a0e, 0x00a8,
-	0x707f, 0x0000, 0x080c, 0x73b0, 0x1130, 0x70b0, 0x9005, 0x1168,
-	0x080c, 0xcf67, 0x0050, 0x080c, 0xcf67, 0x70dc, 0xd09c, 0x1128,
-	0x70b0, 0x9005, 0x0110, 0x080c, 0x5fae, 0x70e7, 0x0000, 0x70e3,
+	0x2012, 0x080c, 0x696a, 0x1128, 0xd0a4, 0x0118, 0x2204, 0xc0fd,
+	0x2012, 0x080c, 0x6930, 0x0120, 0x7a0c, 0xc2b4, 0x7a0e, 0x00a8,
+	0x707f, 0x0000, 0x080c, 0x73bc, 0x1130, 0x70b0, 0x9005, 0x1168,
+	0x080c, 0xcf81, 0x0050, 0x080c, 0xcf81, 0x70dc, 0xd09c, 0x1128,
+	0x70b0, 0x9005, 0x0110, 0x080c, 0x5fad, 0x70e7, 0x0000, 0x70e3,
 	0x0000, 0x70a7, 0x0000, 0x080c, 0x2ba5, 0x0228, 0x2011, 0x0101,
-	0x2204, 0xc0c4, 0x2012, 0x72dc, 0x080c, 0x73b0, 0x1178, 0x9016,
+	0x2204, 0xc0c4, 0x2012, 0x72dc, 0x080c, 0x73bc, 0x1178, 0x9016,
 	0x0016, 0x080c, 0x2956, 0x2019, 0x196d, 0x211a, 0x001e, 0x705f,
 	0xffff, 0x7063, 0x00ef, 0x7083, 0x0000, 0x0020, 0x2019, 0x196d,
 	0x201b, 0x0000, 0x2079, 0x1847, 0x7804, 0xd0ac, 0x0108, 0xc295,
-	0x72de, 0x080c, 0x73b0, 0x0118, 0x9296, 0x0004, 0x0548, 0x2011,
-	0x0001, 0x080c, 0xcb2b, 0x70ab, 0x0000, 0x70af, 0xffff, 0x7003,
+	0x72de, 0x080c, 0x73bc, 0x0118, 0x9296, 0x0004, 0x0548, 0x2011,
+	0x0001, 0x080c, 0xcb45, 0x70ab, 0x0000, 0x70af, 0xffff, 0x7003,
 	0x0002, 0x2079, 0x0100, 0x7827, 0x0003, 0x7828, 0x9085, 0x0003,
-	0x782a, 0x00fe, 0x080c, 0x2f96, 0x2011, 0x0005, 0x080c, 0xa639,
-	0x080c, 0x9664, 0x080c, 0x73b0, 0x0148, 0x00c6, 0x2061, 0x0100,
+	0x782a, 0x00fe, 0x080c, 0x2f96, 0x2011, 0x0005, 0x080c, 0xa653,
+	0x080c, 0x968d, 0x080c, 0x73bc, 0x0148, 0x00c6, 0x2061, 0x0100,
 	0x0016, 0x080c, 0x2956, 0x61e2, 0x001e, 0x00ce, 0x012e, 0x0420,
 	0x70ab, 0x0000, 0x70af, 0xffff, 0x7003, 0x0002, 0x00f6, 0x2079,
 	0x0100, 0x7827, 0x0003, 0x7828, 0x9085, 0x0003, 0x782a, 0x00fe,
-	0x2011, 0x0005, 0x080c, 0xa639, 0x080c, 0x9664, 0x080c, 0x73b0,
+	0x2011, 0x0005, 0x080c, 0xa653, 0x080c, 0x968d, 0x080c, 0x73bc,
 	0x0148, 0x00c6, 0x2061, 0x0100, 0x0016, 0x080c, 0x2956, 0x61e2,
 	0x001e, 0x00ce, 0x00fe, 0x012e, 0x0005, 0x00c6, 0x00b6, 0x080c,
-	0x73b0, 0x1118, 0x20a9, 0x0800, 0x0010, 0x20a9, 0x0782, 0x080c,
-	0x73b0, 0x1110, 0x900e, 0x0010, 0x2009, 0x007e, 0x86ff, 0x0138,
+	0x73bc, 0x1118, 0x20a9, 0x0800, 0x0010, 0x20a9, 0x0782, 0x080c,
+	0x73bc, 0x1110, 0x900e, 0x0010, 0x2009, 0x007e, 0x86ff, 0x0138,
 	0x9180, 0x1000, 0x2004, 0x905d, 0x0110, 0xb800, 0xd0bc, 0x090c,
-	0x32b4, 0x8108, 0x1f04, 0x0ace, 0x707f, 0x0000, 0x7080, 0x9084,
+	0x32bb, 0x8108, 0x1f04, 0x0ace, 0x707f, 0x0000, 0x7080, 0x9084,
 	0x00ff, 0x7082, 0x70b3, 0x0000, 0x00be, 0x00ce, 0x0005, 0x00b6,
 	0x0126, 0x2091, 0x8000, 0x7000, 0x9086, 0x0002, 0x1904, 0x0bab,
-	0x70ac, 0x9086, 0xffff, 0x0130, 0x080c, 0x2f96, 0x080c, 0x9664,
+	0x70ac, 0x9086, 0xffff, 0x0130, 0x080c, 0x2f96, 0x080c, 0x968d,
 	0x0804, 0x0bab, 0x70dc, 0xd0ac, 0x1110, 0xd09c, 0x0558, 0xd084,
 	0x0548, 0x0006, 0x2001, 0x0103, 0x2003, 0x002b, 0x000e, 0xd08c,
-	0x0508, 0x080c, 0x3317, 0x11d0, 0x70e0, 0x9086, 0xffff, 0x01b0,
-	0x080c, 0x3128, 0x080c, 0x9664, 0x70dc, 0xd094, 0x1904, 0x0bab,
-	0x2011, 0x0001, 0x080c, 0xd216, 0x0110, 0x2011, 0x0003, 0x901e,
-	0x080c, 0x3162, 0x080c, 0x9664, 0x0804, 0x0bab, 0x70e4, 0x9005,
+	0x0508, 0x080c, 0x331e, 0x11d0, 0x70e0, 0x9086, 0xffff, 0x01b0,
+	0x080c, 0x312b, 0x080c, 0x968d, 0x70dc, 0xd094, 0x1904, 0x0bab,
+	0x2011, 0x0001, 0x080c, 0xd230, 0x0110, 0x2011, 0x0003, 0x901e,
+	0x080c, 0x3165, 0x080c, 0x968d, 0x0804, 0x0bab, 0x70e4, 0x9005,
 	0x1904, 0x0bab, 0x70a8, 0x9005, 0x1904, 0x0bab, 0x70dc, 0xd0a4,
-	0x0118, 0xd0b4, 0x0904, 0x0bab, 0x080c, 0x6928, 0x1904, 0x0bab,
-	0x080c, 0x697b, 0x1904, 0x0bab, 0x080c, 0x6962, 0x01c0, 0x0156,
-	0x00c6, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x6600, 0x1118,
+	0x0118, 0xd0b4, 0x0904, 0x0bab, 0x080c, 0x6930, 0x1904, 0x0bab,
+	0x080c, 0x6983, 0x1904, 0x0bab, 0x080c, 0x696a, 0x01c0, 0x0156,
+	0x00c6, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x65ff, 0x1118,
 	0xb800, 0xd0ec, 0x1138, 0x001e, 0x8108, 0x1f04, 0x0b44, 0x00ce,
 	0x015e, 0x0028, 0x001e, 0x00ce, 0x015e, 0x0804, 0x0bab, 0x0006,
 	0x2001, 0x0103, 0x2003, 0x002b, 0x000e, 0x2011, 0x19b3, 0x080c,
 	0x0f87, 0x2011, 0x19cd, 0x080c, 0x0f87, 0x7030, 0xc08c, 0x7032,
-	0x7003, 0x0003, 0x70af, 0xffff, 0x080c, 0x56df, 0x1130, 0x0026,
+	0x7003, 0x0003, 0x70af, 0xffff, 0x080c, 0x56de, 0x1130, 0x0026,
 	0x2011, 0x0040, 0x080c, 0x0edf, 0x002e, 0x9006, 0x080c, 0x27ea,
-	0x080c, 0x3317, 0x0118, 0x080c, 0x4ca2, 0x0050, 0x0036, 0x0046,
-	0x2019, 0xffff, 0x2021, 0x0006, 0x080c, 0x4cbc, 0x004e, 0x003e,
-	0x00f6, 0x2079, 0x0100, 0x080c, 0x73d3, 0x0150, 0x080c, 0x73b0,
+	0x080c, 0x331e, 0x0118, 0x080c, 0x4ca1, 0x0050, 0x0036, 0x0046,
+	0x2019, 0xffff, 0x2021, 0x0006, 0x080c, 0x4cbb, 0x004e, 0x003e,
+	0x00f6, 0x2079, 0x0100, 0x080c, 0x73df, 0x0150, 0x080c, 0x73bc,
 	0x7828, 0x0118, 0x9084, 0xe1ff, 0x0010, 0x9084, 0xffdf, 0x782a,
 	0x00fe, 0x2001, 0x19e8, 0x2004, 0x9086, 0x0005, 0x1120, 0x2011,
-	0x0000, 0x080c, 0xa639, 0x2011, 0x0000, 0x080c, 0xa643, 0x080c,
-	0x9664, 0x080c, 0x9790, 0x012e, 0x00be, 0x0005, 0x0016, 0x0046,
+	0x0000, 0x080c, 0xa653, 0x2011, 0x0000, 0x080c, 0xa65d, 0x080c,
+	0x968d, 0x080c, 0x97b9, 0x012e, 0x00be, 0x0005, 0x0016, 0x0046,
 	0x00f6, 0x0126, 0x2091, 0x8000, 0x2079, 0x0100, 0x7904, 0x918c,
-	0xfffd, 0x7906, 0x2009, 0x00f7, 0x080c, 0x5f97, 0x7940, 0x918c,
+	0xfffd, 0x7906, 0x2009, 0x00f7, 0x080c, 0x5f96, 0x7940, 0x918c,
 	0x0010, 0x7942, 0x7924, 0xd1b4, 0x0110, 0x7827, 0x0040, 0xd19c,
 	0x0110, 0x7827, 0x0008, 0x0006, 0x0036, 0x0156, 0x7954, 0xd1ac,
 	0x1904, 0x0c3b, 0x2001, 0x19a7, 0x2004, 0x9005, 0x1518, 0x080c,
@@ -177,13 +177,13 @@
 	0x080c, 0x2b6b, 0x00b8, 0x080c, 0x2c28, 0x1138, 0x9006, 0x080c,
 	0x2b88, 0x9006, 0x080c, 0x2b6b, 0x0068, 0x080c, 0x2c30, 0x1d50,
 	0x2001, 0x1998, 0x2004, 0xd0fc, 0x0108, 0x0020, 0x080c, 0x2982,
-	0x0804, 0x0d1a, 0x080c, 0x73c1, 0x0148, 0x080c, 0x73d3, 0x1118,
-	0x080c, 0x76a7, 0x0050, 0x080c, 0x73b8, 0x0dd0, 0x080c, 0x76a2,
-	0x080c, 0x7698, 0x080c, 0x72e2, 0x0058, 0x080c, 0x73b0, 0x0140,
-	0x2009, 0x00f8, 0x080c, 0x5f97, 0x7843, 0x0090, 0x7843, 0x0010,
-	0x20a9, 0x09c4, 0x7820, 0xd09c, 0x1138, 0x080c, 0x73b0, 0x0138,
+	0x0804, 0x0d1a, 0x080c, 0x73cd, 0x0148, 0x080c, 0x73df, 0x1118,
+	0x080c, 0x76b3, 0x0050, 0x080c, 0x73c4, 0x0dd0, 0x080c, 0x76ae,
+	0x080c, 0x76a4, 0x080c, 0x72ee, 0x0058, 0x080c, 0x73bc, 0x0140,
+	0x2009, 0x00f8, 0x080c, 0x5f96, 0x7843, 0x0090, 0x7843, 0x0010,
+	0x20a9, 0x09c4, 0x7820, 0xd09c, 0x1138, 0x080c, 0x73bc, 0x0138,
 	0x7824, 0xd0ac, 0x1904, 0x0d1f, 0x1f04, 0x0c1a, 0x0070, 0x7824,
-	0x080c, 0x73ca, 0x0118, 0xd0ac, 0x1904, 0x0d1f, 0x9084, 0x1800,
+	0x080c, 0x73d6, 0x0118, 0xd0ac, 0x1904, 0x0d1f, 0x9084, 0x1800,
 	0x0d98, 0x7003, 0x0001, 0x0804, 0x0d1f, 0x2001, 0x0001, 0x080c,
 	0x27ea, 0x0804, 0x0d32, 0x2001, 0x19a7, 0x2004, 0x9005, 0x1518,
 	0x080c, 0x2c20, 0x1148, 0x2001, 0x0001, 0x080c, 0x2b88, 0x2001,
@@ -192,47 +192,47 @@
 	0x1d50, 0x2001, 0x1998, 0x2004, 0xd0fc, 0x0108, 0x0020, 0x080c,
 	0x2982, 0x0804, 0x0d1a, 0x7850, 0x9085, 0x0040, 0x7852, 0x7938,
 	0x7850, 0x9084, 0xfbcf, 0x7852, 0x080c, 0x2c38, 0x9085, 0x2000,
-	0x7852, 0x793a, 0x20a9, 0x0046, 0x1d04, 0x0c74, 0x080c, 0x8584,
+	0x7852, 0x793a, 0x20a9, 0x0046, 0x1d04, 0x0c74, 0x080c, 0x85ad,
 	0x1f04, 0x0c74, 0x7850, 0x9085, 0x0400, 0x9084, 0xdfbf, 0x7852,
-	0x793a, 0x080c, 0x73c1, 0x0148, 0x080c, 0x73d3, 0x1118, 0x080c,
-	0x76a7, 0x0050, 0x080c, 0x73b8, 0x0dd0, 0x080c, 0x76a2, 0x080c,
-	0x7698, 0x080c, 0x72e2, 0x0020, 0x2009, 0x00f8, 0x080c, 0x5f97,
+	0x793a, 0x080c, 0x73cd, 0x0148, 0x080c, 0x73df, 0x1118, 0x080c,
+	0x76b3, 0x0050, 0x080c, 0x73c4, 0x0dd0, 0x080c, 0x76ae, 0x080c,
+	0x76a4, 0x080c, 0x72ee, 0x0020, 0x2009, 0x00f8, 0x080c, 0x5f96,
 	0x20a9, 0x0028, 0xa001, 0x1f04, 0x0c9a, 0x7850, 0x9085, 0x1400,
-	0x7852, 0x080c, 0x73b0, 0x0120, 0x7843, 0x0090, 0x7843, 0x0010,
-	0x2021, 0xe678, 0x2019, 0xea60, 0x0d0c, 0x8584, 0x7820, 0xd09c,
-	0x1580, 0x080c, 0x73b0, 0x0904, 0x0cff, 0x7824, 0xd0ac, 0x1904,
-	0x0d1f, 0x080c, 0x73d3, 0x1528, 0x0046, 0x2021, 0x0320, 0x8421,
+	0x7852, 0x080c, 0x73bc, 0x0120, 0x7843, 0x0090, 0x7843, 0x0010,
+	0x2021, 0xe678, 0x2019, 0xea60, 0x0d0c, 0x85ad, 0x7820, 0xd09c,
+	0x1580, 0x080c, 0x73bc, 0x0904, 0x0cff, 0x7824, 0xd0ac, 0x1904,
+	0x0d1f, 0x080c, 0x73df, 0x1528, 0x0046, 0x2021, 0x0320, 0x8421,
 	0x1df0, 0x004e, 0x7827, 0x1800, 0x080c, 0x2c38, 0x7824, 0x9084,
 	0x1800, 0x1160, 0x9484, 0x0fff, 0x1138, 0x2001, 0x1810, 0x2004,
 	0xd0fc, 0x0110, 0x080c, 0x0d45, 0x8421, 0x1158, 0x1d04, 0x0cda,
-	0x080c, 0x8584, 0x080c, 0x76a2, 0x080c, 0x7698, 0x7003, 0x0001,
-	0x04f0, 0x8319, 0x1948, 0x1d04, 0x0ce7, 0x080c, 0x8584, 0x2009,
+	0x080c, 0x85ad, 0x080c, 0x76ae, 0x080c, 0x76a4, 0x7003, 0x0001,
+	0x04f0, 0x8319, 0x1948, 0x1d04, 0x0ce7, 0x080c, 0x85ad, 0x2009,
 	0x199b, 0x2104, 0x9005, 0x0118, 0x8001, 0x200a, 0x1178, 0x200b,
 	0x000a, 0x7827, 0x0048, 0x20a9, 0x0002, 0x080c, 0x2c19, 0x7924,
 	0x080c, 0x2c38, 0xd19c, 0x0110, 0x080c, 0x2b59, 0x00d8, 0x080c,
-	0x73c1, 0x1140, 0x94a2, 0x03e8, 0x1128, 0x080c, 0x7388, 0x7003,
+	0x73cd, 0x1140, 0x94a2, 0x03e8, 0x1128, 0x080c, 0x7394, 0x7003,
 	0x0001, 0x00a8, 0x7827, 0x1800, 0x080c, 0x2c38, 0x7824, 0x080c,
-	0x73ca, 0x0110, 0xd0ac, 0x1158, 0x9084, 0x1800, 0x0950, 0x7003,
+	0x73d6, 0x0110, 0xd0ac, 0x1158, 0x9084, 0x1800, 0x0950, 0x7003,
 	0x0001, 0x0028, 0x2001, 0x0001, 0x080c, 0x27ea, 0x0078, 0x2009,
 	0x180c, 0x210c, 0xd19c, 0x1120, 0x7904, 0x918d, 0x0002, 0x7906,
 	0x7827, 0x0048, 0x7828, 0x9085, 0x0028, 0x782a, 0x7850, 0x9085,
 	0x0400, 0x7852, 0x2001, 0x19a7, 0x2003, 0x0000, 0x9006, 0x78f2,
-	0x015e, 0x003e, 0x000e, 0x080c, 0x56df, 0x1110, 0x080c, 0x0e62,
+	0x015e, 0x003e, 0x000e, 0x080c, 0x56de, 0x1110, 0x080c, 0x0e62,
 	0x012e, 0x00fe, 0x004e, 0x001e, 0x0005, 0x0006, 0x0016, 0x0036,
 	0x0046, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0156, 0x0069,
-	0x0d0c, 0x8584, 0x015e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be,
+	0x0d0c, 0x85ad, 0x015e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be,
 	0x004e, 0x003e, 0x001e, 0x000e, 0x0005, 0x00e6, 0x2071, 0x189e,
-	0x7004, 0x9086, 0x0001, 0x1110, 0x080c, 0x3445, 0x00ee, 0x0005,
+	0x7004, 0x9086, 0x0001, 0x1110, 0x080c, 0x344c, 0x00ee, 0x0005,
 	0x0005, 0x2a70, 0x2061, 0x19ab, 0x2063, 0x0003, 0x6007, 0x0002,
-	0x600b, 0x001a, 0x600f, 0x0137, 0x2001, 0x197c, 0x900e, 0x2102,
+	0x600b, 0x001c, 0x600f, 0x0137, 0x2001, 0x197c, 0x900e, 0x2102,
 	0x7196, 0x2001, 0x0100, 0x2004, 0x9082, 0x0002, 0x0218, 0x705f,
 	0xffff, 0x0008, 0x715e, 0x7067, 0xffff, 0x717e, 0x7182, 0x080c,
-	0xcf67, 0x2061, 0x196c, 0x6003, 0x0909, 0x6106, 0x600b, 0x8800,
+	0xcf81, 0x2061, 0x196c, 0x6003, 0x0909, 0x6106, 0x600b, 0x8800,
 	0x600f, 0x0200, 0x6013, 0x00ff, 0x6017, 0x001f, 0x611a, 0x601f,
 	0x07d0, 0x2061, 0x1974, 0x6003, 0x8000, 0x6106, 0x610a, 0x600f,
 	0x0200, 0x6013, 0x00ff, 0x6116, 0x601b, 0x0001, 0x611e, 0x2061,
 	0x1989, 0x6003, 0x514c, 0x6007, 0x4f47, 0x600b, 0x4943, 0x600f,
-	0x2020, 0x2001, 0x182c, 0x2102, 0x0005, 0x9016, 0x080c, 0x6600,
+	0x2020, 0x2001, 0x182c, 0x2102, 0x0005, 0x9016, 0x080c, 0x65ff,
 	0x1178, 0xb804, 0x90c4, 0x00ff, 0x98c6, 0x0006, 0x0128, 0x90c4,
 	0xff00, 0x98c6, 0x0600, 0x1120, 0x9186, 0x0080, 0x0108, 0x8210,
 	0x8108, 0x9186, 0x0800, 0x1d50, 0x2208, 0x0005, 0x2091, 0x8000,
@@ -251,7 +251,7 @@
 	0x1800, 0x7803, 0x0005, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
 	0xd084, 0x0180, 0x2001, 0x1a19, 0x2004, 0x9005, 0x0128, 0x2001,
 	0x008b, 0x2004, 0xd0fc, 0x0dd8, 0x2001, 0x008a, 0x2003, 0x0002,
-	0x2003, 0x1001, 0x080c, 0x56df, 0x1110, 0x080c, 0x0e99, 0x0cd0,
+	0x2003, 0x1001, 0x080c, 0x56de, 0x1110, 0x080c, 0x0e99, 0x0cd0,
 	0x0005, 0x918c, 0x03ff, 0x2001, 0x0003, 0x2004, 0x9084, 0x0600,
 	0x1118, 0x918d, 0x2800, 0x0010, 0x918d, 0x2000, 0x2001, 0x017f,
 	0x2102, 0x0005, 0x00f6, 0x0006, 0x2079, 0x1827, 0x2f04, 0x8000,
@@ -315,7 +315,7 @@
 	0x0cd8, 0x00e6, 0x0126, 0x2091, 0x8000, 0x0016, 0x890e, 0x810e,
 	0x810f, 0x9184, 0x003f, 0xa862, 0x9184, 0xffc0, 0xa85e, 0x001e,
 	0x0020, 0x00e6, 0x0126, 0x2091, 0x8000, 0x2071, 0x1800, 0x702c,
-	0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x83eb,
+	0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x8414,
 	0x012e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9026, 0x2009, 0x0000,
 	0x2049, 0x0400, 0x2900, 0x702e, 0x8940, 0x2800, 0xa802, 0xa95e,
 	0xa863, 0x0001, 0x8420, 0x9886, 0x0440, 0x0120, 0x2848, 0x9188,
@@ -380,15 +380,15 @@
 	0x080c, 0x1108, 0x0005, 0x00de, 0x009e, 0x080c, 0x1108, 0x0005,
 	0xa8a8, 0xd08c, 0x0005, 0x0096, 0xa0a0, 0x904d, 0x090c, 0x0dd5,
 	0xa06c, 0x908e, 0x0100, 0x0130, 0xa87b, 0x0030, 0xa883, 0x0000,
-	0xa897, 0x4002, 0x080c, 0x6c6d, 0xa09f, 0x0000, 0xa0a3, 0x0000,
+	0xa897, 0x4002, 0x080c, 0x6c75, 0xa09f, 0x0000, 0xa0a3, 0x0000,
 	0x2848, 0x080c, 0x1031, 0x009e, 0x0005, 0x00a6, 0xa0a0, 0x904d,
 	0x090c, 0x0dd5, 0xa06c, 0x908e, 0x0100, 0x0128, 0xa87b, 0x0001,
 	0xa883, 0x0000, 0x00c0, 0xa80c, 0x2050, 0xb004, 0x9005, 0x0198,
 	0xa80e, 0x2050, 0x8006, 0x8006, 0x8007, 0x908c, 0x003f, 0x9084,
 	0xffc0, 0x9080, 0x0002, 0xa076, 0xa172, 0xb000, 0xa07a, 0x2810,
 	0x080c, 0x10e9, 0x00e8, 0xa97c, 0xa894, 0x0016, 0x0006, 0x080c,
-	0x6c6d, 0x000e, 0x001e, 0xd1fc, 0x1138, 0xd1f4, 0x0128, 0x00c6,
-	0x2060, 0x080c, 0xae47, 0x00ce, 0x7008, 0x2048, 0xa89f, 0x0000,
+	0x6c75, 0x000e, 0x001e, 0xd1fc, 0x1138, 0xd1f4, 0x0128, 0x00c6,
+	0x2060, 0x080c, 0xae61, 0x00ce, 0x7008, 0x2048, 0xa89f, 0x0000,
 	0xa8a3, 0x0000, 0x080c, 0x1031, 0x7007, 0x0000, 0x080c, 0x1108,
 	0x00ae, 0x0005, 0x0126, 0x2091, 0x8000, 0x782b, 0x1001, 0x7007,
 	0x0005, 0x7000, 0xc094, 0x7002, 0x012e, 0x0005, 0x0096, 0x2001,
@@ -397,12 +397,12 @@
 	0x8000, 0x782b, 0x0041, 0x7007, 0x0003, 0x7000, 0xc084, 0x7002,
 	0x2900, 0x700a, 0x012e, 0x009e, 0x0005, 0x20e1, 0x0000, 0x2099,
 	0x0088, 0x782b, 0x0040, 0x0096, 0x2001, 0x192e, 0x204c, 0xaa7c,
-	0x009e, 0x080c, 0x89e3, 0x2009, 0x188c, 0x2104, 0x9084, 0xfffc,
-	0x200a, 0x080c, 0x8856, 0x7007, 0x0000, 0x080c, 0x1119, 0x0005,
+	0x009e, 0x080c, 0x8a0c, 0x2009, 0x188c, 0x2104, 0x9084, 0xfffc,
+	0x200a, 0x080c, 0x887f, 0x7007, 0x0000, 0x080c, 0x1119, 0x0005,
 	0x7007, 0x0000, 0x080c, 0x1119, 0x0005, 0x0126, 0x2091, 0x2200,
 	0x2079, 0x0300, 0x2071, 0x1a62, 0x7003, 0x0000, 0x78bf, 0x00f6,
 	0x781b, 0x4800, 0x00c1, 0x7803, 0x0003, 0x780f, 0x0000, 0x20a9,
-	0x03d0, 0x2061, 0xe9f7, 0x2c0d, 0x7912, 0xe104, 0x9ce0, 0x0002,
+	0x03d0, 0x2061, 0xea18, 0x2c0d, 0x7912, 0xe104, 0x9ce0, 0x0002,
 	0x7916, 0x1f04, 0x1303, 0x7807, 0x0007, 0x7803, 0x0000, 0x7803,
 	0x0001, 0x012e, 0x0005, 0x00c6, 0x7803, 0x0000, 0x7808, 0xd09c,
 	0x0120, 0x7820, 0x080c, 0x1362, 0x0cc8, 0x2001, 0x1a63, 0x2003,
@@ -411,13 +411,13 @@
 	0x782b, 0x1a82, 0x781f, 0xff00, 0x781b, 0xb700, 0x2001, 0x0200,
 	0x2004, 0xd0dc, 0x0110, 0x781f, 0x0303, 0x2061, 0x1a82, 0x602f,
 	0x1cd0, 0x2001, 0x181a, 0x2004, 0x9082, 0x1cd0, 0x6032, 0x603b,
-	0x2090, 0x604f, 0x193c, 0x2001, 0x331e, 0xd0fc, 0x190c, 0x0dd5,
-	0x2001, 0x0003, 0x2004, 0xd0d4, 0x1118, 0x783f, 0x331e, 0x0020,
-	0x9084, 0xc000, 0x783f, 0xb31e, 0x2001, 0x1927, 0x2004, 0x6042,
+	0x2090, 0x2001, 0x3325, 0xd0fc, 0x190c, 0x0dd5, 0x2001, 0x0003,
+	0x2004, 0xd0d4, 0x1118, 0x783f, 0x3325, 0x0020, 0x9084, 0xc000,
+	0x783f, 0xb325, 0x604f, 0x193c, 0x2001, 0x1927, 0x2004, 0x6042,
 	0x00ce, 0x0005, 0x9086, 0x000d, 0x11d0, 0x7808, 0xd09c, 0x01b8,
-	0x7820, 0x0026, 0x2010, 0x080c, 0xcb09, 0x0180, 0x2260, 0x6000,
+	0x7820, 0x0026, 0x2010, 0x080c, 0xcb23, 0x0180, 0x2260, 0x6000,
 	0x9086, 0x0004, 0x1158, 0x0016, 0x6120, 0x9186, 0x0009, 0x0108,
-	0x0020, 0x2009, 0x004c, 0x080c, 0xaec2, 0x001e, 0x002e, 0x0005,
+	0x0020, 0x2009, 0x004c, 0x080c, 0xaedc, 0x001e, 0x002e, 0x0005,
 	0x0126, 0x2091, 0x2200, 0x7908, 0x9184, 0x0070, 0x190c, 0x0dce,
 	0xd19c, 0x0158, 0x7820, 0x908c, 0xf000, 0x15e8, 0x908a, 0x0024,
 	0x1a0c, 0x0dd5, 0x0023, 0x012e, 0x0005, 0x012e, 0x0005, 0x13bb,
@@ -426,18 +426,18 @@
 	0x155b, 0x1566, 0x156d, 0x13bb, 0x13bb, 0x13bb, 0x13bb, 0x13bb,
 	0x13bb, 0x13bb, 0x13e2, 0x13bb, 0x13bb, 0x13bb, 0x13bb, 0x13bb,
 	0x13bb, 0x13bf, 0x13bd, 0x080c, 0x0dd5, 0x080c, 0x0dce, 0x080c,
-	0x1578, 0x2009, 0x1a7b, 0x2104, 0x8000, 0x200a, 0x080c, 0x7e4a,
-	0x080c, 0x1aa9, 0x0005, 0x2009, 0x0048, 0x2060, 0x080c, 0xaec2,
+	0x1578, 0x2009, 0x1a7b, 0x2104, 0x8000, 0x200a, 0x080c, 0x7e56,
+	0x080c, 0x1aa9, 0x0005, 0x2009, 0x0048, 0x2060, 0x080c, 0xaedc,
 	0x012e, 0x0005, 0x7004, 0xc085, 0xc0b5, 0x7006, 0x0005, 0x7004,
 	0xc085, 0x7006, 0x0005, 0x080c, 0x1578, 0x080c, 0x16bb, 0x0005,
 	0x080c, 0x0dd5, 0x080c, 0x1578, 0x2060, 0x6014, 0x0096, 0x2048,
-	0xa83b, 0xffff, 0x009e, 0x2009, 0x0048, 0x080c, 0xaec2, 0x2001,
+	0xa83b, 0xffff, 0x009e, 0x2009, 0x0048, 0x080c, 0xaedc, 0x2001,
 	0x015d, 0x2003, 0x0000, 0x2009, 0x03e8, 0x8109, 0x0160, 0x2001,
 	0x0201, 0x2004, 0x9005, 0x0dc8, 0x2001, 0x0218, 0x2004, 0xd0ec,
 	0x1110, 0x080c, 0x157d, 0x2001, 0x0307, 0x2003, 0x8000, 0x0005,
 	0x7004, 0xc095, 0x7006, 0x0005, 0x080c, 0x1578, 0x2060, 0x6014,
 	0x0096, 0x2048, 0xa83b, 0xffff, 0x009e, 0x2009, 0x0048, 0x080c,
-	0xaec2, 0x0005, 0x080c, 0x1578, 0x080c, 0x0dd5, 0x080c, 0x1578,
+	0xaedc, 0x0005, 0x080c, 0x1578, 0x080c, 0x0dd5, 0x080c, 0x1578,
 	0x080c, 0x14d4, 0x7827, 0x0018, 0x79ac, 0xd1dc, 0x0904, 0x1487,
 	0x7827, 0x0015, 0x7828, 0x782b, 0x0000, 0x9065, 0x0140, 0x2001,
 	0x020d, 0x2003, 0x0050, 0x2003, 0x0020, 0x0804, 0x148d, 0x7004,
@@ -452,14 +452,14 @@
 	0x0810, 0x7004, 0xc09d, 0x7006, 0x78ab, 0x0004, 0x7803, 0x0001,
 	0x080c, 0x14ed, 0x2001, 0x020d, 0x2003, 0x0020, 0x0005, 0x7828,
 	0x782b, 0x0000, 0x9065, 0x090c, 0x0dd5, 0x6014, 0x2048, 0x78ab,
-	0x0004, 0x918c, 0x0700, 0x0198, 0x080c, 0x7e4a, 0x080c, 0x1aa9,
-	0x080c, 0xcb1b, 0x0158, 0xa9ac, 0xa936, 0xa9b0, 0xa93a, 0xa83f,
+	0x0004, 0x918c, 0x0700, 0x0198, 0x080c, 0x7e56, 0x080c, 0x1aa9,
+	0x080c, 0xcb35, 0x0158, 0xa9ac, 0xa936, 0xa9b0, 0xa93a, 0xa83f,
 	0xffff, 0xa843, 0xffff, 0xa880, 0xc0bd, 0xa882, 0x0005, 0x6020,
-	0x9086, 0x0009, 0x1128, 0x2009, 0x004c, 0x080c, 0xaec2, 0x0048,
+	0x9086, 0x0009, 0x1128, 0x2009, 0x004c, 0x080c, 0xaedc, 0x0048,
 	0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x6024, 0x190c,
-	0xcf00, 0x2029, 0x00c8, 0x8529, 0x0128, 0x2001, 0x0201, 0x2004,
-	0x9005, 0x0dc8, 0x7dbc, 0x080c, 0xe9a0, 0xd5a4, 0x1118, 0x080c,
-	0x157d, 0x0005, 0x080c, 0x7e4a, 0x080c, 0x1aa9, 0x0005, 0x781f,
+	0xcf1a, 0x2029, 0x00c8, 0x8529, 0x0128, 0x2001, 0x0201, 0x2004,
+	0x9005, 0x0dc8, 0x7dbc, 0x080c, 0xe9c1, 0xd5a4, 0x1118, 0x080c,
+	0x157d, 0x0005, 0x080c, 0x7e56, 0x080c, 0x1aa9, 0x0005, 0x781f,
 	0x0300, 0x7803, 0x0001, 0x0005, 0x0016, 0x0066, 0x0076, 0x00f6,
 	0x2079, 0x0300, 0x7908, 0x918c, 0x0007, 0x9186, 0x0003, 0x0120,
 	0x2001, 0x0016, 0x080c, 0x15ee, 0x00fe, 0x007e, 0x006e, 0x001e,
@@ -476,10 +476,10 @@
 	0x0218, 0x2004, 0xd0ec, 0x1118, 0x080c, 0x157d, 0x0040, 0x2001,
 	0x020d, 0x2003, 0x0020, 0x080c, 0x1313, 0x7803, 0x0001, 0x00ee,
 	0x001e, 0x0005, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003, 0x0020,
-	0x0461, 0x0ca8, 0x0429, 0x2060, 0x2009, 0x0053, 0x080c, 0xaec2,
+	0x0461, 0x0ca8, 0x0429, 0x2060, 0x2009, 0x0053, 0x080c, 0xaedc,
 	0x0005, 0x0005, 0x0005, 0x00e1, 0x2008, 0x00d1, 0x0006, 0x7004,
-	0xc09d, 0x7006, 0x000e, 0x080c, 0x8d40, 0x0005, 0x0089, 0x9005,
-	0x0118, 0x080c, 0x8943, 0x0cd0, 0x0005, 0x2001, 0x0036, 0x2009,
+	0xc09d, 0x7006, 0x000e, 0x080c, 0x8d69, 0x0005, 0x0089, 0x9005,
+	0x0118, 0x080c, 0x896c, 0x0cd0, 0x0005, 0x2001, 0x0036, 0x2009,
 	0x1820, 0x210c, 0x2011, 0x181f, 0x2214, 0x080c, 0x15ee, 0x0005,
 	0x7808, 0xd09c, 0x0de8, 0x7820, 0x0005, 0x080c, 0x14d4, 0x00d6,
 	0x2069, 0x0200, 0x2009, 0x01f4, 0x8109, 0x0510, 0x6804, 0x9005,
@@ -488,7 +488,7 @@
 	0x0007, 0x918c, 0x0ff8, 0x810c, 0x810c, 0x810c, 0x080c, 0x15e0,
 	0x6827, 0x0001, 0x8109, 0x1dd0, 0x04d9, 0x6827, 0x0002, 0x04c1,
 	0x6804, 0x9005, 0x1130, 0x682c, 0xd0e4, 0x1500, 0x6804, 0x9005,
-	0x0de8, 0x79b8, 0xd1ec, 0x1130, 0x08c0, 0x080c, 0x7e4a, 0x080c,
+	0x0de8, 0x79b8, 0xd1ec, 0x1130, 0x08c0, 0x080c, 0x7e56, 0x080c,
 	0x1aa9, 0x0090, 0x7827, 0x0015, 0x782b, 0x0000, 0x7827, 0x0018,
 	0x782b, 0x0000, 0x2001, 0x020d, 0x2003, 0x0020, 0x2001, 0x0307,
 	0x2003, 0x0300, 0x7803, 0x0001, 0x00de, 0x0005, 0x682c, 0x9084,
@@ -505,7 +505,7 @@
 	0x0048, 0x9086, 0x0008, 0x1904, 0x1667, 0x2001, 0x0109, 0x2004,
 	0xd08c, 0x01f0, 0x0006, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
 	0x0126, 0x2091, 0x2800, 0x00f6, 0x0026, 0x0016, 0x2009, 0x1a7d,
-	0x2104, 0x8000, 0x0208, 0x200a, 0x080c, 0x9079, 0x001e, 0x002e,
+	0x2104, 0x8000, 0x0208, 0x200a, 0x080c, 0x90a2, 0x001e, 0x002e,
 	0x00fe, 0x012e, 0x015e, 0x014e, 0x013e, 0x01de, 0x01ce, 0x000e,
 	0x2001, 0x009b, 0x2004, 0xd0fc, 0x01d0, 0x0006, 0x0126, 0x01c6,
 	0x01d6, 0x0136, 0x0146, 0x0156, 0x00f6, 0x0016, 0x2009, 0x1a7e,
@@ -515,7 +515,7 @@
 	0x1528, 0x7a18, 0x9284, 0x0030, 0x0508, 0x9284, 0x0048, 0x9086,
 	0x0008, 0x11e0, 0x2001, 0x19f6, 0x2004, 0x9005, 0x01b8, 0x2001,
 	0x1a66, 0x2004, 0x9086, 0x0000, 0x0188, 0x2009, 0x1a7c, 0x2104,
-	0x8000, 0x0208, 0x200a, 0x080c, 0xa2dd, 0x2009, 0x180c, 0x2104,
+	0x8000, 0x0208, 0x200a, 0x080c, 0xa2f7, 0x2009, 0x180c, 0x2104,
 	0xc0f5, 0x200a, 0x2009, 0xff00, 0x0804, 0x1617, 0x9085, 0x0001,
 	0x0005, 0x7832, 0x7936, 0x7a3a, 0x781b, 0x8080, 0x080c, 0x1610,
 	0x1108, 0x0005, 0x792c, 0x3900, 0x8000, 0x2004, 0x080c, 0x0dd5,
@@ -526,8 +526,8 @@
 	0x0000, 0x2001, 0x0264, 0x2004, 0xd0bc, 0x0904, 0x171a, 0x2001,
 	0x0268, 0x00c6, 0x2064, 0x6104, 0x6038, 0x00ce, 0x918e, 0x0039,
 	0x1904, 0x171a, 0x9c06, 0x15f0, 0x0126, 0x2091, 0x2600, 0x080c,
-	0x7d91, 0x012e, 0x7358, 0x745c, 0x6014, 0x905d, 0x0598, 0x2b48,
-	0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x190c, 0xcedb,
+	0x7d9d, 0x012e, 0x7358, 0x745c, 0x6014, 0x905d, 0x0598, 0x2b48,
+	0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x190c, 0xcef5,
 	0xab42, 0xac3e, 0x2001, 0x1869, 0x2004, 0xd0b4, 0x1170, 0x601c,
 	0xd0e4, 0x1158, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc,
 	0x1120, 0xa83b, 0x7fff, 0xa837, 0xffff, 0x080c, 0x20b0, 0x1190,
@@ -543,7 +543,7 @@
 	0x9085, 0x0001, 0x0804, 0x18a1, 0xa87c, 0xd0ac, 0x0dc8, 0x0804,
 	0x17c5, 0xa87c, 0xd0ac, 0x0da0, 0x0804, 0x1830, 0xa898, 0x901d,
 	0x1108, 0xab9c, 0x9016, 0xaab2, 0xaa3e, 0xaa42, 0x3e00, 0x9080,
-	0x0008, 0x2004, 0x9080, 0x8f07, 0x2005, 0x9005, 0x090c, 0x0dd5,
+	0x0008, 0x2004, 0x9080, 0x8f30, 0x2005, 0x9005, 0x090c, 0x0dd5,
 	0x2004, 0xa8ae, 0x0804, 0x1889, 0xa87c, 0xd0bc, 0x09c8, 0xa890,
 	0xa842, 0xa88c, 0xa83e, 0xa888, 0x0804, 0x17c5, 0xa87c, 0xd0bc,
 	0x0978, 0xa890, 0xa842, 0xa88c, 0xa83e, 0xa888, 0x0804, 0x1830,
@@ -637,7 +637,7 @@
 	0x810c, 0x810c, 0x81ff, 0x1118, 0xa887, 0x0001, 0x0008, 0xa986,
 	0x601b, 0x0002, 0xa974, 0xd1dc, 0x1108, 0x0005, 0xa934, 0xa88c,
 	0x9106, 0x1158, 0xa938, 0xa890, 0x9106, 0x1138, 0x601c, 0xc084,
-	0x601e, 0x2009, 0x0048, 0x0804, 0xaec2, 0x0005, 0x0126, 0x00c6,
+	0x601e, 0x2009, 0x0048, 0x0804, 0xaedc, 0x0005, 0x0126, 0x00c6,
 	0x2091, 0x2200, 0x00ce, 0x7908, 0x918c, 0x0007, 0x9186, 0x0000,
 	0x05b0, 0x9186, 0x0003, 0x0598, 0x6020, 0x6023, 0x0000, 0x0006,
 	0x2031, 0x0008, 0x00c6, 0x781f, 0x0808, 0x7808, 0xd09c, 0x0120,
@@ -648,17 +648,17 @@
 	0x1d40, 0x080c, 0x1b45, 0x000e, 0x6022, 0x012e, 0x0005, 0x080c,
 	0x1b32, 0x7827, 0x0015, 0x7828, 0x9c06, 0x1db8, 0x782b, 0x0000,
 	0x0ca0, 0x00f6, 0x2079, 0x0300, 0x7803, 0x0000, 0x78ab, 0x0004,
-	0x00fe, 0x080c, 0x73b0, 0x11b0, 0x2001, 0x0138, 0x2003, 0x0000,
+	0x00fe, 0x080c, 0x73bc, 0x11b0, 0x2001, 0x0138, 0x2003, 0x0000,
 	0x2001, 0x0160, 0x2003, 0x0000, 0x2011, 0x012c, 0xa001, 0xa001,
-	0x8211, 0x1de0, 0x0081, 0x0066, 0x2031, 0x0000, 0x080c, 0x7460,
+	0x8211, 0x1de0, 0x0081, 0x0066, 0x2031, 0x0000, 0x080c, 0x746c,
 	0x006e, 0x0005, 0x0479, 0x0039, 0x2001, 0x0160, 0x2502, 0x2001,
 	0x0138, 0x2202, 0x0005, 0x00e6, 0x2071, 0x0200, 0x080c, 0x2c44,
 	0x2009, 0x003c, 0x080c, 0x23d2, 0x2001, 0x015d, 0x2003, 0x0000,
-	0x7000, 0x9084, 0x003c, 0x1de0, 0x080c, 0x83eb, 0x70a0, 0x70a2,
+	0x7000, 0x9084, 0x003c, 0x1de0, 0x080c, 0x8414, 0x70a0, 0x70a2,
 	0x7098, 0x709a, 0x709c, 0x709e, 0x2001, 0x020d, 0x2003, 0x0020,
 	0x00f6, 0x2079, 0x0300, 0x080c, 0x1313, 0x7803, 0x0001, 0x00fe,
 	0x00ee, 0x0005, 0x2001, 0x0138, 0x2014, 0x2003, 0x0000, 0x2001,
-	0x0160, 0x202c, 0x2003, 0x0000, 0x080c, 0x73b0, 0x1108, 0x0005,
+	0x0160, 0x202c, 0x2003, 0x0000, 0x080c, 0x73bc, 0x1108, 0x0005,
 	0x2021, 0x0260, 0x2001, 0x0141, 0x201c, 0xd3dc, 0x1168, 0x2001,
 	0x0109, 0x201c, 0x939c, 0x0048, 0x1160, 0x2001, 0x0111, 0x201c,
 	0x83ff, 0x1110, 0x8421, 0x1d70, 0x2001, 0x015d, 0x2003, 0x0000,
@@ -770,13 +770,13 @@
 	0x002e, 0x003e, 0x004e, 0x005e, 0x006e, 0x007e, 0x0005, 0x080c,
 	0x0dd5, 0x0026, 0x2001, 0x0105, 0x2003, 0x0010, 0x782b, 0x0004,
 	0x7003, 0x0000, 0x7004, 0x0016, 0x080c, 0x1cbe, 0x001e, 0x2060,
-	0x6014, 0x2048, 0x080c, 0xcb1b, 0x0118, 0xa880, 0xc0bd, 0xa882,
+	0x6014, 0x2048, 0x080c, 0xcb35, 0x0118, 0xa880, 0xc0bd, 0xa882,
 	0x6020, 0x9086, 0x0006, 0x1180, 0x2061, 0x0100, 0x62c8, 0x2001,
 	0x00fa, 0x8001, 0x1df0, 0x60c8, 0x9206, 0x1dc0, 0x60c4, 0xa89a,
-	0x60c8, 0xa896, 0x7004, 0x2060, 0x00c6, 0x080c, 0xc74e, 0x00ce,
+	0x60c8, 0xa896, 0x7004, 0x2060, 0x00c6, 0x080c, 0xc768, 0x00ce,
 	0x2001, 0x19f6, 0x2004, 0x9c06, 0x1160, 0x2009, 0x0040, 0x080c,
-	0x23d2, 0x080c, 0xa7b2, 0x2011, 0x0000, 0x080c, 0xa643, 0x080c,
-	0x9790, 0x002e, 0x0804, 0x1ff8, 0x0126, 0x2091, 0x2400, 0xa858,
+	0x23d2, 0x080c, 0xa7cc, 0x2011, 0x0000, 0x080c, 0xa65d, 0x080c,
+	0x97b9, 0x002e, 0x0804, 0x1ff8, 0x0126, 0x2091, 0x2400, 0xa858,
 	0x2040, 0x792c, 0x782b, 0x0002, 0x9184, 0x0700, 0x1904, 0x1e71,
 	0x7000, 0x0002, 0x1ff8, 0x1ec6, 0x1f46, 0x1ff6, 0x8001, 0x7002,
 	0x7027, 0x0000, 0xd19c, 0x1158, 0x8aff, 0x0904, 0x1f13, 0x080c,
@@ -820,7 +820,7 @@
 	0x012e, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a66, 0x7000, 0x9086,
 	0x0000, 0x0904, 0x2043, 0x2079, 0x0090, 0x2009, 0x0207, 0x210c,
 	0xd194, 0x01b8, 0x2009, 0x020c, 0x210c, 0x9184, 0x0003, 0x0188,
-	0x080c, 0xe9e9, 0x2001, 0x0133, 0x2004, 0x9005, 0x090c, 0x0dd5,
+	0x080c, 0xea0a, 0x2001, 0x0133, 0x2004, 0x9005, 0x090c, 0x0dd5,
 	0x0016, 0x2009, 0x0040, 0x080c, 0x23d2, 0x001e, 0x2001, 0x020c,
 	0x2102, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0x9106,
 	0x1120, 0x2009, 0x0040, 0x080c, 0x23d2, 0x782c, 0xd0fc, 0x09a8,
@@ -910,16 +910,16 @@
 	0x783b, 0x001f, 0x7837, 0x0020, 0x7803, 0x1600, 0x012e, 0x0005,
 	0x2091, 0x2600, 0x781c, 0xd0a4, 0x190c, 0x23cf, 0x7900, 0xd1dc,
 	0x1118, 0x9084, 0x0006, 0x001a, 0x9084, 0x000e, 0x0002, 0x22f7,
-	0x22ef, 0x7d91, 0x22ef, 0x22f1, 0x22f1, 0x22f1, 0x22f1, 0x7d77,
+	0x22ef, 0x7d9d, 0x22ef, 0x22f1, 0x22f1, 0x22f1, 0x22f1, 0x7d83,
 	0x22ef, 0x22f3, 0x22ef, 0x22f1, 0x22ef, 0x22f1, 0x22ef, 0x080c,
-	0x0dd5, 0x0031, 0x0020, 0x080c, 0x7d77, 0x080c, 0x7d91, 0x0005,
-	0x0006, 0x0016, 0x0026, 0x080c, 0xe9e9, 0x7930, 0x9184, 0x0003,
+	0x0dd5, 0x0031, 0x0020, 0x080c, 0x7d83, 0x080c, 0x7d9d, 0x0005,
+	0x0006, 0x0016, 0x0026, 0x080c, 0xea0a, 0x7930, 0x9184, 0x0003,
 	0x01c0, 0x2001, 0x19f6, 0x2004, 0x9005, 0x0170, 0x2001, 0x0133,
 	0x2004, 0x9005, 0x090c, 0x0dd5, 0x00c6, 0x2001, 0x19f6, 0x2064,
-	0x080c, 0xc74e, 0x00ce, 0x00f8, 0x2009, 0x0040, 0x080c, 0x23d2,
+	0x080c, 0xc768, 0x00ce, 0x00f8, 0x2009, 0x0040, 0x080c, 0x23d2,
 	0x00d0, 0x9184, 0x0014, 0x01a0, 0x6a00, 0x9286, 0x0003, 0x0160,
-	0x080c, 0x73b0, 0x1138, 0x080c, 0x7698, 0x080c, 0x601b, 0x080c,
-	0x72e2, 0x0010, 0x080c, 0x5eda, 0x080c, 0x7e40, 0x0041, 0x0018,
+	0x080c, 0x73bc, 0x1138, 0x080c, 0x76a4, 0x080c, 0x601a, 0x080c,
+	0x72ee, 0x0010, 0x080c, 0x5ed9, 0x080c, 0x7e4c, 0x0041, 0x0018,
 	0x9184, 0x9540, 0x1dc8, 0x002e, 0x001e, 0x000e, 0x0005, 0x00e6,
 	0x0036, 0x0046, 0x0056, 0x2071, 0x1a62, 0x080c, 0x1aa9, 0x005e,
 	0x004e, 0x003e, 0x00ee, 0x0005, 0x0126, 0x2091, 0x2e00, 0x2071,
@@ -969,99 +969,99 @@
 	0x0007, 0x0082, 0x0016, 0x2001, 0x188b, 0x200c, 0xd184, 0x001e,
 	0x0d70, 0x0c98, 0x0016, 0x2001, 0x188b, 0x200c, 0xd194, 0x001e,
 	0x0d30, 0x0c58, 0x24d4, 0x24ba, 0x24bd, 0x24c0, 0x24c5, 0x24c7,
-	0x24cb, 0x24cf, 0x080c, 0x8fac, 0x00b8, 0x080c, 0x9079, 0x00a0,
-	0x080c, 0x9079, 0x080c, 0x8fac, 0x0078, 0x0099, 0x0068, 0x080c,
-	0x8fac, 0x0079, 0x0048, 0x080c, 0x9079, 0x0059, 0x0028, 0x080c,
-	0x9079, 0x080c, 0x8fac, 0x0029, 0x002e, 0x001e, 0x000e, 0x012e,
+	0x24cb, 0x24cf, 0x080c, 0x8fd5, 0x00b8, 0x080c, 0x90a2, 0x00a0,
+	0x080c, 0x90a2, 0x080c, 0x8fd5, 0x0078, 0x0099, 0x0068, 0x080c,
+	0x8fd5, 0x0079, 0x0048, 0x080c, 0x90a2, 0x0059, 0x0028, 0x080c,
+	0x90a2, 0x080c, 0x8fd5, 0x0029, 0x002e, 0x001e, 0x000e, 0x012e,
 	0x0005, 0x00a6, 0x6124, 0x6028, 0xd09c, 0x0118, 0xd19c, 0x1904,
-	0x273c, 0xd1f4, 0x190c, 0x0dce, 0x080c, 0x73b0, 0x0904, 0x252f,
-	0x080c, 0xd216, 0x1120, 0x7000, 0x9086, 0x0003, 0x0570, 0x6024,
-	0x9084, 0x1800, 0x0550, 0x080c, 0x73d3, 0x0118, 0x080c, 0x73c1,
-	0x1520, 0x6027, 0x0020, 0x6043, 0x0000, 0x080c, 0xd216, 0x0168,
-	0x080c, 0x73d3, 0x1150, 0x2001, 0x19a7, 0x2003, 0x0001, 0x6027,
-	0x1800, 0x080c, 0x7246, 0x0804, 0x273f, 0x70a4, 0x9005, 0x1150,
-	0x70a7, 0x0001, 0x00d6, 0x2069, 0x0140, 0x080c, 0x7407, 0x00de,
-	0x1904, 0x273f, 0x080c, 0x76a2, 0x0428, 0x080c, 0x73d3, 0x1590,
-	0x6024, 0x9084, 0x1800, 0x1108, 0x0468, 0x080c, 0x76a2, 0x080c,
-	0x7698, 0x080c, 0x601b, 0x080c, 0x72e2, 0x0804, 0x273c, 0xd1ac,
+	0x273c, 0xd1f4, 0x190c, 0x0dce, 0x080c, 0x73bc, 0x0904, 0x252f,
+	0x080c, 0xd230, 0x1120, 0x7000, 0x9086, 0x0003, 0x0570, 0x6024,
+	0x9084, 0x1800, 0x0550, 0x080c, 0x73df, 0x0118, 0x080c, 0x73cd,
+	0x1520, 0x6027, 0x0020, 0x6043, 0x0000, 0x080c, 0xd230, 0x0168,
+	0x080c, 0x73df, 0x1150, 0x2001, 0x19a7, 0x2003, 0x0001, 0x6027,
+	0x1800, 0x080c, 0x7252, 0x0804, 0x273f, 0x70a4, 0x9005, 0x1150,
+	0x70a7, 0x0001, 0x00d6, 0x2069, 0x0140, 0x080c, 0x7413, 0x00de,
+	0x1904, 0x273f, 0x080c, 0x76ae, 0x0428, 0x080c, 0x73df, 0x1590,
+	0x6024, 0x9084, 0x1800, 0x1108, 0x0468, 0x080c, 0x76ae, 0x080c,
+	0x76a4, 0x080c, 0x601a, 0x080c, 0x72ee, 0x0804, 0x273c, 0xd1ac,
 	0x1508, 0x6024, 0xd0dc, 0x1170, 0xd0e4, 0x1178, 0xd0d4, 0x1190,
-	0xd0cc, 0x0130, 0x7098, 0x9086, 0x0028, 0x1110, 0x080c, 0x7585,
-	0x0804, 0x273c, 0x080c, 0x769d, 0x0048, 0x2001, 0x197d, 0x2003,
-	0x0002, 0x0020, 0x080c, 0x74ea, 0x0804, 0x273c, 0x080c, 0x7620,
+	0xd0cc, 0x0130, 0x7098, 0x9086, 0x0028, 0x1110, 0x080c, 0x7591,
+	0x0804, 0x273c, 0x080c, 0x76a9, 0x0048, 0x2001, 0x197d, 0x2003,
+	0x0002, 0x0020, 0x080c, 0x74f6, 0x0804, 0x273c, 0x080c, 0x762c,
 	0x0804, 0x273c, 0x6220, 0xd1bc, 0x0138, 0xd2bc, 0x1904, 0x27af,
 	0xd2b4, 0x1904, 0x27c2, 0x0000, 0xd1ac, 0x0904, 0x2651, 0x0036,
-	0x6328, 0xc3bc, 0x632a, 0x003e, 0x080c, 0x73b0, 0x11c0, 0x6027,
-	0x0020, 0x0006, 0x0026, 0x0036, 0x080c, 0x73ca, 0x1158, 0x080c,
-	0x7698, 0x080c, 0x601b, 0x080c, 0x72e2, 0x003e, 0x002e, 0x000e,
-	0x00ae, 0x0005, 0x003e, 0x002e, 0x000e, 0x080c, 0x7388, 0x0016,
+	0x6328, 0xc3bc, 0x632a, 0x003e, 0x080c, 0x73bc, 0x11c0, 0x6027,
+	0x0020, 0x0006, 0x0026, 0x0036, 0x080c, 0x73d6, 0x1158, 0x080c,
+	0x76a4, 0x080c, 0x601a, 0x080c, 0x72ee, 0x003e, 0x002e, 0x000e,
+	0x00ae, 0x0005, 0x003e, 0x002e, 0x000e, 0x080c, 0x7394, 0x0016,
 	0x0046, 0x00c6, 0x644c, 0x9486, 0xf0f0, 0x1138, 0x2061, 0x0100,
 	0x644a, 0x6043, 0x0090, 0x6043, 0x0010, 0x74da, 0x948c, 0xff00,
 	0x7038, 0xd084, 0x0178, 0x9186, 0xf800, 0x1160, 0x7048, 0xd084,
 	0x1148, 0xc085, 0x704a, 0x0036, 0x2418, 0x2011, 0x8016, 0x080c,
-	0x4b05, 0x003e, 0x080c, 0xd20f, 0x1904, 0x262e, 0x9196, 0xff00,
+	0x4b04, 0x003e, 0x080c, 0xd229, 0x1904, 0x262e, 0x9196, 0xff00,
 	0x05a8, 0x7060, 0x9084, 0x00ff, 0x810f, 0x81ff, 0x0110, 0x9116,
-	0x0568, 0x7130, 0xd184, 0x1550, 0x080c, 0x3312, 0x0128, 0xc18d,
-	0x7132, 0x080c, 0x6962, 0x1510, 0x6240, 0x9294, 0x0010, 0x0130,
+	0x0568, 0x7130, 0xd184, 0x1550, 0x080c, 0x3319, 0x0128, 0xc18d,
+	0x7132, 0x080c, 0x696a, 0x1510, 0x6240, 0x9294, 0x0010, 0x0130,
 	0x6248, 0x9294, 0xff00, 0x9296, 0xff00, 0x01c0, 0x7030, 0xd08c,
 	0x0904, 0x262e, 0x7038, 0xd08c, 0x1140, 0x2001, 0x180c, 0x200c,
 	0xd1ac, 0x1904, 0x262e, 0xc1ad, 0x2102, 0x0036, 0x73d8, 0x2011,
-	0x8013, 0x080c, 0x4b05, 0x003e, 0x0804, 0x262e, 0x7038, 0xd08c,
+	0x8013, 0x080c, 0x4b04, 0x003e, 0x0804, 0x262e, 0x7038, 0xd08c,
 	0x1140, 0x2001, 0x180c, 0x200c, 0xd1ac, 0x1904, 0x262e, 0xc1ad,
-	0x2102, 0x0036, 0x73d8, 0x2011, 0x8013, 0x080c, 0x4b05, 0x003e,
+	0x2102, 0x0036, 0x73d8, 0x2011, 0x8013, 0x080c, 0x4b04, 0x003e,
 	0x7130, 0xc185, 0x7132, 0x2011, 0x1848, 0x220c, 0xd1a4, 0x01f0,
-	0x0016, 0x2009, 0x0001, 0x2011, 0x0100, 0x080c, 0x86b4, 0x2019,
-	0x000e, 0x00c6, 0x2061, 0x0000, 0x080c, 0xe501, 0x00ce, 0x9484,
-	0x00ff, 0x9080, 0x331e, 0x200d, 0x918c, 0xff00, 0x810f, 0x2120,
-	0x9006, 0x2009, 0x000e, 0x080c, 0xe58d, 0x001e, 0x0016, 0x2009,
-	0x0002, 0x2019, 0x0004, 0x080c, 0x3187, 0x001e, 0x0078, 0x0156,
-	0x00b6, 0x20a9, 0x007f, 0x900e, 0x080c, 0x6600, 0x1110, 0x080c,
-	0x6035, 0x8108, 0x1f04, 0x2624, 0x00be, 0x015e, 0x00ce, 0x004e,
-	0x080c, 0xadb8, 0x60e3, 0x0000, 0x001e, 0x2001, 0x1800, 0x2014,
+	0x0016, 0x2009, 0x0001, 0x2011, 0x0100, 0x080c, 0x86dd, 0x2019,
+	0x000e, 0x00c6, 0x2061, 0x0000, 0x080c, 0xe522, 0x00ce, 0x9484,
+	0x00ff, 0x9080, 0x3325, 0x200d, 0x918c, 0xff00, 0x810f, 0x2120,
+	0x9006, 0x2009, 0x000e, 0x080c, 0xe5ae, 0x001e, 0x0016, 0x2009,
+	0x0002, 0x2019, 0x0004, 0x080c, 0x318a, 0x001e, 0x0078, 0x0156,
+	0x00b6, 0x20a9, 0x007f, 0x900e, 0x080c, 0x65ff, 0x1110, 0x080c,
+	0x6034, 0x8108, 0x1f04, 0x2624, 0x00be, 0x015e, 0x00ce, 0x004e,
+	0x080c, 0xadd2, 0x60e3, 0x0000, 0x001e, 0x2001, 0x1800, 0x2014,
 	0x9296, 0x0004, 0x1170, 0xd19c, 0x11a0, 0x2011, 0x180c, 0x2214,
 	0xd29c, 0x1120, 0x6204, 0x9295, 0x0002, 0x6206, 0x6228, 0xc29d,
 	0x622a, 0x2003, 0x0001, 0x2001, 0x1826, 0x2003, 0x0000, 0x6027,
 	0x0020, 0xd194, 0x0904, 0x273c, 0x0016, 0x6220, 0xd2b4, 0x0904,
-	0x26d9, 0x080c, 0x8550, 0x080c, 0xa259, 0x6027, 0x0004, 0x00f6,
+	0x26d9, 0x080c, 0x8579, 0x080c, 0xa273, 0x6027, 0x0004, 0x00f6,
 	0x2019, 0x19f0, 0x2304, 0x907d, 0x0904, 0x26a8, 0x7804, 0x9086,
 	0x0032, 0x15f0, 0x00d6, 0x00c6, 0x00e6, 0x0096, 0x2069, 0x0140,
 	0x782c, 0x685e, 0x7808, 0x685a, 0x6043, 0x0002, 0x2001, 0x0003,
 	0x8001, 0x1df0, 0x6043, 0x0000, 0x2001, 0x003c, 0x8001, 0x1df0,
 	0x080c, 0x2cff, 0x2001, 0x001e, 0x8001, 0x0240, 0x20a9, 0x0009,
 	0x080c, 0x2c19, 0x6904, 0xd1dc, 0x1140, 0x0cb0, 0x2001, 0x0100,
-	0x080c, 0x2cef, 0x9006, 0x080c, 0x2cef, 0x080c, 0x955f, 0x080c,
-	0x9664, 0x7814, 0x2048, 0xa867, 0x0103, 0x2f60, 0x080c, 0xae47,
+	0x080c, 0x2cef, 0x9006, 0x080c, 0x2cef, 0x080c, 0x9588, 0x080c,
+	0x968d, 0x7814, 0x2048, 0xa867, 0x0103, 0x2f60, 0x080c, 0xae61,
 	0x009e, 0x00ee, 0x00ce, 0x00de, 0x00fe, 0x001e, 0x00ae, 0x0005,
 	0x00fe, 0x00d6, 0x2069, 0x0140, 0x6804, 0x9084, 0x4000, 0x0110,
 	0x080c, 0x2cff, 0x00de, 0x00c6, 0x2061, 0x19e7, 0x6028, 0x080c,
-	0xd216, 0x0120, 0x909a, 0x0003, 0x1258, 0x0018, 0x909a, 0x00c8,
-	0x1238, 0x8000, 0x602a, 0x00ce, 0x080c, 0xa235, 0x0804, 0x273b,
-	0x2061, 0x0100, 0x62c0, 0x080c, 0xac43, 0x2019, 0x19f0, 0x2304,
-	0x9065, 0x0120, 0x2009, 0x0027, 0x080c, 0xaec2, 0x00ce, 0x0804,
-	0x273b, 0xd2bc, 0x0904, 0x2722, 0x080c, 0x855d, 0x6014, 0x9084,
+	0xd230, 0x0120, 0x909a, 0x0003, 0x1258, 0x0018, 0x909a, 0x00c8,
+	0x1238, 0x8000, 0x602a, 0x00ce, 0x080c, 0xa24f, 0x0804, 0x273b,
+	0x2061, 0x0100, 0x62c0, 0x080c, 0xac5d, 0x2019, 0x19f0, 0x2304,
+	0x9065, 0x0120, 0x2009, 0x0027, 0x080c, 0xaedc, 0x00ce, 0x0804,
+	0x273b, 0xd2bc, 0x0904, 0x2722, 0x080c, 0x8586, 0x6014, 0x9084,
 	0x1984, 0x9085, 0x0010, 0x6016, 0x6027, 0x0004, 0x00d6, 0x2069,
 	0x0140, 0x6804, 0x9084, 0x4000, 0x0110, 0x080c, 0x2cff, 0x00de,
-	0x00c6, 0x2061, 0x19e7, 0x6044, 0x080c, 0xd216, 0x0120, 0x909a,
+	0x00c6, 0x2061, 0x19e7, 0x6044, 0x080c, 0xd230, 0x0120, 0x909a,
 	0x0003, 0x1658, 0x0018, 0x909a, 0x00c8, 0x1638, 0x8000, 0x6046,
-	0x603c, 0x00ce, 0x9005, 0x05b8, 0x2009, 0x07d0, 0x080c, 0x8555,
+	0x603c, 0x00ce, 0x9005, 0x05b8, 0x2009, 0x07d0, 0x080c, 0x857e,
 	0x9080, 0x0008, 0x2004, 0x9086, 0x0006, 0x1138, 0x6114, 0x918c,
 	0x1984, 0x918d, 0x0012, 0x6116, 0x0430, 0x9080, 0x0008, 0x2004,
 	0x9086, 0x0009, 0x0d98, 0x6114, 0x918c, 0x1984, 0x918d, 0x0016,
 	0x6116, 0x00c8, 0x6027, 0x0004, 0x00b0, 0x0036, 0x2019, 0x0001,
-	0x080c, 0xa59c, 0x003e, 0x2019, 0x19f6, 0x2304, 0x9065, 0x0150,
+	0x080c, 0xa5b6, 0x003e, 0x2019, 0x19f6, 0x2304, 0x9065, 0x0150,
 	0x2009, 0x004f, 0x6020, 0x9086, 0x0009, 0x1110, 0x2009, 0x004f,
-	0x080c, 0xaec2, 0x00ce, 0x001e, 0xd19c, 0x0904, 0x27aa, 0x7038,
+	0x080c, 0xaedc, 0x00ce, 0x001e, 0xd19c, 0x0904, 0x27aa, 0x7038,
 	0xd0ac, 0x1904, 0x2783, 0x0016, 0x0156, 0x6027, 0x0008, 0x6050,
 	0x9085, 0x0040, 0x6052, 0x6050, 0x9084, 0xfbcf, 0x6052, 0x080c,
 	0x2c38, 0x9085, 0x2000, 0x6052, 0x20a9, 0x0012, 0x1d04, 0x2756,
-	0x080c, 0x8584, 0x1f04, 0x2756, 0x6050, 0x9085, 0x0400, 0x9084,
+	0x080c, 0x85ad, 0x1f04, 0x2756, 0x6050, 0x9085, 0x0400, 0x9084,
 	0xdfbf, 0x6052, 0x20a9, 0x0028, 0xa001, 0x1f04, 0x2764, 0x6150,
 	0x9185, 0x1400, 0x6052, 0x20a9, 0x0366, 0x1d04, 0x276d, 0x080c,
-	0x8584, 0x6020, 0xd09c, 0x1130, 0x015e, 0x6152, 0x001e, 0x6027,
+	0x85ad, 0x6020, 0xd09c, 0x1130, 0x015e, 0x6152, 0x001e, 0x6027,
 	0x0008, 0x0480, 0x080c, 0x2c00, 0x1f04, 0x276d, 0x015e, 0x6152,
 	0x001e, 0x6027, 0x0008, 0x0016, 0x6028, 0xc09c, 0x602a, 0x080c,
-	0xadb8, 0x60e3, 0x0000, 0x080c, 0xe9c8, 0x080c, 0xe9e3, 0x080c,
-	0x56d4, 0xd0fc, 0x1138, 0x080c, 0xd20f, 0x1120, 0x9085, 0x0001,
-	0x080c, 0x73f7, 0x9006, 0x080c, 0x2cef, 0x2009, 0x0002, 0x080c,
+	0xadd2, 0x60e3, 0x0000, 0x080c, 0xe9e9, 0x080c, 0xea04, 0x080c,
+	0x56d3, 0xd0fc, 0x1138, 0x080c, 0xd229, 0x1120, 0x9085, 0x0001,
+	0x080c, 0x7403, 0x9006, 0x080c, 0x2cef, 0x2009, 0x0002, 0x080c,
 	0x2c3e, 0x2001, 0x1800, 0x2003, 0x0004, 0x6027, 0x0008, 0x080c,
 	0x0bae, 0x001e, 0x918c, 0xffd0, 0x6126, 0x00ae, 0x0005, 0x0016,
 	0x2001, 0x188b, 0x200c, 0xd184, 0x001e, 0x0904, 0x255c, 0x0016,
@@ -1075,33 +1075,33 @@
 	0x0126, 0x2091, 0x8000, 0x2071, 0x1800, 0x71d0, 0x70d2, 0x9116,
 	0x05e8, 0x81ff, 0x01a0, 0x2009, 0x0000, 0x080c, 0x2c3e, 0x2011,
 	0x8011, 0x2019, 0x010e, 0x231c, 0x939e, 0x0007, 0x1118, 0x2019,
-	0x0001, 0x0010, 0x2019, 0x0000, 0x080c, 0x4b05, 0x0438, 0x2001,
+	0x0001, 0x0010, 0x2019, 0x0000, 0x080c, 0x4b04, 0x0438, 0x2001,
 	0x19a8, 0x200c, 0x81ff, 0x1140, 0x2001, 0x0109, 0x2004, 0xd0b4,
 	0x0118, 0x2019, 0x0003, 0x0008, 0x2118, 0x2011, 0x8012, 0x080c,
-	0x4b05, 0x080c, 0x56d4, 0xd0fc, 0x1188, 0x080c, 0xd20f, 0x1170,
-	0x00c6, 0x080c, 0x28d2, 0x080c, 0xa503, 0x2061, 0x0100, 0x2019,
-	0x0028, 0x2009, 0x0002, 0x080c, 0x3187, 0x00ce, 0x012e, 0x00fe,
+	0x4b04, 0x080c, 0x56d3, 0xd0fc, 0x1188, 0x080c, 0xd229, 0x1170,
+	0x00c6, 0x080c, 0x28d2, 0x080c, 0xa51d, 0x2061, 0x0100, 0x2019,
+	0x0028, 0x2009, 0x0002, 0x080c, 0x318a, 0x00ce, 0x012e, 0x00fe,
 	0x00ee, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x2028, 0x918c,
 	0x00ff, 0x2130, 0x9094, 0xff00, 0x11f0, 0x2011, 0x1837, 0x2214,
 	0xd2ac, 0x11c8, 0x81ff, 0x01e8, 0x2011, 0x181f, 0x2204, 0x9106,
 	0x1190, 0x2011, 0x1820, 0x2214, 0x9294, 0xff00, 0x9584, 0xff00,
 	0x9206, 0x1148, 0x2011, 0x1820, 0x2214, 0x9294, 0x00ff, 0x9584,
-	0x00ff, 0x9206, 0x1120, 0x2500, 0x080c, 0x8095, 0x0048, 0x9584,
-	0x00ff, 0x9080, 0x331e, 0x200d, 0x918c, 0xff00, 0x810f, 0x9006,
-	0x0005, 0x9080, 0x331e, 0x200d, 0x918c, 0x00ff, 0x0005, 0x00d6,
+	0x00ff, 0x9206, 0x1120, 0x2500, 0x080c, 0x80be, 0x0048, 0x9584,
+	0x00ff, 0x9080, 0x3325, 0x200d, 0x918c, 0xff00, 0x810f, 0x9006,
+	0x0005, 0x9080, 0x3325, 0x200d, 0x918c, 0x00ff, 0x0005, 0x00d6,
 	0x2069, 0x0140, 0x2001, 0x1818, 0x2003, 0x00ef, 0x20a9, 0x0010,
 	0x9006, 0x6852, 0x6856, 0x1f04, 0x2882, 0x00de, 0x0005, 0x0006,
 	0x00d6, 0x0026, 0x2069, 0x0140, 0x2001, 0x1818, 0x2102, 0x8114,
 	0x8214, 0x8214, 0x8214, 0x20a9, 0x0010, 0x6853, 0x0000, 0x9006,
-	0x82ff, 0x1128, 0x9184, 0x000f, 0x9080, 0xf195, 0x2005, 0x6856,
+	0x82ff, 0x1128, 0x9184, 0x000f, 0x9080, 0xf1b6, 0x2005, 0x6856,
 	0x8211, 0x1f04, 0x2897, 0x002e, 0x00de, 0x000e, 0x0005, 0x00c6,
 	0x2061, 0x1800, 0x6030, 0x0110, 0xc09d, 0x0008, 0xc09c, 0x6032,
 	0x00ce, 0x0005, 0x0156, 0x00d6, 0x0026, 0x0016, 0x0006, 0x2069,
 	0x0140, 0x6980, 0x9116, 0x0180, 0x9112, 0x1230, 0x8212, 0x8210,
 	0x22a8, 0x2001, 0x0402, 0x0018, 0x22a8, 0x2001, 0x0404, 0x680e,
 	0x1f04, 0x28c7, 0x680f, 0x0000, 0x000e, 0x001e, 0x002e, 0x00de,
-	0x015e, 0x0005, 0x080c, 0x56d0, 0xd0c4, 0x0150, 0xd0a4, 0x0140,
-	0x9006, 0x0046, 0x2020, 0x2009, 0x002e, 0x080c, 0xe58d, 0x004e,
+	0x015e, 0x0005, 0x080c, 0x56cf, 0xd0c4, 0x0150, 0xd0a4, 0x0140,
+	0x9006, 0x0046, 0x2020, 0x2009, 0x002e, 0x080c, 0xe5ae, 0x004e,
 	0x0005, 0x00f6, 0x0016, 0x0026, 0x2079, 0x0140, 0x78c4, 0xd0dc,
 	0x0904, 0x293e, 0x080c, 0x2b9d, 0x0660, 0x9084, 0x0700, 0x908e,
 	0x0600, 0x1120, 0x2011, 0x4000, 0x900e, 0x0458, 0x908e, 0x0500,
@@ -1110,9 +1110,9 @@
 	0x2009, 0x0002, 0x00b0, 0x908e, 0x0200, 0x1120, 0x9016, 0x2009,
 	0x0004, 0x0078, 0x908e, 0x0100, 0x1548, 0x9016, 0x2009, 0x0008,
 	0x0040, 0x9084, 0x0700, 0x908e, 0x0300, 0x1500, 0x2011, 0x0030,
-	0x0058, 0x2300, 0x9080, 0x0020, 0x2018, 0x080c, 0x8f3f, 0x928c,
+	0x0058, 0x2300, 0x9080, 0x0020, 0x2018, 0x080c, 0x8f68, 0x928c,
 	0xff00, 0x0110, 0x2011, 0x00ff, 0x2200, 0x8007, 0x9085, 0x004c,
-	0x78c2, 0x2009, 0x0138, 0x220a, 0x080c, 0x73b0, 0x1118, 0x2009,
+	0x78c2, 0x2009, 0x0138, 0x220a, 0x080c, 0x73bc, 0x1118, 0x2009,
 	0x196d, 0x220a, 0x002e, 0x001e, 0x00fe, 0x0005, 0x78c3, 0x0000,
 	0x0cc8, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026, 0x2001,
 	0x0170, 0x200c, 0x8000, 0x2014, 0x9184, 0x0003, 0x0110, 0x080c,
@@ -1129,16 +1129,16 @@
 	0x080c, 0x2bfb, 0x2001, 0x1992, 0x2003, 0x0000, 0x7828, 0x9084,
 	0xe1d7, 0x782a, 0x9006, 0x20a9, 0x0009, 0x080c, 0x2bb9, 0x2001,
 	0x1990, 0x2003, 0x0006, 0x2009, 0x001e, 0x2011, 0x2a0e, 0x080c,
-	0x8562, 0x0005, 0x2009, 0x1995, 0x200b, 0x0000, 0x2001, 0x199a,
+	0x858b, 0x0005, 0x2009, 0x1995, 0x200b, 0x0000, 0x2001, 0x199a,
 	0x2003, 0x0036, 0x2001, 0x1999, 0x2003, 0x002a, 0x2001, 0x1992,
 	0x2003, 0x0001, 0x9006, 0x080c, 0x2b6b, 0x2001, 0xffff, 0x20a9,
 	0x0009, 0x080c, 0x2bb9, 0x2001, 0x1990, 0x2003, 0x0006, 0x2009,
-	0x001e, 0x2011, 0x2a0e, 0x080c, 0x8562, 0x0005, 0x080c, 0x0dd5,
+	0x001e, 0x2011, 0x2a0e, 0x080c, 0x858b, 0x0005, 0x080c, 0x0dd5,
 	0x2001, 0x199a, 0x2003, 0x0036, 0x2001, 0x1992, 0x2003, 0x0003,
 	0x7a38, 0x9294, 0x0005, 0x9296, 0x0004, 0x0110, 0x9006, 0x0010,
 	0x2001, 0x0001, 0x080c, 0x2b6b, 0x2001, 0x1996, 0x2003, 0x0000,
 	0x2001, 0xffff, 0x20a9, 0x0009, 0x080c, 0x2bb9, 0x2001, 0x1990,
-	0x2003, 0x0006, 0x2009, 0x001e, 0x2011, 0x2a0e, 0x080c, 0x8562,
+	0x2003, 0x0006, 0x2009, 0x001e, 0x2011, 0x2a0e, 0x080c, 0x858b,
 	0x0005, 0x080c, 0x0dd5, 0x080c, 0x0dd5, 0x0005, 0x0006, 0x0016,
 	0x0026, 0x00e6, 0x00f6, 0x0156, 0x0126, 0x2091, 0x8000, 0x2079,
 	0x0100, 0x2001, 0x1992, 0x2004, 0x908a, 0x0007, 0x1a0c, 0x0dd5,
@@ -1199,13 +1199,13 @@
 	0x783b, 0x0007, 0x0090, 0x9186, 0x0001, 0x1118, 0x783b, 0x0006,
 	0x0060, 0x9186, 0x0002, 0x1118, 0x783b, 0x0005, 0x0030, 0x9186,
 	0x0003, 0x1118, 0x783b, 0x0004, 0x0000, 0x0006, 0x1d04, 0x2be6,
-	0x080c, 0x8584, 0x1f04, 0x2be6, 0x7850, 0x9085, 0x0400, 0x9084,
+	0x080c, 0x85ad, 0x1f04, 0x2be6, 0x7850, 0x9085, 0x0400, 0x9084,
 	0xdfbf, 0x7852, 0x080c, 0x2c38, 0x9085, 0x1000, 0x7852, 0x000e,
 	0x001e, 0x012e, 0x0005, 0x7850, 0x9084, 0xffcf, 0x7852, 0x0005,
 	0x0006, 0x0156, 0x00f6, 0x2079, 0x0100, 0x20a9, 0x000a, 0x7854,
 	0xd0ac, 0x1130, 0x7820, 0xd0e4, 0x1140, 0x1f04, 0x2c0a, 0x0028,
 	0x7854, 0xd08c, 0x1110, 0x1f04, 0x2c10, 0x00fe, 0x015e, 0x000e,
-	0x0005, 0x1d04, 0x2c19, 0x080c, 0x8584, 0x1f04, 0x2c19, 0x0005,
+	0x0005, 0x1d04, 0x2c19, 0x080c, 0x85ad, 0x1f04, 0x2c19, 0x0005,
 	0x0006, 0x2001, 0x199c, 0x2004, 0x9086, 0x0000, 0x000e, 0x0005,
 	0x0006, 0x2001, 0x199c, 0x2004, 0x9086, 0x0001, 0x000e, 0x0005,
 	0x0006, 0x2001, 0x199c, 0x2004, 0x9086, 0x0002, 0x000e, 0x0005,
@@ -1232,13 +1232,13 @@
 	0x001e, 0x919c, 0xffe4, 0x9184, 0x0001, 0x0118, 0x9385, 0x0009,
 	0x6016, 0x9184, 0x0002, 0x0118, 0x9385, 0x0012, 0x6016, 0x003e,
 	0x2001, 0x180c, 0x200c, 0xc1dc, 0x2102, 0x00ce, 0x0005, 0x0016,
-	0x0026, 0x080c, 0x73ca, 0x0108, 0xc0bc, 0x2009, 0x0140, 0x2114,
+	0x0026, 0x080c, 0x73d6, 0x0108, 0xc0bc, 0x2009, 0x0140, 0x2114,
 	0x9294, 0x0001, 0x9215, 0x220a, 0x002e, 0x001e, 0x0005, 0x0016,
 	0x0026, 0x2009, 0x0140, 0x2114, 0x9294, 0x0001, 0x9285, 0x1000,
 	0x200a, 0x220a, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x2009,
 	0x0140, 0x2114, 0x9294, 0x0001, 0x9215, 0x220a, 0x002e, 0x001e,
 	0x0005, 0x0006, 0x0016, 0x2009, 0x0140, 0x2104, 0x1128, 0x080c,
-	0x73ca, 0x0110, 0xc0bc, 0x0008, 0xc0bd, 0x200a, 0x001e, 0x000e,
+	0x73d6, 0x0110, 0xc0bc, 0x0008, 0xc0bd, 0x200a, 0x001e, 0x000e,
 	0x0005, 0x2f95, 0x2f95, 0x2db9, 0x2db9, 0x2dc5, 0x2dc5, 0x2dd1,
 	0x2dd1, 0x2ddf, 0x2ddf, 0x2deb, 0x2deb, 0x2df9, 0x2df9, 0x2e07,
 	0x2e07, 0x2e19, 0x2e19, 0x2e25, 0x2e25, 0x2e33, 0x2e33, 0x2e51,
@@ -1317,1840 +1317,1841 @@
 	0x0146, 0x0156, 0x080c, 0x2941, 0x080c, 0x2295, 0x080c, 0x2481,
 	0x080c, 0x1380, 0x080c, 0x22d0, 0x0000, 0x015e, 0x014e, 0x013e,
 	0x01de, 0x01ce, 0x012e, 0x000e, 0x010e, 0x000d, 0x00b6, 0x00c6,
-	0x0026, 0x0046, 0x9026, 0x080c, 0x6928, 0x1904, 0x30a3, 0x72dc,
+	0x0026, 0x0046, 0x9026, 0x080c, 0x6930, 0x1904, 0x30a6, 0x72dc,
 	0x2001, 0x197c, 0x2004, 0x9005, 0x1110, 0xd29c, 0x0148, 0xd284,
-	0x1138, 0xd2bc, 0x1904, 0x30a3, 0x080c, 0x30a8, 0x0804, 0x30a3,
-	0xd2cc, 0x1904, 0x30a3, 0x080c, 0x73b0, 0x1120, 0x70af, 0xffff,
-	0x0804, 0x30a3, 0xd294, 0x0120, 0x70af, 0xffff, 0x0804, 0x30a3,
-	0x080c, 0x330d, 0x0160, 0x080c, 0xd216, 0x0128, 0x2001, 0x1818,
-	0x203c, 0x0804, 0x3030, 0x70af, 0xffff, 0x0804, 0x30a3, 0x2001,
-	0x1818, 0x203c, 0x7294, 0xd284, 0x0904, 0x3030, 0xd28c, 0x1904,
-	0x3030, 0x0036, 0x73ac, 0x938e, 0xffff, 0x1110, 0x2019, 0x0001,
+	0x1138, 0xd2bc, 0x1904, 0x30a6, 0x080c, 0x30ab, 0x0804, 0x30a6,
+	0xd2cc, 0x1904, 0x30a6, 0x080c, 0x73bc, 0x1120, 0x70af, 0xffff,
+	0x0804, 0x30a6, 0xd294, 0x0120, 0x70af, 0xffff, 0x0804, 0x30a6,
+	0x080c, 0x3314, 0x0160, 0x080c, 0xd230, 0x0128, 0x2001, 0x1818,
+	0x203c, 0x0804, 0x3033, 0x70af, 0xffff, 0x0804, 0x30a6, 0x2001,
+	0x1818, 0x203c, 0x7294, 0xd284, 0x0904, 0x3033, 0xd28c, 0x1904,
+	0x3033, 0x0036, 0x73ac, 0x938e, 0xffff, 0x1110, 0x2019, 0x0001,
 	0x8314, 0x92e0, 0x1c80, 0x2c04, 0x938c, 0x0001, 0x0120, 0x9084,
-	0xff00, 0x8007, 0x0010, 0x9084, 0x00ff, 0x970e, 0x05b8, 0x908e,
-	0x0000, 0x05a0, 0x908e, 0x00ff, 0x1150, 0x7230, 0xd284, 0x1598,
-	0x7294, 0xc28d, 0x7296, 0x70af, 0xffff, 0x003e, 0x0488, 0x900e,
-	0x080c, 0x283e, 0x080c, 0x659f, 0x1520, 0x9006, 0xb8bb, 0x0520,
-	0xb8ac, 0x9005, 0x0148, 0x00c6, 0x2060, 0x080c, 0x8958, 0x00ce,
-	0x090c, 0x8cfc, 0xb8af, 0x0000, 0x080c, 0x696a, 0x1150, 0x7030,
-	0xd08c, 0x0118, 0xb800, 0xd0bc, 0x0120, 0x080c, 0x30c1, 0x0148,
-	0x0028, 0x080c, 0x31fd, 0x080c, 0x30ed, 0x0118, 0x8318, 0x0804,
-	0x2fe0, 0x73ae, 0x0010, 0x70af, 0xffff, 0x003e, 0x0804, 0x30a3,
-	0x9780, 0x331e, 0x203d, 0x97bc, 0xff00, 0x873f, 0x2041, 0x007e,
-	0x70ac, 0x9096, 0xffff, 0x1118, 0x900e, 0x28a8, 0x0050, 0x9812,
-	0x0220, 0x2008, 0x9802, 0x20a8, 0x0020, 0x70af, 0xffff, 0x0804,
-	0x30a3, 0x2700, 0x0156, 0x0016, 0x9106, 0x0904, 0x3098, 0xc484,
-	0x080c, 0x6600, 0x0148, 0x080c, 0xd216, 0x1904, 0x3098, 0x080c,
-	0x659f, 0x1904, 0x30a0, 0x0008, 0xc485, 0xb8bb, 0x0520, 0xb8ac,
-	0x9005, 0x0148, 0x00c6, 0x2060, 0x080c, 0x8958, 0x00ce, 0x090c,
-	0x8cfc, 0xb8af, 0x0000, 0x080c, 0x696a, 0x1130, 0x7030, 0xd08c,
-	0x01f8, 0xb800, 0xd0bc, 0x11e0, 0x7294, 0xd28c, 0x0180, 0x080c,
-	0x696a, 0x9082, 0x0006, 0x02e0, 0xd484, 0x1118, 0x080c, 0x65c4,
-	0x0028, 0x080c, 0x3289, 0x01a0, 0x080c, 0x32b4, 0x0088, 0x080c,
-	0x31fd, 0x080c, 0xd216, 0x1160, 0x080c, 0x30ed, 0x0188, 0x0040,
-	0x080c, 0xd216, 0x1118, 0x080c, 0x3289, 0x0110, 0x0451, 0x0140,
-	0x001e, 0x8108, 0x015e, 0x1f04, 0x3049, 0x70af, 0xffff, 0x0018,
-	0x001e, 0x015e, 0x71ae, 0x004e, 0x002e, 0x00ce, 0x00be, 0x0005,
-	0x00c6, 0x0016, 0x70af, 0x0001, 0x2009, 0x007e, 0x080c, 0x659f,
-	0x1168, 0xb813, 0x00ff, 0xb817, 0xfffe, 0x080c, 0x31fd, 0x04a9,
-	0x0128, 0x70dc, 0xc0bd, 0x70de, 0x080c, 0xcf67, 0x001e, 0x00ce,
-	0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x2001, 0x184c, 0x2004,
-	0x9084, 0x00ff, 0xb842, 0x080c, 0xae95, 0x01d0, 0x2b00, 0x6012,
-	0x080c, 0xcf90, 0x6023, 0x0001, 0x9006, 0x080c, 0x653c, 0x2001,
-	0x0000, 0x080c, 0x6550, 0x0126, 0x2091, 0x8000, 0x70a8, 0x8000,
-	0x70aa, 0x012e, 0x2009, 0x0004, 0x080c, 0xaec2, 0x9085, 0x0001,
-	0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, 0x0016, 0x0076, 0x00d6,
-	0x00c6, 0x2001, 0x184c, 0x2004, 0x9084, 0x00ff, 0xb842, 0x080c,
-	0xae95, 0x0548, 0x2b00, 0x6012, 0xb800, 0xc0c4, 0xb802, 0xb8a0,
-	0x9086, 0x007e, 0x0140, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006,
-	0x1110, 0x080c, 0x31bc, 0x080c, 0xcf90, 0x6023, 0x0001, 0x9006,
-	0x080c, 0x653c, 0x2001, 0x0002, 0x080c, 0x6550, 0x0126, 0x2091,
-	0x8000, 0x70a8, 0x8000, 0x70aa, 0x012e, 0x2009, 0x0002, 0x080c,
-	0xaec2, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005,
-	0x00b6, 0x00c6, 0x0026, 0x2009, 0x0080, 0x080c, 0x659f, 0x1140,
-	0xb813, 0x00ff, 0xb817, 0xfffc, 0x0039, 0x0110, 0x70e3, 0xffff,
-	0x002e, 0x00ce, 0x00be, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6,
-	0x080c, 0xadf1, 0x01d0, 0x2b00, 0x6012, 0x080c, 0xcf90, 0x6023,
-	0x0001, 0x9006, 0x080c, 0x653c, 0x2001, 0x0002, 0x080c, 0x6550,
-	0x0126, 0x2091, 0x8000, 0x70e4, 0x8000, 0x70e6, 0x012e, 0x2009,
-	0x0002, 0x080c, 0xaec2, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e,
-	0x001e, 0x0005, 0x00c6, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2009,
-	0x007f, 0x080c, 0x659f, 0x11b8, 0xb813, 0x00ff, 0xb817, 0xfffd,
-	0xb8cf, 0x0004, 0x080c, 0xadf1, 0x0170, 0x2b00, 0x6012, 0x6316,
-	0x6023, 0x0001, 0x620a, 0x080c, 0xcf90, 0x2009, 0x0022, 0x080c,
-	0xaec2, 0x9085, 0x0001, 0x012e, 0x00de, 0x00ce, 0x0005, 0x00e6,
-	0x00c6, 0x0066, 0x0036, 0x0026, 0x00b6, 0x21f0, 0x080c, 0x926d,
-	0x080c, 0x91f2, 0x080c, 0xac8a, 0x080c, 0xbd5d, 0x3e08, 0x2130,
-	0x81ff, 0x0120, 0x20a9, 0x007e, 0x900e, 0x0018, 0x20a9, 0x007f,
-	0x900e, 0x0016, 0x080c, 0x6600, 0x1140, 0x9686, 0x0002, 0x1118,
-	0xb800, 0xd0bc, 0x1110, 0x080c, 0x6035, 0x001e, 0x8108, 0x1f04,
-	0x31a1, 0x9686, 0x0001, 0x190c, 0x32e1, 0x00be, 0x002e, 0x003e,
-	0x006e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0036, 0x0026,
-	0x0016, 0x00b6, 0x6210, 0x2258, 0xbaa0, 0x0026, 0x2019, 0x0029,
-	0x080c, 0x9262, 0x0076, 0x2039, 0x0000, 0x080c, 0x913f, 0x2c08,
-	0x080c, 0xe2ca, 0x007e, 0x001e, 0xba10, 0xbb14, 0x080c, 0x6035,
-	0xba12, 0xbb16, 0x00be, 0x001e, 0x002e, 0x003e, 0x00ce, 0x00ee,
-	0x0005, 0x00e6, 0x0006, 0x00b6, 0x6010, 0x2058, 0xb8a0, 0x00be,
-	0x9086, 0x0080, 0x0150, 0x2071, 0x1800, 0x70a8, 0x9005, 0x0110,
-	0x8001, 0x70aa, 0x000e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x70e4,
-	0x9005, 0x0dc0, 0x8001, 0x70e6, 0x0ca8, 0xb800, 0xc08c, 0xb802,
-	0x0005, 0x00f6, 0x00e6, 0x00c6, 0x00b6, 0x0036, 0x0026, 0x0016,
-	0x0156, 0x2178, 0x81ff, 0x1118, 0x20a9, 0x0001, 0x0088, 0x080c,
-	0x56d0, 0xd0c4, 0x0150, 0xd0a4, 0x0140, 0x9006, 0x0046, 0x2020,
-	0x2009, 0x002d, 0x080c, 0xe58d, 0x004e, 0x20a9, 0x0800, 0x9016,
-	0x0026, 0x928e, 0x007e, 0x0904, 0x3269, 0x928e, 0x007f, 0x0904,
-	0x3269, 0x928e, 0x0080, 0x05e8, 0x9288, 0x1000, 0x210c, 0x81ff,
-	0x05c0, 0x8fff, 0x1148, 0x2001, 0x198e, 0x0006, 0x2003, 0x0001,
-	0x04e9, 0x000e, 0x2003, 0x0000, 0x00b6, 0x00c6, 0x2158, 0x2001,
-	0x0001, 0x080c, 0x6934, 0x00ce, 0x00be, 0x2019, 0x0029, 0x080c,
-	0x9262, 0x0076, 0x2039, 0x0000, 0x080c, 0x913f, 0x00b6, 0x00c6,
-	0x0026, 0x2158, 0xba04, 0x9294, 0x00ff, 0x9286, 0x0006, 0x1118,
-	0xb807, 0x0404, 0x0028, 0x2001, 0x0004, 0x8007, 0x9215, 0xba06,
-	0x002e, 0x00ce, 0x00be, 0x0016, 0x2c08, 0x080c, 0xe2ca, 0x001e,
-	0x007e, 0x002e, 0x8210, 0x1f04, 0x3220, 0x015e, 0x001e, 0x002e,
-	0x003e, 0x00be, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0046, 0x0026,
-	0x0016, 0x080c, 0x56d0, 0xd0c4, 0x0140, 0xd0a4, 0x0130, 0x9006,
-	0x2220, 0x2009, 0x0029, 0x080c, 0xe58d, 0x001e, 0x002e, 0x004e,
-	0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x7294, 0x82ff, 0x01e8,
-	0x080c, 0x6962, 0x11d0, 0x2100, 0x080c, 0x2871, 0x81ff, 0x01b8,
-	0x2019, 0x0001, 0x8314, 0x92e0, 0x1c80, 0x2c04, 0xd384, 0x0120,
-	0x9084, 0xff00, 0x8007, 0x0010, 0x9084, 0x00ff, 0x9116, 0x0138,
-	0x9096, 0x00ff, 0x0110, 0x8318, 0x0c68, 0x9085, 0x0001, 0x00ce,
-	0x003e, 0x002e, 0x001e, 0x0005, 0x0016, 0x00c6, 0x0126, 0x2091,
-	0x8000, 0x0036, 0x2019, 0x0029, 0x00a9, 0x003e, 0x9180, 0x1000,
-	0x2004, 0x9065, 0x0158, 0x0016, 0x00c6, 0x2061, 0x1ab0, 0x001e,
-	0x6112, 0x080c, 0x31bc, 0x001e, 0x080c, 0x65c4, 0x012e, 0x00ce,
-	0x001e, 0x0005, 0x0016, 0x0026, 0x2110, 0x080c, 0xa7ee, 0x080c,
-	0xe8f6, 0x002e, 0x001e, 0x0005, 0x2001, 0x1837, 0x2004, 0xd0cc,
-	0x0005, 0x00c6, 0x00b6, 0x080c, 0x73b0, 0x1118, 0x20a9, 0x0800,
-	0x0010, 0x20a9, 0x0782, 0x080c, 0x73b0, 0x1110, 0x900e, 0x0010,
-	0x2009, 0x007e, 0x9180, 0x1000, 0x2004, 0x905d, 0x0130, 0x86ff,
-	0x0110, 0xb800, 0xd0bc, 0x090c, 0x65c4, 0x8108, 0x1f04, 0x32f2,
-	0x2061, 0x1800, 0x607f, 0x0000, 0x6080, 0x9084, 0x00ff, 0x6082,
-	0x60b3, 0x0000, 0x00be, 0x00ce, 0x0005, 0x2001, 0x1869, 0x2004,
-	0xd0bc, 0x0005, 0x2011, 0x1848, 0x2214, 0xd2ec, 0x0005, 0x0026,
-	0x2011, 0x1867, 0x2214, 0xd2dc, 0x002e, 0x0005, 0x7eef, 0x7de8,
-	0x7ce4, 0x80e2, 0x7be1, 0x80e0, 0x80dc, 0x80da, 0x7ad9, 0x80d6,
-	0x80d5, 0x80d4, 0x80d3, 0x80d2, 0x80d1, 0x79ce, 0x78cd, 0x80cc,
-	0x80cb, 0x80ca, 0x80c9, 0x80c7, 0x80c6, 0x77c5, 0x76c3, 0x80bc,
-	0x80ba, 0x75b9, 0x80b6, 0x74b5, 0x73b4, 0x72b3, 0x80b2, 0x80b1,
-	0x80ae, 0x71ad, 0x80ac, 0x70ab, 0x6faa, 0x6ea9, 0x80a7, 0x6da6,
-	0x6ca5, 0x6ba3, 0x6a9f, 0x699e, 0x689d, 0x809b, 0x8098, 0x6797,
-	0x6690, 0x658f, 0x6488, 0x6384, 0x6282, 0x8081, 0x8080, 0x617c,
-	0x607a, 0x8079, 0x5f76, 0x8075, 0x8074, 0x8073, 0x8072, 0x8071,
-	0x806e, 0x5e6d, 0x806c, 0x5d6b, 0x5c6a, 0x5b69, 0x8067, 0x5a66,
-	0x5965, 0x5863, 0x575c, 0x565a, 0x5559, 0x8056, 0x8055, 0x5454,
-	0x5353, 0x5252, 0x5151, 0x504e, 0x4f4d, 0x804c, 0x804b, 0x4e4a,
-	0x4d49, 0x8047, 0x4c46, 0x8045, 0x8043, 0x803c, 0x803a, 0x8039,
-	0x8036, 0x4b35, 0x8034, 0x4a33, 0x4932, 0x4831, 0x802e, 0x472d,
-	0x462c, 0x452b, 0x442a, 0x4329, 0x4227, 0x8026, 0x8025, 0x4123,
-	0x401f, 0x3f1e, 0x3e1d, 0x3d1b, 0x3c18, 0x8017, 0x8010, 0x3b0f,
-	0x3a08, 0x8004, 0x3902, 0x8001, 0x8000, 0x8000, 0x3800, 0x3700,
-	0x3600, 0x8000, 0x3500, 0x8000, 0x8000, 0x8000, 0x3400, 0x8000,
-	0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3300, 0x3200, 0x8000,
-	0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3100, 0x3000, 0x8000,
-	0x8000, 0x2f00, 0x8000, 0x2e00, 0x2d00, 0x2c00, 0x8000, 0x8000,
-	0x8000, 0x2b00, 0x8000, 0x2a00, 0x2900, 0x2800, 0x8000, 0x2700,
-	0x2600, 0x2500, 0x2400, 0x2300, 0x2200, 0x8000, 0x8000, 0x2100,
-	0x2000, 0x1f00, 0x1e00, 0x1d00, 0x1c00, 0x8000, 0x8000, 0x1b00,
-	0x1a00, 0x8000, 0x1900, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
-	0x8000, 0x1800, 0x8000, 0x1700, 0x1600, 0x1500, 0x8000, 0x1400,
-	0x1300, 0x1200, 0x1100, 0x1000, 0x0f00, 0x8000, 0x8000, 0x0e00,
-	0x0d00, 0x0c00, 0x0b00, 0x0a00, 0x0900, 0x8000, 0x8000, 0x0800,
-	0x0700, 0x8000, 0x0600, 0x8000, 0x8000, 0x8000, 0x0500, 0x0400,
-	0x0300, 0x8000, 0x0200, 0x8000, 0x8000, 0x8000, 0x0100, 0x8000,
-	0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x0000, 0x8000, 0x8000,
+	0xff00, 0x8007, 0x0010, 0x9084, 0x00ff, 0x970e, 0x05d0, 0x908e,
+	0x0000, 0x05b8, 0x908e, 0x00ff, 0x1150, 0x7230, 0xd284, 0x15b0,
+	0x7294, 0xc28d, 0x7296, 0x70af, 0xffff, 0x003e, 0x04a0, 0x900e,
+	0x080c, 0x283e, 0x080c, 0x659e, 0x1538, 0x9006, 0xb8bb, 0x0520,
+	0xb8ac, 0x9005, 0x0148, 0x00c6, 0x2060, 0x080c, 0x8981, 0x00ce,
+	0x090c, 0x8d25, 0xb8af, 0x0000, 0x080c, 0x6972, 0x1168, 0x7030,
+	0xd08c, 0x0130, 0xb800, 0xd0bc, 0x0138, 0x080c, 0x681f, 0x0120,
+	0x080c, 0x30c4, 0x0148, 0x0028, 0x080c, 0x3204, 0x080c, 0x30f0,
+	0x0118, 0x8318, 0x0804, 0x2fe0, 0x73ae, 0x0010, 0x70af, 0xffff,
+	0x003e, 0x0804, 0x30a6, 0x9780, 0x3325, 0x203d, 0x97bc, 0xff00,
+	0x873f, 0x2041, 0x007e, 0x70ac, 0x9096, 0xffff, 0x1118, 0x900e,
+	0x28a8, 0x0050, 0x9812, 0x0220, 0x2008, 0x9802, 0x20a8, 0x0020,
+	0x70af, 0xffff, 0x0804, 0x30a6, 0x2700, 0x0156, 0x0016, 0x9106,
+	0x0904, 0x309b, 0xc484, 0x080c, 0x65ff, 0x0148, 0x080c, 0xd230,
+	0x1904, 0x309b, 0x080c, 0x659e, 0x1904, 0x30a3, 0x0008, 0xc485,
+	0xb8bb, 0x0520, 0xb8ac, 0x9005, 0x0148, 0x00c6, 0x2060, 0x080c,
+	0x8981, 0x00ce, 0x090c, 0x8d25, 0xb8af, 0x0000, 0x080c, 0x6972,
+	0x1130, 0x7030, 0xd08c, 0x01f8, 0xb800, 0xd0bc, 0x11e0, 0x7294,
+	0xd28c, 0x0180, 0x080c, 0x6972, 0x9082, 0x0006, 0x02e0, 0xd484,
+	0x1118, 0x080c, 0x65c3, 0x0028, 0x080c, 0x3290, 0x01a0, 0x080c,
+	0x32bb, 0x0088, 0x080c, 0x3204, 0x080c, 0xd230, 0x1160, 0x080c,
+	0x30f0, 0x0188, 0x0040, 0x080c, 0xd230, 0x1118, 0x080c, 0x3290,
+	0x0110, 0x0451, 0x0140, 0x001e, 0x8108, 0x015e, 0x1f04, 0x304c,
+	0x70af, 0xffff, 0x0018, 0x001e, 0x015e, 0x71ae, 0x004e, 0x002e,
+	0x00ce, 0x00be, 0x0005, 0x00c6, 0x0016, 0x70af, 0x0001, 0x2009,
+	0x007e, 0x080c, 0x659e, 0x1168, 0xb813, 0x00ff, 0xb817, 0xfffe,
+	0x080c, 0x3204, 0x04a9, 0x0128, 0x70dc, 0xc0bd, 0x70de, 0x080c,
+	0xcf81, 0x001e, 0x00ce, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6,
+	0x2001, 0x184c, 0x2004, 0x9084, 0x00ff, 0xb842, 0x080c, 0xaeaf,
+	0x01d0, 0x2b00, 0x6012, 0x080c, 0xcfaa, 0x6023, 0x0001, 0x9006,
+	0x080c, 0x653b, 0x2001, 0x0000, 0x080c, 0x654f, 0x0126, 0x2091,
+	0x8000, 0x70a8, 0x8000, 0x70aa, 0x012e, 0x2009, 0x0004, 0x080c,
+	0xaedc, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005,
+	0x0016, 0x0076, 0x00d6, 0x00c6, 0x2001, 0x184c, 0x2004, 0x9084,
+	0x00ff, 0xb842, 0x080c, 0xaeaf, 0x0548, 0x2b00, 0x6012, 0xb800,
+	0xc0c4, 0xb802, 0xb8a0, 0x9086, 0x007e, 0x0140, 0xb804, 0x9084,
+	0x00ff, 0x9086, 0x0006, 0x1110, 0x080c, 0x31bf, 0x080c, 0xcfaa,
+	0x6023, 0x0001, 0x9006, 0x080c, 0x653b, 0x2001, 0x0002, 0x080c,
+	0x654f, 0x0126, 0x2091, 0x8000, 0x70a8, 0x8000, 0x70aa, 0x012e,
+	0x2009, 0x0002, 0x080c, 0xaedc, 0x9085, 0x0001, 0x00ce, 0x00de,
+	0x007e, 0x001e, 0x0005, 0x00b6, 0x00c6, 0x0026, 0x2009, 0x0080,
+	0x080c, 0x659e, 0x1140, 0xb813, 0x00ff, 0xb817, 0xfffc, 0x0039,
+	0x0110, 0x70e3, 0xffff, 0x002e, 0x00ce, 0x00be, 0x0005, 0x0016,
+	0x0076, 0x00d6, 0x00c6, 0x080c, 0xae0b, 0x01d0, 0x2b00, 0x6012,
+	0x080c, 0xcfaa, 0x6023, 0x0001, 0x9006, 0x080c, 0x653b, 0x2001,
+	0x0002, 0x080c, 0x654f, 0x0126, 0x2091, 0x8000, 0x70e4, 0x8000,
+	0x70e6, 0x012e, 0x2009, 0x0002, 0x080c, 0xaedc, 0x9085, 0x0001,
+	0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, 0x00c6, 0x00d6, 0x0126,
+	0x2091, 0x8000, 0x2009, 0x007f, 0x080c, 0x659e, 0x11b8, 0xb813,
+	0x00ff, 0xb817, 0xfffd, 0xb8cf, 0x0004, 0x080c, 0xae0b, 0x0170,
+	0x2b00, 0x6012, 0x6316, 0x6023, 0x0001, 0x620a, 0x080c, 0xcfaa,
+	0x2009, 0x0022, 0x080c, 0xaedc, 0x9085, 0x0001, 0x012e, 0x00de,
+	0x00ce, 0x0005, 0x00e6, 0x00c6, 0x0066, 0x0036, 0x0026, 0x00b6,
+	0x21f0, 0x080c, 0x9296, 0x080c, 0x921b, 0x080c, 0xaca4, 0x080c,
+	0xbd77, 0x3e08, 0x2130, 0x81ff, 0x0120, 0x20a9, 0x007e, 0x900e,
+	0x0018, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x65ff, 0x1140,
+	0x9686, 0x0002, 0x1118, 0xb800, 0xd0bc, 0x1110, 0x080c, 0x6034,
+	0x001e, 0x8108, 0x1f04, 0x31a4, 0x9686, 0x0001, 0x190c, 0x32e8,
+	0x00be, 0x002e, 0x003e, 0x006e, 0x00ce, 0x00ee, 0x0005, 0x00e6,
+	0x00c6, 0x0046, 0x0036, 0x0026, 0x0016, 0x00b6, 0x6210, 0x2258,
+	0xbaa0, 0x0026, 0x2019, 0x0029, 0x080c, 0x928b, 0x0076, 0x2039,
+	0x0000, 0x080c, 0x9168, 0x2c08, 0x080c, 0xe2eb, 0x007e, 0x001e,
+	0xba10, 0xbb14, 0xbcc0, 0x080c, 0x6034, 0xba12, 0xbb16, 0xbcc2,
+	0x00be, 0x001e, 0x002e, 0x003e, 0x004e, 0x00ce, 0x00ee, 0x0005,
+	0x00e6, 0x0006, 0x00b6, 0x6010, 0x2058, 0xb8a0, 0x00be, 0x9086,
+	0x0080, 0x0150, 0x2071, 0x1800, 0x70a8, 0x9005, 0x0110, 0x8001,
+	0x70aa, 0x000e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x70e4, 0x9005,
+	0x0dc0, 0x8001, 0x70e6, 0x0ca8, 0xb800, 0xc08c, 0xb802, 0x0005,
+	0x00f6, 0x00e6, 0x00c6, 0x00b6, 0x0046, 0x0036, 0x0026, 0x0016,
+	0x0156, 0x2178, 0x81ff, 0x1118, 0x20a9, 0x0001, 0x0078, 0x080c,
+	0x56cf, 0xd0c4, 0x0140, 0xd0a4, 0x0130, 0x9006, 0x2020, 0x2009,
+	0x002d, 0x080c, 0xe5ae, 0x20a9, 0x0800, 0x9016, 0x0026, 0x928e,
+	0x007e, 0x0904, 0x326f, 0x928e, 0x007f, 0x0904, 0x326f, 0x928e,
+	0x0080, 0x05e8, 0x9288, 0x1000, 0x210c, 0x81ff, 0x05c0, 0x8fff,
+	0x1148, 0x2001, 0x198e, 0x0006, 0x2003, 0x0001, 0x04f1, 0x000e,
+	0x2003, 0x0000, 0x00b6, 0x00c6, 0x2158, 0x2001, 0x0001, 0x080c,
+	0x693c, 0x00ce, 0x00be, 0x2019, 0x0029, 0x080c, 0x928b, 0x0076,
+	0x2039, 0x0000, 0x080c, 0x9168, 0x00b6, 0x00c6, 0x0026, 0x2158,
+	0xba04, 0x9294, 0x00ff, 0x9286, 0x0006, 0x1118, 0xb807, 0x0404,
+	0x0028, 0x2001, 0x0004, 0x8007, 0x9215, 0xba06, 0x002e, 0x00ce,
+	0x00be, 0x0016, 0x2c08, 0x080c, 0xe2eb, 0x001e, 0x007e, 0x002e,
+	0x8210, 0x1f04, 0x3226, 0x015e, 0x001e, 0x002e, 0x003e, 0x004e,
+	0x00be, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0046, 0x0026, 0x0016,
+	0x080c, 0x56cf, 0xd0c4, 0x0140, 0xd0a4, 0x0130, 0x9006, 0x2220,
+	0x2009, 0x0029, 0x080c, 0xe5ae, 0x001e, 0x002e, 0x004e, 0x0005,
+	0x0016, 0x0026, 0x0036, 0x00c6, 0x7294, 0x82ff, 0x01e8, 0x080c,
+	0x696a, 0x11d0, 0x2100, 0x080c, 0x2871, 0x81ff, 0x01b8, 0x2019,
+	0x0001, 0x8314, 0x92e0, 0x1c80, 0x2c04, 0xd384, 0x0120, 0x9084,
+	0xff00, 0x8007, 0x0010, 0x9084, 0x00ff, 0x9116, 0x0138, 0x9096,
+	0x00ff, 0x0110, 0x8318, 0x0c68, 0x9085, 0x0001, 0x00ce, 0x003e,
+	0x002e, 0x001e, 0x0005, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000,
+	0x0036, 0x2019, 0x0029, 0x00a9, 0x003e, 0x9180, 0x1000, 0x2004,
+	0x9065, 0x0158, 0x0016, 0x00c6, 0x2061, 0x1ab0, 0x001e, 0x6112,
+	0x080c, 0x31bf, 0x001e, 0x080c, 0x65c3, 0x012e, 0x00ce, 0x001e,
+	0x0005, 0x0016, 0x0026, 0x2110, 0x080c, 0xa808, 0x080c, 0xe917,
+	0x002e, 0x001e, 0x0005, 0x2001, 0x1837, 0x2004, 0xd0cc, 0x0005,
+	0x00c6, 0x00b6, 0x080c, 0x73bc, 0x1118, 0x20a9, 0x0800, 0x0010,
+	0x20a9, 0x0782, 0x080c, 0x73bc, 0x1110, 0x900e, 0x0010, 0x2009,
+	0x007e, 0x9180, 0x1000, 0x2004, 0x905d, 0x0130, 0x86ff, 0x0110,
+	0xb800, 0xd0bc, 0x090c, 0x65c3, 0x8108, 0x1f04, 0x32f9, 0x2061,
+	0x1800, 0x607f, 0x0000, 0x6080, 0x9084, 0x00ff, 0x6082, 0x60b3,
+	0x0000, 0x00be, 0x00ce, 0x0005, 0x2001, 0x1869, 0x2004, 0xd0bc,
+	0x0005, 0x2011, 0x1848, 0x2214, 0xd2ec, 0x0005, 0x0026, 0x2011,
+	0x1867, 0x2214, 0xd2dc, 0x002e, 0x0005, 0x7eef, 0x7de8, 0x7ce4,
+	0x80e2, 0x7be1, 0x80e0, 0x80dc, 0x80da, 0x7ad9, 0x80d6, 0x80d5,
+	0x80d4, 0x80d3, 0x80d2, 0x80d1, 0x79ce, 0x78cd, 0x80cc, 0x80cb,
+	0x80ca, 0x80c9, 0x80c7, 0x80c6, 0x77c5, 0x76c3, 0x80bc, 0x80ba,
+	0x75b9, 0x80b6, 0x74b5, 0x73b4, 0x72b3, 0x80b2, 0x80b1, 0x80ae,
+	0x71ad, 0x80ac, 0x70ab, 0x6faa, 0x6ea9, 0x80a7, 0x6da6, 0x6ca5,
+	0x6ba3, 0x6a9f, 0x699e, 0x689d, 0x809b, 0x8098, 0x6797, 0x6690,
+	0x658f, 0x6488, 0x6384, 0x6282, 0x8081, 0x8080, 0x617c, 0x607a,
+	0x8079, 0x5f76, 0x8075, 0x8074, 0x8073, 0x8072, 0x8071, 0x806e,
+	0x5e6d, 0x806c, 0x5d6b, 0x5c6a, 0x5b69, 0x8067, 0x5a66, 0x5965,
+	0x5863, 0x575c, 0x565a, 0x5559, 0x8056, 0x8055, 0x5454, 0x5353,
+	0x5252, 0x5151, 0x504e, 0x4f4d, 0x804c, 0x804b, 0x4e4a, 0x4d49,
+	0x8047, 0x4c46, 0x8045, 0x8043, 0x803c, 0x803a, 0x8039, 0x8036,
+	0x4b35, 0x8034, 0x4a33, 0x4932, 0x4831, 0x802e, 0x472d, 0x462c,
+	0x452b, 0x442a, 0x4329, 0x4227, 0x8026, 0x8025, 0x4123, 0x401f,
+	0x3f1e, 0x3e1d, 0x3d1b, 0x3c18, 0x8017, 0x8010, 0x3b0f, 0x3a08,
+	0x8004, 0x3902, 0x8001, 0x8000, 0x8000, 0x3800, 0x3700, 0x3600,
+	0x8000, 0x3500, 0x8000, 0x8000, 0x8000, 0x3400, 0x8000, 0x8000,
+	0x8000, 0x8000, 0x8000, 0x8000, 0x3300, 0x3200, 0x8000, 0x8000,
+	0x8000, 0x8000, 0x8000, 0x8000, 0x3100, 0x3000, 0x8000, 0x8000,
+	0x2f00, 0x8000, 0x2e00, 0x2d00, 0x2c00, 0x8000, 0x8000, 0x8000,
+	0x2b00, 0x8000, 0x2a00, 0x2900, 0x2800, 0x8000, 0x2700, 0x2600,
+	0x2500, 0x2400, 0x2300, 0x2200, 0x8000, 0x8000, 0x2100, 0x2000,
+	0x1f00, 0x1e00, 0x1d00, 0x1c00, 0x8000, 0x8000, 0x1b00, 0x1a00,
+	0x8000, 0x1900, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
+	0x1800, 0x8000, 0x1700, 0x1600, 0x1500, 0x8000, 0x1400, 0x1300,
+	0x1200, 0x1100, 0x1000, 0x0f00, 0x8000, 0x8000, 0x0e00, 0x0d00,
+	0x0c00, 0x0b00, 0x0a00, 0x0900, 0x8000, 0x8000, 0x0800, 0x0700,
+	0x8000, 0x0600, 0x8000, 0x8000, 0x8000, 0x0500, 0x0400, 0x0300,
+	0x8000, 0x0200, 0x8000, 0x8000, 0x8000, 0x0100, 0x8000, 0x8000,
+	0x8000, 0x8000, 0x8000, 0x8000, 0x0000, 0x8000, 0x8000, 0x8000,
 	0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
-	0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x2071, 0x189e,
-	0x7003, 0x0002, 0x9006, 0x7016, 0x701a, 0x704a, 0x704e, 0x700e,
-	0x7042, 0x7046, 0x703b, 0x18ba, 0x703f, 0x18ba, 0x7007, 0x0001,
-	0x080c, 0x1018, 0x090c, 0x0dd5, 0x2900, 0x706a, 0xa867, 0x0002,
-	0xa8ab, 0xdcb0, 0x080c, 0x1018, 0x090c, 0x0dd5, 0x2900, 0x706e,
-	0xa867, 0x0002, 0xa8ab, 0xdcb0, 0x0005, 0x2071, 0x189e, 0x7004,
-	0x0002, 0x344d, 0x344e, 0x3461, 0x3475, 0x0005, 0x1004, 0x345e,
-	0x0e04, 0x345e, 0x2079, 0x0000, 0x0126, 0x2091, 0x8000, 0x700c,
-	0x9005, 0x1128, 0x700f, 0x0001, 0x012e, 0x0468, 0x0005, 0x012e,
-	0x0ce8, 0x2079, 0x0000, 0x2061, 0x18b8, 0x2c4c, 0xa86c, 0x908e,
-	0x0100, 0x0128, 0x9086, 0x0200, 0x0904, 0x3549, 0x0005, 0x7018,
-	0x2048, 0x2061, 0x1800, 0x701c, 0x0807, 0x7014, 0x2048, 0xa864,
-	0x9094, 0x00ff, 0x9296, 0x0029, 0x1120, 0xaa78, 0xd2fc, 0x0128,
-	0x0005, 0x9086, 0x0103, 0x0108, 0x0005, 0x2079, 0x0000, 0x2061,
-	0x1800, 0x701c, 0x0807, 0x2061, 0x1800, 0x7880, 0x908a, 0x0040,
-	0x1210, 0x61d0, 0x0042, 0x2100, 0x908a, 0x003f, 0x1a04, 0x3546,
-	0x61d0, 0x0804, 0x34db, 0x351d, 0x3555, 0x355f, 0x3563, 0x356d,
-	0x3573, 0x3577, 0x3587, 0x358a, 0x3594, 0x3599, 0x359e, 0x35a9,
-	0x35b4, 0x35c3, 0x35d2, 0x35e0, 0x35f7, 0x3612, 0x3546, 0x36bb,
-	0x36f9, 0x379f, 0x37b0, 0x37d3, 0x3546, 0x3546, 0x3546, 0x380b,
-	0x3827, 0x3830, 0x385f, 0x3865, 0x3546, 0x38ab, 0x3546, 0x3546,
-	0x3546, 0x3546, 0x3546, 0x38b6, 0x38bf, 0x38c7, 0x38c9, 0x3546,
-	0x3546, 0x3546, 0x3546, 0x3546, 0x3546, 0x38f5, 0x3546, 0x3546,
-	0x3546, 0x3546, 0x3546, 0x3912, 0x3973, 0x3546, 0x3546, 0x3546,
-	0x3546, 0x3546, 0x3546, 0x0002, 0x399d, 0x39a0, 0x39ff, 0x3a18,
-	0x3a48, 0x3ce6, 0x3546, 0x52a9, 0x3546, 0x3546, 0x3546, 0x3546,
-	0x3546, 0x3546, 0x3546, 0x3546, 0x3594, 0x3599, 0x4207, 0x56f4,
-	0x4225, 0x5338, 0x5389, 0x548c, 0x3546, 0x54ee, 0x552a, 0x555b,
-	0x565f, 0x5588, 0x55df, 0x3546, 0x4229, 0x43f2, 0x4408, 0x442d,
-	0x4492, 0x4506, 0x4526, 0x459d, 0x45f9, 0x4655, 0x4658, 0x467d,
-	0x471a, 0x4780, 0x4788, 0x48ba, 0x4a2f, 0x4a63, 0x4cc7, 0x3546,
-	0x4ce5, 0x4d91, 0x4e73, 0x4ecd, 0x3546, 0x4f82, 0x3546, 0x4fe8,
-	0x5003, 0x4788, 0x5249, 0x714c, 0x0000, 0x2021, 0x4000, 0x080c,
-	0x4ae1, 0x0126, 0x2091, 0x8000, 0x0e04, 0x3527, 0x0010, 0x012e,
-	0x0cc0, 0x7c36, 0x9486, 0x4000, 0x0118, 0x7833, 0x0011, 0x0010,
-	0x7833, 0x0010, 0x7c82, 0x7986, 0x7a8a, 0x7b8e, 0x2091, 0x4080,
-	0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119b, 0x7007, 0x0001,
-	0x2091, 0x5000, 0x700f, 0x0000, 0x012e, 0x0005, 0x2021, 0x4001,
-	0x08b0, 0x2021, 0x4002, 0x0898, 0x2021, 0x4003, 0x0880, 0x2021,
-	0x4005, 0x0868, 0x2021, 0x4006, 0x0850, 0x2039, 0x0001, 0x902e,
-	0x2520, 0x7b88, 0x7a8c, 0x7884, 0x7990, 0x0804, 0x4aee, 0x7883,
-	0x0004, 0x7884, 0x0807, 0x2039, 0x0001, 0x902e, 0x2520, 0x7b88,
-	0x7a8c, 0x7884, 0x7990, 0x0804, 0x4af1, 0x7984, 0x7888, 0x2114,
-	0x200a, 0x0804, 0x351d, 0x7984, 0x2114, 0x0804, 0x351d, 0x20e1,
-	0x0000, 0x2099, 0x0021, 0x20e9, 0x0000, 0x20a1, 0x0021, 0x20a9,
-	0x001f, 0x4003, 0x7984, 0x7a88, 0x7b8c, 0x0804, 0x351d, 0x7884,
-	0x2060, 0x04d8, 0x2009, 0x0003, 0x2011, 0x0002, 0x2019, 0x001a,
-	0x789b, 0x0137, 0x0804, 0x351d, 0x2039, 0x0001, 0x7d98, 0x7c9c,
-	0x0800, 0x2039, 0x0001, 0x7d98, 0x7c9c, 0x0848, 0x79a0, 0x9182,
-	0x0040, 0x0210, 0x0804, 0x3552, 0x2138, 0x7d98, 0x7c9c, 0x0804,
-	0x3559, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x3552, 0x2138,
-	0x7d98, 0x7c9c, 0x0804, 0x3567, 0x79a0, 0x9182, 0x0040, 0x0210,
-	0x0804, 0x3552, 0x21e8, 0x7984, 0x7888, 0x20a9, 0x0001, 0x21a0,
-	0x4004, 0x0804, 0x351d, 0x2061, 0x0800, 0xe10c, 0x9006, 0x2c15,
-	0x9200, 0x8c60, 0x8109, 0x1dd8, 0x2010, 0x9005, 0x0904, 0x351d,
-	0x0804, 0x354c, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x3552,
-	0x21e0, 0x20a9, 0x0001, 0x7984, 0x2198, 0x4012, 0x0804, 0x351d,
-	0x2069, 0x1847, 0x7884, 0x7990, 0x911a, 0x1a04, 0x3552, 0x8019,
-	0x0904, 0x3552, 0x684a, 0x6942, 0x788c, 0x6852, 0x7888, 0x6856,
-	0x9006, 0x685a, 0x685e, 0x080c, 0x76c9, 0x0804, 0x351d, 0x2069,
-	0x1847, 0x7884, 0x7994, 0x911a, 0x1a04, 0x3552, 0x8019, 0x0904,
-	0x3552, 0x684e, 0x6946, 0x788c, 0x6862, 0x7888, 0x6866, 0x9006,
-	0x686a, 0x686e, 0x0126, 0x2091, 0x8000, 0x080c, 0x69d4, 0x012e,
-	0x0804, 0x351d, 0x902e, 0x2520, 0x81ff, 0x0120, 0x2009, 0x0001,
-	0x0804, 0x354f, 0x7984, 0x7b88, 0x7a8c, 0x20a9, 0x0005, 0x20e9,
-	0x0001, 0x20a1, 0x18a6, 0x4101, 0x080c, 0x4aa5, 0x1120, 0x2009,
-	0x0002, 0x0804, 0x354f, 0x2009, 0x0020, 0xa85c, 0x9080, 0x0019,
-	0xaf60, 0x080c, 0x4aee, 0x701f, 0x3636, 0x0005, 0xa864, 0x2008,
-	0x9084, 0x00ff, 0x9096, 0x0011, 0x0168, 0x9096, 0x0019, 0x0150,
-	0x9096, 0x0015, 0x0138, 0x9096, 0x0048, 0x0120, 0x9096, 0x0029,
-	0x1904, 0x354f, 0x810f, 0x918c, 0x00ff, 0x0904, 0x354f, 0x7112,
-	0x7010, 0x8001, 0x0560, 0x7012, 0x080c, 0x4aa5, 0x1120, 0x2009,
-	0x0002, 0x0804, 0x354f, 0x2009, 0x0020, 0x7068, 0x2040, 0xa28c,
-	0xa390, 0xa494, 0xa598, 0x9290, 0x0040, 0x9399, 0x0000, 0x94a1,
-	0x0000, 0x95a9, 0x0000, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c,
-	0x4aee, 0x701f, 0x3674, 0x0005, 0xa864, 0x9084, 0x00ff, 0x9096,
-	0x0002, 0x0120, 0x9096, 0x000a, 0x1904, 0x354f, 0x0888, 0x7014,
-	0x2048, 0xa868, 0xc0fd, 0xa86a, 0xa864, 0x9084, 0x00ff, 0x9096,
-	0x0029, 0x1160, 0xc2fd, 0xaa7a, 0x080c, 0x618c, 0x0150, 0x0126,
-	0x2091, 0x8000, 0xa87a, 0xa982, 0x012e, 0x0050, 0x080c, 0x64b5,
-	0x1128, 0x7007, 0x0003, 0x701f, 0x36a0, 0x0005, 0x080c, 0x6eb8,
-	0x0126, 0x2091, 0x8000, 0x20a9, 0x0005, 0x20e1, 0x0001, 0x2099,
-	0x18a6, 0x400a, 0x2100, 0x9210, 0x9399, 0x0000, 0x94a1, 0x0000,
-	0x95a9, 0x0000, 0xa85c, 0x9080, 0x0019, 0x2009, 0x0020, 0x012e,
-	0xaf60, 0x0804, 0x4af1, 0x2091, 0x8000, 0x7837, 0x4000, 0x7833,
-	0x0010, 0x7883, 0x4000, 0x7887, 0x4953, 0x788b, 0x5020, 0x788f,
-	0x2020, 0x2009, 0x017f, 0x2104, 0x7892, 0x3f00, 0x7896, 0x2061,
-	0x0100, 0x6200, 0x2061, 0x0200, 0x603c, 0x8007, 0x9205, 0x789a,
-	0x2009, 0x04fd, 0x2104, 0x789e, 0x2091, 0x5000, 0x2091, 0x4080,
-	0x2001, 0x0089, 0x2004, 0xd084, 0x0180, 0x2001, 0x1a19, 0x2004,
-	0x9005, 0x0128, 0x2001, 0x008b, 0x2004, 0xd0fc, 0x0dd8, 0x2001,
-	0x008a, 0x2003, 0x0002, 0x2003, 0x1001, 0x2071, 0x0080, 0x0804,
-	0x0427, 0x81ff, 0x1904, 0x354f, 0x7984, 0x080c, 0x6600, 0x1904,
-	0x3552, 0x7e98, 0x9684, 0x3fff, 0x9082, 0x4000, 0x1a04, 0x3552,
-	0x7c88, 0x7d8c, 0x080c, 0x6763, 0x080c, 0x6732, 0x0000, 0x1518,
-	0x2061, 0x1cd0, 0x0126, 0x2091, 0x8000, 0x6000, 0x9086, 0x0000,
-	0x0148, 0x6014, 0x904d, 0x0130, 0xa86c, 0x9406, 0x1118, 0xa870,
-	0x9506, 0x0150, 0x012e, 0x9ce0, 0x0018, 0x2001, 0x181a, 0x2004,
-	0x9c02, 0x1a04, 0x354f, 0x0c30, 0x080c, 0xc74e, 0x012e, 0x0904,
-	0x354f, 0x0804, 0x351d, 0x900e, 0x2001, 0x0005, 0x080c, 0x6eb8,
-	0x0126, 0x2091, 0x8000, 0x080c, 0xce10, 0x080c, 0x6c79, 0x012e,
-	0x0804, 0x351d, 0x00a6, 0x2950, 0xb198, 0x080c, 0x6600, 0x1904,
-	0x378c, 0xb6a4, 0x9684, 0x3fff, 0x9082, 0x4000, 0x16e8, 0xb49c,
-	0xb5a0, 0x080c, 0x6763, 0x080c, 0x6732, 0x1520, 0x2061, 0x1cd0,
-	0x0126, 0x2091, 0x8000, 0x6000, 0x9086, 0x0000, 0x0148, 0x6014,
-	0x904d, 0x0130, 0xa86c, 0x9406, 0x1118, 0xa870, 0x9506, 0x0158,
-	0x012e, 0x9ce0, 0x0018, 0x2001, 0x181a, 0x2004, 0x9c02, 0x2009,
-	0x000d, 0x12b0, 0x0c28, 0x080c, 0xc74e, 0x012e, 0x2009, 0x0003,
-	0x0178, 0x00e0, 0x900e, 0x2001, 0x0005, 0x080c, 0x6eb8, 0x0126,
-	0x2091, 0x8000, 0x080c, 0xce10, 0x080c, 0x6c6d, 0x012e, 0x0070,
-	0xb097, 0x4005, 0xb19a, 0x0010, 0xb097, 0x4006, 0x900e, 0x9085,
-	0x0001, 0x2001, 0x0030, 0x2a48, 0x00ae, 0x0005, 0xb097, 0x4000,
-	0x9006, 0x918d, 0x0001, 0x2008, 0x2a48, 0x00ae, 0x0005, 0x81ff,
-	0x1904, 0x354f, 0x080c, 0x4abc, 0x0904, 0x3552, 0x080c, 0x66c7,
-	0x0904, 0x354f, 0x080c, 0x6769, 0x0904, 0x354f, 0x0804, 0x451d,
-	0x81ff, 0x1904, 0x354f, 0x080c, 0x4ad8, 0x0904, 0x3552, 0x080c,
-	0x67f7, 0x0904, 0x354f, 0x2019, 0x0005, 0x79a8, 0x080c, 0x6784,
-	0x0904, 0x354f, 0x7888, 0x908a, 0x1000, 0x1a04, 0x3552, 0x8003,
-	0x800b, 0x810b, 0x9108, 0x080c, 0x84d8, 0x7984, 0xd184, 0x1904,
-	0x351d, 0x0804, 0x451d, 0x0126, 0x2091, 0x8000, 0x81ff, 0x0118,
-	0x2009, 0x0001, 0x0450, 0x2029, 0x07ff, 0x645c, 0x2400, 0x9506,
-	0x01f8, 0x2508, 0x080c, 0x6600, 0x11d8, 0x080c, 0x67f7, 0x1128,
-	0x2009, 0x0002, 0x62c0, 0x2518, 0x00c0, 0x2019, 0x0004, 0x900e,
-	0x080c, 0x6784, 0x1118, 0x2009, 0x0006, 0x0078, 0x7884, 0x908a,
-	0x1000, 0x1270, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, 0x84d8,
-	0x8529, 0x1ae0, 0x012e, 0x0804, 0x351d, 0x012e, 0x0804, 0x354f,
-	0x012e, 0x0804, 0x3552, 0x080c, 0x4abc, 0x0904, 0x3552, 0x080c,
-	0x66c7, 0x0904, 0x354f, 0xbaa0, 0x2019, 0x0005, 0x00c6, 0x9066,
-	0x080c, 0x9262, 0x0076, 0x903e, 0x080c, 0x913f, 0x900e, 0x080c,
-	0xe2ca, 0x007e, 0x00ce, 0x080c, 0x6763, 0x0804, 0x351d, 0x080c,
-	0x4abc, 0x0904, 0x3552, 0x080c, 0x6763, 0x2208, 0x0804, 0x351d,
-	0x0156, 0x00d6, 0x00e6, 0x2069, 0x1910, 0x6810, 0x6914, 0x910a,
-	0x1208, 0x900e, 0x6816, 0x9016, 0x901e, 0x20a9, 0x007e, 0x2069,
-	0x1000, 0x2d04, 0x905d, 0x0118, 0xb84c, 0x0059, 0x9210, 0x8d68,
-	0x1f04, 0x3841, 0x2300, 0x9218, 0x00ee, 0x00de, 0x015e, 0x0804,
-	0x351d, 0x00f6, 0x0016, 0x907d, 0x0138, 0x9006, 0x8000, 0x2f0c,
-	0x81ff, 0x0110, 0x2178, 0x0cd0, 0x001e, 0x00fe, 0x0005, 0x2069,
-	0x1910, 0x6910, 0x62bc, 0x0804, 0x351d, 0x81ff, 0x0120, 0x2009,
-	0x0001, 0x0804, 0x354f, 0x0126, 0x2091, 0x8000, 0x080c, 0x56e4,
-	0x0128, 0x2009, 0x0007, 0x012e, 0x0804, 0x354f, 0x012e, 0x615c,
-	0x9190, 0x331e, 0x2215, 0x9294, 0x00ff, 0x637c, 0x83ff, 0x0108,
-	0x6280, 0x67dc, 0x97c4, 0x000a, 0x98c6, 0x000a, 0x1118, 0x2031,
-	0x0001, 0x00e8, 0x97c4, 0x0022, 0x98c6, 0x0022, 0x1118, 0x2031,
-	0x0003, 0x00a8, 0x97c4, 0x0012, 0x98c6, 0x0012, 0x1118, 0x2031,
-	0x0002, 0x0068, 0x080c, 0x73b0, 0x1118, 0x2031, 0x0004, 0x0038,
-	0xd79c, 0x0120, 0x2009, 0x0005, 0x0804, 0x354f, 0x9036, 0x7e9a,
-	0x7f9e, 0x0804, 0x351d, 0x614c, 0x6250, 0x2019, 0x1986, 0x231c,
-	0x2001, 0x1987, 0x2004, 0x789a, 0x0804, 0x351d, 0x0126, 0x2091,
-	0x8000, 0x6138, 0x623c, 0x6340, 0x012e, 0x0804, 0x351d, 0x080c,
-	0x4ad8, 0x0904, 0x3552, 0xba44, 0xbb38, 0x0804, 0x351d, 0x080c,
-	0x0dd5, 0x080c, 0x4ad8, 0x2110, 0x0904, 0x3552, 0xb804, 0x908c,
-	0x00ff, 0x918e, 0x0006, 0x0140, 0x9084, 0xff00, 0x9086, 0x0600,
-	0x2009, 0x0009, 0x1904, 0x354f, 0x0126, 0x2091, 0x8000, 0x2019,
-	0x0005, 0x00c6, 0x9066, 0x080c, 0xa7ee, 0x080c, 0x9262, 0x0076,
-	0x903e, 0x080c, 0x913f, 0x900e, 0x080c, 0xe2ca, 0x007e, 0x00ce,
-	0xb807, 0x0407, 0x012e, 0x0804, 0x351d, 0x614c, 0x6250, 0x7884,
-	0x604e, 0x7b88, 0x6352, 0x2069, 0x1847, 0x831f, 0x9305, 0x6816,
-	0x788c, 0x2069, 0x1986, 0x2d1c, 0x206a, 0x7e98, 0x9682, 0x0014,
-	0x1210, 0x2031, 0x07d0, 0x2069, 0x1987, 0x2d04, 0x266a, 0x789a,
-	0x0804, 0x351d, 0x0126, 0x2091, 0x8000, 0x7884, 0x603a, 0xd0c4,
-	0x01a8, 0x00d6, 0x78a8, 0x2009, 0x199d, 0x200a, 0x78ac, 0x2011,
-	0x199e, 0x2012, 0x2069, 0x0100, 0x6838, 0x9086, 0x0007, 0x1118,
-	0x2214, 0x6a5a, 0x0010, 0x210c, 0x695a, 0x00de, 0x7884, 0xd0b4,
-	0x0120, 0x3b00, 0x9084, 0xff3f, 0x20d8, 0x7888, 0x603e, 0x2011,
-	0x0114, 0x220c, 0x7888, 0xd08c, 0x0118, 0x918d, 0x0080, 0x0010,
-	0x918c, 0xff7f, 0x2112, 0x788c, 0x6042, 0x9084, 0x0020, 0x0130,
-	0x78b4, 0x6046, 0x9084, 0x0001, 0x090c, 0x4207, 0x6040, 0xd0cc,
-	0x0120, 0x78b0, 0x2011, 0x0114, 0x2012, 0x012e, 0x0804, 0x351d,
-	0x00f6, 0x2079, 0x1800, 0x7a38, 0xa898, 0x9084, 0xfebf, 0x9215,
-	0xa89c, 0x9084, 0xfebf, 0x8002, 0x9214, 0x7838, 0x9084, 0x0140,
-	0x9215, 0x7a3a, 0xa897, 0x4000, 0x900e, 0x9085, 0x0001, 0x2001,
-	0x0000, 0x00fe, 0x0005, 0x7898, 0x9005, 0x01a8, 0x7888, 0x9025,
-	0x0904, 0x3552, 0x788c, 0x902d, 0x0904, 0x3552, 0x900e, 0x080c,
-	0x6600, 0x1120, 0xba44, 0xbb38, 0xbc46, 0xbd3a, 0x9186, 0x07ff,
-	0x0190, 0x8108, 0x0ca0, 0x080c, 0x4ad8, 0x0904, 0x3552, 0x7888,
-	0x900d, 0x0904, 0x3552, 0x788c, 0x9005, 0x0904, 0x3552, 0xba44,
-	0xb946, 0xbb38, 0xb83a, 0x0804, 0x351d, 0x2011, 0xbc09, 0x0010,
-	0x2011, 0xbc05, 0x080c, 0x56e4, 0x1904, 0x354f, 0x00c6, 0x2061,
-	0x0100, 0x7984, 0x9186, 0x00ff, 0x1130, 0x2001, 0x1818, 0x2004,
-	0x9085, 0xff00, 0x0088, 0x9182, 0x007f, 0x16e0, 0x9188, 0x331e,
-	0x210d, 0x918c, 0x00ff, 0x2001, 0x1818, 0x2004, 0x0026, 0x9116,
-	0x002e, 0x0580, 0x810f, 0x9105, 0x0126, 0x2091, 0x8000, 0x0006,
-	0x080c, 0xadf1, 0x000e, 0x0510, 0x602e, 0x620a, 0x7984, 0x00b6,
-	0x080c, 0x65a5, 0x2b08, 0x00be, 0x1500, 0x6112, 0x6023, 0x0001,
-	0x080c, 0x4aa5, 0x01d0, 0x9006, 0xa866, 0x7007, 0x0003, 0xa832,
-	0xa868, 0xc0fd, 0xa86a, 0x701f, 0x39f8, 0x2900, 0x6016, 0x2009,
-	0x0032, 0x080c, 0xaec2, 0x012e, 0x00ce, 0x0005, 0x012e, 0x00ce,
-	0x0804, 0x354f, 0x00ce, 0x0804, 0x3552, 0x080c, 0xae47, 0x0cb0,
-	0xa830, 0x9086, 0x0100, 0x0904, 0x354f, 0x0804, 0x351d, 0x2061,
-	0x1a71, 0x0126, 0x2091, 0x8000, 0x6000, 0xd084, 0x0170, 0x6104,
-	0x6208, 0x2061, 0x1800, 0x6354, 0x6074, 0x789a, 0x60c0, 0x789e,
-	0x60bc, 0x78aa, 0x012e, 0x0804, 0x351d, 0x900e, 0x2110, 0x0c88,
-	0x81ff, 0x1904, 0x354f, 0x080c, 0x73b0, 0x0904, 0x354f, 0x0126,
-	0x2091, 0x8000, 0x6254, 0x6074, 0x9202, 0x0248, 0x9085, 0x0001,
-	0x080c, 0x28a7, 0x080c, 0x58fe, 0x012e, 0x0804, 0x351d, 0x012e,
-	0x0804, 0x3552, 0x0006, 0x0016, 0x00c6, 0x00e6, 0x2001, 0x19a9,
-	0x2070, 0x2061, 0x1847, 0x6008, 0x2072, 0x900e, 0x2011, 0x1400,
-	0x080c, 0x8f3f, 0x7206, 0x00ee, 0x00ce, 0x001e, 0x000e, 0x0005,
-	0x0126, 0x2091, 0x8000, 0x81ff, 0x0128, 0x012e, 0x2021, 0x400b,
-	0x0804, 0x351f, 0x7884, 0xd0fc, 0x0148, 0x2001, 0x002a, 0x2004,
-	0x9082, 0x00e1, 0x0288, 0x012e, 0x0804, 0x3552, 0x2001, 0x002a,
-	0x2004, 0x2069, 0x1847, 0x6908, 0x9102, 0x1230, 0x012e, 0x0804,
-	0x3552, 0x012e, 0x0804, 0x354f, 0x080c, 0xadb1, 0x0dd0, 0x7884,
-	0xd0fc, 0x0904, 0x3ac3, 0x00c6, 0x080c, 0x4aa5, 0x00ce, 0x0d88,
-	0xa867, 0x0000, 0x7884, 0xa80a, 0x7898, 0xa80e, 0x789c, 0xa812,
-	0x2001, 0x002e, 0x2004, 0xa81a, 0x2001, 0x002f, 0x2004, 0xa81e,
-	0x2001, 0x0030, 0x2004, 0xa822, 0x2001, 0x0031, 0x2004, 0xa826,
-	0x2001, 0x0034, 0x2004, 0xa82a, 0x2001, 0x0035, 0x2004, 0xa82e,
-	0x2001, 0x002a, 0x2004, 0x9080, 0x0003, 0x9084, 0x00fc, 0x8004,
-	0xa816, 0x080c, 0x3c49, 0x0928, 0x7014, 0x2048, 0xad2c, 0xac28,
-	0xab1c, 0xaa18, 0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000,
-	0x2021, 0x0000, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084,
-	0xffc0, 0x9080, 0x001b, 0x080c, 0x4aee, 0x701f, 0x3b86, 0x7023,
-	0x0001, 0x012e, 0x0005, 0x0046, 0x0086, 0x0096, 0x00a6, 0x00b6,
-	0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x080c, 0x3a32, 0x2001, 0x199f,
-	0x2003, 0x0000, 0x2021, 0x000a, 0x2061, 0x0100, 0x6104, 0x0016,
-	0x60bb, 0x0000, 0x60bf, 0x32e1, 0x60bf, 0x0012, 0x080c, 0x3cb8,
-	0x080c, 0x3c77, 0x00f6, 0x00e6, 0x0086, 0x2940, 0x2071, 0x1a66,
-	0x2079, 0x0090, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0140,
-	0x2001, 0x0035, 0x2004, 0x780e, 0x2001, 0x0034, 0x2004, 0x780a,
-	0x00de, 0x2011, 0x0001, 0x080c, 0x404b, 0x008e, 0x00ee, 0x00fe,
-	0x080c, 0x3f78, 0x080c, 0x3e7d, 0x05b8, 0x2001, 0x020b, 0x2004,
-	0x9084, 0x0140, 0x1db8, 0x080c, 0x40bf, 0x00f6, 0x2079, 0x0300,
-	0x78bc, 0x00fe, 0x908c, 0x0070, 0x1560, 0x2071, 0x0200, 0x7037,
-	0x0000, 0x7050, 0x9084, 0xff00, 0x9086, 0x3200, 0x1510, 0x7037,
-	0x0001, 0x7050, 0x9084, 0xff00, 0x9086, 0xe100, 0x11d0, 0x7037,
-	0x0000, 0x7054, 0x7037, 0x0000, 0x715c, 0x9106, 0x1190, 0x2001,
-	0x1820, 0x2004, 0x9106, 0x1168, 0x00c6, 0x2061, 0x0100, 0x6024,
-	0x9084, 0x1e00, 0x00ce, 0x0138, 0x080c, 0x3e87, 0x080c, 0x3c72,
-	0x0058, 0x080c, 0x3c72, 0x080c, 0x3fe3, 0x080c, 0x3f6e, 0x2001,
-	0x020b, 0x2004, 0xd0e4, 0x0dd8, 0x2001, 0x032a, 0x2003, 0x0004,
-	0x2061, 0x0100, 0x6027, 0x0002, 0x001e, 0x6106, 0x2011, 0x020d,
-	0x2013, 0x0020, 0x60bb, 0x0000, 0x60bf, 0x0108, 0x60bf, 0x0012,
-	0x2001, 0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, 0x080c, 0x12ed,
-	0x2009, 0x0028, 0x080c, 0x23d2, 0x2001, 0x0227, 0x200c, 0x2102,
-	0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e,
-	0x004e, 0x2001, 0x199f, 0x2004, 0x9005, 0x1118, 0x012e, 0x0804,
-	0x351d, 0x012e, 0x2021, 0x400c, 0x0804, 0x351f, 0x0016, 0x0026,
-	0x0036, 0x0046, 0x0056, 0x0076, 0x0086, 0x0096, 0x00d6, 0x0156,
-	0x7014, 0x2048, 0x7020, 0x20a8, 0x8000, 0x7022, 0xa804, 0x9005,
-	0x0904, 0x3be2, 0x2048, 0x1f04, 0x3b96, 0x7068, 0x2040, 0xa28c,
-	0xa390, 0xa494, 0xa598, 0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029,
-	0x0000, 0x2021, 0x0000, 0x0096, 0x7014, 0x2048, 0xa864, 0x009e,
-	0x9086, 0x0103, 0x0170, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f,
-	0x9084, 0xffc0, 0x9080, 0x001b, 0x080c, 0x4aee, 0x701f, 0x3b86,
-	0x00b0, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0,
-	0x9080, 0x001b, 0x21a8, 0x27e0, 0x2098, 0x27e8, 0x20a0, 0x0006,
-	0x080c, 0x0f7c, 0x000e, 0x080c, 0x4af1, 0x701f, 0x3b86, 0x015e,
-	0x00de, 0x009e, 0x008e, 0x007e, 0x005e, 0x004e, 0x003e, 0x002e,
-	0x001e, 0x0005, 0x7014, 0x2048, 0xa864, 0x9086, 0x0103, 0x1118,
-	0x701f, 0x3c47, 0x0450, 0x7014, 0x2048, 0xa868, 0xc0fd, 0xa86a,
-	0x2009, 0x007f, 0x080c, 0x659f, 0x0110, 0x9006, 0x0030, 0xb813,
-	0x00ff, 0xb817, 0xfffd, 0x080c, 0xcfdf, 0x015e, 0x00de, 0x009e,
-	0x008e, 0x007e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, 0x0904,
-	0x354f, 0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0076, 0x0086,
-	0x0096, 0x00d6, 0x0156, 0x701f, 0x3c19, 0x7007, 0x0003, 0x0804,
-	0x3bd7, 0xa830, 0x9086, 0x0100, 0x2021, 0x400c, 0x0904, 0x351f,
-	0x0076, 0xad10, 0xac0c, 0xab24, 0xaa20, 0xa930, 0xa808, 0xd0b4,
-	0x1120, 0x2029, 0x0000, 0x2021, 0x0000, 0x8906, 0x8006, 0x8007,
-	0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, 0x21a8, 0x27e0,
-	0x2098, 0x27e8, 0x20a0, 0x0006, 0x080c, 0x0f7c, 0x000e, 0x080c,
-	0x4af1, 0x007e, 0x701f, 0x3b86, 0x7023, 0x0001, 0x0005, 0x0804,
-	0x351d, 0x0156, 0x00c6, 0xa814, 0x908a, 0x001e, 0x0218, 0xa833,
-	0x001e, 0x0010, 0xa832, 0x0078, 0x81ff, 0x0168, 0x0016, 0x080c,
-	0x4aa5, 0x001e, 0x0130, 0xa800, 0x2040, 0xa008, 0xa80a, 0x2100,
-	0x0c58, 0x9006, 0x0010, 0x9085, 0x0001, 0x00ce, 0x015e, 0x0005,
-	0x0006, 0x00f6, 0x2079, 0x0000, 0x7880, 0x9086, 0x0044, 0x00fe,
-	0x000e, 0x0005, 0x2001, 0x199f, 0x2003, 0x0001, 0x0005, 0x00f6,
-	0x00e6, 0x00c6, 0x2061, 0x0200, 0x2001, 0x19aa, 0x2004, 0x601a,
-	0x2061, 0x0100, 0x2001, 0x19a9, 0x2004, 0x60ce, 0x6104, 0xc1ac,
-	0x6106, 0x080c, 0x4aa5, 0xa813, 0x0019, 0xa817, 0x0001, 0x2900,
-	0xa85a, 0x2001, 0x002e, 0x2004, 0xa866, 0x2001, 0x002f, 0x2004,
-	0xa86a, 0x2061, 0x0090, 0x2079, 0x0100, 0x2001, 0x19a9, 0x2004,
-	0x6036, 0x2009, 0x0040, 0x080c, 0x23d2, 0x2001, 0x002a, 0x2004,
-	0x9084, 0xfff8, 0xa86e, 0x601a, 0xa873, 0x0000, 0x601f, 0x0000,
-	0x78ca, 0x9006, 0x600a, 0x600e, 0x00ce, 0x00ee, 0x00fe, 0x0005,
-	0x00e6, 0x080c, 0x4aa5, 0x2940, 0xa013, 0x0019, 0xa017, 0x0001,
-	0x2800, 0xa05a, 0x2001, 0x0030, 0x2004, 0xa866, 0x2001, 0x0031,
-	0x2004, 0xa86a, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0xa86e,
-	0xa873, 0x0000, 0x2001, 0x032a, 0x2003, 0x0004, 0x2001, 0x0300,
-	0x2003, 0x0000, 0x2001, 0x020d, 0x2003, 0x0000, 0x2001, 0x0004,
-	0x200c, 0x918d, 0x0002, 0x2102, 0x00ee, 0x0005, 0x0126, 0x2091,
-	0x8000, 0x81ff, 0x0148, 0x080c, 0x2c30, 0x1130, 0x9006, 0x080c,
-	0x2b88, 0x9006, 0x080c, 0x2b6b, 0x7884, 0x9084, 0x0007, 0x0002,
-	0x3d03, 0x3d0c, 0x3d15, 0x3d00, 0x3d00, 0x3d00, 0x3d00, 0x3d00,
-	0x012e, 0x0804, 0x3552, 0x2009, 0x0114, 0x2104, 0x9085, 0x0800,
-	0x200a, 0x080c, 0x3ed1, 0x00c0, 0x2009, 0x0114, 0x2104, 0x9085,
-	0x4000, 0x200a, 0x080c, 0x3ed1, 0x0078, 0x080c, 0x73b0, 0x1128,
-	0x012e, 0x2009, 0x0016, 0x0804, 0x354f, 0x81ff, 0x0128, 0x012e,
-	0x2021, 0x400b, 0x0804, 0x351f, 0x0086, 0x0096, 0x00a6, 0x00b6,
-	0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x080c, 0x3a32, 0x2009, 0x0101,
-	0x210c, 0x0016, 0x7ec8, 0x7dcc, 0x9006, 0x2068, 0x2060, 0x2058,
-	0x080c, 0x419a, 0x080c, 0x40ea, 0x903e, 0x2720, 0x00f6, 0x00e6,
-	0x0086, 0x2940, 0x2071, 0x1a66, 0x2079, 0x0090, 0x00d6, 0x2069,
-	0x0000, 0x6884, 0xd0b4, 0x0120, 0x68d4, 0x780e, 0x68d0, 0x780a,
-	0x00de, 0x2011, 0x0001, 0x080c, 0x404b, 0x080c, 0x2c38, 0x080c,
-	0x2c38, 0x080c, 0x2c38, 0x080c, 0x2c38, 0x080c, 0x404b, 0x008e,
-	0x00ee, 0x00fe, 0x080c, 0x3f78, 0x2009, 0x9c40, 0x8109, 0x11b0,
-	0x080c, 0x3e87, 0x2001, 0x0004, 0x200c, 0x918c, 0xfffd, 0x2102,
-	0x001e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e,
-	0x008e, 0x2009, 0x0017, 0x080c, 0x354f, 0x0cf8, 0x2001, 0x020b,
-	0x2004, 0x9084, 0x0140, 0x1d10, 0x00f6, 0x2079, 0x0000, 0x7884,
-	0x00fe, 0xd0bc, 0x0178, 0x2001, 0x0201, 0x200c, 0x81ff, 0x0150,
-	0x080c, 0x3f56, 0x2d00, 0x9c05, 0x9b05, 0x0120, 0x080c, 0x3e87,
-	0x0804, 0x3e34, 0x080c, 0x40bf, 0x080c, 0x3fe3, 0x080c, 0x3f39,
-	0x080c, 0x3f6e, 0x00f6, 0x2079, 0x0100, 0x7824, 0xd0ac, 0x0130,
-	0x8b58, 0x080c, 0x3e87, 0x00fe, 0x0804, 0x3e34, 0x00fe, 0x080c,
-	0x3e7d, 0x1150, 0x8d68, 0x2001, 0x0032, 0x2602, 0x2001, 0x0033,
-	0x2502, 0x080c, 0x3e87, 0x0080, 0x87ff, 0x0138, 0x2001, 0x0201,
-	0x2004, 0x9005, 0x1908, 0x8739, 0x0038, 0x2001, 0x1a62, 0x2004,
-	0x9086, 0x0000, 0x1904, 0x3d84, 0x2001, 0x032f, 0x2003, 0x00f6,
-	0x8631, 0x1208, 0x8529, 0x2500, 0x9605, 0x0904, 0x3e34, 0x7884,
-	0xd0bc, 0x0128, 0x2d00, 0x9c05, 0x9b05, 0x1904, 0x3e34, 0xa013,
-	0x0019, 0x2001, 0x032a, 0x2003, 0x0004, 0x7884, 0xd0ac, 0x1148,
-	0x2001, 0x1a62, 0x2003, 0x0003, 0x2001, 0x032a, 0x2003, 0x0009,
-	0x0030, 0xa017, 0x0001, 0x78b4, 0x9005, 0x0108, 0xa016, 0x2800,
-	0xa05a, 0x2009, 0x0040, 0x080c, 0x23d2, 0x2900, 0xa85a, 0xa813,
-	0x0019, 0x7884, 0xd0a4, 0x1180, 0xa817, 0x0000, 0x00c6, 0x20a9,
-	0x0004, 0x2061, 0x0090, 0x602b, 0x0008, 0x2001, 0x0203, 0x2004,
-	0x1f04, 0x3e0b, 0x00ce, 0x0030, 0xa817, 0x0001, 0x78b0, 0x9005,
-	0x0108, 0xa816, 0x00f6, 0x00c6, 0x2079, 0x0100, 0x2061, 0x0090,
-	0x7827, 0x0002, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0x601a,
-	0x0006, 0x2001, 0x002b, 0x2004, 0x601e, 0x78c6, 0x000e, 0x78ca,
-	0x00ce, 0x00fe, 0x0804, 0x3d3e, 0x001e, 0x00c6, 0x2001, 0x032a,
-	0x2003, 0x0004, 0x2061, 0x0100, 0x6027, 0x0002, 0x6106, 0x2011,
-	0x020d, 0x2013, 0x0020, 0x2001, 0x0004, 0x200c, 0x918c, 0xfffd,
-	0x2102, 0x080c, 0x12ed, 0x7884, 0x9084, 0x0003, 0x9086, 0x0002,
-	0x01a0, 0x2009, 0x0028, 0x080c, 0x23d2, 0x2001, 0x0227, 0x200c,
-	0x2102, 0x6050, 0x9084, 0xb7ef, 0x6052, 0x602f, 0x0000, 0x604b,
-	0xf7f7, 0x6043, 0x0090, 0x6043, 0x0010, 0x00ce, 0x2d08, 0x2c10,
-	0x2b18, 0x2b00, 0x9c05, 0x9d05, 0x00fe, 0x00ee, 0x00de, 0x00ce,
-	0x00be, 0x00ae, 0x009e, 0x008e, 0x1118, 0x012e, 0x0804, 0x351d,
-	0x012e, 0x2021, 0x400c, 0x0804, 0x351f, 0x9085, 0x0001, 0x1d04,
-	0x3e86, 0x2091, 0x6000, 0x8420, 0x9486, 0x0064, 0x0005, 0x2001,
-	0x0105, 0x2003, 0x0010, 0x2001, 0x032a, 0x2003, 0x0004, 0x2001,
-	0x1a62, 0x2003, 0x0000, 0x0071, 0x2009, 0x0048, 0x080c, 0x23d2,
-	0x2001, 0x0227, 0x2024, 0x2402, 0x2001, 0x0109, 0x2003, 0x4000,
-	0x9026, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a66, 0x7000, 0x9086,
-	0x0000, 0x0520, 0x2079, 0x0090, 0x2009, 0x0206, 0x2104, 0x2009,
-	0x0203, 0x210c, 0x9106, 0x1120, 0x2009, 0x0040, 0x080c, 0x23d2,
-	0x782c, 0xd0fc, 0x0d88, 0x080c, 0x40bf, 0x7000, 0x9086, 0x0000,
-	0x1d58, 0x782b, 0x0004, 0x782c, 0xd0ac, 0x1de8, 0x2009, 0x0040,
-	0x080c, 0x23d2, 0x782b, 0x0002, 0x7003, 0x0000, 0x00ee, 0x00fe,
-	0x0005, 0x00f6, 0x2079, 0x0100, 0x2001, 0x1818, 0x200c, 0x7932,
-	0x7936, 0x080c, 0x2887, 0x7850, 0x9084, 0xfbff, 0x9085, 0x0030,
-	0x7852, 0x2019, 0x01f4, 0x8319, 0x1df0, 0x9084, 0xffcf, 0x9085,
-	0x2000, 0x7852, 0x20a9, 0x0046, 0x1d04, 0x3eec, 0x2091, 0x6000,
-	0x1f04, 0x3eec, 0x7850, 0x9085, 0x0400, 0x9084, 0xdfff, 0x7852,
-	0x2001, 0x0021, 0x2004, 0x9084, 0x0003, 0x9086, 0x0001, 0x1120,
-	0x7850, 0x9084, 0xdfff, 0x7852, 0x784b, 0xf7f7, 0x7843, 0x0090,
-	0x7843, 0x0010, 0x20a9, 0x0028, 0xa001, 0x1f04, 0x3f0c, 0x7850,
-	0x9085, 0x1400, 0x7852, 0x2019, 0x61a8, 0x7854, 0xa001, 0xa001,
-	0xd08c, 0x1110, 0x8319, 0x1dc8, 0x7827, 0x0048, 0x7850, 0x9085,
-	0x0400, 0x7852, 0x7843, 0x0040, 0x2019, 0x01f4, 0xa001, 0xa001,
-	0x8319, 0x1de0, 0x2001, 0x0100, 0x080c, 0x2cef, 0x7827, 0x0020,
-	0x7843, 0x0000, 0x9006, 0x080c, 0x2cef, 0x7827, 0x0048, 0x00fe,
-	0x0005, 0x7884, 0xd0ac, 0x11c8, 0x00f6, 0x00e6, 0x2071, 0x1a62,
-	0x2079, 0x0320, 0x2001, 0x0201, 0x2004, 0x9005, 0x0160, 0x7000,
-	0x9086, 0x0000, 0x1140, 0x0051, 0xd0bc, 0x0108, 0x8738, 0x7003,
-	0x0003, 0x782b, 0x0019, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x2079,
-	0x0300, 0x78bc, 0x00fe, 0x908c, 0x0070, 0x0178, 0x2009, 0x0032,
-	0x260a, 0x2009, 0x0033, 0x250a, 0xd0b4, 0x0108, 0x8c60, 0xd0ac,
-	0x0108, 0x8d68, 0xd0a4, 0x0108, 0x8b58, 0x0005, 0x00f6, 0x2079,
-	0x0200, 0x781c, 0xd084, 0x0110, 0x7837, 0x0050, 0x00fe, 0x0005,
-	0x00e6, 0x2071, 0x0100, 0x2001, 0x19aa, 0x2004, 0x70e2, 0x080c,
-	0x3c68, 0x1188, 0x2001, 0x1820, 0x2004, 0x2009, 0x181f, 0x210c,
-	0x918c, 0x00ff, 0x706e, 0x716a, 0x7066, 0x918d, 0x3200, 0x7162,
-	0x7073, 0xe109, 0x0080, 0x702c, 0x9085, 0x0002, 0x702e, 0x2009,
-	0x1818, 0x210c, 0x716e, 0x7063, 0x0100, 0x7166, 0x719e, 0x706b,
-	0x0000, 0x7073, 0x0809, 0x7077, 0x0008, 0x7078, 0x9080, 0x0100,
-	0x707a, 0x7080, 0x8000, 0x7082, 0x7087, 0xaaaa, 0x9006, 0x708a,
-	0x708e, 0x707e, 0x70d6, 0x70ab, 0x0036, 0x70af, 0x95d5, 0x7014,
-	0x9084, 0x1984, 0x9085, 0x0092, 0x7016, 0x080c, 0x40bf, 0x00f6,
-	0x2071, 0x1a62, 0x2079, 0x0320, 0x00d6, 0x2069, 0x0000, 0x6884,
-	0xd0b4, 0x0120, 0x689c, 0x780e, 0x6898, 0x780a, 0x00de, 0x2009,
-	0x03e8, 0x8109, 0x1df0, 0x792c, 0xd1fc, 0x0110, 0x782b, 0x0004,
-	0x2011, 0x0011, 0x080c, 0x404b, 0x2011, 0x0001, 0x080c, 0x404b,
-	0x00fe, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a62, 0x2079,
-	0x0320, 0x792c, 0xd1fc, 0x0904, 0x4048, 0x782b, 0x0002, 0x9026,
-	0xd19c, 0x1904, 0x4044, 0x7000, 0x0002, 0x4048, 0x3ff9, 0x4029,
-	0x4044, 0xd1bc, 0x1170, 0xd1dc, 0x1190, 0x8001, 0x7002, 0x2011,
-	0x0001, 0x080c, 0x404b, 0x0904, 0x4048, 0x080c, 0x404b, 0x0804,
-	0x4048, 0x00f6, 0x2079, 0x0300, 0x78bf, 0x0000, 0x00fe, 0x7810,
-	0x7914, 0x782b, 0x0004, 0x7812, 0x7916, 0x2001, 0x0201, 0x200c,
-	0x81ff, 0x0de8, 0x080c, 0x3f56, 0x2009, 0x0001, 0x00f6, 0x2079,
-	0x0300, 0x78b8, 0x00fe, 0xd0ec, 0x0110, 0x2009, 0x0011, 0x792a,
-	0x00f8, 0x8001, 0x7002, 0x9184, 0x0880, 0x1140, 0x782c, 0xd0fc,
-	0x1904, 0x3fed, 0x2011, 0x0001, 0x00b1, 0x0090, 0xa010, 0x9092,
-	0x0004, 0x9086, 0x0015, 0x1120, 0xa000, 0xa05a, 0x2011, 0x0031,
-	0xa212, 0xd1dc, 0x1960, 0x0828, 0x782b, 0x0004, 0x7003, 0x0000,
-	0x00ee, 0x00fe, 0x0005, 0xa014, 0x9005, 0x0550, 0x8001, 0x0036,
-	0x0096, 0xa016, 0xa058, 0x2048, 0xa010, 0x2009, 0x0031, 0x911a,
-	0x831c, 0x831c, 0x938a, 0x0007, 0x1a0c, 0x0dd5, 0x9398, 0x4079,
-	0x231d, 0x083f, 0x9080, 0x0004, 0x7a2a, 0x7100, 0x8108, 0x7102,
-	0x009e, 0x003e, 0x908a, 0x0035, 0x1140, 0x0096, 0xa058, 0x2048,
-	0xa804, 0xa05a, 0x2001, 0x0019, 0x009e, 0xa012, 0x9085, 0x0001,
-	0x0005, 0x40b6, 0x40ad, 0x40a4, 0x409b, 0x4092, 0x4089, 0x4080,
-	0xa964, 0x7902, 0xa968, 0x7906, 0xa96c, 0x7912, 0xa970, 0x7916,
-	0x0005, 0xa974, 0x7902, 0xa978, 0x7906, 0xa97c, 0x7912, 0xa980,
-	0x7916, 0x0005, 0xa984, 0x7902, 0xa988, 0x7906, 0xa98c, 0x7912,
-	0xa990, 0x7916, 0x0005, 0xa994, 0x7902, 0xa998, 0x7906, 0xa99c,
-	0x7912, 0xa9a0, 0x7916, 0x0005, 0xa9a4, 0x7902, 0xa9a8, 0x7906,
-	0xa9ac, 0x7912, 0xa9b0, 0x7916, 0x0005, 0xa9b4, 0x7902, 0xa9b8,
-	0x7906, 0xa9bc, 0x7912, 0xa9c0, 0x7916, 0x0005, 0xa9c4, 0x7902,
-	0xa9c8, 0x7906, 0xa9cc, 0x7912, 0xa9d0, 0x7916, 0x0005, 0x00f6,
-	0x00e6, 0x0086, 0x2071, 0x1a66, 0x2079, 0x0090, 0x792c, 0xd1fc,
-	0x01e8, 0x782b, 0x0002, 0x2940, 0x9026, 0x7000, 0x0002, 0x40e6,
-	0x40d2, 0x40dd, 0x8001, 0x7002, 0xd19c, 0x1180, 0x2011, 0x0001,
-	0x080c, 0x404b, 0x190c, 0x404b, 0x0048, 0x8001, 0x7002, 0x782c,
-	0xd0fc, 0x1d38, 0x2011, 0x0001, 0x080c, 0x404b, 0x008e, 0x00ee,
-	0x00fe, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086, 0x2061, 0x0200,
-	0x2001, 0x19aa, 0x2004, 0x601a, 0x2061, 0x0100, 0x2001, 0x19a9,
-	0x2004, 0x60ce, 0x6104, 0xc1ac, 0x6106, 0x2001, 0x002c, 0x2004,
-	0x9005, 0x0520, 0x2038, 0x2001, 0x002e, 0x2024, 0x2001, 0x002f,
-	0x201c, 0x080c, 0x4aa5, 0xa813, 0x0019, 0xaf16, 0x2900, 0xa85a,
-	0x978a, 0x0007, 0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708,
-	0x903e, 0x0096, 0xa858, 0x2048, 0xa85c, 0x9080, 0x0019, 0x009e,
-	0x080c, 0x4162, 0x1d68, 0x2900, 0xa85a, 0x00d0, 0x080c, 0x4aa5,
-	0xa813, 0x0019, 0xa817, 0x0001, 0x2900, 0xa85a, 0x2001, 0x002e,
-	0x2004, 0xa866, 0x2001, 0x002f, 0x2004, 0xa86a, 0x2001, 0x002a,
-	0x2004, 0x9084, 0xfff8, 0xa86e, 0x2001, 0x002b, 0x2004, 0xa872,
+	0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x2071, 0x189e, 0x7003,
+	0x0002, 0x9006, 0x7016, 0x701a, 0x704a, 0x704e, 0x700e, 0x7042,
+	0x7046, 0x703b, 0x18ba, 0x703f, 0x18ba, 0x7007, 0x0001, 0x080c,
+	0x1018, 0x090c, 0x0dd5, 0x2900, 0x706a, 0xa867, 0x0002, 0xa8ab,
+	0xdcb0, 0x080c, 0x1018, 0x090c, 0x0dd5, 0x2900, 0x706e, 0xa867,
+	0x0002, 0xa8ab, 0xdcb0, 0x0005, 0x2071, 0x189e, 0x7004, 0x0002,
+	0x3454, 0x3455, 0x3468, 0x347c, 0x0005, 0x1004, 0x3465, 0x0e04,
+	0x3465, 0x2079, 0x0000, 0x0126, 0x2091, 0x8000, 0x700c, 0x9005,
+	0x1128, 0x700f, 0x0001, 0x012e, 0x0468, 0x0005, 0x012e, 0x0ce8,
+	0x2079, 0x0000, 0x2061, 0x18b8, 0x2c4c, 0xa86c, 0x908e, 0x0100,
+	0x0128, 0x9086, 0x0200, 0x0904, 0x3550, 0x0005, 0x7018, 0x2048,
+	0x2061, 0x1800, 0x701c, 0x0807, 0x7014, 0x2048, 0xa864, 0x9094,
+	0x00ff, 0x9296, 0x0029, 0x1120, 0xaa78, 0xd2fc, 0x0128, 0x0005,
+	0x9086, 0x0103, 0x0108, 0x0005, 0x2079, 0x0000, 0x2061, 0x1800,
+	0x701c, 0x0807, 0x2061, 0x1800, 0x7880, 0x908a, 0x0040, 0x1210,
+	0x61d0, 0x0042, 0x2100, 0x908a, 0x003f, 0x1a04, 0x354d, 0x61d0,
+	0x0804, 0x34e2, 0x3524, 0x355c, 0x3566, 0x356a, 0x3574, 0x357a,
+	0x357e, 0x358e, 0x3591, 0x359b, 0x35a0, 0x35a5, 0x35b0, 0x35bb,
+	0x35ca, 0x35d9, 0x35e7, 0x35fe, 0x3619, 0x354d, 0x36c2, 0x3700,
+	0x37a6, 0x37b7, 0x37da, 0x354d, 0x354d, 0x354d, 0x3812, 0x382e,
+	0x3837, 0x3866, 0x386c, 0x354d, 0x38b2, 0x354d, 0x354d, 0x354d,
+	0x354d, 0x354d, 0x38bd, 0x38c6, 0x38ce, 0x38d0, 0x354d, 0x354d,
+	0x354d, 0x354d, 0x354d, 0x354d, 0x38fc, 0x354d, 0x354d, 0x354d,
+	0x354d, 0x354d, 0x3919, 0x397a, 0x354d, 0x354d, 0x354d, 0x354d,
+	0x354d, 0x354d, 0x0002, 0x39a4, 0x39a7, 0x3a06, 0x3a1f, 0x3a4f,
+	0x3ced, 0x354d, 0x52a8, 0x354d, 0x354d, 0x354d, 0x354d, 0x354d,
+	0x354d, 0x354d, 0x354d, 0x359b, 0x35a0, 0x420e, 0x56f3, 0x422c,
+	0x5337, 0x5388, 0x548b, 0x354d, 0x54ed, 0x5529, 0x555a, 0x565e,
+	0x5587, 0x55de, 0x354d, 0x4230, 0x43f1, 0x4407, 0x442c, 0x4491,
+	0x4505, 0x4525, 0x459c, 0x45f8, 0x4654, 0x4657, 0x467c, 0x4719,
+	0x477f, 0x4787, 0x48b9, 0x4a2e, 0x4a62, 0x4cc6, 0x354d, 0x4ce4,
+	0x4d90, 0x4e72, 0x4ecc, 0x354d, 0x4f81, 0x354d, 0x4fe7, 0x5002,
+	0x4787, 0x5248, 0x714c, 0x0000, 0x2021, 0x4000, 0x080c, 0x4ae0,
+	0x0126, 0x2091, 0x8000, 0x0e04, 0x352e, 0x0010, 0x012e, 0x0cc0,
+	0x7c36, 0x9486, 0x4000, 0x0118, 0x7833, 0x0011, 0x0010, 0x7833,
+	0x0010, 0x7c82, 0x7986, 0x7a8a, 0x7b8e, 0x2091, 0x4080, 0x2001,
+	0x0089, 0x2004, 0xd084, 0x190c, 0x119b, 0x7007, 0x0001, 0x2091,
+	0x5000, 0x700f, 0x0000, 0x012e, 0x0005, 0x2021, 0x4001, 0x08b0,
+	0x2021, 0x4002, 0x0898, 0x2021, 0x4003, 0x0880, 0x2021, 0x4005,
+	0x0868, 0x2021, 0x4006, 0x0850, 0x2039, 0x0001, 0x902e, 0x2520,
+	0x7b88, 0x7a8c, 0x7884, 0x7990, 0x0804, 0x4aed, 0x7883, 0x0004,
+	0x7884, 0x0807, 0x2039, 0x0001, 0x902e, 0x2520, 0x7b88, 0x7a8c,
+	0x7884, 0x7990, 0x0804, 0x4af0, 0x7984, 0x7888, 0x2114, 0x200a,
+	0x0804, 0x3524, 0x7984, 0x2114, 0x0804, 0x3524, 0x20e1, 0x0000,
+	0x2099, 0x0021, 0x20e9, 0x0000, 0x20a1, 0x0021, 0x20a9, 0x001f,
+	0x4003, 0x7984, 0x7a88, 0x7b8c, 0x0804, 0x3524, 0x7884, 0x2060,
+	0x04d8, 0x2009, 0x0003, 0x2011, 0x0002, 0x2019, 0x001c, 0x789b,
+	0x0137, 0x0804, 0x3524, 0x2039, 0x0001, 0x7d98, 0x7c9c, 0x0800,
+	0x2039, 0x0001, 0x7d98, 0x7c9c, 0x0848, 0x79a0, 0x9182, 0x0040,
+	0x0210, 0x0804, 0x3559, 0x2138, 0x7d98, 0x7c9c, 0x0804, 0x3560,
+	0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x3559, 0x2138, 0x7d98,
+	0x7c9c, 0x0804, 0x356e, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804,
+	0x3559, 0x21e8, 0x7984, 0x7888, 0x20a9, 0x0001, 0x21a0, 0x4004,
+	0x0804, 0x3524, 0x2061, 0x0800, 0xe10c, 0x9006, 0x2c15, 0x9200,
+	0x8c60, 0x8109, 0x1dd8, 0x2010, 0x9005, 0x0904, 0x3524, 0x0804,
+	0x3553, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x3559, 0x21e0,
+	0x20a9, 0x0001, 0x7984, 0x2198, 0x4012, 0x0804, 0x3524, 0x2069,
+	0x1847, 0x7884, 0x7990, 0x911a, 0x1a04, 0x3559, 0x8019, 0x0904,
+	0x3559, 0x684a, 0x6942, 0x788c, 0x6852, 0x7888, 0x6856, 0x9006,
+	0x685a, 0x685e, 0x080c, 0x76d5, 0x0804, 0x3524, 0x2069, 0x1847,
+	0x7884, 0x7994, 0x911a, 0x1a04, 0x3559, 0x8019, 0x0904, 0x3559,
+	0x684e, 0x6946, 0x788c, 0x6862, 0x7888, 0x6866, 0x9006, 0x686a,
+	0x686e, 0x0126, 0x2091, 0x8000, 0x080c, 0x69dc, 0x012e, 0x0804,
+	0x3524, 0x902e, 0x2520, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804,
+	0x3556, 0x7984, 0x7b88, 0x7a8c, 0x20a9, 0x0005, 0x20e9, 0x0001,
+	0x20a1, 0x18a6, 0x4101, 0x080c, 0x4aa4, 0x1120, 0x2009, 0x0002,
+	0x0804, 0x3556, 0x2009, 0x0020, 0xa85c, 0x9080, 0x0019, 0xaf60,
+	0x080c, 0x4aed, 0x701f, 0x363d, 0x0005, 0xa864, 0x2008, 0x9084,
+	0x00ff, 0x9096, 0x0011, 0x0168, 0x9096, 0x0019, 0x0150, 0x9096,
+	0x0015, 0x0138, 0x9096, 0x0048, 0x0120, 0x9096, 0x0029, 0x1904,
+	0x3556, 0x810f, 0x918c, 0x00ff, 0x0904, 0x3556, 0x7112, 0x7010,
+	0x8001, 0x0560, 0x7012, 0x080c, 0x4aa4, 0x1120, 0x2009, 0x0002,
+	0x0804, 0x3556, 0x2009, 0x0020, 0x7068, 0x2040, 0xa28c, 0xa390,
+	0xa494, 0xa598, 0x9290, 0x0040, 0x9399, 0x0000, 0x94a1, 0x0000,
+	0x95a9, 0x0000, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, 0x4aed,
+	0x701f, 0x367b, 0x0005, 0xa864, 0x9084, 0x00ff, 0x9096, 0x0002,
+	0x0120, 0x9096, 0x000a, 0x1904, 0x3556, 0x0888, 0x7014, 0x2048,
+	0xa868, 0xc0fd, 0xa86a, 0xa864, 0x9084, 0x00ff, 0x9096, 0x0029,
+	0x1160, 0xc2fd, 0xaa7a, 0x080c, 0x618b, 0x0150, 0x0126, 0x2091,
+	0x8000, 0xa87a, 0xa982, 0x012e, 0x0050, 0x080c, 0x64b4, 0x1128,
+	0x7007, 0x0003, 0x701f, 0x36a7, 0x0005, 0x080c, 0x6ec0, 0x0126,
+	0x2091, 0x8000, 0x20a9, 0x0005, 0x20e1, 0x0001, 0x2099, 0x18a6,
+	0x400a, 0x2100, 0x9210, 0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9,
+	0x0000, 0xa85c, 0x9080, 0x0019, 0x2009, 0x0020, 0x012e, 0xaf60,
+	0x0804, 0x4af0, 0x2091, 0x8000, 0x7837, 0x4000, 0x7833, 0x0010,
+	0x7883, 0x4000, 0x7887, 0x4953, 0x788b, 0x5020, 0x788f, 0x2020,
+	0x2009, 0x017f, 0x2104, 0x7892, 0x3f00, 0x7896, 0x2061, 0x0100,
+	0x6200, 0x2061, 0x0200, 0x603c, 0x8007, 0x9205, 0x789a, 0x2009,
+	0x04fd, 0x2104, 0x789e, 0x2091, 0x5000, 0x2091, 0x4080, 0x2001,
+	0x0089, 0x2004, 0xd084, 0x0180, 0x2001, 0x1a19, 0x2004, 0x9005,
+	0x0128, 0x2001, 0x008b, 0x2004, 0xd0fc, 0x0dd8, 0x2001, 0x008a,
+	0x2003, 0x0002, 0x2003, 0x1001, 0x2071, 0x0080, 0x0804, 0x0427,
+	0x81ff, 0x1904, 0x3556, 0x7984, 0x080c, 0x65ff, 0x1904, 0x3559,
+	0x7e98, 0x9684, 0x3fff, 0x9082, 0x4000, 0x1a04, 0x3559, 0x7c88,
+	0x7d8c, 0x080c, 0x6762, 0x080c, 0x6731, 0x0000, 0x1518, 0x2061,
+	0x1cd0, 0x0126, 0x2091, 0x8000, 0x6000, 0x9086, 0x0000, 0x0148,
+	0x6014, 0x904d, 0x0130, 0xa86c, 0x9406, 0x1118, 0xa870, 0x9506,
+	0x0150, 0x012e, 0x9ce0, 0x0018, 0x2001, 0x181a, 0x2004, 0x9c02,
+	0x1a04, 0x3556, 0x0c30, 0x080c, 0xc768, 0x012e, 0x0904, 0x3556,
+	0x0804, 0x3524, 0x900e, 0x2001, 0x0005, 0x080c, 0x6ec0, 0x0126,
+	0x2091, 0x8000, 0x080c, 0xce2a, 0x080c, 0x6c81, 0x012e, 0x0804,
+	0x3524, 0x00a6, 0x2950, 0xb198, 0x080c, 0x65ff, 0x1904, 0x3793,
+	0xb6a4, 0x9684, 0x3fff, 0x9082, 0x4000, 0x16e8, 0xb49c, 0xb5a0,
+	0x080c, 0x6762, 0x080c, 0x6731, 0x1520, 0x2061, 0x1cd0, 0x0126,
+	0x2091, 0x8000, 0x6000, 0x9086, 0x0000, 0x0148, 0x6014, 0x904d,
+	0x0130, 0xa86c, 0x9406, 0x1118, 0xa870, 0x9506, 0x0158, 0x012e,
+	0x9ce0, 0x0018, 0x2001, 0x181a, 0x2004, 0x9c02, 0x2009, 0x000d,
+	0x12b0, 0x0c28, 0x080c, 0xc768, 0x012e, 0x2009, 0x0003, 0x0178,
+	0x00e0, 0x900e, 0x2001, 0x0005, 0x080c, 0x6ec0, 0x0126, 0x2091,
+	0x8000, 0x080c, 0xce2a, 0x080c, 0x6c75, 0x012e, 0x0070, 0xb097,
+	0x4005, 0xb19a, 0x0010, 0xb097, 0x4006, 0x900e, 0x9085, 0x0001,
+	0x2001, 0x0030, 0x2a48, 0x00ae, 0x0005, 0xb097, 0x4000, 0x9006,
+	0x918d, 0x0001, 0x2008, 0x2a48, 0x00ae, 0x0005, 0x81ff, 0x1904,
+	0x3556, 0x080c, 0x4abb, 0x0904, 0x3559, 0x080c, 0x66c6, 0x0904,
+	0x3556, 0x080c, 0x6768, 0x0904, 0x3556, 0x0804, 0x451c, 0x81ff,
+	0x1904, 0x3556, 0x080c, 0x4ad7, 0x0904, 0x3559, 0x080c, 0x67f6,
+	0x0904, 0x3556, 0x2019, 0x0005, 0x79a8, 0x080c, 0x6783, 0x0904,
+	0x3556, 0x7888, 0x908a, 0x1000, 0x1a04, 0x3559, 0x8003, 0x800b,
+	0x810b, 0x9108, 0x080c, 0x8501, 0x7984, 0xd184, 0x1904, 0x3524,
+	0x0804, 0x451c, 0x0126, 0x2091, 0x8000, 0x81ff, 0x0118, 0x2009,
+	0x0001, 0x0450, 0x2029, 0x07ff, 0x645c, 0x2400, 0x9506, 0x01f8,
+	0x2508, 0x080c, 0x65ff, 0x11d8, 0x080c, 0x67f6, 0x1128, 0x2009,
+	0x0002, 0x62c0, 0x2518, 0x00c0, 0x2019, 0x0004, 0x900e, 0x080c,
+	0x6783, 0x1118, 0x2009, 0x0006, 0x0078, 0x7884, 0x908a, 0x1000,
+	0x1270, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, 0x8501, 0x8529,
+	0x1ae0, 0x012e, 0x0804, 0x3524, 0x012e, 0x0804, 0x3556, 0x012e,
+	0x0804, 0x3559, 0x080c, 0x4abb, 0x0904, 0x3559, 0x080c, 0x66c6,
+	0x0904, 0x3556, 0xbaa0, 0x2019, 0x0005, 0x00c6, 0x9066, 0x080c,
+	0x928b, 0x0076, 0x903e, 0x080c, 0x9168, 0x900e, 0x080c, 0xe2eb,
+	0x007e, 0x00ce, 0x080c, 0x6762, 0x0804, 0x3524, 0x080c, 0x4abb,
+	0x0904, 0x3559, 0x080c, 0x6762, 0x2208, 0x0804, 0x3524, 0x0156,
+	0x00d6, 0x00e6, 0x2069, 0x1910, 0x6810, 0x6914, 0x910a, 0x1208,
+	0x900e, 0x6816, 0x9016, 0x901e, 0x20a9, 0x007e, 0x2069, 0x1000,
+	0x2d04, 0x905d, 0x0118, 0xb84c, 0x0059, 0x9210, 0x8d68, 0x1f04,
+	0x3848, 0x2300, 0x9218, 0x00ee, 0x00de, 0x015e, 0x0804, 0x3524,
+	0x00f6, 0x0016, 0x907d, 0x0138, 0x9006, 0x8000, 0x2f0c, 0x81ff,
+	0x0110, 0x2178, 0x0cd0, 0x001e, 0x00fe, 0x0005, 0x2069, 0x1910,
+	0x6910, 0x62bc, 0x0804, 0x3524, 0x81ff, 0x0120, 0x2009, 0x0001,
+	0x0804, 0x3556, 0x0126, 0x2091, 0x8000, 0x080c, 0x56e3, 0x0128,
+	0x2009, 0x0007, 0x012e, 0x0804, 0x3556, 0x012e, 0x615c, 0x9190,
+	0x3325, 0x2215, 0x9294, 0x00ff, 0x637c, 0x83ff, 0x0108, 0x6280,
+	0x67dc, 0x97c4, 0x000a, 0x98c6, 0x000a, 0x1118, 0x2031, 0x0001,
+	0x00e8, 0x97c4, 0x0022, 0x98c6, 0x0022, 0x1118, 0x2031, 0x0003,
+	0x00a8, 0x97c4, 0x0012, 0x98c6, 0x0012, 0x1118, 0x2031, 0x0002,
+	0x0068, 0x080c, 0x73bc, 0x1118, 0x2031, 0x0004, 0x0038, 0xd79c,
+	0x0120, 0x2009, 0x0005, 0x0804, 0x3556, 0x9036, 0x7e9a, 0x7f9e,
+	0x0804, 0x3524, 0x614c, 0x6250, 0x2019, 0x1986, 0x231c, 0x2001,
+	0x1987, 0x2004, 0x789a, 0x0804, 0x3524, 0x0126, 0x2091, 0x8000,
+	0x6138, 0x623c, 0x6340, 0x012e, 0x0804, 0x3524, 0x080c, 0x4ad7,
+	0x0904, 0x3559, 0xba44, 0xbb38, 0x0804, 0x3524, 0x080c, 0x0dd5,
+	0x080c, 0x4ad7, 0x2110, 0x0904, 0x3559, 0xb804, 0x908c, 0x00ff,
+	0x918e, 0x0006, 0x0140, 0x9084, 0xff00, 0x9086, 0x0600, 0x2009,
+	0x0009, 0x1904, 0x3556, 0x0126, 0x2091, 0x8000, 0x2019, 0x0005,
+	0x00c6, 0x9066, 0x080c, 0xa808, 0x080c, 0x928b, 0x0076, 0x903e,
+	0x080c, 0x9168, 0x900e, 0x080c, 0xe2eb, 0x007e, 0x00ce, 0xb807,
+	0x0407, 0x012e, 0x0804, 0x3524, 0x614c, 0x6250, 0x7884, 0x604e,
+	0x7b88, 0x6352, 0x2069, 0x1847, 0x831f, 0x9305, 0x6816, 0x788c,
+	0x2069, 0x1986, 0x2d1c, 0x206a, 0x7e98, 0x9682, 0x0014, 0x1210,
+	0x2031, 0x07d0, 0x2069, 0x1987, 0x2d04, 0x266a, 0x789a, 0x0804,
+	0x3524, 0x0126, 0x2091, 0x8000, 0x7884, 0x603a, 0xd0c4, 0x01a8,
+	0x00d6, 0x78a8, 0x2009, 0x199d, 0x200a, 0x78ac, 0x2011, 0x199e,
+	0x2012, 0x2069, 0x0100, 0x6838, 0x9086, 0x0007, 0x1118, 0x2214,
+	0x6a5a, 0x0010, 0x210c, 0x695a, 0x00de, 0x7884, 0xd0b4, 0x0120,
+	0x3b00, 0x9084, 0xff3f, 0x20d8, 0x7888, 0x603e, 0x2011, 0x0114,
+	0x220c, 0x7888, 0xd08c, 0x0118, 0x918d, 0x0080, 0x0010, 0x918c,
+	0xff7f, 0x2112, 0x788c, 0x6042, 0x9084, 0x0020, 0x0130, 0x78b4,
+	0x6046, 0x9084, 0x0001, 0x090c, 0x420e, 0x6040, 0xd0cc, 0x0120,
+	0x78b0, 0x2011, 0x0114, 0x2012, 0x012e, 0x0804, 0x3524, 0x00f6,
+	0x2079, 0x1800, 0x7a38, 0xa898, 0x9084, 0xfebf, 0x9215, 0xa89c,
+	0x9084, 0xfebf, 0x8002, 0x9214, 0x7838, 0x9084, 0x0140, 0x9215,
+	0x7a3a, 0xa897, 0x4000, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000,
+	0x00fe, 0x0005, 0x7898, 0x9005, 0x01a8, 0x7888, 0x9025, 0x0904,
+	0x3559, 0x788c, 0x902d, 0x0904, 0x3559, 0x900e, 0x080c, 0x65ff,
+	0x1120, 0xba44, 0xbb38, 0xbc46, 0xbd3a, 0x9186, 0x07ff, 0x0190,
+	0x8108, 0x0ca0, 0x080c, 0x4ad7, 0x0904, 0x3559, 0x7888, 0x900d,
+	0x0904, 0x3559, 0x788c, 0x9005, 0x0904, 0x3559, 0xba44, 0xb946,
+	0xbb38, 0xb83a, 0x0804, 0x3524, 0x2011, 0xbc09, 0x0010, 0x2011,
+	0xbc05, 0x080c, 0x56e3, 0x1904, 0x3556, 0x00c6, 0x2061, 0x0100,
+	0x7984, 0x9186, 0x00ff, 0x1130, 0x2001, 0x1818, 0x2004, 0x9085,
+	0xff00, 0x0088, 0x9182, 0x007f, 0x16e0, 0x9188, 0x3325, 0x210d,
+	0x918c, 0x00ff, 0x2001, 0x1818, 0x2004, 0x0026, 0x9116, 0x002e,
+	0x0580, 0x810f, 0x9105, 0x0126, 0x2091, 0x8000, 0x0006, 0x080c,
+	0xae0b, 0x000e, 0x0510, 0x602e, 0x620a, 0x7984, 0x00b6, 0x080c,
+	0x65a4, 0x2b08, 0x00be, 0x1500, 0x6112, 0x6023, 0x0001, 0x080c,
+	0x4aa4, 0x01d0, 0x9006, 0xa866, 0x7007, 0x0003, 0xa832, 0xa868,
+	0xc0fd, 0xa86a, 0x701f, 0x39ff, 0x2900, 0x6016, 0x2009, 0x0032,
+	0x080c, 0xaedc, 0x012e, 0x00ce, 0x0005, 0x012e, 0x00ce, 0x0804,
+	0x3556, 0x00ce, 0x0804, 0x3559, 0x080c, 0xae61, 0x0cb0, 0xa830,
+	0x9086, 0x0100, 0x0904, 0x3556, 0x0804, 0x3524, 0x2061, 0x1a71,
+	0x0126, 0x2091, 0x8000, 0x6000, 0xd084, 0x0170, 0x6104, 0x6208,
+	0x2061, 0x1800, 0x6354, 0x6074, 0x789a, 0x60c0, 0x789e, 0x60bc,
+	0x78aa, 0x012e, 0x0804, 0x3524, 0x900e, 0x2110, 0x0c88, 0x81ff,
+	0x1904, 0x3556, 0x080c, 0x73bc, 0x0904, 0x3556, 0x0126, 0x2091,
+	0x8000, 0x6254, 0x6074, 0x9202, 0x0248, 0x9085, 0x0001, 0x080c,
+	0x28a7, 0x080c, 0x58fd, 0x012e, 0x0804, 0x3524, 0x012e, 0x0804,
+	0x3559, 0x0006, 0x0016, 0x00c6, 0x00e6, 0x2001, 0x19a9, 0x2070,
+	0x2061, 0x1847, 0x6008, 0x2072, 0x900e, 0x2011, 0x1400, 0x080c,
+	0x8f68, 0x7206, 0x00ee, 0x00ce, 0x001e, 0x000e, 0x0005, 0x0126,
+	0x2091, 0x8000, 0x81ff, 0x0128, 0x012e, 0x2021, 0x400b, 0x0804,
+	0x3526, 0x7884, 0xd0fc, 0x0148, 0x2001, 0x002a, 0x2004, 0x9082,
+	0x00e1, 0x0288, 0x012e, 0x0804, 0x3559, 0x2001, 0x002a, 0x2004,
+	0x2069, 0x1847, 0x6908, 0x9102, 0x1230, 0x012e, 0x0804, 0x3559,
+	0x012e, 0x0804, 0x3556, 0x080c, 0xadcb, 0x0dd0, 0x7884, 0xd0fc,
+	0x0904, 0x3aca, 0x00c6, 0x080c, 0x4aa4, 0x00ce, 0x0d88, 0xa867,
+	0x0000, 0x7884, 0xa80a, 0x7898, 0xa80e, 0x789c, 0xa812, 0x2001,
+	0x002e, 0x2004, 0xa81a, 0x2001, 0x002f, 0x2004, 0xa81e, 0x2001,
+	0x0030, 0x2004, 0xa822, 0x2001, 0x0031, 0x2004, 0xa826, 0x2001,
+	0x0034, 0x2004, 0xa82a, 0x2001, 0x0035, 0x2004, 0xa82e, 0x2001,
+	0x002a, 0x2004, 0x9080, 0x0003, 0x9084, 0x00fc, 0x8004, 0xa816,
+	0x080c, 0x3c50, 0x0928, 0x7014, 0x2048, 0xad2c, 0xac28, 0xab1c,
+	0xaa18, 0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021,
+	0x0000, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0,
+	0x9080, 0x001b, 0x080c, 0x4aed, 0x701f, 0x3b8d, 0x7023, 0x0001,
+	0x012e, 0x0005, 0x0046, 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6,
+	0x00d6, 0x00e6, 0x00f6, 0x080c, 0x3a39, 0x2001, 0x199f, 0x2003,
+	0x0000, 0x2021, 0x000a, 0x2061, 0x0100, 0x6104, 0x0016, 0x60bb,
+	0x0000, 0x60bf, 0x32e1, 0x60bf, 0x0012, 0x080c, 0x3cbf, 0x080c,
+	0x3c7e, 0x00f6, 0x00e6, 0x0086, 0x2940, 0x2071, 0x1a66, 0x2079,
+	0x0090, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0140, 0x2001,
+	0x0035, 0x2004, 0x780e, 0x2001, 0x0034, 0x2004, 0x780a, 0x00de,
+	0x2011, 0x0001, 0x080c, 0x4052, 0x008e, 0x00ee, 0x00fe, 0x080c,
+	0x3f7f, 0x080c, 0x3e84, 0x05b8, 0x2001, 0x020b, 0x2004, 0x9084,
+	0x0140, 0x1db8, 0x080c, 0x40c6, 0x00f6, 0x2079, 0x0300, 0x78bc,
+	0x00fe, 0x908c, 0x0070, 0x1560, 0x2071, 0x0200, 0x7037, 0x0000,
+	0x7050, 0x9084, 0xff00, 0x9086, 0x3200, 0x1510, 0x7037, 0x0001,
+	0x7050, 0x9084, 0xff00, 0x9086, 0xe100, 0x11d0, 0x7037, 0x0000,
+	0x7054, 0x7037, 0x0000, 0x715c, 0x9106, 0x1190, 0x2001, 0x1820,
+	0x2004, 0x9106, 0x1168, 0x00c6, 0x2061, 0x0100, 0x6024, 0x9084,
+	0x1e00, 0x00ce, 0x0138, 0x080c, 0x3e8e, 0x080c, 0x3c79, 0x0058,
+	0x080c, 0x3c79, 0x080c, 0x3fea, 0x080c, 0x3f75, 0x2001, 0x020b,
+	0x2004, 0xd0e4, 0x0dd8, 0x2001, 0x032a, 0x2003, 0x0004, 0x2061,
+	0x0100, 0x6027, 0x0002, 0x001e, 0x6106, 0x2011, 0x020d, 0x2013,
+	0x0020, 0x60bb, 0x0000, 0x60bf, 0x0108, 0x60bf, 0x0012, 0x2001,
+	0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, 0x080c, 0x12ed, 0x2009,
+	0x0028, 0x080c, 0x23d2, 0x2001, 0x0227, 0x200c, 0x2102, 0x00fe,
+	0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e, 0x004e,
+	0x2001, 0x199f, 0x2004, 0x9005, 0x1118, 0x012e, 0x0804, 0x3524,
+	0x012e, 0x2021, 0x400c, 0x0804, 0x3526, 0x0016, 0x0026, 0x0036,
+	0x0046, 0x0056, 0x0076, 0x0086, 0x0096, 0x00d6, 0x0156, 0x7014,
+	0x2048, 0x7020, 0x20a8, 0x8000, 0x7022, 0xa804, 0x9005, 0x0904,
+	0x3be9, 0x2048, 0x1f04, 0x3b9d, 0x7068, 0x2040, 0xa28c, 0xa390,
+	0xa494, 0xa598, 0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000,
+	0x2021, 0x0000, 0x0096, 0x7014, 0x2048, 0xa864, 0x009e, 0x9086,
+	0x0103, 0x0170, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084,
+	0xffc0, 0x9080, 0x001b, 0x080c, 0x4aed, 0x701f, 0x3b8d, 0x00b0,
+	0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080,
+	0x001b, 0x21a8, 0x27e0, 0x2098, 0x27e8, 0x20a0, 0x0006, 0x080c,
+	0x0f7c, 0x000e, 0x080c, 0x4af0, 0x701f, 0x3b8d, 0x015e, 0x00de,
+	0x009e, 0x008e, 0x007e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e,
+	0x0005, 0x7014, 0x2048, 0xa864, 0x9086, 0x0103, 0x1118, 0x701f,
+	0x3c4e, 0x0450, 0x7014, 0x2048, 0xa868, 0xc0fd, 0xa86a, 0x2009,
+	0x007f, 0x080c, 0x659e, 0x0110, 0x9006, 0x0030, 0xb813, 0x00ff,
+	0xb817, 0xfffd, 0x080c, 0xcff9, 0x015e, 0x00de, 0x009e, 0x008e,
+	0x007e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, 0x0904, 0x3556,
+	0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0076, 0x0086, 0x0096,
+	0x00d6, 0x0156, 0x701f, 0x3c20, 0x7007, 0x0003, 0x0804, 0x3bde,
+	0xa830, 0x9086, 0x0100, 0x2021, 0x400c, 0x0904, 0x3526, 0x0076,
+	0xad10, 0xac0c, 0xab24, 0xaa20, 0xa930, 0xa808, 0xd0b4, 0x1120,
+	0x2029, 0x0000, 0x2021, 0x0000, 0x8906, 0x8006, 0x8007, 0x90bc,
+	0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, 0x21a8, 0x27e0, 0x2098,
+	0x27e8, 0x20a0, 0x0006, 0x080c, 0x0f7c, 0x000e, 0x080c, 0x4af0,
+	0x007e, 0x701f, 0x3b8d, 0x7023, 0x0001, 0x0005, 0x0804, 0x3524,
+	0x0156, 0x00c6, 0xa814, 0x908a, 0x001e, 0x0218, 0xa833, 0x001e,
+	0x0010, 0xa832, 0x0078, 0x81ff, 0x0168, 0x0016, 0x080c, 0x4aa4,
+	0x001e, 0x0130, 0xa800, 0x2040, 0xa008, 0xa80a, 0x2100, 0x0c58,
+	0x9006, 0x0010, 0x9085, 0x0001, 0x00ce, 0x015e, 0x0005, 0x0006,
+	0x00f6, 0x2079, 0x0000, 0x7880, 0x9086, 0x0044, 0x00fe, 0x000e,
+	0x0005, 0x2001, 0x199f, 0x2003, 0x0001, 0x0005, 0x00f6, 0x00e6,
+	0x00c6, 0x2061, 0x0200, 0x2001, 0x19aa, 0x2004, 0x601a, 0x2061,
+	0x0100, 0x2001, 0x19a9, 0x2004, 0x60ce, 0x6104, 0xc1ac, 0x6106,
+	0x080c, 0x4aa4, 0xa813, 0x0019, 0xa817, 0x0001, 0x2900, 0xa85a,
+	0x2001, 0x002e, 0x2004, 0xa866, 0x2001, 0x002f, 0x2004, 0xa86a,
 	0x2061, 0x0090, 0x2079, 0x0100, 0x2001, 0x19a9, 0x2004, 0x6036,
 	0x2009, 0x0040, 0x080c, 0x23d2, 0x2001, 0x002a, 0x2004, 0x9084,
-	0xfff8, 0x601a, 0x0006, 0x2001, 0x002b, 0x2004, 0x601e, 0x78c6,
-	0x000e, 0x78ca, 0x9006, 0x600a, 0x600e, 0x008e, 0x00ce, 0x00ee,
-	0x00fe, 0x0005, 0x00e6, 0x2071, 0x0080, 0xaa60, 0x22e8, 0x20a0,
-	0x20e1, 0x0000, 0x2099, 0x0088, 0x702b, 0x0026, 0x7402, 0x7306,
-	0x9006, 0x700a, 0x700e, 0x810b, 0x810b, 0x21a8, 0x810b, 0x7112,
-	0x702b, 0x0041, 0x702c, 0xd0fc, 0x0de8, 0x702b, 0x0002, 0x702b,
-	0x0040, 0x4005, 0x7400, 0x7304, 0x87ff, 0x0190, 0x0086, 0x0096,
-	0x2940, 0x0086, 0x080c, 0x4aa5, 0x008e, 0xa058, 0x00a6, 0x2050,
-	0x2900, 0xb006, 0xa05a, 0x00ae, 0x009e, 0x008e, 0x9085, 0x0001,
-	0x00ee, 0x0005, 0x00e6, 0x2001, 0x002d, 0x2004, 0x9005, 0x0528,
-	0x2038, 0x2001, 0x0030, 0x2024, 0x2001, 0x0031, 0x201c, 0x080c,
-	0x4aa5, 0x2940, 0xa813, 0x0019, 0xaf16, 0x2900, 0xa85a, 0x978a,
+	0xfff8, 0xa86e, 0x601a, 0xa873, 0x0000, 0x601f, 0x0000, 0x78ca,
+	0x9006, 0x600a, 0x600e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x00e6,
+	0x080c, 0x4aa4, 0x2940, 0xa013, 0x0019, 0xa017, 0x0001, 0x2800,
+	0xa05a, 0x2001, 0x0030, 0x2004, 0xa866, 0x2001, 0x0031, 0x2004,
+	0xa86a, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0xa86e, 0xa873,
+	0x0000, 0x2001, 0x032a, 0x2003, 0x0004, 0x2001, 0x0300, 0x2003,
+	0x0000, 0x2001, 0x020d, 0x2003, 0x0000, 0x2001, 0x0004, 0x200c,
+	0x918d, 0x0002, 0x2102, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000,
+	0x81ff, 0x0148, 0x080c, 0x2c30, 0x1130, 0x9006, 0x080c, 0x2b88,
+	0x9006, 0x080c, 0x2b6b, 0x7884, 0x9084, 0x0007, 0x0002, 0x3d0a,
+	0x3d13, 0x3d1c, 0x3d07, 0x3d07, 0x3d07, 0x3d07, 0x3d07, 0x012e,
+	0x0804, 0x3559, 0x2009, 0x0114, 0x2104, 0x9085, 0x0800, 0x200a,
+	0x080c, 0x3ed8, 0x00c0, 0x2009, 0x0114, 0x2104, 0x9085, 0x4000,
+	0x200a, 0x080c, 0x3ed8, 0x0078, 0x080c, 0x73bc, 0x1128, 0x012e,
+	0x2009, 0x0016, 0x0804, 0x3556, 0x81ff, 0x0128, 0x012e, 0x2021,
+	0x400b, 0x0804, 0x3526, 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6,
+	0x00d6, 0x00e6, 0x00f6, 0x080c, 0x3a39, 0x2009, 0x0101, 0x210c,
+	0x0016, 0x7ec8, 0x7dcc, 0x9006, 0x2068, 0x2060, 0x2058, 0x080c,
+	0x41a1, 0x080c, 0x40f1, 0x903e, 0x2720, 0x00f6, 0x00e6, 0x0086,
+	0x2940, 0x2071, 0x1a66, 0x2079, 0x0090, 0x00d6, 0x2069, 0x0000,
+	0x6884, 0xd0b4, 0x0120, 0x68d4, 0x780e, 0x68d0, 0x780a, 0x00de,
+	0x2011, 0x0001, 0x080c, 0x4052, 0x080c, 0x2c38, 0x080c, 0x2c38,
+	0x080c, 0x2c38, 0x080c, 0x2c38, 0x080c, 0x4052, 0x008e, 0x00ee,
+	0x00fe, 0x080c, 0x3f7f, 0x2009, 0x9c40, 0x8109, 0x11b0, 0x080c,
+	0x3e8e, 0x2001, 0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, 0x001e,
+	0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e,
+	0x2009, 0x0017, 0x080c, 0x3556, 0x0cf8, 0x2001, 0x020b, 0x2004,
+	0x9084, 0x0140, 0x1d10, 0x00f6, 0x2079, 0x0000, 0x7884, 0x00fe,
+	0xd0bc, 0x0178, 0x2001, 0x0201, 0x200c, 0x81ff, 0x0150, 0x080c,
+	0x3f5d, 0x2d00, 0x9c05, 0x9b05, 0x0120, 0x080c, 0x3e8e, 0x0804,
+	0x3e3b, 0x080c, 0x40c6, 0x080c, 0x3fea, 0x080c, 0x3f40, 0x080c,
+	0x3f75, 0x00f6, 0x2079, 0x0100, 0x7824, 0xd0ac, 0x0130, 0x8b58,
+	0x080c, 0x3e8e, 0x00fe, 0x0804, 0x3e3b, 0x00fe, 0x080c, 0x3e84,
+	0x1150, 0x8d68, 0x2001, 0x0032, 0x2602, 0x2001, 0x0033, 0x2502,
+	0x080c, 0x3e8e, 0x0080, 0x87ff, 0x0138, 0x2001, 0x0201, 0x2004,
+	0x9005, 0x1908, 0x8739, 0x0038, 0x2001, 0x1a62, 0x2004, 0x9086,
+	0x0000, 0x1904, 0x3d8b, 0x2001, 0x032f, 0x2003, 0x00f6, 0x8631,
+	0x1208, 0x8529, 0x2500, 0x9605, 0x0904, 0x3e3b, 0x7884, 0xd0bc,
+	0x0128, 0x2d00, 0x9c05, 0x9b05, 0x1904, 0x3e3b, 0xa013, 0x0019,
+	0x2001, 0x032a, 0x2003, 0x0004, 0x7884, 0xd0ac, 0x1148, 0x2001,
+	0x1a62, 0x2003, 0x0003, 0x2001, 0x032a, 0x2003, 0x0009, 0x0030,
+	0xa017, 0x0001, 0x78b4, 0x9005, 0x0108, 0xa016, 0x2800, 0xa05a,
+	0x2009, 0x0040, 0x080c, 0x23d2, 0x2900, 0xa85a, 0xa813, 0x0019,
+	0x7884, 0xd0a4, 0x1180, 0xa817, 0x0000, 0x00c6, 0x20a9, 0x0004,
+	0x2061, 0x0090, 0x602b, 0x0008, 0x2001, 0x0203, 0x2004, 0x1f04,
+	0x3e12, 0x00ce, 0x0030, 0xa817, 0x0001, 0x78b0, 0x9005, 0x0108,
+	0xa816, 0x00f6, 0x00c6, 0x2079, 0x0100, 0x2061, 0x0090, 0x7827,
+	0x0002, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0x601a, 0x0006,
+	0x2001, 0x002b, 0x2004, 0x601e, 0x78c6, 0x000e, 0x78ca, 0x00ce,
+	0x00fe, 0x0804, 0x3d45, 0x001e, 0x00c6, 0x2001, 0x032a, 0x2003,
+	0x0004, 0x2061, 0x0100, 0x6027, 0x0002, 0x6106, 0x2011, 0x020d,
+	0x2013, 0x0020, 0x2001, 0x0004, 0x200c, 0x918c, 0xfffd, 0x2102,
+	0x080c, 0x12ed, 0x7884, 0x9084, 0x0003, 0x9086, 0x0002, 0x01a0,
+	0x2009, 0x0028, 0x080c, 0x23d2, 0x2001, 0x0227, 0x200c, 0x2102,
+	0x6050, 0x9084, 0xb7ef, 0x6052, 0x602f, 0x0000, 0x604b, 0xf7f7,
+	0x6043, 0x0090, 0x6043, 0x0010, 0x00ce, 0x2d08, 0x2c10, 0x2b18,
+	0x2b00, 0x9c05, 0x9d05, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be,
+	0x00ae, 0x009e, 0x008e, 0x1118, 0x012e, 0x0804, 0x3524, 0x012e,
+	0x2021, 0x400c, 0x0804, 0x3526, 0x9085, 0x0001, 0x1d04, 0x3e8d,
+	0x2091, 0x6000, 0x8420, 0x9486, 0x0064, 0x0005, 0x2001, 0x0105,
+	0x2003, 0x0010, 0x2001, 0x032a, 0x2003, 0x0004, 0x2001, 0x1a62,
+	0x2003, 0x0000, 0x0071, 0x2009, 0x0048, 0x080c, 0x23d2, 0x2001,
+	0x0227, 0x2024, 0x2402, 0x2001, 0x0109, 0x2003, 0x4000, 0x9026,
+	0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a66, 0x7000, 0x9086, 0x0000,
+	0x0520, 0x2079, 0x0090, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203,
+	0x210c, 0x9106, 0x1120, 0x2009, 0x0040, 0x080c, 0x23d2, 0x782c,
+	0xd0fc, 0x0d88, 0x080c, 0x40c6, 0x7000, 0x9086, 0x0000, 0x1d58,
+	0x782b, 0x0004, 0x782c, 0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c,
+	0x23d2, 0x782b, 0x0002, 0x7003, 0x0000, 0x00ee, 0x00fe, 0x0005,
+	0x00f6, 0x2079, 0x0100, 0x2001, 0x1818, 0x200c, 0x7932, 0x7936,
+	0x080c, 0x2887, 0x7850, 0x9084, 0xfbff, 0x9085, 0x0030, 0x7852,
+	0x2019, 0x01f4, 0x8319, 0x1df0, 0x9084, 0xffcf, 0x9085, 0x2000,
+	0x7852, 0x20a9, 0x0046, 0x1d04, 0x3ef3, 0x2091, 0x6000, 0x1f04,
+	0x3ef3, 0x7850, 0x9085, 0x0400, 0x9084, 0xdfff, 0x7852, 0x2001,
+	0x0021, 0x2004, 0x9084, 0x0003, 0x9086, 0x0001, 0x1120, 0x7850,
+	0x9084, 0xdfff, 0x7852, 0x784b, 0xf7f7, 0x7843, 0x0090, 0x7843,
+	0x0010, 0x20a9, 0x0028, 0xa001, 0x1f04, 0x3f13, 0x7850, 0x9085,
+	0x1400, 0x7852, 0x2019, 0x61a8, 0x7854, 0xa001, 0xa001, 0xd08c,
+	0x1110, 0x8319, 0x1dc8, 0x7827, 0x0048, 0x7850, 0x9085, 0x0400,
+	0x7852, 0x7843, 0x0040, 0x2019, 0x01f4, 0xa001, 0xa001, 0x8319,
+	0x1de0, 0x2001, 0x0100, 0x080c, 0x2cef, 0x7827, 0x0020, 0x7843,
+	0x0000, 0x9006, 0x080c, 0x2cef, 0x7827, 0x0048, 0x00fe, 0x0005,
+	0x7884, 0xd0ac, 0x11c8, 0x00f6, 0x00e6, 0x2071, 0x1a62, 0x2079,
+	0x0320, 0x2001, 0x0201, 0x2004, 0x9005, 0x0160, 0x7000, 0x9086,
+	0x0000, 0x1140, 0x0051, 0xd0bc, 0x0108, 0x8738, 0x7003, 0x0003,
+	0x782b, 0x0019, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0300,
+	0x78bc, 0x00fe, 0x908c, 0x0070, 0x0178, 0x2009, 0x0032, 0x260a,
+	0x2009, 0x0033, 0x250a, 0xd0b4, 0x0108, 0x8c60, 0xd0ac, 0x0108,
+	0x8d68, 0xd0a4, 0x0108, 0x8b58, 0x0005, 0x00f6, 0x2079, 0x0200,
+	0x781c, 0xd084, 0x0110, 0x7837, 0x0050, 0x00fe, 0x0005, 0x00e6,
+	0x2071, 0x0100, 0x2001, 0x19aa, 0x2004, 0x70e2, 0x080c, 0x3c6f,
+	0x1188, 0x2001, 0x1820, 0x2004, 0x2009, 0x181f, 0x210c, 0x918c,
+	0x00ff, 0x706e, 0x716a, 0x7066, 0x918d, 0x3200, 0x7162, 0x7073,
+	0xe109, 0x0080, 0x702c, 0x9085, 0x0002, 0x702e, 0x2009, 0x1818,
+	0x210c, 0x716e, 0x7063, 0x0100, 0x7166, 0x719e, 0x706b, 0x0000,
+	0x7073, 0x0809, 0x7077, 0x0008, 0x7078, 0x9080, 0x0100, 0x707a,
+	0x7080, 0x8000, 0x7082, 0x7087, 0xaaaa, 0x9006, 0x708a, 0x708e,
+	0x707e, 0x70d6, 0x70ab, 0x0036, 0x70af, 0x95d5, 0x7014, 0x9084,
+	0x1984, 0x9085, 0x0092, 0x7016, 0x080c, 0x40c6, 0x00f6, 0x2071,
+	0x1a62, 0x2079, 0x0320, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4,
+	0x0120, 0x689c, 0x780e, 0x6898, 0x780a, 0x00de, 0x2009, 0x03e8,
+	0x8109, 0x1df0, 0x792c, 0xd1fc, 0x0110, 0x782b, 0x0004, 0x2011,
+	0x0011, 0x080c, 0x4052, 0x2011, 0x0001, 0x080c, 0x4052, 0x00fe,
+	0x00ee, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a62, 0x2079, 0x0320,
+	0x792c, 0xd1fc, 0x0904, 0x404f, 0x782b, 0x0002, 0x9026, 0xd19c,
+	0x1904, 0x404b, 0x7000, 0x0002, 0x404f, 0x4000, 0x4030, 0x404b,
+	0xd1bc, 0x1170, 0xd1dc, 0x1190, 0x8001, 0x7002, 0x2011, 0x0001,
+	0x080c, 0x4052, 0x0904, 0x404f, 0x080c, 0x4052, 0x0804, 0x404f,
+	0x00f6, 0x2079, 0x0300, 0x78bf, 0x0000, 0x00fe, 0x7810, 0x7914,
+	0x782b, 0x0004, 0x7812, 0x7916, 0x2001, 0x0201, 0x200c, 0x81ff,
+	0x0de8, 0x080c, 0x3f5d, 0x2009, 0x0001, 0x00f6, 0x2079, 0x0300,
+	0x78b8, 0x00fe, 0xd0ec, 0x0110, 0x2009, 0x0011, 0x792a, 0x00f8,
+	0x8001, 0x7002, 0x9184, 0x0880, 0x1140, 0x782c, 0xd0fc, 0x1904,
+	0x3ff4, 0x2011, 0x0001, 0x00b1, 0x0090, 0xa010, 0x9092, 0x0004,
+	0x9086, 0x0015, 0x1120, 0xa000, 0xa05a, 0x2011, 0x0031, 0xa212,
+	0xd1dc, 0x1960, 0x0828, 0x782b, 0x0004, 0x7003, 0x0000, 0x00ee,
+	0x00fe, 0x0005, 0xa014, 0x9005, 0x0550, 0x8001, 0x0036, 0x0096,
+	0xa016, 0xa058, 0x2048, 0xa010, 0x2009, 0x0031, 0x911a, 0x831c,
+	0x831c, 0x938a, 0x0007, 0x1a0c, 0x0dd5, 0x9398, 0x4080, 0x231d,
+	0x083f, 0x9080, 0x0004, 0x7a2a, 0x7100, 0x8108, 0x7102, 0x009e,
+	0x003e, 0x908a, 0x0035, 0x1140, 0x0096, 0xa058, 0x2048, 0xa804,
+	0xa05a, 0x2001, 0x0019, 0x009e, 0xa012, 0x9085, 0x0001, 0x0005,
+	0x40bd, 0x40b4, 0x40ab, 0x40a2, 0x4099, 0x4090, 0x4087, 0xa964,
+	0x7902, 0xa968, 0x7906, 0xa96c, 0x7912, 0xa970, 0x7916, 0x0005,
+	0xa974, 0x7902, 0xa978, 0x7906, 0xa97c, 0x7912, 0xa980, 0x7916,
+	0x0005, 0xa984, 0x7902, 0xa988, 0x7906, 0xa98c, 0x7912, 0xa990,
+	0x7916, 0x0005, 0xa994, 0x7902, 0xa998, 0x7906, 0xa99c, 0x7912,
+	0xa9a0, 0x7916, 0x0005, 0xa9a4, 0x7902, 0xa9a8, 0x7906, 0xa9ac,
+	0x7912, 0xa9b0, 0x7916, 0x0005, 0xa9b4, 0x7902, 0xa9b8, 0x7906,
+	0xa9bc, 0x7912, 0xa9c0, 0x7916, 0x0005, 0xa9c4, 0x7902, 0xa9c8,
+	0x7906, 0xa9cc, 0x7912, 0xa9d0, 0x7916, 0x0005, 0x00f6, 0x00e6,
+	0x0086, 0x2071, 0x1a66, 0x2079, 0x0090, 0x792c, 0xd1fc, 0x01e8,
+	0x782b, 0x0002, 0x2940, 0x9026, 0x7000, 0x0002, 0x40ed, 0x40d9,
+	0x40e4, 0x8001, 0x7002, 0xd19c, 0x1180, 0x2011, 0x0001, 0x080c,
+	0x4052, 0x190c, 0x4052, 0x0048, 0x8001, 0x7002, 0x782c, 0xd0fc,
+	0x1d38, 0x2011, 0x0001, 0x080c, 0x4052, 0x008e, 0x00ee, 0x00fe,
+	0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086, 0x2061, 0x0200, 0x2001,
+	0x19aa, 0x2004, 0x601a, 0x2061, 0x0100, 0x2001, 0x19a9, 0x2004,
+	0x60ce, 0x6104, 0xc1ac, 0x6106, 0x2001, 0x002c, 0x2004, 0x9005,
+	0x0520, 0x2038, 0x2001, 0x002e, 0x2024, 0x2001, 0x002f, 0x201c,
+	0x080c, 0x4aa4, 0xa813, 0x0019, 0xaf16, 0x2900, 0xa85a, 0x978a,
 	0x0007, 0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e,
 	0x0096, 0xa858, 0x2048, 0xa85c, 0x9080, 0x0019, 0x009e, 0x080c,
-	0x4162, 0x1d68, 0x2900, 0xa85a, 0x00d8, 0x080c, 0x4aa5, 0x2940,
-	0xa013, 0x0019, 0xa017, 0x0001, 0x2800, 0xa05a, 0x2001, 0x0030,
-	0x2004, 0xa066, 0x2001, 0x0031, 0x2004, 0xa06a, 0x2001, 0x002a,
-	0x2004, 0x9084, 0xfff8, 0xa06e, 0x2001, 0x002b, 0x2004, 0xa072,
-	0x2001, 0x032a, 0x2003, 0x0004, 0x7884, 0xd0ac, 0x1180, 0x2001,
-	0x0101, 0x200c, 0x918d, 0x0200, 0x2102, 0xa017, 0x0000, 0x2001,
-	0x1a62, 0x2003, 0x0003, 0x2001, 0x032a, 0x2003, 0x0009, 0x2001,
-	0x0300, 0x2003, 0x0000, 0x2001, 0x020d, 0x2003, 0x0000, 0x2001,
-	0x0004, 0x200c, 0x918d, 0x0002, 0x2102, 0x00ee, 0x0005, 0x0126,
-	0x2091, 0x8000, 0x20a9, 0x0007, 0x20a1, 0x1840, 0x20e9, 0x0001,
-	0x9006, 0x4004, 0x20a9, 0x000c, 0x20a1, 0xfff4, 0x20e9, 0x0000,
-	0x9006, 0x4004, 0x2009, 0x013c, 0x200a, 0x012e, 0x7880, 0x9086,
-	0x0052, 0x0108, 0x0005, 0x0804, 0x351d, 0x7d98, 0x7c9c, 0x0804,
-	0x3614, 0x080c, 0x56df, 0x1128, 0x3a00, 0x9084, 0x0010, 0x0904,
-	0x3552, 0x080c, 0x73b0, 0x190c, 0x5fe0, 0x6040, 0x9084, 0x0020,
-	0x0971, 0x2069, 0x1847, 0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88,
-	0x7c9c, 0x7d98, 0x2039, 0x0001, 0x080c, 0x4aee, 0x701f, 0x4249,
-	0x0005, 0x080c, 0x56df, 0x1130, 0x3b00, 0x3a08, 0xc194, 0xc095,
-	0x20d8, 0x21d0, 0x2069, 0x1847, 0x6800, 0x9005, 0x0904, 0x3552,
-	0x6804, 0xd0ac, 0x0118, 0xd0a4, 0x0904, 0x3552, 0xd094, 0x00c6,
-	0x2061, 0x0100, 0x6104, 0x0138, 0x6200, 0x9292, 0x0005, 0x0218,
-	0x918c, 0xffdf, 0x0010, 0x918d, 0x0020, 0x6106, 0x00ce, 0xd08c,
-	0x00c6, 0x2061, 0x0100, 0x6104, 0x0118, 0x918d, 0x0010, 0x0010,
-	0x918c, 0xffef, 0x6106, 0x00ce, 0xd084, 0x0158, 0x6a28, 0x928a,
-	0x007f, 0x1a04, 0x3552, 0x9288, 0x331e, 0x210d, 0x918c, 0x00ff,
-	0x6166, 0xd0dc, 0x0130, 0x6828, 0x908a, 0x007f, 0x1a04, 0x3552,
-	0x605e, 0x6888, 0x9084, 0x0030, 0x8004, 0x8004, 0x8004, 0x8004,
-	0x0006, 0x2009, 0x19b1, 0x9080, 0x297a, 0x2005, 0x200a, 0x000e,
-	0x2009, 0x19b2, 0x9080, 0x297e, 0x2005, 0x200a, 0x6808, 0x908a,
-	0x0100, 0x0a04, 0x3552, 0x908a, 0x0841, 0x1a04, 0x3552, 0x9084,
-	0x0007, 0x1904, 0x3552, 0x680c, 0x9005, 0x0904, 0x3552, 0x6810,
-	0x9005, 0x0904, 0x3552, 0x6848, 0x6940, 0x910a, 0x1a04, 0x3552,
-	0x8001, 0x0904, 0x3552, 0x684c, 0x6944, 0x910a, 0x1a04, 0x3552,
-	0x8001, 0x0904, 0x3552, 0x2009, 0x1981, 0x200b, 0x0000, 0x2001,
-	0x1869, 0x2004, 0xd0c4, 0x0140, 0x7884, 0x200a, 0x2009, 0x017f,
-	0x200a, 0x3b00, 0xc085, 0x20d8, 0x6814, 0x908c, 0x00ff, 0x614e,
-	0x8007, 0x9084, 0x00ff, 0x6052, 0x080c, 0x76c9, 0x080c, 0x69a0,
-	0x080c, 0x69d4, 0x6808, 0x602a, 0x080c, 0x2344, 0x2009, 0x0170,
-	0x200b, 0x0080, 0xa001, 0xa001, 0x200b, 0x0000, 0x0036, 0x6b08,
-	0x080c, 0x28e1, 0x003e, 0x6000, 0x9086, 0x0000, 0x1904, 0x43e0,
-	0x6818, 0x691c, 0x6a20, 0x6b24, 0x8007, 0x810f, 0x8217, 0x831f,
-	0x6016, 0x611a, 0x621e, 0x6322, 0x6c04, 0xd4f4, 0x0148, 0x6830,
-	0x6934, 0x6a38, 0x6b3c, 0x8007, 0x810f, 0x8217, 0x831f, 0x0010,
-	0x9084, 0xf0ff, 0x6006, 0x610a, 0x620e, 0x6312, 0x8007, 0x810f,
-	0x8217, 0x831f, 0x20a9, 0x0004, 0x20a1, 0x19b3, 0x20e9, 0x0001,
-	0x4001, 0x20a9, 0x0004, 0x20a1, 0x19cd, 0x20e9, 0x0001, 0x4001,
-	0x080c, 0x85c6, 0x00c6, 0x900e, 0x20a9, 0x0001, 0x6b70, 0xd384,
-	0x0510, 0x0068, 0x2009, 0x0100, 0x210c, 0x918e, 0x0008, 0x1110,
-	0x839d, 0x0010, 0x83f5, 0x3e18, 0x12b0, 0x3508, 0x8109, 0x080c,
-	0x7c7f, 0x6878, 0x6016, 0x6874, 0x2008, 0x9084, 0xff00, 0x8007,
-	0x600a, 0x9184, 0x00ff, 0x6006, 0x8108, 0x1118, 0x6003, 0x0003,
-	0x0010, 0x6003, 0x0001, 0x1f04, 0x433a, 0x00ce, 0x00c6, 0x2061,
-	0x199c, 0x6a88, 0x9284, 0xc000, 0x2010, 0x9286, 0x0000, 0x1158,
-	0x2063, 0x0000, 0x2001, 0x0001, 0x080c, 0x2b88, 0x2001, 0x0001,
-	0x080c, 0x2b6b, 0x0088, 0x9286, 0x4000, 0x1148, 0x2063, 0x0001,
-	0x9006, 0x080c, 0x2b88, 0x9006, 0x080c, 0x2b6b, 0x0028, 0x9286,
-	0x8000, 0x1d30, 0x2063, 0x0002, 0x00ce, 0x6888, 0xd0ec, 0x0130,
-	0x2011, 0x0114, 0x2204, 0x9085, 0x0100, 0x2012, 0x6a80, 0x9284,
-	0x0030, 0x9086, 0x0030, 0x1128, 0x9294, 0xffcf, 0x9295, 0x0020,
-	0x6a82, 0x2001, 0x197c, 0x6a80, 0x9294, 0x0030, 0x928e, 0x0000,
-	0x0170, 0x928e, 0x0010, 0x0118, 0x928e, 0x0020, 0x0140, 0x2003,
-	0xaaaa, 0x080c, 0x2956, 0x2001, 0x196d, 0x2102, 0x0008, 0x2102,
-	0x00c6, 0x2061, 0x0100, 0x602f, 0x0040, 0x602f, 0x0000, 0x00ce,
-	0x080c, 0x73b0, 0x0128, 0x080c, 0x4fdc, 0x0110, 0x080c, 0x28a7,
-	0x60d4, 0x9005, 0x01c0, 0x6003, 0x0001, 0x2009, 0x43c8, 0x00e0,
-	0x080c, 0x73b0, 0x1168, 0x2011, 0x7246, 0x080c, 0x84ca, 0x2011,
-	0x7239, 0x080c, 0x85a4, 0x080c, 0x769d, 0x080c, 0x72e2, 0x0040,
-	0x080c, 0x5eda, 0x0028, 0x6003, 0x0004, 0x2009, 0x43e0, 0x0020,
-	0x080c, 0x68d5, 0x0804, 0x351d, 0x2001, 0x0170, 0x2004, 0x9084,
-	0x00ff, 0x9086, 0x004c, 0x1118, 0x2091, 0x30bd, 0x0817, 0x2091,
-	0x303d, 0x0817, 0x6000, 0x9086, 0x0000, 0x0904, 0x354f, 0x2069,
-	0x1847, 0x7890, 0x6842, 0x7894, 0x6846, 0x2d00, 0x2009, 0x0030,
-	0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x0804, 0x4af1,
-	0x9006, 0x080c, 0x28a7, 0x81ff, 0x1904, 0x354f, 0x080c, 0x73b0,
-	0x11b0, 0x080c, 0x7698, 0x080c, 0x601b, 0x080c, 0x3312, 0x0118,
-	0x6130, 0xc18d, 0x6132, 0x080c, 0xd216, 0x0130, 0x080c, 0x73d3,
-	0x1118, 0x080c, 0x7388, 0x0038, 0x080c, 0x72e2, 0x0020, 0x080c,
-	0x5fe0, 0x080c, 0x5eda, 0x0804, 0x351d, 0x81ff, 0x1904, 0x354f,
-	0x080c, 0x73b0, 0x1110, 0x0804, 0x354f, 0x6194, 0x81ff, 0x01a8,
-	0x704f, 0x0000, 0x2001, 0x1c80, 0x2009, 0x0040, 0x7a8c, 0x7b88,
-	0x7c9c, 0x7d98, 0x0126, 0x2091, 0x8000, 0x2039, 0x0001, 0x080c,
-	0x4af1, 0x701f, 0x351b, 0x012e, 0x0005, 0x704f, 0x0001, 0x00d6,
-	0x2069, 0x1c80, 0x20a9, 0x0040, 0x20e9, 0x0001, 0x20a1, 0x1c80,
-	0x2019, 0xffff, 0x4304, 0x655c, 0x9588, 0x331e, 0x210d, 0x918c,
-	0x00ff, 0x216a, 0x900e, 0x2011, 0x0002, 0x2100, 0x9506, 0x01a8,
-	0x080c, 0x6600, 0x1190, 0xb814, 0x821c, 0x0238, 0x9398, 0x1c80,
-	0x9085, 0xff00, 0x8007, 0x201a, 0x0038, 0x9398, 0x1c80, 0x2324,
-	0x94a4, 0xff00, 0x9405, 0x201a, 0x8210, 0x8108, 0x9182, 0x0080,
-	0x1208, 0x0c18, 0x8201, 0x8007, 0x2d0c, 0x9105, 0x206a, 0x00de,
-	0x20a9, 0x0040, 0x20a1, 0x1c80, 0x2099, 0x1c80, 0x080c, 0x5f6b,
-	0x0804, 0x443a, 0x080c, 0x4ad8, 0x0904, 0x3552, 0x080c, 0x4aa5,
-	0x1120, 0x2009, 0x0002, 0x0804, 0x354f, 0x080c, 0x56d0, 0xd0b4,
-	0x0558, 0x7884, 0x908e, 0x007e, 0x0538, 0x908e, 0x007f, 0x0520,
-	0x908e, 0x0080, 0x0508, 0x080c, 0x330d, 0x1148, 0xb800, 0xd08c,
-	0x11d8, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x11a8, 0xa867,
-	0x0000, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xcce4, 0x1120, 0x2009,
-	0x0003, 0x0804, 0x354f, 0x7007, 0x0003, 0x701f, 0x44c8, 0x0005,
-	0x080c, 0x4ad8, 0x0904, 0x3552, 0x20a9, 0x002b, 0xb8c4, 0x20e0,
-	0xb8c8, 0x2098, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0,
-	0x4003, 0x20a9, 0x0008, 0x9080, 0x0006, 0x20a0, 0xb8c4, 0x20e0,
-	0xb8c8, 0x9080, 0x0006, 0x2098, 0x080c, 0x0f7c, 0x0070, 0x20a9,
-	0x0004, 0xa85c, 0x9080, 0x000a, 0x20a0, 0xb8c4, 0x20e0, 0xb8c8,
-	0x9080, 0x000a, 0x2098, 0x080c, 0x0f7c, 0x8906, 0x8006, 0x8007,
-	0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2009, 0x002b,
-	0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x4af1, 0x81ff, 0x1904,
-	0x354f, 0x080c, 0x4abc, 0x0904, 0x3552, 0x080c, 0x6772, 0x0904,
-	0x354f, 0x0058, 0xa878, 0x9005, 0x0120, 0x2009, 0x0004, 0x0804,
-	0x354f, 0xa974, 0xaa94, 0x0804, 0x351d, 0x080c, 0x56d8, 0x0904,
-	0x351d, 0x701f, 0x4512, 0x7007, 0x0003, 0x0005, 0x81ff, 0x1904,
-	0x354f, 0x7888, 0x908a, 0x1000, 0x1a04, 0x3552, 0x080c, 0x4ad8,
-	0x0904, 0x3552, 0x080c, 0x696a, 0x0120, 0x080c, 0x6972, 0x1904,
-	0x3552, 0x080c, 0x67f7, 0x0904, 0x354f, 0x2019, 0x0004, 0x900e,
-	0x080c, 0x6784, 0x0904, 0x354f, 0x7984, 0x7a88, 0x04c9, 0x08a8,
-	0xa89c, 0x908a, 0x1000, 0x12f8, 0x080c, 0x4ad6, 0x01e0, 0x080c,
-	0x696a, 0x0118, 0x080c, 0x6972, 0x11b0, 0x080c, 0x67f7, 0x2009,
-	0x0002, 0x0168, 0x2009, 0x0002, 0x2019, 0x0004, 0x080c, 0x6784,
-	0x2009, 0x0003, 0x0120, 0xa998, 0xaa9c, 0x00d1, 0x0060, 0xa897,
-	0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001,
-	0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0x080c, 0x56d8, 0x0110,
+	0x4169, 0x1d68, 0x2900, 0xa85a, 0x00d0, 0x080c, 0x4aa4, 0xa813,
+	0x0019, 0xa817, 0x0001, 0x2900, 0xa85a, 0x2001, 0x002e, 0x2004,
+	0xa866, 0x2001, 0x002f, 0x2004, 0xa86a, 0x2001, 0x002a, 0x2004,
+	0x9084, 0xfff8, 0xa86e, 0x2001, 0x002b, 0x2004, 0xa872, 0x2061,
+	0x0090, 0x2079, 0x0100, 0x2001, 0x19a9, 0x2004, 0x6036, 0x2009,
+	0x0040, 0x080c, 0x23d2, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8,
+	0x601a, 0x0006, 0x2001, 0x002b, 0x2004, 0x601e, 0x78c6, 0x000e,
+	0x78ca, 0x9006, 0x600a, 0x600e, 0x008e, 0x00ce, 0x00ee, 0x00fe,
+	0x0005, 0x00e6, 0x2071, 0x0080, 0xaa60, 0x22e8, 0x20a0, 0x20e1,
+	0x0000, 0x2099, 0x0088, 0x702b, 0x0026, 0x7402, 0x7306, 0x9006,
+	0x700a, 0x700e, 0x810b, 0x810b, 0x21a8, 0x810b, 0x7112, 0x702b,
+	0x0041, 0x702c, 0xd0fc, 0x0de8, 0x702b, 0x0002, 0x702b, 0x0040,
+	0x4005, 0x7400, 0x7304, 0x87ff, 0x0190, 0x0086, 0x0096, 0x2940,
+	0x0086, 0x080c, 0x4aa4, 0x008e, 0xa058, 0x00a6, 0x2050, 0x2900,
+	0xb006, 0xa05a, 0x00ae, 0x009e, 0x008e, 0x9085, 0x0001, 0x00ee,
+	0x0005, 0x00e6, 0x2001, 0x002d, 0x2004, 0x9005, 0x0528, 0x2038,
+	0x2001, 0x0030, 0x2024, 0x2001, 0x0031, 0x201c, 0x080c, 0x4aa4,
+	0x2940, 0xa813, 0x0019, 0xaf16, 0x2900, 0xa85a, 0x978a, 0x0007,
+	0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e, 0x0096,
+	0xa858, 0x2048, 0xa85c, 0x9080, 0x0019, 0x009e, 0x080c, 0x4169,
+	0x1d68, 0x2900, 0xa85a, 0x00d8, 0x080c, 0x4aa4, 0x2940, 0xa013,
+	0x0019, 0xa017, 0x0001, 0x2800, 0xa05a, 0x2001, 0x0030, 0x2004,
+	0xa066, 0x2001, 0x0031, 0x2004, 0xa06a, 0x2001, 0x002a, 0x2004,
+	0x9084, 0xfff8, 0xa06e, 0x2001, 0x002b, 0x2004, 0xa072, 0x2001,
+	0x032a, 0x2003, 0x0004, 0x7884, 0xd0ac, 0x1180, 0x2001, 0x0101,
+	0x200c, 0x918d, 0x0200, 0x2102, 0xa017, 0x0000, 0x2001, 0x1a62,
+	0x2003, 0x0003, 0x2001, 0x032a, 0x2003, 0x0009, 0x2001, 0x0300,
+	0x2003, 0x0000, 0x2001, 0x020d, 0x2003, 0x0000, 0x2001, 0x0004,
+	0x200c, 0x918d, 0x0002, 0x2102, 0x00ee, 0x0005, 0x0126, 0x2091,
+	0x8000, 0x20a9, 0x0007, 0x20a1, 0x1840, 0x20e9, 0x0001, 0x9006,
+	0x4004, 0x20a9, 0x000c, 0x20a1, 0xfff4, 0x20e9, 0x0000, 0x9006,
+	0x4004, 0x2009, 0x013c, 0x200a, 0x012e, 0x7880, 0x9086, 0x0052,
+	0x0108, 0x0005, 0x0804, 0x3524, 0x7d98, 0x7c9c, 0x0804, 0x361b,
+	0x080c, 0x73bc, 0x190c, 0x5fdf, 0x6040, 0x9084, 0x0020, 0x09b1,
+	0x2069, 0x1847, 0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88, 0x7c9c,
+	0x7d98, 0x2039, 0x0001, 0x080c, 0x4aed, 0x701f, 0x4248, 0x0005,
+	0x080c, 0x56de, 0x1130, 0x3b00, 0x3a08, 0xc194, 0xc095, 0x20d8,
+	0x21d0, 0x2069, 0x1847, 0x6800, 0x9005, 0x0904, 0x3559, 0x6804,
+	0xd0ac, 0x0118, 0xd0a4, 0x0904, 0x3559, 0xd094, 0x00c6, 0x2061,
+	0x0100, 0x6104, 0x0138, 0x6200, 0x9292, 0x0005, 0x0218, 0x918c,
+	0xffdf, 0x0010, 0x918d, 0x0020, 0x6106, 0x00ce, 0xd08c, 0x00c6,
+	0x2061, 0x0100, 0x6104, 0x0118, 0x918d, 0x0010, 0x0010, 0x918c,
+	0xffef, 0x6106, 0x00ce, 0xd084, 0x0158, 0x6a28, 0x928a, 0x007f,
+	0x1a04, 0x3559, 0x9288, 0x3325, 0x210d, 0x918c, 0x00ff, 0x6166,
+	0xd0dc, 0x0130, 0x6828, 0x908a, 0x007f, 0x1a04, 0x3559, 0x605e,
+	0x6888, 0x9084, 0x0030, 0x8004, 0x8004, 0x8004, 0x8004, 0x0006,
+	0x2009, 0x19b1, 0x9080, 0x297a, 0x2005, 0x200a, 0x000e, 0x2009,
+	0x19b2, 0x9080, 0x297e, 0x2005, 0x200a, 0x6808, 0x908a, 0x0100,
+	0x0a04, 0x3559, 0x908a, 0x0841, 0x1a04, 0x3559, 0x9084, 0x0007,
+	0x1904, 0x3559, 0x680c, 0x9005, 0x0904, 0x3559, 0x6810, 0x9005,
+	0x0904, 0x3559, 0x6848, 0x6940, 0x910a, 0x1a04, 0x3559, 0x8001,
+	0x0904, 0x3559, 0x684c, 0x6944, 0x910a, 0x1a04, 0x3559, 0x8001,
+	0x0904, 0x3559, 0x2009, 0x1981, 0x200b, 0x0000, 0x2001, 0x1869,
+	0x2004, 0xd0c4, 0x0140, 0x7884, 0x200a, 0x2009, 0x017f, 0x200a,
+	0x3b00, 0xc085, 0x20d8, 0x6814, 0x908c, 0x00ff, 0x614e, 0x8007,
+	0x9084, 0x00ff, 0x6052, 0x080c, 0x76d5, 0x080c, 0x69a8, 0x080c,
+	0x69dc, 0x6808, 0x602a, 0x080c, 0x2344, 0x2009, 0x0170, 0x200b,
+	0x0080, 0xa001, 0xa001, 0x200b, 0x0000, 0x0036, 0x6b08, 0x080c,
+	0x28e1, 0x003e, 0x6000, 0x9086, 0x0000, 0x1904, 0x43df, 0x6818,
+	0x691c, 0x6a20, 0x6b24, 0x8007, 0x810f, 0x8217, 0x831f, 0x6016,
+	0x611a, 0x621e, 0x6322, 0x6c04, 0xd4f4, 0x0148, 0x6830, 0x6934,
+	0x6a38, 0x6b3c, 0x8007, 0x810f, 0x8217, 0x831f, 0x0010, 0x9084,
+	0xf0ff, 0x6006, 0x610a, 0x620e, 0x6312, 0x8007, 0x810f, 0x8217,
+	0x831f, 0x20a9, 0x0004, 0x20a1, 0x19b3, 0x20e9, 0x0001, 0x4001,
+	0x20a9, 0x0004, 0x20a1, 0x19cd, 0x20e9, 0x0001, 0x4001, 0x080c,
+	0x85ef, 0x00c6, 0x900e, 0x20a9, 0x0001, 0x6b70, 0xd384, 0x0510,
+	0x0068, 0x2009, 0x0100, 0x210c, 0x918e, 0x0008, 0x1110, 0x839d,
+	0x0010, 0x83f5, 0x3e18, 0x12b0, 0x3508, 0x8109, 0x080c, 0x7c8b,
+	0x6878, 0x6016, 0x6874, 0x2008, 0x9084, 0xff00, 0x8007, 0x600a,
+	0x9184, 0x00ff, 0x6006, 0x8108, 0x1118, 0x6003, 0x0003, 0x0010,
+	0x6003, 0x0001, 0x1f04, 0x4339, 0x00ce, 0x00c6, 0x2061, 0x199c,
+	0x6a88, 0x9284, 0xc000, 0x2010, 0x9286, 0x0000, 0x1158, 0x2063,
+	0x0000, 0x2001, 0x0001, 0x080c, 0x2b88, 0x2001, 0x0001, 0x080c,
+	0x2b6b, 0x0088, 0x9286, 0x4000, 0x1148, 0x2063, 0x0001, 0x9006,
+	0x080c, 0x2b88, 0x9006, 0x080c, 0x2b6b, 0x0028, 0x9286, 0x8000,
+	0x1d30, 0x2063, 0x0002, 0x00ce, 0x6888, 0xd0ec, 0x0130, 0x2011,
+	0x0114, 0x2204, 0x9085, 0x0100, 0x2012, 0x6a80, 0x9284, 0x0030,
+	0x9086, 0x0030, 0x1128, 0x9294, 0xffcf, 0x9295, 0x0020, 0x6a82,
+	0x2001, 0x197c, 0x6a80, 0x9294, 0x0030, 0x928e, 0x0000, 0x0170,
+	0x928e, 0x0010, 0x0118, 0x928e, 0x0020, 0x0140, 0x2003, 0xaaaa,
+	0x080c, 0x2956, 0x2001, 0x196d, 0x2102, 0x0008, 0x2102, 0x00c6,
+	0x2061, 0x0100, 0x602f, 0x0040, 0x602f, 0x0000, 0x00ce, 0x080c,
+	0x73bc, 0x0128, 0x080c, 0x4fdb, 0x0110, 0x080c, 0x28a7, 0x60d4,
+	0x9005, 0x01c0, 0x6003, 0x0001, 0x2009, 0x43c7, 0x00e0, 0x080c,
+	0x73bc, 0x1168, 0x2011, 0x7252, 0x080c, 0x84f3, 0x2011, 0x7245,
+	0x080c, 0x85cd, 0x080c, 0x76a9, 0x080c, 0x72ee, 0x0040, 0x080c,
+	0x5ed9, 0x0028, 0x6003, 0x0004, 0x2009, 0x43df, 0x0020, 0x080c,
+	0x68d4, 0x0804, 0x3524, 0x2001, 0x0170, 0x2004, 0x9084, 0x00ff,
+	0x9086, 0x004c, 0x1118, 0x2091, 0x30bd, 0x0817, 0x2091, 0x303d,
+	0x0817, 0x6000, 0x9086, 0x0000, 0x0904, 0x3556, 0x2069, 0x1847,
+	0x7890, 0x6842, 0x7894, 0x6846, 0x2d00, 0x2009, 0x0030, 0x7a8c,
+	0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x0804, 0x4af0, 0x9006,
+	0x080c, 0x28a7, 0x81ff, 0x1904, 0x3556, 0x080c, 0x73bc, 0x11b0,
+	0x080c, 0x76a4, 0x080c, 0x601a, 0x080c, 0x3319, 0x0118, 0x6130,
+	0xc18d, 0x6132, 0x080c, 0xd230, 0x0130, 0x080c, 0x73df, 0x1118,
+	0x080c, 0x7394, 0x0038, 0x080c, 0x72ee, 0x0020, 0x080c, 0x5fdf,
+	0x080c, 0x5ed9, 0x0804, 0x3524, 0x81ff, 0x1904, 0x3556, 0x080c,
+	0x73bc, 0x1110, 0x0804, 0x3556, 0x6194, 0x81ff, 0x01a8, 0x704f,
+	0x0000, 0x2001, 0x1c80, 0x2009, 0x0040, 0x7a8c, 0x7b88, 0x7c9c,
+	0x7d98, 0x0126, 0x2091, 0x8000, 0x2039, 0x0001, 0x080c, 0x4af0,
+	0x701f, 0x3522, 0x012e, 0x0005, 0x704f, 0x0001, 0x00d6, 0x2069,
+	0x1c80, 0x20a9, 0x0040, 0x20e9, 0x0001, 0x20a1, 0x1c80, 0x2019,
+	0xffff, 0x4304, 0x655c, 0x9588, 0x3325, 0x210d, 0x918c, 0x00ff,
+	0x216a, 0x900e, 0x2011, 0x0002, 0x2100, 0x9506, 0x01a8, 0x080c,
+	0x65ff, 0x1190, 0xb814, 0x821c, 0x0238, 0x9398, 0x1c80, 0x9085,
+	0xff00, 0x8007, 0x201a, 0x0038, 0x9398, 0x1c80, 0x2324, 0x94a4,
+	0xff00, 0x9405, 0x201a, 0x8210, 0x8108, 0x9182, 0x0080, 0x1208,
+	0x0c18, 0x8201, 0x8007, 0x2d0c, 0x9105, 0x206a, 0x00de, 0x20a9,
+	0x0040, 0x20a1, 0x1c80, 0x2099, 0x1c80, 0x080c, 0x5f6a, 0x0804,
+	0x4439, 0x080c, 0x4ad7, 0x0904, 0x3559, 0x080c, 0x4aa4, 0x1120,
+	0x2009, 0x0002, 0x0804, 0x3556, 0x080c, 0x56cf, 0xd0b4, 0x0558,
+	0x7884, 0x908e, 0x007e, 0x0538, 0x908e, 0x007f, 0x0520, 0x908e,
+	0x0080, 0x0508, 0x080c, 0x3314, 0x1148, 0xb800, 0xd08c, 0x11d8,
+	0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x11a8, 0xa867, 0x0000,
+	0xa868, 0xc0fd, 0xa86a, 0x080c, 0xccfe, 0x1120, 0x2009, 0x0003,
+	0x0804, 0x3556, 0x7007, 0x0003, 0x701f, 0x44c7, 0x0005, 0x080c,
+	0x4ad7, 0x0904, 0x3559, 0x20a9, 0x002b, 0xb8c4, 0x20e0, 0xb8c8,
+	0x2098, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003,
+	0x20a9, 0x0008, 0x9080, 0x0006, 0x20a0, 0xb8c4, 0x20e0, 0xb8c8,
+	0x9080, 0x0006, 0x2098, 0x080c, 0x0f7c, 0x0070, 0x20a9, 0x0004,
+	0xa85c, 0x9080, 0x000a, 0x20a0, 0xb8c4, 0x20e0, 0xb8c8, 0x9080,
+	0x000a, 0x2098, 0x080c, 0x0f7c, 0x8906, 0x8006, 0x8007, 0x90bc,
+	0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2009, 0x002b, 0x7a8c,
+	0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x4af0, 0x81ff, 0x1904, 0x3556,
+	0x080c, 0x4abb, 0x0904, 0x3559, 0x080c, 0x6771, 0x0904, 0x3556,
+	0x0058, 0xa878, 0x9005, 0x0120, 0x2009, 0x0004, 0x0804, 0x3556,
+	0xa974, 0xaa94, 0x0804, 0x3524, 0x080c, 0x56d7, 0x0904, 0x3524,
+	0x701f, 0x4511, 0x7007, 0x0003, 0x0005, 0x81ff, 0x1904, 0x3556,
+	0x7888, 0x908a, 0x1000, 0x1a04, 0x3559, 0x080c, 0x4ad7, 0x0904,
+	0x3559, 0x080c, 0x6972, 0x0120, 0x080c, 0x697a, 0x1904, 0x3559,
+	0x080c, 0x67f6, 0x0904, 0x3556, 0x2019, 0x0004, 0x900e, 0x080c,
+	0x6783, 0x0904, 0x3556, 0x7984, 0x7a88, 0x04c9, 0x08a8, 0xa89c,
+	0x908a, 0x1000, 0x12f8, 0x080c, 0x4ad5, 0x01e0, 0x080c, 0x6972,
+	0x0118, 0x080c, 0x697a, 0x11b0, 0x080c, 0x67f6, 0x2009, 0x0002,
+	0x0168, 0x2009, 0x0002, 0x2019, 0x0004, 0x080c, 0x6783, 0x2009,
+	0x0003, 0x0120, 0xa998, 0xaa9c, 0x00d1, 0x0060, 0xa897, 0x4005,
+	0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001,
+	0x0030, 0x0005, 0xa897, 0x4000, 0x080c, 0x56d7, 0x0110, 0x9006,
+	0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x9186,
+	0x00ff, 0x0110, 0x0071, 0x0060, 0x2029, 0x007e, 0x2061, 0x1800,
+	0x645c, 0x2400, 0x9506, 0x0110, 0x2508, 0x0019, 0x8529, 0x1ec8,
+	0x0005, 0x080c, 0x65ff, 0x1138, 0x2200, 0x8003, 0x800b, 0x810b,
+	0x9108, 0x080c, 0x8501, 0x0005, 0x81ff, 0x1904, 0x3556, 0x798c,
+	0x2001, 0x1980, 0x918c, 0x8000, 0x2102, 0x080c, 0x4abb, 0x0904,
+	0x3559, 0x080c, 0x6972, 0x0120, 0x080c, 0x697a, 0x1904, 0x3559,
+	0x080c, 0x66c6, 0x0904, 0x3556, 0x080c, 0x677a, 0x0904, 0x3556,
+	0x2001, 0x1980, 0x2004, 0xd0fc, 0x1904, 0x3524, 0x0804, 0x451c,
+	0xa9a0, 0x2001, 0x1980, 0x918c, 0x8000, 0xc18d, 0x2102, 0x080c,
+	0x4ac8, 0x01a0, 0x080c, 0x6972, 0x0118, 0x080c, 0x697a, 0x1170,
+	0x080c, 0x66c6, 0x2009, 0x0002, 0x0128, 0x080c, 0x677a, 0x1170,
+	0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006,
+	0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000,
+	0x2001, 0x1980, 0x2004, 0xd0fc, 0x1128, 0x080c, 0x56d7, 0x0110,
 	0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005,
-	0x9186, 0x00ff, 0x0110, 0x0071, 0x0060, 0x2029, 0x007e, 0x2061,
-	0x1800, 0x645c, 0x2400, 0x9506, 0x0110, 0x2508, 0x0019, 0x8529,
-	0x1ec8, 0x0005, 0x080c, 0x6600, 0x1138, 0x2200, 0x8003, 0x800b,
-	0x810b, 0x9108, 0x080c, 0x84d8, 0x0005, 0x81ff, 0x1904, 0x354f,
-	0x798c, 0x2001, 0x1980, 0x918c, 0x8000, 0x2102, 0x080c, 0x4abc,
-	0x0904, 0x3552, 0x080c, 0x696a, 0x0120, 0x080c, 0x6972, 0x1904,
-	0x3552, 0x080c, 0x66c7, 0x0904, 0x354f, 0x080c, 0x677b, 0x0904,
-	0x354f, 0x2001, 0x1980, 0x2004, 0xd0fc, 0x1904, 0x351d, 0x0804,
-	0x451d, 0xa9a0, 0x2001, 0x1980, 0x918c, 0x8000, 0xc18d, 0x2102,
-	0x080c, 0x4ac9, 0x01a0, 0x080c, 0x696a, 0x0118, 0x080c, 0x6972,
-	0x1170, 0x080c, 0x66c7, 0x2009, 0x0002, 0x0128, 0x080c, 0x677b,
-	0x1170, 0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897,
-	0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897,
-	0x4000, 0x2001, 0x1980, 0x2004, 0xd0fc, 0x1128, 0x080c, 0x56d8,
-	0x0110, 0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000,
-	0x0005, 0x81ff, 0x1904, 0x354f, 0x798c, 0x2001, 0x197f, 0x918c,
-	0x8000, 0x2102, 0x080c, 0x4abc, 0x0904, 0x3552, 0x080c, 0x696a,
-	0x0120, 0x080c, 0x6972, 0x1904, 0x3552, 0x080c, 0x66c7, 0x0904,
-	0x354f, 0x080c, 0x6769, 0x0904, 0x354f, 0x2001, 0x197f, 0x2004,
-	0xd0fc, 0x1904, 0x351d, 0x0804, 0x451d, 0xa9a0, 0x2001, 0x197f,
-	0x918c, 0x8000, 0xc18d, 0x2102, 0x080c, 0x4ac9, 0x01a0, 0x080c,
-	0x696a, 0x0118, 0x080c, 0x6972, 0x1170, 0x080c, 0x66c7, 0x2009,
-	0x0002, 0x0128, 0x080c, 0x6769, 0x1170, 0x2009, 0x0003, 0xa897,
-	0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001,
-	0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0x2001, 0x197f, 0x2004,
-	0xd0fc, 0x1128, 0x080c, 0x56d8, 0x0110, 0x9006, 0x0018, 0x900e,
-	0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x6100, 0x0804, 0x351d,
-	0x080c, 0x4ad8, 0x0904, 0x3552, 0x080c, 0x56e4, 0x1904, 0x354f,
-	0x79a8, 0xd184, 0x1158, 0xb834, 0x8007, 0x789e, 0xb830, 0x8007,
-	0x789a, 0xbb2c, 0x831f, 0xba28, 0x8217, 0x0050, 0xb824, 0x8007,
-	0x789e, 0xb820, 0x8007, 0x789a, 0xbb1c, 0x831f, 0xba18, 0x8217,
-	0xb900, 0x918c, 0x0200, 0x0804, 0x351d, 0x78a8, 0x909c, 0x0003,
-	0xd0b4, 0x1148, 0x939a, 0x0003, 0x1a04, 0x354f, 0x625c, 0x7884,
-	0x9206, 0x1904, 0x46ca, 0x080c, 0x85b0, 0x2001, 0xfff4, 0x2009,
-	0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0000, 0x0006,
-	0x78a8, 0x9084, 0x0080, 0x11c8, 0x0006, 0x0036, 0x2001, 0x1a7f,
-	0x201c, 0x7b9a, 0x2003, 0x0000, 0x2001, 0x1a80, 0x201c, 0x7b9e,
-	0x2003, 0x0000, 0x2001, 0x1a81, 0x201c, 0x7ba2, 0x2003, 0x0000,
-	0x003e, 0x000e, 0x000e, 0x0804, 0x4af1, 0x000e, 0x2031, 0x0000,
-	0x2061, 0x18b8, 0x2c44, 0xa66a, 0xa17a, 0xa772, 0xa076, 0xa28e,
-	0xa392, 0xa496, 0xa59a, 0x080c, 0x10e9, 0x7007, 0x0002, 0x701f,
-	0x46ea, 0x0005, 0x81ff, 0x1904, 0x354f, 0x080c, 0x4ad8, 0x0904,
-	0x3552, 0x080c, 0x696a, 0x1904, 0x354f, 0x00c6, 0x080c, 0x4aa5,
-	0x00ce, 0x0904, 0x354f, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a,
-	0x7ea8, 0x080c, 0xcc8a, 0x0904, 0x354f, 0x7007, 0x0003, 0x701f,
-	0x4704, 0x0005, 0x080c, 0x4207, 0x0006, 0x0036, 0x2001, 0x1a7f,
-	0x201c, 0x7b9a, 0x2003, 0x0000, 0x2001, 0x1a80, 0x201c, 0x7b9e,
-	0x2003, 0x0000, 0x2001, 0x1a81, 0x201c, 0x7ba2, 0x2003, 0x0000,
-	0x003e, 0x000e, 0x0804, 0x351d, 0xa830, 0x9086, 0x0100, 0x0904,
-	0x354f, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0,
-	0x9080, 0x001b, 0x2009, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98,
-	0x0804, 0x4af1, 0x9006, 0x080c, 0x28a7, 0x78a8, 0x9084, 0x00ff,
-	0x9086, 0x00ff, 0x0118, 0x81ff, 0x1904, 0x354f, 0x080c, 0x73b0,
-	0x0110, 0x080c, 0x5fe0, 0x7888, 0x908a, 0x1000, 0x1a04, 0x3552,
-	0x7984, 0x9186, 0x00ff, 0x0138, 0x9182, 0x007f, 0x1a04, 0x3552,
-	0x2100, 0x080c, 0x2871, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000,
-	0x2061, 0x19fa, 0x601b, 0x0000, 0x601f, 0x0000, 0x6073, 0x0000,
-	0x6077, 0x0000, 0x080c, 0x73b0, 0x1158, 0x080c, 0x7698, 0x080c,
-	0x601b, 0x9085, 0x0001, 0x080c, 0x73f7, 0x080c, 0x72e2, 0x00d0,
-	0x080c, 0xadb8, 0x2061, 0x0100, 0x2001, 0x1818, 0x2004, 0x9084,
-	0x00ff, 0x810f, 0x9105, 0x604a, 0x6043, 0x0090, 0x6043, 0x0010,
-	0x2009, 0x1999, 0x200b, 0x0000, 0x2009, 0x002d, 0x2011, 0x5f06,
-	0x080c, 0x8562, 0x7984, 0x080c, 0x73b0, 0x1110, 0x2009, 0x00ff,
-	0x7a88, 0x080c, 0x4580, 0x012e, 0x00ce, 0x002e, 0x0804, 0x351d,
-	0x7984, 0x080c, 0x659f, 0x2b08, 0x1904, 0x3552, 0x0804, 0x351d,
-	0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x354f, 0x60dc, 0xd0ac,
-	0x1130, 0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, 0x354f, 0x080c,
-	0x4aa5, 0x1120, 0x2009, 0x0002, 0x0804, 0x354f, 0x7984, 0x9192,
-	0x0021, 0x1a04, 0x3552, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c,
-	0x9080, 0x0019, 0x702a, 0xaf60, 0x7736, 0x080c, 0x4aee, 0x701f,
-	0x47b8, 0x7880, 0x9086, 0x006e, 0x0110, 0x701f, 0x518e, 0x0005,
-	0x2009, 0x0080, 0x080c, 0x6600, 0x1118, 0x080c, 0x696a, 0x0120,
-	0x2021, 0x400a, 0x0804, 0x351f, 0x00d6, 0x0096, 0xa964, 0xaa6c,
-	0xab70, 0xac74, 0xad78, 0xae7c, 0xa884, 0x90be, 0x0100, 0x0904,
-	0x4851, 0x90be, 0x0112, 0x0904, 0x4851, 0x90be, 0x0113, 0x0904,
-	0x4851, 0x90be, 0x0114, 0x0904, 0x4851, 0x90be, 0x0117, 0x0904,
-	0x4851, 0x90be, 0x011a, 0x0904, 0x4851, 0x90be, 0x011c, 0x0904,
-	0x4851, 0x90be, 0x0121, 0x0904, 0x4838, 0x90be, 0x0131, 0x0904,
-	0x4838, 0x90be, 0x0171, 0x0904, 0x4851, 0x90be, 0x0173, 0x0904,
-	0x4851, 0x90be, 0x01a1, 0x1128, 0xa894, 0x8007, 0xa896, 0x0804,
-	0x485c, 0x90be, 0x0212, 0x0904, 0x4845, 0x90be, 0x0213, 0x05e8,
-	0x90be, 0x0214, 0x0500, 0x90be, 0x0217, 0x0188, 0x90be, 0x021a,
-	0x1120, 0xa89c, 0x8007, 0xa89e, 0x04e0, 0x90be, 0x021f, 0x05c8,
-	0x90be, 0x0300, 0x05b0, 0x009e, 0x00de, 0x0804, 0x3552, 0x7028,
-	0x9080, 0x0010, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9,
-	0x0007, 0x080c, 0x489a, 0x7028, 0x9080, 0x000e, 0x2098, 0x20a0,
-	0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x489a, 0x00c8,
-	0x7028, 0x9080, 0x000c, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8,
-	0x20a9, 0x0001, 0x080c, 0x48a7, 0x00b8, 0x7028, 0x9080, 0x000e,
-	0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c,
-	0x48a7, 0x7028, 0x9080, 0x000c, 0x2098, 0x20a0, 0x7034, 0x20e0,
-	0x20e8, 0x20a9, 0x0001, 0x04f1, 0x00c6, 0x080c, 0x4aa5, 0x0550,
-	0xa868, 0xc0fd, 0xa86a, 0xa867, 0x0119, 0x9006, 0xa882, 0xa87f,
-	0x0020, 0xa88b, 0x0001, 0x810b, 0xa9ae, 0xa8b2, 0xaab6, 0xabba,
-	0xacbe, 0xadc2, 0xa9c6, 0xa8ca, 0x00ce, 0x009e, 0x00de, 0xa866,
-	0xa822, 0xa868, 0xc0fd, 0xa86a, 0xa804, 0x2048, 0x080c, 0xcca5,
-	0x1120, 0x2009, 0x0003, 0x0804, 0x354f, 0x7007, 0x0003, 0x701f,
-	0x4891, 0x0005, 0x00ce, 0x009e, 0x00de, 0x2009, 0x0002, 0x0804,
-	0x354f, 0xa820, 0x9086, 0x8001, 0x1904, 0x351d, 0x2009, 0x0004,
-	0x0804, 0x354f, 0x0016, 0x0026, 0x3510, 0x20a9, 0x0002, 0x4002,
-	0x4104, 0x4004, 0x8211, 0x1dc8, 0x002e, 0x001e, 0x0005, 0x0016,
-	0x0026, 0x0036, 0x0046, 0x3520, 0x20a9, 0x0004, 0x4002, 0x4304,
-	0x4204, 0x4104, 0x4004, 0x8421, 0x1db8, 0x004e, 0x003e, 0x002e,
-	0x001e, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x354f,
-	0x60dc, 0xd0ac, 0x1130, 0xd09c, 0x1120, 0x2009, 0x0005, 0x0804,
-	0x354f, 0x7984, 0x78a8, 0x2040, 0x080c, 0xadb1, 0x1120, 0x9182,
-	0x007f, 0x0a04, 0x3552, 0x9186, 0x00ff, 0x0904, 0x3552, 0x9182,
-	0x0800, 0x1a04, 0x3552, 0x7a8c, 0x7b88, 0x607c, 0x9306, 0x1140,
-	0x6080, 0x924e, 0x0904, 0x3552, 0x99cc, 0xff00, 0x0904, 0x3552,
-	0x0126, 0x2091, 0x8000, 0x080c, 0x49b8, 0x0904, 0x4938, 0x0086,
-	0x90c6, 0x4000, 0x008e, 0x1538, 0x00c6, 0x0006, 0x0036, 0xb818,
-	0xbb1c, 0x9305, 0xbb20, 0x9305, 0xbb24, 0x9305, 0xbb28, 0x9305,
-	0xbb2c, 0x9305, 0xbb30, 0x9305, 0xbb34, 0x9305, 0x003e, 0x0570,
-	0xd88c, 0x1128, 0x080c, 0x696a, 0x0110, 0xc89d, 0x0438, 0x900e,
-	0x080c, 0x6820, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d,
-	0x000e, 0x00ce, 0x00b8, 0x90c6, 0x4007, 0x1110, 0x2408, 0x0090,
-	0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0060, 0x90c6, 0x4009,
-	0x1108, 0x0040, 0x90c6, 0x4006, 0x1108, 0x0020, 0x2001, 0x4005,
-	0x2009, 0x000a, 0x2020, 0x012e, 0x0804, 0x351f, 0x000e, 0x00ce,
-	0x2b00, 0x7026, 0x0016, 0x00b6, 0x00c6, 0x00e6, 0x2c70, 0x080c,
-	0xae95, 0x0904, 0x498d, 0x2b00, 0x6012, 0x080c, 0xcf90, 0x2e58,
-	0x00ee, 0x00e6, 0x00c6, 0x080c, 0x4aa5, 0x00ce, 0x2b70, 0x1158,
-	0x080c, 0xae47, 0x00ee, 0x00ce, 0x00be, 0x001e, 0x012e, 0x2009,
-	0x0002, 0x0804, 0x354f, 0x900e, 0xa966, 0xa96a, 0x2900, 0x6016,
-	0xa932, 0xa868, 0xc0fd, 0xd88c, 0x0108, 0xc0f5, 0xa86a, 0xd89c,
-	0x1110, 0x080c, 0x31bc, 0x6023, 0x0001, 0x9006, 0x080c, 0x653c,
-	0xd89c, 0x0138, 0x2001, 0x0004, 0x080c, 0x6550, 0x2009, 0x0003,
-	0x0030, 0x2001, 0x0002, 0x080c, 0x6550, 0x2009, 0x0002, 0x080c,
-	0xaec2, 0x78a8, 0xd094, 0x0138, 0x00ee, 0x7024, 0x00e6, 0x2058,
-	0xb8cc, 0xc08d, 0xb8ce, 0x9085, 0x0001, 0x00ee, 0x00ce, 0x00be,
-	0x001e, 0x012e, 0x1120, 0x2009, 0x0003, 0x0804, 0x354f, 0x7007,
-	0x0003, 0x701f, 0x499c, 0x0005, 0xa830, 0x9086, 0x0100, 0x7024,
-	0x2058, 0x1138, 0x2009, 0x0004, 0xba04, 0x9294, 0x00ff, 0x0804,
-	0x562d, 0x900e, 0xa868, 0xd0f4, 0x1904, 0x351d, 0x080c, 0x6820,
-	0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x0804, 0x351d,
-	0x00e6, 0x00d6, 0x0096, 0x83ff, 0x0904, 0x4a07, 0x902e, 0x080c,
-	0xadb1, 0x0130, 0x9026, 0x20a9, 0x0800, 0x2071, 0x1000, 0x0030,
-	0x2021, 0x007f, 0x20a9, 0x0781, 0x2071, 0x107f, 0x2e04, 0x9005,
-	0x11b8, 0x2100, 0x9406, 0x1904, 0x4a18, 0x2428, 0x94ce, 0x007f,
-	0x1120, 0x92ce, 0xfffd, 0x1558, 0x0030, 0x94ce, 0x0080, 0x1130,
-	0x92ce, 0xfffc, 0x1520, 0x93ce, 0x00ff, 0x1508, 0xc5fd, 0x0480,
-	0x2058, 0xbf10, 0x2700, 0x9306, 0x11e8, 0xbe14, 0x2600, 0x9206,
-	0x11c8, 0x2400, 0x9106, 0x1180, 0xd884, 0x0598, 0xd894, 0x1588,
-	0x080c, 0x690a, 0x1570, 0x2001, 0x4000, 0x0460, 0x080c, 0x696a,
-	0x1540, 0x2001, 0x4000, 0x0430, 0x2001, 0x4007, 0x0418, 0x2001,
-	0x4006, 0x0400, 0x2400, 0x9106, 0x1158, 0xbe14, 0x87ff, 0x1128,
-	0x86ff, 0x0918, 0x080c, 0xadb1, 0x1900, 0x2001, 0x4008, 0x0090,
-	0x8420, 0x8e70, 0x1f04, 0x49ce, 0x85ff, 0x1130, 0x2001, 0x4009,
-	0x0048, 0x2001, 0x0001, 0x0030, 0x080c, 0x659f, 0x1dd0, 0xbb12,
-	0xba16, 0x9006, 0x9005, 0x009e, 0x00de, 0x00ee, 0x0005, 0x81ff,
-	0x0120, 0x2009, 0x0001, 0x0804, 0x354f, 0x080c, 0x4aa5, 0x1120,
-	0x2009, 0x0002, 0x0804, 0x354f, 0xa867, 0x0000, 0xa868, 0xc0fd,
-	0xa86a, 0x7884, 0x9005, 0x0904, 0x3552, 0x9096, 0x00ff, 0x0120,
-	0x9092, 0x0004, 0x1a04, 0x3552, 0x2010, 0x2918, 0x080c, 0x3162,
-	0x1120, 0x2009, 0x0003, 0x0804, 0x354f, 0x7007, 0x0003, 0x701f,
-	0x4a5a, 0x0005, 0xa830, 0x9086, 0x0100, 0x1904, 0x351d, 0x2009,
-	0x0004, 0x0804, 0x354f, 0x7984, 0x080c, 0xadb1, 0x1120, 0x9182,
-	0x007f, 0x0a04, 0x3552, 0x9186, 0x00ff, 0x0904, 0x3552, 0x9182,
-	0x0800, 0x1a04, 0x3552, 0x2001, 0x9000, 0x080c, 0x5688, 0x1904,
-	0x354f, 0x0804, 0x351d, 0xa998, 0x080c, 0xadb1, 0x1118, 0x9182,
-	0x007f, 0x0280, 0x9186, 0x00ff, 0x0168, 0x9182, 0x0800, 0x1250,
-	0x2001, 0x9000, 0x080c, 0x5688, 0x11a8, 0x0060, 0xa897, 0x4005,
+	0x81ff, 0x1904, 0x3556, 0x798c, 0x2001, 0x197f, 0x918c, 0x8000,
+	0x2102, 0x080c, 0x4abb, 0x0904, 0x3559, 0x080c, 0x6972, 0x0120,
+	0x080c, 0x697a, 0x1904, 0x3559, 0x080c, 0x66c6, 0x0904, 0x3556,
+	0x080c, 0x6768, 0x0904, 0x3556, 0x2001, 0x197f, 0x2004, 0xd0fc,
+	0x1904, 0x3524, 0x0804, 0x451c, 0xa9a0, 0x2001, 0x197f, 0x918c,
+	0x8000, 0xc18d, 0x2102, 0x080c, 0x4ac8, 0x01a0, 0x080c, 0x6972,
+	0x0118, 0x080c, 0x697a, 0x1170, 0x080c, 0x66c6, 0x2009, 0x0002,
+	0x0128, 0x080c, 0x6768, 0x1170, 0x2009, 0x0003, 0xa897, 0x4005,
 	0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001,
-	0x0030, 0x0005, 0xa897, 0x4000, 0x900e, 0x9085, 0x0001, 0x2001,
-	0x0000, 0x0005, 0x2009, 0x000a, 0x0c48, 0x080c, 0x0fff, 0x0198,
-	0x9006, 0xa802, 0x7014, 0x9005, 0x1120, 0x2900, 0x7016, 0x701a,
-	0x0040, 0x7018, 0xa802, 0x0086, 0x2040, 0x2900, 0xa006, 0x701a,
-	0x008e, 0x9085, 0x0001, 0x0005, 0x7984, 0x080c, 0x6600, 0x1130,
-	0x7e88, 0x9684, 0x3fff, 0x9082, 0x4000, 0x0208, 0x905e, 0x8bff,
-	0x0005, 0xa998, 0x080c, 0x6600, 0x1130, 0xae9c, 0x9684, 0x3fff,
-	0x9082, 0x4000, 0x0208, 0x905e, 0x8bff, 0x0005, 0xae98, 0x0008,
-	0x7e84, 0x2608, 0x080c, 0x6600, 0x1108, 0x0008, 0x905e, 0x8bff,
-	0x0005, 0x0016, 0x7114, 0x81ff, 0x0128, 0x2148, 0xa904, 0x080c,
-	0x1031, 0x0cc8, 0x7116, 0x711a, 0x001e, 0x0005, 0x2031, 0x0001,
-	0x0010, 0x2031, 0x0000, 0x2061, 0x18b8, 0x2c44, 0xa66a, 0xa17a,
-	0xa772, 0xa076, 0xa28e, 0xa392, 0xa496, 0xa59a, 0x080c, 0x10e9,
-	0x7007, 0x0002, 0x701f, 0x351d, 0x0005, 0x00f6, 0x0126, 0x2091,
-	0x8000, 0x2079, 0x0000, 0x2001, 0x18b0, 0x2004, 0x9005, 0x1190,
-	0x0e04, 0x4b22, 0x7a36, 0x7833, 0x0012, 0x7a82, 0x7b86, 0x7c8a,
-	0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119b,
-	0x0804, 0x4b88, 0x0016, 0x0086, 0x0096, 0x00c6, 0x00e6, 0x2071,
-	0x189e, 0x7044, 0x9005, 0x1540, 0x7148, 0x9182, 0x0010, 0x0288,
-	0x7038, 0x2060, 0x080c, 0x0fff, 0x0904, 0x4b80, 0xa84b, 0x0000,
-	0x2900, 0x7046, 0x2001, 0x0002, 0x9080, 0x2090, 0x2005, 0xa846,
-	0x0098, 0x7038, 0x90e0, 0x0004, 0x2001, 0x18ba, 0x9c82, 0x18fa,
-	0x0210, 0x2061, 0x18ba, 0x2c00, 0x703a, 0x7148, 0x81ff, 0x1108,
-	0x703e, 0x8108, 0x714a, 0x0460, 0x7148, 0x8108, 0x714a, 0x7044,
-	0x2040, 0xa144, 0x2105, 0x0016, 0x908a, 0x0036, 0x1a0c, 0x0dd5,
-	0x2060, 0x001e, 0x8108, 0x2105, 0x9005, 0xa146, 0x1520, 0x080c,
-	0x0fff, 0x1130, 0x8109, 0xa946, 0x7148, 0x8109, 0x714a, 0x00d8,
-	0x9006, 0xa806, 0xa84a, 0xa046, 0x2800, 0xa802, 0x2900, 0xa006,
-	0x7046, 0x2001, 0x0002, 0x9080, 0x2090, 0x2005, 0xa846, 0x0058,
-	0x2262, 0x6306, 0x640a, 0x00ee, 0x00ce, 0x009e, 0x008e, 0x001e,
-	0x012e, 0x00fe, 0x0005, 0x2c00, 0x9082, 0x001b, 0x0002, 0x4baa,
-	0x4baa, 0x4bac, 0x4baa, 0x4baa, 0x4baa, 0x4bb0, 0x4baa, 0x4baa,
-	0x4baa, 0x4bb4, 0x4baa, 0x4baa, 0x4baa, 0x4bb8, 0x4baa, 0x4baa,
-	0x4baa, 0x4bbc, 0x4baa, 0x4baa, 0x4baa, 0x4bc0, 0x4baa, 0x4baa,
-	0x4baa, 0x4bc5, 0x080c, 0x0dd5, 0xa276, 0xa37a, 0xa47e, 0x0898,
-	0xa286, 0xa38a, 0xa48e, 0x0878, 0xa296, 0xa39a, 0xa49e, 0x0858,
-	0xa2a6, 0xa3aa, 0xa4ae, 0x0838, 0xa2b6, 0xa3ba, 0xa4be, 0x0818,
-	0xa2c6, 0xa3ca, 0xa4ce, 0x0804, 0x4b83, 0xa2d6, 0xa3da, 0xa4de,
-	0x0804, 0x4b83, 0x00e6, 0x2071, 0x189e, 0x7048, 0x9005, 0x0904,
-	0x4c5c, 0x0126, 0x2091, 0x8000, 0x0e04, 0x4c5b, 0x00f6, 0x2079,
-	0x0000, 0x00c6, 0x0096, 0x0086, 0x0076, 0x9006, 0x2038, 0x7040,
-	0x2048, 0x9005, 0x0500, 0xa948, 0x2105, 0x0016, 0x908a, 0x0036,
-	0x1a0c, 0x0dd5, 0x2060, 0x001e, 0x8108, 0x2105, 0x9005, 0xa94a,
-	0x1904, 0x4c5e, 0xa804, 0x9005, 0x090c, 0x0dd5, 0x7042, 0x2938,
-	0x2040, 0xa003, 0x0000, 0x2001, 0x0002, 0x9080, 0x2090, 0x2005,
-	0xa04a, 0x0804, 0x4c5e, 0x703c, 0x2060, 0x2c14, 0x6304, 0x6408,
-	0x650c, 0x2200, 0x7836, 0x7833, 0x0012, 0x7882, 0x2300, 0x7886,
-	0x2400, 0x788a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,
-	0x190c, 0x119b, 0x87ff, 0x0118, 0x2748, 0x080c, 0x1031, 0x7048,
-	0x8001, 0x704a, 0x9005, 0x1170, 0x7040, 0x2048, 0x9005, 0x0128,
-	0x080c, 0x1031, 0x9006, 0x7042, 0x7046, 0x703b, 0x18ba, 0x703f,
-	0x18ba, 0x0420, 0x7040, 0x9005, 0x1508, 0x7238, 0x2c00, 0x9206,
-	0x0148, 0x9c80, 0x0004, 0x90fa, 0x18fa, 0x0210, 0x2001, 0x18ba,
-	0x703e, 0x00a0, 0x9006, 0x703e, 0x703a, 0x7044, 0x9005, 0x090c,
-	0x0dd5, 0x2048, 0xa800, 0x9005, 0x1de0, 0x2900, 0x7042, 0x2001,
-	0x0002, 0x9080, 0x2090, 0x2005, 0xa84a, 0x0000, 0x007e, 0x008e,
-	0x009e, 0x00ce, 0x00fe, 0x012e, 0x00ee, 0x0005, 0x2c00, 0x9082,
-	0x001b, 0x0002, 0x4c7d, 0x4c7d, 0x4c7f, 0x4c7d, 0x4c7d, 0x4c7d,
-	0x4c84, 0x4c7d, 0x4c7d, 0x4c7d, 0x4c89, 0x4c7d, 0x4c7d, 0x4c7d,
-	0x4c8e, 0x4c7d, 0x4c7d, 0x4c7d, 0x4c93, 0x4c7d, 0x4c7d, 0x4c7d,
-	0x4c98, 0x4c7d, 0x4c7d, 0x4c7d, 0x4c9d, 0x080c, 0x0dd5, 0xaa74,
-	0xab78, 0xac7c, 0x0804, 0x4c09, 0xaa84, 0xab88, 0xac8c, 0x0804,
-	0x4c09, 0xaa94, 0xab98, 0xac9c, 0x0804, 0x4c09, 0xaaa4, 0xaba8,
-	0xacac, 0x0804, 0x4c09, 0xaab4, 0xabb8, 0xacbc, 0x0804, 0x4c09,
-	0xaac4, 0xabc8, 0xaccc, 0x0804, 0x4c09, 0xaad4, 0xabd8, 0xacdc,
-	0x0804, 0x4c09, 0x0016, 0x0026, 0x0036, 0x00b6, 0x00c6, 0x2009,
-	0x007e, 0x080c, 0x6600, 0x2019, 0x0001, 0xb85c, 0xd0ac, 0x0110,
-	0x2019, 0x0000, 0x2011, 0x801b, 0x080c, 0x4b05, 0x00ce, 0x00be,
-	0x003e, 0x002e, 0x001e, 0x0005, 0x0026, 0x080c, 0x56d0, 0xd0c4,
-	0x0120, 0x2011, 0x8014, 0x080c, 0x4b05, 0x002e, 0x0005, 0x81ff,
-	0x1904, 0x354f, 0x0126, 0x2091, 0x8000, 0x6030, 0xc08d, 0xc085,
-	0xc0ac, 0x6032, 0x080c, 0x73b0, 0x1158, 0x080c, 0x7698, 0x080c,
-	0x601b, 0x9085, 0x0001, 0x080c, 0x73f7, 0x080c, 0x72e2, 0x0010,
-	0x080c, 0x5eda, 0x012e, 0x0804, 0x351d, 0x81ff, 0x0120, 0x2009,
-	0x0001, 0x0804, 0x354f, 0x080c, 0x56e4, 0x0120, 0x2009, 0x0007,
-	0x0804, 0x354f, 0x080c, 0x6962, 0x0120, 0x2009, 0x0008, 0x0804,
-	0x354f, 0x080c, 0x330d, 0x0128, 0x7984, 0x080c, 0x659f, 0x1904,
-	0x3552, 0x080c, 0x4ad8, 0x0904, 0x3552, 0x2b00, 0x7026, 0x080c,
-	0x696a, 0x7888, 0x1170, 0x9084, 0x0005, 0x1158, 0x900e, 0x080c,
-	0x6820, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x0804,
-	0x351d, 0x080c, 0x4aa5, 0x0904, 0x354f, 0x9006, 0xa866, 0xa832,
-	0xa868, 0xc0fd, 0xa86a, 0x080c, 0xcd3e, 0x0904, 0x354f, 0x7888,
-	0xd094, 0x0118, 0xb8cc, 0xc08d, 0xb8ce, 0x7007, 0x0003, 0x701f,
-	0x4d7e, 0x0005, 0x2061, 0x1800, 0x080c, 0x56e4, 0x2009, 0x0007,
-	0x1578, 0x080c, 0x6962, 0x0118, 0x2009, 0x0008, 0x0448, 0x080c,
-	0x330d, 0x0120, 0xa998, 0x080c, 0x659f, 0x1530, 0x080c, 0x4ad6,
-	0x0518, 0x080c, 0x696a, 0xa89c, 0x1168, 0x9084, 0x0005, 0x1150,
-	0x900e, 0x080c, 0x6820, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108,
-	0xc18d, 0x00d0, 0xa868, 0xc0fc, 0xa86a, 0x080c, 0xcd3e, 0x11e0,
-	0xa89c, 0xd094, 0x0118, 0xb8cc, 0xc08d, 0xb8ce, 0x2009, 0x0003,
-	0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085,
-	0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0xa99a, 0x9006,
-	0x918d, 0x0001, 0x2008, 0x0005, 0x9006, 0x0005, 0xa830, 0x9086,
-	0x0100, 0x7024, 0x2058, 0x1110, 0x0804, 0x562d, 0x900e, 0x080c,
-	0x6820, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x0804,
-	0x351d, 0x080c, 0x56e4, 0x0120, 0x2009, 0x0007, 0x0804, 0x354f,
-	0x7f84, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x080c, 0x4aa5, 0x1120,
-	0x2009, 0x0002, 0x0804, 0x354f, 0x900e, 0x2130, 0x7126, 0x7132,
-	0xa860, 0x20e8, 0x7036, 0xa85c, 0x9080, 0x0005, 0x702a, 0x20a0,
-	0x080c, 0x6600, 0x1904, 0x4e20, 0x080c, 0x696a, 0x0138, 0x080c,
-	0x6972, 0x0120, 0x080c, 0x690a, 0x1904, 0x4e20, 0xd794, 0x1110,
-	0xd784, 0x01a8, 0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x0006, 0x2098,
-	0x3400, 0xd794, 0x0160, 0x20a9, 0x0008, 0x4003, 0x2098, 0x20a0,
-	0x3d00, 0x20e0, 0x20a9, 0x0002, 0x080c, 0x48a7, 0x0048, 0x20a9,
-	0x0004, 0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x080c, 0x48a7,
-	0x9186, 0x007e, 0x0170, 0x9186, 0x0080, 0x0158, 0x080c, 0x696a,
-	0x90c2, 0x0006, 0x1210, 0xc1fd, 0x0020, 0x080c, 0x6820, 0x1108,
-	0xc1fd, 0x4104, 0xc1fc, 0xd794, 0x0528, 0xb8c4, 0x20e0, 0xb8c8,
-	0x2060, 0x9c80, 0x0000, 0x2098, 0x20a9, 0x0002, 0x4003, 0x9c80,
-	0x0003, 0x2098, 0x20a9, 0x0001, 0x4005, 0x9c80, 0x0004, 0x2098,
-	0x3400, 0x20a9, 0x0002, 0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0,
-	0x080c, 0x489a, 0x9c80, 0x0026, 0x2098, 0xb8c4, 0x20e0, 0x20a9,
-	0x0002, 0x4003, 0xd794, 0x0110, 0x96b0, 0x000b, 0x96b0, 0x0005,
-	0x8108, 0x080c, 0xadb1, 0x0118, 0x9186, 0x0800, 0x0040, 0xd78c,
-	0x0120, 0x9186, 0x0800, 0x0170, 0x0018, 0x9186, 0x007e, 0x0150,
-	0xd794, 0x0118, 0x9686, 0x0020, 0x0010, 0x9686, 0x0028, 0x0150,
-	0x0804, 0x4db0, 0x86ff, 0x1120, 0x7124, 0x810b, 0x0804, 0x351d,
-	0x7033, 0x0001, 0x7122, 0x7024, 0x9600, 0x7026, 0x772e, 0x2061,
-	0x18b8, 0x2c44, 0xa06b, 0x0000, 0xa67a, 0x7034, 0xa072, 0x7028,
+	0x0030, 0x0005, 0xa897, 0x4000, 0x2001, 0x197f, 0x2004, 0xd0fc,
+	0x1128, 0x080c, 0x56d7, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085,
+	0x0001, 0x2001, 0x0000, 0x0005, 0x6100, 0x0804, 0x3524, 0x080c,
+	0x4ad7, 0x0904, 0x3559, 0x080c, 0x56e3, 0x1904, 0x3556, 0x79a8,
+	0xd184, 0x1158, 0xb834, 0x8007, 0x789e, 0xb830, 0x8007, 0x789a,
+	0xbb2c, 0x831f, 0xba28, 0x8217, 0x0050, 0xb824, 0x8007, 0x789e,
+	0xb820, 0x8007, 0x789a, 0xbb1c, 0x831f, 0xba18, 0x8217, 0xb900,
+	0x918c, 0x0200, 0x0804, 0x3524, 0x78a8, 0x909c, 0x0003, 0xd0b4,
+	0x1148, 0x939a, 0x0003, 0x1a04, 0x3556, 0x625c, 0x7884, 0x9206,
+	0x1904, 0x46c9, 0x080c, 0x85d9, 0x2001, 0xfff4, 0x2009, 0x000c,
+	0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0000, 0x0006, 0x78a8,
+	0x9084, 0x0080, 0x11c8, 0x0006, 0x0036, 0x2001, 0x1a7f, 0x201c,
+	0x7b9a, 0x2003, 0x0000, 0x2001, 0x1a80, 0x201c, 0x7b9e, 0x2003,
+	0x0000, 0x2001, 0x1a81, 0x201c, 0x7ba2, 0x2003, 0x0000, 0x003e,
+	0x000e, 0x000e, 0x0804, 0x4af0, 0x000e, 0x2031, 0x0000, 0x2061,
+	0x18b8, 0x2c44, 0xa66a, 0xa17a, 0xa772, 0xa076, 0xa28e, 0xa392,
+	0xa496, 0xa59a, 0x080c, 0x10e9, 0x7007, 0x0002, 0x701f, 0x46e9,
+	0x0005, 0x81ff, 0x1904, 0x3556, 0x080c, 0x4ad7, 0x0904, 0x3559,
+	0x080c, 0x6972, 0x1904, 0x3556, 0x00c6, 0x080c, 0x4aa4, 0x00ce,
+	0x0904, 0x3556, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x7ea8,
+	0x080c, 0xcca4, 0x0904, 0x3556, 0x7007, 0x0003, 0x701f, 0x4703,
+	0x0005, 0x080c, 0x420e, 0x0006, 0x0036, 0x2001, 0x1a7f, 0x201c,
+	0x7b9a, 0x2003, 0x0000, 0x2001, 0x1a80, 0x201c, 0x7b9e, 0x2003,
+	0x0000, 0x2001, 0x1a81, 0x201c, 0x7ba2, 0x2003, 0x0000, 0x003e,
+	0x000e, 0x0804, 0x3524, 0xa830, 0x9086, 0x0100, 0x0904, 0x3556,
+	0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080,
+	0x001b, 0x2009, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804,
+	0x4af0, 0x9006, 0x080c, 0x28a7, 0x78a8, 0x9084, 0x00ff, 0x9086,
+	0x00ff, 0x0118, 0x81ff, 0x1904, 0x3556, 0x080c, 0x73bc, 0x0110,
+	0x080c, 0x5fdf, 0x7888, 0x908a, 0x1000, 0x1a04, 0x3559, 0x7984,
+	0x9186, 0x00ff, 0x0138, 0x9182, 0x007f, 0x1a04, 0x3559, 0x2100,
+	0x080c, 0x2871, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, 0x2061,
+	0x19fa, 0x601b, 0x0000, 0x601f, 0x0000, 0x6073, 0x0000, 0x6077,
+	0x0000, 0x080c, 0x73bc, 0x1158, 0x080c, 0x76a4, 0x080c, 0x601a,
+	0x9085, 0x0001, 0x080c, 0x7403, 0x080c, 0x72ee, 0x00d0, 0x080c,
+	0xadd2, 0x2061, 0x0100, 0x2001, 0x1818, 0x2004, 0x9084, 0x00ff,
+	0x810f, 0x9105, 0x604a, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009,
+	0x1999, 0x200b, 0x0000, 0x2009, 0x002d, 0x2011, 0x5f05, 0x080c,
+	0x858b, 0x7984, 0x080c, 0x73bc, 0x1110, 0x2009, 0x00ff, 0x7a88,
+	0x080c, 0x457f, 0x012e, 0x00ce, 0x002e, 0x0804, 0x3524, 0x7984,
+	0x080c, 0x659e, 0x2b08, 0x1904, 0x3559, 0x0804, 0x3524, 0x81ff,
+	0x0120, 0x2009, 0x0001, 0x0804, 0x3556, 0x60dc, 0xd0ac, 0x1130,
+	0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, 0x3556, 0x080c, 0x4aa4,
+	0x1120, 0x2009, 0x0002, 0x0804, 0x3556, 0x7984, 0x9192, 0x0021,
+	0x1a04, 0x3559, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080,
+	0x0019, 0x702a, 0xaf60, 0x7736, 0x080c, 0x4aed, 0x701f, 0x47b7,
+	0x7880, 0x9086, 0x006e, 0x0110, 0x701f, 0x518d, 0x0005, 0x2009,
+	0x0080, 0x080c, 0x65ff, 0x1118, 0x080c, 0x6972, 0x0120, 0x2021,
+	0x400a, 0x0804, 0x3526, 0x00d6, 0x0096, 0xa964, 0xaa6c, 0xab70,
+	0xac74, 0xad78, 0xae7c, 0xa884, 0x90be, 0x0100, 0x0904, 0x4850,
+	0x90be, 0x0112, 0x0904, 0x4850, 0x90be, 0x0113, 0x0904, 0x4850,
+	0x90be, 0x0114, 0x0904, 0x4850, 0x90be, 0x0117, 0x0904, 0x4850,
+	0x90be, 0x011a, 0x0904, 0x4850, 0x90be, 0x011c, 0x0904, 0x4850,
+	0x90be, 0x0121, 0x0904, 0x4837, 0x90be, 0x0131, 0x0904, 0x4837,
+	0x90be, 0x0171, 0x0904, 0x4850, 0x90be, 0x0173, 0x0904, 0x4850,
+	0x90be, 0x01a1, 0x1128, 0xa894, 0x8007, 0xa896, 0x0804, 0x485b,
+	0x90be, 0x0212, 0x0904, 0x4844, 0x90be, 0x0213, 0x05e8, 0x90be,
+	0x0214, 0x0500, 0x90be, 0x0217, 0x0188, 0x90be, 0x021a, 0x1120,
+	0xa89c, 0x8007, 0xa89e, 0x04e0, 0x90be, 0x021f, 0x05c8, 0x90be,
+	0x0300, 0x05b0, 0x009e, 0x00de, 0x0804, 0x3559, 0x7028, 0x9080,
+	0x0010, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0007,
+	0x080c, 0x4899, 0x7028, 0x9080, 0x000e, 0x2098, 0x20a0, 0x7034,
+	0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x4899, 0x00c8, 0x7028,
+	0x9080, 0x000c, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9,
+	0x0001, 0x080c, 0x48a6, 0x00b8, 0x7028, 0x9080, 0x000e, 0x2098,
+	0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x48a6,
+	0x7028, 0x9080, 0x000c, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8,
+	0x20a9, 0x0001, 0x04f1, 0x00c6, 0x080c, 0x4aa4, 0x0550, 0xa868,
+	0xc0fd, 0xa86a, 0xa867, 0x0119, 0x9006, 0xa882, 0xa87f, 0x0020,
+	0xa88b, 0x0001, 0x810b, 0xa9ae, 0xa8b2, 0xaab6, 0xabba, 0xacbe,
+	0xadc2, 0xa9c6, 0xa8ca, 0x00ce, 0x009e, 0x00de, 0xa866, 0xa822,
+	0xa868, 0xc0fd, 0xa86a, 0xa804, 0x2048, 0x080c, 0xccbf, 0x1120,
+	0x2009, 0x0003, 0x0804, 0x3556, 0x7007, 0x0003, 0x701f, 0x4890,
+	0x0005, 0x00ce, 0x009e, 0x00de, 0x2009, 0x0002, 0x0804, 0x3556,
+	0xa820, 0x9086, 0x8001, 0x1904, 0x3524, 0x2009, 0x0004, 0x0804,
+	0x3556, 0x0016, 0x0026, 0x3510, 0x20a9, 0x0002, 0x4002, 0x4104,
+	0x4004, 0x8211, 0x1dc8, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026,
+	0x0036, 0x0046, 0x3520, 0x20a9, 0x0004, 0x4002, 0x4304, 0x4204,
+	0x4104, 0x4004, 0x8421, 0x1db8, 0x004e, 0x003e, 0x002e, 0x001e,
+	0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x3556, 0x60dc,
+	0xd0ac, 0x1130, 0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, 0x3556,
+	0x7984, 0x78a8, 0x2040, 0x080c, 0xadcb, 0x1120, 0x9182, 0x007f,
+	0x0a04, 0x3559, 0x9186, 0x00ff, 0x0904, 0x3559, 0x9182, 0x0800,
+	0x1a04, 0x3559, 0x7a8c, 0x7b88, 0x607c, 0x9306, 0x1140, 0x6080,
+	0x924e, 0x0904, 0x3559, 0x99cc, 0xff00, 0x0904, 0x3559, 0x0126,
+	0x2091, 0x8000, 0x080c, 0x49b7, 0x0904, 0x4937, 0x0086, 0x90c6,
+	0x4000, 0x008e, 0x1538, 0x00c6, 0x0006, 0x0036, 0xb818, 0xbb1c,
+	0x9305, 0xbb20, 0x9305, 0xbb24, 0x9305, 0xbb28, 0x9305, 0xbb2c,
+	0x9305, 0xbb30, 0x9305, 0xbb34, 0x9305, 0x003e, 0x0570, 0xd88c,
+	0x1128, 0x080c, 0x6972, 0x0110, 0xc89d, 0x0438, 0x900e, 0x080c,
+	0x681f, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x000e,
+	0x00ce, 0x00b8, 0x90c6, 0x4007, 0x1110, 0x2408, 0x0090, 0x90c6,
+	0x4008, 0x1118, 0x2708, 0x2610, 0x0060, 0x90c6, 0x4009, 0x1108,
+	0x0040, 0x90c6, 0x4006, 0x1108, 0x0020, 0x2001, 0x4005, 0x2009,
+	0x000a, 0x2020, 0x012e, 0x0804, 0x3526, 0x000e, 0x00ce, 0x2b00,
+	0x7026, 0x0016, 0x00b6, 0x00c6, 0x00e6, 0x2c70, 0x080c, 0xaeaf,
+	0x0904, 0x498c, 0x2b00, 0x6012, 0x080c, 0xcfaa, 0x2e58, 0x00ee,
+	0x00e6, 0x00c6, 0x080c, 0x4aa4, 0x00ce, 0x2b70, 0x1158, 0x080c,
+	0xae61, 0x00ee, 0x00ce, 0x00be, 0x001e, 0x012e, 0x2009, 0x0002,
+	0x0804, 0x3556, 0x900e, 0xa966, 0xa96a, 0x2900, 0x6016, 0xa932,
+	0xa868, 0xc0fd, 0xd88c, 0x0108, 0xc0f5, 0xa86a, 0xd89c, 0x1110,
+	0x080c, 0x31bf, 0x6023, 0x0001, 0x9006, 0x080c, 0x653b, 0xd89c,
+	0x0138, 0x2001, 0x0004, 0x080c, 0x654f, 0x2009, 0x0003, 0x0030,
+	0x2001, 0x0002, 0x080c, 0x654f, 0x2009, 0x0002, 0x080c, 0xaedc,
+	0x78a8, 0xd094, 0x0138, 0x00ee, 0x7024, 0x00e6, 0x2058, 0xb8cc,
+	0xc08d, 0xb8ce, 0x9085, 0x0001, 0x00ee, 0x00ce, 0x00be, 0x001e,
+	0x012e, 0x1120, 0x2009, 0x0003, 0x0804, 0x3556, 0x7007, 0x0003,
+	0x701f, 0x499b, 0x0005, 0xa830, 0x9086, 0x0100, 0x7024, 0x2058,
+	0x1138, 0x2009, 0x0004, 0xba04, 0x9294, 0x00ff, 0x0804, 0x562c,
+	0x900e, 0xa868, 0xd0f4, 0x1904, 0x3524, 0x080c, 0x681f, 0x1108,
+	0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x0804, 0x3524, 0x00e6,
+	0x00d6, 0x0096, 0x83ff, 0x0904, 0x4a06, 0x902e, 0x080c, 0xadcb,
+	0x0130, 0x9026, 0x20a9, 0x0800, 0x2071, 0x1000, 0x0030, 0x2021,
+	0x007f, 0x20a9, 0x0781, 0x2071, 0x107f, 0x2e04, 0x9005, 0x11b8,
+	0x2100, 0x9406, 0x1904, 0x4a17, 0x2428, 0x94ce, 0x007f, 0x1120,
+	0x92ce, 0xfffd, 0x1558, 0x0030, 0x94ce, 0x0080, 0x1130, 0x92ce,
+	0xfffc, 0x1520, 0x93ce, 0x00ff, 0x1508, 0xc5fd, 0x0480, 0x2058,
+	0xbf10, 0x2700, 0x9306, 0x11e8, 0xbe14, 0x2600, 0x9206, 0x11c8,
+	0x2400, 0x9106, 0x1180, 0xd884, 0x0598, 0xd894, 0x1588, 0x080c,
+	0x6912, 0x1570, 0x2001, 0x4000, 0x0460, 0x080c, 0x6972, 0x1540,
+	0x2001, 0x4000, 0x0430, 0x2001, 0x4007, 0x0418, 0x2001, 0x4006,
+	0x0400, 0x2400, 0x9106, 0x1158, 0xbe14, 0x87ff, 0x1128, 0x86ff,
+	0x0918, 0x080c, 0xadcb, 0x1900, 0x2001, 0x4008, 0x0090, 0x8420,
+	0x8e70, 0x1f04, 0x49cd, 0x85ff, 0x1130, 0x2001, 0x4009, 0x0048,
+	0x2001, 0x0001, 0x0030, 0x080c, 0x659e, 0x1dd0, 0xbb12, 0xba16,
+	0x9006, 0x9005, 0x009e, 0x00de, 0x00ee, 0x0005, 0x81ff, 0x0120,
+	0x2009, 0x0001, 0x0804, 0x3556, 0x080c, 0x4aa4, 0x1120, 0x2009,
+	0x0002, 0x0804, 0x3556, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a,
+	0x7884, 0x9005, 0x0904, 0x3559, 0x9096, 0x00ff, 0x0120, 0x9092,
+	0x0004, 0x1a04, 0x3559, 0x2010, 0x2918, 0x080c, 0x3165, 0x1120,
+	0x2009, 0x0003, 0x0804, 0x3556, 0x7007, 0x0003, 0x701f, 0x4a59,
+	0x0005, 0xa830, 0x9086, 0x0100, 0x1904, 0x3524, 0x2009, 0x0004,
+	0x0804, 0x3556, 0x7984, 0x080c, 0xadcb, 0x1120, 0x9182, 0x007f,
+	0x0a04, 0x3559, 0x9186, 0x00ff, 0x0904, 0x3559, 0x9182, 0x0800,
+	0x1a04, 0x3559, 0x2001, 0x9000, 0x080c, 0x5687, 0x1904, 0x3556,
+	0x0804, 0x3524, 0xa998, 0x080c, 0xadcb, 0x1118, 0x9182, 0x007f,
+	0x0280, 0x9186, 0x00ff, 0x0168, 0x9182, 0x0800, 0x1250, 0x2001,
+	0x9000, 0x080c, 0x5687, 0x11a8, 0x0060, 0xa897, 0x4005, 0xa99a,
+	0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030,
+	0x0005, 0xa897, 0x4000, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000,
+	0x0005, 0x2009, 0x000a, 0x0c48, 0x080c, 0x0fff, 0x0198, 0x9006,
+	0xa802, 0x7014, 0x9005, 0x1120, 0x2900, 0x7016, 0x701a, 0x0040,
+	0x7018, 0xa802, 0x0086, 0x2040, 0x2900, 0xa006, 0x701a, 0x008e,
+	0x9085, 0x0001, 0x0005, 0x7984, 0x080c, 0x65ff, 0x1130, 0x7e88,
+	0x9684, 0x3fff, 0x9082, 0x4000, 0x0208, 0x905e, 0x8bff, 0x0005,
+	0xa998, 0x080c, 0x65ff, 0x1130, 0xae9c, 0x9684, 0x3fff, 0x9082,
+	0x4000, 0x0208, 0x905e, 0x8bff, 0x0005, 0xae98, 0x0008, 0x7e84,
+	0x2608, 0x080c, 0x65ff, 0x1108, 0x0008, 0x905e, 0x8bff, 0x0005,
+	0x0016, 0x7114, 0x81ff, 0x0128, 0x2148, 0xa904, 0x080c, 0x1031,
+	0x0cc8, 0x7116, 0x711a, 0x001e, 0x0005, 0x2031, 0x0001, 0x0010,
+	0x2031, 0x0000, 0x2061, 0x18b8, 0x2c44, 0xa66a, 0xa17a, 0xa772,
 	0xa076, 0xa28e, 0xa392, 0xa496, 0xa59a, 0x080c, 0x10e9, 0x7007,
-	0x0002, 0x701f, 0x4e5c, 0x0005, 0x7030, 0x9005, 0x1180, 0x7120,
-	0x7028, 0x20a0, 0x772c, 0x9036, 0x7034, 0x20e8, 0x2061, 0x18b8,
-	0x2c44, 0xa28c, 0xa390, 0xa494, 0xa598, 0x0804, 0x4db0, 0x7124,
-	0x810b, 0x0804, 0x351d, 0x2029, 0x007e, 0x7984, 0x7a88, 0x7b8c,
-	0x7c98, 0x9184, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x3552,
-	0x9502, 0x0a04, 0x3552, 0x9184, 0x00ff, 0x90e2, 0x0020, 0x0a04,
-	0x3552, 0x9502, 0x0a04, 0x3552, 0x9284, 0xff00, 0x8007, 0x90e2,
-	0x0020, 0x0a04, 0x3552, 0x9502, 0x0a04, 0x3552, 0x9284, 0x00ff,
-	0x90e2, 0x0020, 0x0a04, 0x3552, 0x9502, 0x0a04, 0x3552, 0x9384,
-	0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x3552, 0x9502, 0x0a04,
-	0x3552, 0x9384, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x3552, 0x9502,
-	0x0a04, 0x3552, 0x9484, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04,
-	0x3552, 0x9502, 0x0a04, 0x3552, 0x9484, 0x00ff, 0x90e2, 0x0020,
-	0x0a04, 0x3552, 0x9502, 0x0a04, 0x3552, 0x2061, 0x1989, 0x6102,
-	0x6206, 0x630a, 0x640e, 0x0804, 0x351d, 0x080c, 0x4aa5, 0x0904,
-	0x354f, 0x2009, 0x0016, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c,
-	0x9080, 0x0019, 0xaf60, 0x080c, 0x4aee, 0x701f, 0x4ee0, 0x0005,
-	0x2001, 0x0138, 0x2003, 0x0000, 0x00e6, 0x2071, 0x0300, 0x701c,
-	0xd0a4, 0x1de8, 0x00ee, 0x20a9, 0x0016, 0x896e, 0x8d6e, 0x8d6f,
-	0x9d84, 0xffc0, 0x9080, 0x0019, 0x2098, 0x9d84, 0x003f, 0x20e0,
-	0x2069, 0x1877, 0x20e9, 0x0001, 0x2da0, 0x4003, 0x6800, 0x9005,
-	0x0904, 0x4f61, 0x6804, 0x2008, 0x918c, 0xfff8, 0x1904, 0x4f61,
-	0x680c, 0x9005, 0x0904, 0x4f61, 0x9082, 0xff01, 0x1a04, 0x4f61,
-	0x6810, 0x9082, 0x005c, 0x0a04, 0x4f61, 0x6824, 0x2008, 0x9082,
-	0x0008, 0x0a04, 0x4f61, 0x9182, 0x0400, 0x1a04, 0x4f61, 0x0056,
-	0x2029, 0x0000, 0x080c, 0x8ad2, 0x005e, 0x6944, 0x6820, 0x9102,
-	0x06c0, 0x6820, 0x9082, 0x0019, 0x16a0, 0x6828, 0x6944, 0x810c,
-	0x9102, 0x0678, 0x6840, 0x9082, 0x000f, 0x1658, 0x080c, 0x1018,
-	0x2900, 0x0904, 0x4f7b, 0x684e, 0x00e6, 0x2071, 0x1930, 0x00b6,
-	0x2059, 0x0000, 0x080c, 0x898e, 0x00be, 0x00ee, 0x0558, 0x080c,
-	0x86e8, 0x080c, 0x872e, 0x11e0, 0x6857, 0x0000, 0x00c6, 0x2061,
-	0x0100, 0x6104, 0x918d, 0x2000, 0x6106, 0x6b10, 0x2061, 0x1a62,
-	0x630a, 0x00ce, 0x080c, 0x2956, 0x2001, 0x0138, 0x2102, 0x0804,
-	0x351d, 0x080c, 0x2956, 0x2001, 0x0138, 0x2102, 0x0804, 0x3552,
-	0x00e6, 0x2071, 0x1930, 0x080c, 0x8b63, 0x080c, 0x8b72, 0x080c,
-	0x897d, 0x00ee, 0x2001, 0x188a, 0x204c, 0x080c, 0x1031, 0x2001,
-	0x188a, 0x2003, 0x0000, 0x080c, 0x2956, 0x2001, 0x0138, 0x2102,
-	0x0804, 0x354f, 0x2001, 0x1924, 0x200c, 0x918e, 0x0000, 0x0904,
-	0x4fda, 0x080c, 0x8978, 0x0904, 0x4fda, 0x2001, 0x0101, 0x200c,
-	0x918c, 0xdfff, 0x2102, 0x2001, 0x0138, 0x2003, 0x0000, 0x00e6,
-	0x2071, 0x0300, 0x701c, 0xd0a4, 0x1de8, 0x00ee, 0x080c, 0x897d,
-	0x2001, 0x0035, 0x080c, 0x15ee, 0x00c6, 0x2061, 0x193c, 0x6004,
-	0x6100, 0x9106, 0x1de0, 0x00ce, 0x080c, 0x2956, 0x2001, 0x0138,
-	0x2102, 0x00e6, 0x00f6, 0x2071, 0x1923, 0x080c, 0x88b9, 0x0120,
-	0x2f00, 0x080c, 0x8943, 0x0cc8, 0x00fe, 0x00ee, 0x0126, 0x2091,
-	0x8000, 0x2001, 0x188a, 0x200c, 0x81ff, 0x0138, 0x2148, 0x080c,
-	0x1031, 0x2001, 0x188a, 0x2003, 0x0000, 0x2001, 0x183c, 0x2003,
-	0x0020, 0x00e6, 0x2071, 0x1930, 0x080c, 0x8b63, 0x080c, 0x8b72,
-	0x00ee, 0x012e, 0x0804, 0x351d, 0x0006, 0x080c, 0x56d0, 0xd0cc,
-	0x000e, 0x0005, 0x0006, 0x080c, 0x56d4, 0xd0bc, 0x000e, 0x0005,
-	0x6174, 0x7a84, 0x6300, 0x82ff, 0x1118, 0x7986, 0x0804, 0x351d,
-	0x83ff, 0x1904, 0x3552, 0x2001, 0xfff0, 0x9200, 0x1a04, 0x3552,
-	0x2019, 0xffff, 0x6078, 0x9302, 0x9200, 0x0a04, 0x3552, 0x7986,
-	0x6276, 0x0804, 0x351d, 0x080c, 0x56e4, 0x1904, 0x354f, 0x7c88,
-	0x7d84, 0x7e98, 0x7f8c, 0x080c, 0x4aa5, 0x0904, 0x354f, 0x900e,
-	0x901e, 0x7326, 0x7332, 0xa860, 0x20e8, 0x7036, 0xa85c, 0x9080,
-	0x0003, 0x702a, 0x20a0, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178,
-	0x080c, 0x696a, 0x0118, 0x080c, 0x6972, 0x1148, 0x20a9, 0x0001,
-	0xb814, 0x4004, 0xb810, 0x4004, 0x4104, 0x9398, 0x0003, 0x8108,
-	0x9182, 0x0800, 0x0120, 0x9386, 0x003c, 0x0170, 0x0c20, 0x83ff,
-	0x1148, 0x7224, 0x900e, 0x2001, 0x0003, 0x080c, 0x8f3f, 0x2208,
-	0x0804, 0x351d, 0x7033, 0x0001, 0x7122, 0x7024, 0x9300, 0x7026,
-	0x2061, 0x18b8, 0x2c44, 0xa06b, 0x0000, 0xa37a, 0x7028, 0xa076,
-	0x7034, 0xa072, 0xa48e, 0xa592, 0xa696, 0xa79a, 0x080c, 0x10e9,
-	0x7007, 0x0002, 0x701f, 0x505d, 0x0005, 0x7030, 0x9005, 0x1178,
-	0x7120, 0x7028, 0x20a0, 0x901e, 0x7034, 0x20e8, 0x2061, 0x18b8,
-	0x2c44, 0xa48c, 0xa590, 0xa694, 0xa798, 0x0804, 0x501b, 0x7224,
-	0x900e, 0x2001, 0x0003, 0x080c, 0x8f3f, 0x2208, 0x0804, 0x351d,
-	0x00f6, 0x00e6, 0x080c, 0x56e4, 0x2009, 0x0007, 0x1904, 0x50f0,
-	0x2071, 0x189e, 0x745c, 0x84ff, 0x2009, 0x000e, 0x1904, 0x50f0,
-	0xac9c, 0xad98, 0xaea4, 0xafa0, 0x0096, 0x080c, 0x1018, 0x2009,
-	0x0002, 0x0904, 0x50f0, 0x2900, 0x705e, 0x900e, 0x901e, 0x7356,
-	0x7362, 0xa860, 0x7066, 0xa85c, 0x9080, 0x0003, 0x705a, 0x20a0,
-	0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x696a, 0x0118,
-	0x080c, 0x6972, 0x1148, 0xb814, 0x20a9, 0x0001, 0x4004, 0xb810,
-	0x4004, 0x4104, 0x9398, 0x0003, 0x8108, 0x9182, 0x0800, 0x0120,
-	0x9386, 0x003c, 0x01e8, 0x0c20, 0x83ff, 0x11c0, 0x7254, 0x900e,
-	0x2001, 0x0003, 0x080c, 0x8f3f, 0x2208, 0x009e, 0xa897, 0x4000,
-	0xa99a, 0x715c, 0x81ff, 0x090c, 0x0dd5, 0x2148, 0x080c, 0x1031,
-	0x9006, 0x705e, 0x918d, 0x0001, 0x2008, 0x0418, 0x7063, 0x0001,
-	0x7152, 0x7054, 0x9300, 0x7056, 0x2061, 0x18b9, 0x2c44, 0xa37a,
-	0x7058, 0xa076, 0x7064, 0xa072, 0xa48e, 0xa592, 0xa696, 0xa79a,
-	0xa09f, 0x50fc, 0x000e, 0xa0a2, 0x080c, 0x10e9, 0x9006, 0x0048,
-	0x009e, 0xa897, 0x4005, 0xa99a, 0x900e, 0x9085, 0x0001, 0x2001,
-	0x0030, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0xa0a0, 0x904d, 0x090c,
-	0x0dd5, 0x00e6, 0x2071, 0x189e, 0xa06c, 0x908e, 0x0100, 0x0138,
-	0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, 0x4002, 0x00d8, 0x7060,
-	0x9005, 0x1158, 0x7150, 0x7058, 0x20a0, 0x901e, 0x7064, 0x20e8,
-	0xa48c, 0xa590, 0xa694, 0xa798, 0x0428, 0xa87b, 0x0000, 0xa883,
-	0x0000, 0xa897, 0x4000, 0x7254, 0x900e, 0x2001, 0x0003, 0x080c,
-	0x8f3f, 0xaa9a, 0x715c, 0x81ff, 0x090c, 0x0dd5, 0x2148, 0x080c,
-	0x1031, 0x705f, 0x0000, 0xa0a0, 0x2048, 0x0126, 0x2091, 0x8000,
-	0x080c, 0x6c79, 0x012e, 0xa09f, 0x0000, 0xa0a3, 0x0000, 0x00ee,
-	0x00fe, 0x0005, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c,
-	0x696a, 0x0118, 0x080c, 0x6972, 0x1148, 0xb814, 0x20a9, 0x0001,
+	0x0002, 0x701f, 0x3524, 0x0005, 0x00f6, 0x0126, 0x2091, 0x8000,
+	0x2079, 0x0000, 0x2001, 0x18b0, 0x2004, 0x9005, 0x1190, 0x0e04,
+	0x4b21, 0x7a36, 0x7833, 0x0012, 0x7a82, 0x7b86, 0x7c8a, 0x2091,
+	0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119b, 0x0804,
+	0x4b87, 0x0016, 0x0086, 0x0096, 0x00c6, 0x00e6, 0x2071, 0x189e,
+	0x7044, 0x9005, 0x1540, 0x7148, 0x9182, 0x0010, 0x0288, 0x7038,
+	0x2060, 0x080c, 0x0fff, 0x0904, 0x4b7f, 0xa84b, 0x0000, 0x2900,
+	0x7046, 0x2001, 0x0002, 0x9080, 0x2090, 0x2005, 0xa846, 0x0098,
+	0x7038, 0x90e0, 0x0004, 0x2001, 0x18ba, 0x9c82, 0x18fa, 0x0210,
+	0x2061, 0x18ba, 0x2c00, 0x703a, 0x7148, 0x81ff, 0x1108, 0x703e,
+	0x8108, 0x714a, 0x0460, 0x7148, 0x8108, 0x714a, 0x7044, 0x2040,
+	0xa144, 0x2105, 0x0016, 0x908a, 0x0036, 0x1a0c, 0x0dd5, 0x2060,
+	0x001e, 0x8108, 0x2105, 0x9005, 0xa146, 0x1520, 0x080c, 0x0fff,
+	0x1130, 0x8109, 0xa946, 0x7148, 0x8109, 0x714a, 0x00d8, 0x9006,
+	0xa806, 0xa84a, 0xa046, 0x2800, 0xa802, 0x2900, 0xa006, 0x7046,
+	0x2001, 0x0002, 0x9080, 0x2090, 0x2005, 0xa846, 0x0058, 0x2262,
+	0x6306, 0x640a, 0x00ee, 0x00ce, 0x009e, 0x008e, 0x001e, 0x012e,
+	0x00fe, 0x0005, 0x2c00, 0x9082, 0x001b, 0x0002, 0x4ba9, 0x4ba9,
+	0x4bab, 0x4ba9, 0x4ba9, 0x4ba9, 0x4baf, 0x4ba9, 0x4ba9, 0x4ba9,
+	0x4bb3, 0x4ba9, 0x4ba9, 0x4ba9, 0x4bb7, 0x4ba9, 0x4ba9, 0x4ba9,
+	0x4bbb, 0x4ba9, 0x4ba9, 0x4ba9, 0x4bbf, 0x4ba9, 0x4ba9, 0x4ba9,
+	0x4bc4, 0x080c, 0x0dd5, 0xa276, 0xa37a, 0xa47e, 0x0898, 0xa286,
+	0xa38a, 0xa48e, 0x0878, 0xa296, 0xa39a, 0xa49e, 0x0858, 0xa2a6,
+	0xa3aa, 0xa4ae, 0x0838, 0xa2b6, 0xa3ba, 0xa4be, 0x0818, 0xa2c6,
+	0xa3ca, 0xa4ce, 0x0804, 0x4b82, 0xa2d6, 0xa3da, 0xa4de, 0x0804,
+	0x4b82, 0x00e6, 0x2071, 0x189e, 0x7048, 0x9005, 0x0904, 0x4c5b,
+	0x0126, 0x2091, 0x8000, 0x0e04, 0x4c5a, 0x00f6, 0x2079, 0x0000,
+	0x00c6, 0x0096, 0x0086, 0x0076, 0x9006, 0x2038, 0x7040, 0x2048,
+	0x9005, 0x0500, 0xa948, 0x2105, 0x0016, 0x908a, 0x0036, 0x1a0c,
+	0x0dd5, 0x2060, 0x001e, 0x8108, 0x2105, 0x9005, 0xa94a, 0x1904,
+	0x4c5d, 0xa804, 0x9005, 0x090c, 0x0dd5, 0x7042, 0x2938, 0x2040,
+	0xa003, 0x0000, 0x2001, 0x0002, 0x9080, 0x2090, 0x2005, 0xa04a,
+	0x0804, 0x4c5d, 0x703c, 0x2060, 0x2c14, 0x6304, 0x6408, 0x650c,
+	0x2200, 0x7836, 0x7833, 0x0012, 0x7882, 0x2300, 0x7886, 0x2400,
+	0x788a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
+	0x119b, 0x87ff, 0x0118, 0x2748, 0x080c, 0x1031, 0x7048, 0x8001,
+	0x704a, 0x9005, 0x1170, 0x7040, 0x2048, 0x9005, 0x0128, 0x080c,
+	0x1031, 0x9006, 0x7042, 0x7046, 0x703b, 0x18ba, 0x703f, 0x18ba,
+	0x0420, 0x7040, 0x9005, 0x1508, 0x7238, 0x2c00, 0x9206, 0x0148,
+	0x9c80, 0x0004, 0x90fa, 0x18fa, 0x0210, 0x2001, 0x18ba, 0x703e,
+	0x00a0, 0x9006, 0x703e, 0x703a, 0x7044, 0x9005, 0x090c, 0x0dd5,
+	0x2048, 0xa800, 0x9005, 0x1de0, 0x2900, 0x7042, 0x2001, 0x0002,
+	0x9080, 0x2090, 0x2005, 0xa84a, 0x0000, 0x007e, 0x008e, 0x009e,
+	0x00ce, 0x00fe, 0x012e, 0x00ee, 0x0005, 0x2c00, 0x9082, 0x001b,
+	0x0002, 0x4c7c, 0x4c7c, 0x4c7e, 0x4c7c, 0x4c7c, 0x4c7c, 0x4c83,
+	0x4c7c, 0x4c7c, 0x4c7c, 0x4c88, 0x4c7c, 0x4c7c, 0x4c7c, 0x4c8d,
+	0x4c7c, 0x4c7c, 0x4c7c, 0x4c92, 0x4c7c, 0x4c7c, 0x4c7c, 0x4c97,
+	0x4c7c, 0x4c7c, 0x4c7c, 0x4c9c, 0x080c, 0x0dd5, 0xaa74, 0xab78,
+	0xac7c, 0x0804, 0x4c08, 0xaa84, 0xab88, 0xac8c, 0x0804, 0x4c08,
+	0xaa94, 0xab98, 0xac9c, 0x0804, 0x4c08, 0xaaa4, 0xaba8, 0xacac,
+	0x0804, 0x4c08, 0xaab4, 0xabb8, 0xacbc, 0x0804, 0x4c08, 0xaac4,
+	0xabc8, 0xaccc, 0x0804, 0x4c08, 0xaad4, 0xabd8, 0xacdc, 0x0804,
+	0x4c08, 0x0016, 0x0026, 0x0036, 0x00b6, 0x00c6, 0x2009, 0x007e,
+	0x080c, 0x65ff, 0x2019, 0x0001, 0xb85c, 0xd0ac, 0x0110, 0x2019,
+	0x0000, 0x2011, 0x801b, 0x080c, 0x4b04, 0x00ce, 0x00be, 0x003e,
+	0x002e, 0x001e, 0x0005, 0x0026, 0x080c, 0x56cf, 0xd0c4, 0x0120,
+	0x2011, 0x8014, 0x080c, 0x4b04, 0x002e, 0x0005, 0x81ff, 0x1904,
+	0x3556, 0x0126, 0x2091, 0x8000, 0x6030, 0xc08d, 0xc085, 0xc0ac,
+	0x6032, 0x080c, 0x73bc, 0x1158, 0x080c, 0x76a4, 0x080c, 0x601a,
+	0x9085, 0x0001, 0x080c, 0x7403, 0x080c, 0x72ee, 0x0010, 0x080c,
+	0x5ed9, 0x012e, 0x0804, 0x3524, 0x81ff, 0x0120, 0x2009, 0x0001,
+	0x0804, 0x3556, 0x080c, 0x56e3, 0x0120, 0x2009, 0x0007, 0x0804,
+	0x3556, 0x080c, 0x696a, 0x0120, 0x2009, 0x0008, 0x0804, 0x3556,
+	0x080c, 0x3314, 0x0128, 0x7984, 0x080c, 0x659e, 0x1904, 0x3559,
+	0x080c, 0x4ad7, 0x0904, 0x3559, 0x2b00, 0x7026, 0x080c, 0x6972,
+	0x7888, 0x1170, 0x9084, 0x0005, 0x1158, 0x900e, 0x080c, 0x681f,
+	0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x0804, 0x3524,
+	0x080c, 0x4aa4, 0x0904, 0x3556, 0x9006, 0xa866, 0xa832, 0xa868,
+	0xc0fd, 0xa86a, 0x080c, 0xcd58, 0x0904, 0x3556, 0x7888, 0xd094,
+	0x0118, 0xb8cc, 0xc08d, 0xb8ce, 0x7007, 0x0003, 0x701f, 0x4d7d,
+	0x0005, 0x2061, 0x1800, 0x080c, 0x56e3, 0x2009, 0x0007, 0x1578,
+	0x080c, 0x696a, 0x0118, 0x2009, 0x0008, 0x0448, 0x080c, 0x3314,
+	0x0120, 0xa998, 0x080c, 0x659e, 0x1530, 0x080c, 0x4ad5, 0x0518,
+	0x080c, 0x6972, 0xa89c, 0x1168, 0x9084, 0x0005, 0x1150, 0x900e,
+	0x080c, 0x681f, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d,
+	0x00d0, 0xa868, 0xc0fc, 0xa86a, 0x080c, 0xcd58, 0x11e0, 0xa89c,
+	0xd094, 0x0118, 0xb8cc, 0xc08d, 0xb8ce, 0x2009, 0x0003, 0xa897,
+	0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001,
+	0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0xa99a, 0x9006, 0x918d,
+	0x0001, 0x2008, 0x0005, 0x9006, 0x0005, 0xa830, 0x9086, 0x0100,
+	0x7024, 0x2058, 0x1110, 0x0804, 0x562c, 0x900e, 0x080c, 0x681f,
+	0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x0804, 0x3524,
+	0x080c, 0x56e3, 0x0120, 0x2009, 0x0007, 0x0804, 0x3556, 0x7f84,
+	0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x080c, 0x4aa4, 0x1120, 0x2009,
+	0x0002, 0x0804, 0x3556, 0x900e, 0x2130, 0x7126, 0x7132, 0xa860,
+	0x20e8, 0x7036, 0xa85c, 0x9080, 0x0005, 0x702a, 0x20a0, 0x080c,
+	0x65ff, 0x1904, 0x4e1f, 0x080c, 0x6972, 0x0138, 0x080c, 0x697a,
+	0x0120, 0x080c, 0x6912, 0x1904, 0x4e1f, 0xd794, 0x1110, 0xd784,
+	0x01a8, 0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x0006, 0x2098, 0x3400,
+	0xd794, 0x0160, 0x20a9, 0x0008, 0x4003, 0x2098, 0x20a0, 0x3d00,
+	0x20e0, 0x20a9, 0x0002, 0x080c, 0x48a6, 0x0048, 0x20a9, 0x0004,
+	0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x080c, 0x48a6, 0x9186,
+	0x007e, 0x0170, 0x9186, 0x0080, 0x0158, 0x080c, 0x6972, 0x90c2,
+	0x0006, 0x1210, 0xc1fd, 0x0020, 0x080c, 0x681f, 0x1108, 0xc1fd,
+	0x4104, 0xc1fc, 0xd794, 0x0528, 0xb8c4, 0x20e0, 0xb8c8, 0x2060,
+	0x9c80, 0x0000, 0x2098, 0x20a9, 0x0002, 0x4003, 0x9c80, 0x0003,
+	0x2098, 0x20a9, 0x0001, 0x4005, 0x9c80, 0x0004, 0x2098, 0x3400,
+	0x20a9, 0x0002, 0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x080c,
+	0x4899, 0x9c80, 0x0026, 0x2098, 0xb8c4, 0x20e0, 0x20a9, 0x0002,
+	0x4003, 0xd794, 0x0110, 0x96b0, 0x000b, 0x96b0, 0x0005, 0x8108,
+	0x080c, 0xadcb, 0x0118, 0x9186, 0x0800, 0x0040, 0xd78c, 0x0120,
+	0x9186, 0x0800, 0x0170, 0x0018, 0x9186, 0x007e, 0x0150, 0xd794,
+	0x0118, 0x9686, 0x0020, 0x0010, 0x9686, 0x0028, 0x0150, 0x0804,
+	0x4daf, 0x86ff, 0x1120, 0x7124, 0x810b, 0x0804, 0x3524, 0x7033,
+	0x0001, 0x7122, 0x7024, 0x9600, 0x7026, 0x772e, 0x2061, 0x18b8,
+	0x2c44, 0xa06b, 0x0000, 0xa67a, 0x7034, 0xa072, 0x7028, 0xa076,
+	0xa28e, 0xa392, 0xa496, 0xa59a, 0x080c, 0x10e9, 0x7007, 0x0002,
+	0x701f, 0x4e5b, 0x0005, 0x7030, 0x9005, 0x1180, 0x7120, 0x7028,
+	0x20a0, 0x772c, 0x9036, 0x7034, 0x20e8, 0x2061, 0x18b8, 0x2c44,
+	0xa28c, 0xa390, 0xa494, 0xa598, 0x0804, 0x4daf, 0x7124, 0x810b,
+	0x0804, 0x3524, 0x2029, 0x007e, 0x7984, 0x7a88, 0x7b8c, 0x7c98,
+	0x9184, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x3559, 0x9502,
+	0x0a04, 0x3559, 0x9184, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x3559,
+	0x9502, 0x0a04, 0x3559, 0x9284, 0xff00, 0x8007, 0x90e2, 0x0020,
+	0x0a04, 0x3559, 0x9502, 0x0a04, 0x3559, 0x9284, 0x00ff, 0x90e2,
+	0x0020, 0x0a04, 0x3559, 0x9502, 0x0a04, 0x3559, 0x9384, 0xff00,
+	0x8007, 0x90e2, 0x0020, 0x0a04, 0x3559, 0x9502, 0x0a04, 0x3559,
+	0x9384, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x3559, 0x9502, 0x0a04,
+	0x3559, 0x9484, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x3559,
+	0x9502, 0x0a04, 0x3559, 0x9484, 0x00ff, 0x90e2, 0x0020, 0x0a04,
+	0x3559, 0x9502, 0x0a04, 0x3559, 0x2061, 0x1989, 0x6102, 0x6206,
+	0x630a, 0x640e, 0x0804, 0x3524, 0x080c, 0x4aa4, 0x0904, 0x3556,
+	0x2009, 0x0016, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080,
+	0x0019, 0xaf60, 0x080c, 0x4aed, 0x701f, 0x4edf, 0x0005, 0x2001,
+	0x0138, 0x2003, 0x0000, 0x00e6, 0x2071, 0x0300, 0x701c, 0xd0a4,
+	0x1de8, 0x00ee, 0x20a9, 0x0016, 0x896e, 0x8d6e, 0x8d6f, 0x9d84,
+	0xffc0, 0x9080, 0x0019, 0x2098, 0x9d84, 0x003f, 0x20e0, 0x2069,
+	0x1877, 0x20e9, 0x0001, 0x2da0, 0x4003, 0x6800, 0x9005, 0x0904,
+	0x4f60, 0x6804, 0x2008, 0x918c, 0xfff8, 0x1904, 0x4f60, 0x680c,
+	0x9005, 0x0904, 0x4f60, 0x9082, 0xff01, 0x1a04, 0x4f60, 0x6810,
+	0x9082, 0x005c, 0x0a04, 0x4f60, 0x6824, 0x2008, 0x9082, 0x0008,
+	0x0a04, 0x4f60, 0x9182, 0x0400, 0x1a04, 0x4f60, 0x0056, 0x2029,
+	0x0000, 0x080c, 0x8afb, 0x005e, 0x6944, 0x6820, 0x9102, 0x06c0,
+	0x6820, 0x9082, 0x0019, 0x16a0, 0x6828, 0x6944, 0x810c, 0x9102,
+	0x0678, 0x6840, 0x9082, 0x000f, 0x1658, 0x080c, 0x1018, 0x2900,
+	0x0904, 0x4f7a, 0x684e, 0x00e6, 0x2071, 0x1930, 0x00b6, 0x2059,
+	0x0000, 0x080c, 0x89b7, 0x00be, 0x00ee, 0x0558, 0x080c, 0x8711,
+	0x080c, 0x8757, 0x11e0, 0x6857, 0x0000, 0x00c6, 0x2061, 0x0100,
+	0x6104, 0x918d, 0x2000, 0x6106, 0x6b10, 0x2061, 0x1a62, 0x630a,
+	0x00ce, 0x080c, 0x2956, 0x2001, 0x0138, 0x2102, 0x0804, 0x3524,
+	0x080c, 0x2956, 0x2001, 0x0138, 0x2102, 0x0804, 0x3559, 0x00e6,
+	0x2071, 0x1930, 0x080c, 0x8b8c, 0x080c, 0x8b9b, 0x080c, 0x89a6,
+	0x00ee, 0x2001, 0x188a, 0x204c, 0x080c, 0x1031, 0x2001, 0x188a,
+	0x2003, 0x0000, 0x080c, 0x2956, 0x2001, 0x0138, 0x2102, 0x0804,
+	0x3556, 0x2001, 0x1924, 0x200c, 0x918e, 0x0000, 0x0904, 0x4fd9,
+	0x080c, 0x89a1, 0x0904, 0x4fd9, 0x2001, 0x0101, 0x200c, 0x918c,
+	0xdfff, 0x2102, 0x2001, 0x0138, 0x2003, 0x0000, 0x00e6, 0x2071,
+	0x0300, 0x701c, 0xd0a4, 0x1de8, 0x00ee, 0x080c, 0x89a6, 0x2001,
+	0x0035, 0x080c, 0x15ee, 0x00c6, 0x2061, 0x193c, 0x6004, 0x6100,
+	0x9106, 0x1de0, 0x00ce, 0x080c, 0x2956, 0x2001, 0x0138, 0x2102,
+	0x00e6, 0x00f6, 0x2071, 0x1923, 0x080c, 0x88e2, 0x0120, 0x2f00,
+	0x080c, 0x896c, 0x0cc8, 0x00fe, 0x00ee, 0x0126, 0x2091, 0x8000,
+	0x2001, 0x188a, 0x200c, 0x81ff, 0x0138, 0x2148, 0x080c, 0x1031,
+	0x2001, 0x188a, 0x2003, 0x0000, 0x2001, 0x183c, 0x2003, 0x0020,
+	0x00e6, 0x2071, 0x1930, 0x080c, 0x8b8c, 0x080c, 0x8b9b, 0x00ee,
+	0x012e, 0x0804, 0x3524, 0x0006, 0x080c, 0x56cf, 0xd0cc, 0x000e,
+	0x0005, 0x0006, 0x080c, 0x56d3, 0xd0bc, 0x000e, 0x0005, 0x6174,
+	0x7a84, 0x6300, 0x82ff, 0x1118, 0x7986, 0x0804, 0x3524, 0x83ff,
+	0x1904, 0x3559, 0x2001, 0xfff0, 0x9200, 0x1a04, 0x3559, 0x2019,
+	0xffff, 0x6078, 0x9302, 0x9200, 0x0a04, 0x3559, 0x7986, 0x6276,
+	0x0804, 0x3524, 0x080c, 0x56e3, 0x1904, 0x3556, 0x7c88, 0x7d84,
+	0x7e98, 0x7f8c, 0x080c, 0x4aa4, 0x0904, 0x3556, 0x900e, 0x901e,
+	0x7326, 0x7332, 0xa860, 0x20e8, 0x7036, 0xa85c, 0x9080, 0x0003,
+	0x702a, 0x20a0, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c,
+	0x6972, 0x0118, 0x080c, 0x697a, 0x1148, 0x20a9, 0x0001, 0xb814,
 	0x4004, 0xb810, 0x4004, 0x4104, 0x9398, 0x0003, 0x8108, 0x9182,
-	0x0800, 0x0120, 0x9386, 0x003c, 0x0518, 0x0c20, 0x83ff, 0x11f0,
-	0x7154, 0x810c, 0xa99a, 0xa897, 0x4000, 0x715c, 0x81ff, 0x090c,
-	0x0dd5, 0x2148, 0x080c, 0x1031, 0x9006, 0x705e, 0x918d, 0x0001,
-	0x2008, 0xa0a0, 0x2048, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c79,
-	0x012e, 0xa09f, 0x0000, 0xa0a3, 0x0000, 0x0070, 0x7063, 0x0001,
-	0x7152, 0x7054, 0x9300, 0x7056, 0xa37a, 0xa48e, 0xa592, 0xa696,
-	0xa79a, 0x080c, 0x10e9, 0x9006, 0x00ee, 0x0005, 0x0096, 0xa88c,
-	0x90be, 0x7000, 0x0148, 0x90be, 0x7100, 0x0130, 0x90be, 0x7200,
-	0x0118, 0x009e, 0x0804, 0x3552, 0xa884, 0xa988, 0x080c, 0x283e,
-	0x1518, 0x080c, 0x659f, 0x1500, 0x7126, 0xbe12, 0xbd16, 0xae7c,
-	0x080c, 0x4aa5, 0x01c8, 0x080c, 0x4aa5, 0x01b0, 0x009e, 0xa867,
-	0x0000, 0xa868, 0xc0fd, 0xa86a, 0xa823, 0x0000, 0xa804, 0x2048,
-	0x080c, 0xccc5, 0x1120, 0x2009, 0x0003, 0x0804, 0x354f, 0x7007,
-	0x0003, 0x701f, 0x51c9, 0x0005, 0x009e, 0x2009, 0x0002, 0x0804,
-	0x354f, 0x7124, 0x080c, 0x32b4, 0xa820, 0x9086, 0x8001, 0x1120,
-	0x2009, 0x0004, 0x0804, 0x354f, 0x2900, 0x7022, 0xa804, 0x0096,
-	0x2048, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0,
-	0x009e, 0x9080, 0x0002, 0x0076, 0x0006, 0x2098, 0x20a0, 0x27e0,
-	0x27e8, 0x20a9, 0x002a, 0x080c, 0x0f7c, 0xaa6c, 0xab70, 0xac74,
-	0xad78, 0x2061, 0x18b8, 0x2c44, 0xa06b, 0x0000, 0xae64, 0xaf8c,
-	0x97c6, 0x7000, 0x0118, 0x97c6, 0x7100, 0x1148, 0x96c2, 0x0004,
-	0x0600, 0x2009, 0x0004, 0x000e, 0x007e, 0x0804, 0x4af1, 0x97c6,
-	0x7200, 0x11b8, 0x96c2, 0x0054, 0x02a0, 0x000e, 0x007e, 0x2061,
-	0x18b8, 0x2c44, 0xa076, 0xa772, 0xa07b, 0x002a, 0xa28e, 0xa392,
-	0xa496, 0xa59a, 0x080c, 0x10e9, 0x7007, 0x0002, 0x701f, 0x5225,
-	0x0005, 0x000e, 0x007e, 0x0804, 0x3552, 0x7020, 0x2048, 0xa804,
-	0x2048, 0xa804, 0x2048, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f,
-	0x9084, 0xffc0, 0x9080, 0x0002, 0x2098, 0x20a0, 0x27e0, 0x27e8,
-	0x20a9, 0x002a, 0x080c, 0x0f7c, 0x2100, 0x2238, 0x2061, 0x18b8,
-	0x2c44, 0xa28c, 0xa390, 0xa494, 0xa598, 0x2009, 0x002a, 0x0804,
-	0x4af1, 0x81ff, 0x1904, 0x354f, 0x798c, 0x2001, 0x197e, 0x918c,
-	0x8000, 0x2102, 0x080c, 0x4abc, 0x0904, 0x3552, 0x080c, 0x696a,
-	0x0120, 0x080c, 0x6972, 0x1904, 0x3552, 0x080c, 0x66c7, 0x0904,
-	0x354f, 0x0126, 0x2091, 0x8000, 0x080c, 0x678d, 0x012e, 0x0904,
-	0x354f, 0x2001, 0x197e, 0x2004, 0xd0fc, 0x1904, 0x351d, 0x0804,
-	0x451d, 0xa9a0, 0x2001, 0x197e, 0x918c, 0x8000, 0xc18d, 0x2102,
-	0x080c, 0x4ac9, 0x01a0, 0x080c, 0x696a, 0x0118, 0x080c, 0x6972,
-	0x1170, 0x080c, 0x66c7, 0x2009, 0x0002, 0x0128, 0x080c, 0x678d,
-	0x1170, 0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897,
-	0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897,
-	0x4000, 0x2001, 0x197e, 0x2004, 0xd0fc, 0x1128, 0x080c, 0x56d8,
-	0x0110, 0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000,
-	0x0005, 0x78a8, 0xd08c, 0x1118, 0xd084, 0x0904, 0x4492, 0x080c,
-	0x4ad8, 0x0904, 0x3552, 0x080c, 0x4aa5, 0x1120, 0x2009, 0x0002,
-	0x0804, 0x354f, 0x080c, 0x696a, 0x0130, 0x908e, 0x0004, 0x0118,
-	0x908e, 0x0005, 0x15a0, 0x78a8, 0xd08c, 0x0120, 0xb800, 0xc08c,
-	0xb802, 0x0028, 0x080c, 0x56d0, 0xd0b4, 0x0904, 0x44cc, 0x7884,
-	0x908e, 0x007e, 0x0904, 0x44cc, 0x908e, 0x007f, 0x0904, 0x44cc,
-	0x908e, 0x0080, 0x0904, 0x44cc, 0xb800, 0xd08c, 0x1904, 0x44cc,
-	0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xcce4, 0x1120,
-	0x2009, 0x0003, 0x0804, 0x354f, 0x7007, 0x0003, 0x701f, 0x52f1,
-	0x0005, 0x080c, 0x4ad8, 0x0904, 0x3552, 0x0804, 0x44cc, 0x080c,
-	0x330d, 0x0108, 0x0005, 0x2009, 0x1834, 0x210c, 0x81ff, 0x0120,
-	0x2009, 0x0001, 0x0804, 0x354f, 0x080c, 0x56e4, 0x0120, 0x2009,
-	0x0007, 0x0804, 0x354f, 0x080c, 0x6962, 0x0120, 0x2009, 0x0008,
-	0x0804, 0x354f, 0xb89c, 0xd0a4, 0x1118, 0xd0ac, 0x1904, 0x44cc,
-	0x9006, 0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xcd3e,
-	0x1120, 0x2009, 0x0003, 0x0804, 0x354f, 0x7007, 0x0003, 0x701f,
-	0x532a, 0x0005, 0xa830, 0x9086, 0x0100, 0x1120, 0x2009, 0x0004,
-	0x0804, 0x562d, 0x080c, 0x4ad8, 0x0904, 0x3552, 0x0804, 0x52c3,
-	0x81ff, 0x2009, 0x0001, 0x1904, 0x354f, 0x080c, 0x56e4, 0x2009,
-	0x0007, 0x1904, 0x354f, 0x080c, 0x6962, 0x0120, 0x2009, 0x0008,
-	0x0804, 0x354f, 0x080c, 0x4ad8, 0x0904, 0x3552, 0x080c, 0x696a,
-	0x2009, 0x0009, 0x1904, 0x354f, 0x080c, 0x4aa5, 0x2009, 0x0002,
-	0x0904, 0x354f, 0x9006, 0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a,
-	0x7988, 0x9194, 0xff00, 0x918c, 0x00ff, 0x9006, 0x82ff, 0x1128,
-	0xc0ed, 0xa952, 0x798c, 0xa956, 0x0038, 0x928e, 0x0100, 0x1904,
-	0x3552, 0xc0e5, 0xa952, 0xa956, 0xa83e, 0x080c, 0xcf91, 0x2009,
-	0x0003, 0x0904, 0x354f, 0x7007, 0x0003, 0x701f, 0x5380, 0x0005,
-	0xa830, 0x9086, 0x0100, 0x2009, 0x0004, 0x0904, 0x354f, 0x0804,
-	0x351d, 0x7aa8, 0x9284, 0xc000, 0x0148, 0xd2ec, 0x01a0, 0x080c,
-	0x56e4, 0x1188, 0x2009, 0x0014, 0x0804, 0x354f, 0xd2dc, 0x1568,
-	0x81ff, 0x2009, 0x0001, 0x1904, 0x354f, 0x080c, 0x56e4, 0x2009,
-	0x0007, 0x1904, 0x354f, 0xd2f4, 0x0130, 0x9284, 0x5000, 0x080c,
-	0x56ab, 0x0804, 0x351d, 0xd2fc, 0x0158, 0x080c, 0x4ad8, 0x0904,
-	0x3552, 0x7984, 0x9284, 0x9000, 0x080c, 0x5688, 0x0804, 0x351d,
-	0x080c, 0x4ad8, 0x0904, 0x3552, 0xb804, 0x9084, 0x00ff, 0x9086,
-	0x0006, 0x2009, 0x0009, 0x1904, 0x5469, 0x080c, 0x4aa5, 0x2009,
-	0x0002, 0x0904, 0x5469, 0xa85c, 0x9080, 0x001b, 0xaf60, 0x2009,
-	0x0008, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x080c, 0x4aee, 0x701f,
-	0x53da, 0x0005, 0xa86c, 0x9086, 0x0500, 0x1138, 0xa870, 0x9005,
-	0x1120, 0xa874, 0x9084, 0xff00, 0x0110, 0x1904, 0x3552, 0xa866,
-	0xa832, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0x4ad8, 0x1110, 0x0804,
-	0x3552, 0x2009, 0x0043, 0x080c, 0xcff9, 0x2009, 0x0003, 0x0904,
-	0x5469, 0x7007, 0x0003, 0x701f, 0x53fe, 0x0005, 0xa830, 0x9086,
-	0x0100, 0x2009, 0x0004, 0x0904, 0x5469, 0x7984, 0x7aa8, 0x9284,
-	0x1000, 0x080c, 0x5688, 0x0804, 0x351d, 0x00c6, 0xaab0, 0x9284,
-	0xc000, 0x0140, 0xd2ec, 0x0168, 0x080c, 0x56e4, 0x1150, 0x2009,
-	0x0014, 0x04f0, 0x2061, 0x1800, 0x080c, 0x56e4, 0x2009, 0x0007,
-	0x15b8, 0xd2f4, 0x0128, 0x9284, 0x5000, 0x080c, 0x56ab, 0x0050,
-	0xd2fc, 0x0178, 0x080c, 0x4ad6, 0x0588, 0xa998, 0x9284, 0x9000,
-	0x080c, 0x5688, 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000,
-	0x0438, 0x080c, 0x4ad6, 0x0510, 0x080c, 0x696a, 0x2009, 0x0009,
-	0x11b8, 0xa8c4, 0x9086, 0x0500, 0x11c8, 0xa8c8, 0x9005, 0x11b0,
-	0xa8cc, 0x9084, 0xff00, 0x1190, 0x080c, 0x4ad6, 0x1108, 0x0070,
-	0x2009, 0x004b, 0x080c, 0xcff9, 0x2009, 0x0003, 0x0108, 0x0078,
-	0x0429, 0x19c0, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006,
-	0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x00ce, 0x0005, 0x9006,
-	0x0ce0, 0x7aa8, 0xd2dc, 0x0904, 0x354f, 0x0016, 0x7984, 0x9284,
-	0x1000, 0xc0fd, 0x080c, 0x5688, 0x001e, 0x1904, 0x354f, 0x0804,
-	0x351d, 0x00f6, 0x2d78, 0x0011, 0x00fe, 0x0005, 0xaab0, 0xd2dc,
-	0x0150, 0x0016, 0xa998, 0x9284, 0x1000, 0xc0fd, 0x080c, 0x5688,
-	0x001e, 0x9085, 0x0001, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001,
-	0x0804, 0x354f, 0x080c, 0x56e4, 0x0120, 0x2009, 0x0007, 0x0804,
-	0x354f, 0x7984, 0x7ea8, 0x96b4, 0x00ff, 0x080c, 0x6600, 0x1904,
-	0x3552, 0x9186, 0x007f, 0x0138, 0x080c, 0x696a, 0x0120, 0x2009,
-	0x0009, 0x0804, 0x354f, 0x080c, 0x4aa5, 0x1120, 0x2009, 0x0002,
-	0x0804, 0x354f, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x2001,
-	0x0100, 0x8007, 0xa80a, 0x080c, 0xccfe, 0x1120, 0x2009, 0x0003,
-	0x0804, 0x354f, 0x7007, 0x0003, 0x701f, 0x54c7, 0x0005, 0xa808,
-	0x8007, 0x9086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x354f,
-	0xa8e0, 0xa866, 0xa810, 0x8007, 0x9084, 0x00ff, 0x800c, 0xa814,
-	0x8007, 0x9084, 0x00ff, 0x8004, 0x9080, 0x0002, 0x9108, 0x8906,
-	0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0004,
-	0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x4af1, 0x080c, 0x4aa5,
-	0x1120, 0x2009, 0x0002, 0x0804, 0x354f, 0x7984, 0x9194, 0xff00,
-	0x918c, 0x00ff, 0x8217, 0x82ff, 0x1118, 0x7023, 0x19b3, 0x0040,
-	0x92c6, 0x0001, 0x1118, 0x7023, 0x19cd, 0x0010, 0x0804, 0x3552,
-	0x2009, 0x001a, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080,
-	0x0019, 0xaf60, 0x080c, 0x4aee, 0x701f, 0x5517, 0x0005, 0x2001,
-	0x182e, 0x2003, 0x0001, 0xa85c, 0x9080, 0x0019, 0x2098, 0xa860,
-	0x20e0, 0x20a9, 0x001a, 0x7020, 0x20a0, 0x20e9, 0x0001, 0x4003,
-	0x0804, 0x351d, 0x080c, 0x4aa5, 0x1120, 0x2009, 0x0002, 0x0804,
-	0x354f, 0x7984, 0x9194, 0xff00, 0x918c, 0x00ff, 0x8217, 0x82ff,
-	0x1118, 0x2099, 0x19b3, 0x0040, 0x92c6, 0x0001, 0x1118, 0x2099,
-	0x19cd, 0x0010, 0x0804, 0x3552, 0xa85c, 0x9080, 0x0019, 0x20a0,
-	0xa860, 0x20e8, 0x20a9, 0x001a, 0x20e1, 0x0001, 0x4003, 0x2009,
+	0x0800, 0x0120, 0x9386, 0x003c, 0x0170, 0x0c20, 0x83ff, 0x1148,
+	0x7224, 0x900e, 0x2001, 0x0003, 0x080c, 0x8f68, 0x2208, 0x0804,
+	0x3524, 0x7033, 0x0001, 0x7122, 0x7024, 0x9300, 0x7026, 0x2061,
+	0x18b8, 0x2c44, 0xa06b, 0x0000, 0xa37a, 0x7028, 0xa076, 0x7034,
+	0xa072, 0xa48e, 0xa592, 0xa696, 0xa79a, 0x080c, 0x10e9, 0x7007,
+	0x0002, 0x701f, 0x505c, 0x0005, 0x7030, 0x9005, 0x1178, 0x7120,
+	0x7028, 0x20a0, 0x901e, 0x7034, 0x20e8, 0x2061, 0x18b8, 0x2c44,
+	0xa48c, 0xa590, 0xa694, 0xa798, 0x0804, 0x501a, 0x7224, 0x900e,
+	0x2001, 0x0003, 0x080c, 0x8f68, 0x2208, 0x0804, 0x3524, 0x00f6,
+	0x00e6, 0x080c, 0x56e3, 0x2009, 0x0007, 0x1904, 0x50ef, 0x2071,
+	0x189e, 0x745c, 0x84ff, 0x2009, 0x000e, 0x1904, 0x50ef, 0xac9c,
+	0xad98, 0xaea4, 0xafa0, 0x0096, 0x080c, 0x1018, 0x2009, 0x0002,
+	0x0904, 0x50ef, 0x2900, 0x705e, 0x900e, 0x901e, 0x7356, 0x7362,
+	0xa860, 0x7066, 0xa85c, 0x9080, 0x0003, 0x705a, 0x20a0, 0x91d8,
+	0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x6972, 0x0118, 0x080c,
+	0x697a, 0x1148, 0xb814, 0x20a9, 0x0001, 0x4004, 0xb810, 0x4004,
+	0x4104, 0x9398, 0x0003, 0x8108, 0x9182, 0x0800, 0x0120, 0x9386,
+	0x003c, 0x01e8, 0x0c20, 0x83ff, 0x11c0, 0x7254, 0x900e, 0x2001,
+	0x0003, 0x080c, 0x8f68, 0x2208, 0x009e, 0xa897, 0x4000, 0xa99a,
+	0x715c, 0x81ff, 0x090c, 0x0dd5, 0x2148, 0x080c, 0x1031, 0x9006,
+	0x705e, 0x918d, 0x0001, 0x2008, 0x0418, 0x7063, 0x0001, 0x7152,
+	0x7054, 0x9300, 0x7056, 0x2061, 0x18b9, 0x2c44, 0xa37a, 0x7058,
+	0xa076, 0x7064, 0xa072, 0xa48e, 0xa592, 0xa696, 0xa79a, 0xa09f,
+	0x50fb, 0x000e, 0xa0a2, 0x080c, 0x10e9, 0x9006, 0x0048, 0x009e,
+	0xa897, 0x4005, 0xa99a, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030,
+	0x00ee, 0x00fe, 0x0005, 0x00f6, 0xa0a0, 0x904d, 0x090c, 0x0dd5,
+	0x00e6, 0x2071, 0x189e, 0xa06c, 0x908e, 0x0100, 0x0138, 0xa87b,
+	0x0030, 0xa883, 0x0000, 0xa897, 0x4002, 0x00d8, 0x7060, 0x9005,
+	0x1158, 0x7150, 0x7058, 0x20a0, 0x901e, 0x7064, 0x20e8, 0xa48c,
+	0xa590, 0xa694, 0xa798, 0x0428, 0xa87b, 0x0000, 0xa883, 0x0000,
+	0xa897, 0x4000, 0x7254, 0x900e, 0x2001, 0x0003, 0x080c, 0x8f68,
+	0xaa9a, 0x715c, 0x81ff, 0x090c, 0x0dd5, 0x2148, 0x080c, 0x1031,
+	0x705f, 0x0000, 0xa0a0, 0x2048, 0x0126, 0x2091, 0x8000, 0x080c,
+	0x6c81, 0x012e, 0xa09f, 0x0000, 0xa0a3, 0x0000, 0x00ee, 0x00fe,
+	0x0005, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x6972,
+	0x0118, 0x080c, 0x697a, 0x1148, 0xb814, 0x20a9, 0x0001, 0x4004,
+	0xb810, 0x4004, 0x4104, 0x9398, 0x0003, 0x8108, 0x9182, 0x0800,
+	0x0120, 0x9386, 0x003c, 0x0518, 0x0c20, 0x83ff, 0x11f0, 0x7154,
+	0x810c, 0xa99a, 0xa897, 0x4000, 0x715c, 0x81ff, 0x090c, 0x0dd5,
+	0x2148, 0x080c, 0x1031, 0x9006, 0x705e, 0x918d, 0x0001, 0x2008,
+	0xa0a0, 0x2048, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c81, 0x012e,
+	0xa09f, 0x0000, 0xa0a3, 0x0000, 0x0070, 0x7063, 0x0001, 0x7152,
+	0x7054, 0x9300, 0x7056, 0xa37a, 0xa48e, 0xa592, 0xa696, 0xa79a,
+	0x080c, 0x10e9, 0x9006, 0x00ee, 0x0005, 0x0096, 0xa88c, 0x90be,
+	0x7000, 0x0148, 0x90be, 0x7100, 0x0130, 0x90be, 0x7200, 0x0118,
+	0x009e, 0x0804, 0x3559, 0xa884, 0xa988, 0x080c, 0x283e, 0x1518,
+	0x080c, 0x659e, 0x1500, 0x7126, 0xbe12, 0xbd16, 0xae7c, 0x080c,
+	0x4aa4, 0x01c8, 0x080c, 0x4aa4, 0x01b0, 0x009e, 0xa867, 0x0000,
+	0xa868, 0xc0fd, 0xa86a, 0xa823, 0x0000, 0xa804, 0x2048, 0x080c,
+	0xccdf, 0x1120, 0x2009, 0x0003, 0x0804, 0x3556, 0x7007, 0x0003,
+	0x701f, 0x51c8, 0x0005, 0x009e, 0x2009, 0x0002, 0x0804, 0x3556,
+	0x7124, 0x080c, 0x32bb, 0xa820, 0x9086, 0x8001, 0x1120, 0x2009,
+	0x0004, 0x0804, 0x3556, 0x2900, 0x7022, 0xa804, 0x0096, 0x2048,
+	0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x009e,
+	0x9080, 0x0002, 0x0076, 0x0006, 0x2098, 0x20a0, 0x27e0, 0x27e8,
+	0x20a9, 0x002a, 0x080c, 0x0f7c, 0xaa6c, 0xab70, 0xac74, 0xad78,
+	0x2061, 0x18b8, 0x2c44, 0xa06b, 0x0000, 0xae64, 0xaf8c, 0x97c6,
+	0x7000, 0x0118, 0x97c6, 0x7100, 0x1148, 0x96c2, 0x0004, 0x0600,
+	0x2009, 0x0004, 0x000e, 0x007e, 0x0804, 0x4af0, 0x97c6, 0x7200,
+	0x11b8, 0x96c2, 0x0054, 0x02a0, 0x000e, 0x007e, 0x2061, 0x18b8,
+	0x2c44, 0xa076, 0xa772, 0xa07b, 0x002a, 0xa28e, 0xa392, 0xa496,
+	0xa59a, 0x080c, 0x10e9, 0x7007, 0x0002, 0x701f, 0x5224, 0x0005,
+	0x000e, 0x007e, 0x0804, 0x3559, 0x7020, 0x2048, 0xa804, 0x2048,
+	0xa804, 0x2048, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084,
+	0xffc0, 0x9080, 0x0002, 0x2098, 0x20a0, 0x27e0, 0x27e8, 0x20a9,
+	0x002a, 0x080c, 0x0f7c, 0x2100, 0x2238, 0x2061, 0x18b8, 0x2c44,
+	0xa28c, 0xa390, 0xa494, 0xa598, 0x2009, 0x002a, 0x0804, 0x4af0,
+	0x81ff, 0x1904, 0x3556, 0x798c, 0x2001, 0x197e, 0x918c, 0x8000,
+	0x2102, 0x080c, 0x4abb, 0x0904, 0x3559, 0x080c, 0x6972, 0x0120,
+	0x080c, 0x697a, 0x1904, 0x3559, 0x080c, 0x66c6, 0x0904, 0x3556,
+	0x0126, 0x2091, 0x8000, 0x080c, 0x678c, 0x012e, 0x0904, 0x3556,
+	0x2001, 0x197e, 0x2004, 0xd0fc, 0x1904, 0x3524, 0x0804, 0x451c,
+	0xa9a0, 0x2001, 0x197e, 0x918c, 0x8000, 0xc18d, 0x2102, 0x080c,
+	0x4ac8, 0x01a0, 0x080c, 0x6972, 0x0118, 0x080c, 0x697a, 0x1170,
+	0x080c, 0x66c6, 0x2009, 0x0002, 0x0128, 0x080c, 0x678c, 0x1170,
+	0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006,
+	0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000,
+	0x2001, 0x197e, 0x2004, 0xd0fc, 0x1128, 0x080c, 0x56d7, 0x0110,
+	0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005,
+	0x78a8, 0xd08c, 0x1118, 0xd084, 0x0904, 0x4491, 0x080c, 0x4ad7,
+	0x0904, 0x3559, 0x080c, 0x4aa4, 0x1120, 0x2009, 0x0002, 0x0804,
+	0x3556, 0x080c, 0x6972, 0x0130, 0x908e, 0x0004, 0x0118, 0x908e,
+	0x0005, 0x15a0, 0x78a8, 0xd08c, 0x0120, 0xb800, 0xc08c, 0xb802,
+	0x0028, 0x080c, 0x56cf, 0xd0b4, 0x0904, 0x44cb, 0x7884, 0x908e,
+	0x007e, 0x0904, 0x44cb, 0x908e, 0x007f, 0x0904, 0x44cb, 0x908e,
+	0x0080, 0x0904, 0x44cb, 0xb800, 0xd08c, 0x1904, 0x44cb, 0xa867,
+	0x0000, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xccfe, 0x1120, 0x2009,
+	0x0003, 0x0804, 0x3556, 0x7007, 0x0003, 0x701f, 0x52f0, 0x0005,
+	0x080c, 0x4ad7, 0x0904, 0x3559, 0x0804, 0x44cb, 0x080c, 0x3314,
+	0x0108, 0x0005, 0x2009, 0x1834, 0x210c, 0x81ff, 0x0120, 0x2009,
+	0x0001, 0x0804, 0x3556, 0x080c, 0x56e3, 0x0120, 0x2009, 0x0007,
+	0x0804, 0x3556, 0x080c, 0x696a, 0x0120, 0x2009, 0x0008, 0x0804,
+	0x3556, 0xb89c, 0xd0a4, 0x1118, 0xd0ac, 0x1904, 0x44cb, 0x9006,
+	0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xcd58, 0x1120,
+	0x2009, 0x0003, 0x0804, 0x3556, 0x7007, 0x0003, 0x701f, 0x5329,
+	0x0005, 0xa830, 0x9086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804,
+	0x562c, 0x080c, 0x4ad7, 0x0904, 0x3559, 0x0804, 0x52c2, 0x81ff,
+	0x2009, 0x0001, 0x1904, 0x3556, 0x080c, 0x56e3, 0x2009, 0x0007,
+	0x1904, 0x3556, 0x080c, 0x696a, 0x0120, 0x2009, 0x0008, 0x0804,
+	0x3556, 0x080c, 0x4ad7, 0x0904, 0x3559, 0x080c, 0x6972, 0x2009,
+	0x0009, 0x1904, 0x3556, 0x080c, 0x4aa4, 0x2009, 0x0002, 0x0904,
+	0x3556, 0x9006, 0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x7988,
+	0x9194, 0xff00, 0x918c, 0x00ff, 0x9006, 0x82ff, 0x1128, 0xc0ed,
+	0xa952, 0x798c, 0xa956, 0x0038, 0x928e, 0x0100, 0x1904, 0x3559,
+	0xc0e5, 0xa952, 0xa956, 0xa83e, 0x080c, 0xcfab, 0x2009, 0x0003,
+	0x0904, 0x3556, 0x7007, 0x0003, 0x701f, 0x537f, 0x0005, 0xa830,
+	0x9086, 0x0100, 0x2009, 0x0004, 0x0904, 0x3556, 0x0804, 0x3524,
+	0x7aa8, 0x9284, 0xc000, 0x0148, 0xd2ec, 0x01a0, 0x080c, 0x56e3,
+	0x1188, 0x2009, 0x0014, 0x0804, 0x3556, 0xd2dc, 0x1568, 0x81ff,
+	0x2009, 0x0001, 0x1904, 0x3556, 0x080c, 0x56e3, 0x2009, 0x0007,
+	0x1904, 0x3556, 0xd2f4, 0x0130, 0x9284, 0x5000, 0x080c, 0x56aa,
+	0x0804, 0x3524, 0xd2fc, 0x0158, 0x080c, 0x4ad7, 0x0904, 0x3559,
+	0x7984, 0x9284, 0x9000, 0x080c, 0x5687, 0x0804, 0x3524, 0x080c,
+	0x4ad7, 0x0904, 0x3559, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006,
+	0x2009, 0x0009, 0x1904, 0x5468, 0x080c, 0x4aa4, 0x2009, 0x0002,
+	0x0904, 0x5468, 0xa85c, 0x9080, 0x001b, 0xaf60, 0x2009, 0x0008,
+	0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x080c, 0x4aed, 0x701f, 0x53d9,
+	0x0005, 0xa86c, 0x9086, 0x0500, 0x1138, 0xa870, 0x9005, 0x1120,
+	0xa874, 0x9084, 0xff00, 0x0110, 0x1904, 0x3559, 0xa866, 0xa832,
+	0xa868, 0xc0fd, 0xa86a, 0x080c, 0x4ad7, 0x1110, 0x0804, 0x3559,
+	0x2009, 0x0043, 0x080c, 0xd013, 0x2009, 0x0003, 0x0904, 0x5468,
+	0x7007, 0x0003, 0x701f, 0x53fd, 0x0005, 0xa830, 0x9086, 0x0100,
+	0x2009, 0x0004, 0x0904, 0x5468, 0x7984, 0x7aa8, 0x9284, 0x1000,
+	0x080c, 0x5687, 0x0804, 0x3524, 0x00c6, 0xaab0, 0x9284, 0xc000,
+	0x0140, 0xd2ec, 0x0168, 0x080c, 0x56e3, 0x1150, 0x2009, 0x0014,
+	0x04f0, 0x2061, 0x1800, 0x080c, 0x56e3, 0x2009, 0x0007, 0x15b8,
+	0xd2f4, 0x0128, 0x9284, 0x5000, 0x080c, 0x56aa, 0x0050, 0xd2fc,
+	0x0178, 0x080c, 0x4ad5, 0x0588, 0xa998, 0x9284, 0x9000, 0x080c,
+	0x5687, 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0x0438,
+	0x080c, 0x4ad5, 0x0510, 0x080c, 0x6972, 0x2009, 0x0009, 0x11b8,
+	0xa8c4, 0x9086, 0x0500, 0x11c8, 0xa8c8, 0x9005, 0x11b0, 0xa8cc,
+	0x9084, 0xff00, 0x1190, 0x080c, 0x4ad5, 0x1108, 0x0070, 0x2009,
+	0x004b, 0x080c, 0xd013, 0x2009, 0x0003, 0x0108, 0x0078, 0x0429,
+	0x19c0, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e,
+	0x9085, 0x0001, 0x2001, 0x0030, 0x00ce, 0x0005, 0x9006, 0x0ce0,
+	0x7aa8, 0xd2dc, 0x0904, 0x3556, 0x0016, 0x7984, 0x9284, 0x1000,
+	0xc0fd, 0x080c, 0x5687, 0x001e, 0x1904, 0x3556, 0x0804, 0x3524,
+	0x00f6, 0x2d78, 0x0011, 0x00fe, 0x0005, 0xaab0, 0xd2dc, 0x0150,
+	0x0016, 0xa998, 0x9284, 0x1000, 0xc0fd, 0x080c, 0x5687, 0x001e,
+	0x9085, 0x0001, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804,
+	0x3556, 0x080c, 0x56e3, 0x0120, 0x2009, 0x0007, 0x0804, 0x3556,
+	0x7984, 0x7ea8, 0x96b4, 0x00ff, 0x080c, 0x65ff, 0x1904, 0x3559,
+	0x9186, 0x007f, 0x0138, 0x080c, 0x6972, 0x0120, 0x2009, 0x0009,
+	0x0804, 0x3556, 0x080c, 0x4aa4, 0x1120, 0x2009, 0x0002, 0x0804,
+	0x3556, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x2001, 0x0100,
+	0x8007, 0xa80a, 0x080c, 0xcd18, 0x1120, 0x2009, 0x0003, 0x0804,
+	0x3556, 0x7007, 0x0003, 0x701f, 0x54c6, 0x0005, 0xa808, 0x8007,
+	0x9086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x3556, 0xa8e0,
+	0xa866, 0xa810, 0x8007, 0x9084, 0x00ff, 0x800c, 0xa814, 0x8007,
+	0x9084, 0x00ff, 0x8004, 0x9080, 0x0002, 0x9108, 0x8906, 0x8006,
+	0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0004, 0x7a8c,
+	0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x4af0, 0x080c, 0x4aa4, 0x1120,
+	0x2009, 0x0002, 0x0804, 0x3556, 0x7984, 0x9194, 0xff00, 0x918c,
+	0x00ff, 0x8217, 0x82ff, 0x1118, 0x7023, 0x19b3, 0x0040, 0x92c6,
+	0x0001, 0x1118, 0x7023, 0x19cd, 0x0010, 0x0804, 0x3559, 0x2009,
 	0x001a, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019,
-	0xaf60, 0x0804, 0x4af1, 0x7884, 0x908a, 0x1000, 0x1a04, 0x3552,
-	0x0126, 0x2091, 0x8000, 0x8003, 0x800b, 0x810b, 0x9108, 0x00c6,
-	0x2061, 0x19fa, 0x6142, 0x00ce, 0x012e, 0x0804, 0x351d, 0x00c6,
-	0x080c, 0x73b0, 0x1160, 0x080c, 0x7698, 0x080c, 0x601b, 0x9085,
-	0x0001, 0x080c, 0x73f7, 0x080c, 0x72e2, 0x080c, 0x0dd5, 0x2061,
-	0x1800, 0x6030, 0xc09d, 0x6032, 0x080c, 0x5eda, 0x00ce, 0x0005,
-	0x00c6, 0x2001, 0x1800, 0x2004, 0x908e, 0x0000, 0x0904, 0x354f,
-	0x7884, 0x9005, 0x0188, 0x7888, 0x2061, 0x199c, 0x2c0c, 0x2062,
-	0x080c, 0x2c20, 0x01a0, 0x080c, 0x2c28, 0x0188, 0x080c, 0x2c30,
-	0x0170, 0x2162, 0x0804, 0x3552, 0x2061, 0x0100, 0x6038, 0x9086,
-	0x0007, 0x1118, 0x2009, 0x0001, 0x0010, 0x2009, 0x0000, 0x7884,
-	0x9086, 0x0002, 0x1548, 0x2061, 0x0100, 0x6028, 0xc09c, 0x602a,
-	0x0026, 0x2011, 0x0003, 0x080c, 0xa639, 0x2011, 0x0002, 0x080c,
-	0xa643, 0x002e, 0x080c, 0xa526, 0x0036, 0x901e, 0x080c, 0xa59c,
-	0x003e, 0x60e3, 0x0000, 0x080c, 0xe9c8, 0x080c, 0xe9e3, 0x9085,
-	0x0001, 0x080c, 0x73f7, 0x9006, 0x080c, 0x2cef, 0x2001, 0x1800,
-	0x2003, 0x0004, 0x6027, 0x0008, 0x00ce, 0x0804, 0x351d, 0x81ff,
-	0x0120, 0x2009, 0x0001, 0x0804, 0x354f, 0x080c, 0x56e4, 0x0120,
-	0x2009, 0x0007, 0x0804, 0x354f, 0x7984, 0x7ea8, 0x96b4, 0x00ff,
-	0x080c, 0x6600, 0x1904, 0x3552, 0x9186, 0x007f, 0x0138, 0x080c,
-	0x696a, 0x0120, 0x2009, 0x0009, 0x0804, 0x354f, 0x080c, 0x4aa5,
-	0x1120, 0x2009, 0x0002, 0x0804, 0x354f, 0xa867, 0x0000, 0xa868,
-	0xc0fd, 0xa86a, 0x080c, 0xcd01, 0x1120, 0x2009, 0x0003, 0x0804,
-	0x354f, 0x7007, 0x0003, 0x701f, 0x5616, 0x0005, 0xa830, 0x9086,
-	0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x354f, 0xa8e0, 0xa866,
-	0xa834, 0x8007, 0x800c, 0xa85c, 0x9080, 0x000c, 0x7a8c, 0x7b88,
-	0x7c9c, 0x7d98, 0xaf60, 0x0804, 0x4af1, 0xa898, 0x9086, 0x000d,
-	0x1904, 0x354f, 0x2021, 0x4005, 0x0126, 0x2091, 0x8000, 0x0e04,
-	0x563a, 0x0010, 0x012e, 0x0cc0, 0x7c36, 0x9486, 0x4000, 0x0118,
-	0x7833, 0x0011, 0x0010, 0x7833, 0x0010, 0x7883, 0x4005, 0xa998,
-	0x7986, 0xa9a4, 0x799a, 0xa9a8, 0x799e, 0x080c, 0x4ae1, 0x2091,
-	0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119b, 0x7007,
-	0x0001, 0x2091, 0x5000, 0x700f, 0x0000, 0x012e, 0x0005, 0x0126,
-	0x2091, 0x8000, 0x00c6, 0x2061, 0x19fa, 0x7984, 0x6152, 0x614e,
-	0x6057, 0x0000, 0x604b, 0x0009, 0x7898, 0x606a, 0x789c, 0x6066,
-	0x7888, 0x6062, 0x788c, 0x605e, 0x2001, 0x1a08, 0x2044, 0x2001,
-	0x1a0f, 0xa076, 0xa060, 0xa072, 0xa07b, 0x0001, 0xa07f, 0x0002,
-	0xa06b, 0x0000, 0xa09f, 0x0000, 0x00ce, 0x012e, 0x0804, 0x351d,
-	0x0126, 0x2091, 0x8000, 0x00b6, 0x00c6, 0x90e4, 0xc000, 0x0128,
-	0x0006, 0x080c, 0xcb68, 0x000e, 0x1198, 0xd0e4, 0x0160, 0x9180,
-	0x1000, 0x2004, 0x905d, 0x0160, 0x080c, 0x6035, 0x080c, 0xadb1,
-	0x0110, 0xb817, 0x0000, 0x9006, 0x00ce, 0x00be, 0x012e, 0x0005,
-	0x9085, 0x0001, 0x0cc8, 0x0126, 0x2091, 0x8000, 0x0156, 0x2010,
-	0x900e, 0x20a9, 0x0800, 0x0016, 0x9180, 0x1000, 0x2004, 0x9005,
-	0x0180, 0x9186, 0x007e, 0x0168, 0x9186, 0x007f, 0x0150, 0x9186,
-	0x0080, 0x0138, 0x9186, 0x00ff, 0x0120, 0x0026, 0x2200, 0x0801,
-	0x002e, 0x001e, 0x8108, 0x1f04, 0x56b3, 0x015e, 0x012e, 0x0005,
-	0x2001, 0x1848, 0x2004, 0x0005, 0x2001, 0x1867, 0x2004, 0x0005,
-	0x0006, 0x2001, 0x1810, 0x2004, 0xd0d4, 0x000e, 0x0005, 0x2001,
-	0x180e, 0x2004, 0xd0b4, 0x0005, 0x2001, 0x1800, 0x2004, 0x9086,
-	0x0003, 0x0005, 0x0016, 0x00e6, 0x2071, 0x189e, 0x7108, 0x910d,
-	0x710a, 0x00ee, 0x001e, 0x0005, 0x79a4, 0x9182, 0x0081, 0x1a04,
-	0x3552, 0x810c, 0x0016, 0x080c, 0x4aa5, 0x080c, 0x0f07, 0x2100,
-	0x2238, 0x7d84, 0x7c88, 0x7b8c, 0x7a90, 0x001e, 0x080c, 0x4aee,
-	0x701f, 0x570b, 0x0005, 0x2079, 0x0000, 0x7d94, 0x7c98, 0x7ba8,
-	0x7aac, 0x79a4, 0x810c, 0x2061, 0x18b8, 0x2c44, 0xa770, 0xa074,
-	0x2071, 0x189e, 0x080c, 0x4af1, 0x701f, 0x571f, 0x0005, 0x2061,
-	0x18b8, 0x2c44, 0x0016, 0x0026, 0xa270, 0xa174, 0x080c, 0x0f0f,
-	0x002e, 0x001e, 0x080c, 0x0fbc, 0x9006, 0xa802, 0xa806, 0x0804,
-	0x351d, 0x0126, 0x0156, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6,
-	0x00d6, 0x00e6, 0x00f6, 0x2061, 0x0100, 0x2069, 0x0200, 0x2071,
-	0x1800, 0x6044, 0xd0a4, 0x11e8, 0xd084, 0x0118, 0x080c, 0x58da,
-	0x0068, 0xd08c, 0x0118, 0x080c, 0x57e3, 0x0040, 0xd094, 0x0118,
-	0x080c, 0x57b3, 0x0018, 0xd09c, 0x0108, 0x0099, 0x00fe, 0x00ee,
-	0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x012e,
-	0x0005, 0x0016, 0x6128, 0xd19c, 0x1110, 0xc19d, 0x612a, 0x001e,
-	0x0c68, 0x0006, 0x7098, 0x9005, 0x000e, 0x0120, 0x709b, 0x0000,
-	0x7093, 0x0000, 0x624c, 0x9286, 0xf0f0, 0x1150, 0x6048, 0x9086,
-	0xf0f0, 0x0130, 0x624a, 0x6043, 0x0090, 0x6043, 0x0010, 0x0490,
-	0x9294, 0xff00, 0x9296, 0xf700, 0x0178, 0x7138, 0xd1a4, 0x1160,
-	0x6240, 0x9295, 0x0100, 0x6242, 0x9294, 0x0010, 0x0128, 0x2009,
-	0x00f7, 0x080c, 0x5f97, 0x00f0, 0x6040, 0x9084, 0x0010, 0x9085,
-	0x0140, 0x6042, 0x6043, 0x0000, 0x7087, 0x0000, 0x70a3, 0x0001,
-	0x70c7, 0x0000, 0x70df, 0x0000, 0x2009, 0x1c80, 0x200b, 0x0000,
-	0x7097, 0x0000, 0x708b, 0x000f, 0x2009, 0x000f, 0x2011, 0x5e7d,
-	0x080c, 0x8562, 0x0005, 0x2001, 0x1869, 0x2004, 0xd08c, 0x0110,
-	0x705f, 0xffff, 0x7088, 0x9005, 0x1528, 0x2011, 0x5e7d, 0x080c,
-	0x84ca, 0x6040, 0x9094, 0x0010, 0x9285, 0x0020, 0x6042, 0x20a9,
-	0x00c8, 0x6044, 0xd08c, 0x1168, 0x1f04, 0x57c9, 0x6242, 0x709b,
-	0x0000, 0x6040, 0x9094, 0x0010, 0x9285, 0x0080, 0x6042, 0x6242,
-	0x0048, 0x6242, 0x709b, 0x0000, 0x708f, 0x0000, 0x9006, 0x080c,
-	0x6020, 0x0000, 0x0005, 0x708c, 0x908a, 0x0003, 0x1a0c, 0x0dd5,
-	0x000b, 0x0005, 0x57ed, 0x583e, 0x58d9, 0x00f6, 0x0016, 0x6900,
-	0x918c, 0x0800, 0x708f, 0x0001, 0x2001, 0x015d, 0x2003, 0x0000,
-	0x6803, 0x00fc, 0x20a9, 0x0004, 0x6800, 0x9084, 0x00fc, 0x0120,
-	0x1f04, 0x57fc, 0x080c, 0x0dd5, 0x68a0, 0x68a2, 0x689c, 0x689e,
-	0x6898, 0x689a, 0xa001, 0x918d, 0x1600, 0x6902, 0x001e, 0x6837,
-	0x0020, 0x080c, 0x5ffc, 0x2079, 0x1c00, 0x7833, 0x1101, 0x7837,
-	0x0000, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0001, 0x20a1,
-	0x1c0e, 0x20a9, 0x0004, 0x4003, 0x080c, 0xab07, 0x20e1, 0x0001,
+	0xaf60, 0x080c, 0x4aed, 0x701f, 0x5516, 0x0005, 0x2001, 0x182e,
+	0x2003, 0x0001, 0xa85c, 0x9080, 0x0019, 0x2098, 0xa860, 0x20e0,
+	0x20a9, 0x001a, 0x7020, 0x20a0, 0x20e9, 0x0001, 0x4003, 0x0804,
+	0x3524, 0x080c, 0x4aa4, 0x1120, 0x2009, 0x0002, 0x0804, 0x3556,
+	0x7984, 0x9194, 0xff00, 0x918c, 0x00ff, 0x8217, 0x82ff, 0x1118,
+	0x2099, 0x19b3, 0x0040, 0x92c6, 0x0001, 0x1118, 0x2099, 0x19cd,
+	0x0010, 0x0804, 0x3559, 0xa85c, 0x9080, 0x0019, 0x20a0, 0xa860,
+	0x20e8, 0x20a9, 0x001a, 0x20e1, 0x0001, 0x4003, 0x2009, 0x001a,
+	0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019, 0xaf60,
+	0x0804, 0x4af0, 0x7884, 0x908a, 0x1000, 0x1a04, 0x3559, 0x0126,
+	0x2091, 0x8000, 0x8003, 0x800b, 0x810b, 0x9108, 0x00c6, 0x2061,
+	0x19fa, 0x6142, 0x00ce, 0x012e, 0x0804, 0x3524, 0x00c6, 0x080c,
+	0x73bc, 0x1160, 0x080c, 0x76a4, 0x080c, 0x601a, 0x9085, 0x0001,
+	0x080c, 0x7403, 0x080c, 0x72ee, 0x080c, 0x0dd5, 0x2061, 0x1800,
+	0x6030, 0xc09d, 0x6032, 0x080c, 0x5ed9, 0x00ce, 0x0005, 0x00c6,
+	0x2001, 0x1800, 0x2004, 0x908e, 0x0000, 0x0904, 0x3556, 0x7884,
+	0x9005, 0x0188, 0x7888, 0x2061, 0x199c, 0x2c0c, 0x2062, 0x080c,
+	0x2c20, 0x01a0, 0x080c, 0x2c28, 0x0188, 0x080c, 0x2c30, 0x0170,
+	0x2162, 0x0804, 0x3559, 0x2061, 0x0100, 0x6038, 0x9086, 0x0007,
+	0x1118, 0x2009, 0x0001, 0x0010, 0x2009, 0x0000, 0x7884, 0x9086,
+	0x0002, 0x1548, 0x2061, 0x0100, 0x6028, 0xc09c, 0x602a, 0x0026,
+	0x2011, 0x0003, 0x080c, 0xa653, 0x2011, 0x0002, 0x080c, 0xa65d,
+	0x002e, 0x080c, 0xa540, 0x0036, 0x901e, 0x080c, 0xa5b6, 0x003e,
+	0x60e3, 0x0000, 0x080c, 0xe9e9, 0x080c, 0xea04, 0x9085, 0x0001,
+	0x080c, 0x7403, 0x9006, 0x080c, 0x2cef, 0x2001, 0x1800, 0x2003,
+	0x0004, 0x6027, 0x0008, 0x00ce, 0x0804, 0x3524, 0x81ff, 0x0120,
+	0x2009, 0x0001, 0x0804, 0x3556, 0x080c, 0x56e3, 0x0120, 0x2009,
+	0x0007, 0x0804, 0x3556, 0x7984, 0x7ea8, 0x96b4, 0x00ff, 0x080c,
+	0x65ff, 0x1904, 0x3559, 0x9186, 0x007f, 0x0138, 0x080c, 0x6972,
+	0x0120, 0x2009, 0x0009, 0x0804, 0x3556, 0x080c, 0x4aa4, 0x1120,
+	0x2009, 0x0002, 0x0804, 0x3556, 0xa867, 0x0000, 0xa868, 0xc0fd,
+	0xa86a, 0x080c, 0xcd1b, 0x1120, 0x2009, 0x0003, 0x0804, 0x3556,
+	0x7007, 0x0003, 0x701f, 0x5615, 0x0005, 0xa830, 0x9086, 0x0100,
+	0x1120, 0x2009, 0x0004, 0x0804, 0x3556, 0xa8e0, 0xa866, 0xa834,
+	0x8007, 0x800c, 0xa85c, 0x9080, 0x000c, 0x7a8c, 0x7b88, 0x7c9c,
+	0x7d98, 0xaf60, 0x0804, 0x4af0, 0xa898, 0x9086, 0x000d, 0x1904,
+	0x3556, 0x2021, 0x4005, 0x0126, 0x2091, 0x8000, 0x0e04, 0x5639,
+	0x0010, 0x012e, 0x0cc0, 0x7c36, 0x9486, 0x4000, 0x0118, 0x7833,
+	0x0011, 0x0010, 0x7833, 0x0010, 0x7883, 0x4005, 0xa998, 0x7986,
+	0xa9a4, 0x799a, 0xa9a8, 0x799e, 0x080c, 0x4ae0, 0x2091, 0x4080,
+	0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119b, 0x7007, 0x0001,
+	0x2091, 0x5000, 0x700f, 0x0000, 0x012e, 0x0005, 0x0126, 0x2091,
+	0x8000, 0x00c6, 0x2061, 0x19fa, 0x7984, 0x6152, 0x614e, 0x6057,
+	0x0000, 0x604b, 0x0009, 0x7898, 0x606a, 0x789c, 0x6066, 0x7888,
+	0x6062, 0x788c, 0x605e, 0x2001, 0x1a08, 0x2044, 0x2001, 0x1a0f,
+	0xa076, 0xa060, 0xa072, 0xa07b, 0x0001, 0xa07f, 0x0002, 0xa06b,
+	0x0000, 0xa09f, 0x0000, 0x00ce, 0x012e, 0x0804, 0x3524, 0x0126,
+	0x2091, 0x8000, 0x00b6, 0x00c6, 0x90e4, 0xc000, 0x0128, 0x0006,
+	0x080c, 0xcb82, 0x000e, 0x1198, 0xd0e4, 0x0160, 0x9180, 0x1000,
+	0x2004, 0x905d, 0x0160, 0x080c, 0x6034, 0x080c, 0xadcb, 0x0110,
+	0xb817, 0x0000, 0x9006, 0x00ce, 0x00be, 0x012e, 0x0005, 0x9085,
+	0x0001, 0x0cc8, 0x0126, 0x2091, 0x8000, 0x0156, 0x2010, 0x900e,
+	0x20a9, 0x0800, 0x0016, 0x9180, 0x1000, 0x2004, 0x9005, 0x0180,
+	0x9186, 0x007e, 0x0168, 0x9186, 0x007f, 0x0150, 0x9186, 0x0080,
+	0x0138, 0x9186, 0x00ff, 0x0120, 0x0026, 0x2200, 0x0801, 0x002e,
+	0x001e, 0x8108, 0x1f04, 0x56b2, 0x015e, 0x012e, 0x0005, 0x2001,
+	0x1848, 0x2004, 0x0005, 0x2001, 0x1867, 0x2004, 0x0005, 0x0006,
+	0x2001, 0x1810, 0x2004, 0xd0d4, 0x000e, 0x0005, 0x2001, 0x180e,
+	0x2004, 0xd0b4, 0x0005, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003,
+	0x0005, 0x0016, 0x00e6, 0x2071, 0x189e, 0x7108, 0x910d, 0x710a,
+	0x00ee, 0x001e, 0x0005, 0x79a4, 0x9182, 0x0081, 0x1a04, 0x3559,
+	0x810c, 0x0016, 0x080c, 0x4aa4, 0x080c, 0x0f07, 0x2100, 0x2238,
+	0x7d84, 0x7c88, 0x7b8c, 0x7a90, 0x001e, 0x080c, 0x4aed, 0x701f,
+	0x570a, 0x0005, 0x2079, 0x0000, 0x7d94, 0x7c98, 0x7ba8, 0x7aac,
+	0x79a4, 0x810c, 0x2061, 0x18b8, 0x2c44, 0xa770, 0xa074, 0x2071,
+	0x189e, 0x080c, 0x4af0, 0x701f, 0x571e, 0x0005, 0x2061, 0x18b8,
+	0x2c44, 0x0016, 0x0026, 0xa270, 0xa174, 0x080c, 0x0f0f, 0x002e,
+	0x001e, 0x080c, 0x0fbc, 0x9006, 0xa802, 0xa806, 0x0804, 0x3524,
+	0x0126, 0x0156, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6, 0x00d6,
+	0x00e6, 0x00f6, 0x2061, 0x0100, 0x2069, 0x0200, 0x2071, 0x1800,
+	0x6044, 0xd0a4, 0x11e8, 0xd084, 0x0118, 0x080c, 0x58d9, 0x0068,
+	0xd08c, 0x0118, 0x080c, 0x57e2, 0x0040, 0xd094, 0x0118, 0x080c,
+	0x57b2, 0x0018, 0xd09c, 0x0108, 0x0099, 0x00fe, 0x00ee, 0x00de,
+	0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x012e, 0x0005,
+	0x0016, 0x6128, 0xd19c, 0x1110, 0xc19d, 0x612a, 0x001e, 0x0c68,
+	0x0006, 0x7098, 0x9005, 0x000e, 0x0120, 0x709b, 0x0000, 0x7093,
+	0x0000, 0x624c, 0x9286, 0xf0f0, 0x1150, 0x6048, 0x9086, 0xf0f0,
+	0x0130, 0x624a, 0x6043, 0x0090, 0x6043, 0x0010, 0x0490, 0x9294,
+	0xff00, 0x9296, 0xf700, 0x0178, 0x7138, 0xd1a4, 0x1160, 0x6240,
+	0x9295, 0x0100, 0x6242, 0x9294, 0x0010, 0x0128, 0x2009, 0x00f7,
+	0x080c, 0x5f96, 0x00f0, 0x6040, 0x9084, 0x0010, 0x9085, 0x0140,
+	0x6042, 0x6043, 0x0000, 0x7087, 0x0000, 0x70a3, 0x0001, 0x70c7,
+	0x0000, 0x70df, 0x0000, 0x2009, 0x1c80, 0x200b, 0x0000, 0x7097,
+	0x0000, 0x708b, 0x000f, 0x2009, 0x000f, 0x2011, 0x5e7c, 0x080c,
+	0x858b, 0x0005, 0x2001, 0x1869, 0x2004, 0xd08c, 0x0110, 0x705f,
+	0xffff, 0x7088, 0x9005, 0x1528, 0x2011, 0x5e7c, 0x080c, 0x84f3,
+	0x6040, 0x9094, 0x0010, 0x9285, 0x0020, 0x6042, 0x20a9, 0x00c8,
+	0x6044, 0xd08c, 0x1168, 0x1f04, 0x57c8, 0x6242, 0x709b, 0x0000,
+	0x6040, 0x9094, 0x0010, 0x9285, 0x0080, 0x6042, 0x6242, 0x0048,
+	0x6242, 0x709b, 0x0000, 0x708f, 0x0000, 0x9006, 0x080c, 0x601f,
+	0x0000, 0x0005, 0x708c, 0x908a, 0x0003, 0x1a0c, 0x0dd5, 0x000b,
+	0x0005, 0x57ec, 0x583d, 0x58d8, 0x00f6, 0x0016, 0x6900, 0x918c,
+	0x0800, 0x708f, 0x0001, 0x2001, 0x015d, 0x2003, 0x0000, 0x6803,
+	0x00fc, 0x20a9, 0x0004, 0x6800, 0x9084, 0x00fc, 0x0120, 0x1f04,
+	0x57fb, 0x080c, 0x0dd5, 0x68a0, 0x68a2, 0x689c, 0x689e, 0x6898,
+	0x689a, 0xa001, 0x918d, 0x1600, 0x6902, 0x001e, 0x6837, 0x0020,
+	0x080c, 0x5ffb, 0x2079, 0x1c00, 0x7833, 0x1101, 0x7837, 0x0000,
+	0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0001, 0x20a1, 0x1c0e,
+	0x20a9, 0x0004, 0x4003, 0x080c, 0xab21, 0x20e1, 0x0001, 0x2099,
+	0x1c00, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x0014, 0x4003,
+	0x60c3, 0x000c, 0x600f, 0x0000, 0x080c, 0x5ead, 0x00fe, 0x9006,
+	0x7092, 0x6043, 0x0008, 0x6042, 0x0005, 0x00f6, 0x7090, 0x7093,
+	0x0000, 0x9025, 0x0904, 0x58b5, 0x6020, 0xd0b4, 0x1904, 0x58b3,
+	0x71a0, 0x81ff, 0x0904, 0x58a1, 0x9486, 0x000c, 0x1904, 0x58ae,
+	0x9480, 0x0018, 0x8004, 0x20a8, 0x080c, 0x5ff4, 0x2011, 0x0260,
+	0x2019, 0x1c00, 0x220c, 0x2304, 0x9106, 0x11e8, 0x8210, 0x8318,
+	0x1f04, 0x585a, 0x6043, 0x0004, 0x2061, 0x0140, 0x605b, 0xbc94,
+	0x605f, 0xf0f0, 0x2061, 0x0100, 0x6043, 0x0006, 0x708f, 0x0002,
+	0x709b, 0x0002, 0x2009, 0x07d0, 0x2011, 0x5e83, 0x080c, 0x858b,
+	0x080c, 0x5ffb, 0x04c0, 0x080c, 0x5ff4, 0x2079, 0x0260, 0x7930,
+	0x918e, 0x1101, 0x1558, 0x7834, 0x9005, 0x1540, 0x7900, 0x918c,
+	0x00ff, 0x1118, 0x7804, 0x9005, 0x0190, 0x080c, 0x5ff4, 0x2011,
+	0x026e, 0x2019, 0x1805, 0x20a9, 0x0004, 0x220c, 0x2304, 0x9102,
+	0x0230, 0x11a0, 0x8210, 0x8318, 0x1f04, 0x5895, 0x0078, 0x70a3,
+	0x0000, 0x080c, 0x5ff4, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9,
+	0x0001, 0x20a1, 0x1c00, 0x20a9, 0x0014, 0x4003, 0x6043, 0x0008,
+	0x6043, 0x0000, 0x0010, 0x00fe, 0x0005, 0x6040, 0x9085, 0x0100,
+	0x6042, 0x6020, 0xd0b4, 0x1db8, 0x080c, 0xab21, 0x20e1, 0x0001,
 	0x2099, 0x1c00, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x0014,
-	0x4003, 0x60c3, 0x000c, 0x600f, 0x0000, 0x080c, 0x5eae, 0x00fe,
-	0x9006, 0x7092, 0x6043, 0x0008, 0x6042, 0x0005, 0x00f6, 0x7090,
-	0x7093, 0x0000, 0x9025, 0x0904, 0x58b6, 0x6020, 0xd0b4, 0x1904,
-	0x58b4, 0x71a0, 0x81ff, 0x0904, 0x58a2, 0x9486, 0x000c, 0x1904,
-	0x58af, 0x9480, 0x0018, 0x8004, 0x20a8, 0x080c, 0x5ff5, 0x2011,
-	0x0260, 0x2019, 0x1c00, 0x220c, 0x2304, 0x9106, 0x11e8, 0x8210,
-	0x8318, 0x1f04, 0x585b, 0x6043, 0x0004, 0x2061, 0x0140, 0x605b,
-	0xbc94, 0x605f, 0xf0f0, 0x2061, 0x0100, 0x6043, 0x0006, 0x708f,
-	0x0002, 0x709b, 0x0002, 0x2009, 0x07d0, 0x2011, 0x5e84, 0x080c,
-	0x8562, 0x080c, 0x5ffc, 0x04c0, 0x080c, 0x5ff5, 0x2079, 0x0260,
-	0x7930, 0x918e, 0x1101, 0x1558, 0x7834, 0x9005, 0x1540, 0x7900,
-	0x918c, 0x00ff, 0x1118, 0x7804, 0x9005, 0x0190, 0x080c, 0x5ff5,
-	0x2011, 0x026e, 0x2019, 0x1805, 0x20a9, 0x0004, 0x220c, 0x2304,
-	0x9102, 0x0230, 0x11a0, 0x8210, 0x8318, 0x1f04, 0x5896, 0x0078,
-	0x70a3, 0x0000, 0x080c, 0x5ff5, 0x20e1, 0x0000, 0x2099, 0x0260,
-	0x20e9, 0x0001, 0x20a1, 0x1c00, 0x20a9, 0x0014, 0x4003, 0x6043,
-	0x0008, 0x6043, 0x0000, 0x0010, 0x00fe, 0x0005, 0x6040, 0x9085,
-	0x0100, 0x6042, 0x6020, 0xd0b4, 0x1db8, 0x080c, 0xab07, 0x20e1,
-	0x0001, 0x2099, 0x1c00, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9,
-	0x0014, 0x4003, 0x60c3, 0x000c, 0x2011, 0x19f1, 0x2013, 0x0000,
-	0x7093, 0x0000, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0xa250,
-	0x08d8, 0x0005, 0x7098, 0x908a, 0x001d, 0x1a0c, 0x0dd5, 0x000b,
-	0x0005, 0x590b, 0x591e, 0x5947, 0x5967, 0x598d, 0x59bc, 0x59e2,
-	0x5a1a, 0x5a40, 0x5a6e, 0x5aa9, 0x5ae1, 0x5aff, 0x5b2a, 0x5b4c,
-	0x5b67, 0x5b71, 0x5ba5, 0x5bcb, 0x5bfa, 0x5c20, 0x5c58, 0x5c9c,
-	0x5cd9, 0x5cfa, 0x5d53, 0x5d75, 0x5da3, 0x5da3, 0x00c6, 0x2061,
-	0x1800, 0x6003, 0x0007, 0x2061, 0x0100, 0x6004, 0x9084, 0xfff9,
-	0x6006, 0x00ce, 0x0005, 0x2061, 0x0140, 0x605b, 0xbc94, 0x605f,
-	0xf0f0, 0x2061, 0x0100, 0x6043, 0x0002, 0x709b, 0x0001, 0x2009,
-	0x07d0, 0x2011, 0x5e84, 0x080c, 0x8562, 0x0005, 0x00f6, 0x7090,
-	0x9086, 0x0014, 0x1510, 0x6042, 0x6020, 0xd0b4, 0x11f0, 0x080c,
-	0x5ff5, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1102, 0x11a0, 0x7834,
-	0x9005, 0x1188, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110,
-	0x70c7, 0x0001, 0x2011, 0x5e84, 0x080c, 0x84ca, 0x709b, 0x0010,
-	0x080c, 0x5b71, 0x0010, 0x7093, 0x0000, 0x00fe, 0x0005, 0x00f6,
-	0x709b, 0x0003, 0x6043, 0x0004, 0x2011, 0x5e84, 0x080c, 0x84ca,
-	0x080c, 0x5f79, 0x2079, 0x0240, 0x7833, 0x1102, 0x7837, 0x0000,
-	0x20a9, 0x0008, 0x9f88, 0x000e, 0x200b, 0x0000, 0x8108, 0x1f04,
-	0x595c, 0x60c3, 0x0014, 0x080c, 0x5eae, 0x00fe, 0x0005, 0x00f6,
-	0x7090, 0x9005, 0x0500, 0x2011, 0x5e84, 0x080c, 0x84ca, 0x9086,
-	0x0014, 0x11b8, 0x080c, 0x5ff5, 0x2079, 0x0260, 0x7a30, 0x9296,
-	0x1102, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128,
-	0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x709b, 0x0004, 0x0029,
-	0x0010, 0x080c, 0x5fd1, 0x00fe, 0x0005, 0x00f6, 0x709b, 0x0005,
-	0x080c, 0x5f79, 0x2079, 0x0240, 0x7833, 0x1103, 0x7837, 0x0000,
-	0x080c, 0x5ff5, 0x080c, 0x5fd8, 0x1170, 0x7084, 0x9005, 0x1158,
-	0x715c, 0x9186, 0xffff, 0x0138, 0x2011, 0x0008, 0x080c, 0x5e31,
-	0x0168, 0x080c, 0x5fae, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099,
-	0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014,
-	0x080c, 0x5eae, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x0500,
-	0x2011, 0x5e84, 0x080c, 0x84ca, 0x9086, 0x0014, 0x11b8, 0x080c,
-	0x5ff5, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1103, 0x1178, 0x7834,
-	0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110,
-	0x70c7, 0x0001, 0x709b, 0x0006, 0x0029, 0x0010, 0x080c, 0x5fd1,
-	0x00fe, 0x0005, 0x00f6, 0x709b, 0x0007, 0x080c, 0x5f79, 0x2079,
-	0x0240, 0x7833, 0x1104, 0x7837, 0x0000, 0x080c, 0x5ff5, 0x080c,
-	0x5fd8, 0x11b8, 0x7084, 0x9005, 0x11a0, 0x7164, 0x9186, 0xffff,
-	0x0180, 0x9180, 0x331e, 0x200d, 0x918c, 0xff00, 0x810f, 0x2011,
-	0x0008, 0x080c, 0x5e31, 0x0180, 0x080c, 0x4fe2, 0x0110, 0x080c,
-	0x28a7, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9,
-	0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5eae,
-	0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x0500, 0x2011, 0x5e84,
-	0x080c, 0x84ca, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5ff5, 0x2079,
-	0x0260, 0x7a30, 0x9296, 0x1104, 0x1178, 0x7834, 0x9005, 0x1160,
-	0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001,
-	0x709b, 0x0008, 0x0029, 0x0010, 0x080c, 0x5fd1, 0x00fe, 0x0005,
-	0x00f6, 0x709b, 0x0009, 0x080c, 0x5f79, 0x2079, 0x0240, 0x7833,
-	0x1105, 0x7837, 0x0100, 0x080c, 0x5fd8, 0x1150, 0x7084, 0x9005,
-	0x1138, 0x080c, 0x5da4, 0x1188, 0x9085, 0x0001, 0x080c, 0x28a7,
-	0x20a9, 0x0008, 0x080c, 0x5ff5, 0x20e1, 0x0000, 0x2099, 0x026e,
+	0x4003, 0x60c3, 0x000c, 0x2011, 0x19f1, 0x2013, 0x0000, 0x7093,
+	0x0000, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0xa26a, 0x08d8,
+	0x0005, 0x7098, 0x908a, 0x001d, 0x1a0c, 0x0dd5, 0x000b, 0x0005,
+	0x590a, 0x591d, 0x5946, 0x5966, 0x598c, 0x59bb, 0x59e1, 0x5a19,
+	0x5a3f, 0x5a6d, 0x5aa8, 0x5ae0, 0x5afe, 0x5b29, 0x5b4b, 0x5b66,
+	0x5b70, 0x5ba4, 0x5bca, 0x5bf9, 0x5c1f, 0x5c57, 0x5c9b, 0x5cd8,
+	0x5cf9, 0x5d52, 0x5d74, 0x5da2, 0x5da2, 0x00c6, 0x2061, 0x1800,
+	0x6003, 0x0007, 0x2061, 0x0100, 0x6004, 0x9084, 0xfff9, 0x6006,
+	0x00ce, 0x0005, 0x2061, 0x0140, 0x605b, 0xbc94, 0x605f, 0xf0f0,
+	0x2061, 0x0100, 0x6043, 0x0002, 0x709b, 0x0001, 0x2009, 0x07d0,
+	0x2011, 0x5e83, 0x080c, 0x858b, 0x0005, 0x00f6, 0x7090, 0x9086,
+	0x0014, 0x1510, 0x6042, 0x6020, 0xd0b4, 0x11f0, 0x080c, 0x5ff4,
+	0x2079, 0x0260, 0x7a30, 0x9296, 0x1102, 0x11a0, 0x7834, 0x9005,
+	0x1188, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7,
+	0x0001, 0x2011, 0x5e83, 0x080c, 0x84f3, 0x709b, 0x0010, 0x080c,
+	0x5b70, 0x0010, 0x7093, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x709b,
+	0x0003, 0x6043, 0x0004, 0x2011, 0x5e83, 0x080c, 0x84f3, 0x080c,
+	0x5f78, 0x2079, 0x0240, 0x7833, 0x1102, 0x7837, 0x0000, 0x20a9,
+	0x0008, 0x9f88, 0x000e, 0x200b, 0x0000, 0x8108, 0x1f04, 0x595b,
+	0x60c3, 0x0014, 0x080c, 0x5ead, 0x00fe, 0x0005, 0x00f6, 0x7090,
+	0x9005, 0x0500, 0x2011, 0x5e83, 0x080c, 0x84f3, 0x9086, 0x0014,
+	0x11b8, 0x080c, 0x5ff4, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1102,
+	0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c4,
+	0x9005, 0x1110, 0x70c7, 0x0001, 0x709b, 0x0004, 0x0029, 0x0010,
+	0x080c, 0x5fd0, 0x00fe, 0x0005, 0x00f6, 0x709b, 0x0005, 0x080c,
+	0x5f78, 0x2079, 0x0240, 0x7833, 0x1103, 0x7837, 0x0000, 0x080c,
+	0x5ff4, 0x080c, 0x5fd7, 0x1170, 0x7084, 0x9005, 0x1158, 0x715c,
+	0x9186, 0xffff, 0x0138, 0x2011, 0x0008, 0x080c, 0x5e30, 0x0168,
+	0x080c, 0x5fad, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e,
 	0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c,
-	0x5eae, 0x0010, 0x080c, 0x58fe, 0x00fe, 0x0005, 0x00f6, 0x7090,
-	0x9005, 0x05a8, 0x2011, 0x5e84, 0x080c, 0x84ca, 0x9086, 0x0014,
-	0x1560, 0x080c, 0x5ff5, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1105,
-	0x1520, 0x7834, 0x9084, 0x0100, 0x2011, 0x0100, 0x921e, 0x1160,
+	0x5ead, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x0500, 0x2011,
+	0x5e83, 0x080c, 0x84f3, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5ff4,
+	0x2079, 0x0260, 0x7a30, 0x9296, 0x1103, 0x1178, 0x7834, 0x9005,
+	0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7,
+	0x0001, 0x709b, 0x0006, 0x0029, 0x0010, 0x080c, 0x5fd0, 0x00fe,
+	0x0005, 0x00f6, 0x709b, 0x0007, 0x080c, 0x5f78, 0x2079, 0x0240,
+	0x7833, 0x1104, 0x7837, 0x0000, 0x080c, 0x5ff4, 0x080c, 0x5fd7,
+	0x11b8, 0x7084, 0x9005, 0x11a0, 0x7164, 0x9186, 0xffff, 0x0180,
+	0x9180, 0x3325, 0x200d, 0x918c, 0xff00, 0x810f, 0x2011, 0x0008,
+	0x080c, 0x5e30, 0x0180, 0x080c, 0x4fe1, 0x0110, 0x080c, 0x28a7,
+	0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000,
+	0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5ead, 0x00fe,
+	0x0005, 0x00f6, 0x7090, 0x9005, 0x0500, 0x2011, 0x5e83, 0x080c,
+	0x84f3, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5ff4, 0x2079, 0x0260,
+	0x7a30, 0x9296, 0x1104, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38,
+	0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x709b,
+	0x0008, 0x0029, 0x0010, 0x080c, 0x5fd0, 0x00fe, 0x0005, 0x00f6,
+	0x709b, 0x0009, 0x080c, 0x5f78, 0x2079, 0x0240, 0x7833, 0x1105,
+	0x7837, 0x0100, 0x080c, 0x5fd7, 0x1150, 0x7084, 0x9005, 0x1138,
+	0x080c, 0x5da3, 0x1188, 0x9085, 0x0001, 0x080c, 0x28a7, 0x20a9,
+	0x0008, 0x080c, 0x5ff4, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9,
+	0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5ead,
+	0x0010, 0x080c, 0x58fd, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005,
+	0x05a8, 0x2011, 0x5e83, 0x080c, 0x84f3, 0x9086, 0x0014, 0x1560,
+	0x080c, 0x5ff4, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1105, 0x1520,
+	0x7834, 0x9084, 0x0100, 0x2011, 0x0100, 0x921e, 0x1160, 0x7a38,
+	0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x709b,
+	0x000a, 0x00b1, 0x0098, 0x9005, 0x1178, 0x7a38, 0xd2fc, 0x0128,
+	0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x7097, 0x0000, 0x709b,
+	0x000e, 0x080c, 0x5b4b, 0x0010, 0x080c, 0x5fd0, 0x00fe, 0x0005,
+	0x00f6, 0x709b, 0x000b, 0x2011, 0x1c0e, 0x20e9, 0x0001, 0x22a0,
+	0x20a9, 0x0040, 0x2019, 0xffff, 0x4304, 0x080c, 0x5f78, 0x2079,
+	0x0240, 0x7833, 0x1106, 0x7837, 0x0000, 0x080c, 0x5fd7, 0x0118,
+	0x2013, 0x0000, 0x0020, 0x7060, 0x9085, 0x0100, 0x2012, 0x20a9,
+	0x0040, 0x2009, 0x024e, 0x2011, 0x1c0e, 0x220e, 0x8210, 0x8108,
+	0x9186, 0x0260, 0x1128, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240,
+	0x1f04, 0x5acd, 0x60c3, 0x0084, 0x080c, 0x5ead, 0x00fe, 0x0005,
+	0x00f6, 0x7090, 0x9005, 0x01c0, 0x2011, 0x5e83, 0x080c, 0x84f3,
+	0x9086, 0x0084, 0x1178, 0x080c, 0x5ff4, 0x2079, 0x0260, 0x7a30,
+	0x9296, 0x1106, 0x1138, 0x7834, 0x9005, 0x1120, 0x709b, 0x000c,
+	0x0029, 0x0010, 0x080c, 0x5fd0, 0x00fe, 0x0005, 0x00f6, 0x709b,
+	0x000d, 0x080c, 0x5f78, 0x2079, 0x0240, 0x7833, 0x1107, 0x7837,
+	0x0000, 0x080c, 0x5ff4, 0x20a9, 0x0040, 0x2011, 0x026e, 0x2009,
+	0x024e, 0x220e, 0x8210, 0x8108, 0x9186, 0x0260, 0x1150, 0x6810,
+	0x8000, 0x6812, 0x2009, 0x0240, 0x6814, 0x8000, 0x6816, 0x2011,
+	0x0260, 0x1f04, 0x5b11, 0x60c3, 0x0084, 0x080c, 0x5ead, 0x00fe,
+	0x0005, 0x00f6, 0x7090, 0x9005, 0x01e0, 0x2011, 0x5e83, 0x080c,
+	0x84f3, 0x9086, 0x0084, 0x1198, 0x080c, 0x5ff4, 0x2079, 0x0260,
+	0x7a30, 0x9296, 0x1107, 0x1158, 0x7834, 0x9005, 0x1140, 0x7097,
+	0x0001, 0x080c, 0x5f4a, 0x709b, 0x000e, 0x0029, 0x0010, 0x080c,
+	0x5fd0, 0x00fe, 0x0005, 0x918d, 0x0001, 0x080c, 0x601f, 0x709b,
+	0x000f, 0x7093, 0x0000, 0x2061, 0x0140, 0x605b, 0xbc85, 0x605f,
+	0xb5b5, 0x2061, 0x0100, 0x6043, 0x0005, 0x6043, 0x0004, 0x2009,
+	0x07d0, 0x2011, 0x5e83, 0x080c, 0x84e7, 0x0005, 0x7090, 0x9005,
+	0x0130, 0x2011, 0x5e83, 0x080c, 0x84f3, 0x709b, 0x0000, 0x0005,
+	0x709b, 0x0011, 0x080c, 0xab21, 0x080c, 0x5ff4, 0x20e1, 0x0000,
+	0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x7490, 0x9480,
+	0x0018, 0x9080, 0x0007, 0x9084, 0x03f8, 0x8004, 0x20a8, 0x4003,
+	0x080c, 0x5fd7, 0x11a0, 0x717c, 0x81ff, 0x0188, 0x900e, 0x7080,
+	0x9084, 0x00ff, 0x0160, 0x080c, 0x283e, 0x9186, 0x007e, 0x0138,
+	0x9186, 0x0080, 0x0120, 0x2011, 0x0008, 0x080c, 0x5e30, 0x60c3,
+	0x0014, 0x080c, 0x5ead, 0x0005, 0x00f6, 0x7090, 0x9005, 0x0500,
+	0x2011, 0x5e83, 0x080c, 0x84f3, 0x9086, 0x0014, 0x11b8, 0x080c,
+	0x5ff4, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1103, 0x1178, 0x7834,
+	0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110,
+	0x70c7, 0x0001, 0x709b, 0x0012, 0x0029, 0x0010, 0x7093, 0x0000,
+	0x00fe, 0x0005, 0x00f6, 0x709b, 0x0013, 0x080c, 0x5f86, 0x2079,
+	0x0240, 0x7833, 0x1103, 0x7837, 0x0000, 0x080c, 0x5ff4, 0x080c,
+	0x5fd7, 0x1170, 0x7084, 0x9005, 0x1158, 0x715c, 0x9186, 0xffff,
+	0x0138, 0x2011, 0x0008, 0x080c, 0x5e30, 0x0168, 0x080c, 0x5fad,
+	0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000,
+	0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5ead, 0x00fe,
+	0x0005, 0x00f6, 0x7090, 0x9005, 0x0500, 0x2011, 0x5e83, 0x080c,
+	0x84f3, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5ff4, 0x2079, 0x0260,
+	0x7a30, 0x9296, 0x1104, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38,
+	0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x709b,
+	0x0014, 0x0029, 0x0010, 0x7093, 0x0000, 0x00fe, 0x0005, 0x00f6,
+	0x709b, 0x0015, 0x080c, 0x5f86, 0x2079, 0x0240, 0x7833, 0x1104,
+	0x7837, 0x0000, 0x080c, 0x5ff4, 0x080c, 0x5fd7, 0x11b8, 0x7084,
+	0x9005, 0x11a0, 0x7164, 0x9186, 0xffff, 0x0180, 0x9180, 0x3325,
+	0x200d, 0x918c, 0xff00, 0x810f, 0x2011, 0x0008, 0x080c, 0x5e30,
+	0x0180, 0x080c, 0x4fe1, 0x0110, 0x080c, 0x28a7, 0x20a9, 0x0008,
+	0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e,
+	0x4003, 0x60c3, 0x0014, 0x080c, 0x5ead, 0x00fe, 0x0005, 0x00f6,
+	0x7090, 0x9005, 0x05f0, 0x2011, 0x5e83, 0x080c, 0x84f3, 0x9086,
+	0x0014, 0x15a8, 0x080c, 0x5ff4, 0x2079, 0x0260, 0x7a30, 0x9296,
+	0x1105, 0x1568, 0x7834, 0x9084, 0x0100, 0x2011, 0x0100, 0x921e,
+	0x1168, 0x9085, 0x0001, 0x080c, 0x601f, 0x7a38, 0xd2fc, 0x0128,
+	0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x0080, 0x9005, 0x11b8,
 	0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001,
-	0x709b, 0x000a, 0x00b1, 0x0098, 0x9005, 0x1178, 0x7a38, 0xd2fc,
-	0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x7097, 0x0000,
-	0x709b, 0x000e, 0x080c, 0x5b4c, 0x0010, 0x080c, 0x5fd1, 0x00fe,
-	0x0005, 0x00f6, 0x709b, 0x000b, 0x2011, 0x1c0e, 0x20e9, 0x0001,
-	0x22a0, 0x20a9, 0x0040, 0x2019, 0xffff, 0x4304, 0x080c, 0x5f79,
-	0x2079, 0x0240, 0x7833, 0x1106, 0x7837, 0x0000, 0x080c, 0x5fd8,
-	0x0118, 0x2013, 0x0000, 0x0020, 0x7060, 0x9085, 0x0100, 0x2012,
-	0x20a9, 0x0040, 0x2009, 0x024e, 0x2011, 0x1c0e, 0x220e, 0x8210,
-	0x8108, 0x9186, 0x0260, 0x1128, 0x6810, 0x8000, 0x6812, 0x2009,
-	0x0240, 0x1f04, 0x5ace, 0x60c3, 0x0084, 0x080c, 0x5eae, 0x00fe,
-	0x0005, 0x00f6, 0x7090, 0x9005, 0x01c0, 0x2011, 0x5e84, 0x080c,
-	0x84ca, 0x9086, 0x0084, 0x1178, 0x080c, 0x5ff5, 0x2079, 0x0260,
-	0x7a30, 0x9296, 0x1106, 0x1138, 0x7834, 0x9005, 0x1120, 0x709b,
-	0x000c, 0x0029, 0x0010, 0x080c, 0x5fd1, 0x00fe, 0x0005, 0x00f6,
-	0x709b, 0x000d, 0x080c, 0x5f79, 0x2079, 0x0240, 0x7833, 0x1107,
-	0x7837, 0x0000, 0x080c, 0x5ff5, 0x20a9, 0x0040, 0x2011, 0x026e,
-	0x2009, 0x024e, 0x220e, 0x8210, 0x8108, 0x9186, 0x0260, 0x1150,
-	0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x6814, 0x8000, 0x6816,
-	0x2011, 0x0260, 0x1f04, 0x5b12, 0x60c3, 0x0084, 0x080c, 0x5eae,
-	0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x01e0, 0x2011, 0x5e84,
-	0x080c, 0x84ca, 0x9086, 0x0084, 0x1198, 0x080c, 0x5ff5, 0x2079,
+	0x9085, 0x0001, 0x080c, 0x601f, 0x7097, 0x0000, 0x7a38, 0xd2f4,
+	0x0110, 0x70df, 0x0008, 0x709b, 0x0016, 0x0029, 0x0010, 0x7093,
+	0x0000, 0x00fe, 0x0005, 0x080c, 0xab21, 0x080c, 0x5ff4, 0x20e1,
+	0x0000, 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9,
+	0x000e, 0x4003, 0x2011, 0x026d, 0x2204, 0x9084, 0x0100, 0x2011,
+	0x024d, 0x2012, 0x2011, 0x026e, 0x709b, 0x0017, 0x080c, 0x5fd7,
+	0x1150, 0x7084, 0x9005, 0x1138, 0x080c, 0x5da3, 0x1188, 0x9085,
+	0x0001, 0x080c, 0x28a7, 0x20a9, 0x0008, 0x080c, 0x5ff4, 0x20e1,
+	0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003,
+	0x60c3, 0x0014, 0x080c, 0x5ead, 0x0010, 0x080c, 0x58fd, 0x0005,
+	0x00f6, 0x7090, 0x9005, 0x01d8, 0x2011, 0x5e83, 0x080c, 0x84f3,
+	0x9086, 0x0084, 0x1190, 0x080c, 0x5ff4, 0x2079, 0x0260, 0x7a30,
+	0x9296, 0x1106, 0x1150, 0x7834, 0x9005, 0x1138, 0x9006, 0x080c,
+	0x601f, 0x709b, 0x0018, 0x0029, 0x0010, 0x7093, 0x0000, 0x00fe,
+	0x0005, 0x00f6, 0x709b, 0x0019, 0x080c, 0x5f86, 0x2079, 0x0240,
+	0x7833, 0x1106, 0x7837, 0x0000, 0x080c, 0x5ff4, 0x2009, 0x026e,
+	0x2039, 0x1c0e, 0x20a9, 0x0040, 0x213e, 0x8738, 0x8108, 0x9186,
+	0x0280, 0x1128, 0x6814, 0x8000, 0x6816, 0x2009, 0x0260, 0x1f04,
+	0x5d0c, 0x2039, 0x1c0e, 0x080c, 0x5fd7, 0x11e8, 0x2728, 0x2514,
+	0x8207, 0x9084, 0x00ff, 0x8000, 0x2018, 0x9294, 0x00ff, 0x8007,
+	0x9205, 0x202a, 0x7060, 0x2310, 0x8214, 0x92a0, 0x1c0e, 0x2414,
+	0x938c, 0x0001, 0x0118, 0x9294, 0xff00, 0x0018, 0x9294, 0x00ff,
+	0x8007, 0x9215, 0x2222, 0x20a9, 0x0040, 0x2009, 0x024e, 0x270e,
+	0x8738, 0x8108, 0x9186, 0x0260, 0x1128, 0x6810, 0x8000, 0x6812,
+	0x2009, 0x0240, 0x1f04, 0x5d3f, 0x60c3, 0x0084, 0x080c, 0x5ead,
+	0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x01e0, 0x2011, 0x5e83,
+	0x080c, 0x84f3, 0x9086, 0x0084, 0x1198, 0x080c, 0x5ff4, 0x2079,
 	0x0260, 0x7a30, 0x9296, 0x1107, 0x1158, 0x7834, 0x9005, 0x1140,
-	0x7097, 0x0001, 0x080c, 0x5f4b, 0x709b, 0x000e, 0x0029, 0x0010,
-	0x080c, 0x5fd1, 0x00fe, 0x0005, 0x918d, 0x0001, 0x080c, 0x6020,
-	0x709b, 0x000f, 0x7093, 0x0000, 0x2061, 0x0140, 0x605b, 0xbc85,
-	0x605f, 0xb5b5, 0x2061, 0x0100, 0x6043, 0x0005, 0x6043, 0x0004,
-	0x2009, 0x07d0, 0x2011, 0x5e84, 0x080c, 0x84be, 0x0005, 0x7090,
-	0x9005, 0x0130, 0x2011, 0x5e84, 0x080c, 0x84ca, 0x709b, 0x0000,
-	0x0005, 0x709b, 0x0011, 0x080c, 0xab07, 0x080c, 0x5ff5, 0x20e1,
-	0x0000, 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x7490,
-	0x9480, 0x0018, 0x9080, 0x0007, 0x9084, 0x03f8, 0x8004, 0x20a8,
-	0x4003, 0x080c, 0x5fd8, 0x11a0, 0x717c, 0x81ff, 0x0188, 0x900e,
-	0x7080, 0x9084, 0x00ff, 0x0160, 0x080c, 0x283e, 0x9186, 0x007e,
-	0x0138, 0x9186, 0x0080, 0x0120, 0x2011, 0x0008, 0x080c, 0x5e31,
-	0x60c3, 0x0014, 0x080c, 0x5eae, 0x0005, 0x00f6, 0x7090, 0x9005,
-	0x0500, 0x2011, 0x5e84, 0x080c, 0x84ca, 0x9086, 0x0014, 0x11b8,
-	0x080c, 0x5ff5, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1103, 0x1178,
-	0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005,
-	0x1110, 0x70c7, 0x0001, 0x709b, 0x0012, 0x0029, 0x0010, 0x7093,
-	0x0000, 0x00fe, 0x0005, 0x00f6, 0x709b, 0x0013, 0x080c, 0x5f87,
-	0x2079, 0x0240, 0x7833, 0x1103, 0x7837, 0x0000, 0x080c, 0x5ff5,
-	0x080c, 0x5fd8, 0x1170, 0x7084, 0x9005, 0x1158, 0x715c, 0x9186,
-	0xffff, 0x0138, 0x2011, 0x0008, 0x080c, 0x5e31, 0x0168, 0x080c,
-	0x5fae, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9,
-	0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5eae,
-	0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x0500, 0x2011, 0x5e84,
-	0x080c, 0x84ca, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5ff5, 0x2079,
-	0x0260, 0x7a30, 0x9296, 0x1104, 0x1178, 0x7834, 0x9005, 0x1160,
-	0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001,
-	0x709b, 0x0014, 0x0029, 0x0010, 0x7093, 0x0000, 0x00fe, 0x0005,
-	0x00f6, 0x709b, 0x0015, 0x080c, 0x5f87, 0x2079, 0x0240, 0x7833,
-	0x1104, 0x7837, 0x0000, 0x080c, 0x5ff5, 0x080c, 0x5fd8, 0x11b8,
-	0x7084, 0x9005, 0x11a0, 0x7164, 0x9186, 0xffff, 0x0180, 0x9180,
-	0x331e, 0x200d, 0x918c, 0xff00, 0x810f, 0x2011, 0x0008, 0x080c,
-	0x5e31, 0x0180, 0x080c, 0x4fe2, 0x0110, 0x080c, 0x28a7, 0x20a9,
-	0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1,
-	0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5eae, 0x00fe, 0x0005,
-	0x00f6, 0x7090, 0x9005, 0x05f0, 0x2011, 0x5e84, 0x080c, 0x84ca,
-	0x9086, 0x0014, 0x15a8, 0x080c, 0x5ff5, 0x2079, 0x0260, 0x7a30,
-	0x9296, 0x1105, 0x1568, 0x7834, 0x9084, 0x0100, 0x2011, 0x0100,
-	0x921e, 0x1168, 0x9085, 0x0001, 0x080c, 0x6020, 0x7a38, 0xd2fc,
-	0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x0080, 0x9005,
-	0x11b8, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7,
-	0x0001, 0x9085, 0x0001, 0x080c, 0x6020, 0x7097, 0x0000, 0x7a38,
-	0xd2f4, 0x0110, 0x70df, 0x0008, 0x709b, 0x0016, 0x0029, 0x0010,
-	0x7093, 0x0000, 0x00fe, 0x0005, 0x080c, 0xab07, 0x080c, 0x5ff5,
-	0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240,
-	0x20a9, 0x000e, 0x4003, 0x2011, 0x026d, 0x2204, 0x9084, 0x0100,
-	0x2011, 0x024d, 0x2012, 0x2011, 0x026e, 0x709b, 0x0017, 0x080c,
-	0x5fd8, 0x1150, 0x7084, 0x9005, 0x1138, 0x080c, 0x5da4, 0x1188,
-	0x9085, 0x0001, 0x080c, 0x28a7, 0x20a9, 0x0008, 0x080c, 0x5ff5,
-	0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e,
-	0x4003, 0x60c3, 0x0014, 0x080c, 0x5eae, 0x0010, 0x080c, 0x58fe,
-	0x0005, 0x00f6, 0x7090, 0x9005, 0x01d8, 0x2011, 0x5e84, 0x080c,
-	0x84ca, 0x9086, 0x0084, 0x1190, 0x080c, 0x5ff5, 0x2079, 0x0260,
-	0x7a30, 0x9296, 0x1106, 0x1150, 0x7834, 0x9005, 0x1138, 0x9006,
-	0x080c, 0x6020, 0x709b, 0x0018, 0x0029, 0x0010, 0x7093, 0x0000,
-	0x00fe, 0x0005, 0x00f6, 0x709b, 0x0019, 0x080c, 0x5f87, 0x2079,
-	0x0240, 0x7833, 0x1106, 0x7837, 0x0000, 0x080c, 0x5ff5, 0x2009,
-	0x026e, 0x2039, 0x1c0e, 0x20a9, 0x0040, 0x213e, 0x8738, 0x8108,
-	0x9186, 0x0280, 0x1128, 0x6814, 0x8000, 0x6816, 0x2009, 0x0260,
-	0x1f04, 0x5d0d, 0x2039, 0x1c0e, 0x080c, 0x5fd8, 0x11e8, 0x2728,
-	0x2514, 0x8207, 0x9084, 0x00ff, 0x8000, 0x2018, 0x9294, 0x00ff,
-	0x8007, 0x9205, 0x202a, 0x7060, 0x2310, 0x8214, 0x92a0, 0x1c0e,
-	0x2414, 0x938c, 0x0001, 0x0118, 0x9294, 0xff00, 0x0018, 0x9294,
-	0x00ff, 0x8007, 0x9215, 0x2222, 0x20a9, 0x0040, 0x2009, 0x024e,
-	0x270e, 0x8738, 0x8108, 0x9186, 0x0260, 0x1128, 0x6810, 0x8000,
-	0x6812, 0x2009, 0x0240, 0x1f04, 0x5d40, 0x60c3, 0x0084, 0x080c,
-	0x5eae, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x01e0, 0x2011,
-	0x5e84, 0x080c, 0x84ca, 0x9086, 0x0084, 0x1198, 0x080c, 0x5ff5,
-	0x2079, 0x0260, 0x7a30, 0x9296, 0x1107, 0x1158, 0x7834, 0x9005,
-	0x1140, 0x7097, 0x0001, 0x080c, 0x5f4b, 0x709b, 0x001a, 0x0029,
-	0x0010, 0x7093, 0x0000, 0x00fe, 0x0005, 0x9085, 0x0001, 0x080c,
-	0x6020, 0x709b, 0x001b, 0x080c, 0xab07, 0x080c, 0x5ff5, 0x2011,
-	0x0260, 0x2009, 0x0240, 0x7490, 0x9480, 0x0018, 0x9080, 0x0007,
-	0x9084, 0x03f8, 0x8004, 0x20a8, 0x220e, 0x8210, 0x8108, 0x9186,
-	0x0260, 0x1150, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x6814,
-	0x8000, 0x6816, 0x2011, 0x0260, 0x1f04, 0x5d8c, 0x60c3, 0x0084,
-	0x080c, 0x5eae, 0x0005, 0x0005, 0x0086, 0x0096, 0x2029, 0x1848,
-	0x252c, 0x20a9, 0x0008, 0x2041, 0x1c0e, 0x20e9, 0x0001, 0x28a0,
-	0x080c, 0x5ff5, 0x20e1, 0x0000, 0x2099, 0x026e, 0x4003, 0x20a9,
-	0x0008, 0x2011, 0x0007, 0xd5d4, 0x0108, 0x9016, 0x2800, 0x9200,
-	0x200c, 0x91a6, 0xffff, 0x1148, 0xd5d4, 0x0110, 0x8210, 0x0008,
-	0x8211, 0x1f04, 0x5dbe, 0x0804, 0x5e2d, 0x82ff, 0x1160, 0xd5d4,
-	0x0120, 0x91a6, 0x3fff, 0x0d90, 0x0020, 0x91a6, 0x3fff, 0x0904,
-	0x5e2d, 0x918d, 0xc000, 0x20a9, 0x0010, 0x2019, 0x0001, 0xd5d4,
-	0x0110, 0x2019, 0x0010, 0x2120, 0xd5d4, 0x0110, 0x8423, 0x0008,
-	0x8424, 0x1240, 0xd5d4, 0x0110, 0x8319, 0x0008, 0x8318, 0x1f04,
-	0x5de4, 0x04d8, 0x23a8, 0x2021, 0x0001, 0x8426, 0x8425, 0x1f04,
-	0x5df6, 0x2328, 0x8529, 0x92be, 0x0007, 0x0158, 0x0006, 0x2039,
-	0x0007, 0x2200, 0x973a, 0x000e, 0x27a8, 0x95a8, 0x0010, 0x1f04,
-	0x5e05, 0x755e, 0x95c8, 0x331e, 0x292d, 0x95ac, 0x00ff, 0x7582,
-	0x6532, 0x6536, 0x0016, 0x2508, 0x080c, 0x2887, 0x001e, 0x60e7,
-	0x0000, 0x65ea, 0x2018, 0x2304, 0x9405, 0x201a, 0x7087, 0x0001,
-	0x20e9, 0x0000, 0x20a1, 0x024e, 0x20e1, 0x0001, 0x2898, 0x20a9,
-	0x0008, 0x4003, 0x9085, 0x0001, 0x0008, 0x9006, 0x009e, 0x008e,
-	0x0005, 0x0156, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x22a8, 0x20e1,
-	0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x2011, 0x024e, 0x22a0,
-	0x4003, 0x014e, 0x013e, 0x01de, 0x01ce, 0x015e, 0x2118, 0x9026,
-	0x2001, 0x0007, 0x939a, 0x0010, 0x0218, 0x8420, 0x8001, 0x0cd0,
-	0x2118, 0x84ff, 0x0120, 0x939a, 0x0010, 0x8421, 0x1de0, 0x2021,
-	0x0001, 0x83ff, 0x0118, 0x8423, 0x8319, 0x1de8, 0x9238, 0x2029,
-	0x026e, 0x9528, 0x2504, 0x942c, 0x11b8, 0x9405, 0x203a, 0x715e,
-	0x91a0, 0x331e, 0x242d, 0x95ac, 0x00ff, 0x7582, 0x6532, 0x6536,
-	0x0016, 0x2508, 0x080c, 0x2887, 0x001e, 0x60e7, 0x0000, 0x65ea,
-	0x7087, 0x0001, 0x9084, 0x0000, 0x0005, 0x00e6, 0x2071, 0x1800,
-	0x708b, 0x0000, 0x00ee, 0x0005, 0x00e6, 0x00f6, 0x2079, 0x0100,
-	0x2071, 0x0140, 0x080c, 0x5f3a, 0x080c, 0xa259, 0x7004, 0x9084,
-	0x4000, 0x0110, 0x080c, 0x2cff, 0x0126, 0x2091, 0x8000, 0x2071,
-	0x1826, 0x2073, 0x0000, 0x7840, 0x0026, 0x0016, 0x2009, 0x00f7,
-	0x080c, 0x5f97, 0x001e, 0x9094, 0x0010, 0x9285, 0x0080, 0x7842,
-	0x7a42, 0x002e, 0x012e, 0x00fe, 0x00ee, 0x0005, 0x0126, 0x2091,
-	0x8000, 0x080c, 0x2ba5, 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5,
-	0x2012, 0x2011, 0x19f1, 0x2013, 0x0000, 0x7093, 0x0000, 0x012e,
-	0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0xa250, 0x6144, 0xd184,
-	0x0120, 0x7198, 0x918d, 0x2000, 0x0018, 0x718c, 0x918d, 0x1000,
-	0x2011, 0x1999, 0x2112, 0x2009, 0x07d0, 0x2011, 0x5e84, 0x080c,
-	0x8562, 0x0005, 0x0016, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000,
-	0x080c, 0xadb8, 0x2009, 0x00f7, 0x080c, 0x5f97, 0x2061, 0x19fa,
-	0x900e, 0x611a, 0x611e, 0x6172, 0x6176, 0x2061, 0x1800, 0x6003,
-	0x0001, 0x2061, 0x0100, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009,
-	0x1999, 0x200b, 0x0000, 0x2009, 0x002d, 0x2011, 0x5f06, 0x080c,
-	0x84be, 0x012e, 0x00ce, 0x002e, 0x001e, 0x0005, 0x00e6, 0x0006,
-	0x0126, 0x2091, 0x8000, 0x0471, 0x2071, 0x0100, 0x080c, 0xa259,
-	0x2071, 0x0140, 0x7004, 0x9084, 0x4000, 0x0110, 0x080c, 0x2cff,
-	0x080c, 0x73b8, 0x0188, 0x080c, 0x73d3, 0x1170, 0x080c, 0x76a2,
-	0x0016, 0x080c, 0x2956, 0x2001, 0x196d, 0x2102, 0x001e, 0x080c,
-	0x769d, 0x080c, 0x72e2, 0x0050, 0x2009, 0x0001, 0x080c, 0x2c3e,
-	0x2001, 0x0001, 0x080c, 0x27ea, 0x080c, 0x5eda, 0x012e, 0x000e,
-	0x00ee, 0x0005, 0x2001, 0x180e, 0x2004, 0xd0bc, 0x0158, 0x0026,
-	0x0036, 0x2011, 0x8017, 0x2001, 0x1999, 0x201c, 0x080c, 0x4b05,
-	0x003e, 0x002e, 0x0005, 0x20a9, 0x0012, 0x20e9, 0x0001, 0x20a1,
-	0x1c80, 0x080c, 0x5ff5, 0x20e9, 0x0000, 0x2099, 0x026e, 0x0099,
-	0x20a9, 0x0020, 0x080c, 0x5fef, 0x2099, 0x0260, 0x20a1, 0x1c92,
-	0x0051, 0x20a9, 0x000e, 0x080c, 0x5ff2, 0x2099, 0x0260, 0x20a1,
-	0x1cb2, 0x0009, 0x0005, 0x0016, 0x0026, 0x3410, 0x3308, 0x2104,
-	0x8007, 0x2012, 0x8108, 0x8210, 0x1f04, 0x5f6f, 0x002e, 0x001e,
-	0x0005, 0x080c, 0xab07, 0x20e1, 0x0001, 0x2099, 0x1c00, 0x20e9,
-	0x0000, 0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, 0x080c,
-	0xab07, 0x080c, 0x5ff5, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9,
-	0x0000, 0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, 0x00c6,
-	0x0006, 0x2061, 0x0100, 0x810f, 0x2001, 0x1834, 0x2004, 0x9005,
-	0x1138, 0x2001, 0x1818, 0x2004, 0x9084, 0x00ff, 0x9105, 0x0010,
-	0x9185, 0x00f7, 0x604a, 0x000e, 0x00ce, 0x0005, 0x0016, 0x0046,
-	0x080c, 0x6966, 0x0158, 0x9006, 0x2020, 0x2009, 0x002a, 0x080c,
-	0xe58d, 0x2001, 0x180c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a,
-	0x900e, 0x080c, 0x3187, 0x080c, 0xd216, 0x0140, 0x0036, 0x2019,
-	0xffff, 0x2021, 0x0007, 0x080c, 0x4cbc, 0x003e, 0x004e, 0x001e,
-	0x0005, 0x080c, 0x5eda, 0x709b, 0x0000, 0x7093, 0x0000, 0x0005,
-	0x0006, 0x2001, 0x180c, 0x2004, 0xd09c, 0x0100, 0x000e, 0x0005,
-	0x0006, 0x0016, 0x0126, 0x2091, 0x8000, 0x2001, 0x0101, 0x200c,
-	0x918d, 0x0006, 0x2102, 0x012e, 0x001e, 0x000e, 0x0005, 0x2009,
-	0x0001, 0x0020, 0x2009, 0x0002, 0x0008, 0x900e, 0x6814, 0x9084,
-	0xffc0, 0x910d, 0x6916, 0x0005, 0x00f6, 0x0156, 0x0146, 0x01d6,
-	0x9006, 0x20a9, 0x0080, 0x20e9, 0x0001, 0x20a1, 0x1c00, 0x4004,
-	0x2079, 0x1c00, 0x7803, 0x2200, 0x7807, 0x00ef, 0x780f, 0x00ef,
-	0x7813, 0x0138, 0x7823, 0xffff, 0x7827, 0xffff, 0x01de, 0x014e,
-	0x015e, 0x00fe, 0x0005, 0x2001, 0x1800, 0x2003, 0x0001, 0x0005,
-	0x2001, 0x19a6, 0x0118, 0x2003, 0x0001, 0x0010, 0x2003, 0x0000,
-	0x0005, 0x0156, 0x20a9, 0x0800, 0x2009, 0x1000, 0x9006, 0x200a,
-	0x8108, 0x1f04, 0x602f, 0x015e, 0x0005, 0x00d6, 0x0036, 0x0156,
-	0x0136, 0x0146, 0x2069, 0x1847, 0x9006, 0xb802, 0xb8ce, 0xb807,
-	0x0707, 0xb80a, 0xb80e, 0xb812, 0x9198, 0x331e, 0x231d, 0x939c,
-	0x00ff, 0xbb16, 0x0016, 0x0026, 0xb8c2, 0x080c, 0xadb1, 0x1120,
-	0x9192, 0x007e, 0x1208, 0xbbc2, 0x20a9, 0x0004, 0xb8c4, 0x20e8,
-	0xb9c8, 0x9198, 0x0006, 0x9006, 0x23a0, 0x4004, 0x20a9, 0x0004,
-	0x9198, 0x000a, 0x23a0, 0x4004, 0x002e, 0x001e, 0xb83e, 0xb842,
-	0xb84e, 0xb852, 0xb856, 0xb85a, 0xb85e, 0xb862, 0xb866, 0xb86a,
-	0xb86f, 0x0100, 0xb872, 0xb876, 0xb87a, 0xb88a, 0xb88e, 0xb893,
-	0x0008, 0xb896, 0xb89a, 0xb89e, 0xb8be, 0xb9a2, 0x0096, 0xb8a4,
-	0x904d, 0x0110, 0x080c, 0x1031, 0xb8a7, 0x0000, 0x009e, 0x9006,
-	0xb84a, 0x6810, 0xb83a, 0x680c, 0xb846, 0xb8bb, 0x0520, 0xb8ac,
-	0x9005, 0x0198, 0x00c6, 0x2060, 0x9c82, 0x1cd0, 0x0a0c, 0x0dd5,
-	0x2001, 0x181a, 0x2004, 0x9c02, 0x1a0c, 0x0dd5, 0x080c, 0x8958,
-	0x00ce, 0x090c, 0x8cfc, 0xb8af, 0x0000, 0x6814, 0x9084, 0x00ff,
-	0xb842, 0x014e, 0x013e, 0x015e, 0x003e, 0x00de, 0x0005, 0x0126,
-	0x2091, 0x8000, 0xa974, 0xae78, 0x9684, 0x3fff, 0x9082, 0x4000,
-	0x1a04, 0x611d, 0x9182, 0x0800, 0x1a04, 0x6121, 0x2001, 0x180c,
-	0x2004, 0x9084, 0x0003, 0x1904, 0x6127, 0x9188, 0x1000, 0x2104,
-	0x905d, 0x0518, 0xb804, 0x9084, 0x00ff, 0x908e, 0x0006, 0x1508,
-	0xb8a4, 0x900d, 0x1904, 0x6139, 0xb850, 0x900d, 0x1148, 0xa802,
-	0x2900, 0xb852, 0xb84e, 0x080c, 0x90e4, 0x9006, 0x012e, 0x0005,
-	0x00a6, 0x2150, 0x2900, 0xb002, 0xa803, 0x0000, 0x00ae, 0xb852,
-	0x0c90, 0x2001, 0x0005, 0x900e, 0x04b8, 0x2001, 0x0028, 0x900e,
-	0x0498, 0x9082, 0x0006, 0x1290, 0x080c, 0xadb1, 0x1160, 0xb8a0,
-	0x9084, 0xff80, 0x1140, 0xb900, 0xd1fc, 0x0990, 0x2001, 0x0029,
-	0x2009, 0x1000, 0x0408, 0x2001, 0x0028, 0x00a8, 0x2009, 0x180c,
-	0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0068, 0xd184, 0x0118,
-	0x2001, 0x0004, 0x0040, 0x2001, 0x0029, 0xb900, 0xd1fc, 0x0118,
-	0x2009, 0x1000, 0x0048, 0x900e, 0x0038, 0x2001, 0x0029, 0x900e,
-	0x0018, 0x2001, 0x0029, 0x900e, 0x9005, 0x012e, 0x0005, 0x2001,
-	0x180c, 0x2004, 0xd084, 0x19d0, 0x9188, 0x1000, 0x2104, 0x905d,
-	0x09a8, 0x080c, 0x696a, 0x1990, 0xb800, 0xd0bc, 0x0978, 0x0804,
-	0x60d0, 0x080c, 0x679c, 0x0904, 0x60e9, 0x0804, 0x60d4, 0x00b6,
-	0x00e6, 0x0126, 0x2091, 0x8000, 0xa874, 0x908e, 0x00ff, 0x1120,
-	0x2001, 0x196b, 0x205c, 0x0060, 0xa974, 0x9182, 0x0800, 0x1690,
-	0x9188, 0x1000, 0x2104, 0x905d, 0x01d0, 0x080c, 0x690a, 0x11d0,
-	0x080c, 0xadf1, 0x0570, 0x2b00, 0x6012, 0x2900, 0x6016, 0x6023,
-	0x0009, 0x600b, 0x0000, 0xa874, 0x908e, 0x00ff, 0x1110, 0x600b,
-	0x8000, 0x2009, 0x0043, 0x080c, 0xaec2, 0x9006, 0x00b0, 0x2001,
-	0x0028, 0x0090, 0x2009, 0x180c, 0x210c, 0xd18c, 0x0118, 0x2001,
-	0x0004, 0x0038, 0xd184, 0x0118, 0x2001, 0x0004, 0x0010, 0x2001,
-	0x0029, 0x0010, 0x2001, 0x0029, 0x9005, 0x012e, 0x00ee, 0x00be,
-	0x0005, 0x2001, 0x002c, 0x0cc0, 0x00b6, 0x00e6, 0x0126, 0x2091,
-	0x8000, 0xa974, 0x9182, 0x0800, 0x1a04, 0x6207, 0x9188, 0x1000,
-	0x2104, 0x905d, 0x0904, 0x61df, 0xb8a0, 0x9086, 0x007f, 0x0178,
-	0x080c, 0x6972, 0x0160, 0xa994, 0x81ff, 0x0130, 0x908e, 0x0004,
-	0x0130, 0x908e, 0x0005, 0x0118, 0x080c, 0x696a, 0x1598, 0xa87c,
-	0xd0fc, 0x01e0, 0xa894, 0x9005, 0x01c8, 0x2060, 0x0026, 0x2010,
-	0x080c, 0xcb09, 0x002e, 0x1120, 0x2001, 0x0008, 0x0804, 0x6209,
-	0x6020, 0x9086, 0x000a, 0x0120, 0x2001, 0x0008, 0x0804, 0x6209,
-	0x601a, 0x6003, 0x0008, 0x2900, 0x6016, 0x0058, 0x080c, 0xadf1,
-	0x05e8, 0x2b00, 0x6012, 0x2900, 0x6016, 0x600b, 0xffff, 0x6023,
-	0x000a, 0x2009, 0x0003, 0x080c, 0xaec2, 0x9006, 0x0458, 0x2001,
-	0x0028, 0x0438, 0x9082, 0x0006, 0x1290, 0x080c, 0xadb1, 0x1160,
-	0xb8a0, 0x9084, 0xff80, 0x1140, 0xb900, 0xd1fc, 0x0900, 0x2001,
-	0x0029, 0x2009, 0x1000, 0x00a8, 0x2001, 0x0028, 0x0090, 0x2009,
-	0x180c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0050, 0xd184,
-	0x0118, 0x2001, 0x0004, 0x0028, 0x2001, 0x0029, 0x0010, 0x2001,
-	0x0029, 0x9005, 0x012e, 0x00ee, 0x00be, 0x0005, 0x2001, 0x002c,
-	0x0cc0, 0x00f6, 0x00b6, 0x0126, 0x2091, 0x8000, 0xa8e0, 0x9005,
-	0x1550, 0xa8dc, 0x9082, 0x0101, 0x1630, 0xa8c8, 0x9005, 0x1518,
-	0xa8c4, 0x9082, 0x0101, 0x12f8, 0xa974, 0x2079, 0x1800, 0x9182,
-	0x0800, 0x12e8, 0x7830, 0x9084, 0x0003, 0x1130, 0xaa98, 0xab94,
-	0xa878, 0x9084, 0x0007, 0x00ea, 0x7930, 0xd18c, 0x0118, 0x2001,
-	0x0004, 0x0038, 0xd184, 0x0118, 0x2001, 0x0004, 0x0010, 0x2001,
-	0x0029, 0x900e, 0x0038, 0x2001, 0x002c, 0x900e, 0x0018, 0x2001,
-	0x0029, 0x900e, 0x9006, 0x0008, 0x9005, 0x012e, 0x00be, 0x00fe,
-	0x0005, 0x629e, 0x6259, 0x6270, 0x629e, 0x629e, 0x629e, 0x629e,
-	0x629e, 0x2100, 0x9082, 0x007e, 0x1278, 0x080c, 0x659f, 0x0148,
-	0x9046, 0xb810, 0x9306, 0x1904, 0x62a6, 0xb814, 0x9206, 0x15f0,
-	0x0028, 0xbb12, 0xba16, 0x0010, 0x080c, 0x49b8, 0x0150, 0x04b0,
-	0x080c, 0x6600, 0x1598, 0xb810, 0x9306, 0x1580, 0xb814, 0x9206,
-	0x1568, 0x080c, 0xadf1, 0x0530, 0x2b00, 0x6012, 0x080c, 0xcf90,
-	0x2900, 0x6016, 0x600b, 0xffff, 0x6023, 0x000a, 0xa878, 0x9086,
-	0x0001, 0x1170, 0x080c, 0x31bc, 0x9006, 0x080c, 0x653c, 0x2001,
-	0x0002, 0x080c, 0x6550, 0x2001, 0x0200, 0xb86e, 0xb893, 0x0002,
-	0x2009, 0x0003, 0x080c, 0xaec2, 0x9006, 0x0068, 0x2001, 0x0001,
-	0x900e, 0x0038, 0x2001, 0x002c, 0x900e, 0x0018, 0x2001, 0x0028,
-	0x900e, 0x9005, 0x0000, 0x012e, 0x00be, 0x00fe, 0x0005, 0x00b6,
-	0x00f6, 0x00e6, 0x0126, 0x2091, 0x8000, 0xa894, 0x90c6, 0x0015,
-	0x0904, 0x648d, 0x90c6, 0x0056, 0x0904, 0x6491, 0x90c6, 0x0066,
-	0x0904, 0x6495, 0x90c6, 0x0067, 0x0904, 0x6499, 0x90c6, 0x0068,
-	0x0904, 0x649d, 0x90c6, 0x0071, 0x0904, 0x64a1, 0x90c6, 0x0074,
-	0x0904, 0x64a5, 0x90c6, 0x007c, 0x0904, 0x64a9, 0x90c6, 0x007e,
-	0x0904, 0x64ad, 0x90c6, 0x0037, 0x0904, 0x64b1, 0x9016, 0x2079,
-	0x1800, 0xa974, 0x9186, 0x00ff, 0x0904, 0x6488, 0x9182, 0x0800,
-	0x1a04, 0x6488, 0x080c, 0x6600, 0x1198, 0xb804, 0x9084, 0x00ff,
-	0x9082, 0x0006, 0x1268, 0xa894, 0x90c6, 0x006f, 0x0148, 0x080c,
-	0xadb1, 0x1904, 0x6471, 0xb8a0, 0x9084, 0xff80, 0x1904, 0x6471,
-	0xa894, 0x90c6, 0x006f, 0x0158, 0x90c6, 0x005e, 0x0904, 0x63d1,
-	0x90c6, 0x0064, 0x0904, 0x63fa, 0x2008, 0x0804, 0x6393, 0xa998,
-	0xa8b0, 0x2040, 0x080c, 0xadb1, 0x1120, 0x9182, 0x007f, 0x0a04,
-	0x6393, 0x9186, 0x00ff, 0x0904, 0x6393, 0x9182, 0x0800, 0x1a04,
-	0x6393, 0xaaa0, 0xab9c, 0x787c, 0x9306, 0x1188, 0x7880, 0x0096,
-	0x924e, 0x1128, 0x2208, 0x2310, 0x009e, 0x0804, 0x6393, 0x99cc,
-	0xff00, 0x009e, 0x1120, 0x2208, 0x2310, 0x0804, 0x6393, 0x080c,
-	0x49b8, 0x0904, 0x639d, 0x900e, 0x9016, 0x90c6, 0x4000, 0x15e0,
-	0x0006, 0x080c, 0x6820, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108,
-	0xc18d, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0031,
-	0x20a0, 0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x0006, 0x2098, 0x080c,
-	0x0f7c, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0035,
-	0x20a0, 0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x000a, 0x2098, 0x080c,
-	0x0f7c, 0xa8c4, 0xabc8, 0x9305, 0xabcc, 0x9305, 0xabd0, 0x9305,
-	0xabd4, 0x9305, 0xabd8, 0x9305, 0xabdc, 0x9305, 0xabe0, 0x9305,
-	0x9005, 0x0510, 0x000e, 0x00c8, 0x90c6, 0x4007, 0x1110, 0x2408,
-	0x00a0, 0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0070, 0x90c6,
-	0x4009, 0x1108, 0x0050, 0x90c6, 0x4006, 0x0138, 0x2001, 0x4005,
-	0x2009, 0x000a, 0x0010, 0x2001, 0x4006, 0xa896, 0xa99a, 0xaa9e,
-	0x2001, 0x0030, 0x900e, 0x0478, 0x000e, 0x080c, 0xadf1, 0x1130,
-	0x2001, 0x4005, 0x2009, 0x0003, 0x9016, 0x0c78, 0x2b00, 0x6012,
-	0x080c, 0xcf90, 0x2900, 0x6016, 0x6023, 0x0001, 0xa868, 0xd88c,
-	0x0108, 0xc0f5, 0xa86a, 0x0126, 0x2091, 0x8000, 0x080c, 0x31bc,
-	0x012e, 0x9006, 0x080c, 0x653c, 0x2001, 0x0002, 0x080c, 0x6550,
-	0x2009, 0x0002, 0x080c, 0xaec2, 0xa8b0, 0xd094, 0x0118, 0xb8cc,
-	0xc08d, 0xb8ce, 0x9006, 0x9005, 0x012e, 0x00ee, 0x00fe, 0x00be,
-	0x0005, 0x080c, 0x56e4, 0x0118, 0x2009, 0x0007, 0x00f8, 0xa998,
-	0xaeb0, 0x080c, 0x6600, 0x1904, 0x638e, 0x9186, 0x007f, 0x0130,
-	0x080c, 0x696a, 0x0118, 0x2009, 0x0009, 0x0080, 0x0096, 0x080c,
-	0x0fff, 0x1120, 0x009e, 0x2009, 0x0002, 0x0040, 0x2900, 0x009e,
-	0xa806, 0x080c, 0xcd01, 0x19b0, 0x2009, 0x0003, 0x2001, 0x4005,
-	0x0804, 0x6395, 0xa998, 0xaeb0, 0x080c, 0x6600, 0x1904, 0x638e,
-	0x0096, 0x080c, 0x0fff, 0x1128, 0x009e, 0x2009, 0x0002, 0x0804,
-	0x644e, 0x2900, 0x009e, 0xa806, 0x0096, 0x2048, 0x20a9, 0x002b,
-	0xb8c4, 0x20e0, 0xb8c8, 0x2098, 0xa860, 0x20e8, 0xa85c, 0x9080,
-	0x0002, 0x20a0, 0x4003, 0x20a9, 0x0008, 0x9080, 0x0006, 0x20a0,
-	0xbbc8, 0x9398, 0x0006, 0x2398, 0x080c, 0x0f7c, 0x009e, 0xa87b,
-	0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0xd684, 0x1168, 0x080c,
-	0x56d0, 0xd0b4, 0x1118, 0xa89b, 0x000b, 0x00e0, 0xb800, 0xd08c,
-	0x0118, 0xa89b, 0x000c, 0x00b0, 0x080c, 0x696a, 0x0118, 0xa89b,
-	0x0009, 0x0080, 0x080c, 0x56e4, 0x0118, 0xa89b, 0x0007, 0x0050,
-	0x080c, 0xcce4, 0x1904, 0x63ca, 0x2009, 0x0003, 0x2001, 0x4005,
-	0x0804, 0x6395, 0xa87b, 0x0030, 0xa897, 0x4005, 0xa804, 0x8006,
-	0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002,
-	0x2009, 0x002b, 0xaaa0, 0xab9c, 0xaca8, 0xada4, 0x2031, 0x0000,
-	0x2041, 0x1243, 0x080c, 0xb360, 0x1904, 0x63ca, 0x2009, 0x0002,
-	0x08e8, 0x2001, 0x0028, 0x900e, 0x0804, 0x63cb, 0x2009, 0x180c,
-	0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0038, 0xd184, 0x0118,
-	0x2001, 0x0004, 0x0010, 0x2001, 0x0029, 0x900e, 0x0804, 0x63cb,
-	0x2001, 0x0029, 0x900e, 0x0804, 0x63cb, 0x080c, 0x3742, 0x0804,
-	0x63cc, 0x080c, 0x540d, 0x0804, 0x63cc, 0x080c, 0x4548, 0x0804,
-	0x63cc, 0x080c, 0x45c1, 0x0804, 0x63cc, 0x080c, 0x461d, 0x0804,
-	0x63cc, 0x080c, 0x4a7b, 0x0804, 0x63cc, 0x080c, 0x4d32, 0x0804,
-	0x63cc, 0x080c, 0x5078, 0x0804, 0x63cc, 0x080c, 0x5271, 0x0804,
-	0x63cc, 0x080c, 0x3958, 0x0804, 0x63cc, 0x00b6, 0xa974, 0xae78,
-	0x9684, 0x3fff, 0x9082, 0x4000, 0x1618, 0x9182, 0x0800, 0x1268,
-	0x9188, 0x1000, 0x2104, 0x905d, 0x0140, 0x080c, 0x696a, 0x1148,
-	0x00e9, 0x080c, 0x672b, 0x9006, 0x00b0, 0x2001, 0x0028, 0x900e,
-	0x0090, 0x9082, 0x0006, 0x1240, 0xb900, 0xd1fc, 0x0d88, 0x2001,
-	0x0029, 0x2009, 0x1000, 0x0038, 0x2001, 0x0029, 0x900e, 0x0018,
-	0x2001, 0x0029, 0x900e, 0x9005, 0x00be, 0x0005, 0x0126, 0x2091,
-	0x8000, 0xb850, 0x900d, 0x0150, 0x2900, 0x0096, 0x2148, 0xa802,
-	0x009e, 0xa803, 0x0000, 0xb852, 0x012e, 0x0005, 0x2900, 0xb852,
-	0xb84e, 0xa803, 0x0000, 0x0cc0, 0x0126, 0x2091, 0x8000, 0xb84c,
-	0x9005, 0x0170, 0x00e6, 0x2071, 0x19e7, 0x7004, 0x9086, 0x0002,
-	0x0168, 0x00ee, 0xb84c, 0xa802, 0x2900, 0xb84e, 0x012e, 0x0005,
-	0x2900, 0xb852, 0xb84e, 0xa803, 0x0000, 0x0cc0, 0x701c, 0x9b06,
-	0x1d80, 0xb84c, 0x00a6, 0x2050, 0xb000, 0xa802, 0x2900, 0xb002,
-	0x00ae, 0x00ee, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0xb84c,
-	0x904d, 0x0130, 0xa800, 0x9005, 0x1108, 0xb852, 0xb84e, 0x9905,
-	0x012e, 0x0005, 0xb84c, 0x904d, 0x0130, 0xa800, 0x9005, 0x1108,
-	0xb852, 0xb84e, 0x9905, 0x0005, 0x00b6, 0x0126, 0x00c6, 0x0026,
-	0x2091, 0x8000, 0x6210, 0x2258, 0xba00, 0x9005, 0x0110, 0xc285,
-	0x0008, 0xc284, 0xba02, 0x002e, 0x00ce, 0x012e, 0x00be, 0x0005,
-	0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, 0x6210, 0x2258, 0xba04,
-	0x0006, 0x9086, 0x0006, 0x1170, 0xb89c, 0xd0ac, 0x0158, 0x080c,
-	0x6966, 0x0140, 0x9284, 0xff00, 0x8007, 0x9086, 0x0007, 0x1110,
-	0x2011, 0x0600, 0x000e, 0x9294, 0xff00, 0x9215, 0xba06, 0x0006,
-	0x9086, 0x0006, 0x1120, 0xba90, 0x82ff, 0x090c, 0x0dd5, 0x000e,
-	0x00ce, 0x012e, 0x00be, 0x0005, 0x00b6, 0x0126, 0x00c6, 0x2091,
-	0x8000, 0x6210, 0x2258, 0xba04, 0x0006, 0x9086, 0x0006, 0x1168,
-	0xb89c, 0xd0a4, 0x0150, 0x080c, 0x6962, 0x1138, 0x9284, 0x00ff,
-	0x9086, 0x0007, 0x1110, 0x2011, 0x0006, 0x000e, 0x9294, 0x00ff,
-	0x8007, 0x9215, 0xba06, 0x00ce, 0x012e, 0x00be, 0x0005, 0x9182,
-	0x0800, 0x0218, 0x9085, 0x0001, 0x0005, 0x00d6, 0x0026, 0x9190,
-	0x1000, 0x2204, 0x905d, 0x1188, 0x0096, 0x080c, 0x0fff, 0x2958,
-	0x009e, 0x0168, 0x2b00, 0x2012, 0xb85c, 0xb8ca, 0xb860, 0xb8c6,
-	0x9006, 0xb8a6, 0xb8ae, 0x080c, 0x6035, 0x9006, 0x0010, 0x9085,
-	0x0001, 0x002e, 0x00de, 0x0005, 0x00b6, 0x0096, 0x0126, 0x2091,
-	0x8000, 0x0026, 0x9182, 0x0800, 0x0218, 0x9085, 0x0001, 0x0458,
-	0x00d6, 0x9190, 0x1000, 0x2204, 0x905d, 0x0518, 0x2013, 0x0000,
-	0xb8a4, 0x904d, 0x0110, 0x080c, 0x1031, 0x00d6, 0x00c6, 0xb8bc,
-	0x2060, 0x8cff, 0x0168, 0x600c, 0x0006, 0x6014, 0x2048, 0x080c,
-	0xcb1b, 0x0110, 0x080c, 0x0fb1, 0x080c, 0xae47, 0x00ce, 0x0c88,
-	0x00ce, 0x00de, 0x2b48, 0xb8c8, 0xb85e, 0xb8c4, 0xb862, 0x080c,
-	0x1041, 0x00de, 0x9006, 0x002e, 0x012e, 0x009e, 0x00be, 0x0005,
-	0x0016, 0x9182, 0x0800, 0x0218, 0x9085, 0x0001, 0x0030, 0x9188,
-	0x1000, 0x2104, 0x905d, 0x0dc0, 0x9006, 0x001e, 0x0005, 0x00d6,
-	0x0156, 0x0136, 0x0146, 0x9006, 0xb80a, 0xb80e, 0xb800, 0xc08c,
-	0xb802, 0x080c, 0x73b0, 0x1510, 0xb8a0, 0x9086, 0x007e, 0x0120,
-	0x080c, 0xadb1, 0x11d8, 0x0078, 0x7040, 0xd0e4, 0x01b8, 0x00c6,
-	0x2061, 0x1982, 0x7048, 0x2062, 0x704c, 0x6006, 0x7050, 0x600a,
-	0x7054, 0x600e, 0x00ce, 0x703c, 0x2069, 0x0140, 0x9005, 0x1110,
-	0x2001, 0x0001, 0x6886, 0x2069, 0x1800, 0x68b6, 0x7040, 0xb85e,
-	0x7048, 0xb862, 0x704c, 0xb866, 0x20e1, 0x0000, 0x2099, 0x0276,
-	0xb8c4, 0x20e8, 0xb8c8, 0x9088, 0x000a, 0x21a0, 0x20a9, 0x0004,
-	0x4003, 0x2099, 0x027a, 0x9088, 0x0006, 0x21a0, 0x20a9, 0x0004,
-	0x4003, 0x2069, 0x0200, 0x6817, 0x0001, 0x7040, 0xb86a, 0x7144,
-	0xb96e, 0x7048, 0xb872, 0x7050, 0xb876, 0x2069, 0x0200, 0x6817,
-	0x0000, 0xb8a0, 0x9086, 0x007e, 0x1110, 0x7144, 0xb96e, 0x9182,
-	0x0211, 0x1218, 0x2009, 0x0008, 0x0400, 0x9182, 0x0259, 0x1218,
-	0x2009, 0x0007, 0x00d0, 0x9182, 0x02c1, 0x1218, 0x2009, 0x0006,
-	0x00a0, 0x9182, 0x0349, 0x1218, 0x2009, 0x0005, 0x0070, 0x9182,
-	0x0421, 0x1218, 0x2009, 0x0004, 0x0040, 0x9182, 0x0581, 0x1218,
-	0x2009, 0x0003, 0x0010, 0x2009, 0x0002, 0xb992, 0x014e, 0x013e,
-	0x015e, 0x00de, 0x0005, 0x0016, 0x0026, 0x00e6, 0x2071, 0x0260,
-	0x7034, 0xb896, 0x703c, 0xb89a, 0x7054, 0xb89e, 0x0036, 0xbbcc,
-	0xc384, 0xba00, 0x2009, 0x1867, 0x210c, 0xd0bc, 0x0120, 0xd1ec,
-	0x0110, 0xc2ad, 0x0008, 0xc2ac, 0xd0c4, 0x0148, 0xd1e4, 0x0138,
-	0xc2bd, 0xd0cc, 0x0128, 0xd38c, 0x1108, 0xc385, 0x0008, 0xc2bc,
-	0xba02, 0xbbce, 0x003e, 0x00ee, 0x002e, 0x001e, 0x0005, 0x0096,
-	0x0126, 0x2091, 0x8000, 0xb8a4, 0x904d, 0x0578, 0xa900, 0x81ff,
-	0x15c0, 0xaa04, 0x9282, 0x0010, 0x16c8, 0x0136, 0x0146, 0x01c6,
-	0x01d6, 0x8906, 0x8006, 0x8007, 0x908c, 0x003f, 0x21e0, 0x9084,
-	0xffc0, 0x9080, 0x0004, 0x2098, 0x2009, 0x0010, 0x20a9, 0x0001,
-	0x4002, 0x9086, 0xffff, 0x0120, 0x8109, 0x1dd0, 0x080c, 0x0dd5,
-	0x3c00, 0x20e8, 0x3300, 0x8001, 0x20a0, 0x4604, 0x8210, 0xaa06,
-	0x01de, 0x01ce, 0x014e, 0x013e, 0x0060, 0x080c, 0x0fff, 0x0170,
-	0x2900, 0xb8a6, 0xa803, 0x0000, 0x080c, 0x67bc, 0xa807, 0x0001,
-	0xae12, 0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8,
-	0x0126, 0x2091, 0x8000, 0x0096, 0xb8a4, 0x904d, 0x0188, 0xa800,
-	0x9005, 0x1150, 0x080c, 0x67cb, 0x1158, 0xa804, 0x908a, 0x0002,
-	0x0218, 0x8001, 0xa806, 0x0020, 0x080c, 0x1031, 0xb8a7, 0x0000,
-	0x009e, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x90e4,
-	0x012e, 0x0005, 0x901e, 0x0010, 0x2019, 0x0001, 0x900e, 0x0126,
-	0x2091, 0x8000, 0xb84c, 0x2048, 0xb800, 0xd0dc, 0x1170, 0x89ff,
-	0x0500, 0x83ff, 0x0120, 0xa878, 0x9606, 0x0158, 0x0030, 0xa86c,
-	0x9406, 0x1118, 0xa870, 0x9506, 0x0120, 0x2908, 0xa800, 0x2048,
-	0x0c70, 0x080c, 0xa678, 0xaa00, 0xb84c, 0x9906, 0x1110, 0xba4e,
-	0x0020, 0x00a6, 0x2150, 0xb202, 0x00ae, 0x82ff, 0x1110, 0xb952,
-	0x89ff, 0x012e, 0x0005, 0x9016, 0x0489, 0x1110, 0x2011, 0x0001,
-	0x0005, 0x080c, 0x6820, 0x0128, 0x080c, 0xcbd8, 0x0010, 0x9085,
-	0x0001, 0x0005, 0x080c, 0x6820, 0x0128, 0x080c, 0xcb7d, 0x0010,
-	0x9085, 0x0001, 0x0005, 0x080c, 0x6820, 0x0128, 0x080c, 0xcbd5,
-	0x0010, 0x9085, 0x0001, 0x0005, 0x080c, 0x6820, 0x0128, 0x080c,
-	0xcb9c, 0x0010, 0x9085, 0x0001, 0x0005, 0x080c, 0x6820, 0x0128,
-	0x080c, 0xcc19, 0x0010, 0x9085, 0x0001, 0x0005, 0xb8a4, 0x900d,
-	0x1118, 0x9085, 0x0001, 0x0005, 0x0136, 0x01c6, 0xa800, 0x9005,
-	0x11b8, 0x890e, 0x810e, 0x810f, 0x9184, 0x003f, 0x20e0, 0x9184,
-	0xffc0, 0x9080, 0x0004, 0x2098, 0x20a9, 0x0001, 0x2009, 0x0010,
-	0x4002, 0x9606, 0x0128, 0x8109, 0x1dd8, 0x9085, 0x0001, 0x0008,
-	0x9006, 0x01ce, 0x013e, 0x0005, 0x0146, 0x01d6, 0xa860, 0x20e8,
-	0xa85c, 0x9080, 0x0004, 0x20a0, 0x20a9, 0x0010, 0x2009, 0xffff,
-	0x4104, 0x01de, 0x014e, 0x0136, 0x01c6, 0xa800, 0x9005, 0x11b8,
+	0x7097, 0x0001, 0x080c, 0x5f4a, 0x709b, 0x001a, 0x0029, 0x0010,
+	0x7093, 0x0000, 0x00fe, 0x0005, 0x9085, 0x0001, 0x080c, 0x601f,
+	0x709b, 0x001b, 0x080c, 0xab21, 0x080c, 0x5ff4, 0x2011, 0x0260,
+	0x2009, 0x0240, 0x7490, 0x9480, 0x0018, 0x9080, 0x0007, 0x9084,
+	0x03f8, 0x8004, 0x20a8, 0x220e, 0x8210, 0x8108, 0x9186, 0x0260,
+	0x1150, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x6814, 0x8000,
+	0x6816, 0x2011, 0x0260, 0x1f04, 0x5d8b, 0x60c3, 0x0084, 0x080c,
+	0x5ead, 0x0005, 0x0005, 0x0086, 0x0096, 0x2029, 0x1848, 0x252c,
+	0x20a9, 0x0008, 0x2041, 0x1c0e, 0x20e9, 0x0001, 0x28a0, 0x080c,
+	0x5ff4, 0x20e1, 0x0000, 0x2099, 0x026e, 0x4003, 0x20a9, 0x0008,
+	0x2011, 0x0007, 0xd5d4, 0x0108, 0x9016, 0x2800, 0x9200, 0x200c,
+	0x91a6, 0xffff, 0x1148, 0xd5d4, 0x0110, 0x8210, 0x0008, 0x8211,
+	0x1f04, 0x5dbd, 0x0804, 0x5e2c, 0x82ff, 0x1160, 0xd5d4, 0x0120,
+	0x91a6, 0x3fff, 0x0d90, 0x0020, 0x91a6, 0x3fff, 0x0904, 0x5e2c,
+	0x918d, 0xc000, 0x20a9, 0x0010, 0x2019, 0x0001, 0xd5d4, 0x0110,
+	0x2019, 0x0010, 0x2120, 0xd5d4, 0x0110, 0x8423, 0x0008, 0x8424,
+	0x1240, 0xd5d4, 0x0110, 0x8319, 0x0008, 0x8318, 0x1f04, 0x5de3,
+	0x04d8, 0x23a8, 0x2021, 0x0001, 0x8426, 0x8425, 0x1f04, 0x5df5,
+	0x2328, 0x8529, 0x92be, 0x0007, 0x0158, 0x0006, 0x2039, 0x0007,
+	0x2200, 0x973a, 0x000e, 0x27a8, 0x95a8, 0x0010, 0x1f04, 0x5e04,
+	0x755e, 0x95c8, 0x3325, 0x292d, 0x95ac, 0x00ff, 0x7582, 0x6532,
+	0x6536, 0x0016, 0x2508, 0x080c, 0x2887, 0x001e, 0x60e7, 0x0000,
+	0x65ea, 0x2018, 0x2304, 0x9405, 0x201a, 0x7087, 0x0001, 0x20e9,
+	0x0000, 0x20a1, 0x024e, 0x20e1, 0x0001, 0x2898, 0x20a9, 0x0008,
+	0x4003, 0x9085, 0x0001, 0x0008, 0x9006, 0x009e, 0x008e, 0x0005,
+	0x0156, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x22a8, 0x20e1, 0x0000,
+	0x2099, 0x026e, 0x20e9, 0x0000, 0x2011, 0x024e, 0x22a0, 0x4003,
+	0x014e, 0x013e, 0x01de, 0x01ce, 0x015e, 0x2118, 0x9026, 0x2001,
+	0x0007, 0x939a, 0x0010, 0x0218, 0x8420, 0x8001, 0x0cd0, 0x2118,
+	0x84ff, 0x0120, 0x939a, 0x0010, 0x8421, 0x1de0, 0x2021, 0x0001,
+	0x83ff, 0x0118, 0x8423, 0x8319, 0x1de8, 0x9238, 0x2029, 0x026e,
+	0x9528, 0x2504, 0x942c, 0x11b8, 0x9405, 0x203a, 0x715e, 0x91a0,
+	0x3325, 0x242d, 0x95ac, 0x00ff, 0x7582, 0x6532, 0x6536, 0x0016,
+	0x2508, 0x080c, 0x2887, 0x001e, 0x60e7, 0x0000, 0x65ea, 0x7087,
+	0x0001, 0x9084, 0x0000, 0x0005, 0x00e6, 0x2071, 0x1800, 0x708b,
+	0x0000, 0x00ee, 0x0005, 0x00e6, 0x00f6, 0x2079, 0x0100, 0x2071,
+	0x0140, 0x080c, 0x5f39, 0x080c, 0xa273, 0x7004, 0x9084, 0x4000,
+	0x0110, 0x080c, 0x2cff, 0x0126, 0x2091, 0x8000, 0x2071, 0x1826,
+	0x2073, 0x0000, 0x7840, 0x0026, 0x0016, 0x2009, 0x00f7, 0x080c,
+	0x5f96, 0x001e, 0x9094, 0x0010, 0x9285, 0x0080, 0x7842, 0x7a42,
+	0x002e, 0x012e, 0x00fe, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000,
+	0x080c, 0x2ba5, 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012,
+	0x2011, 0x19f1, 0x2013, 0x0000, 0x7093, 0x0000, 0x012e, 0x60a3,
+	0x0056, 0x60a7, 0x9575, 0x080c, 0xa26a, 0x6144, 0xd184, 0x0120,
+	0x7198, 0x918d, 0x2000, 0x0018, 0x718c, 0x918d, 0x1000, 0x2011,
+	0x1999, 0x2112, 0x2009, 0x07d0, 0x2011, 0x5e83, 0x080c, 0x858b,
+	0x0005, 0x0016, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c,
+	0xadd2, 0x2009, 0x00f7, 0x080c, 0x5f96, 0x2061, 0x19fa, 0x900e,
+	0x611a, 0x611e, 0x6172, 0x6176, 0x2061, 0x1800, 0x6003, 0x0001,
+	0x2061, 0x0100, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x1999,
+	0x200b, 0x0000, 0x2009, 0x002d, 0x2011, 0x5f05, 0x080c, 0x84e7,
+	0x012e, 0x00ce, 0x002e, 0x001e, 0x0005, 0x00e6, 0x0006, 0x0126,
+	0x2091, 0x8000, 0x0471, 0x2071, 0x0100, 0x080c, 0xa273, 0x2071,
+	0x0140, 0x7004, 0x9084, 0x4000, 0x0110, 0x080c, 0x2cff, 0x080c,
+	0x73c4, 0x0188, 0x080c, 0x73df, 0x1170, 0x080c, 0x76ae, 0x0016,
+	0x080c, 0x2956, 0x2001, 0x196d, 0x2102, 0x001e, 0x080c, 0x76a9,
+	0x080c, 0x72ee, 0x0050, 0x2009, 0x0001, 0x080c, 0x2c3e, 0x2001,
+	0x0001, 0x080c, 0x27ea, 0x080c, 0x5ed9, 0x012e, 0x000e, 0x00ee,
+	0x0005, 0x2001, 0x180e, 0x2004, 0xd0bc, 0x0158, 0x0026, 0x0036,
+	0x2011, 0x8017, 0x2001, 0x1999, 0x201c, 0x080c, 0x4b04, 0x003e,
+	0x002e, 0x0005, 0x20a9, 0x0012, 0x20e9, 0x0001, 0x20a1, 0x1c80,
+	0x080c, 0x5ff4, 0x20e9, 0x0000, 0x2099, 0x026e, 0x0099, 0x20a9,
+	0x0020, 0x080c, 0x5fee, 0x2099, 0x0260, 0x20a1, 0x1c92, 0x0051,
+	0x20a9, 0x000e, 0x080c, 0x5ff1, 0x2099, 0x0260, 0x20a1, 0x1cb2,
+	0x0009, 0x0005, 0x0016, 0x0026, 0x3410, 0x3308, 0x2104, 0x8007,
+	0x2012, 0x8108, 0x8210, 0x1f04, 0x5f6e, 0x002e, 0x001e, 0x0005,
+	0x080c, 0xab21, 0x20e1, 0x0001, 0x2099, 0x1c00, 0x20e9, 0x0000,
+	0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, 0x080c, 0xab21,
+	0x080c, 0x5ff4, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000,
+	0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, 0x00c6, 0x0006,
+	0x2061, 0x0100, 0x810f, 0x2001, 0x1834, 0x2004, 0x9005, 0x1138,
+	0x2001, 0x1818, 0x2004, 0x9084, 0x00ff, 0x9105, 0x0010, 0x9185,
+	0x00f7, 0x604a, 0x000e, 0x00ce, 0x0005, 0x0016, 0x0046, 0x080c,
+	0x696e, 0x0158, 0x9006, 0x2020, 0x2009, 0x002a, 0x080c, 0xe5ae,
+	0x2001, 0x180c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a, 0x900e,
+	0x080c, 0x318a, 0x080c, 0xd230, 0x0140, 0x0036, 0x2019, 0xffff,
+	0x2021, 0x0007, 0x080c, 0x4cbb, 0x003e, 0x004e, 0x001e, 0x0005,
+	0x080c, 0x5ed9, 0x709b, 0x0000, 0x7093, 0x0000, 0x0005, 0x0006,
+	0x2001, 0x180c, 0x2004, 0xd09c, 0x0100, 0x000e, 0x0005, 0x0006,
+	0x0016, 0x0126, 0x2091, 0x8000, 0x2001, 0x0101, 0x200c, 0x918d,
+	0x0006, 0x2102, 0x012e, 0x001e, 0x000e, 0x0005, 0x2009, 0x0001,
+	0x0020, 0x2009, 0x0002, 0x0008, 0x900e, 0x6814, 0x9084, 0xffc0,
+	0x910d, 0x6916, 0x0005, 0x00f6, 0x0156, 0x0146, 0x01d6, 0x9006,
+	0x20a9, 0x0080, 0x20e9, 0x0001, 0x20a1, 0x1c00, 0x4004, 0x2079,
+	0x1c00, 0x7803, 0x2200, 0x7807, 0x00ef, 0x780f, 0x00ef, 0x7813,
+	0x0138, 0x7823, 0xffff, 0x7827, 0xffff, 0x01de, 0x014e, 0x015e,
+	0x00fe, 0x0005, 0x2001, 0x1800, 0x2003, 0x0001, 0x0005, 0x2001,
+	0x19a6, 0x0118, 0x2003, 0x0001, 0x0010, 0x2003, 0x0000, 0x0005,
+	0x0156, 0x20a9, 0x0800, 0x2009, 0x1000, 0x9006, 0x200a, 0x8108,
+	0x1f04, 0x602e, 0x015e, 0x0005, 0x00d6, 0x0036, 0x0156, 0x0136,
+	0x0146, 0x2069, 0x1847, 0x9006, 0xb802, 0xb8ce, 0xb807, 0x0707,
+	0xb80a, 0xb80e, 0xb812, 0x9198, 0x3325, 0x231d, 0x939c, 0x00ff,
+	0xbb16, 0x0016, 0x0026, 0xb8c2, 0x080c, 0xadcb, 0x1120, 0x9192,
+	0x007e, 0x1208, 0xbbc2, 0x20a9, 0x0004, 0xb8c4, 0x20e8, 0xb9c8,
+	0x9198, 0x0006, 0x9006, 0x23a0, 0x4004, 0x20a9, 0x0004, 0x9198,
+	0x000a, 0x23a0, 0x4004, 0x002e, 0x001e, 0xb83e, 0xb842, 0xb84e,
+	0xb852, 0xb856, 0xb85a, 0xb85e, 0xb862, 0xb866, 0xb86a, 0xb86f,
+	0x0100, 0xb872, 0xb876, 0xb87a, 0xb88a, 0xb88e, 0xb893, 0x0008,
+	0xb896, 0xb89a, 0xb89e, 0xb8be, 0xb9a2, 0x0096, 0xb8a4, 0x904d,
+	0x0110, 0x080c, 0x1031, 0xb8a7, 0x0000, 0x009e, 0x9006, 0xb84a,
+	0x6810, 0xb83a, 0x680c, 0xb846, 0xb8bb, 0x0520, 0xb8ac, 0x9005,
+	0x0198, 0x00c6, 0x2060, 0x9c82, 0x1cd0, 0x0a0c, 0x0dd5, 0x2001,
+	0x181a, 0x2004, 0x9c02, 0x1a0c, 0x0dd5, 0x080c, 0x8981, 0x00ce,
+	0x090c, 0x8d25, 0xb8af, 0x0000, 0x6814, 0x9084, 0x00ff, 0xb842,
+	0x014e, 0x013e, 0x015e, 0x003e, 0x00de, 0x0005, 0x0126, 0x2091,
+	0x8000, 0xa974, 0xae78, 0x9684, 0x3fff, 0x9082, 0x4000, 0x1a04,
+	0x611c, 0x9182, 0x0800, 0x1a04, 0x6120, 0x2001, 0x180c, 0x2004,
+	0x9084, 0x0003, 0x1904, 0x6126, 0x9188, 0x1000, 0x2104, 0x905d,
+	0x0518, 0xb804, 0x9084, 0x00ff, 0x908e, 0x0006, 0x1508, 0xb8a4,
+	0x900d, 0x1904, 0x6138, 0xb850, 0x900d, 0x1148, 0xa802, 0x2900,
+	0xb852, 0xb84e, 0x080c, 0x910d, 0x9006, 0x012e, 0x0005, 0x00a6,
+	0x2150, 0x2900, 0xb002, 0xa803, 0x0000, 0x00ae, 0xb852, 0x0c90,
+	0x2001, 0x0005, 0x900e, 0x04b8, 0x2001, 0x0028, 0x900e, 0x0498,
+	0x9082, 0x0006, 0x1290, 0x080c, 0xadcb, 0x1160, 0xb8a0, 0x9084,
+	0xff80, 0x1140, 0xb900, 0xd1fc, 0x0990, 0x2001, 0x0029, 0x2009,
+	0x1000, 0x0408, 0x2001, 0x0028, 0x00a8, 0x2009, 0x180c, 0x210c,
+	0xd18c, 0x0118, 0x2001, 0x0004, 0x0068, 0xd184, 0x0118, 0x2001,
+	0x0004, 0x0040, 0x2001, 0x0029, 0xb900, 0xd1fc, 0x0118, 0x2009,
+	0x1000, 0x0048, 0x900e, 0x0038, 0x2001, 0x0029, 0x900e, 0x0018,
+	0x2001, 0x0029, 0x900e, 0x9005, 0x012e, 0x0005, 0x2001, 0x180c,
+	0x2004, 0xd084, 0x19d0, 0x9188, 0x1000, 0x2104, 0x905d, 0x09a8,
+	0x080c, 0x6972, 0x1990, 0xb800, 0xd0bc, 0x0978, 0x0804, 0x60cf,
+	0x080c, 0x679b, 0x0904, 0x60e8, 0x0804, 0x60d3, 0x00b6, 0x00e6,
+	0x0126, 0x2091, 0x8000, 0xa874, 0x908e, 0x00ff, 0x1120, 0x2001,
+	0x196b, 0x205c, 0x0060, 0xa974, 0x9182, 0x0800, 0x1690, 0x9188,
+	0x1000, 0x2104, 0x905d, 0x01d0, 0x080c, 0x6912, 0x11d0, 0x080c,
+	0xae0b, 0x0570, 0x2b00, 0x6012, 0x2900, 0x6016, 0x6023, 0x0009,
+	0x600b, 0x0000, 0xa874, 0x908e, 0x00ff, 0x1110, 0x600b, 0x8000,
+	0x2009, 0x0043, 0x080c, 0xaedc, 0x9006, 0x00b0, 0x2001, 0x0028,
+	0x0090, 0x2009, 0x180c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004,
+	0x0038, 0xd184, 0x0118, 0x2001, 0x0004, 0x0010, 0x2001, 0x0029,
+	0x0010, 0x2001, 0x0029, 0x9005, 0x012e, 0x00ee, 0x00be, 0x0005,
+	0x2001, 0x002c, 0x0cc0, 0x00b6, 0x00e6, 0x0126, 0x2091, 0x8000,
+	0xa974, 0x9182, 0x0800, 0x1a04, 0x6206, 0x9188, 0x1000, 0x2104,
+	0x905d, 0x0904, 0x61de, 0xb8a0, 0x9086, 0x007f, 0x0178, 0x080c,
+	0x697a, 0x0160, 0xa994, 0x81ff, 0x0130, 0x908e, 0x0004, 0x0130,
+	0x908e, 0x0005, 0x0118, 0x080c, 0x6972, 0x1598, 0xa87c, 0xd0fc,
+	0x01e0, 0xa894, 0x9005, 0x01c8, 0x2060, 0x0026, 0x2010, 0x080c,
+	0xcb23, 0x002e, 0x1120, 0x2001, 0x0008, 0x0804, 0x6208, 0x6020,
+	0x9086, 0x000a, 0x0120, 0x2001, 0x0008, 0x0804, 0x6208, 0x601a,
+	0x6003, 0x0008, 0x2900, 0x6016, 0x0058, 0x080c, 0xae0b, 0x05e8,
+	0x2b00, 0x6012, 0x2900, 0x6016, 0x600b, 0xffff, 0x6023, 0x000a,
+	0x2009, 0x0003, 0x080c, 0xaedc, 0x9006, 0x0458, 0x2001, 0x0028,
+	0x0438, 0x9082, 0x0006, 0x1290, 0x080c, 0xadcb, 0x1160, 0xb8a0,
+	0x9084, 0xff80, 0x1140, 0xb900, 0xd1fc, 0x0900, 0x2001, 0x0029,
+	0x2009, 0x1000, 0x00a8, 0x2001, 0x0028, 0x0090, 0x2009, 0x180c,
+	0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0050, 0xd184, 0x0118,
+	0x2001, 0x0004, 0x0028, 0x2001, 0x0029, 0x0010, 0x2001, 0x0029,
+	0x9005, 0x012e, 0x00ee, 0x00be, 0x0005, 0x2001, 0x002c, 0x0cc0,
+	0x00f6, 0x00b6, 0x0126, 0x2091, 0x8000, 0xa8e0, 0x9005, 0x1550,
+	0xa8dc, 0x9082, 0x0101, 0x1630, 0xa8c8, 0x9005, 0x1518, 0xa8c4,
+	0x9082, 0x0101, 0x12f8, 0xa974, 0x2079, 0x1800, 0x9182, 0x0800,
+	0x12e8, 0x7830, 0x9084, 0x0003, 0x1130, 0xaa98, 0xab94, 0xa878,
+	0x9084, 0x0007, 0x00ea, 0x7930, 0xd18c, 0x0118, 0x2001, 0x0004,
+	0x0038, 0xd184, 0x0118, 0x2001, 0x0004, 0x0010, 0x2001, 0x0029,
+	0x900e, 0x0038, 0x2001, 0x002c, 0x900e, 0x0018, 0x2001, 0x0029,
+	0x900e, 0x9006, 0x0008, 0x9005, 0x012e, 0x00be, 0x00fe, 0x0005,
+	0x629d, 0x6258, 0x626f, 0x629d, 0x629d, 0x629d, 0x629d, 0x629d,
+	0x2100, 0x9082, 0x007e, 0x1278, 0x080c, 0x659e, 0x0148, 0x9046,
+	0xb810, 0x9306, 0x1904, 0x62a5, 0xb814, 0x9206, 0x15f0, 0x0028,
+	0xbb12, 0xba16, 0x0010, 0x080c, 0x49b7, 0x0150, 0x04b0, 0x080c,
+	0x65ff, 0x1598, 0xb810, 0x9306, 0x1580, 0xb814, 0x9206, 0x1568,
+	0x080c, 0xae0b, 0x0530, 0x2b00, 0x6012, 0x080c, 0xcfaa, 0x2900,
+	0x6016, 0x600b, 0xffff, 0x6023, 0x000a, 0xa878, 0x9086, 0x0001,
+	0x1170, 0x080c, 0x31bf, 0x9006, 0x080c, 0x653b, 0x2001, 0x0002,
+	0x080c, 0x654f, 0x2001, 0x0200, 0xb86e, 0xb893, 0x0002, 0x2009,
+	0x0003, 0x080c, 0xaedc, 0x9006, 0x0068, 0x2001, 0x0001, 0x900e,
+	0x0038, 0x2001, 0x002c, 0x900e, 0x0018, 0x2001, 0x0028, 0x900e,
+	0x9005, 0x0000, 0x012e, 0x00be, 0x00fe, 0x0005, 0x00b6, 0x00f6,
+	0x00e6, 0x0126, 0x2091, 0x8000, 0xa894, 0x90c6, 0x0015, 0x0904,
+	0x648c, 0x90c6, 0x0056, 0x0904, 0x6490, 0x90c6, 0x0066, 0x0904,
+	0x6494, 0x90c6, 0x0067, 0x0904, 0x6498, 0x90c6, 0x0068, 0x0904,
+	0x649c, 0x90c6, 0x0071, 0x0904, 0x64a0, 0x90c6, 0x0074, 0x0904,
+	0x64a4, 0x90c6, 0x007c, 0x0904, 0x64a8, 0x90c6, 0x007e, 0x0904,
+	0x64ac, 0x90c6, 0x0037, 0x0904, 0x64b0, 0x9016, 0x2079, 0x1800,
+	0xa974, 0x9186, 0x00ff, 0x0904, 0x6487, 0x9182, 0x0800, 0x1a04,
+	0x6487, 0x080c, 0x65ff, 0x1198, 0xb804, 0x9084, 0x00ff, 0x9082,
+	0x0006, 0x1268, 0xa894, 0x90c6, 0x006f, 0x0148, 0x080c, 0xadcb,
+	0x1904, 0x6470, 0xb8a0, 0x9084, 0xff80, 0x1904, 0x6470, 0xa894,
+	0x90c6, 0x006f, 0x0158, 0x90c6, 0x005e, 0x0904, 0x63d0, 0x90c6,
+	0x0064, 0x0904, 0x63f9, 0x2008, 0x0804, 0x6392, 0xa998, 0xa8b0,
+	0x2040, 0x080c, 0xadcb, 0x1120, 0x9182, 0x007f, 0x0a04, 0x6392,
+	0x9186, 0x00ff, 0x0904, 0x6392, 0x9182, 0x0800, 0x1a04, 0x6392,
+	0xaaa0, 0xab9c, 0x787c, 0x9306, 0x1188, 0x7880, 0x0096, 0x924e,
+	0x1128, 0x2208, 0x2310, 0x009e, 0x0804, 0x6392, 0x99cc, 0xff00,
+	0x009e, 0x1120, 0x2208, 0x2310, 0x0804, 0x6392, 0x080c, 0x49b7,
+	0x0904, 0x639c, 0x900e, 0x9016, 0x90c6, 0x4000, 0x15e0, 0x0006,
+	0x080c, 0x681f, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d,
+	0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0031, 0x20a0,
+	0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x0006, 0x2098, 0x080c, 0x0f7c,
+	0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0035, 0x20a0,
+	0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x000a, 0x2098, 0x080c, 0x0f7c,
+	0xa8c4, 0xabc8, 0x9305, 0xabcc, 0x9305, 0xabd0, 0x9305, 0xabd4,
+	0x9305, 0xabd8, 0x9305, 0xabdc, 0x9305, 0xabe0, 0x9305, 0x9005,
+	0x0510, 0x000e, 0x00c8, 0x90c6, 0x4007, 0x1110, 0x2408, 0x00a0,
+	0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0070, 0x90c6, 0x4009,
+	0x1108, 0x0050, 0x90c6, 0x4006, 0x0138, 0x2001, 0x4005, 0x2009,
+	0x000a, 0x0010, 0x2001, 0x4006, 0xa896, 0xa99a, 0xaa9e, 0x2001,
+	0x0030, 0x900e, 0x0478, 0x000e, 0x080c, 0xae0b, 0x1130, 0x2001,
+	0x4005, 0x2009, 0x0003, 0x9016, 0x0c78, 0x2b00, 0x6012, 0x080c,
+	0xcfaa, 0x2900, 0x6016, 0x6023, 0x0001, 0xa868, 0xd88c, 0x0108,
+	0xc0f5, 0xa86a, 0x0126, 0x2091, 0x8000, 0x080c, 0x31bf, 0x012e,
+	0x9006, 0x080c, 0x653b, 0x2001, 0x0002, 0x080c, 0x654f, 0x2009,
+	0x0002, 0x080c, 0xaedc, 0xa8b0, 0xd094, 0x0118, 0xb8cc, 0xc08d,
+	0xb8ce, 0x9006, 0x9005, 0x012e, 0x00ee, 0x00fe, 0x00be, 0x0005,
+	0x080c, 0x56e3, 0x0118, 0x2009, 0x0007, 0x00f8, 0xa998, 0xaeb0,
+	0x080c, 0x65ff, 0x1904, 0x638d, 0x9186, 0x007f, 0x0130, 0x080c,
+	0x6972, 0x0118, 0x2009, 0x0009, 0x0080, 0x0096, 0x080c, 0x0fff,
+	0x1120, 0x009e, 0x2009, 0x0002, 0x0040, 0x2900, 0x009e, 0xa806,
+	0x080c, 0xcd1b, 0x19b0, 0x2009, 0x0003, 0x2001, 0x4005, 0x0804,
+	0x6394, 0xa998, 0xaeb0, 0x080c, 0x65ff, 0x1904, 0x638d, 0x0096,
+	0x080c, 0x0fff, 0x1128, 0x009e, 0x2009, 0x0002, 0x0804, 0x644d,
+	0x2900, 0x009e, 0xa806, 0x0096, 0x2048, 0x20a9, 0x002b, 0xb8c4,
+	0x20e0, 0xb8c8, 0x2098, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002,
+	0x20a0, 0x4003, 0x20a9, 0x0008, 0x9080, 0x0006, 0x20a0, 0xbbc8,
+	0x9398, 0x0006, 0x2398, 0x080c, 0x0f7c, 0x009e, 0xa87b, 0x0000,
+	0xa883, 0x0000, 0xa897, 0x4000, 0xd684, 0x1168, 0x080c, 0x56cf,
+	0xd0b4, 0x1118, 0xa89b, 0x000b, 0x00e0, 0xb800, 0xd08c, 0x0118,
+	0xa89b, 0x000c, 0x00b0, 0x080c, 0x6972, 0x0118, 0xa89b, 0x0009,
+	0x0080, 0x080c, 0x56e3, 0x0118, 0xa89b, 0x0007, 0x0050, 0x080c,
+	0xccfe, 0x1904, 0x63c9, 0x2009, 0x0003, 0x2001, 0x4005, 0x0804,
+	0x6394, 0xa87b, 0x0030, 0xa897, 0x4005, 0xa804, 0x8006, 0x8006,
+	0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2009,
+	0x002b, 0xaaa0, 0xab9c, 0xaca8, 0xada4, 0x2031, 0x0000, 0x2041,
+	0x1243, 0x080c, 0xb37a, 0x1904, 0x63c9, 0x2009, 0x0002, 0x08e8,
+	0x2001, 0x0028, 0x900e, 0x0804, 0x63ca, 0x2009, 0x180c, 0x210c,
+	0xd18c, 0x0118, 0x2001, 0x0004, 0x0038, 0xd184, 0x0118, 0x2001,
+	0x0004, 0x0010, 0x2001, 0x0029, 0x900e, 0x0804, 0x63ca, 0x2001,
+	0x0029, 0x900e, 0x0804, 0x63ca, 0x080c, 0x3749, 0x0804, 0x63cb,
+	0x080c, 0x540c, 0x0804, 0x63cb, 0x080c, 0x4547, 0x0804, 0x63cb,
+	0x080c, 0x45c0, 0x0804, 0x63cb, 0x080c, 0x461c, 0x0804, 0x63cb,
+	0x080c, 0x4a7a, 0x0804, 0x63cb, 0x080c, 0x4d31, 0x0804, 0x63cb,
+	0x080c, 0x5077, 0x0804, 0x63cb, 0x080c, 0x5270, 0x0804, 0x63cb,
+	0x080c, 0x395f, 0x0804, 0x63cb, 0x00b6, 0xa974, 0xae78, 0x9684,
+	0x3fff, 0x9082, 0x4000, 0x1618, 0x9182, 0x0800, 0x1268, 0x9188,
+	0x1000, 0x2104, 0x905d, 0x0140, 0x080c, 0x6972, 0x1148, 0x00e9,
+	0x080c, 0x672a, 0x9006, 0x00b0, 0x2001, 0x0028, 0x900e, 0x0090,
+	0x9082, 0x0006, 0x1240, 0xb900, 0xd1fc, 0x0d88, 0x2001, 0x0029,
+	0x2009, 0x1000, 0x0038, 0x2001, 0x0029, 0x900e, 0x0018, 0x2001,
+	0x0029, 0x900e, 0x9005, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000,
+	0xb850, 0x900d, 0x0150, 0x2900, 0x0096, 0x2148, 0xa802, 0x009e,
+	0xa803, 0x0000, 0xb852, 0x012e, 0x0005, 0x2900, 0xb852, 0xb84e,
+	0xa803, 0x0000, 0x0cc0, 0x0126, 0x2091, 0x8000, 0xb84c, 0x9005,
+	0x0170, 0x00e6, 0x2071, 0x19e7, 0x7004, 0x9086, 0x0002, 0x0168,
+	0x00ee, 0xb84c, 0xa802, 0x2900, 0xb84e, 0x012e, 0x0005, 0x2900,
+	0xb852, 0xb84e, 0xa803, 0x0000, 0x0cc0, 0x701c, 0x9b06, 0x1d80,
+	0xb84c, 0x00a6, 0x2050, 0xb000, 0xa802, 0x2900, 0xb002, 0x00ae,
+	0x00ee, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0xb84c, 0x904d,
+	0x0130, 0xa800, 0x9005, 0x1108, 0xb852, 0xb84e, 0x9905, 0x012e,
+	0x0005, 0xb84c, 0x904d, 0x0130, 0xa800, 0x9005, 0x1108, 0xb852,
+	0xb84e, 0x9905, 0x0005, 0x00b6, 0x0126, 0x00c6, 0x0026, 0x2091,
+	0x8000, 0x6210, 0x2258, 0xba00, 0x9005, 0x0110, 0xc285, 0x0008,
+	0xc284, 0xba02, 0x002e, 0x00ce, 0x012e, 0x00be, 0x0005, 0x00b6,
+	0x0126, 0x00c6, 0x2091, 0x8000, 0x6210, 0x2258, 0xba04, 0x0006,
+	0x9086, 0x0006, 0x1170, 0xb89c, 0xd0ac, 0x0158, 0x080c, 0x696e,
+	0x0140, 0x9284, 0xff00, 0x8007, 0x9086, 0x0007, 0x1110, 0x2011,
+	0x0600, 0x000e, 0x9294, 0xff00, 0x9215, 0xba06, 0x0006, 0x9086,
+	0x0006, 0x1120, 0xba90, 0x82ff, 0x090c, 0x0dd5, 0x000e, 0x00ce,
+	0x012e, 0x00be, 0x0005, 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000,
+	0x6210, 0x2258, 0xba04, 0x0006, 0x9086, 0x0006, 0x1168, 0xb89c,
+	0xd0a4, 0x0150, 0x080c, 0x696a, 0x1138, 0x9284, 0x00ff, 0x9086,
+	0x0007, 0x1110, 0x2011, 0x0006, 0x000e, 0x9294, 0x00ff, 0x8007,
+	0x9215, 0xba06, 0x00ce, 0x012e, 0x00be, 0x0005, 0x9182, 0x0800,
+	0x0218, 0x9085, 0x0001, 0x0005, 0x00d6, 0x0026, 0x9190, 0x1000,
+	0x2204, 0x905d, 0x1188, 0x0096, 0x080c, 0x0fff, 0x2958, 0x009e,
+	0x0168, 0x2b00, 0x2012, 0xb85c, 0xb8ca, 0xb860, 0xb8c6, 0x9006,
+	0xb8a6, 0xb8ae, 0x080c, 0x6034, 0x9006, 0x0010, 0x9085, 0x0001,
+	0x002e, 0x00de, 0x0005, 0x00b6, 0x0096, 0x0126, 0x2091, 0x8000,
+	0x0026, 0x9182, 0x0800, 0x0218, 0x9085, 0x0001, 0x0458, 0x00d6,
+	0x9190, 0x1000, 0x2204, 0x905d, 0x0518, 0x2013, 0x0000, 0xb8a4,
+	0x904d, 0x0110, 0x080c, 0x1031, 0x00d6, 0x00c6, 0xb8bc, 0x2060,
+	0x8cff, 0x0168, 0x600c, 0x0006, 0x6014, 0x2048, 0x080c, 0xcb35,
+	0x0110, 0x080c, 0x0fb1, 0x080c, 0xae61, 0x00ce, 0x0c88, 0x00ce,
+	0x00de, 0x2b48, 0xb8c8, 0xb85e, 0xb8c4, 0xb862, 0x080c, 0x1041,
+	0x00de, 0x9006, 0x002e, 0x012e, 0x009e, 0x00be, 0x0005, 0x0016,
+	0x9182, 0x0800, 0x0218, 0x9085, 0x0001, 0x0030, 0x9188, 0x1000,
+	0x2104, 0x905d, 0x0dc0, 0x9006, 0x001e, 0x0005, 0x00d6, 0x0156,
+	0x0136, 0x0146, 0x9006, 0xb80a, 0xb80e, 0xb800, 0xc08c, 0xb802,
+	0x080c, 0x73bc, 0x1510, 0xb8a0, 0x9086, 0x007e, 0x0120, 0x080c,
+	0xadcb, 0x11d8, 0x0078, 0x7040, 0xd0e4, 0x01b8, 0x00c6, 0x2061,
+	0x1982, 0x7048, 0x2062, 0x704c, 0x6006, 0x7050, 0x600a, 0x7054,
+	0x600e, 0x00ce, 0x703c, 0x2069, 0x0140, 0x9005, 0x1110, 0x2001,
+	0x0001, 0x6886, 0x2069, 0x1800, 0x68b6, 0x7040, 0xb85e, 0x7048,
+	0xb862, 0x704c, 0xb866, 0x20e1, 0x0000, 0x2099, 0x0276, 0xb8c4,
+	0x20e8, 0xb8c8, 0x9088, 0x000a, 0x21a0, 0x20a9, 0x0004, 0x4003,
+	0x2099, 0x027a, 0x9088, 0x0006, 0x21a0, 0x20a9, 0x0004, 0x4003,
+	0x2069, 0x0200, 0x6817, 0x0001, 0x7040, 0xb86a, 0x7144, 0xb96e,
+	0x7048, 0xb872, 0x7050, 0xb876, 0x2069, 0x0200, 0x6817, 0x0000,
+	0xb8a0, 0x9086, 0x007e, 0x1110, 0x7144, 0xb96e, 0x9182, 0x0211,
+	0x1218, 0x2009, 0x0008, 0x0400, 0x9182, 0x0259, 0x1218, 0x2009,
+	0x0007, 0x00d0, 0x9182, 0x02c1, 0x1218, 0x2009, 0x0006, 0x00a0,
+	0x9182, 0x0349, 0x1218, 0x2009, 0x0005, 0x0070, 0x9182, 0x0421,
+	0x1218, 0x2009, 0x0004, 0x0040, 0x9182, 0x0581, 0x1218, 0x2009,
+	0x0003, 0x0010, 0x2009, 0x0002, 0xb992, 0x014e, 0x013e, 0x015e,
+	0x00de, 0x0005, 0x0016, 0x0026, 0x00e6, 0x2071, 0x0260, 0x7034,
+	0xb896, 0x703c, 0xb89a, 0x7054, 0xb89e, 0x0036, 0xbbcc, 0xc384,
+	0xba00, 0x2009, 0x1867, 0x210c, 0xd0bc, 0x0120, 0xd1ec, 0x0110,
+	0xc2ad, 0x0008, 0xc2ac, 0xd0c4, 0x0148, 0xd1e4, 0x0138, 0xc2bd,
+	0xd0cc, 0x0128, 0xd38c, 0x1108, 0xc385, 0x0008, 0xc2bc, 0xba02,
+	0xbbce, 0x003e, 0x00ee, 0x002e, 0x001e, 0x0005, 0x0096, 0x0126,
+	0x2091, 0x8000, 0xb8a4, 0x904d, 0x0578, 0xa900, 0x81ff, 0x15c0,
+	0xaa04, 0x9282, 0x0010, 0x16c8, 0x0136, 0x0146, 0x01c6, 0x01d6,
+	0x8906, 0x8006, 0x8007, 0x908c, 0x003f, 0x21e0, 0x9084, 0xffc0,
+	0x9080, 0x0004, 0x2098, 0x2009, 0x0010, 0x20a9, 0x0001, 0x4002,
+	0x9086, 0xffff, 0x0120, 0x8109, 0x1dd0, 0x080c, 0x0dd5, 0x3c00,
+	0x20e8, 0x3300, 0x8001, 0x20a0, 0x4604, 0x8210, 0xaa06, 0x01de,
+	0x01ce, 0x014e, 0x013e, 0x0060, 0x080c, 0x0fff, 0x0170, 0x2900,
+	0xb8a6, 0xa803, 0x0000, 0x080c, 0x67bb, 0xa807, 0x0001, 0xae12,
+	0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0126,
+	0x2091, 0x8000, 0x0096, 0xb8a4, 0x904d, 0x0188, 0xa800, 0x9005,
+	0x1150, 0x080c, 0x67ca, 0x1158, 0xa804, 0x908a, 0x0002, 0x0218,
+	0x8001, 0xa806, 0x0020, 0x080c, 0x1031, 0xb8a7, 0x0000, 0x009e,
+	0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x910d, 0x012e,
+	0x0005, 0x901e, 0x0010, 0x2019, 0x0001, 0x900e, 0x0126, 0x2091,
+	0x8000, 0xb84c, 0x2048, 0xb800, 0xd0dc, 0x1170, 0x89ff, 0x0500,
+	0x83ff, 0x0120, 0xa878, 0x9606, 0x0158, 0x0030, 0xa86c, 0x9406,
+	0x1118, 0xa870, 0x9506, 0x0120, 0x2908, 0xa800, 0x2048, 0x0c70,
+	0x080c, 0xa692, 0xaa00, 0xb84c, 0x9906, 0x1110, 0xba4e, 0x0020,
+	0x00a6, 0x2150, 0xb202, 0x00ae, 0x82ff, 0x1110, 0xb952, 0x89ff,
+	0x012e, 0x0005, 0x9016, 0x0489, 0x1110, 0x2011, 0x0001, 0x0005,
+	0x080c, 0x681f, 0x0128, 0x080c, 0xcbf2, 0x0010, 0x9085, 0x0001,
+	0x0005, 0x080c, 0x681f, 0x0128, 0x080c, 0xcb97, 0x0010, 0x9085,
+	0x0001, 0x0005, 0x080c, 0x681f, 0x0128, 0x080c, 0xcbef, 0x0010,
+	0x9085, 0x0001, 0x0005, 0x080c, 0x681f, 0x0128, 0x080c, 0xcbb6,
+	0x0010, 0x9085, 0x0001, 0x0005, 0x080c, 0x681f, 0x0128, 0x080c,
+	0xcc33, 0x0010, 0x9085, 0x0001, 0x0005, 0xb8a4, 0x900d, 0x1118,
+	0x9085, 0x0001, 0x0005, 0x0136, 0x01c6, 0xa800, 0x9005, 0x11b8,
 	0x890e, 0x810e, 0x810f, 0x9184, 0x003f, 0x20e0, 0x9184, 0xffc0,
 	0x9080, 0x0004, 0x2098, 0x20a9, 0x0001, 0x2009, 0x0010, 0x4002,
-	0x9606, 0x0128, 0x8109, 0x1dd8, 0x9085, 0x0001, 0x0068, 0x0146,
-	0x01d6, 0x3300, 0x8001, 0x20a0, 0x3c00, 0x20e8, 0x2001, 0xffff,
-	0x4004, 0x01de, 0x014e, 0x9006, 0x01ce, 0x013e, 0x0005, 0x0096,
-	0x0126, 0x2091, 0x8000, 0xb8a4, 0x904d, 0x1128, 0x080c, 0x0fff,
-	0x0168, 0x2900, 0xb8a6, 0x080c, 0x67bc, 0xa803, 0x0001, 0xa807,
-	0x0000, 0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8,
-	0x0096, 0x0126, 0x2091, 0x8000, 0xb8a4, 0x904d, 0x0130, 0xb8a7,
-	0x0000, 0x080c, 0x1031, 0x9085, 0x0001, 0x012e, 0x009e, 0x0005,
-	0xb89c, 0xd0a4, 0x0005, 0x00b6, 0x00f6, 0x080c, 0x73b0, 0x01b0,
-	0x71c4, 0x81ff, 0x1198, 0x71dc, 0xd19c, 0x0180, 0x2001, 0x007e,
-	0x9080, 0x1000, 0x2004, 0x905d, 0x0148, 0xb804, 0x9084, 0x00ff,
-	0x9086, 0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802, 0x2079, 0x1847,
-	0x7804, 0xd0a4, 0x01d0, 0x0156, 0x20a9, 0x007f, 0x900e, 0x0016,
-	0x080c, 0x6600, 0x1168, 0xb804, 0x9084, 0xff00, 0x8007, 0x9096,
-	0x0004, 0x0118, 0x9086, 0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802,
-	0x001e, 0x8108, 0x1f04, 0x6847, 0x015e, 0x080c, 0x6928, 0x0120,
-	0x2001, 0x1985, 0x200c, 0x0038, 0x2079, 0x1847, 0x7804, 0xd0a4,
-	0x0130, 0x2009, 0x07d0, 0x2011, 0x6872, 0x080c, 0x8562, 0x00fe,
-	0x00be, 0x0005, 0x00b6, 0x2011, 0x6872, 0x080c, 0x84ca, 0x080c,
-	0x6928, 0x01d8, 0x2001, 0x107e, 0x2004, 0x2058, 0xb900, 0xc1ec,
-	0xb902, 0x080c, 0x6966, 0x0130, 0x2009, 0x07d0, 0x2011, 0x6872,
-	0x080c, 0x8562, 0x00e6, 0x2071, 0x1800, 0x9006, 0x707e, 0x7060,
-	0x7082, 0x080c, 0x2f96, 0x00ee, 0x04b0, 0x0156, 0x00c6, 0x20a9,
-	0x007f, 0x900e, 0x0016, 0x080c, 0x6600, 0x1538, 0xb800, 0xd0ec,
-	0x0520, 0x0046, 0xbaa0, 0x2220, 0x9006, 0x2009, 0x0029, 0x080c,
-	0xe58d, 0xb800, 0xc0e5, 0xc0ec, 0xb802, 0x080c, 0x6962, 0x2001,
-	0x0707, 0x1128, 0xb804, 0x9084, 0x00ff, 0x9085, 0x0700, 0xb806,
-	0x2019, 0x0029, 0x080c, 0x9262, 0x0076, 0x903e, 0x080c, 0x913f,
-	0x900e, 0x080c, 0xe2ca, 0x007e, 0x004e, 0x001e, 0x8108, 0x1f04,
-	0x689a, 0x00ce, 0x015e, 0x00be, 0x0005, 0x00b6, 0x6010, 0x2058,
-	0xb800, 0xc0ec, 0xb802, 0x00be, 0x0005, 0x00b6, 0x00c6, 0x0096,
-	0x080c, 0x1018, 0x090c, 0x0dd5, 0x2958, 0x009e, 0x2001, 0x196b,
-	0x2b02, 0xb8af, 0x0000, 0x2009, 0x00ff, 0x080c, 0x6035, 0xb807,
+	0x9606, 0x0128, 0x8109, 0x1dd8, 0x9085, 0x0001, 0x0008, 0x9006,
+	0x01ce, 0x013e, 0x0005, 0x0146, 0x01d6, 0xa860, 0x20e8, 0xa85c,
+	0x9080, 0x0004, 0x20a0, 0x20a9, 0x0010, 0x2009, 0xffff, 0x4104,
+	0x01de, 0x014e, 0x0136, 0x01c6, 0xa800, 0x9005, 0x11b8, 0x890e,
+	0x810e, 0x810f, 0x9184, 0x003f, 0x20e0, 0x9184, 0xffc0, 0x9080,
+	0x0004, 0x2098, 0x20a9, 0x0001, 0x2009, 0x0010, 0x4002, 0x9606,
+	0x0128, 0x8109, 0x1dd8, 0x9085, 0x0001, 0x0068, 0x0146, 0x01d6,
+	0x3300, 0x8001, 0x20a0, 0x3c00, 0x20e8, 0x2001, 0xffff, 0x4004,
+	0x01de, 0x014e, 0x9006, 0x01ce, 0x013e, 0x0005, 0x0096, 0x0126,
+	0x2091, 0x8000, 0xb8a4, 0x904d, 0x1128, 0x080c, 0x0fff, 0x0168,
+	0x2900, 0xb8a6, 0x080c, 0x67bb, 0xa803, 0x0001, 0xa807, 0x0000,
+	0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0096,
+	0x0126, 0x2091, 0x8000, 0xb8a4, 0x904d, 0x0130, 0xb8a7, 0x0000,
+	0x080c, 0x1031, 0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0xb89c,
+	0xd0a4, 0x0005, 0x00b6, 0x00f6, 0x080c, 0x73bc, 0x01b0, 0x71c4,
+	0x81ff, 0x1198, 0x71dc, 0xd19c, 0x0180, 0x2001, 0x007e, 0x9080,
+	0x1000, 0x2004, 0x905d, 0x0148, 0xb804, 0x9084, 0x00ff, 0x9086,
+	0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802, 0x2079, 0x1847, 0x7804,
+	0xd0a4, 0x01d0, 0x0156, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c,
+	0x65ff, 0x1168, 0xb804, 0x9084, 0xff00, 0x8007, 0x9096, 0x0004,
+	0x0118, 0x9086, 0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802, 0x001e,
+	0x8108, 0x1f04, 0x6846, 0x015e, 0x080c, 0x6930, 0x0120, 0x2001,
+	0x1985, 0x200c, 0x0038, 0x2079, 0x1847, 0x7804, 0xd0a4, 0x0130,
+	0x2009, 0x07d0, 0x2011, 0x6871, 0x080c, 0x858b, 0x00fe, 0x00be,
+	0x0005, 0x00b6, 0x2011, 0x6871, 0x080c, 0x84f3, 0x080c, 0x6930,
+	0x01d8, 0x2001, 0x107e, 0x2004, 0x2058, 0xb900, 0xc1ec, 0xb902,
+	0x080c, 0x696e, 0x0130, 0x2009, 0x07d0, 0x2011, 0x6871, 0x080c,
+	0x858b, 0x00e6, 0x2071, 0x1800, 0x9006, 0x707e, 0x7060, 0x7082,
+	0x080c, 0x2f96, 0x00ee, 0x04b0, 0x0156, 0x00c6, 0x20a9, 0x007f,
+	0x900e, 0x0016, 0x080c, 0x65ff, 0x1538, 0xb800, 0xd0ec, 0x0520,
+	0x0046, 0xbaa0, 0x2220, 0x9006, 0x2009, 0x0029, 0x080c, 0xe5ae,
+	0xb800, 0xc0e5, 0xc0ec, 0xb802, 0x080c, 0x696a, 0x2001, 0x0707,
+	0x1128, 0xb804, 0x9084, 0x00ff, 0x9085, 0x0700, 0xb806, 0x2019,
+	0x0029, 0x080c, 0x928b, 0x0076, 0x903e, 0x080c, 0x9168, 0x900e,
+	0x080c, 0xe2eb, 0x007e, 0x004e, 0x001e, 0x8108, 0x1f04, 0x6899,
+	0x00ce, 0x015e, 0x00be, 0x0005, 0x00b6, 0x6010, 0x2058, 0xb800,
+	0xc0ec, 0xb802, 0x00be, 0x0005, 0x00b6, 0x00c6, 0x0096, 0x080c,
+	0x1018, 0x090c, 0x0dd5, 0x2958, 0x009e, 0x2001, 0x196b, 0x2b02,
+	0x8b07, 0x8006, 0x8006, 0x908c, 0x003f, 0xb9c6, 0x908c, 0xffc0,
+	0xb9ca, 0xb8af, 0x0000, 0x2009, 0x00ff, 0x080c, 0x6034, 0xb807,
 	0x0006, 0xb813, 0x00ff, 0xb817, 0xffff, 0xb86f, 0x0200, 0xb86c,
 	0xb893, 0x0002, 0xb8bb, 0x0520, 0xb8a3, 0x00ff, 0xb8af, 0x0000,
 	0x00ce, 0x00be, 0x0005, 0x7810, 0x00b6, 0x2058, 0xb800, 0x00be,
@@ -3164,84 +3165,84 @@
 	0x0006, 0xbaa0, 0x9290, 0x1000, 0x2204, 0x9b06, 0x190c, 0x0dd5,
 	0x000e, 0xba00, 0x9005, 0x0110, 0xc2fd, 0x0008, 0xc2fc, 0xba02,
 	0x002e, 0x012e, 0x0005, 0x2011, 0x1837, 0x2204, 0xd0cc, 0x0138,
-	0x2001, 0x1983, 0x200c, 0x2011, 0x6958, 0x080c, 0x8562, 0x0005,
-	0x2011, 0x6958, 0x080c, 0x84ca, 0x2011, 0x1837, 0x2204, 0xc0cc,
-	0x2012, 0x0005, 0x080c, 0x56d0, 0xd0ac, 0x0005, 0x080c, 0x56d0,
+	0x2001, 0x1983, 0x200c, 0x2011, 0x6960, 0x080c, 0x858b, 0x0005,
+	0x2011, 0x6960, 0x080c, 0x84f3, 0x2011, 0x1837, 0x2204, 0xc0cc,
+	0x2012, 0x0005, 0x080c, 0x56cf, 0xd0ac, 0x0005, 0x080c, 0x56cf,
 	0xd0a4, 0x0005, 0x0016, 0xb904, 0x9184, 0x00ff, 0x908e, 0x0006,
 	0x001e, 0x0005, 0x0016, 0xb904, 0x9184, 0xff00, 0x8007, 0x908e,
-	0x0006, 0x001e, 0x0005, 0x00b6, 0x00f6, 0x080c, 0xd216, 0x0158,
+	0x0006, 0x001e, 0x0005, 0x00b6, 0x00f6, 0x080c, 0xd230, 0x0158,
 	0x70dc, 0x9084, 0x0028, 0x0138, 0x2001, 0x107f, 0x2004, 0x905d,
 	0x0110, 0xb8cc, 0xd094, 0x00fe, 0x00be, 0x0005, 0x2071, 0x1910,
 	0x7003, 0x0001, 0x7007, 0x0000, 0x9006, 0x7012, 0x7016, 0x701a,
 	0x701e, 0x700a, 0x7046, 0x2001, 0x1947, 0x2003, 0x0000, 0x0005,
-	0x0016, 0x00e6, 0x2071, 0x1948, 0x900e, 0x710a, 0x080c, 0x56d0,
-	0xd0fc, 0x1140, 0x080c, 0x56d0, 0x900e, 0xd09c, 0x0108, 0x8108,
+	0x0016, 0x00e6, 0x2071, 0x1948, 0x900e, 0x710a, 0x080c, 0x56cf,
+	0xd0fc, 0x1140, 0x080c, 0x56cf, 0x900e, 0xd09c, 0x0108, 0x8108,
 	0x7102, 0x00f8, 0x2001, 0x1867, 0x200c, 0x9184, 0x0007, 0x0002,
-	0x69aa, 0x69aa, 0x69aa, 0x69aa, 0x69aa, 0x69c0, 0x69ce, 0x69aa,
+	0x69b2, 0x69b2, 0x69b2, 0x69b2, 0x69b2, 0x69c8, 0x69d6, 0x69b2,
 	0x7003, 0x0003, 0x2009, 0x1868, 0x210c, 0x9184, 0xff00, 0x8007,
 	0x9005, 0x1110, 0x2001, 0x0002, 0x7006, 0x0018, 0x7003, 0x0005,
 	0x0c88, 0x00ee, 0x001e, 0x0005, 0x00e6, 0x2071, 0x0050, 0x684c,
 	0x9005, 0x1150, 0x00e6, 0x2071, 0x1910, 0x7028, 0xc085, 0x702a,
 	0x00ee, 0x9085, 0x0001, 0x0488, 0x6844, 0x9005, 0x0158, 0x080c,
-	0x770a, 0x6a60, 0x9200, 0x7002, 0x6864, 0x9101, 0x7006, 0x9006,
+	0x7716, 0x6a60, 0x9200, 0x7002, 0x6864, 0x9101, 0x7006, 0x9006,
 	0x7012, 0x7016, 0x6860, 0x7002, 0x6864, 0x7006, 0x6868, 0x700a,
 	0x686c, 0x700e, 0x6844, 0x9005, 0x1110, 0x7012, 0x7016, 0x684c,
 	0x701a, 0x701c, 0x9085, 0x0040, 0x701e, 0x7037, 0x0019, 0x702b,
 	0x0001, 0x00e6, 0x2071, 0x1910, 0x7028, 0xc084, 0x702a, 0x7007,
 	0x0001, 0x700b, 0x0000, 0x00ee, 0x9006, 0x00ee, 0x0005, 0x00e6,
-	0x0026, 0x2071, 0x1948, 0x7000, 0x9015, 0x0904, 0x6c7e, 0x9286,
-	0x0003, 0x0904, 0x6b14, 0x9286, 0x0005, 0x0904, 0x6b14, 0x2071,
-	0x1877, 0xa87c, 0x9005, 0x0904, 0x6a75, 0x7140, 0xa868, 0x9102,
-	0x0a04, 0x6c7e, 0xa878, 0xd084, 0x15d8, 0xa853, 0x0019, 0x2001,
-	0x8023, 0xa84e, 0x2071, 0x1910, 0x701c, 0x9005, 0x1904, 0x6e20,
-	0x0e04, 0x6e8e, 0x2071, 0x0000, 0xa850, 0x7032, 0xa84c, 0x7082,
+	0x0026, 0x2071, 0x1948, 0x7000, 0x9015, 0x0904, 0x6c86, 0x9286,
+	0x0003, 0x0904, 0x6b1c, 0x9286, 0x0005, 0x0904, 0x6b1c, 0x2071,
+	0x1877, 0xa87c, 0x9005, 0x0904, 0x6a7d, 0x7140, 0xa868, 0x9102,
+	0x0a04, 0x6c86, 0xa878, 0xd084, 0x15d8, 0xa853, 0x0019, 0x2001,
+	0x8023, 0xa84e, 0x2071, 0x1910, 0x701c, 0x9005, 0x1904, 0x6e28,
+	0x0e04, 0x6e96, 0x2071, 0x0000, 0xa850, 0x7032, 0xa84c, 0x7082,
 	0xa870, 0x7086, 0xa86c, 0x708a, 0xa880, 0x708e, 0x7036, 0x0146,
 	0x01d6, 0x0136, 0x01c6, 0x0156, 0x20e9, 0x0000, 0x20a1, 0x002a,
 	0xa868, 0x20a8, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0021, 0x2098,
 	0x4003, 0x015e, 0x01ce, 0x013e, 0x01de, 0x014e, 0x2091, 0x4080,
-	0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119b, 0x0804, 0x6af7,
+	0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119b, 0x0804, 0x6aff,
 	0xa853, 0x001b, 0x2001, 0x8027, 0x0820, 0x7004, 0xd08c, 0x1904,
-	0x6c7e, 0xa853, 0x001a, 0x2001, 0x8024, 0x0804, 0x6a39, 0x00e6,
-	0x0026, 0x2071, 0x1948, 0x7000, 0x9015, 0x0904, 0x6c7e, 0x9286,
-	0x0003, 0x0904, 0x6b14, 0x9286, 0x0005, 0x0904, 0x6b14, 0xa84f,
-	0x8022, 0xa853, 0x0018, 0x0804, 0x6adc, 0xa868, 0xd0fc, 0x11d8,
-	0x00e6, 0x0026, 0x2001, 0x1948, 0x2004, 0x9005, 0x0904, 0x6c7e,
-	0xa87c, 0xd0bc, 0x1904, 0x6c7e, 0xa978, 0xa874, 0x9105, 0x1904,
-	0x6c7e, 0x2001, 0x1948, 0x2004, 0x0002, 0x6c7e, 0x6ad8, 0x6b14,
-	0x6b14, 0x6c7e, 0x6b14, 0x0005, 0xa868, 0xd0fc, 0x1500, 0x00e6,
-	0x0026, 0x2009, 0x1948, 0x210c, 0x81ff, 0x0904, 0x6c7e, 0xa87c,
-	0xd0cc, 0x0904, 0x6c7e, 0xa880, 0x9084, 0x00ff, 0x9086, 0x0001,
-	0x1904, 0x6c7e, 0x9186, 0x0003, 0x0904, 0x6b14, 0x9186, 0x0005,
-	0x0904, 0x6b14, 0xa84f, 0x8021, 0xa853, 0x0017, 0x0028, 0x0005,
+	0x6c86, 0xa853, 0x001a, 0x2001, 0x8024, 0x0804, 0x6a41, 0x00e6,
+	0x0026, 0x2071, 0x1948, 0x7000, 0x9015, 0x0904, 0x6c86, 0x9286,
+	0x0003, 0x0904, 0x6b1c, 0x9286, 0x0005, 0x0904, 0x6b1c, 0xa84f,
+	0x8022, 0xa853, 0x0018, 0x0804, 0x6ae4, 0xa868, 0xd0fc, 0x11d8,
+	0x00e6, 0x0026, 0x2001, 0x1948, 0x2004, 0x9005, 0x0904, 0x6c86,
+	0xa87c, 0xd0bc, 0x1904, 0x6c86, 0xa978, 0xa874, 0x9105, 0x1904,
+	0x6c86, 0x2001, 0x1948, 0x2004, 0x0002, 0x6c86, 0x6ae0, 0x6b1c,
+	0x6b1c, 0x6c86, 0x6b1c, 0x0005, 0xa868, 0xd0fc, 0x1500, 0x00e6,
+	0x0026, 0x2009, 0x1948, 0x210c, 0x81ff, 0x0904, 0x6c86, 0xa87c,
+	0xd0cc, 0x0904, 0x6c86, 0xa880, 0x9084, 0x00ff, 0x9086, 0x0001,
+	0x1904, 0x6c86, 0x9186, 0x0003, 0x0904, 0x6b1c, 0x9186, 0x0005,
+	0x0904, 0x6b1c, 0xa84f, 0x8021, 0xa853, 0x0017, 0x0028, 0x0005,
 	0xa84f, 0x8020, 0xa853, 0x0016, 0x2071, 0x1910, 0x701c, 0x9005,
-	0x1904, 0x6e20, 0x0e04, 0x6e8e, 0x2071, 0x0000, 0xa84c, 0x7082,
+	0x1904, 0x6e28, 0x0e04, 0x6e96, 0x2071, 0x0000, 0xa84c, 0x7082,
 	0xa850, 0x7032, 0xa86c, 0x7086, 0x7036, 0xa870, 0x708a, 0x2091,
 	0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119b, 0x2071,
 	0x1800, 0x2011, 0x0001, 0xa804, 0x900d, 0x702c, 0x1158, 0xa802,
-	0x2900, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x83eb, 0x002e,
+	0x2900, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8414, 0x002e,
 	0x00ee, 0x0005, 0x0096, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900,
 	0x81ff, 0x1dc8, 0x009e, 0x0c58, 0xa84f, 0x0000, 0x00f6, 0x2079,
 	0x0050, 0x2071, 0x1910, 0xa803, 0x0000, 0x7010, 0x9005, 0x1904,
-	0x6c03, 0x782c, 0x908c, 0x0780, 0x190c, 0x6fda, 0x8004, 0x8004,
-	0x8004, 0x9084, 0x0003, 0x0002, 0x6b32, 0x6c03, 0x6b57, 0x6b9e,
+	0x6c0b, 0x782c, 0x908c, 0x0780, 0x190c, 0x6fe2, 0x8004, 0x8004,
+	0x8004, 0x9084, 0x0003, 0x0002, 0x6b3a, 0x6c0b, 0x6b5f, 0x6ba6,
 	0x080c, 0x0dd5, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d,
 	0x1170, 0x2071, 0x19fa, 0x703c, 0x9005, 0x1328, 0x2001, 0x1949,
 	0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016,
 	0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8,
-	0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x83eb, 0x0c10, 0x2071,
+	0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8414, 0x0c10, 0x2071,
 	0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1580, 0x7824, 0x00e6,
 	0x2071, 0x0040, 0x712c, 0xd19c, 0x1148, 0x2009, 0x1830, 0x210c,
 	0x918a, 0x0020, 0x0218, 0x7022, 0x00ee, 0x0058, 0x00ee, 0x2048,
 	0x702c, 0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c,
-	0x83eb, 0x782c, 0x9094, 0x0780, 0x190c, 0x6fda, 0xd0a4, 0x19f0,
+	0x8414, 0x782c, 0x9094, 0x0780, 0x190c, 0x6fe2, 0xd0a4, 0x19f0,
 	0x2071, 0x19fa, 0x703c, 0x9005, 0x1328, 0x2001, 0x1949, 0x2004,
 	0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c,
 	0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e,
-	0x70c0, 0x9200, 0x70c2, 0x080c, 0x83eb, 0x0800, 0x0096, 0x00e6,
+	0x70c0, 0x9200, 0x70c2, 0x080c, 0x8414, 0x0800, 0x0096, 0x00e6,
 	0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e,
-	0x70c0, 0x8000, 0x70c2, 0x080c, 0x83eb, 0x782c, 0x9094, 0x0780,
-	0x190c, 0x6fda, 0xd0a4, 0x1d60, 0x00ee, 0x782c, 0x9094, 0x0780,
-	0x190c, 0x6fda, 0xd09c, 0x11a0, 0x009e, 0x2900, 0x7822, 0xa804,
+	0x70c0, 0x8000, 0x70c2, 0x080c, 0x8414, 0x782c, 0x9094, 0x0780,
+	0x190c, 0x6fe2, 0xd0a4, 0x1d60, 0x00ee, 0x782c, 0x9094, 0x0780,
+	0x190c, 0x6fe2, 0xd09c, 0x11a0, 0x009e, 0x2900, 0x7822, 0xa804,
 	0x900d, 0x1560, 0x2071, 0x19fa, 0x703c, 0x9005, 0x1328, 0x2001,
 	0x1949, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005,
 	0x009e, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a,
@@ -3249,85 +3250,85 @@
 	0x2071, 0x19fa, 0x703c, 0x9005, 0x1328, 0x2001, 0x1949, 0x2004,
 	0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800,
 	0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff,
-	0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x83eb, 0x00fe,
+	0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8414, 0x00fe,
 	0x002e, 0x00ee, 0x0005, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018,
 	0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804,
-	0x900d, 0x1904, 0x6c58, 0x782c, 0x9094, 0x0780, 0x190c, 0x6fda,
+	0x900d, 0x1904, 0x6c60, 0x782c, 0x9094, 0x0780, 0x190c, 0x6fe2,
 	0xd09c, 0x1198, 0x701c, 0x904d, 0x0180, 0x7010, 0x8001, 0x7012,
 	0x1108, 0x701a, 0xa800, 0x701e, 0x2900, 0x7822, 0x782c, 0x9094,
-	0x0780, 0x190c, 0x6fda, 0xd09c, 0x0d68, 0x782c, 0x9094, 0x0780,
-	0x190c, 0x6fda, 0xd0a4, 0x01b0, 0x00e6, 0x7824, 0x2048, 0x2071,
+	0x0780, 0x190c, 0x6fe2, 0xd09c, 0x0d68, 0x782c, 0x9094, 0x0780,
+	0x190c, 0x6fe2, 0xd0a4, 0x01b0, 0x00e6, 0x7824, 0x2048, 0x2071,
 	0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2,
-	0x080c, 0x83eb, 0x782c, 0x9094, 0x0780, 0x190c, 0x6fda, 0xd0a4,
+	0x080c, 0x8414, 0x782c, 0x9094, 0x0780, 0x190c, 0x6fe2, 0xd0a4,
 	0x1d60, 0x00ee, 0x2071, 0x19fa, 0x703c, 0x9005, 0x1328, 0x2001,
 	0x1949, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005,
 	0x00e6, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802,
 	0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2,
-	0x080c, 0x83eb, 0x00ee, 0x0804, 0x6c13, 0xa868, 0xd0fc, 0x1560,
+	0x080c, 0x8414, 0x00ee, 0x0804, 0x6c1b, 0xa868, 0xd0fc, 0x1560,
 	0x0096, 0xa804, 0xa807, 0x0000, 0x904d, 0x190c, 0x0fb1, 0x009e,
 	0x0018, 0xa868, 0xd0fc, 0x1500, 0x00e6, 0x0026, 0xa84f, 0x0000,
 	0x00f6, 0x2079, 0x0050, 0x2071, 0x1910, 0xa803, 0x0000, 0x7010,
-	0x9005, 0x1904, 0x6d9a, 0x782c, 0x908c, 0x0780, 0x190c, 0x6fda,
-	0x8004, 0x8004, 0x8004, 0x9084, 0x0003, 0x0002, 0x6c9d, 0x6d9a,
-	0x6cb8, 0x6d29, 0x080c, 0x0dd5, 0x0005, 0x2071, 0x1800, 0x2900,
+	0x9005, 0x1904, 0x6da2, 0x782c, 0x908c, 0x0780, 0x190c, 0x6fe2,
+	0x8004, 0x8004, 0x8004, 0x9084, 0x0003, 0x0002, 0x6ca5, 0x6da2,
+	0x6cc0, 0x6d31, 0x080c, 0x0dd5, 0x0005, 0x2071, 0x1800, 0x2900,
 	0x7822, 0xa804, 0x900d, 0x1120, 0x00fe, 0x002e, 0x00ee, 0x0005,
 	0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff,
-	0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x83eb, 0x0c60,
-	0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1904, 0x6d18,
+	0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8414, 0x0c60,
+	0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1904, 0x6d20,
 	0x7830, 0x8007, 0x9084, 0x001f, 0x9082, 0x0005, 0x1220, 0x00fe,
 	0x002e, 0x00ee, 0x0005, 0x7824, 0x00e6, 0x2071, 0x0040, 0x712c,
 	0xd19c, 0x1148, 0x2009, 0x1830, 0x210c, 0x918a, 0x0020, 0x0218,
 	0x7022, 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c, 0xa802, 0x2900,
-	0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x83eb, 0x782c, 0x9094,
-	0x0780, 0x190c, 0x6fda, 0xd0a4, 0x19f0, 0x0e04, 0x6d0f, 0x7838,
+	0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x8414, 0x782c, 0x9094,
+	0x0780, 0x190c, 0x6fe2, 0xd0a4, 0x19f0, 0x0e04, 0x6d17, 0x7838,
 	0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833,
 	0x0013, 0x00de, 0x2001, 0x1921, 0x200c, 0xc184, 0x2102, 0x2091,
 	0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119b, 0x2009,
 	0x1947, 0x200b, 0x0000, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2001,
 	0x1921, 0x200c, 0xc185, 0x2102, 0x00fe, 0x002e, 0x00ee, 0x0005,
 	0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff,
-	0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x83eb, 0x0804,
-	0x6ccb, 0x0096, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c,
-	0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x83eb,
-	0x782c, 0x9094, 0x0780, 0x190c, 0x6fda, 0xd0a4, 0x1d60, 0x00ee,
-	0x0e04, 0x6d6d, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069,
+	0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8414, 0x0804,
+	0x6cd3, 0x0096, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c,
+	0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x8414,
+	0x782c, 0x9094, 0x0780, 0x190c, 0x6fe2, 0xd0a4, 0x1d60, 0x00ee,
+	0x0e04, 0x6d75, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069,
 	0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x7044, 0xc084, 0x7046,
 	0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119b,
 	0x2009, 0x1947, 0x200b, 0x0000, 0x782c, 0x9094, 0x0780, 0x190c,
-	0x6fda, 0xd09c, 0x1170, 0x009e, 0x2900, 0x7822, 0xa804, 0x900d,
+	0x6fe2, 0xd09c, 0x1170, 0x009e, 0x2900, 0x7822, 0xa804, 0x900d,
 	0x11e0, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7044, 0xc085, 0x7046,
 	0x0c58, 0x009e, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d,
 	0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d,
 	0x1120, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016,
 	0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8,
-	0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x83eb, 0x00fe, 0x002e,
+	0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8414, 0x00fe, 0x002e,
 	0x00ee, 0x0005, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d,
 	0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d,
-	0x1904, 0x6e0b, 0x782c, 0x9094, 0x0780, 0x190c, 0x6fda, 0xd09c,
+	0x1904, 0x6e13, 0x782c, 0x9094, 0x0780, 0x190c, 0x6fe2, 0xd09c,
 	0x11b0, 0x701c, 0x904d, 0x0198, 0xa84c, 0x9005, 0x1180, 0x7010,
 	0x8001, 0x7012, 0x1108, 0x701a, 0xa800, 0x701e, 0x2900, 0x7822,
-	0x782c, 0x9094, 0x0780, 0x190c, 0x6fda, 0xd09c, 0x0d50, 0x782c,
-	0x9094, 0x0780, 0x190c, 0x6fda, 0xd0a4, 0x05c8, 0x00e6, 0x7824,
+	0x782c, 0x9094, 0x0780, 0x190c, 0x6fe2, 0xd09c, 0x0d50, 0x782c,
+	0x9094, 0x0780, 0x190c, 0x6fe2, 0xd0a4, 0x05c8, 0x00e6, 0x7824,
 	0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70c0,
-	0x8000, 0x70c2, 0x080c, 0x83eb, 0x782c, 0x9094, 0x0780, 0x190c,
-	0x6fda, 0xd0a4, 0x1d60, 0x00ee, 0x0e04, 0x6e04, 0x7838, 0x7938,
+	0x8000, 0x70c2, 0x080c, 0x8414, 0x782c, 0x9094, 0x0780, 0x190c,
+	0x6fe2, 0xd0a4, 0x1d60, 0x00ee, 0x0e04, 0x6e0c, 0x7838, 0x7938,
 	0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013,
 	0x00de, 0x7044, 0xc084, 0x7046, 0x2091, 0x4080, 0x2001, 0x0089,
 	0x2004, 0xd084, 0x190c, 0x119b, 0x2009, 0x1947, 0x200b, 0x0000,
 	0x00fe, 0x002e, 0x00ee, 0x0005, 0x7044, 0xc085, 0x7046, 0x00fe,
 	0x002e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1800, 0x9016, 0x702c,
 	0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e,
-	0x70c0, 0x9200, 0x70c2, 0x080c, 0x83eb, 0x00ee, 0x0804, 0x6daa,
+	0x70c0, 0x9200, 0x70c2, 0x080c, 0x8414, 0x00ee, 0x0804, 0x6db2,
 	0x2071, 0x1910, 0xa803, 0x0000, 0x2908, 0x7010, 0x8000, 0x7012,
 	0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148,
-	0xa804, 0x900d, 0x1128, 0x1e04, 0x6e4b, 0x002e, 0x00ee, 0x0005,
+	0xa804, 0x900d, 0x1128, 0x1e04, 0x6e53, 0x002e, 0x00ee, 0x0005,
 	0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210,
 	0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c,
-	0x83eb, 0x0e04, 0x6e35, 0x2071, 0x1910, 0x701c, 0x2048, 0xa84c,
+	0x8414, 0x0e04, 0x6e3d, 0x2071, 0x1910, 0x701c, 0x2048, 0xa84c,
 	0x900d, 0x0d18, 0x2071, 0x0000, 0x7182, 0xa850, 0x7032, 0xa86c,
 	0x7086, 0x7036, 0xa870, 0x708a, 0xa850, 0x9082, 0x0019, 0x1278,
 	0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119b,
-	0x2071, 0x1910, 0x080c, 0x6fc6, 0x002e, 0x00ee, 0x0005, 0xa850,
+	0x2071, 0x1910, 0x080c, 0x6fce, 0x002e, 0x00ee, 0x0005, 0xa850,
 	0x9082, 0x001c, 0x1e68, 0xa880, 0x708e, 0x7036, 0x0146, 0x01d6,
 	0x0136, 0x01c6, 0x0156, 0x20e9, 0x0000, 0x20a1, 0x002a, 0xa868,
 	0x20a8, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0021, 0x2098, 0x4003,
@@ -3336,23 +3337,23 @@
 	0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d,
 	0x1118, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016, 0x702c,
 	0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e,
-	0x70c0, 0x9200, 0x70c2, 0x080c, 0x83eb, 0x002e, 0x00ee, 0x0005,
+	0x70c0, 0x9200, 0x70c2, 0x080c, 0x8414, 0x002e, 0x00ee, 0x0005,
 	0x0006, 0xa87c, 0x0006, 0xa867, 0x0103, 0x20a9, 0x001c, 0xa860,
 	0x20e8, 0xa85c, 0x9080, 0x001d, 0x20a0, 0x9006, 0x4004, 0x000e,
 	0x9084, 0x00ff, 0xa87e, 0x000e, 0xa87a, 0xa982, 0x0005, 0x2071,
-	0x1910, 0x7004, 0x0002, 0x6ed9, 0x6eda, 0x6fc5, 0x6eda, 0x0dd5,
-	0x6fc5, 0x0005, 0x2001, 0x1948, 0x2004, 0x0002, 0x6ee4, 0x6ee4,
-	0x6f5e, 0x6f5f, 0x6ee4, 0x6f5f, 0x0126, 0x2091, 0x8000, 0x1e0c,
-	0x6fe5, 0x701c, 0x904d, 0x0508, 0xa84c, 0x9005, 0x0904, 0x6f2f,
-	0x0e04, 0x6f0d, 0xa94c, 0x2071, 0x0000, 0x7182, 0xa850, 0x7032,
+	0x1910, 0x7004, 0x0002, 0x6ee1, 0x6ee2, 0x6fcd, 0x6ee2, 0x0dd5,
+	0x6fcd, 0x0005, 0x2001, 0x1948, 0x2004, 0x0002, 0x6eec, 0x6eec,
+	0x6f66, 0x6f67, 0x6eec, 0x6f67, 0x0126, 0x2091, 0x8000, 0x1e0c,
+	0x6fed, 0x701c, 0x904d, 0x0508, 0xa84c, 0x9005, 0x0904, 0x6f37,
+	0x0e04, 0x6f15, 0xa94c, 0x2071, 0x0000, 0x7182, 0xa850, 0x7032,
 	0xa86c, 0x7086, 0x7036, 0xa870, 0x708a, 0xa850, 0x9082, 0x0019,
 	0x1278, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
-	0x119b, 0x2071, 0x1910, 0x080c, 0x6fc6, 0x012e, 0x0804, 0x6f5d,
+	0x119b, 0x2071, 0x1910, 0x080c, 0x6fce, 0x012e, 0x0804, 0x6f65,
 	0xa850, 0x9082, 0x001c, 0x1e68, 0xa880, 0x708e, 0x7036, 0x0146,
 	0x01d6, 0x0136, 0x01c6, 0x0156, 0x20e9, 0x0000, 0x20a1, 0x002a,
 	0xa868, 0x20a8, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0021, 0x2098,
 	0x4003, 0x015e, 0x01ce, 0x013e, 0x01de, 0x014e, 0x0890, 0x2001,
-	0x005b, 0x2004, 0x9094, 0x0780, 0x190c, 0x6fda, 0xd09c, 0x2071,
+	0x005b, 0x2004, 0x9094, 0x0780, 0x190c, 0x6fe2, 0xd09c, 0x2071,
 	0x1910, 0x1510, 0x2071, 0x1910, 0x700f, 0x0001, 0xa964, 0x9184,
 	0x00ff, 0x9086, 0x0003, 0x1130, 0x810f, 0x918c, 0x00ff, 0x8101,
 	0x0108, 0x710e, 0x2900, 0x00d6, 0x2069, 0x0050, 0x6822, 0x00de,
@@ -3361,10 +3362,10 @@
 	0x2008, 0x2069, 0x19fa, 0x683c, 0x9005, 0x0760, 0x0158, 0x9186,
 	0x0003, 0x0540, 0x2001, 0x1815, 0x2004, 0x2009, 0x1ac8, 0x210c,
 	0x9102, 0x1500, 0x0126, 0x2091, 0x8000, 0x2069, 0x0050, 0x693c,
-	0x6838, 0x9106, 0x0190, 0x0e04, 0x6f91, 0x2069, 0x0000, 0x6837,
+	0x6838, 0x9106, 0x0190, 0x0e04, 0x6f99, 0x2069, 0x0000, 0x6837,
 	0x8040, 0x6833, 0x0012, 0x6883, 0x8040, 0x2091, 0x4080, 0x2001,
 	0x0089, 0x2004, 0xd084, 0x190c, 0x119b, 0x2069, 0x19fa, 0x683f,
-	0xffff, 0x012e, 0x00de, 0x0126, 0x2091, 0x8000, 0x1e0c, 0x7056,
+	0xffff, 0x012e, 0x00de, 0x0126, 0x2091, 0x8000, 0x1e0c, 0x705e,
 	0x701c, 0x904d, 0x0540, 0x2001, 0x005b, 0x2004, 0x9094, 0x0780,
 	0x15c9, 0xd09c, 0x1500, 0x2071, 0x1910, 0x700f, 0x0001, 0xa964,
 	0x9184, 0x00ff, 0x9086, 0x0003, 0x1130, 0x810f, 0x918c, 0x00ff,
@@ -3373,7 +3374,7 @@
 	0x9005, 0x1108, 0x701a, 0x012e, 0x0005, 0x0005, 0x0126, 0x2091,
 	0x8000, 0x701c, 0x904d, 0x0160, 0x7010, 0x8001, 0x7012, 0xa800,
 	0x701e, 0x9005, 0x1108, 0x701a, 0x012e, 0x080c, 0x1031, 0x0005,
-	0x012e, 0x0005, 0x2091, 0x8000, 0x0e04, 0x6fdc, 0x0006, 0x0016,
+	0x012e, 0x0005, 0x2091, 0x8000, 0x0e04, 0x6fe4, 0x0006, 0x0016,
 	0x2001, 0x8004, 0x0006, 0x0804, 0x0dde, 0x0096, 0x00f6, 0x2079,
 	0x0050, 0x7044, 0xd084, 0x01e0, 0xc084, 0x7046, 0x7838, 0x7938,
 	0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013,
@@ -3384,4153 +3385,4156 @@
 	0x1800, 0x7824, 0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c, 0x1148,
 	0x2009, 0x1830, 0x210c, 0x918a, 0x0020, 0x0218, 0x7022, 0x00ee,
 	0x0058, 0x00ee, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, 0x70c0,
-	0x8000, 0x70c2, 0x080c, 0x83eb, 0x782c, 0x9094, 0x0780, 0x190c,
-	0x6fda, 0xd0a4, 0x19f0, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6,
+	0x8000, 0x70c2, 0x080c, 0x8414, 0x782c, 0x9094, 0x0780, 0x190c,
+	0x6fe2, 0xd0a4, 0x19f0, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6,
 	0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x2091, 0x4080,
 	0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119b, 0x2009, 0x1947,
 	0x200b, 0x0000, 0x00ee, 0x00fe, 0x009e, 0x0005, 0x00f6, 0x2079,
 	0x0050, 0x7044, 0xd084, 0x01b8, 0xc084, 0x7046, 0x7838, 0x7938,
 	0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013,
 	0x00de, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
-	0x119b, 0x00fe, 0x0005, 0x782c, 0x9094, 0x0780, 0x190c, 0x6fda,
+	0x119b, 0x00fe, 0x0005, 0x782c, 0x9094, 0x0780, 0x190c, 0x6fe2,
 	0xd0a4, 0x0db8, 0x00e6, 0x2071, 0x1800, 0x7824, 0x2048, 0x702c,
-	0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x83eb,
-	0x782c, 0x9094, 0x0780, 0x190c, 0x6fda, 0xd0a4, 0x1d70, 0x00d6,
+	0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x8414,
+	0x782c, 0x9094, 0x0780, 0x190c, 0x6fe2, 0xd0a4, 0x1d70, 0x00d6,
 	0x2069, 0x0050, 0x693c, 0x2069, 0x1948, 0x6808, 0x690a, 0x2069,
 	0x19fa, 0x9102, 0x1118, 0x683c, 0x9005, 0x1328, 0x2001, 0x1949,
 	0x200c, 0x810d, 0x693e, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x7098,
 	0x908a, 0x0029, 0x1a0c, 0x0dd5, 0x9082, 0x001d, 0x001b, 0x6027,
-	0x1e00, 0x0005, 0x717a, 0x7104, 0x7120, 0x7148, 0x7169, 0x71a9,
-	0x71bb, 0x7120, 0x7191, 0x70bf, 0x70ed, 0x70be, 0x0005, 0x00d6,
+	0x1e00, 0x0005, 0x7186, 0x710c, 0x7128, 0x7152, 0x7175, 0x71b5,
+	0x71c7, 0x7128, 0x719d, 0x70c7, 0x70f5, 0x70c6, 0x0005, 0x00d6,
 	0x2069, 0x0200, 0x6804, 0x9005, 0x1180, 0x6808, 0x9005, 0x1518,
-	0x709b, 0x0028, 0x2069, 0x198f, 0x2d04, 0x7002, 0x080c, 0x74ea,
+	0x709b, 0x0028, 0x2069, 0x198f, 0x2d04, 0x7002, 0x080c, 0x74f6,
 	0x6028, 0x9085, 0x0600, 0x602a, 0x00b0, 0x709b, 0x0028, 0x2069,
 	0x198f, 0x2d04, 0x7002, 0x6028, 0x9085, 0x0600, 0x602a, 0x00e6,
 	0x0036, 0x0046, 0x0056, 0x2071, 0x1a62, 0x080c, 0x1aa9, 0x005e,
 	0x004e, 0x003e, 0x00ee, 0x00de, 0x0005, 0x00d6, 0x2069, 0x0200,
 	0x6804, 0x9005, 0x1178, 0x6808, 0x9005, 0x1160, 0x709b, 0x0028,
-	0x2069, 0x198f, 0x2d04, 0x7002, 0x080c, 0x7585, 0x6028, 0x9085,
+	0x2069, 0x198f, 0x2d04, 0x7002, 0x080c, 0x7591, 0x6028, 0x9085,
 	0x0600, 0x602a, 0x00de, 0x0005, 0x0006, 0x2001, 0x0090, 0x080c,
-	0x2cef, 0x000e, 0x6124, 0xd1e4, 0x1190, 0x080c, 0x7228, 0xd1d4,
+	0x2cef, 0x000e, 0x6124, 0xd1e4, 0x1190, 0x080c, 0x7234, 0xd1d4,
 	0x1160, 0xd1dc, 0x1138, 0xd1cc, 0x0150, 0x709b, 0x0020, 0x080c,
-	0x7228, 0x0028, 0x709b, 0x001d, 0x0010, 0x709b, 0x001f, 0x0005,
-	0x2001, 0x0088, 0x080c, 0x2cef, 0x6124, 0xd1cc, 0x11d8, 0xd1dc,
-	0x11b0, 0xd1e4, 0x1188, 0x9184, 0x1e00, 0x11c8, 0x60e3, 0x0001,
-	0x600c, 0xc0b4, 0x600e, 0x080c, 0x73dc, 0x2001, 0x0080, 0x080c,
-	0x2cef, 0x709b, 0x0028, 0x0058, 0x709b, 0x001e, 0x0040, 0x709b,
-	0x001d, 0x0028, 0x709b, 0x0020, 0x0010, 0x709b, 0x001f, 0x0005,
-	0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c, 0x73dc, 0x2001,
-	0x0080, 0x080c, 0x2cef, 0x6124, 0xd1d4, 0x1180, 0xd1dc, 0x1158,
-	0xd1e4, 0x1130, 0x9184, 0x1e00, 0x1158, 0x709b, 0x0028, 0x0040,
-	0x709b, 0x001e, 0x0028, 0x709b, 0x001d, 0x0010, 0x709b, 0x001f,
-	0x0005, 0x2001, 0x00a0, 0x080c, 0x2cef, 0x6124, 0xd1dc, 0x1138,
-	0xd1e4, 0x0138, 0x080c, 0x1ad3, 0x709b, 0x001e, 0x0010, 0x709b,
-	0x001d, 0x0005, 0x080c, 0x72ab, 0x6124, 0xd1dc, 0x1188, 0x080c,
-	0x7228, 0x0016, 0x080c, 0x1ad3, 0x001e, 0xd1d4, 0x1128, 0xd1e4,
-	0x0138, 0x709b, 0x001e, 0x0020, 0x709b, 0x001f, 0x080c, 0x7228,
-	0x0005, 0x0006, 0x2001, 0x00a0, 0x080c, 0x2cef, 0x000e, 0x6124,
-	0xd1d4, 0x1160, 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140,
-	0x709b, 0x001e, 0x0028, 0x709b, 0x001d, 0x0010, 0x709b, 0x0021,
-	0x0005, 0x080c, 0x72ab, 0x6124, 0xd1d4, 0x1150, 0xd1dc, 0x1128,
-	0xd1e4, 0x0140, 0x709b, 0x001e, 0x0028, 0x709b, 0x001d, 0x0010,
-	0x709b, 0x001f, 0x0005, 0x0006, 0x2001, 0x0090, 0x080c, 0x2cef,
-	0x000e, 0x6124, 0xd1d4, 0x1178, 0xd1cc, 0x1150, 0xd1dc, 0x1128,
-	0xd1e4, 0x0158, 0x709b, 0x001e, 0x0040, 0x709b, 0x001d, 0x0028,
-	0x709b, 0x0020, 0x0010, 0x709b, 0x001f, 0x0005, 0x0016, 0x00c6,
-	0x00d6, 0x00e6, 0x0126, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071,
-	0x1800, 0x2091, 0x8000, 0x080c, 0x73b0, 0x11d8, 0x2001, 0x180c,
-	0x200c, 0xd1b4, 0x01b0, 0xc1b4, 0x2102, 0x6027, 0x0200, 0x080c,
-	0x2c38, 0x6024, 0xd0cc, 0x0148, 0x2001, 0x00a0, 0x080c, 0x2cef,
-	0x080c, 0x7698, 0x080c, 0x601b, 0x0428, 0x6028, 0xc0cd, 0x602a,
-	0x0408, 0x080c, 0x73ca, 0x0150, 0x080c, 0x73c1, 0x1138, 0x2001,
-	0x0001, 0x080c, 0x27ea, 0x080c, 0x7388, 0x00a0, 0x080c, 0x72a8,
-	0x0178, 0x2001, 0x0001, 0x080c, 0x27ea, 0x7098, 0x9086, 0x001e,
-	0x0120, 0x7098, 0x9086, 0x0022, 0x1118, 0x709b, 0x0025, 0x0010,
-	0x709b, 0x0021, 0x012e, 0x00ee, 0x00de, 0x00ce, 0x001e, 0x0005,
-	0x0026, 0x2011, 0x7239, 0x080c, 0x85a4, 0x002e, 0x0016, 0x0026,
-	0x2009, 0x0064, 0x2011, 0x7239, 0x080c, 0x859b, 0x002e, 0x001e,
-	0x0005, 0x00e6, 0x00f6, 0x0016, 0x080c, 0xa259, 0x2071, 0x1800,
-	0x080c, 0x71d6, 0x001e, 0x00fe, 0x00ee, 0x0005, 0x0016, 0x0026,
-	0x0036, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0126, 0x080c, 0xa259,
-	0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x2091, 0x8000,
-	0x6028, 0xc09c, 0x602a, 0x2011, 0x0003, 0x080c, 0xa639, 0x2011,
-	0x0002, 0x080c, 0xa643, 0x080c, 0xa526, 0x080c, 0x8550, 0x0036,
-	0x901e, 0x080c, 0xa59c, 0x003e, 0x60e3, 0x0000, 0x080c, 0xe9c8,
-	0x080c, 0xe9e3, 0x2009, 0x0004, 0x080c, 0x2c3e, 0x080c, 0x2b59,
-	0x2001, 0x1800, 0x2003, 0x0004, 0x6027, 0x0008, 0x2011, 0x7239,
-	0x080c, 0x85a4, 0x080c, 0x73ca, 0x0118, 0x9006, 0x080c, 0x2cef,
-	0x080c, 0x0bae, 0x2001, 0x0001, 0x080c, 0x27ea, 0x012e, 0x00fe,
-	0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x0005, 0x0026,
-	0x00e6, 0x2011, 0x7246, 0x2071, 0x19fa, 0x701c, 0x9206, 0x1118,
-	0x7018, 0x9005, 0x0110, 0x9085, 0x0001, 0x00ee, 0x002e, 0x0005,
-	0x6020, 0xd09c, 0x0005, 0x6800, 0x9084, 0xfffe, 0x9086, 0x00c0,
-	0x0170, 0x2001, 0x00c0, 0x080c, 0x2cef, 0x0156, 0x20a9, 0x002d,
-	0x1d04, 0x72b8, 0x2091, 0x6000, 0x1f04, 0x72b8, 0x015e, 0x0005,
-	0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071,
-	0x1800, 0x080c, 0x76a7, 0x2001, 0x196d, 0x2003, 0x0000, 0x9006,
+	0x7234, 0x0028, 0x709b, 0x001d, 0x0010, 0x709b, 0x001f, 0x0005,
+	0x2001, 0x0088, 0x080c, 0x2cef, 0x6124, 0xd1cc, 0x11e8, 0xd1dc,
+	0x11c0, 0xd1e4, 0x1198, 0x9184, 0x1e00, 0x11d8, 0x080c, 0x1ad3,
+	0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c, 0x73e8, 0x2001,
+	0x0080, 0x080c, 0x2cef, 0x709b, 0x0028, 0x0058, 0x709b, 0x001e,
+	0x0040, 0x709b, 0x001d, 0x0028, 0x709b, 0x0020, 0x0010, 0x709b,
+	0x001f, 0x0005, 0x080c, 0x1ad3, 0x60e3, 0x0001, 0x600c, 0xc0b4,
+	0x600e, 0x080c, 0x73e8, 0x2001, 0x0080, 0x080c, 0x2cef, 0x6124,
+	0xd1d4, 0x1180, 0xd1dc, 0x1158, 0xd1e4, 0x1130, 0x9184, 0x1e00,
+	0x1158, 0x709b, 0x0028, 0x0040, 0x709b, 0x001e, 0x0028, 0x709b,
+	0x001d, 0x0010, 0x709b, 0x001f, 0x0005, 0x2001, 0x00a0, 0x080c,
+	0x2cef, 0x6124, 0xd1dc, 0x1138, 0xd1e4, 0x0138, 0x080c, 0x1ad3,
+	0x709b, 0x001e, 0x0010, 0x709b, 0x001d, 0x0005, 0x080c, 0x72b7,
+	0x6124, 0xd1dc, 0x1188, 0x080c, 0x7234, 0x0016, 0x080c, 0x1ad3,
+	0x001e, 0xd1d4, 0x1128, 0xd1e4, 0x0138, 0x709b, 0x001e, 0x0020,
+	0x709b, 0x001f, 0x080c, 0x7234, 0x0005, 0x0006, 0x2001, 0x00a0,
+	0x080c, 0x2cef, 0x000e, 0x6124, 0xd1d4, 0x1160, 0xd1cc, 0x1150,
+	0xd1dc, 0x1128, 0xd1e4, 0x0140, 0x709b, 0x001e, 0x0028, 0x709b,
+	0x001d, 0x0010, 0x709b, 0x0021, 0x0005, 0x080c, 0x72b7, 0x6124,
+	0xd1d4, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140, 0x709b, 0x001e,
+	0x0028, 0x709b, 0x001d, 0x0010, 0x709b, 0x001f, 0x0005, 0x0006,
+	0x2001, 0x0090, 0x080c, 0x2cef, 0x000e, 0x6124, 0xd1d4, 0x1178,
+	0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0158, 0x709b, 0x001e,
+	0x0040, 0x709b, 0x001d, 0x0028, 0x709b, 0x0020, 0x0010, 0x709b,
+	0x001f, 0x0005, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x0126, 0x2061,
+	0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x2091, 0x8000, 0x080c,
+	0x73bc, 0x11d8, 0x2001, 0x180c, 0x200c, 0xd1b4, 0x01b0, 0xc1b4,
+	0x2102, 0x6027, 0x0200, 0x080c, 0x2c38, 0x6024, 0xd0cc, 0x0148,
+	0x2001, 0x00a0, 0x080c, 0x2cef, 0x080c, 0x76a4, 0x080c, 0x601a,
+	0x0428, 0x6028, 0xc0cd, 0x602a, 0x0408, 0x080c, 0x73d6, 0x0150,
+	0x080c, 0x73cd, 0x1138, 0x2001, 0x0001, 0x080c, 0x27ea, 0x080c,
+	0x7394, 0x00a0, 0x080c, 0x72b4, 0x0178, 0x2001, 0x0001, 0x080c,
+	0x27ea, 0x7098, 0x9086, 0x001e, 0x0120, 0x7098, 0x9086, 0x0022,
+	0x1118, 0x709b, 0x0025, 0x0010, 0x709b, 0x0021, 0x012e, 0x00ee,
+	0x00de, 0x00ce, 0x001e, 0x0005, 0x0026, 0x2011, 0x7245, 0x080c,
+	0x85cd, 0x002e, 0x0016, 0x0026, 0x2009, 0x0064, 0x2011, 0x7245,
+	0x080c, 0x85c4, 0x002e, 0x001e, 0x0005, 0x00e6, 0x00f6, 0x0016,
+	0x080c, 0xa273, 0x2071, 0x1800, 0x080c, 0x71e2, 0x001e, 0x00fe,
+	0x00ee, 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6,
+	0x00f6, 0x0126, 0x080c, 0xa273, 0x2061, 0x0100, 0x2069, 0x0140,
+	0x2071, 0x1800, 0x2091, 0x8000, 0x6028, 0xc09c, 0x602a, 0x2011,
+	0x0003, 0x080c, 0xa653, 0x2011, 0x0002, 0x080c, 0xa65d, 0x080c,
+	0xa540, 0x080c, 0x8579, 0x0036, 0x901e, 0x080c, 0xa5b6, 0x003e,
+	0x60e3, 0x0000, 0x080c, 0xe9e9, 0x080c, 0xea04, 0x2009, 0x0004,
+	0x080c, 0x2c3e, 0x080c, 0x2b59, 0x2001, 0x1800, 0x2003, 0x0004,
+	0x6027, 0x0008, 0x2011, 0x7245, 0x080c, 0x85cd, 0x080c, 0x73d6,
+	0x0118, 0x9006, 0x080c, 0x2cef, 0x080c, 0x0bae, 0x2001, 0x0001,
+	0x080c, 0x27ea, 0x012e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x003e,
+	0x002e, 0x001e, 0x0005, 0x0026, 0x00e6, 0x2011, 0x7252, 0x2071,
+	0x19fa, 0x701c, 0x9206, 0x1118, 0x7018, 0x9005, 0x0110, 0x9085,
+	0x0001, 0x00ee, 0x002e, 0x0005, 0x6020, 0xd09c, 0x0005, 0x6800,
+	0x9084, 0xfffe, 0x9086, 0x00c0, 0x0170, 0x2001, 0x00c0, 0x080c,
+	0x2cef, 0x0156, 0x20a9, 0x002d, 0x1d04, 0x72c4, 0x2091, 0x6000,
+	0x1f04, 0x72c4, 0x015e, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061,
+	0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x080c, 0x76b3, 0x2001,
+	0x196d, 0x2003, 0x0000, 0x9006, 0x709a, 0x60e2, 0x6886, 0x080c,
+	0x28b2, 0x9006, 0x080c, 0x2cef, 0x080c, 0x5ed9, 0x6027, 0xffff,
+	0x602b, 0x182f, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6,
+	0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x2001,
+	0x197d, 0x200c, 0x9186, 0x0000, 0x0158, 0x9186, 0x0001, 0x0158,
+	0x9186, 0x0002, 0x0158, 0x9186, 0x0003, 0x0158, 0x0804, 0x7384,
+	0x709b, 0x0022, 0x0040, 0x709b, 0x0021, 0x0028, 0x709b, 0x0023,
+	0x0010, 0x709b, 0x0024, 0x60e3, 0x0000, 0x6887, 0x0001, 0x2001,
+	0x0001, 0x080c, 0x28b2, 0x0026, 0x080c, 0xadd2, 0x002e, 0x7000,
+	0x908e, 0x0004, 0x0118, 0x602b, 0x0028, 0x0010, 0x602b, 0x0020,
+	0x0156, 0x0126, 0x2091, 0x8000, 0x20a9, 0x0005, 0x6024, 0xd0ac,
+	0x0150, 0x012e, 0x015e, 0x080c, 0xd230, 0x0118, 0x9006, 0x080c,
+	0x2d19, 0x0804, 0x7390, 0x6800, 0x9084, 0x00a1, 0xc0bd, 0x6802,
+	0x080c, 0x2c38, 0x6904, 0xd1d4, 0x1140, 0x2001, 0x0100, 0x080c,
+	0x2cef, 0x1f04, 0x732e, 0x080c, 0x7413, 0x012e, 0x015e, 0x080c,
+	0x73cd, 0x01a8, 0x6044, 0x9005, 0x0168, 0x6050, 0x0006, 0x9085,
+	0x0020, 0x6052, 0x080c, 0x7413, 0x9006, 0x8001, 0x1df0, 0x000e,
+	0x6052, 0x0028, 0x6804, 0xd0d4, 0x1110, 0x080c, 0x7413, 0x080c,
+	0xd230, 0x0118, 0x9006, 0x080c, 0x2d19, 0x0016, 0x0026, 0x7000,
+	0x908e, 0x0004, 0x0130, 0x2009, 0x00c8, 0x2011, 0x7252, 0x080c,
+	0x858b, 0x002e, 0x001e, 0x080c, 0x840b, 0x7034, 0xc085, 0x7036,
+	0x2001, 0x197d, 0x2003, 0x0004, 0x080c, 0x70af, 0x080c, 0x73cd,
+	0x0138, 0x6804, 0xd0d4, 0x1120, 0xd0dc, 0x1100, 0x080c, 0x76a9,
+	0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061,
+	0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x080c, 0x8422, 0x080c,
+	0x8414, 0x080c, 0x76b3, 0x2001, 0x196d, 0x2003, 0x0000, 0x9006,
 	0x709a, 0x60e2, 0x6886, 0x080c, 0x28b2, 0x9006, 0x080c, 0x2cef,
-	0x080c, 0x5eda, 0x6027, 0xffff, 0x602b, 0x182f, 0x00ee, 0x00de,
-	0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069,
-	0x0140, 0x2071, 0x1800, 0x2001, 0x197d, 0x200c, 0x9186, 0x0000,
-	0x0158, 0x9186, 0x0001, 0x0158, 0x9186, 0x0002, 0x0158, 0x9186,
-	0x0003, 0x0158, 0x0804, 0x7378, 0x709b, 0x0022, 0x0040, 0x709b,
-	0x0021, 0x0028, 0x709b, 0x0023, 0x0010, 0x709b, 0x0024, 0x60e3,
-	0x0000, 0x6887, 0x0001, 0x2001, 0x0001, 0x080c, 0x28b2, 0x0026,
-	0x080c, 0xadb8, 0x002e, 0x7000, 0x908e, 0x0004, 0x0118, 0x602b,
-	0x0028, 0x0010, 0x602b, 0x0020, 0x0156, 0x0126, 0x2091, 0x8000,
-	0x20a9, 0x0005, 0x6024, 0xd0ac, 0x0150, 0x012e, 0x015e, 0x080c,
-	0xd216, 0x0118, 0x9006, 0x080c, 0x2d19, 0x0804, 0x7384, 0x6800,
-	0x9084, 0x00a1, 0xc0bd, 0x6802, 0x080c, 0x2c38, 0x6904, 0xd1d4,
-	0x1140, 0x2001, 0x0100, 0x080c, 0x2cef, 0x1f04, 0x7322, 0x080c,
-	0x7407, 0x012e, 0x015e, 0x080c, 0x73c1, 0x01a8, 0x6044, 0x9005,
-	0x0168, 0x6050, 0x0006, 0x9085, 0x0020, 0x6052, 0x080c, 0x7407,
-	0x9006, 0x8001, 0x1df0, 0x000e, 0x6052, 0x0028, 0x6804, 0xd0d4,
-	0x1110, 0x080c, 0x7407, 0x080c, 0xd216, 0x0118, 0x9006, 0x080c,
-	0x2d19, 0x0016, 0x0026, 0x7000, 0x908e, 0x0004, 0x0130, 0x2009,
-	0x00c8, 0x2011, 0x7246, 0x080c, 0x8562, 0x002e, 0x001e, 0x080c,
-	0x83e2, 0x7034, 0xc085, 0x7036, 0x2001, 0x197d, 0x2003, 0x0004,
-	0x080c, 0x70a7, 0x080c, 0x73c1, 0x0138, 0x6804, 0xd0d4, 0x1120,
-	0xd0dc, 0x1100, 0x080c, 0x769d, 0x00ee, 0x00de, 0x00ce, 0x0005,
+	0x6043, 0x0090, 0x6043, 0x0010, 0x6027, 0xffff, 0x602b, 0x182f,
+	0x00ee, 0x00de, 0x00ce, 0x0005, 0x0006, 0x2001, 0x197c, 0x2004,
+	0x9086, 0xaaaa, 0x000e, 0x0005, 0x0006, 0x080c, 0x56d3, 0x9084,
+	0x0030, 0x9086, 0x0000, 0x000e, 0x0005, 0x0006, 0x080c, 0x56d3,
+	0x9084, 0x0030, 0x9086, 0x0030, 0x000e, 0x0005, 0x0006, 0x080c,
+	0x56d3, 0x9084, 0x0030, 0x9086, 0x0010, 0x000e, 0x0005, 0x0006,
+	0x080c, 0x56d3, 0x9084, 0x0030, 0x9086, 0x0020, 0x000e, 0x0005,
+	0x0036, 0x0016, 0x2001, 0x180c, 0x2004, 0x908c, 0x0013, 0x0180,
+	0x0020, 0x080c, 0x28d2, 0x900e, 0x0028, 0x080c, 0x696a, 0x1dc8,
+	0x2009, 0x0002, 0x2019, 0x0028, 0x080c, 0x318a, 0x9006, 0x0019,
+	0x001e, 0x003e, 0x0005, 0x00e6, 0x2071, 0x180c, 0x2e04, 0x0130,
+	0x080c, 0xd229, 0x1128, 0x9085, 0x0010, 0x0010, 0x9084, 0xffef,
+	0x2072, 0x00ee, 0x0005, 0x6050, 0x0006, 0x60ec, 0x0006, 0x600c,
+	0x0006, 0x6004, 0x0006, 0x6028, 0x0006, 0x0016, 0x6138, 0x6050,
+	0x9084, 0xfbff, 0x9085, 0x2000, 0x6052, 0x613a, 0x20a9, 0x0012,
+	0x1d04, 0x7428, 0x2091, 0x6000, 0x1f04, 0x7428, 0x602f, 0x0100,
+	0x602f, 0x0000, 0x6050, 0x9085, 0x0400, 0x9084, 0xdfff, 0x6052,
+	0x613a, 0x001e, 0x602f, 0x0040, 0x602f, 0x0000, 0x000e, 0x602a,
+	0x000e, 0x6006, 0x000e, 0x600e, 0x000e, 0x60ee, 0x60e3, 0x0000,
+	0x6887, 0x0001, 0x2001, 0x0001, 0x080c, 0x28b2, 0x2001, 0x00a0,
+	0x0006, 0x080c, 0xd230, 0x000e, 0x0130, 0x080c, 0x2d0d, 0x9006,
+	0x080c, 0x2d19, 0x0010, 0x080c, 0x2cef, 0x000e, 0x6052, 0x6050,
+	0x0006, 0xc0e5, 0x6052, 0x00f6, 0x2079, 0x0100, 0x080c, 0x2bad,
+	0x00fe, 0x000e, 0x6052, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036,
 	0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071,
-	0x1800, 0x080c, 0x83f9, 0x080c, 0x83eb, 0x080c, 0x76a7, 0x2001,
-	0x196d, 0x2003, 0x0000, 0x9006, 0x709a, 0x60e2, 0x6886, 0x080c,
-	0x28b2, 0x9006, 0x080c, 0x2cef, 0x6043, 0x0090, 0x6043, 0x0010,
-	0x6027, 0xffff, 0x602b, 0x182f, 0x00ee, 0x00de, 0x00ce, 0x0005,
-	0x0006, 0x2001, 0x197c, 0x2004, 0x9086, 0xaaaa, 0x000e, 0x0005,
-	0x0006, 0x080c, 0x56d4, 0x9084, 0x0030, 0x9086, 0x0000, 0x000e,
-	0x0005, 0x0006, 0x080c, 0x56d4, 0x9084, 0x0030, 0x9086, 0x0030,
-	0x000e, 0x0005, 0x0006, 0x080c, 0x56d4, 0x9084, 0x0030, 0x9086,
-	0x0010, 0x000e, 0x0005, 0x0006, 0x080c, 0x56d4, 0x9084, 0x0030,
-	0x9086, 0x0020, 0x000e, 0x0005, 0x0036, 0x0016, 0x2001, 0x180c,
-	0x2004, 0x908c, 0x0013, 0x0180, 0x0020, 0x080c, 0x28d2, 0x900e,
-	0x0028, 0x080c, 0x6962, 0x1dc8, 0x2009, 0x0002, 0x2019, 0x0028,
-	0x080c, 0x3187, 0x9006, 0x0019, 0x001e, 0x003e, 0x0005, 0x00e6,
-	0x2071, 0x180c, 0x2e04, 0x0130, 0x080c, 0xd20f, 0x1128, 0x9085,
-	0x0010, 0x0010, 0x9084, 0xffef, 0x2072, 0x00ee, 0x0005, 0x6050,
-	0x0006, 0x60ec, 0x0006, 0x600c, 0x0006, 0x6004, 0x0006, 0x6028,
-	0x0006, 0x0016, 0x6138, 0x6050, 0x9084, 0xfbff, 0x9085, 0x2000,
-	0x6052, 0x613a, 0x20a9, 0x0012, 0x1d04, 0x741c, 0x2091, 0x6000,
-	0x1f04, 0x741c, 0x602f, 0x0100, 0x602f, 0x0000, 0x6050, 0x9085,
-	0x0400, 0x9084, 0xdfff, 0x6052, 0x613a, 0x001e, 0x602f, 0x0040,
-	0x602f, 0x0000, 0x000e, 0x602a, 0x000e, 0x6006, 0x000e, 0x600e,
-	0x000e, 0x60ee, 0x60e3, 0x0000, 0x6887, 0x0001, 0x2001, 0x0001,
-	0x080c, 0x28b2, 0x2001, 0x00a0, 0x0006, 0x080c, 0xd216, 0x000e,
-	0x0130, 0x080c, 0x2d0d, 0x9006, 0x080c, 0x2d19, 0x0010, 0x080c,
-	0x2cef, 0x000e, 0x6052, 0x6050, 0x0006, 0xc0e5, 0x6052, 0x00f6,
-	0x2079, 0x0100, 0x080c, 0x2bad, 0x00fe, 0x000e, 0x6052, 0x0005,
-	0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061,
-	0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x6020, 0x9084, 0x0080,
-	0x0138, 0x2001, 0x180c, 0x200c, 0xc1c5, 0x2102, 0x0804, 0x74dc,
-	0x2001, 0x180c, 0x200c, 0xc1c4, 0x2102, 0x6028, 0x9084, 0xe1ff,
-	0x602a, 0x6027, 0x0200, 0x2001, 0x0090, 0x080c, 0x2cef, 0x20a9,
-	0x0366, 0x6024, 0xd0cc, 0x1518, 0x1d04, 0x7489, 0x2091, 0x6000,
-	0x1f04, 0x7489, 0x2011, 0x0003, 0x080c, 0xa639, 0x2011, 0x0002,
-	0x080c, 0xa643, 0x080c, 0xa526, 0x901e, 0x080c, 0xa59c, 0x2001,
-	0x00a0, 0x080c, 0x2cef, 0x080c, 0x7698, 0x080c, 0x601b, 0x080c,
-	0xd216, 0x0110, 0x080c, 0x0d45, 0x9085, 0x0001, 0x0498, 0x86ff,
-	0x1110, 0x080c, 0x1ad3, 0x60e3, 0x0000, 0x2001, 0x196d, 0x2004,
-	0x080c, 0x28b2, 0x60e2, 0x2001, 0x0080, 0x080c, 0x2cef, 0x20a9,
-	0x0366, 0x6027, 0x1e00, 0x2009, 0x1e00, 0x080c, 0x2c38, 0x6024,
-	0x910c, 0x0138, 0x1d04, 0x74c1, 0x2091, 0x6000, 0x1f04, 0x74c1,
-	0x0808, 0x6028, 0x9085, 0x1e00, 0x602a, 0x70b4, 0x9005, 0x1118,
-	0x6887, 0x0001, 0x0008, 0x6886, 0x080c, 0xd216, 0x0110, 0x080c,
-	0x0d45, 0x9006, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e,
-	0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6,
-	0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, 0x7000, 0x9086, 0x0003,
-	0x1168, 0x2001, 0x020b, 0x2004, 0x9084, 0x5540, 0x9086, 0x5540,
-	0x1128, 0x2069, 0x1a79, 0x2d04, 0x8000, 0x206a, 0x2069, 0x0140,
-	0x6020, 0x9084, 0x00c0, 0x0120, 0x6884, 0x9005, 0x1904, 0x754f,
-	0x2001, 0x0088, 0x080c, 0x2cef, 0x9006, 0x60e2, 0x6886, 0x080c,
-	0x28b2, 0x2069, 0x0200, 0x6804, 0x9005, 0x1118, 0x6808, 0x9005,
-	0x01c0, 0x6028, 0x9084, 0xfbff, 0x602a, 0x6027, 0x0400, 0x2069,
-	0x198f, 0x7000, 0x206a, 0x709b, 0x0026, 0x7003, 0x0001, 0x20a9,
-	0x0002, 0x1d04, 0x7531, 0x2091, 0x6000, 0x1f04, 0x7531, 0x0804,
-	0x757d, 0x2069, 0x0140, 0x20a9, 0x0384, 0x6027, 0x1e00, 0x2009,
-	0x1e00, 0x080c, 0x2c38, 0x6024, 0x910c, 0x0508, 0x9084, 0x1a00,
-	0x11f0, 0x1d04, 0x753d, 0x2091, 0x6000, 0x1f04, 0x753d, 0x2011,
-	0x0003, 0x080c, 0xa639, 0x2011, 0x0002, 0x080c, 0xa643, 0x080c,
-	0xa526, 0x901e, 0x080c, 0xa59c, 0x2001, 0x00a0, 0x080c, 0x2cef,
-	0x080c, 0x7698, 0x080c, 0x601b, 0x9085, 0x0001, 0x00b0, 0x2001,
-	0x0080, 0x080c, 0x2cef, 0x2069, 0x0140, 0x60e3, 0x0000, 0x70b4,
-	0x9005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x2001, 0x196d,
-	0x2004, 0x080c, 0x28b2, 0x60e2, 0x9006, 0x00ee, 0x00de, 0x00ce,
-	0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026,
-	0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800,
-	0x6020, 0x9084, 0x00c0, 0x01c8, 0x2011, 0x0003, 0x080c, 0xa639,
-	0x2011, 0x0002, 0x080c, 0xa643, 0x080c, 0xa526, 0x901e, 0x080c,
-	0xa59c, 0x2069, 0x0140, 0x2001, 0x00a0, 0x080c, 0x2cef, 0x080c,
-	0x7698, 0x080c, 0x601b, 0x0804, 0x7618, 0x2001, 0x180c, 0x200c,
-	0xd1b4, 0x1160, 0xc1b5, 0x2102, 0x080c, 0x722e, 0x2069, 0x0140,
-	0x2001, 0x0080, 0x080c, 0x2cef, 0x60e3, 0x0000, 0x2069, 0x0200,
-	0x6804, 0x9005, 0x1118, 0x6808, 0x9005, 0x0180, 0x6028, 0x9084,
-	0xfdff, 0x602a, 0x6027, 0x0200, 0x2069, 0x198f, 0x7000, 0x206a,
-	0x709b, 0x0027, 0x7003, 0x0001, 0x0804, 0x7618, 0x6027, 0x1e00,
-	0x2009, 0x1e00, 0x080c, 0x2c38, 0x6024, 0x910c, 0x01c8, 0x9084,
-	0x1c00, 0x11b0, 0x1d04, 0x75d6, 0x0006, 0x0016, 0x00c6, 0x00d6,
-	0x00e6, 0x080c, 0x842a, 0x00ee, 0x00de, 0x00ce, 0x001e, 0x000e,
-	0x00e6, 0x2071, 0x19fa, 0x7018, 0x00ee, 0x9005, 0x19f8, 0x0500,
-	0x0026, 0x2011, 0x7246, 0x080c, 0x84ca, 0x2011, 0x7239, 0x080c,
-	0x85a4, 0x002e, 0x2069, 0x0140, 0x60e3, 0x0000, 0x70b4, 0x9005,
-	0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x2001, 0x196d, 0x2004,
-	0x080c, 0x28b2, 0x60e2, 0x2001, 0x180c, 0x200c, 0xc1b4, 0x2102,
-	0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005,
-	0x0156, 0x0016, 0x0026, 0x0036, 0x0046, 0x00c6, 0x00e6, 0x2061,
-	0x0100, 0x2071, 0x1800, 0x080c, 0xd20f, 0x1904, 0x7686, 0x7130,
-	0xd184, 0x1170, 0x080c, 0x3312, 0x0138, 0xc18d, 0x7132, 0x2011,
-	0x1848, 0x2214, 0xd2ac, 0x1120, 0x7030, 0xd08c, 0x0904, 0x7686,
-	0x2011, 0x1848, 0x220c, 0xd1a4, 0x0538, 0x0016, 0x2019, 0x000e,
-	0x080c, 0xe501, 0x0156, 0x00b6, 0x20a9, 0x007f, 0x900e, 0x9186,
-	0x007e, 0x01a0, 0x9186, 0x0080, 0x0188, 0x080c, 0x6600, 0x1170,
-	0x2120, 0x9006, 0x0016, 0x2009, 0x000e, 0x080c, 0xe58d, 0x2009,
-	0x0001, 0x2011, 0x0100, 0x080c, 0x86b4, 0x001e, 0x8108, 0x1f04,
-	0x764f, 0x00be, 0x015e, 0x001e, 0xd1ac, 0x1148, 0x0016, 0x2009,
-	0x0002, 0x2019, 0x0004, 0x080c, 0x3187, 0x001e, 0x0078, 0x0156,
-	0x00b6, 0x20a9, 0x007f, 0x900e, 0x080c, 0x6600, 0x1110, 0x080c,
-	0x6035, 0x8108, 0x1f04, 0x767c, 0x00be, 0x015e, 0x080c, 0x1ad3,
-	0x080c, 0xadb8, 0x60e3, 0x0000, 0x080c, 0x601b, 0x080c, 0x72e2,
-	0x00ee, 0x00ce, 0x004e, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005,
-	0x2001, 0x197d, 0x2003, 0x0001, 0x0005, 0x2001, 0x197d, 0x2003,
-	0x0000, 0x0005, 0x2001, 0x197c, 0x2003, 0xaaaa, 0x0005, 0x2001,
-	0x197c, 0x2003, 0x0000, 0x0005, 0x2071, 0x18fa, 0x7003, 0x0000,
-	0x7007, 0x0000, 0x080c, 0x1018, 0x090c, 0x0dd5, 0xa8ab, 0xdcb0,
-	0x2900, 0x704e, 0x080c, 0x1018, 0x090c, 0x0dd5, 0xa8ab, 0xdcb0,
-	0x2900, 0x7052, 0xa867, 0x0000, 0xa86b, 0x0001, 0xa89f, 0x0000,
-	0x0005, 0x00e6, 0x2071, 0x0040, 0x6848, 0x9005, 0x1118, 0x9085,
-	0x0001, 0x04b0, 0x6840, 0x9005, 0x0150, 0x04a1, 0x6a50, 0x9200,
-	0x7002, 0x6854, 0x9101, 0x7006, 0x9006, 0x7012, 0x7016, 0x6850,
-	0x7002, 0x6854, 0x7006, 0x6858, 0x700a, 0x685c, 0x700e, 0x6840,
-	0x9005, 0x1110, 0x7012, 0x7016, 0x6848, 0x701a, 0x701c, 0x9085,
-	0x0040, 0x701e, 0x2001, 0x0019, 0x7036, 0x702b, 0x0001, 0x2001,
-	0x0004, 0x200c, 0x918c, 0xfff7, 0x918d, 0x8000, 0x2102, 0x00d6,
-	0x2069, 0x18fa, 0x6807, 0x0001, 0x00de, 0x080c, 0x7c84, 0x9006,
-	0x00ee, 0x0005, 0x900e, 0x0156, 0x20a9, 0x0006, 0x8003, 0x2011,
-	0x0100, 0x2214, 0x9296, 0x0008, 0x1110, 0x818d, 0x0010, 0x81f5,
-	0x3e08, 0x1f04, 0x770e, 0x015e, 0x0005, 0x2079, 0x0040, 0x2071,
-	0x18fa, 0x7004, 0x0002, 0x772d, 0x772e, 0x7765, 0x77c0, 0x78d0,
-	0x772b, 0x772b, 0x78fa, 0x080c, 0x0dd5, 0x0005, 0x2079, 0x0040,
-	0x782c, 0x908c, 0x0780, 0x190c, 0x7d66, 0xd0a4, 0x01f0, 0x7824,
+	0x1800, 0x6020, 0x9084, 0x0080, 0x0138, 0x2001, 0x180c, 0x200c,
+	0xc1c5, 0x2102, 0x0804, 0x74e8, 0x2001, 0x180c, 0x200c, 0xc1c4,
+	0x2102, 0x6028, 0x9084, 0xe1ff, 0x602a, 0x6027, 0x0200, 0x2001,
+	0x0090, 0x080c, 0x2cef, 0x20a9, 0x0366, 0x6024, 0xd0cc, 0x1518,
+	0x1d04, 0x7495, 0x2091, 0x6000, 0x1f04, 0x7495, 0x2011, 0x0003,
+	0x080c, 0xa653, 0x2011, 0x0002, 0x080c, 0xa65d, 0x080c, 0xa540,
+	0x901e, 0x080c, 0xa5b6, 0x2001, 0x00a0, 0x080c, 0x2cef, 0x080c,
+	0x76a4, 0x080c, 0x601a, 0x080c, 0xd230, 0x0110, 0x080c, 0x0d45,
+	0x9085, 0x0001, 0x0498, 0x86ff, 0x1110, 0x080c, 0x1ad3, 0x60e3,
+	0x0000, 0x2001, 0x196d, 0x2004, 0x080c, 0x28b2, 0x60e2, 0x2001,
+	0x0080, 0x080c, 0x2cef, 0x20a9, 0x0366, 0x6027, 0x1e00, 0x2009,
+	0x1e00, 0x080c, 0x2c38, 0x6024, 0x910c, 0x0138, 0x1d04, 0x74cd,
+	0x2091, 0x6000, 0x1f04, 0x74cd, 0x0808, 0x6028, 0x9085, 0x1e00,
+	0x602a, 0x70b4, 0x9005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886,
+	0x080c, 0xd230, 0x0110, 0x080c, 0x0d45, 0x9006, 0x00ee, 0x00de,
+	0x00ce, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016,
+	0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2071,
+	0x1800, 0x7000, 0x9086, 0x0003, 0x1168, 0x2001, 0x020b, 0x2004,
+	0x9084, 0x5540, 0x9086, 0x5540, 0x1128, 0x2069, 0x1a79, 0x2d04,
+	0x8000, 0x206a, 0x2069, 0x0140, 0x6020, 0x9084, 0x00c0, 0x0120,
+	0x6884, 0x9005, 0x1904, 0x755b, 0x2001, 0x0088, 0x080c, 0x2cef,
+	0x9006, 0x60e2, 0x6886, 0x080c, 0x28b2, 0x2069, 0x0200, 0x6804,
+	0x9005, 0x1118, 0x6808, 0x9005, 0x01c0, 0x6028, 0x9084, 0xfbff,
+	0x602a, 0x6027, 0x0400, 0x2069, 0x198f, 0x7000, 0x206a, 0x709b,
+	0x0026, 0x7003, 0x0001, 0x20a9, 0x0002, 0x1d04, 0x753d, 0x2091,
+	0x6000, 0x1f04, 0x753d, 0x0804, 0x7589, 0x2069, 0x0140, 0x20a9,
+	0x0384, 0x6027, 0x1e00, 0x2009, 0x1e00, 0x080c, 0x2c38, 0x6024,
+	0x910c, 0x0508, 0x9084, 0x1a00, 0x11f0, 0x1d04, 0x7549, 0x2091,
+	0x6000, 0x1f04, 0x7549, 0x2011, 0x0003, 0x080c, 0xa653, 0x2011,
+	0x0002, 0x080c, 0xa65d, 0x080c, 0xa540, 0x901e, 0x080c, 0xa5b6,
+	0x2001, 0x00a0, 0x080c, 0x2cef, 0x080c, 0x76a4, 0x080c, 0x601a,
+	0x9085, 0x0001, 0x00b0, 0x2001, 0x0080, 0x080c, 0x2cef, 0x2069,
+	0x0140, 0x60e3, 0x0000, 0x70b4, 0x9005, 0x1118, 0x6887, 0x0001,
+	0x0008, 0x6886, 0x2001, 0x196d, 0x2004, 0x080c, 0x28b2, 0x60e2,
+	0x9006, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e,
+	0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6,
+	0x2061, 0x0100, 0x2071, 0x1800, 0x6020, 0x9084, 0x00c0, 0x01c8,
+	0x2011, 0x0003, 0x080c, 0xa653, 0x2011, 0x0002, 0x080c, 0xa65d,
+	0x080c, 0xa540, 0x901e, 0x080c, 0xa5b6, 0x2069, 0x0140, 0x2001,
+	0x00a0, 0x080c, 0x2cef, 0x080c, 0x76a4, 0x080c, 0x601a, 0x0804,
+	0x7624, 0x2001, 0x180c, 0x200c, 0xd1b4, 0x1160, 0xc1b5, 0x2102,
+	0x080c, 0x723a, 0x2069, 0x0140, 0x2001, 0x0080, 0x080c, 0x2cef,
+	0x60e3, 0x0000, 0x2069, 0x0200, 0x6804, 0x9005, 0x1118, 0x6808,
+	0x9005, 0x0180, 0x6028, 0x9084, 0xfdff, 0x602a, 0x6027, 0x0200,
+	0x2069, 0x198f, 0x7000, 0x206a, 0x709b, 0x0027, 0x7003, 0x0001,
+	0x0804, 0x7624, 0x6027, 0x1e00, 0x2009, 0x1e00, 0x080c, 0x2c38,
+	0x6024, 0x910c, 0x01c8, 0x9084, 0x1c00, 0x11b0, 0x1d04, 0x75e2,
+	0x0006, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x080c, 0x8453, 0x00ee,
+	0x00de, 0x00ce, 0x001e, 0x000e, 0x00e6, 0x2071, 0x19fa, 0x7018,
+	0x00ee, 0x9005, 0x19f8, 0x0500, 0x0026, 0x2011, 0x7252, 0x080c,
+	0x84f3, 0x2011, 0x7245, 0x080c, 0x85cd, 0x002e, 0x2069, 0x0140,
+	0x60e3, 0x0000, 0x70b4, 0x9005, 0x1118, 0x6887, 0x0001, 0x0008,
+	0x6886, 0x2001, 0x196d, 0x2004, 0x080c, 0x28b2, 0x60e2, 0x2001,
+	0x180c, 0x200c, 0xc1b4, 0x2102, 0x00ee, 0x00de, 0x00ce, 0x003e,
+	0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036,
+	0x0046, 0x00c6, 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, 0x080c,
+	0xd229, 0x1904, 0x7692, 0x7130, 0xd184, 0x1170, 0x080c, 0x3319,
+	0x0138, 0xc18d, 0x7132, 0x2011, 0x1848, 0x2214, 0xd2ac, 0x1120,
+	0x7030, 0xd08c, 0x0904, 0x7692, 0x2011, 0x1848, 0x220c, 0xd1a4,
+	0x0538, 0x0016, 0x2019, 0x000e, 0x080c, 0xe522, 0x0156, 0x00b6,
+	0x20a9, 0x007f, 0x900e, 0x9186, 0x007e, 0x01a0, 0x9186, 0x0080,
+	0x0188, 0x080c, 0x65ff, 0x1170, 0x2120, 0x9006, 0x0016, 0x2009,
+	0x000e, 0x080c, 0xe5ae, 0x2009, 0x0001, 0x2011, 0x0100, 0x080c,
+	0x86dd, 0x001e, 0x8108, 0x1f04, 0x765b, 0x00be, 0x015e, 0x001e,
+	0xd1ac, 0x1148, 0x0016, 0x2009, 0x0002, 0x2019, 0x0004, 0x080c,
+	0x318a, 0x001e, 0x0078, 0x0156, 0x00b6, 0x20a9, 0x007f, 0x900e,
+	0x080c, 0x65ff, 0x1110, 0x080c, 0x6034, 0x8108, 0x1f04, 0x7688,
+	0x00be, 0x015e, 0x080c, 0x1ad3, 0x080c, 0xadd2, 0x60e3, 0x0000,
+	0x080c, 0x601a, 0x080c, 0x72ee, 0x00ee, 0x00ce, 0x004e, 0x003e,
+	0x002e, 0x001e, 0x015e, 0x0005, 0x2001, 0x197d, 0x2003, 0x0001,
+	0x0005, 0x2001, 0x197d, 0x2003, 0x0000, 0x0005, 0x2001, 0x197c,
+	0x2003, 0xaaaa, 0x0005, 0x2001, 0x197c, 0x2003, 0x0000, 0x0005,
+	0x2071, 0x18fa, 0x7003, 0x0000, 0x7007, 0x0000, 0x080c, 0x1018,
+	0x090c, 0x0dd5, 0xa8ab, 0xdcb0, 0x2900, 0x704e, 0x080c, 0x1018,
+	0x090c, 0x0dd5, 0xa8ab, 0xdcb0, 0x2900, 0x7052, 0xa867, 0x0000,
+	0xa86b, 0x0001, 0xa89f, 0x0000, 0x0005, 0x00e6, 0x2071, 0x0040,
+	0x6848, 0x9005, 0x1118, 0x9085, 0x0001, 0x04b0, 0x6840, 0x9005,
+	0x0150, 0x04a1, 0x6a50, 0x9200, 0x7002, 0x6854, 0x9101, 0x7006,
+	0x9006, 0x7012, 0x7016, 0x6850, 0x7002, 0x6854, 0x7006, 0x6858,
+	0x700a, 0x685c, 0x700e, 0x6840, 0x9005, 0x1110, 0x7012, 0x7016,
+	0x6848, 0x701a, 0x701c, 0x9085, 0x0040, 0x701e, 0x2001, 0x0019,
+	0x7036, 0x702b, 0x0001, 0x2001, 0x0004, 0x200c, 0x918c, 0xfff7,
+	0x918d, 0x8000, 0x2102, 0x00d6, 0x2069, 0x18fa, 0x6807, 0x0001,
+	0x00de, 0x080c, 0x7c90, 0x9006, 0x00ee, 0x0005, 0x900e, 0x0156,
+	0x20a9, 0x0006, 0x8003, 0x2011, 0x0100, 0x2214, 0x9296, 0x0008,
+	0x1110, 0x818d, 0x0010, 0x81f5, 0x3e08, 0x1f04, 0x771a, 0x015e,
+	0x0005, 0x2079, 0x0040, 0x2071, 0x18fa, 0x7004, 0x0002, 0x7739,
+	0x773a, 0x7771, 0x77cc, 0x78dc, 0x7737, 0x7737, 0x7906, 0x080c,
+	0x0dd5, 0x0005, 0x2079, 0x0040, 0x782c, 0x908c, 0x0780, 0x190c,
+	0x7d72, 0xd0a4, 0x01f0, 0x7824, 0x2048, 0x9006, 0xa802, 0xa806,
+	0xa864, 0x9084, 0x00ff, 0x908a, 0x0040, 0x0608, 0x00b8, 0x2001,
+	0x1800, 0x200c, 0x9186, 0x0003, 0x1160, 0x7104, 0x9186, 0x0004,
+	0x0140, 0x9186, 0x0007, 0x0128, 0x9186, 0x0003, 0x19e8, 0x080c,
+	0x77cc, 0x782c, 0xd09c, 0x090c, 0x7c90, 0x0005, 0x9082, 0x005a,
+	0x1218, 0x2100, 0x003b, 0x0c18, 0x080c, 0x7802, 0x0c90, 0x00e3,
+	0x08f0, 0x0005, 0x7802, 0x7802, 0x7802, 0x7802, 0x7802, 0x7802,
+	0x7802, 0x7802, 0x7824, 0x7802, 0x7802, 0x7802, 0x7802, 0x7802,
+	0x7802, 0x7802, 0x7802, 0x7802, 0x7802, 0x7802, 0x7802, 0x7802,
+	0x7802, 0x7802, 0x7802, 0x7802, 0x7802, 0x7802, 0x780e, 0x7802,
+	0x79f7, 0x7802, 0x7802, 0x7802, 0x7824, 0x7802, 0x780e, 0x7a38,
+	0x7a79, 0x7ac0, 0x7ad4, 0x7802, 0x7802, 0x7824, 0x780e, 0x7838,
+	0x7802, 0x78b0, 0x7b7f, 0x7b9a, 0x7802, 0x7824, 0x7802, 0x7838,
+	0x7802, 0x7802, 0x78a6, 0x7b9a, 0x7802, 0x7802, 0x7802, 0x7802,
+	0x7802, 0x7802, 0x7802, 0x7802, 0x7802, 0x784c, 0x7802, 0x7802,
+	0x7802, 0x7802, 0x7802, 0x7802, 0x7802, 0x7802, 0x7802, 0x7d16,
+	0x7802, 0x7cc0, 0x7802, 0x7cc0, 0x7802, 0x7861, 0x7802, 0x7802,
+	0x7802, 0x7802, 0x7802, 0x7802, 0x2079, 0x0040, 0x7004, 0x9086,
+	0x0003, 0x1198, 0x782c, 0x080c, 0x7cb9, 0xd0a4, 0x0170, 0x7824,
 	0x2048, 0x9006, 0xa802, 0xa806, 0xa864, 0x9084, 0x00ff, 0x908a,
-	0x0040, 0x0608, 0x00b8, 0x2001, 0x1800, 0x200c, 0x9186, 0x0003,
-	0x1160, 0x7104, 0x9186, 0x0004, 0x0140, 0x9186, 0x0007, 0x0128,
-	0x9186, 0x0003, 0x19e8, 0x080c, 0x77c0, 0x782c, 0xd09c, 0x090c,
-	0x7c84, 0x0005, 0x9082, 0x005a, 0x1218, 0x2100, 0x003b, 0x0c18,
-	0x080c, 0x77f6, 0x0c90, 0x00e3, 0x08f0, 0x0005, 0x77f6, 0x77f6,
-	0x77f6, 0x77f6, 0x77f6, 0x77f6, 0x77f6, 0x77f6, 0x7818, 0x77f6,
-	0x77f6, 0x77f6, 0x77f6, 0x77f6, 0x77f6, 0x77f6, 0x77f6, 0x77f6,
-	0x77f6, 0x77f6, 0x77f6, 0x77f6, 0x77f6, 0x77f6, 0x77f6, 0x77f6,
-	0x77f6, 0x77f6, 0x7802, 0x77f6, 0x79eb, 0x77f6, 0x77f6, 0x77f6,
-	0x7818, 0x77f6, 0x7802, 0x7a2c, 0x7a6d, 0x7ab4, 0x7ac8, 0x77f6,
-	0x77f6, 0x7818, 0x7802, 0x782c, 0x77f6, 0x78a4, 0x7b73, 0x7b8e,
-	0x77f6, 0x7818, 0x77f6, 0x782c, 0x77f6, 0x77f6, 0x789a, 0x7b8e,
-	0x77f6, 0x77f6, 0x77f6, 0x77f6, 0x77f6, 0x77f6, 0x77f6, 0x77f6,
-	0x77f6, 0x7840, 0x77f6, 0x77f6, 0x77f6, 0x77f6, 0x77f6, 0x77f6,
-	0x77f6, 0x77f6, 0x77f6, 0x7d0a, 0x77f6, 0x7cb4, 0x77f6, 0x7cb4,
-	0x77f6, 0x7855, 0x77f6, 0x77f6, 0x77f6, 0x77f6, 0x77f6, 0x77f6,
-	0x2079, 0x0040, 0x7004, 0x9086, 0x0003, 0x1198, 0x782c, 0x080c,
-	0x7cad, 0xd0a4, 0x0170, 0x7824, 0x2048, 0x9006, 0xa802, 0xa806,
-	0xa864, 0x9084, 0x00ff, 0x908a, 0x001a, 0x1210, 0x002b, 0x0c50,
-	0x00e9, 0x080c, 0x7c84, 0x0005, 0x77f6, 0x7802, 0x79d7, 0x77f6,
-	0x7802, 0x77f6, 0x7802, 0x7802, 0x77f6, 0x7802, 0x79d7, 0x7802,
-	0x7802, 0x7802, 0x7802, 0x7802, 0x77f6, 0x7802, 0x79d7, 0x77f6,
-	0x77f6, 0x7802, 0x77f6, 0x77f6, 0x77f6, 0x7802, 0x00e6, 0x2071,
-	0x18fa, 0x2009, 0x0400, 0x0071, 0x00ee, 0x0005, 0x2009, 0x1000,
-	0x0049, 0x0005, 0x2009, 0x2000, 0x0029, 0x0005, 0x2009, 0x0800,
-	0x0009, 0x0005, 0x7007, 0x0001, 0xa868, 0x9084, 0x00ff, 0x9105,
-	0xa86a, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c79, 0x012e, 0x0005,
-	0xa864, 0x8007, 0x9084, 0x00ff, 0x0d08, 0x8001, 0x1120, 0x7007,
-	0x0001, 0x0804, 0x7979, 0x7007, 0x0003, 0x7012, 0x2900, 0x7016,
-	0x701a, 0x704b, 0x7979, 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff,
-	0x0968, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, 0x7994, 0x7007,
-	0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, 0x7994, 0x0005,
-	0xa864, 0x8007, 0x9084, 0x00ff, 0x0904, 0x77fe, 0x8001, 0x1120,
-	0x7007, 0x0001, 0x0804, 0x79b0, 0x7007, 0x0003, 0x7012, 0x2900,
-	0x7016, 0x701a, 0x704b, 0x79b0, 0x0005, 0xa864, 0x8007, 0x9084,
-	0x00ff, 0x9086, 0x0001, 0x1904, 0x77fe, 0x7007, 0x0001, 0x2009,
-	0x1834, 0x210c, 0x81ff, 0x11a8, 0xa868, 0x9084, 0x00ff, 0xa86a,
-	0xa883, 0x0000, 0x080c, 0x62af, 0x1108, 0x0005, 0x0126, 0x2091,
-	0x8000, 0xa867, 0x0139, 0xa87a, 0xa982, 0x080c, 0x6c79, 0x012e,
-	0x0ca0, 0xa994, 0x9186, 0x0071, 0x0d38, 0x9186, 0x0064, 0x0d20,
-	0x9186, 0x007c, 0x0d08, 0x9186, 0x0028, 0x09f0, 0x9186, 0x0038,
-	0x09d8, 0x9186, 0x0078, 0x09c0, 0x9186, 0x005f, 0x09a8, 0x9186,
-	0x0056, 0x0990, 0xa897, 0x4005, 0xa89b, 0x0001, 0x2001, 0x0030,
-	0x900e, 0x08a0, 0xa87c, 0x9084, 0x00c0, 0x9086, 0x00c0, 0x1120,
-	0x7007, 0x0001, 0x0804, 0x7ba5, 0x2900, 0x7016, 0x701a, 0x20a9,
-	0x0004, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0030, 0x2098, 0x7050,
-	0x2040, 0xa060, 0x20e8, 0xa05c, 0x9080, 0x0023, 0x20a0, 0x4003,
-	0xa888, 0x7012, 0x9082, 0x0401, 0x1a04, 0x7806, 0xaab4, 0x928a,
-	0x0002, 0x1a04, 0x7806, 0x82ff, 0x1138, 0xa8b8, 0xa9bc, 0x9105,
-	0x0118, 0x2001, 0x7937, 0x0018, 0x9280, 0x792d, 0x2005, 0x7056,
-	0x7010, 0x9015, 0x0904, 0x7918, 0x080c, 0x1018, 0x1118, 0x7007,
-	0x0004, 0x0005, 0x2900, 0x7022, 0x7054, 0x2060, 0xe000, 0xa866,
-	0x7050, 0x2040, 0xa95c, 0xe004, 0x9100, 0xa076, 0xa860, 0xa072,
-	0xe008, 0x920a, 0x1210, 0x900e, 0x2200, 0x7112, 0xe20c, 0x8003,
-	0x800b, 0x9296, 0x0004, 0x0108, 0x9108, 0xa17a, 0x810b, 0xa17e,
-	0x080c, 0x10e9, 0xa06c, 0x908e, 0x0100, 0x0170, 0x9086, 0x0200,
-	0x0118, 0x7007, 0x0007, 0x0005, 0x7020, 0x2048, 0x080c, 0x1031,
-	0x7014, 0x2048, 0x0804, 0x7806, 0x7020, 0x2048, 0x7018, 0xa802,
-	0xa807, 0x0000, 0x2908, 0x2048, 0xa906, 0x711a, 0x0804, 0x78d0,
-	0x7014, 0x2048, 0x7007, 0x0001, 0xa8b4, 0x9005, 0x1128, 0xa8b8,
-	0xa9bc, 0x9105, 0x0108, 0x00b9, 0xa864, 0x9084, 0x00ff, 0x9086,
-	0x001e, 0x0904, 0x7ba5, 0x0804, 0x7979, 0x792f, 0x7933, 0x0002,
-	0x001d, 0x0007, 0x0004, 0x000a, 0x001b, 0x0005, 0x0006, 0x000a,
-	0x001d, 0x0005, 0x0004, 0x0076, 0x0066, 0xafb8, 0xaebc, 0xa804,
-	0x2050, 0xb0c0, 0xb0e2, 0xb0bc, 0xb0de, 0xb0b8, 0xb0d2, 0xb0b4,
-	0xb0ce, 0xb6da, 0xb7d6, 0xb0b0, 0xb0ca, 0xb0ac, 0xb0c6, 0xb0a8,
-	0xb0ba, 0xb0a4, 0xb0b6, 0xb6c2, 0xb7be, 0xb0a0, 0xb0b2, 0xb09c,
-	0xb0ae, 0xb098, 0xb0a2, 0xb094, 0xb09e, 0xb6aa, 0xb7a6, 0xb090,
-	0xb09a, 0xb08c, 0xb096, 0xb088, 0xb08a, 0xb084, 0xb086, 0xb692,
-	0xb78e, 0xb080, 0xb082, 0xb07c, 0xb07e, 0xb078, 0xb072, 0xb074,
-	0xb06e, 0xb67a, 0xb776, 0xb004, 0x9055, 0x1958, 0x006e, 0x007e,
-	0x0005, 0x2009, 0x1834, 0x210c, 0x81ff, 0x1178, 0x080c, 0x60af,
-	0x1108, 0x0005, 0x080c, 0x6eb8, 0x0126, 0x2091, 0x8000, 0x080c,
-	0xce0a, 0x080c, 0x6c79, 0x012e, 0x0ca0, 0x080c, 0xd20f, 0x1d70,
-	0x2001, 0x0028, 0x900e, 0x0c70, 0x2009, 0x1834, 0x210c, 0x81ff,
-	0x1188, 0xa888, 0x9005, 0x0188, 0xa883, 0x0000, 0x080c, 0x613f,
-	0x1108, 0x0005, 0xa87a, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c79,
-	0x012e, 0x0cb8, 0x2001, 0x0028, 0x0ca8, 0x2001, 0x0000, 0x0c90,
-	0x2009, 0x1834, 0x210c, 0x81ff, 0x11d8, 0xa888, 0x9005, 0x01e0,
-	0xa883, 0x0000, 0xa87c, 0xd0f4, 0x0120, 0x080c, 0x6211, 0x1138,
-	0x0005, 0x9006, 0xa87a, 0x080c, 0x618c, 0x1108, 0x0005, 0x0126,
-	0x2091, 0x8000, 0xa87a, 0xa982, 0x080c, 0x6c79, 0x012e, 0x0cb0,
-	0x2001, 0x0028, 0x900e, 0x0c98, 0x2001, 0x0000, 0x0c80, 0x7018,
-	0xa802, 0x2908, 0x2048, 0xa906, 0x711a, 0x7010, 0x8001, 0x7012,
-	0x0118, 0x7007, 0x0003, 0x0030, 0x7014, 0x2048, 0x7007, 0x0001,
-	0x7048, 0x080f, 0x0005, 0x00b6, 0x7007, 0x0001, 0xa974, 0xa878,
-	0x9084, 0x00ff, 0x9096, 0x0004, 0x0540, 0x20a9, 0x0001, 0x9096,
-	0x0001, 0x0190, 0x900e, 0x20a9, 0x0800, 0x9096, 0x0002, 0x0160,
-	0x9005, 0x11d8, 0xa974, 0x080c, 0x6600, 0x11b8, 0x0066, 0xae80,
-	0x080c, 0x6710, 0x006e, 0x0088, 0x0046, 0x2011, 0x180c, 0x2224,
-	0xc484, 0x2412, 0x004e, 0x00c6, 0x080c, 0x6600, 0x1110, 0x080c,
-	0x6810, 0x8108, 0x1f04, 0x7a14, 0x00ce, 0xa87c, 0xd084, 0x1120,
-	0x080c, 0x1031, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c,
-	0x6c79, 0x012e, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000, 0x7007,
-	0x0001, 0x080c, 0x6966, 0x0580, 0x2061, 0x1a71, 0x6100, 0xd184,
-	0x0178, 0xa888, 0x9084, 0x00ff, 0x1550, 0x6000, 0xd084, 0x0520,
-	0x6004, 0x9005, 0x1538, 0x6003, 0x0000, 0x600b, 0x0000, 0x00c8,
-	0x2011, 0x0001, 0xa890, 0x9005, 0x1110, 0x2001, 0x001e, 0x8000,
-	0x6016, 0xa888, 0x9084, 0x00ff, 0x0178, 0x6006, 0xa888, 0x8007,
-	0x9084, 0x00ff, 0x0148, 0x600a, 0xa888, 0x8000, 0x1108, 0xc28d,
-	0x6202, 0x012e, 0x0804, 0x7c6e, 0x012e, 0x0804, 0x7c68, 0x012e,
-	0x0804, 0x7c62, 0x012e, 0x0804, 0x7c65, 0x0126, 0x2091, 0x8000,
-	0x7007, 0x0001, 0x080c, 0x6966, 0x05e0, 0x2061, 0x1a71, 0x6000,
-	0xd084, 0x05b8, 0x6204, 0x6308, 0xd08c, 0x1530, 0xac78, 0x9484,
-	0x0003, 0x0170, 0xa988, 0x918c, 0x00ff, 0x8001, 0x1120, 0x2100,
-	0x9210, 0x0620, 0x0028, 0x8001, 0x1508, 0x2100, 0x9212, 0x02f0,
-	0x9484, 0x000c, 0x0188, 0xa988, 0x810f, 0x918c, 0x00ff, 0x9082,
-	0x0004, 0x1120, 0x2100, 0x9318, 0x0288, 0x0030, 0x9082, 0x0004,
-	0x1168, 0x2100, 0x931a, 0x0250, 0xa890, 0x9005, 0x0110, 0x8000,
-	0x6016, 0x6206, 0x630a, 0x012e, 0x0804, 0x7c6e, 0x012e, 0x0804,
-	0x7c6b, 0x012e, 0x0804, 0x7c68, 0x0126, 0x2091, 0x8000, 0x7007,
-	0x0001, 0x2061, 0x1a71, 0x6300, 0xd38c, 0x1120, 0x6308, 0x8318,
-	0x0220, 0x630a, 0x012e, 0x0804, 0x7c7c, 0x012e, 0x0804, 0x7c6b,
-	0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, 0x7007, 0x0001, 0xa87c,
-	0xd0ac, 0x0148, 0x00c6, 0x2061, 0x1a71, 0x6000, 0x9084, 0xfcff,
-	0x6002, 0x00ce, 0x0440, 0xa888, 0x9005, 0x05d8, 0xa88c, 0x9065,
-	0x0598, 0x2001, 0x1834, 0x2004, 0x9005, 0x0118, 0x080c, 0xae78,
-	0x0068, 0x6017, 0xf400, 0x605b, 0x0000, 0xa97c, 0xd1a4, 0x0110,
-	0xa980, 0x615a, 0x2009, 0x0041, 0x080c, 0xaec2, 0xa988, 0x918c,
-	0xff00, 0x9186, 0x2000, 0x1138, 0x0026, 0x900e, 0x2011, 0xfdff,
-	0x080c, 0x86b4, 0x002e, 0xa87c, 0xd0c4, 0x0148, 0x2061, 0x1a71,
-	0x6000, 0xd08c, 0x1120, 0x6008, 0x8000, 0x0208, 0x600a, 0x00ce,
-	0x012e, 0x00be, 0x0804, 0x7c6e, 0x00ce, 0x012e, 0x00be, 0x0804,
-	0x7c68, 0xa984, 0x9186, 0x002e, 0x0d30, 0x9186, 0x002d, 0x0d18,
-	0x9186, 0x0045, 0x0510, 0x9186, 0x002a, 0x1130, 0x2001, 0x180c,
-	0x200c, 0xc194, 0x2102, 0x08b8, 0x9186, 0x0020, 0x0158, 0x9186,
-	0x0029, 0x1d10, 0xa974, 0x080c, 0x6600, 0x1968, 0xb800, 0xc0e4,
-	0xb802, 0x0848, 0xa88c, 0x9065, 0x09b8, 0x6007, 0x0024, 0x2001,
-	0x1986, 0x2004, 0x601a, 0x0804, 0x7b03, 0xa88c, 0x9065, 0x0960,
-	0x00e6, 0xa890, 0x9075, 0x2001, 0x1834, 0x2004, 0x9005, 0x0150,
-	0x080c, 0xae78, 0x8eff, 0x0118, 0x2e60, 0x080c, 0xae78, 0x00ee,
-	0x0804, 0x7b03, 0x6024, 0xc0dc, 0xc0d5, 0x6026, 0x2e60, 0x6007,
-	0x003a, 0xa8a0, 0x9005, 0x0130, 0x6007, 0x003b, 0xa8a4, 0x602e,
-	0xa8a8, 0x6016, 0x6003, 0x0001, 0x080c, 0x90c7, 0x080c, 0x9664,
-	0x00ee, 0x0804, 0x7b03, 0x2061, 0x1a71, 0x6000, 0xd084, 0x0190,
-	0xd08c, 0x1904, 0x7c7c, 0x0126, 0x2091, 0x8000, 0x6204, 0x8210,
-	0x0220, 0x6206, 0x012e, 0x0804, 0x7c7c, 0x012e, 0xa883, 0x0016,
-	0x0804, 0x7c75, 0xa883, 0x0007, 0x0804, 0x7c75, 0xa864, 0x8007,
-	0x9084, 0x00ff, 0x0130, 0x8001, 0x1138, 0x7007, 0x0001, 0x0069,
-	0x0005, 0x080c, 0x77fe, 0x0040, 0x7007, 0x0003, 0x7012, 0x2900,
-	0x7016, 0x701a, 0x704b, 0x7ba5, 0x0005, 0x00b6, 0x00e6, 0x0126,
-	0x2091, 0x8000, 0x903e, 0x2061, 0x1800, 0x61d0, 0x81ff, 0x1904,
-	0x7c27, 0x6130, 0xd194, 0x1904, 0x7c51, 0xa878, 0x2070, 0x9e82,
-	0x1cd0, 0x0a04, 0x7c1b, 0x6068, 0x9e02, 0x1a04, 0x7c1b, 0x7120,
-	0x9186, 0x0006, 0x1904, 0x7c0d, 0x7010, 0x905d, 0x0904, 0x7c27,
-	0xb800, 0xd0e4, 0x1904, 0x7c4b, 0x2061, 0x1a71, 0x6100, 0x9184,
-	0x0301, 0x9086, 0x0001, 0x15a0, 0x7024, 0xd0dc, 0x1904, 0x7c54,
-	0xa883, 0x0000, 0xa803, 0x0000, 0x2908, 0x7014, 0x9005, 0x1198,
-	0x7116, 0xa87c, 0xd0f4, 0x1904, 0x7c57, 0x080c, 0x56d0, 0xd09c,
-	0x1118, 0xa87c, 0xc0cc, 0xa87e, 0x2e60, 0x080c, 0x85d4, 0x012e,
-	0x00ee, 0x00be, 0x0005, 0x2048, 0xa800, 0x9005, 0x1de0, 0xa902,
-	0x2148, 0xa87c, 0xd0f4, 0x1904, 0x7c57, 0x012e, 0x00ee, 0x00be,
-	0x0005, 0x012e, 0x00ee, 0xa883, 0x0006, 0x00be, 0x0804, 0x7c75,
-	0xd184, 0x0db8, 0xd1c4, 0x1190, 0x00a0, 0xa974, 0x080c, 0x6600,
-	0x15d0, 0xb800, 0xd0e4, 0x15b8, 0x7120, 0x9186, 0x0007, 0x1118,
-	0xa883, 0x0002, 0x0490, 0xa883, 0x0008, 0x0478, 0xa883, 0x000e,
-	0x0460, 0xa883, 0x0017, 0x0448, 0xa883, 0x0035, 0x0430, 0x080c,
-	0x56d4, 0xd0fc, 0x01e8, 0xa878, 0x2070, 0x9e82, 0x1cd0, 0x02c0,
-	0x6068, 0x9e02, 0x12a8, 0x7120, 0x9186, 0x0006, 0x1188, 0x7010,
-	0x905d, 0x0170, 0xb800, 0xd0bc, 0x0158, 0x2039, 0x0001, 0x7000,
-	0x9086, 0x0007, 0x1904, 0x7bb1, 0x7003, 0x0002, 0x0804, 0x7bb1,
-	0xa883, 0x0028, 0x0010, 0xa883, 0x0029, 0x012e, 0x00ee, 0x00be,
-	0x0420, 0xa883, 0x002a, 0x0cc8, 0xa883, 0x0045, 0x0cb0, 0x2e60,
-	0x2019, 0x0002, 0x601b, 0x0014, 0x080c, 0xe115, 0x012e, 0x00ee,
-	0x00be, 0x0005, 0x2009, 0x003e, 0x0058, 0x2009, 0x0004, 0x0040,
-	0x2009, 0x0006, 0x0028, 0x2009, 0x0016, 0x0010, 0x2009, 0x0001,
-	0xa884, 0x9084, 0xff00, 0x9105, 0xa886, 0x0126, 0x2091, 0x8000,
-	0x080c, 0x6c79, 0x012e, 0x0005, 0x080c, 0x1031, 0x0005, 0x00d6,
-	0x080c, 0x85cb, 0x00de, 0x0005, 0x00d6, 0x00e6, 0x0126, 0x2091,
-	0x8000, 0x2071, 0x0040, 0x702c, 0xd084, 0x01d8, 0x908c, 0x0780,
-	0x190c, 0x7d66, 0xd09c, 0x11a8, 0x2071, 0x1800, 0x70c0, 0x90ea,
-	0x0020, 0x0278, 0x8001, 0x70c2, 0x702c, 0x2048, 0xa800, 0x702e,
-	0x9006, 0xa802, 0xa806, 0x2071, 0x0040, 0x2900, 0x7022, 0x702c,
-	0x0c28, 0x012e, 0x00ee, 0x00de, 0x0005, 0x0006, 0x9084, 0x0780,
-	0x190c, 0x7d66, 0x000e, 0x0005, 0xa898, 0x9084, 0x0003, 0x05a8,
-	0x080c, 0xadf1, 0x05d8, 0x2900, 0x6016, 0xa864, 0x9084, 0x00ff,
-	0x9086, 0x0035, 0x1138, 0x6008, 0xc0fd, 0x600a, 0x2001, 0x196b,
-	0x2004, 0x0098, 0xa8a0, 0x9084, 0x00ff, 0xa99c, 0x918c, 0xff00,
-	0x9105, 0xa99c, 0x918c, 0x00ff, 0x080c, 0x283e, 0x1540, 0x00b6,
-	0x080c, 0x6600, 0x2b00, 0x00be, 0x1510, 0x6012, 0x6023, 0x0001,
-	0x2009, 0x0040, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0035, 0x0110,
-	0x2009, 0x0041, 0x080c, 0xaec2, 0x0005, 0xa87b, 0x0101, 0x0126,
-	0x2091, 0x8000, 0x080c, 0x6c79, 0x012e, 0x0005, 0xa87b, 0x002c,
-	0x0126, 0x2091, 0x8000, 0x080c, 0x6c79, 0x012e, 0x0005, 0xa87b,
-	0x0028, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c79, 0x012e, 0x080c,
-	0xae47, 0x0005, 0x00d6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x00b6,
-	0x7007, 0x0001, 0xaa74, 0x9282, 0x0004, 0x1a04, 0x7d57, 0xa97c,
-	0x9188, 0x1000, 0x2104, 0x905d, 0xb804, 0xd284, 0x0140, 0x05e8,
-	0x8007, 0x9084, 0x00ff, 0x9084, 0x0006, 0x1108, 0x04b0, 0x2b10,
-	0x080c, 0xadf1, 0x1118, 0x080c, 0xae95, 0x05a8, 0x6212, 0xa874,
-	0x0002, 0x7d35, 0x7d3a, 0x7d3d, 0x7d43, 0x2019, 0x0002, 0x080c,
-	0xe501, 0x0060, 0x080c, 0xe49d, 0x0048, 0x2019, 0x0002, 0xa980,
-	0x080c, 0xe4b8, 0x0018, 0xa980, 0x080c, 0xe49d, 0x080c, 0xae47,
-	0xa887, 0x0000, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c79, 0x012e,
-	0x00be, 0x001e, 0x002e, 0x003e, 0x00ce, 0x00de, 0x0005, 0xa887,
-	0x0006, 0x0c80, 0xa887, 0x0002, 0x0c68, 0xa887, 0x0005, 0x0c50,
-	0xa887, 0x0004, 0x0c38, 0xa887, 0x0007, 0x0c20, 0x2091, 0x8000,
-	0x0e04, 0x7d68, 0x0006, 0x0016, 0x2001, 0x8003, 0x0006, 0x0804,
-	0x0dde, 0x2001, 0x1834, 0x2004, 0x9005, 0x0005, 0x0005, 0x00f6,
-	0x2079, 0x0300, 0x2001, 0x0200, 0x200c, 0xc1e5, 0xc1dc, 0x2102,
-	0x2009, 0x0218, 0x210c, 0xd1ec, 0x1120, 0x080c, 0x157d, 0x00fe,
-	0x0005, 0x2001, 0x020d, 0x2003, 0x0020, 0x781f, 0x0300, 0x00fe,
-	0x0005, 0x781c, 0xd08c, 0x0904, 0x7de8, 0x68c0, 0x90aa, 0x0005,
-	0x0a04, 0x83e2, 0x7d44, 0x7c40, 0x9584, 0x00f6, 0x1510, 0x9484,
-	0x7000, 0x0140, 0x908a, 0x2000, 0x1260, 0x9584, 0x0700, 0x8007,
-	0x0804, 0x7def, 0x7000, 0x9084, 0xff00, 0x9086, 0x8100, 0x0da8,
-	0x00b0, 0x9484, 0x0fff, 0x1130, 0x7000, 0x9084, 0xff00, 0x9086,
-	0x8100, 0x11c0, 0x080c, 0xe9a0, 0x080c, 0x82d7, 0x7817, 0x0140,
-	0x00a8, 0x9584, 0x0076, 0x1118, 0x080c, 0x8335, 0x19c0, 0xd5a4,
-	0x0148, 0x0046, 0x0056, 0x080c, 0x7e4a, 0x080c, 0x2337, 0x005e,
-	0x004e, 0x0020, 0x080c, 0xe9a0, 0x7817, 0x0140, 0x080c, 0x73b0,
-	0x0168, 0x2001, 0x0111, 0x2004, 0xd08c, 0x0140, 0x6893, 0x0000,
-	0x2001, 0x0110, 0x2003, 0x0008, 0x2003, 0x0000, 0x080c, 0x7e2b,
-	0x2001, 0x19f0, 0x2004, 0x9005, 0x090c, 0x9664, 0x0005, 0x0002,
-	0x7e01, 0x80f9, 0x7df8, 0x7df8, 0x7df8, 0x7df8, 0x7df8, 0x7df8,
-	0x7817, 0x0140, 0x2001, 0x19f0, 0x2004, 0x9005, 0x090c, 0x9664,
-	0x0005, 0x7000, 0x908c, 0xff00, 0x9194, 0xf000, 0x810f, 0x9484,
-	0x0fff, 0x6892, 0x9286, 0x2000, 0x1150, 0x6800, 0x9086, 0x0001,
-	0x1118, 0x080c, 0x5731, 0x0070, 0x080c, 0x7e6a, 0x0058, 0x9286,
-	0x3000, 0x1118, 0x080c, 0x8034, 0x0028, 0x9286, 0x8000, 0x1110,
-	0x080c, 0x8207, 0x7817, 0x0140, 0x2001, 0x19f0, 0x2004, 0x9005,
-	0x090c, 0x9664, 0x0005, 0x2001, 0x1810, 0x2004, 0xd08c, 0x0178,
-	0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1148, 0x0026, 0x0036,
-	0x2011, 0x8048, 0x2518, 0x080c, 0x4b05, 0x003e, 0x002e, 0x0005,
-	0x0036, 0x0046, 0x0056, 0x00f6, 0x2079, 0x0200, 0x2019, 0xfffe,
-	0x7c30, 0x0050, 0x0036, 0x0046, 0x0056, 0x00f6, 0x2079, 0x0200,
-	0x7d44, 0x7c40, 0x2019, 0xffff, 0x2001, 0x1810, 0x2004, 0xd08c,
-	0x0160, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1130, 0x0026,
-	0x2011, 0x8048, 0x080c, 0x4b05, 0x002e, 0x00fe, 0x005e, 0x004e,
-	0x003e, 0x0005, 0x00b6, 0x00c6, 0x7010, 0x9084, 0xff00, 0x8007,
-	0x9096, 0x0001, 0x0120, 0x9096, 0x0023, 0x1904, 0x8005, 0x9186,
-	0x0023, 0x15c0, 0x080c, 0x829c, 0x0904, 0x8005, 0x6120, 0x9186,
-	0x0001, 0x0150, 0x9186, 0x0004, 0x0138, 0x9186, 0x0008, 0x0120,
-	0x9186, 0x000a, 0x1904, 0x8005, 0x7124, 0x610a, 0x7030, 0x908e,
-	0x0200, 0x1130, 0x2009, 0x0015, 0x080c, 0xaec2, 0x0804, 0x8005,
-	0x908e, 0x0214, 0x0118, 0x908e, 0x0210, 0x1130, 0x2009, 0x0015,
-	0x080c, 0xaec2, 0x0804, 0x8005, 0x908e, 0x0100, 0x1904, 0x8005,
-	0x7034, 0x9005, 0x1904, 0x8005, 0x2009, 0x0016, 0x080c, 0xaec2,
-	0x0804, 0x8005, 0x9186, 0x0022, 0x1904, 0x8005, 0x7030, 0x908e,
-	0x0300, 0x1580, 0x68dc, 0xd0a4, 0x0528, 0xc0b5, 0x68de, 0x7100,
-	0x918c, 0x00ff, 0x697e, 0x7004, 0x6882, 0x00f6, 0x2079, 0x0100,
-	0x79e6, 0x78ea, 0x0006, 0x9084, 0x00ff, 0x0016, 0x2008, 0x080c,
-	0x2887, 0x7932, 0x7936, 0x001e, 0x000e, 0x00fe, 0x080c, 0x283e,
-	0x695e, 0x703c, 0x00e6, 0x2071, 0x0140, 0x7086, 0x2071, 0x1800,
-	0x70b6, 0x00ee, 0x7034, 0x9005, 0x1904, 0x8005, 0x2009, 0x0017,
-	0x0804, 0x7fd2, 0x908e, 0x0400, 0x1190, 0x7034, 0x9005, 0x1904,
-	0x8005, 0x080c, 0x73b0, 0x0120, 0x2009, 0x001d, 0x0804, 0x7fd2,
-	0x68dc, 0xc0a5, 0x68de, 0x2009, 0x0030, 0x0804, 0x7fd2, 0x908e,
-	0x0500, 0x1140, 0x7034, 0x9005, 0x1904, 0x8005, 0x2009, 0x0018,
-	0x0804, 0x7fd2, 0x908e, 0x2010, 0x1120, 0x2009, 0x0019, 0x0804,
-	0x7fd2, 0x908e, 0x2110, 0x1120, 0x2009, 0x001a, 0x0804, 0x7fd2,
-	0x908e, 0x5200, 0x1140, 0x7034, 0x9005, 0x1904, 0x8005, 0x2009,
-	0x001b, 0x0804, 0x7fd2, 0x908e, 0x5000, 0x1140, 0x7034, 0x9005,
-	0x1904, 0x8005, 0x2009, 0x001c, 0x0804, 0x7fd2, 0x908e, 0x1300,
-	0x1120, 0x2009, 0x0034, 0x0804, 0x7fd2, 0x908e, 0x1200, 0x1140,
-	0x7034, 0x9005, 0x1904, 0x8005, 0x2009, 0x0024, 0x0804, 0x7fd2,
-	0x908c, 0xff00, 0x918e, 0x2400, 0x1170, 0x2009, 0x002d, 0x2001,
-	0x1810, 0x2004, 0xd09c, 0x0904, 0x7fd2, 0x080c, 0xd8ea, 0x1904,
-	0x8005, 0x0804, 0x7fd0, 0x908c, 0xff00, 0x918e, 0x5300, 0x1120,
-	0x2009, 0x002a, 0x0804, 0x7fd2, 0x908e, 0x0f00, 0x1120, 0x2009,
-	0x0020, 0x0804, 0x7fd2, 0x908e, 0x6104, 0x1530, 0x2029, 0x0205,
-	0x2011, 0x026d, 0x8208, 0x2204, 0x9082, 0x0004, 0x8004, 0x8004,
-	0x20a8, 0x2011, 0x8015, 0x211c, 0x8108, 0x0046, 0x2124, 0x080c,
-	0x4b05, 0x004e, 0x8108, 0x0f04, 0x7f86, 0x9186, 0x0280, 0x1d88,
-	0x2504, 0x8000, 0x202a, 0x2009, 0x0260, 0x0c58, 0x202b, 0x0000,
-	0x2009, 0x0023, 0x0804, 0x7fd2, 0x908e, 0x6000, 0x1120, 0x2009,
-	0x003f, 0x0804, 0x7fd2, 0x908e, 0x5400, 0x1138, 0x080c, 0x8392,
-	0x1904, 0x8005, 0x2009, 0x0046, 0x04a8, 0x908e, 0x5500, 0x1148,
-	0x080c, 0x83ba, 0x1118, 0x2009, 0x0041, 0x0460, 0x2009, 0x0042,
-	0x0448, 0x908e, 0x7800, 0x1118, 0x2009, 0x0045, 0x0418, 0x908e,
-	0x1000, 0x1118, 0x2009, 0x004e, 0x00e8, 0x908e, 0x6300, 0x1118,
-	0x2009, 0x004a, 0x00b8, 0x908c, 0xff00, 0x918e, 0x5600, 0x1118,
-	0x2009, 0x004f, 0x0078, 0x908c, 0xff00, 0x918e, 0x5700, 0x1118,
-	0x2009, 0x0050, 0x0038, 0x2009, 0x001d, 0x6838, 0xd0d4, 0x0110,
-	0x2009, 0x004c, 0x0016, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c,
-	0x080c, 0x283e, 0x1568, 0x080c, 0x659f, 0x1550, 0xbe12, 0xbd16,
-	0x001e, 0x0016, 0xb8c0, 0x9005, 0x1168, 0x9186, 0x0046, 0x1150,
-	0x687c, 0x9606, 0x1138, 0x6880, 0x9506, 0x9084, 0xff00, 0x1110,
-	0x001e, 0x0098, 0x080c, 0xadf1, 0x01a8, 0x2b08, 0x6112, 0x6023,
-	0x0004, 0x7120, 0x610a, 0x001e, 0x9186, 0x004c, 0x1110, 0x6023,
-	0x000a, 0x0016, 0x001e, 0x080c, 0xaec2, 0x00ce, 0x00be, 0x0005,
-	0x001e, 0x0cd8, 0x2001, 0x180e, 0x2004, 0xd0ec, 0x0120, 0x2011,
-	0x8049, 0x080c, 0x4b05, 0x080c, 0xae95, 0x0d90, 0x2b08, 0x6112,
-	0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x0016, 0x9186, 0x0017,
-	0x0118, 0x9186, 0x0030, 0x1128, 0x6007, 0x0009, 0x6017, 0x2900,
-	0x0020, 0x6007, 0x0051, 0x6017, 0x0000, 0x602f, 0x0009, 0x6003,
-	0x0001, 0x080c, 0x910f, 0x08a0, 0x080c, 0x32dc, 0x1140, 0x7010,
-	0x9084, 0xff00, 0x8007, 0x908e, 0x0008, 0x1108, 0x0009, 0x0005,
-	0x00b6, 0x00c6, 0x0046, 0x7000, 0x908c, 0xff00, 0x810f, 0x9186,
-	0x0033, 0x11e8, 0x080c, 0x829c, 0x0904, 0x8091, 0x7124, 0x610a,
-	0x7030, 0x908e, 0x0200, 0x1140, 0x7034, 0x9005, 0x15d0, 0x2009,
-	0x0015, 0x080c, 0xaec2, 0x04a8, 0x908e, 0x0100, 0x1590, 0x7034,
-	0x9005, 0x1578, 0x2009, 0x0016, 0x080c, 0xaec2, 0x0450, 0x9186,
-	0x0032, 0x1538, 0x7030, 0x908e, 0x1400, 0x1518, 0x2009, 0x0038,
-	0x0016, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x283e,
-	0x11b8, 0x080c, 0x659f, 0x11a0, 0xbe12, 0xbd16, 0x080c, 0xadf1,
-	0x0178, 0x2b08, 0x6112, 0x080c, 0xcf90, 0x6023, 0x0004, 0x7120,
-	0x610a, 0x001e, 0x080c, 0xaec2, 0x080c, 0x9664, 0x0010, 0x00ce,
-	0x001e, 0x004e, 0x00ce, 0x00be, 0x0005, 0x00b6, 0x0046, 0x00e6,
-	0x00d6, 0x2028, 0x2130, 0x9696, 0x00ff, 0x11b8, 0x9592, 0xfffc,
-	0x02a0, 0x9596, 0xfffd, 0x1120, 0x2009, 0x007f, 0x0804, 0x80f3,
-	0x9596, 0xfffe, 0x1120, 0x2009, 0x007e, 0x0804, 0x80f3, 0x9596,
-	0xfffc, 0x1118, 0x2009, 0x0080, 0x04f0, 0x2011, 0x0000, 0x2019,
-	0x1837, 0x231c, 0xd3ac, 0x0130, 0x9026, 0x20a9, 0x0800, 0x2071,
-	0x1000, 0x0030, 0x2021, 0x0081, 0x20a9, 0x077f, 0x2071, 0x1081,
-	0x2e1c, 0x93dd, 0x0000, 0x1140, 0x82ff, 0x11d0, 0x9496, 0x00ff,
-	0x01b8, 0x2410, 0xc2fd, 0x00a0, 0xbf10, 0x2600, 0x9706, 0xb814,
-	0x1120, 0x9546, 0x1110, 0x2408, 0x00b0, 0x9745, 0x1148, 0x94c6,
-	0x007e, 0x0130, 0x94c6, 0x007f, 0x0118, 0x94c6, 0x0080, 0x1d20,
-	0x8420, 0x8e70, 0x1f04, 0x80c8, 0x82ff, 0x1118, 0x9085, 0x0001,
-	0x0018, 0xc2fc, 0x2208, 0x9006, 0x00de, 0x00ee, 0x004e, 0x00be,
-	0x0005, 0x7000, 0x908c, 0xff00, 0x810f, 0x9184, 0x000f, 0x0002,
-	0x8110, 0x8110, 0x8110, 0x82ae, 0x8110, 0x8119, 0x8144, 0x81d2,
-	0x8110, 0x8110, 0x8110, 0x8110, 0x8110, 0x8110, 0x8110, 0x8110,
-	0x7817, 0x0140, 0x2001, 0x19f0, 0x2004, 0x9005, 0x090c, 0x9664,
-	0x0005, 0x00b6, 0x7110, 0xd1bc, 0x01e8, 0x7120, 0x2160, 0x9c8c,
-	0x0007, 0x11c0, 0x9c8a, 0x1cd0, 0x02a8, 0x6868, 0x9c02, 0x1290,
-	0x7008, 0x9084, 0x00ff, 0x6110, 0x2158, 0xb910, 0x9106, 0x1150,
-	0x700c, 0xb914, 0x9106, 0x1130, 0x7124, 0x610a, 0x2009, 0x0046,
-	0x080c, 0xaec2, 0x7817, 0x0140, 0x2001, 0x19f0, 0x2004, 0x9005,
-	0x090c, 0x9664, 0x00be, 0x0005, 0x00b6, 0x00c6, 0x9484, 0x0fff,
-	0x0904, 0x81a8, 0x7110, 0xd1bc, 0x1904, 0x81a8, 0x7108, 0x700c,
-	0x2028, 0x918c, 0x00ff, 0x2130, 0x9094, 0xff00, 0x15b0, 0x81ff,
-	0x15a0, 0x9080, 0x331e, 0x200d, 0x918c, 0xff00, 0x810f, 0x2001,
-	0x0080, 0x9106, 0x0904, 0x81a8, 0x080c, 0x659f, 0x1904, 0x81a8,
-	0xbe12, 0xbd16, 0xb800, 0xd0ec, 0x15d8, 0xba04, 0x9294, 0xff00,
-	0x9286, 0x0600, 0x11a0, 0x080c, 0xadf1, 0x05e8, 0x2b08, 0x7028,
-	0x604a, 0x702c, 0x6046, 0x6112, 0x6023, 0x0006, 0x7120, 0x610a,
-	0x7130, 0x6156, 0x2009, 0x0044, 0x080c, 0xdb44, 0x0408, 0x080c,
-	0x696a, 0x1138, 0xb807, 0x0606, 0x0c30, 0x190c, 0x8095, 0x11c0,
-	0x0898, 0x080c, 0xadf1, 0x2b08, 0x0198, 0x6112, 0x6023, 0x0004,
-	0x7120, 0x610a, 0x9286, 0x0400, 0x1118, 0x6007, 0x0005, 0x0010,
-	0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x910f, 0x080c, 0x9664,
-	0x7817, 0x0140, 0x2001, 0x19f0, 0x2004, 0x9005, 0x090c, 0x9664,
-	0x00ce, 0x00be, 0x0005, 0x2001, 0x180e, 0x2004, 0xd0ec, 0x0120,
-	0x2011, 0x8049, 0x080c, 0x4b05, 0x080c, 0xae95, 0x0d48, 0x2b08,
-	0x6112, 0x6023, 0x0006, 0x7120, 0x610a, 0x7130, 0x6156, 0x6017,
-	0xf300, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x90c7, 0x080c,
-	0x9664, 0x08b0, 0x00b6, 0x7110, 0xd1bc, 0x01e8, 0x7020, 0x2060,
-	0x9c84, 0x0007, 0x11c0, 0x9c82, 0x1cd0, 0x02a8, 0x6868, 0x9c02,
+	0x001a, 0x1210, 0x002b, 0x0c50, 0x00e9, 0x080c, 0x7c90, 0x0005,
+	0x7802, 0x780e, 0x79e3, 0x7802, 0x780e, 0x7802, 0x780e, 0x780e,
+	0x7802, 0x780e, 0x79e3, 0x780e, 0x780e, 0x780e, 0x780e, 0x780e,
+	0x7802, 0x780e, 0x79e3, 0x7802, 0x7802, 0x780e, 0x7802, 0x7802,
+	0x7802, 0x780e, 0x00e6, 0x2071, 0x18fa, 0x2009, 0x0400, 0x0071,
+	0x00ee, 0x0005, 0x2009, 0x1000, 0x0049, 0x0005, 0x2009, 0x2000,
+	0x0029, 0x0005, 0x2009, 0x0800, 0x0009, 0x0005, 0x7007, 0x0001,
+	0xa868, 0x9084, 0x00ff, 0x9105, 0xa86a, 0x0126, 0x2091, 0x8000,
+	0x080c, 0x6c81, 0x012e, 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff,
+	0x0d08, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, 0x7985, 0x7007,
+	0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, 0x7985, 0x0005,
+	0xa864, 0x8007, 0x9084, 0x00ff, 0x0968, 0x8001, 0x1120, 0x7007,
+	0x0001, 0x0804, 0x79a0, 0x7007, 0x0003, 0x7012, 0x2900, 0x7016,
+	0x701a, 0x704b, 0x79a0, 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff,
+	0x0904, 0x780a, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, 0x79bc,
+	0x7007, 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, 0x79bc,
+	0x0005, 0xa864, 0x8007, 0x9084, 0x00ff, 0x9086, 0x0001, 0x1904,
+	0x780a, 0x7007, 0x0001, 0x2009, 0x1834, 0x210c, 0x81ff, 0x11a8,
+	0xa868, 0x9084, 0x00ff, 0xa86a, 0xa883, 0x0000, 0x080c, 0x62ae,
+	0x1108, 0x0005, 0x0126, 0x2091, 0x8000, 0xa867, 0x0139, 0xa87a,
+	0xa982, 0x080c, 0x6c81, 0x012e, 0x0ca0, 0xa994, 0x9186, 0x0071,
+	0x0d38, 0x9186, 0x0064, 0x0d20, 0x9186, 0x007c, 0x0d08, 0x9186,
+	0x0028, 0x09f0, 0x9186, 0x0038, 0x09d8, 0x9186, 0x0078, 0x09c0,
+	0x9186, 0x005f, 0x09a8, 0x9186, 0x0056, 0x0990, 0xa897, 0x4005,
+	0xa89b, 0x0001, 0x2001, 0x0030, 0x900e, 0x08a0, 0xa87c, 0x9084,
+	0x00c0, 0x9086, 0x00c0, 0x1120, 0x7007, 0x0001, 0x0804, 0x7bb1,
+	0x2900, 0x7016, 0x701a, 0x20a9, 0x0004, 0xa860, 0x20e0, 0xa85c,
+	0x9080, 0x0030, 0x2098, 0x7050, 0x2040, 0xa060, 0x20e8, 0xa05c,
+	0x9080, 0x0023, 0x20a0, 0x4003, 0xa888, 0x7012, 0x9082, 0x0401,
+	0x1a04, 0x7812, 0xaab4, 0x928a, 0x0002, 0x1a04, 0x7812, 0x82ff,
+	0x1138, 0xa8b8, 0xa9bc, 0x9105, 0x0118, 0x2001, 0x7943, 0x0018,
+	0x9280, 0x7939, 0x2005, 0x7056, 0x7010, 0x9015, 0x0904, 0x7924,
+	0x080c, 0x1018, 0x1118, 0x7007, 0x0004, 0x0005, 0x2900, 0x7022,
+	0x7054, 0x2060, 0xe000, 0xa866, 0x7050, 0x2040, 0xa95c, 0xe004,
+	0x9100, 0xa076, 0xa860, 0xa072, 0xe008, 0x920a, 0x1210, 0x900e,
+	0x2200, 0x7112, 0xe20c, 0x8003, 0x800b, 0x9296, 0x0004, 0x0108,
+	0x9108, 0xa17a, 0x810b, 0xa17e, 0x080c, 0x10e9, 0xa06c, 0x908e,
+	0x0100, 0x0170, 0x9086, 0x0200, 0x0118, 0x7007, 0x0007, 0x0005,
+	0x7020, 0x2048, 0x080c, 0x1031, 0x7014, 0x2048, 0x0804, 0x7812,
+	0x7020, 0x2048, 0x7018, 0xa802, 0xa807, 0x0000, 0x2908, 0x2048,
+	0xa906, 0x711a, 0x0804, 0x78dc, 0x7014, 0x2048, 0x7007, 0x0001,
+	0xa8b4, 0x9005, 0x1128, 0xa8b8, 0xa9bc, 0x9105, 0x0108, 0x00b9,
+	0xa864, 0x9084, 0x00ff, 0x9086, 0x001e, 0x0904, 0x7bb1, 0x0804,
+	0x7985, 0x793b, 0x793f, 0x0002, 0x001d, 0x0007, 0x0004, 0x000a,
+	0x001b, 0x0005, 0x0006, 0x000a, 0x001d, 0x0005, 0x0004, 0x0076,
+	0x0066, 0xafb8, 0xaebc, 0xa804, 0x2050, 0xb0c0, 0xb0e2, 0xb0bc,
+	0xb0de, 0xb0b8, 0xb0d2, 0xb0b4, 0xb0ce, 0xb6da, 0xb7d6, 0xb0b0,
+	0xb0ca, 0xb0ac, 0xb0c6, 0xb0a8, 0xb0ba, 0xb0a4, 0xb0b6, 0xb6c2,
+	0xb7be, 0xb0a0, 0xb0b2, 0xb09c, 0xb0ae, 0xb098, 0xb0a2, 0xb094,
+	0xb09e, 0xb6aa, 0xb7a6, 0xb090, 0xb09a, 0xb08c, 0xb096, 0xb088,
+	0xb08a, 0xb084, 0xb086, 0xb692, 0xb78e, 0xb080, 0xb082, 0xb07c,
+	0xb07e, 0xb078, 0xb072, 0xb074, 0xb06e, 0xb67a, 0xb776, 0xb004,
+	0x9055, 0x1958, 0x006e, 0x007e, 0x0005, 0x2009, 0x1834, 0x210c,
+	0x81ff, 0x1178, 0x080c, 0x60ae, 0x1108, 0x0005, 0x080c, 0x6ec0,
+	0x0126, 0x2091, 0x8000, 0x080c, 0xce24, 0x080c, 0x6c81, 0x012e,
+	0x0ca0, 0x080c, 0xd229, 0x1d70, 0x2001, 0x0028, 0x900e, 0x0c70,
+	0x2009, 0x1834, 0x210c, 0x81ff, 0x1188, 0xa888, 0x9005, 0x0188,
+	0xa883, 0x0000, 0x080c, 0x613e, 0x1108, 0x0005, 0xa87a, 0x0126,
+	0x2091, 0x8000, 0x080c, 0x6c81, 0x012e, 0x0cb8, 0x2001, 0x0028,
+	0x0ca8, 0x2001, 0x0000, 0x0c90, 0x2009, 0x1834, 0x210c, 0x81ff,
+	0x11d8, 0xa888, 0x9005, 0x01e0, 0xa883, 0x0000, 0xa87c, 0xd0f4,
+	0x0120, 0x080c, 0x6210, 0x1138, 0x0005, 0x9006, 0xa87a, 0x080c,
+	0x618b, 0x1108, 0x0005, 0x0126, 0x2091, 0x8000, 0xa87a, 0xa982,
+	0x080c, 0x6c81, 0x012e, 0x0cb0, 0x2001, 0x0028, 0x900e, 0x0c98,
+	0x2001, 0x0000, 0x0c80, 0x7018, 0xa802, 0x2908, 0x2048, 0xa906,
+	0x711a, 0x7010, 0x8001, 0x7012, 0x0118, 0x7007, 0x0003, 0x0030,
+	0x7014, 0x2048, 0x7007, 0x0001, 0x7048, 0x080f, 0x0005, 0x00b6,
+	0x7007, 0x0001, 0xa974, 0xa878, 0x9084, 0x00ff, 0x9096, 0x0004,
+	0x0540, 0x20a9, 0x0001, 0x9096, 0x0001, 0x0190, 0x900e, 0x20a9,
+	0x0800, 0x9096, 0x0002, 0x0160, 0x9005, 0x11d8, 0xa974, 0x080c,
+	0x65ff, 0x11b8, 0x0066, 0xae80, 0x080c, 0x670f, 0x006e, 0x0088,
+	0x0046, 0x2011, 0x180c, 0x2224, 0xc484, 0x2412, 0x004e, 0x00c6,
+	0x080c, 0x65ff, 0x1110, 0x080c, 0x680f, 0x8108, 0x1f04, 0x7a20,
+	0x00ce, 0xa87c, 0xd084, 0x1120, 0x080c, 0x1031, 0x00be, 0x0005,
+	0x0126, 0x2091, 0x8000, 0x080c, 0x6c81, 0x012e, 0x00be, 0x0005,
+	0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x080c, 0x696e, 0x0580,
+	0x2061, 0x1a71, 0x6100, 0xd184, 0x0178, 0xa888, 0x9084, 0x00ff,
+	0x1550, 0x6000, 0xd084, 0x0520, 0x6004, 0x9005, 0x1538, 0x6003,
+	0x0000, 0x600b, 0x0000, 0x00c8, 0x2011, 0x0001, 0xa890, 0x9005,
+	0x1110, 0x2001, 0x001e, 0x8000, 0x6016, 0xa888, 0x9084, 0x00ff,
+	0x0178, 0x6006, 0xa888, 0x8007, 0x9084, 0x00ff, 0x0148, 0x600a,
+	0xa888, 0x8000, 0x1108, 0xc28d, 0x6202, 0x012e, 0x0804, 0x7c7a,
+	0x012e, 0x0804, 0x7c74, 0x012e, 0x0804, 0x7c6e, 0x012e, 0x0804,
+	0x7c71, 0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x080c, 0x696e,
+	0x05e0, 0x2061, 0x1a71, 0x6000, 0xd084, 0x05b8, 0x6204, 0x6308,
+	0xd08c, 0x1530, 0xac78, 0x9484, 0x0003, 0x0170, 0xa988, 0x918c,
+	0x00ff, 0x8001, 0x1120, 0x2100, 0x9210, 0x0620, 0x0028, 0x8001,
+	0x1508, 0x2100, 0x9212, 0x02f0, 0x9484, 0x000c, 0x0188, 0xa988,
+	0x810f, 0x918c, 0x00ff, 0x9082, 0x0004, 0x1120, 0x2100, 0x9318,
+	0x0288, 0x0030, 0x9082, 0x0004, 0x1168, 0x2100, 0x931a, 0x0250,
+	0xa890, 0x9005, 0x0110, 0x8000, 0x6016, 0x6206, 0x630a, 0x012e,
+	0x0804, 0x7c7a, 0x012e, 0x0804, 0x7c77, 0x012e, 0x0804, 0x7c74,
+	0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x2061, 0x1a71, 0x6300,
+	0xd38c, 0x1120, 0x6308, 0x8318, 0x0220, 0x630a, 0x012e, 0x0804,
+	0x7c88, 0x012e, 0x0804, 0x7c77, 0x00b6, 0x0126, 0x00c6, 0x2091,
+	0x8000, 0x7007, 0x0001, 0xa87c, 0xd0ac, 0x0148, 0x00c6, 0x2061,
+	0x1a71, 0x6000, 0x9084, 0xfcff, 0x6002, 0x00ce, 0x0440, 0xa888,
+	0x9005, 0x05d8, 0xa88c, 0x9065, 0x0598, 0x2001, 0x1834, 0x2004,
+	0x9005, 0x0118, 0x080c, 0xae92, 0x0068, 0x6017, 0xf400, 0x605b,
+	0x0000, 0xa97c, 0xd1a4, 0x0110, 0xa980, 0x615a, 0x2009, 0x0041,
+	0x080c, 0xaedc, 0xa988, 0x918c, 0xff00, 0x9186, 0x2000, 0x1138,
+	0x0026, 0x900e, 0x2011, 0xfdff, 0x080c, 0x86dd, 0x002e, 0xa87c,
+	0xd0c4, 0x0148, 0x2061, 0x1a71, 0x6000, 0xd08c, 0x1120, 0x6008,
+	0x8000, 0x0208, 0x600a, 0x00ce, 0x012e, 0x00be, 0x0804, 0x7c7a,
+	0x00ce, 0x012e, 0x00be, 0x0804, 0x7c74, 0xa984, 0x9186, 0x002e,
+	0x0d30, 0x9186, 0x002d, 0x0d18, 0x9186, 0x0045, 0x0510, 0x9186,
+	0x002a, 0x1130, 0x2001, 0x180c, 0x200c, 0xc194, 0x2102, 0x08b8,
+	0x9186, 0x0020, 0x0158, 0x9186, 0x0029, 0x1d10, 0xa974, 0x080c,
+	0x65ff, 0x1968, 0xb800, 0xc0e4, 0xb802, 0x0848, 0xa88c, 0x9065,
+	0x09b8, 0x6007, 0x0024, 0x2001, 0x1986, 0x2004, 0x601a, 0x0804,
+	0x7b0f, 0xa88c, 0x9065, 0x0960, 0x00e6, 0xa890, 0x9075, 0x2001,
+	0x1834, 0x2004, 0x9005, 0x0150, 0x080c, 0xae92, 0x8eff, 0x0118,
+	0x2e60, 0x080c, 0xae92, 0x00ee, 0x0804, 0x7b0f, 0x6024, 0xc0dc,
+	0xc0d5, 0x6026, 0x2e60, 0x6007, 0x003a, 0xa8a0, 0x9005, 0x0130,
+	0x6007, 0x003b, 0xa8a4, 0x602e, 0xa8a8, 0x6016, 0x6003, 0x0001,
+	0x080c, 0x90f0, 0x080c, 0x968d, 0x00ee, 0x0804, 0x7b0f, 0x2061,
+	0x1a71, 0x6000, 0xd084, 0x0190, 0xd08c, 0x1904, 0x7c88, 0x0126,
+	0x2091, 0x8000, 0x6204, 0x8210, 0x0220, 0x6206, 0x012e, 0x0804,
+	0x7c88, 0x012e, 0xa883, 0x0016, 0x0804, 0x7c81, 0xa883, 0x0007,
+	0x0804, 0x7c81, 0xa864, 0x8007, 0x9084, 0x00ff, 0x0130, 0x8001,
+	0x1138, 0x7007, 0x0001, 0x0069, 0x0005, 0x080c, 0x780a, 0x0040,
+	0x7007, 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, 0x7bb1,
+	0x0005, 0x00b6, 0x00e6, 0x0126, 0x2091, 0x8000, 0x903e, 0x2061,
+	0x1800, 0x61d0, 0x81ff, 0x1904, 0x7c33, 0x6130, 0xd194, 0x1904,
+	0x7c5d, 0xa878, 0x2070, 0x9e82, 0x1cd0, 0x0a04, 0x7c27, 0x6068,
+	0x9e02, 0x1a04, 0x7c27, 0x7120, 0x9186, 0x0006, 0x1904, 0x7c19,
+	0x7010, 0x905d, 0x0904, 0x7c33, 0xb800, 0xd0e4, 0x1904, 0x7c57,
+	0x2061, 0x1a71, 0x6100, 0x9184, 0x0301, 0x9086, 0x0001, 0x15a0,
+	0x7024, 0xd0dc, 0x1904, 0x7c60, 0xa883, 0x0000, 0xa803, 0x0000,
+	0x2908, 0x7014, 0x9005, 0x1198, 0x7116, 0xa87c, 0xd0f4, 0x1904,
+	0x7c63, 0x080c, 0x56cf, 0xd09c, 0x1118, 0xa87c, 0xc0cc, 0xa87e,
+	0x2e60, 0x080c, 0x85fd, 0x012e, 0x00ee, 0x00be, 0x0005, 0x2048,
+	0xa800, 0x9005, 0x1de0, 0xa902, 0x2148, 0xa87c, 0xd0f4, 0x1904,
+	0x7c63, 0x012e, 0x00ee, 0x00be, 0x0005, 0x012e, 0x00ee, 0xa883,
+	0x0006, 0x00be, 0x0804, 0x7c81, 0xd184, 0x0db8, 0xd1c4, 0x1190,
+	0x00a0, 0xa974, 0x080c, 0x65ff, 0x15d0, 0xb800, 0xd0e4, 0x15b8,
+	0x7120, 0x9186, 0x0007, 0x1118, 0xa883, 0x0002, 0x0490, 0xa883,
+	0x0008, 0x0478, 0xa883, 0x000e, 0x0460, 0xa883, 0x0017, 0x0448,
+	0xa883, 0x0035, 0x0430, 0x080c, 0x56d3, 0xd0fc, 0x01e8, 0xa878,
+	0x2070, 0x9e82, 0x1cd0, 0x02c0, 0x6068, 0x9e02, 0x12a8, 0x7120,
+	0x9186, 0x0006, 0x1188, 0x7010, 0x905d, 0x0170, 0xb800, 0xd0bc,
+	0x0158, 0x2039, 0x0001, 0x7000, 0x9086, 0x0007, 0x1904, 0x7bbd,
+	0x7003, 0x0002, 0x0804, 0x7bbd, 0xa883, 0x0028, 0x0010, 0xa883,
+	0x0029, 0x012e, 0x00ee, 0x00be, 0x0420, 0xa883, 0x002a, 0x0cc8,
+	0xa883, 0x0045, 0x0cb0, 0x2e60, 0x2019, 0x0002, 0x601b, 0x0014,
+	0x080c, 0xe134, 0x012e, 0x00ee, 0x00be, 0x0005, 0x2009, 0x003e,
+	0x0058, 0x2009, 0x0004, 0x0040, 0x2009, 0x0006, 0x0028, 0x2009,
+	0x0016, 0x0010, 0x2009, 0x0001, 0xa884, 0x9084, 0xff00, 0x9105,
+	0xa886, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c81, 0x012e, 0x0005,
+	0x080c, 0x1031, 0x0005, 0x00d6, 0x080c, 0x85f4, 0x00de, 0x0005,
+	0x00d6, 0x00e6, 0x0126, 0x2091, 0x8000, 0x2071, 0x0040, 0x702c,
+	0xd084, 0x01d8, 0x908c, 0x0780, 0x190c, 0x7d72, 0xd09c, 0x11a8,
+	0x2071, 0x1800, 0x70c0, 0x90ea, 0x0020, 0x0278, 0x8001, 0x70c2,
+	0x702c, 0x2048, 0xa800, 0x702e, 0x9006, 0xa802, 0xa806, 0x2071,
+	0x0040, 0x2900, 0x7022, 0x702c, 0x0c28, 0x012e, 0x00ee, 0x00de,
+	0x0005, 0x0006, 0x9084, 0x0780, 0x190c, 0x7d72, 0x000e, 0x0005,
+	0xa898, 0x9084, 0x0003, 0x05a8, 0x080c, 0xae0b, 0x05d8, 0x2900,
+	0x6016, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0035, 0x1138, 0x6008,
+	0xc0fd, 0x600a, 0x2001, 0x196b, 0x2004, 0x0098, 0xa8a0, 0x9084,
+	0x00ff, 0xa99c, 0x918c, 0xff00, 0x9105, 0xa99c, 0x918c, 0x00ff,
+	0x080c, 0x283e, 0x1540, 0x00b6, 0x080c, 0x65ff, 0x2b00, 0x00be,
+	0x1510, 0x6012, 0x6023, 0x0001, 0x2009, 0x0040, 0xa864, 0x9084,
+	0x00ff, 0x9086, 0x0035, 0x0110, 0x2009, 0x0041, 0x080c, 0xaedc,
+	0x0005, 0xa87b, 0x0101, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c81,
+	0x012e, 0x0005, 0xa87b, 0x002c, 0x0126, 0x2091, 0x8000, 0x080c,
+	0x6c81, 0x012e, 0x0005, 0xa87b, 0x0028, 0x0126, 0x2091, 0x8000,
+	0x080c, 0x6c81, 0x012e, 0x080c, 0xae61, 0x0005, 0x00d6, 0x00c6,
+	0x0036, 0x0026, 0x0016, 0x00b6, 0x7007, 0x0001, 0xaa74, 0x9282,
+	0x0004, 0x1a04, 0x7d63, 0xa97c, 0x9188, 0x1000, 0x2104, 0x905d,
+	0xb804, 0xd284, 0x0140, 0x05e8, 0x8007, 0x9084, 0x00ff, 0x9084,
+	0x0006, 0x1108, 0x04b0, 0x2b10, 0x080c, 0xae0b, 0x1118, 0x080c,
+	0xaeaf, 0x05a8, 0x6212, 0xa874, 0x0002, 0x7d41, 0x7d46, 0x7d49,
+	0x7d4f, 0x2019, 0x0002, 0x080c, 0xe522, 0x0060, 0x080c, 0xe4be,
+	0x0048, 0x2019, 0x0002, 0xa980, 0x080c, 0xe4d9, 0x0018, 0xa980,
+	0x080c, 0xe4be, 0x080c, 0xae61, 0xa887, 0x0000, 0x0126, 0x2091,
+	0x8000, 0x080c, 0x6c81, 0x012e, 0x00be, 0x001e, 0x002e, 0x003e,
+	0x00ce, 0x00de, 0x0005, 0xa887, 0x0006, 0x0c80, 0xa887, 0x0002,
+	0x0c68, 0xa887, 0x0005, 0x0c50, 0xa887, 0x0004, 0x0c38, 0xa887,
+	0x0007, 0x0c20, 0x2091, 0x8000, 0x0e04, 0x7d74, 0x0006, 0x0016,
+	0x2001, 0x8003, 0x0006, 0x0804, 0x0dde, 0x2001, 0x1834, 0x2004,
+	0x9005, 0x0005, 0x0005, 0x00f6, 0x2079, 0x0300, 0x2001, 0x0200,
+	0x200c, 0xc1e5, 0xc1dc, 0x2102, 0x2009, 0x0218, 0x210c, 0xd1ec,
+	0x1120, 0x080c, 0x157d, 0x00fe, 0x0005, 0x2001, 0x020d, 0x2003,
+	0x0020, 0x781f, 0x0300, 0x00fe, 0x0005, 0x781c, 0xd08c, 0x0904,
+	0x7df4, 0x68c0, 0x90aa, 0x0005, 0x0a04, 0x840b, 0x7d44, 0x7c40,
+	0x9584, 0x00f6, 0x1510, 0x9484, 0x7000, 0x0140, 0x908a, 0x2000,
+	0x1260, 0x9584, 0x0700, 0x8007, 0x0804, 0x7dfb, 0x7000, 0x9084,
+	0xff00, 0x9086, 0x8100, 0x0da8, 0x00b0, 0x9484, 0x0fff, 0x1130,
+	0x7000, 0x9084, 0xff00, 0x9086, 0x8100, 0x11c0, 0x080c, 0xe9c1,
+	0x080c, 0x8300, 0x7817, 0x0140, 0x00a8, 0x9584, 0x0076, 0x1118,
+	0x080c, 0x835e, 0x19c0, 0xd5a4, 0x0148, 0x0046, 0x0056, 0x080c,
+	0x7e56, 0x080c, 0x2337, 0x005e, 0x004e, 0x0020, 0x080c, 0xe9c1,
+	0x7817, 0x0140, 0x080c, 0x73bc, 0x0168, 0x2001, 0x0111, 0x2004,
+	0xd08c, 0x0140, 0x6893, 0x0000, 0x2001, 0x0110, 0x2003, 0x0008,
+	0x2003, 0x0000, 0x080c, 0x7e37, 0x2001, 0x19f0, 0x2004, 0x9005,
+	0x090c, 0x968d, 0x0005, 0x0002, 0x7e0d, 0x8122, 0x7e04, 0x7e04,
+	0x7e04, 0x7e04, 0x7e04, 0x7e04, 0x7817, 0x0140, 0x2001, 0x19f0,
+	0x2004, 0x9005, 0x090c, 0x968d, 0x0005, 0x7000, 0x908c, 0xff00,
+	0x9194, 0xf000, 0x810f, 0x9484, 0x0fff, 0x6892, 0x9286, 0x2000,
+	0x1150, 0x6800, 0x9086, 0x0001, 0x1118, 0x080c, 0x5730, 0x0070,
+	0x080c, 0x7e76, 0x0058, 0x9286, 0x3000, 0x1118, 0x080c, 0x805d,
+	0x0028, 0x9286, 0x8000, 0x1110, 0x080c, 0x8230, 0x7817, 0x0140,
+	0x2001, 0x19f0, 0x2004, 0x9005, 0x090c, 0x968d, 0x0005, 0x2001,
+	0x1810, 0x2004, 0xd08c, 0x0178, 0x2001, 0x1800, 0x2004, 0x9086,
+	0x0003, 0x1148, 0x0026, 0x0036, 0x2011, 0x8048, 0x2518, 0x080c,
+	0x4b04, 0x003e, 0x002e, 0x0005, 0x0036, 0x0046, 0x0056, 0x00f6,
+	0x2079, 0x0200, 0x2019, 0xfffe, 0x7c30, 0x0050, 0x0036, 0x0046,
+	0x0056, 0x00f6, 0x2079, 0x0200, 0x7d44, 0x7c40, 0x2019, 0xffff,
+	0x2001, 0x1810, 0x2004, 0xd08c, 0x0160, 0x2001, 0x1800, 0x2004,
+	0x9086, 0x0003, 0x1130, 0x0026, 0x2011, 0x8048, 0x080c, 0x4b04,
+	0x002e, 0x00fe, 0x005e, 0x004e, 0x003e, 0x0005, 0x00b6, 0x00c6,
+	0x7010, 0x9084, 0xff00, 0x8007, 0x9096, 0x0001, 0x0120, 0x9096,
+	0x0023, 0x1904, 0x802e, 0x9186, 0x0023, 0x15c0, 0x080c, 0x82c5,
+	0x0904, 0x802e, 0x6120, 0x9186, 0x0001, 0x0150, 0x9186, 0x0004,
+	0x0138, 0x9186, 0x0008, 0x0120, 0x9186, 0x000a, 0x1904, 0x802e,
+	0x7124, 0x610a, 0x7030, 0x908e, 0x0200, 0x1130, 0x2009, 0x0015,
+	0x080c, 0xaedc, 0x0804, 0x802e, 0x908e, 0x0214, 0x0118, 0x908e,
+	0x0210, 0x1130, 0x2009, 0x0015, 0x080c, 0xaedc, 0x0804, 0x802e,
+	0x908e, 0x0100, 0x1904, 0x802e, 0x7034, 0x9005, 0x1904, 0x802e,
+	0x2009, 0x0016, 0x080c, 0xaedc, 0x0804, 0x802e, 0x9186, 0x0022,
+	0x1904, 0x802e, 0x7030, 0x908e, 0x0300, 0x1580, 0x68dc, 0xd0a4,
+	0x0528, 0xc0b5, 0x68de, 0x7100, 0x918c, 0x00ff, 0x697e, 0x7004,
+	0x6882, 0x00f6, 0x2079, 0x0100, 0x79e6, 0x78ea, 0x0006, 0x9084,
+	0x00ff, 0x0016, 0x2008, 0x080c, 0x2887, 0x7932, 0x7936, 0x001e,
+	0x000e, 0x00fe, 0x080c, 0x283e, 0x695e, 0x703c, 0x00e6, 0x2071,
+	0x0140, 0x7086, 0x2071, 0x1800, 0x70b6, 0x00ee, 0x7034, 0x9005,
+	0x1904, 0x802e, 0x2009, 0x0017, 0x0804, 0x7fde, 0x908e, 0x0400,
+	0x1190, 0x7034, 0x9005, 0x1904, 0x802e, 0x080c, 0x73bc, 0x0120,
+	0x2009, 0x001d, 0x0804, 0x7fde, 0x68dc, 0xc0a5, 0x68de, 0x2009,
+	0x0030, 0x0804, 0x7fde, 0x908e, 0x0500, 0x1140, 0x7034, 0x9005,
+	0x1904, 0x802e, 0x2009, 0x0018, 0x0804, 0x7fde, 0x908e, 0x2010,
+	0x1120, 0x2009, 0x0019, 0x0804, 0x7fde, 0x908e, 0x2110, 0x1120,
+	0x2009, 0x001a, 0x0804, 0x7fde, 0x908e, 0x5200, 0x1140, 0x7034,
+	0x9005, 0x1904, 0x802e, 0x2009, 0x001b, 0x0804, 0x7fde, 0x908e,
+	0x5000, 0x1140, 0x7034, 0x9005, 0x1904, 0x802e, 0x2009, 0x001c,
+	0x0804, 0x7fde, 0x908e, 0x1300, 0x1120, 0x2009, 0x0034, 0x0804,
+	0x7fde, 0x908e, 0x1200, 0x1140, 0x7034, 0x9005, 0x1904, 0x802e,
+	0x2009, 0x0024, 0x0804, 0x7fde, 0x908c, 0xff00, 0x918e, 0x2400,
+	0x1170, 0x2009, 0x002d, 0x2001, 0x1810, 0x2004, 0xd09c, 0x0904,
+	0x7fde, 0x080c, 0xd905, 0x1904, 0x802e, 0x0804, 0x7fdc, 0x908c,
+	0xff00, 0x918e, 0x5300, 0x1120, 0x2009, 0x002a, 0x0804, 0x7fde,
+	0x908e, 0x0f00, 0x1120, 0x2009, 0x0020, 0x0804, 0x7fde, 0x908e,
+	0x6104, 0x1530, 0x2029, 0x0205, 0x2011, 0x026d, 0x8208, 0x2204,
+	0x9082, 0x0004, 0x8004, 0x8004, 0x20a8, 0x2011, 0x8015, 0x211c,
+	0x8108, 0x0046, 0x2124, 0x080c, 0x4b04, 0x004e, 0x8108, 0x0f04,
+	0x7f92, 0x9186, 0x0280, 0x1d88, 0x2504, 0x8000, 0x202a, 0x2009,
+	0x0260, 0x0c58, 0x202b, 0x0000, 0x2009, 0x0023, 0x0804, 0x7fde,
+	0x908e, 0x6000, 0x1120, 0x2009, 0x003f, 0x0804, 0x7fde, 0x908e,
+	0x5400, 0x1138, 0x080c, 0x83bb, 0x1904, 0x802e, 0x2009, 0x0046,
+	0x04a8, 0x908e, 0x5500, 0x1148, 0x080c, 0x83e3, 0x1118, 0x2009,
+	0x0041, 0x0460, 0x2009, 0x0042, 0x0448, 0x908e, 0x7800, 0x1118,
+	0x2009, 0x0045, 0x0418, 0x908e, 0x1000, 0x1118, 0x2009, 0x004e,
+	0x00e8, 0x908e, 0x6300, 0x1118, 0x2009, 0x004a, 0x00b8, 0x908c,
+	0xff00, 0x918e, 0x5600, 0x1118, 0x2009, 0x004f, 0x0078, 0x908c,
+	0xff00, 0x918e, 0x5700, 0x1118, 0x2009, 0x0050, 0x0038, 0x2009,
+	0x001d, 0x6838, 0xd0d4, 0x0110, 0x2009, 0x004c, 0x0016, 0x2011,
+	0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x283e, 0x1904, 0x8031,
+	0x080c, 0x659e, 0x1904, 0x8031, 0xbe12, 0xbd16, 0x001e, 0x0016,
+	0x080c, 0x73bc, 0x01c0, 0x68dc, 0xd08c, 0x1148, 0x7000, 0x9084,
+	0x00ff, 0x1188, 0x7004, 0x9084, 0xff00, 0x1168, 0x0040, 0x687c,
+	0x9606, 0x1148, 0x6880, 0x9506, 0x9084, 0xff00, 0x1120, 0x9584,
+	0x00ff, 0xb8c2, 0x0080, 0xb8c0, 0x9005, 0x1168, 0x9186, 0x0046,
+	0x1150, 0x687c, 0x9606, 0x1138, 0x6880, 0x9506, 0x9084, 0xff00,
+	0x1110, 0x001e, 0x0098, 0x080c, 0xae0b, 0x01a8, 0x2b08, 0x6112,
+	0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x9186, 0x004c, 0x1110,
+	0x6023, 0x000a, 0x0016, 0x001e, 0x080c, 0xaedc, 0x00ce, 0x00be,
+	0x0005, 0x001e, 0x0cd8, 0x2001, 0x180e, 0x2004, 0xd0ec, 0x0120,
+	0x2011, 0x8049, 0x080c, 0x4b04, 0x080c, 0xaeaf, 0x0d90, 0x2b08,
+	0x6112, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x0016, 0x9186,
+	0x0017, 0x0118, 0x9186, 0x0030, 0x1128, 0x6007, 0x0009, 0x6017,
+	0x2900, 0x0020, 0x6007, 0x0051, 0x6017, 0x0000, 0x602f, 0x0009,
+	0x6003, 0x0001, 0x080c, 0x9138, 0x08a0, 0x080c, 0x32e3, 0x1140,
+	0x7010, 0x9084, 0xff00, 0x8007, 0x908e, 0x0008, 0x1108, 0x0009,
+	0x0005, 0x00b6, 0x00c6, 0x0046, 0x7000, 0x908c, 0xff00, 0x810f,
+	0x9186, 0x0033, 0x11e8, 0x080c, 0x82c5, 0x0904, 0x80ba, 0x7124,
+	0x610a, 0x7030, 0x908e, 0x0200, 0x1140, 0x7034, 0x9005, 0x15d0,
+	0x2009, 0x0015, 0x080c, 0xaedc, 0x04a8, 0x908e, 0x0100, 0x1590,
+	0x7034, 0x9005, 0x1578, 0x2009, 0x0016, 0x080c, 0xaedc, 0x0450,
+	0x9186, 0x0032, 0x1538, 0x7030, 0x908e, 0x1400, 0x1518, 0x2009,
+	0x0038, 0x0016, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c,
+	0x283e, 0x11b8, 0x080c, 0x659e, 0x11a0, 0xbe12, 0xbd16, 0x080c,
+	0xae0b, 0x0178, 0x2b08, 0x6112, 0x080c, 0xcfaa, 0x6023, 0x0004,
+	0x7120, 0x610a, 0x001e, 0x080c, 0xaedc, 0x080c, 0x968d, 0x0010,
+	0x00ce, 0x001e, 0x004e, 0x00ce, 0x00be, 0x0005, 0x00b6, 0x0046,
+	0x00e6, 0x00d6, 0x2028, 0x2130, 0x9696, 0x00ff, 0x11b8, 0x9592,
+	0xfffc, 0x02a0, 0x9596, 0xfffd, 0x1120, 0x2009, 0x007f, 0x0804,
+	0x811c, 0x9596, 0xfffe, 0x1120, 0x2009, 0x007e, 0x0804, 0x811c,
+	0x9596, 0xfffc, 0x1118, 0x2009, 0x0080, 0x04f0, 0x2011, 0x0000,
+	0x2019, 0x1837, 0x231c, 0xd3ac, 0x0130, 0x9026, 0x20a9, 0x0800,
+	0x2071, 0x1000, 0x0030, 0x2021, 0x0081, 0x20a9, 0x077f, 0x2071,
+	0x1081, 0x2e1c, 0x93dd, 0x0000, 0x1140, 0x82ff, 0x11d0, 0x9496,
+	0x00ff, 0x01b8, 0x2410, 0xc2fd, 0x00a0, 0xbf10, 0x2600, 0x9706,
+	0xb814, 0x1120, 0x9546, 0x1110, 0x2408, 0x00b0, 0x9745, 0x1148,
+	0x94c6, 0x007e, 0x0130, 0x94c6, 0x007f, 0x0118, 0x94c6, 0x0080,
+	0x1d20, 0x8420, 0x8e70, 0x1f04, 0x80f1, 0x82ff, 0x1118, 0x9085,
+	0x0001, 0x0018, 0xc2fc, 0x2208, 0x9006, 0x00de, 0x00ee, 0x004e,
+	0x00be, 0x0005, 0x7000, 0x908c, 0xff00, 0x810f, 0x9184, 0x000f,
+	0x0002, 0x8139, 0x8139, 0x8139, 0x82d7, 0x8139, 0x8142, 0x816d,
+	0x81fb, 0x8139, 0x8139, 0x8139, 0x8139, 0x8139, 0x8139, 0x8139,
+	0x8139, 0x7817, 0x0140, 0x2001, 0x19f0, 0x2004, 0x9005, 0x090c,
+	0x968d, 0x0005, 0x00b6, 0x7110, 0xd1bc, 0x01e8, 0x7120, 0x2160,
+	0x9c8c, 0x0007, 0x11c0, 0x9c8a, 0x1cd0, 0x02a8, 0x6868, 0x9c02,
 	0x1290, 0x7008, 0x9084, 0x00ff, 0x6110, 0x2158, 0xb910, 0x9106,
 	0x1150, 0x700c, 0xb914, 0x9106, 0x1130, 0x7124, 0x610a, 0x2009,
-	0x0045, 0x080c, 0xaec2, 0x7817, 0x0140, 0x2001, 0x19f0, 0x2004,
-	0x9005, 0x090c, 0x9664, 0x00be, 0x0005, 0x6120, 0x9186, 0x0002,
-	0x0128, 0x9186, 0x0005, 0x0110, 0x9085, 0x0001, 0x0005, 0x080c,
-	0x32dc, 0x1168, 0x7010, 0x9084, 0xff00, 0x8007, 0x9086, 0x0000,
-	0x1130, 0x9184, 0x000f, 0x908a, 0x0006, 0x1208, 0x000b, 0x0005,
-	0x821e, 0x821f, 0x821e, 0x821e, 0x827e, 0x828d, 0x0005, 0x00b6,
-	0x7110, 0xd1bc, 0x0120, 0x702c, 0xd084, 0x0904, 0x827c, 0x700c,
-	0x7108, 0x080c, 0x283e, 0x1904, 0x827c, 0x080c, 0x659f, 0x1904,
-	0x827c, 0xbe12, 0xbd16, 0x7110, 0xd1bc, 0x01d8, 0x080c, 0x696a,
-	0x0118, 0x9086, 0x0004, 0x1588, 0x00c6, 0x080c, 0x829c, 0x00ce,
-	0x05d8, 0x080c, 0xadf1, 0x2b08, 0x05b8, 0x6112, 0x080c, 0xcf90,
-	0x6023, 0x0002, 0x7120, 0x610a, 0x2009, 0x0088, 0x080c, 0xaec2,
-	0x0458, 0x080c, 0x696a, 0x0148, 0x9086, 0x0004, 0x0130, 0x080c,
-	0x6972, 0x0118, 0x9086, 0x0004, 0x1180, 0x080c, 0xadf1, 0x2b08,
-	0x01d8, 0x6112, 0x080c, 0xcf90, 0x6023, 0x0005, 0x7120, 0x610a,
-	0x2009, 0x0088, 0x080c, 0xaec2, 0x0078, 0x080c, 0xadf1, 0x2b08,
-	0x0158, 0x6112, 0x080c, 0xcf90, 0x6023, 0x0004, 0x7120, 0x610a,
-	0x2009, 0x0001, 0x080c, 0xaec2, 0x00be, 0x0005, 0x7110, 0xd1bc,
-	0x0158, 0x00d1, 0x0148, 0x080c, 0x81fd, 0x1130, 0x7124, 0x610a,
-	0x2009, 0x0089, 0x080c, 0xaec2, 0x0005, 0x7110, 0xd1bc, 0x0158,
-	0x0059, 0x0148, 0x080c, 0x81fd, 0x1130, 0x7124, 0x610a, 0x2009,
-	0x008a, 0x080c, 0xaec2, 0x0005, 0x7020, 0x2060, 0x9c84, 0x0007,
-	0x1158, 0x9c82, 0x1cd0, 0x0240, 0x2001, 0x181a, 0x2004, 0x9c02,
-	0x1218, 0x9085, 0x0001, 0x0005, 0x9006, 0x0ce8, 0x00b6, 0x7110,
-	0xd1bc, 0x11d8, 0x7024, 0x2060, 0x9c84, 0x0007, 0x11b0, 0x9c82,
-	0x1cd0, 0x0298, 0x6868, 0x9c02, 0x1280, 0x7008, 0x9084, 0x00ff,
-	0x6110, 0x2158, 0xb910, 0x9106, 0x1140, 0x700c, 0xb914, 0x9106,
-	0x1120, 0x2009, 0x0051, 0x080c, 0xaec2, 0x7817, 0x0140, 0x2001,
-	0x19f0, 0x2004, 0x9005, 0x090c, 0x9664, 0x00be, 0x0005, 0x2031,
-	0x0105, 0x0069, 0x0005, 0x2031, 0x0206, 0x0049, 0x0005, 0x2031,
-	0x0207, 0x0029, 0x0005, 0x2031, 0x0213, 0x0009, 0x0005, 0x00c6,
-	0x0096, 0x00f6, 0x7000, 0x9084, 0xf000, 0x9086, 0xc000, 0x05d0,
-	0x080c, 0xadf1, 0x05b8, 0x0066, 0x00c6, 0x0046, 0x2011, 0x0263,
-	0x2204, 0x8211, 0x220c, 0x080c, 0x283e, 0x15a0, 0x080c, 0x659f,
-	0x1588, 0xbe12, 0xbd16, 0x2b00, 0x004e, 0x00ce, 0x6012, 0x080c,
-	0xcf90, 0x080c, 0x0fff, 0x0510, 0x2900, 0x605a, 0x9006, 0xa802,
-	0xa866, 0xac6a, 0xa85c, 0x90f8, 0x001b, 0x20a9, 0x000e, 0xa860,
-	0x20e8, 0x20e1, 0x0000, 0x2fa0, 0x2e98, 0x4003, 0x006e, 0x6616,
-	0x6007, 0x003e, 0x6023, 0x0001, 0x6003, 0x0001, 0x080c, 0x910f,
-	0x080c, 0x9664, 0x00fe, 0x009e, 0x00ce, 0x0005, 0x080c, 0xae47,
-	0x006e, 0x0cc0, 0x004e, 0x00ce, 0x0cc8, 0x00c6, 0x7000, 0x908c,
-	0xff00, 0x9184, 0xf000, 0x810f, 0x9086, 0x2000, 0x1904, 0x838c,
-	0x9186, 0x0022, 0x15f0, 0x2001, 0x0111, 0x2004, 0x9005, 0x1904,
-	0x838e, 0x7030, 0x908e, 0x0400, 0x0904, 0x838e, 0x908e, 0x6000,
-	0x05e8, 0x908e, 0x5400, 0x05d0, 0x908e, 0x0300, 0x11d8, 0x2009,
-	0x1837, 0x210c, 0xd18c, 0x1590, 0xd1a4, 0x1580, 0x080c, 0x6928,
-	0x0558, 0x68b0, 0x9084, 0x00ff, 0x7100, 0x918c, 0x00ff, 0x9106,
-	0x1518, 0x6880, 0x69b0, 0x918c, 0xff00, 0x9105, 0x7104, 0x9106,
-	0x11d8, 0x00e0, 0x2009, 0x0103, 0x210c, 0xd1b4, 0x11a8, 0x908e,
-	0x5200, 0x09e8, 0x908e, 0x0500, 0x09d0, 0x908e, 0x5000, 0x09b8,
-	0x0058, 0x9186, 0x0023, 0x1140, 0x080c, 0x829c, 0x0128, 0x6004,
-	0x9086, 0x0002, 0x0118, 0x0000, 0x9006, 0x0010, 0x9085, 0x0001,
-	0x00ce, 0x0005, 0x0156, 0x0046, 0x0016, 0x0036, 0x7038, 0x2020,
-	0x8427, 0x94a4, 0x0007, 0xd484, 0x0148, 0x20a9, 0x0004, 0x2019,
-	0x1805, 0x2011, 0x027a, 0x080c, 0xbdef, 0x1178, 0xd48c, 0x0148,
-	0x20a9, 0x0004, 0x2019, 0x1801, 0x2011, 0x027e, 0x080c, 0xbdef,
-	0x1120, 0xd494, 0x0110, 0x9085, 0x0001, 0x003e, 0x001e, 0x004e,
-	0x015e, 0x0005, 0x0156, 0x0046, 0x0016, 0x0036, 0x7038, 0x2020,
-	0x8427, 0x94a4, 0x0007, 0xd484, 0x0148, 0x20a9, 0x0004, 0x2019,
-	0x1805, 0x2011, 0x0272, 0x080c, 0xbdef, 0x1178, 0xd48c, 0x0148,
-	0x20a9, 0x0004, 0x2019, 0x1801, 0x2011, 0x0276, 0x080c, 0xbdef,
-	0x1120, 0xd494, 0x0110, 0x9085, 0x0001, 0x003e, 0x001e, 0x004e,
-	0x015e, 0x0005, 0x00f6, 0x2079, 0x0200, 0x7800, 0xc0e5, 0xc0cc,
-	0x7802, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x1800, 0x7834, 0xd084,
-	0x1130, 0x2079, 0x0200, 0x7800, 0x9085, 0x1200, 0x7802, 0x00fe,
-	0x0005, 0x00e6, 0x2071, 0x1800, 0x7034, 0xc084, 0x7036, 0x00ee,
-	0x0005, 0x2071, 0x19fa, 0x7003, 0x0003, 0x700f, 0x0361, 0x9006,
-	0x701a, 0x7072, 0x7012, 0x7017, 0x1cd0, 0x7007, 0x0000, 0x7026,
-	0x702b, 0xa26f, 0x7032, 0x7037, 0xa2dd, 0x703f, 0xffff, 0x7042,
-	0x7047, 0x556f, 0x704a, 0x705b, 0x856b, 0x080c, 0x1018, 0x090c,
-	0x0dd5, 0x2900, 0x703a, 0xa867, 0x0003, 0xa86f, 0x0100, 0xa8ab,
-	0xdcb0, 0x0005, 0x2071, 0x19fa, 0x1d04, 0x84b9, 0x2091, 0x6000,
-	0x700c, 0x8001, 0x700e, 0x1530, 0x2001, 0x013c, 0x2004, 0x9005,
-	0x190c, 0x85b0, 0x2001, 0x1869, 0x2004, 0xd0c4, 0x0158, 0x3a00,
-	0xd08c, 0x1140, 0x20d1, 0x0000, 0x20d1, 0x0001, 0x20d1, 0x0000,
-	0x080c, 0x0dd5, 0x700f, 0x0361, 0x7007, 0x0001, 0x0126, 0x2091,
-	0x8000, 0x7040, 0x900d, 0x0148, 0x8109, 0x7142, 0x1130, 0x7044,
-	0x080f, 0x0018, 0x0126, 0x2091, 0x8000, 0x7024, 0x900d, 0x0188,
-	0x7020, 0x8001, 0x7022, 0x1168, 0x7023, 0x0009, 0x8109, 0x7126,
-	0x9186, 0x03e8, 0x1110, 0x7028, 0x080f, 0x81ff, 0x1110, 0x7028,
-	0x080f, 0x7030, 0x900d, 0x0180, 0x702c, 0x8001, 0x702e, 0x1160,
-	0x702f, 0x0009, 0x8109, 0x7132, 0x0128, 0x9184, 0x007f, 0x090c,
-	0xa3fe, 0x0010, 0x7034, 0x080f, 0x703c, 0x9005, 0x0118, 0x0310,
-	0x8001, 0x703e, 0x704c, 0x900d, 0x0168, 0x7048, 0x8001, 0x704a,
-	0x1148, 0x704b, 0x0009, 0x8109, 0x714e, 0x1120, 0x7150, 0x714e,
-	0x7058, 0x080f, 0x7018, 0x900d, 0x01d8, 0x0016, 0x7070, 0x900d,
-	0x0158, 0x706c, 0x8001, 0x706e, 0x1138, 0x706f, 0x0009, 0x8109,
-	0x7172, 0x1110, 0x7074, 0x080f, 0x001e, 0x7008, 0x8001, 0x700a,
-	0x1138, 0x700b, 0x0009, 0x8109, 0x711a, 0x1110, 0x701c, 0x080f,
-	0x012e, 0x7004, 0x0002, 0x84e1, 0x84e2, 0x84fe, 0x00e6, 0x2071,
-	0x19fa, 0x7018, 0x9005, 0x1120, 0x711a, 0x721e, 0x700b, 0x0009,
-	0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071, 0x19fa, 0x701c, 0x9206,
-	0x1120, 0x701a, 0x701e, 0x7072, 0x7076, 0x000e, 0x00ee, 0x0005,
-	0x00e6, 0x2071, 0x19fa, 0xb888, 0x9102, 0x0208, 0xb98a, 0x00ee,
-	0x0005, 0x0005, 0x00b6, 0x7110, 0x080c, 0x6600, 0x1168, 0xb888,
-	0x8001, 0x0250, 0xb88a, 0x1140, 0x0126, 0x2091, 0x8000, 0x0016,
-	0x080c, 0x9664, 0x001e, 0x012e, 0x8108, 0x9182, 0x0800, 0x0218,
-	0x900e, 0x7007, 0x0002, 0x7112, 0x00be, 0x0005, 0x7014, 0x2060,
-	0x0126, 0x2091, 0x8000, 0x6040, 0x9005, 0x0128, 0x8001, 0x6042,
-	0x1110, 0x080c, 0xce21, 0x6018, 0x9005, 0x0558, 0x8001, 0x601a,
-	0x1540, 0x6120, 0x9186, 0x0003, 0x0148, 0x9186, 0x0006, 0x0130,
-	0x9186, 0x0009, 0x11e0, 0x611c, 0xd1c4, 0x1100, 0x080c, 0xcb1b,
-	0x01b0, 0x6014, 0x2048, 0xa884, 0x908a, 0x199a, 0x0280, 0x9082,
-	0x1999, 0xa886, 0x908a, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003,
-	0x800b, 0x810b, 0x9108, 0x611a, 0xa87c, 0xd0e4, 0x0110, 0x080c,
-	0xc819, 0x012e, 0x9c88, 0x0018, 0x7116, 0x2001, 0x181a, 0x2004,
-	0x9102, 0x0220, 0x7017, 0x1cd0, 0x7007, 0x0000, 0x0005, 0x00e6,
-	0x2071, 0x19fa, 0x7027, 0x07d0, 0x7023, 0x0009, 0x00ee, 0x0005,
-	0x2001, 0x1a03, 0x2003, 0x0000, 0x0005, 0x00e6, 0x2071, 0x19fa,
-	0x7132, 0x702f, 0x0009, 0x00ee, 0x0005, 0x2011, 0x1a06, 0x2013,
-	0x0000, 0x0005, 0x00e6, 0x2071, 0x19fa, 0x711a, 0x721e, 0x700b,
-	0x0009, 0x00ee, 0x0005, 0x0086, 0x0026, 0x7054, 0x8000, 0x7056,
-	0x2001, 0x1a08, 0x2044, 0xa06c, 0x9086, 0x0000, 0x0150, 0x7068,
-	0xa09a, 0x7064, 0xa096, 0x7060, 0xa092, 0x705c, 0xa08e, 0x080c,
-	0x10e9, 0x002e, 0x008e, 0x0005, 0x0006, 0x0016, 0x0096, 0x00a6,
-	0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0156, 0x080c, 0x842a,
-	0x015e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e,
-	0x001e, 0x000e, 0x0005, 0x00e6, 0x2071, 0x19fa, 0x7172, 0x7276,
-	0x706f, 0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071, 0x19fa,
-	0x7074, 0x9206, 0x1110, 0x7072, 0x7076, 0x000e, 0x00ee, 0x0005,
-	0x0016, 0x00c6, 0x2009, 0xfffc, 0x210d, 0x2061, 0x0100, 0x60f0,
-	0x9100, 0x60f3, 0x0000, 0x2009, 0xfffc, 0x200f, 0x1220, 0x8108,
-	0x2105, 0x8000, 0x200f, 0x00ce, 0x001e, 0x0005, 0x00c6, 0x2061,
-	0x1a71, 0x00ce, 0x0005, 0x9184, 0x000f, 0x8003, 0x8003, 0x8003,
-	0x9080, 0x1a71, 0x2060, 0x0005, 0xa884, 0x908a, 0x199a, 0x1638,
-	0x9005, 0x1150, 0x00c6, 0x2061, 0x1a71, 0x6014, 0x00ce, 0x9005,
-	0x1130, 0x2001, 0x001e, 0x0018, 0x908e, 0xffff, 0x01b0, 0x8003,
-	0x800b, 0x810b, 0x9108, 0x611a, 0xa87c, 0x908c, 0x00c0, 0x918e,
-	0x00c0, 0x0904, 0x865e, 0xd0b4, 0x1168, 0xd0bc, 0x1904, 0x8637,
-	0x2009, 0x0006, 0x080c, 0x868b, 0x0005, 0x900e, 0x0c60, 0x2001,
-	0x1999, 0x08b0, 0xd0fc, 0x0160, 0x908c, 0x0003, 0x0120, 0x918e,
-	0x0003, 0x1904, 0x8685, 0x908c, 0x2020, 0x918e, 0x2020, 0x01a8,
-	0x6024, 0xd0d4, 0x11e8, 0x2009, 0x1869, 0x2104, 0xd084, 0x1138,
-	0x87ff, 0x1120, 0x2009, 0x0043, 0x0804, 0xaec2, 0x0005, 0x87ff,
-	0x1de8, 0x2009, 0x0042, 0x0804, 0xaec2, 0x6110, 0x00b6, 0x2158,
-	0xb900, 0x00be, 0xd1ac, 0x0d20, 0x6024, 0xc0cd, 0x6026, 0x0c00,
-	0xc0d4, 0x6026, 0xa890, 0x602e, 0xa88c, 0x6032, 0x08e0, 0xd0fc,
-	0x0160, 0x908c, 0x0003, 0x0120, 0x918e, 0x0003, 0x1904, 0x8685,
-	0x908c, 0x2020, 0x918e, 0x2020, 0x0170, 0x0076, 0x00f6, 0x2c78,
-	0x080c, 0x1725, 0x00fe, 0x007e, 0x87ff, 0x1120, 0x2009, 0x0042,
-	0x080c, 0xaec2, 0x0005, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be,
-	0xd1ac, 0x0d58, 0x6124, 0xc1cd, 0x6126, 0x0c38, 0xd0fc, 0x0188,
-	0x908c, 0x2020, 0x918e, 0x2020, 0x01a8, 0x9084, 0x0003, 0x908e,
-	0x0002, 0x0148, 0x87ff, 0x1120, 0x2009, 0x0041, 0x080c, 0xaec2,
-	0x0005, 0x00b9, 0x0ce8, 0x87ff, 0x1dd8, 0x2009, 0x0043, 0x080c,
-	0xaec2, 0x0cb0, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1ac,
-	0x0d20, 0x6124, 0xc1cd, 0x6126, 0x0c00, 0x2009, 0x0004, 0x0019,
-	0x0005, 0x2009, 0x0001, 0x0096, 0x080c, 0xcb1b, 0x0518, 0x6014,
-	0x2048, 0xa982, 0xa800, 0x6016, 0x9186, 0x0001, 0x1188, 0xa97c,
-	0x918c, 0x8100, 0x918e, 0x8100, 0x1158, 0x00c6, 0x2061, 0x1a71,
-	0x6200, 0xd28c, 0x1120, 0x6204, 0x8210, 0x0208, 0x6206, 0x00ce,
-	0x080c, 0x6ab4, 0x6014, 0x904d, 0x0076, 0x2039, 0x0000, 0x190c,
-	0x85d4, 0x007e, 0x009e, 0x0005, 0x0156, 0x00c6, 0x2061, 0x1a71,
-	0x6000, 0x81ff, 0x0110, 0x9205, 0x0008, 0x9204, 0x6002, 0x00ce,
-	0x015e, 0x0005, 0x6800, 0xd08c, 0x1138, 0x6808, 0x9005, 0x0120,
-	0x8001, 0x680a, 0x9085, 0x0001, 0x0005, 0x2071, 0x1923, 0x7003,
-	0x0006, 0x7007, 0x0000, 0x700f, 0x0000, 0x7013, 0x0001, 0x080c,
-	0x1018, 0x090c, 0x0dd5, 0xa867, 0x0006, 0xa86b, 0x0001, 0xa8ab,
-	0xdcb0, 0xa89f, 0x0000, 0x2900, 0x702e, 0x7033, 0x0000, 0x0005,
-	0x0096, 0x00e6, 0x2071, 0x1923, 0x702c, 0x2048, 0x6a2c, 0x721e,
-	0x6b30, 0x7322, 0x6834, 0x7026, 0xa896, 0x6838, 0x702a, 0xa89a,
-	0x6824, 0x7016, 0x683c, 0x701a, 0x2009, 0x0028, 0x200a, 0x9005,
-	0x0148, 0x900e, 0x9188, 0x000c, 0x8001, 0x1de0, 0x2100, 0x9210,
-	0x1208, 0x8318, 0xaa8e, 0xab92, 0x7010, 0xd084, 0x0178, 0xc084,
-	0x7007, 0x0001, 0x700f, 0x0000, 0x0006, 0x2009, 0x181d, 0x2104,
-	0x9082, 0x0007, 0x2009, 0x1ac8, 0x200a, 0x000e, 0xc095, 0x7012,
-	0x2008, 0x2001, 0x003b, 0x080c, 0x15ee, 0x9006, 0x2071, 0x193c,
-	0x7002, 0x7006, 0x702a, 0x00ee, 0x009e, 0x0005, 0x00e6, 0x0126,
-	0x0156, 0x2091, 0x8000, 0x2071, 0x1800, 0x7154, 0x2001, 0x0008,
-	0x910a, 0x0638, 0x2001, 0x187d, 0x20ac, 0x9006, 0x9080, 0x0008,
-	0x1f04, 0x873e, 0x71c0, 0x9102, 0x02e0, 0x2071, 0x1877, 0x20a9,
-	0x0007, 0x00c6, 0x080c, 0xadf1, 0x6023, 0x0009, 0x6003, 0x0004,
-	0x601f, 0x0101, 0x0089, 0x0126, 0x2091, 0x8000, 0x080c, 0x88c4,
-	0x012e, 0x1f04, 0x874a, 0x9006, 0x00ce, 0x015e, 0x012e, 0x00ee,
-	0x0005, 0x9085, 0x0001, 0x0cc8, 0x00e6, 0x00b6, 0x0096, 0x0086,
-	0x0056, 0x0046, 0x0026, 0x7118, 0x720c, 0x7620, 0x7004, 0xd084,
-	0x1128, 0x2021, 0x0024, 0x2029, 0x0002, 0x0020, 0x2021, 0x002c,
-	0x2029, 0x000a, 0x080c, 0x0fff, 0x090c, 0x0dd5, 0x2900, 0x6016,
-	0x2058, 0xac66, 0x9006, 0xa802, 0xa806, 0xa86a, 0xa87a, 0xa8aa,
-	0xa887, 0x0005, 0xa87f, 0x0020, 0x7008, 0xa89a, 0x7010, 0xa89e,
-	0xae8a, 0xa8af, 0xffff, 0xa8b3, 0x0000, 0x8109, 0x0160, 0x080c,
-	0x0fff, 0x090c, 0x0dd5, 0xad66, 0x2b00, 0xa802, 0x2900, 0xb806,
-	0x2058, 0x8109, 0x1da0, 0x002e, 0x004e, 0x005e, 0x008e, 0x009e,
-	0x00be, 0x00ee, 0x0005, 0x2079, 0x0000, 0x2071, 0x1923, 0x7004,
-	0x004b, 0x700c, 0x0002, 0x87b6, 0x87af, 0x87af, 0x0005, 0x87c0,
-	0x8821, 0x8821, 0x8821, 0x8822, 0x8833, 0x8833, 0x700c, 0x0cba,
-	0x0126, 0x2091, 0x8000, 0x78a0, 0x79a0, 0x9106, 0x0128, 0x78a0,
-	0x79a0, 0x9106, 0x1904, 0x8814, 0x2001, 0x0005, 0x2004, 0xd0bc,
-	0x0130, 0x2011, 0x0004, 0x2204, 0xc0c5, 0x2012, 0x0ca8, 0x012e,
-	0x7018, 0x910a, 0x1130, 0x7030, 0x9005, 0x05a8, 0x080c, 0x8862,
-	0x0490, 0x1210, 0x7114, 0x910a, 0x9192, 0x000a, 0x0210, 0x2009,
-	0x000a, 0x2001, 0x1888, 0x2014, 0x2001, 0x1935, 0x2004, 0x9100,
-	0x9202, 0x0e48, 0x080c, 0x89ae, 0x2200, 0x9102, 0x0208, 0x2208,
-	0x0096, 0x702c, 0x2048, 0xa873, 0x0001, 0xa976, 0x080c, 0x8ab7,
-	0x2100, 0xa87e, 0xa86f, 0x0000, 0x009e, 0x0126, 0x2091, 0x8000,
-	0x2009, 0x1a18, 0x2104, 0xc085, 0x200a, 0x700f, 0x0002, 0x012e,
-	0x080c, 0x1108, 0x1de8, 0x0005, 0x2001, 0x0005, 0x2004, 0xd0bc,
-	0x0130, 0x2011, 0x0004, 0x2204, 0xc0c5, 0x2012, 0x0ca8, 0x012e,
-	0x0005, 0x0005, 0x700c, 0x0002, 0x8827, 0x882a, 0x8829, 0x080c,
-	0x87be, 0x0005, 0x8001, 0x700e, 0x0096, 0x702c, 0x2048, 0xa974,
-	0x009e, 0x0011, 0x0ca0, 0x0005, 0x0096, 0x702c, 0x2048, 0x7018,
-	0x9100, 0x7214, 0x921a, 0x1130, 0x701c, 0xa88e, 0x7020, 0xa892,
-	0x9006, 0x0068, 0x0006, 0x080c, 0x8ab7, 0x2100, 0xaa8c, 0x9210,
-	0xaa8e, 0x1220, 0xa890, 0x9081, 0x0000, 0xa892, 0x000e, 0x009e,
-	0x2f08, 0x9188, 0x0028, 0x200a, 0x701a, 0x0005, 0x00e6, 0x2071,
-	0x1923, 0x700c, 0x0002, 0x8860, 0x8860, 0x885e, 0x700f, 0x0001,
-	0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x7030, 0x9005, 0x0508,
-	0x2078, 0x7814, 0x2048, 0xae88, 0x00b6, 0x2059, 0x0000, 0x080c,
-	0x88cd, 0x00be, 0x01b0, 0x00e6, 0x2071, 0x193c, 0x080c, 0x8914,
-	0x00ee, 0x0178, 0x0096, 0x080c, 0x1018, 0x2900, 0x009e, 0x0148,
-	0xa8aa, 0x04b9, 0x0041, 0x2001, 0x1946, 0x2003, 0x0000, 0x012e,
-	0x08c8, 0x012e, 0x0005, 0x00d6, 0x00c6, 0x0086, 0x00a6, 0x2940,
-	0x2650, 0x2600, 0x9005, 0x0180, 0xa864, 0x9084, 0x000f, 0x2068,
-	0x9d88, 0x2090, 0x2165, 0x0056, 0x2029, 0x0000, 0x080c, 0x8a3c,
-	0x080c, 0x2048, 0x1dd8, 0x005e, 0x00ae, 0x2001, 0x187f, 0x2004,
-	0xa88a, 0x080c, 0x1725, 0x781f, 0x0101, 0x7813, 0x0000, 0x0126,
-	0x2091, 0x8000, 0x080c, 0x8923, 0x012e, 0x008e, 0x00ce, 0x00de,
-	0x0005, 0x7030, 0x9005, 0x0138, 0x2078, 0x780c, 0x7032, 0x2001,
-	0x1946, 0x2003, 0x0001, 0x0005, 0x00e6, 0x2071, 0x1923, 0x7030,
-	0x600e, 0x2c00, 0x7032, 0x00ee, 0x0005, 0x00d6, 0x00c6, 0x0026,
-	0x9b80, 0x8b96, 0x2005, 0x906d, 0x090c, 0x0dd5, 0x9b80, 0x8b8e,
-	0x2005, 0x9065, 0x090c, 0x0dd5, 0x6114, 0x2600, 0x9102, 0x0248,
-	0x6828, 0x9102, 0x02f0, 0x9085, 0x0001, 0x002e, 0x00ce, 0x00de,
-	0x0005, 0x6804, 0xd094, 0x0148, 0x6854, 0xd084, 0x1178, 0xc085,
-	0x6856, 0x2011, 0x8026, 0x080c, 0x4b05, 0x684c, 0x0096, 0x904d,
-	0x090c, 0x0dd5, 0xa804, 0x8000, 0xa806, 0x009e, 0x9006, 0x2030,
-	0x0c20, 0x6854, 0xd08c, 0x1d08, 0xc08d, 0x6856, 0x2011, 0x8025,
-	0x080c, 0x4b05, 0x684c, 0x0096, 0x904d, 0x090c, 0x0dd5, 0xa800,
-	0x8000, 0xa802, 0x009e, 0x0888, 0x7000, 0x2019, 0x0008, 0x8319,
-	0x7104, 0x9102, 0x1118, 0x2300, 0x9005, 0x0020, 0x0210, 0x9302,
-	0x0008, 0x8002, 0x0005, 0x00d6, 0x7814, 0x9005, 0x090c, 0x0dd5,
-	0x781c, 0x9084, 0x0101, 0x9086, 0x0101, 0x190c, 0x0dd5, 0x2069,
-	0x193c, 0x6804, 0x9080, 0x193e, 0x2f08, 0x2102, 0x6904, 0x8108,
-	0x9182, 0x0008, 0x0208, 0x900e, 0x6906, 0x9180, 0x193e, 0x2003,
-	0x0000, 0x00de, 0x0005, 0x0096, 0x00c6, 0x2060, 0x6014, 0x2048,
-	0xa8a8, 0x0096, 0x2048, 0x9005, 0x190c, 0x1031, 0x009e, 0xa8ab,
-	0x0000, 0x080c, 0x0fb1, 0x080c, 0xae47, 0x00ce, 0x009e, 0x0005,
-	0x6020, 0x9086, 0x0009, 0x1128, 0x601c, 0xd0c4, 0x0110, 0x9006,
-	0x0005, 0x9085, 0x0001, 0x0005, 0x6000, 0x9086, 0x0000, 0x0178,
-	0x6010, 0x9005, 0x0150, 0x00b6, 0x2058, 0x080c, 0x8cc9, 0x00be,
-	0x6013, 0x0000, 0x601b, 0x0000, 0x0010, 0x2c00, 0x0861, 0x0005,
-	0x2009, 0x1927, 0x210c, 0xd194, 0x0005, 0x00e6, 0x2071, 0x1923,
-	0x7110, 0xc194, 0xd19c, 0x1118, 0xc185, 0x7007, 0x0000, 0x7112,
-	0x2001, 0x003b, 0x080c, 0x15ee, 0x00ee, 0x0005, 0x0096, 0x00d6,
-	0x9006, 0x7006, 0x700e, 0x701a, 0x701e, 0x7022, 0x7016, 0x702a,
-	0x7026, 0x702f, 0x0000, 0x080c, 0x8b16, 0x0170, 0x080c, 0x8b4b,
-	0x0158, 0x2900, 0x7002, 0x700a, 0x701a, 0x7013, 0x0001, 0x701f,
-	0x000a, 0x00de, 0x009e, 0x0005, 0x900e, 0x0cd8, 0x00e6, 0x0096,
-	0x0086, 0x00d6, 0x00c6, 0x2071, 0x1930, 0x721c, 0x2100, 0x9202,
-	0x1618, 0x080c, 0x8b4b, 0x090c, 0x0dd5, 0x7018, 0x9005, 0x1160,
-	0x2900, 0x7002, 0x700a, 0x701a, 0x9006, 0x7006, 0x700e, 0xa806,
-	0xa802, 0x7012, 0x701e, 0x0038, 0x2040, 0xa806, 0x2900, 0xa002,
-	0x701a, 0xa803, 0x0000, 0x7010, 0x8000, 0x7012, 0x701c, 0x9080,
-	0x000a, 0x701e, 0x721c, 0x08d0, 0x721c, 0x00ce, 0x00de, 0x008e,
-	0x009e, 0x00ee, 0x0005, 0x0096, 0x0156, 0x0136, 0x0146, 0x00e6,
-	0x0126, 0x2091, 0x8000, 0x2071, 0x1930, 0x7300, 0x831f, 0x831e,
-	0x831e, 0x9384, 0x003f, 0x20e8, 0x939c, 0xffc0, 0x9398, 0x0003,
-	0x7104, 0x080c, 0x8ab7, 0x810c, 0x2100, 0x9318, 0x8003, 0x2228,
-	0x2021, 0x0078, 0x9402, 0x9532, 0x0208, 0x2028, 0x2500, 0x8004,
-	0x20a8, 0x23a0, 0xa001, 0xa001, 0x4005, 0x2508, 0x080c, 0x8ac0,
-	0x2130, 0x7014, 0x9600, 0x7016, 0x2600, 0x711c, 0x9102, 0x701e,
-	0x7004, 0x9600, 0x2008, 0x9082, 0x000a, 0x1190, 0x7000, 0x2048,
-	0xa800, 0x9005, 0x1148, 0x2009, 0x0001, 0x0026, 0x080c, 0x89ae,
-	0x002e, 0x7000, 0x2048, 0xa800, 0x7002, 0x7007, 0x0000, 0x0008,
-	0x7106, 0x2500, 0x9212, 0x1904, 0x89ed, 0x012e, 0x00ee, 0x014e,
-	0x013e, 0x015e, 0x009e, 0x0005, 0x0016, 0x0026, 0x00e6, 0x0126,
-	0x2091, 0x8000, 0x9580, 0x8b8e, 0x2005, 0x9075, 0x090c, 0x0dd5,
-	0x080c, 0x8a92, 0x012e, 0x9580, 0x8b8a, 0x2005, 0x9075, 0x090c,
-	0x0dd5, 0x0156, 0x0136, 0x01c6, 0x0146, 0x01d6, 0x831f, 0x831e,
-	0x831e, 0x9384, 0x003f, 0x20e0, 0x9384, 0xffc0, 0x9100, 0x2098,
-	0xa860, 0x20e8, 0xa95c, 0x2c05, 0x9100, 0x20a0, 0x20a9, 0x0002,
-	0x4003, 0x2e0c, 0x2d00, 0x0002, 0x8a7c, 0x8a7c, 0x8a7e, 0x8a7c,
-	0x8a7e, 0x8a7c, 0x8a7c, 0x8a7c, 0x8a7c, 0x8a7c, 0x8a84, 0x8a7c,
-	0x8a84, 0x8a7c, 0x8a7c, 0x8a7c, 0x080c, 0x0dd5, 0x4104, 0x20a9,
-	0x0002, 0x4002, 0x4003, 0x0028, 0x20a9, 0x0002, 0x4003, 0x4104,
-	0x4003, 0x01de, 0x014e, 0x01ce, 0x013e, 0x015e, 0x00ee, 0x002e,
-	0x001e, 0x0005, 0x0096, 0x7014, 0x8001, 0x7016, 0x710c, 0x2110,
-	0x00f1, 0x810c, 0x9188, 0x0003, 0x7308, 0x8210, 0x9282, 0x000a,
-	0x1198, 0x7008, 0x2048, 0xa800, 0x9005, 0x0158, 0x0006, 0x080c,
-	0x8b5a, 0x009e, 0xa807, 0x0000, 0x2900, 0x700a, 0x7010, 0x8001,
-	0x7012, 0x700f, 0x0000, 0x0008, 0x720e, 0x009e, 0x0005, 0x0006,
-	0x810b, 0x810b, 0x2100, 0x810b, 0x9100, 0x2008, 0x000e, 0x0005,
-	0x0006, 0x0026, 0x2100, 0x9005, 0x0158, 0x9092, 0x000c, 0x0240,
-	0x900e, 0x8108, 0x9082, 0x000c, 0x1de0, 0x002e, 0x000e, 0x0005,
-	0x900e, 0x0cd8, 0x2d00, 0x90b8, 0x0008, 0x690c, 0x6810, 0x2019,
-	0x0001, 0x2031, 0x8b00, 0x9112, 0x0220, 0x0118, 0x8318, 0x2208,
-	0x0cd0, 0x6808, 0x9005, 0x0108, 0x8318, 0x233a, 0x6804, 0xd084,
-	0x2300, 0x2021, 0x0001, 0x1150, 0x9082, 0x0003, 0x0967, 0x0a67,
-	0x8420, 0x9082, 0x0007, 0x0967, 0x0a67, 0x0cd0, 0x9082, 0x0002,
-	0x0967, 0x0a67, 0x8420, 0x9082, 0x0005, 0x0967, 0x0a67, 0x0cd0,
-	0x6c1a, 0x2d00, 0x90b8, 0x0007, 0x00e6, 0x2071, 0x1800, 0x7128,
-	0x6810, 0x2019, 0x0001, 0x910a, 0x0118, 0x0210, 0x8318, 0x0cd8,
-	0x2031, 0x8b13, 0x0870, 0x6c16, 0x00ee, 0x0005, 0x0096, 0x0046,
-	0x0126, 0x2091, 0x8000, 0x2b00, 0x9080, 0x8b92, 0x2005, 0x9005,
-	0x090c, 0x0dd5, 0x2004, 0x90a0, 0x000a, 0x080c, 0x1018, 0x01d0,
-	0x2900, 0x7026, 0xa803, 0x0000, 0xa807, 0x0000, 0x080c, 0x1018,
-	0x0188, 0x7024, 0xa802, 0xa807, 0x0000, 0x2900, 0x7026, 0x94a2,
-	0x000a, 0x0110, 0x0208, 0x0c90, 0x9085, 0x0001, 0x012e, 0x004e,
-	0x009e, 0x0005, 0x7024, 0x9005, 0x0dc8, 0x2048, 0xac00, 0x080c,
-	0x1031, 0x2400, 0x0cc0, 0x0126, 0x2091, 0x8000, 0x7024, 0x2048,
-	0x9005, 0x0130, 0xa800, 0x7026, 0xa803, 0x0000, 0xa807, 0x0000,
-	0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x7024, 0xa802, 0x2900,
-	0x7026, 0x012e, 0x0005, 0x0096, 0x9e80, 0x0009, 0x2004, 0x9005,
-	0x0138, 0x2048, 0xa800, 0x0006, 0x080c, 0x1031, 0x000e, 0x0cb8,
-	0x009e, 0x0005, 0x0096, 0x7008, 0x9005, 0x0138, 0x2048, 0xa800,
-	0x0006, 0x080c, 0x1031, 0x000e, 0x0cb8, 0x9006, 0x7002, 0x700a,
-	0x7006, 0x700e, 0x701a, 0x701e, 0x7022, 0x702a, 0x7026, 0x702e,
-	0x009e, 0x0005, 0x1a64, 0x0000, 0x0000, 0x0000, 0x1930, 0x0000,
-	0x0000, 0x0000, 0x1888, 0x0000, 0x0000, 0x0000, 0x1877, 0x0000,
-	0x0000, 0x0000, 0x00e6, 0x00c6, 0x00b6, 0x00a6, 0xa8a8, 0x2040,
-	0x2071, 0x1877, 0x080c, 0x8cb4, 0xa067, 0x0023, 0x6010, 0x905d,
-	0x0904, 0x8c89, 0xb814, 0xa06e, 0xb910, 0xa172, 0xb9a0, 0xa176,
-	0x2001, 0x0003, 0xa07e, 0xa834, 0xa082, 0xa07b, 0x0000, 0xa898,
-	0x9005, 0x0118, 0xa078, 0xc085, 0xa07a, 0x2858, 0x2031, 0x0018,
-	0xa068, 0x908a, 0x0019, 0x1a0c, 0x0dd5, 0x2020, 0x2050, 0x2940,
-	0xa864, 0x90bc, 0x00ff, 0x908c, 0x000f, 0x91e0, 0x2090, 0x2c65,
-	0x9786, 0x0024, 0x2c05, 0x1590, 0x908a, 0x0036, 0x1a0c, 0x0dd5,
-	0x9082, 0x001b, 0x0002, 0x8bf6, 0x8bf6, 0x8bf8, 0x8bf6, 0x8bf6,
-	0x8bf6, 0x8bfa, 0x8bf6, 0x8bf6, 0x8bf6, 0x8bfc, 0x8bf6, 0x8bf6,
-	0x8bf6, 0x8bfe, 0x8bf6, 0x8bf6, 0x8bf6, 0x8c00, 0x8bf6, 0x8bf6,
-	0x8bf6, 0x8c02, 0x8bf6, 0x8bf6, 0x8bf6, 0x8c04, 0x080c, 0x0dd5,
-	0xa180, 0x04b8, 0xa190, 0x04a8, 0xa1a0, 0x0498, 0xa1b0, 0x0488,
-	0xa1c0, 0x0478, 0xa1d0, 0x0468, 0xa1e0, 0x0458, 0x908a, 0x0034,
-	0x1a0c, 0x0dd5, 0x9082, 0x001b, 0x0002, 0x8c28, 0x8c26, 0x8c26,
-	0x8c26, 0x8c26, 0x8c26, 0x8c2a, 0x8c26, 0x8c26, 0x8c26, 0x8c26,
-	0x8c26, 0x8c2c, 0x8c26, 0x8c26, 0x8c26, 0x8c26, 0x8c26, 0x8c2e,
-	0x8c26, 0x8c26, 0x8c26, 0x8c26, 0x8c26, 0x8c30, 0x080c, 0x0dd5,
-	0xa180, 0x0038, 0xa198, 0x0028, 0xa1b0, 0x0018, 0xa1c8, 0x0008,
-	0xa1e0, 0x2600, 0x0002, 0x8c4c, 0x8c4e, 0x8c50, 0x8c52, 0x8c54,
-	0x8c56, 0x8c58, 0x8c5a, 0x8c5c, 0x8c5e, 0x8c60, 0x8c62, 0x8c64,
-	0x8c66, 0x8c68, 0x8c6a, 0x8c6c, 0x8c6e, 0x8c70, 0x8c72, 0x8c74,
-	0x8c76, 0x8c78, 0x8c7a, 0x8c7c, 0x080c, 0x0dd5, 0xb9e2, 0x0468,
-	0xb9de, 0x0458, 0xb9da, 0x0448, 0xb9d6, 0x0438, 0xb9d2, 0x0428,
-	0xb9ce, 0x0418, 0xb9ca, 0x0408, 0xb9c6, 0x00f8, 0xb9c2, 0x00e8,
-	0xb9be, 0x00d8, 0xb9ba, 0x00c8, 0xb9b6, 0x00b8, 0xb9b2, 0x00a8,
-	0xb9ae, 0x0098, 0xb9aa, 0x0088, 0xb9a6, 0x0078, 0xb9a2, 0x0068,
-	0xb99e, 0x0058, 0xb99a, 0x0048, 0xb996, 0x0038, 0xb992, 0x0028,
-	0xb98e, 0x0018, 0xb98a, 0x0008, 0xb986, 0x8631, 0x8421, 0x0120,
-	0x080c, 0x2048, 0x0804, 0x8bd0, 0x00ae, 0x00be, 0x00ce, 0x00ee,
-	0x0005, 0xa86c, 0xa06e, 0xa870, 0xa072, 0xa077, 0x00ff, 0x9006,
-	0x0804, 0x8bb2, 0x0006, 0x0016, 0x00b6, 0x6010, 0x2058, 0xb810,
-	0x9005, 0x01b0, 0x2001, 0x1924, 0x2004, 0x9005, 0x0188, 0x2001,
-	0x1800, 0x2004, 0x9086, 0x0003, 0x1158, 0x0036, 0x0046, 0xbba0,
-	0x2021, 0x0004, 0x2011, 0x8014, 0x080c, 0x4b05, 0x004e, 0x003e,
-	0x00be, 0x001e, 0x000e, 0x0005, 0x9016, 0x710c, 0xa834, 0x910a,
-	0xa936, 0x7008, 0x9005, 0x0120, 0x8210, 0x910a, 0x0238, 0x0130,
-	0x7010, 0x8210, 0x910a, 0x0210, 0x0108, 0x0cd8, 0xaa8a, 0xa26a,
-	0x0005, 0x00f6, 0x00d6, 0x0036, 0x2079, 0x0300, 0x781b, 0x0200,
-	0x7818, 0xd094, 0x1dd8, 0x781b, 0x0202, 0xa001, 0xa001, 0x7818,
-	0xd094, 0x1da0, 0xb8ac, 0x9005, 0x01b8, 0x2068, 0x2079, 0x0000,
-	0x2c08, 0x911e, 0x1118, 0x680c, 0xb8ae, 0x0060, 0x9106, 0x0140,
-	0x2d00, 0x2078, 0x680c, 0x9005, 0x090c, 0x0dd5, 0x2068, 0x0cb0,
-	0x6b0c, 0x7b0e, 0x600f, 0x0000, 0x2079, 0x0300, 0x781b, 0x0200,
-	0x003e, 0x00de, 0x00fe, 0x0005, 0x00e6, 0x00d6, 0x0096, 0x00c6,
-	0x0036, 0x0126, 0x2091, 0x8000, 0x0156, 0x20a9, 0x01ff, 0x2071,
-	0x0300, 0x701b, 0x0200, 0x7018, 0xd094, 0x0110, 0x1f04, 0x8d09,
-	0x701b, 0x0202, 0xa001, 0xa001, 0x7018, 0xd094, 0x1d90, 0xb8ac,
-	0x9005, 0x01d0, 0x2060, 0x600c, 0xb8ae, 0x6003, 0x0004, 0x601b,
-	0x0000, 0x6013, 0x0000, 0x601f, 0x0101, 0x6014, 0x2048, 0xa88b,
-	0x0000, 0xa8a8, 0xa8ab, 0x0000, 0x904d, 0x090c, 0x0dd5, 0x080c,
-	0x1031, 0x080c, 0x88c4, 0x0c18, 0x2071, 0x0300, 0x701b, 0x0200,
-	0x015e, 0x012e, 0x003e, 0x00ce, 0x009e, 0x00de, 0x00ee, 0x0005,
-	0x00c6, 0x00b6, 0x0016, 0x0006, 0x0156, 0x080c, 0x283e, 0x015e,
-	0x11b0, 0x080c, 0x659f, 0x190c, 0x0dd5, 0x000e, 0x001e, 0xb912,
-	0xb816, 0x080c, 0xadf1, 0x0140, 0x2b00, 0x6012, 0x6023, 0x0001,
-	0x2009, 0x0001, 0x080c, 0xaec2, 0x00be, 0x00ce, 0x0005, 0x000e,
-	0x001e, 0x0cd0, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0dd5,
-	0x0013, 0x006e, 0x0005, 0x8d7b, 0x8d7b, 0x8d7b, 0x8d7d, 0x8dce,
-	0x8d7b, 0x8d7b, 0x8d7b, 0x8e31, 0x8d7b, 0x8e6e, 0x8d7b, 0x8d7b,
-	0x8d7b, 0x8d7b, 0x8d7b, 0x080c, 0x0dd5, 0x9182, 0x0040, 0x0002,
-	0x8d90, 0x8d90, 0x8d90, 0x8d90, 0x8d90, 0x8d90, 0x8d90, 0x8d90,
-	0x8d90, 0x8d92, 0x8da7, 0x8d90, 0x8d90, 0x8d90, 0x8d90, 0x8dba,
-	0x080c, 0x0dd5, 0x0096, 0x080c, 0x9614, 0x080c, 0x9790, 0x6114,
-	0x2148, 0xa87b, 0x0000, 0x6010, 0x00b6, 0x2058, 0xb8bb, 0x0500,
-	0x00be, 0x080c, 0x6a7f, 0x080c, 0xae47, 0x009e, 0x0005, 0x080c,
-	0x9614, 0x00d6, 0x6114, 0x080c, 0xcb1b, 0x0130, 0x0096, 0x6114,
-	0x2148, 0x080c, 0x6c79, 0x009e, 0x00de, 0x080c, 0xae47, 0x080c,
-	0x9790, 0x0005, 0x080c, 0x9614, 0x080c, 0x31bc, 0x6114, 0x0096,
-	0x2148, 0x080c, 0xcb1b, 0x0120, 0xa87b, 0x0029, 0x080c, 0x6c79,
-	0x009e, 0x080c, 0xae47, 0x080c, 0x9790, 0x0005, 0x601b, 0x0000,
-	0x9182, 0x0040, 0x0096, 0x0002, 0x8de9, 0x8de9, 0x8de9, 0x8de9,
-	0x8de9, 0x8de9, 0x8de9, 0x8de9, 0x8deb, 0x8de9, 0x8de9, 0x8de9,
-	0x8e2d, 0x8de9, 0x8de9, 0x8de9, 0x8de9, 0x8de9, 0x8de9, 0x8df1,
-	0x8de9, 0x080c, 0x0dd5, 0x6114, 0x2148, 0xa938, 0x918e, 0xffff,
-	0x05e0, 0x00e6, 0x6114, 0x2148, 0x080c, 0x8b9a, 0x0096, 0xa8a8,
-	0x2048, 0x080c, 0x6a17, 0x009e, 0xa8ab, 0x0000, 0x6010, 0x9005,
-	0x0128, 0x00b6, 0x2058, 0x080c, 0x8cc9, 0x00be, 0xae88, 0x00b6,
-	0x2059, 0x0000, 0x080c, 0x88cd, 0x00be, 0x01e0, 0x2071, 0x193c,
-	0x080c, 0x8914, 0x01b8, 0x9086, 0x0001, 0x1128, 0x2001, 0x1946,
-	0x2004, 0x9005, 0x1178, 0x0096, 0x080c, 0x0fff, 0x2900, 0x009e,
-	0x0148, 0xa8aa, 0x00f6, 0x2c78, 0x080c, 0x888b, 0x00fe, 0x00ee,
-	0x009e, 0x0005, 0x080c, 0x88c4, 0x0cd0, 0x080c, 0x8edb, 0x009e,
-	0x0005, 0x9182, 0x0040, 0x0096, 0x0002, 0x8e45, 0x8e45, 0x8e45,
-	0x8e47, 0x8e45, 0x8e45, 0x8e45, 0x8e6c, 0x8e45, 0x8e45, 0x8e45,
-	0x8e45, 0x8e45, 0x8e45, 0x8e45, 0x8e45, 0x080c, 0x0dd5, 0x6003,
-	0x0003, 0x6106, 0x6014, 0x2048, 0xa8ac, 0xa846, 0xa8b0, 0xa84a,
-	0xa837, 0x0000, 0xa83b, 0x0000, 0xa884, 0x9092, 0x199a, 0x0210,
-	0x2001, 0x1999, 0x8003, 0x8013, 0x8213, 0x9210, 0x621a, 0x2c10,
-	0x080c, 0x1bad, 0x080c, 0x912c, 0x0126, 0x2091, 0x8000, 0x080c,
-	0x9790, 0x012e, 0x009e, 0x0005, 0x080c, 0x0dd5, 0x080c, 0x9614,
-	0x080c, 0x9790, 0x6114, 0x2148, 0xa87b, 0x0000, 0x6010, 0x00b6,
-	0x2058, 0xb8bb, 0x0500, 0x00be, 0x080c, 0x6c79, 0x080c, 0xae47,
-	0x009e, 0x0005, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0dd5, 0x0096,
-	0x0013, 0x009e, 0x0005, 0x8e9b, 0x8e9b, 0x8e9b, 0x8e9d, 0x8eae,
-	0x8e9b, 0x8e9b, 0x8e9b, 0x8e9b, 0x8e9b, 0x8e9b, 0x8e9b, 0x8e9b,
-	0x8e9b, 0x8e9b, 0x8e9b, 0x080c, 0x0dd5, 0x080c, 0xa7b2, 0x6114,
-	0x2148, 0xa87b, 0x0006, 0x6010, 0x00b6, 0x2058, 0xb8bb, 0x0500,
-	0x00be, 0x080c, 0x6c79, 0x080c, 0xae47, 0x0005, 0x0461, 0x0005,
-	0x6000, 0x908a, 0x0016, 0x1a0c, 0x0dd5, 0x0096, 0x0013, 0x009e,
-	0x0005, 0x8ec9, 0x8ec9, 0x8ec9, 0x8ecb, 0x8edb, 0x8ec9, 0x8ec9,
-	0x8ec9, 0x8ec9, 0x8ec9, 0x8ec9, 0x8ec9, 0x8ec9, 0x8ec9, 0x8ec9,
-	0x8ec9, 0x080c, 0x0dd5, 0x0036, 0x00e6, 0x2071, 0x19e7, 0x703c,
-	0x9c06, 0x1120, 0x2019, 0x0000, 0x080c, 0xa59c, 0x080c, 0xa7b2,
-	0x00ee, 0x003e, 0x0005, 0x00f6, 0x00e6, 0x601b, 0x0000, 0x6014,
-	0x2048, 0x6010, 0x9005, 0x0128, 0x00b6, 0x2058, 0x080c, 0x8cc9,
-	0x00be, 0x2071, 0x193c, 0x080c, 0x8914, 0x0160, 0x2001, 0x187f,
-	0x2004, 0xa88a, 0x2031, 0x0000, 0x2c78, 0x080c, 0x888b, 0x00ee,
-	0x00fe, 0x0005, 0x0096, 0xa88b, 0x0000, 0xa8a8, 0x2048, 0x080c,
-	0x1031, 0x009e, 0xa8ab, 0x0000, 0x080c, 0x88c4, 0x0c80, 0x0000,
+	0x0046, 0x080c, 0xaedc, 0x7817, 0x0140, 0x2001, 0x19f0, 0x2004,
+	0x9005, 0x090c, 0x968d, 0x00be, 0x0005, 0x00b6, 0x00c6, 0x9484,
+	0x0fff, 0x0904, 0x81d1, 0x7110, 0xd1bc, 0x1904, 0x81d1, 0x7108,
+	0x700c, 0x2028, 0x918c, 0x00ff, 0x2130, 0x9094, 0xff00, 0x15b0,
+	0x81ff, 0x15a0, 0x9080, 0x3325, 0x200d, 0x918c, 0xff00, 0x810f,
+	0x2001, 0x0080, 0x9106, 0x0904, 0x81d1, 0x080c, 0x659e, 0x1904,
+	0x81d1, 0xbe12, 0xbd16, 0xb800, 0xd0ec, 0x15d8, 0xba04, 0x9294,
+	0xff00, 0x9286, 0x0600, 0x11a0, 0x080c, 0xae0b, 0x05e8, 0x2b08,
+	0x7028, 0x604a, 0x702c, 0x6046, 0x6112, 0x6023, 0x0006, 0x7120,
+	0x610a, 0x7130, 0x6156, 0x2009, 0x0044, 0x080c, 0xdb63, 0x0408,
+	0x080c, 0x6972, 0x1138, 0xb807, 0x0606, 0x0c30, 0x190c, 0x80be,
+	0x11c0, 0x0898, 0x080c, 0xae0b, 0x2b08, 0x0198, 0x6112, 0x6023,
+	0x0004, 0x7120, 0x610a, 0x9286, 0x0400, 0x1118, 0x6007, 0x0005,
+	0x0010, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x9138, 0x080c,
+	0x968d, 0x7817, 0x0140, 0x2001, 0x19f0, 0x2004, 0x9005, 0x090c,
+	0x968d, 0x00ce, 0x00be, 0x0005, 0x2001, 0x180e, 0x2004, 0xd0ec,
+	0x0120, 0x2011, 0x8049, 0x080c, 0x4b04, 0x080c, 0xaeaf, 0x0d48,
+	0x2b08, 0x6112, 0x6023, 0x0006, 0x7120, 0x610a, 0x7130, 0x6156,
+	0x6017, 0xf300, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x90f0,
+	0x080c, 0x968d, 0x08b0, 0x00b6, 0x7110, 0xd1bc, 0x01e8, 0x7020,
+	0x2060, 0x9c84, 0x0007, 0x11c0, 0x9c82, 0x1cd0, 0x02a8, 0x6868,
+	0x9c02, 0x1290, 0x7008, 0x9084, 0x00ff, 0x6110, 0x2158, 0xb910,
+	0x9106, 0x1150, 0x700c, 0xb914, 0x9106, 0x1130, 0x7124, 0x610a,
+	0x2009, 0x0045, 0x080c, 0xaedc, 0x7817, 0x0140, 0x2001, 0x19f0,
+	0x2004, 0x9005, 0x090c, 0x968d, 0x00be, 0x0005, 0x6120, 0x9186,
+	0x0002, 0x0128, 0x9186, 0x0005, 0x0110, 0x9085, 0x0001, 0x0005,
+	0x080c, 0x32e3, 0x1168, 0x7010, 0x9084, 0xff00, 0x8007, 0x9086,
+	0x0000, 0x1130, 0x9184, 0x000f, 0x908a, 0x0006, 0x1208, 0x000b,
+	0x0005, 0x8247, 0x8248, 0x8247, 0x8247, 0x82a7, 0x82b6, 0x0005,
+	0x00b6, 0x7110, 0xd1bc, 0x0120, 0x702c, 0xd084, 0x0904, 0x82a5,
+	0x700c, 0x7108, 0x080c, 0x283e, 0x1904, 0x82a5, 0x080c, 0x659e,
+	0x1904, 0x82a5, 0xbe12, 0xbd16, 0x7110, 0xd1bc, 0x01d8, 0x080c,
+	0x6972, 0x0118, 0x9086, 0x0004, 0x1588, 0x00c6, 0x080c, 0x82c5,
+	0x00ce, 0x05d8, 0x080c, 0xae0b, 0x2b08, 0x05b8, 0x6112, 0x080c,
+	0xcfaa, 0x6023, 0x0002, 0x7120, 0x610a, 0x2009, 0x0088, 0x080c,
+	0xaedc, 0x0458, 0x080c, 0x6972, 0x0148, 0x9086, 0x0004, 0x0130,
+	0x080c, 0x697a, 0x0118, 0x9086, 0x0004, 0x1180, 0x080c, 0xae0b,
+	0x2b08, 0x01d8, 0x6112, 0x080c, 0xcfaa, 0x6023, 0x0005, 0x7120,
+	0x610a, 0x2009, 0x0088, 0x080c, 0xaedc, 0x0078, 0x080c, 0xae0b,
+	0x2b08, 0x0158, 0x6112, 0x080c, 0xcfaa, 0x6023, 0x0004, 0x7120,
+	0x610a, 0x2009, 0x0001, 0x080c, 0xaedc, 0x00be, 0x0005, 0x7110,
+	0xd1bc, 0x0158, 0x00d1, 0x0148, 0x080c, 0x8226, 0x1130, 0x7124,
+	0x610a, 0x2009, 0x0089, 0x080c, 0xaedc, 0x0005, 0x7110, 0xd1bc,
+	0x0158, 0x0059, 0x0148, 0x080c, 0x8226, 0x1130, 0x7124, 0x610a,
+	0x2009, 0x008a, 0x080c, 0xaedc, 0x0005, 0x7020, 0x2060, 0x9c84,
+	0x0007, 0x1158, 0x9c82, 0x1cd0, 0x0240, 0x2001, 0x181a, 0x2004,
+	0x9c02, 0x1218, 0x9085, 0x0001, 0x0005, 0x9006, 0x0ce8, 0x00b6,
+	0x7110, 0xd1bc, 0x11d8, 0x7024, 0x2060, 0x9c84, 0x0007, 0x11b0,
+	0x9c82, 0x1cd0, 0x0298, 0x6868, 0x9c02, 0x1280, 0x7008, 0x9084,
+	0x00ff, 0x6110, 0x2158, 0xb910, 0x9106, 0x1140, 0x700c, 0xb914,
+	0x9106, 0x1120, 0x2009, 0x0051, 0x080c, 0xaedc, 0x7817, 0x0140,
+	0x2001, 0x19f0, 0x2004, 0x9005, 0x090c, 0x968d, 0x00be, 0x0005,
+	0x2031, 0x0105, 0x0069, 0x0005, 0x2031, 0x0206, 0x0049, 0x0005,
+	0x2031, 0x0207, 0x0029, 0x0005, 0x2031, 0x0213, 0x0009, 0x0005,
+	0x00c6, 0x0096, 0x00f6, 0x7000, 0x9084, 0xf000, 0x9086, 0xc000,
+	0x05d0, 0x080c, 0xae0b, 0x05b8, 0x0066, 0x00c6, 0x0046, 0x2011,
+	0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x283e, 0x15a0, 0x080c,
+	0x659e, 0x1588, 0xbe12, 0xbd16, 0x2b00, 0x004e, 0x00ce, 0x6012,
+	0x080c, 0xcfaa, 0x080c, 0x0fff, 0x0510, 0x2900, 0x605a, 0x9006,
+	0xa802, 0xa866, 0xac6a, 0xa85c, 0x90f8, 0x001b, 0x20a9, 0x000e,
+	0xa860, 0x20e8, 0x20e1, 0x0000, 0x2fa0, 0x2e98, 0x4003, 0x006e,
+	0x6616, 0x6007, 0x003e, 0x6023, 0x0001, 0x6003, 0x0001, 0x080c,
+	0x9138, 0x080c, 0x968d, 0x00fe, 0x009e, 0x00ce, 0x0005, 0x080c,
+	0xae61, 0x006e, 0x0cc0, 0x004e, 0x00ce, 0x0cc8, 0x00c6, 0x7000,
+	0x908c, 0xff00, 0x9184, 0xf000, 0x810f, 0x9086, 0x2000, 0x1904,
+	0x83b5, 0x9186, 0x0022, 0x15f0, 0x2001, 0x0111, 0x2004, 0x9005,
+	0x1904, 0x83b7, 0x7030, 0x908e, 0x0400, 0x0904, 0x83b7, 0x908e,
+	0x6000, 0x05e8, 0x908e, 0x5400, 0x05d0, 0x908e, 0x0300, 0x11d8,
+	0x2009, 0x1837, 0x210c, 0xd18c, 0x1590, 0xd1a4, 0x1580, 0x080c,
+	0x6930, 0x0558, 0x68b0, 0x9084, 0x00ff, 0x7100, 0x918c, 0x00ff,
+	0x9106, 0x1518, 0x6880, 0x69b0, 0x918c, 0xff00, 0x9105, 0x7104,
+	0x9106, 0x11d8, 0x00e0, 0x2009, 0x0103, 0x210c, 0xd1b4, 0x11a8,
+	0x908e, 0x5200, 0x09e8, 0x908e, 0x0500, 0x09d0, 0x908e, 0x5000,
+	0x09b8, 0x0058, 0x9186, 0x0023, 0x1140, 0x080c, 0x82c5, 0x0128,
+	0x6004, 0x9086, 0x0002, 0x0118, 0x0000, 0x9006, 0x0010, 0x9085,
+	0x0001, 0x00ce, 0x0005, 0x0156, 0x0046, 0x0016, 0x0036, 0x7038,
+	0x2020, 0x8427, 0x94a4, 0x0007, 0xd484, 0x0148, 0x20a9, 0x0004,
+	0x2019, 0x1805, 0x2011, 0x027a, 0x080c, 0xbe09, 0x1178, 0xd48c,
+	0x0148, 0x20a9, 0x0004, 0x2019, 0x1801, 0x2011, 0x027e, 0x080c,
+	0xbe09, 0x1120, 0xd494, 0x0110, 0x9085, 0x0001, 0x003e, 0x001e,
+	0x004e, 0x015e, 0x0005, 0x0156, 0x0046, 0x0016, 0x0036, 0x7038,
+	0x2020, 0x8427, 0x94a4, 0x0007, 0xd484, 0x0148, 0x20a9, 0x0004,
+	0x2019, 0x1805, 0x2011, 0x0272, 0x080c, 0xbe09, 0x1178, 0xd48c,
+	0x0148, 0x20a9, 0x0004, 0x2019, 0x1801, 0x2011, 0x0276, 0x080c,
+	0xbe09, 0x1120, 0xd494, 0x0110, 0x9085, 0x0001, 0x003e, 0x001e,
+	0x004e, 0x015e, 0x0005, 0x00f6, 0x2079, 0x0200, 0x7800, 0xc0e5,
+	0xc0cc, 0x7802, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x1800, 0x7834,
+	0xd084, 0x1130, 0x2079, 0x0200, 0x7800, 0x9085, 0x1200, 0x7802,
+	0x00fe, 0x0005, 0x00e6, 0x2071, 0x1800, 0x7034, 0xc084, 0x7036,
+	0x00ee, 0x0005, 0x2071, 0x19fa, 0x7003, 0x0003, 0x700f, 0x0361,
+	0x9006, 0x701a, 0x7072, 0x7012, 0x7017, 0x1cd0, 0x7007, 0x0000,
+	0x7026, 0x702b, 0xa289, 0x7032, 0x7037, 0xa2f7, 0x703f, 0xffff,
+	0x7042, 0x7047, 0x556e, 0x704a, 0x705b, 0x8594, 0x080c, 0x1018,
+	0x090c, 0x0dd5, 0x2900, 0x703a, 0xa867, 0x0003, 0xa86f, 0x0100,
+	0xa8ab, 0xdcb0, 0x0005, 0x2071, 0x19fa, 0x1d04, 0x84e2, 0x2091,
+	0x6000, 0x700c, 0x8001, 0x700e, 0x1530, 0x2001, 0x013c, 0x2004,
+	0x9005, 0x190c, 0x85d9, 0x2001, 0x1869, 0x2004, 0xd0c4, 0x0158,
+	0x3a00, 0xd08c, 0x1140, 0x20d1, 0x0000, 0x20d1, 0x0001, 0x20d1,
+	0x0000, 0x080c, 0x0dd5, 0x700f, 0x0361, 0x7007, 0x0001, 0x0126,
+	0x2091, 0x8000, 0x7040, 0x900d, 0x0148, 0x8109, 0x7142, 0x1130,
+	0x7044, 0x080f, 0x0018, 0x0126, 0x2091, 0x8000, 0x7024, 0x900d,
+	0x0188, 0x7020, 0x8001, 0x7022, 0x1168, 0x7023, 0x0009, 0x8109,
+	0x7126, 0x9186, 0x03e8, 0x1110, 0x7028, 0x080f, 0x81ff, 0x1110,
+	0x7028, 0x080f, 0x7030, 0x900d, 0x0180, 0x702c, 0x8001, 0x702e,
+	0x1160, 0x702f, 0x0009, 0x8109, 0x7132, 0x0128, 0x9184, 0x007f,
+	0x090c, 0xa418, 0x0010, 0x7034, 0x080f, 0x703c, 0x9005, 0x0118,
+	0x0310, 0x8001, 0x703e, 0x704c, 0x900d, 0x0168, 0x7048, 0x8001,
+	0x704a, 0x1148, 0x704b, 0x0009, 0x8109, 0x714e, 0x1120, 0x7150,
+	0x714e, 0x7058, 0x080f, 0x7018, 0x900d, 0x01d8, 0x0016, 0x7070,
+	0x900d, 0x0158, 0x706c, 0x8001, 0x706e, 0x1138, 0x706f, 0x0009,
+	0x8109, 0x7172, 0x1110, 0x7074, 0x080f, 0x001e, 0x7008, 0x8001,
+	0x700a, 0x1138, 0x700b, 0x0009, 0x8109, 0x711a, 0x1110, 0x701c,
+	0x080f, 0x012e, 0x7004, 0x0002, 0x850a, 0x850b, 0x8527, 0x00e6,
+	0x2071, 0x19fa, 0x7018, 0x9005, 0x1120, 0x711a, 0x721e, 0x700b,
+	0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071, 0x19fa, 0x701c,
+	0x9206, 0x1120, 0x701a, 0x701e, 0x7072, 0x7076, 0x000e, 0x00ee,
+	0x0005, 0x00e6, 0x2071, 0x19fa, 0xb888, 0x9102, 0x0208, 0xb98a,
+	0x00ee, 0x0005, 0x0005, 0x00b6, 0x7110, 0x080c, 0x65ff, 0x1168,
+	0xb888, 0x8001, 0x0250, 0xb88a, 0x1140, 0x0126, 0x2091, 0x8000,
+	0x0016, 0x080c, 0x968d, 0x001e, 0x012e, 0x8108, 0x9182, 0x0800,
+	0x0218, 0x900e, 0x7007, 0x0002, 0x7112, 0x00be, 0x0005, 0x7014,
+	0x2060, 0x0126, 0x2091, 0x8000, 0x6040, 0x9005, 0x0128, 0x8001,
+	0x6042, 0x1110, 0x080c, 0xce3b, 0x6018, 0x9005, 0x0558, 0x8001,
+	0x601a, 0x1540, 0x6120, 0x9186, 0x0003, 0x0148, 0x9186, 0x0006,
+	0x0130, 0x9186, 0x0009, 0x11e0, 0x611c, 0xd1c4, 0x1100, 0x080c,
+	0xcb35, 0x01b0, 0x6014, 0x2048, 0xa884, 0x908a, 0x199a, 0x0280,
+	0x9082, 0x1999, 0xa886, 0x908a, 0x199a, 0x0210, 0x2001, 0x1999,
+	0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0xa87c, 0xd0e4, 0x0110,
+	0x080c, 0xc833, 0x012e, 0x9c88, 0x0018, 0x7116, 0x2001, 0x181a,
+	0x2004, 0x9102, 0x0220, 0x7017, 0x1cd0, 0x7007, 0x0000, 0x0005,
+	0x00e6, 0x2071, 0x19fa, 0x7027, 0x07d0, 0x7023, 0x0009, 0x00ee,
+	0x0005, 0x2001, 0x1a03, 0x2003, 0x0000, 0x0005, 0x00e6, 0x2071,
+	0x19fa, 0x7132, 0x702f, 0x0009, 0x00ee, 0x0005, 0x2011, 0x1a06,
+	0x2013, 0x0000, 0x0005, 0x00e6, 0x2071, 0x19fa, 0x711a, 0x721e,
+	0x700b, 0x0009, 0x00ee, 0x0005, 0x0086, 0x0026, 0x7054, 0x8000,
+	0x7056, 0x2001, 0x1a08, 0x2044, 0xa06c, 0x9086, 0x0000, 0x0150,
+	0x7068, 0xa09a, 0x7064, 0xa096, 0x7060, 0xa092, 0x705c, 0xa08e,
+	0x080c, 0x10e9, 0x002e, 0x008e, 0x0005, 0x0006, 0x0016, 0x0096,
+	0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0156, 0x080c,
+	0x8453, 0x015e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae,
+	0x009e, 0x001e, 0x000e, 0x0005, 0x00e6, 0x2071, 0x19fa, 0x7172,
+	0x7276, 0x706f, 0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071,
+	0x19fa, 0x7074, 0x9206, 0x1110, 0x7072, 0x7076, 0x000e, 0x00ee,
+	0x0005, 0x0016, 0x00c6, 0x2009, 0xfffc, 0x210d, 0x2061, 0x0100,
+	0x60f0, 0x9100, 0x60f3, 0x0000, 0x2009, 0xfffc, 0x200f, 0x1220,
+	0x8108, 0x2105, 0x8000, 0x200f, 0x00ce, 0x001e, 0x0005, 0x00c6,
+	0x2061, 0x1a71, 0x00ce, 0x0005, 0x9184, 0x000f, 0x8003, 0x8003,
+	0x8003, 0x9080, 0x1a71, 0x2060, 0x0005, 0xa884, 0x908a, 0x199a,
+	0x1638, 0x9005, 0x1150, 0x00c6, 0x2061, 0x1a71, 0x6014, 0x00ce,
+	0x9005, 0x1130, 0x2001, 0x001e, 0x0018, 0x908e, 0xffff, 0x01b0,
+	0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0xa87c, 0x908c, 0x00c0,
+	0x918e, 0x00c0, 0x0904, 0x8687, 0xd0b4, 0x1168, 0xd0bc, 0x1904,
+	0x8660, 0x2009, 0x0006, 0x080c, 0x86b4, 0x0005, 0x900e, 0x0c60,
+	0x2001, 0x1999, 0x08b0, 0xd0fc, 0x0160, 0x908c, 0x0003, 0x0120,
+	0x918e, 0x0003, 0x1904, 0x86ae, 0x908c, 0x2020, 0x918e, 0x2020,
+	0x01a8, 0x6024, 0xd0d4, 0x11e8, 0x2009, 0x1869, 0x2104, 0xd084,
+	0x1138, 0x87ff, 0x1120, 0x2009, 0x0043, 0x0804, 0xaedc, 0x0005,
+	0x87ff, 0x1de8, 0x2009, 0x0042, 0x0804, 0xaedc, 0x6110, 0x00b6,
+	0x2158, 0xb900, 0x00be, 0xd1ac, 0x0d20, 0x6024, 0xc0cd, 0x6026,
+	0x0c00, 0xc0d4, 0x6026, 0xa890, 0x602e, 0xa88c, 0x6032, 0x08e0,
+	0xd0fc, 0x0160, 0x908c, 0x0003, 0x0120, 0x918e, 0x0003, 0x1904,
+	0x86ae, 0x908c, 0x2020, 0x918e, 0x2020, 0x0170, 0x0076, 0x00f6,
+	0x2c78, 0x080c, 0x1725, 0x00fe, 0x007e, 0x87ff, 0x1120, 0x2009,
+	0x0042, 0x080c, 0xaedc, 0x0005, 0x6110, 0x00b6, 0x2158, 0xb900,
+	0x00be, 0xd1ac, 0x0d58, 0x6124, 0xc1cd, 0x6126, 0x0c38, 0xd0fc,
+	0x0188, 0x908c, 0x2020, 0x918e, 0x2020, 0x01a8, 0x9084, 0x0003,
+	0x908e, 0x0002, 0x0148, 0x87ff, 0x1120, 0x2009, 0x0041, 0x080c,
+	0xaedc, 0x0005, 0x00b9, 0x0ce8, 0x87ff, 0x1dd8, 0x2009, 0x0043,
+	0x080c, 0xaedc, 0x0cb0, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be,
+	0xd1ac, 0x0d20, 0x6124, 0xc1cd, 0x6126, 0x0c00, 0x2009, 0x0004,
+	0x0019, 0x0005, 0x2009, 0x0001, 0x0096, 0x080c, 0xcb35, 0x0518,
+	0x6014, 0x2048, 0xa982, 0xa800, 0x6016, 0x9186, 0x0001, 0x1188,
+	0xa97c, 0x918c, 0x8100, 0x918e, 0x8100, 0x1158, 0x00c6, 0x2061,
+	0x1a71, 0x6200, 0xd28c, 0x1120, 0x6204, 0x8210, 0x0208, 0x6206,
+	0x00ce, 0x080c, 0x6abc, 0x6014, 0x904d, 0x0076, 0x2039, 0x0000,
+	0x190c, 0x85fd, 0x007e, 0x009e, 0x0005, 0x0156, 0x00c6, 0x2061,
+	0x1a71, 0x6000, 0x81ff, 0x0110, 0x9205, 0x0008, 0x9204, 0x6002,
+	0x00ce, 0x015e, 0x0005, 0x6800, 0xd08c, 0x1138, 0x6808, 0x9005,
+	0x0120, 0x8001, 0x680a, 0x9085, 0x0001, 0x0005, 0x2071, 0x1923,
+	0x7003, 0x0006, 0x7007, 0x0000, 0x700f, 0x0000, 0x7013, 0x0001,
+	0x080c, 0x1018, 0x090c, 0x0dd5, 0xa867, 0x0006, 0xa86b, 0x0001,
+	0xa8ab, 0xdcb0, 0xa89f, 0x0000, 0x2900, 0x702e, 0x7033, 0x0000,
+	0x0005, 0x0096, 0x00e6, 0x2071, 0x1923, 0x702c, 0x2048, 0x6a2c,
+	0x721e, 0x6b30, 0x7322, 0x6834, 0x7026, 0xa896, 0x6838, 0x702a,
+	0xa89a, 0x6824, 0x7016, 0x683c, 0x701a, 0x2009, 0x0028, 0x200a,
+	0x9005, 0x0148, 0x900e, 0x9188, 0x000c, 0x8001, 0x1de0, 0x2100,
+	0x9210, 0x1208, 0x8318, 0xaa8e, 0xab92, 0x7010, 0xd084, 0x0178,
+	0xc084, 0x7007, 0x0001, 0x700f, 0x0000, 0x0006, 0x2009, 0x181d,
+	0x2104, 0x9082, 0x0007, 0x2009, 0x1ac8, 0x200a, 0x000e, 0xc095,
+	0x7012, 0x2008, 0x2001, 0x003b, 0x080c, 0x15ee, 0x9006, 0x2071,
+	0x193c, 0x7002, 0x7006, 0x702a, 0x00ee, 0x009e, 0x0005, 0x00e6,
+	0x0126, 0x0156, 0x2091, 0x8000, 0x2071, 0x1800, 0x7154, 0x2001,
+	0x0008, 0x910a, 0x0638, 0x2001, 0x187d, 0x20ac, 0x9006, 0x9080,
+	0x0008, 0x1f04, 0x8767, 0x71c0, 0x9102, 0x02e0, 0x2071, 0x1877,
+	0x20a9, 0x0007, 0x00c6, 0x080c, 0xae0b, 0x6023, 0x0009, 0x6003,
+	0x0004, 0x601f, 0x0101, 0x0089, 0x0126, 0x2091, 0x8000, 0x080c,
+	0x88ed, 0x012e, 0x1f04, 0x8773, 0x9006, 0x00ce, 0x015e, 0x012e,
+	0x00ee, 0x0005, 0x9085, 0x0001, 0x0cc8, 0x00e6, 0x00b6, 0x0096,
+	0x0086, 0x0056, 0x0046, 0x0026, 0x7118, 0x720c, 0x7620, 0x7004,
+	0xd084, 0x1128, 0x2021, 0x0024, 0x2029, 0x0002, 0x0020, 0x2021,
+	0x002c, 0x2029, 0x000a, 0x080c, 0x0fff, 0x090c, 0x0dd5, 0x2900,
+	0x6016, 0x2058, 0xac66, 0x9006, 0xa802, 0xa806, 0xa86a, 0xa87a,
+	0xa8aa, 0xa887, 0x0005, 0xa87f, 0x0020, 0x7008, 0xa89a, 0x7010,
+	0xa89e, 0xae8a, 0xa8af, 0xffff, 0xa8b3, 0x0000, 0x8109, 0x0160,
+	0x080c, 0x0fff, 0x090c, 0x0dd5, 0xad66, 0x2b00, 0xa802, 0x2900,
+	0xb806, 0x2058, 0x8109, 0x1da0, 0x002e, 0x004e, 0x005e, 0x008e,
+	0x009e, 0x00be, 0x00ee, 0x0005, 0x2079, 0x0000, 0x2071, 0x1923,
+	0x7004, 0x004b, 0x700c, 0x0002, 0x87df, 0x87d8, 0x87d8, 0x0005,
+	0x87e9, 0x884a, 0x884a, 0x884a, 0x884b, 0x885c, 0x885c, 0x700c,
+	0x0cba, 0x0126, 0x2091, 0x8000, 0x78a0, 0x79a0, 0x9106, 0x0128,
+	0x78a0, 0x79a0, 0x9106, 0x1904, 0x883d, 0x2001, 0x0005, 0x2004,
+	0xd0bc, 0x0130, 0x2011, 0x0004, 0x2204, 0xc0c5, 0x2012, 0x0ca8,
+	0x012e, 0x7018, 0x910a, 0x1130, 0x7030, 0x9005, 0x05a8, 0x080c,
+	0x888b, 0x0490, 0x1210, 0x7114, 0x910a, 0x9192, 0x000a, 0x0210,
+	0x2009, 0x000a, 0x2001, 0x1888, 0x2014, 0x2001, 0x1935, 0x2004,
+	0x9100, 0x9202, 0x0e48, 0x080c, 0x89d7, 0x2200, 0x9102, 0x0208,
+	0x2208, 0x0096, 0x702c, 0x2048, 0xa873, 0x0001, 0xa976, 0x080c,
+	0x8ae0, 0x2100, 0xa87e, 0xa86f, 0x0000, 0x009e, 0x0126, 0x2091,
+	0x8000, 0x2009, 0x1a18, 0x2104, 0xc085, 0x200a, 0x700f, 0x0002,
+	0x012e, 0x080c, 0x1108, 0x1de8, 0x0005, 0x2001, 0x0005, 0x2004,
+	0xd0bc, 0x0130, 0x2011, 0x0004, 0x2204, 0xc0c5, 0x2012, 0x0ca8,
+	0x012e, 0x0005, 0x0005, 0x700c, 0x0002, 0x8850, 0x8853, 0x8852,
+	0x080c, 0x87e7, 0x0005, 0x8001, 0x700e, 0x0096, 0x702c, 0x2048,
+	0xa974, 0x009e, 0x0011, 0x0ca0, 0x0005, 0x0096, 0x702c, 0x2048,
+	0x7018, 0x9100, 0x7214, 0x921a, 0x1130, 0x701c, 0xa88e, 0x7020,
+	0xa892, 0x9006, 0x0068, 0x0006, 0x080c, 0x8ae0, 0x2100, 0xaa8c,
+	0x9210, 0xaa8e, 0x1220, 0xa890, 0x9081, 0x0000, 0xa892, 0x000e,
+	0x009e, 0x2f08, 0x9188, 0x0028, 0x200a, 0x701a, 0x0005, 0x00e6,
+	0x2071, 0x1923, 0x700c, 0x0002, 0x8889, 0x8889, 0x8887, 0x700f,
+	0x0001, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x7030, 0x9005,
+	0x0508, 0x2078, 0x7814, 0x2048, 0xae88, 0x00b6, 0x2059, 0x0000,
+	0x080c, 0x88f6, 0x00be, 0x01b0, 0x00e6, 0x2071, 0x193c, 0x080c,
+	0x893d, 0x00ee, 0x0178, 0x0096, 0x080c, 0x1018, 0x2900, 0x009e,
+	0x0148, 0xa8aa, 0x04b9, 0x0041, 0x2001, 0x1946, 0x2003, 0x0000,
+	0x012e, 0x08c8, 0x012e, 0x0005, 0x00d6, 0x00c6, 0x0086, 0x00a6,
+	0x2940, 0x2650, 0x2600, 0x9005, 0x0180, 0xa864, 0x9084, 0x000f,
+	0x2068, 0x9d88, 0x2090, 0x2165, 0x0056, 0x2029, 0x0000, 0x080c,
+	0x8a65, 0x080c, 0x2048, 0x1dd8, 0x005e, 0x00ae, 0x2001, 0x187f,
+	0x2004, 0xa88a, 0x080c, 0x1725, 0x781f, 0x0101, 0x7813, 0x0000,
+	0x0126, 0x2091, 0x8000, 0x080c, 0x894c, 0x012e, 0x008e, 0x00ce,
+	0x00de, 0x0005, 0x7030, 0x9005, 0x0138, 0x2078, 0x780c, 0x7032,
+	0x2001, 0x1946, 0x2003, 0x0001, 0x0005, 0x00e6, 0x2071, 0x1923,
+	0x7030, 0x600e, 0x2c00, 0x7032, 0x00ee, 0x0005, 0x00d6, 0x00c6,
+	0x0026, 0x9b80, 0x8bbf, 0x2005, 0x906d, 0x090c, 0x0dd5, 0x9b80,
+	0x8bb7, 0x2005, 0x9065, 0x090c, 0x0dd5, 0x6114, 0x2600, 0x9102,
+	0x0248, 0x6828, 0x9102, 0x02f0, 0x9085, 0x0001, 0x002e, 0x00ce,
+	0x00de, 0x0005, 0x6804, 0xd094, 0x0148, 0x6854, 0xd084, 0x1178,
+	0xc085, 0x6856, 0x2011, 0x8026, 0x080c, 0x4b04, 0x684c, 0x0096,
+	0x904d, 0x090c, 0x0dd5, 0xa804, 0x8000, 0xa806, 0x009e, 0x9006,
+	0x2030, 0x0c20, 0x6854, 0xd08c, 0x1d08, 0xc08d, 0x6856, 0x2011,
+	0x8025, 0x080c, 0x4b04, 0x684c, 0x0096, 0x904d, 0x090c, 0x0dd5,
+	0xa800, 0x8000, 0xa802, 0x009e, 0x0888, 0x7000, 0x2019, 0x0008,
+	0x8319, 0x7104, 0x9102, 0x1118, 0x2300, 0x9005, 0x0020, 0x0210,
+	0x9302, 0x0008, 0x8002, 0x0005, 0x00d6, 0x7814, 0x9005, 0x090c,
+	0x0dd5, 0x781c, 0x9084, 0x0101, 0x9086, 0x0101, 0x190c, 0x0dd5,
+	0x2069, 0x193c, 0x6804, 0x9080, 0x193e, 0x2f08, 0x2102, 0x6904,
+	0x8108, 0x9182, 0x0008, 0x0208, 0x900e, 0x6906, 0x9180, 0x193e,
+	0x2003, 0x0000, 0x00de, 0x0005, 0x0096, 0x00c6, 0x2060, 0x6014,
+	0x2048, 0xa8a8, 0x0096, 0x2048, 0x9005, 0x190c, 0x1031, 0x009e,
+	0xa8ab, 0x0000, 0x080c, 0x0fb1, 0x080c, 0xae61, 0x00ce, 0x009e,
+	0x0005, 0x6020, 0x9086, 0x0009, 0x1128, 0x601c, 0xd0c4, 0x0110,
+	0x9006, 0x0005, 0x9085, 0x0001, 0x0005, 0x6000, 0x9086, 0x0000,
+	0x0178, 0x6010, 0x9005, 0x0150, 0x00b6, 0x2058, 0x080c, 0x8cf2,
+	0x00be, 0x6013, 0x0000, 0x601b, 0x0000, 0x0010, 0x2c00, 0x0861,
+	0x0005, 0x2009, 0x1927, 0x210c, 0xd194, 0x0005, 0x00e6, 0x2071,
+	0x1923, 0x7110, 0xc194, 0xd19c, 0x1118, 0xc185, 0x7007, 0x0000,
+	0x7112, 0x2001, 0x003b, 0x080c, 0x15ee, 0x00ee, 0x0005, 0x0096,
+	0x00d6, 0x9006, 0x7006, 0x700e, 0x701a, 0x701e, 0x7022, 0x7016,
+	0x702a, 0x7026, 0x702f, 0x0000, 0x080c, 0x8b3f, 0x0170, 0x080c,
+	0x8b74, 0x0158, 0x2900, 0x7002, 0x700a, 0x701a, 0x7013, 0x0001,
+	0x701f, 0x000a, 0x00de, 0x009e, 0x0005, 0x900e, 0x0cd8, 0x00e6,
+	0x0096, 0x0086, 0x00d6, 0x00c6, 0x2071, 0x1930, 0x721c, 0x2100,
+	0x9202, 0x1618, 0x080c, 0x8b74, 0x090c, 0x0dd5, 0x7018, 0x9005,
+	0x1160, 0x2900, 0x7002, 0x700a, 0x701a, 0x9006, 0x7006, 0x700e,
+	0xa806, 0xa802, 0x7012, 0x701e, 0x0038, 0x2040, 0xa806, 0x2900,
+	0xa002, 0x701a, 0xa803, 0x0000, 0x7010, 0x8000, 0x7012, 0x701c,
+	0x9080, 0x000a, 0x701e, 0x721c, 0x08d0, 0x721c, 0x00ce, 0x00de,
+	0x008e, 0x009e, 0x00ee, 0x0005, 0x0096, 0x0156, 0x0136, 0x0146,
+	0x00e6, 0x0126, 0x2091, 0x8000, 0x2071, 0x1930, 0x7300, 0x831f,
+	0x831e, 0x831e, 0x9384, 0x003f, 0x20e8, 0x939c, 0xffc0, 0x9398,
+	0x0003, 0x7104, 0x080c, 0x8ae0, 0x810c, 0x2100, 0x9318, 0x8003,
+	0x2228, 0x2021, 0x0078, 0x9402, 0x9532, 0x0208, 0x2028, 0x2500,
+	0x8004, 0x20a8, 0x23a0, 0xa001, 0xa001, 0x4005, 0x2508, 0x080c,
+	0x8ae9, 0x2130, 0x7014, 0x9600, 0x7016, 0x2600, 0x711c, 0x9102,
+	0x701e, 0x7004, 0x9600, 0x2008, 0x9082, 0x000a, 0x1190, 0x7000,
+	0x2048, 0xa800, 0x9005, 0x1148, 0x2009, 0x0001, 0x0026, 0x080c,
+	0x89d7, 0x002e, 0x7000, 0x2048, 0xa800, 0x7002, 0x7007, 0x0000,
+	0x0008, 0x7106, 0x2500, 0x9212, 0x1904, 0x8a16, 0x012e, 0x00ee,
+	0x014e, 0x013e, 0x015e, 0x009e, 0x0005, 0x0016, 0x0026, 0x00e6,
+	0x0126, 0x2091, 0x8000, 0x9580, 0x8bb7, 0x2005, 0x9075, 0x090c,
+	0x0dd5, 0x080c, 0x8abb, 0x012e, 0x9580, 0x8bb3, 0x2005, 0x9075,
+	0x090c, 0x0dd5, 0x0156, 0x0136, 0x01c6, 0x0146, 0x01d6, 0x831f,
+	0x831e, 0x831e, 0x9384, 0x003f, 0x20e0, 0x9384, 0xffc0, 0x9100,
+	0x2098, 0xa860, 0x20e8, 0xa95c, 0x2c05, 0x9100, 0x20a0, 0x20a9,
+	0x0002, 0x4003, 0x2e0c, 0x2d00, 0x0002, 0x8aa5, 0x8aa5, 0x8aa7,
+	0x8aa5, 0x8aa7, 0x8aa5, 0x8aa5, 0x8aa5, 0x8aa5, 0x8aa5, 0x8aad,
+	0x8aa5, 0x8aad, 0x8aa5, 0x8aa5, 0x8aa5, 0x080c, 0x0dd5, 0x4104,
+	0x20a9, 0x0002, 0x4002, 0x4003, 0x0028, 0x20a9, 0x0002, 0x4003,
+	0x4104, 0x4003, 0x01de, 0x014e, 0x01ce, 0x013e, 0x015e, 0x00ee,
+	0x002e, 0x001e, 0x0005, 0x0096, 0x7014, 0x8001, 0x7016, 0x710c,
+	0x2110, 0x00f1, 0x810c, 0x9188, 0x0003, 0x7308, 0x8210, 0x9282,
+	0x000a, 0x1198, 0x7008, 0x2048, 0xa800, 0x9005, 0x0158, 0x0006,
+	0x080c, 0x8b83, 0x009e, 0xa807, 0x0000, 0x2900, 0x700a, 0x7010,
+	0x8001, 0x7012, 0x700f, 0x0000, 0x0008, 0x720e, 0x009e, 0x0005,
+	0x0006, 0x810b, 0x810b, 0x2100, 0x810b, 0x9100, 0x2008, 0x000e,
+	0x0005, 0x0006, 0x0026, 0x2100, 0x9005, 0x0158, 0x9092, 0x000c,
+	0x0240, 0x900e, 0x8108, 0x9082, 0x000c, 0x1de0, 0x002e, 0x000e,
+	0x0005, 0x900e, 0x0cd8, 0x2d00, 0x90b8, 0x0008, 0x690c, 0x6810,
+	0x2019, 0x0001, 0x2031, 0x8b29, 0x9112, 0x0220, 0x0118, 0x8318,
+	0x2208, 0x0cd0, 0x6808, 0x9005, 0x0108, 0x8318, 0x233a, 0x6804,
+	0xd084, 0x2300, 0x2021, 0x0001, 0x1150, 0x9082, 0x0003, 0x0967,
+	0x0a67, 0x8420, 0x9082, 0x0007, 0x0967, 0x0a67, 0x0cd0, 0x9082,
+	0x0002, 0x0967, 0x0a67, 0x8420, 0x9082, 0x0005, 0x0967, 0x0a67,
+	0x0cd0, 0x6c1a, 0x2d00, 0x90b8, 0x0007, 0x00e6, 0x2071, 0x1800,
+	0x7128, 0x6810, 0x2019, 0x0001, 0x910a, 0x0118, 0x0210, 0x8318,
+	0x0cd8, 0x2031, 0x8b3c, 0x0870, 0x6c16, 0x00ee, 0x0005, 0x0096,
+	0x0046, 0x0126, 0x2091, 0x8000, 0x2b00, 0x9080, 0x8bbb, 0x2005,
+	0x9005, 0x090c, 0x0dd5, 0x2004, 0x90a0, 0x000a, 0x080c, 0x1018,
+	0x01d0, 0x2900, 0x7026, 0xa803, 0x0000, 0xa807, 0x0000, 0x080c,
+	0x1018, 0x0188, 0x7024, 0xa802, 0xa807, 0x0000, 0x2900, 0x7026,
+	0x94a2, 0x000a, 0x0110, 0x0208, 0x0c90, 0x9085, 0x0001, 0x012e,
+	0x004e, 0x009e, 0x0005, 0x7024, 0x9005, 0x0dc8, 0x2048, 0xac00,
+	0x080c, 0x1031, 0x2400, 0x0cc0, 0x0126, 0x2091, 0x8000, 0x7024,
+	0x2048, 0x9005, 0x0130, 0xa800, 0x7026, 0xa803, 0x0000, 0xa807,
+	0x0000, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x7024, 0xa802,
+	0x2900, 0x7026, 0x012e, 0x0005, 0x0096, 0x9e80, 0x0009, 0x2004,
+	0x9005, 0x0138, 0x2048, 0xa800, 0x0006, 0x080c, 0x1031, 0x000e,
+	0x0cb8, 0x009e, 0x0005, 0x0096, 0x7008, 0x9005, 0x0138, 0x2048,
+	0xa800, 0x0006, 0x080c, 0x1031, 0x000e, 0x0cb8, 0x9006, 0x7002,
+	0x700a, 0x7006, 0x700e, 0x701a, 0x701e, 0x7022, 0x702a, 0x7026,
+	0x702e, 0x009e, 0x0005, 0x1a64, 0x0000, 0x0000, 0x0000, 0x1930,
+	0x0000, 0x0000, 0x0000, 0x1888, 0x0000, 0x0000, 0x0000, 0x1877,
+	0x0000, 0x0000, 0x0000, 0x00e6, 0x00c6, 0x00b6, 0x00a6, 0xa8a8,
+	0x2040, 0x2071, 0x1877, 0x080c, 0x8cdd, 0xa067, 0x0023, 0x6010,
+	0x905d, 0x0904, 0x8cb2, 0xb814, 0xa06e, 0xb910, 0xa172, 0xb9a0,
+	0xa176, 0x2001, 0x0003, 0xa07e, 0xa834, 0xa082, 0xa07b, 0x0000,
+	0xa898, 0x9005, 0x0118, 0xa078, 0xc085, 0xa07a, 0x2858, 0x2031,
+	0x0018, 0xa068, 0x908a, 0x0019, 0x1a0c, 0x0dd5, 0x2020, 0x2050,
+	0x2940, 0xa864, 0x90bc, 0x00ff, 0x908c, 0x000f, 0x91e0, 0x2090,
+	0x2c65, 0x9786, 0x0024, 0x2c05, 0x1590, 0x908a, 0x0036, 0x1a0c,
+	0x0dd5, 0x9082, 0x001b, 0x0002, 0x8c1f, 0x8c1f, 0x8c21, 0x8c1f,
+	0x8c1f, 0x8c1f, 0x8c23, 0x8c1f, 0x8c1f, 0x8c1f, 0x8c25, 0x8c1f,
+	0x8c1f, 0x8c1f, 0x8c27, 0x8c1f, 0x8c1f, 0x8c1f, 0x8c29, 0x8c1f,
+	0x8c1f, 0x8c1f, 0x8c2b, 0x8c1f, 0x8c1f, 0x8c1f, 0x8c2d, 0x080c,
+	0x0dd5, 0xa180, 0x04b8, 0xa190, 0x04a8, 0xa1a0, 0x0498, 0xa1b0,
+	0x0488, 0xa1c0, 0x0478, 0xa1d0, 0x0468, 0xa1e0, 0x0458, 0x908a,
+	0x0034, 0x1a0c, 0x0dd5, 0x9082, 0x001b, 0x0002, 0x8c51, 0x8c4f,
+	0x8c4f, 0x8c4f, 0x8c4f, 0x8c4f, 0x8c53, 0x8c4f, 0x8c4f, 0x8c4f,
+	0x8c4f, 0x8c4f, 0x8c55, 0x8c4f, 0x8c4f, 0x8c4f, 0x8c4f, 0x8c4f,
+	0x8c57, 0x8c4f, 0x8c4f, 0x8c4f, 0x8c4f, 0x8c4f, 0x8c59, 0x080c,
+	0x0dd5, 0xa180, 0x0038, 0xa198, 0x0028, 0xa1b0, 0x0018, 0xa1c8,
+	0x0008, 0xa1e0, 0x2600, 0x0002, 0x8c75, 0x8c77, 0x8c79, 0x8c7b,
+	0x8c7d, 0x8c7f, 0x8c81, 0x8c83, 0x8c85, 0x8c87, 0x8c89, 0x8c8b,
+	0x8c8d, 0x8c8f, 0x8c91, 0x8c93, 0x8c95, 0x8c97, 0x8c99, 0x8c9b,
+	0x8c9d, 0x8c9f, 0x8ca1, 0x8ca3, 0x8ca5, 0x080c, 0x0dd5, 0xb9e2,
+	0x0468, 0xb9de, 0x0458, 0xb9da, 0x0448, 0xb9d6, 0x0438, 0xb9d2,
+	0x0428, 0xb9ce, 0x0418, 0xb9ca, 0x0408, 0xb9c6, 0x00f8, 0xb9c2,
+	0x00e8, 0xb9be, 0x00d8, 0xb9ba, 0x00c8, 0xb9b6, 0x00b8, 0xb9b2,
+	0x00a8, 0xb9ae, 0x0098, 0xb9aa, 0x0088, 0xb9a6, 0x0078, 0xb9a2,
+	0x0068, 0xb99e, 0x0058, 0xb99a, 0x0048, 0xb996, 0x0038, 0xb992,
+	0x0028, 0xb98e, 0x0018, 0xb98a, 0x0008, 0xb986, 0x8631, 0x8421,
+	0x0120, 0x080c, 0x2048, 0x0804, 0x8bf9, 0x00ae, 0x00be, 0x00ce,
+	0x00ee, 0x0005, 0xa86c, 0xa06e, 0xa870, 0xa072, 0xa077, 0x00ff,
+	0x9006, 0x0804, 0x8bdb, 0x0006, 0x0016, 0x00b6, 0x6010, 0x2058,
+	0xb810, 0x9005, 0x01b0, 0x2001, 0x1924, 0x2004, 0x9005, 0x0188,
+	0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1158, 0x0036, 0x0046,
+	0xbba0, 0x2021, 0x0004, 0x2011, 0x8014, 0x080c, 0x4b04, 0x004e,
+	0x003e, 0x00be, 0x001e, 0x000e, 0x0005, 0x9016, 0x710c, 0xa834,
+	0x910a, 0xa936, 0x7008, 0x9005, 0x0120, 0x8210, 0x910a, 0x0238,
+	0x0130, 0x7010, 0x8210, 0x910a, 0x0210, 0x0108, 0x0cd8, 0xaa8a,
+	0xa26a, 0x0005, 0x00f6, 0x00d6, 0x0036, 0x2079, 0x0300, 0x781b,
+	0x0200, 0x7818, 0xd094, 0x1dd8, 0x781b, 0x0202, 0xa001, 0xa001,
+	0x7818, 0xd094, 0x1da0, 0xb8ac, 0x9005, 0x01b8, 0x2068, 0x2079,
+	0x0000, 0x2c08, 0x911e, 0x1118, 0x680c, 0xb8ae, 0x0060, 0x9106,
+	0x0140, 0x2d00, 0x2078, 0x680c, 0x9005, 0x090c, 0x0dd5, 0x2068,
+	0x0cb0, 0x6b0c, 0x7b0e, 0x600f, 0x0000, 0x2079, 0x0300, 0x781b,
+	0x0200, 0x003e, 0x00de, 0x00fe, 0x0005, 0x00e6, 0x00d6, 0x0096,
+	0x00c6, 0x0036, 0x0126, 0x2091, 0x8000, 0x0156, 0x20a9, 0x01ff,
+	0x2071, 0x0300, 0x701b, 0x0200, 0x7018, 0xd094, 0x0110, 0x1f04,
+	0x8d32, 0x701b, 0x0202, 0xa001, 0xa001, 0x7018, 0xd094, 0x1d90,
+	0xb8ac, 0x9005, 0x01d0, 0x2060, 0x600c, 0xb8ae, 0x6003, 0x0004,
+	0x601b, 0x0000, 0x6013, 0x0000, 0x601f, 0x0101, 0x6014, 0x2048,
+	0xa88b, 0x0000, 0xa8a8, 0xa8ab, 0x0000, 0x904d, 0x090c, 0x0dd5,
+	0x080c, 0x1031, 0x080c, 0x88ed, 0x0c18, 0x2071, 0x0300, 0x701b,
+	0x0200, 0x015e, 0x012e, 0x003e, 0x00ce, 0x009e, 0x00de, 0x00ee,
+	0x0005, 0x00c6, 0x00b6, 0x0016, 0x0006, 0x0156, 0x080c, 0x283e,
+	0x015e, 0x11b0, 0x080c, 0x659e, 0x190c, 0x0dd5, 0x000e, 0x001e,
+	0xb912, 0xb816, 0x080c, 0xae0b, 0x0140, 0x2b00, 0x6012, 0x6023,
+	0x0001, 0x2009, 0x0001, 0x080c, 0xaedc, 0x00be, 0x00ce, 0x0005,
+	0x000e, 0x001e, 0x0cd0, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c,
+	0x0dd5, 0x0013, 0x006e, 0x0005, 0x8da4, 0x8da4, 0x8da4, 0x8da6,
+	0x8df7, 0x8da4, 0x8da4, 0x8da4, 0x8e5a, 0x8da4, 0x8e97, 0x8da4,
+	0x8da4, 0x8da4, 0x8da4, 0x8da4, 0x080c, 0x0dd5, 0x9182, 0x0040,
+	0x0002, 0x8db9, 0x8db9, 0x8db9, 0x8db9, 0x8db9, 0x8db9, 0x8db9,
+	0x8db9, 0x8db9, 0x8dbb, 0x8dd0, 0x8db9, 0x8db9, 0x8db9, 0x8db9,
+	0x8de3, 0x080c, 0x0dd5, 0x0096, 0x080c, 0x963d, 0x080c, 0x97b9,
+	0x6114, 0x2148, 0xa87b, 0x0000, 0x6010, 0x00b6, 0x2058, 0xb8bb,
+	0x0500, 0x00be, 0x080c, 0x6a87, 0x080c, 0xae61, 0x009e, 0x0005,
+	0x080c, 0x963d, 0x00d6, 0x6114, 0x080c, 0xcb35, 0x0130, 0x0096,
+	0x6114, 0x2148, 0x080c, 0x6c81, 0x009e, 0x00de, 0x080c, 0xae61,
+	0x080c, 0x97b9, 0x0005, 0x080c, 0x963d, 0x080c, 0x31bf, 0x6114,
+	0x0096, 0x2148, 0x080c, 0xcb35, 0x0120, 0xa87b, 0x0029, 0x080c,
+	0x6c81, 0x009e, 0x080c, 0xae61, 0x080c, 0x97b9, 0x0005, 0x601b,
+	0x0000, 0x9182, 0x0040, 0x0096, 0x0002, 0x8e12, 0x8e12, 0x8e12,
+	0x8e12, 0x8e12, 0x8e12, 0x8e12, 0x8e12, 0x8e14, 0x8e12, 0x8e12,
+	0x8e12, 0x8e56, 0x8e12, 0x8e12, 0x8e12, 0x8e12, 0x8e12, 0x8e12,
+	0x8e1a, 0x8e12, 0x080c, 0x0dd5, 0x6114, 0x2148, 0xa938, 0x918e,
+	0xffff, 0x05e0, 0x00e6, 0x6114, 0x2148, 0x080c, 0x8bc3, 0x0096,
+	0xa8a8, 0x2048, 0x080c, 0x6a1f, 0x009e, 0xa8ab, 0x0000, 0x6010,
+	0x9005, 0x0128, 0x00b6, 0x2058, 0x080c, 0x8cf2, 0x00be, 0xae88,
+	0x00b6, 0x2059, 0x0000, 0x080c, 0x88f6, 0x00be, 0x01e0, 0x2071,
+	0x193c, 0x080c, 0x893d, 0x01b8, 0x9086, 0x0001, 0x1128, 0x2001,
+	0x1946, 0x2004, 0x9005, 0x1178, 0x0096, 0x080c, 0x0fff, 0x2900,
+	0x009e, 0x0148, 0xa8aa, 0x00f6, 0x2c78, 0x080c, 0x88b4, 0x00fe,
+	0x00ee, 0x009e, 0x0005, 0x080c, 0x88ed, 0x0cd0, 0x080c, 0x8f04,
+	0x009e, 0x0005, 0x9182, 0x0040, 0x0096, 0x0002, 0x8e6e, 0x8e6e,
+	0x8e6e, 0x8e70, 0x8e6e, 0x8e6e, 0x8e6e, 0x8e95, 0x8e6e, 0x8e6e,
+	0x8e6e, 0x8e6e, 0x8e6e, 0x8e6e, 0x8e6e, 0x8e6e, 0x080c, 0x0dd5,
+	0x6003, 0x0003, 0x6106, 0x6014, 0x2048, 0xa8ac, 0xa846, 0xa8b0,
+	0xa84a, 0xa837, 0x0000, 0xa83b, 0x0000, 0xa884, 0x9092, 0x199a,
+	0x0210, 0x2001, 0x1999, 0x8003, 0x8013, 0x8213, 0x9210, 0x621a,
+	0x2c10, 0x080c, 0x1bad, 0x080c, 0x9155, 0x0126, 0x2091, 0x8000,
+	0x080c, 0x97b9, 0x012e, 0x009e, 0x0005, 0x080c, 0x0dd5, 0x080c,
+	0x963d, 0x080c, 0x97b9, 0x6114, 0x2148, 0xa87b, 0x0000, 0x6010,
+	0x00b6, 0x2058, 0xb8bb, 0x0500, 0x00be, 0x080c, 0x6c81, 0x080c,
+	0xae61, 0x009e, 0x0005, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0dd5,
+	0x0096, 0x0013, 0x009e, 0x0005, 0x8ec4, 0x8ec4, 0x8ec4, 0x8ec6,
+	0x8ed7, 0x8ec4, 0x8ec4, 0x8ec4, 0x8ec4, 0x8ec4, 0x8ec4, 0x8ec4,
+	0x8ec4, 0x8ec4, 0x8ec4, 0x8ec4, 0x080c, 0x0dd5, 0x080c, 0xa7cc,
+	0x6114, 0x2148, 0xa87b, 0x0006, 0x6010, 0x00b6, 0x2058, 0xb8bb,
+	0x0500, 0x00be, 0x080c, 0x6c81, 0x080c, 0xae61, 0x0005, 0x0461,
+	0x0005, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0dd5, 0x0096, 0x0013,
+	0x009e, 0x0005, 0x8ef2, 0x8ef2, 0x8ef2, 0x8ef4, 0x8f04, 0x8ef2,
+	0x8ef2, 0x8ef2, 0x8ef2, 0x8ef2, 0x8ef2, 0x8ef2, 0x8ef2, 0x8ef2,
+	0x8ef2, 0x8ef2, 0x080c, 0x0dd5, 0x0036, 0x00e6, 0x2071, 0x19e7,
+	0x703c, 0x9c06, 0x1120, 0x2019, 0x0000, 0x080c, 0xa5b6, 0x080c,
+	0xa7cc, 0x00ee, 0x003e, 0x0005, 0x00f6, 0x00e6, 0x601b, 0x0000,
+	0x6014, 0x2048, 0x6010, 0x9005, 0x0128, 0x00b6, 0x2058, 0x080c,
+	0x8cf2, 0x00be, 0x2071, 0x193c, 0x080c, 0x893d, 0x0160, 0x2001,
+	0x187f, 0x2004, 0xa88a, 0x2031, 0x0000, 0x2c78, 0x080c, 0x88b4,
+	0x00ee, 0x00fe, 0x0005, 0x0096, 0xa88b, 0x0000, 0xa8a8, 0x2048,
+	0x080c, 0x1031, 0x009e, 0xa8ab, 0x0000, 0x080c, 0x88ed, 0x0c80,
 	0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-	0x187a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0126,
-	0x2091, 0x8000, 0x0036, 0x0046, 0x20a9, 0x0010, 0x9006, 0x8004,
-	0x2019, 0x0100, 0x231c, 0x93a6, 0x0008, 0x1118, 0x8086, 0x818e,
-	0x0020, 0x80f6, 0x3e00, 0x81f6, 0x3e08, 0x1208, 0x9200, 0x1f04,
-	0x8f20, 0x93a6, 0x0008, 0x1118, 0x8086, 0x818e, 0x0020, 0x80f6,
-	0x3e00, 0x81f6, 0x3e08, 0x004e, 0x003e, 0x012e, 0x0005, 0x0126,
-	0x2091, 0x8000, 0x0076, 0x0156, 0x20a9, 0x0010, 0x9005, 0x0510,
-	0x911a, 0x1600, 0x8213, 0x2039, 0x0100, 0x273c, 0x97be, 0x0008,
-	0x1110, 0x818d, 0x0010, 0x81f5, 0x3e08, 0x0228, 0x911a, 0x1220,
-	0x1f04, 0x8f4a, 0x0028, 0x911a, 0x2308, 0x8210, 0x1f04, 0x8f4a,
-	0x0006, 0x3200, 0x9084, 0xefff, 0x2080, 0x000e, 0x015e, 0x007e,
-	0x012e, 0x0005, 0x0006, 0x3200, 0x9085, 0x1000, 0x0ca8, 0x0126,
-	0x2091, 0x2800, 0x2079, 0x19e7, 0x012e, 0x00d6, 0x2069, 0x19e7,
-	0x6803, 0x0005, 0x0156, 0x0146, 0x01d6, 0x20e9, 0x0000, 0x2069,
-	0x0200, 0x080c, 0xab07, 0x0401, 0x080c, 0xaaf2, 0x00e9, 0x080c,
-	0xaaf5, 0x00d1, 0x080c, 0xaaf8, 0x00b9, 0x080c, 0xaafb, 0x00a1,
-	0x080c, 0xaafe, 0x0089, 0x080c, 0xab01, 0x0071, 0x080c, 0xab04,
-	0x0059, 0x01de, 0x014e, 0x015e, 0x2069, 0x0004, 0x2d04, 0x9085,
-	0x8001, 0x206a, 0x00de, 0x0005, 0x20a9, 0x0020, 0x20a1, 0x0240,
-	0x2001, 0x0000, 0x4004, 0x0005, 0x00c6, 0x6027, 0x0001, 0x7804,
-	0x9084, 0x0007, 0x0002, 0x8fbd, 0x8fe1, 0x9020, 0x8fc3, 0x8fe1,
-	0x8fbd, 0x8fbb, 0x8fbb, 0x080c, 0x0dd5, 0x080c, 0x8550, 0x080c,
-	0x9664, 0x00ce, 0x0005, 0x62c0, 0x82ff, 0x1110, 0x00ce, 0x0005,
-	0x2011, 0x5e84, 0x080c, 0x84ca, 0x7828, 0x9092, 0x00c8, 0x1228,
-	0x8000, 0x782a, 0x080c, 0x5ec4, 0x0c88, 0x62c0, 0x080c, 0xac43,
-	0x080c, 0x5e84, 0x7807, 0x0003, 0x7827, 0x0000, 0x782b, 0x0000,
-	0x0c28, 0x080c, 0x8550, 0x6220, 0xd2a4, 0x0160, 0x782b, 0x0000,
-	0x7824, 0x9065, 0x090c, 0x0dd5, 0x2009, 0x0013, 0x080c, 0xaec2,
-	0x00ce, 0x0005, 0x00c6, 0x7824, 0x9065, 0x090c, 0x0dd5, 0x7828,
-	0x9092, 0xc350, 0x12c0, 0x8000, 0x782a, 0x00ce, 0x080c, 0x2ba5,
-	0x0278, 0x00c6, 0x7924, 0x2160, 0x6010, 0x906d, 0x090c, 0x0dd5,
-	0x7807, 0x0000, 0x7827, 0x0000, 0x00ce, 0x080c, 0x9664, 0x0c00,
-	0x080c, 0xa235, 0x08e8, 0x2011, 0x0130, 0x2214, 0x080c, 0xac43,
-	0x080c, 0xe9dd, 0x2009, 0x0014, 0x080c, 0xaec2, 0x00ce, 0x0880,
-	0x2001, 0x1a03, 0x2003, 0x0000, 0x62c0, 0x82ff, 0x1160, 0x782b,
+	0x0000, 0x187a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+	0x0126, 0x2091, 0x8000, 0x0036, 0x0046, 0x20a9, 0x0010, 0x9006,
+	0x8004, 0x2019, 0x0100, 0x231c, 0x93a6, 0x0008, 0x1118, 0x8086,
+	0x818e, 0x0020, 0x80f6, 0x3e00, 0x81f6, 0x3e08, 0x1208, 0x9200,
+	0x1f04, 0x8f49, 0x93a6, 0x0008, 0x1118, 0x8086, 0x818e, 0x0020,
+	0x80f6, 0x3e00, 0x81f6, 0x3e08, 0x004e, 0x003e, 0x012e, 0x0005,
+	0x0126, 0x2091, 0x8000, 0x0076, 0x0156, 0x20a9, 0x0010, 0x9005,
+	0x0510, 0x911a, 0x1600, 0x8213, 0x2039, 0x0100, 0x273c, 0x97be,
+	0x0008, 0x1110, 0x818d, 0x0010, 0x81f5, 0x3e08, 0x0228, 0x911a,
+	0x1220, 0x1f04, 0x8f73, 0x0028, 0x911a, 0x2308, 0x8210, 0x1f04,
+	0x8f73, 0x0006, 0x3200, 0x9084, 0xefff, 0x2080, 0x000e, 0x015e,
+	0x007e, 0x012e, 0x0005, 0x0006, 0x3200, 0x9085, 0x1000, 0x0ca8,
+	0x0126, 0x2091, 0x2800, 0x2079, 0x19e7, 0x012e, 0x00d6, 0x2069,
+	0x19e7, 0x6803, 0x0005, 0x0156, 0x0146, 0x01d6, 0x20e9, 0x0000,
+	0x2069, 0x0200, 0x080c, 0xab21, 0x0401, 0x080c, 0xab0c, 0x00e9,
+	0x080c, 0xab0f, 0x00d1, 0x080c, 0xab12, 0x00b9, 0x080c, 0xab15,
+	0x00a1, 0x080c, 0xab18, 0x0089, 0x080c, 0xab1b, 0x0071, 0x080c,
+	0xab1e, 0x0059, 0x01de, 0x014e, 0x015e, 0x2069, 0x0004, 0x2d04,
+	0x9085, 0x8001, 0x206a, 0x00de, 0x0005, 0x20a9, 0x0020, 0x20a1,
+	0x0240, 0x2001, 0x0000, 0x4004, 0x0005, 0x00c6, 0x6027, 0x0001,
+	0x7804, 0x9084, 0x0007, 0x0002, 0x8fe6, 0x900a, 0x9049, 0x8fec,
+	0x900a, 0x8fe6, 0x8fe4, 0x8fe4, 0x080c, 0x0dd5, 0x080c, 0x8579,
+	0x080c, 0x968d, 0x00ce, 0x0005, 0x62c0, 0x82ff, 0x1110, 0x00ce,
+	0x0005, 0x2011, 0x5e83, 0x080c, 0x84f3, 0x7828, 0x9092, 0x00c8,
+	0x1228, 0x8000, 0x782a, 0x080c, 0x5ec3, 0x0c88, 0x62c0, 0x080c,
+	0xac5d, 0x080c, 0x5e83, 0x7807, 0x0003, 0x7827, 0x0000, 0x782b,
+	0x0000, 0x0c28, 0x080c, 0x8579, 0x6220, 0xd2a4, 0x0160, 0x782b,
 	0x0000, 0x7824, 0x9065, 0x090c, 0x0dd5, 0x2009, 0x0013, 0x080c,
-	0xaf14, 0x00ce, 0x0005, 0x00b6, 0x00c6, 0x00d6, 0x7824, 0x9005,
-	0x090c, 0x0dd5, 0x7828, 0x9092, 0xc350, 0x1648, 0x8000, 0x782a,
-	0x00de, 0x00ce, 0x00be, 0x080c, 0x2ba5, 0x02f0, 0x00b6, 0x00c6,
-	0x00d6, 0x781c, 0x905d, 0x090c, 0x0dd5, 0xb800, 0xc0dc, 0xb802,
-	0x7924, 0x2160, 0x080c, 0xae47, 0xb93c, 0x81ff, 0x090c, 0x0dd5,
-	0x8109, 0xb93e, 0x7807, 0x0000, 0x7827, 0x0000, 0x00de, 0x00ce,
-	0x00be, 0x080c, 0x9664, 0x0868, 0x080c, 0xa235, 0x0850, 0x2011,
-	0x0130, 0x2214, 0x080c, 0xac43, 0x080c, 0xe9dd, 0x7824, 0x9065,
-	0x2009, 0x0014, 0x080c, 0xaec2, 0x00de, 0x00ce, 0x00be, 0x0804,
-	0x9031, 0x00c6, 0x2001, 0x009b, 0x2004, 0xd0fc, 0x190c, 0x1eb4,
-	0x6024, 0x6027, 0x0002, 0xd0f4, 0x15b8, 0x62c8, 0x60c4, 0x9205,
-	0x1170, 0x783c, 0x9065, 0x0130, 0x2009, 0x0049, 0x080c, 0xaec2,
-	0x00ce, 0x0005, 0x2011, 0x1a06, 0x2013, 0x0000, 0x0cc8, 0x793c,
-	0x81ff, 0x0dc0, 0x7944, 0x9192, 0x7530, 0x1628, 0x8108, 0x7946,
-	0x793c, 0x9188, 0x0008, 0x210c, 0x918e, 0x0006, 0x1138, 0x6014,
-	0x9084, 0x1984, 0x9085, 0x0012, 0x6016, 0x0c10, 0x793c, 0x9188,
-	0x0008, 0x210c, 0x918e, 0x0009, 0x0d90, 0x6014, 0x9084, 0x1984,
-	0x9085, 0x0016, 0x6016, 0x08a0, 0x793c, 0x2160, 0x2009, 0x004a,
-	0x080c, 0xaec2, 0x0868, 0x7848, 0xc085, 0x784a, 0x0848, 0x0006,
-	0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f, 0x0000, 0x2c08,
-	0x2061, 0x19e7, 0x6020, 0x8000, 0x6022, 0x6010, 0x9005, 0x0148,
-	0x9080, 0x0003, 0x2102, 0x6112, 0x012e, 0x00ce, 0x001e, 0x000e,
-	0x0005, 0x6116, 0x6112, 0x0cc0, 0x00d6, 0x2069, 0x19e7, 0xb800,
-	0xd0d4, 0x0168, 0x6820, 0x8000, 0x6822, 0x9086, 0x0001, 0x1110,
-	0x2b00, 0x681e, 0x00de, 0x0804, 0x9664, 0x00de, 0x0005, 0xc0d5,
-	0xb802, 0x6818, 0x9005, 0x0168, 0xb856, 0xb85b, 0x0000, 0x0086,
-	0x0006, 0x2b00, 0x681a, 0x008e, 0xa05a, 0x008e, 0x2069, 0x19e7,
-	0x0c08, 0xb856, 0xb85a, 0x2b00, 0x681a, 0x681e, 0x08d8, 0x0006,
-	0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f, 0x0000, 0x2c08,
-	0x2061, 0x19e7, 0x6020, 0x8000, 0x6022, 0x6008, 0x9005, 0x0148,
-	0x9080, 0x0003, 0x2102, 0x610a, 0x012e, 0x00ce, 0x001e, 0x000e,
-	0x0005, 0x610e, 0x610a, 0x0cc0, 0x00c6, 0x600f, 0x0000, 0x2c08,
-	0x2061, 0x19e7, 0x6034, 0x9005, 0x0130, 0x9080, 0x0003, 0x2102,
-	0x6136, 0x00ce, 0x0005, 0x613a, 0x6136, 0x00ce, 0x0005, 0x00f6,
-	0x00e6, 0x00d6, 0x00c6, 0x00b6, 0x0096, 0x0076, 0x0066, 0x0056,
-	0x0036, 0x0026, 0x0016, 0x0006, 0x0126, 0x902e, 0x2071, 0x19e7,
-	0x7638, 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff, 0x0904, 0x91b6,
-	0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904, 0x91b1, 0x87ff, 0x0120,
-	0x6054, 0x9106, 0x1904, 0x91b1, 0x703c, 0x9c06, 0x1178, 0x0036,
-	0x2019, 0x0001, 0x080c, 0xa59c, 0x7033, 0x0000, 0x9006, 0x703e,
-	0x7042, 0x7046, 0x704a, 0x003e, 0x2029, 0x0001, 0x7038, 0x9c36,
-	0x1110, 0x660c, 0x763a, 0x7034, 0x9c36, 0x1140, 0x2c00, 0x9f36,
-	0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000, 0x660c, 0x0066,
-	0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000,
-	0x080c, 0xcb1b, 0x01c8, 0x6014, 0x2048, 0x6020, 0x9086, 0x0003,
-	0x1590, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x0016, 0x0036,
-	0x0076, 0x080c, 0xce0a, 0x080c, 0xe8e7, 0x080c, 0x6c79, 0x007e,
-	0x003e, 0x001e, 0x080c, 0xcd04, 0x080c, 0xae78, 0x00ce, 0x0804,
-	0x9155, 0x2c78, 0x600c, 0x2060, 0x0804, 0x9155, 0x85ff, 0x0120,
-	0x0036, 0x080c, 0x9790, 0x003e, 0x012e, 0x000e, 0x001e, 0x002e,
-	0x003e, 0x005e, 0x006e, 0x007e, 0x009e, 0x00be, 0x00ce, 0x00de,
-	0x00ee, 0x00fe, 0x0005, 0x6020, 0x9086, 0x0006, 0x1158, 0x0016,
-	0x0036, 0x0076, 0x080c, 0xe8e7, 0x080c, 0xe530, 0x007e, 0x003e,
-	0x001e, 0x0890, 0x6020, 0x9086, 0x0009, 0x1168, 0xa87b, 0x0006,
-	0x0016, 0x0036, 0x0076, 0x080c, 0x6c79, 0x080c, 0xae47, 0x007e,
-	0x003e, 0x001e, 0x0818, 0x6020, 0x9086, 0x000a, 0x0904, 0x919b,
-	0x0804, 0x9199, 0x0006, 0x0066, 0x0096, 0x00c6, 0x00d6, 0x00f6,
-	0x9036, 0x0126, 0x2091, 0x8000, 0x2079, 0x19e7, 0x7838, 0x9065,
-	0x0904, 0x9242, 0x600c, 0x0006, 0x600f, 0x0000, 0x783c, 0x9c06,
-	0x1168, 0x0036, 0x2019, 0x0001, 0x080c, 0xa59c, 0x7833, 0x0000,
-	0x901e, 0x7b3e, 0x7b42, 0x7b46, 0x7b4a, 0x003e, 0x080c, 0xcb1b,
-	0x0520, 0x6014, 0x2048, 0x6020, 0x9086, 0x0003, 0x1568, 0x3e08,
-	0x918e, 0x0002, 0x1188, 0x6010, 0x9005, 0x0170, 0x00b6, 0x2058,
-	0xb800, 0x00be, 0xd0bc, 0x0140, 0x6040, 0x9005, 0x1180, 0x2001,
-	0x1988, 0x2004, 0x6042, 0x0058, 0xa867, 0x0103, 0xab7a, 0xa877,
-	0x0000, 0x080c, 0x6c6d, 0x080c, 0xcd04, 0x080c, 0xae78, 0x000e,
-	0x0804, 0x91ff, 0x7e3a, 0x7e36, 0x012e, 0x00fe, 0x00de, 0x00ce,
-	0x009e, 0x006e, 0x000e, 0x0005, 0x6020, 0x9086, 0x0006, 0x1118,
-	0x080c, 0xe530, 0x0c50, 0x6020, 0x9086, 0x0009, 0x1130, 0xab7a,
-	0x080c, 0x6c79, 0x080c, 0xae47, 0x0c10, 0x6020, 0x9086, 0x000a,
-	0x09a8, 0x0890, 0x0016, 0x0026, 0x0086, 0x9046, 0x0099, 0x080c,
-	0x934b, 0x008e, 0x002e, 0x001e, 0x0005, 0x00f6, 0x0126, 0x2079,
-	0x19e7, 0x2091, 0x8000, 0x080c, 0x93e2, 0x080c, 0x9470, 0x012e,
-	0x00fe, 0x0005, 0x00b6, 0x0096, 0x00f6, 0x00e6, 0x00d6, 0x00c6,
-	0x0066, 0x0016, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19e7,
-	0x7614, 0x2660, 0x2678, 0x8cff, 0x0904, 0x9310, 0x6010, 0x2058,
-	0xb8a0, 0x9206, 0x1904, 0x930b, 0x88ff, 0x0120, 0x6054, 0x9106,
-	0x1904, 0x930b, 0x7024, 0x9c06, 0x1558, 0x2069, 0x0100, 0x6820,
-	0xd0a4, 0x1508, 0x080c, 0x8550, 0x080c, 0xa259, 0x68c3, 0x0000,
-	0x080c, 0xa7a2, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04,
+	0xaedc, 0x00ce, 0x0005, 0x00c6, 0x7824, 0x9065, 0x090c, 0x0dd5,
+	0x7828, 0x9092, 0xc350, 0x12c0, 0x8000, 0x782a, 0x00ce, 0x080c,
+	0x2ba5, 0x0278, 0x00c6, 0x7924, 0x2160, 0x6010, 0x906d, 0x090c,
+	0x0dd5, 0x7807, 0x0000, 0x7827, 0x0000, 0x00ce, 0x080c, 0x968d,
+	0x0c00, 0x080c, 0xa24f, 0x08e8, 0x2011, 0x0130, 0x2214, 0x080c,
+	0xac5d, 0x080c, 0xe9fe, 0x2009, 0x0014, 0x080c, 0xaedc, 0x00ce,
+	0x0880, 0x2001, 0x1a03, 0x2003, 0x0000, 0x62c0, 0x82ff, 0x1160,
+	0x782b, 0x0000, 0x7824, 0x9065, 0x090c, 0x0dd5, 0x2009, 0x0013,
+	0x080c, 0xaf2e, 0x00ce, 0x0005, 0x00b6, 0x00c6, 0x00d6, 0x7824,
+	0x9005, 0x090c, 0x0dd5, 0x7828, 0x9092, 0xc350, 0x1648, 0x8000,
+	0x782a, 0x00de, 0x00ce, 0x00be, 0x080c, 0x2ba5, 0x02f0, 0x00b6,
+	0x00c6, 0x00d6, 0x781c, 0x905d, 0x090c, 0x0dd5, 0xb800, 0xc0dc,
+	0xb802, 0x7924, 0x2160, 0x080c, 0xae61, 0xb93c, 0x81ff, 0x090c,
+	0x0dd5, 0x8109, 0xb93e, 0x7807, 0x0000, 0x7827, 0x0000, 0x00de,
+	0x00ce, 0x00be, 0x080c, 0x968d, 0x0868, 0x080c, 0xa24f, 0x0850,
+	0x2011, 0x0130, 0x2214, 0x080c, 0xac5d, 0x080c, 0xe9fe, 0x7824,
+	0x9065, 0x2009, 0x0014, 0x080c, 0xaedc, 0x00de, 0x00ce, 0x00be,
+	0x0804, 0x905a, 0x00c6, 0x2001, 0x009b, 0x2004, 0xd0fc, 0x190c,
+	0x1eb4, 0x6024, 0x6027, 0x0002, 0xd0f4, 0x15b8, 0x62c8, 0x60c4,
+	0x9205, 0x1170, 0x783c, 0x9065, 0x0130, 0x2009, 0x0049, 0x080c,
+	0xaedc, 0x00ce, 0x0005, 0x2011, 0x1a06, 0x2013, 0x0000, 0x0cc8,
+	0x793c, 0x81ff, 0x0dc0, 0x7944, 0x9192, 0x7530, 0x1628, 0x8108,
+	0x7946, 0x793c, 0x9188, 0x0008, 0x210c, 0x918e, 0x0006, 0x1138,
+	0x6014, 0x9084, 0x1984, 0x9085, 0x0012, 0x6016, 0x0c10, 0x793c,
+	0x9188, 0x0008, 0x210c, 0x918e, 0x0009, 0x0d90, 0x6014, 0x9084,
+	0x1984, 0x9085, 0x0016, 0x6016, 0x08a0, 0x793c, 0x2160, 0x2009,
+	0x004a, 0x080c, 0xaedc, 0x0868, 0x7848, 0xc085, 0x784a, 0x0848,
+	0x0006, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f, 0x0000,
+	0x2c08, 0x2061, 0x19e7, 0x6020, 0x8000, 0x6022, 0x6010, 0x9005,
+	0x0148, 0x9080, 0x0003, 0x2102, 0x6112, 0x012e, 0x00ce, 0x001e,
+	0x000e, 0x0005, 0x6116, 0x6112, 0x0cc0, 0x00d6, 0x2069, 0x19e7,
+	0xb800, 0xd0d4, 0x0168, 0x6820, 0x8000, 0x6822, 0x9086, 0x0001,
+	0x1110, 0x2b00, 0x681e, 0x00de, 0x0804, 0x968d, 0x00de, 0x0005,
+	0xc0d5, 0xb802, 0x6818, 0x9005, 0x0168, 0xb856, 0xb85b, 0x0000,
+	0x0086, 0x0006, 0x2b00, 0x681a, 0x008e, 0xa05a, 0x008e, 0x2069,
+	0x19e7, 0x0c08, 0xb856, 0xb85a, 0x2b00, 0x681a, 0x681e, 0x08d8,
+	0x0006, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f, 0x0000,
+	0x2c08, 0x2061, 0x19e7, 0x6020, 0x8000, 0x6022, 0x6008, 0x9005,
+	0x0148, 0x9080, 0x0003, 0x2102, 0x610a, 0x012e, 0x00ce, 0x001e,
+	0x000e, 0x0005, 0x610e, 0x610a, 0x0cc0, 0x00c6, 0x600f, 0x0000,
+	0x2c08, 0x2061, 0x19e7, 0x6034, 0x9005, 0x0130, 0x9080, 0x0003,
+	0x2102, 0x6136, 0x00ce, 0x0005, 0x613a, 0x6136, 0x00ce, 0x0005,
+	0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x00b6, 0x0096, 0x0076, 0x0066,
+	0x0056, 0x0036, 0x0026, 0x0016, 0x0006, 0x0126, 0x902e, 0x2071,
+	0x19e7, 0x7638, 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff, 0x0904,
+	0x91df, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904, 0x91da, 0x87ff,
+	0x0120, 0x6054, 0x9106, 0x1904, 0x91da, 0x703c, 0x9c06, 0x1178,
+	0x0036, 0x2019, 0x0001, 0x080c, 0xa5b6, 0x7033, 0x0000, 0x9006,
+	0x703e, 0x7042, 0x7046, 0x704a, 0x003e, 0x2029, 0x0001, 0x7038,
+	0x9c36, 0x1110, 0x660c, 0x763a, 0x7034, 0x9c36, 0x1140, 0x2c00,
+	0x9f36, 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000, 0x660c,
+	0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f,
+	0x0000, 0x080c, 0xcb35, 0x01c8, 0x6014, 0x2048, 0x6020, 0x9086,
+	0x0003, 0x1590, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x0016,
+	0x0036, 0x0076, 0x080c, 0xce24, 0x080c, 0xe908, 0x080c, 0x6c81,
+	0x007e, 0x003e, 0x001e, 0x080c, 0xcd1e, 0x080c, 0xae92, 0x00ce,
+	0x0804, 0x917e, 0x2c78, 0x600c, 0x2060, 0x0804, 0x917e, 0x85ff,
+	0x0120, 0x0036, 0x080c, 0x97b9, 0x003e, 0x012e, 0x000e, 0x001e,
+	0x002e, 0x003e, 0x005e, 0x006e, 0x007e, 0x009e, 0x00be, 0x00ce,
+	0x00de, 0x00ee, 0x00fe, 0x0005, 0x6020, 0x9086, 0x0006, 0x1158,
+	0x0016, 0x0036, 0x0076, 0x080c, 0xe908, 0x080c, 0xe551, 0x007e,
+	0x003e, 0x001e, 0x0890, 0x6020, 0x9086, 0x0009, 0x1168, 0xa87b,
+	0x0006, 0x0016, 0x0036, 0x0076, 0x080c, 0x6c81, 0x080c, 0xae61,
+	0x007e, 0x003e, 0x001e, 0x0818, 0x6020, 0x9086, 0x000a, 0x0904,
+	0x91c4, 0x0804, 0x91c2, 0x0006, 0x0066, 0x0096, 0x00c6, 0x00d6,
+	0x00f6, 0x9036, 0x0126, 0x2091, 0x8000, 0x2079, 0x19e7, 0x7838,
+	0x9065, 0x0904, 0x926b, 0x600c, 0x0006, 0x600f, 0x0000, 0x783c,
+	0x9c06, 0x1168, 0x0036, 0x2019, 0x0001, 0x080c, 0xa5b6, 0x7833,
+	0x0000, 0x901e, 0x7b3e, 0x7b42, 0x7b46, 0x7b4a, 0x003e, 0x080c,
+	0xcb35, 0x0520, 0x6014, 0x2048, 0x6020, 0x9086, 0x0003, 0x1568,
+	0x3e08, 0x918e, 0x0002, 0x1188, 0x6010, 0x9005, 0x0170, 0x00b6,
+	0x2058, 0xb800, 0x00be, 0xd0bc, 0x0140, 0x6040, 0x9005, 0x1180,
+	0x2001, 0x1988, 0x2004, 0x6042, 0x0058, 0xa867, 0x0103, 0xab7a,
+	0xa877, 0x0000, 0x080c, 0x6c75, 0x080c, 0xcd1e, 0x080c, 0xae92,
+	0x000e, 0x0804, 0x9228, 0x7e3a, 0x7e36, 0x012e, 0x00fe, 0x00de,
+	0x00ce, 0x009e, 0x006e, 0x000e, 0x0005, 0x6020, 0x9086, 0x0006,
+	0x1118, 0x080c, 0xe551, 0x0c50, 0x6020, 0x9086, 0x0009, 0x1130,
+	0xab7a, 0x080c, 0x6c81, 0x080c, 0xae61, 0x0c10, 0x6020, 0x9086,
+	0x000a, 0x09a8, 0x0890, 0x0016, 0x0026, 0x0086, 0x9046, 0x0099,
+	0x080c, 0x9374, 0x008e, 0x002e, 0x001e, 0x0005, 0x00f6, 0x0126,
+	0x2079, 0x19e7, 0x2091, 0x8000, 0x080c, 0x940b, 0x080c, 0x9499,
+	0x012e, 0x00fe, 0x0005, 0x00b6, 0x0096, 0x00f6, 0x00e6, 0x00d6,
+	0x00c6, 0x0066, 0x0016, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071,
+	0x19e7, 0x7614, 0x2660, 0x2678, 0x8cff, 0x0904, 0x9339, 0x6010,
+	0x2058, 0xb8a0, 0x9206, 0x1904, 0x9334, 0x88ff, 0x0120, 0x6054,
+	0x9106, 0x1904, 0x9334, 0x7024, 0x9c06, 0x1558, 0x2069, 0x0100,
+	0x6820, 0xd0a4, 0x1508, 0x080c, 0x8579, 0x080c, 0xa273, 0x68c3,
+	0x0000, 0x080c, 0xa7bc, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140,
+	0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2cef,
+	0x9006, 0x080c, 0x2cef, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110,
+	0x6827, 0x0001, 0x003e, 0x0028, 0x6003, 0x0009, 0x630a, 0x0804,
+	0x9334, 0x7014, 0x9c36, 0x1110, 0x660c, 0x7616, 0x7010, 0x9c36,
+	0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7012, 0x0010, 0x7013,
+	0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008,
+	0x2678, 0x600f, 0x0000, 0x6014, 0x2048, 0x080c, 0xcb35, 0x01e8,
+	0x6020, 0x9086, 0x0003, 0x1580, 0x080c, 0xcd3b, 0x1118, 0x080c,
+	0xb813, 0x0098, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x0016,
+	0x0036, 0x0086, 0x080c, 0xce24, 0x080c, 0xe908, 0x080c, 0x6c81,
+	0x008e, 0x003e, 0x001e, 0x080c, 0xcd1e, 0x080c, 0xae92, 0x080c,
+	0xa692, 0x00ce, 0x0804, 0x92b4, 0x2c78, 0x600c, 0x2060, 0x0804,
+	0x92b4, 0x012e, 0x000e, 0x001e, 0x006e, 0x00ce, 0x00de, 0x00ee,
+	0x00fe, 0x009e, 0x00be, 0x0005, 0x6020, 0x9086, 0x0006, 0x1158,
+	0x0016, 0x0036, 0x0086, 0x080c, 0xe908, 0x080c, 0xe551, 0x008e,
+	0x003e, 0x001e, 0x08d0, 0x080c, 0xb813, 0x6020, 0x9086, 0x0002,
+	0x1160, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x0904, 0x931a,
+	0x9086, 0x008b, 0x0904, 0x931a, 0x0840, 0x6020, 0x9086, 0x0005,
+	0x1920, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x09c8, 0x9086,
+	0x008b, 0x09b0, 0x0804, 0x932d, 0x00b6, 0x00a6, 0x0096, 0x00c6,
+	0x0006, 0x0126, 0x2091, 0x8000, 0x9280, 0x1000, 0x2004, 0x905d,
+	0x0904, 0x9404, 0x00f6, 0x00e6, 0x00d6, 0x0066, 0x2071, 0x19e7,
+	0xbe54, 0x7018, 0x9b06, 0x1108, 0x761a, 0x701c, 0x9b06, 0x1130,
+	0x86ff, 0x1118, 0x7018, 0x701e, 0x0008, 0x761e, 0xb858, 0x904d,
+	0x0108, 0xae56, 0x96d5, 0x0000, 0x0110, 0x2900, 0xb05a, 0xb857,
+	0x0000, 0xb85b, 0x0000, 0xb800, 0xc0d4, 0xc0dc, 0xb802, 0x080c,
+	0x6531, 0x0904, 0x9400, 0x7624, 0x86ff, 0x0904, 0x93ef, 0x9680,
+	0x0005, 0x2004, 0x9906, 0x15d8, 0x00d6, 0x2069, 0x0100, 0x68c0,
+	0x9005, 0x0560, 0x080c, 0x8579, 0x080c, 0xa273, 0x68c3, 0x0000,
+	0x080c, 0xa7bc, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04,
 	0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2cef, 0x9006,
 	0x080c, 0x2cef, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827,
-	0x0001, 0x003e, 0x0028, 0x6003, 0x0009, 0x630a, 0x0804, 0x930b,
-	0x7014, 0x9c36, 0x1110, 0x660c, 0x7616, 0x7010, 0x9c36, 0x1140,
-	0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7012, 0x0010, 0x7013, 0x0000,
-	0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678,
-	0x600f, 0x0000, 0x6014, 0x2048, 0x080c, 0xcb1b, 0x01e8, 0x6020,
-	0x9086, 0x0003, 0x1580, 0x080c, 0xcd21, 0x1118, 0x080c, 0xb7f9,
-	0x0098, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x0016, 0x0036,
-	0x0086, 0x080c, 0xce0a, 0x080c, 0xe8e7, 0x080c, 0x6c79, 0x008e,
-	0x003e, 0x001e, 0x080c, 0xcd04, 0x080c, 0xae78, 0x080c, 0xa678,
-	0x00ce, 0x0804, 0x928b, 0x2c78, 0x600c, 0x2060, 0x0804, 0x928b,
-	0x012e, 0x000e, 0x001e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe,
-	0x009e, 0x00be, 0x0005, 0x6020, 0x9086, 0x0006, 0x1158, 0x0016,
-	0x0036, 0x0086, 0x080c, 0xe8e7, 0x080c, 0xe530, 0x008e, 0x003e,
-	0x001e, 0x08d0, 0x080c, 0xb7f9, 0x6020, 0x9086, 0x0002, 0x1160,
-	0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x0904, 0x92f1, 0x9086,
-	0x008b, 0x0904, 0x92f1, 0x0840, 0x6020, 0x9086, 0x0005, 0x1920,
-	0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x09c8, 0x9086, 0x008b,
-	0x09b0, 0x0804, 0x9304, 0x00b6, 0x00a6, 0x0096, 0x00c6, 0x0006,
-	0x0126, 0x2091, 0x8000, 0x9280, 0x1000, 0x2004, 0x905d, 0x0904,
-	0x93db, 0x00f6, 0x00e6, 0x00d6, 0x0066, 0x2071, 0x19e7, 0xbe54,
-	0x7018, 0x9b06, 0x1108, 0x761a, 0x701c, 0x9b06, 0x1130, 0x86ff,
-	0x1118, 0x7018, 0x701e, 0x0008, 0x761e, 0xb858, 0x904d, 0x0108,
-	0xae56, 0x96d5, 0x0000, 0x0110, 0x2900, 0xb05a, 0xb857, 0x0000,
-	0xb85b, 0x0000, 0xb800, 0xc0d4, 0xc0dc, 0xb802, 0x080c, 0x6532,
-	0x0904, 0x93d7, 0x7624, 0x86ff, 0x0904, 0x93c6, 0x9680, 0x0005,
-	0x2004, 0x9906, 0x15d8, 0x00d6, 0x2069, 0x0100, 0x68c0, 0x9005,
-	0x0560, 0x080c, 0x8550, 0x080c, 0xa259, 0x68c3, 0x0000, 0x080c,
-	0xa7a2, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384,
+	0x0001, 0x003e, 0x00de, 0x00c6, 0xb83c, 0x9005, 0x0110, 0x8001,
+	0xb83e, 0x2660, 0x080c, 0xae92, 0x00ce, 0x0048, 0x00de, 0x00c6,
+	0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, 0x0804, 0x93a7, 0x89ff,
+	0x0158, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0xce24,
+	0x080c, 0xe908, 0x080c, 0x6c81, 0x080c, 0xa692, 0x0804, 0x93a7,
+	0x006e, 0x00de, 0x00ee, 0x00fe, 0x012e, 0x000e, 0x00ce, 0x009e,
+	0x00ae, 0x00be, 0x0005, 0x0096, 0x0006, 0x0066, 0x00c6, 0x00d6,
+	0x9036, 0x7814, 0x9065, 0x0904, 0x946c, 0x600c, 0x0006, 0x600f,
+	0x0000, 0x7824, 0x9c06, 0x1570, 0x2069, 0x0100, 0x6820, 0xd0a4,
+	0x1508, 0x080c, 0x8579, 0x080c, 0xa273, 0x68c3, 0x0000, 0x080c,
+	0xa7bc, 0x7827, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384,
+	0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2cef, 0x9006, 0x080c,
+	0x2cef, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001,
+	0x003e, 0x0040, 0x080c, 0x690a, 0x1520, 0x6003, 0x0009, 0x630a,
+	0x2c30, 0x00f8, 0x6014, 0x2048, 0x080c, 0xcb33, 0x01b0, 0x6020,
+	0x9086, 0x0003, 0x1508, 0x080c, 0xcd3b, 0x1118, 0x080c, 0xb813,
+	0x0060, 0x080c, 0x690a, 0x1168, 0xa867, 0x0103, 0xab7a, 0xa877,
+	0x0000, 0x080c, 0x6c81, 0x080c, 0xcd1e, 0x080c, 0xae92, 0x080c,
+	0xa692, 0x000e, 0x0804, 0x9412, 0x7e16, 0x7e12, 0x00de, 0x00ce,
+	0x006e, 0x000e, 0x009e, 0x0005, 0x6020, 0x9086, 0x0006, 0x1118,
+	0x080c, 0xe551, 0x0c50, 0x080c, 0xb813, 0x6020, 0x9086, 0x0002,
+	0x1150, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x0990, 0x9086,
+	0x008b, 0x0978, 0x08d0, 0x6020, 0x9086, 0x0005, 0x19b0, 0x6004,
+	0x0006, 0x9086, 0x0085, 0x000e, 0x0d18, 0x9086, 0x008b, 0x0d00,
+	0x0860, 0x0006, 0x0066, 0x0096, 0x00b6, 0x00c6, 0x00d6, 0x7818,
+	0x905d, 0x0904, 0x9519, 0xb854, 0x0006, 0x9006, 0xb856, 0xb85a,
+	0xb800, 0xc0d4, 0xc0dc, 0xb802, 0x080c, 0x6531, 0x0904, 0x9516,
+	0x7e24, 0x86ff, 0x0904, 0x9509, 0x9680, 0x0005, 0x2004, 0x9906,
+	0x1904, 0x9509, 0x00d6, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904,
+	0x9500, 0x080c, 0x8579, 0x080c, 0xa273, 0x68c3, 0x0000, 0x080c,
+	0xa7bc, 0x7827, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384,
 	0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2cef, 0x9006, 0x080c,
 	0x2cef, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001,
-	0x003e, 0x00de, 0x00c6, 0xb83c, 0x9005, 0x0110, 0x8001, 0xb83e,
-	0x2660, 0x080c, 0xae78, 0x00ce, 0x0048, 0x00de, 0x00c6, 0x2660,
-	0x6003, 0x0009, 0x630a, 0x00ce, 0x0804, 0x937e, 0x89ff, 0x0158,
-	0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0xce0a, 0x080c,
-	0xe8e7, 0x080c, 0x6c79, 0x080c, 0xa678, 0x0804, 0x937e, 0x006e,
-	0x00de, 0x00ee, 0x00fe, 0x012e, 0x000e, 0x00ce, 0x009e, 0x00ae,
-	0x00be, 0x0005, 0x0096, 0x0006, 0x0066, 0x00c6, 0x00d6, 0x9036,
-	0x7814, 0x9065, 0x0904, 0x9443, 0x600c, 0x0006, 0x600f, 0x0000,
-	0x7824, 0x9c06, 0x1570, 0x2069, 0x0100, 0x6820, 0xd0a4, 0x1508,
-	0x080c, 0x8550, 0x080c, 0xa259, 0x68c3, 0x0000, 0x080c, 0xa7a2,
-	0x7827, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000,
-	0x0138, 0x2001, 0x0100, 0x080c, 0x2cef, 0x9006, 0x080c, 0x2cef,
-	0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e,
-	0x0040, 0x080c, 0x6902, 0x1520, 0x6003, 0x0009, 0x630a, 0x2c30,
-	0x00f8, 0x6014, 0x2048, 0x080c, 0xcb19, 0x01b0, 0x6020, 0x9086,
-	0x0003, 0x1508, 0x080c, 0xcd21, 0x1118, 0x080c, 0xb7f9, 0x0060,
-	0x080c, 0x6902, 0x1168, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000,
-	0x080c, 0x6c79, 0x080c, 0xcd04, 0x080c, 0xae78, 0x080c, 0xa678,
-	0x000e, 0x0804, 0x93e9, 0x7e16, 0x7e12, 0x00de, 0x00ce, 0x006e,
-	0x000e, 0x009e, 0x0005, 0x6020, 0x9086, 0x0006, 0x1118, 0x080c,
-	0xe530, 0x0c50, 0x080c, 0xb7f9, 0x6020, 0x9086, 0x0002, 0x1150,
-	0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x0990, 0x9086, 0x008b,
-	0x0978, 0x08d0, 0x6020, 0x9086, 0x0005, 0x19b0, 0x6004, 0x0006,
-	0x9086, 0x0085, 0x000e, 0x0d18, 0x9086, 0x008b, 0x0d00, 0x0860,
-	0x0006, 0x0066, 0x0096, 0x00b6, 0x00c6, 0x00d6, 0x7818, 0x905d,
-	0x0904, 0x94f0, 0xb854, 0x0006, 0x9006, 0xb856, 0xb85a, 0xb800,
-	0xc0d4, 0xc0dc, 0xb802, 0x080c, 0x6532, 0x0904, 0x94ed, 0x7e24,
-	0x86ff, 0x0904, 0x94e0, 0x9680, 0x0005, 0x2004, 0x9906, 0x1904,
-	0x94e0, 0x00d6, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, 0x94d7,
-	0x080c, 0x8550, 0x080c, 0xa259, 0x68c3, 0x0000, 0x080c, 0xa7a2,
-	0x7827, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000,
-	0x0138, 0x2001, 0x0100, 0x080c, 0x2cef, 0x9006, 0x080c, 0x2cef,
-	0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e,
-	0x00de, 0x00c6, 0x3e08, 0x918e, 0x0002, 0x1168, 0xb800, 0xd0bc,
-	0x0150, 0x9680, 0x0010, 0x200c, 0x81ff, 0x1518, 0x2009, 0x1988,
-	0x210c, 0x2102, 0x00f0, 0xb83c, 0x9005, 0x0110, 0x8001, 0xb83e,
-	0x2660, 0x600f, 0x0000, 0x080c, 0xae78, 0x00ce, 0x0048, 0x00de,
-	0x00c6, 0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, 0x0804, 0x9483,
-	0x89ff, 0x0138, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c,
-	0x6c79, 0x080c, 0xa678, 0x0804, 0x9483, 0x000e, 0x0804, 0x9477,
-	0x781e, 0x781a, 0x00de, 0x00ce, 0x00be, 0x009e, 0x006e, 0x000e,
-	0x0005, 0x00e6, 0x00d6, 0x0096, 0x0066, 0xb800, 0xd0dc, 0x01a0,
-	0xb84c, 0x904d, 0x0188, 0xa878, 0x9606, 0x1170, 0x2071, 0x19e7,
-	0x7024, 0x9035, 0x0148, 0x9080, 0x0005, 0x2004, 0x9906, 0x1120,
-	0xb800, 0xc0dc, 0xb802, 0x0029, 0x006e, 0x009e, 0x00de, 0x00ee,
-	0x0005, 0x00f6, 0x2079, 0x0100, 0x78c0, 0x9005, 0x1138, 0x00c6,
-	0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, 0x04b8, 0x080c, 0xa259,
-	0x78c3, 0x0000, 0x080c, 0xa7a2, 0x7027, 0x0000, 0x0036, 0x2079,
-	0x0140, 0x7b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c,
-	0x2cef, 0x9006, 0x080c, 0x2cef, 0x2079, 0x0100, 0x7824, 0xd084,
-	0x0110, 0x7827, 0x0001, 0x080c, 0xa7a2, 0x003e, 0x080c, 0x6532,
-	0x00c6, 0xb83c, 0x9005, 0x0110, 0x8001, 0xb83e, 0x2660, 0x080c,
-	0xae47, 0x00ce, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c,
-	0xce0a, 0x080c, 0x6c79, 0x080c, 0xa678, 0x00fe, 0x0005, 0x00b6,
-	0x00e6, 0x00c6, 0x2011, 0x0101, 0x2204, 0xc0c4, 0x2012, 0x2001,
-	0x180c, 0x2014, 0xc2e4, 0x2202, 0x2071, 0x19e7, 0x7004, 0x9084,
-	0x0007, 0x0002, 0x957c, 0x9580, 0x9597, 0x95c0, 0x95fe, 0x957c,
-	0x9597, 0x957a, 0x080c, 0x0dd5, 0x00ce, 0x00ee, 0x00be, 0x0005,
-	0x7024, 0x9065, 0x0148, 0x7020, 0x8001, 0x7022, 0x600c, 0x9015,
-	0x0158, 0x7216, 0x600f, 0x0000, 0x7007, 0x0000, 0x7027, 0x0000,
-	0x00ce, 0x00ee, 0x00be, 0x0005, 0x7216, 0x7212, 0x0ca8, 0x6010,
-	0x2058, 0x080c, 0x6532, 0xb800, 0xc0dc, 0xb802, 0x7007, 0x0000,
-	0x7027, 0x0000, 0x7020, 0x8001, 0x7022, 0x1148, 0x2001, 0x180c,
-	0x2014, 0xd2ec, 0x1180, 0x00ce, 0x00ee, 0x00be, 0x0005, 0xb854,
-	0x9015, 0x0120, 0x721e, 0x080c, 0x9664, 0x0ca8, 0x7218, 0x721e,
-	0x080c, 0x9664, 0x0c80, 0xc2ec, 0x2202, 0x080c, 0x9790, 0x0c58,
-	0x7024, 0x9065, 0x05b8, 0x700c, 0x9c06, 0x1160, 0x080c, 0xa678,
-	0x600c, 0x9015, 0x0120, 0x720e, 0x600f, 0x0000, 0x0448, 0x720e,
-	0x720a, 0x0430, 0x7014, 0x9c06, 0x1160, 0x080c, 0xa678, 0x600c,
-	0x9015, 0x0120, 0x7216, 0x600f, 0x0000, 0x00d0, 0x7216, 0x7212,
-	0x00b8, 0x6020, 0x9086, 0x0003, 0x1198, 0x6010, 0x2058, 0x080c,
-	0x6532, 0xb800, 0xc0dc, 0xb802, 0x080c, 0xa678, 0x701c, 0x9065,
-	0x0138, 0xb854, 0x9015, 0x0110, 0x721e, 0x0010, 0x7218, 0x721e,
-	0x7027, 0x0000, 0x00ce, 0x00ee, 0x00be, 0x0005, 0x7024, 0x9065,
-	0x0140, 0x080c, 0xa678, 0x600c, 0x9015, 0x0158, 0x720e, 0x600f,
-	0x0000, 0x080c, 0xa7a2, 0x7027, 0x0000, 0x00ce, 0x00ee, 0x00be,
-	0x0005, 0x720e, 0x720a, 0x0ca8, 0x00d6, 0x2069, 0x19e7, 0x6830,
-	0x9084, 0x0003, 0x0002, 0x9621, 0x9623, 0x9647, 0x961f, 0x080c,
-	0x0dd5, 0x00de, 0x0005, 0x00c6, 0x6840, 0x9086, 0x0001, 0x01b8,
-	0x683c, 0x9065, 0x0130, 0x600c, 0x9015, 0x0170, 0x6a3a, 0x600f,
-	0x0000, 0x6833, 0x0000, 0x683f, 0x0000, 0x2011, 0x1a06, 0x2013,
-	0x0000, 0x00ce, 0x00de, 0x0005, 0x683a, 0x6836, 0x0c90, 0x6843,
-	0x0000, 0x6838, 0x9065, 0x0d68, 0x6003, 0x0003, 0x0c50, 0x00c6,
-	0x9006, 0x6842, 0x6846, 0x684a, 0x683c, 0x9065, 0x0160, 0x600c,
-	0x9015, 0x0130, 0x6a3a, 0x600f, 0x0000, 0x683f, 0x0000, 0x0018,
-	0x683e, 0x683a, 0x6836, 0x00ce, 0x00de, 0x0005, 0x2001, 0x180c,
-	0x200c, 0xc1e5, 0x2102, 0x0005, 0x2001, 0x180c, 0x200c, 0xd1ec,
-	0x0120, 0xc1ec, 0x2102, 0x080c, 0x9790, 0x2001, 0x19f3, 0x2004,
-	0x9086, 0x0001, 0x0d58, 0x00d6, 0x2069, 0x19e7, 0x6804, 0x9084,
-	0x0007, 0x0006, 0x9005, 0x11c8, 0x2001, 0x1837, 0x2004, 0x9084,
-	0x0028, 0x1198, 0x2001, 0x197c, 0x2004, 0x9086, 0xaaaa, 0x0168,
-	0x2001, 0x188b, 0x2004, 0xd08c, 0x1118, 0xd084, 0x1118, 0x0028,
-	0x080c, 0x9790, 0x000e, 0x00de, 0x0005, 0x000e, 0x0002, 0x96a1,
-	0x975e, 0x975e, 0x975e, 0x975e, 0x9760, 0x975e, 0x969f, 0x080c,
-	0x0dd5, 0x6820, 0x9005, 0x1110, 0x00de, 0x0005, 0x00c6, 0x680c,
-	0x9065, 0x0520, 0x6114, 0x0096, 0x2148, 0xa964, 0x009e, 0x918c,
-	0x00ff, 0x918e, 0x0035, 0x1180, 0x2009, 0x1837, 0x210c, 0x918c,
-	0x0028, 0x1150, 0x080c, 0x73b0, 0x0138, 0x0006, 0x2009, 0x188b,
-	0x2104, 0xc095, 0x200a, 0x000e, 0x6807, 0x0004, 0x6826, 0x682b,
-	0x0000, 0x080c, 0x9838, 0x00ce, 0x00de, 0x0005, 0x6814, 0x9065,
-	0x0150, 0x6807, 0x0001, 0x6826, 0x682b, 0x0000, 0x080c, 0x9838,
-	0x00ce, 0x00de, 0x0005, 0x00b6, 0x00e6, 0x6a1c, 0x92dd, 0x0000,
-	0x0904, 0x974a, 0xb84c, 0x900d, 0x0118, 0xb888, 0x9005, 0x01a0,
-	0xb854, 0x905d, 0x0120, 0x920e, 0x0904, 0x974a, 0x0028, 0x6818,
-	0x920e, 0x0904, 0x974a, 0x2058, 0xb84c, 0x900d, 0x0d88, 0xb888,
-	0x9005, 0x1d70, 0x2b00, 0x681e, 0xbb3c, 0xb838, 0x9302, 0x1e40,
-	0x080c, 0xae1e, 0x0904, 0x974a, 0x8318, 0xbb3e, 0x6116, 0x2b10,
-	0x6212, 0x0096, 0x2148, 0xa880, 0x9084, 0x00ff, 0x605e, 0xa883,
-	0x0000, 0xa884, 0x009e, 0x908a, 0x199a, 0x0210, 0x2001, 0x1999,
-	0x8003, 0x801b, 0x831b, 0x9318, 0x631a, 0x6114, 0x0096, 0x2148,
-	0xa964, 0x009e, 0x918c, 0x00ff, 0x918e, 0x0048, 0x0538, 0x00f6,
-	0x2c78, 0x2061, 0x0100, 0xbac0, 0x629a, 0x2069, 0x0200, 0x2071,
-	0x0240, 0x080c, 0x9d85, 0x2069, 0x19e7, 0xbb00, 0xc3dd, 0xbb02,
-	0x6807, 0x0002, 0x2f18, 0x6b26, 0x682b, 0x0000, 0x7823, 0x0003,
-	0x7803, 0x0001, 0x7807, 0x0040, 0x00fe, 0x00ee, 0x00be, 0x00ce,
-	0x00de, 0x0005, 0x00ee, 0x00be, 0x00ce, 0x0cd0, 0xbb00, 0xc3dd,
-	0xbb02, 0x6807, 0x0006, 0x2f18, 0x6b26, 0x682b, 0x0000, 0x080c,
-	0xac63, 0x00ee, 0x00be, 0x00ce, 0x00de, 0x0005, 0x00de, 0x0005,
-	0x00c6, 0x680c, 0x9065, 0x0508, 0x6114, 0x0096, 0x2148, 0xa964,
-	0x009e, 0x918c, 0x00ff, 0x918e, 0x0035, 0x1180, 0x2009, 0x1837,
-	0x210c, 0x918c, 0x0028, 0x1150, 0x080c, 0x73b0, 0x0138, 0x0006,
-	0x2009, 0x188b, 0x2104, 0xc095, 0x200a, 0x000e, 0x6807, 0x0004,
-	0x6826, 0x682b, 0x0000, 0x080c, 0x9838, 0x00ce, 0x00de, 0x0005,
-	0x2001, 0x180c, 0x2014, 0xc2ed, 0x2202, 0x00de, 0x00fe, 0x0005,
-	0x00f6, 0x00d6, 0x2069, 0x19e7, 0x6830, 0x9086, 0x0000, 0x1570,
-	0x2001, 0x180c, 0x2014, 0xd2e4, 0x0130, 0xc2e4, 0x2202, 0x080c,
-	0x9673, 0x2069, 0x19e7, 0x2001, 0x180c, 0x200c, 0xd1c4, 0x1508,
-	0x6838, 0x907d, 0x01d8, 0x6a04, 0x9296, 0x0000, 0x1904, 0x9831,
-	0x7920, 0x918e, 0x0009, 0x0588, 0x6833, 0x0001, 0x683e, 0x6847,
+	0x003e, 0x00de, 0x00c6, 0x3e08, 0x918e, 0x0002, 0x1168, 0xb800,
+	0xd0bc, 0x0150, 0x9680, 0x0010, 0x200c, 0x81ff, 0x1518, 0x2009,
+	0x1988, 0x210c, 0x2102, 0x00f0, 0xb83c, 0x9005, 0x0110, 0x8001,
+	0xb83e, 0x2660, 0x600f, 0x0000, 0x080c, 0xae92, 0x00ce, 0x0048,
+	0x00de, 0x00c6, 0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, 0x0804,
+	0x94ac, 0x89ff, 0x0138, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000,
+	0x080c, 0x6c81, 0x080c, 0xa692, 0x0804, 0x94ac, 0x000e, 0x0804,
+	0x94a0, 0x781e, 0x781a, 0x00de, 0x00ce, 0x00be, 0x009e, 0x006e,
+	0x000e, 0x0005, 0x00e6, 0x00d6, 0x0096, 0x0066, 0xb800, 0xd0dc,
+	0x01a0, 0xb84c, 0x904d, 0x0188, 0xa878, 0x9606, 0x1170, 0x2071,
+	0x19e7, 0x7024, 0x9035, 0x0148, 0x9080, 0x0005, 0x2004, 0x9906,
+	0x1120, 0xb800, 0xc0dc, 0xb802, 0x0029, 0x006e, 0x009e, 0x00de,
+	0x00ee, 0x0005, 0x00f6, 0x2079, 0x0100, 0x78c0, 0x9005, 0x1138,
+	0x00c6, 0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, 0x04b8, 0x080c,
+	0xa273, 0x78c3, 0x0000, 0x080c, 0xa7bc, 0x7027, 0x0000, 0x0036,
+	0x2079, 0x0140, 0x7b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100,
+	0x080c, 0x2cef, 0x9006, 0x080c, 0x2cef, 0x2079, 0x0100, 0x7824,
+	0xd084, 0x0110, 0x7827, 0x0001, 0x080c, 0xa7bc, 0x003e, 0x080c,
+	0x6531, 0x00c6, 0xb83c, 0x9005, 0x0110, 0x8001, 0xb83e, 0x2660,
+	0x080c, 0xae61, 0x00ce, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000,
+	0x080c, 0xce24, 0x080c, 0x6c81, 0x080c, 0xa692, 0x00fe, 0x0005,
+	0x00b6, 0x00e6, 0x00c6, 0x2011, 0x0101, 0x2204, 0xc0c4, 0x2012,
+	0x2001, 0x180c, 0x2014, 0xc2e4, 0x2202, 0x2071, 0x19e7, 0x7004,
+	0x9084, 0x0007, 0x0002, 0x95a5, 0x95a9, 0x95c0, 0x95e9, 0x9627,
+	0x95a5, 0x95c0, 0x95a3, 0x080c, 0x0dd5, 0x00ce, 0x00ee, 0x00be,
+	0x0005, 0x7024, 0x9065, 0x0148, 0x7020, 0x8001, 0x7022, 0x600c,
+	0x9015, 0x0158, 0x7216, 0x600f, 0x0000, 0x7007, 0x0000, 0x7027,
+	0x0000, 0x00ce, 0x00ee, 0x00be, 0x0005, 0x7216, 0x7212, 0x0ca8,
+	0x6010, 0x2058, 0x080c, 0x6531, 0xb800, 0xc0dc, 0xb802, 0x7007,
+	0x0000, 0x7027, 0x0000, 0x7020, 0x8001, 0x7022, 0x1148, 0x2001,
+	0x180c, 0x2014, 0xd2ec, 0x1180, 0x00ce, 0x00ee, 0x00be, 0x0005,
+	0xb854, 0x9015, 0x0120, 0x721e, 0x080c, 0x968d, 0x0ca8, 0x7218,
+	0x721e, 0x080c, 0x968d, 0x0c80, 0xc2ec, 0x2202, 0x080c, 0x97b9,
+	0x0c58, 0x7024, 0x9065, 0x05b8, 0x700c, 0x9c06, 0x1160, 0x080c,
+	0xa692, 0x600c, 0x9015, 0x0120, 0x720e, 0x600f, 0x0000, 0x0448,
+	0x720e, 0x720a, 0x0430, 0x7014, 0x9c06, 0x1160, 0x080c, 0xa692,
+	0x600c, 0x9015, 0x0120, 0x7216, 0x600f, 0x0000, 0x00d0, 0x7216,
+	0x7212, 0x00b8, 0x6020, 0x9086, 0x0003, 0x1198, 0x6010, 0x2058,
+	0x080c, 0x6531, 0xb800, 0xc0dc, 0xb802, 0x080c, 0xa692, 0x701c,
+	0x9065, 0x0138, 0xb854, 0x9015, 0x0110, 0x721e, 0x0010, 0x7218,
+	0x721e, 0x7027, 0x0000, 0x00ce, 0x00ee, 0x00be, 0x0005, 0x7024,
+	0x9065, 0x0140, 0x080c, 0xa692, 0x600c, 0x9015, 0x0158, 0x720e,
+	0x600f, 0x0000, 0x080c, 0xa7bc, 0x7027, 0x0000, 0x00ce, 0x00ee,
+	0x00be, 0x0005, 0x720e, 0x720a, 0x0ca8, 0x00d6, 0x2069, 0x19e7,
+	0x6830, 0x9084, 0x0003, 0x0002, 0x964a, 0x964c, 0x9670, 0x9648,
+	0x080c, 0x0dd5, 0x00de, 0x0005, 0x00c6, 0x6840, 0x9086, 0x0001,
+	0x01b8, 0x683c, 0x9065, 0x0130, 0x600c, 0x9015, 0x0170, 0x6a3a,
+	0x600f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, 0x2011, 0x1a06,
+	0x2013, 0x0000, 0x00ce, 0x00de, 0x0005, 0x683a, 0x6836, 0x0c90,
+	0x6843, 0x0000, 0x6838, 0x9065, 0x0d68, 0x6003, 0x0003, 0x0c50,
+	0x00c6, 0x9006, 0x6842, 0x6846, 0x684a, 0x683c, 0x9065, 0x0160,
+	0x600c, 0x9015, 0x0130, 0x6a3a, 0x600f, 0x0000, 0x683f, 0x0000,
+	0x0018, 0x683e, 0x683a, 0x6836, 0x00ce, 0x00de, 0x0005, 0x2001,
+	0x180c, 0x200c, 0xc1e5, 0x2102, 0x0005, 0x2001, 0x180c, 0x200c,
+	0xd1ec, 0x0120, 0xc1ec, 0x2102, 0x080c, 0x97b9, 0x2001, 0x19f3,
+	0x2004, 0x9086, 0x0001, 0x0d58, 0x00d6, 0x2069, 0x19e7, 0x6804,
+	0x9084, 0x0007, 0x0006, 0x9005, 0x11c8, 0x2001, 0x1837, 0x2004,
+	0x9084, 0x0028, 0x1198, 0x2001, 0x197c, 0x2004, 0x9086, 0xaaaa,
+	0x0168, 0x2001, 0x188b, 0x2004, 0xd08c, 0x1118, 0xd084, 0x1118,
+	0x0028, 0x080c, 0x97b9, 0x000e, 0x00de, 0x0005, 0x000e, 0x0002,
+	0x96ca, 0x9787, 0x9787, 0x9787, 0x9787, 0x9789, 0x9787, 0x96c8,
+	0x080c, 0x0dd5, 0x6820, 0x9005, 0x1110, 0x00de, 0x0005, 0x00c6,
+	0x680c, 0x9065, 0x0520, 0x6114, 0x0096, 0x2148, 0xa964, 0x009e,
+	0x918c, 0x00ff, 0x918e, 0x0035, 0x1180, 0x2009, 0x1837, 0x210c,
+	0x918c, 0x0028, 0x1150, 0x080c, 0x73bc, 0x0138, 0x0006, 0x2009,
+	0x188b, 0x2104, 0xc095, 0x200a, 0x000e, 0x6807, 0x0004, 0x6826,
+	0x682b, 0x0000, 0x080c, 0x9861, 0x00ce, 0x00de, 0x0005, 0x6814,
+	0x9065, 0x0150, 0x6807, 0x0001, 0x6826, 0x682b, 0x0000, 0x080c,
+	0x9861, 0x00ce, 0x00de, 0x0005, 0x00b6, 0x00e6, 0x6a1c, 0x92dd,
+	0x0000, 0x0904, 0x9773, 0xb84c, 0x900d, 0x0118, 0xb888, 0x9005,
+	0x01a0, 0xb854, 0x905d, 0x0120, 0x920e, 0x0904, 0x9773, 0x0028,
+	0x6818, 0x920e, 0x0904, 0x9773, 0x2058, 0xb84c, 0x900d, 0x0d88,
+	0xb888, 0x9005, 0x1d70, 0x2b00, 0x681e, 0xbb3c, 0xb838, 0x9302,
+	0x1e40, 0x080c, 0xae38, 0x0904, 0x9773, 0x8318, 0xbb3e, 0x6116,
+	0x2b10, 0x6212, 0x0096, 0x2148, 0xa880, 0x9084, 0x00ff, 0x605e,
+	0xa883, 0x0000, 0xa884, 0x009e, 0x908a, 0x199a, 0x0210, 0x2001,
+	0x1999, 0x8003, 0x801b, 0x831b, 0x9318, 0x631a, 0x6114, 0x0096,
+	0x2148, 0xa964, 0x009e, 0x918c, 0x00ff, 0x918e, 0x0048, 0x0538,
+	0x00f6, 0x2c78, 0x2061, 0x0100, 0xbac0, 0x629a, 0x2069, 0x0200,
+	0x2071, 0x0240, 0x080c, 0x9dae, 0x2069, 0x19e7, 0xbb00, 0xc3dd,
+	0xbb02, 0x6807, 0x0002, 0x2f18, 0x6b26, 0x682b, 0x0000, 0x7823,
+	0x0003, 0x7803, 0x0001, 0x7807, 0x0040, 0x00fe, 0x00ee, 0x00be,
+	0x00ce, 0x00de, 0x0005, 0x00ee, 0x00be, 0x00ce, 0x0cd0, 0xbb00,
+	0xc3dd, 0xbb02, 0x6807, 0x0006, 0x2f18, 0x6b26, 0x682b, 0x0000,
+	0x080c, 0xac7d, 0x00ee, 0x00be, 0x00ce, 0x00de, 0x0005, 0x00de,
+	0x0005, 0x00c6, 0x680c, 0x9065, 0x0508, 0x6114, 0x0096, 0x2148,
+	0xa964, 0x009e, 0x918c, 0x00ff, 0x918e, 0x0035, 0x1180, 0x2009,
+	0x1837, 0x210c, 0x918c, 0x0028, 0x1150, 0x080c, 0x73bc, 0x0138,
+	0x0006, 0x2009, 0x188b, 0x2104, 0xc095, 0x200a, 0x000e, 0x6807,
+	0x0004, 0x6826, 0x682b, 0x0000, 0x080c, 0x9861, 0x00ce, 0x00de,
+	0x0005, 0x2001, 0x180c, 0x2014, 0xc2ed, 0x2202, 0x00de, 0x00fe,
+	0x0005, 0x00f6, 0x00d6, 0x2069, 0x19e7, 0x6830, 0x9086, 0x0000,
+	0x1570, 0x2001, 0x180c, 0x2014, 0xd2e4, 0x0130, 0xc2e4, 0x2202,
+	0x080c, 0x969c, 0x2069, 0x19e7, 0x2001, 0x180c, 0x200c, 0xd1c4,
+	0x1508, 0x6838, 0x907d, 0x01d8, 0x6a04, 0x9296, 0x0000, 0x1904,
+	0x985a, 0x7920, 0x918e, 0x0009, 0x0588, 0x6833, 0x0001, 0x683e,
+	0x6847, 0x0000, 0x684b, 0x0000, 0x0126, 0x00f6, 0x2091, 0x2400,
+	0x002e, 0x080c, 0x1c46, 0x1178, 0x012e, 0x080c, 0xa0d0, 0x00de,
+	0x00fe, 0x0005, 0xc1c4, 0x2102, 0x0066, 0x2031, 0x0001, 0x080c,
+	0x746c, 0x006e, 0x08b0, 0x012e, 0x6843, 0x0000, 0x7803, 0x0002,
+	0x780c, 0x9015, 0x0140, 0x6a3a, 0x780f, 0x0000, 0x6833, 0x0000,
+	0x683f, 0x0000, 0x0c20, 0x683a, 0x6836, 0x0cc0, 0x7908, 0xd1fc,
+	0x1198, 0x6833, 0x0001, 0x683e, 0x6847, 0x0000, 0x684b, 0x0000,
+	0x0126, 0x00f6, 0x2091, 0x2400, 0x002e, 0x080c, 0x1c46, 0x19d8,
+	0x012e, 0x080c, 0xa051, 0x0858, 0x2001, 0x1837, 0x2004, 0x9084,
+	0x0028, 0x1188, 0x2001, 0x197c, 0x2004, 0x9086, 0xaaaa, 0x0158,
+	0x2001, 0x19e8, 0x2004, 0x9005, 0x11f0, 0x2001, 0x188b, 0x200c,
+	0xc185, 0xc18c, 0x2102, 0x2f00, 0x6833, 0x0001, 0x683e, 0x6847,
 	0x0000, 0x684b, 0x0000, 0x0126, 0x00f6, 0x2091, 0x2400, 0x002e,
-	0x080c, 0x1c46, 0x1178, 0x012e, 0x080c, 0xa0a7, 0x00de, 0x00fe,
-	0x0005, 0xc1c4, 0x2102, 0x0066, 0x2031, 0x0001, 0x080c, 0x7460,
-	0x006e, 0x08b0, 0x012e, 0x6843, 0x0000, 0x7803, 0x0002, 0x780c,
-	0x9015, 0x0140, 0x6a3a, 0x780f, 0x0000, 0x6833, 0x0000, 0x683f,
-	0x0000, 0x0c20, 0x683a, 0x6836, 0x0cc0, 0x7908, 0xd1fc, 0x1198,
-	0x6833, 0x0001, 0x683e, 0x6847, 0x0000, 0x684b, 0x0000, 0x0126,
-	0x00f6, 0x2091, 0x2400, 0x002e, 0x080c, 0x1c46, 0x19d8, 0x012e,
-	0x080c, 0xa028, 0x0858, 0x2001, 0x1837, 0x2004, 0x9084, 0x0028,
-	0x1188, 0x2001, 0x197c, 0x2004, 0x9086, 0xaaaa, 0x0158, 0x2001,
-	0x19e8, 0x2004, 0x9005, 0x11f0, 0x2001, 0x188b, 0x200c, 0xc185,
-	0xc18c, 0x2102, 0x2f00, 0x6833, 0x0001, 0x683e, 0x6847, 0x0000,
-	0x684b, 0x0000, 0x0126, 0x00f6, 0x2091, 0x2400, 0x002e, 0x080c,
-	0x1c46, 0x1904, 0x97d2, 0x012e, 0x6a3c, 0x2278, 0x080c, 0x9fb2,
-	0x0804, 0x97c6, 0x2011, 0x188b, 0x2204, 0xc08d, 0x2012, 0x0804,
-	0x97c6, 0x6a04, 0x9296, 0x0006, 0x0904, 0x97b0, 0x0804, 0x9788,
-	0x6020, 0x9084, 0x000f, 0x000b, 0x0005, 0x984c, 0x9851, 0x9cbf,
-	0x9d4e, 0x9851, 0x9cbf, 0x9d4e, 0x984c, 0x9851, 0x984c, 0x984c,
-	0x984c, 0x984c, 0x984c, 0x984c, 0x080c, 0x955f, 0x080c, 0x9664,
-	0x0005, 0x00b6, 0x0156, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6,
-	0x00d6, 0x00e6, 0x00f6, 0x2069, 0x0200, 0x2071, 0x0240, 0x6004,
-	0x908a, 0x0053, 0x1a0c, 0x0dd5, 0x6110, 0x2158, 0xb9c0, 0x2c78,
-	0x2061, 0x0100, 0x619a, 0x908a, 0x0040, 0x1a04, 0x98bd, 0x005b,
-	0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e,
-	0x015e, 0x00be, 0x0005, 0x9a42, 0x9a7d, 0x9aa6, 0x9b4e, 0x9b70,
-	0x9b76, 0x9b83, 0x9b8b, 0x9b97, 0x9b9d, 0x9bae, 0x9b9d, 0x9c06,
-	0x9b8b, 0x9c12, 0x9c18, 0x9b97, 0x9c18, 0x9c24, 0x98bb, 0x98bb,
-	0x98bb, 0x98bb, 0x98bb, 0x98bb, 0x98bb, 0x98bb, 0x98bb, 0x98bb,
-	0x98bb, 0xa453, 0xa476, 0xa487, 0xa4a7, 0xa4d9, 0x9b83, 0x98bb,
-	0x9b83, 0x9b9d, 0x98bb, 0x9aa6, 0x9b4e, 0x98bb, 0xa88f, 0x9b9d,
-	0x98bb, 0xa8ab, 0x9b9d, 0x98bb, 0x9b97, 0x9a3c, 0x98de, 0x98bb,
-	0xa8c7, 0xa934, 0xaa0b, 0x98bb, 0xaa18, 0x9b80, 0xaa43, 0x98bb,
-	0xa4e3, 0xaa70, 0x98bb, 0x080c, 0x0dd5, 0x2100, 0x005b, 0x00fe,
-	0x00ee, 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e,
-	0x00be, 0x0005, 0xab0b, 0xabbd, 0x98dc, 0x9905, 0x99b1, 0x99bc,
-	0x98dc, 0x9b83, 0x98dc, 0x9a03, 0x9a0f, 0x9920, 0x98dc, 0x993b,
-	0x996f, 0xad25, 0xad6a, 0x9b9d, 0x080c, 0x0dd5, 0x00d6, 0x0096,
-	0x080c, 0x9c37, 0x7003, 0x2414, 0x7007, 0x0018, 0x700b, 0x0800,
-	0x7814, 0x2048, 0xa83c, 0x700e, 0xa850, 0x7022, 0xa854, 0x7026,
-	0x60c3, 0x0018, 0x080c, 0xa22d, 0x009e, 0x00de, 0x0005, 0x7810,
-	0x00b6, 0x2058, 0xb8a0, 0x00be, 0x080c, 0xadb1, 0x1118, 0x9084,
-	0xff80, 0x0110, 0x9085, 0x0001, 0x0005, 0x00d6, 0x0096, 0x080c,
-	0x9c37, 0x7003, 0x0500, 0x7814, 0x2048, 0xa874, 0x700a, 0xa878,
-	0x700e, 0xa87c, 0x7012, 0xa880, 0x7016, 0xa884, 0x701a, 0xa888,
-	0x701e, 0x60c3, 0x0010, 0x080c, 0xa22d, 0x009e, 0x00de, 0x0005,
-	0x00d6, 0x0096, 0x080c, 0x9c37, 0x7003, 0x0500, 0x7814, 0x2048,
-	0xa8cc, 0x700a, 0xa8d0, 0x700e, 0xa8d4, 0x7012, 0xa8d8, 0x7016,
-	0xa8dc, 0x701a, 0xa8e0, 0x701e, 0x60c3, 0x0010, 0x080c, 0xa22d,
-	0x009e, 0x00de, 0x0005, 0x00d6, 0x0096, 0x0126, 0x2091, 0x8000,
-	0x080c, 0x9c37, 0x20e9, 0x0000, 0x2001, 0x19a3, 0x2003, 0x0000,
-	0x7814, 0x2048, 0xa814, 0x8003, 0x60c2, 0xa830, 0x20a8, 0xa860,
-	0x20e0, 0xa85c, 0x9080, 0x001b, 0x2098, 0x2001, 0x19a3, 0x0016,
-	0x200c, 0x2001, 0x0001, 0x080c, 0x23b7, 0x080c, 0xd84c, 0x9006,
-	0x080c, 0x23b7, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c28,
-	0x04d9, 0x080c, 0xa22d, 0x012e, 0x009e, 0x00de, 0x0005, 0x00d6,
-	0x0096, 0x0126, 0x2091, 0x8000, 0x080c, 0x9c82, 0x20e9, 0x0000,
-	0x2001, 0x19a3, 0x2003, 0x0000, 0x7814, 0x2048, 0xa86f, 0x0200,
-	0xa873, 0x0000, 0xa814, 0x8003, 0x60c2, 0xa830, 0x20a8, 0xa860,
-	0x20e0, 0xa85c, 0x9080, 0x001b, 0x2098, 0x2001, 0x19a3, 0x0016,
-	0x200c, 0x080c, 0xd84c, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048,
-	0x0c60, 0x0051, 0x7814, 0x2048, 0x080c, 0x0fb1, 0x080c, 0xa22d,
-	0x012e, 0x009e, 0x00de, 0x0005, 0x60c0, 0x8004, 0x9084, 0x0003,
-	0x9005, 0x0130, 0x9082, 0x0004, 0x20a3, 0x0000, 0x8000, 0x1de0,
-	0x0005, 0x080c, 0x9c37, 0x7003, 0x7800, 0x7808, 0x8007, 0x700a,
-	0x60c3, 0x0008, 0x0804, 0xa22d, 0x00d6, 0x00e6, 0x080c, 0x9c82,
-	0x7814, 0x9084, 0xff00, 0x2073, 0x0200, 0x8e70, 0x8e70, 0x9095,
-	0x0010, 0x2272, 0x8e70, 0x2073, 0x0034, 0x8e70, 0x2069, 0x1805,
-	0x20a9, 0x0004, 0x2d76, 0x8d68, 0x8e70, 0x1f04, 0x99d2, 0x2069,
-	0x1801, 0x20a9, 0x0004, 0x2d76, 0x8d68, 0x8e70, 0x1f04, 0x99db,
-	0x2069, 0x19b3, 0x9086, 0xdf00, 0x0110, 0x2069, 0x19cd, 0x20a9,
-	0x001a, 0x9e86, 0x0260, 0x1148, 0x00c6, 0x2061, 0x0200, 0x6010,
-	0x8000, 0x6012, 0x00ce, 0x2071, 0x0240, 0x2d04, 0x8007, 0x2072,
-	0x8d68, 0x8e70, 0x1f04, 0x99e9, 0x60c3, 0x004c, 0x080c, 0xa22d,
-	0x00ee, 0x00de, 0x0005, 0x080c, 0x9c37, 0x7003, 0x6300, 0x7007,
-	0x0028, 0x7808, 0x700e, 0x60c3, 0x0008, 0x0804, 0xa22d, 0x00d6,
-	0x0026, 0x0016, 0x080c, 0x9c82, 0x7003, 0x0200, 0x7814, 0x700e,
-	0x00e6, 0x9ef0, 0x0004, 0x2009, 0x0001, 0x2011, 0x000c, 0x2069,
-	0x1923, 0x6810, 0xd084, 0x1148, 0x2073, 0x0500, 0x8e70, 0x2073,
-	0x0000, 0x8e70, 0x8108, 0x9290, 0x0004, 0x2073, 0x0800, 0x8e70,
-	0x2073, 0x0000, 0x00ee, 0x7206, 0x710a, 0x62c2, 0x080c, 0xa22d,
-	0x001e, 0x002e, 0x00de, 0x0005, 0x2001, 0x1818, 0x2004, 0x609a,
-	0x0804, 0xa22d, 0x080c, 0x9c37, 0x7003, 0x5200, 0x2069, 0x1847,
-	0x6804, 0xd084, 0x0130, 0x6828, 0x0016, 0x080c, 0x2871, 0x710e,
-	0x001e, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9,
-	0x0000, 0x20a1, 0x0250, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801,
-	0x20a1, 0x0254, 0x4003, 0x080c, 0xadb1, 0x1120, 0xb8a0, 0x9082,
-	0x007f, 0x0248, 0x2001, 0x181f, 0x2004, 0x7032, 0x2001, 0x1820,
-	0x2004, 0x7036, 0x0030, 0x2001, 0x1818, 0x2004, 0x9084, 0x00ff,
-	0x7036, 0x60c3, 0x001c, 0x0804, 0xa22d, 0x080c, 0x9c37, 0x7003,
-	0x0500, 0x080c, 0xadb1, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248,
-	0x2001, 0x181f, 0x2004, 0x700a, 0x2001, 0x1820, 0x2004, 0x700e,
-	0x0030, 0x2001, 0x1818, 0x2004, 0x9084, 0x00ff, 0x700e, 0x20a9,
-	0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1,
-	0x0250, 0x4003, 0x60c3, 0x0010, 0x0804, 0xa22d, 0x080c, 0x9c37,
-	0x9006, 0x080c, 0x6934, 0xb8a0, 0x9086, 0x007e, 0x1130, 0x7003,
-	0x0400, 0x620c, 0xc2b4, 0x620e, 0x0058, 0x7814, 0x0096, 0x904d,
-	0x0120, 0x9006, 0xa89a, 0xa8a6, 0xa8aa, 0x009e, 0x7003, 0x0300,
-	0xb8a0, 0x9086, 0x007e, 0x1904, 0x9b15, 0x00d6, 0x2069, 0x196c,
-	0x2001, 0x1837, 0x2004, 0xd0a4, 0x0188, 0x6800, 0x700a, 0x6808,
-	0x9084, 0x2000, 0x7012, 0x080c, 0xadc8, 0x680c, 0x7016, 0x701f,
-	0x2710, 0x6818, 0x7022, 0x681c, 0x7026, 0x0090, 0x6800, 0x700a,
-	0x6804, 0x700e, 0x6808, 0x080c, 0x73b0, 0x1118, 0x9084, 0x37ff,
-	0x0010, 0x9084, 0x3fff, 0x7012, 0x080c, 0xadc8, 0x680c, 0x7016,
-	0x00de, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9,
-	0x0000, 0x20a1, 0x0256, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801,
-	0x20a1, 0x025a, 0x4003, 0x00d6, 0x080c, 0xaaf2, 0x2069, 0x1974,
-	0x2071, 0x024e, 0x6800, 0xc0dd, 0x7002, 0x080c, 0x56d4, 0xd0e4,
-	0x0110, 0x680c, 0x700e, 0x00de, 0x04a8, 0x2001, 0x1837, 0x2004,
-	0xd0a4, 0x0170, 0x0016, 0x2001, 0x196d, 0x200c, 0x60e0, 0x9106,
-	0x0130, 0x2100, 0x60e3, 0x0000, 0x080c, 0x28b2, 0x61e2, 0x001e,
-	0x20e1, 0x0001, 0x2099, 0x196c, 0x20e9, 0x0000, 0x20a1, 0x024e,
-	0x20a9, 0x0008, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1805, 0x20a1,
-	0x0256, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, 0x20a1, 0x025a,
-	0x4003, 0x080c, 0xaaf2, 0x20a1, 0x024e, 0x20a9, 0x0008, 0x2099,
-	0x1974, 0x4003, 0x60c3, 0x0074, 0x0804, 0xa22d, 0x080c, 0x9c37,
-	0x7003, 0x2010, 0x7007, 0x0014, 0x700b, 0x0800, 0x700f, 0x2000,
-	0x9006, 0x00f6, 0x2079, 0x1847, 0x7904, 0x00fe, 0xd1ac, 0x1110,
-	0x9085, 0x0020, 0xd1a4, 0x0110, 0x9085, 0x0010, 0x9085, 0x0002,
-	0x00d6, 0x0804, 0x9be7, 0x7026, 0x60c3, 0x0014, 0x0804, 0xa22d,
-	0x080c, 0x9c37, 0x7003, 0x5000, 0x0804, 0x9ac0, 0x080c, 0x9c37,
-	0x7003, 0x2110, 0x7007, 0x0014, 0x60c3, 0x0014, 0x0804, 0xa22d,
-	0x080c, 0x9c79, 0x0010, 0x080c, 0x9c82, 0x7003, 0x0200, 0x60c3,
-	0x0004, 0x0804, 0xa22d, 0x080c, 0x9c82, 0x7003, 0x0100, 0x700b,
-	0x0003, 0x700f, 0x2a00, 0x60c3, 0x0008, 0x0804, 0xa22d, 0x080c,
-	0x9c82, 0x7003, 0x0200, 0x0804, 0x9ac0, 0x080c, 0x9c82, 0x7003,
-	0x0100, 0x782c, 0x9005, 0x0110, 0x700a, 0x0010, 0x700b, 0x0003,
-	0x7814, 0x700e, 0x60c3, 0x0008, 0x0804, 0xa22d, 0x00d6, 0x080c,
-	0x9c82, 0x7003, 0x0210, 0x7007, 0x0014, 0x700b, 0x0800, 0xb894,
-	0x9086, 0x0014, 0x1198, 0xb99c, 0x9184, 0x0030, 0x0190, 0xb998,
-	0x9184, 0xc000, 0x1140, 0xd1ec, 0x0118, 0x700f, 0x2100, 0x0058,
-	0x700f, 0x0100, 0x0040, 0x700f, 0x0400, 0x0028, 0x700f, 0x0700,
-	0x0010, 0x700f, 0x0800, 0x00f6, 0x2079, 0x1847, 0x7904, 0x00fe,
-	0xd1ac, 0x1110, 0x9085, 0x0020, 0xd1a4, 0x0110, 0x9085, 0x0010,
-	0x2009, 0x1869, 0x210c, 0xd184, 0x1110, 0x9085, 0x0002, 0x0026,
-	0x2009, 0x1867, 0x210c, 0xd1e4, 0x0150, 0xc0c5, 0xbacc, 0xd28c,
-	0x1108, 0xc0cd, 0x9094, 0x0030, 0x9296, 0x0010, 0x0140, 0xd1ec,
-	0x0130, 0x9094, 0x0030, 0x9296, 0x0010, 0x0108, 0xc0bd, 0x002e,
-	0x7026, 0x60c3, 0x0014, 0x00de, 0x0804, 0xa22d, 0x080c, 0x9c82,
-	0x7003, 0x0210, 0x7007, 0x0014, 0x700f, 0x0100, 0x60c3, 0x0014,
-	0x0804, 0xa22d, 0x080c, 0x9c82, 0x7003, 0x0200, 0x0804, 0x9a46,
-	0x080c, 0x9c82, 0x7003, 0x0100, 0x700b, 0x0003, 0x700f, 0x2a00,
-	0x60c3, 0x0008, 0x0804, 0xa22d, 0x080c, 0x9c82, 0x7003, 0x0100,
-	0x700b, 0x000b, 0x60c3, 0x0008, 0x0804, 0xa22d, 0x0026, 0x00d6,
-	0x0036, 0x0046, 0x2019, 0x3200, 0x2021, 0x0800, 0x0040, 0x0026,
-	0x00d6, 0x0036, 0x0046, 0x2019, 0x2200, 0x2021, 0x0100, 0x080c,
-	0xab07, 0xb810, 0x9305, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800,
-	0x687c, 0x700a, 0x6880, 0x700e, 0x9485, 0x0029, 0x7012, 0x004e,
-	0x003e, 0x00de, 0x080c, 0xa21b, 0x721a, 0x9f95, 0x0000, 0x7222,
-	0x7027, 0xffff, 0x2071, 0x024c, 0x002e, 0x0005, 0x0026, 0x080c,
-	0xab07, 0x7003, 0x02ff, 0x7007, 0xfffc, 0x00d6, 0x2069, 0x1800,
-	0x687c, 0x700a, 0x6880, 0x700e, 0x00de, 0x7013, 0x2029, 0x0c10,
-	0x7003, 0x0100, 0x7007, 0x0000, 0x700b, 0xfc02, 0x700f, 0x0000,
-	0x0005, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x3300, 0x2021,
-	0x0800, 0x0040, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x2300,
-	0x2021, 0x0100, 0x080c, 0xab07, 0xb810, 0x9305, 0x7002, 0xb814,
-	0x7006, 0x2069, 0x1800, 0xb810, 0x9005, 0x1140, 0xb814, 0x9005,
-	0x1128, 0x700b, 0x00ff, 0x700f, 0xfffe, 0x0020, 0x687c, 0x700a,
-	0x6880, 0x700e, 0x0000, 0x9485, 0x0098, 0x7012, 0x004e, 0x003e,
-	0x00de, 0x080c, 0xa21b, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226,
-	0x2071, 0x024c, 0x002e, 0x0005, 0x080c, 0xa21b, 0x721a, 0x7a08,
-	0x7222, 0x7814, 0x7026, 0x2071, 0x024c, 0x002e, 0x0005, 0x00b6,
+	0x080c, 0x1c46, 0x1904, 0x97fb, 0x012e, 0x6a3c, 0x2278, 0x080c,
+	0x9fdb, 0x0804, 0x97ef, 0x2011, 0x188b, 0x2204, 0xc08d, 0x2012,
+	0x0804, 0x97ef, 0x6a04, 0x9296, 0x0006, 0x0904, 0x97d9, 0x0804,
+	0x97b1, 0x6020, 0x9084, 0x000f, 0x000b, 0x0005, 0x9875, 0x987a,
+	0x9ce8, 0x9d77, 0x987a, 0x9ce8, 0x9d77, 0x9875, 0x987a, 0x9875,
+	0x9875, 0x9875, 0x9875, 0x9875, 0x9875, 0x080c, 0x9588, 0x080c,
+	0x968d, 0x0005, 0x00b6, 0x0156, 0x0136, 0x0146, 0x01c6, 0x01d6,
 	0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2069, 0x0200, 0x2071, 0x0240,
-	0x6004, 0x908a, 0x0085, 0x0a0c, 0x0dd5, 0x908a, 0x0092, 0x1a0c,
-	0x0dd5, 0x6110, 0x2158, 0xb9c0, 0x2c78, 0x2061, 0x0100, 0x619a,
-	0x9082, 0x0085, 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be,
-	0x0005, 0x9cf0, 0x9cff, 0x9d0a, 0x9cee, 0x9cee, 0x9cee, 0x9cf0,
-	0x9cee, 0x9cee, 0x9cee, 0x9cee, 0x9cee, 0x9cee, 0x080c, 0x0dd5,
-	0x0411, 0x60c3, 0x0000, 0x0026, 0x080c, 0x2ba5, 0x0228, 0x2011,
-	0x0101, 0x2204, 0xc0c5, 0x2012, 0x002e, 0x0804, 0xa22d, 0x0431,
-	0x7808, 0x700a, 0x7814, 0x700e, 0x7017, 0xffff, 0x60c3, 0x000c,
-	0x0804, 0xa22d, 0x0479, 0x7003, 0x0003, 0x7007, 0x0300, 0x60c3,
-	0x0004, 0x0804, 0xa22d, 0x0026, 0x080c, 0xab07, 0xb810, 0x9085,
-	0x8100, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x687c, 0x700a,
-	0x6880, 0x700e, 0x7013, 0x0009, 0x0804, 0x9c52, 0x0026, 0x080c,
-	0xab07, 0xb810, 0x9085, 0x8400, 0x7002, 0xb814, 0x7006, 0x2069,
-	0x1800, 0x687c, 0x700a, 0x6880, 0x700e, 0x2001, 0x0099, 0x7012,
-	0x0804, 0x9cb4, 0x0026, 0x080c, 0xab07, 0xb810, 0x9085, 0x8500,
+	0x6004, 0x908a, 0x0053, 0x1a0c, 0x0dd5, 0x6110, 0x2158, 0xb9c0,
+	0x2c78, 0x2061, 0x0100, 0x619a, 0x908a, 0x0040, 0x1a04, 0x98e6,
+	0x005b, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e,
+	0x013e, 0x015e, 0x00be, 0x0005, 0x9a6b, 0x9aa6, 0x9acf, 0x9b77,
+	0x9b99, 0x9b9f, 0x9bac, 0x9bb4, 0x9bc0, 0x9bc6, 0x9bd7, 0x9bc6,
+	0x9c2f, 0x9bb4, 0x9c3b, 0x9c41, 0x9bc0, 0x9c41, 0x9c4d, 0x98e4,
+	0x98e4, 0x98e4, 0x98e4, 0x98e4, 0x98e4, 0x98e4, 0x98e4, 0x98e4,
+	0x98e4, 0x98e4, 0xa46d, 0xa490, 0xa4a1, 0xa4c1, 0xa4f3, 0x9bac,
+	0x98e4, 0x9bac, 0x9bc6, 0x98e4, 0x9acf, 0x9b77, 0x98e4, 0xa8a9,
+	0x9bc6, 0x98e4, 0xa8c5, 0x9bc6, 0x98e4, 0x9bc0, 0x9a65, 0x9907,
+	0x98e4, 0xa8e1, 0xa94e, 0xaa25, 0x98e4, 0xaa32, 0x9ba9, 0xaa5d,
+	0x98e4, 0xa4fd, 0xaa8a, 0x98e4, 0x080c, 0x0dd5, 0x2100, 0x005b,
+	0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e,
+	0x015e, 0x00be, 0x0005, 0xab25, 0xabd7, 0x9905, 0x992e, 0x99da,
+	0x99e5, 0x9905, 0x9bac, 0x9905, 0x9a2c, 0x9a38, 0x9949, 0x9905,
+	0x9964, 0x9998, 0xad3f, 0xad84, 0x9bc6, 0x080c, 0x0dd5, 0x00d6,
+	0x0096, 0x080c, 0x9c60, 0x7003, 0x2414, 0x7007, 0x0018, 0x700b,
+	0x0800, 0x7814, 0x2048, 0xa83c, 0x700e, 0xa850, 0x7022, 0xa854,
+	0x7026, 0x60c3, 0x0018, 0x080c, 0xa247, 0x009e, 0x00de, 0x0005,
+	0x7810, 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x080c, 0xadcb, 0x1118,
+	0x9084, 0xff80, 0x0110, 0x9085, 0x0001, 0x0005, 0x00d6, 0x0096,
+	0x080c, 0x9c60, 0x7003, 0x0500, 0x7814, 0x2048, 0xa874, 0x700a,
+	0xa878, 0x700e, 0xa87c, 0x7012, 0xa880, 0x7016, 0xa884, 0x701a,
+	0xa888, 0x701e, 0x60c3, 0x0010, 0x080c, 0xa247, 0x009e, 0x00de,
+	0x0005, 0x00d6, 0x0096, 0x080c, 0x9c60, 0x7003, 0x0500, 0x7814,
+	0x2048, 0xa8cc, 0x700a, 0xa8d0, 0x700e, 0xa8d4, 0x7012, 0xa8d8,
+	0x7016, 0xa8dc, 0x701a, 0xa8e0, 0x701e, 0x60c3, 0x0010, 0x080c,
+	0xa247, 0x009e, 0x00de, 0x0005, 0x00d6, 0x0096, 0x0126, 0x2091,
+	0x8000, 0x080c, 0x9c60, 0x20e9, 0x0000, 0x2001, 0x19a3, 0x2003,
+	0x0000, 0x7814, 0x2048, 0xa814, 0x8003, 0x60c2, 0xa830, 0x20a8,
+	0xa860, 0x20e0, 0xa85c, 0x9080, 0x001b, 0x2098, 0x2001, 0x19a3,
+	0x0016, 0x200c, 0x2001, 0x0001, 0x080c, 0x23b7, 0x080c, 0xd867,
+	0x9006, 0x080c, 0x23b7, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048,
+	0x0c28, 0x04d9, 0x080c, 0xa247, 0x012e, 0x009e, 0x00de, 0x0005,
+	0x00d6, 0x0096, 0x0126, 0x2091, 0x8000, 0x080c, 0x9cab, 0x20e9,
+	0x0000, 0x2001, 0x19a3, 0x2003, 0x0000, 0x7814, 0x2048, 0xa86f,
+	0x0200, 0xa873, 0x0000, 0xa814, 0x8003, 0x60c2, 0xa830, 0x20a8,
+	0xa860, 0x20e0, 0xa85c, 0x9080, 0x001b, 0x2098, 0x2001, 0x19a3,
+	0x0016, 0x200c, 0x080c, 0xd867, 0x001e, 0xa804, 0x9005, 0x0110,
+	0x2048, 0x0c60, 0x0051, 0x7814, 0x2048, 0x080c, 0x0fb1, 0x080c,
+	0xa247, 0x012e, 0x009e, 0x00de, 0x0005, 0x60c0, 0x8004, 0x9084,
+	0x0003, 0x9005, 0x0130, 0x9082, 0x0004, 0x20a3, 0x0000, 0x8000,
+	0x1de0, 0x0005, 0x080c, 0x9c60, 0x7003, 0x7800, 0x7808, 0x8007,
+	0x700a, 0x60c3, 0x0008, 0x0804, 0xa247, 0x00d6, 0x00e6, 0x080c,
+	0x9cab, 0x7814, 0x9084, 0xff00, 0x2073, 0x0200, 0x8e70, 0x8e70,
+	0x9095, 0x0010, 0x2272, 0x8e70, 0x2073, 0x0034, 0x8e70, 0x2069,
+	0x1805, 0x20a9, 0x0004, 0x2d76, 0x8d68, 0x8e70, 0x1f04, 0x99fb,
+	0x2069, 0x1801, 0x20a9, 0x0004, 0x2d76, 0x8d68, 0x8e70, 0x1f04,
+	0x9a04, 0x2069, 0x19b3, 0x9086, 0xdf00, 0x0110, 0x2069, 0x19cd,
+	0x20a9, 0x001a, 0x9e86, 0x0260, 0x1148, 0x00c6, 0x2061, 0x0200,
+	0x6010, 0x8000, 0x6012, 0x00ce, 0x2071, 0x0240, 0x2d04, 0x8007,
+	0x2072, 0x8d68, 0x8e70, 0x1f04, 0x9a12, 0x60c3, 0x004c, 0x080c,
+	0xa247, 0x00ee, 0x00de, 0x0005, 0x080c, 0x9c60, 0x7003, 0x6300,
+	0x7007, 0x0028, 0x7808, 0x700e, 0x60c3, 0x0008, 0x0804, 0xa247,
+	0x00d6, 0x0026, 0x0016, 0x080c, 0x9cab, 0x7003, 0x0200, 0x7814,
+	0x700e, 0x00e6, 0x9ef0, 0x0004, 0x2009, 0x0001, 0x2011, 0x000c,
+	0x2069, 0x1923, 0x6810, 0xd084, 0x1148, 0x2073, 0x0500, 0x8e70,
+	0x2073, 0x0000, 0x8e70, 0x8108, 0x9290, 0x0004, 0x2073, 0x0800,
+	0x8e70, 0x2073, 0x0000, 0x00ee, 0x7206, 0x710a, 0x62c2, 0x080c,
+	0xa247, 0x001e, 0x002e, 0x00de, 0x0005, 0x2001, 0x1818, 0x2004,
+	0x609a, 0x0804, 0xa247, 0x080c, 0x9c60, 0x7003, 0x5200, 0x2069,
+	0x1847, 0x6804, 0xd084, 0x0130, 0x6828, 0x0016, 0x080c, 0x2871,
+	0x710e, 0x001e, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805,
+	0x20e9, 0x0000, 0x20a1, 0x0250, 0x4003, 0x20a9, 0x0004, 0x2099,
+	0x1801, 0x20a1, 0x0254, 0x4003, 0x080c, 0xadcb, 0x1120, 0xb8a0,
+	0x9082, 0x007f, 0x0248, 0x2001, 0x181f, 0x2004, 0x7032, 0x2001,
+	0x1820, 0x2004, 0x7036, 0x0030, 0x2001, 0x1818, 0x2004, 0x9084,
+	0x00ff, 0x7036, 0x60c3, 0x001c, 0x0804, 0xa247, 0x080c, 0x9c60,
+	0x7003, 0x0500, 0x080c, 0xadcb, 0x1120, 0xb8a0, 0x9082, 0x007f,
+	0x0248, 0x2001, 0x181f, 0x2004, 0x700a, 0x2001, 0x1820, 0x2004,
+	0x700e, 0x0030, 0x2001, 0x1818, 0x2004, 0x9084, 0x00ff, 0x700e,
+	0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000,
+	0x20a1, 0x0250, 0x4003, 0x60c3, 0x0010, 0x0804, 0xa247, 0x080c,
+	0x9c60, 0x9006, 0x080c, 0x693c, 0xb8a0, 0x9086, 0x007e, 0x1130,
+	0x7003, 0x0400, 0x620c, 0xc2b4, 0x620e, 0x0058, 0x7814, 0x0096,
+	0x904d, 0x0120, 0x9006, 0xa89a, 0xa8a6, 0xa8aa, 0x009e, 0x7003,
+	0x0300, 0xb8a0, 0x9086, 0x007e, 0x1904, 0x9b3e, 0x00d6, 0x2069,
+	0x196c, 0x2001, 0x1837, 0x2004, 0xd0a4, 0x0188, 0x6800, 0x700a,
+	0x6808, 0x9084, 0x2000, 0x7012, 0x080c, 0xade2, 0x680c, 0x7016,
+	0x701f, 0x2710, 0x6818, 0x7022, 0x681c, 0x7026, 0x0090, 0x6800,
+	0x700a, 0x6804, 0x700e, 0x6808, 0x080c, 0x73bc, 0x1118, 0x9084,
+	0x37ff, 0x0010, 0x9084, 0x3fff, 0x7012, 0x080c, 0xade2, 0x680c,
+	0x7016, 0x00de, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805,
+	0x20e9, 0x0000, 0x20a1, 0x0256, 0x4003, 0x20a9, 0x0004, 0x2099,
+	0x1801, 0x20a1, 0x025a, 0x4003, 0x00d6, 0x080c, 0xab0c, 0x2069,
+	0x1974, 0x2071, 0x024e, 0x6800, 0xc0dd, 0x7002, 0x080c, 0x56d3,
+	0xd0e4, 0x0110, 0x680c, 0x700e, 0x00de, 0x04a8, 0x2001, 0x1837,
+	0x2004, 0xd0a4, 0x0170, 0x0016, 0x2001, 0x196d, 0x200c, 0x60e0,
+	0x9106, 0x0130, 0x2100, 0x60e3, 0x0000, 0x080c, 0x28b2, 0x61e2,
+	0x001e, 0x20e1, 0x0001, 0x2099, 0x196c, 0x20e9, 0x0000, 0x20a1,
+	0x024e, 0x20a9, 0x0008, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1805,
+	0x20a1, 0x0256, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, 0x20a1,
+	0x025a, 0x4003, 0x080c, 0xab0c, 0x20a1, 0x024e, 0x20a9, 0x0008,
+	0x2099, 0x1974, 0x4003, 0x60c3, 0x0074, 0x0804, 0xa247, 0x080c,
+	0x9c60, 0x7003, 0x2010, 0x7007, 0x0014, 0x700b, 0x0800, 0x700f,
+	0x2000, 0x9006, 0x00f6, 0x2079, 0x1847, 0x7904, 0x00fe, 0xd1ac,
+	0x1110, 0x9085, 0x0020, 0xd1a4, 0x0110, 0x9085, 0x0010, 0x9085,
+	0x0002, 0x00d6, 0x0804, 0x9c10, 0x7026, 0x60c3, 0x0014, 0x0804,
+	0xa247, 0x080c, 0x9c60, 0x7003, 0x5000, 0x0804, 0x9ae9, 0x080c,
+	0x9c60, 0x7003, 0x2110, 0x7007, 0x0014, 0x60c3, 0x0014, 0x0804,
+	0xa247, 0x080c, 0x9ca2, 0x0010, 0x080c, 0x9cab, 0x7003, 0x0200,
+	0x60c3, 0x0004, 0x0804, 0xa247, 0x080c, 0x9cab, 0x7003, 0x0100,
+	0x700b, 0x0003, 0x700f, 0x2a00, 0x60c3, 0x0008, 0x0804, 0xa247,
+	0x080c, 0x9cab, 0x7003, 0x0200, 0x0804, 0x9ae9, 0x080c, 0x9cab,
+	0x7003, 0x0100, 0x782c, 0x9005, 0x0110, 0x700a, 0x0010, 0x700b,
+	0x0003, 0x7814, 0x700e, 0x60c3, 0x0008, 0x0804, 0xa247, 0x00d6,
+	0x080c, 0x9cab, 0x7003, 0x0210, 0x7007, 0x0014, 0x700b, 0x0800,
+	0xb894, 0x9086, 0x0014, 0x1198, 0xb99c, 0x9184, 0x0030, 0x0190,
+	0xb998, 0x9184, 0xc000, 0x1140, 0xd1ec, 0x0118, 0x700f, 0x2100,
+	0x0058, 0x700f, 0x0100, 0x0040, 0x700f, 0x0400, 0x0028, 0x700f,
+	0x0700, 0x0010, 0x700f, 0x0800, 0x00f6, 0x2079, 0x1847, 0x7904,
+	0x00fe, 0xd1ac, 0x1110, 0x9085, 0x0020, 0xd1a4, 0x0110, 0x9085,
+	0x0010, 0x2009, 0x1869, 0x210c, 0xd184, 0x1110, 0x9085, 0x0002,
+	0x0026, 0x2009, 0x1867, 0x210c, 0xd1e4, 0x0150, 0xc0c5, 0xbacc,
+	0xd28c, 0x1108, 0xc0cd, 0x9094, 0x0030, 0x9296, 0x0010, 0x0140,
+	0xd1ec, 0x0130, 0x9094, 0x0030, 0x9296, 0x0010, 0x0108, 0xc0bd,
+	0x002e, 0x7026, 0x60c3, 0x0014, 0x00de, 0x0804, 0xa247, 0x080c,
+	0x9cab, 0x7003, 0x0210, 0x7007, 0x0014, 0x700f, 0x0100, 0x60c3,
+	0x0014, 0x0804, 0xa247, 0x080c, 0x9cab, 0x7003, 0x0200, 0x0804,
+	0x9a6f, 0x080c, 0x9cab, 0x7003, 0x0100, 0x700b, 0x0003, 0x700f,
+	0x2a00, 0x60c3, 0x0008, 0x0804, 0xa247, 0x080c, 0x9cab, 0x7003,
+	0x0100, 0x700b, 0x000b, 0x60c3, 0x0008, 0x0804, 0xa247, 0x0026,
+	0x00d6, 0x0036, 0x0046, 0x2019, 0x3200, 0x2021, 0x0800, 0x0040,
+	0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x2200, 0x2021, 0x0100,
+	0x080c, 0xab21, 0xb810, 0x9305, 0x7002, 0xb814, 0x7006, 0x2069,
+	0x1800, 0x687c, 0x700a, 0x6880, 0x700e, 0x9485, 0x0029, 0x7012,
+	0x004e, 0x003e, 0x00de, 0x080c, 0xa235, 0x721a, 0x9f95, 0x0000,
+	0x7222, 0x7027, 0xffff, 0x2071, 0x024c, 0x002e, 0x0005, 0x0026,
+	0x080c, 0xab21, 0x7003, 0x02ff, 0x7007, 0xfffc, 0x00d6, 0x2069,
+	0x1800, 0x687c, 0x700a, 0x6880, 0x700e, 0x00de, 0x7013, 0x2029,
+	0x0c10, 0x7003, 0x0100, 0x7007, 0x0000, 0x700b, 0xfc02, 0x700f,
+	0x0000, 0x0005, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x3300,
+	0x2021, 0x0800, 0x0040, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019,
+	0x2300, 0x2021, 0x0100, 0x080c, 0xab21, 0xb810, 0x9305, 0x7002,
+	0xb814, 0x7006, 0x2069, 0x1800, 0xb810, 0x9005, 0x1140, 0xb814,
+	0x9005, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffe, 0x0020, 0x687c,
+	0x700a, 0x6880, 0x700e, 0x0000, 0x9485, 0x0098, 0x7012, 0x004e,
+	0x003e, 0x00de, 0x080c, 0xa235, 0x721a, 0x7a08, 0x7222, 0x2f10,
+	0x7226, 0x2071, 0x024c, 0x002e, 0x0005, 0x080c, 0xa235, 0x721a,
+	0x7a08, 0x7222, 0x7814, 0x7026, 0x2071, 0x024c, 0x002e, 0x0005,
+	0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2069, 0x0200, 0x2071,
+	0x0240, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0dd5, 0x908a, 0x0092,
+	0x1a0c, 0x0dd5, 0x6110, 0x2158, 0xb9c0, 0x2c78, 0x2061, 0x0100,
+	0x619a, 0x9082, 0x0085, 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce,
+	0x00be, 0x0005, 0x9d19, 0x9d28, 0x9d33, 0x9d17, 0x9d17, 0x9d17,
+	0x9d19, 0x9d17, 0x9d17, 0x9d17, 0x9d17, 0x9d17, 0x9d17, 0x080c,
+	0x0dd5, 0x0411, 0x60c3, 0x0000, 0x0026, 0x080c, 0x2ba5, 0x0228,
+	0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012, 0x002e, 0x0804, 0xa247,
+	0x0431, 0x7808, 0x700a, 0x7814, 0x700e, 0x7017, 0xffff, 0x60c3,
+	0x000c, 0x0804, 0xa247, 0x0479, 0x7003, 0x0003, 0x7007, 0x0300,
+	0x60c3, 0x0004, 0x0804, 0xa247, 0x0026, 0x080c, 0xab21, 0xb810,
+	0x9085, 0x8100, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x687c,
+	0x700a, 0x6880, 0x700e, 0x7013, 0x0009, 0x0804, 0x9c7b, 0x0026,
+	0x080c, 0xab21, 0xb810, 0x9085, 0x8400, 0x7002, 0xb814, 0x7006,
+	0x2069, 0x1800, 0x687c, 0x700a, 0x6880, 0x700e, 0x2001, 0x0099,
+	0x7012, 0x0804, 0x9cdd, 0x0026, 0x080c, 0xab21, 0xb810, 0x9085,
+	0x8500, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x687c, 0x700a,
+	0x6880, 0x700e, 0x2001, 0x0099, 0x7012, 0x0804, 0x9cdd, 0x00b6,
+	0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2c78, 0x2069, 0x0200, 0x2071,
+	0x0240, 0x7804, 0x908a, 0x0040, 0x0a0c, 0x0dd5, 0x908a, 0x0054,
+	0x1a0c, 0x0dd5, 0x7910, 0x2158, 0xb9c0, 0x2061, 0x0100, 0x619a,
+	0x9082, 0x0040, 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be,
+	0x0005, 0x9dae, 0x9e6a, 0x9e3d, 0x9f8c, 0x9dac, 0x9dac, 0x9dac,
+	0x9dac, 0x9dac, 0x9dac, 0x9dac, 0xa66f, 0xa677, 0xa67f, 0xa687,
+	0x9dac, 0xaa69, 0x9dac, 0xa667, 0x080c, 0x0dd5, 0x0096, 0x780b,
+	0xffff, 0x080c, 0x9e19, 0x7914, 0x2148, 0xa978, 0x7956, 0xae64,
+	0x96b4, 0x00ff, 0x9686, 0x0008, 0x1148, 0xa8b4, 0x7032, 0xa8b8,
+	0x7036, 0xa8bc, 0x703a, 0xa8c0, 0x703e, 0x0008, 0x7132, 0xa97c,
+	0x9184, 0x000f, 0x1118, 0x2001, 0x0005, 0x0040, 0xd184, 0x0118,
+	0x2001, 0x0004, 0x0018, 0x9084, 0x0006, 0x8004, 0x2010, 0x785c,
+	0x9084, 0x00ff, 0x8007, 0x9205, 0x7042, 0xd1ac, 0x0158, 0x7047,
+	0x0002, 0x9686, 0x0008, 0x1118, 0x080c, 0x18ac, 0x0010, 0x080c,
+	0x1725, 0x0050, 0xd1b4, 0x0118, 0x7047, 0x0001, 0x0028, 0x7047,
+	0x0000, 0x9016, 0x2230, 0x0010, 0xaab0, 0xaeac, 0x726a, 0x766e,
+	0x20a9, 0x0008, 0x20e9, 0x0000, 0xa860, 0x20e0, 0xa85c, 0x9080,
+	0x0023, 0x2098, 0x20a1, 0x0252, 0x2069, 0x0200, 0x6813, 0x0018,
+	0x4003, 0x6813, 0x0008, 0x60c3, 0x0020, 0x6017, 0x0009, 0x2001,
+	0x1a03, 0x2003, 0x07d0, 0x2001, 0x1a02, 0x2003, 0x0009, 0x009e,
+	0x0005, 0x6813, 0x0008, 0xba8c, 0x8210, 0xb8cc, 0xd084, 0x0128,
+	0x7a46, 0x7b14, 0x7b4a, 0x722e, 0x732a, 0x9294, 0x00ff, 0xba8e,
+	0x8217, 0x721a, 0xba10, 0x9295, 0x0600, 0x7202, 0xba14, 0x7206,
+	0x2069, 0x1800, 0x6a7c, 0x720a, 0x6a80, 0x720e, 0x7013, 0x0829,
+	0x2f10, 0x7222, 0x7027, 0xffff, 0x0005, 0x00d6, 0x0096, 0x0081,
+	0x7814, 0x2048, 0xa890, 0x7002, 0xa88c, 0x7006, 0xa8b0, 0x700a,
+	0xa8ac, 0x700e, 0x60c3, 0x000c, 0x009e, 0x00de, 0x0804, 0xa247,
+	0x6813, 0x0008, 0xb810, 0x9085, 0x0500, 0x7002, 0xb814, 0x7006,
+	0x2069, 0x1800, 0x687c, 0x700a, 0x6880, 0x700e, 0x7013, 0x0889,
+	0x080c, 0xa235, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x2071,
+	0x024c, 0x0005, 0x00d6, 0x0096, 0x080c, 0x9f6a, 0x7814, 0x2048,
+	0x080c, 0xcb33, 0x1130, 0x7814, 0x9084, 0x0700, 0x8007, 0x0033,
+	0x0010, 0x9006, 0x001b, 0x009e, 0x00de, 0x0005, 0x9e88, 0x9ef1,
+	0x9f01, 0x9f27, 0x9f33, 0x9f44, 0x9f4c, 0x9e86, 0x080c, 0x0dd5,
+	0x0016, 0x0036, 0xa97c, 0x918c, 0x0003, 0x0118, 0x9186, 0x0003,
+	0x1198, 0xaba8, 0x7824, 0xd0cc, 0x1168, 0x7316, 0xa898, 0x701a,
+	0xa894, 0x701e, 0x003e, 0x001e, 0x2001, 0x19b1, 0x2004, 0x60c2,
+	0x0804, 0xa247, 0xc3e5, 0x0c88, 0x9186, 0x0001, 0x190c, 0x0dd5,
+	0xaba8, 0x7824, 0xd0cc, 0x1904, 0x9eee, 0x7316, 0xa898, 0x701a,
+	0xa894, 0x701e, 0xa8a4, 0x7026, 0xa8ac, 0x702e, 0x2009, 0x0018,
+	0x9384, 0x0300, 0x0570, 0xd3c4, 0x0110, 0xa8ac, 0x9108, 0xd3cc,
+	0x0110, 0xa8a4, 0x9108, 0x6810, 0x9085, 0x0010, 0x6812, 0x2011,
+	0x0258, 0x20e9, 0x0000, 0x22a0, 0x0156, 0x20a9, 0x0008, 0xa860,
+	0x20e0, 0xa85c, 0x9080, 0x002c, 0x2098, 0x4003, 0x6810, 0x8000,
+	0x6812, 0x2011, 0x0240, 0x22a0, 0x20a9, 0x0005, 0x4003, 0x6810,
+	0xc084, 0x6812, 0x015e, 0x9184, 0x0003, 0x0118, 0x2019, 0x0245,
+	0x201a, 0x61c2, 0x003e, 0x001e, 0x0804, 0xa247, 0xc3e5, 0x0804,
+	0x9ead, 0x2011, 0x0008, 0x2001, 0x180f, 0x2004, 0xd0a4, 0x0110,
+	0x2011, 0x0028, 0x7824, 0xd0cc, 0x1110, 0x7216, 0x0470, 0x0ce8,
+	0xc2e5, 0x2011, 0x0302, 0x0016, 0x782c, 0x701a, 0x7930, 0x711e,
+	0x9105, 0x0108, 0xc2dd, 0x001e, 0x7824, 0xd0cc, 0x0108, 0xc2e5,
+	0x7216, 0x7027, 0x0012, 0x702f, 0x0008, 0x7043, 0x7000, 0x7047,
+	0x0500, 0x704f, 0x000a, 0x2069, 0x0200, 0x6813, 0x0009, 0x2071,
+	0x0240, 0x700b, 0x2500, 0x60c3, 0x0032, 0x0804, 0xa247, 0x2011,
+	0x0028, 0x7824, 0xd0cc, 0x1128, 0x7216, 0x60c3, 0x0018, 0x0804,
+	0xa247, 0x0cd0, 0xc2e5, 0x2011, 0x0100, 0x7824, 0xd0cc, 0x0108,
+	0xc2e5, 0x7216, 0x702f, 0x0008, 0x7858, 0x9084, 0x00ff, 0x7036,
+	0x60c3, 0x0020, 0x0804, 0xa247, 0x2011, 0x0008, 0x7824, 0xd0cc,
+	0x0108, 0xc2e5, 0x7216, 0x0c08, 0x0036, 0x7b14, 0x9384, 0xff00,
+	0x7816, 0x9384, 0x00ff, 0x8001, 0x1138, 0x7824, 0xd0cc, 0x0108,
+	0xc2e5, 0x7216, 0x003e, 0x0888, 0x0046, 0x2021, 0x0800, 0x0006,
+	0x7824, 0xd0cc, 0x000e, 0x0108, 0xc4e5, 0x7416, 0x004e, 0x701e,
+	0x003e, 0x0818, 0x00d6, 0x6813, 0x0008, 0xb810, 0x9085, 0x0700,
 	0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x687c, 0x700a, 0x6880,
-	0x700e, 0x2001, 0x0099, 0x7012, 0x0804, 0x9cb4, 0x00b6, 0x00c6,
-	0x00d6, 0x00e6, 0x00f6, 0x2c78, 0x2069, 0x0200, 0x2071, 0x0240,
-	0x7804, 0x908a, 0x0040, 0x0a0c, 0x0dd5, 0x908a, 0x0054, 0x1a0c,
-	0x0dd5, 0x7910, 0x2158, 0xb9c0, 0x2061, 0x0100, 0x619a, 0x9082,
-	0x0040, 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x0005,
-	0x9d85, 0x9e41, 0x9e14, 0x9f63, 0x9d83, 0x9d83, 0x9d83, 0x9d83,
-	0x9d83, 0x9d83, 0x9d83, 0xa655, 0xa65d, 0xa665, 0xa66d, 0x9d83,
-	0xaa4f, 0x9d83, 0xa64d, 0x080c, 0x0dd5, 0x0096, 0x780b, 0xffff,
-	0x080c, 0x9df0, 0x7914, 0x2148, 0xa978, 0x7956, 0xae64, 0x96b4,
-	0x00ff, 0x9686, 0x0008, 0x1148, 0xa8b4, 0x7032, 0xa8b8, 0x7036,
-	0xa8bc, 0x703a, 0xa8c0, 0x703e, 0x0008, 0x7132, 0xa97c, 0x9184,
-	0x000f, 0x1118, 0x2001, 0x0005, 0x0040, 0xd184, 0x0118, 0x2001,
-	0x0004, 0x0018, 0x9084, 0x0006, 0x8004, 0x2010, 0x785c, 0x9084,
-	0x00ff, 0x8007, 0x9205, 0x7042, 0xd1ac, 0x0158, 0x7047, 0x0002,
-	0x9686, 0x0008, 0x1118, 0x080c, 0x18ac, 0x0010, 0x080c, 0x1725,
-	0x0050, 0xd1b4, 0x0118, 0x7047, 0x0001, 0x0028, 0x7047, 0x0000,
-	0x9016, 0x2230, 0x0010, 0xaab0, 0xaeac, 0x726a, 0x766e, 0x20a9,
-	0x0008, 0x20e9, 0x0000, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0023,
-	0x2098, 0x20a1, 0x0252, 0x2069, 0x0200, 0x6813, 0x0018, 0x4003,
-	0x6813, 0x0008, 0x60c3, 0x0020, 0x6017, 0x0009, 0x2001, 0x1a03,
-	0x2003, 0x07d0, 0x2001, 0x1a02, 0x2003, 0x0009, 0x009e, 0x0005,
-	0x6813, 0x0008, 0xba8c, 0x8210, 0xb8cc, 0xd084, 0x0128, 0x7a46,
-	0x7b14, 0x7b4a, 0x722e, 0x732a, 0x9294, 0x00ff, 0xba8e, 0x8217,
-	0x721a, 0xba10, 0x9295, 0x0600, 0x7202, 0xba14, 0x7206, 0x2069,
-	0x1800, 0x6a7c, 0x720a, 0x6a80, 0x720e, 0x7013, 0x0829, 0x2f10,
-	0x7222, 0x7027, 0xffff, 0x0005, 0x00d6, 0x0096, 0x0081, 0x7814,
-	0x2048, 0xa890, 0x7002, 0xa88c, 0x7006, 0xa8b0, 0x700a, 0xa8ac,
-	0x700e, 0x60c3, 0x000c, 0x009e, 0x00de, 0x0804, 0xa22d, 0x6813,
-	0x0008, 0xb810, 0x9085, 0x0500, 0x7002, 0xb814, 0x7006, 0x2069,
-	0x1800, 0x687c, 0x700a, 0x6880, 0x700e, 0x7013, 0x0889, 0x080c,
-	0xa21b, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x2071, 0x024c,
-	0x0005, 0x00d6, 0x0096, 0x080c, 0x9f41, 0x7814, 0x2048, 0x080c,
-	0xcb19, 0x1130, 0x7814, 0x9084, 0x0700, 0x8007, 0x0033, 0x0010,
-	0x9006, 0x001b, 0x009e, 0x00de, 0x0005, 0x9e5f, 0x9ec8, 0x9ed8,
-	0x9efe, 0x9f0a, 0x9f1b, 0x9f23, 0x9e5d, 0x080c, 0x0dd5, 0x0016,
-	0x0036, 0xa97c, 0x918c, 0x0003, 0x0118, 0x9186, 0x0003, 0x1198,
-	0xaba8, 0x7824, 0xd0cc, 0x1168, 0x7316, 0xa898, 0x701a, 0xa894,
-	0x701e, 0x003e, 0x001e, 0x2001, 0x19b1, 0x2004, 0x60c2, 0x0804,
-	0xa22d, 0xc3e5, 0x0c88, 0x9186, 0x0001, 0x190c, 0x0dd5, 0xaba8,
-	0x7824, 0xd0cc, 0x1904, 0x9ec5, 0x7316, 0xa898, 0x701a, 0xa894,
-	0x701e, 0xa8a4, 0x7026, 0xa8ac, 0x702e, 0x2009, 0x0018, 0x9384,
-	0x0300, 0x0570, 0xd3c4, 0x0110, 0xa8ac, 0x9108, 0xd3cc, 0x0110,
-	0xa8a4, 0x9108, 0x6810, 0x9085, 0x0010, 0x6812, 0x2011, 0x0258,
-	0x20e9, 0x0000, 0x22a0, 0x0156, 0x20a9, 0x0008, 0xa860, 0x20e0,
-	0xa85c, 0x9080, 0x002c, 0x2098, 0x4003, 0x6810, 0x8000, 0x6812,
-	0x2011, 0x0240, 0x22a0, 0x20a9, 0x0005, 0x4003, 0x6810, 0xc084,
-	0x6812, 0x015e, 0x9184, 0x0003, 0x0118, 0x2019, 0x0245, 0x201a,
-	0x61c2, 0x003e, 0x001e, 0x0804, 0xa22d, 0xc3e5, 0x0804, 0x9e84,
-	0x2011, 0x0008, 0x2001, 0x180f, 0x2004, 0xd0a4, 0x0110, 0x2011,
-	0x0028, 0x7824, 0xd0cc, 0x1110, 0x7216, 0x0470, 0x0ce8, 0xc2e5,
-	0x2011, 0x0302, 0x0016, 0x782c, 0x701a, 0x7930, 0x711e, 0x9105,
-	0x0108, 0xc2dd, 0x001e, 0x7824, 0xd0cc, 0x0108, 0xc2e5, 0x7216,
-	0x7027, 0x0012, 0x702f, 0x0008, 0x7043, 0x7000, 0x7047, 0x0500,
-	0x704f, 0x000a, 0x2069, 0x0200, 0x6813, 0x0009, 0x2071, 0x0240,
-	0x700b, 0x2500, 0x60c3, 0x0032, 0x0804, 0xa22d, 0x2011, 0x0028,
-	0x7824, 0xd0cc, 0x1128, 0x7216, 0x60c3, 0x0018, 0x0804, 0xa22d,
-	0x0cd0, 0xc2e5, 0x2011, 0x0100, 0x7824, 0xd0cc, 0x0108, 0xc2e5,
-	0x7216, 0x702f, 0x0008, 0x7858, 0x9084, 0x00ff, 0x7036, 0x60c3,
-	0x0020, 0x0804, 0xa22d, 0x2011, 0x0008, 0x7824, 0xd0cc, 0x0108,
-	0xc2e5, 0x7216, 0x0c08, 0x0036, 0x7b14, 0x9384, 0xff00, 0x7816,
-	0x9384, 0x00ff, 0x8001, 0x1138, 0x7824, 0xd0cc, 0x0108, 0xc2e5,
-	0x7216, 0x003e, 0x0888, 0x0046, 0x2021, 0x0800, 0x0006, 0x7824,
-	0xd0cc, 0x000e, 0x0108, 0xc4e5, 0x7416, 0x004e, 0x701e, 0x003e,
-	0x0818, 0x00d6, 0x6813, 0x0008, 0xb810, 0x9085, 0x0700, 0x7002,
-	0xb814, 0x7006, 0x2069, 0x1800, 0x687c, 0x700a, 0x6880, 0x700e,
-	0x7824, 0xd0cc, 0x1168, 0x7013, 0x0898, 0x080c, 0xa21b, 0x721a,
-	0x7a08, 0x7222, 0x2f10, 0x7226, 0x2071, 0x024c, 0x00de, 0x0005,
-	0x7013, 0x0889, 0x0c90, 0x0016, 0x7814, 0x9084, 0x0700, 0x8007,
-	0x0013, 0x001e, 0x0005, 0x9f73, 0x9f73, 0x9f75, 0x9f73, 0x9f73,
-	0x9f73, 0x9f8f, 0x9f73, 0x080c, 0x0dd5, 0x7914, 0x918c, 0x08ff,
-	0x918d, 0xf600, 0x7916, 0x2009, 0x0003, 0x00b9, 0x2069, 0x1847,
-	0x6804, 0xd0bc, 0x0130, 0x682c, 0x9084, 0x00ff, 0x8007, 0x7032,
-	0x0010, 0x7033, 0x3f00, 0x60c3, 0x0001, 0x0804, 0xa22d, 0x2009,
-	0x0003, 0x0019, 0x7033, 0x7f00, 0x0cb0, 0x0016, 0x080c, 0xab07,
-	0x001e, 0xb810, 0x9085, 0x0100, 0x7002, 0xb814, 0x7006, 0x2069,
-	0x1800, 0x6a7c, 0x720a, 0x6a80, 0x720e, 0x7013, 0x0888, 0x918d,
-	0x0008, 0x7116, 0x080c, 0xa21b, 0x721a, 0x7a08, 0x7222, 0x2f10,
-	0x7226, 0x0005, 0x00b6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0056,
-	0x0046, 0x0036, 0x2061, 0x0100, 0x2071, 0x1800, 0x7160, 0x7810,
-	0x2058, 0x76dc, 0x96b4, 0x0028, 0x0110, 0x737c, 0x7480, 0x2500,
-	0x76dc, 0x96b4, 0x0028, 0x0140, 0x2001, 0x04ff, 0x6062, 0x6067,
-	0xffff, 0x636a, 0x646e, 0x0050, 0x2001, 0x00ff, 0x9085, 0x0400,
-	0x6062, 0x6067, 0xffff, 0x606b, 0x0000, 0x616e, 0xb8b8, 0x6073,
-	0x0530, 0x6077, 0x0008, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e,
-	0x8007, 0x9085, 0x0020, 0x607a, 0x607f, 0x0000, 0x2b00, 0x6082,
-	0x6087, 0xffff, 0x7814, 0x0096, 0x2048, 0xa838, 0x608a, 0xa834,
-	0x608e, 0xa848, 0x60c6, 0xa844, 0x60ca, 0x009e, 0xb86c, 0x60ce,
-	0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000, 0x2001, 0x1837,
-	0x2004, 0x9084, 0x0028, 0x0128, 0x609f, 0x0000, 0x2001, 0x0092,
-	0x0048, 0x6028, 0xc0bd, 0x602a, 0x609f, 0x00ff, 0x6027, 0xffff,
-	0x2001, 0x00b2, 0x6016, 0x2009, 0x07d0, 0x080c, 0x8555, 0x003e,
-	0x004e, 0x005e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00be, 0x0005,
-	0x00b6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0056, 0x0046, 0x0036,
-	0x2061, 0x0100, 0x2071, 0x1800, 0x7160, 0x7810, 0x2058, 0xb8a0,
-	0x2028, 0x76dc, 0xd6ac, 0x1168, 0x9582, 0x007e, 0x1250, 0x2500,
-	0x9094, 0xff80, 0x1130, 0x9080, 0x331e, 0x2015, 0x9294, 0x00ff,
-	0x0020, 0xb910, 0xba14, 0x737c, 0x7480, 0x70dc, 0xd0ac, 0x1130,
-	0x9582, 0x007e, 0x1218, 0x9584, 0xff80, 0x0138, 0x9185, 0x0400,
-	0x6062, 0x6266, 0x636a, 0x646e, 0x0030, 0x6063, 0x0400, 0x6266,
-	0x606b, 0x0000, 0x616e, 0xb8b8, 0x6072, 0x6077, 0x0000, 0xb864,
-	0xd0a4, 0x0110, 0x6077, 0x0008, 0xb88c, 0x8000, 0x9084, 0x00ff,
+	0x700e, 0x7824, 0xd0cc, 0x1168, 0x7013, 0x0898, 0x080c, 0xa235,
+	0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x2071, 0x024c, 0x00de,
+	0x0005, 0x7013, 0x0889, 0x0c90, 0x0016, 0x7814, 0x9084, 0x0700,
+	0x8007, 0x0013, 0x001e, 0x0005, 0x9f9c, 0x9f9c, 0x9f9e, 0x9f9c,
+	0x9f9c, 0x9f9c, 0x9fb8, 0x9f9c, 0x080c, 0x0dd5, 0x7914, 0x918c,
+	0x08ff, 0x918d, 0xf600, 0x7916, 0x2009, 0x0003, 0x00b9, 0x2069,
+	0x1847, 0x6804, 0xd0bc, 0x0130, 0x682c, 0x9084, 0x00ff, 0x8007,
+	0x7032, 0x0010, 0x7033, 0x3f00, 0x60c3, 0x0001, 0x0804, 0xa247,
+	0x2009, 0x0003, 0x0019, 0x7033, 0x7f00, 0x0cb0, 0x0016, 0x080c,
+	0xab21, 0x001e, 0xb810, 0x9085, 0x0100, 0x7002, 0xb814, 0x7006,
+	0x2069, 0x1800, 0x6a7c, 0x720a, 0x6a80, 0x720e, 0x7013, 0x0888,
+	0x918d, 0x0008, 0x7116, 0x080c, 0xa235, 0x721a, 0x7a08, 0x7222,
+	0x2f10, 0x7226, 0x0005, 0x00b6, 0x00e6, 0x00d6, 0x00c6, 0x0066,
+	0x0056, 0x0046, 0x0036, 0x2061, 0x0100, 0x2071, 0x1800, 0x7160,
+	0x7810, 0x2058, 0x76dc, 0x96b4, 0x0028, 0x0110, 0x737c, 0x7480,
+	0x2500, 0x76dc, 0x96b4, 0x0028, 0x0140, 0x2001, 0x04ff, 0x6062,
+	0x6067, 0xffff, 0x636a, 0x646e, 0x0050, 0x2001, 0x00ff, 0x9085,
+	0x0400, 0x6062, 0x6067, 0xffff, 0x606b, 0x0000, 0x616e, 0xb8b8,
+	0x6073, 0x0530, 0x6077, 0x0008, 0xb88c, 0x8000, 0x9084, 0x00ff,
 	0xb88e, 0x8007, 0x9085, 0x0020, 0x607a, 0x607f, 0x0000, 0x2b00,
 	0x6082, 0x6087, 0xffff, 0x7814, 0x0096, 0x2048, 0xa838, 0x608a,
 	0xa834, 0x608e, 0xa848, 0x60c6, 0xa844, 0x60ca, 0x009e, 0xb86c,
-	0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xbac0,
-	0x629e, 0x00f6, 0x2079, 0x0140, 0x7803, 0x0000, 0x00fe, 0x2009,
-	0x0092, 0x6116, 0x2009, 0x07d0, 0x080c, 0x8555, 0x003e, 0x004e,
-	0x005e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00be, 0x0005, 0x00b6,
-	0x0096, 0x00e6, 0x00d6, 0x00c6, 0x0056, 0x0046, 0x0036, 0x2061,
-	0x0100, 0x2071, 0x1800, 0x7810, 0x2058, 0xb8a0, 0x2028, 0xb910,
-	0xba14, 0x737c, 0x7480, 0x7820, 0x90be, 0x0006, 0x0904, 0xa18a,
-	0x90be, 0x000a, 0x1904, 0xa146, 0x609f, 0x0000, 0x7814, 0x2048,
-	0xa87c, 0xd0fc, 0x05d0, 0xaf90, 0x9784, 0xff00, 0x9105, 0x6062,
-	0x873f, 0x9784, 0xff00, 0x0006, 0x7814, 0x2048, 0xa878, 0xc0fc,
-	0x9005, 0x000e, 0x1160, 0xaf94, 0x87ff, 0x0510, 0x2039, 0x0098,
-	0x9705, 0x6072, 0x7808, 0x6082, 0x2f00, 0x6086, 0x0038, 0x9185,
-	0x2200, 0x6062, 0x6073, 0x0129, 0x6077, 0x0000, 0x609f, 0x0000,
-	0x2001, 0x1837, 0x2004, 0xd0ac, 0x11a8, 0xd09c, 0x0130, 0x7814,
-	0x2048, 0xa874, 0x9082, 0x0080, 0x1268, 0xb814, 0x609e, 0x0050,
-	0x2039, 0x0029, 0x9705, 0x6072, 0x0c48, 0x9185, 0x0200, 0x6062,
-	0x6073, 0x2029, 0xa87c, 0xd0fc, 0x0118, 0xaf94, 0x87ff, 0x1120,
-	0x2f00, 0x6082, 0x7808, 0x6086, 0x6266, 0x636a, 0x646e, 0x6077,
-	0x0000, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a,
-	0x607f, 0x0000, 0xa838, 0x608a, 0xa834, 0x608e, 0xa848, 0x60c6,
+	0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000, 0x2001,
+	0x1837, 0x2004, 0x9084, 0x0028, 0x0128, 0x609f, 0x0000, 0x2001,
+	0x0092, 0x0048, 0x6028, 0xc0bd, 0x602a, 0x609f, 0x00ff, 0x6027,
+	0xffff, 0x2001, 0x00b2, 0x6016, 0x2009, 0x07d0, 0x080c, 0x857e,
+	0x003e, 0x004e, 0x005e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00be,
+	0x0005, 0x00b6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0056, 0x0046,
+	0x0036, 0x2061, 0x0100, 0x2071, 0x1800, 0x7160, 0x7810, 0x2058,
+	0xb8a0, 0x2028, 0x76dc, 0xd6ac, 0x1168, 0x9582, 0x007e, 0x1250,
+	0x2500, 0x9094, 0xff80, 0x1130, 0x9080, 0x3325, 0x2015, 0x9294,
+	0x00ff, 0x0020, 0xb910, 0xba14, 0x737c, 0x7480, 0x70dc, 0xd0ac,
+	0x1130, 0x9582, 0x007e, 0x1218, 0x9584, 0xff80, 0x0138, 0x9185,
+	0x0400, 0x6062, 0x6266, 0x636a, 0x646e, 0x0030, 0x6063, 0x0400,
+	0x6266, 0x606b, 0x0000, 0x616e, 0xb8b8, 0x6072, 0x6077, 0x0000,
+	0xb864, 0xd0a4, 0x0110, 0x6077, 0x0008, 0xb88c, 0x8000, 0x9084,
+	0x00ff, 0xb88e, 0x8007, 0x9085, 0x0020, 0x607a, 0x607f, 0x0000,
+	0x2b00, 0x6082, 0x6087, 0xffff, 0x7814, 0x0096, 0x2048, 0xa838,
+	0x608a, 0xa834, 0x608e, 0xa848, 0x60c6, 0xa844, 0x60ca, 0x009e,
+	0xb86c, 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000,
+	0xbac0, 0x629e, 0x00f6, 0x2079, 0x0140, 0x7803, 0x0000, 0x00fe,
+	0x2009, 0x0092, 0x6116, 0x2009, 0x07d0, 0x080c, 0x857e, 0x003e,
+	0x004e, 0x005e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00be, 0x0005,
+	0x00b6, 0x0096, 0x00e6, 0x00d6, 0x00c6, 0x0056, 0x0046, 0x0036,
+	0x2061, 0x0100, 0x2071, 0x1800, 0x7810, 0x2058, 0xb8a0, 0x2028,
+	0xb910, 0xba14, 0x737c, 0x7480, 0x7820, 0x90be, 0x0006, 0x0904,
+	0xa1a4, 0x90be, 0x000a, 0x1904, 0xa160, 0xb8c0, 0x609e, 0x7814,
+	0x2048, 0xa87c, 0xd0fc, 0x0558, 0xaf90, 0x9784, 0xff00, 0x9105,
+	0x6062, 0x873f, 0x9784, 0xff00, 0x0006, 0x7814, 0x2048, 0xa878,
+	0xc0fc, 0x9005, 0x000e, 0x1160, 0xaf94, 0x87ff, 0x0198, 0x2039,
+	0x0098, 0x9705, 0x6072, 0x7808, 0x6082, 0x2f00, 0x6086, 0x0038,
+	0x9185, 0x2200, 0x6062, 0x6073, 0x0129, 0x6077, 0x0000, 0xb8c0,
+	0x609e, 0x0050, 0x2039, 0x0029, 0x9705, 0x6072, 0x0cc0, 0x9185,
+	0x0200, 0x6062, 0x6073, 0x2029, 0xa87c, 0xd0fc, 0x0118, 0xaf94,
+	0x87ff, 0x1120, 0x2f00, 0x6082, 0x7808, 0x6086, 0x6266, 0x636a,
+	0x646e, 0x6077, 0x0000, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e,
+	0x8007, 0x607a, 0x607f, 0x0000, 0xa838, 0x608a, 0xa834, 0x608e,
+	0xa848, 0x60c6, 0xa844, 0x60ca, 0xb86c, 0x60ce, 0x60af, 0x95d5,
+	0x60d7, 0x0000, 0x080c, 0xab06, 0x2009, 0x07d0, 0x60c4, 0x9084,
+	0xfff0, 0x9005, 0x0110, 0x2009, 0x1b58, 0x080c, 0x857e, 0x003e,
+	0x004e, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x009e, 0x00be, 0x0005,
+	0x7804, 0x9086, 0x0040, 0x0904, 0xa1e0, 0x9185, 0x0100, 0x6062,
+	0x6266, 0x636a, 0x646e, 0x6073, 0x0809, 0x6077, 0x0008, 0x60af,
+	0x95d5, 0x60d7, 0x0000, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e,
+	0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6082, 0x7808, 0x6086,
+	0x7814, 0x2048, 0xa838, 0x608a, 0xa834, 0x608e, 0xa848, 0x60c6,
+	0xa844, 0x60ca, 0xb86c, 0x60ce, 0xbac0, 0x629e, 0x080c, 0xab06,
+	0x2009, 0x07d0, 0x60c4, 0x9084, 0xfff0, 0x9005, 0x0110, 0x2009,
+	0x1b58, 0x080c, 0x857e, 0x003e, 0x004e, 0x005e, 0x00ce, 0x00de,
+	0x00ee, 0x009e, 0x00be, 0x0005, 0x7814, 0x2048, 0xa87c, 0x9084,
+	0x0003, 0x9086, 0x0002, 0x0904, 0xa1fc, 0x9185, 0x0100, 0x6062,
+	0x6266, 0x636a, 0x646e, 0x6073, 0x0880, 0x6077, 0x0008, 0xb88c,
+	0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a, 0x7838, 0x607e,
+	0x2f00, 0x6086, 0x7808, 0x6082, 0xa890, 0x608a, 0xa88c, 0x608e,
+	0xa8b0, 0x60c6, 0xa8ac, 0x60ca, 0xa8ac, 0x7930, 0x9108, 0x7932,
+	0xa8b0, 0x792c, 0x9109, 0x792e, 0xb86c, 0x60ce, 0x60af, 0x95d5,
+	0x60d7, 0x0000, 0xbac0, 0x629e, 0x080c, 0xaae3, 0x0804, 0xa190,
+	0xb8cc, 0xd084, 0x0148, 0xb88c, 0x7814, 0x2048, 0xb88c, 0x7846,
+	0xa836, 0x2900, 0xa83a, 0xb04a, 0x9185, 0x0600, 0x6062, 0x6266,
+	0x636a, 0x646e, 0x6073, 0x0829, 0x6077, 0x0000, 0x60af, 0x9575,
+	0x60d7, 0x0000, 0x0804, 0xa173, 0x9185, 0x0700, 0x6062, 0x6266,
+	0x636a, 0x646e, 0x7824, 0xd0cc, 0x7826, 0x0118, 0x6073, 0x0889,
+	0x0010, 0x6073, 0x0898, 0x6077, 0x0000, 0xb88c, 0x8000, 0x9084,
+	0x00ff, 0xb88e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6086,
+	0x7808, 0x6082, 0xa838, 0x608a, 0xa834, 0x608e, 0xa848, 0x60c6,
 	0xa844, 0x60ca, 0xb86c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000,
-	0x080c, 0xaaec, 0x2009, 0x07d0, 0x60c4, 0x9084, 0xfff0, 0x9005,
-	0x0110, 0x2009, 0x1b58, 0x080c, 0x8555, 0x003e, 0x004e, 0x005e,
-	0x00ce, 0x00de, 0x00ee, 0x009e, 0x00be, 0x0005, 0x7804, 0x9086,
-	0x0040, 0x0904, 0xa1c6, 0x9185, 0x0100, 0x6062, 0x6266, 0x636a,
-	0x646e, 0x6073, 0x0809, 0x6077, 0x0008, 0x60af, 0x95d5, 0x60d7,
-	0x0000, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a,
-	0x607f, 0x0000, 0x2f00, 0x6082, 0x7808, 0x6086, 0x7814, 0x2048,
-	0xa838, 0x608a, 0xa834, 0x608e, 0xa848, 0x60c6, 0xa844, 0x60ca,
-	0xb86c, 0x60ce, 0xbac0, 0x629e, 0x080c, 0xaaec, 0x2009, 0x07d0,
-	0x60c4, 0x9084, 0xfff0, 0x9005, 0x0110, 0x2009, 0x1b58, 0x080c,
-	0x8555, 0x003e, 0x004e, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x009e,
-	0x00be, 0x0005, 0x7814, 0x2048, 0xa87c, 0x9084, 0x0003, 0x9086,
-	0x0002, 0x0904, 0xa1e2, 0x9185, 0x0100, 0x6062, 0x6266, 0x636a,
-	0x646e, 0x6073, 0x0880, 0x6077, 0x0008, 0xb88c, 0x8000, 0x9084,
-	0x00ff, 0xb88e, 0x8007, 0x607a, 0x7838, 0x607e, 0x2f00, 0x6086,
-	0x7808, 0x6082, 0xa890, 0x608a, 0xa88c, 0x608e, 0xa8b0, 0x60c6,
-	0xa8ac, 0x60ca, 0xa8ac, 0x7930, 0x9108, 0x7932, 0xa8b0, 0x792c,
-	0x9109, 0x792e, 0xb86c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000,
-	0xbac0, 0x629e, 0x080c, 0xaac9, 0x0804, 0xa176, 0xb8cc, 0xd084,
-	0x0148, 0xb88c, 0x7814, 0x2048, 0xb88c, 0x7846, 0xa836, 0x2900,
-	0xa83a, 0xb04a, 0x9185, 0x0600, 0x6062, 0x6266, 0x636a, 0x646e,
-	0x6073, 0x0829, 0x6077, 0x0000, 0x60af, 0x9575, 0x60d7, 0x0000,
-	0x0804, 0xa159, 0x9185, 0x0700, 0x6062, 0x6266, 0x636a, 0x646e,
-	0x7824, 0xd0cc, 0x7826, 0x0118, 0x6073, 0x0889, 0x0010, 0x6073,
-	0x0898, 0x6077, 0x0000, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e,
-	0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6086, 0x7808, 0x6082,
-	0xa838, 0x608a, 0xa834, 0x608e, 0xa848, 0x60c6, 0xa844, 0x60ca,
-	0xb86c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xbac0, 0x629e,
-	0x7824, 0xd0cc, 0x0120, 0x080c, 0xaaec, 0x0804, 0xa176, 0x080c,
-	0xaac9, 0x0804, 0xa176, 0x7a10, 0x00b6, 0x2258, 0xba8c, 0x8210,
-	0x9294, 0x00ff, 0xba8e, 0x00be, 0x8217, 0x0005, 0x00d6, 0x2069,
-	0x19e7, 0x6843, 0x0001, 0x00de, 0x0005, 0x60a3, 0x0056, 0x60a7,
-	0x9575, 0x00f1, 0x080c, 0x8547, 0x0005, 0x0016, 0x2001, 0x180c,
-	0x200c, 0x9184, 0x0600, 0x9086, 0x0600, 0x0128, 0x0089, 0x080c,
-	0x8547, 0x001e, 0x0005, 0xc1e5, 0x2001, 0x180c, 0x2102, 0x2001,
-	0x19e8, 0x2003, 0x0000, 0x2001, 0x19f0, 0x2003, 0x0000, 0x0c88,
-	0x0006, 0x6014, 0x9084, 0x1804, 0x9085, 0x0009, 0x6016, 0x000e,
-	0x0005, 0x0016, 0x00c6, 0x0006, 0x2061, 0x0100, 0x61a4, 0x60a7,
-	0x95f5, 0x6014, 0x9084, 0x1804, 0x9085, 0x0008, 0x6016, 0x000e,
-	0xa001, 0xa001, 0xa001, 0x61a6, 0x00ce, 0x001e, 0x0005, 0x00c6,
-	0x00d6, 0x0016, 0x0026, 0x2061, 0x0100, 0x2069, 0x0140, 0x080c,
-	0x73b0, 0x11e8, 0x2001, 0x1a03, 0x2004, 0x9005, 0x1904, 0xa2bf,
-	0x0066, 0x2031, 0x0001, 0x080c, 0x7460, 0x006e, 0x1160, 0x2061,
-	0x0100, 0x6020, 0xd0b4, 0x1120, 0x6024, 0xd084, 0x090c, 0x0dd5,
-	0x080c, 0x8547, 0x0460, 0x00c6, 0x2061, 0x19e7, 0x00d0, 0x6904,
-	0x9194, 0x4000, 0x0548, 0x080c, 0xa259, 0x080c, 0x2cff, 0x00c6,
-	0x2061, 0x19e7, 0x6128, 0x9192, 0x0008, 0x1258, 0x8108, 0x612a,
-	0x6124, 0x00ce, 0x81ff, 0x0198, 0x080c, 0x8547, 0x080c, 0xa250,
-	0x0070, 0x6124, 0x91e5, 0x0000, 0x0140, 0x080c, 0xe9dd, 0x080c,
-	0x8550, 0x2009, 0x0014, 0x080c, 0xaec2, 0x00ce, 0x0000, 0x002e,
-	0x001e, 0x00de, 0x00ce, 0x0005, 0x2001, 0x1a03, 0x2004, 0x9005,
-	0x1db0, 0x00c6, 0x2061, 0x19e7, 0x6128, 0x9192, 0x0003, 0x1e08,
-	0x8108, 0x612a, 0x00ce, 0x080c, 0x8547, 0x080c, 0x5eda, 0x2009,
-	0x1846, 0x2114, 0x8210, 0x220a, 0x0c10, 0x0096, 0x00c6, 0x00d6,
-	0x00e6, 0x0016, 0x0026, 0x080c, 0x855d, 0x2071, 0x19e7, 0x713c,
-	0x81ff, 0x0904, 0xa363, 0x2061, 0x0100, 0x2069, 0x0140, 0x080c,
-	0x73b0, 0x1500, 0x0036, 0x2019, 0x0002, 0x080c, 0xa59c, 0x003e,
-	0x713c, 0x2160, 0x080c, 0xe9dd, 0x2009, 0x004a, 0x6220, 0x9296,
-	0x0009, 0x1130, 0x6114, 0x2148, 0xa87b, 0x0006, 0x2009, 0x004a,
-	0x080c, 0xaec2, 0x0066, 0x2031, 0x0001, 0x080c, 0x7460, 0x006e,
-	0x0804, 0xa363, 0x080c, 0xa36f, 0x0904, 0xa363, 0x6904, 0xd1f4,
-	0x0904, 0xa36a, 0x080c, 0x2cff, 0x00c6, 0x703c, 0x9065, 0x090c,
-	0x0dd5, 0x6020, 0x00ce, 0x9086, 0x0006, 0x1528, 0x61c8, 0x60c4,
-	0x9105, 0x1508, 0x2009, 0x180c, 0x2104, 0xd0d4, 0x01e0, 0x6214,
-	0x9294, 0x1800, 0x1128, 0x6224, 0x9294, 0x0002, 0x1560, 0x0030,
-	0xc0d4, 0x200a, 0xd0cc, 0x0110, 0x080c, 0x2c52, 0x6014, 0x9084,
-	0xe7fd, 0x9085, 0x0010, 0x6016, 0x703c, 0x2060, 0x2009, 0x0049,
-	0x080c, 0xaec2, 0x00c0, 0x0036, 0x2019, 0x0001, 0x080c, 0xa59c,
-	0x003e, 0x713c, 0x2160, 0x080c, 0xe9dd, 0x2009, 0x004a, 0x6220,
-	0x9296, 0x0009, 0x1130, 0x6114, 0x2148, 0xa87b, 0x0006, 0x2009,
-	0x004a, 0x080c, 0xaec2, 0x002e, 0x001e, 0x00ee, 0x00de, 0x00ce,
-	0x009e, 0x0005, 0xd1ec, 0x1904, 0xa31a, 0x0804, 0xa31c, 0x00d6,
-	0x00c6, 0x0096, 0x703c, 0x9065, 0x090c, 0x0dd5, 0x2001, 0x1837,
-	0x2004, 0xd09c, 0x1904, 0xa3fb, 0x2001, 0x0306, 0x200c, 0x9184,
-	0x0030, 0x0904, 0xa3fb, 0x9184, 0x0048, 0x9086, 0x0008, 0x1904,
-	0xa3fb, 0x2001, 0x020b, 0x2004, 0xd0fc, 0x0904, 0xa3fb, 0xd08c,
-	0x0904, 0xa3fb, 0x2009, 0x1a80, 0x2104, 0x8000, 0x0208, 0x200a,
-	0x2069, 0x0100, 0x6914, 0x918c, 0x0184, 0x918d, 0x0010, 0x6916,
-	0x69c8, 0x2011, 0x0020, 0x68c8, 0x9106, 0x1570, 0x8211, 0x1dd8,
-	0x2001, 0x0306, 0x2003, 0x4800, 0x2001, 0x009a, 0x2003, 0x0004,
-	0x2001, 0x1a66, 0x2003, 0x0000, 0x2001, 0x1a6f, 0x2003, 0x0000,
-	0x6a88, 0x698c, 0x2200, 0x9105, 0x1120, 0x2c10, 0x080c, 0x1bad,
-	0x0040, 0x6014, 0x2048, 0xaa3a, 0xa936, 0x6ac4, 0x69c8, 0xa946,
-	0xaa4a, 0x0126, 0x00c6, 0x2091, 0x2400, 0x002e, 0x080c, 0x1c46,
-	0x190c, 0x0dd5, 0x012e, 0x0090, 0x2009, 0x1a81, 0x2104, 0x8000,
-	0x0208, 0x200a, 0x69c8, 0x2011, 0x0020, 0x8211, 0x1df0, 0x68c8,
-	0x9106, 0x1dc0, 0x69c4, 0x68c8, 0x9105, 0x0160, 0x6824, 0xd08c,
-	0x0110, 0x6827, 0x0002, 0x7048, 0xc085, 0x704a, 0x0079, 0x7048,
-	0xc084, 0x704a, 0x2009, 0x07d0, 0x080c, 0x8555, 0x9006, 0x009e,
-	0x00ce, 0x00de, 0x0005, 0x9085, 0x0001, 0x0cc8, 0x0026, 0x00e6,
-	0x2071, 0x19e7, 0x7048, 0xd084, 0x01d8, 0x713c, 0x81ff, 0x01c0,
-	0x2071, 0x0100, 0x9188, 0x0008, 0x2114, 0x928e, 0x0006, 0x1138,
-	0x7014, 0x9084, 0x1984, 0x9085, 0x0012, 0x7016, 0x0048, 0x928e,
-	0x0009, 0x0db0, 0x7014, 0x9084, 0x1984, 0x9085, 0x0016, 0x7016,
-	0x00ee, 0x002e, 0x0005, 0x00b6, 0x00e6, 0x00d6, 0x00c6, 0x0066,
-	0x0056, 0x0046, 0x0006, 0x0126, 0x2091, 0x8000, 0x6010, 0x2058,
-	0xbca0, 0x2071, 0x19e7, 0x7018, 0x2058, 0x8bff, 0x0190, 0xb8a0,
-	0x9406, 0x0118, 0xb854, 0x2058, 0x0cc0, 0x6014, 0x0096, 0x2048,
-	0xac6c, 0xad70, 0xae78, 0x009e, 0x080c, 0x6732, 0x0110, 0x9085,
-	0x0001, 0x012e, 0x000e, 0x004e, 0x005e, 0x006e, 0x00ce, 0x00de,
-	0x00ee, 0x00be, 0x0005, 0x080c, 0x9c37, 0x7003, 0x1200, 0x7838,
-	0x7012, 0x783c, 0x7016, 0x00c6, 0x7820, 0x9086, 0x0004, 0x1148,
-	0x7810, 0x9005, 0x0130, 0x00b6, 0x2058, 0xb810, 0xb914, 0x00be,
-	0x0020, 0x2061, 0x1800, 0x607c, 0x6180, 0x9084, 0x00ff, 0x700a,
-	0x710e, 0x00ce, 0x60c3, 0x002c, 0x0804, 0xa22d, 0x080c, 0x9c37,
-	0x7003, 0x0f00, 0x7808, 0xd09c, 0x0128, 0xb810, 0x9084, 0x00ff,
-	0x700a, 0xb814, 0x700e, 0x60c3, 0x0008, 0x0804, 0xa22d, 0x0156,
-	0x080c, 0x9c82, 0x7003, 0x0200, 0x080c, 0x85b0, 0x20a9, 0x0006,
-	0x2011, 0xfff4, 0x2019, 0xfff5, 0x9ef0, 0x0002, 0x2305, 0x2072,
-	0x8e70, 0x2205, 0x2072, 0x8e70, 0x9398, 0x0002, 0x9290, 0x0002,
-	0x1f04, 0xa496, 0x60c3, 0x001c, 0x015e, 0x0804, 0xa22d, 0x0016,
-	0x0026, 0x080c, 0x9c5e, 0x080c, 0x9c70, 0x9e80, 0x0004, 0x20e9,
-	0x0000, 0x20a0, 0x7814, 0x0096, 0x2048, 0xa800, 0x2048, 0xa860,
-	0x20e0, 0xa85c, 0x9080, 0x0021, 0x2098, 0x009e, 0x7808, 0x9088,
-	0x0002, 0x21a8, 0x9192, 0x0010, 0x1250, 0x4003, 0x9080, 0x0004,
-	0x8003, 0x60c2, 0x080c, 0xa22d, 0x002e, 0x001e, 0x0005, 0x20a9,
-	0x0010, 0x4003, 0x080c, 0xaaf2, 0x20a1, 0x0240, 0x22a8, 0x4003,
-	0x0c68, 0x080c, 0x9c37, 0x7003, 0x6200, 0x7808, 0x700e, 0x60c3,
-	0x0008, 0x0804, 0xa22d, 0x0016, 0x0026, 0x080c, 0x9c37, 0x20e9,
-	0x0000, 0x20a1, 0x024c, 0x7814, 0x0096, 0x2048, 0xa800, 0x2048,
-	0xa860, 0x20e0, 0xa85c, 0x9080, 0x0023, 0x2098, 0x009e, 0x7808,
-	0x9088, 0x0002, 0x21a8, 0x4003, 0x8003, 0x60c2, 0x080c, 0xa22d,
-	0x002e, 0x001e, 0x0005, 0x00e6, 0x00c6, 0x0006, 0x0126, 0x2091,
-	0x8000, 0x2071, 0x19e7, 0x700c, 0x2060, 0x8cff, 0x0178, 0x080c,
-	0xcd21, 0x1110, 0x080c, 0xb7f9, 0x600c, 0x0006, 0x080c, 0xcf88,
-	0x080c, 0xae47, 0x080c, 0xa678, 0x00ce, 0x0c78, 0x2c00, 0x700e,
-	0x700a, 0x012e, 0x000e, 0x00ce, 0x00ee, 0x0005, 0x0126, 0x0156,
+	0xbac0, 0x629e, 0x7824, 0xd0cc, 0x0120, 0x080c, 0xab06, 0x0804,
+	0xa190, 0x080c, 0xaae3, 0x0804, 0xa190, 0x7a10, 0x00b6, 0x2258,
+	0xba8c, 0x8210, 0x9294, 0x00ff, 0xba8e, 0x00be, 0x8217, 0x0005,
+	0x00d6, 0x2069, 0x19e7, 0x6843, 0x0001, 0x00de, 0x0005, 0x60a3,
+	0x0056, 0x60a7, 0x9575, 0x00f1, 0x080c, 0x8570, 0x0005, 0x0016,
+	0x2001, 0x180c, 0x200c, 0x9184, 0x0600, 0x9086, 0x0600, 0x0128,
+	0x0089, 0x080c, 0x8570, 0x001e, 0x0005, 0xc1e5, 0x2001, 0x180c,
+	0x2102, 0x2001, 0x19e8, 0x2003, 0x0000, 0x2001, 0x19f0, 0x2003,
+	0x0000, 0x0c88, 0x0006, 0x6014, 0x9084, 0x1804, 0x9085, 0x0009,
+	0x6016, 0x000e, 0x0005, 0x0016, 0x00c6, 0x0006, 0x2061, 0x0100,
+	0x61a4, 0x60a7, 0x95f5, 0x6014, 0x9084, 0x1804, 0x9085, 0x0008,
+	0x6016, 0x000e, 0xa001, 0xa001, 0xa001, 0x61a6, 0x00ce, 0x001e,
+	0x0005, 0x00c6, 0x00d6, 0x0016, 0x0026, 0x2061, 0x0100, 0x2069,
+	0x0140, 0x080c, 0x73bc, 0x11e8, 0x2001, 0x1a03, 0x2004, 0x9005,
+	0x1904, 0xa2d9, 0x0066, 0x2031, 0x0001, 0x080c, 0x746c, 0x006e,
+	0x1160, 0x2061, 0x0100, 0x6020, 0xd0b4, 0x1120, 0x6024, 0xd084,
+	0x090c, 0x0dd5, 0x080c, 0x8570, 0x0460, 0x00c6, 0x2061, 0x19e7,
+	0x00d0, 0x6904, 0x9194, 0x4000, 0x0548, 0x080c, 0xa273, 0x080c,
+	0x2cff, 0x00c6, 0x2061, 0x19e7, 0x6128, 0x9192, 0x0008, 0x1258,
+	0x8108, 0x612a, 0x6124, 0x00ce, 0x81ff, 0x0198, 0x080c, 0x8570,
+	0x080c, 0xa26a, 0x0070, 0x6124, 0x91e5, 0x0000, 0x0140, 0x080c,
+	0xe9fe, 0x080c, 0x8579, 0x2009, 0x0014, 0x080c, 0xaedc, 0x00ce,
+	0x0000, 0x002e, 0x001e, 0x00de, 0x00ce, 0x0005, 0x2001, 0x1a03,
+	0x2004, 0x9005, 0x1db0, 0x00c6, 0x2061, 0x19e7, 0x6128, 0x9192,
+	0x0003, 0x1e08, 0x8108, 0x612a, 0x00ce, 0x080c, 0x8570, 0x080c,
+	0x5ed9, 0x2009, 0x1846, 0x2114, 0x8210, 0x220a, 0x0c10, 0x0096,
+	0x00c6, 0x00d6, 0x00e6, 0x0016, 0x0026, 0x080c, 0x8586, 0x2071,
+	0x19e7, 0x713c, 0x81ff, 0x0904, 0xa37d, 0x2061, 0x0100, 0x2069,
+	0x0140, 0x080c, 0x73bc, 0x1500, 0x0036, 0x2019, 0x0002, 0x080c,
+	0xa5b6, 0x003e, 0x713c, 0x2160, 0x080c, 0xe9fe, 0x2009, 0x004a,
+	0x6220, 0x9296, 0x0009, 0x1130, 0x6114, 0x2148, 0xa87b, 0x0006,
+	0x2009, 0x004a, 0x080c, 0xaedc, 0x0066, 0x2031, 0x0001, 0x080c,
+	0x746c, 0x006e, 0x0804, 0xa37d, 0x080c, 0xa389, 0x0904, 0xa37d,
+	0x6904, 0xd1f4, 0x0904, 0xa384, 0x080c, 0x2cff, 0x00c6, 0x703c,
+	0x9065, 0x090c, 0x0dd5, 0x6020, 0x00ce, 0x9086, 0x0006, 0x1528,
+	0x61c8, 0x60c4, 0x9105, 0x1508, 0x2009, 0x180c, 0x2104, 0xd0d4,
+	0x01e0, 0x6214, 0x9294, 0x1800, 0x1128, 0x6224, 0x9294, 0x0002,
+	0x1560, 0x0030, 0xc0d4, 0x200a, 0xd0cc, 0x0110, 0x080c, 0x2c52,
+	0x6014, 0x9084, 0xe7fd, 0x9085, 0x0010, 0x6016, 0x703c, 0x2060,
+	0x2009, 0x0049, 0x080c, 0xaedc, 0x00c0, 0x0036, 0x2019, 0x0001,
+	0x080c, 0xa5b6, 0x003e, 0x713c, 0x2160, 0x080c, 0xe9fe, 0x2009,
+	0x004a, 0x6220, 0x9296, 0x0009, 0x1130, 0x6114, 0x2148, 0xa87b,
+	0x0006, 0x2009, 0x004a, 0x080c, 0xaedc, 0x002e, 0x001e, 0x00ee,
+	0x00de, 0x00ce, 0x009e, 0x0005, 0xd1ec, 0x1904, 0xa334, 0x0804,
+	0xa336, 0x00d6, 0x00c6, 0x0096, 0x703c, 0x9065, 0x090c, 0x0dd5,
+	0x2001, 0x1837, 0x2004, 0xd09c, 0x1904, 0xa415, 0x2001, 0x0306,
+	0x200c, 0x9184, 0x0030, 0x0904, 0xa415, 0x9184, 0x0048, 0x9086,
+	0x0008, 0x1904, 0xa415, 0x2001, 0x020b, 0x2004, 0xd0fc, 0x0904,
+	0xa415, 0xd08c, 0x0904, 0xa415, 0x2009, 0x1a80, 0x2104, 0x8000,
+	0x0208, 0x200a, 0x2069, 0x0100, 0x6914, 0x918c, 0x0184, 0x918d,
+	0x0010, 0x6916, 0x69c8, 0x2011, 0x0020, 0x68c8, 0x9106, 0x1570,
+	0x8211, 0x1dd8, 0x2001, 0x0306, 0x2003, 0x4800, 0x2001, 0x009a,
+	0x2003, 0x0004, 0x2001, 0x1a66, 0x2003, 0x0000, 0x2001, 0x1a6f,
+	0x2003, 0x0000, 0x6a88, 0x698c, 0x2200, 0x9105, 0x1120, 0x2c10,
+	0x080c, 0x1bad, 0x0040, 0x6014, 0x2048, 0xaa3a, 0xa936, 0x6ac4,
+	0x69c8, 0xa946, 0xaa4a, 0x0126, 0x00c6, 0x2091, 0x2400, 0x002e,
+	0x080c, 0x1c46, 0x190c, 0x0dd5, 0x012e, 0x0090, 0x2009, 0x1a81,
+	0x2104, 0x8000, 0x0208, 0x200a, 0x69c8, 0x2011, 0x0020, 0x8211,
+	0x1df0, 0x68c8, 0x9106, 0x1dc0, 0x69c4, 0x68c8, 0x9105, 0x0160,
+	0x6824, 0xd08c, 0x0110, 0x6827, 0x0002, 0x7048, 0xc085, 0x704a,
+	0x0079, 0x7048, 0xc084, 0x704a, 0x2009, 0x07d0, 0x080c, 0x857e,
+	0x9006, 0x009e, 0x00ce, 0x00de, 0x0005, 0x9085, 0x0001, 0x0cc8,
+	0x0026, 0x00e6, 0x2071, 0x19e7, 0x7048, 0xd084, 0x01d8, 0x713c,
+	0x81ff, 0x01c0, 0x2071, 0x0100, 0x9188, 0x0008, 0x2114, 0x928e,
+	0x0006, 0x1138, 0x7014, 0x9084, 0x1984, 0x9085, 0x0012, 0x7016,
+	0x0048, 0x928e, 0x0009, 0x0db0, 0x7014, 0x9084, 0x1984, 0x9085,
+	0x0016, 0x7016, 0x00ee, 0x002e, 0x0005, 0x00b6, 0x00e6, 0x00d6,
+	0x00c6, 0x0066, 0x0056, 0x0046, 0x0006, 0x0126, 0x2091, 0x8000,
+	0x6010, 0x2058, 0xbca0, 0x2071, 0x19e7, 0x7018, 0x2058, 0x8bff,
+	0x0190, 0xb8a0, 0x9406, 0x0118, 0xb854, 0x2058, 0x0cc0, 0x6014,
+	0x0096, 0x2048, 0xac6c, 0xad70, 0xae78, 0x009e, 0x080c, 0x6731,
+	0x0110, 0x9085, 0x0001, 0x012e, 0x000e, 0x004e, 0x005e, 0x006e,
+	0x00ce, 0x00de, 0x00ee, 0x00be, 0x0005, 0x080c, 0x9c60, 0x7003,
+	0x1200, 0x7838, 0x7012, 0x783c, 0x7016, 0x00c6, 0x7820, 0x9086,
+	0x0004, 0x1148, 0x7810, 0x9005, 0x0130, 0x00b6, 0x2058, 0xb810,
+	0xb914, 0x00be, 0x0020, 0x2061, 0x1800, 0x607c, 0x6180, 0x9084,
+	0x00ff, 0x700a, 0x710e, 0x00ce, 0x60c3, 0x002c, 0x0804, 0xa247,
+	0x080c, 0x9c60, 0x7003, 0x0f00, 0x7808, 0xd09c, 0x0128, 0xb810,
+	0x9084, 0x00ff, 0x700a, 0xb814, 0x700e, 0x60c3, 0x0008, 0x0804,
+	0xa247, 0x0156, 0x080c, 0x9cab, 0x7003, 0x0200, 0x080c, 0x85d9,
+	0x20a9, 0x0006, 0x2011, 0xfff4, 0x2019, 0xfff5, 0x9ef0, 0x0002,
+	0x2305, 0x2072, 0x8e70, 0x2205, 0x2072, 0x8e70, 0x9398, 0x0002,
+	0x9290, 0x0002, 0x1f04, 0xa4b0, 0x60c3, 0x001c, 0x015e, 0x0804,
+	0xa247, 0x0016, 0x0026, 0x080c, 0x9c87, 0x080c, 0x9c99, 0x9e80,
+	0x0004, 0x20e9, 0x0000, 0x20a0, 0x7814, 0x0096, 0x2048, 0xa800,
+	0x2048, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0021, 0x2098, 0x009e,
+	0x7808, 0x9088, 0x0002, 0x21a8, 0x9192, 0x0010, 0x1250, 0x4003,
+	0x9080, 0x0004, 0x8003, 0x60c2, 0x080c, 0xa247, 0x002e, 0x001e,
+	0x0005, 0x20a9, 0x0010, 0x4003, 0x080c, 0xab0c, 0x20a1, 0x0240,
+	0x22a8, 0x4003, 0x0c68, 0x080c, 0x9c60, 0x7003, 0x6200, 0x7808,
+	0x700e, 0x60c3, 0x0008, 0x0804, 0xa247, 0x0016, 0x0026, 0x080c,
+	0x9c60, 0x20e9, 0x0000, 0x20a1, 0x024c, 0x7814, 0x0096, 0x2048,
+	0xa800, 0x2048, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0023, 0x2098,
+	0x009e, 0x7808, 0x9088, 0x0002, 0x21a8, 0x4003, 0x8003, 0x60c2,
+	0x080c, 0xa247, 0x002e, 0x001e, 0x0005, 0x00e6, 0x00c6, 0x0006,
+	0x0126, 0x2091, 0x8000, 0x2071, 0x19e7, 0x700c, 0x2060, 0x8cff,
+	0x0178, 0x080c, 0xcd3b, 0x1110, 0x080c, 0xb813, 0x600c, 0x0006,
+	0x080c, 0xcfa2, 0x080c, 0xae61, 0x080c, 0xa692, 0x00ce, 0x0c78,
+	0x2c00, 0x700e, 0x700a, 0x012e, 0x000e, 0x00ce, 0x00ee, 0x0005,
+	0x0126, 0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026,
+	0x0016, 0x0006, 0x2091, 0x8000, 0x2001, 0x180c, 0x200c, 0x918c,
+	0xe7ff, 0x2102, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x19e7,
+	0x7024, 0x2060, 0x8cff, 0x01f8, 0x080c, 0xa273, 0x6ac0, 0x68c3,
+	0x0000, 0x080c, 0x8579, 0x00c6, 0x2061, 0x0100, 0x080c, 0xac5d,
+	0x00ce, 0x20a9, 0x01f4, 0x0461, 0x2009, 0x0013, 0x080c, 0xaedc,
+	0x000e, 0x001e, 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe,
+	0x015e, 0x012e, 0x0005, 0x2001, 0x1800, 0x2004, 0x9096, 0x0001,
+	0x0d78, 0x9096, 0x0004, 0x0d60, 0x080c, 0x8579, 0x6814, 0x9084,
+	0x0001, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000,
+	0x2011, 0x5e83, 0x080c, 0x84f3, 0x20a9, 0x01f4, 0x0009, 0x08c0,
+	0x6824, 0xd094, 0x0140, 0x6827, 0x0004, 0x7804, 0x9084, 0x4000,
+	0x190c, 0x2cff, 0x0090, 0xd084, 0x0118, 0x6827, 0x0001, 0x0010,
+	0x1f04, 0xa598, 0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100,
+	0x080c, 0x2cef, 0x9006, 0x080c, 0x2cef, 0x0005, 0x0126, 0x0156,
 	0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0016, 0x0006,
-	0x2091, 0x8000, 0x2001, 0x180c, 0x200c, 0x918c, 0xe7ff, 0x2102,
-	0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x19e7, 0x7024, 0x2060,
-	0x8cff, 0x01f8, 0x080c, 0xa259, 0x6ac0, 0x68c3, 0x0000, 0x080c,
-	0x8550, 0x00c6, 0x2061, 0x0100, 0x080c, 0xac43, 0x00ce, 0x20a9,
-	0x01f4, 0x0461, 0x2009, 0x0013, 0x080c, 0xaec2, 0x000e, 0x001e,
-	0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e,
-	0x0005, 0x2001, 0x1800, 0x2004, 0x9096, 0x0001, 0x0d78, 0x9096,
-	0x0004, 0x0d60, 0x080c, 0x8550, 0x6814, 0x9084, 0x0001, 0x0110,
-	0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000, 0x2011, 0x5e84,
-	0x080c, 0x84ca, 0x20a9, 0x01f4, 0x0009, 0x08c0, 0x6824, 0xd094,
+	0x2091, 0x8000, 0x2001, 0x180c, 0x200c, 0x918c, 0xdbff, 0x2102,
+	0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x19e7, 0x703c, 0x2060,
+	0x8cff, 0x0904, 0xa648, 0x9386, 0x0002, 0x1128, 0x6814, 0x9084,
+	0x0002, 0x0904, 0xa648, 0x68af, 0x95f5, 0x6817, 0x0010, 0x2009,
+	0x00fa, 0x8109, 0x1df0, 0x69c6, 0x68cb, 0x0008, 0x080c, 0x8586,
+	0x080c, 0x1ffa, 0x0046, 0x2009, 0x00a5, 0x080c, 0x0e51, 0x2021,
+	0x0169, 0x2404, 0x9084, 0x000f, 0x9086, 0x0004, 0x11f8, 0x68af,
+	0x95f5, 0x68c6, 0x68cb, 0x0008, 0x00e6, 0x00f6, 0x2079, 0x0090,
+	0x2071, 0x1a66, 0x6814, 0x9084, 0x1984, 0x9085, 0x0012, 0x6816,
+	0x782b, 0x0008, 0x7003, 0x0000, 0x00fe, 0x00ee, 0x9386, 0x0002,
+	0x1128, 0x7884, 0x9005, 0x1110, 0x7887, 0x0001, 0x2001, 0x1981,
+	0x200c, 0x080c, 0x0e51, 0x004e, 0x20a9, 0x03e8, 0x6824, 0xd094,
 	0x0140, 0x6827, 0x0004, 0x7804, 0x9084, 0x4000, 0x190c, 0x2cff,
-	0x0090, 0xd084, 0x0118, 0x6827, 0x0001, 0x0010, 0x1f04, 0xa57e,
+	0x0090, 0xd08c, 0x0118, 0x6827, 0x0002, 0x0010, 0x1f04, 0xa61e,
 	0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2cef,
-	0x9006, 0x080c, 0x2cef, 0x0005, 0x0126, 0x0156, 0x00f6, 0x00e6,
-	0x00d6, 0x00c6, 0x0066, 0x0026, 0x0016, 0x0006, 0x2091, 0x8000,
-	0x2001, 0x180c, 0x200c, 0x918c, 0xdbff, 0x2102, 0x2069, 0x0100,
-	0x2079, 0x0140, 0x2071, 0x19e7, 0x703c, 0x2060, 0x8cff, 0x0904,
-	0xa62e, 0x9386, 0x0002, 0x1128, 0x6814, 0x9084, 0x0002, 0x0904,
-	0xa62e, 0x68af, 0x95f5, 0x6817, 0x0010, 0x2009, 0x00fa, 0x8109,
-	0x1df0, 0x69c6, 0x68cb, 0x0008, 0x080c, 0x855d, 0x080c, 0x1ffa,
-	0x0046, 0x2009, 0x00a5, 0x080c, 0x0e51, 0x2021, 0x0169, 0x2404,
-	0x9084, 0x000f, 0x9086, 0x0004, 0x11f8, 0x68af, 0x95f5, 0x68c6,
-	0x68cb, 0x0008, 0x00e6, 0x00f6, 0x2079, 0x0090, 0x2071, 0x1a66,
-	0x6814, 0x9084, 0x1984, 0x9085, 0x0012, 0x6816, 0x782b, 0x0008,
-	0x7003, 0x0000, 0x00fe, 0x00ee, 0x9386, 0x0002, 0x1128, 0x7884,
-	0x9005, 0x1110, 0x7887, 0x0001, 0x2001, 0x1981, 0x200c, 0x080c,
-	0x0e51, 0x004e, 0x20a9, 0x03e8, 0x6824, 0xd094, 0x0140, 0x6827,
-	0x0004, 0x7804, 0x9084, 0x4000, 0x190c, 0x2cff, 0x0090, 0xd08c,
-	0x0118, 0x6827, 0x0002, 0x0010, 0x1f04, 0xa604, 0x7804, 0x9084,
-	0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2cef, 0x9006, 0x080c,
-	0x2cef, 0x6827, 0x4000, 0x6824, 0x83ff, 0x1140, 0x2009, 0x0049,
-	0x6020, 0x9086, 0x0009, 0x0110, 0x080c, 0xaec2, 0x000e, 0x001e,
-	0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e,
-	0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, 0x19e7, 0x6a06,
-	0x012e, 0x00de, 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069,
-	0x19e7, 0x6a32, 0x012e, 0x00de, 0x0005, 0x080c, 0x9df0, 0x7854,
-	0x7032, 0x7042, 0x7047, 0x1000, 0x00f8, 0x080c, 0x9df0, 0x7854,
-	0x7032, 0x7042, 0x7047, 0x4000, 0x00b8, 0x080c, 0x9df0, 0x7854,
-	0x7032, 0x7042, 0x7047, 0x2000, 0x0078, 0x080c, 0x9df0, 0x7854,
-	0x7032, 0x7042, 0x7047, 0x0400, 0x0038, 0x080c, 0x9df0, 0x7854,
-	0x7032, 0x7042, 0x7047, 0x0200, 0x60c3, 0x0020, 0x0804, 0xa22d,
-	0x00e6, 0x2071, 0x19e7, 0x7020, 0x9005, 0x0110, 0x8001, 0x7022,
-	0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066,
-	0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19e7, 0x7614, 0x2660,
-	0x2678, 0x2039, 0x0001, 0x87ff, 0x0904, 0xa71d, 0x8cff, 0x0904,
-	0xa71d, 0x6020, 0x9086, 0x0006, 0x1904, 0xa718, 0x88ff, 0x0138,
-	0x2800, 0x9c06, 0x1904, 0xa718, 0x2039, 0x0000, 0x0050, 0x6010,
-	0x9b06, 0x1904, 0xa718, 0x85ff, 0x0120, 0x6054, 0x9106, 0x1904,
-	0xa718, 0x7024, 0x9c06, 0x15b0, 0x2069, 0x0100, 0x68c0, 0x9005,
-	0x1160, 0x6824, 0xd084, 0x0148, 0x6827, 0x0001, 0x080c, 0x8550,
-	0x080c, 0xa7a2, 0x7027, 0x0000, 0x0428, 0x080c, 0x8550, 0x6820,
-	0xd0b4, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000,
-	0x080c, 0xa7a2, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04,
+	0x9006, 0x080c, 0x2cef, 0x6827, 0x4000, 0x6824, 0x83ff, 0x1140,
+	0x2009, 0x0049, 0x6020, 0x9086, 0x0009, 0x0110, 0x080c, 0xaedc,
+	0x000e, 0x001e, 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe,
+	0x015e, 0x012e, 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069,
+	0x19e7, 0x6a06, 0x012e, 0x00de, 0x0005, 0x00d6, 0x0126, 0x2091,
+	0x8000, 0x2069, 0x19e7, 0x6a32, 0x012e, 0x00de, 0x0005, 0x080c,
+	0x9e19, 0x7854, 0x7032, 0x7042, 0x7047, 0x1000, 0x00f8, 0x080c,
+	0x9e19, 0x7854, 0x7032, 0x7042, 0x7047, 0x4000, 0x00b8, 0x080c,
+	0x9e19, 0x7854, 0x7032, 0x7042, 0x7047, 0x2000, 0x0078, 0x080c,
+	0x9e19, 0x7854, 0x7032, 0x7042, 0x7047, 0x0400, 0x0038, 0x080c,
+	0x9e19, 0x7854, 0x7032, 0x7042, 0x7047, 0x0200, 0x60c3, 0x0020,
+	0x0804, 0xa247, 0x00e6, 0x2071, 0x19e7, 0x7020, 0x9005, 0x0110,
+	0x8001, 0x7022, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6,
+	0x0076, 0x0066, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19e7,
+	0x7614, 0x2660, 0x2678, 0x2039, 0x0001, 0x87ff, 0x0904, 0xa737,
+	0x8cff, 0x0904, 0xa737, 0x6020, 0x9086, 0x0006, 0x1904, 0xa732,
+	0x88ff, 0x0138, 0x2800, 0x9c06, 0x1904, 0xa732, 0x2039, 0x0000,
+	0x0050, 0x6010, 0x9b06, 0x1904, 0xa732, 0x85ff, 0x0120, 0x6054,
+	0x9106, 0x1904, 0xa732, 0x7024, 0x9c06, 0x15b0, 0x2069, 0x0100,
+	0x68c0, 0x9005, 0x1160, 0x6824, 0xd084, 0x0148, 0x6827, 0x0001,
+	0x080c, 0x8579, 0x080c, 0xa7bc, 0x7027, 0x0000, 0x0428, 0x080c,
+	0x8579, 0x6820, 0xd0b4, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008,
+	0x68c3, 0x0000, 0x080c, 0xa7bc, 0x7027, 0x0000, 0x0036, 0x2069,
+	0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c,
+	0x2cef, 0x9006, 0x080c, 0x2cef, 0x2069, 0x0100, 0x6824, 0xd084,
+	0x0110, 0x6827, 0x0001, 0x003e, 0x7014, 0x9c36, 0x1110, 0x660c,
+	0x7616, 0x7010, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00,
+	0x7012, 0x0010, 0x7013, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06,
+	0x0110, 0x7e0e, 0x0008, 0x2678, 0x89ff, 0x1168, 0x600f, 0x0000,
+	0x6014, 0x0096, 0x2048, 0x080c, 0xcb33, 0x0110, 0x080c, 0xe551,
+	0x009e, 0x080c, 0xae92, 0x080c, 0xa692, 0x88ff, 0x1190, 0x00ce,
+	0x0804, 0xa6ad, 0x2c78, 0x600c, 0x2060, 0x0804, 0xa6ad, 0x9006,
+	0x012e, 0x000e, 0x006e, 0x007e, 0x00ce, 0x00de, 0x00ee, 0x00fe,
+	0x0005, 0x601b, 0x0000, 0x00ce, 0x98c5, 0x0001, 0x0c88, 0x00f6,
+	0x00e6, 0x00d6, 0x0096, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126,
+	0x2091, 0x8000, 0x2071, 0x19e7, 0x7638, 0x2660, 0x2678, 0x8cff,
+	0x0904, 0xa7ab, 0x6020, 0x9086, 0x0006, 0x1904, 0xa7a6, 0x87ff,
+	0x0128, 0x2700, 0x9c06, 0x1904, 0xa7a6, 0x0040, 0x6010, 0x9b06,
+	0x15e8, 0x85ff, 0x0118, 0x6054, 0x9106, 0x15c0, 0x703c, 0x9c06,
+	0x1168, 0x0036, 0x2019, 0x0001, 0x080c, 0xa5b6, 0x7033, 0x0000,
+	0x9006, 0x703e, 0x7042, 0x7046, 0x704a, 0x003e, 0x7038, 0x9c36,
+	0x1110, 0x660c, 0x763a, 0x7034, 0x9c36, 0x1140, 0x2c00, 0x9f36,
+	0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000, 0x660c, 0x0066,
+	0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000,
+	0x6014, 0x2048, 0x080c, 0xcb33, 0x0110, 0x080c, 0xe551, 0x080c,
+	0xae92, 0x87ff, 0x1198, 0x00ce, 0x0804, 0xa757, 0x2c78, 0x600c,
+	0x2060, 0x0804, 0xa757, 0x9006, 0x012e, 0x000e, 0x002e, 0x006e,
+	0x00ce, 0x009e, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601b, 0x0000,
+	0x00ce, 0x97bd, 0x0001, 0x0c80, 0x00e6, 0x2071, 0x19e7, 0x2001,
+	0x1800, 0x2004, 0x9086, 0x0002, 0x1118, 0x7007, 0x0005, 0x0010,
+	0x7007, 0x0000, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0066,
+	0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19e7, 0x2c10,
+	0x7638, 0x2660, 0x2678, 0x8cff, 0x0518, 0x2200, 0x9c06, 0x11e0,
+	0x7038, 0x9c36, 0x1110, 0x660c, 0x763a, 0x7034, 0x9c36, 0x1140,
+	0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000,
+	0x660c, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f,
+	0x0000, 0x9085, 0x0001, 0x0020, 0x2c78, 0x600c, 0x2060, 0x08d8,
+	0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x00ee, 0x00fe, 0x0005,
+	0x0096, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0006,
+	0x0126, 0x2091, 0x8000, 0x2071, 0x19e7, 0x760c, 0x2660, 0x2678,
+	0x8cff, 0x0904, 0xa898, 0x6010, 0x00b6, 0x2058, 0xb8a0, 0x00be,
+	0x9206, 0x1904, 0xa893, 0x7024, 0x9c06, 0x1520, 0x2069, 0x0100,
+	0x68c0, 0x9005, 0x0904, 0xa86f, 0x080c, 0xa273, 0x68c3, 0x0000,
+	0x080c, 0xa7bc, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04,
 	0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2cef, 0x9006,
 	0x080c, 0x2cef, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827,
-	0x0001, 0x003e, 0x7014, 0x9c36, 0x1110, 0x660c, 0x7616, 0x7010,
-	0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7012, 0x0010,
-	0x7013, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e,
-	0x0008, 0x2678, 0x89ff, 0x1168, 0x600f, 0x0000, 0x6014, 0x0096,
-	0x2048, 0x080c, 0xcb19, 0x0110, 0x080c, 0xe530, 0x009e, 0x080c,
-	0xae78, 0x080c, 0xa678, 0x88ff, 0x1190, 0x00ce, 0x0804, 0xa693,
-	0x2c78, 0x600c, 0x2060, 0x0804, 0xa693, 0x9006, 0x012e, 0x000e,
-	0x006e, 0x007e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601b,
-	0x0000, 0x00ce, 0x98c5, 0x0001, 0x0c88, 0x00f6, 0x00e6, 0x00d6,
-	0x0096, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000,
-	0x2071, 0x19e7, 0x7638, 0x2660, 0x2678, 0x8cff, 0x0904, 0xa791,
-	0x6020, 0x9086, 0x0006, 0x1904, 0xa78c, 0x87ff, 0x0128, 0x2700,
-	0x9c06, 0x1904, 0xa78c, 0x0040, 0x6010, 0x9b06, 0x15e8, 0x85ff,
-	0x0118, 0x6054, 0x9106, 0x15c0, 0x703c, 0x9c06, 0x1168, 0x0036,
-	0x2019, 0x0001, 0x080c, 0xa59c, 0x7033, 0x0000, 0x9006, 0x703e,
-	0x7042, 0x7046, 0x704a, 0x003e, 0x7038, 0x9c36, 0x1110, 0x660c,
-	0x763a, 0x7034, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00,
-	0x7036, 0x0010, 0x7037, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06,
-	0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x6014, 0x2048,
-	0x080c, 0xcb19, 0x0110, 0x080c, 0xe530, 0x080c, 0xae78, 0x87ff,
-	0x1198, 0x00ce, 0x0804, 0xa73d, 0x2c78, 0x600c, 0x2060, 0x0804,
-	0xa73d, 0x9006, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x009e,
-	0x00de, 0x00ee, 0x00fe, 0x0005, 0x601b, 0x0000, 0x00ce, 0x97bd,
-	0x0001, 0x0c80, 0x00e6, 0x2071, 0x19e7, 0x2001, 0x1800, 0x2004,
-	0x9086, 0x0002, 0x1118, 0x7007, 0x0005, 0x0010, 0x7007, 0x0000,
-	0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0066, 0x0026, 0x0006,
-	0x0126, 0x2091, 0x8000, 0x2071, 0x19e7, 0x2c10, 0x7638, 0x2660,
-	0x2678, 0x8cff, 0x0518, 0x2200, 0x9c06, 0x11e0, 0x7038, 0x9c36,
-	0x1110, 0x660c, 0x763a, 0x7034, 0x9c36, 0x1140, 0x2c00, 0x9f36,
-	0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000, 0x660c, 0x2c00,
-	0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x9085,
-	0x0001, 0x0020, 0x2c78, 0x600c, 0x2060, 0x08d8, 0x012e, 0x000e,
-	0x002e, 0x006e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0096, 0x00f6,
-	0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091,
-	0x8000, 0x2071, 0x19e7, 0x760c, 0x2660, 0x2678, 0x8cff, 0x0904,
-	0xa87e, 0x6010, 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x9206, 0x1904,
-	0xa879, 0x7024, 0x9c06, 0x1520, 0x2069, 0x0100, 0x68c0, 0x9005,
-	0x0904, 0xa855, 0x080c, 0xa259, 0x68c3, 0x0000, 0x080c, 0xa7a2,
-	0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000,
-	0x0138, 0x2001, 0x0100, 0x080c, 0x2cef, 0x9006, 0x080c, 0x2cef,
-	0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e,
-	0x700c, 0x9c36, 0x1110, 0x660c, 0x760e, 0x7008, 0x9c36, 0x1140,
-	0x2c00, 0x9f36, 0x0118, 0x2f00, 0x700a, 0x0010, 0x700b, 0x0000,
-	0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678,
-	0x600f, 0x0000, 0x080c, 0xcd10, 0x1158, 0x080c, 0x31e1, 0x080c,
-	0xcd21, 0x11f0, 0x080c, 0xb7f9, 0x00d8, 0x080c, 0xa7a2, 0x08c0,
-	0x080c, 0xcd21, 0x1118, 0x080c, 0xb7f9, 0x0090, 0x6014, 0x2048,
-	0x080c, 0xcb19, 0x0168, 0x6020, 0x9086, 0x0003, 0x1508, 0xa867,
-	0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x6c6d, 0x080c, 0xcd04,
-	0x080c, 0xcf88, 0x080c, 0xae78, 0x080c, 0xa678, 0x00ce, 0x0804,
-	0xa7fe, 0x2c78, 0x600c, 0x2060, 0x0804, 0xa7fe, 0x012e, 0x000e,
-	0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x009e, 0x0005,
-	0x6020, 0x9086, 0x0006, 0x1d20, 0x080c, 0xe530, 0x0c08, 0x00d6,
-	0x080c, 0x9c82, 0x7003, 0x0200, 0x7007, 0x0014, 0x60c3, 0x0014,
-	0x20e1, 0x0001, 0x2099, 0x1989, 0x20e9, 0x0000, 0x20a1, 0x0250,
-	0x20a9, 0x0004, 0x4003, 0x7023, 0x0004, 0x7027, 0x7878, 0x080c,
-	0xa22d, 0x00de, 0x0005, 0x080c, 0x9c82, 0x700b, 0x0800, 0x7814,
-	0x9084, 0xff00, 0x700e, 0x7814, 0x9084, 0x00ff, 0x7022, 0x782c,
-	0x7026, 0x7858, 0x9084, 0x00ff, 0x9085, 0x0200, 0x7002, 0x7858,
-	0x9084, 0xff00, 0x8007, 0x7006, 0x60c2, 0x0804, 0xa22d, 0x00b6,
-	0x00d6, 0x0016, 0x00d6, 0x2f68, 0x2009, 0x0035, 0x080c, 0xd18e,
-	0x00de, 0x1904, 0xa92c, 0x080c, 0x9c37, 0x7003, 0x1300, 0x782c,
-	0x080c, 0xaa2e, 0x2068, 0x6820, 0x9086, 0x0003, 0x0560, 0x7810,
-	0x2058, 0xbaa0, 0x080c, 0xadb1, 0x11d8, 0x9286, 0x007e, 0x1128,
-	0x700b, 0x00ff, 0x700f, 0xfffe, 0x0498, 0x9286, 0x007f, 0x1128,
-	0x700b, 0x00ff, 0x700f, 0xfffd, 0x0458, 0x9284, 0xff80, 0x0180,
-	0x9286, 0x0080, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffc, 0x0400,
-	0x92d8, 0x1000, 0x2b5c, 0xb810, 0x700a, 0xb814, 0x700e, 0x00c0,
-	0x6098, 0x700e, 0x00a8, 0x080c, 0xadb1, 0x1130, 0x7810, 0x2058,
-	0xb8a0, 0x9082, 0x007e, 0x0250, 0x00d6, 0x2069, 0x181f, 0x2d04,
-	0x700a, 0x8d68, 0x2d04, 0x700e, 0x00de, 0x0010, 0x6034, 0x700e,
-	0x7838, 0x7012, 0x783c, 0x7016, 0x60c3, 0x000c, 0x001e, 0x00de,
-	0x080c, 0xa22d, 0x00be, 0x0005, 0x781b, 0x0001, 0x7803, 0x0006,
-	0x001e, 0x00de, 0x00be, 0x0005, 0x792c, 0x9180, 0x0008, 0x200c,
-	0x9186, 0x0006, 0x01c0, 0x9186, 0x0003, 0x0904, 0xa9a6, 0x9186,
-	0x0005, 0x0904, 0xa98f, 0x9186, 0x0004, 0x05d8, 0x9186, 0x0008,
-	0x0904, 0xa997, 0x7807, 0x0037, 0x782f, 0x0003, 0x7817, 0x1700,
-	0x080c, 0xaa0b, 0x0005, 0x080c, 0xa9cc, 0x00d6, 0x0026, 0x792c,
-	0x2168, 0x2009, 0x4000, 0x6800, 0x0002, 0xa970, 0xa97b, 0xa972,
-	0xa97b, 0xa977, 0xa970, 0xa970, 0xa97b, 0xa97b, 0xa97b, 0xa97b,
-	0xa970, 0xa970, 0xa970, 0xa970, 0xa970, 0xa97b, 0xa970, 0xa97b,
-	0x080c, 0x0dd5, 0x6824, 0xd0e4, 0x0110, 0xd0cc, 0x0110, 0x900e,
-	0x0010, 0x2009, 0x2000, 0x682c, 0x7022, 0x6830, 0x7026, 0x0804,
-	0xa9c5, 0x080c, 0xa9cc, 0x00d6, 0x0026, 0x792c, 0x2168, 0x2009,
-	0x4000, 0x6a00, 0x9286, 0x0002, 0x1108, 0x900e, 0x04b0, 0x04e1,
-	0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x0470, 0x04a1,
-	0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x9286, 0x0005,
-	0x0118, 0x9286, 0x0002, 0x1108, 0x900e, 0x00f8, 0x0429, 0x00d6,
-	0x0026, 0x792c, 0x2168, 0x6814, 0x0096, 0x2048, 0xa9ac, 0xa834,
-	0x9112, 0xa9b0, 0xa838, 0x009e, 0x9103, 0x7022, 0x7226, 0x792c,
-	0x9180, 0x0000, 0x2004, 0x908e, 0x0002, 0x0130, 0x908e, 0x0004,
-	0x0118, 0x2009, 0x4000, 0x0008, 0x900e, 0x712a, 0x60c3, 0x0018,
-	0x002e, 0x00de, 0x0804, 0xa22d, 0x00b6, 0x0036, 0x0046, 0x0056,
-	0x0066, 0x080c, 0x9c82, 0x9006, 0x7003, 0x0200, 0x7938, 0x710a,
-	0x793c, 0x710e, 0x7810, 0x2058, 0xb8a0, 0x080c, 0xadb1, 0x1118,
-	0x9092, 0x007e, 0x0268, 0x00d6, 0x2069, 0x181f, 0x2d2c, 0x8d68,
-	0x2d34, 0x90d8, 0x1000, 0x2b5c, 0xbb10, 0xbc14, 0x00de, 0x0028,
-	0x901e, 0x6498, 0x2029, 0x0000, 0x6634, 0x782c, 0x9080, 0x0008,
-	0x2004, 0x9086, 0x0003, 0x1128, 0x7512, 0x7616, 0x731a, 0x741e,
-	0x0020, 0x7312, 0x7416, 0x751a, 0x761e, 0x006e, 0x005e, 0x004e,
-	0x003e, 0x00be, 0x0005, 0x080c, 0x9c82, 0x7003, 0x0100, 0x782c,
-	0x700a, 0x7814, 0x700e, 0x700e, 0x60c3, 0x0008, 0x0804, 0xa22d,
-	0x080c, 0x9c2e, 0x7003, 0x1400, 0x7838, 0x700a, 0x0079, 0x783c,
-	0x700e, 0x782c, 0x7012, 0x7830, 0x7016, 0x7834, 0x9084, 0x00ff,
-	0x8007, 0x701a, 0x60c3, 0x0010, 0x0804, 0xa22d, 0x00e6, 0x2071,
-	0x0240, 0x0006, 0x00f6, 0x2078, 0x7810, 0x00b6, 0x2058, 0xb8cc,
-	0xd084, 0x0120, 0x7848, 0x702a, 0x7844, 0x702e, 0x00be, 0x00fe,
-	0x000e, 0x00ee, 0x0005, 0x080c, 0x9c79, 0x7003, 0x0100, 0x782c,
-	0x700a, 0x7814, 0x700e, 0x60c3, 0x0008, 0x0804, 0xa22d, 0x0021,
-	0x60c3, 0x0000, 0x0804, 0xa22d, 0x00d6, 0x080c, 0xab07, 0xb810,
-	0x9085, 0x0300, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x687c,
-	0x700a, 0x6880, 0x700e, 0x7013, 0x0819, 0x080c, 0xa21b, 0x721a,
-	0x2f10, 0x7222, 0x7a08, 0x7226, 0x2071, 0x024c, 0x00de, 0x0005,
-	0x00a9, 0x7914, 0x712a, 0x60c3, 0x0000, 0x60a7, 0x9575, 0x0026,
-	0x080c, 0x2ba5, 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012,
-	0x002e, 0x080c, 0xa250, 0x080c, 0x8547, 0x0005, 0x0036, 0x0096,
-	0x00d6, 0x00e6, 0x7858, 0x2048, 0xaa7c, 0x9296, 0x00c0, 0x9294,
-	0xfffd, 0xaa7e, 0xaa80, 0x9294, 0x0300, 0xaa82, 0xa96c, 0x9194,
-	0x00ff, 0xab74, 0x9384, 0x00ff, 0x908d, 0xc200, 0xa96e, 0x9384,
-	0xff00, 0x9215, 0xaa76, 0xa870, 0xaa78, 0xa87a, 0xaa72, 0x00d6,
-	0x2069, 0x0200, 0x080c, 0xab07, 0x00de, 0x20e9, 0x0000, 0x20a1,
-	0x0240, 0x20a9, 0x000a, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x001b,
-	0x2098, 0x4003, 0x60a3, 0x0035, 0xaa68, 0x9294, 0x7000, 0x9286,
-	0x3000, 0x0110, 0x60a3, 0x0037, 0x00ee, 0x00de, 0x009e, 0x003e,
-	0x0005, 0x900e, 0x7814, 0x0096, 0x2048, 0xa87c, 0xd0fc, 0x01c0,
-	0x9084, 0x0003, 0x11a8, 0x2001, 0x180c, 0x2004, 0xd0bc, 0x0180,
-	0x7824, 0xd0cc, 0x1168, 0xd0c4, 0x1158, 0xa8a8, 0x9005, 0x1140,
-	0x2001, 0x180c, 0x200c, 0xc1d5, 0x2102, 0x2009, 0x19b2, 0x210c,
-	0x009e, 0x918d, 0x0092, 0x0010, 0x2009, 0x0096, 0x60ab, 0x0036,
-	0x6116, 0x0005, 0x2009, 0x0009, 0x00a0, 0x2009, 0x000a, 0x0088,
-	0x2009, 0x000b, 0x0070, 0x2009, 0x000c, 0x0058, 0x2009, 0x000d,
-	0x0040, 0x2009, 0x000e, 0x0028, 0x2009, 0x000f, 0x0010, 0x2009,
-	0x0008, 0x6912, 0x0005, 0x080c, 0x9c37, 0x0016, 0x0026, 0x0096,
-	0x00d6, 0x7814, 0x2048, 0x7013, 0x0138, 0x2001, 0x1837, 0x2004,
-	0x9084, 0x0028, 0x1138, 0x2001, 0x197c, 0x2004, 0x9086, 0xaaaa,
-	0x1904, 0xabac, 0x7003, 0x5400, 0x00c6, 0x2061, 0x1800, 0x607c,
-	0x9084, 0x00ff, 0xa998, 0x810f, 0x918c, 0xff00, 0x9105, 0x700a,
-	0x6080, 0x700e, 0xa998, 0x918c, 0xff00, 0x7112, 0x20a9, 0x0004,
-	0x2009, 0x1805, 0x2e10, 0x9290, 0x0006, 0x2104, 0x2012, 0x8108,
-	0x8210, 0x1f04, 0xab3d, 0x20a9, 0x0004, 0x2009, 0x1801, 0x2104,
-	0x2012, 0x8108, 0x8210, 0x1f04, 0xab47, 0xa860, 0x20e0, 0xa85c,
-	0x9080, 0x0029, 0x2098, 0x2009, 0x0006, 0x20a9, 0x0001, 0x4002,
-	0x8007, 0x2012, 0x8210, 0x8109, 0x1dc0, 0x00d6, 0x2069, 0x0200,
-	0x080c, 0xaaf2, 0x00de, 0x2071, 0x0240, 0x2011, 0x0240, 0x2009,
-	0x0002, 0x20a9, 0x0001, 0x4002, 0x8007, 0x2012, 0x8210, 0x8109,
-	0x1dc0, 0x2009, 0x0008, 0x20a9, 0x0001, 0x4002, 0x8007, 0x2012,
-	0x8210, 0x8109, 0x1dc0, 0xa85c, 0x9080, 0x0031, 0x2098, 0x2009,
-	0x0008, 0x20a9, 0x0001, 0x4002, 0x8007, 0x2012, 0x8210, 0x8109,
-	0x1dc0, 0x00ce, 0x60c3, 0x004c, 0x60a3, 0x0056, 0x60a7, 0x9575,
-	0x2001, 0x1837, 0x2004, 0x9084, 0x0028, 0x1168, 0x080c, 0x73b0,
-	0x0150, 0x6028, 0xc0bd, 0x602a, 0x6014, 0x9084, 0x1804, 0x9085,
-	0x0029, 0x6016, 0x0010, 0x080c, 0xa22d, 0x080c, 0x8547, 0x00de,
-	0x009e, 0x002e, 0x001e, 0x0005, 0x00e6, 0x2071, 0x0240, 0x2001,
-	0x2200, 0x9085, 0x00ff, 0x7002, 0x7007, 0xffff, 0x2071, 0x0100,
-	0x709b, 0x00ff, 0x00ee, 0x0804, 0xab22, 0x080c, 0x9c37, 0x0016,
-	0x0026, 0x0096, 0x00d6, 0x7814, 0x2048, 0x7013, 0x0138, 0x7003,
-	0x5500, 0x00c6, 0xa89c, 0x9084, 0x00ff, 0xa998, 0x810f, 0x918c,
-	0xff00, 0x9105, 0x700a, 0xa99c, 0x918c, 0xff00, 0xa8a0, 0x9084,
-	0x00ff, 0x9105, 0x700e, 0xa998, 0x918c, 0xff00, 0x2061, 0x1800,
-	0x607c, 0x9084, 0x00ff, 0x910d, 0x7112, 0x6180, 0x7116, 0x2009,
-	0x0008, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0029, 0x2098, 0x2e10,
-	0x9290, 0x0006, 0x20a9, 0x0001, 0x4002, 0x8007, 0x2012, 0x8210,
-	0x8109, 0x1dc0, 0x20a9, 0x0004, 0x2009, 0x1805, 0x2104, 0x2012,
-	0x8108, 0x8210, 0x1f04, 0xabfe, 0x20a9, 0x0002, 0x2009, 0x1801,
-	0x2104, 0x2012, 0x8108, 0x8210, 0x1f04, 0xac08, 0x00d6, 0x0016,
-	0x2069, 0x0200, 0x080c, 0xaaf2, 0x001e, 0x00de, 0x2071, 0x0240,
-	0x20a9, 0x0002, 0x2009, 0x1803, 0x2011, 0x0240, 0x2104, 0x2012,
-	0x8108, 0x8210, 0x1f04, 0xac1e, 0x2009, 0x0008, 0x4002, 0x8007,
-	0x2012, 0x8210, 0x8109, 0x1dd0, 0x9006, 0x20a9, 0x0008, 0x2012,
-	0x8210, 0x1f04, 0xac2f, 0x00ce, 0x60c3, 0x004c, 0x60a3, 0x0056,
-	0x60a7, 0x9575, 0x080c, 0xa22d, 0x080c, 0x8547, 0x00de, 0x009e,
-	0x002e, 0x001e, 0x0005, 0x00d6, 0x9290, 0x0018, 0x8214, 0x20e9,
-	0x0000, 0x2069, 0x0200, 0x6813, 0x0000, 0x22a8, 0x9284, 0x00e0,
-	0x0128, 0x20a9, 0x0020, 0x9292, 0x0020, 0x0008, 0x9016, 0x20a1,
-	0x0240, 0x9006, 0x4004, 0x82ff, 0x0120, 0x6810, 0x8000, 0x6812,
-	0x0c60, 0x00de, 0x0005, 0x00d6, 0x0096, 0x6014, 0x2048, 0xa878,
-	0x6056, 0x9006, 0xa836, 0xa83a, 0xa99c, 0xa946, 0xa84a, 0x6023,
-	0x0003, 0x6007, 0x0040, 0x6003, 0x0003, 0x600b, 0xffff, 0xa817,
-	0x0001, 0xa842, 0xa83e, 0x2900, 0xa85a, 0xa813, 0x208e, 0x080c,
-	0x912c, 0x0126, 0x2091, 0x8000, 0x080c, 0x9790, 0x012e, 0x009e,
-	0x00de, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x00a6, 0x0096,
-	0x0066, 0x0126, 0x2091, 0x8000, 0x2071, 0x19e7, 0x760c, 0x2660,
-	0x2678, 0x8cff, 0x0904, 0xad11, 0x7024, 0x9c06, 0x1520, 0x2069,
-	0x0100, 0x68c0, 0x9005, 0x0904, 0xace8, 0x080c, 0xa259, 0x68c3,
-	0x0000, 0x080c, 0xa7a2, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140,
-	0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2cef,
-	0x9006, 0x080c, 0x2cef, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110,
-	0x6827, 0x0001, 0x003e, 0x700c, 0x9c36, 0x1110, 0x660c, 0x760e,
-	0x7008, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x700a,
-	0x0010, 0x700b, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110,
-	0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0xcd10, 0x1158,
-	0x080c, 0x31e1, 0x080c, 0xcd21, 0x11f0, 0x080c, 0xb7f9, 0x00d8,
-	0x080c, 0xa7a2, 0x08c0, 0x080c, 0xcd21, 0x1118, 0x080c, 0xb7f9,
-	0x0090, 0x6014, 0x2048, 0x080c, 0xcb19, 0x0168, 0x6020, 0x9086,
-	0x0003, 0x1520, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c,
-	0x6c79, 0x080c, 0xcd04, 0x080c, 0xcf88, 0x080c, 0xae78, 0x080c,
-	0xa678, 0x00ce, 0x0804, 0xac99, 0x2c78, 0x600c, 0x2060, 0x0804,
-	0xac99, 0x700f, 0x0000, 0x700b, 0x0000, 0x012e, 0x006e, 0x009e,
-	0x00ae, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x6020, 0x9086,
-	0x0006, 0x1d08, 0x080c, 0xe530, 0x08f0, 0x00d6, 0x0156, 0x080c,
-	0x9c82, 0x7a14, 0x82ff, 0x0138, 0x7003, 0x0100, 0x700b, 0x0003,
-	0x60c3, 0x0008, 0x0490, 0x7003, 0x0200, 0x7007, 0x0000, 0x2069,
-	0x1800, 0x901e, 0x6800, 0x9086, 0x0004, 0x1110, 0xc38d, 0x0060,
-	0x080c, 0x73b0, 0x1110, 0xc3ad, 0x0008, 0xc3a5, 0x6adc, 0xd29c,
-	0x1110, 0xd2ac, 0x0108, 0xc39d, 0x730e, 0x080c, 0x85b0, 0x20a9,
-	0x0006, 0x2011, 0xfff4, 0x2019, 0xfff5, 0x2071, 0x0250, 0x2305,
-	0x2072, 0x8e70, 0x2205, 0x2072, 0x8e70, 0x9398, 0x0002, 0x9290,
-	0x0002, 0x1f04, 0xad57, 0x60c3, 0x0020, 0x080c, 0xa22d, 0x015e,
-	0x00de, 0x0005, 0x0156, 0x080c, 0x9c82, 0x7a14, 0x82ff, 0x0168,
-	0x9286, 0xffff, 0x0118, 0x9282, 0x000e, 0x1238, 0x7003, 0x0100,
-	0x700b, 0x0003, 0x60c3, 0x0008, 0x0488, 0x7003, 0x0200, 0x7007,
-	0x001c, 0x700f, 0x0001, 0x2011, 0x19bd, 0x2204, 0x8007, 0x701a,
-	0x8210, 0x2204, 0x8007, 0x701e, 0x0421, 0x1120, 0xb8a0, 0x9082,
-	0x007f, 0x0248, 0x2001, 0x181f, 0x2004, 0x7022, 0x2001, 0x1820,
-	0x2004, 0x7026, 0x0030, 0x2001, 0x1818, 0x2004, 0x9084, 0x00ff,
-	0x7026, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9,
-	0x0000, 0x20a1, 0x0256, 0x4003, 0x60c3, 0x001c, 0x015e, 0x0804,
-	0xa22d, 0x0006, 0x2001, 0x1837, 0x2004, 0xd0ac, 0x000e, 0x0005,
-	0x2011, 0x0003, 0x080c, 0xa639, 0x2011, 0x0002, 0x080c, 0xa643,
-	0x080c, 0xa526, 0x0036, 0x901e, 0x080c, 0xa59c, 0x003e, 0x0005,
-	0x080c, 0x3317, 0x0188, 0x0016, 0x00b6, 0x00c6, 0x7010, 0x9085,
-	0x0020, 0x7012, 0x2009, 0x007e, 0x080c, 0x6600, 0xb85c, 0xc0ac,
-	0xb85e, 0x00ce, 0x00be, 0x001e, 0x0005, 0x2071, 0x188d, 0x7000,
-	0x9005, 0x0140, 0x2001, 0x0976, 0x2071, 0x1800, 0x7076, 0x707a,
-	0x706b, 0xffe0, 0x2071, 0x1800, 0x7074, 0x7056, 0x705b, 0x1cd0,
-	0x0005, 0x00e6, 0x0126, 0x2071, 0x1800, 0x2091, 0x8000, 0x7554,
-	0x9582, 0x0010, 0x0608, 0x7058, 0x2060, 0x6000, 0x9086, 0x0000,
-	0x0148, 0x9ce0, 0x0018, 0x7068, 0x9c02, 0x1208, 0x0cb0, 0x2061,
-	0x1cd0, 0x0c98, 0x6003, 0x0008, 0x8529, 0x7556, 0x9ca8, 0x0018,
-	0x7068, 0x9502, 0x1230, 0x755a, 0x9085, 0x0001, 0x012e, 0x00ee,
-	0x0005, 0x705b, 0x1cd0, 0x0cc0, 0x9006, 0x0cc0, 0x00e6, 0x2071,
-	0x1800, 0x7554, 0x9582, 0x0010, 0x0600, 0x7058, 0x2060, 0x6000,
+	0x0001, 0x003e, 0x700c, 0x9c36, 0x1110, 0x660c, 0x760e, 0x7008,
+	0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x700a, 0x0010,
+	0x700b, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e,
+	0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0xcd2a, 0x1158, 0x080c,
+	0x31e8, 0x080c, 0xcd3b, 0x11f0, 0x080c, 0xb813, 0x00d8, 0x080c,
+	0xa7bc, 0x08c0, 0x080c, 0xcd3b, 0x1118, 0x080c, 0xb813, 0x0090,
+	0x6014, 0x2048, 0x080c, 0xcb33, 0x0168, 0x6020, 0x9086, 0x0003,
+	0x1508, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x6c75,
+	0x080c, 0xcd1e, 0x080c, 0xcfa2, 0x080c, 0xae92, 0x080c, 0xa692,
+	0x00ce, 0x0804, 0xa818, 0x2c78, 0x600c, 0x2060, 0x0804, 0xa818,
+	0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe,
+	0x009e, 0x0005, 0x6020, 0x9086, 0x0006, 0x1d20, 0x080c, 0xe551,
+	0x0c08, 0x00d6, 0x080c, 0x9cab, 0x7003, 0x0200, 0x7007, 0x0014,
+	0x60c3, 0x0014, 0x20e1, 0x0001, 0x2099, 0x1989, 0x20e9, 0x0000,
+	0x20a1, 0x0250, 0x20a9, 0x0004, 0x4003, 0x7023, 0x0004, 0x7027,
+	0x7878, 0x080c, 0xa247, 0x00de, 0x0005, 0x080c, 0x9cab, 0x700b,
+	0x0800, 0x7814, 0x9084, 0xff00, 0x700e, 0x7814, 0x9084, 0x00ff,
+	0x7022, 0x782c, 0x7026, 0x7858, 0x9084, 0x00ff, 0x9085, 0x0200,
+	0x7002, 0x7858, 0x9084, 0xff00, 0x8007, 0x7006, 0x60c2, 0x0804,
+	0xa247, 0x00b6, 0x00d6, 0x0016, 0x00d6, 0x2f68, 0x2009, 0x0035,
+	0x080c, 0xd1a8, 0x00de, 0x1904, 0xa946, 0x080c, 0x9c60, 0x7003,
+	0x1300, 0x782c, 0x080c, 0xaa48, 0x2068, 0x6820, 0x9086, 0x0003,
+	0x0560, 0x7810, 0x2058, 0xbaa0, 0x080c, 0xadcb, 0x11d8, 0x9286,
+	0x007e, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffe, 0x0498, 0x9286,
+	0x007f, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffd, 0x0458, 0x9284,
+	0xff80, 0x0180, 0x9286, 0x0080, 0x1128, 0x700b, 0x00ff, 0x700f,
+	0xfffc, 0x0400, 0x92d8, 0x1000, 0x2b5c, 0xb810, 0x700a, 0xb814,
+	0x700e, 0x00c0, 0x6098, 0x700e, 0x00a8, 0x080c, 0xadcb, 0x1130,
+	0x7810, 0x2058, 0xb8a0, 0x9082, 0x007e, 0x0250, 0x00d6, 0x2069,
+	0x181f, 0x2d04, 0x700a, 0x8d68, 0x2d04, 0x700e, 0x00de, 0x0010,
+	0x6034, 0x700e, 0x7838, 0x7012, 0x783c, 0x7016, 0x60c3, 0x000c,
+	0x001e, 0x00de, 0x080c, 0xa247, 0x00be, 0x0005, 0x781b, 0x0001,
+	0x7803, 0x0006, 0x001e, 0x00de, 0x00be, 0x0005, 0x792c, 0x9180,
+	0x0008, 0x200c, 0x9186, 0x0006, 0x01c0, 0x9186, 0x0003, 0x0904,
+	0xa9c0, 0x9186, 0x0005, 0x0904, 0xa9a9, 0x9186, 0x0004, 0x05d8,
+	0x9186, 0x0008, 0x0904, 0xa9b1, 0x7807, 0x0037, 0x782f, 0x0003,
+	0x7817, 0x1700, 0x080c, 0xaa25, 0x0005, 0x080c, 0xa9e6, 0x00d6,
+	0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x6800, 0x0002, 0xa98a,
+	0xa995, 0xa98c, 0xa995, 0xa991, 0xa98a, 0xa98a, 0xa995, 0xa995,
+	0xa995, 0xa995, 0xa98a, 0xa98a, 0xa98a, 0xa98a, 0xa98a, 0xa995,
+	0xa98a, 0xa995, 0x080c, 0x0dd5, 0x6824, 0xd0e4, 0x0110, 0xd0cc,
+	0x0110, 0x900e, 0x0010, 0x2009, 0x2000, 0x682c, 0x7022, 0x6830,
+	0x7026, 0x0804, 0xa9df, 0x080c, 0xa9e6, 0x00d6, 0x0026, 0x792c,
+	0x2168, 0x2009, 0x4000, 0x6a00, 0x9286, 0x0002, 0x1108, 0x900e,
+	0x04b0, 0x04e1, 0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000,
+	0x0470, 0x04a1, 0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000,
+	0x9286, 0x0005, 0x0118, 0x9286, 0x0002, 0x1108, 0x900e, 0x00f8,
+	0x0429, 0x00d6, 0x0026, 0x792c, 0x2168, 0x6814, 0x0096, 0x2048,
+	0xa9ac, 0xa834, 0x9112, 0xa9b0, 0xa838, 0x009e, 0x9103, 0x7022,
+	0x7226, 0x792c, 0x9180, 0x0000, 0x2004, 0x908e, 0x0002, 0x0130,
+	0x908e, 0x0004, 0x0118, 0x2009, 0x4000, 0x0008, 0x900e, 0x712a,
+	0x60c3, 0x0018, 0x002e, 0x00de, 0x0804, 0xa247, 0x00b6, 0x0036,
+	0x0046, 0x0056, 0x0066, 0x080c, 0x9cab, 0x9006, 0x7003, 0x0200,
+	0x7938, 0x710a, 0x793c, 0x710e, 0x7810, 0x2058, 0xb8a0, 0x080c,
+	0xadcb, 0x1118, 0x9092, 0x007e, 0x0268, 0x00d6, 0x2069, 0x181f,
+	0x2d2c, 0x8d68, 0x2d34, 0x90d8, 0x1000, 0x2b5c, 0xbb10, 0xbc14,
+	0x00de, 0x0028, 0x901e, 0x6498, 0x2029, 0x0000, 0x6634, 0x782c,
+	0x9080, 0x0008, 0x2004, 0x9086, 0x0003, 0x1128, 0x7512, 0x7616,
+	0x731a, 0x741e, 0x0020, 0x7312, 0x7416, 0x751a, 0x761e, 0x006e,
+	0x005e, 0x004e, 0x003e, 0x00be, 0x0005, 0x080c, 0x9cab, 0x7003,
+	0x0100, 0x782c, 0x700a, 0x7814, 0x700e, 0x700e, 0x60c3, 0x0008,
+	0x0804, 0xa247, 0x080c, 0x9c57, 0x7003, 0x1400, 0x7838, 0x700a,
+	0x0079, 0x783c, 0x700e, 0x782c, 0x7012, 0x7830, 0x7016, 0x7834,
+	0x9084, 0x00ff, 0x8007, 0x701a, 0x60c3, 0x0010, 0x0804, 0xa247,
+	0x00e6, 0x2071, 0x0240, 0x0006, 0x00f6, 0x2078, 0x7810, 0x00b6,
+	0x2058, 0xb8cc, 0xd084, 0x0120, 0x7848, 0x702a, 0x7844, 0x702e,
+	0x00be, 0x00fe, 0x000e, 0x00ee, 0x0005, 0x080c, 0x9ca2, 0x7003,
+	0x0100, 0x782c, 0x700a, 0x7814, 0x700e, 0x60c3, 0x0008, 0x0804,
+	0xa247, 0x0021, 0x60c3, 0x0000, 0x0804, 0xa247, 0x00d6, 0x080c,
+	0xab21, 0xb810, 0x9085, 0x0300, 0x7002, 0xb814, 0x7006, 0x2069,
+	0x1800, 0x687c, 0x700a, 0x6880, 0x700e, 0x7013, 0x0819, 0x080c,
+	0xa235, 0x721a, 0x2f10, 0x7222, 0x7a08, 0x7226, 0x2071, 0x024c,
+	0x00de, 0x0005, 0x00a9, 0x7914, 0x712a, 0x60c3, 0x0000, 0x60a7,
+	0x9575, 0x0026, 0x080c, 0x2ba5, 0x0228, 0x2011, 0x0101, 0x2204,
+	0xc0c5, 0x2012, 0x002e, 0x080c, 0xa26a, 0x080c, 0x8570, 0x0005,
+	0x0036, 0x0096, 0x00d6, 0x00e6, 0x7858, 0x2048, 0xaa7c, 0x9296,
+	0x00c0, 0x9294, 0xfffd, 0xaa7e, 0xaa80, 0x9294, 0x0300, 0xaa82,
+	0xa96c, 0x9194, 0x00ff, 0xab74, 0x9384, 0x00ff, 0x908d, 0xc200,
+	0xa96e, 0x9384, 0xff00, 0x9215, 0xaa76, 0xa870, 0xaa78, 0xa87a,
+	0xaa72, 0x00d6, 0x2069, 0x0200, 0x080c, 0xab21, 0x00de, 0x20e9,
+	0x0000, 0x20a1, 0x0240, 0x20a9, 0x000a, 0xa860, 0x20e0, 0xa85c,
+	0x9080, 0x001b, 0x2098, 0x4003, 0x60a3, 0x0035, 0xaa68, 0x9294,
+	0x7000, 0x9286, 0x3000, 0x0110, 0x60a3, 0x0037, 0x00ee, 0x00de,
+	0x009e, 0x003e, 0x0005, 0x900e, 0x7814, 0x0096, 0x2048, 0xa87c,
+	0xd0fc, 0x01c0, 0x9084, 0x0003, 0x11a8, 0x2001, 0x180c, 0x2004,
+	0xd0bc, 0x0180, 0x7824, 0xd0cc, 0x1168, 0xd0c4, 0x1158, 0xa8a8,
+	0x9005, 0x1140, 0x2001, 0x180c, 0x200c, 0xc1d5, 0x2102, 0x2009,
+	0x19b2, 0x210c, 0x009e, 0x918d, 0x0092, 0x0010, 0x2009, 0x0096,
+	0x60ab, 0x0036, 0x6116, 0x0005, 0x2009, 0x0009, 0x00a0, 0x2009,
+	0x000a, 0x0088, 0x2009, 0x000b, 0x0070, 0x2009, 0x000c, 0x0058,
+	0x2009, 0x000d, 0x0040, 0x2009, 0x000e, 0x0028, 0x2009, 0x000f,
+	0x0010, 0x2009, 0x0008, 0x6912, 0x0005, 0x080c, 0x9c60, 0x0016,
+	0x0026, 0x0096, 0x00d6, 0x7814, 0x2048, 0x7013, 0x0138, 0x2001,
+	0x1837, 0x2004, 0x9084, 0x0028, 0x1138, 0x2001, 0x197c, 0x2004,
+	0x9086, 0xaaaa, 0x1904, 0xabc6, 0x7003, 0x5400, 0x00c6, 0x2061,
+	0x1800, 0x607c, 0x9084, 0x00ff, 0xa998, 0x810f, 0x918c, 0xff00,
+	0x9105, 0x700a, 0x6080, 0x700e, 0xa998, 0x918c, 0xff00, 0x7112,
+	0x20a9, 0x0004, 0x2009, 0x1805, 0x2e10, 0x9290, 0x0006, 0x2104,
+	0x2012, 0x8108, 0x8210, 0x1f04, 0xab57, 0x20a9, 0x0004, 0x2009,
+	0x1801, 0x2104, 0x2012, 0x8108, 0x8210, 0x1f04, 0xab61, 0xa860,
+	0x20e0, 0xa85c, 0x9080, 0x0029, 0x2098, 0x2009, 0x0006, 0x20a9,
+	0x0001, 0x4002, 0x8007, 0x2012, 0x8210, 0x8109, 0x1dc0, 0x00d6,
+	0x2069, 0x0200, 0x080c, 0xab0c, 0x00de, 0x2071, 0x0240, 0x2011,
+	0x0240, 0x2009, 0x0002, 0x20a9, 0x0001, 0x4002, 0x8007, 0x2012,
+	0x8210, 0x8109, 0x1dc0, 0x2009, 0x0008, 0x20a9, 0x0001, 0x4002,
+	0x8007, 0x2012, 0x8210, 0x8109, 0x1dc0, 0xa85c, 0x9080, 0x0031,
+	0x2098, 0x2009, 0x0008, 0x20a9, 0x0001, 0x4002, 0x8007, 0x2012,
+	0x8210, 0x8109, 0x1dc0, 0x00ce, 0x60c3, 0x004c, 0x60a3, 0x0056,
+	0x60a7, 0x9575, 0x2001, 0x1837, 0x2004, 0x9084, 0x0028, 0x1168,
+	0x080c, 0x73bc, 0x0150, 0x6028, 0xc0bd, 0x602a, 0x6014, 0x9084,
+	0x1804, 0x9085, 0x0029, 0x6016, 0x0010, 0x080c, 0xa247, 0x080c,
+	0x8570, 0x00de, 0x009e, 0x002e, 0x001e, 0x0005, 0x00e6, 0x2071,
+	0x0240, 0x2001, 0x2200, 0x9085, 0x00ff, 0x7002, 0x7007, 0xffff,
+	0x2071, 0x0100, 0x709b, 0x00ff, 0x00ee, 0x0804, 0xab3c, 0x080c,
+	0x9c60, 0x0016, 0x0026, 0x0096, 0x00d6, 0x7814, 0x2048, 0x7013,
+	0x0138, 0x7003, 0x5500, 0x00c6, 0xa89c, 0x9084, 0x00ff, 0xa998,
+	0x810f, 0x918c, 0xff00, 0x9105, 0x700a, 0xa99c, 0x918c, 0xff00,
+	0xa8a0, 0x9084, 0x00ff, 0x9105, 0x700e, 0xa998, 0x918c, 0xff00,
+	0x2061, 0x1800, 0x607c, 0x9084, 0x00ff, 0x910d, 0x7112, 0x6180,
+	0x7116, 0x2009, 0x0008, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0029,
+	0x2098, 0x2e10, 0x9290, 0x0006, 0x20a9, 0x0001, 0x4002, 0x8007,
+	0x2012, 0x8210, 0x8109, 0x1dc0, 0x20a9, 0x0004, 0x2009, 0x1805,
+	0x2104, 0x2012, 0x8108, 0x8210, 0x1f04, 0xac18, 0x20a9, 0x0002,
+	0x2009, 0x1801, 0x2104, 0x2012, 0x8108, 0x8210, 0x1f04, 0xac22,
+	0x00d6, 0x0016, 0x2069, 0x0200, 0x080c, 0xab0c, 0x001e, 0x00de,
+	0x2071, 0x0240, 0x20a9, 0x0002, 0x2009, 0x1803, 0x2011, 0x0240,
+	0x2104, 0x2012, 0x8108, 0x8210, 0x1f04, 0xac38, 0x2009, 0x0008,
+	0x4002, 0x8007, 0x2012, 0x8210, 0x8109, 0x1dd0, 0x9006, 0x20a9,
+	0x0008, 0x2012, 0x8210, 0x1f04, 0xac49, 0x00ce, 0x60c3, 0x004c,
+	0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0xa247, 0x080c, 0x8570,
+	0x00de, 0x009e, 0x002e, 0x001e, 0x0005, 0x00d6, 0x9290, 0x0018,
+	0x8214, 0x20e9, 0x0000, 0x2069, 0x0200, 0x6813, 0x0000, 0x22a8,
+	0x9284, 0x00e0, 0x0128, 0x20a9, 0x0020, 0x9292, 0x0020, 0x0008,
+	0x9016, 0x20a1, 0x0240, 0x9006, 0x4004, 0x82ff, 0x0120, 0x6810,
+	0x8000, 0x6812, 0x0c60, 0x00de, 0x0005, 0x00d6, 0x0096, 0x6014,
+	0x2048, 0xa878, 0x6056, 0x9006, 0xa836, 0xa83a, 0xa99c, 0xa946,
+	0xa84a, 0x6023, 0x0003, 0x6007, 0x0040, 0x6003, 0x0003, 0x600b,
+	0xffff, 0xa817, 0x0001, 0xa842, 0xa83e, 0x2900, 0xa85a, 0xa813,
+	0x208e, 0x080c, 0x9155, 0x0126, 0x2091, 0x8000, 0x080c, 0x97b9,
+	0x012e, 0x009e, 0x00de, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6,
+	0x00a6, 0x0096, 0x0066, 0x0126, 0x2091, 0x8000, 0x2071, 0x19e7,
+	0x760c, 0x2660, 0x2678, 0x8cff, 0x0904, 0xad2b, 0x7024, 0x9c06,
+	0x1520, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, 0xad02, 0x080c,
+	0xa273, 0x68c3, 0x0000, 0x080c, 0xa7bc, 0x7027, 0x0000, 0x0036,
+	0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100,
+	0x080c, 0x2cef, 0x9006, 0x080c, 0x2cef, 0x2069, 0x0100, 0x6824,
+	0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x700c, 0x9c36, 0x1110,
+	0x660c, 0x760e, 0x7008, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118,
+	0x2f00, 0x700a, 0x0010, 0x700b, 0x0000, 0x660c, 0x0066, 0x2c00,
+	0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c,
+	0xcd2a, 0x1158, 0x080c, 0x31e8, 0x080c, 0xcd3b, 0x11f0, 0x080c,
+	0xb813, 0x00d8, 0x080c, 0xa7bc, 0x08c0, 0x080c, 0xcd3b, 0x1118,
+	0x080c, 0xb813, 0x0090, 0x6014, 0x2048, 0x080c, 0xcb33, 0x0168,
+	0x6020, 0x9086, 0x0003, 0x1520, 0xa867, 0x0103, 0xab7a, 0xa877,
+	0x0000, 0x080c, 0x6c81, 0x080c, 0xcd1e, 0x080c, 0xcfa2, 0x080c,
+	0xae92, 0x080c, 0xa692, 0x00ce, 0x0804, 0xacb3, 0x2c78, 0x600c,
+	0x2060, 0x0804, 0xacb3, 0x700f, 0x0000, 0x700b, 0x0000, 0x012e,
+	0x006e, 0x009e, 0x00ae, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005,
+	0x6020, 0x9086, 0x0006, 0x1d08, 0x080c, 0xe551, 0x08f0, 0x00d6,
+	0x0156, 0x080c, 0x9cab, 0x7a14, 0x82ff, 0x0138, 0x7003, 0x0100,
+	0x700b, 0x0003, 0x60c3, 0x0008, 0x0490, 0x7003, 0x0200, 0x7007,
+	0x0000, 0x2069, 0x1800, 0x901e, 0x6800, 0x9086, 0x0004, 0x1110,
+	0xc38d, 0x0060, 0x080c, 0x73bc, 0x1110, 0xc3ad, 0x0008, 0xc3a5,
+	0x6adc, 0xd29c, 0x1110, 0xd2ac, 0x0108, 0xc39d, 0x730e, 0x080c,
+	0x85d9, 0x20a9, 0x0006, 0x2011, 0xfff4, 0x2019, 0xfff5, 0x2071,
+	0x0250, 0x2305, 0x2072, 0x8e70, 0x2205, 0x2072, 0x8e70, 0x9398,
+	0x0002, 0x9290, 0x0002, 0x1f04, 0xad71, 0x60c3, 0x0020, 0x080c,
+	0xa247, 0x015e, 0x00de, 0x0005, 0x0156, 0x080c, 0x9cab, 0x7a14,
+	0x82ff, 0x0168, 0x9286, 0xffff, 0x0118, 0x9282, 0x000e, 0x1238,
+	0x7003, 0x0100, 0x700b, 0x0003, 0x60c3, 0x0008, 0x0488, 0x7003,
+	0x0200, 0x7007, 0x001c, 0x700f, 0x0001, 0x2011, 0x19bd, 0x2204,
+	0x8007, 0x701a, 0x8210, 0x2204, 0x8007, 0x701e, 0x0421, 0x1120,
+	0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001, 0x181f, 0x2004, 0x7022,
+	0x2001, 0x1820, 0x2004, 0x7026, 0x0030, 0x2001, 0x1818, 0x2004,
+	0x9084, 0x00ff, 0x7026, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099,
+	0x1805, 0x20e9, 0x0000, 0x20a1, 0x0256, 0x4003, 0x60c3, 0x001c,
+	0x015e, 0x0804, 0xa247, 0x0006, 0x2001, 0x1837, 0x2004, 0xd0ac,
+	0x000e, 0x0005, 0x2011, 0x0003, 0x080c, 0xa653, 0x2011, 0x0002,
+	0x080c, 0xa65d, 0x080c, 0xa540, 0x0036, 0x901e, 0x080c, 0xa5b6,
+	0x003e, 0x0005, 0x080c, 0x331e, 0x0188, 0x0016, 0x00b6, 0x00c6,
+	0x7010, 0x9085, 0x0020, 0x7012, 0x2009, 0x007e, 0x080c, 0x65ff,
+	0xb85c, 0xc0ac, 0xb85e, 0x00ce, 0x00be, 0x001e, 0x0005, 0x2071,
+	0x188d, 0x7000, 0x9005, 0x0140, 0x2001, 0x0976, 0x2071, 0x1800,
+	0x7076, 0x707a, 0x706b, 0xffe0, 0x2071, 0x1800, 0x7074, 0x7056,
+	0x705b, 0x1cd0, 0x0005, 0x00e6, 0x0126, 0x2071, 0x1800, 0x2091,
+	0x8000, 0x7554, 0x9582, 0x0010, 0x0608, 0x7058, 0x2060, 0x6000,
 	0x9086, 0x0000, 0x0148, 0x9ce0, 0x0018, 0x7068, 0x9c02, 0x1208,
 	0x0cb0, 0x2061, 0x1cd0, 0x0c98, 0x6003, 0x0008, 0x8529, 0x7556,
-	0x9ca8, 0x0018, 0x7068, 0x9502, 0x1228, 0x755a, 0x9085, 0x0001,
-	0x00ee, 0x0005, 0x705b, 0x1cd0, 0x0cc8, 0x9006, 0x0cc8, 0x9c82,
-	0x1cd0, 0x0a0c, 0x0dd5, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1a0c,
-	0x0dd5, 0x9006, 0x6006, 0x600a, 0x600e, 0x6016, 0x601a, 0x6012,
-	0x6023, 0x0000, 0x6003, 0x0000, 0x601e, 0x6056, 0x605a, 0x6026,
-	0x602a, 0x602e, 0x6032, 0x6036, 0x603a, 0x603e, 0x6042, 0x602a,
-	0x2061, 0x1800, 0x6054, 0x8000, 0x6056, 0x9086, 0x0001, 0x0108,
-	0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x9664, 0x012e, 0x0cc0,
-	0x0006, 0x6000, 0x9086, 0x0000, 0x01b0, 0x601c, 0xd084, 0x190c,
-	0x1a5e, 0x6017, 0x0000, 0x6023, 0x0007, 0x2001, 0x1986, 0x2004,
-	0x0006, 0x9082, 0x0051, 0x000e, 0x0208, 0x8004, 0x601a, 0x080c,
-	0xe7ea, 0x6043, 0x0000, 0x000e, 0x0005, 0x00e6, 0x0126, 0x2071,
-	0x1800, 0x2091, 0x8000, 0x7554, 0x9582, 0x0001, 0x0608, 0x7058,
+	0x9ca8, 0x0018, 0x7068, 0x9502, 0x1230, 0x755a, 0x9085, 0x0001,
+	0x012e, 0x00ee, 0x0005, 0x705b, 0x1cd0, 0x0cc0, 0x9006, 0x0cc0,
+	0x00e6, 0x2071, 0x1800, 0x7554, 0x9582, 0x0010, 0x0600, 0x7058,
 	0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, 0x0018, 0x7068,
 	0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1cd0, 0x0c98, 0x6003, 0x0008,
-	0x8529, 0x7556, 0x9ca8, 0x0018, 0x7068, 0x9502, 0x1230, 0x755a,
-	0x9085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x705b, 0x1cd0, 0x0cc0,
-	0x9006, 0x0cc0, 0x6020, 0x9084, 0x000f, 0x0002, 0xaed5, 0xaede,
-	0xaef9, 0xaf14, 0xd23c, 0xd259, 0xd274, 0xaed5, 0xaede, 0x8d62,
-	0xaf30, 0xaed5, 0xaed5, 0xaed5, 0xaed5, 0x9186, 0x0013, 0x1128,
-	0x080c, 0x955f, 0x080c, 0x9664, 0x0005, 0x0005, 0x0066, 0x6000,
-	0x90b2, 0x0016, 0x1a0c, 0x0dd5, 0x0013, 0x006e, 0x0005, 0xaef7,
-	0xb665, 0xb840, 0xaef7, 0xb8d6, 0xb213, 0xaef7, 0xaef7, 0xb5e7,
-	0xbe3b, 0xaef7, 0xaef7, 0xaef7, 0xaef7, 0xaef7, 0xaef7, 0x080c,
-	0x0dd5, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0dd5, 0x0013,
-	0x006e, 0x0005, 0xaf12, 0xc50f, 0xaf12, 0xaf12, 0xaf12, 0xaf12,
-	0xaf12, 0xaf12, 0xc4b4, 0xc691, 0xaf12, 0xc550, 0xc5cf, 0xc550,
-	0xc5cf, 0xaf12, 0x080c, 0x0dd5, 0x6000, 0x9082, 0x0016, 0x1a0c,
-	0x0dd5, 0x6000, 0x0002, 0xaf2e, 0xbe82, 0xbf67, 0xc097, 0xc242,
-	0xaf2e, 0xaf2e, 0xaf2e, 0xbe56, 0xc440, 0xc443, 0xaf2e, 0xaf2e,
-	0xaf2e, 0xaf2e, 0xc472, 0xaf2e, 0xaf2e, 0xaf2e, 0x080c, 0x0dd5,
+	0x8529, 0x7556, 0x9ca8, 0x0018, 0x7068, 0x9502, 0x1228, 0x755a,
+	0x9085, 0x0001, 0x00ee, 0x0005, 0x705b, 0x1cd0, 0x0cc8, 0x9006,
+	0x0cc8, 0x9c82, 0x1cd0, 0x0a0c, 0x0dd5, 0x2001, 0x181a, 0x2004,
+	0x9c02, 0x1a0c, 0x0dd5, 0x9006, 0x6006, 0x600a, 0x600e, 0x6016,
+	0x601a, 0x6012, 0x6023, 0x0000, 0x6003, 0x0000, 0x601e, 0x6056,
+	0x605a, 0x6026, 0x602a, 0x602e, 0x6032, 0x6036, 0x603a, 0x603e,
+	0x6042, 0x602a, 0x2061, 0x1800, 0x6054, 0x8000, 0x6056, 0x9086,
+	0x0001, 0x0108, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x968d,
+	0x012e, 0x0cc0, 0x0006, 0x6000, 0x9086, 0x0000, 0x01b0, 0x601c,
+	0xd084, 0x190c, 0x1a5e, 0x6017, 0x0000, 0x6023, 0x0007, 0x2001,
+	0x1986, 0x2004, 0x0006, 0x9082, 0x0051, 0x000e, 0x0208, 0x8004,
+	0x601a, 0x080c, 0xe80b, 0x6043, 0x0000, 0x000e, 0x0005, 0x00e6,
+	0x0126, 0x2071, 0x1800, 0x2091, 0x8000, 0x7554, 0x9582, 0x0001,
+	0x0608, 0x7058, 0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0,
+	0x0018, 0x7068, 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1cd0, 0x0c98,
+	0x6003, 0x0008, 0x8529, 0x7556, 0x9ca8, 0x0018, 0x7068, 0x9502,
+	0x1230, 0x755a, 0x9085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x705b,
+	0x1cd0, 0x0cc0, 0x9006, 0x0cc0, 0x6020, 0x9084, 0x000f, 0x0002,
+	0xaeef, 0xaef8, 0xaf13, 0xaf2e, 0xd256, 0xd273, 0xd28e, 0xaeef,
+	0xaef8, 0x8d8b, 0xaf4a, 0xaeef, 0xaeef, 0xaeef, 0xaeef, 0x9186,
+	0x0013, 0x1128, 0x080c, 0x9588, 0x080c, 0x968d, 0x0005, 0x0005,
 	0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0dd5, 0x0013, 0x006e,
-	0x0005, 0xaf49, 0xaf49, 0xaf8c, 0xb02b, 0xb0c0, 0xaf49, 0xaf49,
-	0xaf49, 0xaf4b, 0xaf49, 0xaf49, 0xaf49, 0xaf49, 0xaf49, 0xaf49,
-	0xaf49, 0x080c, 0x0dd5, 0x9186, 0x004c, 0x0588, 0x9186, 0x0003,
-	0x190c, 0x0dd5, 0x0096, 0x601c, 0xc0ed, 0x601e, 0x6003, 0x0003,
-	0x6106, 0x6014, 0x2048, 0xa87c, 0x9084, 0xa000, 0xc0b5, 0xa87e,
-	0xa8ac, 0xa846, 0xa8b0, 0xa84a, 0x9006, 0xa836, 0xa83a, 0xa884,
-	0x9092, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x8013, 0x8213,
-	0x9210, 0x621a, 0x009e, 0x2c10, 0x080c, 0x1bad, 0x080c, 0x912c,
-	0x0126, 0x2091, 0x8000, 0x080c, 0x9790, 0x012e, 0x0005, 0x6010,
-	0x00b6, 0x2058, 0xbca0, 0x00be, 0x2c00, 0x080c, 0xb0e2, 0x080c,
-	0xd22e, 0x6003, 0x0007, 0x0005, 0x00d6, 0x0096, 0x00f6, 0x2079,
-	0x1800, 0x7a90, 0x6014, 0x2048, 0xa87c, 0xd0ec, 0x1110, 0x9290,
-	0x0018, 0xac78, 0xc4fc, 0x0046, 0xa8e0, 0x9005, 0x1140, 0xa8dc,
-	0x921a, 0x0140, 0x0220, 0xa87b, 0x0007, 0x2010, 0x0028, 0xa87b,
-	0x0015, 0x0010, 0xa87b, 0x0000, 0x8214, 0xa883, 0x0000, 0xaa02,
-	0x0006, 0x0016, 0x0026, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2400,
-	0x9005, 0x1108, 0x009a, 0x2100, 0x9086, 0x0015, 0x1118, 0x2001,
-	0x0001, 0x0038, 0x2100, 0x9086, 0x0016, 0x0118, 0x2001, 0x0001,
-	0x002a, 0x94a4, 0x0007, 0x8423, 0x9405, 0x0002, 0xaff3, 0xaff3,
-	0xafee, 0xaff1, 0xaff3, 0xafeb, 0xafde, 0xafde, 0xafde, 0xafde,
-	0xafde, 0xafde, 0xafde, 0xafde, 0xafde, 0xafde, 0x00fe, 0x00ee,
-	0x00de, 0x00ce, 0x002e, 0x001e, 0x000e, 0x004e, 0x00fe, 0x009e,
-	0x00de, 0x080c, 0x0dd5, 0x080c, 0xba93, 0x0028, 0x080c, 0xbb78,
-	0x0010, 0x080c, 0xbc6e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x002e,
-	0x001e, 0x2c00, 0xa896, 0x000e, 0x080c, 0xb1a0, 0x0530, 0xa804,
-	0xa80e, 0x00a6, 0x2050, 0xb100, 0x00ae, 0x8006, 0x8006, 0x8007,
-	0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0xaacc, 0xabd0,
-	0xacd4, 0xadd8, 0x2031, 0x0000, 0x2041, 0x125d, 0x080c, 0xb360,
-	0x0160, 0x000e, 0x9005, 0x0120, 0x00fe, 0x009e, 0x00de, 0x0005,
-	0x00fe, 0x009e, 0x00de, 0x0804, 0xae47, 0x2001, 0x002c, 0x900e,
-	0x080c, 0xb206, 0x0c70, 0x91b6, 0x0015, 0x0170, 0x91b6, 0x0016,
-	0x0158, 0x91b2, 0x0047, 0x0a0c, 0x0dd5, 0x91b2, 0x0050, 0x1a0c,
-	0x0dd5, 0x9182, 0x0047, 0x00ca, 0x2001, 0x0109, 0x2004, 0xd08c,
-	0x0198, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026, 0x080c,
-	0x9079, 0x002e, 0x001e, 0x000e, 0x012e, 0xa001, 0x6000, 0x9086,
-	0x0002, 0x1110, 0x0804, 0xaf8c, 0x0005, 0xb05e, 0xb05e, 0xb060,
-	0xb096, 0xb05e, 0xb05e, 0xb05e, 0xb05e, 0xb0a9, 0x080c, 0x0dd5,
-	0x00d6, 0x0016, 0x0096, 0x080c, 0x9614, 0x080c, 0x9790, 0x6003,
-	0x0004, 0x6114, 0x2148, 0xa87c, 0xd0fc, 0x01c0, 0xa878, 0xc0fc,
-	0x9005, 0x1158, 0xa894, 0x9005, 0x0140, 0x2001, 0x0000, 0x900e,
-	0x080c, 0xb206, 0x080c, 0xae47, 0x00a8, 0x6003, 0x0002, 0xa8a4,
-	0xa9a8, 0x9105, 0x1178, 0xa8ae, 0xa8b2, 0x0c78, 0xa87f, 0x0020,
-	0xa88c, 0xa88a, 0xa8a4, 0xa8ae, 0xa8a8, 0xa8b2, 0xa8c7, 0x0000,
-	0xa8cb, 0x0000, 0x009e, 0x001e, 0x00de, 0x0005, 0x080c, 0x9614,
-	0x00d6, 0x0096, 0x6114, 0x2148, 0x080c, 0xcb1b, 0x0120, 0xa87b,
-	0x0006, 0x080c, 0x6c79, 0x009e, 0x00de, 0x080c, 0xae47, 0x0804,
-	0x9790, 0x080c, 0x9614, 0x080c, 0x31bc, 0x080c, 0xd22b, 0x00d6,
-	0x0096, 0x6114, 0x2148, 0x080c, 0xcb1b, 0x0120, 0xa87b, 0x0029,
-	0x080c, 0x6c79, 0x009e, 0x00de, 0x080c, 0xae47, 0x0804, 0x9790,
-	0x9182, 0x0047, 0x0002, 0xb0d0, 0xb0d2, 0xb0d0, 0xb0d0, 0xb0d0,
-	0xb0d0, 0xb0d0, 0xb0d0, 0xb0d0, 0xb0d0, 0xb0d0, 0xb0d0, 0xb0d2,
-	0x080c, 0x0dd5, 0x00d6, 0x0096, 0x601f, 0x0000, 0x6114, 0x2148,
-	0xa87b, 0x0000, 0xa883, 0x0000, 0x080c, 0x6c79, 0x009e, 0x00de,
-	0x0804, 0xae47, 0x0026, 0x0036, 0x0056, 0x0066, 0x0096, 0x00a6,
-	0x00f6, 0x0006, 0x080c, 0x0fff, 0x000e, 0x090c, 0x0dd5, 0xa960,
-	0x21e8, 0xa95c, 0x9188, 0x0019, 0x21a0, 0x900e, 0x20a9, 0x0020,
-	0x4104, 0xa87a, 0x2079, 0x1800, 0x7990, 0x9188, 0x0018, 0x918c,
-	0x0fff, 0xa972, 0xac76, 0x2950, 0x00a6, 0x2001, 0x0205, 0x2003,
-	0x0000, 0x901e, 0x2029, 0x0001, 0x9182, 0x0034, 0x1228, 0x2011,
-	0x001f, 0x080c, 0xc716, 0x04c0, 0x2130, 0x2009, 0x0034, 0x2011,
-	0x001f, 0x080c, 0xc716, 0x96b2, 0x0034, 0xb004, 0x904d, 0x0110,
-	0x080c, 0x0fb1, 0x080c, 0x0fff, 0x01d0, 0x8528, 0xa867, 0x0110,
-	0xa86b, 0x0000, 0x2920, 0xb406, 0x968a, 0x003d, 0x1230, 0x2608,
-	0x2011, 0x001b, 0x080c, 0xc716, 0x00b8, 0x96b2, 0x003c, 0x2009,
-	0x003c, 0x2950, 0x2011, 0x001b, 0x080c, 0xc716, 0x0c18, 0x2001,
-	0x0205, 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad, 0x0050, 0xb566,
-	0xb070, 0xc0fd, 0xb072, 0x0048, 0x2001, 0x0205, 0x2003, 0x0000,
-	0x00ae, 0x852f, 0x95ad, 0x0050, 0xb566, 0x2a48, 0xa804, 0xa807,
-	0x0000, 0x0006, 0x080c, 0x6c79, 0x000e, 0x2048, 0x9005, 0x1db0,
-	0x00fe, 0x00ae, 0x009e, 0x006e, 0x005e, 0x003e, 0x002e, 0x0005,
-	0x00d6, 0x00f6, 0x0096, 0x0006, 0x080c, 0x0fff, 0x000e, 0x090c,
-	0x0dd5, 0xa960, 0x21e8, 0xa95c, 0x9188, 0x0019, 0x21a0, 0x900e,
-	0x20a9, 0x0020, 0x4104, 0xaa66, 0xa87a, 0x2079, 0x1800, 0x7990,
-	0x810c, 0x9188, 0x000c, 0x9182, 0x001a, 0x0210, 0x2009, 0x001a,
-	0x21a8, 0x810b, 0xa972, 0xac76, 0x2e98, 0xa85c, 0x9080, 0x001f,
-	0x20a0, 0x2001, 0x0205, 0x200c, 0x918d, 0x0080, 0x2102, 0x4003,
-	0x2003, 0x0000, 0x080c, 0x6c79, 0x009e, 0x00fe, 0x00de, 0x0005,
-	0x0016, 0x00d6, 0x00f6, 0x0096, 0x0016, 0x2001, 0x0205, 0x200c,
-	0x918d, 0x0080, 0x2102, 0x001e, 0x2079, 0x0200, 0x2e98, 0xa87c,
-	0xd0ec, 0x0118, 0x9e80, 0x000c, 0x2098, 0x2021, 0x003e, 0x901e,
-	0x9282, 0x0020, 0x0218, 0x2011, 0x0020, 0x2018, 0x9486, 0x003e,
-	0x1170, 0x0096, 0x080c, 0x0fff, 0x2900, 0x009e, 0x05c0, 0xa806,
-	0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x3300,
-	0x908e, 0x0260, 0x0140, 0x2009, 0x0280, 0x9102, 0x920a, 0x0218,
-	0x2010, 0x2100, 0x9318, 0x2200, 0x9402, 0x1228, 0x2400, 0x9202,
-	0x2410, 0x9318, 0x9006, 0x2020, 0x22a8, 0xa800, 0x9200, 0xa802,
-	0x20e1, 0x0000, 0x4003, 0x83ff, 0x0180, 0x3300, 0x9086, 0x0280,
-	0x1130, 0x7814, 0x8000, 0x9085, 0x0080, 0x7816, 0x2e98, 0x2310,
-	0x84ff, 0x0904, 0xb1b5, 0x0804, 0xb1b7, 0x9085, 0x0001, 0x7817,
-	0x0000, 0x009e, 0x00fe, 0x00de, 0x001e, 0x0005, 0x00d6, 0x0036,
-	0x0096, 0x6314, 0x2348, 0xa87a, 0xa982, 0x080c, 0x6c6d, 0x009e,
-	0x003e, 0x00de, 0x0005, 0x91b6, 0x0015, 0x1118, 0x080c, 0xae47,
-	0x0030, 0x91b6, 0x0016, 0x190c, 0x0dd5, 0x080c, 0xae47, 0x0005,
-	0x20a9, 0x000e, 0x20e1, 0x0000, 0x2e98, 0x6014, 0x0096, 0x2048,
-	0xa860, 0x20e8, 0xa85c, 0x20a0, 0x009e, 0x4003, 0x0136, 0x9080,
-	0x001b, 0x2011, 0x0006, 0x20a9, 0x0001, 0x3418, 0x8318, 0x23a0,
-	0x4003, 0x3318, 0x8318, 0x2398, 0x8211, 0x1db8, 0x2011, 0x0006,
-	0x013e, 0x20a0, 0x3318, 0x8318, 0x2398, 0x4003, 0x3418, 0x8318,
-	0x23a0, 0x8211, 0x1db8, 0x0096, 0x080c, 0xcb1b, 0x0130, 0x6014,
-	0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0x009e, 0x0804, 0xae47,
-	0x0096, 0x00d6, 0x0036, 0x7330, 0x9386, 0x0200, 0x11a8, 0x6010,
-	0x00b6, 0x2058, 0xb8cf, 0x0000, 0x00be, 0x6014, 0x9005, 0x0130,
-	0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0xab32, 0x080c, 0xae47,
-	0x003e, 0x00de, 0x009e, 0x0005, 0x0011, 0x1d48, 0x0cc8, 0x0006,
-	0x0016, 0x080c, 0xd216, 0x0188, 0x6014, 0x9005, 0x1170, 0x600b,
-	0x0003, 0x601b, 0x0000, 0x6043, 0x0000, 0x2009, 0x0022, 0x080c,
-	0xb63d, 0x9006, 0x001e, 0x000e, 0x0005, 0x9085, 0x0001, 0x0cd0,
-	0x0096, 0x0016, 0x20a9, 0x0014, 0x9e80, 0x000c, 0x20e1, 0x0000,
-	0x2098, 0x6014, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002,
-	0x20a0, 0x4003, 0x2001, 0x0205, 0x2003, 0x0001, 0x2099, 0x0260,
-	0x20a9, 0x0016, 0x4003, 0x20a9, 0x000a, 0xa804, 0x2048, 0xa860,
-	0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003, 0x2001, 0x0205,
-	0x2003, 0x0002, 0x2099, 0x0260, 0x20a9, 0x0020, 0x4003, 0x2003,
-	0x0000, 0x6014, 0x2048, 0xa800, 0x2048, 0xa867, 0x0103, 0x080c,
-	0xae47, 0x001e, 0x009e, 0x0005, 0x0096, 0x0016, 0x900e, 0x7030,
-	0x9086, 0x0100, 0x0140, 0x7038, 0x9084, 0x00ff, 0x800c, 0x703c,
-	0x9084, 0x00ff, 0x8004, 0x9080, 0x0004, 0x9108, 0x810b, 0x2011,
-	0x0002, 0x2019, 0x000c, 0x6014, 0x2048, 0x080c, 0xc716, 0x080c,
-	0xcb1b, 0x0140, 0x6014, 0x2048, 0xa807, 0x0000, 0xa864, 0xa8e2,
-	0xa867, 0x0103, 0x080c, 0xae47, 0x001e, 0x009e, 0x0005, 0x0016,
-	0x2009, 0x0000, 0x7030, 0x9086, 0x0200, 0x0110, 0x2009, 0x0001,
-	0x0096, 0x6014, 0x904d, 0x090c, 0x0dd5, 0xa97a, 0x080c, 0x6c79,
-	0x009e, 0x080c, 0xae47, 0x001e, 0x0005, 0x0016, 0x0096, 0x7030,
-	0x9086, 0x0100, 0x1118, 0x2009, 0x0004, 0x0010, 0x7034, 0x800c,
-	0x810b, 0x2011, 0x000c, 0x2019, 0x000c, 0x6014, 0x2048, 0xa804,
-	0x0096, 0x9005, 0x0108, 0x2048, 0x080c, 0xc716, 0x009e, 0x080c,
-	0xcb1b, 0x0148, 0xa804, 0x9005, 0x1158, 0xa807, 0x0000, 0xa864,
-	0xa8e2, 0xa867, 0x0103, 0x080c, 0xae47, 0x009e, 0x001e, 0x0005,
-	0x0086, 0x2040, 0xa030, 0x8007, 0x9086, 0x0100, 0x1118, 0x080c,
-	0xb7f9, 0x00e0, 0xa034, 0x8007, 0x800c, 0x8806, 0x8006, 0x8007,
-	0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x000c, 0xa87b, 0x0000,
-	0xa883, 0x0000, 0xa897, 0x4000, 0xaaa0, 0xab9c, 0xaca8, 0xada4,
-	0x2031, 0x0000, 0x2041, 0x1243, 0x0019, 0x0d08, 0x008e, 0x0898,
-	0x0096, 0x0006, 0x080c, 0x0fff, 0x000e, 0x01b0, 0xa8ab, 0x0dcb,
-	0xa876, 0x000e, 0xa8a2, 0x0006, 0xae6a, 0x2800, 0xa89e, 0xa97a,
-	0xaf72, 0xaa8e, 0xab92, 0xac96, 0xad9a, 0x0086, 0x2940, 0x080c,
-	0x10e9, 0x008e, 0x9085, 0x0001, 0x009e, 0x0005, 0x00e6, 0x00d6,
-	0x0026, 0x7008, 0x9084, 0x00ff, 0x6210, 0x00b6, 0x2258, 0xba10,
-	0x00be, 0x9206, 0x1520, 0x700c, 0x6210, 0x00b6, 0x2258, 0xba14,
-	0x00be, 0x9206, 0x11e0, 0x6043, 0x0000, 0x2c68, 0x0016, 0x2009,
-	0x0035, 0x080c, 0xd18e, 0x001e, 0x1158, 0x622c, 0x2268, 0x2071,
-	0x026c, 0x6b20, 0x9386, 0x0003, 0x0130, 0x9386, 0x0006, 0x0128,
-	0x080c, 0xae47, 0x0020, 0x0039, 0x0010, 0x080c, 0xb472, 0x002e,
-	0x00de, 0x00ee, 0x0005, 0x0096, 0x6814, 0x2048, 0x9186, 0x0015,
-	0x0904, 0xb45a, 0x918e, 0x0016, 0x1904, 0xb470, 0x700c, 0x908c,
-	0xff00, 0x9186, 0x1700, 0x0120, 0x9186, 0x0300, 0x1904, 0xb434,
-	0x89ff, 0x1138, 0x6800, 0x9086, 0x000f, 0x0904, 0xb417, 0x0804,
-	0xb46e, 0x6808, 0x9086, 0xffff, 0x1904, 0xb45c, 0xa87c, 0x9084,
-	0x0060, 0x9086, 0x0020, 0x1128, 0xa83c, 0xa940, 0x9105, 0x1904,
-	0xb45c, 0x6824, 0xd0b4, 0x1904, 0xb45c, 0x080c, 0xcd04, 0x685c,
-	0xa882, 0xa87c, 0xc0dc, 0xc0f4, 0xc0d4, 0xa87e, 0x0026, 0x900e,
-	0x6a18, 0x2001, 0x000a, 0x080c, 0x8f3f, 0xa884, 0x920a, 0x0208,
-	0x8011, 0xaa86, 0x82ff, 0x002e, 0x1138, 0x00c6, 0x2d60, 0x080c,
-	0xc840, 0x00ce, 0x0804, 0xb46e, 0x00c6, 0xa868, 0xd0fc, 0x1118,
-	0x080c, 0x60af, 0x0010, 0x080c, 0x64b5, 0x00ce, 0x1904, 0xb45c,
-	0x00c6, 0x2d60, 0x080c, 0xae47, 0x00ce, 0x0804, 0xb46e, 0x00c6,
-	0x080c, 0xae95, 0x0198, 0x6017, 0x0000, 0x6810, 0x6012, 0x080c,
-	0xcf90, 0x6023, 0x0003, 0x6904, 0x00c6, 0x2d60, 0x080c, 0xae47,
-	0x00ce, 0x080c, 0xaec2, 0x00ce, 0x0804, 0xb46e, 0x2001, 0x1988,
-	0x2004, 0x6842, 0x00ce, 0x04d0, 0x7008, 0x9086, 0x000b, 0x11c8,
-	0x6010, 0x00b6, 0x2058, 0xb900, 0xc1bc, 0xb902, 0x00be, 0x00c6,
-	0x2d60, 0xa87b, 0x0003, 0x080c, 0xd1d0, 0x6007, 0x0085, 0x6003,
-	0x000b, 0x6023, 0x0002, 0x080c, 0x90c7, 0x080c, 0x9664, 0x00ce,
-	0x00e8, 0x700c, 0x9086, 0x2a00, 0x1138, 0x2001, 0x1988, 0x2004,
-	0x6842, 0x00a0, 0x0479, 0x00a0, 0x89ff, 0x090c, 0x0dd5, 0x00c6,
-	0x00d6, 0x2d60, 0xa867, 0x0103, 0xa87b, 0x0003, 0x080c, 0x6a95,
-	0x080c, 0xcd04, 0x080c, 0xae78, 0x00de, 0x00ce, 0x080c, 0xae47,
-	0x009e, 0x0005, 0x9186, 0x0015, 0x1128, 0x2001, 0x1988, 0x2004,
-	0x6842, 0x0068, 0x918e, 0x0016, 0x1160, 0x00c6, 0x2d00, 0x2060,
-	0x080c, 0xe7ea, 0x080c, 0x8689, 0x080c, 0xae47, 0x00ce, 0x080c,
-	0xae47, 0x0005, 0x0026, 0x0036, 0x0046, 0x7228, 0xacb0, 0xabac,
-	0xd2f4, 0x0130, 0x2001, 0x1988, 0x2004, 0x6842, 0x0804, 0xb4ec,
-	0x00c6, 0x2d60, 0x080c, 0xc741, 0x00ce, 0x6804, 0x9086, 0x0050,
-	0x1168, 0x00c6, 0x2d00, 0x2060, 0x6003, 0x0001, 0x6007, 0x0050,
-	0x080c, 0x90c7, 0x080c, 0x9664, 0x00ce, 0x04f0, 0x6800, 0x9086,
-	0x000f, 0x01a8, 0x89ff, 0x090c, 0x0dd5, 0x6800, 0x9086, 0x0004,
-	0x1190, 0xa87c, 0xd0ac, 0x0178, 0xa843, 0x0fff, 0xa83f, 0x0fff,
-	0xa880, 0xc0fc, 0xa882, 0x2001, 0x0001, 0x6832, 0x0400, 0x2001,
-	0x0007, 0x6832, 0x00e0, 0xa87c, 0xd0b4, 0x1150, 0xd0ac, 0x0db8,
-	0x6824, 0xd0f4, 0x1d48, 0xa838, 0xa934, 0x9105, 0x0d80, 0x0c20,
-	0xd2ec, 0x1d68, 0x7024, 0x9306, 0x1118, 0x7020, 0x9406, 0x0d38,
-	0x7020, 0x683e, 0x7024, 0x683a, 0x2001, 0x0005, 0x6832, 0x080c,
-	0xce87, 0x080c, 0x9664, 0x0010, 0x080c, 0xae47, 0x004e, 0x003e,
-	0x002e, 0x0005, 0x00e6, 0x00d6, 0x0026, 0x7008, 0x9084, 0x00ff,
-	0x6210, 0x00b6, 0x2258, 0xba10, 0x00be, 0x9206, 0x1904, 0xb557,
-	0x700c, 0x6210, 0x00b6, 0x2258, 0xba14, 0x00be, 0x9206, 0x1904,
-	0xb557, 0x6038, 0x2068, 0x6824, 0xc0dc, 0x6826, 0x6a20, 0x9286,
-	0x0007, 0x0904, 0xb557, 0x9286, 0x0002, 0x0904, 0xb557, 0x9286,
-	0x0000, 0x05e8, 0x6808, 0x633c, 0x9306, 0x15c8, 0x2071, 0x026c,
-	0x9186, 0x0015, 0x0570, 0x918e, 0x0016, 0x1100, 0x00c6, 0x6038,
-	0x2060, 0x6104, 0x9186, 0x004b, 0x01c0, 0x9186, 0x004c, 0x01a8,
-	0x9186, 0x004d, 0x0190, 0x9186, 0x004e, 0x0178, 0x9186, 0x0052,
-	0x0160, 0x6014, 0x0096, 0x2048, 0x080c, 0xcb1b, 0x090c, 0x0dd5,
-	0xa87b, 0x0003, 0x009e, 0x080c, 0xd1d0, 0x6007, 0x0085, 0x6003,
-	0x000b, 0x6023, 0x0002, 0x080c, 0x90c7, 0x080c, 0x9664, 0x00ce,
-	0x0030, 0x6038, 0x2070, 0x2001, 0x1988, 0x2004, 0x7042, 0x080c,
-	0xae47, 0x002e, 0x00de, 0x00ee, 0x0005, 0x00b6, 0x0096, 0x00f6,
-	0x6014, 0x2048, 0x6010, 0x2058, 0x91b6, 0x0015, 0x0130, 0xba08,
-	0xbb0c, 0xbc00, 0xc48c, 0xbc02, 0x0460, 0x0096, 0x0156, 0x0036,
-	0x0026, 0x2b48, 0x9e90, 0x0010, 0x2019, 0x000a, 0x20a9, 0x0004,
-	0x080c, 0xbe03, 0x002e, 0x003e, 0x015e, 0x009e, 0x1904, 0xb5c6,
-	0x0096, 0x0156, 0x0036, 0x0026, 0x2b48, 0x9e90, 0x0014, 0x2019,
-	0x0006, 0x20a9, 0x0004, 0x080c, 0xbe03, 0x002e, 0x003e, 0x015e,
-	0x009e, 0x15a0, 0x7238, 0xba0a, 0x733c, 0xbb0e, 0xbc00, 0xc48d,
-	0xbc02, 0xa804, 0x9005, 0x1128, 0x00fe, 0x009e, 0x00be, 0x0804,
-	0xb24b, 0x0096, 0x2048, 0xaa12, 0xab16, 0xac0a, 0x009e, 0x8006,
+	0x0005, 0xaf11, 0xb67f, 0xb85a, 0xaf11, 0xb8f0, 0xb22d, 0xaf11,
+	0xaf11, 0xb601, 0xbe55, 0xaf11, 0xaf11, 0xaf11, 0xaf11, 0xaf11,
+	0xaf11, 0x080c, 0x0dd5, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c,
+	0x0dd5, 0x0013, 0x006e, 0x0005, 0xaf2c, 0xc529, 0xaf2c, 0xaf2c,
+	0xaf2c, 0xaf2c, 0xaf2c, 0xaf2c, 0xc4ce, 0xc6ab, 0xaf2c, 0xc56a,
+	0xc5e9, 0xc56a, 0xc5e9, 0xaf2c, 0x080c, 0x0dd5, 0x6000, 0x9082,
+	0x0016, 0x1a0c, 0x0dd5, 0x6000, 0x0002, 0xaf48, 0xbe9c, 0xbf81,
+	0xc0b1, 0xc25c, 0xaf48, 0xaf48, 0xaf48, 0xbe70, 0xc45a, 0xc45d,
+	0xaf48, 0xaf48, 0xaf48, 0xaf48, 0xc48c, 0xaf48, 0xaf48, 0xaf48,
+	0x080c, 0x0dd5, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0dd5,
+	0x0013, 0x006e, 0x0005, 0xaf63, 0xaf63, 0xafa6, 0xb045, 0xb0da,
+	0xaf63, 0xaf63, 0xaf63, 0xaf65, 0xaf63, 0xaf63, 0xaf63, 0xaf63,
+	0xaf63, 0xaf63, 0xaf63, 0x080c, 0x0dd5, 0x9186, 0x004c, 0x0588,
+	0x9186, 0x0003, 0x190c, 0x0dd5, 0x0096, 0x601c, 0xc0ed, 0x601e,
+	0x6003, 0x0003, 0x6106, 0x6014, 0x2048, 0xa87c, 0x9084, 0xa000,
+	0xc0b5, 0xa87e, 0xa8ac, 0xa846, 0xa8b0, 0xa84a, 0x9006, 0xa836,
+	0xa83a, 0xa884, 0x9092, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003,
+	0x8013, 0x8213, 0x9210, 0x621a, 0x009e, 0x2c10, 0x080c, 0x1bad,
+	0x080c, 0x9155, 0x0126, 0x2091, 0x8000, 0x080c, 0x97b9, 0x012e,
+	0x0005, 0x6010, 0x00b6, 0x2058, 0xbca0, 0x00be, 0x2c00, 0x080c,
+	0xb0fc, 0x080c, 0xd248, 0x6003, 0x0007, 0x0005, 0x00d6, 0x0096,
+	0x00f6, 0x2079, 0x1800, 0x7a90, 0x6014, 0x2048, 0xa87c, 0xd0ec,
+	0x1110, 0x9290, 0x0018, 0xac78, 0xc4fc, 0x0046, 0xa8e0, 0x9005,
+	0x1140, 0xa8dc, 0x921a, 0x0140, 0x0220, 0xa87b, 0x0007, 0x2010,
+	0x0028, 0xa87b, 0x0015, 0x0010, 0xa87b, 0x0000, 0x8214, 0xa883,
+	0x0000, 0xaa02, 0x0006, 0x0016, 0x0026, 0x00c6, 0x00d6, 0x00e6,
+	0x00f6, 0x2400, 0x9005, 0x1108, 0x009a, 0x2100, 0x9086, 0x0015,
+	0x1118, 0x2001, 0x0001, 0x0038, 0x2100, 0x9086, 0x0016, 0x0118,
+	0x2001, 0x0001, 0x002a, 0x94a4, 0x0007, 0x8423, 0x9405, 0x0002,
+	0xb00d, 0xb00d, 0xb008, 0xb00b, 0xb00d, 0xb005, 0xaff8, 0xaff8,
+	0xaff8, 0xaff8, 0xaff8, 0xaff8, 0xaff8, 0xaff8, 0xaff8, 0xaff8,
+	0x00fe, 0x00ee, 0x00de, 0x00ce, 0x002e, 0x001e, 0x000e, 0x004e,
+	0x00fe, 0x009e, 0x00de, 0x080c, 0x0dd5, 0x080c, 0xbaad, 0x0028,
+	0x080c, 0xbb92, 0x0010, 0x080c, 0xbc88, 0x00fe, 0x00ee, 0x00de,
+	0x00ce, 0x002e, 0x001e, 0x2c00, 0xa896, 0x000e, 0x080c, 0xb1ba,
+	0x0530, 0xa804, 0xa80e, 0x00a6, 0x2050, 0xb100, 0x00ae, 0x8006,
 	0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002,
-	0x2009, 0x002b, 0xaaa0, 0xab9c, 0xaca8, 0xada4, 0x2031, 0x0000,
-	0x2041, 0x1243, 0x080c, 0xb360, 0x0130, 0x00fe, 0x009e, 0x080c,
-	0xae47, 0x00be, 0x0005, 0x080c, 0xb7f9, 0x0cb8, 0x2b78, 0x00f6,
-	0x080c, 0x31bc, 0x080c, 0xd22b, 0x00fe, 0x00c6, 0x080c, 0xadf1,
-	0x2f00, 0x6012, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001,
-	0x6003, 0x0001, 0x2001, 0x0007, 0x080c, 0x6550, 0x080c, 0x657c,
-	0x080c, 0x910f, 0x080c, 0x9664, 0x00ce, 0x0804, 0xb599, 0x2100,
-	0x91b2, 0x0053, 0x1a0c, 0x0dd5, 0x91b2, 0x0040, 0x1a04, 0xb64f,
-	0x0002, 0xb63d, 0xb63d, 0xb633, 0xb63d, 0xb63d, 0xb63d, 0xb631,
-	0xb631, 0xb631, 0xb631, 0xb631, 0xb631, 0xb631, 0xb631, 0xb631,
-	0xb631, 0xb631, 0xb631, 0xb631, 0xb631, 0xb631, 0xb631, 0xb631,
-	0xb631, 0xb631, 0xb631, 0xb631, 0xb631, 0xb631, 0xb631, 0xb631,
-	0xb63d, 0xb631, 0xb63d, 0xb63d, 0xb631, 0xb631, 0xb631, 0xb631,
-	0xb631, 0xb633, 0xb631, 0xb631, 0xb631, 0xb631, 0xb631, 0xb631,
-	0xb631, 0xb631, 0xb631, 0xb63d, 0xb63d, 0xb631, 0xb631, 0xb631,
-	0xb631, 0xb631, 0xb631, 0xb631, 0xb631, 0xb631, 0xb63d, 0xb631,
-	0xb631, 0x080c, 0x0dd5, 0x0066, 0x00b6, 0x6610, 0x2658, 0xb8cc,
-	0xc08c, 0xb8ce, 0x00be, 0x006e, 0x0000, 0x6003, 0x0001, 0x6106,
-	0x9186, 0x0032, 0x0118, 0x080c, 0x910f, 0x0010, 0x080c, 0x90c7,
-	0x0126, 0x2091, 0x8000, 0x080c, 0x9664, 0x012e, 0x0005, 0x2600,
-	0x0002, 0xb63d, 0xb63d, 0xb663, 0xb63d, 0xb63d, 0xb663, 0xb663,
-	0xb663, 0xb663, 0xb63d, 0xb663, 0xb63d, 0xb663, 0xb63d, 0xb663,
-	0xb663, 0xb663, 0xb663, 0x080c, 0x0dd5, 0x6004, 0x90b2, 0x0053,
-	0x1a0c, 0x0dd5, 0x91b6, 0x0013, 0x0904, 0xb727, 0x91b6, 0x0027,
-	0x1904, 0xb6e2, 0x080c, 0x955f, 0x6004, 0x080c, 0xcd10, 0x01b0,
-	0x080c, 0xcd21, 0x01a8, 0x908e, 0x0021, 0x0904, 0xb6df, 0x908e,
-	0x0022, 0x1130, 0x080c, 0xb277, 0x0904, 0xb6db, 0x0804, 0xb6dc,
-	0x908e, 0x003d, 0x0904, 0xb6df, 0x0804, 0xb6d5, 0x080c, 0x31e1,
-	0x2001, 0x0007, 0x080c, 0x6550, 0x6010, 0x00b6, 0x2058, 0xb9a0,
-	0x00be, 0x080c, 0xb7f9, 0x9186, 0x007e, 0x1148, 0x2001, 0x1837,
-	0x2014, 0xc285, 0x080c, 0x73b0, 0x1108, 0xc2ad, 0x2202, 0x0036,
-	0x0026, 0x2019, 0x0028, 0x2110, 0x080c, 0xe8f6, 0x002e, 0x003e,
-	0x0016, 0x0026, 0x0036, 0x2110, 0x2019, 0x0028, 0x080c, 0x9262,
-	0x0076, 0x903e, 0x080c, 0x913f, 0x6010, 0x00b6, 0x905d, 0x0100,
-	0x00be, 0x2c08, 0x080c, 0xe2ca, 0x007e, 0x003e, 0x002e, 0x001e,
-	0x080c, 0xd22b, 0x0016, 0x080c, 0xcf88, 0x080c, 0xae47, 0x001e,
-	0x080c, 0x32b4, 0x080c, 0x9664, 0x0030, 0x080c, 0xcf88, 0x080c,
-	0xae47, 0x080c, 0x9664, 0x0005, 0x080c, 0xb7f9, 0x0cb0, 0x080c,
-	0xb835, 0x0c98, 0x9186, 0x0014, 0x1db0, 0x080c, 0x955f, 0x6004,
-	0x908e, 0x0022, 0x1118, 0x080c, 0xb277, 0x0d68, 0x080c, 0x31bc,
-	0x080c, 0xd22b, 0x080c, 0xcd10, 0x1190, 0x080c, 0x31e1, 0x6010,
-	0x00b6, 0x2058, 0xb9a0, 0x00be, 0x080c, 0xb7f9, 0x9186, 0x007e,
-	0x1128, 0x2001, 0x1837, 0x200c, 0xc185, 0x2102, 0x0870, 0x080c,
-	0xcd21, 0x1118, 0x080c, 0xb7f9, 0x0840, 0x6004, 0x908e, 0x0032,
-	0x1160, 0x00e6, 0x00f6, 0x2071, 0x189e, 0x2079, 0x0000, 0x080c,
-	0x354f, 0x00fe, 0x00ee, 0x0804, 0xb6d5, 0x6004, 0x908e, 0x0021,
-	0x0d48, 0x908e, 0x0022, 0x090c, 0xb7f9, 0x0804, 0xb6d5, 0x90b2,
-	0x0040, 0x1a04, 0xb7d5, 0x2008, 0x0002, 0xb76f, 0xb770, 0xb773,
-	0xb776, 0xb779, 0xb77c, 0xb76d, 0xb76d, 0xb76d, 0xb76d, 0xb76d,
-	0xb76d, 0xb76d, 0xb76d, 0xb76d, 0xb76d, 0xb76d, 0xb76d, 0xb76d,
-	0xb76d, 0xb76d, 0xb76d, 0xb76d, 0xb76d, 0xb76d, 0xb76d, 0xb76d,
-	0xb76d, 0xb76d, 0xb76d, 0xb77f, 0xb78a, 0xb76d, 0xb78c, 0xb78a,
-	0xb76d, 0xb76d, 0xb76d, 0xb76d, 0xb76d, 0xb78a, 0xb78a, 0xb76d,
-	0xb76d, 0xb76d, 0xb76d, 0xb76d, 0xb76d, 0xb76d, 0xb76d, 0xb7bc,
-	0xb78a, 0xb76d, 0xb786, 0xb76d, 0xb76d, 0xb76d, 0xb787, 0xb76d,
-	0xb76d, 0xb76d, 0xb78a, 0xb7b3, 0xb76d, 0x080c, 0x0dd5, 0x00d0,
-	0x2001, 0x000b, 0x0410, 0x2001, 0x0003, 0x00f8, 0x2001, 0x0005,
-	0x00e0, 0x2001, 0x0001, 0x00c8, 0x2001, 0x0009, 0x00b0, 0x080c,
-	0x955f, 0x6003, 0x0005, 0x080c, 0x9664, 0x0070, 0x0018, 0x0010,
-	0x080c, 0x6550, 0x0804, 0xb7cd, 0x080c, 0x955f, 0x080c, 0xd22e,
-	0x6003, 0x0004, 0x080c, 0x9664, 0x0005, 0x080c, 0x6550, 0x080c,
-	0x955f, 0x6003, 0x0002, 0x0036, 0x2019, 0x1852, 0x2304, 0x9084,
-	0xff00, 0x1120, 0x2001, 0x1986, 0x201c, 0x0040, 0x8007, 0x909a,
-	0x0004, 0x0ec0, 0x8003, 0x801b, 0x831b, 0x9318, 0x631a, 0x003e,
-	0x080c, 0x9664, 0x0c08, 0x080c, 0x955f, 0x080c, 0xcf88, 0x080c,
-	0xae47, 0x080c, 0x9664, 0x08c0, 0x00e6, 0x00f6, 0x2071, 0x189e,
-	0x2079, 0x0000, 0x080c, 0x354f, 0x00fe, 0x00ee, 0x080c, 0x955f,
-	0x080c, 0xae47, 0x080c, 0x9664, 0x0838, 0x080c, 0x955f, 0x6003,
-	0x0002, 0x080c, 0xd22e, 0x0804, 0x9664, 0x2600, 0x2008, 0x0002,
-	0xb7ec, 0xb7cd, 0xb7ea, 0xb7cd, 0xb7cd, 0xb7ea, 0xb7ea, 0xb7ea,
-	0xb7ea, 0xb7cd, 0xb7ea, 0xb7cd, 0xb7ea, 0xb7cd, 0xb7ea, 0xb7ea,
-	0xb7ea, 0xb7ea, 0x080c, 0x0dd5, 0x080c, 0x955f, 0x0096, 0x6014,
-	0x2048, 0x080c, 0x6c79, 0x009e, 0x080c, 0xae47, 0x080c, 0x9664,
-	0x0005, 0x00e6, 0x0096, 0x0026, 0x0016, 0x080c, 0xcb1b, 0x0568,
-	0x6014, 0x2048, 0xa864, 0x9086, 0x0139, 0x11a8, 0xa894, 0x9086,
-	0x0056, 0x1148, 0x080c, 0x5479, 0x0130, 0x2001, 0x0000, 0x900e,
-	0x2011, 0x4000, 0x0028, 0x2001, 0x0030, 0x900e, 0x2011, 0x4005,
-	0x080c, 0xd0f5, 0x0090, 0xa868, 0xd0fc, 0x0178, 0xa807, 0x0000,
-	0x0016, 0x6004, 0x908e, 0x0021, 0x0168, 0x908e, 0x003d, 0x0150,
-	0x001e, 0xa867, 0x0103, 0xa833, 0x0100, 0x001e, 0x002e, 0x009e,
-	0x00ee, 0x0005, 0x001e, 0x0009, 0x0cc0, 0x0096, 0x6014, 0x2048,
-	0xa800, 0x2048, 0xa867, 0x0103, 0xa823, 0x8001, 0x009e, 0x0005,
-	0x00b6, 0x6610, 0x2658, 0xb804, 0x9084, 0x00ff, 0x90b2, 0x000c,
-	0x1a0c, 0x0dd5, 0x6604, 0x96b6, 0x004d, 0x1120, 0x080c, 0xd014,
-	0x0804, 0xb8c5, 0x6604, 0x96b6, 0x0043, 0x1120, 0x080c, 0xd05d,
-	0x0804, 0xb8c5, 0x6604, 0x96b6, 0x004b, 0x1120, 0x080c, 0xd089,
-	0x0804, 0xb8c5, 0x6604, 0x96b6, 0x0033, 0x1120, 0x080c, 0xcfaa,
-	0x0804, 0xb8c5, 0x6604, 0x96b6, 0x0028, 0x1120, 0x080c, 0xcd5a,
-	0x0804, 0xb8c5, 0x6604, 0x96b6, 0x0029, 0x1120, 0x080c, 0xcd9b,
-	0x0804, 0xb8c5, 0x6604, 0x96b6, 0x001f, 0x1120, 0x080c, 0xb220,
-	0x0804, 0xb8c5, 0x6604, 0x96b6, 0x0000, 0x1118, 0x080c, 0xb55d,
-	0x04e0, 0x6604, 0x96b6, 0x0022, 0x1118, 0x080c, 0xb258, 0x04a8,
-	0x6604, 0x96b6, 0x0035, 0x1118, 0x080c, 0xb37e, 0x0470, 0x6604,
-	0x96b6, 0x0039, 0x1118, 0x080c, 0xb4f2, 0x0438, 0x6604, 0x96b6,
-	0x003d, 0x1118, 0x080c, 0xb290, 0x0400, 0x6604, 0x96b6, 0x0044,
-	0x1118, 0x080c, 0xb2cc, 0x00c8, 0x6604, 0x96b6, 0x0049, 0x1118,
-	0x080c, 0xb30d, 0x0090, 0x6604, 0x96b6, 0x0041, 0x1118, 0x080c,
-	0xb2f7, 0x0058, 0x91b6, 0x0015, 0x1110, 0x0063, 0x0030, 0x91b6,
-	0x0016, 0x1128, 0x00be, 0x0804, 0xbb1f, 0x00be, 0x0005, 0x080c,
-	0xaedd, 0x0cd8, 0xb8e2, 0xb8e5, 0xb8e2, 0xb92c, 0xb8e2, 0xba93,
-	0xbb2c, 0xb8e2, 0xb8e2, 0xbaf5, 0xb8e2, 0xbb0b, 0x0096, 0x601f,
-	0x0000, 0x6014, 0x2048, 0xa800, 0x2048, 0xa867, 0x0103, 0x009e,
-	0x0804, 0xae47, 0xa001, 0xa001, 0x0005, 0x00e6, 0x2071, 0x1800,
-	0x7090, 0x9086, 0x0074, 0x1540, 0x080c, 0xe29b, 0x11b0, 0x6010,
-	0x00b6, 0x2058, 0x7030, 0xd08c, 0x0128, 0xb800, 0xd0bc, 0x0110,
-	0xc0c5, 0xb802, 0x00f9, 0x00be, 0x2001, 0x0006, 0x080c, 0x6550,
-	0x080c, 0x31e1, 0x080c, 0xae47, 0x0098, 0x2001, 0x000a, 0x080c,
-	0x6550, 0x080c, 0x31e1, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c,
-	0x910f, 0x080c, 0x9664, 0x0020, 0x2001, 0x0001, 0x080c, 0xba63,
-	0x00ee, 0x0005, 0x00d6, 0xb800, 0xd084, 0x0160, 0x9006, 0x080c,
-	0x653c, 0x2069, 0x1847, 0x6804, 0xd0a4, 0x0120, 0x2001, 0x0006,
-	0x080c, 0x657c, 0x00de, 0x0005, 0x00b6, 0x0096, 0x00d6, 0x2011,
-	0x1824, 0x2204, 0x9086, 0x0074, 0x1904, 0xba3a, 0x6010, 0x2058,
-	0xbaa0, 0x9286, 0x007e, 0x1120, 0x080c, 0xbc79, 0x0804, 0xb99e,
-	0x080c, 0xbc6e, 0x6010, 0x2058, 0xbaa0, 0x9286, 0x0080, 0x1510,
-	0x6014, 0x9005, 0x01a8, 0x2048, 0xa864, 0x9084, 0x00ff, 0x9086,
-	0x0039, 0x1140, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c,
-	0xd0f5, 0x0030, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, 0x0200,
-	0x2001, 0x0006, 0x080c, 0x6550, 0x080c, 0x31e1, 0x080c, 0xae47,
-	0x0804, 0xba3d, 0x080c, 0xba4b, 0x6014, 0x9005, 0x0190, 0x2048,
-	0xa868, 0xd0f4, 0x01e8, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039,
-	0x1d08, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c, 0xd0f5,
-	0x08f8, 0x080c, 0xba41, 0x0160, 0x9006, 0x080c, 0x653c, 0x2001,
-	0x0004, 0x080c, 0x657c, 0x2001, 0x0007, 0x080c, 0x6550, 0x08a0,
-	0x2001, 0x0004, 0x080c, 0x6550, 0x6003, 0x0001, 0x6007, 0x0003,
-	0x080c, 0x910f, 0x080c, 0x9664, 0x0804, 0xba3d, 0xb85c, 0xd0e4,
-	0x01d8, 0x080c, 0xcf2a, 0x080c, 0x73b0, 0x0118, 0xd0dc, 0x1904,
-	0xb960, 0x2011, 0x1837, 0x2204, 0xc0ad, 0x2012, 0x2001, 0x196d,
-	0x2004, 0x00f6, 0x2079, 0x0100, 0x78e3, 0x0000, 0x080c, 0x28b2,
-	0x78e2, 0x00fe, 0x0804, 0xb960, 0x080c, 0xcf67, 0x2011, 0x1837,
-	0x2204, 0xc0a5, 0x2012, 0x0006, 0x080c, 0xe420, 0x000e, 0x1904,
-	0xb960, 0xc0b5, 0x2012, 0x2001, 0x0006, 0x080c, 0x6550, 0x9006,
-	0x080c, 0x653c, 0x00c6, 0x2001, 0x180f, 0x2004, 0xd09c, 0x0520,
-	0x00f6, 0x2079, 0x0100, 0x00e6, 0x2071, 0x1800, 0x700c, 0x9084,
-	0x00ff, 0x78e6, 0x707e, 0x7010, 0x78ea, 0x7082, 0x908c, 0x00ff,
-	0x00ee, 0x780c, 0xc0b5, 0x780e, 0x00fe, 0x080c, 0x2887, 0x00f6,
-	0x2100, 0x900e, 0x080c, 0x283e, 0x795e, 0x00fe, 0x9186, 0x0081,
-	0x01d8, 0x2009, 0x0081, 0x00c8, 0x2009, 0x00ef, 0x00f6, 0x2079,
-	0x0100, 0x79ea, 0x7932, 0x7936, 0x780c, 0xc0b5, 0x780e, 0x00fe,
-	0x080c, 0x2887, 0x00f6, 0x2079, 0x1800, 0x7982, 0x2100, 0x900e,
-	0x080c, 0x283e, 0x795e, 0x00fe, 0x8108, 0x080c, 0x659f, 0x2b00,
-	0x00ce, 0x1904, 0xb960, 0x6012, 0x2009, 0x180f, 0x210c, 0xd19c,
-	0x0150, 0x2009, 0x027c, 0x210c, 0x918c, 0x00ff, 0xb912, 0x2009,
-	0x027d, 0x210c, 0xb916, 0x2001, 0x0002, 0x080c, 0x6550, 0x6023,
-	0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x910f, 0x080c,
-	0x9664, 0x0018, 0x2001, 0x0001, 0x0431, 0x00de, 0x009e, 0x00be,
-	0x0005, 0x2001, 0x1810, 0x2004, 0xd0a4, 0x0120, 0x2001, 0x1848,
-	0x2004, 0xd0ac, 0x0005, 0x00e6, 0x080c, 0xe94f, 0x0190, 0x2071,
-	0x0260, 0x7108, 0x720c, 0x918c, 0x00ff, 0x1118, 0x9284, 0xff00,
-	0x0140, 0x6010, 0x2058, 0xb8a0, 0x9084, 0xff80, 0x1110, 0xb912,
-	0xba16, 0x00ee, 0x0005, 0x2030, 0x9005, 0x0158, 0x2001, 0x0007,
-	0x080c, 0x6550, 0x080c, 0x56e4, 0x1120, 0x2001, 0x0007, 0x080c,
-	0x657c, 0x2600, 0x9005, 0x11b0, 0x6014, 0x0096, 0x2048, 0xa868,
-	0x009e, 0xd0fc, 0x1178, 0x0036, 0x0046, 0x6010, 0x00b6, 0x2058,
-	0xbba0, 0x00be, 0x2021, 0x0004, 0x2011, 0x8014, 0x080c, 0x4b05,
-	0x004e, 0x003e, 0x080c, 0x31e1, 0x6020, 0x9086, 0x000a, 0x1108,
-	0x0005, 0x0804, 0xae47, 0x00b6, 0x00e6, 0x0026, 0x0016, 0x2071,
-	0x1800, 0x7090, 0x9086, 0x0014, 0x1904, 0xbaeb, 0x080c, 0x56e4,
-	0x1170, 0x6014, 0x9005, 0x1158, 0x0036, 0x0046, 0x6010, 0x2058,
-	0xbba0, 0x2021, 0x0006, 0x080c, 0x4cbc, 0x004e, 0x003e, 0x00d6,
-	0x6010, 0x2058, 0x080c, 0x669b, 0x080c, 0xb91a, 0x00de, 0x080c,
-	0xbd3f, 0x1588, 0x6010, 0x2058, 0xb890, 0x9005, 0x0560, 0x2001,
-	0x0006, 0x080c, 0x6550, 0x0096, 0x6014, 0x904d, 0x01d0, 0xa864,
-	0x9084, 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, 0x0000, 0x900e,
-	0x2011, 0x4000, 0x080c, 0xd0f5, 0x0060, 0xa864, 0x9084, 0x00ff,
-	0x9086, 0x0029, 0x0130, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833,
-	0x0200, 0x009e, 0x080c, 0x31e1, 0x6020, 0x9086, 0x000a, 0x0140,
-	0x080c, 0xae47, 0x0028, 0x080c, 0xb7f9, 0x9006, 0x080c, 0xba63,
-	0x001e, 0x002e, 0x00ee, 0x00be, 0x0005, 0x2011, 0x1824, 0x2204,
-	0x9086, 0x0014, 0x1160, 0x2001, 0x0002, 0x080c, 0x6550, 0x6003,
-	0x0001, 0x6007, 0x0001, 0x080c, 0x910f, 0x0804, 0x9664, 0x2001,
-	0x0001, 0x0804, 0xba63, 0x2030, 0x2011, 0x1824, 0x2204, 0x9086,
-	0x0004, 0x1148, 0x96b6, 0x000b, 0x1120, 0x2001, 0x0007, 0x080c,
-	0x6550, 0x0804, 0xae47, 0x2001, 0x0001, 0x0804, 0xba63, 0x0002,
-	0xb8e2, 0xbb37, 0xb8e2, 0xbb78, 0xb8e2, 0xbc25, 0xbb2c, 0xb8e2,
-	0xb8e2, 0xbc39, 0xb8e2, 0xbc4b, 0x6604, 0x9686, 0x0003, 0x0904,
-	0xba93, 0x96b6, 0x001e, 0x1110, 0x080c, 0xae47, 0x0005, 0x00b6,
-	0x00d6, 0x00c6, 0x080c, 0xbc5d, 0x11a0, 0x9006, 0x080c, 0x653c,
-	0x080c, 0x31bc, 0x080c, 0xd22b, 0x2001, 0x0002, 0x080c, 0x6550,
-	0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x910f, 0x080c, 0x9664,
-	0x0418, 0x2009, 0x026e, 0x2104, 0x9086, 0x0009, 0x1160, 0x6010,
-	0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0170, 0x8001, 0xb842,
-	0x601b, 0x000a, 0x0088, 0x2009, 0x026f, 0x2104, 0x9084, 0xff00,
-	0x9086, 0x1900, 0x1108, 0x08a0, 0x080c, 0x31bc, 0x080c, 0xd22b,
-	0x2001, 0x0001, 0x080c, 0xba63, 0x00ce, 0x00de, 0x00be, 0x0005,
-	0x0096, 0x00b6, 0x0026, 0x9016, 0x080c, 0xbc6b, 0x00d6, 0x2069,
-	0x197c, 0x2d04, 0x9005, 0x0168, 0x6010, 0x2058, 0xb8a0, 0x9086,
-	0x007e, 0x1138, 0x2069, 0x1820, 0x2d04, 0x8000, 0x206a, 0x00de,
-	0x0010, 0x00de, 0x0088, 0x9006, 0x080c, 0x653c, 0x2001, 0x0002,
-	0x080c, 0x6550, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x910f,
-	0x080c, 0x9664, 0x0804, 0xbbf5, 0x080c, 0xcb1b, 0x01b0, 0x6014,
-	0x2048, 0xa864, 0x2010, 0x9086, 0x0139, 0x1138, 0x6007, 0x0016,
-	0x2001, 0x0002, 0x080c, 0xd14f, 0x00b0, 0x6014, 0x2048, 0xa864,
-	0xd0fc, 0x0118, 0x2001, 0x0001, 0x0ca8, 0x2001, 0x180e, 0x2004,
-	0xd0dc, 0x0148, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005,
-	0x1110, 0x9006, 0x0c38, 0x080c, 0xb7f9, 0x2009, 0x026e, 0x2134,
-	0x96b4, 0x00ff, 0x9686, 0x0005, 0x0520, 0x9686, 0x000b, 0x01c8,
-	0x2009, 0x026f, 0x2104, 0x9084, 0xff00, 0x1118, 0x9686, 0x0009,
-	0x01c0, 0x9086, 0x1900, 0x1168, 0x9686, 0x0009, 0x0190, 0x2001,
-	0x0004, 0x080c, 0x6550, 0x2001, 0x0028, 0x601a, 0x6007, 0x0052,
-	0x0020, 0x2001, 0x0001, 0x080c, 0xba63, 0x002e, 0x00be, 0x009e,
-	0x0005, 0x9286, 0x0139, 0x0160, 0x6014, 0x2048, 0x080c, 0xcb1b,
-	0x0140, 0xa864, 0x9086, 0x0139, 0x0118, 0xa868, 0xd0fc, 0x0108,
-	0x0c40, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0138,
-	0x8001, 0xb842, 0x601b, 0x000a, 0x6007, 0x0016, 0x08f0, 0xb8a0,
-	0x9086, 0x007e, 0x1138, 0x00e6, 0x2071, 0x1800, 0x080c, 0x5fae,
-	0x00ee, 0x0010, 0x080c, 0x31bc, 0x0860, 0x080c, 0xbc6b, 0x1160,
-	0x2001, 0x0004, 0x080c, 0x6550, 0x6003, 0x0001, 0x6007, 0x0003,
-	0x080c, 0x910f, 0x0804, 0x9664, 0x080c, 0xb7f9, 0x9006, 0x0804,
-	0xba63, 0x0489, 0x1160, 0x2001, 0x0008, 0x080c, 0x6550, 0x6003,
-	0x0001, 0x6007, 0x0005, 0x080c, 0x910f, 0x0804, 0x9664, 0x2001,
-	0x0001, 0x0804, 0xba63, 0x00f9, 0x1160, 0x2001, 0x000a, 0x080c,
-	0x6550, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x910f, 0x0804,
-	0x9664, 0x2001, 0x0001, 0x0804, 0xba63, 0x2009, 0x026e, 0x2104,
-	0x9086, 0x0003, 0x1138, 0x2009, 0x026f, 0x2104, 0x9084, 0xff00,
-	0x9086, 0x2a00, 0x0005, 0x9085, 0x0001, 0x0005, 0x00b6, 0x00c6,
-	0x0016, 0x6110, 0x2158, 0x080c, 0x660f, 0x001e, 0x00ce, 0x00be,
-	0x0005, 0x00b6, 0x00f6, 0x00e6, 0x00d6, 0x0036, 0x0016, 0x6010,
-	0x2058, 0x2009, 0x1837, 0x2104, 0x9085, 0x0003, 0x200a, 0x080c,
-	0xbd11, 0x0560, 0x2009, 0x1837, 0x2104, 0xc0cd, 0x200a, 0x080c,
-	0x6966, 0x0158, 0x9006, 0x2020, 0x2009, 0x002a, 0x080c, 0xe58d,
-	0x2001, 0x180c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a, 0x2009,
-	0x0001, 0x080c, 0x3187, 0x00e6, 0x2071, 0x1800, 0x080c, 0x2f96,
-	0x00ee, 0x00c6, 0x0156, 0x20a9, 0x0781, 0x2009, 0x007f, 0x080c,
-	0x32b4, 0x8108, 0x1f04, 0xbcaf, 0x015e, 0x00ce, 0x080c, 0xbc6e,
-	0x2071, 0x0260, 0x2079, 0x0200, 0x7817, 0x0001, 0x2001, 0x1837,
-	0x200c, 0xc1c5, 0x7018, 0xd0fc, 0x0110, 0xd0dc, 0x0118, 0x7038,
-	0xd0dc, 0x1108, 0xc1c4, 0x7817, 0x0000, 0x2001, 0x1837, 0x2102,
-	0x2079, 0x0100, 0x2e04, 0x9084, 0x00ff, 0x2069, 0x181f, 0x206a,
-	0x78e6, 0x0006, 0x8e70, 0x2e04, 0x2069, 0x1820, 0x206a, 0x78ea,
-	0x7832, 0x7836, 0x2010, 0x9084, 0xff00, 0x001e, 0x9105, 0x2009,
-	0x182c, 0x200a, 0x2200, 0x9084, 0x00ff, 0x2008, 0x080c, 0x2887,
-	0x080c, 0x73b0, 0x0170, 0x2071, 0x0260, 0x2069, 0x1982, 0x7048,
-	0x206a, 0x704c, 0x6806, 0x7050, 0x680a, 0x7054, 0x680e, 0x080c,
-	0xcf2a, 0x0040, 0x2001, 0x0006, 0x080c, 0x6550, 0x080c, 0x31e1,
-	0x080c, 0xae47, 0x001e, 0x003e, 0x00de, 0x00ee, 0x00fe, 0x00be,
-	0x0005, 0x0096, 0x0026, 0x0036, 0x00e6, 0x0156, 0x2019, 0x182c,
-	0x231c, 0x83ff, 0x01f0, 0x2071, 0x0260, 0x7200, 0x9294, 0x00ff,
-	0x7004, 0x9084, 0xff00, 0x9205, 0x9306, 0x1198, 0x2011, 0x0276,
-	0x20a9, 0x0004, 0x2b48, 0x2019, 0x000a, 0x080c, 0xbe03, 0x1148,
-	0x2011, 0x027a, 0x20a9, 0x0004, 0x2019, 0x0006, 0x080c, 0xbe03,
-	0x1100, 0x015e, 0x00ee, 0x003e, 0x002e, 0x009e, 0x0005, 0x00e6,
-	0x2071, 0x0260, 0x7034, 0x9086, 0x0014, 0x11a8, 0x7038, 0x9086,
-	0x0800, 0x1188, 0x703c, 0xd0ec, 0x0160, 0x9084, 0x0f00, 0x9086,
-	0x0100, 0x1138, 0x7054, 0xd0a4, 0x1110, 0xd0ac, 0x0110, 0x9006,
-	0x0010, 0x9085, 0x0001, 0x00ee, 0x0005, 0x00e6, 0x0096, 0x00c6,
-	0x0076, 0x0056, 0x0046, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000,
-	0x2029, 0x19f0, 0x252c, 0x2021, 0x19f6, 0x2424, 0x2061, 0x1cd0,
-	0x2071, 0x1800, 0x7254, 0x7074, 0x9202, 0x1a04, 0xbdcf, 0x080c,
-	0x8958, 0x0904, 0xbdc8, 0x080c, 0xe5be, 0x0904, 0xbdc8, 0x6720,
-	0x9786, 0x0007, 0x0904, 0xbdc8, 0x2500, 0x9c06, 0x0904, 0xbdc8,
-	0x2400, 0x9c06, 0x05e8, 0x3e08, 0x9186, 0x0002, 0x1148, 0x6010,
-	0x9005, 0x0130, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1580,
-	0x00c6, 0x6000, 0x9086, 0x0004, 0x1110, 0x080c, 0x1a5e, 0x9786,
-	0x000a, 0x0148, 0x080c, 0xcd21, 0x1130, 0x00ce, 0x080c, 0xb7f9,
-	0x080c, 0xae78, 0x00e8, 0x6014, 0x2048, 0x080c, 0xcb1b, 0x01a8,
-	0x9786, 0x0003, 0x1530, 0xa867, 0x0103, 0xa87c, 0xd0cc, 0x0130,
-	0x0096, 0xa878, 0x2048, 0x080c, 0x0fb1, 0x009e, 0xab7a, 0xa877,
-	0x0000, 0x080c, 0x6c6d, 0x080c, 0xcd04, 0x080c, 0xae78, 0x00ce,
-	0x9ce0, 0x0018, 0x7068, 0x9c02, 0x1210, 0x0804, 0xbd72, 0x012e,
-	0x000e, 0x002e, 0x004e, 0x005e, 0x007e, 0x00ce, 0x009e, 0x00ee,
-	0x0005, 0x9786, 0x0006, 0x1118, 0x080c, 0xe530, 0x0c30, 0x9786,
-	0x0009, 0x1148, 0x6000, 0x9086, 0x0004, 0x0d08, 0x2009, 0x004c,
-	0x080c, 0xaec2, 0x08e0, 0x9786, 0x000a, 0x0938, 0x0820, 0x220c,
-	0x2304, 0x9106, 0x1130, 0x8210, 0x8318, 0x1f04, 0xbdef, 0x9006,
-	0x0005, 0x2304, 0x9102, 0x0218, 0x2001, 0x0001, 0x0008, 0x9006,
-	0x918d, 0x0001, 0x0005, 0x0136, 0x01c6, 0x0016, 0x8906, 0x8006,
-	0x8007, 0x908c, 0x003f, 0x21e0, 0x9084, 0xffc0, 0x9300, 0x2098,
-	0x3518, 0x20a9, 0x0001, 0x220c, 0x4002, 0x910e, 0x1140, 0x8210,
-	0x8319, 0x1dc8, 0x9006, 0x001e, 0x01ce, 0x013e, 0x0005, 0x220c,
-	0x9102, 0x0218, 0x2001, 0x0001, 0x0010, 0x2001, 0x0000, 0x918d,
-	0x0001, 0x001e, 0x01ce, 0x013e, 0x0005, 0x220c, 0x810f, 0x2304,
-	0x9106, 0x1130, 0x8210, 0x8318, 0x1f04, 0xbe2d, 0x9006, 0x0005,
-	0x918d, 0x0001, 0x0005, 0x6004, 0x908a, 0x0053, 0x1a0c, 0x0dd5,
-	0x080c, 0xcd10, 0x0120, 0x080c, 0xcd21, 0x0168, 0x0028, 0x080c,
-	0x31e1, 0x080c, 0xcd21, 0x0138, 0x080c, 0x955f, 0x080c, 0xae47,
-	0x080c, 0x9664, 0x0005, 0x080c, 0xb7f9, 0x0cb0, 0x9182, 0x0054,
-	0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xbe72, 0xbe72,
-	0xbe72, 0xbe72, 0xbe72, 0xbe72, 0xbe72, 0xbe72, 0xbe72, 0xbe72,
-	0xbe72, 0xbe74, 0xbe74, 0xbe74, 0xbe74, 0xbe72, 0xbe72, 0xbe72,
-	0xbe74, 0xbe72, 0x080c, 0x0dd5, 0x600b, 0xffff, 0x6003, 0x0001,
-	0x6106, 0x080c, 0x90c7, 0x0126, 0x2091, 0x8000, 0x080c, 0x9664,
-	0x012e, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004, 0x9082, 0x0040,
-	0x0804, 0xbf29, 0x9186, 0x0027, 0x1520, 0x080c, 0x955f, 0x080c,
-	0x31bc, 0x080c, 0xd22b, 0x0096, 0x6114, 0x2148, 0x080c, 0xcb1b,
-	0x0198, 0x080c, 0xcd21, 0x1118, 0x080c, 0xb7f9, 0x0068, 0xa867,
-	0x0103, 0xa87b, 0x0029, 0xa877, 0x0000, 0xa97c, 0xc1c5, 0xa97e,
-	0x080c, 0x6c79, 0x080c, 0xcd04, 0x009e, 0x080c, 0xae47, 0x0804,
-	0x9664, 0x9186, 0x0014, 0x1120, 0x6004, 0x9082, 0x0040, 0x04a0,
-	0x9186, 0x0046, 0x0150, 0x9186, 0x0045, 0x0138, 0x9186, 0x0053,
-	0x0120, 0x9186, 0x0048, 0x190c, 0x0dd5, 0x2001, 0x0109, 0x2004,
-	0xd084, 0x0508, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026,
-	0x0036, 0x00f6, 0x00e6, 0x00c6, 0x2079, 0x19e7, 0x2071, 0x1800,
-	0x2061, 0x0100, 0x080c, 0x8fac, 0x00ce, 0x00ee, 0x00fe, 0x003e,
-	0x002e, 0x001e, 0x000e, 0x012e, 0xa001, 0x6000, 0x9086, 0x0002,
-	0x1110, 0x0804, 0xbf67, 0x0005, 0x0002, 0xbf03, 0xbf01, 0xbf01,
-	0xbf01, 0xbf01, 0xbf01, 0xbf01, 0xbf01, 0xbf01, 0xbf01, 0xbf01,
-	0xbf1e, 0xbf1e, 0xbf1e, 0xbf1e, 0xbf01, 0xbf1e, 0xbf01, 0xbf1e,
-	0xbf01, 0x080c, 0x0dd5, 0x080c, 0x955f, 0x0096, 0x6114, 0x2148,
-	0x080c, 0xcb1b, 0x0168, 0xa867, 0x0103, 0xa87b, 0x0006, 0xa877,
-	0x0000, 0xa880, 0xc0ec, 0xa882, 0x080c, 0x6c79, 0x080c, 0xcd04,
-	0x009e, 0x080c, 0xae47, 0x080c, 0x9664, 0x0005, 0x080c, 0x955f,
-	0x080c, 0xcd21, 0x090c, 0xb7f9, 0x080c, 0xae47, 0x080c, 0x9664,
-	0x0005, 0x0002, 0xbf40, 0xbf3e, 0xbf3e, 0xbf3e, 0xbf3e, 0xbf3e,
-	0xbf3e, 0xbf3e, 0xbf3e, 0xbf3e, 0xbf3e, 0xbf57, 0xbf57, 0xbf57,
-	0xbf57, 0xbf3e, 0xbf61, 0xbf3e, 0xbf57, 0xbf3e, 0x080c, 0x0dd5,
-	0x0096, 0x080c, 0x955f, 0x6014, 0x2048, 0x2001, 0x1988, 0x2004,
-	0x6042, 0xa97c, 0xd1ac, 0x0140, 0x6003, 0x0004, 0xa87c, 0x9085,
-	0x0400, 0xa87e, 0x009e, 0x0005, 0x6003, 0x0002, 0x0cb8, 0x080c,
-	0x955f, 0x080c, 0xd22e, 0x080c, 0xd233, 0x6003, 0x000f, 0x0804,
-	0x9664, 0x080c, 0x955f, 0x080c, 0xae47, 0x0804, 0x9664, 0x9182,
-	0x0054, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xbf83,
-	0xbf83, 0xbf83, 0xbf83, 0xbf83, 0xbf85, 0xc062, 0xbf83, 0xc096,
-	0xbf83, 0xbf83, 0xbf83, 0xbf83, 0xbf83, 0xbf83, 0xbf83, 0xbf83,
-	0xbf83, 0xbf83, 0xc096, 0x080c, 0x0dd5, 0x00b6, 0x0096, 0x6114,
-	0x2148, 0x7644, 0x96b4, 0x0fff, 0x86ff, 0x1528, 0x6010, 0x2058,
-	0xb800, 0xd0bc, 0x1904, 0xc051, 0xa87b, 0x0000, 0xa867, 0x0103,
-	0xae76, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115, 0x190c,
-	0xc22b, 0x080c, 0x6a95, 0x6210, 0x2258, 0xba3c, 0x82ff, 0x0110,
-	0x8211, 0xba3e, 0x7044, 0xd0e4, 0x1904, 0xc035, 0x080c, 0xae47,
-	0x009e, 0x00be, 0x0005, 0x968c, 0x0c00, 0x0150, 0x6010, 0x2058,
-	0xb800, 0xd0bc, 0x1904, 0xc039, 0x7348, 0xab92, 0x734c, 0xab8e,
-	0x968c, 0x00ff, 0x9186, 0x0002, 0x0508, 0x9186, 0x0028, 0x1118,
-	0xa87b, 0x001c, 0x00e8, 0xd6dc, 0x01a0, 0xa87b, 0x0015, 0xa87c,
-	0xd0ac, 0x0170, 0xa938, 0xaa34, 0x2100, 0x9205, 0x0148, 0x7048,
-	0x9106, 0x1118, 0x704c, 0x9206, 0x0118, 0xa992, 0xaa8e, 0xc6dc,
-	0x0038, 0xd6d4, 0x0118, 0xa87b, 0x0007, 0x0010, 0xa87b, 0x0000,
-	0xa867, 0x0103, 0xae76, 0x901e, 0xd6c4, 0x01d8, 0x9686, 0x0100,
-	0x1130, 0x7064, 0x9005, 0x1118, 0xc6c4, 0x0804, 0xbf8c, 0x735c,
+	0xaacc, 0xabd0, 0xacd4, 0xadd8, 0x2031, 0x0000, 0x2041, 0x125d,
+	0x080c, 0xb37a, 0x0160, 0x000e, 0x9005, 0x0120, 0x00fe, 0x009e,
+	0x00de, 0x0005, 0x00fe, 0x009e, 0x00de, 0x0804, 0xae61, 0x2001,
+	0x002c, 0x900e, 0x080c, 0xb220, 0x0c70, 0x91b6, 0x0015, 0x0170,
+	0x91b6, 0x0016, 0x0158, 0x91b2, 0x0047, 0x0a0c, 0x0dd5, 0x91b2,
+	0x0050, 0x1a0c, 0x0dd5, 0x9182, 0x0047, 0x00ca, 0x2001, 0x0109,
+	0x2004, 0xd08c, 0x0198, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016,
+	0x0026, 0x080c, 0x90a2, 0x002e, 0x001e, 0x000e, 0x012e, 0xa001,
+	0x6000, 0x9086, 0x0002, 0x1110, 0x0804, 0xafa6, 0x0005, 0xb078,
+	0xb078, 0xb07a, 0xb0b0, 0xb078, 0xb078, 0xb078, 0xb078, 0xb0c3,
+	0x080c, 0x0dd5, 0x00d6, 0x0016, 0x0096, 0x080c, 0x963d, 0x080c,
+	0x97b9, 0x6003, 0x0004, 0x6114, 0x2148, 0xa87c, 0xd0fc, 0x01c0,
+	0xa878, 0xc0fc, 0x9005, 0x1158, 0xa894, 0x9005, 0x0140, 0x2001,
+	0x0000, 0x900e, 0x080c, 0xb220, 0x080c, 0xae61, 0x00a8, 0x6003,
+	0x0002, 0xa8a4, 0xa9a8, 0x9105, 0x1178, 0xa8ae, 0xa8b2, 0x0c78,
+	0xa87f, 0x0020, 0xa88c, 0xa88a, 0xa8a4, 0xa8ae, 0xa8a8, 0xa8b2,
+	0xa8c7, 0x0000, 0xa8cb, 0x0000, 0x009e, 0x001e, 0x00de, 0x0005,
+	0x080c, 0x963d, 0x00d6, 0x0096, 0x6114, 0x2148, 0x080c, 0xcb35,
+	0x0120, 0xa87b, 0x0006, 0x080c, 0x6c81, 0x009e, 0x00de, 0x080c,
+	0xae61, 0x0804, 0x97b9, 0x080c, 0x963d, 0x080c, 0x31bf, 0x080c,
+	0xd245, 0x00d6, 0x0096, 0x6114, 0x2148, 0x080c, 0xcb35, 0x0120,
+	0xa87b, 0x0029, 0x080c, 0x6c81, 0x009e, 0x00de, 0x080c, 0xae61,
+	0x0804, 0x97b9, 0x9182, 0x0047, 0x0002, 0xb0ea, 0xb0ec, 0xb0ea,
+	0xb0ea, 0xb0ea, 0xb0ea, 0xb0ea, 0xb0ea, 0xb0ea, 0xb0ea, 0xb0ea,
+	0xb0ea, 0xb0ec, 0x080c, 0x0dd5, 0x00d6, 0x0096, 0x601f, 0x0000,
+	0x6114, 0x2148, 0xa87b, 0x0000, 0xa883, 0x0000, 0x080c, 0x6c81,
+	0x009e, 0x00de, 0x0804, 0xae61, 0x0026, 0x0036, 0x0056, 0x0066,
+	0x0096, 0x00a6, 0x00f6, 0x0006, 0x080c, 0x0fff, 0x000e, 0x090c,
+	0x0dd5, 0xa960, 0x21e8, 0xa95c, 0x9188, 0x0019, 0x21a0, 0x900e,
+	0x20a9, 0x0020, 0x4104, 0xa87a, 0x2079, 0x1800, 0x7990, 0x9188,
+	0x0018, 0x918c, 0x0fff, 0xa972, 0xac76, 0x2950, 0x00a6, 0x2001,
+	0x0205, 0x2003, 0x0000, 0x901e, 0x2029, 0x0001, 0x9182, 0x0034,
+	0x1228, 0x2011, 0x001f, 0x080c, 0xc730, 0x04c0, 0x2130, 0x2009,
+	0x0034, 0x2011, 0x001f, 0x080c, 0xc730, 0x96b2, 0x0034, 0xb004,
+	0x904d, 0x0110, 0x080c, 0x0fb1, 0x080c, 0x0fff, 0x01d0, 0x8528,
+	0xa867, 0x0110, 0xa86b, 0x0000, 0x2920, 0xb406, 0x968a, 0x003d,
+	0x1230, 0x2608, 0x2011, 0x001b, 0x080c, 0xc730, 0x00b8, 0x96b2,
+	0x003c, 0x2009, 0x003c, 0x2950, 0x2011, 0x001b, 0x080c, 0xc730,
+	0x0c18, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad,
+	0x0050, 0xb566, 0xb070, 0xc0fd, 0xb072, 0x0048, 0x2001, 0x0205,
+	0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad, 0x0050, 0xb566, 0x2a48,
+	0xa804, 0xa807, 0x0000, 0x0006, 0x080c, 0x6c81, 0x000e, 0x2048,
+	0x9005, 0x1db0, 0x00fe, 0x00ae, 0x009e, 0x006e, 0x005e, 0x003e,
+	0x002e, 0x0005, 0x00d6, 0x00f6, 0x0096, 0x0006, 0x080c, 0x0fff,
+	0x000e, 0x090c, 0x0dd5, 0xa960, 0x21e8, 0xa95c, 0x9188, 0x0019,
+	0x21a0, 0x900e, 0x20a9, 0x0020, 0x4104, 0xaa66, 0xa87a, 0x2079,
+	0x1800, 0x7990, 0x810c, 0x9188, 0x000c, 0x9182, 0x001a, 0x0210,
+	0x2009, 0x001a, 0x21a8, 0x810b, 0xa972, 0xac76, 0x2e98, 0xa85c,
+	0x9080, 0x001f, 0x20a0, 0x2001, 0x0205, 0x200c, 0x918d, 0x0080,
+	0x2102, 0x4003, 0x2003, 0x0000, 0x080c, 0x6c81, 0x009e, 0x00fe,
+	0x00de, 0x0005, 0x0016, 0x00d6, 0x00f6, 0x0096, 0x0016, 0x2001,
+	0x0205, 0x200c, 0x918d, 0x0080, 0x2102, 0x001e, 0x2079, 0x0200,
+	0x2e98, 0xa87c, 0xd0ec, 0x0118, 0x9e80, 0x000c, 0x2098, 0x2021,
+	0x003e, 0x901e, 0x9282, 0x0020, 0x0218, 0x2011, 0x0020, 0x2018,
+	0x9486, 0x003e, 0x1170, 0x0096, 0x080c, 0x0fff, 0x2900, 0x009e,
+	0x05c0, 0xa806, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002,
+	0x20a0, 0x3300, 0x908e, 0x0260, 0x0140, 0x2009, 0x0280, 0x9102,
+	0x920a, 0x0218, 0x2010, 0x2100, 0x9318, 0x2200, 0x9402, 0x1228,
+	0x2400, 0x9202, 0x2410, 0x9318, 0x9006, 0x2020, 0x22a8, 0xa800,
+	0x9200, 0xa802, 0x20e1, 0x0000, 0x4003, 0x83ff, 0x0180, 0x3300,
+	0x9086, 0x0280, 0x1130, 0x7814, 0x8000, 0x9085, 0x0080, 0x7816,
+	0x2e98, 0x2310, 0x84ff, 0x0904, 0xb1cf, 0x0804, 0xb1d1, 0x9085,
+	0x0001, 0x7817, 0x0000, 0x009e, 0x00fe, 0x00de, 0x001e, 0x0005,
+	0x00d6, 0x0036, 0x0096, 0x6314, 0x2348, 0xa87a, 0xa982, 0x080c,
+	0x6c75, 0x009e, 0x003e, 0x00de, 0x0005, 0x91b6, 0x0015, 0x1118,
+	0x080c, 0xae61, 0x0030, 0x91b6, 0x0016, 0x190c, 0x0dd5, 0x080c,
+	0xae61, 0x0005, 0x20a9, 0x000e, 0x20e1, 0x0000, 0x2e98, 0x6014,
+	0x0096, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x20a0, 0x009e, 0x4003,
+	0x0136, 0x9080, 0x001b, 0x2011, 0x0006, 0x20a9, 0x0001, 0x3418,
+	0x8318, 0x23a0, 0x4003, 0x3318, 0x8318, 0x2398, 0x8211, 0x1db8,
+	0x2011, 0x0006, 0x013e, 0x20a0, 0x3318, 0x8318, 0x2398, 0x4003,
+	0x3418, 0x8318, 0x23a0, 0x8211, 0x1db8, 0x0096, 0x080c, 0xcb35,
+	0x0130, 0x6014, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0x009e,
+	0x0804, 0xae61, 0x0096, 0x00d6, 0x0036, 0x7330, 0x9386, 0x0200,
+	0x11a8, 0x6010, 0x00b6, 0x2058, 0xb8cf, 0x0000, 0x00be, 0x6014,
+	0x9005, 0x0130, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0xab32,
+	0x080c, 0xae61, 0x003e, 0x00de, 0x009e, 0x0005, 0x0011, 0x1d48,
+	0x0cc8, 0x0006, 0x0016, 0x080c, 0xd230, 0x0188, 0x6014, 0x9005,
+	0x1170, 0x600b, 0x0003, 0x601b, 0x0000, 0x6043, 0x0000, 0x2009,
+	0x0022, 0x080c, 0xb657, 0x9006, 0x001e, 0x000e, 0x0005, 0x9085,
+	0x0001, 0x0cd0, 0x0096, 0x0016, 0x20a9, 0x0014, 0x9e80, 0x000c,
+	0x20e1, 0x0000, 0x2098, 0x6014, 0x2048, 0xa860, 0x20e8, 0xa85c,
+	0x9080, 0x0002, 0x20a0, 0x4003, 0x2001, 0x0205, 0x2003, 0x0001,
+	0x2099, 0x0260, 0x20a9, 0x0016, 0x4003, 0x20a9, 0x000a, 0xa804,
+	0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003,
+	0x2001, 0x0205, 0x2003, 0x0002, 0x2099, 0x0260, 0x20a9, 0x0020,
+	0x4003, 0x2003, 0x0000, 0x6014, 0x2048, 0xa800, 0x2048, 0xa867,
+	0x0103, 0x080c, 0xae61, 0x001e, 0x009e, 0x0005, 0x0096, 0x0016,
+	0x900e, 0x7030, 0x9086, 0x0100, 0x0140, 0x7038, 0x9084, 0x00ff,
+	0x800c, 0x703c, 0x9084, 0x00ff, 0x8004, 0x9080, 0x0004, 0x9108,
+	0x810b, 0x2011, 0x0002, 0x2019, 0x000c, 0x6014, 0x2048, 0x080c,
+	0xc730, 0x080c, 0xcb35, 0x0140, 0x6014, 0x2048, 0xa807, 0x0000,
+	0xa864, 0xa8e2, 0xa867, 0x0103, 0x080c, 0xae61, 0x001e, 0x009e,
+	0x0005, 0x0016, 0x2009, 0x0000, 0x7030, 0x9086, 0x0200, 0x0110,
+	0x2009, 0x0001, 0x0096, 0x6014, 0x904d, 0x090c, 0x0dd5, 0xa97a,
+	0x080c, 0x6c81, 0x009e, 0x080c, 0xae61, 0x001e, 0x0005, 0x0016,
+	0x0096, 0x7030, 0x9086, 0x0100, 0x1118, 0x2009, 0x0004, 0x0010,
+	0x7034, 0x800c, 0x810b, 0x2011, 0x000c, 0x2019, 0x000c, 0x6014,
+	0x2048, 0xa804, 0x0096, 0x9005, 0x0108, 0x2048, 0x080c, 0xc730,
+	0x009e, 0x080c, 0xcb35, 0x0148, 0xa804, 0x9005, 0x1158, 0xa807,
+	0x0000, 0xa864, 0xa8e2, 0xa867, 0x0103, 0x080c, 0xae61, 0x009e,
+	0x001e, 0x0005, 0x0086, 0x2040, 0xa030, 0x8007, 0x9086, 0x0100,
+	0x1118, 0x080c, 0xb813, 0x00e0, 0xa034, 0x8007, 0x800c, 0x8806,
+	0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x000c,
+	0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0xaaa0, 0xab9c,
+	0xaca8, 0xada4, 0x2031, 0x0000, 0x2041, 0x1243, 0x0019, 0x0d08,
+	0x008e, 0x0898, 0x0096, 0x0006, 0x080c, 0x0fff, 0x000e, 0x01b0,
+	0xa8ab, 0x0dcb, 0xa876, 0x000e, 0xa8a2, 0x0006, 0xae6a, 0x2800,
+	0xa89e, 0xa97a, 0xaf72, 0xaa8e, 0xab92, 0xac96, 0xad9a, 0x0086,
+	0x2940, 0x080c, 0x10e9, 0x008e, 0x9085, 0x0001, 0x009e, 0x0005,
+	0x00e6, 0x00d6, 0x0026, 0x7008, 0x9084, 0x00ff, 0x6210, 0x00b6,
+	0x2258, 0xba10, 0x00be, 0x9206, 0x1520, 0x700c, 0x6210, 0x00b6,
+	0x2258, 0xba14, 0x00be, 0x9206, 0x11e0, 0x6043, 0x0000, 0x2c68,
+	0x0016, 0x2009, 0x0035, 0x080c, 0xd1a8, 0x001e, 0x1158, 0x622c,
+	0x2268, 0x2071, 0x026c, 0x6b20, 0x9386, 0x0003, 0x0130, 0x9386,
+	0x0006, 0x0128, 0x080c, 0xae61, 0x0020, 0x0039, 0x0010, 0x080c,
+	0xb48c, 0x002e, 0x00de, 0x00ee, 0x0005, 0x0096, 0x6814, 0x2048,
+	0x9186, 0x0015, 0x0904, 0xb474, 0x918e, 0x0016, 0x1904, 0xb48a,
+	0x700c, 0x908c, 0xff00, 0x9186, 0x1700, 0x0120, 0x9186, 0x0300,
+	0x1904, 0xb44e, 0x89ff, 0x1138, 0x6800, 0x9086, 0x000f, 0x0904,
+	0xb431, 0x0804, 0xb488, 0x6808, 0x9086, 0xffff, 0x1904, 0xb476,
+	0xa87c, 0x9084, 0x0060, 0x9086, 0x0020, 0x1128, 0xa83c, 0xa940,
+	0x9105, 0x1904, 0xb476, 0x6824, 0xd0b4, 0x1904, 0xb476, 0x080c,
+	0xcd1e, 0x685c, 0xa882, 0xa87c, 0xc0dc, 0xc0f4, 0xc0d4, 0xa87e,
+	0x0026, 0x900e, 0x6a18, 0x2001, 0x000a, 0x080c, 0x8f68, 0xa884,
+	0x920a, 0x0208, 0x8011, 0xaa86, 0x82ff, 0x002e, 0x1138, 0x00c6,
+	0x2d60, 0x080c, 0xc85a, 0x00ce, 0x0804, 0xb488, 0x00c6, 0xa868,
+	0xd0fc, 0x1118, 0x080c, 0x60ae, 0x0010, 0x080c, 0x64b4, 0x00ce,
+	0x1904, 0xb476, 0x00c6, 0x2d60, 0x080c, 0xae61, 0x00ce, 0x0804,
+	0xb488, 0x00c6, 0x080c, 0xaeaf, 0x0198, 0x6017, 0x0000, 0x6810,
+	0x6012, 0x080c, 0xcfaa, 0x6023, 0x0003, 0x6904, 0x00c6, 0x2d60,
+	0x080c, 0xae61, 0x00ce, 0x080c, 0xaedc, 0x00ce, 0x0804, 0xb488,
+	0x2001, 0x1988, 0x2004, 0x6842, 0x00ce, 0x04d0, 0x7008, 0x9086,
+	0x000b, 0x11c8, 0x6010, 0x00b6, 0x2058, 0xb900, 0xc1bc, 0xb902,
+	0x00be, 0x00c6, 0x2d60, 0xa87b, 0x0003, 0x080c, 0xd1ea, 0x6007,
+	0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x080c, 0x90f0, 0x080c,
+	0x968d, 0x00ce, 0x00e8, 0x700c, 0x9086, 0x2a00, 0x1138, 0x2001,
+	0x1988, 0x2004, 0x6842, 0x00a0, 0x0479, 0x00a0, 0x89ff, 0x090c,
+	0x0dd5, 0x00c6, 0x00d6, 0x2d60, 0xa867, 0x0103, 0xa87b, 0x0003,
+	0x080c, 0x6a9d, 0x080c, 0xcd1e, 0x080c, 0xae92, 0x00de, 0x00ce,
+	0x080c, 0xae61, 0x009e, 0x0005, 0x9186, 0x0015, 0x1128, 0x2001,
+	0x1988, 0x2004, 0x6842, 0x0068, 0x918e, 0x0016, 0x1160, 0x00c6,
+	0x2d00, 0x2060, 0x080c, 0xe80b, 0x080c, 0x86b2, 0x080c, 0xae61,
+	0x00ce, 0x080c, 0xae61, 0x0005, 0x0026, 0x0036, 0x0046, 0x7228,
+	0xacb0, 0xabac, 0xd2f4, 0x0130, 0x2001, 0x1988, 0x2004, 0x6842,
+	0x0804, 0xb506, 0x00c6, 0x2d60, 0x080c, 0xc75b, 0x00ce, 0x6804,
+	0x9086, 0x0050, 0x1168, 0x00c6, 0x2d00, 0x2060, 0x6003, 0x0001,
+	0x6007, 0x0050, 0x080c, 0x90f0, 0x080c, 0x968d, 0x00ce, 0x04f0,
+	0x6800, 0x9086, 0x000f, 0x01a8, 0x89ff, 0x090c, 0x0dd5, 0x6800,
+	0x9086, 0x0004, 0x1190, 0xa87c, 0xd0ac, 0x0178, 0xa843, 0x0fff,
+	0xa83f, 0x0fff, 0xa880, 0xc0fc, 0xa882, 0x2001, 0x0001, 0x6832,
+	0x0400, 0x2001, 0x0007, 0x6832, 0x00e0, 0xa87c, 0xd0b4, 0x1150,
+	0xd0ac, 0x0db8, 0x6824, 0xd0f4, 0x1d48, 0xa838, 0xa934, 0x9105,
+	0x0d80, 0x0c20, 0xd2ec, 0x1d68, 0x7024, 0x9306, 0x1118, 0x7020,
+	0x9406, 0x0d38, 0x7020, 0x683e, 0x7024, 0x683a, 0x2001, 0x0005,
+	0x6832, 0x080c, 0xcea1, 0x080c, 0x968d, 0x0010, 0x080c, 0xae61,
+	0x004e, 0x003e, 0x002e, 0x0005, 0x00e6, 0x00d6, 0x0026, 0x7008,
+	0x9084, 0x00ff, 0x6210, 0x00b6, 0x2258, 0xba10, 0x00be, 0x9206,
+	0x1904, 0xb571, 0x700c, 0x6210, 0x00b6, 0x2258, 0xba14, 0x00be,
+	0x9206, 0x1904, 0xb571, 0x6038, 0x2068, 0x6824, 0xc0dc, 0x6826,
+	0x6a20, 0x9286, 0x0007, 0x0904, 0xb571, 0x9286, 0x0002, 0x0904,
+	0xb571, 0x9286, 0x0000, 0x05e8, 0x6808, 0x633c, 0x9306, 0x15c8,
+	0x2071, 0x026c, 0x9186, 0x0015, 0x0570, 0x918e, 0x0016, 0x1100,
+	0x00c6, 0x6038, 0x2060, 0x6104, 0x9186, 0x004b, 0x01c0, 0x9186,
+	0x004c, 0x01a8, 0x9186, 0x004d, 0x0190, 0x9186, 0x004e, 0x0178,
+	0x9186, 0x0052, 0x0160, 0x6014, 0x0096, 0x2048, 0x080c, 0xcb35,
+	0x090c, 0x0dd5, 0xa87b, 0x0003, 0x009e, 0x080c, 0xd1ea, 0x6007,
+	0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x080c, 0x90f0, 0x080c,
+	0x968d, 0x00ce, 0x0030, 0x6038, 0x2070, 0x2001, 0x1988, 0x2004,
+	0x7042, 0x080c, 0xae61, 0x002e, 0x00de, 0x00ee, 0x0005, 0x00b6,
+	0x0096, 0x00f6, 0x6014, 0x2048, 0x6010, 0x2058, 0x91b6, 0x0015,
+	0x0130, 0xba08, 0xbb0c, 0xbc00, 0xc48c, 0xbc02, 0x0460, 0x0096,
+	0x0156, 0x0036, 0x0026, 0x2b48, 0x9e90, 0x0010, 0x2019, 0x000a,
+	0x20a9, 0x0004, 0x080c, 0xbe1d, 0x002e, 0x003e, 0x015e, 0x009e,
+	0x1904, 0xb5e0, 0x0096, 0x0156, 0x0036, 0x0026, 0x2b48, 0x9e90,
+	0x0014, 0x2019, 0x0006, 0x20a9, 0x0004, 0x080c, 0xbe1d, 0x002e,
+	0x003e, 0x015e, 0x009e, 0x15a0, 0x7238, 0xba0a, 0x733c, 0xbb0e,
+	0xbc00, 0xc48d, 0xbc02, 0xa804, 0x9005, 0x1128, 0x00fe, 0x009e,
+	0x00be, 0x0804, 0xb265, 0x0096, 0x2048, 0xaa12, 0xab16, 0xac0a,
+	0x009e, 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0,
+	0x9080, 0x0002, 0x2009, 0x002b, 0xaaa0, 0xab9c, 0xaca8, 0xada4,
+	0x2031, 0x0000, 0x2041, 0x1243, 0x080c, 0xb37a, 0x0130, 0x00fe,
+	0x009e, 0x080c, 0xae61, 0x00be, 0x0005, 0x080c, 0xb813, 0x0cb8,
+	0x2b78, 0x00f6, 0x080c, 0x31bf, 0x080c, 0xd245, 0x00fe, 0x00c6,
+	0x080c, 0xae0b, 0x2f00, 0x6012, 0x6017, 0x0000, 0x6023, 0x0001,
+	0x6007, 0x0001, 0x6003, 0x0001, 0x2001, 0x0007, 0x080c, 0x654f,
+	0x080c, 0x657b, 0x080c, 0x9138, 0x080c, 0x968d, 0x00ce, 0x0804,
+	0xb5b3, 0x2100, 0x91b2, 0x0053, 0x1a0c, 0x0dd5, 0x91b2, 0x0040,
+	0x1a04, 0xb669, 0x0002, 0xb657, 0xb657, 0xb64d, 0xb657, 0xb657,
+	0xb657, 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b,
+	0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b,
+	0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b,
+	0xb64b, 0xb64b, 0xb657, 0xb64b, 0xb657, 0xb657, 0xb64b, 0xb64b,
+	0xb64b, 0xb64b, 0xb64b, 0xb64d, 0xb64b, 0xb64b, 0xb64b, 0xb64b,
+	0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb657, 0xb657, 0xb64b,
+	0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b, 0xb64b,
+	0xb657, 0xb64b, 0xb64b, 0x080c, 0x0dd5, 0x0066, 0x00b6, 0x6610,
+	0x2658, 0xb8cc, 0xc08c, 0xb8ce, 0x00be, 0x006e, 0x0000, 0x6003,
+	0x0001, 0x6106, 0x9186, 0x0032, 0x0118, 0x080c, 0x9138, 0x0010,
+	0x080c, 0x90f0, 0x0126, 0x2091, 0x8000, 0x080c, 0x968d, 0x012e,
+	0x0005, 0x2600, 0x0002, 0xb657, 0xb657, 0xb67d, 0xb657, 0xb657,
+	0xb67d, 0xb67d, 0xb67d, 0xb67d, 0xb657, 0xb67d, 0xb657, 0xb67d,
+	0xb657, 0xb67d, 0xb67d, 0xb67d, 0xb67d, 0x080c, 0x0dd5, 0x6004,
+	0x90b2, 0x0053, 0x1a0c, 0x0dd5, 0x91b6, 0x0013, 0x0904, 0xb741,
+	0x91b6, 0x0027, 0x1904, 0xb6fc, 0x080c, 0x9588, 0x6004, 0x080c,
+	0xcd2a, 0x01b0, 0x080c, 0xcd3b, 0x01a8, 0x908e, 0x0021, 0x0904,
+	0xb6f9, 0x908e, 0x0022, 0x1130, 0x080c, 0xb291, 0x0904, 0xb6f5,
+	0x0804, 0xb6f6, 0x908e, 0x003d, 0x0904, 0xb6f9, 0x0804, 0xb6ef,
+	0x080c, 0x31e8, 0x2001, 0x0007, 0x080c, 0x654f, 0x6010, 0x00b6,
+	0x2058, 0xb9a0, 0x00be, 0x080c, 0xb813, 0x9186, 0x007e, 0x1148,
+	0x2001, 0x1837, 0x2014, 0xc285, 0x080c, 0x73bc, 0x1108, 0xc2ad,
+	0x2202, 0x0036, 0x0026, 0x2019, 0x0028, 0x2110, 0x080c, 0xe917,
+	0x002e, 0x003e, 0x0016, 0x0026, 0x0036, 0x2110, 0x2019, 0x0028,
+	0x080c, 0x928b, 0x0076, 0x903e, 0x080c, 0x9168, 0x6010, 0x00b6,
+	0x905d, 0x0100, 0x00be, 0x2c08, 0x080c, 0xe2eb, 0x007e, 0x003e,
+	0x002e, 0x001e, 0x080c, 0xd245, 0x0016, 0x080c, 0xcfa2, 0x080c,
+	0xae61, 0x001e, 0x080c, 0x32bb, 0x080c, 0x968d, 0x0030, 0x080c,
+	0xcfa2, 0x080c, 0xae61, 0x080c, 0x968d, 0x0005, 0x080c, 0xb813,
+	0x0cb0, 0x080c, 0xb84f, 0x0c98, 0x9186, 0x0014, 0x1db0, 0x080c,
+	0x9588, 0x6004, 0x908e, 0x0022, 0x1118, 0x080c, 0xb291, 0x0d68,
+	0x080c, 0x31bf, 0x080c, 0xd245, 0x080c, 0xcd2a, 0x1190, 0x080c,
+	0x31e8, 0x6010, 0x00b6, 0x2058, 0xb9a0, 0x00be, 0x080c, 0xb813,
+	0x9186, 0x007e, 0x1128, 0x2001, 0x1837, 0x200c, 0xc185, 0x2102,
+	0x0870, 0x080c, 0xcd3b, 0x1118, 0x080c, 0xb813, 0x0840, 0x6004,
+	0x908e, 0x0032, 0x1160, 0x00e6, 0x00f6, 0x2071, 0x189e, 0x2079,
+	0x0000, 0x080c, 0x3556, 0x00fe, 0x00ee, 0x0804, 0xb6ef, 0x6004,
+	0x908e, 0x0021, 0x0d48, 0x908e, 0x0022, 0x090c, 0xb813, 0x0804,
+	0xb6ef, 0x90b2, 0x0040, 0x1a04, 0xb7ef, 0x2008, 0x0002, 0xb789,
+	0xb78a, 0xb78d, 0xb790, 0xb793, 0xb796, 0xb787, 0xb787, 0xb787,
+	0xb787, 0xb787, 0xb787, 0xb787, 0xb787, 0xb787, 0xb787, 0xb787,
+	0xb787, 0xb787, 0xb787, 0xb787, 0xb787, 0xb787, 0xb787, 0xb787,
+	0xb787, 0xb787, 0xb787, 0xb787, 0xb787, 0xb799, 0xb7a4, 0xb787,
+	0xb7a6, 0xb7a4, 0xb787, 0xb787, 0xb787, 0xb787, 0xb787, 0xb7a4,
+	0xb7a4, 0xb787, 0xb787, 0xb787, 0xb787, 0xb787, 0xb787, 0xb787,
+	0xb787, 0xb7d6, 0xb7a4, 0xb787, 0xb7a0, 0xb787, 0xb787, 0xb787,
+	0xb7a1, 0xb787, 0xb787, 0xb787, 0xb7a4, 0xb7cd, 0xb787, 0x080c,
+	0x0dd5, 0x00d0, 0x2001, 0x000b, 0x0410, 0x2001, 0x0003, 0x00f8,
+	0x2001, 0x0005, 0x00e0, 0x2001, 0x0001, 0x00c8, 0x2001, 0x0009,
+	0x00b0, 0x080c, 0x9588, 0x6003, 0x0005, 0x080c, 0x968d, 0x0070,
+	0x0018, 0x0010, 0x080c, 0x654f, 0x0804, 0xb7e7, 0x080c, 0x9588,
+	0x080c, 0xd248, 0x6003, 0x0004, 0x080c, 0x968d, 0x0005, 0x080c,
+	0x654f, 0x080c, 0x9588, 0x6003, 0x0002, 0x0036, 0x2019, 0x1852,
+	0x2304, 0x9084, 0xff00, 0x1120, 0x2001, 0x1986, 0x201c, 0x0040,
+	0x8007, 0x909a, 0x0004, 0x0ec0, 0x8003, 0x801b, 0x831b, 0x9318,
+	0x631a, 0x003e, 0x080c, 0x968d, 0x0c08, 0x080c, 0x9588, 0x080c,
+	0xcfa2, 0x080c, 0xae61, 0x080c, 0x968d, 0x08c0, 0x00e6, 0x00f6,
+	0x2071, 0x189e, 0x2079, 0x0000, 0x080c, 0x3556, 0x00fe, 0x00ee,
+	0x080c, 0x9588, 0x080c, 0xae61, 0x080c, 0x968d, 0x0838, 0x080c,
+	0x9588, 0x6003, 0x0002, 0x080c, 0xd248, 0x0804, 0x968d, 0x2600,
+	0x2008, 0x0002, 0xb806, 0xb7e7, 0xb804, 0xb7e7, 0xb7e7, 0xb804,
+	0xb804, 0xb804, 0xb804, 0xb7e7, 0xb804, 0xb7e7, 0xb804, 0xb7e7,
+	0xb804, 0xb804, 0xb804, 0xb804, 0x080c, 0x0dd5, 0x080c, 0x9588,
+	0x0096, 0x6014, 0x2048, 0x080c, 0x6c81, 0x009e, 0x080c, 0xae61,
+	0x080c, 0x968d, 0x0005, 0x00e6, 0x0096, 0x0026, 0x0016, 0x080c,
+	0xcb35, 0x0568, 0x6014, 0x2048, 0xa864, 0x9086, 0x0139, 0x11a8,
+	0xa894, 0x9086, 0x0056, 0x1148, 0x080c, 0x5478, 0x0130, 0x2001,
+	0x0000, 0x900e, 0x2011, 0x4000, 0x0028, 0x2001, 0x0030, 0x900e,
+	0x2011, 0x4005, 0x080c, 0xd10f, 0x0090, 0xa868, 0xd0fc, 0x0178,
+	0xa807, 0x0000, 0x0016, 0x6004, 0x908e, 0x0021, 0x0168, 0x908e,
+	0x003d, 0x0150, 0x001e, 0xa867, 0x0103, 0xa833, 0x0100, 0x001e,
+	0x002e, 0x009e, 0x00ee, 0x0005, 0x001e, 0x0009, 0x0cc0, 0x0096,
+	0x6014, 0x2048, 0xa800, 0x2048, 0xa867, 0x0103, 0xa823, 0x8001,
+	0x009e, 0x0005, 0x00b6, 0x6610, 0x2658, 0xb804, 0x9084, 0x00ff,
+	0x90b2, 0x000c, 0x1a0c, 0x0dd5, 0x6604, 0x96b6, 0x004d, 0x1120,
+	0x080c, 0xd02e, 0x0804, 0xb8df, 0x6604, 0x96b6, 0x0043, 0x1120,
+	0x080c, 0xd077, 0x0804, 0xb8df, 0x6604, 0x96b6, 0x004b, 0x1120,
+	0x080c, 0xd0a3, 0x0804, 0xb8df, 0x6604, 0x96b6, 0x0033, 0x1120,
+	0x080c, 0xcfc4, 0x0804, 0xb8df, 0x6604, 0x96b6, 0x0028, 0x1120,
+	0x080c, 0xcd74, 0x0804, 0xb8df, 0x6604, 0x96b6, 0x0029, 0x1120,
+	0x080c, 0xcdb5, 0x0804, 0xb8df, 0x6604, 0x96b6, 0x001f, 0x1120,
+	0x080c, 0xb23a, 0x0804, 0xb8df, 0x6604, 0x96b6, 0x0000, 0x1118,
+	0x080c, 0xb577, 0x04e0, 0x6604, 0x96b6, 0x0022, 0x1118, 0x080c,
+	0xb272, 0x04a8, 0x6604, 0x96b6, 0x0035, 0x1118, 0x080c, 0xb398,
+	0x0470, 0x6604, 0x96b6, 0x0039, 0x1118, 0x080c, 0xb50c, 0x0438,
+	0x6604, 0x96b6, 0x003d, 0x1118, 0x080c, 0xb2aa, 0x0400, 0x6604,
+	0x96b6, 0x0044, 0x1118, 0x080c, 0xb2e6, 0x00c8, 0x6604, 0x96b6,
+	0x0049, 0x1118, 0x080c, 0xb327, 0x0090, 0x6604, 0x96b6, 0x0041,
+	0x1118, 0x080c, 0xb311, 0x0058, 0x91b6, 0x0015, 0x1110, 0x0063,
+	0x0030, 0x91b6, 0x0016, 0x1128, 0x00be, 0x0804, 0xbb39, 0x00be,
+	0x0005, 0x080c, 0xaef7, 0x0cd8, 0xb8fc, 0xb8ff, 0xb8fc, 0xb946,
+	0xb8fc, 0xbaad, 0xbb46, 0xb8fc, 0xb8fc, 0xbb0f, 0xb8fc, 0xbb25,
+	0x0096, 0x601f, 0x0000, 0x6014, 0x2048, 0xa800, 0x2048, 0xa867,
+	0x0103, 0x009e, 0x0804, 0xae61, 0xa001, 0xa001, 0x0005, 0x00e6,
+	0x2071, 0x1800, 0x7090, 0x9086, 0x0074, 0x1540, 0x080c, 0xe2bc,
+	0x11b0, 0x6010, 0x00b6, 0x2058, 0x7030, 0xd08c, 0x0128, 0xb800,
+	0xd0bc, 0x0110, 0xc0c5, 0xb802, 0x00f9, 0x00be, 0x2001, 0x0006,
+	0x080c, 0x654f, 0x080c, 0x31e8, 0x080c, 0xae61, 0x0098, 0x2001,
+	0x000a, 0x080c, 0x654f, 0x080c, 0x31e8, 0x6003, 0x0001, 0x6007,
+	0x0001, 0x080c, 0x9138, 0x080c, 0x968d, 0x0020, 0x2001, 0x0001,
+	0x080c, 0xba7d, 0x00ee, 0x0005, 0x00d6, 0xb800, 0xd084, 0x0160,
+	0x9006, 0x080c, 0x653b, 0x2069, 0x1847, 0x6804, 0xd0a4, 0x0120,
+	0x2001, 0x0006, 0x080c, 0x657b, 0x00de, 0x0005, 0x00b6, 0x0096,
+	0x00d6, 0x2011, 0x1824, 0x2204, 0x9086, 0x0074, 0x1904, 0xba54,
+	0x6010, 0x2058, 0xbaa0, 0x9286, 0x007e, 0x1120, 0x080c, 0xbc93,
+	0x0804, 0xb9b8, 0x080c, 0xbc88, 0x6010, 0x2058, 0xbaa0, 0x9286,
+	0x0080, 0x1510, 0x6014, 0x9005, 0x01a8, 0x2048, 0xa864, 0x9084,
+	0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, 0x0000, 0x900e, 0x2011,
+	0x4000, 0x080c, 0xd10f, 0x0030, 0xa807, 0x0000, 0xa867, 0x0103,
+	0xa833, 0x0200, 0x2001, 0x0006, 0x080c, 0x654f, 0x080c, 0x31e8,
+	0x080c, 0xae61, 0x0804, 0xba57, 0x080c, 0xba65, 0x6014, 0x9005,
+	0x0190, 0x2048, 0xa868, 0xd0f4, 0x01e8, 0xa864, 0x9084, 0x00ff,
+	0x9086, 0x0039, 0x1d08, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000,
+	0x080c, 0xd10f, 0x08f8, 0x080c, 0xba5b, 0x0160, 0x9006, 0x080c,
+	0x653b, 0x2001, 0x0004, 0x080c, 0x657b, 0x2001, 0x0007, 0x080c,
+	0x654f, 0x08a0, 0x2001, 0x0004, 0x080c, 0x654f, 0x6003, 0x0001,
+	0x6007, 0x0003, 0x080c, 0x9138, 0x080c, 0x968d, 0x0804, 0xba57,
+	0xb85c, 0xd0e4, 0x01d8, 0x080c, 0xcf44, 0x080c, 0x73bc, 0x0118,
+	0xd0dc, 0x1904, 0xb97a, 0x2011, 0x1837, 0x2204, 0xc0ad, 0x2012,
+	0x2001, 0x196d, 0x2004, 0x00f6, 0x2079, 0x0100, 0x78e3, 0x0000,
+	0x080c, 0x28b2, 0x78e2, 0x00fe, 0x0804, 0xb97a, 0x080c, 0xcf81,
+	0x2011, 0x1837, 0x2204, 0xc0a5, 0x2012, 0x0006, 0x080c, 0xe441,
+	0x000e, 0x1904, 0xb97a, 0xc0b5, 0x2012, 0x2001, 0x0006, 0x080c,
+	0x654f, 0x9006, 0x080c, 0x653b, 0x00c6, 0x2001, 0x180f, 0x2004,
+	0xd09c, 0x0520, 0x00f6, 0x2079, 0x0100, 0x00e6, 0x2071, 0x1800,
+	0x700c, 0x9084, 0x00ff, 0x78e6, 0x707e, 0x7010, 0x78ea, 0x7082,
+	0x908c, 0x00ff, 0x00ee, 0x780c, 0xc0b5, 0x780e, 0x00fe, 0x080c,
+	0x2887, 0x00f6, 0x2100, 0x900e, 0x080c, 0x283e, 0x795e, 0x00fe,
+	0x9186, 0x0081, 0x01d8, 0x2009, 0x0081, 0x00c8, 0x2009, 0x00ef,
+	0x00f6, 0x2079, 0x0100, 0x79ea, 0x7932, 0x7936, 0x780c, 0xc0b5,
+	0x780e, 0x00fe, 0x080c, 0x2887, 0x00f6, 0x2079, 0x1800, 0x7982,
+	0x2100, 0x900e, 0x080c, 0x283e, 0x795e, 0x00fe, 0x8108, 0x080c,
+	0x659e, 0x2b00, 0x00ce, 0x1904, 0xb97a, 0x6012, 0x2009, 0x180f,
+	0x210c, 0xd19c, 0x0150, 0x2009, 0x027c, 0x210c, 0x918c, 0x00ff,
+	0xb912, 0x2009, 0x027d, 0x210c, 0xb916, 0x2001, 0x0002, 0x080c,
+	0x654f, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c,
+	0x9138, 0x080c, 0x968d, 0x0018, 0x2001, 0x0001, 0x0431, 0x00de,
+	0x009e, 0x00be, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0a4, 0x0120,
+	0x2001, 0x1848, 0x2004, 0xd0ac, 0x0005, 0x00e6, 0x080c, 0xe970,
+	0x0190, 0x2071, 0x0260, 0x7108, 0x720c, 0x918c, 0x00ff, 0x1118,
+	0x9284, 0xff00, 0x0140, 0x6010, 0x2058, 0xb8a0, 0x9084, 0xff80,
+	0x1110, 0xb912, 0xba16, 0x00ee, 0x0005, 0x2030, 0x9005, 0x0158,
+	0x2001, 0x0007, 0x080c, 0x654f, 0x080c, 0x56e3, 0x1120, 0x2001,
+	0x0007, 0x080c, 0x657b, 0x2600, 0x9005, 0x11b0, 0x6014, 0x0096,
+	0x2048, 0xa868, 0x009e, 0xd0fc, 0x1178, 0x0036, 0x0046, 0x6010,
+	0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, 0x0004, 0x2011, 0x8014,
+	0x080c, 0x4b04, 0x004e, 0x003e, 0x080c, 0x31e8, 0x6020, 0x9086,
+	0x000a, 0x1108, 0x0005, 0x0804, 0xae61, 0x00b6, 0x00e6, 0x0026,
+	0x0016, 0x2071, 0x1800, 0x7090, 0x9086, 0x0014, 0x1904, 0xbb05,
+	0x080c, 0x56e3, 0x1170, 0x6014, 0x9005, 0x1158, 0x0036, 0x0046,
+	0x6010, 0x2058, 0xbba0, 0x2021, 0x0006, 0x080c, 0x4cbb, 0x004e,
+	0x003e, 0x00d6, 0x6010, 0x2058, 0x080c, 0x669a, 0x080c, 0xb934,
+	0x00de, 0x080c, 0xbd59, 0x1588, 0x6010, 0x2058, 0xb890, 0x9005,
+	0x0560, 0x2001, 0x0006, 0x080c, 0x654f, 0x0096, 0x6014, 0x904d,
+	0x01d0, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001,
+	0x0000, 0x900e, 0x2011, 0x4000, 0x080c, 0xd10f, 0x0060, 0xa864,
+	0x9084, 0x00ff, 0x9086, 0x0029, 0x0130, 0xa807, 0x0000, 0xa867,
+	0x0103, 0xa833, 0x0200, 0x009e, 0x080c, 0x31e8, 0x6020, 0x9086,
+	0x000a, 0x0140, 0x080c, 0xae61, 0x0028, 0x080c, 0xb813, 0x9006,
+	0x080c, 0xba7d, 0x001e, 0x002e, 0x00ee, 0x00be, 0x0005, 0x2011,
+	0x1824, 0x2204, 0x9086, 0x0014, 0x1160, 0x2001, 0x0002, 0x080c,
+	0x654f, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x9138, 0x0804,
+	0x968d, 0x2001, 0x0001, 0x0804, 0xba7d, 0x2030, 0x2011, 0x1824,
+	0x2204, 0x9086, 0x0004, 0x1148, 0x96b6, 0x000b, 0x1120, 0x2001,
+	0x0007, 0x080c, 0x654f, 0x0804, 0xae61, 0x2001, 0x0001, 0x0804,
+	0xba7d, 0x0002, 0xb8fc, 0xbb51, 0xb8fc, 0xbb92, 0xb8fc, 0xbc3f,
+	0xbb46, 0xb8fc, 0xb8fc, 0xbc53, 0xb8fc, 0xbc65, 0x6604, 0x9686,
+	0x0003, 0x0904, 0xbaad, 0x96b6, 0x001e, 0x1110, 0x080c, 0xae61,
+	0x0005, 0x00b6, 0x00d6, 0x00c6, 0x080c, 0xbc77, 0x11a0, 0x9006,
+	0x080c, 0x653b, 0x080c, 0x31bf, 0x080c, 0xd245, 0x2001, 0x0002,
+	0x080c, 0x654f, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x9138,
+	0x080c, 0x968d, 0x0418, 0x2009, 0x026e, 0x2104, 0x9086, 0x0009,
+	0x1160, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0170,
+	0x8001, 0xb842, 0x601b, 0x000a, 0x0088, 0x2009, 0x026f, 0x2104,
+	0x9084, 0xff00, 0x9086, 0x1900, 0x1108, 0x08a0, 0x080c, 0x31bf,
+	0x080c, 0xd245, 0x2001, 0x0001, 0x080c, 0xba7d, 0x00ce, 0x00de,
+	0x00be, 0x0005, 0x0096, 0x00b6, 0x0026, 0x9016, 0x080c, 0xbc85,
+	0x00d6, 0x2069, 0x197c, 0x2d04, 0x9005, 0x0168, 0x6010, 0x2058,
+	0xb8a0, 0x9086, 0x007e, 0x1138, 0x2069, 0x1820, 0x2d04, 0x8000,
+	0x206a, 0x00de, 0x0010, 0x00de, 0x0088, 0x9006, 0x080c, 0x653b,
+	0x2001, 0x0002, 0x080c, 0x654f, 0x6003, 0x0001, 0x6007, 0x0002,
+	0x080c, 0x9138, 0x080c, 0x968d, 0x0804, 0xbc0f, 0x080c, 0xcb35,
+	0x01b0, 0x6014, 0x2048, 0xa864, 0x2010, 0x9086, 0x0139, 0x1138,
+	0x6007, 0x0016, 0x2001, 0x0002, 0x080c, 0xd169, 0x00b0, 0x6014,
+	0x2048, 0xa864, 0xd0fc, 0x0118, 0x2001, 0x0001, 0x0ca8, 0x2001,
+	0x180e, 0x2004, 0xd0dc, 0x0148, 0x6010, 0x2058, 0xb840, 0x9084,
+	0x00ff, 0x9005, 0x1110, 0x9006, 0x0c38, 0x080c, 0xb813, 0x2009,
+	0x026e, 0x2134, 0x96b4, 0x00ff, 0x9686, 0x0005, 0x0520, 0x9686,
+	0x000b, 0x01c8, 0x2009, 0x026f, 0x2104, 0x9084, 0xff00, 0x1118,
+	0x9686, 0x0009, 0x01c0, 0x9086, 0x1900, 0x1168, 0x9686, 0x0009,
+	0x0190, 0x2001, 0x0004, 0x080c, 0x654f, 0x2001, 0x0028, 0x601a,
+	0x6007, 0x0052, 0x0020, 0x2001, 0x0001, 0x080c, 0xba7d, 0x002e,
+	0x00be, 0x009e, 0x0005, 0x9286, 0x0139, 0x0160, 0x6014, 0x2048,
+	0x080c, 0xcb35, 0x0140, 0xa864, 0x9086, 0x0139, 0x0118, 0xa868,
+	0xd0fc, 0x0108, 0x0c40, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff,
+	0x9005, 0x0138, 0x8001, 0xb842, 0x601b, 0x000a, 0x6007, 0x0016,
+	0x08f0, 0xb8a0, 0x9086, 0x007e, 0x1138, 0x00e6, 0x2071, 0x1800,
+	0x080c, 0x5fad, 0x00ee, 0x0010, 0x080c, 0x31bf, 0x0860, 0x080c,
+	0xbc85, 0x1160, 0x2001, 0x0004, 0x080c, 0x654f, 0x6003, 0x0001,
+	0x6007, 0x0003, 0x080c, 0x9138, 0x0804, 0x968d, 0x080c, 0xb813,
+	0x9006, 0x0804, 0xba7d, 0x0489, 0x1160, 0x2001, 0x0008, 0x080c,
+	0x654f, 0x6003, 0x0001, 0x6007, 0x0005, 0x080c, 0x9138, 0x0804,
+	0x968d, 0x2001, 0x0001, 0x0804, 0xba7d, 0x00f9, 0x1160, 0x2001,
+	0x000a, 0x080c, 0x654f, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c,
+	0x9138, 0x0804, 0x968d, 0x2001, 0x0001, 0x0804, 0xba7d, 0x2009,
+	0x026e, 0x2104, 0x9086, 0x0003, 0x1138, 0x2009, 0x026f, 0x2104,
+	0x9084, 0xff00, 0x9086, 0x2a00, 0x0005, 0x9085, 0x0001, 0x0005,
+	0x00b6, 0x00c6, 0x0016, 0x6110, 0x2158, 0x080c, 0x660e, 0x001e,
+	0x00ce, 0x00be, 0x0005, 0x00b6, 0x00f6, 0x00e6, 0x00d6, 0x0036,
+	0x0016, 0x6010, 0x2058, 0x2009, 0x1837, 0x2104, 0x9085, 0x0003,
+	0x200a, 0x080c, 0xbd2b, 0x0560, 0x2009, 0x1837, 0x2104, 0xc0cd,
+	0x200a, 0x080c, 0x696e, 0x0158, 0x9006, 0x2020, 0x2009, 0x002a,
+	0x080c, 0xe5ae, 0x2001, 0x180c, 0x200c, 0xc195, 0x2102, 0x2019,
+	0x002a, 0x2009, 0x0001, 0x080c, 0x318a, 0x00e6, 0x2071, 0x1800,
+	0x080c, 0x2f96, 0x00ee, 0x00c6, 0x0156, 0x20a9, 0x0781, 0x2009,
+	0x007f, 0x080c, 0x32bb, 0x8108, 0x1f04, 0xbcc9, 0x015e, 0x00ce,
+	0x080c, 0xbc88, 0x2071, 0x0260, 0x2079, 0x0200, 0x7817, 0x0001,
+	0x2001, 0x1837, 0x200c, 0xc1c5, 0x7018, 0xd0fc, 0x0110, 0xd0dc,
+	0x0118, 0x7038, 0xd0dc, 0x1108, 0xc1c4, 0x7817, 0x0000, 0x2001,
+	0x1837, 0x2102, 0x2079, 0x0100, 0x2e04, 0x9084, 0x00ff, 0x2069,
+	0x181f, 0x206a, 0x78e6, 0x0006, 0x8e70, 0x2e04, 0x2069, 0x1820,
+	0x206a, 0x78ea, 0x7832, 0x7836, 0x2010, 0x9084, 0xff00, 0x001e,
+	0x9105, 0x2009, 0x182c, 0x200a, 0x2200, 0x9084, 0x00ff, 0x2008,
+	0x080c, 0x2887, 0x080c, 0x73bc, 0x0170, 0x2071, 0x0260, 0x2069,
+	0x1982, 0x7048, 0x206a, 0x704c, 0x6806, 0x7050, 0x680a, 0x7054,
+	0x680e, 0x080c, 0xcf44, 0x0040, 0x2001, 0x0006, 0x080c, 0x654f,
+	0x080c, 0x31e8, 0x080c, 0xae61, 0x001e, 0x003e, 0x00de, 0x00ee,
+	0x00fe, 0x00be, 0x0005, 0x0096, 0x0026, 0x0036, 0x00e6, 0x0156,
+	0x2019, 0x182c, 0x231c, 0x83ff, 0x01f0, 0x2071, 0x0260, 0x7200,
+	0x9294, 0x00ff, 0x7004, 0x9084, 0xff00, 0x9205, 0x9306, 0x1198,
+	0x2011, 0x0276, 0x20a9, 0x0004, 0x2b48, 0x2019, 0x000a, 0x080c,
+	0xbe1d, 0x1148, 0x2011, 0x027a, 0x20a9, 0x0004, 0x2019, 0x0006,
+	0x080c, 0xbe1d, 0x1100, 0x015e, 0x00ee, 0x003e, 0x002e, 0x009e,
+	0x0005, 0x00e6, 0x2071, 0x0260, 0x7034, 0x9086, 0x0014, 0x11a8,
+	0x7038, 0x9086, 0x0800, 0x1188, 0x703c, 0xd0ec, 0x0160, 0x9084,
+	0x0f00, 0x9086, 0x0100, 0x1138, 0x7054, 0xd0a4, 0x1110, 0xd0ac,
+	0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x00ee, 0x0005, 0x00e6,
+	0x0096, 0x00c6, 0x0076, 0x0056, 0x0046, 0x0026, 0x0006, 0x0126,
+	0x2091, 0x8000, 0x2029, 0x19f0, 0x252c, 0x2021, 0x19f6, 0x2424,
+	0x2061, 0x1cd0, 0x2071, 0x1800, 0x7254, 0x7074, 0x9202, 0x1a04,
+	0xbde9, 0x080c, 0x8981, 0x0904, 0xbde2, 0x080c, 0xe5df, 0x0904,
+	0xbde2, 0x6720, 0x9786, 0x0007, 0x0904, 0xbde2, 0x2500, 0x9c06,
+	0x0904, 0xbde2, 0x2400, 0x9c06, 0x05e8, 0x3e08, 0x9186, 0x0002,
+	0x1148, 0x6010, 0x9005, 0x0130, 0x00b6, 0x2058, 0xb800, 0x00be,
+	0xd0bc, 0x1580, 0x00c6, 0x6000, 0x9086, 0x0004, 0x1110, 0x080c,
+	0x1a5e, 0x9786, 0x000a, 0x0148, 0x080c, 0xcd3b, 0x1130, 0x00ce,
+	0x080c, 0xb813, 0x080c, 0xae92, 0x00e8, 0x6014, 0x2048, 0x080c,
+	0xcb35, 0x01a8, 0x9786, 0x0003, 0x1530, 0xa867, 0x0103, 0xa87c,
+	0xd0cc, 0x0130, 0x0096, 0xa878, 0x2048, 0x080c, 0x0fb1, 0x009e,
+	0xab7a, 0xa877, 0x0000, 0x080c, 0x6c75, 0x080c, 0xcd1e, 0x080c,
+	0xae92, 0x00ce, 0x9ce0, 0x0018, 0x7068, 0x9c02, 0x1210, 0x0804,
+	0xbd8c, 0x012e, 0x000e, 0x002e, 0x004e, 0x005e, 0x007e, 0x00ce,
+	0x009e, 0x00ee, 0x0005, 0x9786, 0x0006, 0x1118, 0x080c, 0xe551,
+	0x0c30, 0x9786, 0x0009, 0x1148, 0x6000, 0x9086, 0x0004, 0x0d08,
+	0x2009, 0x004c, 0x080c, 0xaedc, 0x08e0, 0x9786, 0x000a, 0x0938,
+	0x0820, 0x220c, 0x2304, 0x9106, 0x1130, 0x8210, 0x8318, 0x1f04,
+	0xbe09, 0x9006, 0x0005, 0x2304, 0x9102, 0x0218, 0x2001, 0x0001,
+	0x0008, 0x9006, 0x918d, 0x0001, 0x0005, 0x0136, 0x01c6, 0x0016,
+	0x8906, 0x8006, 0x8007, 0x908c, 0x003f, 0x21e0, 0x9084, 0xffc0,
+	0x9300, 0x2098, 0x3518, 0x20a9, 0x0001, 0x220c, 0x4002, 0x910e,
+	0x1140, 0x8210, 0x8319, 0x1dc8, 0x9006, 0x001e, 0x01ce, 0x013e,
+	0x0005, 0x220c, 0x9102, 0x0218, 0x2001, 0x0001, 0x0010, 0x2001,
+	0x0000, 0x918d, 0x0001, 0x001e, 0x01ce, 0x013e, 0x0005, 0x220c,
+	0x810f, 0x2304, 0x9106, 0x1130, 0x8210, 0x8318, 0x1f04, 0xbe47,
+	0x9006, 0x0005, 0x918d, 0x0001, 0x0005, 0x6004, 0x908a, 0x0053,
+	0x1a0c, 0x0dd5, 0x080c, 0xcd2a, 0x0120, 0x080c, 0xcd3b, 0x0168,
+	0x0028, 0x080c, 0x31e8, 0x080c, 0xcd3b, 0x0138, 0x080c, 0x9588,
+	0x080c, 0xae61, 0x080c, 0x968d, 0x0005, 0x080c, 0xb813, 0x0cb0,
+	0x9182, 0x0054, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005,
+	0xbe8c, 0xbe8c, 0xbe8c, 0xbe8c, 0xbe8c, 0xbe8c, 0xbe8c, 0xbe8c,
+	0xbe8c, 0xbe8c, 0xbe8c, 0xbe8e, 0xbe8e, 0xbe8e, 0xbe8e, 0xbe8c,
+	0xbe8c, 0xbe8c, 0xbe8e, 0xbe8c, 0x080c, 0x0dd5, 0x600b, 0xffff,
+	0x6003, 0x0001, 0x6106, 0x080c, 0x90f0, 0x0126, 0x2091, 0x8000,
+	0x080c, 0x968d, 0x012e, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004,
+	0x9082, 0x0040, 0x0804, 0xbf43, 0x9186, 0x0027, 0x1520, 0x080c,
+	0x9588, 0x080c, 0x31bf, 0x080c, 0xd245, 0x0096, 0x6114, 0x2148,
+	0x080c, 0xcb35, 0x0198, 0x080c, 0xcd3b, 0x1118, 0x080c, 0xb813,
+	0x0068, 0xa867, 0x0103, 0xa87b, 0x0029, 0xa877, 0x0000, 0xa97c,
+	0xc1c5, 0xa97e, 0x080c, 0x6c81, 0x080c, 0xcd1e, 0x009e, 0x080c,
+	0xae61, 0x0804, 0x968d, 0x9186, 0x0014, 0x1120, 0x6004, 0x9082,
+	0x0040, 0x04a0, 0x9186, 0x0046, 0x0150, 0x9186, 0x0045, 0x0138,
+	0x9186, 0x0053, 0x0120, 0x9186, 0x0048, 0x190c, 0x0dd5, 0x2001,
+	0x0109, 0x2004, 0xd084, 0x0508, 0x0126, 0x2091, 0x2800, 0x0006,
+	0x0016, 0x0026, 0x0036, 0x00f6, 0x00e6, 0x00c6, 0x2079, 0x19e7,
+	0x2071, 0x1800, 0x2061, 0x0100, 0x080c, 0x8fd5, 0x00ce, 0x00ee,
+	0x00fe, 0x003e, 0x002e, 0x001e, 0x000e, 0x012e, 0xa001, 0x6000,
+	0x9086, 0x0002, 0x1110, 0x0804, 0xbf81, 0x0005, 0x0002, 0xbf1d,
+	0xbf1b, 0xbf1b, 0xbf1b, 0xbf1b, 0xbf1b, 0xbf1b, 0xbf1b, 0xbf1b,
+	0xbf1b, 0xbf1b, 0xbf38, 0xbf38, 0xbf38, 0xbf38, 0xbf1b, 0xbf38,
+	0xbf1b, 0xbf38, 0xbf1b, 0x080c, 0x0dd5, 0x080c, 0x9588, 0x0096,
+	0x6114, 0x2148, 0x080c, 0xcb35, 0x0168, 0xa867, 0x0103, 0xa87b,
+	0x0006, 0xa877, 0x0000, 0xa880, 0xc0ec, 0xa882, 0x080c, 0x6c81,
+	0x080c, 0xcd1e, 0x009e, 0x080c, 0xae61, 0x080c, 0x968d, 0x0005,
+	0x080c, 0x9588, 0x080c, 0xcd3b, 0x090c, 0xb813, 0x080c, 0xae61,
+	0x080c, 0x968d, 0x0005, 0x0002, 0xbf5a, 0xbf58, 0xbf58, 0xbf58,
+	0xbf58, 0xbf58, 0xbf58, 0xbf58, 0xbf58, 0xbf58, 0xbf58, 0xbf71,
+	0xbf71, 0xbf71, 0xbf71, 0xbf58, 0xbf7b, 0xbf58, 0xbf71, 0xbf58,
+	0x080c, 0x0dd5, 0x0096, 0x080c, 0x9588, 0x6014, 0x2048, 0x2001,
+	0x1988, 0x2004, 0x6042, 0xa97c, 0xd1ac, 0x0140, 0x6003, 0x0004,
+	0xa87c, 0x9085, 0x0400, 0xa87e, 0x009e, 0x0005, 0x6003, 0x0002,
+	0x0cb8, 0x080c, 0x9588, 0x080c, 0xd248, 0x080c, 0xd24d, 0x6003,
+	0x000f, 0x0804, 0x968d, 0x080c, 0x9588, 0x080c, 0xae61, 0x0804,
+	0x968d, 0x9182, 0x0054, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a,
+	0x0005, 0xbf9d, 0xbf9d, 0xbf9d, 0xbf9d, 0xbf9d, 0xbf9f, 0xc07c,
+	0xbf9d, 0xc0b0, 0xbf9d, 0xbf9d, 0xbf9d, 0xbf9d, 0xbf9d, 0xbf9d,
+	0xbf9d, 0xbf9d, 0xbf9d, 0xbf9d, 0xc0b0, 0x080c, 0x0dd5, 0x00b6,
+	0x0096, 0x6114, 0x2148, 0x7644, 0x96b4, 0x0fff, 0x86ff, 0x1528,
+	0x6010, 0x2058, 0xb800, 0xd0bc, 0x1904, 0xc06b, 0xa87b, 0x0000,
+	0xa867, 0x0103, 0xae76, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938,
+	0x9115, 0x190c, 0xc245, 0x080c, 0x6a9d, 0x6210, 0x2258, 0xba3c,
+	0x82ff, 0x0110, 0x8211, 0xba3e, 0x7044, 0xd0e4, 0x1904, 0xc04f,
+	0x080c, 0xae61, 0x009e, 0x00be, 0x0005, 0x968c, 0x0c00, 0x0150,
+	0x6010, 0x2058, 0xb800, 0xd0bc, 0x1904, 0xc053, 0x7348, 0xab92,
+	0x734c, 0xab8e, 0x968c, 0x00ff, 0x9186, 0x0002, 0x0508, 0x9186,
+	0x0028, 0x1118, 0xa87b, 0x001c, 0x00e8, 0xd6dc, 0x01a0, 0xa87b,
+	0x0015, 0xa87c, 0xd0ac, 0x0170, 0xa938, 0xaa34, 0x2100, 0x9205,
+	0x0148, 0x7048, 0x9106, 0x1118, 0x704c, 0x9206, 0x0118, 0xa992,
+	0xaa8e, 0xc6dc, 0x0038, 0xd6d4, 0x0118, 0xa87b, 0x0007, 0x0010,
+	0xa87b, 0x0000, 0xa867, 0x0103, 0xae76, 0x901e, 0xd6c4, 0x01d8,
+	0x9686, 0x0100, 0x1130, 0x7064, 0x9005, 0x1118, 0xc6c4, 0x0804,
+	0xbfa6, 0x735c, 0xab86, 0x83ff, 0x0170, 0x938a, 0x0009, 0x0210,
+	0x2019, 0x0008, 0x0036, 0x2308, 0x2019, 0x0018, 0x2011, 0x0025,
+	0x080c, 0xc730, 0x003e, 0xd6cc, 0x0904, 0xbfbb, 0x7154, 0xa98a,
+	0x81ff, 0x0904, 0xbfbb, 0x9192, 0x0021, 0x1278, 0x8304, 0x9098,
+	0x0018, 0x2011, 0x0029, 0x080c, 0xc730, 0x2011, 0x0205, 0x2013,
+	0x0000, 0x080c, 0xd1d5, 0x0804, 0xbfbb, 0xa868, 0xd0fc, 0x0120,
+	0x2009, 0x0020, 0xa98a, 0x0c50, 0x00a6, 0x2950, 0x080c, 0xc6cf,
+	0x00ae, 0x080c, 0xd1d5, 0x080c, 0xc720, 0x0804, 0xbfbd, 0x080c,
+	0xce2e, 0x0804, 0xbfca, 0xa87c, 0xd0ac, 0x0904, 0xbfd6, 0xa880,
+	0xd0bc, 0x1904, 0xbfd6, 0x7348, 0xa838, 0x9306, 0x11c8, 0x734c,
+	0xa834, 0x931e, 0x0904, 0xbfd6, 0xd6d4, 0x0190, 0xab38, 0x9305,
+	0x0904, 0xbfd6, 0x0068, 0xa87c, 0xd0ac, 0x0904, 0xbfae, 0xa838,
+	0xa934, 0x9105, 0x0904, 0xbfae, 0xa880, 0xd0bc, 0x1904, 0xbfae,
+	0x080c, 0xce68, 0x0804, 0xbfca, 0x0096, 0x00f6, 0x6003, 0x0003,
+	0x6007, 0x0043, 0x2079, 0x026c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08,
+	0x6014, 0x2048, 0xa87c, 0xd0ac, 0x0140, 0x6003, 0x0002, 0x00fe,
+	0x009e, 0x0005, 0x2130, 0x2228, 0x0058, 0x2400, 0xa9ac, 0x910a,
+	0x2300, 0xaab0, 0x9213, 0x2600, 0x9102, 0x2500, 0x9203, 0x0e90,
+	0xac36, 0xab3a, 0xae46, 0xad4a, 0x00fe, 0x6043, 0x0000, 0x2c10,
+	0x080c, 0x1bad, 0x080c, 0x9155, 0x080c, 0x97b9, 0x009e, 0x0005,
+	0x0005, 0x9182, 0x0054, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a,
+	0x0005, 0xc0cd, 0xc0cd, 0xc0cd, 0xc0cd, 0xc0cd, 0xc0cf, 0xc165,
+	0xc0cd, 0xc0cd, 0xc17c, 0xc208, 0xc0cd, 0xc0cd, 0xc0cd, 0xc0cd,
+	0xc21d, 0xc0cd, 0xc0cd, 0xc0cd, 0xc0cd, 0x080c, 0x0dd5, 0x0076,
+	0x00a6, 0x00e6, 0x0096, 0x2071, 0x0260, 0x6114, 0x2150, 0x7644,
+	0xb676, 0x96b4, 0x0fff, 0xb77c, 0xc7e5, 0xb77e, 0x6210, 0x00b6,
+	0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, 0x00be, 0x86ff,
+	0x0904, 0xc160, 0x9694, 0xff00, 0x9284, 0x0c00, 0x0120, 0x7048,
+	0xb092, 0x704c, 0xb08e, 0x9284, 0x0300, 0x0904, 0xc160, 0x080c,
+	0x0fff, 0x090c, 0x0dd5, 0x2900, 0xb07a, 0xb77c, 0xc7cd, 0xb77e,
+	0xa867, 0x0103, 0xb068, 0xa86a, 0xb06c, 0xa86e, 0xb070, 0xa872,
+	0xae76, 0x968c, 0x0c00, 0x0120, 0x7348, 0xab92, 0x734c, 0xab8e,
+	0x968c, 0x00ff, 0x9186, 0x0002, 0x0180, 0x9186, 0x0028, 0x1118,
+	0xa87b, 0x001c, 0x0060, 0xd6dc, 0x0118, 0xa87b, 0x0015, 0x0038,
+	0xd6d4, 0x0118, 0xa87b, 0x0007, 0x0010, 0xa87b, 0x0000, 0xaf7e,
+	0xb080, 0xa882, 0xb084, 0xa886, 0x901e, 0xd6c4, 0x0190, 0x735c,
 	0xab86, 0x83ff, 0x0170, 0x938a, 0x0009, 0x0210, 0x2019, 0x0008,
-	0x0036, 0x2308, 0x2019, 0x0018, 0x2011, 0x0025, 0x080c, 0xc716,
-	0x003e, 0xd6cc, 0x0904, 0xbfa1, 0x7154, 0xa98a, 0x81ff, 0x0904,
-	0xbfa1, 0x9192, 0x0021, 0x1278, 0x8304, 0x9098, 0x0018, 0x2011,
-	0x0029, 0x080c, 0xc716, 0x2011, 0x0205, 0x2013, 0x0000, 0x080c,
-	0xd1bb, 0x0804, 0xbfa1, 0xa868, 0xd0fc, 0x0120, 0x2009, 0x0020,
-	0xa98a, 0x0c50, 0x00a6, 0x2950, 0x080c, 0xc6b5, 0x00ae, 0x080c,
-	0xd1bb, 0x080c, 0xc706, 0x0804, 0xbfa3, 0x080c, 0xce14, 0x0804,
-	0xbfb0, 0xa87c, 0xd0ac, 0x0904, 0xbfbc, 0xa880, 0xd0bc, 0x1904,
-	0xbfbc, 0x7348, 0xa838, 0x9306, 0x11c8, 0x734c, 0xa834, 0x931e,
-	0x0904, 0xbfbc, 0xd6d4, 0x0190, 0xab38, 0x9305, 0x0904, 0xbfbc,
-	0x0068, 0xa87c, 0xd0ac, 0x0904, 0xbf94, 0xa838, 0xa934, 0x9105,
-	0x0904, 0xbf94, 0xa880, 0xd0bc, 0x1904, 0xbf94, 0x080c, 0xce4e,
-	0x0804, 0xbfb0, 0x0096, 0x00f6, 0x6003, 0x0003, 0x6007, 0x0043,
-	0x2079, 0x026c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x6014, 0x2048,
-	0xa87c, 0xd0ac, 0x0140, 0x6003, 0x0002, 0x00fe, 0x009e, 0x0005,
-	0x2130, 0x2228, 0x0058, 0x2400, 0xa9ac, 0x910a, 0x2300, 0xaab0,
-	0x9213, 0x2600, 0x9102, 0x2500, 0x9203, 0x0e90, 0xac36, 0xab3a,
-	0xae46, 0xad4a, 0x00fe, 0x6043, 0x0000, 0x2c10, 0x080c, 0x1bad,
-	0x080c, 0x912c, 0x080c, 0x9790, 0x009e, 0x0005, 0x0005, 0x9182,
-	0x0054, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xc0b3,
-	0xc0b3, 0xc0b3, 0xc0b3, 0xc0b3, 0xc0b5, 0xc14b, 0xc0b3, 0xc0b3,
-	0xc162, 0xc1ee, 0xc0b3, 0xc0b3, 0xc0b3, 0xc0b3, 0xc203, 0xc0b3,
-	0xc0b3, 0xc0b3, 0xc0b3, 0x080c, 0x0dd5, 0x0076, 0x00a6, 0x00e6,
-	0x0096, 0x2071, 0x0260, 0x6114, 0x2150, 0x7644, 0xb676, 0x96b4,
-	0x0fff, 0xb77c, 0xc7e5, 0xb77e, 0x6210, 0x00b6, 0x2258, 0xba3c,
-	0x82ff, 0x0110, 0x8211, 0xba3e, 0x00be, 0x86ff, 0x0904, 0xc146,
-	0x9694, 0xff00, 0x9284, 0x0c00, 0x0120, 0x7048, 0xb092, 0x704c,
-	0xb08e, 0x9284, 0x0300, 0x0904, 0xc146, 0x080c, 0x0fff, 0x090c,
-	0x0dd5, 0x2900, 0xb07a, 0xb77c, 0xc7cd, 0xb77e, 0xa867, 0x0103,
-	0xb068, 0xa86a, 0xb06c, 0xa86e, 0xb070, 0xa872, 0xae76, 0x968c,
-	0x0c00, 0x0120, 0x7348, 0xab92, 0x734c, 0xab8e, 0x968c, 0x00ff,
-	0x9186, 0x0002, 0x0180, 0x9186, 0x0028, 0x1118, 0xa87b, 0x001c,
-	0x0060, 0xd6dc, 0x0118, 0xa87b, 0x0015, 0x0038, 0xd6d4, 0x0118,
-	0xa87b, 0x0007, 0x0010, 0xa87b, 0x0000, 0xaf7e, 0xb080, 0xa882,
-	0xb084, 0xa886, 0x901e, 0xd6c4, 0x0190, 0x735c, 0xab86, 0x83ff,
-	0x0170, 0x938a, 0x0009, 0x0210, 0x2019, 0x0008, 0x0036, 0x2308,
-	0x2019, 0x0018, 0x2011, 0x0025, 0x080c, 0xc716, 0x003e, 0xd6cc,
-	0x01e8, 0x7154, 0xa98a, 0x81ff, 0x01c8, 0x9192, 0x0021, 0x1260,
-	0x8304, 0x9098, 0x0018, 0x2011, 0x0029, 0x080c, 0xc716, 0x2011,
-	0x0205, 0x2013, 0x0000, 0x0050, 0xb068, 0xd0fc, 0x0120, 0x2009,
-	0x0020, 0xa98a, 0x0c68, 0x2950, 0x080c, 0xc6b5, 0x009e, 0x00ee,
-	0x00ae, 0x007e, 0x0005, 0x00f6, 0x00a6, 0x6003, 0x0003, 0x2079,
-	0x026c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x6014, 0x2050, 0xb436,
-	0xb33a, 0xb646, 0xb54a, 0x00ae, 0x00fe, 0x2c10, 0x080c, 0x1bad,
-	0x0804, 0xa226, 0x6003, 0x0002, 0x6004, 0x9086, 0x0040, 0x11c8,
-	0x0096, 0x6014, 0x2048, 0xa87c, 0xd0ac, 0x0160, 0x601c, 0xd084,
-	0x1130, 0x00f6, 0x2c00, 0x2078, 0x080c, 0x1725, 0x00fe, 0x6003,
-	0x0004, 0x0010, 0x6003, 0x0002, 0x009e, 0x080c, 0x955f, 0x080c,
-	0x9664, 0x0096, 0x2001, 0x1988, 0x2004, 0x6042, 0x080c, 0x9614,
-	0x080c, 0x9790, 0x6114, 0x2148, 0xa97c, 0xd1e4, 0x0904, 0xc1e9,
-	0xd1cc, 0x05a8, 0xa978, 0xa868, 0xd0fc, 0x0538, 0x0016, 0xa87c,
-	0x0006, 0xa880, 0x0006, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0019,
-	0x20a0, 0x810e, 0x810e, 0x810f, 0x9184, 0x003f, 0x20e0, 0x9184,
-	0xffc0, 0x9080, 0x0019, 0x2098, 0x0156, 0x20a9, 0x0020, 0x4003,
-	0x015e, 0x000e, 0xa882, 0x000e, 0xa87e, 0x001e, 0xa874, 0x0006,
-	0x2148, 0x080c, 0x0fb1, 0x001e, 0x0440, 0x0016, 0x080c, 0x0fb1,
-	0x009e, 0xa974, 0x0016, 0x080c, 0xc706, 0x001e, 0x00f0, 0xa867,
-	0x0103, 0xa974, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x0180, 0x9086,
-	0x0028, 0x1118, 0xa87b, 0x001c, 0x0060, 0xd1dc, 0x0118, 0xa87b,
-	0x0015, 0x0038, 0xd1d4, 0x0118, 0xa87b, 0x0007, 0x0010, 0xa87b,
-	0x0000, 0x0016, 0x080c, 0x6a95, 0x001e, 0xd1e4, 0x1120, 0x080c,
-	0xae47, 0x009e, 0x0005, 0x080c, 0xce14, 0x0cd8, 0x6004, 0x9086,
-	0x0040, 0x1120, 0x080c, 0x955f, 0x080c, 0x9664, 0x2019, 0x0001,
-	0x080c, 0xa59c, 0x6003, 0x0002, 0x080c, 0xd233, 0x080c, 0x9614,
-	0x080c, 0x9790, 0x0005, 0x6004, 0x9086, 0x0040, 0x1120, 0x080c,
-	0x955f, 0x080c, 0x9664, 0x2019, 0x0001, 0x080c, 0xa59c, 0x080c,
-	0x9614, 0x080c, 0x31bc, 0x080c, 0xd22b, 0x0096, 0x6114, 0x2148,
-	0x080c, 0xcb1b, 0x0150, 0xa867, 0x0103, 0xa87b, 0x0029, 0xa877,
-	0x0000, 0x080c, 0x6c79, 0x080c, 0xcd04, 0x009e, 0x080c, 0xae47,
-	0x080c, 0x9790, 0x0005, 0xa87b, 0x0015, 0xd1fc, 0x0180, 0xa87b,
-	0x0007, 0x8002, 0x8000, 0x810a, 0x9189, 0x0000, 0x0006, 0x0016,
-	0x2009, 0x1a7a, 0x2104, 0x8000, 0x200a, 0x001e, 0x000e, 0xa992,
-	0xa88e, 0x0005, 0x9182, 0x0054, 0x1220, 0x9182, 0x0040, 0x0208,
-	0x000a, 0x0005, 0xc25e, 0xc25e, 0xc25e, 0xc25e, 0xc25e, 0xc260,
-	0xc25e, 0xc25e, 0xc306, 0xc25e, 0xc25e, 0xc25e, 0xc25e, 0xc25e,
-	0xc25e, 0xc25e, 0xc25e, 0xc25e, 0xc25e, 0xc437, 0x080c, 0x0dd5,
-	0x0076, 0x00a6, 0x00e6, 0x0096, 0x2071, 0x0260, 0x6114, 0x2150,
-	0x7644, 0xb676, 0x96b4, 0x0fff, 0xb77c, 0xc7e5, 0xb77e, 0x6210,
-	0x00b6, 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, 0x00be,
-	0x86ff, 0x0904, 0xc2ff, 0x9694, 0xff00, 0x9284, 0x0c00, 0x0120,
-	0x7048, 0xb092, 0x704c, 0xb08e, 0x9284, 0x0300, 0x0904, 0xc2ff,
-	0x9686, 0x0100, 0x1130, 0x7064, 0x9005, 0x1118, 0xc6c4, 0xb676,
-	0x0c38, 0x080c, 0x0fff, 0x090c, 0x0dd5, 0x2900, 0xb07a, 0xb77c,
-	0x97bd, 0x0200, 0xb77e, 0xa867, 0x0103, 0xb068, 0xa86a, 0xb06c,
-	0xa86e, 0xb070, 0xa872, 0x7044, 0x9084, 0xf000, 0x9635, 0xae76,
-	0x968c, 0x0c00, 0x0120, 0x7348, 0xab92, 0x734c, 0xab8e, 0x968c,
-	0x00ff, 0x9186, 0x0002, 0x0180, 0x9186, 0x0028, 0x1118, 0xa87b,
-	0x001c, 0x0060, 0xd6dc, 0x0118, 0xa87b, 0x0015, 0x0038, 0xd6d4,
-	0x0118, 0xa87b, 0x0007, 0x0010, 0xa87b, 0x0000, 0xaf7e, 0xb080,
-	0xa882, 0xb084, 0xa886, 0x901e, 0xd6c4, 0x0190, 0x735c, 0xab86,
-	0x83ff, 0x0170, 0x938a, 0x0009, 0x0210, 0x2019, 0x0008, 0x0036,
-	0x2308, 0x2019, 0x0018, 0x2011, 0x0025, 0x080c, 0xc716, 0x003e,
-	0xd6cc, 0x01e8, 0x7154, 0xa98a, 0x81ff, 0x01c8, 0x9192, 0x0021,
-	0x1260, 0x8304, 0x9098, 0x0018, 0x2011, 0x0029, 0x080c, 0xc716,
-	0x2011, 0x0205, 0x2013, 0x0000, 0x0050, 0xb068, 0xd0fc, 0x0120,
-	0x2009, 0x0020, 0xa98a, 0x0c68, 0x2950, 0x080c, 0xc6b5, 0x080c,
-	0x1a3c, 0x009e, 0x00ee, 0x00ae, 0x007e, 0x0005, 0x2001, 0x1988,
-	0x2004, 0x6042, 0x0096, 0x6114, 0x2148, 0xa83c, 0xa940, 0x9105,
-	0x1118, 0xa87c, 0xc0dc, 0xa87e, 0x6003, 0x0002, 0xa97c, 0xd1e4,
-	0x0904, 0xc432, 0x6043, 0x0000, 0x6010, 0x00b6, 0x2058, 0xb800,
-	0x00be, 0xd0bc, 0x1500, 0xd1cc, 0x0904, 0xc401, 0xa978, 0xa868,
-	0xd0fc, 0x0904, 0xc3c2, 0x0016, 0xa87c, 0x0006, 0xa880, 0x0006,
-	0x00a6, 0x2150, 0xb174, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x0904,
-	0xc390, 0x9086, 0x0028, 0x1904, 0xc37c, 0xa87b, 0x001c, 0xb07b,
-	0x001c, 0x0804, 0xc398, 0x6024, 0xd0f4, 0x11d0, 0xa838, 0xaa34,
-	0x9205, 0x09c8, 0xa838, 0xaa90, 0x9206, 0x1120, 0xa88c, 0xaa34,
-	0x9206, 0x0988, 0x6024, 0xd0d4, 0x1148, 0xa9ac, 0xa834, 0x9102,
-	0x603a, 0xa9b0, 0xa838, 0x9103, 0x603e, 0x6024, 0xc0f5, 0x6026,
-	0x6010, 0x00b6, 0x2058, 0xb83c, 0x8000, 0xb83e, 0x00be, 0x9006,
-	0xa876, 0xa892, 0xa88e, 0xa87c, 0xc0e4, 0xa87e, 0xd0cc, 0x0140,
-	0xc0cc, 0xa87e, 0x0096, 0xa878, 0x2048, 0x080c, 0x0fb1, 0x009e,
-	0x080c, 0xce4e, 0x0804, 0xc432, 0xd1dc, 0x0158, 0xa87b, 0x0015,
-	0xb07b, 0x0015, 0x080c, 0xd0de, 0x0118, 0xb174, 0xc1dc, 0xb176,
-	0x0078, 0xd1d4, 0x0128, 0xa87b, 0x0007, 0xb07b, 0x0007, 0x0040,
-	0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115, 0x190c, 0xc22b,
-	0xa87c, 0xb07e, 0xa890, 0xb092, 0xa88c, 0xb08e, 0xa860, 0x20e8,
-	0xa85c, 0x9080, 0x0019, 0x20a0, 0x20a9, 0x0020, 0x8a06, 0x8006,
-	0x8007, 0x9094, 0x003f, 0x22e0, 0x9084, 0xffc0, 0x9080, 0x0019,
-	0x2098, 0x4003, 0x00ae, 0x000e, 0xa882, 0x000e, 0xa87e, 0x080c,
-	0xd1bb, 0x001e, 0xa874, 0x0006, 0x2148, 0x080c, 0x0fb1, 0x001e,
-	0x0804, 0xc42e, 0x0016, 0x00a6, 0x2150, 0xb174, 0x9184, 0x00ff,
-	0x90b6, 0x0002, 0x01e0, 0x9086, 0x0028, 0x1128, 0xa87b, 0x001c,
-	0xb07b, 0x001c, 0x00e0, 0xd1dc, 0x0158, 0xa87b, 0x0015, 0xb07b,
-	0x0015, 0x080c, 0xd0de, 0x0118, 0xb174, 0xc1dc, 0xb176, 0x0078,
-	0xd1d4, 0x0128, 0xa87b, 0x0007, 0xb07b, 0x0007, 0x0040, 0xa87c,
-	0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115, 0x190c, 0xc22b, 0xa890,
-	0xb092, 0xa88c, 0xb08e, 0xa87c, 0xb07e, 0x00ae, 0x080c, 0x0fb1,
-	0x009e, 0x080c, 0xd1bb, 0xa974, 0x0016, 0x080c, 0xc706, 0x001e,
-	0x0468, 0xa867, 0x0103, 0xa974, 0x9184, 0x00ff, 0x90b6, 0x0002,
-	0x01b0, 0x9086, 0x0028, 0x1118, 0xa87b, 0x001c, 0x00d0, 0xd1dc,
-	0x0148, 0xa87b, 0x0015, 0x080c, 0xd0de, 0x0118, 0xa974, 0xc1dc,
-	0xa976, 0x0078, 0xd1d4, 0x0118, 0xa87b, 0x0007, 0x0050, 0xa87b,
-	0x0000, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115, 0x190c,
-	0xc22b, 0xa974, 0x0016, 0x080c, 0x6a95, 0x001e, 0xd1e4, 0x1120,
-	0x080c, 0xae47, 0x009e, 0x0005, 0x080c, 0xce14, 0x0cd8, 0x6114,
-	0x0096, 0x2148, 0xa97c, 0xd1e4, 0x190c, 0x1a4a, 0x009e, 0x0005,
-	0x080c, 0x955f, 0x0010, 0x080c, 0x9614, 0x080c, 0xcb1b, 0x01f0,
-	0x0096, 0x6114, 0x2148, 0x080c, 0xcd21, 0x1118, 0x080c, 0xb7f9,
-	0x00a0, 0xa867, 0x0103, 0x2009, 0x180c, 0x210c, 0xd18c, 0x11b8,
-	0xd184, 0x1190, 0x6108, 0xa97a, 0x918e, 0x0029, 0x1110, 0x080c,
-	0xe8e7, 0xa877, 0x0000, 0x080c, 0x6c79, 0x009e, 0x080c, 0xae47,
-	0x080c, 0x9664, 0x0804, 0x9790, 0xa87b, 0x0004, 0x0c90, 0xa87b,
-	0x0004, 0x0c78, 0x9182, 0x0054, 0x1220, 0x9182, 0x0040, 0x0208,
-	0x000a, 0x0005, 0xc48e, 0xc48e, 0xc48e, 0xc48e, 0xc48e, 0xc490,
-	0xc48e, 0xc48e, 0xc48e, 0xc48e, 0xc48e, 0xc48e, 0xc48e, 0xc48e,
-	0xc48e, 0xc48e, 0xc48e, 0xc48e, 0xc48e, 0xc48e, 0x080c, 0x0dd5,
-	0x080c, 0x56d8, 0x01f8, 0x6014, 0x7144, 0x918c, 0x0fff, 0x9016,
-	0xd1c4, 0x0118, 0x7264, 0x9294, 0x00ff, 0x0096, 0x904d, 0x0188,
-	0xa87b, 0x0000, 0xa864, 0x9086, 0x0139, 0x0128, 0xa867, 0x0103,
-	0xa976, 0xaa96, 0x0030, 0xa897, 0x4000, 0xa99a, 0xaa9e, 0x080c,
-	0x6c79, 0x009e, 0x0804, 0xae47, 0x9182, 0x0085, 0x0002, 0xc4c6,
-	0xc4c4, 0xc4c4, 0xc4d2, 0xc4c4, 0xc4c4, 0xc4c4, 0xc4c4, 0xc4c4,
-	0xc4c4, 0xc4c4, 0xc4c4, 0xc4c4, 0x080c, 0x0dd5, 0x6003, 0x0001,
-	0x6106, 0x080c, 0x90c7, 0x0126, 0x2091, 0x8000, 0x080c, 0x9664,
-	0x012e, 0x0005, 0x0026, 0x0056, 0x00d6, 0x00e6, 0x2071, 0x0260,
-	0x7224, 0x6216, 0x7220, 0x080c, 0xcb09, 0x01a0, 0x2268, 0x6800,
-	0x9086, 0x0000, 0x0178, 0x6010, 0x6d10, 0x952e, 0x1158, 0x00c6,
-	0x2d60, 0x080c, 0xc741, 0x00ce, 0x0128, 0x6803, 0x0002, 0x6007,
-	0x0086, 0x0010, 0x6007, 0x0087, 0x6003, 0x0001, 0x080c, 0x90c7,
-	0x080c, 0x9664, 0x9280, 0x0004, 0x00b6, 0x2058, 0xb800, 0x00be,
-	0xd0bc, 0x0140, 0x6824, 0xd0ec, 0x0128, 0x00c6, 0x2260, 0x080c,
-	0xce4e, 0x00ce, 0x00ee, 0x00de, 0x005e, 0x002e, 0x0005, 0x9186,
-	0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0dd5, 0x908a,
-	0x0092, 0x1a0c, 0x0dd5, 0x9082, 0x0085, 0x00e2, 0x9186, 0x0027,
-	0x0120, 0x9186, 0x0014, 0x190c, 0x0dd5, 0x080c, 0x955f, 0x0096,
-	0x6014, 0x2048, 0x080c, 0xcb1b, 0x0140, 0xa867, 0x0103, 0xa877,
-	0x0000, 0xa87b, 0x0029, 0x080c, 0x6c79, 0x009e, 0x080c, 0xae78,
-	0x0804, 0x9664, 0xc547, 0xc549, 0xc549, 0xc547, 0xc547, 0xc547,
-	0xc547, 0xc547, 0xc547, 0xc547, 0xc547, 0xc547, 0xc547, 0x080c,
-	0x0dd5, 0x080c, 0x955f, 0x080c, 0xae78, 0x080c, 0x9664, 0x0005,
-	0x9186, 0x0013, 0x1128, 0x6004, 0x9082, 0x0085, 0x2008, 0x04b8,
-	0x9186, 0x0027, 0x11f8, 0x080c, 0x955f, 0x080c, 0x31bc, 0x080c,
-	0xd22b, 0x0096, 0x6014, 0x2048, 0x080c, 0xcb1b, 0x0150, 0xa867,
-	0x0103, 0xa877, 0x0000, 0xa87b, 0x0029, 0x080c, 0x6c79, 0x080c,
-	0xcd04, 0x009e, 0x080c, 0xae47, 0x080c, 0x9664, 0x0005, 0x080c,
-	0xaedd, 0x0ce0, 0x9186, 0x0014, 0x1dd0, 0x080c, 0x955f, 0x0096,
-	0x6014, 0x2048, 0x080c, 0xcb1b, 0x0d60, 0xa867, 0x0103, 0xa877,
-	0x0000, 0xa87b, 0x0006, 0xa880, 0xc0ec, 0xa882, 0x08f0, 0x0002,
-	0xc59f, 0xc59d, 0xc59d, 0xc59d, 0xc59d, 0xc59d, 0xc5b7, 0xc59d,
-	0xc59d, 0xc59d, 0xc59d, 0xc59d, 0xc59d, 0x080c, 0x0dd5, 0x080c,
-	0x955f, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039, 0x0118,
-	0x9186, 0x0035, 0x1118, 0x2001, 0x1986, 0x0010, 0x2001, 0x1987,
-	0x2004, 0x601a, 0x6003, 0x000c, 0x080c, 0x9664, 0x0005, 0x080c,
-	0x955f, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039, 0x0118,
-	0x9186, 0x0035, 0x1118, 0x2001, 0x1986, 0x0010, 0x2001, 0x1987,
-	0x2004, 0x601a, 0x6003, 0x000e, 0x080c, 0x9664, 0x0005, 0x9182,
-	0x0092, 0x1220, 0x9182, 0x0085, 0x0208, 0x0012, 0x0804, 0xaedd,
-	0xc5e5, 0xc5e5, 0xc5e5, 0xc5e5, 0xc5e7, 0xc634, 0xc5e5, 0xc5e5,
-	0xc5e5, 0xc5e5, 0xc5e5, 0xc5e5, 0xc5e5, 0x080c, 0x0dd5, 0x0096,
-	0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0168, 0x6034,
+	0x0036, 0x2308, 0x2019, 0x0018, 0x2011, 0x0025, 0x080c, 0xc730,
+	0x003e, 0xd6cc, 0x01e8, 0x7154, 0xa98a, 0x81ff, 0x01c8, 0x9192,
+	0x0021, 0x1260, 0x8304, 0x9098, 0x0018, 0x2011, 0x0029, 0x080c,
+	0xc730, 0x2011, 0x0205, 0x2013, 0x0000, 0x0050, 0xb068, 0xd0fc,
+	0x0120, 0x2009, 0x0020, 0xa98a, 0x0c68, 0x2950, 0x080c, 0xc6cf,
+	0x009e, 0x00ee, 0x00ae, 0x007e, 0x0005, 0x00f6, 0x00a6, 0x6003,
+	0x0003, 0x2079, 0x026c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x6014,
+	0x2050, 0xb436, 0xb33a, 0xb646, 0xb54a, 0x00ae, 0x00fe, 0x2c10,
+	0x080c, 0x1bad, 0x0804, 0xa240, 0x6003, 0x0002, 0x6004, 0x9086,
+	0x0040, 0x11c8, 0x0096, 0x6014, 0x2048, 0xa87c, 0xd0ac, 0x0160,
+	0x601c, 0xd084, 0x1130, 0x00f6, 0x2c00, 0x2078, 0x080c, 0x1725,
+	0x00fe, 0x6003, 0x0004, 0x0010, 0x6003, 0x0002, 0x009e, 0x080c,
+	0x9588, 0x080c, 0x968d, 0x0096, 0x2001, 0x1988, 0x2004, 0x6042,
+	0x080c, 0x963d, 0x080c, 0x97b9, 0x6114, 0x2148, 0xa97c, 0xd1e4,
+	0x0904, 0xc203, 0xd1cc, 0x05a8, 0xa978, 0xa868, 0xd0fc, 0x0538,
+	0x0016, 0xa87c, 0x0006, 0xa880, 0x0006, 0xa860, 0x20e8, 0xa85c,
+	0x9080, 0x0019, 0x20a0, 0x810e, 0x810e, 0x810f, 0x9184, 0x003f,
+	0x20e0, 0x9184, 0xffc0, 0x9080, 0x0019, 0x2098, 0x0156, 0x20a9,
+	0x0020, 0x4003, 0x015e, 0x000e, 0xa882, 0x000e, 0xa87e, 0x001e,
+	0xa874, 0x0006, 0x2148, 0x080c, 0x0fb1, 0x001e, 0x0440, 0x0016,
+	0x080c, 0x0fb1, 0x009e, 0xa974, 0x0016, 0x080c, 0xc720, 0x001e,
+	0x00f0, 0xa867, 0x0103, 0xa974, 0x9184, 0x00ff, 0x90b6, 0x0002,
+	0x0180, 0x9086, 0x0028, 0x1118, 0xa87b, 0x001c, 0x0060, 0xd1dc,
+	0x0118, 0xa87b, 0x0015, 0x0038, 0xd1d4, 0x0118, 0xa87b, 0x0007,
+	0x0010, 0xa87b, 0x0000, 0x0016, 0x080c, 0x6a9d, 0x001e, 0xd1e4,
+	0x1120, 0x080c, 0xae61, 0x009e, 0x0005, 0x080c, 0xce2e, 0x0cd8,
+	0x6004, 0x9086, 0x0040, 0x1120, 0x080c, 0x9588, 0x080c, 0x968d,
+	0x2019, 0x0001, 0x080c, 0xa5b6, 0x6003, 0x0002, 0x080c, 0xd24d,
+	0x080c, 0x963d, 0x080c, 0x97b9, 0x0005, 0x6004, 0x9086, 0x0040,
+	0x1120, 0x080c, 0x9588, 0x080c, 0x968d, 0x2019, 0x0001, 0x080c,
+	0xa5b6, 0x080c, 0x963d, 0x080c, 0x31bf, 0x080c, 0xd245, 0x0096,
+	0x6114, 0x2148, 0x080c, 0xcb35, 0x0150, 0xa867, 0x0103, 0xa87b,
+	0x0029, 0xa877, 0x0000, 0x080c, 0x6c81, 0x080c, 0xcd1e, 0x009e,
+	0x080c, 0xae61, 0x080c, 0x97b9, 0x0005, 0xa87b, 0x0015, 0xd1fc,
+	0x0180, 0xa87b, 0x0007, 0x8002, 0x8000, 0x810a, 0x9189, 0x0000,
+	0x0006, 0x0016, 0x2009, 0x1a7a, 0x2104, 0x8000, 0x200a, 0x001e,
+	0x000e, 0xa992, 0xa88e, 0x0005, 0x9182, 0x0054, 0x1220, 0x9182,
+	0x0040, 0x0208, 0x000a, 0x0005, 0xc278, 0xc278, 0xc278, 0xc278,
+	0xc278, 0xc27a, 0xc278, 0xc278, 0xc320, 0xc278, 0xc278, 0xc278,
+	0xc278, 0xc278, 0xc278, 0xc278, 0xc278, 0xc278, 0xc278, 0xc451,
+	0x080c, 0x0dd5, 0x0076, 0x00a6, 0x00e6, 0x0096, 0x2071, 0x0260,
+	0x6114, 0x2150, 0x7644, 0xb676, 0x96b4, 0x0fff, 0xb77c, 0xc7e5,
+	0xb77e, 0x6210, 0x00b6, 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211,
+	0xba3e, 0x00be, 0x86ff, 0x0904, 0xc319, 0x9694, 0xff00, 0x9284,
+	0x0c00, 0x0120, 0x7048, 0xb092, 0x704c, 0xb08e, 0x9284, 0x0300,
+	0x0904, 0xc319, 0x9686, 0x0100, 0x1130, 0x7064, 0x9005, 0x1118,
+	0xc6c4, 0xb676, 0x0c38, 0x080c, 0x0fff, 0x090c, 0x0dd5, 0x2900,
+	0xb07a, 0xb77c, 0x97bd, 0x0200, 0xb77e, 0xa867, 0x0103, 0xb068,
+	0xa86a, 0xb06c, 0xa86e, 0xb070, 0xa872, 0x7044, 0x9084, 0xf000,
+	0x9635, 0xae76, 0x968c, 0x0c00, 0x0120, 0x7348, 0xab92, 0x734c,
+	0xab8e, 0x968c, 0x00ff, 0x9186, 0x0002, 0x0180, 0x9186, 0x0028,
+	0x1118, 0xa87b, 0x001c, 0x0060, 0xd6dc, 0x0118, 0xa87b, 0x0015,
+	0x0038, 0xd6d4, 0x0118, 0xa87b, 0x0007, 0x0010, 0xa87b, 0x0000,
+	0xaf7e, 0xb080, 0xa882, 0xb084, 0xa886, 0x901e, 0xd6c4, 0x0190,
+	0x735c, 0xab86, 0x83ff, 0x0170, 0x938a, 0x0009, 0x0210, 0x2019,
+	0x0008, 0x0036, 0x2308, 0x2019, 0x0018, 0x2011, 0x0025, 0x080c,
+	0xc730, 0x003e, 0xd6cc, 0x01e8, 0x7154, 0xa98a, 0x81ff, 0x01c8,
+	0x9192, 0x0021, 0x1260, 0x8304, 0x9098, 0x0018, 0x2011, 0x0029,
+	0x080c, 0xc730, 0x2011, 0x0205, 0x2013, 0x0000, 0x0050, 0xb068,
+	0xd0fc, 0x0120, 0x2009, 0x0020, 0xa98a, 0x0c68, 0x2950, 0x080c,
+	0xc6cf, 0x080c, 0x1a3c, 0x009e, 0x00ee, 0x00ae, 0x007e, 0x0005,
+	0x2001, 0x1988, 0x2004, 0x6042, 0x0096, 0x6114, 0x2148, 0xa83c,
+	0xa940, 0x9105, 0x1118, 0xa87c, 0xc0dc, 0xa87e, 0x6003, 0x0002,
+	0xa97c, 0xd1e4, 0x0904, 0xc44c, 0x6043, 0x0000, 0x6010, 0x00b6,
+	0x2058, 0xb800, 0x00be, 0xd0bc, 0x1500, 0xd1cc, 0x0904, 0xc41b,
+	0xa978, 0xa868, 0xd0fc, 0x0904, 0xc3dc, 0x0016, 0xa87c, 0x0006,
+	0xa880, 0x0006, 0x00a6, 0x2150, 0xb174, 0x9184, 0x00ff, 0x90b6,
+	0x0002, 0x0904, 0xc3aa, 0x9086, 0x0028, 0x1904, 0xc396, 0xa87b,
+	0x001c, 0xb07b, 0x001c, 0x0804, 0xc3b2, 0x6024, 0xd0f4, 0x11d0,
+	0xa838, 0xaa34, 0x9205, 0x09c8, 0xa838, 0xaa90, 0x9206, 0x1120,
+	0xa88c, 0xaa34, 0x9206, 0x0988, 0x6024, 0xd0d4, 0x1148, 0xa9ac,
+	0xa834, 0x9102, 0x603a, 0xa9b0, 0xa838, 0x9103, 0x603e, 0x6024,
+	0xc0f5, 0x6026, 0x6010, 0x00b6, 0x2058, 0xb83c, 0x8000, 0xb83e,
+	0x00be, 0x9006, 0xa876, 0xa892, 0xa88e, 0xa87c, 0xc0e4, 0xa87e,
+	0xd0cc, 0x0140, 0xc0cc, 0xa87e, 0x0096, 0xa878, 0x2048, 0x080c,
+	0x0fb1, 0x009e, 0x080c, 0xce68, 0x0804, 0xc44c, 0xd1dc, 0x0158,
+	0xa87b, 0x0015, 0xb07b, 0x0015, 0x080c, 0xd0f8, 0x0118, 0xb174,
+	0xc1dc, 0xb176, 0x0078, 0xd1d4, 0x0128, 0xa87b, 0x0007, 0xb07b,
+	0x0007, 0x0040, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115,
+	0x190c, 0xc245, 0xa87c, 0xb07e, 0xa890, 0xb092, 0xa88c, 0xb08e,
+	0xa860, 0x20e8, 0xa85c, 0x9080, 0x0019, 0x20a0, 0x20a9, 0x0020,
+	0x8a06, 0x8006, 0x8007, 0x9094, 0x003f, 0x22e0, 0x9084, 0xffc0,
+	0x9080, 0x0019, 0x2098, 0x4003, 0x00ae, 0x000e, 0xa882, 0x000e,
+	0xa87e, 0x080c, 0xd1d5, 0x001e, 0xa874, 0x0006, 0x2148, 0x080c,
+	0x0fb1, 0x001e, 0x0804, 0xc448, 0x0016, 0x00a6, 0x2150, 0xb174,
+	0x9184, 0x00ff, 0x90b6, 0x0002, 0x01e0, 0x9086, 0x0028, 0x1128,
+	0xa87b, 0x001c, 0xb07b, 0x001c, 0x00e0, 0xd1dc, 0x0158, 0xa87b,
+	0x0015, 0xb07b, 0x0015, 0x080c, 0xd0f8, 0x0118, 0xb174, 0xc1dc,
+	0xb176, 0x0078, 0xd1d4, 0x0128, 0xa87b, 0x0007, 0xb07b, 0x0007,
+	0x0040, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115, 0x190c,
+	0xc245, 0xa890, 0xb092, 0xa88c, 0xb08e, 0xa87c, 0xb07e, 0x00ae,
+	0x080c, 0x0fb1, 0x009e, 0x080c, 0xd1d5, 0xa974, 0x0016, 0x080c,
+	0xc720, 0x001e, 0x0468, 0xa867, 0x0103, 0xa974, 0x9184, 0x00ff,
+	0x90b6, 0x0002, 0x01b0, 0x9086, 0x0028, 0x1118, 0xa87b, 0x001c,
+	0x00d0, 0xd1dc, 0x0148, 0xa87b, 0x0015, 0x080c, 0xd0f8, 0x0118,
+	0xa974, 0xc1dc, 0xa976, 0x0078, 0xd1d4, 0x0118, 0xa87b, 0x0007,
+	0x0050, 0xa87b, 0x0000, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938,
+	0x9115, 0x190c, 0xc245, 0xa974, 0x0016, 0x080c, 0x6a9d, 0x001e,
+	0xd1e4, 0x1120, 0x080c, 0xae61, 0x009e, 0x0005, 0x080c, 0xce2e,
+	0x0cd8, 0x6114, 0x0096, 0x2148, 0xa97c, 0xd1e4, 0x190c, 0x1a4a,
+	0x009e, 0x0005, 0x080c, 0x9588, 0x0010, 0x080c, 0x963d, 0x080c,
+	0xcb35, 0x01f0, 0x0096, 0x6114, 0x2148, 0x080c, 0xcd3b, 0x1118,
+	0x080c, 0xb813, 0x00a0, 0xa867, 0x0103, 0x2009, 0x180c, 0x210c,
+	0xd18c, 0x11b8, 0xd184, 0x1190, 0x6108, 0xa97a, 0x918e, 0x0029,
+	0x1110, 0x080c, 0xe908, 0xa877, 0x0000, 0x080c, 0x6c81, 0x009e,
+	0x080c, 0xae61, 0x080c, 0x968d, 0x0804, 0x97b9, 0xa87b, 0x0004,
+	0x0c90, 0xa87b, 0x0004, 0x0c78, 0x9182, 0x0054, 0x1220, 0x9182,
+	0x0040, 0x0208, 0x000a, 0x0005, 0xc4a8, 0xc4a8, 0xc4a8, 0xc4a8,
+	0xc4a8, 0xc4aa, 0xc4a8, 0xc4a8, 0xc4a8, 0xc4a8, 0xc4a8, 0xc4a8,
+	0xc4a8, 0xc4a8, 0xc4a8, 0xc4a8, 0xc4a8, 0xc4a8, 0xc4a8, 0xc4a8,
+	0x080c, 0x0dd5, 0x080c, 0x56d7, 0x01f8, 0x6014, 0x7144, 0x918c,
+	0x0fff, 0x9016, 0xd1c4, 0x0118, 0x7264, 0x9294, 0x00ff, 0x0096,
+	0x904d, 0x0188, 0xa87b, 0x0000, 0xa864, 0x9086, 0x0139, 0x0128,
+	0xa867, 0x0103, 0xa976, 0xaa96, 0x0030, 0xa897, 0x4000, 0xa99a,
+	0xaa9e, 0x080c, 0x6c81, 0x009e, 0x0804, 0xae61, 0x9182, 0x0085,
+	0x0002, 0xc4e0, 0xc4de, 0xc4de, 0xc4ec, 0xc4de, 0xc4de, 0xc4de,
+	0xc4de, 0xc4de, 0xc4de, 0xc4de, 0xc4de, 0xc4de, 0x080c, 0x0dd5,
+	0x6003, 0x0001, 0x6106, 0x080c, 0x90f0, 0x0126, 0x2091, 0x8000,
+	0x080c, 0x968d, 0x012e, 0x0005, 0x0026, 0x0056, 0x00d6, 0x00e6,
+	0x2071, 0x0260, 0x7224, 0x6216, 0x7220, 0x080c, 0xcb23, 0x01a0,
+	0x2268, 0x6800, 0x9086, 0x0000, 0x0178, 0x6010, 0x6d10, 0x952e,
+	0x1158, 0x00c6, 0x2d60, 0x080c, 0xc75b, 0x00ce, 0x0128, 0x6803,
+	0x0002, 0x6007, 0x0086, 0x0010, 0x6007, 0x0087, 0x6003, 0x0001,
+	0x080c, 0x90f0, 0x080c, 0x968d, 0x9280, 0x0004, 0x00b6, 0x2058,
+	0xb800, 0x00be, 0xd0bc, 0x0140, 0x6824, 0xd0ec, 0x0128, 0x00c6,
+	0x2260, 0x080c, 0xce68, 0x00ce, 0x00ee, 0x00de, 0x005e, 0x002e,
+	0x0005, 0x9186, 0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c,
+	0x0dd5, 0x908a, 0x0092, 0x1a0c, 0x0dd5, 0x9082, 0x0085, 0x00e2,
+	0x9186, 0x0027, 0x0120, 0x9186, 0x0014, 0x190c, 0x0dd5, 0x080c,
+	0x9588, 0x0096, 0x6014, 0x2048, 0x080c, 0xcb35, 0x0140, 0xa867,
+	0x0103, 0xa877, 0x0000, 0xa87b, 0x0029, 0x080c, 0x6c81, 0x009e,
+	0x080c, 0xae92, 0x0804, 0x968d, 0xc561, 0xc563, 0xc563, 0xc561,
+	0xc561, 0xc561, 0xc561, 0xc561, 0xc561, 0xc561, 0xc561, 0xc561,
+	0xc561, 0x080c, 0x0dd5, 0x080c, 0x9588, 0x080c, 0xae92, 0x080c,
+	0x968d, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004, 0x9082, 0x0085,
+	0x2008, 0x04b8, 0x9186, 0x0027, 0x11f8, 0x080c, 0x9588, 0x080c,
+	0x31bf, 0x080c, 0xd245, 0x0096, 0x6014, 0x2048, 0x080c, 0xcb35,
+	0x0150, 0xa867, 0x0103, 0xa877, 0x0000, 0xa87b, 0x0029, 0x080c,
+	0x6c81, 0x080c, 0xcd1e, 0x009e, 0x080c, 0xae61, 0x080c, 0x968d,
+	0x0005, 0x080c, 0xaef7, 0x0ce0, 0x9186, 0x0014, 0x1dd0, 0x080c,
+	0x9588, 0x0096, 0x6014, 0x2048, 0x080c, 0xcb35, 0x0d60, 0xa867,
+	0x0103, 0xa877, 0x0000, 0xa87b, 0x0006, 0xa880, 0xc0ec, 0xa882,
+	0x08f0, 0x0002, 0xc5b9, 0xc5b7, 0xc5b7, 0xc5b7, 0xc5b7, 0xc5b7,
+	0xc5d1, 0xc5b7, 0xc5b7, 0xc5b7, 0xc5b7, 0xc5b7, 0xc5b7, 0x080c,
+	0x0dd5, 0x080c, 0x9588, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186,
+	0x0039, 0x0118, 0x9186, 0x0035, 0x1118, 0x2001, 0x1986, 0x0010,
+	0x2001, 0x1987, 0x2004, 0x601a, 0x6003, 0x000c, 0x080c, 0x968d,
+	0x0005, 0x080c, 0x9588, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186,
+	0x0039, 0x0118, 0x9186, 0x0035, 0x1118, 0x2001, 0x1986, 0x0010,
+	0x2001, 0x1987, 0x2004, 0x601a, 0x6003, 0x000e, 0x080c, 0x968d,
+	0x0005, 0x9182, 0x0092, 0x1220, 0x9182, 0x0085, 0x0208, 0x0012,
+	0x0804, 0xaef7, 0xc5ff, 0xc5ff, 0xc5ff, 0xc5ff, 0xc601, 0xc64e,
+	0xc5ff, 0xc5ff, 0xc5ff, 0xc5ff, 0xc5ff, 0xc5ff, 0xc5ff, 0x080c,
+	0x0dd5, 0x0096, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc,
+	0x0168, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039, 0x0118,
+	0x9186, 0x0035, 0x1118, 0x009e, 0x0804, 0xc662, 0x080c, 0xcb35,
+	0x1118, 0x080c, 0xcd1e, 0x0068, 0x6014, 0x2048, 0xa87c, 0xd0e4,
+	0x1110, 0x080c, 0xcd1e, 0xa867, 0x0103, 0x080c, 0xd210, 0x080c,
+	0x6c81, 0x00d6, 0x2c68, 0x080c, 0xae0b, 0x01d0, 0x6003, 0x0001,
+	0x6007, 0x001e, 0x600b, 0xffff, 0x2009, 0x026e, 0x210c, 0x613a,
+	0x2009, 0x026f, 0x210c, 0x613e, 0x6910, 0x6112, 0x080c, 0xcfaa,
+	0x6954, 0x6156, 0x6023, 0x0001, 0x080c, 0x90f0, 0x080c, 0x968d,
+	0x2d60, 0x00de, 0x080c, 0xae61, 0x009e, 0x0005, 0x6010, 0x00b6,
+	0x2058, 0xb800, 0x00be, 0xd0bc, 0x05a0, 0x6034, 0x908c, 0xff00,
+	0x810f, 0x9186, 0x0035, 0x0130, 0x9186, 0x001e, 0x0118, 0x9186,
+	0x0039, 0x1538, 0x00d6, 0x2c68, 0x080c, 0xd1a8, 0x11f0, 0x080c,
+	0xae0b, 0x01d8, 0x6106, 0x6003, 0x0001, 0x6023, 0x0001, 0x6910,
+	0x6112, 0x692c, 0x612e, 0x6930, 0x6132, 0x6934, 0x918c, 0x00ff,
+	0x6136, 0x6938, 0x613a, 0x693c, 0x613e, 0x6954, 0x6156, 0x080c,
+	0xcfaa, 0x080c, 0x90f0, 0x080c, 0x968d, 0x2d60, 0x00de, 0x0804,
+	0xae61, 0x0096, 0x6014, 0x2048, 0x080c, 0xcb35, 0x01c8, 0xa867,
+	0x0103, 0xa880, 0xd0b4, 0x0128, 0xc0ec, 0xa882, 0xa87b, 0x0006,
+	0x0048, 0xd0bc, 0x0118, 0xa87b, 0x0002, 0x0020, 0xa87b, 0x0005,
+	0x080c, 0xce2a, 0xa877, 0x0000, 0x080c, 0x6c81, 0x080c, 0xcd1e,
+	0x009e, 0x0804, 0xae61, 0x0016, 0x0096, 0x6014, 0x2048, 0x080c,
+	0xcb35, 0x0140, 0xa867, 0x0103, 0xa87b, 0x0028, 0xa877, 0x0000,
+	0x080c, 0x6c81, 0x009e, 0x001e, 0x9186, 0x0013, 0x0148, 0x9186,
+	0x0014, 0x0130, 0x9186, 0x0027, 0x0118, 0x080c, 0xaef7, 0x0030,
+	0x080c, 0x9588, 0x080c, 0xae92, 0x080c, 0x968d, 0x0005, 0x0056,
+	0x0066, 0x0096, 0x00a6, 0x2029, 0x0001, 0x9182, 0x0101, 0x1208,
+	0x0010, 0x2009, 0x0100, 0x2130, 0x8304, 0x9098, 0x0018, 0x2009,
+	0x0020, 0x2011, 0x0029, 0x080c, 0xc730, 0x96b2, 0x0020, 0xb004,
+	0x904d, 0x0110, 0x080c, 0x0fb1, 0x080c, 0x0fff, 0x0520, 0x8528,
+	0xa867, 0x0110, 0xa86b, 0x0000, 0x2920, 0xb406, 0x968a, 0x003d,
+	0x1228, 0x2608, 0x2011, 0x001b, 0x0499, 0x00a8, 0x96b2, 0x003c,
+	0x2009, 0x003c, 0x2950, 0x2011, 0x001b, 0x0451, 0x0c28, 0x2001,
+	0x0205, 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad, 0x0003, 0xb566,
+	0x95ac, 0x0000, 0x0048, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae,
+	0x852f, 0x95ad, 0x0003, 0xb566, 0x009e, 0x006e, 0x005e, 0x0005,
+	0x00a6, 0x89ff, 0x0158, 0xa804, 0x9055, 0x0130, 0xa807, 0x0000,
+	0x080c, 0x6c81, 0x2a48, 0x0cb8, 0x080c, 0x6c81, 0x00ae, 0x0005,
+	0x00f6, 0x2079, 0x0200, 0x7814, 0x9085, 0x0080, 0x7816, 0xd184,
+	0x0108, 0x8108, 0x810c, 0x20a9, 0x0001, 0xa860, 0x20e8, 0xa85c,
+	0x9200, 0x20a0, 0x20e1, 0x0000, 0x2300, 0x9e00, 0x2098, 0x4003,
+	0x8318, 0x9386, 0x0020, 0x1148, 0x2018, 0x2300, 0x9e00, 0x2098,
+	0x7814, 0x8000, 0x9085, 0x0080, 0x7816, 0x8109, 0x1d80, 0x7817,
+	0x0000, 0x00fe, 0x0005, 0x0066, 0x0126, 0x2091, 0x8000, 0x2031,
+	0x0001, 0x6020, 0x9084, 0x000f, 0x0083, 0x012e, 0x006e, 0x0005,
+	0x0126, 0x2091, 0x8000, 0x0066, 0x2031, 0x0000, 0x6020, 0x9084,
+	0x000f, 0x001b, 0x006e, 0x012e, 0x0005, 0xc796, 0xc796, 0xc791,
+	0xc7b8, 0xc784, 0xc791, 0xc7b8, 0xc791, 0xc784, 0x8ed9, 0xc791,
+	0xc791, 0xc791, 0xc784, 0xc784, 0x080c, 0x0dd5, 0x0036, 0x2019,
+	0x0010, 0x080c, 0xe134, 0x6023, 0x0006, 0x6003, 0x0007, 0x003e,
+	0x0005, 0x9006, 0x0005, 0x9085, 0x0001, 0x0005, 0x0096, 0x86ff,
+	0x11d8, 0x6014, 0x2048, 0x080c, 0xcb35, 0x01c0, 0xa864, 0x9086,
+	0x0139, 0x1128, 0xa87b, 0x0005, 0xa883, 0x0000, 0x0028, 0x900e,
+	0x2001, 0x0005, 0x080c, 0x6ec0, 0x080c, 0xce2a, 0x080c, 0x6c75,
+	0x080c, 0xae92, 0x9085, 0x0001, 0x009e, 0x0005, 0x9006, 0x0ce0,
+	0x6000, 0x908a, 0x0016, 0x1a0c, 0x0dd5, 0x0002, 0xc7ce, 0xc7fc,
+	0xc7d0, 0xc81d, 0xc7f7, 0xc7ce, 0xc791, 0xc796, 0xc796, 0xc791,
+	0xc791, 0xc791, 0xc791, 0xc791, 0xc791, 0xc791, 0x080c, 0x0dd5,
+	0x86ff, 0x1510, 0x6020, 0x9086, 0x0006, 0x01f0, 0x0096, 0x6014,
+	0x2048, 0x080c, 0xcb35, 0x0158, 0xa87c, 0xd0cc, 0x0130, 0x0096,
+	0xa878, 0x2048, 0x080c, 0x0fb1, 0x009e, 0x080c, 0xce2a, 0x009e,
+	0x080c, 0xd1ea, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002,
+	0x080c, 0x90f0, 0x080c, 0x968d, 0x9085, 0x0001, 0x0005, 0x0066,
+	0x080c, 0x1a5e, 0x006e, 0x08a0, 0x00e6, 0x2071, 0x19e7, 0x7024,
+	0x9c06, 0x1120, 0x080c, 0xa540, 0x00ee, 0x0850, 0x6020, 0x9084,
+	0x000f, 0x9086, 0x0006, 0x1150, 0x0086, 0x0096, 0x2049, 0x0001,
+	0x2c40, 0x080c, 0xa69c, 0x009e, 0x008e, 0x0010, 0x080c, 0xa43d,
+	0x00ee, 0x1904, 0xc7d0, 0x0804, 0xc791, 0x0036, 0x00e6, 0x2071,
+	0x19e7, 0x703c, 0x9c06, 0x1138, 0x901e, 0x080c, 0xa5b6, 0x00ee,
+	0x003e, 0x0804, 0xc7d0, 0x080c, 0xa7cc, 0x00ee, 0x003e, 0x1904,
+	0xc7d0, 0x0804, 0xc791, 0x00c6, 0x6020, 0x9084, 0x000f, 0x0013,
+	0x00ce, 0x0005, 0xc850, 0xc919, 0xca80, 0xc85a, 0xae92, 0xc850,
+	0xe126, 0xd252, 0xc919, 0x8eab, 0xcaff, 0xc849, 0xc849, 0xc849,
+	0xc849, 0x080c, 0x0dd5, 0x080c, 0xcd3b, 0x1110, 0x080c, 0xb813,
+	0x0005, 0x080c, 0x9588, 0x080c, 0x968d, 0x0804, 0xae61, 0x601b,
+	0x0001, 0x0005, 0x080c, 0xcb35, 0x0130, 0x6014, 0x0096, 0x2048,
+	0x2c00, 0xa896, 0x009e, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0dd5,
+	0x0002, 0xc879, 0xc87b, 0xc89f, 0xc8b3, 0xc8d7, 0xc879, 0xc850,
+	0xc850, 0xc850, 0xc8b3, 0xc8b3, 0xc879, 0xc879, 0xc879, 0xc879,
+	0xc8bd, 0x080c, 0x0dd5, 0x00e6, 0x6014, 0x0096, 0x2048, 0xa880,
+	0xc0b5, 0xa882, 0x009e, 0x2071, 0x19e7, 0x7024, 0x9c06, 0x01a0,
+	0x080c, 0xa43d, 0x080c, 0xd1ea, 0x6007, 0x0085, 0x6003, 0x000b,
+	0x6023, 0x0002, 0x2001, 0x1987, 0x2004, 0x601a, 0x080c, 0x90f0,
+	0x080c, 0x968d, 0x00ee, 0x0005, 0x601b, 0x0001, 0x0cd8, 0x0096,
+	0x6014, 0x2048, 0xa880, 0xc0b5, 0xa882, 0x009e, 0x080c, 0xd1ea,
+	0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x080c, 0x90f0,
+	0x080c, 0x968d, 0x0005, 0x0096, 0x601b, 0x0001, 0x6014, 0x2048,
+	0xa880, 0xc0b5, 0xa882, 0x009e, 0x0005, 0x080c, 0x56d7, 0x01a8,
+	0x6014, 0x0096, 0x904d, 0x0180, 0xa864, 0xa867, 0x0103, 0xa87b,
+	0x0006, 0x9086, 0x0139, 0x1140, 0xa867, 0x0139, 0xa897, 0x4005,
+	0xa89b, 0x0004, 0x080c, 0x6c81, 0x009e, 0x0804, 0xae61, 0x6014,
+	0x0096, 0x904d, 0x05c8, 0xa97c, 0xd1e4, 0x05b0, 0x2001, 0x180f,
+	0x2004, 0xd0c4, 0x0110, 0x009e, 0x0005, 0xa884, 0x009e, 0x8003,
+	0x800b, 0x810b, 0x9108, 0x611a, 0x2001, 0x0030, 0x2c08, 0x080c,
+	0x15ee, 0x2001, 0x030c, 0x2004, 0x9086, 0x0041, 0x11a0, 0x6014,
+	0x0096, 0x904d, 0x090c, 0x0dd5, 0xa880, 0xd0f4, 0x1130, 0xc0f5,
+	0xa882, 0x009e, 0x601b, 0x0002, 0x0070, 0x009e, 0x2001, 0x0037,
+	0x2c08, 0x080c, 0x15ee, 0x6000, 0x9086, 0x0004, 0x1120, 0x2009,
+	0x0048, 0x080c, 0xaedc, 0x0005, 0x009e, 0x080c, 0x1a5e, 0x0804,
+	0xc89f, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0dd5, 0x000b, 0x0005,
+	0xc930, 0xc857, 0xc932, 0xc930, 0xc932, 0xc932, 0xc851, 0xc930,
+	0xc84b, 0xc84b, 0xc930, 0xc930, 0xc930, 0xc930, 0xc930, 0xc930,
+	0x080c, 0x0dd5, 0x6010, 0x00b6, 0x2058, 0xb804, 0x9084, 0x00ff,
+	0x00be, 0x908a, 0x000c, 0x1a0c, 0x0dd5, 0x00b6, 0x0013, 0x00be,
+	0x0005, 0xc94d, 0xca1a, 0xc94f, 0xc98f, 0xc94f, 0xc98f, 0xc94f,
+	0xc95d, 0xc94d, 0xc98f, 0xc94d, 0xc97e, 0x080c, 0x0dd5, 0x6004,
+	0x908e, 0x0016, 0x05c0, 0x908e, 0x0004, 0x05a8, 0x908e, 0x0002,
+	0x0590, 0x908e, 0x0052, 0x0904, 0xca16, 0x6004, 0x080c, 0xcd3b,
+	0x0904, 0xca33, 0x908e, 0x0004, 0x1110, 0x080c, 0x31e8, 0x908e,
+	0x0021, 0x0904, 0xca37, 0x908e, 0x0022, 0x0904, 0xca7b, 0x908e,
+	0x003d, 0x0904, 0xca37, 0x908e, 0x0039, 0x0904, 0xca3b, 0x908e,
+	0x0035, 0x0904, 0xca3b, 0x908e, 0x001e, 0x0178, 0x908e, 0x0001,
+	0x1140, 0x6010, 0x2058, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006,
+	0x0110, 0x080c, 0x31bf, 0x080c, 0xb813, 0x0804, 0xae92, 0x00c6,
+	0x00d6, 0x6104, 0x9186, 0x0016, 0x0904, 0xca07, 0x9186, 0x0002,
+	0x1904, 0xc9dc, 0x2001, 0x1837, 0x2004, 0xd08c, 0x11c8, 0x080c,
+	0x73bc, 0x11b0, 0x080c, 0xd230, 0x0138, 0x080c, 0x73df, 0x1120,
+	0x080c, 0x72cc, 0x0804, 0xca64, 0x2001, 0x197d, 0x2003, 0x0001,
+	0x2001, 0x1800, 0x2003, 0x0001, 0x080c, 0x72ee, 0x0804, 0xca64,
+	0x6010, 0x2058, 0x2001, 0x1837, 0x2004, 0xd0ac, 0x1904, 0xca64,
+	0xb8a0, 0x9084, 0xff80, 0x1904, 0xca64, 0xb840, 0x9084, 0x00ff,
+	0x9005, 0x0190, 0x8001, 0xb842, 0x6017, 0x0000, 0x6023, 0x0007,
+	0x601b, 0x0398, 0x6043, 0x0000, 0x080c, 0xae0b, 0x0128, 0x2b00,
+	0x6012, 0x6023, 0x0001, 0x0458, 0x00de, 0x00ce, 0x6004, 0x908e,
+	0x0002, 0x11a0, 0x6010, 0x2058, 0xb8a0, 0x9086, 0x007e, 0x1170,
+	0x2009, 0x1837, 0x2104, 0xc085, 0x200a, 0x00e6, 0x2071, 0x1800,
+	0x080c, 0x5fad, 0x00ee, 0x080c, 0xb813, 0x0030, 0x080c, 0xb813,
+	0x080c, 0x31bf, 0x080c, 0xd245, 0x00e6, 0x0126, 0x2091, 0x8000,
+	0x080c, 0x31e8, 0x012e, 0x00ee, 0x080c, 0xae92, 0x0005, 0x2001,
+	0x0002, 0x080c, 0x654f, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c,
+	0x9138, 0x080c, 0x968d, 0x00de, 0x00ce, 0x0c80, 0x080c, 0x31e8,
+	0x0804, 0xc98b, 0x00c6, 0x00d6, 0x6104, 0x9186, 0x0016, 0x0d38,
+	0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0904, 0xc9dc,
+	0x8001, 0xb842, 0x6003, 0x0001, 0x080c, 0x9138, 0x080c, 0x968d,
+	0x00de, 0x00ce, 0x0898, 0x080c, 0xb813, 0x0804, 0xc98d, 0x080c,
+	0xb84f, 0x0804, 0xc98d, 0x00d6, 0x2c68, 0x6104, 0x080c, 0xd1a8,
+	0x00de, 0x0118, 0x080c, 0xae61, 0x00f0, 0x6004, 0x8007, 0x6134,
+	0x918c, 0x00ff, 0x9105, 0x6036, 0x6007, 0x0085, 0x6003, 0x000b,
+	0x6023, 0x0002, 0x603c, 0x600a, 0x2001, 0x1987, 0x2004, 0x601a,
+	0x602c, 0x2c08, 0x2060, 0x6024, 0xc0b5, 0x6026, 0x2160, 0x080c,
+	0x90f0, 0x080c, 0x968d, 0x0005, 0x00de, 0x00ce, 0x080c, 0xb813,
+	0x080c, 0x31bf, 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x31e8,
+	0x6017, 0x0000, 0x6023, 0x0007, 0x601b, 0x0398, 0x6043, 0x0000,
+	0x012e, 0x00ee, 0x0005, 0x080c, 0xb291, 0x1904, 0xca33, 0x0005,
+	0x6000, 0x908a, 0x0016, 0x1a0c, 0x0dd5, 0x0096, 0x00d6, 0x001b,
+	0x00de, 0x009e, 0x0005, 0xca9b, 0xca9b, 0xca9b, 0xca9b, 0xca9b,
+	0xca9b, 0xca9b, 0xca9b, 0xca9b, 0xc850, 0xca9b, 0xc857, 0xca9d,
+	0xc857, 0xcaaa, 0xca9b, 0x080c, 0x0dd5, 0x6004, 0x9086, 0x008b,
+	0x0148, 0x6007, 0x008b, 0x6003, 0x000d, 0x080c, 0x90f0, 0x080c,
+	0x968d, 0x0005, 0x080c, 0xd224, 0x0118, 0x080c, 0xd237, 0x0010,
+	0x080c, 0xd245, 0x080c, 0xcd1e, 0x080c, 0xcb35, 0x0570, 0x080c,
+	0x31bf, 0x080c, 0xcb35, 0x0168, 0x6014, 0x2048, 0xa867, 0x0103,
+	0xa87b, 0x0006, 0xa877, 0x0000, 0xa880, 0xc0ed, 0xa882, 0x080c,
+	0x6c81, 0x2c68, 0x080c, 0xae0b, 0x0150, 0x6810, 0x6012, 0x080c,
+	0xcfaa, 0x00c6, 0x2d60, 0x080c, 0xae92, 0x00ce, 0x0008, 0x2d60,
+	0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001,
+	0x080c, 0x9138, 0x080c, 0x968d, 0x00c8, 0x080c, 0xd224, 0x0138,
+	0x6034, 0x9086, 0x4000, 0x1118, 0x080c, 0x31bf, 0x08d0, 0x6034,
 	0x908c, 0xff00, 0x810f, 0x9186, 0x0039, 0x0118, 0x9186, 0x0035,
-	0x1118, 0x009e, 0x0804, 0xc648, 0x080c, 0xcb1b, 0x1118, 0x080c,
-	0xcd04, 0x0068, 0x6014, 0x2048, 0xa87c, 0xd0e4, 0x1110, 0x080c,
-	0xcd04, 0xa867, 0x0103, 0x080c, 0xd1f6, 0x080c, 0x6c79, 0x00d6,
-	0x2c68, 0x080c, 0xadf1, 0x01d0, 0x6003, 0x0001, 0x6007, 0x001e,
-	0x600b, 0xffff, 0x2009, 0x026e, 0x210c, 0x613a, 0x2009, 0x026f,
-	0x210c, 0x613e, 0x6910, 0x6112, 0x080c, 0xcf90, 0x6954, 0x6156,
-	0x6023, 0x0001, 0x080c, 0x90c7, 0x080c, 0x9664, 0x2d60, 0x00de,
-	0x080c, 0xae47, 0x009e, 0x0005, 0x6010, 0x00b6, 0x2058, 0xb800,
-	0x00be, 0xd0bc, 0x05a0, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186,
-	0x0035, 0x0130, 0x9186, 0x001e, 0x0118, 0x9186, 0x0039, 0x1538,
-	0x00d6, 0x2c68, 0x080c, 0xd18e, 0x11f0, 0x080c, 0xadf1, 0x01d8,
-	0x6106, 0x6003, 0x0001, 0x6023, 0x0001, 0x6910, 0x6112, 0x692c,
-	0x612e, 0x6930, 0x6132, 0x6934, 0x918c, 0x00ff, 0x6136, 0x6938,
-	0x613a, 0x693c, 0x613e, 0x6954, 0x6156, 0x080c, 0xcf90, 0x080c,
-	0x90c7, 0x080c, 0x9664, 0x2d60, 0x00de, 0x0804, 0xae47, 0x0096,
-	0x6014, 0x2048, 0x080c, 0xcb1b, 0x01c8, 0xa867, 0x0103, 0xa880,
-	0xd0b4, 0x0128, 0xc0ec, 0xa882, 0xa87b, 0x0006, 0x0048, 0xd0bc,
-	0x0118, 0xa87b, 0x0002, 0x0020, 0xa87b, 0x0005, 0x080c, 0xce10,
-	0xa877, 0x0000, 0x080c, 0x6c79, 0x080c, 0xcd04, 0x009e, 0x0804,
-	0xae47, 0x0016, 0x0096, 0x6014, 0x2048, 0x080c, 0xcb1b, 0x0140,
-	0xa867, 0x0103, 0xa87b, 0x0028, 0xa877, 0x0000, 0x080c, 0x6c79,
-	0x009e, 0x001e, 0x9186, 0x0013, 0x0148, 0x9186, 0x0014, 0x0130,
-	0x9186, 0x0027, 0x0118, 0x080c, 0xaedd, 0x0030, 0x080c, 0x955f,
-	0x080c, 0xae78, 0x080c, 0x9664, 0x0005, 0x0056, 0x0066, 0x0096,
-	0x00a6, 0x2029, 0x0001, 0x9182, 0x0101, 0x1208, 0x0010, 0x2009,
-	0x0100, 0x2130, 0x8304, 0x9098, 0x0018, 0x2009, 0x0020, 0x2011,
-	0x0029, 0x080c, 0xc716, 0x96b2, 0x0020, 0xb004, 0x904d, 0x0110,
-	0x080c, 0x0fb1, 0x080c, 0x0fff, 0x0520, 0x8528, 0xa867, 0x0110,
-	0xa86b, 0x0000, 0x2920, 0xb406, 0x968a, 0x003d, 0x1228, 0x2608,
-	0x2011, 0x001b, 0x0499, 0x00a8, 0x96b2, 0x003c, 0x2009, 0x003c,
-	0x2950, 0x2011, 0x001b, 0x0451, 0x0c28, 0x2001, 0x0205, 0x2003,
-	0x0000, 0x00ae, 0x852f, 0x95ad, 0x0003, 0xb566, 0x95ac, 0x0000,
-	0x0048, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad,
-	0x0003, 0xb566, 0x009e, 0x006e, 0x005e, 0x0005, 0x00a6, 0x89ff,
-	0x0158, 0xa804, 0x9055, 0x0130, 0xa807, 0x0000, 0x080c, 0x6c79,
-	0x2a48, 0x0cb8, 0x080c, 0x6c79, 0x00ae, 0x0005, 0x00f6, 0x2079,
-	0x0200, 0x7814, 0x9085, 0x0080, 0x7816, 0xd184, 0x0108, 0x8108,
-	0x810c, 0x20a9, 0x0001, 0xa860, 0x20e8, 0xa85c, 0x9200, 0x20a0,
-	0x20e1, 0x0000, 0x2300, 0x9e00, 0x2098, 0x4003, 0x8318, 0x9386,
-	0x0020, 0x1148, 0x2018, 0x2300, 0x9e00, 0x2098, 0x7814, 0x8000,
-	0x9085, 0x0080, 0x7816, 0x8109, 0x1d80, 0x7817, 0x0000, 0x00fe,
-	0x0005, 0x0066, 0x0126, 0x2091, 0x8000, 0x2031, 0x0001, 0x6020,
-	0x9084, 0x000f, 0x0083, 0x012e, 0x006e, 0x0005, 0x0126, 0x2091,
-	0x8000, 0x0066, 0x2031, 0x0000, 0x6020, 0x9084, 0x000f, 0x001b,
-	0x006e, 0x012e, 0x0005, 0xc77c, 0xc77c, 0xc777, 0xc79e, 0xc76a,
-	0xc777, 0xc79e, 0xc777, 0xc76a, 0x8eb0, 0xc777, 0xc777, 0xc777,
-	0xc76a, 0xc76a, 0x080c, 0x0dd5, 0x0036, 0x2019, 0x0010, 0x080c,
-	0xe115, 0x6023, 0x0006, 0x6003, 0x0007, 0x003e, 0x0005, 0x9006,
-	0x0005, 0x9085, 0x0001, 0x0005, 0x0096, 0x86ff, 0x11d8, 0x6014,
-	0x2048, 0x080c, 0xcb1b, 0x01c0, 0xa864, 0x9086, 0x0139, 0x1128,
-	0xa87b, 0x0005, 0xa883, 0x0000, 0x0028, 0x900e, 0x2001, 0x0005,
-	0x080c, 0x6eb8, 0x080c, 0xce10, 0x080c, 0x6c6d, 0x080c, 0xae78,
-	0x9085, 0x0001, 0x009e, 0x0005, 0x9006, 0x0ce0, 0x6000, 0x908a,
-	0x0016, 0x1a0c, 0x0dd5, 0x0002, 0xc7b4, 0xc7e2, 0xc7b6, 0xc803,
-	0xc7dd, 0xc7b4, 0xc777, 0xc77c, 0xc77c, 0xc777, 0xc777, 0xc777,
-	0xc777, 0xc777, 0xc777, 0xc777, 0x080c, 0x0dd5, 0x86ff, 0x1510,
-	0x6020, 0x9086, 0x0006, 0x01f0, 0x0096, 0x6014, 0x2048, 0x080c,
-	0xcb1b, 0x0158, 0xa87c, 0xd0cc, 0x0130, 0x0096, 0xa878, 0x2048,
-	0x080c, 0x0fb1, 0x009e, 0x080c, 0xce10, 0x009e, 0x080c, 0xd1d0,
-	0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x080c, 0x90c7,
-	0x080c, 0x9664, 0x9085, 0x0001, 0x0005, 0x0066, 0x080c, 0x1a5e,
-	0x006e, 0x08a0, 0x00e6, 0x2071, 0x19e7, 0x7024, 0x9c06, 0x1120,
-	0x080c, 0xa526, 0x00ee, 0x0850, 0x6020, 0x9084, 0x000f, 0x9086,
-	0x0006, 0x1150, 0x0086, 0x0096, 0x2049, 0x0001, 0x2c40, 0x080c,
-	0xa682, 0x009e, 0x008e, 0x0010, 0x080c, 0xa423, 0x00ee, 0x1904,
-	0xc7b6, 0x0804, 0xc777, 0x0036, 0x00e6, 0x2071, 0x19e7, 0x703c,
-	0x9c06, 0x1138, 0x901e, 0x080c, 0xa59c, 0x00ee, 0x003e, 0x0804,
-	0xc7b6, 0x080c, 0xa7b2, 0x00ee, 0x003e, 0x1904, 0xc7b6, 0x0804,
-	0xc777, 0x00c6, 0x6020, 0x9084, 0x000f, 0x0013, 0x00ce, 0x0005,
-	0xc836, 0xc8ff, 0xca66, 0xc840, 0xae78, 0xc836, 0xe107, 0xd238,
-	0xc8ff, 0x8e82, 0xcae5, 0xc82f, 0xc82f, 0xc82f, 0xc82f, 0x080c,
-	0x0dd5, 0x080c, 0xcd21, 0x1110, 0x080c, 0xb7f9, 0x0005, 0x080c,
-	0x955f, 0x080c, 0x9664, 0x0804, 0xae47, 0x601b, 0x0001, 0x0005,
-	0x080c, 0xcb1b, 0x0130, 0x6014, 0x0096, 0x2048, 0x2c00, 0xa896,
-	0x009e, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0dd5, 0x0002, 0xc85f,
-	0xc861, 0xc885, 0xc899, 0xc8bd, 0xc85f, 0xc836, 0xc836, 0xc836,
-	0xc899, 0xc899, 0xc85f, 0xc85f, 0xc85f, 0xc85f, 0xc8a3, 0x080c,
-	0x0dd5, 0x00e6, 0x6014, 0x0096, 0x2048, 0xa880, 0xc0b5, 0xa882,
-	0x009e, 0x2071, 0x19e7, 0x7024, 0x9c06, 0x01a0, 0x080c, 0xa423,
-	0x080c, 0xd1d0, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002,
-	0x2001, 0x1987, 0x2004, 0x601a, 0x080c, 0x90c7, 0x080c, 0x9664,
-	0x00ee, 0x0005, 0x601b, 0x0001, 0x0cd8, 0x0096, 0x6014, 0x2048,
-	0xa880, 0xc0b5, 0xa882, 0x009e, 0x080c, 0xd1d0, 0x6007, 0x0085,
-	0x6003, 0x000b, 0x6023, 0x0002, 0x080c, 0x90c7, 0x080c, 0x9664,
-	0x0005, 0x0096, 0x601b, 0x0001, 0x6014, 0x2048, 0xa880, 0xc0b5,
-	0xa882, 0x009e, 0x0005, 0x080c, 0x56d8, 0x01a8, 0x6014, 0x0096,
-	0x904d, 0x0180, 0xa864, 0xa867, 0x0103, 0xa87b, 0x0006, 0x9086,
-	0x0139, 0x1140, 0xa867, 0x0139, 0xa897, 0x4005, 0xa89b, 0x0004,
-	0x080c, 0x6c79, 0x009e, 0x0804, 0xae47, 0x6014, 0x0096, 0x904d,
-	0x05c8, 0xa97c, 0xd1e4, 0x05b0, 0x2001, 0x180f, 0x2004, 0xd0c4,
-	0x0110, 0x009e, 0x0005, 0xa884, 0x009e, 0x8003, 0x800b, 0x810b,
-	0x9108, 0x611a, 0x2001, 0x0030, 0x2c08, 0x080c, 0x15ee, 0x2001,
-	0x030c, 0x2004, 0x9086, 0x0041, 0x11a0, 0x6014, 0x0096, 0x904d,
-	0x090c, 0x0dd5, 0xa880, 0xd0f4, 0x1130, 0xc0f5, 0xa882, 0x009e,
-	0x601b, 0x0002, 0x0070, 0x009e, 0x2001, 0x0037, 0x2c08, 0x080c,
-	0x15ee, 0x6000, 0x9086, 0x0004, 0x1120, 0x2009, 0x0048, 0x080c,
-	0xaec2, 0x0005, 0x009e, 0x080c, 0x1a5e, 0x0804, 0xc885, 0x6000,
-	0x908a, 0x0016, 0x1a0c, 0x0dd5, 0x000b, 0x0005, 0xc916, 0xc83d,
-	0xc918, 0xc916, 0xc918, 0xc918, 0xc837, 0xc916, 0xc831, 0xc831,
-	0xc916, 0xc916, 0xc916, 0xc916, 0xc916, 0xc916, 0x080c, 0x0dd5,
-	0x6010, 0x00b6, 0x2058, 0xb804, 0x9084, 0x00ff, 0x00be, 0x908a,
-	0x000c, 0x1a0c, 0x0dd5, 0x00b6, 0x0013, 0x00be, 0x0005, 0xc933,
-	0xca00, 0xc935, 0xc975, 0xc935, 0xc975, 0xc935, 0xc943, 0xc933,
-	0xc975, 0xc933, 0xc964, 0x080c, 0x0dd5, 0x6004, 0x908e, 0x0016,
-	0x05c0, 0x908e, 0x0004, 0x05a8, 0x908e, 0x0002, 0x0590, 0x908e,
-	0x0052, 0x0904, 0xc9fc, 0x6004, 0x080c, 0xcd21, 0x0904, 0xca19,
-	0x908e, 0x0004, 0x1110, 0x080c, 0x31e1, 0x908e, 0x0021, 0x0904,
-	0xca1d, 0x908e, 0x0022, 0x0904, 0xca61, 0x908e, 0x003d, 0x0904,
-	0xca1d, 0x908e, 0x0039, 0x0904, 0xca21, 0x908e, 0x0035, 0x0904,
-	0xca21, 0x908e, 0x001e, 0x0178, 0x908e, 0x0001, 0x1140, 0x6010,
-	0x2058, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x0110, 0x080c,
-	0x31bc, 0x080c, 0xb7f9, 0x0804, 0xae78, 0x00c6, 0x00d6, 0x6104,
-	0x9186, 0x0016, 0x0904, 0xc9ed, 0x9186, 0x0002, 0x1904, 0xc9c2,
-	0x2001, 0x1837, 0x2004, 0xd08c, 0x11c8, 0x080c, 0x73b0, 0x11b0,
-	0x080c, 0xd216, 0x0138, 0x080c, 0x73d3, 0x1120, 0x080c, 0x72c0,
-	0x0804, 0xca4a, 0x2001, 0x197d, 0x2003, 0x0001, 0x2001, 0x1800,
-	0x2003, 0x0001, 0x080c, 0x72e2, 0x0804, 0xca4a, 0x6010, 0x2058,
-	0x2001, 0x1837, 0x2004, 0xd0ac, 0x1904, 0xca4a, 0xb8a0, 0x9084,
-	0xff80, 0x1904, 0xca4a, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0190,
-	0x8001, 0xb842, 0x6017, 0x0000, 0x6023, 0x0007, 0x601b, 0x0398,
-	0x6043, 0x0000, 0x080c, 0xadf1, 0x0128, 0x2b00, 0x6012, 0x6023,
-	0x0001, 0x0458, 0x00de, 0x00ce, 0x6004, 0x908e, 0x0002, 0x11a0,
-	0x6010, 0x2058, 0xb8a0, 0x9086, 0x007e, 0x1170, 0x2009, 0x1837,
-	0x2104, 0xc085, 0x200a, 0x00e6, 0x2071, 0x1800, 0x080c, 0x5fae,
-	0x00ee, 0x080c, 0xb7f9, 0x0030, 0x080c, 0xb7f9, 0x080c, 0x31bc,
-	0x080c, 0xd22b, 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x31e1,
-	0x012e, 0x00ee, 0x080c, 0xae78, 0x0005, 0x2001, 0x0002, 0x080c,
-	0x6550, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x910f, 0x080c,
-	0x9664, 0x00de, 0x00ce, 0x0c80, 0x080c, 0x31e1, 0x0804, 0xc971,
-	0x00c6, 0x00d6, 0x6104, 0x9186, 0x0016, 0x0d38, 0x6010, 0x2058,
-	0xb840, 0x9084, 0x00ff, 0x9005, 0x0904, 0xc9c2, 0x8001, 0xb842,
-	0x6003, 0x0001, 0x080c, 0x910f, 0x080c, 0x9664, 0x00de, 0x00ce,
-	0x0898, 0x080c, 0xb7f9, 0x0804, 0xc973, 0x080c, 0xb835, 0x0804,
-	0xc973, 0x00d6, 0x2c68, 0x6104, 0x080c, 0xd18e, 0x00de, 0x0118,
-	0x080c, 0xae47, 0x00f0, 0x6004, 0x8007, 0x6134, 0x918c, 0x00ff,
-	0x9105, 0x6036, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002,
-	0x603c, 0x600a, 0x2001, 0x1987, 0x2004, 0x601a, 0x602c, 0x2c08,
-	0x2060, 0x6024, 0xc0b5, 0x6026, 0x2160, 0x080c, 0x90c7, 0x080c,
-	0x9664, 0x0005, 0x00de, 0x00ce, 0x080c, 0xb7f9, 0x080c, 0x31bc,
-	0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x31e1, 0x6017, 0x0000,
-	0x6023, 0x0007, 0x601b, 0x0398, 0x6043, 0x0000, 0x012e, 0x00ee,
-	0x0005, 0x080c, 0xb277, 0x1904, 0xca19, 0x0005, 0x6000, 0x908a,
-	0x0016, 0x1a0c, 0x0dd5, 0x0096, 0x00d6, 0x001b, 0x00de, 0x009e,
-	0x0005, 0xca81, 0xca81, 0xca81, 0xca81, 0xca81, 0xca81, 0xca81,
-	0xca81, 0xca81, 0xc836, 0xca81, 0xc83d, 0xca83, 0xc83d, 0xca90,
-	0xca81, 0x080c, 0x0dd5, 0x6004, 0x9086, 0x008b, 0x0148, 0x6007,
-	0x008b, 0x6003, 0x000d, 0x080c, 0x90c7, 0x080c, 0x9664, 0x0005,
-	0x080c, 0xd20a, 0x0118, 0x080c, 0xd21d, 0x0010, 0x080c, 0xd22b,
-	0x080c, 0xcd04, 0x080c, 0xcb1b, 0x0570, 0x080c, 0x31bc, 0x080c,
-	0xcb1b, 0x0168, 0x6014, 0x2048, 0xa867, 0x0103, 0xa87b, 0x0006,
-	0xa877, 0x0000, 0xa880, 0xc0ed, 0xa882, 0x080c, 0x6c79, 0x2c68,
-	0x080c, 0xadf1, 0x0150, 0x6810, 0x6012, 0x080c, 0xcf90, 0x00c6,
-	0x2d60, 0x080c, 0xae78, 0x00ce, 0x0008, 0x2d60, 0x6017, 0x0000,
-	0x6023, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x910f,
-	0x080c, 0x9664, 0x00c8, 0x080c, 0xd20a, 0x0138, 0x6034, 0x9086,
-	0x4000, 0x1118, 0x080c, 0x31bc, 0x08d0, 0x6034, 0x908c, 0xff00,
-	0x810f, 0x9186, 0x0039, 0x0118, 0x9186, 0x0035, 0x1118, 0x080c,
-	0x31bc, 0x0868, 0x080c, 0xae78, 0x0005, 0x6000, 0x908a, 0x0016,
-	0x1a0c, 0x0dd5, 0x0002, 0xcafb, 0xcafb, 0xcafd, 0xcafd, 0xcafd,
-	0xcafb, 0xcafb, 0xae78, 0xcafb, 0xcafb, 0xcafb, 0xcafb, 0xcafb,
-	0xcafb, 0xcafb, 0xcafb, 0x080c, 0x0dd5, 0x080c, 0xa7b2, 0x6114,
-	0x0096, 0x2148, 0xa87b, 0x0006, 0x080c, 0x6c79, 0x009e, 0x0804,
-	0xae47, 0x9284, 0x0007, 0x1158, 0x9282, 0x1cd0, 0x0240, 0x2001,
-	0x181a, 0x2004, 0x9202, 0x1218, 0x9085, 0x0001, 0x0005, 0x9006,
-	0x0ce8, 0x0096, 0x0028, 0x0096, 0x0006, 0x6014, 0x2048, 0x000e,
-	0x0006, 0x9984, 0xf000, 0x9086, 0xf000, 0x0110, 0x080c, 0x10aa,
-	0x000e, 0x009e, 0x0005, 0x00e6, 0x00c6, 0x0036, 0x0006, 0x0126,
-	0x2091, 0x8000, 0x2061, 0x1cd0, 0x2071, 0x1800, 0x7354, 0x7074,
-	0x9302, 0x1640, 0x6020, 0x9206, 0x11f8, 0x080c, 0xd216, 0x0180,
-	0x9286, 0x0001, 0x1168, 0x6004, 0x9086, 0x0004, 0x1148, 0x080c,
-	0x31bc, 0x080c, 0xd22b, 0x00c6, 0x080c, 0xae78, 0x00ce, 0x0060,
-	0x080c, 0xcf0a, 0x0148, 0x080c, 0xcd21, 0x1110, 0x080c, 0xb7f9,
-	0x00c6, 0x080c, 0xae47, 0x00ce, 0x9ce0, 0x0018, 0x7068, 0x9c02,
-	0x1208, 0x08a0, 0x012e, 0x000e, 0x003e, 0x00ce, 0x00ee, 0x0005,
-	0x00e6, 0x00c6, 0x0016, 0x9188, 0x1000, 0x210c, 0x81ff, 0x0128,
-	0x2061, 0x1ab0, 0x6112, 0x080c, 0x31bc, 0x9006, 0x0010, 0x9085,
-	0x0001, 0x001e, 0x00ce, 0x00ee, 0x0005, 0x00c6, 0x0126, 0x2091,
-	0x8000, 0x080c, 0xadf1, 0x01b0, 0x6656, 0x2b00, 0x6012, 0x080c,
-	0x56d8, 0x0118, 0x080c, 0xcc48, 0x0168, 0x080c, 0xcf90, 0x6023,
-	0x0003, 0x2009, 0x004b, 0x080c, 0xaec2, 0x9085, 0x0001, 0x012e,
-	0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000,
-	0xbaa0, 0x080c, 0xae95, 0x0560, 0x6057, 0x0000, 0x2b00, 0x6012,
-	0x080c, 0xcf90, 0x6023, 0x0003, 0x0016, 0x080c, 0x9262, 0x0076,
-	0x903e, 0x080c, 0x913f, 0x2c08, 0x080c, 0xe2ca, 0x007e, 0x001e,
-	0xd184, 0x0128, 0x080c, 0xae47, 0x9085, 0x0001, 0x0070, 0x080c,
-	0x56d8, 0x0128, 0xd18c, 0x1170, 0x080c, 0xcc48, 0x0148, 0x2009,
-	0x004c, 0x080c, 0xaec2, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005,
-	0x9006, 0x0cd8, 0x2900, 0x6016, 0x0c90, 0x2009, 0x004d, 0x0010,
-	0x2009, 0x004e, 0x00f6, 0x00c6, 0x0046, 0x0016, 0x080c, 0xadf1,
-	0x2c78, 0x0590, 0x7e56, 0x2b00, 0x7812, 0x7823, 0x0003, 0x2021,
-	0x0005, 0x080c, 0xcc5a, 0x9186, 0x004d, 0x0118, 0x9186, 0x004e,
-	0x0148, 0x2001, 0x1980, 0x200c, 0xd1fc, 0x0168, 0x2f60, 0x080c,
-	0xae47, 0x00d0, 0x2001, 0x197f, 0x200c, 0xd1fc, 0x0120, 0x2f60,
-	0x080c, 0xae47, 0x0088, 0x2f60, 0x080c, 0x56d8, 0x0138, 0xd18c,
-	0x1118, 0x04f1, 0x0148, 0x0010, 0x2900, 0x7816, 0x001e, 0x0016,
-	0x080c, 0xaec2, 0x9085, 0x0001, 0x001e, 0x004e, 0x00ce, 0x00fe,
-	0x0005, 0x00f6, 0x00c6, 0x0046, 0x080c, 0xadf1, 0x2c78, 0x0508,
-	0x7e56, 0x2b00, 0x7812, 0x7823, 0x0003, 0x0096, 0x2021, 0x0004,
-	0x0489, 0x009e, 0x2001, 0x197e, 0x200c, 0xd1fc, 0x0120, 0x2f60,
-	0x080c, 0xae47, 0x0060, 0x2f60, 0x080c, 0x56d8, 0x0120, 0xd18c,
-	0x1160, 0x0071, 0x0130, 0x2009, 0x0052, 0x080c, 0xaec2, 0x9085,
-	0x0001, 0x004e, 0x00ce, 0x00fe, 0x0005, 0x2900, 0x7816, 0x0c98,
-	0x00c6, 0x080c, 0x4aa5, 0x00ce, 0x1120, 0x080c, 0xae47, 0x9006,
-	0x0005, 0xa867, 0x0000, 0xa86b, 0x8000, 0x2900, 0x6016, 0x9085,
-	0x0001, 0x0005, 0x0096, 0x0076, 0x0126, 0x2091, 0x8000, 0x080c,
-	0x6734, 0x0158, 0x2001, 0xcc5f, 0x0006, 0x900e, 0x2400, 0x080c,
-	0x6eb8, 0x080c, 0x6c79, 0x000e, 0x0807, 0x2418, 0x080c, 0x94f9,
-	0xbaa0, 0x0086, 0x2041, 0x0001, 0x2039, 0x0001, 0x2608, 0x080c,
-	0x927a, 0x008e, 0x080c, 0x913f, 0x2f08, 0x2648, 0x080c, 0xe2ca,
-	0xb93c, 0x81ff, 0x090c, 0x934b, 0x080c, 0x9664, 0x012e, 0x007e,
-	0x009e, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0xadf1,
-	0x0190, 0x660a, 0x2b08, 0x6112, 0x080c, 0xcf90, 0x6023, 0x0001,
-	0x2900, 0x6016, 0x2009, 0x001f, 0x080c, 0xaec2, 0x9085, 0x0001,
-	0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091,
-	0x8000, 0x080c, 0xae95, 0x01b8, 0x660a, 0x2b08, 0x6112, 0x080c,
-	0xcf90, 0x6023, 0x0008, 0x2900, 0x6016, 0x00f6, 0x2c78, 0x080c,
-	0x1725, 0x00fe, 0x2009, 0x0021, 0x080c, 0xaec2, 0x9085, 0x0001,
-	0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2009, 0x003d, 0x00c6,
-	0x0126, 0x0016, 0x2091, 0x8000, 0x080c, 0xadf1, 0x0198, 0x660a,
-	0x2b08, 0x6112, 0x080c, 0xcf90, 0x6023, 0x0001, 0x2900, 0x6016,
-	0x001e, 0x0016, 0x080c, 0xaec2, 0x9085, 0x0001, 0x001e, 0x012e,
-	0x00ce, 0x0005, 0x9006, 0x0cd0, 0x00c6, 0x0126, 0x2091, 0x8000,
-	0x080c, 0xae95, 0x0188, 0x2b08, 0x6112, 0x080c, 0xcf90, 0x6023,
-	0x0001, 0x2900, 0x6016, 0x2009, 0x0000, 0x080c, 0xaec2, 0x9085,
-	0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2009, 0x0044,
-	0x0830, 0x2009, 0x0049, 0x0818, 0x0026, 0x00b6, 0x6210, 0x2258,
-	0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, 0x00be, 0x002e, 0x0005,
-	0x0006, 0x0016, 0x6004, 0x908e, 0x0002, 0x0140, 0x908e, 0x0003,
-	0x0128, 0x908e, 0x0004, 0x0110, 0x9085, 0x0001, 0x001e, 0x000e,
-	0x0005, 0x0006, 0x0096, 0x6020, 0x9086, 0x0004, 0x0190, 0x6014,
-	0x904d, 0x080c, 0xcb1b, 0x0168, 0xa864, 0x9086, 0x0139, 0x0158,
-	0x6020, 0x9086, 0x0003, 0x0128, 0xa868, 0xd0fc, 0x0110, 0x9006,
-	0x0010, 0x9085, 0x0001, 0x009e, 0x000e, 0x0005, 0x00c6, 0x0126,
-	0x2091, 0x8000, 0x080c, 0xae95, 0x0198, 0x2b08, 0x6112, 0x080c,
-	0xcf90, 0x6023, 0x0001, 0x2900, 0x6016, 0x080c, 0x31bc, 0x2009,
-	0x0028, 0x080c, 0xaec2, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005,
-	0x9006, 0x0cd8, 0x9186, 0x0015, 0x11a8, 0x2011, 0x1824, 0x2204,
-	0x9086, 0x0074, 0x1178, 0x00b6, 0x080c, 0xba4b, 0x00be, 0x080c,
-	0xbc6e, 0x6003, 0x0001, 0x6007, 0x0029, 0x080c, 0x910f, 0x080c,
-	0x9664, 0x0078, 0x6014, 0x0096, 0x2048, 0xa868, 0x009e, 0xd0fc,
-	0x0148, 0x2001, 0x0001, 0x080c, 0xd14f, 0x080c, 0xb7f9, 0x080c,
-	0xae47, 0x0005, 0x0096, 0x6014, 0x904d, 0x090c, 0x0dd5, 0xa87b,
-	0x0030, 0xa883, 0x0000, 0xa897, 0x4005, 0xa89b, 0x0004, 0xa867,
-	0x0139, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c79, 0x012e, 0x009e,
-	0x080c, 0xae47, 0x0c30, 0x0096, 0x9186, 0x0016, 0x1128, 0x2001,
-	0x0004, 0x080c, 0x6550, 0x00e8, 0x9186, 0x0015, 0x1510, 0x2011,
-	0x1824, 0x2204, 0x9086, 0x0014, 0x11e0, 0x6010, 0x00b6, 0x2058,
-	0x080c, 0x669b, 0x00be, 0x080c, 0xbd3f, 0x1198, 0x6010, 0x00b6,
-	0x2058, 0xb890, 0x00be, 0x9005, 0x0160, 0x2001, 0x0006, 0x080c,
-	0x6550, 0x6014, 0x2048, 0xa868, 0xd0fc, 0x0170, 0x080c, 0xb24b,
-	0x0048, 0x6014, 0x2048, 0xa868, 0xd0fc, 0x0528, 0x080c, 0xb7f9,
-	0x080c, 0xae47, 0x009e, 0x0005, 0x6014, 0x6310, 0x2358, 0x904d,
-	0x090c, 0x0dd5, 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000,
-	0x900e, 0x080c, 0x6820, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108,
-	0xc18d, 0xa99a, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c79, 0x012e,
-	0x080c, 0xae47, 0x08f8, 0x6014, 0x904d, 0x090c, 0x0dd5, 0xa87b,
-	0x0030, 0xa883, 0x0000, 0xa897, 0x4005, 0xa89b, 0x0004, 0xa867,
-	0x0139, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c79, 0x012e, 0x080c,
-	0xae47, 0x0840, 0xa878, 0x9086, 0x0005, 0x1108, 0x0009, 0x0005,
-	0xa880, 0xc0ad, 0xa882, 0x0005, 0x6043, 0x0000, 0x6017, 0x0000,
-	0x6003, 0x0001, 0x6007, 0x0050, 0x080c, 0x90c7, 0x080c, 0x9664,
-	0x0005, 0x00c6, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc,
-	0x0120, 0x6020, 0x9084, 0x000f, 0x0013, 0x00ce, 0x0005, 0xc836,
-	0xce40, 0xce40, 0xce43, 0xe5dc, 0xe5f7, 0xe5fa, 0xc836, 0xc836,
-	0xc836, 0xc836, 0xc836, 0xc836, 0xc836, 0xc836, 0x080c, 0x0dd5,
-	0xa001, 0xa001, 0x0005, 0x0096, 0x6014, 0x904d, 0x0118, 0xa87c,
-	0xd0e4, 0x1110, 0x009e, 0x0010, 0x009e, 0x0005, 0x6010, 0x00b6,
-	0x2058, 0xb800, 0x00be, 0xd0bc, 0x0550, 0x2001, 0x1834, 0x2004,
-	0x9005, 0x1540, 0x00f6, 0x2c78, 0x080c, 0xadf1, 0x0508, 0x7810,
-	0x6012, 0x080c, 0xcf90, 0x7820, 0x9086, 0x0003, 0x0128, 0x7808,
-	0x603a, 0x2f00, 0x603e, 0x0020, 0x7808, 0x603e, 0x2f00, 0x603a,
-	0x602e, 0x6023, 0x0001, 0x6007, 0x0035, 0x6003, 0x0001, 0x7954,
-	0x6156, 0x080c, 0x90c7, 0x080c, 0x9664, 0x2f60, 0x00fe, 0x0005,
-	0x2f60, 0x00fe, 0x2001, 0x1988, 0x2004, 0x6042, 0x0005, 0x0016,
-	0x0096, 0x6814, 0x2048, 0xa87c, 0xd0e4, 0x0180, 0xc0e4, 0xa87e,
-	0xa877, 0x0000, 0xa893, 0x0000, 0xa88f, 0x0000, 0xd0cc, 0x0130,
-	0xc0cc, 0xa87e, 0xa878, 0x2048, 0x080c, 0x0fb1, 0x6830, 0x6036,
-	0x908e, 0x0001, 0x0148, 0x6803, 0x0002, 0x9086, 0x0005, 0x0170,
-	0x9006, 0x602e, 0x6032, 0x00d0, 0x681c, 0xc085, 0x681e, 0x6803,
-	0x0004, 0x6824, 0xc0f4, 0x9085, 0x0c00, 0x6826, 0x6814, 0x2048,
-	0xa8ac, 0x6938, 0x9102, 0xa8b0, 0x693c, 0x9103, 0x1e48, 0x683c,
-	0x602e, 0x6838, 0x9084, 0xfffc, 0x683a, 0x6032, 0x2d00, 0x603a,
-	0x6808, 0x603e, 0x6910, 0x6112, 0x6954, 0x6156, 0x6023, 0x0001,
-	0x6007, 0x0039, 0x6003, 0x0001, 0x080c, 0x90c7, 0x080c, 0x9664,
-	0x009e, 0x001e, 0x0005, 0x6024, 0xd0d4, 0x0510, 0xd0f4, 0x11f8,
-	0x6038, 0x940a, 0x603c, 0x9303, 0x0230, 0x9105, 0x0120, 0x6024,
-	0xc0d4, 0xc0f5, 0x0098, 0x643a, 0x633e, 0xac3e, 0xab42, 0x0046,
-	0x0036, 0x2400, 0xacac, 0x9402, 0xa836, 0x2300, 0xabb0, 0x9303,
-	0xa83a, 0x003e, 0x004e, 0x6024, 0xc0d4, 0x0000, 0x6026, 0x0005,
-	0xd0f4, 0x1138, 0xa83c, 0x603a, 0xa840, 0x603e, 0x6024, 0xc0f5,
-	0x6026, 0x0005, 0x0006, 0x0016, 0x6004, 0x908e, 0x0034, 0x01b8,
-	0x908e, 0x0035, 0x01a0, 0x908e, 0x0036, 0x0188, 0x908e, 0x0037,
-	0x0170, 0x908e, 0x0038, 0x0158, 0x908e, 0x0039, 0x0140, 0x908e,
-	0x003a, 0x0128, 0x908e, 0x003b, 0x0110, 0x9085, 0x0001, 0x001e,
-	0x000e, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00e6, 0x2001,
-	0x1982, 0x200c, 0x8000, 0x2014, 0x2001, 0x0032, 0x080c, 0x8f3f,
-	0x2001, 0x1986, 0x82ff, 0x1110, 0x2011, 0x0014, 0x2202, 0x2001,
-	0x1984, 0x200c, 0x8000, 0x2014, 0x2071, 0x196c, 0x711a, 0x721e,
-	0x2001, 0x0064, 0x080c, 0x8f3f, 0x2001, 0x1987, 0x82ff, 0x1110,
-	0x2011, 0x0014, 0x2202, 0x2001, 0x1988, 0x9288, 0x000a, 0x2102,
-	0x2001, 0x1a91, 0x2102, 0x2001, 0x0032, 0x080c, 0x15ee, 0x080c,
-	0x694b, 0x00ee, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x0006,
-	0x0016, 0x00e6, 0x2001, 0x1986, 0x2003, 0x0028, 0x2001, 0x1987,
-	0x2003, 0x0014, 0x2071, 0x196c, 0x701b, 0x0000, 0x701f, 0x07d0,
-	0x2001, 0x1988, 0x2009, 0x001e, 0x2102, 0x2001, 0x1a91, 0x2102,
-	0x2001, 0x0032, 0x080c, 0x15ee, 0x00ee, 0x001e, 0x000e, 0x0005,
-	0x0096, 0x6058, 0x904d, 0x0110, 0x080c, 0x1031, 0x009e, 0x0005,
-	0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0xadf1, 0x0180,
-	0x2b08, 0x6112, 0x0ca9, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009,
-	0x0033, 0x080c, 0xaec2, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005,
-	0x9006, 0x0cd8, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186,
-	0x0015, 0x1500, 0x7090, 0x9086, 0x0018, 0x11e0, 0x6014, 0x2048,
-	0xaa3c, 0xd2e4, 0x1160, 0x2c78, 0x080c, 0x98f7, 0x01d8, 0x707c,
-	0xaa50, 0x9206, 0x1160, 0x7080, 0xaa54, 0x9206, 0x1140, 0x6210,
-	0x00b6, 0x2258, 0xbaa0, 0x00be, 0x900e, 0x080c, 0x3201, 0x080c,
-	0xb24b, 0x0020, 0x080c, 0xb7f9, 0x080c, 0xae47, 0x00fe, 0x00ee,
-	0x009e, 0x0005, 0x7060, 0xaa54, 0x9206, 0x0d48, 0x0c80, 0x00c6,
-	0x0126, 0x2091, 0x8000, 0x080c, 0xadf1, 0x0188, 0x2b08, 0x6112,
-	0x080c, 0xcf90, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x004d,
-	0x080c, 0xaec2, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006,
-	0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x0016, 0x080c, 0xadf1,
-	0x0180, 0x2b08, 0x6112, 0x080c, 0xcf90, 0x6023, 0x0001, 0x2900,
-	0x6016, 0x001e, 0x080c, 0xaec2, 0x9085, 0x0001, 0x012e, 0x00ce,
-	0x0005, 0x001e, 0x9006, 0x0cd0, 0x0016, 0x0026, 0x0036, 0x0046,
-	0x0056, 0x0066, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186,
-	0x0015, 0x1568, 0x7190, 0x6014, 0x2048, 0xa814, 0x8003, 0x9106,
-	0x1530, 0x20e1, 0x0000, 0x2001, 0x19a0, 0x2003, 0x0000, 0x6014,
-	0x2048, 0xa830, 0x20a8, 0x8906, 0x8006, 0x8007, 0x9094, 0x003f,
-	0x22e8, 0x9084, 0xffc0, 0x9080, 0x001b, 0x20a0, 0x2001, 0x19a0,
-	0x0016, 0x200c, 0x080c, 0xd800, 0x001e, 0xa804, 0x9005, 0x0110,
-	0x2048, 0x0c38, 0x6014, 0x2048, 0xa867, 0x0103, 0x0010, 0x080c,
-	0xb7f9, 0x080c, 0xae47, 0x00fe, 0x00ee, 0x009e, 0x006e, 0x005e,
-	0x004e, 0x003e, 0x002e, 0x001e, 0x0005, 0x0096, 0x00e6, 0x00f6,
-	0x2071, 0x1800, 0x9186, 0x0015, 0x11b8, 0x7090, 0x9086, 0x0004,
-	0x1198, 0x6014, 0x2048, 0x2c78, 0x080c, 0x98f7, 0x01a8, 0x707c,
-	0xaa74, 0x9206, 0x1130, 0x7080, 0xaa78, 0x9206, 0x1110, 0x080c,
-	0x31bc, 0x080c, 0xb24b, 0x0020, 0x080c, 0xb7f9, 0x080c, 0xae47,
-	0x00fe, 0x00ee, 0x009e, 0x0005, 0x7060, 0xaa78, 0x9206, 0x0d78,
-	0x0c80, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015,
-	0x1550, 0x7090, 0x9086, 0x0004, 0x1530, 0x6014, 0x2048, 0x2c78,
-	0x080c, 0x98f7, 0x05f0, 0x707c, 0xaacc, 0x9206, 0x1180, 0x7080,
-	0xaad0, 0x9206, 0x1160, 0x080c, 0x31bc, 0x0016, 0xa998, 0xaab0,
-	0x9284, 0x1000, 0xc0fd, 0x080c, 0x5688, 0x001e, 0x0010, 0x080c,
-	0x5479, 0x080c, 0xcb1b, 0x0508, 0xa87b, 0x0000, 0xa883, 0x0000,
-	0xa897, 0x4000, 0x0080, 0x080c, 0xcb1b, 0x01b8, 0x6014, 0x2048,
-	0x080c, 0x5479, 0x1d70, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897,
-	0x4005, 0xa89b, 0x0004, 0x0126, 0x2091, 0x8000, 0xa867, 0x0139,
-	0x080c, 0x6c79, 0x012e, 0x080c, 0xae47, 0x00fe, 0x00ee, 0x009e,
-	0x0005, 0x7060, 0xaad0, 0x9206, 0x0930, 0x0888, 0x0016, 0x0026,
-	0xa87c, 0xd0ac, 0x0178, 0xa938, 0xaa34, 0x2100, 0x9205, 0x0150,
-	0xa890, 0x9106, 0x1118, 0xa88c, 0x9206, 0x0120, 0xa992, 0xaa8e,
-	0x9085, 0x0001, 0x002e, 0x001e, 0x0005, 0x00b6, 0x00d6, 0x0036,
-	0x080c, 0xcb1b, 0x0904, 0xd14b, 0x0096, 0x6314, 0x2348, 0xa87a,
-	0xa982, 0x929e, 0x4000, 0x1580, 0x6310, 0x00c6, 0x2358, 0x2009,
-	0x0000, 0xa868, 0xd0f4, 0x1140, 0x080c, 0x6820, 0x1108, 0xc185,
-	0xb800, 0xd0bc, 0x0108, 0xc18d, 0xaa96, 0xa99a, 0x20a9, 0x0004,
-	0xa860, 0x20e8, 0xa85c, 0x9080, 0x0031, 0x20a0, 0xb8c4, 0x20e0,
-	0xb8c8, 0x9080, 0x0006, 0x2098, 0x080c, 0x0f7c, 0x20a9, 0x0004,
-	0xa85c, 0x9080, 0x0035, 0x20a0, 0xb8c8, 0x9080, 0x000a, 0x2098,
-	0x080c, 0x0f7c, 0x00ce, 0x0090, 0xaa96, 0x3918, 0x9398, 0x0007,
-	0x231c, 0x6004, 0x9086, 0x0016, 0x0110, 0xa89b, 0x0004, 0xaba2,
-	0x6310, 0x2358, 0xb804, 0x9084, 0x00ff, 0xa89e, 0x080c, 0x6c6d,
-	0x6017, 0x0000, 0x009e, 0x003e, 0x00de, 0x00be, 0x0005, 0x0026,
-	0x0036, 0x0046, 0x00b6, 0x0096, 0x00f6, 0x6214, 0x2248, 0x6210,
-	0x2258, 0x2079, 0x0260, 0x9096, 0x0000, 0x11a0, 0xb814, 0x9084,
-	0x00ff, 0x900e, 0x080c, 0x283e, 0x2118, 0x831f, 0x939c, 0xff00,
-	0x7838, 0x9084, 0x00ff, 0x931d, 0x7c3c, 0x2011, 0x8018, 0x080c,
-	0x4b05, 0x00a8, 0x9096, 0x0001, 0x1148, 0x89ff, 0x0180, 0xa89b,
-	0x000d, 0x7838, 0xa8a6, 0x783c, 0xa8aa, 0x0048, 0x9096, 0x0002,
-	0x1130, 0xa89b, 0x000d, 0x7838, 0xa8a6, 0x783c, 0xa8aa, 0x00fe,
-	0x009e, 0x00be, 0x004e, 0x003e, 0x002e, 0x0005, 0x00c6, 0x0026,
-	0x0016, 0x9186, 0x0035, 0x0110, 0x6a38, 0x0008, 0x6a2c, 0x080c,
-	0xcb09, 0x01f0, 0x2260, 0x6120, 0x9186, 0x0003, 0x0118, 0x9186,
-	0x0006, 0x1190, 0x6838, 0x9206, 0x0140, 0x683c, 0x9206, 0x1160,
-	0x6108, 0x6838, 0x9106, 0x1140, 0x0020, 0x6008, 0x693c, 0x9106,
-	0x1118, 0x6010, 0x6910, 0x9106, 0x001e, 0x002e, 0x00ce, 0x0005,
-	0x9085, 0x0001, 0x0cc8, 0xa974, 0xd1cc, 0x0188, 0x918c, 0x00ff,
-	0x918e, 0x0002, 0x1160, 0xa9a8, 0x918c, 0x0f00, 0x810f, 0x918e,
-	0x0001, 0x1128, 0xa834, 0xa938, 0x9115, 0x190c, 0xc22b, 0x0005,
-	0x0036, 0x2019, 0x0001, 0x0010, 0x0036, 0x901e, 0x0499, 0x01e0,
-	0x080c, 0xcb1b, 0x01c8, 0x080c, 0xcd04, 0x6037, 0x4000, 0x6014,
-	0x6017, 0x0000, 0x0096, 0x2048, 0xa87c, 0x080c, 0xcd21, 0x1118,
-	0x080c, 0xb7f9, 0x0040, 0xa867, 0x0103, 0xa877, 0x0000, 0x83ff,
-	0x1129, 0x080c, 0x6c79, 0x009e, 0x003e, 0x0005, 0xa880, 0xd0b4,
-	0x0128, 0xa87b, 0x0006, 0xc0ec, 0xa882, 0x0048, 0xd0bc, 0x0118,
-	0xa87b, 0x0002, 0x0020, 0xa87b, 0x0005, 0x080c, 0xce10, 0xa877,
-	0x0000, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0ec, 0x0005, 0x0006,
-	0x2001, 0x1810, 0x2004, 0xd0f4, 0x000e, 0x0005, 0x0006, 0x2001,
-	0x1810, 0x2004, 0xd0e4, 0x000e, 0x0005, 0x0036, 0x0046, 0x6010,
-	0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, 0x0007, 0x080c, 0x4cbc,
-	0x004e, 0x003e, 0x0005, 0x0c51, 0x1d81, 0x0005, 0x2001, 0x1986,
-	0x2004, 0x601a, 0x0005, 0x2001, 0x1988, 0x2004, 0x6042, 0x0005,
-	0x080c, 0xae47, 0x0804, 0x9664, 0x00b6, 0x0066, 0x6000, 0x90b2,
-	0x0016, 0x1a0c, 0x0dd5, 0x001b, 0x006e, 0x00be, 0x0005, 0xd257,
-	0xd95d, 0xdaba, 0xd257, 0xd257, 0xd257, 0xd257, 0xd257, 0xd28e,
-	0xdb38, 0xd257, 0xd257, 0xd257, 0xd257, 0xd257, 0xd257, 0x080c,
-	0x0dd5, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0dd5, 0x0013,
-	0x006e, 0x0005, 0xd272, 0xe0a0, 0xd272, 0xd272, 0xd272, 0xd272,
-	0xd272, 0xd272, 0xe04d, 0xe0f4, 0xd272, 0xe717, 0xe74d, 0xe717,
-	0xe74d, 0xd272, 0x080c, 0x0dd5, 0x6000, 0x9082, 0x0016, 0x1a0c,
-	0x0dd5, 0x6000, 0x000a, 0x0005, 0xd28c, 0xdd15, 0xde05, 0xde27,
-	0xdee6, 0xd28c, 0xdfc4, 0xdf6e, 0xdb44, 0xe023, 0xe038, 0xd28c,
-	0xd28c, 0xd28c, 0xd28c, 0xd28c, 0x080c, 0x0dd5, 0x91b2, 0x0053,
-	0x1a0c, 0x0dd5, 0x2100, 0x91b2, 0x0040, 0x1a04, 0xd6d1, 0x0002,
-	0xd2d8, 0xd4c2, 0xd2d8, 0xd2d8, 0xd2d8, 0xd4cb, 0xd2d8, 0xd2d8,
-	0xd2d8, 0xd2d8, 0xd2d8, 0xd2d8, 0xd2d8, 0xd2d8, 0xd2d8, 0xd2d8,
-	0xd2d8, 0xd2d8, 0xd2d8, 0xd2d8, 0xd2d8, 0xd2d8, 0xd2d8, 0xd2da,
-	0xd33d, 0xd34c, 0xd3b0, 0xd3db, 0xd454, 0xd4ad, 0xd2d8, 0xd2d8,
-	0xd4ce, 0xd2d8, 0xd2d8, 0xd4e3, 0xd4f0, 0xd2d8, 0xd2d8, 0xd2d8,
-	0xd2d8, 0xd2d8, 0xd573, 0xd2d8, 0xd2d8, 0xd587, 0xd2d8, 0xd2d8,
-	0xd542, 0xd2d8, 0xd2d8, 0xd2d8, 0xd59f, 0xd2d8, 0xd2d8, 0xd2d8,
-	0xd61c, 0xd2d8, 0xd2d8, 0xd2d8, 0xd2d8, 0xd2d8, 0xd2d8, 0xd699,
-	0x080c, 0x0dd5, 0x080c, 0x6928, 0x1150, 0x2001, 0x1837, 0x2004,
-	0xd0cc, 0x1128, 0x9084, 0x0009, 0x9086, 0x0008, 0x1140, 0x6007,
-	0x0009, 0x602f, 0x0009, 0x6017, 0x0000, 0x0804, 0xd4bb, 0x080c,
-	0x68cd, 0x00e6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x6210, 0x2258,
-	0xbaa0, 0x0026, 0x2019, 0x0029, 0x080c, 0x9262, 0x0076, 0x903e,
-	0x080c, 0x913f, 0x2c08, 0x080c, 0xe2ca, 0x007e, 0x001e, 0x001e,
-	0x002e, 0x003e, 0x00ce, 0x00ee, 0x6610, 0x2658, 0x080c, 0x660f,
-	0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x1268, 0x0016, 0x0026,
-	0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be, 0x2c08, 0x080c, 0xe976,
-	0x002e, 0x001e, 0x1178, 0x080c, 0xe1fc, 0x1904, 0xd3a8, 0x080c,
-	0xe198, 0x1120, 0x6007, 0x0008, 0x0804, 0xd4bb, 0x6007, 0x0009,
-	0x0804, 0xd4bb, 0x080c, 0xe420, 0x0128, 0x080c, 0xe1fc, 0x0d78,
-	0x0804, 0xd3a8, 0x6017, 0x1900, 0x0c88, 0x080c, 0x32dc, 0x1904,
-	0xd6ce, 0x6106, 0x080c, 0xe14f, 0x6007, 0x0006, 0x0804, 0xd4bb,
-	0x6007, 0x0007, 0x0804, 0xd4bb, 0x080c, 0xe789, 0x1904, 0xd6ce,
-	0x080c, 0x32dc, 0x1904, 0xd6ce, 0x00d6, 0x6610, 0x2658, 0xbe04,
-	0x9684, 0x00ff, 0x9082, 0x0006, 0x1220, 0x2001, 0x0001, 0x080c,
-	0x653c, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0188, 0x9686,
-	0x0004, 0x0170, 0xbe04, 0x96b4, 0x00ff, 0x9686, 0x0006, 0x0140,
-	0x9686, 0x0004, 0x0128, 0x9686, 0x0005, 0x0110, 0x00de, 0x0480,
-	0x00e6, 0x2071, 0x0260, 0x7034, 0x9084, 0x0003, 0x1140, 0x7034,
-	0x9082, 0x0014, 0x0220, 0x7030, 0x9084, 0x0003, 0x0130, 0x00ee,
-	0x6017, 0x0000, 0x602f, 0x0007, 0x00b0, 0x00ee, 0x080c, 0xe260,
-	0x1190, 0x9686, 0x0006, 0x1140, 0x0026, 0x6210, 0x2258, 0xbaa0,
-	0x900e, 0x080c, 0x3201, 0x002e, 0x080c, 0x669b, 0x6007, 0x000a,
-	0x00de, 0x0804, 0xd4bb, 0x6007, 0x000b, 0x00de, 0x0804, 0xd4bb,
-	0x080c, 0x31bc, 0x080c, 0xd22b, 0x6007, 0x0001, 0x0804, 0xd4bb,
-	0x080c, 0xe789, 0x1904, 0xd6ce, 0x080c, 0x32dc, 0x1904, 0xd6ce,
-	0x2071, 0x0260, 0x7034, 0x90b4, 0x0003, 0x1948, 0x90b2, 0x0014,
-	0x0a30, 0x7030, 0x9084, 0x0003, 0x1910, 0x6610, 0x2658, 0xbe04,
-	0x9686, 0x0707, 0x09e8, 0x0026, 0x6210, 0x2258, 0xbaa0, 0x900e,
-	0x080c, 0x3201, 0x002e, 0x6007, 0x000c, 0x2001, 0x0001, 0x080c,
-	0xe956, 0x0804, 0xd4bb, 0x080c, 0x6928, 0x1140, 0x2001, 0x1837,
-	0x2004, 0x9084, 0x0009, 0x9086, 0x0008, 0x1110, 0x0804, 0xd2e7,
-	0x080c, 0x68cd, 0x6610, 0x2658, 0xbe04, 0x9684, 0x00ff, 0x9082,
-	0x0006, 0x06c8, 0x1138, 0x0026, 0x2001, 0x0006, 0x080c, 0x657c,
-	0x002e, 0x0050, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0004, 0x0120,
-	0x9686, 0x0006, 0x1904, 0xd3a8, 0x080c, 0xe26d, 0x1120, 0x6007,
-	0x000e, 0x0804, 0xd4bb, 0x0046, 0x6410, 0x2458, 0xbca0, 0x0046,
-	0x080c, 0x31bc, 0x080c, 0xd22b, 0x004e, 0x0016, 0x9006, 0x2009,
-	0x1848, 0x210c, 0xd1a4, 0x0148, 0x2009, 0x0029, 0x080c, 0xe58d,
-	0x6010, 0x2058, 0xb800, 0xc0e5, 0xb802, 0x001e, 0x004e, 0x6007,
-	0x0001, 0x0804, 0xd4bb, 0x2001, 0x0001, 0x080c, 0x653c, 0x0156,
-	0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011,
-	0x0270, 0x080c, 0xbdef, 0x003e, 0x002e, 0x001e, 0x015e, 0x9005,
-	0x0168, 0x96b4, 0xff00, 0x8637, 0x9682, 0x0004, 0x0a04, 0xd3a8,
-	0x9682, 0x0007, 0x0a04, 0xd404, 0x0804, 0xd3a8, 0x6017, 0x1900,
-	0x6007, 0x0009, 0x0804, 0xd4bb, 0x080c, 0x6928, 0x1140, 0x2001,
-	0x1837, 0x2004, 0x9084, 0x0009, 0x9086, 0x0008, 0x1110, 0x0804,
-	0xd2e7, 0x080c, 0x68cd, 0x6610, 0x2658, 0xbe04, 0x9684, 0x00ff,
-	0x9082, 0x0006, 0x0690, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0004,
-	0x0120, 0x9686, 0x0006, 0x1904, 0xd3a8, 0x080c, 0xe29b, 0x1130,
-	0x080c, 0xe198, 0x1118, 0x6007, 0x0010, 0x04e8, 0x0046, 0x6410,
-	0x2458, 0xbca0, 0x0046, 0x080c, 0x31bc, 0x080c, 0xd22b, 0x004e,
-	0x0016, 0x9006, 0x2009, 0x1848, 0x210c, 0xd1a4, 0x0148, 0x2009,
-	0x0029, 0x080c, 0xe58d, 0x6010, 0x2058, 0xb800, 0xc0e5, 0xb802,
-	0x001e, 0x004e, 0x6007, 0x0001, 0x00f0, 0x080c, 0xe420, 0x0140,
-	0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0978, 0x0804, 0xd3a8,
-	0x6017, 0x1900, 0x6007, 0x0009, 0x0070, 0x080c, 0x32dc, 0x1904,
-	0xd6ce, 0x080c, 0xe789, 0x1904, 0xd6ce, 0x080c, 0xd89b, 0x1904,
-	0xd3a8, 0x6007, 0x0012, 0x6003, 0x0001, 0x080c, 0x910f, 0x080c,
-	0x9664, 0x0005, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x910f,
-	0x080c, 0x9664, 0x0cb0, 0x6007, 0x0005, 0x0c68, 0x080c, 0xe789,
-	0x1904, 0xd6ce, 0x080c, 0x32dc, 0x1904, 0xd6ce, 0x080c, 0xd89b,
-	0x1904, 0xd3a8, 0x6007, 0x0020, 0x6003, 0x0001, 0x080c, 0x910f,
-	0x080c, 0x9664, 0x0005, 0x080c, 0x32dc, 0x1904, 0xd6ce, 0x6007,
-	0x0023, 0x6003, 0x0001, 0x080c, 0x910f, 0x080c, 0x9664, 0x0005,
-	0x080c, 0xe789, 0x1904, 0xd6ce, 0x080c, 0x32dc, 0x1904, 0xd6ce,
-	0x080c, 0xd89b, 0x1904, 0xd3a8, 0x0016, 0x0026, 0x00e6, 0x2071,
-	0x0260, 0x7244, 0x9286, 0xffff, 0x0180, 0x2c08, 0x080c, 0xcb09,
-	0x01b0, 0x2260, 0x7240, 0x6008, 0x9206, 0x1188, 0x6010, 0x9190,
-	0x0004, 0x2214, 0x9206, 0x01b8, 0x0050, 0x7240, 0x2c08, 0x9006,
-	0x080c, 0xe557, 0x1180, 0x7244, 0x9286, 0xffff, 0x01b0, 0x2160,
-	0x6007, 0x0026, 0x6017, 0x1700, 0x7214, 0x9296, 0xffff, 0x1180,
-	0x6007, 0x0025, 0x0068, 0x6020, 0x9086, 0x0007, 0x1d80, 0x6004,
-	0x9086, 0x0024, 0x1110, 0x080c, 0xae47, 0x2160, 0x6007, 0x0025,
-	0x6003, 0x0001, 0x080c, 0x910f, 0x080c, 0x9664, 0x00ee, 0x002e,
-	0x001e, 0x0005, 0x2001, 0x0001, 0x080c, 0x653c, 0x0156, 0x0016,
-	0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011, 0x0276,
-	0x080c, 0xbdef, 0x003e, 0x002e, 0x001e, 0x015e, 0x0120, 0x6007,
-	0x0031, 0x0804, 0xd4bb, 0x080c, 0xba63, 0x080c, 0x73b0, 0x1190,
-	0x0006, 0x0026, 0x0036, 0x080c, 0x73ca, 0x1138, 0x080c, 0x7698,
-	0x080c, 0x601b, 0x080c, 0x72e2, 0x0010, 0x080c, 0x7388, 0x003e,
-	0x002e, 0x000e, 0x0005, 0x080c, 0x32dc, 0x1904, 0xd6ce, 0x080c,
-	0xd89b, 0x1904, 0xd3a8, 0x6106, 0x080c, 0xd8b7, 0x1120, 0x6007,
-	0x002b, 0x0804, 0xd4bb, 0x6007, 0x002c, 0x0804, 0xd4bb, 0x080c,
-	0xe789, 0x1904, 0xd6ce, 0x080c, 0x32dc, 0x1904, 0xd6ce, 0x080c,
-	0xd89b, 0x1904, 0xd3a8, 0x6106, 0x080c, 0xd8bc, 0x1120, 0x6007,
-	0x002e, 0x0804, 0xd4bb, 0x6007, 0x002f, 0x0804, 0xd4bb, 0x080c,
-	0x32dc, 0x1904, 0xd6ce, 0x00e6, 0x00d6, 0x00c6, 0x6010, 0x2058,
-	0xb904, 0x9184, 0x00ff, 0x9086, 0x0006, 0x0158, 0x9184, 0xff00,
-	0x8007, 0x9086, 0x0006, 0x0128, 0x00ce, 0x00de, 0x00ee, 0x0804,
-	0xd4c2, 0x080c, 0x56d4, 0xd0e4, 0x0904, 0xd619, 0x2071, 0x026c,
-	0x7010, 0x603a, 0x7014, 0x603e, 0x7108, 0x720c, 0x080c, 0x6966,
-	0x0140, 0x6010, 0x2058, 0xb810, 0x9106, 0x1118, 0xb814, 0x9206,
-	0x0510, 0x080c, 0x6962, 0x15b8, 0x2069, 0x1800, 0x6880, 0x9206,
-	0x1590, 0x687c, 0x9106, 0x1578, 0x7210, 0x080c, 0xcb09, 0x0590,
-	0x080c, 0xd786, 0x0578, 0x080c, 0xe609, 0x0560, 0x622e, 0x6007,
-	0x0036, 0x6003, 0x0001, 0x080c, 0x90c7, 0x080c, 0x9664, 0x00ce,
-	0x00de, 0x00ee, 0x0005, 0x7214, 0x9286, 0xffff, 0x0150, 0x080c,
-	0xcb09, 0x01c0, 0x9280, 0x0002, 0x2004, 0x7110, 0x9106, 0x1190,
-	0x08e0, 0x7210, 0x2c08, 0x9085, 0x0001, 0x080c, 0xe557, 0x2c10,
-	0x2160, 0x0140, 0x0890, 0x6007, 0x0037, 0x602f, 0x0009, 0x6017,
-	0x1500, 0x08b8, 0x6007, 0x0037, 0x602f, 0x0003, 0x6017, 0x1700,
-	0x0880, 0x6007, 0x0012, 0x0868, 0x080c, 0x32dc, 0x1904, 0xd6ce,
-	0x6010, 0x2058, 0xb804, 0x9084, 0xff00, 0x8007, 0x9086, 0x0006,
-	0x1904, 0xd4c2, 0x00e6, 0x00d6, 0x00c6, 0x080c, 0x56d4, 0xd0e4,
-	0x0904, 0xd691, 0x2069, 0x1800, 0x2071, 0x026c, 0x7008, 0x603a,
-	0x720c, 0x623e, 0x9286, 0xffff, 0x1150, 0x7208, 0x00c6, 0x2c08,
-	0x9085, 0x0001, 0x080c, 0xe557, 0x2c10, 0x00ce, 0x05e8, 0x080c,
-	0xcb09, 0x05d0, 0x7108, 0x9280, 0x0002, 0x2004, 0x9106, 0x15a0,
-	0x00c6, 0x0026, 0x2260, 0x080c, 0xc741, 0x002e, 0x00ce, 0x7118,
-	0x918c, 0xff00, 0x810f, 0x9186, 0x0001, 0x0178, 0x9186, 0x0005,
-	0x0118, 0x9186, 0x0007, 0x1198, 0x9280, 0x0005, 0x2004, 0x9005,
-	0x0170, 0x080c, 0xd786, 0x0904, 0xd612, 0x0056, 0x7510, 0x7614,
-	0x080c, 0xe622, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x6007,
-	0x003b, 0x602f, 0x0009, 0x6017, 0x2a00, 0x6003, 0x0001, 0x080c,
-	0x90c7, 0x080c, 0x9664, 0x0c78, 0x6007, 0x003b, 0x602f, 0x0003,
-	0x6017, 0x0300, 0x6003, 0x0001, 0x080c, 0x90c7, 0x080c, 0x9664,
-	0x0c10, 0x6007, 0x003b, 0x602f, 0x000b, 0x6017, 0x0000, 0x0804,
-	0xd5e9, 0x00e6, 0x0026, 0x080c, 0x6928, 0x0550, 0x080c, 0x68cd,
-	0x080c, 0xe7fb, 0x1518, 0x2071, 0x1800, 0x70dc, 0x9085, 0x0003,
-	0x70de, 0x00f6, 0x2079, 0x0100, 0x72b0, 0x9284, 0x00ff, 0x707e,
-	0x78e6, 0x9284, 0xff00, 0x7280, 0x9205, 0x7082, 0x78ea, 0x00fe,
-	0x70e7, 0x0000, 0x080c, 0x6966, 0x0120, 0x2011, 0x1a00, 0x2013,
-	0x07d0, 0xd0ac, 0x1128, 0x080c, 0x2f96, 0x0010, 0x080c, 0xe82d,
-	0x002e, 0x00ee, 0x080c, 0xae47, 0x0804, 0xd4c1, 0x080c, 0xae47,
-	0x0005, 0x2600, 0x0002, 0xd6e5, 0xd716, 0xd727, 0xd6e5, 0xd6e5,
-	0xd6e7, 0xd738, 0xd6e5, 0xd6e5, 0xd6e5, 0xd704, 0xd6e5, 0xd6e5,
-	0xd6e5, 0xd743, 0xd750, 0xd781, 0xd6e5, 0x080c, 0x0dd5, 0x080c,
-	0xe789, 0x1d20, 0x080c, 0x32dc, 0x1d08, 0x080c, 0xd89b, 0x1148,
-	0x7038, 0x6016, 0x6007, 0x0045, 0x6003, 0x0001, 0x080c, 0x910f,
-	0x0005, 0x080c, 0x31bc, 0x080c, 0xd22b, 0x6007, 0x0001, 0x6003,
-	0x0001, 0x080c, 0x910f, 0x0005, 0x080c, 0xe789, 0x1938, 0x080c,
-	0x32dc, 0x1920, 0x080c, 0xd89b, 0x1d60, 0x703c, 0x6016, 0x6007,
-	0x004a, 0x6003, 0x0001, 0x080c, 0x910f, 0x0005, 0x080c, 0x32dc,
-	0x1904, 0xd6ce, 0x2009, 0x0041, 0x080c, 0xe836, 0x6007, 0x0047,
-	0x6003, 0x0001, 0x080c, 0x910f, 0x080c, 0x9664, 0x0005, 0x080c,
-	0x32dc, 0x1904, 0xd6ce, 0x2009, 0x0042, 0x080c, 0xe836, 0x6007,
-	0x0047, 0x6003, 0x0001, 0x080c, 0x910f, 0x080c, 0x9664, 0x0005,
-	0x080c, 0x32dc, 0x1904, 0xd6ce, 0x2009, 0x0046, 0x080c, 0xe836,
-	0x080c, 0xae47, 0x0005, 0x080c, 0xd7a3, 0x0904, 0xd6ce, 0x6007,
-	0x004e, 0x6003, 0x0001, 0x080c, 0x910f, 0x080c, 0x9664, 0x0005,
-	0x6007, 0x004f, 0x6017, 0x0000, 0x7134, 0x918c, 0x00ff, 0x81ff,
-	0x0508, 0x9186, 0x0001, 0x1160, 0x7140, 0x2001, 0x19bd, 0x2004,
-	0x9106, 0x11b0, 0x7144, 0x2001, 0x19be, 0x2004, 0x9106, 0x0190,
-	0x9186, 0x0002, 0x1168, 0x2011, 0x0276, 0x20a9, 0x0004, 0x6010,
-	0x0096, 0x2048, 0x2019, 0x000a, 0x080c, 0xbe03, 0x009e, 0x0110,
-	0x6017, 0x0001, 0x6003, 0x0001, 0x080c, 0x910f, 0x080c, 0x9664,
-	0x0005, 0x6007, 0x0050, 0x703c, 0x6016, 0x0ca0, 0x0016, 0x00e6,
-	0x2071, 0x0260, 0x00b6, 0x00c6, 0x2260, 0x6010, 0x2058, 0xb8cc,
-	0xd084, 0x0150, 0x7128, 0x6048, 0x9106, 0x1120, 0x712c, 0x6044,
-	0x9106, 0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x00ce, 0x00be,
-	0x00ee, 0x001e, 0x0005, 0x0016, 0x0096, 0x0086, 0x00e6, 0x01c6,
-	0x01d6, 0x0126, 0x2091, 0x8000, 0x2071, 0x1800, 0x7090, 0x908a,
-	0x00f9, 0x16e8, 0x20e1, 0x0000, 0x2001, 0x19a0, 0x2003, 0x0000,
-	0x080c, 0x1018, 0x05a0, 0x2900, 0x6016, 0x7090, 0x8004, 0xa816,
-	0x908a, 0x001e, 0x02d0, 0xa833, 0x001e, 0x20a9, 0x001e, 0xa860,
-	0x20e8, 0xa85c, 0x9080, 0x001b, 0x20a0, 0x2001, 0x19a0, 0x0016,
-	0x200c, 0x0471, 0x001e, 0x2940, 0x080c, 0x1018, 0x01c0, 0x2900,
-	0xa006, 0x2100, 0x81ff, 0x0180, 0x0c18, 0xa832, 0x20a8, 0xa860,
-	0x20e8, 0xa85c, 0x9080, 0x001b, 0x20a0, 0x2001, 0x19a0, 0x0016,
-	0x200c, 0x00b1, 0x001e, 0x0000, 0x9085, 0x0001, 0x0048, 0x2071,
-	0x1800, 0x7093, 0x0000, 0x6014, 0x2048, 0x080c, 0x0fb1, 0x9006,
-	0x012e, 0x01de, 0x01ce, 0x00ee, 0x008e, 0x009e, 0x001e, 0x0005,
-	0x0006, 0x0016, 0x0026, 0x0036, 0x00c6, 0x918c, 0xffff, 0x11a8,
-	0x080c, 0x23ab, 0x2099, 0x026c, 0x2001, 0x0014, 0x3518, 0x9312,
-	0x1218, 0x23a8, 0x4003, 0x00f8, 0x20a8, 0x4003, 0x22a8, 0x8108,
-	0x080c, 0x23ab, 0x2099, 0x0260, 0x0ca8, 0x080c, 0x23ab, 0x2061,
-	0x19a0, 0x6004, 0x2098, 0x6008, 0x3518, 0x9312, 0x1218, 0x23a8,
-	0x4003, 0x0048, 0x20a8, 0x4003, 0x22a8, 0x8108, 0x080c, 0x23ab,
-	0x2099, 0x0260, 0x0ca8, 0x2061, 0x19a0, 0x2019, 0x0280, 0x3300,
-	0x931e, 0x0110, 0x6006, 0x0020, 0x2001, 0x0260, 0x6006, 0x8108,
-	0x2162, 0x9292, 0x0021, 0x9296, 0xffff, 0x620a, 0x00ce, 0x003e,
-	0x002e, 0x001e, 0x000e, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036,
-	0x00c6, 0x81ff, 0x11b8, 0x080c, 0x23c3, 0x20a1, 0x024c, 0x2001,
-	0x0014, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003, 0x0418, 0x20a8,
-	0x4003, 0x82ff, 0x01f8, 0x22a8, 0x8108, 0x080c, 0x23c3, 0x20a1,
-	0x0240, 0x0c98, 0x080c, 0x23c3, 0x2061, 0x19a3, 0x6004, 0x20a0,
-	0x6008, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003, 0x0058, 0x20a8,
-	0x4003, 0x82ff, 0x0138, 0x22a8, 0x8108, 0x080c, 0x23c3, 0x20a1,
-	0x0240, 0x0c98, 0x2061, 0x19a3, 0x2019, 0x0260, 0x3400, 0x931e,
-	0x0110, 0x6006, 0x0020, 0x2001, 0x0240, 0x6006, 0x8108, 0x2162,
-	0x9292, 0x0021, 0x9296, 0xffff, 0x620a, 0x00ce, 0x003e, 0x002e,
-	0x001e, 0x000e, 0x0005, 0x00b6, 0x0066, 0x6610, 0x2658, 0xbe04,
-	0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0170, 0x9686, 0x0004,
-	0x0158, 0xbe04, 0x96b4, 0x00ff, 0x9686, 0x0006, 0x0128, 0x9686,
-	0x0004, 0x0110, 0x9085, 0x0001, 0x006e, 0x00be, 0x0005, 0x00d6,
-	0x080c, 0xd933, 0x00de, 0x0005, 0x00d6, 0x080c, 0xd940, 0x1520,
-	0x680c, 0x908c, 0xff00, 0x6820, 0x9084, 0x00ff, 0x9115, 0x6216,
-	0x6824, 0x602e, 0xd1e4, 0x0130, 0x9006, 0x080c, 0xe956, 0x2009,
-	0x0001, 0x0078, 0xd1ec, 0x0180, 0x6920, 0x918c, 0x00ff, 0x6824,
-	0x080c, 0x283e, 0x1148, 0x2001, 0x0001, 0x080c, 0xe956, 0x2110,
-	0x900e, 0x080c, 0x3201, 0x0018, 0x9085, 0x0001, 0x0008, 0x9006,
-	0x00de, 0x0005, 0x00b6, 0x00c6, 0x080c, 0xae95, 0x05a8, 0x0016,
-	0x0026, 0x00c6, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c,
-	0x283e, 0x1578, 0x080c, 0x659f, 0x1560, 0xbe12, 0xbd16, 0x00ce,
-	0x002e, 0x001e, 0x2b00, 0x6012, 0x080c, 0xe789, 0x11d8, 0x080c,
-	0x32dc, 0x11c0, 0x080c, 0xd89b, 0x0510, 0x2001, 0x0007, 0x080c,
-	0x6550, 0x2001, 0x0007, 0x080c, 0x657c, 0x6017, 0x0000, 0x6023,
-	0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x910f, 0x080c,
-	0x9664, 0x0010, 0x080c, 0xae47, 0x9085, 0x0001, 0x00ce, 0x00be,
-	0x0005, 0x080c, 0xae47, 0x00ce, 0x002e, 0x001e, 0x0ca8, 0x080c,
-	0xae47, 0x9006, 0x0c98, 0x2069, 0x026d, 0x6800, 0x9082, 0x0010,
-	0x1228, 0x6017, 0x0000, 0x9085, 0x0001, 0x0008, 0x9006, 0x0005,
-	0x6017, 0x0000, 0x2069, 0x026c, 0x6808, 0x9084, 0xff00, 0x9086,
-	0x0800, 0x1190, 0x6904, 0x9186, 0x0018, 0x0118, 0x9186, 0x0014,
-	0x1158, 0x810f, 0x6800, 0x9084, 0x00ff, 0x910d, 0x615a, 0x908e,
-	0x0014, 0x0110, 0x908e, 0x0010, 0x0005, 0x6004, 0x90b2, 0x0053,
-	0x1a0c, 0x0dd5, 0x91b6, 0x0013, 0x1130, 0x2008, 0x91b2, 0x0040,
-	0x1a04, 0xda8a, 0x0092, 0x91b6, 0x0027, 0x0120, 0x91b6, 0x0014,
-	0x190c, 0x0dd5, 0x2001, 0x0007, 0x080c, 0x657c, 0x080c, 0x955f,
-	0x080c, 0xae78, 0x080c, 0x9664, 0x0005, 0xd9bd, 0xd9bf, 0xd9bd,
-	0xd9bd, 0xd9bd, 0xd9bf, 0xd9ce, 0xda83, 0xda20, 0xda83, 0xda34,
-	0xda83, 0xd9ce, 0xda83, 0xda7b, 0xda83, 0xda7b, 0xda83, 0xda83,
-	0xd9bd, 0xd9bd, 0xd9bd, 0xd9bd, 0xd9bd, 0xd9bd, 0xd9bd, 0xd9bd,
-	0xd9bd, 0xd9bd, 0xd9bd, 0xd9bf, 0xd9bd, 0xda83, 0xd9bd, 0xd9bd,
-	0xda83, 0xd9bd, 0xda80, 0xda83, 0xd9bd, 0xd9bd, 0xd9bd, 0xd9bd,
-	0xda83, 0xda83, 0xd9bd, 0xda83, 0xda83, 0xd9bd, 0xd9c9, 0xd9bd,
-	0xd9bd, 0xd9bd, 0xd9bd, 0xda7f, 0xda83, 0xd9bd, 0xd9bd, 0xda83,
-	0xda83, 0xd9bd, 0xd9bd, 0xd9bd, 0xd9bd, 0x080c, 0x0dd5, 0x080c,
-	0x955f, 0x080c, 0xd22e, 0x6003, 0x0002, 0x080c, 0x9664, 0x0804,
-	0xda89, 0x9006, 0x080c, 0x653c, 0x0804, 0xda83, 0x080c, 0x6962,
-	0x1904, 0xda83, 0x9006, 0x080c, 0x653c, 0x6010, 0x2058, 0xb810,
-	0x9086, 0x00ff, 0x1140, 0x00f6, 0x2079, 0x1800, 0x78a8, 0x8000,
-	0x78aa, 0x00fe, 0x0428, 0x6010, 0x2058, 0xb8c0, 0x9005, 0x1178,
-	0x080c, 0xd216, 0x1904, 0xda83, 0x0036, 0x0046, 0xbba0, 0x2021,
-	0x0007, 0x080c, 0x4cbc, 0x004e, 0x003e, 0x0804, 0xda83, 0x080c,
-	0x330d, 0x1904, 0xda83, 0x2001, 0x1800, 0x2004, 0x9086, 0x0002,
-	0x1138, 0x00f6, 0x2079, 0x1800, 0x78a8, 0x8000, 0x78aa, 0x00fe,
-	0x2001, 0x0002, 0x080c, 0x6550, 0x080c, 0x955f, 0x6023, 0x0001,
-	0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x910f, 0x080c, 0x9664,
-	0x6110, 0x2158, 0x2009, 0x0001, 0x080c, 0x84d8, 0x0804, 0xda89,
+	0x1118, 0x080c, 0x31bf, 0x0868, 0x080c, 0xae92, 0x0005, 0x6000,
+	0x908a, 0x0016, 0x1a0c, 0x0dd5, 0x0002, 0xcb15, 0xcb15, 0xcb17,
+	0xcb17, 0xcb17, 0xcb15, 0xcb15, 0xae92, 0xcb15, 0xcb15, 0xcb15,
+	0xcb15, 0xcb15, 0xcb15, 0xcb15, 0xcb15, 0x080c, 0x0dd5, 0x080c,
+	0xa7cc, 0x6114, 0x0096, 0x2148, 0xa87b, 0x0006, 0x080c, 0x6c81,
+	0x009e, 0x0804, 0xae61, 0x9284, 0x0007, 0x1158, 0x9282, 0x1cd0,
+	0x0240, 0x2001, 0x181a, 0x2004, 0x9202, 0x1218, 0x9085, 0x0001,
+	0x0005, 0x9006, 0x0ce8, 0x0096, 0x0028, 0x0096, 0x0006, 0x6014,
+	0x2048, 0x000e, 0x0006, 0x9984, 0xf000, 0x9086, 0xf000, 0x0110,
+	0x080c, 0x10aa, 0x000e, 0x009e, 0x0005, 0x00e6, 0x00c6, 0x0036,
+	0x0006, 0x0126, 0x2091, 0x8000, 0x2061, 0x1cd0, 0x2071, 0x1800,
+	0x7354, 0x7074, 0x9302, 0x1640, 0x6020, 0x9206, 0x11f8, 0x080c,
+	0xd230, 0x0180, 0x9286, 0x0001, 0x1168, 0x6004, 0x9086, 0x0004,
+	0x1148, 0x080c, 0x31bf, 0x080c, 0xd245, 0x00c6, 0x080c, 0xae92,
+	0x00ce, 0x0060, 0x080c, 0xcf24, 0x0148, 0x080c, 0xcd3b, 0x1110,
+	0x080c, 0xb813, 0x00c6, 0x080c, 0xae61, 0x00ce, 0x9ce0, 0x0018,
+	0x7068, 0x9c02, 0x1208, 0x08a0, 0x012e, 0x000e, 0x003e, 0x00ce,
+	0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0016, 0x9188, 0x1000, 0x210c,
+	0x81ff, 0x0128, 0x2061, 0x1ab0, 0x6112, 0x080c, 0x31bf, 0x9006,
+	0x0010, 0x9085, 0x0001, 0x001e, 0x00ce, 0x00ee, 0x0005, 0x00c6,
+	0x0126, 0x2091, 0x8000, 0x080c, 0xae0b, 0x01b0, 0x6656, 0x2b00,
+	0x6012, 0x080c, 0x56d7, 0x0118, 0x080c, 0xcc62, 0x0168, 0x080c,
+	0xcfaa, 0x6023, 0x0003, 0x2009, 0x004b, 0x080c, 0xaedc, 0x9085,
+	0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126,
+	0x2091, 0x8000, 0xbaa0, 0x080c, 0xaeaf, 0x0560, 0x6057, 0x0000,
+	0x2b00, 0x6012, 0x080c, 0xcfaa, 0x6023, 0x0003, 0x0016, 0x080c,
+	0x928b, 0x0076, 0x903e, 0x080c, 0x9168, 0x2c08, 0x080c, 0xe2eb,
+	0x007e, 0x001e, 0xd184, 0x0128, 0x080c, 0xae61, 0x9085, 0x0001,
+	0x0070, 0x080c, 0x56d7, 0x0128, 0xd18c, 0x1170, 0x080c, 0xcc62,
+	0x0148, 0x2009, 0x004c, 0x080c, 0xaedc, 0x9085, 0x0001, 0x012e,
+	0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2900, 0x6016, 0x0c90, 0x2009,
+	0x004d, 0x0010, 0x2009, 0x004e, 0x00f6, 0x00c6, 0x0046, 0x0016,
+	0x080c, 0xae0b, 0x2c78, 0x0590, 0x7e56, 0x2b00, 0x7812, 0x7823,
+	0x0003, 0x2021, 0x0005, 0x080c, 0xcc74, 0x9186, 0x004d, 0x0118,
+	0x9186, 0x004e, 0x0148, 0x2001, 0x1980, 0x200c, 0xd1fc, 0x0168,
+	0x2f60, 0x080c, 0xae61, 0x00d0, 0x2001, 0x197f, 0x200c, 0xd1fc,
+	0x0120, 0x2f60, 0x080c, 0xae61, 0x0088, 0x2f60, 0x080c, 0x56d7,
+	0x0138, 0xd18c, 0x1118, 0x04f1, 0x0148, 0x0010, 0x2900, 0x7816,
+	0x001e, 0x0016, 0x080c, 0xaedc, 0x9085, 0x0001, 0x001e, 0x004e,
+	0x00ce, 0x00fe, 0x0005, 0x00f6, 0x00c6, 0x0046, 0x080c, 0xae0b,
+	0x2c78, 0x0508, 0x7e56, 0x2b00, 0x7812, 0x7823, 0x0003, 0x0096,
+	0x2021, 0x0004, 0x0489, 0x009e, 0x2001, 0x197e, 0x200c, 0xd1fc,
+	0x0120, 0x2f60, 0x080c, 0xae61, 0x0060, 0x2f60, 0x080c, 0x56d7,
+	0x0120, 0xd18c, 0x1160, 0x0071, 0x0130, 0x2009, 0x0052, 0x080c,
+	0xaedc, 0x9085, 0x0001, 0x004e, 0x00ce, 0x00fe, 0x0005, 0x2900,
+	0x7816, 0x0c98, 0x00c6, 0x080c, 0x4aa4, 0x00ce, 0x1120, 0x080c,
+	0xae61, 0x9006, 0x0005, 0xa867, 0x0000, 0xa86b, 0x8000, 0x2900,
+	0x6016, 0x9085, 0x0001, 0x0005, 0x0096, 0x0076, 0x0126, 0x2091,
+	0x8000, 0x080c, 0x6733, 0x0158, 0x2001, 0xcc79, 0x0006, 0x900e,
+	0x2400, 0x080c, 0x6ec0, 0x080c, 0x6c81, 0x000e, 0x0807, 0x2418,
+	0x080c, 0x9522, 0xbaa0, 0x0086, 0x2041, 0x0001, 0x2039, 0x0001,
+	0x2608, 0x080c, 0x92a3, 0x008e, 0x080c, 0x9168, 0x2f08, 0x2648,
+	0x080c, 0xe2eb, 0xb93c, 0x81ff, 0x090c, 0x9374, 0x080c, 0x968d,
+	0x012e, 0x007e, 0x009e, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000,
+	0x080c, 0xae0b, 0x0190, 0x660a, 0x2b08, 0x6112, 0x080c, 0xcfaa,
+	0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x001f, 0x080c, 0xaedc,
+	0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6,
+	0x0126, 0x2091, 0x8000, 0x080c, 0xaeaf, 0x01b8, 0x660a, 0x2b08,
+	0x6112, 0x080c, 0xcfaa, 0x6023, 0x0008, 0x2900, 0x6016, 0x00f6,
+	0x2c78, 0x080c, 0x1725, 0x00fe, 0x2009, 0x0021, 0x080c, 0xaedc,
+	0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2009,
+	0x003d, 0x00c6, 0x0126, 0x0016, 0x2091, 0x8000, 0x080c, 0xae0b,
+	0x0198, 0x660a, 0x2b08, 0x6112, 0x080c, 0xcfaa, 0x6023, 0x0001,
+	0x2900, 0x6016, 0x001e, 0x0016, 0x080c, 0xaedc, 0x9085, 0x0001,
+	0x001e, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd0, 0x00c6, 0x0126,
+	0x2091, 0x8000, 0x080c, 0xaeaf, 0x0188, 0x2b08, 0x6112, 0x080c,
+	0xcfaa, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x0000, 0x080c,
+	0xaedc, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8,
+	0x2009, 0x0044, 0x0830, 0x2009, 0x0049, 0x0818, 0x0026, 0x00b6,
+	0x6210, 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, 0x00be,
+	0x002e, 0x0005, 0x0006, 0x0016, 0x6004, 0x908e, 0x0002, 0x0140,
+	0x908e, 0x0003, 0x0128, 0x908e, 0x0004, 0x0110, 0x9085, 0x0001,
+	0x001e, 0x000e, 0x0005, 0x0006, 0x0096, 0x6020, 0x9086, 0x0004,
+	0x0190, 0x6014, 0x904d, 0x080c, 0xcb35, 0x0168, 0xa864, 0x9086,
+	0x0139, 0x0158, 0x6020, 0x9086, 0x0003, 0x0128, 0xa868, 0xd0fc,
+	0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x009e, 0x000e, 0x0005,
+	0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0xaeaf, 0x0198, 0x2b08,
+	0x6112, 0x080c, 0xcfaa, 0x6023, 0x0001, 0x2900, 0x6016, 0x080c,
+	0x31bf, 0x2009, 0x0028, 0x080c, 0xaedc, 0x9085, 0x0001, 0x012e,
+	0x00ce, 0x0005, 0x9006, 0x0cd8, 0x9186, 0x0015, 0x11a8, 0x2011,
+	0x1824, 0x2204, 0x9086, 0x0074, 0x1178, 0x00b6, 0x080c, 0xba65,
+	0x00be, 0x080c, 0xbc88, 0x6003, 0x0001, 0x6007, 0x0029, 0x080c,
+	0x9138, 0x080c, 0x968d, 0x0078, 0x6014, 0x0096, 0x2048, 0xa868,
+	0x009e, 0xd0fc, 0x0148, 0x2001, 0x0001, 0x080c, 0xd169, 0x080c,
+	0xb813, 0x080c, 0xae61, 0x0005, 0x0096, 0x6014, 0x904d, 0x090c,
+	0x0dd5, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, 0x4005, 0xa89b,
+	0x0004, 0xa867, 0x0139, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c81,
+	0x012e, 0x009e, 0x080c, 0xae61, 0x0c30, 0x0096, 0x9186, 0x0016,
+	0x1128, 0x2001, 0x0004, 0x080c, 0x654f, 0x00e8, 0x9186, 0x0015,
+	0x1510, 0x2011, 0x1824, 0x2204, 0x9086, 0x0014, 0x11e0, 0x6010,
+	0x00b6, 0x2058, 0x080c, 0x669a, 0x00be, 0x080c, 0xbd59, 0x1198,
+	0x6010, 0x00b6, 0x2058, 0xb890, 0x00be, 0x9005, 0x0160, 0x2001,
+	0x0006, 0x080c, 0x654f, 0x6014, 0x2048, 0xa868, 0xd0fc, 0x0170,
+	0x080c, 0xb265, 0x0048, 0x6014, 0x2048, 0xa868, 0xd0fc, 0x0528,
+	0x080c, 0xb813, 0x080c, 0xae61, 0x009e, 0x0005, 0x6014, 0x6310,
+	0x2358, 0x904d, 0x090c, 0x0dd5, 0xa87b, 0x0000, 0xa883, 0x0000,
+	0xa897, 0x4000, 0x900e, 0x080c, 0x681f, 0x1108, 0xc185, 0xb800,
+	0xd0bc, 0x0108, 0xc18d, 0xa99a, 0x0126, 0x2091, 0x8000, 0x080c,
+	0x6c81, 0x012e, 0x080c, 0xae61, 0x08f8, 0x6014, 0x904d, 0x090c,
+	0x0dd5, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, 0x4005, 0xa89b,
+	0x0004, 0xa867, 0x0139, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c81,
+	0x012e, 0x080c, 0xae61, 0x0840, 0xa878, 0x9086, 0x0005, 0x1108,
+	0x0009, 0x0005, 0xa880, 0xc0ad, 0xa882, 0x0005, 0x6043, 0x0000,
+	0x6017, 0x0000, 0x6003, 0x0001, 0x6007, 0x0050, 0x080c, 0x90f0,
+	0x080c, 0x968d, 0x0005, 0x00c6, 0x6010, 0x00b6, 0x2058, 0xb800,
+	0x00be, 0xd0bc, 0x0120, 0x6020, 0x9084, 0x000f, 0x0013, 0x00ce,
+	0x0005, 0xc850, 0xce5a, 0xce5a, 0xce5d, 0xe5fd, 0xe618, 0xe61b,
+	0xc850, 0xc850, 0xc850, 0xc850, 0xc850, 0xc850, 0xc850, 0xc850,
+	0x080c, 0x0dd5, 0xa001, 0xa001, 0x0005, 0x0096, 0x6014, 0x904d,
+	0x0118, 0xa87c, 0xd0e4, 0x1110, 0x009e, 0x0010, 0x009e, 0x0005,
+	0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0550, 0x2001,
+	0x1834, 0x2004, 0x9005, 0x1540, 0x00f6, 0x2c78, 0x080c, 0xae0b,
+	0x0508, 0x7810, 0x6012, 0x080c, 0xcfaa, 0x7820, 0x9086, 0x0003,
+	0x0128, 0x7808, 0x603a, 0x2f00, 0x603e, 0x0020, 0x7808, 0x603e,
+	0x2f00, 0x603a, 0x602e, 0x6023, 0x0001, 0x6007, 0x0035, 0x6003,
+	0x0001, 0x7954, 0x6156, 0x080c, 0x90f0, 0x080c, 0x968d, 0x2f60,
+	0x00fe, 0x0005, 0x2f60, 0x00fe, 0x2001, 0x1988, 0x2004, 0x6042,
+	0x0005, 0x0016, 0x0096, 0x6814, 0x2048, 0xa87c, 0xd0e4, 0x0180,
+	0xc0e4, 0xa87e, 0xa877, 0x0000, 0xa893, 0x0000, 0xa88f, 0x0000,
+	0xd0cc, 0x0130, 0xc0cc, 0xa87e, 0xa878, 0x2048, 0x080c, 0x0fb1,
+	0x6830, 0x6036, 0x908e, 0x0001, 0x0148, 0x6803, 0x0002, 0x9086,
+	0x0005, 0x0170, 0x9006, 0x602e, 0x6032, 0x00d0, 0x681c, 0xc085,
+	0x681e, 0x6803, 0x0004, 0x6824, 0xc0f4, 0x9085, 0x0c00, 0x6826,
+	0x6814, 0x2048, 0xa8ac, 0x6938, 0x9102, 0xa8b0, 0x693c, 0x9103,
+	0x1e48, 0x683c, 0x602e, 0x6838, 0x9084, 0xfffc, 0x683a, 0x6032,
+	0x2d00, 0x603a, 0x6808, 0x603e, 0x6910, 0x6112, 0x6954, 0x6156,
+	0x6023, 0x0001, 0x6007, 0x0039, 0x6003, 0x0001, 0x080c, 0x90f0,
+	0x080c, 0x968d, 0x009e, 0x001e, 0x0005, 0x6024, 0xd0d4, 0x0510,
+	0xd0f4, 0x11f8, 0x6038, 0x940a, 0x603c, 0x9303, 0x0230, 0x9105,
+	0x0120, 0x6024, 0xc0d4, 0xc0f5, 0x0098, 0x643a, 0x633e, 0xac3e,
+	0xab42, 0x0046, 0x0036, 0x2400, 0xacac, 0x9402, 0xa836, 0x2300,
+	0xabb0, 0x9303, 0xa83a, 0x003e, 0x004e, 0x6024, 0xc0d4, 0x0000,
+	0x6026, 0x0005, 0xd0f4, 0x1138, 0xa83c, 0x603a, 0xa840, 0x603e,
+	0x6024, 0xc0f5, 0x6026, 0x0005, 0x0006, 0x0016, 0x6004, 0x908e,
+	0x0034, 0x01b8, 0x908e, 0x0035, 0x01a0, 0x908e, 0x0036, 0x0188,
+	0x908e, 0x0037, 0x0170, 0x908e, 0x0038, 0x0158, 0x908e, 0x0039,
+	0x0140, 0x908e, 0x003a, 0x0128, 0x908e, 0x003b, 0x0110, 0x9085,
+	0x0001, 0x001e, 0x000e, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036,
+	0x00e6, 0x2001, 0x1982, 0x200c, 0x8000, 0x2014, 0x2001, 0x0032,
+	0x080c, 0x8f68, 0x2001, 0x1986, 0x82ff, 0x1110, 0x2011, 0x0014,
+	0x2202, 0x2001, 0x1984, 0x200c, 0x8000, 0x2014, 0x2071, 0x196c,
+	0x711a, 0x721e, 0x2001, 0x0064, 0x080c, 0x8f68, 0x2001, 0x1987,
+	0x82ff, 0x1110, 0x2011, 0x0014, 0x2202, 0x2001, 0x1988, 0x9288,
+	0x000a, 0x2102, 0x2001, 0x1a91, 0x2102, 0x2001, 0x0032, 0x080c,
+	0x15ee, 0x080c, 0x6953, 0x00ee, 0x003e, 0x002e, 0x001e, 0x000e,
+	0x0005, 0x0006, 0x0016, 0x00e6, 0x2001, 0x1986, 0x2003, 0x0028,
+	0x2001, 0x1987, 0x2003, 0x0014, 0x2071, 0x196c, 0x701b, 0x0000,
+	0x701f, 0x07d0, 0x2001, 0x1988, 0x2009, 0x001e, 0x2102, 0x2001,
+	0x1a91, 0x2102, 0x2001, 0x0032, 0x080c, 0x15ee, 0x00ee, 0x001e,
+	0x000e, 0x0005, 0x0096, 0x6058, 0x904d, 0x0110, 0x080c, 0x1031,
+	0x009e, 0x0005, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c,
+	0xae0b, 0x0180, 0x2b08, 0x6112, 0x0ca9, 0x6023, 0x0001, 0x2900,
+	0x6016, 0x2009, 0x0033, 0x080c, 0xaedc, 0x9085, 0x0001, 0x012e,
+	0x00ce, 0x0005, 0x9006, 0x0cd8, 0x0096, 0x00e6, 0x00f6, 0x2071,
+	0x1800, 0x9186, 0x0015, 0x1500, 0x7090, 0x9086, 0x0018, 0x11e0,
+	0x6014, 0x2048, 0xaa3c, 0xd2e4, 0x1160, 0x2c78, 0x080c, 0x9920,
+	0x01d8, 0x707c, 0xaa50, 0x9206, 0x1160, 0x7080, 0xaa54, 0x9206,
+	0x1140, 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be, 0x900e, 0x080c,
+	0x3208, 0x080c, 0xb265, 0x0020, 0x080c, 0xb813, 0x080c, 0xae61,
+	0x00fe, 0x00ee, 0x009e, 0x0005, 0x7060, 0xaa54, 0x9206, 0x0d48,
+	0x0c80, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0xae0b, 0x0188,
+	0x2b08, 0x6112, 0x080c, 0xcfaa, 0x6023, 0x0001, 0x2900, 0x6016,
+	0x2009, 0x004d, 0x080c, 0xaedc, 0x9085, 0x0001, 0x012e, 0x00ce,
+	0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x0016,
+	0x080c, 0xae0b, 0x0180, 0x2b08, 0x6112, 0x080c, 0xcfaa, 0x6023,
+	0x0001, 0x2900, 0x6016, 0x001e, 0x080c, 0xaedc, 0x9085, 0x0001,
+	0x012e, 0x00ce, 0x0005, 0x001e, 0x9006, 0x0cd0, 0x0016, 0x0026,
+	0x0036, 0x0046, 0x0056, 0x0066, 0x0096, 0x00e6, 0x00f6, 0x2071,
+	0x1800, 0x9186, 0x0015, 0x1568, 0x7190, 0x6014, 0x2048, 0xa814,
+	0x8003, 0x9106, 0x1530, 0x20e1, 0x0000, 0x2001, 0x19a0, 0x2003,
+	0x0000, 0x6014, 0x2048, 0xa830, 0x20a8, 0x8906, 0x8006, 0x8007,
+	0x9094, 0x003f, 0x22e8, 0x9084, 0xffc0, 0x9080, 0x001b, 0x20a0,
+	0x2001, 0x19a0, 0x0016, 0x200c, 0x080c, 0xd81b, 0x001e, 0xa804,
+	0x9005, 0x0110, 0x2048, 0x0c38, 0x6014, 0x2048, 0xa867, 0x0103,
+	0x0010, 0x080c, 0xb813, 0x080c, 0xae61, 0x00fe, 0x00ee, 0x009e,
+	0x006e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, 0x0005, 0x0096,
+	0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, 0x11b8, 0x7090,
+	0x9086, 0x0004, 0x1198, 0x6014, 0x2048, 0x2c78, 0x080c, 0x9920,
+	0x01a8, 0x707c, 0xaa74, 0x9206, 0x1130, 0x7080, 0xaa78, 0x9206,
+	0x1110, 0x080c, 0x31bf, 0x080c, 0xb265, 0x0020, 0x080c, 0xb813,
+	0x080c, 0xae61, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x7060, 0xaa78,
+	0x9206, 0x0d78, 0x0c80, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800,
+	0x9186, 0x0015, 0x1550, 0x7090, 0x9086, 0x0004, 0x1530, 0x6014,
+	0x2048, 0x2c78, 0x080c, 0x9920, 0x05f0, 0x707c, 0xaacc, 0x9206,
+	0x1180, 0x7080, 0xaad0, 0x9206, 0x1160, 0x080c, 0x31bf, 0x0016,
+	0xa998, 0xaab0, 0x9284, 0x1000, 0xc0fd, 0x080c, 0x5687, 0x001e,
+	0x0010, 0x080c, 0x5478, 0x080c, 0xcb35, 0x0508, 0xa87b, 0x0000,
+	0xa883, 0x0000, 0xa897, 0x4000, 0x0080, 0x080c, 0xcb35, 0x01b8,
+	0x6014, 0x2048, 0x080c, 0x5478, 0x1d70, 0xa87b, 0x0030, 0xa883,
+	0x0000, 0xa897, 0x4005, 0xa89b, 0x0004, 0x0126, 0x2091, 0x8000,
+	0xa867, 0x0139, 0x080c, 0x6c81, 0x012e, 0x080c, 0xae61, 0x00fe,
+	0x00ee, 0x009e, 0x0005, 0x7060, 0xaad0, 0x9206, 0x0930, 0x0888,
+	0x0016, 0x0026, 0xa87c, 0xd0ac, 0x0178, 0xa938, 0xaa34, 0x2100,
+	0x9205, 0x0150, 0xa890, 0x9106, 0x1118, 0xa88c, 0x9206, 0x0120,
+	0xa992, 0xaa8e, 0x9085, 0x0001, 0x002e, 0x001e, 0x0005, 0x00b6,
+	0x00d6, 0x0036, 0x080c, 0xcb35, 0x0904, 0xd165, 0x0096, 0x6314,
+	0x2348, 0xa87a, 0xa982, 0x929e, 0x4000, 0x1580, 0x6310, 0x00c6,
+	0x2358, 0x2009, 0x0000, 0xa868, 0xd0f4, 0x1140, 0x080c, 0x681f,
+	0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0xaa96, 0xa99a,
+	0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0031, 0x20a0,
+	0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x0006, 0x2098, 0x080c, 0x0f7c,
+	0x20a9, 0x0004, 0xa85c, 0x9080, 0x0035, 0x20a0, 0xb8c8, 0x9080,
+	0x000a, 0x2098, 0x080c, 0x0f7c, 0x00ce, 0x0090, 0xaa96, 0x3918,
+	0x9398, 0x0007, 0x231c, 0x6004, 0x9086, 0x0016, 0x0110, 0xa89b,
+	0x0004, 0xaba2, 0x6310, 0x2358, 0xb804, 0x9084, 0x00ff, 0xa89e,
+	0x080c, 0x6c75, 0x6017, 0x0000, 0x009e, 0x003e, 0x00de, 0x00be,
+	0x0005, 0x0026, 0x0036, 0x0046, 0x00b6, 0x0096, 0x00f6, 0x6214,
+	0x2248, 0x6210, 0x2258, 0x2079, 0x0260, 0x9096, 0x0000, 0x11a0,
+	0xb814, 0x9084, 0x00ff, 0x900e, 0x080c, 0x283e, 0x2118, 0x831f,
+	0x939c, 0xff00, 0x7838, 0x9084, 0x00ff, 0x931d, 0x7c3c, 0x2011,
+	0x8018, 0x080c, 0x4b04, 0x00a8, 0x9096, 0x0001, 0x1148, 0x89ff,
+	0x0180, 0xa89b, 0x000d, 0x7838, 0xa8a6, 0x783c, 0xa8aa, 0x0048,
+	0x9096, 0x0002, 0x1130, 0xa89b, 0x000d, 0x7838, 0xa8a6, 0x783c,
+	0xa8aa, 0x00fe, 0x009e, 0x00be, 0x004e, 0x003e, 0x002e, 0x0005,
+	0x00c6, 0x0026, 0x0016, 0x9186, 0x0035, 0x0110, 0x6a38, 0x0008,
+	0x6a2c, 0x080c, 0xcb23, 0x01f0, 0x2260, 0x6120, 0x9186, 0x0003,
+	0x0118, 0x9186, 0x0006, 0x1190, 0x6838, 0x9206, 0x0140, 0x683c,
+	0x9206, 0x1160, 0x6108, 0x6838, 0x9106, 0x1140, 0x0020, 0x6008,
+	0x693c, 0x9106, 0x1118, 0x6010, 0x6910, 0x9106, 0x001e, 0x002e,
+	0x00ce, 0x0005, 0x9085, 0x0001, 0x0cc8, 0xa974, 0xd1cc, 0x0188,
+	0x918c, 0x00ff, 0x918e, 0x0002, 0x1160, 0xa9a8, 0x918c, 0x0f00,
+	0x810f, 0x918e, 0x0001, 0x1128, 0xa834, 0xa938, 0x9115, 0x190c,
+	0xc245, 0x0005, 0x0036, 0x2019, 0x0001, 0x0010, 0x0036, 0x901e,
+	0x0499, 0x01e0, 0x080c, 0xcb35, 0x01c8, 0x080c, 0xcd1e, 0x6037,
+	0x4000, 0x6014, 0x6017, 0x0000, 0x0096, 0x2048, 0xa87c, 0x080c,
+	0xcd3b, 0x1118, 0x080c, 0xb813, 0x0040, 0xa867, 0x0103, 0xa877,
+	0x0000, 0x83ff, 0x1129, 0x080c, 0x6c81, 0x009e, 0x003e, 0x0005,
+	0xa880, 0xd0b4, 0x0128, 0xa87b, 0x0006, 0xc0ec, 0xa882, 0x0048,
+	0xd0bc, 0x0118, 0xa87b, 0x0002, 0x0020, 0xa87b, 0x0005, 0x080c,
+	0xce2a, 0xa877, 0x0000, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0ec,
+	0x0005, 0x0006, 0x2001, 0x1810, 0x2004, 0xd0f4, 0x000e, 0x0005,
+	0x0006, 0x2001, 0x1810, 0x2004, 0xd0e4, 0x000e, 0x0005, 0x0036,
+	0x0046, 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, 0x0007,
+	0x080c, 0x4cbb, 0x004e, 0x003e, 0x0005, 0x0c51, 0x1d81, 0x0005,
+	0x2001, 0x1986, 0x2004, 0x601a, 0x0005, 0x2001, 0x1988, 0x2004,
+	0x6042, 0x0005, 0x080c, 0xae61, 0x0804, 0x968d, 0x00b6, 0x0066,
+	0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0dd5, 0x001b, 0x006e, 0x00be,
+	0x0005, 0xd271, 0xd978, 0xdad5, 0xd271, 0xd271, 0xd271, 0xd271,
+	0xd271, 0xd2a8, 0xdb57, 0xd271, 0xd271, 0xd271, 0xd271, 0xd271,
+	0xd271, 0x080c, 0x0dd5, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c,
+	0x0dd5, 0x0013, 0x006e, 0x0005, 0xd28c, 0xe0bf, 0xd28c, 0xd28c,
+	0xd28c, 0xd28c, 0xd28c, 0xd28c, 0xe06c, 0xe113, 0xd28c, 0xe738,
+	0xe76e, 0xe738, 0xe76e, 0xd28c, 0x080c, 0x0dd5, 0x6000, 0x9082,
+	0x0016, 0x1a0c, 0x0dd5, 0x6000, 0x000a, 0x0005, 0xd2a6, 0xdd34,
+	0xde24, 0xde46, 0xdf05, 0xd2a6, 0xdfe3, 0xdf8d, 0xdb63, 0xe042,
+	0xe057, 0xd2a6, 0xd2a6, 0xd2a6, 0xd2a6, 0xd2a6, 0x080c, 0x0dd5,
+	0x91b2, 0x0053, 0x1a0c, 0x0dd5, 0x2100, 0x91b2, 0x0040, 0x1a04,
+	0xd6ec, 0x0002, 0xd2f2, 0xd4dd, 0xd2f2, 0xd2f2, 0xd2f2, 0xd4e6,
+	0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2,
+	0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2,
+	0xd2f2, 0xd2f4, 0xd357, 0xd366, 0xd3ca, 0xd3f5, 0xd46e, 0xd4c8,
+	0xd2f2, 0xd2f2, 0xd4e9, 0xd2f2, 0xd2f2, 0xd4fe, 0xd50b, 0xd2f2,
+	0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, 0xd58e, 0xd2f2, 0xd2f2, 0xd5a2,
+	0xd2f2, 0xd2f2, 0xd55d, 0xd2f2, 0xd2f2, 0xd2f2, 0xd5ba, 0xd2f2,
+	0xd2f2, 0xd2f2, 0xd637, 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2, 0xd2f2,
+	0xd2f2, 0xd6b4, 0x080c, 0x0dd5, 0x080c, 0x6930, 0x1150, 0x2001,
+	0x1837, 0x2004, 0xd0cc, 0x1128, 0x9084, 0x0009, 0x9086, 0x0008,
+	0x1140, 0x6007, 0x0009, 0x602f, 0x0009, 0x6017, 0x0000, 0x0804,
+	0xd4d6, 0x080c, 0x68cc, 0x00e6, 0x00c6, 0x0036, 0x0026, 0x0016,
+	0x6210, 0x2258, 0xbaa0, 0x0026, 0x2019, 0x0029, 0x080c, 0x928b,
+	0x0076, 0x903e, 0x080c, 0x9168, 0x2c08, 0x080c, 0xe2eb, 0x007e,
+	0x001e, 0x001e, 0x002e, 0x003e, 0x00ce, 0x00ee, 0x6610, 0x2658,
+	0x080c, 0x660e, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x1268,
+	0x0016, 0x0026, 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be, 0x2c08,
+	0x080c, 0xe997, 0x002e, 0x001e, 0x1178, 0x080c, 0xe21d, 0x1904,
+	0xd3c2, 0x080c, 0xe1b9, 0x1120, 0x6007, 0x0008, 0x0804, 0xd4d6,
+	0x6007, 0x0009, 0x0804, 0xd4d6, 0x080c, 0xe441, 0x0128, 0x080c,
+	0xe21d, 0x0d78, 0x0804, 0xd3c2, 0x6017, 0x1900, 0x0c88, 0x080c,
+	0x32e3, 0x1904, 0xd6e9, 0x6106, 0x080c, 0xe16e, 0x6007, 0x0006,
+	0x0804, 0xd4d6, 0x6007, 0x0007, 0x0804, 0xd4d6, 0x080c, 0xe7aa,
+	0x1904, 0xd6e9, 0x080c, 0x32e3, 0x1904, 0xd6e9, 0x00d6, 0x6610,
+	0x2658, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x1220, 0x2001,
+	0x0001, 0x080c, 0x653b, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006,
+	0x0188, 0x9686, 0x0004, 0x0170, 0xbe04, 0x96b4, 0x00ff, 0x9686,
+	0x0006, 0x0140, 0x9686, 0x0004, 0x0128, 0x9686, 0x0005, 0x0110,
+	0x00de, 0x0480, 0x00e6, 0x2071, 0x0260, 0x7034, 0x9084, 0x0003,
+	0x1140, 0x7034, 0x9082, 0x0014, 0x0220, 0x7030, 0x9084, 0x0003,
+	0x0130, 0x00ee, 0x6017, 0x0000, 0x602f, 0x0007, 0x00b0, 0x00ee,
+	0x080c, 0xe281, 0x1190, 0x9686, 0x0006, 0x1140, 0x0026, 0x6210,
+	0x2258, 0xbaa0, 0x900e, 0x080c, 0x3208, 0x002e, 0x080c, 0x669a,
+	0x6007, 0x000a, 0x00de, 0x0804, 0xd4d6, 0x6007, 0x000b, 0x00de,
+	0x0804, 0xd4d6, 0x080c, 0x31bf, 0x080c, 0xd245, 0x6007, 0x0001,
+	0x0804, 0xd4d6, 0x080c, 0xe7aa, 0x1904, 0xd6e9, 0x080c, 0x32e3,
+	0x1904, 0xd6e9, 0x2071, 0x0260, 0x7034, 0x90b4, 0x0003, 0x1948,
+	0x90b2, 0x0014, 0x0a30, 0x7030, 0x9084, 0x0003, 0x1910, 0x6610,
+	0x2658, 0xbe04, 0x9686, 0x0707, 0x09e8, 0x0026, 0x6210, 0x2258,
+	0xbaa0, 0x900e, 0x080c, 0x3208, 0x002e, 0x6007, 0x000c, 0x2001,
+	0x0001, 0x080c, 0xe977, 0x0804, 0xd4d6, 0x080c, 0x6930, 0x1140,
+	0x2001, 0x1837, 0x2004, 0x9084, 0x0009, 0x9086, 0x0008, 0x1110,
+	0x0804, 0xd301, 0x080c, 0x68cc, 0x6610, 0x2658, 0xbe04, 0x9684,
+	0x00ff, 0x9082, 0x0006, 0x06c8, 0x1138, 0x0026, 0x2001, 0x0006,
+	0x080c, 0x657b, 0x002e, 0x0050, 0x96b4, 0xff00, 0x8637, 0x9686,
+	0x0004, 0x0120, 0x9686, 0x0006, 0x1904, 0xd3c2, 0x080c, 0xe28e,
+	0x1120, 0x6007, 0x000e, 0x0804, 0xd4d6, 0x0046, 0x6410, 0x2458,
+	0xbca0, 0x0046, 0x080c, 0x31bf, 0x080c, 0xd245, 0x004e, 0x0016,
+	0x9006, 0x2009, 0x1848, 0x210c, 0xd1a4, 0x0148, 0x2009, 0x0029,
+	0x080c, 0xe5ae, 0x6010, 0x2058, 0xb800, 0xc0e5, 0xb802, 0x001e,
+	0x004e, 0x6007, 0x0001, 0x0804, 0xd4d6, 0x2001, 0x0001, 0x080c,
+	0x653b, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019,
+	0x1805, 0x2011, 0x0270, 0x080c, 0xbe09, 0x003e, 0x002e, 0x001e,
+	0x015e, 0x9005, 0x0168, 0x96b4, 0xff00, 0x8637, 0x9682, 0x0004,
+	0x0a04, 0xd3c2, 0x9682, 0x0007, 0x0a04, 0xd41e, 0x0804, 0xd3c2,
+	0x6017, 0x1900, 0x6007, 0x0009, 0x0804, 0xd4d6, 0x080c, 0x6930,
+	0x1140, 0x2001, 0x1837, 0x2004, 0x9084, 0x0009, 0x9086, 0x0008,
+	0x1110, 0x0804, 0xd301, 0x080c, 0x68cc, 0x6610, 0x2658, 0xbe04,
+	0x9684, 0x00ff, 0x9082, 0x0006, 0x0698, 0x0150, 0x96b4, 0xff00,
+	0x8637, 0x9686, 0x0004, 0x0120, 0x9686, 0x0006, 0x1904, 0xd3c2,
+	0x080c, 0xe2bc, 0x1130, 0x080c, 0xe1b9, 0x1118, 0x6007, 0x0010,
+	0x04e8, 0x0046, 0x6410, 0x2458, 0xbca0, 0x0046, 0x080c, 0x31bf,
+	0x080c, 0xd245, 0x004e, 0x0016, 0x9006, 0x2009, 0x1848, 0x210c,
+	0xd1a4, 0x0148, 0x2009, 0x0029, 0x080c, 0xe5ae, 0x6010, 0x2058,
+	0xb800, 0xc0e5, 0xb802, 0x001e, 0x004e, 0x6007, 0x0001, 0x00f0,
+	0x080c, 0xe441, 0x0140, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006,
+	0x0978, 0x0804, 0xd3c2, 0x6017, 0x1900, 0x6007, 0x0009, 0x0070,
+	0x080c, 0x32e3, 0x1904, 0xd6e9, 0x080c, 0xe7aa, 0x1904, 0xd6e9,
+	0x080c, 0xd8b6, 0x1904, 0xd3c2, 0x6007, 0x0012, 0x6003, 0x0001,
+	0x080c, 0x9138, 0x080c, 0x968d, 0x0005, 0x6007, 0x0001, 0x6003,
+	0x0001, 0x080c, 0x9138, 0x080c, 0x968d, 0x0cb0, 0x6007, 0x0005,
+	0x0c68, 0x080c, 0xe7aa, 0x1904, 0xd6e9, 0x080c, 0x32e3, 0x1904,
+	0xd6e9, 0x080c, 0xd8b6, 0x1904, 0xd3c2, 0x6007, 0x0020, 0x6003,
+	0x0001, 0x080c, 0x9138, 0x080c, 0x968d, 0x0005, 0x080c, 0x32e3,
+	0x1904, 0xd6e9, 0x6007, 0x0023, 0x6003, 0x0001, 0x080c, 0x9138,
+	0x080c, 0x968d, 0x0005, 0x080c, 0xe7aa, 0x1904, 0xd6e9, 0x080c,
+	0x32e3, 0x1904, 0xd6e9, 0x080c, 0xd8b6, 0x1904, 0xd3c2, 0x0016,
+	0x0026, 0x00e6, 0x2071, 0x0260, 0x7244, 0x9286, 0xffff, 0x0180,
+	0x2c08, 0x080c, 0xcb23, 0x01b0, 0x2260, 0x7240, 0x6008, 0x9206,
+	0x1188, 0x6010, 0x9190, 0x0004, 0x2214, 0x9206, 0x01b8, 0x0050,
+	0x7240, 0x2c08, 0x9006, 0x080c, 0xe578, 0x1180, 0x7244, 0x9286,
+	0xffff, 0x01b0, 0x2160, 0x6007, 0x0026, 0x6017, 0x1700, 0x7214,
+	0x9296, 0xffff, 0x1180, 0x6007, 0x0025, 0x0068, 0x6020, 0x9086,
+	0x0007, 0x1d80, 0x6004, 0x9086, 0x0024, 0x1110, 0x080c, 0xae61,
+	0x2160, 0x6007, 0x0025, 0x6003, 0x0001, 0x080c, 0x9138, 0x080c,
+	0x968d, 0x00ee, 0x002e, 0x001e, 0x0005, 0x2001, 0x0001, 0x080c,
+	0x653b, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019,
+	0x1805, 0x2011, 0x0276, 0x080c, 0xbe09, 0x003e, 0x002e, 0x001e,
+	0x015e, 0x0120, 0x6007, 0x0031, 0x0804, 0xd4d6, 0x080c, 0xba7d,
+	0x080c, 0x73bc, 0x1190, 0x0006, 0x0026, 0x0036, 0x080c, 0x73d6,
+	0x1138, 0x080c, 0x76a4, 0x080c, 0x601a, 0x080c, 0x72ee, 0x0010,
+	0x080c, 0x7394, 0x003e, 0x002e, 0x000e, 0x0005, 0x080c, 0x32e3,
+	0x1904, 0xd6e9, 0x080c, 0xd8b6, 0x1904, 0xd3c2, 0x6106, 0x080c,
+	0xd8d2, 0x1120, 0x6007, 0x002b, 0x0804, 0xd4d6, 0x6007, 0x002c,
+	0x0804, 0xd4d6, 0x080c, 0xe7aa, 0x1904, 0xd6e9, 0x080c, 0x32e3,
+	0x1904, 0xd6e9, 0x080c, 0xd8b6, 0x1904, 0xd3c2, 0x6106, 0x080c,
+	0xd8d7, 0x1120, 0x6007, 0x002e, 0x0804, 0xd4d6, 0x6007, 0x002f,
+	0x0804, 0xd4d6, 0x080c, 0x32e3, 0x1904, 0xd6e9, 0x00e6, 0x00d6,
+	0x00c6, 0x6010, 0x2058, 0xb904, 0x9184, 0x00ff, 0x9086, 0x0006,
+	0x0158, 0x9184, 0xff00, 0x8007, 0x9086, 0x0006, 0x0128, 0x00ce,
+	0x00de, 0x00ee, 0x0804, 0xd4dd, 0x080c, 0x56d3, 0xd0e4, 0x0904,
+	0xd634, 0x2071, 0x026c, 0x7010, 0x603a, 0x7014, 0x603e, 0x7108,
+	0x720c, 0x080c, 0x696e, 0x0140, 0x6010, 0x2058, 0xb810, 0x9106,
+	0x1118, 0xb814, 0x9206, 0x0510, 0x080c, 0x696a, 0x15b8, 0x2069,
+	0x1800, 0x6880, 0x9206, 0x1590, 0x687c, 0x9106, 0x1578, 0x7210,
+	0x080c, 0xcb23, 0x0590, 0x080c, 0xd7a1, 0x0578, 0x080c, 0xe62a,
+	0x0560, 0x622e, 0x6007, 0x0036, 0x6003, 0x0001, 0x080c, 0x90f0,
+	0x080c, 0x968d, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x7214, 0x9286,
+	0xffff, 0x0150, 0x080c, 0xcb23, 0x01c0, 0x9280, 0x0002, 0x2004,
+	0x7110, 0x9106, 0x1190, 0x08e0, 0x7210, 0x2c08, 0x9085, 0x0001,
+	0x080c, 0xe578, 0x2c10, 0x2160, 0x0140, 0x0890, 0x6007, 0x0037,
+	0x602f, 0x0009, 0x6017, 0x1500, 0x08b8, 0x6007, 0x0037, 0x602f,
+	0x0003, 0x6017, 0x1700, 0x0880, 0x6007, 0x0012, 0x0868, 0x080c,
+	0x32e3, 0x1904, 0xd6e9, 0x6010, 0x2058, 0xb804, 0x9084, 0xff00,
+	0x8007, 0x9086, 0x0006, 0x1904, 0xd4dd, 0x00e6, 0x00d6, 0x00c6,
+	0x080c, 0x56d3, 0xd0e4, 0x0904, 0xd6ac, 0x2069, 0x1800, 0x2071,
+	0x026c, 0x7008, 0x603a, 0x720c, 0x623e, 0x9286, 0xffff, 0x1150,
+	0x7208, 0x00c6, 0x2c08, 0x9085, 0x0001, 0x080c, 0xe578, 0x2c10,
+	0x00ce, 0x05e8, 0x080c, 0xcb23, 0x05d0, 0x7108, 0x9280, 0x0002,
+	0x2004, 0x9106, 0x15a0, 0x00c6, 0x0026, 0x2260, 0x080c, 0xc75b,
+	0x002e, 0x00ce, 0x7118, 0x918c, 0xff00, 0x810f, 0x9186, 0x0001,
+	0x0178, 0x9186, 0x0005, 0x0118, 0x9186, 0x0007, 0x1198, 0x9280,
+	0x0005, 0x2004, 0x9005, 0x0170, 0x080c, 0xd7a1, 0x0904, 0xd62d,
+	0x0056, 0x7510, 0x7614, 0x080c, 0xe643, 0x005e, 0x00ce, 0x00de,
+	0x00ee, 0x0005, 0x6007, 0x003b, 0x602f, 0x0009, 0x6017, 0x2a00,
+	0x6003, 0x0001, 0x080c, 0x90f0, 0x080c, 0x968d, 0x0c78, 0x6007,
+	0x003b, 0x602f, 0x0003, 0x6017, 0x0300, 0x6003, 0x0001, 0x080c,
+	0x90f0, 0x080c, 0x968d, 0x0c10, 0x6007, 0x003b, 0x602f, 0x000b,
+	0x6017, 0x0000, 0x0804, 0xd604, 0x00e6, 0x0026, 0x080c, 0x6930,
+	0x0550, 0x080c, 0x68cc, 0x080c, 0xe81c, 0x1518, 0x2071, 0x1800,
+	0x70dc, 0x9085, 0x0003, 0x70de, 0x00f6, 0x2079, 0x0100, 0x72b0,
+	0x9284, 0x00ff, 0x707e, 0x78e6, 0x9284, 0xff00, 0x7280, 0x9205,
+	0x7082, 0x78ea, 0x00fe, 0x70e7, 0x0000, 0x080c, 0x696e, 0x0120,
+	0x2011, 0x1a00, 0x2013, 0x07d0, 0xd0ac, 0x1128, 0x080c, 0x2f96,
+	0x0010, 0x080c, 0xe84e, 0x002e, 0x00ee, 0x080c, 0xae61, 0x0804,
+	0xd4dc, 0x080c, 0xae61, 0x0005, 0x2600, 0x0002, 0xd700, 0xd731,
+	0xd742, 0xd700, 0xd700, 0xd702, 0xd753, 0xd700, 0xd700, 0xd700,
+	0xd71f, 0xd700, 0xd700, 0xd700, 0xd75e, 0xd76b, 0xd79c, 0xd700,
+	0x080c, 0x0dd5, 0x080c, 0xe7aa, 0x1d20, 0x080c, 0x32e3, 0x1d08,
+	0x080c, 0xd8b6, 0x1148, 0x7038, 0x6016, 0x6007, 0x0045, 0x6003,
+	0x0001, 0x080c, 0x9138, 0x0005, 0x080c, 0x31bf, 0x080c, 0xd245,
+	0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x9138, 0x0005, 0x080c,
+	0xe7aa, 0x1938, 0x080c, 0x32e3, 0x1920, 0x080c, 0xd8b6, 0x1d60,
+	0x703c, 0x6016, 0x6007, 0x004a, 0x6003, 0x0001, 0x080c, 0x9138,
+	0x0005, 0x080c, 0x32e3, 0x1904, 0xd6e9, 0x2009, 0x0041, 0x080c,
+	0xe857, 0x6007, 0x0047, 0x6003, 0x0001, 0x080c, 0x9138, 0x080c,
+	0x968d, 0x0005, 0x080c, 0x32e3, 0x1904, 0xd6e9, 0x2009, 0x0042,
+	0x080c, 0xe857, 0x6007, 0x0047, 0x6003, 0x0001, 0x080c, 0x9138,
+	0x080c, 0x968d, 0x0005, 0x080c, 0x32e3, 0x1904, 0xd6e9, 0x2009,
+	0x0046, 0x080c, 0xe857, 0x080c, 0xae61, 0x0005, 0x080c, 0xd7be,
+	0x0904, 0xd6e9, 0x6007, 0x004e, 0x6003, 0x0001, 0x080c, 0x9138,
+	0x080c, 0x968d, 0x0005, 0x6007, 0x004f, 0x6017, 0x0000, 0x7134,
+	0x918c, 0x00ff, 0x81ff, 0x0508, 0x9186, 0x0001, 0x1160, 0x7140,
+	0x2001, 0x19bd, 0x2004, 0x9106, 0x11b0, 0x7144, 0x2001, 0x19be,
+	0x2004, 0x9106, 0x0190, 0x9186, 0x0002, 0x1168, 0x2011, 0x0276,
+	0x20a9, 0x0004, 0x6010, 0x0096, 0x2048, 0x2019, 0x000a, 0x080c,
+	0xbe1d, 0x009e, 0x0110, 0x6017, 0x0001, 0x6003, 0x0001, 0x080c,
+	0x9138, 0x080c, 0x968d, 0x0005, 0x6007, 0x0050, 0x703c, 0x6016,
+	0x0ca0, 0x0016, 0x00e6, 0x2071, 0x0260, 0x00b6, 0x00c6, 0x2260,
+	0x6010, 0x2058, 0xb8cc, 0xd084, 0x0150, 0x7128, 0x6048, 0x9106,
+	0x1120, 0x712c, 0x6044, 0x9106, 0x0110, 0x9006, 0x0010, 0x9085,
+	0x0001, 0x00ce, 0x00be, 0x00ee, 0x001e, 0x0005, 0x0016, 0x0096,
+	0x0086, 0x00e6, 0x01c6, 0x01d6, 0x0126, 0x2091, 0x8000, 0x2071,
+	0x1800, 0x7090, 0x908a, 0x00f9, 0x16e8, 0x20e1, 0x0000, 0x2001,
+	0x19a0, 0x2003, 0x0000, 0x080c, 0x1018, 0x05a0, 0x2900, 0x6016,
+	0x7090, 0x8004, 0xa816, 0x908a, 0x001e, 0x02d0, 0xa833, 0x001e,
+	0x20a9, 0x001e, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001b, 0x20a0,
+	0x2001, 0x19a0, 0x0016, 0x200c, 0x0471, 0x001e, 0x2940, 0x080c,
+	0x1018, 0x01c0, 0x2900, 0xa006, 0x2100, 0x81ff, 0x0180, 0x0c18,
+	0xa832, 0x20a8, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001b, 0x20a0,
+	0x2001, 0x19a0, 0x0016, 0x200c, 0x00b1, 0x001e, 0x0000, 0x9085,
+	0x0001, 0x0048, 0x2071, 0x1800, 0x7093, 0x0000, 0x6014, 0x2048,
+	0x080c, 0x0fb1, 0x9006, 0x012e, 0x01de, 0x01ce, 0x00ee, 0x008e,
+	0x009e, 0x001e, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00c6,
+	0x918c, 0xffff, 0x11a8, 0x080c, 0x23ab, 0x2099, 0x026c, 0x2001,
+	0x0014, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003, 0x00f8, 0x20a8,
+	0x4003, 0x22a8, 0x8108, 0x080c, 0x23ab, 0x2099, 0x0260, 0x0ca8,
+	0x080c, 0x23ab, 0x2061, 0x19a0, 0x6004, 0x2098, 0x6008, 0x3518,
+	0x9312, 0x1218, 0x23a8, 0x4003, 0x0048, 0x20a8, 0x4003, 0x22a8,
+	0x8108, 0x080c, 0x23ab, 0x2099, 0x0260, 0x0ca8, 0x2061, 0x19a0,
+	0x2019, 0x0280, 0x3300, 0x931e, 0x0110, 0x6006, 0x0020, 0x2001,
+	0x0260, 0x6006, 0x8108, 0x2162, 0x9292, 0x0021, 0x9296, 0xffff,
+	0x620a, 0x00ce, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x0006,
+	0x0016, 0x0026, 0x0036, 0x00c6, 0x81ff, 0x11b8, 0x080c, 0x23c3,
+	0x20a1, 0x024c, 0x2001, 0x0014, 0x3518, 0x9312, 0x1218, 0x23a8,
+	0x4003, 0x0418, 0x20a8, 0x4003, 0x82ff, 0x01f8, 0x22a8, 0x8108,
+	0x080c, 0x23c3, 0x20a1, 0x0240, 0x0c98, 0x080c, 0x23c3, 0x2061,
+	0x19a3, 0x6004, 0x20a0, 0x6008, 0x3518, 0x9312, 0x1218, 0x23a8,
+	0x4003, 0x0058, 0x20a8, 0x4003, 0x82ff, 0x0138, 0x22a8, 0x8108,
+	0x080c, 0x23c3, 0x20a1, 0x0240, 0x0c98, 0x2061, 0x19a3, 0x2019,
+	0x0260, 0x3400, 0x931e, 0x0110, 0x6006, 0x0020, 0x2001, 0x0240,
+	0x6006, 0x8108, 0x2162, 0x9292, 0x0021, 0x9296, 0xffff, 0x620a,
+	0x00ce, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x00b6, 0x0066,
 	0x6610, 0x2658, 0xbe04, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006,
-	0x0904, 0xda83, 0x9686, 0x0004, 0x0904, 0xda83, 0x080c, 0x8c92,
-	0x2001, 0x0004, 0x0804, 0xda81, 0x2001, 0x1800, 0x2004, 0x9086,
-	0x0003, 0x1158, 0x0036, 0x0046, 0x6010, 0x2058, 0xbba0, 0x2021,
-	0x0006, 0x080c, 0x4cbc, 0x004e, 0x003e, 0x2001, 0x0006, 0x080c,
-	0xdaa7, 0x6610, 0x2658, 0xbe04, 0x0066, 0x96b4, 0xff00, 0x8637,
-	0x9686, 0x0006, 0x006e, 0x0168, 0x2001, 0x0006, 0x080c, 0x657c,
-	0x9284, 0x00ff, 0x908e, 0x0007, 0x1120, 0x2001, 0x0006, 0x080c,
-	0x6550, 0x080c, 0x6962, 0x11f8, 0x2001, 0x1837, 0x2004, 0xd0a4,
-	0x01d0, 0xbe04, 0x96b4, 0x00ff, 0x9686, 0x0006, 0x01a0, 0x00f6,
-	0x2079, 0x1800, 0x78a8, 0x8000, 0x78aa, 0x00fe, 0x0804, 0xda08,
-	0x2001, 0x0004, 0x0030, 0x2001, 0x0006, 0x0449, 0x0020, 0x0018,
-	0x0010, 0x080c, 0x657c, 0x080c, 0x955f, 0x080c, 0xae47, 0x080c,
-	0x9664, 0x0005, 0x2600, 0x0002, 0xda9e, 0xda9e, 0xda9e, 0xda9e,
-	0xda9e, 0xdaa0, 0xda9e, 0xdaa0, 0xda9e, 0xda9e, 0xdaa0, 0xda9e,
-	0xda9e, 0xda9e, 0xdaa0, 0xdaa0, 0xdaa0, 0xdaa0, 0x080c, 0x0dd5,
-	0x080c, 0x955f, 0x080c, 0xae47, 0x080c, 0x9664, 0x0005, 0x0016,
-	0x00b6, 0x00d6, 0x6110, 0x2158, 0xb900, 0xd184, 0x0138, 0x080c,
-	0x6550, 0x9006, 0x080c, 0x653c, 0x080c, 0x31e1, 0x00de, 0x00be,
-	0x001e, 0x0005, 0x6610, 0x2658, 0xb804, 0x9084, 0xff00, 0x8007,
-	0x90b2, 0x000c, 0x1a0c, 0x0dd5, 0x91b6, 0x0015, 0x1110, 0x003b,
-	0x0028, 0x91b6, 0x0016, 0x190c, 0x0dd5, 0x006b, 0x0005, 0xb8e2,
-	0xb8e2, 0xb8e2, 0xb8e2, 0xb8e2, 0xb8e2, 0xdb22, 0xdae7, 0xb8e2,
-	0xb8e2, 0xb8e2, 0xb8e2, 0xb8e2, 0xb8e2, 0xb8e2, 0xb8e2, 0xb8e2,
-	0xb8e2, 0xdb22, 0xdb29, 0xb8e2, 0xb8e2, 0xb8e2, 0xb8e2, 0x00f6,
-	0x080c, 0x6962, 0x11d8, 0x080c, 0xd216, 0x11c0, 0x6010, 0x905d,
-	0x01a8, 0xb8c0, 0x9005, 0x0190, 0x9006, 0x080c, 0x653c, 0x2001,
-	0x0002, 0x080c, 0x6550, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007,
-	0x0002, 0x080c, 0x910f, 0x080c, 0x9664, 0x00d0, 0x2011, 0x0263,
-	0x2204, 0x8211, 0x220c, 0x080c, 0x283e, 0x1190, 0x080c, 0x6600,
-	0x0118, 0x080c, 0xae47, 0x0060, 0xb810, 0x0006, 0xb814, 0x0006,
-	0x080c, 0x6035, 0x000e, 0xb816, 0x000e, 0xb812, 0x080c, 0xae47,
-	0x00fe, 0x0005, 0x6604, 0x96b6, 0x001e, 0x1110, 0x080c, 0xae47,
-	0x0005, 0x080c, 0xbc6b, 0x1148, 0x6003, 0x0001, 0x6007, 0x0001,
-	0x080c, 0x910f, 0x080c, 0x9664, 0x0010, 0x080c, 0xae47, 0x0005,
-	0x6004, 0x908a, 0x0053, 0x1a0c, 0x0dd5, 0x080c, 0x955f, 0x080c,
-	0xae78, 0x080c, 0x9664, 0x0005, 0x9182, 0x0040, 0x0002, 0xdb5a,
-	0xdb5a, 0xdb5a, 0xdb5a, 0xdb5c, 0xdb5a, 0xdb5a, 0xdb5a, 0xdb5a,
-	0xdb5a, 0xdb5a, 0xdb5a, 0xdb5a, 0xdb5a, 0xdb5a, 0xdb5a, 0xdb5a,
-	0xdb5a, 0xdb5a, 0x080c, 0x0dd5, 0x0096, 0x00b6, 0x00d6, 0x00e6,
-	0x00f6, 0x0046, 0x0026, 0x6210, 0x2258, 0xb8bc, 0x9005, 0x11a8,
-	0x6106, 0x2071, 0x0260, 0x7444, 0x94a4, 0xff00, 0x0904, 0xdbc2,
-	0x080c, 0xe94a, 0x1170, 0x9486, 0x2000, 0x1158, 0x2009, 0x0001,
-	0x2011, 0x0200, 0x080c, 0x86b4, 0x0020, 0x9026, 0x080c, 0xe7ce,
-	0x0c38, 0x080c, 0x0fff, 0x090c, 0x0dd5, 0x6003, 0x0007, 0xa867,
-	0x010d, 0x9006, 0xa802, 0xa86a, 0xac8a, 0x2c00, 0xa88e, 0x6008,
-	0xa8e2, 0x6010, 0x2058, 0xb8a0, 0x7130, 0xa97a, 0x0016, 0xa876,
-	0xa87f, 0x0000, 0xa883, 0x0000, 0xa887, 0x0036, 0x080c, 0x6c79,
-	0x001e, 0x080c, 0xe94a, 0x1904, 0xdc22, 0x9486, 0x2000, 0x1130,
-	0x2019, 0x0017, 0x080c, 0xe501, 0x0804, 0xdc22, 0x9486, 0x0200,
-	0x1120, 0x080c, 0xe49d, 0x0804, 0xdc22, 0x9486, 0x0400, 0x0120,
-	0x9486, 0x1000, 0x1904, 0xdc22, 0x2019, 0x0002, 0x080c, 0xe4b8,
-	0x0804, 0xdc22, 0x2069, 0x1a71, 0x6a00, 0xd284, 0x0904, 0xdc8c,
-	0x9284, 0x0300, 0x1904, 0xdc85, 0x6804, 0x9005, 0x0904, 0xdc6d,
-	0x2d78, 0x6003, 0x0007, 0x080c, 0x1018, 0x0904, 0xdc2e, 0x7800,
-	0xd08c, 0x1118, 0x7804, 0x8001, 0x7806, 0x6017, 0x0000, 0x2001,
-	0x180f, 0x2004, 0xd084, 0x1904, 0xdc90, 0x9006, 0xa802, 0xa867,
-	0x0116, 0xa86a, 0x6008, 0xa8e2, 0x2c00, 0xa87a, 0x6010, 0x2058,
-	0xb8a0, 0x7130, 0xa9b6, 0xa876, 0xb928, 0xa9ba, 0xb92c, 0xa9be,
-	0xb930, 0xa9c2, 0xb934, 0xa9c6, 0xa883, 0x003d, 0x7044, 0x9084,
-	0x0003, 0x9080, 0xdc2a, 0x2005, 0xa87e, 0x20a9, 0x000a, 0x2001,
-	0x0270, 0xaa5c, 0x9290, 0x0021, 0x2009, 0x0205, 0x200b, 0x0080,
-	0x20e1, 0x0000, 0xab60, 0x23e8, 0x2098, 0x22a0, 0x4003, 0x200b,
-	0x0000, 0x2001, 0x027a, 0x200c, 0xa9b2, 0x8000, 0x200c, 0xa9ae,
-	0x080c, 0x6c79, 0x002e, 0x004e, 0x00fe, 0x00ee, 0x00de, 0x00be,
-	0x009e, 0x0005, 0x0000, 0x0080, 0x0040, 0x0000, 0x2001, 0x1810,
-	0x2004, 0xd084, 0x0120, 0x080c, 0x0fff, 0x1904, 0xdbd7, 0x6017,
-	0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x90c7, 0x080c,
-	0x9664, 0x0c00, 0x2069, 0x0260, 0x6848, 0x9084, 0xff00, 0x9086,
-	0x1200, 0x1198, 0x686c, 0x9084, 0x00ff, 0x0016, 0x6114, 0x918c,
-	0xf700, 0x910d, 0x6116, 0x001e, 0x6003, 0x0001, 0x6007, 0x0043,
-	0x080c, 0x90c7, 0x080c, 0x9664, 0x0828, 0x6868, 0x602e, 0x686c,
-	0x6032, 0x6017, 0xf200, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c,
-	0x90c7, 0x080c, 0x9664, 0x0804, 0xdc22, 0x2001, 0x180e, 0x2004,
-	0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x4b05, 0x6017, 0xf300,
-	0x0010, 0x6017, 0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c,
-	0x90c7, 0x080c, 0x9664, 0x0804, 0xdc22, 0x6017, 0xf500, 0x0c98,
-	0x6017, 0xf600, 0x0804, 0xdc42, 0x6017, 0xf200, 0x0804, 0xdc42,
-	0xa867, 0x0146, 0xa86b, 0x0000, 0x6008, 0xa886, 0x2c00, 0xa87a,
-	0x7044, 0x9084, 0x0003, 0x9080, 0xdc2a, 0x2005, 0xa87e, 0x2928,
-	0x6010, 0x2058, 0xb8a0, 0xa876, 0xb828, 0xa88a, 0xb82c, 0xa88e,
-	0xb830, 0xa892, 0xb834, 0xa896, 0xa883, 0x003d, 0x2009, 0x0205,
-	0x2104, 0x9085, 0x0080, 0x200a, 0x20e1, 0x0000, 0x2011, 0x0210,
-	0x2214, 0x9294, 0x0fff, 0xaaa2, 0x9282, 0x0111, 0x1a0c, 0x0dd5,
-	0x8210, 0x821c, 0x2001, 0x026c, 0x2098, 0xa860, 0x20e8, 0xa85c,
-	0x9080, 0x0029, 0x20a0, 0x2011, 0xdd0c, 0x2041, 0x0001, 0x223d,
-	0x9784, 0x00ff, 0x9322, 0x1208, 0x2300, 0x20a8, 0x4003, 0x931a,
-	0x0530, 0x8210, 0xd7fc, 0x1130, 0x8d68, 0x2d0a, 0x2001, 0x0260,
-	0x2098, 0x0c68, 0x2950, 0x080c, 0x1018, 0x0170, 0x2900, 0xb002,
-	0xa867, 0x0147, 0xa86b, 0x0000, 0xa860, 0x20e8, 0xa85c, 0x9080,
-	0x001b, 0x20a0, 0x8840, 0x08d8, 0x2548, 0xa800, 0x902d, 0x0118,
-	0x080c, 0x1031, 0x0cc8, 0x080c, 0x1031, 0x0804, 0xdc2e, 0x2548,
-	0x8847, 0x9885, 0x0046, 0xa866, 0x2009, 0x0205, 0x200b, 0x0000,
-	0x080c, 0xe530, 0x0804, 0xdc22, 0x8010, 0x0004, 0x801a, 0x0006,
-	0x8018, 0x0008, 0x8016, 0x000a, 0x8014, 0x9186, 0x0013, 0x1160,
-	0x6004, 0x908a, 0x0054, 0x1a0c, 0x0dd5, 0x9082, 0x0040, 0x0a0c,
-	0x0dd5, 0x2008, 0x0804, 0xddbd, 0x9186, 0x0051, 0x0108, 0x00c0,
-	0x2001, 0x0109, 0x2004, 0xd084, 0x0904, 0xdd6e, 0x0126, 0x2091,
-	0x2800, 0x0006, 0x0016, 0x0026, 0x080c, 0x8fac, 0x002e, 0x001e,
-	0x000e, 0x012e, 0x6000, 0x9086, 0x0002, 0x1580, 0x0804, 0xde05,
-	0x9186, 0x0027, 0x0530, 0x9186, 0x0048, 0x0128, 0x9186, 0x0014,
-	0x0500, 0x190c, 0x0dd5, 0x2001, 0x0109, 0x2004, 0xd084, 0x01f0,
-	0x00c6, 0x0126, 0x2091, 0x2800, 0x00c6, 0x2061, 0x0100, 0x0006,
-	0x0016, 0x0026, 0x080c, 0x8fac, 0x002e, 0x001e, 0x000e, 0x00ce,
-	0x012e, 0x00ce, 0x6000, 0x9086, 0x0004, 0x190c, 0x0dd5, 0x0804,
-	0xdee6, 0x6004, 0x9082, 0x0040, 0x2008, 0x001a, 0x080c, 0xaedd,
-	0x0005, 0xdd84, 0xdd86, 0xdd86, 0xddad, 0xdd84, 0xdd84, 0xdd84,
-	0xdd84, 0xdd84, 0xdd84, 0xdd84, 0xdd84, 0xdd84, 0xdd84, 0xdd84,
-	0xdd84, 0xdd84, 0xdd84, 0xdd84, 0x080c, 0x0dd5, 0x080c, 0x955f,
-	0x080c, 0x9664, 0x0036, 0x0096, 0x6014, 0x904d, 0x01d8, 0x080c,
-	0xcb1b, 0x01c0, 0x6003, 0x0002, 0x6010, 0x00b6, 0x2058, 0xb800,
-	0x00be, 0xd0bc, 0x1178, 0x2019, 0x0004, 0x080c, 0xe530, 0x6017,
-	0x0000, 0x6018, 0x9005, 0x1120, 0x2001, 0x1987, 0x2004, 0x601a,
-	0x6003, 0x0007, 0x009e, 0x003e, 0x0005, 0x0096, 0x080c, 0x955f,
-	0x080c, 0x9664, 0x080c, 0xcb1b, 0x0120, 0x6014, 0x2048, 0x080c,
-	0x1031, 0x080c, 0xae78, 0x009e, 0x0005, 0x0002, 0xddd1, 0xdde8,
-	0xddd3, 0xddff, 0xddd1, 0xddd1, 0xddd1, 0xddd1, 0xddd1, 0xddd1,
-	0xddd1, 0xddd1, 0xddd1, 0xddd1, 0xddd1, 0xddd1, 0xddd1, 0xddd1,
-	0xddd1, 0x080c, 0x0dd5, 0x0096, 0x080c, 0x955f, 0x6014, 0x2048,
-	0xa87c, 0xd0b4, 0x0138, 0x6003, 0x0007, 0x2009, 0x0043, 0x080c,
-	0xaec2, 0x0010, 0x6003, 0x0004, 0x080c, 0x9664, 0x009e, 0x0005,
-	0x080c, 0x955f, 0x080c, 0xcb1b, 0x0138, 0x6114, 0x0096, 0x2148,
-	0xa97c, 0x009e, 0xd1ec, 0x1138, 0x080c, 0x8689, 0x080c, 0xae47,
-	0x080c, 0x9664, 0x0005, 0x080c, 0xe792, 0x0db0, 0x0cc8, 0x080c,
-	0x955f, 0x2009, 0x0041, 0x0804, 0xdf6e, 0x9182, 0x0040, 0x0002,
-	0xde1b, 0xde1d, 0xde1b, 0xde1b, 0xde1b, 0xde1b, 0xde1b, 0xde1b,
-	0xde1b, 0xde1b, 0xde1b, 0xde1b, 0xde1b, 0xde1b, 0xde1b, 0xde1b,
-	0xde1b, 0xde1e, 0xde1b, 0x080c, 0x0dd5, 0x0005, 0x00d6, 0x080c,
-	0x8689, 0x00de, 0x080c, 0xe7ea, 0x080c, 0xae47, 0x0005, 0x9182,
-	0x0040, 0x0002, 0xde3d, 0xde3d, 0xde3d, 0xde3d, 0xde3d, 0xde3d,
-	0xde3d, 0xde3d, 0xde3d, 0xde3f, 0xdeae, 0xde3d, 0xde3d, 0xde3d,
-	0xde3d, 0xdeae, 0xde3d, 0xde3d, 0xde3d, 0x080c, 0x0dd5, 0x2001,
-	0x0105, 0x2004, 0x9084, 0x1800, 0x01c8, 0x2001, 0x0132, 0x200c,
-	0x2001, 0x0131, 0x2004, 0x9105, 0x1904, 0xdeae, 0x2009, 0x180c,
-	0x2104, 0xd0d4, 0x0904, 0xdeae, 0xc0d4, 0x200a, 0x2009, 0x0105,
-	0x2104, 0x9084, 0xe7fd, 0x9085, 0x0010, 0x200a, 0x2001, 0x1867,
-	0x2004, 0xd0e4, 0x1528, 0x603b, 0x0000, 0x080c, 0x9614, 0x6014,
-	0x0096, 0x2048, 0xa87c, 0xd0fc, 0x0188, 0x908c, 0x0003, 0x918e,
-	0x0002, 0x0508, 0x2001, 0x180c, 0x2004, 0xd0d4, 0x11e0, 0x080c,
-	0x9790, 0x2009, 0x0041, 0x009e, 0x0804, 0xdf6e, 0x080c, 0x9790,
-	0x6003, 0x0007, 0x601b, 0x0000, 0x080c, 0x8689, 0x009e, 0x0005,
-	0x2001, 0x0100, 0x2004, 0x9082, 0x0005, 0x0aa8, 0x2001, 0x011f,
-	0x2004, 0x603a, 0x0890, 0x2001, 0x180c, 0x200c, 0xc1d4, 0x2102,
-	0xd1cc, 0x0110, 0x080c, 0x2c52, 0x080c, 0x9790, 0x6014, 0x2048,
-	0xa97c, 0xd1ec, 0x1130, 0x080c, 0x8689, 0x080c, 0xae47, 0x009e,
-	0x0005, 0x080c, 0xe792, 0x0db8, 0x009e, 0x0005, 0x2001, 0x180c,
-	0x200c, 0xc1d4, 0x2102, 0x0036, 0x080c, 0x9614, 0x080c, 0x9790,
-	0x6014, 0x0096, 0x2048, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be,
-	0xd0bc, 0x0188, 0xa87c, 0x9084, 0x0003, 0x9086, 0x0002, 0x0140,
-	0xa8ac, 0x6330, 0x931a, 0x6332, 0xa8b0, 0x632c, 0x931b, 0x632e,
-	0x6003, 0x0002, 0x0080, 0x2019, 0x0004, 0x080c, 0xe530, 0x6018,
-	0x9005, 0x1128, 0x2001, 0x1987, 0x2004, 0x8003, 0x601a, 0x6017,
-	0x0000, 0x6003, 0x0007, 0x009e, 0x003e, 0x0005, 0x9182, 0x0040,
-	0x0002, 0xdefd, 0xdefd, 0xdefd, 0xdefd, 0xdefd, 0xdefd, 0xdefd,
-	0xdefd, 0xdeff, 0xdefd, 0xdefd, 0xdefd, 0xdefd, 0xdefd, 0xdefd,
-	0xdefd, 0xdefd, 0xdefd, 0xdefd, 0xdf4a, 0x080c, 0x0dd5, 0x6014,
-	0x0096, 0x2048, 0xa834, 0xaa38, 0x6110, 0x00b6, 0x2158, 0xb900,
-	0x00be, 0xd1bc, 0x1190, 0x920d, 0x1518, 0xa87c, 0xd0fc, 0x0128,
-	0x2009, 0x0041, 0x009e, 0x0804, 0xdf6e, 0x6003, 0x0007, 0x601b,
-	0x0000, 0x080c, 0x8689, 0x009e, 0x0005, 0x6124, 0xd1f4, 0x1d58,
-	0x0006, 0x0046, 0xacac, 0x9422, 0xa9b0, 0x2200, 0x910b, 0x6030,
-	0x9420, 0x6432, 0x602c, 0x9109, 0x612e, 0x004e, 0x000e, 0x08d8,
-	0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1bc, 0x1178, 0x2009,
-	0x180e, 0x210c, 0xd19c, 0x0118, 0x6003, 0x0007, 0x0010, 0x6003,
-	0x0006, 0x00e9, 0x080c, 0x868b, 0x009e, 0x0005, 0x6003, 0x0002,
-	0x009e, 0x0005, 0x6024, 0xd0f4, 0x0128, 0x080c, 0x15e5, 0x1904,
-	0xdeff, 0x0005, 0x6014, 0x0096, 0x2048, 0xa834, 0xa938, 0x009e,
-	0x9105, 0x1120, 0x080c, 0x15e5, 0x1904, 0xdeff, 0x0005, 0xd2fc,
-	0x0140, 0x8002, 0x8000, 0x8212, 0x9291, 0x0000, 0x2009, 0x0009,
-	0x0010, 0x2009, 0x0015, 0xaa9a, 0xa896, 0x0005, 0x9182, 0x0040,
-	0x0208, 0x0062, 0x9186, 0x0013, 0x0120, 0x9186, 0x0014, 0x190c,
-	0x0dd5, 0x6024, 0xd0dc, 0x090c, 0x0dd5, 0x0005, 0xdf91, 0xdf9d,
-	0xdfa9, 0xdfb5, 0xdf91, 0xdf91, 0xdf91, 0xdf91, 0xdf98, 0xdf93,
-	0xdf93, 0xdf91, 0xdf91, 0xdf91, 0xdf91, 0xdf93, 0xdf91, 0xdf93,
-	0xdf91, 0x080c, 0x0dd5, 0x6024, 0xd0dc, 0x090c, 0x0dd5, 0x0005,
-	0x6014, 0x9005, 0x190c, 0x0dd5, 0x0005, 0x6003, 0x0001, 0x6106,
-	0x080c, 0x90c7, 0x0126, 0x2091, 0x8000, 0x080c, 0x9664, 0x012e,
-	0x0005, 0x6003, 0x0001, 0x6106, 0x080c, 0x90c7, 0x0126, 0x2091,
-	0x8000, 0x080c, 0x9664, 0x012e, 0x0005, 0x6003, 0x0003, 0x6106,
-	0x2c10, 0x080c, 0x1bad, 0x0126, 0x2091, 0x8000, 0x080c, 0x912c,
-	0x080c, 0x9790, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x0036,
-	0x0096, 0x9182, 0x0040, 0x0023, 0x009e, 0x003e, 0x012e, 0x0005,
-	0xdfe0, 0xdfe2, 0xdff4, 0xe00e, 0xdfe0, 0xdfe0, 0xdfe0, 0xdfe0,
-	0xdfe0, 0xdfe0, 0xdfe0, 0xdfe0, 0xdfe0, 0xdfe0, 0xdfe0, 0xdfe0,
-	0x080c, 0x0dd5, 0x6014, 0x2048, 0xa87c, 0xd0fc, 0x01f8, 0x909c,
-	0x0003, 0x939e, 0x0003, 0x01d0, 0x6003, 0x0001, 0x6106, 0x080c,
-	0x90c7, 0x080c, 0x9664, 0x0470, 0x6014, 0x2048, 0xa87c, 0xd0fc,
-	0x0168, 0x909c, 0x0003, 0x939e, 0x0003, 0x0140, 0x6003, 0x0001,
-	0x6106, 0x080c, 0x90c7, 0x080c, 0x9664, 0x00e0, 0x901e, 0x6316,
-	0x631a, 0x2019, 0x0004, 0x080c, 0xe530, 0x00a0, 0x6014, 0x2048,
-	0xa87c, 0xd0fc, 0x0d98, 0x909c, 0x0003, 0x939e, 0x0003, 0x0d70,
-	0x6003, 0x0003, 0x6106, 0x2c10, 0x080c, 0x1bad, 0x080c, 0x912c,
-	0x080c, 0x9790, 0x0005, 0x080c, 0x955f, 0x6114, 0x81ff, 0x0158,
-	0x0096, 0x2148, 0x080c, 0xe8e7, 0x0036, 0x2019, 0x0029, 0x080c,
-	0xe530, 0x003e, 0x009e, 0x080c, 0xae78, 0x080c, 0x9664, 0x0005,
-	0x080c, 0x9614, 0x6114, 0x81ff, 0x0158, 0x0096, 0x2148, 0x080c,
-	0xe8e7, 0x0036, 0x2019, 0x0029, 0x080c, 0xe530, 0x003e, 0x009e,
-	0x080c, 0xae78, 0x080c, 0x9790, 0x0005, 0x9182, 0x0085, 0x0002,
-	0xe05f, 0xe05d, 0xe05d, 0xe06b, 0xe05d, 0xe05d, 0xe05d, 0xe05d,
-	0xe05d, 0xe05d, 0xe05d, 0xe05d, 0xe05d, 0x080c, 0x0dd5, 0x6003,
-	0x000b, 0x6106, 0x080c, 0x90c7, 0x0126, 0x2091, 0x8000, 0x080c,
-	0x9664, 0x012e, 0x0005, 0x0026, 0x00e6, 0x080c, 0xe789, 0x0118,
-	0x080c, 0xae47, 0x0450, 0x2071, 0x0260, 0x7224, 0x6216, 0x2001,
-	0x180e, 0x2004, 0xd0e4, 0x0150, 0x6010, 0x00b6, 0x2058, 0xbca0,
-	0x00be, 0x2c00, 0x2011, 0x014e, 0x080c, 0xb168, 0x7220, 0x080c,
-	0xe3d6, 0x0118, 0x6007, 0x0086, 0x0040, 0x6007, 0x0087, 0x7224,
-	0x9296, 0xffff, 0x1110, 0x6007, 0x0086, 0x6003, 0x0001, 0x080c,
-	0x90c7, 0x080c, 0x9664, 0x080c, 0x9790, 0x00ee, 0x002e, 0x0005,
-	0x9186, 0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0dd5,
-	0x908a, 0x0092, 0x1a0c, 0x0dd5, 0x9082, 0x0085, 0x00a2, 0x9186,
-	0x0027, 0x0130, 0x9186, 0x0014, 0x0118, 0x080c, 0xaedd, 0x0050,
-	0x2001, 0x0007, 0x080c, 0x657c, 0x080c, 0x955f, 0x080c, 0xae78,
-	0x080c, 0x9664, 0x0005, 0xe0d0, 0xe0d2, 0xe0d2, 0xe0d0, 0xe0d0,
-	0xe0d0, 0xe0d0, 0xe0d0, 0xe0d0, 0xe0d0, 0xe0d0, 0xe0d0, 0xe0d0,
-	0x080c, 0x0dd5, 0x080c, 0x955f, 0x080c, 0xae78, 0x080c, 0x9664,
-	0x0005, 0x9182, 0x0085, 0x0a0c, 0x0dd5, 0x9182, 0x0092, 0x1a0c,
-	0x0dd5, 0x9182, 0x0085, 0x0002, 0xe0f1, 0xe0f1, 0xe0f1, 0xe0f3,
-	0xe0f1, 0xe0f1, 0xe0f1, 0xe0f1, 0xe0f1, 0xe0f1, 0xe0f1, 0xe0f1,
-	0xe0f1, 0x080c, 0x0dd5, 0x0005, 0x9186, 0x0013, 0x0148, 0x9186,
-	0x0014, 0x0130, 0x9186, 0x0027, 0x0118, 0x080c, 0xaedd, 0x0030,
-	0x080c, 0x955f, 0x080c, 0xae78, 0x080c, 0x9664, 0x0005, 0x0036,
-	0x080c, 0xe7ea, 0x6043, 0x0000, 0x2019, 0x000b, 0x0031, 0x6023,
-	0x0006, 0x6003, 0x0007, 0x003e, 0x0005, 0x0126, 0x0036, 0x2091,
-	0x8000, 0x0086, 0x2c40, 0x0096, 0x904e, 0x080c, 0xa682, 0x009e,
-	0x008e, 0x1550, 0x0076, 0x2c38, 0x080c, 0xa72d, 0x007e, 0x1520,
-	0x6000, 0x9086, 0x0000, 0x0500, 0x6020, 0x9086, 0x0007, 0x01e0,
-	0x0096, 0x601c, 0xd084, 0x0140, 0x080c, 0xe7ea, 0x080c, 0xd22e,
-	0x080c, 0x1a5e, 0x6023, 0x0007, 0x6014, 0x2048, 0x080c, 0xcb1b,
-	0x0110, 0x080c, 0xe530, 0x009e, 0x6017, 0x0000, 0x080c, 0xe7ea,
-	0x6023, 0x0007, 0x080c, 0xd22e, 0x003e, 0x012e, 0x0005, 0x00f6,
-	0x00c6, 0x00b6, 0x0036, 0x0156, 0x2079, 0x0260, 0x7938, 0x783c,
-	0x080c, 0x283e, 0x15b8, 0x0016, 0x00c6, 0x080c, 0x6600, 0x1580,
-	0x001e, 0x00c6, 0x2160, 0x080c, 0xd22b, 0x00ce, 0x002e, 0x0026,
-	0x0016, 0x2019, 0x0029, 0x080c, 0xa7ee, 0x080c, 0x9262, 0x0076,
-	0x903e, 0x080c, 0x913f, 0x007e, 0x001e, 0x0076, 0x903e, 0x080c,
-	0xe2ca, 0x007e, 0x0026, 0xba04, 0x9294, 0xff00, 0x8217, 0x9286,
-	0x0006, 0x0118, 0x9286, 0x0004, 0x1118, 0xbaa0, 0x080c, 0x3276,
-	0x002e, 0x001e, 0x080c, 0x6035, 0xbe12, 0xbd16, 0x9006, 0x0010,
-	0x00ce, 0x001e, 0x015e, 0x003e, 0x00be, 0x00ce, 0x00fe, 0x0005,
-	0x00c6, 0x00d6, 0x00b6, 0x0016, 0x2009, 0x1824, 0x2104, 0x9086,
-	0x0074, 0x1904, 0xe1f1, 0x2069, 0x0260, 0x6944, 0x9182, 0x0100,
-	0x06e0, 0x6940, 0x9184, 0x8000, 0x0904, 0xe1ee, 0x2001, 0x197c,
-	0x2004, 0x9005, 0x1140, 0x6010, 0x2058, 0xb8c0, 0x9005, 0x0118,
-	0x9184, 0x0800, 0x0598, 0x6948, 0x918a, 0x0001, 0x0648, 0x080c,
-	0xe94f, 0x0118, 0x6978, 0xd1fc, 0x11b8, 0x2009, 0x0205, 0x200b,
-	0x0001, 0x693c, 0x81ff, 0x1198, 0x6944, 0x9182, 0x0100, 0x02a8,
-	0x6940, 0x81ff, 0x1178, 0x6948, 0x918a, 0x0001, 0x0288, 0x6950,
-	0x918a, 0x0001, 0x0298, 0x00d0, 0x6017, 0x0100, 0x00a0, 0x6017,
-	0x0300, 0x0088, 0x6017, 0x0500, 0x0070, 0x6017, 0x0700, 0x0058,
-	0x6017, 0x0900, 0x0040, 0x6017, 0x0b00, 0x0028, 0x6017, 0x0f00,
-	0x0010, 0x6017, 0x2d00, 0x9085, 0x0001, 0x0008, 0x9006, 0x001e,
-	0x00be, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00b6, 0x0026, 0x0036,
-	0x0156, 0x6210, 0x2258, 0xbb04, 0x9394, 0x00ff, 0x9286, 0x0006,
-	0x0180, 0x9286, 0x0004, 0x0168, 0x9394, 0xff00, 0x8217, 0x9286,
-	0x0006, 0x0138, 0x9286, 0x0004, 0x0120, 0x080c, 0x660f, 0x0804,
-	0xe259, 0x2011, 0x0276, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019,
-	0x000a, 0x080c, 0xbe03, 0x009e, 0x15a8, 0x2011, 0x027a, 0x20a9,
-	0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c, 0xbe03, 0x009e,
-	0x1548, 0x0046, 0x0016, 0xbaa0, 0x2220, 0x9006, 0x2009, 0x1848,
-	0x210c, 0xd1a4, 0x0138, 0x2009, 0x0029, 0x080c, 0xe58d, 0xb800,
-	0xc0e5, 0xb802, 0x2019, 0x0029, 0x080c, 0x9262, 0x0076, 0x2039,
-	0x0000, 0x080c, 0x913f, 0x2c08, 0x080c, 0xe2ca, 0x007e, 0x2001,
-	0x0007, 0x080c, 0x657c, 0x2001, 0x0007, 0x080c, 0x6550, 0x001e,
-	0x004e, 0x9006, 0x015e, 0x003e, 0x002e, 0x00be, 0x00ce, 0x0005,
-	0x00d6, 0x2069, 0x026e, 0x6800, 0x9086, 0x0800, 0x0118, 0x6017,
-	0x0000, 0x0008, 0x9006, 0x00de, 0x0005, 0x00b6, 0x00f6, 0x0016,
-	0x0026, 0x0036, 0x0156, 0x2079, 0x026c, 0x7930, 0x7834, 0x080c,
-	0x283e, 0x11d0, 0x080c, 0x6600, 0x11b8, 0x2011, 0x0270, 0x20a9,
-	0x0004, 0x0096, 0x2b48, 0x2019, 0x000a, 0x080c, 0xbe03, 0x009e,
-	0x1158, 0x2011, 0x0274, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019,
-	0x0006, 0x080c, 0xbe03, 0x009e, 0x015e, 0x003e, 0x002e, 0x001e,
-	0x00fe, 0x00be, 0x0005, 0x00b6, 0x0006, 0x0016, 0x0026, 0x0036,
-	0x0156, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x283e,
-	0x11d0, 0x080c, 0x6600, 0x11b8, 0x2011, 0x0276, 0x20a9, 0x0004,
-	0x0096, 0x2b48, 0x2019, 0x000a, 0x080c, 0xbe03, 0x009e, 0x1158,
-	0x2011, 0x027a, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006,
-	0x080c, 0xbe03, 0x009e, 0x015e, 0x003e, 0x002e, 0x001e, 0x000e,
-	0x00be, 0x0005, 0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066, 0x0056,
-	0x0046, 0x0026, 0x0126, 0x2091, 0x8000, 0x2740, 0x2029, 0x19f0,
-	0x252c, 0x2021, 0x19f6, 0x2424, 0x2061, 0x1cd0, 0x2071, 0x1800,
-	0x7654, 0x7074, 0x81ff, 0x0150, 0x0006, 0x9186, 0x1ab0, 0x000e,
-	0x0128, 0x8001, 0x9602, 0x1a04, 0xe367, 0x0018, 0x9606, 0x0904,
-	0xe367, 0x080c, 0x8958, 0x0904, 0xe35e, 0x2100, 0x9c06, 0x0904,
-	0xe35e, 0x080c, 0xe5ce, 0x1904, 0xe35e, 0x080c, 0xe96c, 0x0904,
-	0xe35e, 0x080c, 0xe5be, 0x0904, 0xe35e, 0x6720, 0x9786, 0x0001,
-	0x1148, 0x080c, 0x330d, 0x0904, 0xe3a6, 0x6004, 0x9086, 0x0000,
-	0x1904, 0xe3a6, 0x9786, 0x0004, 0x0904, 0xe3a6, 0x9786, 0x0007,
-	0x0904, 0xe35e, 0x2500, 0x9c06, 0x0904, 0xe35e, 0x2400, 0x9c06,
-	0x05e8, 0x88ff, 0x0118, 0x6054, 0x9906, 0x15c0, 0x0096, 0x6000,
-	0x9086, 0x0004, 0x1120, 0x0016, 0x080c, 0x1a5e, 0x001e, 0x9786,
-	0x000a, 0x0148, 0x080c, 0xcd21, 0x1130, 0x080c, 0xb7f9, 0x009e,
-	0x080c, 0xae78, 0x0418, 0x6014, 0x2048, 0x080c, 0xcb1b, 0x01d8,
-	0x9786, 0x0003, 0x1570, 0xa867, 0x0103, 0xa87c, 0xd0cc, 0x0130,
-	0x0096, 0xa878, 0x2048, 0x080c, 0x0fb1, 0x009e, 0xab7a, 0xa877,
-	0x0000, 0x080c, 0xe8e7, 0x0016, 0x080c, 0xce0a, 0x080c, 0x6c6d,
-	0x001e, 0x080c, 0xcd04, 0x009e, 0x080c, 0xae78, 0x9ce0, 0x0018,
-	0x2001, 0x181a, 0x2004, 0x9c02, 0x1210, 0x0804, 0xe2de, 0x012e,
-	0x002e, 0x004e, 0x005e, 0x006e, 0x007e, 0x008e, 0x00ce, 0x00ee,
-	0x0005, 0x9786, 0x0006, 0x1150, 0x9386, 0x0005, 0x0128, 0x080c,
-	0xe8e7, 0x080c, 0xe530, 0x08f8, 0x009e, 0x0c00, 0x9786, 0x0009,
-	0x11f8, 0x6000, 0x9086, 0x0004, 0x01c0, 0x6000, 0x9086, 0x0003,
-	0x11a0, 0x080c, 0x9614, 0x0096, 0x6114, 0x2148, 0x080c, 0xcb1b,
-	0x0118, 0x6010, 0x080c, 0x6c79, 0x009e, 0x00c6, 0x080c, 0xae47,
-	0x00ce, 0x0036, 0x080c, 0x9790, 0x003e, 0x009e, 0x0804, 0xe35e,
-	0x9786, 0x000a, 0x0904, 0xe345, 0x0804, 0xe343, 0x81ff, 0x0904,
-	0xe35e, 0x9180, 0x0001, 0x2004, 0x9086, 0x0018, 0x0138, 0x9180,
-	0x0001, 0x2004, 0x9086, 0x002d, 0x1904, 0xe35e, 0x6000, 0x9086,
-	0x0002, 0x1904, 0xe35e, 0x080c, 0xcd10, 0x0138, 0x080c, 0xcd21,
-	0x1904, 0xe35e, 0x080c, 0xb7f9, 0x0038, 0x080c, 0x31e1, 0x080c,
-	0xcd21, 0x1110, 0x080c, 0xb7f9, 0x080c, 0xae78, 0x0804, 0xe35e,
-	0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, 0x0005, 0x00c6, 0x00e6,
-	0x0016, 0x2c08, 0x2170, 0x9006, 0x080c, 0xe557, 0x001e, 0x0120,
-	0x6020, 0x9084, 0x000f, 0x001b, 0x00ee, 0x00ce, 0x0005, 0xe3f5,
-	0xe3f5, 0xe3f5, 0xe3f5, 0xe3f5, 0xe3f5, 0xe3f7, 0xe3f5, 0xe3f5,
-	0xe3f5, 0xe3f5, 0xae78, 0xae78, 0xe3f5, 0x9006, 0x0005, 0x0036,
-	0x0046, 0x0016, 0x7010, 0x00b6, 0x2058, 0xbca0, 0x00be, 0x2c00,
-	0x2009, 0x0020, 0x080c, 0xe58d, 0x001e, 0x004e, 0x2019, 0x0002,
-	0x080c, 0xe115, 0x003e, 0x9085, 0x0001, 0x0005, 0x0096, 0x080c,
-	0xcb1b, 0x0140, 0x6014, 0x904d, 0x080c, 0xc74e, 0x687b, 0x0005,
-	0x080c, 0x6c79, 0x009e, 0x080c, 0xae78, 0x9085, 0x0001, 0x0005,
-	0x2001, 0x0001, 0x080c, 0x653c, 0x0156, 0x0016, 0x0026, 0x0036,
-	0x20a9, 0x0004, 0x2019, 0x1805, 0x2011, 0x0276, 0x080c, 0xbdef,
-	0x003e, 0x002e, 0x001e, 0x015e, 0x9005, 0x0005, 0x00f6, 0x00e6,
-	0x00c6, 0x0086, 0x0076, 0x0066, 0x00b6, 0x0126, 0x2091, 0x8000,
-	0x2740, 0x2061, 0x1cd0, 0x2079, 0x0001, 0x8fff, 0x0904, 0xe490,
-	0x2071, 0x1800, 0x7654, 0x7074, 0x8001, 0x9602, 0x1a04, 0xe490,
-	0x88ff, 0x0120, 0x2800, 0x9c06, 0x1590, 0x2078, 0x080c, 0xe5be,
-	0x0570, 0x2400, 0x9c06, 0x0558, 0x6720, 0x9786, 0x0006, 0x1538,
-	0x9786, 0x0007, 0x0520, 0x88ff, 0x1140, 0x6010, 0x9b06, 0x11f8,
-	0x85ff, 0x0118, 0x6054, 0x9106, 0x11d0, 0x0096, 0x601c, 0xd084,
-	0x0140, 0x080c, 0xe7ea, 0x080c, 0xd22e, 0x080c, 0x1a5e, 0x6023,
-	0x0007, 0x6014, 0x2048, 0x080c, 0xcb1b, 0x0120, 0x0046, 0x080c,
-	0xe530, 0x004e, 0x009e, 0x080c, 0xae78, 0x88ff, 0x1198, 0x9ce0,
-	0x0018, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1210, 0x0804, 0xe445,
-	0x9006, 0x012e, 0x00be, 0x006e, 0x007e, 0x008e, 0x00ce, 0x00ee,
-	0x00fe, 0x0005, 0x98c5, 0x0001, 0x0ca0, 0x00b6, 0x0076, 0x0056,
-	0x0086, 0x9046, 0x2029, 0x0001, 0x2c20, 0x2019, 0x0002, 0x6210,
-	0x2258, 0x0096, 0x904e, 0x080c, 0xa682, 0x009e, 0x008e, 0x903e,
-	0x080c, 0xa72d, 0x080c, 0xe436, 0x005e, 0x007e, 0x00be, 0x0005,
-	0x00b6, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20, 0x2128,
-	0x20a9, 0x007f, 0x900e, 0x0016, 0x0036, 0x080c, 0x6600, 0x1190,
-	0x0056, 0x0086, 0x9046, 0x2508, 0x2029, 0x0001, 0x0096, 0x904e,
-	0x080c, 0xa682, 0x009e, 0x008e, 0x903e, 0x080c, 0xa72d, 0x080c,
-	0xe436, 0x005e, 0x003e, 0x001e, 0x8108, 0x1f04, 0xe4c3, 0x015e,
-	0x00ce, 0x007e, 0x005e, 0x004e, 0x00be, 0x0005, 0x00b6, 0x0076,
-	0x0056, 0x6210, 0x2258, 0x0086, 0x9046, 0x2029, 0x0001, 0x2019,
-	0x0048, 0x0096, 0x904e, 0x080c, 0xa682, 0x009e, 0x008e, 0x903e,
-	0x080c, 0xa72d, 0x2c20, 0x080c, 0xe436, 0x005e, 0x007e, 0x00be,
+	0x0170, 0x9686, 0x0004, 0x0158, 0xbe04, 0x96b4, 0x00ff, 0x9686,
+	0x0006, 0x0128, 0x9686, 0x0004, 0x0110, 0x9085, 0x0001, 0x006e,
+	0x00be, 0x0005, 0x00d6, 0x080c, 0xd94e, 0x00de, 0x0005, 0x00d6,
+	0x080c, 0xd95b, 0x1520, 0x680c, 0x908c, 0xff00, 0x6820, 0x9084,
+	0x00ff, 0x9115, 0x6216, 0x6824, 0x602e, 0xd1e4, 0x0130, 0x9006,
+	0x080c, 0xe977, 0x2009, 0x0001, 0x0078, 0xd1ec, 0x0180, 0x6920,
+	0x918c, 0x00ff, 0x6824, 0x080c, 0x283e, 0x1148, 0x2001, 0x0001,
+	0x080c, 0xe977, 0x2110, 0x900e, 0x080c, 0x3208, 0x0018, 0x9085,
+	0x0001, 0x0008, 0x9006, 0x00de, 0x0005, 0x00b6, 0x00c6, 0x080c,
+	0xaeaf, 0x05a8, 0x0016, 0x0026, 0x00c6, 0x2011, 0x0263, 0x2204,
+	0x8211, 0x220c, 0x080c, 0x283e, 0x1578, 0x080c, 0x659e, 0x1560,
+	0xbe12, 0xbd16, 0x00ce, 0x002e, 0x001e, 0x2b00, 0x6012, 0x080c,
+	0xe7aa, 0x11d8, 0x080c, 0x32e3, 0x11c0, 0x080c, 0xd8b6, 0x0510,
+	0x2001, 0x0007, 0x080c, 0x654f, 0x2001, 0x0007, 0x080c, 0x657b,
+	0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001,
+	0x080c, 0x9138, 0x080c, 0x968d, 0x0010, 0x080c, 0xae61, 0x9085,
+	0x0001, 0x00ce, 0x00be, 0x0005, 0x080c, 0xae61, 0x00ce, 0x002e,
+	0x001e, 0x0ca8, 0x080c, 0xae61, 0x9006, 0x0c98, 0x2069, 0x026d,
+	0x6800, 0x9082, 0x0010, 0x1228, 0x6017, 0x0000, 0x9085, 0x0001,
+	0x0008, 0x9006, 0x0005, 0x6017, 0x0000, 0x2069, 0x026c, 0x6808,
+	0x9084, 0xff00, 0x9086, 0x0800, 0x1190, 0x6904, 0x9186, 0x0018,
+	0x0118, 0x9186, 0x0014, 0x1158, 0x810f, 0x6800, 0x9084, 0x00ff,
+	0x910d, 0x615a, 0x908e, 0x0014, 0x0110, 0x908e, 0x0010, 0x0005,
+	0x6004, 0x90b2, 0x0053, 0x1a0c, 0x0dd5, 0x91b6, 0x0013, 0x1130,
+	0x2008, 0x91b2, 0x0040, 0x1a04, 0xdaa5, 0x0092, 0x91b6, 0x0027,
+	0x0120, 0x91b6, 0x0014, 0x190c, 0x0dd5, 0x2001, 0x0007, 0x080c,
+	0x657b, 0x080c, 0x9588, 0x080c, 0xae92, 0x080c, 0x968d, 0x0005,
+	0xd9d8, 0xd9da, 0xd9d8, 0xd9d8, 0xd9d8, 0xd9da, 0xd9e9, 0xda9e,
+	0xda3b, 0xda9e, 0xda4f, 0xda9e, 0xd9e9, 0xda9e, 0xda96, 0xda9e,
+	0xda96, 0xda9e, 0xda9e, 0xd9d8, 0xd9d8, 0xd9d8, 0xd9d8, 0xd9d8,
+	0xd9d8, 0xd9d8, 0xd9d8, 0xd9d8, 0xd9d8, 0xd9d8, 0xd9da, 0xd9d8,
+	0xda9e, 0xd9d8, 0xd9d8, 0xda9e, 0xd9d8, 0xda9b, 0xda9e, 0xd9d8,
+	0xd9d8, 0xd9d8, 0xd9d8, 0xda9e, 0xda9e, 0xd9d8, 0xda9e, 0xda9e,
+	0xd9d8, 0xd9e4, 0xd9d8, 0xd9d8, 0xd9d8, 0xd9d8, 0xda9a, 0xda9e,
+	0xd9d8, 0xd9d8, 0xda9e, 0xda9e, 0xd9d8, 0xd9d8, 0xd9d8, 0xd9d8,
+	0x080c, 0x0dd5, 0x080c, 0x9588, 0x080c, 0xd248, 0x6003, 0x0002,
+	0x080c, 0x968d, 0x0804, 0xdaa4, 0x9006, 0x080c, 0x653b, 0x0804,
+	0xda9e, 0x080c, 0x696a, 0x1904, 0xda9e, 0x9006, 0x080c, 0x653b,
+	0x6010, 0x2058, 0xb810, 0x9086, 0x00ff, 0x1140, 0x00f6, 0x2079,
+	0x1800, 0x78a8, 0x8000, 0x78aa, 0x00fe, 0x0428, 0x6010, 0x2058,
+	0xb8c0, 0x9005, 0x1178, 0x080c, 0xd230, 0x1904, 0xda9e, 0x0036,
+	0x0046, 0xbba0, 0x2021, 0x0007, 0x080c, 0x4cbb, 0x004e, 0x003e,
+	0x0804, 0xda9e, 0x080c, 0x3314, 0x1904, 0xda9e, 0x2001, 0x1800,
+	0x2004, 0x9086, 0x0002, 0x1138, 0x00f6, 0x2079, 0x1800, 0x78a8,
+	0x8000, 0x78aa, 0x00fe, 0x2001, 0x0002, 0x080c, 0x654f, 0x080c,
+	0x9588, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c,
+	0x9138, 0x080c, 0x968d, 0x6110, 0x2158, 0x2009, 0x0001, 0x080c,
+	0x8501, 0x0804, 0xdaa4, 0x6610, 0x2658, 0xbe04, 0x96b4, 0xff00,
+	0x8637, 0x9686, 0x0006, 0x0904, 0xda9e, 0x9686, 0x0004, 0x0904,
+	0xda9e, 0x080c, 0x8cbb, 0x2001, 0x0004, 0x0804, 0xda9c, 0x2001,
+	0x1800, 0x2004, 0x9086, 0x0003, 0x1158, 0x0036, 0x0046, 0x6010,
+	0x2058, 0xbba0, 0x2021, 0x0006, 0x080c, 0x4cbb, 0x004e, 0x003e,
+	0x2001, 0x0006, 0x080c, 0xdac2, 0x6610, 0x2658, 0xbe04, 0x0066,
+	0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x006e, 0x0168, 0x2001,
+	0x0006, 0x080c, 0x657b, 0x9284, 0x00ff, 0x908e, 0x0007, 0x1120,
+	0x2001, 0x0006, 0x080c, 0x654f, 0x080c, 0x696a, 0x11f8, 0x2001,
+	0x1837, 0x2004, 0xd0a4, 0x01d0, 0xbe04, 0x96b4, 0x00ff, 0x9686,
+	0x0006, 0x01a0, 0x00f6, 0x2079, 0x1800, 0x78a8, 0x8000, 0x78aa,
+	0x00fe, 0x0804, 0xda23, 0x2001, 0x0004, 0x0030, 0x2001, 0x0006,
+	0x0449, 0x0020, 0x0018, 0x0010, 0x080c, 0x657b, 0x080c, 0x9588,
+	0x080c, 0xae61, 0x080c, 0x968d, 0x0005, 0x2600, 0x0002, 0xdab9,
+	0xdab9, 0xdab9, 0xdab9, 0xdab9, 0xdabb, 0xdab9, 0xdabb, 0xdab9,
+	0xdab9, 0xdabb, 0xdab9, 0xdab9, 0xdab9, 0xdabb, 0xdabb, 0xdabb,
+	0xdabb, 0x080c, 0x0dd5, 0x080c, 0x9588, 0x080c, 0xae61, 0x080c,
+	0x968d, 0x0005, 0x0016, 0x00b6, 0x00d6, 0x6110, 0x2158, 0xb900,
+	0xd184, 0x0138, 0x080c, 0x654f, 0x9006, 0x080c, 0x653b, 0x080c,
+	0x31e8, 0x00de, 0x00be, 0x001e, 0x0005, 0x6610, 0x2658, 0xb804,
+	0x9084, 0xff00, 0x8007, 0x90b2, 0x000c, 0x1a0c, 0x0dd5, 0x91b6,
+	0x0015, 0x1110, 0x003b, 0x0028, 0x91b6, 0x0016, 0x190c, 0x0dd5,
+	0x006b, 0x0005, 0xb8fc, 0xb8fc, 0xb8fc, 0xb8fc, 0xb8fc, 0xb8fc,
+	0xdb41, 0xdb02, 0xb8fc, 0xb8fc, 0xb8fc, 0xb8fc, 0xb8fc, 0xb8fc,
+	0xb8fc, 0xb8fc, 0xb8fc, 0xb8fc, 0xdb41, 0xdb48, 0xb8fc, 0xb8fc,
+	0xb8fc, 0xb8fc, 0x00f6, 0x080c, 0x696a, 0x11d8, 0x080c, 0xd230,
+	0x11c0, 0x6010, 0x905d, 0x01a8, 0xb8c0, 0x9005, 0x0190, 0x9006,
+	0x080c, 0x653b, 0x2001, 0x0002, 0x080c, 0x654f, 0x6023, 0x0001,
+	0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x9138, 0x080c, 0x968d,
+	0x00f0, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x283e,
+	0x11b0, 0x080c, 0x65ff, 0x0118, 0x080c, 0xae61, 0x0080, 0xb810,
+	0x0006, 0xb814, 0x0006, 0xb8c0, 0x0006, 0x080c, 0x6034, 0x000e,
+	0xb8c2, 0x000e, 0xb816, 0x000e, 0xb812, 0x080c, 0xae61, 0x00fe,
+	0x0005, 0x6604, 0x96b6, 0x001e, 0x1110, 0x080c, 0xae61, 0x0005,
+	0x080c, 0xbc85, 0x1148, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c,
+	0x9138, 0x080c, 0x968d, 0x0010, 0x080c, 0xae61, 0x0005, 0x6004,
+	0x908a, 0x0053, 0x1a0c, 0x0dd5, 0x080c, 0x9588, 0x080c, 0xae92,
+	0x080c, 0x968d, 0x0005, 0x9182, 0x0040, 0x0002, 0xdb79, 0xdb79,
+	0xdb79, 0xdb79, 0xdb7b, 0xdb79, 0xdb79, 0xdb79, 0xdb79, 0xdb79,
+	0xdb79, 0xdb79, 0xdb79, 0xdb79, 0xdb79, 0xdb79, 0xdb79, 0xdb79,
+	0xdb79, 0x080c, 0x0dd5, 0x0096, 0x00b6, 0x00d6, 0x00e6, 0x00f6,
+	0x0046, 0x0026, 0x6210, 0x2258, 0xb8bc, 0x9005, 0x11a8, 0x6106,
+	0x2071, 0x0260, 0x7444, 0x94a4, 0xff00, 0x0904, 0xdbe1, 0x080c,
+	0xe96b, 0x1170, 0x9486, 0x2000, 0x1158, 0x2009, 0x0001, 0x2011,
+	0x0200, 0x080c, 0x86dd, 0x0020, 0x9026, 0x080c, 0xe7ef, 0x0c38,
+	0x080c, 0x0fff, 0x090c, 0x0dd5, 0x6003, 0x0007, 0xa867, 0x010d,
+	0x9006, 0xa802, 0xa86a, 0xac8a, 0x2c00, 0xa88e, 0x6008, 0xa8e2,
+	0x6010, 0x2058, 0xb8a0, 0x7130, 0xa97a, 0x0016, 0xa876, 0xa87f,
+	0x0000, 0xa883, 0x0000, 0xa887, 0x0036, 0x080c, 0x6c81, 0x001e,
+	0x080c, 0xe96b, 0x1904, 0xdc41, 0x9486, 0x2000, 0x1130, 0x2019,
+	0x0017, 0x080c, 0xe522, 0x0804, 0xdc41, 0x9486, 0x0200, 0x1120,
+	0x080c, 0xe4be, 0x0804, 0xdc41, 0x9486, 0x0400, 0x0120, 0x9486,
+	0x1000, 0x1904, 0xdc41, 0x2019, 0x0002, 0x080c, 0xe4d9, 0x0804,
+	0xdc41, 0x2069, 0x1a71, 0x6a00, 0xd284, 0x0904, 0xdcab, 0x9284,
+	0x0300, 0x1904, 0xdca4, 0x6804, 0x9005, 0x0904, 0xdc8c, 0x2d78,
+	0x6003, 0x0007, 0x080c, 0x1018, 0x0904, 0xdc4d, 0x7800, 0xd08c,
+	0x1118, 0x7804, 0x8001, 0x7806, 0x6017, 0x0000, 0x2001, 0x180f,
+	0x2004, 0xd084, 0x1904, 0xdcaf, 0x9006, 0xa802, 0xa867, 0x0116,
+	0xa86a, 0x6008, 0xa8e2, 0x2c00, 0xa87a, 0x6010, 0x2058, 0xb8a0,
+	0x7130, 0xa9b6, 0xa876, 0xb928, 0xa9ba, 0xb92c, 0xa9be, 0xb930,
+	0xa9c2, 0xb934, 0xa9c6, 0xa883, 0x003d, 0x7044, 0x9084, 0x0003,
+	0x9080, 0xdc49, 0x2005, 0xa87e, 0x20a9, 0x000a, 0x2001, 0x0270,
+	0xaa5c, 0x9290, 0x0021, 0x2009, 0x0205, 0x200b, 0x0080, 0x20e1,
+	0x0000, 0xab60, 0x23e8, 0x2098, 0x22a0, 0x4003, 0x200b, 0x0000,
+	0x2001, 0x027a, 0x200c, 0xa9b2, 0x8000, 0x200c, 0xa9ae, 0x080c,
+	0x6c81, 0x002e, 0x004e, 0x00fe, 0x00ee, 0x00de, 0x00be, 0x009e,
+	0x0005, 0x0000, 0x0080, 0x0040, 0x0000, 0x2001, 0x1810, 0x2004,
+	0xd084, 0x0120, 0x080c, 0x0fff, 0x1904, 0xdbf6, 0x6017, 0xf100,
+	0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x90f0, 0x080c, 0x968d,
+	0x0c00, 0x2069, 0x0260, 0x6848, 0x9084, 0xff00, 0x9086, 0x1200,
+	0x1198, 0x686c, 0x9084, 0x00ff, 0x0016, 0x6114, 0x918c, 0xf700,
+	0x910d, 0x6116, 0x001e, 0x6003, 0x0001, 0x6007, 0x0043, 0x080c,
+	0x90f0, 0x080c, 0x968d, 0x0828, 0x6868, 0x602e, 0x686c, 0x6032,
+	0x6017, 0xf200, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x90f0,
+	0x080c, 0x968d, 0x0804, 0xdc41, 0x2001, 0x180e, 0x2004, 0xd0ec,
+	0x0120, 0x2011, 0x8049, 0x080c, 0x4b04, 0x6017, 0xf300, 0x0010,
+	0x6017, 0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x90f0,
+	0x080c, 0x968d, 0x0804, 0xdc41, 0x6017, 0xf500, 0x0c98, 0x6017,
+	0xf600, 0x0804, 0xdc61, 0x6017, 0xf200, 0x0804, 0xdc61, 0xa867,
+	0x0146, 0xa86b, 0x0000, 0x6008, 0xa886, 0x2c00, 0xa87a, 0x7044,
+	0x9084, 0x0003, 0x9080, 0xdc49, 0x2005, 0xa87e, 0x2928, 0x6010,
+	0x2058, 0xb8a0, 0xa876, 0xb828, 0xa88a, 0xb82c, 0xa88e, 0xb830,
+	0xa892, 0xb834, 0xa896, 0xa883, 0x003d, 0x2009, 0x0205, 0x2104,
+	0x9085, 0x0080, 0x200a, 0x20e1, 0x0000, 0x2011, 0x0210, 0x2214,
+	0x9294, 0x0fff, 0xaaa2, 0x9282, 0x0111, 0x1a0c, 0x0dd5, 0x8210,
+	0x821c, 0x2001, 0x026c, 0x2098, 0xa860, 0x20e8, 0xa85c, 0x9080,
+	0x0029, 0x20a0, 0x2011, 0xdd2b, 0x2041, 0x0001, 0x223d, 0x9784,
+	0x00ff, 0x9322, 0x1208, 0x2300, 0x20a8, 0x4003, 0x931a, 0x0530,
+	0x8210, 0xd7fc, 0x1130, 0x8d68, 0x2d0a, 0x2001, 0x0260, 0x2098,
+	0x0c68, 0x2950, 0x080c, 0x1018, 0x0170, 0x2900, 0xb002, 0xa867,
+	0x0147, 0xa86b, 0x0000, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001b,
+	0x20a0, 0x8840, 0x08d8, 0x2548, 0xa800, 0x902d, 0x0118, 0x080c,
+	0x1031, 0x0cc8, 0x080c, 0x1031, 0x0804, 0xdc4d, 0x2548, 0x8847,
+	0x9885, 0x0046, 0xa866, 0x2009, 0x0205, 0x200b, 0x0000, 0x080c,
+	0xe551, 0x0804, 0xdc41, 0x8010, 0x0004, 0x801a, 0x0006, 0x8018,
+	0x0008, 0x8016, 0x000a, 0x8014, 0x9186, 0x0013, 0x1160, 0x6004,
+	0x908a, 0x0054, 0x1a0c, 0x0dd5, 0x9082, 0x0040, 0x0a0c, 0x0dd5,
+	0x2008, 0x0804, 0xdddc, 0x9186, 0x0051, 0x0108, 0x00c0, 0x2001,
+	0x0109, 0x2004, 0xd084, 0x0904, 0xdd8d, 0x0126, 0x2091, 0x2800,
+	0x0006, 0x0016, 0x0026, 0x080c, 0x8fd5, 0x002e, 0x001e, 0x000e,
+	0x012e, 0x6000, 0x9086, 0x0002, 0x1580, 0x0804, 0xde24, 0x9186,
+	0x0027, 0x0530, 0x9186, 0x0048, 0x0128, 0x9186, 0x0014, 0x0500,
+	0x190c, 0x0dd5, 0x2001, 0x0109, 0x2004, 0xd084, 0x01f0, 0x00c6,
+	0x0126, 0x2091, 0x2800, 0x00c6, 0x2061, 0x0100, 0x0006, 0x0016,
+	0x0026, 0x080c, 0x8fd5, 0x002e, 0x001e, 0x000e, 0x00ce, 0x012e,
+	0x00ce, 0x6000, 0x9086, 0x0004, 0x190c, 0x0dd5, 0x0804, 0xdf05,
+	0x6004, 0x9082, 0x0040, 0x2008, 0x001a, 0x080c, 0xaef7, 0x0005,
+	0xdda3, 0xdda5, 0xdda5, 0xddcc, 0xdda3, 0xdda3, 0xdda3, 0xdda3,
+	0xdda3, 0xdda3, 0xdda3, 0xdda3, 0xdda3, 0xdda3, 0xdda3, 0xdda3,
+	0xdda3, 0xdda3, 0xdda3, 0x080c, 0x0dd5, 0x080c, 0x9588, 0x080c,
+	0x968d, 0x0036, 0x0096, 0x6014, 0x904d, 0x01d8, 0x080c, 0xcb35,
+	0x01c0, 0x6003, 0x0002, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be,
+	0xd0bc, 0x1178, 0x2019, 0x0004, 0x080c, 0xe551, 0x6017, 0x0000,
+	0x6018, 0x9005, 0x1120, 0x2001, 0x1987, 0x2004, 0x601a, 0x6003,
+	0x0007, 0x009e, 0x003e, 0x0005, 0x0096, 0x080c, 0x9588, 0x080c,
+	0x968d, 0x080c, 0xcb35, 0x0120, 0x6014, 0x2048, 0x080c, 0x1031,
+	0x080c, 0xae92, 0x009e, 0x0005, 0x0002, 0xddf0, 0xde07, 0xddf2,
+	0xde1e, 0xddf0, 0xddf0, 0xddf0, 0xddf0, 0xddf0, 0xddf0, 0xddf0,
+	0xddf0, 0xddf0, 0xddf0, 0xddf0, 0xddf0, 0xddf0, 0xddf0, 0xddf0,
+	0x080c, 0x0dd5, 0x0096, 0x080c, 0x9588, 0x6014, 0x2048, 0xa87c,
+	0xd0b4, 0x0138, 0x6003, 0x0007, 0x2009, 0x0043, 0x080c, 0xaedc,
+	0x0010, 0x6003, 0x0004, 0x080c, 0x968d, 0x009e, 0x0005, 0x080c,
+	0x9588, 0x080c, 0xcb35, 0x0138, 0x6114, 0x0096, 0x2148, 0xa97c,
+	0x009e, 0xd1ec, 0x1138, 0x080c, 0x86b2, 0x080c, 0xae61, 0x080c,
+	0x968d, 0x0005, 0x080c, 0xe7b3, 0x0db0, 0x0cc8, 0x080c, 0x9588,
+	0x2009, 0x0041, 0x0804, 0xdf8d, 0x9182, 0x0040, 0x0002, 0xde3a,
+	0xde3c, 0xde3a, 0xde3a, 0xde3a, 0xde3a, 0xde3a, 0xde3a, 0xde3a,
+	0xde3a, 0xde3a, 0xde3a, 0xde3a, 0xde3a, 0xde3a, 0xde3a, 0xde3a,
+	0xde3d, 0xde3a, 0x080c, 0x0dd5, 0x0005, 0x00d6, 0x080c, 0x86b2,
+	0x00de, 0x080c, 0xe80b, 0x080c, 0xae61, 0x0005, 0x9182, 0x0040,
+	0x0002, 0xde5c, 0xde5c, 0xde5c, 0xde5c, 0xde5c, 0xde5c, 0xde5c,
+	0xde5c, 0xde5c, 0xde5e, 0xdecd, 0xde5c, 0xde5c, 0xde5c, 0xde5c,
+	0xdecd, 0xde5c, 0xde5c, 0xde5c, 0x080c, 0x0dd5, 0x2001, 0x0105,
+	0x2004, 0x9084, 0x1800, 0x01c8, 0x2001, 0x0132, 0x200c, 0x2001,
+	0x0131, 0x2004, 0x9105, 0x1904, 0xdecd, 0x2009, 0x180c, 0x2104,
+	0xd0d4, 0x0904, 0xdecd, 0xc0d4, 0x200a, 0x2009, 0x0105, 0x2104,
+	0x9084, 0xe7fd, 0x9085, 0x0010, 0x200a, 0x2001, 0x1867, 0x2004,
+	0xd0e4, 0x1528, 0x603b, 0x0000, 0x080c, 0x963d, 0x6014, 0x0096,
+	0x2048, 0xa87c, 0xd0fc, 0x0188, 0x908c, 0x0003, 0x918e, 0x0002,
+	0x0508, 0x2001, 0x180c, 0x2004, 0xd0d4, 0x11e0, 0x080c, 0x97b9,
+	0x2009, 0x0041, 0x009e, 0x0804, 0xdf8d, 0x080c, 0x97b9, 0x6003,
+	0x0007, 0x601b, 0x0000, 0x080c, 0x86b2, 0x009e, 0x0005, 0x2001,
+	0x0100, 0x2004, 0x9082, 0x0005, 0x0aa8, 0x2001, 0x011f, 0x2004,
+	0x603a, 0x0890, 0x2001, 0x180c, 0x200c, 0xc1d4, 0x2102, 0xd1cc,
+	0x0110, 0x080c, 0x2c52, 0x080c, 0x97b9, 0x6014, 0x2048, 0xa97c,
+	0xd1ec, 0x1130, 0x080c, 0x86b2, 0x080c, 0xae61, 0x009e, 0x0005,
+	0x080c, 0xe7b3, 0x0db8, 0x009e, 0x0005, 0x2001, 0x180c, 0x200c,
+	0xc1d4, 0x2102, 0x0036, 0x080c, 0x963d, 0x080c, 0x97b9, 0x6014,
+	0x0096, 0x2048, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc,
+	0x0188, 0xa87c, 0x9084, 0x0003, 0x9086, 0x0002, 0x0140, 0xa8ac,
+	0x6330, 0x931a, 0x6332, 0xa8b0, 0x632c, 0x931b, 0x632e, 0x6003,
+	0x0002, 0x0080, 0x2019, 0x0004, 0x080c, 0xe551, 0x6018, 0x9005,
+	0x1128, 0x2001, 0x1987, 0x2004, 0x8003, 0x601a, 0x6017, 0x0000,
+	0x6003, 0x0007, 0x009e, 0x003e, 0x0005, 0x9182, 0x0040, 0x0002,
+	0xdf1c, 0xdf1c, 0xdf1c, 0xdf1c, 0xdf1c, 0xdf1c, 0xdf1c, 0xdf1c,
+	0xdf1e, 0xdf1c, 0xdf1c, 0xdf1c, 0xdf1c, 0xdf1c, 0xdf1c, 0xdf1c,
+	0xdf1c, 0xdf1c, 0xdf1c, 0xdf69, 0x080c, 0x0dd5, 0x6014, 0x0096,
+	0x2048, 0xa834, 0xaa38, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be,
+	0xd1bc, 0x1190, 0x920d, 0x1518, 0xa87c, 0xd0fc, 0x0128, 0x2009,
+	0x0041, 0x009e, 0x0804, 0xdf8d, 0x6003, 0x0007, 0x601b, 0x0000,
+	0x080c, 0x86b2, 0x009e, 0x0005, 0x6124, 0xd1f4, 0x1d58, 0x0006,
+	0x0046, 0xacac, 0x9422, 0xa9b0, 0x2200, 0x910b, 0x6030, 0x9420,
+	0x6432, 0x602c, 0x9109, 0x612e, 0x004e, 0x000e, 0x08d8, 0x6110,
+	0x00b6, 0x2158, 0xb900, 0x00be, 0xd1bc, 0x1178, 0x2009, 0x180e,
+	0x210c, 0xd19c, 0x0118, 0x6003, 0x0007, 0x0010, 0x6003, 0x0006,
+	0x00e9, 0x080c, 0x86b4, 0x009e, 0x0005, 0x6003, 0x0002, 0x009e,
+	0x0005, 0x6024, 0xd0f4, 0x0128, 0x080c, 0x15e5, 0x1904, 0xdf1e,
+	0x0005, 0x6014, 0x0096, 0x2048, 0xa834, 0xa938, 0x009e, 0x9105,
+	0x1120, 0x080c, 0x15e5, 0x1904, 0xdf1e, 0x0005, 0xd2fc, 0x0140,
+	0x8002, 0x8000, 0x8212, 0x9291, 0x0000, 0x2009, 0x0009, 0x0010,
+	0x2009, 0x0015, 0xaa9a, 0xa896, 0x0005, 0x9182, 0x0040, 0x0208,
+	0x0062, 0x9186, 0x0013, 0x0120, 0x9186, 0x0014, 0x190c, 0x0dd5,
+	0x6024, 0xd0dc, 0x090c, 0x0dd5, 0x0005, 0xdfb0, 0xdfbc, 0xdfc8,
+	0xdfd4, 0xdfb0, 0xdfb0, 0xdfb0, 0xdfb0, 0xdfb7, 0xdfb2, 0xdfb2,
+	0xdfb0, 0xdfb0, 0xdfb0, 0xdfb0, 0xdfb2, 0xdfb0, 0xdfb2, 0xdfb0,
+	0x080c, 0x0dd5, 0x6024, 0xd0dc, 0x090c, 0x0dd5, 0x0005, 0x6014,
+	0x9005, 0x190c, 0x0dd5, 0x0005, 0x6003, 0x0001, 0x6106, 0x080c,
+	0x90f0, 0x0126, 0x2091, 0x8000, 0x080c, 0x968d, 0x012e, 0x0005,
+	0x6003, 0x0001, 0x6106, 0x080c, 0x90f0, 0x0126, 0x2091, 0x8000,
+	0x080c, 0x968d, 0x012e, 0x0005, 0x6003, 0x0003, 0x6106, 0x2c10,
+	0x080c, 0x1bad, 0x0126, 0x2091, 0x8000, 0x080c, 0x9155, 0x080c,
+	0x97b9, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x0036, 0x0096,
+	0x9182, 0x0040, 0x0023, 0x009e, 0x003e, 0x012e, 0x0005, 0xdfff,
+	0xe001, 0xe013, 0xe02d, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff,
+	0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0xdfff, 0x080c,
+	0x0dd5, 0x6014, 0x2048, 0xa87c, 0xd0fc, 0x01f8, 0x909c, 0x0003,
+	0x939e, 0x0003, 0x01d0, 0x6003, 0x0001, 0x6106, 0x080c, 0x90f0,
+	0x080c, 0x968d, 0x0470, 0x6014, 0x2048, 0xa87c, 0xd0fc, 0x0168,
+	0x909c, 0x0003, 0x939e, 0x0003, 0x0140, 0x6003, 0x0001, 0x6106,
+	0x080c, 0x90f0, 0x080c, 0x968d, 0x00e0, 0x901e, 0x6316, 0x631a,
+	0x2019, 0x0004, 0x080c, 0xe551, 0x00a0, 0x6014, 0x2048, 0xa87c,
+	0xd0fc, 0x0d98, 0x909c, 0x0003, 0x939e, 0x0003, 0x0d70, 0x6003,
+	0x0003, 0x6106, 0x2c10, 0x080c, 0x1bad, 0x080c, 0x9155, 0x080c,
+	0x97b9, 0x0005, 0x080c, 0x9588, 0x6114, 0x81ff, 0x0158, 0x0096,
+	0x2148, 0x080c, 0xe908, 0x0036, 0x2019, 0x0029, 0x080c, 0xe551,
+	0x003e, 0x009e, 0x080c, 0xae92, 0x080c, 0x968d, 0x0005, 0x080c,
+	0x963d, 0x6114, 0x81ff, 0x0158, 0x0096, 0x2148, 0x080c, 0xe908,
+	0x0036, 0x2019, 0x0029, 0x080c, 0xe551, 0x003e, 0x009e, 0x080c,
+	0xae92, 0x080c, 0x97b9, 0x0005, 0x9182, 0x0085, 0x0002, 0xe07e,
+	0xe07c, 0xe07c, 0xe08a, 0xe07c, 0xe07c, 0xe07c, 0xe07c, 0xe07c,
+	0xe07c, 0xe07c, 0xe07c, 0xe07c, 0x080c, 0x0dd5, 0x6003, 0x000b,
+	0x6106, 0x080c, 0x90f0, 0x0126, 0x2091, 0x8000, 0x080c, 0x968d,
+	0x012e, 0x0005, 0x0026, 0x00e6, 0x080c, 0xe7aa, 0x0118, 0x080c,
+	0xae61, 0x0450, 0x2071, 0x0260, 0x7224, 0x6216, 0x2001, 0x180e,
+	0x2004, 0xd0e4, 0x0150, 0x6010, 0x00b6, 0x2058, 0xbca0, 0x00be,
+	0x2c00, 0x2011, 0x014e, 0x080c, 0xb182, 0x7220, 0x080c, 0xe3f7,
+	0x0118, 0x6007, 0x0086, 0x0040, 0x6007, 0x0087, 0x7224, 0x9296,
+	0xffff, 0x1110, 0x6007, 0x0086, 0x6003, 0x0001, 0x080c, 0x90f0,
+	0x080c, 0x968d, 0x080c, 0x97b9, 0x00ee, 0x002e, 0x0005, 0x9186,
+	0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0dd5, 0x908a,
+	0x0092, 0x1a0c, 0x0dd5, 0x9082, 0x0085, 0x00a2, 0x9186, 0x0027,
+	0x0130, 0x9186, 0x0014, 0x0118, 0x080c, 0xaef7, 0x0050, 0x2001,
+	0x0007, 0x080c, 0x657b, 0x080c, 0x9588, 0x080c, 0xae92, 0x080c,
+	0x968d, 0x0005, 0xe0ef, 0xe0f1, 0xe0f1, 0xe0ef, 0xe0ef, 0xe0ef,
+	0xe0ef, 0xe0ef, 0xe0ef, 0xe0ef, 0xe0ef, 0xe0ef, 0xe0ef, 0x080c,
+	0x0dd5, 0x080c, 0x9588, 0x080c, 0xae92, 0x080c, 0x968d, 0x0005,
+	0x9182, 0x0085, 0x0a0c, 0x0dd5, 0x9182, 0x0092, 0x1a0c, 0x0dd5,
+	0x9182, 0x0085, 0x0002, 0xe110, 0xe110, 0xe110, 0xe112, 0xe110,
+	0xe110, 0xe110, 0xe110, 0xe110, 0xe110, 0xe110, 0xe110, 0xe110,
+	0x080c, 0x0dd5, 0x0005, 0x9186, 0x0013, 0x0148, 0x9186, 0x0014,
+	0x0130, 0x9186, 0x0027, 0x0118, 0x080c, 0xaef7, 0x0030, 0x080c,
+	0x9588, 0x080c, 0xae92, 0x080c, 0x968d, 0x0005, 0x0036, 0x080c,
+	0xe80b, 0x6043, 0x0000, 0x2019, 0x000b, 0x0031, 0x6023, 0x0006,
+	0x6003, 0x0007, 0x003e, 0x0005, 0x0126, 0x0036, 0x2091, 0x8000,
+	0x0086, 0x2c40, 0x0096, 0x904e, 0x080c, 0xa69c, 0x009e, 0x008e,
+	0x1550, 0x0076, 0x2c38, 0x080c, 0xa747, 0x007e, 0x1520, 0x6000,
+	0x9086, 0x0000, 0x0500, 0x6020, 0x9086, 0x0007, 0x01e0, 0x0096,
+	0x601c, 0xd084, 0x0140, 0x080c, 0xe80b, 0x080c, 0xd248, 0x080c,
+	0x1a5e, 0x6023, 0x0007, 0x6014, 0x2048, 0x080c, 0xcb35, 0x0110,
+	0x080c, 0xe551, 0x009e, 0x6017, 0x0000, 0x080c, 0xe80b, 0x6023,
+	0x0007, 0x080c, 0xd248, 0x003e, 0x012e, 0x0005, 0x00f6, 0x00c6,
+	0x00b6, 0x0036, 0x0156, 0x2079, 0x0260, 0x7938, 0x783c, 0x080c,
+	0x283e, 0x15c8, 0x0016, 0x00c6, 0x080c, 0x65ff, 0x1590, 0x001e,
+	0x00c6, 0x2160, 0x080c, 0xd245, 0x00ce, 0x002e, 0x0026, 0x0016,
+	0x2019, 0x0029, 0x080c, 0xa808, 0x080c, 0x928b, 0x0076, 0x903e,
+	0x080c, 0x9168, 0x007e, 0x001e, 0x0076, 0x903e, 0x080c, 0xe2eb,
+	0x007e, 0x0026, 0xba04, 0x9294, 0xff00, 0x8217, 0x9286, 0x0006,
+	0x0118, 0x9286, 0x0004, 0x1118, 0xbaa0, 0x080c, 0x327d, 0x002e,
+	0xbcc0, 0x001e, 0x080c, 0x6034, 0xbe12, 0xbd16, 0xbcc2, 0x9006,
+	0x0010, 0x00ce, 0x001e, 0x015e, 0x003e, 0x00be, 0x00ce, 0x00fe,
+	0x0005, 0x00c6, 0x00d6, 0x00b6, 0x0016, 0x2009, 0x1824, 0x2104,
+	0x9086, 0x0074, 0x1904, 0xe212, 0x2069, 0x0260, 0x6944, 0x9182,
+	0x0100, 0x06e0, 0x6940, 0x9184, 0x8000, 0x0904, 0xe20f, 0x2001,
+	0x197c, 0x2004, 0x9005, 0x1140, 0x6010, 0x2058, 0xb8c0, 0x9005,
+	0x0118, 0x9184, 0x0800, 0x0598, 0x6948, 0x918a, 0x0001, 0x0648,
+	0x080c, 0xe970, 0x0118, 0x6978, 0xd1fc, 0x11b8, 0x2009, 0x0205,
+	0x200b, 0x0001, 0x693c, 0x81ff, 0x1198, 0x6944, 0x9182, 0x0100,
+	0x02a8, 0x6940, 0x81ff, 0x1178, 0x6948, 0x918a, 0x0001, 0x0288,
+	0x6950, 0x918a, 0x0001, 0x0298, 0x00d0, 0x6017, 0x0100, 0x00a0,
+	0x6017, 0x0300, 0x0088, 0x6017, 0x0500, 0x0070, 0x6017, 0x0700,
+	0x0058, 0x6017, 0x0900, 0x0040, 0x6017, 0x0b00, 0x0028, 0x6017,
+	0x0f00, 0x0010, 0x6017, 0x2d00, 0x9085, 0x0001, 0x0008, 0x9006,
+	0x001e, 0x00be, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00b6, 0x0026,
+	0x0036, 0x0156, 0x6210, 0x2258, 0xbb04, 0x9394, 0x00ff, 0x9286,
+	0x0006, 0x0180, 0x9286, 0x0004, 0x0168, 0x9394, 0xff00, 0x8217,
+	0x9286, 0x0006, 0x0138, 0x9286, 0x0004, 0x0120, 0x080c, 0x660e,
+	0x0804, 0xe27a, 0x2011, 0x0276, 0x20a9, 0x0004, 0x0096, 0x2b48,
+	0x2019, 0x000a, 0x080c, 0xbe1d, 0x009e, 0x15a8, 0x2011, 0x027a,
+	0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c, 0xbe1d,
+	0x009e, 0x1548, 0x0046, 0x0016, 0xbaa0, 0x2220, 0x9006, 0x2009,
+	0x1848, 0x210c, 0xd1a4, 0x0138, 0x2009, 0x0029, 0x080c, 0xe5ae,
+	0xb800, 0xc0e5, 0xb802, 0x2019, 0x0029, 0x080c, 0x928b, 0x0076,
+	0x2039, 0x0000, 0x080c, 0x9168, 0x2c08, 0x080c, 0xe2eb, 0x007e,
+	0x2001, 0x0007, 0x080c, 0x657b, 0x2001, 0x0007, 0x080c, 0x654f,
+	0x001e, 0x004e, 0x9006, 0x015e, 0x003e, 0x002e, 0x00be, 0x00ce,
+	0x0005, 0x00d6, 0x2069, 0x026e, 0x6800, 0x9086, 0x0800, 0x0118,
+	0x6017, 0x0000, 0x0008, 0x9006, 0x00de, 0x0005, 0x00b6, 0x00f6,
+	0x0016, 0x0026, 0x0036, 0x0156, 0x2079, 0x026c, 0x7930, 0x7834,
+	0x080c, 0x283e, 0x11d0, 0x080c, 0x65ff, 0x11b8, 0x2011, 0x0270,
+	0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x000a, 0x080c, 0xbe1d,
+	0x009e, 0x1158, 0x2011, 0x0274, 0x20a9, 0x0004, 0x0096, 0x2b48,
+	0x2019, 0x0006, 0x080c, 0xbe1d, 0x009e, 0x015e, 0x003e, 0x002e,
+	0x001e, 0x00fe, 0x00be, 0x0005, 0x00b6, 0x0006, 0x0016, 0x0026,
+	0x0036, 0x0156, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c,
+	0x283e, 0x11d0, 0x080c, 0x65ff, 0x11b8, 0x2011, 0x0276, 0x20a9,
+	0x0004, 0x0096, 0x2b48, 0x2019, 0x000a, 0x080c, 0xbe1d, 0x009e,
+	0x1158, 0x2011, 0x027a, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019,
+	0x0006, 0x080c, 0xbe1d, 0x009e, 0x015e, 0x003e, 0x002e, 0x001e,
+	0x000e, 0x00be, 0x0005, 0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066,
+	0x0056, 0x0046, 0x0026, 0x0126, 0x2091, 0x8000, 0x2740, 0x2029,
+	0x19f0, 0x252c, 0x2021, 0x19f6, 0x2424, 0x2061, 0x1cd0, 0x2071,
+	0x1800, 0x7654, 0x7074, 0x81ff, 0x0150, 0x0006, 0x9186, 0x1ab0,
+	0x000e, 0x0128, 0x8001, 0x9602, 0x1a04, 0xe388, 0x0018, 0x9606,
+	0x0904, 0xe388, 0x080c, 0x8981, 0x0904, 0xe37f, 0x2100, 0x9c06,
+	0x0904, 0xe37f, 0x080c, 0xe5ef, 0x1904, 0xe37f, 0x080c, 0xe98d,
+	0x0904, 0xe37f, 0x080c, 0xe5df, 0x0904, 0xe37f, 0x6720, 0x9786,
+	0x0001, 0x1148, 0x080c, 0x3314, 0x0904, 0xe3c7, 0x6004, 0x9086,
+	0x0000, 0x1904, 0xe3c7, 0x9786, 0x0004, 0x0904, 0xe3c7, 0x9786,
+	0x0007, 0x0904, 0xe37f, 0x2500, 0x9c06, 0x0904, 0xe37f, 0x2400,
+	0x9c06, 0x05e8, 0x88ff, 0x0118, 0x6054, 0x9906, 0x15c0, 0x0096,
+	0x6000, 0x9086, 0x0004, 0x1120, 0x0016, 0x080c, 0x1a5e, 0x001e,
+	0x9786, 0x000a, 0x0148, 0x080c, 0xcd3b, 0x1130, 0x080c, 0xb813,
+	0x009e, 0x080c, 0xae92, 0x0418, 0x6014, 0x2048, 0x080c, 0xcb35,
+	0x01d8, 0x9786, 0x0003, 0x1570, 0xa867, 0x0103, 0xa87c, 0xd0cc,
+	0x0130, 0x0096, 0xa878, 0x2048, 0x080c, 0x0fb1, 0x009e, 0xab7a,
+	0xa877, 0x0000, 0x080c, 0xe908, 0x0016, 0x080c, 0xce24, 0x080c,
+	0x6c75, 0x001e, 0x080c, 0xcd1e, 0x009e, 0x080c, 0xae92, 0x9ce0,
+	0x0018, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1210, 0x0804, 0xe2ff,
+	0x012e, 0x002e, 0x004e, 0x005e, 0x006e, 0x007e, 0x008e, 0x00ce,
+	0x00ee, 0x0005, 0x9786, 0x0006, 0x1150, 0x9386, 0x0005, 0x0128,
+	0x080c, 0xe908, 0x080c, 0xe551, 0x08f8, 0x009e, 0x0c00, 0x9786,
+	0x0009, 0x11f8, 0x6000, 0x9086, 0x0004, 0x01c0, 0x6000, 0x9086,
+	0x0003, 0x11a0, 0x080c, 0x963d, 0x0096, 0x6114, 0x2148, 0x080c,
+	0xcb35, 0x0118, 0x6010, 0x080c, 0x6c81, 0x009e, 0x00c6, 0x080c,
+	0xae61, 0x00ce, 0x0036, 0x080c, 0x97b9, 0x003e, 0x009e, 0x0804,
+	0xe37f, 0x9786, 0x000a, 0x0904, 0xe366, 0x0804, 0xe364, 0x81ff,
+	0x0904, 0xe37f, 0x9180, 0x0001, 0x2004, 0x9086, 0x0018, 0x0138,
+	0x9180, 0x0001, 0x2004, 0x9086, 0x002d, 0x1904, 0xe37f, 0x6000,
+	0x9086, 0x0002, 0x1904, 0xe37f, 0x080c, 0xcd2a, 0x0138, 0x080c,
+	0xcd3b, 0x1904, 0xe37f, 0x080c, 0xb813, 0x0038, 0x080c, 0x31e8,
+	0x080c, 0xcd3b, 0x1110, 0x080c, 0xb813, 0x080c, 0xae92, 0x0804,
+	0xe37f, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, 0x0005, 0x00c6,
+	0x00e6, 0x0016, 0x2c08, 0x2170, 0x9006, 0x080c, 0xe578, 0x001e,
+	0x0120, 0x6020, 0x9084, 0x000f, 0x001b, 0x00ee, 0x00ce, 0x0005,
+	0xe416, 0xe416, 0xe416, 0xe416, 0xe416, 0xe416, 0xe418, 0xe416,
+	0xe416, 0xe416, 0xe416, 0xae92, 0xae92, 0xe416, 0x9006, 0x0005,
+	0x0036, 0x0046, 0x0016, 0x7010, 0x00b6, 0x2058, 0xbca0, 0x00be,
+	0x2c00, 0x2009, 0x0020, 0x080c, 0xe5ae, 0x001e, 0x004e, 0x2019,
+	0x0002, 0x080c, 0xe134, 0x003e, 0x9085, 0x0001, 0x0005, 0x0096,
+	0x080c, 0xcb35, 0x0140, 0x6014, 0x904d, 0x080c, 0xc768, 0x687b,
+	0x0005, 0x080c, 0x6c81, 0x009e, 0x080c, 0xae92, 0x9085, 0x0001,
+	0x0005, 0x2001, 0x0001, 0x080c, 0x653b, 0x0156, 0x0016, 0x0026,
+	0x0036, 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011, 0x0276, 0x080c,
+	0xbe09, 0x003e, 0x002e, 0x001e, 0x015e, 0x9005, 0x0005, 0x00f6,
+	0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066, 0x00b6, 0x0126, 0x2091,
+	0x8000, 0x2740, 0x2061, 0x1cd0, 0x2079, 0x0001, 0x8fff, 0x0904,
+	0xe4b1, 0x2071, 0x1800, 0x7654, 0x7074, 0x8001, 0x9602, 0x1a04,
+	0xe4b1, 0x88ff, 0x0120, 0x2800, 0x9c06, 0x1590, 0x2078, 0x080c,
+	0xe5df, 0x0570, 0x2400, 0x9c06, 0x0558, 0x6720, 0x9786, 0x0006,
+	0x1538, 0x9786, 0x0007, 0x0520, 0x88ff, 0x1140, 0x6010, 0x9b06,
+	0x11f8, 0x85ff, 0x0118, 0x6054, 0x9106, 0x11d0, 0x0096, 0x601c,
+	0xd084, 0x0140, 0x080c, 0xe80b, 0x080c, 0xd248, 0x080c, 0x1a5e,
+	0x6023, 0x0007, 0x6014, 0x2048, 0x080c, 0xcb35, 0x0120, 0x0046,
+	0x080c, 0xe551, 0x004e, 0x009e, 0x080c, 0xae92, 0x88ff, 0x1198,
+	0x9ce0, 0x0018, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1210, 0x0804,
+	0xe466, 0x9006, 0x012e, 0x00be, 0x006e, 0x007e, 0x008e, 0x00ce,
+	0x00ee, 0x00fe, 0x0005, 0x98c5, 0x0001, 0x0ca0, 0x00b6, 0x0076,
+	0x0056, 0x0086, 0x9046, 0x2029, 0x0001, 0x2c20, 0x2019, 0x0002,
+	0x6210, 0x2258, 0x0096, 0x904e, 0x080c, 0xa69c, 0x009e, 0x008e,
+	0x903e, 0x080c, 0xa747, 0x080c, 0xe457, 0x005e, 0x007e, 0x00be,
 	0x0005, 0x00b6, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20,
-	0x20a9, 0x0800, 0x900e, 0x0016, 0x0036, 0x080c, 0x6600, 0x11a0,
-	0x0086, 0x9046, 0x2828, 0x0046, 0x2021, 0x0001, 0x080c, 0xe7ce,
-	0x004e, 0x0096, 0x904e, 0x080c, 0xa682, 0x009e, 0x008e, 0x903e,
-	0x080c, 0xa72d, 0x080c, 0xe436, 0x003e, 0x001e, 0x8108, 0x1f04,
-	0xe50b, 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e, 0x00be, 0x0005,
-	0x0016, 0x00f6, 0x080c, 0xcb19, 0x0198, 0xa864, 0x9084, 0x00ff,
-	0x9086, 0x0046, 0x0180, 0xa800, 0x907d, 0x0138, 0xa803, 0x0000,
-	0xab82, 0x080c, 0x6c79, 0x2f48, 0x0cb0, 0xab82, 0x080c, 0x6c79,
-	0x00fe, 0x001e, 0x0005, 0xa800, 0x907d, 0x0130, 0xa803, 0x0000,
-	0x080c, 0x6c79, 0x2f48, 0x0cb8, 0x080c, 0x6c79, 0x0c88, 0x00e6,
-	0x0046, 0x0036, 0x2061, 0x1cd0, 0x9005, 0x1138, 0x2071, 0x1800,
-	0x7454, 0x7074, 0x8001, 0x9402, 0x12f8, 0x2100, 0x9c06, 0x0188,
-	0x6000, 0x9086, 0x0000, 0x0168, 0x6008, 0x9206, 0x1150, 0x6320,
-	0x9386, 0x0009, 0x01b0, 0x6010, 0x91a0, 0x0004, 0x2424, 0x9406,
-	0x0140, 0x9ce0, 0x0018, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1220,
-	0x0c20, 0x9085, 0x0001, 0x0008, 0x9006, 0x003e, 0x004e, 0x00ee,
-	0x0005, 0x631c, 0xd3c4, 0x1d68, 0x0c30, 0x0096, 0x0006, 0x080c,
-	0x0fff, 0x000e, 0x090c, 0x0dd5, 0xaae2, 0xa867, 0x010d, 0xa88e,
-	0x0026, 0x2010, 0x080c, 0xcb09, 0x2001, 0x0000, 0x0120, 0x2200,
-	0x9080, 0x0015, 0x2004, 0x002e, 0xa87a, 0x9186, 0x0020, 0x0110,
-	0xa8e3, 0xffff, 0xa986, 0xac76, 0xa87f, 0x0000, 0x2001, 0x198e,
-	0x2004, 0xa882, 0x9006, 0xa802, 0xa86a, 0xa88a, 0x0126, 0x2091,
-	0x8000, 0x080c, 0x6c79, 0x012e, 0x009e, 0x0005, 0x6700, 0x9786,
-	0x0000, 0x0158, 0x9786, 0x0001, 0x0140, 0x9786, 0x000a, 0x0128,
-	0x9786, 0x0009, 0x0110, 0x9085, 0x0001, 0x0005, 0x00e6, 0x6010,
-	0x9075, 0x0138, 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x9206, 0x00ee,
-	0x0005, 0x9085, 0x0001, 0x0cd8, 0x0016, 0x6004, 0x908e, 0x001e,
-	0x11a0, 0x8007, 0x6134, 0x918c, 0x00ff, 0x9105, 0x6036, 0x6007,
-	0x0085, 0x6003, 0x000b, 0x6023, 0x0005, 0x2001, 0x1987, 0x2004,
-	0x601a, 0x080c, 0x90c7, 0x080c, 0x9664, 0x001e, 0x0005, 0xa001,
-	0xa001, 0x0005, 0x6024, 0xd0e4, 0x0158, 0xd0cc, 0x0118, 0x080c,
-	0xce4e, 0x0030, 0x080c, 0xe7ea, 0x080c, 0x8689, 0x080c, 0xae47,
-	0x0005, 0x9280, 0x0008, 0x2004, 0x9084, 0x000f, 0x0002, 0xe61d,
-	0xe61d, 0xe61d, 0xe61f, 0xe61d, 0xe61f, 0xe61f, 0xe61d, 0xe61f,
-	0xe61d, 0xe61d, 0xe61d, 0xe61d, 0xe61d, 0x9006, 0x0005, 0x9085,
-	0x0001, 0x0005, 0x9280, 0x0008, 0x2004, 0x9084, 0x000f, 0x0002,
-	0xe636, 0xe636, 0xe636, 0xe636, 0xe636, 0xe636, 0xe643, 0xe636,
-	0xe636, 0xe636, 0xe636, 0xe636, 0xe636, 0xe636, 0x6007, 0x003b,
-	0x602f, 0x0009, 0x6017, 0x2a00, 0x6003, 0x0001, 0x080c, 0x90c7,
-	0x080c, 0x9664, 0x0005, 0x0096, 0x00c6, 0x2260, 0x080c, 0xe7ea,
-	0x6043, 0x0000, 0x6024, 0xc0f4, 0xc0e4, 0x6026, 0x603b, 0x0000,
-	0x00ce, 0x00d6, 0x2268, 0x9186, 0x0007, 0x1904, 0xe69c, 0x6814,
-	0x9005, 0x0138, 0x2048, 0xa87c, 0xd0fc, 0x1118, 0x00de, 0x009e,
-	0x08a8, 0x6007, 0x003a, 0x6003, 0x0001, 0x080c, 0x90c7, 0x080c,
-	0x9664, 0x00c6, 0x2d60, 0x6100, 0x9186, 0x0002, 0x1904, 0xe713,
-	0x6014, 0x9005, 0x1138, 0x6000, 0x9086, 0x0007, 0x190c, 0x0dd5,
-	0x0804, 0xe713, 0x2048, 0x080c, 0xcb1b, 0x1130, 0x0028, 0x2048,
-	0xa800, 0x9005, 0x1de0, 0x2900, 0x2048, 0xa87c, 0x9084, 0x0003,
-	0x9086, 0x0002, 0x1168, 0xa87c, 0xc0dc, 0xc0f4, 0xa87e, 0xa880,
-	0xc0fc, 0xa882, 0x2009, 0x0043, 0x080c, 0xdf6e, 0x0804, 0xe713,
-	0x2009, 0x0041, 0x0804, 0xe70d, 0x9186, 0x0005, 0x15a0, 0x6814,
-	0x2048, 0xa87c, 0xd0bc, 0x1120, 0x00de, 0x009e, 0x0804, 0xe636,
-	0xd0b4, 0x0128, 0xd0fc, 0x090c, 0x0dd5, 0x0804, 0xe657, 0x6007,
-	0x003a, 0x6003, 0x0001, 0x080c, 0x90c7, 0x080c, 0x9664, 0x00c6,
-	0x2d60, 0x6100, 0x9186, 0x0002, 0x0120, 0x9186, 0x0004, 0x1904,
-	0xe713, 0x6814, 0x2048, 0xa97c, 0xc1f4, 0xc1dc, 0xa97e, 0xa980,
-	0xc1fc, 0xc1bc, 0xa982, 0x00f6, 0x2c78, 0x080c, 0x1725, 0x00fe,
-	0x2009, 0x0042, 0x04d0, 0x0036, 0x080c, 0x0fff, 0x090c, 0x0dd5,
-	0xa867, 0x010d, 0x9006, 0xa802, 0xa86a, 0xa88a, 0x2d18, 0xab8e,
-	0xa887, 0x0045, 0x2c00, 0xa892, 0x6038, 0xa8a2, 0x2360, 0x6024,
-	0xc0dd, 0x6026, 0x6010, 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x2004,
-	0x6354, 0xab7a, 0xa876, 0x9006, 0xa87e, 0xa882, 0xad9a, 0xae96,
-	0xa89f, 0x0001, 0x080c, 0x6c79, 0x2019, 0x0045, 0x6008, 0x2068,
-	0x080c, 0xe115, 0x2d00, 0x600a, 0x6023, 0x0006, 0x6003, 0x0007,
-	0x901e, 0x631a, 0x6342, 0x003e, 0x0038, 0x6043, 0x0000, 0x6003,
-	0x0007, 0x080c, 0xdf6e, 0x00ce, 0x00de, 0x009e, 0x0005, 0x9186,
-	0x0013, 0x1128, 0x6004, 0x9082, 0x0085, 0x2008, 0x00c2, 0x9186,
-	0x0027, 0x1178, 0x080c, 0x955f, 0x0036, 0x0096, 0x6014, 0x2048,
-	0x2019, 0x0004, 0x080c, 0xe530, 0x009e, 0x003e, 0x080c, 0x9664,
-	0x0005, 0x9186, 0x0014, 0x0d70, 0x080c, 0xaedd, 0x0005, 0xe746,
-	0xe744, 0xe744, 0xe744, 0xe744, 0xe744, 0xe746, 0xe744, 0xe744,
-	0xe744, 0xe744, 0xe744, 0xe744, 0x080c, 0x0dd5, 0x080c, 0x955f,
-	0x6003, 0x000c, 0x080c, 0x9664, 0x0005, 0x9182, 0x0092, 0x1220,
-	0x9182, 0x0085, 0x0208, 0x001a, 0x080c, 0xaedd, 0x0005, 0xe764,
-	0xe764, 0xe764, 0xe764, 0xe766, 0xe786, 0xe764, 0xe764, 0xe764,
-	0xe764, 0xe764, 0xe764, 0xe764, 0x080c, 0x0dd5, 0x00d6, 0x2c68,
-	0x080c, 0xadf1, 0x01b0, 0x6003, 0x0001, 0x6007, 0x001e, 0x2009,
-	0x026e, 0x210c, 0x613a, 0x2009, 0x026f, 0x210c, 0x613e, 0x600b,
-	0xffff, 0x6910, 0x6112, 0x6023, 0x0004, 0x080c, 0x90c7, 0x080c,
-	0x9664, 0x2d60, 0x080c, 0xae47, 0x00de, 0x0005, 0x080c, 0xae47,
-	0x0005, 0x00e6, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0ec,
-	0x00ee, 0x0005, 0x2009, 0x1867, 0x210c, 0xd1ec, 0x05b0, 0x6003,
-	0x0002, 0x6024, 0xc0e5, 0x6026, 0xd0cc, 0x0150, 0x2001, 0x1988,
-	0x2004, 0x6042, 0x2009, 0x1867, 0x210c, 0xd1f4, 0x1520, 0x00a0,
-	0x2009, 0x1867, 0x210c, 0xd1f4, 0x0128, 0x6024, 0xc0e4, 0x6026,
-	0x9006, 0x00d8, 0x2001, 0x1988, 0x200c, 0x2001, 0x1986, 0x2004,
-	0x9100, 0x9080, 0x000a, 0x6042, 0x6010, 0x00b6, 0x2058, 0xb8bc,
-	0x00be, 0x0008, 0x2104, 0x9005, 0x0118, 0x9088, 0x0003, 0x0cd0,
-	0x2c0a, 0x600f, 0x0000, 0x9085, 0x0001, 0x0005, 0x0016, 0x00c6,
-	0x00e6, 0x6154, 0xb8bc, 0x2060, 0x8cff, 0x0180, 0x84ff, 0x1118,
-	0x6054, 0x9106, 0x1138, 0x600c, 0x2072, 0x080c, 0x8689, 0x080c,
-	0xae47, 0x0010, 0x9cf0, 0x0003, 0x2e64, 0x0c70, 0x00ee, 0x00ce,
-	0x001e, 0x0005, 0x00d6, 0x00b6, 0x6010, 0x2058, 0xb8bc, 0x2068,
-	0x9005, 0x0130, 0x9c06, 0x0110, 0x680c, 0x0cd0, 0x600c, 0x680e,
-	0x00be, 0x00de, 0x0005, 0x0026, 0x0036, 0x0156, 0x2011, 0x182c,
-	0x2204, 0x9084, 0x00ff, 0x2019, 0x026e, 0x2334, 0x9636, 0x1508,
-	0x8318, 0x2334, 0x2204, 0x9084, 0xff00, 0x9636, 0x11d0, 0x2011,
-	0x0270, 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048, 0x2019, 0x000a,
-	0x080c, 0xbe03, 0x009e, 0x1168, 0x2011, 0x0274, 0x20a9, 0x0004,
-	0x6010, 0x0096, 0x2048, 0x2019, 0x0006, 0x080c, 0xbe03, 0x009e,
-	0x1100, 0x015e, 0x003e, 0x002e, 0x0005, 0x00e6, 0x2071, 0x1800,
-	0x080c, 0x5fae, 0x080c, 0x2f96, 0x00ee, 0x0005, 0x0096, 0x0026,
-	0x080c, 0x0fff, 0x090c, 0x0dd5, 0xa85c, 0x9080, 0x001a, 0x20a0,
-	0x20a9, 0x000c, 0xa860, 0x20e8, 0x9006, 0x4004, 0x9186, 0x0046,
-	0x1118, 0xa867, 0x0136, 0x0038, 0xa867, 0x0138, 0x9186, 0x0041,
-	0x0110, 0xa87b, 0x0001, 0x7038, 0x9084, 0xff00, 0x7240, 0x9294,
-	0xff00, 0x8007, 0x9215, 0xaa9a, 0x9186, 0x0046, 0x1168, 0x7038,
-	0x9084, 0x00ff, 0x723c, 0x9294, 0xff00, 0x9215, 0xaa9e, 0x723c,
-	0x9294, 0x00ff, 0xaaa2, 0x0060, 0x7040, 0x9084, 0x00ff, 0x7244,
-	0x9294, 0xff00, 0x9215, 0xaa9e, 0x7244, 0x9294, 0x00ff, 0xaaa2,
-	0x9186, 0x0046, 0x1118, 0x9e90, 0x0012, 0x0010, 0x9e90, 0x001a,
-	0x2204, 0x8007, 0xa8a6, 0x8210, 0x2204, 0x8007, 0xa8aa, 0x8210,
-	0x2204, 0x8007, 0xa8ae, 0x8210, 0x2204, 0x8007, 0xa8b2, 0x8210,
-	0x9186, 0x0046, 0x11b8, 0x9e90, 0x0016, 0x2204, 0x8007, 0xa8b6,
-	0x8210, 0x2204, 0x8007, 0xa8ba, 0x8210, 0x2204, 0x8007, 0xa8be,
-	0x8210, 0x2204, 0x8007, 0xa8c2, 0x8210, 0x2011, 0x0205, 0x2013,
-	0x0001, 0x00b0, 0x9e90, 0x001e, 0x2204, 0x8007, 0xa8b6, 0x8210,
-	0x2204, 0x8007, 0xa8ba, 0x2011, 0x0205, 0x2013, 0x0001, 0x2011,
-	0x0260, 0x2204, 0x8007, 0xa8be, 0x8210, 0x2204, 0x8007, 0xa8c2,
-	0x9186, 0x0046, 0x1118, 0x2011, 0x0262, 0x0010, 0x2011, 0x026a,
-	0x0146, 0x01d6, 0x0036, 0x20a9, 0x0001, 0x2019, 0x0008, 0xa860,
-	0x20e8, 0xa85c, 0x9080, 0x0031, 0x20a0, 0x2204, 0x8007, 0x4004,
-	0x8210, 0x8319, 0x1dd0, 0x003e, 0x01ce, 0x013e, 0x2011, 0x0205,
-	0x2013, 0x0000, 0x002e, 0x080c, 0x6c79, 0x009e, 0x0005, 0x00e6,
-	0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0fc, 0x0108, 0x0011,
-	0x00ee, 0x0005, 0xa880, 0xc0e5, 0xa882, 0x0005, 0x00e6, 0x00d6,
-	0x00c6, 0x0076, 0x0066, 0x0056, 0x0046, 0x0026, 0x0016, 0x0126,
-	0x2091, 0x8000, 0x2029, 0x19f0, 0x252c, 0x2021, 0x19f6, 0x2424,
-	0x2061, 0x1cd0, 0x2071, 0x1800, 0x7654, 0x7074, 0x9606, 0x0578,
-	0x6720, 0x9786, 0x0001, 0x0118, 0x9786, 0x0008, 0x1500, 0x2500,
-	0x9c06, 0x01e8, 0x2400, 0x9c06, 0x01d0, 0x080c, 0xe5be, 0x01b8,
-	0x080c, 0xe5ce, 0x11a0, 0x6000, 0x9086, 0x0004, 0x1120, 0x0016,
-	0x080c, 0x1a5e, 0x001e, 0x080c, 0xcd10, 0x1110, 0x080c, 0x31e1,
-	0x080c, 0xcd21, 0x1110, 0x080c, 0xb7f9, 0x080c, 0xae78, 0x9ce0,
-	0x0018, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1208, 0x0858, 0x012e,
-	0x001e, 0x002e, 0x004e, 0x005e, 0x006e, 0x007e, 0x00ce, 0x00de,
-	0x00ee, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0dc, 0x0005, 0x0006,
-	0x2001, 0x1837, 0x2004, 0xd09c, 0x000e, 0x0005, 0x0006, 0x0036,
-	0x0046, 0x080c, 0xd216, 0x0168, 0x2019, 0xffff, 0x9005, 0x0128,
-	0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, 0x0004, 0x080c,
-	0x4cbc, 0x004e, 0x003e, 0x000e, 0x6004, 0x9086, 0x0001, 0x1128,
-	0x080c, 0xa7ee, 0x080c, 0xae78, 0x9006, 0x0005, 0x00e6, 0x00c6,
-	0x00b6, 0x0046, 0x2061, 0x1cd0, 0x2071, 0x1800, 0x7454, 0x7074,
-	0x8001, 0x9402, 0x12b8, 0x2100, 0x9c06, 0x0148, 0x6000, 0x9086,
-	0x0000, 0x0128, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x0140, 0x9ce0,
-	0x0018, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1220, 0x0c60, 0x9085,
-	0x0001, 0x0008, 0x9006, 0x004e, 0x00be, 0x00ce, 0x00ee, 0x0005,
-	0x0126, 0x0006, 0x00e6, 0x0016, 0x2091, 0x8000, 0x2071, 0x1840,
-	0xd5a4, 0x0118, 0x7004, 0x8000, 0x7006, 0xd5b4, 0x0118, 0x7000,
-	0x8000, 0x7002, 0xd5ac, 0x0178, 0x2500, 0x9084, 0x0007, 0x908e,
-	0x0003, 0x0148, 0x908e, 0x0004, 0x0130, 0x908e, 0x0005, 0x0118,
-	0x2071, 0xfffe, 0x0089, 0x001e, 0x00ee, 0x000e, 0x012e, 0x0005,
-	0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071, 0xfff6, 0x0021,
-	0x00ee, 0x000e, 0x012e, 0x0005, 0x2e05, 0x8000, 0x2077, 0x1220,
-	0x8e70, 0x2e05, 0x8000, 0x2077, 0x0005, 0x00e6, 0x2071, 0xfff4,
-	0x0c99, 0x00ee, 0x0005, 0x00e6, 0x2071, 0xfff8, 0x0c69, 0x00ee,
-	0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071, 0x1840,
-	0x7014, 0x8000, 0x7016, 0x00ee, 0x000e, 0x012e, 0x0005, 0x0003,
-	0x000b, 0x079e, 0x0000, 0xc000, 0x0001, 0x8064, 0x0008, 0x0010,
-	0x0000, 0x8066, 0x0000, 0x0101, 0x0008, 0x4407, 0x0003, 0x8060,
-	0x0000, 0x0400, 0x0000, 0x580d, 0x000b, 0x79a8, 0x000b, 0x50ee,
-	0x000b, 0x4c0a, 0x0003, 0xbac0, 0x0009, 0x008a, 0x0000, 0x0c0a,
-	0x000b, 0x15fe, 0x0008, 0x340a, 0x0003, 0xc4c0, 0x0009, 0x7000,
-	0x0000, 0xffa0, 0x0001, 0x2000, 0x0000, 0x1668, 0x000b, 0x808c,
-	0x0008, 0x0001, 0x0000, 0x0000, 0x0007, 0x4028, 0x0000, 0x4047,
-	0x000a, 0x808c, 0x0008, 0x0002, 0x0000, 0x0822, 0x0003, 0x4022,
-	0x0000, 0x0028, 0x000b, 0x4122, 0x0008, 0x94c0, 0x0009, 0xff00,
-	0x0008, 0xffe0, 0x0009, 0x0500, 0x0008, 0x0a93, 0x000b, 0x4447,
-	0x0002, 0x0e90, 0x0003, 0x0bfe, 0x0008, 0x11a0, 0x0001, 0x126e,
-	0x0003, 0x0ca0, 0x0001, 0x126e, 0x0003, 0x9180, 0x0001, 0x0004,
-	0x0000, 0x8060, 0x0000, 0x0400, 0x0000, 0x7f62, 0x0008, 0x8066,
-	0x0000, 0x0009, 0x0008, 0x4436, 0x000b, 0x808c, 0x0008, 0x0000,
-	0x0008, 0x0060, 0x0008, 0x8062, 0x0008, 0x0004, 0x0000, 0x8066,
-	0x0000, 0x0411, 0x0000, 0x443e, 0x0003, 0x03fe, 0x0000, 0x43e0,
-	0x0001, 0x0e6b, 0x000b, 0xc2c0, 0x0009, 0x00ff, 0x0008, 0x02e0,
-	0x0001, 0x0e6b, 0x000b, 0x9180, 0x0001, 0x0005, 0x0008, 0x8060,
-	0x0000, 0x0400, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0019,
-	0x0000, 0x444d, 0x000b, 0x0240, 0x0002, 0x0a68, 0x0003, 0x00fe,
-	0x0000, 0x326b, 0x000b, 0x0248, 0x000a, 0x085c, 0x0003, 0x9180,
-	0x0001, 0x0006, 0x0008, 0x7f62, 0x0008, 0x8002, 0x0008, 0x0003,
-	0x0008, 0x8066, 0x0000, 0x020a, 0x0000, 0x445b, 0x0003, 0x112a,
-	0x0000, 0x002e, 0x0008, 0x022c, 0x0008, 0x3a44, 0x0002, 0x0c0a,
-	0x000b, 0x808c, 0x0008, 0x0002, 0x0000, 0x1760, 0x0008, 0x8062,
-	0x0008, 0x000f, 0x0008, 0x8066, 0x0000, 0x0011, 0x0008, 0x4468,
-	0x0003, 0x01fe, 0x0008, 0x42e0, 0x0009, 0x0e5c, 0x0003, 0x00fe,
-	0x0000, 0x43e0, 0x0001, 0x0e5c, 0x0003, 0x1734, 0x0000, 0x1530,
-	0x0000, 0x1632, 0x0008, 0x0d2a, 0x0008, 0x9880, 0x0001, 0x0010,
-	0x0000, 0x8060, 0x0000, 0x0400, 0x0000, 0x7f62, 0x0008, 0x8066,
-	0x0000, 0x1e0a, 0x0008, 0x447a, 0x0003, 0x808a, 0x0008, 0x0003,
-	0x0008, 0x1a60, 0x0000, 0x8062, 0x0008, 0x0002, 0x0000, 0x5880,
-	0x000b, 0x8066, 0x0000, 0x3679, 0x0000, 0x4483, 0x0003, 0x5884,
-	0x0003, 0x3efe, 0x0008, 0x7f4f, 0x0002, 0x088a, 0x000b, 0x0d00,
-	0x0000, 0x0092, 0x000c, 0x8054, 0x0008, 0x0011, 0x0008, 0x8074,
-	0x0000, 0x1010, 0x0008, 0x1efe, 0x0000, 0x300a, 0x000b, 0x00c8,
-	0x000c, 0x000a, 0x000b, 0x00fe, 0x0000, 0x349a, 0x0003, 0x1a60,
-	0x0000, 0x8062, 0x0008, 0x0007, 0x0000, 0x8066, 0x0000, 0x0231,
-	0x0008, 0x4499, 0x000b, 0x03fe, 0x0000, 0x04d0, 0x0001, 0x0cc0,
-	0x000b, 0x82c0, 0x0001, 0x1f00, 0x0000, 0xffa0, 0x0001, 0x0400,
-	0x0000, 0x08af, 0x0003, 0x14c0, 0x000b, 0x01fe, 0x0008, 0x0580,
-	0x0009, 0x7f06, 0x0000, 0x02fe, 0x0008, 0xffc0, 0x0001, 0x00ff,
-	0x0008, 0x0690, 0x0001, 0x10af, 0x0003, 0x7f08, 0x0008, 0x84c0,
-	0x0001, 0xff00, 0x0008, 0x08c0, 0x0003, 0x00fe, 0x0000, 0x34b6,
-	0x000b, 0x8072, 0x0000, 0x1010, 0x0008, 0x3944, 0x0002, 0x08b1,
-	0x0003, 0x00ba, 0x0003, 0x8072, 0x0000, 0x2020, 0x0008, 0x3945,
-	0x000a, 0x08b6, 0x000b, 0x3946, 0x000a, 0x0cc7, 0x0003, 0x0000,
-	0x0007, 0x3943, 0x000a, 0x08c7, 0x000b, 0x00ba, 0x0003, 0x00fe,
-	0x0000, 0x34c5, 0x0003, 0x8072, 0x0000, 0x1000, 0x0000, 0x00c7,
-	0x0003, 0x8072, 0x0000, 0x2000, 0x0000, 0x4000, 0x000f, 0x1c60,
-	0x0000, 0x1b62, 0x0000, 0x8066, 0x0000, 0x0231, 0x0008, 0x44cc,
-	0x000b, 0x58cd, 0x000b, 0x0140, 0x0008, 0x0242, 0x0000, 0x1f43,
-	0x0002, 0x0cdb, 0x000b, 0x0d44, 0x0000, 0x0d46, 0x0008, 0x0348,
-	0x0008, 0x044a, 0x0008, 0x030a, 0x0008, 0x040c, 0x0000, 0x0d06,
-	0x0000, 0x0d08, 0x0008, 0x00df, 0x0003, 0x0344, 0x0008, 0x0446,
-	0x0008, 0x0548, 0x0008, 0x064a, 0x0000, 0x1948, 0x000a, 0x08e2,
-	0x0003, 0x0d4a, 0x0008, 0x58e2, 0x0003, 0x3efe, 0x0008, 0x7f4f,
-	0x0002, 0x08e9, 0x000b, 0x8000, 0x0000, 0x0001, 0x0000, 0x0092,
-	0x000c, 0x8054, 0x0008, 0x0001, 0x0000, 0x8074, 0x0000, 0x2020,
-	0x0008, 0x4000, 0x000f, 0x3a40, 0x000a, 0x0c0d, 0x0003, 0x2b24,
-	0x0008, 0x2b24, 0x0008, 0x58f2, 0x000b, 0x8054, 0x0008, 0x0002,
-	0x0000, 0x1242, 0x0002, 0x0940, 0x0003, 0x3a45, 0x000a, 0x092f,
-	0x0003, 0x8072, 0x0000, 0x1000, 0x0000, 0x3945, 0x000a, 0x08ff,
-	0x0003, 0x8072, 0x0000, 0x3010, 0x0000, 0x1e10, 0x000a, 0x7f3c,
-	0x0000, 0x092a, 0x0003, 0x1d00, 0x0002, 0x7f3a, 0x0000, 0x0d60,
-	0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0009, 0x0008, 0x4508,
-	0x000b, 0x00fe, 0x0000, 0x3527, 0x000b, 0x1c60, 0x0000, 0x8062,
-	0x0008, 0x0001, 0x0000, 0x8066, 0x0000, 0x0009, 0x0008, 0x4510,
-	0x000b, 0x00fe, 0x0000, 0x3243, 0x000b, 0x0038, 0x0000, 0x0060,
-	0x0008, 0x8062, 0x0008, 0x0019, 0x0000, 0x8066, 0x0000, 0x0009,
-	0x0008, 0x4519, 0x000b, 0x80c0, 0x0009, 0x00ff, 0x0008, 0x7f3e,
-	0x0008, 0x0d60, 0x0000, 0x0efe, 0x0008, 0x1f80, 0x0001, 0x7f62,
-	0x0008, 0x8066, 0x0000, 0x0009, 0x0008, 0x4523, 0x000b, 0x003a,
-	0x0008, 0x1dfe, 0x0000, 0x0104, 0x000b, 0x0036, 0x0008, 0x00c8,
-	0x000c, 0x0140, 0x000b, 0x8074, 0x0000, 0x2000, 0x0000, 0x8072,
-	0x0000, 0x2000, 0x0000, 0x0140, 0x000b, 0x3a44, 0x0002, 0x0a71,
-	0x000b, 0x8074, 0x0000, 0x1000, 0x0000, 0x8072, 0x0000, 0x1000,
-	0x0000, 0x2d0e, 0x0000, 0x2d0e, 0x0000, 0x3640, 0x0003, 0x26fe,
-	0x0008, 0x26fe, 0x0008, 0x2700, 0x0008, 0x2700, 0x0008, 0x00d0,
-	0x0009, 0x0d52, 0x000b, 0x8074, 0x0000, 0x4040, 0x0008, 0x5940,
-	0x0003, 0x50ee, 0x000b, 0x3a46, 0x000a, 0x0d52, 0x000b, 0x3a47,
-	0x0002, 0x094d, 0x000b, 0x8054, 0x0008, 0x0004, 0x0000, 0x8074,
-	0x0000, 0x8000, 0x0000, 0x8072, 0x0000, 0x3000, 0x0008, 0x019c,
-	0x0003, 0x92c0, 0x0009, 0x0fc8, 0x0000, 0x080a, 0x0003, 0x1246,
-	0x000a, 0x0e3a, 0x0003, 0x1a60, 0x0000, 0x8062, 0x0008, 0x0002,
-	0x0000, 0x8066, 0x0000, 0x362a, 0x0000, 0x4557, 0x000b, 0x2000,
-	0x0000, 0x2000, 0x0000, 0x2102, 0x0000, 0x2102, 0x0000, 0x2204,
-	0x0000, 0x2204, 0x0000, 0x2306, 0x0000, 0x2306, 0x0000, 0x2408,
-	0x0000, 0x2408, 0x0000, 0x250a, 0x0000, 0x250a, 0x0000, 0x260c,
-	0x0000, 0x260c, 0x0000, 0x270e, 0x0000, 0x270e, 0x0000, 0x2810,
-	0x0000, 0x2810, 0x0000, 0x2912, 0x0000, 0x2912, 0x0000, 0x1a60,
-	0x0000, 0x8062, 0x0008, 0x0007, 0x0000, 0x8066, 0x0000, 0x0052,
-	0x0000, 0x4571, 0x0003, 0x92c0, 0x0009, 0x0780, 0x0008, 0x0e56,
-	0x0003, 0x124b, 0x0002, 0x097a, 0x0003, 0x2e4d, 0x0002, 0x2e4d,
-	0x0002, 0x0a40, 0x0003, 0x3a46, 0x000a, 0x0d8a, 0x000b, 0x597c,
-	0x0003, 0x8054, 0x0008, 0x0004, 0x0000, 0x1243, 0x000a, 0x0998,
-	0x0003, 0x8010, 0x0008, 0x000d, 0x0000, 0x021b, 0x000c, 0x1948,
-	0x000a, 0x0987, 0x000b, 0x0210, 0x0004, 0x1810, 0x0000, 0x021b,
-	0x000c, 0x0198, 0x000b, 0x1948, 0x000a, 0x098e, 0x000b, 0x1243,
-	0x000a, 0x0a43, 0x0003, 0x194d, 0x000a, 0x0992, 0x0003, 0x1243,
-	0x000a, 0x0a4a, 0x0003, 0x5992, 0x0003, 0x8054, 0x0008, 0x0004,
-	0x0000, 0x0210, 0x0004, 0x1810, 0x0000, 0x021b, 0x000c, 0x8074,
-	0x0000, 0xf000, 0x0008, 0x8072, 0x0000, 0x3000, 0x0008, 0x0d30,
-	0x0000, 0x3a42, 0x0002, 0x0da2, 0x000b, 0x15fe, 0x0008, 0x3461,
-	0x000b, 0x000a, 0x000b, 0x8074, 0x0000, 0x0501, 0x0000, 0x8010,
-	0x0008, 0x000c, 0x0008, 0x021b, 0x000c, 0x000a, 0x000b, 0xbbe0,
-	0x0009, 0x0030, 0x0008, 0x0db8, 0x0003, 0x18fe, 0x0000, 0x3ce0,
-	0x0009, 0x09b5, 0x0003, 0x15fe, 0x0008, 0x3ce0, 0x0009, 0x09b5,
-	0x0003, 0x020b, 0x0004, 0x8076, 0x0008, 0x0040, 0x0000, 0x0208,
-	0x000b, 0x8076, 0x0008, 0x0041, 0x0008, 0x0208, 0x000b, 0xbbe0,
-	0x0009, 0x0032, 0x0000, 0x0dbd, 0x0003, 0x3c1e, 0x0008, 0x0208,
-	0x000b, 0xbbe0, 0x0009, 0x003b, 0x0000, 0x0dc2, 0x000b, 0x3c20,
-	0x0000, 0x0208, 0x000b, 0xbbe0, 0x0009, 0x0035, 0x0008, 0x0dc8,
-	0x000b, 0x8072, 0x0000, 0x8000, 0x0000, 0x0384, 0x000b, 0xbbe0,
-	0x0009, 0x0036, 0x0008, 0x0aa5, 0x000b, 0xbbe0, 0x0009, 0x0037,
-	0x0000, 0x0de9, 0x000b, 0x18fe, 0x0000, 0x3ce0, 0x0009, 0x0db5,
-	0x000b, 0x8076, 0x0008, 0x0040, 0x0000, 0x1a60, 0x0000, 0x8062,
-	0x0008, 0x000d, 0x0000, 0x2604, 0x0008, 0x2604, 0x0008, 0x2706,
-	0x0008, 0x2706, 0x0008, 0x2808, 0x0000, 0x2808, 0x0000, 0x290a,
-	0x0000, 0x290a, 0x0000, 0x8066, 0x0000, 0x0422, 0x0000, 0x45e0,
-	0x000b, 0x0210, 0x0004, 0x8054, 0x0008, 0x0004, 0x0000, 0x8074,
-	0x0000, 0xf000, 0x0008, 0x8072, 0x0000, 0xb000, 0x0000, 0x019c,
-	0x0003, 0xbbe0, 0x0009, 0x0038, 0x0000, 0x0dfb, 0x000b, 0x18fe,
-	0x0000, 0x3ce0, 0x0009, 0x09f8, 0x0003, 0x15fe, 0x0008, 0x3ce0,
-	0x0009, 0x0db1, 0x0003, 0x020b, 0x0004, 0x8076, 0x0008, 0x0040,
-	0x0000, 0x8072, 0x0000, 0x8000, 0x0000, 0x0268, 0x000b, 0x8076,
-	0x0008, 0x0042, 0x0008, 0x0208, 0x000b, 0xbbe0, 0x0009, 0x0016,
-	0x0000, 0x0e08, 0x000b, 0x8074, 0x0000, 0x0808, 0x0008, 0x3a44,
-	0x0002, 0x0c0c, 0x000b, 0x8074, 0x0000, 0x0800, 0x0000, 0x8072,
-	0x0000, 0x8000, 0x0000, 0x8000, 0x000f, 0x000a, 0x000b, 0x8072,
-	0x0000, 0x8000, 0x0000, 0x000a, 0x000b, 0x3d30, 0x000a, 0x7f00,
-	0x0000, 0xbc80, 0x0001, 0x0007, 0x0000, 0x0214, 0x0003, 0x1930,
-	0x000a, 0x7f00, 0x0000, 0x9880, 0x0001, 0x0007, 0x0000, 0x8060,
-	0x0000, 0x0400, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x000a,
-	0x0008, 0x4619, 0x000b, 0x4000, 0x000f, 0x221e, 0x000b, 0x0870,
-	0x0008, 0x4000, 0x000f, 0x7e1b, 0x000b, 0xbbe0, 0x0009, 0x0030,
-	0x0008, 0x0e1b, 0x0003, 0x18fe, 0x0000, 0x3ce0, 0x0009, 0x0a2c,
-	0x0003, 0x15fe, 0x0008, 0x3ce0, 0x0009, 0x0a2c, 0x0003, 0x020b,
-	0x0004, 0x8076, 0x0008, 0x0040, 0x0000, 0x022e, 0x0003, 0x8076,
-	0x0008, 0x0041, 0x0008, 0x8072, 0x0000, 0x8000, 0x0000, 0x021b,
-	0x0003, 0xbac0, 0x0009, 0x0090, 0x0008, 0x0a37, 0x0003, 0x8074,
-	0x0000, 0x0706, 0x0000, 0x0239, 0x0003, 0x8074, 0x0000, 0x0703,
-	0x0000, 0x4000, 0x000f, 0x8010, 0x0008, 0x0023, 0x0000, 0x0276,
-	0x000b, 0x8010, 0x0008, 0x0008, 0x0000, 0x0276, 0x000b, 0x8010,
-	0x0008, 0x0022, 0x0008, 0x0276, 0x000b, 0x0210, 0x0004, 0x8010,
-	0x0008, 0x0007, 0x0000, 0x021b, 0x000c, 0x1810, 0x0000, 0x021b,
-	0x000c, 0x0282, 0x0003, 0x0210, 0x0004, 0x8010, 0x0008, 0x001b,
-	0x0008, 0x021b, 0x000c, 0x1810, 0x0000, 0x021b, 0x000c, 0x8074,
-	0x0000, 0xf080, 0x0000, 0x8072, 0x0000, 0x3000, 0x0008, 0x0d30,
-	0x0000, 0x000a, 0x000b, 0x8010, 0x0008, 0x0009, 0x0008, 0x0276,
-	0x000b, 0x8010, 0x0008, 0x0005, 0x0008, 0x0276, 0x000b, 0x1648,
-	0x000a, 0x0c6f, 0x000b, 0x808c, 0x0008, 0x0001, 0x0000, 0x8010,
-	0x0008, 0x0004, 0x0000, 0x4143, 0x000a, 0x086f, 0x0003, 0x3a44,
-	0x0002, 0x0c0a, 0x000b, 0x0d2a, 0x0008, 0x0276, 0x000b, 0x8010,
-	0x0008, 0x0003, 0x0008, 0x027a, 0x000b, 0x8010, 0x0008, 0x000b,
-	0x0000, 0x027a, 0x000b, 0x8010, 0x0008, 0x0002, 0x0000, 0x027a,
-	0x000b, 0x3a47, 0x0002, 0x0d40, 0x000b, 0x8010, 0x0008, 0x0006,
-	0x0008, 0x027a, 0x000b, 0x8074, 0x0000, 0xf000, 0x0008, 0x8072,
-	0x0000, 0x3000, 0x0008, 0x021b, 0x000c, 0x0231, 0x0004, 0x3a40,
-	0x000a, 0x080a, 0x0003, 0x8010, 0x0008, 0x000c, 0x0008, 0x021b,
-	0x000c, 0x000a, 0x000b, 0x8074, 0x0000, 0xf080, 0x0000, 0x8072,
-	0x0000, 0x3000, 0x0008, 0x0d30, 0x0000, 0x2e4d, 0x0002, 0x2e4d,
-	0x0002, 0x0a8d, 0x000b, 0x8054, 0x0008, 0x0019, 0x0000, 0x000a,
-	0x000b, 0x8054, 0x0008, 0x0009, 0x0008, 0x000a, 0x000b, 0x3a44,
-	0x0002, 0x0c0a, 0x000b, 0x026b, 0x000b, 0x808c, 0x0008, 0x0000,
-	0x0008, 0x4447, 0x0002, 0x0ab9, 0x0003, 0xc0c0, 0x0001, 0x00ff,
-	0x0008, 0xffe0, 0x0009, 0x00ff, 0x0008, 0x0e90, 0x0003, 0xc1e0,
-	0x0001, 0xffff, 0x0008, 0x0e90, 0x0003, 0x8010, 0x0008, 0x0013,
-	0x0000, 0x021b, 0x000c, 0x8074, 0x0000, 0x0202, 0x0008, 0x000a,
-	0x000b, 0x3a40, 0x000a, 0x0eb6, 0x000b, 0x8074, 0x0000, 0x0200,
-	0x0000, 0x3d00, 0x0000, 0x3cfe, 0x0000, 0x8072, 0x0000, 0x8000,
-	0x0000, 0x43e0, 0x0001, 0x0eb4, 0x0003, 0x42fe, 0x0000, 0xffc0,
-	0x0001, 0x00ff, 0x0008, 0x00e0, 0x0009, 0x0a90, 0x000b, 0x0d08,
-	0x0008, 0x0309, 0x000b, 0x8072, 0x0000, 0x8000, 0x0000, 0x000a,
-	0x000b, 0x038d, 0x0004, 0x808c, 0x0008, 0x0001, 0x0000, 0x04fe,
-	0x0008, 0x3370, 0x0003, 0x0460, 0x0000, 0x8062, 0x0008, 0x0001,
-	0x0000, 0x8066, 0x0000, 0x0009, 0x0008, 0x46c3, 0x0003, 0x0004,
-	0x0000, 0x80c0, 0x0009, 0x00ff, 0x0008, 0x7f00, 0x0000, 0x80e0,
-	0x0001, 0x0004, 0x0000, 0x0add, 0x000b, 0x80e0, 0x0001, 0x0005,
-	0x0008, 0x0add, 0x000b, 0x80e0, 0x0001, 0x0006, 0x0008, 0x0add,
-	0x000b, 0x82c0, 0x0001, 0xff00, 0x0008, 0x7f04, 0x0008, 0x82e0,
-	0x0009, 0x0600, 0x0008, 0x0add, 0x000b, 0x82e0, 0x0009, 0x0500,
-	0x0008, 0x0add, 0x000b, 0x82e0, 0x0009, 0x0400, 0x0000, 0x0f70,
-	0x0003, 0xc4c0, 0x0009, 0x7000, 0x0000, 0xffe0, 0x0009, 0x1000,
-	0x0000, 0x0b09, 0x0003, 0x037e, 0x0004, 0x3941, 0x0002, 0x0ae8,
-	0x000b, 0x8072, 0x0000, 0x0400, 0x0000, 0x000a, 0x000b, 0x0460,
-	0x0000, 0x80fe, 0x0008, 0x002b, 0x0008, 0x7f62, 0x0008, 0x8066,
-	0x0000, 0x2209, 0x0008, 0x46ee, 0x0003, 0x11fe, 0x0000, 0x3304,
-	0x0003, 0x9180, 0x0001, 0x0002, 0x0000, 0x8060, 0x0000, 0x0400,
-	0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0609, 0x0008, 0x46f8,
-	0x000b, 0x42fe, 0x0000, 0xffc0, 0x0001, 0xff00, 0x0008, 0x03e0,
-	0x0009, 0x0f01, 0x0003, 0x8072, 0x0000, 0x0400, 0x0000, 0x0046,
-	0x0003, 0x9180, 0x0001, 0x0003, 0x0008, 0x02eb, 0x0003, 0x8072,
-	0x0000, 0x0400, 0x0000, 0x8010, 0x0008, 0x0010, 0x0000, 0x0361,
-	0x0003, 0x037e, 0x0004, 0x3941, 0x0002, 0x0b0f, 0x0003, 0x8072,
-	0x0000, 0x0400, 0x0000, 0x000a, 0x000b, 0x0346, 0x000c, 0x11fe,
-	0x0000, 0x0f17, 0x000b, 0x8072, 0x0000, 0x0400, 0x0000, 0x8010,
-	0x0008, 0x000e, 0x0000, 0x0361, 0x0003, 0x8060, 0x0000, 0x0400,
-	0x0000, 0x04fe, 0x0008, 0x0f2c, 0x0003, 0x808c, 0x0008, 0x0000,
-	0x0008, 0x9180, 0x0001, 0x0005, 0x0008, 0x7f62, 0x0008, 0x8066,
-	0x0000, 0x0009, 0x0008, 0x4722, 0x000b, 0x0060, 0x0008, 0x8062,
-	0x0008, 0x001b, 0x0008, 0x4304, 0x0008, 0x4206, 0x0008, 0x8066,
-	0x0000, 0x0412, 0x0000, 0x472a, 0x0003, 0x0343, 0x0003, 0x808c,
-	0x0008, 0x0001, 0x0000, 0x0460, 0x0000, 0x8062, 0x0008, 0x002b,
-	0x0008, 0x8066, 0x0000, 0x0609, 0x0008, 0x4733, 0x000b, 0x8066,
-	0x0000, 0x220a, 0x0008, 0x4736, 0x000b, 0x42fe, 0x0000, 0xffc0,
-	0x0001, 0xff00, 0x0008, 0x7f04, 0x0008, 0x8060, 0x0000, 0x0400,
-	0x0000, 0x9180, 0x0001, 0x0002, 0x0000, 0x7f62, 0x0008, 0x8066,
-	0x0000, 0x041a, 0x0008, 0x4742, 0x000b, 0x8072, 0x0000, 0x0400,
-	0x0000, 0x0046, 0x0003, 0x8060, 0x0000, 0x0400, 0x0000, 0x1362,
-	0x0008, 0x8066, 0x0000, 0x0411, 0x0000, 0x474b, 0x000b, 0x02fe,
-	0x0008, 0x03e0, 0x0009, 0x0f51, 0x0003, 0x0d22, 0x0000, 0x4000,
-	0x000f, 0x8280, 0x0009, 0x0002, 0x0000, 0x1380, 0x0001, 0x7f62,
-	0x0008, 0x8066, 0x0000, 0x2209, 0x0008, 0x4757, 0x0003, 0x0200,
-	0x000a, 0xffc0, 0x0001, 0x0007, 0x0000, 0x7f06, 0x0000, 0x1362,
-	0x0008, 0x8066, 0x0000, 0x060a, 0x0008, 0x475f, 0x000b, 0x4000,
-	0x000f, 0x3a44, 0x0002, 0x0c0a, 0x000b, 0x2f44, 0x000a, 0x2f44,
-	0x000a, 0x0e6b, 0x000b, 0x808a, 0x0008, 0x0003, 0x0008, 0x8074,
-	0x0000, 0xf080, 0x0000, 0x8072, 0x0000, 0x3000, 0x0008, 0x5b6c,
-	0x0003, 0x8054, 0x0008, 0x0019, 0x0000, 0x000a, 0x000b, 0x3a44,
-	0x0002, 0x0c0a, 0x000b, 0x808c, 0x0008, 0x0000, 0x0008, 0x8010,
-	0x0008, 0x0011, 0x0008, 0x021b, 0x000c, 0x42fe, 0x0000, 0xffc0,
-	0x0001, 0x00ff, 0x0008, 0x7f10, 0x0008, 0x021b, 0x000c, 0x4310,
-	0x0008, 0x027a, 0x000b, 0x3941, 0x0002, 0x0b81, 0x0003, 0x4000,
-	0x000f, 0x8072, 0x0000, 0x0404, 0x0008, 0x4000, 0x000f, 0x8010,
-	0x0008, 0x0012, 0x0008, 0x021b, 0x000c, 0x0346, 0x000c, 0x1110,
-	0x0000, 0x021b, 0x000c, 0x11fe, 0x0000, 0x0f87, 0x000b, 0x000a,
-	0x000b, 0xc2c0, 0x0009, 0x00ff, 0x0008, 0x7f00, 0x0000, 0xc3c0,
-	0x0001, 0xff00, 0x0008, 0x00d0, 0x0009, 0x0bb2, 0x0003, 0x0d0a,
-	0x0000, 0x8580, 0x0001, 0x1000, 0x0000, 0x7f62, 0x0008, 0x8060,
-	0x0000, 0x0400, 0x0000, 0x8066, 0x0000, 0x0809, 0x0000, 0x479c,
-	0x000b, 0x04fe, 0x0008, 0x33ab, 0x0003, 0x0460, 0x0000, 0x8062,
-	0x0008, 0x0004, 0x0000, 0x8066, 0x0000, 0x0211, 0x0000, 0x47a4,
-	0x0003, 0x01fe, 0x0008, 0x00e0, 0x0009, 0x0fab, 0x0003, 0x02fe,
-	0x0008, 0x43e0, 0x0001, 0x0bb1, 0x0003, 0x0500, 0x0002, 0x7f0a,
-	0x0000, 0xffe0, 0x0009, 0x0800, 0x0000, 0x0f95, 0x000b, 0x0d08,
-	0x0008, 0x4000, 0x000f, 0x43fe, 0x0008, 0x3e80, 0x0001, 0xffc0,
-	0x0001, 0x7fff, 0x0000, 0x0d60, 0x0000, 0x7f62, 0x0008, 0x8066,
-	0x0000, 0x0809, 0x0000, 0x47ba, 0x0003, 0x8060, 0x0000, 0x0400,
-	0x0000, 0x84c0, 0x0001, 0xff00, 0x0008, 0x7f60, 0x000a, 0x7f60,
-	0x000a, 0x7f60, 0x000a, 0x7f60, 0x000a, 0x7f60, 0x000a, 0x7f60,
-	0x000a, 0x7f60, 0x000a, 0x7f60, 0x000a, 0xff80, 0x0009, 0x1000,
-	0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0809, 0x0000, 0x47cc,
-	0x000b, 0x4000, 0x000f, 0xd7f4, 0xebe5, 0x0001, 0x0002, 0x0004,
-	0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100, 0x0200, 0x0400,
-	0x0800, 0x1000, 0x2000, 0x4000, 0x8000, 0x45cc
+	0x2128, 0x20a9, 0x007f, 0x900e, 0x0016, 0x0036, 0x080c, 0x65ff,
+	0x1190, 0x0056, 0x0086, 0x9046, 0x2508, 0x2029, 0x0001, 0x0096,
+	0x904e, 0x080c, 0xa69c, 0x009e, 0x008e, 0x903e, 0x080c, 0xa747,
+	0x080c, 0xe457, 0x005e, 0x003e, 0x001e, 0x8108, 0x1f04, 0xe4e4,
+	0x015e, 0x00ce, 0x007e, 0x005e, 0x004e, 0x00be, 0x0005, 0x00b6,
+	0x0076, 0x0056, 0x6210, 0x2258, 0x0086, 0x9046, 0x2029, 0x0001,
+	0x2019, 0x0048, 0x0096, 0x904e, 0x080c, 0xa69c, 0x009e, 0x008e,
+	0x903e, 0x080c, 0xa747, 0x2c20, 0x080c, 0xe457, 0x005e, 0x007e,
+	0x00be, 0x0005, 0x00b6, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156,
+	0x2c20, 0x20a9, 0x0800, 0x900e, 0x0016, 0x0036, 0x080c, 0x65ff,
+	0x11a0, 0x0086, 0x9046, 0x2828, 0x0046, 0x2021, 0x0001, 0x080c,
+	0xe7ef, 0x004e, 0x0096, 0x904e, 0x080c, 0xa69c, 0x009e, 0x008e,
+	0x903e, 0x080c, 0xa747, 0x080c, 0xe457, 0x003e, 0x001e, 0x8108,
+	0x1f04, 0xe52c, 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e, 0x00be,
+	0x0005, 0x0016, 0x00f6, 0x080c, 0xcb33, 0x0198, 0xa864, 0x9084,
+	0x00ff, 0x9086, 0x0046, 0x0180, 0xa800, 0x907d, 0x0138, 0xa803,
+	0x0000, 0xab82, 0x080c, 0x6c81, 0x2f48, 0x0cb0, 0xab82, 0x080c,
+	0x6c81, 0x00fe, 0x001e, 0x0005, 0xa800, 0x907d, 0x0130, 0xa803,
+	0x0000, 0x080c, 0x6c81, 0x2f48, 0x0cb8, 0x080c, 0x6c81, 0x0c88,
+	0x00e6, 0x0046, 0x0036, 0x2061, 0x1cd0, 0x9005, 0x1138, 0x2071,
+	0x1800, 0x7454, 0x7074, 0x8001, 0x9402, 0x12f8, 0x2100, 0x9c06,
+	0x0188, 0x6000, 0x9086, 0x0000, 0x0168, 0x6008, 0x9206, 0x1150,
+	0x6320, 0x9386, 0x0009, 0x01b0, 0x6010, 0x91a0, 0x0004, 0x2424,
+	0x9406, 0x0140, 0x9ce0, 0x0018, 0x2001, 0x181a, 0x2004, 0x9c02,
+	0x1220, 0x0c20, 0x9085, 0x0001, 0x0008, 0x9006, 0x003e, 0x004e,
+	0x00ee, 0x0005, 0x631c, 0xd3c4, 0x1d68, 0x0c30, 0x0096, 0x0006,
+	0x080c, 0x0fff, 0x000e, 0x090c, 0x0dd5, 0xaae2, 0xa867, 0x010d,
+	0xa88e, 0x0026, 0x2010, 0x080c, 0xcb23, 0x2001, 0x0000, 0x0120,
+	0x2200, 0x9080, 0x0015, 0x2004, 0x002e, 0xa87a, 0x9186, 0x0020,
+	0x0110, 0xa8e3, 0xffff, 0xa986, 0xac76, 0xa87f, 0x0000, 0x2001,
+	0x198e, 0x2004, 0xa882, 0x9006, 0xa802, 0xa86a, 0xa88a, 0x0126,
+	0x2091, 0x8000, 0x080c, 0x6c81, 0x012e, 0x009e, 0x0005, 0x6700,
+	0x9786, 0x0000, 0x0158, 0x9786, 0x0001, 0x0140, 0x9786, 0x000a,
+	0x0128, 0x9786, 0x0009, 0x0110, 0x9085, 0x0001, 0x0005, 0x00e6,
+	0x6010, 0x9075, 0x0138, 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x9206,
+	0x00ee, 0x0005, 0x9085, 0x0001, 0x0cd8, 0x0016, 0x6004, 0x908e,
+	0x001e, 0x11a0, 0x8007, 0x6134, 0x918c, 0x00ff, 0x9105, 0x6036,
+	0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0005, 0x2001, 0x1987,
+	0x2004, 0x601a, 0x080c, 0x90f0, 0x080c, 0x968d, 0x001e, 0x0005,
+	0xa001, 0xa001, 0x0005, 0x6024, 0xd0e4, 0x0158, 0xd0cc, 0x0118,
+	0x080c, 0xce68, 0x0030, 0x080c, 0xe80b, 0x080c, 0x86b2, 0x080c,
+	0xae61, 0x0005, 0x9280, 0x0008, 0x2004, 0x9084, 0x000f, 0x0002,
+	0xe63e, 0xe63e, 0xe63e, 0xe640, 0xe63e, 0xe640, 0xe640, 0xe63e,
+	0xe640, 0xe63e, 0xe63e, 0xe63e, 0xe63e, 0xe63e, 0x9006, 0x0005,
+	0x9085, 0x0001, 0x0005, 0x9280, 0x0008, 0x2004, 0x9084, 0x000f,
+	0x0002, 0xe657, 0xe657, 0xe657, 0xe657, 0xe657, 0xe657, 0xe664,
+	0xe657, 0xe657, 0xe657, 0xe657, 0xe657, 0xe657, 0xe657, 0x6007,
+	0x003b, 0x602f, 0x0009, 0x6017, 0x2a00, 0x6003, 0x0001, 0x080c,
+	0x90f0, 0x080c, 0x968d, 0x0005, 0x0096, 0x00c6, 0x2260, 0x080c,
+	0xe80b, 0x6043, 0x0000, 0x6024, 0xc0f4, 0xc0e4, 0x6026, 0x603b,
+	0x0000, 0x00ce, 0x00d6, 0x2268, 0x9186, 0x0007, 0x1904, 0xe6bd,
+	0x6814, 0x9005, 0x0138, 0x2048, 0xa87c, 0xd0fc, 0x1118, 0x00de,
+	0x009e, 0x08a8, 0x6007, 0x003a, 0x6003, 0x0001, 0x080c, 0x90f0,
+	0x080c, 0x968d, 0x00c6, 0x2d60, 0x6100, 0x9186, 0x0002, 0x1904,
+	0xe734, 0x6014, 0x9005, 0x1138, 0x6000, 0x9086, 0x0007, 0x190c,
+	0x0dd5, 0x0804, 0xe734, 0x2048, 0x080c, 0xcb35, 0x1130, 0x0028,
+	0x2048, 0xa800, 0x9005, 0x1de0, 0x2900, 0x2048, 0xa87c, 0x9084,
+	0x0003, 0x9086, 0x0002, 0x1168, 0xa87c, 0xc0dc, 0xc0f4, 0xa87e,
+	0xa880, 0xc0fc, 0xa882, 0x2009, 0x0043, 0x080c, 0xdf8d, 0x0804,
+	0xe734, 0x2009, 0x0041, 0x0804, 0xe72e, 0x9186, 0x0005, 0x15a0,
+	0x6814, 0x2048, 0xa87c, 0xd0bc, 0x1120, 0x00de, 0x009e, 0x0804,
+	0xe657, 0xd0b4, 0x0128, 0xd0fc, 0x090c, 0x0dd5, 0x0804, 0xe678,
+	0x6007, 0x003a, 0x6003, 0x0001, 0x080c, 0x90f0, 0x080c, 0x968d,
+	0x00c6, 0x2d60, 0x6100, 0x9186, 0x0002, 0x0120, 0x9186, 0x0004,
+	0x1904, 0xe734, 0x6814, 0x2048, 0xa97c, 0xc1f4, 0xc1dc, 0xa97e,
+	0xa980, 0xc1fc, 0xc1bc, 0xa982, 0x00f6, 0x2c78, 0x080c, 0x1725,
+	0x00fe, 0x2009, 0x0042, 0x04d0, 0x0036, 0x080c, 0x0fff, 0x090c,
+	0x0dd5, 0xa867, 0x010d, 0x9006, 0xa802, 0xa86a, 0xa88a, 0x2d18,
+	0xab8e, 0xa887, 0x0045, 0x2c00, 0xa892, 0x6038, 0xa8a2, 0x2360,
+	0x6024, 0xc0dd, 0x6026, 0x6010, 0x00b6, 0x2058, 0xb8a0, 0x00be,
+	0x2004, 0x6354, 0xab7a, 0xa876, 0x9006, 0xa87e, 0xa882, 0xad9a,
+	0xae96, 0xa89f, 0x0001, 0x080c, 0x6c81, 0x2019, 0x0045, 0x6008,
+	0x2068, 0x080c, 0xe134, 0x2d00, 0x600a, 0x6023, 0x0006, 0x6003,
+	0x0007, 0x901e, 0x631a, 0x6342, 0x003e, 0x0038, 0x6043, 0x0000,
+	0x6003, 0x0007, 0x080c, 0xdf8d, 0x00ce, 0x00de, 0x009e, 0x0005,
+	0x9186, 0x0013, 0x1128, 0x6004, 0x9082, 0x0085, 0x2008, 0x00c2,
+	0x9186, 0x0027, 0x1178, 0x080c, 0x9588, 0x0036, 0x0096, 0x6014,
+	0x2048, 0x2019, 0x0004, 0x080c, 0xe551, 0x009e, 0x003e, 0x080c,
+	0x968d, 0x0005, 0x9186, 0x0014, 0x0d70, 0x080c, 0xaef7, 0x0005,
+	0xe767, 0xe765, 0xe765, 0xe765, 0xe765, 0xe765, 0xe767, 0xe765,
+	0xe765, 0xe765, 0xe765, 0xe765, 0xe765, 0x080c, 0x0dd5, 0x080c,
+	0x9588, 0x6003, 0x000c, 0x080c, 0x968d, 0x0005, 0x9182, 0x0092,
+	0x1220, 0x9182, 0x0085, 0x0208, 0x001a, 0x080c, 0xaef7, 0x0005,
+	0xe785, 0xe785, 0xe785, 0xe785, 0xe787, 0xe7a7, 0xe785, 0xe785,
+	0xe785, 0xe785, 0xe785, 0xe785, 0xe785, 0x080c, 0x0dd5, 0x00d6,
+	0x2c68, 0x080c, 0xae0b, 0x01b0, 0x6003, 0x0001, 0x6007, 0x001e,
+	0x2009, 0x026e, 0x210c, 0x613a, 0x2009, 0x026f, 0x210c, 0x613e,
+	0x600b, 0xffff, 0x6910, 0x6112, 0x6023, 0x0004, 0x080c, 0x90f0,
+	0x080c, 0x968d, 0x2d60, 0x080c, 0xae61, 0x00de, 0x0005, 0x080c,
+	0xae61, 0x0005, 0x00e6, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be,
+	0xd0ec, 0x00ee, 0x0005, 0x2009, 0x1867, 0x210c, 0xd1ec, 0x05b0,
+	0x6003, 0x0002, 0x6024, 0xc0e5, 0x6026, 0xd0cc, 0x0150, 0x2001,
+	0x1988, 0x2004, 0x6042, 0x2009, 0x1867, 0x210c, 0xd1f4, 0x1520,
+	0x00a0, 0x2009, 0x1867, 0x210c, 0xd1f4, 0x0128, 0x6024, 0xc0e4,
+	0x6026, 0x9006, 0x00d8, 0x2001, 0x1988, 0x200c, 0x2001, 0x1986,
+	0x2004, 0x9100, 0x9080, 0x000a, 0x6042, 0x6010, 0x00b6, 0x2058,
+	0xb8bc, 0x00be, 0x0008, 0x2104, 0x9005, 0x0118, 0x9088, 0x0003,
+	0x0cd0, 0x2c0a, 0x600f, 0x0000, 0x9085, 0x0001, 0x0005, 0x0016,
+	0x00c6, 0x00e6, 0x6154, 0xb8bc, 0x2060, 0x8cff, 0x0180, 0x84ff,
+	0x1118, 0x6054, 0x9106, 0x1138, 0x600c, 0x2072, 0x080c, 0x86b2,
+	0x080c, 0xae61, 0x0010, 0x9cf0, 0x0003, 0x2e64, 0x0c70, 0x00ee,
+	0x00ce, 0x001e, 0x0005, 0x00d6, 0x00b6, 0x6010, 0x2058, 0xb8bc,
+	0x2068, 0x9005, 0x0130, 0x9c06, 0x0110, 0x680c, 0x0cd0, 0x600c,
+	0x680e, 0x00be, 0x00de, 0x0005, 0x0026, 0x0036, 0x0156, 0x2011,
+	0x182c, 0x2204, 0x9084, 0x00ff, 0x2019, 0x026e, 0x2334, 0x9636,
+	0x1508, 0x8318, 0x2334, 0x2204, 0x9084, 0xff00, 0x9636, 0x11d0,
+	0x2011, 0x0270, 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048, 0x2019,
+	0x000a, 0x080c, 0xbe1d, 0x009e, 0x1168, 0x2011, 0x0274, 0x20a9,
+	0x0004, 0x6010, 0x0096, 0x2048, 0x2019, 0x0006, 0x080c, 0xbe1d,
+	0x009e, 0x1100, 0x015e, 0x003e, 0x002e, 0x0005, 0x00e6, 0x2071,
+	0x1800, 0x080c, 0x5fad, 0x080c, 0x2f96, 0x00ee, 0x0005, 0x0096,
+	0x0026, 0x080c, 0x0fff, 0x090c, 0x0dd5, 0xa85c, 0x9080, 0x001a,
+	0x20a0, 0x20a9, 0x000c, 0xa860, 0x20e8, 0x9006, 0x4004, 0x9186,
+	0x0046, 0x1118, 0xa867, 0x0136, 0x0038, 0xa867, 0x0138, 0x9186,
+	0x0041, 0x0110, 0xa87b, 0x0001, 0x7038, 0x9084, 0xff00, 0x7240,
+	0x9294, 0xff00, 0x8007, 0x9215, 0xaa9a, 0x9186, 0x0046, 0x1168,
+	0x7038, 0x9084, 0x00ff, 0x723c, 0x9294, 0xff00, 0x9215, 0xaa9e,
+	0x723c, 0x9294, 0x00ff, 0xaaa2, 0x0060, 0x7040, 0x9084, 0x00ff,
+	0x7244, 0x9294, 0xff00, 0x9215, 0xaa9e, 0x7244, 0x9294, 0x00ff,
+	0xaaa2, 0x9186, 0x0046, 0x1118, 0x9e90, 0x0012, 0x0010, 0x9e90,
+	0x001a, 0x2204, 0x8007, 0xa8a6, 0x8210, 0x2204, 0x8007, 0xa8aa,
+	0x8210, 0x2204, 0x8007, 0xa8ae, 0x8210, 0x2204, 0x8007, 0xa8b2,
+	0x8210, 0x9186, 0x0046, 0x11b8, 0x9e90, 0x0016, 0x2204, 0x8007,
+	0xa8b6, 0x8210, 0x2204, 0x8007, 0xa8ba, 0x8210, 0x2204, 0x8007,
+	0xa8be, 0x8210, 0x2204, 0x8007, 0xa8c2, 0x8210, 0x2011, 0x0205,
+	0x2013, 0x0001, 0x00b0, 0x9e90, 0x001e, 0x2204, 0x8007, 0xa8b6,
+	0x8210, 0x2204, 0x8007, 0xa8ba, 0x2011, 0x0205, 0x2013, 0x0001,
+	0x2011, 0x0260, 0x2204, 0x8007, 0xa8be, 0x8210, 0x2204, 0x8007,
+	0xa8c2, 0x9186, 0x0046, 0x1118, 0x2011, 0x0262, 0x0010, 0x2011,
+	0x026a, 0x0146, 0x01d6, 0x0036, 0x20a9, 0x0001, 0x2019, 0x0008,
+	0xa860, 0x20e8, 0xa85c, 0x9080, 0x0031, 0x20a0, 0x2204, 0x8007,
+	0x4004, 0x8210, 0x8319, 0x1dd0, 0x003e, 0x01ce, 0x013e, 0x2011,
+	0x0205, 0x2013, 0x0000, 0x002e, 0x080c, 0x6c81, 0x009e, 0x0005,
+	0x00e6, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0fc, 0x0108,
+	0x0011, 0x00ee, 0x0005, 0xa880, 0xc0e5, 0xa882, 0x0005, 0x00e6,
+	0x00d6, 0x00c6, 0x0076, 0x0066, 0x0056, 0x0046, 0x0026, 0x0016,
+	0x0126, 0x2091, 0x8000, 0x2029, 0x19f0, 0x252c, 0x2021, 0x19f6,
+	0x2424, 0x2061, 0x1cd0, 0x2071, 0x1800, 0x7654, 0x7074, 0x9606,
+	0x0578, 0x6720, 0x9786, 0x0001, 0x0118, 0x9786, 0x0008, 0x1500,
+	0x2500, 0x9c06, 0x01e8, 0x2400, 0x9c06, 0x01d0, 0x080c, 0xe5df,
+	0x01b8, 0x080c, 0xe5ef, 0x11a0, 0x6000, 0x9086, 0x0004, 0x1120,
+	0x0016, 0x080c, 0x1a5e, 0x001e, 0x080c, 0xcd2a, 0x1110, 0x080c,
+	0x31e8, 0x080c, 0xcd3b, 0x1110, 0x080c, 0xb813, 0x080c, 0xae92,
+	0x9ce0, 0x0018, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1208, 0x0858,
+	0x012e, 0x001e, 0x002e, 0x004e, 0x005e, 0x006e, 0x007e, 0x00ce,
+	0x00de, 0x00ee, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0dc, 0x0005,
+	0x0006, 0x2001, 0x1837, 0x2004, 0xd09c, 0x000e, 0x0005, 0x0006,
+	0x0036, 0x0046, 0x080c, 0xd230, 0x0168, 0x2019, 0xffff, 0x9005,
+	0x0128, 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, 0x0004,
+	0x080c, 0x4cbb, 0x004e, 0x003e, 0x000e, 0x6004, 0x9086, 0x0001,
+	0x1128, 0x080c, 0xa808, 0x080c, 0xae92, 0x9006, 0x0005, 0x00e6,
+	0x00c6, 0x00b6, 0x0046, 0x2061, 0x1cd0, 0x2071, 0x1800, 0x7454,
+	0x7074, 0x8001, 0x9402, 0x12b8, 0x2100, 0x9c06, 0x0148, 0x6000,
+	0x9086, 0x0000, 0x0128, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x0140,
+	0x9ce0, 0x0018, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1220, 0x0c60,
+	0x9085, 0x0001, 0x0008, 0x9006, 0x004e, 0x00be, 0x00ce, 0x00ee,
+	0x0005, 0x0126, 0x0006, 0x00e6, 0x0016, 0x2091, 0x8000, 0x2071,
+	0x1840, 0xd5a4, 0x0118, 0x7004, 0x8000, 0x7006, 0xd5b4, 0x0118,
+	0x7000, 0x8000, 0x7002, 0xd5ac, 0x0178, 0x2500, 0x9084, 0x0007,
+	0x908e, 0x0003, 0x0148, 0x908e, 0x0004, 0x0130, 0x908e, 0x0005,
+	0x0118, 0x2071, 0xfffe, 0x0089, 0x001e, 0x00ee, 0x000e, 0x012e,
+	0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071, 0xfff6,
+	0x0021, 0x00ee, 0x000e, 0x012e, 0x0005, 0x2e05, 0x8000, 0x2077,
+	0x1220, 0x8e70, 0x2e05, 0x8000, 0x2077, 0x0005, 0x00e6, 0x2071,
+	0xfff4, 0x0c99, 0x00ee, 0x0005, 0x00e6, 0x2071, 0xfff8, 0x0c69,
+	0x00ee, 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071,
+	0x1840, 0x7014, 0x8000, 0x7016, 0x00ee, 0x000e, 0x012e, 0x0005,
+	0x0003, 0x000b, 0x079e, 0x0000, 0xc000, 0x0001, 0x8064, 0x0008,
+	0x0010, 0x0000, 0x8066, 0x0000, 0x0101, 0x0008, 0x4407, 0x0003,
+	0x8060, 0x0000, 0x0400, 0x0000, 0x580d, 0x000b, 0x79a8, 0x000b,
+	0x50ee, 0x000b, 0x4c0a, 0x0003, 0xbac0, 0x0009, 0x008a, 0x0000,
+	0x0c0a, 0x000b, 0x15fe, 0x0008, 0x340a, 0x0003, 0xc4c0, 0x0009,
+	0x7000, 0x0000, 0xffa0, 0x0001, 0x2000, 0x0000, 0x1668, 0x000b,
+	0x808c, 0x0008, 0x0001, 0x0000, 0x0000, 0x0007, 0x4028, 0x0000,
+	0x4047, 0x000a, 0x808c, 0x0008, 0x0002, 0x0000, 0x0822, 0x0003,
+	0x4022, 0x0000, 0x0028, 0x000b, 0x4122, 0x0008, 0x94c0, 0x0009,
+	0xff00, 0x0008, 0xffe0, 0x0009, 0x0500, 0x0008, 0x0a93, 0x000b,
+	0x4447, 0x0002, 0x0e90, 0x0003, 0x0bfe, 0x0008, 0x11a0, 0x0001,
+	0x126e, 0x0003, 0x0ca0, 0x0001, 0x126e, 0x0003, 0x9180, 0x0001,
+	0x0004, 0x0000, 0x8060, 0x0000, 0x0400, 0x0000, 0x7f62, 0x0008,
+	0x8066, 0x0000, 0x0009, 0x0008, 0x4436, 0x000b, 0x808c, 0x0008,
+	0x0000, 0x0008, 0x0060, 0x0008, 0x8062, 0x0008, 0x0004, 0x0000,
+	0x8066, 0x0000, 0x0411, 0x0000, 0x443e, 0x0003, 0x03fe, 0x0000,
+	0x43e0, 0x0001, 0x0e6b, 0x000b, 0xc2c0, 0x0009, 0x00ff, 0x0008,
+	0x02e0, 0x0001, 0x0e6b, 0x000b, 0x9180, 0x0001, 0x0005, 0x0008,
+	0x8060, 0x0000, 0x0400, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000,
+	0x0019, 0x0000, 0x444d, 0x000b, 0x0240, 0x0002, 0x0a68, 0x0003,
+	0x00fe, 0x0000, 0x326b, 0x000b, 0x0248, 0x000a, 0x085c, 0x0003,
+	0x9180, 0x0001, 0x0006, 0x0008, 0x7f62, 0x0008, 0x8002, 0x0008,
+	0x0003, 0x0008, 0x8066, 0x0000, 0x020a, 0x0000, 0x445b, 0x0003,
+	0x112a, 0x0000, 0x002e, 0x0008, 0x022c, 0x0008, 0x3a44, 0x0002,
+	0x0c0a, 0x000b, 0x808c, 0x0008, 0x0002, 0x0000, 0x1760, 0x0008,
+	0x8062, 0x0008, 0x000f, 0x0008, 0x8066, 0x0000, 0x0011, 0x0008,
+	0x4468, 0x0003, 0x01fe, 0x0008, 0x42e0, 0x0009, 0x0e5c, 0x0003,
+	0x00fe, 0x0000, 0x43e0, 0x0001, 0x0e5c, 0x0003, 0x1734, 0x0000,
+	0x1530, 0x0000, 0x1632, 0x0008, 0x0d2a, 0x0008, 0x9880, 0x0001,
+	0x0010, 0x0000, 0x8060, 0x0000, 0x0400, 0x0000, 0x7f62, 0x0008,
+	0x8066, 0x0000, 0x1e0a, 0x0008, 0x447a, 0x0003, 0x808a, 0x0008,
+	0x0003, 0x0008, 0x1a60, 0x0000, 0x8062, 0x0008, 0x0002, 0x0000,
+	0x5880, 0x000b, 0x8066, 0x0000, 0x3679, 0x0000, 0x4483, 0x0003,
+	0x5884, 0x0003, 0x3efe, 0x0008, 0x7f4f, 0x0002, 0x088a, 0x000b,
+	0x0d00, 0x0000, 0x0092, 0x000c, 0x8054, 0x0008, 0x0011, 0x0008,
+	0x8074, 0x0000, 0x1010, 0x0008, 0x1efe, 0x0000, 0x300a, 0x000b,
+	0x00c8, 0x000c, 0x000a, 0x000b, 0x00fe, 0x0000, 0x349a, 0x0003,
+	0x1a60, 0x0000, 0x8062, 0x0008, 0x0007, 0x0000, 0x8066, 0x0000,
+	0x0231, 0x0008, 0x4499, 0x000b, 0x03fe, 0x0000, 0x04d0, 0x0001,
+	0x0cc0, 0x000b, 0x82c0, 0x0001, 0x1f00, 0x0000, 0xffa0, 0x0001,
+	0x0400, 0x0000, 0x08af, 0x0003, 0x14c0, 0x000b, 0x01fe, 0x0008,
+	0x0580, 0x0009, 0x7f06, 0x0000, 0x02fe, 0x0008, 0xffc0, 0x0001,
+	0x00ff, 0x0008, 0x0690, 0x0001, 0x10af, 0x0003, 0x7f08, 0x0008,
+	0x84c0, 0x0001, 0xff00, 0x0008, 0x08c0, 0x0003, 0x00fe, 0x0000,
+	0x34b6, 0x000b, 0x8072, 0x0000, 0x1010, 0x0008, 0x3944, 0x0002,
+	0x08b1, 0x0003, 0x00ba, 0x0003, 0x8072, 0x0000, 0x2020, 0x0008,
+	0x3945, 0x000a, 0x08b6, 0x000b, 0x3946, 0x000a, 0x0cc7, 0x0003,
+	0x0000, 0x0007, 0x3943, 0x000a, 0x08c7, 0x000b, 0x00ba, 0x0003,
+	0x00fe, 0x0000, 0x34c5, 0x0003, 0x8072, 0x0000, 0x1000, 0x0000,
+	0x00c7, 0x0003, 0x8072, 0x0000, 0x2000, 0x0000, 0x4000, 0x000f,
+	0x1c60, 0x0000, 0x1b62, 0x0000, 0x8066, 0x0000, 0x0231, 0x0008,
+	0x44cc, 0x000b, 0x58cd, 0x000b, 0x0140, 0x0008, 0x0242, 0x0000,
+	0x1f43, 0x0002, 0x0cdb, 0x000b, 0x0d44, 0x0000, 0x0d46, 0x0008,
+	0x0348, 0x0008, 0x044a, 0x0008, 0x030a, 0x0008, 0x040c, 0x0000,
+	0x0d06, 0x0000, 0x0d08, 0x0008, 0x00df, 0x0003, 0x0344, 0x0008,
+	0x0446, 0x0008, 0x0548, 0x0008, 0x064a, 0x0000, 0x1948, 0x000a,
+	0x08e2, 0x0003, 0x0d4a, 0x0008, 0x58e2, 0x0003, 0x3efe, 0x0008,
+	0x7f4f, 0x0002, 0x08e9, 0x000b, 0x8000, 0x0000, 0x0001, 0x0000,
+	0x0092, 0x000c, 0x8054, 0x0008, 0x0001, 0x0000, 0x8074, 0x0000,
+	0x2020, 0x0008, 0x4000, 0x000f, 0x3a40, 0x000a, 0x0c0d, 0x0003,
+	0x2b24, 0x0008, 0x2b24, 0x0008, 0x58f2, 0x000b, 0x8054, 0x0008,
+	0x0002, 0x0000, 0x1242, 0x0002, 0x0940, 0x0003, 0x3a45, 0x000a,
+	0x092f, 0x0003, 0x8072, 0x0000, 0x1000, 0x0000, 0x3945, 0x000a,
+	0x08ff, 0x0003, 0x8072, 0x0000, 0x3010, 0x0000, 0x1e10, 0x000a,
+	0x7f3c, 0x0000, 0x092a, 0x0003, 0x1d00, 0x0002, 0x7f3a, 0x0000,
+	0x0d60, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0009, 0x0008,
+	0x4508, 0x000b, 0x00fe, 0x0000, 0x3527, 0x000b, 0x1c60, 0x0000,
+	0x8062, 0x0008, 0x0001, 0x0000, 0x8066, 0x0000, 0x0009, 0x0008,
+	0x4510, 0x000b, 0x00fe, 0x0000, 0x3243, 0x000b, 0x0038, 0x0000,
+	0x0060, 0x0008, 0x8062, 0x0008, 0x0019, 0x0000, 0x8066, 0x0000,
+	0x0009, 0x0008, 0x4519, 0x000b, 0x80c0, 0x0009, 0x00ff, 0x0008,
+	0x7f3e, 0x0008, 0x0d60, 0x0000, 0x0efe, 0x0008, 0x1f80, 0x0001,
+	0x7f62, 0x0008, 0x8066, 0x0000, 0x0009, 0x0008, 0x4523, 0x000b,
+	0x003a, 0x0008, 0x1dfe, 0x0000, 0x0104, 0x000b, 0x0036, 0x0008,
+	0x00c8, 0x000c, 0x0140, 0x000b, 0x8074, 0x0000, 0x2000, 0x0000,
+	0x8072, 0x0000, 0x2000, 0x0000, 0x0140, 0x000b, 0x3a44, 0x0002,
+	0x0a71, 0x000b, 0x8074, 0x0000, 0x1000, 0x0000, 0x8072, 0x0000,
+	0x1000, 0x0000, 0x2d0e, 0x0000, 0x2d0e, 0x0000, 0x3640, 0x0003,
+	0x26fe, 0x0008, 0x26fe, 0x0008, 0x2700, 0x0008, 0x2700, 0x0008,
+	0x00d0, 0x0009, 0x0d52, 0x000b, 0x8074, 0x0000, 0x4040, 0x0008,
+	0x5940, 0x0003, 0x50ee, 0x000b, 0x3a46, 0x000a, 0x0d52, 0x000b,
+	0x3a47, 0x0002, 0x094d, 0x000b, 0x8054, 0x0008, 0x0004, 0x0000,
+	0x8074, 0x0000, 0x8000, 0x0000, 0x8072, 0x0000, 0x3000, 0x0008,
+	0x019c, 0x0003, 0x92c0, 0x0009, 0x0fc8, 0x0000, 0x080a, 0x0003,
+	0x1246, 0x000a, 0x0e3a, 0x0003, 0x1a60, 0x0000, 0x8062, 0x0008,
+	0x0002, 0x0000, 0x8066, 0x0000, 0x362a, 0x0000, 0x4557, 0x000b,
+	0x2000, 0x0000, 0x2000, 0x0000, 0x2102, 0x0000, 0x2102, 0x0000,
+	0x2204, 0x0000, 0x2204, 0x0000, 0x2306, 0x0000, 0x2306, 0x0000,
+	0x2408, 0x0000, 0x2408, 0x0000, 0x250a, 0x0000, 0x250a, 0x0000,
+	0x260c, 0x0000, 0x260c, 0x0000, 0x270e, 0x0000, 0x270e, 0x0000,
+	0x2810, 0x0000, 0x2810, 0x0000, 0x2912, 0x0000, 0x2912, 0x0000,
+	0x1a60, 0x0000, 0x8062, 0x0008, 0x0007, 0x0000, 0x8066, 0x0000,
+	0x0052, 0x0000, 0x4571, 0x0003, 0x92c0, 0x0009, 0x0780, 0x0008,
+	0x0e56, 0x0003, 0x124b, 0x0002, 0x097a, 0x0003, 0x2e4d, 0x0002,
+	0x2e4d, 0x0002, 0x0a40, 0x0003, 0x3a46, 0x000a, 0x0d8a, 0x000b,
+	0x597c, 0x0003, 0x8054, 0x0008, 0x0004, 0x0000, 0x1243, 0x000a,
+	0x0998, 0x0003, 0x8010, 0x0008, 0x000d, 0x0000, 0x021b, 0x000c,
+	0x1948, 0x000a, 0x0987, 0x000b, 0x0210, 0x0004, 0x1810, 0x0000,
+	0x021b, 0x000c, 0x0198, 0x000b, 0x1948, 0x000a, 0x098e, 0x000b,
+	0x1243, 0x000a, 0x0a43, 0x0003, 0x194d, 0x000a, 0x0992, 0x0003,
+	0x1243, 0x000a, 0x0a4a, 0x0003, 0x5992, 0x0003, 0x8054, 0x0008,
+	0x0004, 0x0000, 0x0210, 0x0004, 0x1810, 0x0000, 0x021b, 0x000c,
+	0x8074, 0x0000, 0xf000, 0x0008, 0x8072, 0x0000, 0x3000, 0x0008,
+	0x0d30, 0x0000, 0x3a42, 0x0002, 0x0da2, 0x000b, 0x15fe, 0x0008,
+	0x3461, 0x000b, 0x000a, 0x000b, 0x8074, 0x0000, 0x0501, 0x0000,
+	0x8010, 0x0008, 0x000c, 0x0008, 0x021b, 0x000c, 0x000a, 0x000b,
+	0xbbe0, 0x0009, 0x0030, 0x0008, 0x0db8, 0x0003, 0x18fe, 0x0000,
+	0x3ce0, 0x0009, 0x09b5, 0x0003, 0x15fe, 0x0008, 0x3ce0, 0x0009,
+	0x09b5, 0x0003, 0x020b, 0x0004, 0x8076, 0x0008, 0x0040, 0x0000,
+	0x0208, 0x000b, 0x8076, 0x0008, 0x0041, 0x0008, 0x0208, 0x000b,
+	0xbbe0, 0x0009, 0x0032, 0x0000, 0x0dbd, 0x0003, 0x3c1e, 0x0008,
+	0x0208, 0x000b, 0xbbe0, 0x0009, 0x003b, 0x0000, 0x0dc2, 0x000b,
+	0x3c20, 0x0000, 0x0208, 0x000b, 0xbbe0, 0x0009, 0x0035, 0x0008,
+	0x0dc8, 0x000b, 0x8072, 0x0000, 0x8000, 0x0000, 0x0384, 0x000b,
+	0xbbe0, 0x0009, 0x0036, 0x0008, 0x0aa5, 0x000b, 0xbbe0, 0x0009,
+	0x0037, 0x0000, 0x0de9, 0x000b, 0x18fe, 0x0000, 0x3ce0, 0x0009,
+	0x0db5, 0x000b, 0x8076, 0x0008, 0x0040, 0x0000, 0x1a60, 0x0000,
+	0x8062, 0x0008, 0x000d, 0x0000, 0x2604, 0x0008, 0x2604, 0x0008,
+	0x2706, 0x0008, 0x2706, 0x0008, 0x2808, 0x0000, 0x2808, 0x0000,
+	0x290a, 0x0000, 0x290a, 0x0000, 0x8066, 0x0000, 0x0422, 0x0000,
+	0x45e0, 0x000b, 0x0210, 0x0004, 0x8054, 0x0008, 0x0004, 0x0000,
+	0x8074, 0x0000, 0xf000, 0x0008, 0x8072, 0x0000, 0xb000, 0x0000,
+	0x019c, 0x0003, 0xbbe0, 0x0009, 0x0038, 0x0000, 0x0dfb, 0x000b,
+	0x18fe, 0x0000, 0x3ce0, 0x0009, 0x09f8, 0x0003, 0x15fe, 0x0008,
+	0x3ce0, 0x0009, 0x0db1, 0x0003, 0x020b, 0x0004, 0x8076, 0x0008,
+	0x0040, 0x0000, 0x8072, 0x0000, 0x8000, 0x0000, 0x0268, 0x000b,
+	0x8076, 0x0008, 0x0042, 0x0008, 0x0208, 0x000b, 0xbbe0, 0x0009,
+	0x0016, 0x0000, 0x0e08, 0x000b, 0x8074, 0x0000, 0x0808, 0x0008,
+	0x3a44, 0x0002, 0x0c0c, 0x000b, 0x8074, 0x0000, 0x0800, 0x0000,
+	0x8072, 0x0000, 0x8000, 0x0000, 0x8000, 0x000f, 0x000a, 0x000b,
+	0x8072, 0x0000, 0x8000, 0x0000, 0x000a, 0x000b, 0x3d30, 0x000a,
+	0x7f00, 0x0000, 0xbc80, 0x0001, 0x0007, 0x0000, 0x0214, 0x0003,
+	0x1930, 0x000a, 0x7f00, 0x0000, 0x9880, 0x0001, 0x0007, 0x0000,
+	0x8060, 0x0000, 0x0400, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000,
+	0x000a, 0x0008, 0x4619, 0x000b, 0x4000, 0x000f, 0x221e, 0x000b,
+	0x0870, 0x0008, 0x4000, 0x000f, 0x7e1b, 0x000b, 0xbbe0, 0x0009,
+	0x0030, 0x0008, 0x0e1b, 0x0003, 0x18fe, 0x0000, 0x3ce0, 0x0009,
+	0x0a2c, 0x0003, 0x15fe, 0x0008, 0x3ce0, 0x0009, 0x0a2c, 0x0003,
+	0x020b, 0x0004, 0x8076, 0x0008, 0x0040, 0x0000, 0x022e, 0x0003,
+	0x8076, 0x0008, 0x0041, 0x0008, 0x8072, 0x0000, 0x8000, 0x0000,
+	0x021b, 0x0003, 0xbac0, 0x0009, 0x0090, 0x0008, 0x0a37, 0x0003,
+	0x8074, 0x0000, 0x0706, 0x0000, 0x0239, 0x0003, 0x8074, 0x0000,
+	0x0703, 0x0000, 0x4000, 0x000f, 0x8010, 0x0008, 0x0023, 0x0000,
+	0x0276, 0x000b, 0x8010, 0x0008, 0x0008, 0x0000, 0x0276, 0x000b,
+	0x8010, 0x0008, 0x0022, 0x0008, 0x0276, 0x000b, 0x0210, 0x0004,
+	0x8010, 0x0008, 0x0007, 0x0000, 0x021b, 0x000c, 0x1810, 0x0000,
+	0x021b, 0x000c, 0x0282, 0x0003, 0x0210, 0x0004, 0x8010, 0x0008,
+	0x001b, 0x0008, 0x021b, 0x000c, 0x1810, 0x0000, 0x021b, 0x000c,
+	0x8074, 0x0000, 0xf080, 0x0000, 0x8072, 0x0000, 0x3000, 0x0008,
+	0x0d30, 0x0000, 0x000a, 0x000b, 0x8010, 0x0008, 0x0009, 0x0008,
+	0x0276, 0x000b, 0x8010, 0x0008, 0x0005, 0x0008, 0x0276, 0x000b,
+	0x1648, 0x000a, 0x0c6f, 0x000b, 0x808c, 0x0008, 0x0001, 0x0000,
+	0x8010, 0x0008, 0x0004, 0x0000, 0x4143, 0x000a, 0x086f, 0x0003,
+	0x3a44, 0x0002, 0x0c0a, 0x000b, 0x0d2a, 0x0008, 0x0276, 0x000b,
+	0x8010, 0x0008, 0x0003, 0x0008, 0x027a, 0x000b, 0x8010, 0x0008,
+	0x000b, 0x0000, 0x027a, 0x000b, 0x8010, 0x0008, 0x0002, 0x0000,
+	0x027a, 0x000b, 0x3a47, 0x0002, 0x0d40, 0x000b, 0x8010, 0x0008,
+	0x0006, 0x0008, 0x027a, 0x000b, 0x8074, 0x0000, 0xf000, 0x0008,
+	0x8072, 0x0000, 0x3000, 0x0008, 0x021b, 0x000c, 0x0231, 0x0004,
+	0x3a40, 0x000a, 0x080a, 0x0003, 0x8010, 0x0008, 0x000c, 0x0008,
+	0x021b, 0x000c, 0x000a, 0x000b, 0x8074, 0x0000, 0xf080, 0x0000,
+	0x8072, 0x0000, 0x3000, 0x0008, 0x0d30, 0x0000, 0x2e4d, 0x0002,
+	0x2e4d, 0x0002, 0x0a8d, 0x000b, 0x8054, 0x0008, 0x0019, 0x0000,
+	0x000a, 0x000b, 0x8054, 0x0008, 0x0009, 0x0008, 0x000a, 0x000b,
+	0x3a44, 0x0002, 0x0c0a, 0x000b, 0x026b, 0x000b, 0x808c, 0x0008,
+	0x0000, 0x0008, 0x4447, 0x0002, 0x0ab9, 0x0003, 0xc0c0, 0x0001,
+	0x00ff, 0x0008, 0xffe0, 0x0009, 0x00ff, 0x0008, 0x0e90, 0x0003,
+	0xc1e0, 0x0001, 0xffff, 0x0008, 0x0e90, 0x0003, 0x8010, 0x0008,
+	0x0013, 0x0000, 0x021b, 0x000c, 0x8074, 0x0000, 0x0202, 0x0008,
+	0x000a, 0x000b, 0x3a40, 0x000a, 0x0eb6, 0x000b, 0x8074, 0x0000,
+	0x0200, 0x0000, 0x3d00, 0x0000, 0x3cfe, 0x0000, 0x8072, 0x0000,
+	0x8000, 0x0000, 0x43e0, 0x0001, 0x0eb4, 0x0003, 0x42fe, 0x0000,
+	0xffc0, 0x0001, 0x00ff, 0x0008, 0x00e0, 0x0009, 0x0a90, 0x000b,
+	0x0d08, 0x0008, 0x0309, 0x000b, 0x8072, 0x0000, 0x8000, 0x0000,
+	0x000a, 0x000b, 0x038d, 0x0004, 0x808c, 0x0008, 0x0001, 0x0000,
+	0x04fe, 0x0008, 0x3370, 0x0003, 0x0460, 0x0000, 0x8062, 0x0008,
+	0x0001, 0x0000, 0x8066, 0x0000, 0x0009, 0x0008, 0x46c3, 0x0003,
+	0x0004, 0x0000, 0x80c0, 0x0009, 0x00ff, 0x0008, 0x7f00, 0x0000,
+	0x80e0, 0x0001, 0x0004, 0x0000, 0x0add, 0x000b, 0x80e0, 0x0001,
+	0x0005, 0x0008, 0x0add, 0x000b, 0x80e0, 0x0001, 0x0006, 0x0008,
+	0x0add, 0x000b, 0x82c0, 0x0001, 0xff00, 0x0008, 0x7f04, 0x0008,
+	0x82e0, 0x0009, 0x0600, 0x0008, 0x0add, 0x000b, 0x82e0, 0x0009,
+	0x0500, 0x0008, 0x0add, 0x000b, 0x82e0, 0x0009, 0x0400, 0x0000,
+	0x0f70, 0x0003, 0xc4c0, 0x0009, 0x7000, 0x0000, 0xffe0, 0x0009,
+	0x1000, 0x0000, 0x0b09, 0x0003, 0x037e, 0x0004, 0x3941, 0x0002,
+	0x0ae8, 0x000b, 0x8072, 0x0000, 0x0400, 0x0000, 0x000a, 0x000b,
+	0x0460, 0x0000, 0x80fe, 0x0008, 0x002b, 0x0008, 0x7f62, 0x0008,
+	0x8066, 0x0000, 0x2209, 0x0008, 0x46ee, 0x0003, 0x11fe, 0x0000,
+	0x3304, 0x0003, 0x9180, 0x0001, 0x0002, 0x0000, 0x8060, 0x0000,
+	0x0400, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0609, 0x0008,
+	0x46f8, 0x000b, 0x42fe, 0x0000, 0xffc0, 0x0001, 0xff00, 0x0008,
+	0x03e0, 0x0009, 0x0f01, 0x0003, 0x8072, 0x0000, 0x0400, 0x0000,
+	0x0046, 0x0003, 0x9180, 0x0001, 0x0003, 0x0008, 0x02eb, 0x0003,
+	0x8072, 0x0000, 0x0400, 0x0000, 0x8010, 0x0008, 0x0010, 0x0000,
+	0x0361, 0x0003, 0x037e, 0x0004, 0x3941, 0x0002, 0x0b0f, 0x0003,
+	0x8072, 0x0000, 0x0400, 0x0000, 0x000a, 0x000b, 0x0346, 0x000c,
+	0x11fe, 0x0000, 0x3717, 0x0003, 0x8072, 0x0000, 0x0400, 0x0000,
+	0x8010, 0x0008, 0x000e, 0x0000, 0x0361, 0x0003, 0x8060, 0x0000,
+	0x0400, 0x0000, 0x04fe, 0x0008, 0x372c, 0x000b, 0x808c, 0x0008,
+	0x0000, 0x0008, 0x9180, 0x0001, 0x0005, 0x0008, 0x7f62, 0x0008,
+	0x8066, 0x0000, 0x0009, 0x0008, 0x4722, 0x000b, 0x0060, 0x0008,
+	0x8062, 0x0008, 0x001b, 0x0008, 0x4304, 0x0008, 0x4206, 0x0008,
+	0x8066, 0x0000, 0x0412, 0x0000, 0x472a, 0x0003, 0x0343, 0x0003,
+	0x808c, 0x0008, 0x0001, 0x0000, 0x0460, 0x0000, 0x8062, 0x0008,
+	0x002b, 0x0008, 0x8066, 0x0000, 0x0609, 0x0008, 0x4733, 0x000b,
+	0x8066, 0x0000, 0x220a, 0x0008, 0x4736, 0x000b, 0x42fe, 0x0000,
+	0xffc0, 0x0001, 0xff00, 0x0008, 0x7f04, 0x0008, 0x8060, 0x0000,
+	0x0400, 0x0000, 0x9180, 0x0001, 0x0002, 0x0000, 0x7f62, 0x0008,
+	0x8066, 0x0000, 0x041a, 0x0008, 0x4742, 0x000b, 0x8072, 0x0000,
+	0x0400, 0x0000, 0x0046, 0x0003, 0x8060, 0x0000, 0x0400, 0x0000,
+	0x1362, 0x0008, 0x8066, 0x0000, 0x0411, 0x0000, 0x474b, 0x000b,
+	0x02fe, 0x0008, 0x03e0, 0x0009, 0x0f51, 0x0003, 0x0d22, 0x0000,
+	0x4000, 0x000f, 0x8280, 0x0009, 0x0002, 0x0000, 0x1380, 0x0001,
+	0x7f62, 0x0008, 0x8066, 0x0000, 0x2209, 0x0008, 0x4757, 0x0003,
+	0x0200, 0x000a, 0xffc0, 0x0001, 0x0007, 0x0000, 0x7f06, 0x0000,
+	0x1362, 0x0008, 0x8066, 0x0000, 0x060a, 0x0008, 0x475f, 0x000b,
+	0x4000, 0x000f, 0x3a44, 0x0002, 0x0c0a, 0x000b, 0x2f44, 0x000a,
+	0x2f44, 0x000a, 0x0e6b, 0x000b, 0x808a, 0x0008, 0x0003, 0x0008,
+	0x8074, 0x0000, 0xf080, 0x0000, 0x8072, 0x0000, 0x3000, 0x0008,
+	0x5b6c, 0x0003, 0x8054, 0x0008, 0x0019, 0x0000, 0x000a, 0x000b,
+	0x3a44, 0x0002, 0x0c0a, 0x000b, 0x808c, 0x0008, 0x0000, 0x0008,
+	0x8010, 0x0008, 0x0011, 0x0008, 0x021b, 0x000c, 0x42fe, 0x0000,
+	0xffc0, 0x0001, 0x00ff, 0x0008, 0x7f10, 0x0008, 0x021b, 0x000c,
+	0x4310, 0x0008, 0x027a, 0x000b, 0x3941, 0x0002, 0x0b81, 0x0003,
+	0x4000, 0x000f, 0x8072, 0x0000, 0x0404, 0x0008, 0x4000, 0x000f,
+	0x8010, 0x0008, 0x0012, 0x0008, 0x021b, 0x000c, 0x0346, 0x000c,
+	0x1110, 0x0000, 0x021b, 0x000c, 0x11fe, 0x0000, 0x3787, 0x0003,
+	0x000a, 0x000b, 0xc2c0, 0x0009, 0x00ff, 0x0008, 0x7f00, 0x0000,
+	0xc3c0, 0x0001, 0xff00, 0x0008, 0x00d0, 0x0009, 0x0bb2, 0x0003,
+	0x0d0a, 0x0000, 0x8580, 0x0001, 0x1000, 0x0000, 0x7f62, 0x0008,
+	0x8060, 0x0000, 0x0400, 0x0000, 0x8066, 0x0000, 0x0809, 0x0000,
+	0x479c, 0x000b, 0x04fe, 0x0008, 0x33ab, 0x0003, 0x0460, 0x0000,
+	0x8062, 0x0008, 0x0004, 0x0000, 0x8066, 0x0000, 0x0211, 0x0000,
+	0x47a4, 0x0003, 0x01fe, 0x0008, 0x00e0, 0x0009, 0x0fab, 0x0003,
+	0x02fe, 0x0008, 0x43e0, 0x0001, 0x0bb1, 0x0003, 0x0500, 0x0002,
+	0x7f0a, 0x0000, 0xffe0, 0x0009, 0x0800, 0x0000, 0x0f95, 0x000b,
+	0x0d08, 0x0008, 0x4000, 0x000f, 0x43fe, 0x0008, 0x3e80, 0x0001,
+	0xffc0, 0x0001, 0x7fff, 0x0000, 0x0d60, 0x0000, 0x7f62, 0x0008,
+	0x8066, 0x0000, 0x0809, 0x0000, 0x47ba, 0x0003, 0x8060, 0x0000,
+	0x0400, 0x0000, 0x84c0, 0x0001, 0xff00, 0x0008, 0x7f60, 0x000a,
+	0x7f60, 0x000a, 0x7f60, 0x000a, 0x7f60, 0x000a, 0x7f60, 0x000a,
+	0x7f60, 0x000a, 0x7f60, 0x000a, 0x7f60, 0x000a, 0xff80, 0x0009,
+	0x1000, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0809, 0x0000,
+	0x47cc, 0x000b, 0x4000, 0x000f, 0x5ff4, 0xebed, 0x0001, 0x0002,
+	0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100, 0x0200,
+	0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000, 0x2c40
 };
 #ifdef UNIQUE_FW_NAME
-unsigned short fw2300ipx_length01 = 0xe9a6;
+unsigned short fw2300ipx_length01 = 0xe9c7;
 #else
-unsigned short risc_code_length01 = 0xe9a6;
+unsigned short risc_code_length01 = 0xe9c7;
 #endif
 
diff -Nru a/drivers/scsi/qla2xxx/ql2322_fw.c b/drivers/scsi/qla2xxx/ql2322_fw.c
--- a/drivers/scsi/qla2xxx/ql2322_fw.c	Sun May 16 01:18:33 2004
+++ b/drivers/scsi/qla2xxx/ql2322_fw.c	Sun May 16 01:18:33 2004
@@ -18,7 +18,7 @@
  *************************************************************************/
 
 /*
- *	Firmware Version 3.02.26 (08:08 Mar 11, 2004)
+ *	Firmware Version 3.02.28 (14:05 Apr 03, 2004)
  */
 
 #ifdef UNIQUE_FW_NAME
@@ -28,15 +28,15 @@
 #endif
 
 #ifdef UNIQUE_FW_NAME
-unsigned char fw2322ipx_version_str[] = {3, 2,26};
+unsigned char fw2322ipx_version_str[] = {3, 2,28};
 #else
-unsigned char firmware_version[] = {3, 2,26};
+unsigned char firmware_version[] = {3, 2,28};
 #endif
 
 #ifdef UNIQUE_FW_NAME
-#define fw2322ipx_VERSION_STRING "3.02.26"
+#define fw2322ipx_VERSION_STRING "3.02.28"
 #else
-#define FW_VERSION_STRING "3.02.26"
+#define FW_VERSION_STRING "3.02.28"
 #endif
 
 #ifdef UNIQUE_FW_NAME
@@ -50,12 +50,12 @@
 #else
 unsigned short risc_code01[] = { 
 #endif
-	0x0470, 0x0000, 0x0000, 0xdf17, 0x0000, 0x0003, 0x0002, 0x001a,
+	0x0470, 0x0000, 0x0000, 0xdf42, 0x0000, 0x0003, 0x0002, 0x001c,
 	0x0137, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2032, 0x3030,
 	0x3120, 0x514c, 0x4f47, 0x4943, 0x2043, 0x4f52, 0x504f, 0x5241,
 	0x5449, 0x4f4e, 0x2049, 0x5350, 0x3233, 0x3030, 0x2046, 0x6972,
 	0x6d77, 0x6172, 0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030,
-	0x332e, 0x3032, 0x2e32, 0x3620, 0x2020, 0x2020, 0x2400, 0x20a9,
+	0x332e, 0x3032, 0x2e32, 0x3820, 0x2020, 0x2020, 0x2400, 0x20a9,
 	0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2200, 0x20a9, 0x000f,
 	0x2001, 0x0000, 0x400f, 0x2091, 0x2400, 0x20a9, 0x000f, 0x2001,
 	0x0000, 0x400f, 0x2091, 0x2600, 0x20a9, 0x000f, 0x2001, 0x0000,
@@ -82,97 +82,97 @@
 	0x20a8, 0x900e, 0x4104, 0x2009, 0x1800, 0x810d, 0x810d, 0x810d,
 	0x810d, 0x810d, 0x918c, 0x001f, 0x2001, 0x0001, 0x9112, 0x20e9,
 	0x0001, 0x20a1, 0x0800, 0x900e, 0x20a9, 0x0800, 0x4104, 0x8211,
-	0x1dd8, 0x080c, 0x0f52, 0x080c, 0x6030, 0x080c, 0xab5f, 0x080c,
-	0x1109, 0x080c, 0x1328, 0x080c, 0x1bb0, 0x080c, 0x915c, 0x080c,
-	0x0d0f, 0x080c, 0x108e, 0x080c, 0x346d, 0x080c, 0x77ed, 0x080c,
-	0x6a7f, 0x080c, 0x88d4, 0x080c, 0x8538, 0x080c, 0x223f, 0x080c,
-	0x7ec2, 0x080c, 0x2089, 0x080c, 0x21c3, 0x080c, 0x2234, 0x2091,
+	0x1dd8, 0x080c, 0x0f52, 0x080c, 0x6037, 0x080c, 0xab83, 0x080c,
+	0x1109, 0x080c, 0x1328, 0x080c, 0x1bb0, 0x080c, 0x918d, 0x080c,
+	0x0d0f, 0x080c, 0x108e, 0x080c, 0x3474, 0x080c, 0x7801, 0x080c,
+	0x6a8f, 0x080c, 0x8905, 0x080c, 0x8569, 0x080c, 0x223f, 0x080c,
+	0x7ed6, 0x080c, 0x2089, 0x080c, 0x21c3, 0x080c, 0x2234, 0x2091,
 	0x3009, 0x7883, 0x0000, 0x1004, 0x0943, 0x7880, 0x9086, 0x0002,
 	0x1190, 0x7883, 0x4000, 0x7837, 0x4000, 0x7833, 0x0010, 0x0e04,
 	0x0937, 0x2091, 0x5000, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
 	0xd084, 0x190c, 0x11d6, 0x2071, 0x1800, 0x7003, 0x0000, 0x780c,
 	0x9084, 0x0030, 0x9086, 0x0000, 0x190c, 0x0d7d, 0x2071, 0x1800,
-	0x7000, 0x908e, 0x0003, 0x1168, 0x080c, 0x4bc5, 0x080c, 0x3494,
-	0x080c, 0x7855, 0x080c, 0x6fc7, 0x080c, 0x89b2, 0x080c, 0x8561,
+	0x7000, 0x908e, 0x0003, 0x1168, 0x080c, 0x4bcc, 0x080c, 0x349b,
+	0x080c, 0x7869, 0x080c, 0x6fd7, 0x080c, 0x89e3, 0x080c, 0x8592,
 	0x0c68, 0x000b, 0x0c88, 0x096d, 0x096e, 0x0b09, 0x096b, 0x0bc3,
 	0x0d0e, 0x0d0e, 0x0d0e, 0x080c, 0x0d7d, 0x0005, 0x0126, 0x00f6,
 	0x2091, 0x8000, 0x7000, 0x9086, 0x0001, 0x1904, 0x0adc, 0x080c,
-	0x0ea5, 0x080c, 0x74d5, 0x0150, 0x080c, 0x74f8, 0x15b0, 0x2079,
-	0x0100, 0x7828, 0x9085, 0x1800, 0x782a, 0x0478, 0x080c, 0x7406,
+	0x0ea5, 0x080c, 0x74e9, 0x0150, 0x080c, 0x750c, 0x15b0, 0x2079,
+	0x0100, 0x7828, 0x9085, 0x1800, 0x782a, 0x0478, 0x080c, 0x741a,
 	0x7000, 0x9086, 0x0001, 0x1904, 0x0adc, 0x7098, 0x9086, 0x0028,
-	0x1904, 0x0adc, 0x080c, 0x8530, 0x080c, 0x8522, 0x2001, 0x0161,
+	0x1904, 0x0adc, 0x080c, 0x8561, 0x080c, 0x8553, 0x2001, 0x0161,
 	0x2003, 0x0001, 0x2079, 0x0100, 0x2011, 0xffff, 0x080c, 0x2a44,
-	0x7a28, 0x9295, 0x5e2c, 0x7a2a, 0x2011, 0x734b, 0x080c, 0x860d,
-	0x2011, 0x733e, 0x080c, 0x8719, 0x2011, 0x5e87, 0x080c, 0x860d,
-	0x2011, 0x8030, 0x901e, 0x7396, 0x04d0, 0x080c, 0x5734, 0x2079,
-	0x0100, 0x7844, 0x9005, 0x1904, 0x0adc, 0x2011, 0x5e87, 0x080c,
-	0x860d, 0x2011, 0x734b, 0x080c, 0x860d, 0x2011, 0x733e, 0x080c,
-	0x8719, 0x2001, 0x0265, 0x2001, 0x0205, 0x2003, 0x0000, 0x7840,
+	0x7a28, 0x9295, 0x5e2c, 0x7a2a, 0x2011, 0x735f, 0x080c, 0x863e,
+	0x2011, 0x7352, 0x080c, 0x874a, 0x2011, 0x5e8e, 0x080c, 0x863e,
+	0x2011, 0x8030, 0x901e, 0x7396, 0x04d0, 0x080c, 0x573b, 0x2079,
+	0x0100, 0x7844, 0x9005, 0x1904, 0x0adc, 0x2011, 0x5e8e, 0x080c,
+	0x863e, 0x2011, 0x735f, 0x080c, 0x863e, 0x2011, 0x7352, 0x080c,
+	0x874a, 0x2001, 0x0265, 0x2001, 0x0205, 0x2003, 0x0000, 0x7840,
 	0x9084, 0xfffb, 0x7842, 0x2001, 0x19a6, 0x2004, 0x9005, 0x1140,
-	0x00c6, 0x2061, 0x0100, 0x080c, 0x5fd8, 0x00ce, 0x0804, 0x0adc,
-	0x780f, 0x006b, 0x7a28, 0x080c, 0x74dd, 0x0118, 0x9295, 0x5e2c,
+	0x00c6, 0x2061, 0x0100, 0x080c, 0x5fdf, 0x00ce, 0x0804, 0x0adc,
+	0x780f, 0x006b, 0x7a28, 0x080c, 0x74f1, 0x0118, 0x9295, 0x5e2c,
 	0x0010, 0x9295, 0x402c, 0x7a2a, 0x2011, 0x8010, 0x73d8, 0x2001,
-	0x19a7, 0x2003, 0x0001, 0x080c, 0x2916, 0x080c, 0x4b00, 0x7248,
+	0x19a7, 0x2003, 0x0001, 0x080c, 0x2916, 0x080c, 0x4b07, 0x7248,
 	0xc284, 0x724a, 0x2001, 0x180c, 0x200c, 0xc1ac, 0xc1cc, 0x2102,
-	0x2001, 0x0390, 0x2003, 0x0400, 0x080c, 0xa872, 0x080c, 0xa04f,
-	0x2011, 0x0004, 0x080c, 0xc824, 0x080c, 0xa88e, 0x080c, 0x6910,
-	0x080c, 0x74d5, 0x1120, 0x080c, 0x2971, 0x0600, 0x0420, 0x080c,
-	0x5fdf, 0x0140, 0x7097, 0x0001, 0x70d3, 0x0000, 0x080c, 0x5901,
-	0x0804, 0x0adc, 0x080c, 0x56d3, 0xd094, 0x01a8, 0x2001, 0x0390,
+	0x2001, 0x0390, 0x2003, 0x0400, 0x080c, 0xa896, 0x080c, 0xa073,
+	0x2011, 0x0004, 0x080c, 0xc848, 0x080c, 0xa8b2, 0x080c, 0x6917,
+	0x080c, 0x74e9, 0x1120, 0x080c, 0x2971, 0x0600, 0x0420, 0x080c,
+	0x5fe6, 0x0140, 0x7097, 0x0001, 0x70d3, 0x0000, 0x080c, 0x5908,
+	0x0804, 0x0adc, 0x080c, 0x56da, 0xd094, 0x01a8, 0x2001, 0x0390,
 	0x2003, 0x0404, 0x2011, 0x180c, 0x2204, 0xc0cd, 0x2012, 0x080c,
-	0x56d7, 0xd0d4, 0x1118, 0x080c, 0x2971, 0x1270, 0x2011, 0x180c,
-	0x2204, 0xc0bc, 0x00a8, 0x080c, 0x56d7, 0xd0d4, 0x1db8, 0x2011,
+	0x56de, 0xd0d4, 0x1118, 0x080c, 0x2971, 0x1270, 0x2011, 0x180c,
+	0x2204, 0xc0bc, 0x00a8, 0x080c, 0x56de, 0xd0d4, 0x1db8, 0x2011,
 	0x180c, 0x2204, 0xc0bd, 0x0060, 0x2011, 0x180c, 0x2204, 0xc0bd,
-	0x2012, 0x080c, 0x6a53, 0x1128, 0xd0a4, 0x0118, 0x2204, 0xc0fd,
-	0x2012, 0x080c, 0x6a19, 0x0120, 0x7a0c, 0xc2b4, 0x7a0e, 0x00a8,
-	0x707f, 0x0000, 0x080c, 0x74d5, 0x1130, 0x70b0, 0x9005, 0x1168,
-	0x080c, 0xcc7b, 0x0050, 0x080c, 0xcc7b, 0x70dc, 0xd09c, 0x1128,
-	0x70b0, 0x9005, 0x0110, 0x080c, 0x5fb5, 0x70e7, 0x0000, 0x70e3,
+	0x2012, 0x080c, 0x6a63, 0x1128, 0xd0a4, 0x0118, 0x2204, 0xc0fd,
+	0x2012, 0x080c, 0x6a29, 0x0120, 0x7a0c, 0xc2b4, 0x7a0e, 0x00a8,
+	0x707f, 0x0000, 0x080c, 0x74e9, 0x1130, 0x70b0, 0x9005, 0x1168,
+	0x080c, 0xcc9f, 0x0050, 0x080c, 0xcc9f, 0x70dc, 0xd09c, 0x1128,
+	0x70b0, 0x9005, 0x0110, 0x080c, 0x5fbc, 0x70e7, 0x0000, 0x70e3,
 	0x0000, 0x70a7, 0x0000, 0x080c, 0x2979, 0x0228, 0x2011, 0x0101,
-	0x2204, 0xc0c4, 0x2012, 0x72dc, 0x080c, 0x74d5, 0x1178, 0x9016,
+	0x2204, 0xc0c4, 0x2012, 0x72dc, 0x080c, 0x74e9, 0x1178, 0x9016,
 	0x0016, 0x080c, 0x2713, 0x2019, 0x196d, 0x211a, 0x001e, 0x705f,
 	0xffff, 0x7063, 0x00ef, 0x7083, 0x0000, 0x0020, 0x2019, 0x196d,
 	0x201b, 0x0000, 0x2079, 0x1847, 0x7804, 0xd0ac, 0x0108, 0xc295,
-	0x72de, 0x080c, 0x74d5, 0x0118, 0x9296, 0x0004, 0x0518, 0x2011,
-	0x0001, 0x080c, 0xc824, 0x70ab, 0x0000, 0x70af, 0xffff, 0x7003,
-	0x0002, 0x00fe, 0x080c, 0x2fb2, 0x080c, 0xa872, 0x2011, 0x0005,
-	0x080c, 0xa1ab, 0x080c, 0xa88e, 0x080c, 0x74d5, 0x0148, 0x00c6,
+	0x72de, 0x080c, 0x74e9, 0x0118, 0x9296, 0x0004, 0x0518, 0x2011,
+	0x0001, 0x080c, 0xc848, 0x70ab, 0x0000, 0x70af, 0xffff, 0x7003,
+	0x0002, 0x00fe, 0x080c, 0x2fb2, 0x080c, 0xa896, 0x2011, 0x0005,
+	0x080c, 0xa1cf, 0x080c, 0xa8b2, 0x080c, 0x74e9, 0x0148, 0x00c6,
 	0x2061, 0x0100, 0x0016, 0x080c, 0x2713, 0x61e2, 0x001e, 0x00ce,
 	0x012e, 0x00e0, 0x70ab, 0x0000, 0x70af, 0xffff, 0x7003, 0x0002,
-	0x080c, 0xa872, 0x2011, 0x0005, 0x080c, 0xa1ab, 0x080c, 0xa88e,
-	0x080c, 0x74d5, 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016, 0x080c,
+	0x080c, 0xa896, 0x2011, 0x0005, 0x080c, 0xa1cf, 0x080c, 0xa8b2,
+	0x080c, 0x74e9, 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016, 0x080c,
 	0x2713, 0x61e2, 0x001e, 0x00ce, 0x00fe, 0x012e, 0x0005, 0x00c6,
-	0x00b6, 0x080c, 0x74d5, 0x1118, 0x20a9, 0x0800, 0x0010, 0x20a9,
-	0x0782, 0x080c, 0x74d5, 0x1110, 0x900e, 0x0010, 0x2009, 0x007e,
+	0x00b6, 0x080c, 0x74e9, 0x1118, 0x20a9, 0x0800, 0x0010, 0x20a9,
+	0x0782, 0x080c, 0x74e9, 0x1110, 0x900e, 0x0010, 0x2009, 0x007e,
 	0x86ff, 0x0138, 0x9180, 0x1000, 0x2004, 0x905d, 0x0110, 0xb800,
-	0xd0bc, 0x090c, 0x32f5, 0x8108, 0x1f04, 0x0af0, 0x707f, 0x0000,
+	0xd0bc, 0x090c, 0x32fc, 0x8108, 0x1f04, 0x0af0, 0x707f, 0x0000,
 	0x7080, 0x9084, 0x00ff, 0x7082, 0x70b3, 0x0000, 0x00be, 0x00ce,
 	0x0005, 0x00b6, 0x0126, 0x2091, 0x8000, 0x7000, 0x9086, 0x0002,
 	0x1904, 0x0bc0, 0x70ac, 0x9086, 0xffff, 0x0120, 0x080c, 0x2fb2,
 	0x0804, 0x0bc0, 0x70dc, 0xd0ac, 0x1110, 0xd09c, 0x0538, 0xd084,
 	0x0528, 0x0006, 0x2001, 0x0103, 0x2003, 0x002b, 0x000e, 0xd08c,
-	0x01e8, 0x080c, 0x3366, 0x11b0, 0x70e0, 0x9086, 0xffff, 0x0190,
-	0x080c, 0x3144, 0x70dc, 0xd094, 0x1904, 0x0bc0, 0x2011, 0x0001,
-	0x080c, 0xcf2e, 0x0110, 0x2011, 0x0003, 0x901e, 0x080c, 0x317e,
+	0x01e8, 0x080c, 0x336d, 0x11b0, 0x70e0, 0x9086, 0xffff, 0x0190,
+	0x080c, 0x3147, 0x70dc, 0xd094, 0x1904, 0x0bc0, 0x2011, 0x0001,
+	0x080c, 0xcf52, 0x0110, 0x2011, 0x0003, 0x901e, 0x080c, 0x3181,
 	0x0804, 0x0bc0, 0x70e4, 0x9005, 0x1904, 0x0bc0, 0x70a8, 0x9005,
 	0x1904, 0x0bc0, 0x70dc, 0xd0a4, 0x0118, 0xd0b4, 0x0904, 0x0bc0,
-	0x080c, 0x6a19, 0x1904, 0x0bc0, 0x080c, 0x6a6c, 0x1904, 0x0bc0,
-	0x080c, 0x6a53, 0x01c0, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x900e,
-	0x0016, 0x080c, 0x661e, 0x1118, 0xb800, 0xd0ec, 0x1138, 0x001e,
+	0x080c, 0x6a29, 0x1904, 0x0bc0, 0x080c, 0x6a7c, 0x1904, 0x0bc0,
+	0x080c, 0x6a63, 0x01c0, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x900e,
+	0x0016, 0x080c, 0x6625, 0x1118, 0xb800, 0xd0ec, 0x1138, 0x001e,
 	0x8108, 0x1f04, 0x0b60, 0x00ce, 0x015e, 0x0028, 0x001e, 0x00ce,
 	0x015e, 0x0804, 0x0bc0, 0x0006, 0x2001, 0x0103, 0x2003, 0x002b,
 	0x000e, 0x2011, 0x19b3, 0x080c, 0x0fc2, 0x2011, 0x19cd, 0x080c,
 	0x0fc2, 0x7030, 0xc08c, 0x7032, 0x7003, 0x0003, 0x70af, 0xffff,
-	0x080c, 0x0e79, 0x9006, 0x080c, 0x25a0, 0x080c, 0x3366, 0x0118,
-	0x080c, 0x4c9d, 0x0050, 0x0036, 0x0046, 0x2019, 0xffff, 0x2021,
-	0x0006, 0x080c, 0x4cb7, 0x004e, 0x003e, 0x00f6, 0x2079, 0x0100,
-	0x080c, 0x74f8, 0x0150, 0x080c, 0x74d5, 0x7828, 0x0118, 0x9084,
-	0xe1ff, 0x0010, 0x9084, 0xffdf, 0x782a, 0x00fe, 0x080c, 0xa872,
+	0x080c, 0x0e79, 0x9006, 0x080c, 0x25a0, 0x080c, 0x336d, 0x0118,
+	0x080c, 0x4ca4, 0x0050, 0x0036, 0x0046, 0x2019, 0xffff, 0x2021,
+	0x0006, 0x080c, 0x4cbe, 0x004e, 0x003e, 0x00f6, 0x2079, 0x0100,
+	0x080c, 0x750c, 0x0150, 0x080c, 0x74e9, 0x7828, 0x0118, 0x9084,
+	0xe1ff, 0x0010, 0x9084, 0xffdf, 0x782a, 0x00fe, 0x080c, 0xa896,
 	0x2001, 0x19e8, 0x2004, 0x9086, 0x0005, 0x1120, 0x2011, 0x0000,
-	0x080c, 0xa1ab, 0x2011, 0x0000, 0x080c, 0xa1b5, 0x080c, 0xa88e,
+	0x080c, 0xa1cf, 0x2011, 0x0000, 0x080c, 0xa1d9, 0x080c, 0xa8b2,
 	0x012e, 0x00be, 0x0005, 0x0016, 0x0026, 0x0046, 0x00f6, 0x0126,
 	0x2091, 0x8000, 0x2079, 0x0100, 0x7904, 0x918c, 0xfffd, 0x7906,
-	0x2009, 0x00f7, 0x080c, 0x5f9e, 0x7940, 0x918c, 0x0010, 0x7942,
+	0x2009, 0x00f7, 0x080c, 0x5fa5, 0x7940, 0x918c, 0x0010, 0x7942,
 	0x7924, 0xd1b4, 0x0120, 0x2011, 0x0040, 0x080c, 0x2a44, 0xd19c,
 	0x0120, 0x2011, 0x0008, 0x080c, 0x2a44, 0x0006, 0x0036, 0x0156,
 	0x0000, 0x2001, 0x19a7, 0x2004, 0x9005, 0x1518, 0x080c, 0x29d8,
@@ -181,26 +181,26 @@
 	0x9006, 0x080c, 0x2928, 0x0068, 0x080c, 0x29e8, 0x1d50, 0x2001,
 	0x1998, 0x2004, 0xd0fc, 0x0108, 0x0020, 0x080c, 0x273f, 0x0804,
 	0x0cc1, 0x080c, 0x2a67, 0x080c, 0x2aab, 0x20a9, 0x003a, 0x1d04,
-	0x0c17, 0x080c, 0x86f9, 0x1f04, 0x0c17, 0x080c, 0x74e6, 0x0148,
-	0x080c, 0x74f8, 0x1118, 0x080c, 0x77e8, 0x0050, 0x080c, 0x74dd,
-	0x0dd0, 0x080c, 0x77e3, 0x080c, 0x77d9, 0x080c, 0x7406, 0x0020,
-	0x2009, 0x00f8, 0x080c, 0x5f9e, 0x7850, 0xc0e5, 0x7852, 0x080c,
-	0x74d5, 0x0120, 0x7843, 0x0090, 0x7843, 0x0010, 0x2021, 0xe678,
-	0x2019, 0xea60, 0x0d0c, 0x86f9, 0x7820, 0xd09c, 0x15a0, 0x080c,
-	0x74d5, 0x0904, 0x0ca3, 0x7824, 0xd0ac, 0x1904, 0x0cc6, 0x080c,
-	0x74f8, 0x1548, 0x0046, 0x2021, 0x0320, 0x8421, 0x1df0, 0x004e,
+	0x0c17, 0x080c, 0x872a, 0x1f04, 0x0c17, 0x080c, 0x74fa, 0x0148,
+	0x080c, 0x750c, 0x1118, 0x080c, 0x77fc, 0x0050, 0x080c, 0x74f1,
+	0x0dd0, 0x080c, 0x77f7, 0x080c, 0x77ed, 0x080c, 0x741a, 0x0020,
+	0x2009, 0x00f8, 0x080c, 0x5fa5, 0x7850, 0xc0e5, 0x7852, 0x080c,
+	0x74e9, 0x0120, 0x7843, 0x0090, 0x7843, 0x0010, 0x2021, 0xe678,
+	0x2019, 0xea60, 0x0d0c, 0x872a, 0x7820, 0xd09c, 0x15a0, 0x080c,
+	0x74e9, 0x0904, 0x0ca3, 0x7824, 0xd0ac, 0x1904, 0x0cc6, 0x080c,
+	0x750c, 0x1548, 0x0046, 0x2021, 0x0320, 0x8421, 0x1df0, 0x004e,
 	0x2011, 0x1800, 0x080c, 0x2a44, 0x080c, 0x29f0, 0x7824, 0x9084,
 	0x1800, 0x1168, 0x9484, 0x0fff, 0x1140, 0x2001, 0x1810, 0x2004,
 	0x9084, 0x9000, 0x0110, 0x080c, 0x0ce9, 0x8421, 0x1160, 0x1d04,
-	0x0c73, 0x080c, 0x86f9, 0x080c, 0x77e3, 0x080c, 0x77d9, 0x7003,
+	0x0c73, 0x080c, 0x872a, 0x080c, 0x77f7, 0x080c, 0x77ed, 0x7003,
 	0x0001, 0x0804, 0x0cc6, 0x8319, 0x1928, 0x2001, 0x1810, 0x2004,
 	0x9084, 0x9000, 0x0110, 0x080c, 0x0ce9, 0x1d04, 0x0c89, 0x080c,
-	0x86f9, 0x2009, 0x199b, 0x2104, 0x9005, 0x0118, 0x8001, 0x200a,
+	0x872a, 0x2009, 0x199b, 0x2104, 0x9005, 0x0118, 0x8001, 0x200a,
 	0x1188, 0x200b, 0x000a, 0x2011, 0x0048, 0x080c, 0x2a44, 0x20a9,
 	0x0002, 0x080c, 0x29d1, 0x7924, 0x080c, 0x29f0, 0xd19c, 0x0110,
-	0x080c, 0x2916, 0x00f0, 0x080c, 0x74e6, 0x1140, 0x94a2, 0x03e8,
-	0x1128, 0x080c, 0x74a9, 0x7003, 0x0001, 0x00c0, 0x2011, 0x1800,
-	0x080c, 0x2a44, 0x080c, 0x29f0, 0x7824, 0x080c, 0x74ef, 0x0110,
+	0x080c, 0x2916, 0x00f0, 0x080c, 0x74fa, 0x1140, 0x94a2, 0x03e8,
+	0x1128, 0x080c, 0x74bd, 0x7003, 0x0001, 0x00c0, 0x2011, 0x1800,
+	0x080c, 0x2a44, 0x080c, 0x29f0, 0x7824, 0x080c, 0x7503, 0x0110,
 	0xd0ac, 0x1160, 0x9084, 0x1800, 0x0904, 0x0c7b, 0x7003, 0x0001,
 	0x0028, 0x2001, 0x0001, 0x080c, 0x25a0, 0x00a0, 0x7850, 0xc0e4,
 	0x7852, 0x2009, 0x180c, 0x210c, 0xd19c, 0x1120, 0x7904, 0x918d,
@@ -208,20 +208,20 @@
 	0x0028, 0x782a, 0x2001, 0x19a7, 0x2003, 0x0000, 0x9006, 0x78f2,
 	0x015e, 0x003e, 0x000e, 0x012e, 0x00fe, 0x004e, 0x002e, 0x001e,
 	0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x0046, 0x00b6, 0x00c6,
-	0x00d6, 0x00e6, 0x00f6, 0x0156, 0x0071, 0x0d0c, 0x86f9, 0x015e,
+	0x00d6, 0x00e6, 0x00f6, 0x0156, 0x0071, 0x0d0c, 0x872a, 0x015e,
 	0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x004e, 0x003e, 0x002e,
 	0x001e, 0x000e, 0x0005, 0x00e6, 0x2071, 0x189e, 0x7004, 0x9086,
-	0x0001, 0x1110, 0x080c, 0x3494, 0x00ee, 0x0005, 0x0005, 0x2a70,
-	0x2061, 0x19ab, 0x2063, 0x0003, 0x6007, 0x0002, 0x600b, 0x001a,
+	0x0001, 0x1110, 0x080c, 0x349b, 0x00ee, 0x0005, 0x0005, 0x2a70,
+	0x2061, 0x19ab, 0x2063, 0x0003, 0x6007, 0x0002, 0x600b, 0x001c,
 	0x600f, 0x0137, 0x2001, 0x197c, 0x900e, 0x2102, 0x7196, 0x2001,
 	0x0100, 0x2004, 0x9082, 0x0002, 0x0218, 0x705f, 0xffff, 0x0008,
-	0x715e, 0x7067, 0xffff, 0x717e, 0x7182, 0x080c, 0xcc7b, 0x70ef,
+	0x715e, 0x7067, 0xffff, 0x717e, 0x7182, 0x080c, 0xcc9f, 0x70ef,
 	0x00c0, 0x2061, 0x196c, 0x6003, 0x0909, 0x6106, 0x600b, 0x8800,
 	0x600f, 0x0200, 0x6013, 0x00ff, 0x6017, 0x001f, 0x611a, 0x601f,
 	0x07d0, 0x2061, 0x1974, 0x6003, 0x8000, 0x6106, 0x610a, 0x600f,
 	0x0200, 0x6013, 0x00ff, 0x6116, 0x601b, 0x0001, 0x611e, 0x2061,
 	0x1989, 0x6003, 0x514c, 0x6007, 0x4f47, 0x600b, 0x4943, 0x600f,
-	0x2020, 0x2001, 0x182c, 0x2102, 0x0005, 0x9016, 0x080c, 0x661e,
+	0x2020, 0x2001, 0x182c, 0x2102, 0x0005, 0x9016, 0x080c, 0x6625,
 	0x1178, 0xb804, 0x90c4, 0x00ff, 0x98c6, 0x0006, 0x0128, 0x90c4,
 	0xff00, 0x98c6, 0x0600, 0x1120, 0x9186, 0x0080, 0x0108, 0x8210,
 	0x8108, 0x9186, 0x0800, 0x1d50, 0x2208, 0x0005, 0x2091, 0x8000,
@@ -240,11 +240,11 @@
 	0x2079, 0x1800, 0x7803, 0x0005, 0x2091, 0x4080, 0x2001, 0x0089,
 	0x2004, 0xd084, 0x0180, 0x2001, 0x1a22, 0x2004, 0x9005, 0x0128,
 	0x2001, 0x008b, 0x2004, 0xd0fc, 0x0dd8, 0x2001, 0x008a, 0x2003,
-	0x0002, 0x2003, 0x1001, 0x080c, 0x56e2, 0x1170, 0x080c, 0x0f13,
-	0x0110, 0x080c, 0x0e66, 0x080c, 0x56e2, 0x1130, 0x2071, 0x1800,
+	0x0002, 0x2003, 0x1001, 0x080c, 0x56e9, 0x1170, 0x080c, 0x0f13,
+	0x0110, 0x080c, 0x0e66, 0x080c, 0x56e9, 0x1130, 0x2071, 0x1800,
 	0x2011, 0x8000, 0x080c, 0x0f27, 0x0c70, 0x0005, 0x2001, 0x0382,
 	0x2004, 0x9084, 0x0007, 0x9086, 0x0001, 0x1120, 0x2001, 0x0015,
-	0x080c, 0xa863, 0x2079, 0x0380, 0x2069, 0x1b04, 0x7818, 0x6802,
+	0x080c, 0xa887, 0x2079, 0x0380, 0x2069, 0x1b04, 0x7818, 0x6802,
 	0x781c, 0x6806, 0x7840, 0x680a, 0x7844, 0x680e, 0x782c, 0x6812,
 	0x2019, 0x1b0f, 0x9016, 0x7808, 0xd09c, 0x0150, 0x7820, 0x201a,
 	0x8210, 0x8318, 0x8210, 0x9282, 0x0011, 0x0ea8, 0x2011, 0xdead,
@@ -323,7 +323,7 @@
 	0x0016, 0x890e, 0x810e, 0x810f, 0x9184, 0x003f, 0xa862, 0x9184,
 	0xffc0, 0xa85e, 0x001e, 0x0020, 0x00e6, 0x0126, 0x2091, 0x8000,
 	0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70c0, 0x8000,
-	0x70c2, 0x080c, 0x8522, 0x012e, 0x00ee, 0x0005, 0x2071, 0x1800,
+	0x70c2, 0x080c, 0x8553, 0x012e, 0x00ee, 0x0005, 0x2071, 0x1800,
 	0x9026, 0x2009, 0x0000, 0x2049, 0x0400, 0x2900, 0x702e, 0x8940,
 	0x2800, 0xa802, 0xa95e, 0xa863, 0x0001, 0x8420, 0x9886, 0x0440,
 	0x0120, 0x2848, 0x9188, 0x0040, 0x0c90, 0x2071, 0x188d, 0x7000,
@@ -387,15 +387,15 @@
 	0x008e, 0x00de, 0x009e, 0x080c, 0x1143, 0x0005, 0x00de, 0x009e,
 	0x080c, 0x1143, 0x0005, 0xa8a8, 0xd08c, 0x0005, 0x0096, 0xa0a0,
 	0x904d, 0x090c, 0x0d7d, 0xa06c, 0x908e, 0x0100, 0x0130, 0xa87b,
-	0x0030, 0xa883, 0x0000, 0xa897, 0x4002, 0x080c, 0x6d64, 0xa09f,
+	0x0030, 0xa883, 0x0000, 0xa897, 0x4002, 0x080c, 0x6d74, 0xa09f,
 	0x0000, 0xa0a3, 0x0000, 0x2848, 0x080c, 0x106c, 0x009e, 0x0005,
 	0x00a6, 0xa0a0, 0x904d, 0x090c, 0x0d7d, 0xa06c, 0x908e, 0x0100,
 	0x0128, 0xa87b, 0x0001, 0xa883, 0x0000, 0x00c0, 0xa80c, 0x2050,
 	0xb004, 0x9005, 0x0198, 0xa80e, 0x2050, 0x8006, 0x8006, 0x8007,
 	0x908c, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0xa076, 0xa172,
 	0xb000, 0xa07a, 0x2810, 0x080c, 0x1124, 0x00e8, 0xa97c, 0xa894,
-	0x0016, 0x0006, 0x080c, 0x6d64, 0x000e, 0x001e, 0xd1fc, 0x1138,
-	0xd1f4, 0x0128, 0x00c6, 0x2060, 0x080c, 0xabc9, 0x00ce, 0x7008,
+	0x0016, 0x0006, 0x080c, 0x6d74, 0x000e, 0x001e, 0xd1fc, 0x1138,
+	0xd1f4, 0x0128, 0x00c6, 0x2060, 0x080c, 0xabed, 0x00ce, 0x7008,
 	0x2048, 0xa89f, 0x0000, 0xa8a3, 0x0000, 0x080c, 0x106c, 0x7007,
 	0x0000, 0x080c, 0x1143, 0x00ae, 0x0005, 0x0126, 0x2091, 0x8000,
 	0x782b, 0x1001, 0x7007, 0x0005, 0x7000, 0xc094, 0x7002, 0x012e,
@@ -404,8 +404,8 @@
 	0x0020, 0x0126, 0x2091, 0x8000, 0x782b, 0x0041, 0x7007, 0x0003,
 	0x7000, 0xc084, 0x7002, 0x2900, 0x700a, 0x012e, 0x009e, 0x0005,
 	0x20e1, 0x0000, 0x2099, 0x0088, 0x782b, 0x0040, 0x0096, 0x2001,
-	0x192e, 0x204c, 0xaa7c, 0x009e, 0x080c, 0x8bea, 0x2009, 0x188c,
-	0x2104, 0x9084, 0xfffc, 0x200a, 0x080c, 0x8a5d, 0x7007, 0x0000,
+	0x192e, 0x204c, 0xaa7c, 0x009e, 0x080c, 0x8c1b, 0x2009, 0x188c,
+	0x2104, 0x9084, 0xfffc, 0x200a, 0x080c, 0x8a8e, 0x7007, 0x0000,
 	0x080c, 0x1154, 0x0005, 0x7007, 0x0000, 0x080c, 0x1154, 0x0005,
 	0x0126, 0x2091, 0x2200, 0x2079, 0x0300, 0x2071, 0x1a6b, 0x7003,
 	0x0000, 0x78bf, 0x00f6, 0x0041, 0x7807, 0x0007, 0x7803, 0x0000,
@@ -418,17 +418,17 @@
 	0x0303, 0x2061, 0x1a7a, 0x602f, 0x1ddc, 0x2001, 0x181a, 0x2004,
 	0x9082, 0x1ddc, 0x6032, 0x603b, 0x1e55, 0x602b, 0x1aba, 0x6007,
 	0x1a9a, 0x2061, 0x1a9a, 0x60af, 0x193c, 0x2001, 0x1927, 0x2004,
-	0x60ba, 0x783f, 0x336d, 0x00ce, 0x0005, 0x9086, 0x000d, 0x11d0,
-	0x7808, 0xd09c, 0x01b8, 0x7820, 0x0026, 0x2010, 0x080c, 0xc802,
+	0x60ba, 0x783f, 0x3374, 0x00ce, 0x0005, 0x9086, 0x000d, 0x11d0,
+	0x7808, 0xd09c, 0x01b8, 0x7820, 0x0026, 0x2010, 0x080c, 0xc826,
 	0x0180, 0x2260, 0x6000, 0x9086, 0x0004, 0x1158, 0x0016, 0x6120,
-	0x9186, 0x0009, 0x0108, 0x0020, 0x2009, 0x004c, 0x080c, 0xac68,
+	0x9186, 0x0009, 0x0108, 0x0020, 0x2009, 0x004c, 0x080c, 0xac8c,
 	0x001e, 0x002e, 0x0005, 0x0126, 0x2091, 0x2200, 0x7908, 0x9184,
 	0x0070, 0x190c, 0x0d76, 0xd19c, 0x05a0, 0x7820, 0x908c, 0xf000,
 	0x0540, 0x2060, 0x6020, 0x9086, 0x0003, 0x1550, 0x6000, 0x9086,
 	0x0004, 0x1530, 0x6114, 0x2148, 0xa876, 0xa87a, 0xa867, 0x0103,
-	0x080c, 0x6b86, 0x00b6, 0x6010, 0x2058, 0xba3c, 0x8211, 0x0208,
-	0xba3e, 0xb8d0, 0x9005, 0x190c, 0x6749, 0x00be, 0x6044, 0xd0fc,
-	0x190c, 0xa89b, 0x080c, 0xabf2, 0x7808, 0xd09c, 0x19b0, 0x012e,
+	0x080c, 0x6b96, 0x00b6, 0x6010, 0x2058, 0xba3c, 0x8211, 0x0208,
+	0xba3e, 0xb8d0, 0x9005, 0x190c, 0x6750, 0x00be, 0x6044, 0xd0fc,
+	0x190c, 0xa8bf, 0x080c, 0xac16, 0x7808, 0xd09c, 0x19b0, 0x012e,
 	0x0005, 0x908a, 0x0024, 0x1a0c, 0x0d7d, 0x002b, 0x012e, 0x0005,
 	0x04b0, 0x012e, 0x0005, 0x1407, 0x142d, 0x145d, 0x1462, 0x1466,
 	0x146b, 0x1493, 0x1497, 0x14a5, 0x14a9, 0x1407, 0x1574, 0x1578,
@@ -436,25 +436,25 @@
 	0x1407, 0x1407, 0x1407, 0x1407, 0x1407, 0x1407, 0x146d, 0x1407,
 	0x1435, 0x145a, 0x1421, 0x1407, 0x1441, 0x140b, 0x1409, 0x080c,
 	0x0d7d, 0x080c, 0x0d76, 0x080c, 0x1603, 0x2009, 0x1a79, 0x2104,
-	0x8000, 0x200a, 0x080c, 0x7f85, 0x080c, 0x1ab5, 0x0005, 0x6044,
-	0xd0fc, 0x190c, 0xa89b, 0x2009, 0x0055, 0x080c, 0xac68, 0x012e,
-	0x0005, 0x080c, 0x1603, 0x2060, 0x6044, 0xd0fc, 0x190c, 0xa89b,
-	0x2009, 0x0055, 0x080c, 0xac68, 0x0005, 0x2009, 0x0048, 0x080c,
-	0x1603, 0x2060, 0x080c, 0xac68, 0x0005, 0x2009, 0x0054, 0x080c,
-	0x1603, 0x2060, 0x6044, 0xd0fc, 0x190c, 0xa89b, 0x080c, 0xac68,
+	0x8000, 0x200a, 0x080c, 0x7f99, 0x080c, 0x1ab5, 0x0005, 0x6044,
+	0xd0fc, 0x190c, 0xa8bf, 0x2009, 0x0055, 0x080c, 0xac8c, 0x012e,
+	0x0005, 0x080c, 0x1603, 0x2060, 0x6044, 0xd0fc, 0x190c, 0xa8bf,
+	0x2009, 0x0055, 0x080c, 0xac8c, 0x0005, 0x2009, 0x0048, 0x080c,
+	0x1603, 0x2060, 0x080c, 0xac8c, 0x0005, 0x2009, 0x0054, 0x080c,
+	0x1603, 0x2060, 0x6044, 0xd0fc, 0x190c, 0xa8bf, 0x080c, 0xac8c,
 	0x0005, 0x080c, 0x1603, 0x2060, 0x0056, 0x0066, 0x080c, 0x1603,
 	0x2028, 0x080c, 0x1603, 0x2030, 0x0036, 0x0046, 0x2021, 0x0000,
-	0x2418, 0x2009, 0x0056, 0x080c, 0xac68, 0x004e, 0x003e, 0x006e,
+	0x2418, 0x2009, 0x0056, 0x080c, 0xac8c, 0x004e, 0x003e, 0x006e,
 	0x005e, 0x0005, 0x080c, 0x1603, 0x0005, 0x7004, 0xc085, 0xc0b5,
 	0x7006, 0x0005, 0x7004, 0xc085, 0x7006, 0x0005, 0x080c, 0x1603,
 	0x080c, 0x16c7, 0x0005, 0x080c, 0x0d7d, 0x080c, 0x1603, 0x2060,
 	0x6014, 0x0096, 0x2048, 0xa83b, 0xffff, 0x009e, 0x2009, 0x0048,
-	0x080c, 0xac68, 0x2001, 0x015d, 0x2003, 0x0000, 0x2009, 0x03e8,
+	0x080c, 0xac8c, 0x2001, 0x015d, 0x2003, 0x0000, 0x2009, 0x03e8,
 	0x8109, 0x0160, 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8, 0x2001,
 	0x0218, 0x2004, 0xd0ec, 0x1110, 0x080c, 0x1608, 0x2001, 0x0307,
 	0x2003, 0x8000, 0x0005, 0x7004, 0xc095, 0x7006, 0x0005, 0x080c,
 	0x1603, 0x2060, 0x6014, 0x0096, 0x2048, 0xa83b, 0xffff, 0x009e,
-	0x2009, 0x0048, 0x080c, 0xac68, 0x0005, 0x080c, 0x1603, 0x080c,
+	0x2009, 0x0048, 0x080c, 0xac8c, 0x0005, 0x080c, 0x1603, 0x080c,
 	0x0d7d, 0x080c, 0x1603, 0x080c, 0x155f, 0x7827, 0x0018, 0x79ac,
 	0xd1dc, 0x0904, 0x1512, 0x7827, 0x0015, 0x7828, 0x782b, 0x0000,
 	0x9065, 0x0140, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003, 0x0020,
@@ -470,13 +470,13 @@
 	0x0004, 0x7803, 0x0001, 0x080c, 0x1578, 0x2001, 0x020d, 0x2003,
 	0x0020, 0x0005, 0x7828, 0x782b, 0x0000, 0x9065, 0x090c, 0x0d7d,
 	0x6014, 0x2048, 0x78ab, 0x0004, 0x918c, 0x0700, 0x0198, 0x080c,
-	0x7f85, 0x080c, 0x1ab5, 0x080c, 0xc814, 0x0158, 0xa9ac, 0xa936,
+	0x7f99, 0x080c, 0x1ab5, 0x080c, 0xc838, 0x0158, 0xa9ac, 0xa936,
 	0xa9b0, 0xa93a, 0xa83f, 0xffff, 0xa843, 0xffff, 0xa880, 0xc0bd,
 	0xa882, 0x0005, 0x6020, 0x9086, 0x0009, 0x1128, 0x2009, 0x004c,
-	0x080c, 0xac68, 0x0048, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be,
-	0xd0bc, 0x6024, 0x190c, 0xcc10, 0x2029, 0x00c8, 0x8529, 0x0128,
-	0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8, 0x7dbc, 0x080c, 0xe6af,
-	0xd5a4, 0x1118, 0x080c, 0x1608, 0x0005, 0x080c, 0x7f85, 0x080c,
+	0x080c, 0xac8c, 0x0048, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be,
+	0xd0bc, 0x6024, 0x190c, 0xcc34, 0x2029, 0x00c8, 0x8529, 0x0128,
+	0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8, 0x7dbc, 0x080c, 0xe6da,
+	0xd5a4, 0x1118, 0x080c, 0x1608, 0x0005, 0x080c, 0x7f99, 0x080c,
 	0x1ab5, 0x0005, 0x781f, 0x0300, 0x7803, 0x0001, 0x0005, 0x0016,
 	0x0066, 0x0076, 0x00f6, 0x2079, 0x0300, 0x7908, 0x918c, 0x0007,
 	0x9186, 0x0003, 0x0120, 0x2001, 0x0016, 0x080c, 0x1679, 0x00fe,
@@ -494,9 +494,9 @@
 	0x1608, 0x0040, 0x2001, 0x020d, 0x2003, 0x0020, 0x080c, 0x133c,
 	0x7803, 0x0001, 0x00ee, 0x001e, 0x0005, 0x2001, 0x020d, 0x2003,
 	0x0050, 0x2003, 0x0020, 0x0461, 0x0ca8, 0x0429, 0x2060, 0x2009,
-	0x0053, 0x080c, 0xac68, 0x0005, 0x0005, 0x0005, 0x00e1, 0x2008,
-	0x00d1, 0x0006, 0x7004, 0xc09d, 0x7006, 0x000e, 0x080c, 0x8f47,
-	0x0005, 0x0089, 0x9005, 0x0118, 0x080c, 0x8b4a, 0x0cd0, 0x0005,
+	0x0053, 0x080c, 0xac8c, 0x0005, 0x0005, 0x0005, 0x00e1, 0x2008,
+	0x00d1, 0x0006, 0x7004, 0xc09d, 0x7006, 0x000e, 0x080c, 0x8f78,
+	0x0005, 0x0089, 0x9005, 0x0118, 0x080c, 0x8b7b, 0x0cd0, 0x0005,
 	0x2001, 0x0036, 0x2009, 0x1820, 0x210c, 0x2011, 0x181f, 0x2214,
 	0x080c, 0x1679, 0x0005, 0x7808, 0xd09c, 0x0de8, 0x7820, 0x0005,
 	0x080c, 0x155f, 0x00d6, 0x2069, 0x0200, 0x2009, 0x01f4, 0x8109,
@@ -506,7 +506,7 @@
 	0x810c, 0x080c, 0x166b, 0x6827, 0x0001, 0x8109, 0x1dd0, 0x04d9,
 	0x6827, 0x0002, 0x04c1, 0x6804, 0x9005, 0x1130, 0x682c, 0xd0e4,
 	0x1500, 0x6804, 0x9005, 0x0de8, 0x79b8, 0xd1ec, 0x1130, 0x08c0,
-	0x080c, 0x7f85, 0x080c, 0x1ab5, 0x0090, 0x7827, 0x0015, 0x782b,
+	0x080c, 0x7f99, 0x080c, 0x1ab5, 0x0090, 0x7827, 0x0015, 0x782b,
 	0x0000, 0x7827, 0x0018, 0x782b, 0x0000, 0x2001, 0x020d, 0x2003,
 	0x0020, 0x2001, 0x0307, 0x2003, 0x0300, 0x7803, 0x0001, 0x00de,
 	0x0005, 0x682c, 0x9084, 0x5400, 0x9086, 0x5400, 0x0d30, 0x7827,
@@ -527,9 +527,9 @@
 	0xd08c, 0x0904, 0x1726, 0x7017, 0x0000, 0x2001, 0x0264, 0x2004,
 	0xd0bc, 0x0904, 0x1726, 0x2001, 0x0268, 0x00c6, 0x2064, 0x6104,
 	0x6038, 0x00ce, 0x918e, 0x0039, 0x1904, 0x1726, 0x9c06, 0x15f0,
-	0x0126, 0x2091, 0x2600, 0x080c, 0x7edd, 0x012e, 0x7358, 0x745c,
+	0x0126, 0x2091, 0x2600, 0x080c, 0x7ef1, 0x012e, 0x7358, 0x745c,
 	0x6014, 0x905d, 0x0598, 0x2b48, 0x6010, 0x00b6, 0x2058, 0xb800,
-	0x00be, 0xd0bc, 0x190c, 0xcbeb, 0xab42, 0xac3e, 0x2001, 0x1869,
+	0x00be, 0xd0bc, 0x190c, 0xcc0f, 0xab42, 0xac3e, 0x2001, 0x1869,
 	0x2004, 0xd0b4, 0x1170, 0x601c, 0xd0e4, 0x1158, 0x6010, 0x00b6,
 	0x2058, 0xb800, 0x00be, 0xd0bc, 0x1120, 0xa83b, 0x7fff, 0xa837,
 	0xffff, 0x080c, 0x1e75, 0x1190, 0x080c, 0x1913, 0x2a00, 0xa816,
@@ -544,7 +544,7 @@
 	0x918e, 0x0048, 0x0904, 0x17c1, 0x9085, 0x0001, 0x0804, 0x18ad,
 	0xa87c, 0xd0ac, 0x0dc8, 0x0804, 0x17d1, 0xa87c, 0xd0ac, 0x0da0,
 	0x0804, 0x183c, 0xa898, 0x901d, 0x1108, 0xab9c, 0x9016, 0xaab2,
-	0xaa3e, 0xaa42, 0x3e00, 0x9080, 0x0008, 0x2004, 0x9080, 0x9110,
+	0xaa3e, 0xaa42, 0x3e00, 0x9080, 0x0008, 0x2004, 0x9080, 0x9141,
 	0x2005, 0x9005, 0x090c, 0x0d7d, 0x2004, 0xa8ae, 0x0804, 0x1895,
 	0xa87c, 0xd0bc, 0x09c8, 0xa890, 0xa842, 0xa88c, 0xa83e, 0xa888,
 	0x0804, 0x17d1, 0xa87c, 0xd0bc, 0x0978, 0xa890, 0xa842, 0xa88c,
@@ -639,7 +639,7 @@
 	0xa887, 0x0001, 0x0008, 0xa986, 0x601b, 0x0002, 0xa974, 0xd1dc,
 	0x1108, 0x0005, 0xa934, 0xa88c, 0x9106, 0x1158, 0xa938, 0xa890,
 	0x9106, 0x1138, 0x601c, 0xc084, 0x601e, 0x2009, 0x0048, 0x0804,
-	0xac68, 0x0005, 0x0126, 0x00c6, 0x2091, 0x2200, 0x00ce, 0x7908,
+	0xac8c, 0x0005, 0x0126, 0x00c6, 0x2091, 0x2200, 0x00ce, 0x7908,
 	0x918c, 0x0007, 0x9186, 0x0000, 0x05b0, 0x9186, 0x0003, 0x0598,
 	0x6020, 0x6023, 0x0000, 0x0006, 0x2031, 0x0008, 0x00c6, 0x781f,
 	0x0808, 0x7808, 0xd09c, 0x0120, 0x080c, 0x13a3, 0x8631, 0x1db8,
@@ -649,18 +649,18 @@
 	0x001e, 0x8001, 0x1df0, 0x8631, 0x1d40, 0x080c, 0x1b51, 0x000e,
 	0x6022, 0x012e, 0x0005, 0x080c, 0x1b3e, 0x7827, 0x0015, 0x7828,
 	0x9c06, 0x1db8, 0x782b, 0x0000, 0x0ca0, 0x00f6, 0x2079, 0x0300,
-	0x7803, 0x0000, 0x78ab, 0x0004, 0x00fe, 0x080c, 0x74d5, 0x11b0,
+	0x7803, 0x0000, 0x78ab, 0x0004, 0x00fe, 0x080c, 0x74e9, 0x11b0,
 	0x2001, 0x0138, 0x2003, 0x0000, 0x2001, 0x0160, 0x2003, 0x0000,
 	0x2011, 0x012c, 0xa001, 0xa001, 0x8211, 0x1de0, 0x0081, 0x2001,
-	0x0386, 0x2003, 0x2020, 0x080c, 0x7576, 0x0005, 0x0479, 0x0039,
+	0x0386, 0x2003, 0x2020, 0x080c, 0x758a, 0x0005, 0x0479, 0x0039,
 	0x2001, 0x0160, 0x2502, 0x2001, 0x0138, 0x2202, 0x0005, 0x00e6,
 	0x2071, 0x0200, 0x080c, 0x29fc, 0x2009, 0x003c, 0x080c, 0x21b0,
 	0x2001, 0x015d, 0x2003, 0x0000, 0x7000, 0x9084, 0x003c, 0x1de0,
-	0x080c, 0x8522, 0x70a0, 0x70a2, 0x7098, 0x709a, 0x709c, 0x709e,
+	0x080c, 0x8553, 0x70a0, 0x70a2, 0x7098, 0x709a, 0x709c, 0x709e,
 	0x2001, 0x020d, 0x2003, 0x0020, 0x00f6, 0x2079, 0x0300, 0x080c,
 	0x133c, 0x7803, 0x0001, 0x00fe, 0x00ee, 0x0005, 0x2001, 0x0138,
 	0x2014, 0x2003, 0x0000, 0x2001, 0x0160, 0x202c, 0x2003, 0x0000,
-	0x080c, 0x74d5, 0x1108, 0x0005, 0x2021, 0x0260, 0x2001, 0x0141,
+	0x080c, 0x74e9, 0x1108, 0x0005, 0x2021, 0x0260, 0x2001, 0x0141,
 	0x201c, 0xd3dc, 0x1168, 0x2001, 0x0109, 0x201c, 0x939c, 0x0048,
 	0x1160, 0x2001, 0x0111, 0x201c, 0x83ff, 0x1110, 0x8421, 0x1d70,
 	0x2001, 0x015d, 0x2003, 0x0000, 0x0005, 0x0046, 0x2021, 0x0019,
@@ -736,13 +736,13 @@
 	0x3e60, 0x6044, 0x9105, 0x6046, 0x0804, 0x1d0e, 0x080c, 0x0d7d,
 	0x00f6, 0x00e6, 0x0096, 0x00c6, 0x0026, 0x704c, 0x9c06, 0x190c,
 	0x0d7d, 0x2079, 0x0090, 0x2001, 0x0105, 0x2003, 0x0010, 0x782b,
-	0x0004, 0x7057, 0x0000, 0x6014, 0x2048, 0x080c, 0xc814, 0x0118,
+	0x0004, 0x7057, 0x0000, 0x6014, 0x2048, 0x080c, 0xc838, 0x0118,
 	0xa880, 0xc0bd, 0xa882, 0x6020, 0x9086, 0x0006, 0x1170, 0x2061,
 	0x0100, 0x62c8, 0x2001, 0x00fa, 0x8001, 0x1df0, 0x60c8, 0x9206,
 	0x1dc0, 0x60c4, 0xa89a, 0x60c8, 0xa896, 0x704c, 0x2060, 0x00c6,
-	0x080c, 0xc41f, 0x080c, 0xa872, 0x00ce, 0x704c, 0x9c06, 0x1150,
-	0x2009, 0x0040, 0x080c, 0x21b0, 0x080c, 0xa32a, 0x2011, 0x0000,
-	0x080c, 0xa1b5, 0x002e, 0x00ce, 0x009e, 0x00ee, 0x00fe, 0x0005,
+	0x080c, 0xc443, 0x080c, 0xa896, 0x00ce, 0x704c, 0x9c06, 0x1150,
+	0x2009, 0x0040, 0x080c, 0x21b0, 0x080c, 0xa34e, 0x2011, 0x0000,
+	0x080c, 0xa1d9, 0x002e, 0x00ce, 0x009e, 0x00ee, 0x00fe, 0x0005,
 	0x00f6, 0x2079, 0x0090, 0x781c, 0x0006, 0x7818, 0x0006, 0x2079,
 	0x0100, 0x7a14, 0x9284, 0x1984, 0x9085, 0x0012, 0x7816, 0x2019,
 	0x1000, 0x8319, 0x090c, 0x0d7d, 0x7820, 0xd0bc, 0x1dd0, 0x79c8,
@@ -751,12 +751,12 @@
 	0x2079, 0x0090, 0x782b, 0x0008, 0x7057, 0x0000, 0x00fe, 0x0005,
 	0x00f6, 0x00e6, 0x2071, 0x19e7, 0x7054, 0x9086, 0x0000, 0x0904,
 	0x1e26, 0x2079, 0x0090, 0x2009, 0x0207, 0x210c, 0xd194, 0x01b8,
-	0x2009, 0x020c, 0x210c, 0x9184, 0x0003, 0x0188, 0x080c, 0xe6f8,
+	0x2009, 0x020c, 0x210c, 0x9184, 0x0003, 0x0188, 0x080c, 0xe723,
 	0x2001, 0x0133, 0x2004, 0x9005, 0x090c, 0x0d7d, 0x0016, 0x2009,
 	0x0040, 0x080c, 0x21b0, 0x001e, 0x2001, 0x020c, 0x2102, 0x2009,
 	0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0x9106, 0x1120, 0x2009,
-	0x0040, 0x080c, 0x21b0, 0x782c, 0xd0fc, 0x09a8, 0x080c, 0xa88e,
-	0x782c, 0xd0fc, 0x1de8, 0x080c, 0xa872, 0x7054, 0x9086, 0x0000,
+	0x0040, 0x080c, 0x21b0, 0x782c, 0xd0fc, 0x09a8, 0x080c, 0xa8b2,
+	0x782c, 0xd0fc, 0x1de8, 0x080c, 0xa896, 0x7054, 0x9086, 0x0000,
 	0x1950, 0x782b, 0x0004, 0x782c, 0xd0ac, 0x1de8, 0x2009, 0x0040,
 	0x080c, 0x21b0, 0x782b, 0x0002, 0x7057, 0x0000, 0x00ee, 0x00fe,
 	0x0005, 0x080c, 0x0d7d, 0x8c60, 0x2c05, 0x9005, 0x0110, 0x8a51,
@@ -841,17 +841,17 @@
 	0x783b, 0x001f, 0x7837, 0x0020, 0x7803, 0x1600, 0x012e, 0x0005,
 	0x2091, 0x2600, 0x781c, 0xd0a4, 0x190c, 0x21ad, 0x7900, 0xd1dc,
 	0x1118, 0x9084, 0x0006, 0x001a, 0x9084, 0x000e, 0x0002, 0x20cf,
-	0x20c7, 0x7edd, 0x20c7, 0x20c9, 0x20c9, 0x20c9, 0x20c9, 0x7ec3,
+	0x20c7, 0x7ef1, 0x20c7, 0x20c9, 0x20c9, 0x20c9, 0x20c9, 0x7ed7,
 	0x20c7, 0x20cb, 0x20c7, 0x20c9, 0x20c7, 0x20c9, 0x20c7, 0x080c,
-	0x0d7d, 0x0031, 0x0020, 0x080c, 0x7ec3, 0x080c, 0x7edd, 0x0005,
-	0x0006, 0x0016, 0x0026, 0x080c, 0xe6f8, 0x7930, 0x9184, 0x0003,
-	0x01f0, 0x080c, 0xa872, 0x2001, 0x19fa, 0x2004, 0x9005, 0x0180,
+	0x0d7d, 0x0031, 0x0020, 0x080c, 0x7ed7, 0x080c, 0x7ef1, 0x0005,
+	0x0006, 0x0016, 0x0026, 0x080c, 0xe723, 0x7930, 0x9184, 0x0003,
+	0x01f0, 0x080c, 0xa896, 0x2001, 0x19fa, 0x2004, 0x9005, 0x0180,
 	0x2001, 0x0133, 0x2004, 0x9005, 0x090c, 0x0d7d, 0x00c6, 0x2001,
-	0x19fa, 0x2064, 0x080c, 0xa88e, 0x080c, 0xc41f, 0x00ce, 0x0408,
-	0x2009, 0x0040, 0x080c, 0x21b0, 0x080c, 0xa88e, 0x00d0, 0x9184,
-	0x0014, 0x01a0, 0x6a00, 0x9286, 0x0003, 0x0160, 0x080c, 0x74d5,
-	0x1138, 0x080c, 0x77d9, 0x080c, 0x6022, 0x080c, 0x7406, 0x0010,
-	0x080c, 0x5edd, 0x080c, 0x7f7b, 0x0041, 0x0018, 0x9184, 0x9540,
+	0x19fa, 0x2064, 0x080c, 0xa8b2, 0x080c, 0xc443, 0x00ce, 0x0408,
+	0x2009, 0x0040, 0x080c, 0x21b0, 0x080c, 0xa8b2, 0x00d0, 0x9184,
+	0x0014, 0x01a0, 0x6a00, 0x9286, 0x0003, 0x0160, 0x080c, 0x74e9,
+	0x1138, 0x080c, 0x77ed, 0x080c, 0x6029, 0x080c, 0x741a, 0x0010,
+	0x080c, 0x5ee4, 0x080c, 0x7f8f, 0x0041, 0x0018, 0x9184, 0x9540,
 	0x1dc8, 0x002e, 0x001e, 0x000e, 0x0005, 0x00e6, 0x0036, 0x0046,
 	0x0056, 0x2071, 0x1a6b, 0x080c, 0x1ab5, 0x005e, 0x004e, 0x003e,
 	0x00ee, 0x0005, 0x0126, 0x2091, 0x2e00, 0x2071, 0x1800, 0x7128,
@@ -900,93 +900,93 @@
 	0x001e, 0x0d30, 0x0c58, 0x2286, 0x2283, 0x2283, 0x2283, 0x2285,
 	0x2283, 0x2283, 0x2283, 0x080c, 0x0d7d, 0x0029, 0x002e, 0x001e,
 	0x000e, 0x012e, 0x0005, 0x00a6, 0x6124, 0x6028, 0xd09c, 0x0118,
-	0xd19c, 0x1904, 0x2500, 0xd1f4, 0x190c, 0x0d76, 0x080c, 0x74d5,
-	0x0904, 0x22e3, 0x080c, 0xcf2e, 0x1120, 0x7000, 0x9086, 0x0003,
-	0x0580, 0x6024, 0x9084, 0x1800, 0x0560, 0x080c, 0x74f8, 0x0118,
-	0x080c, 0x74e6, 0x1530, 0x2011, 0x0020, 0x080c, 0x2a44, 0x6043,
-	0x0000, 0x080c, 0xcf2e, 0x0168, 0x080c, 0x74f8, 0x1150, 0x2001,
-	0x19a7, 0x2003, 0x0001, 0x6027, 0x1800, 0x080c, 0x734b, 0x0804,
+	0xd19c, 0x1904, 0x2500, 0xd1f4, 0x190c, 0x0d76, 0x080c, 0x74e9,
+	0x0904, 0x22e3, 0x080c, 0xcf52, 0x1120, 0x7000, 0x9086, 0x0003,
+	0x0580, 0x6024, 0x9084, 0x1800, 0x0560, 0x080c, 0x750c, 0x0118,
+	0x080c, 0x74fa, 0x1530, 0x2011, 0x0020, 0x080c, 0x2a44, 0x6043,
+	0x0000, 0x080c, 0xcf52, 0x0168, 0x080c, 0x750c, 0x1150, 0x2001,
+	0x19a7, 0x2003, 0x0001, 0x6027, 0x1800, 0x080c, 0x735f, 0x0804,
 	0x2503, 0x70a4, 0x9005, 0x1150, 0x70a7, 0x0001, 0x00d6, 0x2069,
-	0x0140, 0x080c, 0x752c, 0x00de, 0x1904, 0x2503, 0x080c, 0x77e3,
-	0x0428, 0x080c, 0x74f8, 0x1590, 0x6024, 0x9084, 0x1800, 0x1108,
-	0x0468, 0x080c, 0x77e3, 0x080c, 0x77d9, 0x080c, 0x6022, 0x080c,
-	0x7406, 0x0804, 0x2500, 0xd1ac, 0x1508, 0x6024, 0xd0dc, 0x1170,
+	0x0140, 0x080c, 0x7540, 0x00de, 0x1904, 0x2503, 0x080c, 0x77f7,
+	0x0428, 0x080c, 0x750c, 0x1590, 0x6024, 0x9084, 0x1800, 0x1108,
+	0x0468, 0x080c, 0x77f7, 0x080c, 0x77ed, 0x080c, 0x6029, 0x080c,
+	0x741a, 0x0804, 0x2500, 0xd1ac, 0x1508, 0x6024, 0xd0dc, 0x1170,
 	0xd0e4, 0x1178, 0xd0d4, 0x1190, 0xd0cc, 0x0130, 0x7098, 0x9086,
-	0x0028, 0x1110, 0x080c, 0x76ba, 0x0804, 0x2500, 0x080c, 0x77de,
-	0x0048, 0x2001, 0x197d, 0x2003, 0x0002, 0x0020, 0x080c, 0x7617,
-	0x0804, 0x2500, 0x080c, 0x775d, 0x0804, 0x2500, 0x6220, 0xd1bc,
+	0x0028, 0x1110, 0x080c, 0x76ce, 0x0804, 0x2500, 0x080c, 0x77f2,
+	0x0048, 0x2001, 0x197d, 0x2003, 0x0002, 0x0020, 0x080c, 0x762b,
+	0x0804, 0x2500, 0x080c, 0x7771, 0x0804, 0x2500, 0x6220, 0xd1bc,
 	0x0138, 0xd2bc, 0x1904, 0x2565, 0xd2b4, 0x1904, 0x2577, 0x0000,
 	0xd1ac, 0x0904, 0x240d, 0x0036, 0x6328, 0xc3bc, 0x632a, 0x003e,
-	0x080c, 0x74d5, 0x11d0, 0x2011, 0x0020, 0x080c, 0x2a44, 0x0006,
-	0x0026, 0x0036, 0x080c, 0x74ef, 0x1158, 0x080c, 0x77d9, 0x080c,
-	0x6022, 0x080c, 0x7406, 0x003e, 0x002e, 0x000e, 0x00ae, 0x0005,
-	0x003e, 0x002e, 0x000e, 0x080c, 0x74a9, 0x0016, 0x0046, 0x00c6,
+	0x080c, 0x74e9, 0x11d0, 0x2011, 0x0020, 0x080c, 0x2a44, 0x0006,
+	0x0026, 0x0036, 0x080c, 0x7503, 0x1158, 0x080c, 0x77ed, 0x080c,
+	0x6029, 0x080c, 0x741a, 0x003e, 0x002e, 0x000e, 0x00ae, 0x0005,
+	0x003e, 0x002e, 0x000e, 0x080c, 0x74bd, 0x0016, 0x0046, 0x00c6,
 	0x644c, 0x9486, 0xf0f0, 0x1138, 0x2061, 0x0100, 0x644a, 0x6043,
 	0x0090, 0x6043, 0x0010, 0x74da, 0x948c, 0xff00, 0x7038, 0xd084,
 	0x0178, 0x9186, 0xf800, 0x1160, 0x7048, 0xd084, 0x1148, 0xc085,
-	0x704a, 0x0036, 0x2418, 0x2011, 0x8016, 0x080c, 0x4b00, 0x003e,
-	0x080c, 0xcf27, 0x1904, 0x23e4, 0x9196, 0xff00, 0x05a8, 0x7060,
+	0x704a, 0x0036, 0x2418, 0x2011, 0x8016, 0x080c, 0x4b07, 0x003e,
+	0x080c, 0xcf4b, 0x1904, 0x23e4, 0x9196, 0xff00, 0x05a8, 0x7060,
 	0x9084, 0x00ff, 0x810f, 0x81ff, 0x0110, 0x9116, 0x0568, 0x7130,
-	0xd184, 0x1550, 0x080c, 0x3361, 0x0128, 0xc18d, 0x7132, 0x080c,
-	0x6a53, 0x1510, 0x6240, 0x9294, 0x0010, 0x0130, 0x6248, 0x9294,
+	0xd184, 0x1550, 0x080c, 0x3368, 0x0128, 0xc18d, 0x7132, 0x080c,
+	0x6a63, 0x1510, 0x6240, 0x9294, 0x0010, 0x0130, 0x6248, 0x9294,
 	0xff00, 0x9296, 0xff00, 0x01c0, 0x7030, 0xd08c, 0x0904, 0x23e4,
 	0x7038, 0xd08c, 0x1140, 0x2001, 0x180c, 0x200c, 0xd1ac, 0x1904,
 	0x23e4, 0xc1ad, 0x2102, 0x0036, 0x73d8, 0x2011, 0x8013, 0x080c,
-	0x4b00, 0x003e, 0x0804, 0x23e4, 0x7038, 0xd08c, 0x1140, 0x2001,
+	0x4b07, 0x003e, 0x0804, 0x23e4, 0x7038, 0xd08c, 0x1140, 0x2001,
 	0x180c, 0x200c, 0xd1ac, 0x1904, 0x23e4, 0xc1ad, 0x2102, 0x0036,
-	0x73d8, 0x2011, 0x8013, 0x080c, 0x4b00, 0x003e, 0x7130, 0xc185,
+	0x73d8, 0x2011, 0x8013, 0x080c, 0x4b07, 0x003e, 0x7130, 0xc185,
 	0x7132, 0x2011, 0x1848, 0x220c, 0xd1a4, 0x01f0, 0x0016, 0x2009,
-	0x0001, 0x2011, 0x0100, 0x080c, 0x88bb, 0x2019, 0x000e, 0x00c6,
-	0x2061, 0x0000, 0x080c, 0xe20e, 0x00ce, 0x9484, 0x00ff, 0x9080,
-	0x336d, 0x200d, 0x918c, 0xff00, 0x810f, 0x2120, 0x9006, 0x2009,
-	0x000e, 0x080c, 0xe29e, 0x001e, 0x0016, 0x2009, 0x0002, 0x2019,
-	0x0004, 0x080c, 0x31a3, 0x001e, 0x0078, 0x0156, 0x00b6, 0x20a9,
-	0x007f, 0x900e, 0x080c, 0x661e, 0x1110, 0x080c, 0x603c, 0x8108,
-	0x1f04, 0x23da, 0x00be, 0x015e, 0x00ce, 0x004e, 0x080c, 0xa872,
-	0x080c, 0xab3a, 0x080c, 0xa88e, 0x60e3, 0x0000, 0x001e, 0x2001,
+	0x0001, 0x2011, 0x0100, 0x080c, 0x88ec, 0x2019, 0x000e, 0x00c6,
+	0x2061, 0x0000, 0x080c, 0xe239, 0x00ce, 0x9484, 0x00ff, 0x9080,
+	0x3374, 0x200d, 0x918c, 0xff00, 0x810f, 0x2120, 0x9006, 0x2009,
+	0x000e, 0x080c, 0xe2c9, 0x001e, 0x0016, 0x2009, 0x0002, 0x2019,
+	0x0004, 0x080c, 0x31a6, 0x001e, 0x0078, 0x0156, 0x00b6, 0x20a9,
+	0x007f, 0x900e, 0x080c, 0x6625, 0x1110, 0x080c, 0x6043, 0x8108,
+	0x1f04, 0x23da, 0x00be, 0x015e, 0x00ce, 0x004e, 0x080c, 0xa896,
+	0x080c, 0xab5e, 0x080c, 0xa8b2, 0x60e3, 0x0000, 0x001e, 0x2001,
 	0x1800, 0x2014, 0x9296, 0x0004, 0x1170, 0xd19c, 0x11b0, 0x2011,
 	0x180c, 0x2214, 0xd29c, 0x1120, 0x6204, 0x9295, 0x0002, 0x6206,
 	0x6228, 0xc29d, 0x622a, 0x2003, 0x0001, 0x2001, 0x1826, 0x2003,
 	0x0000, 0x2011, 0x0020, 0x080c, 0x2a44, 0xd194, 0x0904, 0x2500,
-	0x0016, 0x080c, 0xa872, 0x6220, 0xd2b4, 0x0904, 0x249b, 0x080c,
-	0x86c5, 0x080c, 0x9e0e, 0x2011, 0x0004, 0x080c, 0x2a44, 0x00f6,
+	0x0016, 0x080c, 0xa896, 0x6220, 0xd2b4, 0x0904, 0x249b, 0x080c,
+	0x86f6, 0x080c, 0x9e32, 0x2011, 0x0004, 0x080c, 0x2a44, 0x00f6,
 	0x2019, 0x19f3, 0x2304, 0x907d, 0x0904, 0x2468, 0x7804, 0x9086,
 	0x0032, 0x15f0, 0x00d6, 0x00c6, 0x00e6, 0x0096, 0x2069, 0x0140,
 	0x782c, 0x685e, 0x7808, 0x685a, 0x6043, 0x0002, 0x2001, 0x0003,
 	0x8001, 0x1df0, 0x6043, 0x0000, 0x2001, 0x003c, 0x8001, 0x1df0,
 	0x080c, 0x2a1a, 0x2001, 0x001e, 0x8001, 0x0240, 0x20a9, 0x0009,
 	0x080c, 0x29d1, 0x6904, 0xd1dc, 0x1140, 0x0cb0, 0x2001, 0x0100,
-	0x080c, 0x2a0a, 0x9006, 0x080c, 0x2a0a, 0x080c, 0x95ad, 0x080c,
-	0xa88e, 0x7814, 0x2048, 0xa867, 0x0103, 0x2f60, 0x080c, 0xabc9,
+	0x080c, 0x2a0a, 0x9006, 0x080c, 0x2a0a, 0x080c, 0x95de, 0x080c,
+	0xa8b2, 0x7814, 0x2048, 0xa867, 0x0103, 0x2f60, 0x080c, 0xabed,
 	0x009e, 0x00ee, 0x00ce, 0x00de, 0x00fe, 0x001e, 0x00ae, 0x0005,
 	0x00fe, 0x00d6, 0x2069, 0x0140, 0x6804, 0x9084, 0x4000, 0x0110,
 	0x080c, 0x2a1a, 0x00de, 0x00c6, 0x2061, 0x19e7, 0x6034, 0x080c,
-	0xcf2e, 0x0120, 0x909a, 0x0003, 0x1258, 0x0018, 0x909a, 0x00c8,
-	0x1238, 0x8000, 0x6036, 0x00ce, 0x080c, 0x9de6, 0x0804, 0x24fd,
-	0x2061, 0x0100, 0x62c0, 0x080c, 0xa7a8, 0x2019, 0x19f3, 0x2304,
-	0x9065, 0x0130, 0x6003, 0x0001, 0x2009, 0x0027, 0x080c, 0xac68,
-	0x00ce, 0x0804, 0x24fd, 0xd2bc, 0x0904, 0x24e0, 0x080c, 0x86d2,
+	0xcf52, 0x0120, 0x909a, 0x0003, 0x1258, 0x0018, 0x909a, 0x00c8,
+	0x1238, 0x8000, 0x6036, 0x00ce, 0x080c, 0x9e0a, 0x0804, 0x24fd,
+	0x2061, 0x0100, 0x62c0, 0x080c, 0xa7cc, 0x2019, 0x19f3, 0x2304,
+	0x9065, 0x0130, 0x6003, 0x0001, 0x2009, 0x0027, 0x080c, 0xac8c,
+	0x00ce, 0x0804, 0x24fd, 0xd2bc, 0x0904, 0x24e0, 0x080c, 0x8703,
 	0x2011, 0x0004, 0x080c, 0x2a44, 0x00d6, 0x2069, 0x0140, 0x6804,
 	0x9084, 0x4000, 0x0110, 0x080c, 0x2a1a, 0x00de, 0x00c6, 0x2061,
-	0x19e7, 0x6050, 0x080c, 0xcf2e, 0x0120, 0x909a, 0x0003, 0x1668,
+	0x19e7, 0x6050, 0x080c, 0xcf52, 0x0120, 0x909a, 0x0003, 0x1668,
 	0x0018, 0x909a, 0x00c8, 0x1648, 0x8000, 0x6052, 0x604c, 0x00ce,
-	0x9005, 0x05d8, 0x2009, 0x07d0, 0x080c, 0x86ca, 0x9080, 0x0008,
+	0x9005, 0x05d8, 0x2009, 0x07d0, 0x080c, 0x86fb, 0x9080, 0x0008,
 	0x2004, 0x9086, 0x0006, 0x1138, 0x2009, 0x1984, 0x2011, 0x0012,
 	0x080c, 0x2a53, 0x0450, 0x9080, 0x0008, 0x2004, 0x9086, 0x0009,
 	0x0d98, 0x2009, 0x1984, 0x2011, 0x0016, 0x080c, 0x2a53, 0x00e8,
 	0x2011, 0x0004, 0x080c, 0x2a44, 0x00c0, 0x0036, 0x2019, 0x0001,
-	0x080c, 0xa0f4, 0x003e, 0x2019, 0x19fa, 0x2304, 0x9065, 0x0160,
+	0x080c, 0xa118, 0x003e, 0x2019, 0x19fa, 0x2304, 0x9065, 0x0160,
 	0x2009, 0x004f, 0x6020, 0x9086, 0x0009, 0x1110, 0x2009, 0x004f,
-	0x6003, 0x0003, 0x080c, 0xac68, 0x00ce, 0x080c, 0xa88e, 0x001e,
+	0x6003, 0x0003, 0x080c, 0xac8c, 0x00ce, 0x080c, 0xa8b2, 0x001e,
 	0xd19c, 0x0904, 0x255e, 0x7038, 0xd0ac, 0x1538, 0x0016, 0x0156,
 	0x2011, 0x0008, 0x080c, 0x2a44, 0x6050, 0xc0e5, 0x6052, 0x20a9,
-	0x0367, 0x1f04, 0x252b, 0x1d04, 0x2513, 0x080c, 0x86f9, 0x6020,
+	0x0367, 0x1f04, 0x252b, 0x1d04, 0x2513, 0x080c, 0x872a, 0x6020,
 	0xd09c, 0x1db8, 0x00f6, 0x2079, 0x0100, 0x080c, 0x2981, 0x00fe,
 	0x1d80, 0x6050, 0xc0e4, 0x6052, 0x2011, 0x0008, 0x080c, 0x2a44,
 	0x015e, 0x001e, 0x0498, 0x015e, 0x001e, 0x0016, 0x6028, 0xc09c,
-	0x602a, 0x080c, 0xa872, 0x080c, 0xab3a, 0x080c, 0xa88e, 0x60e3,
-	0x0000, 0x080c, 0xe6d7, 0x080c, 0xe6f2, 0x080c, 0x56d7, 0xd0fc,
-	0x1138, 0x080c, 0xcf27, 0x1120, 0x9085, 0x0001, 0x080c, 0x751c,
+	0x602a, 0x080c, 0xa896, 0x080c, 0xab5e, 0x080c, 0xa8b2, 0x60e3,
+	0x0000, 0x080c, 0xe702, 0x080c, 0xe71d, 0x080c, 0x56de, 0xd0fc,
+	0x1138, 0x080c, 0xcf4b, 0x1120, 0x9085, 0x0001, 0x080c, 0x7530,
 	0x9006, 0x080c, 0x2a0a, 0x2009, 0x0002, 0x080c, 0x29f6, 0x00e6,
 	0x2071, 0x1800, 0x7003, 0x0004, 0x080c, 0x0eb4, 0x00ee, 0x2011,
 	0x0008, 0x080c, 0x2a44, 0x080c, 0x0bc3, 0x001e, 0x918c, 0xffd0,
@@ -1002,34 +1002,34 @@
 	0x8000, 0x2071, 0x1800, 0x71d0, 0x70d2, 0x9116, 0x0904, 0x25f3,
 	0x81ff, 0x01a0, 0x2009, 0x0000, 0x080c, 0x29f6, 0x2011, 0x8011,
 	0x2019, 0x010e, 0x231c, 0x939e, 0x0007, 0x1118, 0x2019, 0x0001,
-	0x0010, 0x2019, 0x0000, 0x080c, 0x4b00, 0x0468, 0x2001, 0x19a8,
+	0x0010, 0x2019, 0x0000, 0x080c, 0x4b07, 0x0468, 0x2001, 0x19a8,
 	0x200c, 0x81ff, 0x1140, 0x2001, 0x0109, 0x2004, 0xd0b4, 0x0118,
-	0x2019, 0x0003, 0x0008, 0x2118, 0x2011, 0x8012, 0x080c, 0x4b00,
-	0x080c, 0x0eb4, 0x080c, 0x56d7, 0xd0fc, 0x11a8, 0x080c, 0xcf27,
-	0x1190, 0x00c6, 0x080c, 0x268f, 0x080c, 0xa872, 0x080c, 0xa04f,
-	0x080c, 0xa88e, 0x2061, 0x0100, 0x2019, 0x0028, 0x2009, 0x0002,
-	0x080c, 0x31a3, 0x00ce, 0x012e, 0x00fe, 0x00ee, 0x003e, 0x002e,
+	0x2019, 0x0003, 0x0008, 0x2118, 0x2011, 0x8012, 0x080c, 0x4b07,
+	0x080c, 0x0eb4, 0x080c, 0x56de, 0xd0fc, 0x11a8, 0x080c, 0xcf4b,
+	0x1190, 0x00c6, 0x080c, 0x268f, 0x080c, 0xa896, 0x080c, 0xa073,
+	0x080c, 0xa8b2, 0x2061, 0x0100, 0x2019, 0x0028, 0x2009, 0x0002,
+	0x080c, 0x31a6, 0x00ce, 0x012e, 0x00fe, 0x00ee, 0x003e, 0x002e,
 	0x001e, 0x000e, 0x0005, 0x2028, 0x918c, 0x00ff, 0x2130, 0x9094,
 	0xff00, 0x11f0, 0x2011, 0x1837, 0x2214, 0xd2ac, 0x11c8, 0x81ff,
 	0x01e8, 0x2011, 0x181f, 0x2204, 0x9106, 0x1190, 0x2011, 0x1820,
 	0x2214, 0x9294, 0xff00, 0x9584, 0xff00, 0x9206, 0x1148, 0x2011,
 	0x1820, 0x2214, 0x9294, 0x00ff, 0x9584, 0x00ff, 0x9206, 0x1120,
-	0x2500, 0x080c, 0x81ce, 0x0048, 0x9584, 0x00ff, 0x9080, 0x336d,
-	0x200d, 0x918c, 0xff00, 0x810f, 0x9006, 0x0005, 0x9080, 0x336d,
+	0x2500, 0x080c, 0x81ff, 0x0048, 0x9584, 0x00ff, 0x9080, 0x3374,
+	0x200d, 0x918c, 0xff00, 0x810f, 0x9006, 0x0005, 0x9080, 0x3374,
 	0x200d, 0x918c, 0x00ff, 0x0005, 0x00d6, 0x2069, 0x0140, 0x2001,
 	0x1818, 0x2003, 0x00ef, 0x20a9, 0x0010, 0x9006, 0x6852, 0x6856,
 	0x1f04, 0x263f, 0x00de, 0x0005, 0x0006, 0x00d6, 0x0026, 0x2069,
 	0x0140, 0x2001, 0x1818, 0x2102, 0x8114, 0x8214, 0x8214, 0x8214,
 	0x20a9, 0x0010, 0x6853, 0x0000, 0x9006, 0x82ff, 0x1128, 0x9184,
-	0x000f, 0x9080, 0xe706, 0x2005, 0x6856, 0x8211, 0x1f04, 0x2654,
+	0x000f, 0x9080, 0xe731, 0x2005, 0x6856, 0x8211, 0x1f04, 0x2654,
 	0x002e, 0x00de, 0x000e, 0x0005, 0x00c6, 0x2061, 0x1800, 0x6030,
 	0x0110, 0xc09d, 0x0008, 0xc09c, 0x6032, 0x00ce, 0x0005, 0x0156,
 	0x00d6, 0x0026, 0x0016, 0x0006, 0x2069, 0x0140, 0x6980, 0x9116,
 	0x0180, 0x9112, 0x1230, 0x8212, 0x8210, 0x22a8, 0x2001, 0x0402,
 	0x0018, 0x22a8, 0x2001, 0x0404, 0x680e, 0x1f04, 0x2684, 0x680f,
 	0x0000, 0x000e, 0x001e, 0x002e, 0x00de, 0x015e, 0x0005, 0x080c,
-	0x56d3, 0xd0c4, 0x0150, 0xd0a4, 0x0140, 0x9006, 0x0046, 0x2020,
-	0x2009, 0x002e, 0x080c, 0xe29e, 0x004e, 0x0005, 0x00f6, 0x0016,
+	0x56da, 0xd0c4, 0x0150, 0xd0a4, 0x0140, 0x9006, 0x0046, 0x2020,
+	0x2009, 0x002e, 0x080c, 0xe2c9, 0x004e, 0x0005, 0x00f6, 0x0016,
 	0x0026, 0x2079, 0x0140, 0x78c4, 0xd0dc, 0x0904, 0x26fb, 0x080c,
 	0x2971, 0x0660, 0x9084, 0x0700, 0x908e, 0x0600, 0x1120, 0x2011,
 	0x4000, 0x900e, 0x0458, 0x908e, 0x0500, 0x1120, 0x2011, 0x8000,
@@ -1038,9 +1038,9 @@
 	0x908e, 0x0200, 0x1120, 0x9016, 0x2009, 0x0004, 0x0078, 0x908e,
 	0x0100, 0x1548, 0x9016, 0x2009, 0x0008, 0x0040, 0x9084, 0x0700,
 	0x908e, 0x0300, 0x1500, 0x2011, 0x0030, 0x0058, 0x2300, 0x9080,
-	0x0020, 0x2018, 0x080c, 0x9135, 0x928c, 0xff00, 0x0110, 0x2011,
+	0x0020, 0x2018, 0x080c, 0x9166, 0x928c, 0xff00, 0x0110, 0x2011,
 	0x00ff, 0x2200, 0x8007, 0x9085, 0x004c, 0x78c2, 0x2009, 0x0138,
-	0x220a, 0x080c, 0x74d5, 0x1118, 0x2009, 0x196d, 0x220a, 0x002e,
+	0x220a, 0x080c, 0x74e9, 0x1118, 0x2009, 0x196d, 0x220a, 0x002e,
 	0x001e, 0x00fe, 0x0005, 0x78c3, 0x0000, 0x0cc8, 0x0126, 0x2091,
 	0x2800, 0x0006, 0x0016, 0x0026, 0x2001, 0x0170, 0x200c, 0x8000,
 	0x2014, 0x9184, 0x0003, 0x0110, 0x080c, 0x0d76, 0x002e, 0x001e,
@@ -1056,17 +1056,17 @@
 	0x27ca, 0x2001, 0x0001, 0x080c, 0x25a0, 0x080c, 0x29bb, 0x2001,
 	0x1992, 0x2003, 0x0000, 0x7828, 0x9084, 0xe1d7, 0x782a, 0x9006,
 	0x20a9, 0x0009, 0x080c, 0x298d, 0x2001, 0x1990, 0x2003, 0x0006,
-	0x2009, 0x001e, 0x2011, 0x27cb, 0x080c, 0x86d7, 0x0005, 0x2009,
+	0x2009, 0x001e, 0x2011, 0x27cb, 0x080c, 0x8708, 0x0005, 0x2009,
 	0x1995, 0x200b, 0x0000, 0x2001, 0x199a, 0x2003, 0x0036, 0x2001,
 	0x1999, 0x2003, 0x002a, 0x2001, 0x1992, 0x2003, 0x0001, 0x9006,
 	0x080c, 0x2928, 0x2001, 0xffff, 0x20a9, 0x0009, 0x080c, 0x298d,
 	0x2001, 0x1990, 0x2003, 0x0006, 0x2009, 0x001e, 0x2011, 0x27cb,
-	0x080c, 0x86d7, 0x0005, 0x080c, 0x0d7d, 0x2001, 0x199a, 0x2003,
+	0x080c, 0x8708, 0x0005, 0x080c, 0x0d7d, 0x2001, 0x199a, 0x2003,
 	0x0036, 0x2001, 0x1992, 0x2003, 0x0003, 0x7a38, 0x9294, 0x0005,
 	0x9296, 0x0004, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x080c,
 	0x2928, 0x2001, 0x1996, 0x2003, 0x0000, 0x2001, 0xffff, 0x20a9,
 	0x0009, 0x080c, 0x298d, 0x2001, 0x1990, 0x2003, 0x0006, 0x2009,
-	0x001e, 0x2011, 0x27cb, 0x080c, 0x86d7, 0x0005, 0x080c, 0x0d7d,
+	0x001e, 0x2011, 0x27cb, 0x080c, 0x8708, 0x0005, 0x080c, 0x0d7d,
 	0x080c, 0x0d7d, 0x0005, 0x0006, 0x0016, 0x0026, 0x00e6, 0x00f6,
 	0x0156, 0x0126, 0x2091, 0x8000, 0x2079, 0x0100, 0x2001, 0x1992,
 	0x2004, 0x908a, 0x0007, 0x1a0c, 0x0d7d, 0x0043, 0x012e, 0x015e,
@@ -1128,24 +1128,24 @@
 	0x0007, 0x0090, 0x9186, 0x0001, 0x1118, 0x783b, 0x0006, 0x0060,
 	0x9186, 0x0002, 0x1118, 0x783b, 0x0005, 0x0030, 0x9186, 0x0003,
 	0x1118, 0x783b, 0x0004, 0x0000, 0x0006, 0x1d04, 0x29ad, 0x080c,
-	0x86f9, 0x1f04, 0x29ad, 0x7850, 0x9085, 0x1000, 0x7852, 0x000e,
+	0x872a, 0x1f04, 0x29ad, 0x7850, 0x9085, 0x1000, 0x7852, 0x000e,
 	0x001e, 0x012e, 0x0005, 0x080c, 0x2aab, 0x0005, 0x0006, 0x0156,
 	0x00f6, 0x2079, 0x0100, 0x20a9, 0x000a, 0x7854, 0xd0ac, 0x1100,
 	0x7854, 0xd08c, 0x1110, 0x1f04, 0x29c8, 0x00fe, 0x015e, 0x000e,
-	0x0005, 0x1d04, 0x29d1, 0x080c, 0x86f9, 0x1f04, 0x29d1, 0x0005,
+	0x0005, 0x1d04, 0x29d1, 0x080c, 0x872a, 0x1f04, 0x29d1, 0x0005,
 	0x0006, 0x2001, 0x199c, 0x2004, 0x9086, 0x0000, 0x000e, 0x0005,
 	0x0006, 0x2001, 0x199c, 0x2004, 0x9086, 0x0001, 0x000e, 0x0005,
 	0x0006, 0x2001, 0x199c, 0x2004, 0x9086, 0x0002, 0x000e, 0x0005,
 	0xa001, 0xa001, 0xa001, 0xa001, 0xa001, 0x0005, 0x0006, 0x2001,
 	0x19a8, 0x2102, 0x000e, 0x0005, 0x2009, 0x0171, 0x2104, 0xd0dc,
 	0x0140, 0x2009, 0x0170, 0x2104, 0x200b, 0x0080, 0xa001, 0xa001,
-	0x200a, 0x0005, 0x0016, 0x0026, 0x080c, 0x74ef, 0x0108, 0xc0bc,
+	0x200a, 0x0005, 0x0016, 0x0026, 0x080c, 0x7503, 0x0108, 0xc0bc,
 	0x2009, 0x0140, 0x2114, 0x9294, 0x0001, 0x9215, 0x220a, 0x002e,
 	0x001e, 0x0005, 0x0016, 0x0026, 0x2009, 0x0140, 0x2114, 0x9294,
 	0x0001, 0x9285, 0x1000, 0x200a, 0x220a, 0x002e, 0x001e, 0x0005,
 	0x0016, 0x0026, 0x2009, 0x0140, 0x2114, 0x9294, 0x0001, 0x9215,
 	0x220a, 0x002e, 0x001e, 0x0005, 0x0006, 0x0016, 0x2009, 0x0140,
-	0x2104, 0x1128, 0x080c, 0x74ef, 0x0110, 0xc0bc, 0x0008, 0xc0bd,
+	0x2104, 0x1128, 0x080c, 0x7503, 0x0110, 0xc0bc, 0x0008, 0xc0bd,
 	0x200a, 0x001e, 0x000e, 0x0005, 0x00f6, 0x2079, 0x0380, 0x7843,
 	0x0101, 0x7844, 0xd084, 0x1de8, 0x2001, 0x0109, 0x2202, 0x7843,
 	0x0100, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0380, 0x7843, 0x0202,
@@ -1252,1935 +1252,1937 @@
 	0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
 	0x0156, 0x080c, 0x26fe, 0x080c, 0x207e, 0x080c, 0x2248, 0x080c,
 	0x13a3, 0x080c, 0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126,
-	0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0xa8d8, 0x0804,
+	0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0xa8fc, 0x0804,
 	0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
-	0x0156, 0x080c, 0xa8d8, 0x080c, 0x2248, 0x0804, 0x2fa9, 0x0106,
+	0x0156, 0x080c, 0xa8fc, 0x080c, 0x2248, 0x0804, 0x2fa9, 0x0106,
 	0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
-	0x207e, 0x080c, 0xa8d8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126,
+	0x207e, 0x080c, 0xa8fc, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126,
 	0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x207e, 0x080c,
-	0xa8d8, 0x080c, 0x2248, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126,
-	0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0xa8d8, 0x080c,
+	0xa8fc, 0x080c, 0x2248, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126,
+	0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0xa8fc, 0x080c,
 	0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
-	0x0136, 0x0146, 0x0156, 0x080c, 0xa8d8, 0x080c, 0x2248, 0x080c,
+	0x0136, 0x0146, 0x0156, 0x080c, 0xa8fc, 0x080c, 0x2248, 0x080c,
 	0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
-	0x0136, 0x0146, 0x0156, 0x080c, 0x207e, 0x080c, 0xa8d8, 0x080c,
+	0x0136, 0x0146, 0x0156, 0x080c, 0x207e, 0x080c, 0xa8fc, 0x080c,
 	0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
-	0x0136, 0x0146, 0x0156, 0x080c, 0x207e, 0x080c, 0xa8d8, 0x080c,
+	0x0136, 0x0146, 0x0156, 0x080c, 0x207e, 0x080c, 0xa8fc, 0x080c,
 	0x2248, 0x080c, 0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126,
-	0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0xa8d8, 0x080c,
+	0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0xa8fc, 0x080c,
 	0x13a3, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
-	0x0136, 0x0146, 0x0156, 0x080c, 0xa8d8, 0x080c, 0x2248, 0x080c,
+	0x0136, 0x0146, 0x0156, 0x080c, 0xa8fc, 0x080c, 0x2248, 0x080c,
 	0x13a3, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
-	0x0136, 0x0146, 0x0156, 0x080c, 0x207e, 0x080c, 0xa8d8, 0x080c,
+	0x0136, 0x0146, 0x0156, 0x080c, 0x207e, 0x080c, 0xa8fc, 0x080c,
 	0x13a3, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
-	0x0136, 0x0146, 0x0156, 0x080c, 0x207e, 0x080c, 0xa8d8, 0x080c,
+	0x0136, 0x0146, 0x0156, 0x080c, 0x207e, 0x080c, 0xa8fc, 0x080c,
 	0x2248, 0x080c, 0x13a3, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126,
-	0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0xa8d8, 0x080c,
+	0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0xa8fc, 0x080c,
 	0x13a3, 0x080c, 0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126,
-	0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0xa8d8, 0x080c,
+	0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0xa8fc, 0x080c,
 	0x2248, 0x080c, 0x13a3, 0x080c, 0x20a8, 0x0804, 0x2fa9, 0x0106,
 	0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
-	0x207e, 0x080c, 0xa8d8, 0x080c, 0x13a3, 0x080c, 0x20a8, 0x0804,
+	0x207e, 0x080c, 0xa8fc, 0x080c, 0x13a3, 0x080c, 0x20a8, 0x0804,
 	0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
-	0x0156, 0x080c, 0x207e, 0x080c, 0xa8d8, 0x080c, 0x2248, 0x080c,
+	0x0156, 0x080c, 0x207e, 0x080c, 0xa8fc, 0x080c, 0x2248, 0x080c,
 	0x13a3, 0x080c, 0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126,
 	0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c,
-	0xa8d8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
-	0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c, 0xa8d8, 0x080c,
+	0xa8fc, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
+	0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c, 0xa8fc, 0x080c,
 	0x2248, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
 	0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c, 0x207e, 0x080c,
-	0xa8d8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
+	0xa8fc, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
 	0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c, 0x207e, 0x080c,
-	0xa8d8, 0x080c, 0x2248, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126,
+	0xa8fc, 0x080c, 0x2248, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126,
 	0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c,
-	0xa8d8, 0x080c, 0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126,
+	0xa8fc, 0x080c, 0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126,
 	0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c,
-	0xa8d8, 0x080c, 0x2248, 0x080c, 0x20a8, 0x0804, 0x2fa9, 0x0106,
+	0xa8fc, 0x080c, 0x2248, 0x080c, 0x20a8, 0x0804, 0x2fa9, 0x0106,
 	0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
-	0x26fe, 0x080c, 0x207e, 0x080c, 0xa8d8, 0x080c, 0x20a8, 0x0804,
+	0x26fe, 0x080c, 0x207e, 0x080c, 0xa8fc, 0x080c, 0x20a8, 0x0804,
 	0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
-	0x0156, 0x080c, 0x26fe, 0x080c, 0x207e, 0x080c, 0xa8d8, 0x080c,
+	0x0156, 0x080c, 0x26fe, 0x080c, 0x207e, 0x080c, 0xa8fc, 0x080c,
 	0x2248, 0x080c, 0x20a8, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126,
 	0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c,
-	0xa8d8, 0x080c, 0x13a3, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126,
+	0xa8fc, 0x080c, 0x13a3, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126,
 	0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c,
-	0xa8d8, 0x080c, 0x2248, 0x080c, 0x13a3, 0x0804, 0x2fa9, 0x0106,
+	0xa8fc, 0x080c, 0x2248, 0x080c, 0x13a3, 0x0804, 0x2fa9, 0x0106,
 	0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
-	0x26fe, 0x080c, 0x207e, 0x080c, 0xa8d8, 0x080c, 0x13a3, 0x0804,
+	0x26fe, 0x080c, 0x207e, 0x080c, 0xa8fc, 0x080c, 0x13a3, 0x0804,
 	0x2fa9, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
-	0x0156, 0x080c, 0x26fe, 0x080c, 0x207e, 0x080c, 0xa8d8, 0x080c,
+	0x0156, 0x080c, 0x26fe, 0x080c, 0x207e, 0x080c, 0xa8fc, 0x080c,
 	0x2248, 0x080c, 0x13a3, 0x0804, 0x2fa9, 0x0106, 0x0006, 0x0126,
 	0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c,
-	0xa8d8, 0x080c, 0x13a3, 0x080c, 0x20a8, 0x04d8, 0x0106, 0x0006,
+	0xa8fc, 0x080c, 0x13a3, 0x080c, 0x20a8, 0x04d8, 0x0106, 0x0006,
 	0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x26fe,
-	0x080c, 0xa8d8, 0x080c, 0x2248, 0x080c, 0x13a3, 0x080c, 0x20a8,
+	0x080c, 0xa8fc, 0x080c, 0x2248, 0x080c, 0x13a3, 0x080c, 0x20a8,
 	0x0440, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
 	0x0156, 0x080c, 0x26fe, 0x080c, 0x207e, 0x080c, 0x13a3, 0x080c,
-	0xa8d8, 0x080c, 0x20a8, 0x00a8, 0x0106, 0x0006, 0x0126, 0x01c6,
+	0xa8fc, 0x080c, 0x20a8, 0x00a8, 0x0106, 0x0006, 0x0126, 0x01c6,
 	0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x26fe, 0x080c, 0x207e,
-	0x080c, 0xa8d8, 0x080c, 0x2248, 0x080c, 0x13a3, 0x080c, 0x20a8,
+	0x080c, 0xa8fc, 0x080c, 0x2248, 0x080c, 0x13a3, 0x080c, 0x20a8,
 	0x0000, 0x015e, 0x014e, 0x013e, 0x01de, 0x01ce, 0x012e, 0x000e,
 	0x010e, 0x000d, 0x00b6, 0x00c6, 0x0026, 0x0046, 0x9026, 0x080c,
-	0x6a19, 0x1904, 0x30bf, 0x72dc, 0x2001, 0x197c, 0x2004, 0x9005,
-	0x1110, 0xd29c, 0x0148, 0xd284, 0x1138, 0xd2bc, 0x1904, 0x30bf,
-	0x080c, 0x30c4, 0x0804, 0x30bf, 0xd2cc, 0x1904, 0x30bf, 0x080c,
-	0x74d5, 0x1120, 0x70af, 0xffff, 0x0804, 0x30bf, 0xd294, 0x0120,
-	0x70af, 0xffff, 0x0804, 0x30bf, 0x080c, 0x335c, 0x0160, 0x080c,
-	0xcf2e, 0x0128, 0x2001, 0x1818, 0x203c, 0x0804, 0x304c, 0x70af,
-	0xffff, 0x0804, 0x30bf, 0x2001, 0x1818, 0x203c, 0x7294, 0xd284,
-	0x0904, 0x304c, 0xd28c, 0x1904, 0x304c, 0x0036, 0x73ac, 0x938e,
+	0x6a29, 0x1904, 0x30c2, 0x72dc, 0x2001, 0x197c, 0x2004, 0x9005,
+	0x1110, 0xd29c, 0x0148, 0xd284, 0x1138, 0xd2bc, 0x1904, 0x30c2,
+	0x080c, 0x30c7, 0x0804, 0x30c2, 0xd2cc, 0x1904, 0x30c2, 0x080c,
+	0x74e9, 0x1120, 0x70af, 0xffff, 0x0804, 0x30c2, 0xd294, 0x0120,
+	0x70af, 0xffff, 0x0804, 0x30c2, 0x080c, 0x3363, 0x0160, 0x080c,
+	0xcf52, 0x0128, 0x2001, 0x1818, 0x203c, 0x0804, 0x304f, 0x70af,
+	0xffff, 0x0804, 0x30c2, 0x2001, 0x1818, 0x203c, 0x7294, 0xd284,
+	0x0904, 0x304f, 0xd28c, 0x1904, 0x304f, 0x0036, 0x73ac, 0x938e,
 	0xffff, 0x1110, 0x2019, 0x0001, 0x8314, 0x92e0, 0x1d80, 0x2c04,
 	0x938c, 0x0001, 0x0120, 0x9084, 0xff00, 0x8007, 0x0010, 0x9084,
-	0x00ff, 0x970e, 0x05b8, 0x908e, 0x0000, 0x05a0, 0x908e, 0x00ff,
-	0x1150, 0x7230, 0xd284, 0x1598, 0x7294, 0xc28d, 0x7296, 0x70af,
-	0xffff, 0x003e, 0x0488, 0x900e, 0x080c, 0x25fb, 0x080c, 0x65bd,
-	0x1520, 0x9006, 0xb8bb, 0x0520, 0xb8ac, 0x9005, 0x0148, 0x00c6,
-	0x2060, 0x080c, 0x8b5f, 0x00ce, 0x090c, 0x8f03, 0xb8af, 0x0000,
-	0x080c, 0x6a5b, 0x1150, 0x7030, 0xd08c, 0x0118, 0xb800, 0xd0bc,
-	0x0120, 0x080c, 0x30dd, 0x0148, 0x0028, 0x080c, 0x3231, 0x080c,
-	0x3109, 0x0118, 0x8318, 0x0804, 0x2ffc, 0x73ae, 0x0010, 0x70af,
-	0xffff, 0x003e, 0x0804, 0x30bf, 0x9780, 0x336d, 0x203d, 0x97bc,
-	0xff00, 0x873f, 0x2041, 0x007e, 0x70ac, 0x9096, 0xffff, 0x1118,
-	0x900e, 0x28a8, 0x0050, 0x9812, 0x0220, 0x2008, 0x9802, 0x20a8,
-	0x0020, 0x70af, 0xffff, 0x0804, 0x30bf, 0x2700, 0x0156, 0x0016,
-	0x9106, 0x0904, 0x30b4, 0xc484, 0x080c, 0x661e, 0x0148, 0x080c,
-	0xcf2e, 0x1904, 0x30b4, 0x080c, 0x65bd, 0x1904, 0x30bc, 0x0008,
-	0xc485, 0xb8bb, 0x0520, 0xb8ac, 0x9005, 0x0148, 0x00c6, 0x2060,
-	0x080c, 0x8b5f, 0x00ce, 0x090c, 0x8f03, 0xb8af, 0x0000, 0x080c,
-	0x6a5b, 0x1130, 0x7030, 0xd08c, 0x01f8, 0xb800, 0xd0bc, 0x11e0,
-	0x7294, 0xd28c, 0x0180, 0x080c, 0x6a5b, 0x9082, 0x0006, 0x02e0,
-	0xd484, 0x1118, 0x080c, 0x65e2, 0x0028, 0x080c, 0x32ca, 0x01a0,
-	0x080c, 0x32f5, 0x0088, 0x080c, 0x3231, 0x080c, 0xcf2e, 0x1160,
-	0x080c, 0x3109, 0x0188, 0x0040, 0x080c, 0xcf2e, 0x1118, 0x080c,
-	0x32ca, 0x0110, 0x0451, 0x0140, 0x001e, 0x8108, 0x015e, 0x1f04,
-	0x3065, 0x70af, 0xffff, 0x0018, 0x001e, 0x015e, 0x71ae, 0x004e,
-	0x002e, 0x00ce, 0x00be, 0x0005, 0x00c6, 0x0016, 0x70af, 0x0001,
-	0x2009, 0x007e, 0x080c, 0x65bd, 0x1168, 0xb813, 0x00ff, 0xb817,
-	0xfffe, 0x080c, 0x3231, 0x04a9, 0x0128, 0x70dc, 0xc0bd, 0x70de,
-	0x080c, 0xcc7b, 0x001e, 0x00ce, 0x0005, 0x0016, 0x0076, 0x00d6,
-	0x00c6, 0x2001, 0x184c, 0x2004, 0x9084, 0x00ff, 0xb842, 0x080c,
-	0xac3b, 0x01d0, 0x2b00, 0x6012, 0x080c, 0xcca8, 0x6023, 0x0001,
-	0x9006, 0x080c, 0x655a, 0x2001, 0x0000, 0x080c, 0x656e, 0x0126,
-	0x2091, 0x8000, 0x70a8, 0x8000, 0x70aa, 0x012e, 0x2009, 0x0004,
-	0x080c, 0xac68, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e,
-	0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x2001, 0x184c, 0x2004,
-	0x9084, 0x00ff, 0xb842, 0x080c, 0xac3b, 0x0548, 0x2b00, 0x6012,
-	0xb800, 0xc0c4, 0xb802, 0xb8a0, 0x9086, 0x007e, 0x0140, 0xb804,
-	0x9084, 0x00ff, 0x9086, 0x0006, 0x1110, 0x080c, 0x31e4, 0x080c,
-	0xcca8, 0x6023, 0x0001, 0x9006, 0x080c, 0x655a, 0x2001, 0x0002,
-	0x080c, 0x656e, 0x0126, 0x2091, 0x8000, 0x70a8, 0x8000, 0x70aa,
-	0x012e, 0x2009, 0x0002, 0x080c, 0xac68, 0x9085, 0x0001, 0x00ce,
-	0x00de, 0x007e, 0x001e, 0x0005, 0x00b6, 0x00c6, 0x0026, 0x2009,
-	0x0080, 0x080c, 0x65bd, 0x1140, 0xb813, 0x00ff, 0xb817, 0xfffc,
-	0x0039, 0x0110, 0x70e3, 0xffff, 0x002e, 0x00ce, 0x00be, 0x0005,
-	0x0016, 0x0076, 0x00d6, 0x00c6, 0x080c, 0xab73, 0x01d0, 0x2b00,
-	0x6012, 0x080c, 0xcca8, 0x6023, 0x0001, 0x9006, 0x080c, 0x655a,
-	0x2001, 0x0002, 0x080c, 0x656e, 0x0126, 0x2091, 0x8000, 0x70e4,
-	0x8000, 0x70e6, 0x012e, 0x2009, 0x0002, 0x080c, 0xac68, 0x9085,
-	0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, 0x00c6, 0x00d6,
-	0x0126, 0x2091, 0x8000, 0x2009, 0x007f, 0x080c, 0x65bd, 0x11b8,
-	0xb813, 0x00ff, 0xb817, 0xfffd, 0xb8d7, 0x0004, 0x080c, 0xab73,
-	0x0170, 0x2b00, 0x6012, 0x6316, 0x6023, 0x0001, 0x620a, 0x080c,
-	0xcca8, 0x2009, 0x0022, 0x080c, 0xac68, 0x9085, 0x0001, 0x012e,
-	0x00de, 0x00ce, 0x0005, 0x00e6, 0x00c6, 0x0066, 0x0036, 0x0026,
-	0x00b6, 0x21f0, 0x9036, 0x080c, 0xa872, 0x1110, 0x2031, 0x0001,
-	0x0066, 0x080c, 0x937f, 0x080c, 0x92f5, 0x080c, 0xa7c8, 0x080c,
-	0xbaf5, 0x006e, 0x86ff, 0x0110, 0x080c, 0xa88e, 0x3e08, 0x2130,
-	0x81ff, 0x0120, 0x20a9, 0x007e, 0x900e, 0x0018, 0x20a9, 0x007f,
-	0x900e, 0x0016, 0x080c, 0x661e, 0x1140, 0x9686, 0x0002, 0x1118,
-	0xb800, 0xd0bc, 0x1110, 0x080c, 0x603c, 0x001e, 0x8108, 0x1f04,
-	0x31c9, 0x9686, 0x0001, 0x190c, 0x3330, 0x00be, 0x002e, 0x003e,
-	0x006e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0036, 0x0026,
-	0x0016, 0x00b6, 0x9016, 0x080c, 0xa872, 0x1110, 0x2011, 0x0001,
-	0x0026, 0x6210, 0x2258, 0xbaa0, 0x0026, 0x2019, 0x0029, 0x080c,
-	0x9374, 0x0076, 0x2039, 0x0000, 0x080c, 0x9246, 0x2c08, 0x080c,
-	0xdfc0, 0x007e, 0x001e, 0x002e, 0x82ff, 0x0110, 0x080c, 0xa88e,
-	0xba10, 0xbb14, 0x080c, 0x603c, 0xba12, 0xbb16, 0x00be, 0x001e,
-	0x002e, 0x003e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x00b6,
-	0x6010, 0x2058, 0xb8a0, 0x00be, 0x9086, 0x0080, 0x0150, 0x2071,
-	0x1800, 0x70a8, 0x9005, 0x0110, 0x8001, 0x70aa, 0x000e, 0x00ee,
-	0x0005, 0x2071, 0x1800, 0x70e4, 0x9005, 0x0dc0, 0x8001, 0x70e6,
-	0x0ca8, 0xb800, 0xc08c, 0xb802, 0x0005, 0x00f6, 0x00e6, 0x00c6,
-	0x00b6, 0x0036, 0x0026, 0x0016, 0x0156, 0x2178, 0x9016, 0x080c,
-	0xa872, 0x1110, 0x2011, 0x0001, 0x0026, 0x81ff, 0x1118, 0x20a9,
-	0x0001, 0x0088, 0x080c, 0x56d3, 0xd0c4, 0x0150, 0xd0a4, 0x0140,
-	0x9006, 0x0046, 0x2020, 0x2009, 0x002d, 0x080c, 0xe29e, 0x004e,
-	0x20a9, 0x0800, 0x9016, 0x0026, 0x928e, 0x007e, 0x0904, 0x32a5,
-	0x928e, 0x007f, 0x0904, 0x32a5, 0x928e, 0x0080, 0x05f0, 0x9288,
-	0x1000, 0x210c, 0x81ff, 0x05c8, 0x8fff, 0x1150, 0x2001, 0x198e,
-	0x0006, 0x2003, 0x0001, 0x080c, 0x32b7, 0x000e, 0x2003, 0x0000,
-	0x00b6, 0x00c6, 0x2158, 0x2001, 0x0001, 0x080c, 0x6a25, 0x00ce,
-	0x00be, 0x2019, 0x0029, 0x080c, 0x9374, 0x0076, 0x2039, 0x0000,
-	0x080c, 0x9246, 0x00b6, 0x00c6, 0x0026, 0x2158, 0xba04, 0x9294,
-	0x00ff, 0x9286, 0x0006, 0x1118, 0xb807, 0x0404, 0x0028, 0x2001,
-	0x0004, 0x8007, 0x9215, 0xba06, 0x002e, 0x00ce, 0x00be, 0x0016,
-	0x2c08, 0x080c, 0xdfc0, 0x001e, 0x007e, 0x002e, 0x8210, 0x1f04,
-	0x325b, 0x002e, 0x82ff, 0x0110, 0x080c, 0xa88e, 0x015e, 0x001e,
-	0x002e, 0x003e, 0x00be, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0046,
-	0x0026, 0x0016, 0x080c, 0x56d3, 0xd0c4, 0x0140, 0xd0a4, 0x0130,
-	0x9006, 0x2220, 0x2009, 0x0029, 0x080c, 0xe29e, 0x001e, 0x002e,
-	0x004e, 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x7294, 0x82ff,
-	0x01e8, 0x080c, 0x6a53, 0x11d0, 0x2100, 0x080c, 0x262e, 0x81ff,
-	0x01b8, 0x2019, 0x0001, 0x8314, 0x92e0, 0x1d80, 0x2c04, 0xd384,
-	0x0120, 0x9084, 0xff00, 0x8007, 0x0010, 0x9084, 0x00ff, 0x9116,
-	0x0138, 0x9096, 0x00ff, 0x0110, 0x8318, 0x0c68, 0x9085, 0x0001,
-	0x00ce, 0x003e, 0x002e, 0x001e, 0x0005, 0x0016, 0x00c6, 0x0126,
-	0x2091, 0x8000, 0x0066, 0x9036, 0x080c, 0xa872, 0x1110, 0x2031,
-	0x0001, 0x0066, 0x0036, 0x2019, 0x0029, 0x00d9, 0x003e, 0x006e,
-	0x86ff, 0x0110, 0x080c, 0xa88e, 0x006e, 0x9180, 0x1000, 0x2004,
-	0x9065, 0x0158, 0x0016, 0x00c6, 0x2061, 0x1b32, 0x001e, 0x6112,
-	0x080c, 0x31e4, 0x001e, 0x080c, 0x65e2, 0x012e, 0x00ce, 0x001e,
-	0x0005, 0x0016, 0x0026, 0x2110, 0x080c, 0xa366, 0x080c, 0xe605,
-	0x002e, 0x001e, 0x0005, 0x2001, 0x1837, 0x2004, 0xd0cc, 0x0005,
-	0x00c6, 0x00b6, 0x080c, 0x74d5, 0x1118, 0x20a9, 0x0800, 0x0010,
-	0x20a9, 0x0782, 0x080c, 0x74d5, 0x1110, 0x900e, 0x0010, 0x2009,
-	0x007e, 0x9180, 0x1000, 0x2004, 0x905d, 0x0130, 0x86ff, 0x0110,
-	0xb800, 0xd0bc, 0x090c, 0x65e2, 0x8108, 0x1f04, 0x3341, 0x2061,
-	0x1800, 0x607f, 0x0000, 0x6080, 0x9084, 0x00ff, 0x6082, 0x60b3,
-	0x0000, 0x00be, 0x00ce, 0x0005, 0x2001, 0x1869, 0x2004, 0xd0bc,
-	0x0005, 0x2011, 0x1848, 0x2214, 0xd2ec, 0x0005, 0x0026, 0x2011,
-	0x1867, 0x2214, 0xd2dc, 0x002e, 0x0005, 0x7eef, 0x7de8, 0x7ce4,
-	0x80e2, 0x7be1, 0x80e0, 0x80dc, 0x80da, 0x7ad9, 0x80d6, 0x80d5,
-	0x80d4, 0x80d3, 0x80d2, 0x80d1, 0x79ce, 0x78cd, 0x80cc, 0x80cb,
-	0x80ca, 0x80c9, 0x80c7, 0x80c6, 0x77c5, 0x76c3, 0x80bc, 0x80ba,
-	0x75b9, 0x80b6, 0x74b5, 0x73b4, 0x72b3, 0x80b2, 0x80b1, 0x80ae,
-	0x71ad, 0x80ac, 0x70ab, 0x6faa, 0x6ea9, 0x80a7, 0x6da6, 0x6ca5,
-	0x6ba3, 0x6a9f, 0x699e, 0x689d, 0x809b, 0x8098, 0x6797, 0x6690,
-	0x658f, 0x6488, 0x6384, 0x6282, 0x8081, 0x8080, 0x617c, 0x607a,
-	0x8079, 0x5f76, 0x8075, 0x8074, 0x8073, 0x8072, 0x8071, 0x806e,
-	0x5e6d, 0x806c, 0x5d6b, 0x5c6a, 0x5b69, 0x8067, 0x5a66, 0x5965,
-	0x5863, 0x575c, 0x565a, 0x5559, 0x8056, 0x8055, 0x5454, 0x5353,
-	0x5252, 0x5151, 0x504e, 0x4f4d, 0x804c, 0x804b, 0x4e4a, 0x4d49,
-	0x8047, 0x4c46, 0x8045, 0x8043, 0x803c, 0x803a, 0x8039, 0x8036,
-	0x4b35, 0x8034, 0x4a33, 0x4932, 0x4831, 0x802e, 0x472d, 0x462c,
-	0x452b, 0x442a, 0x4329, 0x4227, 0x8026, 0x8025, 0x4123, 0x401f,
-	0x3f1e, 0x3e1d, 0x3d1b, 0x3c18, 0x8017, 0x8010, 0x3b0f, 0x3a08,
-	0x8004, 0x3902, 0x8001, 0x8000, 0x8000, 0x3800, 0x3700, 0x3600,
-	0x8000, 0x3500, 0x8000, 0x8000, 0x8000, 0x3400, 0x8000, 0x8000,
-	0x8000, 0x8000, 0x8000, 0x8000, 0x3300, 0x3200, 0x8000, 0x8000,
-	0x8000, 0x8000, 0x8000, 0x8000, 0x3100, 0x3000, 0x8000, 0x8000,
-	0x2f00, 0x8000, 0x2e00, 0x2d00, 0x2c00, 0x8000, 0x8000, 0x8000,
-	0x2b00, 0x8000, 0x2a00, 0x2900, 0x2800, 0x8000, 0x2700, 0x2600,
-	0x2500, 0x2400, 0x2300, 0x2200, 0x8000, 0x8000, 0x2100, 0x2000,
-	0x1f00, 0x1e00, 0x1d00, 0x1c00, 0x8000, 0x8000, 0x1b00, 0x1a00,
-	0x8000, 0x1900, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
-	0x1800, 0x8000, 0x1700, 0x1600, 0x1500, 0x8000, 0x1400, 0x1300,
-	0x1200, 0x1100, 0x1000, 0x0f00, 0x8000, 0x8000, 0x0e00, 0x0d00,
-	0x0c00, 0x0b00, 0x0a00, 0x0900, 0x8000, 0x8000, 0x0800, 0x0700,
-	0x8000, 0x0600, 0x8000, 0x8000, 0x8000, 0x0500, 0x0400, 0x0300,
-	0x8000, 0x0200, 0x8000, 0x8000, 0x8000, 0x0100, 0x8000, 0x8000,
-	0x8000, 0x8000, 0x8000, 0x8000, 0x0000, 0x8000, 0x8000, 0x8000,
+	0x00ff, 0x970e, 0x05d0, 0x908e, 0x0000, 0x05b8, 0x908e, 0x00ff,
+	0x1150, 0x7230, 0xd284, 0x15b0, 0x7294, 0xc28d, 0x7296, 0x70af,
+	0xffff, 0x003e, 0x04a0, 0x900e, 0x080c, 0x25fb, 0x080c, 0x65c4,
+	0x1538, 0x9006, 0xb8bb, 0x0520, 0xb8ac, 0x9005, 0x0148, 0x00c6,
+	0x2060, 0x080c, 0x8b90, 0x00ce, 0x090c, 0x8f34, 0xb8af, 0x0000,
+	0x080c, 0x6a6b, 0x1168, 0x7030, 0xd08c, 0x0130, 0xb800, 0xd0bc,
+	0x0138, 0x080c, 0x6914, 0x0120, 0x080c, 0x30e0, 0x0148, 0x0028,
+	0x080c, 0x3238, 0x080c, 0x310c, 0x0118, 0x8318, 0x0804, 0x2ffc,
+	0x73ae, 0x0010, 0x70af, 0xffff, 0x003e, 0x0804, 0x30c2, 0x9780,
+	0x3374, 0x203d, 0x97bc, 0xff00, 0x873f, 0x2041, 0x007e, 0x70ac,
+	0x9096, 0xffff, 0x1118, 0x900e, 0x28a8, 0x0050, 0x9812, 0x0220,
+	0x2008, 0x9802, 0x20a8, 0x0020, 0x70af, 0xffff, 0x0804, 0x30c2,
+	0x2700, 0x0156, 0x0016, 0x9106, 0x0904, 0x30b7, 0xc484, 0x080c,
+	0x6625, 0x0148, 0x080c, 0xcf52, 0x1904, 0x30b7, 0x080c, 0x65c4,
+	0x1904, 0x30bf, 0x0008, 0xc485, 0xb8bb, 0x0520, 0xb8ac, 0x9005,
+	0x0148, 0x00c6, 0x2060, 0x080c, 0x8b90, 0x00ce, 0x090c, 0x8f34,
+	0xb8af, 0x0000, 0x080c, 0x6a6b, 0x1130, 0x7030, 0xd08c, 0x01f8,
+	0xb800, 0xd0bc, 0x11e0, 0x7294, 0xd28c, 0x0180, 0x080c, 0x6a6b,
+	0x9082, 0x0006, 0x02e0, 0xd484, 0x1118, 0x080c, 0x65e9, 0x0028,
+	0x080c, 0x32d1, 0x01a0, 0x080c, 0x32fc, 0x0088, 0x080c, 0x3238,
+	0x080c, 0xcf52, 0x1160, 0x080c, 0x310c, 0x0188, 0x0040, 0x080c,
+	0xcf52, 0x1118, 0x080c, 0x32d1, 0x0110, 0x0451, 0x0140, 0x001e,
+	0x8108, 0x015e, 0x1f04, 0x3068, 0x70af, 0xffff, 0x0018, 0x001e,
+	0x015e, 0x71ae, 0x004e, 0x002e, 0x00ce, 0x00be, 0x0005, 0x00c6,
+	0x0016, 0x70af, 0x0001, 0x2009, 0x007e, 0x080c, 0x65c4, 0x1168,
+	0xb813, 0x00ff, 0xb817, 0xfffe, 0x080c, 0x3238, 0x04a9, 0x0128,
+	0x70dc, 0xc0bd, 0x70de, 0x080c, 0xcc9f, 0x001e, 0x00ce, 0x0005,
+	0x0016, 0x0076, 0x00d6, 0x00c6, 0x2001, 0x184c, 0x2004, 0x9084,
+	0x00ff, 0xb842, 0x080c, 0xac5f, 0x01d0, 0x2b00, 0x6012, 0x080c,
+	0xcccc, 0x6023, 0x0001, 0x9006, 0x080c, 0x6561, 0x2001, 0x0000,
+	0x080c, 0x6575, 0x0126, 0x2091, 0x8000, 0x70a8, 0x8000, 0x70aa,
+	0x012e, 0x2009, 0x0004, 0x080c, 0xac8c, 0x9085, 0x0001, 0x00ce,
+	0x00de, 0x007e, 0x001e, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6,
+	0x2001, 0x184c, 0x2004, 0x9084, 0x00ff, 0xb842, 0x080c, 0xac5f,
+	0x0548, 0x2b00, 0x6012, 0xb800, 0xc0c4, 0xb802, 0xb8a0, 0x9086,
+	0x007e, 0x0140, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1110,
+	0x080c, 0x31e7, 0x080c, 0xcccc, 0x6023, 0x0001, 0x9006, 0x080c,
+	0x6561, 0x2001, 0x0002, 0x080c, 0x6575, 0x0126, 0x2091, 0x8000,
+	0x70a8, 0x8000, 0x70aa, 0x012e, 0x2009, 0x0002, 0x080c, 0xac8c,
+	0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, 0x00b6,
+	0x00c6, 0x0026, 0x2009, 0x0080, 0x080c, 0x65c4, 0x1140, 0xb813,
+	0x00ff, 0xb817, 0xfffc, 0x0039, 0x0110, 0x70e3, 0xffff, 0x002e,
+	0x00ce, 0x00be, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x080c,
+	0xab97, 0x01d0, 0x2b00, 0x6012, 0x080c, 0xcccc, 0x6023, 0x0001,
+	0x9006, 0x080c, 0x6561, 0x2001, 0x0002, 0x080c, 0x6575, 0x0126,
+	0x2091, 0x8000, 0x70e4, 0x8000, 0x70e6, 0x012e, 0x2009, 0x0002,
+	0x080c, 0xac8c, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e,
+	0x0005, 0x00c6, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2009, 0x007f,
+	0x080c, 0x65c4, 0x11b8, 0xb813, 0x00ff, 0xb817, 0xfffd, 0xb8d7,
+	0x0004, 0x080c, 0xab97, 0x0170, 0x2b00, 0x6012, 0x6316, 0x6023,
+	0x0001, 0x620a, 0x080c, 0xcccc, 0x2009, 0x0022, 0x080c, 0xac8c,
+	0x9085, 0x0001, 0x012e, 0x00de, 0x00ce, 0x0005, 0x00e6, 0x00c6,
+	0x0066, 0x0036, 0x0026, 0x00b6, 0x21f0, 0x9036, 0x080c, 0xa896,
+	0x1110, 0x2031, 0x0001, 0x0066, 0x080c, 0x93b0, 0x080c, 0x9326,
+	0x080c, 0xa7ec, 0x080c, 0xbb19, 0x006e, 0x86ff, 0x0110, 0x080c,
+	0xa8b2, 0x3e08, 0x2130, 0x81ff, 0x0120, 0x20a9, 0x007e, 0x900e,
+	0x0018, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x6625, 0x1140,
+	0x9686, 0x0002, 0x1118, 0xb800, 0xd0bc, 0x1110, 0x080c, 0x6043,
+	0x001e, 0x8108, 0x1f04, 0x31cc, 0x9686, 0x0001, 0x190c, 0x3337,
+	0x00be, 0x002e, 0x003e, 0x006e, 0x00ce, 0x00ee, 0x0005, 0x00e6,
+	0x00c6, 0x0046, 0x0036, 0x0026, 0x0016, 0x00b6, 0x9016, 0x080c,
+	0xa896, 0x1110, 0x2011, 0x0001, 0x0026, 0x6210, 0x2258, 0xbaa0,
+	0x0026, 0x2019, 0x0029, 0x080c, 0x93a5, 0x0076, 0x2039, 0x0000,
+	0x080c, 0x9277, 0x2c08, 0x080c, 0xdfeb, 0x007e, 0x001e, 0x002e,
+	0x82ff, 0x0110, 0x080c, 0xa8b2, 0xba10, 0xbb14, 0xbc84, 0x080c,
+	0x6043, 0xba12, 0xbb16, 0xbc86, 0x00be, 0x001e, 0x002e, 0x003e,
+	0x004e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x00b6, 0x6010,
+	0x2058, 0xb8a0, 0x00be, 0x9086, 0x0080, 0x0150, 0x2071, 0x1800,
+	0x70a8, 0x9005, 0x0110, 0x8001, 0x70aa, 0x000e, 0x00ee, 0x0005,
+	0x2071, 0x1800, 0x70e4, 0x9005, 0x0dc0, 0x8001, 0x70e6, 0x0ca8,
+	0xb800, 0xc08c, 0xb802, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x00b6,
+	0x0046, 0x0036, 0x0026, 0x0016, 0x0156, 0x2178, 0x9016, 0x080c,
+	0xa896, 0x1110, 0x2011, 0x0001, 0x0026, 0x81ff, 0x1118, 0x20a9,
+	0x0001, 0x0078, 0x080c, 0x56da, 0xd0c4, 0x0140, 0xd0a4, 0x0130,
+	0x9006, 0x2020, 0x2009, 0x002d, 0x080c, 0xe2c9, 0x20a9, 0x0800,
+	0x9016, 0x0026, 0x928e, 0x007e, 0x0904, 0x32ab, 0x928e, 0x007f,
+	0x0904, 0x32ab, 0x928e, 0x0080, 0x05f0, 0x9288, 0x1000, 0x210c,
+	0x81ff, 0x05c8, 0x8fff, 0x1150, 0x2001, 0x198e, 0x0006, 0x2003,
+	0x0001, 0x080c, 0x32be, 0x000e, 0x2003, 0x0000, 0x00b6, 0x00c6,
+	0x2158, 0x2001, 0x0001, 0x080c, 0x6a35, 0x00ce, 0x00be, 0x2019,
+	0x0029, 0x080c, 0x93a5, 0x0076, 0x2039, 0x0000, 0x080c, 0x9277,
+	0x00b6, 0x00c6, 0x0026, 0x2158, 0xba04, 0x9294, 0x00ff, 0x9286,
+	0x0006, 0x1118, 0xb807, 0x0404, 0x0028, 0x2001, 0x0004, 0x8007,
+	0x9215, 0xba06, 0x002e, 0x00ce, 0x00be, 0x0016, 0x2c08, 0x080c,
+	0xdfeb, 0x001e, 0x007e, 0x002e, 0x8210, 0x1f04, 0x3261, 0x002e,
+	0x82ff, 0x0110, 0x080c, 0xa8b2, 0x015e, 0x001e, 0x002e, 0x003e,
+	0x004e, 0x00be, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0046, 0x0026,
+	0x0016, 0x080c, 0x56da, 0xd0c4, 0x0140, 0xd0a4, 0x0130, 0x9006,
+	0x2220, 0x2009, 0x0029, 0x080c, 0xe2c9, 0x001e, 0x002e, 0x004e,
+	0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x7294, 0x82ff, 0x01e8,
+	0x080c, 0x6a63, 0x11d0, 0x2100, 0x080c, 0x262e, 0x81ff, 0x01b8,
+	0x2019, 0x0001, 0x8314, 0x92e0, 0x1d80, 0x2c04, 0xd384, 0x0120,
+	0x9084, 0xff00, 0x8007, 0x0010, 0x9084, 0x00ff, 0x9116, 0x0138,
+	0x9096, 0x00ff, 0x0110, 0x8318, 0x0c68, 0x9085, 0x0001, 0x00ce,
+	0x003e, 0x002e, 0x001e, 0x0005, 0x0016, 0x00c6, 0x0126, 0x2091,
+	0x8000, 0x0066, 0x9036, 0x080c, 0xa896, 0x1110, 0x2031, 0x0001,
+	0x0066, 0x0036, 0x2019, 0x0029, 0x00d9, 0x003e, 0x006e, 0x86ff,
+	0x0110, 0x080c, 0xa8b2, 0x006e, 0x9180, 0x1000, 0x2004, 0x9065,
+	0x0158, 0x0016, 0x00c6, 0x2061, 0x1b32, 0x001e, 0x6112, 0x080c,
+	0x31e7, 0x001e, 0x080c, 0x65e9, 0x012e, 0x00ce, 0x001e, 0x0005,
+	0x0016, 0x0026, 0x2110, 0x080c, 0xa38a, 0x080c, 0xe630, 0x002e,
+	0x001e, 0x0005, 0x2001, 0x1837, 0x2004, 0xd0cc, 0x0005, 0x00c6,
+	0x00b6, 0x080c, 0x74e9, 0x1118, 0x20a9, 0x0800, 0x0010, 0x20a9,
+	0x0782, 0x080c, 0x74e9, 0x1110, 0x900e, 0x0010, 0x2009, 0x007e,
+	0x9180, 0x1000, 0x2004, 0x905d, 0x0130, 0x86ff, 0x0110, 0xb800,
+	0xd0bc, 0x090c, 0x65e9, 0x8108, 0x1f04, 0x3348, 0x2061, 0x1800,
+	0x607f, 0x0000, 0x6080, 0x9084, 0x00ff, 0x6082, 0x60b3, 0x0000,
+	0x00be, 0x00ce, 0x0005, 0x2001, 0x1869, 0x2004, 0xd0bc, 0x0005,
+	0x2011, 0x1848, 0x2214, 0xd2ec, 0x0005, 0x0026, 0x2011, 0x1867,
+	0x2214, 0xd2dc, 0x002e, 0x0005, 0x7eef, 0x7de8, 0x7ce4, 0x80e2,
+	0x7be1, 0x80e0, 0x80dc, 0x80da, 0x7ad9, 0x80d6, 0x80d5, 0x80d4,
+	0x80d3, 0x80d2, 0x80d1, 0x79ce, 0x78cd, 0x80cc, 0x80cb, 0x80ca,
+	0x80c9, 0x80c7, 0x80c6, 0x77c5, 0x76c3, 0x80bc, 0x80ba, 0x75b9,
+	0x80b6, 0x74b5, 0x73b4, 0x72b3, 0x80b2, 0x80b1, 0x80ae, 0x71ad,
+	0x80ac, 0x70ab, 0x6faa, 0x6ea9, 0x80a7, 0x6da6, 0x6ca5, 0x6ba3,
+	0x6a9f, 0x699e, 0x689d, 0x809b, 0x8098, 0x6797, 0x6690, 0x658f,
+	0x6488, 0x6384, 0x6282, 0x8081, 0x8080, 0x617c, 0x607a, 0x8079,
+	0x5f76, 0x8075, 0x8074, 0x8073, 0x8072, 0x8071, 0x806e, 0x5e6d,
+	0x806c, 0x5d6b, 0x5c6a, 0x5b69, 0x8067, 0x5a66, 0x5965, 0x5863,
+	0x575c, 0x565a, 0x5559, 0x8056, 0x8055, 0x5454, 0x5353, 0x5252,
+	0x5151, 0x504e, 0x4f4d, 0x804c, 0x804b, 0x4e4a, 0x4d49, 0x8047,
+	0x4c46, 0x8045, 0x8043, 0x803c, 0x803a, 0x8039, 0x8036, 0x4b35,
+	0x8034, 0x4a33, 0x4932, 0x4831, 0x802e, 0x472d, 0x462c, 0x452b,
+	0x442a, 0x4329, 0x4227, 0x8026, 0x8025, 0x4123, 0x401f, 0x3f1e,
+	0x3e1d, 0x3d1b, 0x3c18, 0x8017, 0x8010, 0x3b0f, 0x3a08, 0x8004,
+	0x3902, 0x8001, 0x8000, 0x8000, 0x3800, 0x3700, 0x3600, 0x8000,
+	0x3500, 0x8000, 0x8000, 0x8000, 0x3400, 0x8000, 0x8000, 0x8000,
+	0x8000, 0x8000, 0x8000, 0x3300, 0x3200, 0x8000, 0x8000, 0x8000,
+	0x8000, 0x8000, 0x8000, 0x3100, 0x3000, 0x8000, 0x8000, 0x2f00,
+	0x8000, 0x2e00, 0x2d00, 0x2c00, 0x8000, 0x8000, 0x8000, 0x2b00,
+	0x8000, 0x2a00, 0x2900, 0x2800, 0x8000, 0x2700, 0x2600, 0x2500,
+	0x2400, 0x2300, 0x2200, 0x8000, 0x8000, 0x2100, 0x2000, 0x1f00,
+	0x1e00, 0x1d00, 0x1c00, 0x8000, 0x8000, 0x1b00, 0x1a00, 0x8000,
+	0x1900, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x1800,
+	0x8000, 0x1700, 0x1600, 0x1500, 0x8000, 0x1400, 0x1300, 0x1200,
+	0x1100, 0x1000, 0x0f00, 0x8000, 0x8000, 0x0e00, 0x0d00, 0x0c00,
+	0x0b00, 0x0a00, 0x0900, 0x8000, 0x8000, 0x0800, 0x0700, 0x8000,
+	0x0600, 0x8000, 0x8000, 0x8000, 0x0500, 0x0400, 0x0300, 0x8000,
+	0x0200, 0x8000, 0x8000, 0x8000, 0x0100, 0x8000, 0x8000, 0x8000,
+	0x8000, 0x8000, 0x8000, 0x0000, 0x8000, 0x8000, 0x8000, 0x8000,
 	0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
-	0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x2071, 0x189e, 0x7003,
-	0x0002, 0x9006, 0x7016, 0x701a, 0x704a, 0x704e, 0x700e, 0x7042,
-	0x7046, 0x703b, 0x18ba, 0x703f, 0x18ba, 0x7007, 0x0001, 0x080c,
-	0x1053, 0x090c, 0x0d7d, 0x2900, 0x706a, 0xa867, 0x0002, 0xa8ab,
-	0xdcb0, 0x080c, 0x1053, 0x090c, 0x0d7d, 0x2900, 0x706e, 0xa867,
-	0x0002, 0xa8ab, 0xdcb0, 0x0005, 0x2071, 0x189e, 0x7004, 0x0002,
-	0x349c, 0x349d, 0x34b0, 0x34c4, 0x0005, 0x1004, 0x34ad, 0x0e04,
-	0x34ad, 0x2079, 0x0000, 0x0126, 0x2091, 0x8000, 0x700c, 0x9005,
-	0x1128, 0x700f, 0x0001, 0x012e, 0x0468, 0x0005, 0x012e, 0x0ce8,
-	0x2079, 0x0000, 0x2061, 0x18b8, 0x2c4c, 0xa86c, 0x908e, 0x0100,
-	0x0128, 0x9086, 0x0200, 0x0904, 0x3598, 0x0005, 0x7018, 0x2048,
-	0x2061, 0x1800, 0x701c, 0x0807, 0x7014, 0x2048, 0xa864, 0x9094,
-	0x00ff, 0x9296, 0x0029, 0x1120, 0xaa78, 0xd2fc, 0x0128, 0x0005,
-	0x9086, 0x0103, 0x0108, 0x0005, 0x2079, 0x0000, 0x2061, 0x1800,
-	0x701c, 0x0807, 0x2061, 0x1800, 0x7880, 0x908a, 0x0040, 0x1210,
-	0x61d0, 0x0042, 0x2100, 0x908a, 0x003f, 0x1a04, 0x3595, 0x61d0,
-	0x0804, 0x352a, 0x356c, 0x35a4, 0x35ae, 0x35b2, 0x35bc, 0x35c2,
-	0x35c6, 0x35d6, 0x35d9, 0x35e3, 0x35e8, 0x35ed, 0x35f8, 0x3603,
-	0x3612, 0x3621, 0x362f, 0x3646, 0x3661, 0x3595, 0x370a, 0x3748,
-	0x37ed, 0x37fe, 0x3821, 0x3595, 0x3595, 0x3595, 0x3859, 0x3879,
-	0x3882, 0x38ae, 0x38b4, 0x3595, 0x38fa, 0x3595, 0x3595, 0x3595,
-	0x3595, 0x3595, 0x3905, 0x390e, 0x3916, 0x3918, 0x3595, 0x3595,
-	0x3595, 0x3595, 0x3595, 0x3595, 0x3948, 0x3595, 0x3595, 0x3595,
-	0x3595, 0x3595, 0x3965, 0x39c9, 0x3595, 0x3595, 0x3595, 0x3595,
-	0x3595, 0x3595, 0x0002, 0x39f3, 0x39f6, 0x3a55, 0x3a6e, 0x3a9e,
-	0x3d40, 0x3595, 0x52a4, 0x3595, 0x3595, 0x3595, 0x3595, 0x3595,
-	0x3595, 0x3595, 0x3595, 0x35e3, 0x35e8, 0x423f, 0x56f7, 0x425d,
-	0x5333, 0x5384, 0x5487, 0x3595, 0x54e9, 0x5525, 0x5556, 0x5662,
-	0x5583, 0x55e2, 0x3595, 0x4261, 0x4416, 0x442c, 0x4451, 0x44b6,
-	0x452a, 0x454a, 0x45c1, 0x461d, 0x4679, 0x467c, 0x46a1, 0x4711,
-	0x477b, 0x4783, 0x48b5, 0x4a2a, 0x4a5e, 0x4cc2, 0x3595, 0x4ce0,
-	0x4d8c, 0x4e6e, 0x4ec8, 0x3595, 0x4f7d, 0x3595, 0x4fe3, 0x4ffe,
-	0x4783, 0x5244, 0x714c, 0x0000, 0x2021, 0x4000, 0x080c, 0x4adc,
-	0x0126, 0x2091, 0x8000, 0x0e04, 0x3576, 0x0010, 0x012e, 0x0cc0,
-	0x7c36, 0x9486, 0x4000, 0x0118, 0x7833, 0x0011, 0x0010, 0x7833,
-	0x0010, 0x7c82, 0x7986, 0x7a8a, 0x7b8e, 0x2091, 0x4080, 0x2001,
-	0x0089, 0x2004, 0xd084, 0x190c, 0x11d6, 0x7007, 0x0001, 0x2091,
-	0x5000, 0x700f, 0x0000, 0x012e, 0x0005, 0x2021, 0x4001, 0x08b0,
-	0x2021, 0x4002, 0x0898, 0x2021, 0x4003, 0x0880, 0x2021, 0x4005,
-	0x0868, 0x2021, 0x4006, 0x0850, 0x2039, 0x0001, 0x902e, 0x2520,
-	0x7b88, 0x7a8c, 0x7884, 0x7990, 0x0804, 0x4ae9, 0x7883, 0x0004,
-	0x7884, 0x0807, 0x2039, 0x0001, 0x902e, 0x2520, 0x7b88, 0x7a8c,
-	0x7884, 0x7990, 0x0804, 0x4aec, 0x7984, 0x7888, 0x2114, 0x200a,
-	0x0804, 0x356c, 0x7984, 0x2114, 0x0804, 0x356c, 0x20e1, 0x0000,
-	0x2099, 0x0021, 0x20e9, 0x0000, 0x20a1, 0x0021, 0x20a9, 0x001f,
-	0x4003, 0x7984, 0x7a88, 0x7b8c, 0x0804, 0x356c, 0x7884, 0x2060,
-	0x04d8, 0x2009, 0x0003, 0x2011, 0x0002, 0x2019, 0x001a, 0x789b,
-	0x0137, 0x0804, 0x356c, 0x2039, 0x0001, 0x7d98, 0x7c9c, 0x0800,
-	0x2039, 0x0001, 0x7d98, 0x7c9c, 0x0848, 0x79a0, 0x9182, 0x0040,
-	0x0210, 0x0804, 0x35a1, 0x2138, 0x7d98, 0x7c9c, 0x0804, 0x35a8,
-	0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x35a1, 0x2138, 0x7d98,
-	0x7c9c, 0x0804, 0x35b6, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804,
-	0x35a1, 0x21e8, 0x7984, 0x7888, 0x20a9, 0x0001, 0x21a0, 0x4004,
-	0x0804, 0x356c, 0x2061, 0x0800, 0xe10c, 0x9006, 0x2c15, 0x9200,
-	0x8c60, 0x8109, 0x1dd8, 0x2010, 0x9005, 0x0904, 0x356c, 0x0804,
-	0x359b, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x35a1, 0x21e0,
-	0x20a9, 0x0001, 0x7984, 0x2198, 0x4012, 0x0804, 0x356c, 0x2069,
-	0x1847, 0x7884, 0x7990, 0x911a, 0x1a04, 0x35a1, 0x8019, 0x0904,
-	0x35a1, 0x684a, 0x6942, 0x788c, 0x6852, 0x7888, 0x6856, 0x9006,
-	0x685a, 0x685e, 0x080c, 0x780a, 0x0804, 0x356c, 0x2069, 0x1847,
-	0x7884, 0x7994, 0x911a, 0x1a04, 0x35a1, 0x8019, 0x0904, 0x35a1,
-	0x684e, 0x6946, 0x788c, 0x6862, 0x7888, 0x6866, 0x9006, 0x686a,
-	0x686e, 0x0126, 0x2091, 0x8000, 0x080c, 0x6ac5, 0x012e, 0x0804,
-	0x356c, 0x902e, 0x2520, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804,
-	0x359e, 0x7984, 0x7b88, 0x7a8c, 0x20a9, 0x0005, 0x20e9, 0x0001,
-	0x20a1, 0x18a6, 0x4101, 0x080c, 0x4aa0, 0x1120, 0x2009, 0x0002,
-	0x0804, 0x359e, 0x2009, 0x0020, 0xa85c, 0x9080, 0x0019, 0xaf60,
-	0x080c, 0x4ae9, 0x701f, 0x3685, 0x0005, 0xa864, 0x2008, 0x9084,
-	0x00ff, 0x9096, 0x0011, 0x0168, 0x9096, 0x0019, 0x0150, 0x9096,
-	0x0015, 0x0138, 0x9096, 0x0048, 0x0120, 0x9096, 0x0029, 0x1904,
-	0x359e, 0x810f, 0x918c, 0x00ff, 0x0904, 0x359e, 0x7112, 0x7010,
-	0x8001, 0x0560, 0x7012, 0x080c, 0x4aa0, 0x1120, 0x2009, 0x0002,
-	0x0804, 0x359e, 0x2009, 0x0020, 0x7068, 0x2040, 0xa28c, 0xa390,
-	0xa494, 0xa598, 0x9290, 0x0040, 0x9399, 0x0000, 0x94a1, 0x0000,
-	0x95a9, 0x0000, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, 0x4ae9,
-	0x701f, 0x36c3, 0x0005, 0xa864, 0x9084, 0x00ff, 0x9096, 0x0002,
-	0x0120, 0x9096, 0x000a, 0x1904, 0x359e, 0x0888, 0x7014, 0x2048,
-	0xa868, 0xc0fd, 0xa86a, 0xa864, 0x9084, 0x00ff, 0x9096, 0x0029,
-	0x1160, 0xc2fd, 0xaa7a, 0x080c, 0x618f, 0x0150, 0x0126, 0x2091,
-	0x8000, 0xa87a, 0xa982, 0x012e, 0x0050, 0x080c, 0x64b8, 0x1128,
-	0x7007, 0x0003, 0x701f, 0x36ef, 0x0005, 0x080c, 0x6fb0, 0x0126,
-	0x2091, 0x8000, 0x20a9, 0x0005, 0x20e1, 0x0001, 0x2099, 0x18a6,
-	0x400a, 0x2100, 0x9210, 0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9,
-	0x0000, 0xa85c, 0x9080, 0x0019, 0x2009, 0x0020, 0x012e, 0xaf60,
-	0x0804, 0x4aec, 0x2091, 0x8000, 0x7837, 0x4000, 0x7833, 0x0010,
-	0x7883, 0x4000, 0x7887, 0x4953, 0x788b, 0x5020, 0x788f, 0x2020,
-	0x2009, 0x017f, 0x2104, 0x7892, 0x3f00, 0x7896, 0x2061, 0x0100,
-	0x6200, 0x2061, 0x0200, 0x603c, 0x8007, 0x9205, 0x789a, 0x2009,
-	0x04fd, 0x2104, 0x789e, 0x2091, 0x5000, 0x2091, 0x4080, 0x2001,
-	0x0089, 0x2004, 0xd084, 0x0180, 0x2001, 0x1a22, 0x2004, 0x9005,
-	0x0128, 0x2001, 0x008b, 0x2004, 0xd0fc, 0x0dd8, 0x2001, 0x008a,
-	0x2003, 0x0002, 0x2003, 0x1001, 0x2071, 0x0080, 0x0804, 0x0427,
-	0x81ff, 0x1904, 0x359e, 0x7984, 0x080c, 0x661e, 0x1904, 0x35a1,
-	0x7e98, 0x9684, 0x3fff, 0x9082, 0x4000, 0x1a04, 0x35a1, 0x7c88,
-	0x7d8c, 0x080c, 0x6850, 0x080c, 0x67e1, 0x1518, 0x2061, 0x1ddc,
-	0x0126, 0x2091, 0x8000, 0x6000, 0x9086, 0x0000, 0x0148, 0x6014,
-	0x904d, 0x0130, 0xa86c, 0x9406, 0x1118, 0xa870, 0x9506, 0x0150,
-	0x012e, 0x9ce0, 0x001c, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1a04,
-	0x359e, 0x0c30, 0x080c, 0xc41f, 0x012e, 0x0904, 0x359e, 0x0804,
-	0x356c, 0x900e, 0x2001, 0x0005, 0x080c, 0x6fb0, 0x0126, 0x2091,
-	0x8000, 0x080c, 0xcb18, 0x080c, 0x6d70, 0x012e, 0x0804, 0x356c,
-	0x00a6, 0x2950, 0xb198, 0x080c, 0x661e, 0x1904, 0x37da, 0xb6a4,
-	0x9684, 0x3fff, 0x9082, 0x4000, 0x16e8, 0xb49c, 0xb5a0, 0x080c,
-	0x6850, 0x080c, 0x67fb, 0x1520, 0x2061, 0x1ddc, 0x0126, 0x2091,
-	0x8000, 0x6000, 0x9086, 0x0000, 0x0148, 0x6014, 0x904d, 0x0130,
-	0xa86c, 0x9406, 0x1118, 0xa870, 0x9506, 0x0158, 0x012e, 0x9ce0,
-	0x001c, 0x2001, 0x181a, 0x2004, 0x9c02, 0x2009, 0x000d, 0x12b0,
-	0x0c28, 0x080c, 0xc41f, 0x012e, 0x2009, 0x0003, 0x0178, 0x00e0,
-	0x900e, 0x2001, 0x0005, 0x080c, 0x6fb0, 0x0126, 0x2091, 0x8000,
-	0x080c, 0xcb18, 0x080c, 0x6d64, 0x012e, 0x0070, 0xb097, 0x4005,
-	0xb19a, 0x0010, 0xb097, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001,
-	0x0030, 0x2a48, 0x00ae, 0x0005, 0xb097, 0x4000, 0x9006, 0x918d,
-	0x0001, 0x2008, 0x2a48, 0x00ae, 0x0005, 0x81ff, 0x1904, 0x359e,
-	0x080c, 0x4ab7, 0x0904, 0x35a1, 0x080c, 0x66e5, 0x0904, 0x359e,
-	0x080c, 0x6856, 0x0904, 0x359e, 0x0804, 0x4541, 0x81ff, 0x1904,
-	0x359e, 0x080c, 0x4ad3, 0x0904, 0x35a1, 0x080c, 0x68e4, 0x0904,
-	0x359e, 0x2019, 0x0005, 0x79a8, 0x080c, 0x6871, 0x0904, 0x359e,
-	0x7888, 0x908a, 0x1000, 0x1a04, 0x35a1, 0x8003, 0x800b, 0x810b,
-	0x9108, 0x080c, 0x861b, 0x7984, 0xd184, 0x1904, 0x356c, 0x0804,
-	0x4541, 0x0126, 0x2091, 0x8000, 0x81ff, 0x0118, 0x2009, 0x0001,
-	0x0450, 0x2029, 0x07ff, 0x645c, 0x2400, 0x9506, 0x01f8, 0x2508,
-	0x080c, 0x661e, 0x11d8, 0x080c, 0x68e4, 0x1128, 0x2009, 0x0002,
-	0x62c0, 0x2518, 0x00c0, 0x2019, 0x0004, 0x900e, 0x080c, 0x6871,
-	0x1118, 0x2009, 0x0006, 0x0078, 0x7884, 0x908a, 0x1000, 0x1270,
-	0x8003, 0x800b, 0x810b, 0x9108, 0x080c, 0x861b, 0x8529, 0x1ae0,
-	0x012e, 0x0804, 0x356c, 0x012e, 0x0804, 0x359e, 0x012e, 0x0804,
-	0x35a1, 0x080c, 0x4ab7, 0x0904, 0x35a1, 0x080c, 0x66e5, 0x0904,
-	0x359e, 0x080c, 0xa872, 0xbaa0, 0x2019, 0x0005, 0x00c6, 0x9066,
-	0x080c, 0x9374, 0x0076, 0x903e, 0x080c, 0x9246, 0x900e, 0x080c,
-	0xdfc0, 0x007e, 0x00ce, 0x080c, 0xa88e, 0x080c, 0x6850, 0x0804,
-	0x356c, 0x080c, 0x4ab7, 0x0904, 0x35a1, 0x080c, 0x6850, 0x2208,
-	0x0804, 0x356c, 0x0156, 0x00d6, 0x00e6, 0x00c6, 0x2069, 0x1910,
-	0x6810, 0x6914, 0x910a, 0x1208, 0x900e, 0x6816, 0x9016, 0x901e,
-	0x2071, 0x19e7, 0x7028, 0x9065, 0x0118, 0x8210, 0x600c, 0x0cd8,
-	0x2300, 0x9218, 0x00ce, 0x00ee, 0x00de, 0x015e, 0x0804, 0x356c,
-	0x00f6, 0x0016, 0x907d, 0x0138, 0x9006, 0x8000, 0x2f0c, 0x81ff,
-	0x0110, 0x2178, 0x0cd0, 0x001e, 0x00fe, 0x0005, 0x2069, 0x1910,
-	0x6910, 0x62bc, 0x0804, 0x356c, 0x81ff, 0x0120, 0x2009, 0x0001,
-	0x0804, 0x359e, 0x0126, 0x2091, 0x8000, 0x080c, 0x56e7, 0x0128,
-	0x2009, 0x0007, 0x012e, 0x0804, 0x359e, 0x012e, 0x615c, 0x9190,
-	0x336d, 0x2215, 0x9294, 0x00ff, 0x637c, 0x83ff, 0x0108, 0x6280,
-	0x67dc, 0x97c4, 0x000a, 0x98c6, 0x000a, 0x1118, 0x2031, 0x0001,
-	0x00e8, 0x97c4, 0x0022, 0x98c6, 0x0022, 0x1118, 0x2031, 0x0003,
-	0x00a8, 0x97c4, 0x0012, 0x98c6, 0x0012, 0x1118, 0x2031, 0x0002,
-	0x0068, 0x080c, 0x74d5, 0x1118, 0x2031, 0x0004, 0x0038, 0xd79c,
-	0x0120, 0x2009, 0x0005, 0x0804, 0x359e, 0x9036, 0x7e9a, 0x7f9e,
-	0x0804, 0x356c, 0x614c, 0x6250, 0x2019, 0x1986, 0x231c, 0x2001,
-	0x1987, 0x2004, 0x789a, 0x0804, 0x356c, 0x0126, 0x2091, 0x8000,
-	0x6138, 0x623c, 0x6340, 0x012e, 0x0804, 0x356c, 0x080c, 0x4ad3,
-	0x0904, 0x35a1, 0xba44, 0xbb38, 0x0804, 0x356c, 0x080c, 0x0d7d,
-	0x080c, 0x4ad3, 0x2110, 0x0904, 0x35a1, 0xb804, 0x908c, 0x00ff,
-	0x918e, 0x0006, 0x0140, 0x9084, 0xff00, 0x9086, 0x0600, 0x2009,
-	0x0009, 0x1904, 0x359e, 0x0126, 0x2091, 0x8000, 0x2019, 0x0005,
-	0x00c6, 0x9066, 0x080c, 0xa872, 0x080c, 0xa366, 0x080c, 0x9374,
-	0x0076, 0x903e, 0x080c, 0x9246, 0x900e, 0x080c, 0xdfc0, 0x007e,
-	0x00ce, 0x080c, 0xa88e, 0xb807, 0x0407, 0x012e, 0x0804, 0x356c,
-	0x614c, 0x6250, 0x7884, 0x604e, 0x7b88, 0x6352, 0x2069, 0x1847,
-	0x831f, 0x9305, 0x6816, 0x788c, 0x2069, 0x1986, 0x2d1c, 0x206a,
-	0x7e98, 0x9682, 0x0014, 0x1210, 0x2031, 0x07d0, 0x2069, 0x1987,
-	0x2d04, 0x266a, 0x789a, 0x0804, 0x356c, 0x0126, 0x2091, 0x8000,
-	0x6138, 0x7884, 0x603a, 0x910e, 0xd1b4, 0x190c, 0x0ecc, 0xd0c4,
-	0x01a8, 0x00d6, 0x78a8, 0x2009, 0x199d, 0x200a, 0x78ac, 0x2011,
-	0x199e, 0x2012, 0x2069, 0x0100, 0x6838, 0x9086, 0x0007, 0x1118,
-	0x2214, 0x6a5a, 0x0010, 0x210c, 0x695a, 0x00de, 0x7888, 0x603e,
-	0x2011, 0x0116, 0x220c, 0x7888, 0xd08c, 0x0118, 0x918d, 0x0040,
-	0x0010, 0x918c, 0xff7f, 0x2112, 0x6140, 0x788c, 0x6042, 0x910e,
-	0xd1e4, 0x190c, 0x0ee7, 0x9084, 0x0020, 0x0130, 0x78b4, 0x6046,
-	0x9084, 0x0001, 0x090c, 0x423f, 0x6040, 0xd0cc, 0x0120, 0x78b0,
-	0x2011, 0x0114, 0x2012, 0x012e, 0x0804, 0x356c, 0x00f6, 0x2079,
-	0x1800, 0x7a38, 0xa898, 0x9084, 0xfebf, 0x9215, 0xa89c, 0x9084,
-	0xfebf, 0x8002, 0x9214, 0x7838, 0x9084, 0x0140, 0x9215, 0x7a3a,
-	0xa897, 0x4000, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x00fe,
-	0x0005, 0x7898, 0x9005, 0x01a8, 0x7888, 0x9025, 0x0904, 0x35a1,
-	0x788c, 0x902d, 0x0904, 0x35a1, 0x900e, 0x080c, 0x661e, 0x1120,
-	0xba44, 0xbb38, 0xbc46, 0xbd3a, 0x9186, 0x07ff, 0x0190, 0x8108,
-	0x0ca0, 0x080c, 0x4ad3, 0x0904, 0x35a1, 0x7888, 0x900d, 0x0904,
-	0x35a1, 0x788c, 0x9005, 0x0904, 0x35a1, 0xba44, 0xb946, 0xbb38,
-	0xb83a, 0x0804, 0x356c, 0x2011, 0xbc09, 0x0010, 0x2011, 0xbc05,
-	0x080c, 0x56e7, 0x1904, 0x359e, 0x00c6, 0x2061, 0x0100, 0x7984,
-	0x9186, 0x00ff, 0x1130, 0x2001, 0x1818, 0x2004, 0x9085, 0xff00,
-	0x0088, 0x9182, 0x007f, 0x16e0, 0x9188, 0x336d, 0x210d, 0x918c,
-	0x00ff, 0x2001, 0x1818, 0x2004, 0x0026, 0x9116, 0x002e, 0x0580,
-	0x810f, 0x9105, 0x0126, 0x2091, 0x8000, 0x0006, 0x080c, 0xab73,
-	0x000e, 0x0510, 0x602e, 0x620a, 0x7984, 0x00b6, 0x080c, 0x65c3,
-	0x2b08, 0x00be, 0x1500, 0x6112, 0x6023, 0x0001, 0x080c, 0x4aa0,
-	0x01d0, 0x9006, 0xa866, 0x7007, 0x0003, 0xa832, 0xa868, 0xc0fd,
-	0xa86a, 0x701f, 0x3a4e, 0x2900, 0x6016, 0x2009, 0x0032, 0x080c,
-	0xac68, 0x012e, 0x00ce, 0x0005, 0x012e, 0x00ce, 0x0804, 0x359e,
-	0x00ce, 0x0804, 0x35a1, 0x080c, 0xabc9, 0x0cb0, 0xa830, 0x9086,
-	0x0100, 0x0904, 0x359e, 0x0804, 0x356c, 0x2061, 0x1a6f, 0x0126,
-	0x2091, 0x8000, 0x6000, 0xd084, 0x0170, 0x6104, 0x6208, 0x2061,
-	0x1800, 0x6354, 0x6074, 0x789a, 0x60c0, 0x789e, 0x60bc, 0x78aa,
-	0x012e, 0x0804, 0x356c, 0x900e, 0x2110, 0x0c88, 0x81ff, 0x1904,
-	0x359e, 0x080c, 0x74d5, 0x0904, 0x359e, 0x0126, 0x2091, 0x8000,
-	0x6254, 0x6074, 0x9202, 0x0248, 0x9085, 0x0001, 0x080c, 0x2664,
-	0x080c, 0x5901, 0x012e, 0x0804, 0x356c, 0x012e, 0x0804, 0x35a1,
-	0x0006, 0x0016, 0x00c6, 0x00e6, 0x2001, 0x19a9, 0x2070, 0x2061,
-	0x1847, 0x6008, 0x2072, 0x900e, 0x2011, 0x1400, 0x080c, 0x9135,
-	0x7206, 0x00ee, 0x00ce, 0x001e, 0x000e, 0x0005, 0x0126, 0x2091,
-	0x8000, 0x81ff, 0x0128, 0x012e, 0x2021, 0x400b, 0x0804, 0x356e,
-	0x7884, 0xd0fc, 0x0148, 0x2001, 0x002a, 0x2004, 0x9082, 0x00e1,
-	0x0288, 0x012e, 0x0804, 0x35a1, 0x2001, 0x002a, 0x2004, 0x2069,
-	0x1847, 0x6908, 0x9102, 0x1230, 0x012e, 0x0804, 0x35a1, 0x012e,
-	0x0804, 0x359e, 0x080c, 0xab33, 0x0dd0, 0x7884, 0xd0fc, 0x0904,
-	0x3b19, 0x00c6, 0x080c, 0x4aa0, 0x00ce, 0x0d88, 0xa867, 0x0000,
-	0x7884, 0xa80a, 0x7898, 0xa80e, 0x789c, 0xa812, 0x2001, 0x002e,
-	0x2004, 0xa81a, 0x2001, 0x002f, 0x2004, 0xa81e, 0x2001, 0x0030,
-	0x2004, 0xa822, 0x2001, 0x0031, 0x2004, 0xa826, 0x2001, 0x0034,
-	0x2004, 0xa82a, 0x2001, 0x0035, 0x2004, 0xa82e, 0x2001, 0x002a,
-	0x2004, 0x9080, 0x0003, 0x9084, 0x00fc, 0x8004, 0xa816, 0x080c,
-	0x3ca3, 0x0928, 0x7014, 0x2048, 0xad2c, 0xac28, 0xab1c, 0xaa18,
-	0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021, 0x0000,
-	0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080,
-	0x001b, 0x080c, 0x4ae9, 0x701f, 0x3be0, 0x7023, 0x0001, 0x012e,
-	0x0005, 0x080c, 0xa872, 0x0046, 0x0086, 0x0096, 0x00a6, 0x00b6,
-	0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x080c, 0x3a88, 0x2001, 0x199f,
-	0x2003, 0x0000, 0x2021, 0x000a, 0x2061, 0x0100, 0x6104, 0x0016,
-	0x60bb, 0x0000, 0x60bf, 0x32e1, 0x60bf, 0x0012, 0x080c, 0x3d12,
-	0x080c, 0x3cd1, 0x00f6, 0x00e6, 0x0086, 0x2940, 0x2071, 0x19e7,
-	0x2079, 0x0090, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0140,
-	0x2001, 0x0035, 0x2004, 0x780e, 0x2001, 0x0034, 0x2004, 0x780a,
-	0x00de, 0x2011, 0x0001, 0x080c, 0x4083, 0x008e, 0x00ee, 0x00fe,
-	0x080c, 0x3fb0, 0x080c, 0x3edd, 0x05b8, 0x2001, 0x020b, 0x2004,
-	0x9084, 0x0140, 0x1db8, 0x080c, 0x40f7, 0x00f6, 0x2079, 0x0300,
-	0x78bc, 0x00fe, 0x908c, 0x0070, 0x1560, 0x2071, 0x0200, 0x7037,
-	0x0000, 0x7050, 0x9084, 0xff00, 0x9086, 0x3200, 0x1510, 0x7037,
-	0x0001, 0x7050, 0x9084, 0xff00, 0x9086, 0xe100, 0x11d0, 0x7037,
-	0x0000, 0x7054, 0x7037, 0x0000, 0x715c, 0x9106, 0x1190, 0x2001,
-	0x1820, 0x2004, 0x9106, 0x1168, 0x00c6, 0x2061, 0x0100, 0x6024,
-	0x9084, 0x1e00, 0x00ce, 0x0138, 0x080c, 0x3ee7, 0x080c, 0x3ccc,
-	0x0058, 0x080c, 0x3ccc, 0x080c, 0x401b, 0x080c, 0x3fa6, 0x2001,
-	0x020b, 0x2004, 0xd0e4, 0x0dd8, 0x2001, 0x032a, 0x2003, 0x0004,
-	0x2061, 0x0100, 0x6027, 0x0002, 0x001e, 0x6106, 0x2011, 0x020d,
-	0x2013, 0x0020, 0x60bb, 0x0000, 0x60bf, 0x0108, 0x60bf, 0x0012,
-	0x2001, 0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, 0x080c, 0x1328,
-	0x2009, 0x0028, 0x080c, 0x21b0, 0x2001, 0x0227, 0x200c, 0x2102,
-	0x080c, 0xa88e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae,
-	0x009e, 0x008e, 0x004e, 0x2001, 0x199f, 0x2004, 0x9005, 0x1118,
-	0x012e, 0x0804, 0x356c, 0x012e, 0x2021, 0x400c, 0x0804, 0x356e,
-	0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0076, 0x0086, 0x0096,
-	0x00d6, 0x0156, 0x7014, 0x2048, 0x7020, 0x20a8, 0x8000, 0x7022,
-	0xa804, 0x9005, 0x0904, 0x3c3c, 0x2048, 0x1f04, 0x3bf0, 0x7068,
-	0x2040, 0xa28c, 0xa390, 0xa494, 0xa598, 0xa930, 0xa808, 0xd0b4,
-	0x1120, 0x2029, 0x0000, 0x2021, 0x0000, 0x0096, 0x7014, 0x2048,
-	0xa864, 0x009e, 0x9086, 0x0103, 0x0170, 0x8906, 0x8006, 0x8007,
-	0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, 0x080c, 0x4ae9,
-	0x701f, 0x3be0, 0x00b0, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f,
-	0x9084, 0xffc0, 0x9080, 0x001b, 0x21a8, 0x27e0, 0x2098, 0x27e8,
-	0x20a0, 0x0006, 0x080c, 0x0fb7, 0x000e, 0x080c, 0x4aec, 0x701f,
-	0x3be0, 0x015e, 0x00de, 0x009e, 0x008e, 0x007e, 0x005e, 0x004e,
-	0x003e, 0x002e, 0x001e, 0x0005, 0x7014, 0x2048, 0xa864, 0x9086,
-	0x0103, 0x1118, 0x701f, 0x3ca1, 0x0450, 0x7014, 0x2048, 0xa868,
-	0xc0fd, 0xa86a, 0x2009, 0x007f, 0x080c, 0x65bd, 0x0110, 0x9006,
-	0x0030, 0xb813, 0x00ff, 0xb817, 0xfffd, 0x080c, 0xccf7, 0x015e,
-	0x00de, 0x009e, 0x008e, 0x007e, 0x005e, 0x004e, 0x003e, 0x002e,
-	0x001e, 0x0904, 0x359e, 0x0016, 0x0026, 0x0036, 0x0046, 0x0056,
-	0x0076, 0x0086, 0x0096, 0x00d6, 0x0156, 0x701f, 0x3c73, 0x7007,
-	0x0003, 0x0804, 0x3c31, 0xa830, 0x9086, 0x0100, 0x2021, 0x400c,
-	0x0904, 0x356e, 0x0076, 0xad10, 0xac0c, 0xab24, 0xaa20, 0xa930,
+	0x8000, 0x8000, 0x8000, 0x8000, 0x2071, 0x189e, 0x7003, 0x0002,
+	0x9006, 0x7016, 0x701a, 0x704a, 0x704e, 0x700e, 0x7042, 0x7046,
+	0x703b, 0x18ba, 0x703f, 0x18ba, 0x7007, 0x0001, 0x080c, 0x1053,
+	0x090c, 0x0d7d, 0x2900, 0x706a, 0xa867, 0x0002, 0xa8ab, 0xdcb0,
+	0x080c, 0x1053, 0x090c, 0x0d7d, 0x2900, 0x706e, 0xa867, 0x0002,
+	0xa8ab, 0xdcb0, 0x0005, 0x2071, 0x189e, 0x7004, 0x0002, 0x34a3,
+	0x34a4, 0x34b7, 0x34cb, 0x0005, 0x1004, 0x34b4, 0x0e04, 0x34b4,
+	0x2079, 0x0000, 0x0126, 0x2091, 0x8000, 0x700c, 0x9005, 0x1128,
+	0x700f, 0x0001, 0x012e, 0x0468, 0x0005, 0x012e, 0x0ce8, 0x2079,
+	0x0000, 0x2061, 0x18b8, 0x2c4c, 0xa86c, 0x908e, 0x0100, 0x0128,
+	0x9086, 0x0200, 0x0904, 0x359f, 0x0005, 0x7018, 0x2048, 0x2061,
+	0x1800, 0x701c, 0x0807, 0x7014, 0x2048, 0xa864, 0x9094, 0x00ff,
+	0x9296, 0x0029, 0x1120, 0xaa78, 0xd2fc, 0x0128, 0x0005, 0x9086,
+	0x0103, 0x0108, 0x0005, 0x2079, 0x0000, 0x2061, 0x1800, 0x701c,
+	0x0807, 0x2061, 0x1800, 0x7880, 0x908a, 0x0040, 0x1210, 0x61d0,
+	0x0042, 0x2100, 0x908a, 0x003f, 0x1a04, 0x359c, 0x61d0, 0x0804,
+	0x3531, 0x3573, 0x35ab, 0x35b5, 0x35b9, 0x35c3, 0x35c9, 0x35cd,
+	0x35dd, 0x35e0, 0x35ea, 0x35ef, 0x35f4, 0x35ff, 0x360a, 0x3619,
+	0x3628, 0x3636, 0x364d, 0x3668, 0x359c, 0x3711, 0x374f, 0x37f4,
+	0x3805, 0x3828, 0x359c, 0x359c, 0x359c, 0x3860, 0x3880, 0x3889,
+	0x38b5, 0x38bb, 0x359c, 0x3901, 0x359c, 0x359c, 0x359c, 0x359c,
+	0x359c, 0x390c, 0x3915, 0x391d, 0x391f, 0x359c, 0x359c, 0x359c,
+	0x359c, 0x359c, 0x359c, 0x394f, 0x359c, 0x359c, 0x359c, 0x359c,
+	0x359c, 0x396c, 0x39d0, 0x359c, 0x359c, 0x359c, 0x359c, 0x359c,
+	0x359c, 0x0002, 0x39fa, 0x39fd, 0x3a5c, 0x3a75, 0x3aa5, 0x3d47,
+	0x359c, 0x52ab, 0x359c, 0x359c, 0x359c, 0x359c, 0x359c, 0x359c,
+	0x359c, 0x359c, 0x35ea, 0x35ef, 0x4246, 0x56fe, 0x4264, 0x533a,
+	0x538b, 0x548e, 0x359c, 0x54f0, 0x552c, 0x555d, 0x5669, 0x558a,
+	0x55e9, 0x359c, 0x4268, 0x441d, 0x4433, 0x4458, 0x44bd, 0x4531,
+	0x4551, 0x45c8, 0x4624, 0x4680, 0x4683, 0x46a8, 0x4718, 0x4782,
+	0x478a, 0x48bc, 0x4a31, 0x4a65, 0x4cc9, 0x359c, 0x4ce7, 0x4d93,
+	0x4e75, 0x4ecf, 0x359c, 0x4f84, 0x359c, 0x4fea, 0x5005, 0x478a,
+	0x524b, 0x714c, 0x0000, 0x2021, 0x4000, 0x080c, 0x4ae3, 0x0126,
+	0x2091, 0x8000, 0x0e04, 0x357d, 0x0010, 0x012e, 0x0cc0, 0x7c36,
+	0x9486, 0x4000, 0x0118, 0x7833, 0x0011, 0x0010, 0x7833, 0x0010,
+	0x7c82, 0x7986, 0x7a8a, 0x7b8e, 0x2091, 0x4080, 0x2001, 0x0089,
+	0x2004, 0xd084, 0x190c, 0x11d6, 0x7007, 0x0001, 0x2091, 0x5000,
+	0x700f, 0x0000, 0x012e, 0x0005, 0x2021, 0x4001, 0x08b0, 0x2021,
+	0x4002, 0x0898, 0x2021, 0x4003, 0x0880, 0x2021, 0x4005, 0x0868,
+	0x2021, 0x4006, 0x0850, 0x2039, 0x0001, 0x902e, 0x2520, 0x7b88,
+	0x7a8c, 0x7884, 0x7990, 0x0804, 0x4af0, 0x7883, 0x0004, 0x7884,
+	0x0807, 0x2039, 0x0001, 0x902e, 0x2520, 0x7b88, 0x7a8c, 0x7884,
+	0x7990, 0x0804, 0x4af3, 0x7984, 0x7888, 0x2114, 0x200a, 0x0804,
+	0x3573, 0x7984, 0x2114, 0x0804, 0x3573, 0x20e1, 0x0000, 0x2099,
+	0x0021, 0x20e9, 0x0000, 0x20a1, 0x0021, 0x20a9, 0x001f, 0x4003,
+	0x7984, 0x7a88, 0x7b8c, 0x0804, 0x3573, 0x7884, 0x2060, 0x04d8,
+	0x2009, 0x0003, 0x2011, 0x0002, 0x2019, 0x001c, 0x789b, 0x0137,
+	0x0804, 0x3573, 0x2039, 0x0001, 0x7d98, 0x7c9c, 0x0800, 0x2039,
+	0x0001, 0x7d98, 0x7c9c, 0x0848, 0x79a0, 0x9182, 0x0040, 0x0210,
+	0x0804, 0x35a8, 0x2138, 0x7d98, 0x7c9c, 0x0804, 0x35af, 0x79a0,
+	0x9182, 0x0040, 0x0210, 0x0804, 0x35a8, 0x2138, 0x7d98, 0x7c9c,
+	0x0804, 0x35bd, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x35a8,
+	0x21e8, 0x7984, 0x7888, 0x20a9, 0x0001, 0x21a0, 0x4004, 0x0804,
+	0x3573, 0x2061, 0x0800, 0xe10c, 0x9006, 0x2c15, 0x9200, 0x8c60,
+	0x8109, 0x1dd8, 0x2010, 0x9005, 0x0904, 0x3573, 0x0804, 0x35a2,
+	0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x35a8, 0x21e0, 0x20a9,
+	0x0001, 0x7984, 0x2198, 0x4012, 0x0804, 0x3573, 0x2069, 0x1847,
+	0x7884, 0x7990, 0x911a, 0x1a04, 0x35a8, 0x8019, 0x0904, 0x35a8,
+	0x684a, 0x6942, 0x788c, 0x6852, 0x7888, 0x6856, 0x9006, 0x685a,
+	0x685e, 0x080c, 0x781e, 0x0804, 0x3573, 0x2069, 0x1847, 0x7884,
+	0x7994, 0x911a, 0x1a04, 0x35a8, 0x8019, 0x0904, 0x35a8, 0x684e,
+	0x6946, 0x788c, 0x6862, 0x7888, 0x6866, 0x9006, 0x686a, 0x686e,
+	0x0126, 0x2091, 0x8000, 0x080c, 0x6ad5, 0x012e, 0x0804, 0x3573,
+	0x902e, 0x2520, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x35a5,
+	0x7984, 0x7b88, 0x7a8c, 0x20a9, 0x0005, 0x20e9, 0x0001, 0x20a1,
+	0x18a6, 0x4101, 0x080c, 0x4aa7, 0x1120, 0x2009, 0x0002, 0x0804,
+	0x35a5, 0x2009, 0x0020, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c,
+	0x4af0, 0x701f, 0x368c, 0x0005, 0xa864, 0x2008, 0x9084, 0x00ff,
+	0x9096, 0x0011, 0x0168, 0x9096, 0x0019, 0x0150, 0x9096, 0x0015,
+	0x0138, 0x9096, 0x0048, 0x0120, 0x9096, 0x0029, 0x1904, 0x35a5,
+	0x810f, 0x918c, 0x00ff, 0x0904, 0x35a5, 0x7112, 0x7010, 0x8001,
+	0x0560, 0x7012, 0x080c, 0x4aa7, 0x1120, 0x2009, 0x0002, 0x0804,
+	0x35a5, 0x2009, 0x0020, 0x7068, 0x2040, 0xa28c, 0xa390, 0xa494,
+	0xa598, 0x9290, 0x0040, 0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9,
+	0x0000, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, 0x4af0, 0x701f,
+	0x36ca, 0x0005, 0xa864, 0x9084, 0x00ff, 0x9096, 0x0002, 0x0120,
+	0x9096, 0x000a, 0x1904, 0x35a5, 0x0888, 0x7014, 0x2048, 0xa868,
+	0xc0fd, 0xa86a, 0xa864, 0x9084, 0x00ff, 0x9096, 0x0029, 0x1160,
+	0xc2fd, 0xaa7a, 0x080c, 0x6196, 0x0150, 0x0126, 0x2091, 0x8000,
+	0xa87a, 0xa982, 0x012e, 0x0050, 0x080c, 0x64bf, 0x1128, 0x7007,
+	0x0003, 0x701f, 0x36f6, 0x0005, 0x080c, 0x6fc0, 0x0126, 0x2091,
+	0x8000, 0x20a9, 0x0005, 0x20e1, 0x0001, 0x2099, 0x18a6, 0x400a,
+	0x2100, 0x9210, 0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9, 0x0000,
+	0xa85c, 0x9080, 0x0019, 0x2009, 0x0020, 0x012e, 0xaf60, 0x0804,
+	0x4af3, 0x2091, 0x8000, 0x7837, 0x4000, 0x7833, 0x0010, 0x7883,
+	0x4000, 0x7887, 0x4953, 0x788b, 0x5020, 0x788f, 0x2020, 0x2009,
+	0x017f, 0x2104, 0x7892, 0x3f00, 0x7896, 0x2061, 0x0100, 0x6200,
+	0x2061, 0x0200, 0x603c, 0x8007, 0x9205, 0x789a, 0x2009, 0x04fd,
+	0x2104, 0x789e, 0x2091, 0x5000, 0x2091, 0x4080, 0x2001, 0x0089,
+	0x2004, 0xd084, 0x0180, 0x2001, 0x1a22, 0x2004, 0x9005, 0x0128,
+	0x2001, 0x008b, 0x2004, 0xd0fc, 0x0dd8, 0x2001, 0x008a, 0x2003,
+	0x0002, 0x2003, 0x1001, 0x2071, 0x0080, 0x0804, 0x0427, 0x81ff,
+	0x1904, 0x35a5, 0x7984, 0x080c, 0x6625, 0x1904, 0x35a8, 0x7e98,
+	0x9684, 0x3fff, 0x9082, 0x4000, 0x1a04, 0x35a8, 0x7c88, 0x7d8c,
+	0x080c, 0x6857, 0x080c, 0x67e8, 0x1518, 0x2061, 0x1ddc, 0x0126,
+	0x2091, 0x8000, 0x6000, 0x9086, 0x0000, 0x0148, 0x6014, 0x904d,
+	0x0130, 0xa86c, 0x9406, 0x1118, 0xa870, 0x9506, 0x0150, 0x012e,
+	0x9ce0, 0x001c, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1a04, 0x35a5,
+	0x0c30, 0x080c, 0xc443, 0x012e, 0x0904, 0x35a5, 0x0804, 0x3573,
+	0x900e, 0x2001, 0x0005, 0x080c, 0x6fc0, 0x0126, 0x2091, 0x8000,
+	0x080c, 0xcb3c, 0x080c, 0x6d80, 0x012e, 0x0804, 0x3573, 0x00a6,
+	0x2950, 0xb198, 0x080c, 0x6625, 0x1904, 0x37e1, 0xb6a4, 0x9684,
+	0x3fff, 0x9082, 0x4000, 0x16e8, 0xb49c, 0xb5a0, 0x080c, 0x6857,
+	0x080c, 0x6802, 0x1520, 0x2061, 0x1ddc, 0x0126, 0x2091, 0x8000,
+	0x6000, 0x9086, 0x0000, 0x0148, 0x6014, 0x904d, 0x0130, 0xa86c,
+	0x9406, 0x1118, 0xa870, 0x9506, 0x0158, 0x012e, 0x9ce0, 0x001c,
+	0x2001, 0x181a, 0x2004, 0x9c02, 0x2009, 0x000d, 0x12b0, 0x0c28,
+	0x080c, 0xc443, 0x012e, 0x2009, 0x0003, 0x0178, 0x00e0, 0x900e,
+	0x2001, 0x0005, 0x080c, 0x6fc0, 0x0126, 0x2091, 0x8000, 0x080c,
+	0xcb3c, 0x080c, 0x6d74, 0x012e, 0x0070, 0xb097, 0x4005, 0xb19a,
+	0x0010, 0xb097, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030,
+	0x2a48, 0x00ae, 0x0005, 0xb097, 0x4000, 0x9006, 0x918d, 0x0001,
+	0x2008, 0x2a48, 0x00ae, 0x0005, 0x81ff, 0x1904, 0x35a5, 0x080c,
+	0x4abe, 0x0904, 0x35a8, 0x080c, 0x66ec, 0x0904, 0x35a5, 0x080c,
+	0x685d, 0x0904, 0x35a5, 0x0804, 0x4548, 0x81ff, 0x1904, 0x35a5,
+	0x080c, 0x4ada, 0x0904, 0x35a8, 0x080c, 0x68eb, 0x0904, 0x35a5,
+	0x2019, 0x0005, 0x79a8, 0x080c, 0x6878, 0x0904, 0x35a5, 0x7888,
+	0x908a, 0x1000, 0x1a04, 0x35a8, 0x8003, 0x800b, 0x810b, 0x9108,
+	0x080c, 0x864c, 0x7984, 0xd184, 0x1904, 0x3573, 0x0804, 0x4548,
+	0x0126, 0x2091, 0x8000, 0x81ff, 0x0118, 0x2009, 0x0001, 0x0450,
+	0x2029, 0x07ff, 0x645c, 0x2400, 0x9506, 0x01f8, 0x2508, 0x080c,
+	0x6625, 0x11d8, 0x080c, 0x68eb, 0x1128, 0x2009, 0x0002, 0x62c0,
+	0x2518, 0x00c0, 0x2019, 0x0004, 0x900e, 0x080c, 0x6878, 0x1118,
+	0x2009, 0x0006, 0x0078, 0x7884, 0x908a, 0x1000, 0x1270, 0x8003,
+	0x800b, 0x810b, 0x9108, 0x080c, 0x864c, 0x8529, 0x1ae0, 0x012e,
+	0x0804, 0x3573, 0x012e, 0x0804, 0x35a5, 0x012e, 0x0804, 0x35a8,
+	0x080c, 0x4abe, 0x0904, 0x35a8, 0x080c, 0x66ec, 0x0904, 0x35a5,
+	0x080c, 0xa896, 0xbaa0, 0x2019, 0x0005, 0x00c6, 0x9066, 0x080c,
+	0x93a5, 0x0076, 0x903e, 0x080c, 0x9277, 0x900e, 0x080c, 0xdfeb,
+	0x007e, 0x00ce, 0x080c, 0xa8b2, 0x080c, 0x6857, 0x0804, 0x3573,
+	0x080c, 0x4abe, 0x0904, 0x35a8, 0x080c, 0x6857, 0x2208, 0x0804,
+	0x3573, 0x0156, 0x00d6, 0x00e6, 0x00c6, 0x2069, 0x1910, 0x6810,
+	0x6914, 0x910a, 0x1208, 0x900e, 0x6816, 0x9016, 0x901e, 0x2071,
+	0x19e7, 0x7028, 0x9065, 0x0118, 0x8210, 0x600c, 0x0cd8, 0x2300,
+	0x9218, 0x00ce, 0x00ee, 0x00de, 0x015e, 0x0804, 0x3573, 0x00f6,
+	0x0016, 0x907d, 0x0138, 0x9006, 0x8000, 0x2f0c, 0x81ff, 0x0110,
+	0x2178, 0x0cd0, 0x001e, 0x00fe, 0x0005, 0x2069, 0x1910, 0x6910,
+	0x62bc, 0x0804, 0x3573, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804,
+	0x35a5, 0x0126, 0x2091, 0x8000, 0x080c, 0x56ee, 0x0128, 0x2009,
+	0x0007, 0x012e, 0x0804, 0x35a5, 0x012e, 0x615c, 0x9190, 0x3374,
+	0x2215, 0x9294, 0x00ff, 0x637c, 0x83ff, 0x0108, 0x6280, 0x67dc,
+	0x97c4, 0x000a, 0x98c6, 0x000a, 0x1118, 0x2031, 0x0001, 0x00e8,
+	0x97c4, 0x0022, 0x98c6, 0x0022, 0x1118, 0x2031, 0x0003, 0x00a8,
+	0x97c4, 0x0012, 0x98c6, 0x0012, 0x1118, 0x2031, 0x0002, 0x0068,
+	0x080c, 0x74e9, 0x1118, 0x2031, 0x0004, 0x0038, 0xd79c, 0x0120,
+	0x2009, 0x0005, 0x0804, 0x35a5, 0x9036, 0x7e9a, 0x7f9e, 0x0804,
+	0x3573, 0x614c, 0x6250, 0x2019, 0x1986, 0x231c, 0x2001, 0x1987,
+	0x2004, 0x789a, 0x0804, 0x3573, 0x0126, 0x2091, 0x8000, 0x6138,
+	0x623c, 0x6340, 0x012e, 0x0804, 0x3573, 0x080c, 0x4ada, 0x0904,
+	0x35a8, 0xba44, 0xbb38, 0x0804, 0x3573, 0x080c, 0x0d7d, 0x080c,
+	0x4ada, 0x2110, 0x0904, 0x35a8, 0xb804, 0x908c, 0x00ff, 0x918e,
+	0x0006, 0x0140, 0x9084, 0xff00, 0x9086, 0x0600, 0x2009, 0x0009,
+	0x1904, 0x35a5, 0x0126, 0x2091, 0x8000, 0x2019, 0x0005, 0x00c6,
+	0x9066, 0x080c, 0xa896, 0x080c, 0xa38a, 0x080c, 0x93a5, 0x0076,
+	0x903e, 0x080c, 0x9277, 0x900e, 0x080c, 0xdfeb, 0x007e, 0x00ce,
+	0x080c, 0xa8b2, 0xb807, 0x0407, 0x012e, 0x0804, 0x3573, 0x614c,
+	0x6250, 0x7884, 0x604e, 0x7b88, 0x6352, 0x2069, 0x1847, 0x831f,
+	0x9305, 0x6816, 0x788c, 0x2069, 0x1986, 0x2d1c, 0x206a, 0x7e98,
+	0x9682, 0x0014, 0x1210, 0x2031, 0x07d0, 0x2069, 0x1987, 0x2d04,
+	0x266a, 0x789a, 0x0804, 0x3573, 0x0126, 0x2091, 0x8000, 0x6138,
+	0x7884, 0x603a, 0x910e, 0xd1b4, 0x190c, 0x0ecc, 0xd0c4, 0x01a8,
+	0x00d6, 0x78a8, 0x2009, 0x199d, 0x200a, 0x78ac, 0x2011, 0x199e,
+	0x2012, 0x2069, 0x0100, 0x6838, 0x9086, 0x0007, 0x1118, 0x2214,
+	0x6a5a, 0x0010, 0x210c, 0x695a, 0x00de, 0x7888, 0x603e, 0x2011,
+	0x0116, 0x220c, 0x7888, 0xd08c, 0x0118, 0x918d, 0x0040, 0x0010,
+	0x918c, 0xff7f, 0x2112, 0x6140, 0x788c, 0x6042, 0x910e, 0xd1e4,
+	0x190c, 0x0ee7, 0x9084, 0x0020, 0x0130, 0x78b4, 0x6046, 0x9084,
+	0x0001, 0x090c, 0x4246, 0x6040, 0xd0cc, 0x0120, 0x78b0, 0x2011,
+	0x0114, 0x2012, 0x012e, 0x0804, 0x3573, 0x00f6, 0x2079, 0x1800,
+	0x7a38, 0xa898, 0x9084, 0xfebf, 0x9215, 0xa89c, 0x9084, 0xfebf,
+	0x8002, 0x9214, 0x7838, 0x9084, 0x0140, 0x9215, 0x7a3a, 0xa897,
+	0x4000, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x00fe, 0x0005,
+	0x7898, 0x9005, 0x01a8, 0x7888, 0x9025, 0x0904, 0x35a8, 0x788c,
+	0x902d, 0x0904, 0x35a8, 0x900e, 0x080c, 0x6625, 0x1120, 0xba44,
+	0xbb38, 0xbc46, 0xbd3a, 0x9186, 0x07ff, 0x0190, 0x8108, 0x0ca0,
+	0x080c, 0x4ada, 0x0904, 0x35a8, 0x7888, 0x900d, 0x0904, 0x35a8,
+	0x788c, 0x9005, 0x0904, 0x35a8, 0xba44, 0xb946, 0xbb38, 0xb83a,
+	0x0804, 0x3573, 0x2011, 0xbc09, 0x0010, 0x2011, 0xbc05, 0x080c,
+	0x56ee, 0x1904, 0x35a5, 0x00c6, 0x2061, 0x0100, 0x7984, 0x9186,
+	0x00ff, 0x1130, 0x2001, 0x1818, 0x2004, 0x9085, 0xff00, 0x0088,
+	0x9182, 0x007f, 0x16e0, 0x9188, 0x3374, 0x210d, 0x918c, 0x00ff,
+	0x2001, 0x1818, 0x2004, 0x0026, 0x9116, 0x002e, 0x0580, 0x810f,
+	0x9105, 0x0126, 0x2091, 0x8000, 0x0006, 0x080c, 0xab97, 0x000e,
+	0x0510, 0x602e, 0x620a, 0x7984, 0x00b6, 0x080c, 0x65ca, 0x2b08,
+	0x00be, 0x1500, 0x6112, 0x6023, 0x0001, 0x080c, 0x4aa7, 0x01d0,
+	0x9006, 0xa866, 0x7007, 0x0003, 0xa832, 0xa868, 0xc0fd, 0xa86a,
+	0x701f, 0x3a55, 0x2900, 0x6016, 0x2009, 0x0032, 0x080c, 0xac8c,
+	0x012e, 0x00ce, 0x0005, 0x012e, 0x00ce, 0x0804, 0x35a5, 0x00ce,
+	0x0804, 0x35a8, 0x080c, 0xabed, 0x0cb0, 0xa830, 0x9086, 0x0100,
+	0x0904, 0x35a5, 0x0804, 0x3573, 0x2061, 0x1a6f, 0x0126, 0x2091,
+	0x8000, 0x6000, 0xd084, 0x0170, 0x6104, 0x6208, 0x2061, 0x1800,
+	0x6354, 0x6074, 0x789a, 0x60c0, 0x789e, 0x60bc, 0x78aa, 0x012e,
+	0x0804, 0x3573, 0x900e, 0x2110, 0x0c88, 0x81ff, 0x1904, 0x35a5,
+	0x080c, 0x74e9, 0x0904, 0x35a5, 0x0126, 0x2091, 0x8000, 0x6254,
+	0x6074, 0x9202, 0x0248, 0x9085, 0x0001, 0x080c, 0x2664, 0x080c,
+	0x5908, 0x012e, 0x0804, 0x3573, 0x012e, 0x0804, 0x35a8, 0x0006,
+	0x0016, 0x00c6, 0x00e6, 0x2001, 0x19a9, 0x2070, 0x2061, 0x1847,
+	0x6008, 0x2072, 0x900e, 0x2011, 0x1400, 0x080c, 0x9166, 0x7206,
+	0x00ee, 0x00ce, 0x001e, 0x000e, 0x0005, 0x0126, 0x2091, 0x8000,
+	0x81ff, 0x0128, 0x012e, 0x2021, 0x400b, 0x0804, 0x3575, 0x7884,
+	0xd0fc, 0x0148, 0x2001, 0x002a, 0x2004, 0x9082, 0x00e1, 0x0288,
+	0x012e, 0x0804, 0x35a8, 0x2001, 0x002a, 0x2004, 0x2069, 0x1847,
+	0x6908, 0x9102, 0x1230, 0x012e, 0x0804, 0x35a8, 0x012e, 0x0804,
+	0x35a5, 0x080c, 0xab57, 0x0dd0, 0x7884, 0xd0fc, 0x0904, 0x3b20,
+	0x00c6, 0x080c, 0x4aa7, 0x00ce, 0x0d88, 0xa867, 0x0000, 0x7884,
+	0xa80a, 0x7898, 0xa80e, 0x789c, 0xa812, 0x2001, 0x002e, 0x2004,
+	0xa81a, 0x2001, 0x002f, 0x2004, 0xa81e, 0x2001, 0x0030, 0x2004,
+	0xa822, 0x2001, 0x0031, 0x2004, 0xa826, 0x2001, 0x0034, 0x2004,
+	0xa82a, 0x2001, 0x0035, 0x2004, 0xa82e, 0x2001, 0x002a, 0x2004,
+	0x9080, 0x0003, 0x9084, 0x00fc, 0x8004, 0xa816, 0x080c, 0x3caa,
+	0x0928, 0x7014, 0x2048, 0xad2c, 0xac28, 0xab1c, 0xaa18, 0xa930,
 	0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021, 0x0000, 0x8906,
 	0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b,
-	0x21a8, 0x27e0, 0x2098, 0x27e8, 0x20a0, 0x0006, 0x080c, 0x0fb7,
-	0x000e, 0x080c, 0x4aec, 0x007e, 0x701f, 0x3be0, 0x7023, 0x0001,
-	0x0005, 0x0804, 0x356c, 0x0156, 0x00c6, 0xa814, 0x908a, 0x001e,
-	0x0218, 0xa833, 0x001e, 0x0010, 0xa832, 0x0078, 0x81ff, 0x0168,
-	0x0016, 0x080c, 0x4aa0, 0x001e, 0x0130, 0xa800, 0x2040, 0xa008,
-	0xa80a, 0x2100, 0x0c58, 0x9006, 0x0010, 0x9085, 0x0001, 0x00ce,
-	0x015e, 0x0005, 0x0006, 0x00f6, 0x2079, 0x0000, 0x7880, 0x9086,
-	0x0044, 0x00fe, 0x000e, 0x0005, 0x2001, 0x199f, 0x2003, 0x0001,
-	0x0005, 0x00f6, 0x00e6, 0x00c6, 0x2061, 0x0200, 0x2001, 0x19aa,
-	0x2004, 0x601a, 0x2061, 0x0100, 0x2001, 0x19a9, 0x2004, 0x60ce,
-	0x6104, 0xc1ac, 0x6106, 0x080c, 0x4aa0, 0xa813, 0x0019, 0xa817,
-	0x0001, 0x2900, 0xa85a, 0x2001, 0x002e, 0x2004, 0xa866, 0x2001,
-	0x002f, 0x2004, 0xa86a, 0x2061, 0x0090, 0x2079, 0x0100, 0x2001,
-	0x19a9, 0x2004, 0x6036, 0x2009, 0x0040, 0x080c, 0x21b0, 0x2001,
-	0x002a, 0x2004, 0x9084, 0xfff8, 0xa86e, 0x601a, 0xa873, 0x0000,
-	0x601f, 0x0000, 0x78ca, 0x9006, 0x600a, 0x600e, 0x00ce, 0x00ee,
-	0x00fe, 0x0005, 0x00e6, 0x080c, 0x4aa0, 0x2940, 0xa013, 0x0019,
-	0xa017, 0x0001, 0x2800, 0xa05a, 0x2001, 0x0030, 0x2004, 0xa866,
-	0x2001, 0x0031, 0x2004, 0xa86a, 0x2001, 0x002a, 0x2004, 0x9084,
-	0xfff8, 0xa86e, 0xa873, 0x0000, 0x2001, 0x032a, 0x2003, 0x0004,
-	0x2001, 0x0300, 0x2003, 0x0000, 0x2001, 0x020d, 0x2003, 0x0000,
-	0x2001, 0x0004, 0x200c, 0x918d, 0x0002, 0x2102, 0x00ee, 0x0005,
-	0x0126, 0x2091, 0x8000, 0x81ff, 0x0148, 0x080c, 0x29e8, 0x1130,
-	0x9006, 0x080c, 0x2945, 0x9006, 0x080c, 0x2928, 0x7884, 0x9084,
-	0x0007, 0x0002, 0x3d5d, 0x3d66, 0x3d6f, 0x3d5a, 0x3d5a, 0x3d5a,
-	0x3d5a, 0x3d5a, 0x012e, 0x0804, 0x35a1, 0x2009, 0x0114, 0x2104,
-	0x9085, 0x0800, 0x200a, 0x080c, 0x3f31, 0x00c0, 0x2009, 0x0114,
-	0x2104, 0x9085, 0x4000, 0x200a, 0x080c, 0x3f31, 0x0078, 0x080c,
-	0x74d5, 0x1128, 0x012e, 0x2009, 0x0016, 0x0804, 0x359e, 0x81ff,
-	0x0128, 0x012e, 0x2021, 0x400b, 0x0804, 0x356e, 0x080c, 0xa872,
-	0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6,
-	0x080c, 0x3a88, 0x2009, 0x0101, 0x210c, 0x0016, 0x7ec8, 0x7dcc,
-	0x9006, 0x2068, 0x2060, 0x2058, 0x080c, 0x41d2, 0x080c, 0x4122,
-	0x903e, 0x2720, 0x00f6, 0x00e6, 0x0086, 0x2940, 0x2071, 0x19e7,
-	0x2079, 0x0090, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0120,
-	0x68d4, 0x780e, 0x68d0, 0x780a, 0x00de, 0x2011, 0x0001, 0x080c,
-	0x4083, 0x080c, 0x29f0, 0x080c, 0x29f0, 0x080c, 0x29f0, 0x080c,
-	0x29f0, 0x080c, 0x4083, 0x008e, 0x00ee, 0x00fe, 0x080c, 0x3fb0,
-	0x2009, 0x9c40, 0x8109, 0x11b0, 0x080c, 0x3ee7, 0x2001, 0x0004,
-	0x200c, 0x918c, 0xfffd, 0x2102, 0x001e, 0x00fe, 0x00ee, 0x00de,
-	0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e, 0x2009, 0x0017, 0x080c,
-	0x359e, 0x0cf8, 0x2001, 0x020b, 0x2004, 0x9084, 0x0140, 0x1d10,
-	0x00f6, 0x2079, 0x0000, 0x7884, 0x00fe, 0xd0bc, 0x0178, 0x2001,
-	0x0201, 0x200c, 0x81ff, 0x0150, 0x080c, 0x3f8e, 0x2d00, 0x9c05,
-	0x9b05, 0x0120, 0x080c, 0x3ee7, 0x0804, 0x3e90, 0x080c, 0x40f7,
-	0x080c, 0x401b, 0x080c, 0x3f71, 0x080c, 0x3fa6, 0x00f6, 0x2079,
-	0x0100, 0x7824, 0xd0ac, 0x0130, 0x8b58, 0x080c, 0x3ee7, 0x00fe,
-	0x0804, 0x3e90, 0x00fe, 0x080c, 0x3edd, 0x1150, 0x8d68, 0x2001,
-	0x0032, 0x2602, 0x2001, 0x0033, 0x2502, 0x080c, 0x3ee7, 0x0080,
-	0x87ff, 0x0138, 0x2001, 0x0201, 0x2004, 0x9005, 0x1908, 0x8739,
-	0x0038, 0x2001, 0x1a6b, 0x2004, 0x9086, 0x0000, 0x1904, 0x3de0,
-	0x2001, 0x032f, 0x2003, 0x00f6, 0x8631, 0x1208, 0x8529, 0x2500,
-	0x9605, 0x0904, 0x3e90, 0x7884, 0xd0bc, 0x0128, 0x2d00, 0x9c05,
-	0x9b05, 0x1904, 0x3e90, 0xa013, 0x0019, 0x2001, 0x032a, 0x2003,
-	0x0004, 0x7884, 0xd0ac, 0x1148, 0x2001, 0x1a6b, 0x2003, 0x0003,
-	0x2001, 0x032a, 0x2003, 0x0009, 0x0030, 0xa017, 0x0001, 0x78b4,
-	0x9005, 0x0108, 0xa016, 0x2800, 0xa05a, 0x2009, 0x0040, 0x080c,
-	0x21b0, 0x2900, 0xa85a, 0xa813, 0x0019, 0x7884, 0xd0a4, 0x1180,
-	0xa817, 0x0000, 0x00c6, 0x20a9, 0x0004, 0x2061, 0x0090, 0x602b,
-	0x0008, 0x2001, 0x0203, 0x2004, 0x1f04, 0x3e67, 0x00ce, 0x0030,
-	0xa817, 0x0001, 0x78b0, 0x9005, 0x0108, 0xa816, 0x00f6, 0x00c6,
-	0x2079, 0x0100, 0x2061, 0x0090, 0x7827, 0x0002, 0x2001, 0x002a,
-	0x2004, 0x9084, 0xfff8, 0x601a, 0x0006, 0x2001, 0x002b, 0x2004,
-	0x601e, 0x78c6, 0x000e, 0x78ca, 0x00ce, 0x00fe, 0x0804, 0x3d9a,
-	0x001e, 0x00c6, 0x2001, 0x032a, 0x2003, 0x0004, 0x2061, 0x0100,
-	0x6027, 0x0002, 0x6106, 0x2011, 0x020d, 0x2013, 0x0020, 0x2001,
-	0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, 0x080c, 0x1328, 0x7884,
-	0x9084, 0x0003, 0x9086, 0x0002, 0x01b0, 0x2009, 0x0028, 0x080c,
-	0x21b0, 0x2001, 0x0227, 0x200c, 0x2102, 0x6050, 0x9084, 0xb7ff,
-	0x080c, 0x2aab, 0x6052, 0x602f, 0x0000, 0x604b, 0xf7f7, 0x6043,
-	0x0090, 0x6043, 0x0010, 0x080c, 0xa88e, 0x00ce, 0x2d08, 0x2c10,
-	0x2b18, 0x2b00, 0x9c05, 0x9d05, 0x00fe, 0x00ee, 0x00de, 0x00ce,
-	0x00be, 0x00ae, 0x009e, 0x008e, 0x1118, 0x012e, 0x0804, 0x356c,
-	0x012e, 0x2021, 0x400c, 0x0804, 0x356e, 0x9085, 0x0001, 0x1d04,
-	0x3ee6, 0x2091, 0x6000, 0x8420, 0x9486, 0x0064, 0x0005, 0x2001,
-	0x0105, 0x2003, 0x0010, 0x2001, 0x032a, 0x2003, 0x0004, 0x2001,
-	0x1a6b, 0x2003, 0x0000, 0x0071, 0x2009, 0x0048, 0x080c, 0x21b0,
-	0x2001, 0x0227, 0x2024, 0x2402, 0x2001, 0x0109, 0x2003, 0x4000,
-	0x9026, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x19e7, 0x7054, 0x9086,
-	0x0000, 0x0520, 0x2079, 0x0090, 0x2009, 0x0206, 0x2104, 0x2009,
-	0x0203, 0x210c, 0x9106, 0x1120, 0x2009, 0x0040, 0x080c, 0x21b0,
-	0x782c, 0xd0fc, 0x0d88, 0x080c, 0x40f7, 0x7054, 0x9086, 0x0000,
-	0x1d58, 0x782b, 0x0004, 0x782c, 0xd0ac, 0x1de8, 0x2009, 0x0040,
-	0x080c, 0x21b0, 0x782b, 0x0002, 0x7057, 0x0000, 0x00ee, 0x00fe,
-	0x0005, 0x00f6, 0x2079, 0x0100, 0x2001, 0x1818, 0x200c, 0x7932,
-	0x7936, 0x080c, 0x2644, 0x080c, 0x2a67, 0x080c, 0x2aab, 0x784b,
-	0xf7f7, 0x7843, 0x0090, 0x7843, 0x0010, 0x7850, 0xc0e5, 0x7852,
-	0x2019, 0x61a8, 0x7820, 0xd09c, 0x0110, 0x8319, 0x1dd8, 0x7850,
-	0xc0e4, 0x7852, 0x2011, 0x0048, 0x080c, 0x2a44, 0x7843, 0x0040,
-	0x2019, 0x01f4, 0xa001, 0xa001, 0x8319, 0x1de0, 0x2001, 0x0100,
-	0x080c, 0x2a0a, 0x2011, 0x0020, 0x080c, 0x2a44, 0x7843, 0x0000,
-	0x9006, 0x080c, 0x2a0a, 0x2011, 0x0048, 0x080c, 0x2a44, 0x00fe,
-	0x0005, 0x7884, 0xd0ac, 0x11c8, 0x00f6, 0x00e6, 0x2071, 0x1a6b,
-	0x2079, 0x0320, 0x2001, 0x0201, 0x2004, 0x9005, 0x0160, 0x7000,
-	0x9086, 0x0000, 0x1140, 0x0051, 0xd0bc, 0x0108, 0x8738, 0x7003,
-	0x0003, 0x782b, 0x0019, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x2079,
-	0x0300, 0x78bc, 0x00fe, 0x908c, 0x0070, 0x0178, 0x2009, 0x0032,
-	0x260a, 0x2009, 0x0033, 0x250a, 0xd0b4, 0x0108, 0x8c60, 0xd0ac,
-	0x0108, 0x8d68, 0xd0a4, 0x0108, 0x8b58, 0x0005, 0x00f6, 0x2079,
-	0x0200, 0x781c, 0xd084, 0x0110, 0x7837, 0x0050, 0x00fe, 0x0005,
-	0x00e6, 0x2071, 0x0100, 0x2001, 0x19aa, 0x2004, 0x70e2, 0x080c,
-	0x3cc2, 0x1188, 0x2001, 0x1820, 0x2004, 0x2009, 0x181f, 0x210c,
-	0x918c, 0x00ff, 0x706e, 0x716a, 0x7066, 0x918d, 0x3200, 0x7162,
-	0x7073, 0xe109, 0x0080, 0x702c, 0x9085, 0x0002, 0x702e, 0x2009,
-	0x1818, 0x210c, 0x716e, 0x7063, 0x0100, 0x7166, 0x719e, 0x706b,
-	0x0000, 0x7073, 0x0809, 0x7077, 0x0008, 0x7078, 0x9080, 0x0100,
-	0x707a, 0x7080, 0x8000, 0x7082, 0x7087, 0xaaaa, 0x9006, 0x708a,
-	0x708e, 0x707e, 0x70d6, 0x70ab, 0x0036, 0x70af, 0x95d5, 0x7014,
-	0x9084, 0x1984, 0x9085, 0x0092, 0x7016, 0x080c, 0x40f7, 0x00f6,
-	0x2071, 0x1a6b, 0x2079, 0x0320, 0x00d6, 0x2069, 0x0000, 0x6884,
-	0xd0b4, 0x0120, 0x689c, 0x780e, 0x6898, 0x780a, 0x00de, 0x2009,
-	0x03e8, 0x8109, 0x1df0, 0x792c, 0xd1fc, 0x0110, 0x782b, 0x0004,
-	0x2011, 0x0011, 0x080c, 0x4083, 0x2011, 0x0001, 0x080c, 0x4083,
-	0x00fe, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a6b, 0x2079,
-	0x0320, 0x792c, 0xd1fc, 0x0904, 0x4080, 0x782b, 0x0002, 0x9026,
-	0xd19c, 0x1904, 0x407c, 0x7000, 0x0002, 0x4080, 0x4031, 0x4061,
-	0x407c, 0xd1bc, 0x1170, 0xd1dc, 0x1190, 0x8001, 0x7002, 0x2011,
-	0x0001, 0x080c, 0x4083, 0x0904, 0x4080, 0x080c, 0x4083, 0x0804,
-	0x4080, 0x00f6, 0x2079, 0x0300, 0x78bf, 0x0000, 0x00fe, 0x7810,
-	0x7914, 0x782b, 0x0004, 0x7812, 0x7916, 0x2001, 0x0201, 0x200c,
-	0x81ff, 0x0de8, 0x080c, 0x3f8e, 0x2009, 0x0001, 0x00f6, 0x2079,
-	0x0300, 0x78b8, 0x00fe, 0xd0ec, 0x0110, 0x2009, 0x0011, 0x792a,
-	0x00f8, 0x8001, 0x7002, 0x9184, 0x0880, 0x1140, 0x782c, 0xd0fc,
-	0x1904, 0x4025, 0x2011, 0x0001, 0x00b1, 0x0090, 0xa010, 0x9092,
-	0x0004, 0x9086, 0x0015, 0x1120, 0xa000, 0xa05a, 0x2011, 0x0031,
-	0xa212, 0xd1dc, 0x1960, 0x0828, 0x782b, 0x0004, 0x7003, 0x0000,
-	0x00ee, 0x00fe, 0x0005, 0xa014, 0x9005, 0x0550, 0x8001, 0x0036,
-	0x0096, 0xa016, 0xa058, 0x2048, 0xa010, 0x2009, 0x0031, 0x911a,
-	0x831c, 0x831c, 0x938a, 0x0007, 0x1a0c, 0x0d7d, 0x9398, 0x40b1,
-	0x231d, 0x083f, 0x9080, 0x0004, 0x7a2a, 0x7100, 0x8108, 0x7102,
-	0x009e, 0x003e, 0x908a, 0x0035, 0x1140, 0x0096, 0xa058, 0x2048,
-	0xa804, 0xa05a, 0x2001, 0x0019, 0x009e, 0xa012, 0x9085, 0x0001,
-	0x0005, 0x40ee, 0x40e5, 0x40dc, 0x40d3, 0x40ca, 0x40c1, 0x40b8,
-	0xa964, 0x7902, 0xa968, 0x7906, 0xa96c, 0x7912, 0xa970, 0x7916,
-	0x0005, 0xa974, 0x7902, 0xa978, 0x7906, 0xa97c, 0x7912, 0xa980,
-	0x7916, 0x0005, 0xa984, 0x7902, 0xa988, 0x7906, 0xa98c, 0x7912,
-	0xa990, 0x7916, 0x0005, 0xa994, 0x7902, 0xa998, 0x7906, 0xa99c,
-	0x7912, 0xa9a0, 0x7916, 0x0005, 0xa9a4, 0x7902, 0xa9a8, 0x7906,
-	0xa9ac, 0x7912, 0xa9b0, 0x7916, 0x0005, 0xa9b4, 0x7902, 0xa9b8,
-	0x7906, 0xa9bc, 0x7912, 0xa9c0, 0x7916, 0x0005, 0xa9c4, 0x7902,
-	0xa9c8, 0x7906, 0xa9cc, 0x7912, 0xa9d0, 0x7916, 0x0005, 0x00f6,
-	0x00e6, 0x0086, 0x2071, 0x19e7, 0x2079, 0x0090, 0x792c, 0xd1fc,
-	0x01e8, 0x782b, 0x0002, 0x2940, 0x9026, 0x7054, 0x0002, 0x411e,
-	0x410a, 0x4115, 0x8001, 0x7056, 0xd19c, 0x1180, 0x2011, 0x0001,
-	0x080c, 0x4083, 0x190c, 0x4083, 0x0048, 0x8001, 0x7056, 0x782c,
-	0xd0fc, 0x1d38, 0x2011, 0x0001, 0x080c, 0x4083, 0x008e, 0x00ee,
-	0x00fe, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086, 0x2061, 0x0200,
-	0x2001, 0x19aa, 0x2004, 0x601a, 0x2061, 0x0100, 0x2001, 0x19a9,
-	0x2004, 0x60ce, 0x6104, 0xc1ac, 0x6106, 0x2001, 0x002c, 0x2004,
-	0x9005, 0x0520, 0x2038, 0x2001, 0x002e, 0x2024, 0x2001, 0x002f,
-	0x201c, 0x080c, 0x4aa0, 0xa813, 0x0019, 0xaf16, 0x2900, 0xa85a,
-	0x978a, 0x0007, 0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708,
-	0x903e, 0x0096, 0xa858, 0x2048, 0xa85c, 0x9080, 0x0019, 0x009e,
-	0x080c, 0x419a, 0x1d68, 0x2900, 0xa85a, 0x00d0, 0x080c, 0x4aa0,
-	0xa813, 0x0019, 0xa817, 0x0001, 0x2900, 0xa85a, 0x2001, 0x002e,
-	0x2004, 0xa866, 0x2001, 0x002f, 0x2004, 0xa86a, 0x2001, 0x002a,
-	0x2004, 0x9084, 0xfff8, 0xa86e, 0x2001, 0x002b, 0x2004, 0xa872,
-	0x2061, 0x0090, 0x2079, 0x0100, 0x2001, 0x19a9, 0x2004, 0x6036,
-	0x2009, 0x0040, 0x080c, 0x21b0, 0x2001, 0x002a, 0x2004, 0x9084,
-	0xfff8, 0x601a, 0x0006, 0x2001, 0x002b, 0x2004, 0x601e, 0x78c6,
-	0x000e, 0x78ca, 0x9006, 0x600a, 0x600e, 0x008e, 0x00ce, 0x00ee,
-	0x00fe, 0x0005, 0x00e6, 0x2071, 0x0080, 0xaa60, 0x22e8, 0x20a0,
-	0x20e1, 0x0000, 0x2099, 0x0088, 0x702b, 0x0026, 0x7402, 0x7306,
-	0x9006, 0x700a, 0x700e, 0x810b, 0x810b, 0x21a8, 0x810b, 0x7112,
-	0x702b, 0x0041, 0x702c, 0xd0fc, 0x0de8, 0x702b, 0x0002, 0x702b,
-	0x0040, 0x4005, 0x7400, 0x7304, 0x87ff, 0x0190, 0x0086, 0x0096,
-	0x2940, 0x0086, 0x080c, 0x4aa0, 0x008e, 0xa058, 0x00a6, 0x2050,
-	0x2900, 0xb006, 0xa05a, 0x00ae, 0x009e, 0x008e, 0x9085, 0x0001,
-	0x00ee, 0x0005, 0x00e6, 0x2001, 0x002d, 0x2004, 0x9005, 0x0528,
-	0x2038, 0x2001, 0x0030, 0x2024, 0x2001, 0x0031, 0x201c, 0x080c,
-	0x4aa0, 0x2940, 0xa813, 0x0019, 0xaf16, 0x2900, 0xa85a, 0x978a,
-	0x0007, 0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e,
-	0x0096, 0xa858, 0x2048, 0xa85c, 0x9080, 0x0019, 0x009e, 0x080c,
-	0x419a, 0x1d68, 0x2900, 0xa85a, 0x00d8, 0x080c, 0x4aa0, 0x2940,
-	0xa013, 0x0019, 0xa017, 0x0001, 0x2800, 0xa05a, 0x2001, 0x0030,
-	0x2004, 0xa066, 0x2001, 0x0031, 0x2004, 0xa06a, 0x2001, 0x002a,
-	0x2004, 0x9084, 0xfff8, 0xa06e, 0x2001, 0x002b, 0x2004, 0xa072,
-	0x2001, 0x032a, 0x2003, 0x0004, 0x7884, 0xd0ac, 0x1180, 0x2001,
-	0x0101, 0x200c, 0x918d, 0x0200, 0x2102, 0xa017, 0x0000, 0x2001,
-	0x1a6b, 0x2003, 0x0003, 0x2001, 0x032a, 0x2003, 0x0009, 0x2001,
+	0x080c, 0x4af0, 0x701f, 0x3be7, 0x7023, 0x0001, 0x012e, 0x0005,
+	0x080c, 0xa896, 0x0046, 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6,
+	0x00d6, 0x00e6, 0x00f6, 0x080c, 0x3a8f, 0x2001, 0x199f, 0x2003,
+	0x0000, 0x2021, 0x000a, 0x2061, 0x0100, 0x6104, 0x0016, 0x60bb,
+	0x0000, 0x60bf, 0x32e1, 0x60bf, 0x0012, 0x080c, 0x3d19, 0x080c,
+	0x3cd8, 0x00f6, 0x00e6, 0x0086, 0x2940, 0x2071, 0x19e7, 0x2079,
+	0x0090, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0140, 0x2001,
+	0x0035, 0x2004, 0x780e, 0x2001, 0x0034, 0x2004, 0x780a, 0x00de,
+	0x2011, 0x0001, 0x080c, 0x408a, 0x008e, 0x00ee, 0x00fe, 0x080c,
+	0x3fb7, 0x080c, 0x3ee4, 0x05b8, 0x2001, 0x020b, 0x2004, 0x9084,
+	0x0140, 0x1db8, 0x080c, 0x40fe, 0x00f6, 0x2079, 0x0300, 0x78bc,
+	0x00fe, 0x908c, 0x0070, 0x1560, 0x2071, 0x0200, 0x7037, 0x0000,
+	0x7050, 0x9084, 0xff00, 0x9086, 0x3200, 0x1510, 0x7037, 0x0001,
+	0x7050, 0x9084, 0xff00, 0x9086, 0xe100, 0x11d0, 0x7037, 0x0000,
+	0x7054, 0x7037, 0x0000, 0x715c, 0x9106, 0x1190, 0x2001, 0x1820,
+	0x2004, 0x9106, 0x1168, 0x00c6, 0x2061, 0x0100, 0x6024, 0x9084,
+	0x1e00, 0x00ce, 0x0138, 0x080c, 0x3eee, 0x080c, 0x3cd3, 0x0058,
+	0x080c, 0x3cd3, 0x080c, 0x4022, 0x080c, 0x3fad, 0x2001, 0x020b,
+	0x2004, 0xd0e4, 0x0dd8, 0x2001, 0x032a, 0x2003, 0x0004, 0x2061,
+	0x0100, 0x6027, 0x0002, 0x001e, 0x6106, 0x2011, 0x020d, 0x2013,
+	0x0020, 0x60bb, 0x0000, 0x60bf, 0x0108, 0x60bf, 0x0012, 0x2001,
+	0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, 0x080c, 0x1328, 0x2009,
+	0x0028, 0x080c, 0x21b0, 0x2001, 0x0227, 0x200c, 0x2102, 0x080c,
+	0xa8b2, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e,
+	0x008e, 0x004e, 0x2001, 0x199f, 0x2004, 0x9005, 0x1118, 0x012e,
+	0x0804, 0x3573, 0x012e, 0x2021, 0x400c, 0x0804, 0x3575, 0x0016,
+	0x0026, 0x0036, 0x0046, 0x0056, 0x0076, 0x0086, 0x0096, 0x00d6,
+	0x0156, 0x7014, 0x2048, 0x7020, 0x20a8, 0x8000, 0x7022, 0xa804,
+	0x9005, 0x0904, 0x3c43, 0x2048, 0x1f04, 0x3bf7, 0x7068, 0x2040,
+	0xa28c, 0xa390, 0xa494, 0xa598, 0xa930, 0xa808, 0xd0b4, 0x1120,
+	0x2029, 0x0000, 0x2021, 0x0000, 0x0096, 0x7014, 0x2048, 0xa864,
+	0x009e, 0x9086, 0x0103, 0x0170, 0x8906, 0x8006, 0x8007, 0x90bc,
+	0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, 0x080c, 0x4af0, 0x701f,
+	0x3be7, 0x00b0, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084,
+	0xffc0, 0x9080, 0x001b, 0x21a8, 0x27e0, 0x2098, 0x27e8, 0x20a0,
+	0x0006, 0x080c, 0x0fb7, 0x000e, 0x080c, 0x4af3, 0x701f, 0x3be7,
+	0x015e, 0x00de, 0x009e, 0x008e, 0x007e, 0x005e, 0x004e, 0x003e,
+	0x002e, 0x001e, 0x0005, 0x7014, 0x2048, 0xa864, 0x9086, 0x0103,
+	0x1118, 0x701f, 0x3ca8, 0x0450, 0x7014, 0x2048, 0xa868, 0xc0fd,
+	0xa86a, 0x2009, 0x007f, 0x080c, 0x65c4, 0x0110, 0x9006, 0x0030,
+	0xb813, 0x00ff, 0xb817, 0xfffd, 0x080c, 0xcd1b, 0x015e, 0x00de,
+	0x009e, 0x008e, 0x007e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e,
+	0x0904, 0x35a5, 0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0076,
+	0x0086, 0x0096, 0x00d6, 0x0156, 0x701f, 0x3c7a, 0x7007, 0x0003,
+	0x0804, 0x3c38, 0xa830, 0x9086, 0x0100, 0x2021, 0x400c, 0x0904,
+	0x3575, 0x0076, 0xad10, 0xac0c, 0xab24, 0xaa20, 0xa930, 0xa808,
+	0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021, 0x0000, 0x8906, 0x8006,
+	0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, 0x21a8,
+	0x27e0, 0x2098, 0x27e8, 0x20a0, 0x0006, 0x080c, 0x0fb7, 0x000e,
+	0x080c, 0x4af3, 0x007e, 0x701f, 0x3be7, 0x7023, 0x0001, 0x0005,
+	0x0804, 0x3573, 0x0156, 0x00c6, 0xa814, 0x908a, 0x001e, 0x0218,
+	0xa833, 0x001e, 0x0010, 0xa832, 0x0078, 0x81ff, 0x0168, 0x0016,
+	0x080c, 0x4aa7, 0x001e, 0x0130, 0xa800, 0x2040, 0xa008, 0xa80a,
+	0x2100, 0x0c58, 0x9006, 0x0010, 0x9085, 0x0001, 0x00ce, 0x015e,
+	0x0005, 0x0006, 0x00f6, 0x2079, 0x0000, 0x7880, 0x9086, 0x0044,
+	0x00fe, 0x000e, 0x0005, 0x2001, 0x199f, 0x2003, 0x0001, 0x0005,
+	0x00f6, 0x00e6, 0x00c6, 0x2061, 0x0200, 0x2001, 0x19aa, 0x2004,
+	0x601a, 0x2061, 0x0100, 0x2001, 0x19a9, 0x2004, 0x60ce, 0x6104,
+	0xc1ac, 0x6106, 0x080c, 0x4aa7, 0xa813, 0x0019, 0xa817, 0x0001,
+	0x2900, 0xa85a, 0x2001, 0x002e, 0x2004, 0xa866, 0x2001, 0x002f,
+	0x2004, 0xa86a, 0x2061, 0x0090, 0x2079, 0x0100, 0x2001, 0x19a9,
+	0x2004, 0x6036, 0x2009, 0x0040, 0x080c, 0x21b0, 0x2001, 0x002a,
+	0x2004, 0x9084, 0xfff8, 0xa86e, 0x601a, 0xa873, 0x0000, 0x601f,
+	0x0000, 0x78ca, 0x9006, 0x600a, 0x600e, 0x00ce, 0x00ee, 0x00fe,
+	0x0005, 0x00e6, 0x080c, 0x4aa7, 0x2940, 0xa013, 0x0019, 0xa017,
+	0x0001, 0x2800, 0xa05a, 0x2001, 0x0030, 0x2004, 0xa866, 0x2001,
+	0x0031, 0x2004, 0xa86a, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8,
+	0xa86e, 0xa873, 0x0000, 0x2001, 0x032a, 0x2003, 0x0004, 0x2001,
 	0x0300, 0x2003, 0x0000, 0x2001, 0x020d, 0x2003, 0x0000, 0x2001,
 	0x0004, 0x200c, 0x918d, 0x0002, 0x2102, 0x00ee, 0x0005, 0x0126,
-	0x2091, 0x8000, 0x20a9, 0x0007, 0x20a1, 0x1840, 0x20e9, 0x0001,
-	0x9006, 0x4004, 0x20a9, 0x000c, 0x20a1, 0xfff4, 0x20e9, 0x0000,
-	0x9006, 0x4004, 0x2009, 0x013c, 0x200a, 0x012e, 0x7880, 0x9086,
-	0x0052, 0x0108, 0x0005, 0x0804, 0x356c, 0x7d98, 0x7c9c, 0x0804,
-	0x3663, 0x080c, 0x74d5, 0x190c, 0x5fe7, 0x6040, 0x9084, 0x0020,
-	0x09b1, 0x2069, 0x1847, 0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88,
-	0x7c9c, 0x7d98, 0x2039, 0x0001, 0x080c, 0x4ae9, 0x701f, 0x4279,
-	0x0005, 0x080c, 0x56e2, 0x1130, 0x3b00, 0x3a08, 0xc194, 0xc095,
-	0x20d8, 0x21d0, 0x2069, 0x1847, 0x6800, 0x9005, 0x0904, 0x35a1,
-	0x6804, 0xd0ac, 0x0118, 0xd0a4, 0x0904, 0x35a1, 0xd094, 0x00c6,
-	0x2061, 0x0100, 0x6104, 0x0138, 0x6200, 0x9292, 0x0005, 0x0218,
-	0x918c, 0xffdf, 0x0010, 0x918d, 0x0020, 0x6106, 0x00ce, 0xd08c,
-	0x00c6, 0x2061, 0x0100, 0x6104, 0x0118, 0x918d, 0x0010, 0x0010,
-	0x918c, 0xffef, 0x6106, 0x00ce, 0xd084, 0x0158, 0x6a28, 0x928a,
-	0x007f, 0x1a04, 0x35a1, 0x9288, 0x336d, 0x210d, 0x918c, 0x00ff,
-	0x6166, 0xd0dc, 0x0130, 0x6828, 0x908a, 0x007f, 0x1a04, 0x35a1,
-	0x605e, 0x6888, 0x9084, 0x0030, 0x8004, 0x8004, 0x8004, 0x8004,
-	0x0006, 0x2009, 0x19b1, 0x9080, 0x2737, 0x2005, 0x200a, 0x2008,
-	0x2001, 0x0018, 0x080c, 0xa863, 0x2009, 0x0390, 0x200b, 0x0400,
-	0x000e, 0x2009, 0x19b2, 0x9080, 0x273b, 0x2005, 0x200a, 0x6808,
-	0x908a, 0x0100, 0x0a04, 0x35a1, 0x908a, 0x0841, 0x1a04, 0x35a1,
-	0x9084, 0x0007, 0x1904, 0x35a1, 0x680c, 0x9005, 0x0904, 0x35a1,
-	0x6810, 0x9005, 0x0904, 0x35a1, 0x6848, 0x6940, 0x910a, 0x1a04,
-	0x35a1, 0x8001, 0x0904, 0x35a1, 0x684c, 0x6944, 0x910a, 0x1a04,
-	0x35a1, 0x8001, 0x0904, 0x35a1, 0x6814, 0x908c, 0x00ff, 0x614e,
-	0x8007, 0x9084, 0x00ff, 0x6052, 0x080c, 0x780a, 0x080c, 0x6a91,
-	0x080c, 0x6ac5, 0x6808, 0x602a, 0x080c, 0x2122, 0x2009, 0x0170,
-	0x200b, 0x0080, 0xa001, 0xa001, 0x200b, 0x0000, 0x0036, 0x6b08,
-	0x080c, 0x269e, 0x003e, 0x6000, 0x9086, 0x0000, 0x1904, 0x4404,
-	0x6818, 0x691c, 0x6a20, 0x6b24, 0x8007, 0x810f, 0x8217, 0x831f,
-	0x6016, 0x611a, 0x621e, 0x6322, 0x6c04, 0xd4f4, 0x0148, 0x6830,
-	0x6934, 0x6a38, 0x6b3c, 0x8007, 0x810f, 0x8217, 0x831f, 0x0010,
-	0x9084, 0xf0ff, 0x6006, 0x610a, 0x620e, 0x6312, 0x8007, 0x810f,
-	0x8217, 0x831f, 0x20a9, 0x0004, 0x20a1, 0x19b3, 0x20e9, 0x0001,
-	0x4001, 0x20a9, 0x0004, 0x20a1, 0x19cd, 0x20e9, 0x0001, 0x4001,
-	0x080c, 0x87a0, 0x00c6, 0x900e, 0x20a9, 0x0001, 0x6b70, 0xd384,
-	0x01c8, 0x0020, 0x839d, 0x12b0, 0x3508, 0x8109, 0x080c, 0x7dcb,
-	0x6878, 0x6016, 0x6874, 0x2008, 0x9084, 0xff00, 0x8007, 0x600a,
-	0x9184, 0x00ff, 0x6006, 0x8108, 0x1118, 0x6003, 0x0003, 0x0010,
-	0x6003, 0x0001, 0x1f04, 0x4362, 0x00ce, 0x00c6, 0x2061, 0x199c,
-	0x6a88, 0x9284, 0xc000, 0x2010, 0x9286, 0x0000, 0x1158, 0x2063,
-	0x0000, 0x2001, 0x0001, 0x080c, 0x2945, 0x2001, 0x0001, 0x080c,
-	0x2928, 0x0088, 0x9286, 0x4000, 0x1148, 0x2063, 0x0001, 0x9006,
-	0x080c, 0x2945, 0x9006, 0x080c, 0x2928, 0x0028, 0x9286, 0x8000,
-	0x1d30, 0x2063, 0x0002, 0x00ce, 0x00e6, 0x2c70, 0x080c, 0x0eb4,
-	0x00ee, 0x6888, 0xd0ec, 0x0130, 0x2011, 0x0114, 0x2204, 0x9085,
-	0x0180, 0x2012, 0x6a80, 0x9284, 0x0030, 0x9086, 0x0030, 0x1128,
-	0x9294, 0xffcf, 0x9295, 0x0020, 0x6a82, 0x2001, 0x197c, 0x6a80,
-	0x9294, 0x0030, 0x928e, 0x0000, 0x0170, 0x928e, 0x0010, 0x0118,
-	0x928e, 0x0020, 0x0140, 0x2003, 0xaaaa, 0x080c, 0x2713, 0x2001,
-	0x196d, 0x2102, 0x0008, 0x2102, 0x00c6, 0x2061, 0x0100, 0x602f,
-	0x0040, 0x602f, 0x0000, 0x00ce, 0x080c, 0x74d5, 0x0128, 0x080c,
-	0x4fd7, 0x0110, 0x080c, 0x2664, 0x60d4, 0x9005, 0x01c0, 0x6003,
-	0x0001, 0x2009, 0x43ec, 0x00e0, 0x080c, 0x74d5, 0x1168, 0x2011,
-	0x734b, 0x080c, 0x860d, 0x2011, 0x733e, 0x080c, 0x8719, 0x080c,
-	0x77de, 0x080c, 0x7406, 0x0040, 0x080c, 0x5edd, 0x0028, 0x6003,
-	0x0004, 0x2009, 0x4404, 0x0020, 0x080c, 0x69c6, 0x0804, 0x356c,
-	0x2001, 0x0170, 0x2004, 0x9084, 0x00ff, 0x9086, 0x004c, 0x1118,
-	0x2091, 0x31bd, 0x0817, 0x2091, 0x313d, 0x0817, 0x6000, 0x9086,
-	0x0000, 0x0904, 0x359e, 0x2069, 0x1847, 0x7890, 0x6842, 0x7894,
-	0x6846, 0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98,
-	0x2039, 0x0001, 0x0804, 0x4aec, 0x9006, 0x080c, 0x2664, 0x81ff,
-	0x1904, 0x359e, 0x080c, 0x74d5, 0x11b0, 0x080c, 0x77d9, 0x080c,
-	0x6022, 0x080c, 0x3361, 0x0118, 0x6130, 0xc18d, 0x6132, 0x080c,
-	0xcf2e, 0x0130, 0x080c, 0x74f8, 0x1118, 0x080c, 0x74a9, 0x0038,
-	0x080c, 0x7406, 0x0020, 0x080c, 0x5fe7, 0x080c, 0x5edd, 0x0804,
-	0x356c, 0x81ff, 0x1904, 0x359e, 0x080c, 0x74d5, 0x1110, 0x0804,
-	0x359e, 0x6194, 0x81ff, 0x01a8, 0x704f, 0x0000, 0x2001, 0x1d80,
-	0x2009, 0x0040, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0126, 0x2091,
-	0x8000, 0x2039, 0x0001, 0x080c, 0x4aec, 0x701f, 0x356a, 0x012e,
-	0x0005, 0x704f, 0x0001, 0x00d6, 0x2069, 0x1d80, 0x20a9, 0x0040,
-	0x20e9, 0x0001, 0x20a1, 0x1d80, 0x2019, 0xffff, 0x4304, 0x655c,
-	0x9588, 0x336d, 0x210d, 0x918c, 0x00ff, 0x216a, 0x900e, 0x2011,
-	0x0002, 0x2100, 0x9506, 0x01a8, 0x080c, 0x661e, 0x1190, 0xb814,
-	0x821c, 0x0238, 0x9398, 0x1d80, 0x9085, 0xff00, 0x8007, 0x201a,
-	0x0038, 0x9398, 0x1d80, 0x2324, 0x94a4, 0xff00, 0x9405, 0x201a,
-	0x8210, 0x8108, 0x9182, 0x0080, 0x1208, 0x0c18, 0x8201, 0x8007,
-	0x2d0c, 0x9105, 0x206a, 0x00de, 0x20a9, 0x0040, 0x20a1, 0x1d80,
-	0x2099, 0x1d80, 0x080c, 0x5f72, 0x0804, 0x445e, 0x080c, 0x4ad3,
-	0x0904, 0x35a1, 0x080c, 0x4aa0, 0x1120, 0x2009, 0x0002, 0x0804,
-	0x359e, 0x080c, 0x56d3, 0xd0b4, 0x0558, 0x7884, 0x908e, 0x007e,
-	0x0538, 0x908e, 0x007f, 0x0520, 0x908e, 0x0080, 0x0508, 0x080c,
-	0x335c, 0x1148, 0xb800, 0xd08c, 0x11d8, 0xb804, 0x9084, 0x00ff,
-	0x9086, 0x0006, 0x11a8, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a,
-	0x080c, 0xc9e3, 0x1120, 0x2009, 0x0003, 0x0804, 0x359e, 0x7007,
-	0x0003, 0x701f, 0x44ec, 0x0005, 0x080c, 0x4ad3, 0x0904, 0x35a1,
-	0x20a9, 0x002b, 0xb8c4, 0x20e0, 0xb8c8, 0x2098, 0xa860, 0x20e8,
-	0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003, 0x20a9, 0x0008, 0x9080,
-	0x0006, 0x20a0, 0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x0006, 0x2098,
-	0x080c, 0x0fb7, 0x0070, 0x20a9, 0x0004, 0xa85c, 0x9080, 0x000a,
-	0x20a0, 0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x000a, 0x2098, 0x080c,
-	0x0fb7, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0,
-	0x9080, 0x0002, 0x2009, 0x002b, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98,
-	0x0804, 0x4aec, 0x81ff, 0x1904, 0x359e, 0x080c, 0x4ab7, 0x0904,
-	0x35a1, 0x080c, 0x685f, 0x0904, 0x359e, 0x0058, 0xa878, 0x9005,
-	0x0120, 0x2009, 0x0004, 0x0804, 0x359e, 0xa974, 0xaa94, 0x0804,
-	0x356c, 0x080c, 0x56db, 0x0904, 0x356c, 0x701f, 0x4536, 0x7007,
-	0x0003, 0x0005, 0x81ff, 0x1904, 0x359e, 0x7888, 0x908a, 0x1000,
-	0x1a04, 0x35a1, 0x080c, 0x4ad3, 0x0904, 0x35a1, 0x080c, 0x6a5b,
-	0x0120, 0x080c, 0x6a63, 0x1904, 0x35a1, 0x080c, 0x68e4, 0x0904,
-	0x359e, 0x2019, 0x0004, 0x900e, 0x080c, 0x6871, 0x0904, 0x359e,
-	0x7984, 0x7a88, 0x04c9, 0x08a8, 0xa89c, 0x908a, 0x1000, 0x12f8,
-	0x080c, 0x4ad1, 0x01e0, 0x080c, 0x6a5b, 0x0118, 0x080c, 0x6a63,
-	0x11b0, 0x080c, 0x68e4, 0x2009, 0x0002, 0x0168, 0x2009, 0x0002,
-	0x2019, 0x0004, 0x080c, 0x6871, 0x2009, 0x0003, 0x0120, 0xa998,
-	0xaa9c, 0x00d1, 0x0060, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897,
-	0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897,
-	0x4000, 0x080c, 0x56db, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085,
-	0x0001, 0x2001, 0x0000, 0x0005, 0x9186, 0x00ff, 0x0110, 0x0071,
-	0x0060, 0x2029, 0x007e, 0x2061, 0x1800, 0x645c, 0x2400, 0x9506,
-	0x0110, 0x2508, 0x0019, 0x8529, 0x1ec8, 0x0005, 0x080c, 0x661e,
-	0x1138, 0x2200, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, 0x861b,
-	0x0005, 0x81ff, 0x1904, 0x359e, 0x798c, 0x2001, 0x1980, 0x918c,
-	0x8000, 0x2102, 0x080c, 0x4ab7, 0x0904, 0x35a1, 0x080c, 0x6a5b,
-	0x0120, 0x080c, 0x6a63, 0x1904, 0x35a1, 0x080c, 0x66e5, 0x0904,
-	0x359e, 0x080c, 0x6868, 0x0904, 0x359e, 0x2001, 0x1980, 0x2004,
-	0xd0fc, 0x1904, 0x356c, 0x0804, 0x4541, 0xa9a0, 0x2001, 0x1980,
-	0x918c, 0x8000, 0xc18d, 0x2102, 0x080c, 0x4ac4, 0x01a0, 0x080c,
-	0x6a5b, 0x0118, 0x080c, 0x6a63, 0x1170, 0x080c, 0x66e5, 0x2009,
-	0x0002, 0x0128, 0x080c, 0x6868, 0x1170, 0x2009, 0x0003, 0xa897,
-	0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001,
-	0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0x2001, 0x1980, 0x2004,
-	0xd0fc, 0x1128, 0x080c, 0x56db, 0x0110, 0x9006, 0x0018, 0x900e,
-	0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x81ff, 0x1904, 0x359e,
-	0x798c, 0x2001, 0x197f, 0x918c, 0x8000, 0x2102, 0x080c, 0x4ab7,
-	0x0904, 0x35a1, 0x080c, 0x6a5b, 0x0120, 0x080c, 0x6a63, 0x1904,
-	0x35a1, 0x080c, 0x66e5, 0x0904, 0x359e, 0x080c, 0x6856, 0x0904,
-	0x359e, 0x2001, 0x197f, 0x2004, 0xd0fc, 0x1904, 0x356c, 0x0804,
-	0x4541, 0xa9a0, 0x2001, 0x197f, 0x918c, 0x8000, 0xc18d, 0x2102,
-	0x080c, 0x4ac4, 0x01a0, 0x080c, 0x6a5b, 0x0118, 0x080c, 0x6a63,
-	0x1170, 0x080c, 0x66e5, 0x2009, 0x0002, 0x0128, 0x080c, 0x6856,
-	0x1170, 0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897,
-	0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897,
-	0x4000, 0x2001, 0x197f, 0x2004, 0xd0fc, 0x1128, 0x080c, 0x56db,
-	0x0110, 0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000,
-	0x0005, 0x6100, 0x0804, 0x356c, 0x080c, 0x4ad3, 0x0904, 0x35a1,
-	0x080c, 0x56e7, 0x1904, 0x359e, 0x79a8, 0xd184, 0x1158, 0xb834,
-	0x8007, 0x789e, 0xb830, 0x8007, 0x789a, 0xbb2c, 0x831f, 0xba28,
-	0x8217, 0x0050, 0xb824, 0x8007, 0x789e, 0xb820, 0x8007, 0x789a,
-	0xbb1c, 0x831f, 0xba18, 0x8217, 0xb900, 0x918c, 0x0200, 0x0804,
-	0x356c, 0x78a8, 0x909c, 0x0003, 0xd0b4, 0x1140, 0x939a, 0x0003,
-	0x1a04, 0x359e, 0x625c, 0x7884, 0x9206, 0x1548, 0x080c, 0x878a,
-	0x2001, 0xfff4, 0x2009, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98,
-	0x2039, 0x0000, 0x0006, 0x78a8, 0x9084, 0x0080, 0x1118, 0x000e,
-	0x0804, 0x4aec, 0x000e, 0x2031, 0x0000, 0x2061, 0x18b8, 0x2c44,
-	0xa66a, 0xa17a, 0xa772, 0xa076, 0xa28e, 0xa392, 0xa496, 0xa59a,
-	0x080c, 0x1124, 0x7007, 0x0002, 0x701f, 0x46f7, 0x0005, 0x81ff,
-	0x1904, 0x359e, 0x080c, 0x4ad3, 0x0904, 0x35a1, 0x080c, 0x6a5b,
-	0x1904, 0x359e, 0x00c6, 0x080c, 0x4aa0, 0x00ce, 0x0904, 0x359e,
-	0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x7ea8, 0x080c, 0xc989,
-	0x0904, 0x359e, 0x7007, 0x0003, 0x701f, 0x46fb, 0x0005, 0x080c,
-	0x423f, 0x0804, 0x356c, 0xa830, 0x9086, 0x0100, 0x0904, 0x359e,
+	0x2091, 0x8000, 0x81ff, 0x0148, 0x080c, 0x29e8, 0x1130, 0x9006,
+	0x080c, 0x2945, 0x9006, 0x080c, 0x2928, 0x7884, 0x9084, 0x0007,
+	0x0002, 0x3d64, 0x3d6d, 0x3d76, 0x3d61, 0x3d61, 0x3d61, 0x3d61,
+	0x3d61, 0x012e, 0x0804, 0x35a8, 0x2009, 0x0114, 0x2104, 0x9085,
+	0x0800, 0x200a, 0x080c, 0x3f38, 0x00c0, 0x2009, 0x0114, 0x2104,
+	0x9085, 0x4000, 0x200a, 0x080c, 0x3f38, 0x0078, 0x080c, 0x74e9,
+	0x1128, 0x012e, 0x2009, 0x0016, 0x0804, 0x35a5, 0x81ff, 0x0128,
+	0x012e, 0x2021, 0x400b, 0x0804, 0x3575, 0x080c, 0xa896, 0x0086,
+	0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x080c,
+	0x3a8f, 0x2009, 0x0101, 0x210c, 0x0016, 0x7ec8, 0x7dcc, 0x9006,
+	0x2068, 0x2060, 0x2058, 0x080c, 0x41d9, 0x080c, 0x4129, 0x903e,
+	0x2720, 0x00f6, 0x00e6, 0x0086, 0x2940, 0x2071, 0x19e7, 0x2079,
+	0x0090, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0120, 0x68d4,
+	0x780e, 0x68d0, 0x780a, 0x00de, 0x2011, 0x0001, 0x080c, 0x408a,
+	0x080c, 0x29f0, 0x080c, 0x29f0, 0x080c, 0x29f0, 0x080c, 0x29f0,
+	0x080c, 0x408a, 0x008e, 0x00ee, 0x00fe, 0x080c, 0x3fb7, 0x2009,
+	0x9c40, 0x8109, 0x11b0, 0x080c, 0x3eee, 0x2001, 0x0004, 0x200c,
+	0x918c, 0xfffd, 0x2102, 0x001e, 0x00fe, 0x00ee, 0x00de, 0x00ce,
+	0x00be, 0x00ae, 0x009e, 0x008e, 0x2009, 0x0017, 0x080c, 0x35a5,
+	0x0cf8, 0x2001, 0x020b, 0x2004, 0x9084, 0x0140, 0x1d10, 0x00f6,
+	0x2079, 0x0000, 0x7884, 0x00fe, 0xd0bc, 0x0178, 0x2001, 0x0201,
+	0x200c, 0x81ff, 0x0150, 0x080c, 0x3f95, 0x2d00, 0x9c05, 0x9b05,
+	0x0120, 0x080c, 0x3eee, 0x0804, 0x3e97, 0x080c, 0x40fe, 0x080c,
+	0x4022, 0x080c, 0x3f78, 0x080c, 0x3fad, 0x00f6, 0x2079, 0x0100,
+	0x7824, 0xd0ac, 0x0130, 0x8b58, 0x080c, 0x3eee, 0x00fe, 0x0804,
+	0x3e97, 0x00fe, 0x080c, 0x3ee4, 0x1150, 0x8d68, 0x2001, 0x0032,
+	0x2602, 0x2001, 0x0033, 0x2502, 0x080c, 0x3eee, 0x0080, 0x87ff,
+	0x0138, 0x2001, 0x0201, 0x2004, 0x9005, 0x1908, 0x8739, 0x0038,
+	0x2001, 0x1a6b, 0x2004, 0x9086, 0x0000, 0x1904, 0x3de7, 0x2001,
+	0x032f, 0x2003, 0x00f6, 0x8631, 0x1208, 0x8529, 0x2500, 0x9605,
+	0x0904, 0x3e97, 0x7884, 0xd0bc, 0x0128, 0x2d00, 0x9c05, 0x9b05,
+	0x1904, 0x3e97, 0xa013, 0x0019, 0x2001, 0x032a, 0x2003, 0x0004,
+	0x7884, 0xd0ac, 0x1148, 0x2001, 0x1a6b, 0x2003, 0x0003, 0x2001,
+	0x032a, 0x2003, 0x0009, 0x0030, 0xa017, 0x0001, 0x78b4, 0x9005,
+	0x0108, 0xa016, 0x2800, 0xa05a, 0x2009, 0x0040, 0x080c, 0x21b0,
+	0x2900, 0xa85a, 0xa813, 0x0019, 0x7884, 0xd0a4, 0x1180, 0xa817,
+	0x0000, 0x00c6, 0x20a9, 0x0004, 0x2061, 0x0090, 0x602b, 0x0008,
+	0x2001, 0x0203, 0x2004, 0x1f04, 0x3e6e, 0x00ce, 0x0030, 0xa817,
+	0x0001, 0x78b0, 0x9005, 0x0108, 0xa816, 0x00f6, 0x00c6, 0x2079,
+	0x0100, 0x2061, 0x0090, 0x7827, 0x0002, 0x2001, 0x002a, 0x2004,
+	0x9084, 0xfff8, 0x601a, 0x0006, 0x2001, 0x002b, 0x2004, 0x601e,
+	0x78c6, 0x000e, 0x78ca, 0x00ce, 0x00fe, 0x0804, 0x3da1, 0x001e,
+	0x00c6, 0x2001, 0x032a, 0x2003, 0x0004, 0x2061, 0x0100, 0x6027,
+	0x0002, 0x6106, 0x2011, 0x020d, 0x2013, 0x0020, 0x2001, 0x0004,
+	0x200c, 0x918c, 0xfffd, 0x2102, 0x080c, 0x1328, 0x7884, 0x9084,
+	0x0003, 0x9086, 0x0002, 0x01b0, 0x2009, 0x0028, 0x080c, 0x21b0,
+	0x2001, 0x0227, 0x200c, 0x2102, 0x6050, 0x9084, 0xb7ff, 0x080c,
+	0x2aab, 0x6052, 0x602f, 0x0000, 0x604b, 0xf7f7, 0x6043, 0x0090,
+	0x6043, 0x0010, 0x080c, 0xa8b2, 0x00ce, 0x2d08, 0x2c10, 0x2b18,
+	0x2b00, 0x9c05, 0x9d05, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be,
+	0x00ae, 0x009e, 0x008e, 0x1118, 0x012e, 0x0804, 0x3573, 0x012e,
+	0x2021, 0x400c, 0x0804, 0x3575, 0x9085, 0x0001, 0x1d04, 0x3eed,
+	0x2091, 0x6000, 0x8420, 0x9486, 0x0064, 0x0005, 0x2001, 0x0105,
+	0x2003, 0x0010, 0x2001, 0x032a, 0x2003, 0x0004, 0x2001, 0x1a6b,
+	0x2003, 0x0000, 0x0071, 0x2009, 0x0048, 0x080c, 0x21b0, 0x2001,
+	0x0227, 0x2024, 0x2402, 0x2001, 0x0109, 0x2003, 0x4000, 0x9026,
+	0x0005, 0x00f6, 0x00e6, 0x2071, 0x19e7, 0x7054, 0x9086, 0x0000,
+	0x0520, 0x2079, 0x0090, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203,
+	0x210c, 0x9106, 0x1120, 0x2009, 0x0040, 0x080c, 0x21b0, 0x782c,
+	0xd0fc, 0x0d88, 0x080c, 0x40fe, 0x7054, 0x9086, 0x0000, 0x1d58,
+	0x782b, 0x0004, 0x782c, 0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c,
+	0x21b0, 0x782b, 0x0002, 0x7057, 0x0000, 0x00ee, 0x00fe, 0x0005,
+	0x00f6, 0x2079, 0x0100, 0x2001, 0x1818, 0x200c, 0x7932, 0x7936,
+	0x080c, 0x2644, 0x080c, 0x2a67, 0x080c, 0x2aab, 0x784b, 0xf7f7,
+	0x7843, 0x0090, 0x7843, 0x0010, 0x7850, 0xc0e5, 0x7852, 0x2019,
+	0x61a8, 0x7820, 0xd09c, 0x0110, 0x8319, 0x1dd8, 0x7850, 0xc0e4,
+	0x7852, 0x2011, 0x0048, 0x080c, 0x2a44, 0x7843, 0x0040, 0x2019,
+	0x01f4, 0xa001, 0xa001, 0x8319, 0x1de0, 0x2001, 0x0100, 0x080c,
+	0x2a0a, 0x2011, 0x0020, 0x080c, 0x2a44, 0x7843, 0x0000, 0x9006,
+	0x080c, 0x2a0a, 0x2011, 0x0048, 0x080c, 0x2a44, 0x00fe, 0x0005,
+	0x7884, 0xd0ac, 0x11c8, 0x00f6, 0x00e6, 0x2071, 0x1a6b, 0x2079,
+	0x0320, 0x2001, 0x0201, 0x2004, 0x9005, 0x0160, 0x7000, 0x9086,
+	0x0000, 0x1140, 0x0051, 0xd0bc, 0x0108, 0x8738, 0x7003, 0x0003,
+	0x782b, 0x0019, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0300,
+	0x78bc, 0x00fe, 0x908c, 0x0070, 0x0178, 0x2009, 0x0032, 0x260a,
+	0x2009, 0x0033, 0x250a, 0xd0b4, 0x0108, 0x8c60, 0xd0ac, 0x0108,
+	0x8d68, 0xd0a4, 0x0108, 0x8b58, 0x0005, 0x00f6, 0x2079, 0x0200,
+	0x781c, 0xd084, 0x0110, 0x7837, 0x0050, 0x00fe, 0x0005, 0x00e6,
+	0x2071, 0x0100, 0x2001, 0x19aa, 0x2004, 0x70e2, 0x080c, 0x3cc9,
+	0x1188, 0x2001, 0x1820, 0x2004, 0x2009, 0x181f, 0x210c, 0x918c,
+	0x00ff, 0x706e, 0x716a, 0x7066, 0x918d, 0x3200, 0x7162, 0x7073,
+	0xe109, 0x0080, 0x702c, 0x9085, 0x0002, 0x702e, 0x2009, 0x1818,
+	0x210c, 0x716e, 0x7063, 0x0100, 0x7166, 0x719e, 0x706b, 0x0000,
+	0x7073, 0x0809, 0x7077, 0x0008, 0x7078, 0x9080, 0x0100, 0x707a,
+	0x7080, 0x8000, 0x7082, 0x7087, 0xaaaa, 0x9006, 0x708a, 0x708e,
+	0x707e, 0x70d6, 0x70ab, 0x0036, 0x70af, 0x95d5, 0x7014, 0x9084,
+	0x1984, 0x9085, 0x0092, 0x7016, 0x080c, 0x40fe, 0x00f6, 0x2071,
+	0x1a6b, 0x2079, 0x0320, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4,
+	0x0120, 0x689c, 0x780e, 0x6898, 0x780a, 0x00de, 0x2009, 0x03e8,
+	0x8109, 0x1df0, 0x792c, 0xd1fc, 0x0110, 0x782b, 0x0004, 0x2011,
+	0x0011, 0x080c, 0x408a, 0x2011, 0x0001, 0x080c, 0x408a, 0x00fe,
+	0x00ee, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a6b, 0x2079, 0x0320,
+	0x792c, 0xd1fc, 0x0904, 0x4087, 0x782b, 0x0002, 0x9026, 0xd19c,
+	0x1904, 0x4083, 0x7000, 0x0002, 0x4087, 0x4038, 0x4068, 0x4083,
+	0xd1bc, 0x1170, 0xd1dc, 0x1190, 0x8001, 0x7002, 0x2011, 0x0001,
+	0x080c, 0x408a, 0x0904, 0x4087, 0x080c, 0x408a, 0x0804, 0x4087,
+	0x00f6, 0x2079, 0x0300, 0x78bf, 0x0000, 0x00fe, 0x7810, 0x7914,
+	0x782b, 0x0004, 0x7812, 0x7916, 0x2001, 0x0201, 0x200c, 0x81ff,
+	0x0de8, 0x080c, 0x3f95, 0x2009, 0x0001, 0x00f6, 0x2079, 0x0300,
+	0x78b8, 0x00fe, 0xd0ec, 0x0110, 0x2009, 0x0011, 0x792a, 0x00f8,
+	0x8001, 0x7002, 0x9184, 0x0880, 0x1140, 0x782c, 0xd0fc, 0x1904,
+	0x402c, 0x2011, 0x0001, 0x00b1, 0x0090, 0xa010, 0x9092, 0x0004,
+	0x9086, 0x0015, 0x1120, 0xa000, 0xa05a, 0x2011, 0x0031, 0xa212,
+	0xd1dc, 0x1960, 0x0828, 0x782b, 0x0004, 0x7003, 0x0000, 0x00ee,
+	0x00fe, 0x0005, 0xa014, 0x9005, 0x0550, 0x8001, 0x0036, 0x0096,
+	0xa016, 0xa058, 0x2048, 0xa010, 0x2009, 0x0031, 0x911a, 0x831c,
+	0x831c, 0x938a, 0x0007, 0x1a0c, 0x0d7d, 0x9398, 0x40b8, 0x231d,
+	0x083f, 0x9080, 0x0004, 0x7a2a, 0x7100, 0x8108, 0x7102, 0x009e,
+	0x003e, 0x908a, 0x0035, 0x1140, 0x0096, 0xa058, 0x2048, 0xa804,
+	0xa05a, 0x2001, 0x0019, 0x009e, 0xa012, 0x9085, 0x0001, 0x0005,
+	0x40f5, 0x40ec, 0x40e3, 0x40da, 0x40d1, 0x40c8, 0x40bf, 0xa964,
+	0x7902, 0xa968, 0x7906, 0xa96c, 0x7912, 0xa970, 0x7916, 0x0005,
+	0xa974, 0x7902, 0xa978, 0x7906, 0xa97c, 0x7912, 0xa980, 0x7916,
+	0x0005, 0xa984, 0x7902, 0xa988, 0x7906, 0xa98c, 0x7912, 0xa990,
+	0x7916, 0x0005, 0xa994, 0x7902, 0xa998, 0x7906, 0xa99c, 0x7912,
+	0xa9a0, 0x7916, 0x0005, 0xa9a4, 0x7902, 0xa9a8, 0x7906, 0xa9ac,
+	0x7912, 0xa9b0, 0x7916, 0x0005, 0xa9b4, 0x7902, 0xa9b8, 0x7906,
+	0xa9bc, 0x7912, 0xa9c0, 0x7916, 0x0005, 0xa9c4, 0x7902, 0xa9c8,
+	0x7906, 0xa9cc, 0x7912, 0xa9d0, 0x7916, 0x0005, 0x00f6, 0x00e6,
+	0x0086, 0x2071, 0x19e7, 0x2079, 0x0090, 0x792c, 0xd1fc, 0x01e8,
+	0x782b, 0x0002, 0x2940, 0x9026, 0x7054, 0x0002, 0x4125, 0x4111,
+	0x411c, 0x8001, 0x7056, 0xd19c, 0x1180, 0x2011, 0x0001, 0x080c,
+	0x408a, 0x190c, 0x408a, 0x0048, 0x8001, 0x7056, 0x782c, 0xd0fc,
+	0x1d38, 0x2011, 0x0001, 0x080c, 0x408a, 0x008e, 0x00ee, 0x00fe,
+	0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086, 0x2061, 0x0200, 0x2001,
+	0x19aa, 0x2004, 0x601a, 0x2061, 0x0100, 0x2001, 0x19a9, 0x2004,
+	0x60ce, 0x6104, 0xc1ac, 0x6106, 0x2001, 0x002c, 0x2004, 0x9005,
+	0x0520, 0x2038, 0x2001, 0x002e, 0x2024, 0x2001, 0x002f, 0x201c,
+	0x080c, 0x4aa7, 0xa813, 0x0019, 0xaf16, 0x2900, 0xa85a, 0x978a,
+	0x0007, 0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e,
+	0x0096, 0xa858, 0x2048, 0xa85c, 0x9080, 0x0019, 0x009e, 0x080c,
+	0x41a1, 0x1d68, 0x2900, 0xa85a, 0x00d0, 0x080c, 0x4aa7, 0xa813,
+	0x0019, 0xa817, 0x0001, 0x2900, 0xa85a, 0x2001, 0x002e, 0x2004,
+	0xa866, 0x2001, 0x002f, 0x2004, 0xa86a, 0x2001, 0x002a, 0x2004,
+	0x9084, 0xfff8, 0xa86e, 0x2001, 0x002b, 0x2004, 0xa872, 0x2061,
+	0x0090, 0x2079, 0x0100, 0x2001, 0x19a9, 0x2004, 0x6036, 0x2009,
+	0x0040, 0x080c, 0x21b0, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8,
+	0x601a, 0x0006, 0x2001, 0x002b, 0x2004, 0x601e, 0x78c6, 0x000e,
+	0x78ca, 0x9006, 0x600a, 0x600e, 0x008e, 0x00ce, 0x00ee, 0x00fe,
+	0x0005, 0x00e6, 0x2071, 0x0080, 0xaa60, 0x22e8, 0x20a0, 0x20e1,
+	0x0000, 0x2099, 0x0088, 0x702b, 0x0026, 0x7402, 0x7306, 0x9006,
+	0x700a, 0x700e, 0x810b, 0x810b, 0x21a8, 0x810b, 0x7112, 0x702b,
+	0x0041, 0x702c, 0xd0fc, 0x0de8, 0x702b, 0x0002, 0x702b, 0x0040,
+	0x4005, 0x7400, 0x7304, 0x87ff, 0x0190, 0x0086, 0x0096, 0x2940,
+	0x0086, 0x080c, 0x4aa7, 0x008e, 0xa058, 0x00a6, 0x2050, 0x2900,
+	0xb006, 0xa05a, 0x00ae, 0x009e, 0x008e, 0x9085, 0x0001, 0x00ee,
+	0x0005, 0x00e6, 0x2001, 0x002d, 0x2004, 0x9005, 0x0528, 0x2038,
+	0x2001, 0x0030, 0x2024, 0x2001, 0x0031, 0x201c, 0x080c, 0x4aa7,
+	0x2940, 0xa813, 0x0019, 0xaf16, 0x2900, 0xa85a, 0x978a, 0x0007,
+	0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e, 0x0096,
+	0xa858, 0x2048, 0xa85c, 0x9080, 0x0019, 0x009e, 0x080c, 0x41a1,
+	0x1d68, 0x2900, 0xa85a, 0x00d8, 0x080c, 0x4aa7, 0x2940, 0xa013,
+	0x0019, 0xa017, 0x0001, 0x2800, 0xa05a, 0x2001, 0x0030, 0x2004,
+	0xa066, 0x2001, 0x0031, 0x2004, 0xa06a, 0x2001, 0x002a, 0x2004,
+	0x9084, 0xfff8, 0xa06e, 0x2001, 0x002b, 0x2004, 0xa072, 0x2001,
+	0x032a, 0x2003, 0x0004, 0x7884, 0xd0ac, 0x1180, 0x2001, 0x0101,
+	0x200c, 0x918d, 0x0200, 0x2102, 0xa017, 0x0000, 0x2001, 0x1a6b,
+	0x2003, 0x0003, 0x2001, 0x032a, 0x2003, 0x0009, 0x2001, 0x0300,
+	0x2003, 0x0000, 0x2001, 0x020d, 0x2003, 0x0000, 0x2001, 0x0004,
+	0x200c, 0x918d, 0x0002, 0x2102, 0x00ee, 0x0005, 0x0126, 0x2091,
+	0x8000, 0x20a9, 0x0007, 0x20a1, 0x1840, 0x20e9, 0x0001, 0x9006,
+	0x4004, 0x20a9, 0x000c, 0x20a1, 0xfff4, 0x20e9, 0x0000, 0x9006,
+	0x4004, 0x2009, 0x013c, 0x200a, 0x012e, 0x7880, 0x9086, 0x0052,
+	0x0108, 0x0005, 0x0804, 0x3573, 0x7d98, 0x7c9c, 0x0804, 0x366a,
+	0x080c, 0x74e9, 0x190c, 0x5fee, 0x6040, 0x9084, 0x0020, 0x09b1,
+	0x2069, 0x1847, 0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88, 0x7c9c,
+	0x7d98, 0x2039, 0x0001, 0x080c, 0x4af0, 0x701f, 0x4280, 0x0005,
+	0x080c, 0x56e9, 0x1130, 0x3b00, 0x3a08, 0xc194, 0xc095, 0x20d8,
+	0x21d0, 0x2069, 0x1847, 0x6800, 0x9005, 0x0904, 0x35a8, 0x6804,
+	0xd0ac, 0x0118, 0xd0a4, 0x0904, 0x35a8, 0xd094, 0x00c6, 0x2061,
+	0x0100, 0x6104, 0x0138, 0x6200, 0x9292, 0x0005, 0x0218, 0x918c,
+	0xffdf, 0x0010, 0x918d, 0x0020, 0x6106, 0x00ce, 0xd08c, 0x00c6,
+	0x2061, 0x0100, 0x6104, 0x0118, 0x918d, 0x0010, 0x0010, 0x918c,
+	0xffef, 0x6106, 0x00ce, 0xd084, 0x0158, 0x6a28, 0x928a, 0x007f,
+	0x1a04, 0x35a8, 0x9288, 0x3374, 0x210d, 0x918c, 0x00ff, 0x6166,
+	0xd0dc, 0x0130, 0x6828, 0x908a, 0x007f, 0x1a04, 0x35a8, 0x605e,
+	0x6888, 0x9084, 0x0030, 0x8004, 0x8004, 0x8004, 0x8004, 0x0006,
+	0x2009, 0x19b1, 0x9080, 0x2737, 0x2005, 0x200a, 0x2008, 0x2001,
+	0x0018, 0x080c, 0xa887, 0x2009, 0x0390, 0x200b, 0x0400, 0x000e,
+	0x2009, 0x19b2, 0x9080, 0x273b, 0x2005, 0x200a, 0x6808, 0x908a,
+	0x0100, 0x0a04, 0x35a8, 0x908a, 0x0841, 0x1a04, 0x35a8, 0x9084,
+	0x0007, 0x1904, 0x35a8, 0x680c, 0x9005, 0x0904, 0x35a8, 0x6810,
+	0x9005, 0x0904, 0x35a8, 0x6848, 0x6940, 0x910a, 0x1a04, 0x35a8,
+	0x8001, 0x0904, 0x35a8, 0x684c, 0x6944, 0x910a, 0x1a04, 0x35a8,
+	0x8001, 0x0904, 0x35a8, 0x6814, 0x908c, 0x00ff, 0x614e, 0x8007,
+	0x9084, 0x00ff, 0x6052, 0x080c, 0x781e, 0x080c, 0x6aa1, 0x080c,
+	0x6ad5, 0x6808, 0x602a, 0x080c, 0x2122, 0x2009, 0x0170, 0x200b,
+	0x0080, 0xa001, 0xa001, 0x200b, 0x0000, 0x0036, 0x6b08, 0x080c,
+	0x269e, 0x003e, 0x6000, 0x9086, 0x0000, 0x1904, 0x440b, 0x6818,
+	0x691c, 0x6a20, 0x6b24, 0x8007, 0x810f, 0x8217, 0x831f, 0x6016,
+	0x611a, 0x621e, 0x6322, 0x6c04, 0xd4f4, 0x0148, 0x6830, 0x6934,
+	0x6a38, 0x6b3c, 0x8007, 0x810f, 0x8217, 0x831f, 0x0010, 0x9084,
+	0xf0ff, 0x6006, 0x610a, 0x620e, 0x6312, 0x8007, 0x810f, 0x8217,
+	0x831f, 0x20a9, 0x0004, 0x20a1, 0x19b3, 0x20e9, 0x0001, 0x4001,
+	0x20a9, 0x0004, 0x20a1, 0x19cd, 0x20e9, 0x0001, 0x4001, 0x080c,
+	0x87d1, 0x00c6, 0x900e, 0x20a9, 0x0001, 0x6b70, 0xd384, 0x01c8,
+	0x0020, 0x839d, 0x12b0, 0x3508, 0x8109, 0x080c, 0x7ddf, 0x6878,
+	0x6016, 0x6874, 0x2008, 0x9084, 0xff00, 0x8007, 0x600a, 0x9184,
+	0x00ff, 0x6006, 0x8108, 0x1118, 0x6003, 0x0003, 0x0010, 0x6003,
+	0x0001, 0x1f04, 0x4369, 0x00ce, 0x00c6, 0x2061, 0x199c, 0x6a88,
+	0x9284, 0xc000, 0x2010, 0x9286, 0x0000, 0x1158, 0x2063, 0x0000,
+	0x2001, 0x0001, 0x080c, 0x2945, 0x2001, 0x0001, 0x080c, 0x2928,
+	0x0088, 0x9286, 0x4000, 0x1148, 0x2063, 0x0001, 0x9006, 0x080c,
+	0x2945, 0x9006, 0x080c, 0x2928, 0x0028, 0x9286, 0x8000, 0x1d30,
+	0x2063, 0x0002, 0x00ce, 0x00e6, 0x2c70, 0x080c, 0x0eb4, 0x00ee,
+	0x6888, 0xd0ec, 0x0130, 0x2011, 0x0114, 0x2204, 0x9085, 0x0180,
+	0x2012, 0x6a80, 0x9284, 0x0030, 0x9086, 0x0030, 0x1128, 0x9294,
+	0xffcf, 0x9295, 0x0020, 0x6a82, 0x2001, 0x197c, 0x6a80, 0x9294,
+	0x0030, 0x928e, 0x0000, 0x0170, 0x928e, 0x0010, 0x0118, 0x928e,
+	0x0020, 0x0140, 0x2003, 0xaaaa, 0x080c, 0x2713, 0x2001, 0x196d,
+	0x2102, 0x0008, 0x2102, 0x00c6, 0x2061, 0x0100, 0x602f, 0x0040,
+	0x602f, 0x0000, 0x00ce, 0x080c, 0x74e9, 0x0128, 0x080c, 0x4fde,
+	0x0110, 0x080c, 0x2664, 0x60d4, 0x9005, 0x01c0, 0x6003, 0x0001,
+	0x2009, 0x43f3, 0x00e0, 0x080c, 0x74e9, 0x1168, 0x2011, 0x735f,
+	0x080c, 0x863e, 0x2011, 0x7352, 0x080c, 0x874a, 0x080c, 0x77f2,
+	0x080c, 0x741a, 0x0040, 0x080c, 0x5ee4, 0x0028, 0x6003, 0x0004,
+	0x2009, 0x440b, 0x0020, 0x080c, 0x69cd, 0x0804, 0x3573, 0x2001,
+	0x0170, 0x2004, 0x9084, 0x00ff, 0x9086, 0x004c, 0x1118, 0x2091,
+	0x31bd, 0x0817, 0x2091, 0x313d, 0x0817, 0x6000, 0x9086, 0x0000,
+	0x0904, 0x35a5, 0x2069, 0x1847, 0x7890, 0x6842, 0x7894, 0x6846,
+	0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039,
+	0x0001, 0x0804, 0x4af3, 0x9006, 0x080c, 0x2664, 0x81ff, 0x1904,
+	0x35a5, 0x080c, 0x74e9, 0x11b0, 0x080c, 0x77ed, 0x080c, 0x6029,
+	0x080c, 0x3368, 0x0118, 0x6130, 0xc18d, 0x6132, 0x080c, 0xcf52,
+	0x0130, 0x080c, 0x750c, 0x1118, 0x080c, 0x74bd, 0x0038, 0x080c,
+	0x741a, 0x0020, 0x080c, 0x5fee, 0x080c, 0x5ee4, 0x0804, 0x3573,
+	0x81ff, 0x1904, 0x35a5, 0x080c, 0x74e9, 0x1110, 0x0804, 0x35a5,
+	0x6194, 0x81ff, 0x01a8, 0x704f, 0x0000, 0x2001, 0x1d80, 0x2009,
+	0x0040, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0126, 0x2091, 0x8000,
+	0x2039, 0x0001, 0x080c, 0x4af3, 0x701f, 0x3571, 0x012e, 0x0005,
+	0x704f, 0x0001, 0x00d6, 0x2069, 0x1d80, 0x20a9, 0x0040, 0x20e9,
+	0x0001, 0x20a1, 0x1d80, 0x2019, 0xffff, 0x4304, 0x655c, 0x9588,
+	0x3374, 0x210d, 0x918c, 0x00ff, 0x216a, 0x900e, 0x2011, 0x0002,
+	0x2100, 0x9506, 0x01a8, 0x080c, 0x6625, 0x1190, 0xb814, 0x821c,
+	0x0238, 0x9398, 0x1d80, 0x9085, 0xff00, 0x8007, 0x201a, 0x0038,
+	0x9398, 0x1d80, 0x2324, 0x94a4, 0xff00, 0x9405, 0x201a, 0x8210,
+	0x8108, 0x9182, 0x0080, 0x1208, 0x0c18, 0x8201, 0x8007, 0x2d0c,
+	0x9105, 0x206a, 0x00de, 0x20a9, 0x0040, 0x20a1, 0x1d80, 0x2099,
+	0x1d80, 0x080c, 0x5f79, 0x0804, 0x4465, 0x080c, 0x4ada, 0x0904,
+	0x35a8, 0x080c, 0x4aa7, 0x1120, 0x2009, 0x0002, 0x0804, 0x35a5,
+	0x080c, 0x56da, 0xd0b4, 0x0558, 0x7884, 0x908e, 0x007e, 0x0538,
+	0x908e, 0x007f, 0x0520, 0x908e, 0x0080, 0x0508, 0x080c, 0x3363,
+	0x1148, 0xb800, 0xd08c, 0x11d8, 0xb804, 0x9084, 0x00ff, 0x9086,
+	0x0006, 0x11a8, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x080c,
+	0xca07, 0x1120, 0x2009, 0x0003, 0x0804, 0x35a5, 0x7007, 0x0003,
+	0x701f, 0x44f3, 0x0005, 0x080c, 0x4ada, 0x0904, 0x35a8, 0x20a9,
+	0x002b, 0xb8c4, 0x20e0, 0xb8c8, 0x2098, 0xa860, 0x20e8, 0xa85c,
+	0x9080, 0x0002, 0x20a0, 0x4003, 0x20a9, 0x0008, 0x9080, 0x0006,
+	0x20a0, 0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x0006, 0x2098, 0x080c,
+	0x0fb7, 0x0070, 0x20a9, 0x0004, 0xa85c, 0x9080, 0x000a, 0x20a0,
+	0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x000a, 0x2098, 0x080c, 0x0fb7,
 	0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080,
-	0x001b, 0x2009, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804,
-	0x4aec, 0x9006, 0x080c, 0x2664, 0x78a8, 0x9084, 0x00ff, 0x9086,
-	0x00ff, 0x0118, 0x81ff, 0x1904, 0x359e, 0x080c, 0x74d5, 0x0110,
-	0x080c, 0x5fe7, 0x7888, 0x908a, 0x1000, 0x1a04, 0x35a1, 0x7984,
-	0x9186, 0x00ff, 0x0138, 0x9182, 0x007f, 0x1a04, 0x35a1, 0x2100,
-	0x080c, 0x262e, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, 0x2061,
-	0x1a03, 0x601b, 0x0000, 0x601f, 0x0000, 0x6073, 0x0000, 0x6077,
-	0x0000, 0x080c, 0x74d5, 0x1158, 0x080c, 0x77d9, 0x080c, 0x6022,
-	0x9085, 0x0001, 0x080c, 0x751c, 0x080c, 0x7406, 0x00f0, 0x080c,
-	0xa872, 0x080c, 0xab3a, 0x080c, 0xa88e, 0x2061, 0x0100, 0x2001,
-	0x1818, 0x2004, 0x9084, 0x00ff, 0x810f, 0x9105, 0x604a, 0x6043,
-	0x0090, 0x6043, 0x0010, 0x2009, 0x1999, 0x200b, 0x0000, 0x2009,
-	0x002d, 0x2011, 0x5f0d, 0x080c, 0x86d7, 0x7984, 0x080c, 0x74d5,
-	0x1110, 0x2009, 0x00ff, 0x7a88, 0x080c, 0x45a4, 0x012e, 0x00ce,
-	0x002e, 0x0804, 0x356c, 0x7984, 0x080c, 0x65bd, 0x2b08, 0x1904,
-	0x35a1, 0x0804, 0x356c, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804,
-	0x359e, 0x60dc, 0xd0ac, 0x1130, 0xd09c, 0x1120, 0x2009, 0x0005,
-	0x0804, 0x359e, 0x080c, 0x4aa0, 0x1120, 0x2009, 0x0002, 0x0804,
-	0x359e, 0x7984, 0x9192, 0x0021, 0x1a04, 0x35a1, 0x7a8c, 0x7b88,
-	0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019, 0x702a, 0xaf60, 0x7736,
-	0x080c, 0x4ae9, 0x701f, 0x47b3, 0x7880, 0x9086, 0x006e, 0x0110,
-	0x701f, 0x5189, 0x0005, 0x2009, 0x0080, 0x080c, 0x661e, 0x1118,
-	0x080c, 0x6a5b, 0x0120, 0x2021, 0x400a, 0x0804, 0x356e, 0x00d6,
-	0x0096, 0xa964, 0xaa6c, 0xab70, 0xac74, 0xad78, 0xae7c, 0xa884,
-	0x90be, 0x0100, 0x0904, 0x484c, 0x90be, 0x0112, 0x0904, 0x484c,
-	0x90be, 0x0113, 0x0904, 0x484c, 0x90be, 0x0114, 0x0904, 0x484c,
-	0x90be, 0x0117, 0x0904, 0x484c, 0x90be, 0x011a, 0x0904, 0x484c,
-	0x90be, 0x011c, 0x0904, 0x484c, 0x90be, 0x0121, 0x0904, 0x4833,
-	0x90be, 0x0131, 0x0904, 0x4833, 0x90be, 0x0171, 0x0904, 0x484c,
-	0x90be, 0x0173, 0x0904, 0x484c, 0x90be, 0x01a1, 0x1128, 0xa894,
-	0x8007, 0xa896, 0x0804, 0x4857, 0x90be, 0x0212, 0x0904, 0x4840,
-	0x90be, 0x0213, 0x05e8, 0x90be, 0x0214, 0x0500, 0x90be, 0x0217,
-	0x0188, 0x90be, 0x021a, 0x1120, 0xa89c, 0x8007, 0xa89e, 0x04e0,
-	0x90be, 0x021f, 0x05c8, 0x90be, 0x0300, 0x05b0, 0x009e, 0x00de,
-	0x0804, 0x35a1, 0x7028, 0x9080, 0x0010, 0x2098, 0x20a0, 0x7034,
-	0x20e0, 0x20e8, 0x20a9, 0x0007, 0x080c, 0x4895, 0x7028, 0x9080,
-	0x000e, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001,
-	0x080c, 0x4895, 0x00c8, 0x7028, 0x9080, 0x000c, 0x2098, 0x20a0,
-	0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x48a2, 0x00b8,
-	0x7028, 0x9080, 0x000e, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8,
-	0x20a9, 0x0001, 0x080c, 0x48a2, 0x7028, 0x9080, 0x000c, 0x2098,
-	0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x04f1, 0x00c6,
-	0x080c, 0x4aa0, 0x0550, 0xa868, 0xc0fd, 0xa86a, 0xa867, 0x0119,
-	0x9006, 0xa882, 0xa87f, 0x0020, 0xa88b, 0x0001, 0x810b, 0xa9ae,
-	0xa8b2, 0xaab6, 0xabba, 0xacbe, 0xadc2, 0xa9c6, 0xa8ca, 0x00ce,
-	0x009e, 0x00de, 0xa866, 0xa822, 0xa868, 0xc0fd, 0xa86a, 0xa804,
-	0x2048, 0x080c, 0xc9a4, 0x1120, 0x2009, 0x0003, 0x0804, 0x359e,
-	0x7007, 0x0003, 0x701f, 0x488c, 0x0005, 0x00ce, 0x009e, 0x00de,
-	0x2009, 0x0002, 0x0804, 0x359e, 0xa820, 0x9086, 0x8001, 0x1904,
-	0x356c, 0x2009, 0x0004, 0x0804, 0x359e, 0x0016, 0x0026, 0x3510,
-	0x20a9, 0x0002, 0x4002, 0x4104, 0x4004, 0x8211, 0x1dc8, 0x002e,
-	0x001e, 0x0005, 0x0016, 0x0026, 0x0036, 0x0046, 0x3520, 0x20a9,
-	0x0004, 0x4002, 0x4304, 0x4204, 0x4104, 0x4004, 0x8421, 0x1db8,
-	0x004e, 0x003e, 0x002e, 0x001e, 0x0005, 0x81ff, 0x0120, 0x2009,
-	0x0001, 0x0804, 0x359e, 0x60dc, 0xd0ac, 0x1130, 0xd09c, 0x1120,
-	0x2009, 0x0005, 0x0804, 0x359e, 0x7984, 0x78a8, 0x2040, 0x080c,
-	0xab33, 0x1120, 0x9182, 0x007f, 0x0a04, 0x35a1, 0x9186, 0x00ff,
-	0x0904, 0x35a1, 0x9182, 0x0800, 0x1a04, 0x35a1, 0x7a8c, 0x7b88,
-	0x607c, 0x9306, 0x1140, 0x6080, 0x924e, 0x0904, 0x35a1, 0x99cc,
-	0xff00, 0x0904, 0x35a1, 0x0126, 0x2091, 0x8000, 0x080c, 0x49b3,
-	0x0904, 0x4933, 0x0086, 0x90c6, 0x4000, 0x008e, 0x1538, 0x00c6,
-	0x0006, 0x0036, 0xb818, 0xbb1c, 0x9305, 0xbb20, 0x9305, 0xbb24,
-	0x9305, 0xbb28, 0x9305, 0xbb2c, 0x9305, 0xbb30, 0x9305, 0xbb34,
-	0x9305, 0x003e, 0x0570, 0xd88c, 0x1128, 0x080c, 0x6a5b, 0x0110,
-	0xc89d, 0x0438, 0x900e, 0x080c, 0x690d, 0x1108, 0xc185, 0xb800,
-	0xd0bc, 0x0108, 0xc18d, 0x000e, 0x00ce, 0x00b8, 0x90c6, 0x4007,
-	0x1110, 0x2408, 0x0090, 0x90c6, 0x4008, 0x1118, 0x2708, 0x2610,
-	0x0060, 0x90c6, 0x4009, 0x1108, 0x0040, 0x90c6, 0x4006, 0x1108,
-	0x0020, 0x2001, 0x4005, 0x2009, 0x000a, 0x2020, 0x012e, 0x0804,
-	0x356e, 0x000e, 0x00ce, 0x2b00, 0x7026, 0x0016, 0x00b6, 0x00c6,
-	0x00e6, 0x2c70, 0x080c, 0xac3b, 0x0904, 0x4988, 0x2b00, 0x6012,
-	0x080c, 0xcca8, 0x2e58, 0x00ee, 0x00e6, 0x00c6, 0x080c, 0x4aa0,
-	0x00ce, 0x2b70, 0x1158, 0x080c, 0xabc9, 0x00ee, 0x00ce, 0x00be,
-	0x001e, 0x012e, 0x2009, 0x0002, 0x0804, 0x359e, 0x900e, 0xa966,
-	0xa96a, 0x2900, 0x6016, 0xa932, 0xa868, 0xc0fd, 0xd88c, 0x0108,
-	0xc0f5, 0xa86a, 0xd89c, 0x1110, 0x080c, 0x31e4, 0x6023, 0x0001,
-	0x9006, 0x080c, 0x655a, 0xd89c, 0x0138, 0x2001, 0x0004, 0x080c,
-	0x656e, 0x2009, 0x0003, 0x0030, 0x2001, 0x0002, 0x080c, 0x656e,
-	0x2009, 0x0002, 0x080c, 0xac68, 0x78a8, 0xd094, 0x0138, 0x00ee,
-	0x7024, 0x00e6, 0x2058, 0xb8d4, 0xc08d, 0xb8d6, 0x9085, 0x0001,
-	0x00ee, 0x00ce, 0x00be, 0x001e, 0x012e, 0x1120, 0x2009, 0x0003,
-	0x0804, 0x359e, 0x7007, 0x0003, 0x701f, 0x4997, 0x0005, 0xa830,
-	0x9086, 0x0100, 0x7024, 0x2058, 0x1138, 0x2009, 0x0004, 0xba04,
-	0x9294, 0x00ff, 0x0804, 0x5630, 0x900e, 0xa868, 0xd0f4, 0x1904,
-	0x356c, 0x080c, 0x690d, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108,
-	0xc18d, 0x0804, 0x356c, 0x00e6, 0x00d6, 0x0096, 0x83ff, 0x0904,
-	0x4a02, 0x902e, 0x080c, 0xab33, 0x0130, 0x9026, 0x20a9, 0x0800,
-	0x2071, 0x1000, 0x0030, 0x2021, 0x007f, 0x20a9, 0x0781, 0x2071,
-	0x107f, 0x2e04, 0x9005, 0x11b8, 0x2100, 0x9406, 0x1904, 0x4a13,
-	0x2428, 0x94ce, 0x007f, 0x1120, 0x92ce, 0xfffd, 0x1558, 0x0030,
-	0x94ce, 0x0080, 0x1130, 0x92ce, 0xfffc, 0x1520, 0x93ce, 0x00ff,
-	0x1508, 0xc5fd, 0x0480, 0x2058, 0xbf10, 0x2700, 0x9306, 0x11e8,
-	0xbe14, 0x2600, 0x9206, 0x11c8, 0x2400, 0x9106, 0x1180, 0xd884,
-	0x0598, 0xd894, 0x1588, 0x080c, 0x69fb, 0x1570, 0x2001, 0x4000,
-	0x0460, 0x080c, 0x6a5b, 0x1540, 0x2001, 0x4000, 0x0430, 0x2001,
-	0x4007, 0x0418, 0x2001, 0x4006, 0x0400, 0x2400, 0x9106, 0x1158,
-	0xbe14, 0x87ff, 0x1128, 0x86ff, 0x0918, 0x080c, 0xab33, 0x1900,
-	0x2001, 0x4008, 0x0090, 0x8420, 0x8e70, 0x1f04, 0x49c9, 0x85ff,
-	0x1130, 0x2001, 0x4009, 0x0048, 0x2001, 0x0001, 0x0030, 0x080c,
-	0x65bd, 0x1dd0, 0xbb12, 0xba16, 0x9006, 0x9005, 0x009e, 0x00de,
-	0x00ee, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x359e,
-	0x080c, 0x4aa0, 0x1120, 0x2009, 0x0002, 0x0804, 0x359e, 0xa867,
-	0x0000, 0xa868, 0xc0fd, 0xa86a, 0x7884, 0x9005, 0x0904, 0x35a1,
-	0x9096, 0x00ff, 0x0120, 0x9092, 0x0004, 0x1a04, 0x35a1, 0x2010,
-	0x2918, 0x080c, 0x317e, 0x1120, 0x2009, 0x0003, 0x0804, 0x359e,
-	0x7007, 0x0003, 0x701f, 0x4a55, 0x0005, 0xa830, 0x9086, 0x0100,
-	0x1904, 0x356c, 0x2009, 0x0004, 0x0804, 0x359e, 0x7984, 0x080c,
-	0xab33, 0x1120, 0x9182, 0x007f, 0x0a04, 0x35a1, 0x9186, 0x00ff,
-	0x0904, 0x35a1, 0x9182, 0x0800, 0x1a04, 0x35a1, 0x2001, 0x9000,
-	0x080c, 0x568b, 0x1904, 0x359e, 0x0804, 0x356c, 0xa998, 0x080c,
-	0xab33, 0x1118, 0x9182, 0x007f, 0x0280, 0x9186, 0x00ff, 0x0168,
-	0x9182, 0x0800, 0x1250, 0x2001, 0x9000, 0x080c, 0x568b, 0x11a8,
-	0x0060, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e,
-	0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0x900e,
-	0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x2009, 0x000a, 0x0c48,
-	0x080c, 0x103a, 0x0198, 0x9006, 0xa802, 0x7014, 0x9005, 0x1120,
-	0x2900, 0x7016, 0x701a, 0x0040, 0x7018, 0xa802, 0x0086, 0x2040,
-	0x2900, 0xa006, 0x701a, 0x008e, 0x9085, 0x0001, 0x0005, 0x7984,
-	0x080c, 0x661e, 0x1130, 0x7e88, 0x9684, 0x3fff, 0x9082, 0x4000,
-	0x0208, 0x905e, 0x8bff, 0x0005, 0xa998, 0x080c, 0x661e, 0x1130,
-	0xae9c, 0x9684, 0x3fff, 0x9082, 0x4000, 0x0208, 0x905e, 0x8bff,
-	0x0005, 0xae98, 0x0008, 0x7e84, 0x2608, 0x080c, 0x661e, 0x1108,
-	0x0008, 0x905e, 0x8bff, 0x0005, 0x0016, 0x7114, 0x81ff, 0x0128,
-	0x2148, 0xa904, 0x080c, 0x106c, 0x0cc8, 0x7116, 0x711a, 0x001e,
-	0x0005, 0x2031, 0x0001, 0x0010, 0x2031, 0x0000, 0x2061, 0x18b8,
-	0x2c44, 0xa66a, 0xa17a, 0xa772, 0xa076, 0xa28e, 0xa392, 0xa496,
-	0xa59a, 0x080c, 0x1124, 0x7007, 0x0002, 0x701f, 0x356c, 0x0005,
-	0x00f6, 0x0126, 0x2091, 0x8000, 0x2079, 0x0000, 0x2001, 0x18b0,
-	0x2004, 0x9005, 0x1190, 0x0e04, 0x4b1d, 0x7a36, 0x7833, 0x0012,
-	0x7a82, 0x7b86, 0x7c8a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
-	0xd084, 0x190c, 0x11d6, 0x0804, 0x4b83, 0x0016, 0x0086, 0x0096,
-	0x00c6, 0x00e6, 0x2071, 0x189e, 0x7044, 0x9005, 0x1540, 0x7148,
-	0x9182, 0x0010, 0x0288, 0x7038, 0x2060, 0x080c, 0x103a, 0x0904,
-	0x4b7b, 0xa84b, 0x0000, 0x2900, 0x7046, 0x2001, 0x0002, 0x9080,
-	0x1e55, 0x2005, 0xa846, 0x0098, 0x7038, 0x90e0, 0x0004, 0x2001,
-	0x18ba, 0x9c82, 0x18fa, 0x0210, 0x2061, 0x18ba, 0x2c00, 0x703a,
-	0x7148, 0x81ff, 0x1108, 0x703e, 0x8108, 0x714a, 0x0460, 0x7148,
-	0x8108, 0x714a, 0x7044, 0x2040, 0xa144, 0x2105, 0x0016, 0x908a,
-	0x0036, 0x1a0c, 0x0d7d, 0x2060, 0x001e, 0x8108, 0x2105, 0x9005,
-	0xa146, 0x1520, 0x080c, 0x103a, 0x1130, 0x8109, 0xa946, 0x7148,
-	0x8109, 0x714a, 0x00d8, 0x9006, 0xa806, 0xa84a, 0xa046, 0x2800,
-	0xa802, 0x2900, 0xa006, 0x7046, 0x2001, 0x0002, 0x9080, 0x1e55,
-	0x2005, 0xa846, 0x0058, 0x2262, 0x6306, 0x640a, 0x00ee, 0x00ce,
-	0x009e, 0x008e, 0x001e, 0x012e, 0x00fe, 0x0005, 0x2c00, 0x9082,
-	0x001b, 0x0002, 0x4ba5, 0x4ba5, 0x4ba7, 0x4ba5, 0x4ba5, 0x4ba5,
-	0x4bab, 0x4ba5, 0x4ba5, 0x4ba5, 0x4baf, 0x4ba5, 0x4ba5, 0x4ba5,
-	0x4bb3, 0x4ba5, 0x4ba5, 0x4ba5, 0x4bb7, 0x4ba5, 0x4ba5, 0x4ba5,
-	0x4bbb, 0x4ba5, 0x4ba5, 0x4ba5, 0x4bc0, 0x080c, 0x0d7d, 0xa276,
-	0xa37a, 0xa47e, 0x0898, 0xa286, 0xa38a, 0xa48e, 0x0878, 0xa296,
-	0xa39a, 0xa49e, 0x0858, 0xa2a6, 0xa3aa, 0xa4ae, 0x0838, 0xa2b6,
-	0xa3ba, 0xa4be, 0x0818, 0xa2c6, 0xa3ca, 0xa4ce, 0x0804, 0x4b7e,
-	0xa2d6, 0xa3da, 0xa4de, 0x0804, 0x4b7e, 0x00e6, 0x2071, 0x189e,
-	0x7048, 0x9005, 0x0904, 0x4c57, 0x0126, 0x2091, 0x8000, 0x0e04,
-	0x4c56, 0x00f6, 0x2079, 0x0000, 0x00c6, 0x0096, 0x0086, 0x0076,
-	0x9006, 0x2038, 0x7040, 0x2048, 0x9005, 0x0500, 0xa948, 0x2105,
-	0x0016, 0x908a, 0x0036, 0x1a0c, 0x0d7d, 0x2060, 0x001e, 0x8108,
-	0x2105, 0x9005, 0xa94a, 0x1904, 0x4c59, 0xa804, 0x9005, 0x090c,
-	0x0d7d, 0x7042, 0x2938, 0x2040, 0xa003, 0x0000, 0x2001, 0x0002,
-	0x9080, 0x1e55, 0x2005, 0xa04a, 0x0804, 0x4c59, 0x703c, 0x2060,
-	0x2c14, 0x6304, 0x6408, 0x650c, 0x2200, 0x7836, 0x7833, 0x0012,
-	0x7882, 0x2300, 0x7886, 0x2400, 0x788a, 0x2091, 0x4080, 0x2001,
-	0x0089, 0x2004, 0xd084, 0x190c, 0x11d6, 0x87ff, 0x0118, 0x2748,
-	0x080c, 0x106c, 0x7048, 0x8001, 0x704a, 0x9005, 0x1170, 0x7040,
-	0x2048, 0x9005, 0x0128, 0x080c, 0x106c, 0x9006, 0x7042, 0x7046,
-	0x703b, 0x18ba, 0x703f, 0x18ba, 0x0420, 0x7040, 0x9005, 0x1508,
-	0x7238, 0x2c00, 0x9206, 0x0148, 0x9c80, 0x0004, 0x90fa, 0x18fa,
-	0x0210, 0x2001, 0x18ba, 0x703e, 0x00a0, 0x9006, 0x703e, 0x703a,
-	0x7044, 0x9005, 0x090c, 0x0d7d, 0x2048, 0xa800, 0x9005, 0x1de0,
-	0x2900, 0x7042, 0x2001, 0x0002, 0x9080, 0x1e55, 0x2005, 0xa84a,
-	0x0000, 0x007e, 0x008e, 0x009e, 0x00ce, 0x00fe, 0x012e, 0x00ee,
-	0x0005, 0x2c00, 0x9082, 0x001b, 0x0002, 0x4c78, 0x4c78, 0x4c7a,
-	0x4c78, 0x4c78, 0x4c78, 0x4c7f, 0x4c78, 0x4c78, 0x4c78, 0x4c84,
-	0x4c78, 0x4c78, 0x4c78, 0x4c89, 0x4c78, 0x4c78, 0x4c78, 0x4c8e,
-	0x4c78, 0x4c78, 0x4c78, 0x4c93, 0x4c78, 0x4c78, 0x4c78, 0x4c98,
-	0x080c, 0x0d7d, 0xaa74, 0xab78, 0xac7c, 0x0804, 0x4c04, 0xaa84,
-	0xab88, 0xac8c, 0x0804, 0x4c04, 0xaa94, 0xab98, 0xac9c, 0x0804,
-	0x4c04, 0xaaa4, 0xaba8, 0xacac, 0x0804, 0x4c04, 0xaab4, 0xabb8,
-	0xacbc, 0x0804, 0x4c04, 0xaac4, 0xabc8, 0xaccc, 0x0804, 0x4c04,
-	0xaad4, 0xabd8, 0xacdc, 0x0804, 0x4c04, 0x0016, 0x0026, 0x0036,
-	0x00b6, 0x00c6, 0x2009, 0x007e, 0x080c, 0x661e, 0x2019, 0x0001,
-	0xb85c, 0xd0ac, 0x0110, 0x2019, 0x0000, 0x2011, 0x801b, 0x080c,
-	0x4b00, 0x00ce, 0x00be, 0x003e, 0x002e, 0x001e, 0x0005, 0x0026,
-	0x080c, 0x56d3, 0xd0c4, 0x0120, 0x2011, 0x8014, 0x080c, 0x4b00,
-	0x002e, 0x0005, 0x81ff, 0x1904, 0x359e, 0x0126, 0x2091, 0x8000,
-	0x6030, 0xc08d, 0xc085, 0xc0ac, 0x6032, 0x080c, 0x74d5, 0x1158,
-	0x080c, 0x77d9, 0x080c, 0x6022, 0x9085, 0x0001, 0x080c, 0x751c,
-	0x080c, 0x7406, 0x0010, 0x080c, 0x5edd, 0x012e, 0x0804, 0x356c,
-	0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x359e, 0x080c, 0x56e7,
-	0x0120, 0x2009, 0x0007, 0x0804, 0x359e, 0x080c, 0x6a53, 0x0120,
-	0x2009, 0x0008, 0x0804, 0x359e, 0x080c, 0x335c, 0x0128, 0x7984,
-	0x080c, 0x65bd, 0x1904, 0x35a1, 0x080c, 0x4ad3, 0x0904, 0x35a1,
-	0x2b00, 0x7026, 0x080c, 0x6a5b, 0x7888, 0x1170, 0x9084, 0x0005,
-	0x1158, 0x900e, 0x080c, 0x690d, 0x1108, 0xc185, 0xb800, 0xd0bc,
-	0x0108, 0xc18d, 0x0804, 0x356c, 0x080c, 0x4aa0, 0x0904, 0x359e,
-	0x9006, 0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xca46,
-	0x0904, 0x359e, 0x7888, 0xd094, 0x0118, 0xb8d4, 0xc08d, 0xb8d6,
-	0x7007, 0x0003, 0x701f, 0x4d79, 0x0005, 0x2061, 0x1800, 0x080c,
-	0x56e7, 0x2009, 0x0007, 0x1578, 0x080c, 0x6a53, 0x0118, 0x2009,
-	0x0008, 0x0448, 0x080c, 0x335c, 0x0120, 0xa998, 0x080c, 0x65bd,
-	0x1530, 0x080c, 0x4ad1, 0x0518, 0x080c, 0x6a5b, 0xa89c, 0x1168,
-	0x9084, 0x0005, 0x1150, 0x900e, 0x080c, 0x690d, 0x1108, 0xc185,
-	0xb800, 0xd0bc, 0x0108, 0xc18d, 0x00d0, 0xa868, 0xc0fc, 0xa86a,
-	0x080c, 0xca46, 0x11e0, 0xa89c, 0xd094, 0x0118, 0xb8d4, 0xc08d,
-	0xb8d6, 0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897,
-	0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897,
-	0x4000, 0xa99a, 0x9006, 0x918d, 0x0001, 0x2008, 0x0005, 0x9006,
-	0x0005, 0xa830, 0x9086, 0x0100, 0x7024, 0x2058, 0x1110, 0x0804,
-	0x5630, 0x900e, 0x080c, 0x690d, 0x1108, 0xc185, 0xb800, 0xd0bc,
-	0x0108, 0xc18d, 0x0804, 0x356c, 0x080c, 0x56e7, 0x0120, 0x2009,
-	0x0007, 0x0804, 0x359e, 0x7f84, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98,
-	0x080c, 0x4aa0, 0x1120, 0x2009, 0x0002, 0x0804, 0x359e, 0x900e,
-	0x2130, 0x7126, 0x7132, 0xa860, 0x20e8, 0x7036, 0xa85c, 0x9080,
-	0x0005, 0x702a, 0x20a0, 0x080c, 0x661e, 0x1904, 0x4e1b, 0x080c,
-	0x6a5b, 0x0138, 0x080c, 0x6a63, 0x0120, 0x080c, 0x69fb, 0x1904,
-	0x4e1b, 0xd794, 0x1110, 0xd784, 0x01a8, 0xb8c4, 0x20e0, 0xb8c8,
-	0x9080, 0x0006, 0x2098, 0x3400, 0xd794, 0x0160, 0x20a9, 0x0008,
-	0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x20a9, 0x0002, 0x080c,
-	0x48a2, 0x0048, 0x20a9, 0x0004, 0x4003, 0x2098, 0x20a0, 0x3d00,
-	0x20e0, 0x080c, 0x48a2, 0x9186, 0x007e, 0x0170, 0x9186, 0x0080,
-	0x0158, 0x080c, 0x6a5b, 0x90c2, 0x0006, 0x1210, 0xc1fd, 0x0020,
-	0x080c, 0x690d, 0x1108, 0xc1fd, 0x4104, 0xc1fc, 0xd794, 0x0528,
-	0xb8c4, 0x20e0, 0xb8c8, 0x2060, 0x9c80, 0x0000, 0x2098, 0x20a9,
-	0x0002, 0x4003, 0x9c80, 0x0003, 0x2098, 0x20a9, 0x0001, 0x4005,
-	0x9c80, 0x0004, 0x2098, 0x3400, 0x20a9, 0x0002, 0x4003, 0x2098,
-	0x20a0, 0x3d00, 0x20e0, 0x080c, 0x4895, 0x9c80, 0x0026, 0x2098,
-	0xb8c4, 0x20e0, 0x20a9, 0x0002, 0x4003, 0xd794, 0x0110, 0x96b0,
-	0x000b, 0x96b0, 0x0005, 0x8108, 0x080c, 0xab33, 0x0118, 0x9186,
-	0x0800, 0x0040, 0xd78c, 0x0120, 0x9186, 0x0800, 0x0170, 0x0018,
-	0x9186, 0x007e, 0x0150, 0xd794, 0x0118, 0x9686, 0x0020, 0x0010,
-	0x9686, 0x0028, 0x0150, 0x0804, 0x4dab, 0x86ff, 0x1120, 0x7124,
-	0x810b, 0x0804, 0x356c, 0x7033, 0x0001, 0x7122, 0x7024, 0x9600,
-	0x7026, 0x772e, 0x2061, 0x18b8, 0x2c44, 0xa06b, 0x0000, 0xa67a,
-	0x7034, 0xa072, 0x7028, 0xa076, 0xa28e, 0xa392, 0xa496, 0xa59a,
-	0x080c, 0x1124, 0x7007, 0x0002, 0x701f, 0x4e57, 0x0005, 0x7030,
-	0x9005, 0x1180, 0x7120, 0x7028, 0x20a0, 0x772c, 0x9036, 0x7034,
-	0x20e8, 0x2061, 0x18b8, 0x2c44, 0xa28c, 0xa390, 0xa494, 0xa598,
-	0x0804, 0x4dab, 0x7124, 0x810b, 0x0804, 0x356c, 0x2029, 0x007e,
-	0x7984, 0x7a88, 0x7b8c, 0x7c98, 0x9184, 0xff00, 0x8007, 0x90e2,
-	0x0020, 0x0a04, 0x35a1, 0x9502, 0x0a04, 0x35a1, 0x9184, 0x00ff,
-	0x90e2, 0x0020, 0x0a04, 0x35a1, 0x9502, 0x0a04, 0x35a1, 0x9284,
-	0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x35a1, 0x9502, 0x0a04,
-	0x35a1, 0x9284, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x35a1, 0x9502,
-	0x0a04, 0x35a1, 0x9384, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04,
-	0x35a1, 0x9502, 0x0a04, 0x35a1, 0x9384, 0x00ff, 0x90e2, 0x0020,
-	0x0a04, 0x35a1, 0x9502, 0x0a04, 0x35a1, 0x9484, 0xff00, 0x8007,
-	0x90e2, 0x0020, 0x0a04, 0x35a1, 0x9502, 0x0a04, 0x35a1, 0x9484,
-	0x00ff, 0x90e2, 0x0020, 0x0a04, 0x35a1, 0x9502, 0x0a04, 0x35a1,
-	0x2061, 0x1989, 0x6102, 0x6206, 0x630a, 0x640e, 0x0804, 0x356c,
-	0x080c, 0x4aa0, 0x0904, 0x359e, 0x2009, 0x0016, 0x7a8c, 0x7b88,
-	0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, 0x4ae9,
-	0x701f, 0x4edb, 0x0005, 0x2001, 0x0138, 0x2003, 0x0000, 0x00e6,
-	0x2071, 0x0300, 0x701c, 0xd0a4, 0x1de8, 0x00ee, 0x20a9, 0x0016,
-	0x896e, 0x8d6e, 0x8d6f, 0x9d84, 0xffc0, 0x9080, 0x0019, 0x2098,
-	0x9d84, 0x003f, 0x20e0, 0x2069, 0x1877, 0x20e9, 0x0001, 0x2da0,
-	0x4003, 0x6800, 0x9005, 0x0904, 0x4f5c, 0x6804, 0x2008, 0x918c,
-	0xfff8, 0x1904, 0x4f5c, 0x680c, 0x9005, 0x0904, 0x4f5c, 0x9082,
-	0xff01, 0x1a04, 0x4f5c, 0x6810, 0x9082, 0x005c, 0x0a04, 0x4f5c,
-	0x6824, 0x2008, 0x9082, 0x0008, 0x0a04, 0x4f5c, 0x9182, 0x0400,
-	0x1a04, 0x4f5c, 0x0056, 0x2029, 0x0000, 0x080c, 0x8cd9, 0x005e,
-	0x6944, 0x6820, 0x9102, 0x06c0, 0x6820, 0x9082, 0x0019, 0x16a0,
-	0x6828, 0x6944, 0x810c, 0x9102, 0x0678, 0x6840, 0x9082, 0x000f,
-	0x1658, 0x080c, 0x1053, 0x2900, 0x0904, 0x4f76, 0x684e, 0x00e6,
-	0x2071, 0x1930, 0x00b6, 0x2059, 0x0000, 0x080c, 0x8b95, 0x00be,
-	0x00ee, 0x0558, 0x080c, 0x88ef, 0x080c, 0x8935, 0x11e0, 0x6857,
-	0x0000, 0x00c6, 0x2061, 0x0100, 0x6104, 0x918d, 0x2000, 0x6106,
-	0x6b10, 0x2061, 0x1a6b, 0x630a, 0x00ce, 0x080c, 0x2713, 0x2001,
-	0x0138, 0x2102, 0x0804, 0x356c, 0x080c, 0x2713, 0x2001, 0x0138,
-	0x2102, 0x0804, 0x35a1, 0x00e6, 0x2071, 0x1930, 0x080c, 0x8d6a,
-	0x080c, 0x8d79, 0x080c, 0x8b84, 0x00ee, 0x2001, 0x188a, 0x204c,
-	0x080c, 0x106c, 0x2001, 0x188a, 0x2003, 0x0000, 0x080c, 0x2713,
-	0x2001, 0x0138, 0x2102, 0x0804, 0x359e, 0x2001, 0x1924, 0x200c,
-	0x918e, 0x0000, 0x0904, 0x4fd5, 0x080c, 0x8b7f, 0x0904, 0x4fd5,
-	0x2001, 0x0101, 0x200c, 0x918c, 0xdfff, 0x2102, 0x2001, 0x0138,
-	0x2003, 0x0000, 0x00e6, 0x2071, 0x0300, 0x701c, 0xd0a4, 0x1de8,
-	0x00ee, 0x080c, 0x8b84, 0x2001, 0x0035, 0x080c, 0x1679, 0x00c6,
-	0x2061, 0x193c, 0x6004, 0x6100, 0x9106, 0x1de0, 0x00ce, 0x080c,
-	0x2713, 0x2001, 0x0138, 0x2102, 0x00e6, 0x00f6, 0x2071, 0x1923,
-	0x080c, 0x8ac0, 0x0120, 0x2f00, 0x080c, 0x8b4a, 0x0cc8, 0x00fe,
-	0x00ee, 0x0126, 0x2091, 0x8000, 0x2001, 0x188a, 0x200c, 0x81ff,
-	0x0138, 0x2148, 0x080c, 0x106c, 0x2001, 0x188a, 0x2003, 0x0000,
-	0x2001, 0x183d, 0x2003, 0x0020, 0x00e6, 0x2071, 0x1930, 0x080c,
-	0x8d6a, 0x080c, 0x8d79, 0x00ee, 0x012e, 0x0804, 0x356c, 0x0006,
-	0x080c, 0x56d3, 0xd0cc, 0x000e, 0x0005, 0x0006, 0x080c, 0x56d7,
-	0xd0bc, 0x000e, 0x0005, 0x6174, 0x7a84, 0x6300, 0x82ff, 0x1118,
-	0x7986, 0x0804, 0x356c, 0x83ff, 0x1904, 0x35a1, 0x2001, 0xfff0,
-	0x9200, 0x1a04, 0x35a1, 0x2019, 0xffff, 0x6078, 0x9302, 0x9200,
-	0x0a04, 0x35a1, 0x7986, 0x6276, 0x0804, 0x356c, 0x080c, 0x56e7,
-	0x1904, 0x359e, 0x7c88, 0x7d84, 0x7e98, 0x7f8c, 0x080c, 0x4aa0,
-	0x0904, 0x359e, 0x900e, 0x901e, 0x7326, 0x7332, 0xa860, 0x20e8,
-	0x7036, 0xa85c, 0x9080, 0x0003, 0x702a, 0x20a0, 0x91d8, 0x1000,
-	0x2b5c, 0x8bff, 0x0178, 0x080c, 0x6a5b, 0x0118, 0x080c, 0x6a63,
-	0x1148, 0x20a9, 0x0001, 0xb814, 0x4004, 0xb810, 0x4004, 0x4104,
-	0x9398, 0x0003, 0x8108, 0x9182, 0x0800, 0x0120, 0x9386, 0x003c,
-	0x0170, 0x0c20, 0x83ff, 0x1148, 0x7224, 0x900e, 0x2001, 0x0003,
-	0x080c, 0x9135, 0x2208, 0x0804, 0x356c, 0x7033, 0x0001, 0x7122,
-	0x7024, 0x9300, 0x7026, 0x2061, 0x18b8, 0x2c44, 0xa06b, 0x0000,
-	0xa37a, 0x7028, 0xa076, 0x7034, 0xa072, 0xa48e, 0xa592, 0xa696,
-	0xa79a, 0x080c, 0x1124, 0x7007, 0x0002, 0x701f, 0x5058, 0x0005,
-	0x7030, 0x9005, 0x1178, 0x7120, 0x7028, 0x20a0, 0x901e, 0x7034,
-	0x20e8, 0x2061, 0x18b8, 0x2c44, 0xa48c, 0xa590, 0xa694, 0xa798,
-	0x0804, 0x5016, 0x7224, 0x900e, 0x2001, 0x0003, 0x080c, 0x9135,
-	0x2208, 0x0804, 0x356c, 0x00f6, 0x00e6, 0x080c, 0x56e7, 0x2009,
-	0x0007, 0x1904, 0x50eb, 0x2071, 0x189e, 0x745c, 0x84ff, 0x2009,
-	0x000e, 0x1904, 0x50eb, 0xac9c, 0xad98, 0xaea4, 0xafa0, 0x0096,
-	0x080c, 0x1053, 0x2009, 0x0002, 0x0904, 0x50eb, 0x2900, 0x705e,
-	0x900e, 0x901e, 0x7356, 0x7362, 0xa860, 0x7066, 0xa85c, 0x9080,
-	0x0003, 0x705a, 0x20a0, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178,
-	0x080c, 0x6a5b, 0x0118, 0x080c, 0x6a63, 0x1148, 0xb814, 0x20a9,
-	0x0001, 0x4004, 0xb810, 0x4004, 0x4104, 0x9398, 0x0003, 0x8108,
-	0x9182, 0x0800, 0x0120, 0x9386, 0x003c, 0x01e8, 0x0c20, 0x83ff,
-	0x11c0, 0x7254, 0x900e, 0x2001, 0x0003, 0x080c, 0x9135, 0x2208,
-	0x009e, 0xa897, 0x4000, 0xa99a, 0x715c, 0x81ff, 0x090c, 0x0d7d,
-	0x2148, 0x080c, 0x106c, 0x9006, 0x705e, 0x918d, 0x0001, 0x2008,
-	0x0418, 0x7063, 0x0001, 0x7152, 0x7054, 0x9300, 0x7056, 0x2061,
-	0x18b9, 0x2c44, 0xa37a, 0x7058, 0xa076, 0x7064, 0xa072, 0xa48e,
-	0xa592, 0xa696, 0xa79a, 0xa09f, 0x50f7, 0x000e, 0xa0a2, 0x080c,
-	0x1124, 0x9006, 0x0048, 0x009e, 0xa897, 0x4005, 0xa99a, 0x900e,
-	0x9085, 0x0001, 0x2001, 0x0030, 0x00ee, 0x00fe, 0x0005, 0x00f6,
-	0xa0a0, 0x904d, 0x090c, 0x0d7d, 0x00e6, 0x2071, 0x189e, 0xa06c,
-	0x908e, 0x0100, 0x0138, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897,
-	0x4002, 0x00d8, 0x7060, 0x9005, 0x1158, 0x7150, 0x7058, 0x20a0,
-	0x901e, 0x7064, 0x20e8, 0xa48c, 0xa590, 0xa694, 0xa798, 0x0428,
-	0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0x7254, 0x900e,
-	0x2001, 0x0003, 0x080c, 0x9135, 0xaa9a, 0x715c, 0x81ff, 0x090c,
-	0x0d7d, 0x2148, 0x080c, 0x106c, 0x705f, 0x0000, 0xa0a0, 0x2048,
-	0x0126, 0x2091, 0x8000, 0x080c, 0x6d70, 0x012e, 0xa09f, 0x0000,
-	0xa0a3, 0x0000, 0x00ee, 0x00fe, 0x0005, 0x91d8, 0x1000, 0x2b5c,
-	0x8bff, 0x0178, 0x080c, 0x6a5b, 0x0118, 0x080c, 0x6a63, 0x1148,
-	0xb814, 0x20a9, 0x0001, 0x4004, 0xb810, 0x4004, 0x4104, 0x9398,
-	0x0003, 0x8108, 0x9182, 0x0800, 0x0120, 0x9386, 0x003c, 0x0518,
-	0x0c20, 0x83ff, 0x11f0, 0x7154, 0x810c, 0xa99a, 0xa897, 0x4000,
-	0x715c, 0x81ff, 0x090c, 0x0d7d, 0x2148, 0x080c, 0x106c, 0x9006,
-	0x705e, 0x918d, 0x0001, 0x2008, 0xa0a0, 0x2048, 0x0126, 0x2091,
-	0x8000, 0x080c, 0x6d70, 0x012e, 0xa09f, 0x0000, 0xa0a3, 0x0000,
-	0x0070, 0x7063, 0x0001, 0x7152, 0x7054, 0x9300, 0x7056, 0xa37a,
-	0xa48e, 0xa592, 0xa696, 0xa79a, 0x080c, 0x1124, 0x9006, 0x00ee,
-	0x0005, 0x0096, 0xa88c, 0x90be, 0x7000, 0x0148, 0x90be, 0x7100,
-	0x0130, 0x90be, 0x7200, 0x0118, 0x009e, 0x0804, 0x35a1, 0xa884,
-	0xa988, 0x080c, 0x25fb, 0x1518, 0x080c, 0x65bd, 0x1500, 0x7126,
-	0xbe12, 0xbd16, 0xae7c, 0x080c, 0x4aa0, 0x01c8, 0x080c, 0x4aa0,
-	0x01b0, 0x009e, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0xa823,
-	0x0000, 0xa804, 0x2048, 0x080c, 0xc9c4, 0x1120, 0x2009, 0x0003,
-	0x0804, 0x359e, 0x7007, 0x0003, 0x701f, 0x51c4, 0x0005, 0x009e,
-	0x2009, 0x0002, 0x0804, 0x359e, 0x7124, 0x080c, 0x32f5, 0xa820,
-	0x9086, 0x8001, 0x1120, 0x2009, 0x0004, 0x0804, 0x359e, 0x2900,
-	0x7022, 0xa804, 0x0096, 0x2048, 0x8906, 0x8006, 0x8007, 0x90bc,
-	0x003f, 0x9084, 0xffc0, 0x009e, 0x9080, 0x0002, 0x0076, 0x0006,
-	0x2098, 0x20a0, 0x27e0, 0x27e8, 0x20a9, 0x002a, 0x080c, 0x0fb7,
-	0xaa6c, 0xab70, 0xac74, 0xad78, 0x2061, 0x18b8, 0x2c44, 0xa06b,
-	0x0000, 0xae64, 0xaf8c, 0x97c6, 0x7000, 0x0118, 0x97c6, 0x7100,
-	0x1148, 0x96c2, 0x0004, 0x0600, 0x2009, 0x0004, 0x000e, 0x007e,
-	0x0804, 0x4aec, 0x97c6, 0x7200, 0x11b8, 0x96c2, 0x0054, 0x02a0,
-	0x000e, 0x007e, 0x2061, 0x18b8, 0x2c44, 0xa076, 0xa772, 0xa07b,
-	0x002a, 0xa28e, 0xa392, 0xa496, 0xa59a, 0x080c, 0x1124, 0x7007,
-	0x0002, 0x701f, 0x5220, 0x0005, 0x000e, 0x007e, 0x0804, 0x35a1,
-	0x7020, 0x2048, 0xa804, 0x2048, 0xa804, 0x2048, 0x8906, 0x8006,
-	0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2098,
-	0x20a0, 0x27e0, 0x27e8, 0x20a9, 0x002a, 0x080c, 0x0fb7, 0x2100,
-	0x2238, 0x2061, 0x18b8, 0x2c44, 0xa28c, 0xa390, 0xa494, 0xa598,
-	0x2009, 0x002a, 0x0804, 0x4aec, 0x81ff, 0x1904, 0x359e, 0x798c,
-	0x2001, 0x197e, 0x918c, 0x8000, 0x2102, 0x080c, 0x4ab7, 0x0904,
-	0x35a1, 0x080c, 0x6a5b, 0x0120, 0x080c, 0x6a63, 0x1904, 0x35a1,
-	0x080c, 0x66e5, 0x0904, 0x359e, 0x0126, 0x2091, 0x8000, 0x080c,
-	0x687a, 0x012e, 0x0904, 0x359e, 0x2001, 0x197e, 0x2004, 0xd0fc,
-	0x1904, 0x356c, 0x0804, 0x4541, 0xa9a0, 0x2001, 0x197e, 0x918c,
-	0x8000, 0xc18d, 0x2102, 0x080c, 0x4ac4, 0x01a0, 0x080c, 0x6a5b,
-	0x0118, 0x080c, 0x6a63, 0x1170, 0x080c, 0x66e5, 0x2009, 0x0002,
-	0x0128, 0x080c, 0x687a, 0x1170, 0x2009, 0x0003, 0xa897, 0x4005,
+	0x0002, 0x2009, 0x002b, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804,
+	0x4af3, 0x81ff, 0x1904, 0x35a5, 0x080c, 0x4abe, 0x0904, 0x35a8,
+	0x080c, 0x6866, 0x0904, 0x35a5, 0x0058, 0xa878, 0x9005, 0x0120,
+	0x2009, 0x0004, 0x0804, 0x35a5, 0xa974, 0xaa94, 0x0804, 0x3573,
+	0x080c, 0x56e2, 0x0904, 0x3573, 0x701f, 0x453d, 0x7007, 0x0003,
+	0x0005, 0x81ff, 0x1904, 0x35a5, 0x7888, 0x908a, 0x1000, 0x1a04,
+	0x35a8, 0x080c, 0x4ada, 0x0904, 0x35a8, 0x080c, 0x6a6b, 0x0120,
+	0x080c, 0x6a73, 0x1904, 0x35a8, 0x080c, 0x68eb, 0x0904, 0x35a5,
+	0x2019, 0x0004, 0x900e, 0x080c, 0x6878, 0x0904, 0x35a5, 0x7984,
+	0x7a88, 0x04c9, 0x08a8, 0xa89c, 0x908a, 0x1000, 0x12f8, 0x080c,
+	0x4ad8, 0x01e0, 0x080c, 0x6a6b, 0x0118, 0x080c, 0x6a73, 0x11b0,
+	0x080c, 0x68eb, 0x2009, 0x0002, 0x0168, 0x2009, 0x0002, 0x2019,
+	0x0004, 0x080c, 0x6878, 0x2009, 0x0003, 0x0120, 0xa998, 0xaa9c,
+	0x00d1, 0x0060, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006,
+	0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000,
+	0x080c, 0x56e2, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085, 0x0001,
+	0x2001, 0x0000, 0x0005, 0x9186, 0x00ff, 0x0110, 0x0071, 0x0060,
+	0x2029, 0x007e, 0x2061, 0x1800, 0x645c, 0x2400, 0x9506, 0x0110,
+	0x2508, 0x0019, 0x8529, 0x1ec8, 0x0005, 0x080c, 0x6625, 0x1138,
+	0x2200, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, 0x864c, 0x0005,
+	0x81ff, 0x1904, 0x35a5, 0x798c, 0x2001, 0x1980, 0x918c, 0x8000,
+	0x2102, 0x080c, 0x4abe, 0x0904, 0x35a8, 0x080c, 0x6a6b, 0x0120,
+	0x080c, 0x6a73, 0x1904, 0x35a8, 0x080c, 0x66ec, 0x0904, 0x35a5,
+	0x080c, 0x686f, 0x0904, 0x35a5, 0x2001, 0x1980, 0x2004, 0xd0fc,
+	0x1904, 0x3573, 0x0804, 0x4548, 0xa9a0, 0x2001, 0x1980, 0x918c,
+	0x8000, 0xc18d, 0x2102, 0x080c, 0x4acb, 0x01a0, 0x080c, 0x6a6b,
+	0x0118, 0x080c, 0x6a73, 0x1170, 0x080c, 0x66ec, 0x2009, 0x0002,
+	0x0128, 0x080c, 0x686f, 0x1170, 0x2009, 0x0003, 0xa897, 0x4005,
 	0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001,
-	0x0030, 0x0005, 0xa897, 0x4000, 0x2001, 0x197e, 0x2004, 0xd0fc,
-	0x1128, 0x080c, 0x56db, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085,
-	0x0001, 0x2001, 0x0000, 0x0005, 0x78a8, 0xd08c, 0x1118, 0xd084,
-	0x0904, 0x44b6, 0x080c, 0x4ad3, 0x0904, 0x35a1, 0x080c, 0x4aa0,
-	0x1120, 0x2009, 0x0002, 0x0804, 0x359e, 0x080c, 0x6a5b, 0x0130,
-	0x908e, 0x0004, 0x0118, 0x908e, 0x0005, 0x15a0, 0x78a8, 0xd08c,
-	0x0120, 0xb800, 0xc08c, 0xb802, 0x0028, 0x080c, 0x56d3, 0xd0b4,
-	0x0904, 0x44f0, 0x7884, 0x908e, 0x007e, 0x0904, 0x44f0, 0x908e,
-	0x007f, 0x0904, 0x44f0, 0x908e, 0x0080, 0x0904, 0x44f0, 0xb800,
-	0xd08c, 0x1904, 0x44f0, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a,
-	0x080c, 0xc9e3, 0x1120, 0x2009, 0x0003, 0x0804, 0x359e, 0x7007,
-	0x0003, 0x701f, 0x52ec, 0x0005, 0x080c, 0x4ad3, 0x0904, 0x35a1,
-	0x0804, 0x44f0, 0x080c, 0x335c, 0x0108, 0x0005, 0x2009, 0x1834,
-	0x210c, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x359e, 0x080c,
-	0x56e7, 0x0120, 0x2009, 0x0007, 0x0804, 0x359e, 0x080c, 0x6a53,
-	0x0120, 0x2009, 0x0008, 0x0804, 0x359e, 0xb89c, 0xd0a4, 0x1118,
-	0xd0ac, 0x1904, 0x44f0, 0x9006, 0xa866, 0xa832, 0xa868, 0xc0fd,
-	0xa86a, 0x080c, 0xca46, 0x1120, 0x2009, 0x0003, 0x0804, 0x359e,
-	0x7007, 0x0003, 0x701f, 0x5325, 0x0005, 0xa830, 0x9086, 0x0100,
-	0x1120, 0x2009, 0x0004, 0x0804, 0x5630, 0x080c, 0x4ad3, 0x0904,
-	0x35a1, 0x0804, 0x52be, 0x81ff, 0x2009, 0x0001, 0x1904, 0x359e,
-	0x080c, 0x56e7, 0x2009, 0x0007, 0x1904, 0x359e, 0x080c, 0x6a53,
-	0x0120, 0x2009, 0x0008, 0x0804, 0x359e, 0x080c, 0x4ad3, 0x0904,
-	0x35a1, 0x080c, 0x6a5b, 0x2009, 0x0009, 0x1904, 0x359e, 0x080c,
-	0x4aa0, 0x2009, 0x0002, 0x0904, 0x359e, 0x9006, 0xa866, 0xa832,
-	0xa868, 0xc0fd, 0xa86a, 0x7988, 0x9194, 0xff00, 0x918c, 0x00ff,
-	0x9006, 0x82ff, 0x1128, 0xc0ed, 0xa952, 0x798c, 0xa956, 0x0038,
-	0x928e, 0x0100, 0x1904, 0x35a1, 0xc0e5, 0xa952, 0xa956, 0xa83e,
-	0x080c, 0xcca9, 0x2009, 0x0003, 0x0904, 0x359e, 0x7007, 0x0003,
-	0x701f, 0x537b, 0x0005, 0xa830, 0x9086, 0x0100, 0x2009, 0x0004,
-	0x0904, 0x359e, 0x0804, 0x356c, 0x7aa8, 0x9284, 0xc000, 0x0148,
-	0xd2ec, 0x01a0, 0x080c, 0x56e7, 0x1188, 0x2009, 0x0014, 0x0804,
-	0x359e, 0xd2dc, 0x1568, 0x81ff, 0x2009, 0x0001, 0x1904, 0x359e,
-	0x080c, 0x56e7, 0x2009, 0x0007, 0x1904, 0x359e, 0xd2f4, 0x0130,
-	0x9284, 0x5000, 0x080c, 0x56ae, 0x0804, 0x356c, 0xd2fc, 0x0158,
-	0x080c, 0x4ad3, 0x0904, 0x35a1, 0x7984, 0x9284, 0x9000, 0x080c,
-	0x568b, 0x0804, 0x356c, 0x080c, 0x4ad3, 0x0904, 0x35a1, 0xb804,
-	0x9084, 0x00ff, 0x9086, 0x0006, 0x2009, 0x0009, 0x1904, 0x5464,
-	0x080c, 0x4aa0, 0x2009, 0x0002, 0x0904, 0x5464, 0xa85c, 0x9080,
-	0x001b, 0xaf60, 0x2009, 0x0008, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98,
-	0x080c, 0x4ae9, 0x701f, 0x53d5, 0x0005, 0xa86c, 0x9086, 0x0500,
-	0x1138, 0xa870, 0x9005, 0x1120, 0xa874, 0x9084, 0xff00, 0x0110,
-	0x1904, 0x35a1, 0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x080c,
-	0x4ad3, 0x1110, 0x0804, 0x35a1, 0x2009, 0x0043, 0x080c, 0xcd11,
-	0x2009, 0x0003, 0x0904, 0x5464, 0x7007, 0x0003, 0x701f, 0x53f9,
-	0x0005, 0xa830, 0x9086, 0x0100, 0x2009, 0x0004, 0x0904, 0x5464,
-	0x7984, 0x7aa8, 0x9284, 0x1000, 0x080c, 0x568b, 0x0804, 0x356c,
-	0x00c6, 0xaab0, 0x9284, 0xc000, 0x0140, 0xd2ec, 0x0168, 0x080c,
-	0x56e7, 0x1150, 0x2009, 0x0014, 0x04f0, 0x2061, 0x1800, 0x080c,
-	0x56e7, 0x2009, 0x0007, 0x15b8, 0xd2f4, 0x0128, 0x9284, 0x5000,
-	0x080c, 0x56ae, 0x0050, 0xd2fc, 0x0178, 0x080c, 0x4ad1, 0x0588,
-	0xa998, 0x9284, 0x9000, 0x080c, 0x568b, 0xa87b, 0x0000, 0xa883,
-	0x0000, 0xa897, 0x4000, 0x0438, 0x080c, 0x4ad1, 0x0510, 0x080c,
-	0x6a5b, 0x2009, 0x0009, 0x11b8, 0xa8c4, 0x9086, 0x0500, 0x11c8,
-	0xa8c8, 0x9005, 0x11b0, 0xa8cc, 0x9084, 0xff00, 0x1190, 0x080c,
-	0x4ad1, 0x1108, 0x0070, 0x2009, 0x004b, 0x080c, 0xcd11, 0x2009,
-	0x0003, 0x0108, 0x0078, 0x0429, 0x19c0, 0xa897, 0x4005, 0xa99a,
+	0x0030, 0x0005, 0xa897, 0x4000, 0x2001, 0x1980, 0x2004, 0xd0fc,
+	0x1128, 0x080c, 0x56e2, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085,
+	0x0001, 0x2001, 0x0000, 0x0005, 0x81ff, 0x1904, 0x35a5, 0x798c,
+	0x2001, 0x197f, 0x918c, 0x8000, 0x2102, 0x080c, 0x4abe, 0x0904,
+	0x35a8, 0x080c, 0x6a6b, 0x0120, 0x080c, 0x6a73, 0x1904, 0x35a8,
+	0x080c, 0x66ec, 0x0904, 0x35a5, 0x080c, 0x685d, 0x0904, 0x35a5,
+	0x2001, 0x197f, 0x2004, 0xd0fc, 0x1904, 0x3573, 0x0804, 0x4548,
+	0xa9a0, 0x2001, 0x197f, 0x918c, 0x8000, 0xc18d, 0x2102, 0x080c,
+	0x4acb, 0x01a0, 0x080c, 0x6a6b, 0x0118, 0x080c, 0x6a73, 0x1170,
+	0x080c, 0x66ec, 0x2009, 0x0002, 0x0128, 0x080c, 0x685d, 0x1170,
+	0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006,
+	0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000,
+	0x2001, 0x197f, 0x2004, 0xd0fc, 0x1128, 0x080c, 0x56e2, 0x0110,
+	0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005,
+	0x6100, 0x0804, 0x3573, 0x080c, 0x4ada, 0x0904, 0x35a8, 0x080c,
+	0x56ee, 0x1904, 0x35a5, 0x79a8, 0xd184, 0x1158, 0xb834, 0x8007,
+	0x789e, 0xb830, 0x8007, 0x789a, 0xbb2c, 0x831f, 0xba28, 0x8217,
+	0x0050, 0xb824, 0x8007, 0x789e, 0xb820, 0x8007, 0x789a, 0xbb1c,
+	0x831f, 0xba18, 0x8217, 0xb900, 0x918c, 0x0200, 0x0804, 0x3573,
+	0x78a8, 0x909c, 0x0003, 0xd0b4, 0x1140, 0x939a, 0x0003, 0x1a04,
+	0x35a5, 0x625c, 0x7884, 0x9206, 0x1548, 0x080c, 0x87bb, 0x2001,
+	0xfff4, 0x2009, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039,
+	0x0000, 0x0006, 0x78a8, 0x9084, 0x0080, 0x1118, 0x000e, 0x0804,
+	0x4af3, 0x000e, 0x2031, 0x0000, 0x2061, 0x18b8, 0x2c44, 0xa66a,
+	0xa17a, 0xa772, 0xa076, 0xa28e, 0xa392, 0xa496, 0xa59a, 0x080c,
+	0x1124, 0x7007, 0x0002, 0x701f, 0x46fe, 0x0005, 0x81ff, 0x1904,
+	0x35a5, 0x080c, 0x4ada, 0x0904, 0x35a8, 0x080c, 0x6a6b, 0x1904,
+	0x35a5, 0x00c6, 0x080c, 0x4aa7, 0x00ce, 0x0904, 0x35a5, 0xa867,
+	0x0000, 0xa868, 0xc0fd, 0xa86a, 0x7ea8, 0x080c, 0xc9ad, 0x0904,
+	0x35a5, 0x7007, 0x0003, 0x701f, 0x4702, 0x0005, 0x080c, 0x4246,
+	0x0804, 0x3573, 0xa830, 0x9086, 0x0100, 0x0904, 0x35a5, 0x8906,
+	0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b,
+	0x2009, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x4af3,
+	0x9006, 0x080c, 0x2664, 0x78a8, 0x9084, 0x00ff, 0x9086, 0x00ff,
+	0x0118, 0x81ff, 0x1904, 0x35a5, 0x080c, 0x74e9, 0x0110, 0x080c,
+	0x5fee, 0x7888, 0x908a, 0x1000, 0x1a04, 0x35a8, 0x7984, 0x9186,
+	0x00ff, 0x0138, 0x9182, 0x007f, 0x1a04, 0x35a8, 0x2100, 0x080c,
+	0x262e, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, 0x2061, 0x1a03,
+	0x601b, 0x0000, 0x601f, 0x0000, 0x6073, 0x0000, 0x6077, 0x0000,
+	0x080c, 0x74e9, 0x1158, 0x080c, 0x77ed, 0x080c, 0x6029, 0x9085,
+	0x0001, 0x080c, 0x7530, 0x080c, 0x741a, 0x00f0, 0x080c, 0xa896,
+	0x080c, 0xab5e, 0x080c, 0xa8b2, 0x2061, 0x0100, 0x2001, 0x1818,
+	0x2004, 0x9084, 0x00ff, 0x810f, 0x9105, 0x604a, 0x6043, 0x0090,
+	0x6043, 0x0010, 0x2009, 0x1999, 0x200b, 0x0000, 0x2009, 0x002d,
+	0x2011, 0x5f14, 0x080c, 0x8708, 0x7984, 0x080c, 0x74e9, 0x1110,
+	0x2009, 0x00ff, 0x7a88, 0x080c, 0x45ab, 0x012e, 0x00ce, 0x002e,
+	0x0804, 0x3573, 0x7984, 0x080c, 0x65c4, 0x2b08, 0x1904, 0x35a8,
+	0x0804, 0x3573, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x35a5,
+	0x60dc, 0xd0ac, 0x1130, 0xd09c, 0x1120, 0x2009, 0x0005, 0x0804,
+	0x35a5, 0x080c, 0x4aa7, 0x1120, 0x2009, 0x0002, 0x0804, 0x35a5,
+	0x7984, 0x9192, 0x0021, 0x1a04, 0x35a8, 0x7a8c, 0x7b88, 0x7c9c,
+	0x7d98, 0xa85c, 0x9080, 0x0019, 0x702a, 0xaf60, 0x7736, 0x080c,
+	0x4af0, 0x701f, 0x47ba, 0x7880, 0x9086, 0x006e, 0x0110, 0x701f,
+	0x5190, 0x0005, 0x2009, 0x0080, 0x080c, 0x6625, 0x1118, 0x080c,
+	0x6a6b, 0x0120, 0x2021, 0x400a, 0x0804, 0x3575, 0x00d6, 0x0096,
+	0xa964, 0xaa6c, 0xab70, 0xac74, 0xad78, 0xae7c, 0xa884, 0x90be,
+	0x0100, 0x0904, 0x4853, 0x90be, 0x0112, 0x0904, 0x4853, 0x90be,
+	0x0113, 0x0904, 0x4853, 0x90be, 0x0114, 0x0904, 0x4853, 0x90be,
+	0x0117, 0x0904, 0x4853, 0x90be, 0x011a, 0x0904, 0x4853, 0x90be,
+	0x011c, 0x0904, 0x4853, 0x90be, 0x0121, 0x0904, 0x483a, 0x90be,
+	0x0131, 0x0904, 0x483a, 0x90be, 0x0171, 0x0904, 0x4853, 0x90be,
+	0x0173, 0x0904, 0x4853, 0x90be, 0x01a1, 0x1128, 0xa894, 0x8007,
+	0xa896, 0x0804, 0x485e, 0x90be, 0x0212, 0x0904, 0x4847, 0x90be,
+	0x0213, 0x05e8, 0x90be, 0x0214, 0x0500, 0x90be, 0x0217, 0x0188,
+	0x90be, 0x021a, 0x1120, 0xa89c, 0x8007, 0xa89e, 0x04e0, 0x90be,
+	0x021f, 0x05c8, 0x90be, 0x0300, 0x05b0, 0x009e, 0x00de, 0x0804,
+	0x35a8, 0x7028, 0x9080, 0x0010, 0x2098, 0x20a0, 0x7034, 0x20e0,
+	0x20e8, 0x20a9, 0x0007, 0x080c, 0x489c, 0x7028, 0x9080, 0x000e,
+	0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c,
+	0x489c, 0x00c8, 0x7028, 0x9080, 0x000c, 0x2098, 0x20a0, 0x7034,
+	0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x48a9, 0x00b8, 0x7028,
+	0x9080, 0x000e, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9,
+	0x0001, 0x080c, 0x48a9, 0x7028, 0x9080, 0x000c, 0x2098, 0x20a0,
+	0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x04f1, 0x00c6, 0x080c,
+	0x4aa7, 0x0550, 0xa868, 0xc0fd, 0xa86a, 0xa867, 0x0119, 0x9006,
+	0xa882, 0xa87f, 0x0020, 0xa88b, 0x0001, 0x810b, 0xa9ae, 0xa8b2,
+	0xaab6, 0xabba, 0xacbe, 0xadc2, 0xa9c6, 0xa8ca, 0x00ce, 0x009e,
+	0x00de, 0xa866, 0xa822, 0xa868, 0xc0fd, 0xa86a, 0xa804, 0x2048,
+	0x080c, 0xc9c8, 0x1120, 0x2009, 0x0003, 0x0804, 0x35a5, 0x7007,
+	0x0003, 0x701f, 0x4893, 0x0005, 0x00ce, 0x009e, 0x00de, 0x2009,
+	0x0002, 0x0804, 0x35a5, 0xa820, 0x9086, 0x8001, 0x1904, 0x3573,
+	0x2009, 0x0004, 0x0804, 0x35a5, 0x0016, 0x0026, 0x3510, 0x20a9,
+	0x0002, 0x4002, 0x4104, 0x4004, 0x8211, 0x1dc8, 0x002e, 0x001e,
+	0x0005, 0x0016, 0x0026, 0x0036, 0x0046, 0x3520, 0x20a9, 0x0004,
+	0x4002, 0x4304, 0x4204, 0x4104, 0x4004, 0x8421, 0x1db8, 0x004e,
+	0x003e, 0x002e, 0x001e, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001,
+	0x0804, 0x35a5, 0x60dc, 0xd0ac, 0x1130, 0xd09c, 0x1120, 0x2009,
+	0x0005, 0x0804, 0x35a5, 0x7984, 0x78a8, 0x2040, 0x080c, 0xab57,
+	0x1120, 0x9182, 0x007f, 0x0a04, 0x35a8, 0x9186, 0x00ff, 0x0904,
+	0x35a8, 0x9182, 0x0800, 0x1a04, 0x35a8, 0x7a8c, 0x7b88, 0x607c,
+	0x9306, 0x1140, 0x6080, 0x924e, 0x0904, 0x35a8, 0x99cc, 0xff00,
+	0x0904, 0x35a8, 0x0126, 0x2091, 0x8000, 0x080c, 0x49ba, 0x0904,
+	0x493a, 0x0086, 0x90c6, 0x4000, 0x008e, 0x1538, 0x00c6, 0x0006,
+	0x0036, 0xb818, 0xbb1c, 0x9305, 0xbb20, 0x9305, 0xbb24, 0x9305,
+	0xbb28, 0x9305, 0xbb2c, 0x9305, 0xbb30, 0x9305, 0xbb34, 0x9305,
+	0x003e, 0x0570, 0xd88c, 0x1128, 0x080c, 0x6a6b, 0x0110, 0xc89d,
+	0x0438, 0x900e, 0x080c, 0x6914, 0x1108, 0xc185, 0xb800, 0xd0bc,
+	0x0108, 0xc18d, 0x000e, 0x00ce, 0x00b8, 0x90c6, 0x4007, 0x1110,
+	0x2408, 0x0090, 0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0060,
+	0x90c6, 0x4009, 0x1108, 0x0040, 0x90c6, 0x4006, 0x1108, 0x0020,
+	0x2001, 0x4005, 0x2009, 0x000a, 0x2020, 0x012e, 0x0804, 0x3575,
+	0x000e, 0x00ce, 0x2b00, 0x7026, 0x0016, 0x00b6, 0x00c6, 0x00e6,
+	0x2c70, 0x080c, 0xac5f, 0x0904, 0x498f, 0x2b00, 0x6012, 0x080c,
+	0xcccc, 0x2e58, 0x00ee, 0x00e6, 0x00c6, 0x080c, 0x4aa7, 0x00ce,
+	0x2b70, 0x1158, 0x080c, 0xabed, 0x00ee, 0x00ce, 0x00be, 0x001e,
+	0x012e, 0x2009, 0x0002, 0x0804, 0x35a5, 0x900e, 0xa966, 0xa96a,
+	0x2900, 0x6016, 0xa932, 0xa868, 0xc0fd, 0xd88c, 0x0108, 0xc0f5,
+	0xa86a, 0xd89c, 0x1110, 0x080c, 0x31e7, 0x6023, 0x0001, 0x9006,
+	0x080c, 0x6561, 0xd89c, 0x0138, 0x2001, 0x0004, 0x080c, 0x6575,
+	0x2009, 0x0003, 0x0030, 0x2001, 0x0002, 0x080c, 0x6575, 0x2009,
+	0x0002, 0x080c, 0xac8c, 0x78a8, 0xd094, 0x0138, 0x00ee, 0x7024,
+	0x00e6, 0x2058, 0xb8d4, 0xc08d, 0xb8d6, 0x9085, 0x0001, 0x00ee,
+	0x00ce, 0x00be, 0x001e, 0x012e, 0x1120, 0x2009, 0x0003, 0x0804,
+	0x35a5, 0x7007, 0x0003, 0x701f, 0x499e, 0x0005, 0xa830, 0x9086,
+	0x0100, 0x7024, 0x2058, 0x1138, 0x2009, 0x0004, 0xba04, 0x9294,
+	0x00ff, 0x0804, 0x5637, 0x900e, 0xa868, 0xd0f4, 0x1904, 0x3573,
+	0x080c, 0x6914, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d,
+	0x0804, 0x3573, 0x00e6, 0x00d6, 0x0096, 0x83ff, 0x0904, 0x4a09,
+	0x902e, 0x080c, 0xab57, 0x0130, 0x9026, 0x20a9, 0x0800, 0x2071,
+	0x1000, 0x0030, 0x2021, 0x007f, 0x20a9, 0x0781, 0x2071, 0x107f,
+	0x2e04, 0x9005, 0x11b8, 0x2100, 0x9406, 0x1904, 0x4a1a, 0x2428,
+	0x94ce, 0x007f, 0x1120, 0x92ce, 0xfffd, 0x1558, 0x0030, 0x94ce,
+	0x0080, 0x1130, 0x92ce, 0xfffc, 0x1520, 0x93ce, 0x00ff, 0x1508,
+	0xc5fd, 0x0480, 0x2058, 0xbf10, 0x2700, 0x9306, 0x11e8, 0xbe14,
+	0x2600, 0x9206, 0x11c8, 0x2400, 0x9106, 0x1180, 0xd884, 0x0598,
+	0xd894, 0x1588, 0x080c, 0x6a0b, 0x1570, 0x2001, 0x4000, 0x0460,
+	0x080c, 0x6a6b, 0x1540, 0x2001, 0x4000, 0x0430, 0x2001, 0x4007,
+	0x0418, 0x2001, 0x4006, 0x0400, 0x2400, 0x9106, 0x1158, 0xbe14,
+	0x87ff, 0x1128, 0x86ff, 0x0918, 0x080c, 0xab57, 0x1900, 0x2001,
+	0x4008, 0x0090, 0x8420, 0x8e70, 0x1f04, 0x49d0, 0x85ff, 0x1130,
+	0x2001, 0x4009, 0x0048, 0x2001, 0x0001, 0x0030, 0x080c, 0x65c4,
+	0x1dd0, 0xbb12, 0xba16, 0x9006, 0x9005, 0x009e, 0x00de, 0x00ee,
+	0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x35a5, 0x080c,
+	0x4aa7, 0x1120, 0x2009, 0x0002, 0x0804, 0x35a5, 0xa867, 0x0000,
+	0xa868, 0xc0fd, 0xa86a, 0x7884, 0x9005, 0x0904, 0x35a8, 0x9096,
+	0x00ff, 0x0120, 0x9092, 0x0004, 0x1a04, 0x35a8, 0x2010, 0x2918,
+	0x080c, 0x3181, 0x1120, 0x2009, 0x0003, 0x0804, 0x35a5, 0x7007,
+	0x0003, 0x701f, 0x4a5c, 0x0005, 0xa830, 0x9086, 0x0100, 0x1904,
+	0x3573, 0x2009, 0x0004, 0x0804, 0x35a5, 0x7984, 0x080c, 0xab57,
+	0x1120, 0x9182, 0x007f, 0x0a04, 0x35a8, 0x9186, 0x00ff, 0x0904,
+	0x35a8, 0x9182, 0x0800, 0x1a04, 0x35a8, 0x2001, 0x9000, 0x080c,
+	0x5692, 0x1904, 0x35a5, 0x0804, 0x3573, 0xa998, 0x080c, 0xab57,
+	0x1118, 0x9182, 0x007f, 0x0280, 0x9186, 0x00ff, 0x0168, 0x9182,
+	0x0800, 0x1250, 0x2001, 0x9000, 0x080c, 0x5692, 0x11a8, 0x0060,
+	0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085,
+	0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0x900e, 0x9085,
+	0x0001, 0x2001, 0x0000, 0x0005, 0x2009, 0x000a, 0x0c48, 0x080c,
+	0x103a, 0x0198, 0x9006, 0xa802, 0x7014, 0x9005, 0x1120, 0x2900,
+	0x7016, 0x701a, 0x0040, 0x7018, 0xa802, 0x0086, 0x2040, 0x2900,
+	0xa006, 0x701a, 0x008e, 0x9085, 0x0001, 0x0005, 0x7984, 0x080c,
+	0x6625, 0x1130, 0x7e88, 0x9684, 0x3fff, 0x9082, 0x4000, 0x0208,
+	0x905e, 0x8bff, 0x0005, 0xa998, 0x080c, 0x6625, 0x1130, 0xae9c,
+	0x9684, 0x3fff, 0x9082, 0x4000, 0x0208, 0x905e, 0x8bff, 0x0005,
+	0xae98, 0x0008, 0x7e84, 0x2608, 0x080c, 0x6625, 0x1108, 0x0008,
+	0x905e, 0x8bff, 0x0005, 0x0016, 0x7114, 0x81ff, 0x0128, 0x2148,
+	0xa904, 0x080c, 0x106c, 0x0cc8, 0x7116, 0x711a, 0x001e, 0x0005,
+	0x2031, 0x0001, 0x0010, 0x2031, 0x0000, 0x2061, 0x18b8, 0x2c44,
+	0xa66a, 0xa17a, 0xa772, 0xa076, 0xa28e, 0xa392, 0xa496, 0xa59a,
+	0x080c, 0x1124, 0x7007, 0x0002, 0x701f, 0x3573, 0x0005, 0x00f6,
+	0x0126, 0x2091, 0x8000, 0x2079, 0x0000, 0x2001, 0x18b0, 0x2004,
+	0x9005, 0x1190, 0x0e04, 0x4b24, 0x7a36, 0x7833, 0x0012, 0x7a82,
+	0x7b86, 0x7c8a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,
+	0x190c, 0x11d6, 0x0804, 0x4b8a, 0x0016, 0x0086, 0x0096, 0x00c6,
+	0x00e6, 0x2071, 0x189e, 0x7044, 0x9005, 0x1540, 0x7148, 0x9182,
+	0x0010, 0x0288, 0x7038, 0x2060, 0x080c, 0x103a, 0x0904, 0x4b82,
+	0xa84b, 0x0000, 0x2900, 0x7046, 0x2001, 0x0002, 0x9080, 0x1e55,
+	0x2005, 0xa846, 0x0098, 0x7038, 0x90e0, 0x0004, 0x2001, 0x18ba,
+	0x9c82, 0x18fa, 0x0210, 0x2061, 0x18ba, 0x2c00, 0x703a, 0x7148,
+	0x81ff, 0x1108, 0x703e, 0x8108, 0x714a, 0x0460, 0x7148, 0x8108,
+	0x714a, 0x7044, 0x2040, 0xa144, 0x2105, 0x0016, 0x908a, 0x0036,
+	0x1a0c, 0x0d7d, 0x2060, 0x001e, 0x8108, 0x2105, 0x9005, 0xa146,
+	0x1520, 0x080c, 0x103a, 0x1130, 0x8109, 0xa946, 0x7148, 0x8109,
+	0x714a, 0x00d8, 0x9006, 0xa806, 0xa84a, 0xa046, 0x2800, 0xa802,
+	0x2900, 0xa006, 0x7046, 0x2001, 0x0002, 0x9080, 0x1e55, 0x2005,
+	0xa846, 0x0058, 0x2262, 0x6306, 0x640a, 0x00ee, 0x00ce, 0x009e,
+	0x008e, 0x001e, 0x012e, 0x00fe, 0x0005, 0x2c00, 0x9082, 0x001b,
+	0x0002, 0x4bac, 0x4bac, 0x4bae, 0x4bac, 0x4bac, 0x4bac, 0x4bb2,
+	0x4bac, 0x4bac, 0x4bac, 0x4bb6, 0x4bac, 0x4bac, 0x4bac, 0x4bba,
+	0x4bac, 0x4bac, 0x4bac, 0x4bbe, 0x4bac, 0x4bac, 0x4bac, 0x4bc2,
+	0x4bac, 0x4bac, 0x4bac, 0x4bc7, 0x080c, 0x0d7d, 0xa276, 0xa37a,
+	0xa47e, 0x0898, 0xa286, 0xa38a, 0xa48e, 0x0878, 0xa296, 0xa39a,
+	0xa49e, 0x0858, 0xa2a6, 0xa3aa, 0xa4ae, 0x0838, 0xa2b6, 0xa3ba,
+	0xa4be, 0x0818, 0xa2c6, 0xa3ca, 0xa4ce, 0x0804, 0x4b85, 0xa2d6,
+	0xa3da, 0xa4de, 0x0804, 0x4b85, 0x00e6, 0x2071, 0x189e, 0x7048,
+	0x9005, 0x0904, 0x4c5e, 0x0126, 0x2091, 0x8000, 0x0e04, 0x4c5d,
+	0x00f6, 0x2079, 0x0000, 0x00c6, 0x0096, 0x0086, 0x0076, 0x9006,
+	0x2038, 0x7040, 0x2048, 0x9005, 0x0500, 0xa948, 0x2105, 0x0016,
+	0x908a, 0x0036, 0x1a0c, 0x0d7d, 0x2060, 0x001e, 0x8108, 0x2105,
+	0x9005, 0xa94a, 0x1904, 0x4c60, 0xa804, 0x9005, 0x090c, 0x0d7d,
+	0x7042, 0x2938, 0x2040, 0xa003, 0x0000, 0x2001, 0x0002, 0x9080,
+	0x1e55, 0x2005, 0xa04a, 0x0804, 0x4c60, 0x703c, 0x2060, 0x2c14,
+	0x6304, 0x6408, 0x650c, 0x2200, 0x7836, 0x7833, 0x0012, 0x7882,
+	0x2300, 0x7886, 0x2400, 0x788a, 0x2091, 0x4080, 0x2001, 0x0089,
+	0x2004, 0xd084, 0x190c, 0x11d6, 0x87ff, 0x0118, 0x2748, 0x080c,
+	0x106c, 0x7048, 0x8001, 0x704a, 0x9005, 0x1170, 0x7040, 0x2048,
+	0x9005, 0x0128, 0x080c, 0x106c, 0x9006, 0x7042, 0x7046, 0x703b,
+	0x18ba, 0x703f, 0x18ba, 0x0420, 0x7040, 0x9005, 0x1508, 0x7238,
+	0x2c00, 0x9206, 0x0148, 0x9c80, 0x0004, 0x90fa, 0x18fa, 0x0210,
+	0x2001, 0x18ba, 0x703e, 0x00a0, 0x9006, 0x703e, 0x703a, 0x7044,
+	0x9005, 0x090c, 0x0d7d, 0x2048, 0xa800, 0x9005, 0x1de0, 0x2900,
+	0x7042, 0x2001, 0x0002, 0x9080, 0x1e55, 0x2005, 0xa84a, 0x0000,
+	0x007e, 0x008e, 0x009e, 0x00ce, 0x00fe, 0x012e, 0x00ee, 0x0005,
+	0x2c00, 0x9082, 0x001b, 0x0002, 0x4c7f, 0x4c7f, 0x4c81, 0x4c7f,
+	0x4c7f, 0x4c7f, 0x4c86, 0x4c7f, 0x4c7f, 0x4c7f, 0x4c8b, 0x4c7f,
+	0x4c7f, 0x4c7f, 0x4c90, 0x4c7f, 0x4c7f, 0x4c7f, 0x4c95, 0x4c7f,
+	0x4c7f, 0x4c7f, 0x4c9a, 0x4c7f, 0x4c7f, 0x4c7f, 0x4c9f, 0x080c,
+	0x0d7d, 0xaa74, 0xab78, 0xac7c, 0x0804, 0x4c0b, 0xaa84, 0xab88,
+	0xac8c, 0x0804, 0x4c0b, 0xaa94, 0xab98, 0xac9c, 0x0804, 0x4c0b,
+	0xaaa4, 0xaba8, 0xacac, 0x0804, 0x4c0b, 0xaab4, 0xabb8, 0xacbc,
+	0x0804, 0x4c0b, 0xaac4, 0xabc8, 0xaccc, 0x0804, 0x4c0b, 0xaad4,
+	0xabd8, 0xacdc, 0x0804, 0x4c0b, 0x0016, 0x0026, 0x0036, 0x00b6,
+	0x00c6, 0x2009, 0x007e, 0x080c, 0x6625, 0x2019, 0x0001, 0xb85c,
+	0xd0ac, 0x0110, 0x2019, 0x0000, 0x2011, 0x801b, 0x080c, 0x4b07,
+	0x00ce, 0x00be, 0x003e, 0x002e, 0x001e, 0x0005, 0x0026, 0x080c,
+	0x56da, 0xd0c4, 0x0120, 0x2011, 0x8014, 0x080c, 0x4b07, 0x002e,
+	0x0005, 0x81ff, 0x1904, 0x35a5, 0x0126, 0x2091, 0x8000, 0x6030,
+	0xc08d, 0xc085, 0xc0ac, 0x6032, 0x080c, 0x74e9, 0x1158, 0x080c,
+	0x77ed, 0x080c, 0x6029, 0x9085, 0x0001, 0x080c, 0x7530, 0x080c,
+	0x741a, 0x0010, 0x080c, 0x5ee4, 0x012e, 0x0804, 0x3573, 0x81ff,
+	0x0120, 0x2009, 0x0001, 0x0804, 0x35a5, 0x080c, 0x56ee, 0x0120,
+	0x2009, 0x0007, 0x0804, 0x35a5, 0x080c, 0x6a63, 0x0120, 0x2009,
+	0x0008, 0x0804, 0x35a5, 0x080c, 0x3363, 0x0128, 0x7984, 0x080c,
+	0x65c4, 0x1904, 0x35a8, 0x080c, 0x4ada, 0x0904, 0x35a8, 0x2b00,
+	0x7026, 0x080c, 0x6a6b, 0x7888, 0x1170, 0x9084, 0x0005, 0x1158,
+	0x900e, 0x080c, 0x6914, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108,
+	0xc18d, 0x0804, 0x3573, 0x080c, 0x4aa7, 0x0904, 0x35a5, 0x9006,
+	0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xca6a, 0x0904,
+	0x35a5, 0x7888, 0xd094, 0x0118, 0xb8d4, 0xc08d, 0xb8d6, 0x7007,
+	0x0003, 0x701f, 0x4d80, 0x0005, 0x2061, 0x1800, 0x080c, 0x56ee,
+	0x2009, 0x0007, 0x1578, 0x080c, 0x6a63, 0x0118, 0x2009, 0x0008,
+	0x0448, 0x080c, 0x3363, 0x0120, 0xa998, 0x080c, 0x65c4, 0x1530,
+	0x080c, 0x4ad8, 0x0518, 0x080c, 0x6a6b, 0xa89c, 0x1168, 0x9084,
+	0x0005, 0x1150, 0x900e, 0x080c, 0x6914, 0x1108, 0xc185, 0xb800,
+	0xd0bc, 0x0108, 0xc18d, 0x00d0, 0xa868, 0xc0fc, 0xa86a, 0x080c,
+	0xca6a, 0x11e0, 0xa89c, 0xd094, 0x0118, 0xb8d4, 0xc08d, 0xb8d6,
+	0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006,
+	0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000,
+	0xa99a, 0x9006, 0x918d, 0x0001, 0x2008, 0x0005, 0x9006, 0x0005,
+	0xa830, 0x9086, 0x0100, 0x7024, 0x2058, 0x1110, 0x0804, 0x5637,
+	0x900e, 0x080c, 0x6914, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108,
+	0xc18d, 0x0804, 0x3573, 0x080c, 0x56ee, 0x0120, 0x2009, 0x0007,
+	0x0804, 0x35a5, 0x7f84, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x080c,
+	0x4aa7, 0x1120, 0x2009, 0x0002, 0x0804, 0x35a5, 0x900e, 0x2130,
+	0x7126, 0x7132, 0xa860, 0x20e8, 0x7036, 0xa85c, 0x9080, 0x0005,
+	0x702a, 0x20a0, 0x080c, 0x6625, 0x1904, 0x4e22, 0x080c, 0x6a6b,
+	0x0138, 0x080c, 0x6a73, 0x0120, 0x080c, 0x6a0b, 0x1904, 0x4e22,
+	0xd794, 0x1110, 0xd784, 0x01a8, 0xb8c4, 0x20e0, 0xb8c8, 0x9080,
+	0x0006, 0x2098, 0x3400, 0xd794, 0x0160, 0x20a9, 0x0008, 0x4003,
+	0x2098, 0x20a0, 0x3d00, 0x20e0, 0x20a9, 0x0002, 0x080c, 0x48a9,
+	0x0048, 0x20a9, 0x0004, 0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0,
+	0x080c, 0x48a9, 0x9186, 0x007e, 0x0170, 0x9186, 0x0080, 0x0158,
+	0x080c, 0x6a6b, 0x90c2, 0x0006, 0x1210, 0xc1fd, 0x0020, 0x080c,
+	0x6914, 0x1108, 0xc1fd, 0x4104, 0xc1fc, 0xd794, 0x0528, 0xb8c4,
+	0x20e0, 0xb8c8, 0x2060, 0x9c80, 0x0000, 0x2098, 0x20a9, 0x0002,
+	0x4003, 0x9c80, 0x0003, 0x2098, 0x20a9, 0x0001, 0x4005, 0x9c80,
+	0x0004, 0x2098, 0x3400, 0x20a9, 0x0002, 0x4003, 0x2098, 0x20a0,
+	0x3d00, 0x20e0, 0x080c, 0x489c, 0x9c80, 0x0026, 0x2098, 0xb8c4,
+	0x20e0, 0x20a9, 0x0002, 0x4003, 0xd794, 0x0110, 0x96b0, 0x000b,
+	0x96b0, 0x0005, 0x8108, 0x080c, 0xab57, 0x0118, 0x9186, 0x0800,
+	0x0040, 0xd78c, 0x0120, 0x9186, 0x0800, 0x0170, 0x0018, 0x9186,
+	0x007e, 0x0150, 0xd794, 0x0118, 0x9686, 0x0020, 0x0010, 0x9686,
+	0x0028, 0x0150, 0x0804, 0x4db2, 0x86ff, 0x1120, 0x7124, 0x810b,
+	0x0804, 0x3573, 0x7033, 0x0001, 0x7122, 0x7024, 0x9600, 0x7026,
+	0x772e, 0x2061, 0x18b8, 0x2c44, 0xa06b, 0x0000, 0xa67a, 0x7034,
+	0xa072, 0x7028, 0xa076, 0xa28e, 0xa392, 0xa496, 0xa59a, 0x080c,
+	0x1124, 0x7007, 0x0002, 0x701f, 0x4e5e, 0x0005, 0x7030, 0x9005,
+	0x1180, 0x7120, 0x7028, 0x20a0, 0x772c, 0x9036, 0x7034, 0x20e8,
+	0x2061, 0x18b8, 0x2c44, 0xa28c, 0xa390, 0xa494, 0xa598, 0x0804,
+	0x4db2, 0x7124, 0x810b, 0x0804, 0x3573, 0x2029, 0x007e, 0x7984,
+	0x7a88, 0x7b8c, 0x7c98, 0x9184, 0xff00, 0x8007, 0x90e2, 0x0020,
+	0x0a04, 0x35a8, 0x9502, 0x0a04, 0x35a8, 0x9184, 0x00ff, 0x90e2,
+	0x0020, 0x0a04, 0x35a8, 0x9502, 0x0a04, 0x35a8, 0x9284, 0xff00,
+	0x8007, 0x90e2, 0x0020, 0x0a04, 0x35a8, 0x9502, 0x0a04, 0x35a8,
+	0x9284, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x35a8, 0x9502, 0x0a04,
+	0x35a8, 0x9384, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x35a8,
+	0x9502, 0x0a04, 0x35a8, 0x9384, 0x00ff, 0x90e2, 0x0020, 0x0a04,
+	0x35a8, 0x9502, 0x0a04, 0x35a8, 0x9484, 0xff00, 0x8007, 0x90e2,
+	0x0020, 0x0a04, 0x35a8, 0x9502, 0x0a04, 0x35a8, 0x9484, 0x00ff,
+	0x90e2, 0x0020, 0x0a04, 0x35a8, 0x9502, 0x0a04, 0x35a8, 0x2061,
+	0x1989, 0x6102, 0x6206, 0x630a, 0x640e, 0x0804, 0x3573, 0x080c,
+	0x4aa7, 0x0904, 0x35a5, 0x2009, 0x0016, 0x7a8c, 0x7b88, 0x7c9c,
+	0x7d98, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, 0x4af0, 0x701f,
+	0x4ee2, 0x0005, 0x2001, 0x0138, 0x2003, 0x0000, 0x00e6, 0x2071,
+	0x0300, 0x701c, 0xd0a4, 0x1de8, 0x00ee, 0x20a9, 0x0016, 0x896e,
+	0x8d6e, 0x8d6f, 0x9d84, 0xffc0, 0x9080, 0x0019, 0x2098, 0x9d84,
+	0x003f, 0x20e0, 0x2069, 0x1877, 0x20e9, 0x0001, 0x2da0, 0x4003,
+	0x6800, 0x9005, 0x0904, 0x4f63, 0x6804, 0x2008, 0x918c, 0xfff8,
+	0x1904, 0x4f63, 0x680c, 0x9005, 0x0904, 0x4f63, 0x9082, 0xff01,
+	0x1a04, 0x4f63, 0x6810, 0x9082, 0x005c, 0x0a04, 0x4f63, 0x6824,
+	0x2008, 0x9082, 0x0008, 0x0a04, 0x4f63, 0x9182, 0x0400, 0x1a04,
+	0x4f63, 0x0056, 0x2029, 0x0000, 0x080c, 0x8d0a, 0x005e, 0x6944,
+	0x6820, 0x9102, 0x06c0, 0x6820, 0x9082, 0x0019, 0x16a0, 0x6828,
+	0x6944, 0x810c, 0x9102, 0x0678, 0x6840, 0x9082, 0x000f, 0x1658,
+	0x080c, 0x1053, 0x2900, 0x0904, 0x4f7d, 0x684e, 0x00e6, 0x2071,
+	0x1930, 0x00b6, 0x2059, 0x0000, 0x080c, 0x8bc6, 0x00be, 0x00ee,
+	0x0558, 0x080c, 0x8920, 0x080c, 0x8966, 0x11e0, 0x6857, 0x0000,
+	0x00c6, 0x2061, 0x0100, 0x6104, 0x918d, 0x2000, 0x6106, 0x6b10,
+	0x2061, 0x1a6b, 0x630a, 0x00ce, 0x080c, 0x2713, 0x2001, 0x0138,
+	0x2102, 0x0804, 0x3573, 0x080c, 0x2713, 0x2001, 0x0138, 0x2102,
+	0x0804, 0x35a8, 0x00e6, 0x2071, 0x1930, 0x080c, 0x8d9b, 0x080c,
+	0x8daa, 0x080c, 0x8bb5, 0x00ee, 0x2001, 0x188a, 0x204c, 0x080c,
+	0x106c, 0x2001, 0x188a, 0x2003, 0x0000, 0x080c, 0x2713, 0x2001,
+	0x0138, 0x2102, 0x0804, 0x35a5, 0x2001, 0x1924, 0x200c, 0x918e,
+	0x0000, 0x0904, 0x4fdc, 0x080c, 0x8bb0, 0x0904, 0x4fdc, 0x2001,
+	0x0101, 0x200c, 0x918c, 0xdfff, 0x2102, 0x2001, 0x0138, 0x2003,
+	0x0000, 0x00e6, 0x2071, 0x0300, 0x701c, 0xd0a4, 0x1de8, 0x00ee,
+	0x080c, 0x8bb5, 0x2001, 0x0035, 0x080c, 0x1679, 0x00c6, 0x2061,
+	0x193c, 0x6004, 0x6100, 0x9106, 0x1de0, 0x00ce, 0x080c, 0x2713,
+	0x2001, 0x0138, 0x2102, 0x00e6, 0x00f6, 0x2071, 0x1923, 0x080c,
+	0x8af1, 0x0120, 0x2f00, 0x080c, 0x8b7b, 0x0cc8, 0x00fe, 0x00ee,
+	0x0126, 0x2091, 0x8000, 0x2001, 0x188a, 0x200c, 0x81ff, 0x0138,
+	0x2148, 0x080c, 0x106c, 0x2001, 0x188a, 0x2003, 0x0000, 0x2001,
+	0x183d, 0x2003, 0x0020, 0x00e6, 0x2071, 0x1930, 0x080c, 0x8d9b,
+	0x080c, 0x8daa, 0x00ee, 0x012e, 0x0804, 0x3573, 0x0006, 0x080c,
+	0x56da, 0xd0cc, 0x000e, 0x0005, 0x0006, 0x080c, 0x56de, 0xd0bc,
+	0x000e, 0x0005, 0x6174, 0x7a84, 0x6300, 0x82ff, 0x1118, 0x7986,
+	0x0804, 0x3573, 0x83ff, 0x1904, 0x35a8, 0x2001, 0xfff0, 0x9200,
+	0x1a04, 0x35a8, 0x2019, 0xffff, 0x6078, 0x9302, 0x9200, 0x0a04,
+	0x35a8, 0x7986, 0x6276, 0x0804, 0x3573, 0x080c, 0x56ee, 0x1904,
+	0x35a5, 0x7c88, 0x7d84, 0x7e98, 0x7f8c, 0x080c, 0x4aa7, 0x0904,
+	0x35a5, 0x900e, 0x901e, 0x7326, 0x7332, 0xa860, 0x20e8, 0x7036,
+	0xa85c, 0x9080, 0x0003, 0x702a, 0x20a0, 0x91d8, 0x1000, 0x2b5c,
+	0x8bff, 0x0178, 0x080c, 0x6a6b, 0x0118, 0x080c, 0x6a73, 0x1148,
+	0x20a9, 0x0001, 0xb814, 0x4004, 0xb810, 0x4004, 0x4104, 0x9398,
+	0x0003, 0x8108, 0x9182, 0x0800, 0x0120, 0x9386, 0x003c, 0x0170,
+	0x0c20, 0x83ff, 0x1148, 0x7224, 0x900e, 0x2001, 0x0003, 0x080c,
+	0x9166, 0x2208, 0x0804, 0x3573, 0x7033, 0x0001, 0x7122, 0x7024,
+	0x9300, 0x7026, 0x2061, 0x18b8, 0x2c44, 0xa06b, 0x0000, 0xa37a,
+	0x7028, 0xa076, 0x7034, 0xa072, 0xa48e, 0xa592, 0xa696, 0xa79a,
+	0x080c, 0x1124, 0x7007, 0x0002, 0x701f, 0x505f, 0x0005, 0x7030,
+	0x9005, 0x1178, 0x7120, 0x7028, 0x20a0, 0x901e, 0x7034, 0x20e8,
+	0x2061, 0x18b8, 0x2c44, 0xa48c, 0xa590, 0xa694, 0xa798, 0x0804,
+	0x501d, 0x7224, 0x900e, 0x2001, 0x0003, 0x080c, 0x9166, 0x2208,
+	0x0804, 0x3573, 0x00f6, 0x00e6, 0x080c, 0x56ee, 0x2009, 0x0007,
+	0x1904, 0x50f2, 0x2071, 0x189e, 0x745c, 0x84ff, 0x2009, 0x000e,
+	0x1904, 0x50f2, 0xac9c, 0xad98, 0xaea4, 0xafa0, 0x0096, 0x080c,
+	0x1053, 0x2009, 0x0002, 0x0904, 0x50f2, 0x2900, 0x705e, 0x900e,
+	0x901e, 0x7356, 0x7362, 0xa860, 0x7066, 0xa85c, 0x9080, 0x0003,
+	0x705a, 0x20a0, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c,
+	0x6a6b, 0x0118, 0x080c, 0x6a73, 0x1148, 0xb814, 0x20a9, 0x0001,
+	0x4004, 0xb810, 0x4004, 0x4104, 0x9398, 0x0003, 0x8108, 0x9182,
+	0x0800, 0x0120, 0x9386, 0x003c, 0x01e8, 0x0c20, 0x83ff, 0x11c0,
+	0x7254, 0x900e, 0x2001, 0x0003, 0x080c, 0x9166, 0x2208, 0x009e,
+	0xa897, 0x4000, 0xa99a, 0x715c, 0x81ff, 0x090c, 0x0d7d, 0x2148,
+	0x080c, 0x106c, 0x9006, 0x705e, 0x918d, 0x0001, 0x2008, 0x0418,
+	0x7063, 0x0001, 0x7152, 0x7054, 0x9300, 0x7056, 0x2061, 0x18b9,
+	0x2c44, 0xa37a, 0x7058, 0xa076, 0x7064, 0xa072, 0xa48e, 0xa592,
+	0xa696, 0xa79a, 0xa09f, 0x50fe, 0x000e, 0xa0a2, 0x080c, 0x1124,
+	0x9006, 0x0048, 0x009e, 0xa897, 0x4005, 0xa99a, 0x900e, 0x9085,
+	0x0001, 0x2001, 0x0030, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0xa0a0,
+	0x904d, 0x090c, 0x0d7d, 0x00e6, 0x2071, 0x189e, 0xa06c, 0x908e,
+	0x0100, 0x0138, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, 0x4002,
+	0x00d8, 0x7060, 0x9005, 0x1158, 0x7150, 0x7058, 0x20a0, 0x901e,
+	0x7064, 0x20e8, 0xa48c, 0xa590, 0xa694, 0xa798, 0x0428, 0xa87b,
+	0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0x7254, 0x900e, 0x2001,
+	0x0003, 0x080c, 0x9166, 0xaa9a, 0x715c, 0x81ff, 0x090c, 0x0d7d,
+	0x2148, 0x080c, 0x106c, 0x705f, 0x0000, 0xa0a0, 0x2048, 0x0126,
+	0x2091, 0x8000, 0x080c, 0x6d80, 0x012e, 0xa09f, 0x0000, 0xa0a3,
+	0x0000, 0x00ee, 0x00fe, 0x0005, 0x91d8, 0x1000, 0x2b5c, 0x8bff,
+	0x0178, 0x080c, 0x6a6b, 0x0118, 0x080c, 0x6a73, 0x1148, 0xb814,
+	0x20a9, 0x0001, 0x4004, 0xb810, 0x4004, 0x4104, 0x9398, 0x0003,
+	0x8108, 0x9182, 0x0800, 0x0120, 0x9386, 0x003c, 0x0518, 0x0c20,
+	0x83ff, 0x11f0, 0x7154, 0x810c, 0xa99a, 0xa897, 0x4000, 0x715c,
+	0x81ff, 0x090c, 0x0d7d, 0x2148, 0x080c, 0x106c, 0x9006, 0x705e,
+	0x918d, 0x0001, 0x2008, 0xa0a0, 0x2048, 0x0126, 0x2091, 0x8000,
+	0x080c, 0x6d80, 0x012e, 0xa09f, 0x0000, 0xa0a3, 0x0000, 0x0070,
+	0x7063, 0x0001, 0x7152, 0x7054, 0x9300, 0x7056, 0xa37a, 0xa48e,
+	0xa592, 0xa696, 0xa79a, 0x080c, 0x1124, 0x9006, 0x00ee, 0x0005,
+	0x0096, 0xa88c, 0x90be, 0x7000, 0x0148, 0x90be, 0x7100, 0x0130,
+	0x90be, 0x7200, 0x0118, 0x009e, 0x0804, 0x35a8, 0xa884, 0xa988,
+	0x080c, 0x25fb, 0x1518, 0x080c, 0x65c4, 0x1500, 0x7126, 0xbe12,
+	0xbd16, 0xae7c, 0x080c, 0x4aa7, 0x01c8, 0x080c, 0x4aa7, 0x01b0,
+	0x009e, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0xa823, 0x0000,
+	0xa804, 0x2048, 0x080c, 0xc9e8, 0x1120, 0x2009, 0x0003, 0x0804,
+	0x35a5, 0x7007, 0x0003, 0x701f, 0x51cb, 0x0005, 0x009e, 0x2009,
+	0x0002, 0x0804, 0x35a5, 0x7124, 0x080c, 0x32fc, 0xa820, 0x9086,
+	0x8001, 0x1120, 0x2009, 0x0004, 0x0804, 0x35a5, 0x2900, 0x7022,
+	0xa804, 0x0096, 0x2048, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f,
+	0x9084, 0xffc0, 0x009e, 0x9080, 0x0002, 0x0076, 0x0006, 0x2098,
+	0x20a0, 0x27e0, 0x27e8, 0x20a9, 0x002a, 0x080c, 0x0fb7, 0xaa6c,
+	0xab70, 0xac74, 0xad78, 0x2061, 0x18b8, 0x2c44, 0xa06b, 0x0000,
+	0xae64, 0xaf8c, 0x97c6, 0x7000, 0x0118, 0x97c6, 0x7100, 0x1148,
+	0x96c2, 0x0004, 0x0600, 0x2009, 0x0004, 0x000e, 0x007e, 0x0804,
+	0x4af3, 0x97c6, 0x7200, 0x11b8, 0x96c2, 0x0054, 0x02a0, 0x000e,
+	0x007e, 0x2061, 0x18b8, 0x2c44, 0xa076, 0xa772, 0xa07b, 0x002a,
+	0xa28e, 0xa392, 0xa496, 0xa59a, 0x080c, 0x1124, 0x7007, 0x0002,
+	0x701f, 0x5227, 0x0005, 0x000e, 0x007e, 0x0804, 0x35a8, 0x7020,
+	0x2048, 0xa804, 0x2048, 0xa804, 0x2048, 0x8906, 0x8006, 0x8007,
+	0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2098, 0x20a0,
+	0x27e0, 0x27e8, 0x20a9, 0x002a, 0x080c, 0x0fb7, 0x2100, 0x2238,
+	0x2061, 0x18b8, 0x2c44, 0xa28c, 0xa390, 0xa494, 0xa598, 0x2009,
+	0x002a, 0x0804, 0x4af3, 0x81ff, 0x1904, 0x35a5, 0x798c, 0x2001,
+	0x197e, 0x918c, 0x8000, 0x2102, 0x080c, 0x4abe, 0x0904, 0x35a8,
+	0x080c, 0x6a6b, 0x0120, 0x080c, 0x6a73, 0x1904, 0x35a8, 0x080c,
+	0x66ec, 0x0904, 0x35a5, 0x0126, 0x2091, 0x8000, 0x080c, 0x6881,
+	0x012e, 0x0904, 0x35a5, 0x2001, 0x197e, 0x2004, 0xd0fc, 0x1904,
+	0x3573, 0x0804, 0x4548, 0xa9a0, 0x2001, 0x197e, 0x918c, 0x8000,
+	0xc18d, 0x2102, 0x080c, 0x4acb, 0x01a0, 0x080c, 0x6a6b, 0x0118,
+	0x080c, 0x6a73, 0x1170, 0x080c, 0x66ec, 0x2009, 0x0002, 0x0128,
+	0x080c, 0x6881, 0x1170, 0x2009, 0x0003, 0xa897, 0x4005, 0xa99a,
 	0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030,
-	0x00ce, 0x0005, 0x9006, 0x0ce0, 0x7aa8, 0xd2dc, 0x0904, 0x359e,
-	0x0016, 0x7984, 0x9284, 0x1000, 0xc0fd, 0x080c, 0x568b, 0x001e,
-	0x1904, 0x359e, 0x0804, 0x356c, 0x00f6, 0x2d78, 0x0011, 0x00fe,
-	0x0005, 0xaab0, 0xd2dc, 0x0150, 0x0016, 0xa998, 0x9284, 0x1000,
-	0xc0fd, 0x080c, 0x568b, 0x001e, 0x9085, 0x0001, 0x0005, 0x81ff,
-	0x0120, 0x2009, 0x0001, 0x0804, 0x359e, 0x080c, 0x56e7, 0x0120,
-	0x2009, 0x0007, 0x0804, 0x359e, 0x7984, 0x7ea8, 0x96b4, 0x00ff,
-	0x080c, 0x661e, 0x1904, 0x35a1, 0x9186, 0x007f, 0x0138, 0x080c,
-	0x6a5b, 0x0120, 0x2009, 0x0009, 0x0804, 0x359e, 0x080c, 0x4aa0,
-	0x1120, 0x2009, 0x0002, 0x0804, 0x359e, 0xa867, 0x0000, 0xa868,
-	0xc0fd, 0xa86a, 0x2001, 0x0100, 0x8007, 0xa80a, 0x080c, 0xc9fd,
-	0x1120, 0x2009, 0x0003, 0x0804, 0x359e, 0x7007, 0x0003, 0x701f,
-	0x54c2, 0x0005, 0xa808, 0x8007, 0x9086, 0x0100, 0x1120, 0x2009,
-	0x0004, 0x0804, 0x359e, 0xa8e0, 0xa866, 0xa810, 0x8007, 0x9084,
-	0x00ff, 0x800c, 0xa814, 0x8007, 0x9084, 0x00ff, 0x8004, 0x9080,
-	0x0002, 0x9108, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084,
-	0xffc0, 0x9080, 0x0004, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804,
-	0x4aec, 0x080c, 0x4aa0, 0x1120, 0x2009, 0x0002, 0x0804, 0x359e,
-	0x7984, 0x9194, 0xff00, 0x918c, 0x00ff, 0x8217, 0x82ff, 0x1118,
-	0x7023, 0x19b3, 0x0040, 0x92c6, 0x0001, 0x1118, 0x7023, 0x19cd,
-	0x0010, 0x0804, 0x35a1, 0x2009, 0x001a, 0x7a8c, 0x7b88, 0x7c9c,
-	0x7d98, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, 0x4ae9, 0x701f,
-	0x5512, 0x0005, 0x2001, 0x182e, 0x2003, 0x0001, 0xa85c, 0x9080,
-	0x0019, 0x2098, 0xa860, 0x20e0, 0x20a9, 0x001a, 0x7020, 0x20a0,
-	0x20e9, 0x0001, 0x4003, 0x0804, 0x356c, 0x080c, 0x4aa0, 0x1120,
-	0x2009, 0x0002, 0x0804, 0x359e, 0x7984, 0x9194, 0xff00, 0x918c,
-	0x00ff, 0x8217, 0x82ff, 0x1118, 0x2099, 0x19b3, 0x0040, 0x92c6,
-	0x0001, 0x1118, 0x2099, 0x19cd, 0x0010, 0x0804, 0x35a1, 0xa85c,
-	0x9080, 0x0019, 0x20a0, 0xa860, 0x20e8, 0x20a9, 0x001a, 0x20e1,
-	0x0001, 0x4003, 0x2009, 0x001a, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98,
-	0xa85c, 0x9080, 0x0019, 0xaf60, 0x0804, 0x4aec, 0x7884, 0x908a,
-	0x1000, 0x1a04, 0x35a1, 0x0126, 0x2091, 0x8000, 0x8003, 0x800b,
-	0x810b, 0x9108, 0x00c6, 0x2061, 0x1a03, 0x6142, 0x00ce, 0x012e,
-	0x0804, 0x356c, 0x00c6, 0x080c, 0x74d5, 0x1160, 0x080c, 0x77d9,
-	0x080c, 0x6022, 0x9085, 0x0001, 0x080c, 0x751c, 0x080c, 0x7406,
-	0x080c, 0x0d7d, 0x2061, 0x1800, 0x6030, 0xc09d, 0x6032, 0x080c,
-	0x5edd, 0x00ce, 0x0005, 0x00c6, 0x2001, 0x1800, 0x2004, 0x908e,
-	0x0000, 0x0904, 0x359e, 0x7884, 0x9005, 0x0188, 0x7888, 0x2061,
-	0x199c, 0x2c0c, 0x2062, 0x080c, 0x29d8, 0x01a0, 0x080c, 0x29e0,
-	0x0188, 0x080c, 0x29e8, 0x0170, 0x2162, 0x0804, 0x35a1, 0x2061,
-	0x0100, 0x6038, 0x9086, 0x0007, 0x1118, 0x2009, 0x0001, 0x0010,
-	0x2009, 0x0000, 0x7884, 0x9086, 0x0002, 0x1588, 0x2061, 0x0100,
-	0x6028, 0xc09c, 0x602a, 0x080c, 0xa872, 0x0026, 0x2011, 0x0003,
-	0x080c, 0xa1ab, 0x2011, 0x0002, 0x080c, 0xa1b5, 0x002e, 0x080c,
-	0xa074, 0x0036, 0x901e, 0x080c, 0xa0f4, 0x003e, 0x080c, 0xa88e,
-	0x60e3, 0x0000, 0x080c, 0xe6d7, 0x080c, 0xe6f2, 0x9085, 0x0001,
-	0x080c, 0x751c, 0x9006, 0x080c, 0x2a0a, 0x2001, 0x1800, 0x2003,
-	0x0004, 0x0026, 0x2011, 0x0008, 0x080c, 0x2a44, 0x002e, 0x00ce,
-	0x0804, 0x356c, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x359e,
-	0x080c, 0x56e7, 0x0120, 0x2009, 0x0007, 0x0804, 0x359e, 0x7984,
-	0x7ea8, 0x96b4, 0x00ff, 0x080c, 0x661e, 0x1904, 0x35a1, 0x9186,
-	0x007f, 0x0138, 0x080c, 0x6a5b, 0x0120, 0x2009, 0x0009, 0x0804,
-	0x359e, 0x080c, 0x4aa0, 0x1120, 0x2009, 0x0002, 0x0804, 0x359e,
-	0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xca00, 0x1120,
-	0x2009, 0x0003, 0x0804, 0x359e, 0x7007, 0x0003, 0x701f, 0x5619,
-	0x0005, 0xa830, 0x9086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804,
-	0x359e, 0xa8e0, 0xa866, 0xa834, 0x8007, 0x800c, 0xa85c, 0x9080,
-	0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xaf60, 0x0804, 0x4aec,
-	0xa898, 0x9086, 0x000d, 0x1904, 0x359e, 0x2021, 0x4005, 0x0126,
-	0x2091, 0x8000, 0x0e04, 0x563d, 0x0010, 0x012e, 0x0cc0, 0x7c36,
-	0x9486, 0x4000, 0x0118, 0x7833, 0x0011, 0x0010, 0x7833, 0x0010,
-	0x7883, 0x4005, 0xa998, 0x7986, 0xa9a4, 0x799a, 0xa9a8, 0x799e,
-	0x080c, 0x4adc, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,
-	0x190c, 0x11d6, 0x7007, 0x0001, 0x2091, 0x5000, 0x700f, 0x0000,
-	0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x00c6, 0x2061, 0x1a03,
-	0x7984, 0x6152, 0x614e, 0x6057, 0x0000, 0x604b, 0x0009, 0x7898,
-	0x606a, 0x789c, 0x6066, 0x7888, 0x6062, 0x788c, 0x605e, 0x2001,
-	0x1a11, 0x2044, 0x2001, 0x1a18, 0xa076, 0xa060, 0xa072, 0xa07b,
-	0x0001, 0xa07f, 0x0002, 0xa06b, 0x0000, 0xa09f, 0x0000, 0x00ce,
-	0x012e, 0x0804, 0x356c, 0x0126, 0x2091, 0x8000, 0x00b6, 0x00c6,
-	0x90e4, 0xc000, 0x0128, 0x0006, 0x080c, 0xc861, 0x000e, 0x1198,
-	0xd0e4, 0x0160, 0x9180, 0x1000, 0x2004, 0x905d, 0x0160, 0x080c,
-	0x603c, 0x080c, 0xab33, 0x0110, 0xb817, 0x0000, 0x9006, 0x00ce,
-	0x00be, 0x012e, 0x0005, 0x9085, 0x0001, 0x0cc8, 0x0126, 0x2091,
-	0x8000, 0x0156, 0x2010, 0x900e, 0x20a9, 0x0800, 0x0016, 0x9180,
-	0x1000, 0x2004, 0x9005, 0x0180, 0x9186, 0x007e, 0x0168, 0x9186,
-	0x007f, 0x0150, 0x9186, 0x0080, 0x0138, 0x9186, 0x00ff, 0x0120,
-	0x0026, 0x2200, 0x0801, 0x002e, 0x001e, 0x8108, 0x1f04, 0x56b6,
-	0x015e, 0x012e, 0x0005, 0x2001, 0x1848, 0x2004, 0x0005, 0x2001,
-	0x1867, 0x2004, 0x0005, 0x0006, 0x2001, 0x1810, 0x2004, 0xd0d4,
-	0x000e, 0x0005, 0x2001, 0x180e, 0x2004, 0xd0b4, 0x0005, 0x2001,
-	0x1800, 0x2004, 0x9086, 0x0003, 0x0005, 0x0016, 0x00e6, 0x2071,
-	0x189e, 0x7108, 0x910d, 0x710a, 0x00ee, 0x001e, 0x0005, 0x79a4,
-	0x9182, 0x0081, 0x1a04, 0x35a1, 0x810c, 0x0016, 0x080c, 0x4aa0,
-	0x080c, 0x0f42, 0x2100, 0x2238, 0x7d84, 0x7c88, 0x7b8c, 0x7a90,
-	0x001e, 0x080c, 0x4ae9, 0x701f, 0x570e, 0x0005, 0x2079, 0x0000,
-	0x7d94, 0x7c98, 0x7ba8, 0x7aac, 0x79a4, 0x810c, 0x2061, 0x18b8,
-	0x2c44, 0xa770, 0xa074, 0x2071, 0x189e, 0x080c, 0x4aec, 0x701f,
-	0x5722, 0x0005, 0x2061, 0x18b8, 0x2c44, 0x0016, 0x0026, 0xa270,
-	0xa174, 0x080c, 0x0f4a, 0x002e, 0x001e, 0x080c, 0x0ff7, 0x9006,
-	0xa802, 0xa806, 0x0804, 0x356c, 0x0126, 0x0156, 0x0136, 0x0146,
-	0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2061, 0x0100,
-	0x2069, 0x0200, 0x2071, 0x1800, 0x6044, 0xd0a4, 0x11e8, 0xd084,
-	0x0118, 0x080c, 0x58dd, 0x0068, 0xd08c, 0x0118, 0x080c, 0x57e6,
-	0x0040, 0xd094, 0x0118, 0x080c, 0x57b6, 0x0018, 0xd09c, 0x0108,
-	0x0099, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e,
-	0x013e, 0x015e, 0x012e, 0x0005, 0x0016, 0x6128, 0xd19c, 0x1110,
-	0xc19d, 0x612a, 0x001e, 0x0c68, 0x0006, 0x7098, 0x9005, 0x000e,
-	0x0120, 0x709b, 0x0000, 0x7093, 0x0000, 0x624c, 0x9286, 0xf0f0,
-	0x1150, 0x6048, 0x9086, 0xf0f0, 0x0130, 0x624a, 0x6043, 0x0090,
-	0x6043, 0x0010, 0x0490, 0x9294, 0xff00, 0x9296, 0xf700, 0x0178,
-	0x7138, 0xd1a4, 0x1160, 0x6240, 0x9295, 0x0100, 0x6242, 0x9294,
-	0x0010, 0x0128, 0x2009, 0x00f7, 0x080c, 0x5f9e, 0x00f0, 0x6040,
-	0x9084, 0x0010, 0x9085, 0x0140, 0x6042, 0x6043, 0x0000, 0x7087,
-	0x0000, 0x70a3, 0x0001, 0x70c7, 0x0000, 0x70df, 0x0000, 0x2009,
-	0x1d80, 0x200b, 0x0000, 0x7097, 0x0000, 0x708b, 0x000f, 0x2009,
-	0x000f, 0x2011, 0x5e80, 0x080c, 0x86d7, 0x0005, 0x2001, 0x1869,
-	0x2004, 0xd08c, 0x0110, 0x705f, 0xffff, 0x7088, 0x9005, 0x1528,
-	0x2011, 0x5e80, 0x080c, 0x860d, 0x6040, 0x9094, 0x0010, 0x9285,
-	0x0020, 0x6042, 0x20a9, 0x00c8, 0x6044, 0xd08c, 0x1168, 0x1f04,
-	0x57cc, 0x6242, 0x709b, 0x0000, 0x6040, 0x9094, 0x0010, 0x9285,
-	0x0080, 0x6042, 0x6242, 0x0048, 0x6242, 0x709b, 0x0000, 0x708f,
-	0x0000, 0x9006, 0x080c, 0x6027, 0x0000, 0x0005, 0x708c, 0x908a,
-	0x0003, 0x1a0c, 0x0d7d, 0x000b, 0x0005, 0x57f0, 0x5841, 0x58dc,
-	0x00f6, 0x0016, 0x6900, 0x918c, 0x0800, 0x708f, 0x0001, 0x2001,
-	0x015d, 0x2003, 0x0000, 0x6803, 0x00fc, 0x20a9, 0x0004, 0x6800,
-	0x9084, 0x00fc, 0x0120, 0x1f04, 0x57ff, 0x080c, 0x0d7d, 0x68a0,
-	0x68a2, 0x689c, 0x689e, 0x6898, 0x689a, 0xa001, 0x918d, 0x1600,
-	0x6902, 0x001e, 0x6837, 0x0020, 0x080c, 0x6003, 0x2079, 0x1d00,
-	0x7833, 0x1101, 0x7837, 0x0000, 0x20e1, 0x0001, 0x2099, 0x1805,
-	0x20e9, 0x0001, 0x20a1, 0x1d0e, 0x20a9, 0x0004, 0x4003, 0x080c,
-	0xa66c, 0x20e1, 0x0001, 0x2099, 0x1d00, 0x20e9, 0x0000, 0x20a1,
-	0x0240, 0x20a9, 0x0014, 0x4003, 0x60c3, 0x000c, 0x600f, 0x0000,
-	0x080c, 0x5eb1, 0x00fe, 0x9006, 0x7092, 0x6043, 0x0008, 0x6042,
-	0x0005, 0x00f6, 0x7090, 0x7093, 0x0000, 0x9025, 0x0904, 0x58b9,
-	0x6020, 0xd0b4, 0x1904, 0x58b7, 0x71a0, 0x81ff, 0x0904, 0x58a5,
-	0x9486, 0x000c, 0x1904, 0x58b2, 0x9480, 0x0018, 0x8004, 0x20a8,
-	0x080c, 0x5ffc, 0x2011, 0x0260, 0x2019, 0x1d00, 0x220c, 0x2304,
-	0x9106, 0x11e8, 0x8210, 0x8318, 0x1f04, 0x585e, 0x6043, 0x0004,
-	0x2061, 0x0140, 0x605b, 0xbc94, 0x605f, 0xf0f0, 0x2061, 0x0100,
-	0x6043, 0x0006, 0x708f, 0x0002, 0x709b, 0x0002, 0x2009, 0x07d0,
-	0x2011, 0x5e87, 0x080c, 0x86d7, 0x080c, 0x6003, 0x04c0, 0x080c,
-	0x5ffc, 0x2079, 0x0260, 0x7930, 0x918e, 0x1101, 0x1558, 0x7834,
-	0x9005, 0x1540, 0x7900, 0x918c, 0x00ff, 0x1118, 0x7804, 0x9005,
-	0x0190, 0x080c, 0x5ffc, 0x2011, 0x026e, 0x2019, 0x1805, 0x20a9,
-	0x0004, 0x220c, 0x2304, 0x9102, 0x0230, 0x11a0, 0x8210, 0x8318,
-	0x1f04, 0x5899, 0x0078, 0x70a3, 0x0000, 0x080c, 0x5ffc, 0x20e1,
-	0x0000, 0x2099, 0x0260, 0x20e9, 0x0001, 0x20a1, 0x1d00, 0x20a9,
-	0x0014, 0x4003, 0x6043, 0x0008, 0x6043, 0x0000, 0x0010, 0x00fe,
-	0x0005, 0x6040, 0x9085, 0x0100, 0x6042, 0x6020, 0xd0b4, 0x1db8,
-	0x080c, 0xa66c, 0x20e1, 0x0001, 0x2099, 0x1d00, 0x20e9, 0x0000,
-	0x20a1, 0x0240, 0x20a9, 0x0014, 0x4003, 0x60c3, 0x000c, 0x2011,
-	0x19f4, 0x2013, 0x0000, 0x7093, 0x0000, 0x60a3, 0x0056, 0x60a7,
-	0x9575, 0x080c, 0x9e01, 0x08d8, 0x0005, 0x7098, 0x908a, 0x001d,
-	0x1a0c, 0x0d7d, 0x000b, 0x0005, 0x590e, 0x5921, 0x594a, 0x596a,
-	0x5990, 0x59bf, 0x59e5, 0x5a1d, 0x5a43, 0x5a71, 0x5aac, 0x5ae4,
-	0x5b02, 0x5b2d, 0x5b4f, 0x5b6a, 0x5b74, 0x5ba8, 0x5bce, 0x5bfd,
-	0x5c23, 0x5c5b, 0x5c9f, 0x5cdc, 0x5cfd, 0x5d56, 0x5d78, 0x5da6,
-	0x5da6, 0x00c6, 0x2061, 0x1800, 0x6003, 0x0007, 0x2061, 0x0100,
-	0x6004, 0x9084, 0xfff9, 0x6006, 0x00ce, 0x0005, 0x2061, 0x0140,
-	0x605b, 0xbc94, 0x605f, 0xf0f0, 0x2061, 0x0100, 0x6043, 0x0002,
-	0x709b, 0x0001, 0x2009, 0x07d0, 0x2011, 0x5e87, 0x080c, 0x86d7,
-	0x0005, 0x00f6, 0x7090, 0x9086, 0x0014, 0x1510, 0x6042, 0x6020,
-	0xd0b4, 0x11f0, 0x080c, 0x5ffc, 0x2079, 0x0260, 0x7a30, 0x9296,
-	0x1102, 0x11a0, 0x7834, 0x9005, 0x1188, 0x7a38, 0xd2fc, 0x0128,
-	0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x2011, 0x5e87, 0x080c,
-	0x860d, 0x709b, 0x0010, 0x080c, 0x5b74, 0x0010, 0x7093, 0x0000,
-	0x00fe, 0x0005, 0x00f6, 0x709b, 0x0003, 0x6043, 0x0004, 0x2011,
-	0x5e87, 0x080c, 0x860d, 0x080c, 0x5f80, 0x2079, 0x0240, 0x7833,
-	0x1102, 0x7837, 0x0000, 0x20a9, 0x0008, 0x9f88, 0x000e, 0x200b,
-	0x0000, 0x8108, 0x1f04, 0x595f, 0x60c3, 0x0014, 0x080c, 0x5eb1,
-	0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x0500, 0x2011, 0x5e87,
-	0x080c, 0x860d, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5ffc, 0x2079,
-	0x0260, 0x7a30, 0x9296, 0x1102, 0x1178, 0x7834, 0x9005, 0x1160,
-	0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001,
-	0x709b, 0x0004, 0x0029, 0x0010, 0x080c, 0x5fd8, 0x00fe, 0x0005,
-	0x00f6, 0x709b, 0x0005, 0x080c, 0x5f80, 0x2079, 0x0240, 0x7833,
-	0x1103, 0x7837, 0x0000, 0x080c, 0x5ffc, 0x080c, 0x5fdf, 0x1170,
-	0x7084, 0x9005, 0x1158, 0x715c, 0x9186, 0xffff, 0x0138, 0x2011,
-	0x0008, 0x080c, 0x5e34, 0x0168, 0x080c, 0x5fb5, 0x20a9, 0x0008,
-	0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e,
-	0x4003, 0x60c3, 0x0014, 0x080c, 0x5eb1, 0x00fe, 0x0005, 0x00f6,
-	0x7090, 0x9005, 0x0500, 0x2011, 0x5e87, 0x080c, 0x860d, 0x9086,
-	0x0014, 0x11b8, 0x080c, 0x5ffc, 0x2079, 0x0260, 0x7a30, 0x9296,
-	0x1103, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128,
-	0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x709b, 0x0006, 0x0029,
-	0x0010, 0x080c, 0x5fd8, 0x00fe, 0x0005, 0x00f6, 0x709b, 0x0007,
-	0x080c, 0x5f80, 0x2079, 0x0240, 0x7833, 0x1104, 0x7837, 0x0000,
-	0x080c, 0x5ffc, 0x080c, 0x5fdf, 0x11b8, 0x7084, 0x9005, 0x11a0,
-	0x7164, 0x9186, 0xffff, 0x0180, 0x9180, 0x336d, 0x200d, 0x918c,
-	0xff00, 0x810f, 0x2011, 0x0008, 0x080c, 0x5e34, 0x0180, 0x080c,
-	0x4fdd, 0x0110, 0x080c, 0x2664, 0x20a9, 0x0008, 0x20e1, 0x0000,
-	0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3,
-	0x0014, 0x080c, 0x5eb1, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005,
-	0x0500, 0x2011, 0x5e87, 0x080c, 0x860d, 0x9086, 0x0014, 0x11b8,
-	0x080c, 0x5ffc, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1104, 0x1178,
-	0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005,
-	0x1110, 0x70c7, 0x0001, 0x709b, 0x0008, 0x0029, 0x0010, 0x080c,
-	0x5fd8, 0x00fe, 0x0005, 0x00f6, 0x709b, 0x0009, 0x080c, 0x5f80,
-	0x2079, 0x0240, 0x7833, 0x1105, 0x7837, 0x0100, 0x080c, 0x5fdf,
-	0x1150, 0x7084, 0x9005, 0x1138, 0x080c, 0x5da7, 0x1188, 0x9085,
-	0x0001, 0x080c, 0x2664, 0x20a9, 0x0008, 0x080c, 0x5ffc, 0x20e1,
+	0x0005, 0xa897, 0x4000, 0x2001, 0x197e, 0x2004, 0xd0fc, 0x1128,
+	0x080c, 0x56e2, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085, 0x0001,
+	0x2001, 0x0000, 0x0005, 0x78a8, 0xd08c, 0x1118, 0xd084, 0x0904,
+	0x44bd, 0x080c, 0x4ada, 0x0904, 0x35a8, 0x080c, 0x4aa7, 0x1120,
+	0x2009, 0x0002, 0x0804, 0x35a5, 0x080c, 0x6a6b, 0x0130, 0x908e,
+	0x0004, 0x0118, 0x908e, 0x0005, 0x15a0, 0x78a8, 0xd08c, 0x0120,
+	0xb800, 0xc08c, 0xb802, 0x0028, 0x080c, 0x56da, 0xd0b4, 0x0904,
+	0x44f7, 0x7884, 0x908e, 0x007e, 0x0904, 0x44f7, 0x908e, 0x007f,
+	0x0904, 0x44f7, 0x908e, 0x0080, 0x0904, 0x44f7, 0xb800, 0xd08c,
+	0x1904, 0x44f7, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x080c,
+	0xca07, 0x1120, 0x2009, 0x0003, 0x0804, 0x35a5, 0x7007, 0x0003,
+	0x701f, 0x52f3, 0x0005, 0x080c, 0x4ada, 0x0904, 0x35a8, 0x0804,
+	0x44f7, 0x080c, 0x3363, 0x0108, 0x0005, 0x2009, 0x1834, 0x210c,
+	0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x35a5, 0x080c, 0x56ee,
+	0x0120, 0x2009, 0x0007, 0x0804, 0x35a5, 0x080c, 0x6a63, 0x0120,
+	0x2009, 0x0008, 0x0804, 0x35a5, 0xb89c, 0xd0a4, 0x1118, 0xd0ac,
+	0x1904, 0x44f7, 0x9006, 0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a,
+	0x080c, 0xca6a, 0x1120, 0x2009, 0x0003, 0x0804, 0x35a5, 0x7007,
+	0x0003, 0x701f, 0x532c, 0x0005, 0xa830, 0x9086, 0x0100, 0x1120,
+	0x2009, 0x0004, 0x0804, 0x5637, 0x080c, 0x4ada, 0x0904, 0x35a8,
+	0x0804, 0x52c5, 0x81ff, 0x2009, 0x0001, 0x1904, 0x35a5, 0x080c,
+	0x56ee, 0x2009, 0x0007, 0x1904, 0x35a5, 0x080c, 0x6a63, 0x0120,
+	0x2009, 0x0008, 0x0804, 0x35a5, 0x080c, 0x4ada, 0x0904, 0x35a8,
+	0x080c, 0x6a6b, 0x2009, 0x0009, 0x1904, 0x35a5, 0x080c, 0x4aa7,
+	0x2009, 0x0002, 0x0904, 0x35a5, 0x9006, 0xa866, 0xa832, 0xa868,
+	0xc0fd, 0xa86a, 0x7988, 0x9194, 0xff00, 0x918c, 0x00ff, 0x9006,
+	0x82ff, 0x1128, 0xc0ed, 0xa952, 0x798c, 0xa956, 0x0038, 0x928e,
+	0x0100, 0x1904, 0x35a8, 0xc0e5, 0xa952, 0xa956, 0xa83e, 0x080c,
+	0xcccd, 0x2009, 0x0003, 0x0904, 0x35a5, 0x7007, 0x0003, 0x701f,
+	0x5382, 0x0005, 0xa830, 0x9086, 0x0100, 0x2009, 0x0004, 0x0904,
+	0x35a5, 0x0804, 0x3573, 0x7aa8, 0x9284, 0xc000, 0x0148, 0xd2ec,
+	0x01a0, 0x080c, 0x56ee, 0x1188, 0x2009, 0x0014, 0x0804, 0x35a5,
+	0xd2dc, 0x1568, 0x81ff, 0x2009, 0x0001, 0x1904, 0x35a5, 0x080c,
+	0x56ee, 0x2009, 0x0007, 0x1904, 0x35a5, 0xd2f4, 0x0130, 0x9284,
+	0x5000, 0x080c, 0x56b5, 0x0804, 0x3573, 0xd2fc, 0x0158, 0x080c,
+	0x4ada, 0x0904, 0x35a8, 0x7984, 0x9284, 0x9000, 0x080c, 0x5692,
+	0x0804, 0x3573, 0x080c, 0x4ada, 0x0904, 0x35a8, 0xb804, 0x9084,
+	0x00ff, 0x9086, 0x0006, 0x2009, 0x0009, 0x1904, 0x546b, 0x080c,
+	0x4aa7, 0x2009, 0x0002, 0x0904, 0x546b, 0xa85c, 0x9080, 0x001b,
+	0xaf60, 0x2009, 0x0008, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x080c,
+	0x4af0, 0x701f, 0x53dc, 0x0005, 0xa86c, 0x9086, 0x0500, 0x1138,
+	0xa870, 0x9005, 0x1120, 0xa874, 0x9084, 0xff00, 0x0110, 0x1904,
+	0x35a8, 0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0x4ada,
+	0x1110, 0x0804, 0x35a8, 0x2009, 0x0043, 0x080c, 0xcd35, 0x2009,
+	0x0003, 0x0904, 0x546b, 0x7007, 0x0003, 0x701f, 0x5400, 0x0005,
+	0xa830, 0x9086, 0x0100, 0x2009, 0x0004, 0x0904, 0x546b, 0x7984,
+	0x7aa8, 0x9284, 0x1000, 0x080c, 0x5692, 0x0804, 0x3573, 0x00c6,
+	0xaab0, 0x9284, 0xc000, 0x0140, 0xd2ec, 0x0168, 0x080c, 0x56ee,
+	0x1150, 0x2009, 0x0014, 0x04f0, 0x2061, 0x1800, 0x080c, 0x56ee,
+	0x2009, 0x0007, 0x15b8, 0xd2f4, 0x0128, 0x9284, 0x5000, 0x080c,
+	0x56b5, 0x0050, 0xd2fc, 0x0178, 0x080c, 0x4ad8, 0x0588, 0xa998,
+	0x9284, 0x9000, 0x080c, 0x5692, 0xa87b, 0x0000, 0xa883, 0x0000,
+	0xa897, 0x4000, 0x0438, 0x080c, 0x4ad8, 0x0510, 0x080c, 0x6a6b,
+	0x2009, 0x0009, 0x11b8, 0xa8c4, 0x9086, 0x0500, 0x11c8, 0xa8c8,
+	0x9005, 0x11b0, 0xa8cc, 0x9084, 0xff00, 0x1190, 0x080c, 0x4ad8,
+	0x1108, 0x0070, 0x2009, 0x004b, 0x080c, 0xcd35, 0x2009, 0x0003,
+	0x0108, 0x0078, 0x0429, 0x19c0, 0xa897, 0x4005, 0xa99a, 0x0010,
+	0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x00ce,
+	0x0005, 0x9006, 0x0ce0, 0x7aa8, 0xd2dc, 0x0904, 0x35a5, 0x0016,
+	0x7984, 0x9284, 0x1000, 0xc0fd, 0x080c, 0x5692, 0x001e, 0x1904,
+	0x35a5, 0x0804, 0x3573, 0x00f6, 0x2d78, 0x0011, 0x00fe, 0x0005,
+	0xaab0, 0xd2dc, 0x0150, 0x0016, 0xa998, 0x9284, 0x1000, 0xc0fd,
+	0x080c, 0x5692, 0x001e, 0x9085, 0x0001, 0x0005, 0x81ff, 0x0120,
+	0x2009, 0x0001, 0x0804, 0x35a5, 0x080c, 0x56ee, 0x0120, 0x2009,
+	0x0007, 0x0804, 0x35a5, 0x7984, 0x7ea8, 0x96b4, 0x00ff, 0x080c,
+	0x6625, 0x1904, 0x35a8, 0x9186, 0x007f, 0x0138, 0x080c, 0x6a6b,
+	0x0120, 0x2009, 0x0009, 0x0804, 0x35a5, 0x080c, 0x4aa7, 0x1120,
+	0x2009, 0x0002, 0x0804, 0x35a5, 0xa867, 0x0000, 0xa868, 0xc0fd,
+	0xa86a, 0x2001, 0x0100, 0x8007, 0xa80a, 0x080c, 0xca21, 0x1120,
+	0x2009, 0x0003, 0x0804, 0x35a5, 0x7007, 0x0003, 0x701f, 0x54c9,
+	0x0005, 0xa808, 0x8007, 0x9086, 0x0100, 0x1120, 0x2009, 0x0004,
+	0x0804, 0x35a5, 0xa8e0, 0xa866, 0xa810, 0x8007, 0x9084, 0x00ff,
+	0x800c, 0xa814, 0x8007, 0x9084, 0x00ff, 0x8004, 0x9080, 0x0002,
+	0x9108, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0,
+	0x9080, 0x0004, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x4af3,
+	0x080c, 0x4aa7, 0x1120, 0x2009, 0x0002, 0x0804, 0x35a5, 0x7984,
+	0x9194, 0xff00, 0x918c, 0x00ff, 0x8217, 0x82ff, 0x1118, 0x7023,
+	0x19b3, 0x0040, 0x92c6, 0x0001, 0x1118, 0x7023, 0x19cd, 0x0010,
+	0x0804, 0x35a8, 0x2009, 0x001a, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98,
+	0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, 0x4af0, 0x701f, 0x5519,
+	0x0005, 0x2001, 0x182e, 0x2003, 0x0001, 0xa85c, 0x9080, 0x0019,
+	0x2098, 0xa860, 0x20e0, 0x20a9, 0x001a, 0x7020, 0x20a0, 0x20e9,
+	0x0001, 0x4003, 0x0804, 0x3573, 0x080c, 0x4aa7, 0x1120, 0x2009,
+	0x0002, 0x0804, 0x35a5, 0x7984, 0x9194, 0xff00, 0x918c, 0x00ff,
+	0x8217, 0x82ff, 0x1118, 0x2099, 0x19b3, 0x0040, 0x92c6, 0x0001,
+	0x1118, 0x2099, 0x19cd, 0x0010, 0x0804, 0x35a8, 0xa85c, 0x9080,
+	0x0019, 0x20a0, 0xa860, 0x20e8, 0x20a9, 0x001a, 0x20e1, 0x0001,
+	0x4003, 0x2009, 0x001a, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c,
+	0x9080, 0x0019, 0xaf60, 0x0804, 0x4af3, 0x7884, 0x908a, 0x1000,
+	0x1a04, 0x35a8, 0x0126, 0x2091, 0x8000, 0x8003, 0x800b, 0x810b,
+	0x9108, 0x00c6, 0x2061, 0x1a03, 0x6142, 0x00ce, 0x012e, 0x0804,
+	0x3573, 0x00c6, 0x080c, 0x74e9, 0x1160, 0x080c, 0x77ed, 0x080c,
+	0x6029, 0x9085, 0x0001, 0x080c, 0x7530, 0x080c, 0x741a, 0x080c,
+	0x0d7d, 0x2061, 0x1800, 0x6030, 0xc09d, 0x6032, 0x080c, 0x5ee4,
+	0x00ce, 0x0005, 0x00c6, 0x2001, 0x1800, 0x2004, 0x908e, 0x0000,
+	0x0904, 0x35a5, 0x7884, 0x9005, 0x0188, 0x7888, 0x2061, 0x199c,
+	0x2c0c, 0x2062, 0x080c, 0x29d8, 0x01a0, 0x080c, 0x29e0, 0x0188,
+	0x080c, 0x29e8, 0x0170, 0x2162, 0x0804, 0x35a8, 0x2061, 0x0100,
+	0x6038, 0x9086, 0x0007, 0x1118, 0x2009, 0x0001, 0x0010, 0x2009,
+	0x0000, 0x7884, 0x9086, 0x0002, 0x1588, 0x2061, 0x0100, 0x6028,
+	0xc09c, 0x602a, 0x080c, 0xa896, 0x0026, 0x2011, 0x0003, 0x080c,
+	0xa1cf, 0x2011, 0x0002, 0x080c, 0xa1d9, 0x002e, 0x080c, 0xa098,
+	0x0036, 0x901e, 0x080c, 0xa118, 0x003e, 0x080c, 0xa8b2, 0x60e3,
+	0x0000, 0x080c, 0xe702, 0x080c, 0xe71d, 0x9085, 0x0001, 0x080c,
+	0x7530, 0x9006, 0x080c, 0x2a0a, 0x2001, 0x1800, 0x2003, 0x0004,
+	0x0026, 0x2011, 0x0008, 0x080c, 0x2a44, 0x002e, 0x00ce, 0x0804,
+	0x3573, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x35a5, 0x080c,
+	0x56ee, 0x0120, 0x2009, 0x0007, 0x0804, 0x35a5, 0x7984, 0x7ea8,
+	0x96b4, 0x00ff, 0x080c, 0x6625, 0x1904, 0x35a8, 0x9186, 0x007f,
+	0x0138, 0x080c, 0x6a6b, 0x0120, 0x2009, 0x0009, 0x0804, 0x35a5,
+	0x080c, 0x4aa7, 0x1120, 0x2009, 0x0002, 0x0804, 0x35a5, 0xa867,
+	0x0000, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xca24, 0x1120, 0x2009,
+	0x0003, 0x0804, 0x35a5, 0x7007, 0x0003, 0x701f, 0x5620, 0x0005,
+	0xa830, 0x9086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x35a5,
+	0xa8e0, 0xa866, 0xa834, 0x8007, 0x800c, 0xa85c, 0x9080, 0x000c,
+	0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xaf60, 0x0804, 0x4af3, 0xa898,
+	0x9086, 0x000d, 0x1904, 0x35a5, 0x2021, 0x4005, 0x0126, 0x2091,
+	0x8000, 0x0e04, 0x5644, 0x0010, 0x012e, 0x0cc0, 0x7c36, 0x9486,
+	0x4000, 0x0118, 0x7833, 0x0011, 0x0010, 0x7833, 0x0010, 0x7883,
+	0x4005, 0xa998, 0x7986, 0xa9a4, 0x799a, 0xa9a8, 0x799e, 0x080c,
+	0x4ae3, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
+	0x11d6, 0x7007, 0x0001, 0x2091, 0x5000, 0x700f, 0x0000, 0x012e,
+	0x0005, 0x0126, 0x2091, 0x8000, 0x00c6, 0x2061, 0x1a03, 0x7984,
+	0x6152, 0x614e, 0x6057, 0x0000, 0x604b, 0x0009, 0x7898, 0x606a,
+	0x789c, 0x6066, 0x7888, 0x6062, 0x788c, 0x605e, 0x2001, 0x1a11,
+	0x2044, 0x2001, 0x1a18, 0xa076, 0xa060, 0xa072, 0xa07b, 0x0001,
+	0xa07f, 0x0002, 0xa06b, 0x0000, 0xa09f, 0x0000, 0x00ce, 0x012e,
+	0x0804, 0x3573, 0x0126, 0x2091, 0x8000, 0x00b6, 0x00c6, 0x90e4,
+	0xc000, 0x0128, 0x0006, 0x080c, 0xc885, 0x000e, 0x1198, 0xd0e4,
+	0x0160, 0x9180, 0x1000, 0x2004, 0x905d, 0x0160, 0x080c, 0x6043,
+	0x080c, 0xab57, 0x0110, 0xb817, 0x0000, 0x9006, 0x00ce, 0x00be,
+	0x012e, 0x0005, 0x9085, 0x0001, 0x0cc8, 0x0126, 0x2091, 0x8000,
+	0x0156, 0x2010, 0x900e, 0x20a9, 0x0800, 0x0016, 0x9180, 0x1000,
+	0x2004, 0x9005, 0x0180, 0x9186, 0x007e, 0x0168, 0x9186, 0x007f,
+	0x0150, 0x9186, 0x0080, 0x0138, 0x9186, 0x00ff, 0x0120, 0x0026,
+	0x2200, 0x0801, 0x002e, 0x001e, 0x8108, 0x1f04, 0x56bd, 0x015e,
+	0x012e, 0x0005, 0x2001, 0x1848, 0x2004, 0x0005, 0x2001, 0x1867,
+	0x2004, 0x0005, 0x0006, 0x2001, 0x1810, 0x2004, 0xd0d4, 0x000e,
+	0x0005, 0x2001, 0x180e, 0x2004, 0xd0b4, 0x0005, 0x2001, 0x1800,
+	0x2004, 0x9086, 0x0003, 0x0005, 0x0016, 0x00e6, 0x2071, 0x189e,
+	0x7108, 0x910d, 0x710a, 0x00ee, 0x001e, 0x0005, 0x79a4, 0x9182,
+	0x0081, 0x1a04, 0x35a8, 0x810c, 0x0016, 0x080c, 0x4aa7, 0x080c,
+	0x0f42, 0x2100, 0x2238, 0x7d84, 0x7c88, 0x7b8c, 0x7a90, 0x001e,
+	0x080c, 0x4af0, 0x701f, 0x5715, 0x0005, 0x2079, 0x0000, 0x7d94,
+	0x7c98, 0x7ba8, 0x7aac, 0x79a4, 0x810c, 0x2061, 0x18b8, 0x2c44,
+	0xa770, 0xa074, 0x2071, 0x189e, 0x080c, 0x4af3, 0x701f, 0x5729,
+	0x0005, 0x2061, 0x18b8, 0x2c44, 0x0016, 0x0026, 0xa270, 0xa174,
+	0x080c, 0x0f4a, 0x002e, 0x001e, 0x080c, 0x0ff7, 0x9006, 0xa802,
+	0xa806, 0x0804, 0x3573, 0x0126, 0x0156, 0x0136, 0x0146, 0x01c6,
+	0x01d6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2061, 0x0100, 0x2069,
+	0x0200, 0x2071, 0x1800, 0x6044, 0xd0a4, 0x11e8, 0xd084, 0x0118,
+	0x080c, 0x58e4, 0x0068, 0xd08c, 0x0118, 0x080c, 0x57ed, 0x0040,
+	0xd094, 0x0118, 0x080c, 0x57bd, 0x0018, 0xd09c, 0x0108, 0x0099,
+	0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e,
+	0x015e, 0x012e, 0x0005, 0x0016, 0x6128, 0xd19c, 0x1110, 0xc19d,
+	0x612a, 0x001e, 0x0c68, 0x0006, 0x7098, 0x9005, 0x000e, 0x0120,
+	0x709b, 0x0000, 0x7093, 0x0000, 0x624c, 0x9286, 0xf0f0, 0x1150,
+	0x6048, 0x9086, 0xf0f0, 0x0130, 0x624a, 0x6043, 0x0090, 0x6043,
+	0x0010, 0x0490, 0x9294, 0xff00, 0x9296, 0xf700, 0x0178, 0x7138,
+	0xd1a4, 0x1160, 0x6240, 0x9295, 0x0100, 0x6242, 0x9294, 0x0010,
+	0x0128, 0x2009, 0x00f7, 0x080c, 0x5fa5, 0x00f0, 0x6040, 0x9084,
+	0x0010, 0x9085, 0x0140, 0x6042, 0x6043, 0x0000, 0x7087, 0x0000,
+	0x70a3, 0x0001, 0x70c7, 0x0000, 0x70df, 0x0000, 0x2009, 0x1d80,
+	0x200b, 0x0000, 0x7097, 0x0000, 0x708b, 0x000f, 0x2009, 0x000f,
+	0x2011, 0x5e87, 0x080c, 0x8708, 0x0005, 0x2001, 0x1869, 0x2004,
+	0xd08c, 0x0110, 0x705f, 0xffff, 0x7088, 0x9005, 0x1528, 0x2011,
+	0x5e87, 0x080c, 0x863e, 0x6040, 0x9094, 0x0010, 0x9285, 0x0020,
+	0x6042, 0x20a9, 0x00c8, 0x6044, 0xd08c, 0x1168, 0x1f04, 0x57d3,
+	0x6242, 0x709b, 0x0000, 0x6040, 0x9094, 0x0010, 0x9285, 0x0080,
+	0x6042, 0x6242, 0x0048, 0x6242, 0x709b, 0x0000, 0x708f, 0x0000,
+	0x9006, 0x080c, 0x602e, 0x0000, 0x0005, 0x708c, 0x908a, 0x0003,
+	0x1a0c, 0x0d7d, 0x000b, 0x0005, 0x57f7, 0x5848, 0x58e3, 0x00f6,
+	0x0016, 0x6900, 0x918c, 0x0800, 0x708f, 0x0001, 0x2001, 0x015d,
+	0x2003, 0x0000, 0x6803, 0x00fc, 0x20a9, 0x0004, 0x6800, 0x9084,
+	0x00fc, 0x0120, 0x1f04, 0x5806, 0x080c, 0x0d7d, 0x68a0, 0x68a2,
+	0x689c, 0x689e, 0x6898, 0x689a, 0xa001, 0x918d, 0x1600, 0x6902,
+	0x001e, 0x6837, 0x0020, 0x080c, 0x600a, 0x2079, 0x1d00, 0x7833,
+	0x1101, 0x7837, 0x0000, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9,
+	0x0001, 0x20a1, 0x1d0e, 0x20a9, 0x0004, 0x4003, 0x080c, 0xa690,
+	0x20e1, 0x0001, 0x2099, 0x1d00, 0x20e9, 0x0000, 0x20a1, 0x0240,
+	0x20a9, 0x0014, 0x4003, 0x60c3, 0x000c, 0x600f, 0x0000, 0x080c,
+	0x5eb8, 0x00fe, 0x9006, 0x7092, 0x6043, 0x0008, 0x6042, 0x0005,
+	0x00f6, 0x7090, 0x7093, 0x0000, 0x9025, 0x0904, 0x58c0, 0x6020,
+	0xd0b4, 0x1904, 0x58be, 0x71a0, 0x81ff, 0x0904, 0x58ac, 0x9486,
+	0x000c, 0x1904, 0x58b9, 0x9480, 0x0018, 0x8004, 0x20a8, 0x080c,
+	0x6003, 0x2011, 0x0260, 0x2019, 0x1d00, 0x220c, 0x2304, 0x9106,
+	0x11e8, 0x8210, 0x8318, 0x1f04, 0x5865, 0x6043, 0x0004, 0x2061,
+	0x0140, 0x605b, 0xbc94, 0x605f, 0xf0f0, 0x2061, 0x0100, 0x6043,
+	0x0006, 0x708f, 0x0002, 0x709b, 0x0002, 0x2009, 0x07d0, 0x2011,
+	0x5e8e, 0x080c, 0x8708, 0x080c, 0x600a, 0x04c0, 0x080c, 0x6003,
+	0x2079, 0x0260, 0x7930, 0x918e, 0x1101, 0x1558, 0x7834, 0x9005,
+	0x1540, 0x7900, 0x918c, 0x00ff, 0x1118, 0x7804, 0x9005, 0x0190,
+	0x080c, 0x6003, 0x2011, 0x026e, 0x2019, 0x1805, 0x20a9, 0x0004,
+	0x220c, 0x2304, 0x9102, 0x0230, 0x11a0, 0x8210, 0x8318, 0x1f04,
+	0x58a0, 0x0078, 0x70a3, 0x0000, 0x080c, 0x6003, 0x20e1, 0x0000,
+	0x2099, 0x0260, 0x20e9, 0x0001, 0x20a1, 0x1d00, 0x20a9, 0x0014,
+	0x4003, 0x6043, 0x0008, 0x6043, 0x0000, 0x0010, 0x00fe, 0x0005,
+	0x6040, 0x9085, 0x0100, 0x6042, 0x6020, 0xd0b4, 0x1db8, 0x080c,
+	0xa690, 0x20e1, 0x0001, 0x2099, 0x1d00, 0x20e9, 0x0000, 0x20a1,
+	0x0240, 0x20a9, 0x0014, 0x4003, 0x60c3, 0x000c, 0x2011, 0x19f4,
+	0x2013, 0x0000, 0x7093, 0x0000, 0x60a3, 0x0056, 0x60a7, 0x9575,
+	0x080c, 0x9e25, 0x08d8, 0x0005, 0x7098, 0x908a, 0x001d, 0x1a0c,
+	0x0d7d, 0x000b, 0x0005, 0x5915, 0x5928, 0x5951, 0x5971, 0x5997,
+	0x59c6, 0x59ec, 0x5a24, 0x5a4a, 0x5a78, 0x5ab3, 0x5aeb, 0x5b09,
+	0x5b34, 0x5b56, 0x5b71, 0x5b7b, 0x5baf, 0x5bd5, 0x5c04, 0x5c2a,
+	0x5c62, 0x5ca6, 0x5ce3, 0x5d04, 0x5d5d, 0x5d7f, 0x5dad, 0x5dad,
+	0x00c6, 0x2061, 0x1800, 0x6003, 0x0007, 0x2061, 0x0100, 0x6004,
+	0x9084, 0xfff9, 0x6006, 0x00ce, 0x0005, 0x2061, 0x0140, 0x605b,
+	0xbc94, 0x605f, 0xf0f0, 0x2061, 0x0100, 0x6043, 0x0002, 0x709b,
+	0x0001, 0x2009, 0x07d0, 0x2011, 0x5e8e, 0x080c, 0x8708, 0x0005,
+	0x00f6, 0x7090, 0x9086, 0x0014, 0x1510, 0x6042, 0x6020, 0xd0b4,
+	0x11f0, 0x080c, 0x6003, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1102,
+	0x11a0, 0x7834, 0x9005, 0x1188, 0x7a38, 0xd2fc, 0x0128, 0x70c4,
+	0x9005, 0x1110, 0x70c7, 0x0001, 0x2011, 0x5e8e, 0x080c, 0x863e,
+	0x709b, 0x0010, 0x080c, 0x5b7b, 0x0010, 0x7093, 0x0000, 0x00fe,
+	0x0005, 0x00f6, 0x709b, 0x0003, 0x6043, 0x0004, 0x2011, 0x5e8e,
+	0x080c, 0x863e, 0x080c, 0x5f87, 0x2079, 0x0240, 0x7833, 0x1102,
+	0x7837, 0x0000, 0x20a9, 0x0008, 0x9f88, 0x000e, 0x200b, 0x0000,
+	0x8108, 0x1f04, 0x5966, 0x60c3, 0x0014, 0x080c, 0x5eb8, 0x00fe,
+	0x0005, 0x00f6, 0x7090, 0x9005, 0x0500, 0x2011, 0x5e8e, 0x080c,
+	0x863e, 0x9086, 0x0014, 0x11b8, 0x080c, 0x6003, 0x2079, 0x0260,
+	0x7a30, 0x9296, 0x1102, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38,
+	0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x709b,
+	0x0004, 0x0029, 0x0010, 0x080c, 0x5fdf, 0x00fe, 0x0005, 0x00f6,
+	0x709b, 0x0005, 0x080c, 0x5f87, 0x2079, 0x0240, 0x7833, 0x1103,
+	0x7837, 0x0000, 0x080c, 0x6003, 0x080c, 0x5fe6, 0x1170, 0x7084,
+	0x9005, 0x1158, 0x715c, 0x9186, 0xffff, 0x0138, 0x2011, 0x0008,
+	0x080c, 0x5e3b, 0x0168, 0x080c, 0x5fbc, 0x20a9, 0x0008, 0x20e1,
 	0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003,
-	0x60c3, 0x0014, 0x080c, 0x5eb1, 0x0010, 0x080c, 0x5901, 0x00fe,
-	0x0005, 0x00f6, 0x7090, 0x9005, 0x05a8, 0x2011, 0x5e87, 0x080c,
-	0x860d, 0x9086, 0x0014, 0x1560, 0x080c, 0x5ffc, 0x2079, 0x0260,
-	0x7a30, 0x9296, 0x1105, 0x1520, 0x7834, 0x9084, 0x0100, 0x2011,
-	0x0100, 0x921e, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005,
-	0x1110, 0x70c7, 0x0001, 0x709b, 0x000a, 0x00b1, 0x0098, 0x9005,
-	0x1178, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7,
-	0x0001, 0x7097, 0x0000, 0x709b, 0x000e, 0x080c, 0x5b4f, 0x0010,
-	0x080c, 0x5fd8, 0x00fe, 0x0005, 0x00f6, 0x709b, 0x000b, 0x2011,
-	0x1d0e, 0x20e9, 0x0001, 0x22a0, 0x20a9, 0x0040, 0x2019, 0xffff,
-	0x4304, 0x080c, 0x5f80, 0x2079, 0x0240, 0x7833, 0x1106, 0x7837,
-	0x0000, 0x080c, 0x5fdf, 0x0118, 0x2013, 0x0000, 0x0020, 0x7060,
-	0x9085, 0x0100, 0x2012, 0x20a9, 0x0040, 0x2009, 0x024e, 0x2011,
-	0x1d0e, 0x220e, 0x8210, 0x8108, 0x9186, 0x0260, 0x1128, 0x6810,
-	0x8000, 0x6812, 0x2009, 0x0240, 0x1f04, 0x5ad1, 0x60c3, 0x0084,
-	0x080c, 0x5eb1, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x01c0,
-	0x2011, 0x5e87, 0x080c, 0x860d, 0x9086, 0x0084, 0x1178, 0x080c,
-	0x5ffc, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1106, 0x1138, 0x7834,
-	0x9005, 0x1120, 0x709b, 0x000c, 0x0029, 0x0010, 0x080c, 0x5fd8,
-	0x00fe, 0x0005, 0x00f6, 0x709b, 0x000d, 0x080c, 0x5f80, 0x2079,
-	0x0240, 0x7833, 0x1107, 0x7837, 0x0000, 0x080c, 0x5ffc, 0x20a9,
-	0x0040, 0x2011, 0x026e, 0x2009, 0x024e, 0x220e, 0x8210, 0x8108,
-	0x9186, 0x0260, 0x1150, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240,
-	0x6814, 0x8000, 0x6816, 0x2011, 0x0260, 0x1f04, 0x5b15, 0x60c3,
-	0x0084, 0x080c, 0x5eb1, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005,
-	0x01e0, 0x2011, 0x5e87, 0x080c, 0x860d, 0x9086, 0x0084, 0x1198,
-	0x080c, 0x5ffc, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1107, 0x1158,
-	0x7834, 0x9005, 0x1140, 0x7097, 0x0001, 0x080c, 0x5f52, 0x709b,
-	0x000e, 0x0029, 0x0010, 0x080c, 0x5fd8, 0x00fe, 0x0005, 0x918d,
-	0x0001, 0x080c, 0x6027, 0x709b, 0x000f, 0x7093, 0x0000, 0x2061,
-	0x0140, 0x605b, 0xbc85, 0x605f, 0xb5b5, 0x2061, 0x0100, 0x6043,
-	0x0005, 0x6043, 0x0004, 0x2009, 0x07d0, 0x2011, 0x5e87, 0x080c,
-	0x8601, 0x0005, 0x7090, 0x9005, 0x0130, 0x2011, 0x5e87, 0x080c,
-	0x860d, 0x709b, 0x0000, 0x0005, 0x709b, 0x0011, 0x080c, 0xa66c,
-	0x080c, 0x5ffc, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000,
-	0x20a1, 0x0240, 0x7490, 0x9480, 0x0018, 0x9080, 0x0007, 0x9084,
-	0x03f8, 0x8004, 0x20a8, 0x4003, 0x080c, 0x5fdf, 0x11a0, 0x717c,
-	0x81ff, 0x0188, 0x900e, 0x7080, 0x9084, 0x00ff, 0x0160, 0x080c,
-	0x25fb, 0x9186, 0x007e, 0x0138, 0x9186, 0x0080, 0x0120, 0x2011,
-	0x0008, 0x080c, 0x5e34, 0x60c3, 0x0014, 0x080c, 0x5eb1, 0x0005,
-	0x00f6, 0x7090, 0x9005, 0x0500, 0x2011, 0x5e87, 0x080c, 0x860d,
-	0x9086, 0x0014, 0x11b8, 0x080c, 0x5ffc, 0x2079, 0x0260, 0x7a30,
-	0x9296, 0x1103, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc,
-	0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x709b, 0x0012,
-	0x0029, 0x0010, 0x7093, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x709b,
-	0x0013, 0x080c, 0x5f8e, 0x2079, 0x0240, 0x7833, 0x1103, 0x7837,
-	0x0000, 0x080c, 0x5ffc, 0x080c, 0x5fdf, 0x1170, 0x7084, 0x9005,
-	0x1158, 0x715c, 0x9186, 0xffff, 0x0138, 0x2011, 0x0008, 0x080c,
-	0x5e34, 0x0168, 0x080c, 0x5fb5, 0x20a9, 0x0008, 0x20e1, 0x0000,
+	0x60c3, 0x0014, 0x080c, 0x5eb8, 0x00fe, 0x0005, 0x00f6, 0x7090,
+	0x9005, 0x0500, 0x2011, 0x5e8e, 0x080c, 0x863e, 0x9086, 0x0014,
+	0x11b8, 0x080c, 0x6003, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1103,
+	0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c4,
+	0x9005, 0x1110, 0x70c7, 0x0001, 0x709b, 0x0006, 0x0029, 0x0010,
+	0x080c, 0x5fdf, 0x00fe, 0x0005, 0x00f6, 0x709b, 0x0007, 0x080c,
+	0x5f87, 0x2079, 0x0240, 0x7833, 0x1104, 0x7837, 0x0000, 0x080c,
+	0x6003, 0x080c, 0x5fe6, 0x11b8, 0x7084, 0x9005, 0x11a0, 0x7164,
+	0x9186, 0xffff, 0x0180, 0x9180, 0x3374, 0x200d, 0x918c, 0xff00,
+	0x810f, 0x2011, 0x0008, 0x080c, 0x5e3b, 0x0180, 0x080c, 0x4fe4,
+	0x0110, 0x080c, 0x2664, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099,
+	0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014,
+	0x080c, 0x5eb8, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x0500,
+	0x2011, 0x5e8e, 0x080c, 0x863e, 0x9086, 0x0014, 0x11b8, 0x080c,
+	0x6003, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1104, 0x1178, 0x7834,
+	0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110,
+	0x70c7, 0x0001, 0x709b, 0x0008, 0x0029, 0x0010, 0x080c, 0x5fdf,
+	0x00fe, 0x0005, 0x00f6, 0x709b, 0x0009, 0x080c, 0x5f87, 0x2079,
+	0x0240, 0x7833, 0x1105, 0x7837, 0x0100, 0x080c, 0x5fe6, 0x1150,
+	0x7084, 0x9005, 0x1138, 0x080c, 0x5dae, 0x1188, 0x9085, 0x0001,
+	0x080c, 0x2664, 0x20a9, 0x0008, 0x080c, 0x6003, 0x20e1, 0x0000,
 	0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3,
-	0x0014, 0x080c, 0x5eb1, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005,
-	0x0500, 0x2011, 0x5e87, 0x080c, 0x860d, 0x9086, 0x0014, 0x11b8,
-	0x080c, 0x5ffc, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1104, 0x1178,
-	0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005,
-	0x1110, 0x70c7, 0x0001, 0x709b, 0x0014, 0x0029, 0x0010, 0x7093,
-	0x0000, 0x00fe, 0x0005, 0x00f6, 0x709b, 0x0015, 0x080c, 0x5f8e,
-	0x2079, 0x0240, 0x7833, 0x1104, 0x7837, 0x0000, 0x080c, 0x5ffc,
-	0x080c, 0x5fdf, 0x11b8, 0x7084, 0x9005, 0x11a0, 0x7164, 0x9186,
-	0xffff, 0x0180, 0x9180, 0x336d, 0x200d, 0x918c, 0xff00, 0x810f,
-	0x2011, 0x0008, 0x080c, 0x5e34, 0x0180, 0x080c, 0x4fdd, 0x0110,
-	0x080c, 0x2664, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e,
-	0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c,
-	0x5eb1, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x05f0, 0x2011,
-	0x5e87, 0x080c, 0x860d, 0x9086, 0x0014, 0x15a8, 0x080c, 0x5ffc,
-	0x2079, 0x0260, 0x7a30, 0x9296, 0x1105, 0x1568, 0x7834, 0x9084,
-	0x0100, 0x2011, 0x0100, 0x921e, 0x1168, 0x9085, 0x0001, 0x080c,
-	0x6027, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7,
-	0x0001, 0x0080, 0x9005, 0x11b8, 0x7a38, 0xd2fc, 0x0128, 0x70c4,
-	0x9005, 0x1110, 0x70c7, 0x0001, 0x9085, 0x0001, 0x080c, 0x6027,
-	0x7097, 0x0000, 0x7a38, 0xd2f4, 0x0110, 0x70df, 0x0008, 0x709b,
-	0x0016, 0x0029, 0x0010, 0x7093, 0x0000, 0x00fe, 0x0005, 0x080c,
-	0xa66c, 0x080c, 0x5ffc, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9,
-	0x0000, 0x20a1, 0x0240, 0x20a9, 0x000e, 0x4003, 0x2011, 0x026d,
-	0x2204, 0x9084, 0x0100, 0x2011, 0x024d, 0x2012, 0x2011, 0x026e,
-	0x709b, 0x0017, 0x080c, 0x5fdf, 0x1150, 0x7084, 0x9005, 0x1138,
-	0x080c, 0x5da7, 0x1188, 0x9085, 0x0001, 0x080c, 0x2664, 0x20a9,
-	0x0008, 0x080c, 0x5ffc, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9,
-	0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5eb1,
-	0x0010, 0x080c, 0x5901, 0x0005, 0x00f6, 0x7090, 0x9005, 0x01d8,
-	0x2011, 0x5e87, 0x080c, 0x860d, 0x9086, 0x0084, 0x1190, 0x080c,
-	0x5ffc, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1106, 0x1150, 0x7834,
-	0x9005, 0x1138, 0x9006, 0x080c, 0x6027, 0x709b, 0x0018, 0x0029,
-	0x0010, 0x7093, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x709b, 0x0019,
-	0x080c, 0x5f8e, 0x2079, 0x0240, 0x7833, 0x1106, 0x7837, 0x0000,
-	0x080c, 0x5ffc, 0x2009, 0x026e, 0x2039, 0x1d0e, 0x20a9, 0x0040,
-	0x213e, 0x8738, 0x8108, 0x9186, 0x0280, 0x1128, 0x6814, 0x8000,
-	0x6816, 0x2009, 0x0260, 0x1f04, 0x5d10, 0x2039, 0x1d0e, 0x080c,
-	0x5fdf, 0x11e8, 0x2728, 0x2514, 0x8207, 0x9084, 0x00ff, 0x8000,
-	0x2018, 0x9294, 0x00ff, 0x8007, 0x9205, 0x202a, 0x7060, 0x2310,
-	0x8214, 0x92a0, 0x1d0e, 0x2414, 0x938c, 0x0001, 0x0118, 0x9294,
-	0xff00, 0x0018, 0x9294, 0x00ff, 0x8007, 0x9215, 0x2222, 0x20a9,
-	0x0040, 0x2009, 0x024e, 0x270e, 0x8738, 0x8108, 0x9186, 0x0260,
-	0x1128, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x1f04, 0x5d43,
-	0x60c3, 0x0084, 0x080c, 0x5eb1, 0x00fe, 0x0005, 0x00f6, 0x7090,
-	0x9005, 0x01e0, 0x2011, 0x5e87, 0x080c, 0x860d, 0x9086, 0x0084,
-	0x1198, 0x080c, 0x5ffc, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1107,
-	0x1158, 0x7834, 0x9005, 0x1140, 0x7097, 0x0001, 0x080c, 0x5f52,
-	0x709b, 0x001a, 0x0029, 0x0010, 0x7093, 0x0000, 0x00fe, 0x0005,
-	0x9085, 0x0001, 0x080c, 0x6027, 0x709b, 0x001b, 0x080c, 0xa66c,
-	0x080c, 0x5ffc, 0x2011, 0x0260, 0x2009, 0x0240, 0x7490, 0x9480,
-	0x0018, 0x9080, 0x0007, 0x9084, 0x03f8, 0x8004, 0x20a8, 0x220e,
-	0x8210, 0x8108, 0x9186, 0x0260, 0x1150, 0x6810, 0x8000, 0x6812,
-	0x2009, 0x0240, 0x6814, 0x8000, 0x6816, 0x2011, 0x0260, 0x1f04,
-	0x5d8f, 0x60c3, 0x0084, 0x080c, 0x5eb1, 0x0005, 0x0005, 0x0086,
-	0x0096, 0x2029, 0x1848, 0x252c, 0x20a9, 0x0008, 0x2041, 0x1d0e,
-	0x20e9, 0x0001, 0x28a0, 0x080c, 0x5ffc, 0x20e1, 0x0000, 0x2099,
-	0x026e, 0x4003, 0x20a9, 0x0008, 0x2011, 0x0007, 0xd5d4, 0x0108,
-	0x9016, 0x2800, 0x9200, 0x200c, 0x91a6, 0xffff, 0x1148, 0xd5d4,
-	0x0110, 0x8210, 0x0008, 0x8211, 0x1f04, 0x5dc1, 0x0804, 0x5e30,
-	0x82ff, 0x1160, 0xd5d4, 0x0120, 0x91a6, 0x3fff, 0x0d90, 0x0020,
-	0x91a6, 0x3fff, 0x0904, 0x5e30, 0x918d, 0xc000, 0x20a9, 0x0010,
-	0x2019, 0x0001, 0xd5d4, 0x0110, 0x2019, 0x0010, 0x2120, 0xd5d4,
-	0x0110, 0x8423, 0x0008, 0x8424, 0x1240, 0xd5d4, 0x0110, 0x8319,
-	0x0008, 0x8318, 0x1f04, 0x5de7, 0x04d8, 0x23a8, 0x2021, 0x0001,
-	0x8426, 0x8425, 0x1f04, 0x5df9, 0x2328, 0x8529, 0x92be, 0x0007,
-	0x0158, 0x0006, 0x2039, 0x0007, 0x2200, 0x973a, 0x000e, 0x27a8,
-	0x95a8, 0x0010, 0x1f04, 0x5e08, 0x755e, 0x95c8, 0x336d, 0x292d,
-	0x95ac, 0x00ff, 0x7582, 0x6532, 0x6536, 0x0016, 0x2508, 0x080c,
-	0x2644, 0x001e, 0x60e7, 0x0000, 0x65ea, 0x2018, 0x2304, 0x9405,
-	0x201a, 0x7087, 0x0001, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x20e1,
-	0x0001, 0x2898, 0x20a9, 0x0008, 0x4003, 0x9085, 0x0001, 0x0008,
-	0x9006, 0x009e, 0x008e, 0x0005, 0x0156, 0x01c6, 0x01d6, 0x0136,
-	0x0146, 0x22a8, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000,
-	0x2011, 0x024e, 0x22a0, 0x4003, 0x014e, 0x013e, 0x01de, 0x01ce,
-	0x015e, 0x2118, 0x9026, 0x2001, 0x0007, 0x939a, 0x0010, 0x0218,
-	0x8420, 0x8001, 0x0cd0, 0x2118, 0x84ff, 0x0120, 0x939a, 0x0010,
-	0x8421, 0x1de0, 0x2021, 0x0001, 0x83ff, 0x0118, 0x8423, 0x8319,
-	0x1de8, 0x9238, 0x2029, 0x026e, 0x9528, 0x2504, 0x942c, 0x11b8,
-	0x9405, 0x203a, 0x715e, 0x91a0, 0x336d, 0x242d, 0x95ac, 0x00ff,
-	0x7582, 0x6532, 0x6536, 0x0016, 0x2508, 0x080c, 0x2644, 0x001e,
-	0x60e7, 0x0000, 0x65ea, 0x7087, 0x0001, 0x9084, 0x0000, 0x0005,
-	0x00e6, 0x2071, 0x1800, 0x708b, 0x0000, 0x00ee, 0x0005, 0x00e6,
-	0x00f6, 0x2079, 0x0100, 0x2071, 0x0140, 0x080c, 0x5f41, 0x080c,
-	0x9e0e, 0x7004, 0x9084, 0x4000, 0x0110, 0x080c, 0x2a1a, 0x0126,
-	0x2091, 0x8000, 0x2071, 0x1826, 0x2073, 0x0000, 0x7840, 0x0026,
-	0x0016, 0x2009, 0x00f7, 0x080c, 0x5f9e, 0x001e, 0x9094, 0x0010,
-	0x9285, 0x0080, 0x7842, 0x7a42, 0x002e, 0x012e, 0x00fe, 0x00ee,
-	0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x2979, 0x0228, 0x2011,
-	0x0101, 0x2204, 0xc0c5, 0x2012, 0x2011, 0x19f4, 0x2013, 0x0000,
-	0x7093, 0x0000, 0x012e, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c,
-	0x9e01, 0x6144, 0xd184, 0x0120, 0x7198, 0x918d, 0x2000, 0x0018,
-	0x718c, 0x918d, 0x1000, 0x2011, 0x1999, 0x2112, 0x2009, 0x07d0,
-	0x2011, 0x5e87, 0x080c, 0x86d7, 0x0005, 0x0016, 0x0026, 0x00c6,
-	0x0126, 0x2091, 0x8000, 0x080c, 0xa872, 0x080c, 0xab3a, 0x080c,
-	0xa88e, 0x2009, 0x00f7, 0x080c, 0x5f9e, 0x2061, 0x1a03, 0x900e,
-	0x611a, 0x611e, 0x6172, 0x6176, 0x2061, 0x1800, 0x6003, 0x0001,
-	0x2061, 0x0100, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x1999,
-	0x200b, 0x0000, 0x2009, 0x002d, 0x2011, 0x5f0d, 0x080c, 0x8601,
-	0x012e, 0x00ce, 0x002e, 0x001e, 0x0005, 0x00e6, 0x0006, 0x0126,
-	0x2091, 0x8000, 0x0471, 0x2071, 0x0100, 0x080c, 0x9e0e, 0x2071,
-	0x0140, 0x7004, 0x9084, 0x4000, 0x0110, 0x080c, 0x2a1a, 0x080c,
-	0x74dd, 0x0188, 0x080c, 0x74f8, 0x1170, 0x080c, 0x77e3, 0x0016,
-	0x080c, 0x2713, 0x2001, 0x196d, 0x2102, 0x001e, 0x080c, 0x77de,
-	0x080c, 0x7406, 0x0050, 0x2009, 0x0001, 0x080c, 0x29f6, 0x2001,
-	0x0001, 0x080c, 0x25a0, 0x080c, 0x5edd, 0x012e, 0x000e, 0x00ee,
-	0x0005, 0x2001, 0x180e, 0x2004, 0xd0bc, 0x0158, 0x0026, 0x0036,
-	0x2011, 0x8017, 0x2001, 0x1999, 0x201c, 0x080c, 0x4b00, 0x003e,
-	0x002e, 0x0005, 0x20a9, 0x0012, 0x20e9, 0x0001, 0x20a1, 0x1d80,
-	0x080c, 0x5ffc, 0x20e9, 0x0000, 0x2099, 0x026e, 0x0099, 0x20a9,
-	0x0020, 0x080c, 0x5ff6, 0x2099, 0x0260, 0x20a1, 0x1d92, 0x0051,
-	0x20a9, 0x000e, 0x080c, 0x5ff9, 0x2099, 0x0260, 0x20a1, 0x1db2,
-	0x0009, 0x0005, 0x0016, 0x0026, 0x3410, 0x3308, 0x2104, 0x8007,
-	0x2012, 0x8108, 0x8210, 0x1f04, 0x5f76, 0x002e, 0x001e, 0x0005,
-	0x080c, 0xa66c, 0x20e1, 0x0001, 0x2099, 0x1d00, 0x20e9, 0x0000,
-	0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, 0x080c, 0xa66c,
-	0x080c, 0x5ffc, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000,
-	0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, 0x00c6, 0x0006,
-	0x2061, 0x0100, 0x810f, 0x2001, 0x1834, 0x2004, 0x9005, 0x1138,
-	0x2001, 0x1818, 0x2004, 0x9084, 0x00ff, 0x9105, 0x0010, 0x9185,
-	0x00f7, 0x604a, 0x000e, 0x00ce, 0x0005, 0x0016, 0x0046, 0x080c,
-	0x6a57, 0x0158, 0x9006, 0x2020, 0x2009, 0x002a, 0x080c, 0xe29e,
-	0x2001, 0x180c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a, 0x900e,
-	0x080c, 0x31a3, 0x080c, 0xcf2e, 0x0140, 0x0036, 0x2019, 0xffff,
-	0x2021, 0x0007, 0x080c, 0x4cb7, 0x003e, 0x004e, 0x001e, 0x0005,
-	0x080c, 0x5edd, 0x709b, 0x0000, 0x7093, 0x0000, 0x0005, 0x0006,
-	0x2001, 0x180c, 0x2004, 0xd09c, 0x0100, 0x000e, 0x0005, 0x0006,
-	0x0016, 0x0126, 0x2091, 0x8000, 0x2001, 0x0101, 0x200c, 0x918d,
-	0x0006, 0x2102, 0x012e, 0x001e, 0x000e, 0x0005, 0x2009, 0x0001,
-	0x0020, 0x2009, 0x0002, 0x0008, 0x900e, 0x6814, 0x9084, 0xffc0,
-	0x910d, 0x6916, 0x0005, 0x00f6, 0x0156, 0x0146, 0x01d6, 0x9006,
-	0x20a9, 0x0080, 0x20e9, 0x0001, 0x20a1, 0x1d00, 0x4004, 0x2079,
-	0x1d00, 0x7803, 0x2200, 0x7807, 0x00ef, 0x780f, 0x00ef, 0x7813,
-	0x0138, 0x7823, 0xffff, 0x7827, 0xffff, 0x01de, 0x014e, 0x015e,
-	0x00fe, 0x0005, 0x2001, 0x1800, 0x2003, 0x0001, 0x0005, 0x2001,
-	0x19a6, 0x0118, 0x2003, 0x0001, 0x0010, 0x2003, 0x0000, 0x0005,
-	0x0156, 0x20a9, 0x0800, 0x2009, 0x1000, 0x9006, 0x200a, 0x8108,
-	0x1f04, 0x6036, 0x015e, 0x0005, 0x00d6, 0x0036, 0x0156, 0x0136,
-	0x0146, 0x2069, 0x1847, 0x9006, 0xb802, 0xb8d6, 0xb807, 0x0707,
-	0xb80a, 0xb80e, 0xb812, 0x9198, 0x336d, 0x231d, 0x939c, 0x00ff,
-	0xbb16, 0x0016, 0x0026, 0xb886, 0x080c, 0xab33, 0x1120, 0x9192,
-	0x007e, 0x1208, 0xbb86, 0x20a9, 0x0004, 0xb8c4, 0x20e8, 0xb9c8,
-	0x9198, 0x0006, 0x9006, 0x23a0, 0x4004, 0x20a9, 0x0004, 0x9198,
-	0x000a, 0x23a0, 0x4004, 0x002e, 0x001e, 0xb83e, 0xb842, 0xb8ce,
-	0xb8d2, 0xb85e, 0xb862, 0xb866, 0xb86a, 0xb86f, 0x0100, 0xb872,
-	0xb876, 0xb87a, 0xb88a, 0xb88e, 0xb893, 0x0008, 0xb896, 0xb89a,
-	0xb89e, 0xb8be, 0xb9a2, 0x0096, 0xb8a4, 0x904d, 0x0110, 0x080c,
-	0x106c, 0xb8a7, 0x0000, 0x009e, 0x9006, 0xb84a, 0x6810, 0xb83a,
-	0x680c, 0xb846, 0xb8bb, 0x0520, 0xb8ac, 0x9005, 0x0198, 0x00c6,
-	0x2060, 0x9c82, 0x1ddc, 0x0a0c, 0x0d7d, 0x2001, 0x181a, 0x2004,
-	0x9c02, 0x1a0c, 0x0d7d, 0x080c, 0x8b5f, 0x00ce, 0x090c, 0x8f03,
-	0xb8af, 0x0000, 0x6814, 0x9084, 0x00ff, 0xb842, 0x014e, 0x013e,
-	0x015e, 0x003e, 0x00de, 0x0005, 0x0126, 0x2091, 0x8000, 0xa974,
-	0xae78, 0x9684, 0x3fff, 0x9082, 0x4000, 0x1a04, 0x6112, 0x9182,
-	0x0800, 0x1a04, 0x6116, 0x2001, 0x180c, 0x2004, 0x9084, 0x0003,
-	0x1904, 0x611c, 0x9188, 0x1000, 0x2104, 0x905d, 0x0198, 0xb804,
-	0x9084, 0x00ff, 0x908e, 0x0006, 0x1188, 0xb8a4, 0x900d, 0x1904,
-	0x612e, 0x080c, 0x64e7, 0x9006, 0x012e, 0x0005, 0x2001, 0x0005,
-	0x900e, 0x04b8, 0x2001, 0x0028, 0x900e, 0x0498, 0x9082, 0x0006,
-	0x1290, 0x080c, 0xab33, 0x1160, 0xb8a0, 0x9084, 0xff80, 0x1140,
-	0xb900, 0xd1fc, 0x0d10, 0x2001, 0x0029, 0x2009, 0x1000, 0x0408,
-	0x2001, 0x0028, 0x00a8, 0x2009, 0x180c, 0x210c, 0xd18c, 0x0118,
-	0x2001, 0x0004, 0x0068, 0xd184, 0x0118, 0x2001, 0x0004, 0x0040,
-	0x2001, 0x0029, 0xb900, 0xd1fc, 0x0118, 0x2009, 0x1000, 0x0048,
-	0x900e, 0x0038, 0x2001, 0x0029, 0x900e, 0x0018, 0x2001, 0x0029,
-	0x900e, 0x9005, 0x012e, 0x0005, 0x2001, 0x180c, 0x2004, 0xd084,
-	0x19d0, 0x9188, 0x1000, 0x2104, 0x9065, 0x09a8, 0x080c, 0x6a5b,
-	0x1990, 0xb800, 0xd0bc, 0x0978, 0x0804, 0x60d5, 0x080c, 0x6889,
-	0x0904, 0x60de, 0x0804, 0x60d9, 0x00e6, 0x2071, 0x19e7, 0x7004,
-	0x9086, 0x0002, 0x1128, 0x7030, 0x9080, 0x0004, 0x2004, 0x9b06,
-	0x00ee, 0x0005, 0x00b6, 0x00e6, 0x0126, 0x2091, 0x8000, 0xa874,
-	0x908e, 0x00ff, 0x1120, 0x2001, 0x196b, 0x205c, 0x0060, 0xa974,
-	0x9182, 0x0800, 0x1690, 0x9188, 0x1000, 0x2104, 0x905d, 0x01d0,
-	0x080c, 0x69fb, 0x11d0, 0x080c, 0xab73, 0x0570, 0x2b00, 0x6012,
-	0x2900, 0x6016, 0x6023, 0x0009, 0x602b, 0x0000, 0xa874, 0x908e,
-	0x00ff, 0x1110, 0x602b, 0x8000, 0x2009, 0x0043, 0x080c, 0xac68,
-	0x9006, 0x00b0, 0x2001, 0x0028, 0x0090, 0x2009, 0x180c, 0x210c,
-	0xd18c, 0x0118, 0x2001, 0x0004, 0x0038, 0xd184, 0x0118, 0x2001,
-	0x0004, 0x0010, 0x2001, 0x0029, 0x0010, 0x2001, 0x0029, 0x9005,
-	0x012e, 0x00ee, 0x00be, 0x0005, 0x2001, 0x002c, 0x0cc0, 0x00b6,
-	0x00e6, 0x0126, 0x2091, 0x8000, 0xa974, 0x9182, 0x0800, 0x1a04,
-	0x620a, 0x9188, 0x1000, 0x2104, 0x905d, 0x0904, 0x61e2, 0xb8a0,
-	0x9086, 0x007f, 0x0178, 0x080c, 0x6a63, 0x0160, 0xa994, 0x81ff,
-	0x0130, 0x908e, 0x0004, 0x0130, 0x908e, 0x0005, 0x0118, 0x080c,
-	0x6a5b, 0x1598, 0xa87c, 0xd0fc, 0x01e0, 0xa894, 0x9005, 0x01c8,
-	0x2060, 0x0026, 0x2010, 0x080c, 0xc802, 0x002e, 0x1120, 0x2001,
-	0x0008, 0x0804, 0x620c, 0x6020, 0x9086, 0x000a, 0x0120, 0x2001,
-	0x0008, 0x0804, 0x620c, 0x601a, 0x6003, 0x0008, 0x2900, 0x6016,
-	0x0058, 0x080c, 0xab73, 0x05e8, 0x2b00, 0x6012, 0x2900, 0x6016,
-	0x600b, 0xffff, 0x6023, 0x000a, 0x2009, 0x0003, 0x080c, 0xac68,
-	0x9006, 0x0458, 0x2001, 0x0028, 0x0438, 0x9082, 0x0006, 0x1290,
-	0x080c, 0xab33, 0x1160, 0xb8a0, 0x9084, 0xff80, 0x1140, 0xb900,
-	0xd1fc, 0x0900, 0x2001, 0x0029, 0x2009, 0x1000, 0x00a8, 0x2001,
-	0x0028, 0x0090, 0x2009, 0x180c, 0x210c, 0xd18c, 0x0118, 0x2001,
-	0x0004, 0x0050, 0xd184, 0x0118, 0x2001, 0x0004, 0x0028, 0x2001,
-	0x0029, 0x0010, 0x2001, 0x0029, 0x9005, 0x012e, 0x00ee, 0x00be,
-	0x0005, 0x2001, 0x002c, 0x0cc0, 0x00f6, 0x00b6, 0x0126, 0x2091,
-	0x8000, 0xa8e0, 0x9005, 0x1550, 0xa8dc, 0x9082, 0x0101, 0x1630,
-	0xa8c8, 0x9005, 0x1518, 0xa8c4, 0x9082, 0x0101, 0x12f8, 0xa974,
-	0x2079, 0x1800, 0x9182, 0x0800, 0x12e8, 0x7830, 0x9084, 0x0003,
-	0x1130, 0xaa98, 0xab94, 0xa878, 0x9084, 0x0007, 0x00ea, 0x7930,
-	0xd18c, 0x0118, 0x2001, 0x0004, 0x0038, 0xd184, 0x0118, 0x2001,
-	0x0004, 0x0010, 0x2001, 0x0029, 0x900e, 0x0038, 0x2001, 0x002c,
-	0x900e, 0x0018, 0x2001, 0x0029, 0x900e, 0x9006, 0x0008, 0x9005,
-	0x012e, 0x00be, 0x00fe, 0x0005, 0x62a1, 0x625c, 0x6273, 0x62a1,
-	0x62a1, 0x62a1, 0x62a1, 0x62a1, 0x2100, 0x9082, 0x007e, 0x1278,
-	0x080c, 0x65bd, 0x0148, 0x9046, 0xb810, 0x9306, 0x1904, 0x62a9,
-	0xb814, 0x9206, 0x15f0, 0x0028, 0xbb12, 0xba16, 0x0010, 0x080c,
-	0x49b3, 0x0150, 0x04b0, 0x080c, 0x661e, 0x1598, 0xb810, 0x9306,
-	0x1580, 0xb814, 0x9206, 0x1568, 0x080c, 0xab73, 0x0530, 0x2b00,
-	0x6012, 0x080c, 0xcca8, 0x2900, 0x6016, 0x600b, 0xffff, 0x6023,
-	0x000a, 0xa878, 0x9086, 0x0001, 0x1170, 0x080c, 0x31e4, 0x9006,
-	0x080c, 0x655a, 0x2001, 0x0002, 0x080c, 0x656e, 0x2001, 0x0200,
-	0xb86e, 0xb893, 0x0002, 0x2009, 0x0003, 0x080c, 0xac68, 0x9006,
-	0x0068, 0x2001, 0x0001, 0x900e, 0x0038, 0x2001, 0x002c, 0x900e,
-	0x0018, 0x2001, 0x0028, 0x900e, 0x9005, 0x0000, 0x012e, 0x00be,
-	0x00fe, 0x0005, 0x00b6, 0x00f6, 0x00e6, 0x0126, 0x2091, 0x8000,
-	0xa894, 0x90c6, 0x0015, 0x0904, 0x6490, 0x90c6, 0x0056, 0x0904,
-	0x6494, 0x90c6, 0x0066, 0x0904, 0x6498, 0x90c6, 0x0067, 0x0904,
-	0x649c, 0x90c6, 0x0068, 0x0904, 0x64a0, 0x90c6, 0x0071, 0x0904,
-	0x64a4, 0x90c6, 0x0074, 0x0904, 0x64a8, 0x90c6, 0x007c, 0x0904,
-	0x64ac, 0x90c6, 0x007e, 0x0904, 0x64b0, 0x90c6, 0x0037, 0x0904,
-	0x64b4, 0x9016, 0x2079, 0x1800, 0xa974, 0x9186, 0x00ff, 0x0904,
-	0x648b, 0x9182, 0x0800, 0x1a04, 0x648b, 0x080c, 0x661e, 0x1198,
-	0xb804, 0x9084, 0x00ff, 0x9082, 0x0006, 0x1268, 0xa894, 0x90c6,
-	0x006f, 0x0148, 0x080c, 0xab33, 0x1904, 0x6474, 0xb8a0, 0x9084,
-	0xff80, 0x1904, 0x6474, 0xa894, 0x90c6, 0x006f, 0x0158, 0x90c6,
-	0x005e, 0x0904, 0x63d4, 0x90c6, 0x0064, 0x0904, 0x63fd, 0x2008,
-	0x0804, 0x6396, 0xa998, 0xa8b0, 0x2040, 0x080c, 0xab33, 0x1120,
-	0x9182, 0x007f, 0x0a04, 0x6396, 0x9186, 0x00ff, 0x0904, 0x6396,
-	0x9182, 0x0800, 0x1a04, 0x6396, 0xaaa0, 0xab9c, 0x787c, 0x9306,
-	0x1188, 0x7880, 0x0096, 0x924e, 0x1128, 0x2208, 0x2310, 0x009e,
-	0x0804, 0x6396, 0x99cc, 0xff00, 0x009e, 0x1120, 0x2208, 0x2310,
-	0x0804, 0x6396, 0x080c, 0x49b3, 0x0904, 0x63a0, 0x900e, 0x9016,
-	0x90c6, 0x4000, 0x15e0, 0x0006, 0x080c, 0x690d, 0x1108, 0xc185,
-	0xb800, 0xd0bc, 0x0108, 0xc18d, 0x20a9, 0x0004, 0xa860, 0x20e8,
-	0xa85c, 0x9080, 0x0031, 0x20a0, 0xb8c4, 0x20e0, 0xb8c8, 0x9080,
-	0x0006, 0x2098, 0x080c, 0x0fb7, 0x20a9, 0x0004, 0xa860, 0x20e8,
-	0xa85c, 0x9080, 0x0035, 0x20a0, 0xb8c4, 0x20e0, 0xb8c8, 0x9080,
-	0x000a, 0x2098, 0x080c, 0x0fb7, 0xa8c4, 0xabc8, 0x9305, 0xabcc,
-	0x9305, 0xabd0, 0x9305, 0xabd4, 0x9305, 0xabd8, 0x9305, 0xabdc,
-	0x9305, 0xabe0, 0x9305, 0x9005, 0x0510, 0x000e, 0x00c8, 0x90c6,
-	0x4007, 0x1110, 0x2408, 0x00a0, 0x90c6, 0x4008, 0x1118, 0x2708,
-	0x2610, 0x0070, 0x90c6, 0x4009, 0x1108, 0x0050, 0x90c6, 0x4006,
-	0x0138, 0x2001, 0x4005, 0x2009, 0x000a, 0x0010, 0x2001, 0x4006,
-	0xa896, 0xa99a, 0xaa9e, 0x2001, 0x0030, 0x900e, 0x0478, 0x000e,
-	0x080c, 0xab73, 0x1130, 0x2001, 0x4005, 0x2009, 0x0003, 0x9016,
-	0x0c78, 0x2b00, 0x6012, 0x080c, 0xcca8, 0x2900, 0x6016, 0x6023,
-	0x0001, 0xa868, 0xd88c, 0x0108, 0xc0f5, 0xa86a, 0x0126, 0x2091,
-	0x8000, 0x080c, 0x31e4, 0x012e, 0x9006, 0x080c, 0x655a, 0x2001,
-	0x0002, 0x080c, 0x656e, 0x2009, 0x0002, 0x080c, 0xac68, 0xa8b0,
-	0xd094, 0x0118, 0xb8d4, 0xc08d, 0xb8d6, 0x9006, 0x9005, 0x012e,
-	0x00ee, 0x00fe, 0x00be, 0x0005, 0x080c, 0x56e7, 0x0118, 0x2009,
-	0x0007, 0x00f8, 0xa998, 0xaeb0, 0x080c, 0x661e, 0x1904, 0x6391,
-	0x9186, 0x007f, 0x0130, 0x080c, 0x6a5b, 0x0118, 0x2009, 0x0009,
-	0x0080, 0x0096, 0x080c, 0x103a, 0x1120, 0x009e, 0x2009, 0x0002,
-	0x0040, 0x2900, 0x009e, 0xa806, 0x080c, 0xca00, 0x19b0, 0x2009,
-	0x0003, 0x2001, 0x4005, 0x0804, 0x6398, 0xa998, 0xaeb0, 0x080c,
-	0x661e, 0x1904, 0x6391, 0x0096, 0x080c, 0x103a, 0x1128, 0x009e,
-	0x2009, 0x0002, 0x0804, 0x6451, 0x2900, 0x009e, 0xa806, 0x0096,
-	0x2048, 0x20a9, 0x002b, 0xb8c4, 0x20e0, 0xb8c8, 0x2098, 0xa860,
-	0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003, 0x20a9, 0x0008,
-	0x9080, 0x0006, 0x20a0, 0xbbc8, 0x9398, 0x0006, 0x2398, 0x080c,
-	0x0fb7, 0x009e, 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000,
-	0xd684, 0x1168, 0x080c, 0x56d3, 0xd0b4, 0x1118, 0xa89b, 0x000b,
-	0x00e0, 0xb800, 0xd08c, 0x0118, 0xa89b, 0x000c, 0x00b0, 0x080c,
-	0x6a5b, 0x0118, 0xa89b, 0x0009, 0x0080, 0x080c, 0x56e7, 0x0118,
-	0xa89b, 0x0007, 0x0050, 0x080c, 0xc9e3, 0x1904, 0x63cd, 0x2009,
-	0x0003, 0x2001, 0x4005, 0x0804, 0x6398, 0xa87b, 0x0030, 0xa897,
-	0x4005, 0xa804, 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084,
-	0xffc0, 0x9080, 0x0002, 0x2009, 0x002b, 0xaaa0, 0xab9c, 0xaca8,
-	0xada4, 0x2031, 0x0000, 0x2041, 0x127e, 0x080c, 0xb0ee, 0x1904,
-	0x63cd, 0x2009, 0x0002, 0x08e8, 0x2001, 0x0028, 0x900e, 0x0804,
-	0x63ce, 0x2009, 0x180c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004,
-	0x0038, 0xd184, 0x0118, 0x2001, 0x0004, 0x0010, 0x2001, 0x0029,
-	0x900e, 0x0804, 0x63ce, 0x2001, 0x0029, 0x900e, 0x0804, 0x63ce,
-	0x080c, 0x3790, 0x0804, 0x63cf, 0x080c, 0x5408, 0x0804, 0x63cf,
-	0x080c, 0x456c, 0x0804, 0x63cf, 0x080c, 0x45e5, 0x0804, 0x63cf,
-	0x080c, 0x4641, 0x0804, 0x63cf, 0x080c, 0x4a76, 0x0804, 0x63cf,
-	0x080c, 0x4d2d, 0x0804, 0x63cf, 0x080c, 0x5073, 0x0804, 0x63cf,
-	0x080c, 0x526c, 0x0804, 0x63cf, 0x080c, 0x39ae, 0x0804, 0x63cf,
-	0x00b6, 0xa974, 0xae78, 0x9684, 0x3fff, 0x9082, 0x4000, 0x1608,
-	0x9182, 0x0800, 0x1258, 0x9188, 0x1000, 0x2104, 0x905d, 0x0130,
-	0x080c, 0x6a5b, 0x1138, 0x00d9, 0x9006, 0x00b0, 0x2001, 0x0028,
-	0x900e, 0x0090, 0x9082, 0x0006, 0x1240, 0xb900, 0xd1fc, 0x0d98,
-	0x2001, 0x0029, 0x2009, 0x1000, 0x0038, 0x2001, 0x0029, 0x900e,
-	0x0018, 0x2001, 0x0029, 0x900e, 0x9005, 0x00be, 0x0005, 0xa877,
-	0x0000, 0xb8d0, 0x9005, 0x1904, 0x654e, 0xb888, 0x9005, 0x1904,
-	0x654e, 0xb838, 0xb93c, 0x9102, 0x1a04, 0x654e, 0x2b10, 0x080c,
-	0xaba0, 0x0904, 0x654a, 0x8108, 0xb93e, 0x6212, 0x2900, 0x6016,
-	0x6023, 0x0003, 0x600b, 0xffff, 0x6007, 0x0040, 0xa878, 0x605e,
-	0xa880, 0x9084, 0x00ff, 0x6066, 0xa883, 0x0000, 0xa87c, 0xd0ac,
-	0x0588, 0xc0dd, 0xa87e, 0xa888, 0x8001, 0x1530, 0xa816, 0xa864,
-	0x9094, 0x00f7, 0x9296, 0x0011, 0x11f8, 0x9084, 0x00ff, 0xc0bd,
-	0x601e, 0xa8ac, 0xaab0, 0xa836, 0xaa3a, 0x2001, 0x000f, 0x8001,
-	0x1df0, 0x2001, 0x8004, 0x6003, 0x0004, 0x6046, 0x00f6, 0x2079,
-	0x0380, 0x7818, 0xd0bc, 0x1de8, 0x7833, 0x0010, 0x2c00, 0x7836,
-	0x781b, 0x8080, 0x00fe, 0x0005, 0x080c, 0x1731, 0x601c, 0xc0bd,
-	0x601e, 0x0c38, 0xd0b4, 0x190c, 0x1c30, 0x2001, 0x8004, 0x6003,
-	0x0002, 0x0c18, 0x81ff, 0x1110, 0xb88b, 0x0001, 0x2908, 0xb8cc,
-	0xb9ce, 0x9005, 0x1110, 0xb9d2, 0x0020, 0x0096, 0x2048, 0xa902,
-	0x009e, 0x0005, 0x00b6, 0x0126, 0x00c6, 0x0026, 0x2091, 0x8000,
-	0x6210, 0x2258, 0xba00, 0x9005, 0x0110, 0xc285, 0x0008, 0xc284,
-	0xba02, 0x002e, 0x00ce, 0x012e, 0x00be, 0x0005, 0x00b6, 0x0126,
-	0x00c6, 0x2091, 0x8000, 0x6210, 0x2258, 0xba04, 0x0006, 0x9086,
-	0x0006, 0x1170, 0xb89c, 0xd0ac, 0x0158, 0x080c, 0x6a57, 0x0140,
-	0x9284, 0xff00, 0x8007, 0x9086, 0x0007, 0x1110, 0x2011, 0x0600,
-	0x000e, 0x9294, 0xff00, 0x9215, 0xba06, 0x0006, 0x9086, 0x0006,
-	0x1120, 0xba90, 0x82ff, 0x090c, 0x0d7d, 0x000e, 0x00ce, 0x012e,
-	0x00be, 0x0005, 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, 0x6210,
-	0x2258, 0xba04, 0x0006, 0x9086, 0x0006, 0x1168, 0xb89c, 0xd0a4,
-	0x0150, 0x080c, 0x6a53, 0x1138, 0x9284, 0x00ff, 0x9086, 0x0007,
-	0x1110, 0x2011, 0x0006, 0x000e, 0x9294, 0x00ff, 0x8007, 0x9215,
-	0xba06, 0x00ce, 0x012e, 0x00be, 0x0005, 0x9182, 0x0800, 0x0218,
-	0x9085, 0x0001, 0x0005, 0x00d6, 0x0026, 0x9190, 0x1000, 0x2204,
-	0x905d, 0x1188, 0x0096, 0x080c, 0x103a, 0x2958, 0x009e, 0x0168,
-	0x2b00, 0x2012, 0xb85c, 0xb8ca, 0xb860, 0xb8c6, 0x9006, 0xb8a6,
-	0xb8ae, 0x080c, 0x603c, 0x9006, 0x0010, 0x9085, 0x0001, 0x002e,
-	0x00de, 0x0005, 0x00b6, 0x0096, 0x0126, 0x2091, 0x8000, 0x0026,
-	0x9182, 0x0800, 0x0218, 0x9085, 0x0001, 0x0458, 0x00d6, 0x9190,
-	0x1000, 0x2204, 0x905d, 0x0518, 0x2013, 0x0000, 0xb8a4, 0x904d,
-	0x0110, 0x080c, 0x106c, 0x00d6, 0x00c6, 0xb8bc, 0x2060, 0x8cff,
-	0x0168, 0x600c, 0x0006, 0x6014, 0x2048, 0x080c, 0xc814, 0x0110,
-	0x080c, 0x0fec, 0x080c, 0xabc9, 0x00ce, 0x0c88, 0x00ce, 0x00de,
-	0x2b48, 0xb8c8, 0xb85e, 0xb8c4, 0xb862, 0x080c, 0x107c, 0x00de,
-	0x9006, 0x002e, 0x012e, 0x009e, 0x00be, 0x0005, 0x0016, 0x9182,
-	0x0800, 0x0218, 0x9085, 0x0001, 0x0030, 0x9188, 0x1000, 0x2104,
-	0x905d, 0x0dc0, 0x9006, 0x001e, 0x0005, 0x00d6, 0x0156, 0x0136,
-	0x0146, 0x9006, 0xb80a, 0xb80e, 0xb800, 0xc08c, 0xb802, 0x080c,
-	0x74d5, 0x1510, 0xb8a0, 0x9086, 0x007e, 0x0120, 0x080c, 0xab33,
-	0x11d8, 0x0078, 0x7040, 0xd0e4, 0x01b8, 0x00c6, 0x2061, 0x1982,
-	0x7048, 0x2062, 0x704c, 0x6006, 0x7050, 0x600a, 0x7054, 0x600e,
-	0x00ce, 0x703c, 0x2069, 0x0140, 0x9005, 0x1110, 0x2001, 0x0001,
-	0x6886, 0x2069, 0x1800, 0x68b6, 0x7040, 0xb85e, 0x7048, 0xb862,
-	0x704c, 0xb866, 0x20e1, 0x0000, 0x2099, 0x0276, 0xb8c4, 0x20e8,
-	0xb8c8, 0x9088, 0x000a, 0x21a0, 0x20a9, 0x0004, 0x4003, 0x2099,
-	0x027a, 0x9088, 0x0006, 0x21a0, 0x20a9, 0x0004, 0x4003, 0x2069,
-	0x0200, 0x6817, 0x0001, 0x7040, 0xb86a, 0x7144, 0xb96e, 0x7048,
-	0xb872, 0x7050, 0xb876, 0x2069, 0x0200, 0x6817, 0x0000, 0xb8a0,
-	0x9086, 0x007e, 0x1110, 0x7144, 0xb96e, 0x9182, 0x0211, 0x1218,
-	0x2009, 0x0008, 0x0400, 0x9182, 0x0259, 0x1218, 0x2009, 0x0007,
-	0x00d0, 0x9182, 0x02c1, 0x1218, 0x2009, 0x0006, 0x00a0, 0x9182,
-	0x0349, 0x1218, 0x2009, 0x0005, 0x0070, 0x9182, 0x0421, 0x1218,
-	0x2009, 0x0004, 0x0040, 0x9182, 0x0581, 0x1218, 0x2009, 0x0003,
-	0x0010, 0x2009, 0x0002, 0xb992, 0x014e, 0x013e, 0x015e, 0x00de,
-	0x0005, 0x0016, 0x0026, 0x00e6, 0x2071, 0x0260, 0x7034, 0xb896,
-	0x703c, 0xb89a, 0x7054, 0xb89e, 0x0036, 0xbbd4, 0xc384, 0xba00,
-	0x2009, 0x1867, 0x210c, 0xd0bc, 0x0120, 0xd1ec, 0x0110, 0xc2ad,
-	0x0008, 0xc2ac, 0xd0c4, 0x0148, 0xd1e4, 0x0138, 0xc2bd, 0xd0cc,
-	0x0128, 0xd38c, 0x1108, 0xc385, 0x0008, 0xc2bc, 0xba02, 0xbbd6,
-	0x003e, 0x00ee, 0x002e, 0x001e, 0x0005, 0x0096, 0x0126, 0x2091,
-	0x8000, 0xb8a4, 0x904d, 0x0578, 0xa900, 0x81ff, 0x15c0, 0xaa04,
-	0x9282, 0x0010, 0x16c8, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x8906,
-	0x8006, 0x8007, 0x908c, 0x003f, 0x21e0, 0x9084, 0xffc0, 0x9080,
-	0x0004, 0x2098, 0x2009, 0x0010, 0x20a9, 0x0001, 0x4002, 0x9086,
-	0xffff, 0x0120, 0x8109, 0x1dd0, 0x080c, 0x0d7d, 0x3c00, 0x20e8,
-	0x3300, 0x8001, 0x20a0, 0x4604, 0x8210, 0xaa06, 0x01de, 0x01ce,
-	0x014e, 0x013e, 0x0060, 0x080c, 0x103a, 0x0170, 0x2900, 0xb8a6,
-	0xa803, 0x0000, 0x080c, 0x68a9, 0xa807, 0x0001, 0xae12, 0x9085,
-	0x0001, 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0126, 0x2091,
-	0x8000, 0x0096, 0xb8a4, 0x904d, 0x0188, 0xa800, 0x9005, 0x1150,
-	0x080c, 0x68b8, 0x1158, 0xa804, 0x908a, 0x0002, 0x0218, 0x8001,
-	0xa806, 0x0020, 0x080c, 0x106c, 0xb8a7, 0x0000, 0x009e, 0x012e,
-	0x0005, 0x0096, 0x00c6, 0xb888, 0x9005, 0x1904, 0x67a2, 0xb8d0,
-	0x904d, 0x0904, 0x67a2, 0x080c, 0xaba0, 0x0904, 0x679e, 0x8210,
-	0xba3e, 0xa800, 0xb8d2, 0x9005, 0x1108, 0xb8ce, 0x2b00, 0x6012,
-	0x2900, 0x6016, 0x6023, 0x0003, 0x600b, 0xffff, 0x6007, 0x0040,
-	0xa878, 0x605e, 0xa880, 0x9084, 0x00ff, 0x6066, 0xa883, 0x0000,
-	0xa87c, 0xd0ac, 0x01c8, 0xc0dd, 0xa87e, 0xa888, 0x8001, 0x1568,
-	0xa816, 0xa864, 0x9094, 0x00f7, 0x9296, 0x0011, 0x1530, 0x9084,
-	0x00ff, 0xc0bd, 0x601e, 0xa8ac, 0xaab0, 0xa836, 0xaa3a, 0x2001,
-	0x8004, 0x6003, 0x0004, 0x0030, 0x080c, 0x1c30, 0x2001, 0x8004,
-	0x6003, 0x0002, 0x6046, 0x2001, 0x0010, 0x2c08, 0x080c, 0xa863,
-	0xb838, 0xba3c, 0x9202, 0x0a04, 0x674f, 0x0020, 0x82ff, 0x1110,
-	0xb88b, 0x0001, 0x00ce, 0x009e, 0x0005, 0x080c, 0x1731, 0x601c,
-	0xc0bd, 0x601e, 0x08e0, 0x00b6, 0x0096, 0x0016, 0x20a9, 0x0800,
-	0x900e, 0x0016, 0x080c, 0x661e, 0x1158, 0xb8d0, 0x904d, 0x0140,
-	0x3e00, 0x9086, 0x0002, 0x1118, 0xb800, 0xd0bc, 0x1108, 0x0041,
-	0x001e, 0x8108, 0x1f04, 0x67b1, 0x001e, 0x00be, 0x009e, 0x0005,
-	0x0096, 0x0016, 0xb8d0, 0x904d, 0x0188, 0xa800, 0xb8d2, 0x9005,
-	0x1108, 0xb8ce, 0x9006, 0xa802, 0xa867, 0x0103, 0xab7a, 0xa877,
-	0x0000, 0x080c, 0xcb12, 0x080c, 0x6d70, 0x0c60, 0x001e, 0x009e,
-	0x0005, 0x0086, 0x9046, 0xb8d0, 0x904d, 0x0198, 0xa86c, 0x9406,
-	0x1118, 0xa870, 0x9506, 0x0128, 0x2940, 0xa800, 0x904d, 0x0148,
-	0x0ca8, 0xa800, 0x88ff, 0x1110, 0xb8d2, 0x0008, 0xa002, 0xa803,
-	0x0000, 0x008e, 0x0005, 0x901e, 0x0010, 0x2019, 0x0001, 0x00e6,
-	0x0096, 0x00c6, 0x0086, 0x0026, 0x0126, 0x2091, 0x8000, 0x2071,
-	0x19e7, 0x9046, 0x7028, 0x9065, 0x01e8, 0x6014, 0x2068, 0x83ff,
-	0x0120, 0x605c, 0x9606, 0x0158, 0x0030, 0xa86c, 0x9406, 0x1118,
-	0xa870, 0x9506, 0x0120, 0x2c40, 0x600c, 0x2060, 0x0c60, 0x600c,
-	0x0006, 0x0066, 0x2830, 0x080c, 0x9f7e, 0x006e, 0x000e, 0x83ff,
-	0x0508, 0x0c08, 0x9046, 0xb8d0, 0x904d, 0x01e0, 0x83ff, 0x0120,
-	0xa878, 0x9606, 0x0158, 0x0030, 0xa86c, 0x9406, 0x1118, 0xa870,
-	0x9506, 0x0120, 0x2940, 0xa800, 0x2048, 0x0c70, 0xb8d0, 0xaa00,
-	0x0026, 0x9906, 0x1110, 0xbad2, 0x0008, 0xa202, 0x000e, 0x83ff,
-	0x0108, 0x0c10, 0x002e, 0x008e, 0x00ce, 0x009e, 0x00ee, 0x0005,
-	0x9016, 0x0489, 0x1110, 0x2011, 0x0001, 0x0005, 0x080c, 0x690d,
-	0x0128, 0x080c, 0xc8d5, 0x0010, 0x9085, 0x0001, 0x0005, 0x080c,
-	0x690d, 0x0128, 0x080c, 0xc876, 0x0010, 0x9085, 0x0001, 0x0005,
-	0x080c, 0x690d, 0x0128, 0x080c, 0xc8d2, 0x0010, 0x9085, 0x0001,
-	0x0005, 0x080c, 0x690d, 0x0128, 0x080c, 0xc895, 0x0010, 0x9085,
-	0x0001, 0x0005, 0x080c, 0x690d, 0x0128, 0x080c, 0xc916, 0x0010,
-	0x9085, 0x0001, 0x0005, 0xb8a4, 0x900d, 0x1118, 0x9085, 0x0001,
-	0x0005, 0x0136, 0x01c6, 0xa800, 0x9005, 0x11b8, 0x890e, 0x810e,
-	0x810f, 0x9184, 0x003f, 0x20e0, 0x9184, 0xffc0, 0x9080, 0x0004,
-	0x2098, 0x20a9, 0x0001, 0x2009, 0x0010, 0x4002, 0x9606, 0x0128,
-	0x8109, 0x1dd8, 0x9085, 0x0001, 0x0008, 0x9006, 0x01ce, 0x013e,
-	0x0005, 0x0146, 0x01d6, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0004,
-	0x20a0, 0x20a9, 0x0010, 0x2009, 0xffff, 0x4104, 0x01de, 0x014e,
+	0x0014, 0x080c, 0x5eb8, 0x0010, 0x080c, 0x5908, 0x00fe, 0x0005,
+	0x00f6, 0x7090, 0x9005, 0x05a8, 0x2011, 0x5e8e, 0x080c, 0x863e,
+	0x9086, 0x0014, 0x1560, 0x080c, 0x6003, 0x2079, 0x0260, 0x7a30,
+	0x9296, 0x1105, 0x1520, 0x7834, 0x9084, 0x0100, 0x2011, 0x0100,
+	0x921e, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110,
+	0x70c7, 0x0001, 0x709b, 0x000a, 0x00b1, 0x0098, 0x9005, 0x1178,
+	0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001,
+	0x7097, 0x0000, 0x709b, 0x000e, 0x080c, 0x5b56, 0x0010, 0x080c,
+	0x5fdf, 0x00fe, 0x0005, 0x00f6, 0x709b, 0x000b, 0x2011, 0x1d0e,
+	0x20e9, 0x0001, 0x22a0, 0x20a9, 0x0040, 0x2019, 0xffff, 0x4304,
+	0x080c, 0x5f87, 0x2079, 0x0240, 0x7833, 0x1106, 0x7837, 0x0000,
+	0x080c, 0x5fe6, 0x0118, 0x2013, 0x0000, 0x0020, 0x7060, 0x9085,
+	0x0100, 0x2012, 0x20a9, 0x0040, 0x2009, 0x024e, 0x2011, 0x1d0e,
+	0x220e, 0x8210, 0x8108, 0x9186, 0x0260, 0x1128, 0x6810, 0x8000,
+	0x6812, 0x2009, 0x0240, 0x1f04, 0x5ad8, 0x60c3, 0x0084, 0x080c,
+	0x5eb8, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x01c0, 0x2011,
+	0x5e8e, 0x080c, 0x863e, 0x9086, 0x0084, 0x1178, 0x080c, 0x6003,
+	0x2079, 0x0260, 0x7a30, 0x9296, 0x1106, 0x1138, 0x7834, 0x9005,
+	0x1120, 0x709b, 0x000c, 0x0029, 0x0010, 0x080c, 0x5fdf, 0x00fe,
+	0x0005, 0x00f6, 0x709b, 0x000d, 0x080c, 0x5f87, 0x2079, 0x0240,
+	0x7833, 0x1107, 0x7837, 0x0000, 0x080c, 0x6003, 0x20a9, 0x0040,
+	0x2011, 0x026e, 0x2009, 0x024e, 0x220e, 0x8210, 0x8108, 0x9186,
+	0x0260, 0x1150, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x6814,
+	0x8000, 0x6816, 0x2011, 0x0260, 0x1f04, 0x5b1c, 0x60c3, 0x0084,
+	0x080c, 0x5eb8, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x01e0,
+	0x2011, 0x5e8e, 0x080c, 0x863e, 0x9086, 0x0084, 0x1198, 0x080c,
+	0x6003, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1107, 0x1158, 0x7834,
+	0x9005, 0x1140, 0x7097, 0x0001, 0x080c, 0x5f59, 0x709b, 0x000e,
+	0x0029, 0x0010, 0x080c, 0x5fdf, 0x00fe, 0x0005, 0x918d, 0x0001,
+	0x080c, 0x602e, 0x709b, 0x000f, 0x7093, 0x0000, 0x2061, 0x0140,
+	0x605b, 0xbc85, 0x605f, 0xb5b5, 0x2061, 0x0100, 0x6043, 0x0005,
+	0x6043, 0x0004, 0x2009, 0x07d0, 0x2011, 0x5e8e, 0x080c, 0x8632,
+	0x0005, 0x7090, 0x9005, 0x0130, 0x2011, 0x5e8e, 0x080c, 0x863e,
+	0x709b, 0x0000, 0x0005, 0x709b, 0x0011, 0x080c, 0xa690, 0x080c,
+	0x6003, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1,
+	0x0240, 0x7490, 0x9480, 0x0018, 0x9080, 0x0007, 0x9084, 0x03f8,
+	0x8004, 0x20a8, 0x4003, 0x080c, 0x5fe6, 0x11a0, 0x717c, 0x81ff,
+	0x0188, 0x900e, 0x7080, 0x9084, 0x00ff, 0x0160, 0x080c, 0x25fb,
+	0x9186, 0x007e, 0x0138, 0x9186, 0x0080, 0x0120, 0x2011, 0x0008,
+	0x080c, 0x5e3b, 0x60c3, 0x0014, 0x080c, 0x5eb8, 0x0005, 0x00f6,
+	0x7090, 0x9005, 0x0500, 0x2011, 0x5e8e, 0x080c, 0x863e, 0x9086,
+	0x0014, 0x11b8, 0x080c, 0x6003, 0x2079, 0x0260, 0x7a30, 0x9296,
+	0x1103, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128,
+	0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001, 0x709b, 0x0012, 0x0029,
+	0x0010, 0x7093, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x709b, 0x0013,
+	0x080c, 0x5f95, 0x2079, 0x0240, 0x7833, 0x1103, 0x7837, 0x0000,
+	0x080c, 0x6003, 0x080c, 0x5fe6, 0x1170, 0x7084, 0x9005, 0x1158,
+	0x715c, 0x9186, 0xffff, 0x0138, 0x2011, 0x0008, 0x080c, 0x5e3b,
+	0x0168, 0x080c, 0x5fbc, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099,
+	0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014,
+	0x080c, 0x5eb8, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x0500,
+	0x2011, 0x5e8e, 0x080c, 0x863e, 0x9086, 0x0014, 0x11b8, 0x080c,
+	0x6003, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1104, 0x1178, 0x7834,
+	0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110,
+	0x70c7, 0x0001, 0x709b, 0x0014, 0x0029, 0x0010, 0x7093, 0x0000,
+	0x00fe, 0x0005, 0x00f6, 0x709b, 0x0015, 0x080c, 0x5f95, 0x2079,
+	0x0240, 0x7833, 0x1104, 0x7837, 0x0000, 0x080c, 0x6003, 0x080c,
+	0x5fe6, 0x11b8, 0x7084, 0x9005, 0x11a0, 0x7164, 0x9186, 0xffff,
+	0x0180, 0x9180, 0x3374, 0x200d, 0x918c, 0xff00, 0x810f, 0x2011,
+	0x0008, 0x080c, 0x5e3b, 0x0180, 0x080c, 0x4fe4, 0x0110, 0x080c,
+	0x2664, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9,
+	0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5eb8,
+	0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005, 0x05f0, 0x2011, 0x5e8e,
+	0x080c, 0x863e, 0x9086, 0x0014, 0x15a8, 0x080c, 0x6003, 0x2079,
+	0x0260, 0x7a30, 0x9296, 0x1105, 0x1568, 0x7834, 0x9084, 0x0100,
+	0x2011, 0x0100, 0x921e, 0x1168, 0x9085, 0x0001, 0x080c, 0x602e,
+	0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005, 0x1110, 0x70c7, 0x0001,
+	0x0080, 0x9005, 0x11b8, 0x7a38, 0xd2fc, 0x0128, 0x70c4, 0x9005,
+	0x1110, 0x70c7, 0x0001, 0x9085, 0x0001, 0x080c, 0x602e, 0x7097,
+	0x0000, 0x7a38, 0xd2f4, 0x0110, 0x70df, 0x0008, 0x709b, 0x0016,
+	0x0029, 0x0010, 0x7093, 0x0000, 0x00fe, 0x0005, 0x080c, 0xa690,
+	0x080c, 0x6003, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000,
+	0x20a1, 0x0240, 0x20a9, 0x000e, 0x4003, 0x2011, 0x026d, 0x2204,
+	0x9084, 0x0100, 0x2011, 0x024d, 0x2012, 0x2011, 0x026e, 0x709b,
+	0x0017, 0x080c, 0x5fe6, 0x1150, 0x7084, 0x9005, 0x1138, 0x080c,
+	0x5dae, 0x1188, 0x9085, 0x0001, 0x080c, 0x2664, 0x20a9, 0x0008,
+	0x080c, 0x6003, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000,
+	0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5eb8, 0x0010,
+	0x080c, 0x5908, 0x0005, 0x00f6, 0x7090, 0x9005, 0x01d8, 0x2011,
+	0x5e8e, 0x080c, 0x863e, 0x9086, 0x0084, 0x1190, 0x080c, 0x6003,
+	0x2079, 0x0260, 0x7a30, 0x9296, 0x1106, 0x1150, 0x7834, 0x9005,
+	0x1138, 0x9006, 0x080c, 0x602e, 0x709b, 0x0018, 0x0029, 0x0010,
+	0x7093, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x709b, 0x0019, 0x080c,
+	0x5f95, 0x2079, 0x0240, 0x7833, 0x1106, 0x7837, 0x0000, 0x080c,
+	0x6003, 0x2009, 0x026e, 0x2039, 0x1d0e, 0x20a9, 0x0040, 0x213e,
+	0x8738, 0x8108, 0x9186, 0x0280, 0x1128, 0x6814, 0x8000, 0x6816,
+	0x2009, 0x0260, 0x1f04, 0x5d17, 0x2039, 0x1d0e, 0x080c, 0x5fe6,
+	0x11e8, 0x2728, 0x2514, 0x8207, 0x9084, 0x00ff, 0x8000, 0x2018,
+	0x9294, 0x00ff, 0x8007, 0x9205, 0x202a, 0x7060, 0x2310, 0x8214,
+	0x92a0, 0x1d0e, 0x2414, 0x938c, 0x0001, 0x0118, 0x9294, 0xff00,
+	0x0018, 0x9294, 0x00ff, 0x8007, 0x9215, 0x2222, 0x20a9, 0x0040,
+	0x2009, 0x024e, 0x270e, 0x8738, 0x8108, 0x9186, 0x0260, 0x1128,
+	0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x1f04, 0x5d4a, 0x60c3,
+	0x0084, 0x080c, 0x5eb8, 0x00fe, 0x0005, 0x00f6, 0x7090, 0x9005,
+	0x01e0, 0x2011, 0x5e8e, 0x080c, 0x863e, 0x9086, 0x0084, 0x1198,
+	0x080c, 0x6003, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1107, 0x1158,
+	0x7834, 0x9005, 0x1140, 0x7097, 0x0001, 0x080c, 0x5f59, 0x709b,
+	0x001a, 0x0029, 0x0010, 0x7093, 0x0000, 0x00fe, 0x0005, 0x9085,
+	0x0001, 0x080c, 0x602e, 0x709b, 0x001b, 0x080c, 0xa690, 0x080c,
+	0x6003, 0x2011, 0x0260, 0x2009, 0x0240, 0x7490, 0x9480, 0x0018,
+	0x9080, 0x0007, 0x9084, 0x03f8, 0x8004, 0x20a8, 0x220e, 0x8210,
+	0x8108, 0x9186, 0x0260, 0x1150, 0x6810, 0x8000, 0x6812, 0x2009,
+	0x0240, 0x6814, 0x8000, 0x6816, 0x2011, 0x0260, 0x1f04, 0x5d96,
+	0x60c3, 0x0084, 0x080c, 0x5eb8, 0x0005, 0x0005, 0x0086, 0x0096,
+	0x2029, 0x1848, 0x252c, 0x20a9, 0x0008, 0x2041, 0x1d0e, 0x20e9,
+	0x0001, 0x28a0, 0x080c, 0x6003, 0x20e1, 0x0000, 0x2099, 0x026e,
+	0x4003, 0x20a9, 0x0008, 0x2011, 0x0007, 0xd5d4, 0x0108, 0x9016,
+	0x2800, 0x9200, 0x200c, 0x91a6, 0xffff, 0x1148, 0xd5d4, 0x0110,
+	0x8210, 0x0008, 0x8211, 0x1f04, 0x5dc8, 0x0804, 0x5e37, 0x82ff,
+	0x1160, 0xd5d4, 0x0120, 0x91a6, 0x3fff, 0x0d90, 0x0020, 0x91a6,
+	0x3fff, 0x0904, 0x5e37, 0x918d, 0xc000, 0x20a9, 0x0010, 0x2019,
+	0x0001, 0xd5d4, 0x0110, 0x2019, 0x0010, 0x2120, 0xd5d4, 0x0110,
+	0x8423, 0x0008, 0x8424, 0x1240, 0xd5d4, 0x0110, 0x8319, 0x0008,
+	0x8318, 0x1f04, 0x5dee, 0x04d8, 0x23a8, 0x2021, 0x0001, 0x8426,
+	0x8425, 0x1f04, 0x5e00, 0x2328, 0x8529, 0x92be, 0x0007, 0x0158,
+	0x0006, 0x2039, 0x0007, 0x2200, 0x973a, 0x000e, 0x27a8, 0x95a8,
+	0x0010, 0x1f04, 0x5e0f, 0x755e, 0x95c8, 0x3374, 0x292d, 0x95ac,
+	0x00ff, 0x7582, 0x6532, 0x6536, 0x0016, 0x2508, 0x080c, 0x2644,
+	0x001e, 0x60e7, 0x0000, 0x65ea, 0x2018, 0x2304, 0x9405, 0x201a,
+	0x7087, 0x0001, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x20e1, 0x0001,
+	0x2898, 0x20a9, 0x0008, 0x4003, 0x9085, 0x0001, 0x0008, 0x9006,
+	0x009e, 0x008e, 0x0005, 0x0156, 0x01c6, 0x01d6, 0x0136, 0x0146,
+	0x22a8, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x2011,
+	0x024e, 0x22a0, 0x4003, 0x014e, 0x013e, 0x01de, 0x01ce, 0x015e,
+	0x2118, 0x9026, 0x2001, 0x0007, 0x939a, 0x0010, 0x0218, 0x8420,
+	0x8001, 0x0cd0, 0x2118, 0x84ff, 0x0120, 0x939a, 0x0010, 0x8421,
+	0x1de0, 0x2021, 0x0001, 0x83ff, 0x0118, 0x8423, 0x8319, 0x1de8,
+	0x9238, 0x2029, 0x026e, 0x9528, 0x2504, 0x942c, 0x11b8, 0x9405,
+	0x203a, 0x715e, 0x91a0, 0x3374, 0x242d, 0x95ac, 0x00ff, 0x7582,
+	0x6532, 0x6536, 0x0016, 0x2508, 0x080c, 0x2644, 0x001e, 0x60e7,
+	0x0000, 0x65ea, 0x7087, 0x0001, 0x9084, 0x0000, 0x0005, 0x00e6,
+	0x2071, 0x1800, 0x708b, 0x0000, 0x00ee, 0x0005, 0x00e6, 0x00f6,
+	0x2079, 0x0100, 0x2071, 0x0140, 0x080c, 0x5f48, 0x080c, 0x9e32,
+	0x7004, 0x9084, 0x4000, 0x0110, 0x080c, 0x2a1a, 0x0126, 0x2091,
+	0x8000, 0x2071, 0x1826, 0x2073, 0x0000, 0x7840, 0x0026, 0x0016,
+	0x2009, 0x00f7, 0x080c, 0x5fa5, 0x001e, 0x9094, 0x0010, 0x9285,
+	0x0080, 0x7842, 0x7a42, 0x002e, 0x012e, 0x00fe, 0x00ee, 0x0005,
+	0x0126, 0x2091, 0x8000, 0x080c, 0x2979, 0x0228, 0x2011, 0x0101,
+	0x2204, 0xc0c5, 0x2012, 0x2011, 0x19f4, 0x2013, 0x0000, 0x7093,
+	0x0000, 0x012e, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0x9e25,
+	0x6144, 0xd184, 0x0120, 0x7198, 0x918d, 0x2000, 0x0018, 0x718c,
+	0x918d, 0x1000, 0x2011, 0x1999, 0x2112, 0x2009, 0x07d0, 0x2011,
+	0x5e8e, 0x080c, 0x8708, 0x0005, 0x0016, 0x0026, 0x00c6, 0x0126,
+	0x2091, 0x8000, 0x080c, 0xa896, 0x080c, 0xab5e, 0x080c, 0xa8b2,
+	0x2009, 0x00f7, 0x080c, 0x5fa5, 0x2061, 0x1a03, 0x900e, 0x611a,
+	0x611e, 0x6172, 0x6176, 0x2061, 0x1800, 0x6003, 0x0001, 0x2061,
+	0x0100, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x1999, 0x200b,
+	0x0000, 0x2009, 0x002d, 0x2011, 0x5f14, 0x080c, 0x8632, 0x012e,
+	0x00ce, 0x002e, 0x001e, 0x0005, 0x00e6, 0x0006, 0x0126, 0x2091,
+	0x8000, 0x0471, 0x2071, 0x0100, 0x080c, 0x9e32, 0x2071, 0x0140,
+	0x7004, 0x9084, 0x4000, 0x0110, 0x080c, 0x2a1a, 0x080c, 0x74f1,
+	0x0188, 0x080c, 0x750c, 0x1170, 0x080c, 0x77f7, 0x0016, 0x080c,
+	0x2713, 0x2001, 0x196d, 0x2102, 0x001e, 0x080c, 0x77f2, 0x080c,
+	0x741a, 0x0050, 0x2009, 0x0001, 0x080c, 0x29f6, 0x2001, 0x0001,
+	0x080c, 0x25a0, 0x080c, 0x5ee4, 0x012e, 0x000e, 0x00ee, 0x0005,
+	0x2001, 0x180e, 0x2004, 0xd0bc, 0x0158, 0x0026, 0x0036, 0x2011,
+	0x8017, 0x2001, 0x1999, 0x201c, 0x080c, 0x4b07, 0x003e, 0x002e,
+	0x0005, 0x20a9, 0x0012, 0x20e9, 0x0001, 0x20a1, 0x1d80, 0x080c,
+	0x6003, 0x20e9, 0x0000, 0x2099, 0x026e, 0x0099, 0x20a9, 0x0020,
+	0x080c, 0x5ffd, 0x2099, 0x0260, 0x20a1, 0x1d92, 0x0051, 0x20a9,
+	0x000e, 0x080c, 0x6000, 0x2099, 0x0260, 0x20a1, 0x1db2, 0x0009,
+	0x0005, 0x0016, 0x0026, 0x3410, 0x3308, 0x2104, 0x8007, 0x2012,
+	0x8108, 0x8210, 0x1f04, 0x5f7d, 0x002e, 0x001e, 0x0005, 0x080c,
+	0xa690, 0x20e1, 0x0001, 0x2099, 0x1d00, 0x20e9, 0x0000, 0x20a1,
+	0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, 0x080c, 0xa690, 0x080c,
+	0x6003, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1,
+	0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, 0x00c6, 0x0006, 0x2061,
+	0x0100, 0x810f, 0x2001, 0x1834, 0x2004, 0x9005, 0x1138, 0x2001,
+	0x1818, 0x2004, 0x9084, 0x00ff, 0x9105, 0x0010, 0x9185, 0x00f7,
+	0x604a, 0x000e, 0x00ce, 0x0005, 0x0016, 0x0046, 0x080c, 0x6a67,
+	0x0158, 0x9006, 0x2020, 0x2009, 0x002a, 0x080c, 0xe2c9, 0x2001,
+	0x180c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a, 0x900e, 0x080c,
+	0x31a6, 0x080c, 0xcf52, 0x0140, 0x0036, 0x2019, 0xffff, 0x2021,
+	0x0007, 0x080c, 0x4cbe, 0x003e, 0x004e, 0x001e, 0x0005, 0x080c,
+	0x5ee4, 0x709b, 0x0000, 0x7093, 0x0000, 0x0005, 0x0006, 0x2001,
+	0x180c, 0x2004, 0xd09c, 0x0100, 0x000e, 0x0005, 0x0006, 0x0016,
+	0x0126, 0x2091, 0x8000, 0x2001, 0x0101, 0x200c, 0x918d, 0x0006,
+	0x2102, 0x012e, 0x001e, 0x000e, 0x0005, 0x2009, 0x0001, 0x0020,
+	0x2009, 0x0002, 0x0008, 0x900e, 0x6814, 0x9084, 0xffc0, 0x910d,
+	0x6916, 0x0005, 0x00f6, 0x0156, 0x0146, 0x01d6, 0x9006, 0x20a9,
+	0x0080, 0x20e9, 0x0001, 0x20a1, 0x1d00, 0x4004, 0x2079, 0x1d00,
+	0x7803, 0x2200, 0x7807, 0x00ef, 0x780f, 0x00ef, 0x7813, 0x0138,
+	0x7823, 0xffff, 0x7827, 0xffff, 0x01de, 0x014e, 0x015e, 0x00fe,
+	0x0005, 0x2001, 0x1800, 0x2003, 0x0001, 0x0005, 0x2001, 0x19a6,
+	0x0118, 0x2003, 0x0001, 0x0010, 0x2003, 0x0000, 0x0005, 0x0156,
+	0x20a9, 0x0800, 0x2009, 0x1000, 0x9006, 0x200a, 0x8108, 0x1f04,
+	0x603d, 0x015e, 0x0005, 0x00d6, 0x0036, 0x0156, 0x0136, 0x0146,
+	0x2069, 0x1847, 0x9006, 0xb802, 0xb8d6, 0xb807, 0x0707, 0xb80a,
+	0xb80e, 0xb812, 0x9198, 0x3374, 0x231d, 0x939c, 0x00ff, 0xbb16,
+	0x0016, 0x0026, 0xb886, 0x080c, 0xab57, 0x1120, 0x9192, 0x007e,
+	0x1208, 0xbb86, 0x20a9, 0x0004, 0xb8c4, 0x20e8, 0xb9c8, 0x9198,
+	0x0006, 0x9006, 0x23a0, 0x4004, 0x20a9, 0x0004, 0x9198, 0x000a,
+	0x23a0, 0x4004, 0x002e, 0x001e, 0xb83e, 0xb842, 0xb8ce, 0xb8d2,
+	0xb85e, 0xb862, 0xb866, 0xb86a, 0xb86f, 0x0100, 0xb872, 0xb876,
+	0xb87a, 0xb88a, 0xb88e, 0xb893, 0x0008, 0xb896, 0xb89a, 0xb89e,
+	0xb8be, 0xb9a2, 0x0096, 0xb8a4, 0x904d, 0x0110, 0x080c, 0x106c,
+	0xb8a7, 0x0000, 0x009e, 0x9006, 0xb84a, 0x6810, 0xb83a, 0x680c,
+	0xb846, 0xb8bb, 0x0520, 0xb8ac, 0x9005, 0x0198, 0x00c6, 0x2060,
+	0x9c82, 0x1ddc, 0x0a0c, 0x0d7d, 0x2001, 0x181a, 0x2004, 0x9c02,
+	0x1a0c, 0x0d7d, 0x080c, 0x8b90, 0x00ce, 0x090c, 0x8f34, 0xb8af,
+	0x0000, 0x6814, 0x9084, 0x00ff, 0xb842, 0x014e, 0x013e, 0x015e,
+	0x003e, 0x00de, 0x0005, 0x0126, 0x2091, 0x8000, 0xa974, 0xae78,
+	0x9684, 0x3fff, 0x9082, 0x4000, 0x1a04, 0x6119, 0x9182, 0x0800,
+	0x1a04, 0x611d, 0x2001, 0x180c, 0x2004, 0x9084, 0x0003, 0x1904,
+	0x6123, 0x9188, 0x1000, 0x2104, 0x905d, 0x0198, 0xb804, 0x9084,
+	0x00ff, 0x908e, 0x0006, 0x1188, 0xb8a4, 0x900d, 0x1904, 0x6135,
+	0x080c, 0x64ee, 0x9006, 0x012e, 0x0005, 0x2001, 0x0005, 0x900e,
+	0x04b8, 0x2001, 0x0028, 0x900e, 0x0498, 0x9082, 0x0006, 0x1290,
+	0x080c, 0xab57, 0x1160, 0xb8a0, 0x9084, 0xff80, 0x1140, 0xb900,
+	0xd1fc, 0x0d10, 0x2001, 0x0029, 0x2009, 0x1000, 0x0408, 0x2001,
+	0x0028, 0x00a8, 0x2009, 0x180c, 0x210c, 0xd18c, 0x0118, 0x2001,
+	0x0004, 0x0068, 0xd184, 0x0118, 0x2001, 0x0004, 0x0040, 0x2001,
+	0x0029, 0xb900, 0xd1fc, 0x0118, 0x2009, 0x1000, 0x0048, 0x900e,
+	0x0038, 0x2001, 0x0029, 0x900e, 0x0018, 0x2001, 0x0029, 0x900e,
+	0x9005, 0x012e, 0x0005, 0x2001, 0x180c, 0x2004, 0xd084, 0x19d0,
+	0x9188, 0x1000, 0x2104, 0x9065, 0x09a8, 0x080c, 0x6a6b, 0x1990,
+	0xb800, 0xd0bc, 0x0978, 0x0804, 0x60dc, 0x080c, 0x6890, 0x0904,
+	0x60e5, 0x0804, 0x60e0, 0x00e6, 0x2071, 0x19e7, 0x7004, 0x9086,
+	0x0002, 0x1128, 0x7030, 0x9080, 0x0004, 0x2004, 0x9b06, 0x00ee,
+	0x0005, 0x00b6, 0x00e6, 0x0126, 0x2091, 0x8000, 0xa874, 0x908e,
+	0x00ff, 0x1120, 0x2001, 0x196b, 0x205c, 0x0060, 0xa974, 0x9182,
+	0x0800, 0x1690, 0x9188, 0x1000, 0x2104, 0x905d, 0x01d0, 0x080c,
+	0x6a0b, 0x11d0, 0x080c, 0xab97, 0x0570, 0x2b00, 0x6012, 0x2900,
+	0x6016, 0x6023, 0x0009, 0x602b, 0x0000, 0xa874, 0x908e, 0x00ff,
+	0x1110, 0x602b, 0x8000, 0x2009, 0x0043, 0x080c, 0xac8c, 0x9006,
+	0x00b0, 0x2001, 0x0028, 0x0090, 0x2009, 0x180c, 0x210c, 0xd18c,
+	0x0118, 0x2001, 0x0004, 0x0038, 0xd184, 0x0118, 0x2001, 0x0004,
+	0x0010, 0x2001, 0x0029, 0x0010, 0x2001, 0x0029, 0x9005, 0x012e,
+	0x00ee, 0x00be, 0x0005, 0x2001, 0x002c, 0x0cc0, 0x00b6, 0x00e6,
+	0x0126, 0x2091, 0x8000, 0xa974, 0x9182, 0x0800, 0x1a04, 0x6211,
+	0x9188, 0x1000, 0x2104, 0x905d, 0x0904, 0x61e9, 0xb8a0, 0x9086,
+	0x007f, 0x0178, 0x080c, 0x6a73, 0x0160, 0xa994, 0x81ff, 0x0130,
+	0x908e, 0x0004, 0x0130, 0x908e, 0x0005, 0x0118, 0x080c, 0x6a6b,
+	0x1598, 0xa87c, 0xd0fc, 0x01e0, 0xa894, 0x9005, 0x01c8, 0x2060,
+	0x0026, 0x2010, 0x080c, 0xc826, 0x002e, 0x1120, 0x2001, 0x0008,
+	0x0804, 0x6213, 0x6020, 0x9086, 0x000a, 0x0120, 0x2001, 0x0008,
+	0x0804, 0x6213, 0x601a, 0x6003, 0x0008, 0x2900, 0x6016, 0x0058,
+	0x080c, 0xab97, 0x05e8, 0x2b00, 0x6012, 0x2900, 0x6016, 0x600b,
+	0xffff, 0x6023, 0x000a, 0x2009, 0x0003, 0x080c, 0xac8c, 0x9006,
+	0x0458, 0x2001, 0x0028, 0x0438, 0x9082, 0x0006, 0x1290, 0x080c,
+	0xab57, 0x1160, 0xb8a0, 0x9084, 0xff80, 0x1140, 0xb900, 0xd1fc,
+	0x0900, 0x2001, 0x0029, 0x2009, 0x1000, 0x00a8, 0x2001, 0x0028,
+	0x0090, 0x2009, 0x180c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004,
+	0x0050, 0xd184, 0x0118, 0x2001, 0x0004, 0x0028, 0x2001, 0x0029,
+	0x0010, 0x2001, 0x0029, 0x9005, 0x012e, 0x00ee, 0x00be, 0x0005,
+	0x2001, 0x002c, 0x0cc0, 0x00f6, 0x00b6, 0x0126, 0x2091, 0x8000,
+	0xa8e0, 0x9005, 0x1550, 0xa8dc, 0x9082, 0x0101, 0x1630, 0xa8c8,
+	0x9005, 0x1518, 0xa8c4, 0x9082, 0x0101, 0x12f8, 0xa974, 0x2079,
+	0x1800, 0x9182, 0x0800, 0x12e8, 0x7830, 0x9084, 0x0003, 0x1130,
+	0xaa98, 0xab94, 0xa878, 0x9084, 0x0007, 0x00ea, 0x7930, 0xd18c,
+	0x0118, 0x2001, 0x0004, 0x0038, 0xd184, 0x0118, 0x2001, 0x0004,
+	0x0010, 0x2001, 0x0029, 0x900e, 0x0038, 0x2001, 0x002c, 0x900e,
+	0x0018, 0x2001, 0x0029, 0x900e, 0x9006, 0x0008, 0x9005, 0x012e,
+	0x00be, 0x00fe, 0x0005, 0x62a8, 0x6263, 0x627a, 0x62a8, 0x62a8,
+	0x62a8, 0x62a8, 0x62a8, 0x2100, 0x9082, 0x007e, 0x1278, 0x080c,
+	0x65c4, 0x0148, 0x9046, 0xb810, 0x9306, 0x1904, 0x62b0, 0xb814,
+	0x9206, 0x15f0, 0x0028, 0xbb12, 0xba16, 0x0010, 0x080c, 0x49ba,
+	0x0150, 0x04b0, 0x080c, 0x6625, 0x1598, 0xb810, 0x9306, 0x1580,
+	0xb814, 0x9206, 0x1568, 0x080c, 0xab97, 0x0530, 0x2b00, 0x6012,
+	0x080c, 0xcccc, 0x2900, 0x6016, 0x600b, 0xffff, 0x6023, 0x000a,
+	0xa878, 0x9086, 0x0001, 0x1170, 0x080c, 0x31e7, 0x9006, 0x080c,
+	0x6561, 0x2001, 0x0002, 0x080c, 0x6575, 0x2001, 0x0200, 0xb86e,
+	0xb893, 0x0002, 0x2009, 0x0003, 0x080c, 0xac8c, 0x9006, 0x0068,
+	0x2001, 0x0001, 0x900e, 0x0038, 0x2001, 0x002c, 0x900e, 0x0018,
+	0x2001, 0x0028, 0x900e, 0x9005, 0x0000, 0x012e, 0x00be, 0x00fe,
+	0x0005, 0x00b6, 0x00f6, 0x00e6, 0x0126, 0x2091, 0x8000, 0xa894,
+	0x90c6, 0x0015, 0x0904, 0x6497, 0x90c6, 0x0056, 0x0904, 0x649b,
+	0x90c6, 0x0066, 0x0904, 0x649f, 0x90c6, 0x0067, 0x0904, 0x64a3,
+	0x90c6, 0x0068, 0x0904, 0x64a7, 0x90c6, 0x0071, 0x0904, 0x64ab,
+	0x90c6, 0x0074, 0x0904, 0x64af, 0x90c6, 0x007c, 0x0904, 0x64b3,
+	0x90c6, 0x007e, 0x0904, 0x64b7, 0x90c6, 0x0037, 0x0904, 0x64bb,
+	0x9016, 0x2079, 0x1800, 0xa974, 0x9186, 0x00ff, 0x0904, 0x6492,
+	0x9182, 0x0800, 0x1a04, 0x6492, 0x080c, 0x6625, 0x1198, 0xb804,
+	0x9084, 0x00ff, 0x9082, 0x0006, 0x1268, 0xa894, 0x90c6, 0x006f,
+	0x0148, 0x080c, 0xab57, 0x1904, 0x647b, 0xb8a0, 0x9084, 0xff80,
+	0x1904, 0x647b, 0xa894, 0x90c6, 0x006f, 0x0158, 0x90c6, 0x005e,
+	0x0904, 0x63db, 0x90c6, 0x0064, 0x0904, 0x6404, 0x2008, 0x0804,
+	0x639d, 0xa998, 0xa8b0, 0x2040, 0x080c, 0xab57, 0x1120, 0x9182,
+	0x007f, 0x0a04, 0x639d, 0x9186, 0x00ff, 0x0904, 0x639d, 0x9182,
+	0x0800, 0x1a04, 0x639d, 0xaaa0, 0xab9c, 0x787c, 0x9306, 0x1188,
+	0x7880, 0x0096, 0x924e, 0x1128, 0x2208, 0x2310, 0x009e, 0x0804,
+	0x639d, 0x99cc, 0xff00, 0x009e, 0x1120, 0x2208, 0x2310, 0x0804,
+	0x639d, 0x080c, 0x49ba, 0x0904, 0x63a7, 0x900e, 0x9016, 0x90c6,
+	0x4000, 0x15e0, 0x0006, 0x080c, 0x6914, 0x1108, 0xc185, 0xb800,
+	0xd0bc, 0x0108, 0xc18d, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c,
+	0x9080, 0x0031, 0x20a0, 0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x0006,
+	0x2098, 0x080c, 0x0fb7, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c,
+	0x9080, 0x0035, 0x20a0, 0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x000a,
+	0x2098, 0x080c, 0x0fb7, 0xa8c4, 0xabc8, 0x9305, 0xabcc, 0x9305,
+	0xabd0, 0x9305, 0xabd4, 0x9305, 0xabd8, 0x9305, 0xabdc, 0x9305,
+	0xabe0, 0x9305, 0x9005, 0x0510, 0x000e, 0x00c8, 0x90c6, 0x4007,
+	0x1110, 0x2408, 0x00a0, 0x90c6, 0x4008, 0x1118, 0x2708, 0x2610,
+	0x0070, 0x90c6, 0x4009, 0x1108, 0x0050, 0x90c6, 0x4006, 0x0138,
+	0x2001, 0x4005, 0x2009, 0x000a, 0x0010, 0x2001, 0x4006, 0xa896,
+	0xa99a, 0xaa9e, 0x2001, 0x0030, 0x900e, 0x0478, 0x000e, 0x080c,
+	0xab97, 0x1130, 0x2001, 0x4005, 0x2009, 0x0003, 0x9016, 0x0c78,
+	0x2b00, 0x6012, 0x080c, 0xcccc, 0x2900, 0x6016, 0x6023, 0x0001,
+	0xa868, 0xd88c, 0x0108, 0xc0f5, 0xa86a, 0x0126, 0x2091, 0x8000,
+	0x080c, 0x31e7, 0x012e, 0x9006, 0x080c, 0x6561, 0x2001, 0x0002,
+	0x080c, 0x6575, 0x2009, 0x0002, 0x080c, 0xac8c, 0xa8b0, 0xd094,
+	0x0118, 0xb8d4, 0xc08d, 0xb8d6, 0x9006, 0x9005, 0x012e, 0x00ee,
+	0x00fe, 0x00be, 0x0005, 0x080c, 0x56ee, 0x0118, 0x2009, 0x0007,
+	0x00f8, 0xa998, 0xaeb0, 0x080c, 0x6625, 0x1904, 0x6398, 0x9186,
+	0x007f, 0x0130, 0x080c, 0x6a6b, 0x0118, 0x2009, 0x0009, 0x0080,
+	0x0096, 0x080c, 0x103a, 0x1120, 0x009e, 0x2009, 0x0002, 0x0040,
+	0x2900, 0x009e, 0xa806, 0x080c, 0xca24, 0x19b0, 0x2009, 0x0003,
+	0x2001, 0x4005, 0x0804, 0x639f, 0xa998, 0xaeb0, 0x080c, 0x6625,
+	0x1904, 0x6398, 0x0096, 0x080c, 0x103a, 0x1128, 0x009e, 0x2009,
+	0x0002, 0x0804, 0x6458, 0x2900, 0x009e, 0xa806, 0x0096, 0x2048,
+	0x20a9, 0x002b, 0xb8c4, 0x20e0, 0xb8c8, 0x2098, 0xa860, 0x20e8,
+	0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003, 0x20a9, 0x0008, 0x9080,
+	0x0006, 0x20a0, 0xbbc8, 0x9398, 0x0006, 0x2398, 0x080c, 0x0fb7,
+	0x009e, 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0xd684,
+	0x1168, 0x080c, 0x56da, 0xd0b4, 0x1118, 0xa89b, 0x000b, 0x00e0,
+	0xb800, 0xd08c, 0x0118, 0xa89b, 0x000c, 0x00b0, 0x080c, 0x6a6b,
+	0x0118, 0xa89b, 0x0009, 0x0080, 0x080c, 0x56ee, 0x0118, 0xa89b,
+	0x0007, 0x0050, 0x080c, 0xca07, 0x1904, 0x63d4, 0x2009, 0x0003,
+	0x2001, 0x4005, 0x0804, 0x639f, 0xa87b, 0x0030, 0xa897, 0x4005,
+	0xa804, 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0,
+	0x9080, 0x0002, 0x2009, 0x002b, 0xaaa0, 0xab9c, 0xaca8, 0xada4,
+	0x2031, 0x0000, 0x2041, 0x127e, 0x080c, 0xb112, 0x1904, 0x63d4,
+	0x2009, 0x0002, 0x08e8, 0x2001, 0x0028, 0x900e, 0x0804, 0x63d5,
+	0x2009, 0x180c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0038,
+	0xd184, 0x0118, 0x2001, 0x0004, 0x0010, 0x2001, 0x0029, 0x900e,
+	0x0804, 0x63d5, 0x2001, 0x0029, 0x900e, 0x0804, 0x63d5, 0x080c,
+	0x3797, 0x0804, 0x63d6, 0x080c, 0x540f, 0x0804, 0x63d6, 0x080c,
+	0x4573, 0x0804, 0x63d6, 0x080c, 0x45ec, 0x0804, 0x63d6, 0x080c,
+	0x4648, 0x0804, 0x63d6, 0x080c, 0x4a7d, 0x0804, 0x63d6, 0x080c,
+	0x4d34, 0x0804, 0x63d6, 0x080c, 0x507a, 0x0804, 0x63d6, 0x080c,
+	0x5273, 0x0804, 0x63d6, 0x080c, 0x39b5, 0x0804, 0x63d6, 0x00b6,
+	0xa974, 0xae78, 0x9684, 0x3fff, 0x9082, 0x4000, 0x1608, 0x9182,
+	0x0800, 0x1258, 0x9188, 0x1000, 0x2104, 0x905d, 0x0130, 0x080c,
+	0x6a6b, 0x1138, 0x00d9, 0x9006, 0x00b0, 0x2001, 0x0028, 0x900e,
+	0x0090, 0x9082, 0x0006, 0x1240, 0xb900, 0xd1fc, 0x0d98, 0x2001,
+	0x0029, 0x2009, 0x1000, 0x0038, 0x2001, 0x0029, 0x900e, 0x0018,
+	0x2001, 0x0029, 0x900e, 0x9005, 0x00be, 0x0005, 0xa877, 0x0000,
+	0xb8d0, 0x9005, 0x1904, 0x6555, 0xb888, 0x9005, 0x1904, 0x6555,
+	0xb838, 0xb93c, 0x9102, 0x1a04, 0x6555, 0x2b10, 0x080c, 0xabc4,
+	0x0904, 0x6551, 0x8108, 0xb93e, 0x6212, 0x2900, 0x6016, 0x6023,
+	0x0003, 0x600b, 0xffff, 0x6007, 0x0040, 0xa878, 0x605e, 0xa880,
+	0x9084, 0x00ff, 0x6066, 0xa883, 0x0000, 0xa87c, 0xd0ac, 0x0588,
+	0xc0dd, 0xa87e, 0xa888, 0x8001, 0x1530, 0xa816, 0xa864, 0x9094,
+	0x00f7, 0x9296, 0x0011, 0x11f8, 0x9084, 0x00ff, 0xc0bd, 0x601e,
+	0xa8ac, 0xaab0, 0xa836, 0xaa3a, 0x2001, 0x000f, 0x8001, 0x1df0,
+	0x2001, 0x8004, 0x6003, 0x0004, 0x6046, 0x00f6, 0x2079, 0x0380,
+	0x7818, 0xd0bc, 0x1de8, 0x7833, 0x0010, 0x2c00, 0x7836, 0x781b,
+	0x8080, 0x00fe, 0x0005, 0x080c, 0x1731, 0x601c, 0xc0bd, 0x601e,
+	0x0c38, 0xd0b4, 0x190c, 0x1c30, 0x2001, 0x8004, 0x6003, 0x0002,
+	0x0c18, 0x81ff, 0x1110, 0xb88b, 0x0001, 0x2908, 0xb8cc, 0xb9ce,
+	0x9005, 0x1110, 0xb9d2, 0x0020, 0x0096, 0x2048, 0xa902, 0x009e,
+	0x0005, 0x00b6, 0x0126, 0x00c6, 0x0026, 0x2091, 0x8000, 0x6210,
+	0x2258, 0xba00, 0x9005, 0x0110, 0xc285, 0x0008, 0xc284, 0xba02,
+	0x002e, 0x00ce, 0x012e, 0x00be, 0x0005, 0x00b6, 0x0126, 0x00c6,
+	0x2091, 0x8000, 0x6210, 0x2258, 0xba04, 0x0006, 0x9086, 0x0006,
+	0x1170, 0xb89c, 0xd0ac, 0x0158, 0x080c, 0x6a67, 0x0140, 0x9284,
+	0xff00, 0x8007, 0x9086, 0x0007, 0x1110, 0x2011, 0x0600, 0x000e,
+	0x9294, 0xff00, 0x9215, 0xba06, 0x0006, 0x9086, 0x0006, 0x1120,
+	0xba90, 0x82ff, 0x090c, 0x0d7d, 0x000e, 0x00ce, 0x012e, 0x00be,
+	0x0005, 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, 0x6210, 0x2258,
+	0xba04, 0x0006, 0x9086, 0x0006, 0x1168, 0xb89c, 0xd0a4, 0x0150,
+	0x080c, 0x6a63, 0x1138, 0x9284, 0x00ff, 0x9086, 0x0007, 0x1110,
+	0x2011, 0x0006, 0x000e, 0x9294, 0x00ff, 0x8007, 0x9215, 0xba06,
+	0x00ce, 0x012e, 0x00be, 0x0005, 0x9182, 0x0800, 0x0218, 0x9085,
+	0x0001, 0x0005, 0x00d6, 0x0026, 0x9190, 0x1000, 0x2204, 0x905d,
+	0x1188, 0x0096, 0x080c, 0x103a, 0x2958, 0x009e, 0x0168, 0x2b00,
+	0x2012, 0xb85c, 0xb8ca, 0xb860, 0xb8c6, 0x9006, 0xb8a6, 0xb8ae,
+	0x080c, 0x6043, 0x9006, 0x0010, 0x9085, 0x0001, 0x002e, 0x00de,
+	0x0005, 0x00b6, 0x0096, 0x0126, 0x2091, 0x8000, 0x0026, 0x9182,
+	0x0800, 0x0218, 0x9085, 0x0001, 0x0458, 0x00d6, 0x9190, 0x1000,
+	0x2204, 0x905d, 0x0518, 0x2013, 0x0000, 0xb8a4, 0x904d, 0x0110,
+	0x080c, 0x106c, 0x00d6, 0x00c6, 0xb8bc, 0x2060, 0x8cff, 0x0168,
+	0x600c, 0x0006, 0x6014, 0x2048, 0x080c, 0xc838, 0x0110, 0x080c,
+	0x0fec, 0x080c, 0xabed, 0x00ce, 0x0c88, 0x00ce, 0x00de, 0x2b48,
+	0xb8c8, 0xb85e, 0xb8c4, 0xb862, 0x080c, 0x107c, 0x00de, 0x9006,
+	0x002e, 0x012e, 0x009e, 0x00be, 0x0005, 0x0016, 0x9182, 0x0800,
+	0x0218, 0x9085, 0x0001, 0x0030, 0x9188, 0x1000, 0x2104, 0x905d,
+	0x0dc0, 0x9006, 0x001e, 0x0005, 0x00d6, 0x0156, 0x0136, 0x0146,
+	0x9006, 0xb80a, 0xb80e, 0xb800, 0xc08c, 0xb802, 0x080c, 0x74e9,
+	0x1510, 0xb8a0, 0x9086, 0x007e, 0x0120, 0x080c, 0xab57, 0x11d8,
+	0x0078, 0x7040, 0xd0e4, 0x01b8, 0x00c6, 0x2061, 0x1982, 0x7048,
+	0x2062, 0x704c, 0x6006, 0x7050, 0x600a, 0x7054, 0x600e, 0x00ce,
+	0x703c, 0x2069, 0x0140, 0x9005, 0x1110, 0x2001, 0x0001, 0x6886,
+	0x2069, 0x1800, 0x68b6, 0x7040, 0xb85e, 0x7048, 0xb862, 0x704c,
+	0xb866, 0x20e1, 0x0000, 0x2099, 0x0276, 0xb8c4, 0x20e8, 0xb8c8,
+	0x9088, 0x000a, 0x21a0, 0x20a9, 0x0004, 0x4003, 0x2099, 0x027a,
+	0x9088, 0x0006, 0x21a0, 0x20a9, 0x0004, 0x4003, 0x2069, 0x0200,
+	0x6817, 0x0001, 0x7040, 0xb86a, 0x7144, 0xb96e, 0x7048, 0xb872,
+	0x7050, 0xb876, 0x2069, 0x0200, 0x6817, 0x0000, 0xb8a0, 0x9086,
+	0x007e, 0x1110, 0x7144, 0xb96e, 0x9182, 0x0211, 0x1218, 0x2009,
+	0x0008, 0x0400, 0x9182, 0x0259, 0x1218, 0x2009, 0x0007, 0x00d0,
+	0x9182, 0x02c1, 0x1218, 0x2009, 0x0006, 0x00a0, 0x9182, 0x0349,
+	0x1218, 0x2009, 0x0005, 0x0070, 0x9182, 0x0421, 0x1218, 0x2009,
+	0x0004, 0x0040, 0x9182, 0x0581, 0x1218, 0x2009, 0x0003, 0x0010,
+	0x2009, 0x0002, 0xb992, 0x014e, 0x013e, 0x015e, 0x00de, 0x0005,
+	0x0016, 0x0026, 0x00e6, 0x2071, 0x0260, 0x7034, 0xb896, 0x703c,
+	0xb89a, 0x7054, 0xb89e, 0x0036, 0xbbd4, 0xc384, 0xba00, 0x2009,
+	0x1867, 0x210c, 0xd0bc, 0x0120, 0xd1ec, 0x0110, 0xc2ad, 0x0008,
+	0xc2ac, 0xd0c4, 0x0148, 0xd1e4, 0x0138, 0xc2bd, 0xd0cc, 0x0128,
+	0xd38c, 0x1108, 0xc385, 0x0008, 0xc2bc, 0xba02, 0xbbd6, 0x003e,
+	0x00ee, 0x002e, 0x001e, 0x0005, 0x0096, 0x0126, 0x2091, 0x8000,
+	0xb8a4, 0x904d, 0x0578, 0xa900, 0x81ff, 0x15c0, 0xaa04, 0x9282,
+	0x0010, 0x16c8, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x8906, 0x8006,
+	0x8007, 0x908c, 0x003f, 0x21e0, 0x9084, 0xffc0, 0x9080, 0x0004,
+	0x2098, 0x2009, 0x0010, 0x20a9, 0x0001, 0x4002, 0x9086, 0xffff,
+	0x0120, 0x8109, 0x1dd0, 0x080c, 0x0d7d, 0x3c00, 0x20e8, 0x3300,
+	0x8001, 0x20a0, 0x4604, 0x8210, 0xaa06, 0x01de, 0x01ce, 0x014e,
+	0x013e, 0x0060, 0x080c, 0x103a, 0x0170, 0x2900, 0xb8a6, 0xa803,
+	0x0000, 0x080c, 0x68b0, 0xa807, 0x0001, 0xae12, 0x9085, 0x0001,
+	0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0126, 0x2091, 0x8000,
+	0x0096, 0xb8a4, 0x904d, 0x0188, 0xa800, 0x9005, 0x1150, 0x080c,
+	0x68bf, 0x1158, 0xa804, 0x908a, 0x0002, 0x0218, 0x8001, 0xa806,
+	0x0020, 0x080c, 0x106c, 0xb8a7, 0x0000, 0x009e, 0x012e, 0x0005,
+	0x0096, 0x00c6, 0xb888, 0x9005, 0x1904, 0x67a9, 0xb8d0, 0x904d,
+	0x0904, 0x67a9, 0x080c, 0xabc4, 0x0904, 0x67a5, 0x8210, 0xba3e,
+	0xa800, 0xb8d2, 0x9005, 0x1108, 0xb8ce, 0x2b00, 0x6012, 0x2900,
+	0x6016, 0x6023, 0x0003, 0x600b, 0xffff, 0x6007, 0x0040, 0xa878,
+	0x605e, 0xa880, 0x9084, 0x00ff, 0x6066, 0xa883, 0x0000, 0xa87c,
+	0xd0ac, 0x01c8, 0xc0dd, 0xa87e, 0xa888, 0x8001, 0x1568, 0xa816,
+	0xa864, 0x9094, 0x00f7, 0x9296, 0x0011, 0x1530, 0x9084, 0x00ff,
+	0xc0bd, 0x601e, 0xa8ac, 0xaab0, 0xa836, 0xaa3a, 0x2001, 0x8004,
+	0x6003, 0x0004, 0x0030, 0x080c, 0x1c30, 0x2001, 0x8004, 0x6003,
+	0x0002, 0x6046, 0x2001, 0x0010, 0x2c08, 0x080c, 0xa887, 0xb838,
+	0xba3c, 0x9202, 0x0a04, 0x6756, 0x0020, 0x82ff, 0x1110, 0xb88b,
+	0x0001, 0x00ce, 0x009e, 0x0005, 0x080c, 0x1731, 0x601c, 0xc0bd,
+	0x601e, 0x08e0, 0x00b6, 0x0096, 0x0016, 0x20a9, 0x0800, 0x900e,
+	0x0016, 0x080c, 0x6625, 0x1158, 0xb8d0, 0x904d, 0x0140, 0x3e00,
+	0x9086, 0x0002, 0x1118, 0xb800, 0xd0bc, 0x1108, 0x0041, 0x001e,
+	0x8108, 0x1f04, 0x67b8, 0x001e, 0x00be, 0x009e, 0x0005, 0x0096,
+	0x0016, 0xb8d0, 0x904d, 0x0188, 0xa800, 0xb8d2, 0x9005, 0x1108,
+	0xb8ce, 0x9006, 0xa802, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000,
+	0x080c, 0xcb36, 0x080c, 0x6d80, 0x0c60, 0x001e, 0x009e, 0x0005,
+	0x0086, 0x9046, 0xb8d0, 0x904d, 0x0198, 0xa86c, 0x9406, 0x1118,
+	0xa870, 0x9506, 0x0128, 0x2940, 0xa800, 0x904d, 0x0148, 0x0ca8,
+	0xa800, 0x88ff, 0x1110, 0xb8d2, 0x0008, 0xa002, 0xa803, 0x0000,
+	0x008e, 0x0005, 0x901e, 0x0010, 0x2019, 0x0001, 0x00e6, 0x0096,
+	0x00c6, 0x0086, 0x0026, 0x0126, 0x2091, 0x8000, 0x2071, 0x19e7,
+	0x9046, 0x7028, 0x9065, 0x01e8, 0x6014, 0x2068, 0x83ff, 0x0120,
+	0x605c, 0x9606, 0x0158, 0x0030, 0xa86c, 0x9406, 0x1118, 0xa870,
+	0x9506, 0x0120, 0x2c40, 0x600c, 0x2060, 0x0c60, 0x600c, 0x0006,
+	0x0066, 0x2830, 0x080c, 0x9fa2, 0x006e, 0x000e, 0x83ff, 0x0508,
+	0x0c08, 0x9046, 0xb8d0, 0x904d, 0x01e0, 0x83ff, 0x0120, 0xa878,
+	0x9606, 0x0158, 0x0030, 0xa86c, 0x9406, 0x1118, 0xa870, 0x9506,
+	0x0120, 0x2940, 0xa800, 0x2048, 0x0c70, 0xb8d0, 0xaa00, 0x0026,
+	0x9906, 0x1110, 0xbad2, 0x0008, 0xa202, 0x000e, 0x83ff, 0x0108,
+	0x0c10, 0x002e, 0x008e, 0x00ce, 0x009e, 0x00ee, 0x0005, 0x9016,
+	0x0489, 0x1110, 0x2011, 0x0001, 0x0005, 0x080c, 0x6914, 0x0128,
+	0x080c, 0xc8f9, 0x0010, 0x9085, 0x0001, 0x0005, 0x080c, 0x6914,
+	0x0128, 0x080c, 0xc89a, 0x0010, 0x9085, 0x0001, 0x0005, 0x080c,
+	0x6914, 0x0128, 0x080c, 0xc8f6, 0x0010, 0x9085, 0x0001, 0x0005,
+	0x080c, 0x6914, 0x0128, 0x080c, 0xc8b9, 0x0010, 0x9085, 0x0001,
+	0x0005, 0x080c, 0x6914, 0x0128, 0x080c, 0xc93a, 0x0010, 0x9085,
+	0x0001, 0x0005, 0xb8a4, 0x900d, 0x1118, 0x9085, 0x0001, 0x0005,
 	0x0136, 0x01c6, 0xa800, 0x9005, 0x11b8, 0x890e, 0x810e, 0x810f,
 	0x9184, 0x003f, 0x20e0, 0x9184, 0xffc0, 0x9080, 0x0004, 0x2098,
 	0x20a9, 0x0001, 0x2009, 0x0010, 0x4002, 0x9606, 0x0128, 0x8109,
-	0x1dd8, 0x9085, 0x0001, 0x0068, 0x0146, 0x01d6, 0x3300, 0x8001,
-	0x20a0, 0x3c00, 0x20e8, 0x2001, 0xffff, 0x4004, 0x01de, 0x014e,
-	0x9006, 0x01ce, 0x013e, 0x0005, 0x0096, 0x0126, 0x2091, 0x8000,
-	0xb8a4, 0x904d, 0x1128, 0x080c, 0x103a, 0x0168, 0x2900, 0xb8a6,
-	0x080c, 0x68a9, 0xa803, 0x0001, 0xa807, 0x0000, 0x9085, 0x0001,
-	0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0096, 0x0126, 0x2091,
-	0x8000, 0xb8a4, 0x904d, 0x0130, 0xb8a7, 0x0000, 0x080c, 0x106c,
-	0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0xb89c, 0xd0a4, 0x0005,
-	0x00b6, 0x00f6, 0x080c, 0x74d5, 0x01b0, 0x71c4, 0x81ff, 0x1198,
-	0x71dc, 0xd19c, 0x0180, 0x2001, 0x007e, 0x9080, 0x1000, 0x2004,
-	0x905d, 0x0148, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1118,
-	0xb800, 0xc0ed, 0xb802, 0x2079, 0x1847, 0x7804, 0xd0a4, 0x01d0,
-	0x0156, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x661e, 0x1168,
-	0xb804, 0x9084, 0xff00, 0x8007, 0x9096, 0x0004, 0x0118, 0x9086,
-	0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802, 0x001e, 0x8108, 0x1f04,
-	0x6934, 0x015e, 0x080c, 0x6a19, 0x0120, 0x2001, 0x1985, 0x200c,
-	0x0038, 0x2079, 0x1847, 0x7804, 0xd0a4, 0x0130, 0x2009, 0x07d0,
-	0x2011, 0x695f, 0x080c, 0x86d7, 0x00fe, 0x00be, 0x0005, 0x00b6,
-	0x2011, 0x695f, 0x080c, 0x860d, 0x080c, 0x6a19, 0x01d8, 0x2001,
-	0x107e, 0x2004, 0x2058, 0xb900, 0xc1ec, 0xb902, 0x080c, 0x6a57,
-	0x0130, 0x2009, 0x07d0, 0x2011, 0x695f, 0x080c, 0x86d7, 0x00e6,
-	0x2071, 0x1800, 0x9006, 0x707e, 0x7060, 0x7082, 0x080c, 0x2fb2,
-	0x00ee, 0x04d0, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x900e, 0x0016,
-	0x080c, 0x661e, 0x1558, 0xb800, 0xd0ec, 0x0540, 0x0046, 0xbaa0,
-	0x2220, 0x9006, 0x2009, 0x0029, 0x080c, 0xe29e, 0xb800, 0xc0e5,
-	0xc0ec, 0xb802, 0x080c, 0x6a53, 0x2001, 0x0707, 0x1128, 0xb804,
-	0x9084, 0x00ff, 0x9085, 0x0700, 0xb806, 0x080c, 0xa872, 0x2019,
-	0x0029, 0x080c, 0x9374, 0x0076, 0x903e, 0x080c, 0x9246, 0x900e,
-	0x080c, 0xdfc0, 0x007e, 0x004e, 0x080c, 0xa88e, 0x001e, 0x8108,
-	0x1f04, 0x6987, 0x00ce, 0x015e, 0x00be, 0x0005, 0x00b6, 0x6010,
-	0x2058, 0xb800, 0xc0ec, 0xb802, 0x00be, 0x0005, 0x00b6, 0x00c6,
-	0x0096, 0x080c, 0x1053, 0x090c, 0x0d7d, 0x2958, 0x009e, 0x2001,
-	0x196b, 0x2b02, 0xb8af, 0x0000, 0x2009, 0x00ff, 0x080c, 0x603c,
+	0x1dd8, 0x9085, 0x0001, 0x0008, 0x9006, 0x01ce, 0x013e, 0x0005,
+	0x0146, 0x01d6, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0004, 0x20a0,
+	0x20a9, 0x0010, 0x2009, 0xffff, 0x4104, 0x01de, 0x014e, 0x0136,
+	0x01c6, 0xa800, 0x9005, 0x11b8, 0x890e, 0x810e, 0x810f, 0x9184,
+	0x003f, 0x20e0, 0x9184, 0xffc0, 0x9080, 0x0004, 0x2098, 0x20a9,
+	0x0001, 0x2009, 0x0010, 0x4002, 0x9606, 0x0128, 0x8109, 0x1dd8,
+	0x9085, 0x0001, 0x0068, 0x0146, 0x01d6, 0x3300, 0x8001, 0x20a0,
+	0x3c00, 0x20e8, 0x2001, 0xffff, 0x4004, 0x01de, 0x014e, 0x9006,
+	0x01ce, 0x013e, 0x0005, 0x0096, 0x0126, 0x2091, 0x8000, 0xb8a4,
+	0x904d, 0x1128, 0x080c, 0x103a, 0x0168, 0x2900, 0xb8a6, 0x080c,
+	0x68b0, 0xa803, 0x0001, 0xa807, 0x0000, 0x9085, 0x0001, 0x012e,
+	0x009e, 0x0005, 0x9006, 0x0cd8, 0x0096, 0x0126, 0x2091, 0x8000,
+	0xb8a4, 0x904d, 0x0130, 0xb8a7, 0x0000, 0x080c, 0x106c, 0x9085,
+	0x0001, 0x012e, 0x009e, 0x0005, 0xb89c, 0xd0a4, 0x0005, 0x00b6,
+	0x00f6, 0x080c, 0x74e9, 0x01b0, 0x71c4, 0x81ff, 0x1198, 0x71dc,
+	0xd19c, 0x0180, 0x2001, 0x007e, 0x9080, 0x1000, 0x2004, 0x905d,
+	0x0148, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1118, 0xb800,
+	0xc0ed, 0xb802, 0x2079, 0x1847, 0x7804, 0xd0a4, 0x01d0, 0x0156,
+	0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x6625, 0x1168, 0xb804,
+	0x9084, 0xff00, 0x8007, 0x9096, 0x0004, 0x0118, 0x9086, 0x0006,
+	0x1118, 0xb800, 0xc0ed, 0xb802, 0x001e, 0x8108, 0x1f04, 0x693b,
+	0x015e, 0x080c, 0x6a29, 0x0120, 0x2001, 0x1985, 0x200c, 0x0038,
+	0x2079, 0x1847, 0x7804, 0xd0a4, 0x0130, 0x2009, 0x07d0, 0x2011,
+	0x6966, 0x080c, 0x8708, 0x00fe, 0x00be, 0x0005, 0x00b6, 0x2011,
+	0x6966, 0x080c, 0x863e, 0x080c, 0x6a29, 0x01d8, 0x2001, 0x107e,
+	0x2004, 0x2058, 0xb900, 0xc1ec, 0xb902, 0x080c, 0x6a67, 0x0130,
+	0x2009, 0x07d0, 0x2011, 0x6966, 0x080c, 0x8708, 0x00e6, 0x2071,
+	0x1800, 0x9006, 0x707e, 0x7060, 0x7082, 0x080c, 0x2fb2, 0x00ee,
+	0x04d0, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c,
+	0x6625, 0x1558, 0xb800, 0xd0ec, 0x0540, 0x0046, 0xbaa0, 0x2220,
+	0x9006, 0x2009, 0x0029, 0x080c, 0xe2c9, 0xb800, 0xc0e5, 0xc0ec,
+	0xb802, 0x080c, 0x6a63, 0x2001, 0x0707, 0x1128, 0xb804, 0x9084,
+	0x00ff, 0x9085, 0x0700, 0xb806, 0x080c, 0xa896, 0x2019, 0x0029,
+	0x080c, 0x93a5, 0x0076, 0x903e, 0x080c, 0x9277, 0x900e, 0x080c,
+	0xdfeb, 0x007e, 0x004e, 0x080c, 0xa8b2, 0x001e, 0x8108, 0x1f04,
+	0x698e, 0x00ce, 0x015e, 0x00be, 0x0005, 0x00b6, 0x6010, 0x2058,
+	0xb800, 0xc0ec, 0xb802, 0x00be, 0x0005, 0x00b6, 0x00c6, 0x0096,
+	0x080c, 0x1053, 0x090c, 0x0d7d, 0x2958, 0x009e, 0x2001, 0x196b,
+	0x2b02, 0x8b07, 0x8006, 0x8006, 0x908c, 0x003f, 0xb9c6, 0x908c,
+	0xffc0, 0xb9ca, 0xb8af, 0x0000, 0x2009, 0x00ff, 0x080c, 0x6043,
 	0xb807, 0x0006, 0xb813, 0x00ff, 0xb817, 0xffff, 0xb86f, 0x0200,
 	0xb86c, 0xb893, 0x0002, 0xb8bb, 0x0520, 0xb8a3, 0x00ff, 0xb8af,
 	0x0000, 0x00ce, 0x00be, 0x0005, 0x7810, 0x00b6, 0x2058, 0xb800,
@@ -3194,85 +3196,85 @@
 	0x8000, 0x0006, 0xbaa0, 0x9290, 0x1000, 0x2204, 0x9b06, 0x190c,
 	0x0d7d, 0x000e, 0xba00, 0x9005, 0x0110, 0xc2fd, 0x0008, 0xc2fc,
 	0xba02, 0x002e, 0x012e, 0x0005, 0x2011, 0x1837, 0x2204, 0xd0cc,
-	0x0138, 0x2001, 0x1983, 0x200c, 0x2011, 0x6a49, 0x080c, 0x86d7,
-	0x0005, 0x2011, 0x6a49, 0x080c, 0x860d, 0x2011, 0x1837, 0x2204,
-	0xc0cc, 0x2012, 0x0005, 0x080c, 0x56d3, 0xd0ac, 0x0005, 0x080c,
-	0x56d3, 0xd0a4, 0x0005, 0x0016, 0xb904, 0x9184, 0x00ff, 0x908e,
+	0x0138, 0x2001, 0x1983, 0x200c, 0x2011, 0x6a59, 0x080c, 0x8708,
+	0x0005, 0x2011, 0x6a59, 0x080c, 0x863e, 0x2011, 0x1837, 0x2204,
+	0xc0cc, 0x2012, 0x0005, 0x080c, 0x56da, 0xd0ac, 0x0005, 0x080c,
+	0x56da, 0xd0a4, 0x0005, 0x0016, 0xb904, 0x9184, 0x00ff, 0x908e,
 	0x0006, 0x001e, 0x0005, 0x0016, 0xb904, 0x9184, 0xff00, 0x8007,
-	0x908e, 0x0006, 0x001e, 0x0005, 0x00b6, 0x00f6, 0x080c, 0xcf2e,
+	0x908e, 0x0006, 0x001e, 0x0005, 0x00b6, 0x00f6, 0x080c, 0xcf52,
 	0x0158, 0x70dc, 0x9084, 0x0028, 0x0138, 0x2001, 0x107f, 0x2004,
 	0x905d, 0x0110, 0xb8d4, 0xd094, 0x00fe, 0x00be, 0x0005, 0x2071,
 	0x1910, 0x7003, 0x0001, 0x7007, 0x0000, 0x9006, 0x7012, 0x7016,
 	0x701a, 0x701e, 0x700a, 0x7046, 0x2001, 0x1947, 0x2003, 0x0000,
 	0x0005, 0x0016, 0x00e6, 0x2071, 0x1948, 0x900e, 0x710a, 0x080c,
-	0x56d3, 0xd0fc, 0x1140, 0x080c, 0x56d3, 0x900e, 0xd09c, 0x0108,
+	0x56da, 0xd0fc, 0x1140, 0x080c, 0x56da, 0x900e, 0xd09c, 0x0108,
 	0x8108, 0x7102, 0x00f8, 0x2001, 0x1867, 0x200c, 0x9184, 0x0007,
-	0x0002, 0x6a9b, 0x6a9b, 0x6a9b, 0x6a9b, 0x6a9b, 0x6ab1, 0x6abf,
-	0x6a9b, 0x7003, 0x0003, 0x2009, 0x1868, 0x210c, 0x9184, 0xff00,
+	0x0002, 0x6aab, 0x6aab, 0x6aab, 0x6aab, 0x6aab, 0x6ac1, 0x6acf,
+	0x6aab, 0x7003, 0x0003, 0x2009, 0x1868, 0x210c, 0x9184, 0xff00,
 	0x8007, 0x9005, 0x1110, 0x2001, 0x0002, 0x7006, 0x0018, 0x7003,
 	0x0005, 0x0c88, 0x00ee, 0x001e, 0x0005, 0x00e6, 0x2071, 0x0050,
 	0x684c, 0x9005, 0x1150, 0x00e6, 0x2071, 0x1910, 0x7028, 0xc085,
 	0x702a, 0x00ee, 0x9085, 0x0001, 0x0488, 0x6844, 0x9005, 0x0158,
-	0x080c, 0x784b, 0x6a60, 0x9200, 0x7002, 0x6864, 0x9101, 0x7006,
+	0x080c, 0x785f, 0x6a60, 0x9200, 0x7002, 0x6864, 0x9101, 0x7006,
 	0x9006, 0x7012, 0x7016, 0x6860, 0x7002, 0x6864, 0x7006, 0x6868,
 	0x700a, 0x686c, 0x700e, 0x6844, 0x9005, 0x1110, 0x7012, 0x7016,
 	0x684c, 0x701a, 0x701c, 0x9085, 0x0040, 0x701e, 0x7037, 0x0019,
 	0x702b, 0x0001, 0x00e6, 0x2071, 0x1910, 0x7028, 0xc084, 0x702a,
 	0x7007, 0x0001, 0x700b, 0x0000, 0x00ee, 0x9006, 0x00ee, 0x0005,
-	0x00e6, 0x0026, 0x2071, 0x1948, 0x7000, 0x9015, 0x0904, 0x6d75,
-	0x9286, 0x0003, 0x0904, 0x6c05, 0x9286, 0x0005, 0x0904, 0x6c05,
-	0x2071, 0x1877, 0xa87c, 0x9005, 0x0904, 0x6b66, 0x7140, 0xa868,
-	0x9102, 0x0a04, 0x6d75, 0xa878, 0xd084, 0x15d8, 0xa853, 0x0019,
+	0x00e6, 0x0026, 0x2071, 0x1948, 0x7000, 0x9015, 0x0904, 0x6d85,
+	0x9286, 0x0003, 0x0904, 0x6c15, 0x9286, 0x0005, 0x0904, 0x6c15,
+	0x2071, 0x1877, 0xa87c, 0x9005, 0x0904, 0x6b76, 0x7140, 0xa868,
+	0x9102, 0x0a04, 0x6d85, 0xa878, 0xd084, 0x15d8, 0xa853, 0x0019,
 	0x2001, 0x8023, 0xa84e, 0x2071, 0x1910, 0x701c, 0x9005, 0x1904,
-	0x6f18, 0x0e04, 0x6f86, 0x2071, 0x0000, 0xa850, 0x7032, 0xa84c,
+	0x6f28, 0x0e04, 0x6f96, 0x2071, 0x0000, 0xa850, 0x7032, 0xa84c,
 	0x7082, 0xa870, 0x7086, 0xa86c, 0x708a, 0xa880, 0x708e, 0x7036,
 	0x0146, 0x01d6, 0x0136, 0x01c6, 0x0156, 0x20e9, 0x0000, 0x20a1,
 	0x002a, 0xa868, 0x20a8, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0021,
 	0x2098, 0x4003, 0x015e, 0x01ce, 0x013e, 0x01de, 0x014e, 0x2091,
 	0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11d6, 0x0804,
-	0x6be8, 0xa853, 0x001b, 0x2001, 0x8027, 0x0820, 0x7004, 0xd08c,
-	0x1904, 0x6d75, 0xa853, 0x001a, 0x2001, 0x8024, 0x0804, 0x6b2a,
-	0x00e6, 0x0026, 0x2071, 0x1948, 0x7000, 0x9015, 0x0904, 0x6d75,
-	0x9286, 0x0003, 0x0904, 0x6c05, 0x9286, 0x0005, 0x0904, 0x6c05,
-	0xa84f, 0x8022, 0xa853, 0x0018, 0x0804, 0x6bcd, 0xa868, 0xd0fc,
+	0x6bf8, 0xa853, 0x001b, 0x2001, 0x8027, 0x0820, 0x7004, 0xd08c,
+	0x1904, 0x6d85, 0xa853, 0x001a, 0x2001, 0x8024, 0x0804, 0x6b3a,
+	0x00e6, 0x0026, 0x2071, 0x1948, 0x7000, 0x9015, 0x0904, 0x6d85,
+	0x9286, 0x0003, 0x0904, 0x6c15, 0x9286, 0x0005, 0x0904, 0x6c15,
+	0xa84f, 0x8022, 0xa853, 0x0018, 0x0804, 0x6bdd, 0xa868, 0xd0fc,
 	0x11d8, 0x00e6, 0x0026, 0x2001, 0x1948, 0x2004, 0x9005, 0x0904,
-	0x6d75, 0xa87c, 0xd0bc, 0x1904, 0x6d75, 0xa978, 0xa874, 0x9105,
-	0x1904, 0x6d75, 0x2001, 0x1948, 0x2004, 0x0002, 0x6d75, 0x6bc9,
-	0x6c05, 0x6c05, 0x6d75, 0x6c05, 0x0005, 0xa868, 0xd0fc, 0x1500,
-	0x00e6, 0x0026, 0x2009, 0x1948, 0x210c, 0x81ff, 0x0904, 0x6d75,
-	0xa87c, 0xd0cc, 0x0904, 0x6d75, 0xa880, 0x9084, 0x00ff, 0x9086,
-	0x0001, 0x1904, 0x6d75, 0x9186, 0x0003, 0x0904, 0x6c05, 0x9186,
-	0x0005, 0x0904, 0x6c05, 0xa84f, 0x8021, 0xa853, 0x0017, 0x0028,
+	0x6d85, 0xa87c, 0xd0bc, 0x1904, 0x6d85, 0xa978, 0xa874, 0x9105,
+	0x1904, 0x6d85, 0x2001, 0x1948, 0x2004, 0x0002, 0x6d85, 0x6bd9,
+	0x6c15, 0x6c15, 0x6d85, 0x6c15, 0x0005, 0xa868, 0xd0fc, 0x1500,
+	0x00e6, 0x0026, 0x2009, 0x1948, 0x210c, 0x81ff, 0x0904, 0x6d85,
+	0xa87c, 0xd0cc, 0x0904, 0x6d85, 0xa880, 0x9084, 0x00ff, 0x9086,
+	0x0001, 0x1904, 0x6d85, 0x9186, 0x0003, 0x0904, 0x6c15, 0x9186,
+	0x0005, 0x0904, 0x6c15, 0xa84f, 0x8021, 0xa853, 0x0017, 0x0028,
 	0x0005, 0xa84f, 0x8020, 0xa853, 0x0016, 0x2071, 0x1910, 0x701c,
-	0x9005, 0x1904, 0x6f18, 0x0e04, 0x6f86, 0x2071, 0x0000, 0xa84c,
+	0x9005, 0x1904, 0x6f28, 0x0e04, 0x6f96, 0x2071, 0x0000, 0xa84c,
 	0x7082, 0xa850, 0x7032, 0xa86c, 0x7086, 0x7036, 0xa870, 0x708a,
 	0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11d6,
 	0x2071, 0x1800, 0x2011, 0x0001, 0xa804, 0x900d, 0x702c, 0x1158,
-	0xa802, 0x2900, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8522,
+	0xa802, 0x2900, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8553,
 	0x002e, 0x00ee, 0x0005, 0x0096, 0x2148, 0xa904, 0xa802, 0x8210,
 	0x2900, 0x81ff, 0x1dc8, 0x009e, 0x0c58, 0xa84f, 0x0000, 0x00f6,
 	0x2079, 0x0050, 0x2071, 0x1910, 0xa803, 0x0000, 0x7010, 0x9005,
-	0x1904, 0x6cfa, 0x782c, 0x908c, 0x0780, 0x190c, 0x70d2, 0x8004,
-	0x8004, 0x8004, 0x9084, 0x0003, 0x0002, 0x6c23, 0x6cfa, 0x6c48,
-	0x6c95, 0x080c, 0x0d7d, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804,
+	0x1904, 0x6d0a, 0x782c, 0x908c, 0x0780, 0x190c, 0x70e2, 0x8004,
+	0x8004, 0x8004, 0x9084, 0x0003, 0x0002, 0x6c33, 0x6d0a, 0x6c58,
+	0x6ca5, 0x080c, 0x0d7d, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804,
 	0x900d, 0x1170, 0x2071, 0x1a03, 0x703c, 0x9005, 0x1328, 0x2001,
 	0x1949, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005,
 	0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff,
-	0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8522, 0x0c10,
+	0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8553, 0x0c10,
 	0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x15a8, 0x7824,
 	0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c, 0x1170, 0x2009, 0x1830,
 	0x210c, 0x918a, 0x0020, 0x0240, 0x7022, 0x2001, 0x1dc0, 0x200c,
 	0x8108, 0x2102, 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c, 0xa802,
-	0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x8522, 0x782c,
-	0x9094, 0x0780, 0x190c, 0x70d2, 0xd0a4, 0x19c8, 0x2071, 0x1a03,
+	0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x8553, 0x782c,
+	0x9094, 0x0780, 0x190c, 0x70e2, 0xd0a4, 0x19c8, 0x2071, 0x1a03,
 	0x703c, 0x9005, 0x1328, 0x2001, 0x1949, 0x2004, 0x8005, 0x703e,
 	0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904,
 	0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70c0, 0x9200,
-	0x70c2, 0x080c, 0x8522, 0x0804, 0x6c4f, 0x0096, 0x00e6, 0x7824,
+	0x70c2, 0x080c, 0x8553, 0x0804, 0x6c5f, 0x0096, 0x00e6, 0x7824,
 	0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70c0,
-	0x8000, 0x70c2, 0x080c, 0x8522, 0x782c, 0x9094, 0x0780, 0x190c,
-	0x70d2, 0xd0a4, 0x1d60, 0x00ee, 0x782c, 0x9094, 0x0780, 0x190c,
-	0x70d2, 0xd09c, 0x11a0, 0x009e, 0x2900, 0x7822, 0xa804, 0x900d,
+	0x8000, 0x70c2, 0x080c, 0x8553, 0x782c, 0x9094, 0x0780, 0x190c,
+	0x70e2, 0xd0a4, 0x1d60, 0x00ee, 0x782c, 0x9094, 0x0780, 0x190c,
+	0x70e2, 0xd09c, 0x11a0, 0x009e, 0x2900, 0x7822, 0xa804, 0x900d,
 	0x1560, 0x2071, 0x1a03, 0x703c, 0x9005, 0x1328, 0x2001, 0x1949,
 	0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x009e,
 	0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110,
@@ -3280,85 +3282,85 @@
 	0x1a03, 0x703c, 0x9005, 0x1328, 0x2001, 0x1949, 0x2004, 0x8005,
 	0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016,
 	0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8,
-	0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8522, 0x00fe, 0x002e,
+	0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8553, 0x00fe, 0x002e,
 	0x00ee, 0x0005, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d,
 	0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d,
-	0x1904, 0x6d4f, 0x782c, 0x9094, 0x0780, 0x190c, 0x70d2, 0xd09c,
+	0x1904, 0x6d5f, 0x782c, 0x9094, 0x0780, 0x190c, 0x70e2, 0xd09c,
 	0x1198, 0x701c, 0x904d, 0x0180, 0x7010, 0x8001, 0x7012, 0x1108,
 	0x701a, 0xa800, 0x701e, 0x2900, 0x7822, 0x782c, 0x9094, 0x0780,
-	0x190c, 0x70d2, 0xd09c, 0x0d68, 0x782c, 0x9094, 0x0780, 0x190c,
-	0x70d2, 0xd0a4, 0x01b0, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800,
+	0x190c, 0x70e2, 0xd09c, 0x0d68, 0x782c, 0x9094, 0x0780, 0x190c,
+	0x70e2, 0xd0a4, 0x01b0, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800,
 	0x702c, 0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c,
-	0x8522, 0x782c, 0x9094, 0x0780, 0x190c, 0x70d2, 0xd0a4, 0x1d60,
+	0x8553, 0x782c, 0x9094, 0x0780, 0x190c, 0x70e2, 0xd0a4, 0x1d60,
 	0x00ee, 0x2071, 0x1a03, 0x703c, 0x9005, 0x1328, 0x2001, 0x1949,
 	0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x00e6,
 	0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210,
 	0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c,
-	0x8522, 0x00ee, 0x0804, 0x6d0a, 0xa868, 0xd0fc, 0x1560, 0x0096,
+	0x8553, 0x00ee, 0x0804, 0x6d1a, 0xa868, 0xd0fc, 0x1560, 0x0096,
 	0xa804, 0xa807, 0x0000, 0x904d, 0x190c, 0x0fec, 0x009e, 0x0018,
 	0xa868, 0xd0fc, 0x1500, 0x00e6, 0x0026, 0xa84f, 0x0000, 0x00f6,
 	0x2079, 0x0050, 0x2071, 0x1910, 0xa803, 0x0000, 0x7010, 0x9005,
-	0x1904, 0x6e92, 0x782c, 0x908c, 0x0780, 0x190c, 0x70d2, 0x8004,
-	0x8004, 0x8004, 0x9084, 0x0003, 0x0002, 0x6d94, 0x6e92, 0x6daf,
-	0x6e21, 0x080c, 0x0d7d, 0x0005, 0x2071, 0x1800, 0x2900, 0x7822,
+	0x1904, 0x6ea2, 0x782c, 0x908c, 0x0780, 0x190c, 0x70e2, 0x8004,
+	0x8004, 0x8004, 0x9084, 0x0003, 0x0002, 0x6da4, 0x6ea2, 0x6dbf,
+	0x6e31, 0x080c, 0x0d7d, 0x0005, 0x2071, 0x1800, 0x2900, 0x7822,
 	0xa804, 0x900d, 0x1120, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016,
 	0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8,
-	0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8522, 0x0c60, 0x2071,
-	0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1904, 0x6e10, 0x7830,
+	0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8553, 0x0c60, 0x2071,
+	0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1904, 0x6e20, 0x7830,
 	0xd0dc, 0x1120, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7824, 0x00e6,
 	0x2071, 0x0040, 0x712c, 0xd19c, 0x1170, 0x2009, 0x1830, 0x210c,
 	0x918a, 0x0020, 0x0240, 0x7022, 0x2001, 0x1dc0, 0x200c, 0x8108,
 	0x2102, 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c, 0xa802, 0x2900,
-	0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x8522, 0x782c, 0x9094,
-	0x0780, 0x190c, 0x70d2, 0xd0a4, 0x19c8, 0x0e04, 0x6e07, 0x7838,
+	0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x8553, 0x782c, 0x9094,
+	0x0780, 0x190c, 0x70e2, 0xd0a4, 0x19c8, 0x0e04, 0x6e17, 0x7838,
 	0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833,
 	0x0013, 0x00de, 0x2001, 0x1921, 0x200c, 0xc184, 0x2102, 0x2091,
 	0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11d6, 0x2009,
 	0x1947, 0x200b, 0x0000, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2001,
 	0x1921, 0x200c, 0xc185, 0x2102, 0x00fe, 0x002e, 0x00ee, 0x0005,
 	0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff,
-	0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8522, 0x0804,
-	0x6dbe, 0x0096, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c,
-	0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x8522,
-	0x782c, 0x9094, 0x0780, 0x190c, 0x70d2, 0xd0a4, 0x1d60, 0x00ee,
-	0x0e04, 0x6e65, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069,
+	0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8553, 0x0804,
+	0x6dce, 0x0096, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c,
+	0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c, 0x8553,
+	0x782c, 0x9094, 0x0780, 0x190c, 0x70e2, 0xd0a4, 0x1d60, 0x00ee,
+	0x0e04, 0x6e75, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069,
 	0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x7044, 0xc084, 0x7046,
 	0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11d6,
 	0x2009, 0x1947, 0x200b, 0x0000, 0x782c, 0x9094, 0x0780, 0x190c,
-	0x70d2, 0xd09c, 0x1170, 0x009e, 0x2900, 0x7822, 0xa804, 0x900d,
+	0x70e2, 0xd09c, 0x1170, 0x009e, 0x2900, 0x7822, 0xa804, 0x900d,
 	0x11e0, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7044, 0xc085, 0x7046,
 	0x0c58, 0x009e, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d,
 	0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d,
 	0x1120, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016,
 	0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8,
-	0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8522, 0x00fe, 0x002e,
+	0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c, 0x8553, 0x00fe, 0x002e,
 	0x00ee, 0x0005, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d,
 	0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d,
-	0x1904, 0x6f03, 0x782c, 0x9094, 0x0780, 0x190c, 0x70d2, 0xd09c,
+	0x1904, 0x6f13, 0x782c, 0x9094, 0x0780, 0x190c, 0x70e2, 0xd09c,
 	0x11b0, 0x701c, 0x904d, 0x0198, 0xa84c, 0x9005, 0x1180, 0x7010,
 	0x8001, 0x7012, 0x1108, 0x701a, 0xa800, 0x701e, 0x2900, 0x7822,
-	0x782c, 0x9094, 0x0780, 0x190c, 0x70d2, 0xd09c, 0x0d50, 0x782c,
-	0x9094, 0x0780, 0x190c, 0x70d2, 0xd0a4, 0x05c8, 0x00e6, 0x7824,
+	0x782c, 0x9094, 0x0780, 0x190c, 0x70e2, 0xd09c, 0x0d50, 0x782c,
+	0x9094, 0x0780, 0x190c, 0x70e2, 0xd0a4, 0x05c8, 0x00e6, 0x7824,
 	0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70c0,
-	0x8000, 0x70c2, 0x080c, 0x8522, 0x782c, 0x9094, 0x0780, 0x190c,
-	0x70d2, 0xd0a4, 0x1d60, 0x00ee, 0x0e04, 0x6efc, 0x7838, 0x7938,
+	0x8000, 0x70c2, 0x080c, 0x8553, 0x782c, 0x9094, 0x0780, 0x190c,
+	0x70e2, 0xd0a4, 0x1d60, 0x00ee, 0x0e04, 0x6f0c, 0x7838, 0x7938,
 	0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013,
 	0x00de, 0x7044, 0xc084, 0x7046, 0x2091, 0x4080, 0x2001, 0x0089,
 	0x2004, 0xd084, 0x190c, 0x11d6, 0x2009, 0x1947, 0x200b, 0x0000,
 	0x00fe, 0x002e, 0x00ee, 0x0005, 0x7044, 0xc085, 0x7046, 0x00fe,
 	0x002e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1800, 0x9016, 0x702c,
 	0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e,
-	0x70c0, 0x9200, 0x70c2, 0x080c, 0x8522, 0x00ee, 0x0804, 0x6ea2,
+	0x70c0, 0x9200, 0x70c2, 0x080c, 0x8553, 0x00ee, 0x0804, 0x6eb2,
 	0x2071, 0x1910, 0xa803, 0x0000, 0x2908, 0x7010, 0x8000, 0x7012,
 	0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148,
-	0xa804, 0x900d, 0x1128, 0x1e04, 0x6f43, 0x002e, 0x00ee, 0x0005,
+	0xa804, 0x900d, 0x1128, 0x1e04, 0x6f53, 0x002e, 0x00ee, 0x0005,
 	0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210,
 	0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70c0, 0x9200, 0x70c2, 0x080c,
-	0x8522, 0x0e04, 0x6f2d, 0x2071, 0x1910, 0x701c, 0x2048, 0xa84c,
+	0x8553, 0x0e04, 0x6f3d, 0x2071, 0x1910, 0x701c, 0x2048, 0xa84c,
 	0x900d, 0x0d18, 0x2071, 0x0000, 0x7182, 0xa850, 0x7032, 0xa86c,
 	0x7086, 0x7036, 0xa870, 0x708a, 0xa850, 0x9082, 0x0019, 0x1278,
 	0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11d6,
-	0x2071, 0x1910, 0x080c, 0x70be, 0x002e, 0x00ee, 0x0005, 0xa850,
+	0x2071, 0x1910, 0x080c, 0x70ce, 0x002e, 0x00ee, 0x0005, 0xa850,
 	0x9082, 0x001c, 0x1e68, 0xa880, 0x708e, 0x7036, 0x0146, 0x01d6,
 	0x0136, 0x01c6, 0x0156, 0x20e9, 0x0000, 0x20a1, 0x002a, 0xa868,
 	0x20a8, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0021, 0x2098, 0x4003,
@@ -3367,23 +3369,23 @@
 	0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d,
 	0x1118, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016, 0x702c,
 	0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e,
-	0x70c0, 0x9200, 0x70c2, 0x080c, 0x8522, 0x002e, 0x00ee, 0x0005,
+	0x70c0, 0x9200, 0x70c2, 0x080c, 0x8553, 0x002e, 0x00ee, 0x0005,
 	0x0006, 0xa87c, 0x0006, 0xa867, 0x0103, 0x20a9, 0x001c, 0xa860,
 	0x20e8, 0xa85c, 0x9080, 0x001d, 0x20a0, 0x9006, 0x4004, 0x000e,
 	0x9084, 0x00ff, 0xa87e, 0x000e, 0xa87a, 0xa982, 0x0005, 0x2071,
-	0x1910, 0x7004, 0x0002, 0x6fd1, 0x6fd2, 0x70bd, 0x6fd2, 0x0d7d,
-	0x70bd, 0x0005, 0x2001, 0x1948, 0x2004, 0x0002, 0x6fdc, 0x6fdc,
-	0x7056, 0x7057, 0x6fdc, 0x7057, 0x0126, 0x2091, 0x8000, 0x1e0c,
-	0x70dd, 0x701c, 0x904d, 0x0508, 0xa84c, 0x9005, 0x0904, 0x7027,
-	0x0e04, 0x7005, 0xa94c, 0x2071, 0x0000, 0x7182, 0xa850, 0x7032,
+	0x1910, 0x7004, 0x0002, 0x6fe1, 0x6fe2, 0x70cd, 0x6fe2, 0x0d7d,
+	0x70cd, 0x0005, 0x2001, 0x1948, 0x2004, 0x0002, 0x6fec, 0x6fec,
+	0x7066, 0x7067, 0x6fec, 0x7067, 0x0126, 0x2091, 0x8000, 0x1e0c,
+	0x70ed, 0x701c, 0x904d, 0x0508, 0xa84c, 0x9005, 0x0904, 0x7037,
+	0x0e04, 0x7015, 0xa94c, 0x2071, 0x0000, 0x7182, 0xa850, 0x7032,
 	0xa86c, 0x7086, 0x7036, 0xa870, 0x708a, 0xa850, 0x9082, 0x0019,
 	0x1278, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
-	0x11d6, 0x2071, 0x1910, 0x080c, 0x70be, 0x012e, 0x0804, 0x7055,
+	0x11d6, 0x2071, 0x1910, 0x080c, 0x70ce, 0x012e, 0x0804, 0x7065,
 	0xa850, 0x9082, 0x001c, 0x1e68, 0xa880, 0x708e, 0x7036, 0x0146,
 	0x01d6, 0x0136, 0x01c6, 0x0156, 0x20e9, 0x0000, 0x20a1, 0x002a,
 	0xa868, 0x20a8, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0021, 0x2098,
 	0x4003, 0x015e, 0x01ce, 0x013e, 0x01de, 0x014e, 0x0890, 0x2001,
-	0x005b, 0x2004, 0x9094, 0x0780, 0x190c, 0x70d2, 0xd09c, 0x2071,
+	0x005b, 0x2004, 0x9094, 0x0780, 0x190c, 0x70e2, 0xd09c, 0x2071,
 	0x1910, 0x1510, 0x2071, 0x1910, 0x700f, 0x0001, 0xa964, 0x9184,
 	0x00ff, 0x9086, 0x0003, 0x1130, 0x810f, 0x918c, 0x00ff, 0x8101,
 	0x0108, 0x710e, 0x2900, 0x00d6, 0x2069, 0x0050, 0x6822, 0x00de,
@@ -3392,10 +3394,10 @@
 	0x2008, 0x2069, 0x1a03, 0x683c, 0x9005, 0x0760, 0x0158, 0x9186,
 	0x0003, 0x0540, 0x2001, 0x1815, 0x2004, 0x2009, 0x1b4e, 0x210c,
 	0x9102, 0x1500, 0x0126, 0x2091, 0x8000, 0x2069, 0x0050, 0x693c,
-	0x6838, 0x9106, 0x0190, 0x0e04, 0x7089, 0x2069, 0x0000, 0x6837,
+	0x6838, 0x9106, 0x0190, 0x0e04, 0x7099, 0x2069, 0x0000, 0x6837,
 	0x8040, 0x6833, 0x0012, 0x6883, 0x8040, 0x2091, 0x4080, 0x2001,
 	0x0089, 0x2004, 0xd084, 0x190c, 0x11d6, 0x2069, 0x1a03, 0x683f,
-	0xffff, 0x012e, 0x00de, 0x0126, 0x2091, 0x8000, 0x1e0c, 0x7153,
+	0xffff, 0x012e, 0x00de, 0x0126, 0x2091, 0x8000, 0x1e0c, 0x7163,
 	0x701c, 0x904d, 0x0540, 0x2001, 0x005b, 0x2004, 0x9094, 0x0780,
 	0x15c9, 0xd09c, 0x1500, 0x2071, 0x1910, 0x700f, 0x0001, 0xa964,
 	0x9184, 0x00ff, 0x9086, 0x0003, 0x1130, 0x810f, 0x918c, 0x00ff,
@@ -3404,7 +3406,7 @@
 	0x9005, 0x1108, 0x701a, 0x012e, 0x0005, 0x0005, 0x0126, 0x2091,
 	0x8000, 0x701c, 0x904d, 0x0160, 0x7010, 0x8001, 0x7012, 0xa800,
 	0x701e, 0x9005, 0x1108, 0x701a, 0x012e, 0x080c, 0x106c, 0x0005,
-	0x012e, 0x0005, 0x2091, 0x8000, 0x0e04, 0x70d4, 0x0006, 0x0016,
+	0x012e, 0x0005, 0x2091, 0x8000, 0x0e04, 0x70e4, 0x0006, 0x0016,
 	0x2001, 0x8004, 0x0006, 0x0804, 0x0d86, 0x0096, 0x00f6, 0x2079,
 	0x0050, 0x7044, 0xd084, 0x01e0, 0xc084, 0x7046, 0x7838, 0x7938,
 	0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013,
@@ -3416,7 +3418,7 @@
 	0x2009, 0x1830, 0x210c, 0x918a, 0x0020, 0x0240, 0x7022, 0x2001,
 	0x1dc0, 0x200c, 0x8108, 0x2102, 0x00ee, 0x0058, 0x00ee, 0x2048,
 	0x702c, 0xa802, 0x2900, 0x702e, 0x70c0, 0x8000, 0x70c2, 0x080c,
-	0x8522, 0x782c, 0x9094, 0x0780, 0x190c, 0x70d2, 0xd0a4, 0x19c8,
+	0x8553, 0x782c, 0x9094, 0x0780, 0x190c, 0x70e2, 0xd0a4, 0x19c8,
 	0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836,
 	0x6833, 0x0013, 0x00de, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
 	0xd084, 0x190c, 0x11d6, 0x2009, 0x1947, 0x200b, 0x0000, 0x00ee,
@@ -3424,3776 +3426,3780 @@
 	0x01b8, 0xc084, 0x7046, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6,
 	0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x2091, 0x4080,
 	0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11d6, 0x00fe, 0x0005,
-	0x782c, 0x9094, 0x0780, 0x190c, 0x70d2, 0xd0a4, 0x0db8, 0x00e6,
+	0x782c, 0x9094, 0x0780, 0x190c, 0x70e2, 0xd0a4, 0x0db8, 0x00e6,
 	0x2071, 0x1800, 0x7824, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e,
-	0x70c0, 0x8000, 0x70c2, 0x080c, 0x8522, 0x782c, 0x9094, 0x0780,
-	0x190c, 0x70d2, 0xd0a4, 0x1d70, 0x00d6, 0x2069, 0x0050, 0x693c,
+	0x70c0, 0x8000, 0x70c2, 0x080c, 0x8553, 0x782c, 0x9094, 0x0780,
+	0x190c, 0x70e2, 0xd0a4, 0x1d70, 0x00d6, 0x2069, 0x0050, 0x693c,
 	0x2069, 0x1948, 0x6808, 0x690a, 0x2069, 0x1a03, 0x9102, 0x1118,
 	0x683c, 0x9005, 0x1328, 0x2001, 0x1949, 0x200c, 0x810d, 0x693e,
 	0x00de, 0x00ee, 0x00fe, 0x0005, 0x7098, 0x908a, 0x0029, 0x1a0c,
 	0x0d7d, 0x9082, 0x001d, 0x003b, 0x0026, 0x2011, 0x1e00, 0x080c,
-	0x2a44, 0x002e, 0x0005, 0x727b, 0x7205, 0x7221, 0x7249, 0x726a,
-	0x72aa, 0x72bc, 0x7221, 0x7292, 0x71c0, 0x71ee, 0x71bf, 0x0005,
+	0x2a44, 0x002e, 0x0005, 0x728f, 0x7215, 0x7231, 0x725b, 0x727e,
+	0x72be, 0x72d0, 0x7231, 0x72a6, 0x71d0, 0x71fe, 0x71cf, 0x0005,
 	0x00d6, 0x2069, 0x0200, 0x6804, 0x9005, 0x1180, 0x6808, 0x9005,
 	0x1518, 0x709b, 0x0028, 0x2069, 0x198f, 0x2d04, 0x7002, 0x080c,
-	0x7617, 0x6028, 0x9085, 0x0600, 0x602a, 0x00b0, 0x709b, 0x0028,
+	0x762b, 0x6028, 0x9085, 0x0600, 0x602a, 0x00b0, 0x709b, 0x0028,
 	0x2069, 0x198f, 0x2d04, 0x7002, 0x6028, 0x9085, 0x0600, 0x602a,
 	0x00e6, 0x0036, 0x0046, 0x0056, 0x2071, 0x1a6b, 0x080c, 0x1ab5,
 	0x005e, 0x004e, 0x003e, 0x00ee, 0x00de, 0x0005, 0x00d6, 0x2069,
 	0x0200, 0x6804, 0x9005, 0x1178, 0x6808, 0x9005, 0x1160, 0x709b,
-	0x0028, 0x2069, 0x198f, 0x2d04, 0x7002, 0x080c, 0x76ba, 0x6028,
+	0x0028, 0x2069, 0x198f, 0x2d04, 0x7002, 0x080c, 0x76ce, 0x6028,
 	0x9085, 0x0600, 0x602a, 0x00de, 0x0005, 0x0006, 0x2001, 0x0090,
-	0x080c, 0x2a0a, 0x000e, 0x6124, 0xd1e4, 0x1190, 0x080c, 0x732d,
+	0x080c, 0x2a0a, 0x000e, 0x6124, 0xd1e4, 0x1190, 0x080c, 0x7341,
 	0xd1d4, 0x1160, 0xd1dc, 0x1138, 0xd1cc, 0x0150, 0x709b, 0x0020,
-	0x080c, 0x732d, 0x0028, 0x709b, 0x001d, 0x0010, 0x709b, 0x001f,
-	0x0005, 0x2001, 0x0088, 0x080c, 0x2a0a, 0x6124, 0xd1cc, 0x11d8,
-	0xd1dc, 0x11b0, 0xd1e4, 0x1188, 0x9184, 0x1e00, 0x11c8, 0x60e3,
-	0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c, 0x7501, 0x2001, 0x0080,
-	0x080c, 0x2a0a, 0x709b, 0x0028, 0x0058, 0x709b, 0x001e, 0x0040,
-	0x709b, 0x001d, 0x0028, 0x709b, 0x0020, 0x0010, 0x709b, 0x001f,
-	0x0005, 0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c, 0x7501,
-	0x2001, 0x0080, 0x080c, 0x2a0a, 0x6124, 0xd1d4, 0x1180, 0xd1dc,
-	0x1158, 0xd1e4, 0x1130, 0x9184, 0x1e00, 0x1158, 0x709b, 0x0028,
-	0x0040, 0x709b, 0x001e, 0x0028, 0x709b, 0x001d, 0x0010, 0x709b,
-	0x001f, 0x0005, 0x2001, 0x00a0, 0x080c, 0x2a0a, 0x6124, 0xd1dc,
-	0x1138, 0xd1e4, 0x0138, 0x080c, 0x1adf, 0x709b, 0x001e, 0x0010,
-	0x709b, 0x001d, 0x0005, 0x080c, 0x73b6, 0x6124, 0xd1dc, 0x1188,
-	0x080c, 0x732d, 0x0016, 0x080c, 0x1adf, 0x001e, 0xd1d4, 0x1128,
-	0xd1e4, 0x0138, 0x709b, 0x001e, 0x0020, 0x709b, 0x001f, 0x080c,
-	0x732d, 0x0005, 0x0006, 0x2001, 0x00a0, 0x080c, 0x2a0a, 0x000e,
-	0x6124, 0xd1d4, 0x1160, 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4,
-	0x0140, 0x709b, 0x001e, 0x0028, 0x709b, 0x001d, 0x0010, 0x709b,
-	0x0021, 0x0005, 0x080c, 0x73b6, 0x6124, 0xd1d4, 0x1150, 0xd1dc,
-	0x1128, 0xd1e4, 0x0140, 0x709b, 0x001e, 0x0028, 0x709b, 0x001d,
-	0x0010, 0x709b, 0x001f, 0x0005, 0x0006, 0x2001, 0x0090, 0x080c,
-	0x2a0a, 0x000e, 0x6124, 0xd1d4, 0x1178, 0xd1cc, 0x1150, 0xd1dc,
-	0x1128, 0xd1e4, 0x0158, 0x709b, 0x001e, 0x0040, 0x709b, 0x001d,
-	0x0028, 0x709b, 0x0020, 0x0010, 0x709b, 0x001f, 0x0005, 0x0016,
-	0x00c6, 0x00d6, 0x00e6, 0x0126, 0x2061, 0x0100, 0x2069, 0x0140,
-	0x2071, 0x1800, 0x2091, 0x8000, 0x080c, 0x74d5, 0x11f8, 0x2001,
-	0x180c, 0x200c, 0xd1b4, 0x01d0, 0xc1b4, 0x2102, 0x0026, 0x2011,
-	0x0200, 0x080c, 0x2a44, 0x002e, 0x080c, 0x29f0, 0x6024, 0xd0cc,
-	0x0148, 0x2001, 0x00a0, 0x080c, 0x2a0a, 0x080c, 0x77d9, 0x080c,
-	0x6022, 0x0428, 0x6028, 0xc0cd, 0x602a, 0x0408, 0x080c, 0x74ef,
-	0x0150, 0x080c, 0x74e6, 0x1138, 0x2001, 0x0001, 0x080c, 0x25a0,
-	0x080c, 0x74a9, 0x00a0, 0x080c, 0x73b3, 0x0178, 0x2001, 0x0001,
-	0x080c, 0x25a0, 0x7098, 0x9086, 0x001e, 0x0120, 0x7098, 0x9086,
-	0x0022, 0x1118, 0x709b, 0x0025, 0x0010, 0x709b, 0x0021, 0x012e,
-	0x00ee, 0x00de, 0x00ce, 0x001e, 0x0005, 0x0026, 0x2011, 0x733e,
-	0x080c, 0x8719, 0x002e, 0x0016, 0x0026, 0x2009, 0x0064, 0x2011,
-	0x733e, 0x080c, 0x8710, 0x002e, 0x001e, 0x0005, 0x00e6, 0x00f6,
-	0x0016, 0x080c, 0x9e0e, 0x2071, 0x1800, 0x080c, 0x72d7, 0x001e,
-	0x00fe, 0x00ee, 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6,
-	0x00e6, 0x00f6, 0x0126, 0x080c, 0x9e0e, 0x2061, 0x0100, 0x2069,
-	0x0140, 0x2071, 0x1800, 0x2091, 0x8000, 0x6028, 0xc09c, 0x602a,
-	0x080c, 0xa872, 0x2011, 0x0003, 0x080c, 0xa1ab, 0x2011, 0x0002,
-	0x080c, 0xa1b5, 0x080c, 0xa074, 0x080c, 0x86c5, 0x0036, 0x901e,
-	0x080c, 0xa0f4, 0x003e, 0x080c, 0xa88e, 0x60e3, 0x0000, 0x080c,
-	0xe6d7, 0x080c, 0xe6f2, 0x2009, 0x0004, 0x080c, 0x29f6, 0x080c,
-	0x2916, 0x2001, 0x1800, 0x2003, 0x0004, 0x2011, 0x0008, 0x080c,
-	0x2a44, 0x2011, 0x733e, 0x080c, 0x8719, 0x080c, 0x74ef, 0x0118,
-	0x9006, 0x080c, 0x2a0a, 0x080c, 0x0bc3, 0x2001, 0x0001, 0x080c,
-	0x25a0, 0x012e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e,
-	0x001e, 0x0005, 0x0026, 0x00e6, 0x2011, 0x734b, 0x2071, 0x1a03,
-	0x701c, 0x9206, 0x1118, 0x7018, 0x9005, 0x0110, 0x9085, 0x0001,
-	0x00ee, 0x002e, 0x0005, 0x6020, 0xd09c, 0x0005, 0x6800, 0x9084,
-	0xfffe, 0x9086, 0x00c0, 0x01b8, 0x2001, 0x00c0, 0x080c, 0x2a0a,
-	0x0156, 0x20a9, 0x002d, 0x1d04, 0x73c3, 0x2091, 0x6000, 0x1f04,
-	0x73c3, 0x015e, 0x00d6, 0x2069, 0x1800, 0x689c, 0x8001, 0x0220,
-	0x0118, 0x689e, 0x00de, 0x0005, 0x689f, 0x0014, 0x68ec, 0xd0dc,
-	0x0dc8, 0x6800, 0x9086, 0x0001, 0x1da8, 0x080c, 0x8725, 0x0c90,
-	0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071,
-	0x1800, 0x080c, 0x77e8, 0x2001, 0x196d, 0x2003, 0x0000, 0x9006,
-	0x709a, 0x60e2, 0x6886, 0x080c, 0x266f, 0x9006, 0x080c, 0x2a0a,
-	0x080c, 0x5edd, 0x0026, 0x2011, 0xffff, 0x080c, 0x2a44, 0x002e,
-	0x602b, 0x182c, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6,
-	0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x2001,
-	0x197d, 0x200c, 0x9186, 0x0000, 0x0158, 0x9186, 0x0001, 0x0158,
-	0x9186, 0x0002, 0x0158, 0x9186, 0x0003, 0x0158, 0x0804, 0x7499,
-	0x709b, 0x0022, 0x0040, 0x709b, 0x0021, 0x0028, 0x709b, 0x0023,
-	0x0010, 0x709b, 0x0024, 0x60e3, 0x0000, 0x6887, 0x0001, 0x2001,
-	0x0001, 0x080c, 0x266f, 0x080c, 0xa872, 0x0026, 0x080c, 0xab3a,
-	0x002e, 0x080c, 0xa88e, 0x7000, 0x908e, 0x0004, 0x0118, 0x602b,
-	0x0028, 0x0010, 0x602b, 0x0020, 0x0156, 0x0126, 0x2091, 0x8000,
-	0x20a9, 0x0005, 0x6024, 0xd0ac, 0x0150, 0x012e, 0x015e, 0x080c,
-	0xcf2e, 0x0118, 0x9006, 0x080c, 0x2a34, 0x0804, 0x74a5, 0x6800,
-	0x9084, 0x00a1, 0xc0bd, 0x6802, 0x080c, 0x29f0, 0x6904, 0xd1d4,
-	0x1140, 0x2001, 0x0100, 0x080c, 0x2a0a, 0x1f04, 0x744a, 0x080c,
-	0x752c, 0x012e, 0x015e, 0x080c, 0x74e6, 0x0170, 0x6044, 0x9005,
-	0x0130, 0x080c, 0x752c, 0x9006, 0x8001, 0x1df0, 0x0028, 0x6804,
-	0xd0d4, 0x1110, 0x080c, 0x752c, 0x080c, 0xcf2e, 0x0118, 0x9006,
-	0x080c, 0x2a34, 0x0016, 0x0026, 0x7000, 0x908e, 0x0004, 0x0130,
-	0x2009, 0x00c8, 0x2011, 0x734b, 0x080c, 0x86d7, 0x002e, 0x001e,
-	0x080c, 0x8519, 0x7034, 0xc085, 0x7036, 0x2001, 0x197d, 0x2003,
-	0x0004, 0x080c, 0x71a4, 0x080c, 0x74e6, 0x0138, 0x6804, 0xd0d4,
-	0x1120, 0xd0dc, 0x1100, 0x080c, 0x77de, 0x00ee, 0x00de, 0x00ce,
-	0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140,
-	0x2071, 0x1800, 0x080c, 0x8530, 0x080c, 0x8522, 0x080c, 0x77e8,
-	0x2001, 0x196d, 0x2003, 0x0000, 0x9006, 0x709a, 0x60e2, 0x6886,
-	0x080c, 0x266f, 0x9006, 0x080c, 0x2a0a, 0x6043, 0x0090, 0x6043,
-	0x0010, 0x0026, 0x2011, 0xffff, 0x080c, 0x2a44, 0x002e, 0x602b,
-	0x182c, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x0006, 0x2001, 0x197c,
-	0x2004, 0x9086, 0xaaaa, 0x000e, 0x0005, 0x0006, 0x080c, 0x56d7,
-	0x9084, 0x0030, 0x9086, 0x0000, 0x000e, 0x0005, 0x0006, 0x080c,
-	0x56d7, 0x9084, 0x0030, 0x9086, 0x0030, 0x000e, 0x0005, 0x0006,
-	0x080c, 0x56d7, 0x9084, 0x0030, 0x9086, 0x0010, 0x000e, 0x0005,
-	0x0006, 0x080c, 0x56d7, 0x9084, 0x0030, 0x9086, 0x0020, 0x000e,
-	0x0005, 0x0036, 0x0016, 0x2001, 0x180c, 0x2004, 0x908c, 0x0013,
-	0x0180, 0x0020, 0x080c, 0x268f, 0x900e, 0x0028, 0x080c, 0x6a53,
-	0x1dc8, 0x2009, 0x0002, 0x2019, 0x0028, 0x080c, 0x31a3, 0x9006,
-	0x0019, 0x001e, 0x003e, 0x0005, 0x00e6, 0x2071, 0x180c, 0x2e04,
-	0x0130, 0x080c, 0xcf27, 0x1128, 0x9085, 0x0010, 0x0010, 0x9084,
-	0xffef, 0x2072, 0x00ee, 0x0005, 0x6050, 0x0006, 0x60ec, 0x0006,
-	0x600c, 0x0006, 0x6004, 0x0006, 0x6028, 0x0006, 0x602f, 0x0100,
-	0x602f, 0x0000, 0x602f, 0x0040, 0x602f, 0x0000, 0x20a9, 0x0002,
-	0x080c, 0x29d1, 0x0026, 0x2011, 0x0040, 0x080c, 0x2a44, 0x002e,
-	0x000e, 0x602a, 0x000e, 0x6006, 0x000e, 0x600e, 0x000e, 0x60ee,
-	0x60e3, 0x0000, 0x6887, 0x0001, 0x2001, 0x0001, 0x080c, 0x266f,
-	0x2001, 0x00a0, 0x0006, 0x080c, 0xcf2e, 0x000e, 0x0130, 0x080c,
-	0x2a28, 0x9006, 0x080c, 0x2a34, 0x0010, 0x080c, 0x2a0a, 0x000e,
-	0x6052, 0x6050, 0x0006, 0xc0e5, 0x6052, 0x00f6, 0x2079, 0x0100,
-	0x080c, 0x2981, 0x00fe, 0x000e, 0x6052, 0x0005, 0x0156, 0x0016,
-	0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069,
-	0x0140, 0x2071, 0x1800, 0x080c, 0xa8d0, 0x0158, 0x2001, 0x0386,
-	0x2004, 0xd0b4, 0x1130, 0x2001, 0x0016, 0x080c, 0xa863, 0x0804,
-	0x7609, 0x2001, 0x180c, 0x200c, 0xc1c4, 0x2102, 0x6028, 0x9084,
-	0xe1ff, 0x602a, 0x2011, 0x0200, 0x080c, 0x2a44, 0x2001, 0x0090,
-	0x080c, 0x2a0a, 0x20a9, 0x0366, 0x6024, 0xd0cc, 0x1558, 0x1d04,
-	0x75a4, 0x2091, 0x6000, 0x1f04, 0x75a4, 0x080c, 0xa872, 0x2011,
-	0x0003, 0x080c, 0xa1ab, 0x2011, 0x0002, 0x080c, 0xa1b5, 0x080c,
-	0xa074, 0x901e, 0x080c, 0xa0f4, 0x2001, 0x0386, 0x2003, 0x7000,
-	0x080c, 0xa88e, 0x2001, 0x00a0, 0x080c, 0x2a0a, 0x080c, 0x77d9,
-	0x080c, 0x6022, 0x080c, 0xcf2e, 0x0110, 0x080c, 0x0ce9, 0x9085,
-	0x0001, 0x04e8, 0x2001, 0x0386, 0x2004, 0xd0ac, 0x0110, 0x080c,
-	0x1adf, 0x60e3, 0x0000, 0x2001, 0x196d, 0x2004, 0x080c, 0x266f,
-	0x60e2, 0x2001, 0x0080, 0x080c, 0x2a0a, 0x20a9, 0x0366, 0x2011,
-	0x1e00, 0x080c, 0x2a44, 0x2009, 0x1e00, 0x080c, 0x29f0, 0x6024,
-	0x910c, 0x0140, 0x1d04, 0x75e7, 0x2091, 0x6000, 0x1f04, 0x75e7,
-	0x0804, 0x75ad, 0x2001, 0x0386, 0x2003, 0x7000, 0x6028, 0x9085,
-	0x1e00, 0x602a, 0x70b4, 0x9005, 0x1118, 0x6887, 0x0001, 0x0008,
-	0x6886, 0x080c, 0xcf2e, 0x0110, 0x080c, 0x0ce9, 0x9006, 0x00ee,
-	0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x0156,
-	0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100,
-	0x2071, 0x1800, 0x7000, 0x9086, 0x0003, 0x1168, 0x2001, 0x020b,
-	0x2004, 0x9084, 0x5540, 0x9086, 0x5540, 0x1128, 0x2069, 0x1a77,
-	0x2d04, 0x8000, 0x206a, 0x2069, 0x0140, 0x6020, 0x9084, 0x00c0,
-	0x0120, 0x6884, 0x9005, 0x1904, 0x7680, 0x2001, 0x0088, 0x080c,
-	0x2a0a, 0x9006, 0x60e2, 0x6886, 0x080c, 0x266f, 0x2069, 0x0200,
-	0x6804, 0x9005, 0x1118, 0x6808, 0x9005, 0x01d0, 0x6028, 0x9084,
-	0xfbff, 0x602a, 0x2011, 0x0400, 0x080c, 0x2a44, 0x2069, 0x198f,
-	0x7000, 0x206a, 0x709b, 0x0026, 0x7003, 0x0001, 0x20a9, 0x0002,
-	0x1d04, 0x7660, 0x2091, 0x6000, 0x1f04, 0x7660, 0x0804, 0x76b2,
-	0x2069, 0x0140, 0x20a9, 0x0384, 0x2011, 0x1e00, 0x080c, 0x2a44,
-	0x2009, 0x1e00, 0x080c, 0x29f0, 0x6024, 0x910c, 0x0528, 0x9084,
-	0x1a00, 0x1510, 0x1d04, 0x766c, 0x2091, 0x6000, 0x1f04, 0x766c,
-	0x080c, 0xa872, 0x2011, 0x0003, 0x080c, 0xa1ab, 0x2011, 0x0002,
-	0x080c, 0xa1b5, 0x080c, 0xa074, 0x901e, 0x080c, 0xa0f4, 0x080c,
-	0xa88e, 0x2001, 0x00a0, 0x080c, 0x2a0a, 0x080c, 0x77d9, 0x080c,
-	0x6022, 0x9085, 0x0001, 0x00b0, 0x2001, 0x0080, 0x080c, 0x2a0a,
-	0x2069, 0x0140, 0x60e3, 0x0000, 0x70b4, 0x9005, 0x1118, 0x6887,
-	0x0001, 0x0008, 0x6886, 0x2001, 0x196d, 0x2004, 0x080c, 0x266f,
-	0x60e2, 0x9006, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e,
-	0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6,
-	0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, 0x6020, 0x9084, 0x00c0,
-	0x01e8, 0x080c, 0xa872, 0x2011, 0x0003, 0x080c, 0xa1ab, 0x2011,
-	0x0002, 0x080c, 0xa1b5, 0x080c, 0xa074, 0x901e, 0x080c, 0xa0f4,
-	0x080c, 0xa88e, 0x2069, 0x0140, 0x2001, 0x00a0, 0x080c, 0x2a0a,
-	0x080c, 0x77d9, 0x080c, 0x6022, 0x0804, 0x7755, 0x2001, 0x180c,
-	0x200c, 0xd1b4, 0x1160, 0xc1b5, 0x2102, 0x080c, 0x7333, 0x2069,
-	0x0140, 0x2001, 0x0080, 0x080c, 0x2a0a, 0x60e3, 0x0000, 0x2069,
-	0x0200, 0x6804, 0x9005, 0x1118, 0x6808, 0x9005, 0x0190, 0x6028,
-	0x9084, 0xfdff, 0x602a, 0x2011, 0x0200, 0x080c, 0x2a44, 0x2069,
-	0x198f, 0x7000, 0x206a, 0x709b, 0x0027, 0x7003, 0x0001, 0x0804,
-	0x7755, 0x2011, 0x1e00, 0x080c, 0x2a44, 0x2009, 0x1e00, 0x080c,
-	0x29f0, 0x6024, 0x910c, 0x01c8, 0x9084, 0x1c00, 0x11b0, 0x1d04,
-	0x7711, 0x0006, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x080c, 0x8561,
-	0x00ee, 0x00de, 0x00ce, 0x001e, 0x000e, 0x00e6, 0x2071, 0x1a03,
-	0x7018, 0x00ee, 0x9005, 0x19e8, 0x0500, 0x0026, 0x2011, 0x734b,
-	0x080c, 0x860d, 0x2011, 0x733e, 0x080c, 0x8719, 0x002e, 0x2069,
-	0x0140, 0x60e3, 0x0000, 0x70b4, 0x9005, 0x1118, 0x6887, 0x0001,
-	0x0008, 0x6886, 0x2001, 0x196d, 0x2004, 0x080c, 0x266f, 0x60e2,
-	0x2001, 0x180c, 0x200c, 0xc1b4, 0x2102, 0x00ee, 0x00de, 0x00ce,
-	0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026,
-	0x0036, 0x0046, 0x00c6, 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800,
-	0x080c, 0xcf27, 0x1904, 0x77c3, 0x7130, 0xd184, 0x1170, 0x080c,
-	0x3361, 0x0138, 0xc18d, 0x7132, 0x2011, 0x1848, 0x2214, 0xd2ac,
-	0x1120, 0x7030, 0xd08c, 0x0904, 0x77c3, 0x2011, 0x1848, 0x220c,
-	0xd1a4, 0x0538, 0x0016, 0x2019, 0x000e, 0x080c, 0xe20e, 0x0156,
-	0x00b6, 0x20a9, 0x007f, 0x900e, 0x9186, 0x007e, 0x01a0, 0x9186,
-	0x0080, 0x0188, 0x080c, 0x661e, 0x1170, 0x2120, 0x9006, 0x0016,
-	0x2009, 0x000e, 0x080c, 0xe29e, 0x2009, 0x0001, 0x2011, 0x0100,
-	0x080c, 0x88bb, 0x001e, 0x8108, 0x1f04, 0x778c, 0x00be, 0x015e,
-	0x001e, 0xd1ac, 0x1148, 0x0016, 0x2009, 0x0002, 0x2019, 0x0004,
-	0x080c, 0x31a3, 0x001e, 0x0078, 0x0156, 0x00b6, 0x20a9, 0x007f,
-	0x900e, 0x080c, 0x661e, 0x1110, 0x080c, 0x603c, 0x8108, 0x1f04,
-	0x77b9, 0x00be, 0x015e, 0x080c, 0x1adf, 0x080c, 0xa872, 0x080c,
-	0xab3a, 0x080c, 0xa88e, 0x60e3, 0x0000, 0x080c, 0x6022, 0x080c,
-	0x7406, 0x00ee, 0x00ce, 0x004e, 0x003e, 0x002e, 0x001e, 0x015e,
-	0x0005, 0x2001, 0x197d, 0x2003, 0x0001, 0x0005, 0x2001, 0x197d,
-	0x2003, 0x0000, 0x0005, 0x2001, 0x197c, 0x2003, 0xaaaa, 0x0005,
-	0x2001, 0x197c, 0x2003, 0x0000, 0x0005, 0x2071, 0x18fa, 0x7003,
-	0x0000, 0x7007, 0x0000, 0x080c, 0x1053, 0x090c, 0x0d7d, 0xa8ab,
-	0xdcb0, 0x2900, 0x704e, 0x080c, 0x1053, 0x090c, 0x0d7d, 0xa8ab,
-	0xdcb0, 0x2900, 0x7052, 0xa867, 0x0000, 0xa86b, 0x0001, 0xa89f,
-	0x0000, 0x0005, 0x00e6, 0x2071, 0x0040, 0x6848, 0x9005, 0x1118,
-	0x9085, 0x0001, 0x04b0, 0x6840, 0x9005, 0x0150, 0x04a1, 0x6a50,
-	0x9200, 0x7002, 0x6854, 0x9101, 0x7006, 0x9006, 0x7012, 0x7016,
-	0x6850, 0x7002, 0x6854, 0x7006, 0x6858, 0x700a, 0x685c, 0x700e,
-	0x6840, 0x9005, 0x1110, 0x7012, 0x7016, 0x6848, 0x701a, 0x701c,
-	0x9085, 0x0040, 0x701e, 0x2001, 0x0019, 0x7036, 0x702b, 0x0001,
-	0x2001, 0x0004, 0x200c, 0x918c, 0xfff7, 0x918d, 0x8000, 0x2102,
-	0x00d6, 0x2069, 0x18fa, 0x6807, 0x0001, 0x00de, 0x080c, 0x7dd0,
-	0x9006, 0x00ee, 0x0005, 0x900e, 0x0156, 0x20a9, 0x0006, 0x8003,
-	0x818d, 0x1f04, 0x784f, 0x015e, 0x0005, 0x2079, 0x0040, 0x2071,
-	0x18fa, 0x7004, 0x0002, 0x7865, 0x7866, 0x78b1, 0x790c, 0x7a1c,
-	0x7863, 0x7863, 0x7a46, 0x080c, 0x0d7d, 0x0005, 0x2079, 0x0040,
-	0x2001, 0x1dc0, 0x2003, 0x0000, 0x782c, 0x908c, 0x0780, 0x190c,
-	0x7eb2, 0xd0a4, 0x0570, 0x2001, 0x1dc0, 0x2004, 0x9082, 0x0080,
-	0x1640, 0x1d04, 0x7883, 0x2001, 0x1a06, 0x200c, 0x8109, 0x0508,
-	0x2091, 0x6000, 0x2102, 0x7824, 0x2048, 0x9006, 0xa802, 0xa806,
-	0xa864, 0x9084, 0x00ff, 0x908a, 0x0040, 0x0608, 0x00b8, 0x2001,
-	0x1800, 0x200c, 0x9186, 0x0003, 0x1160, 0x7104, 0x9186, 0x0004,
-	0x0140, 0x9186, 0x0007, 0x0128, 0x9186, 0x0003, 0x1968, 0x080c,
-	0x790c, 0x782c, 0xd09c, 0x090c, 0x7dd0, 0x0005, 0x9082, 0x005a,
-	0x1218, 0x2100, 0x003b, 0x0c18, 0x080c, 0x7942, 0x0c90, 0x00e3,
-	0x08f0, 0x0005, 0x7942, 0x7942, 0x7942, 0x7942, 0x7942, 0x7942,
-	0x7942, 0x7942, 0x7964, 0x7942, 0x7942, 0x7942, 0x7942, 0x7942,
-	0x7942, 0x7942, 0x7942, 0x7942, 0x7942, 0x7942, 0x7942, 0x7942,
-	0x7942, 0x7942, 0x7942, 0x7942, 0x7942, 0x7942, 0x794e, 0x7942,
-	0x7b37, 0x7942, 0x7942, 0x7942, 0x7964, 0x7942, 0x794e, 0x7b78,
-	0x7bb9, 0x7c00, 0x7c14, 0x7942, 0x7942, 0x7964, 0x794e, 0x7978,
-	0x7942, 0x79f0, 0x7cbf, 0x7cda, 0x7942, 0x7964, 0x7942, 0x7978,
-	0x7942, 0x7942, 0x79e6, 0x7cda, 0x7942, 0x7942, 0x7942, 0x7942,
-	0x7942, 0x7942, 0x7942, 0x7942, 0x7942, 0x798c, 0x7942, 0x7942,
-	0x7942, 0x7942, 0x7942, 0x7942, 0x7942, 0x7942, 0x7942, 0x7e56,
-	0x7942, 0x7e00, 0x7942, 0x7e00, 0x7942, 0x79a1, 0x7942, 0x7942,
-	0x7942, 0x7942, 0x7942, 0x7942, 0x2079, 0x0040, 0x7004, 0x9086,
-	0x0003, 0x1198, 0x782c, 0x080c, 0x7df9, 0xd0a4, 0x0170, 0x7824,
+	0x080c, 0x7341, 0x0028, 0x709b, 0x001d, 0x0010, 0x709b, 0x001f,
+	0x0005, 0x2001, 0x0088, 0x080c, 0x2a0a, 0x6124, 0xd1cc, 0x11e8,
+	0xd1dc, 0x11c0, 0xd1e4, 0x1198, 0x9184, 0x1e00, 0x11d8, 0x080c,
+	0x1adf, 0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c, 0x7515,
+	0x2001, 0x0080, 0x080c, 0x2a0a, 0x709b, 0x0028, 0x0058, 0x709b,
+	0x001e, 0x0040, 0x709b, 0x001d, 0x0028, 0x709b, 0x0020, 0x0010,
+	0x709b, 0x001f, 0x0005, 0x080c, 0x1adf, 0x60e3, 0x0001, 0x600c,
+	0xc0b4, 0x600e, 0x080c, 0x7515, 0x2001, 0x0080, 0x080c, 0x2a0a,
+	0x6124, 0xd1d4, 0x1180, 0xd1dc, 0x1158, 0xd1e4, 0x1130, 0x9184,
+	0x1e00, 0x1158, 0x709b, 0x0028, 0x0040, 0x709b, 0x001e, 0x0028,
+	0x709b, 0x001d, 0x0010, 0x709b, 0x001f, 0x0005, 0x2001, 0x00a0,
+	0x080c, 0x2a0a, 0x6124, 0xd1dc, 0x1138, 0xd1e4, 0x0138, 0x080c,
+	0x1adf, 0x709b, 0x001e, 0x0010, 0x709b, 0x001d, 0x0005, 0x080c,
+	0x73ca, 0x6124, 0xd1dc, 0x1188, 0x080c, 0x7341, 0x0016, 0x080c,
+	0x1adf, 0x001e, 0xd1d4, 0x1128, 0xd1e4, 0x0138, 0x709b, 0x001e,
+	0x0020, 0x709b, 0x001f, 0x080c, 0x7341, 0x0005, 0x0006, 0x2001,
+	0x00a0, 0x080c, 0x2a0a, 0x000e, 0x6124, 0xd1d4, 0x1160, 0xd1cc,
+	0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140, 0x709b, 0x001e, 0x0028,
+	0x709b, 0x001d, 0x0010, 0x709b, 0x0021, 0x0005, 0x080c, 0x73ca,
+	0x6124, 0xd1d4, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140, 0x709b,
+	0x001e, 0x0028, 0x709b, 0x001d, 0x0010, 0x709b, 0x001f, 0x0005,
+	0x0006, 0x2001, 0x0090, 0x080c, 0x2a0a, 0x000e, 0x6124, 0xd1d4,
+	0x1178, 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0158, 0x709b,
+	0x001e, 0x0040, 0x709b, 0x001d, 0x0028, 0x709b, 0x0020, 0x0010,
+	0x709b, 0x001f, 0x0005, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x0126,
+	0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x2091, 0x8000,
+	0x080c, 0x74e9, 0x11f8, 0x2001, 0x180c, 0x200c, 0xd1b4, 0x01d0,
+	0xc1b4, 0x2102, 0x0026, 0x2011, 0x0200, 0x080c, 0x2a44, 0x002e,
+	0x080c, 0x29f0, 0x6024, 0xd0cc, 0x0148, 0x2001, 0x00a0, 0x080c,
+	0x2a0a, 0x080c, 0x77ed, 0x080c, 0x6029, 0x0428, 0x6028, 0xc0cd,
+	0x602a, 0x0408, 0x080c, 0x7503, 0x0150, 0x080c, 0x74fa, 0x1138,
+	0x2001, 0x0001, 0x080c, 0x25a0, 0x080c, 0x74bd, 0x00a0, 0x080c,
+	0x73c7, 0x0178, 0x2001, 0x0001, 0x080c, 0x25a0, 0x7098, 0x9086,
+	0x001e, 0x0120, 0x7098, 0x9086, 0x0022, 0x1118, 0x709b, 0x0025,
+	0x0010, 0x709b, 0x0021, 0x012e, 0x00ee, 0x00de, 0x00ce, 0x001e,
+	0x0005, 0x0026, 0x2011, 0x7352, 0x080c, 0x874a, 0x002e, 0x0016,
+	0x0026, 0x2009, 0x0064, 0x2011, 0x7352, 0x080c, 0x8741, 0x002e,
+	0x001e, 0x0005, 0x00e6, 0x00f6, 0x0016, 0x080c, 0x9e32, 0x2071,
+	0x1800, 0x080c, 0x72eb, 0x001e, 0x00fe, 0x00ee, 0x0005, 0x0016,
+	0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0126, 0x080c,
+	0x9e32, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x2091,
+	0x8000, 0x6028, 0xc09c, 0x602a, 0x080c, 0xa896, 0x2011, 0x0003,
+	0x080c, 0xa1cf, 0x2011, 0x0002, 0x080c, 0xa1d9, 0x080c, 0xa098,
+	0x080c, 0x86f6, 0x0036, 0x901e, 0x080c, 0xa118, 0x003e, 0x080c,
+	0xa8b2, 0x60e3, 0x0000, 0x080c, 0xe702, 0x080c, 0xe71d, 0x2009,
+	0x0004, 0x080c, 0x29f6, 0x080c, 0x2916, 0x2001, 0x1800, 0x2003,
+	0x0004, 0x2011, 0x0008, 0x080c, 0x2a44, 0x2011, 0x7352, 0x080c,
+	0x874a, 0x080c, 0x7503, 0x0118, 0x9006, 0x080c, 0x2a0a, 0x080c,
+	0x0bc3, 0x2001, 0x0001, 0x080c, 0x25a0, 0x012e, 0x00fe, 0x00ee,
+	0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x0005, 0x0026, 0x00e6,
+	0x2011, 0x735f, 0x2071, 0x1a03, 0x701c, 0x9206, 0x1118, 0x7018,
+	0x9005, 0x0110, 0x9085, 0x0001, 0x00ee, 0x002e, 0x0005, 0x6020,
+	0xd09c, 0x0005, 0x6800, 0x9084, 0xfffe, 0x9086, 0x00c0, 0x01b8,
+	0x2001, 0x00c0, 0x080c, 0x2a0a, 0x0156, 0x20a9, 0x002d, 0x1d04,
+	0x73d7, 0x2091, 0x6000, 0x1f04, 0x73d7, 0x015e, 0x00d6, 0x2069,
+	0x1800, 0x689c, 0x8001, 0x0220, 0x0118, 0x689e, 0x00de, 0x0005,
+	0x689f, 0x0014, 0x68ec, 0xd0dc, 0x0dc8, 0x6800, 0x9086, 0x0001,
+	0x1da8, 0x080c, 0x8756, 0x0c90, 0x00c6, 0x00d6, 0x00e6, 0x2061,
+	0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x080c, 0x77fc, 0x2001,
+	0x196d, 0x2003, 0x0000, 0x9006, 0x709a, 0x60e2, 0x6886, 0x080c,
+	0x266f, 0x9006, 0x080c, 0x2a0a, 0x080c, 0x5ee4, 0x0026, 0x2011,
+	0xffff, 0x080c, 0x2a44, 0x002e, 0x602b, 0x182c, 0x00ee, 0x00de,
+	0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069,
+	0x0140, 0x2071, 0x1800, 0x2001, 0x197d, 0x200c, 0x9186, 0x0000,
+	0x0158, 0x9186, 0x0001, 0x0158, 0x9186, 0x0002, 0x0158, 0x9186,
+	0x0003, 0x0158, 0x0804, 0x74ad, 0x709b, 0x0022, 0x0040, 0x709b,
+	0x0021, 0x0028, 0x709b, 0x0023, 0x0010, 0x709b, 0x0024, 0x60e3,
+	0x0000, 0x6887, 0x0001, 0x2001, 0x0001, 0x080c, 0x266f, 0x080c,
+	0xa896, 0x0026, 0x080c, 0xab5e, 0x002e, 0x080c, 0xa8b2, 0x7000,
+	0x908e, 0x0004, 0x0118, 0x602b, 0x0028, 0x0010, 0x602b, 0x0020,
+	0x0156, 0x0126, 0x2091, 0x8000, 0x20a9, 0x0005, 0x6024, 0xd0ac,
+	0x0150, 0x012e, 0x015e, 0x080c, 0xcf52, 0x0118, 0x9006, 0x080c,
+	0x2a34, 0x0804, 0x74b9, 0x6800, 0x9084, 0x00a1, 0xc0bd, 0x6802,
+	0x080c, 0x29f0, 0x6904, 0xd1d4, 0x1140, 0x2001, 0x0100, 0x080c,
+	0x2a0a, 0x1f04, 0x745e, 0x080c, 0x7540, 0x012e, 0x015e, 0x080c,
+	0x74fa, 0x0170, 0x6044, 0x9005, 0x0130, 0x080c, 0x7540, 0x9006,
+	0x8001, 0x1df0, 0x0028, 0x6804, 0xd0d4, 0x1110, 0x080c, 0x7540,
+	0x080c, 0xcf52, 0x0118, 0x9006, 0x080c, 0x2a34, 0x0016, 0x0026,
+	0x7000, 0x908e, 0x0004, 0x0130, 0x2009, 0x00c8, 0x2011, 0x735f,
+	0x080c, 0x8708, 0x002e, 0x001e, 0x080c, 0x854a, 0x7034, 0xc085,
+	0x7036, 0x2001, 0x197d, 0x2003, 0x0004, 0x080c, 0x71b4, 0x080c,
+	0x74fa, 0x0138, 0x6804, 0xd0d4, 0x1120, 0xd0dc, 0x1100, 0x080c,
+	0x77f2, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6,
+	0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x080c, 0x8561,
+	0x080c, 0x8553, 0x080c, 0x77fc, 0x2001, 0x196d, 0x2003, 0x0000,
+	0x9006, 0x709a, 0x60e2, 0x6886, 0x080c, 0x266f, 0x9006, 0x080c,
+	0x2a0a, 0x6043, 0x0090, 0x6043, 0x0010, 0x0026, 0x2011, 0xffff,
+	0x080c, 0x2a44, 0x002e, 0x602b, 0x182c, 0x00ee, 0x00de, 0x00ce,
+	0x0005, 0x0006, 0x2001, 0x197c, 0x2004, 0x9086, 0xaaaa, 0x000e,
+	0x0005, 0x0006, 0x080c, 0x56de, 0x9084, 0x0030, 0x9086, 0x0000,
+	0x000e, 0x0005, 0x0006, 0x080c, 0x56de, 0x9084, 0x0030, 0x9086,
+	0x0030, 0x000e, 0x0005, 0x0006, 0x080c, 0x56de, 0x9084, 0x0030,
+	0x9086, 0x0010, 0x000e, 0x0005, 0x0006, 0x080c, 0x56de, 0x9084,
+	0x0030, 0x9086, 0x0020, 0x000e, 0x0005, 0x0036, 0x0016, 0x2001,
+	0x180c, 0x2004, 0x908c, 0x0013, 0x0180, 0x0020, 0x080c, 0x268f,
+	0x900e, 0x0028, 0x080c, 0x6a63, 0x1dc8, 0x2009, 0x0002, 0x2019,
+	0x0028, 0x080c, 0x31a6, 0x9006, 0x0019, 0x001e, 0x003e, 0x0005,
+	0x00e6, 0x2071, 0x180c, 0x2e04, 0x0130, 0x080c, 0xcf4b, 0x1128,
+	0x9085, 0x0010, 0x0010, 0x9084, 0xffef, 0x2072, 0x00ee, 0x0005,
+	0x6050, 0x0006, 0x60ec, 0x0006, 0x600c, 0x0006, 0x6004, 0x0006,
+	0x6028, 0x0006, 0x602f, 0x0100, 0x602f, 0x0000, 0x602f, 0x0040,
+	0x602f, 0x0000, 0x20a9, 0x0002, 0x080c, 0x29d1, 0x0026, 0x2011,
+	0x0040, 0x080c, 0x2a44, 0x002e, 0x000e, 0x602a, 0x000e, 0x6006,
+	0x000e, 0x600e, 0x000e, 0x60ee, 0x60e3, 0x0000, 0x6887, 0x0001,
+	0x2001, 0x0001, 0x080c, 0x266f, 0x2001, 0x00a0, 0x0006, 0x080c,
+	0xcf52, 0x000e, 0x0130, 0x080c, 0x2a28, 0x9006, 0x080c, 0x2a34,
+	0x0010, 0x080c, 0x2a0a, 0x000e, 0x6052, 0x6050, 0x0006, 0xc0e5,
+	0x6052, 0x00f6, 0x2079, 0x0100, 0x080c, 0x2981, 0x00fe, 0x000e,
+	0x6052, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6,
+	0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x080c,
+	0xa8f4, 0x0158, 0x2001, 0x0386, 0x2004, 0xd0b4, 0x1130, 0x2001,
+	0x0016, 0x080c, 0xa887, 0x0804, 0x761d, 0x2001, 0x180c, 0x200c,
+	0xc1c4, 0x2102, 0x6028, 0x9084, 0xe1ff, 0x602a, 0x2011, 0x0200,
+	0x080c, 0x2a44, 0x2001, 0x0090, 0x080c, 0x2a0a, 0x20a9, 0x0366,
+	0x6024, 0xd0cc, 0x1558, 0x1d04, 0x75b8, 0x2091, 0x6000, 0x1f04,
+	0x75b8, 0x080c, 0xa896, 0x2011, 0x0003, 0x080c, 0xa1cf, 0x2011,
+	0x0002, 0x080c, 0xa1d9, 0x080c, 0xa098, 0x901e, 0x080c, 0xa118,
+	0x2001, 0x0386, 0x2003, 0x7000, 0x080c, 0xa8b2, 0x2001, 0x00a0,
+	0x080c, 0x2a0a, 0x080c, 0x77ed, 0x080c, 0x6029, 0x080c, 0xcf52,
+	0x0110, 0x080c, 0x0ce9, 0x9085, 0x0001, 0x04e8, 0x2001, 0x0386,
+	0x2004, 0xd0ac, 0x0110, 0x080c, 0x1adf, 0x60e3, 0x0000, 0x2001,
+	0x196d, 0x2004, 0x080c, 0x266f, 0x60e2, 0x2001, 0x0080, 0x080c,
+	0x2a0a, 0x20a9, 0x0366, 0x2011, 0x1e00, 0x080c, 0x2a44, 0x2009,
+	0x1e00, 0x080c, 0x29f0, 0x6024, 0x910c, 0x0140, 0x1d04, 0x75fb,
+	0x2091, 0x6000, 0x1f04, 0x75fb, 0x0804, 0x75c1, 0x2001, 0x0386,
+	0x2003, 0x7000, 0x6028, 0x9085, 0x1e00, 0x602a, 0x70b4, 0x9005,
+	0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x080c, 0xcf52, 0x0110,
+	0x080c, 0x0ce9, 0x9006, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e,
+	0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6,
+	0x00d6, 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, 0x7000, 0x9086,
+	0x0003, 0x1168, 0x2001, 0x020b, 0x2004, 0x9084, 0x5540, 0x9086,
+	0x5540, 0x1128, 0x2069, 0x1a77, 0x2d04, 0x8000, 0x206a, 0x2069,
+	0x0140, 0x6020, 0x9084, 0x00c0, 0x0120, 0x6884, 0x9005, 0x1904,
+	0x7694, 0x2001, 0x0088, 0x080c, 0x2a0a, 0x9006, 0x60e2, 0x6886,
+	0x080c, 0x266f, 0x2069, 0x0200, 0x6804, 0x9005, 0x1118, 0x6808,
+	0x9005, 0x01d0, 0x6028, 0x9084, 0xfbff, 0x602a, 0x2011, 0x0400,
+	0x080c, 0x2a44, 0x2069, 0x198f, 0x7000, 0x206a, 0x709b, 0x0026,
+	0x7003, 0x0001, 0x20a9, 0x0002, 0x1d04, 0x7674, 0x2091, 0x6000,
+	0x1f04, 0x7674, 0x0804, 0x76c6, 0x2069, 0x0140, 0x20a9, 0x0384,
+	0x2011, 0x1e00, 0x080c, 0x2a44, 0x2009, 0x1e00, 0x080c, 0x29f0,
+	0x6024, 0x910c, 0x0528, 0x9084, 0x1a00, 0x1510, 0x1d04, 0x7680,
+	0x2091, 0x6000, 0x1f04, 0x7680, 0x080c, 0xa896, 0x2011, 0x0003,
+	0x080c, 0xa1cf, 0x2011, 0x0002, 0x080c, 0xa1d9, 0x080c, 0xa098,
+	0x901e, 0x080c, 0xa118, 0x080c, 0xa8b2, 0x2001, 0x00a0, 0x080c,
+	0x2a0a, 0x080c, 0x77ed, 0x080c, 0x6029, 0x9085, 0x0001, 0x00b0,
+	0x2001, 0x0080, 0x080c, 0x2a0a, 0x2069, 0x0140, 0x60e3, 0x0000,
+	0x70b4, 0x9005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x2001,
+	0x196d, 0x2004, 0x080c, 0x266f, 0x60e2, 0x9006, 0x00ee, 0x00de,
+	0x00ce, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016,
+	0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2071,
+	0x1800, 0x6020, 0x9084, 0x00c0, 0x01e8, 0x080c, 0xa896, 0x2011,
+	0x0003, 0x080c, 0xa1cf, 0x2011, 0x0002, 0x080c, 0xa1d9, 0x080c,
+	0xa098, 0x901e, 0x080c, 0xa118, 0x080c, 0xa8b2, 0x2069, 0x0140,
+	0x2001, 0x00a0, 0x080c, 0x2a0a, 0x080c, 0x77ed, 0x080c, 0x6029,
+	0x0804, 0x7769, 0x2001, 0x180c, 0x200c, 0xd1b4, 0x1160, 0xc1b5,
+	0x2102, 0x080c, 0x7347, 0x2069, 0x0140, 0x2001, 0x0080, 0x080c,
+	0x2a0a, 0x60e3, 0x0000, 0x2069, 0x0200, 0x6804, 0x9005, 0x1118,
+	0x6808, 0x9005, 0x0190, 0x6028, 0x9084, 0xfdff, 0x602a, 0x2011,
+	0x0200, 0x080c, 0x2a44, 0x2069, 0x198f, 0x7000, 0x206a, 0x709b,
+	0x0027, 0x7003, 0x0001, 0x0804, 0x7769, 0x2011, 0x1e00, 0x080c,
+	0x2a44, 0x2009, 0x1e00, 0x080c, 0x29f0, 0x6024, 0x910c, 0x01c8,
+	0x9084, 0x1c00, 0x11b0, 0x1d04, 0x7725, 0x0006, 0x0016, 0x00c6,
+	0x00d6, 0x00e6, 0x080c, 0x8592, 0x00ee, 0x00de, 0x00ce, 0x001e,
+	0x000e, 0x00e6, 0x2071, 0x1a03, 0x7018, 0x00ee, 0x9005, 0x19e8,
+	0x0500, 0x0026, 0x2011, 0x735f, 0x080c, 0x863e, 0x2011, 0x7352,
+	0x080c, 0x874a, 0x002e, 0x2069, 0x0140, 0x60e3, 0x0000, 0x70b4,
+	0x9005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x2001, 0x196d,
+	0x2004, 0x080c, 0x266f, 0x60e2, 0x2001, 0x180c, 0x200c, 0xc1b4,
+	0x2102, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e,
+	0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x0046, 0x00c6, 0x00e6,
+	0x2061, 0x0100, 0x2071, 0x1800, 0x080c, 0xcf4b, 0x1904, 0x77d7,
+	0x7130, 0xd184, 0x1170, 0x080c, 0x3368, 0x0138, 0xc18d, 0x7132,
+	0x2011, 0x1848, 0x2214, 0xd2ac, 0x1120, 0x7030, 0xd08c, 0x0904,
+	0x77d7, 0x2011, 0x1848, 0x220c, 0xd1a4, 0x0538, 0x0016, 0x2019,
+	0x000e, 0x080c, 0xe239, 0x0156, 0x00b6, 0x20a9, 0x007f, 0x900e,
+	0x9186, 0x007e, 0x01a0, 0x9186, 0x0080, 0x0188, 0x080c, 0x6625,
+	0x1170, 0x2120, 0x9006, 0x0016, 0x2009, 0x000e, 0x080c, 0xe2c9,
+	0x2009, 0x0001, 0x2011, 0x0100, 0x080c, 0x88ec, 0x001e, 0x8108,
+	0x1f04, 0x77a0, 0x00be, 0x015e, 0x001e, 0xd1ac, 0x1148, 0x0016,
+	0x2009, 0x0002, 0x2019, 0x0004, 0x080c, 0x31a6, 0x001e, 0x0078,
+	0x0156, 0x00b6, 0x20a9, 0x007f, 0x900e, 0x080c, 0x6625, 0x1110,
+	0x080c, 0x6043, 0x8108, 0x1f04, 0x77cd, 0x00be, 0x015e, 0x080c,
+	0x1adf, 0x080c, 0xa896, 0x080c, 0xab5e, 0x080c, 0xa8b2, 0x60e3,
+	0x0000, 0x080c, 0x6029, 0x080c, 0x741a, 0x00ee, 0x00ce, 0x004e,
+	0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x2001, 0x197d, 0x2003,
+	0x0001, 0x0005, 0x2001, 0x197d, 0x2003, 0x0000, 0x0005, 0x2001,
+	0x197c, 0x2003, 0xaaaa, 0x0005, 0x2001, 0x197c, 0x2003, 0x0000,
+	0x0005, 0x2071, 0x18fa, 0x7003, 0x0000, 0x7007, 0x0000, 0x080c,
+	0x1053, 0x090c, 0x0d7d, 0xa8ab, 0xdcb0, 0x2900, 0x704e, 0x080c,
+	0x1053, 0x090c, 0x0d7d, 0xa8ab, 0xdcb0, 0x2900, 0x7052, 0xa867,
+	0x0000, 0xa86b, 0x0001, 0xa89f, 0x0000, 0x0005, 0x00e6, 0x2071,
+	0x0040, 0x6848, 0x9005, 0x1118, 0x9085, 0x0001, 0x04b0, 0x6840,
+	0x9005, 0x0150, 0x04a1, 0x6a50, 0x9200, 0x7002, 0x6854, 0x9101,
+	0x7006, 0x9006, 0x7012, 0x7016, 0x6850, 0x7002, 0x6854, 0x7006,
+	0x6858, 0x700a, 0x685c, 0x700e, 0x6840, 0x9005, 0x1110, 0x7012,
+	0x7016, 0x6848, 0x701a, 0x701c, 0x9085, 0x0040, 0x701e, 0x2001,
+	0x0019, 0x7036, 0x702b, 0x0001, 0x2001, 0x0004, 0x200c, 0x918c,
+	0xfff7, 0x918d, 0x8000, 0x2102, 0x00d6, 0x2069, 0x18fa, 0x6807,
+	0x0001, 0x00de, 0x080c, 0x7de4, 0x9006, 0x00ee, 0x0005, 0x900e,
+	0x0156, 0x20a9, 0x0006, 0x8003, 0x818d, 0x1f04, 0x7863, 0x015e,
+	0x0005, 0x2079, 0x0040, 0x2071, 0x18fa, 0x7004, 0x0002, 0x7879,
+	0x787a, 0x78c5, 0x7920, 0x7a30, 0x7877, 0x7877, 0x7a5a, 0x080c,
+	0x0d7d, 0x0005, 0x2079, 0x0040, 0x2001, 0x1dc0, 0x2003, 0x0000,
+	0x782c, 0x908c, 0x0780, 0x190c, 0x7ec6, 0xd0a4, 0x0570, 0x2001,
+	0x1dc0, 0x2004, 0x9082, 0x0080, 0x1640, 0x1d04, 0x7897, 0x2001,
+	0x1a06, 0x200c, 0x8109, 0x0508, 0x2091, 0x6000, 0x2102, 0x7824,
 	0x2048, 0x9006, 0xa802, 0xa806, 0xa864, 0x9084, 0x00ff, 0x908a,
-	0x001a, 0x1210, 0x002b, 0x0c50, 0x00e9, 0x080c, 0x7dd0, 0x0005,
-	0x7942, 0x794e, 0x7b23, 0x7942, 0x794e, 0x7942, 0x794e, 0x794e,
-	0x7942, 0x794e, 0x7b23, 0x794e, 0x794e, 0x794e, 0x794e, 0x794e,
-	0x7942, 0x794e, 0x7b23, 0x7942, 0x7942, 0x794e, 0x7942, 0x7942,
-	0x7942, 0x794e, 0x00e6, 0x2071, 0x18fa, 0x2009, 0x0400, 0x0071,
-	0x00ee, 0x0005, 0x2009, 0x1000, 0x0049, 0x0005, 0x2009, 0x2000,
-	0x0029, 0x0005, 0x2009, 0x0800, 0x0009, 0x0005, 0x7007, 0x0001,
-	0xa868, 0x9084, 0x00ff, 0x9105, 0xa86a, 0x0126, 0x2091, 0x8000,
-	0x080c, 0x6d70, 0x012e, 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff,
-	0x0d08, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, 0x7ac5, 0x7007,
-	0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, 0x7ac5, 0x0005,
-	0xa864, 0x8007, 0x9084, 0x00ff, 0x0968, 0x8001, 0x1120, 0x7007,
-	0x0001, 0x0804, 0x7ae0, 0x7007, 0x0003, 0x7012, 0x2900, 0x7016,
-	0x701a, 0x704b, 0x7ae0, 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff,
-	0x0904, 0x794a, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, 0x7afc,
-	0x7007, 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, 0x7afc,
-	0x0005, 0xa864, 0x8007, 0x9084, 0x00ff, 0x9086, 0x0001, 0x1904,
-	0x794a, 0x7007, 0x0001, 0x2009, 0x1834, 0x210c, 0x81ff, 0x11a8,
-	0xa868, 0x9084, 0x00ff, 0xa86a, 0xa883, 0x0000, 0x080c, 0x62b2,
-	0x1108, 0x0005, 0x0126, 0x2091, 0x8000, 0xa867, 0x0139, 0xa87a,
-	0xa982, 0x080c, 0x6d70, 0x012e, 0x0ca0, 0xa994, 0x9186, 0x0071,
-	0x0d38, 0x9186, 0x0064, 0x0d20, 0x9186, 0x007c, 0x0d08, 0x9186,
-	0x0028, 0x09f0, 0x9186, 0x0038, 0x09d8, 0x9186, 0x0078, 0x09c0,
-	0x9186, 0x005f, 0x09a8, 0x9186, 0x0056, 0x0990, 0xa897, 0x4005,
-	0xa89b, 0x0001, 0x2001, 0x0030, 0x900e, 0x08a0, 0xa87c, 0x9084,
-	0x00c0, 0x9086, 0x00c0, 0x1120, 0x7007, 0x0001, 0x0804, 0x7cf1,
-	0x2900, 0x7016, 0x701a, 0x20a9, 0x0004, 0xa860, 0x20e0, 0xa85c,
-	0x9080, 0x0030, 0x2098, 0x7050, 0x2040, 0xa060, 0x20e8, 0xa05c,
-	0x9080, 0x0023, 0x20a0, 0x4003, 0xa888, 0x7012, 0x9082, 0x0401,
-	0x1a04, 0x7952, 0xaab4, 0x928a, 0x0002, 0x1a04, 0x7952, 0x82ff,
-	0x1138, 0xa8b8, 0xa9bc, 0x9105, 0x0118, 0x2001, 0x7a83, 0x0018,
-	0x9280, 0x7a79, 0x2005, 0x7056, 0x7010, 0x9015, 0x0904, 0x7a64,
-	0x080c, 0x1053, 0x1118, 0x7007, 0x0004, 0x0005, 0x2900, 0x7022,
-	0x7054, 0x2060, 0xe000, 0xa866, 0x7050, 0x2040, 0xa95c, 0xe004,
-	0x9100, 0xa076, 0xa860, 0xa072, 0xe008, 0x920a, 0x1210, 0x900e,
-	0x2200, 0x7112, 0xe20c, 0x8003, 0x800b, 0x9296, 0x0004, 0x0108,
-	0x9108, 0xa17a, 0x810b, 0xa17e, 0x080c, 0x1124, 0xa06c, 0x908e,
-	0x0100, 0x0170, 0x9086, 0x0200, 0x0118, 0x7007, 0x0007, 0x0005,
-	0x7020, 0x2048, 0x080c, 0x106c, 0x7014, 0x2048, 0x0804, 0x7952,
-	0x7020, 0x2048, 0x7018, 0xa802, 0xa807, 0x0000, 0x2908, 0x2048,
-	0xa906, 0x711a, 0x0804, 0x7a1c, 0x7014, 0x2048, 0x7007, 0x0001,
-	0xa8b4, 0x9005, 0x1128, 0xa8b8, 0xa9bc, 0x9105, 0x0108, 0x00b9,
-	0xa864, 0x9084, 0x00ff, 0x9086, 0x001e, 0x0904, 0x7cf1, 0x0804,
-	0x7ac5, 0x7a7b, 0x7a7f, 0x0002, 0x001d, 0x0007, 0x0004, 0x000a,
-	0x001b, 0x0005, 0x0006, 0x000a, 0x001d, 0x0005, 0x0004, 0x0076,
-	0x0066, 0xafb8, 0xaebc, 0xa804, 0x2050, 0xb0c0, 0xb0e2, 0xb0bc,
-	0xb0de, 0xb0b8, 0xb0d2, 0xb0b4, 0xb0ce, 0xb6da, 0xb7d6, 0xb0b0,
-	0xb0ca, 0xb0ac, 0xb0c6, 0xb0a8, 0xb0ba, 0xb0a4, 0xb0b6, 0xb6c2,
-	0xb7be, 0xb0a0, 0xb0b2, 0xb09c, 0xb0ae, 0xb098, 0xb0a2, 0xb094,
-	0xb09e, 0xb6aa, 0xb7a6, 0xb090, 0xb09a, 0xb08c, 0xb096, 0xb088,
-	0xb08a, 0xb084, 0xb086, 0xb692, 0xb78e, 0xb080, 0xb082, 0xb07c,
-	0xb07e, 0xb078, 0xb072, 0xb074, 0xb06e, 0xb67a, 0xb776, 0xb004,
-	0x9055, 0x1958, 0x006e, 0x007e, 0x0005, 0x2009, 0x1834, 0x210c,
-	0x81ff, 0x1178, 0x080c, 0x60b4, 0x1108, 0x0005, 0x080c, 0x6fb0,
-	0x0126, 0x2091, 0x8000, 0x080c, 0xcb12, 0x080c, 0x6d70, 0x012e,
-	0x0ca0, 0x080c, 0xcf27, 0x1d70, 0x2001, 0x0028, 0x900e, 0x0c70,
-	0x2009, 0x1834, 0x210c, 0x81ff, 0x1188, 0xa888, 0x9005, 0x0188,
-	0xa883, 0x0000, 0x080c, 0x6142, 0x1108, 0x0005, 0xa87a, 0x0126,
-	0x2091, 0x8000, 0x080c, 0x6d70, 0x012e, 0x0cb8, 0x2001, 0x0028,
-	0x0ca8, 0x2001, 0x0000, 0x0c90, 0x2009, 0x1834, 0x210c, 0x81ff,
-	0x11d8, 0xa888, 0x9005, 0x01e0, 0xa883, 0x0000, 0xa87c, 0xd0f4,
-	0x0120, 0x080c, 0x6214, 0x1138, 0x0005, 0x9006, 0xa87a, 0x080c,
-	0x618f, 0x1108, 0x0005, 0x0126, 0x2091, 0x8000, 0xa87a, 0xa982,
-	0x080c, 0x6d70, 0x012e, 0x0cb0, 0x2001, 0x0028, 0x900e, 0x0c98,
-	0x2001, 0x0000, 0x0c80, 0x7018, 0xa802, 0x2908, 0x2048, 0xa906,
-	0x711a, 0x7010, 0x8001, 0x7012, 0x0118, 0x7007, 0x0003, 0x0030,
-	0x7014, 0x2048, 0x7007, 0x0001, 0x7048, 0x080f, 0x0005, 0x00b6,
-	0x7007, 0x0001, 0xa974, 0xa878, 0x9084, 0x00ff, 0x9096, 0x0004,
-	0x0540, 0x20a9, 0x0001, 0x9096, 0x0001, 0x0190, 0x900e, 0x20a9,
-	0x0800, 0x9096, 0x0002, 0x0160, 0x9005, 0x11d8, 0xa974, 0x080c,
-	0x661e, 0x11b8, 0x0066, 0xae80, 0x080c, 0x672e, 0x006e, 0x0088,
-	0x0046, 0x2011, 0x180c, 0x2224, 0xc484, 0x2412, 0x004e, 0x00c6,
-	0x080c, 0x661e, 0x1110, 0x080c, 0x68fd, 0x8108, 0x1f04, 0x7b60,
-	0x00ce, 0xa87c, 0xd084, 0x1120, 0x080c, 0x106c, 0x00be, 0x0005,
-	0x0126, 0x2091, 0x8000, 0x080c, 0x6d70, 0x012e, 0x00be, 0x0005,
-	0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x080c, 0x6a57, 0x0580,
-	0x2061, 0x1a6f, 0x6100, 0xd184, 0x0178, 0xa888, 0x9084, 0x00ff,
-	0x1550, 0x6000, 0xd084, 0x0520, 0x6004, 0x9005, 0x1538, 0x6003,
-	0x0000, 0x600b, 0x0000, 0x00c8, 0x2011, 0x0001, 0xa890, 0x9005,
-	0x1110, 0x2001, 0x001e, 0x8000, 0x6016, 0xa888, 0x9084, 0x00ff,
-	0x0178, 0x6006, 0xa888, 0x8007, 0x9084, 0x00ff, 0x0148, 0x600a,
-	0xa888, 0x8000, 0x1108, 0xc28d, 0x6202, 0x012e, 0x0804, 0x7dba,
-	0x012e, 0x0804, 0x7db4, 0x012e, 0x0804, 0x7dae, 0x012e, 0x0804,
-	0x7db1, 0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x080c, 0x6a57,
-	0x05e0, 0x2061, 0x1a6f, 0x6000, 0xd084, 0x05b8, 0x6204, 0x6308,
-	0xd08c, 0x1530, 0xac78, 0x9484, 0x0003, 0x0170, 0xa988, 0x918c,
-	0x00ff, 0x8001, 0x1120, 0x2100, 0x9210, 0x0620, 0x0028, 0x8001,
-	0x1508, 0x2100, 0x9212, 0x02f0, 0x9484, 0x000c, 0x0188, 0xa988,
-	0x810f, 0x918c, 0x00ff, 0x9082, 0x0004, 0x1120, 0x2100, 0x9318,
-	0x0288, 0x0030, 0x9082, 0x0004, 0x1168, 0x2100, 0x931a, 0x0250,
-	0xa890, 0x9005, 0x0110, 0x8000, 0x6016, 0x6206, 0x630a, 0x012e,
-	0x0804, 0x7dba, 0x012e, 0x0804, 0x7db7, 0x012e, 0x0804, 0x7db4,
-	0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x2061, 0x1a6f, 0x6300,
-	0xd38c, 0x1120, 0x6308, 0x8318, 0x0220, 0x630a, 0x012e, 0x0804,
-	0x7dc8, 0x012e, 0x0804, 0x7db7, 0x00b6, 0x0126, 0x00c6, 0x2091,
-	0x8000, 0x7007, 0x0001, 0xa87c, 0xd0ac, 0x0148, 0x00c6, 0x2061,
-	0x1a6f, 0x6000, 0x9084, 0xfcff, 0x6002, 0x00ce, 0x0440, 0xa888,
-	0x9005, 0x05d8, 0xa88c, 0x9065, 0x0598, 0x2001, 0x1834, 0x2004,
-	0x9005, 0x0118, 0x080c, 0xac04, 0x0068, 0x6017, 0xf400, 0x6063,
-	0x0000, 0xa97c, 0xd1a4, 0x0110, 0xa980, 0x6162, 0x2009, 0x0041,
-	0x080c, 0xac68, 0xa988, 0x918c, 0xff00, 0x9186, 0x2000, 0x1138,
-	0x0026, 0x900e, 0x2011, 0xfdff, 0x080c, 0x88bb, 0x002e, 0xa87c,
-	0xd0c4, 0x0148, 0x2061, 0x1a6f, 0x6000, 0xd08c, 0x1120, 0x6008,
-	0x8000, 0x0208, 0x600a, 0x00ce, 0x012e, 0x00be, 0x0804, 0x7dba,
-	0x00ce, 0x012e, 0x00be, 0x0804, 0x7db4, 0xa984, 0x9186, 0x002e,
-	0x0d30, 0x9186, 0x002d, 0x0d18, 0x9186, 0x0045, 0x0510, 0x9186,
-	0x002a, 0x1130, 0x2001, 0x180c, 0x200c, 0xc194, 0x2102, 0x08b8,
-	0x9186, 0x0020, 0x0158, 0x9186, 0x0029, 0x1d10, 0xa974, 0x080c,
-	0x661e, 0x1968, 0xb800, 0xc0e4, 0xb802, 0x0848, 0xa88c, 0x9065,
-	0x09b8, 0x6007, 0x0024, 0x2001, 0x1986, 0x2004, 0x601a, 0x0804,
-	0x7c4f, 0xa88c, 0x9065, 0x0960, 0x00e6, 0xa890, 0x9075, 0x2001,
-	0x1834, 0x2004, 0x9005, 0x0150, 0x080c, 0xac04, 0x8eff, 0x0118,
-	0x2e60, 0x080c, 0xac04, 0x00ee, 0x0804, 0x7c4f, 0x6024, 0xc0dc,
-	0xc0d5, 0x6026, 0x2e60, 0x6007, 0x003a, 0xa8a0, 0x9005, 0x0130,
-	0x6007, 0x003b, 0xa8a4, 0x602e, 0xa8a8, 0x6016, 0x6003, 0x0001,
-	0x2009, 0x8020, 0x080c, 0x91ed, 0x00ee, 0x0804, 0x7c4f, 0x2061,
-	0x1a6f, 0x6000, 0xd084, 0x0190, 0xd08c, 0x1904, 0x7dc8, 0x0126,
-	0x2091, 0x8000, 0x6204, 0x8210, 0x0220, 0x6206, 0x012e, 0x0804,
-	0x7dc8, 0x012e, 0xa883, 0x0016, 0x0804, 0x7dc1, 0xa883, 0x0007,
-	0x0804, 0x7dc1, 0xa864, 0x8007, 0x9084, 0x00ff, 0x0130, 0x8001,
-	0x1138, 0x7007, 0x0001, 0x0069, 0x0005, 0x080c, 0x794a, 0x0040,
-	0x7007, 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, 0x7cf1,
-	0x0005, 0x00b6, 0x00e6, 0x0126, 0x2091, 0x8000, 0x903e, 0x2061,
-	0x1800, 0x61d0, 0x81ff, 0x1904, 0x7d73, 0x6130, 0xd194, 0x1904,
-	0x7d9d, 0xa878, 0x2070, 0x9e82, 0x1ddc, 0x0a04, 0x7d67, 0x6068,
-	0x9e02, 0x1a04, 0x7d67, 0x7120, 0x9186, 0x0006, 0x1904, 0x7d59,
-	0x7010, 0x905d, 0x0904, 0x7d73, 0xb800, 0xd0e4, 0x1904, 0x7d97,
-	0x2061, 0x1a6f, 0x6100, 0x9184, 0x0301, 0x9086, 0x0001, 0x15a0,
-	0x7024, 0xd0dc, 0x1904, 0x7da0, 0xa883, 0x0000, 0xa803, 0x0000,
-	0x2908, 0x7014, 0x9005, 0x1198, 0x7116, 0xa87c, 0xd0f4, 0x1904,
-	0x7da3, 0x080c, 0x56d3, 0xd09c, 0x1118, 0xa87c, 0xc0cc, 0xa87e,
-	0x2e60, 0x080c, 0x87ae, 0x012e, 0x00ee, 0x00be, 0x0005, 0x2048,
-	0xa800, 0x9005, 0x1de0, 0xa902, 0x2148, 0xa87c, 0xd0f4, 0x1904,
-	0x7da3, 0x012e, 0x00ee, 0x00be, 0x0005, 0x012e, 0x00ee, 0xa883,
-	0x0006, 0x00be, 0x0804, 0x7dc1, 0xd184, 0x0db8, 0xd1c4, 0x1190,
-	0x00a0, 0xa974, 0x080c, 0x661e, 0x15d0, 0xb800, 0xd0e4, 0x15b8,
-	0x7120, 0x9186, 0x0007, 0x1118, 0xa883, 0x0002, 0x0490, 0xa883,
-	0x0008, 0x0478, 0xa883, 0x000e, 0x0460, 0xa883, 0x0017, 0x0448,
-	0xa883, 0x0035, 0x0430, 0x080c, 0x56d7, 0xd0fc, 0x01e8, 0xa878,
-	0x2070, 0x9e82, 0x1ddc, 0x02c0, 0x6068, 0x9e02, 0x12a8, 0x7120,
-	0x9186, 0x0006, 0x1188, 0x7010, 0x905d, 0x0170, 0xb800, 0xd0bc,
-	0x0158, 0x2039, 0x0001, 0x7000, 0x9086, 0x0007, 0x1904, 0x7cfd,
-	0x7003, 0x0002, 0x0804, 0x7cfd, 0xa883, 0x0028, 0x0010, 0xa883,
-	0x0029, 0x012e, 0x00ee, 0x00be, 0x0420, 0xa883, 0x002a, 0x0cc8,
-	0xa883, 0x0045, 0x0cb0, 0x2e60, 0x2019, 0x0002, 0x601b, 0x0014,
-	0x080c, 0xddf2, 0x012e, 0x00ee, 0x00be, 0x0005, 0x2009, 0x003e,
-	0x0058, 0x2009, 0x0004, 0x0040, 0x2009, 0x0006, 0x0028, 0x2009,
-	0x0016, 0x0010, 0x2009, 0x0001, 0xa884, 0x9084, 0xff00, 0x9105,
-	0xa886, 0x0126, 0x2091, 0x8000, 0x080c, 0x6d70, 0x012e, 0x0005,
-	0x080c, 0x106c, 0x0005, 0x00d6, 0x080c, 0x87a5, 0x00de, 0x0005,
-	0x00d6, 0x00e6, 0x0126, 0x2091, 0x8000, 0x2071, 0x0040, 0x702c,
-	0xd084, 0x01d8, 0x908c, 0x0780, 0x190c, 0x7eb2, 0xd09c, 0x11a8,
-	0x2071, 0x1800, 0x70c0, 0x90ea, 0x0020, 0x0278, 0x8001, 0x70c2,
-	0x702c, 0x2048, 0xa800, 0x702e, 0x9006, 0xa802, 0xa806, 0x2071,
-	0x0040, 0x2900, 0x7022, 0x702c, 0x0c28, 0x012e, 0x00ee, 0x00de,
-	0x0005, 0x0006, 0x9084, 0x0780, 0x190c, 0x7eb2, 0x000e, 0x0005,
-	0xa898, 0x9084, 0x0003, 0x05a8, 0x080c, 0xab73, 0x05d8, 0x2900,
-	0x6016, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0035, 0x1138, 0x6028,
-	0xc0fd, 0x602a, 0x2001, 0x196b, 0x2004, 0x0098, 0xa8a0, 0x9084,
-	0x00ff, 0xa99c, 0x918c, 0xff00, 0x9105, 0xa99c, 0x918c, 0x00ff,
-	0x080c, 0x25fb, 0x1540, 0x00b6, 0x080c, 0x661e, 0x2b00, 0x00be,
-	0x1510, 0x6012, 0x6023, 0x0001, 0x2009, 0x0040, 0xa864, 0x9084,
-	0x00ff, 0x9086, 0x0035, 0x0110, 0x2009, 0x0041, 0x080c, 0xac68,
-	0x0005, 0xa87b, 0x0101, 0x0126, 0x2091, 0x8000, 0x080c, 0x6d70,
-	0x012e, 0x0005, 0xa87b, 0x002c, 0x0126, 0x2091, 0x8000, 0x080c,
-	0x6d70, 0x012e, 0x0005, 0xa87b, 0x0028, 0x0126, 0x2091, 0x8000,
-	0x080c, 0x6d70, 0x012e, 0x080c, 0xabc9, 0x0005, 0x00d6, 0x00c6,
-	0x0036, 0x0026, 0x0016, 0x00b6, 0x7007, 0x0001, 0xaa74, 0x9282,
-	0x0004, 0x1a04, 0x7ea3, 0xa97c, 0x9188, 0x1000, 0x2104, 0x905d,
-	0xb804, 0xd284, 0x0140, 0x05e8, 0x8007, 0x9084, 0x00ff, 0x9084,
-	0x0006, 0x1108, 0x04b0, 0x2b10, 0x080c, 0xab73, 0x1118, 0x080c,
-	0xac3b, 0x05a8, 0x6212, 0xa874, 0x0002, 0x7e81, 0x7e86, 0x7e89,
-	0x7e8f, 0x2019, 0x0002, 0x080c, 0xe20e, 0x0060, 0x080c, 0xe19e,
-	0x0048, 0x2019, 0x0002, 0xa980, 0x080c, 0xe1bd, 0x0018, 0xa980,
-	0x080c, 0xe19e, 0x080c, 0xabc9, 0xa887, 0x0000, 0x0126, 0x2091,
-	0x8000, 0x080c, 0x6d70, 0x012e, 0x00be, 0x001e, 0x002e, 0x003e,
-	0x00ce, 0x00de, 0x0005, 0xa887, 0x0006, 0x0c80, 0xa887, 0x0002,
-	0x0c68, 0xa887, 0x0005, 0x0c50, 0xa887, 0x0004, 0x0c38, 0xa887,
-	0x0007, 0x0c20, 0x2091, 0x8000, 0x0e04, 0x7eb4, 0x0006, 0x0016,
-	0x2001, 0x8003, 0x0006, 0x0804, 0x0d86, 0x2001, 0x1834, 0x2004,
-	0x9005, 0x0005, 0x0005, 0x00f6, 0x2079, 0x0300, 0x2001, 0x0200,
-	0x200c, 0xc1e5, 0xc1dc, 0x2102, 0x2009, 0x0218, 0x210c, 0xd1ec,
-	0x1120, 0x080c, 0x1608, 0x00fe, 0x0005, 0x2001, 0x020d, 0x2003,
-	0x0020, 0x781f, 0x0300, 0x00fe, 0x0005, 0x781c, 0xd08c, 0x0904,
-	0x7f35, 0x68c0, 0x90aa, 0x0005, 0x0a04, 0x8519, 0x7d44, 0x7c40,
-	0xd59c, 0x190c, 0x0d7d, 0x9584, 0x00f6, 0x1508, 0x9484, 0x7000,
-	0x0138, 0x908a, 0x2000, 0x1258, 0x9584, 0x0700, 0x8007, 0x04f0,
-	0x7000, 0x9084, 0xff00, 0x9086, 0x8100, 0x0db0, 0x00b0, 0x9484,
-	0x0fff, 0x1130, 0x7000, 0x9084, 0xff00, 0x9086, 0x8100, 0x11c0,
-	0x080c, 0xe6af, 0x080c, 0x8410, 0x7817, 0x0140, 0x00a8, 0x9584,
-	0x0076, 0x1118, 0x080c, 0x846c, 0x19c8, 0xd5a4, 0x0148, 0x0046,
-	0x0056, 0x080c, 0x7f85, 0x080c, 0x2115, 0x005e, 0x004e, 0x0020,
-	0x080c, 0xe6af, 0x7817, 0x0140, 0x080c, 0x74d5, 0x0168, 0x2001,
-	0x0111, 0x2004, 0xd08c, 0x0140, 0x6893, 0x0000, 0x2001, 0x0110,
-	0x2003, 0x0008, 0x2003, 0x0000, 0x0489, 0x0005, 0x0002, 0x7f42,
-	0x8232, 0x7f3f, 0x7f3f, 0x7f3f, 0x7f3f, 0x7f3f, 0x7f3f, 0x7817,
-	0x0140, 0x0005, 0x7000, 0x908c, 0xff00, 0x9194, 0xf000, 0x810f,
-	0x9484, 0x0fff, 0x6892, 0x9286, 0x2000, 0x1150, 0x6800, 0x9086,
-	0x0001, 0x1118, 0x080c, 0x5734, 0x0070, 0x080c, 0x7fa5, 0x0058,
-	0x9286, 0x3000, 0x1118, 0x080c, 0x816f, 0x0028, 0x9286, 0x8000,
-	0x1110, 0x080c, 0x8346, 0x7817, 0x0140, 0x0005, 0x2001, 0x1810,
-	0x2004, 0xd08c, 0x0178, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003,
-	0x1148, 0x0026, 0x0036, 0x2011, 0x8048, 0x2518, 0x080c, 0x4b00,
-	0x003e, 0x002e, 0x0005, 0x0036, 0x0046, 0x0056, 0x00f6, 0x2079,
-	0x0200, 0x2019, 0xfffe, 0x7c30, 0x0050, 0x0036, 0x0046, 0x0056,
-	0x00f6, 0x2079, 0x0200, 0x7d44, 0x7c40, 0x2019, 0xffff, 0x2001,
-	0x1810, 0x2004, 0xd08c, 0x0160, 0x2001, 0x1800, 0x2004, 0x9086,
-	0x0003, 0x1130, 0x0026, 0x2011, 0x8048, 0x080c, 0x4b00, 0x002e,
-	0x00fe, 0x005e, 0x004e, 0x003e, 0x0005, 0x00b6, 0x00c6, 0x7010,
-	0x9084, 0xff00, 0x8007, 0x9096, 0x0001, 0x0120, 0x9096, 0x0023,
-	0x1904, 0x8140, 0x9186, 0x0023, 0x15c0, 0x080c, 0x83db, 0x0904,
-	0x8140, 0x6120, 0x9186, 0x0001, 0x0150, 0x9186, 0x0004, 0x0138,
-	0x9186, 0x0008, 0x0120, 0x9186, 0x000a, 0x1904, 0x8140, 0x7124,
-	0x610a, 0x7030, 0x908e, 0x0200, 0x1130, 0x2009, 0x0015, 0x080c,
-	0xac68, 0x0804, 0x8140, 0x908e, 0x0214, 0x0118, 0x908e, 0x0210,
-	0x1130, 0x2009, 0x0015, 0x080c, 0xac68, 0x0804, 0x8140, 0x908e,
-	0x0100, 0x1904, 0x8140, 0x7034, 0x9005, 0x1904, 0x8140, 0x2009,
-	0x0016, 0x080c, 0xac68, 0x0804, 0x8140, 0x9186, 0x0022, 0x1904,
-	0x8140, 0x7030, 0x908e, 0x0300, 0x1580, 0x68dc, 0xd0a4, 0x0528,
-	0xc0b5, 0x68de, 0x7100, 0x918c, 0x00ff, 0x697e, 0x7004, 0x6882,
-	0x00f6, 0x2079, 0x0100, 0x79e6, 0x78ea, 0x0006, 0x9084, 0x00ff,
-	0x0016, 0x2008, 0x080c, 0x2644, 0x7932, 0x7936, 0x001e, 0x000e,
-	0x00fe, 0x080c, 0x25fb, 0x695e, 0x703c, 0x00e6, 0x2071, 0x0140,
-	0x7086, 0x2071, 0x1800, 0x70b6, 0x00ee, 0x7034, 0x9005, 0x1904,
-	0x8140, 0x2009, 0x0017, 0x0804, 0x810d, 0x908e, 0x0400, 0x1190,
-	0x7034, 0x9005, 0x1904, 0x8140, 0x080c, 0x74d5, 0x0120, 0x2009,
-	0x001d, 0x0804, 0x810d, 0x68dc, 0xc0a5, 0x68de, 0x2009, 0x0030,
-	0x0804, 0x810d, 0x908e, 0x0500, 0x1140, 0x7034, 0x9005, 0x1904,
-	0x8140, 0x2009, 0x0018, 0x0804, 0x810d, 0x908e, 0x2010, 0x1120,
-	0x2009, 0x0019, 0x0804, 0x810d, 0x908e, 0x2110, 0x1120, 0x2009,
-	0x001a, 0x0804, 0x810d, 0x908e, 0x5200, 0x1140, 0x7034, 0x9005,
-	0x1904, 0x8140, 0x2009, 0x001b, 0x0804, 0x810d, 0x908e, 0x5000,
-	0x1140, 0x7034, 0x9005, 0x1904, 0x8140, 0x2009, 0x001c, 0x0804,
-	0x810d, 0x908e, 0x1300, 0x1120, 0x2009, 0x0034, 0x0804, 0x810d,
-	0x908e, 0x1200, 0x1140, 0x7034, 0x9005, 0x1904, 0x8140, 0x2009,
-	0x0024, 0x0804, 0x810d, 0x908c, 0xff00, 0x918e, 0x2400, 0x1170,
-	0x2009, 0x002d, 0x2001, 0x1810, 0x2004, 0xd09c, 0x0904, 0x810d,
-	0x080c, 0xd62a, 0x1904, 0x8140, 0x0804, 0x810b, 0x908c, 0xff00,
-	0x918e, 0x5300, 0x1120, 0x2009, 0x002a, 0x0804, 0x810d, 0x908e,
-	0x0f00, 0x1120, 0x2009, 0x0020, 0x0804, 0x810d, 0x908e, 0x6104,
-	0x1530, 0x2029, 0x0205, 0x2011, 0x026d, 0x8208, 0x2204, 0x9082,
-	0x0004, 0x8004, 0x8004, 0x20a8, 0x2011, 0x8015, 0x211c, 0x8108,
-	0x0046, 0x2124, 0x080c, 0x4b00, 0x004e, 0x8108, 0x0f04, 0x80c1,
-	0x9186, 0x0280, 0x1d88, 0x2504, 0x8000, 0x202a, 0x2009, 0x0260,
-	0x0c58, 0x202b, 0x0000, 0x2009, 0x0023, 0x0804, 0x810d, 0x908e,
-	0x6000, 0x1120, 0x2009, 0x003f, 0x0804, 0x810d, 0x908e, 0x5400,
-	0x1138, 0x080c, 0x84c9, 0x1904, 0x8140, 0x2009, 0x0046, 0x04a8,
-	0x908e, 0x5500, 0x1148, 0x080c, 0x84f1, 0x1118, 0x2009, 0x0041,
-	0x0460, 0x2009, 0x0042, 0x0448, 0x908e, 0x7800, 0x1118, 0x2009,
-	0x0045, 0x0418, 0x908e, 0x1000, 0x1118, 0x2009, 0x004e, 0x00e8,
-	0x908e, 0x6300, 0x1118, 0x2009, 0x004a, 0x00b8, 0x908c, 0xff00,
-	0x918e, 0x5600, 0x1118, 0x2009, 0x004f, 0x0078, 0x908c, 0xff00,
-	0x918e, 0x5700, 0x1118, 0x2009, 0x0050, 0x0038, 0x2009, 0x001d,
-	0x6838, 0xd0d4, 0x0110, 0x2009, 0x004c, 0x0016, 0x2011, 0x0263,
-	0x2204, 0x8211, 0x220c, 0x080c, 0x25fb, 0x1568, 0x080c, 0x65bd,
-	0x1550, 0xbe12, 0xbd16, 0x001e, 0x0016, 0xb884, 0x9005, 0x1168,
-	0x9186, 0x0046, 0x1150, 0x687c, 0x9606, 0x1138, 0x6880, 0x9506,
-	0x9084, 0xff00, 0x1110, 0x001e, 0x0098, 0x080c, 0xab73, 0x01a8,
-	0x2b08, 0x6112, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x9186,
-	0x004c, 0x1110, 0x6023, 0x000a, 0x0016, 0x001e, 0x080c, 0xac68,
-	0x00ce, 0x00be, 0x0005, 0x001e, 0x0cd8, 0x2001, 0x180e, 0x2004,
-	0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x4b00, 0x080c, 0xac3b,
-	0x0d90, 0x2b08, 0x6112, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e,
-	0x0016, 0x9186, 0x0017, 0x0118, 0x9186, 0x0030, 0x1128, 0x6007,
-	0x0009, 0x6017, 0x2900, 0x0020, 0x6007, 0x0051, 0x6017, 0x0000,
-	0x602f, 0x0009, 0x6003, 0x0001, 0x080c, 0x91f4, 0x08a0, 0x080c,
-	0x332b, 0x1140, 0x7010, 0x9084, 0xff00, 0x8007, 0x908e, 0x0008,
-	0x1108, 0x0009, 0x0005, 0x00b6, 0x00c6, 0x0046, 0x7000, 0x908c,
-	0xff00, 0x810f, 0x9186, 0x0033, 0x11e8, 0x080c, 0x83db, 0x0904,
-	0x81ca, 0x7124, 0x610a, 0x7030, 0x908e, 0x0200, 0x1140, 0x7034,
-	0x9005, 0x15c0, 0x2009, 0x0015, 0x080c, 0xac68, 0x0498, 0x908e,
-	0x0100, 0x1580, 0x7034, 0x9005, 0x1568, 0x2009, 0x0016, 0x080c,
-	0xac68, 0x0440, 0x9186, 0x0032, 0x1528, 0x7030, 0x908e, 0x1400,
-	0x1508, 0x2009, 0x0038, 0x0016, 0x2011, 0x0263, 0x2204, 0x8211,
-	0x220c, 0x080c, 0x25fb, 0x11a8, 0x080c, 0x65bd, 0x1190, 0xbe12,
-	0xbd16, 0x080c, 0xab73, 0x0168, 0x2b08, 0x6112, 0x080c, 0xcca8,
-	0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x080c, 0xac68, 0x0010,
-	0x00ce, 0x001e, 0x004e, 0x00ce, 0x00be, 0x0005, 0x00b6, 0x0046,
-	0x00e6, 0x00d6, 0x2028, 0x2130, 0x9696, 0x00ff, 0x11b8, 0x9592,
-	0xfffc, 0x02a0, 0x9596, 0xfffd, 0x1120, 0x2009, 0x007f, 0x0804,
-	0x822c, 0x9596, 0xfffe, 0x1120, 0x2009, 0x007e, 0x0804, 0x822c,
-	0x9596, 0xfffc, 0x1118, 0x2009, 0x0080, 0x04f0, 0x2011, 0x0000,
-	0x2019, 0x1837, 0x231c, 0xd3ac, 0x0130, 0x9026, 0x20a9, 0x0800,
-	0x2071, 0x1000, 0x0030, 0x2021, 0x0081, 0x20a9, 0x077f, 0x2071,
-	0x1081, 0x2e1c, 0x93dd, 0x0000, 0x1140, 0x82ff, 0x11d0, 0x9496,
-	0x00ff, 0x01b8, 0x2410, 0xc2fd, 0x00a0, 0xbf10, 0x2600, 0x9706,
-	0xb814, 0x1120, 0x9546, 0x1110, 0x2408, 0x00b0, 0x9745, 0x1148,
-	0x94c6, 0x007e, 0x0130, 0x94c6, 0x007f, 0x0118, 0x94c6, 0x0080,
-	0x1d20, 0x8420, 0x8e70, 0x1f04, 0x8201, 0x82ff, 0x1118, 0x9085,
-	0x0001, 0x0018, 0xc2fc, 0x2208, 0x9006, 0x00de, 0x00ee, 0x004e,
-	0x00be, 0x0005, 0x7000, 0x908c, 0xff00, 0x810f, 0x9184, 0x000f,
-	0x0002, 0x8249, 0x8249, 0x8249, 0x83ed, 0x8249, 0x824c, 0x8271,
-	0x82fa, 0x8249, 0x8249, 0x8249, 0x8249, 0x8249, 0x8249, 0x8249,
-	0x8249, 0x7817, 0x0140, 0x0005, 0x00b6, 0x7110, 0xd1bc, 0x01e8,
-	0x7120, 0x2160, 0x9c8c, 0x0003, 0x11c0, 0x9c8a, 0x1ddc, 0x02a8,
-	0x6868, 0x9c02, 0x1290, 0x7008, 0x9084, 0x00ff, 0x6110, 0x2158,
-	0xb910, 0x9106, 0x1150, 0x700c, 0xb914, 0x9106, 0x1130, 0x7124,
-	0x610a, 0x2009, 0x0046, 0x080c, 0xac68, 0x7817, 0x0140, 0x00be,
-	0x0005, 0x00b6, 0x00c6, 0x9484, 0x0fff, 0x0904, 0x82d6, 0x7110,
-	0xd1bc, 0x1904, 0x82d6, 0x7108, 0x700c, 0x2028, 0x918c, 0x00ff,
-	0x2130, 0x9094, 0xff00, 0x15c8, 0x81ff, 0x15b8, 0x9080, 0x336d,
-	0x200d, 0x918c, 0xff00, 0x810f, 0x2001, 0x0080, 0x9106, 0x0904,
-	0x82d6, 0x9182, 0x0801, 0x1a04, 0x82d6, 0x9190, 0x1000, 0x2204,
-	0x905d, 0x05e0, 0xbe12, 0xbd16, 0xb800, 0xd0ec, 0x15b8, 0xba04,
-	0x9294, 0xff00, 0x9286, 0x0600, 0x1190, 0x080c, 0xab73, 0x0598,
-	0x2b08, 0x7028, 0x6052, 0x702c, 0x604e, 0x6112, 0x6023, 0x0006,
-	0x7120, 0x610a, 0x7130, 0x615e, 0x080c, 0xd88c, 0x00f8, 0x080c,
-	0x6a5b, 0x1138, 0xb807, 0x0606, 0x0c40, 0x190c, 0x81ce, 0x11b0,
-	0x0880, 0x080c, 0xab73, 0x2b08, 0x0188, 0x6112, 0x6023, 0x0004,
-	0x7120, 0x610a, 0x9286, 0x0400, 0x1118, 0x6007, 0x0005, 0x0010,
-	0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x91f4, 0x7817, 0x0140,
-	0x00ce, 0x00be, 0x0005, 0x2001, 0x180e, 0x2004, 0xd0ec, 0x0120,
-	0x2011, 0x8049, 0x080c, 0x4b00, 0x080c, 0xac3b, 0x0d78, 0x2b08,
-	0x6112, 0x6023, 0x0006, 0x7120, 0x610a, 0x7130, 0x615e, 0x6017,
-	0xf300, 0x6003, 0x0001, 0x6007, 0x0041, 0x2009, 0xa022, 0x080c,
-	0x91ed, 0x08e0, 0x00b6, 0x7110, 0xd1bc, 0x05d0, 0x7020, 0x2060,
-	0x9c84, 0x0003, 0x15a8, 0x9c82, 0x1ddc, 0x0690, 0x6868, 0x9c02,
-	0x1678, 0x9484, 0x0fff, 0x9082, 0x000c, 0x0650, 0x7008, 0x9084,
-	0x00ff, 0x6110, 0x2158, 0xb910, 0x9106, 0x1510, 0x700c, 0xb914,
-	0x9106, 0x11f0, 0x7124, 0x610a, 0x601c, 0xd0fc, 0x11c8, 0x2001,
-	0x0271, 0x2004, 0x9005, 0x1180, 0x9484, 0x0fff, 0x9082, 0x000c,
-	0x0158, 0x0066, 0x2031, 0x0100, 0xa001, 0xa001, 0x8631, 0x1de0,
-	0x006e, 0x601c, 0xd0fc, 0x1120, 0x2009, 0x0045, 0x080c, 0xac68,
-	0x7817, 0x0140, 0x00be, 0x0005, 0x6120, 0x9186, 0x0002, 0x0128,
-	0x9186, 0x0005, 0x0110, 0x9085, 0x0001, 0x0005, 0x080c, 0x332b,
-	0x1168, 0x7010, 0x9084, 0xff00, 0x8007, 0x9086, 0x0000, 0x1130,
-	0x9184, 0x000f, 0x908a, 0x0006, 0x1208, 0x000b, 0x0005, 0x835d,
-	0x835e, 0x835d, 0x835d, 0x83bd, 0x83cc, 0x0005, 0x00b6, 0x7110,
-	0xd1bc, 0x0120, 0x702c, 0xd084, 0x0904, 0x83bb, 0x700c, 0x7108,
-	0x080c, 0x25fb, 0x1904, 0x83bb, 0x080c, 0x65bd, 0x1904, 0x83bb,
-	0xbe12, 0xbd16, 0x7110, 0xd1bc, 0x01d8, 0x080c, 0x6a5b, 0x0118,
-	0x9086, 0x0004, 0x1588, 0x00c6, 0x080c, 0x83db, 0x00ce, 0x05d8,
-	0x080c, 0xab73, 0x2b08, 0x05b8, 0x6112, 0x080c, 0xcca8, 0x6023,
-	0x0002, 0x7120, 0x610a, 0x2009, 0x0088, 0x080c, 0xac68, 0x0458,
-	0x080c, 0x6a5b, 0x0148, 0x9086, 0x0004, 0x0130, 0x080c, 0x6a63,
-	0x0118, 0x9086, 0x0004, 0x1180, 0x080c, 0xab73, 0x2b08, 0x01d8,
-	0x6112, 0x080c, 0xcca8, 0x6023, 0x0005, 0x7120, 0x610a, 0x2009,
-	0x0088, 0x080c, 0xac68, 0x0078, 0x080c, 0xab73, 0x2b08, 0x0158,
-	0x6112, 0x080c, 0xcca8, 0x6023, 0x0004, 0x7120, 0x610a, 0x2009,
-	0x0001, 0x080c, 0xac68, 0x00be, 0x0005, 0x7110, 0xd1bc, 0x0158,
-	0x00d1, 0x0148, 0x080c, 0x833c, 0x1130, 0x7124, 0x610a, 0x2009,
-	0x0089, 0x080c, 0xac68, 0x0005, 0x7110, 0xd1bc, 0x0158, 0x0059,
-	0x0148, 0x080c, 0x833c, 0x1130, 0x7124, 0x610a, 0x2009, 0x008a,
-	0x080c, 0xac68, 0x0005, 0x7020, 0x2060, 0x9c84, 0x0003, 0x1158,
-	0x9c82, 0x1ddc, 0x0240, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1218,
-	0x9085, 0x0001, 0x0005, 0x9006, 0x0ce8, 0x00b6, 0x7110, 0xd1bc,
-	0x11d8, 0x7024, 0x2060, 0x9c84, 0x0003, 0x11b0, 0x9c82, 0x1ddc,
-	0x0298, 0x6868, 0x9c02, 0x1280, 0x7008, 0x9084, 0x00ff, 0x6110,
-	0x2158, 0xb910, 0x9106, 0x1140, 0x700c, 0xb914, 0x9106, 0x1120,
-	0x2009, 0x0051, 0x080c, 0xac68, 0x7817, 0x0140, 0x00be, 0x0005,
-	0x2031, 0x0105, 0x0069, 0x0005, 0x2031, 0x0206, 0x0049, 0x0005,
-	0x2031, 0x0207, 0x0029, 0x0005, 0x2031, 0x0213, 0x0009, 0x0005,
-	0x00c6, 0x0096, 0x00f6, 0x7000, 0x9084, 0xf000, 0x9086, 0xc000,
-	0x05c0, 0x080c, 0xab73, 0x05a8, 0x0066, 0x00c6, 0x0046, 0x2011,
-	0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x25fb, 0x1590, 0x080c,
-	0x65bd, 0x1578, 0xbe12, 0xbd16, 0x2b00, 0x004e, 0x00ce, 0x6012,
-	0x080c, 0xcca8, 0x080c, 0x103a, 0x0500, 0x2900, 0x6062, 0x9006,
-	0xa802, 0xa866, 0xac6a, 0xa85c, 0x90f8, 0x001b, 0x20a9, 0x000e,
-	0xa860, 0x20e8, 0x20e1, 0x0000, 0x2fa0, 0x2e98, 0x4003, 0x006e,
-	0x6616, 0x6007, 0x003e, 0x6023, 0x0001, 0x6003, 0x0001, 0x080c,
-	0x91f4, 0x00fe, 0x009e, 0x00ce, 0x0005, 0x080c, 0xabc9, 0x006e,
-	0x0cc0, 0x004e, 0x00ce, 0x0cc8, 0x00c6, 0x7000, 0x908c, 0xff00,
-	0x9184, 0xf000, 0x810f, 0x9086, 0x2000, 0x1904, 0x84c3, 0x9186,
-	0x0022, 0x15f0, 0x2001, 0x0111, 0x2004, 0x9005, 0x1904, 0x84c5,
-	0x7030, 0x908e, 0x0400, 0x0904, 0x84c5, 0x908e, 0x6000, 0x05e8,
-	0x908e, 0x5400, 0x05d0, 0x908e, 0x0300, 0x11d8, 0x2009, 0x1837,
-	0x210c, 0xd18c, 0x1590, 0xd1a4, 0x1580, 0x080c, 0x6a19, 0x0558,
-	0x68b0, 0x9084, 0x00ff, 0x7100, 0x918c, 0x00ff, 0x9106, 0x1518,
-	0x6880, 0x69b0, 0x918c, 0xff00, 0x9105, 0x7104, 0x9106, 0x11d8,
-	0x00e0, 0x2009, 0x0103, 0x210c, 0xd1b4, 0x11a8, 0x908e, 0x5200,
-	0x09e8, 0x908e, 0x0500, 0x09d0, 0x908e, 0x5000, 0x09b8, 0x0058,
-	0x9186, 0x0023, 0x1140, 0x080c, 0x83db, 0x0128, 0x6004, 0x9086,
-	0x0002, 0x0118, 0x0000, 0x9006, 0x0010, 0x9085, 0x0001, 0x00ce,
-	0x0005, 0x0156, 0x0046, 0x0016, 0x0036, 0x7038, 0x2020, 0x8427,
-	0x94a4, 0x0007, 0xd484, 0x0148, 0x20a9, 0x0004, 0x2019, 0x1805,
-	0x2011, 0x027a, 0x080c, 0xbb8a, 0x1178, 0xd48c, 0x0148, 0x20a9,
-	0x0004, 0x2019, 0x1801, 0x2011, 0x027e, 0x080c, 0xbb8a, 0x1120,
-	0xd494, 0x0110, 0x9085, 0x0001, 0x003e, 0x001e, 0x004e, 0x015e,
-	0x0005, 0x0156, 0x0046, 0x0016, 0x0036, 0x7038, 0x2020, 0x8427,
-	0x94a4, 0x0007, 0xd484, 0x0148, 0x20a9, 0x0004, 0x2019, 0x1805,
-	0x2011, 0x0272, 0x080c, 0xbb8a, 0x1178, 0xd48c, 0x0148, 0x20a9,
-	0x0004, 0x2019, 0x1801, 0x2011, 0x0276, 0x080c, 0xbb8a, 0x1120,
-	0xd494, 0x0110, 0x9085, 0x0001, 0x003e, 0x001e, 0x004e, 0x015e,
-	0x0005, 0x00f6, 0x2079, 0x0200, 0x7800, 0xc0e5, 0xc0cc, 0x7802,
-	0x00fe, 0x0005, 0x00f6, 0x2079, 0x1800, 0x7834, 0xd084, 0x1130,
-	0x2079, 0x0200, 0x7800, 0x9085, 0x1200, 0x7802, 0x00fe, 0x0005,
-	0x00e6, 0x2071, 0x1800, 0x7034, 0xc084, 0x7036, 0x00ee, 0x0005,
-	0x2071, 0x1a03, 0x7003, 0x0003, 0x700f, 0x0361, 0x9006, 0x701a,
-	0x7072, 0x7012, 0x7017, 0x1ddc, 0x7007, 0x0000, 0x7026, 0x702b,
-	0x9e30, 0x7032, 0x7037, 0x9ead, 0x703f, 0xffff, 0x7042, 0x7047,
-	0x556a, 0x704a, 0x705b, 0x86e0, 0x080c, 0x1053, 0x090c, 0x0d7d,
-	0x2900, 0x703a, 0xa867, 0x0003, 0xa86f, 0x0100, 0xa8ab, 0xdcb0,
-	0x0005, 0x2071, 0x1a03, 0x1d04, 0x85fc, 0x2091, 0x6000, 0x700c,
-	0x8001, 0x700e, 0x1590, 0x2001, 0x013c, 0x2004, 0x9005, 0x190c,
-	0x878a, 0x2001, 0x1869, 0x2004, 0xd0c4, 0x0158, 0x3a00, 0xd08c,
-	0x1140, 0x20d1, 0x0000, 0x20d1, 0x0001, 0x20d1, 0x0000, 0x080c,
-	0x0d7d, 0x700f, 0x0361, 0x7007, 0x0001, 0x0126, 0x2091, 0x8000,
-	0x2069, 0x1800, 0x69ec, 0xd1e4, 0x1138, 0xd1dc, 0x1118, 0x080c,
-	0x874e, 0x0010, 0x080c, 0x8725, 0x7040, 0x900d, 0x0148, 0x8109,
-	0x7142, 0x1130, 0x7044, 0x080f, 0x0018, 0x0126, 0x2091, 0x8000,
-	0x7024, 0x900d, 0x0188, 0x7020, 0x8001, 0x7022, 0x1168, 0x7023,
-	0x0009, 0x8109, 0x7126, 0x9186, 0x03e8, 0x1110, 0x7028, 0x080f,
-	0x81ff, 0x1110, 0x7028, 0x080f, 0x7030, 0x900d, 0x0180, 0x702c,
-	0x8001, 0x702e, 0x1160, 0x702f, 0x0009, 0x8109, 0x7132, 0x0128,
-	0x9184, 0x007f, 0x090c, 0x9f49, 0x0010, 0x7034, 0x080f, 0x703c,
-	0x9005, 0x0118, 0x0310, 0x8001, 0x703e, 0x704c, 0x900d, 0x0168,
-	0x7048, 0x8001, 0x704a, 0x1148, 0x704b, 0x0009, 0x8109, 0x714e,
-	0x1120, 0x7150, 0x714e, 0x7058, 0x080f, 0x7018, 0x900d, 0x01d8,
-	0x0016, 0x7070, 0x900d, 0x0158, 0x706c, 0x8001, 0x706e, 0x1138,
-	0x706f, 0x0009, 0x8109, 0x7172, 0x1110, 0x7074, 0x080f, 0x001e,
-	0x7008, 0x8001, 0x700a, 0x1138, 0x700b, 0x0009, 0x8109, 0x711a,
-	0x1110, 0x701c, 0x080f, 0x012e, 0x7004, 0x0002, 0x8624, 0x8625,
-	0x864f, 0x00e6, 0x2071, 0x1a03, 0x7018, 0x9005, 0x1120, 0x711a,
-	0x721e, 0x700b, 0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071,
-	0x1a03, 0x701c, 0x9206, 0x1120, 0x701a, 0x701e, 0x7072, 0x7076,
-	0x000e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1a03, 0xb888, 0x9102,
-	0x0208, 0xb98a, 0x00ee, 0x0005, 0x0005, 0x00b6, 0x2031, 0x0010,
-	0x7110, 0x080c, 0x661e, 0x11a8, 0xb888, 0x8001, 0x0290, 0xb88a,
-	0x1180, 0x0126, 0x2091, 0x8000, 0x0066, 0xb8d0, 0x9005, 0x0138,
-	0x0026, 0xba3c, 0x0016, 0x080c, 0x6749, 0x001e, 0x002e, 0x006e,
-	0x012e, 0x8108, 0x9182, 0x0800, 0x1220, 0x8631, 0x0128, 0x7112,
-	0x0c00, 0x900e, 0x7007, 0x0002, 0x7112, 0x00be, 0x0005, 0x2031,
-	0x0010, 0x7014, 0x2060, 0x0126, 0x2091, 0x8000, 0x6048, 0x9005,
-	0x0128, 0x8001, 0x604a, 0x1110, 0x080c, 0xcb29, 0x6018, 0x9005,
-	0x0904, 0x86a7, 0x00f6, 0x2079, 0x0300, 0x7918, 0xd1b4, 0x1904,
-	0x86ba, 0x781b, 0x2020, 0xa001, 0x7918, 0xd1b4, 0x0120, 0x781b,
-	0x2000, 0x0804, 0x86ba, 0x8001, 0x601a, 0x0106, 0x781b, 0x2000,
-	0xa001, 0x7918, 0xd1ac, 0x1dd0, 0x010e, 0x00fe, 0x1540, 0x6120,
-	0x9186, 0x0003, 0x0148, 0x9186, 0x0006, 0x0130, 0x9186, 0x0009,
-	0x11e0, 0x611c, 0xd1c4, 0x1100, 0x080c, 0xc814, 0x01b0, 0x6014,
-	0x2048, 0xa884, 0x908a, 0x199a, 0x0280, 0x9082, 0x1999, 0xa886,
-	0x908a, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x800b, 0x810b,
-	0x9108, 0x611a, 0x080c, 0xcf5a, 0x0110, 0x080c, 0xc512, 0x012e,
-	0x9c88, 0x001c, 0x7116, 0x2001, 0x181a, 0x2004, 0x9102, 0x1228,
-	0x8631, 0x0138, 0x2160, 0x0804, 0x8653, 0x7017, 0x1ddc, 0x7007,
-	0x0000, 0x0005, 0x00fe, 0x0c58, 0x00e6, 0x2071, 0x1a03, 0x7027,
-	0x07d0, 0x7023, 0x0009, 0x00ee, 0x0005, 0x2001, 0x1a0c, 0x2003,
-	0x0000, 0x0005, 0x00e6, 0x2071, 0x1a03, 0x7132, 0x702f, 0x0009,
-	0x00ee, 0x0005, 0x2011, 0x1a0f, 0x2013, 0x0000, 0x0005, 0x00e6,
-	0x2071, 0x1a03, 0x711a, 0x721e, 0x700b, 0x0009, 0x00ee, 0x0005,
-	0x0086, 0x0026, 0x7054, 0x8000, 0x7056, 0x2001, 0x1a11, 0x2044,
-	0xa06c, 0x9086, 0x0000, 0x0150, 0x7068, 0xa09a, 0x7064, 0xa096,
-	0x7060, 0xa092, 0x705c, 0xa08e, 0x080c, 0x1124, 0x002e, 0x008e,
-	0x0005, 0x0006, 0x0016, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6,
-	0x00e6, 0x00f6, 0x0156, 0x080c, 0x8561, 0x015e, 0x00fe, 0x00ee,
-	0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x001e, 0x000e, 0x0005,
-	0x00e6, 0x2071, 0x1a03, 0x7172, 0x7276, 0x706f, 0x0009, 0x00ee,
-	0x0005, 0x00e6, 0x0006, 0x2071, 0x1a03, 0x7074, 0x9206, 0x1110,
-	0x7072, 0x7076, 0x000e, 0x00ee, 0x0005, 0x2069, 0x1800, 0x69ec,
-	0xd1e4, 0x1518, 0x0026, 0xd1ec, 0x0140, 0x6a54, 0x6874, 0x9202,
-	0x0288, 0x8117, 0x9294, 0x00c1, 0x0088, 0x9184, 0x0007, 0x01a0,
-	0x8109, 0x9184, 0x0007, 0x0110, 0x69ee, 0x0070, 0x8107, 0x9084,
-	0x0007, 0x910d, 0x8107, 0x9106, 0x9094, 0x00c1, 0x9184, 0xff3e,
-	0x9205, 0x68ee, 0x080c, 0x0f05, 0x002e, 0x0005, 0x69e8, 0x9184,
-	0x003f, 0x05b8, 0x8109, 0x9184, 0x003f, 0x01a8, 0x6a54, 0x6874,
-	0x9202, 0x0220, 0xd1bc, 0x0168, 0xc1bc, 0x0018, 0xd1bc, 0x1148,
-	0xc1bd, 0x2110, 0x00e6, 0x2071, 0x1800, 0x080c, 0x0f27, 0x00ee,
-	0x0400, 0x69ea, 0x00f0, 0x0026, 0x8107, 0x9094, 0x0007, 0x0128,
-	0x8001, 0x8007, 0x9085, 0x0007, 0x0050, 0x2010, 0x8004, 0x8004,
-	0x8004, 0x9084, 0x0007, 0x9205, 0x8007, 0x9085, 0x0028, 0x9086,
-	0x0040, 0x2010, 0x00e6, 0x2071, 0x1800, 0x080c, 0x0f27, 0x00ee,
-	0x002e, 0x0005, 0x0016, 0x00c6, 0x2009, 0xfffc, 0x210d, 0x2061,
-	0x0100, 0x60f0, 0x9100, 0x60f3, 0x0000, 0x2009, 0xfffc, 0x200f,
-	0x1220, 0x8108, 0x2105, 0x8000, 0x200f, 0x00ce, 0x001e, 0x0005,
-	0x00c6, 0x2061, 0x1a6f, 0x00ce, 0x0005, 0x9184, 0x000f, 0x8003,
-	0x8003, 0x8003, 0x9080, 0x1a6f, 0x2060, 0x0005, 0xa884, 0x908a,
-	0x199a, 0x1638, 0x9005, 0x1150, 0x00c6, 0x2061, 0x1a6f, 0x6014,
-	0x00ce, 0x9005, 0x1130, 0x2001, 0x001e, 0x0018, 0x908e, 0xffff,
-	0x01b0, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0xa87c, 0x908c,
-	0x00c0, 0x918e, 0x00c0, 0x0904, 0x8865, 0xd0b4, 0x1168, 0xd0bc,
-	0x1904, 0x883e, 0x2009, 0x0006, 0x080c, 0x8892, 0x0005, 0x900e,
-	0x0c60, 0x2001, 0x1999, 0x08b0, 0xd0fc, 0x05c8, 0x908c, 0x2023,
-	0x1550, 0x87ff, 0x1540, 0x6124, 0x918c, 0x0500, 0x1520, 0x6100,
-	0x918e, 0x0007, 0x1500, 0x2009, 0x1869, 0x210c, 0xd184, 0x11d8,
-	0x6003, 0x0003, 0x6007, 0x0043, 0x6047, 0xb035, 0x080c, 0x1c03,
-	0xa87c, 0xc0dd, 0xa87e, 0x600f, 0x0000, 0x00f6, 0x2079, 0x0380,
-	0x7818, 0xd0bc, 0x1de8, 0x7833, 0x0013, 0x2c00, 0x7836, 0x781b,
-	0x8080, 0x00fe, 0x0005, 0x908c, 0x0003, 0x0120, 0x918e, 0x0003,
-	0x1904, 0x888c, 0x908c, 0x2020, 0x918e, 0x2020, 0x01a8, 0x6024,
-	0xd0d4, 0x11e8, 0x2009, 0x1869, 0x2104, 0xd084, 0x1138, 0x87ff,
-	0x1120, 0x2009, 0x0043, 0x0804, 0xac68, 0x0005, 0x87ff, 0x1de8,
-	0x2009, 0x0042, 0x0804, 0xac68, 0x6110, 0x00b6, 0x2158, 0xb900,
-	0x00be, 0xd1ac, 0x0d20, 0x6024, 0xc0cd, 0x6026, 0x0c00, 0xc0d4,
-	0x6026, 0xa890, 0x602e, 0xa88c, 0x6032, 0x08e0, 0xd0fc, 0x0160,
-	0x908c, 0x0003, 0x0120, 0x918e, 0x0003, 0x1904, 0x888c, 0x908c,
-	0x2020, 0x918e, 0x2020, 0x0170, 0x0076, 0x00f6, 0x2c78, 0x080c,
-	0x1731, 0x00fe, 0x007e, 0x87ff, 0x1120, 0x2009, 0x0042, 0x080c,
-	0xac68, 0x0005, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1ac,
-	0x0d58, 0x6124, 0xc1cd, 0x6126, 0x0c38, 0xd0fc, 0x0188, 0x908c,
-	0x2020, 0x918e, 0x2020, 0x01a8, 0x9084, 0x0003, 0x908e, 0x0002,
-	0x0148, 0x87ff, 0x1120, 0x2009, 0x0041, 0x080c, 0xac68, 0x0005,
-	0x00b9, 0x0ce8, 0x87ff, 0x1dd8, 0x2009, 0x0043, 0x080c, 0xac68,
-	0x0cb0, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1ac, 0x0d20,
-	0x6124, 0xc1cd, 0x6126, 0x0c00, 0x2009, 0x0004, 0x0019, 0x0005,
-	0x2009, 0x0001, 0x0096, 0x080c, 0xc814, 0x0518, 0x6014, 0x2048,
-	0xa982, 0xa800, 0x6016, 0x9186, 0x0001, 0x1188, 0xa97c, 0x918c,
-	0x8100, 0x918e, 0x8100, 0x1158, 0x00c6, 0x2061, 0x1a6f, 0x6200,
-	0xd28c, 0x1120, 0x6204, 0x8210, 0x0208, 0x6206, 0x00ce, 0x080c,
-	0x6ba5, 0x6014, 0x904d, 0x0076, 0x2039, 0x0000, 0x190c, 0x87ae,
-	0x007e, 0x009e, 0x0005, 0x0156, 0x00c6, 0x2061, 0x1a6f, 0x6000,
-	0x81ff, 0x0110, 0x9205, 0x0008, 0x9204, 0x6002, 0x00ce, 0x015e,
-	0x0005, 0x6800, 0xd08c, 0x1138, 0x6808, 0x9005, 0x0120, 0x8001,
-	0x680a, 0x9085, 0x0001, 0x0005, 0x2071, 0x1923, 0x7003, 0x0006,
-	0x7007, 0x0000, 0x700f, 0x0000, 0x7013, 0x0001, 0x080c, 0x1053,
-	0x090c, 0x0d7d, 0xa867, 0x0006, 0xa86b, 0x0001, 0xa8ab, 0xdcb0,
-	0xa89f, 0x0000, 0x2900, 0x702e, 0x7033, 0x0000, 0x0005, 0x0096,
-	0x00e6, 0x2071, 0x1923, 0x702c, 0x2048, 0x6a2c, 0x721e, 0x6b30,
-	0x7322, 0x6834, 0x7026, 0xa896, 0x6838, 0x702a, 0xa89a, 0x6824,
-	0x7016, 0x683c, 0x701a, 0x2009, 0x0028, 0x200a, 0x9005, 0x0148,
-	0x900e, 0x9188, 0x000c, 0x8001, 0x1de0, 0x2100, 0x9210, 0x1208,
-	0x8318, 0xaa8e, 0xab92, 0x7010, 0xd084, 0x0178, 0xc084, 0x7007,
-	0x0001, 0x700f, 0x0000, 0x0006, 0x2009, 0x181d, 0x2104, 0x9082,
-	0x0007, 0x2009, 0x1b4e, 0x200a, 0x000e, 0xc095, 0x7012, 0x2008,
-	0x2001, 0x003b, 0x080c, 0x1679, 0x9006, 0x2071, 0x193c, 0x7002,
-	0x7006, 0x702a, 0x00ee, 0x009e, 0x0005, 0x00e6, 0x0126, 0x0156,
-	0x2091, 0x8000, 0x2071, 0x1800, 0x7154, 0x2001, 0x0008, 0x910a,
-	0x0638, 0x2001, 0x187d, 0x20ac, 0x9006, 0x9080, 0x0008, 0x1f04,
-	0x8945, 0x71c0, 0x9102, 0x02e0, 0x2071, 0x1877, 0x20a9, 0x0007,
-	0x00c6, 0x080c, 0xab73, 0x6023, 0x0009, 0x6003, 0x0004, 0x601f,
-	0x0101, 0x0089, 0x0126, 0x2091, 0x8000, 0x080c, 0x8acb, 0x012e,
-	0x1f04, 0x8951, 0x9006, 0x00ce, 0x015e, 0x012e, 0x00ee, 0x0005,
-	0x9085, 0x0001, 0x0cc8, 0x00e6, 0x00b6, 0x0096, 0x0086, 0x0056,
-	0x0046, 0x0026, 0x7118, 0x720c, 0x7620, 0x7004, 0xd084, 0x1128,
-	0x2021, 0x0024, 0x2029, 0x0002, 0x0020, 0x2021, 0x002c, 0x2029,
-	0x000a, 0x080c, 0x103a, 0x090c, 0x0d7d, 0x2900, 0x6016, 0x2058,
-	0xac66, 0x9006, 0xa802, 0xa806, 0xa86a, 0xa87a, 0xa8aa, 0xa887,
-	0x0005, 0xa87f, 0x0020, 0x7008, 0xa89a, 0x7010, 0xa89e, 0xae8a,
-	0xa8af, 0xffff, 0xa8b3, 0x0000, 0x8109, 0x0160, 0x080c, 0x103a,
-	0x090c, 0x0d7d, 0xad66, 0x2b00, 0xa802, 0x2900, 0xb806, 0x2058,
-	0x8109, 0x1da0, 0x002e, 0x004e, 0x005e, 0x008e, 0x009e, 0x00be,
-	0x00ee, 0x0005, 0x2079, 0x0000, 0x2071, 0x1923, 0x7004, 0x004b,
-	0x700c, 0x0002, 0x89bd, 0x89b6, 0x89b6, 0x0005, 0x89c7, 0x8a28,
-	0x8a28, 0x8a28, 0x8a29, 0x8a3a, 0x8a3a, 0x700c, 0x0cba, 0x0126,
-	0x2091, 0x8000, 0x78a0, 0x79a0, 0x9106, 0x0128, 0x78a0, 0x79a0,
-	0x9106, 0x1904, 0x8a1b, 0x2001, 0x0005, 0x2004, 0xd0bc, 0x0130,
-	0x2011, 0x0004, 0x2204, 0xc0c5, 0x2012, 0x0ca8, 0x012e, 0x7018,
-	0x910a, 0x1130, 0x7030, 0x9005, 0x05a8, 0x080c, 0x8a69, 0x0490,
-	0x1210, 0x7114, 0x910a, 0x9192, 0x000a, 0x0210, 0x2009, 0x000a,
-	0x2001, 0x1888, 0x2014, 0x2001, 0x1935, 0x2004, 0x9100, 0x9202,
-	0x0e48, 0x080c, 0x8bb5, 0x2200, 0x9102, 0x0208, 0x2208, 0x0096,
-	0x702c, 0x2048, 0xa873, 0x0001, 0xa976, 0x080c, 0x8cbe, 0x2100,
-	0xa87e, 0xa86f, 0x0000, 0x009e, 0x0126, 0x2091, 0x8000, 0x2009,
-	0x1a21, 0x2104, 0xc085, 0x200a, 0x700f, 0x0002, 0x012e, 0x080c,
-	0x1143, 0x1de8, 0x0005, 0x2001, 0x0005, 0x2004, 0xd0bc, 0x0130,
-	0x2011, 0x0004, 0x2204, 0xc0c5, 0x2012, 0x0ca8, 0x012e, 0x0005,
-	0x0005, 0x700c, 0x0002, 0x8a2e, 0x8a31, 0x8a30, 0x080c, 0x89c5,
-	0x0005, 0x8001, 0x700e, 0x0096, 0x702c, 0x2048, 0xa974, 0x009e,
-	0x0011, 0x0ca0, 0x0005, 0x0096, 0x702c, 0x2048, 0x7018, 0x9100,
-	0x7214, 0x921a, 0x1130, 0x701c, 0xa88e, 0x7020, 0xa892, 0x9006,
-	0x0068, 0x0006, 0x080c, 0x8cbe, 0x2100, 0xaa8c, 0x9210, 0xaa8e,
-	0x1220, 0xa890, 0x9081, 0x0000, 0xa892, 0x000e, 0x009e, 0x2f08,
-	0x9188, 0x0028, 0x200a, 0x701a, 0x0005, 0x00e6, 0x2071, 0x1923,
-	0x700c, 0x0002, 0x8a67, 0x8a67, 0x8a65, 0x700f, 0x0001, 0x00ee,
-	0x0005, 0x0126, 0x2091, 0x8000, 0x7030, 0x9005, 0x0508, 0x2078,
-	0x7814, 0x2048, 0xae88, 0x00b6, 0x2059, 0x0000, 0x080c, 0x8ad4,
-	0x00be, 0x01b0, 0x00e6, 0x2071, 0x193c, 0x080c, 0x8b1b, 0x00ee,
-	0x0178, 0x0096, 0x080c, 0x1053, 0x2900, 0x009e, 0x0148, 0xa8aa,
-	0x04b9, 0x0041, 0x2001, 0x1946, 0x2003, 0x0000, 0x012e, 0x08c8,
-	0x012e, 0x0005, 0x00d6, 0x00c6, 0x0086, 0x00a6, 0x2940, 0x2650,
-	0x2600, 0x9005, 0x0180, 0xa864, 0x9084, 0x000f, 0x2068, 0x9d88,
-	0x1e55, 0x2165, 0x0056, 0x2029, 0x0000, 0x080c, 0x8c43, 0x080c,
-	0x1e2b, 0x1dd8, 0x005e, 0x00ae, 0x2001, 0x187f, 0x2004, 0xa88a,
-	0x080c, 0x1731, 0x781f, 0x0101, 0x7813, 0x0000, 0x0126, 0x2091,
-	0x8000, 0x080c, 0x8b2a, 0x012e, 0x008e, 0x00ce, 0x00de, 0x0005,
-	0x7030, 0x9005, 0x0138, 0x2078, 0x780c, 0x7032, 0x2001, 0x1946,
-	0x2003, 0x0001, 0x0005, 0x00e6, 0x2071, 0x1923, 0x7030, 0x600e,
-	0x2c00, 0x7032, 0x00ee, 0x0005, 0x00d6, 0x00c6, 0x0026, 0x9b80,
-	0x8d9d, 0x2005, 0x906d, 0x090c, 0x0d7d, 0x9b80, 0x8d95, 0x2005,
-	0x9065, 0x090c, 0x0d7d, 0x6114, 0x2600, 0x9102, 0x0248, 0x6828,
-	0x9102, 0x02f0, 0x9085, 0x0001, 0x002e, 0x00ce, 0x00de, 0x0005,
-	0x6804, 0xd094, 0x0148, 0x6854, 0xd084, 0x1178, 0xc085, 0x6856,
-	0x2011, 0x8026, 0x080c, 0x4b00, 0x684c, 0x0096, 0x904d, 0x090c,
-	0x0d7d, 0xa804, 0x8000, 0xa806, 0x009e, 0x9006, 0x2030, 0x0c20,
-	0x6854, 0xd08c, 0x1d08, 0xc08d, 0x6856, 0x2011, 0x8025, 0x080c,
-	0x4b00, 0x684c, 0x0096, 0x904d, 0x090c, 0x0d7d, 0xa800, 0x8000,
-	0xa802, 0x009e, 0x0888, 0x7000, 0x2019, 0x0008, 0x8319, 0x7104,
-	0x9102, 0x1118, 0x2300, 0x9005, 0x0020, 0x0210, 0x9302, 0x0008,
-	0x8002, 0x0005, 0x00d6, 0x7814, 0x9005, 0x090c, 0x0d7d, 0x781c,
-	0x9084, 0x0101, 0x9086, 0x0101, 0x190c, 0x0d7d, 0x2069, 0x193c,
-	0x6804, 0x9080, 0x193e, 0x2f08, 0x2102, 0x6904, 0x8108, 0x9182,
-	0x0008, 0x0208, 0x900e, 0x6906, 0x9180, 0x193e, 0x2003, 0x0000,
-	0x00de, 0x0005, 0x0096, 0x00c6, 0x2060, 0x6014, 0x2048, 0xa8a8,
-	0x0096, 0x2048, 0x9005, 0x190c, 0x106c, 0x009e, 0xa8ab, 0x0000,
-	0x080c, 0x0fec, 0x080c, 0xabc9, 0x00ce, 0x009e, 0x0005, 0x6020,
-	0x9086, 0x0009, 0x1128, 0x601c, 0xd0c4, 0x0110, 0x9006, 0x0005,
-	0x9085, 0x0001, 0x0005, 0x6000, 0x9086, 0x0000, 0x0178, 0x6010,
-	0x9005, 0x0150, 0x00b6, 0x2058, 0x080c, 0x8ed0, 0x00be, 0x6013,
-	0x0000, 0x601b, 0x0000, 0x0010, 0x2c00, 0x0861, 0x0005, 0x2009,
-	0x1927, 0x210c, 0xd194, 0x0005, 0x00e6, 0x2071, 0x1923, 0x7110,
-	0xc194, 0xd19c, 0x1118, 0xc185, 0x7007, 0x0000, 0x7112, 0x2001,
-	0x003b, 0x080c, 0x1679, 0x00ee, 0x0005, 0x0096, 0x00d6, 0x9006,
-	0x7006, 0x700e, 0x701a, 0x701e, 0x7022, 0x7016, 0x702a, 0x7026,
-	0x702f, 0x0000, 0x080c, 0x8d1d, 0x0170, 0x080c, 0x8d52, 0x0158,
-	0x2900, 0x7002, 0x700a, 0x701a, 0x7013, 0x0001, 0x701f, 0x000a,
-	0x00de, 0x009e, 0x0005, 0x900e, 0x0cd8, 0x00e6, 0x0096, 0x0086,
-	0x00d6, 0x00c6, 0x2071, 0x1930, 0x721c, 0x2100, 0x9202, 0x1618,
-	0x080c, 0x8d52, 0x090c, 0x0d7d, 0x7018, 0x9005, 0x1160, 0x2900,
-	0x7002, 0x700a, 0x701a, 0x9006, 0x7006, 0x700e, 0xa806, 0xa802,
-	0x7012, 0x701e, 0x0038, 0x2040, 0xa806, 0x2900, 0xa002, 0x701a,
-	0xa803, 0x0000, 0x7010, 0x8000, 0x7012, 0x701c, 0x9080, 0x000a,
-	0x701e, 0x721c, 0x08d0, 0x721c, 0x00ce, 0x00de, 0x008e, 0x009e,
-	0x00ee, 0x0005, 0x0096, 0x0156, 0x0136, 0x0146, 0x00e6, 0x0126,
-	0x2091, 0x8000, 0x2071, 0x1930, 0x7300, 0x831f, 0x831e, 0x831e,
-	0x9384, 0x003f, 0x20e8, 0x939c, 0xffc0, 0x9398, 0x0003, 0x7104,
-	0x080c, 0x8cbe, 0x810c, 0x2100, 0x9318, 0x8003, 0x2228, 0x2021,
-	0x0078, 0x9402, 0x9532, 0x0208, 0x2028, 0x2500, 0x8004, 0x20a8,
-	0x23a0, 0xa001, 0xa001, 0x4005, 0x2508, 0x080c, 0x8cc7, 0x2130,
-	0x7014, 0x9600, 0x7016, 0x2600, 0x711c, 0x9102, 0x701e, 0x7004,
-	0x9600, 0x2008, 0x9082, 0x000a, 0x1190, 0x7000, 0x2048, 0xa800,
-	0x9005, 0x1148, 0x2009, 0x0001, 0x0026, 0x080c, 0x8bb5, 0x002e,
-	0x7000, 0x2048, 0xa800, 0x7002, 0x7007, 0x0000, 0x0008, 0x7106,
-	0x2500, 0x9212, 0x1904, 0x8bf4, 0x012e, 0x00ee, 0x014e, 0x013e,
-	0x015e, 0x009e, 0x0005, 0x0016, 0x0026, 0x00e6, 0x0126, 0x2091,
-	0x8000, 0x9580, 0x8d95, 0x2005, 0x9075, 0x090c, 0x0d7d, 0x080c,
-	0x8c99, 0x012e, 0x9580, 0x8d91, 0x2005, 0x9075, 0x090c, 0x0d7d,
-	0x0156, 0x0136, 0x01c6, 0x0146, 0x01d6, 0x831f, 0x831e, 0x831e,
-	0x9384, 0x003f, 0x20e0, 0x9384, 0xffc0, 0x9100, 0x2098, 0xa860,
-	0x20e8, 0xa95c, 0x2c05, 0x9100, 0x20a0, 0x20a9, 0x0002, 0x4003,
-	0x2e0c, 0x2d00, 0x0002, 0x8c83, 0x8c83, 0x8c85, 0x8c83, 0x8c85,
-	0x8c83, 0x8c83, 0x8c83, 0x8c83, 0x8c83, 0x8c8b, 0x8c83, 0x8c8b,
-	0x8c83, 0x8c83, 0x8c83, 0x080c, 0x0d7d, 0x4104, 0x20a9, 0x0002,
-	0x4002, 0x4003, 0x0028, 0x20a9, 0x0002, 0x4003, 0x4104, 0x4003,
-	0x01de, 0x014e, 0x01ce, 0x013e, 0x015e, 0x00ee, 0x002e, 0x001e,
-	0x0005, 0x0096, 0x7014, 0x8001, 0x7016, 0x710c, 0x2110, 0x00f1,
-	0x810c, 0x9188, 0x0003, 0x7308, 0x8210, 0x9282, 0x000a, 0x1198,
-	0x7008, 0x2048, 0xa800, 0x9005, 0x0158, 0x0006, 0x080c, 0x8d61,
-	0x009e, 0xa807, 0x0000, 0x2900, 0x700a, 0x7010, 0x8001, 0x7012,
-	0x700f, 0x0000, 0x0008, 0x720e, 0x009e, 0x0005, 0x0006, 0x810b,
-	0x810b, 0x2100, 0x810b, 0x9100, 0x2008, 0x000e, 0x0005, 0x0006,
-	0x0026, 0x2100, 0x9005, 0x0158, 0x9092, 0x000c, 0x0240, 0x900e,
-	0x8108, 0x9082, 0x000c, 0x1de0, 0x002e, 0x000e, 0x0005, 0x900e,
-	0x0cd8, 0x2d00, 0x90b8, 0x0008, 0x690c, 0x6810, 0x2019, 0x0001,
-	0x2031, 0x8d07, 0x9112, 0x0220, 0x0118, 0x8318, 0x2208, 0x0cd0,
-	0x6808, 0x9005, 0x0108, 0x8318, 0x233a, 0x6804, 0xd084, 0x2300,
-	0x2021, 0x0001, 0x1150, 0x9082, 0x0003, 0x0967, 0x0a67, 0x8420,
-	0x9082, 0x0007, 0x0967, 0x0a67, 0x0cd0, 0x9082, 0x0002, 0x0967,
-	0x0a67, 0x8420, 0x9082, 0x0005, 0x0967, 0x0a67, 0x0cd0, 0x6c1a,
-	0x2d00, 0x90b8, 0x0007, 0x00e6, 0x2071, 0x1800, 0x7128, 0x6810,
-	0x2019, 0x0001, 0x910a, 0x0118, 0x0210, 0x8318, 0x0cd8, 0x2031,
-	0x8d1a, 0x0870, 0x6c16, 0x00ee, 0x0005, 0x0096, 0x0046, 0x0126,
-	0x2091, 0x8000, 0x2b00, 0x9080, 0x8d99, 0x2005, 0x9005, 0x090c,
-	0x0d7d, 0x2004, 0x90a0, 0x000a, 0x080c, 0x1053, 0x01d0, 0x2900,
-	0x7026, 0xa803, 0x0000, 0xa807, 0x0000, 0x080c, 0x1053, 0x0188,
-	0x7024, 0xa802, 0xa807, 0x0000, 0x2900, 0x7026, 0x94a2, 0x000a,
-	0x0110, 0x0208, 0x0c90, 0x9085, 0x0001, 0x012e, 0x004e, 0x009e,
-	0x0005, 0x7024, 0x9005, 0x0dc8, 0x2048, 0xac00, 0x080c, 0x106c,
-	0x2400, 0x0cc0, 0x0126, 0x2091, 0x8000, 0x7024, 0x2048, 0x9005,
-	0x0130, 0xa800, 0x7026, 0xa803, 0x0000, 0xa807, 0x0000, 0x012e,
-	0x0005, 0x0126, 0x2091, 0x8000, 0x7024, 0xa802, 0x2900, 0x7026,
-	0x012e, 0x0005, 0x0096, 0x9e80, 0x0009, 0x2004, 0x9005, 0x0138,
-	0x2048, 0xa800, 0x0006, 0x080c, 0x106c, 0x000e, 0x0cb8, 0x009e,
-	0x0005, 0x0096, 0x7008, 0x9005, 0x0138, 0x2048, 0xa800, 0x0006,
-	0x080c, 0x106c, 0x000e, 0x0cb8, 0x9006, 0x7002, 0x700a, 0x7006,
-	0x700e, 0x701a, 0x701e, 0x7022, 0x702a, 0x7026, 0x702e, 0x009e,
-	0x0005, 0x1a6d, 0x0000, 0x0000, 0x0000, 0x1930, 0x0000, 0x0000,
-	0x0000, 0x1888, 0x0000, 0x0000, 0x0000, 0x1877, 0x0000, 0x0000,
-	0x0000, 0x00e6, 0x00c6, 0x00b6, 0x00a6, 0xa8a8, 0x2040, 0x2071,
-	0x1877, 0x080c, 0x8ebb, 0xa067, 0x0023, 0x6010, 0x905d, 0x0904,
-	0x8e90, 0xb814, 0xa06e, 0xb910, 0xa172, 0xb9a0, 0xa176, 0x2001,
-	0x0003, 0xa07e, 0xa834, 0xa082, 0xa07b, 0x0000, 0xa898, 0x9005,
-	0x0118, 0xa078, 0xc085, 0xa07a, 0x2858, 0x2031, 0x0018, 0xa068,
-	0x908a, 0x0019, 0x1a0c, 0x0d7d, 0x2020, 0x2050, 0x2940, 0xa864,
-	0x90bc, 0x00ff, 0x908c, 0x000f, 0x91e0, 0x1e55, 0x2c65, 0x9786,
-	0x0024, 0x2c05, 0x1590, 0x908a, 0x0036, 0x1a0c, 0x0d7d, 0x9082,
-	0x001b, 0x0002, 0x8dfd, 0x8dfd, 0x8dff, 0x8dfd, 0x8dfd, 0x8dfd,
-	0x8e01, 0x8dfd, 0x8dfd, 0x8dfd, 0x8e03, 0x8dfd, 0x8dfd, 0x8dfd,
-	0x8e05, 0x8dfd, 0x8dfd, 0x8dfd, 0x8e07, 0x8dfd, 0x8dfd, 0x8dfd,
-	0x8e09, 0x8dfd, 0x8dfd, 0x8dfd, 0x8e0b, 0x080c, 0x0d7d, 0xa180,
-	0x04b8, 0xa190, 0x04a8, 0xa1a0, 0x0498, 0xa1b0, 0x0488, 0xa1c0,
-	0x0478, 0xa1d0, 0x0468, 0xa1e0, 0x0458, 0x908a, 0x0034, 0x1a0c,
-	0x0d7d, 0x9082, 0x001b, 0x0002, 0x8e2f, 0x8e2d, 0x8e2d, 0x8e2d,
-	0x8e2d, 0x8e2d, 0x8e31, 0x8e2d, 0x8e2d, 0x8e2d, 0x8e2d, 0x8e2d,
-	0x8e33, 0x8e2d, 0x8e2d, 0x8e2d, 0x8e2d, 0x8e2d, 0x8e35, 0x8e2d,
-	0x8e2d, 0x8e2d, 0x8e2d, 0x8e2d, 0x8e37, 0x080c, 0x0d7d, 0xa180,
-	0x0038, 0xa198, 0x0028, 0xa1b0, 0x0018, 0xa1c8, 0x0008, 0xa1e0,
-	0x2600, 0x0002, 0x8e53, 0x8e55, 0x8e57, 0x8e59, 0x8e5b, 0x8e5d,
-	0x8e5f, 0x8e61, 0x8e63, 0x8e65, 0x8e67, 0x8e69, 0x8e6b, 0x8e6d,
-	0x8e6f, 0x8e71, 0x8e73, 0x8e75, 0x8e77, 0x8e79, 0x8e7b, 0x8e7d,
-	0x8e7f, 0x8e81, 0x8e83, 0x080c, 0x0d7d, 0xb9e2, 0x0468, 0xb9de,
-	0x0458, 0xb9da, 0x0448, 0xb9d6, 0x0438, 0xb9d2, 0x0428, 0xb9ce,
-	0x0418, 0xb9ca, 0x0408, 0xb9c6, 0x00f8, 0xb9c2, 0x00e8, 0xb9be,
-	0x00d8, 0xb9ba, 0x00c8, 0xb9b6, 0x00b8, 0xb9b2, 0x00a8, 0xb9ae,
-	0x0098, 0xb9aa, 0x0088, 0xb9a6, 0x0078, 0xb9a2, 0x0068, 0xb99e,
-	0x0058, 0xb99a, 0x0048, 0xb996, 0x0038, 0xb992, 0x0028, 0xb98e,
-	0x0018, 0xb98a, 0x0008, 0xb986, 0x8631, 0x8421, 0x0120, 0x080c,
-	0x1e2b, 0x0804, 0x8dd7, 0x00ae, 0x00be, 0x00ce, 0x00ee, 0x0005,
-	0xa86c, 0xa06e, 0xa870, 0xa072, 0xa077, 0x00ff, 0x9006, 0x0804,
-	0x8db9, 0x0006, 0x0016, 0x00b6, 0x6010, 0x2058, 0xb810, 0x9005,
-	0x01b0, 0x2001, 0x1924, 0x2004, 0x9005, 0x0188, 0x2001, 0x1800,
-	0x2004, 0x9086, 0x0003, 0x1158, 0x0036, 0x0046, 0xbba0, 0x2021,
-	0x0004, 0x2011, 0x8014, 0x080c, 0x4b00, 0x004e, 0x003e, 0x00be,
-	0x001e, 0x000e, 0x0005, 0x9016, 0x710c, 0xa834, 0x910a, 0xa936,
-	0x7008, 0x9005, 0x0120, 0x8210, 0x910a, 0x0238, 0x0130, 0x7010,
-	0x8210, 0x910a, 0x0210, 0x0108, 0x0cd8, 0xaa8a, 0xa26a, 0x0005,
-	0x00f6, 0x00d6, 0x0036, 0x2079, 0x0300, 0x781b, 0x0200, 0x7818,
-	0xd094, 0x1dd8, 0x781b, 0x0202, 0xa001, 0xa001, 0x7818, 0xd094,
-	0x1da0, 0xb8ac, 0x9005, 0x01b8, 0x2068, 0x2079, 0x0000, 0x2c08,
-	0x911e, 0x1118, 0x680c, 0xb8ae, 0x0060, 0x9106, 0x0140, 0x2d00,
-	0x2078, 0x680c, 0x9005, 0x090c, 0x0d7d, 0x2068, 0x0cb0, 0x6b0c,
-	0x7b0e, 0x600f, 0x0000, 0x2079, 0x0300, 0x781b, 0x0200, 0x003e,
-	0x00de, 0x00fe, 0x0005, 0x00e6, 0x00d6, 0x0096, 0x00c6, 0x0036,
-	0x0126, 0x2091, 0x8000, 0x0156, 0x20a9, 0x01ff, 0x2071, 0x0300,
-	0x701b, 0x0200, 0x7018, 0xd094, 0x0110, 0x1f04, 0x8f10, 0x701b,
-	0x0202, 0xa001, 0xa001, 0x7018, 0xd094, 0x1d90, 0xb8ac, 0x9005,
-	0x01d0, 0x2060, 0x600c, 0xb8ae, 0x6003, 0x0004, 0x601b, 0x0000,
-	0x6013, 0x0000, 0x601f, 0x0101, 0x6014, 0x2048, 0xa88b, 0x0000,
-	0xa8a8, 0xa8ab, 0x0000, 0x904d, 0x090c, 0x0d7d, 0x080c, 0x106c,
-	0x080c, 0x8acb, 0x0c18, 0x2071, 0x0300, 0x701b, 0x0200, 0x015e,
-	0x012e, 0x003e, 0x00ce, 0x009e, 0x00de, 0x00ee, 0x0005, 0x00c6,
-	0x00b6, 0x0016, 0x0006, 0x0156, 0x080c, 0x25fb, 0x015e, 0x11b0,
-	0x080c, 0x65bd, 0x190c, 0x0d7d, 0x000e, 0x001e, 0xb912, 0xb816,
-	0x080c, 0xab73, 0x0140, 0x2b00, 0x6012, 0x6023, 0x0001, 0x2009,
-	0x0001, 0x080c, 0xac68, 0x00be, 0x00ce, 0x0005, 0x000e, 0x001e,
-	0x0cd0, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0d7d, 0x0013,
-	0x006e, 0x0005, 0x8f82, 0x8f82, 0x8f82, 0x8f84, 0x8fcd, 0x8f82,
-	0x8f82, 0x8f82, 0x9030, 0x8f82, 0x9068, 0x8f82, 0x8f82, 0x8f82,
-	0x8f82, 0x8f82, 0x080c, 0x0d7d, 0x9182, 0x0040, 0x0002, 0x8f97,
-	0x8f97, 0x8f97, 0x8f97, 0x8f97, 0x8f97, 0x8f97, 0x8f97, 0x8f97,
-	0x8f99, 0x8faa, 0x8f97, 0x8f97, 0x8f97, 0x8f97, 0x8fbb, 0x080c,
-	0x0d7d, 0x0096, 0x6114, 0x2148, 0xa87b, 0x0000, 0x6010, 0x00b6,
-	0x2058, 0xb8bb, 0x0500, 0x00be, 0x080c, 0x6b70, 0x080c, 0xabc9,
-	0x009e, 0x0005, 0x080c, 0x960a, 0x00d6, 0x6114, 0x080c, 0xc814,
-	0x0130, 0x0096, 0x6114, 0x2148, 0x080c, 0x6d70, 0x009e, 0x00de,
-	0x080c, 0xabc9, 0x0005, 0x080c, 0x960a, 0x080c, 0x31e4, 0x6114,
-	0x0096, 0x2148, 0x080c, 0xc814, 0x0120, 0xa87b, 0x0029, 0x080c,
-	0x6d70, 0x009e, 0x080c, 0xabc9, 0x0005, 0x601b, 0x0000, 0x9182,
-	0x0040, 0x0096, 0x0002, 0x8fe8, 0x8fe8, 0x8fe8, 0x8fe8, 0x8fe8,
-	0x8fe8, 0x8fe8, 0x8fe8, 0x8fea, 0x8fe8, 0x8fe8, 0x8fe8, 0x902c,
-	0x8fe8, 0x8fe8, 0x8fe8, 0x8fe8, 0x8fe8, 0x8fe8, 0x8ff0, 0x8fe8,
-	0x080c, 0x0d7d, 0x6114, 0x2148, 0xa938, 0x918e, 0xffff, 0x05e0,
-	0x00e6, 0x6114, 0x2148, 0x080c, 0x8da1, 0x0096, 0xa8a8, 0x2048,
-	0x080c, 0x6b08, 0x009e, 0xa8ab, 0x0000, 0x6010, 0x9005, 0x0128,
-	0x00b6, 0x2058, 0x080c, 0x8ed0, 0x00be, 0xae88, 0x00b6, 0x2059,
-	0x0000, 0x080c, 0x8ad4, 0x00be, 0x01e0, 0x2071, 0x193c, 0x080c,
-	0x8b1b, 0x01b8, 0x9086, 0x0001, 0x1128, 0x2001, 0x1946, 0x2004,
-	0x9005, 0x1178, 0x0096, 0x080c, 0x103a, 0x2900, 0x009e, 0x0148,
-	0xa8aa, 0x00f6, 0x2c78, 0x080c, 0x8a92, 0x00fe, 0x00ee, 0x009e,
-	0x0005, 0x080c, 0x8acb, 0x0cd0, 0x080c, 0x90e4, 0x009e, 0x0005,
-	0x9182, 0x0040, 0x0096, 0x0002, 0x9044, 0x9044, 0x9044, 0x9046,
-	0x9044, 0x9044, 0x9044, 0x9066, 0x9044, 0x9044, 0x9044, 0x9044,
-	0x9044, 0x9044, 0x9044, 0x9044, 0x080c, 0x0d7d, 0x6003, 0x0003,
-	0x6106, 0x6014, 0x2048, 0xa8ac, 0xa836, 0xa8b0, 0xa83a, 0xa847,
-	0x0000, 0xa84b, 0x0000, 0xa884, 0x9092, 0x199a, 0x0210, 0x2001,
-	0x1999, 0x8003, 0x8013, 0x8213, 0x9210, 0x621a, 0x080c, 0x1bba,
-	0x2009, 0x8030, 0x080c, 0x9234, 0x009e, 0x0005, 0x080c, 0x0d7d,
-	0x080c, 0x960a, 0x6114, 0x2148, 0xa87b, 0x0000, 0x6010, 0x00b6,
-	0x2058, 0xb8bb, 0x0500, 0x00be, 0x080c, 0x6d70, 0x080c, 0xabc9,
-	0x009e, 0x0005, 0x080c, 0xa872, 0x6144, 0xd1fc, 0x0120, 0xd1ac,
-	0x1110, 0x6003, 0x0003, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0d7d,
-	0x0096, 0x0023, 0x009e, 0x080c, 0xa88e, 0x0005, 0x909e, 0x909e,
-	0x909e, 0x90a0, 0x90b1, 0x909e, 0x909e, 0x909e, 0x909e, 0x909e,
-	0x909e, 0x909e, 0x909e, 0x909e, 0x909e, 0x909e, 0x080c, 0x0d7d,
-	0x080c, 0xaa06, 0x6114, 0x2148, 0xa87b, 0x0006, 0x6010, 0x00b6,
-	0x2058, 0xb8bb, 0x0500, 0x00be, 0x080c, 0x6d70, 0x080c, 0xabc9,
-	0x0005, 0x0491, 0x0005, 0x080c, 0xa872, 0x6000, 0x6144, 0xd1fc,
-	0x0130, 0xd1ac, 0x1120, 0x6003, 0x0003, 0x2009, 0x0003, 0x908a,
-	0x0016, 0x1a0c, 0x0d7d, 0x0096, 0x0033, 0x009e, 0x0106, 0x080c,
-	0xa88e, 0x010e, 0x0005, 0x90db, 0x90db, 0x90db, 0x90dd, 0x90e4,
-	0x90db, 0x90db, 0x90db, 0x90db, 0x90db, 0x90db, 0x90db, 0x90db,
-	0x90db, 0x90db, 0x90db, 0x080c, 0x0d7d, 0x0036, 0x00e6, 0x080c,
-	0xaa06, 0x00ee, 0x003e, 0x0005, 0x00f6, 0x00e6, 0x601b, 0x0000,
-	0x6014, 0x2048, 0x6010, 0x9005, 0x0128, 0x00b6, 0x2058, 0x080c,
-	0x8ed0, 0x00be, 0x2071, 0x193c, 0x080c, 0x8b1b, 0x0160, 0x2001,
-	0x187f, 0x2004, 0xa88a, 0x2031, 0x0000, 0x2c78, 0x080c, 0x8a92,
-	0x00ee, 0x00fe, 0x0005, 0x0096, 0xa88b, 0x0000, 0xa8a8, 0x2048,
-	0x080c, 0x106c, 0x009e, 0xa8ab, 0x0000, 0x080c, 0x8acb, 0x0c80,
-	0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-	0x0000, 0x187a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-	0x0126, 0x2091, 0x8000, 0x0036, 0x0046, 0x20a9, 0x0010, 0x9006,
-	0x8004, 0x8086, 0x818e, 0x1208, 0x9200, 0x1f04, 0x9129, 0x8086,
-	0x818e, 0x004e, 0x003e, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000,
-	0x0076, 0x0156, 0x20a9, 0x0010, 0x9005, 0x01c8, 0x911a, 0x12b8,
-	0x8213, 0x818d, 0x0228, 0x911a, 0x1220, 0x1f04, 0x9140, 0x0028,
-	0x911a, 0x2308, 0x8210, 0x1f04, 0x9140, 0x0006, 0x3200, 0x9084,
-	0xefff, 0x2080, 0x000e, 0x015e, 0x007e, 0x012e, 0x0005, 0x0006,
-	0x3200, 0x9085, 0x1000, 0x0ca8, 0x0126, 0x2091, 0x2800, 0x2079,
-	0x19e7, 0x012e, 0x00d6, 0x2069, 0x19e7, 0x6803, 0x0005, 0x0156,
-	0x0146, 0x01d6, 0x20e9, 0x0000, 0x2069, 0x0200, 0x080c, 0xa66c,
-	0x04a9, 0x080c, 0xa657, 0x0491, 0x080c, 0xa65a, 0x0479, 0x080c,
-	0xa65d, 0x0461, 0x080c, 0xa660, 0x0449, 0x080c, 0xa663, 0x0431,
-	0x080c, 0xa666, 0x0419, 0x080c, 0xa669, 0x0401, 0x01de, 0x014e,
-	0x015e, 0x6857, 0x0000, 0x00f6, 0x2079, 0x0380, 0x00f9, 0x7807,
-	0x0003, 0x7803, 0x0000, 0x7803, 0x0001, 0x2069, 0x0004, 0x2d04,
-	0x9084, 0xfffe, 0x9085, 0x8000, 0x206a, 0x2069, 0x0100, 0x6828,
-	0x9084, 0xfffc, 0x682a, 0x00fe, 0x00de, 0x0005, 0x20a9, 0x0020,
-	0x20a1, 0x0240, 0x2001, 0x0000, 0x4004, 0x0005, 0x00c6, 0x7803,
-	0x0000, 0x9006, 0x7827, 0x0030, 0x782b, 0x0400, 0x7827, 0x0031,
-	0x782b, 0x1aef, 0x781f, 0xff00, 0x781b, 0xff00, 0x2061, 0x1ae4,
-	0x602f, 0x19e7, 0x6033, 0x1800, 0x6037, 0x1a03, 0x603b, 0x1e55,
-	0x603f, 0x1e65, 0x6042, 0x6047, 0x1aba, 0x00ce, 0x0005, 0x2001,
-	0x0382, 0x2004, 0x9084, 0x0007, 0x9086, 0x0001, 0x01b0, 0x00c6,
-	0x6146, 0x600f, 0x0000, 0x2c08, 0x2061, 0x19e7, 0x602c, 0x8000,
-	0x602e, 0x601c, 0x9005, 0x0130, 0x9080, 0x0003, 0x2102, 0x611e,
-	0x00ce, 0x0005, 0x6122, 0x611e, 0x0cd8, 0x6146, 0x2c08, 0x2001,
-	0x0012, 0x080c, 0xa863, 0x0005, 0x0016, 0x2009, 0x8020, 0x6146,
-	0x2c08, 0x2001, 0x0382, 0x2004, 0x9084, 0x0007, 0x9086, 0x0001,
-	0x1128, 0x2001, 0x0019, 0x080c, 0xa863, 0x0088, 0x00c6, 0x2061,
-	0x19e7, 0x602c, 0x8000, 0x602e, 0x600c, 0x9005, 0x0128, 0x9080,
-	0x0003, 0x2102, 0x610e, 0x0010, 0x6112, 0x610e, 0x00ce, 0x001e,
-	0x0005, 0x2001, 0x0382, 0x2004, 0x9084, 0x0007, 0x9086, 0x0001,
-	0x0198, 0x00c6, 0x6146, 0x600f, 0x0000, 0x2c08, 0x2061, 0x19e7,
-	0x6044, 0x9005, 0x0130, 0x9080, 0x0003, 0x2102, 0x6146, 0x00ce,
-	0x0005, 0x614a, 0x6146, 0x0cd8, 0x6146, 0x600f, 0x0000, 0x2c08,
-	0x2001, 0x0013, 0x080c, 0xa863, 0x0005, 0x6044, 0xd0dc, 0x0128,
-	0x9006, 0x7007, 0x0000, 0x700a, 0x7032, 0x0005, 0x00f6, 0x00e6,
-	0x00d6, 0x00c6, 0x00b6, 0x0096, 0x0076, 0x0066, 0x0056, 0x0036,
-	0x0026, 0x0016, 0x0006, 0x0126, 0x902e, 0x2071, 0x19e7, 0x7648,
-	0x2660, 0x2678, 0x2091, 0x8000, 0x8cff, 0x0904, 0x92bf, 0x6010,
-	0x2058, 0xb8a0, 0x9206, 0x1904, 0x92ba, 0x87ff, 0x0120, 0x605c,
-	0x9106, 0x1904, 0x92ba, 0x704c, 0x9c06, 0x1178, 0x0036, 0x2019,
-	0x0001, 0x080c, 0xa0f4, 0x703f, 0x0000, 0x9006, 0x704e, 0x706a,
-	0x7052, 0x706e, 0x003e, 0x2029, 0x0001, 0x080c, 0x923d, 0x7048,
-	0x9c36, 0x1110, 0x660c, 0x764a, 0x7044, 0x9c36, 0x1140, 0x2c00,
-	0x9f36, 0x0118, 0x2f00, 0x7046, 0x0010, 0x7047, 0x0000, 0x660c,
-	0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f,
-	0x0000, 0x080c, 0xc814, 0x01c8, 0x6014, 0x2048, 0x6020, 0x9086,
-	0x0003, 0x1560, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x0016,
-	0x0036, 0x0076, 0x080c, 0xcb12, 0x080c, 0xe5f6, 0x080c, 0x6d70,
-	0x007e, 0x003e, 0x001e, 0x080c, 0xca03, 0x080c, 0xac04, 0x00ce,
-	0x0804, 0x925c, 0x2c78, 0x600c, 0x2060, 0x0804, 0x925c, 0x012e,
-	0x000e, 0x001e, 0x002e, 0x003e, 0x005e, 0x006e, 0x007e, 0x009e,
-	0x00be, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x6020, 0x9086,
-	0x0006, 0x1158, 0x0016, 0x0036, 0x0076, 0x080c, 0xe5f6, 0x080c,
-	0xe241, 0x007e, 0x003e, 0x001e, 0x08c0, 0x6020, 0x9086, 0x0009,
-	0x1168, 0xa87b, 0x0006, 0x0016, 0x0036, 0x0076, 0x080c, 0x6d70,
-	0x080c, 0xabc9, 0x007e, 0x003e, 0x001e, 0x0848, 0x6020, 0x9086,
-	0x000a, 0x0904, 0x92a4, 0x0804, 0x92a2, 0x0006, 0x0066, 0x0096,
-	0x00c6, 0x00d6, 0x00f6, 0x9036, 0x0126, 0x2091, 0x8000, 0x2079,
-	0x19e7, 0x7848, 0x9065, 0x0904, 0x9354, 0x600c, 0x0006, 0x600f,
-	0x0000, 0x784c, 0x9c06, 0x11a0, 0x0036, 0x2019, 0x0001, 0x080c,
-	0xa0f4, 0x783f, 0x0000, 0x901e, 0x7b4e, 0x7b6a, 0x7b52, 0x7b6e,
-	0x003e, 0x000e, 0x9005, 0x1118, 0x600c, 0x600f, 0x0000, 0x0006,
-	0x00e6, 0x2f70, 0x080c, 0x923d, 0x00ee, 0x080c, 0xc814, 0x0520,
-	0x6014, 0x2048, 0x6020, 0x9086, 0x0003, 0x1580, 0x3e08, 0x918e,
-	0x0002, 0x1188, 0x6010, 0x9005, 0x0170, 0x00b6, 0x2058, 0xb800,
-	0x00be, 0xd0bc, 0x0140, 0x6048, 0x9005, 0x1198, 0x2001, 0x1988,
-	0x2004, 0x604a, 0x0070, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000,
-	0x080c, 0x6d64, 0x080c, 0xca03, 0x6044, 0xc0fc, 0x6046, 0x080c,
-	0xac04, 0x000e, 0x0804, 0x9302, 0x7e4a, 0x7e46, 0x012e, 0x00fe,
-	0x00de, 0x00ce, 0x009e, 0x006e, 0x000e, 0x0005, 0x6020, 0x9086,
-	0x0006, 0x1118, 0x080c, 0xe241, 0x0c38, 0x6020, 0x9086, 0x0009,
-	0x1130, 0xab7a, 0x080c, 0x6d70, 0x080c, 0xabc9, 0x0c10, 0x6020,
-	0x9086, 0x000a, 0x0990, 0x0878, 0x0016, 0x0026, 0x0086, 0x9046,
-	0x00a9, 0x080c, 0x9465, 0x008e, 0x002e, 0x001e, 0x0005, 0x00f6,
-	0x0126, 0x2079, 0x19e7, 0x2091, 0x8000, 0x080c, 0x94ae, 0x080c,
-	0x9542, 0x080c, 0x67ab, 0x012e, 0x00fe, 0x0005, 0x00b6, 0x0096,
-	0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0016, 0x0006, 0x0126,
-	0x2091, 0x8000, 0x2071, 0x19e7, 0x7620, 0x2660, 0x2678, 0x8cff,
-	0x0904, 0x942a, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904, 0x9425,
-	0x88ff, 0x0120, 0x605c, 0x9106, 0x1904, 0x9425, 0x7030, 0x9c06,
-	0x1570, 0x2069, 0x0100, 0x6820, 0xd0a4, 0x1508, 0x080c, 0x86c5,
-	0x080c, 0x9e0e, 0x68c3, 0x0000, 0x080c, 0xa314, 0x7033, 0x0000,
-	0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001,
-	0x0100, 0x080c, 0x2a0a, 0x9006, 0x080c, 0x2a0a, 0x2069, 0x0100,
-	0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0040, 0x7008,
-	0xc0ad, 0x700a, 0x6003, 0x0009, 0x630a, 0x0804, 0x9425, 0x7020,
-	0x9c36, 0x1110, 0x660c, 0x7622, 0x701c, 0x9c36, 0x1140, 0x2c00,
-	0x9f36, 0x0118, 0x2f00, 0x701e, 0x0010, 0x701f, 0x0000, 0x660c,
-	0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f,
-	0x0000, 0x6044, 0xc0fc, 0x6046, 0x6014, 0x2048, 0x080c, 0xc814,
-	0x01e8, 0x6020, 0x9086, 0x0003, 0x1580, 0x080c, 0xca29, 0x1118,
-	0x080c, 0xb591, 0x0098, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000,
-	0x0016, 0x0036, 0x0086, 0x080c, 0xcb12, 0x080c, 0xe5f6, 0x080c,
-	0x6d70, 0x008e, 0x003e, 0x001e, 0x080c, 0xca03, 0x080c, 0xac04,
-	0x080c, 0xa1ea, 0x00ce, 0x0804, 0x939f, 0x2c78, 0x600c, 0x2060,
-	0x0804, 0x939f, 0x012e, 0x000e, 0x001e, 0x006e, 0x00ce, 0x00de,
-	0x00ee, 0x00fe, 0x009e, 0x00be, 0x0005, 0x6020, 0x9086, 0x0006,
-	0x1158, 0x0016, 0x0036, 0x0086, 0x080c, 0xe5f6, 0x080c, 0xe241,
-	0x008e, 0x003e, 0x001e, 0x08d0, 0x080c, 0xb591, 0x6020, 0x9086,
-	0x0002, 0x1160, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x0904,
-	0x940b, 0x9086, 0x008b, 0x0904, 0x940b, 0x0840, 0x6020, 0x9086,
-	0x0005, 0x1920, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x09c8,
-	0x9086, 0x008b, 0x09b0, 0x0804, 0x941e, 0x0006, 0x00f6, 0x00e6,
-	0x0096, 0x00b6, 0x00c6, 0x0066, 0x0016, 0x0126, 0x2091, 0x8000,
-	0x9280, 0x1000, 0x2004, 0x905d, 0x2079, 0x19e7, 0x9036, 0x7828,
-	0x2060, 0x8cff, 0x0538, 0x6010, 0x9b06, 0x1500, 0x6043, 0xffff,
-	0x080c, 0xaa51, 0x01d8, 0x610c, 0x0016, 0x080c, 0x9f7e, 0x6014,
-	0x2048, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x0016, 0x0036,
-	0x0086, 0x080c, 0xcb12, 0x080c, 0xe5f6, 0x080c, 0x6d70, 0x008e,
-	0x003e, 0x001e, 0x080c, 0xac04, 0x00ce, 0x08d8, 0x2c30, 0x600c,
-	0x2060, 0x08b8, 0x080c, 0x67c8, 0x012e, 0x001e, 0x006e, 0x00ce,
-	0x00be, 0x009e, 0x00ee, 0x00fe, 0x000e, 0x0005, 0x0096, 0x0006,
-	0x0066, 0x00c6, 0x00d6, 0x9036, 0x7820, 0x9065, 0x0904, 0x9515,
-	0x600c, 0x0006, 0x6044, 0xc0fc, 0x6046, 0x600f, 0x0000, 0x7830,
-	0x9c06, 0x1588, 0x2069, 0x0100, 0x6820, 0xd0a4, 0x1508, 0x080c,
-	0x86c5, 0x080c, 0x9e0e, 0x68c3, 0x0000, 0x080c, 0xa314, 0x7833,
+	0x0040, 0x0608, 0x00b8, 0x2001, 0x1800, 0x200c, 0x9186, 0x0003,
+	0x1160, 0x7104, 0x9186, 0x0004, 0x0140, 0x9186, 0x0007, 0x0128,
+	0x9186, 0x0003, 0x1968, 0x080c, 0x7920, 0x782c, 0xd09c, 0x090c,
+	0x7de4, 0x0005, 0x9082, 0x005a, 0x1218, 0x2100, 0x003b, 0x0c18,
+	0x080c, 0x7956, 0x0c90, 0x00e3, 0x08f0, 0x0005, 0x7956, 0x7956,
+	0x7956, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956, 0x7978, 0x7956,
+	0x7956, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956,
+	0x7956, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956,
+	0x7956, 0x7956, 0x7962, 0x7956, 0x7b4b, 0x7956, 0x7956, 0x7956,
+	0x7978, 0x7956, 0x7962, 0x7b8c, 0x7bcd, 0x7c14, 0x7c28, 0x7956,
+	0x7956, 0x7978, 0x7962, 0x798c, 0x7956, 0x7a04, 0x7cd3, 0x7cee,
+	0x7956, 0x7978, 0x7956, 0x798c, 0x7956, 0x7956, 0x79fa, 0x7cee,
+	0x7956, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956,
+	0x7956, 0x79a0, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956,
+	0x7956, 0x7956, 0x7956, 0x7e6a, 0x7956, 0x7e14, 0x7956, 0x7e14,
+	0x7956, 0x79b5, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956, 0x7956,
+	0x2079, 0x0040, 0x7004, 0x9086, 0x0003, 0x1198, 0x782c, 0x080c,
+	0x7e0d, 0xd0a4, 0x0170, 0x7824, 0x2048, 0x9006, 0xa802, 0xa806,
+	0xa864, 0x9084, 0x00ff, 0x908a, 0x001a, 0x1210, 0x002b, 0x0c50,
+	0x00e9, 0x080c, 0x7de4, 0x0005, 0x7956, 0x7962, 0x7b37, 0x7956,
+	0x7962, 0x7956, 0x7962, 0x7962, 0x7956, 0x7962, 0x7b37, 0x7962,
+	0x7962, 0x7962, 0x7962, 0x7962, 0x7956, 0x7962, 0x7b37, 0x7956,
+	0x7956, 0x7962, 0x7956, 0x7956, 0x7956, 0x7962, 0x00e6, 0x2071,
+	0x18fa, 0x2009, 0x0400, 0x0071, 0x00ee, 0x0005, 0x2009, 0x1000,
+	0x0049, 0x0005, 0x2009, 0x2000, 0x0029, 0x0005, 0x2009, 0x0800,
+	0x0009, 0x0005, 0x7007, 0x0001, 0xa868, 0x9084, 0x00ff, 0x9105,
+	0xa86a, 0x0126, 0x2091, 0x8000, 0x080c, 0x6d80, 0x012e, 0x0005,
+	0xa864, 0x8007, 0x9084, 0x00ff, 0x0d08, 0x8001, 0x1120, 0x7007,
+	0x0001, 0x0804, 0x7ad9, 0x7007, 0x0003, 0x7012, 0x2900, 0x7016,
+	0x701a, 0x704b, 0x7ad9, 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff,
+	0x0968, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, 0x7af4, 0x7007,
+	0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, 0x7af4, 0x0005,
+	0xa864, 0x8007, 0x9084, 0x00ff, 0x0904, 0x795e, 0x8001, 0x1120,
+	0x7007, 0x0001, 0x0804, 0x7b10, 0x7007, 0x0003, 0x7012, 0x2900,
+	0x7016, 0x701a, 0x704b, 0x7b10, 0x0005, 0xa864, 0x8007, 0x9084,
+	0x00ff, 0x9086, 0x0001, 0x1904, 0x795e, 0x7007, 0x0001, 0x2009,
+	0x1834, 0x210c, 0x81ff, 0x11a8, 0xa868, 0x9084, 0x00ff, 0xa86a,
+	0xa883, 0x0000, 0x080c, 0x62b9, 0x1108, 0x0005, 0x0126, 0x2091,
+	0x8000, 0xa867, 0x0139, 0xa87a, 0xa982, 0x080c, 0x6d80, 0x012e,
+	0x0ca0, 0xa994, 0x9186, 0x0071, 0x0d38, 0x9186, 0x0064, 0x0d20,
+	0x9186, 0x007c, 0x0d08, 0x9186, 0x0028, 0x09f0, 0x9186, 0x0038,
+	0x09d8, 0x9186, 0x0078, 0x09c0, 0x9186, 0x005f, 0x09a8, 0x9186,
+	0x0056, 0x0990, 0xa897, 0x4005, 0xa89b, 0x0001, 0x2001, 0x0030,
+	0x900e, 0x08a0, 0xa87c, 0x9084, 0x00c0, 0x9086, 0x00c0, 0x1120,
+	0x7007, 0x0001, 0x0804, 0x7d05, 0x2900, 0x7016, 0x701a, 0x20a9,
+	0x0004, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0030, 0x2098, 0x7050,
+	0x2040, 0xa060, 0x20e8, 0xa05c, 0x9080, 0x0023, 0x20a0, 0x4003,
+	0xa888, 0x7012, 0x9082, 0x0401, 0x1a04, 0x7966, 0xaab4, 0x928a,
+	0x0002, 0x1a04, 0x7966, 0x82ff, 0x1138, 0xa8b8, 0xa9bc, 0x9105,
+	0x0118, 0x2001, 0x7a97, 0x0018, 0x9280, 0x7a8d, 0x2005, 0x7056,
+	0x7010, 0x9015, 0x0904, 0x7a78, 0x080c, 0x1053, 0x1118, 0x7007,
+	0x0004, 0x0005, 0x2900, 0x7022, 0x7054, 0x2060, 0xe000, 0xa866,
+	0x7050, 0x2040, 0xa95c, 0xe004, 0x9100, 0xa076, 0xa860, 0xa072,
+	0xe008, 0x920a, 0x1210, 0x900e, 0x2200, 0x7112, 0xe20c, 0x8003,
+	0x800b, 0x9296, 0x0004, 0x0108, 0x9108, 0xa17a, 0x810b, 0xa17e,
+	0x080c, 0x1124, 0xa06c, 0x908e, 0x0100, 0x0170, 0x9086, 0x0200,
+	0x0118, 0x7007, 0x0007, 0x0005, 0x7020, 0x2048, 0x080c, 0x106c,
+	0x7014, 0x2048, 0x0804, 0x7966, 0x7020, 0x2048, 0x7018, 0xa802,
+	0xa807, 0x0000, 0x2908, 0x2048, 0xa906, 0x711a, 0x0804, 0x7a30,
+	0x7014, 0x2048, 0x7007, 0x0001, 0xa8b4, 0x9005, 0x1128, 0xa8b8,
+	0xa9bc, 0x9105, 0x0108, 0x00b9, 0xa864, 0x9084, 0x00ff, 0x9086,
+	0x001e, 0x0904, 0x7d05, 0x0804, 0x7ad9, 0x7a8f, 0x7a93, 0x0002,
+	0x001d, 0x0007, 0x0004, 0x000a, 0x001b, 0x0005, 0x0006, 0x000a,
+	0x001d, 0x0005, 0x0004, 0x0076, 0x0066, 0xafb8, 0xaebc, 0xa804,
+	0x2050, 0xb0c0, 0xb0e2, 0xb0bc, 0xb0de, 0xb0b8, 0xb0d2, 0xb0b4,
+	0xb0ce, 0xb6da, 0xb7d6, 0xb0b0, 0xb0ca, 0xb0ac, 0xb0c6, 0xb0a8,
+	0xb0ba, 0xb0a4, 0xb0b6, 0xb6c2, 0xb7be, 0xb0a0, 0xb0b2, 0xb09c,
+	0xb0ae, 0xb098, 0xb0a2, 0xb094, 0xb09e, 0xb6aa, 0xb7a6, 0xb090,
+	0xb09a, 0xb08c, 0xb096, 0xb088, 0xb08a, 0xb084, 0xb086, 0xb692,
+	0xb78e, 0xb080, 0xb082, 0xb07c, 0xb07e, 0xb078, 0xb072, 0xb074,
+	0xb06e, 0xb67a, 0xb776, 0xb004, 0x9055, 0x1958, 0x006e, 0x007e,
+	0x0005, 0x2009, 0x1834, 0x210c, 0x81ff, 0x1178, 0x080c, 0x60bb,
+	0x1108, 0x0005, 0x080c, 0x6fc0, 0x0126, 0x2091, 0x8000, 0x080c,
+	0xcb36, 0x080c, 0x6d80, 0x012e, 0x0ca0, 0x080c, 0xcf4b, 0x1d70,
+	0x2001, 0x0028, 0x900e, 0x0c70, 0x2009, 0x1834, 0x210c, 0x81ff,
+	0x1188, 0xa888, 0x9005, 0x0188, 0xa883, 0x0000, 0x080c, 0x6149,
+	0x1108, 0x0005, 0xa87a, 0x0126, 0x2091, 0x8000, 0x080c, 0x6d80,
+	0x012e, 0x0cb8, 0x2001, 0x0028, 0x0ca8, 0x2001, 0x0000, 0x0c90,
+	0x2009, 0x1834, 0x210c, 0x81ff, 0x11d8, 0xa888, 0x9005, 0x01e0,
+	0xa883, 0x0000, 0xa87c, 0xd0f4, 0x0120, 0x080c, 0x621b, 0x1138,
+	0x0005, 0x9006, 0xa87a, 0x080c, 0x6196, 0x1108, 0x0005, 0x0126,
+	0x2091, 0x8000, 0xa87a, 0xa982, 0x080c, 0x6d80, 0x012e, 0x0cb0,
+	0x2001, 0x0028, 0x900e, 0x0c98, 0x2001, 0x0000, 0x0c80, 0x7018,
+	0xa802, 0x2908, 0x2048, 0xa906, 0x711a, 0x7010, 0x8001, 0x7012,
+	0x0118, 0x7007, 0x0003, 0x0030, 0x7014, 0x2048, 0x7007, 0x0001,
+	0x7048, 0x080f, 0x0005, 0x00b6, 0x7007, 0x0001, 0xa974, 0xa878,
+	0x9084, 0x00ff, 0x9096, 0x0004, 0x0540, 0x20a9, 0x0001, 0x9096,
+	0x0001, 0x0190, 0x900e, 0x20a9, 0x0800, 0x9096, 0x0002, 0x0160,
+	0x9005, 0x11d8, 0xa974, 0x080c, 0x6625, 0x11b8, 0x0066, 0xae80,
+	0x080c, 0x6735, 0x006e, 0x0088, 0x0046, 0x2011, 0x180c, 0x2224,
+	0xc484, 0x2412, 0x004e, 0x00c6, 0x080c, 0x6625, 0x1110, 0x080c,
+	0x6904, 0x8108, 0x1f04, 0x7b74, 0x00ce, 0xa87c, 0xd084, 0x1120,
+	0x080c, 0x106c, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c,
+	0x6d80, 0x012e, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000, 0x7007,
+	0x0001, 0x080c, 0x6a67, 0x0580, 0x2061, 0x1a6f, 0x6100, 0xd184,
+	0x0178, 0xa888, 0x9084, 0x00ff, 0x1550, 0x6000, 0xd084, 0x0520,
+	0x6004, 0x9005, 0x1538, 0x6003, 0x0000, 0x600b, 0x0000, 0x00c8,
+	0x2011, 0x0001, 0xa890, 0x9005, 0x1110, 0x2001, 0x001e, 0x8000,
+	0x6016, 0xa888, 0x9084, 0x00ff, 0x0178, 0x6006, 0xa888, 0x8007,
+	0x9084, 0x00ff, 0x0148, 0x600a, 0xa888, 0x8000, 0x1108, 0xc28d,
+	0x6202, 0x012e, 0x0804, 0x7dce, 0x012e, 0x0804, 0x7dc8, 0x012e,
+	0x0804, 0x7dc2, 0x012e, 0x0804, 0x7dc5, 0x0126, 0x2091, 0x8000,
+	0x7007, 0x0001, 0x080c, 0x6a67, 0x05e0, 0x2061, 0x1a6f, 0x6000,
+	0xd084, 0x05b8, 0x6204, 0x6308, 0xd08c, 0x1530, 0xac78, 0x9484,
+	0x0003, 0x0170, 0xa988, 0x918c, 0x00ff, 0x8001, 0x1120, 0x2100,
+	0x9210, 0x0620, 0x0028, 0x8001, 0x1508, 0x2100, 0x9212, 0x02f0,
+	0x9484, 0x000c, 0x0188, 0xa988, 0x810f, 0x918c, 0x00ff, 0x9082,
+	0x0004, 0x1120, 0x2100, 0x9318, 0x0288, 0x0030, 0x9082, 0x0004,
+	0x1168, 0x2100, 0x931a, 0x0250, 0xa890, 0x9005, 0x0110, 0x8000,
+	0x6016, 0x6206, 0x630a, 0x012e, 0x0804, 0x7dce, 0x012e, 0x0804,
+	0x7dcb, 0x012e, 0x0804, 0x7dc8, 0x0126, 0x2091, 0x8000, 0x7007,
+	0x0001, 0x2061, 0x1a6f, 0x6300, 0xd38c, 0x1120, 0x6308, 0x8318,
+	0x0220, 0x630a, 0x012e, 0x0804, 0x7ddc, 0x012e, 0x0804, 0x7dcb,
+	0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, 0x7007, 0x0001, 0xa87c,
+	0xd0ac, 0x0148, 0x00c6, 0x2061, 0x1a6f, 0x6000, 0x9084, 0xfcff,
+	0x6002, 0x00ce, 0x0440, 0xa888, 0x9005, 0x05d8, 0xa88c, 0x9065,
+	0x0598, 0x2001, 0x1834, 0x2004, 0x9005, 0x0118, 0x080c, 0xac28,
+	0x0068, 0x6017, 0xf400, 0x6063, 0x0000, 0xa97c, 0xd1a4, 0x0110,
+	0xa980, 0x6162, 0x2009, 0x0041, 0x080c, 0xac8c, 0xa988, 0x918c,
+	0xff00, 0x9186, 0x2000, 0x1138, 0x0026, 0x900e, 0x2011, 0xfdff,
+	0x080c, 0x88ec, 0x002e, 0xa87c, 0xd0c4, 0x0148, 0x2061, 0x1a6f,
+	0x6000, 0xd08c, 0x1120, 0x6008, 0x8000, 0x0208, 0x600a, 0x00ce,
+	0x012e, 0x00be, 0x0804, 0x7dce, 0x00ce, 0x012e, 0x00be, 0x0804,
+	0x7dc8, 0xa984, 0x9186, 0x002e, 0x0d30, 0x9186, 0x002d, 0x0d18,
+	0x9186, 0x0045, 0x0510, 0x9186, 0x002a, 0x1130, 0x2001, 0x180c,
+	0x200c, 0xc194, 0x2102, 0x08b8, 0x9186, 0x0020, 0x0158, 0x9186,
+	0x0029, 0x1d10, 0xa974, 0x080c, 0x6625, 0x1968, 0xb800, 0xc0e4,
+	0xb802, 0x0848, 0xa88c, 0x9065, 0x09b8, 0x6007, 0x0024, 0x2001,
+	0x1986, 0x2004, 0x601a, 0x0804, 0x7c63, 0xa88c, 0x9065, 0x0960,
+	0x00e6, 0xa890, 0x9075, 0x2001, 0x1834, 0x2004, 0x9005, 0x0150,
+	0x080c, 0xac28, 0x8eff, 0x0118, 0x2e60, 0x080c, 0xac28, 0x00ee,
+	0x0804, 0x7c63, 0x6024, 0xc0dc, 0xc0d5, 0x6026, 0x2e60, 0x6007,
+	0x003a, 0xa8a0, 0x9005, 0x0130, 0x6007, 0x003b, 0xa8a4, 0x602e,
+	0xa8a8, 0x6016, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x921e,
+	0x00ee, 0x0804, 0x7c63, 0x2061, 0x1a6f, 0x6000, 0xd084, 0x0190,
+	0xd08c, 0x1904, 0x7ddc, 0x0126, 0x2091, 0x8000, 0x6204, 0x8210,
+	0x0220, 0x6206, 0x012e, 0x0804, 0x7ddc, 0x012e, 0xa883, 0x0016,
+	0x0804, 0x7dd5, 0xa883, 0x0007, 0x0804, 0x7dd5, 0xa864, 0x8007,
+	0x9084, 0x00ff, 0x0130, 0x8001, 0x1138, 0x7007, 0x0001, 0x0069,
+	0x0005, 0x080c, 0x795e, 0x0040, 0x7007, 0x0003, 0x7012, 0x2900,
+	0x7016, 0x701a, 0x704b, 0x7d05, 0x0005, 0x00b6, 0x00e6, 0x0126,
+	0x2091, 0x8000, 0x903e, 0x2061, 0x1800, 0x61d0, 0x81ff, 0x1904,
+	0x7d87, 0x6130, 0xd194, 0x1904, 0x7db1, 0xa878, 0x2070, 0x9e82,
+	0x1ddc, 0x0a04, 0x7d7b, 0x6068, 0x9e02, 0x1a04, 0x7d7b, 0x7120,
+	0x9186, 0x0006, 0x1904, 0x7d6d, 0x7010, 0x905d, 0x0904, 0x7d87,
+	0xb800, 0xd0e4, 0x1904, 0x7dab, 0x2061, 0x1a6f, 0x6100, 0x9184,
+	0x0301, 0x9086, 0x0001, 0x15a0, 0x7024, 0xd0dc, 0x1904, 0x7db4,
+	0xa883, 0x0000, 0xa803, 0x0000, 0x2908, 0x7014, 0x9005, 0x1198,
+	0x7116, 0xa87c, 0xd0f4, 0x1904, 0x7db7, 0x080c, 0x56da, 0xd09c,
+	0x1118, 0xa87c, 0xc0cc, 0xa87e, 0x2e60, 0x080c, 0x87df, 0x012e,
+	0x00ee, 0x00be, 0x0005, 0x2048, 0xa800, 0x9005, 0x1de0, 0xa902,
+	0x2148, 0xa87c, 0xd0f4, 0x1904, 0x7db7, 0x012e, 0x00ee, 0x00be,
+	0x0005, 0x012e, 0x00ee, 0xa883, 0x0006, 0x00be, 0x0804, 0x7dd5,
+	0xd184, 0x0db8, 0xd1c4, 0x1190, 0x00a0, 0xa974, 0x080c, 0x6625,
+	0x15d0, 0xb800, 0xd0e4, 0x15b8, 0x7120, 0x9186, 0x0007, 0x1118,
+	0xa883, 0x0002, 0x0490, 0xa883, 0x0008, 0x0478, 0xa883, 0x000e,
+	0x0460, 0xa883, 0x0017, 0x0448, 0xa883, 0x0035, 0x0430, 0x080c,
+	0x56de, 0xd0fc, 0x01e8, 0xa878, 0x2070, 0x9e82, 0x1ddc, 0x02c0,
+	0x6068, 0x9e02, 0x12a8, 0x7120, 0x9186, 0x0006, 0x1188, 0x7010,
+	0x905d, 0x0170, 0xb800, 0xd0bc, 0x0158, 0x2039, 0x0001, 0x7000,
+	0x9086, 0x0007, 0x1904, 0x7d11, 0x7003, 0x0002, 0x0804, 0x7d11,
+	0xa883, 0x0028, 0x0010, 0xa883, 0x0029, 0x012e, 0x00ee, 0x00be,
+	0x0420, 0xa883, 0x002a, 0x0cc8, 0xa883, 0x0045, 0x0cb0, 0x2e60,
+	0x2019, 0x0002, 0x601b, 0x0014, 0x080c, 0xde1b, 0x012e, 0x00ee,
+	0x00be, 0x0005, 0x2009, 0x003e, 0x0058, 0x2009, 0x0004, 0x0040,
+	0x2009, 0x0006, 0x0028, 0x2009, 0x0016, 0x0010, 0x2009, 0x0001,
+	0xa884, 0x9084, 0xff00, 0x9105, 0xa886, 0x0126, 0x2091, 0x8000,
+	0x080c, 0x6d80, 0x012e, 0x0005, 0x080c, 0x106c, 0x0005, 0x00d6,
+	0x080c, 0x87d6, 0x00de, 0x0005, 0x00d6, 0x00e6, 0x0126, 0x2091,
+	0x8000, 0x2071, 0x0040, 0x702c, 0xd084, 0x01d8, 0x908c, 0x0780,
+	0x190c, 0x7ec6, 0xd09c, 0x11a8, 0x2071, 0x1800, 0x70c0, 0x90ea,
+	0x0020, 0x0278, 0x8001, 0x70c2, 0x702c, 0x2048, 0xa800, 0x702e,
+	0x9006, 0xa802, 0xa806, 0x2071, 0x0040, 0x2900, 0x7022, 0x702c,
+	0x0c28, 0x012e, 0x00ee, 0x00de, 0x0005, 0x0006, 0x9084, 0x0780,
+	0x190c, 0x7ec6, 0x000e, 0x0005, 0xa898, 0x9084, 0x0003, 0x05a8,
+	0x080c, 0xab97, 0x05d8, 0x2900, 0x6016, 0xa864, 0x9084, 0x00ff,
+	0x9086, 0x0035, 0x1138, 0x6028, 0xc0fd, 0x602a, 0x2001, 0x196b,
+	0x2004, 0x0098, 0xa8a0, 0x9084, 0x00ff, 0xa99c, 0x918c, 0xff00,
+	0x9105, 0xa99c, 0x918c, 0x00ff, 0x080c, 0x25fb, 0x1540, 0x00b6,
+	0x080c, 0x6625, 0x2b00, 0x00be, 0x1510, 0x6012, 0x6023, 0x0001,
+	0x2009, 0x0040, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0035, 0x0110,
+	0x2009, 0x0041, 0x080c, 0xac8c, 0x0005, 0xa87b, 0x0101, 0x0126,
+	0x2091, 0x8000, 0x080c, 0x6d80, 0x012e, 0x0005, 0xa87b, 0x002c,
+	0x0126, 0x2091, 0x8000, 0x080c, 0x6d80, 0x012e, 0x0005, 0xa87b,
+	0x0028, 0x0126, 0x2091, 0x8000, 0x080c, 0x6d80, 0x012e, 0x080c,
+	0xabed, 0x0005, 0x00d6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x00b6,
+	0x7007, 0x0001, 0xaa74, 0x9282, 0x0004, 0x1a04, 0x7eb7, 0xa97c,
+	0x9188, 0x1000, 0x2104, 0x905d, 0xb804, 0xd284, 0x0140, 0x05e8,
+	0x8007, 0x9084, 0x00ff, 0x9084, 0x0006, 0x1108, 0x04b0, 0x2b10,
+	0x080c, 0xab97, 0x1118, 0x080c, 0xac5f, 0x05a8, 0x6212, 0xa874,
+	0x0002, 0x7e95, 0x7e9a, 0x7e9d, 0x7ea3, 0x2019, 0x0002, 0x080c,
+	0xe239, 0x0060, 0x080c, 0xe1c9, 0x0048, 0x2019, 0x0002, 0xa980,
+	0x080c, 0xe1e8, 0x0018, 0xa980, 0x080c, 0xe1c9, 0x080c, 0xabed,
+	0xa887, 0x0000, 0x0126, 0x2091, 0x8000, 0x080c, 0x6d80, 0x012e,
+	0x00be, 0x001e, 0x002e, 0x003e, 0x00ce, 0x00de, 0x0005, 0xa887,
+	0x0006, 0x0c80, 0xa887, 0x0002, 0x0c68, 0xa887, 0x0005, 0x0c50,
+	0xa887, 0x0004, 0x0c38, 0xa887, 0x0007, 0x0c20, 0x2091, 0x8000,
+	0x0e04, 0x7ec8, 0x0006, 0x0016, 0x2001, 0x8003, 0x0006, 0x0804,
+	0x0d86, 0x2001, 0x1834, 0x2004, 0x9005, 0x0005, 0x0005, 0x00f6,
+	0x2079, 0x0300, 0x2001, 0x0200, 0x200c, 0xc1e5, 0xc1dc, 0x2102,
+	0x2009, 0x0218, 0x210c, 0xd1ec, 0x1120, 0x080c, 0x1608, 0x00fe,
+	0x0005, 0x2001, 0x020d, 0x2003, 0x0020, 0x781f, 0x0300, 0x00fe,
+	0x0005, 0x781c, 0xd08c, 0x0904, 0x7f49, 0x68c0, 0x90aa, 0x0005,
+	0x0a04, 0x854a, 0x7d44, 0x7c40, 0xd59c, 0x190c, 0x0d7d, 0x9584,
+	0x00f6, 0x1508, 0x9484, 0x7000, 0x0138, 0x908a, 0x2000, 0x1258,
+	0x9584, 0x0700, 0x8007, 0x04f0, 0x7000, 0x9084, 0xff00, 0x9086,
+	0x8100, 0x0db0, 0x00b0, 0x9484, 0x0fff, 0x1130, 0x7000, 0x9084,
+	0xff00, 0x9086, 0x8100, 0x11c0, 0x080c, 0xe6da, 0x080c, 0x8441,
+	0x7817, 0x0140, 0x00a8, 0x9584, 0x0076, 0x1118, 0x080c, 0x849d,
+	0x19c8, 0xd5a4, 0x0148, 0x0046, 0x0056, 0x080c, 0x7f99, 0x080c,
+	0x2115, 0x005e, 0x004e, 0x0020, 0x080c, 0xe6da, 0x7817, 0x0140,
+	0x080c, 0x74e9, 0x0168, 0x2001, 0x0111, 0x2004, 0xd08c, 0x0140,
+	0x6893, 0x0000, 0x2001, 0x0110, 0x2003, 0x0008, 0x2003, 0x0000,
+	0x0489, 0x0005, 0x0002, 0x7f56, 0x8263, 0x7f53, 0x7f53, 0x7f53,
+	0x7f53, 0x7f53, 0x7f53, 0x7817, 0x0140, 0x0005, 0x7000, 0x908c,
+	0xff00, 0x9194, 0xf000, 0x810f, 0x9484, 0x0fff, 0x6892, 0x9286,
+	0x2000, 0x1150, 0x6800, 0x9086, 0x0001, 0x1118, 0x080c, 0x573b,
+	0x0070, 0x080c, 0x7fb9, 0x0058, 0x9286, 0x3000, 0x1118, 0x080c,
+	0x81a0, 0x0028, 0x9286, 0x8000, 0x1110, 0x080c, 0x8377, 0x7817,
+	0x0140, 0x0005, 0x2001, 0x1810, 0x2004, 0xd08c, 0x0178, 0x2001,
+	0x1800, 0x2004, 0x9086, 0x0003, 0x1148, 0x0026, 0x0036, 0x2011,
+	0x8048, 0x2518, 0x080c, 0x4b07, 0x003e, 0x002e, 0x0005, 0x0036,
+	0x0046, 0x0056, 0x00f6, 0x2079, 0x0200, 0x2019, 0xfffe, 0x7c30,
+	0x0050, 0x0036, 0x0046, 0x0056, 0x00f6, 0x2079, 0x0200, 0x7d44,
+	0x7c40, 0x2019, 0xffff, 0x2001, 0x1810, 0x2004, 0xd08c, 0x0160,
+	0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1130, 0x0026, 0x2011,
+	0x8048, 0x080c, 0x4b07, 0x002e, 0x00fe, 0x005e, 0x004e, 0x003e,
+	0x0005, 0x00b6, 0x00c6, 0x7010, 0x9084, 0xff00, 0x8007, 0x9096,
+	0x0001, 0x0120, 0x9096, 0x0023, 0x1904, 0x8171, 0x9186, 0x0023,
+	0x15c0, 0x080c, 0x840c, 0x0904, 0x8171, 0x6120, 0x9186, 0x0001,
+	0x0150, 0x9186, 0x0004, 0x0138, 0x9186, 0x0008, 0x0120, 0x9186,
+	0x000a, 0x1904, 0x8171, 0x7124, 0x610a, 0x7030, 0x908e, 0x0200,
+	0x1130, 0x2009, 0x0015, 0x080c, 0xac8c, 0x0804, 0x8171, 0x908e,
+	0x0214, 0x0118, 0x908e, 0x0210, 0x1130, 0x2009, 0x0015, 0x080c,
+	0xac8c, 0x0804, 0x8171, 0x908e, 0x0100, 0x1904, 0x8171, 0x7034,
+	0x9005, 0x1904, 0x8171, 0x2009, 0x0016, 0x080c, 0xac8c, 0x0804,
+	0x8171, 0x9186, 0x0022, 0x1904, 0x8171, 0x7030, 0x908e, 0x0300,
+	0x1580, 0x68dc, 0xd0a4, 0x0528, 0xc0b5, 0x68de, 0x7100, 0x918c,
+	0x00ff, 0x697e, 0x7004, 0x6882, 0x00f6, 0x2079, 0x0100, 0x79e6,
+	0x78ea, 0x0006, 0x9084, 0x00ff, 0x0016, 0x2008, 0x080c, 0x2644,
+	0x7932, 0x7936, 0x001e, 0x000e, 0x00fe, 0x080c, 0x25fb, 0x695e,
+	0x703c, 0x00e6, 0x2071, 0x0140, 0x7086, 0x2071, 0x1800, 0x70b6,
+	0x00ee, 0x7034, 0x9005, 0x1904, 0x8171, 0x2009, 0x0017, 0x0804,
+	0x8121, 0x908e, 0x0400, 0x1190, 0x7034, 0x9005, 0x1904, 0x8171,
+	0x080c, 0x74e9, 0x0120, 0x2009, 0x001d, 0x0804, 0x8121, 0x68dc,
+	0xc0a5, 0x68de, 0x2009, 0x0030, 0x0804, 0x8121, 0x908e, 0x0500,
+	0x1140, 0x7034, 0x9005, 0x1904, 0x8171, 0x2009, 0x0018, 0x0804,
+	0x8121, 0x908e, 0x2010, 0x1120, 0x2009, 0x0019, 0x0804, 0x8121,
+	0x908e, 0x2110, 0x1120, 0x2009, 0x001a, 0x0804, 0x8121, 0x908e,
+	0x5200, 0x1140, 0x7034, 0x9005, 0x1904, 0x8171, 0x2009, 0x001b,
+	0x0804, 0x8121, 0x908e, 0x5000, 0x1140, 0x7034, 0x9005, 0x1904,
+	0x8171, 0x2009, 0x001c, 0x0804, 0x8121, 0x908e, 0x1300, 0x1120,
+	0x2009, 0x0034, 0x0804, 0x8121, 0x908e, 0x1200, 0x1140, 0x7034,
+	0x9005, 0x1904, 0x8171, 0x2009, 0x0024, 0x0804, 0x8121, 0x908c,
+	0xff00, 0x918e, 0x2400, 0x1170, 0x2009, 0x002d, 0x2001, 0x1810,
+	0x2004, 0xd09c, 0x0904, 0x8121, 0x080c, 0xd64f, 0x1904, 0x8171,
+	0x0804, 0x811f, 0x908c, 0xff00, 0x918e, 0x5300, 0x1120, 0x2009,
+	0x002a, 0x0804, 0x8121, 0x908e, 0x0f00, 0x1120, 0x2009, 0x0020,
+	0x0804, 0x8121, 0x908e, 0x6104, 0x1530, 0x2029, 0x0205, 0x2011,
+	0x026d, 0x8208, 0x2204, 0x9082, 0x0004, 0x8004, 0x8004, 0x20a8,
+	0x2011, 0x8015, 0x211c, 0x8108, 0x0046, 0x2124, 0x080c, 0x4b07,
+	0x004e, 0x8108, 0x0f04, 0x80d5, 0x9186, 0x0280, 0x1d88, 0x2504,
+	0x8000, 0x202a, 0x2009, 0x0260, 0x0c58, 0x202b, 0x0000, 0x2009,
+	0x0023, 0x0804, 0x8121, 0x908e, 0x6000, 0x1120, 0x2009, 0x003f,
+	0x0804, 0x8121, 0x908e, 0x5400, 0x1138, 0x080c, 0x84fa, 0x1904,
+	0x8171, 0x2009, 0x0046, 0x04a8, 0x908e, 0x5500, 0x1148, 0x080c,
+	0x8522, 0x1118, 0x2009, 0x0041, 0x0460, 0x2009, 0x0042, 0x0448,
+	0x908e, 0x7800, 0x1118, 0x2009, 0x0045, 0x0418, 0x908e, 0x1000,
+	0x1118, 0x2009, 0x004e, 0x00e8, 0x908e, 0x6300, 0x1118, 0x2009,
+	0x004a, 0x00b8, 0x908c, 0xff00, 0x918e, 0x5600, 0x1118, 0x2009,
+	0x004f, 0x0078, 0x908c, 0xff00, 0x918e, 0x5700, 0x1118, 0x2009,
+	0x0050, 0x0038, 0x2009, 0x001d, 0x6838, 0xd0d4, 0x0110, 0x2009,
+	0x004c, 0x0016, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c,
+	0x25fb, 0x1904, 0x8174, 0x080c, 0x65c4, 0x1904, 0x8174, 0xbe12,
+	0xbd16, 0x001e, 0x0016, 0x080c, 0x74e9, 0x01c0, 0x68dc, 0xd08c,
+	0x1148, 0x7000, 0x9084, 0x00ff, 0x1188, 0x7004, 0x9084, 0xff00,
+	0x1168, 0x0040, 0x687c, 0x9606, 0x1148, 0x6880, 0x9506, 0x9084,
+	0xff00, 0x1120, 0x9584, 0x00ff, 0xb886, 0x0080, 0xb884, 0x9005,
+	0x1168, 0x9186, 0x0046, 0x1150, 0x687c, 0x9606, 0x1138, 0x6880,
+	0x9506, 0x9084, 0xff00, 0x1110, 0x001e, 0x0098, 0x080c, 0xab97,
+	0x01a8, 0x2b08, 0x6112, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e,
+	0x9186, 0x004c, 0x1110, 0x6023, 0x000a, 0x0016, 0x001e, 0x080c,
+	0xac8c, 0x00ce, 0x00be, 0x0005, 0x001e, 0x0cd8, 0x2001, 0x180e,
+	0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x4b07, 0x080c,
+	0xac5f, 0x0d90, 0x2b08, 0x6112, 0x6023, 0x0004, 0x7120, 0x610a,
+	0x001e, 0x0016, 0x9186, 0x0017, 0x0118, 0x9186, 0x0030, 0x1128,
+	0x6007, 0x0009, 0x6017, 0x2900, 0x0020, 0x6007, 0x0051, 0x6017,
+	0x0000, 0x602f, 0x0009, 0x6003, 0x0001, 0x080c, 0x9225, 0x08a0,
+	0x080c, 0x3332, 0x1140, 0x7010, 0x9084, 0xff00, 0x8007, 0x908e,
+	0x0008, 0x1108, 0x0009, 0x0005, 0x00b6, 0x00c6, 0x0046, 0x7000,
+	0x908c, 0xff00, 0x810f, 0x9186, 0x0033, 0x11e8, 0x080c, 0x840c,
+	0x0904, 0x81fb, 0x7124, 0x610a, 0x7030, 0x908e, 0x0200, 0x1140,
+	0x7034, 0x9005, 0x15c0, 0x2009, 0x0015, 0x080c, 0xac8c, 0x0498,
+	0x908e, 0x0100, 0x1580, 0x7034, 0x9005, 0x1568, 0x2009, 0x0016,
+	0x080c, 0xac8c, 0x0440, 0x9186, 0x0032, 0x1528, 0x7030, 0x908e,
+	0x1400, 0x1508, 0x2009, 0x0038, 0x0016, 0x2011, 0x0263, 0x2204,
+	0x8211, 0x220c, 0x080c, 0x25fb, 0x11a8, 0x080c, 0x65c4, 0x1190,
+	0xbe12, 0xbd16, 0x080c, 0xab97, 0x0168, 0x2b08, 0x6112, 0x080c,
+	0xcccc, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x080c, 0xac8c,
+	0x0010, 0x00ce, 0x001e, 0x004e, 0x00ce, 0x00be, 0x0005, 0x00b6,
+	0x0046, 0x00e6, 0x00d6, 0x2028, 0x2130, 0x9696, 0x00ff, 0x11b8,
+	0x9592, 0xfffc, 0x02a0, 0x9596, 0xfffd, 0x1120, 0x2009, 0x007f,
+	0x0804, 0x825d, 0x9596, 0xfffe, 0x1120, 0x2009, 0x007e, 0x0804,
+	0x825d, 0x9596, 0xfffc, 0x1118, 0x2009, 0x0080, 0x04f0, 0x2011,
+	0x0000, 0x2019, 0x1837, 0x231c, 0xd3ac, 0x0130, 0x9026, 0x20a9,
+	0x0800, 0x2071, 0x1000, 0x0030, 0x2021, 0x0081, 0x20a9, 0x077f,
+	0x2071, 0x1081, 0x2e1c, 0x93dd, 0x0000, 0x1140, 0x82ff, 0x11d0,
+	0x9496, 0x00ff, 0x01b8, 0x2410, 0xc2fd, 0x00a0, 0xbf10, 0x2600,
+	0x9706, 0xb814, 0x1120, 0x9546, 0x1110, 0x2408, 0x00b0, 0x9745,
+	0x1148, 0x94c6, 0x007e, 0x0130, 0x94c6, 0x007f, 0x0118, 0x94c6,
+	0x0080, 0x1d20, 0x8420, 0x8e70, 0x1f04, 0x8232, 0x82ff, 0x1118,
+	0x9085, 0x0001, 0x0018, 0xc2fc, 0x2208, 0x9006, 0x00de, 0x00ee,
+	0x004e, 0x00be, 0x0005, 0x7000, 0x908c, 0xff00, 0x810f, 0x9184,
+	0x000f, 0x0002, 0x827a, 0x827a, 0x827a, 0x841e, 0x827a, 0x827d,
+	0x82a2, 0x832b, 0x827a, 0x827a, 0x827a, 0x827a, 0x827a, 0x827a,
+	0x827a, 0x827a, 0x7817, 0x0140, 0x0005, 0x00b6, 0x7110, 0xd1bc,
+	0x01e8, 0x7120, 0x2160, 0x9c8c, 0x0003, 0x11c0, 0x9c8a, 0x1ddc,
+	0x02a8, 0x6868, 0x9c02, 0x1290, 0x7008, 0x9084, 0x00ff, 0x6110,
+	0x2158, 0xb910, 0x9106, 0x1150, 0x700c, 0xb914, 0x9106, 0x1130,
+	0x7124, 0x610a, 0x2009, 0x0046, 0x080c, 0xac8c, 0x7817, 0x0140,
+	0x00be, 0x0005, 0x00b6, 0x00c6, 0x9484, 0x0fff, 0x0904, 0x8307,
+	0x7110, 0xd1bc, 0x1904, 0x8307, 0x7108, 0x700c, 0x2028, 0x918c,
+	0x00ff, 0x2130, 0x9094, 0xff00, 0x15c8, 0x81ff, 0x15b8, 0x9080,
+	0x3374, 0x200d, 0x918c, 0xff00, 0x810f, 0x2001, 0x0080, 0x9106,
+	0x0904, 0x8307, 0x9182, 0x0801, 0x1a04, 0x8307, 0x9190, 0x1000,
+	0x2204, 0x905d, 0x05e0, 0xbe12, 0xbd16, 0xb800, 0xd0ec, 0x15b8,
+	0xba04, 0x9294, 0xff00, 0x9286, 0x0600, 0x1190, 0x080c, 0xab97,
+	0x0598, 0x2b08, 0x7028, 0x6052, 0x702c, 0x604e, 0x6112, 0x6023,
+	0x0006, 0x7120, 0x610a, 0x7130, 0x615e, 0x080c, 0xd8b5, 0x00f8,
+	0x080c, 0x6a6b, 0x1138, 0xb807, 0x0606, 0x0c40, 0x190c, 0x81ff,
+	0x11b0, 0x0880, 0x080c, 0xab97, 0x2b08, 0x0188, 0x6112, 0x6023,
+	0x0004, 0x7120, 0x610a, 0x9286, 0x0400, 0x1118, 0x6007, 0x0005,
+	0x0010, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x9225, 0x7817,
+	0x0140, 0x00ce, 0x00be, 0x0005, 0x2001, 0x180e, 0x2004, 0xd0ec,
+	0x0120, 0x2011, 0x8049, 0x080c, 0x4b07, 0x080c, 0xac5f, 0x0d78,
+	0x2b08, 0x6112, 0x6023, 0x0006, 0x7120, 0x610a, 0x7130, 0x615e,
+	0x6017, 0xf300, 0x6003, 0x0001, 0x6007, 0x0041, 0x2009, 0xa022,
+	0x080c, 0x921e, 0x08e0, 0x00b6, 0x7110, 0xd1bc, 0x05d0, 0x7020,
+	0x2060, 0x9c84, 0x0003, 0x15a8, 0x9c82, 0x1ddc, 0x0690, 0x6868,
+	0x9c02, 0x1678, 0x9484, 0x0fff, 0x9082, 0x000c, 0x0650, 0x7008,
+	0x9084, 0x00ff, 0x6110, 0x2158, 0xb910, 0x9106, 0x1510, 0x700c,
+	0xb914, 0x9106, 0x11f0, 0x7124, 0x610a, 0x601c, 0xd0fc, 0x11c8,
+	0x2001, 0x0271, 0x2004, 0x9005, 0x1180, 0x9484, 0x0fff, 0x9082,
+	0x000c, 0x0158, 0x0066, 0x2031, 0x0100, 0xa001, 0xa001, 0x8631,
+	0x1de0, 0x006e, 0x601c, 0xd0fc, 0x1120, 0x2009, 0x0045, 0x080c,
+	0xac8c, 0x7817, 0x0140, 0x00be, 0x0005, 0x6120, 0x9186, 0x0002,
+	0x0128, 0x9186, 0x0005, 0x0110, 0x9085, 0x0001, 0x0005, 0x080c,
+	0x3332, 0x1168, 0x7010, 0x9084, 0xff00, 0x8007, 0x9086, 0x0000,
+	0x1130, 0x9184, 0x000f, 0x908a, 0x0006, 0x1208, 0x000b, 0x0005,
+	0x838e, 0x838f, 0x838e, 0x838e, 0x83ee, 0x83fd, 0x0005, 0x00b6,
+	0x7110, 0xd1bc, 0x0120, 0x702c, 0xd084, 0x0904, 0x83ec, 0x700c,
+	0x7108, 0x080c, 0x25fb, 0x1904, 0x83ec, 0x080c, 0x65c4, 0x1904,
+	0x83ec, 0xbe12, 0xbd16, 0x7110, 0xd1bc, 0x01d8, 0x080c, 0x6a6b,
+	0x0118, 0x9086, 0x0004, 0x1588, 0x00c6, 0x080c, 0x840c, 0x00ce,
+	0x05d8, 0x080c, 0xab97, 0x2b08, 0x05b8, 0x6112, 0x080c, 0xcccc,
+	0x6023, 0x0002, 0x7120, 0x610a, 0x2009, 0x0088, 0x080c, 0xac8c,
+	0x0458, 0x080c, 0x6a6b, 0x0148, 0x9086, 0x0004, 0x0130, 0x080c,
+	0x6a73, 0x0118, 0x9086, 0x0004, 0x1180, 0x080c, 0xab97, 0x2b08,
+	0x01d8, 0x6112, 0x080c, 0xcccc, 0x6023, 0x0005, 0x7120, 0x610a,
+	0x2009, 0x0088, 0x080c, 0xac8c, 0x0078, 0x080c, 0xab97, 0x2b08,
+	0x0158, 0x6112, 0x080c, 0xcccc, 0x6023, 0x0004, 0x7120, 0x610a,
+	0x2009, 0x0001, 0x080c, 0xac8c, 0x00be, 0x0005, 0x7110, 0xd1bc,
+	0x0158, 0x00d1, 0x0148, 0x080c, 0x836d, 0x1130, 0x7124, 0x610a,
+	0x2009, 0x0089, 0x080c, 0xac8c, 0x0005, 0x7110, 0xd1bc, 0x0158,
+	0x0059, 0x0148, 0x080c, 0x836d, 0x1130, 0x7124, 0x610a, 0x2009,
+	0x008a, 0x080c, 0xac8c, 0x0005, 0x7020, 0x2060, 0x9c84, 0x0003,
+	0x1158, 0x9c82, 0x1ddc, 0x0240, 0x2001, 0x181a, 0x2004, 0x9c02,
+	0x1218, 0x9085, 0x0001, 0x0005, 0x9006, 0x0ce8, 0x00b6, 0x7110,
+	0xd1bc, 0x11d8, 0x7024, 0x2060, 0x9c84, 0x0003, 0x11b0, 0x9c82,
+	0x1ddc, 0x0298, 0x6868, 0x9c02, 0x1280, 0x7008, 0x9084, 0x00ff,
+	0x6110, 0x2158, 0xb910, 0x9106, 0x1140, 0x700c, 0xb914, 0x9106,
+	0x1120, 0x2009, 0x0051, 0x080c, 0xac8c, 0x7817, 0x0140, 0x00be,
+	0x0005, 0x2031, 0x0105, 0x0069, 0x0005, 0x2031, 0x0206, 0x0049,
+	0x0005, 0x2031, 0x0207, 0x0029, 0x0005, 0x2031, 0x0213, 0x0009,
+	0x0005, 0x00c6, 0x0096, 0x00f6, 0x7000, 0x9084, 0xf000, 0x9086,
+	0xc000, 0x05c0, 0x080c, 0xab97, 0x05a8, 0x0066, 0x00c6, 0x0046,
+	0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x25fb, 0x1590,
+	0x080c, 0x65c4, 0x1578, 0xbe12, 0xbd16, 0x2b00, 0x004e, 0x00ce,
+	0x6012, 0x080c, 0xcccc, 0x080c, 0x103a, 0x0500, 0x2900, 0x6062,
+	0x9006, 0xa802, 0xa866, 0xac6a, 0xa85c, 0x90f8, 0x001b, 0x20a9,
+	0x000e, 0xa860, 0x20e8, 0x20e1, 0x0000, 0x2fa0, 0x2e98, 0x4003,
+	0x006e, 0x6616, 0x6007, 0x003e, 0x6023, 0x0001, 0x6003, 0x0001,
+	0x080c, 0x9225, 0x00fe, 0x009e, 0x00ce, 0x0005, 0x080c, 0xabed,
+	0x006e, 0x0cc0, 0x004e, 0x00ce, 0x0cc8, 0x00c6, 0x7000, 0x908c,
+	0xff00, 0x9184, 0xf000, 0x810f, 0x9086, 0x2000, 0x1904, 0x84f4,
+	0x9186, 0x0022, 0x15f0, 0x2001, 0x0111, 0x2004, 0x9005, 0x1904,
+	0x84f6, 0x7030, 0x908e, 0x0400, 0x0904, 0x84f6, 0x908e, 0x6000,
+	0x05e8, 0x908e, 0x5400, 0x05d0, 0x908e, 0x0300, 0x11d8, 0x2009,
+	0x1837, 0x210c, 0xd18c, 0x1590, 0xd1a4, 0x1580, 0x080c, 0x6a29,
+	0x0558, 0x68b0, 0x9084, 0x00ff, 0x7100, 0x918c, 0x00ff, 0x9106,
+	0x1518, 0x6880, 0x69b0, 0x918c, 0xff00, 0x9105, 0x7104, 0x9106,
+	0x11d8, 0x00e0, 0x2009, 0x0103, 0x210c, 0xd1b4, 0x11a8, 0x908e,
+	0x5200, 0x09e8, 0x908e, 0x0500, 0x09d0, 0x908e, 0x5000, 0x09b8,
+	0x0058, 0x9186, 0x0023, 0x1140, 0x080c, 0x840c, 0x0128, 0x6004,
+	0x9086, 0x0002, 0x0118, 0x0000, 0x9006, 0x0010, 0x9085, 0x0001,
+	0x00ce, 0x0005, 0x0156, 0x0046, 0x0016, 0x0036, 0x7038, 0x2020,
+	0x8427, 0x94a4, 0x0007, 0xd484, 0x0148, 0x20a9, 0x0004, 0x2019,
+	0x1805, 0x2011, 0x027a, 0x080c, 0xbbae, 0x1178, 0xd48c, 0x0148,
+	0x20a9, 0x0004, 0x2019, 0x1801, 0x2011, 0x027e, 0x080c, 0xbbae,
+	0x1120, 0xd494, 0x0110, 0x9085, 0x0001, 0x003e, 0x001e, 0x004e,
+	0x015e, 0x0005, 0x0156, 0x0046, 0x0016, 0x0036, 0x7038, 0x2020,
+	0x8427, 0x94a4, 0x0007, 0xd484, 0x0148, 0x20a9, 0x0004, 0x2019,
+	0x1805, 0x2011, 0x0272, 0x080c, 0xbbae, 0x1178, 0xd48c, 0x0148,
+	0x20a9, 0x0004, 0x2019, 0x1801, 0x2011, 0x0276, 0x080c, 0xbbae,
+	0x1120, 0xd494, 0x0110, 0x9085, 0x0001, 0x003e, 0x001e, 0x004e,
+	0x015e, 0x0005, 0x00f6, 0x2079, 0x0200, 0x7800, 0xc0e5, 0xc0cc,
+	0x7802, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x1800, 0x7834, 0xd084,
+	0x1130, 0x2079, 0x0200, 0x7800, 0x9085, 0x1200, 0x7802, 0x00fe,
+	0x0005, 0x00e6, 0x2071, 0x1800, 0x7034, 0xc084, 0x7036, 0x00ee,
+	0x0005, 0x2071, 0x1a03, 0x7003, 0x0003, 0x700f, 0x0361, 0x9006,
+	0x701a, 0x7072, 0x7012, 0x7017, 0x1ddc, 0x7007, 0x0000, 0x7026,
+	0x702b, 0x9e54, 0x7032, 0x7037, 0x9ed1, 0x703f, 0xffff, 0x7042,
+	0x7047, 0x5571, 0x704a, 0x705b, 0x8711, 0x080c, 0x1053, 0x090c,
+	0x0d7d, 0x2900, 0x703a, 0xa867, 0x0003, 0xa86f, 0x0100, 0xa8ab,
+	0xdcb0, 0x0005, 0x2071, 0x1a03, 0x1d04, 0x862d, 0x2091, 0x6000,
+	0x700c, 0x8001, 0x700e, 0x1590, 0x2001, 0x013c, 0x2004, 0x9005,
+	0x190c, 0x87bb, 0x2001, 0x1869, 0x2004, 0xd0c4, 0x0158, 0x3a00,
+	0xd08c, 0x1140, 0x20d1, 0x0000, 0x20d1, 0x0001, 0x20d1, 0x0000,
+	0x080c, 0x0d7d, 0x700f, 0x0361, 0x7007, 0x0001, 0x0126, 0x2091,
+	0x8000, 0x2069, 0x1800, 0x69ec, 0xd1e4, 0x1138, 0xd1dc, 0x1118,
+	0x080c, 0x877f, 0x0010, 0x080c, 0x8756, 0x7040, 0x900d, 0x0148,
+	0x8109, 0x7142, 0x1130, 0x7044, 0x080f, 0x0018, 0x0126, 0x2091,
+	0x8000, 0x7024, 0x900d, 0x0188, 0x7020, 0x8001, 0x7022, 0x1168,
+	0x7023, 0x0009, 0x8109, 0x7126, 0x9186, 0x03e8, 0x1110, 0x7028,
+	0x080f, 0x81ff, 0x1110, 0x7028, 0x080f, 0x7030, 0x900d, 0x0180,
+	0x702c, 0x8001, 0x702e, 0x1160, 0x702f, 0x0009, 0x8109, 0x7132,
+	0x0128, 0x9184, 0x007f, 0x090c, 0x9f6d, 0x0010, 0x7034, 0x080f,
+	0x703c, 0x9005, 0x0118, 0x0310, 0x8001, 0x703e, 0x704c, 0x900d,
+	0x0168, 0x7048, 0x8001, 0x704a, 0x1148, 0x704b, 0x0009, 0x8109,
+	0x714e, 0x1120, 0x7150, 0x714e, 0x7058, 0x080f, 0x7018, 0x900d,
+	0x01d8, 0x0016, 0x7070, 0x900d, 0x0158, 0x706c, 0x8001, 0x706e,
+	0x1138, 0x706f, 0x0009, 0x8109, 0x7172, 0x1110, 0x7074, 0x080f,
+	0x001e, 0x7008, 0x8001, 0x700a, 0x1138, 0x700b, 0x0009, 0x8109,
+	0x711a, 0x1110, 0x701c, 0x080f, 0x012e, 0x7004, 0x0002, 0x8655,
+	0x8656, 0x8680, 0x00e6, 0x2071, 0x1a03, 0x7018, 0x9005, 0x1120,
+	0x711a, 0x721e, 0x700b, 0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006,
+	0x2071, 0x1a03, 0x701c, 0x9206, 0x1120, 0x701a, 0x701e, 0x7072,
+	0x7076, 0x000e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1a03, 0xb888,
+	0x9102, 0x0208, 0xb98a, 0x00ee, 0x0005, 0x0005, 0x00b6, 0x2031,
+	0x0010, 0x7110, 0x080c, 0x6625, 0x11a8, 0xb888, 0x8001, 0x0290,
+	0xb88a, 0x1180, 0x0126, 0x2091, 0x8000, 0x0066, 0xb8d0, 0x9005,
+	0x0138, 0x0026, 0xba3c, 0x0016, 0x080c, 0x6750, 0x001e, 0x002e,
+	0x006e, 0x012e, 0x8108, 0x9182, 0x0800, 0x1220, 0x8631, 0x0128,
+	0x7112, 0x0c00, 0x900e, 0x7007, 0x0002, 0x7112, 0x00be, 0x0005,
+	0x2031, 0x0010, 0x7014, 0x2060, 0x0126, 0x2091, 0x8000, 0x6048,
+	0x9005, 0x0128, 0x8001, 0x604a, 0x1110, 0x080c, 0xcb4d, 0x6018,
+	0x9005, 0x0904, 0x86d8, 0x00f6, 0x2079, 0x0300, 0x7918, 0xd1b4,
+	0x1904, 0x86eb, 0x781b, 0x2020, 0xa001, 0x7918, 0xd1b4, 0x0120,
+	0x781b, 0x2000, 0x0804, 0x86eb, 0x8001, 0x601a, 0x0106, 0x781b,
+	0x2000, 0xa001, 0x7918, 0xd1ac, 0x1dd0, 0x010e, 0x00fe, 0x1540,
+	0x6120, 0x9186, 0x0003, 0x0148, 0x9186, 0x0006, 0x0130, 0x9186,
+	0x0009, 0x11e0, 0x611c, 0xd1c4, 0x1100, 0x080c, 0xc838, 0x01b0,
+	0x6014, 0x2048, 0xa884, 0x908a, 0x199a, 0x0280, 0x9082, 0x1999,
+	0xa886, 0x908a, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x800b,
+	0x810b, 0x9108, 0x611a, 0x080c, 0xcf7e, 0x0110, 0x080c, 0xc536,
+	0x012e, 0x9c88, 0x001c, 0x7116, 0x2001, 0x181a, 0x2004, 0x9102,
+	0x1228, 0x8631, 0x0138, 0x2160, 0x0804, 0x8684, 0x7017, 0x1ddc,
+	0x7007, 0x0000, 0x0005, 0x00fe, 0x0c58, 0x00e6, 0x2071, 0x1a03,
+	0x7027, 0x07d0, 0x7023, 0x0009, 0x00ee, 0x0005, 0x2001, 0x1a0c,
+	0x2003, 0x0000, 0x0005, 0x00e6, 0x2071, 0x1a03, 0x7132, 0x702f,
+	0x0009, 0x00ee, 0x0005, 0x2011, 0x1a0f, 0x2013, 0x0000, 0x0005,
+	0x00e6, 0x2071, 0x1a03, 0x711a, 0x721e, 0x700b, 0x0009, 0x00ee,
+	0x0005, 0x0086, 0x0026, 0x7054, 0x8000, 0x7056, 0x2001, 0x1a11,
+	0x2044, 0xa06c, 0x9086, 0x0000, 0x0150, 0x7068, 0xa09a, 0x7064,
+	0xa096, 0x7060, 0xa092, 0x705c, 0xa08e, 0x080c, 0x1124, 0x002e,
+	0x008e, 0x0005, 0x0006, 0x0016, 0x0096, 0x00a6, 0x00b6, 0x00c6,
+	0x00d6, 0x00e6, 0x00f6, 0x0156, 0x080c, 0x8592, 0x015e, 0x00fe,
+	0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x001e, 0x000e,
+	0x0005, 0x00e6, 0x2071, 0x1a03, 0x7172, 0x7276, 0x706f, 0x0009,
+	0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071, 0x1a03, 0x7074, 0x9206,
+	0x1110, 0x7072, 0x7076, 0x000e, 0x00ee, 0x0005, 0x2069, 0x1800,
+	0x69ec, 0xd1e4, 0x1518, 0x0026, 0xd1ec, 0x0140, 0x6a54, 0x6874,
+	0x9202, 0x0288, 0x8117, 0x9294, 0x00c1, 0x0088, 0x9184, 0x0007,
+	0x01a0, 0x8109, 0x9184, 0x0007, 0x0110, 0x69ee, 0x0070, 0x8107,
+	0x9084, 0x0007, 0x910d, 0x8107, 0x9106, 0x9094, 0x00c1, 0x9184,
+	0xff3e, 0x9205, 0x68ee, 0x080c, 0x0f05, 0x002e, 0x0005, 0x69e8,
+	0x9184, 0x003f, 0x05b8, 0x8109, 0x9184, 0x003f, 0x01a8, 0x6a54,
+	0x6874, 0x9202, 0x0220, 0xd1bc, 0x0168, 0xc1bc, 0x0018, 0xd1bc,
+	0x1148, 0xc1bd, 0x2110, 0x00e6, 0x2071, 0x1800, 0x080c, 0x0f27,
+	0x00ee, 0x0400, 0x69ea, 0x00f0, 0x0026, 0x8107, 0x9094, 0x0007,
+	0x0128, 0x8001, 0x8007, 0x9085, 0x0007, 0x0050, 0x2010, 0x8004,
+	0x8004, 0x8004, 0x9084, 0x0007, 0x9205, 0x8007, 0x9085, 0x0028,
+	0x9086, 0x0040, 0x2010, 0x00e6, 0x2071, 0x1800, 0x080c, 0x0f27,
+	0x00ee, 0x002e, 0x0005, 0x0016, 0x00c6, 0x2009, 0xfffc, 0x210d,
+	0x2061, 0x0100, 0x60f0, 0x9100, 0x60f3, 0x0000, 0x2009, 0xfffc,
+	0x200f, 0x1220, 0x8108, 0x2105, 0x8000, 0x200f, 0x00ce, 0x001e,
+	0x0005, 0x00c6, 0x2061, 0x1a6f, 0x00ce, 0x0005, 0x9184, 0x000f,
+	0x8003, 0x8003, 0x8003, 0x9080, 0x1a6f, 0x2060, 0x0005, 0xa884,
+	0x908a, 0x199a, 0x1638, 0x9005, 0x1150, 0x00c6, 0x2061, 0x1a6f,
+	0x6014, 0x00ce, 0x9005, 0x1130, 0x2001, 0x001e, 0x0018, 0x908e,
+	0xffff, 0x01b0, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0xa87c,
+	0x908c, 0x00c0, 0x918e, 0x00c0, 0x0904, 0x8896, 0xd0b4, 0x1168,
+	0xd0bc, 0x1904, 0x886f, 0x2009, 0x0006, 0x080c, 0x88c3, 0x0005,
+	0x900e, 0x0c60, 0x2001, 0x1999, 0x08b0, 0xd0fc, 0x05c8, 0x908c,
+	0x2023, 0x1550, 0x87ff, 0x1540, 0x6124, 0x918c, 0x0500, 0x1520,
+	0x6100, 0x918e, 0x0007, 0x1500, 0x2009, 0x1869, 0x210c, 0xd184,
+	0x11d8, 0x6003, 0x0003, 0x6007, 0x0043, 0x6047, 0xb035, 0x080c,
+	0x1c03, 0xa87c, 0xc0dd, 0xa87e, 0x600f, 0x0000, 0x00f6, 0x2079,
+	0x0380, 0x7818, 0xd0bc, 0x1de8, 0x7833, 0x0013, 0x2c00, 0x7836,
+	0x781b, 0x8080, 0x00fe, 0x0005, 0x908c, 0x0003, 0x0120, 0x918e,
+	0x0003, 0x1904, 0x88bd, 0x908c, 0x2020, 0x918e, 0x2020, 0x01a8,
+	0x6024, 0xd0d4, 0x11e8, 0x2009, 0x1869, 0x2104, 0xd084, 0x1138,
+	0x87ff, 0x1120, 0x2009, 0x0043, 0x0804, 0xac8c, 0x0005, 0x87ff,
+	0x1de8, 0x2009, 0x0042, 0x0804, 0xac8c, 0x6110, 0x00b6, 0x2158,
+	0xb900, 0x00be, 0xd1ac, 0x0d20, 0x6024, 0xc0cd, 0x6026, 0x0c00,
+	0xc0d4, 0x6026, 0xa890, 0x602e, 0xa88c, 0x6032, 0x08e0, 0xd0fc,
+	0x0160, 0x908c, 0x0003, 0x0120, 0x918e, 0x0003, 0x1904, 0x88bd,
+	0x908c, 0x2020, 0x918e, 0x2020, 0x0170, 0x0076, 0x00f6, 0x2c78,
+	0x080c, 0x1731, 0x00fe, 0x007e, 0x87ff, 0x1120, 0x2009, 0x0042,
+	0x080c, 0xac8c, 0x0005, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be,
+	0xd1ac, 0x0d58, 0x6124, 0xc1cd, 0x6126, 0x0c38, 0xd0fc, 0x0188,
+	0x908c, 0x2020, 0x918e, 0x2020, 0x01a8, 0x9084, 0x0003, 0x908e,
+	0x0002, 0x0148, 0x87ff, 0x1120, 0x2009, 0x0041, 0x080c, 0xac8c,
+	0x0005, 0x00b9, 0x0ce8, 0x87ff, 0x1dd8, 0x2009, 0x0043, 0x080c,
+	0xac8c, 0x0cb0, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1ac,
+	0x0d20, 0x6124, 0xc1cd, 0x6126, 0x0c00, 0x2009, 0x0004, 0x0019,
+	0x0005, 0x2009, 0x0001, 0x0096, 0x080c, 0xc838, 0x0518, 0x6014,
+	0x2048, 0xa982, 0xa800, 0x6016, 0x9186, 0x0001, 0x1188, 0xa97c,
+	0x918c, 0x8100, 0x918e, 0x8100, 0x1158, 0x00c6, 0x2061, 0x1a6f,
+	0x6200, 0xd28c, 0x1120, 0x6204, 0x8210, 0x0208, 0x6206, 0x00ce,
+	0x080c, 0x6bb5, 0x6014, 0x904d, 0x0076, 0x2039, 0x0000, 0x190c,
+	0x87df, 0x007e, 0x009e, 0x0005, 0x0156, 0x00c6, 0x2061, 0x1a6f,
+	0x6000, 0x81ff, 0x0110, 0x9205, 0x0008, 0x9204, 0x6002, 0x00ce,
+	0x015e, 0x0005, 0x6800, 0xd08c, 0x1138, 0x6808, 0x9005, 0x0120,
+	0x8001, 0x680a, 0x9085, 0x0001, 0x0005, 0x2071, 0x1923, 0x7003,
+	0x0006, 0x7007, 0x0000, 0x700f, 0x0000, 0x7013, 0x0001, 0x080c,
+	0x1053, 0x090c, 0x0d7d, 0xa867, 0x0006, 0xa86b, 0x0001, 0xa8ab,
+	0xdcb0, 0xa89f, 0x0000, 0x2900, 0x702e, 0x7033, 0x0000, 0x0005,
+	0x0096, 0x00e6, 0x2071, 0x1923, 0x702c, 0x2048, 0x6a2c, 0x721e,
+	0x6b30, 0x7322, 0x6834, 0x7026, 0xa896, 0x6838, 0x702a, 0xa89a,
+	0x6824, 0x7016, 0x683c, 0x701a, 0x2009, 0x0028, 0x200a, 0x9005,
+	0x0148, 0x900e, 0x9188, 0x000c, 0x8001, 0x1de0, 0x2100, 0x9210,
+	0x1208, 0x8318, 0xaa8e, 0xab92, 0x7010, 0xd084, 0x0178, 0xc084,
+	0x7007, 0x0001, 0x700f, 0x0000, 0x0006, 0x2009, 0x181d, 0x2104,
+	0x9082, 0x0007, 0x2009, 0x1b4e, 0x200a, 0x000e, 0xc095, 0x7012,
+	0x2008, 0x2001, 0x003b, 0x080c, 0x1679, 0x9006, 0x2071, 0x193c,
+	0x7002, 0x7006, 0x702a, 0x00ee, 0x009e, 0x0005, 0x00e6, 0x0126,
+	0x0156, 0x2091, 0x8000, 0x2071, 0x1800, 0x7154, 0x2001, 0x0008,
+	0x910a, 0x0638, 0x2001, 0x187d, 0x20ac, 0x9006, 0x9080, 0x0008,
+	0x1f04, 0x8976, 0x71c0, 0x9102, 0x02e0, 0x2071, 0x1877, 0x20a9,
+	0x0007, 0x00c6, 0x080c, 0xab97, 0x6023, 0x0009, 0x6003, 0x0004,
+	0x601f, 0x0101, 0x0089, 0x0126, 0x2091, 0x8000, 0x080c, 0x8afc,
+	0x012e, 0x1f04, 0x8982, 0x9006, 0x00ce, 0x015e, 0x012e, 0x00ee,
+	0x0005, 0x9085, 0x0001, 0x0cc8, 0x00e6, 0x00b6, 0x0096, 0x0086,
+	0x0056, 0x0046, 0x0026, 0x7118, 0x720c, 0x7620, 0x7004, 0xd084,
+	0x1128, 0x2021, 0x0024, 0x2029, 0x0002, 0x0020, 0x2021, 0x002c,
+	0x2029, 0x000a, 0x080c, 0x103a, 0x090c, 0x0d7d, 0x2900, 0x6016,
+	0x2058, 0xac66, 0x9006, 0xa802, 0xa806, 0xa86a, 0xa87a, 0xa8aa,
+	0xa887, 0x0005, 0xa87f, 0x0020, 0x7008, 0xa89a, 0x7010, 0xa89e,
+	0xae8a, 0xa8af, 0xffff, 0xa8b3, 0x0000, 0x8109, 0x0160, 0x080c,
+	0x103a, 0x090c, 0x0d7d, 0xad66, 0x2b00, 0xa802, 0x2900, 0xb806,
+	0x2058, 0x8109, 0x1da0, 0x002e, 0x004e, 0x005e, 0x008e, 0x009e,
+	0x00be, 0x00ee, 0x0005, 0x2079, 0x0000, 0x2071, 0x1923, 0x7004,
+	0x004b, 0x700c, 0x0002, 0x89ee, 0x89e7, 0x89e7, 0x0005, 0x89f8,
+	0x8a59, 0x8a59, 0x8a59, 0x8a5a, 0x8a6b, 0x8a6b, 0x700c, 0x0cba,
+	0x0126, 0x2091, 0x8000, 0x78a0, 0x79a0, 0x9106, 0x0128, 0x78a0,
+	0x79a0, 0x9106, 0x1904, 0x8a4c, 0x2001, 0x0005, 0x2004, 0xd0bc,
+	0x0130, 0x2011, 0x0004, 0x2204, 0xc0c5, 0x2012, 0x0ca8, 0x012e,
+	0x7018, 0x910a, 0x1130, 0x7030, 0x9005, 0x05a8, 0x080c, 0x8a9a,
+	0x0490, 0x1210, 0x7114, 0x910a, 0x9192, 0x000a, 0x0210, 0x2009,
+	0x000a, 0x2001, 0x1888, 0x2014, 0x2001, 0x1935, 0x2004, 0x9100,
+	0x9202, 0x0e48, 0x080c, 0x8be6, 0x2200, 0x9102, 0x0208, 0x2208,
+	0x0096, 0x702c, 0x2048, 0xa873, 0x0001, 0xa976, 0x080c, 0x8cef,
+	0x2100, 0xa87e, 0xa86f, 0x0000, 0x009e, 0x0126, 0x2091, 0x8000,
+	0x2009, 0x1a21, 0x2104, 0xc085, 0x200a, 0x700f, 0x0002, 0x012e,
+	0x080c, 0x1143, 0x1de8, 0x0005, 0x2001, 0x0005, 0x2004, 0xd0bc,
+	0x0130, 0x2011, 0x0004, 0x2204, 0xc0c5, 0x2012, 0x0ca8, 0x012e,
+	0x0005, 0x0005, 0x700c, 0x0002, 0x8a5f, 0x8a62, 0x8a61, 0x080c,
+	0x89f6, 0x0005, 0x8001, 0x700e, 0x0096, 0x702c, 0x2048, 0xa974,
+	0x009e, 0x0011, 0x0ca0, 0x0005, 0x0096, 0x702c, 0x2048, 0x7018,
+	0x9100, 0x7214, 0x921a, 0x1130, 0x701c, 0xa88e, 0x7020, 0xa892,
+	0x9006, 0x0068, 0x0006, 0x080c, 0x8cef, 0x2100, 0xaa8c, 0x9210,
+	0xaa8e, 0x1220, 0xa890, 0x9081, 0x0000, 0xa892, 0x000e, 0x009e,
+	0x2f08, 0x9188, 0x0028, 0x200a, 0x701a, 0x0005, 0x00e6, 0x2071,
+	0x1923, 0x700c, 0x0002, 0x8a98, 0x8a98, 0x8a96, 0x700f, 0x0001,
+	0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x7030, 0x9005, 0x0508,
+	0x2078, 0x7814, 0x2048, 0xae88, 0x00b6, 0x2059, 0x0000, 0x080c,
+	0x8b05, 0x00be, 0x01b0, 0x00e6, 0x2071, 0x193c, 0x080c, 0x8b4c,
+	0x00ee, 0x0178, 0x0096, 0x080c, 0x1053, 0x2900, 0x009e, 0x0148,
+	0xa8aa, 0x04b9, 0x0041, 0x2001, 0x1946, 0x2003, 0x0000, 0x012e,
+	0x08c8, 0x012e, 0x0005, 0x00d6, 0x00c6, 0x0086, 0x00a6, 0x2940,
+	0x2650, 0x2600, 0x9005, 0x0180, 0xa864, 0x9084, 0x000f, 0x2068,
+	0x9d88, 0x1e55, 0x2165, 0x0056, 0x2029, 0x0000, 0x080c, 0x8c74,
+	0x080c, 0x1e2b, 0x1dd8, 0x005e, 0x00ae, 0x2001, 0x187f, 0x2004,
+	0xa88a, 0x080c, 0x1731, 0x781f, 0x0101, 0x7813, 0x0000, 0x0126,
+	0x2091, 0x8000, 0x080c, 0x8b5b, 0x012e, 0x008e, 0x00ce, 0x00de,
+	0x0005, 0x7030, 0x9005, 0x0138, 0x2078, 0x780c, 0x7032, 0x2001,
+	0x1946, 0x2003, 0x0001, 0x0005, 0x00e6, 0x2071, 0x1923, 0x7030,
+	0x600e, 0x2c00, 0x7032, 0x00ee, 0x0005, 0x00d6, 0x00c6, 0x0026,
+	0x9b80, 0x8dce, 0x2005, 0x906d, 0x090c, 0x0d7d, 0x9b80, 0x8dc6,
+	0x2005, 0x9065, 0x090c, 0x0d7d, 0x6114, 0x2600, 0x9102, 0x0248,
+	0x6828, 0x9102, 0x02f0, 0x9085, 0x0001, 0x002e, 0x00ce, 0x00de,
+	0x0005, 0x6804, 0xd094, 0x0148, 0x6854, 0xd084, 0x1178, 0xc085,
+	0x6856, 0x2011, 0x8026, 0x080c, 0x4b07, 0x684c, 0x0096, 0x904d,
+	0x090c, 0x0d7d, 0xa804, 0x8000, 0xa806, 0x009e, 0x9006, 0x2030,
+	0x0c20, 0x6854, 0xd08c, 0x1d08, 0xc08d, 0x6856, 0x2011, 0x8025,
+	0x080c, 0x4b07, 0x684c, 0x0096, 0x904d, 0x090c, 0x0d7d, 0xa800,
+	0x8000, 0xa802, 0x009e, 0x0888, 0x7000, 0x2019, 0x0008, 0x8319,
+	0x7104, 0x9102, 0x1118, 0x2300, 0x9005, 0x0020, 0x0210, 0x9302,
+	0x0008, 0x8002, 0x0005, 0x00d6, 0x7814, 0x9005, 0x090c, 0x0d7d,
+	0x781c, 0x9084, 0x0101, 0x9086, 0x0101, 0x190c, 0x0d7d, 0x2069,
+	0x193c, 0x6804, 0x9080, 0x193e, 0x2f08, 0x2102, 0x6904, 0x8108,
+	0x9182, 0x0008, 0x0208, 0x900e, 0x6906, 0x9180, 0x193e, 0x2003,
+	0x0000, 0x00de, 0x0005, 0x0096, 0x00c6, 0x2060, 0x6014, 0x2048,
+	0xa8a8, 0x0096, 0x2048, 0x9005, 0x190c, 0x106c, 0x009e, 0xa8ab,
+	0x0000, 0x080c, 0x0fec, 0x080c, 0xabed, 0x00ce, 0x009e, 0x0005,
+	0x6020, 0x9086, 0x0009, 0x1128, 0x601c, 0xd0c4, 0x0110, 0x9006,
+	0x0005, 0x9085, 0x0001, 0x0005, 0x6000, 0x9086, 0x0000, 0x0178,
+	0x6010, 0x9005, 0x0150, 0x00b6, 0x2058, 0x080c, 0x8f01, 0x00be,
+	0x6013, 0x0000, 0x601b, 0x0000, 0x0010, 0x2c00, 0x0861, 0x0005,
+	0x2009, 0x1927, 0x210c, 0xd194, 0x0005, 0x00e6, 0x2071, 0x1923,
+	0x7110, 0xc194, 0xd19c, 0x1118, 0xc185, 0x7007, 0x0000, 0x7112,
+	0x2001, 0x003b, 0x080c, 0x1679, 0x00ee, 0x0005, 0x0096, 0x00d6,
+	0x9006, 0x7006, 0x700e, 0x701a, 0x701e, 0x7022, 0x7016, 0x702a,
+	0x7026, 0x702f, 0x0000, 0x080c, 0x8d4e, 0x0170, 0x080c, 0x8d83,
+	0x0158, 0x2900, 0x7002, 0x700a, 0x701a, 0x7013, 0x0001, 0x701f,
+	0x000a, 0x00de, 0x009e, 0x0005, 0x900e, 0x0cd8, 0x00e6, 0x0096,
+	0x0086, 0x00d6, 0x00c6, 0x2071, 0x1930, 0x721c, 0x2100, 0x9202,
+	0x1618, 0x080c, 0x8d83, 0x090c, 0x0d7d, 0x7018, 0x9005, 0x1160,
+	0x2900, 0x7002, 0x700a, 0x701a, 0x9006, 0x7006, 0x700e, 0xa806,
+	0xa802, 0x7012, 0x701e, 0x0038, 0x2040, 0xa806, 0x2900, 0xa002,
+	0x701a, 0xa803, 0x0000, 0x7010, 0x8000, 0x7012, 0x701c, 0x9080,
+	0x000a, 0x701e, 0x721c, 0x08d0, 0x721c, 0x00ce, 0x00de, 0x008e,
+	0x009e, 0x00ee, 0x0005, 0x0096, 0x0156, 0x0136, 0x0146, 0x00e6,
+	0x0126, 0x2091, 0x8000, 0x2071, 0x1930, 0x7300, 0x831f, 0x831e,
+	0x831e, 0x9384, 0x003f, 0x20e8, 0x939c, 0xffc0, 0x9398, 0x0003,
+	0x7104, 0x080c, 0x8cef, 0x810c, 0x2100, 0x9318, 0x8003, 0x2228,
+	0x2021, 0x0078, 0x9402, 0x9532, 0x0208, 0x2028, 0x2500, 0x8004,
+	0x20a8, 0x23a0, 0xa001, 0xa001, 0x4005, 0x2508, 0x080c, 0x8cf8,
+	0x2130, 0x7014, 0x9600, 0x7016, 0x2600, 0x711c, 0x9102, 0x701e,
+	0x7004, 0x9600, 0x2008, 0x9082, 0x000a, 0x1190, 0x7000, 0x2048,
+	0xa800, 0x9005, 0x1148, 0x2009, 0x0001, 0x0026, 0x080c, 0x8be6,
+	0x002e, 0x7000, 0x2048, 0xa800, 0x7002, 0x7007, 0x0000, 0x0008,
+	0x7106, 0x2500, 0x9212, 0x1904, 0x8c25, 0x012e, 0x00ee, 0x014e,
+	0x013e, 0x015e, 0x009e, 0x0005, 0x0016, 0x0026, 0x00e6, 0x0126,
+	0x2091, 0x8000, 0x9580, 0x8dc6, 0x2005, 0x9075, 0x090c, 0x0d7d,
+	0x080c, 0x8cca, 0x012e, 0x9580, 0x8dc2, 0x2005, 0x9075, 0x090c,
+	0x0d7d, 0x0156, 0x0136, 0x01c6, 0x0146, 0x01d6, 0x831f, 0x831e,
+	0x831e, 0x9384, 0x003f, 0x20e0, 0x9384, 0xffc0, 0x9100, 0x2098,
+	0xa860, 0x20e8, 0xa95c, 0x2c05, 0x9100, 0x20a0, 0x20a9, 0x0002,
+	0x4003, 0x2e0c, 0x2d00, 0x0002, 0x8cb4, 0x8cb4, 0x8cb6, 0x8cb4,
+	0x8cb6, 0x8cb4, 0x8cb4, 0x8cb4, 0x8cb4, 0x8cb4, 0x8cbc, 0x8cb4,
+	0x8cbc, 0x8cb4, 0x8cb4, 0x8cb4, 0x080c, 0x0d7d, 0x4104, 0x20a9,
+	0x0002, 0x4002, 0x4003, 0x0028, 0x20a9, 0x0002, 0x4003, 0x4104,
+	0x4003, 0x01de, 0x014e, 0x01ce, 0x013e, 0x015e, 0x00ee, 0x002e,
+	0x001e, 0x0005, 0x0096, 0x7014, 0x8001, 0x7016, 0x710c, 0x2110,
+	0x00f1, 0x810c, 0x9188, 0x0003, 0x7308, 0x8210, 0x9282, 0x000a,
+	0x1198, 0x7008, 0x2048, 0xa800, 0x9005, 0x0158, 0x0006, 0x080c,
+	0x8d92, 0x009e, 0xa807, 0x0000, 0x2900, 0x700a, 0x7010, 0x8001,
+	0x7012, 0x700f, 0x0000, 0x0008, 0x720e, 0x009e, 0x0005, 0x0006,
+	0x810b, 0x810b, 0x2100, 0x810b, 0x9100, 0x2008, 0x000e, 0x0005,
+	0x0006, 0x0026, 0x2100, 0x9005, 0x0158, 0x9092, 0x000c, 0x0240,
+	0x900e, 0x8108, 0x9082, 0x000c, 0x1de0, 0x002e, 0x000e, 0x0005,
+	0x900e, 0x0cd8, 0x2d00, 0x90b8, 0x0008, 0x690c, 0x6810, 0x2019,
+	0x0001, 0x2031, 0x8d38, 0x9112, 0x0220, 0x0118, 0x8318, 0x2208,
+	0x0cd0, 0x6808, 0x9005, 0x0108, 0x8318, 0x233a, 0x6804, 0xd084,
+	0x2300, 0x2021, 0x0001, 0x1150, 0x9082, 0x0003, 0x0967, 0x0a67,
+	0x8420, 0x9082, 0x0007, 0x0967, 0x0a67, 0x0cd0, 0x9082, 0x0002,
+	0x0967, 0x0a67, 0x8420, 0x9082, 0x0005, 0x0967, 0x0a67, 0x0cd0,
+	0x6c1a, 0x2d00, 0x90b8, 0x0007, 0x00e6, 0x2071, 0x1800, 0x7128,
+	0x6810, 0x2019, 0x0001, 0x910a, 0x0118, 0x0210, 0x8318, 0x0cd8,
+	0x2031, 0x8d4b, 0x0870, 0x6c16, 0x00ee, 0x0005, 0x0096, 0x0046,
+	0x0126, 0x2091, 0x8000, 0x2b00, 0x9080, 0x8dca, 0x2005, 0x9005,
+	0x090c, 0x0d7d, 0x2004, 0x90a0, 0x000a, 0x080c, 0x1053, 0x01d0,
+	0x2900, 0x7026, 0xa803, 0x0000, 0xa807, 0x0000, 0x080c, 0x1053,
+	0x0188, 0x7024, 0xa802, 0xa807, 0x0000, 0x2900, 0x7026, 0x94a2,
+	0x000a, 0x0110, 0x0208, 0x0c90, 0x9085, 0x0001, 0x012e, 0x004e,
+	0x009e, 0x0005, 0x7024, 0x9005, 0x0dc8, 0x2048, 0xac00, 0x080c,
+	0x106c, 0x2400, 0x0cc0, 0x0126, 0x2091, 0x8000, 0x7024, 0x2048,
+	0x9005, 0x0130, 0xa800, 0x7026, 0xa803, 0x0000, 0xa807, 0x0000,
+	0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x7024, 0xa802, 0x2900,
+	0x7026, 0x012e, 0x0005, 0x0096, 0x9e80, 0x0009, 0x2004, 0x9005,
+	0x0138, 0x2048, 0xa800, 0x0006, 0x080c, 0x106c, 0x000e, 0x0cb8,
+	0x009e, 0x0005, 0x0096, 0x7008, 0x9005, 0x0138, 0x2048, 0xa800,
+	0x0006, 0x080c, 0x106c, 0x000e, 0x0cb8, 0x9006, 0x7002, 0x700a,
+	0x7006, 0x700e, 0x701a, 0x701e, 0x7022, 0x702a, 0x7026, 0x702e,
+	0x009e, 0x0005, 0x1a6d, 0x0000, 0x0000, 0x0000, 0x1930, 0x0000,
+	0x0000, 0x0000, 0x1888, 0x0000, 0x0000, 0x0000, 0x1877, 0x0000,
+	0x0000, 0x0000, 0x00e6, 0x00c6, 0x00b6, 0x00a6, 0xa8a8, 0x2040,
+	0x2071, 0x1877, 0x080c, 0x8eec, 0xa067, 0x0023, 0x6010, 0x905d,
+	0x0904, 0x8ec1, 0xb814, 0xa06e, 0xb910, 0xa172, 0xb9a0, 0xa176,
+	0x2001, 0x0003, 0xa07e, 0xa834, 0xa082, 0xa07b, 0x0000, 0xa898,
+	0x9005, 0x0118, 0xa078, 0xc085, 0xa07a, 0x2858, 0x2031, 0x0018,
+	0xa068, 0x908a, 0x0019, 0x1a0c, 0x0d7d, 0x2020, 0x2050, 0x2940,
+	0xa864, 0x90bc, 0x00ff, 0x908c, 0x000f, 0x91e0, 0x1e55, 0x2c65,
+	0x9786, 0x0024, 0x2c05, 0x1590, 0x908a, 0x0036, 0x1a0c, 0x0d7d,
+	0x9082, 0x001b, 0x0002, 0x8e2e, 0x8e2e, 0x8e30, 0x8e2e, 0x8e2e,
+	0x8e2e, 0x8e32, 0x8e2e, 0x8e2e, 0x8e2e, 0x8e34, 0x8e2e, 0x8e2e,
+	0x8e2e, 0x8e36, 0x8e2e, 0x8e2e, 0x8e2e, 0x8e38, 0x8e2e, 0x8e2e,
+	0x8e2e, 0x8e3a, 0x8e2e, 0x8e2e, 0x8e2e, 0x8e3c, 0x080c, 0x0d7d,
+	0xa180, 0x04b8, 0xa190, 0x04a8, 0xa1a0, 0x0498, 0xa1b0, 0x0488,
+	0xa1c0, 0x0478, 0xa1d0, 0x0468, 0xa1e0, 0x0458, 0x908a, 0x0034,
+	0x1a0c, 0x0d7d, 0x9082, 0x001b, 0x0002, 0x8e60, 0x8e5e, 0x8e5e,
+	0x8e5e, 0x8e5e, 0x8e5e, 0x8e62, 0x8e5e, 0x8e5e, 0x8e5e, 0x8e5e,
+	0x8e5e, 0x8e64, 0x8e5e, 0x8e5e, 0x8e5e, 0x8e5e, 0x8e5e, 0x8e66,
+	0x8e5e, 0x8e5e, 0x8e5e, 0x8e5e, 0x8e5e, 0x8e68, 0x080c, 0x0d7d,
+	0xa180, 0x0038, 0xa198, 0x0028, 0xa1b0, 0x0018, 0xa1c8, 0x0008,
+	0xa1e0, 0x2600, 0x0002, 0x8e84, 0x8e86, 0x8e88, 0x8e8a, 0x8e8c,
+	0x8e8e, 0x8e90, 0x8e92, 0x8e94, 0x8e96, 0x8e98, 0x8e9a, 0x8e9c,
+	0x8e9e, 0x8ea0, 0x8ea2, 0x8ea4, 0x8ea6, 0x8ea8, 0x8eaa, 0x8eac,
+	0x8eae, 0x8eb0, 0x8eb2, 0x8eb4, 0x080c, 0x0d7d, 0xb9e2, 0x0468,
+	0xb9de, 0x0458, 0xb9da, 0x0448, 0xb9d6, 0x0438, 0xb9d2, 0x0428,
+	0xb9ce, 0x0418, 0xb9ca, 0x0408, 0xb9c6, 0x00f8, 0xb9c2, 0x00e8,
+	0xb9be, 0x00d8, 0xb9ba, 0x00c8, 0xb9b6, 0x00b8, 0xb9b2, 0x00a8,
+	0xb9ae, 0x0098, 0xb9aa, 0x0088, 0xb9a6, 0x0078, 0xb9a2, 0x0068,
+	0xb99e, 0x0058, 0xb99a, 0x0048, 0xb996, 0x0038, 0xb992, 0x0028,
+	0xb98e, 0x0018, 0xb98a, 0x0008, 0xb986, 0x8631, 0x8421, 0x0120,
+	0x080c, 0x1e2b, 0x0804, 0x8e08, 0x00ae, 0x00be, 0x00ce, 0x00ee,
+	0x0005, 0xa86c, 0xa06e, 0xa870, 0xa072, 0xa077, 0x00ff, 0x9006,
+	0x0804, 0x8dea, 0x0006, 0x0016, 0x00b6, 0x6010, 0x2058, 0xb810,
+	0x9005, 0x01b0, 0x2001, 0x1924, 0x2004, 0x9005, 0x0188, 0x2001,
+	0x1800, 0x2004, 0x9086, 0x0003, 0x1158, 0x0036, 0x0046, 0xbba0,
+	0x2021, 0x0004, 0x2011, 0x8014, 0x080c, 0x4b07, 0x004e, 0x003e,
+	0x00be, 0x001e, 0x000e, 0x0005, 0x9016, 0x710c, 0xa834, 0x910a,
+	0xa936, 0x7008, 0x9005, 0x0120, 0x8210, 0x910a, 0x0238, 0x0130,
+	0x7010, 0x8210, 0x910a, 0x0210, 0x0108, 0x0cd8, 0xaa8a, 0xa26a,
+	0x0005, 0x00f6, 0x00d6, 0x0036, 0x2079, 0x0300, 0x781b, 0x0200,
+	0x7818, 0xd094, 0x1dd8, 0x781b, 0x0202, 0xa001, 0xa001, 0x7818,
+	0xd094, 0x1da0, 0xb8ac, 0x9005, 0x01b8, 0x2068, 0x2079, 0x0000,
+	0x2c08, 0x911e, 0x1118, 0x680c, 0xb8ae, 0x0060, 0x9106, 0x0140,
+	0x2d00, 0x2078, 0x680c, 0x9005, 0x090c, 0x0d7d, 0x2068, 0x0cb0,
+	0x6b0c, 0x7b0e, 0x600f, 0x0000, 0x2079, 0x0300, 0x781b, 0x0200,
+	0x003e, 0x00de, 0x00fe, 0x0005, 0x00e6, 0x00d6, 0x0096, 0x00c6,
+	0x0036, 0x0126, 0x2091, 0x8000, 0x0156, 0x20a9, 0x01ff, 0x2071,
+	0x0300, 0x701b, 0x0200, 0x7018, 0xd094, 0x0110, 0x1f04, 0x8f41,
+	0x701b, 0x0202, 0xa001, 0xa001, 0x7018, 0xd094, 0x1d90, 0xb8ac,
+	0x9005, 0x01d0, 0x2060, 0x600c, 0xb8ae, 0x6003, 0x0004, 0x601b,
+	0x0000, 0x6013, 0x0000, 0x601f, 0x0101, 0x6014, 0x2048, 0xa88b,
+	0x0000, 0xa8a8, 0xa8ab, 0x0000, 0x904d, 0x090c, 0x0d7d, 0x080c,
+	0x106c, 0x080c, 0x8afc, 0x0c18, 0x2071, 0x0300, 0x701b, 0x0200,
+	0x015e, 0x012e, 0x003e, 0x00ce, 0x009e, 0x00de, 0x00ee, 0x0005,
+	0x00c6, 0x00b6, 0x0016, 0x0006, 0x0156, 0x080c, 0x25fb, 0x015e,
+	0x11b0, 0x080c, 0x65c4, 0x190c, 0x0d7d, 0x000e, 0x001e, 0xb912,
+	0xb816, 0x080c, 0xab97, 0x0140, 0x2b00, 0x6012, 0x6023, 0x0001,
+	0x2009, 0x0001, 0x080c, 0xac8c, 0x00be, 0x00ce, 0x0005, 0x000e,
+	0x001e, 0x0cd0, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0d7d,
+	0x0013, 0x006e, 0x0005, 0x8fb3, 0x8fb3, 0x8fb3, 0x8fb5, 0x8ffe,
+	0x8fb3, 0x8fb3, 0x8fb3, 0x9061, 0x8fb3, 0x9099, 0x8fb3, 0x8fb3,
+	0x8fb3, 0x8fb3, 0x8fb3, 0x080c, 0x0d7d, 0x9182, 0x0040, 0x0002,
+	0x8fc8, 0x8fc8, 0x8fc8, 0x8fc8, 0x8fc8, 0x8fc8, 0x8fc8, 0x8fc8,
+	0x8fc8, 0x8fca, 0x8fdb, 0x8fc8, 0x8fc8, 0x8fc8, 0x8fc8, 0x8fec,
+	0x080c, 0x0d7d, 0x0096, 0x6114, 0x2148, 0xa87b, 0x0000, 0x6010,
+	0x00b6, 0x2058, 0xb8bb, 0x0500, 0x00be, 0x080c, 0x6b80, 0x080c,
+	0xabed, 0x009e, 0x0005, 0x080c, 0x963b, 0x00d6, 0x6114, 0x080c,
+	0xc838, 0x0130, 0x0096, 0x6114, 0x2148, 0x080c, 0x6d80, 0x009e,
+	0x00de, 0x080c, 0xabed, 0x0005, 0x080c, 0x963b, 0x080c, 0x31e7,
+	0x6114, 0x0096, 0x2148, 0x080c, 0xc838, 0x0120, 0xa87b, 0x0029,
+	0x080c, 0x6d80, 0x009e, 0x080c, 0xabed, 0x0005, 0x601b, 0x0000,
+	0x9182, 0x0040, 0x0096, 0x0002, 0x9019, 0x9019, 0x9019, 0x9019,
+	0x9019, 0x9019, 0x9019, 0x9019, 0x901b, 0x9019, 0x9019, 0x9019,
+	0x905d, 0x9019, 0x9019, 0x9019, 0x9019, 0x9019, 0x9019, 0x9021,
+	0x9019, 0x080c, 0x0d7d, 0x6114, 0x2148, 0xa938, 0x918e, 0xffff,
+	0x05e0, 0x00e6, 0x6114, 0x2148, 0x080c, 0x8dd2, 0x0096, 0xa8a8,
+	0x2048, 0x080c, 0x6b18, 0x009e, 0xa8ab, 0x0000, 0x6010, 0x9005,
+	0x0128, 0x00b6, 0x2058, 0x080c, 0x8f01, 0x00be, 0xae88, 0x00b6,
+	0x2059, 0x0000, 0x080c, 0x8b05, 0x00be, 0x01e0, 0x2071, 0x193c,
+	0x080c, 0x8b4c, 0x01b8, 0x9086, 0x0001, 0x1128, 0x2001, 0x1946,
+	0x2004, 0x9005, 0x1178, 0x0096, 0x080c, 0x103a, 0x2900, 0x009e,
+	0x0148, 0xa8aa, 0x00f6, 0x2c78, 0x080c, 0x8ac3, 0x00fe, 0x00ee,
+	0x009e, 0x0005, 0x080c, 0x8afc, 0x0cd0, 0x080c, 0x9115, 0x009e,
+	0x0005, 0x9182, 0x0040, 0x0096, 0x0002, 0x9075, 0x9075, 0x9075,
+	0x9077, 0x9075, 0x9075, 0x9075, 0x9097, 0x9075, 0x9075, 0x9075,
+	0x9075, 0x9075, 0x9075, 0x9075, 0x9075, 0x080c, 0x0d7d, 0x6003,
+	0x0003, 0x6106, 0x6014, 0x2048, 0xa8ac, 0xa836, 0xa8b0, 0xa83a,
+	0xa847, 0x0000, 0xa84b, 0x0000, 0xa884, 0x9092, 0x199a, 0x0210,
+	0x2001, 0x1999, 0x8003, 0x8013, 0x8213, 0x9210, 0x621a, 0x080c,
+	0x1bba, 0x2009, 0x8030, 0x080c, 0x9265, 0x009e, 0x0005, 0x080c,
+	0x0d7d, 0x080c, 0x963b, 0x6114, 0x2148, 0xa87b, 0x0000, 0x6010,
+	0x00b6, 0x2058, 0xb8bb, 0x0500, 0x00be, 0x080c, 0x6d80, 0x080c,
+	0xabed, 0x009e, 0x0005, 0x080c, 0xa896, 0x6144, 0xd1fc, 0x0120,
+	0xd1ac, 0x1110, 0x6003, 0x0003, 0x6000, 0x908a, 0x0016, 0x1a0c,
+	0x0d7d, 0x0096, 0x0023, 0x009e, 0x080c, 0xa8b2, 0x0005, 0x90cf,
+	0x90cf, 0x90cf, 0x90d1, 0x90e2, 0x90cf, 0x90cf, 0x90cf, 0x90cf,
+	0x90cf, 0x90cf, 0x90cf, 0x90cf, 0x90cf, 0x90cf, 0x90cf, 0x080c,
+	0x0d7d, 0x080c, 0xaa2a, 0x6114, 0x2148, 0xa87b, 0x0006, 0x6010,
+	0x00b6, 0x2058, 0xb8bb, 0x0500, 0x00be, 0x080c, 0x6d80, 0x080c,
+	0xabed, 0x0005, 0x0491, 0x0005, 0x080c, 0xa896, 0x6000, 0x6144,
+	0xd1fc, 0x0130, 0xd1ac, 0x1120, 0x6003, 0x0003, 0x2009, 0x0003,
+	0x908a, 0x0016, 0x1a0c, 0x0d7d, 0x0096, 0x0033, 0x009e, 0x0106,
+	0x080c, 0xa8b2, 0x010e, 0x0005, 0x910c, 0x910c, 0x910c, 0x910e,
+	0x9115, 0x910c, 0x910c, 0x910c, 0x910c, 0x910c, 0x910c, 0x910c,
+	0x910c, 0x910c, 0x910c, 0x910c, 0x080c, 0x0d7d, 0x0036, 0x00e6,
+	0x080c, 0xaa2a, 0x00ee, 0x003e, 0x0005, 0x00f6, 0x00e6, 0x601b,
+	0x0000, 0x6014, 0x2048, 0x6010, 0x9005, 0x0128, 0x00b6, 0x2058,
+	0x080c, 0x8f01, 0x00be, 0x2071, 0x193c, 0x080c, 0x8b4c, 0x0160,
+	0x2001, 0x187f, 0x2004, 0xa88a, 0x2031, 0x0000, 0x2c78, 0x080c,
+	0x8ac3, 0x00ee, 0x00fe, 0x0005, 0x0096, 0xa88b, 0x0000, 0xa8a8,
+	0x2048, 0x080c, 0x106c, 0x009e, 0xa8ab, 0x0000, 0x080c, 0x8afc,
+	0x0c80, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+	0x0000, 0x0000, 0x187a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+	0x0000, 0x0126, 0x2091, 0x8000, 0x0036, 0x0046, 0x20a9, 0x0010,
+	0x9006, 0x8004, 0x8086, 0x818e, 0x1208, 0x9200, 0x1f04, 0x915a,
+	0x8086, 0x818e, 0x004e, 0x003e, 0x012e, 0x0005, 0x0126, 0x2091,
+	0x8000, 0x0076, 0x0156, 0x20a9, 0x0010, 0x9005, 0x01c8, 0x911a,
+	0x12b8, 0x8213, 0x818d, 0x0228, 0x911a, 0x1220, 0x1f04, 0x9171,
+	0x0028, 0x911a, 0x2308, 0x8210, 0x1f04, 0x9171, 0x0006, 0x3200,
+	0x9084, 0xefff, 0x2080, 0x000e, 0x015e, 0x007e, 0x012e, 0x0005,
+	0x0006, 0x3200, 0x9085, 0x1000, 0x0ca8, 0x0126, 0x2091, 0x2800,
+	0x2079, 0x19e7, 0x012e, 0x00d6, 0x2069, 0x19e7, 0x6803, 0x0005,
+	0x0156, 0x0146, 0x01d6, 0x20e9, 0x0000, 0x2069, 0x0200, 0x080c,
+	0xa690, 0x04a9, 0x080c, 0xa67b, 0x0491, 0x080c, 0xa67e, 0x0479,
+	0x080c, 0xa681, 0x0461, 0x080c, 0xa684, 0x0449, 0x080c, 0xa687,
+	0x0431, 0x080c, 0xa68a, 0x0419, 0x080c, 0xa68d, 0x0401, 0x01de,
+	0x014e, 0x015e, 0x6857, 0x0000, 0x00f6, 0x2079, 0x0380, 0x00f9,
+	0x7807, 0x0003, 0x7803, 0x0000, 0x7803, 0x0001, 0x2069, 0x0004,
+	0x2d04, 0x9084, 0xfffe, 0x9085, 0x8000, 0x206a, 0x2069, 0x0100,
+	0x6828, 0x9084, 0xfffc, 0x682a, 0x00fe, 0x00de, 0x0005, 0x20a9,
+	0x0020, 0x20a1, 0x0240, 0x2001, 0x0000, 0x4004, 0x0005, 0x00c6,
+	0x7803, 0x0000, 0x9006, 0x7827, 0x0030, 0x782b, 0x0400, 0x7827,
+	0x0031, 0x782b, 0x1aef, 0x781f, 0xff00, 0x781b, 0xff00, 0x2061,
+	0x1ae4, 0x602f, 0x19e7, 0x6033, 0x1800, 0x6037, 0x1a03, 0x603b,
+	0x1e55, 0x603f, 0x1e65, 0x6042, 0x6047, 0x1aba, 0x00ce, 0x0005,
+	0x2001, 0x0382, 0x2004, 0x9084, 0x0007, 0x9086, 0x0001, 0x01b0,
+	0x00c6, 0x6146, 0x600f, 0x0000, 0x2c08, 0x2061, 0x19e7, 0x602c,
+	0x8000, 0x602e, 0x601c, 0x9005, 0x0130, 0x9080, 0x0003, 0x2102,
+	0x611e, 0x00ce, 0x0005, 0x6122, 0x611e, 0x0cd8, 0x6146, 0x2c08,
+	0x2001, 0x0012, 0x080c, 0xa887, 0x0005, 0x0016, 0x2009, 0x8020,
+	0x6146, 0x2c08, 0x2001, 0x0382, 0x2004, 0x9084, 0x0007, 0x9086,
+	0x0001, 0x1128, 0x2001, 0x0019, 0x080c, 0xa887, 0x0088, 0x00c6,
+	0x2061, 0x19e7, 0x602c, 0x8000, 0x602e, 0x600c, 0x9005, 0x0128,
+	0x9080, 0x0003, 0x2102, 0x610e, 0x0010, 0x6112, 0x610e, 0x00ce,
+	0x001e, 0x0005, 0x2001, 0x0382, 0x2004, 0x9084, 0x0007, 0x9086,
+	0x0001, 0x0198, 0x00c6, 0x6146, 0x600f, 0x0000, 0x2c08, 0x2061,
+	0x19e7, 0x6044, 0x9005, 0x0130, 0x9080, 0x0003, 0x2102, 0x6146,
+	0x00ce, 0x0005, 0x614a, 0x6146, 0x0cd8, 0x6146, 0x600f, 0x0000,
+	0x2c08, 0x2001, 0x0013, 0x080c, 0xa887, 0x0005, 0x6044, 0xd0dc,
+	0x0128, 0x9006, 0x7007, 0x0000, 0x700a, 0x7032, 0x0005, 0x00f6,
+	0x00e6, 0x00d6, 0x00c6, 0x00b6, 0x0096, 0x0076, 0x0066, 0x0056,
+	0x0036, 0x0026, 0x0016, 0x0006, 0x0126, 0x902e, 0x2071, 0x19e7,
+	0x7648, 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff, 0x0904, 0x92f0,
+	0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904, 0x92eb, 0x87ff, 0x0120,
+	0x605c, 0x9106, 0x1904, 0x92eb, 0x704c, 0x9c06, 0x1178, 0x0036,
+	0x2019, 0x0001, 0x080c, 0xa118, 0x703f, 0x0000, 0x9006, 0x704e,
+	0x706a, 0x7052, 0x706e, 0x003e, 0x2029, 0x0001, 0x080c, 0x926e,
+	0x7048, 0x9c36, 0x1110, 0x660c, 0x764a, 0x7044, 0x9c36, 0x1140,
+	0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7046, 0x0010, 0x7047, 0x0000,
+	0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678,
+	0x600f, 0x0000, 0x080c, 0xc838, 0x01c8, 0x6014, 0x2048, 0x6020,
+	0x9086, 0x0003, 0x1560, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000,
+	0x0016, 0x0036, 0x0076, 0x080c, 0xcb36, 0x080c, 0xe621, 0x080c,
+	0x6d80, 0x007e, 0x003e, 0x001e, 0x080c, 0xca27, 0x080c, 0xac28,
+	0x00ce, 0x0804, 0x928d, 0x2c78, 0x600c, 0x2060, 0x0804, 0x928d,
+	0x012e, 0x000e, 0x001e, 0x002e, 0x003e, 0x005e, 0x006e, 0x007e,
+	0x009e, 0x00be, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x6020,
+	0x9086, 0x0006, 0x1158, 0x0016, 0x0036, 0x0076, 0x080c, 0xe621,
+	0x080c, 0xe26c, 0x007e, 0x003e, 0x001e, 0x08c0, 0x6020, 0x9086,
+	0x0009, 0x1168, 0xa87b, 0x0006, 0x0016, 0x0036, 0x0076, 0x080c,
+	0x6d80, 0x080c, 0xabed, 0x007e, 0x003e, 0x001e, 0x0848, 0x6020,
+	0x9086, 0x000a, 0x0904, 0x92d5, 0x0804, 0x92d3, 0x0006, 0x0066,
+	0x0096, 0x00c6, 0x00d6, 0x00f6, 0x9036, 0x0126, 0x2091, 0x8000,
+	0x2079, 0x19e7, 0x7848, 0x9065, 0x0904, 0x9385, 0x600c, 0x0006,
+	0x600f, 0x0000, 0x784c, 0x9c06, 0x11a0, 0x0036, 0x2019, 0x0001,
+	0x080c, 0xa118, 0x783f, 0x0000, 0x901e, 0x7b4e, 0x7b6a, 0x7b52,
+	0x7b6e, 0x003e, 0x000e, 0x9005, 0x1118, 0x600c, 0x600f, 0x0000,
+	0x0006, 0x00e6, 0x2f70, 0x080c, 0x926e, 0x00ee, 0x080c, 0xc838,
+	0x0520, 0x6014, 0x2048, 0x6020, 0x9086, 0x0003, 0x1580, 0x3e08,
+	0x918e, 0x0002, 0x1188, 0x6010, 0x9005, 0x0170, 0x00b6, 0x2058,
+	0xb800, 0x00be, 0xd0bc, 0x0140, 0x6048, 0x9005, 0x1198, 0x2001,
+	0x1988, 0x2004, 0x604a, 0x0070, 0xa867, 0x0103, 0xab7a, 0xa877,
+	0x0000, 0x080c, 0x6d74, 0x080c, 0xca27, 0x6044, 0xc0fc, 0x6046,
+	0x080c, 0xac28, 0x000e, 0x0804, 0x9333, 0x7e4a, 0x7e46, 0x012e,
+	0x00fe, 0x00de, 0x00ce, 0x009e, 0x006e, 0x000e, 0x0005, 0x6020,
+	0x9086, 0x0006, 0x1118, 0x080c, 0xe26c, 0x0c38, 0x6020, 0x9086,
+	0x0009, 0x1130, 0xab7a, 0x080c, 0x6d80, 0x080c, 0xabed, 0x0c10,
+	0x6020, 0x9086, 0x000a, 0x0990, 0x0878, 0x0016, 0x0026, 0x0086,
+	0x9046, 0x00a9, 0x080c, 0x9496, 0x008e, 0x002e, 0x001e, 0x0005,
+	0x00f6, 0x0126, 0x2079, 0x19e7, 0x2091, 0x8000, 0x080c, 0x94df,
+	0x080c, 0x9573, 0x080c, 0x67b2, 0x012e, 0x00fe, 0x0005, 0x00b6,
+	0x0096, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0016, 0x0006,
+	0x0126, 0x2091, 0x8000, 0x2071, 0x19e7, 0x7620, 0x2660, 0x2678,
+	0x8cff, 0x0904, 0x945b, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904,
+	0x9456, 0x88ff, 0x0120, 0x605c, 0x9106, 0x1904, 0x9456, 0x7030,
+	0x9c06, 0x1570, 0x2069, 0x0100, 0x6820, 0xd0a4, 0x1508, 0x080c,
+	0x86f6, 0x080c, 0x9e32, 0x68c3, 0x0000, 0x080c, 0xa338, 0x7033,
 	0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138,
 	0x2001, 0x0100, 0x080c, 0x2a0a, 0x9006, 0x080c, 0x2a0a, 0x2069,
-	0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0058,
-	0x080c, 0x69f3, 0x1538, 0x6003, 0x0009, 0x630a, 0x7808, 0xc0ad,
-	0x780a, 0x2c30, 0x00f8, 0x6014, 0x2048, 0x080c, 0xc812, 0x01b0,
-	0x6020, 0x9086, 0x0003, 0x1508, 0x080c, 0xca29, 0x1118, 0x080c,
-	0xb591, 0x0060, 0x080c, 0x69f3, 0x1168, 0xa867, 0x0103, 0xab7a,
-	0xa877, 0x0000, 0x080c, 0x6d70, 0x080c, 0xca03, 0x080c, 0xac04,
-	0x080c, 0xa1ea, 0x000e, 0x0804, 0x94b5, 0x7e22, 0x7e1e, 0x00de,
-	0x00ce, 0x006e, 0x000e, 0x009e, 0x0005, 0x6020, 0x9086, 0x0006,
-	0x1118, 0x080c, 0xe241, 0x0c50, 0x080c, 0xb591, 0x6020, 0x9086,
-	0x0002, 0x1150, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x0990,
-	0x9086, 0x008b, 0x0978, 0x08d0, 0x6020, 0x9086, 0x0005, 0x19b0,
-	0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x0d18, 0x9086, 0x008b,
-	0x0d00, 0x0860, 0x0006, 0x0096, 0x00b6, 0x00c6, 0x0066, 0x9036,
-	0x7828, 0x9065, 0x0510, 0x6010, 0x2058, 0x600c, 0x0006, 0x3e08,
-	0x918e, 0x0002, 0x1118, 0xb800, 0xd0bc, 0x11a8, 0x6043, 0xffff,
-	0x080c, 0xaa51, 0x0180, 0x610c, 0x080c, 0x9f7e, 0x6014, 0x2048,
-	0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x6d70, 0x080c,
-	0xac04, 0x000e, 0x08f0, 0x2c30, 0x0ce0, 0x006e, 0x00ce, 0x00be,
-	0x009e, 0x000e, 0x0005, 0x00e6, 0x00d6, 0x0096, 0x0066, 0x080c,
-	0x6134, 0x11b0, 0x2071, 0x19e7, 0x7030, 0x9080, 0x0005, 0x2004,
-	0x904d, 0x0170, 0xa878, 0x9606, 0x1158, 0x2071, 0x19e7, 0x7030,
-	0x9035, 0x0130, 0x9080, 0x0005, 0x2004, 0x9906, 0x1108, 0x0029,
-	0x006e, 0x009e, 0x00de, 0x00ee, 0x0005, 0x00c6, 0x2660, 0x6043,
-	0xffff, 0x080c, 0xaa51, 0x0178, 0x080c, 0x9f7e, 0x6014, 0x2048,
-	0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0xcb12, 0x080c,
-	0x6d70, 0x080c, 0xac04, 0x00ce, 0x0005, 0x00b6, 0x00e6, 0x00c6,
-	0x080c, 0xa8d0, 0x0106, 0x190c, 0xa872, 0x2071, 0x0101, 0x2e04,
-	0xc0c4, 0x2072, 0x6044, 0xd0fc, 0x1138, 0x010e, 0x190c, 0xa88e,
-	0x00ce, 0x00ee, 0x00be, 0x0005, 0x2071, 0x19e7, 0x7030, 0x9005,
-	0x0da0, 0x9c06, 0x190c, 0x0d7d, 0x7036, 0x080c, 0x86c5, 0x7004,
-	0x9084, 0x0007, 0x0002, 0x95dd, 0x95df, 0x95e6, 0x95f0, 0x95fe,
-	0x95dd, 0x95e6, 0x95db, 0x080c, 0x0d7d, 0x0428, 0x0005, 0x080c,
-	0xaa3c, 0x7007, 0x0000, 0x7033, 0x0000, 0x00e8, 0x0066, 0x9036,
-	0x080c, 0x9f7e, 0x006e, 0x7007, 0x0000, 0x7033, 0x0000, 0x0098,
-	0x080c, 0xaa27, 0x0140, 0x080c, 0xaa3c, 0x0128, 0x0066, 0x9036,
-	0x080c, 0x9f7e, 0x006e, 0x7033, 0x0000, 0x0028, 0x080c, 0xaa27,
-	0x080c, 0xa314, 0x0000, 0x010e, 0x190c, 0xa88e, 0x00ce, 0x00ee,
-	0x00be, 0x0005, 0x00d6, 0x00c6, 0x080c, 0xa8d0, 0x0106, 0x190c,
-	0xa872, 0x6044, 0xd0fc, 0x1130, 0x010e, 0x190c, 0xa88e, 0x00ce,
-	0x00de, 0x0005, 0x2069, 0x19e7, 0x684c, 0x9005, 0x0da8, 0x9c06,
-	0x190c, 0x0d7d, 0x6852, 0x00e6, 0x2d70, 0x080c, 0x923d, 0x00ee,
-	0x080c, 0x86d2, 0x0016, 0x2009, 0x0040, 0x080c, 0x21b0, 0x001e,
-	0x683c, 0x9084, 0x0003, 0x0002, 0x963a, 0x963b, 0x9659, 0x9638,
-	0x080c, 0x0d7d, 0x0460, 0x6868, 0x9086, 0x0001, 0x0190, 0x600c,
-	0x9015, 0x0160, 0x6a4a, 0x600f, 0x0000, 0x6044, 0xc0fc, 0x6046,
-	0x9006, 0x7042, 0x684e, 0x683f, 0x0000, 0x00c8, 0x684a, 0x6846,
-	0x0ca0, 0x686b, 0x0000, 0x6848, 0x9065, 0x0d78, 0x6003, 0x0002,
-	0x0c60, 0x9006, 0x686a, 0x6852, 0x686e, 0x600c, 0x9015, 0x0120,
-	0x6a4a, 0x600f, 0x0000, 0x0018, 0x684e, 0x684a, 0x6846, 0x684f,
-	0x0000, 0x010e, 0x190c, 0xa88e, 0x00ce, 0x00de, 0x0005, 0x0005,
-	0x6020, 0x9084, 0x000f, 0x000b, 0x0005, 0x9685, 0x9688, 0x9af6,
-	0x9b85, 0x9688, 0x9af6, 0x9b85, 0x9685, 0x9688, 0x9685, 0x9685,
-	0x9685, 0x9685, 0x9685, 0x9685, 0x9685, 0x080c, 0x95ad, 0x0005,
-	0x00b6, 0x0156, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6, 0x00d6,
-	0x00e6, 0x00f6, 0x2069, 0x0200, 0x2071, 0x0240, 0x6004, 0x908a,
-	0x0053, 0x1a0c, 0x0d7d, 0x6110, 0x2158, 0xb984, 0x2c78, 0x2061,
-	0x0100, 0x619a, 0x908a, 0x0040, 0x1a04, 0x96f4, 0x005b, 0x00fe,
-	0x00ee, 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e,
-	0x00be, 0x0005, 0x9879, 0x98b4, 0x98dd, 0x9985, 0x99a7, 0x99ad,
-	0x99ba, 0x99c2, 0x99ce, 0x99d4, 0x99e5, 0x99d4, 0x9a3d, 0x99c2,
-	0x9a49, 0x9a4f, 0x99ce, 0x9a4f, 0x9a5b, 0x96f2, 0x96f2, 0x96f2,
-	0x96f2, 0x96f2, 0x96f2, 0x96f2, 0x96f2, 0x96f2, 0x96f2, 0x96f2,
-	0x9f9f, 0x9fc2, 0x9fd3, 0x9ff3, 0xa025, 0x99ba, 0x96f2, 0x99ba,
-	0x99d4, 0x96f2, 0x98dd, 0x9985, 0x96f2, 0xa407, 0x99d4, 0x96f2,
-	0xa423, 0x99d4, 0x96f2, 0x99ce, 0x9873, 0x9715, 0x96f2, 0xa43f,
-	0xa4ac, 0xa58c, 0x96f2, 0xa599, 0x99b7, 0xa5c4, 0x96f2, 0xa02f,
-	0xa5d0, 0x96f2, 0x080c, 0x0d7d, 0x2100, 0x005b, 0x00fe, 0x00ee,
-	0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x00be,
-	0x0005, 0xa670, 0xa722, 0x9713, 0x973c, 0x97e8, 0x97f3, 0x9713,
-	0x99ba, 0x9713, 0x983a, 0x9846, 0x9757, 0x9713, 0x9772, 0x97a6,
-	0xaaa7, 0xaaec, 0x99d4, 0x080c, 0x0d7d, 0x00d6, 0x0096, 0x080c,
-	0x9a6e, 0x7003, 0x2414, 0x7007, 0x0018, 0x700b, 0x0800, 0x7814,
-	0x2048, 0xa83c, 0x700e, 0xa850, 0x7022, 0xa854, 0x7026, 0x60c3,
-	0x0018, 0x080c, 0x9dde, 0x009e, 0x00de, 0x0005, 0x7810, 0x00b6,
-	0x2058, 0xb8a0, 0x00be, 0x080c, 0xab33, 0x1118, 0x9084, 0xff80,
-	0x0110, 0x9085, 0x0001, 0x0005, 0x00d6, 0x0096, 0x080c, 0x9a6e,
-	0x7003, 0x0500, 0x7814, 0x2048, 0xa874, 0x700a, 0xa878, 0x700e,
-	0xa87c, 0x7012, 0xa880, 0x7016, 0xa884, 0x701a, 0xa888, 0x701e,
-	0x60c3, 0x0010, 0x080c, 0x9dde, 0x009e, 0x00de, 0x0005, 0x00d6,
-	0x0096, 0x080c, 0x9a6e, 0x7003, 0x0500, 0x7814, 0x2048, 0xa8cc,
-	0x700a, 0xa8d0, 0x700e, 0xa8d4, 0x7012, 0xa8d8, 0x7016, 0xa8dc,
-	0x701a, 0xa8e0, 0x701e, 0x60c3, 0x0010, 0x080c, 0x9dde, 0x009e,
-	0x00de, 0x0005, 0x00d6, 0x0096, 0x0126, 0x2091, 0x8000, 0x080c,
-	0x9a6e, 0x20e9, 0x0000, 0x2001, 0x19a3, 0x2003, 0x0000, 0x7814,
-	0x2048, 0xa814, 0x8003, 0x60c2, 0xa830, 0x20a8, 0xa860, 0x20e0,
-	0xa85c, 0x9080, 0x001b, 0x2098, 0x2001, 0x19a3, 0x0016, 0x200c,
-	0x2001, 0x0001, 0x080c, 0x2195, 0x080c, 0xd58c, 0x9006, 0x080c,
-	0x2195, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c28, 0x04d9,
-	0x080c, 0x9dde, 0x012e, 0x009e, 0x00de, 0x0005, 0x00d6, 0x0096,
-	0x0126, 0x2091, 0x8000, 0x080c, 0x9ab9, 0x20e9, 0x0000, 0x2001,
-	0x19a3, 0x2003, 0x0000, 0x7814, 0x2048, 0xa86f, 0x0200, 0xa873,
-	0x0000, 0xa814, 0x8003, 0x60c2, 0xa830, 0x20a8, 0xa860, 0x20e0,
-	0xa85c, 0x9080, 0x001b, 0x2098, 0x2001, 0x19a3, 0x0016, 0x200c,
-	0x080c, 0xd58c, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c60,
-	0x0051, 0x7814, 0x2048, 0x080c, 0x0fec, 0x080c, 0x9dde, 0x012e,
-	0x009e, 0x00de, 0x0005, 0x60c0, 0x8004, 0x9084, 0x0003, 0x9005,
-	0x0130, 0x9082, 0x0004, 0x20a3, 0x0000, 0x8000, 0x1de0, 0x0005,
-	0x080c, 0x9a6e, 0x7003, 0x7800, 0x7808, 0x8007, 0x700a, 0x60c3,
-	0x0008, 0x0804, 0x9dde, 0x00d6, 0x00e6, 0x080c, 0x9ab9, 0x7814,
-	0x9084, 0xff00, 0x2073, 0x0200, 0x8e70, 0x8e70, 0x9095, 0x0010,
-	0x2272, 0x8e70, 0x2073, 0x0034, 0x8e70, 0x2069, 0x1805, 0x20a9,
-	0x0004, 0x2d76, 0x8d68, 0x8e70, 0x1f04, 0x9809, 0x2069, 0x1801,
-	0x20a9, 0x0004, 0x2d76, 0x8d68, 0x8e70, 0x1f04, 0x9812, 0x2069,
-	0x19b3, 0x9086, 0xdf00, 0x0110, 0x2069, 0x19cd, 0x20a9, 0x001a,
-	0x9e86, 0x0260, 0x1148, 0x00c6, 0x2061, 0x0200, 0x6010, 0x8000,
-	0x6012, 0x00ce, 0x2071, 0x0240, 0x2d04, 0x8007, 0x2072, 0x8d68,
-	0x8e70, 0x1f04, 0x9820, 0x60c3, 0x004c, 0x080c, 0x9dde, 0x00ee,
-	0x00de, 0x0005, 0x080c, 0x9a6e, 0x7003, 0x6300, 0x7007, 0x0028,
-	0x7808, 0x700e, 0x60c3, 0x0008, 0x0804, 0x9dde, 0x00d6, 0x0026,
-	0x0016, 0x080c, 0x9ab9, 0x7003, 0x0200, 0x7814, 0x700e, 0x00e6,
-	0x9ef0, 0x0004, 0x2009, 0x0001, 0x2011, 0x000c, 0x2069, 0x1923,
-	0x6810, 0xd084, 0x1148, 0x2073, 0x0500, 0x8e70, 0x2073, 0x0000,
-	0x8e70, 0x8108, 0x9290, 0x0004, 0x2073, 0x0800, 0x8e70, 0x2073,
-	0x0000, 0x00ee, 0x7206, 0x710a, 0x62c2, 0x080c, 0x9dde, 0x001e,
-	0x002e, 0x00de, 0x0005, 0x2001, 0x1818, 0x2004, 0x609a, 0x0804,
-	0x9dde, 0x080c, 0x9a6e, 0x7003, 0x5200, 0x2069, 0x1847, 0x6804,
-	0xd084, 0x0130, 0x6828, 0x0016, 0x080c, 0x262e, 0x710e, 0x001e,
-	0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000,
-	0x20a1, 0x0250, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, 0x20a1,
-	0x0254, 0x4003, 0x080c, 0xab33, 0x1120, 0xb8a0, 0x9082, 0x007f,
-	0x0248, 0x2001, 0x181f, 0x2004, 0x7032, 0x2001, 0x1820, 0x2004,
-	0x7036, 0x0030, 0x2001, 0x1818, 0x2004, 0x9084, 0x00ff, 0x7036,
-	0x60c3, 0x001c, 0x0804, 0x9dde, 0x080c, 0x9a6e, 0x7003, 0x0500,
-	0x080c, 0xab33, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001,
-	0x181f, 0x2004, 0x700a, 0x2001, 0x1820, 0x2004, 0x700e, 0x0030,
-	0x2001, 0x1818, 0x2004, 0x9084, 0x00ff, 0x700e, 0x20a9, 0x0004,
-	0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1, 0x0250,
-	0x4003, 0x60c3, 0x0010, 0x0804, 0x9dde, 0x080c, 0x9a6e, 0x9006,
-	0x080c, 0x6a25, 0xb8a0, 0x9086, 0x007e, 0x1130, 0x7003, 0x0400,
-	0x620c, 0xc2b4, 0x620e, 0x0058, 0x7814, 0x0096, 0x904d, 0x0120,
-	0x9006, 0xa89a, 0xa8a6, 0xa8aa, 0x009e, 0x7003, 0x0300, 0xb8a0,
-	0x9086, 0x007e, 0x1904, 0x994c, 0x00d6, 0x2069, 0x196c, 0x2001,
-	0x1837, 0x2004, 0xd0a4, 0x0188, 0x6800, 0x700a, 0x6808, 0x9084,
-	0x2000, 0x7012, 0x080c, 0xab4a, 0x680c, 0x7016, 0x701f, 0x2710,
-	0x6818, 0x7022, 0x681c, 0x7026, 0x0090, 0x6800, 0x700a, 0x6804,
-	0x700e, 0x6808, 0x080c, 0x74d5, 0x1118, 0x9084, 0x37ff, 0x0010,
-	0x9084, 0x3fff, 0x7012, 0x080c, 0xab4a, 0x680c, 0x7016, 0x00de,
-	0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000,
-	0x20a1, 0x0256, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, 0x20a1,
-	0x025a, 0x4003, 0x00d6, 0x080c, 0xa657, 0x2069, 0x1974, 0x2071,
-	0x024e, 0x6800, 0xc0dd, 0x7002, 0x080c, 0x56d7, 0xd0e4, 0x0110,
-	0x680c, 0x700e, 0x00de, 0x04a8, 0x2001, 0x1837, 0x2004, 0xd0a4,
-	0x0170, 0x0016, 0x2001, 0x196d, 0x200c, 0x60e0, 0x9106, 0x0130,
-	0x2100, 0x60e3, 0x0000, 0x080c, 0x266f, 0x61e2, 0x001e, 0x20e1,
-	0x0001, 0x2099, 0x196c, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x20a9,
-	0x0008, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1805, 0x20a1, 0x0256,
-	0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, 0x20a1, 0x025a, 0x4003,
-	0x080c, 0xa657, 0x20a1, 0x024e, 0x20a9, 0x0008, 0x2099, 0x1974,
-	0x4003, 0x60c3, 0x0074, 0x0804, 0x9dde, 0x080c, 0x9a6e, 0x7003,
-	0x2010, 0x7007, 0x0014, 0x700b, 0x0800, 0x700f, 0x2000, 0x9006,
-	0x00f6, 0x2079, 0x1847, 0x7904, 0x00fe, 0xd1ac, 0x1110, 0x9085,
-	0x0020, 0xd1a4, 0x0110, 0x9085, 0x0010, 0x9085, 0x0002, 0x00d6,
-	0x0804, 0x9a1e, 0x7026, 0x60c3, 0x0014, 0x0804, 0x9dde, 0x080c,
-	0x9a6e, 0x7003, 0x5000, 0x0804, 0x98f7, 0x080c, 0x9a6e, 0x7003,
-	0x2110, 0x7007, 0x0014, 0x60c3, 0x0014, 0x0804, 0x9dde, 0x080c,
-	0x9ab0, 0x0010, 0x080c, 0x9ab9, 0x7003, 0x0200, 0x60c3, 0x0004,
-	0x0804, 0x9dde, 0x080c, 0x9ab9, 0x7003, 0x0100, 0x700b, 0x0003,
-	0x700f, 0x2a00, 0x60c3, 0x0008, 0x0804, 0x9dde, 0x080c, 0x9ab9,
-	0x7003, 0x0200, 0x0804, 0x98f7, 0x080c, 0x9ab9, 0x7003, 0x0100,
-	0x782c, 0x9005, 0x0110, 0x700a, 0x0010, 0x700b, 0x0003, 0x7814,
-	0x700e, 0x60c3, 0x0008, 0x0804, 0x9dde, 0x00d6, 0x080c, 0x9ab9,
-	0x7003, 0x0210, 0x7007, 0x0014, 0x700b, 0x0800, 0xb894, 0x9086,
-	0x0014, 0x1198, 0xb99c, 0x9184, 0x0030, 0x0190, 0xb998, 0x9184,
-	0xc000, 0x1140, 0xd1ec, 0x0118, 0x700f, 0x2100, 0x0058, 0x700f,
-	0x0100, 0x0040, 0x700f, 0x0400, 0x0028, 0x700f, 0x0700, 0x0010,
-	0x700f, 0x0800, 0x00f6, 0x2079, 0x1847, 0x7904, 0x00fe, 0xd1ac,
-	0x1110, 0x9085, 0x0020, 0xd1a4, 0x0110, 0x9085, 0x0010, 0x2009,
-	0x1869, 0x210c, 0xd184, 0x1110, 0x9085, 0x0002, 0x0026, 0x2009,
-	0x1867, 0x210c, 0xd1e4, 0x0150, 0xc0c5, 0xbad4, 0xd28c, 0x1108,
-	0xc0cd, 0x9094, 0x0030, 0x9296, 0x0010, 0x0140, 0xd1ec, 0x0130,
-	0x9094, 0x0030, 0x9296, 0x0010, 0x0108, 0xc0bd, 0x002e, 0x7026,
-	0x60c3, 0x0014, 0x00de, 0x0804, 0x9dde, 0x080c, 0x9ab9, 0x7003,
-	0x0210, 0x7007, 0x0014, 0x700f, 0x0100, 0x60c3, 0x0014, 0x0804,
-	0x9dde, 0x080c, 0x9ab9, 0x7003, 0x0200, 0x0804, 0x987d, 0x080c,
-	0x9ab9, 0x7003, 0x0100, 0x700b, 0x0003, 0x700f, 0x2a00, 0x60c3,
-	0x0008, 0x0804, 0x9dde, 0x080c, 0x9ab9, 0x7003, 0x0100, 0x700b,
-	0x000b, 0x60c3, 0x0008, 0x0804, 0x9dde, 0x0026, 0x00d6, 0x0036,
-	0x0046, 0x2019, 0x3200, 0x2021, 0x0800, 0x0040, 0x0026, 0x00d6,
-	0x0036, 0x0046, 0x2019, 0x2200, 0x2021, 0x0100, 0x080c, 0xa66c,
-	0xb810, 0x9305, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x687c,
-	0x700a, 0x6880, 0x700e, 0x9485, 0x0029, 0x7012, 0x004e, 0x003e,
-	0x00de, 0x080c, 0x9dd2, 0x721a, 0x9f95, 0x0000, 0x7222, 0x7027,
-	0xffff, 0x2071, 0x024c, 0x002e, 0x0005, 0x0026, 0x080c, 0xa66c,
-	0x7003, 0x02ff, 0x7007, 0xfffc, 0x00d6, 0x2069, 0x1800, 0x687c,
-	0x700a, 0x6880, 0x700e, 0x00de, 0x7013, 0x2029, 0x0c10, 0x7003,
-	0x0100, 0x7007, 0x0000, 0x700b, 0xfc02, 0x700f, 0x0000, 0x0005,
-	0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x3300, 0x2021, 0x0800,
-	0x0040, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x2300, 0x2021,
-	0x0100, 0x080c, 0xa66c, 0xb810, 0x9305, 0x7002, 0xb814, 0x7006,
-	0x2069, 0x1800, 0xb810, 0x9005, 0x1140, 0xb814, 0x9005, 0x1128,
-	0x700b, 0x00ff, 0x700f, 0xfffe, 0x0020, 0x687c, 0x700a, 0x6880,
-	0x700e, 0x0000, 0x9485, 0x0098, 0x7012, 0x004e, 0x003e, 0x00de,
-	0x080c, 0x9dd2, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x2071,
-	0x024c, 0x002e, 0x0005, 0x080c, 0x9dd2, 0x721a, 0x7a08, 0x7222,
-	0x7814, 0x7026, 0x2071, 0x024c, 0x002e, 0x0005, 0x00b6, 0x00c6,
+	0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0040,
+	0x7008, 0xc0ad, 0x700a, 0x6003, 0x0009, 0x630a, 0x0804, 0x9456,
+	0x7020, 0x9c36, 0x1110, 0x660c, 0x7622, 0x701c, 0x9c36, 0x1140,
+	0x2c00, 0x9f36, 0x0118, 0x2f00, 0x701e, 0x0010, 0x701f, 0x0000,
+	0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678,
+	0x600f, 0x0000, 0x6044, 0xc0fc, 0x6046, 0x6014, 0x2048, 0x080c,
+	0xc838, 0x01e8, 0x6020, 0x9086, 0x0003, 0x1580, 0x080c, 0xca4d,
+	0x1118, 0x080c, 0xb5b5, 0x0098, 0xa867, 0x0103, 0xab7a, 0xa877,
+	0x0000, 0x0016, 0x0036, 0x0086, 0x080c, 0xcb36, 0x080c, 0xe621,
+	0x080c, 0x6d80, 0x008e, 0x003e, 0x001e, 0x080c, 0xca27, 0x080c,
+	0xac28, 0x080c, 0xa20e, 0x00ce, 0x0804, 0x93d0, 0x2c78, 0x600c,
+	0x2060, 0x0804, 0x93d0, 0x012e, 0x000e, 0x001e, 0x006e, 0x00ce,
+	0x00de, 0x00ee, 0x00fe, 0x009e, 0x00be, 0x0005, 0x6020, 0x9086,
+	0x0006, 0x1158, 0x0016, 0x0036, 0x0086, 0x080c, 0xe621, 0x080c,
+	0xe26c, 0x008e, 0x003e, 0x001e, 0x08d0, 0x080c, 0xb5b5, 0x6020,
+	0x9086, 0x0002, 0x1160, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e,
+	0x0904, 0x943c, 0x9086, 0x008b, 0x0904, 0x943c, 0x0840, 0x6020,
+	0x9086, 0x0005, 0x1920, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e,
+	0x09c8, 0x9086, 0x008b, 0x09b0, 0x0804, 0x944f, 0x0006, 0x00f6,
+	0x00e6, 0x0096, 0x00b6, 0x00c6, 0x0066, 0x0016, 0x0126, 0x2091,
+	0x8000, 0x9280, 0x1000, 0x2004, 0x905d, 0x2079, 0x19e7, 0x9036,
+	0x7828, 0x2060, 0x8cff, 0x0538, 0x6010, 0x9b06, 0x1500, 0x6043,
+	0xffff, 0x080c, 0xaa75, 0x01d8, 0x610c, 0x0016, 0x080c, 0x9fa2,
+	0x6014, 0x2048, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x0016,
+	0x0036, 0x0086, 0x080c, 0xcb36, 0x080c, 0xe621, 0x080c, 0x6d80,
+	0x008e, 0x003e, 0x001e, 0x080c, 0xac28, 0x00ce, 0x08d8, 0x2c30,
+	0x600c, 0x2060, 0x08b8, 0x080c, 0x67cf, 0x012e, 0x001e, 0x006e,
+	0x00ce, 0x00be, 0x009e, 0x00ee, 0x00fe, 0x000e, 0x0005, 0x0096,
+	0x0006, 0x0066, 0x00c6, 0x00d6, 0x9036, 0x7820, 0x9065, 0x0904,
+	0x9546, 0x600c, 0x0006, 0x6044, 0xc0fc, 0x6046, 0x600f, 0x0000,
+	0x7830, 0x9c06, 0x1588, 0x2069, 0x0100, 0x6820, 0xd0a4, 0x1508,
+	0x080c, 0x86f6, 0x080c, 0x9e32, 0x68c3, 0x0000, 0x080c, 0xa338,
+	0x7833, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000,
+	0x0138, 0x2001, 0x0100, 0x080c, 0x2a0a, 0x9006, 0x080c, 0x2a0a,
+	0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e,
+	0x0058, 0x080c, 0x6a03, 0x1538, 0x6003, 0x0009, 0x630a, 0x7808,
+	0xc0ad, 0x780a, 0x2c30, 0x00f8, 0x6014, 0x2048, 0x080c, 0xc836,
+	0x01b0, 0x6020, 0x9086, 0x0003, 0x1508, 0x080c, 0xca4d, 0x1118,
+	0x080c, 0xb5b5, 0x0060, 0x080c, 0x6a03, 0x1168, 0xa867, 0x0103,
+	0xab7a, 0xa877, 0x0000, 0x080c, 0x6d80, 0x080c, 0xca27, 0x080c,
+	0xac28, 0x080c, 0xa20e, 0x000e, 0x0804, 0x94e6, 0x7e22, 0x7e1e,
+	0x00de, 0x00ce, 0x006e, 0x000e, 0x009e, 0x0005, 0x6020, 0x9086,
+	0x0006, 0x1118, 0x080c, 0xe26c, 0x0c50, 0x080c, 0xb5b5, 0x6020,
+	0x9086, 0x0002, 0x1150, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e,
+	0x0990, 0x9086, 0x008b, 0x0978, 0x08d0, 0x6020, 0x9086, 0x0005,
+	0x19b0, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x0d18, 0x9086,
+	0x008b, 0x0d00, 0x0860, 0x0006, 0x0096, 0x00b6, 0x00c6, 0x0066,
+	0x9036, 0x7828, 0x9065, 0x0510, 0x6010, 0x2058, 0x600c, 0x0006,
+	0x3e08, 0x918e, 0x0002, 0x1118, 0xb800, 0xd0bc, 0x11a8, 0x6043,
+	0xffff, 0x080c, 0xaa75, 0x0180, 0x610c, 0x080c, 0x9fa2, 0x6014,
+	0x2048, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x6d80,
+	0x080c, 0xac28, 0x000e, 0x08f0, 0x2c30, 0x0ce0, 0x006e, 0x00ce,
+	0x00be, 0x009e, 0x000e, 0x0005, 0x00e6, 0x00d6, 0x0096, 0x0066,
+	0x080c, 0x613b, 0x11b0, 0x2071, 0x19e7, 0x7030, 0x9080, 0x0005,
+	0x2004, 0x904d, 0x0170, 0xa878, 0x9606, 0x1158, 0x2071, 0x19e7,
+	0x7030, 0x9035, 0x0130, 0x9080, 0x0005, 0x2004, 0x9906, 0x1108,
+	0x0029, 0x006e, 0x009e, 0x00de, 0x00ee, 0x0005, 0x00c6, 0x2660,
+	0x6043, 0xffff, 0x080c, 0xaa75, 0x0178, 0x080c, 0x9fa2, 0x6014,
+	0x2048, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0xcb36,
+	0x080c, 0x6d80, 0x080c, 0xac28, 0x00ce, 0x0005, 0x00b6, 0x00e6,
+	0x00c6, 0x080c, 0xa8f4, 0x0106, 0x190c, 0xa896, 0x2071, 0x0101,
+	0x2e04, 0xc0c4, 0x2072, 0x6044, 0xd0fc, 0x1138, 0x010e, 0x190c,
+	0xa8b2, 0x00ce, 0x00ee, 0x00be, 0x0005, 0x2071, 0x19e7, 0x7030,
+	0x9005, 0x0da0, 0x9c06, 0x190c, 0x0d7d, 0x7036, 0x080c, 0x86f6,
+	0x7004, 0x9084, 0x0007, 0x0002, 0x960e, 0x9610, 0x9617, 0x9621,
+	0x962f, 0x960e, 0x9617, 0x960c, 0x080c, 0x0d7d, 0x0428, 0x0005,
+	0x080c, 0xaa60, 0x7007, 0x0000, 0x7033, 0x0000, 0x00e8, 0x0066,
+	0x9036, 0x080c, 0x9fa2, 0x006e, 0x7007, 0x0000, 0x7033, 0x0000,
+	0x0098, 0x080c, 0xaa4b, 0x0140, 0x080c, 0xaa60, 0x0128, 0x0066,
+	0x9036, 0x080c, 0x9fa2, 0x006e, 0x7033, 0x0000, 0x0028, 0x080c,
+	0xaa4b, 0x080c, 0xa338, 0x0000, 0x010e, 0x190c, 0xa8b2, 0x00ce,
+	0x00ee, 0x00be, 0x0005, 0x00d6, 0x00c6, 0x080c, 0xa8f4, 0x0106,
+	0x190c, 0xa896, 0x6044, 0xd0fc, 0x1130, 0x010e, 0x190c, 0xa8b2,
+	0x00ce, 0x00de, 0x0005, 0x2069, 0x19e7, 0x684c, 0x9005, 0x0da8,
+	0x9c06, 0x190c, 0x0d7d, 0x6852, 0x00e6, 0x2d70, 0x080c, 0x926e,
+	0x00ee, 0x080c, 0x8703, 0x0016, 0x2009, 0x0040, 0x080c, 0x21b0,
+	0x001e, 0x683c, 0x9084, 0x0003, 0x0002, 0x966b, 0x966c, 0x968a,
+	0x9669, 0x080c, 0x0d7d, 0x0460, 0x6868, 0x9086, 0x0001, 0x0190,
+	0x600c, 0x9015, 0x0160, 0x6a4a, 0x600f, 0x0000, 0x6044, 0xc0fc,
+	0x6046, 0x9006, 0x7042, 0x684e, 0x683f, 0x0000, 0x00c8, 0x684a,
+	0x6846, 0x0ca0, 0x686b, 0x0000, 0x6848, 0x9065, 0x0d78, 0x6003,
+	0x0002, 0x0c60, 0x9006, 0x686a, 0x6852, 0x686e, 0x600c, 0x9015,
+	0x0120, 0x6a4a, 0x600f, 0x0000, 0x0018, 0x684e, 0x684a, 0x6846,
+	0x684f, 0x0000, 0x010e, 0x190c, 0xa8b2, 0x00ce, 0x00de, 0x0005,
+	0x0005, 0x6020, 0x9084, 0x000f, 0x000b, 0x0005, 0x96b6, 0x96b9,
+	0x9b27, 0x9bb6, 0x96b9, 0x9b27, 0x9bb6, 0x96b6, 0x96b9, 0x96b6,
+	0x96b6, 0x96b6, 0x96b6, 0x96b6, 0x96b6, 0x96b6, 0x080c, 0x95de,
+	0x0005, 0x00b6, 0x0156, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6,
 	0x00d6, 0x00e6, 0x00f6, 0x2069, 0x0200, 0x2071, 0x0240, 0x6004,
-	0x908a, 0x0085, 0x0a0c, 0x0d7d, 0x908a, 0x0092, 0x1a0c, 0x0d7d,
-	0x6110, 0x2158, 0xb984, 0x2c78, 0x2061, 0x0100, 0x619a, 0x9082,
-	0x0085, 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x0005,
-	0x9b27, 0x9b36, 0x9b41, 0x9b25, 0x9b25, 0x9b25, 0x9b27, 0x9b25,
-	0x9b25, 0x9b25, 0x9b25, 0x9b25, 0x9b25, 0x080c, 0x0d7d, 0x0411,
-	0x60c3, 0x0000, 0x0026, 0x080c, 0x2979, 0x0228, 0x2011, 0x0101,
-	0x2204, 0xc0c5, 0x2012, 0x002e, 0x0804, 0x9dde, 0x0431, 0x7808,
-	0x700a, 0x7814, 0x700e, 0x7017, 0xffff, 0x60c3, 0x000c, 0x0804,
-	0x9dde, 0x0479, 0x7003, 0x0003, 0x7007, 0x0300, 0x60c3, 0x0004,
-	0x0804, 0x9dde, 0x0026, 0x080c, 0xa66c, 0xb810, 0x9085, 0x8100,
+	0x908a, 0x0053, 0x1a0c, 0x0d7d, 0x6110, 0x2158, 0xb984, 0x2c78,
+	0x2061, 0x0100, 0x619a, 0x908a, 0x0040, 0x1a04, 0x9725, 0x005b,
+	0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e,
+	0x015e, 0x00be, 0x0005, 0x98aa, 0x98e5, 0x990e, 0x99b6, 0x99d8,
+	0x99de, 0x99eb, 0x99f3, 0x99ff, 0x9a05, 0x9a16, 0x9a05, 0x9a6e,
+	0x99f3, 0x9a7a, 0x9a80, 0x99ff, 0x9a80, 0x9a8c, 0x9723, 0x9723,
+	0x9723, 0x9723, 0x9723, 0x9723, 0x9723, 0x9723, 0x9723, 0x9723,
+	0x9723, 0x9fc3, 0x9fe6, 0x9ff7, 0xa017, 0xa049, 0x99eb, 0x9723,
+	0x99eb, 0x9a05, 0x9723, 0x990e, 0x99b6, 0x9723, 0xa42b, 0x9a05,
+	0x9723, 0xa447, 0x9a05, 0x9723, 0x99ff, 0x98a4, 0x9746, 0x9723,
+	0xa463, 0xa4d0, 0xa5b0, 0x9723, 0xa5bd, 0x99e8, 0xa5e8, 0x9723,
+	0xa053, 0xa5f4, 0x9723, 0x080c, 0x0d7d, 0x2100, 0x005b, 0x00fe,
+	0x00ee, 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e,
+	0x00be, 0x0005, 0xa694, 0xa746, 0x9744, 0x976d, 0x9819, 0x9824,
+	0x9744, 0x99eb, 0x9744, 0x986b, 0x9877, 0x9788, 0x9744, 0x97a3,
+	0x97d7, 0xaacb, 0xab10, 0x9a05, 0x080c, 0x0d7d, 0x00d6, 0x0096,
+	0x080c, 0x9a9f, 0x7003, 0x2414, 0x7007, 0x0018, 0x700b, 0x0800,
+	0x7814, 0x2048, 0xa83c, 0x700e, 0xa850, 0x7022, 0xa854, 0x7026,
+	0x60c3, 0x0018, 0x080c, 0x9e02, 0x009e, 0x00de, 0x0005, 0x7810,
+	0x00b6, 0x2058, 0xb8a0, 0x00be, 0x080c, 0xab57, 0x1118, 0x9084,
+	0xff80, 0x0110, 0x9085, 0x0001, 0x0005, 0x00d6, 0x0096, 0x080c,
+	0x9a9f, 0x7003, 0x0500, 0x7814, 0x2048, 0xa874, 0x700a, 0xa878,
+	0x700e, 0xa87c, 0x7012, 0xa880, 0x7016, 0xa884, 0x701a, 0xa888,
+	0x701e, 0x60c3, 0x0010, 0x080c, 0x9e02, 0x009e, 0x00de, 0x0005,
+	0x00d6, 0x0096, 0x080c, 0x9a9f, 0x7003, 0x0500, 0x7814, 0x2048,
+	0xa8cc, 0x700a, 0xa8d0, 0x700e, 0xa8d4, 0x7012, 0xa8d8, 0x7016,
+	0xa8dc, 0x701a, 0xa8e0, 0x701e, 0x60c3, 0x0010, 0x080c, 0x9e02,
+	0x009e, 0x00de, 0x0005, 0x00d6, 0x0096, 0x0126, 0x2091, 0x8000,
+	0x080c, 0x9a9f, 0x20e9, 0x0000, 0x2001, 0x19a3, 0x2003, 0x0000,
+	0x7814, 0x2048, 0xa814, 0x8003, 0x60c2, 0xa830, 0x20a8, 0xa860,
+	0x20e0, 0xa85c, 0x9080, 0x001b, 0x2098, 0x2001, 0x19a3, 0x0016,
+	0x200c, 0x2001, 0x0001, 0x080c, 0x2195, 0x080c, 0xd5b1, 0x9006,
+	0x080c, 0x2195, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c28,
+	0x04d9, 0x080c, 0x9e02, 0x012e, 0x009e, 0x00de, 0x0005, 0x00d6,
+	0x0096, 0x0126, 0x2091, 0x8000, 0x080c, 0x9aea, 0x20e9, 0x0000,
+	0x2001, 0x19a3, 0x2003, 0x0000, 0x7814, 0x2048, 0xa86f, 0x0200,
+	0xa873, 0x0000, 0xa814, 0x8003, 0x60c2, 0xa830, 0x20a8, 0xa860,
+	0x20e0, 0xa85c, 0x9080, 0x001b, 0x2098, 0x2001, 0x19a3, 0x0016,
+	0x200c, 0x080c, 0xd5b1, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048,
+	0x0c60, 0x0051, 0x7814, 0x2048, 0x080c, 0x0fec, 0x080c, 0x9e02,
+	0x012e, 0x009e, 0x00de, 0x0005, 0x60c0, 0x8004, 0x9084, 0x0003,
+	0x9005, 0x0130, 0x9082, 0x0004, 0x20a3, 0x0000, 0x8000, 0x1de0,
+	0x0005, 0x080c, 0x9a9f, 0x7003, 0x7800, 0x7808, 0x8007, 0x700a,
+	0x60c3, 0x0008, 0x0804, 0x9e02, 0x00d6, 0x00e6, 0x080c, 0x9aea,
+	0x7814, 0x9084, 0xff00, 0x2073, 0x0200, 0x8e70, 0x8e70, 0x9095,
+	0x0010, 0x2272, 0x8e70, 0x2073, 0x0034, 0x8e70, 0x2069, 0x1805,
+	0x20a9, 0x0004, 0x2d76, 0x8d68, 0x8e70, 0x1f04, 0x983a, 0x2069,
+	0x1801, 0x20a9, 0x0004, 0x2d76, 0x8d68, 0x8e70, 0x1f04, 0x9843,
+	0x2069, 0x19b3, 0x9086, 0xdf00, 0x0110, 0x2069, 0x19cd, 0x20a9,
+	0x001a, 0x9e86, 0x0260, 0x1148, 0x00c6, 0x2061, 0x0200, 0x6010,
+	0x8000, 0x6012, 0x00ce, 0x2071, 0x0240, 0x2d04, 0x8007, 0x2072,
+	0x8d68, 0x8e70, 0x1f04, 0x9851, 0x60c3, 0x004c, 0x080c, 0x9e02,
+	0x00ee, 0x00de, 0x0005, 0x080c, 0x9a9f, 0x7003, 0x6300, 0x7007,
+	0x0028, 0x7808, 0x700e, 0x60c3, 0x0008, 0x0804, 0x9e02, 0x00d6,
+	0x0026, 0x0016, 0x080c, 0x9aea, 0x7003, 0x0200, 0x7814, 0x700e,
+	0x00e6, 0x9ef0, 0x0004, 0x2009, 0x0001, 0x2011, 0x000c, 0x2069,
+	0x1923, 0x6810, 0xd084, 0x1148, 0x2073, 0x0500, 0x8e70, 0x2073,
+	0x0000, 0x8e70, 0x8108, 0x9290, 0x0004, 0x2073, 0x0800, 0x8e70,
+	0x2073, 0x0000, 0x00ee, 0x7206, 0x710a, 0x62c2, 0x080c, 0x9e02,
+	0x001e, 0x002e, 0x00de, 0x0005, 0x2001, 0x1818, 0x2004, 0x609a,
+	0x0804, 0x9e02, 0x080c, 0x9a9f, 0x7003, 0x5200, 0x2069, 0x1847,
+	0x6804, 0xd084, 0x0130, 0x6828, 0x0016, 0x080c, 0x262e, 0x710e,
+	0x001e, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9,
+	0x0000, 0x20a1, 0x0250, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801,
+	0x20a1, 0x0254, 0x4003, 0x080c, 0xab57, 0x1120, 0xb8a0, 0x9082,
+	0x007f, 0x0248, 0x2001, 0x181f, 0x2004, 0x7032, 0x2001, 0x1820,
+	0x2004, 0x7036, 0x0030, 0x2001, 0x1818, 0x2004, 0x9084, 0x00ff,
+	0x7036, 0x60c3, 0x001c, 0x0804, 0x9e02, 0x080c, 0x9a9f, 0x7003,
+	0x0500, 0x080c, 0xab57, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248,
+	0x2001, 0x181f, 0x2004, 0x700a, 0x2001, 0x1820, 0x2004, 0x700e,
+	0x0030, 0x2001, 0x1818, 0x2004, 0x9084, 0x00ff, 0x700e, 0x20a9,
+	0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1,
+	0x0250, 0x4003, 0x60c3, 0x0010, 0x0804, 0x9e02, 0x080c, 0x9a9f,
+	0x9006, 0x080c, 0x6a35, 0xb8a0, 0x9086, 0x007e, 0x1130, 0x7003,
+	0x0400, 0x620c, 0xc2b4, 0x620e, 0x0058, 0x7814, 0x0096, 0x904d,
+	0x0120, 0x9006, 0xa89a, 0xa8a6, 0xa8aa, 0x009e, 0x7003, 0x0300,
+	0xb8a0, 0x9086, 0x007e, 0x1904, 0x997d, 0x00d6, 0x2069, 0x196c,
+	0x2001, 0x1837, 0x2004, 0xd0a4, 0x0188, 0x6800, 0x700a, 0x6808,
+	0x9084, 0x2000, 0x7012, 0x080c, 0xab6e, 0x680c, 0x7016, 0x701f,
+	0x2710, 0x6818, 0x7022, 0x681c, 0x7026, 0x0090, 0x6800, 0x700a,
+	0x6804, 0x700e, 0x6808, 0x080c, 0x74e9, 0x1118, 0x9084, 0x37ff,
+	0x0010, 0x9084, 0x3fff, 0x7012, 0x080c, 0xab6e, 0x680c, 0x7016,
+	0x00de, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9,
+	0x0000, 0x20a1, 0x0256, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801,
+	0x20a1, 0x025a, 0x4003, 0x00d6, 0x080c, 0xa67b, 0x2069, 0x1974,
+	0x2071, 0x024e, 0x6800, 0xc0dd, 0x7002, 0x080c, 0x56de, 0xd0e4,
+	0x0110, 0x680c, 0x700e, 0x00de, 0x04a8, 0x2001, 0x1837, 0x2004,
+	0xd0a4, 0x0170, 0x0016, 0x2001, 0x196d, 0x200c, 0x60e0, 0x9106,
+	0x0130, 0x2100, 0x60e3, 0x0000, 0x080c, 0x266f, 0x61e2, 0x001e,
+	0x20e1, 0x0001, 0x2099, 0x196c, 0x20e9, 0x0000, 0x20a1, 0x024e,
+	0x20a9, 0x0008, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1805, 0x20a1,
+	0x0256, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, 0x20a1, 0x025a,
+	0x4003, 0x080c, 0xa67b, 0x20a1, 0x024e, 0x20a9, 0x0008, 0x2099,
+	0x1974, 0x4003, 0x60c3, 0x0074, 0x0804, 0x9e02, 0x080c, 0x9a9f,
+	0x7003, 0x2010, 0x7007, 0x0014, 0x700b, 0x0800, 0x700f, 0x2000,
+	0x9006, 0x00f6, 0x2079, 0x1847, 0x7904, 0x00fe, 0xd1ac, 0x1110,
+	0x9085, 0x0020, 0xd1a4, 0x0110, 0x9085, 0x0010, 0x9085, 0x0002,
+	0x00d6, 0x0804, 0x9a4f, 0x7026, 0x60c3, 0x0014, 0x0804, 0x9e02,
+	0x080c, 0x9a9f, 0x7003, 0x5000, 0x0804, 0x9928, 0x080c, 0x9a9f,
+	0x7003, 0x2110, 0x7007, 0x0014, 0x60c3, 0x0014, 0x0804, 0x9e02,
+	0x080c, 0x9ae1, 0x0010, 0x080c, 0x9aea, 0x7003, 0x0200, 0x60c3,
+	0x0004, 0x0804, 0x9e02, 0x080c, 0x9aea, 0x7003, 0x0100, 0x700b,
+	0x0003, 0x700f, 0x2a00, 0x60c3, 0x0008, 0x0804, 0x9e02, 0x080c,
+	0x9aea, 0x7003, 0x0200, 0x0804, 0x9928, 0x080c, 0x9aea, 0x7003,
+	0x0100, 0x782c, 0x9005, 0x0110, 0x700a, 0x0010, 0x700b, 0x0003,
+	0x7814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x9e02, 0x00d6, 0x080c,
+	0x9aea, 0x7003, 0x0210, 0x7007, 0x0014, 0x700b, 0x0800, 0xb894,
+	0x9086, 0x0014, 0x1198, 0xb99c, 0x9184, 0x0030, 0x0190, 0xb998,
+	0x9184, 0xc000, 0x1140, 0xd1ec, 0x0118, 0x700f, 0x2100, 0x0058,
+	0x700f, 0x0100, 0x0040, 0x700f, 0x0400, 0x0028, 0x700f, 0x0700,
+	0x0010, 0x700f, 0x0800, 0x00f6, 0x2079, 0x1847, 0x7904, 0x00fe,
+	0xd1ac, 0x1110, 0x9085, 0x0020, 0xd1a4, 0x0110, 0x9085, 0x0010,
+	0x2009, 0x1869, 0x210c, 0xd184, 0x1110, 0x9085, 0x0002, 0x0026,
+	0x2009, 0x1867, 0x210c, 0xd1e4, 0x0150, 0xc0c5, 0xbad4, 0xd28c,
+	0x1108, 0xc0cd, 0x9094, 0x0030, 0x9296, 0x0010, 0x0140, 0xd1ec,
+	0x0130, 0x9094, 0x0030, 0x9296, 0x0010, 0x0108, 0xc0bd, 0x002e,
+	0x7026, 0x60c3, 0x0014, 0x00de, 0x0804, 0x9e02, 0x080c, 0x9aea,
+	0x7003, 0x0210, 0x7007, 0x0014, 0x700f, 0x0100, 0x60c3, 0x0014,
+	0x0804, 0x9e02, 0x080c, 0x9aea, 0x7003, 0x0200, 0x0804, 0x98ae,
+	0x080c, 0x9aea, 0x7003, 0x0100, 0x700b, 0x0003, 0x700f, 0x2a00,
+	0x60c3, 0x0008, 0x0804, 0x9e02, 0x080c, 0x9aea, 0x7003, 0x0100,
+	0x700b, 0x000b, 0x60c3, 0x0008, 0x0804, 0x9e02, 0x0026, 0x00d6,
+	0x0036, 0x0046, 0x2019, 0x3200, 0x2021, 0x0800, 0x0040, 0x0026,
+	0x00d6, 0x0036, 0x0046, 0x2019, 0x2200, 0x2021, 0x0100, 0x080c,
+	0xa690, 0xb810, 0x9305, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800,
+	0x687c, 0x700a, 0x6880, 0x700e, 0x9485, 0x0029, 0x7012, 0x004e,
+	0x003e, 0x00de, 0x080c, 0x9df6, 0x721a, 0x9f95, 0x0000, 0x7222,
+	0x7027, 0xffff, 0x2071, 0x024c, 0x002e, 0x0005, 0x0026, 0x080c,
+	0xa690, 0x7003, 0x02ff, 0x7007, 0xfffc, 0x00d6, 0x2069, 0x1800,
+	0x687c, 0x700a, 0x6880, 0x700e, 0x00de, 0x7013, 0x2029, 0x0c10,
+	0x7003, 0x0100, 0x7007, 0x0000, 0x700b, 0xfc02, 0x700f, 0x0000,
+	0x0005, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x3300, 0x2021,
+	0x0800, 0x0040, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x2300,
+	0x2021, 0x0100, 0x080c, 0xa690, 0xb810, 0x9305, 0x7002, 0xb814,
+	0x7006, 0x2069, 0x1800, 0xb810, 0x9005, 0x1140, 0xb814, 0x9005,
+	0x1128, 0x700b, 0x00ff, 0x700f, 0xfffe, 0x0020, 0x687c, 0x700a,
+	0x6880, 0x700e, 0x0000, 0x9485, 0x0098, 0x7012, 0x004e, 0x003e,
+	0x00de, 0x080c, 0x9df6, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226,
+	0x2071, 0x024c, 0x002e, 0x0005, 0x080c, 0x9df6, 0x721a, 0x7a08,
+	0x7222, 0x7814, 0x7026, 0x2071, 0x024c, 0x002e, 0x0005, 0x00b6,
+	0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2069, 0x0200, 0x2071, 0x0240,
+	0x6004, 0x908a, 0x0085, 0x0a0c, 0x0d7d, 0x908a, 0x0092, 0x1a0c,
+	0x0d7d, 0x6110, 0x2158, 0xb984, 0x2c78, 0x2061, 0x0100, 0x619a,
+	0x9082, 0x0085, 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be,
+	0x0005, 0x9b58, 0x9b67, 0x9b72, 0x9b56, 0x9b56, 0x9b56, 0x9b58,
+	0x9b56, 0x9b56, 0x9b56, 0x9b56, 0x9b56, 0x9b56, 0x080c, 0x0d7d,
+	0x0411, 0x60c3, 0x0000, 0x0026, 0x080c, 0x2979, 0x0228, 0x2011,
+	0x0101, 0x2204, 0xc0c5, 0x2012, 0x002e, 0x0804, 0x9e02, 0x0431,
+	0x7808, 0x700a, 0x7814, 0x700e, 0x7017, 0xffff, 0x60c3, 0x000c,
+	0x0804, 0x9e02, 0x0479, 0x7003, 0x0003, 0x7007, 0x0300, 0x60c3,
+	0x0004, 0x0804, 0x9e02, 0x0026, 0x080c, 0xa690, 0xb810, 0x9085,
+	0x8100, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x687c, 0x700a,
+	0x6880, 0x700e, 0x7013, 0x0009, 0x0804, 0x9aba, 0x0026, 0x080c,
+	0xa690, 0xb810, 0x9085, 0x8400, 0x7002, 0xb814, 0x7006, 0x2069,
+	0x1800, 0x687c, 0x700a, 0x6880, 0x700e, 0x2001, 0x0099, 0x7012,
+	0x0804, 0x9b1c, 0x0026, 0x080c, 0xa690, 0xb810, 0x9085, 0x8500,
 	0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x687c, 0x700a, 0x6880,
-	0x700e, 0x7013, 0x0009, 0x0804, 0x9a89, 0x0026, 0x080c, 0xa66c,
-	0xb810, 0x9085, 0x8400, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800,
-	0x687c, 0x700a, 0x6880, 0x700e, 0x2001, 0x0099, 0x7012, 0x0804,
-	0x9aeb, 0x0026, 0x080c, 0xa66c, 0xb810, 0x9085, 0x8500, 0x7002,
-	0xb814, 0x7006, 0x2069, 0x1800, 0x687c, 0x700a, 0x6880, 0x700e,
-	0x2001, 0x0099, 0x7012, 0x0804, 0x9aeb, 0x00b6, 0x00c6, 0x00d6,
-	0x00e6, 0x00f6, 0x2c78, 0x2069, 0x0200, 0x2071, 0x0240, 0x7804,
-	0x908a, 0x0040, 0x0a0c, 0x0d7d, 0x908a, 0x0057, 0x1a0c, 0x0d7d,
-	0x7910, 0x2158, 0xb984, 0x2061, 0x0100, 0x619a, 0x9082, 0x0040,
-	0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x0005, 0x9bba,
-	0x9bba, 0x9bba, 0x9bde, 0x9bba, 0x9bba, 0x9bba, 0x9bba, 0x9bba,
-	0x9bba, 0x9bba, 0xa1c7, 0xa1cf, 0xa1d7, 0xa1df, 0x9bba, 0x9bba,
-	0x9bba, 0xa1bf, 0x080c, 0x0d7d, 0x6813, 0x0008, 0xba8c, 0x8210,
-	0xb8d4, 0xd084, 0x0128, 0x7a4e, 0x7b14, 0x7b52, 0x722e, 0x732a,
-	0x9294, 0x00ff, 0xba8e, 0x8217, 0x721a, 0xba10, 0x9295, 0x0600,
-	0x7202, 0xba14, 0x7206, 0x6a7c, 0x720a, 0x6a80, 0x720e, 0x7013,
-	0x0829, 0x2f10, 0x7222, 0x7027, 0xffff, 0x0005, 0x0016, 0x7814,
-	0x9084, 0x0700, 0x8007, 0x0013, 0x001e, 0x0005, 0x9bee, 0x9bee,
-	0x9bf0, 0x9bee, 0x9bee, 0x9bee, 0x9c0a, 0x9bee, 0x080c, 0x0d7d,
-	0x7914, 0x918c, 0x08ff, 0x918d, 0xf600, 0x7916, 0x2009, 0x0003,
-	0x00b9, 0x2069, 0x1847, 0x6804, 0xd0bc, 0x0130, 0x682c, 0x9084,
-	0x00ff, 0x8007, 0x7032, 0x0010, 0x7033, 0x3f00, 0x60c3, 0x0001,
-	0x0804, 0x9dde, 0x2009, 0x0003, 0x0019, 0x7033, 0x7f00, 0x0cb0,
-	0x0016, 0x080c, 0xa66c, 0x001e, 0xb810, 0x9085, 0x0100, 0x7002,
-	0xb814, 0x7006, 0x2069, 0x1800, 0x6a7c, 0x720a, 0x6a80, 0x720e,
-	0x7013, 0x0888, 0x918d, 0x0008, 0x7116, 0x080c, 0x9dd2, 0x721a,
-	0x7a08, 0x7222, 0x2f10, 0x7226, 0x0005, 0x00b6, 0x00e6, 0x00d6,
-	0x00c6, 0x0066, 0x0056, 0x0046, 0x0036, 0x2061, 0x0100, 0x2071,
-	0x1800, 0x7160, 0x7810, 0x2058, 0x76dc, 0x96b4, 0x0028, 0x0110,
-	0x737c, 0x7480, 0x2500, 0x76dc, 0x96b4, 0x0028, 0x0140, 0x2001,
-	0x04ff, 0x6062, 0x6067, 0xffff, 0x636a, 0x646e, 0x0050, 0x2001,
-	0x00ff, 0x9085, 0x0400, 0x6062, 0x6067, 0xffff, 0x606b, 0x0000,
-	0x616e, 0xb8b8, 0x6073, 0x0530, 0x6077, 0x0008, 0xb88c, 0x8000,
-	0x9084, 0x00ff, 0xb88e, 0x8007, 0x9085, 0x0020, 0x607a, 0x607f,
-	0x0000, 0x2b00, 0x6082, 0x6087, 0xffff, 0x7814, 0x0096, 0x2048,
-	0xa848, 0x608a, 0xa844, 0x608e, 0xa838, 0x60c6, 0xa834, 0x60ca,
-	0x009e, 0xb86c, 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7,
-	0x0000, 0x2001, 0x1837, 0x2004, 0x9084, 0x0028, 0x0128, 0x609f,
-	0x0000, 0x2001, 0x0092, 0x0058, 0x6028, 0xc0bd, 0x602a, 0x609f,
-	0x00ff, 0x2011, 0xffff, 0x080c, 0x2a44, 0x2001, 0x00b2, 0x2010,
-	0x900e, 0x080c, 0x2a53, 0x2009, 0x07d0, 0x080c, 0x86ca, 0x003e,
-	0x004e, 0x005e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00be, 0x0005,
+	0x700e, 0x2001, 0x0099, 0x7012, 0x0804, 0x9b1c, 0x00b6, 0x00c6,
+	0x00d6, 0x00e6, 0x00f6, 0x2c78, 0x2069, 0x0200, 0x2071, 0x0240,
+	0x7804, 0x908a, 0x0040, 0x0a0c, 0x0d7d, 0x908a, 0x0057, 0x1a0c,
+	0x0d7d, 0x7910, 0x2158, 0xb984, 0x2061, 0x0100, 0x619a, 0x9082,
+	0x0040, 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x0005,
+	0x9beb, 0x9beb, 0x9beb, 0x9c11, 0x9beb, 0x9beb, 0x9beb, 0x9beb,
+	0x9beb, 0x9beb, 0x9beb, 0xa1eb, 0xa1f3, 0xa1fb, 0xa203, 0x9beb,
+	0x9beb, 0x9beb, 0xa1e3, 0x080c, 0x0d7d, 0x6813, 0x0008, 0xba8c,
+	0x8210, 0xb8d4, 0xd084, 0x0128, 0x7a4e, 0x7b14, 0x7b52, 0x722e,
+	0x732a, 0x9294, 0x00ff, 0xba8e, 0x8217, 0x721a, 0xba10, 0x9295,
+	0x0600, 0x7202, 0xba14, 0x7206, 0x2069, 0x1800, 0x6a7c, 0x720a,
+	0x6a80, 0x720e, 0x7013, 0x0829, 0x2f10, 0x7222, 0x7027, 0xffff,
+	0x0005, 0x0016, 0x7814, 0x9084, 0x0700, 0x8007, 0x0013, 0x001e,
+	0x0005, 0x9c21, 0x9c21, 0x9c23, 0x9c21, 0x9c21, 0x9c21, 0x9c3d,
+	0x9c21, 0x080c, 0x0d7d, 0x7914, 0x918c, 0x08ff, 0x918d, 0xf600,
+	0x7916, 0x2009, 0x0003, 0x00b9, 0x2069, 0x1847, 0x6804, 0xd0bc,
+	0x0130, 0x682c, 0x9084, 0x00ff, 0x8007, 0x7032, 0x0010, 0x7033,
+	0x3f00, 0x60c3, 0x0001, 0x0804, 0x9e02, 0x2009, 0x0003, 0x0019,
+	0x7033, 0x7f00, 0x0cb0, 0x0016, 0x080c, 0xa690, 0x001e, 0xb810,
+	0x9085, 0x0100, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6a7c,
+	0x720a, 0x6a80, 0x720e, 0x7013, 0x0888, 0x918d, 0x0008, 0x7116,
+	0x080c, 0x9df6, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x0005,
 	0x00b6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0056, 0x0046, 0x0036,
-	0x2061, 0x0100, 0x2071, 0x1800, 0x7160, 0x7810, 0x2058, 0xb8a0,
-	0x2028, 0x76dc, 0xd6ac, 0x1168, 0x9582, 0x007e, 0x1250, 0x2500,
-	0x9094, 0xff80, 0x1130, 0x9080, 0x336d, 0x2015, 0x9294, 0x00ff,
-	0x0020, 0xb910, 0xba14, 0x737c, 0x7480, 0x70dc, 0xd0ac, 0x1130,
-	0x9582, 0x007e, 0x1218, 0x9584, 0xff80, 0x0138, 0x9185, 0x0400,
-	0x6062, 0x6266, 0x636a, 0x646e, 0x0030, 0x6063, 0x0400, 0x6266,
-	0x606b, 0x0000, 0x616e, 0xb8b8, 0x6072, 0x6077, 0x0000, 0xb864,
-	0xd0a4, 0x0110, 0x6077, 0x0008, 0xb88c, 0x8000, 0x9084, 0x00ff,
-	0xb88e, 0x8007, 0x9085, 0x0020, 0x607a, 0x607f, 0x0000, 0x2b00,
-	0x6082, 0x6087, 0xffff, 0x7814, 0x0096, 0x2048, 0xa848, 0x608a,
-	0xa844, 0x608e, 0xa838, 0x60c6, 0xa834, 0x60ca, 0x009e, 0xb86c,
-	0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xba84,
-	0x629e, 0x00f6, 0x2079, 0x0140, 0x7803, 0x0000, 0x00fe, 0x900e,
-	0x2011, 0x0092, 0x080c, 0x2a53, 0x2009, 0x07d0, 0x080c, 0x86ca,
-	0x003e, 0x004e, 0x005e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00be,
-	0x0005, 0x00b6, 0x0096, 0x00e6, 0x00d6, 0x00c6, 0x0056, 0x0046,
-	0x0036, 0x2061, 0x0100, 0x2071, 0x1800, 0x7810, 0x2058, 0xb8a0,
-	0x2028, 0xb910, 0xba14, 0x737c, 0x7480, 0x7820, 0x0002, 0x9d4e,
-	0x9d4e, 0x9d4e, 0x9d4e, 0x9d4e, 0x9d4e, 0x9d4e, 0x9d4e, 0x9d4e,
-	0x9d4e, 0x9d50, 0x9d4e, 0x9d4e, 0x9d4e, 0x9d4e, 0x080c, 0x0d7d,
-	0x609f, 0x0000, 0x7814, 0x2048, 0xa87c, 0xd0fc, 0x05d0, 0xaf90,
-	0x9784, 0xff00, 0x9105, 0x6062, 0x873f, 0x9784, 0xff00, 0x0006,
-	0x7814, 0x2048, 0xa878, 0xc0fc, 0x9005, 0x000e, 0x1160, 0xaf94,
-	0x87ff, 0x0510, 0x2039, 0x0098, 0x9705, 0x6072, 0x7808, 0x6082,
-	0x2f00, 0x6086, 0x0038, 0x9185, 0x2200, 0x6062, 0x6073, 0x0129,
-	0x6077, 0x0000, 0x609f, 0x0000, 0x2001, 0x1837, 0x2004, 0xd0ac,
-	0x11a8, 0xd09c, 0x0130, 0x7814, 0x2048, 0xa874, 0x9082, 0x0080,
-	0x1268, 0xb814, 0x609e, 0x0050, 0x2039, 0x0029, 0x9705, 0x6072,
-	0x0c48, 0x9185, 0x0200, 0x6062, 0x6073, 0x2029, 0xa87c, 0xd0fc,
-	0x0118, 0xaf94, 0x87ff, 0x1120, 0x2f00, 0x6082, 0x7808, 0x6086,
-	0x6266, 0x636a, 0x646e, 0x6077, 0x0000, 0xb88c, 0x8000, 0x9084,
-	0x00ff, 0xb88e, 0x8007, 0x607a, 0x607f, 0x0000, 0xa848, 0x608a,
-	0xa844, 0x608e, 0xa838, 0x60c6, 0xa834, 0x60ca, 0xb86c, 0x60ce,
-	0x60af, 0x95d5, 0x60d7, 0x0000, 0x080c, 0xa64c, 0x2009, 0x07d0,
-	0x60c4, 0x9084, 0xfff0, 0x9005, 0x0110, 0x2009, 0x1b58, 0x080c,
-	0x86ca, 0x003e, 0x004e, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x009e,
-	0x00be, 0x0005, 0x7a40, 0x9294, 0x00ff, 0x8217, 0x0005, 0x00d6,
-	0x2069, 0x19e7, 0x686b, 0x0001, 0x00de, 0x0005, 0x60a3, 0x0056,
-	0x60a7, 0x9575, 0x00f1, 0x080c, 0x86bc, 0x0005, 0x0016, 0x2001,
-	0x180c, 0x200c, 0x9184, 0x0600, 0x9086, 0x0600, 0x0128, 0x0089,
-	0x080c, 0x86bc, 0x001e, 0x0005, 0xc1e5, 0x2001, 0x180c, 0x2102,
-	0x2001, 0x19e8, 0x2003, 0x0000, 0x2001, 0x19f3, 0x2003, 0x0000,
-	0x0c88, 0x0006, 0x0016, 0x0026, 0x2009, 0x1804, 0x2011, 0x0009,
-	0x080c, 0x2a53, 0x002e, 0x001e, 0x000e, 0x0005, 0x0016, 0x00c6,
-	0x0006, 0x080c, 0xa8d0, 0x0106, 0x190c, 0xa872, 0x2061, 0x0100,
-	0x61a4, 0x60a7, 0x95f5, 0x0016, 0x0026, 0x2009, 0x1804, 0x2011,
-	0x0008, 0x080c, 0x2a53, 0x002e, 0x001e, 0x010e, 0x190c, 0xa88e,
-	0x000e, 0xa001, 0xa001, 0xa001, 0x61a6, 0x00ce, 0x001e, 0x0005,
-	0x00c6, 0x00d6, 0x0016, 0x0026, 0x2061, 0x0100, 0x2069, 0x0140,
-	0x080c, 0x74d5, 0x1510, 0x2001, 0x1a0c, 0x2004, 0x9005, 0x1904,
-	0x9e8f, 0x080c, 0x7576, 0x11a8, 0x2069, 0x0380, 0x6843, 0x0101,
-	0x6844, 0xd084, 0x1de8, 0x2061, 0x0100, 0x6020, 0xd0b4, 0x1120,
-	0x6024, 0xd084, 0x090c, 0x0d7d, 0x6843, 0x0100, 0x080c, 0x86bc,
-	0x04b0, 0x00c6, 0x2061, 0x19e7, 0x00f0, 0x6904, 0x9194, 0x4000,
-	0x0598, 0x080c, 0x9e0e, 0x080c, 0x2a1a, 0x00c6, 0x2061, 0x19e7,
-	0x6134, 0x9192, 0x0008, 0x1278, 0x8108, 0x6136, 0x080c, 0xa872,
-	0x6130, 0x080c, 0xa88e, 0x00ce, 0x81ff, 0x01c8, 0x080c, 0x86bc,
-	0x080c, 0x9e01, 0x00a0, 0x080c, 0xa872, 0x6130, 0x91e5, 0x0000,
-	0x0150, 0x080c, 0xe6ec, 0x080c, 0x86c5, 0x6003, 0x0001, 0x2009,
-	0x0014, 0x080c, 0xac68, 0x080c, 0xa88e, 0x00ce, 0x0000, 0x002e,
-	0x001e, 0x00de, 0x00ce, 0x0005, 0x2001, 0x1a0c, 0x2004, 0x9005,
-	0x1db0, 0x00c6, 0x2061, 0x19e7, 0x6134, 0x9192, 0x0003, 0x1ad8,
-	0x8108, 0x6136, 0x00ce, 0x080c, 0x86bc, 0x080c, 0x5edd, 0x2009,
-	0x1846, 0x2114, 0x8210, 0x220a, 0x0c10, 0x0096, 0x00c6, 0x00d6,
-	0x00e6, 0x0016, 0x0026, 0x080c, 0x86d2, 0x080c, 0xa872, 0x2001,
-	0x0387, 0x2003, 0x0202, 0x2071, 0x19e7, 0x714c, 0x81ff, 0x0904,
-	0x9f37, 0x2061, 0x0100, 0x2069, 0x0140, 0x080c, 0x74d5, 0x1510,
-	0x0036, 0x2019, 0x0002, 0x080c, 0xa0f4, 0x003e, 0x714c, 0x2160,
-	0x080c, 0xe6ec, 0x2009, 0x004a, 0x6220, 0x9296, 0x0009, 0x1130,
-	0x6114, 0x2148, 0xa87b, 0x0006, 0x2009, 0x004a, 0x6003, 0x0003,
-	0x080c, 0xac68, 0x2001, 0x0386, 0x2003, 0x5040, 0x080c, 0x7576,
-	0x0804, 0x9f37, 0x6904, 0xd1f4, 0x0904, 0x9f44, 0x080c, 0x2a1a,
-	0x00c6, 0x704c, 0x9065, 0x090c, 0x0d7d, 0x6020, 0x00ce, 0x9086,
-	0x0006, 0x1518, 0x61c8, 0x60c4, 0x9105, 0x11f8, 0x2009, 0x180c,
-	0x2104, 0xd0d4, 0x01d0, 0x6214, 0x9294, 0x1800, 0x1128, 0x6224,
-	0x9294, 0x0002, 0x1560, 0x0010, 0xc0d4, 0x200a, 0x6014, 0x9084,
-	0xe7fd, 0x9085, 0x0010, 0x6016, 0x704c, 0x2060, 0x080c, 0x960a,
-	0x2009, 0x0049, 0x080c, 0xac68, 0x00d0, 0x0036, 0x2019, 0x0001,
-	0x080c, 0xa0f4, 0x003e, 0x714c, 0x2160, 0x080c, 0xe6ec, 0x2009,
-	0x004a, 0x6220, 0x9296, 0x0009, 0x1130, 0x6114, 0x2148, 0xa87b,
-	0x0006, 0x2009, 0x004a, 0x6003, 0x0003, 0x080c, 0xac68, 0x2001,
-	0x0387, 0x2003, 0x0200, 0x080c, 0xa88e, 0x002e, 0x001e, 0x00ee,
-	0x00de, 0x00ce, 0x009e, 0x0005, 0xd1ec, 0x1904, 0x9eee, 0x0804,
-	0x9ef0, 0x0026, 0x00e6, 0x2071, 0x19e7, 0x706c, 0xd084, 0x01e8,
-	0xc084, 0x706e, 0x714c, 0x81ff, 0x01c0, 0x2071, 0x0100, 0x9188,
-	0x0008, 0x2114, 0x928e, 0x0006, 0x1138, 0x2009, 0x1984, 0x2011,
-	0x0012, 0x080c, 0x2a53, 0x0048, 0x928e, 0x0009, 0x0db0, 0x2009,
-	0x1984, 0x2011, 0x0016, 0x080c, 0x2a53, 0x00ee, 0x002e, 0x0005,
-	0x9036, 0x2001, 0x19f1, 0x2004, 0x9005, 0x0128, 0x9c06, 0x0128,
-	0x2c30, 0x600c, 0x0cc8, 0x9085, 0x0001, 0x0005, 0x00f6, 0x2079,
-	0x19e7, 0x610c, 0x9006, 0x600e, 0x6044, 0xc0fc, 0x6046, 0x86ff,
-	0x1140, 0x7824, 0x9c06, 0x1118, 0x7826, 0x782a, 0x0050, 0x792a,
-	0x0040, 0x00c6, 0x2660, 0x610e, 0x00ce, 0x7824, 0x9c06, 0x1108,
-	0x7e26, 0x080c, 0xa1ea, 0x080c, 0xca03, 0x00fe, 0x0005, 0x080c,
-	0x9a6e, 0x7003, 0x1200, 0x7838, 0x7012, 0x783c, 0x7016, 0x00c6,
-	0x7820, 0x9086, 0x0004, 0x1148, 0x7810, 0x9005, 0x0130, 0x00b6,
-	0x2058, 0xb810, 0xb914, 0x00be, 0x0020, 0x2061, 0x1800, 0x607c,
-	0x6180, 0x9084, 0x00ff, 0x700a, 0x710e, 0x00ce, 0x60c3, 0x002c,
-	0x0804, 0x9dde, 0x080c, 0x9a6e, 0x7003, 0x0f00, 0x7808, 0xd09c,
-	0x0128, 0xb810, 0x9084, 0x00ff, 0x700a, 0xb814, 0x700e, 0x60c3,
-	0x0008, 0x0804, 0x9dde, 0x0156, 0x080c, 0x9ab9, 0x7003, 0x0200,
-	0x080c, 0x878a, 0x20a9, 0x0006, 0x2011, 0xfff4, 0x2019, 0xfff5,
-	0x9ef0, 0x0002, 0x2305, 0x2072, 0x8e70, 0x2205, 0x2072, 0x8e70,
-	0x9398, 0x0002, 0x9290, 0x0002, 0x1f04, 0x9fe2, 0x60c3, 0x001c,
-	0x015e, 0x0804, 0x9dde, 0x0016, 0x0026, 0x080c, 0x9a95, 0x080c,
-	0x9aa7, 0x9e80, 0x0004, 0x20e9, 0x0000, 0x20a0, 0x7814, 0x0096,
-	0x2048, 0xa800, 0x2048, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0021,
-	0x2098, 0x009e, 0x7808, 0x9088, 0x0002, 0x21a8, 0x9192, 0x0010,
-	0x1250, 0x4003, 0x9080, 0x0004, 0x8003, 0x60c2, 0x080c, 0x9dde,
-	0x002e, 0x001e, 0x0005, 0x20a9, 0x0010, 0x4003, 0x080c, 0xa657,
-	0x20a1, 0x0240, 0x22a8, 0x4003, 0x0c68, 0x080c, 0x9a6e, 0x7003,
-	0x6200, 0x7808, 0x700e, 0x60c3, 0x0008, 0x0804, 0x9dde, 0x0016,
-	0x0026, 0x080c, 0x9a6e, 0x20e9, 0x0000, 0x20a1, 0x024c, 0x7814,
-	0x0096, 0x2048, 0xa800, 0x2048, 0xa860, 0x20e0, 0xa85c, 0x9080,
-	0x0023, 0x2098, 0x009e, 0x7808, 0x9088, 0x0002, 0x21a8, 0x4003,
-	0x8003, 0x60c2, 0x080c, 0x9dde, 0x002e, 0x001e, 0x0005, 0x00e6,
-	0x00c6, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19e7, 0x7010,
-	0x2060, 0x8cff, 0x0188, 0x080c, 0xca29, 0x1110, 0x080c, 0xb591,
-	0x600c, 0x0006, 0x080c, 0xcca0, 0x600f, 0x0000, 0x080c, 0xabc9,
-	0x080c, 0xa1ea, 0x00ce, 0x0c68, 0x2c00, 0x7012, 0x700e, 0x012e,
-	0x000e, 0x00ce, 0x00ee, 0x0005, 0x0126, 0x0156, 0x00f6, 0x00e6,
-	0x00d6, 0x00c6, 0x0066, 0x0026, 0x0016, 0x0006, 0x2091, 0x8000,
-	0x2001, 0x180c, 0x200c, 0x918c, 0xe7ff, 0x2102, 0x2069, 0x0100,
-	0x2079, 0x0140, 0x2071, 0x19e7, 0x7030, 0x2060, 0x8cff, 0x0548,
-	0x080c, 0x9e0e, 0x6ac0, 0x68c3, 0x0000, 0x080c, 0x86c5, 0x00c6,
-	0x2061, 0x0100, 0x080c, 0xa7a8, 0x00ce, 0x20a9, 0x01f4, 0x04b1,
-	0x080c, 0x95ad, 0x6044, 0xd0ac, 0x1128, 0x2001, 0x1988, 0x2004,
-	0x604a, 0x0020, 0x2009, 0x0013, 0x080c, 0xac68, 0x000e, 0x001e,
-	0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e,
-	0x0005, 0x2001, 0x1800, 0x2004, 0x9096, 0x0001, 0x0d78, 0x9096,
-	0x0004, 0x0d60, 0x080c, 0x86c5, 0x6814, 0x9084, 0x0001, 0x0110,
-	0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000, 0x2011, 0x5e87,
-	0x080c, 0x860d, 0x20a9, 0x01f4, 0x0009, 0x08c0, 0x6824, 0xd094,
-	0x0140, 0x6827, 0x0004, 0x7804, 0x9084, 0x4000, 0x190c, 0x2a1a,
-	0x0090, 0xd084, 0x0118, 0x6827, 0x0001, 0x0010, 0x1f04, 0xa0d6,
-	0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2a0a,
-	0x9006, 0x080c, 0x2a0a, 0x0005, 0x0126, 0x0156, 0x00f6, 0x00e6,
-	0x00d6, 0x00c6, 0x0066, 0x0026, 0x0016, 0x0006, 0x2091, 0x8000,
-	0x2001, 0x180c, 0x200c, 0x918c, 0xdbff, 0x2102, 0x2069, 0x0100,
-	0x2079, 0x0140, 0x2071, 0x0380, 0x701c, 0x0006, 0x701f, 0x0202,
-	0x2071, 0x19e7, 0x704c, 0x2060, 0x8cff, 0x0904, 0xa199, 0x9386,
-	0x0002, 0x1128, 0x6814, 0x9084, 0x0002, 0x0904, 0xa199, 0x68af,
-	0x95f5, 0x6817, 0x0010, 0x2009, 0x00fa, 0x8109, 0x1df0, 0x69c6,
-	0x68cb, 0x0008, 0x080c, 0x86d2, 0x080c, 0x1dd8, 0x0046, 0x2009,
-	0x00a5, 0x080c, 0x0e55, 0x2021, 0x0169, 0x2404, 0x9084, 0x000f,
-	0x9086, 0x0004, 0x11f8, 0x68af, 0x95f5, 0x68c6, 0x68cb, 0x0008,
-	0x00e6, 0x00f6, 0x2079, 0x0090, 0x2071, 0x19e7, 0x6814, 0x9084,
-	0x1984, 0x9085, 0x0012, 0x6816, 0x782b, 0x0008, 0x7057, 0x0000,
-	0x00fe, 0x00ee, 0x9386, 0x0002, 0x1128, 0x7884, 0x9005, 0x1110,
-	0x7887, 0x0001, 0x0016, 0x2009, 0x0040, 0x080c, 0x21b0, 0x001e,
-	0x2009, 0x0000, 0x080c, 0x0e55, 0x004e, 0x20a9, 0x03e8, 0x6824,
-	0xd094, 0x0140, 0x6827, 0x0004, 0x7804, 0x9084, 0x4000, 0x190c,
-	0x2a1a, 0x0090, 0xd08c, 0x0118, 0x6827, 0x0002, 0x0010, 0x1f04,
-	0xa167, 0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c,
-	0x2a0a, 0x9006, 0x080c, 0x2a0a, 0x6827, 0x4000, 0x6824, 0x83ff,
-	0x1180, 0x2009, 0x0049, 0x6020, 0x9086, 0x0009, 0x0150, 0x080c,
-	0x960a, 0x6044, 0xd0ac, 0x1118, 0x6003, 0x0002, 0x0010, 0x080c,
-	0xac68, 0x000e, 0x2071, 0x0380, 0xd08c, 0x1110, 0x701f, 0x0200,
-	0x000e, 0x001e, 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe,
-	0x015e, 0x012e, 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069,
-	0x19e7, 0x6a06, 0x012e, 0x00de, 0x0005, 0x00d6, 0x0126, 0x2091,
-	0x8000, 0x2069, 0x19e7, 0x6a3e, 0x012e, 0x00de, 0x0005, 0x080c,
-	0x9bbc, 0x785c, 0x7032, 0x7042, 0x7047, 0x1000, 0x00f8, 0x080c,
-	0x9bbc, 0x785c, 0x7032, 0x7042, 0x7047, 0x4000, 0x00b8, 0x080c,
-	0x9bbc, 0x785c, 0x7032, 0x7042, 0x7047, 0x2000, 0x0078, 0x080c,
-	0x9bbc, 0x785c, 0x7032, 0x7042, 0x7047, 0x0400, 0x0038, 0x080c,
-	0x9bbc, 0x785c, 0x7032, 0x7042, 0x7047, 0x0200, 0x60c3, 0x0020,
-	0x0804, 0x9dde, 0x00e6, 0x2071, 0x19e7, 0x702c, 0x9005, 0x0110,
-	0x8001, 0x702e, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6,
-	0x0076, 0x0066, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19e7,
-	0x7620, 0x2660, 0x2678, 0x2039, 0x0001, 0x87ff, 0x0904, 0xa28f,
-	0x8cff, 0x0904, 0xa28f, 0x6020, 0x9086, 0x0006, 0x1904, 0xa28a,
-	0x88ff, 0x0138, 0x2800, 0x9c06, 0x1904, 0xa28a, 0x2039, 0x0000,
-	0x0050, 0x6010, 0x9b06, 0x1904, 0xa28a, 0x85ff, 0x0120, 0x605c,
-	0x9106, 0x1904, 0xa28a, 0x7030, 0x9c06, 0x15b0, 0x2069, 0x0100,
-	0x68c0, 0x9005, 0x1160, 0x6824, 0xd084, 0x0148, 0x6827, 0x0001,
-	0x080c, 0x86c5, 0x080c, 0xa314, 0x7033, 0x0000, 0x0428, 0x080c,
-	0x86c5, 0x6820, 0xd0b4, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008,
-	0x68c3, 0x0000, 0x080c, 0xa314, 0x7033, 0x0000, 0x0036, 0x2069,
-	0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c,
-	0x2a0a, 0x9006, 0x080c, 0x2a0a, 0x2069, 0x0100, 0x6824, 0xd084,
-	0x0110, 0x6827, 0x0001, 0x003e, 0x7020, 0x9c36, 0x1110, 0x660c,
-	0x7622, 0x701c, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00,
-	0x701e, 0x0010, 0x701f, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06,
-	0x0110, 0x7e0e, 0x0008, 0x2678, 0x89ff, 0x1168, 0x600f, 0x0000,
-	0x6014, 0x0096, 0x2048, 0x080c, 0xc812, 0x0110, 0x080c, 0xe241,
-	0x009e, 0x080c, 0xac04, 0x080c, 0xa1ea, 0x88ff, 0x1190, 0x00ce,
-	0x0804, 0xa205, 0x2c78, 0x600c, 0x2060, 0x0804, 0xa205, 0x9006,
-	0x012e, 0x000e, 0x006e, 0x007e, 0x00ce, 0x00de, 0x00ee, 0x00fe,
-	0x0005, 0x601b, 0x0000, 0x00ce, 0x98c5, 0x0001, 0x0c88, 0x00f6,
-	0x00e6, 0x00d6, 0x0096, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126,
-	0x2091, 0x8000, 0x2071, 0x19e7, 0x7648, 0x2660, 0x2678, 0x8cff,
-	0x0904, 0xa303, 0x6020, 0x9086, 0x0006, 0x1904, 0xa2fe, 0x87ff,
-	0x0128, 0x2700, 0x9c06, 0x1904, 0xa2fe, 0x0040, 0x6010, 0x9b06,
-	0x15e8, 0x85ff, 0x0118, 0x605c, 0x9106, 0x15c0, 0x704c, 0x9c06,
-	0x1168, 0x0036, 0x2019, 0x0001, 0x080c, 0xa0f4, 0x703f, 0x0000,
-	0x9006, 0x704e, 0x706a, 0x7052, 0x706e, 0x003e, 0x7048, 0x9c36,
-	0x1110, 0x660c, 0x764a, 0x7044, 0x9c36, 0x1140, 0x2c00, 0x9f36,
-	0x0118, 0x2f00, 0x7046, 0x0010, 0x7047, 0x0000, 0x660c, 0x0066,
-	0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000,
-	0x6014, 0x2048, 0x080c, 0xc812, 0x0110, 0x080c, 0xe241, 0x080c,
-	0xac04, 0x87ff, 0x1198, 0x00ce, 0x0804, 0xa2af, 0x2c78, 0x600c,
-	0x2060, 0x0804, 0xa2af, 0x9006, 0x012e, 0x000e, 0x002e, 0x006e,
-	0x00ce, 0x009e, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601b, 0x0000,
-	0x00ce, 0x97bd, 0x0001, 0x0c80, 0x00e6, 0x2071, 0x19e7, 0x7033,
-	0x0000, 0x7004, 0x9086, 0x0003, 0x0158, 0x2001, 0x1800, 0x2004,
-	0x9086, 0x0002, 0x1118, 0x7007, 0x0005, 0x0010, 0x7007, 0x0000,
-	0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0066, 0x0026, 0x0006,
-	0x0126, 0x2091, 0x8000, 0x2071, 0x19e7, 0x2c10, 0x7648, 0x2660,
-	0x2678, 0x8cff, 0x0518, 0x2200, 0x9c06, 0x11e0, 0x7048, 0x9c36,
-	0x1110, 0x660c, 0x764a, 0x7044, 0x9c36, 0x1140, 0x2c00, 0x9f36,
-	0x0118, 0x2f00, 0x7046, 0x0010, 0x7047, 0x0000, 0x660c, 0x2c00,
-	0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x9085,
-	0x0001, 0x0020, 0x2c78, 0x600c, 0x2060, 0x08d8, 0x012e, 0x000e,
-	0x002e, 0x006e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0096, 0x00f6,
-	0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091,
-	0x8000, 0x2071, 0x19e7, 0x7610, 0x2660, 0x2678, 0x8cff, 0x0904,
-	0xa3f6, 0x6010, 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x9206, 0x1904,
-	0xa3f1, 0x7030, 0x9c06, 0x1520, 0x2069, 0x0100, 0x68c0, 0x9005,
-	0x0904, 0xa3cd, 0x080c, 0x9e0e, 0x68c3, 0x0000, 0x080c, 0xa314,
+	0x2061, 0x0100, 0x2071, 0x1800, 0x7160, 0x7810, 0x2058, 0x76dc,
+	0x96b4, 0x0028, 0x0110, 0x737c, 0x7480, 0x2500, 0x76dc, 0x96b4,
+	0x0028, 0x0140, 0x2001, 0x04ff, 0x6062, 0x6067, 0xffff, 0x636a,
+	0x646e, 0x0050, 0x2001, 0x00ff, 0x9085, 0x0400, 0x6062, 0x6067,
+	0xffff, 0x606b, 0x0000, 0x616e, 0xb8b8, 0x6073, 0x0530, 0x6077,
+	0x0008, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007, 0x9085,
+	0x0020, 0x607a, 0x607f, 0x0000, 0x2b00, 0x6082, 0x6087, 0xffff,
+	0x7814, 0x0096, 0x2048, 0xa848, 0x608a, 0xa844, 0x608e, 0xa838,
+	0x60c6, 0xa834, 0x60ca, 0x009e, 0xb86c, 0x60ce, 0x60ab, 0x0036,
+	0x60af, 0x95d5, 0x60d7, 0x0000, 0x2001, 0x1837, 0x2004, 0x9084,
+	0x0028, 0x0128, 0x609f, 0x0000, 0x2001, 0x0092, 0x0058, 0x6028,
+	0xc0bd, 0x602a, 0x609f, 0x00ff, 0x2011, 0xffff, 0x080c, 0x2a44,
+	0x2001, 0x00b2, 0x2010, 0x900e, 0x080c, 0x2a53, 0x2009, 0x07d0,
+	0x080c, 0x86fb, 0x003e, 0x004e, 0x005e, 0x006e, 0x00ce, 0x00de,
+	0x00ee, 0x00be, 0x0005, 0x00b6, 0x00e6, 0x00d6, 0x00c6, 0x0066,
+	0x0056, 0x0046, 0x0036, 0x2061, 0x0100, 0x2071, 0x1800, 0x7160,
+	0x7810, 0x2058, 0xb8a0, 0x2028, 0x76dc, 0xd6ac, 0x1168, 0x9582,
+	0x007e, 0x1250, 0x2500, 0x9094, 0xff80, 0x1130, 0x9080, 0x3374,
+	0x2015, 0x9294, 0x00ff, 0x0020, 0xb910, 0xba14, 0x737c, 0x7480,
+	0x70dc, 0xd0ac, 0x1130, 0x9582, 0x007e, 0x1218, 0x9584, 0xff80,
+	0x0138, 0x9185, 0x0400, 0x6062, 0x6266, 0x636a, 0x646e, 0x0030,
+	0x6063, 0x0400, 0x6266, 0x606b, 0x0000, 0x616e, 0xb8b8, 0x6072,
+	0x6077, 0x0000, 0xb864, 0xd0a4, 0x0110, 0x6077, 0x0008, 0xb88c,
+	0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007, 0x9085, 0x0020, 0x607a,
+	0x607f, 0x0000, 0x2b00, 0x6082, 0x6087, 0xffff, 0x7814, 0x0096,
+	0x2048, 0xa848, 0x608a, 0xa844, 0x608e, 0xa838, 0x60c6, 0xa834,
+	0x60ca, 0x009e, 0xb86c, 0x60ce, 0x60ab, 0x0036, 0x60af, 0x95d5,
+	0x60d7, 0x0000, 0xba84, 0x629e, 0x00f6, 0x2079, 0x0140, 0x7803,
+	0x0000, 0x00fe, 0x900e, 0x2011, 0x0092, 0x080c, 0x2a53, 0x2009,
+	0x07d0, 0x080c, 0x86fb, 0x003e, 0x004e, 0x005e, 0x006e, 0x00ce,
+	0x00de, 0x00ee, 0x00be, 0x0005, 0x00b6, 0x0096, 0x00e6, 0x00d6,
+	0x00c6, 0x0056, 0x0046, 0x0036, 0x2061, 0x0100, 0x2071, 0x1800,
+	0x7810, 0x2058, 0xb8a0, 0x2028, 0xb910, 0xba14, 0x737c, 0x7480,
+	0x7820, 0x0002, 0x9d81, 0x9d81, 0x9d81, 0x9d81, 0x9d81, 0x9d81,
+	0x9d81, 0x9d81, 0x9d81, 0x9d81, 0x9d83, 0x9d81, 0x9d81, 0x9d81,
+	0x9d81, 0x080c, 0x0d7d, 0xb884, 0x609e, 0x7814, 0x2048, 0xa87c,
+	0xd0fc, 0x0558, 0xaf90, 0x9784, 0xff00, 0x9105, 0x6062, 0x873f,
+	0x9784, 0xff00, 0x0006, 0x7814, 0x2048, 0xa878, 0xc0fc, 0x9005,
+	0x000e, 0x1160, 0xaf94, 0x87ff, 0x0198, 0x2039, 0x0098, 0x9705,
+	0x6072, 0x7808, 0x6082, 0x2f00, 0x6086, 0x0038, 0x9185, 0x2200,
+	0x6062, 0x6073, 0x0129, 0x6077, 0x0000, 0xb884, 0x609e, 0x0050,
+	0x2039, 0x0029, 0x9705, 0x6072, 0x0cc0, 0x9185, 0x0200, 0x6062,
+	0x6073, 0x2029, 0xa87c, 0xd0fc, 0x0118, 0xaf94, 0x87ff, 0x1120,
+	0x2f00, 0x6082, 0x7808, 0x6086, 0x6266, 0x636a, 0x646e, 0x6077,
+	0x0000, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a,
+	0x607f, 0x0000, 0xa848, 0x608a, 0xa844, 0x608e, 0xa838, 0x60c6,
+	0xa834, 0x60ca, 0xb86c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000,
+	0x080c, 0xa670, 0x2009, 0x07d0, 0x60c4, 0x9084, 0xfff0, 0x9005,
+	0x0110, 0x2009, 0x1b58, 0x080c, 0x86fb, 0x003e, 0x004e, 0x005e,
+	0x00ce, 0x00de, 0x00ee, 0x009e, 0x00be, 0x0005, 0x7a40, 0x9294,
+	0x00ff, 0x8217, 0x0005, 0x00d6, 0x2069, 0x19e7, 0x686b, 0x0001,
+	0x00de, 0x0005, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x00f1, 0x080c,
+	0x86ed, 0x0005, 0x0016, 0x2001, 0x180c, 0x200c, 0x9184, 0x0600,
+	0x9086, 0x0600, 0x0128, 0x0089, 0x080c, 0x86ed, 0x001e, 0x0005,
+	0xc1e5, 0x2001, 0x180c, 0x2102, 0x2001, 0x19e8, 0x2003, 0x0000,
+	0x2001, 0x19f3, 0x2003, 0x0000, 0x0c88, 0x0006, 0x0016, 0x0026,
+	0x2009, 0x1804, 0x2011, 0x0009, 0x080c, 0x2a53, 0x002e, 0x001e,
+	0x000e, 0x0005, 0x0016, 0x00c6, 0x0006, 0x080c, 0xa8f4, 0x0106,
+	0x190c, 0xa896, 0x2061, 0x0100, 0x61a4, 0x60a7, 0x95f5, 0x0016,
+	0x0026, 0x2009, 0x1804, 0x2011, 0x0008, 0x080c, 0x2a53, 0x002e,
+	0x001e, 0x010e, 0x190c, 0xa8b2, 0x000e, 0xa001, 0xa001, 0xa001,
+	0x61a6, 0x00ce, 0x001e, 0x0005, 0x00c6, 0x00d6, 0x0016, 0x0026,
+	0x2061, 0x0100, 0x2069, 0x0140, 0x080c, 0x74e9, 0x1510, 0x2001,
+	0x1a0c, 0x2004, 0x9005, 0x1904, 0x9eb3, 0x080c, 0x758a, 0x11a8,
+	0x2069, 0x0380, 0x6843, 0x0101, 0x6844, 0xd084, 0x1de8, 0x2061,
+	0x0100, 0x6020, 0xd0b4, 0x1120, 0x6024, 0xd084, 0x090c, 0x0d7d,
+	0x6843, 0x0100, 0x080c, 0x86ed, 0x04b0, 0x00c6, 0x2061, 0x19e7,
+	0x00f0, 0x6904, 0x9194, 0x4000, 0x0598, 0x080c, 0x9e32, 0x080c,
+	0x2a1a, 0x00c6, 0x2061, 0x19e7, 0x6134, 0x9192, 0x0008, 0x1278,
+	0x8108, 0x6136, 0x080c, 0xa896, 0x6130, 0x080c, 0xa8b2, 0x00ce,
+	0x81ff, 0x01c8, 0x080c, 0x86ed, 0x080c, 0x9e25, 0x00a0, 0x080c,
+	0xa896, 0x6130, 0x91e5, 0x0000, 0x0150, 0x080c, 0xe717, 0x080c,
+	0x86f6, 0x6003, 0x0001, 0x2009, 0x0014, 0x080c, 0xac8c, 0x080c,
+	0xa8b2, 0x00ce, 0x0000, 0x002e, 0x001e, 0x00de, 0x00ce, 0x0005,
+	0x2001, 0x1a0c, 0x2004, 0x9005, 0x1db0, 0x00c6, 0x2061, 0x19e7,
+	0x6134, 0x9192, 0x0003, 0x1ad8, 0x8108, 0x6136, 0x00ce, 0x080c,
+	0x86ed, 0x080c, 0x5ee4, 0x2009, 0x1846, 0x2114, 0x8210, 0x220a,
+	0x0c10, 0x0096, 0x00c6, 0x00d6, 0x00e6, 0x0016, 0x0026, 0x080c,
+	0x8703, 0x080c, 0xa896, 0x2001, 0x0387, 0x2003, 0x0202, 0x2071,
+	0x19e7, 0x714c, 0x81ff, 0x0904, 0x9f5b, 0x2061, 0x0100, 0x2069,
+	0x0140, 0x080c, 0x74e9, 0x1510, 0x0036, 0x2019, 0x0002, 0x080c,
+	0xa118, 0x003e, 0x714c, 0x2160, 0x080c, 0xe717, 0x2009, 0x004a,
+	0x6220, 0x9296, 0x0009, 0x1130, 0x6114, 0x2148, 0xa87b, 0x0006,
+	0x2009, 0x004a, 0x6003, 0x0003, 0x080c, 0xac8c, 0x2001, 0x0386,
+	0x2003, 0x5040, 0x080c, 0x758a, 0x0804, 0x9f5b, 0x6904, 0xd1f4,
+	0x0904, 0x9f68, 0x080c, 0x2a1a, 0x00c6, 0x704c, 0x9065, 0x090c,
+	0x0d7d, 0x6020, 0x00ce, 0x9086, 0x0006, 0x1518, 0x61c8, 0x60c4,
+	0x9105, 0x11f8, 0x2009, 0x180c, 0x2104, 0xd0d4, 0x01d0, 0x6214,
+	0x9294, 0x1800, 0x1128, 0x6224, 0x9294, 0x0002, 0x1560, 0x0010,
+	0xc0d4, 0x200a, 0x6014, 0x9084, 0xe7fd, 0x9085, 0x0010, 0x6016,
+	0x704c, 0x2060, 0x080c, 0x963b, 0x2009, 0x0049, 0x080c, 0xac8c,
+	0x00d0, 0x0036, 0x2019, 0x0001, 0x080c, 0xa118, 0x003e, 0x714c,
+	0x2160, 0x080c, 0xe717, 0x2009, 0x004a, 0x6220, 0x9296, 0x0009,
+	0x1130, 0x6114, 0x2148, 0xa87b, 0x0006, 0x2009, 0x004a, 0x6003,
+	0x0003, 0x080c, 0xac8c, 0x2001, 0x0387, 0x2003, 0x0200, 0x080c,
+	0xa8b2, 0x002e, 0x001e, 0x00ee, 0x00de, 0x00ce, 0x009e, 0x0005,
+	0xd1ec, 0x1904, 0x9f12, 0x0804, 0x9f14, 0x0026, 0x00e6, 0x2071,
+	0x19e7, 0x706c, 0xd084, 0x01e8, 0xc084, 0x706e, 0x714c, 0x81ff,
+	0x01c0, 0x2071, 0x0100, 0x9188, 0x0008, 0x2114, 0x928e, 0x0006,
+	0x1138, 0x2009, 0x1984, 0x2011, 0x0012, 0x080c, 0x2a53, 0x0048,
+	0x928e, 0x0009, 0x0db0, 0x2009, 0x1984, 0x2011, 0x0016, 0x080c,
+	0x2a53, 0x00ee, 0x002e, 0x0005, 0x9036, 0x2001, 0x19f1, 0x2004,
+	0x9005, 0x0128, 0x9c06, 0x0128, 0x2c30, 0x600c, 0x0cc8, 0x9085,
+	0x0001, 0x0005, 0x00f6, 0x2079, 0x19e7, 0x610c, 0x9006, 0x600e,
+	0x6044, 0xc0fc, 0x6046, 0x86ff, 0x1140, 0x7824, 0x9c06, 0x1118,
+	0x7826, 0x782a, 0x0050, 0x792a, 0x0040, 0x00c6, 0x2660, 0x610e,
+	0x00ce, 0x7824, 0x9c06, 0x1108, 0x7e26, 0x080c, 0xa20e, 0x080c,
+	0xca27, 0x00fe, 0x0005, 0x080c, 0x9a9f, 0x7003, 0x1200, 0x7838,
+	0x7012, 0x783c, 0x7016, 0x00c6, 0x7820, 0x9086, 0x0004, 0x1148,
+	0x7810, 0x9005, 0x0130, 0x00b6, 0x2058, 0xb810, 0xb914, 0x00be,
+	0x0020, 0x2061, 0x1800, 0x607c, 0x6180, 0x9084, 0x00ff, 0x700a,
+	0x710e, 0x00ce, 0x60c3, 0x002c, 0x0804, 0x9e02, 0x080c, 0x9a9f,
+	0x7003, 0x0f00, 0x7808, 0xd09c, 0x0128, 0xb810, 0x9084, 0x00ff,
+	0x700a, 0xb814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x9e02, 0x0156,
+	0x080c, 0x9aea, 0x7003, 0x0200, 0x080c, 0x87bb, 0x20a9, 0x0006,
+	0x2011, 0xfff4, 0x2019, 0xfff5, 0x9ef0, 0x0002, 0x2305, 0x2072,
+	0x8e70, 0x2205, 0x2072, 0x8e70, 0x9398, 0x0002, 0x9290, 0x0002,
+	0x1f04, 0xa006, 0x60c3, 0x001c, 0x015e, 0x0804, 0x9e02, 0x0016,
+	0x0026, 0x080c, 0x9ac6, 0x080c, 0x9ad8, 0x9e80, 0x0004, 0x20e9,
+	0x0000, 0x20a0, 0x7814, 0x0096, 0x2048, 0xa800, 0x2048, 0xa860,
+	0x20e0, 0xa85c, 0x9080, 0x0021, 0x2098, 0x009e, 0x7808, 0x9088,
+	0x0002, 0x21a8, 0x9192, 0x0010, 0x1250, 0x4003, 0x9080, 0x0004,
+	0x8003, 0x60c2, 0x080c, 0x9e02, 0x002e, 0x001e, 0x0005, 0x20a9,
+	0x0010, 0x4003, 0x080c, 0xa67b, 0x20a1, 0x0240, 0x22a8, 0x4003,
+	0x0c68, 0x080c, 0x9a9f, 0x7003, 0x6200, 0x7808, 0x700e, 0x60c3,
+	0x0008, 0x0804, 0x9e02, 0x0016, 0x0026, 0x080c, 0x9a9f, 0x20e9,
+	0x0000, 0x20a1, 0x024c, 0x7814, 0x0096, 0x2048, 0xa800, 0x2048,
+	0xa860, 0x20e0, 0xa85c, 0x9080, 0x0023, 0x2098, 0x009e, 0x7808,
+	0x9088, 0x0002, 0x21a8, 0x4003, 0x8003, 0x60c2, 0x080c, 0x9e02,
+	0x002e, 0x001e, 0x0005, 0x00e6, 0x00c6, 0x0006, 0x0126, 0x2091,
+	0x8000, 0x2071, 0x19e7, 0x7010, 0x2060, 0x8cff, 0x0188, 0x080c,
+	0xca4d, 0x1110, 0x080c, 0xb5b5, 0x600c, 0x0006, 0x080c, 0xccc4,
+	0x600f, 0x0000, 0x080c, 0xabed, 0x080c, 0xa20e, 0x00ce, 0x0c68,
+	0x2c00, 0x7012, 0x700e, 0x012e, 0x000e, 0x00ce, 0x00ee, 0x0005,
+	0x0126, 0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026,
+	0x0016, 0x0006, 0x2091, 0x8000, 0x2001, 0x180c, 0x200c, 0x918c,
+	0xe7ff, 0x2102, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x19e7,
+	0x7030, 0x2060, 0x8cff, 0x0548, 0x080c, 0x9e32, 0x6ac0, 0x68c3,
+	0x0000, 0x080c, 0x86f6, 0x00c6, 0x2061, 0x0100, 0x080c, 0xa7cc,
+	0x00ce, 0x20a9, 0x01f4, 0x04b1, 0x080c, 0x95de, 0x6044, 0xd0ac,
+	0x1128, 0x2001, 0x1988, 0x2004, 0x604a, 0x0020, 0x2009, 0x0013,
+	0x080c, 0xac8c, 0x000e, 0x001e, 0x002e, 0x006e, 0x00ce, 0x00de,
+	0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x2001, 0x1800, 0x2004,
+	0x9096, 0x0001, 0x0d78, 0x9096, 0x0004, 0x0d60, 0x080c, 0x86f6,
+	0x6814, 0x9084, 0x0001, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008,
+	0x68c3, 0x0000, 0x2011, 0x5e8e, 0x080c, 0x863e, 0x20a9, 0x01f4,
+	0x0009, 0x08c0, 0x6824, 0xd094, 0x0140, 0x6827, 0x0004, 0x7804,
+	0x9084, 0x4000, 0x190c, 0x2a1a, 0x0090, 0xd084, 0x0118, 0x6827,
+	0x0001, 0x0010, 0x1f04, 0xa0fa, 0x7804, 0x9084, 0x1000, 0x0138,
+	0x2001, 0x0100, 0x080c, 0x2a0a, 0x9006, 0x080c, 0x2a0a, 0x0005,
+	0x0126, 0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026,
+	0x0016, 0x0006, 0x2091, 0x8000, 0x2001, 0x180c, 0x200c, 0x918c,
+	0xdbff, 0x2102, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x0380,
+	0x701c, 0x0006, 0x701f, 0x0202, 0x2071, 0x19e7, 0x704c, 0x2060,
+	0x8cff, 0x0904, 0xa1bd, 0x9386, 0x0002, 0x1128, 0x6814, 0x9084,
+	0x0002, 0x0904, 0xa1bd, 0x68af, 0x95f5, 0x6817, 0x0010, 0x2009,
+	0x00fa, 0x8109, 0x1df0, 0x69c6, 0x68cb, 0x0008, 0x080c, 0x8703,
+	0x080c, 0x1dd8, 0x0046, 0x2009, 0x00a5, 0x080c, 0x0e55, 0x2021,
+	0x0169, 0x2404, 0x9084, 0x000f, 0x9086, 0x0004, 0x11f8, 0x68af,
+	0x95f5, 0x68c6, 0x68cb, 0x0008, 0x00e6, 0x00f6, 0x2079, 0x0090,
+	0x2071, 0x19e7, 0x6814, 0x9084, 0x1984, 0x9085, 0x0012, 0x6816,
+	0x782b, 0x0008, 0x7057, 0x0000, 0x00fe, 0x00ee, 0x9386, 0x0002,
+	0x1128, 0x7884, 0x9005, 0x1110, 0x7887, 0x0001, 0x0016, 0x2009,
+	0x0040, 0x080c, 0x21b0, 0x001e, 0x2009, 0x0000, 0x080c, 0x0e55,
+	0x004e, 0x20a9, 0x03e8, 0x6824, 0xd094, 0x0140, 0x6827, 0x0004,
+	0x7804, 0x9084, 0x4000, 0x190c, 0x2a1a, 0x0090, 0xd08c, 0x0118,
+	0x6827, 0x0002, 0x0010, 0x1f04, 0xa18b, 0x7804, 0x9084, 0x1000,
+	0x0138, 0x2001, 0x0100, 0x080c, 0x2a0a, 0x9006, 0x080c, 0x2a0a,
+	0x6827, 0x4000, 0x6824, 0x83ff, 0x1180, 0x2009, 0x0049, 0x6020,
+	0x9086, 0x0009, 0x0150, 0x080c, 0x963b, 0x6044, 0xd0ac, 0x1118,
+	0x6003, 0x0002, 0x0010, 0x080c, 0xac8c, 0x000e, 0x2071, 0x0380,
+	0xd08c, 0x1110, 0x701f, 0x0200, 0x000e, 0x001e, 0x002e, 0x006e,
+	0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x00d6,
+	0x0126, 0x2091, 0x8000, 0x2069, 0x19e7, 0x6a06, 0x012e, 0x00de,
+	0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, 0x19e7, 0x6a3e,
+	0x012e, 0x00de, 0x0005, 0x080c, 0x9bed, 0x785c, 0x7032, 0x7042,
+	0x7047, 0x1000, 0x00f8, 0x080c, 0x9bed, 0x785c, 0x7032, 0x7042,
+	0x7047, 0x4000, 0x00b8, 0x080c, 0x9bed, 0x785c, 0x7032, 0x7042,
+	0x7047, 0x2000, 0x0078, 0x080c, 0x9bed, 0x785c, 0x7032, 0x7042,
+	0x7047, 0x0400, 0x0038, 0x080c, 0x9bed, 0x785c, 0x7032, 0x7042,
+	0x7047, 0x0200, 0x60c3, 0x0020, 0x0804, 0x9e02, 0x00e6, 0x2071,
+	0x19e7, 0x702c, 0x9005, 0x0110, 0x8001, 0x702e, 0x00ee, 0x0005,
+	0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066, 0x0006, 0x0126,
+	0x2091, 0x8000, 0x2071, 0x19e7, 0x7620, 0x2660, 0x2678, 0x2039,
+	0x0001, 0x87ff, 0x0904, 0xa2b3, 0x8cff, 0x0904, 0xa2b3, 0x6020,
+	0x9086, 0x0006, 0x1904, 0xa2ae, 0x88ff, 0x0138, 0x2800, 0x9c06,
+	0x1904, 0xa2ae, 0x2039, 0x0000, 0x0050, 0x6010, 0x9b06, 0x1904,
+	0xa2ae, 0x85ff, 0x0120, 0x605c, 0x9106, 0x1904, 0xa2ae, 0x7030,
+	0x9c06, 0x15b0, 0x2069, 0x0100, 0x68c0, 0x9005, 0x1160, 0x6824,
+	0xd084, 0x0148, 0x6827, 0x0001, 0x080c, 0x86f6, 0x080c, 0xa338,
+	0x7033, 0x0000, 0x0428, 0x080c, 0x86f6, 0x6820, 0xd0b4, 0x0110,
+	0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000, 0x080c, 0xa338,
 	0x7033, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000,
 	0x0138, 0x2001, 0x0100, 0x080c, 0x2a0a, 0x9006, 0x080c, 0x2a0a,
 	0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e,
-	0x7010, 0x9c36, 0x1110, 0x660c, 0x7612, 0x700c, 0x9c36, 0x1140,
-	0x2c00, 0x9f36, 0x0118, 0x2f00, 0x700e, 0x0010, 0x700f, 0x0000,
+	0x7020, 0x9c36, 0x1110, 0x660c, 0x7622, 0x701c, 0x9c36, 0x1140,
+	0x2c00, 0x9f36, 0x0118, 0x2f00, 0x701e, 0x0010, 0x701f, 0x0000,
 	0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678,
-	0x600f, 0x0000, 0x080c, 0xca18, 0x1158, 0x080c, 0x3215, 0x080c,
-	0xca29, 0x11f0, 0x080c, 0xb591, 0x00d8, 0x080c, 0xa314, 0x08c0,
-	0x080c, 0xca29, 0x1118, 0x080c, 0xb591, 0x0090, 0x6014, 0x2048,
-	0x080c, 0xc812, 0x0168, 0x6020, 0x9086, 0x0003, 0x1508, 0xa867,
-	0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x6d64, 0x080c, 0xca03,
-	0x080c, 0xcca0, 0x080c, 0xac04, 0x080c, 0xa1ea, 0x00ce, 0x0804,
-	0xa376, 0x2c78, 0x600c, 0x2060, 0x0804, 0xa376, 0x012e, 0x000e,
-	0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x009e, 0x0005,
-	0x6020, 0x9086, 0x0006, 0x1d20, 0x080c, 0xe241, 0x0c08, 0x00d6,
-	0x080c, 0x9ab9, 0x7003, 0x0200, 0x7007, 0x0014, 0x60c3, 0x0014,
-	0x20e1, 0x0001, 0x2099, 0x1989, 0x20e9, 0x0000, 0x20a1, 0x0250,
-	0x20a9, 0x0004, 0x4003, 0x7023, 0x0004, 0x7027, 0x7878, 0x080c,
-	0x9dde, 0x00de, 0x0005, 0x080c, 0x9ab9, 0x700b, 0x0800, 0x7814,
-	0x9084, 0xff00, 0x700e, 0x7814, 0x9084, 0x00ff, 0x7022, 0x782c,
-	0x7026, 0x7860, 0x9084, 0x00ff, 0x9085, 0x0200, 0x7002, 0x7860,
-	0x9084, 0xff00, 0x8007, 0x7006, 0x60c2, 0x0804, 0x9dde, 0x00b6,
-	0x00d6, 0x0016, 0x00d6, 0x2f68, 0x2009, 0x0035, 0x080c, 0xcea6,
-	0x00de, 0x1904, 0xa4a4, 0x080c, 0x9a6e, 0x7003, 0x1300, 0x782c,
-	0x080c, 0xa5af, 0x2068, 0x6820, 0x9086, 0x0003, 0x0560, 0x7810,
-	0x2058, 0xbaa0, 0x080c, 0xab33, 0x11d8, 0x9286, 0x007e, 0x1128,
-	0x700b, 0x00ff, 0x700f, 0xfffe, 0x0498, 0x9286, 0x007f, 0x1128,
-	0x700b, 0x00ff, 0x700f, 0xfffd, 0x0458, 0x9284, 0xff80, 0x0180,
-	0x9286, 0x0080, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffc, 0x0400,
-	0x92d8, 0x1000, 0x2b5c, 0xb810, 0x700a, 0xb814, 0x700e, 0x00c0,
-	0xb884, 0x700e, 0x00a8, 0x080c, 0xab33, 0x1130, 0x7810, 0x2058,
-	0xb8a0, 0x9082, 0x007e, 0x0250, 0x00d6, 0x2069, 0x181f, 0x2d04,
-	0x700a, 0x8d68, 0x2d04, 0x700e, 0x00de, 0x0010, 0x6034, 0x700e,
-	0x7838, 0x7012, 0x783c, 0x7016, 0x60c3, 0x000c, 0x001e, 0x00de,
-	0x080c, 0x9dde, 0x00be, 0x0005, 0x781b, 0x0001, 0x7803, 0x0006,
-	0x001e, 0x00de, 0x00be, 0x0005, 0x792c, 0x9180, 0x0008, 0x200c,
-	0x9186, 0x0006, 0x01c0, 0x9186, 0x0003, 0x0904, 0xa522, 0x9186,
-	0x0005, 0x0904, 0xa50a, 0x9186, 0x0004, 0x05f0, 0x9186, 0x0008,
-	0x0904, 0xa513, 0x7807, 0x0037, 0x782f, 0x0003, 0x7817, 0x1700,
-	0x080c, 0xa58c, 0x0005, 0x080c, 0xa54d, 0x00d6, 0x0026, 0x792c,
-	0x2168, 0x2009, 0x4000, 0x6800, 0x6a44, 0xd2fc, 0x11f8, 0x0002,
-	0xa4eb, 0xa4f6, 0xa4ed, 0xa4f6, 0xa4f2, 0xa4eb, 0xa4eb, 0xa4f6,
-	0xa4f6, 0xa4f6, 0xa4f6, 0xa4eb, 0xa4eb, 0xa4eb, 0xa4eb, 0xa4eb,
-	0xa4f6, 0xa4eb, 0xa4f6, 0x080c, 0x0d7d, 0x6824, 0xd0e4, 0x0110,
-	0xd0cc, 0x0110, 0x900e, 0x0010, 0x2009, 0x2000, 0x682c, 0x7022,
-	0x6830, 0x7026, 0x0804, 0xa546, 0x080c, 0xa54d, 0x00d6, 0x0026,
-	0x792c, 0x2168, 0x2009, 0x4000, 0x6a00, 0x9286, 0x0002, 0x1108,
-	0x900e, 0x04e0, 0x080c, 0xa54d, 0x00d6, 0x0026, 0x792c, 0x2168,
-	0x2009, 0x4000, 0x0498, 0x04c9, 0x00d6, 0x0026, 0x792c, 0x2168,
-	0x2009, 0x4000, 0x9286, 0x0005, 0x0118, 0x9286, 0x0002, 0x1108,
-	0x900e, 0x0420, 0x0451, 0x00d6, 0x0026, 0x792c, 0x2168, 0x6814,
-	0x0096, 0x2048, 0xa9ac, 0xa834, 0x9112, 0xa9b0, 0xa838, 0x009e,
-	0x9103, 0x7022, 0x7226, 0x792c, 0x9180, 0x0011, 0x2004, 0xd0fc,
-	0x1148, 0x9180, 0x0000, 0x2004, 0x908e, 0x0002, 0x0130, 0x908e,
-	0x0004, 0x0118, 0x2009, 0x4000, 0x0008, 0x900e, 0x712a, 0x60c3,
-	0x0018, 0x002e, 0x00de, 0x0804, 0x9dde, 0x00b6, 0x0036, 0x0046,
-	0x0056, 0x0066, 0x080c, 0x9ab9, 0x9006, 0x7003, 0x0200, 0x7938,
-	0x710a, 0x793c, 0x710e, 0x7810, 0x2058, 0xb8a0, 0x080c, 0xab33,
-	0x1118, 0x9092, 0x007e, 0x0268, 0x00d6, 0x2069, 0x181f, 0x2d2c,
-	0x8d68, 0x2d34, 0x90d8, 0x1000, 0x2b5c, 0xbb10, 0xbc14, 0x00de,
-	0x0028, 0x901e, 0xbc84, 0x2029, 0x0000, 0x6634, 0x782c, 0x9080,
-	0x0008, 0x2004, 0x9086, 0x0003, 0x1128, 0x7512, 0x7616, 0x731a,
-	0x741e, 0x0020, 0x7312, 0x7416, 0x751a, 0x761e, 0x006e, 0x005e,
-	0x004e, 0x003e, 0x00be, 0x0005, 0x080c, 0x9ab9, 0x7003, 0x0100,
-	0x782c, 0x700a, 0x7814, 0x700e, 0x700e, 0x60c3, 0x0008, 0x0804,
-	0x9dde, 0x080c, 0x9a65, 0x7003, 0x1400, 0x7838, 0x700a, 0x0079,
-	0x783c, 0x700e, 0x782c, 0x7012, 0x7830, 0x7016, 0x7834, 0x9084,
-	0x00ff, 0x8007, 0x701a, 0x60c3, 0x0010, 0x0804, 0x9dde, 0x00e6,
-	0x2071, 0x0240, 0x0006, 0x00f6, 0x2078, 0x7810, 0x00b6, 0x2058,
-	0xb8d4, 0xd084, 0x0120, 0x7850, 0x702a, 0x784c, 0x702e, 0x00be,
-	0x00fe, 0x000e, 0x00ee, 0x0005, 0x080c, 0x9ab0, 0x7003, 0x0100,
-	0x782c, 0x700a, 0x7814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x9dde,
-	0x00a9, 0x7914, 0x712a, 0x60c3, 0x0000, 0x60a7, 0x9575, 0x0026,
-	0x080c, 0x2979, 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012,
-	0x002e, 0x080c, 0x9e01, 0x080c, 0x86bc, 0x0005, 0x0036, 0x0096,
-	0x00d6, 0x00e6, 0x7860, 0x2048, 0xaa7c, 0x9296, 0x00c0, 0x9294,
-	0xfffd, 0xaa7e, 0xaa80, 0x9294, 0x0300, 0xaa82, 0xa96c, 0x9194,
-	0x00ff, 0xab74, 0x9384, 0x00ff, 0x908d, 0xc200, 0xa96e, 0x9384,
-	0xff00, 0x9215, 0xaa76, 0xa870, 0xaa78, 0xa87a, 0xaa72, 0x00d6,
-	0x2069, 0x0200, 0x080c, 0xa66c, 0x00de, 0x20e9, 0x0000, 0x20a1,
-	0x0240, 0x20a9, 0x000a, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x001b,
-	0x2098, 0x4003, 0x60a3, 0x0035, 0xaa68, 0x9294, 0x7000, 0x9286,
-	0x3000, 0x0110, 0x60a3, 0x0037, 0x00ee, 0x00de, 0x009e, 0x003e,
-	0x0005, 0x900e, 0x7814, 0x0096, 0x2048, 0xa87c, 0xd0fc, 0x01c0,
-	0x9084, 0x0003, 0x11a8, 0x2001, 0x180c, 0x2004, 0xd0bc, 0x0180,
-	0x7824, 0xd0cc, 0x1168, 0xd0c4, 0x1158, 0xa8a8, 0x9005, 0x1140,
-	0x2001, 0x180c, 0x200c, 0xc1d5, 0x2102, 0x2009, 0x19b2, 0x210c,
-	0x009e, 0x918d, 0x0092, 0x0010, 0x2009, 0x0096, 0x60ab, 0x0036,
-	0x0026, 0x2110, 0x900e, 0x080c, 0x2a53, 0x002e, 0x0005, 0x2009,
-	0x0009, 0x00a0, 0x2009, 0x000a, 0x0088, 0x2009, 0x000b, 0x0070,
-	0x2009, 0x000c, 0x0058, 0x2009, 0x000d, 0x0040, 0x2009, 0x000e,
-	0x0028, 0x2009, 0x000f, 0x0010, 0x2009, 0x0008, 0x6912, 0x0005,
-	0x080c, 0x9a6e, 0x0016, 0x0026, 0x0096, 0x00d6, 0x7814, 0x2048,
-	0x7013, 0x0138, 0x2001, 0x1837, 0x2004, 0x9084, 0x0028, 0x1138,
-	0x2001, 0x197c, 0x2004, 0x9086, 0xaaaa, 0x1904, 0xa711, 0x7003,
-	0x5400, 0x00c6, 0x2061, 0x1800, 0x607c, 0x9084, 0x00ff, 0xa998,
-	0x810f, 0x918c, 0xff00, 0x9105, 0x700a, 0x6080, 0x700e, 0xa998,
-	0x918c, 0xff00, 0x7112, 0x20a9, 0x0004, 0x2009, 0x1805, 0x2e10,
-	0x9290, 0x0006, 0x2104, 0x2012, 0x8108, 0x8210, 0x1f04, 0xa6a2,
-	0x20a9, 0x0004, 0x2009, 0x1801, 0x2104, 0x2012, 0x8108, 0x8210,
-	0x1f04, 0xa6ac, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0029, 0x2098,
-	0x2009, 0x0006, 0x20a9, 0x0001, 0x4002, 0x8007, 0x2012, 0x8210,
-	0x8109, 0x1dc0, 0x00d6, 0x2069, 0x0200, 0x080c, 0xa657, 0x00de,
-	0x2071, 0x0240, 0x2011, 0x0240, 0x2009, 0x0002, 0x20a9, 0x0001,
-	0x4002, 0x8007, 0x2012, 0x8210, 0x8109, 0x1dc0, 0x2009, 0x0008,
-	0x20a9, 0x0001, 0x4002, 0x8007, 0x2012, 0x8210, 0x8109, 0x1dc0,
-	0xa85c, 0x9080, 0x0031, 0x2098, 0x2009, 0x0008, 0x20a9, 0x0001,
-	0x4002, 0x8007, 0x2012, 0x8210, 0x8109, 0x1dc0, 0x00ce, 0x60c3,
-	0x004c, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x2001, 0x1837, 0x2004,
-	0x9084, 0x0028, 0x1168, 0x080c, 0x74d5, 0x0150, 0x6028, 0xc0bd,
-	0x602a, 0x2009, 0x1804, 0x2011, 0x0029, 0x080c, 0x2a53, 0x0010,
-	0x080c, 0x9dde, 0x080c, 0x86bc, 0x00de, 0x009e, 0x002e, 0x001e,
-	0x0005, 0x00e6, 0x2071, 0x0240, 0x2001, 0x2200, 0x9085, 0x00ff,
-	0x7002, 0x7007, 0xffff, 0x2071, 0x0100, 0x709b, 0x00ff, 0x00ee,
-	0x0804, 0xa687, 0x080c, 0x9a6e, 0x0016, 0x0026, 0x0096, 0x00d6,
-	0x7814, 0x2048, 0x7013, 0x0138, 0x7003, 0x5500, 0x00c6, 0xa89c,
-	0x9084, 0x00ff, 0xa998, 0x810f, 0x918c, 0xff00, 0x9105, 0x700a,
-	0xa99c, 0x918c, 0xff00, 0xa8a0, 0x9084, 0x00ff, 0x9105, 0x700e,
-	0xa998, 0x918c, 0xff00, 0x2061, 0x1800, 0x607c, 0x9084, 0x00ff,
-	0x910d, 0x7112, 0x6180, 0x7116, 0x2009, 0x0008, 0xa860, 0x20e0,
-	0xa85c, 0x9080, 0x0029, 0x2098, 0x2e10, 0x9290, 0x0006, 0x20a9,
-	0x0001, 0x4002, 0x8007, 0x2012, 0x8210, 0x8109, 0x1dc0, 0x20a9,
-	0x0004, 0x2009, 0x1805, 0x2104, 0x2012, 0x8108, 0x8210, 0x1f04,
-	0xa763, 0x20a9, 0x0002, 0x2009, 0x1801, 0x2104, 0x2012, 0x8108,
-	0x8210, 0x1f04, 0xa76d, 0x00d6, 0x0016, 0x2069, 0x0200, 0x080c,
-	0xa657, 0x001e, 0x00de, 0x2071, 0x0240, 0x20a9, 0x0002, 0x2009,
-	0x1803, 0x2011, 0x0240, 0x2104, 0x2012, 0x8108, 0x8210, 0x1f04,
-	0xa783, 0x2009, 0x0008, 0x4002, 0x8007, 0x2012, 0x8210, 0x8109,
-	0x1dd0, 0x9006, 0x20a9, 0x0008, 0x2012, 0x8210, 0x1f04, 0xa794,
-	0x00ce, 0x60c3, 0x004c, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c,
-	0x9dde, 0x080c, 0x86bc, 0x00de, 0x009e, 0x002e, 0x001e, 0x0005,
-	0x00d6, 0x9290, 0x0018, 0x8214, 0x20e9, 0x0000, 0x2069, 0x0200,
-	0x6813, 0x0000, 0x22a8, 0x9284, 0x00e0, 0x0128, 0x20a9, 0x0020,
-	0x9292, 0x0020, 0x0008, 0x9016, 0x20a1, 0x0240, 0x9006, 0x4004,
-	0x82ff, 0x0120, 0x6810, 0x8000, 0x6812, 0x0c60, 0x00de, 0x0005,
-	0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x00a6, 0x0096, 0x0066, 0x0126,
-	0x2091, 0x8000, 0x2071, 0x19e7, 0x7610, 0x2660, 0x2678, 0x8cff,
-	0x0904, 0xa84f, 0x7030, 0x9c06, 0x1520, 0x2069, 0x0100, 0x68c0,
-	0x9005, 0x0904, 0xa826, 0x080c, 0x9e0e, 0x68c3, 0x0000, 0x080c,
-	0xa314, 0x7033, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384,
-	0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2a0a, 0x9006, 0x080c,
-	0x2a0a, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001,
-	0x003e, 0x7010, 0x9c36, 0x1110, 0x660c, 0x7612, 0x700c, 0x9c36,
-	0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x700e, 0x0010, 0x700f,
-	0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008,
-	0x2678, 0x600f, 0x0000, 0x080c, 0xca18, 0x1158, 0x080c, 0x3215,
-	0x080c, 0xca29, 0x11f0, 0x080c, 0xb591, 0x00d8, 0x080c, 0xa314,
-	0x08c0, 0x080c, 0xca29, 0x1118, 0x080c, 0xb591, 0x0090, 0x6014,
-	0x2048, 0x080c, 0xc812, 0x0168, 0x6020, 0x9086, 0x0003, 0x1520,
-	0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x6d70, 0x080c,
-	0xca03, 0x080c, 0xcca0, 0x080c, 0xac04, 0x080c, 0xa1ea, 0x00ce,
-	0x0804, 0xa7d7, 0x2c78, 0x600c, 0x2060, 0x0804, 0xa7d7, 0x7013,
-	0x0000, 0x700f, 0x0000, 0x012e, 0x006e, 0x009e, 0x00ae, 0x00ce,
-	0x00de, 0x00ee, 0x00fe, 0x0005, 0x6020, 0x9086, 0x0006, 0x1d08,
-	0x080c, 0xe241, 0x08f0, 0x00f6, 0x0036, 0x2079, 0x0380, 0x7b18,
-	0xd3bc, 0x1de8, 0x7832, 0x7936, 0x7a3a, 0x781b, 0x8080, 0x003e,
-	0x00fe, 0x0005, 0x0016, 0x2001, 0x0382, 0x2004, 0x9084, 0x0007,
-	0x9086, 0x0001, 0x1188, 0x2001, 0x0015, 0x0c29, 0x2009, 0x1000,
-	0x2001, 0x0382, 0x2004, 0x9084, 0x0007, 0x9086, 0x0003, 0x0120,
-	0x8109, 0x1db0, 0x080c, 0x0d7d, 0x001e, 0x0005, 0x2001, 0x0382,
-	0x2004, 0x9084, 0x0007, 0x9086, 0x0003, 0x1120, 0x2001, 0x0380,
-	0x2003, 0x0001, 0x0005, 0x0156, 0x0016, 0x0026, 0x00e6, 0x900e,
-	0x2071, 0x19e7, 0x0469, 0x0106, 0x0190, 0x7004, 0x9086, 0x0003,
-	0x0148, 0x20a9, 0x1000, 0x6044, 0xd0fc, 0x01d8, 0x1f04, 0xa8ab,
-	0x080c, 0x0d7d, 0x080c, 0xa872, 0x6044, 0xd0fc, 0x0190, 0x7030,
-	0x9c06, 0x1148, 0x080c, 0x95ad, 0x6044, 0xd0dc, 0x0150, 0xc0dc,
-	0x6046, 0x700a, 0x7042, 0x704c, 0x9c06, 0x190c, 0x0d7d, 0x080c,
-	0x960a, 0x010e, 0x1919, 0x00ee, 0x002e, 0x001e, 0x015e, 0x0005,
-	0x2001, 0x0382, 0x2004, 0x9084, 0x0007, 0x9086, 0x0003, 0x0005,
-	0x0126, 0x2091, 0x2400, 0x7808, 0xd0a4, 0x190c, 0x0d76, 0xd09c,
-	0x0128, 0x7820, 0x908c, 0xf000, 0x11b8, 0x0012, 0x012e, 0x0005,
-	0xa8f8, 0xa936, 0xa95d, 0xa994, 0xa9a4, 0xa9b5, 0xa9c4, 0xa9d2,
-	0xa9ff, 0xaa03, 0xa8f8, 0xa8f8, 0xa8f8, 0xa8f8, 0xa8f8, 0xa8f8,
-	0x080c, 0x0d7d, 0x012e, 0x0005, 0x2060, 0x6044, 0xd0bc, 0x0140,
-	0xc0bc, 0x6046, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0d7d, 0x0012,
-	0x012e, 0x0005, 0xa91d, 0xa91f, 0xa91d, 0xa925, 0xa91d, 0xa91d,
-	0xa91d, 0xa91d, 0xa91d, 0xa91f, 0xa91d, 0xa91f, 0xa91d, 0xa91f,
-	0xa91d, 0xa91d, 0xa91d, 0xa91f, 0xa91d, 0x080c, 0x0d7d, 0x2009,
-	0x0013, 0x080c, 0xac68, 0x012e, 0x0005, 0x6014, 0x2048, 0xa87c,
-	0xd0dc, 0x0130, 0x080c, 0x8890, 0x080c, 0xabc9, 0x012e, 0x0005,
-	0x2009, 0x0049, 0x080c, 0xac68, 0x012e, 0x0005, 0x080c, 0xa872,
-	0x2001, 0x1a0c, 0x2003, 0x0000, 0x7030, 0x9065, 0x090c, 0x0d7d,
-	0x7034, 0x9092, 0x00c8, 0x1258, 0x8000, 0x7036, 0x7004, 0x9086,
-	0x0003, 0x0110, 0x7007, 0x0000, 0x781f, 0x0808, 0x0040, 0x080c,
-	0xe6ec, 0x6003, 0x0001, 0x2009, 0x0014, 0x080c, 0xac68, 0x781f,
-	0x0100, 0x080c, 0xa88e, 0x012e, 0x0005, 0x080c, 0xa872, 0x714c,
-	0x81ff, 0x1128, 0x2011, 0x1a0f, 0x2013, 0x0000, 0x0438, 0x2061,
-	0x0100, 0x7150, 0x9192, 0x7530, 0x12f0, 0x8108, 0x7152, 0x714c,
-	0x9188, 0x0008, 0x210c, 0x918e, 0x0006, 0x1138, 0x6014, 0x9084,
-	0x1984, 0x9085, 0x0012, 0x6016, 0x0088, 0x714c, 0x9188, 0x0008,
-	0x210c, 0x918e, 0x0009, 0x0d90, 0x6014, 0x9084, 0x1984, 0x9085,
-	0x0016, 0x6016, 0x0018, 0x706c, 0xc085, 0x706e, 0x781f, 0x0200,
-	0x080c, 0xa88e, 0x012e, 0x0005, 0x080c, 0xa872, 0x714c, 0x2160,
-	0x6003, 0x0003, 0x2009, 0x004a, 0x080c, 0xac68, 0x781f, 0x0200,
-	0x080c, 0xa88e, 0x012e, 0x0005, 0x7808, 0xd09c, 0x0de8, 0x7820,
-	0x2060, 0x6003, 0x0003, 0x080c, 0xa872, 0x080c, 0x1d60, 0x781f,
-	0x0400, 0x080c, 0xa88e, 0x012e, 0x0005, 0x7808, 0xd09c, 0x0de8,
-	0x7820, 0x2060, 0x080c, 0xa872, 0x080c, 0x1da8, 0x781f, 0x0400,
-	0x080c, 0xa88e, 0x012e, 0x0005, 0x7030, 0x9065, 0x0148, 0x6044,
-	0xc0bc, 0x6046, 0x7104, 0x9186, 0x0003, 0x0110, 0x080c, 0x9670,
-	0x012e, 0x0005, 0x00f6, 0x703c, 0x9086, 0x0002, 0x0528, 0x704c,
-	0x907d, 0x0510, 0x7844, 0xc0bc, 0x7846, 0x7820, 0x9086, 0x0009,
-	0x0118, 0x080c, 0x9d29, 0x00c0, 0x7828, 0xd0fc, 0x1118, 0x080c,
-	0x9ca8, 0x0090, 0x2001, 0x1837, 0x2004, 0x9084, 0x0028, 0x1130,
-	0x2001, 0x197c, 0x2004, 0x9086, 0xaaaa, 0x1120, 0x2001, 0x0387,
-	0x2003, 0x1000, 0x080c, 0x9c2d, 0x00fe, 0x012e, 0x0005, 0x080c,
-	0x7576, 0x012e, 0x0005, 0x080c, 0x0d7d, 0x0005, 0x00e6, 0x2071,
-	0x19e7, 0x6044, 0xc0bc, 0x6046, 0xd0fc, 0x01b8, 0x704c, 0x9c06,
-	0x1190, 0x2019, 0x0001, 0x080c, 0xa0f4, 0x704f, 0x0000, 0x2001,
-	0x0109, 0x2004, 0xd08c, 0x1138, 0x2001, 0x0108, 0x2004, 0xd0bc,
-	0x1110, 0x703f, 0x0000, 0x080c, 0xa32a, 0x00ee, 0x0005, 0x0026,
-	0x7010, 0x9c06, 0x1178, 0x080c, 0xa1ea, 0x6044, 0xc0fc, 0x6046,
-	0x600c, 0x9015, 0x0120, 0x7212, 0x600f, 0x0000, 0x0010, 0x7212,
-	0x720e, 0x9006, 0x002e, 0x0005, 0x0026, 0x7020, 0x9c06, 0x1178,
-	0x080c, 0xa1ea, 0x6044, 0xc0fc, 0x6046, 0x600c, 0x9015, 0x0120,
-	0x7222, 0x600f, 0x0000, 0x0010, 0x7222, 0x721e, 0x9006, 0x002e,
-	0x0005, 0x00d6, 0x0036, 0x7830, 0x9c06, 0x1558, 0x2069, 0x0100,
-	0x68c0, 0x9005, 0x01f8, 0x080c, 0x86c5, 0x080c, 0x9e0e, 0x68c3,
-	0x0000, 0x080c, 0xa314, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000,
-	0x0138, 0x2001, 0x0100, 0x080c, 0x2a0a, 0x9006, 0x080c, 0x2a0a,
-	0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x9085,
-	0x0001, 0x0038, 0x7808, 0xc0ad, 0x780a, 0x6003, 0x0009, 0x630a,
-	0x9006, 0x003e, 0x00de, 0x0005, 0x0016, 0x0026, 0x0036, 0x6100,
-	0x2019, 0x0100, 0x2001, 0x0382, 0x2004, 0xd09c, 0x0190, 0x00c6,
-	0x0126, 0x2091, 0x2800, 0x0016, 0x0036, 0x080c, 0xa8d8, 0x003e,
-	0x001e, 0x012e, 0x00ce, 0x6200, 0x2200, 0x9106, 0x0d58, 0x2200,
-	0x0010, 0x8319, 0x1d38, 0x003e, 0x002e, 0x001e, 0x0005, 0x00d6,
-	0x0156, 0x080c, 0x9ab9, 0x7a14, 0x82ff, 0x0138, 0x7003, 0x0100,
-	0x700b, 0x0003, 0x60c3, 0x0008, 0x0490, 0x7003, 0x0200, 0x7007,
-	0x0000, 0x2069, 0x1800, 0x901e, 0x6800, 0x9086, 0x0004, 0x1110,
-	0xc38d, 0x0060, 0x080c, 0x74d5, 0x1110, 0xc3ad, 0x0008, 0xc3a5,
-	0x6adc, 0xd29c, 0x1110, 0xd2ac, 0x0108, 0xc39d, 0x730e, 0x080c,
-	0x878a, 0x20a9, 0x0006, 0x2011, 0xfff4, 0x2019, 0xfff5, 0x2071,
-	0x0250, 0x2305, 0x2072, 0x8e70, 0x2205, 0x2072, 0x8e70, 0x9398,
-	0x0002, 0x9290, 0x0002, 0x1f04, 0xaad9, 0x60c3, 0x0020, 0x080c,
-	0x9dde, 0x015e, 0x00de, 0x0005, 0x0156, 0x080c, 0x9ab9, 0x7a14,
-	0x82ff, 0x0168, 0x9286, 0xffff, 0x0118, 0x9282, 0x000e, 0x1238,
-	0x7003, 0x0100, 0x700b, 0x0003, 0x60c3, 0x0008, 0x0488, 0x7003,
-	0x0200, 0x7007, 0x001c, 0x700f, 0x0001, 0x2011, 0x19bd, 0x2204,
-	0x8007, 0x701a, 0x8210, 0x2204, 0x8007, 0x701e, 0x0421, 0x1120,
-	0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001, 0x181f, 0x2004, 0x7022,
-	0x2001, 0x1820, 0x2004, 0x7026, 0x0030, 0x2001, 0x1818, 0x2004,
-	0x9084, 0x00ff, 0x7026, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099,
-	0x1805, 0x20e9, 0x0000, 0x20a1, 0x0256, 0x4003, 0x60c3, 0x001c,
-	0x015e, 0x0804, 0x9dde, 0x0006, 0x2001, 0x1837, 0x2004, 0xd0ac,
-	0x000e, 0x0005, 0x2011, 0x0003, 0x080c, 0xa1ab, 0x2011, 0x0002,
-	0x080c, 0xa1b5, 0x080c, 0xa074, 0x0036, 0x901e, 0x080c, 0xa0f4,
-	0x003e, 0x0005, 0x080c, 0x3366, 0x0188, 0x0016, 0x00b6, 0x00c6,
-	0x7010, 0x9085, 0x0020, 0x7012, 0x2009, 0x007e, 0x080c, 0x661e,
-	0xb85c, 0xc0ac, 0xb85e, 0x00ce, 0x00be, 0x001e, 0x0005, 0x2071,
-	0x188d, 0x7000, 0x9005, 0x0140, 0x2001, 0x0812, 0x2071, 0x1800,
-	0x7076, 0x707a, 0x706b, 0xffd4, 0x2071, 0x1800, 0x7074, 0x7056,
-	0x705b, 0x1ddc, 0x0005, 0x00e6, 0x0126, 0x2071, 0x1800, 0x2091,
-	0x8000, 0x7554, 0x9582, 0x0010, 0x0608, 0x7058, 0x2060, 0x6000,
-	0x9086, 0x0000, 0x0148, 0x9ce0, 0x001c, 0x7068, 0x9c02, 0x1208,
-	0x0cb0, 0x2061, 0x1ddc, 0x0c98, 0x6003, 0x0008, 0x8529, 0x7556,
-	0x9ca8, 0x001c, 0x7068, 0x9502, 0x1230, 0x755a, 0x9085, 0x0001,
-	0x012e, 0x00ee, 0x0005, 0x705b, 0x1ddc, 0x0cc0, 0x9006, 0x0cc0,
-	0x00e6, 0x2071, 0x1800, 0x7554, 0x9582, 0x0010, 0x0600, 0x7058,
-	0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, 0x001c, 0x7068,
-	0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1ddc, 0x0c98, 0x6003, 0x0008,
-	0x8529, 0x7556, 0x9ca8, 0x001c, 0x7068, 0x9502, 0x1228, 0x755a,
-	0x9085, 0x0001, 0x00ee, 0x0005, 0x705b, 0x1ddc, 0x0cc8, 0x9006,
-	0x0cc8, 0x9c82, 0x1ddc, 0x0a0c, 0x0d7d, 0x2001, 0x181a, 0x2004,
-	0x9c02, 0x1a0c, 0x0d7d, 0x9006, 0x6006, 0x600a, 0x600e, 0x6016,
-	0x601a, 0x6012, 0x6023, 0x0000, 0x6003, 0x0000, 0x601e, 0x605e,
-	0x6062, 0x6026, 0x602a, 0x602e, 0x6032, 0x6036, 0x603a, 0x603e,
-	0x604a, 0x602a, 0x6046, 0x6042, 0x2061, 0x1800, 0x6054, 0x8000,
-	0x6056, 0x0005, 0x9006, 0x600e, 0x6016, 0x601a, 0x6012, 0x6022,
-	0x6002, 0x601e, 0x605e, 0x6062, 0x604a, 0x6046, 0x2061, 0x1800,
-	0x6054, 0x8000, 0x6056, 0x0005, 0x0006, 0x6000, 0x9086, 0x0000,
-	0x01d0, 0x601c, 0xd084, 0x190c, 0x1a6a, 0x6023, 0x0007, 0x2001,
-	0x1986, 0x2004, 0x0006, 0x9082, 0x0051, 0x000e, 0x0208, 0x8004,
-	0x601a, 0x080c, 0xe4f9, 0x604b, 0x0000, 0x6044, 0xd0fc, 0x1129,
-	0x9006, 0x6046, 0x6016, 0x000e, 0x0005, 0x080c, 0xa8d0, 0x0106,
-	0x190c, 0xa872, 0x2001, 0x19fa, 0x2004, 0x9c06, 0x1130, 0x0036,
-	0x2019, 0x0001, 0x080c, 0xa0f4, 0x003e, 0x080c, 0xa32a, 0x010e,
-	0x190c, 0xa88e, 0x0005, 0x00e6, 0x0126, 0x2071, 0x1800, 0x2091,
-	0x8000, 0x7554, 0x9582, 0x0001, 0x0608, 0x7058, 0x2060, 0x6000,
-	0x9086, 0x0000, 0x0148, 0x9ce0, 0x001c, 0x7068, 0x9c02, 0x1208,
-	0x0cb0, 0x2061, 0x1ddc, 0x0c98, 0x6003, 0x0008, 0x8529, 0x7556,
-	0x9ca8, 0x001c, 0x7068, 0x9502, 0x1230, 0x755a, 0x9085, 0x0001,
-	0x012e, 0x00ee, 0x0005, 0x705b, 0x1ddc, 0x0cc0, 0x9006, 0x0cc0,
-	0x6020, 0x9084, 0x000f, 0x0002, 0xac7c, 0xac86, 0xaca1, 0xacbc,
-	0xcf78, 0xcf95, 0xcfb0, 0xac7c, 0xac86, 0x8f69, 0xacd8, 0xac7c,
-	0xac7c, 0xac7c, 0xac7c, 0xac7c, 0x9186, 0x0013, 0x1130, 0x6044,
-	0xd0fc, 0x0110, 0x080c, 0x95ad, 0x0005, 0x0005, 0x0066, 0x6000,
-	0x90b2, 0x0016, 0x1a0c, 0x0d7d, 0x0013, 0x006e, 0x0005, 0xac9f,
-	0xb3fd, 0xb5d8, 0xac9f, 0xb66e, 0xafa1, 0xac9f, 0xac9f, 0xb37f,
-	0xbbd6, 0xac9f, 0xac9f, 0xac9f, 0xac9f, 0xac9f, 0xac9f, 0x080c,
-	0x0d7d, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0d7d, 0x0013,
-	0x006e, 0x0005, 0xacba, 0xc1e1, 0xacba, 0xacba, 0xacba, 0xacba,
-	0xacba, 0xacba, 0xc186, 0xc364, 0xacba, 0xc21e, 0xc2a2, 0xc21e,
-	0xc2a2, 0xacba, 0x080c, 0x0d7d, 0x6000, 0x9082, 0x0016, 0x1a0c,
-	0x0d7d, 0x6000, 0x0002, 0xacd6, 0xbc20, 0xbcb7, 0xbe37, 0xbea6,
-	0xacd6, 0xacd6, 0xacd6, 0xbbef, 0xc107, 0xc10a, 0xacd6, 0xacd6,
-	0xacd6, 0xacd6, 0xc13a, 0xacd6, 0xacd6, 0xacd6, 0x080c, 0x0d7d,
-	0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0d7d, 0x0013, 0x006e,
-	0x0005, 0xacf1, 0xacf1, 0xad2f, 0xadce, 0xae4e, 0xacf1, 0xacf1,
-	0xacf1, 0xacf3, 0xacf1, 0xacf1, 0xacf1, 0xacf1, 0xacf1, 0xacf1,
-	0xacf1, 0x080c, 0x0d7d, 0x9186, 0x004c, 0x0560, 0x9186, 0x0003,
-	0x190c, 0x0d7d, 0x0096, 0x601c, 0xc0ed, 0x601e, 0x6003, 0x0003,
-	0x6106, 0x6014, 0x2048, 0xa87c, 0x9084, 0xa000, 0xc0b5, 0xa87e,
-	0xa8ac, 0xa836, 0xa8b0, 0xa83a, 0x9006, 0xa846, 0xa84a, 0xa884,
-	0x9092, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x8013, 0x8213,
-	0x9210, 0x621a, 0x009e, 0x080c, 0x1bba, 0x2009, 0x8030, 0x080c,
-	0x9234, 0x0005, 0x6010, 0x00b6, 0x2058, 0xbca0, 0x00be, 0x2c00,
-	0x080c, 0xae70, 0x080c, 0xcf46, 0x6003, 0x0007, 0x0005, 0x00d6,
-	0x0096, 0x00f6, 0x2079, 0x1800, 0x7a90, 0x6014, 0x2048, 0xa87c,
-	0xd0ec, 0x1110, 0x9290, 0x0018, 0xac78, 0xc4fc, 0x0046, 0xa8e0,
-	0x9005, 0x1140, 0xa8dc, 0x921a, 0x0140, 0x0220, 0xa87b, 0x0007,
-	0x2010, 0x0028, 0xa87b, 0x0015, 0x0010, 0xa87b, 0x0000, 0x8214,
-	0xa883, 0x0000, 0xaa02, 0x0006, 0x0016, 0x0026, 0x00c6, 0x00d6,
-	0x00e6, 0x00f6, 0x2400, 0x9005, 0x1108, 0x009a, 0x2100, 0x9086,
-	0x0015, 0x1118, 0x2001, 0x0001, 0x0038, 0x2100, 0x9086, 0x0016,
-	0x0118, 0x2001, 0x0001, 0x002a, 0x94a4, 0x0007, 0x8423, 0x9405,
-	0x0002, 0xad96, 0xad96, 0xad91, 0xad94, 0xad96, 0xad8e, 0xad81,
-	0xad81, 0xad81, 0xad81, 0xad81, 0xad81, 0xad81, 0xad81, 0xad81,
-	0xad81, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x002e, 0x001e, 0x000e,
-	0x004e, 0x00fe, 0x009e, 0x00de, 0x080c, 0x0d7d, 0x080c, 0xb82b,
-	0x0028, 0x080c, 0xb910, 0x0010, 0x080c, 0xba06, 0x00fe, 0x00ee,
-	0x00de, 0x00ce, 0x002e, 0x001e, 0x2c00, 0xa896, 0x000e, 0x080c,
-	0xaf2e, 0x0530, 0xa804, 0xa80e, 0x00a6, 0x2050, 0xb100, 0x00ae,
-	0x8006, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080,
-	0x0002, 0xaacc, 0xabd0, 0xacd4, 0xadd8, 0x2031, 0x0000, 0x2041,
-	0x1298, 0x080c, 0xb0ee, 0x0160, 0x000e, 0x9005, 0x0120, 0x00fe,
-	0x009e, 0x00de, 0x0005, 0x00fe, 0x009e, 0x00de, 0x0804, 0xabc9,
-	0x2001, 0x002c, 0x900e, 0x080c, 0xaf94, 0x0c70, 0x91b6, 0x0015,
-	0x0170, 0x91b6, 0x0016, 0x0158, 0x91b2, 0x0047, 0x0a0c, 0x0d7d,
-	0x91b2, 0x0050, 0x1a0c, 0x0d7d, 0x9182, 0x0047, 0x0042, 0x080c,
-	0xaa84, 0x0120, 0x9086, 0x0002, 0x0904, 0xad2f, 0x0005, 0xadf0,
-	0xadf0, 0xadf2, 0xae24, 0xadf0, 0xadf0, 0xadf0, 0xadf0, 0xae37,
-	0x080c, 0x0d7d, 0x00d6, 0x0016, 0x0096, 0x6003, 0x0004, 0x6114,
-	0x2148, 0xa87c, 0xd0fc, 0x01c0, 0xa878, 0xc0fc, 0x9005, 0x1158,
-	0xa894, 0x9005, 0x0140, 0x2001, 0x0000, 0x900e, 0x080c, 0xaf94,
-	0x080c, 0xabc9, 0x00a8, 0x6003, 0x0002, 0xa8a4, 0xa9a8, 0x9105,
-	0x1178, 0xa8ae, 0xa8b2, 0x0c78, 0xa87f, 0x0020, 0xa88c, 0xa88a,
-	0xa8a4, 0xa8ae, 0xa8a8, 0xa8b2, 0xa8c7, 0x0000, 0xa8cb, 0x0000,
-	0x009e, 0x001e, 0x00de, 0x0005, 0x080c, 0x960a, 0x00d6, 0x0096,
-	0x6114, 0x2148, 0x080c, 0xc814, 0x0120, 0xa87b, 0x0006, 0x080c,
-	0x6d70, 0x009e, 0x00de, 0x080c, 0xabc9, 0x0804, 0x966f, 0x080c,
-	0x960a, 0x080c, 0x31e4, 0x080c, 0xcf43, 0x00d6, 0x0096, 0x6114,
-	0x2148, 0x080c, 0xc814, 0x0120, 0xa87b, 0x0029, 0x080c, 0x6d70,
-	0x009e, 0x00de, 0x080c, 0xabc9, 0x0804, 0x966f, 0x9182, 0x0047,
-	0x0002, 0xae5e, 0xae60, 0xae5e, 0xae5e, 0xae5e, 0xae5e, 0xae5e,
-	0xae5e, 0xae5e, 0xae5e, 0xae5e, 0xae5e, 0xae60, 0x080c, 0x0d7d,
-	0x00d6, 0x0096, 0x601f, 0x0000, 0x6114, 0x2148, 0xa87b, 0x0000,
-	0xa883, 0x0000, 0x080c, 0x6d70, 0x009e, 0x00de, 0x0804, 0xabc9,
-	0x0026, 0x0036, 0x0056, 0x0066, 0x0096, 0x00a6, 0x00f6, 0x0006,
-	0x080c, 0x103a, 0x000e, 0x090c, 0x0d7d, 0xa960, 0x21e8, 0xa95c,
-	0x9188, 0x0019, 0x21a0, 0x900e, 0x20a9, 0x0020, 0x4104, 0xa87a,
-	0x2079, 0x1800, 0x7990, 0x9188, 0x0018, 0x918c, 0x0fff, 0xa972,
-	0xac76, 0x2950, 0x00a6, 0x2001, 0x0205, 0x2003, 0x0000, 0x901e,
-	0x2029, 0x0001, 0x9182, 0x0034, 0x1228, 0x2011, 0x001f, 0x080c,
-	0xc3e7, 0x04c0, 0x2130, 0x2009, 0x0034, 0x2011, 0x001f, 0x080c,
-	0xc3e7, 0x96b2, 0x0034, 0xb004, 0x904d, 0x0110, 0x080c, 0x0fec,
-	0x080c, 0x103a, 0x01d0, 0x8528, 0xa867, 0x0110, 0xa86b, 0x0000,
-	0x2920, 0xb406, 0x968a, 0x003d, 0x1230, 0x2608, 0x2011, 0x001b,
-	0x080c, 0xc3e7, 0x00b8, 0x96b2, 0x003c, 0x2009, 0x003c, 0x2950,
-	0x2011, 0x001b, 0x080c, 0xc3e7, 0x0c18, 0x2001, 0x0205, 0x2003,
-	0x0000, 0x00ae, 0x852f, 0x95ad, 0x0050, 0xb566, 0xb070, 0xc0fd,
-	0xb072, 0x0048, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f,
-	0x95ad, 0x0050, 0xb566, 0x2a48, 0xa804, 0xa807, 0x0000, 0x0006,
-	0x080c, 0x6d70, 0x000e, 0x2048, 0x9005, 0x1db0, 0x00fe, 0x00ae,
-	0x009e, 0x006e, 0x005e, 0x003e, 0x002e, 0x0005, 0x00d6, 0x00f6,
-	0x0096, 0x0006, 0x080c, 0x103a, 0x000e, 0x090c, 0x0d7d, 0xa960,
-	0x21e8, 0xa95c, 0x9188, 0x0019, 0x21a0, 0x900e, 0x20a9, 0x0020,
-	0x4104, 0xaa66, 0xa87a, 0x2079, 0x1800, 0x7990, 0x810c, 0x9188,
-	0x000c, 0x9182, 0x001a, 0x0210, 0x2009, 0x001a, 0x21a8, 0x810b,
-	0xa972, 0xac76, 0x2e98, 0xa85c, 0x9080, 0x001f, 0x20a0, 0x2001,
-	0x0205, 0x200c, 0x918d, 0x0080, 0x2102, 0x4003, 0x2003, 0x0000,
-	0x080c, 0x6d70, 0x009e, 0x00fe, 0x00de, 0x0005, 0x0016, 0x00d6,
-	0x00f6, 0x0096, 0x0016, 0x2001, 0x0205, 0x200c, 0x918d, 0x0080,
-	0x2102, 0x001e, 0x2079, 0x0200, 0x2e98, 0xa87c, 0xd0ec, 0x0118,
-	0x9e80, 0x000c, 0x2098, 0x2021, 0x003e, 0x901e, 0x9282, 0x0020,
-	0x0218, 0x2011, 0x0020, 0x2018, 0x9486, 0x003e, 0x1170, 0x0096,
-	0x080c, 0x103a, 0x2900, 0x009e, 0x05c0, 0xa806, 0x2048, 0xa860,
-	0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x3300, 0x908e, 0x0260,
-	0x0140, 0x2009, 0x0280, 0x9102, 0x920a, 0x0218, 0x2010, 0x2100,
-	0x9318, 0x2200, 0x9402, 0x1228, 0x2400, 0x9202, 0x2410, 0x9318,
-	0x9006, 0x2020, 0x22a8, 0xa800, 0x9200, 0xa802, 0x20e1, 0x0000,
-	0x4003, 0x83ff, 0x0180, 0x3300, 0x9086, 0x0280, 0x1130, 0x7814,
-	0x8000, 0x9085, 0x0080, 0x7816, 0x2e98, 0x2310, 0x84ff, 0x0904,
-	0xaf43, 0x0804, 0xaf45, 0x9085, 0x0001, 0x7817, 0x0000, 0x009e,
-	0x00fe, 0x00de, 0x001e, 0x0005, 0x00d6, 0x0036, 0x0096, 0x6314,
-	0x2348, 0xa87a, 0xa982, 0x080c, 0x6d64, 0x009e, 0x003e, 0x00de,
-	0x0005, 0x91b6, 0x0015, 0x1118, 0x080c, 0xabc9, 0x0030, 0x91b6,
-	0x0016, 0x190c, 0x0d7d, 0x080c, 0xabc9, 0x0005, 0x20a9, 0x000e,
-	0x20e1, 0x0000, 0x2e98, 0x6014, 0x0096, 0x2048, 0xa860, 0x20e8,
-	0xa85c, 0x20a0, 0x009e, 0x4003, 0x0136, 0x9080, 0x001b, 0x2011,
-	0x0006, 0x20a9, 0x0001, 0x3418, 0x8318, 0x23a0, 0x4003, 0x3318,
-	0x8318, 0x2398, 0x8211, 0x1db8, 0x2011, 0x0006, 0x013e, 0x20a0,
-	0x3318, 0x8318, 0x2398, 0x4003, 0x3418, 0x8318, 0x23a0, 0x8211,
-	0x1db8, 0x0096, 0x080c, 0xc814, 0x0130, 0x6014, 0x2048, 0xa807,
-	0x0000, 0xa867, 0x0103, 0x009e, 0x0804, 0xabc9, 0x0096, 0x00d6,
-	0x0036, 0x7330, 0x9386, 0x0200, 0x11a8, 0x6010, 0x00b6, 0x2058,
-	0xb8d7, 0x0000, 0x00be, 0x6014, 0x9005, 0x0130, 0x2048, 0xa807,
-	0x0000, 0xa867, 0x0103, 0xab32, 0x080c, 0xabc9, 0x003e, 0x00de,
-	0x009e, 0x0005, 0x0011, 0x1d48, 0x0cc8, 0x0006, 0x0016, 0x080c,
-	0xcf2e, 0x0188, 0x6014, 0x9005, 0x1170, 0x600b, 0x0003, 0x601b,
-	0x0000, 0x604b, 0x0000, 0x2009, 0x0022, 0x080c, 0xb3d5, 0x9006,
-	0x001e, 0x000e, 0x0005, 0x9085, 0x0001, 0x0cd0, 0x0096, 0x0016,
-	0x20a9, 0x0014, 0x9e80, 0x000c, 0x20e1, 0x0000, 0x2098, 0x6014,
+	0x89ff, 0x1168, 0x600f, 0x0000, 0x6014, 0x0096, 0x2048, 0x080c,
+	0xc836, 0x0110, 0x080c, 0xe26c, 0x009e, 0x080c, 0xac28, 0x080c,
+	0xa20e, 0x88ff, 0x1190, 0x00ce, 0x0804, 0xa229, 0x2c78, 0x600c,
+	0x2060, 0x0804, 0xa229, 0x9006, 0x012e, 0x000e, 0x006e, 0x007e,
+	0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601b, 0x0000, 0x00ce,
+	0x98c5, 0x0001, 0x0c88, 0x00f6, 0x00e6, 0x00d6, 0x0096, 0x00c6,
+	0x0066, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19e7,
+	0x7648, 0x2660, 0x2678, 0x8cff, 0x0904, 0xa327, 0x6020, 0x9086,
+	0x0006, 0x1904, 0xa322, 0x87ff, 0x0128, 0x2700, 0x9c06, 0x1904,
+	0xa322, 0x0040, 0x6010, 0x9b06, 0x15e8, 0x85ff, 0x0118, 0x605c,
+	0x9106, 0x15c0, 0x704c, 0x9c06, 0x1168, 0x0036, 0x2019, 0x0001,
+	0x080c, 0xa118, 0x703f, 0x0000, 0x9006, 0x704e, 0x706a, 0x7052,
+	0x706e, 0x003e, 0x7048, 0x9c36, 0x1110, 0x660c, 0x764a, 0x7044,
+	0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7046, 0x0010,
+	0x7047, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e,
+	0x0008, 0x2678, 0x600f, 0x0000, 0x6014, 0x2048, 0x080c, 0xc836,
+	0x0110, 0x080c, 0xe26c, 0x080c, 0xac28, 0x87ff, 0x1198, 0x00ce,
+	0x0804, 0xa2d3, 0x2c78, 0x600c, 0x2060, 0x0804, 0xa2d3, 0x9006,
+	0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x009e, 0x00de, 0x00ee,
+	0x00fe, 0x0005, 0x601b, 0x0000, 0x00ce, 0x97bd, 0x0001, 0x0c80,
+	0x00e6, 0x2071, 0x19e7, 0x7033, 0x0000, 0x7004, 0x9086, 0x0003,
+	0x0158, 0x2001, 0x1800, 0x2004, 0x9086, 0x0002, 0x1118, 0x7007,
+	0x0005, 0x0010, 0x7007, 0x0000, 0x00ee, 0x0005, 0x00f6, 0x00e6,
+	0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071,
+	0x19e7, 0x2c10, 0x7648, 0x2660, 0x2678, 0x8cff, 0x0518, 0x2200,
+	0x9c06, 0x11e0, 0x7048, 0x9c36, 0x1110, 0x660c, 0x764a, 0x7044,
+	0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7046, 0x0010,
+	0x7047, 0x0000, 0x660c, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008,
+	0x2678, 0x600f, 0x0000, 0x9085, 0x0001, 0x0020, 0x2c78, 0x600c,
+	0x2060, 0x08d8, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x00ee,
+	0x00fe, 0x0005, 0x0096, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066,
+	0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19e7, 0x7610,
+	0x2660, 0x2678, 0x8cff, 0x0904, 0xa41a, 0x6010, 0x00b6, 0x2058,
+	0xb8a0, 0x00be, 0x9206, 0x1904, 0xa415, 0x7030, 0x9c06, 0x1520,
+	0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, 0xa3f1, 0x080c, 0x9e32,
+	0x68c3, 0x0000, 0x080c, 0xa338, 0x7033, 0x0000, 0x0036, 0x2069,
+	0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c,
+	0x2a0a, 0x9006, 0x080c, 0x2a0a, 0x2069, 0x0100, 0x6824, 0xd084,
+	0x0110, 0x6827, 0x0001, 0x003e, 0x7010, 0x9c36, 0x1110, 0x660c,
+	0x7612, 0x700c, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00,
+	0x700e, 0x0010, 0x700f, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06,
+	0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0xca3c,
+	0x1158, 0x080c, 0x321c, 0x080c, 0xca4d, 0x11f0, 0x080c, 0xb5b5,
+	0x00d8, 0x080c, 0xa338, 0x08c0, 0x080c, 0xca4d, 0x1118, 0x080c,
+	0xb5b5, 0x0090, 0x6014, 0x2048, 0x080c, 0xc836, 0x0168, 0x6020,
+	0x9086, 0x0003, 0x1508, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000,
+	0x080c, 0x6d74, 0x080c, 0xca27, 0x080c, 0xccc4, 0x080c, 0xac28,
+	0x080c, 0xa20e, 0x00ce, 0x0804, 0xa39a, 0x2c78, 0x600c, 0x2060,
+	0x0804, 0xa39a, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x00de,
+	0x00ee, 0x00fe, 0x009e, 0x0005, 0x6020, 0x9086, 0x0006, 0x1d20,
+	0x080c, 0xe26c, 0x0c08, 0x00d6, 0x080c, 0x9aea, 0x7003, 0x0200,
+	0x7007, 0x0014, 0x60c3, 0x0014, 0x20e1, 0x0001, 0x2099, 0x1989,
+	0x20e9, 0x0000, 0x20a1, 0x0250, 0x20a9, 0x0004, 0x4003, 0x7023,
+	0x0004, 0x7027, 0x7878, 0x080c, 0x9e02, 0x00de, 0x0005, 0x080c,
+	0x9aea, 0x700b, 0x0800, 0x7814, 0x9084, 0xff00, 0x700e, 0x7814,
+	0x9084, 0x00ff, 0x7022, 0x782c, 0x7026, 0x7860, 0x9084, 0x00ff,
+	0x9085, 0x0200, 0x7002, 0x7860, 0x9084, 0xff00, 0x8007, 0x7006,
+	0x60c2, 0x0804, 0x9e02, 0x00b6, 0x00d6, 0x0016, 0x00d6, 0x2f68,
+	0x2009, 0x0035, 0x080c, 0xceca, 0x00de, 0x1904, 0xa4c8, 0x080c,
+	0x9a9f, 0x7003, 0x1300, 0x782c, 0x080c, 0xa5d3, 0x2068, 0x6820,
+	0x9086, 0x0003, 0x0560, 0x7810, 0x2058, 0xbaa0, 0x080c, 0xab57,
+	0x11d8, 0x9286, 0x007e, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffe,
+	0x0498, 0x9286, 0x007f, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffd,
+	0x0458, 0x9284, 0xff80, 0x0180, 0x9286, 0x0080, 0x1128, 0x700b,
+	0x00ff, 0x700f, 0xfffc, 0x0400, 0x92d8, 0x1000, 0x2b5c, 0xb810,
+	0x700a, 0xb814, 0x700e, 0x00c0, 0xb884, 0x700e, 0x00a8, 0x080c,
+	0xab57, 0x1130, 0x7810, 0x2058, 0xb8a0, 0x9082, 0x007e, 0x0250,
+	0x00d6, 0x2069, 0x181f, 0x2d04, 0x700a, 0x8d68, 0x2d04, 0x700e,
+	0x00de, 0x0010, 0x6034, 0x700e, 0x7838, 0x7012, 0x783c, 0x7016,
+	0x60c3, 0x000c, 0x001e, 0x00de, 0x080c, 0x9e02, 0x00be, 0x0005,
+	0x781b, 0x0001, 0x7803, 0x0006, 0x001e, 0x00de, 0x00be, 0x0005,
+	0x792c, 0x9180, 0x0008, 0x200c, 0x9186, 0x0006, 0x01c0, 0x9186,
+	0x0003, 0x0904, 0xa546, 0x9186, 0x0005, 0x0904, 0xa52e, 0x9186,
+	0x0004, 0x05f0, 0x9186, 0x0008, 0x0904, 0xa537, 0x7807, 0x0037,
+	0x782f, 0x0003, 0x7817, 0x1700, 0x080c, 0xa5b0, 0x0005, 0x080c,
+	0xa571, 0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x6800,
+	0x6a44, 0xd2fc, 0x11f8, 0x0002, 0xa50f, 0xa51a, 0xa511, 0xa51a,
+	0xa516, 0xa50f, 0xa50f, 0xa51a, 0xa51a, 0xa51a, 0xa51a, 0xa50f,
+	0xa50f, 0xa50f, 0xa50f, 0xa50f, 0xa51a, 0xa50f, 0xa51a, 0x080c,
+	0x0d7d, 0x6824, 0xd0e4, 0x0110, 0xd0cc, 0x0110, 0x900e, 0x0010,
+	0x2009, 0x2000, 0x682c, 0x7022, 0x6830, 0x7026, 0x0804, 0xa56a,
+	0x080c, 0xa571, 0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000,
+	0x6a00, 0x9286, 0x0002, 0x1108, 0x900e, 0x04e0, 0x080c, 0xa571,
+	0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x0498, 0x04c9,
+	0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x9286, 0x0005,
+	0x0118, 0x9286, 0x0002, 0x1108, 0x900e, 0x0420, 0x0451, 0x00d6,
+	0x0026, 0x792c, 0x2168, 0x6814, 0x0096, 0x2048, 0xa9ac, 0xa834,
+	0x9112, 0xa9b0, 0xa838, 0x009e, 0x9103, 0x7022, 0x7226, 0x792c,
+	0x9180, 0x0011, 0x2004, 0xd0fc, 0x1148, 0x9180, 0x0000, 0x2004,
+	0x908e, 0x0002, 0x0130, 0x908e, 0x0004, 0x0118, 0x2009, 0x4000,
+	0x0008, 0x900e, 0x712a, 0x60c3, 0x0018, 0x002e, 0x00de, 0x0804,
+	0x9e02, 0x00b6, 0x0036, 0x0046, 0x0056, 0x0066, 0x080c, 0x9aea,
+	0x9006, 0x7003, 0x0200, 0x7938, 0x710a, 0x793c, 0x710e, 0x7810,
+	0x2058, 0xb8a0, 0x080c, 0xab57, 0x1118, 0x9092, 0x007e, 0x0268,
+	0x00d6, 0x2069, 0x181f, 0x2d2c, 0x8d68, 0x2d34, 0x90d8, 0x1000,
+	0x2b5c, 0xbb10, 0xbc14, 0x00de, 0x0028, 0x901e, 0xbc84, 0x2029,
+	0x0000, 0x6634, 0x782c, 0x9080, 0x0008, 0x2004, 0x9086, 0x0003,
+	0x1128, 0x7512, 0x7616, 0x731a, 0x741e, 0x0020, 0x7312, 0x7416,
+	0x751a, 0x761e, 0x006e, 0x005e, 0x004e, 0x003e, 0x00be, 0x0005,
+	0x080c, 0x9aea, 0x7003, 0x0100, 0x782c, 0x700a, 0x7814, 0x700e,
+	0x700e, 0x60c3, 0x0008, 0x0804, 0x9e02, 0x080c, 0x9a96, 0x7003,
+	0x1400, 0x7838, 0x700a, 0x0079, 0x783c, 0x700e, 0x782c, 0x7012,
+	0x7830, 0x7016, 0x7834, 0x9084, 0x00ff, 0x8007, 0x701a, 0x60c3,
+	0x0010, 0x0804, 0x9e02, 0x00e6, 0x2071, 0x0240, 0x0006, 0x00f6,
+	0x2078, 0x7810, 0x00b6, 0x2058, 0xb8d4, 0xd084, 0x0120, 0x7850,
+	0x702a, 0x784c, 0x702e, 0x00be, 0x00fe, 0x000e, 0x00ee, 0x0005,
+	0x080c, 0x9ae1, 0x7003, 0x0100, 0x782c, 0x700a, 0x7814, 0x700e,
+	0x60c3, 0x0008, 0x0804, 0x9e02, 0x00a9, 0x7914, 0x712a, 0x60c3,
+	0x0000, 0x60a7, 0x9575, 0x0026, 0x080c, 0x2979, 0x0228, 0x2011,
+	0x0101, 0x2204, 0xc0c5, 0x2012, 0x002e, 0x080c, 0x9e25, 0x080c,
+	0x86ed, 0x0005, 0x0036, 0x0096, 0x00d6, 0x00e6, 0x7860, 0x2048,
+	0xaa7c, 0x9296, 0x00c0, 0x9294, 0xfffd, 0xaa7e, 0xaa80, 0x9294,
+	0x0300, 0xaa82, 0xa96c, 0x9194, 0x00ff, 0xab74, 0x9384, 0x00ff,
+	0x908d, 0xc200, 0xa96e, 0x9384, 0xff00, 0x9215, 0xaa76, 0xa870,
+	0xaa78, 0xa87a, 0xaa72, 0x00d6, 0x2069, 0x0200, 0x080c, 0xa690,
+	0x00de, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000a, 0xa860,
+	0x20e0, 0xa85c, 0x9080, 0x001b, 0x2098, 0x4003, 0x60a3, 0x0035,
+	0xaa68, 0x9294, 0x7000, 0x9286, 0x3000, 0x0110, 0x60a3, 0x0037,
+	0x00ee, 0x00de, 0x009e, 0x003e, 0x0005, 0x900e, 0x7814, 0x0096,
+	0x2048, 0xa87c, 0xd0fc, 0x01c0, 0x9084, 0x0003, 0x11a8, 0x2001,
+	0x180c, 0x2004, 0xd0bc, 0x0180, 0x7824, 0xd0cc, 0x1168, 0xd0c4,
+	0x1158, 0xa8a8, 0x9005, 0x1140, 0x2001, 0x180c, 0x200c, 0xc1d5,
+	0x2102, 0x2009, 0x19b2, 0x210c, 0x009e, 0x918d, 0x0092, 0x0010,
+	0x2009, 0x0096, 0x60ab, 0x0036, 0x0026, 0x2110, 0x900e, 0x080c,
+	0x2a53, 0x002e, 0x0005, 0x2009, 0x0009, 0x00a0, 0x2009, 0x000a,
+	0x0088, 0x2009, 0x000b, 0x0070, 0x2009, 0x000c, 0x0058, 0x2009,
+	0x000d, 0x0040, 0x2009, 0x000e, 0x0028, 0x2009, 0x000f, 0x0010,
+	0x2009, 0x0008, 0x6912, 0x0005, 0x080c, 0x9a9f, 0x0016, 0x0026,
+	0x0096, 0x00d6, 0x7814, 0x2048, 0x7013, 0x0138, 0x2001, 0x1837,
+	0x2004, 0x9084, 0x0028, 0x1138, 0x2001, 0x197c, 0x2004, 0x9086,
+	0xaaaa, 0x1904, 0xa735, 0x7003, 0x5400, 0x00c6, 0x2061, 0x1800,
+	0x607c, 0x9084, 0x00ff, 0xa998, 0x810f, 0x918c, 0xff00, 0x9105,
+	0x700a, 0x6080, 0x700e, 0xa998, 0x918c, 0xff00, 0x7112, 0x20a9,
+	0x0004, 0x2009, 0x1805, 0x2e10, 0x9290, 0x0006, 0x2104, 0x2012,
+	0x8108, 0x8210, 0x1f04, 0xa6c6, 0x20a9, 0x0004, 0x2009, 0x1801,
+	0x2104, 0x2012, 0x8108, 0x8210, 0x1f04, 0xa6d0, 0xa860, 0x20e0,
+	0xa85c, 0x9080, 0x0029, 0x2098, 0x2009, 0x0006, 0x20a9, 0x0001,
+	0x4002, 0x8007, 0x2012, 0x8210, 0x8109, 0x1dc0, 0x00d6, 0x2069,
+	0x0200, 0x080c, 0xa67b, 0x00de, 0x2071, 0x0240, 0x2011, 0x0240,
+	0x2009, 0x0002, 0x20a9, 0x0001, 0x4002, 0x8007, 0x2012, 0x8210,
+	0x8109, 0x1dc0, 0x2009, 0x0008, 0x20a9, 0x0001, 0x4002, 0x8007,
+	0x2012, 0x8210, 0x8109, 0x1dc0, 0xa85c, 0x9080, 0x0031, 0x2098,
+	0x2009, 0x0008, 0x20a9, 0x0001, 0x4002, 0x8007, 0x2012, 0x8210,
+	0x8109, 0x1dc0, 0x00ce, 0x60c3, 0x004c, 0x60a3, 0x0056, 0x60a7,
+	0x9575, 0x2001, 0x1837, 0x2004, 0x9084, 0x0028, 0x1168, 0x080c,
+	0x74e9, 0x0150, 0x6028, 0xc0bd, 0x602a, 0x2009, 0x1804, 0x2011,
+	0x0029, 0x080c, 0x2a53, 0x0010, 0x080c, 0x9e02, 0x080c, 0x86ed,
+	0x00de, 0x009e, 0x002e, 0x001e, 0x0005, 0x00e6, 0x2071, 0x0240,
+	0x2001, 0x2200, 0x9085, 0x00ff, 0x7002, 0x7007, 0xffff, 0x2071,
+	0x0100, 0x709b, 0x00ff, 0x00ee, 0x0804, 0xa6ab, 0x080c, 0x9a9f,
+	0x0016, 0x0026, 0x0096, 0x00d6, 0x7814, 0x2048, 0x7013, 0x0138,
+	0x7003, 0x5500, 0x00c6, 0xa89c, 0x9084, 0x00ff, 0xa998, 0x810f,
+	0x918c, 0xff00, 0x9105, 0x700a, 0xa99c, 0x918c, 0xff00, 0xa8a0,
+	0x9084, 0x00ff, 0x9105, 0x700e, 0xa998, 0x918c, 0xff00, 0x2061,
+	0x1800, 0x607c, 0x9084, 0x00ff, 0x910d, 0x7112, 0x6180, 0x7116,
+	0x2009, 0x0008, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0029, 0x2098,
+	0x2e10, 0x9290, 0x0006, 0x20a9, 0x0001, 0x4002, 0x8007, 0x2012,
+	0x8210, 0x8109, 0x1dc0, 0x20a9, 0x0004, 0x2009, 0x1805, 0x2104,
+	0x2012, 0x8108, 0x8210, 0x1f04, 0xa787, 0x20a9, 0x0002, 0x2009,
+	0x1801, 0x2104, 0x2012, 0x8108, 0x8210, 0x1f04, 0xa791, 0x00d6,
+	0x0016, 0x2069, 0x0200, 0x080c, 0xa67b, 0x001e, 0x00de, 0x2071,
+	0x0240, 0x20a9, 0x0002, 0x2009, 0x1803, 0x2011, 0x0240, 0x2104,
+	0x2012, 0x8108, 0x8210, 0x1f04, 0xa7a7, 0x2009, 0x0008, 0x4002,
+	0x8007, 0x2012, 0x8210, 0x8109, 0x1dd0, 0x9006, 0x20a9, 0x0008,
+	0x2012, 0x8210, 0x1f04, 0xa7b8, 0x00ce, 0x60c3, 0x004c, 0x60a3,
+	0x0056, 0x60a7, 0x9575, 0x080c, 0x9e02, 0x080c, 0x86ed, 0x00de,
+	0x009e, 0x002e, 0x001e, 0x0005, 0x00d6, 0x9290, 0x0018, 0x8214,
+	0x20e9, 0x0000, 0x2069, 0x0200, 0x6813, 0x0000, 0x22a8, 0x9284,
+	0x00e0, 0x0128, 0x20a9, 0x0020, 0x9292, 0x0020, 0x0008, 0x9016,
+	0x20a1, 0x0240, 0x9006, 0x4004, 0x82ff, 0x0120, 0x6810, 0x8000,
+	0x6812, 0x0c60, 0x00de, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6,
+	0x00a6, 0x0096, 0x0066, 0x0126, 0x2091, 0x8000, 0x2071, 0x19e7,
+	0x7610, 0x2660, 0x2678, 0x8cff, 0x0904, 0xa873, 0x7030, 0x9c06,
+	0x1520, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, 0xa84a, 0x080c,
+	0x9e32, 0x68c3, 0x0000, 0x080c, 0xa338, 0x7033, 0x0000, 0x0036,
+	0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100,
+	0x080c, 0x2a0a, 0x9006, 0x080c, 0x2a0a, 0x2069, 0x0100, 0x6824,
+	0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x7010, 0x9c36, 0x1110,
+	0x660c, 0x7612, 0x700c, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118,
+	0x2f00, 0x700e, 0x0010, 0x700f, 0x0000, 0x660c, 0x0066, 0x2c00,
+	0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c,
+	0xca3c, 0x1158, 0x080c, 0x321c, 0x080c, 0xca4d, 0x11f0, 0x080c,
+	0xb5b5, 0x00d8, 0x080c, 0xa338, 0x08c0, 0x080c, 0xca4d, 0x1118,
+	0x080c, 0xb5b5, 0x0090, 0x6014, 0x2048, 0x080c, 0xc836, 0x0168,
+	0x6020, 0x9086, 0x0003, 0x1520, 0xa867, 0x0103, 0xab7a, 0xa877,
+	0x0000, 0x080c, 0x6d80, 0x080c, 0xca27, 0x080c, 0xccc4, 0x080c,
+	0xac28, 0x080c, 0xa20e, 0x00ce, 0x0804, 0xa7fb, 0x2c78, 0x600c,
+	0x2060, 0x0804, 0xa7fb, 0x7013, 0x0000, 0x700f, 0x0000, 0x012e,
+	0x006e, 0x009e, 0x00ae, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005,
+	0x6020, 0x9086, 0x0006, 0x1d08, 0x080c, 0xe26c, 0x08f0, 0x00f6,
+	0x0036, 0x2079, 0x0380, 0x7b18, 0xd3bc, 0x1de8, 0x7832, 0x7936,
+	0x7a3a, 0x781b, 0x8080, 0x003e, 0x00fe, 0x0005, 0x0016, 0x2001,
+	0x0382, 0x2004, 0x9084, 0x0007, 0x9086, 0x0001, 0x1188, 0x2001,
+	0x0015, 0x0c29, 0x2009, 0x1000, 0x2001, 0x0382, 0x2004, 0x9084,
+	0x0007, 0x9086, 0x0003, 0x0120, 0x8109, 0x1db0, 0x080c, 0x0d7d,
+	0x001e, 0x0005, 0x2001, 0x0382, 0x2004, 0x9084, 0x0007, 0x9086,
+	0x0003, 0x1120, 0x2001, 0x0380, 0x2003, 0x0001, 0x0005, 0x0156,
+	0x0016, 0x0026, 0x00e6, 0x900e, 0x2071, 0x19e7, 0x0469, 0x0106,
+	0x0190, 0x7004, 0x9086, 0x0003, 0x0148, 0x20a9, 0x1000, 0x6044,
+	0xd0fc, 0x01d8, 0x1f04, 0xa8cf, 0x080c, 0x0d7d, 0x080c, 0xa896,
+	0x6044, 0xd0fc, 0x0190, 0x7030, 0x9c06, 0x1148, 0x080c, 0x95de,
+	0x6044, 0xd0dc, 0x0150, 0xc0dc, 0x6046, 0x700a, 0x7042, 0x704c,
+	0x9c06, 0x190c, 0x0d7d, 0x080c, 0x963b, 0x010e, 0x1919, 0x00ee,
+	0x002e, 0x001e, 0x015e, 0x0005, 0x2001, 0x0382, 0x2004, 0x9084,
+	0x0007, 0x9086, 0x0003, 0x0005, 0x0126, 0x2091, 0x2400, 0x7808,
+	0xd0a4, 0x190c, 0x0d76, 0xd09c, 0x0128, 0x7820, 0x908c, 0xf000,
+	0x11b8, 0x0012, 0x012e, 0x0005, 0xa91c, 0xa95a, 0xa981, 0xa9b8,
+	0xa9c8, 0xa9d9, 0xa9e8, 0xa9f6, 0xaa23, 0xaa27, 0xa91c, 0xa91c,
+	0xa91c, 0xa91c, 0xa91c, 0xa91c, 0x080c, 0x0d7d, 0x012e, 0x0005,
+	0x2060, 0x6044, 0xd0bc, 0x0140, 0xc0bc, 0x6046, 0x6000, 0x908a,
+	0x0016, 0x1a0c, 0x0d7d, 0x0012, 0x012e, 0x0005, 0xa941, 0xa943,
+	0xa941, 0xa949, 0xa941, 0xa941, 0xa941, 0xa941, 0xa941, 0xa943,
+	0xa941, 0xa943, 0xa941, 0xa943, 0xa941, 0xa941, 0xa941, 0xa943,
+	0xa941, 0x080c, 0x0d7d, 0x2009, 0x0013, 0x080c, 0xac8c, 0x012e,
+	0x0005, 0x6014, 0x2048, 0xa87c, 0xd0dc, 0x0130, 0x080c, 0x88c1,
+	0x080c, 0xabed, 0x012e, 0x0005, 0x2009, 0x0049, 0x080c, 0xac8c,
+	0x012e, 0x0005, 0x080c, 0xa896, 0x2001, 0x1a0c, 0x2003, 0x0000,
+	0x7030, 0x9065, 0x090c, 0x0d7d, 0x7034, 0x9092, 0x00c8, 0x1258,
+	0x8000, 0x7036, 0x7004, 0x9086, 0x0003, 0x0110, 0x7007, 0x0000,
+	0x781f, 0x0808, 0x0040, 0x080c, 0xe717, 0x6003, 0x0001, 0x2009,
+	0x0014, 0x080c, 0xac8c, 0x781f, 0x0100, 0x080c, 0xa8b2, 0x012e,
+	0x0005, 0x080c, 0xa896, 0x714c, 0x81ff, 0x1128, 0x2011, 0x1a0f,
+	0x2013, 0x0000, 0x0438, 0x2061, 0x0100, 0x7150, 0x9192, 0x7530,
+	0x12f0, 0x8108, 0x7152, 0x714c, 0x9188, 0x0008, 0x210c, 0x918e,
+	0x0006, 0x1138, 0x6014, 0x9084, 0x1984, 0x9085, 0x0012, 0x6016,
+	0x0088, 0x714c, 0x9188, 0x0008, 0x210c, 0x918e, 0x0009, 0x0d90,
+	0x6014, 0x9084, 0x1984, 0x9085, 0x0016, 0x6016, 0x0018, 0x706c,
+	0xc085, 0x706e, 0x781f, 0x0200, 0x080c, 0xa8b2, 0x012e, 0x0005,
+	0x080c, 0xa896, 0x714c, 0x2160, 0x6003, 0x0003, 0x2009, 0x004a,
+	0x080c, 0xac8c, 0x781f, 0x0200, 0x080c, 0xa8b2, 0x012e, 0x0005,
+	0x7808, 0xd09c, 0x0de8, 0x7820, 0x2060, 0x6003, 0x0003, 0x080c,
+	0xa896, 0x080c, 0x1d60, 0x781f, 0x0400, 0x080c, 0xa8b2, 0x012e,
+	0x0005, 0x7808, 0xd09c, 0x0de8, 0x7820, 0x2060, 0x080c, 0xa896,
+	0x080c, 0x1da8, 0x781f, 0x0400, 0x080c, 0xa8b2, 0x012e, 0x0005,
+	0x7030, 0x9065, 0x0148, 0x6044, 0xc0bc, 0x6046, 0x7104, 0x9186,
+	0x0003, 0x0110, 0x080c, 0x96a1, 0x012e, 0x0005, 0x00f6, 0x703c,
+	0x9086, 0x0002, 0x0528, 0x704c, 0x907d, 0x0510, 0x7844, 0xc0bc,
+	0x7846, 0x7820, 0x9086, 0x0009, 0x0118, 0x080c, 0x9d5c, 0x00c0,
+	0x7828, 0xd0fc, 0x1118, 0x080c, 0x9cdb, 0x0090, 0x2001, 0x1837,
+	0x2004, 0x9084, 0x0028, 0x1130, 0x2001, 0x197c, 0x2004, 0x9086,
+	0xaaaa, 0x1120, 0x2001, 0x0387, 0x2003, 0x1000, 0x080c, 0x9c60,
+	0x00fe, 0x012e, 0x0005, 0x080c, 0x758a, 0x012e, 0x0005, 0x080c,
+	0x0d7d, 0x0005, 0x00e6, 0x2071, 0x19e7, 0x6044, 0xc0bc, 0x6046,
+	0xd0fc, 0x01b8, 0x704c, 0x9c06, 0x1190, 0x2019, 0x0001, 0x080c,
+	0xa118, 0x704f, 0x0000, 0x2001, 0x0109, 0x2004, 0xd08c, 0x1138,
+	0x2001, 0x0108, 0x2004, 0xd0bc, 0x1110, 0x703f, 0x0000, 0x080c,
+	0xa34e, 0x00ee, 0x0005, 0x0026, 0x7010, 0x9c06, 0x1178, 0x080c,
+	0xa20e, 0x6044, 0xc0fc, 0x6046, 0x600c, 0x9015, 0x0120, 0x7212,
+	0x600f, 0x0000, 0x0010, 0x7212, 0x720e, 0x9006, 0x002e, 0x0005,
+	0x0026, 0x7020, 0x9c06, 0x1178, 0x080c, 0xa20e, 0x6044, 0xc0fc,
+	0x6046, 0x600c, 0x9015, 0x0120, 0x7222, 0x600f, 0x0000, 0x0010,
+	0x7222, 0x721e, 0x9006, 0x002e, 0x0005, 0x00d6, 0x0036, 0x7830,
+	0x9c06, 0x1558, 0x2069, 0x0100, 0x68c0, 0x9005, 0x01f8, 0x080c,
+	0x86f6, 0x080c, 0x9e32, 0x68c3, 0x0000, 0x080c, 0xa338, 0x2069,
+	0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c,
+	0x2a0a, 0x9006, 0x080c, 0x2a0a, 0x2069, 0x0100, 0x6824, 0xd084,
+	0x0110, 0x6827, 0x0001, 0x9085, 0x0001, 0x0038, 0x7808, 0xc0ad,
+	0x780a, 0x6003, 0x0009, 0x630a, 0x9006, 0x003e, 0x00de, 0x0005,
+	0x0016, 0x0026, 0x0036, 0x6100, 0x2019, 0x0100, 0x2001, 0x0382,
+	0x2004, 0xd09c, 0x0190, 0x00c6, 0x0126, 0x2091, 0x2800, 0x0016,
+	0x0036, 0x080c, 0xa8fc, 0x003e, 0x001e, 0x012e, 0x00ce, 0x6200,
+	0x2200, 0x9106, 0x0d58, 0x2200, 0x0010, 0x8319, 0x1d38, 0x003e,
+	0x002e, 0x001e, 0x0005, 0x00d6, 0x0156, 0x080c, 0x9aea, 0x7a14,
+	0x82ff, 0x0138, 0x7003, 0x0100, 0x700b, 0x0003, 0x60c3, 0x0008,
+	0x0490, 0x7003, 0x0200, 0x7007, 0x0000, 0x2069, 0x1800, 0x901e,
+	0x6800, 0x9086, 0x0004, 0x1110, 0xc38d, 0x0060, 0x080c, 0x74e9,
+	0x1110, 0xc3ad, 0x0008, 0xc3a5, 0x6adc, 0xd29c, 0x1110, 0xd2ac,
+	0x0108, 0xc39d, 0x730e, 0x080c, 0x87bb, 0x20a9, 0x0006, 0x2011,
+	0xfff4, 0x2019, 0xfff5, 0x2071, 0x0250, 0x2305, 0x2072, 0x8e70,
+	0x2205, 0x2072, 0x8e70, 0x9398, 0x0002, 0x9290, 0x0002, 0x1f04,
+	0xaafd, 0x60c3, 0x0020, 0x080c, 0x9e02, 0x015e, 0x00de, 0x0005,
+	0x0156, 0x080c, 0x9aea, 0x7a14, 0x82ff, 0x0168, 0x9286, 0xffff,
+	0x0118, 0x9282, 0x000e, 0x1238, 0x7003, 0x0100, 0x700b, 0x0003,
+	0x60c3, 0x0008, 0x0488, 0x7003, 0x0200, 0x7007, 0x001c, 0x700f,
+	0x0001, 0x2011, 0x19bd, 0x2204, 0x8007, 0x701a, 0x8210, 0x2204,
+	0x8007, 0x701e, 0x0421, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248,
+	0x2001, 0x181f, 0x2004, 0x7022, 0x2001, 0x1820, 0x2004, 0x7026,
+	0x0030, 0x2001, 0x1818, 0x2004, 0x9084, 0x00ff, 0x7026, 0x20a9,
+	0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1,
+	0x0256, 0x4003, 0x60c3, 0x001c, 0x015e, 0x0804, 0x9e02, 0x0006,
+	0x2001, 0x1837, 0x2004, 0xd0ac, 0x000e, 0x0005, 0x2011, 0x0003,
+	0x080c, 0xa1cf, 0x2011, 0x0002, 0x080c, 0xa1d9, 0x080c, 0xa098,
+	0x0036, 0x901e, 0x080c, 0xa118, 0x003e, 0x0005, 0x080c, 0x336d,
+	0x0188, 0x0016, 0x00b6, 0x00c6, 0x7010, 0x9085, 0x0020, 0x7012,
+	0x2009, 0x007e, 0x080c, 0x6625, 0xb85c, 0xc0ac, 0xb85e, 0x00ce,
+	0x00be, 0x001e, 0x0005, 0x2071, 0x188d, 0x7000, 0x9005, 0x0140,
+	0x2001, 0x0812, 0x2071, 0x1800, 0x7076, 0x707a, 0x706b, 0xffd4,
+	0x2071, 0x1800, 0x7074, 0x7056, 0x705b, 0x1ddc, 0x0005, 0x00e6,
+	0x0126, 0x2071, 0x1800, 0x2091, 0x8000, 0x7554, 0x9582, 0x0010,
+	0x0608, 0x7058, 0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0,
+	0x001c, 0x7068, 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1ddc, 0x0c98,
+	0x6003, 0x0008, 0x8529, 0x7556, 0x9ca8, 0x001c, 0x7068, 0x9502,
+	0x1230, 0x755a, 0x9085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x705b,
+	0x1ddc, 0x0cc0, 0x9006, 0x0cc0, 0x00e6, 0x2071, 0x1800, 0x7554,
+	0x9582, 0x0010, 0x0600, 0x7058, 0x2060, 0x6000, 0x9086, 0x0000,
+	0x0148, 0x9ce0, 0x001c, 0x7068, 0x9c02, 0x1208, 0x0cb0, 0x2061,
+	0x1ddc, 0x0c98, 0x6003, 0x0008, 0x8529, 0x7556, 0x9ca8, 0x001c,
+	0x7068, 0x9502, 0x1228, 0x755a, 0x9085, 0x0001, 0x00ee, 0x0005,
+	0x705b, 0x1ddc, 0x0cc8, 0x9006, 0x0cc8, 0x9c82, 0x1ddc, 0x0a0c,
+	0x0d7d, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1a0c, 0x0d7d, 0x9006,
+	0x6006, 0x600a, 0x600e, 0x6016, 0x601a, 0x6012, 0x6023, 0x0000,
+	0x6003, 0x0000, 0x601e, 0x605e, 0x6062, 0x6026, 0x602a, 0x602e,
+	0x6032, 0x6036, 0x603a, 0x603e, 0x604a, 0x602a, 0x6046, 0x6042,
+	0x2061, 0x1800, 0x6054, 0x8000, 0x6056, 0x0005, 0x9006, 0x600e,
+	0x6016, 0x601a, 0x6012, 0x6022, 0x6002, 0x601e, 0x605e, 0x6062,
+	0x604a, 0x6046, 0x2061, 0x1800, 0x6054, 0x8000, 0x6056, 0x0005,
+	0x0006, 0x6000, 0x9086, 0x0000, 0x01d0, 0x601c, 0xd084, 0x190c,
+	0x1a6a, 0x6023, 0x0007, 0x2001, 0x1986, 0x2004, 0x0006, 0x9082,
+	0x0051, 0x000e, 0x0208, 0x8004, 0x601a, 0x080c, 0xe524, 0x604b,
+	0x0000, 0x6044, 0xd0fc, 0x1129, 0x9006, 0x6046, 0x6016, 0x000e,
+	0x0005, 0x080c, 0xa8f4, 0x0106, 0x190c, 0xa896, 0x2001, 0x19fa,
+	0x2004, 0x9c06, 0x1130, 0x0036, 0x2019, 0x0001, 0x080c, 0xa118,
+	0x003e, 0x080c, 0xa34e, 0x010e, 0x190c, 0xa8b2, 0x0005, 0x00e6,
+	0x0126, 0x2071, 0x1800, 0x2091, 0x8000, 0x7554, 0x9582, 0x0001,
+	0x0608, 0x7058, 0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0,
+	0x001c, 0x7068, 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1ddc, 0x0c98,
+	0x6003, 0x0008, 0x8529, 0x7556, 0x9ca8, 0x001c, 0x7068, 0x9502,
+	0x1230, 0x755a, 0x9085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x705b,
+	0x1ddc, 0x0cc0, 0x9006, 0x0cc0, 0x6020, 0x9084, 0x000f, 0x0002,
+	0xaca0, 0xacaa, 0xacc5, 0xace0, 0xcf9c, 0xcfb9, 0xcfd4, 0xaca0,
+	0xacaa, 0x8f9a, 0xacfc, 0xaca0, 0xaca0, 0xaca0, 0xaca0, 0xaca0,
+	0x9186, 0x0013, 0x1130, 0x6044, 0xd0fc, 0x0110, 0x080c, 0x95de,
+	0x0005, 0x0005, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0d7d,
+	0x0013, 0x006e, 0x0005, 0xacc3, 0xb421, 0xb5fc, 0xacc3, 0xb692,
+	0xafc5, 0xacc3, 0xacc3, 0xb3a3, 0xbbfa, 0xacc3, 0xacc3, 0xacc3,
+	0xacc3, 0xacc3, 0xacc3, 0x080c, 0x0d7d, 0x0066, 0x6000, 0x90b2,
+	0x0016, 0x1a0c, 0x0d7d, 0x0013, 0x006e, 0x0005, 0xacde, 0xc205,
+	0xacde, 0xacde, 0xacde, 0xacde, 0xacde, 0xacde, 0xc1aa, 0xc388,
+	0xacde, 0xc242, 0xc2c6, 0xc242, 0xc2c6, 0xacde, 0x080c, 0x0d7d,
+	0x6000, 0x9082, 0x0016, 0x1a0c, 0x0d7d, 0x6000, 0x0002, 0xacfa,
+	0xbc44, 0xbcdb, 0xbe5b, 0xbeca, 0xacfa, 0xacfa, 0xacfa, 0xbc13,
+	0xc12b, 0xc12e, 0xacfa, 0xacfa, 0xacfa, 0xacfa, 0xc15e, 0xacfa,
+	0xacfa, 0xacfa, 0x080c, 0x0d7d, 0x0066, 0x6000, 0x90b2, 0x0016,
+	0x1a0c, 0x0d7d, 0x0013, 0x006e, 0x0005, 0xad15, 0xad15, 0xad53,
+	0xadf2, 0xae72, 0xad15, 0xad15, 0xad15, 0xad17, 0xad15, 0xad15,
+	0xad15, 0xad15, 0xad15, 0xad15, 0xad15, 0x080c, 0x0d7d, 0x9186,
+	0x004c, 0x0560, 0x9186, 0x0003, 0x190c, 0x0d7d, 0x0096, 0x601c,
+	0xc0ed, 0x601e, 0x6003, 0x0003, 0x6106, 0x6014, 0x2048, 0xa87c,
+	0x9084, 0xa000, 0xc0b5, 0xa87e, 0xa8ac, 0xa836, 0xa8b0, 0xa83a,
+	0x9006, 0xa846, 0xa84a, 0xa884, 0x9092, 0x199a, 0x0210, 0x2001,
+	0x1999, 0x8003, 0x8013, 0x8213, 0x9210, 0x621a, 0x009e, 0x080c,
+	0x1bba, 0x2009, 0x8030, 0x080c, 0x9265, 0x0005, 0x6010, 0x00b6,
+	0x2058, 0xbca0, 0x00be, 0x2c00, 0x080c, 0xae94, 0x080c, 0xcf6a,
+	0x6003, 0x0007, 0x0005, 0x00d6, 0x0096, 0x00f6, 0x2079, 0x1800,
+	0x7a90, 0x6014, 0x2048, 0xa87c, 0xd0ec, 0x1110, 0x9290, 0x0018,
+	0xac78, 0xc4fc, 0x0046, 0xa8e0, 0x9005, 0x1140, 0xa8dc, 0x921a,
+	0x0140, 0x0220, 0xa87b, 0x0007, 0x2010, 0x0028, 0xa87b, 0x0015,
+	0x0010, 0xa87b, 0x0000, 0x8214, 0xa883, 0x0000, 0xaa02, 0x0006,
+	0x0016, 0x0026, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2400, 0x9005,
+	0x1108, 0x009a, 0x2100, 0x9086, 0x0015, 0x1118, 0x2001, 0x0001,
+	0x0038, 0x2100, 0x9086, 0x0016, 0x0118, 0x2001, 0x0001, 0x002a,
+	0x94a4, 0x0007, 0x8423, 0x9405, 0x0002, 0xadba, 0xadba, 0xadb5,
+	0xadb8, 0xadba, 0xadb2, 0xada5, 0xada5, 0xada5, 0xada5, 0xada5,
+	0xada5, 0xada5, 0xada5, 0xada5, 0xada5, 0x00fe, 0x00ee, 0x00de,
+	0x00ce, 0x002e, 0x001e, 0x000e, 0x004e, 0x00fe, 0x009e, 0x00de,
+	0x080c, 0x0d7d, 0x080c, 0xb84f, 0x0028, 0x080c, 0xb934, 0x0010,
+	0x080c, 0xba2a, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x002e, 0x001e,
+	0x2c00, 0xa896, 0x000e, 0x080c, 0xaf52, 0x0530, 0xa804, 0xa80e,
+	0x00a6, 0x2050, 0xb100, 0x00ae, 0x8006, 0x8006, 0x8007, 0x90bc,
+	0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0xaacc, 0xabd0, 0xacd4,
+	0xadd8, 0x2031, 0x0000, 0x2041, 0x1298, 0x080c, 0xb112, 0x0160,
+	0x000e, 0x9005, 0x0120, 0x00fe, 0x009e, 0x00de, 0x0005, 0x00fe,
+	0x009e, 0x00de, 0x0804, 0xabed, 0x2001, 0x002c, 0x900e, 0x080c,
+	0xafb8, 0x0c70, 0x91b6, 0x0015, 0x0170, 0x91b6, 0x0016, 0x0158,
+	0x91b2, 0x0047, 0x0a0c, 0x0d7d, 0x91b2, 0x0050, 0x1a0c, 0x0d7d,
+	0x9182, 0x0047, 0x0042, 0x080c, 0xaaa8, 0x0120, 0x9086, 0x0002,
+	0x0904, 0xad53, 0x0005, 0xae14, 0xae14, 0xae16, 0xae48, 0xae14,
+	0xae14, 0xae14, 0xae14, 0xae5b, 0x080c, 0x0d7d, 0x00d6, 0x0016,
+	0x0096, 0x6003, 0x0004, 0x6114, 0x2148, 0xa87c, 0xd0fc, 0x01c0,
+	0xa878, 0xc0fc, 0x9005, 0x1158, 0xa894, 0x9005, 0x0140, 0x2001,
+	0x0000, 0x900e, 0x080c, 0xafb8, 0x080c, 0xabed, 0x00a8, 0x6003,
+	0x0002, 0xa8a4, 0xa9a8, 0x9105, 0x1178, 0xa8ae, 0xa8b2, 0x0c78,
+	0xa87f, 0x0020, 0xa88c, 0xa88a, 0xa8a4, 0xa8ae, 0xa8a8, 0xa8b2,
+	0xa8c7, 0x0000, 0xa8cb, 0x0000, 0x009e, 0x001e, 0x00de, 0x0005,
+	0x080c, 0x963b, 0x00d6, 0x0096, 0x6114, 0x2148, 0x080c, 0xc838,
+	0x0120, 0xa87b, 0x0006, 0x080c, 0x6d80, 0x009e, 0x00de, 0x080c,
+	0xabed, 0x0804, 0x96a0, 0x080c, 0x963b, 0x080c, 0x31e7, 0x080c,
+	0xcf67, 0x00d6, 0x0096, 0x6114, 0x2148, 0x080c, 0xc838, 0x0120,
+	0xa87b, 0x0029, 0x080c, 0x6d80, 0x009e, 0x00de, 0x080c, 0xabed,
+	0x0804, 0x96a0, 0x9182, 0x0047, 0x0002, 0xae82, 0xae84, 0xae82,
+	0xae82, 0xae82, 0xae82, 0xae82, 0xae82, 0xae82, 0xae82, 0xae82,
+	0xae82, 0xae84, 0x080c, 0x0d7d, 0x00d6, 0x0096, 0x601f, 0x0000,
+	0x6114, 0x2148, 0xa87b, 0x0000, 0xa883, 0x0000, 0x080c, 0x6d80,
+	0x009e, 0x00de, 0x0804, 0xabed, 0x0026, 0x0036, 0x0056, 0x0066,
+	0x0096, 0x00a6, 0x00f6, 0x0006, 0x080c, 0x103a, 0x000e, 0x090c,
+	0x0d7d, 0xa960, 0x21e8, 0xa95c, 0x9188, 0x0019, 0x21a0, 0x900e,
+	0x20a9, 0x0020, 0x4104, 0xa87a, 0x2079, 0x1800, 0x7990, 0x9188,
+	0x0018, 0x918c, 0x0fff, 0xa972, 0xac76, 0x2950, 0x00a6, 0x2001,
+	0x0205, 0x2003, 0x0000, 0x901e, 0x2029, 0x0001, 0x9182, 0x0034,
+	0x1228, 0x2011, 0x001f, 0x080c, 0xc40b, 0x04c0, 0x2130, 0x2009,
+	0x0034, 0x2011, 0x001f, 0x080c, 0xc40b, 0x96b2, 0x0034, 0xb004,
+	0x904d, 0x0110, 0x080c, 0x0fec, 0x080c, 0x103a, 0x01d0, 0x8528,
+	0xa867, 0x0110, 0xa86b, 0x0000, 0x2920, 0xb406, 0x968a, 0x003d,
+	0x1230, 0x2608, 0x2011, 0x001b, 0x080c, 0xc40b, 0x00b8, 0x96b2,
+	0x003c, 0x2009, 0x003c, 0x2950, 0x2011, 0x001b, 0x080c, 0xc40b,
+	0x0c18, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad,
+	0x0050, 0xb566, 0xb070, 0xc0fd, 0xb072, 0x0048, 0x2001, 0x0205,
+	0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad, 0x0050, 0xb566, 0x2a48,
+	0xa804, 0xa807, 0x0000, 0x0006, 0x080c, 0x6d80, 0x000e, 0x2048,
+	0x9005, 0x1db0, 0x00fe, 0x00ae, 0x009e, 0x006e, 0x005e, 0x003e,
+	0x002e, 0x0005, 0x00d6, 0x00f6, 0x0096, 0x0006, 0x080c, 0x103a,
+	0x000e, 0x090c, 0x0d7d, 0xa960, 0x21e8, 0xa95c, 0x9188, 0x0019,
+	0x21a0, 0x900e, 0x20a9, 0x0020, 0x4104, 0xaa66, 0xa87a, 0x2079,
+	0x1800, 0x7990, 0x810c, 0x9188, 0x000c, 0x9182, 0x001a, 0x0210,
+	0x2009, 0x001a, 0x21a8, 0x810b, 0xa972, 0xac76, 0x2e98, 0xa85c,
+	0x9080, 0x001f, 0x20a0, 0x2001, 0x0205, 0x200c, 0x918d, 0x0080,
+	0x2102, 0x4003, 0x2003, 0x0000, 0x080c, 0x6d80, 0x009e, 0x00fe,
+	0x00de, 0x0005, 0x0016, 0x00d6, 0x00f6, 0x0096, 0x0016, 0x2001,
+	0x0205, 0x200c, 0x918d, 0x0080, 0x2102, 0x001e, 0x2079, 0x0200,
+	0x2e98, 0xa87c, 0xd0ec, 0x0118, 0x9e80, 0x000c, 0x2098, 0x2021,
+	0x003e, 0x901e, 0x9282, 0x0020, 0x0218, 0x2011, 0x0020, 0x2018,
+	0x9486, 0x003e, 0x1170, 0x0096, 0x080c, 0x103a, 0x2900, 0x009e,
+	0x05c0, 0xa806, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002,
+	0x20a0, 0x3300, 0x908e, 0x0260, 0x0140, 0x2009, 0x0280, 0x9102,
+	0x920a, 0x0218, 0x2010, 0x2100, 0x9318, 0x2200, 0x9402, 0x1228,
+	0x2400, 0x9202, 0x2410, 0x9318, 0x9006, 0x2020, 0x22a8, 0xa800,
+	0x9200, 0xa802, 0x20e1, 0x0000, 0x4003, 0x83ff, 0x0180, 0x3300,
+	0x9086, 0x0280, 0x1130, 0x7814, 0x8000, 0x9085, 0x0080, 0x7816,
+	0x2e98, 0x2310, 0x84ff, 0x0904, 0xaf67, 0x0804, 0xaf69, 0x9085,
+	0x0001, 0x7817, 0x0000, 0x009e, 0x00fe, 0x00de, 0x001e, 0x0005,
+	0x00d6, 0x0036, 0x0096, 0x6314, 0x2348, 0xa87a, 0xa982, 0x080c,
+	0x6d74, 0x009e, 0x003e, 0x00de, 0x0005, 0x91b6, 0x0015, 0x1118,
+	0x080c, 0xabed, 0x0030, 0x91b6, 0x0016, 0x190c, 0x0d7d, 0x080c,
+	0xabed, 0x0005, 0x20a9, 0x000e, 0x20e1, 0x0000, 0x2e98, 0x6014,
+	0x0096, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x20a0, 0x009e, 0x4003,
+	0x0136, 0x9080, 0x001b, 0x2011, 0x0006, 0x20a9, 0x0001, 0x3418,
+	0x8318, 0x23a0, 0x4003, 0x3318, 0x8318, 0x2398, 0x8211, 0x1db8,
+	0x2011, 0x0006, 0x013e, 0x20a0, 0x3318, 0x8318, 0x2398, 0x4003,
+	0x3418, 0x8318, 0x23a0, 0x8211, 0x1db8, 0x0096, 0x080c, 0xc838,
+	0x0130, 0x6014, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0x009e,
+	0x0804, 0xabed, 0x0096, 0x00d6, 0x0036, 0x7330, 0x9386, 0x0200,
+	0x11a8, 0x6010, 0x00b6, 0x2058, 0xb8d7, 0x0000, 0x00be, 0x6014,
+	0x9005, 0x0130, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0xab32,
+	0x080c, 0xabed, 0x003e, 0x00de, 0x009e, 0x0005, 0x0011, 0x1d48,
+	0x0cc8, 0x0006, 0x0016, 0x080c, 0xcf52, 0x0188, 0x6014, 0x9005,
+	0x1170, 0x600b, 0x0003, 0x601b, 0x0000, 0x604b, 0x0000, 0x2009,
+	0x0022, 0x080c, 0xb3f9, 0x9006, 0x001e, 0x000e, 0x0005, 0x9085,
+	0x0001, 0x0cd0, 0x0096, 0x0016, 0x20a9, 0x0014, 0x9e80, 0x000c,
+	0x20e1, 0x0000, 0x2098, 0x6014, 0x2048, 0xa860, 0x20e8, 0xa85c,
+	0x9080, 0x0002, 0x20a0, 0x4003, 0x2001, 0x0205, 0x2003, 0x0001,
+	0x2099, 0x0260, 0x20a9, 0x0016, 0x4003, 0x20a9, 0x000a, 0xa804,
 	0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003,
-	0x2001, 0x0205, 0x2003, 0x0001, 0x2099, 0x0260, 0x20a9, 0x0016,
-	0x4003, 0x20a9, 0x000a, 0xa804, 0x2048, 0xa860, 0x20e8, 0xa85c,
-	0x9080, 0x0002, 0x20a0, 0x4003, 0x2001, 0x0205, 0x2003, 0x0002,
-	0x2099, 0x0260, 0x20a9, 0x0020, 0x4003, 0x2003, 0x0000, 0x6014,
-	0x2048, 0xa800, 0x2048, 0xa867, 0x0103, 0x080c, 0xabc9, 0x001e,
-	0x009e, 0x0005, 0x0096, 0x0016, 0x900e, 0x7030, 0x9086, 0x0100,
-	0x0140, 0x7038, 0x9084, 0x00ff, 0x800c, 0x703c, 0x9084, 0x00ff,
-	0x8004, 0x9080, 0x0004, 0x9108, 0x810b, 0x2011, 0x0002, 0x2019,
-	0x000c, 0x6014, 0x2048, 0x080c, 0xc3e7, 0x080c, 0xc814, 0x0140,
-	0x6014, 0x2048, 0xa807, 0x0000, 0xa864, 0xa8e2, 0xa867, 0x0103,
-	0x080c, 0xabc9, 0x001e, 0x009e, 0x0005, 0x0016, 0x2009, 0x0000,
-	0x7030, 0x9086, 0x0200, 0x0110, 0x2009, 0x0001, 0x0096, 0x6014,
-	0x904d, 0x090c, 0x0d7d, 0xa97a, 0x080c, 0x6d70, 0x009e, 0x080c,
-	0xabc9, 0x001e, 0x0005, 0x0016, 0x0096, 0x7030, 0x9086, 0x0100,
-	0x1118, 0x2009, 0x0004, 0x0010, 0x7034, 0x800c, 0x810b, 0x2011,
-	0x000c, 0x2019, 0x000c, 0x6014, 0x2048, 0xa804, 0x0096, 0x9005,
-	0x0108, 0x2048, 0x080c, 0xc3e7, 0x009e, 0x080c, 0xc814, 0x0148,
-	0xa804, 0x9005, 0x1158, 0xa807, 0x0000, 0xa864, 0xa8e2, 0xa867,
-	0x0103, 0x080c, 0xabc9, 0x009e, 0x001e, 0x0005, 0x0086, 0x2040,
-	0xa030, 0x8007, 0x9086, 0x0100, 0x1118, 0x080c, 0xb591, 0x00e0,
-	0xa034, 0x8007, 0x800c, 0x8806, 0x8006, 0x8007, 0x90bc, 0x003f,
-	0x9084, 0xffc0, 0x9080, 0x000c, 0xa87b, 0x0000, 0xa883, 0x0000,
-	0xa897, 0x4000, 0xaaa0, 0xab9c, 0xaca8, 0xada4, 0x2031, 0x0000,
-	0x2041, 0x127e, 0x0019, 0x0d08, 0x008e, 0x0898, 0x0096, 0x0006,
-	0x080c, 0x103a, 0x000e, 0x01b0, 0xa8ab, 0x0dcb, 0xa876, 0x000e,
-	0xa8a2, 0x0006, 0xae6a, 0x2800, 0xa89e, 0xa97a, 0xaf72, 0xaa8e,
-	0xab92, 0xac96, 0xad9a, 0x0086, 0x2940, 0x080c, 0x1124, 0x008e,
-	0x9085, 0x0001, 0x009e, 0x0005, 0x00e6, 0x00d6, 0x0026, 0x7008,
-	0x9084, 0x00ff, 0x6210, 0x00b6, 0x2258, 0xba10, 0x00be, 0x9206,
-	0x1520, 0x700c, 0x6210, 0x00b6, 0x2258, 0xba14, 0x00be, 0x9206,
-	0x11e0, 0x604b, 0x0000, 0x2c68, 0x0016, 0x2009, 0x0035, 0x080c,
-	0xcea6, 0x001e, 0x1158, 0x622c, 0x2268, 0x2071, 0x026c, 0x6b20,
-	0x9386, 0x0003, 0x0130, 0x9386, 0x0006, 0x0128, 0x080c, 0xabc9,
-	0x0020, 0x0039, 0x0010, 0x080c, 0xb20a, 0x002e, 0x00de, 0x00ee,
-	0x0005, 0x0096, 0x6814, 0x2048, 0x9186, 0x0015, 0x0904, 0xb1e9,
-	0x918e, 0x0016, 0x1904, 0xb208, 0x700c, 0x908c, 0xff00, 0x9186,
-	0x1700, 0x0120, 0x9186, 0x0300, 0x1904, 0xb1c3, 0x89ff, 0x1138,
-	0x6800, 0x9086, 0x000f, 0x0904, 0xb1a5, 0x0804, 0xb206, 0x6808,
-	0x9086, 0xffff, 0x1904, 0xb1eb, 0xa87c, 0x9084, 0x0060, 0x9086,
-	0x0020, 0x1128, 0xa83c, 0xa940, 0x9105, 0x1904, 0xb1eb, 0x6824,
-	0xd0b4, 0x1904, 0xb1eb, 0x080c, 0xca03, 0x6864, 0xa882, 0xa87c,
-	0xc0dc, 0xc0f4, 0xc0d4, 0xa87e, 0x0026, 0x900e, 0x6a18, 0x2001,
-	0x000a, 0x080c, 0x9135, 0xa884, 0x920a, 0x0208, 0x8011, 0xaa86,
-	0x82ff, 0x002e, 0x1138, 0x00c6, 0x2d60, 0x080c, 0xc53a, 0x00ce,
-	0x0804, 0xb206, 0x00c6, 0xa868, 0xd0fc, 0x1118, 0x080c, 0x60b4,
-	0x0010, 0x080c, 0x64b8, 0x00ce, 0x1904, 0xb1eb, 0x00c6, 0x2d60,
-	0x080c, 0xabc9, 0x00ce, 0x0804, 0xb206, 0x00c6, 0x080c, 0xac3b,
-	0x0198, 0x6017, 0x0000, 0x6810, 0x6012, 0x080c, 0xcca8, 0x6023,
-	0x0003, 0x6904, 0x00c6, 0x2d60, 0x080c, 0xabc9, 0x00ce, 0x080c,
-	0xac68, 0x00ce, 0x0804, 0xb206, 0x2001, 0x1988, 0x2004, 0x684a,
-	0x00ce, 0x0804, 0xb206, 0x7008, 0x9086, 0x000b, 0x11c8, 0x6010,
-	0x00b6, 0x2058, 0xb900, 0xc1bc, 0xb902, 0x00be, 0x00c6, 0x2d60,
-	0xa87b, 0x0003, 0x080c, 0xcee8, 0x6007, 0x0085, 0x6003, 0x000b,
-	0x6023, 0x0002, 0x2009, 0x8020, 0x080c, 0x91ed, 0x00ce, 0x0430,
-	0x700c, 0x9086, 0x2a00, 0x1138, 0x2001, 0x1988, 0x2004, 0x684a,
-	0x00e8, 0x04c1, 0x00e8, 0x89ff, 0x090c, 0x0d7d, 0x00c6, 0x00d6,
-	0x2d60, 0xa867, 0x0103, 0xa87b, 0x0003, 0x080c, 0x6b86, 0x080c,
-	0xca03, 0x080c, 0xac04, 0x0026, 0x6010, 0x00b6, 0x2058, 0xba3c,
-	0x080c, 0x6749, 0x00be, 0x002e, 0x00de, 0x00ce, 0x080c, 0xabc9,
-	0x009e, 0x0005, 0x9186, 0x0015, 0x1128, 0x2001, 0x1988, 0x2004,
-	0x684a, 0x0068, 0x918e, 0x0016, 0x1160, 0x00c6, 0x2d00, 0x2060,
-	0x080c, 0xe4f9, 0x080c, 0x8890, 0x080c, 0xabc9, 0x00ce, 0x080c,
-	0xabc9, 0x0005, 0x0026, 0x0036, 0x0046, 0x7228, 0xacb0, 0xabac,
-	0xd2f4, 0x0130, 0x2001, 0x1988, 0x2004, 0x684a, 0x0804, 0xb284,
-	0x00c6, 0x2d60, 0x080c, 0xc412, 0x00ce, 0x6804, 0x9086, 0x0050,
-	0x1168, 0x00c6, 0x2d00, 0x2060, 0x6003, 0x0001, 0x6007, 0x0050,
-	0x2009, 0x8023, 0x080c, 0x91ed, 0x00ce, 0x04f0, 0x6800, 0x9086,
-	0x000f, 0x01a8, 0x89ff, 0x090c, 0x0d7d, 0x6800, 0x9086, 0x0004,
-	0x1190, 0xa87c, 0xd0ac, 0x0178, 0xa843, 0x0fff, 0xa83f, 0x0fff,
-	0xa880, 0xc0fc, 0xa882, 0x2001, 0x0001, 0x6832, 0x0400, 0x2001,
-	0x0007, 0x6832, 0x00e0, 0xa87c, 0xd0b4, 0x1150, 0xd0ac, 0x0db8,
-	0x6824, 0xd0f4, 0x1d48, 0xa838, 0xa934, 0x9105, 0x0d80, 0x0c20,
-	0xd2ec, 0x1d68, 0x7024, 0x9306, 0x1118, 0x7020, 0x9406, 0x0d38,
-	0x7020, 0x683e, 0x7024, 0x683a, 0x2001, 0x0005, 0x6832, 0x080c,
-	0xcb92, 0x080c, 0x966f, 0x0010, 0x080c, 0xabc9, 0x004e, 0x003e,
-	0x002e, 0x0005, 0x00e6, 0x00d6, 0x0026, 0x7008, 0x9084, 0x00ff,
-	0x6210, 0x00b6, 0x2258, 0xba10, 0x00be, 0x9206, 0x1904, 0xb2ef,
-	0x700c, 0x6210, 0x00b6, 0x2258, 0xba14, 0x00be, 0x9206, 0x1904,
-	0xb2ef, 0x6038, 0x2068, 0x6824, 0xc0dc, 0x6826, 0x6a20, 0x9286,
-	0x0007, 0x0904, 0xb2ef, 0x9286, 0x0002, 0x0904, 0xb2ef, 0x9286,
-	0x0000, 0x05e8, 0x6808, 0x633c, 0x9306, 0x15c8, 0x2071, 0x026c,
-	0x9186, 0x0015, 0x0570, 0x918e, 0x0016, 0x1100, 0x00c6, 0x6038,
-	0x2060, 0x6104, 0x9186, 0x004b, 0x01c0, 0x9186, 0x004c, 0x01a8,
-	0x9186, 0x004d, 0x0190, 0x9186, 0x004e, 0x0178, 0x9186, 0x0052,
-	0x0160, 0x6014, 0x0096, 0x2048, 0x080c, 0xc814, 0x090c, 0x0d7d,
-	0xa87b, 0x0003, 0x009e, 0x080c, 0xcee8, 0x6007, 0x0085, 0x6003,
-	0x000b, 0x6023, 0x0002, 0x2009, 0x8020, 0x080c, 0x91ed, 0x00ce,
-	0x0030, 0x6038, 0x2070, 0x2001, 0x1988, 0x2004, 0x704a, 0x080c,
-	0xabc9, 0x002e, 0x00de, 0x00ee, 0x0005, 0x00b6, 0x0096, 0x00f6,
-	0x6014, 0x2048, 0x6010, 0x2058, 0x91b6, 0x0015, 0x0130, 0xba08,
-	0xbb0c, 0xbc00, 0xc48c, 0xbc02, 0x0460, 0x0096, 0x0156, 0x0036,
-	0x0026, 0x2b48, 0x9e90, 0x0010, 0x2019, 0x000a, 0x20a9, 0x0004,
-	0x080c, 0xbb9e, 0x002e, 0x003e, 0x015e, 0x009e, 0x1904, 0xb35e,
-	0x0096, 0x0156, 0x0036, 0x0026, 0x2b48, 0x9e90, 0x0014, 0x2019,
-	0x0006, 0x20a9, 0x0004, 0x080c, 0xbb9e, 0x002e, 0x003e, 0x015e,
-	0x009e, 0x15a0, 0x7238, 0xba0a, 0x733c, 0xbb0e, 0xbc00, 0xc48d,
-	0xbc02, 0xa804, 0x9005, 0x1128, 0x00fe, 0x009e, 0x00be, 0x0804,
-	0xafd9, 0x0096, 0x2048, 0xaa12, 0xab16, 0xac0a, 0x009e, 0x8006,
-	0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002,
-	0x2009, 0x002b, 0xaaa0, 0xab9c, 0xaca8, 0xada4, 0x2031, 0x0000,
-	0x2041, 0x127e, 0x080c, 0xb0ee, 0x0130, 0x00fe, 0x009e, 0x080c,
-	0xabc9, 0x00be, 0x0005, 0x080c, 0xb591, 0x0cb8, 0x2b78, 0x00f6,
-	0x080c, 0x31e4, 0x080c, 0xcf43, 0x00fe, 0x00c6, 0x080c, 0xab73,
-	0x2f00, 0x6012, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001,
-	0x6003, 0x0001, 0x2001, 0x0007, 0x080c, 0x656e, 0x080c, 0x659a,
-	0x080c, 0x91f4, 0x080c, 0x966f, 0x00ce, 0x0804, 0xb331, 0x2100,
-	0x91b2, 0x0053, 0x1a0c, 0x0d7d, 0x91b2, 0x0040, 0x1a04, 0xb3e7,
-	0x0002, 0xb3d5, 0xb3d5, 0xb3cb, 0xb3d5, 0xb3d5, 0xb3d5, 0xb3c9,
-	0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9,
-	0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9,
-	0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9,
-	0xb3d5, 0xb3c9, 0xb3d5, 0xb3d5, 0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9,
-	0xb3c9, 0xb3cb, 0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9,
-	0xb3c9, 0xb3c9, 0xb3c9, 0xb3d5, 0xb3d5, 0xb3c9, 0xb3c9, 0xb3c9,
-	0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9, 0xb3c9, 0xb3d5, 0xb3c9,
-	0xb3c9, 0x080c, 0x0d7d, 0x0066, 0x00b6, 0x6610, 0x2658, 0xb8d4,
-	0xc08c, 0xb8d6, 0x00be, 0x006e, 0x0000, 0x6003, 0x0001, 0x6106,
-	0x9186, 0x0032, 0x0118, 0x080c, 0x91f4, 0x0010, 0x080c, 0x91ed,
-	0x0126, 0x2091, 0x8000, 0x080c, 0x966f, 0x012e, 0x0005, 0x2600,
-	0x0002, 0xb3d5, 0xb3d5, 0xb3fb, 0xb3d5, 0xb3d5, 0xb3fb, 0xb3fb,
-	0xb3fb, 0xb3fb, 0xb3d5, 0xb3fb, 0xb3d5, 0xb3fb, 0xb3d5, 0xb3fb,
-	0xb3fb, 0xb3fb, 0xb3fb, 0x080c, 0x0d7d, 0x6004, 0x90b2, 0x0053,
-	0x1a0c, 0x0d7d, 0x91b6, 0x0013, 0x0904, 0xb4d2, 0x91b6, 0x0027,
-	0x1904, 0xb47e, 0x080c, 0x95ad, 0x6004, 0x080c, 0xca18, 0x01b0,
-	0x080c, 0xca29, 0x01a8, 0x908e, 0x0021, 0x0904, 0xb47b, 0x908e,
-	0x0022, 0x1130, 0x080c, 0xb005, 0x0904, 0xb477, 0x0804, 0xb478,
-	0x908e, 0x003d, 0x0904, 0xb47b, 0x0804, 0xb471, 0x080c, 0x3215,
-	0x2001, 0x0007, 0x080c, 0x656e, 0x6010, 0x00b6, 0x2058, 0xb9a0,
-	0x00be, 0x080c, 0xb591, 0x9186, 0x007e, 0x1148, 0x2001, 0x1837,
-	0x2014, 0xc285, 0x080c, 0x74d5, 0x1108, 0xc2ad, 0x2202, 0x080c,
-	0xa872, 0x0036, 0x0026, 0x2019, 0x0028, 0x2110, 0x080c, 0xe605,
-	0x002e, 0x003e, 0x0016, 0x0026, 0x0036, 0x2110, 0x2019, 0x0028,
-	0x080c, 0x9374, 0x0076, 0x903e, 0x080c, 0x9246, 0x6010, 0x00b6,
-	0x905d, 0x0100, 0x00be, 0x2c08, 0x080c, 0xdfc0, 0x007e, 0x003e,
-	0x002e, 0x001e, 0x080c, 0xa88e, 0x080c, 0xcf43, 0x0016, 0x080c,
-	0xcca0, 0x080c, 0xabc9, 0x001e, 0x080c, 0x32f5, 0x080c, 0x966f,
-	0x0030, 0x080c, 0xcca0, 0x080c, 0xabc9, 0x080c, 0x966f, 0x0005,
-	0x080c, 0xb591, 0x0cb0, 0x080c, 0xb5cd, 0x0c98, 0x9186, 0x0015,
-	0x0118, 0x9186, 0x0016, 0x1140, 0x080c, 0xaa84, 0x0d80, 0x9086,
-	0x0002, 0x0904, 0xb5d8, 0x0c58, 0x9186, 0x0014, 0x1d40, 0x080c,
-	0x95ad, 0x6004, 0x908e, 0x0022, 0x1118, 0x080c, 0xb005, 0x09f8,
-	0x080c, 0x31e4, 0x080c, 0xcf43, 0x080c, 0xca18, 0x1190, 0x080c,
-	0x3215, 0x6010, 0x00b6, 0x2058, 0xb9a0, 0x00be, 0x080c, 0xb591,
-	0x9186, 0x007e, 0x1128, 0x2001, 0x1837, 0x200c, 0xc185, 0x2102,
-	0x0800, 0x080c, 0xca29, 0x1120, 0x080c, 0xb591, 0x0804, 0xb471,
-	0x6004, 0x908e, 0x0032, 0x1160, 0x00e6, 0x00f6, 0x2071, 0x189e,
-	0x2079, 0x0000, 0x080c, 0x359e, 0x00fe, 0x00ee, 0x0804, 0xb471,
-	0x6004, 0x908e, 0x0021, 0x0d40, 0x908e, 0x0022, 0x090c, 0xb591,
-	0x0804, 0xb471, 0x90b2, 0x0040, 0x1a04, 0xb571, 0x2008, 0x0002,
-	0xb51a, 0xb51b, 0xb51e, 0xb521, 0xb524, 0xb527, 0xb518, 0xb518,
-	0xb518, 0xb518, 0xb518, 0xb518, 0xb518, 0xb518, 0xb518, 0xb518,
-	0xb518, 0xb518, 0xb518, 0xb518, 0xb518, 0xb518, 0xb518, 0xb518,
-	0xb518, 0xb518, 0xb518, 0xb518, 0xb518, 0xb518, 0xb52a, 0xb533,
-	0xb518, 0xb534, 0xb533, 0xb518, 0xb518, 0xb518, 0xb518, 0xb518,
-	0xb533, 0xb533, 0xb518, 0xb518, 0xb518, 0xb518, 0xb518, 0xb518,
-	0xb518, 0xb518, 0xb55c, 0xb533, 0xb518, 0xb52f, 0xb518, 0xb518,
-	0xb518, 0xb530, 0xb518, 0xb518, 0xb518, 0xb533, 0xb557, 0xb518,
-	0x080c, 0x0d7d, 0x00c0, 0x2001, 0x000b, 0x00e8, 0x2001, 0x0003,
-	0x00d0, 0x2001, 0x0005, 0x00b8, 0x2001, 0x0001, 0x00a0, 0x2001,
-	0x0009, 0x0088, 0x6003, 0x0005, 0x080c, 0x966f, 0x0058, 0x0018,
-	0x0010, 0x080c, 0x656e, 0x04b8, 0x080c, 0xcf46, 0x6003, 0x0004,
-	0x080c, 0x966f, 0x0005, 0x080c, 0x656e, 0x6003, 0x0002, 0x0036,
-	0x2019, 0x1852, 0x2304, 0x9084, 0xff00, 0x1120, 0x2001, 0x1986,
-	0x201c, 0x0040, 0x8007, 0x909a, 0x0004, 0x0ec0, 0x8003, 0x801b,
-	0x831b, 0x9318, 0x631a, 0x003e, 0x080c, 0x966f, 0x0c18, 0x080c,
-	0xcca0, 0x080c, 0xabc9, 0x08f0, 0x00e6, 0x00f6, 0x2071, 0x189e,
-	0x2079, 0x0000, 0x080c, 0x359e, 0x00fe, 0x00ee, 0x080c, 0x95ad,
-	0x080c, 0xabc9, 0x0878, 0x6003, 0x0002, 0x080c, 0xcf46, 0x0804,
-	0x966f, 0x2600, 0x2008, 0x0002, 0xb588, 0xb56b, 0xb586, 0xb56b,
-	0xb56b, 0xb586, 0xb586, 0xb586, 0xb586, 0xb56b, 0xb586, 0xb56b,
-	0xb586, 0xb56b, 0xb586, 0xb586, 0xb586, 0xb586, 0x080c, 0x0d7d,
-	0x0096, 0x6014, 0x2048, 0x080c, 0x6d70, 0x009e, 0x080c, 0xabc9,
-	0x0005, 0x00e6, 0x0096, 0x0026, 0x0016, 0x080c, 0xc814, 0x0568,
-	0x6014, 0x2048, 0xa864, 0x9086, 0x0139, 0x11a8, 0xa894, 0x9086,
-	0x0056, 0x1148, 0x080c, 0x5474, 0x0130, 0x2001, 0x0000, 0x900e,
-	0x2011, 0x4000, 0x0028, 0x2001, 0x0030, 0x900e, 0x2011, 0x4005,
-	0x080c, 0xce0d, 0x0090, 0xa868, 0xd0fc, 0x0178, 0xa807, 0x0000,
-	0x0016, 0x6004, 0x908e, 0x0021, 0x0168, 0x908e, 0x003d, 0x0150,
-	0x001e, 0xa867, 0x0103, 0xa833, 0x0100, 0x001e, 0x002e, 0x009e,
-	0x00ee, 0x0005, 0x001e, 0x0009, 0x0cc0, 0x0096, 0x6014, 0x2048,
-	0xa800, 0x2048, 0xa867, 0x0103, 0xa823, 0x8001, 0x009e, 0x0005,
-	0x00b6, 0x6610, 0x2658, 0xb804, 0x9084, 0x00ff, 0x90b2, 0x000c,
-	0x1a0c, 0x0d7d, 0x6604, 0x96b6, 0x004d, 0x1120, 0x080c, 0xcd2c,
-	0x0804, 0xb65d, 0x6604, 0x96b6, 0x0043, 0x1120, 0x080c, 0xcd75,
-	0x0804, 0xb65d, 0x6604, 0x96b6, 0x004b, 0x1120, 0x080c, 0xcda1,
-	0x0804, 0xb65d, 0x6604, 0x96b6, 0x0033, 0x1120, 0x080c, 0xccc2,
-	0x0804, 0xb65d, 0x6604, 0x96b6, 0x0028, 0x1120, 0x080c, 0xca62,
-	0x0804, 0xb65d, 0x6604, 0x96b6, 0x0029, 0x1120, 0x080c, 0xcaa3,
-	0x0804, 0xb65d, 0x6604, 0x96b6, 0x001f, 0x1120, 0x080c, 0xafae,
-	0x0804, 0xb65d, 0x6604, 0x96b6, 0x0000, 0x1118, 0x080c, 0xb2f5,
-	0x04e0, 0x6604, 0x96b6, 0x0022, 0x1118, 0x080c, 0xafe6, 0x04a8,
-	0x6604, 0x96b6, 0x0035, 0x1118, 0x080c, 0xb10c, 0x0470, 0x6604,
-	0x96b6, 0x0039, 0x1118, 0x080c, 0xb28a, 0x0438, 0x6604, 0x96b6,
-	0x003d, 0x1118, 0x080c, 0xb01e, 0x0400, 0x6604, 0x96b6, 0x0044,
-	0x1118, 0x080c, 0xb05a, 0x00c8, 0x6604, 0x96b6, 0x0049, 0x1118,
-	0x080c, 0xb09b, 0x0090, 0x6604, 0x96b6, 0x0041, 0x1118, 0x080c,
-	0xb085, 0x0058, 0x91b6, 0x0015, 0x1110, 0x0063, 0x0030, 0x91b6,
-	0x0016, 0x1128, 0x00be, 0x0804, 0xb8b7, 0x00be, 0x0005, 0x080c,
-	0xac85, 0x0cd8, 0xb67a, 0xb67d, 0xb67a, 0xb6c4, 0xb67a, 0xb82b,
-	0xb8c4, 0xb67a, 0xb67a, 0xb88d, 0xb67a, 0xb8a3, 0x0096, 0x601f,
-	0x0000, 0x6014, 0x2048, 0xa800, 0x2048, 0xa867, 0x0103, 0x009e,
-	0x0804, 0xabc9, 0xa001, 0xa001, 0x0005, 0x00e6, 0x2071, 0x1800,
-	0x7090, 0x9086, 0x0074, 0x1540, 0x080c, 0xdf91, 0x11b0, 0x6010,
-	0x00b6, 0x2058, 0x7030, 0xd08c, 0x0128, 0xb800, 0xd0bc, 0x0110,
-	0xc0c5, 0xb802, 0x00f9, 0x00be, 0x2001, 0x0006, 0x080c, 0x656e,
-	0x080c, 0x3215, 0x080c, 0xabc9, 0x0098, 0x2001, 0x000a, 0x080c,
-	0x656e, 0x080c, 0x3215, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c,
-	0x91f4, 0x080c, 0x966f, 0x0020, 0x2001, 0x0001, 0x080c, 0xb7fb,
-	0x00ee, 0x0005, 0x00d6, 0xb800, 0xd084, 0x0160, 0x9006, 0x080c,
-	0x655a, 0x2069, 0x1847, 0x6804, 0xd0a4, 0x0120, 0x2001, 0x0006,
-	0x080c, 0x659a, 0x00de, 0x0005, 0x00b6, 0x0096, 0x00d6, 0x2011,
-	0x1824, 0x2204, 0x9086, 0x0074, 0x1904, 0xb7d2, 0x6010, 0x2058,
-	0xbaa0, 0x9286, 0x007e, 0x1120, 0x080c, 0xba11, 0x0804, 0xb736,
-	0x080c, 0xba06, 0x6010, 0x2058, 0xbaa0, 0x9286, 0x0080, 0x1510,
-	0x6014, 0x9005, 0x01a8, 0x2048, 0xa864, 0x9084, 0x00ff, 0x9086,
-	0x0039, 0x1140, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c,
-	0xce0d, 0x0030, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, 0x0200,
-	0x2001, 0x0006, 0x080c, 0x656e, 0x080c, 0x3215, 0x080c, 0xabc9,
-	0x0804, 0xb7d5, 0x080c, 0xb7e3, 0x6014, 0x9005, 0x0190, 0x2048,
-	0xa868, 0xd0f4, 0x01e8, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039,
-	0x1d08, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c, 0xce0d,
-	0x08f8, 0x080c, 0xb7d9, 0x0160, 0x9006, 0x080c, 0x655a, 0x2001,
-	0x0004, 0x080c, 0x659a, 0x2001, 0x0007, 0x080c, 0x656e, 0x08a0,
-	0x2001, 0x0004, 0x080c, 0x656e, 0x6003, 0x0001, 0x6007, 0x0003,
-	0x080c, 0x91f4, 0x080c, 0x966f, 0x0804, 0xb7d5, 0xb85c, 0xd0e4,
-	0x01d8, 0x080c, 0xcc3a, 0x080c, 0x74d5, 0x0118, 0xd0dc, 0x1904,
-	0xb6f8, 0x2011, 0x1837, 0x2204, 0xc0ad, 0x2012, 0x2001, 0x196d,
-	0x2004, 0x00f6, 0x2079, 0x0100, 0x78e3, 0x0000, 0x080c, 0x266f,
-	0x78e2, 0x00fe, 0x0804, 0xb6f8, 0x080c, 0xcc7b, 0x2011, 0x1837,
-	0x2204, 0xc0a5, 0x2012, 0x0006, 0x080c, 0xe121, 0x000e, 0x1904,
-	0xb6f8, 0xc0b5, 0x2012, 0x2001, 0x0006, 0x080c, 0x656e, 0x9006,
-	0x080c, 0x655a, 0x00c6, 0x2001, 0x180f, 0x2004, 0xd09c, 0x0520,
-	0x00f6, 0x2079, 0x0100, 0x00e6, 0x2071, 0x1800, 0x700c, 0x9084,
-	0x00ff, 0x78e6, 0x707e, 0x7010, 0x78ea, 0x7082, 0x908c, 0x00ff,
-	0x00ee, 0x780c, 0xc0b5, 0x780e, 0x00fe, 0x080c, 0x2644, 0x00f6,
-	0x2100, 0x900e, 0x080c, 0x25fb, 0x795e, 0x00fe, 0x9186, 0x0081,
-	0x01d8, 0x2009, 0x0081, 0x00c8, 0x2009, 0x00ef, 0x00f6, 0x2079,
-	0x0100, 0x79ea, 0x7932, 0x7936, 0x780c, 0xc0b5, 0x780e, 0x00fe,
-	0x080c, 0x2644, 0x00f6, 0x2079, 0x1800, 0x7982, 0x2100, 0x900e,
-	0x080c, 0x25fb, 0x795e, 0x00fe, 0x8108, 0x080c, 0x65bd, 0x2b00,
-	0x00ce, 0x1904, 0xb6f8, 0x6012, 0x2009, 0x180f, 0x210c, 0xd19c,
-	0x0150, 0x2009, 0x027c, 0x210c, 0x918c, 0x00ff, 0xb912, 0x2009,
-	0x027d, 0x210c, 0xb916, 0x2001, 0x0002, 0x080c, 0x656e, 0x6023,
-	0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x91f4, 0x080c,
-	0x966f, 0x0018, 0x2001, 0x0001, 0x0431, 0x00de, 0x009e, 0x00be,
-	0x0005, 0x2001, 0x1810, 0x2004, 0xd0a4, 0x0120, 0x2001, 0x1848,
-	0x2004, 0xd0ac, 0x0005, 0x00e6, 0x080c, 0xe65e, 0x0190, 0x2071,
-	0x0260, 0x7108, 0x720c, 0x918c, 0x00ff, 0x1118, 0x9284, 0xff00,
-	0x0140, 0x6010, 0x2058, 0xb8a0, 0x9084, 0xff80, 0x1110, 0xb912,
-	0xba16, 0x00ee, 0x0005, 0x2030, 0x9005, 0x0158, 0x2001, 0x0007,
-	0x080c, 0x656e, 0x080c, 0x56e7, 0x1120, 0x2001, 0x0007, 0x080c,
-	0x659a, 0x2600, 0x9005, 0x11b0, 0x6014, 0x0096, 0x2048, 0xa868,
-	0x009e, 0xd0fc, 0x1178, 0x0036, 0x0046, 0x6010, 0x00b6, 0x2058,
-	0xbba0, 0x00be, 0x2021, 0x0004, 0x2011, 0x8014, 0x080c, 0x4b00,
-	0x004e, 0x003e, 0x080c, 0x3215, 0x6020, 0x9086, 0x000a, 0x1108,
-	0x0005, 0x0804, 0xabc9, 0x00b6, 0x00e6, 0x0026, 0x0016, 0x2071,
-	0x1800, 0x7090, 0x9086, 0x0014, 0x1904, 0xb883, 0x080c, 0x56e7,
-	0x1170, 0x6014, 0x9005, 0x1158, 0x0036, 0x0046, 0x6010, 0x2058,
-	0xbba0, 0x2021, 0x0006, 0x080c, 0x4cb7, 0x004e, 0x003e, 0x00d6,
-	0x6010, 0x2058, 0x080c, 0x66b9, 0x080c, 0xb6b2, 0x00de, 0x080c,
-	0xbad7, 0x1588, 0x6010, 0x2058, 0xb890, 0x9005, 0x0560, 0x2001,
-	0x0006, 0x080c, 0x656e, 0x0096, 0x6014, 0x904d, 0x01d0, 0xa864,
-	0x9084, 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, 0x0000, 0x900e,
-	0x2011, 0x4000, 0x080c, 0xce0d, 0x0060, 0xa864, 0x9084, 0x00ff,
-	0x9086, 0x0029, 0x0130, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833,
-	0x0200, 0x009e, 0x080c, 0x3215, 0x6020, 0x9086, 0x000a, 0x0140,
-	0x080c, 0xabc9, 0x0028, 0x080c, 0xb591, 0x9006, 0x080c, 0xb7fb,
-	0x001e, 0x002e, 0x00ee, 0x00be, 0x0005, 0x2011, 0x1824, 0x2204,
-	0x9086, 0x0014, 0x1160, 0x2001, 0x0002, 0x080c, 0x656e, 0x6003,
-	0x0001, 0x6007, 0x0001, 0x080c, 0x91f4, 0x0804, 0x966f, 0x2001,
-	0x0001, 0x0804, 0xb7fb, 0x2030, 0x2011, 0x1824, 0x2204, 0x9086,
-	0x0004, 0x1148, 0x96b6, 0x000b, 0x1120, 0x2001, 0x0007, 0x080c,
-	0x656e, 0x0804, 0xabc9, 0x2001, 0x0001, 0x0804, 0xb7fb, 0x0002,
-	0xb67a, 0xb8cf, 0xb67a, 0xb910, 0xb67a, 0xb9bd, 0xb8c4, 0xb67a,
-	0xb67a, 0xb9d1, 0xb67a, 0xb9e3, 0x6604, 0x9686, 0x0003, 0x0904,
-	0xb82b, 0x96b6, 0x001e, 0x1110, 0x080c, 0xabc9, 0x0005, 0x00b6,
-	0x00d6, 0x00c6, 0x080c, 0xb9f5, 0x11a0, 0x9006, 0x080c, 0x655a,
-	0x080c, 0x31e4, 0x080c, 0xcf43, 0x2001, 0x0002, 0x080c, 0x656e,
-	0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x91f4, 0x080c, 0x966f,
-	0x0418, 0x2009, 0x026e, 0x2104, 0x9086, 0x0009, 0x1160, 0x6010,
-	0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0170, 0x8001, 0xb842,
-	0x601b, 0x000a, 0x0088, 0x2009, 0x026f, 0x2104, 0x9084, 0xff00,
-	0x9086, 0x1900, 0x1108, 0x08a0, 0x080c, 0x31e4, 0x080c, 0xcf43,
-	0x2001, 0x0001, 0x080c, 0xb7fb, 0x00ce, 0x00de, 0x00be, 0x0005,
-	0x0096, 0x00b6, 0x0026, 0x9016, 0x080c, 0xba03, 0x00d6, 0x2069,
-	0x197c, 0x2d04, 0x9005, 0x0168, 0x6010, 0x2058, 0xb8a0, 0x9086,
-	0x007e, 0x1138, 0x2069, 0x1820, 0x2d04, 0x8000, 0x206a, 0x00de,
-	0x0010, 0x00de, 0x0088, 0x9006, 0x080c, 0x655a, 0x2001, 0x0002,
-	0x080c, 0x656e, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x91f4,
-	0x080c, 0x966f, 0x0804, 0xb98d, 0x080c, 0xc814, 0x01b0, 0x6014,
-	0x2048, 0xa864, 0x2010, 0x9086, 0x0139, 0x1138, 0x6007, 0x0016,
-	0x2001, 0x0002, 0x080c, 0xce67, 0x00b0, 0x6014, 0x2048, 0xa864,
-	0xd0fc, 0x0118, 0x2001, 0x0001, 0x0ca8, 0x2001, 0x180e, 0x2004,
-	0xd0dc, 0x0148, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005,
-	0x1110, 0x9006, 0x0c38, 0x080c, 0xb591, 0x2009, 0x026e, 0x2134,
-	0x96b4, 0x00ff, 0x9686, 0x0005, 0x0520, 0x9686, 0x000b, 0x01c8,
-	0x2009, 0x026f, 0x2104, 0x9084, 0xff00, 0x1118, 0x9686, 0x0009,
-	0x01c0, 0x9086, 0x1900, 0x1168, 0x9686, 0x0009, 0x0190, 0x2001,
-	0x0004, 0x080c, 0x656e, 0x2001, 0x0028, 0x601a, 0x6007, 0x0052,
-	0x0020, 0x2001, 0x0001, 0x080c, 0xb7fb, 0x002e, 0x00be, 0x009e,
-	0x0005, 0x9286, 0x0139, 0x0160, 0x6014, 0x2048, 0x080c, 0xc814,
-	0x0140, 0xa864, 0x9086, 0x0139, 0x0118, 0xa868, 0xd0fc, 0x0108,
-	0x0c40, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0138,
-	0x8001, 0xb842, 0x601b, 0x000a, 0x6007, 0x0016, 0x08f0, 0xb8a0,
-	0x9086, 0x007e, 0x1138, 0x00e6, 0x2071, 0x1800, 0x080c, 0x5fb5,
-	0x00ee, 0x0010, 0x080c, 0x31e4, 0x0860, 0x080c, 0xba03, 0x1160,
-	0x2001, 0x0004, 0x080c, 0x656e, 0x6003, 0x0001, 0x6007, 0x0003,
-	0x080c, 0x91f4, 0x0804, 0x966f, 0x080c, 0xb591, 0x9006, 0x0804,
-	0xb7fb, 0x0489, 0x1160, 0x2001, 0x0008, 0x080c, 0x656e, 0x6003,
-	0x0001, 0x6007, 0x0005, 0x080c, 0x91f4, 0x0804, 0x966f, 0x2001,
-	0x0001, 0x0804, 0xb7fb, 0x00f9, 0x1160, 0x2001, 0x000a, 0x080c,
-	0x656e, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x91f4, 0x0804,
-	0x966f, 0x2001, 0x0001, 0x0804, 0xb7fb, 0x2009, 0x026e, 0x2104,
-	0x9086, 0x0003, 0x1138, 0x2009, 0x026f, 0x2104, 0x9084, 0xff00,
-	0x9086, 0x2a00, 0x0005, 0x9085, 0x0001, 0x0005, 0x00b6, 0x00c6,
-	0x0016, 0x6110, 0x2158, 0x080c, 0x662d, 0x001e, 0x00ce, 0x00be,
-	0x0005, 0x00b6, 0x00f6, 0x00e6, 0x00d6, 0x0036, 0x0016, 0x6010,
-	0x2058, 0x2009, 0x1837, 0x2104, 0x9085, 0x0003, 0x200a, 0x080c,
-	0xbaa9, 0x0560, 0x2009, 0x1837, 0x2104, 0xc0cd, 0x200a, 0x080c,
-	0x6a57, 0x0158, 0x9006, 0x2020, 0x2009, 0x002a, 0x080c, 0xe29e,
-	0x2001, 0x180c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a, 0x2009,
-	0x0001, 0x080c, 0x31a3, 0x00e6, 0x2071, 0x1800, 0x080c, 0x2fb2,
-	0x00ee, 0x00c6, 0x0156, 0x20a9, 0x0781, 0x2009, 0x007f, 0x080c,
-	0x32f5, 0x8108, 0x1f04, 0xba47, 0x015e, 0x00ce, 0x080c, 0xba06,
-	0x2071, 0x0260, 0x2079, 0x0200, 0x7817, 0x0001, 0x2001, 0x1837,
-	0x200c, 0xc1c5, 0x7018, 0xd0fc, 0x0110, 0xd0dc, 0x0118, 0x7038,
-	0xd0dc, 0x1108, 0xc1c4, 0x7817, 0x0000, 0x2001, 0x1837, 0x2102,
-	0x2079, 0x0100, 0x2e04, 0x9084, 0x00ff, 0x2069, 0x181f, 0x206a,
-	0x78e6, 0x0006, 0x8e70, 0x2e04, 0x2069, 0x1820, 0x206a, 0x78ea,
-	0x7832, 0x7836, 0x2010, 0x9084, 0xff00, 0x001e, 0x9105, 0x2009,
-	0x182c, 0x200a, 0x2200, 0x9084, 0x00ff, 0x2008, 0x080c, 0x2644,
-	0x080c, 0x74d5, 0x0170, 0x2071, 0x0260, 0x2069, 0x1982, 0x7048,
-	0x206a, 0x704c, 0x6806, 0x7050, 0x680a, 0x7054, 0x680e, 0x080c,
-	0xcc3a, 0x0040, 0x2001, 0x0006, 0x080c, 0x656e, 0x080c, 0x3215,
-	0x080c, 0xabc9, 0x001e, 0x003e, 0x00de, 0x00ee, 0x00fe, 0x00be,
-	0x0005, 0x0096, 0x0026, 0x0036, 0x00e6, 0x0156, 0x2019, 0x182c,
-	0x231c, 0x83ff, 0x01f0, 0x2071, 0x0260, 0x7200, 0x9294, 0x00ff,
-	0x7004, 0x9084, 0xff00, 0x9205, 0x9306, 0x1198, 0x2011, 0x0276,
-	0x20a9, 0x0004, 0x2b48, 0x2019, 0x000a, 0x080c, 0xbb9e, 0x1148,
-	0x2011, 0x027a, 0x20a9, 0x0004, 0x2019, 0x0006, 0x080c, 0xbb9e,
-	0x1100, 0x015e, 0x00ee, 0x003e, 0x002e, 0x009e, 0x0005, 0x00e6,
-	0x2071, 0x0260, 0x7034, 0x9086, 0x0014, 0x11a8, 0x7038, 0x9086,
-	0x0800, 0x1188, 0x703c, 0xd0ec, 0x0160, 0x9084, 0x0f00, 0x9086,
-	0x0100, 0x1138, 0x7054, 0xd0a4, 0x1110, 0xd0ac, 0x0110, 0x9006,
-	0x0010, 0x9085, 0x0001, 0x00ee, 0x0005, 0x00e6, 0x0096, 0x00c6,
-	0x0076, 0x0056, 0x0046, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000,
-	0x2029, 0x19f3, 0x252c, 0x2021, 0x19fa, 0x2424, 0x2061, 0x1ddc,
-	0x2071, 0x1800, 0x7254, 0x7074, 0x9202, 0x1a04, 0xbb6a, 0x080c,
-	0x8b5f, 0x0904, 0xbb63, 0x080c, 0xe2cf, 0x0904, 0xbb63, 0x6720,
-	0x9786, 0x0007, 0x0904, 0xbb63, 0x2500, 0x9c06, 0x0904, 0xbb63,
-	0x2400, 0x9c06, 0x0904, 0xbb63, 0x3e08, 0x9186, 0x0002, 0x1148,
-	0x6010, 0x9005, 0x0130, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc,
-	0x1590, 0x00c6, 0x6043, 0xffff, 0x6000, 0x9086, 0x0004, 0x1110,
-	0x080c, 0x1a6a, 0x9786, 0x000a, 0x0148, 0x080c, 0xca29, 0x1130,
-	0x00ce, 0x080c, 0xb591, 0x080c, 0xac04, 0x00e8, 0x6014, 0x2048,
-	0x080c, 0xc814, 0x01a8, 0x9786, 0x0003, 0x1530, 0xa867, 0x0103,
-	0xa87c, 0xd0cc, 0x0130, 0x0096, 0xa878, 0x2048, 0x080c, 0x0fec,
-	0x009e, 0xab7a, 0xa877, 0x0000, 0x080c, 0x6d64, 0x080c, 0xca03,
-	0x080c, 0xac04, 0x00ce, 0x9ce0, 0x001c, 0x7068, 0x9c02, 0x1210,
-	0x0804, 0xbb0a, 0x012e, 0x000e, 0x002e, 0x004e, 0x005e, 0x007e,
-	0x00ce, 0x009e, 0x00ee, 0x0005, 0x9786, 0x0006, 0x1118, 0x080c,
-	0xe241, 0x0c30, 0x9786, 0x0009, 0x1148, 0x6000, 0x9086, 0x0004,
-	0x0d08, 0x2009, 0x004c, 0x080c, 0xac68, 0x08e0, 0x9786, 0x000a,
-	0x0938, 0x0820, 0x220c, 0x2304, 0x9106, 0x1130, 0x8210, 0x8318,
-	0x1f04, 0xbb8a, 0x9006, 0x0005, 0x2304, 0x9102, 0x0218, 0x2001,
-	0x0001, 0x0008, 0x9006, 0x918d, 0x0001, 0x0005, 0x0136, 0x01c6,
-	0x0016, 0x8906, 0x8006, 0x8007, 0x908c, 0x003f, 0x21e0, 0x9084,
-	0xffc0, 0x9300, 0x2098, 0x3518, 0x20a9, 0x0001, 0x220c, 0x4002,
-	0x910e, 0x1140, 0x8210, 0x8319, 0x1dc8, 0x9006, 0x001e, 0x01ce,
-	0x013e, 0x0005, 0x220c, 0x9102, 0x0218, 0x2001, 0x0001, 0x0010,
-	0x2001, 0x0000, 0x918d, 0x0001, 0x001e, 0x01ce, 0x013e, 0x0005,
-	0x220c, 0x810f, 0x2304, 0x9106, 0x1130, 0x8210, 0x8318, 0x1f04,
-	0xbbc8, 0x9006, 0x0005, 0x918d, 0x0001, 0x0005, 0x6004, 0x908a,
-	0x0053, 0x1a0c, 0x0d7d, 0x080c, 0xca18, 0x0120, 0x080c, 0xca29,
-	0x0158, 0x0028, 0x080c, 0x3215, 0x080c, 0xca29, 0x0128, 0x080c,
-	0x95ad, 0x080c, 0xabc9, 0x0005, 0x080c, 0xb591, 0x0cc0, 0x9182,
-	0x0057, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xbc0e,
-	0xbc0e, 0xbc0e, 0xbc0e, 0xbc0e, 0xbc0e, 0xbc0e, 0xbc0e, 0xbc0e,
-	0xbc0e, 0xbc0e, 0xbc10, 0xbc10, 0xbc10, 0xbc10, 0xbc0e, 0xbc0e,
-	0xbc0e, 0xbc10, 0xbc0e, 0xbc0e, 0xbc0e, 0xbc0e, 0x080c, 0x0d7d,
-	0x600b, 0xffff, 0x6003, 0x000f, 0x6106, 0x0126, 0x2091, 0x8000,
-	0x080c, 0xcf46, 0x2009, 0x8000, 0x080c, 0x91ed, 0x012e, 0x0005,
-	0x9186, 0x0013, 0x1128, 0x6004, 0x9082, 0x0040, 0x0804, 0xbc95,
-	0x9186, 0x0027, 0x1520, 0x080c, 0x95ad, 0x080c, 0x31e4, 0x080c,
-	0xcf43, 0x0096, 0x6114, 0x2148, 0x080c, 0xc814, 0x0198, 0x080c,
-	0xca29, 0x1118, 0x080c, 0xb591, 0x0068, 0xa867, 0x0103, 0xa87b,
-	0x0029, 0xa877, 0x0000, 0xa97c, 0xc1c5, 0xa97e, 0x080c, 0x6d70,
-	0x080c, 0xca03, 0x009e, 0x080c, 0xabc9, 0x0804, 0x966f, 0x9186,
-	0x0014, 0x1120, 0x6004, 0x9082, 0x0040, 0x0018, 0x080c, 0x0d7d,
-	0x0005, 0x0002, 0xbc73, 0xbc71, 0xbc71, 0xbc71, 0xbc71, 0xbc71,
-	0xbc71, 0xbc71, 0xbc71, 0xbc71, 0xbc71, 0xbc8c, 0xbc8c, 0xbc8c,
-	0xbc8c, 0xbc71, 0xbc8c, 0xbc71, 0xbc8c, 0xbc71, 0xbc71, 0xbc71,
-	0xbc71, 0x080c, 0x0d7d, 0x080c, 0x95ad, 0x0096, 0x6114, 0x2148,
-	0x080c, 0xc814, 0x0168, 0xa867, 0x0103, 0xa87b, 0x0006, 0xa877,
-	0x0000, 0xa880, 0xc0ec, 0xa882, 0x080c, 0x6d70, 0x080c, 0xca03,
-	0x009e, 0x080c, 0xabc9, 0x0005, 0x080c, 0x95ad, 0x080c, 0xca29,
-	0x090c, 0xb591, 0x080c, 0xabc9, 0x0005, 0x0002, 0xbcaf, 0xbcad,
-	0xbcad, 0xbcad, 0xbcad, 0xbcad, 0xbcad, 0xbcad, 0xbcad, 0xbcad,
-	0xbcad, 0xbcb1, 0xbcb1, 0xbcb1, 0xbcb1, 0xbcad, 0xbcb3, 0xbcad,
-	0xbcb1, 0xbcad, 0xbcad, 0xbcad, 0xbcad, 0x080c, 0x0d7d, 0x080c,
-	0x0d7d, 0x080c, 0x0d7d, 0x080c, 0xabc9, 0x0804, 0x966f, 0x9182,
-	0x0057, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xbcd6,
-	0xbcd6, 0xbcd6, 0xbcd6, 0xbcd6, 0xbd0f, 0xbdfe, 0xbcd6, 0xbe0a,
-	0xbcd6, 0xbcd6, 0xbcd6, 0xbcd6, 0xbcd6, 0xbcd6, 0xbcd6, 0xbcd6,
-	0xbcd6, 0xbcd6, 0xbe0a, 0xbcd8, 0xbcd6, 0xbe08, 0x080c, 0x0d7d,
-	0x00b6, 0x0096, 0x6114, 0x2148, 0x6010, 0x2058, 0xb800, 0xd0bc,
-	0x1508, 0xa87b, 0x0000, 0xa867, 0x0103, 0xa877, 0x0000, 0xa87c,
-	0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115, 0x190c, 0xbe8f, 0x080c,
-	0x6b86, 0x6210, 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e,
-	0xb8d0, 0x9005, 0x0110, 0x080c, 0x6749, 0x080c, 0xabc9, 0x009e,
-	0x00be, 0x0005, 0xa87c, 0xd0ac, 0x09e0, 0xa838, 0xa934, 0x9105,
-	0x09c0, 0xa880, 0xd0bc, 0x19a8, 0x080c, 0xcb59, 0x0c80, 0x00b6,
-	0x0096, 0x6114, 0x2148, 0x601c, 0xd0fc, 0x1110, 0x7644, 0x0008,
-	0x9036, 0x96b4, 0x0fff, 0x86ff, 0x1590, 0x6010, 0x2058, 0xb800,
-	0xd0bc, 0x1904, 0xbded, 0xa87b, 0x0000, 0xa867, 0x0103, 0xae76,
-	0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115, 0x190c, 0xbe8f,
-	0x080c, 0x6b86, 0x6210, 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211,
-	0xba3e, 0xb8d0, 0x9005, 0x0110, 0x080c, 0x6749, 0x601c, 0xd0fc,
-	0x1148, 0x7044, 0xd0e4, 0x1904, 0xbdd1, 0x080c, 0xabc9, 0x009e,
-	0x00be, 0x0005, 0x2009, 0x0211, 0x210c, 0x080c, 0x0d7d, 0x968c,
-	0x0c00, 0x0150, 0x6010, 0x2058, 0xb800, 0xd0bc, 0x1904, 0xbdd5,
-	0x7348, 0xab92, 0x734c, 0xab8e, 0x968c, 0x00ff, 0x9186, 0x0002,
-	0x0508, 0x9186, 0x0028, 0x1118, 0xa87b, 0x001c, 0x00e8, 0xd6dc,
-	0x01a0, 0xa87b, 0x0015, 0xa87c, 0xd0ac, 0x0170, 0xa938, 0xaa34,
-	0x2100, 0x9205, 0x0148, 0x7048, 0x9106, 0x1118, 0x704c, 0x9206,
-	0x0118, 0xa992, 0xaa8e, 0xc6dc, 0x0038, 0xd6d4, 0x0118, 0xa87b,
-	0x0007, 0x0010, 0xa87b, 0x0000, 0xa867, 0x0103, 0xae76, 0x901e,
-	0xd6c4, 0x01d8, 0x9686, 0x0100, 0x1130, 0x7064, 0x9005, 0x1118,
-	0xc6c4, 0x0804, 0xbd1b, 0x735c, 0xab86, 0x83ff, 0x0170, 0x938a,
-	0x0009, 0x0210, 0x2019, 0x0008, 0x0036, 0x2308, 0x2019, 0x0018,
-	0x2011, 0x0025, 0x080c, 0xc3e7, 0x003e, 0xd6cc, 0x0904, 0xbd30,
-	0x7154, 0xa98a, 0x81ff, 0x0904, 0xbd30, 0x9192, 0x0021, 0x1278,
-	0x8304, 0x9098, 0x0018, 0x2011, 0x0029, 0x080c, 0xc3e7, 0x2011,
-	0x0205, 0x2013, 0x0000, 0x080c, 0xced3, 0x0804, 0xbd30, 0xa868,
-	0xd0fc, 0x0120, 0x2009, 0x0020, 0xa98a, 0x0c50, 0x00a6, 0x2950,
-	0x080c, 0xc386, 0x00ae, 0x080c, 0xced3, 0x080c, 0xc3d7, 0x0804,
-	0xbd32, 0x080c, 0xcb1c, 0x0804, 0xbd47, 0xa87c, 0xd0ac, 0x0904,
-	0xbd58, 0xa880, 0xd0bc, 0x1904, 0xbd58, 0x7348, 0xa838, 0x9306,
-	0x11c8, 0x734c, 0xa834, 0x931e, 0x0904, 0xbd58, 0xd6d4, 0x0190,
-	0xab38, 0x9305, 0x0904, 0xbd58, 0x0068, 0xa87c, 0xd0ac, 0x0904,
-	0xbd23, 0xa838, 0xa934, 0x9105, 0x0904, 0xbd23, 0xa880, 0xd0bc,
-	0x1904, 0xbd23, 0x080c, 0xcb59, 0x0804, 0xbd47, 0x00f6, 0x2079,
-	0x026c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x00fe, 0x0021, 0x0005,
-	0x0011, 0x0005, 0x0005, 0x0096, 0x6003, 0x0002, 0x6007, 0x0043,
-	0x6014, 0x2048, 0xa87c, 0xd0ac, 0x0128, 0x009e, 0x0005, 0x2130,
-	0x2228, 0x0058, 0x2400, 0xa9ac, 0x910a, 0x2300, 0xaab0, 0x9213,
-	0x2600, 0x9102, 0x2500, 0x9203, 0x0e90, 0xac46, 0xab4a, 0xae36,
-	0xad3a, 0x6044, 0xd0fc, 0x190c, 0xa89b, 0x604b, 0x0000, 0x080c,
-	0x1c30, 0x1118, 0x6144, 0x080c, 0x9219, 0x009e, 0x0005, 0x9182,
-	0x0057, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xbe56,
-	0xbe56, 0xbe56, 0xbe56, 0xbe56, 0xbe56, 0xbe56, 0xbe56, 0xbe56,
-	0xbe56, 0xbe58, 0xbe56, 0xbe56, 0xbe56, 0xbe56, 0xbe69, 0xbe56,
-	0xbe56, 0xbe56, 0xbe56, 0xbe8d, 0xbe56, 0xbe56, 0x080c, 0x0d7d,
-	0x6004, 0x9086, 0x0040, 0x1110, 0x080c, 0x95ad, 0x2019, 0x0001,
-	0x080c, 0xa0f4, 0x6003, 0x0002, 0x080c, 0xcf4b, 0x080c, 0x960a,
-	0x0005, 0x6004, 0x9086, 0x0040, 0x1110, 0x080c, 0x95ad, 0x2019,
-	0x0001, 0x080c, 0xa0f4, 0x080c, 0x960a, 0x080c, 0x31e4, 0x080c,
-	0xcf43, 0x0096, 0x6114, 0x2148, 0x080c, 0xc814, 0x0150, 0xa867,
-	0x0103, 0xa87b, 0x0029, 0xa877, 0x0000, 0x080c, 0x6d70, 0x080c,
-	0xca03, 0x009e, 0x080c, 0xabc9, 0x0005, 0x080c, 0x0d7d, 0xa87b,
-	0x0015, 0xd1fc, 0x0180, 0xa87b, 0x0007, 0x8002, 0x8000, 0x810a,
-	0x9189, 0x0000, 0x0006, 0x0016, 0x2009, 0x1a78, 0x2104, 0x8000,
-	0x200a, 0x001e, 0x000e, 0xa992, 0xa88e, 0x0005, 0x9182, 0x0057,
-	0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xbec5, 0xbec5,
-	0xbec5, 0xbec5, 0xbec5, 0xbec7, 0xbec5, 0xbec5, 0xbf84, 0xbec5,
-	0xbec5, 0xbec5, 0xbec5, 0xbec5, 0xbec5, 0xbec5, 0xbec5, 0xbec5,
-	0xbec5, 0xc0c8, 0xbec5, 0xc0d2, 0xbec5, 0x080c, 0x0d7d, 0x601c,
-	0xd0bc, 0x0178, 0xd084, 0x0168, 0xd0f4, 0x0120, 0xc084, 0x601e,
-	0x0804, 0xbcb7, 0x6114, 0x0096, 0x2148, 0xa87c, 0xc0e5, 0xa87e,
-	0x009e, 0x0076, 0x00a6, 0x00e6, 0x0096, 0x2071, 0x0260, 0x6114,
-	0x2150, 0x601c, 0xd0fc, 0x1110, 0x7644, 0x0008, 0x9036, 0xb676,
-	0x96b4, 0x0fff, 0xb77c, 0xc7e5, 0xb77e, 0x6210, 0x00b6, 0x2258,
-	0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, 0x00be, 0x86ff, 0x0904,
-	0xbf7d, 0x9694, 0xff00, 0x9284, 0x0c00, 0x0120, 0x7048, 0xb092,
-	0x704c, 0xb08e, 0x9284, 0x0300, 0x0904, 0xbf7d, 0x9686, 0x0100,
-	0x1130, 0x7064, 0x9005, 0x1118, 0xc6c4, 0xb676, 0x0c38, 0x080c,
-	0x103a, 0x090c, 0x0d7d, 0x2900, 0xb07a, 0xb77c, 0x97bd, 0x0200,
-	0xb77e, 0xa867, 0x0103, 0xb068, 0xa86a, 0xb06c, 0xa86e, 0xb070,
-	0xa872, 0x7044, 0x9084, 0xf000, 0x9635, 0xae76, 0x968c, 0x0c00,
-	0x0120, 0x7348, 0xab92, 0x734c, 0xab8e, 0x968c, 0x00ff, 0x9186,
-	0x0002, 0x0180, 0x9186, 0x0028, 0x1118, 0xa87b, 0x001c, 0x0060,
-	0xd6dc, 0x0118, 0xa87b, 0x0015, 0x0038, 0xd6d4, 0x0118, 0xa87b,
-	0x0007, 0x0010, 0xa87b, 0x0000, 0xaf7e, 0xb080, 0xa882, 0xb084,
-	0xa886, 0x901e, 0xd6c4, 0x0190, 0x735c, 0xab86, 0x83ff, 0x0170,
-	0x938a, 0x0009, 0x0210, 0x2019, 0x0008, 0x0036, 0x2308, 0x2019,
-	0x0018, 0x2011, 0x0025, 0x080c, 0xc3e7, 0x003e, 0xd6cc, 0x01e8,
-	0x7154, 0xa98a, 0x81ff, 0x01c8, 0x9192, 0x0021, 0x1260, 0x8304,
-	0x9098, 0x0018, 0x2011, 0x0029, 0x080c, 0xc3e7, 0x2011, 0x0205,
-	0x2013, 0x0000, 0x0050, 0xb068, 0xd0fc, 0x0120, 0x2009, 0x0020,
-	0xa98a, 0x0c68, 0x2950, 0x080c, 0xc386, 0x080c, 0x1a48, 0x009e,
-	0x00ee, 0x00ae, 0x007e, 0x0005, 0x2001, 0x1988, 0x2004, 0x604a,
-	0x0096, 0x6114, 0x2148, 0xa83c, 0xa940, 0x9105, 0x1118, 0xa87c,
-	0xc0dc, 0xa87e, 0x6003, 0x0002, 0x080c, 0xcf54, 0x0904, 0xc0c3,
-	0x604b, 0x0000, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc,
-	0x1500, 0xd1cc, 0x0904, 0xc082, 0xa978, 0xa868, 0xd0fc, 0x0904,
-	0xc043, 0x0016, 0xa87c, 0x0006, 0xa880, 0x0006, 0x00a6, 0x2150,
-	0xb174, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x0904, 0xc011, 0x9086,
-	0x0028, 0x1904, 0xbffd, 0xa87b, 0x001c, 0xb07b, 0x001c, 0x0804,
-	0xc019, 0x6024, 0xd0f4, 0x11d0, 0xa838, 0xaa34, 0x9205, 0x09c8,
-	0xa838, 0xaa90, 0x9206, 0x1120, 0xa88c, 0xaa34, 0x9206, 0x0988,
-	0x6024, 0xd0d4, 0x1148, 0xa9ac, 0xa834, 0x9102, 0x603a, 0xa9b0,
-	0xa838, 0x9103, 0x603e, 0x6024, 0xc0f5, 0x6026, 0x6010, 0x00b6,
-	0x2058, 0xb83c, 0x8000, 0xb83e, 0x00be, 0x601c, 0xc0fc, 0x601e,
-	0x9006, 0xa876, 0xa892, 0xa88e, 0xa87c, 0xc0e4, 0xa87e, 0xd0cc,
-	0x0140, 0xc0cc, 0xa87e, 0x0096, 0xa878, 0x2048, 0x080c, 0x0fec,
-	0x009e, 0x080c, 0xcb59, 0x0804, 0xc0c3, 0xd1dc, 0x0158, 0xa87b,
-	0x0015, 0xb07b, 0x0015, 0x080c, 0xcdf6, 0x0118, 0xb174, 0xc1dc,
-	0xb176, 0x0078, 0xd1d4, 0x0128, 0xa87b, 0x0007, 0xb07b, 0x0007,
-	0x0040, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115, 0x190c,
-	0xbe8f, 0xa87c, 0xb07e, 0xa890, 0xb092, 0xa88c, 0xb08e, 0xa860,
-	0x20e8, 0xa85c, 0x9080, 0x0019, 0x20a0, 0x20a9, 0x0020, 0x8a06,
-	0x8006, 0x8007, 0x9094, 0x003f, 0x22e0, 0x9084, 0xffc0, 0x9080,
-	0x0019, 0x2098, 0x4003, 0x00ae, 0x000e, 0xa882, 0x000e, 0xa87e,
-	0x080c, 0xced3, 0x001e, 0xa874, 0x0006, 0x2148, 0x080c, 0x0fec,
-	0x001e, 0x0804, 0xc0af, 0x0016, 0x00a6, 0x2150, 0xb174, 0x9184,
-	0x00ff, 0x90b6, 0x0002, 0x01e0, 0x9086, 0x0028, 0x1128, 0xa87b,
-	0x001c, 0xb07b, 0x001c, 0x00e0, 0xd1dc, 0x0158, 0xa87b, 0x0015,
-	0xb07b, 0x0015, 0x080c, 0xcdf6, 0x0118, 0xb174, 0xc1dc, 0xb176,
-	0x0078, 0xd1d4, 0x0128, 0xa87b, 0x0007, 0xb07b, 0x0007, 0x0040,
-	0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115, 0x190c, 0xbe8f,
-	0xa890, 0xb092, 0xa88c, 0xb08e, 0xa87c, 0xb07e, 0x00ae, 0x080c,
-	0x0fec, 0x009e, 0x080c, 0xced3, 0xa974, 0x0016, 0x080c, 0xc3d7,
-	0x001e, 0x0468, 0xa867, 0x0103, 0xa974, 0x9184, 0x00ff, 0x90b6,
-	0x0002, 0x01b0, 0x9086, 0x0028, 0x1118, 0xa87b, 0x001c, 0x00d0,
-	0xd1dc, 0x0148, 0xa87b, 0x0015, 0x080c, 0xcdf6, 0x0118, 0xa974,
-	0xc1dc, 0xa976, 0x0078, 0xd1d4, 0x0118, 0xa87b, 0x0007, 0x0050,
-	0xa87b, 0x0000, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115,
-	0x190c, 0xbe8f, 0xa974, 0x0016, 0x080c, 0x6b86, 0x001e, 0x6010,
-	0x00b6, 0x2058, 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, 0xb8d0,
-	0x9005, 0x0120, 0x0016, 0x080c, 0x6749, 0x001e, 0x00be, 0xd1e4,
-	0x1120, 0x080c, 0xabc9, 0x009e, 0x0005, 0x080c, 0xcb1c, 0x0cd8,
-	0x6114, 0x0096, 0x2148, 0xa97c, 0x080c, 0xcf54, 0x190c, 0x1a56,
-	0x009e, 0x0005, 0x0096, 0x6114, 0x2148, 0xa83c, 0xa940, 0x9105,
-	0x01e8, 0xa877, 0x0000, 0xa87b, 0x0000, 0xa867, 0x0103, 0x00b6,
-	0x6010, 0x2058, 0xa834, 0xa938, 0x9115, 0x11a0, 0x080c, 0x6b86,
-	0xba3c, 0x8211, 0x0208, 0xba3e, 0xb8d0, 0x9005, 0x0110, 0x080c,
-	0x6749, 0x080c, 0xabc9, 0x00be, 0x009e, 0x0005, 0xa87c, 0xc0dc,
-	0xa87e, 0x08f8, 0xb800, 0xd0bc, 0x1120, 0xa834, 0x080c, 0xbe8f,
-	0x0c28, 0xa880, 0xd0bc, 0x1dc8, 0x080c, 0xcb59, 0x0c60, 0x080c,
-	0x95ad, 0x0010, 0x080c, 0x960a, 0x601c, 0xd084, 0x0110, 0x080c,
-	0x1a6a, 0x080c, 0xc814, 0x01f0, 0x0096, 0x6114, 0x2148, 0x080c,
-	0xca29, 0x1118, 0x080c, 0xb591, 0x00a0, 0xa867, 0x0103, 0x2009,
-	0x180c, 0x210c, 0xd18c, 0x1198, 0xd184, 0x1170, 0x6108, 0xa97a,
-	0x918e, 0x0029, 0x1110, 0x080c, 0xe5f6, 0xa877, 0x0000, 0x080c,
-	0x6d70, 0x009e, 0x0804, 0xac04, 0xa87b, 0x0004, 0x0cb0, 0xa87b,
-	0x0004, 0x0c98, 0x9182, 0x0057, 0x1220, 0x9182, 0x0040, 0x0208,
-	0x000a, 0x0005, 0xc159, 0xc159, 0xc159, 0xc159, 0xc159, 0xc15b,
-	0xc159, 0xc159, 0xc159, 0xc159, 0xc159, 0xc159, 0xc159, 0xc159,
-	0xc159, 0xc159, 0xc159, 0xc159, 0xc159, 0xc159, 0xc17f, 0xc159,
-	0xc159, 0x080c, 0x0d7d, 0x080c, 0x56db, 0x01f8, 0x6014, 0x7144,
-	0x918c, 0x0fff, 0x9016, 0xd1c4, 0x0118, 0x7264, 0x9294, 0x00ff,
-	0x0096, 0x904d, 0x0188, 0xa87b, 0x0000, 0xa864, 0x9086, 0x0139,
-	0x0128, 0xa867, 0x0103, 0xa976, 0xaa96, 0x0030, 0xa897, 0x4000,
-	0xa99a, 0xaa9e, 0x080c, 0x6d70, 0x009e, 0x0804, 0xabc9, 0x080c,
-	0x56db, 0x0dd8, 0x6014, 0x900e, 0x9016, 0x0c10, 0x9182, 0x0085,
-	0x0002, 0xc198, 0xc196, 0xc196, 0xc1a4, 0xc196, 0xc196, 0xc196,
-	0xc196, 0xc196, 0xc196, 0xc196, 0xc196, 0xc196, 0x080c, 0x0d7d,
-	0x6003, 0x0001, 0x6106, 0x0126, 0x2091, 0x8000, 0x2009, 0x8020,
-	0x080c, 0x91ed, 0x012e, 0x0005, 0x0026, 0x0056, 0x00d6, 0x00e6,
-	0x2071, 0x0260, 0x7224, 0x6216, 0x7220, 0x080c, 0xc802, 0x01a0,
-	0x2268, 0x6800, 0x9086, 0x0000, 0x0178, 0x6010, 0x6d10, 0x952e,
-	0x1158, 0x00c6, 0x2d60, 0x080c, 0xc412, 0x00ce, 0x0128, 0x6803,
-	0x0002, 0x6007, 0x0086, 0x0010, 0x6007, 0x0087, 0x6003, 0x0001,
-	0x2009, 0x8020, 0x080c, 0x91ed, 0x9280, 0x0004, 0x00b6, 0x2058,
-	0xb800, 0x00be, 0xd0bc, 0x0140, 0x6824, 0xd0ec, 0x0128, 0x00c6,
-	0x2260, 0x080c, 0xcb59, 0x00ce, 0x00ee, 0x00de, 0x005e, 0x002e,
-	0x0005, 0x9186, 0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c,
-	0x0d7d, 0x908a, 0x0092, 0x1a0c, 0x0d7d, 0x9082, 0x0085, 0x00e2,
-	0x9186, 0x0027, 0x0120, 0x9186, 0x0014, 0x190c, 0x0d7d, 0x080c,
-	0x95ad, 0x0096, 0x6014, 0x2048, 0x080c, 0xc814, 0x0140, 0xa867,
-	0x0103, 0xa877, 0x0000, 0xa87b, 0x0029, 0x080c, 0x6d70, 0x009e,
-	0x080c, 0xac04, 0x0804, 0x966f, 0xc219, 0xc21b, 0xc21b, 0xc219,
-	0xc219, 0xc219, 0xc219, 0xc219, 0xc219, 0xc219, 0xc219, 0xc219,
-	0xc219, 0x080c, 0x0d7d, 0x080c, 0xac04, 0x0005, 0x9186, 0x0013,
-	0x1130, 0x6004, 0x9082, 0x0085, 0x2008, 0x0804, 0xc26a, 0x9186,
-	0x0027, 0x1558, 0x080c, 0x95ad, 0x080c, 0x31e4, 0x080c, 0xcf43,
-	0x0096, 0x6014, 0x2048, 0x080c, 0xc814, 0x0150, 0xa867, 0x0103,
-	0xa877, 0x0000, 0xa87b, 0x0029, 0x080c, 0x6d70, 0x080c, 0xca03,
-	0x009e, 0x080c, 0xabc9, 0x0005, 0x9186, 0x0089, 0x0118, 0x9186,
-	0x008a, 0x1140, 0x080c, 0xaa84, 0x0128, 0x9086, 0x000c, 0x0904,
-	0xc2a2, 0x0000, 0x080c, 0xac85, 0x0c70, 0x9186, 0x0014, 0x1d60,
-	0x080c, 0x95ad, 0x0096, 0x6014, 0x2048, 0x080c, 0xc814, 0x0d00,
-	0xa867, 0x0103, 0xa877, 0x0000, 0xa87b, 0x0006, 0xa880, 0xc0ec,
-	0xa882, 0x0890, 0x0002, 0xc27a, 0xc278, 0xc278, 0xc278, 0xc278,
-	0xc278, 0xc28e, 0xc278, 0xc278, 0xc278, 0xc278, 0xc278, 0xc278,
-	0x080c, 0x0d7d, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039,
-	0x0118, 0x9186, 0x0035, 0x1118, 0x2001, 0x1986, 0x0010, 0x2001,
-	0x1987, 0x2004, 0x601a, 0x6003, 0x000c, 0x0005, 0x6034, 0x908c,
+	0x2001, 0x0205, 0x2003, 0x0002, 0x2099, 0x0260, 0x20a9, 0x0020,
+	0x4003, 0x2003, 0x0000, 0x6014, 0x2048, 0xa800, 0x2048, 0xa867,
+	0x0103, 0x080c, 0xabed, 0x001e, 0x009e, 0x0005, 0x0096, 0x0016,
+	0x900e, 0x7030, 0x9086, 0x0100, 0x0140, 0x7038, 0x9084, 0x00ff,
+	0x800c, 0x703c, 0x9084, 0x00ff, 0x8004, 0x9080, 0x0004, 0x9108,
+	0x810b, 0x2011, 0x0002, 0x2019, 0x000c, 0x6014, 0x2048, 0x080c,
+	0xc40b, 0x080c, 0xc838, 0x0140, 0x6014, 0x2048, 0xa807, 0x0000,
+	0xa864, 0xa8e2, 0xa867, 0x0103, 0x080c, 0xabed, 0x001e, 0x009e,
+	0x0005, 0x0016, 0x2009, 0x0000, 0x7030, 0x9086, 0x0200, 0x0110,
+	0x2009, 0x0001, 0x0096, 0x6014, 0x904d, 0x090c, 0x0d7d, 0xa97a,
+	0x080c, 0x6d80, 0x009e, 0x080c, 0xabed, 0x001e, 0x0005, 0x0016,
+	0x0096, 0x7030, 0x9086, 0x0100, 0x1118, 0x2009, 0x0004, 0x0010,
+	0x7034, 0x800c, 0x810b, 0x2011, 0x000c, 0x2019, 0x000c, 0x6014,
+	0x2048, 0xa804, 0x0096, 0x9005, 0x0108, 0x2048, 0x080c, 0xc40b,
+	0x009e, 0x080c, 0xc838, 0x0148, 0xa804, 0x9005, 0x1158, 0xa807,
+	0x0000, 0xa864, 0xa8e2, 0xa867, 0x0103, 0x080c, 0xabed, 0x009e,
+	0x001e, 0x0005, 0x0086, 0x2040, 0xa030, 0x8007, 0x9086, 0x0100,
+	0x1118, 0x080c, 0xb5b5, 0x00e0, 0xa034, 0x8007, 0x800c, 0x8806,
+	0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x000c,
+	0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0xaaa0, 0xab9c,
+	0xaca8, 0xada4, 0x2031, 0x0000, 0x2041, 0x127e, 0x0019, 0x0d08,
+	0x008e, 0x0898, 0x0096, 0x0006, 0x080c, 0x103a, 0x000e, 0x01b0,
+	0xa8ab, 0x0dcb, 0xa876, 0x000e, 0xa8a2, 0x0006, 0xae6a, 0x2800,
+	0xa89e, 0xa97a, 0xaf72, 0xaa8e, 0xab92, 0xac96, 0xad9a, 0x0086,
+	0x2940, 0x080c, 0x1124, 0x008e, 0x9085, 0x0001, 0x009e, 0x0005,
+	0x00e6, 0x00d6, 0x0026, 0x7008, 0x9084, 0x00ff, 0x6210, 0x00b6,
+	0x2258, 0xba10, 0x00be, 0x9206, 0x1520, 0x700c, 0x6210, 0x00b6,
+	0x2258, 0xba14, 0x00be, 0x9206, 0x11e0, 0x604b, 0x0000, 0x2c68,
+	0x0016, 0x2009, 0x0035, 0x080c, 0xceca, 0x001e, 0x1158, 0x622c,
+	0x2268, 0x2071, 0x026c, 0x6b20, 0x9386, 0x0003, 0x0130, 0x9386,
+	0x0006, 0x0128, 0x080c, 0xabed, 0x0020, 0x0039, 0x0010, 0x080c,
+	0xb22e, 0x002e, 0x00de, 0x00ee, 0x0005, 0x0096, 0x6814, 0x2048,
+	0x9186, 0x0015, 0x0904, 0xb20d, 0x918e, 0x0016, 0x1904, 0xb22c,
+	0x700c, 0x908c, 0xff00, 0x9186, 0x1700, 0x0120, 0x9186, 0x0300,
+	0x1904, 0xb1e7, 0x89ff, 0x1138, 0x6800, 0x9086, 0x000f, 0x0904,
+	0xb1c9, 0x0804, 0xb22a, 0x6808, 0x9086, 0xffff, 0x1904, 0xb20f,
+	0xa87c, 0x9084, 0x0060, 0x9086, 0x0020, 0x1128, 0xa83c, 0xa940,
+	0x9105, 0x1904, 0xb20f, 0x6824, 0xd0b4, 0x1904, 0xb20f, 0x080c,
+	0xca27, 0x6864, 0xa882, 0xa87c, 0xc0dc, 0xc0f4, 0xc0d4, 0xa87e,
+	0x0026, 0x900e, 0x6a18, 0x2001, 0x000a, 0x080c, 0x9166, 0xa884,
+	0x920a, 0x0208, 0x8011, 0xaa86, 0x82ff, 0x002e, 0x1138, 0x00c6,
+	0x2d60, 0x080c, 0xc55e, 0x00ce, 0x0804, 0xb22a, 0x00c6, 0xa868,
+	0xd0fc, 0x1118, 0x080c, 0x60bb, 0x0010, 0x080c, 0x64bf, 0x00ce,
+	0x1904, 0xb20f, 0x00c6, 0x2d60, 0x080c, 0xabed, 0x00ce, 0x0804,
+	0xb22a, 0x00c6, 0x080c, 0xac5f, 0x0198, 0x6017, 0x0000, 0x6810,
+	0x6012, 0x080c, 0xcccc, 0x6023, 0x0003, 0x6904, 0x00c6, 0x2d60,
+	0x080c, 0xabed, 0x00ce, 0x080c, 0xac8c, 0x00ce, 0x0804, 0xb22a,
+	0x2001, 0x1988, 0x2004, 0x684a, 0x00ce, 0x0804, 0xb22a, 0x7008,
+	0x9086, 0x000b, 0x11c8, 0x6010, 0x00b6, 0x2058, 0xb900, 0xc1bc,
+	0xb902, 0x00be, 0x00c6, 0x2d60, 0xa87b, 0x0003, 0x080c, 0xcf0c,
+	0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x2009, 0x8020,
+	0x080c, 0x921e, 0x00ce, 0x0430, 0x700c, 0x9086, 0x2a00, 0x1138,
+	0x2001, 0x1988, 0x2004, 0x684a, 0x00e8, 0x04c1, 0x00e8, 0x89ff,
+	0x090c, 0x0d7d, 0x00c6, 0x00d6, 0x2d60, 0xa867, 0x0103, 0xa87b,
+	0x0003, 0x080c, 0x6b96, 0x080c, 0xca27, 0x080c, 0xac28, 0x0026,
+	0x6010, 0x00b6, 0x2058, 0xba3c, 0x080c, 0x6750, 0x00be, 0x002e,
+	0x00de, 0x00ce, 0x080c, 0xabed, 0x009e, 0x0005, 0x9186, 0x0015,
+	0x1128, 0x2001, 0x1988, 0x2004, 0x684a, 0x0068, 0x918e, 0x0016,
+	0x1160, 0x00c6, 0x2d00, 0x2060, 0x080c, 0xe524, 0x080c, 0x88c1,
+	0x080c, 0xabed, 0x00ce, 0x080c, 0xabed, 0x0005, 0x0026, 0x0036,
+	0x0046, 0x7228, 0xacb0, 0xabac, 0xd2f4, 0x0130, 0x2001, 0x1988,
+	0x2004, 0x684a, 0x0804, 0xb2a8, 0x00c6, 0x2d60, 0x080c, 0xc436,
+	0x00ce, 0x6804, 0x9086, 0x0050, 0x1168, 0x00c6, 0x2d00, 0x2060,
+	0x6003, 0x0001, 0x6007, 0x0050, 0x2009, 0x8023, 0x080c, 0x921e,
+	0x00ce, 0x04f0, 0x6800, 0x9086, 0x000f, 0x01a8, 0x89ff, 0x090c,
+	0x0d7d, 0x6800, 0x9086, 0x0004, 0x1190, 0xa87c, 0xd0ac, 0x0178,
+	0xa843, 0x0fff, 0xa83f, 0x0fff, 0xa880, 0xc0fc, 0xa882, 0x2001,
+	0x0001, 0x6832, 0x0400, 0x2001, 0x0007, 0x6832, 0x00e0, 0xa87c,
+	0xd0b4, 0x1150, 0xd0ac, 0x0db8, 0x6824, 0xd0f4, 0x1d48, 0xa838,
+	0xa934, 0x9105, 0x0d80, 0x0c20, 0xd2ec, 0x1d68, 0x7024, 0x9306,
+	0x1118, 0x7020, 0x9406, 0x0d38, 0x7020, 0x683e, 0x7024, 0x683a,
+	0x2001, 0x0005, 0x6832, 0x080c, 0xcbb6, 0x080c, 0x96a0, 0x0010,
+	0x080c, 0xabed, 0x004e, 0x003e, 0x002e, 0x0005, 0x00e6, 0x00d6,
+	0x0026, 0x7008, 0x9084, 0x00ff, 0x6210, 0x00b6, 0x2258, 0xba10,
+	0x00be, 0x9206, 0x1904, 0xb313, 0x700c, 0x6210, 0x00b6, 0x2258,
+	0xba14, 0x00be, 0x9206, 0x1904, 0xb313, 0x6038, 0x2068, 0x6824,
+	0xc0dc, 0x6826, 0x6a20, 0x9286, 0x0007, 0x0904, 0xb313, 0x9286,
+	0x0002, 0x0904, 0xb313, 0x9286, 0x0000, 0x05e8, 0x6808, 0x633c,
+	0x9306, 0x15c8, 0x2071, 0x026c, 0x9186, 0x0015, 0x0570, 0x918e,
+	0x0016, 0x1100, 0x00c6, 0x6038, 0x2060, 0x6104, 0x9186, 0x004b,
+	0x01c0, 0x9186, 0x004c, 0x01a8, 0x9186, 0x004d, 0x0190, 0x9186,
+	0x004e, 0x0178, 0x9186, 0x0052, 0x0160, 0x6014, 0x0096, 0x2048,
+	0x080c, 0xc838, 0x090c, 0x0d7d, 0xa87b, 0x0003, 0x009e, 0x080c,
+	0xcf0c, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x2009,
+	0x8020, 0x080c, 0x921e, 0x00ce, 0x0030, 0x6038, 0x2070, 0x2001,
+	0x1988, 0x2004, 0x704a, 0x080c, 0xabed, 0x002e, 0x00de, 0x00ee,
+	0x0005, 0x00b6, 0x0096, 0x00f6, 0x6014, 0x2048, 0x6010, 0x2058,
+	0x91b6, 0x0015, 0x0130, 0xba08, 0xbb0c, 0xbc00, 0xc48c, 0xbc02,
+	0x0460, 0x0096, 0x0156, 0x0036, 0x0026, 0x2b48, 0x9e90, 0x0010,
+	0x2019, 0x000a, 0x20a9, 0x0004, 0x080c, 0xbbc2, 0x002e, 0x003e,
+	0x015e, 0x009e, 0x1904, 0xb382, 0x0096, 0x0156, 0x0036, 0x0026,
+	0x2b48, 0x9e90, 0x0014, 0x2019, 0x0006, 0x20a9, 0x0004, 0x080c,
+	0xbbc2, 0x002e, 0x003e, 0x015e, 0x009e, 0x15a0, 0x7238, 0xba0a,
+	0x733c, 0xbb0e, 0xbc00, 0xc48d, 0xbc02, 0xa804, 0x9005, 0x1128,
+	0x00fe, 0x009e, 0x00be, 0x0804, 0xaffd, 0x0096, 0x2048, 0xaa12,
+	0xab16, 0xac0a, 0x009e, 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f,
+	0x9084, 0xffc0, 0x9080, 0x0002, 0x2009, 0x002b, 0xaaa0, 0xab9c,
+	0xaca8, 0xada4, 0x2031, 0x0000, 0x2041, 0x127e, 0x080c, 0xb112,
+	0x0130, 0x00fe, 0x009e, 0x080c, 0xabed, 0x00be, 0x0005, 0x080c,
+	0xb5b5, 0x0cb8, 0x2b78, 0x00f6, 0x080c, 0x31e7, 0x080c, 0xcf67,
+	0x00fe, 0x00c6, 0x080c, 0xab97, 0x2f00, 0x6012, 0x6017, 0x0000,
+	0x6023, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x2001, 0x0007,
+	0x080c, 0x6575, 0x080c, 0x65a1, 0x080c, 0x9225, 0x080c, 0x96a0,
+	0x00ce, 0x0804, 0xb355, 0x2100, 0x91b2, 0x0053, 0x1a0c, 0x0d7d,
+	0x91b2, 0x0040, 0x1a04, 0xb40b, 0x0002, 0xb3f9, 0xb3f9, 0xb3ef,
+	0xb3f9, 0xb3f9, 0xb3f9, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed,
+	0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed,
+	0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed,
+	0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3f9, 0xb3ed, 0xb3f9, 0xb3f9,
+	0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ef, 0xb3ed, 0xb3ed,
+	0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3f9,
+	0xb3f9, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed, 0xb3ed,
+	0xb3ed, 0xb3ed, 0xb3f9, 0xb3ed, 0xb3ed, 0x080c, 0x0d7d, 0x0066,
+	0x00b6, 0x6610, 0x2658, 0xb8d4, 0xc08c, 0xb8d6, 0x00be, 0x006e,
+	0x0000, 0x6003, 0x0001, 0x6106, 0x9186, 0x0032, 0x0118, 0x080c,
+	0x9225, 0x0010, 0x080c, 0x921e, 0x0126, 0x2091, 0x8000, 0x080c,
+	0x96a0, 0x012e, 0x0005, 0x2600, 0x0002, 0xb3f9, 0xb3f9, 0xb41f,
+	0xb3f9, 0xb3f9, 0xb41f, 0xb41f, 0xb41f, 0xb41f, 0xb3f9, 0xb41f,
+	0xb3f9, 0xb41f, 0xb3f9, 0xb41f, 0xb41f, 0xb41f, 0xb41f, 0x080c,
+	0x0d7d, 0x6004, 0x90b2, 0x0053, 0x1a0c, 0x0d7d, 0x91b6, 0x0013,
+	0x0904, 0xb4f6, 0x91b6, 0x0027, 0x1904, 0xb4a2, 0x080c, 0x95de,
+	0x6004, 0x080c, 0xca3c, 0x01b0, 0x080c, 0xca4d, 0x01a8, 0x908e,
+	0x0021, 0x0904, 0xb49f, 0x908e, 0x0022, 0x1130, 0x080c, 0xb029,
+	0x0904, 0xb49b, 0x0804, 0xb49c, 0x908e, 0x003d, 0x0904, 0xb49f,
+	0x0804, 0xb495, 0x080c, 0x321c, 0x2001, 0x0007, 0x080c, 0x6575,
+	0x6010, 0x00b6, 0x2058, 0xb9a0, 0x00be, 0x080c, 0xb5b5, 0x9186,
+	0x007e, 0x1148, 0x2001, 0x1837, 0x2014, 0xc285, 0x080c, 0x74e9,
+	0x1108, 0xc2ad, 0x2202, 0x080c, 0xa896, 0x0036, 0x0026, 0x2019,
+	0x0028, 0x2110, 0x080c, 0xe630, 0x002e, 0x003e, 0x0016, 0x0026,
+	0x0036, 0x2110, 0x2019, 0x0028, 0x080c, 0x93a5, 0x0076, 0x903e,
+	0x080c, 0x9277, 0x6010, 0x00b6, 0x905d, 0x0100, 0x00be, 0x2c08,
+	0x080c, 0xdfeb, 0x007e, 0x003e, 0x002e, 0x001e, 0x080c, 0xa8b2,
+	0x080c, 0xcf67, 0x0016, 0x080c, 0xccc4, 0x080c, 0xabed, 0x001e,
+	0x080c, 0x32fc, 0x080c, 0x96a0, 0x0030, 0x080c, 0xccc4, 0x080c,
+	0xabed, 0x080c, 0x96a0, 0x0005, 0x080c, 0xb5b5, 0x0cb0, 0x080c,
+	0xb5f1, 0x0c98, 0x9186, 0x0015, 0x0118, 0x9186, 0x0016, 0x1140,
+	0x080c, 0xaaa8, 0x0d80, 0x9086, 0x0002, 0x0904, 0xb5fc, 0x0c58,
+	0x9186, 0x0014, 0x1d40, 0x080c, 0x95de, 0x6004, 0x908e, 0x0022,
+	0x1118, 0x080c, 0xb029, 0x09f8, 0x080c, 0x31e7, 0x080c, 0xcf67,
+	0x080c, 0xca3c, 0x1190, 0x080c, 0x321c, 0x6010, 0x00b6, 0x2058,
+	0xb9a0, 0x00be, 0x080c, 0xb5b5, 0x9186, 0x007e, 0x1128, 0x2001,
+	0x1837, 0x200c, 0xc185, 0x2102, 0x0800, 0x080c, 0xca4d, 0x1120,
+	0x080c, 0xb5b5, 0x0804, 0xb495, 0x6004, 0x908e, 0x0032, 0x1160,
+	0x00e6, 0x00f6, 0x2071, 0x189e, 0x2079, 0x0000, 0x080c, 0x35a5,
+	0x00fe, 0x00ee, 0x0804, 0xb495, 0x6004, 0x908e, 0x0021, 0x0d40,
+	0x908e, 0x0022, 0x090c, 0xb5b5, 0x0804, 0xb495, 0x90b2, 0x0040,
+	0x1a04, 0xb595, 0x2008, 0x0002, 0xb53e, 0xb53f, 0xb542, 0xb545,
+	0xb548, 0xb54b, 0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb53c,
+	0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb53c,
+	0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb53c,
+	0xb53c, 0xb53c, 0xb54e, 0xb557, 0xb53c, 0xb558, 0xb557, 0xb53c,
+	0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb557, 0xb557, 0xb53c, 0xb53c,
+	0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb53c, 0xb580, 0xb557,
+	0xb53c, 0xb553, 0xb53c, 0xb53c, 0xb53c, 0xb554, 0xb53c, 0xb53c,
+	0xb53c, 0xb557, 0xb57b, 0xb53c, 0x080c, 0x0d7d, 0x00c0, 0x2001,
+	0x000b, 0x00e8, 0x2001, 0x0003, 0x00d0, 0x2001, 0x0005, 0x00b8,
+	0x2001, 0x0001, 0x00a0, 0x2001, 0x0009, 0x0088, 0x6003, 0x0005,
+	0x080c, 0x96a0, 0x0058, 0x0018, 0x0010, 0x080c, 0x6575, 0x04b8,
+	0x080c, 0xcf6a, 0x6003, 0x0004, 0x080c, 0x96a0, 0x0005, 0x080c,
+	0x6575, 0x6003, 0x0002, 0x0036, 0x2019, 0x1852, 0x2304, 0x9084,
+	0xff00, 0x1120, 0x2001, 0x1986, 0x201c, 0x0040, 0x8007, 0x909a,
+	0x0004, 0x0ec0, 0x8003, 0x801b, 0x831b, 0x9318, 0x631a, 0x003e,
+	0x080c, 0x96a0, 0x0c18, 0x080c, 0xccc4, 0x080c, 0xabed, 0x08f0,
+	0x00e6, 0x00f6, 0x2071, 0x189e, 0x2079, 0x0000, 0x080c, 0x35a5,
+	0x00fe, 0x00ee, 0x080c, 0x95de, 0x080c, 0xabed, 0x0878, 0x6003,
+	0x0002, 0x080c, 0xcf6a, 0x0804, 0x96a0, 0x2600, 0x2008, 0x0002,
+	0xb5ac, 0xb58f, 0xb5aa, 0xb58f, 0xb58f, 0xb5aa, 0xb5aa, 0xb5aa,
+	0xb5aa, 0xb58f, 0xb5aa, 0xb58f, 0xb5aa, 0xb58f, 0xb5aa, 0xb5aa,
+	0xb5aa, 0xb5aa, 0x080c, 0x0d7d, 0x0096, 0x6014, 0x2048, 0x080c,
+	0x6d80, 0x009e, 0x080c, 0xabed, 0x0005, 0x00e6, 0x0096, 0x0026,
+	0x0016, 0x080c, 0xc838, 0x0568, 0x6014, 0x2048, 0xa864, 0x9086,
+	0x0139, 0x11a8, 0xa894, 0x9086, 0x0056, 0x1148, 0x080c, 0x547b,
+	0x0130, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x0028, 0x2001,
+	0x0030, 0x900e, 0x2011, 0x4005, 0x080c, 0xce31, 0x0090, 0xa868,
+	0xd0fc, 0x0178, 0xa807, 0x0000, 0x0016, 0x6004, 0x908e, 0x0021,
+	0x0168, 0x908e, 0x003d, 0x0150, 0x001e, 0xa867, 0x0103, 0xa833,
+	0x0100, 0x001e, 0x002e, 0x009e, 0x00ee, 0x0005, 0x001e, 0x0009,
+	0x0cc0, 0x0096, 0x6014, 0x2048, 0xa800, 0x2048, 0xa867, 0x0103,
+	0xa823, 0x8001, 0x009e, 0x0005, 0x00b6, 0x6610, 0x2658, 0xb804,
+	0x9084, 0x00ff, 0x90b2, 0x000c, 0x1a0c, 0x0d7d, 0x6604, 0x96b6,
+	0x004d, 0x1120, 0x080c, 0xcd50, 0x0804, 0xb681, 0x6604, 0x96b6,
+	0x0043, 0x1120, 0x080c, 0xcd99, 0x0804, 0xb681, 0x6604, 0x96b6,
+	0x004b, 0x1120, 0x080c, 0xcdc5, 0x0804, 0xb681, 0x6604, 0x96b6,
+	0x0033, 0x1120, 0x080c, 0xcce6, 0x0804, 0xb681, 0x6604, 0x96b6,
+	0x0028, 0x1120, 0x080c, 0xca86, 0x0804, 0xb681, 0x6604, 0x96b6,
+	0x0029, 0x1120, 0x080c, 0xcac7, 0x0804, 0xb681, 0x6604, 0x96b6,
+	0x001f, 0x1120, 0x080c, 0xafd2, 0x0804, 0xb681, 0x6604, 0x96b6,
+	0x0000, 0x1118, 0x080c, 0xb319, 0x04e0, 0x6604, 0x96b6, 0x0022,
+	0x1118, 0x080c, 0xb00a, 0x04a8, 0x6604, 0x96b6, 0x0035, 0x1118,
+	0x080c, 0xb130, 0x0470, 0x6604, 0x96b6, 0x0039, 0x1118, 0x080c,
+	0xb2ae, 0x0438, 0x6604, 0x96b6, 0x003d, 0x1118, 0x080c, 0xb042,
+	0x0400, 0x6604, 0x96b6, 0x0044, 0x1118, 0x080c, 0xb07e, 0x00c8,
+	0x6604, 0x96b6, 0x0049, 0x1118, 0x080c, 0xb0bf, 0x0090, 0x6604,
+	0x96b6, 0x0041, 0x1118, 0x080c, 0xb0a9, 0x0058, 0x91b6, 0x0015,
+	0x1110, 0x0063, 0x0030, 0x91b6, 0x0016, 0x1128, 0x00be, 0x0804,
+	0xb8db, 0x00be, 0x0005, 0x080c, 0xaca9, 0x0cd8, 0xb69e, 0xb6a1,
+	0xb69e, 0xb6e8, 0xb69e, 0xb84f, 0xb8e8, 0xb69e, 0xb69e, 0xb8b1,
+	0xb69e, 0xb8c7, 0x0096, 0x601f, 0x0000, 0x6014, 0x2048, 0xa800,
+	0x2048, 0xa867, 0x0103, 0x009e, 0x0804, 0xabed, 0xa001, 0xa001,
+	0x0005, 0x00e6, 0x2071, 0x1800, 0x7090, 0x9086, 0x0074, 0x1540,
+	0x080c, 0xdfbc, 0x11b0, 0x6010, 0x00b6, 0x2058, 0x7030, 0xd08c,
+	0x0128, 0xb800, 0xd0bc, 0x0110, 0xc0c5, 0xb802, 0x00f9, 0x00be,
+	0x2001, 0x0006, 0x080c, 0x6575, 0x080c, 0x321c, 0x080c, 0xabed,
+	0x0098, 0x2001, 0x000a, 0x080c, 0x6575, 0x080c, 0x321c, 0x6003,
+	0x0001, 0x6007, 0x0001, 0x080c, 0x9225, 0x080c, 0x96a0, 0x0020,
+	0x2001, 0x0001, 0x080c, 0xb81f, 0x00ee, 0x0005, 0x00d6, 0xb800,
+	0xd084, 0x0160, 0x9006, 0x080c, 0x6561, 0x2069, 0x1847, 0x6804,
+	0xd0a4, 0x0120, 0x2001, 0x0006, 0x080c, 0x65a1, 0x00de, 0x0005,
+	0x00b6, 0x0096, 0x00d6, 0x2011, 0x1824, 0x2204, 0x9086, 0x0074,
+	0x1904, 0xb7f6, 0x6010, 0x2058, 0xbaa0, 0x9286, 0x007e, 0x1120,
+	0x080c, 0xba35, 0x0804, 0xb75a, 0x080c, 0xba2a, 0x6010, 0x2058,
+	0xbaa0, 0x9286, 0x0080, 0x1510, 0x6014, 0x9005, 0x01a8, 0x2048,
+	0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, 0x0000,
+	0x900e, 0x2011, 0x4000, 0x080c, 0xce31, 0x0030, 0xa807, 0x0000,
+	0xa867, 0x0103, 0xa833, 0x0200, 0x2001, 0x0006, 0x080c, 0x6575,
+	0x080c, 0x321c, 0x080c, 0xabed, 0x0804, 0xb7f9, 0x080c, 0xb807,
+	0x6014, 0x9005, 0x0190, 0x2048, 0xa868, 0xd0f4, 0x01e8, 0xa864,
+	0x9084, 0x00ff, 0x9086, 0x0039, 0x1d08, 0x2001, 0x0000, 0x900e,
+	0x2011, 0x4000, 0x080c, 0xce31, 0x08f8, 0x080c, 0xb7fd, 0x0160,
+	0x9006, 0x080c, 0x6561, 0x2001, 0x0004, 0x080c, 0x65a1, 0x2001,
+	0x0007, 0x080c, 0x6575, 0x08a0, 0x2001, 0x0004, 0x080c, 0x6575,
+	0x6003, 0x0001, 0x6007, 0x0003, 0x080c, 0x9225, 0x080c, 0x96a0,
+	0x0804, 0xb7f9, 0xb85c, 0xd0e4, 0x01d8, 0x080c, 0xcc5e, 0x080c,
+	0x74e9, 0x0118, 0xd0dc, 0x1904, 0xb71c, 0x2011, 0x1837, 0x2204,
+	0xc0ad, 0x2012, 0x2001, 0x196d, 0x2004, 0x00f6, 0x2079, 0x0100,
+	0x78e3, 0x0000, 0x080c, 0x266f, 0x78e2, 0x00fe, 0x0804, 0xb71c,
+	0x080c, 0xcc9f, 0x2011, 0x1837, 0x2204, 0xc0a5, 0x2012, 0x0006,
+	0x080c, 0xe14c, 0x000e, 0x1904, 0xb71c, 0xc0b5, 0x2012, 0x2001,
+	0x0006, 0x080c, 0x6575, 0x9006, 0x080c, 0x6561, 0x00c6, 0x2001,
+	0x180f, 0x2004, 0xd09c, 0x0520, 0x00f6, 0x2079, 0x0100, 0x00e6,
+	0x2071, 0x1800, 0x700c, 0x9084, 0x00ff, 0x78e6, 0x707e, 0x7010,
+	0x78ea, 0x7082, 0x908c, 0x00ff, 0x00ee, 0x780c, 0xc0b5, 0x780e,
+	0x00fe, 0x080c, 0x2644, 0x00f6, 0x2100, 0x900e, 0x080c, 0x25fb,
+	0x795e, 0x00fe, 0x9186, 0x0081, 0x01d8, 0x2009, 0x0081, 0x00c8,
+	0x2009, 0x00ef, 0x00f6, 0x2079, 0x0100, 0x79ea, 0x7932, 0x7936,
+	0x780c, 0xc0b5, 0x780e, 0x00fe, 0x080c, 0x2644, 0x00f6, 0x2079,
+	0x1800, 0x7982, 0x2100, 0x900e, 0x080c, 0x25fb, 0x795e, 0x00fe,
+	0x8108, 0x080c, 0x65c4, 0x2b00, 0x00ce, 0x1904, 0xb71c, 0x6012,
+	0x2009, 0x180f, 0x210c, 0xd19c, 0x0150, 0x2009, 0x027c, 0x210c,
+	0x918c, 0x00ff, 0xb912, 0x2009, 0x027d, 0x210c, 0xb916, 0x2001,
+	0x0002, 0x080c, 0x6575, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007,
+	0x0002, 0x080c, 0x9225, 0x080c, 0x96a0, 0x0018, 0x2001, 0x0001,
+	0x0431, 0x00de, 0x009e, 0x00be, 0x0005, 0x2001, 0x1810, 0x2004,
+	0xd0a4, 0x0120, 0x2001, 0x1848, 0x2004, 0xd0ac, 0x0005, 0x00e6,
+	0x080c, 0xe689, 0x0190, 0x2071, 0x0260, 0x7108, 0x720c, 0x918c,
+	0x00ff, 0x1118, 0x9284, 0xff00, 0x0140, 0x6010, 0x2058, 0xb8a0,
+	0x9084, 0xff80, 0x1110, 0xb912, 0xba16, 0x00ee, 0x0005, 0x2030,
+	0x9005, 0x0158, 0x2001, 0x0007, 0x080c, 0x6575, 0x080c, 0x56ee,
+	0x1120, 0x2001, 0x0007, 0x080c, 0x65a1, 0x2600, 0x9005, 0x11b0,
+	0x6014, 0x0096, 0x2048, 0xa868, 0x009e, 0xd0fc, 0x1178, 0x0036,
+	0x0046, 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, 0x0004,
+	0x2011, 0x8014, 0x080c, 0x4b07, 0x004e, 0x003e, 0x080c, 0x321c,
+	0x6020, 0x9086, 0x000a, 0x1108, 0x0005, 0x0804, 0xabed, 0x00b6,
+	0x00e6, 0x0026, 0x0016, 0x2071, 0x1800, 0x7090, 0x9086, 0x0014,
+	0x1904, 0xb8a7, 0x080c, 0x56ee, 0x1170, 0x6014, 0x9005, 0x1158,
+	0x0036, 0x0046, 0x6010, 0x2058, 0xbba0, 0x2021, 0x0006, 0x080c,
+	0x4cbe, 0x004e, 0x003e, 0x00d6, 0x6010, 0x2058, 0x080c, 0x66c0,
+	0x080c, 0xb6d6, 0x00de, 0x080c, 0xbafb, 0x1588, 0x6010, 0x2058,
+	0xb890, 0x9005, 0x0560, 0x2001, 0x0006, 0x080c, 0x6575, 0x0096,
+	0x6014, 0x904d, 0x01d0, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039,
+	0x1140, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c, 0xce31,
+	0x0060, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0029, 0x0130, 0xa807,
+	0x0000, 0xa867, 0x0103, 0xa833, 0x0200, 0x009e, 0x080c, 0x321c,
+	0x6020, 0x9086, 0x000a, 0x0140, 0x080c, 0xabed, 0x0028, 0x080c,
+	0xb5b5, 0x9006, 0x080c, 0xb81f, 0x001e, 0x002e, 0x00ee, 0x00be,
+	0x0005, 0x2011, 0x1824, 0x2204, 0x9086, 0x0014, 0x1160, 0x2001,
+	0x0002, 0x080c, 0x6575, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c,
+	0x9225, 0x0804, 0x96a0, 0x2001, 0x0001, 0x0804, 0xb81f, 0x2030,
+	0x2011, 0x1824, 0x2204, 0x9086, 0x0004, 0x1148, 0x96b6, 0x000b,
+	0x1120, 0x2001, 0x0007, 0x080c, 0x6575, 0x0804, 0xabed, 0x2001,
+	0x0001, 0x0804, 0xb81f, 0x0002, 0xb69e, 0xb8f3, 0xb69e, 0xb934,
+	0xb69e, 0xb9e1, 0xb8e8, 0xb69e, 0xb69e, 0xb9f5, 0xb69e, 0xba07,
+	0x6604, 0x9686, 0x0003, 0x0904, 0xb84f, 0x96b6, 0x001e, 0x1110,
+	0x080c, 0xabed, 0x0005, 0x00b6, 0x00d6, 0x00c6, 0x080c, 0xba19,
+	0x11a0, 0x9006, 0x080c, 0x6561, 0x080c, 0x31e7, 0x080c, 0xcf67,
+	0x2001, 0x0002, 0x080c, 0x6575, 0x6003, 0x0001, 0x6007, 0x0002,
+	0x080c, 0x9225, 0x080c, 0x96a0, 0x0418, 0x2009, 0x026e, 0x2104,
+	0x9086, 0x0009, 0x1160, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff,
+	0x9005, 0x0170, 0x8001, 0xb842, 0x601b, 0x000a, 0x0088, 0x2009,
+	0x026f, 0x2104, 0x9084, 0xff00, 0x9086, 0x1900, 0x1108, 0x08a0,
+	0x080c, 0x31e7, 0x080c, 0xcf67, 0x2001, 0x0001, 0x080c, 0xb81f,
+	0x00ce, 0x00de, 0x00be, 0x0005, 0x0096, 0x00b6, 0x0026, 0x9016,
+	0x080c, 0xba27, 0x00d6, 0x2069, 0x197c, 0x2d04, 0x9005, 0x0168,
+	0x6010, 0x2058, 0xb8a0, 0x9086, 0x007e, 0x1138, 0x2069, 0x1820,
+	0x2d04, 0x8000, 0x206a, 0x00de, 0x0010, 0x00de, 0x0088, 0x9006,
+	0x080c, 0x6561, 0x2001, 0x0002, 0x080c, 0x6575, 0x6003, 0x0001,
+	0x6007, 0x0002, 0x080c, 0x9225, 0x080c, 0x96a0, 0x0804, 0xb9b1,
+	0x080c, 0xc838, 0x01b0, 0x6014, 0x2048, 0xa864, 0x2010, 0x9086,
+	0x0139, 0x1138, 0x6007, 0x0016, 0x2001, 0x0002, 0x080c, 0xce8b,
+	0x00b0, 0x6014, 0x2048, 0xa864, 0xd0fc, 0x0118, 0x2001, 0x0001,
+	0x0ca8, 0x2001, 0x180e, 0x2004, 0xd0dc, 0x0148, 0x6010, 0x2058,
+	0xb840, 0x9084, 0x00ff, 0x9005, 0x1110, 0x9006, 0x0c38, 0x080c,
+	0xb5b5, 0x2009, 0x026e, 0x2134, 0x96b4, 0x00ff, 0x9686, 0x0005,
+	0x0520, 0x9686, 0x000b, 0x01c8, 0x2009, 0x026f, 0x2104, 0x9084,
+	0xff00, 0x1118, 0x9686, 0x0009, 0x01c0, 0x9086, 0x1900, 0x1168,
+	0x9686, 0x0009, 0x0190, 0x2001, 0x0004, 0x080c, 0x6575, 0x2001,
+	0x0028, 0x601a, 0x6007, 0x0052, 0x0020, 0x2001, 0x0001, 0x080c,
+	0xb81f, 0x002e, 0x00be, 0x009e, 0x0005, 0x9286, 0x0139, 0x0160,
+	0x6014, 0x2048, 0x080c, 0xc838, 0x0140, 0xa864, 0x9086, 0x0139,
+	0x0118, 0xa868, 0xd0fc, 0x0108, 0x0c40, 0x6010, 0x2058, 0xb840,
+	0x9084, 0x00ff, 0x9005, 0x0138, 0x8001, 0xb842, 0x601b, 0x000a,
+	0x6007, 0x0016, 0x08f0, 0xb8a0, 0x9086, 0x007e, 0x1138, 0x00e6,
+	0x2071, 0x1800, 0x080c, 0x5fbc, 0x00ee, 0x0010, 0x080c, 0x31e7,
+	0x0860, 0x080c, 0xba27, 0x1160, 0x2001, 0x0004, 0x080c, 0x6575,
+	0x6003, 0x0001, 0x6007, 0x0003, 0x080c, 0x9225, 0x0804, 0x96a0,
+	0x080c, 0xb5b5, 0x9006, 0x0804, 0xb81f, 0x0489, 0x1160, 0x2001,
+	0x0008, 0x080c, 0x6575, 0x6003, 0x0001, 0x6007, 0x0005, 0x080c,
+	0x9225, 0x0804, 0x96a0, 0x2001, 0x0001, 0x0804, 0xb81f, 0x00f9,
+	0x1160, 0x2001, 0x000a, 0x080c, 0x6575, 0x6003, 0x0001, 0x6007,
+	0x0001, 0x080c, 0x9225, 0x0804, 0x96a0, 0x2001, 0x0001, 0x0804,
+	0xb81f, 0x2009, 0x026e, 0x2104, 0x9086, 0x0003, 0x1138, 0x2009,
+	0x026f, 0x2104, 0x9084, 0xff00, 0x9086, 0x2a00, 0x0005, 0x9085,
+	0x0001, 0x0005, 0x00b6, 0x00c6, 0x0016, 0x6110, 0x2158, 0x080c,
+	0x6634, 0x001e, 0x00ce, 0x00be, 0x0005, 0x00b6, 0x00f6, 0x00e6,
+	0x00d6, 0x0036, 0x0016, 0x6010, 0x2058, 0x2009, 0x1837, 0x2104,
+	0x9085, 0x0003, 0x200a, 0x080c, 0xbacd, 0x0560, 0x2009, 0x1837,
+	0x2104, 0xc0cd, 0x200a, 0x080c, 0x6a67, 0x0158, 0x9006, 0x2020,
+	0x2009, 0x002a, 0x080c, 0xe2c9, 0x2001, 0x180c, 0x200c, 0xc195,
+	0x2102, 0x2019, 0x002a, 0x2009, 0x0001, 0x080c, 0x31a6, 0x00e6,
+	0x2071, 0x1800, 0x080c, 0x2fb2, 0x00ee, 0x00c6, 0x0156, 0x20a9,
+	0x0781, 0x2009, 0x007f, 0x080c, 0x32fc, 0x8108, 0x1f04, 0xba6b,
+	0x015e, 0x00ce, 0x080c, 0xba2a, 0x2071, 0x0260, 0x2079, 0x0200,
+	0x7817, 0x0001, 0x2001, 0x1837, 0x200c, 0xc1c5, 0x7018, 0xd0fc,
+	0x0110, 0xd0dc, 0x0118, 0x7038, 0xd0dc, 0x1108, 0xc1c4, 0x7817,
+	0x0000, 0x2001, 0x1837, 0x2102, 0x2079, 0x0100, 0x2e04, 0x9084,
+	0x00ff, 0x2069, 0x181f, 0x206a, 0x78e6, 0x0006, 0x8e70, 0x2e04,
+	0x2069, 0x1820, 0x206a, 0x78ea, 0x7832, 0x7836, 0x2010, 0x9084,
+	0xff00, 0x001e, 0x9105, 0x2009, 0x182c, 0x200a, 0x2200, 0x9084,
+	0x00ff, 0x2008, 0x080c, 0x2644, 0x080c, 0x74e9, 0x0170, 0x2071,
+	0x0260, 0x2069, 0x1982, 0x7048, 0x206a, 0x704c, 0x6806, 0x7050,
+	0x680a, 0x7054, 0x680e, 0x080c, 0xcc5e, 0x0040, 0x2001, 0x0006,
+	0x080c, 0x6575, 0x080c, 0x321c, 0x080c, 0xabed, 0x001e, 0x003e,
+	0x00de, 0x00ee, 0x00fe, 0x00be, 0x0005, 0x0096, 0x0026, 0x0036,
+	0x00e6, 0x0156, 0x2019, 0x182c, 0x231c, 0x83ff, 0x01f0, 0x2071,
+	0x0260, 0x7200, 0x9294, 0x00ff, 0x7004, 0x9084, 0xff00, 0x9205,
+	0x9306, 0x1198, 0x2011, 0x0276, 0x20a9, 0x0004, 0x2b48, 0x2019,
+	0x000a, 0x080c, 0xbbc2, 0x1148, 0x2011, 0x027a, 0x20a9, 0x0004,
+	0x2019, 0x0006, 0x080c, 0xbbc2, 0x1100, 0x015e, 0x00ee, 0x003e,
+	0x002e, 0x009e, 0x0005, 0x00e6, 0x2071, 0x0260, 0x7034, 0x9086,
+	0x0014, 0x11a8, 0x7038, 0x9086, 0x0800, 0x1188, 0x703c, 0xd0ec,
+	0x0160, 0x9084, 0x0f00, 0x9086, 0x0100, 0x1138, 0x7054, 0xd0a4,
+	0x1110, 0xd0ac, 0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x00ee,
+	0x0005, 0x00e6, 0x0096, 0x00c6, 0x0076, 0x0056, 0x0046, 0x0026,
+	0x0006, 0x0126, 0x2091, 0x8000, 0x2029, 0x19f3, 0x252c, 0x2021,
+	0x19fa, 0x2424, 0x2061, 0x1ddc, 0x2071, 0x1800, 0x7254, 0x7074,
+	0x9202, 0x1a04, 0xbb8e, 0x080c, 0x8b90, 0x0904, 0xbb87, 0x080c,
+	0xe2fa, 0x0904, 0xbb87, 0x6720, 0x9786, 0x0007, 0x0904, 0xbb87,
+	0x2500, 0x9c06, 0x0904, 0xbb87, 0x2400, 0x9c06, 0x0904, 0xbb87,
+	0x3e08, 0x9186, 0x0002, 0x1148, 0x6010, 0x9005, 0x0130, 0x00b6,
+	0x2058, 0xb800, 0x00be, 0xd0bc, 0x1590, 0x00c6, 0x6043, 0xffff,
+	0x6000, 0x9086, 0x0004, 0x1110, 0x080c, 0x1a6a, 0x9786, 0x000a,
+	0x0148, 0x080c, 0xca4d, 0x1130, 0x00ce, 0x080c, 0xb5b5, 0x080c,
+	0xac28, 0x00e8, 0x6014, 0x2048, 0x080c, 0xc838, 0x01a8, 0x9786,
+	0x0003, 0x1530, 0xa867, 0x0103, 0xa87c, 0xd0cc, 0x0130, 0x0096,
+	0xa878, 0x2048, 0x080c, 0x0fec, 0x009e, 0xab7a, 0xa877, 0x0000,
+	0x080c, 0x6d74, 0x080c, 0xca27, 0x080c, 0xac28, 0x00ce, 0x9ce0,
+	0x001c, 0x7068, 0x9c02, 0x1210, 0x0804, 0xbb2e, 0x012e, 0x000e,
+	0x002e, 0x004e, 0x005e, 0x007e, 0x00ce, 0x009e, 0x00ee, 0x0005,
+	0x9786, 0x0006, 0x1118, 0x080c, 0xe26c, 0x0c30, 0x9786, 0x0009,
+	0x1148, 0x6000, 0x9086, 0x0004, 0x0d08, 0x2009, 0x004c, 0x080c,
+	0xac8c, 0x08e0, 0x9786, 0x000a, 0x0938, 0x0820, 0x220c, 0x2304,
+	0x9106, 0x1130, 0x8210, 0x8318, 0x1f04, 0xbbae, 0x9006, 0x0005,
+	0x2304, 0x9102, 0x0218, 0x2001, 0x0001, 0x0008, 0x9006, 0x918d,
+	0x0001, 0x0005, 0x0136, 0x01c6, 0x0016, 0x8906, 0x8006, 0x8007,
+	0x908c, 0x003f, 0x21e0, 0x9084, 0xffc0, 0x9300, 0x2098, 0x3518,
+	0x20a9, 0x0001, 0x220c, 0x4002, 0x910e, 0x1140, 0x8210, 0x8319,
+	0x1dc8, 0x9006, 0x001e, 0x01ce, 0x013e, 0x0005, 0x220c, 0x9102,
+	0x0218, 0x2001, 0x0001, 0x0010, 0x2001, 0x0000, 0x918d, 0x0001,
+	0x001e, 0x01ce, 0x013e, 0x0005, 0x220c, 0x810f, 0x2304, 0x9106,
+	0x1130, 0x8210, 0x8318, 0x1f04, 0xbbec, 0x9006, 0x0005, 0x918d,
+	0x0001, 0x0005, 0x6004, 0x908a, 0x0053, 0x1a0c, 0x0d7d, 0x080c,
+	0xca3c, 0x0120, 0x080c, 0xca4d, 0x0158, 0x0028, 0x080c, 0x321c,
+	0x080c, 0xca4d, 0x0128, 0x080c, 0x95de, 0x080c, 0xabed, 0x0005,
+	0x080c, 0xb5b5, 0x0cc0, 0x9182, 0x0057, 0x1220, 0x9182, 0x0040,
+	0x0208, 0x000a, 0x0005, 0xbc32, 0xbc32, 0xbc32, 0xbc32, 0xbc32,
+	0xbc32, 0xbc32, 0xbc32, 0xbc32, 0xbc32, 0xbc32, 0xbc34, 0xbc34,
+	0xbc34, 0xbc34, 0xbc32, 0xbc32, 0xbc32, 0xbc34, 0xbc32, 0xbc32,
+	0xbc32, 0xbc32, 0x080c, 0x0d7d, 0x600b, 0xffff, 0x6003, 0x000f,
+	0x6106, 0x0126, 0x2091, 0x8000, 0x080c, 0xcf6a, 0x2009, 0x8000,
+	0x080c, 0x921e, 0x012e, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004,
+	0x9082, 0x0040, 0x0804, 0xbcb9, 0x9186, 0x0027, 0x1520, 0x080c,
+	0x95de, 0x080c, 0x31e7, 0x080c, 0xcf67, 0x0096, 0x6114, 0x2148,
+	0x080c, 0xc838, 0x0198, 0x080c, 0xca4d, 0x1118, 0x080c, 0xb5b5,
+	0x0068, 0xa867, 0x0103, 0xa87b, 0x0029, 0xa877, 0x0000, 0xa97c,
+	0xc1c5, 0xa97e, 0x080c, 0x6d80, 0x080c, 0xca27, 0x009e, 0x080c,
+	0xabed, 0x0804, 0x96a0, 0x9186, 0x0014, 0x1120, 0x6004, 0x9082,
+	0x0040, 0x0018, 0x080c, 0x0d7d, 0x0005, 0x0002, 0xbc97, 0xbc95,
+	0xbc95, 0xbc95, 0xbc95, 0xbc95, 0xbc95, 0xbc95, 0xbc95, 0xbc95,
+	0xbc95, 0xbcb0, 0xbcb0, 0xbcb0, 0xbcb0, 0xbc95, 0xbcb0, 0xbc95,
+	0xbcb0, 0xbc95, 0xbc95, 0xbc95, 0xbc95, 0x080c, 0x0d7d, 0x080c,
+	0x95de, 0x0096, 0x6114, 0x2148, 0x080c, 0xc838, 0x0168, 0xa867,
+	0x0103, 0xa87b, 0x0006, 0xa877, 0x0000, 0xa880, 0xc0ec, 0xa882,
+	0x080c, 0x6d80, 0x080c, 0xca27, 0x009e, 0x080c, 0xabed, 0x0005,
+	0x080c, 0x95de, 0x080c, 0xca4d, 0x090c, 0xb5b5, 0x080c, 0xabed,
+	0x0005, 0x0002, 0xbcd3, 0xbcd1, 0xbcd1, 0xbcd1, 0xbcd1, 0xbcd1,
+	0xbcd1, 0xbcd1, 0xbcd1, 0xbcd1, 0xbcd1, 0xbcd5, 0xbcd5, 0xbcd5,
+	0xbcd5, 0xbcd1, 0xbcd7, 0xbcd1, 0xbcd5, 0xbcd1, 0xbcd1, 0xbcd1,
+	0xbcd1, 0x080c, 0x0d7d, 0x080c, 0x0d7d, 0x080c, 0x0d7d, 0x080c,
+	0xabed, 0x0804, 0x96a0, 0x9182, 0x0057, 0x1220, 0x9182, 0x0040,
+	0x0208, 0x000a, 0x0005, 0xbcfa, 0xbcfa, 0xbcfa, 0xbcfa, 0xbcfa,
+	0xbd33, 0xbe22, 0xbcfa, 0xbe2e, 0xbcfa, 0xbcfa, 0xbcfa, 0xbcfa,
+	0xbcfa, 0xbcfa, 0xbcfa, 0xbcfa, 0xbcfa, 0xbcfa, 0xbe2e, 0xbcfc,
+	0xbcfa, 0xbe2c, 0x080c, 0x0d7d, 0x00b6, 0x0096, 0x6114, 0x2148,
+	0x6010, 0x2058, 0xb800, 0xd0bc, 0x1508, 0xa87b, 0x0000, 0xa867,
+	0x0103, 0xa877, 0x0000, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938,
+	0x9115, 0x190c, 0xbeb3, 0x080c, 0x6b96, 0x6210, 0x2258, 0xba3c,
+	0x82ff, 0x0110, 0x8211, 0xba3e, 0xb8d0, 0x9005, 0x0110, 0x080c,
+	0x6750, 0x080c, 0xabed, 0x009e, 0x00be, 0x0005, 0xa87c, 0xd0ac,
+	0x09e0, 0xa838, 0xa934, 0x9105, 0x09c0, 0xa880, 0xd0bc, 0x19a8,
+	0x080c, 0xcb7d, 0x0c80, 0x00b6, 0x0096, 0x6114, 0x2148, 0x601c,
+	0xd0fc, 0x1110, 0x7644, 0x0008, 0x9036, 0x96b4, 0x0fff, 0x86ff,
+	0x1590, 0x6010, 0x2058, 0xb800, 0xd0bc, 0x1904, 0xbe11, 0xa87b,
+	0x0000, 0xa867, 0x0103, 0xae76, 0xa87c, 0xd0ac, 0x0128, 0xa834,
+	0xa938, 0x9115, 0x190c, 0xbeb3, 0x080c, 0x6b96, 0x6210, 0x2258,
+	0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, 0xb8d0, 0x9005, 0x0110,
+	0x080c, 0x6750, 0x601c, 0xd0fc, 0x1148, 0x7044, 0xd0e4, 0x1904,
+	0xbdf5, 0x080c, 0xabed, 0x009e, 0x00be, 0x0005, 0x2009, 0x0211,
+	0x210c, 0x080c, 0x0d7d, 0x968c, 0x0c00, 0x0150, 0x6010, 0x2058,
+	0xb800, 0xd0bc, 0x1904, 0xbdf9, 0x7348, 0xab92, 0x734c, 0xab8e,
+	0x968c, 0x00ff, 0x9186, 0x0002, 0x0508, 0x9186, 0x0028, 0x1118,
+	0xa87b, 0x001c, 0x00e8, 0xd6dc, 0x01a0, 0xa87b, 0x0015, 0xa87c,
+	0xd0ac, 0x0170, 0xa938, 0xaa34, 0x2100, 0x9205, 0x0148, 0x7048,
+	0x9106, 0x1118, 0x704c, 0x9206, 0x0118, 0xa992, 0xaa8e, 0xc6dc,
+	0x0038, 0xd6d4, 0x0118, 0xa87b, 0x0007, 0x0010, 0xa87b, 0x0000,
+	0xa867, 0x0103, 0xae76, 0x901e, 0xd6c4, 0x01d8, 0x9686, 0x0100,
+	0x1130, 0x7064, 0x9005, 0x1118, 0xc6c4, 0x0804, 0xbd3f, 0x735c,
+	0xab86, 0x83ff, 0x0170, 0x938a, 0x0009, 0x0210, 0x2019, 0x0008,
+	0x0036, 0x2308, 0x2019, 0x0018, 0x2011, 0x0025, 0x080c, 0xc40b,
+	0x003e, 0xd6cc, 0x0904, 0xbd54, 0x7154, 0xa98a, 0x81ff, 0x0904,
+	0xbd54, 0x9192, 0x0021, 0x1278, 0x8304, 0x9098, 0x0018, 0x2011,
+	0x0029, 0x080c, 0xc40b, 0x2011, 0x0205, 0x2013, 0x0000, 0x080c,
+	0xcef7, 0x0804, 0xbd54, 0xa868, 0xd0fc, 0x0120, 0x2009, 0x0020,
+	0xa98a, 0x0c50, 0x00a6, 0x2950, 0x080c, 0xc3aa, 0x00ae, 0x080c,
+	0xcef7, 0x080c, 0xc3fb, 0x0804, 0xbd56, 0x080c, 0xcb40, 0x0804,
+	0xbd6b, 0xa87c, 0xd0ac, 0x0904, 0xbd7c, 0xa880, 0xd0bc, 0x1904,
+	0xbd7c, 0x7348, 0xa838, 0x9306, 0x11c8, 0x734c, 0xa834, 0x931e,
+	0x0904, 0xbd7c, 0xd6d4, 0x0190, 0xab38, 0x9305, 0x0904, 0xbd7c,
+	0x0068, 0xa87c, 0xd0ac, 0x0904, 0xbd47, 0xa838, 0xa934, 0x9105,
+	0x0904, 0xbd47, 0xa880, 0xd0bc, 0x1904, 0xbd47, 0x080c, 0xcb7d,
+	0x0804, 0xbd6b, 0x00f6, 0x2079, 0x026c, 0x7c04, 0x7b00, 0x7e0c,
+	0x7d08, 0x00fe, 0x0021, 0x0005, 0x0011, 0x0005, 0x0005, 0x0096,
+	0x6003, 0x0002, 0x6007, 0x0043, 0x6014, 0x2048, 0xa87c, 0xd0ac,
+	0x0128, 0x009e, 0x0005, 0x2130, 0x2228, 0x0058, 0x2400, 0xa9ac,
+	0x910a, 0x2300, 0xaab0, 0x9213, 0x2600, 0x9102, 0x2500, 0x9203,
+	0x0e90, 0xac46, 0xab4a, 0xae36, 0xad3a, 0x6044, 0xd0fc, 0x190c,
+	0xa8bf, 0x604b, 0x0000, 0x080c, 0x1c30, 0x1118, 0x6144, 0x080c,
+	0x924a, 0x009e, 0x0005, 0x9182, 0x0057, 0x1220, 0x9182, 0x0040,
+	0x0208, 0x000a, 0x0005, 0xbe7a, 0xbe7a, 0xbe7a, 0xbe7a, 0xbe7a,
+	0xbe7a, 0xbe7a, 0xbe7a, 0xbe7a, 0xbe7a, 0xbe7c, 0xbe7a, 0xbe7a,
+	0xbe7a, 0xbe7a, 0xbe8d, 0xbe7a, 0xbe7a, 0xbe7a, 0xbe7a, 0xbeb1,
+	0xbe7a, 0xbe7a, 0x080c, 0x0d7d, 0x6004, 0x9086, 0x0040, 0x1110,
+	0x080c, 0x95de, 0x2019, 0x0001, 0x080c, 0xa118, 0x6003, 0x0002,
+	0x080c, 0xcf6f, 0x080c, 0x963b, 0x0005, 0x6004, 0x9086, 0x0040,
+	0x1110, 0x080c, 0x95de, 0x2019, 0x0001, 0x080c, 0xa118, 0x080c,
+	0x963b, 0x080c, 0x31e7, 0x080c, 0xcf67, 0x0096, 0x6114, 0x2148,
+	0x080c, 0xc838, 0x0150, 0xa867, 0x0103, 0xa87b, 0x0029, 0xa877,
+	0x0000, 0x080c, 0x6d80, 0x080c, 0xca27, 0x009e, 0x080c, 0xabed,
+	0x0005, 0x080c, 0x0d7d, 0xa87b, 0x0015, 0xd1fc, 0x0180, 0xa87b,
+	0x0007, 0x8002, 0x8000, 0x810a, 0x9189, 0x0000, 0x0006, 0x0016,
+	0x2009, 0x1a78, 0x2104, 0x8000, 0x200a, 0x001e, 0x000e, 0xa992,
+	0xa88e, 0x0005, 0x9182, 0x0057, 0x1220, 0x9182, 0x0040, 0x0208,
+	0x000a, 0x0005, 0xbee9, 0xbee9, 0xbee9, 0xbee9, 0xbee9, 0xbeeb,
+	0xbee9, 0xbee9, 0xbfa8, 0xbee9, 0xbee9, 0xbee9, 0xbee9, 0xbee9,
+	0xbee9, 0xbee9, 0xbee9, 0xbee9, 0xbee9, 0xc0ec, 0xbee9, 0xc0f6,
+	0xbee9, 0x080c, 0x0d7d, 0x601c, 0xd0bc, 0x0178, 0xd084, 0x0168,
+	0xd0f4, 0x0120, 0xc084, 0x601e, 0x0804, 0xbcdb, 0x6114, 0x0096,
+	0x2148, 0xa87c, 0xc0e5, 0xa87e, 0x009e, 0x0076, 0x00a6, 0x00e6,
+	0x0096, 0x2071, 0x0260, 0x6114, 0x2150, 0x601c, 0xd0fc, 0x1110,
+	0x7644, 0x0008, 0x9036, 0xb676, 0x96b4, 0x0fff, 0xb77c, 0xc7e5,
+	0xb77e, 0x6210, 0x00b6, 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211,
+	0xba3e, 0x00be, 0x86ff, 0x0904, 0xbfa1, 0x9694, 0xff00, 0x9284,
+	0x0c00, 0x0120, 0x7048, 0xb092, 0x704c, 0xb08e, 0x9284, 0x0300,
+	0x0904, 0xbfa1, 0x9686, 0x0100, 0x1130, 0x7064, 0x9005, 0x1118,
+	0xc6c4, 0xb676, 0x0c38, 0x080c, 0x103a, 0x090c, 0x0d7d, 0x2900,
+	0xb07a, 0xb77c, 0x97bd, 0x0200, 0xb77e, 0xa867, 0x0103, 0xb068,
+	0xa86a, 0xb06c, 0xa86e, 0xb070, 0xa872, 0x7044, 0x9084, 0xf000,
+	0x9635, 0xae76, 0x968c, 0x0c00, 0x0120, 0x7348, 0xab92, 0x734c,
+	0xab8e, 0x968c, 0x00ff, 0x9186, 0x0002, 0x0180, 0x9186, 0x0028,
+	0x1118, 0xa87b, 0x001c, 0x0060, 0xd6dc, 0x0118, 0xa87b, 0x0015,
+	0x0038, 0xd6d4, 0x0118, 0xa87b, 0x0007, 0x0010, 0xa87b, 0x0000,
+	0xaf7e, 0xb080, 0xa882, 0xb084, 0xa886, 0x901e, 0xd6c4, 0x0190,
+	0x735c, 0xab86, 0x83ff, 0x0170, 0x938a, 0x0009, 0x0210, 0x2019,
+	0x0008, 0x0036, 0x2308, 0x2019, 0x0018, 0x2011, 0x0025, 0x080c,
+	0xc40b, 0x003e, 0xd6cc, 0x01e8, 0x7154, 0xa98a, 0x81ff, 0x01c8,
+	0x9192, 0x0021, 0x1260, 0x8304, 0x9098, 0x0018, 0x2011, 0x0029,
+	0x080c, 0xc40b, 0x2011, 0x0205, 0x2013, 0x0000, 0x0050, 0xb068,
+	0xd0fc, 0x0120, 0x2009, 0x0020, 0xa98a, 0x0c68, 0x2950, 0x080c,
+	0xc3aa, 0x080c, 0x1a48, 0x009e, 0x00ee, 0x00ae, 0x007e, 0x0005,
+	0x2001, 0x1988, 0x2004, 0x604a, 0x0096, 0x6114, 0x2148, 0xa83c,
+	0xa940, 0x9105, 0x1118, 0xa87c, 0xc0dc, 0xa87e, 0x6003, 0x0002,
+	0x080c, 0xcf78, 0x0904, 0xc0e7, 0x604b, 0x0000, 0x6010, 0x00b6,
+	0x2058, 0xb800, 0x00be, 0xd0bc, 0x1500, 0xd1cc, 0x0904, 0xc0a6,
+	0xa978, 0xa868, 0xd0fc, 0x0904, 0xc067, 0x0016, 0xa87c, 0x0006,
+	0xa880, 0x0006, 0x00a6, 0x2150, 0xb174, 0x9184, 0x00ff, 0x90b6,
+	0x0002, 0x0904, 0xc035, 0x9086, 0x0028, 0x1904, 0xc021, 0xa87b,
+	0x001c, 0xb07b, 0x001c, 0x0804, 0xc03d, 0x6024, 0xd0f4, 0x11d0,
+	0xa838, 0xaa34, 0x9205, 0x09c8, 0xa838, 0xaa90, 0x9206, 0x1120,
+	0xa88c, 0xaa34, 0x9206, 0x0988, 0x6024, 0xd0d4, 0x1148, 0xa9ac,
+	0xa834, 0x9102, 0x603a, 0xa9b0, 0xa838, 0x9103, 0x603e, 0x6024,
+	0xc0f5, 0x6026, 0x6010, 0x00b6, 0x2058, 0xb83c, 0x8000, 0xb83e,
+	0x00be, 0x601c, 0xc0fc, 0x601e, 0x9006, 0xa876, 0xa892, 0xa88e,
+	0xa87c, 0xc0e4, 0xa87e, 0xd0cc, 0x0140, 0xc0cc, 0xa87e, 0x0096,
+	0xa878, 0x2048, 0x080c, 0x0fec, 0x009e, 0x080c, 0xcb7d, 0x0804,
+	0xc0e7, 0xd1dc, 0x0158, 0xa87b, 0x0015, 0xb07b, 0x0015, 0x080c,
+	0xce1a, 0x0118, 0xb174, 0xc1dc, 0xb176, 0x0078, 0xd1d4, 0x0128,
+	0xa87b, 0x0007, 0xb07b, 0x0007, 0x0040, 0xa87c, 0xd0ac, 0x0128,
+	0xa834, 0xa938, 0x9115, 0x190c, 0xbeb3, 0xa87c, 0xb07e, 0xa890,
+	0xb092, 0xa88c, 0xb08e, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0019,
+	0x20a0, 0x20a9, 0x0020, 0x8a06, 0x8006, 0x8007, 0x9094, 0x003f,
+	0x22e0, 0x9084, 0xffc0, 0x9080, 0x0019, 0x2098, 0x4003, 0x00ae,
+	0x000e, 0xa882, 0x000e, 0xa87e, 0x080c, 0xcef7, 0x001e, 0xa874,
+	0x0006, 0x2148, 0x080c, 0x0fec, 0x001e, 0x0804, 0xc0d3, 0x0016,
+	0x00a6, 0x2150, 0xb174, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01e0,
+	0x9086, 0x0028, 0x1128, 0xa87b, 0x001c, 0xb07b, 0x001c, 0x00e0,
+	0xd1dc, 0x0158, 0xa87b, 0x0015, 0xb07b, 0x0015, 0x080c, 0xce1a,
+	0x0118, 0xb174, 0xc1dc, 0xb176, 0x0078, 0xd1d4, 0x0128, 0xa87b,
+	0x0007, 0xb07b, 0x0007, 0x0040, 0xa87c, 0xd0ac, 0x0128, 0xa834,
+	0xa938, 0x9115, 0x190c, 0xbeb3, 0xa890, 0xb092, 0xa88c, 0xb08e,
+	0xa87c, 0xb07e, 0x00ae, 0x080c, 0x0fec, 0x009e, 0x080c, 0xcef7,
+	0xa974, 0x0016, 0x080c, 0xc3fb, 0x001e, 0x0468, 0xa867, 0x0103,
+	0xa974, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01b0, 0x9086, 0x0028,
+	0x1118, 0xa87b, 0x001c, 0x00d0, 0xd1dc, 0x0148, 0xa87b, 0x0015,
+	0x080c, 0xce1a, 0x0118, 0xa974, 0xc1dc, 0xa976, 0x0078, 0xd1d4,
+	0x0118, 0xa87b, 0x0007, 0x0050, 0xa87b, 0x0000, 0xa87c, 0xd0ac,
+	0x0128, 0xa834, 0xa938, 0x9115, 0x190c, 0xbeb3, 0xa974, 0x0016,
+	0x080c, 0x6b96, 0x001e, 0x6010, 0x00b6, 0x2058, 0xba3c, 0x82ff,
+	0x0110, 0x8211, 0xba3e, 0xb8d0, 0x9005, 0x0120, 0x0016, 0x080c,
+	0x6750, 0x001e, 0x00be, 0xd1e4, 0x1120, 0x080c, 0xabed, 0x009e,
+	0x0005, 0x080c, 0xcb40, 0x0cd8, 0x6114, 0x0096, 0x2148, 0xa97c,
+	0x080c, 0xcf78, 0x190c, 0x1a56, 0x009e, 0x0005, 0x0096, 0x6114,
+	0x2148, 0xa83c, 0xa940, 0x9105, 0x01e8, 0xa877, 0x0000, 0xa87b,
+	0x0000, 0xa867, 0x0103, 0x00b6, 0x6010, 0x2058, 0xa834, 0xa938,
+	0x9115, 0x11a0, 0x080c, 0x6b96, 0xba3c, 0x8211, 0x0208, 0xba3e,
+	0xb8d0, 0x9005, 0x0110, 0x080c, 0x6750, 0x080c, 0xabed, 0x00be,
+	0x009e, 0x0005, 0xa87c, 0xc0dc, 0xa87e, 0x08f8, 0xb800, 0xd0bc,
+	0x1120, 0xa834, 0x080c, 0xbeb3, 0x0c28, 0xa880, 0xd0bc, 0x1dc8,
+	0x080c, 0xcb7d, 0x0c60, 0x080c, 0x95de, 0x0010, 0x080c, 0x963b,
+	0x601c, 0xd084, 0x0110, 0x080c, 0x1a6a, 0x080c, 0xc838, 0x01f0,
+	0x0096, 0x6114, 0x2148, 0x080c, 0xca4d, 0x1118, 0x080c, 0xb5b5,
+	0x00a0, 0xa867, 0x0103, 0x2009, 0x180c, 0x210c, 0xd18c, 0x1198,
+	0xd184, 0x1170, 0x6108, 0xa97a, 0x918e, 0x0029, 0x1110, 0x080c,
+	0xe621, 0xa877, 0x0000, 0x080c, 0x6d80, 0x009e, 0x0804, 0xac28,
+	0xa87b, 0x0004, 0x0cb0, 0xa87b, 0x0004, 0x0c98, 0x9182, 0x0057,
+	0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xc17d, 0xc17d,
+	0xc17d, 0xc17d, 0xc17d, 0xc17f, 0xc17d, 0xc17d, 0xc17d, 0xc17d,
+	0xc17d, 0xc17d, 0xc17d, 0xc17d, 0xc17d, 0xc17d, 0xc17d, 0xc17d,
+	0xc17d, 0xc17d, 0xc1a3, 0xc17d, 0xc17d, 0x080c, 0x0d7d, 0x080c,
+	0x56e2, 0x01f8, 0x6014, 0x7144, 0x918c, 0x0fff, 0x9016, 0xd1c4,
+	0x0118, 0x7264, 0x9294, 0x00ff, 0x0096, 0x904d, 0x0188, 0xa87b,
+	0x0000, 0xa864, 0x9086, 0x0139, 0x0128, 0xa867, 0x0103, 0xa976,
+	0xaa96, 0x0030, 0xa897, 0x4000, 0xa99a, 0xaa9e, 0x080c, 0x6d80,
+	0x009e, 0x0804, 0xabed, 0x080c, 0x56e2, 0x0dd8, 0x6014, 0x900e,
+	0x9016, 0x0c10, 0x9182, 0x0085, 0x0002, 0xc1bc, 0xc1ba, 0xc1ba,
+	0xc1c8, 0xc1ba, 0xc1ba, 0xc1ba, 0xc1ba, 0xc1ba, 0xc1ba, 0xc1ba,
+	0xc1ba, 0xc1ba, 0x080c, 0x0d7d, 0x6003, 0x0001, 0x6106, 0x0126,
+	0x2091, 0x8000, 0x2009, 0x8020, 0x080c, 0x921e, 0x012e, 0x0005,
+	0x0026, 0x0056, 0x00d6, 0x00e6, 0x2071, 0x0260, 0x7224, 0x6216,
+	0x7220, 0x080c, 0xc826, 0x01a0, 0x2268, 0x6800, 0x9086, 0x0000,
+	0x0178, 0x6010, 0x6d10, 0x952e, 0x1158, 0x00c6, 0x2d60, 0x080c,
+	0xc436, 0x00ce, 0x0128, 0x6803, 0x0002, 0x6007, 0x0086, 0x0010,
+	0x6007, 0x0087, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x921e,
+	0x9280, 0x0004, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0140,
+	0x6824, 0xd0ec, 0x0128, 0x00c6, 0x2260, 0x080c, 0xcb7d, 0x00ce,
+	0x00ee, 0x00de, 0x005e, 0x002e, 0x0005, 0x9186, 0x0013, 0x1160,
+	0x6004, 0x908a, 0x0085, 0x0a0c, 0x0d7d, 0x908a, 0x0092, 0x1a0c,
+	0x0d7d, 0x9082, 0x0085, 0x00e2, 0x9186, 0x0027, 0x0120, 0x9186,
+	0x0014, 0x190c, 0x0d7d, 0x080c, 0x95de, 0x0096, 0x6014, 0x2048,
+	0x080c, 0xc838, 0x0140, 0xa867, 0x0103, 0xa877, 0x0000, 0xa87b,
+	0x0029, 0x080c, 0x6d80, 0x009e, 0x080c, 0xac28, 0x0804, 0x96a0,
+	0xc23d, 0xc23f, 0xc23f, 0xc23d, 0xc23d, 0xc23d, 0xc23d, 0xc23d,
+	0xc23d, 0xc23d, 0xc23d, 0xc23d, 0xc23d, 0x080c, 0x0d7d, 0x080c,
+	0xac28, 0x0005, 0x9186, 0x0013, 0x1130, 0x6004, 0x9082, 0x0085,
+	0x2008, 0x0804, 0xc28e, 0x9186, 0x0027, 0x1558, 0x080c, 0x95de,
+	0x080c, 0x31e7, 0x080c, 0xcf67, 0x0096, 0x6014, 0x2048, 0x080c,
+	0xc838, 0x0150, 0xa867, 0x0103, 0xa877, 0x0000, 0xa87b, 0x0029,
+	0x080c, 0x6d80, 0x080c, 0xca27, 0x009e, 0x080c, 0xabed, 0x0005,
+	0x9186, 0x0089, 0x0118, 0x9186, 0x008a, 0x1140, 0x080c, 0xaaa8,
+	0x0128, 0x9086, 0x000c, 0x0904, 0xc2c6, 0x0000, 0x080c, 0xaca9,
+	0x0c70, 0x9186, 0x0014, 0x1d60, 0x080c, 0x95de, 0x0096, 0x6014,
+	0x2048, 0x080c, 0xc838, 0x0d00, 0xa867, 0x0103, 0xa877, 0x0000,
+	0xa87b, 0x0006, 0xa880, 0xc0ec, 0xa882, 0x0890, 0x0002, 0xc29e,
+	0xc29c, 0xc29c, 0xc29c, 0xc29c, 0xc29c, 0xc2b2, 0xc29c, 0xc29c,
+	0xc29c, 0xc29c, 0xc29c, 0xc29c, 0x080c, 0x0d7d, 0x6034, 0x908c,
 	0xff00, 0x810f, 0x9186, 0x0039, 0x0118, 0x9186, 0x0035, 0x1118,
 	0x2001, 0x1986, 0x0010, 0x2001, 0x1987, 0x2004, 0x601a, 0x6003,
-	0x000e, 0x0005, 0x9182, 0x0092, 0x1220, 0x9182, 0x0085, 0x0208,
-	0x0012, 0x0804, 0xac85, 0xc2b8, 0xc2b8, 0xc2b8, 0xc2b8, 0xc2ba,
-	0xc307, 0xc2b8, 0xc2b8, 0xc2b8, 0xc2b8, 0xc2b8, 0xc2b8, 0xc2b8,
-	0x080c, 0x0d7d, 0x0096, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be,
-	0xd0bc, 0x0168, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039,
-	0x0118, 0x9186, 0x0035, 0x1118, 0x009e, 0x0804, 0xc31b, 0x080c,
-	0xc814, 0x1118, 0x080c, 0xca03, 0x0068, 0x6014, 0x2048, 0x080c,
-	0xcf5a, 0x1110, 0x080c, 0xca03, 0xa867, 0x0103, 0x080c, 0xcf0e,
-	0x080c, 0x6d70, 0x00d6, 0x2c68, 0x080c, 0xab73, 0x01d0, 0x6003,
-	0x0001, 0x6007, 0x001e, 0x600b, 0xffff, 0x2009, 0x026e, 0x210c,
-	0x613a, 0x2009, 0x026f, 0x210c, 0x613e, 0x6910, 0x6112, 0x080c,
-	0xcca8, 0x695c, 0x615e, 0x6023, 0x0001, 0x2009, 0x8020, 0x080c,
-	0x91ed, 0x2d60, 0x00de, 0x080c, 0xabc9, 0x009e, 0x0005, 0x6010,
-	0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x05a0, 0x6034, 0x908c,
-	0xff00, 0x810f, 0x9186, 0x0035, 0x0130, 0x9186, 0x001e, 0x0118,
-	0x9186, 0x0039, 0x1538, 0x00d6, 0x2c68, 0x080c, 0xcea6, 0x11f0,
-	0x080c, 0xab73, 0x01d8, 0x6106, 0x6003, 0x0001, 0x6023, 0x0001,
-	0x6910, 0x6112, 0x692c, 0x612e, 0x6930, 0x6132, 0x6934, 0x918c,
-	0x00ff, 0x6136, 0x6938, 0x613a, 0x693c, 0x613e, 0x695c, 0x615e,
-	0x080c, 0xcca8, 0x2009, 0x8020, 0x080c, 0x91ed, 0x2d60, 0x00de,
-	0x0804, 0xabc9, 0x0096, 0x6014, 0x2048, 0x080c, 0xc814, 0x01c8,
-	0xa867, 0x0103, 0xa880, 0xd0b4, 0x0128, 0xc0ec, 0xa882, 0xa87b,
-	0x0006, 0x0048, 0xd0bc, 0x0118, 0xa87b, 0x0002, 0x0020, 0xa87b,
-	0x0005, 0x080c, 0xcb18, 0xa877, 0x0000, 0x080c, 0x6d70, 0x080c,
-	0xca03, 0x009e, 0x0804, 0xabc9, 0x0016, 0x0096, 0x6014, 0x2048,
-	0x080c, 0xc814, 0x0140, 0xa867, 0x0103, 0xa87b, 0x0028, 0xa877,
-	0x0000, 0x080c, 0x6d70, 0x009e, 0x001e, 0x9186, 0x0013, 0x0158,
-	0x9186, 0x0014, 0x0130, 0x9186, 0x0027, 0x0118, 0x080c, 0xac85,
-	0x0020, 0x080c, 0x95ad, 0x080c, 0xac04, 0x0005, 0x0056, 0x0066,
-	0x0096, 0x00a6, 0x2029, 0x0001, 0x9182, 0x0101, 0x1208, 0x0010,
-	0x2009, 0x0100, 0x2130, 0x8304, 0x9098, 0x0018, 0x2009, 0x0020,
-	0x2011, 0x0029, 0x080c, 0xc3e7, 0x96b2, 0x0020, 0xb004, 0x904d,
-	0x0110, 0x080c, 0x0fec, 0x080c, 0x103a, 0x0520, 0x8528, 0xa867,
-	0x0110, 0xa86b, 0x0000, 0x2920, 0xb406, 0x968a, 0x003d, 0x1228,
-	0x2608, 0x2011, 0x001b, 0x0499, 0x00a8, 0x96b2, 0x003c, 0x2009,
-	0x003c, 0x2950, 0x2011, 0x001b, 0x0451, 0x0c28, 0x2001, 0x0205,
-	0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad, 0x0003, 0xb566, 0x95ac,
-	0x0000, 0x0048, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f,
-	0x95ad, 0x0003, 0xb566, 0x009e, 0x006e, 0x005e, 0x0005, 0x00a6,
-	0x89ff, 0x0158, 0xa804, 0x9055, 0x0130, 0xa807, 0x0000, 0x080c,
-	0x6d70, 0x2a48, 0x0cb8, 0x080c, 0x6d70, 0x00ae, 0x0005, 0x00f6,
-	0x2079, 0x0200, 0x7814, 0x9085, 0x0080, 0x7816, 0xd184, 0x0108,
-	0x8108, 0x810c, 0x20a9, 0x0001, 0xa860, 0x20e8, 0xa85c, 0x9200,
-	0x20a0, 0x20e1, 0x0000, 0x2300, 0x9e00, 0x2098, 0x4003, 0x8318,
-	0x9386, 0x0020, 0x1148, 0x2018, 0x2300, 0x9e00, 0x2098, 0x7814,
-	0x8000, 0x9085, 0x0080, 0x7816, 0x8109, 0x1d80, 0x7817, 0x0000,
-	0x00fe, 0x0005, 0x0066, 0x0126, 0x2091, 0x8000, 0x2031, 0x0001,
-	0x6020, 0x9084, 0x000f, 0x0083, 0x012e, 0x006e, 0x0005, 0x0126,
-	0x2091, 0x8000, 0x0066, 0x2031, 0x0000, 0x6020, 0x9084, 0x000f,
-	0x001b, 0x006e, 0x012e, 0x0005, 0xc464, 0xc464, 0xc45f, 0xc488,
-	0xc43c, 0xc45f, 0xc43e, 0xc45f, 0xc43c, 0x90b3, 0xc45f, 0xc45f,
-	0xc45f, 0xc43c, 0xc43c, 0xc43c, 0x080c, 0x0d7d, 0x6010, 0x9080,
-	0x0000, 0x2004, 0xd0bc, 0x190c, 0xc488, 0x0036, 0x6014, 0x0096,
-	0x2048, 0xa880, 0x009e, 0xd0cc, 0x0118, 0x2019, 0x000c, 0x0038,
-	0xd094, 0x0118, 0x2019, 0x000d, 0x0010, 0x2019, 0x0010, 0x080c,
-	0xddf2, 0x6023, 0x0006, 0x6003, 0x0007, 0x003e, 0x0005, 0x9006,
-	0x0005, 0x9085, 0x0001, 0x0005, 0x0096, 0x86ff, 0x11e8, 0x6014,
-	0x2048, 0x080c, 0xc814, 0x01d0, 0x6043, 0xffff, 0xa864, 0x9086,
-	0x0139, 0x1128, 0xa87b, 0x0005, 0xa883, 0x0000, 0x0028, 0x900e,
-	0x2001, 0x0005, 0x080c, 0x6fb0, 0x080c, 0xcb18, 0x080c, 0x6d64,
-	0x080c, 0xac04, 0x9085, 0x0001, 0x009e, 0x0005, 0x9006, 0x0ce0,
-	0x080c, 0xa872, 0x080c, 0xcf68, 0x6000, 0x908a, 0x0016, 0x1a0c,
-	0x0d7d, 0x002b, 0x0106, 0x080c, 0xa88e, 0x010e, 0x0005, 0xc4a7,
-	0xc4d5, 0xc4a9, 0xc4fc, 0xc4d0, 0xc4a7, 0xc45f, 0xc464, 0xc464,
-	0xc45f, 0xc45f, 0xc45f, 0xc45f, 0xc45f, 0xc45f, 0xc45f, 0x080c,
-	0x0d7d, 0x86ff, 0x1510, 0x6020, 0x9086, 0x0006, 0x01f0, 0x0096,
-	0x6014, 0x2048, 0x080c, 0xc814, 0x0158, 0xa87c, 0xd0cc, 0x0130,
-	0x0096, 0xa878, 0x2048, 0x080c, 0x0fec, 0x009e, 0x080c, 0xcb18,
-	0x009e, 0x080c, 0xcee8, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023,
-	0x0002, 0x2009, 0x8020, 0x080c, 0x91cf, 0x9085, 0x0001, 0x0005,
-	0x0066, 0x080c, 0x1a6a, 0x006e, 0x08a0, 0x00e6, 0x2071, 0x19e7,
-	0x7030, 0x9c06, 0x1120, 0x080c, 0xa074, 0x00ee, 0x0850, 0x6020,
-	0x9084, 0x000f, 0x9086, 0x0006, 0x1150, 0x0086, 0x0096, 0x2049,
-	0x0001, 0x2c40, 0x080c, 0xa1f4, 0x009e, 0x008e, 0x0040, 0x0066,
-	0x080c, 0x9f70, 0x190c, 0x0d7d, 0x080c, 0x9f7e, 0x006e, 0x00ee,
-	0x1904, 0xc4a9, 0x0804, 0xc45f, 0x0036, 0x00e6, 0x2071, 0x19e7,
-	0x704c, 0x9c06, 0x1138, 0x901e, 0x080c, 0xa0f4, 0x00ee, 0x003e,
-	0x0804, 0xc4a9, 0x080c, 0xa32a, 0x00ee, 0x003e, 0x1904, 0xc4a9,
-	0x0804, 0xc45f, 0x00c6, 0x0066, 0x6020, 0x9084, 0x000f, 0x001b,
-	0x006e, 0x00ce, 0x0005, 0xc532, 0xc5f4, 0xc75b, 0xc53a, 0xac04,
-	0xc532, 0xdde4, 0xcf50, 0xc5f4, 0x907a, 0xc7da, 0xc52b, 0xc52b,
-	0xc52b, 0xc52b, 0xc52b, 0x080c, 0x0d7d, 0x080c, 0xca29, 0x1110,
-	0x080c, 0xb591, 0x0005, 0x080c, 0x95ad, 0x0804, 0xabc9, 0x601b,
-	0x0001, 0x0005, 0x080c, 0xc814, 0x0130, 0x6014, 0x0096, 0x2048,
-	0x2c00, 0xa896, 0x009e, 0x080c, 0xa872, 0x080c, 0xcf68, 0x6000,
-	0x908a, 0x0016, 0x1a0c, 0x0d7d, 0x0013, 0x0804, 0xa88e, 0xc55f,
-	0xc561, 0xc58b, 0xc59f, 0xc5ca, 0xc55f, 0xc532, 0xc532, 0xc532,
-	0xc5a6, 0xc5a6, 0xc55f, 0xc55f, 0xc55f, 0xc55f, 0xc5b0, 0x080c,
-	0x0d7d, 0x00e6, 0x6014, 0x0096, 0x2048, 0xa880, 0xc0b5, 0xa882,
-	0x009e, 0x2071, 0x19e7, 0x7030, 0x9c06, 0x01d0, 0x0066, 0x080c,
-	0x9f70, 0x190c, 0x0d7d, 0x080c, 0x9f7e, 0x006e, 0x080c, 0xcee8,
-	0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x2001, 0x1987,
-	0x2004, 0x601a, 0x2009, 0x8020, 0x080c, 0x91cf, 0x00ee, 0x0005,
-	0x601b, 0x0001, 0x0cd8, 0x0096, 0x6014, 0x2048, 0xa880, 0xc0b5,
-	0xa882, 0x009e, 0x080c, 0xcee8, 0x6007, 0x0085, 0x6003, 0x000b,
-	0x6023, 0x0002, 0x2009, 0x8020, 0x080c, 0x91cf, 0x0005, 0x080c,
-	0xa872, 0x080c, 0xaa06, 0x080c, 0xa88e, 0x0c28, 0x0096, 0x601b,
-	0x0001, 0x6014, 0x2048, 0xa880, 0xc0b5, 0xa882, 0x009e, 0x0005,
-	0x080c, 0x56db, 0x01a8, 0x6014, 0x0096, 0x904d, 0x0180, 0xa864,
-	0xa867, 0x0103, 0xa87b, 0x0006, 0x9086, 0x0139, 0x1140, 0xa867,
-	0x0139, 0xa897, 0x4005, 0xa89b, 0x0004, 0x080c, 0x6d70, 0x009e,
-	0x0804, 0xabc9, 0x6014, 0x0096, 0x904d, 0x0508, 0x080c, 0xcf54,
-	0x01f0, 0x080c, 0xa88e, 0x2001, 0x180f, 0x2004, 0xd0c4, 0x0110,
-	0x009e, 0x0005, 0xa884, 0x009e, 0x8003, 0x800b, 0x810b, 0x9108,
-	0x611a, 0x2001, 0x0037, 0x2c08, 0x080c, 0x1679, 0x6000, 0x9086,
-	0x0004, 0x1120, 0x2009, 0x0048, 0x080c, 0xac68, 0x0005, 0x009e,
-	0x080c, 0x1a6a, 0x0804, 0xc58b, 0x6000, 0x908a, 0x0016, 0x1a0c,
-	0x0d7d, 0x000b, 0x0005, 0xc60b, 0xc537, 0xc60d, 0xc60b, 0xc60d,
-	0xc60d, 0xc533, 0xc60b, 0xc52d, 0xc52d, 0xc60b, 0xc60b, 0xc60b,
-	0xc60b, 0xc60b, 0xc60b, 0x080c, 0x0d7d, 0x6010, 0x00b6, 0x2058,
-	0xb804, 0x9084, 0x00ff, 0x00be, 0x908a, 0x000c, 0x1a0c, 0x0d7d,
-	0x00b6, 0x0013, 0x00be, 0x0005, 0xc628, 0xc6f5, 0xc62a, 0xc66a,
-	0xc62a, 0xc66a, 0xc62a, 0xc638, 0xc628, 0xc66a, 0xc628, 0xc659,
-	0x080c, 0x0d7d, 0x6004, 0x908e, 0x0016, 0x05c0, 0x908e, 0x0004,
-	0x05a8, 0x908e, 0x0002, 0x0590, 0x908e, 0x0052, 0x0904, 0xc6f1,
-	0x6004, 0x080c, 0xca29, 0x0904, 0xc70e, 0x908e, 0x0004, 0x1110,
-	0x080c, 0x3215, 0x908e, 0x0021, 0x0904, 0xc712, 0x908e, 0x0022,
-	0x0904, 0xc756, 0x908e, 0x003d, 0x0904, 0xc712, 0x908e, 0x0039,
-	0x0904, 0xc716, 0x908e, 0x0035, 0x0904, 0xc716, 0x908e, 0x001e,
-	0x0178, 0x908e, 0x0001, 0x1140, 0x6010, 0x2058, 0xb804, 0x9084,
-	0x00ff, 0x9086, 0x0006, 0x0110, 0x080c, 0x31e4, 0x080c, 0xb591,
-	0x0804, 0xac04, 0x00c6, 0x00d6, 0x6104, 0x9186, 0x0016, 0x0904,
-	0xc6e2, 0x9186, 0x0002, 0x1904, 0xc6b7, 0x2001, 0x1837, 0x2004,
-	0xd08c, 0x11c8, 0x080c, 0x74d5, 0x11b0, 0x080c, 0xcf2e, 0x0138,
-	0x080c, 0x74f8, 0x1120, 0x080c, 0x73e0, 0x0804, 0xc73f, 0x2001,
-	0x197d, 0x2003, 0x0001, 0x2001, 0x1800, 0x2003, 0x0001, 0x080c,
-	0x7406, 0x0804, 0xc73f, 0x6010, 0x2058, 0x2001, 0x1837, 0x2004,
-	0xd0ac, 0x1904, 0xc73f, 0xb8a0, 0x9084, 0xff80, 0x1904, 0xc73f,
-	0xb840, 0x9084, 0x00ff, 0x9005, 0x0190, 0x8001, 0xb842, 0x6017,
-	0x0000, 0x6023, 0x0007, 0x601b, 0x0398, 0x604b, 0x0000, 0x080c,
-	0xab73, 0x0128, 0x2b00, 0x6012, 0x6023, 0x0001, 0x0458, 0x00de,
-	0x00ce, 0x6004, 0x908e, 0x0002, 0x11a0, 0x6010, 0x2058, 0xb8a0,
-	0x9086, 0x007e, 0x1170, 0x2009, 0x1837, 0x2104, 0xc085, 0x200a,
-	0x00e6, 0x2071, 0x1800, 0x080c, 0x5fb5, 0x00ee, 0x080c, 0xb591,
-	0x0030, 0x080c, 0xb591, 0x080c, 0x31e4, 0x080c, 0xcf43, 0x00e6,
-	0x0126, 0x2091, 0x8000, 0x080c, 0x3215, 0x012e, 0x00ee, 0x080c,
-	0xac04, 0x0005, 0x2001, 0x0002, 0x080c, 0x656e, 0x6003, 0x0001,
-	0x6007, 0x0002, 0x080c, 0x91f4, 0x080c, 0x966f, 0x00de, 0x00ce,
-	0x0c80, 0x080c, 0x3215, 0x0804, 0xc666, 0x00c6, 0x00d6, 0x6104,
-	0x9186, 0x0016, 0x0d38, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff,
-	0x9005, 0x0904, 0xc6b7, 0x8001, 0xb842, 0x6003, 0x0001, 0x080c,
-	0x91f4, 0x080c, 0x966f, 0x00de, 0x00ce, 0x0898, 0x080c, 0xb591,
-	0x0804, 0xc668, 0x080c, 0xb5cd, 0x0804, 0xc668, 0x00d6, 0x2c68,
-	0x6104, 0x080c, 0xcea6, 0x00de, 0x0118, 0x080c, 0xabc9, 0x00f0,
-	0x6004, 0x8007, 0x6134, 0x918c, 0x00ff, 0x9105, 0x6036, 0x6007,
-	0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x603c, 0x600a, 0x2001,
-	0x1987, 0x2004, 0x601a, 0x602c, 0x2c08, 0x2060, 0x6024, 0xc0b5,
-	0x6026, 0x2160, 0x2009, 0x8020, 0x080c, 0x91ed, 0x0005, 0x00de,
-	0x00ce, 0x080c, 0xb591, 0x080c, 0x31e4, 0x00e6, 0x0126, 0x2091,
-	0x8000, 0x080c, 0x3215, 0x6017, 0x0000, 0x6023, 0x0007, 0x601b,
-	0x0398, 0x604b, 0x0000, 0x012e, 0x00ee, 0x0005, 0x080c, 0xb005,
-	0x1904, 0xc70e, 0x0005, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0d7d,
-	0x0096, 0x00d6, 0x001b, 0x00de, 0x009e, 0x0005, 0xc776, 0xc776,
-	0xc776, 0xc776, 0xc776, 0xc776, 0xc776, 0xc776, 0xc776, 0xc532,
-	0xc776, 0xc537, 0xc778, 0xc537, 0xc785, 0xc776, 0x080c, 0x0d7d,
-	0x6004, 0x9086, 0x008b, 0x0148, 0x6007, 0x008b, 0x6003, 0x000d,
-	0x2009, 0x8020, 0x080c, 0x91ed, 0x0005, 0x080c, 0xcf22, 0x0118,
-	0x080c, 0xcf35, 0x0010, 0x080c, 0xcf43, 0x080c, 0xca03, 0x080c,
-	0xc814, 0x0570, 0x080c, 0x31e4, 0x080c, 0xc814, 0x0168, 0x6014,
-	0x2048, 0xa867, 0x0103, 0xa87b, 0x0006, 0xa877, 0x0000, 0xa880,
-	0xc0ed, 0xa882, 0x080c, 0x6d70, 0x2c68, 0x080c, 0xab73, 0x0150,
-	0x6810, 0x6012, 0x080c, 0xcca8, 0x00c6, 0x2d60, 0x080c, 0xac04,
-	0x00ce, 0x0008, 0x2d60, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007,
-	0x0001, 0x6003, 0x0001, 0x080c, 0x91f4, 0x080c, 0x966f, 0x00c8,
-	0x080c, 0xcf22, 0x0138, 0x6034, 0x9086, 0x4000, 0x1118, 0x080c,
-	0x31e4, 0x08d0, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039,
-	0x0118, 0x9186, 0x0035, 0x1118, 0x080c, 0x31e4, 0x0868, 0x080c,
-	0xac04, 0x0005, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0d7d, 0x0002,
-	0xc7f0, 0xc7f0, 0xc7f2, 0xc7f2, 0xc7f2, 0xc7f0, 0xc7f0, 0xac04,
-	0xc7f0, 0xc7f0, 0xc7f0, 0xc7f0, 0xc7f0, 0xc7f0, 0xc7f0, 0xc7f0,
-	0x080c, 0x0d7d, 0x080c, 0xa872, 0x080c, 0xaa06, 0x080c, 0xa88e,
-	0x6114, 0x0096, 0x2148, 0xa87b, 0x0006, 0x080c, 0x6d70, 0x009e,
-	0x0804, 0xabc9, 0x9284, 0x0003, 0x1158, 0x9282, 0x1ddc, 0x0240,
-	0x2001, 0x181a, 0x2004, 0x9202, 0x1218, 0x9085, 0x0001, 0x0005,
-	0x9006, 0x0ce8, 0x0096, 0x0028, 0x0096, 0x0006, 0x6014, 0x2048,
-	0x000e, 0x0006, 0x9984, 0xf000, 0x9086, 0xf000, 0x0110, 0x080c,
-	0x10e5, 0x000e, 0x009e, 0x0005, 0x00e6, 0x00c6, 0x0036, 0x0006,
-	0x0126, 0x2091, 0x8000, 0x2061, 0x1ddc, 0x2071, 0x1800, 0x7354,
-	0x7074, 0x9302, 0x1640, 0x6020, 0x9206, 0x11f8, 0x080c, 0xcf2e,
-	0x0180, 0x9286, 0x0001, 0x1168, 0x6004, 0x9086, 0x0004, 0x1148,
-	0x080c, 0x31e4, 0x080c, 0xcf43, 0x00c6, 0x080c, 0xac04, 0x00ce,
-	0x0060, 0x080c, 0xcc1a, 0x0148, 0x080c, 0xca29, 0x1110, 0x080c,
-	0xb591, 0x00c6, 0x080c, 0xabc9, 0x00ce, 0x9ce0, 0x001c, 0x7068,
-	0x9c02, 0x1208, 0x08a0, 0x012e, 0x000e, 0x003e, 0x00ce, 0x00ee,
-	0x0005, 0x00e6, 0x00c6, 0x0016, 0x9188, 0x1000, 0x210c, 0x81ff,
-	0x0128, 0x2061, 0x1b32, 0x6112, 0x080c, 0x31e4, 0x9006, 0x0010,
-	0x9085, 0x0001, 0x001e, 0x00ce, 0x00ee, 0x0005, 0x00c6, 0x0126,
-	0x2091, 0x8000, 0x080c, 0xab73, 0x01b0, 0x665e, 0x2b00, 0x6012,
-	0x080c, 0x56db, 0x0118, 0x080c, 0xc945, 0x0168, 0x080c, 0xcca8,
-	0x6023, 0x0003, 0x2009, 0x004b, 0x080c, 0xac68, 0x9085, 0x0001,
+	0x000c, 0x0005, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039,
+	0x0118, 0x9186, 0x0035, 0x1118, 0x2001, 0x1986, 0x0010, 0x2001,
+	0x1987, 0x2004, 0x601a, 0x6003, 0x000e, 0x0005, 0x9182, 0x0092,
+	0x1220, 0x9182, 0x0085, 0x0208, 0x0012, 0x0804, 0xaca9, 0xc2dc,
+	0xc2dc, 0xc2dc, 0xc2dc, 0xc2de, 0xc32b, 0xc2dc, 0xc2dc, 0xc2dc,
+	0xc2dc, 0xc2dc, 0xc2dc, 0xc2dc, 0x080c, 0x0d7d, 0x0096, 0x6010,
+	0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0168, 0x6034, 0x908c,
+	0xff00, 0x810f, 0x9186, 0x0039, 0x0118, 0x9186, 0x0035, 0x1118,
+	0x009e, 0x0804, 0xc33f, 0x080c, 0xc838, 0x1118, 0x080c, 0xca27,
+	0x0068, 0x6014, 0x2048, 0x080c, 0xcf7e, 0x1110, 0x080c, 0xca27,
+	0xa867, 0x0103, 0x080c, 0xcf32, 0x080c, 0x6d80, 0x00d6, 0x2c68,
+	0x080c, 0xab97, 0x01d0, 0x6003, 0x0001, 0x6007, 0x001e, 0x600b,
+	0xffff, 0x2009, 0x026e, 0x210c, 0x613a, 0x2009, 0x026f, 0x210c,
+	0x613e, 0x6910, 0x6112, 0x080c, 0xcccc, 0x695c, 0x615e, 0x6023,
+	0x0001, 0x2009, 0x8020, 0x080c, 0x921e, 0x2d60, 0x00de, 0x080c,
+	0xabed, 0x009e, 0x0005, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be,
+	0xd0bc, 0x05a0, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0035,
+	0x0130, 0x9186, 0x001e, 0x0118, 0x9186, 0x0039, 0x1538, 0x00d6,
+	0x2c68, 0x080c, 0xceca, 0x11f0, 0x080c, 0xab97, 0x01d8, 0x6106,
+	0x6003, 0x0001, 0x6023, 0x0001, 0x6910, 0x6112, 0x692c, 0x612e,
+	0x6930, 0x6132, 0x6934, 0x918c, 0x00ff, 0x6136, 0x6938, 0x613a,
+	0x693c, 0x613e, 0x695c, 0x615e, 0x080c, 0xcccc, 0x2009, 0x8020,
+	0x080c, 0x921e, 0x2d60, 0x00de, 0x0804, 0xabed, 0x0096, 0x6014,
+	0x2048, 0x080c, 0xc838, 0x01c8, 0xa867, 0x0103, 0xa880, 0xd0b4,
+	0x0128, 0xc0ec, 0xa882, 0xa87b, 0x0006, 0x0048, 0xd0bc, 0x0118,
+	0xa87b, 0x0002, 0x0020, 0xa87b, 0x0005, 0x080c, 0xcb3c, 0xa877,
+	0x0000, 0x080c, 0x6d80, 0x080c, 0xca27, 0x009e, 0x0804, 0xabed,
+	0x0016, 0x0096, 0x6014, 0x2048, 0x080c, 0xc838, 0x0140, 0xa867,
+	0x0103, 0xa87b, 0x0028, 0xa877, 0x0000, 0x080c, 0x6d80, 0x009e,
+	0x001e, 0x9186, 0x0013, 0x0158, 0x9186, 0x0014, 0x0130, 0x9186,
+	0x0027, 0x0118, 0x080c, 0xaca9, 0x0020, 0x080c, 0x95de, 0x080c,
+	0xac28, 0x0005, 0x0056, 0x0066, 0x0096, 0x00a6, 0x2029, 0x0001,
+	0x9182, 0x0101, 0x1208, 0x0010, 0x2009, 0x0100, 0x2130, 0x8304,
+	0x9098, 0x0018, 0x2009, 0x0020, 0x2011, 0x0029, 0x080c, 0xc40b,
+	0x96b2, 0x0020, 0xb004, 0x904d, 0x0110, 0x080c, 0x0fec, 0x080c,
+	0x103a, 0x0520, 0x8528, 0xa867, 0x0110, 0xa86b, 0x0000, 0x2920,
+	0xb406, 0x968a, 0x003d, 0x1228, 0x2608, 0x2011, 0x001b, 0x0499,
+	0x00a8, 0x96b2, 0x003c, 0x2009, 0x003c, 0x2950, 0x2011, 0x001b,
+	0x0451, 0x0c28, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f,
+	0x95ad, 0x0003, 0xb566, 0x95ac, 0x0000, 0x0048, 0x2001, 0x0205,
+	0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad, 0x0003, 0xb566, 0x009e,
+	0x006e, 0x005e, 0x0005, 0x00a6, 0x89ff, 0x0158, 0xa804, 0x9055,
+	0x0130, 0xa807, 0x0000, 0x080c, 0x6d80, 0x2a48, 0x0cb8, 0x080c,
+	0x6d80, 0x00ae, 0x0005, 0x00f6, 0x2079, 0x0200, 0x7814, 0x9085,
+	0x0080, 0x7816, 0xd184, 0x0108, 0x8108, 0x810c, 0x20a9, 0x0001,
+	0xa860, 0x20e8, 0xa85c, 0x9200, 0x20a0, 0x20e1, 0x0000, 0x2300,
+	0x9e00, 0x2098, 0x4003, 0x8318, 0x9386, 0x0020, 0x1148, 0x2018,
+	0x2300, 0x9e00, 0x2098, 0x7814, 0x8000, 0x9085, 0x0080, 0x7816,
+	0x8109, 0x1d80, 0x7817, 0x0000, 0x00fe, 0x0005, 0x0066, 0x0126,
+	0x2091, 0x8000, 0x2031, 0x0001, 0x6020, 0x9084, 0x000f, 0x0083,
+	0x012e, 0x006e, 0x0005, 0x0126, 0x2091, 0x8000, 0x0066, 0x2031,
+	0x0000, 0x6020, 0x9084, 0x000f, 0x001b, 0x006e, 0x012e, 0x0005,
+	0xc488, 0xc488, 0xc483, 0xc4ac, 0xc460, 0xc483, 0xc462, 0xc483,
+	0xc460, 0x90e4, 0xc483, 0xc483, 0xc483, 0xc460, 0xc460, 0xc460,
+	0x080c, 0x0d7d, 0x6010, 0x9080, 0x0000, 0x2004, 0xd0bc, 0x190c,
+	0xc4ac, 0x0036, 0x6014, 0x0096, 0x2048, 0xa880, 0x009e, 0xd0cc,
+	0x0118, 0x2019, 0x000c, 0x0038, 0xd094, 0x0118, 0x2019, 0x000d,
+	0x0010, 0x2019, 0x0010, 0x080c, 0xde1b, 0x6023, 0x0006, 0x6003,
+	0x0007, 0x003e, 0x0005, 0x9006, 0x0005, 0x9085, 0x0001, 0x0005,
+	0x0096, 0x86ff, 0x11e8, 0x6014, 0x2048, 0x080c, 0xc838, 0x01d0,
+	0x6043, 0xffff, 0xa864, 0x9086, 0x0139, 0x1128, 0xa87b, 0x0005,
+	0xa883, 0x0000, 0x0028, 0x900e, 0x2001, 0x0005, 0x080c, 0x6fc0,
+	0x080c, 0xcb3c, 0x080c, 0x6d74, 0x080c, 0xac28, 0x9085, 0x0001,
+	0x009e, 0x0005, 0x9006, 0x0ce0, 0x080c, 0xa896, 0x080c, 0xcf8c,
+	0x6000, 0x908a, 0x0016, 0x1a0c, 0x0d7d, 0x002b, 0x0106, 0x080c,
+	0xa8b2, 0x010e, 0x0005, 0xc4cb, 0xc4f9, 0xc4cd, 0xc520, 0xc4f4,
+	0xc4cb, 0xc483, 0xc488, 0xc488, 0xc483, 0xc483, 0xc483, 0xc483,
+	0xc483, 0xc483, 0xc483, 0x080c, 0x0d7d, 0x86ff, 0x1510, 0x6020,
+	0x9086, 0x0006, 0x01f0, 0x0096, 0x6014, 0x2048, 0x080c, 0xc838,
+	0x0158, 0xa87c, 0xd0cc, 0x0130, 0x0096, 0xa878, 0x2048, 0x080c,
+	0x0fec, 0x009e, 0x080c, 0xcb3c, 0x009e, 0x080c, 0xcf0c, 0x6007,
+	0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x2009, 0x8020, 0x080c,
+	0x9200, 0x9085, 0x0001, 0x0005, 0x0066, 0x080c, 0x1a6a, 0x006e,
+	0x08a0, 0x00e6, 0x2071, 0x19e7, 0x7030, 0x9c06, 0x1120, 0x080c,
+	0xa098, 0x00ee, 0x0850, 0x6020, 0x9084, 0x000f, 0x9086, 0x0006,
+	0x1150, 0x0086, 0x0096, 0x2049, 0x0001, 0x2c40, 0x080c, 0xa218,
+	0x009e, 0x008e, 0x0040, 0x0066, 0x080c, 0x9f94, 0x190c, 0x0d7d,
+	0x080c, 0x9fa2, 0x006e, 0x00ee, 0x1904, 0xc4cd, 0x0804, 0xc483,
+	0x0036, 0x00e6, 0x2071, 0x19e7, 0x704c, 0x9c06, 0x1138, 0x901e,
+	0x080c, 0xa118, 0x00ee, 0x003e, 0x0804, 0xc4cd, 0x080c, 0xa34e,
+	0x00ee, 0x003e, 0x1904, 0xc4cd, 0x0804, 0xc483, 0x00c6, 0x0066,
+	0x6020, 0x9084, 0x000f, 0x001b, 0x006e, 0x00ce, 0x0005, 0xc556,
+	0xc618, 0xc77f, 0xc55e, 0xac28, 0xc556, 0xde0d, 0xcf74, 0xc618,
+	0x90ab, 0xc7fe, 0xc54f, 0xc54f, 0xc54f, 0xc54f, 0xc54f, 0x080c,
+	0x0d7d, 0x080c, 0xca4d, 0x1110, 0x080c, 0xb5b5, 0x0005, 0x080c,
+	0x95de, 0x0804, 0xabed, 0x601b, 0x0001, 0x0005, 0x080c, 0xc838,
+	0x0130, 0x6014, 0x0096, 0x2048, 0x2c00, 0xa896, 0x009e, 0x080c,
+	0xa896, 0x080c, 0xcf8c, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0d7d,
+	0x0013, 0x0804, 0xa8b2, 0xc583, 0xc585, 0xc5af, 0xc5c3, 0xc5ee,
+	0xc583, 0xc556, 0xc556, 0xc556, 0xc5ca, 0xc5ca, 0xc583, 0xc583,
+	0xc583, 0xc583, 0xc5d4, 0x080c, 0x0d7d, 0x00e6, 0x6014, 0x0096,
+	0x2048, 0xa880, 0xc0b5, 0xa882, 0x009e, 0x2071, 0x19e7, 0x7030,
+	0x9c06, 0x01d0, 0x0066, 0x080c, 0x9f94, 0x190c, 0x0d7d, 0x080c,
+	0x9fa2, 0x006e, 0x080c, 0xcf0c, 0x6007, 0x0085, 0x6003, 0x000b,
+	0x6023, 0x0002, 0x2001, 0x1987, 0x2004, 0x601a, 0x2009, 0x8020,
+	0x080c, 0x9200, 0x00ee, 0x0005, 0x601b, 0x0001, 0x0cd8, 0x0096,
+	0x6014, 0x2048, 0xa880, 0xc0b5, 0xa882, 0x009e, 0x080c, 0xcf0c,
+	0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x2009, 0x8020,
+	0x080c, 0x9200, 0x0005, 0x080c, 0xa896, 0x080c, 0xaa2a, 0x080c,
+	0xa8b2, 0x0c28, 0x0096, 0x601b, 0x0001, 0x6014, 0x2048, 0xa880,
+	0xc0b5, 0xa882, 0x009e, 0x0005, 0x080c, 0x56e2, 0x01a8, 0x6014,
+	0x0096, 0x904d, 0x0180, 0xa864, 0xa867, 0x0103, 0xa87b, 0x0006,
+	0x9086, 0x0139, 0x1140, 0xa867, 0x0139, 0xa897, 0x4005, 0xa89b,
+	0x0004, 0x080c, 0x6d80, 0x009e, 0x0804, 0xabed, 0x6014, 0x0096,
+	0x904d, 0x0508, 0x080c, 0xcf78, 0x01f0, 0x080c, 0xa8b2, 0x2001,
+	0x180f, 0x2004, 0xd0c4, 0x0110, 0x009e, 0x0005, 0xa884, 0x009e,
+	0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0x2001, 0x0037, 0x2c08,
+	0x080c, 0x1679, 0x6000, 0x9086, 0x0004, 0x1120, 0x2009, 0x0048,
+	0x080c, 0xac8c, 0x0005, 0x009e, 0x080c, 0x1a6a, 0x0804, 0xc5af,
+	0x6000, 0x908a, 0x0016, 0x1a0c, 0x0d7d, 0x000b, 0x0005, 0xc62f,
+	0xc55b, 0xc631, 0xc62f, 0xc631, 0xc631, 0xc557, 0xc62f, 0xc551,
+	0xc551, 0xc62f, 0xc62f, 0xc62f, 0xc62f, 0xc62f, 0xc62f, 0x080c,
+	0x0d7d, 0x6010, 0x00b6, 0x2058, 0xb804, 0x9084, 0x00ff, 0x00be,
+	0x908a, 0x000c, 0x1a0c, 0x0d7d, 0x00b6, 0x0013, 0x00be, 0x0005,
+	0xc64c, 0xc719, 0xc64e, 0xc68e, 0xc64e, 0xc68e, 0xc64e, 0xc65c,
+	0xc64c, 0xc68e, 0xc64c, 0xc67d, 0x080c, 0x0d7d, 0x6004, 0x908e,
+	0x0016, 0x05c0, 0x908e, 0x0004, 0x05a8, 0x908e, 0x0002, 0x0590,
+	0x908e, 0x0052, 0x0904, 0xc715, 0x6004, 0x080c, 0xca4d, 0x0904,
+	0xc732, 0x908e, 0x0004, 0x1110, 0x080c, 0x321c, 0x908e, 0x0021,
+	0x0904, 0xc736, 0x908e, 0x0022, 0x0904, 0xc77a, 0x908e, 0x003d,
+	0x0904, 0xc736, 0x908e, 0x0039, 0x0904, 0xc73a, 0x908e, 0x0035,
+	0x0904, 0xc73a, 0x908e, 0x001e, 0x0178, 0x908e, 0x0001, 0x1140,
+	0x6010, 0x2058, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x0110,
+	0x080c, 0x31e7, 0x080c, 0xb5b5, 0x0804, 0xac28, 0x00c6, 0x00d6,
+	0x6104, 0x9186, 0x0016, 0x0904, 0xc706, 0x9186, 0x0002, 0x1904,
+	0xc6db, 0x2001, 0x1837, 0x2004, 0xd08c, 0x11c8, 0x080c, 0x74e9,
+	0x11b0, 0x080c, 0xcf52, 0x0138, 0x080c, 0x750c, 0x1120, 0x080c,
+	0x73f4, 0x0804, 0xc763, 0x2001, 0x197d, 0x2003, 0x0001, 0x2001,
+	0x1800, 0x2003, 0x0001, 0x080c, 0x741a, 0x0804, 0xc763, 0x6010,
+	0x2058, 0x2001, 0x1837, 0x2004, 0xd0ac, 0x1904, 0xc763, 0xb8a0,
+	0x9084, 0xff80, 0x1904, 0xc763, 0xb840, 0x9084, 0x00ff, 0x9005,
+	0x0190, 0x8001, 0xb842, 0x6017, 0x0000, 0x6023, 0x0007, 0x601b,
+	0x0398, 0x604b, 0x0000, 0x080c, 0xab97, 0x0128, 0x2b00, 0x6012,
+	0x6023, 0x0001, 0x0458, 0x00de, 0x00ce, 0x6004, 0x908e, 0x0002,
+	0x11a0, 0x6010, 0x2058, 0xb8a0, 0x9086, 0x007e, 0x1170, 0x2009,
+	0x1837, 0x2104, 0xc085, 0x200a, 0x00e6, 0x2071, 0x1800, 0x080c,
+	0x5fbc, 0x00ee, 0x080c, 0xb5b5, 0x0030, 0x080c, 0xb5b5, 0x080c,
+	0x31e7, 0x080c, 0xcf67, 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c,
+	0x321c, 0x012e, 0x00ee, 0x080c, 0xac28, 0x0005, 0x2001, 0x0002,
+	0x080c, 0x6575, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x9225,
+	0x080c, 0x96a0, 0x00de, 0x00ce, 0x0c80, 0x080c, 0x321c, 0x0804,
+	0xc68a, 0x00c6, 0x00d6, 0x6104, 0x9186, 0x0016, 0x0d38, 0x6010,
+	0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0904, 0xc6db, 0x8001,
+	0xb842, 0x6003, 0x0001, 0x080c, 0x9225, 0x080c, 0x96a0, 0x00de,
+	0x00ce, 0x0898, 0x080c, 0xb5b5, 0x0804, 0xc68c, 0x080c, 0xb5f1,
+	0x0804, 0xc68c, 0x00d6, 0x2c68, 0x6104, 0x080c, 0xceca, 0x00de,
+	0x0118, 0x080c, 0xabed, 0x00f0, 0x6004, 0x8007, 0x6134, 0x918c,
+	0x00ff, 0x9105, 0x6036, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023,
+	0x0002, 0x603c, 0x600a, 0x2001, 0x1987, 0x2004, 0x601a, 0x602c,
+	0x2c08, 0x2060, 0x6024, 0xc0b5, 0x6026, 0x2160, 0x2009, 0x8020,
+	0x080c, 0x921e, 0x0005, 0x00de, 0x00ce, 0x080c, 0xb5b5, 0x080c,
+	0x31e7, 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x321c, 0x6017,
+	0x0000, 0x6023, 0x0007, 0x601b, 0x0398, 0x604b, 0x0000, 0x012e,
+	0x00ee, 0x0005, 0x080c, 0xb029, 0x1904, 0xc732, 0x0005, 0x6000,
+	0x908a, 0x0016, 0x1a0c, 0x0d7d, 0x0096, 0x00d6, 0x001b, 0x00de,
+	0x009e, 0x0005, 0xc79a, 0xc79a, 0xc79a, 0xc79a, 0xc79a, 0xc79a,
+	0xc79a, 0xc79a, 0xc79a, 0xc556, 0xc79a, 0xc55b, 0xc79c, 0xc55b,
+	0xc7a9, 0xc79a, 0x080c, 0x0d7d, 0x6004, 0x9086, 0x008b, 0x0148,
+	0x6007, 0x008b, 0x6003, 0x000d, 0x2009, 0x8020, 0x080c, 0x921e,
+	0x0005, 0x080c, 0xcf46, 0x0118, 0x080c, 0xcf59, 0x0010, 0x080c,
+	0xcf67, 0x080c, 0xca27, 0x080c, 0xc838, 0x0570, 0x080c, 0x31e7,
+	0x080c, 0xc838, 0x0168, 0x6014, 0x2048, 0xa867, 0x0103, 0xa87b,
+	0x0006, 0xa877, 0x0000, 0xa880, 0xc0ed, 0xa882, 0x080c, 0x6d80,
+	0x2c68, 0x080c, 0xab97, 0x0150, 0x6810, 0x6012, 0x080c, 0xcccc,
+	0x00c6, 0x2d60, 0x080c, 0xac28, 0x00ce, 0x0008, 0x2d60, 0x6017,
+	0x0000, 0x6023, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c,
+	0x9225, 0x080c, 0x96a0, 0x00c8, 0x080c, 0xcf46, 0x0138, 0x6034,
+	0x9086, 0x4000, 0x1118, 0x080c, 0x31e7, 0x08d0, 0x6034, 0x908c,
+	0xff00, 0x810f, 0x9186, 0x0039, 0x0118, 0x9186, 0x0035, 0x1118,
+	0x080c, 0x31e7, 0x0868, 0x080c, 0xac28, 0x0005, 0x6000, 0x908a,
+	0x0016, 0x1a0c, 0x0d7d, 0x0002, 0xc814, 0xc814, 0xc816, 0xc816,
+	0xc816, 0xc814, 0xc814, 0xac28, 0xc814, 0xc814, 0xc814, 0xc814,
+	0xc814, 0xc814, 0xc814, 0xc814, 0x080c, 0x0d7d, 0x080c, 0xa896,
+	0x080c, 0xaa2a, 0x080c, 0xa8b2, 0x6114, 0x0096, 0x2148, 0xa87b,
+	0x0006, 0x080c, 0x6d80, 0x009e, 0x0804, 0xabed, 0x9284, 0x0003,
+	0x1158, 0x9282, 0x1ddc, 0x0240, 0x2001, 0x181a, 0x2004, 0x9202,
+	0x1218, 0x9085, 0x0001, 0x0005, 0x9006, 0x0ce8, 0x0096, 0x0028,
+	0x0096, 0x0006, 0x6014, 0x2048, 0x000e, 0x0006, 0x9984, 0xf000,
+	0x9086, 0xf000, 0x0110, 0x080c, 0x10e5, 0x000e, 0x009e, 0x0005,
+	0x00e6, 0x00c6, 0x0036, 0x0006, 0x0126, 0x2091, 0x8000, 0x2061,
+	0x1ddc, 0x2071, 0x1800, 0x7354, 0x7074, 0x9302, 0x1640, 0x6020,
+	0x9206, 0x11f8, 0x080c, 0xcf52, 0x0180, 0x9286, 0x0001, 0x1168,
+	0x6004, 0x9086, 0x0004, 0x1148, 0x080c, 0x31e7, 0x080c, 0xcf67,
+	0x00c6, 0x080c, 0xac28, 0x00ce, 0x0060, 0x080c, 0xcc3e, 0x0148,
+	0x080c, 0xca4d, 0x1110, 0x080c, 0xb5b5, 0x00c6, 0x080c, 0xabed,
+	0x00ce, 0x9ce0, 0x001c, 0x7068, 0x9c02, 0x1208, 0x08a0, 0x012e,
+	0x000e, 0x003e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0016,
+	0x9188, 0x1000, 0x210c, 0x81ff, 0x0128, 0x2061, 0x1b32, 0x6112,
+	0x080c, 0x31e7, 0x9006, 0x0010, 0x9085, 0x0001, 0x001e, 0x00ce,
+	0x00ee, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0xab97,
+	0x01b0, 0x665e, 0x2b00, 0x6012, 0x080c, 0x56e2, 0x0118, 0x080c,
+	0xc969, 0x0168, 0x080c, 0xcccc, 0x6023, 0x0003, 0x2009, 0x004b,
+	0x080c, 0xac8c, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006,
+	0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0xbaa0, 0x080c, 0xac5f,
+	0x0580, 0x605f, 0x0000, 0x2b00, 0x6012, 0x080c, 0xcccc, 0x6023,
+	0x0003, 0x0016, 0x080c, 0xa896, 0x080c, 0x93a5, 0x0076, 0x903e,
+	0x080c, 0x9277, 0x2c08, 0x080c, 0xdfeb, 0x007e, 0x080c, 0xa8b2,
+	0x001e, 0xd184, 0x0128, 0x080c, 0xabed, 0x9085, 0x0001, 0x0070,
+	0x080c, 0x56e2, 0x0128, 0xd18c, 0x1170, 0x080c, 0xc969, 0x0148,
+	0x2009, 0x004c, 0x080c, 0xac8c, 0x9085, 0x0001, 0x012e, 0x00ce,
+	0x0005, 0x9006, 0x0cd8, 0x2900, 0x6016, 0x0c90, 0x2009, 0x004d,
+	0x0010, 0x2009, 0x004e, 0x00f6, 0x00c6, 0x0046, 0x0016, 0x080c,
+	0xab97, 0x2c78, 0x0590, 0x7e5e, 0x2b00, 0x7812, 0x7823, 0x0003,
+	0x2021, 0x0005, 0x080c, 0xc97b, 0x9186, 0x004d, 0x0118, 0x9186,
+	0x004e, 0x0148, 0x2001, 0x1980, 0x200c, 0xd1fc, 0x0168, 0x2f60,
+	0x080c, 0xabed, 0x00d0, 0x2001, 0x197f, 0x200c, 0xd1fc, 0x0120,
+	0x2f60, 0x080c, 0xabed, 0x0088, 0x2f60, 0x080c, 0x56e2, 0x0138,
+	0xd18c, 0x1118, 0x04f1, 0x0148, 0x0010, 0x2900, 0x7816, 0x001e,
+	0x0016, 0x080c, 0xac8c, 0x9085, 0x0001, 0x001e, 0x004e, 0x00ce,
+	0x00fe, 0x0005, 0x00f6, 0x00c6, 0x0046, 0x080c, 0xab97, 0x2c78,
+	0x0508, 0x7e5e, 0x2b00, 0x7812, 0x7823, 0x0003, 0x0096, 0x2021,
+	0x0004, 0x0489, 0x009e, 0x2001, 0x197e, 0x200c, 0xd1fc, 0x0120,
+	0x2f60, 0x080c, 0xabed, 0x0060, 0x2f60, 0x080c, 0x56e2, 0x0120,
+	0xd18c, 0x1160, 0x0071, 0x0130, 0x2009, 0x0052, 0x080c, 0xac8c,
+	0x9085, 0x0001, 0x004e, 0x00ce, 0x00fe, 0x0005, 0x2900, 0x7816,
+	0x0c98, 0x00c6, 0x080c, 0x4aa7, 0x00ce, 0x1120, 0x080c, 0xabed,
+	0x9006, 0x0005, 0xa867, 0x0000, 0xa86b, 0x8000, 0x2900, 0x6016,
+	0x9085, 0x0001, 0x0005, 0x0096, 0x0076, 0x0126, 0x2091, 0x8000,
+	0x080c, 0xa896, 0x080c, 0x6804, 0x0158, 0x2001, 0xc982, 0x0006,
+	0x900e, 0x2400, 0x080c, 0x6fc0, 0x080c, 0x6d80, 0x000e, 0x0807,
+	0x2418, 0x080c, 0x95a4, 0xbaa0, 0x0086, 0x2041, 0x0001, 0x2039,
+	0x0001, 0x2608, 0x080c, 0x93bf, 0x008e, 0x080c, 0x9277, 0x2f08,
+	0x2648, 0x080c, 0xdfeb, 0xb93c, 0x81ff, 0x090c, 0x9496, 0x080c,
+	0xa8b2, 0x012e, 0x007e, 0x009e, 0x0005, 0x00c6, 0x0126, 0x2091,
+	0x8000, 0x080c, 0xab97, 0x0190, 0x660a, 0x2b08, 0x6112, 0x080c,
+	0xcccc, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x001f, 0x080c,
+	0xac8c, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8,
+	0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0xac5f, 0x01b8, 0x660a,
+	0x2b08, 0x6112, 0x080c, 0xcccc, 0x6023, 0x0008, 0x2900, 0x6016,
+	0x00f6, 0x2c78, 0x080c, 0x1731, 0x00fe, 0x2009, 0x0021, 0x080c,
+	0xac8c, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8,
+	0x2009, 0x003d, 0x00c6, 0x0126, 0x0016, 0x2091, 0x8000, 0x080c,
+	0xab97, 0x0198, 0x660a, 0x2b08, 0x6112, 0x080c, 0xcccc, 0x6023,
+	0x0001, 0x2900, 0x6016, 0x001e, 0x0016, 0x080c, 0xac8c, 0x9085,
+	0x0001, 0x001e, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd0, 0x00c6,
+	0x0126, 0x2091, 0x8000, 0x080c, 0xac5f, 0x0188, 0x2b08, 0x6112,
+	0x080c, 0xcccc, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x0000,
+	0x080c, 0xac8c, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006,
+	0x0cd8, 0x2009, 0x0044, 0x0830, 0x2009, 0x0049, 0x0818, 0x0026,
+	0x00b6, 0x6210, 0x2258, 0xba3c, 0x82ff, 0x0118, 0x8211, 0xba3e,
+	0x1140, 0xb8d0, 0x9005, 0x0128, 0xb888, 0x9005, 0x1110, 0xb88b,
+	0x0001, 0x00be, 0x002e, 0x0005, 0x0006, 0x0016, 0x6004, 0x908e,
+	0x0002, 0x0140, 0x908e, 0x0003, 0x0128, 0x908e, 0x0004, 0x0110,
+	0x9085, 0x0001, 0x001e, 0x000e, 0x0005, 0x0006, 0x0096, 0x6020,
+	0x9086, 0x0004, 0x0190, 0x6014, 0x904d, 0x080c, 0xc838, 0x0168,
+	0xa864, 0x9086, 0x0139, 0x0158, 0x6020, 0x9086, 0x0003, 0x0128,
+	0xa868, 0xd0fc, 0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x009e,
+	0x000e, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0xac5f,
+	0x0198, 0x2b08, 0x6112, 0x080c, 0xcccc, 0x6023, 0x0001, 0x2900,
+	0x6016, 0x080c, 0x31e7, 0x2009, 0x0028, 0x080c, 0xac8c, 0x9085,
+	0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x9186, 0x0015,
+	0x11a8, 0x2011, 0x1824, 0x2204, 0x9086, 0x0074, 0x1178, 0x00b6,
+	0x080c, 0xb807, 0x00be, 0x080c, 0xba2a, 0x6003, 0x0001, 0x6007,
+	0x0029, 0x080c, 0x9225, 0x080c, 0x96a0, 0x0078, 0x6014, 0x0096,
+	0x2048, 0xa868, 0x009e, 0xd0fc, 0x0148, 0x2001, 0x0001, 0x080c,
+	0xce8b, 0x080c, 0xb5b5, 0x080c, 0xabed, 0x0005, 0x0096, 0x6014,
+	0x904d, 0x090c, 0x0d7d, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897,
+	0x4005, 0xa89b, 0x0004, 0xa867, 0x0139, 0x0126, 0x2091, 0x8000,
+	0x080c, 0x6d80, 0x012e, 0x009e, 0x080c, 0xabed, 0x0c30, 0x0096,
+	0x9186, 0x0016, 0x1128, 0x2001, 0x0004, 0x080c, 0x6575, 0x00e8,
+	0x9186, 0x0015, 0x1510, 0x2011, 0x1824, 0x2204, 0x9086, 0x0014,
+	0x11e0, 0x6010, 0x00b6, 0x2058, 0x080c, 0x66c0, 0x00be, 0x080c,
+	0xbafb, 0x1198, 0x6010, 0x00b6, 0x2058, 0xb890, 0x00be, 0x9005,
+	0x0160, 0x2001, 0x0006, 0x080c, 0x6575, 0x6014, 0x2048, 0xa868,
+	0xd0fc, 0x0170, 0x080c, 0xaffd, 0x0048, 0x6014, 0x2048, 0xa868,
+	0xd0fc, 0x0528, 0x080c, 0xb5b5, 0x080c, 0xabed, 0x009e, 0x0005,
+	0x6014, 0x6310, 0x2358, 0x904d, 0x090c, 0x0d7d, 0xa87b, 0x0000,
+	0xa883, 0x0000, 0xa897, 0x4000, 0x900e, 0x080c, 0x6914, 0x1108,
+	0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0xa99a, 0x0126, 0x2091,
+	0x8000, 0x080c, 0x6d80, 0x012e, 0x080c, 0xabed, 0x08f8, 0x6014,
+	0x904d, 0x090c, 0x0d7d, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897,
+	0x4005, 0xa89b, 0x0004, 0xa867, 0x0139, 0x0126, 0x2091, 0x8000,
+	0x080c, 0x6d80, 0x012e, 0x080c, 0xabed, 0x0840, 0xa878, 0x9086,
+	0x0005, 0x1108, 0x0009, 0x0005, 0xa880, 0xc0ad, 0xa882, 0x0005,
+	0x604b, 0x0000, 0x6017, 0x0000, 0x6003, 0x0001, 0x6007, 0x0050,
+	0x2009, 0x8023, 0x080c, 0x921e, 0x0005, 0x00c6, 0x6010, 0x00b6,
+	0x2058, 0xb800, 0x00be, 0xd0bc, 0x0130, 0x0066, 0x6020, 0x9084,
+	0x000f, 0x001b, 0x006e, 0x00ce, 0x0005, 0xc556, 0xcb6f, 0xcb6f,
+	0xcb72, 0xe318, 0xe333, 0xe336, 0xc556, 0xc556, 0xc556, 0xc556,
+	0xc556, 0xc556, 0xc556, 0xc556, 0xc556, 0x080c, 0x0d7d, 0xa001,
+	0xa001, 0x0005, 0x0096, 0x6014, 0x904d, 0x0118, 0xa87c, 0xd0e4,
+	0x1110, 0x009e, 0x0010, 0x009e, 0x0005, 0x6010, 0x00b6, 0x2058,
+	0xb800, 0x00be, 0xd0bc, 0x0550, 0x2001, 0x1834, 0x2004, 0x9005,
+	0x1540, 0x00f6, 0x2c78, 0x080c, 0xab97, 0x0508, 0x7810, 0x6012,
+	0x080c, 0xcccc, 0x7820, 0x9086, 0x0003, 0x0128, 0x7808, 0x603a,
+	0x2f00, 0x603e, 0x0020, 0x7808, 0x603e, 0x2f00, 0x603a, 0x602e,
+	0x6023, 0x0001, 0x6007, 0x0035, 0x6003, 0x0001, 0x795c, 0x615e,
+	0x2009, 0x8020, 0x080c, 0x921e, 0x2f60, 0x00fe, 0x0005, 0x2f60,
+	0x00fe, 0x2001, 0x1988, 0x2004, 0x604a, 0x0005, 0x0016, 0x0096,
+	0x6814, 0x2048, 0x681c, 0xd0fc, 0xc0fc, 0x681e, 0xa87c, 0x1108,
+	0xd0e4, 0x0180, 0xc0e4, 0xa87e, 0xa877, 0x0000, 0xa893, 0x0000,
+	0xa88f, 0x0000, 0xd0cc, 0x0130, 0xc0cc, 0xa87e, 0xa878, 0x2048,
+	0x080c, 0x0fec, 0x6830, 0x6036, 0x908e, 0x0001, 0x0148, 0x6803,
+	0x0002, 0x9086, 0x0005, 0x0170, 0x9006, 0x602e, 0x6032, 0x00d0,
+	0x681c, 0xc085, 0x681e, 0x6803, 0x0004, 0x6824, 0xc0f4, 0x9085,
+	0x0c00, 0x6826, 0x6814, 0x2048, 0xa8ac, 0x6938, 0x9102, 0xa8b0,
+	0x693c, 0x9103, 0x1e48, 0x683c, 0x602e, 0x6838, 0x9084, 0xfffc,
+	0x683a, 0x6032, 0x2d00, 0x603a, 0x6808, 0x603e, 0x6910, 0x6112,
+	0x695c, 0x615e, 0x6023, 0x0001, 0x6007, 0x0039, 0x6003, 0x0001,
+	0x2009, 0x8020, 0x080c, 0x921e, 0x009e, 0x001e, 0x0005, 0x6024,
+	0xd0d4, 0x0510, 0xd0f4, 0x11f8, 0x6038, 0x940a, 0x603c, 0x9303,
+	0x0230, 0x9105, 0x0120, 0x6024, 0xc0d4, 0xc0f5, 0x0098, 0x643a,
+	0x633e, 0xac3e, 0xab42, 0x0046, 0x0036, 0x2400, 0xacac, 0x9402,
+	0xa836, 0x2300, 0xabb0, 0x9303, 0xa83a, 0x003e, 0x004e, 0x6024,
+	0xc0d4, 0x0000, 0x6026, 0x0005, 0xd0f4, 0x1138, 0xa83c, 0x603a,
+	0xa840, 0x603e, 0x6024, 0xc0f5, 0x6026, 0x0005, 0x0006, 0x0016,
+	0x6004, 0x908e, 0x0034, 0x01b8, 0x908e, 0x0035, 0x01a0, 0x908e,
+	0x0036, 0x0188, 0x908e, 0x0037, 0x0170, 0x908e, 0x0038, 0x0158,
+	0x908e, 0x0039, 0x0140, 0x908e, 0x003a, 0x0128, 0x908e, 0x003b,
+	0x0110, 0x9085, 0x0001, 0x001e, 0x000e, 0x0005, 0x0006, 0x0016,
+	0x0026, 0x0036, 0x00e6, 0x2001, 0x1982, 0x200c, 0x8000, 0x2014,
+	0x2001, 0x0032, 0x080c, 0x9166, 0x2001, 0x1986, 0x82ff, 0x1110,
+	0x2011, 0x0014, 0x2202, 0x2001, 0x1984, 0x200c, 0x8000, 0x2014,
+	0x2071, 0x196c, 0x711a, 0x721e, 0x2001, 0x0064, 0x080c, 0x9166,
+	0x2001, 0x1987, 0x82ff, 0x1110, 0x2011, 0x0014, 0x2202, 0x2001,
+	0x1988, 0x9288, 0x000a, 0x2102, 0x2001, 0x0017, 0x080c, 0xa887,
+	0x2001, 0x1a89, 0x2102, 0x2001, 0x0032, 0x080c, 0x1679, 0x080c,
+	0x6a4c, 0x00ee, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x0006,
+	0x0016, 0x00e6, 0x2001, 0x1986, 0x2003, 0x0028, 0x2001, 0x1987,
+	0x2003, 0x0014, 0x2071, 0x196c, 0x701b, 0x0000, 0x701f, 0x07d0,
+	0x2001, 0x1988, 0x2009, 0x001e, 0x2102, 0x2001, 0x0017, 0x080c,
+	0xa887, 0x2001, 0x1a89, 0x2102, 0x2001, 0x0032, 0x080c, 0x1679,
+	0x00ee, 0x001e, 0x000e, 0x0005, 0x0096, 0x6060, 0x904d, 0x0110,
+	0x080c, 0x106c, 0x009e, 0x0005, 0x0005, 0x00c6, 0x0126, 0x2091,
+	0x8000, 0x080c, 0xab97, 0x0180, 0x2b08, 0x6112, 0x0ca9, 0x6023,
+	0x0001, 0x2900, 0x6016, 0x2009, 0x0033, 0x080c, 0xac8c, 0x9085,
+	0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x0096, 0x00e6,
+	0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, 0x1500, 0x7090, 0x9086,
+	0x0018, 0x11e0, 0x6014, 0x2048, 0xaa3c, 0xd2e4, 0x1160, 0x2c78,
+	0x080c, 0x975f, 0x01d8, 0x707c, 0xaa50, 0x9206, 0x1160, 0x7080,
+	0xaa54, 0x9206, 0x1140, 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be,
+	0x900e, 0x080c, 0x323c, 0x080c, 0xaffd, 0x0020, 0x080c, 0xb5b5,
+	0x080c, 0xabed, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x7060, 0xaa54,
+	0x9206, 0x0d48, 0x0c80, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c,
+	0xab97, 0x0188, 0x2b08, 0x6112, 0x080c, 0xcccc, 0x6023, 0x0001,
+	0x2900, 0x6016, 0x2009, 0x004d, 0x080c, 0xac8c, 0x9085, 0x0001,
 	0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091,
-	0x8000, 0xbaa0, 0x080c, 0xac3b, 0x0580, 0x605f, 0x0000, 0x2b00,
-	0x6012, 0x080c, 0xcca8, 0x6023, 0x0003, 0x0016, 0x080c, 0xa872,
-	0x080c, 0x9374, 0x0076, 0x903e, 0x080c, 0x9246, 0x2c08, 0x080c,
-	0xdfc0, 0x007e, 0x080c, 0xa88e, 0x001e, 0xd184, 0x0128, 0x080c,
-	0xabc9, 0x9085, 0x0001, 0x0070, 0x080c, 0x56db, 0x0128, 0xd18c,
-	0x1170, 0x080c, 0xc945, 0x0148, 0x2009, 0x004c, 0x080c, 0xac68,
-	0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2900,
-	0x6016, 0x0c90, 0x2009, 0x004d, 0x0010, 0x2009, 0x004e, 0x00f6,
-	0x00c6, 0x0046, 0x0016, 0x080c, 0xab73, 0x2c78, 0x0590, 0x7e5e,
-	0x2b00, 0x7812, 0x7823, 0x0003, 0x2021, 0x0005, 0x080c, 0xc957,
-	0x9186, 0x004d, 0x0118, 0x9186, 0x004e, 0x0148, 0x2001, 0x1980,
-	0x200c, 0xd1fc, 0x0168, 0x2f60, 0x080c, 0xabc9, 0x00d0, 0x2001,
-	0x197f, 0x200c, 0xd1fc, 0x0120, 0x2f60, 0x080c, 0xabc9, 0x0088,
-	0x2f60, 0x080c, 0x56db, 0x0138, 0xd18c, 0x1118, 0x04f1, 0x0148,
-	0x0010, 0x2900, 0x7816, 0x001e, 0x0016, 0x080c, 0xac68, 0x9085,
-	0x0001, 0x001e, 0x004e, 0x00ce, 0x00fe, 0x0005, 0x00f6, 0x00c6,
-	0x0046, 0x080c, 0xab73, 0x2c78, 0x0508, 0x7e5e, 0x2b00, 0x7812,
-	0x7823, 0x0003, 0x0096, 0x2021, 0x0004, 0x0489, 0x009e, 0x2001,
-	0x197e, 0x200c, 0xd1fc, 0x0120, 0x2f60, 0x080c, 0xabc9, 0x0060,
-	0x2f60, 0x080c, 0x56db, 0x0120, 0xd18c, 0x1160, 0x0071, 0x0130,
-	0x2009, 0x0052, 0x080c, 0xac68, 0x9085, 0x0001, 0x004e, 0x00ce,
-	0x00fe, 0x0005, 0x2900, 0x7816, 0x0c98, 0x00c6, 0x080c, 0x4aa0,
-	0x00ce, 0x1120, 0x080c, 0xabc9, 0x9006, 0x0005, 0xa867, 0x0000,
-	0xa86b, 0x8000, 0x2900, 0x6016, 0x9085, 0x0001, 0x0005, 0x0096,
-	0x0076, 0x0126, 0x2091, 0x8000, 0x080c, 0xa872, 0x080c, 0x67fd,
-	0x0158, 0x2001, 0xc95e, 0x0006, 0x900e, 0x2400, 0x080c, 0x6fb0,
-	0x080c, 0x6d70, 0x000e, 0x0807, 0x2418, 0x080c, 0x9573, 0xbaa0,
-	0x0086, 0x2041, 0x0001, 0x2039, 0x0001, 0x2608, 0x080c, 0x938e,
-	0x008e, 0x080c, 0x9246, 0x2f08, 0x2648, 0x080c, 0xdfc0, 0xb93c,
-	0x81ff, 0x090c, 0x9465, 0x080c, 0xa88e, 0x012e, 0x007e, 0x009e,
-	0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0xab73, 0x0190,
-	0x660a, 0x2b08, 0x6112, 0x080c, 0xcca8, 0x6023, 0x0001, 0x2900,
-	0x6016, 0x2009, 0x001f, 0x080c, 0xac68, 0x9085, 0x0001, 0x012e,
-	0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000,
-	0x080c, 0xac3b, 0x01b8, 0x660a, 0x2b08, 0x6112, 0x080c, 0xcca8,
-	0x6023, 0x0008, 0x2900, 0x6016, 0x00f6, 0x2c78, 0x080c, 0x1731,
-	0x00fe, 0x2009, 0x0021, 0x080c, 0xac68, 0x9085, 0x0001, 0x012e,
-	0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2009, 0x003d, 0x00c6, 0x0126,
-	0x0016, 0x2091, 0x8000, 0x080c, 0xab73, 0x0198, 0x660a, 0x2b08,
-	0x6112, 0x080c, 0xcca8, 0x6023, 0x0001, 0x2900, 0x6016, 0x001e,
-	0x0016, 0x080c, 0xac68, 0x9085, 0x0001, 0x001e, 0x012e, 0x00ce,
-	0x0005, 0x9006, 0x0cd0, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c,
-	0xac3b, 0x0188, 0x2b08, 0x6112, 0x080c, 0xcca8, 0x6023, 0x0001,
-	0x2900, 0x6016, 0x2009, 0x0000, 0x080c, 0xac68, 0x9085, 0x0001,
-	0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2009, 0x0044, 0x0830,
-	0x2009, 0x0049, 0x0818, 0x0026, 0x00b6, 0x6210, 0x2258, 0xba3c,
-	0x82ff, 0x0118, 0x8211, 0xba3e, 0x1140, 0xb8d0, 0x9005, 0x0128,
-	0xb888, 0x9005, 0x1110, 0xb88b, 0x0001, 0x00be, 0x002e, 0x0005,
-	0x0006, 0x0016, 0x6004, 0x908e, 0x0002, 0x0140, 0x908e, 0x0003,
-	0x0128, 0x908e, 0x0004, 0x0110, 0x9085, 0x0001, 0x001e, 0x000e,
-	0x0005, 0x0006, 0x0096, 0x6020, 0x9086, 0x0004, 0x0190, 0x6014,
-	0x904d, 0x080c, 0xc814, 0x0168, 0xa864, 0x9086, 0x0139, 0x0158,
-	0x6020, 0x9086, 0x0003, 0x0128, 0xa868, 0xd0fc, 0x0110, 0x9006,
-	0x0010, 0x9085, 0x0001, 0x009e, 0x000e, 0x0005, 0x00c6, 0x0126,
-	0x2091, 0x8000, 0x080c, 0xac3b, 0x0198, 0x2b08, 0x6112, 0x080c,
-	0xcca8, 0x6023, 0x0001, 0x2900, 0x6016, 0x080c, 0x31e4, 0x2009,
-	0x0028, 0x080c, 0xac68, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005,
-	0x9006, 0x0cd8, 0x9186, 0x0015, 0x11a8, 0x2011, 0x1824, 0x2204,
-	0x9086, 0x0074, 0x1178, 0x00b6, 0x080c, 0xb7e3, 0x00be, 0x080c,
-	0xba06, 0x6003, 0x0001, 0x6007, 0x0029, 0x080c, 0x91f4, 0x080c,
-	0x966f, 0x0078, 0x6014, 0x0096, 0x2048, 0xa868, 0x009e, 0xd0fc,
-	0x0148, 0x2001, 0x0001, 0x080c, 0xce67, 0x080c, 0xb591, 0x080c,
-	0xabc9, 0x0005, 0x0096, 0x6014, 0x904d, 0x090c, 0x0d7d, 0xa87b,
-	0x0030, 0xa883, 0x0000, 0xa897, 0x4005, 0xa89b, 0x0004, 0xa867,
-	0x0139, 0x0126, 0x2091, 0x8000, 0x080c, 0x6d70, 0x012e, 0x009e,
-	0x080c, 0xabc9, 0x0c30, 0x0096, 0x9186, 0x0016, 0x1128, 0x2001,
-	0x0004, 0x080c, 0x656e, 0x00e8, 0x9186, 0x0015, 0x1510, 0x2011,
-	0x1824, 0x2204, 0x9086, 0x0014, 0x11e0, 0x6010, 0x00b6, 0x2058,
-	0x080c, 0x66b9, 0x00be, 0x080c, 0xbad7, 0x1198, 0x6010, 0x00b6,
-	0x2058, 0xb890, 0x00be, 0x9005, 0x0160, 0x2001, 0x0006, 0x080c,
-	0x656e, 0x6014, 0x2048, 0xa868, 0xd0fc, 0x0170, 0x080c, 0xafd9,
-	0x0048, 0x6014, 0x2048, 0xa868, 0xd0fc, 0x0528, 0x080c, 0xb591,
-	0x080c, 0xabc9, 0x009e, 0x0005, 0x6014, 0x6310, 0x2358, 0x904d,
-	0x090c, 0x0d7d, 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000,
-	0x900e, 0x080c, 0x690d, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108,
-	0xc18d, 0xa99a, 0x0126, 0x2091, 0x8000, 0x080c, 0x6d70, 0x012e,
-	0x080c, 0xabc9, 0x08f8, 0x6014, 0x904d, 0x090c, 0x0d7d, 0xa87b,
-	0x0030, 0xa883, 0x0000, 0xa897, 0x4005, 0xa89b, 0x0004, 0xa867,
-	0x0139, 0x0126, 0x2091, 0x8000, 0x080c, 0x6d70, 0x012e, 0x080c,
-	0xabc9, 0x0840, 0xa878, 0x9086, 0x0005, 0x1108, 0x0009, 0x0005,
-	0xa880, 0xc0ad, 0xa882, 0x0005, 0x604b, 0x0000, 0x6017, 0x0000,
-	0x6003, 0x0001, 0x6007, 0x0050, 0x2009, 0x8023, 0x080c, 0x91ed,
-	0x0005, 0x00c6, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc,
-	0x0130, 0x0066, 0x6020, 0x9084, 0x000f, 0x001b, 0x006e, 0x00ce,
-	0x0005, 0xc532, 0xcb4b, 0xcb4b, 0xcb4e, 0xe2ed, 0xe308, 0xe30b,
-	0xc532, 0xc532, 0xc532, 0xc532, 0xc532, 0xc532, 0xc532, 0xc532,
-	0xc532, 0x080c, 0x0d7d, 0xa001, 0xa001, 0x0005, 0x0096, 0x6014,
-	0x904d, 0x0118, 0xa87c, 0xd0e4, 0x1110, 0x009e, 0x0010, 0x009e,
-	0x0005, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0550,
-	0x2001, 0x1834, 0x2004, 0x9005, 0x1540, 0x00f6, 0x2c78, 0x080c,
-	0xab73, 0x0508, 0x7810, 0x6012, 0x080c, 0xcca8, 0x7820, 0x9086,
-	0x0003, 0x0128, 0x7808, 0x603a, 0x2f00, 0x603e, 0x0020, 0x7808,
-	0x603e, 0x2f00, 0x603a, 0x602e, 0x6023, 0x0001, 0x6007, 0x0035,
-	0x6003, 0x0001, 0x795c, 0x615e, 0x2009, 0x8020, 0x080c, 0x91ed,
-	0x2f60, 0x00fe, 0x0005, 0x2f60, 0x00fe, 0x2001, 0x1988, 0x2004,
-	0x604a, 0x0005, 0x0016, 0x0096, 0x6814, 0x2048, 0x681c, 0xd0fc,
-	0xc0fc, 0x681e, 0xa87c, 0x1108, 0xd0e4, 0x0180, 0xc0e4, 0xa87e,
-	0xa877, 0x0000, 0xa893, 0x0000, 0xa88f, 0x0000, 0xd0cc, 0x0130,
-	0xc0cc, 0xa87e, 0xa878, 0x2048, 0x080c, 0x0fec, 0x6830, 0x6036,
-	0x908e, 0x0001, 0x0148, 0x6803, 0x0002, 0x9086, 0x0005, 0x0170,
-	0x9006, 0x602e, 0x6032, 0x00d0, 0x681c, 0xc085, 0x681e, 0x6803,
-	0x0004, 0x6824, 0xc0f4, 0x9085, 0x0c00, 0x6826, 0x6814, 0x2048,
-	0xa8ac, 0x6938, 0x9102, 0xa8b0, 0x693c, 0x9103, 0x1e48, 0x683c,
-	0x602e, 0x6838, 0x9084, 0xfffc, 0x683a, 0x6032, 0x2d00, 0x603a,
-	0x6808, 0x603e, 0x6910, 0x6112, 0x695c, 0x615e, 0x6023, 0x0001,
-	0x6007, 0x0039, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x91ed,
-	0x009e, 0x001e, 0x0005, 0x6024, 0xd0d4, 0x0510, 0xd0f4, 0x11f8,
-	0x6038, 0x940a, 0x603c, 0x9303, 0x0230, 0x9105, 0x0120, 0x6024,
-	0xc0d4, 0xc0f5, 0x0098, 0x643a, 0x633e, 0xac3e, 0xab42, 0x0046,
-	0x0036, 0x2400, 0xacac, 0x9402, 0xa836, 0x2300, 0xabb0, 0x9303,
-	0xa83a, 0x003e, 0x004e, 0x6024, 0xc0d4, 0x0000, 0x6026, 0x0005,
-	0xd0f4, 0x1138, 0xa83c, 0x603a, 0xa840, 0x603e, 0x6024, 0xc0f5,
-	0x6026, 0x0005, 0x0006, 0x0016, 0x6004, 0x908e, 0x0034, 0x01b8,
-	0x908e, 0x0035, 0x01a0, 0x908e, 0x0036, 0x0188, 0x908e, 0x0037,
-	0x0170, 0x908e, 0x0038, 0x0158, 0x908e, 0x0039, 0x0140, 0x908e,
-	0x003a, 0x0128, 0x908e, 0x003b, 0x0110, 0x9085, 0x0001, 0x001e,
-	0x000e, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00e6, 0x2001,
-	0x1982, 0x200c, 0x8000, 0x2014, 0x2001, 0x0032, 0x080c, 0x9135,
-	0x2001, 0x1986, 0x82ff, 0x1110, 0x2011, 0x0014, 0x2202, 0x2001,
-	0x1984, 0x200c, 0x8000, 0x2014, 0x2071, 0x196c, 0x711a, 0x721e,
-	0x2001, 0x0064, 0x080c, 0x9135, 0x2001, 0x1987, 0x82ff, 0x1110,
-	0x2011, 0x0014, 0x2202, 0x2001, 0x1988, 0x9288, 0x000a, 0x2102,
-	0x2001, 0x0017, 0x080c, 0xa863, 0x2001, 0x1a89, 0x2102, 0x2001,
-	0x0032, 0x080c, 0x1679, 0x080c, 0x6a3c, 0x00ee, 0x003e, 0x002e,
-	0x001e, 0x000e, 0x0005, 0x0006, 0x0016, 0x00e6, 0x2001, 0x1986,
-	0x2003, 0x0028, 0x2001, 0x1987, 0x2003, 0x0014, 0x2071, 0x196c,
-	0x701b, 0x0000, 0x701f, 0x07d0, 0x2001, 0x1988, 0x2009, 0x001e,
-	0x2102, 0x2001, 0x0017, 0x080c, 0xa863, 0x2001, 0x1a89, 0x2102,
-	0x2001, 0x0032, 0x080c, 0x1679, 0x00ee, 0x001e, 0x000e, 0x0005,
-	0x0096, 0x6060, 0x904d, 0x0110, 0x080c, 0x106c, 0x009e, 0x0005,
-	0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0xab73, 0x0180,
-	0x2b08, 0x6112, 0x0ca9, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009,
-	0x0033, 0x080c, 0xac68, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005,
-	0x9006, 0x0cd8, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186,
-	0x0015, 0x1500, 0x7090, 0x9086, 0x0018, 0x11e0, 0x6014, 0x2048,
-	0xaa3c, 0xd2e4, 0x1160, 0x2c78, 0x080c, 0x972e, 0x01d8, 0x707c,
-	0xaa50, 0x9206, 0x1160, 0x7080, 0xaa54, 0x9206, 0x1140, 0x6210,
-	0x00b6, 0x2258, 0xbaa0, 0x00be, 0x900e, 0x080c, 0x3235, 0x080c,
-	0xafd9, 0x0020, 0x080c, 0xb591, 0x080c, 0xabc9, 0x00fe, 0x00ee,
-	0x009e, 0x0005, 0x7060, 0xaa54, 0x9206, 0x0d48, 0x0c80, 0x00c6,
-	0x0126, 0x2091, 0x8000, 0x080c, 0xab73, 0x0188, 0x2b08, 0x6112,
-	0x080c, 0xcca8, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x004d,
-	0x080c, 0xac68, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006,
-	0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x0016, 0x080c, 0xab73,
-	0x0180, 0x2b08, 0x6112, 0x080c, 0xcca8, 0x6023, 0x0001, 0x2900,
-	0x6016, 0x001e, 0x080c, 0xac68, 0x9085, 0x0001, 0x012e, 0x00ce,
-	0x0005, 0x001e, 0x9006, 0x0cd0, 0x0016, 0x0026, 0x0036, 0x0046,
-	0x0056, 0x0066, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186,
-	0x0015, 0x1568, 0x7190, 0x6014, 0x2048, 0xa814, 0x8003, 0x9106,
-	0x1530, 0x20e1, 0x0000, 0x2001, 0x19a0, 0x2003, 0x0000, 0x6014,
-	0x2048, 0xa830, 0x20a8, 0x8906, 0x8006, 0x8007, 0x9094, 0x003f,
-	0x22e8, 0x9084, 0xffc0, 0x9080, 0x001b, 0x20a0, 0x2001, 0x19a0,
-	0x0016, 0x200c, 0x080c, 0xd540, 0x001e, 0xa804, 0x9005, 0x0110,
-	0x2048, 0x0c38, 0x6014, 0x2048, 0xa867, 0x0103, 0x0010, 0x080c,
-	0xb591, 0x080c, 0xabc9, 0x00fe, 0x00ee, 0x009e, 0x006e, 0x005e,
-	0x004e, 0x003e, 0x002e, 0x001e, 0x0005, 0x0096, 0x00e6, 0x00f6,
-	0x2071, 0x1800, 0x9186, 0x0015, 0x11b8, 0x7090, 0x9086, 0x0004,
-	0x1198, 0x6014, 0x2048, 0x2c78, 0x080c, 0x972e, 0x01a8, 0x707c,
-	0xaa74, 0x9206, 0x1130, 0x7080, 0xaa78, 0x9206, 0x1110, 0x080c,
-	0x31e4, 0x080c, 0xafd9, 0x0020, 0x080c, 0xb591, 0x080c, 0xabc9,
-	0x00fe, 0x00ee, 0x009e, 0x0005, 0x7060, 0xaa78, 0x9206, 0x0d78,
-	0x0c80, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015,
-	0x1550, 0x7090, 0x9086, 0x0004, 0x1530, 0x6014, 0x2048, 0x2c78,
-	0x080c, 0x972e, 0x05f0, 0x707c, 0xaacc, 0x9206, 0x1180, 0x7080,
-	0xaad0, 0x9206, 0x1160, 0x080c, 0x31e4, 0x0016, 0xa998, 0xaab0,
-	0x9284, 0x1000, 0xc0fd, 0x080c, 0x568b, 0x001e, 0x0010, 0x080c,
-	0x5474, 0x080c, 0xc814, 0x0508, 0xa87b, 0x0000, 0xa883, 0x0000,
-	0xa897, 0x4000, 0x0080, 0x080c, 0xc814, 0x01b8, 0x6014, 0x2048,
-	0x080c, 0x5474, 0x1d70, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897,
-	0x4005, 0xa89b, 0x0004, 0x0126, 0x2091, 0x8000, 0xa867, 0x0139,
-	0x080c, 0x6d70, 0x012e, 0x080c, 0xabc9, 0x00fe, 0x00ee, 0x009e,
-	0x0005, 0x7060, 0xaad0, 0x9206, 0x0930, 0x0888, 0x0016, 0x0026,
-	0xa87c, 0xd0ac, 0x0178, 0xa938, 0xaa34, 0x2100, 0x9205, 0x0150,
-	0xa890, 0x9106, 0x1118, 0xa88c, 0x9206, 0x0120, 0xa992, 0xaa8e,
-	0x9085, 0x0001, 0x002e, 0x001e, 0x0005, 0x00b6, 0x00d6, 0x0036,
-	0x080c, 0xc814, 0x0904, 0xce63, 0x0096, 0x6314, 0x2348, 0xa87a,
-	0xa982, 0x929e, 0x4000, 0x1580, 0x6310, 0x00c6, 0x2358, 0x2009,
-	0x0000, 0xa868, 0xd0f4, 0x1140, 0x080c, 0x690d, 0x1108, 0xc185,
-	0xb800, 0xd0bc, 0x0108, 0xc18d, 0xaa96, 0xa99a, 0x20a9, 0x0004,
-	0xa860, 0x20e8, 0xa85c, 0x9080, 0x0031, 0x20a0, 0xb8c4, 0x20e0,
-	0xb8c8, 0x9080, 0x0006, 0x2098, 0x080c, 0x0fb7, 0x20a9, 0x0004,
-	0xa85c, 0x9080, 0x0035, 0x20a0, 0xb8c8, 0x9080, 0x000a, 0x2098,
-	0x080c, 0x0fb7, 0x00ce, 0x0090, 0xaa96, 0x3918, 0x9398, 0x0007,
-	0x231c, 0x6004, 0x9086, 0x0016, 0x0110, 0xa89b, 0x0004, 0xaba2,
-	0x6310, 0x2358, 0xb804, 0x9084, 0x00ff, 0xa89e, 0x080c, 0x6d64,
-	0x6017, 0x0000, 0x009e, 0x003e, 0x00de, 0x00be, 0x0005, 0x0026,
-	0x0036, 0x0046, 0x00b6, 0x0096, 0x00f6, 0x6214, 0x2248, 0x6210,
-	0x2258, 0x2079, 0x0260, 0x9096, 0x0000, 0x11a0, 0xb814, 0x9084,
-	0x00ff, 0x900e, 0x080c, 0x25fb, 0x2118, 0x831f, 0x939c, 0xff00,
-	0x7838, 0x9084, 0x00ff, 0x931d, 0x7c3c, 0x2011, 0x8018, 0x080c,
-	0x4b00, 0x00a8, 0x9096, 0x0001, 0x1148, 0x89ff, 0x0180, 0xa89b,
-	0x000d, 0x7838, 0xa8a6, 0x783c, 0xa8aa, 0x0048, 0x9096, 0x0002,
-	0x1130, 0xa89b, 0x000d, 0x7838, 0xa8a6, 0x783c, 0xa8aa, 0x00fe,
-	0x009e, 0x00be, 0x004e, 0x003e, 0x002e, 0x0005, 0x00c6, 0x0026,
-	0x0016, 0x9186, 0x0035, 0x0110, 0x6a38, 0x0008, 0x6a2c, 0x080c,
-	0xc802, 0x01f0, 0x2260, 0x6120, 0x9186, 0x0003, 0x0118, 0x9186,
-	0x0006, 0x1190, 0x6838, 0x9206, 0x0140, 0x683c, 0x9206, 0x1160,
-	0x6108, 0x6838, 0x9106, 0x1140, 0x0020, 0x6008, 0x693c, 0x9106,
-	0x1118, 0x6010, 0x6910, 0x9106, 0x001e, 0x002e, 0x00ce, 0x0005,
-	0x9085, 0x0001, 0x0cc8, 0xa974, 0xd1cc, 0x0188, 0x918c, 0x00ff,
-	0x918e, 0x0002, 0x1160, 0xa9a8, 0x918c, 0x0f00, 0x810f, 0x918e,
-	0x0001, 0x1128, 0xa834, 0xa938, 0x9115, 0x190c, 0xbe8f, 0x0005,
-	0x0036, 0x2019, 0x0001, 0x0010, 0x0036, 0x901e, 0x0499, 0x01e0,
-	0x080c, 0xc814, 0x01c8, 0x080c, 0xca03, 0x6037, 0x4000, 0x6014,
-	0x6017, 0x0000, 0x0096, 0x2048, 0xa87c, 0x080c, 0xca29, 0x1118,
-	0x080c, 0xb591, 0x0040, 0xa867, 0x0103, 0xa877, 0x0000, 0x83ff,
-	0x1129, 0x080c, 0x6d70, 0x009e, 0x003e, 0x0005, 0xa880, 0xd0b4,
-	0x0128, 0xa87b, 0x0006, 0xc0ec, 0xa882, 0x0048, 0xd0bc, 0x0118,
-	0xa87b, 0x0002, 0x0020, 0xa87b, 0x0005, 0x080c, 0xcb18, 0xa877,
-	0x0000, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0ec, 0x0005, 0x0006,
-	0x2001, 0x1810, 0x2004, 0xd0f4, 0x000e, 0x0005, 0x0006, 0x2001,
-	0x1810, 0x2004, 0xd0e4, 0x000e, 0x0005, 0x0036, 0x0046, 0x6010,
-	0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, 0x0007, 0x080c, 0x4cb7,
-	0x004e, 0x003e, 0x0005, 0x0c51, 0x1d81, 0x0005, 0x2001, 0x1986,
-	0x2004, 0x601a, 0x0005, 0x2001, 0x1988, 0x2004, 0x604a, 0x0005,
-	0x080c, 0xabc9, 0x0804, 0x966f, 0x611c, 0xd1fc, 0xa97c, 0x1108,
-	0xd1e4, 0x0005, 0x601c, 0xd0fc, 0xa87c, 0x1108, 0xd0e4, 0x0005,
-	0x601c, 0xd0fc, 0xc0fc, 0x601e, 0xa87c, 0x1108, 0xd0e4, 0x0005,
-	0x6044, 0xd0fc, 0x0160, 0xd0dc, 0x1128, 0x908c, 0x000f, 0x9186,
-	0x0005, 0x1118, 0x6003, 0x0003, 0x0010, 0x6003, 0x0001, 0x0005,
-	0x00b6, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0d7d, 0x001b,
-	0x006e, 0x00be, 0x0005, 0xcf93, 0xd69b, 0xd7ec, 0xcf93, 0xcf93,
-	0xcf93, 0xcf93, 0xcf93, 0xcfca, 0xd86a, 0xcf93, 0xcf93, 0xcf93,
-	0xcf93, 0xcf93, 0xcf93, 0x080c, 0x0d7d, 0x0066, 0x6000, 0x90b2,
-	0x0016, 0x1a0c, 0x0d7d, 0x0013, 0x006e, 0x0005, 0xcfae, 0xdd81,
-	0xcfae, 0xcfae, 0xcfae, 0xcfae, 0xcfae, 0xcfae, 0xdd30, 0xddd3,
-	0xcfae, 0xe428, 0xe45c, 0xe428, 0xe45c, 0xcfae, 0x080c, 0x0d7d,
-	0x6000, 0x9082, 0x0016, 0x1a0c, 0x0d7d, 0x6000, 0x000a, 0x0005,
-	0xcfc8, 0xda46, 0xdb0f, 0xdb31, 0xdbac, 0xcfc8, 0xdca6, 0xdc34,
-	0xd874, 0xdd08, 0xdd1d, 0xcfc8, 0xcfc8, 0xcfc8, 0xcfc8, 0xcfc8,
-	0x080c, 0x0d7d, 0x91b2, 0x0053, 0x1a0c, 0x0d7d, 0x2100, 0x91b2,
-	0x0040, 0x1a04, 0xd411, 0x0002, 0xd014, 0xd202, 0xd014, 0xd014,
-	0xd014, 0xd20b, 0xd014, 0xd014, 0xd014, 0xd014, 0xd014, 0xd014,
-	0xd014, 0xd014, 0xd014, 0xd014, 0xd014, 0xd014, 0xd014, 0xd014,
-	0xd014, 0xd014, 0xd014, 0xd016, 0xd07d, 0xd08c, 0xd0f0, 0xd11b,
-	0xd194, 0xd1ed, 0xd014, 0xd014, 0xd20e, 0xd014, 0xd014, 0xd223,
-	0xd230, 0xd014, 0xd014, 0xd014, 0xd014, 0xd014, 0xd2b3, 0xd014,
-	0xd014, 0xd2c7, 0xd014, 0xd014, 0xd282, 0xd014, 0xd014, 0xd014,
-	0xd2df, 0xd014, 0xd014, 0xd014, 0xd35c, 0xd014, 0xd014, 0xd014,
-	0xd014, 0xd014, 0xd014, 0xd3d9, 0x080c, 0x0d7d, 0x080c, 0x6a19,
-	0x1150, 0x2001, 0x1837, 0x2004, 0xd0cc, 0x1128, 0x9084, 0x0009,
-	0x9086, 0x0008, 0x1140, 0x6007, 0x0009, 0x602f, 0x0009, 0x6017,
-	0x0000, 0x0804, 0xd1fb, 0x080c, 0x69be, 0x00e6, 0x00c6, 0x0036,
-	0x0026, 0x0016, 0x6210, 0x2258, 0xbaa0, 0x0026, 0x2019, 0x0029,
-	0x080c, 0xa872, 0x080c, 0x9374, 0x0076, 0x903e, 0x080c, 0x9246,
-	0x2c08, 0x080c, 0xdfc0, 0x007e, 0x001e, 0x080c, 0xa88e, 0x001e,
-	0x002e, 0x003e, 0x00ce, 0x00ee, 0x6610, 0x2658, 0x080c, 0x662d,
-	0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x1268, 0x0016, 0x0026,
-	0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be, 0x2c08, 0x080c, 0xe685,
-	0x002e, 0x001e, 0x1178, 0x080c, 0xdeee, 0x1904, 0xd0e8, 0x080c,
-	0xde8a, 0x1120, 0x6007, 0x0008, 0x0804, 0xd1fb, 0x6007, 0x0009,
-	0x0804, 0xd1fb, 0x080c, 0xe121, 0x0128, 0x080c, 0xdeee, 0x0d78,
-	0x0804, 0xd0e8, 0x6017, 0x1900, 0x0c88, 0x080c, 0x332b, 0x1904,
-	0xd40e, 0x6106, 0x080c, 0xde3d, 0x6007, 0x0006, 0x0804, 0xd1fb,
-	0x6007, 0x0007, 0x0804, 0xd1fb, 0x080c, 0xe498, 0x1904, 0xd40e,
-	0x080c, 0x332b, 0x1904, 0xd40e, 0x00d6, 0x6610, 0x2658, 0xbe04,
-	0x9684, 0x00ff, 0x9082, 0x0006, 0x1220, 0x2001, 0x0001, 0x080c,
-	0x655a, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0188, 0x9686,
-	0x0004, 0x0170, 0xbe04, 0x96b4, 0x00ff, 0x9686, 0x0006, 0x0140,
-	0x9686, 0x0004, 0x0128, 0x9686, 0x0005, 0x0110, 0x00de, 0x0480,
-	0x00e6, 0x2071, 0x0260, 0x7034, 0x9084, 0x0003, 0x1140, 0x7034,
-	0x9082, 0x0014, 0x0220, 0x7030, 0x9084, 0x0003, 0x0130, 0x00ee,
-	0x6017, 0x0000, 0x602f, 0x0007, 0x00b0, 0x00ee, 0x080c, 0xdf56,
-	0x1190, 0x9686, 0x0006, 0x1140, 0x0026, 0x6210, 0x2258, 0xbaa0,
-	0x900e, 0x080c, 0x3235, 0x002e, 0x080c, 0x66b9, 0x6007, 0x000a,
-	0x00de, 0x0804, 0xd1fb, 0x6007, 0x000b, 0x00de, 0x0804, 0xd1fb,
-	0x080c, 0x31e4, 0x080c, 0xcf43, 0x6007, 0x0001, 0x0804, 0xd1fb,
-	0x080c, 0xe498, 0x1904, 0xd40e, 0x080c, 0x332b, 0x1904, 0xd40e,
-	0x2071, 0x0260, 0x7034, 0x90b4, 0x0003, 0x1948, 0x90b2, 0x0014,
-	0x0a30, 0x7030, 0x9084, 0x0003, 0x1910, 0x6610, 0x2658, 0xbe04,
-	0x9686, 0x0707, 0x09e8, 0x0026, 0x6210, 0x2258, 0xbaa0, 0x900e,
-	0x080c, 0x3235, 0x002e, 0x6007, 0x000c, 0x2001, 0x0001, 0x080c,
-	0xe665, 0x0804, 0xd1fb, 0x080c, 0x6a19, 0x1140, 0x2001, 0x1837,
-	0x2004, 0x9084, 0x0009, 0x9086, 0x0008, 0x1110, 0x0804, 0xd023,
-	0x080c, 0x69be, 0x6610, 0x2658, 0xbe04, 0x9684, 0x00ff, 0x9082,
-	0x0006, 0x06c8, 0x1138, 0x0026, 0x2001, 0x0006, 0x080c, 0x659a,
-	0x002e, 0x0050, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0004, 0x0120,
-	0x9686, 0x0006, 0x1904, 0xd0e8, 0x080c, 0xdf63, 0x1120, 0x6007,
-	0x000e, 0x0804, 0xd1fb, 0x0046, 0x6410, 0x2458, 0xbca0, 0x0046,
-	0x080c, 0x31e4, 0x080c, 0xcf43, 0x004e, 0x0016, 0x9006, 0x2009,
-	0x1848, 0x210c, 0xd1a4, 0x0148, 0x2009, 0x0029, 0x080c, 0xe29e,
+	0x8000, 0x0016, 0x080c, 0xab97, 0x0180, 0x2b08, 0x6112, 0x080c,
+	0xcccc, 0x6023, 0x0001, 0x2900, 0x6016, 0x001e, 0x080c, 0xac8c,
+	0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x001e, 0x9006, 0x0cd0,
+	0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0066, 0x0096, 0x00e6,
+	0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, 0x1568, 0x7190, 0x6014,
+	0x2048, 0xa814, 0x8003, 0x9106, 0x1530, 0x20e1, 0x0000, 0x2001,
+	0x19a0, 0x2003, 0x0000, 0x6014, 0x2048, 0xa830, 0x20a8, 0x8906,
+	0x8006, 0x8007, 0x9094, 0x003f, 0x22e8, 0x9084, 0xffc0, 0x9080,
+	0x001b, 0x20a0, 0x2001, 0x19a0, 0x0016, 0x200c, 0x080c, 0xd565,
+	0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c38, 0x6014, 0x2048,
+	0xa867, 0x0103, 0x0010, 0x080c, 0xb5b5, 0x080c, 0xabed, 0x00fe,
+	0x00ee, 0x009e, 0x006e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e,
+	0x0005, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015,
+	0x11b8, 0x7090, 0x9086, 0x0004, 0x1198, 0x6014, 0x2048, 0x2c78,
+	0x080c, 0x975f, 0x01a8, 0x707c, 0xaa74, 0x9206, 0x1130, 0x7080,
+	0xaa78, 0x9206, 0x1110, 0x080c, 0x31e7, 0x080c, 0xaffd, 0x0020,
+	0x080c, 0xb5b5, 0x080c, 0xabed, 0x00fe, 0x00ee, 0x009e, 0x0005,
+	0x7060, 0xaa78, 0x9206, 0x0d78, 0x0c80, 0x0096, 0x00e6, 0x00f6,
+	0x2071, 0x1800, 0x9186, 0x0015, 0x1550, 0x7090, 0x9086, 0x0004,
+	0x1530, 0x6014, 0x2048, 0x2c78, 0x080c, 0x975f, 0x05f0, 0x707c,
+	0xaacc, 0x9206, 0x1180, 0x7080, 0xaad0, 0x9206, 0x1160, 0x080c,
+	0x31e7, 0x0016, 0xa998, 0xaab0, 0x9284, 0x1000, 0xc0fd, 0x080c,
+	0x5692, 0x001e, 0x0010, 0x080c, 0x547b, 0x080c, 0xc838, 0x0508,
+	0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0x0080, 0x080c,
+	0xc838, 0x01b8, 0x6014, 0x2048, 0x080c, 0x547b, 0x1d70, 0xa87b,
+	0x0030, 0xa883, 0x0000, 0xa897, 0x4005, 0xa89b, 0x0004, 0x0126,
+	0x2091, 0x8000, 0xa867, 0x0139, 0x080c, 0x6d80, 0x012e, 0x080c,
+	0xabed, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x7060, 0xaad0, 0x9206,
+	0x0930, 0x0888, 0x0016, 0x0026, 0xa87c, 0xd0ac, 0x0178, 0xa938,
+	0xaa34, 0x2100, 0x9205, 0x0150, 0xa890, 0x9106, 0x1118, 0xa88c,
+	0x9206, 0x0120, 0xa992, 0xaa8e, 0x9085, 0x0001, 0x002e, 0x001e,
+	0x0005, 0x00b6, 0x00d6, 0x0036, 0x080c, 0xc838, 0x0904, 0xce87,
+	0x0096, 0x6314, 0x2348, 0xa87a, 0xa982, 0x929e, 0x4000, 0x1580,
+	0x6310, 0x00c6, 0x2358, 0x2009, 0x0000, 0xa868, 0xd0f4, 0x1140,
+	0x080c, 0x6914, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d,
+	0xaa96, 0xa99a, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080,
+	0x0031, 0x20a0, 0xb8c4, 0x20e0, 0xb8c8, 0x9080, 0x0006, 0x2098,
+	0x080c, 0x0fb7, 0x20a9, 0x0004, 0xa85c, 0x9080, 0x0035, 0x20a0,
+	0xb8c8, 0x9080, 0x000a, 0x2098, 0x080c, 0x0fb7, 0x00ce, 0x0090,
+	0xaa96, 0x3918, 0x9398, 0x0007, 0x231c, 0x6004, 0x9086, 0x0016,
+	0x0110, 0xa89b, 0x0004, 0xaba2, 0x6310, 0x2358, 0xb804, 0x9084,
+	0x00ff, 0xa89e, 0x080c, 0x6d74, 0x6017, 0x0000, 0x009e, 0x003e,
+	0x00de, 0x00be, 0x0005, 0x0026, 0x0036, 0x0046, 0x00b6, 0x0096,
+	0x00f6, 0x6214, 0x2248, 0x6210, 0x2258, 0x2079, 0x0260, 0x9096,
+	0x0000, 0x11a0, 0xb814, 0x9084, 0x00ff, 0x900e, 0x080c, 0x25fb,
+	0x2118, 0x831f, 0x939c, 0xff00, 0x7838, 0x9084, 0x00ff, 0x931d,
+	0x7c3c, 0x2011, 0x8018, 0x080c, 0x4b07, 0x00a8, 0x9096, 0x0001,
+	0x1148, 0x89ff, 0x0180, 0xa89b, 0x000d, 0x7838, 0xa8a6, 0x783c,
+	0xa8aa, 0x0048, 0x9096, 0x0002, 0x1130, 0xa89b, 0x000d, 0x7838,
+	0xa8a6, 0x783c, 0xa8aa, 0x00fe, 0x009e, 0x00be, 0x004e, 0x003e,
+	0x002e, 0x0005, 0x00c6, 0x0026, 0x0016, 0x9186, 0x0035, 0x0110,
+	0x6a38, 0x0008, 0x6a2c, 0x080c, 0xc826, 0x01f0, 0x2260, 0x6120,
+	0x9186, 0x0003, 0x0118, 0x9186, 0x0006, 0x1190, 0x6838, 0x9206,
+	0x0140, 0x683c, 0x9206, 0x1160, 0x6108, 0x6838, 0x9106, 0x1140,
+	0x0020, 0x6008, 0x693c, 0x9106, 0x1118, 0x6010, 0x6910, 0x9106,
+	0x001e, 0x002e, 0x00ce, 0x0005, 0x9085, 0x0001, 0x0cc8, 0xa974,
+	0xd1cc, 0x0188, 0x918c, 0x00ff, 0x918e, 0x0002, 0x1160, 0xa9a8,
+	0x918c, 0x0f00, 0x810f, 0x918e, 0x0001, 0x1128, 0xa834, 0xa938,
+	0x9115, 0x190c, 0xbeb3, 0x0005, 0x0036, 0x2019, 0x0001, 0x0010,
+	0x0036, 0x901e, 0x0499, 0x01e0, 0x080c, 0xc838, 0x01c8, 0x080c,
+	0xca27, 0x6037, 0x4000, 0x6014, 0x6017, 0x0000, 0x0096, 0x2048,
+	0xa87c, 0x080c, 0xca4d, 0x1118, 0x080c, 0xb5b5, 0x0040, 0xa867,
+	0x0103, 0xa877, 0x0000, 0x83ff, 0x1129, 0x080c, 0x6d80, 0x009e,
+	0x003e, 0x0005, 0xa880, 0xd0b4, 0x0128, 0xa87b, 0x0006, 0xc0ec,
+	0xa882, 0x0048, 0xd0bc, 0x0118, 0xa87b, 0x0002, 0x0020, 0xa87b,
+	0x0005, 0x080c, 0xcb3c, 0xa877, 0x0000, 0x0005, 0x2001, 0x1810,
+	0x2004, 0xd0ec, 0x0005, 0x0006, 0x2001, 0x1810, 0x2004, 0xd0f4,
+	0x000e, 0x0005, 0x0006, 0x2001, 0x1810, 0x2004, 0xd0e4, 0x000e,
+	0x0005, 0x0036, 0x0046, 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be,
+	0x2021, 0x0007, 0x080c, 0x4cbe, 0x004e, 0x003e, 0x0005, 0x0c51,
+	0x1d81, 0x0005, 0x2001, 0x1986, 0x2004, 0x601a, 0x0005, 0x2001,
+	0x1988, 0x2004, 0x604a, 0x0005, 0x080c, 0xabed, 0x0804, 0x96a0,
+	0x611c, 0xd1fc, 0xa97c, 0x1108, 0xd1e4, 0x0005, 0x601c, 0xd0fc,
+	0xa87c, 0x1108, 0xd0e4, 0x0005, 0x601c, 0xd0fc, 0xc0fc, 0x601e,
+	0xa87c, 0x1108, 0xd0e4, 0x0005, 0x6044, 0xd0fc, 0x0160, 0xd0dc,
+	0x1128, 0x908c, 0x000f, 0x9186, 0x0005, 0x1118, 0x6003, 0x0003,
+	0x0010, 0x6003, 0x0001, 0x0005, 0x00b6, 0x0066, 0x6000, 0x90b2,
+	0x0016, 0x1a0c, 0x0d7d, 0x001b, 0x006e, 0x00be, 0x0005, 0xcfb7,
+	0xd6c0, 0xd811, 0xcfb7, 0xcfb7, 0xcfb7, 0xcfb7, 0xcfb7, 0xcfee,
+	0xd893, 0xcfb7, 0xcfb7, 0xcfb7, 0xcfb7, 0xcfb7, 0xcfb7, 0x080c,
+	0x0d7d, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0d7d, 0x0013,
+	0x006e, 0x0005, 0xcfd2, 0xddaa, 0xcfd2, 0xcfd2, 0xcfd2, 0xcfd2,
+	0xcfd2, 0xcfd2, 0xdd59, 0xddfc, 0xcfd2, 0xe453, 0xe487, 0xe453,
+	0xe487, 0xcfd2, 0x080c, 0x0d7d, 0x6000, 0x9082, 0x0016, 0x1a0c,
+	0x0d7d, 0x6000, 0x000a, 0x0005, 0xcfec, 0xda6f, 0xdb38, 0xdb5a,
+	0xdbd5, 0xcfec, 0xdccf, 0xdc5d, 0xd89d, 0xdd31, 0xdd46, 0xcfec,
+	0xcfec, 0xcfec, 0xcfec, 0xcfec, 0x080c, 0x0d7d, 0x91b2, 0x0053,
+	0x1a0c, 0x0d7d, 0x2100, 0x91b2, 0x0040, 0x1a04, 0xd436, 0x0002,
+	0xd038, 0xd227, 0xd038, 0xd038, 0xd038, 0xd230, 0xd038, 0xd038,
+	0xd038, 0xd038, 0xd038, 0xd038, 0xd038, 0xd038, 0xd038, 0xd038,
+	0xd038, 0xd038, 0xd038, 0xd038, 0xd038, 0xd038, 0xd038, 0xd03a,
+	0xd0a1, 0xd0b0, 0xd114, 0xd13f, 0xd1b8, 0xd212, 0xd038, 0xd038,
+	0xd233, 0xd038, 0xd038, 0xd248, 0xd255, 0xd038, 0xd038, 0xd038,
+	0xd038, 0xd038, 0xd2d8, 0xd038, 0xd038, 0xd2ec, 0xd038, 0xd038,
+	0xd2a7, 0xd038, 0xd038, 0xd038, 0xd304, 0xd038, 0xd038, 0xd038,
+	0xd381, 0xd038, 0xd038, 0xd038, 0xd038, 0xd038, 0xd038, 0xd3fe,
+	0x080c, 0x0d7d, 0x080c, 0x6a29, 0x1150, 0x2001, 0x1837, 0x2004,
+	0xd0cc, 0x1128, 0x9084, 0x0009, 0x9086, 0x0008, 0x1140, 0x6007,
+	0x0009, 0x602f, 0x0009, 0x6017, 0x0000, 0x0804, 0xd220, 0x080c,
+	0x69c5, 0x00e6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x6210, 0x2258,
+	0xbaa0, 0x0026, 0x2019, 0x0029, 0x080c, 0xa896, 0x080c, 0x93a5,
+	0x0076, 0x903e, 0x080c, 0x9277, 0x2c08, 0x080c, 0xdfeb, 0x007e,
+	0x001e, 0x080c, 0xa8b2, 0x001e, 0x002e, 0x003e, 0x00ce, 0x00ee,
+	0x6610, 0x2658, 0x080c, 0x6634, 0xbe04, 0x9684, 0x00ff, 0x9082,
+	0x0006, 0x1268, 0x0016, 0x0026, 0x6210, 0x00b6, 0x2258, 0xbaa0,
+	0x00be, 0x2c08, 0x080c, 0xe6b0, 0x002e, 0x001e, 0x1178, 0x080c,
+	0xdf19, 0x1904, 0xd10c, 0x080c, 0xdeb5, 0x1120, 0x6007, 0x0008,
+	0x0804, 0xd220, 0x6007, 0x0009, 0x0804, 0xd220, 0x080c, 0xe14c,
+	0x0128, 0x080c, 0xdf19, 0x0d78, 0x0804, 0xd10c, 0x6017, 0x1900,
+	0x0c88, 0x080c, 0x3332, 0x1904, 0xd433, 0x6106, 0x080c, 0xde66,
+	0x6007, 0x0006, 0x0804, 0xd220, 0x6007, 0x0007, 0x0804, 0xd220,
+	0x080c, 0xe4c3, 0x1904, 0xd433, 0x080c, 0x3332, 0x1904, 0xd433,
+	0x00d6, 0x6610, 0x2658, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006,
+	0x1220, 0x2001, 0x0001, 0x080c, 0x6561, 0x96b4, 0xff00, 0x8637,
+	0x9686, 0x0006, 0x0188, 0x9686, 0x0004, 0x0170, 0xbe04, 0x96b4,
+	0x00ff, 0x9686, 0x0006, 0x0140, 0x9686, 0x0004, 0x0128, 0x9686,
+	0x0005, 0x0110, 0x00de, 0x0480, 0x00e6, 0x2071, 0x0260, 0x7034,
+	0x9084, 0x0003, 0x1140, 0x7034, 0x9082, 0x0014, 0x0220, 0x7030,
+	0x9084, 0x0003, 0x0130, 0x00ee, 0x6017, 0x0000, 0x602f, 0x0007,
+	0x00b0, 0x00ee, 0x080c, 0xdf81, 0x1190, 0x9686, 0x0006, 0x1140,
+	0x0026, 0x6210, 0x2258, 0xbaa0, 0x900e, 0x080c, 0x323c, 0x002e,
+	0x080c, 0x66c0, 0x6007, 0x000a, 0x00de, 0x0804, 0xd220, 0x6007,
+	0x000b, 0x00de, 0x0804, 0xd220, 0x080c, 0x31e7, 0x080c, 0xcf67,
+	0x6007, 0x0001, 0x0804, 0xd220, 0x080c, 0xe4c3, 0x1904, 0xd433,
+	0x080c, 0x3332, 0x1904, 0xd433, 0x2071, 0x0260, 0x7034, 0x90b4,
+	0x0003, 0x1948, 0x90b2, 0x0014, 0x0a30, 0x7030, 0x9084, 0x0003,
+	0x1910, 0x6610, 0x2658, 0xbe04, 0x9686, 0x0707, 0x09e8, 0x0026,
+	0x6210, 0x2258, 0xbaa0, 0x900e, 0x080c, 0x323c, 0x002e, 0x6007,
+	0x000c, 0x2001, 0x0001, 0x080c, 0xe690, 0x0804, 0xd220, 0x080c,
+	0x6a29, 0x1140, 0x2001, 0x1837, 0x2004, 0x9084, 0x0009, 0x9086,
+	0x0008, 0x1110, 0x0804, 0xd047, 0x080c, 0x69c5, 0x6610, 0x2658,
+	0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x06c8, 0x1138, 0x0026,
+	0x2001, 0x0006, 0x080c, 0x65a1, 0x002e, 0x0050, 0x96b4, 0xff00,
+	0x8637, 0x9686, 0x0004, 0x0120, 0x9686, 0x0006, 0x1904, 0xd10c,
+	0x080c, 0xdf8e, 0x1120, 0x6007, 0x000e, 0x0804, 0xd220, 0x0046,
+	0x6410, 0x2458, 0xbca0, 0x0046, 0x080c, 0x31e7, 0x080c, 0xcf67,
+	0x004e, 0x0016, 0x9006, 0x2009, 0x1848, 0x210c, 0xd1a4, 0x0148,
+	0x2009, 0x0029, 0x080c, 0xe2c9, 0x6010, 0x2058, 0xb800, 0xc0e5,
+	0xb802, 0x001e, 0x004e, 0x6007, 0x0001, 0x0804, 0xd220, 0x2001,
+	0x0001, 0x080c, 0x6561, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9,
+	0x0004, 0x2019, 0x1805, 0x2011, 0x0270, 0x080c, 0xbbae, 0x003e,
+	0x002e, 0x001e, 0x015e, 0x9005, 0x0168, 0x96b4, 0xff00, 0x8637,
+	0x9682, 0x0004, 0x0a04, 0xd10c, 0x9682, 0x0007, 0x0a04, 0xd168,
+	0x0804, 0xd10c, 0x6017, 0x1900, 0x6007, 0x0009, 0x0804, 0xd220,
+	0x080c, 0x6a29, 0x1140, 0x2001, 0x1837, 0x2004, 0x9084, 0x0009,
+	0x9086, 0x0008, 0x1110, 0x0804, 0xd047, 0x080c, 0x69c5, 0x6610,
+	0x2658, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x0698, 0x0150,
+	0x96b4, 0xff00, 0x8637, 0x9686, 0x0004, 0x0120, 0x9686, 0x0006,
+	0x1904, 0xd10c, 0x080c, 0xdfbc, 0x1130, 0x080c, 0xdeb5, 0x1118,
+	0x6007, 0x0010, 0x04e8, 0x0046, 0x6410, 0x2458, 0xbca0, 0x0046,
+	0x080c, 0x31e7, 0x080c, 0xcf67, 0x004e, 0x0016, 0x9006, 0x2009,
+	0x1848, 0x210c, 0xd1a4, 0x0148, 0x2009, 0x0029, 0x080c, 0xe2c9,
 	0x6010, 0x2058, 0xb800, 0xc0e5, 0xb802, 0x001e, 0x004e, 0x6007,
-	0x0001, 0x0804, 0xd1fb, 0x2001, 0x0001, 0x080c, 0x655a, 0x0156,
-	0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011,
-	0x0270, 0x080c, 0xbb8a, 0x003e, 0x002e, 0x001e, 0x015e, 0x9005,
-	0x0168, 0x96b4, 0xff00, 0x8637, 0x9682, 0x0004, 0x0a04, 0xd0e8,
-	0x9682, 0x0007, 0x0a04, 0xd144, 0x0804, 0xd0e8, 0x6017, 0x1900,
-	0x6007, 0x0009, 0x0804, 0xd1fb, 0x080c, 0x6a19, 0x1140, 0x2001,
-	0x1837, 0x2004, 0x9084, 0x0009, 0x9086, 0x0008, 0x1110, 0x0804,
-	0xd023, 0x080c, 0x69be, 0x6610, 0x2658, 0xbe04, 0x9684, 0x00ff,
-	0x9082, 0x0006, 0x0690, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0004,
-	0x0120, 0x9686, 0x0006, 0x1904, 0xd0e8, 0x080c, 0xdf91, 0x1130,
-	0x080c, 0xde8a, 0x1118, 0x6007, 0x0010, 0x04e8, 0x0046, 0x6410,
-	0x2458, 0xbca0, 0x0046, 0x080c, 0x31e4, 0x080c, 0xcf43, 0x004e,
-	0x0016, 0x9006, 0x2009, 0x1848, 0x210c, 0xd1a4, 0x0148, 0x2009,
-	0x0029, 0x080c, 0xe29e, 0x6010, 0x2058, 0xb800, 0xc0e5, 0xb802,
-	0x001e, 0x004e, 0x6007, 0x0001, 0x00f0, 0x080c, 0xe121, 0x0140,
-	0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0978, 0x0804, 0xd0e8,
-	0x6017, 0x1900, 0x6007, 0x0009, 0x0070, 0x080c, 0x332b, 0x1904,
-	0xd40e, 0x080c, 0xe498, 0x1904, 0xd40e, 0x080c, 0xd5db, 0x1904,
-	0xd0e8, 0x6007, 0x0012, 0x6003, 0x0001, 0x080c, 0x91f4, 0x080c,
-	0x966f, 0x0005, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x91f4,
-	0x080c, 0x966f, 0x0cb0, 0x6007, 0x0005, 0x0c68, 0x080c, 0xe498,
-	0x1904, 0xd40e, 0x080c, 0x332b, 0x1904, 0xd40e, 0x080c, 0xd5db,
-	0x1904, 0xd0e8, 0x6007, 0x0020, 0x6003, 0x0001, 0x080c, 0x91f4,
-	0x080c, 0x966f, 0x0005, 0x080c, 0x332b, 0x1904, 0xd40e, 0x6007,
-	0x0023, 0x6003, 0x0001, 0x080c, 0x91f4, 0x080c, 0x966f, 0x0005,
-	0x080c, 0xe498, 0x1904, 0xd40e, 0x080c, 0x332b, 0x1904, 0xd40e,
-	0x080c, 0xd5db, 0x1904, 0xd0e8, 0x0016, 0x0026, 0x00e6, 0x2071,
-	0x0260, 0x7244, 0x9286, 0xffff, 0x0180, 0x2c08, 0x080c, 0xc802,
-	0x01b0, 0x2260, 0x7240, 0x6008, 0x9206, 0x1188, 0x6010, 0x9190,
-	0x0004, 0x2214, 0x9206, 0x01b8, 0x0050, 0x7240, 0x2c08, 0x9006,
-	0x080c, 0xe268, 0x1180, 0x7244, 0x9286, 0xffff, 0x01b0, 0x2160,
-	0x6007, 0x0026, 0x6017, 0x1700, 0x7214, 0x9296, 0xffff, 0x1180,
-	0x6007, 0x0025, 0x0068, 0x6020, 0x9086, 0x0007, 0x1d80, 0x6004,
-	0x9086, 0x0024, 0x1110, 0x080c, 0xabc9, 0x2160, 0x6007, 0x0025,
-	0x6003, 0x0001, 0x080c, 0x91f4, 0x080c, 0x966f, 0x00ee, 0x002e,
-	0x001e, 0x0005, 0x2001, 0x0001, 0x080c, 0x655a, 0x0156, 0x0016,
-	0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011, 0x0276,
-	0x080c, 0xbb8a, 0x003e, 0x002e, 0x001e, 0x015e, 0x0120, 0x6007,
-	0x0031, 0x0804, 0xd1fb, 0x080c, 0xb7fb, 0x080c, 0x74d5, 0x1190,
-	0x0006, 0x0026, 0x0036, 0x080c, 0x74ef, 0x1138, 0x080c, 0x77d9,
-	0x080c, 0x6022, 0x080c, 0x7406, 0x0010, 0x080c, 0x74a9, 0x003e,
-	0x002e, 0x000e, 0x0005, 0x080c, 0x332b, 0x1904, 0xd40e, 0x080c,
-	0xd5db, 0x1904, 0xd0e8, 0x6106, 0x080c, 0xd5f7, 0x1120, 0x6007,
-	0x002b, 0x0804, 0xd1fb, 0x6007, 0x002c, 0x0804, 0xd1fb, 0x080c,
-	0xe498, 0x1904, 0xd40e, 0x080c, 0x332b, 0x1904, 0xd40e, 0x080c,
-	0xd5db, 0x1904, 0xd0e8, 0x6106, 0x080c, 0xd5fc, 0x1120, 0x6007,
-	0x002e, 0x0804, 0xd1fb, 0x6007, 0x002f, 0x0804, 0xd1fb, 0x080c,
-	0x332b, 0x1904, 0xd40e, 0x00e6, 0x00d6, 0x00c6, 0x6010, 0x2058,
-	0xb904, 0x9184, 0x00ff, 0x9086, 0x0006, 0x0158, 0x9184, 0xff00,
-	0x8007, 0x9086, 0x0006, 0x0128, 0x00ce, 0x00de, 0x00ee, 0x0804,
-	0xd202, 0x080c, 0x56d7, 0xd0e4, 0x0904, 0xd359, 0x2071, 0x026c,
-	0x7010, 0x603a, 0x7014, 0x603e, 0x7108, 0x720c, 0x080c, 0x6a57,
-	0x0140, 0x6010, 0x2058, 0xb810, 0x9106, 0x1118, 0xb814, 0x9206,
-	0x0510, 0x080c, 0x6a53, 0x15b8, 0x2069, 0x1800, 0x6880, 0x9206,
-	0x1590, 0x687c, 0x9106, 0x1578, 0x7210, 0x080c, 0xc802, 0x0590,
-	0x080c, 0xd4c6, 0x0578, 0x080c, 0xe31a, 0x0560, 0x622e, 0x6007,
-	0x0036, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x91ed, 0x00ce,
-	0x00de, 0x00ee, 0x0005, 0x7214, 0x9286, 0xffff, 0x0150, 0x080c,
-	0xc802, 0x01c0, 0x9280, 0x0002, 0x2004, 0x7110, 0x9106, 0x1190,
-	0x08e0, 0x7210, 0x2c08, 0x9085, 0x0001, 0x080c, 0xe268, 0x2c10,
-	0x2160, 0x0140, 0x0890, 0x6007, 0x0037, 0x602f, 0x0009, 0x6017,
-	0x1500, 0x08b8, 0x6007, 0x0037, 0x602f, 0x0003, 0x6017, 0x1700,
-	0x0880, 0x6007, 0x0012, 0x0868, 0x080c, 0x332b, 0x1904, 0xd40e,
-	0x6010, 0x2058, 0xb804, 0x9084, 0xff00, 0x8007, 0x9086, 0x0006,
-	0x1904, 0xd202, 0x00e6, 0x00d6, 0x00c6, 0x080c, 0x56d7, 0xd0e4,
-	0x0904, 0xd3d1, 0x2069, 0x1800, 0x2071, 0x026c, 0x7008, 0x603a,
-	0x720c, 0x623e, 0x9286, 0xffff, 0x1150, 0x7208, 0x00c6, 0x2c08,
-	0x9085, 0x0001, 0x080c, 0xe268, 0x2c10, 0x00ce, 0x05e8, 0x080c,
-	0xc802, 0x05d0, 0x7108, 0x9280, 0x0002, 0x2004, 0x9106, 0x15a0,
-	0x00c6, 0x0026, 0x2260, 0x080c, 0xc412, 0x002e, 0x00ce, 0x7118,
-	0x918c, 0xff00, 0x810f, 0x9186, 0x0001, 0x0178, 0x9186, 0x0005,
-	0x0118, 0x9186, 0x0007, 0x1198, 0x9280, 0x0005, 0x2004, 0x9005,
-	0x0170, 0x080c, 0xd4c6, 0x0904, 0xd352, 0x0056, 0x7510, 0x7614,
-	0x080c, 0xe333, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x6007,
-	0x003b, 0x602f, 0x0009, 0x6017, 0x2a00, 0x6003, 0x0001, 0x2009,
-	0x8020, 0x080c, 0x91ed, 0x0c78, 0x6007, 0x003b, 0x602f, 0x0003,
-	0x6017, 0x0300, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x91ed,
-	0x0c10, 0x6007, 0x003b, 0x602f, 0x000b, 0x6017, 0x0000, 0x0804,
-	0xd329, 0x00e6, 0x0026, 0x080c, 0x6a19, 0x0550, 0x080c, 0x69be,
-	0x080c, 0xe50a, 0x1518, 0x2071, 0x1800, 0x70dc, 0x9085, 0x0003,
-	0x70de, 0x00f6, 0x2079, 0x0100, 0x72b0, 0x9284, 0x00ff, 0x707e,
-	0x78e6, 0x9284, 0xff00, 0x7280, 0x9205, 0x7082, 0x78ea, 0x00fe,
-	0x70e7, 0x0000, 0x080c, 0x6a57, 0x0120, 0x2011, 0x1a09, 0x2013,
-	0x07d0, 0xd0ac, 0x1128, 0x080c, 0x2fb2, 0x0010, 0x080c, 0xe53c,
-	0x002e, 0x00ee, 0x080c, 0xabc9, 0x0804, 0xd201, 0x080c, 0xabc9,
-	0x0005, 0x2600, 0x0002, 0xd425, 0xd456, 0xd467, 0xd425, 0xd425,
-	0xd427, 0xd478, 0xd425, 0xd425, 0xd425, 0xd444, 0xd425, 0xd425,
-	0xd425, 0xd483, 0xd490, 0xd4c1, 0xd425, 0x080c, 0x0d7d, 0x080c,
-	0xe498, 0x1d20, 0x080c, 0x332b, 0x1d08, 0x080c, 0xd5db, 0x1148,
-	0x7038, 0x6016, 0x6007, 0x0045, 0x6003, 0x0001, 0x080c, 0x91f4,
-	0x0005, 0x080c, 0x31e4, 0x080c, 0xcf43, 0x6007, 0x0001, 0x6003,
-	0x0001, 0x080c, 0x91f4, 0x0005, 0x080c, 0xe498, 0x1938, 0x080c,
-	0x332b, 0x1920, 0x080c, 0xd5db, 0x1d60, 0x703c, 0x6016, 0x6007,
-	0x004a, 0x6003, 0x0001, 0x080c, 0x91f4, 0x0005, 0x080c, 0x332b,
-	0x1904, 0xd40e, 0x2009, 0x0041, 0x080c, 0xe545, 0x6007, 0x0047,
-	0x6003, 0x0001, 0x080c, 0x91f4, 0x080c, 0x966f, 0x0005, 0x080c,
-	0x332b, 0x1904, 0xd40e, 0x2009, 0x0042, 0x080c, 0xe545, 0x6007,
-	0x0047, 0x6003, 0x0001, 0x080c, 0x91f4, 0x080c, 0x966f, 0x0005,
-	0x080c, 0x332b, 0x1904, 0xd40e, 0x2009, 0x0046, 0x080c, 0xe545,
-	0x080c, 0xabc9, 0x0005, 0x080c, 0xd4e3, 0x0904, 0xd40e, 0x6007,
-	0x004e, 0x6003, 0x0001, 0x080c, 0x91f4, 0x080c, 0x966f, 0x0005,
-	0x6007, 0x004f, 0x6017, 0x0000, 0x7134, 0x918c, 0x00ff, 0x81ff,
-	0x0508, 0x9186, 0x0001, 0x1160, 0x7140, 0x2001, 0x19bd, 0x2004,
-	0x9106, 0x11b0, 0x7144, 0x2001, 0x19be, 0x2004, 0x9106, 0x0190,
-	0x9186, 0x0002, 0x1168, 0x2011, 0x0276, 0x20a9, 0x0004, 0x6010,
-	0x0096, 0x2048, 0x2019, 0x000a, 0x080c, 0xbb9e, 0x009e, 0x0110,
-	0x6017, 0x0001, 0x6003, 0x0001, 0x080c, 0x91f4, 0x080c, 0x966f,
-	0x0005, 0x6007, 0x0050, 0x703c, 0x6016, 0x0ca0, 0x0016, 0x00e6,
-	0x2071, 0x0260, 0x00b6, 0x00c6, 0x2260, 0x6010, 0x2058, 0xb8d4,
-	0xd084, 0x0150, 0x7128, 0x6050, 0x9106, 0x1120, 0x712c, 0x604c,
-	0x9106, 0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x00ce, 0x00be,
-	0x00ee, 0x001e, 0x0005, 0x0016, 0x0096, 0x0086, 0x00e6, 0x01c6,
-	0x01d6, 0x0126, 0x2091, 0x8000, 0x2071, 0x1800, 0x7090, 0x908a,
-	0x00f9, 0x16e8, 0x20e1, 0x0000, 0x2001, 0x19a0, 0x2003, 0x0000,
-	0x080c, 0x1053, 0x05a0, 0x2900, 0x6016, 0x7090, 0x8004, 0xa816,
-	0x908a, 0x001e, 0x02d0, 0xa833, 0x001e, 0x20a9, 0x001e, 0xa860,
-	0x20e8, 0xa85c, 0x9080, 0x001b, 0x20a0, 0x2001, 0x19a0, 0x0016,
-	0x200c, 0x0471, 0x001e, 0x2940, 0x080c, 0x1053, 0x01c0, 0x2900,
-	0xa006, 0x2100, 0x81ff, 0x0180, 0x0c18, 0xa832, 0x20a8, 0xa860,
-	0x20e8, 0xa85c, 0x9080, 0x001b, 0x20a0, 0x2001, 0x19a0, 0x0016,
-	0x200c, 0x00b1, 0x001e, 0x0000, 0x9085, 0x0001, 0x0048, 0x2071,
-	0x1800, 0x7093, 0x0000, 0x6014, 0x2048, 0x080c, 0x0fec, 0x9006,
-	0x012e, 0x01de, 0x01ce, 0x00ee, 0x008e, 0x009e, 0x001e, 0x0005,
-	0x0006, 0x0016, 0x0026, 0x0036, 0x00c6, 0x918c, 0xffff, 0x11a8,
-	0x080c, 0x2189, 0x2099, 0x026c, 0x2001, 0x0014, 0x3518, 0x9312,
-	0x1218, 0x23a8, 0x4003, 0x00f8, 0x20a8, 0x4003, 0x22a8, 0x8108,
-	0x080c, 0x2189, 0x2099, 0x0260, 0x0ca8, 0x080c, 0x2189, 0x2061,
-	0x19a0, 0x6004, 0x2098, 0x6008, 0x3518, 0x9312, 0x1218, 0x23a8,
-	0x4003, 0x0048, 0x20a8, 0x4003, 0x22a8, 0x8108, 0x080c, 0x2189,
-	0x2099, 0x0260, 0x0ca8, 0x2061, 0x19a0, 0x2019, 0x0280, 0x3300,
-	0x931e, 0x0110, 0x6006, 0x0020, 0x2001, 0x0260, 0x6006, 0x8108,
-	0x2162, 0x9292, 0x0021, 0x9296, 0xffff, 0x620a, 0x00ce, 0x003e,
-	0x002e, 0x001e, 0x000e, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036,
-	0x00c6, 0x81ff, 0x11b8, 0x080c, 0x21a1, 0x20a1, 0x024c, 0x2001,
-	0x0014, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003, 0x0418, 0x20a8,
-	0x4003, 0x82ff, 0x01f8, 0x22a8, 0x8108, 0x080c, 0x21a1, 0x20a1,
-	0x0240, 0x0c98, 0x080c, 0x21a1, 0x2061, 0x19a3, 0x6004, 0x20a0,
-	0x6008, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003, 0x0058, 0x20a8,
-	0x4003, 0x82ff, 0x0138, 0x22a8, 0x8108, 0x080c, 0x21a1, 0x20a1,
-	0x0240, 0x0c98, 0x2061, 0x19a3, 0x2019, 0x0260, 0x3400, 0x931e,
-	0x0110, 0x6006, 0x0020, 0x2001, 0x0240, 0x6006, 0x8108, 0x2162,
-	0x9292, 0x0021, 0x9296, 0xffff, 0x620a, 0x00ce, 0x003e, 0x002e,
-	0x001e, 0x000e, 0x0005, 0x00b6, 0x0066, 0x6610, 0x2658, 0xbe04,
-	0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0170, 0x9686, 0x0004,
-	0x0158, 0xbe04, 0x96b4, 0x00ff, 0x9686, 0x0006, 0x0128, 0x9686,
-	0x0004, 0x0110, 0x9085, 0x0001, 0x006e, 0x00be, 0x0005, 0x00d6,
-	0x080c, 0xd671, 0x00de, 0x0005, 0x00d6, 0x080c, 0xd67e, 0x1520,
-	0x680c, 0x908c, 0xff00, 0x6820, 0x9084, 0x00ff, 0x9115, 0x6216,
-	0x6824, 0x602e, 0xd1e4, 0x0130, 0x9006, 0x080c, 0xe665, 0x2009,
-	0x0001, 0x0078, 0xd1ec, 0x0180, 0x6920, 0x918c, 0x00ff, 0x6824,
-	0x080c, 0x25fb, 0x1148, 0x2001, 0x0001, 0x080c, 0xe665, 0x2110,
-	0x900e, 0x080c, 0x3235, 0x0018, 0x9085, 0x0001, 0x0008, 0x9006,
-	0x00de, 0x0005, 0x00b6, 0x00c6, 0x080c, 0xac3b, 0x0598, 0x0016,
-	0x0026, 0x00c6, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c,
-	0x25fb, 0x1568, 0x080c, 0x65bd, 0x1550, 0xbe12, 0xbd16, 0x00ce,
-	0x002e, 0x001e, 0x2b00, 0x6012, 0x080c, 0xe498, 0x11c8, 0x080c,
-	0x332b, 0x11b0, 0x080c, 0xd5db, 0x0500, 0x2001, 0x0007, 0x080c,
-	0x656e, 0x2001, 0x0007, 0x080c, 0x659a, 0x6017, 0x0000, 0x6023,
-	0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x91f4, 0x0010,
-	0x080c, 0xabc9, 0x9085, 0x0001, 0x00ce, 0x00be, 0x0005, 0x080c,
-	0xabc9, 0x00ce, 0x002e, 0x001e, 0x0ca8, 0x080c, 0xabc9, 0x9006,
-	0x0c98, 0x2069, 0x026d, 0x6800, 0x9082, 0x0010, 0x1228, 0x6017,
-	0x0000, 0x9085, 0x0001, 0x0008, 0x9006, 0x0005, 0x6017, 0x0000,
-	0x2069, 0x026c, 0x6808, 0x9084, 0xff00, 0x9086, 0x0800, 0x1190,
-	0x6904, 0x9186, 0x0018, 0x0118, 0x9186, 0x0014, 0x1158, 0x810f,
-	0x6800, 0x9084, 0x00ff, 0x910d, 0x6162, 0x908e, 0x0014, 0x0110,
-	0x908e, 0x0010, 0x0005, 0x6004, 0x90b2, 0x0053, 0x1a0c, 0x0d7d,
-	0x91b6, 0x0013, 0x1130, 0x2008, 0x91b2, 0x0040, 0x1a04, 0xd7c0,
-	0x0092, 0x91b6, 0x0027, 0x0120, 0x91b6, 0x0014, 0x190c, 0x0d7d,
-	0x2001, 0x0007, 0x080c, 0x659a, 0x080c, 0x95ad, 0x080c, 0xac04,
-	0x080c, 0x966f, 0x0005, 0xd6fb, 0xd6fd, 0xd6fb, 0xd6fb, 0xd6fb,
-	0xd6fd, 0xd70a, 0xd7bd, 0xd75a, 0xd7bd, 0xd76e, 0xd7bd, 0xd70a,
-	0xd7bd, 0xd7b5, 0xd7bd, 0xd7b5, 0xd7bd, 0xd7bd, 0xd6fb, 0xd6fb,
-	0xd6fb, 0xd6fb, 0xd6fb, 0xd6fb, 0xd6fb, 0xd6fb, 0xd6fb, 0xd6fb,
-	0xd6fb, 0xd6fd, 0xd6fb, 0xd7bd, 0xd6fb, 0xd6fb, 0xd7bd, 0xd6fb,
-	0xd7ba, 0xd7bd, 0xd6fb, 0xd6fb, 0xd6fb, 0xd6fb, 0xd7bd, 0xd7bd,
-	0xd6fb, 0xd7bd, 0xd7bd, 0xd6fb, 0xd705, 0xd6fb, 0xd6fb, 0xd6fb,
-	0xd6fb, 0xd7b9, 0xd7bd, 0xd6fb, 0xd6fb, 0xd7bd, 0xd7bd, 0xd6fb,
-	0xd6fb, 0xd6fb, 0xd6fb, 0x080c, 0x0d7d, 0x080c, 0xcf46, 0x6003,
-	0x0002, 0x080c, 0x966f, 0x0804, 0xd7bf, 0x9006, 0x080c, 0x655a,
-	0x0804, 0xd7bd, 0x080c, 0x6a53, 0x1904, 0xd7bd, 0x9006, 0x080c,
-	0x655a, 0x6010, 0x2058, 0xb810, 0x9086, 0x00ff, 0x1140, 0x00f6,
-	0x2079, 0x1800, 0x78a8, 0x8000, 0x78aa, 0x00fe, 0x0428, 0x6010,
-	0x2058, 0xb884, 0x9005, 0x1178, 0x080c, 0xcf2e, 0x1904, 0xd7bd,
-	0x0036, 0x0046, 0xbba0, 0x2021, 0x0007, 0x080c, 0x4cb7, 0x004e,
-	0x003e, 0x0804, 0xd7bd, 0x080c, 0x335c, 0x1904, 0xd7bd, 0x2001,
-	0x1800, 0x2004, 0x9086, 0x0002, 0x1138, 0x00f6, 0x2079, 0x1800,
-	0x78a8, 0x8000, 0x78aa, 0x00fe, 0x2001, 0x0002, 0x080c, 0x656e,
-	0x6023, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x91f4,
-	0x080c, 0x966f, 0x6110, 0x2158, 0x2009, 0x0001, 0x080c, 0x861b,
-	0x0804, 0xd7bf, 0x6610, 0x2658, 0xbe04, 0x96b4, 0xff00, 0x8637,
-	0x9686, 0x0006, 0x0904, 0xd7bd, 0x9686, 0x0004, 0x0904, 0xd7bd,
-	0x080c, 0x8e99, 0x2001, 0x0004, 0x0804, 0xd7bb, 0x2001, 0x1800,
-	0x2004, 0x9086, 0x0003, 0x1158, 0x0036, 0x0046, 0x6010, 0x2058,
-	0xbba0, 0x2021, 0x0006, 0x080c, 0x4cb7, 0x004e, 0x003e, 0x2001,
-	0x0006, 0x080c, 0xd7d9, 0x6610, 0x2658, 0xbe04, 0x0066, 0x96b4,
-	0xff00, 0x8637, 0x9686, 0x0006, 0x006e, 0x0168, 0x2001, 0x0006,
-	0x080c, 0x659a, 0x9284, 0x00ff, 0x908e, 0x0007, 0x1120, 0x2001,
-	0x0006, 0x080c, 0x656e, 0x080c, 0x6a53, 0x11f8, 0x2001, 0x1837,
-	0x2004, 0xd0a4, 0x01d0, 0xbe04, 0x96b4, 0x00ff, 0x9686, 0x0006,
-	0x01a0, 0x00f6, 0x2079, 0x1800, 0x78a8, 0x8000, 0x78aa, 0x00fe,
-	0x0804, 0xd744, 0x2001, 0x0004, 0x0030, 0x2001, 0x0006, 0x0409,
-	0x0020, 0x0018, 0x0010, 0x080c, 0x659a, 0x080c, 0xabc9, 0x0005,
-	0x2600, 0x0002, 0xd7d4, 0xd7d4, 0xd7d4, 0xd7d4, 0xd7d4, 0xd7d6,
-	0xd7d4, 0xd7d6, 0xd7d4, 0xd7d4, 0xd7d6, 0xd7d4, 0xd7d4, 0xd7d4,
-	0xd7d6, 0xd7d6, 0xd7d6, 0xd7d6, 0x080c, 0x0d7d, 0x080c, 0xabc9,
-	0x0005, 0x0016, 0x00b6, 0x00d6, 0x6110, 0x2158, 0xb900, 0xd184,
-	0x0138, 0x080c, 0x656e, 0x9006, 0x080c, 0x655a, 0x080c, 0x3215,
-	0x00de, 0x00be, 0x001e, 0x0005, 0x6610, 0x2658, 0xb804, 0x9084,
-	0xff00, 0x8007, 0x90b2, 0x000c, 0x1a0c, 0x0d7d, 0x91b6, 0x0015,
-	0x1110, 0x003b, 0x0028, 0x91b6, 0x0016, 0x190c, 0x0d7d, 0x006b,
-	0x0005, 0xb67a, 0xb67a, 0xb67a, 0xb67a, 0xb67a, 0xb67a, 0xd854,
-	0xd819, 0xb67a, 0xb67a, 0xb67a, 0xb67a, 0xb67a, 0xb67a, 0xb67a,
-	0xb67a, 0xb67a, 0xb67a, 0xd854, 0xd85b, 0xb67a, 0xb67a, 0xb67a,
-	0xb67a, 0x00f6, 0x080c, 0x6a53, 0x11d8, 0x080c, 0xcf2e, 0x11c0,
-	0x6010, 0x905d, 0x01a8, 0xb884, 0x9005, 0x0190, 0x9006, 0x080c,
-	0x655a, 0x2001, 0x0002, 0x080c, 0x656e, 0x6023, 0x0001, 0x6003,
-	0x0001, 0x6007, 0x0002, 0x080c, 0x91f4, 0x080c, 0x966f, 0x00d0,
-	0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x25fb, 0x1190,
-	0x080c, 0x661e, 0x0118, 0x080c, 0xabc9, 0x0060, 0xb810, 0x0006,
-	0xb814, 0x0006, 0x080c, 0x603c, 0x000e, 0xb816, 0x000e, 0xb812,
-	0x080c, 0xabc9, 0x00fe, 0x0005, 0x6604, 0x96b6, 0x001e, 0x1110,
-	0x080c, 0xabc9, 0x0005, 0x080c, 0xba03, 0x1148, 0x6003, 0x0001,
-	0x6007, 0x0001, 0x080c, 0x91f4, 0x080c, 0x966f, 0x0010, 0x080c,
-	0xabc9, 0x0005, 0x6004, 0x908a, 0x0053, 0x1a0c, 0x0d7d, 0x080c,
-	0x95ad, 0x080c, 0xac04, 0x0005, 0x9182, 0x0040, 0x0002, 0xd88a,
-	0xd88a, 0xd88a, 0xd88a, 0xd88c, 0xd88a, 0xd88a, 0xd88a, 0xd88a,
-	0xd88a, 0xd88a, 0xd88a, 0xd88a, 0xd88a, 0xd88a, 0xd88a, 0xd88a,
-	0xd88a, 0xd88a, 0x080c, 0x0d7d, 0x0096, 0x00b6, 0x00d6, 0x00e6,
-	0x00f6, 0x0046, 0x0026, 0x6210, 0x2258, 0xb8bc, 0x9005, 0x11b0,
-	0x6007, 0x0044, 0x2071, 0x0260, 0x7444, 0x94a4, 0xff00, 0x0904,
-	0xd8f3, 0x080c, 0xe659, 0x1170, 0x9486, 0x2000, 0x1158, 0x2009,
-	0x0001, 0x2011, 0x0200, 0x080c, 0x88bb, 0x0020, 0x9026, 0x080c,
-	0xe4dd, 0x0c30, 0x080c, 0x103a, 0x090c, 0x0d7d, 0x6003, 0x0007,
-	0xa867, 0x010d, 0x9006, 0xa802, 0xa86a, 0xac8a, 0x2c00, 0xa88e,
-	0x6008, 0xa8e2, 0x6010, 0x2058, 0xb8a0, 0x7130, 0xa97a, 0x0016,
-	0xa876, 0xa87f, 0x0000, 0xa883, 0x0000, 0xa887, 0x0036, 0x080c,
-	0x6d70, 0x001e, 0x080c, 0xe659, 0x1904, 0xd953, 0x9486, 0x2000,
-	0x1130, 0x2019, 0x0017, 0x080c, 0xe20e, 0x0804, 0xd953, 0x9486,
-	0x0200, 0x1120, 0x080c, 0xe19e, 0x0804, 0xd953, 0x9486, 0x0400,
-	0x0120, 0x9486, 0x1000, 0x1904, 0xd953, 0x2019, 0x0002, 0x080c,
-	0xe1bd, 0x0804, 0xd953, 0x2069, 0x1a6f, 0x6a00, 0xd284, 0x0904,
-	0xd9bd, 0x9284, 0x0300, 0x1904, 0xd9b6, 0x6804, 0x9005, 0x0904,
-	0xd99e, 0x2d78, 0x6003, 0x0007, 0x080c, 0x1053, 0x0904, 0xd95f,
-	0x7800, 0xd08c, 0x1118, 0x7804, 0x8001, 0x7806, 0x6017, 0x0000,
-	0x2001, 0x180f, 0x2004, 0xd084, 0x1904, 0xd9c1, 0x9006, 0xa802,
-	0xa867, 0x0116, 0xa86a, 0x6008, 0xa8e2, 0x2c00, 0xa87a, 0x6010,
-	0x2058, 0xb8a0, 0x7130, 0xa9b6, 0xa876, 0xb928, 0xa9ba, 0xb92c,
-	0xa9be, 0xb930, 0xa9c2, 0xb934, 0xa9c6, 0xa883, 0x003d, 0x7044,
-	0x9084, 0x0003, 0x9080, 0xd95b, 0x2005, 0xa87e, 0x20a9, 0x000a,
-	0x2001, 0x0270, 0xaa5c, 0x9290, 0x0021, 0x2009, 0x0205, 0x200b,
-	0x0080, 0x20e1, 0x0000, 0xab60, 0x23e8, 0x2098, 0x22a0, 0x4003,
-	0x200b, 0x0000, 0x2001, 0x027a, 0x200c, 0xa9b2, 0x8000, 0x200c,
-	0xa9ae, 0x080c, 0x6d73, 0x002e, 0x004e, 0x00fe, 0x00ee, 0x00de,
-	0x00be, 0x009e, 0x0005, 0x0000, 0x0080, 0x0040, 0x0000, 0x2001,
-	0x1810, 0x2004, 0xd084, 0x0120, 0x080c, 0x103a, 0x1904, 0xd908,
-	0x6017, 0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x2009, 0xa022,
-	0x080c, 0x91ed, 0x0c00, 0x2069, 0x0260, 0x6848, 0x9084, 0xff00,
-	0x9086, 0x1200, 0x1198, 0x686c, 0x9084, 0x00ff, 0x0016, 0x6114,
-	0x918c, 0xf700, 0x910d, 0x6116, 0x001e, 0x6003, 0x0001, 0x6007,
-	0x0043, 0x2009, 0xa025, 0x080c, 0x91ed, 0x0828, 0x6868, 0x602e,
-	0x686c, 0x6032, 0x6017, 0xf200, 0x6003, 0x0001, 0x6007, 0x0041,
-	0x2009, 0xa022, 0x080c, 0x91ed, 0x0804, 0xd953, 0x2001, 0x180e,
-	0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x4b00, 0x6017,
-	0xf300, 0x0010, 0x6017, 0xf100, 0x6003, 0x0001, 0x6007, 0x0041,
-	0x2009, 0xa022, 0x080c, 0x91ed, 0x0804, 0xd953, 0x6017, 0xf500,
-	0x0c98, 0x6017, 0xf600, 0x0804, 0xd973, 0x6017, 0xf200, 0x0804,
-	0xd973, 0xa867, 0x0146, 0xa86b, 0x0000, 0x6008, 0xa886, 0x2c00,
-	0xa87a, 0x7044, 0x9084, 0x0003, 0x9080, 0xd95b, 0x2005, 0xa87e,
-	0x2928, 0x6010, 0x2058, 0xb8a0, 0xa876, 0xb828, 0xa88a, 0xb82c,
-	0xa88e, 0xb830, 0xa892, 0xb834, 0xa896, 0xa883, 0x003d, 0x2009,
-	0x0205, 0x2104, 0x9085, 0x0080, 0x200a, 0x20e1, 0x0000, 0x2011,
-	0x0210, 0x2214, 0x9294, 0x0fff, 0xaaa2, 0x9282, 0x0111, 0x1a0c,
-	0x0d7d, 0x8210, 0x821c, 0x2001, 0x026c, 0x2098, 0xa860, 0x20e8,
-	0xa85c, 0x9080, 0x0029, 0x20a0, 0x2011, 0xda3d, 0x2041, 0x0001,
-	0x223d, 0x9784, 0x00ff, 0x9322, 0x1208, 0x2300, 0x20a8, 0x4003,
-	0x931a, 0x0530, 0x8210, 0xd7fc, 0x1130, 0x8d68, 0x2d0a, 0x2001,
-	0x0260, 0x2098, 0x0c68, 0x2950, 0x080c, 0x1053, 0x0170, 0x2900,
-	0xb002, 0xa867, 0x0147, 0xa86b, 0x0000, 0xa860, 0x20e8, 0xa85c,
-	0x9080, 0x001b, 0x20a0, 0x8840, 0x08d8, 0x2548, 0xa800, 0x902d,
-	0x0118, 0x080c, 0x106c, 0x0cc8, 0x080c, 0x106c, 0x0804, 0xd95f,
-	0x2548, 0x8847, 0x9885, 0x0046, 0xa866, 0x2009, 0x0205, 0x200b,
-	0x0000, 0x080c, 0xe241, 0x0804, 0xd953, 0x8010, 0x0004, 0x801a,
-	0x0006, 0x8018, 0x0008, 0x8016, 0x000a, 0x8014, 0x9186, 0x0013,
-	0x1160, 0x6004, 0x908a, 0x0057, 0x1a0c, 0x0d7d, 0x9082, 0x0040,
-	0x0a0c, 0x0d7d, 0x2008, 0x0804, 0xdac8, 0x9186, 0x0051, 0x0108,
-	0x0040, 0x080c, 0xaa84, 0x01e8, 0x9086, 0x0002, 0x0904, 0xdb0f,
-	0x00c0, 0x9186, 0x0027, 0x0180, 0x9186, 0x0048, 0x0128, 0x9186,
-	0x0014, 0x0150, 0x190c, 0x0d7d, 0x080c, 0xaa84, 0x0150, 0x9086,
-	0x0004, 0x0904, 0xdbac, 0x0028, 0x6004, 0x9082, 0x0040, 0x2008,
-	0x001a, 0x080c, 0xac85, 0x0005, 0xda8f, 0xda91, 0xda91, 0xdab8,
-	0xda8f, 0xda8f, 0xda8f, 0xda8f, 0xda8f, 0xda8f, 0xda8f, 0xda8f,
-	0xda8f, 0xda8f, 0xda8f, 0xda8f, 0xda8f, 0xda8f, 0xda8f, 0x080c,
-	0x0d7d, 0x080c, 0x95ad, 0x080c, 0x966f, 0x0036, 0x0096, 0x6014,
-	0x904d, 0x01d8, 0x080c, 0xc814, 0x01c0, 0x6003, 0x0002, 0x6010,
-	0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1178, 0x2019, 0x0004,
-	0x080c, 0xe241, 0x6017, 0x0000, 0x6018, 0x9005, 0x1120, 0x2001,
-	0x1987, 0x2004, 0x601a, 0x6003, 0x0007, 0x009e, 0x003e, 0x0005,
-	0x0096, 0x080c, 0x95ad, 0x080c, 0x966f, 0x080c, 0xc814, 0x0120,
-	0x6014, 0x2048, 0x080c, 0x106c, 0x080c, 0xac04, 0x009e, 0x0005,
-	0x0002, 0xdadc, 0xdaf1, 0xdade, 0xdb06, 0xdadc, 0xdadc, 0xdadc,
-	0xdadc, 0xdadc, 0xdadc, 0xdadc, 0xdadc, 0xdadc, 0xdadc, 0xdadc,
-	0xdadc, 0xdadc, 0xdadc, 0xdadc, 0x080c, 0x0d7d, 0x0096, 0x6014,
-	0x2048, 0xa87c, 0xd0b4, 0x0138, 0x6003, 0x0007, 0x2009, 0x0043,
-	0x080c, 0xac68, 0x0010, 0x6003, 0x0004, 0x080c, 0x966f, 0x009e,
-	0x0005, 0x080c, 0xc814, 0x0138, 0x6114, 0x0096, 0x2148, 0xa97c,
-	0x009e, 0xd1ec, 0x1138, 0x080c, 0x8890, 0x080c, 0xabc9, 0x080c,
-	0x966f, 0x0005, 0x080c, 0xe4a1, 0x0db0, 0x0cc8, 0x6003, 0x0001,
-	0x6007, 0x0041, 0x2009, 0xa022, 0x080c, 0x91ed, 0x0005, 0x9182,
-	0x0040, 0x0002, 0xdb25, 0xdb27, 0xdb25, 0xdb25, 0xdb25, 0xdb25,
-	0xdb25, 0xdb25, 0xdb25, 0xdb25, 0xdb25, 0xdb25, 0xdb25, 0xdb25,
-	0xdb25, 0xdb25, 0xdb25, 0xdb28, 0xdb25, 0x080c, 0x0d7d, 0x0005,
-	0x00d6, 0x080c, 0x8890, 0x00de, 0x080c, 0xe4f9, 0x080c, 0xabc9,
-	0x0005, 0x9182, 0x0040, 0x0002, 0xdb47, 0xdb47, 0xdb47, 0xdb47,
-	0xdb47, 0xdb47, 0xdb47, 0xdb47, 0xdb47, 0xdb49, 0xdb74, 0xdb47,
-	0xdb47, 0xdb47, 0xdb47, 0xdb74, 0xdb47, 0xdb47, 0xdb47, 0x080c,
-	0x0d7d, 0x6014, 0x0096, 0x2048, 0xa87c, 0xd0fc, 0x0168, 0x908c,
-	0x0003, 0x918e, 0x0002, 0x0180, 0x6144, 0xd1e4, 0x1168, 0x2009,
-	0x0041, 0x009e, 0x0804, 0xdc34, 0x6003, 0x0007, 0x601b, 0x0000,
-	0x080c, 0x8890, 0x009e, 0x0005, 0x6014, 0x2048, 0xa97c, 0xd1ec,
-	0x1130, 0x080c, 0x8890, 0x080c, 0xabc9, 0x009e, 0x0005, 0x080c,
-	0xe4a1, 0x0db8, 0x009e, 0x0005, 0x2001, 0x180c, 0x200c, 0xc1d4,
-	0x2102, 0x0036, 0x080c, 0x960a, 0x080c, 0x966f, 0x6014, 0x0096,
-	0x2048, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0188,
-	0xa87c, 0x9084, 0x0003, 0x9086, 0x0002, 0x0140, 0xa8ac, 0x6330,
-	0x931a, 0x6332, 0xa8b0, 0x632c, 0x931b, 0x632e, 0x6003, 0x0002,
-	0x0080, 0x2019, 0x0004, 0x080c, 0xe241, 0x6018, 0x9005, 0x1128,
-	0x2001, 0x1987, 0x2004, 0x8003, 0x601a, 0x6017, 0x0000, 0x6003,
-	0x0007, 0x009e, 0x003e, 0x0005, 0x9182, 0x0040, 0x0002, 0xdbc3,
-	0xdbc3, 0xdbc3, 0xdbc3, 0xdbc3, 0xdbc3, 0xdbc3, 0xdbc3, 0xdbc5,
-	0xdbc3, 0xdbc3, 0xdbc3, 0xdbc3, 0xdbc3, 0xdbc3, 0xdbc3, 0xdbc3,
-	0xdbc3, 0xdbc3, 0xdc10, 0x080c, 0x0d7d, 0x6014, 0x0096, 0x2048,
-	0xa834, 0xaa38, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1bc,
-	0x1190, 0x920d, 0x1518, 0xa87c, 0xd0fc, 0x0128, 0x2009, 0x0041,
-	0x009e, 0x0804, 0xdc34, 0x6003, 0x0007, 0x601b, 0x0000, 0x080c,
-	0x8890, 0x009e, 0x0005, 0x6124, 0xd1f4, 0x1d58, 0x0006, 0x0046,
-	0xacac, 0x9422, 0xa9b0, 0x2200, 0x910b, 0x6030, 0x9420, 0x6432,
-	0x602c, 0x9109, 0x612e, 0x004e, 0x000e, 0x08d8, 0x6110, 0x00b6,
-	0x2158, 0xb900, 0x00be, 0xd1bc, 0x1178, 0x2009, 0x180e, 0x210c,
-	0xd19c, 0x0118, 0x6003, 0x0007, 0x0010, 0x6003, 0x0006, 0x00e9,
-	0x080c, 0x8892, 0x009e, 0x0005, 0x6003, 0x0002, 0x009e, 0x0005,
-	0x6024, 0xd0f4, 0x0128, 0x080c, 0x1670, 0x1904, 0xdbc5, 0x0005,
-	0x6014, 0x0096, 0x2048, 0xa834, 0xa938, 0x009e, 0x9105, 0x1120,
-	0x080c, 0x1670, 0x1904, 0xdbc5, 0x0005, 0xd2fc, 0x0140, 0x8002,
-	0x8000, 0x8212, 0x9291, 0x0000, 0x2009, 0x0009, 0x0010, 0x2009,
-	0x0015, 0xaa9a, 0xa896, 0x0005, 0x9182, 0x0040, 0x0208, 0x0062,
-	0x9186, 0x0013, 0x0120, 0x9186, 0x0014, 0x190c, 0x0d7d, 0x6024,
-	0xd0dc, 0x090c, 0x0d7d, 0x0005, 0xdc57, 0xdc63, 0xdc6f, 0xdc7b,
-	0xdc57, 0xdc57, 0xdc57, 0xdc57, 0xdc5e, 0xdc59, 0xdc59, 0xdc57,
-	0xdc57, 0xdc57, 0xdc57, 0xdc59, 0xdc57, 0xdc59, 0xdc57, 0x080c,
-	0x0d7d, 0x6024, 0xd0dc, 0x090c, 0x0d7d, 0x0005, 0x6014, 0x9005,
-	0x190c, 0x0d7d, 0x0005, 0x6003, 0x0001, 0x6106, 0x0126, 0x2091,
-	0x8000, 0x2009, 0xa022, 0x080c, 0x91cf, 0x012e, 0x0005, 0x6003,
-	0x0004, 0x6106, 0x0126, 0x2091, 0x8000, 0x2009, 0xa001, 0x080c,
-	0x91ed, 0x012e, 0x0005, 0x6003, 0x0003, 0x6106, 0x080c, 0x1c03,
-	0x0126, 0x2091, 0x8000, 0x6014, 0x0096, 0x2048, 0xa87c, 0xd0fc,
-	0x0188, 0x9084, 0x0003, 0x9086, 0x0002, 0x01a0, 0x6024, 0xd0cc,
-	0x1148, 0xd0c4, 0x1138, 0xa8a8, 0x9005, 0x1120, 0x6144, 0x918d,
-	0xb035, 0x0018, 0x6144, 0x918d, 0xa035, 0x009e, 0x080c, 0x9234,
-	0x012e, 0x0005, 0x6144, 0x918d, 0xa032, 0x0cb8, 0x0126, 0x2091,
-	0x8000, 0x0036, 0x0096, 0x9182, 0x0040, 0x0023, 0x009e, 0x003e,
-	0x012e, 0x0005, 0xdcc2, 0xdcc4, 0xdcd9, 0xdcf3, 0xdcc2, 0xdcc2,
-	0xdcc2, 0xdcc2, 0xdcc2, 0xdcc2, 0xdcc2, 0xdcc2, 0xdcc2, 0xdcc2,
-	0xdcc2, 0xdcc2, 0x080c, 0x0d7d, 0x6014, 0x2048, 0xa87c, 0xd0fc,
-	0x0510, 0x909c, 0x0003, 0x939e, 0x0003, 0x01e8, 0x6003, 0x0001,
-	0x6106, 0x0126, 0x2091, 0x8000, 0x2009, 0xa022, 0x080c, 0x91ed,
-	0x0470, 0x6014, 0x2048, 0xa87c, 0xd0fc, 0x0168, 0x909c, 0x0003,
-	0x939e, 0x0003, 0x0140, 0x6003, 0x0001, 0x6106, 0x2009, 0xa001,
-	0x080c, 0x91ed, 0x00e0, 0x901e, 0x6316, 0x631a, 0x2019, 0x0004,
-	0x080c, 0xe241, 0x00a0, 0x6014, 0x2048, 0xa87c, 0xd0fc, 0x0d98,
-	0x909c, 0x0003, 0x939e, 0x0003, 0x0d70, 0x6003, 0x0003, 0x6106,
-	0x080c, 0x1c03, 0x6144, 0x918d, 0xa035, 0x080c, 0x9234, 0x0005,
-	0x080c, 0x95ad, 0x6114, 0x81ff, 0x0158, 0x0096, 0x2148, 0x080c,
-	0xe5f6, 0x0036, 0x2019, 0x0029, 0x080c, 0xe241, 0x003e, 0x009e,
-	0x080c, 0xac04, 0x080c, 0x966f, 0x0005, 0x080c, 0x960a, 0x6114,
-	0x81ff, 0x0158, 0x0096, 0x2148, 0x080c, 0xe5f6, 0x0036, 0x2019,
-	0x0029, 0x080c, 0xe241, 0x003e, 0x009e, 0x080c, 0xac04, 0x0005,
-	0x9182, 0x0085, 0x0002, 0xdd42, 0xdd40, 0xdd40, 0xdd4e, 0xdd40,
-	0xdd40, 0xdd40, 0xdd40, 0xdd40, 0xdd40, 0xdd40, 0xdd40, 0xdd40,
-	0x080c, 0x0d7d, 0x6003, 0x000b, 0x6106, 0x0126, 0x2091, 0x8000,
-	0x2009, 0x8020, 0x080c, 0x91ed, 0x012e, 0x0005, 0x0026, 0x00e6,
-	0x080c, 0xe498, 0x0118, 0x080c, 0xabc9, 0x0440, 0x2071, 0x0260,
-	0x7224, 0x6216, 0x2001, 0x180e, 0x2004, 0xd0e4, 0x0150, 0x6010,
-	0x00b6, 0x2058, 0xbca0, 0x00be, 0x2c00, 0x2011, 0x014e, 0x080c,
-	0xaef6, 0x7220, 0x080c, 0xe0d7, 0x0118, 0x6007, 0x0086, 0x0040,
-	0x6007, 0x0087, 0x7224, 0x9296, 0xffff, 0x1110, 0x6007, 0x0086,
-	0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x91ed, 0x00ee, 0x002e,
-	0x0005, 0x9186, 0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c,
-	0x0d7d, 0x908a, 0x0092, 0x1a0c, 0x0d7d, 0x9082, 0x0085, 0x00a2,
-	0x9186, 0x0027, 0x0130, 0x9186, 0x0014, 0x0118, 0x080c, 0xac85,
-	0x0050, 0x2001, 0x0007, 0x080c, 0x659a, 0x080c, 0x95ad, 0x080c,
-	0xac04, 0x080c, 0x966f, 0x0005, 0xddb1, 0xddb3, 0xddb3, 0xddb1,
-	0xddb1, 0xddb1, 0xddb1, 0xddb1, 0xddb1, 0xddb1, 0xddb1, 0xddb1,
-	0xddb1, 0x080c, 0x0d7d, 0x080c, 0xac04, 0x080c, 0x966f, 0x0005,
-	0x9182, 0x0085, 0x0a0c, 0x0d7d, 0x9182, 0x0092, 0x1a0c, 0x0d7d,
-	0x9182, 0x0085, 0x0002, 0xddd0, 0xddd0, 0xddd0, 0xddd2, 0xddd0,
-	0xddd0, 0xddd0, 0xddd0, 0xddd0, 0xddd0, 0xddd0, 0xddd0, 0xddd0,
-	0x080c, 0x0d7d, 0x0005, 0x9186, 0x0013, 0x0148, 0x9186, 0x0014,
-	0x0130, 0x9186, 0x0027, 0x0118, 0x080c, 0xac85, 0x0020, 0x080c,
-	0x95ad, 0x080c, 0xac04, 0x0005, 0x0036, 0x080c, 0xe4f9, 0x604b,
-	0x0000, 0x2019, 0x000b, 0x0031, 0x6023, 0x0006, 0x6003, 0x0007,
-	0x003e, 0x0005, 0x0126, 0x0036, 0x2091, 0x8000, 0x2001, 0x0382,
-	0x2004, 0x9084, 0x0007, 0x0006, 0x9086, 0x0003, 0x0110, 0x080c,
-	0xa872, 0x0086, 0x2c40, 0x0096, 0x904e, 0x080c, 0xa1f4, 0x009e,
-	0x008e, 0x1550, 0x0076, 0x2c38, 0x080c, 0xa29f, 0x007e, 0x1520,
-	0x6000, 0x9086, 0x0000, 0x0500, 0x6020, 0x9086, 0x0007, 0x01e0,
-	0x0096, 0x601c, 0xd084, 0x0140, 0x080c, 0xe4f9, 0x080c, 0xcf46,
-	0x080c, 0x1a6a, 0x6023, 0x0007, 0x6014, 0x2048, 0x080c, 0xc814,
-	0x0110, 0x080c, 0xe241, 0x009e, 0x6017, 0x0000, 0x080c, 0xe4f9,
-	0x6023, 0x0007, 0x080c, 0xcf46, 0x000e, 0x9086, 0x0003, 0x0110,
-	0x080c, 0xa88e, 0x003e, 0x012e, 0x0005, 0x00f6, 0x00c6, 0x00b6,
-	0x0036, 0x0156, 0x2079, 0x0260, 0x7938, 0x783c, 0x080c, 0x25fb,
-	0x15d8, 0x0016, 0x00c6, 0x080c, 0x661e, 0x15a0, 0x001e, 0x00c6,
-	0x2160, 0x080c, 0xcf43, 0x00ce, 0x002e, 0x0026, 0x0016, 0x080c,
-	0xa872, 0x2019, 0x0029, 0x080c, 0xa366, 0x080c, 0x9374, 0x0076,
-	0x903e, 0x080c, 0x9246, 0x007e, 0x001e, 0x0076, 0x903e, 0x080c,
-	0xdfc0, 0x007e, 0x080c, 0xa88e, 0x0026, 0xba04, 0x9294, 0xff00,
-	0x8217, 0x9286, 0x0006, 0x0118, 0x9286, 0x0004, 0x1118, 0xbaa0,
-	0x080c, 0x32b7, 0x002e, 0x001e, 0x080c, 0x603c, 0xbe12, 0xbd16,
-	0x9006, 0x0010, 0x00ce, 0x001e, 0x015e, 0x003e, 0x00be, 0x00ce,
-	0x00fe, 0x0005, 0x00c6, 0x00d6, 0x00b6, 0x0016, 0x2009, 0x1824,
-	0x2104, 0x9086, 0x0074, 0x1904, 0xdee3, 0x2069, 0x0260, 0x6944,
-	0x9182, 0x0100, 0x06e0, 0x6940, 0x9184, 0x8000, 0x0904, 0xdee0,
-	0x2001, 0x197c, 0x2004, 0x9005, 0x1140, 0x6010, 0x2058, 0xb884,
-	0x9005, 0x0118, 0x9184, 0x0800, 0x0598, 0x6948, 0x918a, 0x0001,
-	0x0648, 0x080c, 0xe65e, 0x0118, 0x6978, 0xd1fc, 0x11b8, 0x2009,
-	0x0205, 0x200b, 0x0001, 0x693c, 0x81ff, 0x1198, 0x6944, 0x9182,
-	0x0100, 0x02a8, 0x6940, 0x81ff, 0x1178, 0x6948, 0x918a, 0x0001,
-	0x0288, 0x6950, 0x918a, 0x0001, 0x0298, 0x00d0, 0x6017, 0x0100,
-	0x00a0, 0x6017, 0x0300, 0x0088, 0x6017, 0x0500, 0x0070, 0x6017,
-	0x0700, 0x0058, 0x6017, 0x0900, 0x0040, 0x6017, 0x0b00, 0x0028,
-	0x6017, 0x0f00, 0x0010, 0x6017, 0x2d00, 0x9085, 0x0001, 0x0008,
-	0x9006, 0x001e, 0x00be, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00b6,
-	0x0026, 0x0036, 0x0156, 0x6210, 0x2258, 0xbb04, 0x9394, 0x00ff,
-	0x9286, 0x0006, 0x0180, 0x9286, 0x0004, 0x0168, 0x9394, 0xff00,
-	0x8217, 0x9286, 0x0006, 0x0138, 0x9286, 0x0004, 0x0120, 0x080c,
-	0x662d, 0x0804, 0xdf4f, 0x2011, 0x0276, 0x20a9, 0x0004, 0x0096,
-	0x2b48, 0x2019, 0x000a, 0x080c, 0xbb9e, 0x009e, 0x15c8, 0x2011,
-	0x027a, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c,
-	0xbb9e, 0x009e, 0x1568, 0x0046, 0x0016, 0xbaa0, 0x2220, 0x9006,
-	0x2009, 0x1848, 0x210c, 0xd1a4, 0x0138, 0x2009, 0x0029, 0x080c,
-	0xe29e, 0xb800, 0xc0e5, 0xb802, 0x080c, 0xa872, 0x2019, 0x0029,
-	0x080c, 0x9374, 0x0076, 0x2039, 0x0000, 0x080c, 0x9246, 0x2c08,
-	0x080c, 0xdfc0, 0x007e, 0x080c, 0xa88e, 0x2001, 0x0007, 0x080c,
-	0x659a, 0x2001, 0x0007, 0x080c, 0x656e, 0x001e, 0x004e, 0x9006,
-	0x015e, 0x003e, 0x002e, 0x00be, 0x00ce, 0x0005, 0x00d6, 0x2069,
-	0x026e, 0x6800, 0x9086, 0x0800, 0x0118, 0x6017, 0x0000, 0x0008,
-	0x9006, 0x00de, 0x0005, 0x00b6, 0x00f6, 0x0016, 0x0026, 0x0036,
-	0x0156, 0x2079, 0x026c, 0x7930, 0x7834, 0x080c, 0x25fb, 0x11d0,
-	0x080c, 0x661e, 0x11b8, 0x2011, 0x0270, 0x20a9, 0x0004, 0x0096,
-	0x2b48, 0x2019, 0x000a, 0x080c, 0xbb9e, 0x009e, 0x1158, 0x2011,
-	0x0274, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c,
-	0xbb9e, 0x009e, 0x015e, 0x003e, 0x002e, 0x001e, 0x00fe, 0x00be,
-	0x0005, 0x00b6, 0x0006, 0x0016, 0x0026, 0x0036, 0x0156, 0x2011,
-	0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x25fb, 0x11d0, 0x080c,
-	0x661e, 0x11b8, 0x2011, 0x0276, 0x20a9, 0x0004, 0x0096, 0x2b48,
-	0x2019, 0x000a, 0x080c, 0xbb9e, 0x009e, 0x1158, 0x2011, 0x027a,
-	0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c, 0xbb9e,
-	0x009e, 0x015e, 0x003e, 0x002e, 0x001e, 0x000e, 0x00be, 0x0005,
-	0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066, 0x0056, 0x0046, 0x0026,
-	0x0126, 0x2091, 0x8000, 0x080c, 0xa8d0, 0x0106, 0x190c, 0xa872,
-	0x2740, 0x2029, 0x19f3, 0x252c, 0x2021, 0x19fa, 0x2424, 0x2061,
-	0x1ddc, 0x2071, 0x1800, 0x7654, 0x7074, 0x81ff, 0x0150, 0x0006,
-	0x9186, 0x1b32, 0x000e, 0x0128, 0x8001, 0x9602, 0x1a04, 0xe065,
-	0x0018, 0x9606, 0x0904, 0xe065, 0x080c, 0x8b5f, 0x0904, 0xe05c,
-	0x2100, 0x9c06, 0x0904, 0xe05c, 0x080c, 0xe2df, 0x1904, 0xe05c,
-	0x080c, 0xe67b, 0x0904, 0xe05c, 0x080c, 0xe2cf, 0x0904, 0xe05c,
-	0x6720, 0x9786, 0x0001, 0x1148, 0x080c, 0x335c, 0x0904, 0xe0a7,
-	0x6004, 0x9086, 0x0000, 0x1904, 0xe0a7, 0x9786, 0x0004, 0x0904,
-	0xe0a7, 0x9786, 0x0007, 0x0904, 0xe05c, 0x2500, 0x9c06, 0x0904,
-	0xe05c, 0x2400, 0x9c06, 0x0904, 0xe05c, 0x88ff, 0x0118, 0x605c,
-	0x9906, 0x15d0, 0x0096, 0x6043, 0xffff, 0x6000, 0x9086, 0x0004,
-	0x1120, 0x0016, 0x080c, 0x1a6a, 0x001e, 0x9786, 0x000a, 0x0148,
-	0x080c, 0xca29, 0x1130, 0x080c, 0xb591, 0x009e, 0x080c, 0xac04,
-	0x0418, 0x6014, 0x2048, 0x080c, 0xc814, 0x01d8, 0x9786, 0x0003,
-	0x1588, 0xa867, 0x0103, 0xa87c, 0xd0cc, 0x0130, 0x0096, 0xa878,
-	0x2048, 0x080c, 0x0fec, 0x009e, 0xab7a, 0xa877, 0x0000, 0x080c,
-	0xe5f6, 0x0016, 0x080c, 0xcb12, 0x080c, 0x6d64, 0x001e, 0x080c,
-	0xca03, 0x009e, 0x080c, 0xac04, 0x9ce0, 0x001c, 0x2001, 0x181a,
-	0x2004, 0x9c02, 0x1210, 0x0804, 0xdfd9, 0x010e, 0x190c, 0xa88e,
-	0x012e, 0x002e, 0x004e, 0x005e, 0x006e, 0x007e, 0x008e, 0x00ce,
-	0x00ee, 0x0005, 0x9786, 0x0006, 0x1150, 0x9386, 0x0005, 0x0128,
-	0x080c, 0xe5f6, 0x080c, 0xe241, 0x08e0, 0x009e, 0x08e8, 0x9786,
-	0x0009, 0x11f8, 0x6000, 0x9086, 0x0004, 0x01c0, 0x6000, 0x9086,
-	0x0003, 0x11a0, 0x080c, 0x960a, 0x0096, 0x6114, 0x2148, 0x080c,
-	0xc814, 0x0118, 0x6010, 0x080c, 0x6d70, 0x009e, 0x00c6, 0x080c,
-	0xabc9, 0x00ce, 0x0036, 0x080c, 0x966f, 0x003e, 0x009e, 0x0804,
-	0xe05c, 0x9786, 0x000a, 0x0904, 0xe043, 0x0804, 0xe041, 0x81ff,
-	0x0904, 0xe05c, 0x9180, 0x0001, 0x2004, 0x9086, 0x0018, 0x0138,
-	0x9180, 0x0001, 0x2004, 0x9086, 0x002d, 0x1904, 0xe05c, 0x6000,
-	0x9086, 0x0002, 0x1904, 0xe05c, 0x080c, 0xca18, 0x0138, 0x080c,
-	0xca29, 0x1904, 0xe05c, 0x080c, 0xb591, 0x0038, 0x080c, 0x3215,
-	0x080c, 0xca29, 0x1110, 0x080c, 0xb591, 0x080c, 0xac04, 0x0804,
-	0xe05c, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, 0x0005, 0x00c6,
-	0x00e6, 0x0016, 0x2c08, 0x2170, 0x9006, 0x080c, 0xe268, 0x001e,
-	0x0120, 0x6020, 0x9084, 0x000f, 0x001b, 0x00ee, 0x00ce, 0x0005,
-	0xe0f6, 0xe0f6, 0xe0f6, 0xe0f6, 0xe0f6, 0xe0f6, 0xe0f8, 0xe0f6,
-	0xe0f6, 0xe0f6, 0xe0f6, 0xac04, 0xac04, 0xe0f6, 0x9006, 0x0005,
-	0x0036, 0x0046, 0x0016, 0x7010, 0x00b6, 0x2058, 0xbca0, 0x00be,
-	0x2c00, 0x2009, 0x0020, 0x080c, 0xe29e, 0x001e, 0x004e, 0x2019,
-	0x0002, 0x080c, 0xddf2, 0x003e, 0x9085, 0x0001, 0x0005, 0x0096,
-	0x080c, 0xc814, 0x0140, 0x6014, 0x904d, 0x080c, 0xc41f, 0x687b,
-	0x0005, 0x080c, 0x6d70, 0x009e, 0x080c, 0xac04, 0x9085, 0x0001,
-	0x0005, 0x2001, 0x0001, 0x080c, 0x655a, 0x0156, 0x0016, 0x0026,
-	0x0036, 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011, 0x0276, 0x080c,
-	0xbb8a, 0x003e, 0x002e, 0x001e, 0x015e, 0x9005, 0x0005, 0x00f6,
-	0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066, 0x00b6, 0x0126, 0x2091,
-	0x8000, 0x2740, 0x2061, 0x1ddc, 0x2079, 0x0001, 0x8fff, 0x0904,
-	0xe191, 0x2071, 0x1800, 0x7654, 0x7074, 0x8001, 0x9602, 0x1a04,
-	0xe191, 0x88ff, 0x0120, 0x2800, 0x9c06, 0x1590, 0x2078, 0x080c,
-	0xe2cf, 0x0570, 0x2400, 0x9c06, 0x0558, 0x6720, 0x9786, 0x0006,
-	0x1538, 0x9786, 0x0007, 0x0520, 0x88ff, 0x1140, 0x6010, 0x9b06,
-	0x11f8, 0x85ff, 0x0118, 0x605c, 0x9106, 0x11d0, 0x0096, 0x601c,
-	0xd084, 0x0140, 0x080c, 0xe4f9, 0x080c, 0xcf46, 0x080c, 0x1a6a,
-	0x6023, 0x0007, 0x6014, 0x2048, 0x080c, 0xc814, 0x0120, 0x0046,
-	0x080c, 0xe241, 0x004e, 0x009e, 0x080c, 0xac04, 0x88ff, 0x1198,
-	0x9ce0, 0x001c, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1210, 0x0804,
-	0xe146, 0x9006, 0x012e, 0x00be, 0x006e, 0x007e, 0x008e, 0x00ce,
-	0x00ee, 0x00fe, 0x0005, 0x98c5, 0x0001, 0x0ca0, 0x080c, 0xa872,
-	0x00b6, 0x0076, 0x0056, 0x0086, 0x9046, 0x2029, 0x0001, 0x2c20,
-	0x2019, 0x0002, 0x6210, 0x2258, 0x0096, 0x904e, 0x080c, 0xa1f4,
-	0x009e, 0x008e, 0x903e, 0x080c, 0xa29f, 0x080c, 0xe137, 0x005e,
-	0x007e, 0x00be, 0x080c, 0xa88e, 0x0005, 0x080c, 0xa872, 0x00b6,
-	0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20, 0x2128, 0x20a9,
-	0x007f, 0x900e, 0x0016, 0x0036, 0x080c, 0x661e, 0x1190, 0x0056,
-	0x0086, 0x9046, 0x2508, 0x2029, 0x0001, 0x0096, 0x904e, 0x080c,
-	0xa1f4, 0x009e, 0x008e, 0x903e, 0x080c, 0xa29f, 0x080c, 0xe137,
-	0x005e, 0x003e, 0x001e, 0x8108, 0x1f04, 0xe1ca, 0x015e, 0x00ce,
-	0x007e, 0x005e, 0x004e, 0x00be, 0x080c, 0xa88e, 0x0005, 0x080c,
-	0xa872, 0x00b6, 0x0076, 0x0056, 0x6210, 0x2258, 0x0086, 0x9046,
-	0x2029, 0x0001, 0x2019, 0x0048, 0x0096, 0x904e, 0x080c, 0xa1f4,
-	0x009e, 0x008e, 0x903e, 0x080c, 0xa29f, 0x2c20, 0x080c, 0xe137,
-	0x005e, 0x007e, 0x00be, 0x080c, 0xa88e, 0x0005, 0x080c, 0xa872,
-	0x00b6, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20, 0x20a9,
-	0x0800, 0x900e, 0x0016, 0x0036, 0x080c, 0x661e, 0x11a0, 0x0086,
-	0x9046, 0x2828, 0x0046, 0x2021, 0x0001, 0x080c, 0xe4dd, 0x004e,
-	0x0096, 0x904e, 0x080c, 0xa1f4, 0x009e, 0x008e, 0x903e, 0x080c,
-	0xa29f, 0x080c, 0xe137, 0x003e, 0x001e, 0x8108, 0x1f04, 0xe21a,
-	0x015e, 0x00ce, 0x007e, 0x005e, 0x004e, 0x00be, 0x080c, 0xa88e,
-	0x0005, 0x0016, 0x00f6, 0x080c, 0xc812, 0x0198, 0xa864, 0x9084,
-	0x00ff, 0x9086, 0x0046, 0x0180, 0xa800, 0x907d, 0x0138, 0xa803,
-	0x0000, 0xab82, 0x080c, 0x6d70, 0x2f48, 0x0cb0, 0xab82, 0x080c,
-	0x6d70, 0x00fe, 0x001e, 0x0005, 0xa800, 0x907d, 0x0130, 0xa803,
-	0x0000, 0x080c, 0x6d70, 0x2f48, 0x0cb8, 0x080c, 0x6d70, 0x0c88,
-	0x00e6, 0x0046, 0x0036, 0x2061, 0x1ddc, 0x9005, 0x1138, 0x2071,
-	0x1800, 0x7454, 0x7074, 0x8001, 0x9402, 0x12f8, 0x2100, 0x9c06,
-	0x0188, 0x6000, 0x9086, 0x0000, 0x0168, 0x6008, 0x9206, 0x1150,
-	0x6320, 0x9386, 0x0009, 0x01b0, 0x6010, 0x91a0, 0x0004, 0x2424,
-	0x9406, 0x0140, 0x9ce0, 0x001c, 0x2001, 0x181a, 0x2004, 0x9c02,
-	0x1220, 0x0c20, 0x9085, 0x0001, 0x0008, 0x9006, 0x003e, 0x004e,
-	0x00ee, 0x0005, 0x631c, 0xd3c4, 0x1d68, 0x0c30, 0x0096, 0x0006,
-	0x080c, 0x103a, 0x000e, 0x090c, 0x0d7d, 0xaae2, 0xa867, 0x010d,
-	0xa88e, 0x0026, 0x2010, 0x080c, 0xc802, 0x2001, 0x0000, 0x0120,
-	0x2200, 0x9080, 0x0017, 0x2004, 0x002e, 0xa87a, 0x9186, 0x0020,
-	0x0110, 0xa8e3, 0xffff, 0xa986, 0xac76, 0xa87f, 0x0000, 0x2001,
-	0x198e, 0x2004, 0xa882, 0x9006, 0xa802, 0xa86a, 0xa88a, 0x0126,
-	0x2091, 0x8000, 0x080c, 0x6d70, 0x012e, 0x009e, 0x0005, 0x6700,
-	0x9786, 0x0000, 0x0158, 0x9786, 0x0001, 0x0140, 0x9786, 0x000a,
-	0x0128, 0x9786, 0x0009, 0x0110, 0x9085, 0x0001, 0x0005, 0x00e6,
-	0x6010, 0x9075, 0x0138, 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x9206,
-	0x00ee, 0x0005, 0x9085, 0x0001, 0x0cd8, 0x0016, 0x6004, 0x908e,
-	0x001e, 0x11a0, 0x8007, 0x6134, 0x918c, 0x00ff, 0x9105, 0x6036,
-	0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0005, 0x2001, 0x1987,
-	0x2004, 0x601a, 0x2009, 0x8020, 0x080c, 0x91ed, 0x001e, 0x0005,
-	0xa001, 0xa001, 0x0005, 0x6024, 0xd0e4, 0x0158, 0xd0cc, 0x0118,
-	0x080c, 0xcb59, 0x0030, 0x080c, 0xe4f9, 0x080c, 0x8890, 0x080c,
-	0xabc9, 0x0005, 0x9280, 0x0008, 0x2004, 0x9084, 0x000f, 0x0002,
-	0xe32e, 0xe32e, 0xe32e, 0xe330, 0xe32e, 0xe330, 0xe330, 0xe32e,
-	0xe330, 0xe32e, 0xe32e, 0xe32e, 0xe32e, 0xe32e, 0x9006, 0x0005,
-	0x9085, 0x0001, 0x0005, 0x9280, 0x0008, 0x2004, 0x9084, 0x000f,
-	0x0002, 0xe347, 0xe347, 0xe347, 0xe347, 0xe347, 0xe347, 0xe354,
-	0xe347, 0xe347, 0xe347, 0xe347, 0xe347, 0xe347, 0xe347, 0x6007,
-	0x003b, 0x602f, 0x0009, 0x6017, 0x2a00, 0x6003, 0x0001, 0x2009,
-	0x8020, 0x080c, 0x91ed, 0x0005, 0x0096, 0x00c6, 0x2260, 0x080c,
-	0xe4f9, 0x604b, 0x0000, 0x6024, 0xc0f4, 0xc0e4, 0x6026, 0x603b,
-	0x0000, 0x00ce, 0x00d6, 0x2268, 0x9186, 0x0007, 0x1904, 0xe3ad,
-	0x6814, 0x9005, 0x0138, 0x2048, 0xa87c, 0xd0fc, 0x1118, 0x00de,
-	0x009e, 0x08a8, 0x6007, 0x003a, 0x6003, 0x0001, 0x2009, 0x8020,
-	0x080c, 0x91ed, 0x00c6, 0x2d60, 0x6100, 0x9186, 0x0002, 0x1904,
-	0xe424, 0x6014, 0x9005, 0x1138, 0x6000, 0x9086, 0x0007, 0x190c,
-	0x0d7d, 0x0804, 0xe424, 0x2048, 0x080c, 0xc814, 0x1130, 0x0028,
-	0x2048, 0xa800, 0x9005, 0x1de0, 0x2900, 0x2048, 0xa87c, 0x9084,
-	0x0003, 0x9086, 0x0002, 0x1168, 0xa87c, 0xc0dc, 0xc0f4, 0xa87e,
-	0xa880, 0xc0fc, 0xa882, 0x2009, 0x0043, 0x080c, 0xdc34, 0x0804,
-	0xe424, 0x2009, 0x0041, 0x0804, 0xe41e, 0x9186, 0x0005, 0x15a0,
-	0x6814, 0x2048, 0xa87c, 0xd0bc, 0x1120, 0x00de, 0x009e, 0x0804,
-	0xe347, 0xd0b4, 0x0128, 0xd0fc, 0x090c, 0x0d7d, 0x0804, 0xe368,
-	0x6007, 0x003a, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x91ed,
-	0x00c6, 0x2d60, 0x6100, 0x9186, 0x0002, 0x0120, 0x9186, 0x0004,
-	0x1904, 0xe424, 0x6814, 0x2048, 0xa97c, 0xc1f4, 0xc1dc, 0xa97e,
-	0xa980, 0xc1fc, 0xc1bc, 0xa982, 0x00f6, 0x2c78, 0x080c, 0x1731,
-	0x00fe, 0x2009, 0x0042, 0x04d0, 0x0036, 0x080c, 0x103a, 0x090c,
-	0x0d7d, 0xa867, 0x010d, 0x9006, 0xa802, 0xa86a, 0xa88a, 0x2d18,
-	0xab8e, 0xa887, 0x0045, 0x2c00, 0xa892, 0x6038, 0xa8a2, 0x2360,
-	0x6024, 0xc0dd, 0x6026, 0x6010, 0x00b6, 0x2058, 0xb8a0, 0x00be,
-	0x2004, 0x635c, 0xab7a, 0xa876, 0x9006, 0xa87e, 0xa882, 0xad9a,
-	0xae96, 0xa89f, 0x0001, 0x080c, 0x6d70, 0x2019, 0x0045, 0x6008,
-	0x2068, 0x080c, 0xddf2, 0x2d00, 0x600a, 0x6023, 0x0006, 0x6003,
-	0x0007, 0x901e, 0x631a, 0x634a, 0x003e, 0x0038, 0x604b, 0x0000,
-	0x6003, 0x0007, 0x080c, 0xdc34, 0x00ce, 0x00de, 0x009e, 0x0005,
-	0x9186, 0x0013, 0x1128, 0x6004, 0x9082, 0x0085, 0x2008, 0x00c2,
-	0x9186, 0x0027, 0x1178, 0x080c, 0x95ad, 0x0036, 0x0096, 0x6014,
-	0x2048, 0x2019, 0x0004, 0x080c, 0xe241, 0x009e, 0x003e, 0x080c,
-	0x966f, 0x0005, 0x9186, 0x0014, 0x0d70, 0x080c, 0xac85, 0x0005,
-	0xe457, 0xe455, 0xe455, 0xe455, 0xe455, 0xe455, 0xe457, 0xe455,
-	0xe455, 0xe455, 0xe455, 0xe455, 0xe455, 0x080c, 0x0d7d, 0x6003,
-	0x000c, 0x080c, 0x966f, 0x0005, 0x9182, 0x0092, 0x1220, 0x9182,
-	0x0085, 0x0208, 0x001a, 0x080c, 0xac85, 0x0005, 0xe473, 0xe473,
-	0xe473, 0xe473, 0xe475, 0xe495, 0xe473, 0xe473, 0xe473, 0xe473,
-	0xe473, 0xe473, 0xe473, 0x080c, 0x0d7d, 0x00d6, 0x2c68, 0x080c,
-	0xab73, 0x01b0, 0x6003, 0x0001, 0x6007, 0x001e, 0x2009, 0x026e,
-	0x210c, 0x613a, 0x2009, 0x026f, 0x210c, 0x613e, 0x600b, 0xffff,
-	0x6910, 0x6112, 0x6023, 0x0004, 0x2009, 0x8020, 0x080c, 0x91ed,
-	0x2d60, 0x080c, 0xabc9, 0x00de, 0x0005, 0x080c, 0xabc9, 0x0005,
-	0x00e6, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0ec, 0x00ee,
-	0x0005, 0x2009, 0x1867, 0x210c, 0xd1ec, 0x05b0, 0x6003, 0x0002,
-	0x6024, 0xc0e5, 0x6026, 0xd0cc, 0x0150, 0x2001, 0x1988, 0x2004,
-	0x604a, 0x2009, 0x1867, 0x210c, 0xd1f4, 0x1520, 0x00a0, 0x2009,
-	0x1867, 0x210c, 0xd1f4, 0x0128, 0x6024, 0xc0e4, 0x6026, 0x9006,
-	0x00d8, 0x2001, 0x1988, 0x200c, 0x2001, 0x1986, 0x2004, 0x9100,
-	0x9080, 0x000a, 0x604a, 0x6010, 0x00b6, 0x2058, 0xb8bc, 0x00be,
-	0x0008, 0x2104, 0x9005, 0x0118, 0x9088, 0x0003, 0x0cd0, 0x2c0a,
-	0x600f, 0x0000, 0x9085, 0x0001, 0x0005, 0x0016, 0x00c6, 0x00e6,
-	0x615c, 0xb8bc, 0x2060, 0x8cff, 0x0180, 0x84ff, 0x1118, 0x605c,
-	0x9106, 0x1138, 0x600c, 0x2072, 0x080c, 0x8890, 0x080c, 0xabc9,
-	0x0010, 0x9cf0, 0x0003, 0x2e64, 0x0c70, 0x00ee, 0x00ce, 0x001e,
-	0x0005, 0x00d6, 0x00b6, 0x6010, 0x2058, 0xb8bc, 0x2068, 0x9005,
-	0x0130, 0x9c06, 0x0110, 0x680c, 0x0cd0, 0x600c, 0x680e, 0x00be,
-	0x00de, 0x0005, 0x0026, 0x0036, 0x0156, 0x2011, 0x182c, 0x2204,
-	0x9084, 0x00ff, 0x2019, 0x026e, 0x2334, 0x9636, 0x1508, 0x8318,
-	0x2334, 0x2204, 0x9084, 0xff00, 0x9636, 0x11d0, 0x2011, 0x0270,
-	0x20a9, 0x0004, 0x6010, 0x0096, 0x2048, 0x2019, 0x000a, 0x080c,
-	0xbb9e, 0x009e, 0x1168, 0x2011, 0x0274, 0x20a9, 0x0004, 0x6010,
-	0x0096, 0x2048, 0x2019, 0x0006, 0x080c, 0xbb9e, 0x009e, 0x1100,
-	0x015e, 0x003e, 0x002e, 0x0005, 0x00e6, 0x2071, 0x1800, 0x080c,
-	0x5fb5, 0x080c, 0x2fb2, 0x00ee, 0x0005, 0x0096, 0x0026, 0x080c,
-	0x103a, 0x090c, 0x0d7d, 0xa85c, 0x9080, 0x001a, 0x20a0, 0x20a9,
-	0x000c, 0xa860, 0x20e8, 0x9006, 0x4004, 0x9186, 0x0046, 0x1118,
-	0xa867, 0x0136, 0x0038, 0xa867, 0x0138, 0x9186, 0x0041, 0x0110,
-	0xa87b, 0x0001, 0x7038, 0x9084, 0xff00, 0x7240, 0x9294, 0xff00,
-	0x8007, 0x9215, 0xaa9a, 0x9186, 0x0046, 0x1168, 0x7038, 0x9084,
-	0x00ff, 0x723c, 0x9294, 0xff00, 0x9215, 0xaa9e, 0x723c, 0x9294,
-	0x00ff, 0xaaa2, 0x0060, 0x7040, 0x9084, 0x00ff, 0x7244, 0x9294,
-	0xff00, 0x9215, 0xaa9e, 0x7244, 0x9294, 0x00ff, 0xaaa2, 0x9186,
-	0x0046, 0x1118, 0x9e90, 0x0012, 0x0010, 0x9e90, 0x001a, 0x2204,
-	0x8007, 0xa8a6, 0x8210, 0x2204, 0x8007, 0xa8aa, 0x8210, 0x2204,
-	0x8007, 0xa8ae, 0x8210, 0x2204, 0x8007, 0xa8b2, 0x8210, 0x9186,
-	0x0046, 0x11b8, 0x9e90, 0x0016, 0x2204, 0x8007, 0xa8b6, 0x8210,
-	0x2204, 0x8007, 0xa8ba, 0x8210, 0x2204, 0x8007, 0xa8be, 0x8210,
-	0x2204, 0x8007, 0xa8c2, 0x8210, 0x2011, 0x0205, 0x2013, 0x0001,
-	0x00b0, 0x9e90, 0x001e, 0x2204, 0x8007, 0xa8b6, 0x8210, 0x2204,
-	0x8007, 0xa8ba, 0x2011, 0x0205, 0x2013, 0x0001, 0x2011, 0x0260,
-	0x2204, 0x8007, 0xa8be, 0x8210, 0x2204, 0x8007, 0xa8c2, 0x9186,
-	0x0046, 0x1118, 0x2011, 0x0262, 0x0010, 0x2011, 0x026a, 0x0146,
-	0x01d6, 0x0036, 0x20a9, 0x0001, 0x2019, 0x0008, 0xa860, 0x20e8,
-	0xa85c, 0x9080, 0x0031, 0x20a0, 0x2204, 0x8007, 0x4004, 0x8210,
-	0x8319, 0x1dd0, 0x003e, 0x01ce, 0x013e, 0x2011, 0x0205, 0x2013,
-	0x0000, 0x002e, 0x080c, 0x6d70, 0x009e, 0x0005, 0x00e6, 0x6010,
-	0x00b6, 0x2058, 0xb800, 0x00be, 0xd0fc, 0x0108, 0x0011, 0x00ee,
-	0x0005, 0xa880, 0xc0e5, 0xa882, 0x0005, 0x00e6, 0x00d6, 0x00c6,
-	0x0076, 0x0066, 0x0056, 0x0046, 0x0026, 0x0016, 0x0126, 0x2091,
-	0x8000, 0x2029, 0x19f3, 0x252c, 0x2021, 0x19fa, 0x2424, 0x2061,
-	0x1ddc, 0x2071, 0x1800, 0x7654, 0x7074, 0x9606, 0x0578, 0x6720,
-	0x9786, 0x0001, 0x0118, 0x9786, 0x0008, 0x1500, 0x2500, 0x9c06,
-	0x01e8, 0x2400, 0x9c06, 0x01d0, 0x080c, 0xe2cf, 0x01b8, 0x080c,
-	0xe2df, 0x11a0, 0x6000, 0x9086, 0x0004, 0x1120, 0x0016, 0x080c,
-	0x1a6a, 0x001e, 0x080c, 0xca18, 0x1110, 0x080c, 0x3215, 0x080c,
-	0xca29, 0x1110, 0x080c, 0xb591, 0x080c, 0xac04, 0x9ce0, 0x001c,
-	0x2001, 0x181a, 0x2004, 0x9c02, 0x1208, 0x0858, 0x012e, 0x001e,
-	0x002e, 0x004e, 0x005e, 0x006e, 0x007e, 0x00ce, 0x00de, 0x00ee,
-	0x0005, 0x2001, 0x1810, 0x2004, 0xd0dc, 0x0005, 0x0006, 0x2001,
-	0x1837, 0x2004, 0xd09c, 0x000e, 0x0005, 0x0006, 0x0036, 0x0046,
-	0x080c, 0xcf2e, 0x0168, 0x2019, 0xffff, 0x9005, 0x0128, 0x6010,
-	0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, 0x0004, 0x080c, 0x4cb7,
-	0x004e, 0x003e, 0x000e, 0x6004, 0x9086, 0x0001, 0x1128, 0x080c,
-	0xa366, 0x080c, 0xac04, 0x9006, 0x0005, 0x00e6, 0x00c6, 0x00b6,
-	0x0046, 0x2061, 0x1ddc, 0x2071, 0x1800, 0x7454, 0x7074, 0x8001,
-	0x9402, 0x12b8, 0x2100, 0x9c06, 0x0148, 0x6000, 0x9086, 0x0000,
-	0x0128, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x0140, 0x9ce0, 0x001c,
-	0x2001, 0x181a, 0x2004, 0x9c02, 0x1220, 0x0c60, 0x9085, 0x0001,
-	0x0008, 0x9006, 0x004e, 0x00be, 0x00ce, 0x00ee, 0x0005, 0x0126,
-	0x0006, 0x00e6, 0x0016, 0x2091, 0x8000, 0x2071, 0x1840, 0xd5a4,
-	0x0118, 0x7004, 0x8000, 0x7006, 0xd5b4, 0x0118, 0x7000, 0x8000,
-	0x7002, 0xd5ac, 0x0178, 0x2500, 0x9084, 0x0007, 0x908e, 0x0003,
-	0x0148, 0x908e, 0x0004, 0x0130, 0x908e, 0x0005, 0x0118, 0x2071,
-	0xfffe, 0x0089, 0x001e, 0x00ee, 0x000e, 0x012e, 0x0005, 0x0126,
-	0x0006, 0x00e6, 0x2091, 0x8000, 0x2071, 0xfff6, 0x0021, 0x00ee,
-	0x000e, 0x012e, 0x0005, 0x2e05, 0x8000, 0x2077, 0x1220, 0x8e70,
-	0x2e05, 0x8000, 0x2077, 0x0005, 0x00e6, 0x2071, 0xfff4, 0x0c99,
-	0x00ee, 0x0005, 0x00e6, 0x2071, 0xfff8, 0x0c69, 0x00ee, 0x0005,
-	0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071, 0x1840, 0x7014,
-	0x8000, 0x7016, 0x00ee, 0x000e, 0x012e, 0x0005, 0x0001, 0x0002,
-	0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100, 0x0200,
-	0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000, 0xf93e
+	0x0001, 0x00f0, 0x080c, 0xe14c, 0x0140, 0x96b4, 0xff00, 0x8637,
+	0x9686, 0x0006, 0x0978, 0x0804, 0xd10c, 0x6017, 0x1900, 0x6007,
+	0x0009, 0x0070, 0x080c, 0x3332, 0x1904, 0xd433, 0x080c, 0xe4c3,
+	0x1904, 0xd433, 0x080c, 0xd600, 0x1904, 0xd10c, 0x6007, 0x0012,
+	0x6003, 0x0001, 0x080c, 0x9225, 0x080c, 0x96a0, 0x0005, 0x6007,
+	0x0001, 0x6003, 0x0001, 0x080c, 0x9225, 0x080c, 0x96a0, 0x0cb0,
+	0x6007, 0x0005, 0x0c68, 0x080c, 0xe4c3, 0x1904, 0xd433, 0x080c,
+	0x3332, 0x1904, 0xd433, 0x080c, 0xd600, 0x1904, 0xd10c, 0x6007,
+	0x0020, 0x6003, 0x0001, 0x080c, 0x9225, 0x080c, 0x96a0, 0x0005,
+	0x080c, 0x3332, 0x1904, 0xd433, 0x6007, 0x0023, 0x6003, 0x0001,
+	0x080c, 0x9225, 0x080c, 0x96a0, 0x0005, 0x080c, 0xe4c3, 0x1904,
+	0xd433, 0x080c, 0x3332, 0x1904, 0xd433, 0x080c, 0xd600, 0x1904,
+	0xd10c, 0x0016, 0x0026, 0x00e6, 0x2071, 0x0260, 0x7244, 0x9286,
+	0xffff, 0x0180, 0x2c08, 0x080c, 0xc826, 0x01b0, 0x2260, 0x7240,
+	0x6008, 0x9206, 0x1188, 0x6010, 0x9190, 0x0004, 0x2214, 0x9206,
+	0x01b8, 0x0050, 0x7240, 0x2c08, 0x9006, 0x080c, 0xe293, 0x1180,
+	0x7244, 0x9286, 0xffff, 0x01b0, 0x2160, 0x6007, 0x0026, 0x6017,
+	0x1700, 0x7214, 0x9296, 0xffff, 0x1180, 0x6007, 0x0025, 0x0068,
+	0x6020, 0x9086, 0x0007, 0x1d80, 0x6004, 0x9086, 0x0024, 0x1110,
+	0x080c, 0xabed, 0x2160, 0x6007, 0x0025, 0x6003, 0x0001, 0x080c,
+	0x9225, 0x080c, 0x96a0, 0x00ee, 0x002e, 0x001e, 0x0005, 0x2001,
+	0x0001, 0x080c, 0x6561, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9,
+	0x0004, 0x2019, 0x1805, 0x2011, 0x0276, 0x080c, 0xbbae, 0x003e,
+	0x002e, 0x001e, 0x015e, 0x0120, 0x6007, 0x0031, 0x0804, 0xd220,
+	0x080c, 0xb81f, 0x080c, 0x74e9, 0x1190, 0x0006, 0x0026, 0x0036,
+	0x080c, 0x7503, 0x1138, 0x080c, 0x77ed, 0x080c, 0x6029, 0x080c,
+	0x741a, 0x0010, 0x080c, 0x74bd, 0x003e, 0x002e, 0x000e, 0x0005,
+	0x080c, 0x3332, 0x1904, 0xd433, 0x080c, 0xd600, 0x1904, 0xd10c,
+	0x6106, 0x080c, 0xd61c, 0x1120, 0x6007, 0x002b, 0x0804, 0xd220,
+	0x6007, 0x002c, 0x0804, 0xd220, 0x080c, 0xe4c3, 0x1904, 0xd433,
+	0x080c, 0x3332, 0x1904, 0xd433, 0x080c, 0xd600, 0x1904, 0xd10c,
+	0x6106, 0x080c, 0xd621, 0x1120, 0x6007, 0x002e, 0x0804, 0xd220,
+	0x6007, 0x002f, 0x0804, 0xd220, 0x080c, 0x3332, 0x1904, 0xd433,
+	0x00e6, 0x00d6, 0x00c6, 0x6010, 0x2058, 0xb904, 0x9184, 0x00ff,
+	0x9086, 0x0006, 0x0158, 0x9184, 0xff00, 0x8007, 0x9086, 0x0006,
+	0x0128, 0x00ce, 0x00de, 0x00ee, 0x0804, 0xd227, 0x080c, 0x56de,
+	0xd0e4, 0x0904, 0xd37e, 0x2071, 0x026c, 0x7010, 0x603a, 0x7014,
+	0x603e, 0x7108, 0x720c, 0x080c, 0x6a67, 0x0140, 0x6010, 0x2058,
+	0xb810, 0x9106, 0x1118, 0xb814, 0x9206, 0x0510, 0x080c, 0x6a63,
+	0x15b8, 0x2069, 0x1800, 0x6880, 0x9206, 0x1590, 0x687c, 0x9106,
+	0x1578, 0x7210, 0x080c, 0xc826, 0x0590, 0x080c, 0xd4eb, 0x0578,
+	0x080c, 0xe345, 0x0560, 0x622e, 0x6007, 0x0036, 0x6003, 0x0001,
+	0x2009, 0x8020, 0x080c, 0x921e, 0x00ce, 0x00de, 0x00ee, 0x0005,
+	0x7214, 0x9286, 0xffff, 0x0150, 0x080c, 0xc826, 0x01c0, 0x9280,
+	0x0002, 0x2004, 0x7110, 0x9106, 0x1190, 0x08e0, 0x7210, 0x2c08,
+	0x9085, 0x0001, 0x080c, 0xe293, 0x2c10, 0x2160, 0x0140, 0x0890,
+	0x6007, 0x0037, 0x602f, 0x0009, 0x6017, 0x1500, 0x08b8, 0x6007,
+	0x0037, 0x602f, 0x0003, 0x6017, 0x1700, 0x0880, 0x6007, 0x0012,
+	0x0868, 0x080c, 0x3332, 0x1904, 0xd433, 0x6010, 0x2058, 0xb804,
+	0x9084, 0xff00, 0x8007, 0x9086, 0x0006, 0x1904, 0xd227, 0x00e6,
+	0x00d6, 0x00c6, 0x080c, 0x56de, 0xd0e4, 0x0904, 0xd3f6, 0x2069,
+	0x1800, 0x2071, 0x026c, 0x7008, 0x603a, 0x720c, 0x623e, 0x9286,
+	0xffff, 0x1150, 0x7208, 0x00c6, 0x2c08, 0x9085, 0x0001, 0x080c,
+	0xe293, 0x2c10, 0x00ce, 0x05e8, 0x080c, 0xc826, 0x05d0, 0x7108,
+	0x9280, 0x0002, 0x2004, 0x9106, 0x15a0, 0x00c6, 0x0026, 0x2260,
+	0x080c, 0xc436, 0x002e, 0x00ce, 0x7118, 0x918c, 0xff00, 0x810f,
+	0x9186, 0x0001, 0x0178, 0x9186, 0x0005, 0x0118, 0x9186, 0x0007,
+	0x1198, 0x9280, 0x0005, 0x2004, 0x9005, 0x0170, 0x080c, 0xd4eb,
+	0x0904, 0xd377, 0x0056, 0x7510, 0x7614, 0x080c, 0xe35e, 0x005e,
+	0x00ce, 0x00de, 0x00ee, 0x0005, 0x6007, 0x003b, 0x602f, 0x0009,
+	0x6017, 0x2a00, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x921e,
+	0x0c78, 0x6007, 0x003b, 0x602f, 0x0003, 0x6017, 0x0300, 0x6003,
+	0x0001, 0x2009, 0x8020, 0x080c, 0x921e, 0x0c10, 0x6007, 0x003b,
+	0x602f, 0x000b, 0x6017, 0x0000, 0x0804, 0xd34e, 0x00e6, 0x0026,
+	0x080c, 0x6a29, 0x0550, 0x080c, 0x69c5, 0x080c, 0xe535, 0x1518,
+	0x2071, 0x1800, 0x70dc, 0x9085, 0x0003, 0x70de, 0x00f6, 0x2079,
+	0x0100, 0x72b0, 0x9284, 0x00ff, 0x707e, 0x78e6, 0x9284, 0xff00,
+	0x7280, 0x9205, 0x7082, 0x78ea, 0x00fe, 0x70e7, 0x0000, 0x080c,
+	0x6a67, 0x0120, 0x2011, 0x1a09, 0x2013, 0x07d0, 0xd0ac, 0x1128,
+	0x080c, 0x2fb2, 0x0010, 0x080c, 0xe567, 0x002e, 0x00ee, 0x080c,
+	0xabed, 0x0804, 0xd226, 0x080c, 0xabed, 0x0005, 0x2600, 0x0002,
+	0xd44a, 0xd47b, 0xd48c, 0xd44a, 0xd44a, 0xd44c, 0xd49d, 0xd44a,
+	0xd44a, 0xd44a, 0xd469, 0xd44a, 0xd44a, 0xd44a, 0xd4a8, 0xd4b5,
+	0xd4e6, 0xd44a, 0x080c, 0x0d7d, 0x080c, 0xe4c3, 0x1d20, 0x080c,
+	0x3332, 0x1d08, 0x080c, 0xd600, 0x1148, 0x7038, 0x6016, 0x6007,
+	0x0045, 0x6003, 0x0001, 0x080c, 0x9225, 0x0005, 0x080c, 0x31e7,
+	0x080c, 0xcf67, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x9225,
+	0x0005, 0x080c, 0xe4c3, 0x1938, 0x080c, 0x3332, 0x1920, 0x080c,
+	0xd600, 0x1d60, 0x703c, 0x6016, 0x6007, 0x004a, 0x6003, 0x0001,
+	0x080c, 0x9225, 0x0005, 0x080c, 0x3332, 0x1904, 0xd433, 0x2009,
+	0x0041, 0x080c, 0xe570, 0x6007, 0x0047, 0x6003, 0x0001, 0x080c,
+	0x9225, 0x080c, 0x96a0, 0x0005, 0x080c, 0x3332, 0x1904, 0xd433,
+	0x2009, 0x0042, 0x080c, 0xe570, 0x6007, 0x0047, 0x6003, 0x0001,
+	0x080c, 0x9225, 0x080c, 0x96a0, 0x0005, 0x080c, 0x3332, 0x1904,
+	0xd433, 0x2009, 0x0046, 0x080c, 0xe570, 0x080c, 0xabed, 0x0005,
+	0x080c, 0xd508, 0x0904, 0xd433, 0x6007, 0x004e, 0x6003, 0x0001,
+	0x080c, 0x9225, 0x080c, 0x96a0, 0x0005, 0x6007, 0x004f, 0x6017,
+	0x0000, 0x7134, 0x918c, 0x00ff, 0x81ff, 0x0508, 0x9186, 0x0001,
+	0x1160, 0x7140, 0x2001, 0x19bd, 0x2004, 0x9106, 0x11b0, 0x7144,
+	0x2001, 0x19be, 0x2004, 0x9106, 0x0190, 0x9186, 0x0002, 0x1168,
+	0x2011, 0x0276, 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048, 0x2019,
+	0x000a, 0x080c, 0xbbc2, 0x009e, 0x0110, 0x6017, 0x0001, 0x6003,
+	0x0001, 0x080c, 0x9225, 0x080c, 0x96a0, 0x0005, 0x6007, 0x0050,
+	0x703c, 0x6016, 0x0ca0, 0x0016, 0x00e6, 0x2071, 0x0260, 0x00b6,
+	0x00c6, 0x2260, 0x6010, 0x2058, 0xb8d4, 0xd084, 0x0150, 0x7128,
+	0x6050, 0x9106, 0x1120, 0x712c, 0x604c, 0x9106, 0x0110, 0x9006,
+	0x0010, 0x9085, 0x0001, 0x00ce, 0x00be, 0x00ee, 0x001e, 0x0005,
+	0x0016, 0x0096, 0x0086, 0x00e6, 0x01c6, 0x01d6, 0x0126, 0x2091,
+	0x8000, 0x2071, 0x1800, 0x7090, 0x908a, 0x00f9, 0x16e8, 0x20e1,
+	0x0000, 0x2001, 0x19a0, 0x2003, 0x0000, 0x080c, 0x1053, 0x05a0,
+	0x2900, 0x6016, 0x7090, 0x8004, 0xa816, 0x908a, 0x001e, 0x02d0,
+	0xa833, 0x001e, 0x20a9, 0x001e, 0xa860, 0x20e8, 0xa85c, 0x9080,
+	0x001b, 0x20a0, 0x2001, 0x19a0, 0x0016, 0x200c, 0x0471, 0x001e,
+	0x2940, 0x080c, 0x1053, 0x01c0, 0x2900, 0xa006, 0x2100, 0x81ff,
+	0x0180, 0x0c18, 0xa832, 0x20a8, 0xa860, 0x20e8, 0xa85c, 0x9080,
+	0x001b, 0x20a0, 0x2001, 0x19a0, 0x0016, 0x200c, 0x00b1, 0x001e,
+	0x0000, 0x9085, 0x0001, 0x0048, 0x2071, 0x1800, 0x7093, 0x0000,
+	0x6014, 0x2048, 0x080c, 0x0fec, 0x9006, 0x012e, 0x01de, 0x01ce,
+	0x00ee, 0x008e, 0x009e, 0x001e, 0x0005, 0x0006, 0x0016, 0x0026,
+	0x0036, 0x00c6, 0x918c, 0xffff, 0x11a8, 0x080c, 0x2189, 0x2099,
+	0x026c, 0x2001, 0x0014, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003,
+	0x00f8, 0x20a8, 0x4003, 0x22a8, 0x8108, 0x080c, 0x2189, 0x2099,
+	0x0260, 0x0ca8, 0x080c, 0x2189, 0x2061, 0x19a0, 0x6004, 0x2098,
+	0x6008, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003, 0x0048, 0x20a8,
+	0x4003, 0x22a8, 0x8108, 0x080c, 0x2189, 0x2099, 0x0260, 0x0ca8,
+	0x2061, 0x19a0, 0x2019, 0x0280, 0x3300, 0x931e, 0x0110, 0x6006,
+	0x0020, 0x2001, 0x0260, 0x6006, 0x8108, 0x2162, 0x9292, 0x0021,
+	0x9296, 0xffff, 0x620a, 0x00ce, 0x003e, 0x002e, 0x001e, 0x000e,
+	0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00c6, 0x81ff, 0x11b8,
+	0x080c, 0x21a1, 0x20a1, 0x024c, 0x2001, 0x0014, 0x3518, 0x9312,
+	0x1218, 0x23a8, 0x4003, 0x0418, 0x20a8, 0x4003, 0x82ff, 0x01f8,
+	0x22a8, 0x8108, 0x080c, 0x21a1, 0x20a1, 0x0240, 0x0c98, 0x080c,
+	0x21a1, 0x2061, 0x19a3, 0x6004, 0x20a0, 0x6008, 0x3518, 0x9312,
+	0x1218, 0x23a8, 0x4003, 0x0058, 0x20a8, 0x4003, 0x82ff, 0x0138,
+	0x22a8, 0x8108, 0x080c, 0x21a1, 0x20a1, 0x0240, 0x0c98, 0x2061,
+	0x19a3, 0x2019, 0x0260, 0x3400, 0x931e, 0x0110, 0x6006, 0x0020,
+	0x2001, 0x0240, 0x6006, 0x8108, 0x2162, 0x9292, 0x0021, 0x9296,
+	0xffff, 0x620a, 0x00ce, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005,
+	0x00b6, 0x0066, 0x6610, 0x2658, 0xbe04, 0x96b4, 0xff00, 0x8637,
+	0x9686, 0x0006, 0x0170, 0x9686, 0x0004, 0x0158, 0xbe04, 0x96b4,
+	0x00ff, 0x9686, 0x0006, 0x0128, 0x9686, 0x0004, 0x0110, 0x9085,
+	0x0001, 0x006e, 0x00be, 0x0005, 0x00d6, 0x080c, 0xd696, 0x00de,
+	0x0005, 0x00d6, 0x080c, 0xd6a3, 0x1520, 0x680c, 0x908c, 0xff00,
+	0x6820, 0x9084, 0x00ff, 0x9115, 0x6216, 0x6824, 0x602e, 0xd1e4,
+	0x0130, 0x9006, 0x080c, 0xe690, 0x2009, 0x0001, 0x0078, 0xd1ec,
+	0x0180, 0x6920, 0x918c, 0x00ff, 0x6824, 0x080c, 0x25fb, 0x1148,
+	0x2001, 0x0001, 0x080c, 0xe690, 0x2110, 0x900e, 0x080c, 0x323c,
+	0x0018, 0x9085, 0x0001, 0x0008, 0x9006, 0x00de, 0x0005, 0x00b6,
+	0x00c6, 0x080c, 0xac5f, 0x0598, 0x0016, 0x0026, 0x00c6, 0x2011,
+	0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x25fb, 0x1568, 0x080c,
+	0x65c4, 0x1550, 0xbe12, 0xbd16, 0x00ce, 0x002e, 0x001e, 0x2b00,
+	0x6012, 0x080c, 0xe4c3, 0x11c8, 0x080c, 0x3332, 0x11b0, 0x080c,
+	0xd600, 0x0500, 0x2001, 0x0007, 0x080c, 0x6575, 0x2001, 0x0007,
+	0x080c, 0x65a1, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001,
+	0x6003, 0x0001, 0x080c, 0x9225, 0x0010, 0x080c, 0xabed, 0x9085,
+	0x0001, 0x00ce, 0x00be, 0x0005, 0x080c, 0xabed, 0x00ce, 0x002e,
+	0x001e, 0x0ca8, 0x080c, 0xabed, 0x9006, 0x0c98, 0x2069, 0x026d,
+	0x6800, 0x9082, 0x0010, 0x1228, 0x6017, 0x0000, 0x9085, 0x0001,
+	0x0008, 0x9006, 0x0005, 0x6017, 0x0000, 0x2069, 0x026c, 0x6808,
+	0x9084, 0xff00, 0x9086, 0x0800, 0x1190, 0x6904, 0x9186, 0x0018,
+	0x0118, 0x9186, 0x0014, 0x1158, 0x810f, 0x6800, 0x9084, 0x00ff,
+	0x910d, 0x6162, 0x908e, 0x0014, 0x0110, 0x908e, 0x0010, 0x0005,
+	0x6004, 0x90b2, 0x0053, 0x1a0c, 0x0d7d, 0x91b6, 0x0013, 0x1130,
+	0x2008, 0x91b2, 0x0040, 0x1a04, 0xd7e5, 0x0092, 0x91b6, 0x0027,
+	0x0120, 0x91b6, 0x0014, 0x190c, 0x0d7d, 0x2001, 0x0007, 0x080c,
+	0x65a1, 0x080c, 0x95de, 0x080c, 0xac28, 0x080c, 0x96a0, 0x0005,
+	0xd720, 0xd722, 0xd720, 0xd720, 0xd720, 0xd722, 0xd72f, 0xd7e2,
+	0xd77f, 0xd7e2, 0xd793, 0xd7e2, 0xd72f, 0xd7e2, 0xd7da, 0xd7e2,
+	0xd7da, 0xd7e2, 0xd7e2, 0xd720, 0xd720, 0xd720, 0xd720, 0xd720,
+	0xd720, 0xd720, 0xd720, 0xd720, 0xd720, 0xd720, 0xd722, 0xd720,
+	0xd7e2, 0xd720, 0xd720, 0xd7e2, 0xd720, 0xd7df, 0xd7e2, 0xd720,
+	0xd720, 0xd720, 0xd720, 0xd7e2, 0xd7e2, 0xd720, 0xd7e2, 0xd7e2,
+	0xd720, 0xd72a, 0xd720, 0xd720, 0xd720, 0xd720, 0xd7de, 0xd7e2,
+	0xd720, 0xd720, 0xd7e2, 0xd7e2, 0xd720, 0xd720, 0xd720, 0xd720,
+	0x080c, 0x0d7d, 0x080c, 0xcf6a, 0x6003, 0x0002, 0x080c, 0x96a0,
+	0x0804, 0xd7e4, 0x9006, 0x080c, 0x6561, 0x0804, 0xd7e2, 0x080c,
+	0x6a63, 0x1904, 0xd7e2, 0x9006, 0x080c, 0x6561, 0x6010, 0x2058,
+	0xb810, 0x9086, 0x00ff, 0x1140, 0x00f6, 0x2079, 0x1800, 0x78a8,
+	0x8000, 0x78aa, 0x00fe, 0x0428, 0x6010, 0x2058, 0xb884, 0x9005,
+	0x1178, 0x080c, 0xcf52, 0x1904, 0xd7e2, 0x0036, 0x0046, 0xbba0,
+	0x2021, 0x0007, 0x080c, 0x4cbe, 0x004e, 0x003e, 0x0804, 0xd7e2,
+	0x080c, 0x3363, 0x1904, 0xd7e2, 0x2001, 0x1800, 0x2004, 0x9086,
+	0x0002, 0x1138, 0x00f6, 0x2079, 0x1800, 0x78a8, 0x8000, 0x78aa,
+	0x00fe, 0x2001, 0x0002, 0x080c, 0x6575, 0x6023, 0x0001, 0x6003,
+	0x0001, 0x6007, 0x0002, 0x080c, 0x9225, 0x080c, 0x96a0, 0x6110,
+	0x2158, 0x2009, 0x0001, 0x080c, 0x864c, 0x0804, 0xd7e4, 0x6610,
+	0x2658, 0xbe04, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0904,
+	0xd7e2, 0x9686, 0x0004, 0x0904, 0xd7e2, 0x080c, 0x8eca, 0x2001,
+	0x0004, 0x0804, 0xd7e0, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003,
+	0x1158, 0x0036, 0x0046, 0x6010, 0x2058, 0xbba0, 0x2021, 0x0006,
+	0x080c, 0x4cbe, 0x004e, 0x003e, 0x2001, 0x0006, 0x080c, 0xd7fe,
+	0x6610, 0x2658, 0xbe04, 0x0066, 0x96b4, 0xff00, 0x8637, 0x9686,
+	0x0006, 0x006e, 0x0168, 0x2001, 0x0006, 0x080c, 0x65a1, 0x9284,
+	0x00ff, 0x908e, 0x0007, 0x1120, 0x2001, 0x0006, 0x080c, 0x6575,
+	0x080c, 0x6a63, 0x11f8, 0x2001, 0x1837, 0x2004, 0xd0a4, 0x01d0,
+	0xbe04, 0x96b4, 0x00ff, 0x9686, 0x0006, 0x01a0, 0x00f6, 0x2079,
+	0x1800, 0x78a8, 0x8000, 0x78aa, 0x00fe, 0x0804, 0xd769, 0x2001,
+	0x0004, 0x0030, 0x2001, 0x0006, 0x0409, 0x0020, 0x0018, 0x0010,
+	0x080c, 0x65a1, 0x080c, 0xabed, 0x0005, 0x2600, 0x0002, 0xd7f9,
+	0xd7f9, 0xd7f9, 0xd7f9, 0xd7f9, 0xd7fb, 0xd7f9, 0xd7fb, 0xd7f9,
+	0xd7f9, 0xd7fb, 0xd7f9, 0xd7f9, 0xd7f9, 0xd7fb, 0xd7fb, 0xd7fb,
+	0xd7fb, 0x080c, 0x0d7d, 0x080c, 0xabed, 0x0005, 0x0016, 0x00b6,
+	0x00d6, 0x6110, 0x2158, 0xb900, 0xd184, 0x0138, 0x080c, 0x6575,
+	0x9006, 0x080c, 0x6561, 0x080c, 0x321c, 0x00de, 0x00be, 0x001e,
+	0x0005, 0x6610, 0x2658, 0xb804, 0x9084, 0xff00, 0x8007, 0x90b2,
+	0x000c, 0x1a0c, 0x0d7d, 0x91b6, 0x0015, 0x1110, 0x003b, 0x0028,
+	0x91b6, 0x0016, 0x190c, 0x0d7d, 0x006b, 0x0005, 0xb69e, 0xb69e,
+	0xb69e, 0xb69e, 0xb69e, 0xb69e, 0xd87d, 0xd83e, 0xb69e, 0xb69e,
+	0xb69e, 0xb69e, 0xb69e, 0xb69e, 0xb69e, 0xb69e, 0xb69e, 0xb69e,
+	0xd87d, 0xd884, 0xb69e, 0xb69e, 0xb69e, 0xb69e, 0x00f6, 0x080c,
+	0x6a63, 0x11d8, 0x080c, 0xcf52, 0x11c0, 0x6010, 0x905d, 0x01a8,
+	0xb884, 0x9005, 0x0190, 0x9006, 0x080c, 0x6561, 0x2001, 0x0002,
+	0x080c, 0x6575, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002,
+	0x080c, 0x9225, 0x080c, 0x96a0, 0x00f0, 0x2011, 0x0263, 0x2204,
+	0x8211, 0x220c, 0x080c, 0x25fb, 0x11b0, 0x080c, 0x6625, 0x0118,
+	0x080c, 0xabed, 0x0080, 0xb810, 0x0006, 0xb814, 0x0006, 0xb884,
+	0x0006, 0x080c, 0x6043, 0x000e, 0xb886, 0x000e, 0xb816, 0x000e,
+	0xb812, 0x080c, 0xabed, 0x00fe, 0x0005, 0x6604, 0x96b6, 0x001e,
+	0x1110, 0x080c, 0xabed, 0x0005, 0x080c, 0xba27, 0x1148, 0x6003,
+	0x0001, 0x6007, 0x0001, 0x080c, 0x9225, 0x080c, 0x96a0, 0x0010,
+	0x080c, 0xabed, 0x0005, 0x6004, 0x908a, 0x0053, 0x1a0c, 0x0d7d,
+	0x080c, 0x95de, 0x080c, 0xac28, 0x0005, 0x9182, 0x0040, 0x0002,
+	0xd8b3, 0xd8b3, 0xd8b3, 0xd8b3, 0xd8b5, 0xd8b3, 0xd8b3, 0xd8b3,
+	0xd8b3, 0xd8b3, 0xd8b3, 0xd8b3, 0xd8b3, 0xd8b3, 0xd8b3, 0xd8b3,
+	0xd8b3, 0xd8b3, 0xd8b3, 0x080c, 0x0d7d, 0x0096, 0x00b6, 0x00d6,
+	0x00e6, 0x00f6, 0x0046, 0x0026, 0x6210, 0x2258, 0xb8bc, 0x9005,
+	0x11b0, 0x6007, 0x0044, 0x2071, 0x0260, 0x7444, 0x94a4, 0xff00,
+	0x0904, 0xd91c, 0x080c, 0xe684, 0x1170, 0x9486, 0x2000, 0x1158,
+	0x2009, 0x0001, 0x2011, 0x0200, 0x080c, 0x88ec, 0x0020, 0x9026,
+	0x080c, 0xe508, 0x0c30, 0x080c, 0x103a, 0x090c, 0x0d7d, 0x6003,
+	0x0007, 0xa867, 0x010d, 0x9006, 0xa802, 0xa86a, 0xac8a, 0x2c00,
+	0xa88e, 0x6008, 0xa8e2, 0x6010, 0x2058, 0xb8a0, 0x7130, 0xa97a,
+	0x0016, 0xa876, 0xa87f, 0x0000, 0xa883, 0x0000, 0xa887, 0x0036,
+	0x080c, 0x6d80, 0x001e, 0x080c, 0xe684, 0x1904, 0xd97c, 0x9486,
+	0x2000, 0x1130, 0x2019, 0x0017, 0x080c, 0xe239, 0x0804, 0xd97c,
+	0x9486, 0x0200, 0x1120, 0x080c, 0xe1c9, 0x0804, 0xd97c, 0x9486,
+	0x0400, 0x0120, 0x9486, 0x1000, 0x1904, 0xd97c, 0x2019, 0x0002,
+	0x080c, 0xe1e8, 0x0804, 0xd97c, 0x2069, 0x1a6f, 0x6a00, 0xd284,
+	0x0904, 0xd9e6, 0x9284, 0x0300, 0x1904, 0xd9df, 0x6804, 0x9005,
+	0x0904, 0xd9c7, 0x2d78, 0x6003, 0x0007, 0x080c, 0x1053, 0x0904,
+	0xd988, 0x7800, 0xd08c, 0x1118, 0x7804, 0x8001, 0x7806, 0x6017,
+	0x0000, 0x2001, 0x180f, 0x2004, 0xd084, 0x1904, 0xd9ea, 0x9006,
+	0xa802, 0xa867, 0x0116, 0xa86a, 0x6008, 0xa8e2, 0x2c00, 0xa87a,
+	0x6010, 0x2058, 0xb8a0, 0x7130, 0xa9b6, 0xa876, 0xb928, 0xa9ba,
+	0xb92c, 0xa9be, 0xb930, 0xa9c2, 0xb934, 0xa9c6, 0xa883, 0x003d,
+	0x7044, 0x9084, 0x0003, 0x9080, 0xd984, 0x2005, 0xa87e, 0x20a9,
+	0x000a, 0x2001, 0x0270, 0xaa5c, 0x9290, 0x0021, 0x2009, 0x0205,
+	0x200b, 0x0080, 0x20e1, 0x0000, 0xab60, 0x23e8, 0x2098, 0x22a0,
+	0x4003, 0x200b, 0x0000, 0x2001, 0x027a, 0x200c, 0xa9b2, 0x8000,
+	0x200c, 0xa9ae, 0x080c, 0x6d83, 0x002e, 0x004e, 0x00fe, 0x00ee,
+	0x00de, 0x00be, 0x009e, 0x0005, 0x0000, 0x0080, 0x0040, 0x0000,
+	0x2001, 0x1810, 0x2004, 0xd084, 0x0120, 0x080c, 0x103a, 0x1904,
+	0xd931, 0x6017, 0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x2009,
+	0xa022, 0x080c, 0x921e, 0x0c00, 0x2069, 0x0260, 0x6848, 0x9084,
+	0xff00, 0x9086, 0x1200, 0x1198, 0x686c, 0x9084, 0x00ff, 0x0016,
+	0x6114, 0x918c, 0xf700, 0x910d, 0x6116, 0x001e, 0x6003, 0x0001,
+	0x6007, 0x0043, 0x2009, 0xa025, 0x080c, 0x921e, 0x0828, 0x6868,
+	0x602e, 0x686c, 0x6032, 0x6017, 0xf200, 0x6003, 0x0001, 0x6007,
+	0x0041, 0x2009, 0xa022, 0x080c, 0x921e, 0x0804, 0xd97c, 0x2001,
+	0x180e, 0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x4b07,
+	0x6017, 0xf300, 0x0010, 0x6017, 0xf100, 0x6003, 0x0001, 0x6007,
+	0x0041, 0x2009, 0xa022, 0x080c, 0x921e, 0x0804, 0xd97c, 0x6017,
+	0xf500, 0x0c98, 0x6017, 0xf600, 0x0804, 0xd99c, 0x6017, 0xf200,
+	0x0804, 0xd99c, 0xa867, 0x0146, 0xa86b, 0x0000, 0x6008, 0xa886,
+	0x2c00, 0xa87a, 0x7044, 0x9084, 0x0003, 0x9080, 0xd984, 0x2005,
+	0xa87e, 0x2928, 0x6010, 0x2058, 0xb8a0, 0xa876, 0xb828, 0xa88a,
+	0xb82c, 0xa88e, 0xb830, 0xa892, 0xb834, 0xa896, 0xa883, 0x003d,
+	0x2009, 0x0205, 0x2104, 0x9085, 0x0080, 0x200a, 0x20e1, 0x0000,
+	0x2011, 0x0210, 0x2214, 0x9294, 0x0fff, 0xaaa2, 0x9282, 0x0111,
+	0x1a0c, 0x0d7d, 0x8210, 0x821c, 0x2001, 0x026c, 0x2098, 0xa860,
+	0x20e8, 0xa85c, 0x9080, 0x0029, 0x20a0, 0x2011, 0xda66, 0x2041,
+	0x0001, 0x223d, 0x9784, 0x00ff, 0x9322, 0x1208, 0x2300, 0x20a8,
+	0x4003, 0x931a, 0x0530, 0x8210, 0xd7fc, 0x1130, 0x8d68, 0x2d0a,
+	0x2001, 0x0260, 0x2098, 0x0c68, 0x2950, 0x080c, 0x1053, 0x0170,
+	0x2900, 0xb002, 0xa867, 0x0147, 0xa86b, 0x0000, 0xa860, 0x20e8,
+	0xa85c, 0x9080, 0x001b, 0x20a0, 0x8840, 0x08d8, 0x2548, 0xa800,
+	0x902d, 0x0118, 0x080c, 0x106c, 0x0cc8, 0x080c, 0x106c, 0x0804,
+	0xd988, 0x2548, 0x8847, 0x9885, 0x0046, 0xa866, 0x2009, 0x0205,
+	0x200b, 0x0000, 0x080c, 0xe26c, 0x0804, 0xd97c, 0x8010, 0x0004,
+	0x801a, 0x0006, 0x8018, 0x0008, 0x8016, 0x000a, 0x8014, 0x9186,
+	0x0013, 0x1160, 0x6004, 0x908a, 0x0057, 0x1a0c, 0x0d7d, 0x9082,
+	0x0040, 0x0a0c, 0x0d7d, 0x2008, 0x0804, 0xdaf1, 0x9186, 0x0051,
+	0x0108, 0x0040, 0x080c, 0xaaa8, 0x01e8, 0x9086, 0x0002, 0x0904,
+	0xdb38, 0x00c0, 0x9186, 0x0027, 0x0180, 0x9186, 0x0048, 0x0128,
+	0x9186, 0x0014, 0x0150, 0x190c, 0x0d7d, 0x080c, 0xaaa8, 0x0150,
+	0x9086, 0x0004, 0x0904, 0xdbd5, 0x0028, 0x6004, 0x9082, 0x0040,
+	0x2008, 0x001a, 0x080c, 0xaca9, 0x0005, 0xdab8, 0xdaba, 0xdaba,
+	0xdae1, 0xdab8, 0xdab8, 0xdab8, 0xdab8, 0xdab8, 0xdab8, 0xdab8,
+	0xdab8, 0xdab8, 0xdab8, 0xdab8, 0xdab8, 0xdab8, 0xdab8, 0xdab8,
+	0x080c, 0x0d7d, 0x080c, 0x95de, 0x080c, 0x96a0, 0x0036, 0x0096,
+	0x6014, 0x904d, 0x01d8, 0x080c, 0xc838, 0x01c0, 0x6003, 0x0002,
+	0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1178, 0x2019,
+	0x0004, 0x080c, 0xe26c, 0x6017, 0x0000, 0x6018, 0x9005, 0x1120,
+	0x2001, 0x1987, 0x2004, 0x601a, 0x6003, 0x0007, 0x009e, 0x003e,
+	0x0005, 0x0096, 0x080c, 0x95de, 0x080c, 0x96a0, 0x080c, 0xc838,
+	0x0120, 0x6014, 0x2048, 0x080c, 0x106c, 0x080c, 0xac28, 0x009e,
+	0x0005, 0x0002, 0xdb05, 0xdb1a, 0xdb07, 0xdb2f, 0xdb05, 0xdb05,
+	0xdb05, 0xdb05, 0xdb05, 0xdb05, 0xdb05, 0xdb05, 0xdb05, 0xdb05,
+	0xdb05, 0xdb05, 0xdb05, 0xdb05, 0xdb05, 0x080c, 0x0d7d, 0x0096,
+	0x6014, 0x2048, 0xa87c, 0xd0b4, 0x0138, 0x6003, 0x0007, 0x2009,
+	0x0043, 0x080c, 0xac8c, 0x0010, 0x6003, 0x0004, 0x080c, 0x96a0,
+	0x009e, 0x0005, 0x080c, 0xc838, 0x0138, 0x6114, 0x0096, 0x2148,
+	0xa97c, 0x009e, 0xd1ec, 0x1138, 0x080c, 0x88c1, 0x080c, 0xabed,
+	0x080c, 0x96a0, 0x0005, 0x080c, 0xe4cc, 0x0db0, 0x0cc8, 0x6003,
+	0x0001, 0x6007, 0x0041, 0x2009, 0xa022, 0x080c, 0x921e, 0x0005,
+	0x9182, 0x0040, 0x0002, 0xdb4e, 0xdb50, 0xdb4e, 0xdb4e, 0xdb4e,
+	0xdb4e, 0xdb4e, 0xdb4e, 0xdb4e, 0xdb4e, 0xdb4e, 0xdb4e, 0xdb4e,
+	0xdb4e, 0xdb4e, 0xdb4e, 0xdb4e, 0xdb51, 0xdb4e, 0x080c, 0x0d7d,
+	0x0005, 0x00d6, 0x080c, 0x88c1, 0x00de, 0x080c, 0xe524, 0x080c,
+	0xabed, 0x0005, 0x9182, 0x0040, 0x0002, 0xdb70, 0xdb70, 0xdb70,
+	0xdb70, 0xdb70, 0xdb70, 0xdb70, 0xdb70, 0xdb70, 0xdb72, 0xdb9d,
+	0xdb70, 0xdb70, 0xdb70, 0xdb70, 0xdb9d, 0xdb70, 0xdb70, 0xdb70,
+	0x080c, 0x0d7d, 0x6014, 0x0096, 0x2048, 0xa87c, 0xd0fc, 0x0168,
+	0x908c, 0x0003, 0x918e, 0x0002, 0x0180, 0x6144, 0xd1e4, 0x1168,
+	0x2009, 0x0041, 0x009e, 0x0804, 0xdc5d, 0x6003, 0x0007, 0x601b,
+	0x0000, 0x080c, 0x88c1, 0x009e, 0x0005, 0x6014, 0x2048, 0xa97c,
+	0xd1ec, 0x1130, 0x080c, 0x88c1, 0x080c, 0xabed, 0x009e, 0x0005,
+	0x080c, 0xe4cc, 0x0db8, 0x009e, 0x0005, 0x2001, 0x180c, 0x200c,
+	0xc1d4, 0x2102, 0x0036, 0x080c, 0x963b, 0x080c, 0x96a0, 0x6014,
+	0x0096, 0x2048, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc,
+	0x0188, 0xa87c, 0x9084, 0x0003, 0x9086, 0x0002, 0x0140, 0xa8ac,
+	0x6330, 0x931a, 0x6332, 0xa8b0, 0x632c, 0x931b, 0x632e, 0x6003,
+	0x0002, 0x0080, 0x2019, 0x0004, 0x080c, 0xe26c, 0x6018, 0x9005,
+	0x1128, 0x2001, 0x1987, 0x2004, 0x8003, 0x601a, 0x6017, 0x0000,
+	0x6003, 0x0007, 0x009e, 0x003e, 0x0005, 0x9182, 0x0040, 0x0002,
+	0xdbec, 0xdbec, 0xdbec, 0xdbec, 0xdbec, 0xdbec, 0xdbec, 0xdbec,
+	0xdbee, 0xdbec, 0xdbec, 0xdbec, 0xdbec, 0xdbec, 0xdbec, 0xdbec,
+	0xdbec, 0xdbec, 0xdbec, 0xdc39, 0x080c, 0x0d7d, 0x6014, 0x0096,
+	0x2048, 0xa834, 0xaa38, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be,
+	0xd1bc, 0x1190, 0x920d, 0x1518, 0xa87c, 0xd0fc, 0x0128, 0x2009,
+	0x0041, 0x009e, 0x0804, 0xdc5d, 0x6003, 0x0007, 0x601b, 0x0000,
+	0x080c, 0x88c1, 0x009e, 0x0005, 0x6124, 0xd1f4, 0x1d58, 0x0006,
+	0x0046, 0xacac, 0x9422, 0xa9b0, 0x2200, 0x910b, 0x6030, 0x9420,
+	0x6432, 0x602c, 0x9109, 0x612e, 0x004e, 0x000e, 0x08d8, 0x6110,
+	0x00b6, 0x2158, 0xb900, 0x00be, 0xd1bc, 0x1178, 0x2009, 0x180e,
+	0x210c, 0xd19c, 0x0118, 0x6003, 0x0007, 0x0010, 0x6003, 0x0006,
+	0x00e9, 0x080c, 0x88c3, 0x009e, 0x0005, 0x6003, 0x0002, 0x009e,
+	0x0005, 0x6024, 0xd0f4, 0x0128, 0x080c, 0x1670, 0x1904, 0xdbee,
+	0x0005, 0x6014, 0x0096, 0x2048, 0xa834, 0xa938, 0x009e, 0x9105,
+	0x1120, 0x080c, 0x1670, 0x1904, 0xdbee, 0x0005, 0xd2fc, 0x0140,
+	0x8002, 0x8000, 0x8212, 0x9291, 0x0000, 0x2009, 0x0009, 0x0010,
+	0x2009, 0x0015, 0xaa9a, 0xa896, 0x0005, 0x9182, 0x0040, 0x0208,
+	0x0062, 0x9186, 0x0013, 0x0120, 0x9186, 0x0014, 0x190c, 0x0d7d,
+	0x6024, 0xd0dc, 0x090c, 0x0d7d, 0x0005, 0xdc80, 0xdc8c, 0xdc98,
+	0xdca4, 0xdc80, 0xdc80, 0xdc80, 0xdc80, 0xdc87, 0xdc82, 0xdc82,
+	0xdc80, 0xdc80, 0xdc80, 0xdc80, 0xdc82, 0xdc80, 0xdc82, 0xdc80,
+	0x080c, 0x0d7d, 0x6024, 0xd0dc, 0x090c, 0x0d7d, 0x0005, 0x6014,
+	0x9005, 0x190c, 0x0d7d, 0x0005, 0x6003, 0x0001, 0x6106, 0x0126,
+	0x2091, 0x8000, 0x2009, 0xa022, 0x080c, 0x9200, 0x012e, 0x0005,
+	0x6003, 0x0004, 0x6106, 0x0126, 0x2091, 0x8000, 0x2009, 0xa001,
+	0x080c, 0x921e, 0x012e, 0x0005, 0x6003, 0x0003, 0x6106, 0x080c,
+	0x1c03, 0x0126, 0x2091, 0x8000, 0x6014, 0x0096, 0x2048, 0xa87c,
+	0xd0fc, 0x0188, 0x9084, 0x0003, 0x9086, 0x0002, 0x01a0, 0x6024,
+	0xd0cc, 0x1148, 0xd0c4, 0x1138, 0xa8a8, 0x9005, 0x1120, 0x6144,
+	0x918d, 0xb035, 0x0018, 0x6144, 0x918d, 0xa035, 0x009e, 0x080c,
+	0x9265, 0x012e, 0x0005, 0x6144, 0x918d, 0xa032, 0x0cb8, 0x0126,
+	0x2091, 0x8000, 0x0036, 0x0096, 0x9182, 0x0040, 0x0023, 0x009e,
+	0x003e, 0x012e, 0x0005, 0xdceb, 0xdced, 0xdd02, 0xdd1c, 0xdceb,
+	0xdceb, 0xdceb, 0xdceb, 0xdceb, 0xdceb, 0xdceb, 0xdceb, 0xdceb,
+	0xdceb, 0xdceb, 0xdceb, 0x080c, 0x0d7d, 0x6014, 0x2048, 0xa87c,
+	0xd0fc, 0x0510, 0x909c, 0x0003, 0x939e, 0x0003, 0x01e8, 0x6003,
+	0x0001, 0x6106, 0x0126, 0x2091, 0x8000, 0x2009, 0xa022, 0x080c,
+	0x921e, 0x0470, 0x6014, 0x2048, 0xa87c, 0xd0fc, 0x0168, 0x909c,
+	0x0003, 0x939e, 0x0003, 0x0140, 0x6003, 0x0001, 0x6106, 0x2009,
+	0xa001, 0x080c, 0x921e, 0x00e0, 0x901e, 0x6316, 0x631a, 0x2019,
+	0x0004, 0x080c, 0xe26c, 0x00a0, 0x6014, 0x2048, 0xa87c, 0xd0fc,
+	0x0d98, 0x909c, 0x0003, 0x939e, 0x0003, 0x0d70, 0x6003, 0x0003,
+	0x6106, 0x080c, 0x1c03, 0x6144, 0x918d, 0xa035, 0x080c, 0x9265,
+	0x0005, 0x080c, 0x95de, 0x6114, 0x81ff, 0x0158, 0x0096, 0x2148,
+	0x080c, 0xe621, 0x0036, 0x2019, 0x0029, 0x080c, 0xe26c, 0x003e,
+	0x009e, 0x080c, 0xac28, 0x080c, 0x96a0, 0x0005, 0x080c, 0x963b,
+	0x6114, 0x81ff, 0x0158, 0x0096, 0x2148, 0x080c, 0xe621, 0x0036,
+	0x2019, 0x0029, 0x080c, 0xe26c, 0x003e, 0x009e, 0x080c, 0xac28,
+	0x0005, 0x9182, 0x0085, 0x0002, 0xdd6b, 0xdd69, 0xdd69, 0xdd77,
+	0xdd69, 0xdd69, 0xdd69, 0xdd69, 0xdd69, 0xdd69, 0xdd69, 0xdd69,
+	0xdd69, 0x080c, 0x0d7d, 0x6003, 0x000b, 0x6106, 0x0126, 0x2091,
+	0x8000, 0x2009, 0x8020, 0x080c, 0x921e, 0x012e, 0x0005, 0x0026,
+	0x00e6, 0x080c, 0xe4c3, 0x0118, 0x080c, 0xabed, 0x0440, 0x2071,
+	0x0260, 0x7224, 0x6216, 0x2001, 0x180e, 0x2004, 0xd0e4, 0x0150,
+	0x6010, 0x00b6, 0x2058, 0xbca0, 0x00be, 0x2c00, 0x2011, 0x014e,
+	0x080c, 0xaf1a, 0x7220, 0x080c, 0xe102, 0x0118, 0x6007, 0x0086,
+	0x0040, 0x6007, 0x0087, 0x7224, 0x9296, 0xffff, 0x1110, 0x6007,
+	0x0086, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x921e, 0x00ee,
+	0x002e, 0x0005, 0x9186, 0x0013, 0x1160, 0x6004, 0x908a, 0x0085,
+	0x0a0c, 0x0d7d, 0x908a, 0x0092, 0x1a0c, 0x0d7d, 0x9082, 0x0085,
+	0x00a2, 0x9186, 0x0027, 0x0130, 0x9186, 0x0014, 0x0118, 0x080c,
+	0xaca9, 0x0050, 0x2001, 0x0007, 0x080c, 0x65a1, 0x080c, 0x95de,
+	0x080c, 0xac28, 0x080c, 0x96a0, 0x0005, 0xddda, 0xdddc, 0xdddc,
+	0xddda, 0xddda, 0xddda, 0xddda, 0xddda, 0xddda, 0xddda, 0xddda,
+	0xddda, 0xddda, 0x080c, 0x0d7d, 0x080c, 0xac28, 0x080c, 0x96a0,
+	0x0005, 0x9182, 0x0085, 0x0a0c, 0x0d7d, 0x9182, 0x0092, 0x1a0c,
+	0x0d7d, 0x9182, 0x0085, 0x0002, 0xddf9, 0xddf9, 0xddf9, 0xddfb,
+	0xddf9, 0xddf9, 0xddf9, 0xddf9, 0xddf9, 0xddf9, 0xddf9, 0xddf9,
+	0xddf9, 0x080c, 0x0d7d, 0x0005, 0x9186, 0x0013, 0x0148, 0x9186,
+	0x0014, 0x0130, 0x9186, 0x0027, 0x0118, 0x080c, 0xaca9, 0x0020,
+	0x080c, 0x95de, 0x080c, 0xac28, 0x0005, 0x0036, 0x080c, 0xe524,
+	0x604b, 0x0000, 0x2019, 0x000b, 0x0031, 0x6023, 0x0006, 0x6003,
+	0x0007, 0x003e, 0x0005, 0x0126, 0x0036, 0x2091, 0x8000, 0x2001,
+	0x0382, 0x2004, 0x9084, 0x0007, 0x0006, 0x9086, 0x0003, 0x0110,
+	0x080c, 0xa896, 0x0086, 0x2c40, 0x0096, 0x904e, 0x080c, 0xa218,
+	0x009e, 0x008e, 0x1550, 0x0076, 0x2c38, 0x080c, 0xa2c3, 0x007e,
+	0x1520, 0x6000, 0x9086, 0x0000, 0x0500, 0x6020, 0x9086, 0x0007,
+	0x01e0, 0x0096, 0x601c, 0xd084, 0x0140, 0x080c, 0xe524, 0x080c,
+	0xcf6a, 0x080c, 0x1a6a, 0x6023, 0x0007, 0x6014, 0x2048, 0x080c,
+	0xc838, 0x0110, 0x080c, 0xe26c, 0x009e, 0x6017, 0x0000, 0x080c,
+	0xe524, 0x6023, 0x0007, 0x080c, 0xcf6a, 0x000e, 0x9086, 0x0003,
+	0x0110, 0x080c, 0xa8b2, 0x003e, 0x012e, 0x0005, 0x00f6, 0x00c6,
+	0x00b6, 0x0036, 0x0156, 0x2079, 0x0260, 0x7938, 0x783c, 0x080c,
+	0x25fb, 0x15e8, 0x0016, 0x00c6, 0x080c, 0x6625, 0x15b0, 0x001e,
+	0x00c6, 0x2160, 0x080c, 0xcf67, 0x00ce, 0x002e, 0x0026, 0x0016,
+	0x080c, 0xa896, 0x2019, 0x0029, 0x080c, 0xa38a, 0x080c, 0x93a5,
+	0x0076, 0x903e, 0x080c, 0x9277, 0x007e, 0x001e, 0x0076, 0x903e,
+	0x080c, 0xdfeb, 0x007e, 0x080c, 0xa8b2, 0x0026, 0xba04, 0x9294,
+	0xff00, 0x8217, 0x9286, 0x0006, 0x0118, 0x9286, 0x0004, 0x1118,
+	0xbaa0, 0x080c, 0x32be, 0x002e, 0xbc84, 0x001e, 0x080c, 0x6043,
+	0xbe12, 0xbd16, 0xbc86, 0x9006, 0x0010, 0x00ce, 0x001e, 0x015e,
+	0x003e, 0x00be, 0x00ce, 0x00fe, 0x0005, 0x00c6, 0x00d6, 0x00b6,
+	0x0016, 0x2009, 0x1824, 0x2104, 0x9086, 0x0074, 0x1904, 0xdf0e,
+	0x2069, 0x0260, 0x6944, 0x9182, 0x0100, 0x06e0, 0x6940, 0x9184,
+	0x8000, 0x0904, 0xdf0b, 0x2001, 0x197c, 0x2004, 0x9005, 0x1140,
+	0x6010, 0x2058, 0xb884, 0x9005, 0x0118, 0x9184, 0x0800, 0x0598,
+	0x6948, 0x918a, 0x0001, 0x0648, 0x080c, 0xe689, 0x0118, 0x6978,
+	0xd1fc, 0x11b8, 0x2009, 0x0205, 0x200b, 0x0001, 0x693c, 0x81ff,
+	0x1198, 0x6944, 0x9182, 0x0100, 0x02a8, 0x6940, 0x81ff, 0x1178,
+	0x6948, 0x918a, 0x0001, 0x0288, 0x6950, 0x918a, 0x0001, 0x0298,
+	0x00d0, 0x6017, 0x0100, 0x00a0, 0x6017, 0x0300, 0x0088, 0x6017,
+	0x0500, 0x0070, 0x6017, 0x0700, 0x0058, 0x6017, 0x0900, 0x0040,
+	0x6017, 0x0b00, 0x0028, 0x6017, 0x0f00, 0x0010, 0x6017, 0x2d00,
+	0x9085, 0x0001, 0x0008, 0x9006, 0x001e, 0x00be, 0x00de, 0x00ce,
+	0x0005, 0x00c6, 0x00b6, 0x0026, 0x0036, 0x0156, 0x6210, 0x2258,
+	0xbb04, 0x9394, 0x00ff, 0x9286, 0x0006, 0x0180, 0x9286, 0x0004,
+	0x0168, 0x9394, 0xff00, 0x8217, 0x9286, 0x0006, 0x0138, 0x9286,
+	0x0004, 0x0120, 0x080c, 0x6634, 0x0804, 0xdf7a, 0x2011, 0x0276,
+	0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x000a, 0x080c, 0xbbc2,
+	0x009e, 0x15c8, 0x2011, 0x027a, 0x20a9, 0x0004, 0x0096, 0x2b48,
+	0x2019, 0x0006, 0x080c, 0xbbc2, 0x009e, 0x1568, 0x0046, 0x0016,
+	0xbaa0, 0x2220, 0x9006, 0x2009, 0x1848, 0x210c, 0xd1a4, 0x0138,
+	0x2009, 0x0029, 0x080c, 0xe2c9, 0xb800, 0xc0e5, 0xb802, 0x080c,
+	0xa896, 0x2019, 0x0029, 0x080c, 0x93a5, 0x0076, 0x2039, 0x0000,
+	0x080c, 0x9277, 0x2c08, 0x080c, 0xdfeb, 0x007e, 0x080c, 0xa8b2,
+	0x2001, 0x0007, 0x080c, 0x65a1, 0x2001, 0x0007, 0x080c, 0x6575,
+	0x001e, 0x004e, 0x9006, 0x015e, 0x003e, 0x002e, 0x00be, 0x00ce,
+	0x0005, 0x00d6, 0x2069, 0x026e, 0x6800, 0x9086, 0x0800, 0x0118,
+	0x6017, 0x0000, 0x0008, 0x9006, 0x00de, 0x0005, 0x00b6, 0x00f6,
+	0x0016, 0x0026, 0x0036, 0x0156, 0x2079, 0x026c, 0x7930, 0x7834,
+	0x080c, 0x25fb, 0x11d0, 0x080c, 0x6625, 0x11b8, 0x2011, 0x0270,
+	0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x000a, 0x080c, 0xbbc2,
+	0x009e, 0x1158, 0x2011, 0x0274, 0x20a9, 0x0004, 0x0096, 0x2b48,
+	0x2019, 0x0006, 0x080c, 0xbbc2, 0x009e, 0x015e, 0x003e, 0x002e,
+	0x001e, 0x00fe, 0x00be, 0x0005, 0x00b6, 0x0006, 0x0016, 0x0026,
+	0x0036, 0x0156, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c,
+	0x25fb, 0x11d0, 0x080c, 0x6625, 0x11b8, 0x2011, 0x0276, 0x20a9,
+	0x0004, 0x0096, 0x2b48, 0x2019, 0x000a, 0x080c, 0xbbc2, 0x009e,
+	0x1158, 0x2011, 0x027a, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019,
+	0x0006, 0x080c, 0xbbc2, 0x009e, 0x015e, 0x003e, 0x002e, 0x001e,
+	0x000e, 0x00be, 0x0005, 0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066,
+	0x0056, 0x0046, 0x0026, 0x0126, 0x2091, 0x8000, 0x080c, 0xa8f4,
+	0x0106, 0x190c, 0xa896, 0x2740, 0x2029, 0x19f3, 0x252c, 0x2021,
+	0x19fa, 0x2424, 0x2061, 0x1ddc, 0x2071, 0x1800, 0x7654, 0x7074,
+	0x81ff, 0x0150, 0x0006, 0x9186, 0x1b32, 0x000e, 0x0128, 0x8001,
+	0x9602, 0x1a04, 0xe090, 0x0018, 0x9606, 0x0904, 0xe090, 0x080c,
+	0x8b90, 0x0904, 0xe087, 0x2100, 0x9c06, 0x0904, 0xe087, 0x080c,
+	0xe30a, 0x1904, 0xe087, 0x080c, 0xe6a6, 0x0904, 0xe087, 0x080c,
+	0xe2fa, 0x0904, 0xe087, 0x6720, 0x9786, 0x0001, 0x1148, 0x080c,
+	0x3363, 0x0904, 0xe0d2, 0x6004, 0x9086, 0x0000, 0x1904, 0xe0d2,
+	0x9786, 0x0004, 0x0904, 0xe0d2, 0x9786, 0x0007, 0x0904, 0xe087,
+	0x2500, 0x9c06, 0x0904, 0xe087, 0x2400, 0x9c06, 0x0904, 0xe087,
+	0x88ff, 0x0118, 0x605c, 0x9906, 0x15d0, 0x0096, 0x6043, 0xffff,
+	0x6000, 0x9086, 0x0004, 0x1120, 0x0016, 0x080c, 0x1a6a, 0x001e,
+	0x9786, 0x000a, 0x0148, 0x080c, 0xca4d, 0x1130, 0x080c, 0xb5b5,
+	0x009e, 0x080c, 0xac28, 0x0418, 0x6014, 0x2048, 0x080c, 0xc838,
+	0x01d8, 0x9786, 0x0003, 0x1588, 0xa867, 0x0103, 0xa87c, 0xd0cc,
+	0x0130, 0x0096, 0xa878, 0x2048, 0x080c, 0x0fec, 0x009e, 0xab7a,
+	0xa877, 0x0000, 0x080c, 0xe621, 0x0016, 0x080c, 0xcb36, 0x080c,
+	0x6d74, 0x001e, 0x080c, 0xca27, 0x009e, 0x080c, 0xac28, 0x9ce0,
+	0x001c, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1210, 0x0804, 0xe004,
+	0x010e, 0x190c, 0xa8b2, 0x012e, 0x002e, 0x004e, 0x005e, 0x006e,
+	0x007e, 0x008e, 0x00ce, 0x00ee, 0x0005, 0x9786, 0x0006, 0x1150,
+	0x9386, 0x0005, 0x0128, 0x080c, 0xe621, 0x080c, 0xe26c, 0x08e0,
+	0x009e, 0x08e8, 0x9786, 0x0009, 0x11f8, 0x6000, 0x9086, 0x0004,
+	0x01c0, 0x6000, 0x9086, 0x0003, 0x11a0, 0x080c, 0x963b, 0x0096,
+	0x6114, 0x2148, 0x080c, 0xc838, 0x0118, 0x6010, 0x080c, 0x6d80,
+	0x009e, 0x00c6, 0x080c, 0xabed, 0x00ce, 0x0036, 0x080c, 0x96a0,
+	0x003e, 0x009e, 0x0804, 0xe087, 0x9786, 0x000a, 0x0904, 0xe06e,
+	0x0804, 0xe06c, 0x81ff, 0x0904, 0xe087, 0x9180, 0x0001, 0x2004,
+	0x9086, 0x0018, 0x0138, 0x9180, 0x0001, 0x2004, 0x9086, 0x002d,
+	0x1904, 0xe087, 0x6000, 0x9086, 0x0002, 0x1904, 0xe087, 0x080c,
+	0xca3c, 0x0138, 0x080c, 0xca4d, 0x1904, 0xe087, 0x080c, 0xb5b5,
+	0x0038, 0x080c, 0x321c, 0x080c, 0xca4d, 0x1110, 0x080c, 0xb5b5,
+	0x080c, 0xac28, 0x0804, 0xe087, 0xa864, 0x9084, 0x00ff, 0x9086,
+	0x0039, 0x0005, 0x00c6, 0x00e6, 0x0016, 0x2c08, 0x2170, 0x9006,
+	0x080c, 0xe293, 0x001e, 0x0120, 0x6020, 0x9084, 0x000f, 0x001b,
+	0x00ee, 0x00ce, 0x0005, 0xe121, 0xe121, 0xe121, 0xe121, 0xe121,
+	0xe121, 0xe123, 0xe121, 0xe121, 0xe121, 0xe121, 0xac28, 0xac28,
+	0xe121, 0x9006, 0x0005, 0x0036, 0x0046, 0x0016, 0x7010, 0x00b6,
+	0x2058, 0xbca0, 0x00be, 0x2c00, 0x2009, 0x0020, 0x080c, 0xe2c9,
+	0x001e, 0x004e, 0x2019, 0x0002, 0x080c, 0xde1b, 0x003e, 0x9085,
+	0x0001, 0x0005, 0x0096, 0x080c, 0xc838, 0x0140, 0x6014, 0x904d,
+	0x080c, 0xc443, 0x687b, 0x0005, 0x080c, 0x6d80, 0x009e, 0x080c,
+	0xac28, 0x9085, 0x0001, 0x0005, 0x2001, 0x0001, 0x080c, 0x6561,
+	0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0x1805,
+	0x2011, 0x0276, 0x080c, 0xbbae, 0x003e, 0x002e, 0x001e, 0x015e,
+	0x9005, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066,
+	0x00b6, 0x0126, 0x2091, 0x8000, 0x2740, 0x2061, 0x1ddc, 0x2079,
+	0x0001, 0x8fff, 0x0904, 0xe1bc, 0x2071, 0x1800, 0x7654, 0x7074,
+	0x8001, 0x9602, 0x1a04, 0xe1bc, 0x88ff, 0x0120, 0x2800, 0x9c06,
+	0x1590, 0x2078, 0x080c, 0xe2fa, 0x0570, 0x2400, 0x9c06, 0x0558,
+	0x6720, 0x9786, 0x0006, 0x1538, 0x9786, 0x0007, 0x0520, 0x88ff,
+	0x1140, 0x6010, 0x9b06, 0x11f8, 0x85ff, 0x0118, 0x605c, 0x9106,
+	0x11d0, 0x0096, 0x601c, 0xd084, 0x0140, 0x080c, 0xe524, 0x080c,
+	0xcf6a, 0x080c, 0x1a6a, 0x6023, 0x0007, 0x6014, 0x2048, 0x080c,
+	0xc838, 0x0120, 0x0046, 0x080c, 0xe26c, 0x004e, 0x009e, 0x080c,
+	0xac28, 0x88ff, 0x1198, 0x9ce0, 0x001c, 0x2001, 0x181a, 0x2004,
+	0x9c02, 0x1210, 0x0804, 0xe171, 0x9006, 0x012e, 0x00be, 0x006e,
+	0x007e, 0x008e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x98c5, 0x0001,
+	0x0ca0, 0x080c, 0xa896, 0x00b6, 0x0076, 0x0056, 0x0086, 0x9046,
+	0x2029, 0x0001, 0x2c20, 0x2019, 0x0002, 0x6210, 0x2258, 0x0096,
+	0x904e, 0x080c, 0xa218, 0x009e, 0x008e, 0x903e, 0x080c, 0xa2c3,
+	0x080c, 0xe162, 0x005e, 0x007e, 0x00be, 0x080c, 0xa8b2, 0x0005,
+	0x080c, 0xa896, 0x00b6, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156,
+	0x2c20, 0x2128, 0x20a9, 0x007f, 0x900e, 0x0016, 0x0036, 0x080c,
+	0x6625, 0x1190, 0x0056, 0x0086, 0x9046, 0x2508, 0x2029, 0x0001,
+	0x0096, 0x904e, 0x080c, 0xa218, 0x009e, 0x008e, 0x903e, 0x080c,
+	0xa2c3, 0x080c, 0xe162, 0x005e, 0x003e, 0x001e, 0x8108, 0x1f04,
+	0xe1f5, 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e, 0x00be, 0x080c,
+	0xa8b2, 0x0005, 0x080c, 0xa896, 0x00b6, 0x0076, 0x0056, 0x6210,
+	0x2258, 0x0086, 0x9046, 0x2029, 0x0001, 0x2019, 0x0048, 0x0096,
+	0x904e, 0x080c, 0xa218, 0x009e, 0x008e, 0x903e, 0x080c, 0xa2c3,
+	0x2c20, 0x080c, 0xe162, 0x005e, 0x007e, 0x00be, 0x080c, 0xa8b2,
+	0x0005, 0x080c, 0xa896, 0x00b6, 0x0046, 0x0056, 0x0076, 0x00c6,
+	0x0156, 0x2c20, 0x20a9, 0x0800, 0x900e, 0x0016, 0x0036, 0x080c,
+	0x6625, 0x11a0, 0x0086, 0x9046, 0x2828, 0x0046, 0x2021, 0x0001,
+	0x080c, 0xe508, 0x004e, 0x0096, 0x904e, 0x080c, 0xa218, 0x009e,
+	0x008e, 0x903e, 0x080c, 0xa2c3, 0x080c, 0xe162, 0x003e, 0x001e,
+	0x8108, 0x1f04, 0xe245, 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e,
+	0x00be, 0x080c, 0xa8b2, 0x0005, 0x0016, 0x00f6, 0x080c, 0xc836,
+	0x0198, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0046, 0x0180, 0xa800,
+	0x907d, 0x0138, 0xa803, 0x0000, 0xab82, 0x080c, 0x6d80, 0x2f48,
+	0x0cb0, 0xab82, 0x080c, 0x6d80, 0x00fe, 0x001e, 0x0005, 0xa800,
+	0x907d, 0x0130, 0xa803, 0x0000, 0x080c, 0x6d80, 0x2f48, 0x0cb8,
+	0x080c, 0x6d80, 0x0c88, 0x00e6, 0x0046, 0x0036, 0x2061, 0x1ddc,
+	0x9005, 0x1138, 0x2071, 0x1800, 0x7454, 0x7074, 0x8001, 0x9402,
+	0x12f8, 0x2100, 0x9c06, 0x0188, 0x6000, 0x9086, 0x0000, 0x0168,
+	0x6008, 0x9206, 0x1150, 0x6320, 0x9386, 0x0009, 0x01b0, 0x6010,
+	0x91a0, 0x0004, 0x2424, 0x9406, 0x0140, 0x9ce0, 0x001c, 0x2001,
+	0x181a, 0x2004, 0x9c02, 0x1220, 0x0c20, 0x9085, 0x0001, 0x0008,
+	0x9006, 0x003e, 0x004e, 0x00ee, 0x0005, 0x631c, 0xd3c4, 0x1d68,
+	0x0c30, 0x0096, 0x0006, 0x080c, 0x103a, 0x000e, 0x090c, 0x0d7d,
+	0xaae2, 0xa867, 0x010d, 0xa88e, 0x0026, 0x2010, 0x080c, 0xc826,
+	0x2001, 0x0000, 0x0120, 0x2200, 0x9080, 0x0017, 0x2004, 0x002e,
+	0xa87a, 0x9186, 0x0020, 0x0110, 0xa8e3, 0xffff, 0xa986, 0xac76,
+	0xa87f, 0x0000, 0x2001, 0x198e, 0x2004, 0xa882, 0x9006, 0xa802,
+	0xa86a, 0xa88a, 0x0126, 0x2091, 0x8000, 0x080c, 0x6d80, 0x012e,
+	0x009e, 0x0005, 0x6700, 0x9786, 0x0000, 0x0158, 0x9786, 0x0001,
+	0x0140, 0x9786, 0x000a, 0x0128, 0x9786, 0x0009, 0x0110, 0x9085,
+	0x0001, 0x0005, 0x00e6, 0x6010, 0x9075, 0x0138, 0x00b6, 0x2058,
+	0xb8a0, 0x00be, 0x9206, 0x00ee, 0x0005, 0x9085, 0x0001, 0x0cd8,
+	0x0016, 0x6004, 0x908e, 0x001e, 0x11a0, 0x8007, 0x6134, 0x918c,
+	0x00ff, 0x9105, 0x6036, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023,
+	0x0005, 0x2001, 0x1987, 0x2004, 0x601a, 0x2009, 0x8020, 0x080c,
+	0x921e, 0x001e, 0x0005, 0xa001, 0xa001, 0x0005, 0x6024, 0xd0e4,
+	0x0158, 0xd0cc, 0x0118, 0x080c, 0xcb7d, 0x0030, 0x080c, 0xe524,
+	0x080c, 0x88c1, 0x080c, 0xabed, 0x0005, 0x9280, 0x0008, 0x2004,
+	0x9084, 0x000f, 0x0002, 0xe359, 0xe359, 0xe359, 0xe35b, 0xe359,
+	0xe35b, 0xe35b, 0xe359, 0xe35b, 0xe359, 0xe359, 0xe359, 0xe359,
+	0xe359, 0x9006, 0x0005, 0x9085, 0x0001, 0x0005, 0x9280, 0x0008,
+	0x2004, 0x9084, 0x000f, 0x0002, 0xe372, 0xe372, 0xe372, 0xe372,
+	0xe372, 0xe372, 0xe37f, 0xe372, 0xe372, 0xe372, 0xe372, 0xe372,
+	0xe372, 0xe372, 0x6007, 0x003b, 0x602f, 0x0009, 0x6017, 0x2a00,
+	0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x921e, 0x0005, 0x0096,
+	0x00c6, 0x2260, 0x080c, 0xe524, 0x604b, 0x0000, 0x6024, 0xc0f4,
+	0xc0e4, 0x6026, 0x603b, 0x0000, 0x00ce, 0x00d6, 0x2268, 0x9186,
+	0x0007, 0x1904, 0xe3d8, 0x6814, 0x9005, 0x0138, 0x2048, 0xa87c,
+	0xd0fc, 0x1118, 0x00de, 0x009e, 0x08a8, 0x6007, 0x003a, 0x6003,
+	0x0001, 0x2009, 0x8020, 0x080c, 0x921e, 0x00c6, 0x2d60, 0x6100,
+	0x9186, 0x0002, 0x1904, 0xe44f, 0x6014, 0x9005, 0x1138, 0x6000,
+	0x9086, 0x0007, 0x190c, 0x0d7d, 0x0804, 0xe44f, 0x2048, 0x080c,
+	0xc838, 0x1130, 0x0028, 0x2048, 0xa800, 0x9005, 0x1de0, 0x2900,
+	0x2048, 0xa87c, 0x9084, 0x0003, 0x9086, 0x0002, 0x1168, 0xa87c,
+	0xc0dc, 0xc0f4, 0xa87e, 0xa880, 0xc0fc, 0xa882, 0x2009, 0x0043,
+	0x080c, 0xdc5d, 0x0804, 0xe44f, 0x2009, 0x0041, 0x0804, 0xe449,
+	0x9186, 0x0005, 0x15a0, 0x6814, 0x2048, 0xa87c, 0xd0bc, 0x1120,
+	0x00de, 0x009e, 0x0804, 0xe372, 0xd0b4, 0x0128, 0xd0fc, 0x090c,
+	0x0d7d, 0x0804, 0xe393, 0x6007, 0x003a, 0x6003, 0x0001, 0x2009,
+	0x8020, 0x080c, 0x921e, 0x00c6, 0x2d60, 0x6100, 0x9186, 0x0002,
+	0x0120, 0x9186, 0x0004, 0x1904, 0xe44f, 0x6814, 0x2048, 0xa97c,
+	0xc1f4, 0xc1dc, 0xa97e, 0xa980, 0xc1fc, 0xc1bc, 0xa982, 0x00f6,
+	0x2c78, 0x080c, 0x1731, 0x00fe, 0x2009, 0x0042, 0x04d0, 0x0036,
+	0x080c, 0x103a, 0x090c, 0x0d7d, 0xa867, 0x010d, 0x9006, 0xa802,
+	0xa86a, 0xa88a, 0x2d18, 0xab8e, 0xa887, 0x0045, 0x2c00, 0xa892,
+	0x6038, 0xa8a2, 0x2360, 0x6024, 0xc0dd, 0x6026, 0x6010, 0x00b6,
+	0x2058, 0xb8a0, 0x00be, 0x2004, 0x635c, 0xab7a, 0xa876, 0x9006,
+	0xa87e, 0xa882, 0xad9a, 0xae96, 0xa89f, 0x0001, 0x080c, 0x6d80,
+	0x2019, 0x0045, 0x6008, 0x2068, 0x080c, 0xde1b, 0x2d00, 0x600a,
+	0x6023, 0x0006, 0x6003, 0x0007, 0x901e, 0x631a, 0x634a, 0x003e,
+	0x0038, 0x604b, 0x0000, 0x6003, 0x0007, 0x080c, 0xdc5d, 0x00ce,
+	0x00de, 0x009e, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004, 0x9082,
+	0x0085, 0x2008, 0x00c2, 0x9186, 0x0027, 0x1178, 0x080c, 0x95de,
+	0x0036, 0x0096, 0x6014, 0x2048, 0x2019, 0x0004, 0x080c, 0xe26c,
+	0x009e, 0x003e, 0x080c, 0x96a0, 0x0005, 0x9186, 0x0014, 0x0d70,
+	0x080c, 0xaca9, 0x0005, 0xe482, 0xe480, 0xe480, 0xe480, 0xe480,
+	0xe480, 0xe482, 0xe480, 0xe480, 0xe480, 0xe480, 0xe480, 0xe480,
+	0x080c, 0x0d7d, 0x6003, 0x000c, 0x080c, 0x96a0, 0x0005, 0x9182,
+	0x0092, 0x1220, 0x9182, 0x0085, 0x0208, 0x001a, 0x080c, 0xaca9,
+	0x0005, 0xe49e, 0xe49e, 0xe49e, 0xe49e, 0xe4a0, 0xe4c0, 0xe49e,
+	0xe49e, 0xe49e, 0xe49e, 0xe49e, 0xe49e, 0xe49e, 0x080c, 0x0d7d,
+	0x00d6, 0x2c68, 0x080c, 0xab97, 0x01b0, 0x6003, 0x0001, 0x6007,
+	0x001e, 0x2009, 0x026e, 0x210c, 0x613a, 0x2009, 0x026f, 0x210c,
+	0x613e, 0x600b, 0xffff, 0x6910, 0x6112, 0x6023, 0x0004, 0x2009,
+	0x8020, 0x080c, 0x921e, 0x2d60, 0x080c, 0xabed, 0x00de, 0x0005,
+	0x080c, 0xabed, 0x0005, 0x00e6, 0x6010, 0x00b6, 0x2058, 0xb800,
+	0x00be, 0xd0ec, 0x00ee, 0x0005, 0x2009, 0x1867, 0x210c, 0xd1ec,
+	0x05b0, 0x6003, 0x0002, 0x6024, 0xc0e5, 0x6026, 0xd0cc, 0x0150,
+	0x2001, 0x1988, 0x2004, 0x604a, 0x2009, 0x1867, 0x210c, 0xd1f4,
+	0x1520, 0x00a0, 0x2009, 0x1867, 0x210c, 0xd1f4, 0x0128, 0x6024,
+	0xc0e4, 0x6026, 0x9006, 0x00d8, 0x2001, 0x1988, 0x200c, 0x2001,
+	0x1986, 0x2004, 0x9100, 0x9080, 0x000a, 0x604a, 0x6010, 0x00b6,
+	0x2058, 0xb8bc, 0x00be, 0x0008, 0x2104, 0x9005, 0x0118, 0x9088,
+	0x0003, 0x0cd0, 0x2c0a, 0x600f, 0x0000, 0x9085, 0x0001, 0x0005,
+	0x0016, 0x00c6, 0x00e6, 0x615c, 0xb8bc, 0x2060, 0x8cff, 0x0180,
+	0x84ff, 0x1118, 0x605c, 0x9106, 0x1138, 0x600c, 0x2072, 0x080c,
+	0x88c1, 0x080c, 0xabed, 0x0010, 0x9cf0, 0x0003, 0x2e64, 0x0c70,
+	0x00ee, 0x00ce, 0x001e, 0x0005, 0x00d6, 0x00b6, 0x6010, 0x2058,
+	0xb8bc, 0x2068, 0x9005, 0x0130, 0x9c06, 0x0110, 0x680c, 0x0cd0,
+	0x600c, 0x680e, 0x00be, 0x00de, 0x0005, 0x0026, 0x0036, 0x0156,
+	0x2011, 0x182c, 0x2204, 0x9084, 0x00ff, 0x2019, 0x026e, 0x2334,
+	0x9636, 0x1508, 0x8318, 0x2334, 0x2204, 0x9084, 0xff00, 0x9636,
+	0x11d0, 0x2011, 0x0270, 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048,
+	0x2019, 0x000a, 0x080c, 0xbbc2, 0x009e, 0x1168, 0x2011, 0x0274,
+	0x20a9, 0x0004, 0x6010, 0x0096, 0x2048, 0x2019, 0x0006, 0x080c,
+	0xbbc2, 0x009e, 0x1100, 0x015e, 0x003e, 0x002e, 0x0005, 0x00e6,
+	0x2071, 0x1800, 0x080c, 0x5fbc, 0x080c, 0x2fb2, 0x00ee, 0x0005,
+	0x0096, 0x0026, 0x080c, 0x103a, 0x090c, 0x0d7d, 0xa85c, 0x9080,
+	0x001a, 0x20a0, 0x20a9, 0x000c, 0xa860, 0x20e8, 0x9006, 0x4004,
+	0x9186, 0x0046, 0x1118, 0xa867, 0x0136, 0x0038, 0xa867, 0x0138,
+	0x9186, 0x0041, 0x0110, 0xa87b, 0x0001, 0x7038, 0x9084, 0xff00,
+	0x7240, 0x9294, 0xff00, 0x8007, 0x9215, 0xaa9a, 0x9186, 0x0046,
+	0x1168, 0x7038, 0x9084, 0x00ff, 0x723c, 0x9294, 0xff00, 0x9215,
+	0xaa9e, 0x723c, 0x9294, 0x00ff, 0xaaa2, 0x0060, 0x7040, 0x9084,
+	0x00ff, 0x7244, 0x9294, 0xff00, 0x9215, 0xaa9e, 0x7244, 0x9294,
+	0x00ff, 0xaaa2, 0x9186, 0x0046, 0x1118, 0x9e90, 0x0012, 0x0010,
+	0x9e90, 0x001a, 0x2204, 0x8007, 0xa8a6, 0x8210, 0x2204, 0x8007,
+	0xa8aa, 0x8210, 0x2204, 0x8007, 0xa8ae, 0x8210, 0x2204, 0x8007,
+	0xa8b2, 0x8210, 0x9186, 0x0046, 0x11b8, 0x9e90, 0x0016, 0x2204,
+	0x8007, 0xa8b6, 0x8210, 0x2204, 0x8007, 0xa8ba, 0x8210, 0x2204,
+	0x8007, 0xa8be, 0x8210, 0x2204, 0x8007, 0xa8c2, 0x8210, 0x2011,
+	0x0205, 0x2013, 0x0001, 0x00b0, 0x9e90, 0x001e, 0x2204, 0x8007,
+	0xa8b6, 0x8210, 0x2204, 0x8007, 0xa8ba, 0x2011, 0x0205, 0x2013,
+	0x0001, 0x2011, 0x0260, 0x2204, 0x8007, 0xa8be, 0x8210, 0x2204,
+	0x8007, 0xa8c2, 0x9186, 0x0046, 0x1118, 0x2011, 0x0262, 0x0010,
+	0x2011, 0x026a, 0x0146, 0x01d6, 0x0036, 0x20a9, 0x0001, 0x2019,
+	0x0008, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0031, 0x20a0, 0x2204,
+	0x8007, 0x4004, 0x8210, 0x8319, 0x1dd0, 0x003e, 0x01ce, 0x013e,
+	0x2011, 0x0205, 0x2013, 0x0000, 0x002e, 0x080c, 0x6d80, 0x009e,
+	0x0005, 0x00e6, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0fc,
+	0x0108, 0x0011, 0x00ee, 0x0005, 0xa880, 0xc0e5, 0xa882, 0x0005,
+	0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066, 0x0056, 0x0046, 0x0026,
+	0x0016, 0x0126, 0x2091, 0x8000, 0x2029, 0x19f3, 0x252c, 0x2021,
+	0x19fa, 0x2424, 0x2061, 0x1ddc, 0x2071, 0x1800, 0x7654, 0x7074,
+	0x9606, 0x0578, 0x6720, 0x9786, 0x0001, 0x0118, 0x9786, 0x0008,
+	0x1500, 0x2500, 0x9c06, 0x01e8, 0x2400, 0x9c06, 0x01d0, 0x080c,
+	0xe2fa, 0x01b8, 0x080c, 0xe30a, 0x11a0, 0x6000, 0x9086, 0x0004,
+	0x1120, 0x0016, 0x080c, 0x1a6a, 0x001e, 0x080c, 0xca3c, 0x1110,
+	0x080c, 0x321c, 0x080c, 0xca4d, 0x1110, 0x080c, 0xb5b5, 0x080c,
+	0xac28, 0x9ce0, 0x001c, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1208,
+	0x0858, 0x012e, 0x001e, 0x002e, 0x004e, 0x005e, 0x006e, 0x007e,
+	0x00ce, 0x00de, 0x00ee, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0dc,
+	0x0005, 0x0006, 0x2001, 0x1837, 0x2004, 0xd09c, 0x000e, 0x0005,
+	0x0006, 0x0036, 0x0046, 0x080c, 0xcf52, 0x0168, 0x2019, 0xffff,
+	0x9005, 0x0128, 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021,
+	0x0004, 0x080c, 0x4cbe, 0x004e, 0x003e, 0x000e, 0x6004, 0x9086,
+	0x0001, 0x1128, 0x080c, 0xa38a, 0x080c, 0xac28, 0x9006, 0x0005,
+	0x00e6, 0x00c6, 0x00b6, 0x0046, 0x2061, 0x1ddc, 0x2071, 0x1800,
+	0x7454, 0x7074, 0x8001, 0x9402, 0x12b8, 0x2100, 0x9c06, 0x0148,
+	0x6000, 0x9086, 0x0000, 0x0128, 0x6010, 0x2058, 0xb8a0, 0x9206,
+	0x0140, 0x9ce0, 0x001c, 0x2001, 0x181a, 0x2004, 0x9c02, 0x1220,
+	0x0c60, 0x9085, 0x0001, 0x0008, 0x9006, 0x004e, 0x00be, 0x00ce,
+	0x00ee, 0x0005, 0x0126, 0x0006, 0x00e6, 0x0016, 0x2091, 0x8000,
+	0x2071, 0x1840, 0xd5a4, 0x0118, 0x7004, 0x8000, 0x7006, 0xd5b4,
+	0x0118, 0x7000, 0x8000, 0x7002, 0xd5ac, 0x0178, 0x2500, 0x9084,
+	0x0007, 0x908e, 0x0003, 0x0148, 0x908e, 0x0004, 0x0130, 0x908e,
+	0x0005, 0x0118, 0x2071, 0xfffe, 0x0089, 0x001e, 0x00ee, 0x000e,
+	0x012e, 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071,
+	0xfff6, 0x0021, 0x00ee, 0x000e, 0x012e, 0x0005, 0x2e05, 0x8000,
+	0x2077, 0x1220, 0x8e70, 0x2e05, 0x8000, 0x2077, 0x0005, 0x00e6,
+	0x2071, 0xfff4, 0x0c99, 0x00ee, 0x0005, 0x00e6, 0x2071, 0xfff8,
+	0x0c69, 0x00ee, 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000,
+	0x2071, 0x1840, 0x7014, 0x8000, 0x7016, 0x00ee, 0x000e, 0x012e,
+	0x0005, 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040,
+	0x0080, 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000,
+	0x8000, 0x7155
 };
 #ifdef UNIQUE_FW_NAME
-unsigned short fw2322ipx_length01 = 0xdf17;
+unsigned short fw2322ipx_length01 = 0xdf42;
 #else
-unsigned short risc_code_length01 = 0xdf17;
+unsigned short risc_code_length01 = 0xdf42;
 #endif
 
 /*
@@ -7472,9 +7478,9 @@
 	0x0000, 0x8072, 0x0000, 0x0400, 0x0008, 0x8010, 0x0000, 0x0010,
 	0x000b, 0x0489, 0x0004, 0x04a4, 0x0002, 0x3941, 0x0003, 0x0c37,
 	0x0000, 0x8072, 0x0000, 0x0400, 0x0003, 0x0013, 0x0004, 0x046e,
-	0x0008, 0x11fc, 0x0003, 0x8c3f, 0x0000, 0x8072, 0x0000, 0x0400,
+	0x0008, 0x11fc, 0x000b, 0xb43f, 0x0000, 0x8072, 0x0000, 0x0400,
 	0x0008, 0x8010, 0x0000, 0x000e, 0x000b, 0x0489, 0x0000, 0x8060,
-	0x0000, 0x0400, 0x0000, 0x04fc, 0x000b, 0x8c54, 0x0008, 0x808c,
+	0x0000, 0x0400, 0x0000, 0x04fc, 0x0003, 0xb454, 0x0008, 0x808c,
 	0x0008, 0x0000, 0x0001, 0x9180, 0x0008, 0x0005, 0x0008, 0x7f62,
 	0x0000, 0x8066, 0x0008, 0x0009, 0x000b, 0xc44a, 0x0008, 0x0060,
 	0x0008, 0x8062, 0x0008, 0x001b, 0x0008, 0x4304, 0x0008, 0x4206,
@@ -7502,7 +7508,7 @@
 	0x0002, 0x3941, 0x0003, 0x0ca7, 0x000f, 0x4000, 0x0000, 0x8072,
 	0x0008, 0x0404, 0x000f, 0x4000, 0x0008, 0x8010, 0x0008, 0x0012,
 	0x000c, 0x035b, 0x0004, 0x046e, 0x0000, 0x1110, 0x000c, 0x035b,
-	0x0008, 0x11fc, 0x000b, 0x8cad, 0x0003, 0x0013, 0x0009, 0xc2c0,
+	0x0008, 0x11fc, 0x0003, 0xb4ad, 0x0003, 0x0013, 0x0009, 0xc2c0,
 	0x0008, 0x00ff, 0x0000, 0x7f00, 0x0001, 0xc3c0, 0x0008, 0xff00,
 	0x0009, 0x00d0, 0x000b, 0x0cd8, 0x0000, 0x0d0a, 0x0001, 0x8580,
 	0x0000, 0x1000, 0x0008, 0x7f62, 0x0000, 0x8060, 0x0000, 0x0400,
@@ -7516,7 +7522,7 @@
 	0x0000, 0x8066, 0x0000, 0x0809, 0x0003, 0xc4de, 0x0000, 0x8060,
 	0x0000, 0x0400, 0x0001, 0x84c0, 0x0008, 0xff00, 0x0002, 0x7f70,
 	0x0009, 0xff80, 0x0000, 0x1000, 0x0008, 0x7f62, 0x0000, 0x8066,
-	0x0000, 0x0809, 0x000b, 0xc4e9, 0x000f, 0x4000, 0xe552, 0xe9f6
+	0x0000, 0x0809, 0x000b, 0xc4e9, 0x000f, 0x4000, 0xe55a, 0x71f6
 };
 unsigned short rseqipx_code_length01 = 0x09d8;
 /*
diff -Nru a/drivers/scsi/qla2xxx/ql6312_fw.c b/drivers/scsi/qla2xxx/ql6312_fw.c
--- a/drivers/scsi/qla2xxx/ql6312_fw.c	Sun May 16 01:18:34 2004
+++ b/drivers/scsi/qla2xxx/ql6312_fw.c	Sun May 16 01:18:34 2004
@@ -18,7 +18,7 @@
  *************************************************************************/
 
 /*
- *	Firmware Version 3.02.26 (08:43 Mar 11, 2004)
+ *	Firmware Version 3.02.28 (13:56 Apr 03, 2004)
  */
 
 #ifdef UNIQUE_FW_NAME
@@ -28,15 +28,15 @@
 #endif
 
 #ifdef UNIQUE_FW_NAME
-unsigned char fw2300flx_version_str[] = {3, 2,26};
+unsigned char fw2300flx_version_str[] = {3, 2,28};
 #else
-unsigned char firmware_version[] = {3, 2,26};
+unsigned char firmware_version[] = {3, 2,28};
 #endif
 
 #ifdef UNIQUE_FW_NAME
-#define fw2300flx_VERSION_STRING "3.02.26"
+#define fw2300flx_VERSION_STRING "3.02.28"
 #else
-#define FW_VERSION_STRING "3.02.26"
+#define FW_VERSION_STRING "3.02.28"
 #endif
 
 #ifdef UNIQUE_FW_NAME
@@ -50,12 +50,12 @@
 #else
 unsigned short risc_code01[] = { 
 #endif
-	0x0470, 0x0000, 0x0000, 0xd57a, 0x0000, 0x0003, 0x0002, 0x001a,
+	0x0470, 0x0000, 0x0000, 0xd59a, 0x0000, 0x0003, 0x0002, 0x001c,
 	0x0317, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2032, 0x3030,
 	0x3120, 0x514c, 0x4f47, 0x4943, 0x2043, 0x4f52, 0x504f, 0x5241,
 	0x5449, 0x4f4e, 0x2049, 0x5350, 0x3233, 0x3030, 0x2046, 0x6972,
 	0x6d77, 0x6172, 0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030,
-	0x332e, 0x3032, 0x2e32, 0x3620, 0x2020, 0x2020, 0x2400, 0x20a9,
+	0x332e, 0x3032, 0x2e32, 0x3820, 0x2020, 0x2020, 0x2400, 0x20a9,
 	0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2200, 0x20a9, 0x000f,
 	0x2001, 0x0000, 0x400f, 0x2091, 0x2400, 0x20a9, 0x000f, 0x2001,
 	0x0000, 0x400f, 0x2091, 0x2600, 0x20a9, 0x000f, 0x2001, 0x0000,
@@ -78,94 +78,94 @@
 	0x1800, 0x810d, 0x810d, 0x810d, 0x810d, 0x810d, 0x918c, 0x001f,
 	0x2001, 0x0001, 0x9112, 0x20e9, 0x0001, 0x20a1, 0x0800, 0x900e,
 	0x20a9, 0x0800, 0x4104, 0x8211, 0x1dd8, 0x080c, 0x0f03, 0x080c,
-	0x5cd8, 0x080c, 0x9daf, 0x080c, 0x10ba, 0x080c, 0x129f, 0x080c,
-	0x1a53, 0x080c, 0x0d46, 0x080c, 0x103f, 0x080c, 0x3231, 0x080c,
-	0x729f, 0x080c, 0x6616, 0x080c, 0x7f4b, 0x080c, 0x230a, 0x080c,
-	0x8278, 0x080c, 0x7928, 0x080c, 0x2147, 0x080c, 0x227b, 0x080c,
+	0x5cdf, 0x080c, 0x9dc8, 0x080c, 0x10ba, 0x080c, 0x129f, 0x080c,
+	0x1a53, 0x080c, 0x0d46, 0x080c, 0x103f, 0x080c, 0x3238, 0x080c,
+	0x72aa, 0x080c, 0x661d, 0x080c, 0x7f73, 0x080c, 0x230a, 0x080c,
+	0x82a0, 0x080c, 0x7933, 0x080c, 0x2147, 0x080c, 0x227b, 0x080c,
 	0x22ff, 0x2091, 0x3009, 0x7883, 0x0000, 0x1004, 0x091d, 0x7880,
 	0x9086, 0x0002, 0x1190, 0x7883, 0x4000, 0x7837, 0x4000, 0x7833,
 	0x0010, 0x0e04, 0x0911, 0x2091, 0x5000, 0x2091, 0x4080, 0x2001,
 	0x0089, 0x2004, 0xd084, 0x190c, 0x1187, 0x2071, 0x1800, 0x7003,
 	0x0000, 0x2071, 0x1800, 0x7000, 0x908e, 0x0003, 0x1168, 0x080c,
-	0x4997, 0x080c, 0x3258, 0x080c, 0x7310, 0x080c, 0x6ad6, 0x080c,
-	0x7f74, 0x080c, 0x2ab8, 0x0c68, 0x000b, 0x0c88, 0x0940, 0x0941,
+	0x499e, 0x080c, 0x325f, 0x080c, 0x731b, 0x080c, 0x6add, 0x080c,
+	0x7f9c, 0x080c, 0x2ab8, 0x0c68, 0x000b, 0x0c88, 0x0940, 0x0941,
 	0x0ad8, 0x093e, 0x0b8f, 0x0d45, 0x0d45, 0x0d45, 0x080c, 0x0db4,
 	0x0005, 0x0126, 0x00f6, 0x2091, 0x8000, 0x7000, 0x9086, 0x0001,
-	0x1904, 0x0aab, 0x080c, 0x0e71, 0x080c, 0x6fa7, 0x0150, 0x080c,
-	0x6fca, 0x15a0, 0x2079, 0x0100, 0x7828, 0x9085, 0x1800, 0x782a,
-	0x0468, 0x080c, 0x6ed9, 0x7000, 0x9086, 0x0001, 0x1904, 0x0aab,
-	0x7094, 0x9086, 0x0028, 0x1904, 0x0aab, 0x080c, 0x7f43, 0x080c,
-	0x7f35, 0x2001, 0x0161, 0x2003, 0x0001, 0x2079, 0x0100, 0x7827,
-	0xffff, 0x7a28, 0x9295, 0x5e2f, 0x7a2a, 0x2011, 0x6e28, 0x080c,
-	0x8010, 0x2011, 0x6e1b, 0x080c, 0x80e4, 0x2011, 0x5b33, 0x080c,
-	0x8010, 0x2011, 0x8030, 0x901e, 0x7392, 0x04d0, 0x080c, 0x53e0,
-	0x2079, 0x0100, 0x7844, 0x9005, 0x1904, 0x0aab, 0x2011, 0x5b33,
-	0x080c, 0x8010, 0x2011, 0x6e28, 0x080c, 0x8010, 0x2011, 0x6e1b,
-	0x080c, 0x80e4, 0x2001, 0x0265, 0x2001, 0x0205, 0x2003, 0x0000,
+	0x1904, 0x0aab, 0x080c, 0x0e71, 0x080c, 0x6fb2, 0x0150, 0x080c,
+	0x6fd5, 0x15a0, 0x2079, 0x0100, 0x7828, 0x9085, 0x1800, 0x782a,
+	0x0468, 0x080c, 0x6ee4, 0x7000, 0x9086, 0x0001, 0x1904, 0x0aab,
+	0x7094, 0x9086, 0x0028, 0x1904, 0x0aab, 0x080c, 0x7f6b, 0x080c,
+	0x7f5d, 0x2001, 0x0161, 0x2003, 0x0001, 0x2079, 0x0100, 0x7827,
+	0xffff, 0x7a28, 0x9295, 0x5e2f, 0x7a2a, 0x2011, 0x6e33, 0x080c,
+	0x8038, 0x2011, 0x6e26, 0x080c, 0x810c, 0x2011, 0x5b3a, 0x080c,
+	0x8038, 0x2011, 0x8030, 0x901e, 0x7392, 0x04d0, 0x080c, 0x53e7,
+	0x2079, 0x0100, 0x7844, 0x9005, 0x1904, 0x0aab, 0x2011, 0x5b3a,
+	0x080c, 0x8038, 0x2011, 0x6e33, 0x080c, 0x8038, 0x2011, 0x6e26,
+	0x080c, 0x810c, 0x2001, 0x0265, 0x2001, 0x0205, 0x2003, 0x0000,
 	0x7840, 0x9084, 0xfffb, 0x7842, 0x2001, 0x1977, 0x2004, 0x9005,
-	0x1140, 0x00c6, 0x2061, 0x0100, 0x080c, 0x5c80, 0x00ce, 0x0804,
-	0x0aab, 0x780f, 0x006b, 0x7a28, 0x080c, 0x6faf, 0x0118, 0x9295,
+	0x1140, 0x00c6, 0x2061, 0x0100, 0x080c, 0x5c87, 0x00ce, 0x0804,
+	0x0aab, 0x780f, 0x006b, 0x7a28, 0x080c, 0x6fba, 0x0118, 0x9295,
 	0x5e2f, 0x0010, 0x9295, 0x402f, 0x7a2a, 0x2011, 0x8010, 0x73d4,
-	0x2001, 0x1978, 0x2003, 0x0001, 0x080c, 0x297e, 0x080c, 0x48d2,
+	0x2001, 0x1978, 0x2003, 0x0001, 0x080c, 0x297e, 0x080c, 0x48d9,
 	0x7244, 0xc284, 0x7246, 0x2001, 0x180c, 0x200c, 0xc1ac, 0xc1cc,
-	0x2102, 0x080c, 0x9626, 0x2011, 0x0004, 0x080c, 0xbb0e, 0x080c,
-	0x645a, 0x080c, 0x6fa7, 0x1120, 0x080c, 0x29c2, 0x02e0, 0x0400,
-	0x080c, 0x5c87, 0x0140, 0x7093, 0x0001, 0x70cf, 0x0000, 0x080c,
-	0x55ad, 0x0804, 0x0aab, 0x080c, 0x537f, 0xd094, 0x0188, 0x2011,
-	0x180c, 0x2204, 0xc0cd, 0x2012, 0x080c, 0x5383, 0xd0d4, 0x1118,
+	0x2102, 0x080c, 0x963f, 0x2011, 0x0004, 0x080c, 0xbb27, 0x080c,
+	0x6461, 0x080c, 0x6fb2, 0x1120, 0x080c, 0x29c2, 0x02e0, 0x0400,
+	0x080c, 0x5c8e, 0x0140, 0x7093, 0x0001, 0x70cf, 0x0000, 0x080c,
+	0x55b4, 0x0804, 0x0aab, 0x080c, 0x5386, 0xd094, 0x0188, 0x2011,
+	0x180c, 0x2204, 0xc0cd, 0x2012, 0x080c, 0x538a, 0xd0d4, 0x1118,
 	0x080c, 0x29c2, 0x1270, 0x2011, 0x180c, 0x2204, 0xc0bc, 0x0088,
-	0x080c, 0x5383, 0xd0d4, 0x1db8, 0x2011, 0x180c, 0x2204, 0xc0bd,
-	0x0040, 0x2011, 0x180c, 0x2204, 0xc0bd, 0x2012, 0x080c, 0x6553,
-	0x0008, 0x2012, 0x080c, 0x6519, 0x0120, 0x7a0c, 0xc2b4, 0x7a0e,
-	0x00a8, 0x707b, 0x0000, 0x080c, 0x6fa7, 0x1130, 0x70ac, 0x9005,
-	0x1168, 0x080c, 0xbf4a, 0x0050, 0x080c, 0xbf4a, 0x70d8, 0xd09c,
-	0x1128, 0x70ac, 0x9005, 0x0110, 0x080c, 0x5c5d, 0x70e3, 0x0000,
+	0x080c, 0x538a, 0xd0d4, 0x1db8, 0x2011, 0x180c, 0x2204, 0xc0bd,
+	0x0040, 0x2011, 0x180c, 0x2204, 0xc0bd, 0x2012, 0x080c, 0x655a,
+	0x0008, 0x2012, 0x080c, 0x6520, 0x0120, 0x7a0c, 0xc2b4, 0x7a0e,
+	0x00a8, 0x707b, 0x0000, 0x080c, 0x6fb2, 0x1130, 0x70ac, 0x9005,
+	0x1168, 0x080c, 0xbf63, 0x0050, 0x080c, 0xbf63, 0x70d8, 0xd09c,
+	0x1128, 0x70ac, 0x9005, 0x0110, 0x080c, 0x5c64, 0x70e3, 0x0000,
 	0x70df, 0x0000, 0x70a3, 0x0000, 0x080c, 0x29ca, 0x0228, 0x2011,
-	0x0101, 0x2204, 0xc0c4, 0x2012, 0x72d8, 0x080c, 0x6fa7, 0x1178,
+	0x0101, 0x2204, 0xc0c4, 0x2012, 0x72d8, 0x080c, 0x6fb2, 0x1178,
 	0x9016, 0x0016, 0x2009, 0x0002, 0x2019, 0x193e, 0x211a, 0x001e,
 	0x705b, 0xffff, 0x705f, 0x00ef, 0x707f, 0x0000, 0x0020, 0x2019,
 	0x193e, 0x201b, 0x0000, 0x2079, 0x1853, 0x7804, 0xd0ac, 0x0108,
-	0xc295, 0x72da, 0x080c, 0x6fa7, 0x0118, 0x9296, 0x0004, 0x0548,
-	0x2011, 0x0001, 0x080c, 0xbb0e, 0x70a7, 0x0000, 0x70ab, 0xffff,
+	0xc295, 0x72da, 0x080c, 0x6fb2, 0x0118, 0x9296, 0x0004, 0x0548,
+	0x2011, 0x0001, 0x080c, 0xbb27, 0x70a7, 0x0000, 0x70ab, 0xffff,
 	0x7003, 0x0002, 0x2079, 0x0100, 0x7827, 0x0003, 0x7828, 0x9085,
 	0x0003, 0x782a, 0x00fe, 0x080c, 0x2dbb, 0x2011, 0x0005, 0x080c,
-	0x9758, 0x080c, 0x894b, 0x080c, 0x6fa7, 0x0148, 0x00c6, 0x2061,
+	0x9771, 0x080c, 0x8973, 0x080c, 0x6fb2, 0x0148, 0x00c6, 0x2061,
 	0x0100, 0x0016, 0x2009, 0x0002, 0x61e2, 0x001e, 0x00ce, 0x012e,
 	0x0420, 0x70a7, 0x0000, 0x70ab, 0xffff, 0x7003, 0x0002, 0x00f6,
 	0x2079, 0x0100, 0x7827, 0x0003, 0x7828, 0x9085, 0x0003, 0x782a,
-	0x00fe, 0x2011, 0x0005, 0x080c, 0x9758, 0x080c, 0x894b, 0x080c,
-	0x6fa7, 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016, 0x2009, 0x0002,
+	0x00fe, 0x2011, 0x0005, 0x080c, 0x9771, 0x080c, 0x8973, 0x080c,
+	0x6fb2, 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016, 0x2009, 0x0002,
 	0x61e2, 0x001e, 0x00ce, 0x00fe, 0x012e, 0x0005, 0x00c6, 0x00b6,
-	0x080c, 0x6fa7, 0x1118, 0x20a9, 0x0800, 0x0010, 0x20a9, 0x0782,
-	0x080c, 0x6fa7, 0x1110, 0x900e, 0x0010, 0x2009, 0x007e, 0x86ff,
+	0x080c, 0x6fb2, 0x1118, 0x20a9, 0x0800, 0x0010, 0x20a9, 0x0782,
+	0x080c, 0x6fb2, 0x1110, 0x900e, 0x0010, 0x2009, 0x007e, 0x86ff,
 	0x0138, 0x9180, 0x1000, 0x2004, 0x905d, 0x0110, 0xb800, 0xd0bc,
-	0x090c, 0x30ce, 0x8108, 0x1f04, 0x0abf, 0x707b, 0x0000, 0x707c,
+	0x090c, 0x30d5, 0x8108, 0x1f04, 0x0abf, 0x707b, 0x0000, 0x707c,
 	0x9084, 0x00ff, 0x707e, 0x70af, 0x0000, 0x00be, 0x00ce, 0x0005,
 	0x00b6, 0x0126, 0x2091, 0x8000, 0x7000, 0x9086, 0x0002, 0x1904,
 	0x0b8c, 0x70a8, 0x9086, 0xffff, 0x0130, 0x080c, 0x2dbb, 0x080c,
-	0x894b, 0x0804, 0x0b8c, 0x70d8, 0xd0ac, 0x1110, 0xd09c, 0x0540,
+	0x8973, 0x0804, 0x0b8c, 0x70d8, 0xd0ac, 0x1110, 0xd09c, 0x0540,
 	0xd084, 0x0530, 0x0006, 0x2001, 0x0103, 0x2003, 0x002b, 0x000e,
-	0xd08c, 0x01f0, 0x70dc, 0x9086, 0xffff, 0x01b0, 0x080c, 0x2f43,
-	0x080c, 0x894b, 0x70d8, 0xd094, 0x1904, 0x0b8c, 0x2011, 0x0001,
-	0x080c, 0xc1f9, 0x0110, 0x2011, 0x0003, 0x901e, 0x080c, 0x2f7d,
-	0x080c, 0x894b, 0x0804, 0x0b8c, 0x70e0, 0x9005, 0x1904, 0x0b8c,
+	0xd08c, 0x01f0, 0x70dc, 0x9086, 0xffff, 0x01b0, 0x080c, 0x2f46,
+	0x080c, 0x8973, 0x70d8, 0xd094, 0x1904, 0x0b8c, 0x2011, 0x0001,
+	0x080c, 0xc212, 0x0110, 0x2011, 0x0003, 0x901e, 0x080c, 0x2f80,
+	0x080c, 0x8973, 0x0804, 0x0b8c, 0x70e0, 0x9005, 0x1904, 0x0b8c,
 	0x70a4, 0x9005, 0x1904, 0x0b8c, 0x70d8, 0xd0a4, 0x0118, 0xd0b4,
-	0x0904, 0x0b8c, 0x080c, 0x6519, 0x1904, 0x0b8c, 0x080c, 0x656c,
-	0x1904, 0x0b8c, 0x080c, 0x6553, 0x01c0, 0x0156, 0x00c6, 0x20a9,
-	0x007f, 0x900e, 0x0016, 0x080c, 0x6237, 0x1118, 0xb800, 0xd0ec,
+	0x0904, 0x0b8c, 0x080c, 0x6520, 0x1904, 0x0b8c, 0x080c, 0x6573,
+	0x1904, 0x0b8c, 0x080c, 0x655a, 0x01c0, 0x0156, 0x00c6, 0x20a9,
+	0x007f, 0x900e, 0x0016, 0x080c, 0x623e, 0x1118, 0xb800, 0xd0ec,
 	0x1138, 0x001e, 0x8108, 0x1f04, 0x0b32, 0x00ce, 0x015e, 0x0028,
 	0x001e, 0x00ce, 0x015e, 0x0804, 0x0b8c, 0x0006, 0x2001, 0x0103,
 	0x2003, 0x006b, 0x000e, 0x2011, 0x1984, 0x080c, 0x0f73, 0x2011,
 	0x199e, 0x080c, 0x0f73, 0x7030, 0xc08c, 0x7032, 0x7003, 0x0003,
 	0x70ab, 0xffff, 0x080c, 0x0e53, 0x9006, 0x080c, 0x260c, 0x0036,
-	0x0046, 0x2019, 0xffff, 0x2021, 0x0006, 0x080c, 0x4a6f, 0x004e,
-	0x003e, 0x00f6, 0x2079, 0x0100, 0x080c, 0x6fca, 0x0150, 0x080c,
-	0x6fa7, 0x7828, 0x0118, 0x9084, 0xe1ff, 0x0010, 0x9084, 0xffdf,
+	0x0046, 0x2019, 0xffff, 0x2021, 0x0006, 0x080c, 0x4a76, 0x004e,
+	0x003e, 0x00f6, 0x2079, 0x0100, 0x080c, 0x6fd5, 0x0150, 0x080c,
+	0x6fb2, 0x7828, 0x0118, 0x9084, 0xe1ff, 0x0010, 0x9084, 0xffdf,
 	0x782a, 0x00fe, 0x2001, 0x19b9, 0x2004, 0x9086, 0x0005, 0x1120,
-	0x2011, 0x0000, 0x080c, 0x9758, 0x2011, 0x0000, 0x080c, 0x9762,
-	0x080c, 0x894b, 0x080c, 0x8a26, 0x012e, 0x00be, 0x0005, 0x0016,
+	0x2011, 0x0000, 0x080c, 0x9771, 0x2011, 0x0000, 0x080c, 0x977b,
+	0x080c, 0x8973, 0x080c, 0x8a4e, 0x012e, 0x00be, 0x0005, 0x0016,
 	0x0046, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2079, 0x0100, 0x7904,
-	0x918c, 0xfffd, 0x7906, 0x2009, 0x00f7, 0x080c, 0x5c46, 0x7940,
+	0x918c, 0xfffd, 0x7906, 0x2009, 0x00f7, 0x080c, 0x5c4d, 0x7940,
 	0x918c, 0x0010, 0x7942, 0x7924, 0xd1b4, 0x0110, 0x7827, 0x0040,
 	0xd19c, 0x0110, 0x7827, 0x0008, 0x0006, 0x0036, 0x0156, 0x7954,
 	0xd1ac, 0x1904, 0x0c1c, 0x2001, 0x1978, 0x2004, 0x9005, 0x1518,
@@ -173,13 +173,13 @@
 	0x0001, 0x080c, 0x2990, 0x00b8, 0x080c, 0x2a4d, 0x1138, 0x9006,
 	0x080c, 0x29ad, 0x9006, 0x080c, 0x2990, 0x0068, 0x080c, 0x2a55,
 	0x1d50, 0x2001, 0x1969, 0x2004, 0xd0fc, 0x0108, 0x0020, 0x080c,
-	0x27a7, 0x0804, 0x0cfc, 0x080c, 0x6fb8, 0x0148, 0x080c, 0x6fca,
-	0x1118, 0x080c, 0x729a, 0x0050, 0x080c, 0x6faf, 0x0dd0, 0x080c,
-	0x7295, 0x080c, 0x728b, 0x080c, 0x6ed9, 0x0058, 0x080c, 0x6fa7,
-	0x0140, 0x2009, 0x00f8, 0x080c, 0x5c46, 0x7843, 0x0090, 0x7843,
-	0x0010, 0x20a9, 0x09c4, 0x7820, 0xd09c, 0x1138, 0x080c, 0x6fa7,
+	0x27a7, 0x0804, 0x0cfc, 0x080c, 0x6fc3, 0x0148, 0x080c, 0x6fd5,
+	0x1118, 0x080c, 0x72a5, 0x0050, 0x080c, 0x6fba, 0x0dd0, 0x080c,
+	0x72a0, 0x080c, 0x7296, 0x080c, 0x6ee4, 0x0058, 0x080c, 0x6fb2,
+	0x0140, 0x2009, 0x00f8, 0x080c, 0x5c4d, 0x7843, 0x0090, 0x7843,
+	0x0010, 0x20a9, 0x09c4, 0x7820, 0xd09c, 0x1138, 0x080c, 0x6fb2,
 	0x0138, 0x7824, 0xd0ac, 0x1904, 0x0d01, 0x1f04, 0x0bfb, 0x0070,
-	0x7824, 0x080c, 0x6fc1, 0x0118, 0xd0ac, 0x1904, 0x0d01, 0x9084,
+	0x7824, 0x080c, 0x6fcc, 0x0118, 0xd0ac, 0x1904, 0x0d01, 0x9084,
 	0x1800, 0x0d98, 0x7003, 0x0001, 0x0804, 0x0d01, 0x2001, 0x0001,
 	0x080c, 0x260c, 0x0804, 0x0d14, 0x2001, 0x1978, 0x2004, 0x9005,
 	0x1518, 0x080c, 0x2a45, 0x1148, 0x2001, 0x0001, 0x080c, 0x29ad,
@@ -189,46 +189,46 @@
 	0x080c, 0x27a7, 0x0804, 0x0cfc, 0x7850, 0x9085, 0x0040, 0x7852,
 	0x7938, 0x7850, 0x9084, 0xfbcf, 0x7852, 0x080c, 0x2a5d, 0x9085,
 	0x2000, 0x7852, 0x793a, 0x20a9, 0x0046, 0x1d04, 0x0c55, 0x080c,
-	0x80c4, 0x1f04, 0x0c55, 0x7850, 0x9085, 0x0400, 0x9084, 0xdfbf,
-	0x7852, 0x793a, 0x080c, 0x6fb8, 0x0148, 0x080c, 0x6fca, 0x1118,
-	0x080c, 0x729a, 0x0050, 0x080c, 0x6faf, 0x0dd0, 0x080c, 0x7295,
-	0x080c, 0x728b, 0x080c, 0x6ed9, 0x0020, 0x2009, 0x00f8, 0x080c,
-	0x5c46, 0x20a9, 0x0028, 0xa001, 0x1f04, 0x0c7b, 0x7850, 0x9085,
-	0x1400, 0x7852, 0x080c, 0x6fa7, 0x0120, 0x7843, 0x0090, 0x7843,
-	0x0010, 0x2021, 0xe678, 0x2019, 0xea60, 0x0d0c, 0x80c4, 0x7820,
-	0xd09c, 0x1588, 0x080c, 0x6fa7, 0x0904, 0x0ce1, 0x7824, 0xd0ac,
-	0x1904, 0x0d01, 0x080c, 0x6fca, 0x1530, 0x0046, 0x2021, 0x0320,
+	0x80ec, 0x1f04, 0x0c55, 0x7850, 0x9085, 0x0400, 0x9084, 0xdfbf,
+	0x7852, 0x793a, 0x080c, 0x6fc3, 0x0148, 0x080c, 0x6fd5, 0x1118,
+	0x080c, 0x72a5, 0x0050, 0x080c, 0x6fba, 0x0dd0, 0x080c, 0x72a0,
+	0x080c, 0x7296, 0x080c, 0x6ee4, 0x0020, 0x2009, 0x00f8, 0x080c,
+	0x5c4d, 0x20a9, 0x0028, 0xa001, 0x1f04, 0x0c7b, 0x7850, 0x9085,
+	0x1400, 0x7852, 0x080c, 0x6fb2, 0x0120, 0x7843, 0x0090, 0x7843,
+	0x0010, 0x2021, 0xe678, 0x2019, 0xea60, 0x0d0c, 0x80ec, 0x7820,
+	0xd09c, 0x1588, 0x080c, 0x6fb2, 0x0904, 0x0ce1, 0x7824, 0xd0ac,
+	0x1904, 0x0d01, 0x080c, 0x6fd5, 0x1530, 0x0046, 0x2021, 0x0320,
 	0x8421, 0x1df0, 0x004e, 0x7827, 0x1800, 0x080c, 0x2a5d, 0x7824,
 	0x9084, 0x1800, 0x1168, 0x9484, 0x0fff, 0x1140, 0x2001, 0x1810,
 	0x2004, 0x9084, 0x9000, 0x0110, 0x080c, 0x0d22, 0x8421, 0x1158,
-	0x1d04, 0x0cbc, 0x080c, 0x80c4, 0x080c, 0x7295, 0x080c, 0x728b,
+	0x1d04, 0x0cbc, 0x080c, 0x80ec, 0x080c, 0x72a0, 0x080c, 0x7296,
 	0x7003, 0x0001, 0x04f0, 0x8319, 0x1940, 0x1d04, 0x0cc9, 0x080c,
-	0x80c4, 0x2009, 0x196c, 0x2104, 0x9005, 0x0118, 0x8001, 0x200a,
+	0x80ec, 0x2009, 0x196c, 0x2104, 0x9005, 0x0118, 0x8001, 0x200a,
 	0x1178, 0x200b, 0x000a, 0x7827, 0x0048, 0x20a9, 0x0002, 0x080c,
 	0x2a3e, 0x7924, 0x080c, 0x2a5d, 0xd19c, 0x0110, 0x080c, 0x297e,
-	0x00d8, 0x080c, 0x6fb8, 0x1140, 0x94a2, 0x03e8, 0x1128, 0x080c,
-	0x6f7f, 0x7003, 0x0001, 0x00a8, 0x7827, 0x1800, 0x080c, 0x2a5d,
-	0x7824, 0x080c, 0x6fc1, 0x0110, 0xd0ac, 0x1158, 0x9084, 0x1800,
+	0x00d8, 0x080c, 0x6fc3, 0x1140, 0x94a2, 0x03e8, 0x1128, 0x080c,
+	0x6f8a, 0x7003, 0x0001, 0x00a8, 0x7827, 0x1800, 0x080c, 0x2a5d,
+	0x7824, 0x080c, 0x6fcc, 0x0110, 0xd0ac, 0x1158, 0x9084, 0x1800,
 	0x0950, 0x7003, 0x0001, 0x0028, 0x2001, 0x0001, 0x080c, 0x260c,
 	0x0078, 0x2009, 0x180c, 0x210c, 0xd19c, 0x1120, 0x7904, 0x918d,
 	0x0002, 0x7906, 0x7827, 0x0048, 0x7828, 0x9085, 0x0028, 0x782a,
 	0x7850, 0x9085, 0x0400, 0x7852, 0x2001, 0x1978, 0x2003, 0x0000,
 	0x9006, 0x78f2, 0x015e, 0x003e, 0x000e, 0x012e, 0x00fe, 0x004e,
 	0x001e, 0x0005, 0x0006, 0x0016, 0x0036, 0x0046, 0x00b6, 0x00c6,
-	0x00d6, 0x00e6, 0x00f6, 0x0156, 0x0069, 0x0d0c, 0x80c4, 0x015e,
+	0x00d6, 0x00e6, 0x00f6, 0x0156, 0x0069, 0x0d0c, 0x80ec, 0x015e,
 	0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x004e, 0x003e, 0x001e,
 	0x000e, 0x0005, 0x00e6, 0x2071, 0x1894, 0x7004, 0x9086, 0x0001,
-	0x1110, 0x080c, 0x3258, 0x00ee, 0x0005, 0x0005, 0x2a70, 0x2061,
-	0x197c, 0x2063, 0x0003, 0x6007, 0x0002, 0x600b, 0x001a, 0x600f,
+	0x1110, 0x080c, 0x325f, 0x00ee, 0x0005, 0x0005, 0x2a70, 0x2061,
+	0x197c, 0x2063, 0x0003, 0x6007, 0x0002, 0x600b, 0x001c, 0x600f,
 	0x0317, 0x2001, 0x194d, 0x900e, 0x2102, 0x7192, 0x2001, 0x0100,
 	0x2004, 0x9082, 0x0002, 0x0218, 0x705b, 0xffff, 0x0008, 0x715a,
-	0x7063, 0xffff, 0x717a, 0x717e, 0x080c, 0xbf4a, 0x70e7, 0x00c0,
+	0x7063, 0xffff, 0x717a, 0x717e, 0x080c, 0xbf63, 0x70e7, 0x00c0,
 	0x2061, 0x193d, 0x6003, 0x0909, 0x6106, 0x600b, 0x8800, 0x600f,
 	0x0200, 0x6013, 0x00ff, 0x6017, 0x000f, 0x611a, 0x601f, 0x07d0,
 	0x2061, 0x1945, 0x6003, 0x8000, 0x6106, 0x610a, 0x600f, 0x0200,
 	0x6013, 0x00ff, 0x6116, 0x601b, 0x0001, 0x611e, 0x2061, 0x195a,
 	0x6003, 0x514c, 0x6007, 0x4f47, 0x600b, 0x4943, 0x600f, 0x2020,
-	0x2001, 0x182b, 0x2102, 0x0005, 0x9016, 0x080c, 0x6237, 0x1178,
+	0x2001, 0x182b, 0x2102, 0x0005, 0x9016, 0x080c, 0x623e, 0x1178,
 	0xb804, 0x90c4, 0x00ff, 0x98c6, 0x0006, 0x0128, 0x90c4, 0xff00,
 	0x98c6, 0x0600, 0x1120, 0x9186, 0x0080, 0x0108, 0x8210, 0x8108,
 	0x9186, 0x0800, 0x1d50, 0x2208, 0x0005, 0x2091, 0x8000, 0x2079,
@@ -247,7 +247,7 @@
 	0x7803, 0x0005, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,
 	0x0180, 0x2001, 0x19ea, 0x2004, 0x9005, 0x0128, 0x2001, 0x008b,
 	0x2004, 0xd0fc, 0x0dd8, 0x2001, 0x008a, 0x2003, 0x0002, 0x2003,
-	0x1001, 0x080c, 0x538e, 0x1108, 0x0099, 0x0cd8, 0x0005, 0x918c,
+	0x1001, 0x080c, 0x5395, 0x1108, 0x0099, 0x0cd8, 0x0005, 0x918c,
 	0x03ff, 0x2001, 0x0003, 0x2004, 0x9084, 0x0600, 0x1118, 0x918d,
 	0x2800, 0x0010, 0x918d, 0x2000, 0x2001, 0x017f, 0x2102, 0x0005,
 	0x0026, 0x0126, 0x2011, 0x0080, 0x080c, 0x0ecb, 0x20a9, 0x0900,
@@ -313,7 +313,7 @@
 	0x8000, 0x0016, 0x890e, 0x810e, 0x810f, 0x9184, 0x003f, 0xa862,
 	0x9184, 0xffc0, 0xa85e, 0x001e, 0x0020, 0x00e6, 0x0126, 0x2091,
 	0x8000, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc,
-	0x8000, 0x70be, 0x080c, 0x7f35, 0x012e, 0x00ee, 0x0005, 0x2071,
+	0x8000, 0x70be, 0x080c, 0x7f5d, 0x012e, 0x00ee, 0x0005, 0x2071,
 	0x1800, 0x9026, 0x2009, 0x0000, 0x2049, 0x0400, 0x2900, 0x702e,
 	0x8940, 0x2800, 0xa802, 0xa95e, 0xa863, 0x0001, 0x8420, 0x9886,
 	0x0440, 0x0120, 0x2848, 0x9188, 0x0040, 0x0c90, 0x2071, 0x1883,
@@ -377,22 +377,22 @@
 	0x080f, 0x008e, 0x00de, 0x009e, 0x080c, 0x10f4, 0x0005, 0x00de,
 	0x009e, 0x080c, 0x10f4, 0x0005, 0xa8a8, 0xd08c, 0x0005, 0x0096,
 	0xa0a0, 0x904d, 0x090c, 0x0db4, 0xa06c, 0x908e, 0x0100, 0x0130,
-	0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, 0x4002, 0x080c, 0x6878,
+	0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, 0x4002, 0x080c, 0x687f,
 	0xa09f, 0x0000, 0xa0a3, 0x0000, 0x2848, 0x080c, 0x101d, 0x009e,
 	0x0005, 0x00a6, 0xa0a0, 0x904d, 0x090c, 0x0db4, 0xa06c, 0x908e,
 	0x0100, 0x0128, 0xa87b, 0x0001, 0xa883, 0x0000, 0x00c0, 0xa80c,
 	0x2050, 0xb004, 0x9005, 0x0198, 0xa80e, 0x2050, 0x8006, 0x8006,
 	0x8007, 0x908c, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0xa076,
 	0xa172, 0xb000, 0xa07a, 0x2810, 0x080c, 0x10d5, 0x00e8, 0xa97c,
-	0xa894, 0x0016, 0x0006, 0x080c, 0x6878, 0x000e, 0x001e, 0xd1fc,
-	0x1138, 0xd1f4, 0x0128, 0x00c6, 0x2060, 0x080c, 0x9e19, 0x00ce,
+	0xa894, 0x0016, 0x0006, 0x080c, 0x687f, 0x000e, 0x001e, 0xd1fc,
+	0x1138, 0xd1f4, 0x0128, 0x00c6, 0x2060, 0x080c, 0x9e32, 0x00ce,
 	0x7008, 0x2048, 0xa89f, 0x0000, 0xa8a3, 0x0000, 0x080c, 0x101d,
 	0x7007, 0x0000, 0x080c, 0x10f4, 0x00ae, 0x0005, 0x0126, 0x2091,
 	0x8000, 0x782b, 0x1001, 0x7007, 0x0005, 0x7000, 0xc094, 0x7002,
 	0x012e, 0x0005, 0x7007, 0x0000, 0x080c, 0x1105, 0x0005, 0x0126,
 	0x2091, 0x2200, 0x2079, 0x0300, 0x2071, 0x1a33, 0x7003, 0x0000,
 	0x78bf, 0x00f6, 0x781b, 0x4800, 0x00c1, 0x7803, 0x0003, 0x780f,
-	0x0000, 0x20a9, 0x0254, 0x2061, 0xd8c3, 0x2c0d, 0x7912, 0xe104,
+	0x0000, 0x20a9, 0x0254, 0x2061, 0xd8e3, 0x2c0d, 0x7912, 0xe104,
 	0x9ce0, 0x0002, 0x7916, 0x1f04, 0x12b5, 0x7807, 0x0007, 0x7803,
 	0x0000, 0x7803, 0x0001, 0x012e, 0x0005, 0x00c6, 0x7803, 0x0000,
 	0x7808, 0xd09c, 0x0110, 0x7820, 0x0cd8, 0x2001, 0x1a34, 0x2003,
@@ -401,9 +401,9 @@
 	0x782b, 0x1a52, 0x781f, 0xff00, 0x781b, 0xb700, 0x2001, 0x0200,
 	0x2004, 0xd0dc, 0x0110, 0x781f, 0x0303, 0x2061, 0x1a52, 0x602f,
 	0x1cd0, 0x2001, 0x1819, 0x2004, 0x9082, 0x1cd0, 0x6032, 0x603b,
-	0x1f26, 0x2001, 0x3131, 0xd0fc, 0x190c, 0x0db4, 0x2001, 0x0003,
-	0x2004, 0xd0d4, 0x1118, 0x783f, 0x3131, 0x0020, 0x9084, 0xc000,
-	0x783f, 0xb131, 0x00ce, 0x0005, 0x0126, 0x2091, 0x2200, 0x7908,
+	0x1f26, 0x2001, 0x3138, 0xd0fc, 0x190c, 0x0db4, 0x2001, 0x0003,
+	0x2004, 0xd0d4, 0x1118, 0x783f, 0x3138, 0x0020, 0x9084, 0xc000,
+	0x783f, 0xb138, 0x00ce, 0x0005, 0x0126, 0x2091, 0x2200, 0x7908,
 	0x9184, 0x0070, 0x190c, 0x0dad, 0xd19c, 0x0158, 0x7820, 0x908c,
 	0xf000, 0x15e8, 0x908a, 0x0024, 0x1a0c, 0x0db4, 0x0023, 0x012e,
 	0x0005, 0x012e, 0x0005, 0x1347, 0x1347, 0x135e, 0x1363, 0x1367,
@@ -412,17 +412,17 @@
 	0x1347, 0x1347, 0x1347, 0x1347, 0x1347, 0x1347, 0x136e, 0x1347,
 	0x1347, 0x1347, 0x1347, 0x1347, 0x1347, 0x134b, 0x1349, 0x080c,
 	0x0db4, 0x080c, 0x0dad, 0x080c, 0x14a2, 0x2009, 0x1a4b, 0x2104,
-	0x8000, 0x200a, 0x080c, 0x79fc, 0x080c, 0x1958, 0x0005, 0x2009,
-	0x0048, 0x2060, 0x080c, 0x9e93, 0x012e, 0x0005, 0x7004, 0xc085,
+	0x8000, 0x200a, 0x080c, 0x7a07, 0x080c, 0x1958, 0x0005, 0x2009,
+	0x0048, 0x2060, 0x080c, 0x9eac, 0x012e, 0x0005, 0x7004, 0xc085,
 	0xc0b5, 0x7006, 0x0005, 0x7004, 0xc085, 0x7006, 0x0005, 0x080c,
 	0x14a2, 0x080c, 0x15de, 0x0005, 0x080c, 0x0db4, 0x080c, 0x14a2,
 	0x2060, 0x6014, 0x0096, 0x2048, 0xa83b, 0xffff, 0x009e, 0x2009,
-	0x0048, 0x080c, 0x9e93, 0x2001, 0x015d, 0x2003, 0x0000, 0x2009,
+	0x0048, 0x080c, 0x9eac, 0x2001, 0x015d, 0x2003, 0x0000, 0x2009,
 	0x03e8, 0x8109, 0x0160, 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8,
 	0x2001, 0x0218, 0x2004, 0xd0ec, 0x1110, 0x080c, 0x14a7, 0x2001,
 	0x0307, 0x2003, 0x8000, 0x0005, 0x7004, 0xc095, 0x7006, 0x0005,
 	0x080c, 0x14a2, 0x2060, 0x6014, 0x0096, 0x2048, 0xa83b, 0xffff,
-	0x009e, 0x2009, 0x0048, 0x080c, 0x9e93, 0x0005, 0x080c, 0x14a2,
+	0x009e, 0x2009, 0x0048, 0x080c, 0x9eac, 0x0005, 0x080c, 0x14a2,
 	0x080c, 0x0db4, 0x080c, 0x14a2, 0x080c, 0x141f, 0x7827, 0x0018,
 	0x79ac, 0xd1dc, 0x0540, 0x7827, 0x0015, 0x7828, 0x782b, 0x0000,
 	0x9065, 0x0138, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003, 0x0020,
@@ -431,12 +431,12 @@
 	0x0050, 0x2003, 0x0020, 0x0480, 0x78ab, 0x0004, 0x7803, 0x0001,
 	0x080c, 0x1438, 0x0005, 0x7828, 0x782b, 0x0000, 0x9065, 0x090c,
 	0x0db4, 0x6014, 0x2048, 0x78ab, 0x0004, 0x918c, 0x0700, 0x0198,
-	0x080c, 0x79fc, 0x080c, 0x1958, 0x080c, 0xbafe, 0x0158, 0xa9ac,
+	0x080c, 0x7a07, 0x080c, 0x1958, 0x080c, 0xbb17, 0x0158, 0xa9ac,
 	0xa936, 0xa9b0, 0xa93a, 0xa83f, 0xffff, 0xa843, 0xffff, 0xa880,
 	0xc0bd, 0xa882, 0x0005, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be,
-	0xd0bc, 0x6024, 0x190c, 0xbee3, 0x2029, 0x00c8, 0x8529, 0x0128,
-	0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8, 0x7dbc, 0x080c, 0xd86c,
-	0xd5a4, 0x1118, 0x080c, 0x14a7, 0x0005, 0x080c, 0x79fc, 0x080c,
+	0xd0bc, 0x6024, 0x190c, 0xbefc, 0x2029, 0x00c8, 0x8529, 0x0128,
+	0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8, 0x7dbc, 0x080c, 0xd88c,
+	0xd5a4, 0x1118, 0x080c, 0x14a7, 0x0005, 0x080c, 0x7a07, 0x080c,
 	0x1958, 0x0005, 0x781f, 0x0300, 0x7803, 0x0001, 0x0005, 0x0016,
 	0x0066, 0x0076, 0x00f6, 0x2079, 0x0300, 0x7908, 0x918c, 0x0007,
 	0x9186, 0x0003, 0x0120, 0x2001, 0x0016, 0x080c, 0x1518, 0x00fe,
@@ -454,7 +454,7 @@
 	0x2001, 0x020d, 0x2003, 0x0020, 0x080c, 0x12c5, 0x7803, 0x0001,
 	0x00ee, 0x001e, 0x0005, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003,
 	0x0020, 0x0069, 0x0ca8, 0x0031, 0x2060, 0x2009, 0x0053, 0x080c,
-	0x9e93, 0x0005, 0x7808, 0xd09c, 0x0de8, 0x7820, 0x0005, 0x080c,
+	0x9eac, 0x0005, 0x7808, 0xd09c, 0x0de8, 0x7820, 0x0005, 0x080c,
 	0x141f, 0x00d6, 0x2069, 0x0200, 0x2009, 0x01f4, 0x8109, 0x0510,
 	0x6804, 0x9005, 0x0dd8, 0x2001, 0x015d, 0x2003, 0x0000, 0x79bc,
 	0xd1a4, 0x1528, 0x79b8, 0x918c, 0x0fff, 0x0180, 0x9182, 0x0841,
@@ -462,7 +462,7 @@
 	0x080c, 0x150a, 0x6827, 0x0001, 0x8109, 0x1dd0, 0x04d9, 0x6827,
 	0x0002, 0x04c1, 0x6804, 0x9005, 0x1130, 0x682c, 0xd0e4, 0x1500,
 	0x6804, 0x9005, 0x0de8, 0x79b8, 0xd1ec, 0x1130, 0x08c0, 0x080c,
-	0x79fc, 0x080c, 0x1958, 0x0090, 0x7827, 0x0015, 0x782b, 0x0000,
+	0x7a07, 0x080c, 0x1958, 0x0090, 0x7827, 0x0015, 0x782b, 0x0000,
 	0x7827, 0x0018, 0x782b, 0x0000, 0x2001, 0x020d, 0x2003, 0x0020,
 	0x2001, 0x0307, 0x2003, 0x0300, 0x7803, 0x0001, 0x00de, 0x0005,
 	0x682c, 0x9084, 0x5400, 0x9086, 0x5400, 0x0d30, 0x7827, 0x0015,
@@ -478,7 +478,7 @@
 	0x1591, 0x9284, 0x0048, 0x9086, 0x0008, 0x1904, 0x1591, 0x2001,
 	0x0109, 0x2004, 0xd08c, 0x01f0, 0x0006, 0x01c6, 0x01d6, 0x0136,
 	0x0146, 0x0156, 0x0126, 0x2091, 0x2800, 0x00f6, 0x0026, 0x0016,
-	0x2009, 0x1a4d, 0x2104, 0x8000, 0x0208, 0x200a, 0x080c, 0x8382,
+	0x2009, 0x1a4d, 0x2104, 0x8000, 0x0208, 0x200a, 0x080c, 0x83aa,
 	0x001e, 0x002e, 0x00fe, 0x012e, 0x015e, 0x014e, 0x013e, 0x01de,
 	0x01ce, 0x000e, 0x2001, 0x009b, 0x2004, 0xd0fc, 0x01d0, 0x0006,
 	0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x00f6, 0x0016,
@@ -488,7 +488,7 @@
 	0x2004, 0xd0f4, 0x1528, 0x7a18, 0x9284, 0x0030, 0x0508, 0x9284,
 	0x0048, 0x9086, 0x0008, 0x11e0, 0x2001, 0x19c7, 0x2004, 0x9005,
 	0x01b8, 0x2001, 0x1a36, 0x2004, 0x9086, 0x0000, 0x0188, 0x2009,
-	0x1a4c, 0x2104, 0x8000, 0x0208, 0x200a, 0x080c, 0x9417, 0x2009,
+	0x1a4c, 0x2104, 0x8000, 0x0208, 0x200a, 0x080c, 0x9430, 0x2009,
 	0x180c, 0x2104, 0xc0f5, 0x200a, 0x2009, 0xff00, 0x0804, 0x1541,
 	0x9085, 0x0001, 0x0005, 0x7832, 0x7936, 0x7a3a, 0x781b, 0x8080,
 	0x080c, 0x153a, 0x1108, 0x0005, 0x792c, 0x3900, 0x8000, 0x2004,
@@ -498,9 +498,9 @@
 	0x0904, 0x163d, 0x7017, 0x0000, 0x2001, 0x0264, 0x2004, 0xd0bc,
 	0x0904, 0x163d, 0x2001, 0x0268, 0x00c6, 0x2064, 0x6104, 0x6038,
 	0x00ce, 0x918e, 0x0039, 0x1904, 0x163d, 0x9c06, 0x15f0, 0x0126,
-	0x2091, 0x2600, 0x080c, 0x7943, 0x012e, 0x7358, 0x745c, 0x6014,
+	0x2091, 0x2600, 0x080c, 0x794e, 0x012e, 0x7358, 0x745c, 0x6014,
 	0x905d, 0x0598, 0x2b48, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be,
-	0xd0bc, 0x190c, 0xbebe, 0xab42, 0xac3e, 0x2001, 0x1875, 0x2004,
+	0xd0bc, 0x190c, 0xbed7, 0xab42, 0xac3e, 0x2001, 0x1875, 0x2004,
 	0xd0b4, 0x1170, 0x601c, 0xd0e4, 0x1158, 0x6010, 0x00b6, 0x2058,
 	0xb800, 0x00be, 0xd0bc, 0x1120, 0xa83b, 0x7fff, 0xa837, 0xffff,
 	0x080c, 0x1f46, 0x1190, 0x080c, 0x17eb, 0x2a00, 0xa816, 0x0130,
@@ -595,7 +595,7 @@
 	0x810c, 0x81ff, 0x1118, 0xa887, 0x0001, 0x0008, 0xa986, 0x601b,
 	0x0002, 0xa974, 0xd1dc, 0x1108, 0x0005, 0xa934, 0xa88c, 0x9106,
 	0x1158, 0xa938, 0xa890, 0x9106, 0x1138, 0x601c, 0xc084, 0x601e,
-	0x2009, 0x0048, 0x0804, 0x9e93, 0x0005, 0x0126, 0x00c6, 0x2091,
+	0x2009, 0x0048, 0x0804, 0x9eac, 0x0005, 0x0126, 0x00c6, 0x2091,
 	0x2200, 0x00ce, 0x7908, 0x918c, 0x0007, 0x9186, 0x0000, 0x05b0,
 	0x9186, 0x0003, 0x0598, 0x6020, 0x6023, 0x0000, 0x0006, 0x2031,
 	0x0008, 0x00c6, 0x781f, 0x0808, 0x7808, 0xd09c, 0x0120, 0x080c,
@@ -606,17 +606,17 @@
 	0x080c, 0x19f4, 0x000e, 0x6022, 0x012e, 0x0005, 0x080c, 0x19e1,
 	0x7827, 0x0015, 0x7828, 0x9c06, 0x1db8, 0x782b, 0x0000, 0x0ca0,
 	0x00f6, 0x2079, 0x0300, 0x7803, 0x0000, 0x78ab, 0x0004, 0x00fe,
-	0x080c, 0x6fa7, 0x11b0, 0x2001, 0x0138, 0x2003, 0x0000, 0x2001,
+	0x080c, 0x6fb2, 0x11b0, 0x2001, 0x0138, 0x2003, 0x0000, 0x2001,
 	0x0160, 0x2003, 0x0000, 0x2011, 0x012c, 0xa001, 0xa001, 0x8211,
-	0x1de0, 0x0081, 0x0066, 0x2031, 0x0000, 0x080c, 0x7057, 0x006e,
+	0x1de0, 0x0081, 0x0066, 0x2031, 0x0000, 0x080c, 0x7062, 0x006e,
 	0x0005, 0x0479, 0x0039, 0x2001, 0x0160, 0x2502, 0x2001, 0x0138,
 	0x2202, 0x0005, 0x00e6, 0x2071, 0x0200, 0x080c, 0x2a69, 0x2009,
 	0x003c, 0x080c, 0x2268, 0x2001, 0x015d, 0x2003, 0x0000, 0x7000,
-	0x9084, 0x003c, 0x1de0, 0x080c, 0x7f35, 0x70a0, 0x70a2, 0x7098,
+	0x9084, 0x003c, 0x1de0, 0x080c, 0x7f5d, 0x70a0, 0x70a2, 0x7098,
 	0x709a, 0x709c, 0x709e, 0x2001, 0x020d, 0x2003, 0x0020, 0x00f6,
 	0x2079, 0x0300, 0x080c, 0x12c5, 0x7803, 0x0001, 0x00fe, 0x00ee,
 	0x0005, 0x2001, 0x0138, 0x2014, 0x2003, 0x0000, 0x2001, 0x0160,
-	0x202c, 0x2003, 0x0000, 0x080c, 0x6fa7, 0x1108, 0x0005, 0x2021,
+	0x202c, 0x2003, 0x0000, 0x080c, 0x6fb2, 0x1108, 0x0005, 0x2021,
 	0x0260, 0x2001, 0x0141, 0x201c, 0xd3dc, 0x1168, 0x2001, 0x0109,
 	0x201c, 0x939c, 0x0048, 0x1160, 0x2001, 0x0111, 0x201c, 0x83ff,
 	0x1110, 0x8421, 0x1d70, 0x2001, 0x015d, 0x2003, 0x0000, 0x0005,
@@ -725,12 +725,12 @@
 	0x004e, 0x005e, 0x006e, 0x007e, 0x0005, 0x080c, 0x0db4, 0x0026,
 	0x2001, 0x0105, 0x2003, 0x0010, 0x782b, 0x0004, 0x7003, 0x0000,
 	0x7004, 0x0016, 0x080c, 0x1b60, 0x001e, 0x2060, 0x6014, 0x2048,
-	0x080c, 0xbafe, 0x0118, 0xa880, 0xc0bd, 0xa882, 0x6020, 0x9086,
+	0x080c, 0xbb17, 0x0118, 0xa880, 0xc0bd, 0xa882, 0x6020, 0x9086,
 	0x0006, 0x1180, 0x2061, 0x0100, 0x62c8, 0x2001, 0x00fa, 0x8001,
 	0x1df0, 0x60c8, 0x9206, 0x1dc0, 0x60c4, 0xa89a, 0x60c8, 0xa896,
-	0x7004, 0x2060, 0x00c6, 0x080c, 0xb731, 0x00ce, 0x2001, 0x19c7,
+	0x7004, 0x2060, 0x00c6, 0x080c, 0xb74a, 0x00ce, 0x2001, 0x19c7,
 	0x2004, 0x9c06, 0x1160, 0x2009, 0x0040, 0x080c, 0x2268, 0x080c,
-	0x98d1, 0x2011, 0x0000, 0x080c, 0x9762, 0x080c, 0x8a26, 0x002e,
+	0x98ea, 0x2011, 0x0000, 0x080c, 0x977b, 0x080c, 0x8a4e, 0x002e,
 	0x0804, 0x1e8e, 0x0126, 0x2091, 0x2400, 0xa858, 0x2040, 0x792c,
 	0x782b, 0x0002, 0x9184, 0x0700, 0x1904, 0x1d07, 0x7000, 0x0002,
 	0x1e8e, 0x1d5c, 0x1ddc, 0x1e8c, 0x8001, 0x7002, 0x7027, 0x0000,
@@ -774,7 +774,7 @@
 	0x0804, 0x1d7e, 0x0804, 0x1d7a, 0x080c, 0x0db4, 0x012e, 0x0005,
 	0x00f6, 0x00e6, 0x2071, 0x1a36, 0x7000, 0x9086, 0x0000, 0x0904,
 	0x1ed9, 0x2079, 0x0090, 0x2009, 0x0207, 0x210c, 0xd194, 0x01b8,
-	0x2009, 0x020c, 0x210c, 0x9184, 0x0003, 0x0188, 0x080c, 0xd8b5,
+	0x2009, 0x020c, 0x210c, 0x9184, 0x0003, 0x0188, 0x080c, 0xd8d5,
 	0x2001, 0x0133, 0x2004, 0x9005, 0x090c, 0x0db4, 0x0016, 0x2009,
 	0x0040, 0x080c, 0x2268, 0x001e, 0x2001, 0x020c, 0x2102, 0x2009,
 	0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0x9106, 0x1120, 0x2009,
@@ -864,17 +864,17 @@
 	0x2009, 0x013b, 0x200b, 0x0400, 0x781b, 0x0002, 0x783b, 0x001f,
 	0x7837, 0x0020, 0x7803, 0x1600, 0x012e, 0x0005, 0x2091, 0x2600,
 	0x781c, 0xd0a4, 0x190c, 0x2265, 0x7900, 0xd1dc, 0x1118, 0x9084,
-	0x0006, 0x001a, 0x9084, 0x000e, 0x0002, 0x218d, 0x2185, 0x7943,
-	0x2185, 0x2187, 0x2187, 0x2187, 0x2187, 0x7929, 0x2185, 0x2189,
+	0x0006, 0x001a, 0x9084, 0x000e, 0x0002, 0x218d, 0x2185, 0x794e,
+	0x2185, 0x2187, 0x2187, 0x2187, 0x2187, 0x7934, 0x2185, 0x2189,
 	0x2185, 0x2187, 0x2185, 0x2187, 0x2185, 0x080c, 0x0db4, 0x0031,
-	0x0020, 0x080c, 0x7929, 0x080c, 0x7943, 0x0005, 0x0006, 0x0016,
-	0x0026, 0x080c, 0xd8b5, 0x7930, 0x9184, 0x0003, 0x01c0, 0x2001,
+	0x0020, 0x080c, 0x7934, 0x080c, 0x794e, 0x0005, 0x0006, 0x0016,
+	0x0026, 0x080c, 0xd8d5, 0x7930, 0x9184, 0x0003, 0x01c0, 0x2001,
 	0x19c7, 0x2004, 0x9005, 0x0170, 0x2001, 0x0133, 0x2004, 0x9005,
-	0x090c, 0x0db4, 0x00c6, 0x2001, 0x19c7, 0x2064, 0x080c, 0xb731,
+	0x090c, 0x0db4, 0x00c6, 0x2001, 0x19c7, 0x2064, 0x080c, 0xb74a,
 	0x00ce, 0x00f8, 0x2009, 0x0040, 0x080c, 0x2268, 0x00d0, 0x9184,
-	0x0014, 0x01a0, 0x6a00, 0x9286, 0x0003, 0x0160, 0x080c, 0x6fa7,
-	0x1138, 0x080c, 0x728b, 0x080c, 0x5cca, 0x080c, 0x6ed9, 0x0010,
-	0x080c, 0x5b89, 0x080c, 0x79f2, 0x0041, 0x0018, 0x9184, 0x9540,
+	0x0014, 0x01a0, 0x6a00, 0x9286, 0x0003, 0x0160, 0x080c, 0x6fb2,
+	0x1138, 0x080c, 0x7296, 0x080c, 0x5cd1, 0x080c, 0x6ee4, 0x0010,
+	0x080c, 0x5b90, 0x080c, 0x79fd, 0x0041, 0x0018, 0x9184, 0x9540,
 	0x1dc8, 0x002e, 0x001e, 0x000e, 0x0005, 0x00e6, 0x0036, 0x0046,
 	0x0056, 0x2071, 0x1a33, 0x080c, 0x1958, 0x005e, 0x004e, 0x003e,
 	0x00ee, 0x0005, 0x0126, 0x2091, 0x2e00, 0x2071, 0x1800, 0x7128,
@@ -919,96 +919,96 @@
 	0x2003, 0x0001, 0x0005, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016,
 	0x0026, 0x6124, 0x9184, 0x5e2c, 0x1118, 0x9184, 0x0007, 0x002a,
 	0x9195, 0x0004, 0x9284, 0x0007, 0x0002, 0x2347, 0x232d, 0x2330,
-	0x2333, 0x2338, 0x233a, 0x233e, 0x2342, 0x080c, 0x82b5, 0x00b8,
-	0x080c, 0x8382, 0x00a0, 0x080c, 0x8382, 0x080c, 0x82b5, 0x0078,
-	0x0099, 0x0068, 0x080c, 0x82b5, 0x0079, 0x0048, 0x080c, 0x8382,
-	0x0059, 0x0028, 0x080c, 0x8382, 0x080c, 0x82b5, 0x0029, 0x002e,
+	0x2333, 0x2338, 0x233a, 0x233e, 0x2342, 0x080c, 0x82dd, 0x00b8,
+	0x080c, 0x83aa, 0x00a0, 0x080c, 0x83aa, 0x080c, 0x82dd, 0x0078,
+	0x0099, 0x0068, 0x080c, 0x82dd, 0x0079, 0x0048, 0x080c, 0x83aa,
+	0x0059, 0x0028, 0x080c, 0x83aa, 0x080c, 0x82dd, 0x0029, 0x002e,
 	0x001e, 0x000e, 0x012e, 0x0005, 0x00a6, 0x6124, 0x6028, 0xd09c,
 	0x0118, 0xd19c, 0x1904, 0x2595, 0xd1f4, 0x190c, 0x0dad, 0x080c,
-	0x6fa7, 0x0904, 0x23a2, 0x080c, 0xc1f9, 0x1120, 0x7000, 0x9086,
-	0x0003, 0x0570, 0x6024, 0x9084, 0x1800, 0x0550, 0x080c, 0x6fca,
-	0x0118, 0x080c, 0x6fb8, 0x1520, 0x6027, 0x0020, 0x6043, 0x0000,
-	0x080c, 0xc1f9, 0x0168, 0x080c, 0x6fca, 0x1150, 0x2001, 0x1978,
-	0x2003, 0x0001, 0x6027, 0x1800, 0x080c, 0x6e28, 0x0804, 0x2598,
+	0x6fb2, 0x0904, 0x23a2, 0x080c, 0xc212, 0x1120, 0x7000, 0x9086,
+	0x0003, 0x0570, 0x6024, 0x9084, 0x1800, 0x0550, 0x080c, 0x6fd5,
+	0x0118, 0x080c, 0x6fc3, 0x1520, 0x6027, 0x0020, 0x6043, 0x0000,
+	0x080c, 0xc212, 0x0168, 0x080c, 0x6fd5, 0x1150, 0x2001, 0x1978,
+	0x2003, 0x0001, 0x6027, 0x1800, 0x080c, 0x6e33, 0x0804, 0x2598,
 	0x70a0, 0x9005, 0x1150, 0x70a3, 0x0001, 0x00d6, 0x2069, 0x0140,
-	0x080c, 0x6ffe, 0x00de, 0x1904, 0x2598, 0x080c, 0x7295, 0x0428,
-	0x080c, 0x6fca, 0x1590, 0x6024, 0x9084, 0x1800, 0x1108, 0x0468,
-	0x080c, 0x7295, 0x080c, 0x728b, 0x080c, 0x5cca, 0x080c, 0x6ed9,
+	0x080c, 0x7009, 0x00de, 0x1904, 0x2598, 0x080c, 0x72a0, 0x0428,
+	0x080c, 0x6fd5, 0x1590, 0x6024, 0x9084, 0x1800, 0x1108, 0x0468,
+	0x080c, 0x72a0, 0x080c, 0x7296, 0x080c, 0x5cd1, 0x080c, 0x6ee4,
 	0x0804, 0x2595, 0xd1ac, 0x1508, 0x6024, 0xd0dc, 0x1170, 0xd0e4,
 	0x1178, 0xd0d4, 0x1190, 0xd0cc, 0x0130, 0x7094, 0x9086, 0x0028,
-	0x1110, 0x080c, 0x717a, 0x0804, 0x2595, 0x080c, 0x7290, 0x0048,
-	0x2001, 0x194e, 0x2003, 0x0002, 0x0020, 0x080c, 0x70e0, 0x0804,
-	0x2595, 0x080c, 0x7214, 0x0804, 0x2595, 0xd1ac, 0x0904, 0x24b6,
-	0x080c, 0x6fa7, 0x11c0, 0x6027, 0x0020, 0x0006, 0x0026, 0x0036,
-	0x080c, 0x6fc1, 0x1158, 0x080c, 0x728b, 0x080c, 0x5cca, 0x080c,
-	0x6ed9, 0x003e, 0x002e, 0x000e, 0x00ae, 0x0005, 0x003e, 0x002e,
-	0x000e, 0x080c, 0x6f7f, 0x0016, 0x0046, 0x00c6, 0x644c, 0x9486,
+	0x1110, 0x080c, 0x7185, 0x0804, 0x2595, 0x080c, 0x729b, 0x0048,
+	0x2001, 0x194e, 0x2003, 0x0002, 0x0020, 0x080c, 0x70eb, 0x0804,
+	0x2595, 0x080c, 0x721f, 0x0804, 0x2595, 0xd1ac, 0x0904, 0x24b6,
+	0x080c, 0x6fb2, 0x11c0, 0x6027, 0x0020, 0x0006, 0x0026, 0x0036,
+	0x080c, 0x6fcc, 0x1158, 0x080c, 0x7296, 0x080c, 0x5cd1, 0x080c,
+	0x6ee4, 0x003e, 0x002e, 0x000e, 0x00ae, 0x0005, 0x003e, 0x002e,
+	0x000e, 0x080c, 0x6f8a, 0x0016, 0x0046, 0x00c6, 0x644c, 0x9486,
 	0xf0f0, 0x1138, 0x2061, 0x0100, 0x644a, 0x6043, 0x0090, 0x6043,
 	0x0010, 0x74d6, 0x948c, 0xff00, 0x7038, 0xd084, 0x0178, 0x9186,
 	0xf800, 0x1160, 0x7044, 0xd084, 0x1148, 0xc085, 0x7046, 0x0036,
-	0x2418, 0x2011, 0x8016, 0x080c, 0x48d2, 0x003e, 0x080c, 0xc1f2,
+	0x2418, 0x2011, 0x8016, 0x080c, 0x48d9, 0x003e, 0x080c, 0xc20b,
 	0x1904, 0x2493, 0x9196, 0xff00, 0x05a8, 0x705c, 0x9084, 0x00ff,
 	0x810f, 0x81ff, 0x0110, 0x9116, 0x0568, 0x7130, 0xd184, 0x1550,
-	0x080c, 0x312c, 0x0128, 0xc18d, 0x7132, 0x080c, 0x6553, 0x1510,
+	0x080c, 0x3133, 0x0128, 0xc18d, 0x7132, 0x080c, 0x655a, 0x1510,
 	0x6240, 0x9294, 0x0010, 0x0130, 0x6248, 0x9294, 0xff00, 0x9296,
 	0xff00, 0x01c0, 0x7030, 0xd08c, 0x0904, 0x2493, 0x7038, 0xd08c,
 	0x1140, 0x2001, 0x180c, 0x200c, 0xd1ac, 0x1904, 0x2493, 0xc1ad,
-	0x2102, 0x0036, 0x73d4, 0x2011, 0x8013, 0x080c, 0x48d2, 0x003e,
+	0x2102, 0x0036, 0x73d4, 0x2011, 0x8013, 0x080c, 0x48d9, 0x003e,
 	0x0804, 0x2493, 0x7038, 0xd08c, 0x1140, 0x2001, 0x180c, 0x200c,
 	0xd1ac, 0x1904, 0x2493, 0xc1ad, 0x2102, 0x0036, 0x73d4, 0x2011,
-	0x8013, 0x080c, 0x48d2, 0x003e, 0x7130, 0xc185, 0x7132, 0x2011,
+	0x8013, 0x080c, 0x48d9, 0x003e, 0x7130, 0xc185, 0x7132, 0x2011,
 	0x1854, 0x220c, 0x00f0, 0x0016, 0x2009, 0x0001, 0x2011, 0x0100,
-	0x080c, 0x8207, 0x2019, 0x000e, 0x00c6, 0x2061, 0x0000, 0x080c,
-	0xd486, 0x00ce, 0x9484, 0x00ff, 0x9080, 0x3131, 0x200d, 0x918c,
-	0xff00, 0x810f, 0x2120, 0x9006, 0x2009, 0x000e, 0x080c, 0xd50a,
+	0x080c, 0x822f, 0x2019, 0x000e, 0x00c6, 0x2061, 0x0000, 0x080c,
+	0xd4a6, 0x00ce, 0x9484, 0x00ff, 0x9080, 0x3138, 0x200d, 0x918c,
+	0xff00, 0x810f, 0x2120, 0x9006, 0x2009, 0x000e, 0x080c, 0xd52a,
 	0x001e, 0xd1ac, 0x1148, 0x0016, 0x2009, 0x0002, 0x2019, 0x0004,
-	0x080c, 0x2fa2, 0x001e, 0x0078, 0x0156, 0x00b6, 0x20a9, 0x007f,
-	0x900e, 0x080c, 0x6237, 0x1110, 0x080c, 0x5ce4, 0x8108, 0x1f04,
-	0x2489, 0x00be, 0x015e, 0x00ce, 0x004e, 0x080c, 0x9d9f, 0x60e3,
+	0x080c, 0x2fa5, 0x001e, 0x0078, 0x0156, 0x00b6, 0x20a9, 0x007f,
+	0x900e, 0x080c, 0x623e, 0x1110, 0x080c, 0x5ceb, 0x8108, 0x1f04,
+	0x2489, 0x00be, 0x015e, 0x00ce, 0x004e, 0x080c, 0x9db8, 0x60e3,
 	0x0000, 0x001e, 0x2001, 0x1800, 0x2014, 0x9296, 0x0004, 0x1170,
 	0xd19c, 0x11a0, 0x2011, 0x180c, 0x2214, 0xd29c, 0x1120, 0x6204,
 	0x9295, 0x0002, 0x6206, 0x6228, 0xc29d, 0x622a, 0x2003, 0x0001,
 	0x2001, 0x1825, 0x2003, 0x0000, 0x6027, 0x0020, 0xd194, 0x0904,
-	0x2595, 0x0016, 0x6220, 0xd2b4, 0x0904, 0x253e, 0x080c, 0x8090,
-	0x080c, 0x9393, 0x6027, 0x0004, 0x00f6, 0x2019, 0x19c1, 0x2304,
+	0x2595, 0x0016, 0x6220, 0xd2b4, 0x0904, 0x253e, 0x080c, 0x80b8,
+	0x080c, 0x93ac, 0x6027, 0x0004, 0x00f6, 0x2019, 0x19c1, 0x2304,
 	0x907d, 0x0904, 0x250d, 0x7804, 0x9086, 0x0032, 0x15f0, 0x00d6,
 	0x00c6, 0x00e6, 0x0096, 0x2069, 0x0140, 0x782c, 0x685e, 0x7808,
 	0x685a, 0x6043, 0x0002, 0x2001, 0x0003, 0x8001, 0x1df0, 0x6043,
 	0x0000, 0x2001, 0x003c, 0x8001, 0x1df0, 0x080c, 0x2b24, 0x2001,
 	0x001e, 0x8001, 0x0240, 0x20a9, 0x0009, 0x080c, 0x2a3e, 0x6904,
 	0xd1dc, 0x1140, 0x0cb0, 0x2001, 0x0100, 0x080c, 0x2b14, 0x9006,
-	0x080c, 0x2b14, 0x080c, 0x8846, 0x080c, 0x894b, 0x7814, 0x2048,
-	0xa867, 0x0103, 0x2f60, 0x080c, 0x9e19, 0x009e, 0x00ee, 0x00ce,
+	0x080c, 0x2b14, 0x080c, 0x886e, 0x080c, 0x8973, 0x7814, 0x2048,
+	0xa867, 0x0103, 0x2f60, 0x080c, 0x9e32, 0x009e, 0x00ee, 0x00ce,
 	0x00de, 0x00fe, 0x001e, 0x00ae, 0x0005, 0x00fe, 0x00d6, 0x2069,
 	0x0140, 0x6804, 0x9084, 0x4000, 0x0110, 0x080c, 0x2b24, 0x00de,
-	0x00c6, 0x2061, 0x19b8, 0x6028, 0x080c, 0xc1f9, 0x0120, 0x909a,
+	0x00c6, 0x2061, 0x19b8, 0x6028, 0x080c, 0xc212, 0x0120, 0x909a,
 	0x0003, 0x1258, 0x0018, 0x909a, 0x00c8, 0x1238, 0x8000, 0x602a,
-	0x00ce, 0x080c, 0x936f, 0x0804, 0x2594, 0x2061, 0x0100, 0x62c0,
-	0x080c, 0x9c2a, 0x2019, 0x19c1, 0x2304, 0x9065, 0x0120, 0x2009,
-	0x0027, 0x080c, 0x9e93, 0x00ce, 0x0804, 0x2594, 0xd2bc, 0x0904,
-	0x2581, 0x080c, 0x809d, 0x6014, 0x9084, 0x1984, 0x9085, 0x0010,
+	0x00ce, 0x080c, 0x9388, 0x0804, 0x2594, 0x2061, 0x0100, 0x62c0,
+	0x080c, 0x9c43, 0x2019, 0x19c1, 0x2304, 0x9065, 0x0120, 0x2009,
+	0x0027, 0x080c, 0x9eac, 0x00ce, 0x0804, 0x2594, 0xd2bc, 0x0904,
+	0x2581, 0x080c, 0x80c5, 0x6014, 0x9084, 0x1984, 0x9085, 0x0010,
 	0x6016, 0x6027, 0x0004, 0x00d6, 0x2069, 0x0140, 0x6804, 0x9084,
 	0x4000, 0x0110, 0x080c, 0x2b24, 0x00de, 0x00c6, 0x2061, 0x19b8,
-	0x6044, 0x080c, 0xc1f9, 0x0120, 0x909a, 0x0003, 0x1628, 0x0018,
+	0x6044, 0x080c, 0xc212, 0x0120, 0x909a, 0x0003, 0x1628, 0x0018,
 	0x909a, 0x00c8, 0x1608, 0x8000, 0x6046, 0x603c, 0x00ce, 0x9005,
-	0x0558, 0x2009, 0x07d0, 0x080c, 0x8095, 0x9080, 0x0008, 0x2004,
+	0x0558, 0x2009, 0x07d0, 0x080c, 0x80bd, 0x9080, 0x0008, 0x2004,
 	0x9086, 0x0006, 0x1138, 0x6114, 0x918c, 0x1984, 0x918d, 0x0012,
 	0x6116, 0x00d0, 0x6114, 0x918c, 0x1984, 0x918d, 0x0016, 0x6116,
 	0x0098, 0x6027, 0x0004, 0x0080, 0x0036, 0x2019, 0x0001, 0x080c,
-	0x96bf, 0x003e, 0x2019, 0x19c7, 0x2304, 0x9065, 0x0120, 0x2009,
-	0x004f, 0x080c, 0x9e93, 0x00ce, 0x001e, 0xd19c, 0x0904, 0x2607,
+	0x96d8, 0x003e, 0x2019, 0x19c7, 0x2304, 0x9065, 0x0120, 0x2009,
+	0x004f, 0x080c, 0x9eac, 0x00ce, 0x001e, 0xd19c, 0x0904, 0x2607,
 	0x7038, 0xd0ac, 0x1904, 0x25dc, 0x0016, 0x0156, 0x6027, 0x0008,
 	0x6050, 0x9085, 0x0040, 0x6052, 0x6050, 0x9084, 0xfbcf, 0x6052,
 	0x080c, 0x2a5d, 0x9085, 0x2000, 0x6052, 0x20a9, 0x0012, 0x1d04,
-	0x25af, 0x080c, 0x80c4, 0x1f04, 0x25af, 0x6050, 0x9085, 0x0400,
+	0x25af, 0x080c, 0x80ec, 0x1f04, 0x25af, 0x6050, 0x9085, 0x0400,
 	0x9084, 0xdfbf, 0x6052, 0x20a9, 0x0028, 0xa001, 0x1f04, 0x25bd,
 	0x6150, 0x9185, 0x1400, 0x6052, 0x20a9, 0x0366, 0x1d04, 0x25c6,
-	0x080c, 0x80c4, 0x6020, 0xd09c, 0x1130, 0x015e, 0x6152, 0x001e,
+	0x080c, 0x80ec, 0x6020, 0xd09c, 0x1130, 0x015e, 0x6152, 0x001e,
 	0x6027, 0x0008, 0x04a0, 0x080c, 0x2a25, 0x1f04, 0x25c6, 0x015e,
 	0x6152, 0x001e, 0x6027, 0x0008, 0x0016, 0x6028, 0xc09c, 0x602a,
-	0x080c, 0x9d9f, 0x60e3, 0x0000, 0x080c, 0xd894, 0x080c, 0xd8af,
-	0x080c, 0x5383, 0xd0fc, 0x1138, 0x080c, 0xc1f2, 0x1120, 0x9085,
-	0x0001, 0x080c, 0x6fee, 0x9006, 0x080c, 0x2b14, 0x2009, 0x0002,
+	0x080c, 0x9db8, 0x60e3, 0x0000, 0x080c, 0xd8b4, 0x080c, 0xd8cf,
+	0x080c, 0x538a, 0xd0fc, 0x1138, 0x080c, 0xc20b, 0x1120, 0x9085,
+	0x0001, 0x080c, 0x6ff9, 0x9006, 0x080c, 0x2b14, 0x2009, 0x0002,
 	0x080c, 0x2a63, 0x00e6, 0x2071, 0x1800, 0x7003, 0x0004, 0x080c,
 	0x0e80, 0x00ee, 0x6027, 0x0008, 0x080c, 0x0b8f, 0x001e, 0x918c,
 	0xffd0, 0x6126, 0x00ae, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036,
@@ -1016,33 +1016,33 @@
 	0x70ce, 0x9116, 0x0904, 0x265b, 0x81ff, 0x01a0, 0x2009, 0x0000,
 	0x080c, 0x2a63, 0x2011, 0x8011, 0x2019, 0x010e, 0x231c, 0x939e,
 	0x0007, 0x1118, 0x2019, 0x0001, 0x0010, 0x2019, 0x0000, 0x080c,
-	0x48d2, 0x0448, 0x2001, 0x1979, 0x200c, 0x81ff, 0x1140, 0x2001,
+	0x48d9, 0x0448, 0x2001, 0x1979, 0x200c, 0x81ff, 0x1140, 0x2001,
 	0x0109, 0x2004, 0xd0b4, 0x0118, 0x2019, 0x0003, 0x0008, 0x2118,
-	0x2011, 0x8012, 0x080c, 0x48d2, 0x080c, 0x0e80, 0x080c, 0x5383,
-	0xd0fc, 0x1188, 0x080c, 0xc1f2, 0x1170, 0x00c6, 0x080c, 0x26f7,
-	0x080c, 0x9626, 0x2061, 0x0100, 0x2019, 0x0028, 0x2009, 0x0002,
-	0x080c, 0x2fa2, 0x00ce, 0x012e, 0x00fe, 0x00ee, 0x003e, 0x002e,
+	0x2011, 0x8012, 0x080c, 0x48d9, 0x080c, 0x0e80, 0x080c, 0x538a,
+	0xd0fc, 0x1188, 0x080c, 0xc20b, 0x1170, 0x00c6, 0x080c, 0x26f7,
+	0x080c, 0x963f, 0x2061, 0x0100, 0x2019, 0x0028, 0x2009, 0x0002,
+	0x080c, 0x2fa5, 0x00ce, 0x012e, 0x00fe, 0x00ee, 0x003e, 0x002e,
 	0x001e, 0x000e, 0x0005, 0x2028, 0x918c, 0x00ff, 0x2130, 0x9094,
 	0xff00, 0x11f0, 0x2011, 0x1836, 0x2214, 0xd2ac, 0x11c8, 0x81ff,
 	0x01e8, 0x2011, 0x181e, 0x2204, 0x9106, 0x1190, 0x2011, 0x181f,
 	0x2214, 0x9294, 0xff00, 0x9584, 0xff00, 0x9206, 0x1148, 0x2011,
 	0x181f, 0x2214, 0x9294, 0x00ff, 0x9584, 0x00ff, 0x9206, 0x1120,
-	0x2500, 0x080c, 0x7c2f, 0x0048, 0x9584, 0x00ff, 0x9080, 0x3131,
-	0x200d, 0x918c, 0xff00, 0x810f, 0x9006, 0x0005, 0x9080, 0x3131,
+	0x2500, 0x080c, 0x7c57, 0x0048, 0x9584, 0x00ff, 0x9080, 0x3138,
+	0x200d, 0x918c, 0xff00, 0x810f, 0x9006, 0x0005, 0x9080, 0x3138,
 	0x200d, 0x918c, 0x00ff, 0x0005, 0x00d6, 0x2069, 0x0140, 0x2001,
 	0x1817, 0x2003, 0x00ef, 0x20a9, 0x0010, 0x9006, 0x6852, 0x6856,
 	0x1f04, 0x26a7, 0x00de, 0x0005, 0x0006, 0x00d6, 0x0026, 0x2069,
 	0x0140, 0x2001, 0x1817, 0x2102, 0x8114, 0x8214, 0x8214, 0x8214,
 	0x20a9, 0x0010, 0x6853, 0x0000, 0x9006, 0x82ff, 0x1128, 0x9184,
-	0x000f, 0x9080, 0xdd69, 0x2005, 0x6856, 0x8211, 0x1f04, 0x26bc,
+	0x000f, 0x9080, 0xdd89, 0x2005, 0x6856, 0x8211, 0x1f04, 0x26bc,
 	0x002e, 0x00de, 0x000e, 0x0005, 0x00c6, 0x2061, 0x1800, 0x6030,
 	0x0110, 0xc09d, 0x0008, 0xc09c, 0x6032, 0x00ce, 0x0005, 0x0156,
 	0x00d6, 0x0026, 0x0016, 0x0006, 0x2069, 0x0140, 0x6980, 0x9116,
 	0x0180, 0x9112, 0x1230, 0x8212, 0x8210, 0x22a8, 0x2001, 0x0402,
 	0x0018, 0x22a8, 0x2001, 0x0404, 0x680e, 0x1f04, 0x26ec, 0x680f,
 	0x0000, 0x000e, 0x001e, 0x002e, 0x00de, 0x015e, 0x0005, 0x080c,
-	0x537f, 0xd0c4, 0x0150, 0xd0a4, 0x0140, 0x9006, 0x0046, 0x2020,
-	0x2009, 0x002e, 0x080c, 0xd50a, 0x004e, 0x0005, 0x00f6, 0x0016,
+	0x5386, 0xd0c4, 0x0150, 0xd0a4, 0x0140, 0x9006, 0x0046, 0x2020,
+	0x2009, 0x002e, 0x080c, 0xd52a, 0x004e, 0x0005, 0x00f6, 0x0016,
 	0x0026, 0x2079, 0x0140, 0x78c4, 0xd0dc, 0x0904, 0x2763, 0x080c,
 	0x29c2, 0x0660, 0x9084, 0x0700, 0x908e, 0x0600, 0x1120, 0x2011,
 	0x4000, 0x900e, 0x0458, 0x908e, 0x0500, 0x1120, 0x2011, 0x8000,
@@ -1051,9 +1051,9 @@
 	0x908e, 0x0200, 0x1120, 0x9016, 0x2009, 0x0004, 0x0078, 0x908e,
 	0x0100, 0x1548, 0x9016, 0x2009, 0x0008, 0x0040, 0x9084, 0x0700,
 	0x908e, 0x0300, 0x1500, 0x2011, 0x0030, 0x0058, 0x2300, 0x9080,
-	0x0020, 0x2018, 0x080c, 0x8248, 0x928c, 0xff00, 0x0110, 0x2011,
+	0x0020, 0x2018, 0x080c, 0x8270, 0x928c, 0xff00, 0x0110, 0x2011,
 	0x00ff, 0x2200, 0x8007, 0x9085, 0x004c, 0x78c2, 0x2009, 0x0138,
-	0x220a, 0x080c, 0x6fa7, 0x1118, 0x2009, 0x193e, 0x220a, 0x002e,
+	0x220a, 0x080c, 0x6fb2, 0x1118, 0x2009, 0x193e, 0x220a, 0x002e,
 	0x001e, 0x00fe, 0x0005, 0x78c3, 0x0000, 0x0cc8, 0x0126, 0x2091,
 	0x2800, 0x0006, 0x0016, 0x0026, 0x2001, 0x0170, 0x200c, 0x8000,
 	0x2014, 0x9184, 0x0003, 0x0110, 0x080c, 0x0dad, 0x002e, 0x001e,
@@ -1069,17 +1069,17 @@
 	0x2832, 0x2001, 0x0001, 0x080c, 0x260c, 0x080c, 0x2a20, 0x2001,
 	0x1963, 0x2003, 0x0000, 0x7828, 0x9084, 0xe1d7, 0x782a, 0x9006,
 	0x20a9, 0x0009, 0x080c, 0x29de, 0x2001, 0x1961, 0x2003, 0x0006,
-	0x2009, 0x001e, 0x2011, 0x2833, 0x080c, 0x80a2, 0x0005, 0x2009,
+	0x2009, 0x001e, 0x2011, 0x2833, 0x080c, 0x80ca, 0x0005, 0x2009,
 	0x1966, 0x200b, 0x0000, 0x2001, 0x196b, 0x2003, 0x0036, 0x2001,
 	0x196a, 0x2003, 0x002a, 0x2001, 0x1963, 0x2003, 0x0001, 0x9006,
 	0x080c, 0x2990, 0x2001, 0xffff, 0x20a9, 0x0009, 0x080c, 0x29de,
 	0x2001, 0x1961, 0x2003, 0x0006, 0x2009, 0x001e, 0x2011, 0x2833,
-	0x080c, 0x80a2, 0x0005, 0x080c, 0x0db4, 0x2001, 0x196b, 0x2003,
+	0x080c, 0x80ca, 0x0005, 0x080c, 0x0db4, 0x2001, 0x196b, 0x2003,
 	0x0036, 0x2001, 0x1963, 0x2003, 0x0003, 0x7a38, 0x9294, 0x0005,
 	0x9296, 0x0004, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x080c,
 	0x2990, 0x2001, 0x1967, 0x2003, 0x0000, 0x2001, 0xffff, 0x20a9,
 	0x0009, 0x080c, 0x29de, 0x2001, 0x1961, 0x2003, 0x0006, 0x2009,
-	0x001e, 0x2011, 0x2833, 0x080c, 0x80a2, 0x0005, 0x080c, 0x0db4,
+	0x001e, 0x2011, 0x2833, 0x080c, 0x80ca, 0x0005, 0x080c, 0x0db4,
 	0x080c, 0x0db4, 0x0005, 0x0006, 0x0016, 0x0026, 0x00e6, 0x00f6,
 	0x0156, 0x0126, 0x2091, 0x8000, 0x2079, 0x0100, 0x2001, 0x1963,
 	0x2004, 0x908a, 0x0007, 0x1a0c, 0x0db4, 0x0043, 0x012e, 0x015e,
@@ -1139,14 +1139,14 @@
 	0x000e, 0x2008, 0x9186, 0x0000, 0x1118, 0x783b, 0x0007, 0x0090,
 	0x9186, 0x0001, 0x1118, 0x783b, 0x0006, 0x0060, 0x9186, 0x0002,
 	0x1118, 0x783b, 0x0005, 0x0030, 0x9186, 0x0003, 0x1118, 0x783b,
-	0x0004, 0x0000, 0x0006, 0x1d04, 0x2a0b, 0x080c, 0x80c4, 0x1f04,
+	0x0004, 0x0000, 0x0006, 0x1d04, 0x2a0b, 0x080c, 0x80ec, 0x1f04,
 	0x2a0b, 0x7850, 0x9085, 0x0400, 0x9084, 0xdfbf, 0x7852, 0x080c,
 	0x2a5d, 0x9085, 0x1000, 0x7852, 0x000e, 0x001e, 0x012e, 0x0005,
 	0x7850, 0x9084, 0xffcf, 0x7852, 0x0005, 0x0006, 0x0156, 0x00f6,
 	0x2079, 0x0100, 0x20a9, 0x000a, 0x7854, 0xd0ac, 0x1130, 0x7820,
 	0xd0e4, 0x1140, 0x1f04, 0x2a2f, 0x0028, 0x7854, 0xd08c, 0x1110,
 	0x1f04, 0x2a35, 0x00fe, 0x015e, 0x000e, 0x0005, 0x1d04, 0x2a3e,
-	0x080c, 0x80c4, 0x1f04, 0x2a3e, 0x0005, 0x0006, 0x2001, 0x196d,
+	0x080c, 0x80ec, 0x1f04, 0x2a3e, 0x0005, 0x0006, 0x2001, 0x196d,
 	0x2004, 0x9086, 0x0000, 0x000e, 0x0005, 0x0006, 0x2001, 0x196d,
 	0x2004, 0x9086, 0x0001, 0x000e, 0x0005, 0x0006, 0x2001, 0x196d,
 	0x2004, 0x9086, 0x0002, 0x000e, 0x0005, 0xa001, 0xa001, 0xa001,
@@ -1172,13 +1172,13 @@
 	0x1120, 0x2304, 0x9084, 0x2800, 0x0dc0, 0x001e, 0x919c, 0xffe4,
 	0x9184, 0x0001, 0x0118, 0x9385, 0x0009, 0x6016, 0x9184, 0x0002,
 	0x0118, 0x9385, 0x0012, 0x6016, 0x003e, 0x2001, 0x180c, 0x200c,
-	0xc1dc, 0x2102, 0x00ce, 0x0005, 0x0016, 0x0026, 0x080c, 0x6fc1,
+	0xc1dc, 0x2102, 0x00ce, 0x0005, 0x0016, 0x0026, 0x080c, 0x6fcc,
 	0x0108, 0xc0bc, 0x2009, 0x0140, 0x2114, 0x9294, 0x0001, 0x9215,
 	0x220a, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x2009, 0x0140,
 	0x2114, 0x9294, 0x0001, 0x9285, 0x1000, 0x200a, 0x220a, 0x002e,
 	0x001e, 0x0005, 0x0016, 0x0026, 0x2009, 0x0140, 0x2114, 0x9294,
 	0x0001, 0x9215, 0x220a, 0x002e, 0x001e, 0x0005, 0x0006, 0x0016,
-	0x2009, 0x0140, 0x2104, 0x1128, 0x080c, 0x6fc1, 0x0110, 0xc0bc,
+	0x2009, 0x0140, 0x2104, 0x1128, 0x080c, 0x6fcc, 0x0110, 0xc0bc,
 	0x0008, 0xc0bd, 0x200a, 0x001e, 0x000e, 0x0005, 0x2dba, 0x2dba,
 	0x2bde, 0x2bde, 0x2bea, 0x2bea, 0x2bf6, 0x2bf6, 0x2c04, 0x2c04,
 	0x2c10, 0x2c10, 0x2c1e, 0x2c1e, 0x2c2c, 0x2c2c, 0x2c3e, 0x2c3e,
@@ -1258,2610 +1258,2615 @@
 	0x2766, 0x080c, 0x212b, 0x080c, 0x2313, 0x080c, 0x130c, 0x080c,
 	0x2166, 0x0000, 0x015e, 0x014e, 0x013e, 0x01de, 0x01ce, 0x012e,
 	0x000e, 0x010e, 0x000d, 0x00b6, 0x00c6, 0x0026, 0x0046, 0x9026,
-	0x080c, 0x6519, 0x1904, 0x2ebe, 0x72d8, 0x2001, 0x194d, 0x2004,
+	0x080c, 0x6520, 0x1904, 0x2ec1, 0x72d8, 0x2001, 0x194d, 0x2004,
 	0x9005, 0x1110, 0xd29c, 0x0148, 0xd284, 0x1138, 0xd2bc, 0x1904,
-	0x2ebe, 0x080c, 0x2ec3, 0x0804, 0x2ebe, 0xd2cc, 0x1904, 0x2ebe,
-	0x080c, 0x6fa7, 0x1120, 0x70ab, 0xffff, 0x0804, 0x2ebe, 0xd294,
-	0x0120, 0x70ab, 0xffff, 0x0804, 0x2ebe, 0x080c, 0x3127, 0x0160,
-	0x080c, 0xc1f9, 0x0128, 0x2001, 0x1817, 0x203c, 0x0804, 0x2e50,
-	0x70ab, 0xffff, 0x0804, 0x2ebe, 0x2001, 0x1817, 0x203c, 0x7290,
-	0xd284, 0x0904, 0x2e50, 0xd28c, 0x1904, 0x2e50, 0x0036, 0x73a8,
+	0x2ec1, 0x080c, 0x2ec6, 0x0804, 0x2ec1, 0xd2cc, 0x1904, 0x2ec1,
+	0x080c, 0x6fb2, 0x1120, 0x70ab, 0xffff, 0x0804, 0x2ec1, 0xd294,
+	0x0120, 0x70ab, 0xffff, 0x0804, 0x2ec1, 0x080c, 0x312e, 0x0160,
+	0x080c, 0xc212, 0x0128, 0x2001, 0x1817, 0x203c, 0x0804, 0x2e53,
+	0x70ab, 0xffff, 0x0804, 0x2ec1, 0x2001, 0x1817, 0x203c, 0x7290,
+	0xd284, 0x0904, 0x2e53, 0xd28c, 0x1904, 0x2e53, 0x0036, 0x73a8,
 	0x938e, 0xffff, 0x1110, 0x2019, 0x0001, 0x8314, 0x92e0, 0x1c80,
 	0x2c04, 0x938c, 0x0001, 0x0120, 0x9084, 0xff00, 0x8007, 0x0010,
-	0x9084, 0x00ff, 0x970e, 0x0590, 0x908e, 0x0000, 0x0578, 0x908e,
-	0x00ff, 0x1150, 0x7230, 0xd284, 0x1570, 0x7290, 0xc28d, 0x7292,
-	0x70ab, 0xffff, 0x003e, 0x0460, 0x0026, 0x2011, 0x0010, 0x080c,
-	0x657f, 0x002e, 0x0118, 0x70ab, 0xffff, 0x00f8, 0x900e, 0x080c,
-	0x2663, 0x080c, 0x61d7, 0x11a8, 0x080c, 0x655b, 0x1150, 0x7030,
-	0xd08c, 0x0118, 0xb800, 0xd0bc, 0x0120, 0x080c, 0x2edc, 0x0148,
-	0x0028, 0x080c, 0x3018, 0x080c, 0x2f08, 0x0118, 0x8318, 0x0804,
-	0x2e05, 0x73aa, 0x0010, 0x70ab, 0xffff, 0x003e, 0x0804, 0x2ebe,
-	0x9780, 0x3131, 0x203d, 0x97bc, 0xff00, 0x873f, 0x2041, 0x007e,
-	0x70a8, 0x9096, 0xffff, 0x1118, 0x900e, 0x28a8, 0x0050, 0x9812,
-	0x0220, 0x2008, 0x9802, 0x20a8, 0x0020, 0x70ab, 0xffff, 0x0804,
-	0x2ebe, 0x2700, 0x0156, 0x0016, 0x9106, 0x0904, 0x2eb3, 0x0026,
-	0x2011, 0x0010, 0x080c, 0x657f, 0x002e, 0x0120, 0x2009, 0xffff,
-	0x0804, 0x2ebb, 0xc484, 0x080c, 0x6237, 0x0138, 0x080c, 0xc1f9,
-	0x1590, 0x080c, 0x61d7, 0x15b8, 0x0008, 0xc485, 0x080c, 0x655b,
-	0x1130, 0x7030, 0xd08c, 0x01f8, 0xb800, 0xd0bc, 0x11e0, 0x7290,
-	0xd28c, 0x0180, 0x080c, 0x655b, 0x9082, 0x0006, 0x02e0, 0xd484,
-	0x1118, 0x080c, 0x61fb, 0x0028, 0x080c, 0x30a3, 0x01a0, 0x080c,
-	0x30ce, 0x0088, 0x080c, 0x3018, 0x080c, 0xc1f9, 0x1160, 0x080c,
-	0x2f08, 0x0188, 0x0040, 0x080c, 0xc1f9, 0x1118, 0x080c, 0x30a3,
-	0x0110, 0x0451, 0x0140, 0x001e, 0x8108, 0x015e, 0x1f04, 0x2e69,
-	0x70ab, 0xffff, 0x0018, 0x001e, 0x015e, 0x71aa, 0x004e, 0x002e,
-	0x00ce, 0x00be, 0x0005, 0x00c6, 0x0016, 0x70ab, 0x0001, 0x2009,
-	0x007e, 0x080c, 0x61d7, 0x1168, 0xb813, 0x00ff, 0xb817, 0xfffe,
-	0x080c, 0x3018, 0x04a9, 0x0128, 0x70d8, 0xc0bd, 0x70da, 0x080c,
-	0xbf4a, 0x001e, 0x00ce, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6,
-	0x2001, 0x1858, 0x2004, 0x9084, 0x00ff, 0xb842, 0x080c, 0x9e66,
-	0x01d0, 0x2b00, 0x6012, 0x080c, 0xbf73, 0x6023, 0x0001, 0x9006,
-	0x080c, 0x6174, 0x2001, 0x0000, 0x080c, 0x6188, 0x0126, 0x2091,
-	0x8000, 0x70a4, 0x8000, 0x70a6, 0x012e, 0x2009, 0x0004, 0x080c,
-	0x9e93, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005,
-	0x0016, 0x0076, 0x00d6, 0x00c6, 0x2001, 0x1858, 0x2004, 0x9084,
-	0x00ff, 0xb842, 0x080c, 0x9e66, 0x0548, 0x2b00, 0x6012, 0xb800,
-	0xc0c4, 0xb802, 0xb8a0, 0x9086, 0x007e, 0x0140, 0xb804, 0x9084,
-	0x00ff, 0x9086, 0x0006, 0x1110, 0x080c, 0x2fd7, 0x080c, 0xbf73,
-	0x6023, 0x0001, 0x9006, 0x080c, 0x6174, 0x2001, 0x0002, 0x080c,
-	0x6188, 0x0126, 0x2091, 0x8000, 0x70a4, 0x8000, 0x70a6, 0x012e,
-	0x2009, 0x0002, 0x080c, 0x9e93, 0x9085, 0x0001, 0x00ce, 0x00de,
-	0x007e, 0x001e, 0x0005, 0x00b6, 0x00c6, 0x0026, 0x2009, 0x0080,
-	0x080c, 0x61d7, 0x1140, 0xb813, 0x00ff, 0xb817, 0xfffc, 0x0039,
-	0x0110, 0x70df, 0xffff, 0x002e, 0x00ce, 0x00be, 0x0005, 0x0016,
-	0x0076, 0x00d6, 0x00c6, 0x080c, 0x9dc3, 0x01d0, 0x2b00, 0x6012,
-	0x080c, 0xbf73, 0x6023, 0x0001, 0x9006, 0x080c, 0x6174, 0x2001,
-	0x0002, 0x080c, 0x6188, 0x0126, 0x2091, 0x8000, 0x70e0, 0x8000,
-	0x70e2, 0x012e, 0x2009, 0x0002, 0x080c, 0x9e93, 0x9085, 0x0001,
-	0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, 0x00c6, 0x00d6, 0x0126,
-	0x2091, 0x8000, 0x2009, 0x007f, 0x080c, 0x61d7, 0x11b8, 0xb813,
-	0x00ff, 0xb817, 0xfffd, 0xb8bf, 0x0004, 0x080c, 0x9dc3, 0x0170,
-	0x2b00, 0x6012, 0x6316, 0x6023, 0x0001, 0x620a, 0x080c, 0xbf73,
-	0x2009, 0x0022, 0x080c, 0x9e93, 0x9085, 0x0001, 0x012e, 0x00de,
-	0x00ce, 0x0005, 0x00e6, 0x00c6, 0x0066, 0x0036, 0x0026, 0x00b6,
-	0x21f0, 0x080c, 0x8554, 0x080c, 0x84e3, 0x080c, 0x9c71, 0x080c,
-	0xad5e, 0x3e08, 0x2130, 0x81ff, 0x0120, 0x20a9, 0x007e, 0x900e,
-	0x0018, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x6237, 0x1140,
-	0x9686, 0x0002, 0x1118, 0xb800, 0xd0bc, 0x1110, 0x080c, 0x5ce4,
-	0x001e, 0x8108, 0x1f04, 0x2fbc, 0x9686, 0x0001, 0x190c, 0x30fb,
-	0x00be, 0x002e, 0x003e, 0x006e, 0x00ce, 0x00ee, 0x0005, 0x00e6,
-	0x00c6, 0x0036, 0x0026, 0x0016, 0x00b6, 0x6210, 0x2258, 0xbaa0,
-	0x0026, 0x2019, 0x0029, 0x080c, 0x8549, 0x0076, 0x2039, 0x0000,
-	0x080c, 0x8441, 0x2c08, 0x080c, 0xd27b, 0x007e, 0x001e, 0xba10,
-	0xbb14, 0x080c, 0x5ce4, 0xba12, 0xbb16, 0x00be, 0x001e, 0x002e,
-	0x003e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x00b6, 0x6010,
-	0x2058, 0xb8a0, 0x00be, 0x9086, 0x0080, 0x0150, 0x2071, 0x1800,
-	0x70a4, 0x9005, 0x0110, 0x8001, 0x70a6, 0x000e, 0x00ee, 0x0005,
-	0x2071, 0x1800, 0x70e0, 0x9005, 0x0dc0, 0x8001, 0x70e2, 0x0ca8,
-	0xb800, 0xc08c, 0xb802, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x00b6,
+	0x9084, 0x00ff, 0x970e, 0x05a8, 0x908e, 0x0000, 0x0590, 0x908e,
+	0x00ff, 0x1150, 0x7230, 0xd284, 0x1588, 0x7290, 0xc28d, 0x7292,
+	0x70ab, 0xffff, 0x003e, 0x0478, 0x0026, 0x2011, 0x0010, 0x080c,
+	0x6586, 0x002e, 0x0118, 0x70ab, 0xffff, 0x0410, 0x900e, 0x080c,
+	0x2663, 0x080c, 0x61de, 0x11c0, 0x080c, 0x6562, 0x1168, 0x7030,
+	0xd08c, 0x0130, 0xb800, 0xd0bc, 0x0138, 0x080c, 0x645e, 0x0120,
+	0x080c, 0x2edf, 0x0148, 0x0028, 0x080c, 0x301f, 0x080c, 0x2f0b,
+	0x0118, 0x8318, 0x0804, 0x2e05, 0x73aa, 0x0010, 0x70ab, 0xffff,
+	0x003e, 0x0804, 0x2ec1, 0x9780, 0x3138, 0x203d, 0x97bc, 0xff00,
+	0x873f, 0x2041, 0x007e, 0x70a8, 0x9096, 0xffff, 0x1118, 0x900e,
+	0x28a8, 0x0050, 0x9812, 0x0220, 0x2008, 0x9802, 0x20a8, 0x0020,
+	0x70ab, 0xffff, 0x0804, 0x2ec1, 0x2700, 0x0156, 0x0016, 0x9106,
+	0x0904, 0x2eb6, 0x0026, 0x2011, 0x0010, 0x080c, 0x6586, 0x002e,
+	0x0120, 0x2009, 0xffff, 0x0804, 0x2ebe, 0xc484, 0x080c, 0x623e,
+	0x0138, 0x080c, 0xc212, 0x1590, 0x080c, 0x61de, 0x15b8, 0x0008,
+	0xc485, 0x080c, 0x6562, 0x1130, 0x7030, 0xd08c, 0x01f8, 0xb800,
+	0xd0bc, 0x11e0, 0x7290, 0xd28c, 0x0180, 0x080c, 0x6562, 0x9082,
+	0x0006, 0x02e0, 0xd484, 0x1118, 0x080c, 0x6202, 0x0028, 0x080c,
+	0x30aa, 0x01a0, 0x080c, 0x30d5, 0x0088, 0x080c, 0x301f, 0x080c,
+	0xc212, 0x1160, 0x080c, 0x2f0b, 0x0188, 0x0040, 0x080c, 0xc212,
+	0x1118, 0x080c, 0x30aa, 0x0110, 0x0451, 0x0140, 0x001e, 0x8108,
+	0x015e, 0x1f04, 0x2e6c, 0x70ab, 0xffff, 0x0018, 0x001e, 0x015e,
+	0x71aa, 0x004e, 0x002e, 0x00ce, 0x00be, 0x0005, 0x00c6, 0x0016,
+	0x70ab, 0x0001, 0x2009, 0x007e, 0x080c, 0x61de, 0x1168, 0xb813,
+	0x00ff, 0xb817, 0xfffe, 0x080c, 0x301f, 0x04a9, 0x0128, 0x70d8,
+	0xc0bd, 0x70da, 0x080c, 0xbf63, 0x001e, 0x00ce, 0x0005, 0x0016,
+	0x0076, 0x00d6, 0x00c6, 0x2001, 0x1858, 0x2004, 0x9084, 0x00ff,
+	0xb842, 0x080c, 0x9e7f, 0x01d0, 0x2b00, 0x6012, 0x080c, 0xbf8c,
+	0x6023, 0x0001, 0x9006, 0x080c, 0x617b, 0x2001, 0x0000, 0x080c,
+	0x618f, 0x0126, 0x2091, 0x8000, 0x70a4, 0x8000, 0x70a6, 0x012e,
+	0x2009, 0x0004, 0x080c, 0x9eac, 0x9085, 0x0001, 0x00ce, 0x00de,
+	0x007e, 0x001e, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x2001,
+	0x1858, 0x2004, 0x9084, 0x00ff, 0xb842, 0x080c, 0x9e7f, 0x0548,
+	0x2b00, 0x6012, 0xb800, 0xc0c4, 0xb802, 0xb8a0, 0x9086, 0x007e,
+	0x0140, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1110, 0x080c,
+	0x2fda, 0x080c, 0xbf8c, 0x6023, 0x0001, 0x9006, 0x080c, 0x617b,
+	0x2001, 0x0002, 0x080c, 0x618f, 0x0126, 0x2091, 0x8000, 0x70a4,
+	0x8000, 0x70a6, 0x012e, 0x2009, 0x0002, 0x080c, 0x9eac, 0x9085,
+	0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, 0x00b6, 0x00c6,
+	0x0026, 0x2009, 0x0080, 0x080c, 0x61de, 0x1140, 0xb813, 0x00ff,
+	0xb817, 0xfffc, 0x0039, 0x0110, 0x70df, 0xffff, 0x002e, 0x00ce,
+	0x00be, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x080c, 0x9ddc,
+	0x01d0, 0x2b00, 0x6012, 0x080c, 0xbf8c, 0x6023, 0x0001, 0x9006,
+	0x080c, 0x617b, 0x2001, 0x0002, 0x080c, 0x618f, 0x0126, 0x2091,
+	0x8000, 0x70e0, 0x8000, 0x70e2, 0x012e, 0x2009, 0x0002, 0x080c,
+	0x9eac, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005,
+	0x00c6, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2009, 0x007f, 0x080c,
+	0x61de, 0x11b8, 0xb813, 0x00ff, 0xb817, 0xfffd, 0xb8bf, 0x0004,
+	0x080c, 0x9ddc, 0x0170, 0x2b00, 0x6012, 0x6316, 0x6023, 0x0001,
+	0x620a, 0x080c, 0xbf8c, 0x2009, 0x0022, 0x080c, 0x9eac, 0x9085,
+	0x0001, 0x012e, 0x00de, 0x00ce, 0x0005, 0x00e6, 0x00c6, 0x0066,
+	0x0036, 0x0026, 0x00b6, 0x21f0, 0x080c, 0x857c, 0x080c, 0x850b,
+	0x080c, 0x9c8a, 0x080c, 0xad77, 0x3e08, 0x2130, 0x81ff, 0x0120,
+	0x20a9, 0x007e, 0x900e, 0x0018, 0x20a9, 0x007f, 0x900e, 0x0016,
+	0x080c, 0x623e, 0x1140, 0x9686, 0x0002, 0x1118, 0xb800, 0xd0bc,
+	0x1110, 0x080c, 0x5ceb, 0x001e, 0x8108, 0x1f04, 0x2fbf, 0x9686,
+	0x0001, 0x190c, 0x3102, 0x00be, 0x002e, 0x003e, 0x006e, 0x00ce,
+	0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0046, 0x0036, 0x0026, 0x0016,
+	0x00b6, 0x6210, 0x2258, 0xbaa0, 0x0026, 0x2019, 0x0029, 0x080c,
+	0x8571, 0x0076, 0x2039, 0x0000, 0x080c, 0x8469, 0x2c08, 0x080c,
+	0xd29b, 0x007e, 0x001e, 0xba10, 0xbb14, 0xbcb0, 0x080c, 0x5ceb,
+	0xba12, 0xbb16, 0xbcb2, 0x00be, 0x001e, 0x002e, 0x003e, 0x004e,
+	0x00ce, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x00b6, 0x6010, 0x2058,
+	0xb8a0, 0x00be, 0x9086, 0x0080, 0x0150, 0x2071, 0x1800, 0x70a4,
+	0x9005, 0x0110, 0x8001, 0x70a6, 0x000e, 0x00ee, 0x0005, 0x2071,
+	0x1800, 0x70e0, 0x9005, 0x0dc0, 0x8001, 0x70e2, 0x0ca8, 0xb800,
+	0xc08c, 0xb802, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x00b6, 0x0046,
 	0x0036, 0x0026, 0x0016, 0x0156, 0x2178, 0x81ff, 0x1118, 0x20a9,
-	0x0001, 0x0080, 0x080c, 0x537f, 0xd0c4, 0x0148, 0x0040, 0x9006,
-	0x0046, 0x2020, 0x2009, 0x002d, 0x080c, 0xd50a, 0x004e, 0x20a9,
-	0x0800, 0x9016, 0x0026, 0x928e, 0x007e, 0x0904, 0x3083, 0x928e,
-	0x007f, 0x0904, 0x3083, 0x928e, 0x0080, 0x05e8, 0x9288, 0x1000,
-	0x210c, 0x81ff, 0x05c0, 0x8fff, 0x1148, 0x2001, 0x195f, 0x0006,
-	0x2003, 0x0001, 0x04e9, 0x000e, 0x2003, 0x0000, 0x00b6, 0x00c6,
-	0x2158, 0x2001, 0x0001, 0x080c, 0x6525, 0x00ce, 0x00be, 0x2019,
-	0x0029, 0x080c, 0x8549, 0x0076, 0x2039, 0x0000, 0x080c, 0x8441,
-	0x00b6, 0x00c6, 0x0026, 0x2158, 0xba04, 0x9294, 0x00ff, 0x9286,
-	0x0006, 0x1118, 0xb807, 0x0404, 0x0028, 0x2001, 0x0004, 0x8007,
-	0x9215, 0xba06, 0x002e, 0x00ce, 0x00be, 0x0016, 0x2c08, 0x080c,
-	0xd27b, 0x001e, 0x007e, 0x002e, 0x8210, 0x1f04, 0x303a, 0x015e,
-	0x001e, 0x002e, 0x003e, 0x00be, 0x00ce, 0x00ee, 0x00fe, 0x0005,
-	0x0046, 0x0026, 0x0016, 0x080c, 0x537f, 0xd0c4, 0x0140, 0xd0a4,
-	0x0130, 0x9006, 0x2220, 0x2009, 0x0029, 0x080c, 0xd50a, 0x001e,
-	0x002e, 0x004e, 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x7290,
-	0x82ff, 0x01e8, 0x080c, 0x6553, 0x11d0, 0x2100, 0x080c, 0x2696,
-	0x81ff, 0x01b8, 0x2019, 0x0001, 0x8314, 0x92e0, 0x1c80, 0x2c04,
-	0xd384, 0x0120, 0x9084, 0xff00, 0x8007, 0x0010, 0x9084, 0x00ff,
-	0x9116, 0x0138, 0x9096, 0x00ff, 0x0110, 0x8318, 0x0c68, 0x9085,
-	0x0001, 0x00ce, 0x003e, 0x002e, 0x001e, 0x0005, 0x0016, 0x00c6,
-	0x0126, 0x2091, 0x8000, 0x0036, 0x2019, 0x0029, 0x00a9, 0x003e,
-	0x9180, 0x1000, 0x2004, 0x9065, 0x0158, 0x0016, 0x00c6, 0x2061,
-	0x1a80, 0x001e, 0x6112, 0x080c, 0x2fd7, 0x001e, 0x080c, 0x61fb,
-	0x012e, 0x00ce, 0x001e, 0x0005, 0x0016, 0x0026, 0x2110, 0x080c,
-	0x990d, 0x080c, 0xd7c2, 0x002e, 0x001e, 0x0005, 0x2001, 0x1836,
-	0x2004, 0xd0cc, 0x0005, 0x00c6, 0x00b6, 0x080c, 0x6fa7, 0x1118,
-	0x20a9, 0x0800, 0x0010, 0x20a9, 0x0782, 0x080c, 0x6fa7, 0x1110,
-	0x900e, 0x0010, 0x2009, 0x007e, 0x9180, 0x1000, 0x2004, 0x905d,
-	0x0130, 0x86ff, 0x0110, 0xb800, 0xd0bc, 0x090c, 0x61fb, 0x8108,
-	0x1f04, 0x310c, 0x2061, 0x1800, 0x607b, 0x0000, 0x607c, 0x9084,
-	0x00ff, 0x607e, 0x60af, 0x0000, 0x00be, 0x00ce, 0x0005, 0x2001,
-	0x1875, 0x2004, 0xd0bc, 0x0005, 0x2011, 0x1854, 0x2214, 0xd2ec,
-	0x0005, 0x7eef, 0x7de8, 0x7ce4, 0x80e2, 0x7be1, 0x80e0, 0x80dc,
-	0x80da, 0x7ad9, 0x80d6, 0x80d5, 0x80d4, 0x80d3, 0x80d2, 0x80d1,
-	0x79ce, 0x78cd, 0x80cc, 0x80cb, 0x80ca, 0x80c9, 0x80c7, 0x80c6,
-	0x77c5, 0x76c3, 0x80bc, 0x80ba, 0x75b9, 0x80b6, 0x74b5, 0x73b4,
-	0x72b3, 0x80b2, 0x80b1, 0x80ae, 0x71ad, 0x80ac, 0x70ab, 0x6faa,
-	0x6ea9, 0x80a7, 0x6da6, 0x6ca5, 0x6ba3, 0x6a9f, 0x699e, 0x689d,
-	0x809b, 0x8098, 0x6797, 0x6690, 0x658f, 0x6488, 0x6384, 0x6282,
-	0x8081, 0x8080, 0x617c, 0x607a, 0x8079, 0x5f76, 0x8075, 0x8074,
-	0x8073, 0x8072, 0x8071, 0x806e, 0x5e6d, 0x806c, 0x5d6b, 0x5c6a,
-	0x5b69, 0x8067, 0x5a66, 0x5965, 0x5863, 0x575c, 0x565a, 0x5559,
-	0x8056, 0x8055, 0x5454, 0x5353, 0x5252, 0x5151, 0x504e, 0x4f4d,
-	0x804c, 0x804b, 0x4e4a, 0x4d49, 0x8047, 0x4c46, 0x8045, 0x8043,
-	0x803c, 0x803a, 0x8039, 0x8036, 0x4b35, 0x8034, 0x4a33, 0x4932,
-	0x4831, 0x802e, 0x472d, 0x462c, 0x452b, 0x442a, 0x4329, 0x4227,
-	0x8026, 0x8025, 0x4123, 0x401f, 0x3f1e, 0x3e1d, 0x3d1b, 0x3c18,
-	0x8017, 0x8010, 0x3b0f, 0x3a08, 0x8004, 0x3902, 0x8001, 0x8000,
-	0x8000, 0x3800, 0x3700, 0x3600, 0x8000, 0x3500, 0x8000, 0x8000,
-	0x8000, 0x3400, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
-	0x3300, 0x3200, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
-	0x3100, 0x3000, 0x8000, 0x8000, 0x2f00, 0x8000, 0x2e00, 0x2d00,
-	0x2c00, 0x8000, 0x8000, 0x8000, 0x2b00, 0x8000, 0x2a00, 0x2900,
-	0x2800, 0x8000, 0x2700, 0x2600, 0x2500, 0x2400, 0x2300, 0x2200,
-	0x8000, 0x8000, 0x2100, 0x2000, 0x1f00, 0x1e00, 0x1d00, 0x1c00,
-	0x8000, 0x8000, 0x1b00, 0x1a00, 0x8000, 0x1900, 0x8000, 0x8000,
-	0x8000, 0x8000, 0x8000, 0x8000, 0x1800, 0x8000, 0x1700, 0x1600,
-	0x1500, 0x8000, 0x1400, 0x1300, 0x1200, 0x1100, 0x1000, 0x0f00,
-	0x8000, 0x8000, 0x0e00, 0x0d00, 0x0c00, 0x0b00, 0x0a00, 0x0900,
-	0x8000, 0x8000, 0x0800, 0x0700, 0x8000, 0x0600, 0x8000, 0x8000,
-	0x8000, 0x0500, 0x0400, 0x0300, 0x8000, 0x0200, 0x8000, 0x8000,
-	0x8000, 0x0100, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
-	0x0000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
+	0x0001, 0x0070, 0x080c, 0x5386, 0xd0c4, 0x0138, 0x0030, 0x9006,
+	0x2020, 0x2009, 0x002d, 0x080c, 0xd52a, 0x20a9, 0x0800, 0x9016,
+	0x0026, 0x928e, 0x007e, 0x0904, 0x3089, 0x928e, 0x007f, 0x0904,
+	0x3089, 0x928e, 0x0080, 0x05e8, 0x9288, 0x1000, 0x210c, 0x81ff,
+	0x05c0, 0x8fff, 0x1148, 0x2001, 0x195f, 0x0006, 0x2003, 0x0001,
+	0x04f1, 0x000e, 0x2003, 0x0000, 0x00b6, 0x00c6, 0x2158, 0x2001,
+	0x0001, 0x080c, 0x652c, 0x00ce, 0x00be, 0x2019, 0x0029, 0x080c,
+	0x8571, 0x0076, 0x2039, 0x0000, 0x080c, 0x8469, 0x00b6, 0x00c6,
+	0x0026, 0x2158, 0xba04, 0x9294, 0x00ff, 0x9286, 0x0006, 0x1118,
+	0xb807, 0x0404, 0x0028, 0x2001, 0x0004, 0x8007, 0x9215, 0xba06,
+	0x002e, 0x00ce, 0x00be, 0x0016, 0x2c08, 0x080c, 0xd29b, 0x001e,
+	0x007e, 0x002e, 0x8210, 0x1f04, 0x3040, 0x015e, 0x001e, 0x002e,
+	0x003e, 0x004e, 0x00be, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0046,
+	0x0026, 0x0016, 0x080c, 0x5386, 0xd0c4, 0x0140, 0xd0a4, 0x0130,
+	0x9006, 0x2220, 0x2009, 0x0029, 0x080c, 0xd52a, 0x001e, 0x002e,
+	0x004e, 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x7290, 0x82ff,
+	0x01e8, 0x080c, 0x655a, 0x11d0, 0x2100, 0x080c, 0x2696, 0x81ff,
+	0x01b8, 0x2019, 0x0001, 0x8314, 0x92e0, 0x1c80, 0x2c04, 0xd384,
+	0x0120, 0x9084, 0xff00, 0x8007, 0x0010, 0x9084, 0x00ff, 0x9116,
+	0x0138, 0x9096, 0x00ff, 0x0110, 0x8318, 0x0c68, 0x9085, 0x0001,
+	0x00ce, 0x003e, 0x002e, 0x001e, 0x0005, 0x0016, 0x00c6, 0x0126,
+	0x2091, 0x8000, 0x0036, 0x2019, 0x0029, 0x00a9, 0x003e, 0x9180,
+	0x1000, 0x2004, 0x9065, 0x0158, 0x0016, 0x00c6, 0x2061, 0x1a80,
+	0x001e, 0x6112, 0x080c, 0x2fda, 0x001e, 0x080c, 0x6202, 0x012e,
+	0x00ce, 0x001e, 0x0005, 0x0016, 0x0026, 0x2110, 0x080c, 0x9926,
+	0x080c, 0xd7e2, 0x002e, 0x001e, 0x0005, 0x2001, 0x1836, 0x2004,
+	0xd0cc, 0x0005, 0x00c6, 0x00b6, 0x080c, 0x6fb2, 0x1118, 0x20a9,
+	0x0800, 0x0010, 0x20a9, 0x0782, 0x080c, 0x6fb2, 0x1110, 0x900e,
+	0x0010, 0x2009, 0x007e, 0x9180, 0x1000, 0x2004, 0x905d, 0x0130,
+	0x86ff, 0x0110, 0xb800, 0xd0bc, 0x090c, 0x6202, 0x8108, 0x1f04,
+	0x3113, 0x2061, 0x1800, 0x607b, 0x0000, 0x607c, 0x9084, 0x00ff,
+	0x607e, 0x60af, 0x0000, 0x00be, 0x00ce, 0x0005, 0x2001, 0x1875,
+	0x2004, 0xd0bc, 0x0005, 0x2011, 0x1854, 0x2214, 0xd2ec, 0x0005,
+	0x7eef, 0x7de8, 0x7ce4, 0x80e2, 0x7be1, 0x80e0, 0x80dc, 0x80da,
+	0x7ad9, 0x80d6, 0x80d5, 0x80d4, 0x80d3, 0x80d2, 0x80d1, 0x79ce,
+	0x78cd, 0x80cc, 0x80cb, 0x80ca, 0x80c9, 0x80c7, 0x80c6, 0x77c5,
+	0x76c3, 0x80bc, 0x80ba, 0x75b9, 0x80b6, 0x74b5, 0x73b4, 0x72b3,
+	0x80b2, 0x80b1, 0x80ae, 0x71ad, 0x80ac, 0x70ab, 0x6faa, 0x6ea9,
+	0x80a7, 0x6da6, 0x6ca5, 0x6ba3, 0x6a9f, 0x699e, 0x689d, 0x809b,
+	0x8098, 0x6797, 0x6690, 0x658f, 0x6488, 0x6384, 0x6282, 0x8081,
+	0x8080, 0x617c, 0x607a, 0x8079, 0x5f76, 0x8075, 0x8074, 0x8073,
+	0x8072, 0x8071, 0x806e, 0x5e6d, 0x806c, 0x5d6b, 0x5c6a, 0x5b69,
+	0x8067, 0x5a66, 0x5965, 0x5863, 0x575c, 0x565a, 0x5559, 0x8056,
+	0x8055, 0x5454, 0x5353, 0x5252, 0x5151, 0x504e, 0x4f4d, 0x804c,
+	0x804b, 0x4e4a, 0x4d49, 0x8047, 0x4c46, 0x8045, 0x8043, 0x803c,
+	0x803a, 0x8039, 0x8036, 0x4b35, 0x8034, 0x4a33, 0x4932, 0x4831,
+	0x802e, 0x472d, 0x462c, 0x452b, 0x442a, 0x4329, 0x4227, 0x8026,
+	0x8025, 0x4123, 0x401f, 0x3f1e, 0x3e1d, 0x3d1b, 0x3c18, 0x8017,
+	0x8010, 0x3b0f, 0x3a08, 0x8004, 0x3902, 0x8001, 0x8000, 0x8000,
+	0x3800, 0x3700, 0x3600, 0x8000, 0x3500, 0x8000, 0x8000, 0x8000,
+	0x3400, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3300,
+	0x3200, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3100,
+	0x3000, 0x8000, 0x8000, 0x2f00, 0x8000, 0x2e00, 0x2d00, 0x2c00,
+	0x8000, 0x8000, 0x8000, 0x2b00, 0x8000, 0x2a00, 0x2900, 0x2800,
+	0x8000, 0x2700, 0x2600, 0x2500, 0x2400, 0x2300, 0x2200, 0x8000,
+	0x8000, 0x2100, 0x2000, 0x1f00, 0x1e00, 0x1d00, 0x1c00, 0x8000,
+	0x8000, 0x1b00, 0x1a00, 0x8000, 0x1900, 0x8000, 0x8000, 0x8000,
+	0x8000, 0x8000, 0x8000, 0x1800, 0x8000, 0x1700, 0x1600, 0x1500,
+	0x8000, 0x1400, 0x1300, 0x1200, 0x1100, 0x1000, 0x0f00, 0x8000,
+	0x8000, 0x0e00, 0x0d00, 0x0c00, 0x0b00, 0x0a00, 0x0900, 0x8000,
+	0x8000, 0x0800, 0x0700, 0x8000, 0x0600, 0x8000, 0x8000, 0x8000,
+	0x0500, 0x0400, 0x0300, 0x8000, 0x0200, 0x8000, 0x8000, 0x8000,
+	0x0100, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x0000,
 	0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
-	0x8000, 0x2071, 0x1894, 0x7003, 0x0002, 0x9006, 0x7016, 0x701a,
-	0x704a, 0x704e, 0x700e, 0x7042, 0x7046, 0x703b, 0x18b0, 0x703f,
-	0x18b0, 0x7007, 0x0001, 0x080c, 0x1004, 0x090c, 0x0db4, 0x2900,
-	0x706a, 0xa867, 0x0002, 0xa8ab, 0xdcb0, 0x080c, 0x1004, 0x090c,
-	0x0db4, 0x2900, 0x706e, 0xa867, 0x0002, 0xa8ab, 0xdcb0, 0x0005,
-	0x2071, 0x1894, 0x7004, 0x0002, 0x3260, 0x3261, 0x3274, 0x3288,
-	0x0005, 0x1004, 0x3271, 0x0e04, 0x3271, 0x2079, 0x0000, 0x0126,
-	0x2091, 0x8000, 0x700c, 0x9005, 0x1128, 0x700f, 0x0001, 0x012e,
-	0x0468, 0x0005, 0x012e, 0x0ce8, 0x2079, 0x0000, 0x2061, 0x18ae,
-	0x2c4c, 0xa86c, 0x908e, 0x0100, 0x0128, 0x9086, 0x0200, 0x0904,
-	0x335c, 0x0005, 0x7018, 0x2048, 0x2061, 0x1800, 0x701c, 0x0807,
-	0x7014, 0x2048, 0xa864, 0x9094, 0x00ff, 0x9296, 0x0029, 0x1120,
-	0xaa78, 0xd2fc, 0x0128, 0x0005, 0x9086, 0x0103, 0x0108, 0x0005,
-	0x2079, 0x0000, 0x2061, 0x1800, 0x701c, 0x0807, 0x2061, 0x1800,
-	0x7880, 0x908a, 0x0040, 0x1210, 0x61cc, 0x0042, 0x2100, 0x908a,
-	0x003f, 0x1a04, 0x3359, 0x61cc, 0x0804, 0x32ee, 0x3330, 0x3368,
-	0x3372, 0x3376, 0x3380, 0x3386, 0x338a, 0x339a, 0x339d, 0x33a7,
-	0x33ac, 0x33b1, 0x33bc, 0x33c7, 0x33d6, 0x33e5, 0x33f3, 0x340a,
-	0x3425, 0x3359, 0x34ce, 0x350c, 0x35b2, 0x35c3, 0x35e6, 0x3359,
-	0x3359, 0x3359, 0x361e, 0x363a, 0x3643, 0x3672, 0x3678, 0x3359,
-	0x36be, 0x3359, 0x3359, 0x3359, 0x3359, 0x3359, 0x36c9, 0x36d2,
-	0x36da, 0x36dc, 0x3359, 0x3359, 0x3359, 0x3359, 0x3359, 0x3359,
-	0x3708, 0x3359, 0x3359, 0x3359, 0x3359, 0x3359, 0x3725, 0x3780,
-	0x3359, 0x3359, 0x3359, 0x3359, 0x3359, 0x3359, 0x0002, 0x37aa,
-	0x37ad, 0x380c, 0x3825, 0x3855, 0x3af3, 0x3359, 0x4f58, 0x3359,
-	0x3359, 0x3359, 0x3359, 0x3359, 0x3359, 0x3359, 0x3359, 0x33a7,
-	0x33ac, 0x4014, 0x53a3, 0x402a, 0x4fe7, 0x5038, 0x513b, 0x3359,
-	0x519d, 0x51d9, 0x520a, 0x530e, 0x5237, 0x528e, 0x3359, 0x402e,
-	0x41cf, 0x41e5, 0x420a, 0x426f, 0x42e3, 0x4303, 0x437a, 0x43d6,
-	0x4432, 0x4435, 0x445a, 0x44fa, 0x4560, 0x4568, 0x469a, 0x47fc,
-	0x4830, 0x4a7a, 0x3359, 0x4a98, 0x4b5b, 0x4c31, 0x3359, 0x3359,
-	0x3359, 0x3359, 0x4c97, 0x4cb2, 0x4568, 0x4ef8, 0x714c, 0x0000,
-	0x2021, 0x4000, 0x080c, 0x48ae, 0x0126, 0x2091, 0x8000, 0x0e04,
-	0x333a, 0x0010, 0x012e, 0x0cc0, 0x7c36, 0x9486, 0x4000, 0x0118,
-	0x7833, 0x0011, 0x0010, 0x7833, 0x0010, 0x7c82, 0x7986, 0x7a8a,
-	0x7b8e, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
-	0x1187, 0x7007, 0x0001, 0x2091, 0x5000, 0x700f, 0x0000, 0x012e,
-	0x0005, 0x2021, 0x4001, 0x08b0, 0x2021, 0x4002, 0x0898, 0x2021,
-	0x4003, 0x0880, 0x2021, 0x4005, 0x0868, 0x2021, 0x4006, 0x0850,
-	0x2039, 0x0001, 0x902e, 0x2520, 0x7b88, 0x7a8c, 0x7884, 0x7990,
-	0x0804, 0x48bb, 0x7883, 0x0004, 0x7884, 0x0807, 0x2039, 0x0001,
-	0x902e, 0x2520, 0x7b88, 0x7a8c, 0x7884, 0x7990, 0x0804, 0x48be,
-	0x7984, 0x7888, 0x2114, 0x200a, 0x0804, 0x3330, 0x7984, 0x2114,
-	0x0804, 0x3330, 0x20e1, 0x0000, 0x2099, 0x0021, 0x20e9, 0x0000,
-	0x20a1, 0x0021, 0x20a9, 0x001f, 0x4003, 0x7984, 0x7a88, 0x7b8c,
-	0x0804, 0x3330, 0x7884, 0x2060, 0x04d8, 0x2009, 0x0003, 0x2011,
-	0x0002, 0x2019, 0x001a, 0x789b, 0x0317, 0x0804, 0x3330, 0x2039,
-	0x0001, 0x7d98, 0x7c9c, 0x0800, 0x2039, 0x0001, 0x7d98, 0x7c9c,
-	0x0848, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x3365, 0x2138,
-	0x7d98, 0x7c9c, 0x0804, 0x336c, 0x79a0, 0x9182, 0x0040, 0x0210,
-	0x0804, 0x3365, 0x2138, 0x7d98, 0x7c9c, 0x0804, 0x337a, 0x79a0,
-	0x9182, 0x0040, 0x0210, 0x0804, 0x3365, 0x21e8, 0x7984, 0x7888,
-	0x20a9, 0x0001, 0x21a0, 0x4004, 0x0804, 0x3330, 0x2061, 0x0800,
-	0xe10c, 0x9006, 0x2c15, 0x9200, 0x8c60, 0x8109, 0x1dd8, 0x2010,
-	0x9005, 0x0904, 0x3330, 0x0804, 0x335f, 0x79a0, 0x9182, 0x0040,
-	0x0210, 0x0804, 0x3365, 0x21e0, 0x20a9, 0x0001, 0x7984, 0x2198,
-	0x4012, 0x0804, 0x3330, 0x2069, 0x1853, 0x7884, 0x7990, 0x911a,
-	0x1a04, 0x3365, 0x8019, 0x0904, 0x3365, 0x684a, 0x6942, 0x788c,
-	0x6852, 0x7888, 0x6856, 0x9006, 0x685a, 0x685e, 0x080c, 0x72bc,
-	0x0804, 0x3330, 0x2069, 0x1853, 0x7884, 0x7994, 0x911a, 0x1a04,
-	0x3365, 0x8019, 0x0904, 0x3365, 0x684e, 0x6946, 0x788c, 0x6862,
-	0x7888, 0x6866, 0x9006, 0x686a, 0x686e, 0x0126, 0x2091, 0x8000,
-	0x080c, 0x665d, 0x012e, 0x0804, 0x3330, 0x902e, 0x2520, 0x81ff,
-	0x0120, 0x2009, 0x0001, 0x0804, 0x3362, 0x7984, 0x7b88, 0x7a8c,
-	0x20a9, 0x0005, 0x20e9, 0x0001, 0x20a1, 0x189c, 0x4101, 0x080c,
-	0x4872, 0x1120, 0x2009, 0x0002, 0x0804, 0x3362, 0x2009, 0x0020,
-	0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, 0x48bb, 0x701f, 0x3449,
-	0x0005, 0xa864, 0x2008, 0x9084, 0x00ff, 0x9096, 0x0011, 0x0168,
-	0x9096, 0x0019, 0x0150, 0x9096, 0x0015, 0x0138, 0x9096, 0x0048,
-	0x0120, 0x9096, 0x0029, 0x1904, 0x3362, 0x810f, 0x918c, 0x00ff,
-	0x0904, 0x3362, 0x7112, 0x7010, 0x8001, 0x0560, 0x7012, 0x080c,
-	0x4872, 0x1120, 0x2009, 0x0002, 0x0804, 0x3362, 0x2009, 0x0020,
-	0x7068, 0x2040, 0xa28c, 0xa390, 0xa494, 0xa598, 0x9290, 0x0040,
-	0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9, 0x0000, 0xa85c, 0x9080,
-	0x0019, 0xaf60, 0x080c, 0x48bb, 0x701f, 0x3487, 0x0005, 0xa864,
-	0x9084, 0x00ff, 0x9096, 0x0002, 0x0120, 0x9096, 0x000a, 0x1904,
-	0x3362, 0x0888, 0x7014, 0x2048, 0xa868, 0xc0fd, 0xa86a, 0xa864,
-	0x9084, 0x00ff, 0x9096, 0x0029, 0x1160, 0xc2fd, 0xaa7a, 0x080c,
-	0x5dd6, 0x0150, 0x0126, 0x2091, 0x8000, 0xa87a, 0xa982, 0x012e,
-	0x0050, 0x080c, 0x60ed, 0x1128, 0x7007, 0x0003, 0x701f, 0x34b3,
-	0x0005, 0x080c, 0x6abf, 0x0126, 0x2091, 0x8000, 0x20a9, 0x0005,
-	0x20e1, 0x0001, 0x2099, 0x189c, 0x400a, 0x2100, 0x9210, 0x9399,
+	0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
+	0x2071, 0x1894, 0x7003, 0x0002, 0x9006, 0x7016, 0x701a, 0x704a,
+	0x704e, 0x700e, 0x7042, 0x7046, 0x703b, 0x18b0, 0x703f, 0x18b0,
+	0x7007, 0x0001, 0x080c, 0x1004, 0x090c, 0x0db4, 0x2900, 0x706a,
+	0xa867, 0x0002, 0xa8ab, 0xdcb0, 0x080c, 0x1004, 0x090c, 0x0db4,
+	0x2900, 0x706e, 0xa867, 0x0002, 0xa8ab, 0xdcb0, 0x0005, 0x2071,
+	0x1894, 0x7004, 0x0002, 0x3267, 0x3268, 0x327b, 0x328f, 0x0005,
+	0x1004, 0x3278, 0x0e04, 0x3278, 0x2079, 0x0000, 0x0126, 0x2091,
+	0x8000, 0x700c, 0x9005, 0x1128, 0x700f, 0x0001, 0x012e, 0x0468,
+	0x0005, 0x012e, 0x0ce8, 0x2079, 0x0000, 0x2061, 0x18ae, 0x2c4c,
+	0xa86c, 0x908e, 0x0100, 0x0128, 0x9086, 0x0200, 0x0904, 0x3363,
+	0x0005, 0x7018, 0x2048, 0x2061, 0x1800, 0x701c, 0x0807, 0x7014,
+	0x2048, 0xa864, 0x9094, 0x00ff, 0x9296, 0x0029, 0x1120, 0xaa78,
+	0xd2fc, 0x0128, 0x0005, 0x9086, 0x0103, 0x0108, 0x0005, 0x2079,
+	0x0000, 0x2061, 0x1800, 0x701c, 0x0807, 0x2061, 0x1800, 0x7880,
+	0x908a, 0x0040, 0x1210, 0x61cc, 0x0042, 0x2100, 0x908a, 0x003f,
+	0x1a04, 0x3360, 0x61cc, 0x0804, 0x32f5, 0x3337, 0x336f, 0x3379,
+	0x337d, 0x3387, 0x338d, 0x3391, 0x33a1, 0x33a4, 0x33ae, 0x33b3,
+	0x33b8, 0x33c3, 0x33ce, 0x33dd, 0x33ec, 0x33fa, 0x3411, 0x342c,
+	0x3360, 0x34d5, 0x3513, 0x35b9, 0x35ca, 0x35ed, 0x3360, 0x3360,
+	0x3360, 0x3625, 0x3641, 0x364a, 0x3679, 0x367f, 0x3360, 0x36c5,
+	0x3360, 0x3360, 0x3360, 0x3360, 0x3360, 0x36d0, 0x36d9, 0x36e1,
+	0x36e3, 0x3360, 0x3360, 0x3360, 0x3360, 0x3360, 0x3360, 0x370f,
+	0x3360, 0x3360, 0x3360, 0x3360, 0x3360, 0x372c, 0x3787, 0x3360,
+	0x3360, 0x3360, 0x3360, 0x3360, 0x3360, 0x0002, 0x37b1, 0x37b4,
+	0x3813, 0x382c, 0x385c, 0x3afa, 0x3360, 0x4f5f, 0x3360, 0x3360,
+	0x3360, 0x3360, 0x3360, 0x3360, 0x3360, 0x3360, 0x33ae, 0x33b3,
+	0x401b, 0x53aa, 0x4031, 0x4fee, 0x503f, 0x5142, 0x3360, 0x51a4,
+	0x51e0, 0x5211, 0x5315, 0x523e, 0x5295, 0x3360, 0x4035, 0x41d6,
+	0x41ec, 0x4211, 0x4276, 0x42ea, 0x430a, 0x4381, 0x43dd, 0x4439,
+	0x443c, 0x4461, 0x4501, 0x4567, 0x456f, 0x46a1, 0x4803, 0x4837,
+	0x4a81, 0x3360, 0x4a9f, 0x4b62, 0x4c38, 0x3360, 0x3360, 0x3360,
+	0x3360, 0x4c9e, 0x4cb9, 0x456f, 0x4eff, 0x714c, 0x0000, 0x2021,
+	0x4000, 0x080c, 0x48b5, 0x0126, 0x2091, 0x8000, 0x0e04, 0x3341,
+	0x0010, 0x012e, 0x0cc0, 0x7c36, 0x9486, 0x4000, 0x0118, 0x7833,
+	0x0011, 0x0010, 0x7833, 0x0010, 0x7c82, 0x7986, 0x7a8a, 0x7b8e,
+	0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1187,
+	0x7007, 0x0001, 0x2091, 0x5000, 0x700f, 0x0000, 0x012e, 0x0005,
+	0x2021, 0x4001, 0x08b0, 0x2021, 0x4002, 0x0898, 0x2021, 0x4003,
+	0x0880, 0x2021, 0x4005, 0x0868, 0x2021, 0x4006, 0x0850, 0x2039,
+	0x0001, 0x902e, 0x2520, 0x7b88, 0x7a8c, 0x7884, 0x7990, 0x0804,
+	0x48c2, 0x7883, 0x0004, 0x7884, 0x0807, 0x2039, 0x0001, 0x902e,
+	0x2520, 0x7b88, 0x7a8c, 0x7884, 0x7990, 0x0804, 0x48c5, 0x7984,
+	0x7888, 0x2114, 0x200a, 0x0804, 0x3337, 0x7984, 0x2114, 0x0804,
+	0x3337, 0x20e1, 0x0000, 0x2099, 0x0021, 0x20e9, 0x0000, 0x20a1,
+	0x0021, 0x20a9, 0x001f, 0x4003, 0x7984, 0x7a88, 0x7b8c, 0x0804,
+	0x3337, 0x7884, 0x2060, 0x04d8, 0x2009, 0x0003, 0x2011, 0x0002,
+	0x2019, 0x001c, 0x789b, 0x0317, 0x0804, 0x3337, 0x2039, 0x0001,
+	0x7d98, 0x7c9c, 0x0800, 0x2039, 0x0001, 0x7d98, 0x7c9c, 0x0848,
+	0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x336c, 0x2138, 0x7d98,
+	0x7c9c, 0x0804, 0x3373, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804,
+	0x336c, 0x2138, 0x7d98, 0x7c9c, 0x0804, 0x3381, 0x79a0, 0x9182,
+	0x0040, 0x0210, 0x0804, 0x336c, 0x21e8, 0x7984, 0x7888, 0x20a9,
+	0x0001, 0x21a0, 0x4004, 0x0804, 0x3337, 0x2061, 0x0800, 0xe10c,
+	0x9006, 0x2c15, 0x9200, 0x8c60, 0x8109, 0x1dd8, 0x2010, 0x9005,
+	0x0904, 0x3337, 0x0804, 0x3366, 0x79a0, 0x9182, 0x0040, 0x0210,
+	0x0804, 0x336c, 0x21e0, 0x20a9, 0x0001, 0x7984, 0x2198, 0x4012,
+	0x0804, 0x3337, 0x2069, 0x1853, 0x7884, 0x7990, 0x911a, 0x1a04,
+	0x336c, 0x8019, 0x0904, 0x336c, 0x684a, 0x6942, 0x788c, 0x6852,
+	0x7888, 0x6856, 0x9006, 0x685a, 0x685e, 0x080c, 0x72c7, 0x0804,
+	0x3337, 0x2069, 0x1853, 0x7884, 0x7994, 0x911a, 0x1a04, 0x336c,
+	0x8019, 0x0904, 0x336c, 0x684e, 0x6946, 0x788c, 0x6862, 0x7888,
+	0x6866, 0x9006, 0x686a, 0x686e, 0x0126, 0x2091, 0x8000, 0x080c,
+	0x6664, 0x012e, 0x0804, 0x3337, 0x902e, 0x2520, 0x81ff, 0x0120,
+	0x2009, 0x0001, 0x0804, 0x3369, 0x7984, 0x7b88, 0x7a8c, 0x20a9,
+	0x0005, 0x20e9, 0x0001, 0x20a1, 0x189c, 0x4101, 0x080c, 0x4879,
+	0x1120, 0x2009, 0x0002, 0x0804, 0x3369, 0x2009, 0x0020, 0xa85c,
+	0x9080, 0x0019, 0xaf60, 0x080c, 0x48c2, 0x701f, 0x3450, 0x0005,
+	0xa864, 0x2008, 0x9084, 0x00ff, 0x9096, 0x0011, 0x0168, 0x9096,
+	0x0019, 0x0150, 0x9096, 0x0015, 0x0138, 0x9096, 0x0048, 0x0120,
+	0x9096, 0x0029, 0x1904, 0x3369, 0x810f, 0x918c, 0x00ff, 0x0904,
+	0x3369, 0x7112, 0x7010, 0x8001, 0x0560, 0x7012, 0x080c, 0x4879,
+	0x1120, 0x2009, 0x0002, 0x0804, 0x3369, 0x2009, 0x0020, 0x7068,
+	0x2040, 0xa28c, 0xa390, 0xa494, 0xa598, 0x9290, 0x0040, 0x9399,
 	0x0000, 0x94a1, 0x0000, 0x95a9, 0x0000, 0xa85c, 0x9080, 0x0019,
-	0x2009, 0x0020, 0x012e, 0xaf60, 0x0804, 0x48be, 0x2091, 0x8000,
-	0x7837, 0x4000, 0x7833, 0x0010, 0x7883, 0x4000, 0x7887, 0x4953,
-	0x788b, 0x5020, 0x788f, 0x2020, 0x2009, 0x017f, 0x2104, 0x7892,
-	0x3f00, 0x7896, 0x2061, 0x0100, 0x6200, 0x2061, 0x0200, 0x603c,
-	0x8007, 0x9205, 0x789a, 0x2009, 0x04fd, 0x2104, 0x789e, 0x2091,
-	0x5000, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x0180,
-	0x2001, 0x19ea, 0x2004, 0x9005, 0x0128, 0x2001, 0x008b, 0x2004,
-	0xd0fc, 0x0dd8, 0x2001, 0x008a, 0x2003, 0x0002, 0x2003, 0x1001,
-	0x2071, 0x0080, 0x0804, 0x0427, 0x81ff, 0x1904, 0x3362, 0x7984,
-	0x080c, 0x6237, 0x1904, 0x3365, 0x7e98, 0x9684, 0x3fff, 0x9082,
-	0x4000, 0x1a04, 0x3365, 0x7c88, 0x7d8c, 0x080c, 0x639a, 0x080c,
-	0x6369, 0x0000, 0x1518, 0x2061, 0x1cd0, 0x0126, 0x2091, 0x8000,
-	0x6000, 0x9086, 0x0000, 0x0148, 0x6014, 0x904d, 0x0130, 0xa86c,
-	0x9406, 0x1118, 0xa870, 0x9506, 0x0150, 0x012e, 0x9ce0, 0x0018,
-	0x2001, 0x1819, 0x2004, 0x9c02, 0x1a04, 0x3362, 0x0c30, 0x080c,
-	0xb731, 0x012e, 0x0904, 0x3362, 0x0804, 0x3330, 0x900e, 0x2001,
-	0x0005, 0x080c, 0x6abf, 0x0126, 0x2091, 0x8000, 0x080c, 0xbdf3,
-	0x080c, 0x6885, 0x012e, 0x0804, 0x3330, 0x00a6, 0x2950, 0xb198,
-	0x080c, 0x6237, 0x1904, 0x359f, 0xb6a4, 0x9684, 0x3fff, 0x9082,
-	0x4000, 0x16e8, 0xb49c, 0xb5a0, 0x080c, 0x639a, 0x080c, 0x6369,
-	0x1520, 0x2061, 0x1cd0, 0x0126, 0x2091, 0x8000, 0x6000, 0x9086,
-	0x0000, 0x0148, 0x6014, 0x904d, 0x0130, 0xa86c, 0x9406, 0x1118,
-	0xa870, 0x9506, 0x0158, 0x012e, 0x9ce0, 0x0018, 0x2001, 0x1819,
-	0x2004, 0x9c02, 0x2009, 0x000d, 0x12b0, 0x0c28, 0x080c, 0xb731,
-	0x012e, 0x2009, 0x0003, 0x0178, 0x00e0, 0x900e, 0x2001, 0x0005,
-	0x080c, 0x6abf, 0x0126, 0x2091, 0x8000, 0x080c, 0xbdf3, 0x080c,
-	0x6878, 0x012e, 0x0070, 0xb097, 0x4005, 0xb19a, 0x0010, 0xb097,
-	0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x2a48, 0x00ae,
-	0x0005, 0xb097, 0x4000, 0x9006, 0x918d, 0x0001, 0x2008, 0x2a48,
-	0x00ae, 0x0005, 0x81ff, 0x1904, 0x3362, 0x080c, 0x4889, 0x0904,
-	0x3365, 0x080c, 0x62fe, 0x0904, 0x3362, 0x080c, 0x63a0, 0x0904,
-	0x3362, 0x0804, 0x42fa, 0x81ff, 0x1904, 0x3362, 0x080c, 0x48a5,
-	0x0904, 0x3365, 0x080c, 0x642e, 0x0904, 0x3362, 0x2019, 0x0005,
-	0x79a8, 0x080c, 0x63bb, 0x0904, 0x3362, 0x7888, 0x908a, 0x1000,
-	0x1a04, 0x3365, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, 0x801e,
-	0x7984, 0xd184, 0x1904, 0x3330, 0x0804, 0x42fa, 0x0126, 0x2091,
-	0x8000, 0x81ff, 0x0118, 0x2009, 0x0001, 0x0450, 0x2029, 0x07ff,
-	0x6458, 0x2400, 0x9506, 0x01f8, 0x2508, 0x080c, 0x6237, 0x11d8,
-	0x080c, 0x642e, 0x1128, 0x2009, 0x0002, 0x62bc, 0x2518, 0x00c0,
-	0x2019, 0x0004, 0x900e, 0x080c, 0x63bb, 0x1118, 0x2009, 0x0006,
-	0x0078, 0x7884, 0x908a, 0x1000, 0x1270, 0x8003, 0x800b, 0x810b,
-	0x9108, 0x080c, 0x801e, 0x8529, 0x1ae0, 0x012e, 0x0804, 0x3330,
-	0x012e, 0x0804, 0x3362, 0x012e, 0x0804, 0x3365, 0x080c, 0x4889,
-	0x0904, 0x3365, 0x080c, 0x62fe, 0x0904, 0x3362, 0xbaa0, 0x2019,
-	0x0005, 0x00c6, 0x9066, 0x080c, 0x8549, 0x0076, 0x903e, 0x080c,
-	0x8441, 0x900e, 0x080c, 0xd27b, 0x007e, 0x00ce, 0x080c, 0x639a,
-	0x0804, 0x3330, 0x080c, 0x4889, 0x0904, 0x3365, 0x080c, 0x639a,
-	0x2208, 0x0804, 0x3330, 0x0156, 0x00d6, 0x00e6, 0x2069, 0x1906,
-	0x6810, 0x6914, 0x910a, 0x1208, 0x900e, 0x6816, 0x9016, 0x901e,
-	0x20a9, 0x007e, 0x2069, 0x1000, 0x2d04, 0x905d, 0x0118, 0xb84c,
-	0x0059, 0x9210, 0x8d68, 0x1f04, 0x3654, 0x2300, 0x9218, 0x00ee,
-	0x00de, 0x015e, 0x0804, 0x3330, 0x00f6, 0x0016, 0x907d, 0x0138,
-	0x9006, 0x8000, 0x2f0c, 0x81ff, 0x0110, 0x2178, 0x0cd0, 0x001e,
-	0x00fe, 0x0005, 0x2069, 0x1906, 0x6910, 0x62b8, 0x0804, 0x3330,
-	0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x3362, 0x0126, 0x2091,
-	0x8000, 0x080c, 0x5393, 0x0128, 0x2009, 0x0007, 0x012e, 0x0804,
-	0x3362, 0x012e, 0x6158, 0x9190, 0x3131, 0x2215, 0x9294, 0x00ff,
-	0x6378, 0x83ff, 0x0108, 0x627c, 0x67d8, 0x97c4, 0x000a, 0x98c6,
-	0x000a, 0x1118, 0x2031, 0x0001, 0x00e8, 0x97c4, 0x0022, 0x98c6,
-	0x0022, 0x1118, 0x2031, 0x0003, 0x00a8, 0x97c4, 0x0012, 0x98c6,
-	0x0012, 0x1118, 0x2031, 0x0002, 0x0068, 0x080c, 0x6fa7, 0x1118,
-	0x2031, 0x0004, 0x0038, 0xd79c, 0x0120, 0x2009, 0x0005, 0x0804,
-	0x3362, 0x9036, 0x7e9a, 0x7f9e, 0x0804, 0x3330, 0x6148, 0x624c,
-	0x2019, 0x1957, 0x231c, 0x2001, 0x1958, 0x2004, 0x789a, 0x0804,
-	0x3330, 0x0126, 0x2091, 0x8000, 0x6138, 0x623c, 0x6340, 0x012e,
-	0x0804, 0x3330, 0x080c, 0x48a5, 0x0904, 0x3365, 0xba44, 0xbb38,
-	0x0804, 0x3330, 0x080c, 0x0db4, 0x080c, 0x48a5, 0x2110, 0x0904,
-	0x3365, 0xb804, 0x908c, 0x00ff, 0x918e, 0x0006, 0x0140, 0x9084,
-	0xff00, 0x9086, 0x0600, 0x2009, 0x0009, 0x1904, 0x3362, 0x0126,
-	0x2091, 0x8000, 0x2019, 0x0005, 0x00c6, 0x9066, 0x080c, 0x990d,
-	0x080c, 0x8549, 0x0076, 0x903e, 0x080c, 0x8441, 0x900e, 0x080c,
-	0xd27b, 0x007e, 0x00ce, 0xb807, 0x0407, 0x012e, 0x0804, 0x3330,
-	0x6148, 0x624c, 0x7884, 0x604a, 0x7b88, 0x634e, 0x2069, 0x1853,
-	0x831f, 0x9305, 0x6816, 0x788c, 0x2069, 0x1957, 0x2d1c, 0x206a,
-	0x7e98, 0x9682, 0x0014, 0x1210, 0x2031, 0x07d0, 0x2069, 0x1958,
-	0x2d04, 0x266a, 0x789a, 0x0804, 0x3330, 0x0126, 0x2091, 0x8000,
-	0x6138, 0x7884, 0x603a, 0x910e, 0xd1b4, 0x190c, 0x0e9b, 0xd0c4,
-	0x01a8, 0x00d6, 0x78a8, 0x2009, 0x196e, 0x200a, 0x78ac, 0x2011,
-	0x196f, 0x2012, 0x2069, 0x0100, 0x6838, 0x9086, 0x0007, 0x1118,
-	0x2214, 0x6a5a, 0x0010, 0x210c, 0x695a, 0x00de, 0x7888, 0x603e,
-	0x2011, 0x0114, 0x220c, 0x7888, 0xd08c, 0x0118, 0x918d, 0x0080,
-	0x0010, 0x918c, 0xff7f, 0x2112, 0x6140, 0x788c, 0x6042, 0x910e,
-	0xd1e4, 0x190c, 0x0eb1, 0x6040, 0xd0cc, 0x0120, 0x78b0, 0x2011,
-	0x0114, 0x2012, 0x012e, 0x0804, 0x3330, 0x00f6, 0x2079, 0x1800,
-	0x7a38, 0xa898, 0x9084, 0xfebf, 0x9215, 0xa89c, 0x9084, 0xfebf,
-	0x8002, 0x9214, 0x7838, 0x9084, 0x0140, 0x9215, 0x7a3a, 0xa897,
-	0x4000, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x00fe, 0x0005,
-	0x7898, 0x9005, 0x01a8, 0x7888, 0x9025, 0x0904, 0x3365, 0x788c,
-	0x902d, 0x0904, 0x3365, 0x900e, 0x080c, 0x6237, 0x1120, 0xba44,
-	0xbb38, 0xbc46, 0xbd3a, 0x9186, 0x07ff, 0x0190, 0x8108, 0x0ca0,
-	0x080c, 0x48a5, 0x0904, 0x3365, 0x7888, 0x900d, 0x0904, 0x3365,
-	0x788c, 0x9005, 0x0904, 0x3365, 0xba44, 0xb946, 0xbb38, 0xb83a,
-	0x0804, 0x3330, 0x2011, 0xbc09, 0x0010, 0x2011, 0xbc05, 0x080c,
-	0x5393, 0x1904, 0x3362, 0x00c6, 0x2061, 0x0100, 0x7984, 0x9186,
-	0x00ff, 0x1130, 0x2001, 0x1817, 0x2004, 0x9085, 0xff00, 0x0088,
-	0x9182, 0x007f, 0x16e0, 0x9188, 0x3131, 0x210d, 0x918c, 0x00ff,
-	0x2001, 0x1817, 0x2004, 0x0026, 0x9116, 0x002e, 0x0580, 0x810f,
-	0x9105, 0x0126, 0x2091, 0x8000, 0x0006, 0x080c, 0x9dc3, 0x000e,
-	0x0510, 0x602e, 0x620a, 0x7984, 0x00b6, 0x080c, 0x61dd, 0x2b08,
-	0x00be, 0x1500, 0x6112, 0x6023, 0x0001, 0x080c, 0x4872, 0x01d0,
-	0x9006, 0xa866, 0x7007, 0x0003, 0xa832, 0xa868, 0xc0fd, 0xa86a,
-	0x701f, 0x3805, 0x2900, 0x6016, 0x2009, 0x0032, 0x080c, 0x9e93,
-	0x012e, 0x00ce, 0x0005, 0x012e, 0x00ce, 0x0804, 0x3362, 0x00ce,
-	0x0804, 0x3365, 0x080c, 0x9e19, 0x0cb0, 0xa830, 0x9086, 0x0100,
-	0x0904, 0x3362, 0x0804, 0x3330, 0x2061, 0x1a41, 0x0126, 0x2091,
-	0x8000, 0x6000, 0xd084, 0x0170, 0x6104, 0x6208, 0x2061, 0x1800,
-	0x6350, 0x6070, 0x789a, 0x60bc, 0x789e, 0x60b8, 0x78aa, 0x012e,
-	0x0804, 0x3330, 0x900e, 0x2110, 0x0c88, 0x81ff, 0x1904, 0x3362,
-	0x080c, 0x6fa7, 0x0904, 0x3362, 0x0126, 0x2091, 0x8000, 0x6250,
-	0x6070, 0x9202, 0x0248, 0x9085, 0x0001, 0x080c, 0x26cc, 0x080c,
-	0x55ad, 0x012e, 0x0804, 0x3330, 0x012e, 0x0804, 0x3365, 0x0006,
-	0x0016, 0x00c6, 0x00e6, 0x2001, 0x197a, 0x2070, 0x2061, 0x1853,
-	0x6008, 0x2072, 0x900e, 0x2011, 0x1400, 0x080c, 0x8248, 0x7206,
-	0x00ee, 0x00ce, 0x001e, 0x000e, 0x0005, 0x0126, 0x2091, 0x8000,
-	0x81ff, 0x0128, 0x012e, 0x2021, 0x400b, 0x0804, 0x3332, 0x7884,
-	0xd0fc, 0x0148, 0x2001, 0x002a, 0x2004, 0x9082, 0x00e1, 0x0288,
-	0x012e, 0x0804, 0x3365, 0x2001, 0x002a, 0x2004, 0x2069, 0x1853,
-	0x6908, 0x9102, 0x1230, 0x012e, 0x0804, 0x3365, 0x012e, 0x0804,
-	0x3362, 0x080c, 0x9d98, 0x0dd0, 0x7884, 0xd0fc, 0x0904, 0x38d0,
-	0x00c6, 0x080c, 0x4872, 0x00ce, 0x0d88, 0xa867, 0x0000, 0x7884,
-	0xa80a, 0x7898, 0xa80e, 0x789c, 0xa812, 0x2001, 0x002e, 0x2004,
-	0xa81a, 0x2001, 0x002f, 0x2004, 0xa81e, 0x2001, 0x0030, 0x2004,
-	0xa822, 0x2001, 0x0031, 0x2004, 0xa826, 0x2001, 0x0034, 0x2004,
-	0xa82a, 0x2001, 0x0035, 0x2004, 0xa82e, 0x2001, 0x002a, 0x2004,
-	0x9080, 0x0003, 0x9084, 0x00fc, 0x8004, 0xa816, 0x080c, 0x3a56,
-	0x0928, 0x7014, 0x2048, 0xad2c, 0xac28, 0xab1c, 0xaa18, 0xa930,
-	0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021, 0x0000, 0x8906,
+	0xaf60, 0x080c, 0x48c2, 0x701f, 0x348e, 0x0005, 0xa864, 0x9084,
+	0x00ff, 0x9096, 0x0002, 0x0120, 0x9096, 0x000a, 0x1904, 0x3369,
+	0x0888, 0x7014, 0x2048, 0xa868, 0xc0fd, 0xa86a, 0xa864, 0x9084,
+	0x00ff, 0x9096, 0x0029, 0x1160, 0xc2fd, 0xaa7a, 0x080c, 0x5ddd,
+	0x0150, 0x0126, 0x2091, 0x8000, 0xa87a, 0xa982, 0x012e, 0x0050,
+	0x080c, 0x60f4, 0x1128, 0x7007, 0x0003, 0x701f, 0x34ba, 0x0005,
+	0x080c, 0x6ac6, 0x0126, 0x2091, 0x8000, 0x20a9, 0x0005, 0x20e1,
+	0x0001, 0x2099, 0x189c, 0x400a, 0x2100, 0x9210, 0x9399, 0x0000,
+	0x94a1, 0x0000, 0x95a9, 0x0000, 0xa85c, 0x9080, 0x0019, 0x2009,
+	0x0020, 0x012e, 0xaf60, 0x0804, 0x48c5, 0x2091, 0x8000, 0x7837,
+	0x4000, 0x7833, 0x0010, 0x7883, 0x4000, 0x7887, 0x4953, 0x788b,
+	0x5020, 0x788f, 0x2020, 0x2009, 0x017f, 0x2104, 0x7892, 0x3f00,
+	0x7896, 0x2061, 0x0100, 0x6200, 0x2061, 0x0200, 0x603c, 0x8007,
+	0x9205, 0x789a, 0x2009, 0x04fd, 0x2104, 0x789e, 0x2091, 0x5000,
+	0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x0180, 0x2001,
+	0x19ea, 0x2004, 0x9005, 0x0128, 0x2001, 0x008b, 0x2004, 0xd0fc,
+	0x0dd8, 0x2001, 0x008a, 0x2003, 0x0002, 0x2003, 0x1001, 0x2071,
+	0x0080, 0x0804, 0x0427, 0x81ff, 0x1904, 0x3369, 0x7984, 0x080c,
+	0x623e, 0x1904, 0x336c, 0x7e98, 0x9684, 0x3fff, 0x9082, 0x4000,
+	0x1a04, 0x336c, 0x7c88, 0x7d8c, 0x080c, 0x63a1, 0x080c, 0x6370,
+	0x0000, 0x1518, 0x2061, 0x1cd0, 0x0126, 0x2091, 0x8000, 0x6000,
+	0x9086, 0x0000, 0x0148, 0x6014, 0x904d, 0x0130, 0xa86c, 0x9406,
+	0x1118, 0xa870, 0x9506, 0x0150, 0x012e, 0x9ce0, 0x0018, 0x2001,
+	0x1819, 0x2004, 0x9c02, 0x1a04, 0x3369, 0x0c30, 0x080c, 0xb74a,
+	0x012e, 0x0904, 0x3369, 0x0804, 0x3337, 0x900e, 0x2001, 0x0005,
+	0x080c, 0x6ac6, 0x0126, 0x2091, 0x8000, 0x080c, 0xbe0c, 0x080c,
+	0x688c, 0x012e, 0x0804, 0x3337, 0x00a6, 0x2950, 0xb198, 0x080c,
+	0x623e, 0x1904, 0x35a6, 0xb6a4, 0x9684, 0x3fff, 0x9082, 0x4000,
+	0x16e8, 0xb49c, 0xb5a0, 0x080c, 0x63a1, 0x080c, 0x6370, 0x1520,
+	0x2061, 0x1cd0, 0x0126, 0x2091, 0x8000, 0x6000, 0x9086, 0x0000,
+	0x0148, 0x6014, 0x904d, 0x0130, 0xa86c, 0x9406, 0x1118, 0xa870,
+	0x9506, 0x0158, 0x012e, 0x9ce0, 0x0018, 0x2001, 0x1819, 0x2004,
+	0x9c02, 0x2009, 0x000d, 0x12b0, 0x0c28, 0x080c, 0xb74a, 0x012e,
+	0x2009, 0x0003, 0x0178, 0x00e0, 0x900e, 0x2001, 0x0005, 0x080c,
+	0x6ac6, 0x0126, 0x2091, 0x8000, 0x080c, 0xbe0c, 0x080c, 0x687f,
+	0x012e, 0x0070, 0xb097, 0x4005, 0xb19a, 0x0010, 0xb097, 0x4006,
+	0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x2a48, 0x00ae, 0x0005,
+	0xb097, 0x4000, 0x9006, 0x918d, 0x0001, 0x2008, 0x2a48, 0x00ae,
+	0x0005, 0x81ff, 0x1904, 0x3369, 0x080c, 0x4890, 0x0904, 0x336c,
+	0x080c, 0x6305, 0x0904, 0x3369, 0x080c, 0x63a7, 0x0904, 0x3369,
+	0x0804, 0x4301, 0x81ff, 0x1904, 0x3369, 0x080c, 0x48ac, 0x0904,
+	0x336c, 0x080c, 0x6435, 0x0904, 0x3369, 0x2019, 0x0005, 0x79a8,
+	0x080c, 0x63c2, 0x0904, 0x3369, 0x7888, 0x908a, 0x1000, 0x1a04,
+	0x336c, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, 0x8046, 0x7984,
+	0xd184, 0x1904, 0x3337, 0x0804, 0x4301, 0x0126, 0x2091, 0x8000,
+	0x81ff, 0x0118, 0x2009, 0x0001, 0x0450, 0x2029, 0x07ff, 0x6458,
+	0x2400, 0x9506, 0x01f8, 0x2508, 0x080c, 0x623e, 0x11d8, 0x080c,
+	0x6435, 0x1128, 0x2009, 0x0002, 0x62bc, 0x2518, 0x00c0, 0x2019,
+	0x0004, 0x900e, 0x080c, 0x63c2, 0x1118, 0x2009, 0x0006, 0x0078,
+	0x7884, 0x908a, 0x1000, 0x1270, 0x8003, 0x800b, 0x810b, 0x9108,
+	0x080c, 0x8046, 0x8529, 0x1ae0, 0x012e, 0x0804, 0x3337, 0x012e,
+	0x0804, 0x3369, 0x012e, 0x0804, 0x336c, 0x080c, 0x4890, 0x0904,
+	0x336c, 0x080c, 0x6305, 0x0904, 0x3369, 0xbaa0, 0x2019, 0x0005,
+	0x00c6, 0x9066, 0x080c, 0x8571, 0x0076, 0x903e, 0x080c, 0x8469,
+	0x900e, 0x080c, 0xd29b, 0x007e, 0x00ce, 0x080c, 0x63a1, 0x0804,
+	0x3337, 0x080c, 0x4890, 0x0904, 0x336c, 0x080c, 0x63a1, 0x2208,
+	0x0804, 0x3337, 0x0156, 0x00d6, 0x00e6, 0x2069, 0x1906, 0x6810,
+	0x6914, 0x910a, 0x1208, 0x900e, 0x6816, 0x9016, 0x901e, 0x20a9,
+	0x007e, 0x2069, 0x1000, 0x2d04, 0x905d, 0x0118, 0xb84c, 0x0059,
+	0x9210, 0x8d68, 0x1f04, 0x365b, 0x2300, 0x9218, 0x00ee, 0x00de,
+	0x015e, 0x0804, 0x3337, 0x00f6, 0x0016, 0x907d, 0x0138, 0x9006,
+	0x8000, 0x2f0c, 0x81ff, 0x0110, 0x2178, 0x0cd0, 0x001e, 0x00fe,
+	0x0005, 0x2069, 0x1906, 0x6910, 0x62b8, 0x0804, 0x3337, 0x81ff,
+	0x0120, 0x2009, 0x0001, 0x0804, 0x3369, 0x0126, 0x2091, 0x8000,
+	0x080c, 0x539a, 0x0128, 0x2009, 0x0007, 0x012e, 0x0804, 0x3369,
+	0x012e, 0x6158, 0x9190, 0x3138, 0x2215, 0x9294, 0x00ff, 0x6378,
+	0x83ff, 0x0108, 0x627c, 0x67d8, 0x97c4, 0x000a, 0x98c6, 0x000a,
+	0x1118, 0x2031, 0x0001, 0x00e8, 0x97c4, 0x0022, 0x98c6, 0x0022,
+	0x1118, 0x2031, 0x0003, 0x00a8, 0x97c4, 0x0012, 0x98c6, 0x0012,
+	0x1118, 0x2031, 0x0002, 0x0068, 0x080c, 0x6fb2, 0x1118, 0x2031,
+	0x0004, 0x0038, 0xd79c, 0x0120, 0x2009, 0x0005, 0x0804, 0x3369,
+	0x9036, 0x7e9a, 0x7f9e, 0x0804, 0x3337, 0x6148, 0x624c, 0x2019,
+	0x1957, 0x231c, 0x2001, 0x1958, 0x2004, 0x789a, 0x0804, 0x3337,
+	0x0126, 0x2091, 0x8000, 0x6138, 0x623c, 0x6340, 0x012e, 0x0804,
+	0x3337, 0x080c, 0x48ac, 0x0904, 0x336c, 0xba44, 0xbb38, 0x0804,
+	0x3337, 0x080c, 0x0db4, 0x080c, 0x48ac, 0x2110, 0x0904, 0x336c,
+	0xb804, 0x908c, 0x00ff, 0x918e, 0x0006, 0x0140, 0x9084, 0xff00,
+	0x9086, 0x0600, 0x2009, 0x0009, 0x1904, 0x3369, 0x0126, 0x2091,
+	0x8000, 0x2019, 0x0005, 0x00c6, 0x9066, 0x080c, 0x9926, 0x080c,
+	0x8571, 0x0076, 0x903e, 0x080c, 0x8469, 0x900e, 0x080c, 0xd29b,
+	0x007e, 0x00ce, 0xb807, 0x0407, 0x012e, 0x0804, 0x3337, 0x6148,
+	0x624c, 0x7884, 0x604a, 0x7b88, 0x634e, 0x2069, 0x1853, 0x831f,
+	0x9305, 0x6816, 0x788c, 0x2069, 0x1957, 0x2d1c, 0x206a, 0x7e98,
+	0x9682, 0x0014, 0x1210, 0x2031, 0x07d0, 0x2069, 0x1958, 0x2d04,
+	0x266a, 0x789a, 0x0804, 0x3337, 0x0126, 0x2091, 0x8000, 0x6138,
+	0x7884, 0x603a, 0x910e, 0xd1b4, 0x190c, 0x0e9b, 0xd0c4, 0x01a8,
+	0x00d6, 0x78a8, 0x2009, 0x196e, 0x200a, 0x78ac, 0x2011, 0x196f,
+	0x2012, 0x2069, 0x0100, 0x6838, 0x9086, 0x0007, 0x1118, 0x2214,
+	0x6a5a, 0x0010, 0x210c, 0x695a, 0x00de, 0x7888, 0x603e, 0x2011,
+	0x0114, 0x220c, 0x7888, 0xd08c, 0x0118, 0x918d, 0x0080, 0x0010,
+	0x918c, 0xff7f, 0x2112, 0x6140, 0x788c, 0x6042, 0x910e, 0xd1e4,
+	0x190c, 0x0eb1, 0x6040, 0xd0cc, 0x0120, 0x78b0, 0x2011, 0x0114,
+	0x2012, 0x012e, 0x0804, 0x3337, 0x00f6, 0x2079, 0x1800, 0x7a38,
+	0xa898, 0x9084, 0xfebf, 0x9215, 0xa89c, 0x9084, 0xfebf, 0x8002,
+	0x9214, 0x7838, 0x9084, 0x0140, 0x9215, 0x7a3a, 0xa897, 0x4000,
+	0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x00fe, 0x0005, 0x7898,
+	0x9005, 0x01a8, 0x7888, 0x9025, 0x0904, 0x336c, 0x788c, 0x902d,
+	0x0904, 0x336c, 0x900e, 0x080c, 0x623e, 0x1120, 0xba44, 0xbb38,
+	0xbc46, 0xbd3a, 0x9186, 0x07ff, 0x0190, 0x8108, 0x0ca0, 0x080c,
+	0x48ac, 0x0904, 0x336c, 0x7888, 0x900d, 0x0904, 0x336c, 0x788c,
+	0x9005, 0x0904, 0x336c, 0xba44, 0xb946, 0xbb38, 0xb83a, 0x0804,
+	0x3337, 0x2011, 0xbc09, 0x0010, 0x2011, 0xbc05, 0x080c, 0x539a,
+	0x1904, 0x3369, 0x00c6, 0x2061, 0x0100, 0x7984, 0x9186, 0x00ff,
+	0x1130, 0x2001, 0x1817, 0x2004, 0x9085, 0xff00, 0x0088, 0x9182,
+	0x007f, 0x16e0, 0x9188, 0x3138, 0x210d, 0x918c, 0x00ff, 0x2001,
+	0x1817, 0x2004, 0x0026, 0x9116, 0x002e, 0x0580, 0x810f, 0x9105,
+	0x0126, 0x2091, 0x8000, 0x0006, 0x080c, 0x9ddc, 0x000e, 0x0510,
+	0x602e, 0x620a, 0x7984, 0x00b6, 0x080c, 0x61e4, 0x2b08, 0x00be,
+	0x1500, 0x6112, 0x6023, 0x0001, 0x080c, 0x4879, 0x01d0, 0x9006,
+	0xa866, 0x7007, 0x0003, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x701f,
+	0x380c, 0x2900, 0x6016, 0x2009, 0x0032, 0x080c, 0x9eac, 0x012e,
+	0x00ce, 0x0005, 0x012e, 0x00ce, 0x0804, 0x3369, 0x00ce, 0x0804,
+	0x336c, 0x080c, 0x9e32, 0x0cb0, 0xa830, 0x9086, 0x0100, 0x0904,
+	0x3369, 0x0804, 0x3337, 0x2061, 0x1a41, 0x0126, 0x2091, 0x8000,
+	0x6000, 0xd084, 0x0170, 0x6104, 0x6208, 0x2061, 0x1800, 0x6350,
+	0x6070, 0x789a, 0x60bc, 0x789e, 0x60b8, 0x78aa, 0x012e, 0x0804,
+	0x3337, 0x900e, 0x2110, 0x0c88, 0x81ff, 0x1904, 0x3369, 0x080c,
+	0x6fb2, 0x0904, 0x3369, 0x0126, 0x2091, 0x8000, 0x6250, 0x6070,
+	0x9202, 0x0248, 0x9085, 0x0001, 0x080c, 0x26cc, 0x080c, 0x55b4,
+	0x012e, 0x0804, 0x3337, 0x012e, 0x0804, 0x336c, 0x0006, 0x0016,
+	0x00c6, 0x00e6, 0x2001, 0x197a, 0x2070, 0x2061, 0x1853, 0x6008,
+	0x2072, 0x900e, 0x2011, 0x1400, 0x080c, 0x8270, 0x7206, 0x00ee,
+	0x00ce, 0x001e, 0x000e, 0x0005, 0x0126, 0x2091, 0x8000, 0x81ff,
+	0x0128, 0x012e, 0x2021, 0x400b, 0x0804, 0x3339, 0x7884, 0xd0fc,
+	0x0148, 0x2001, 0x002a, 0x2004, 0x9082, 0x00e1, 0x0288, 0x012e,
+	0x0804, 0x336c, 0x2001, 0x002a, 0x2004, 0x2069, 0x1853, 0x6908,
+	0x9102, 0x1230, 0x012e, 0x0804, 0x336c, 0x012e, 0x0804, 0x3369,
+	0x080c, 0x9db1, 0x0dd0, 0x7884, 0xd0fc, 0x0904, 0x38d7, 0x00c6,
+	0x080c, 0x4879, 0x00ce, 0x0d88, 0xa867, 0x0000, 0x7884, 0xa80a,
+	0x7898, 0xa80e, 0x789c, 0xa812, 0x2001, 0x002e, 0x2004, 0xa81a,
+	0x2001, 0x002f, 0x2004, 0xa81e, 0x2001, 0x0030, 0x2004, 0xa822,
+	0x2001, 0x0031, 0x2004, 0xa826, 0x2001, 0x0034, 0x2004, 0xa82a,
+	0x2001, 0x0035, 0x2004, 0xa82e, 0x2001, 0x002a, 0x2004, 0x9080,
+	0x0003, 0x9084, 0x00fc, 0x8004, 0xa816, 0x080c, 0x3a5d, 0x0928,
+	0x7014, 0x2048, 0xad2c, 0xac28, 0xab1c, 0xaa18, 0xa930, 0xa808,
+	0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021, 0x0000, 0x8906, 0x8006,
+	0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, 0x080c,
+	0x48c2, 0x701f, 0x399a, 0x7023, 0x0001, 0x012e, 0x0005, 0x0046,
+	0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6,
+	0x080c, 0x3846, 0x2001, 0x1970, 0x2003, 0x0000, 0x2021, 0x000a,
+	0x2061, 0x0100, 0x6104, 0x0016, 0x60bb, 0x0000, 0x60bf, 0x32e1,
+	0x60bf, 0x0012, 0x080c, 0x3acc, 0x080c, 0x3a8b, 0x00f6, 0x00e6,
+	0x0086, 0x2940, 0x2071, 0x1a36, 0x2079, 0x0090, 0x00d6, 0x2069,
+	0x0000, 0x6884, 0xd0b4, 0x0140, 0x2001, 0x0035, 0x2004, 0x780e,
+	0x2001, 0x0034, 0x2004, 0x780a, 0x00de, 0x2011, 0x0001, 0x080c,
+	0x3e5f, 0x008e, 0x00ee, 0x00fe, 0x080c, 0x3d8c, 0x080c, 0x3c91,
+	0x05b8, 0x2001, 0x020b, 0x2004, 0x9084, 0x0140, 0x1db8, 0x080c,
+	0x3ed3, 0x00f6, 0x2079, 0x0300, 0x78bc, 0x00fe, 0x908c, 0x0070,
+	0x1560, 0x2071, 0x0200, 0x7037, 0x0000, 0x7050, 0x9084, 0xff00,
+	0x9086, 0x3200, 0x1510, 0x7037, 0x0001, 0x7050, 0x9084, 0xff00,
+	0x9086, 0xe100, 0x11d0, 0x7037, 0x0000, 0x7054, 0x7037, 0x0000,
+	0x715c, 0x9106, 0x1190, 0x2001, 0x181f, 0x2004, 0x9106, 0x1168,
+	0x00c6, 0x2061, 0x0100, 0x6024, 0x9084, 0x1e00, 0x00ce, 0x0138,
+	0x080c, 0x3c9b, 0x080c, 0x3a86, 0x0058, 0x080c, 0x3a86, 0x080c,
+	0x3df7, 0x080c, 0x3d82, 0x2001, 0x020b, 0x2004, 0xd0e4, 0x0dd8,
+	0x2001, 0x032a, 0x2003, 0x0004, 0x2061, 0x0100, 0x6027, 0x0002,
+	0x001e, 0x6106, 0x2011, 0x020d, 0x2013, 0x0020, 0x60bb, 0x0000,
+	0x60bf, 0x0108, 0x60bf, 0x0012, 0x2001, 0x0004, 0x200c, 0x918c,
+	0xfffd, 0x2102, 0x080c, 0x129f, 0x2009, 0x0028, 0x080c, 0x2268,
+	0x2001, 0x0227, 0x200c, 0x2102, 0x00fe, 0x00ee, 0x00de, 0x00ce,
+	0x00be, 0x00ae, 0x009e, 0x008e, 0x004e, 0x2001, 0x1970, 0x2004,
+	0x9005, 0x1118, 0x012e, 0x0804, 0x3337, 0x012e, 0x2021, 0x400c,
+	0x0804, 0x3339, 0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0076,
+	0x0086, 0x0096, 0x00d6, 0x0156, 0x7014, 0x2048, 0x7020, 0x20a8,
+	0x8000, 0x7022, 0xa804, 0x9005, 0x0904, 0x39f6, 0x2048, 0x1f04,
+	0x39aa, 0x7068, 0x2040, 0xa28c, 0xa390, 0xa494, 0xa598, 0xa930,
+	0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021, 0x0000, 0x0096,
+	0x7014, 0x2048, 0xa864, 0x009e, 0x9086, 0x0103, 0x0170, 0x8906,
 	0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b,
-	0x080c, 0x48bb, 0x701f, 0x3993, 0x7023, 0x0001, 0x012e, 0x0005,
-	0x0046, 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6,
-	0x00f6, 0x080c, 0x383f, 0x2001, 0x1970, 0x2003, 0x0000, 0x2021,
-	0x000a, 0x2061, 0x0100, 0x6104, 0x0016, 0x60bb, 0x0000, 0x60bf,
-	0x32e1, 0x60bf, 0x0012, 0x080c, 0x3ac5, 0x080c, 0x3a84, 0x00f6,
-	0x00e6, 0x0086, 0x2940, 0x2071, 0x1a36, 0x2079, 0x0090, 0x00d6,
-	0x2069, 0x0000, 0x6884, 0xd0b4, 0x0140, 0x2001, 0x0035, 0x2004,
-	0x780e, 0x2001, 0x0034, 0x2004, 0x780a, 0x00de, 0x2011, 0x0001,
-	0x080c, 0x3e58, 0x008e, 0x00ee, 0x00fe, 0x080c, 0x3d85, 0x080c,
-	0x3c8a, 0x05b8, 0x2001, 0x020b, 0x2004, 0x9084, 0x0140, 0x1db8,
-	0x080c, 0x3ecc, 0x00f6, 0x2079, 0x0300, 0x78bc, 0x00fe, 0x908c,
-	0x0070, 0x1560, 0x2071, 0x0200, 0x7037, 0x0000, 0x7050, 0x9084,
-	0xff00, 0x9086, 0x3200, 0x1510, 0x7037, 0x0001, 0x7050, 0x9084,
-	0xff00, 0x9086, 0xe100, 0x11d0, 0x7037, 0x0000, 0x7054, 0x7037,
-	0x0000, 0x715c, 0x9106, 0x1190, 0x2001, 0x181f, 0x2004, 0x9106,
-	0x1168, 0x00c6, 0x2061, 0x0100, 0x6024, 0x9084, 0x1e00, 0x00ce,
-	0x0138, 0x080c, 0x3c94, 0x080c, 0x3a7f, 0x0058, 0x080c, 0x3a7f,
-	0x080c, 0x3df0, 0x080c, 0x3d7b, 0x2001, 0x020b, 0x2004, 0xd0e4,
-	0x0dd8, 0x2001, 0x032a, 0x2003, 0x0004, 0x2061, 0x0100, 0x6027,
-	0x0002, 0x001e, 0x6106, 0x2011, 0x020d, 0x2013, 0x0020, 0x60bb,
-	0x0000, 0x60bf, 0x0108, 0x60bf, 0x0012, 0x2001, 0x0004, 0x200c,
-	0x918c, 0xfffd, 0x2102, 0x080c, 0x129f, 0x2009, 0x0028, 0x080c,
-	0x2268, 0x2001, 0x0227, 0x200c, 0x2102, 0x00fe, 0x00ee, 0x00de,
-	0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e, 0x004e, 0x2001, 0x1970,
-	0x2004, 0x9005, 0x1118, 0x012e, 0x0804, 0x3330, 0x012e, 0x2021,
-	0x400c, 0x0804, 0x3332, 0x0016, 0x0026, 0x0036, 0x0046, 0x0056,
-	0x0076, 0x0086, 0x0096, 0x00d6, 0x0156, 0x7014, 0x2048, 0x7020,
-	0x20a8, 0x8000, 0x7022, 0xa804, 0x9005, 0x0904, 0x39ef, 0x2048,
-	0x1f04, 0x39a3, 0x7068, 0x2040, 0xa28c, 0xa390, 0xa494, 0xa598,
-	0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021, 0x0000,
-	0x0096, 0x7014, 0x2048, 0xa864, 0x009e, 0x9086, 0x0103, 0x0170,
-	0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080,
-	0x001b, 0x080c, 0x48bb, 0x701f, 0x3993, 0x00b0, 0x8906, 0x8006,
-	0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, 0x21a8,
-	0x27e0, 0x2098, 0x27e8, 0x20a0, 0x0006, 0x080c, 0x0f68, 0x000e,
-	0x080c, 0x48be, 0x701f, 0x3993, 0x015e, 0x00de, 0x009e, 0x008e,
-	0x007e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, 0x0005, 0x7014,
-	0x2048, 0xa864, 0x9086, 0x0103, 0x1118, 0x701f, 0x3a54, 0x0450,
-	0x7014, 0x2048, 0xa868, 0xc0fd, 0xa86a, 0x2009, 0x007f, 0x080c,
-	0x61d7, 0x0110, 0x9006, 0x0030, 0xb813, 0x00ff, 0xb817, 0xfffd,
-	0x080c, 0xbfc2, 0x015e, 0x00de, 0x009e, 0x008e, 0x007e, 0x005e,
-	0x004e, 0x003e, 0x002e, 0x001e, 0x0904, 0x3362, 0x0016, 0x0026,
-	0x0036, 0x0046, 0x0056, 0x0076, 0x0086, 0x0096, 0x00d6, 0x0156,
-	0x701f, 0x3a26, 0x7007, 0x0003, 0x0804, 0x39e4, 0xa830, 0x9086,
-	0x0100, 0x2021, 0x400c, 0x0904, 0x3332, 0x0076, 0xad10, 0xac0c,
-	0xab24, 0xaa20, 0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000,
-	0x2021, 0x0000, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084,
-	0xffc0, 0x9080, 0x001b, 0x21a8, 0x27e0, 0x2098, 0x27e8, 0x20a0,
-	0x0006, 0x080c, 0x0f68, 0x000e, 0x080c, 0x48be, 0x007e, 0x701f,
-	0x3993, 0x7023, 0x0001, 0x0005, 0x0804, 0x3330, 0x0156, 0x00c6,
-	0xa814, 0x908a, 0x001e, 0x0218, 0xa833, 0x001e, 0x0010, 0xa832,
-	0x0078, 0x81ff, 0x0168, 0x0016, 0x080c, 0x4872, 0x001e, 0x0130,
-	0xa800, 0x2040, 0xa008, 0xa80a, 0x2100, 0x0c58, 0x9006, 0x0010,
-	0x9085, 0x0001, 0x00ce, 0x015e, 0x0005, 0x0006, 0x00f6, 0x2079,
-	0x0000, 0x7880, 0x9086, 0x0044, 0x00fe, 0x000e, 0x0005, 0x2001,
-	0x1970, 0x2003, 0x0001, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x2061,
-	0x0200, 0x2001, 0x197b, 0x2004, 0x601a, 0x2061, 0x0100, 0x2001,
-	0x197a, 0x2004, 0x60ce, 0x6104, 0xc1ac, 0x6106, 0x080c, 0x4872,
-	0xa813, 0x0019, 0xa817, 0x0001, 0x2900, 0xa85a, 0x2001, 0x002e,
-	0x2004, 0xa866, 0x2001, 0x002f, 0x2004, 0xa86a, 0x2061, 0x0090,
-	0x2079, 0x0100, 0x2001, 0x197a, 0x2004, 0x6036, 0x2009, 0x0040,
-	0x080c, 0x2268, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0xa86e,
-	0x601a, 0xa873, 0x0000, 0x601f, 0x0000, 0x78ca, 0x9006, 0x600a,
-	0x600e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x00e6, 0x080c, 0x4872,
-	0x2940, 0xa013, 0x0019, 0xa017, 0x0001, 0x2800, 0xa05a, 0x2001,
-	0x0030, 0x2004, 0xa866, 0x2001, 0x0031, 0x2004, 0xa86a, 0x2001,
-	0x002a, 0x2004, 0x9084, 0xfff8, 0xa86e, 0xa873, 0x0000, 0x2001,
-	0x032a, 0x2003, 0x0004, 0x2001, 0x0300, 0x2003, 0x0000, 0x2001,
-	0x020d, 0x2003, 0x0000, 0x2001, 0x0004, 0x200c, 0x918d, 0x0002,
-	0x2102, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x81ff, 0x0148,
-	0x080c, 0x2a55, 0x1130, 0x9006, 0x080c, 0x29ad, 0x9006, 0x080c,
-	0x2990, 0x7884, 0x9084, 0x0007, 0x0002, 0x3b10, 0x3b19, 0x3b22,
-	0x3b0d, 0x3b0d, 0x3b0d, 0x3b0d, 0x3b0d, 0x012e, 0x0804, 0x3365,
-	0x2009, 0x0114, 0x2104, 0x9085, 0x0800, 0x200a, 0x080c, 0x3cde,
-	0x00c0, 0x2009, 0x0114, 0x2104, 0x9085, 0x4000, 0x200a, 0x080c,
-	0x3cde, 0x0078, 0x080c, 0x6fa7, 0x1128, 0x012e, 0x2009, 0x0016,
-	0x0804, 0x3362, 0x81ff, 0x0128, 0x012e, 0x2021, 0x400b, 0x0804,
-	0x3332, 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6,
-	0x00f6, 0x080c, 0x383f, 0x2009, 0x0101, 0x210c, 0x0016, 0x7ec8,
-	0x7dcc, 0x9006, 0x2068, 0x2060, 0x2058, 0x080c, 0x3fa7, 0x080c,
-	0x3ef7, 0x903e, 0x2720, 0x00f6, 0x00e6, 0x0086, 0x2940, 0x2071,
-	0x1a36, 0x2079, 0x0090, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4,
-	0x0120, 0x68d4, 0x780e, 0x68d0, 0x780a, 0x00de, 0x2011, 0x0001,
-	0x080c, 0x3e58, 0x080c, 0x2a5d, 0x080c, 0x2a5d, 0x080c, 0x2a5d,
-	0x080c, 0x2a5d, 0x080c, 0x3e58, 0x008e, 0x00ee, 0x00fe, 0x080c,
-	0x3d85, 0x2009, 0x9c40, 0x8109, 0x11b0, 0x080c, 0x3c94, 0x2001,
-	0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, 0x001e, 0x00fe, 0x00ee,
-	0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e, 0x2009, 0x0017,
-	0x080c, 0x3362, 0x0cf8, 0x2001, 0x020b, 0x2004, 0x9084, 0x0140,
-	0x1d10, 0x00f6, 0x2079, 0x0000, 0x7884, 0x00fe, 0xd0bc, 0x0178,
-	0x2001, 0x0201, 0x200c, 0x81ff, 0x0150, 0x080c, 0x3d63, 0x2d00,
-	0x9c05, 0x9b05, 0x0120, 0x080c, 0x3c94, 0x0804, 0x3c41, 0x080c,
-	0x3ecc, 0x080c, 0x3df0, 0x080c, 0x3d46, 0x080c, 0x3d7b, 0x00f6,
-	0x2079, 0x0100, 0x7824, 0xd0ac, 0x0130, 0x8b58, 0x080c, 0x3c94,
-	0x00fe, 0x0804, 0x3c41, 0x00fe, 0x080c, 0x3c8a, 0x1150, 0x8d68,
-	0x2001, 0x0032, 0x2602, 0x2001, 0x0033, 0x2502, 0x080c, 0x3c94,
-	0x0080, 0x87ff, 0x0138, 0x2001, 0x0201, 0x2004, 0x9005, 0x1908,
-	0x8739, 0x0038, 0x2001, 0x1a33, 0x2004, 0x9086, 0x0000, 0x1904,
-	0x3b91, 0x2001, 0x032f, 0x2003, 0x00f6, 0x8631, 0x1208, 0x8529,
-	0x2500, 0x9605, 0x0904, 0x3c41, 0x7884, 0xd0bc, 0x0128, 0x2d00,
-	0x9c05, 0x9b05, 0x1904, 0x3c41, 0xa013, 0x0019, 0x2001, 0x032a,
-	0x2003, 0x0004, 0x7884, 0xd0ac, 0x1148, 0x2001, 0x1a33, 0x2003,
-	0x0003, 0x2001, 0x032a, 0x2003, 0x0009, 0x0030, 0xa017, 0x0001,
-	0x78b4, 0x9005, 0x0108, 0xa016, 0x2800, 0xa05a, 0x2009, 0x0040,
-	0x080c, 0x2268, 0x2900, 0xa85a, 0xa813, 0x0019, 0x7884, 0xd0a4,
-	0x1180, 0xa817, 0x0000, 0x00c6, 0x20a9, 0x0004, 0x2061, 0x0090,
-	0x602b, 0x0008, 0x2001, 0x0203, 0x2004, 0x1f04, 0x3c18, 0x00ce,
-	0x0030, 0xa817, 0x0001, 0x78b0, 0x9005, 0x0108, 0xa816, 0x00f6,
-	0x00c6, 0x2079, 0x0100, 0x2061, 0x0090, 0x7827, 0x0002, 0x2001,
-	0x002a, 0x2004, 0x9084, 0xfff8, 0x601a, 0x0006, 0x2001, 0x002b,
-	0x2004, 0x601e, 0x78c6, 0x000e, 0x78ca, 0x00ce, 0x00fe, 0x0804,
-	0x3b4b, 0x001e, 0x00c6, 0x2001, 0x032a, 0x2003, 0x0004, 0x2061,
-	0x0100, 0x6027, 0x0002, 0x6106, 0x2011, 0x020d, 0x2013, 0x0020,
-	0x2001, 0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, 0x080c, 0x129f,
-	0x7884, 0x9084, 0x0003, 0x9086, 0x0002, 0x01a0, 0x2009, 0x0028,
-	0x080c, 0x2268, 0x2001, 0x0227, 0x200c, 0x2102, 0x6050, 0x9084,
-	0xb7ef, 0x6052, 0x602f, 0x0000, 0x604b, 0xf7f7, 0x6043, 0x0090,
-	0x6043, 0x0010, 0x00ce, 0x2d08, 0x2c10, 0x2b18, 0x2b00, 0x9c05,
-	0x9d05, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e,
-	0x008e, 0x1118, 0x012e, 0x0804, 0x3330, 0x012e, 0x2021, 0x400c,
-	0x0804, 0x3332, 0x9085, 0x0001, 0x1d04, 0x3c93, 0x2091, 0x6000,
-	0x8420, 0x9486, 0x0064, 0x0005, 0x2001, 0x0105, 0x2003, 0x0010,
-	0x2001, 0x032a, 0x2003, 0x0004, 0x2001, 0x1a33, 0x2003, 0x0000,
-	0x0071, 0x2009, 0x0048, 0x080c, 0x2268, 0x2001, 0x0227, 0x2024,
-	0x2402, 0x2001, 0x0109, 0x2003, 0x4000, 0x9026, 0x0005, 0x00f6,
-	0x00e6, 0x2071, 0x1a36, 0x7000, 0x9086, 0x0000, 0x0520, 0x2079,
-	0x0090, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0x9106,
-	0x1120, 0x2009, 0x0040, 0x080c, 0x2268, 0x782c, 0xd0fc, 0x0d88,
-	0x080c, 0x3ecc, 0x7000, 0x9086, 0x0000, 0x1d58, 0x782b, 0x0004,
-	0x782c, 0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c, 0x2268, 0x782b,
-	0x0002, 0x7003, 0x0000, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x2079,
-	0x0100, 0x2001, 0x1817, 0x200c, 0x7932, 0x7936, 0x080c, 0x26ac,
-	0x7850, 0x9084, 0xfbff, 0x9085, 0x0030, 0x7852, 0x2019, 0x01f4,
-	0x8319, 0x1df0, 0x9084, 0xffcf, 0x9085, 0x2000, 0x7852, 0x20a9,
-	0x0046, 0x1d04, 0x3cf9, 0x2091, 0x6000, 0x1f04, 0x3cf9, 0x7850,
-	0x9085, 0x0400, 0x9084, 0xdfff, 0x7852, 0x2001, 0x0021, 0x2004,
-	0x9084, 0x0003, 0x9086, 0x0001, 0x1120, 0x7850, 0x9084, 0xdfff,
-	0x7852, 0x784b, 0xf7f7, 0x7843, 0x0090, 0x7843, 0x0010, 0x20a9,
-	0x0028, 0xa001, 0x1f04, 0x3d19, 0x7850, 0x9085, 0x1400, 0x7852,
-	0x2019, 0x61a8, 0x7854, 0xa001, 0xa001, 0xd08c, 0x1110, 0x8319,
-	0x1dc8, 0x7827, 0x0048, 0x7850, 0x9085, 0x0400, 0x7852, 0x7843,
-	0x0040, 0x2019, 0x01f4, 0xa001, 0xa001, 0x8319, 0x1de0, 0x2001,
-	0x0100, 0x080c, 0x2b14, 0x7827, 0x0020, 0x7843, 0x0000, 0x9006,
-	0x080c, 0x2b14, 0x7827, 0x0048, 0x00fe, 0x0005, 0x7884, 0xd0ac,
-	0x11c8, 0x00f6, 0x00e6, 0x2071, 0x1a33, 0x2079, 0x0320, 0x2001,
-	0x0201, 0x2004, 0x9005, 0x0160, 0x7000, 0x9086, 0x0000, 0x1140,
-	0x0051, 0xd0bc, 0x0108, 0x8738, 0x7003, 0x0003, 0x782b, 0x0019,
-	0x00ee, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0300, 0x78bc, 0x00fe,
-	0x908c, 0x0070, 0x0178, 0x2009, 0x0032, 0x260a, 0x2009, 0x0033,
-	0x250a, 0xd0b4, 0x0108, 0x8c60, 0xd0ac, 0x0108, 0x8d68, 0xd0a4,
-	0x0108, 0x8b58, 0x0005, 0x00f6, 0x2079, 0x0200, 0x781c, 0xd084,
-	0x0110, 0x7837, 0x0050, 0x00fe, 0x0005, 0x00e6, 0x2071, 0x0100,
-	0x2001, 0x197b, 0x2004, 0x70e2, 0x080c, 0x3a75, 0x1188, 0x2001,
-	0x181f, 0x2004, 0x2009, 0x181e, 0x210c, 0x918c, 0x00ff, 0x706e,
-	0x716a, 0x7066, 0x918d, 0x3200, 0x7162, 0x7073, 0xe109, 0x0080,
-	0x702c, 0x9085, 0x0002, 0x702e, 0x2009, 0x1817, 0x210c, 0x716e,
-	0x7063, 0x0100, 0x7166, 0x719e, 0x706b, 0x0000, 0x7073, 0x0809,
-	0x7077, 0x0008, 0x7078, 0x9080, 0x0100, 0x707a, 0x7080, 0x8000,
-	0x7082, 0x7087, 0xaaaa, 0x9006, 0x708a, 0x708e, 0x707e, 0x70d6,
-	0x70ab, 0x0036, 0x70af, 0x95d5, 0x7014, 0x9084, 0x1984, 0x9085,
-	0x0092, 0x7016, 0x080c, 0x3ecc, 0x00f6, 0x2071, 0x1a33, 0x2079,
-	0x0320, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0120, 0x689c,
-	0x780e, 0x6898, 0x780a, 0x00de, 0x2009, 0x03e8, 0x8109, 0x1df0,
-	0x792c, 0xd1fc, 0x0110, 0x782b, 0x0004, 0x2011, 0x0011, 0x080c,
-	0x3e58, 0x2011, 0x0001, 0x080c, 0x3e58, 0x00fe, 0x00ee, 0x0005,
-	0x00f6, 0x00e6, 0x2071, 0x1a33, 0x2079, 0x0320, 0x792c, 0xd1fc,
-	0x0904, 0x3e55, 0x782b, 0x0002, 0x9026, 0xd19c, 0x1904, 0x3e51,
-	0x7000, 0x0002, 0x3e55, 0x3e06, 0x3e36, 0x3e51, 0xd1bc, 0x1170,
-	0xd1dc, 0x1190, 0x8001, 0x7002, 0x2011, 0x0001, 0x080c, 0x3e58,
-	0x0904, 0x3e55, 0x080c, 0x3e58, 0x0804, 0x3e55, 0x00f6, 0x2079,
-	0x0300, 0x78bf, 0x0000, 0x00fe, 0x7810, 0x7914, 0x782b, 0x0004,
-	0x7812, 0x7916, 0x2001, 0x0201, 0x200c, 0x81ff, 0x0de8, 0x080c,
-	0x3d63, 0x2009, 0x0001, 0x00f6, 0x2079, 0x0300, 0x78b8, 0x00fe,
-	0xd0ec, 0x0110, 0x2009, 0x0011, 0x792a, 0x00f8, 0x8001, 0x7002,
-	0x9184, 0x0880, 0x1140, 0x782c, 0xd0fc, 0x1904, 0x3dfa, 0x2011,
-	0x0001, 0x00b1, 0x0090, 0xa010, 0x9092, 0x0004, 0x9086, 0x0015,
-	0x1120, 0xa000, 0xa05a, 0x2011, 0x0031, 0xa212, 0xd1dc, 0x1960,
-	0x0828, 0x782b, 0x0004, 0x7003, 0x0000, 0x00ee, 0x00fe, 0x0005,
-	0xa014, 0x9005, 0x0550, 0x8001, 0x0036, 0x0096, 0xa016, 0xa058,
-	0x2048, 0xa010, 0x2009, 0x0031, 0x911a, 0x831c, 0x831c, 0x938a,
-	0x0007, 0x1a0c, 0x0db4, 0x9398, 0x3e86, 0x231d, 0x083f, 0x9080,
-	0x0004, 0x7a2a, 0x7100, 0x8108, 0x7102, 0x009e, 0x003e, 0x908a,
-	0x0035, 0x1140, 0x0096, 0xa058, 0x2048, 0xa804, 0xa05a, 0x2001,
-	0x0019, 0x009e, 0xa012, 0x9085, 0x0001, 0x0005, 0x3ec3, 0x3eba,
-	0x3eb1, 0x3ea8, 0x3e9f, 0x3e96, 0x3e8d, 0xa964, 0x7902, 0xa968,
-	0x7906, 0xa96c, 0x7912, 0xa970, 0x7916, 0x0005, 0xa974, 0x7902,
-	0xa978, 0x7906, 0xa97c, 0x7912, 0xa980, 0x7916, 0x0005, 0xa984,
-	0x7902, 0xa988, 0x7906, 0xa98c, 0x7912, 0xa990, 0x7916, 0x0005,
-	0xa994, 0x7902, 0xa998, 0x7906, 0xa99c, 0x7912, 0xa9a0, 0x7916,
-	0x0005, 0xa9a4, 0x7902, 0xa9a8, 0x7906, 0xa9ac, 0x7912, 0xa9b0,
-	0x7916, 0x0005, 0xa9b4, 0x7902, 0xa9b8, 0x7906, 0xa9bc, 0x7912,
-	0xa9c0, 0x7916, 0x0005, 0xa9c4, 0x7902, 0xa9c8, 0x7906, 0xa9cc,
-	0x7912, 0xa9d0, 0x7916, 0x0005, 0x00f6, 0x00e6, 0x0086, 0x2071,
-	0x1a36, 0x2079, 0x0090, 0x792c, 0xd1fc, 0x01e8, 0x782b, 0x0002,
-	0x2940, 0x9026, 0x7000, 0x0002, 0x3ef3, 0x3edf, 0x3eea, 0x8001,
-	0x7002, 0xd19c, 0x1180, 0x2011, 0x0001, 0x080c, 0x3e58, 0x190c,
-	0x3e58, 0x0048, 0x8001, 0x7002, 0x782c, 0xd0fc, 0x1d38, 0x2011,
-	0x0001, 0x080c, 0x3e58, 0x008e, 0x00ee, 0x00fe, 0x0005, 0x00f6,
-	0x00e6, 0x00c6, 0x0086, 0x2061, 0x0200, 0x2001, 0x197b, 0x2004,
-	0x601a, 0x2061, 0x0100, 0x2001, 0x197a, 0x2004, 0x60ce, 0x6104,
-	0xc1ac, 0x6106, 0x2001, 0x002c, 0x2004, 0x9005, 0x0520, 0x2038,
-	0x2001, 0x002e, 0x2024, 0x2001, 0x002f, 0x201c, 0x080c, 0x4872,
-	0xa813, 0x0019, 0xaf16, 0x2900, 0xa85a, 0x978a, 0x0007, 0x0220,
-	0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e, 0x0096, 0xa858,
-	0x2048, 0xa85c, 0x9080, 0x0019, 0x009e, 0x080c, 0x3f6f, 0x1d68,
-	0x2900, 0xa85a, 0x00d0, 0x080c, 0x4872, 0xa813, 0x0019, 0xa817,
-	0x0001, 0x2900, 0xa85a, 0x2001, 0x002e, 0x2004, 0xa866, 0x2001,
-	0x002f, 0x2004, 0xa86a, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8,
-	0xa86e, 0x2001, 0x002b, 0x2004, 0xa872, 0x2061, 0x0090, 0x2079,
+	0x080c, 0x48c2, 0x701f, 0x399a, 0x00b0, 0x8906, 0x8006, 0x8007,
+	0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, 0x21a8, 0x27e0,
+	0x2098, 0x27e8, 0x20a0, 0x0006, 0x080c, 0x0f68, 0x000e, 0x080c,
+	0x48c5, 0x701f, 0x399a, 0x015e, 0x00de, 0x009e, 0x008e, 0x007e,
+	0x005e, 0x004e, 0x003e, 0x002e, 0x001e, 0x0005, 0x7014, 0x2048,
+	0xa864, 0x9086, 0x0103, 0x1118, 0x701f, 0x3a5b, 0x0450, 0x7014,
+	0x2048, 0xa868, 0xc0fd, 0xa86a, 0x2009, 0x007f, 0x080c, 0x61de,
+	0x0110, 0x9006, 0x0030, 0xb813, 0x00ff, 0xb817, 0xfffd, 0x080c,
+	0xbfdb, 0x015e, 0x00de, 0x009e, 0x008e, 0x007e, 0x005e, 0x004e,
+	0x003e, 0x002e, 0x001e, 0x0904, 0x3369, 0x0016, 0x0026, 0x0036,
+	0x0046, 0x0056, 0x0076, 0x0086, 0x0096, 0x00d6, 0x0156, 0x701f,
+	0x3a2d, 0x7007, 0x0003, 0x0804, 0x39eb, 0xa830, 0x9086, 0x0100,
+	0x2021, 0x400c, 0x0904, 0x3339, 0x0076, 0xad10, 0xac0c, 0xab24,
+	0xaa20, 0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021,
+	0x0000, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0,
+	0x9080, 0x001b, 0x21a8, 0x27e0, 0x2098, 0x27e8, 0x20a0, 0x0006,
+	0x080c, 0x0f68, 0x000e, 0x080c, 0x48c5, 0x007e, 0x701f, 0x399a,
+	0x7023, 0x0001, 0x0005, 0x0804, 0x3337, 0x0156, 0x00c6, 0xa814,
+	0x908a, 0x001e, 0x0218, 0xa833, 0x001e, 0x0010, 0xa832, 0x0078,
+	0x81ff, 0x0168, 0x0016, 0x080c, 0x4879, 0x001e, 0x0130, 0xa800,
+	0x2040, 0xa008, 0xa80a, 0x2100, 0x0c58, 0x9006, 0x0010, 0x9085,
+	0x0001, 0x00ce, 0x015e, 0x0005, 0x0006, 0x00f6, 0x2079, 0x0000,
+	0x7880, 0x9086, 0x0044, 0x00fe, 0x000e, 0x0005, 0x2001, 0x1970,
+	0x2003, 0x0001, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x2061, 0x0200,
+	0x2001, 0x197b, 0x2004, 0x601a, 0x2061, 0x0100, 0x2001, 0x197a,
+	0x2004, 0x60ce, 0x6104, 0xc1ac, 0x6106, 0x080c, 0x4879, 0xa813,
+	0x0019, 0xa817, 0x0001, 0x2900, 0xa85a, 0x2001, 0x002e, 0x2004,
+	0xa866, 0x2001, 0x002f, 0x2004, 0xa86a, 0x2061, 0x0090, 0x2079,
 	0x0100, 0x2001, 0x197a, 0x2004, 0x6036, 0x2009, 0x0040, 0x080c,
-	0x2268, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0x601a, 0x0006,
-	0x2001, 0x002b, 0x2004, 0x601e, 0x78c6, 0x000e, 0x78ca, 0x9006,
-	0x600a, 0x600e, 0x008e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x00e6,
-	0x2071, 0x0080, 0xaa60, 0x22e8, 0x20a0, 0x20e1, 0x0000, 0x2099,
-	0x0088, 0x702b, 0x0026, 0x7402, 0x7306, 0x9006, 0x700a, 0x700e,
-	0x810b, 0x810b, 0x21a8, 0x810b, 0x7112, 0x702b, 0x0041, 0x702c,
-	0xd0fc, 0x0de8, 0x702b, 0x0002, 0x702b, 0x0040, 0x4005, 0x7400,
-	0x7304, 0x87ff, 0x0190, 0x0086, 0x0096, 0x2940, 0x0086, 0x080c,
-	0x4872, 0x008e, 0xa058, 0x00a6, 0x2050, 0x2900, 0xb006, 0xa05a,
-	0x00ae, 0x009e, 0x008e, 0x9085, 0x0001, 0x00ee, 0x0005, 0x00e6,
-	0x2001, 0x002d, 0x2004, 0x9005, 0x0528, 0x2038, 0x2001, 0x0030,
-	0x2024, 0x2001, 0x0031, 0x201c, 0x080c, 0x4872, 0x2940, 0xa813,
+	0x2268, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0xa86e, 0x601a,
+	0xa873, 0x0000, 0x601f, 0x0000, 0x78ca, 0x9006, 0x600a, 0x600e,
+	0x00ce, 0x00ee, 0x00fe, 0x0005, 0x00e6, 0x080c, 0x4879, 0x2940,
+	0xa013, 0x0019, 0xa017, 0x0001, 0x2800, 0xa05a, 0x2001, 0x0030,
+	0x2004, 0xa866, 0x2001, 0x0031, 0x2004, 0xa86a, 0x2001, 0x002a,
+	0x2004, 0x9084, 0xfff8, 0xa86e, 0xa873, 0x0000, 0x2001, 0x032a,
+	0x2003, 0x0004, 0x2001, 0x0300, 0x2003, 0x0000, 0x2001, 0x020d,
+	0x2003, 0x0000, 0x2001, 0x0004, 0x200c, 0x918d, 0x0002, 0x2102,
+	0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x81ff, 0x0148, 0x080c,
+	0x2a55, 0x1130, 0x9006, 0x080c, 0x29ad, 0x9006, 0x080c, 0x2990,
+	0x7884, 0x9084, 0x0007, 0x0002, 0x3b17, 0x3b20, 0x3b29, 0x3b14,
+	0x3b14, 0x3b14, 0x3b14, 0x3b14, 0x012e, 0x0804, 0x336c, 0x2009,
+	0x0114, 0x2104, 0x9085, 0x0800, 0x200a, 0x080c, 0x3ce5, 0x00c0,
+	0x2009, 0x0114, 0x2104, 0x9085, 0x4000, 0x200a, 0x080c, 0x3ce5,
+	0x0078, 0x080c, 0x6fb2, 0x1128, 0x012e, 0x2009, 0x0016, 0x0804,
+	0x3369, 0x81ff, 0x0128, 0x012e, 0x2021, 0x400b, 0x0804, 0x3339,
+	0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6,
+	0x080c, 0x3846, 0x2009, 0x0101, 0x210c, 0x0016, 0x7ec8, 0x7dcc,
+	0x9006, 0x2068, 0x2060, 0x2058, 0x080c, 0x3fae, 0x080c, 0x3efe,
+	0x903e, 0x2720, 0x00f6, 0x00e6, 0x0086, 0x2940, 0x2071, 0x1a36,
+	0x2079, 0x0090, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0120,
+	0x68d4, 0x780e, 0x68d0, 0x780a, 0x00de, 0x2011, 0x0001, 0x080c,
+	0x3e5f, 0x080c, 0x2a5d, 0x080c, 0x2a5d, 0x080c, 0x2a5d, 0x080c,
+	0x2a5d, 0x080c, 0x3e5f, 0x008e, 0x00ee, 0x00fe, 0x080c, 0x3d8c,
+	0x2009, 0x9c40, 0x8109, 0x11b0, 0x080c, 0x3c9b, 0x2001, 0x0004,
+	0x200c, 0x918c, 0xfffd, 0x2102, 0x001e, 0x00fe, 0x00ee, 0x00de,
+	0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e, 0x2009, 0x0017, 0x080c,
+	0x3369, 0x0cf8, 0x2001, 0x020b, 0x2004, 0x9084, 0x0140, 0x1d10,
+	0x00f6, 0x2079, 0x0000, 0x7884, 0x00fe, 0xd0bc, 0x0178, 0x2001,
+	0x0201, 0x200c, 0x81ff, 0x0150, 0x080c, 0x3d6a, 0x2d00, 0x9c05,
+	0x9b05, 0x0120, 0x080c, 0x3c9b, 0x0804, 0x3c48, 0x080c, 0x3ed3,
+	0x080c, 0x3df7, 0x080c, 0x3d4d, 0x080c, 0x3d82, 0x00f6, 0x2079,
+	0x0100, 0x7824, 0xd0ac, 0x0130, 0x8b58, 0x080c, 0x3c9b, 0x00fe,
+	0x0804, 0x3c48, 0x00fe, 0x080c, 0x3c91, 0x1150, 0x8d68, 0x2001,
+	0x0032, 0x2602, 0x2001, 0x0033, 0x2502, 0x080c, 0x3c9b, 0x0080,
+	0x87ff, 0x0138, 0x2001, 0x0201, 0x2004, 0x9005, 0x1908, 0x8739,
+	0x0038, 0x2001, 0x1a33, 0x2004, 0x9086, 0x0000, 0x1904, 0x3b98,
+	0x2001, 0x032f, 0x2003, 0x00f6, 0x8631, 0x1208, 0x8529, 0x2500,
+	0x9605, 0x0904, 0x3c48, 0x7884, 0xd0bc, 0x0128, 0x2d00, 0x9c05,
+	0x9b05, 0x1904, 0x3c48, 0xa013, 0x0019, 0x2001, 0x032a, 0x2003,
+	0x0004, 0x7884, 0xd0ac, 0x1148, 0x2001, 0x1a33, 0x2003, 0x0003,
+	0x2001, 0x032a, 0x2003, 0x0009, 0x0030, 0xa017, 0x0001, 0x78b4,
+	0x9005, 0x0108, 0xa016, 0x2800, 0xa05a, 0x2009, 0x0040, 0x080c,
+	0x2268, 0x2900, 0xa85a, 0xa813, 0x0019, 0x7884, 0xd0a4, 0x1180,
+	0xa817, 0x0000, 0x00c6, 0x20a9, 0x0004, 0x2061, 0x0090, 0x602b,
+	0x0008, 0x2001, 0x0203, 0x2004, 0x1f04, 0x3c1f, 0x00ce, 0x0030,
+	0xa817, 0x0001, 0x78b0, 0x9005, 0x0108, 0xa816, 0x00f6, 0x00c6,
+	0x2079, 0x0100, 0x2061, 0x0090, 0x7827, 0x0002, 0x2001, 0x002a,
+	0x2004, 0x9084, 0xfff8, 0x601a, 0x0006, 0x2001, 0x002b, 0x2004,
+	0x601e, 0x78c6, 0x000e, 0x78ca, 0x00ce, 0x00fe, 0x0804, 0x3b52,
+	0x001e, 0x00c6, 0x2001, 0x032a, 0x2003, 0x0004, 0x2061, 0x0100,
+	0x6027, 0x0002, 0x6106, 0x2011, 0x020d, 0x2013, 0x0020, 0x2001,
+	0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, 0x080c, 0x129f, 0x7884,
+	0x9084, 0x0003, 0x9086, 0x0002, 0x01a0, 0x2009, 0x0028, 0x080c,
+	0x2268, 0x2001, 0x0227, 0x200c, 0x2102, 0x6050, 0x9084, 0xb7ef,
+	0x6052, 0x602f, 0x0000, 0x604b, 0xf7f7, 0x6043, 0x0090, 0x6043,
+	0x0010, 0x00ce, 0x2d08, 0x2c10, 0x2b18, 0x2b00, 0x9c05, 0x9d05,
+	0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e,
+	0x1118, 0x012e, 0x0804, 0x3337, 0x012e, 0x2021, 0x400c, 0x0804,
+	0x3339, 0x9085, 0x0001, 0x1d04, 0x3c9a, 0x2091, 0x6000, 0x8420,
+	0x9486, 0x0064, 0x0005, 0x2001, 0x0105, 0x2003, 0x0010, 0x2001,
+	0x032a, 0x2003, 0x0004, 0x2001, 0x1a33, 0x2003, 0x0000, 0x0071,
+	0x2009, 0x0048, 0x080c, 0x2268, 0x2001, 0x0227, 0x2024, 0x2402,
+	0x2001, 0x0109, 0x2003, 0x4000, 0x9026, 0x0005, 0x00f6, 0x00e6,
+	0x2071, 0x1a36, 0x7000, 0x9086, 0x0000, 0x0520, 0x2079, 0x0090,
+	0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0x9106, 0x1120,
+	0x2009, 0x0040, 0x080c, 0x2268, 0x782c, 0xd0fc, 0x0d88, 0x080c,
+	0x3ed3, 0x7000, 0x9086, 0x0000, 0x1d58, 0x782b, 0x0004, 0x782c,
+	0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c, 0x2268, 0x782b, 0x0002,
+	0x7003, 0x0000, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0100,
+	0x2001, 0x1817, 0x200c, 0x7932, 0x7936, 0x080c, 0x26ac, 0x7850,
+	0x9084, 0xfbff, 0x9085, 0x0030, 0x7852, 0x2019, 0x01f4, 0x8319,
+	0x1df0, 0x9084, 0xffcf, 0x9085, 0x2000, 0x7852, 0x20a9, 0x0046,
+	0x1d04, 0x3d00, 0x2091, 0x6000, 0x1f04, 0x3d00, 0x7850, 0x9085,
+	0x0400, 0x9084, 0xdfff, 0x7852, 0x2001, 0x0021, 0x2004, 0x9084,
+	0x0003, 0x9086, 0x0001, 0x1120, 0x7850, 0x9084, 0xdfff, 0x7852,
+	0x784b, 0xf7f7, 0x7843, 0x0090, 0x7843, 0x0010, 0x20a9, 0x0028,
+	0xa001, 0x1f04, 0x3d20, 0x7850, 0x9085, 0x1400, 0x7852, 0x2019,
+	0x61a8, 0x7854, 0xa001, 0xa001, 0xd08c, 0x1110, 0x8319, 0x1dc8,
+	0x7827, 0x0048, 0x7850, 0x9085, 0x0400, 0x7852, 0x7843, 0x0040,
+	0x2019, 0x01f4, 0xa001, 0xa001, 0x8319, 0x1de0, 0x2001, 0x0100,
+	0x080c, 0x2b14, 0x7827, 0x0020, 0x7843, 0x0000, 0x9006, 0x080c,
+	0x2b14, 0x7827, 0x0048, 0x00fe, 0x0005, 0x7884, 0xd0ac, 0x11c8,
+	0x00f6, 0x00e6, 0x2071, 0x1a33, 0x2079, 0x0320, 0x2001, 0x0201,
+	0x2004, 0x9005, 0x0160, 0x7000, 0x9086, 0x0000, 0x1140, 0x0051,
+	0xd0bc, 0x0108, 0x8738, 0x7003, 0x0003, 0x782b, 0x0019, 0x00ee,
+	0x00fe, 0x0005, 0x00f6, 0x2079, 0x0300, 0x78bc, 0x00fe, 0x908c,
+	0x0070, 0x0178, 0x2009, 0x0032, 0x260a, 0x2009, 0x0033, 0x250a,
+	0xd0b4, 0x0108, 0x8c60, 0xd0ac, 0x0108, 0x8d68, 0xd0a4, 0x0108,
+	0x8b58, 0x0005, 0x00f6, 0x2079, 0x0200, 0x781c, 0xd084, 0x0110,
+	0x7837, 0x0050, 0x00fe, 0x0005, 0x00e6, 0x2071, 0x0100, 0x2001,
+	0x197b, 0x2004, 0x70e2, 0x080c, 0x3a7c, 0x1188, 0x2001, 0x181f,
+	0x2004, 0x2009, 0x181e, 0x210c, 0x918c, 0x00ff, 0x706e, 0x716a,
+	0x7066, 0x918d, 0x3200, 0x7162, 0x7073, 0xe109, 0x0080, 0x702c,
+	0x9085, 0x0002, 0x702e, 0x2009, 0x1817, 0x210c, 0x716e, 0x7063,
+	0x0100, 0x7166, 0x719e, 0x706b, 0x0000, 0x7073, 0x0809, 0x7077,
+	0x0008, 0x7078, 0x9080, 0x0100, 0x707a, 0x7080, 0x8000, 0x7082,
+	0x7087, 0xaaaa, 0x9006, 0x708a, 0x708e, 0x707e, 0x70d6, 0x70ab,
+	0x0036, 0x70af, 0x95d5, 0x7014, 0x9084, 0x1984, 0x9085, 0x0092,
+	0x7016, 0x080c, 0x3ed3, 0x00f6, 0x2071, 0x1a33, 0x2079, 0x0320,
+	0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0120, 0x689c, 0x780e,
+	0x6898, 0x780a, 0x00de, 0x2009, 0x03e8, 0x8109, 0x1df0, 0x792c,
+	0xd1fc, 0x0110, 0x782b, 0x0004, 0x2011, 0x0011, 0x080c, 0x3e5f,
+	0x2011, 0x0001, 0x080c, 0x3e5f, 0x00fe, 0x00ee, 0x0005, 0x00f6,
+	0x00e6, 0x2071, 0x1a33, 0x2079, 0x0320, 0x792c, 0xd1fc, 0x0904,
+	0x3e5c, 0x782b, 0x0002, 0x9026, 0xd19c, 0x1904, 0x3e58, 0x7000,
+	0x0002, 0x3e5c, 0x3e0d, 0x3e3d, 0x3e58, 0xd1bc, 0x1170, 0xd1dc,
+	0x1190, 0x8001, 0x7002, 0x2011, 0x0001, 0x080c, 0x3e5f, 0x0904,
+	0x3e5c, 0x080c, 0x3e5f, 0x0804, 0x3e5c, 0x00f6, 0x2079, 0x0300,
+	0x78bf, 0x0000, 0x00fe, 0x7810, 0x7914, 0x782b, 0x0004, 0x7812,
+	0x7916, 0x2001, 0x0201, 0x200c, 0x81ff, 0x0de8, 0x080c, 0x3d6a,
+	0x2009, 0x0001, 0x00f6, 0x2079, 0x0300, 0x78b8, 0x00fe, 0xd0ec,
+	0x0110, 0x2009, 0x0011, 0x792a, 0x00f8, 0x8001, 0x7002, 0x9184,
+	0x0880, 0x1140, 0x782c, 0xd0fc, 0x1904, 0x3e01, 0x2011, 0x0001,
+	0x00b1, 0x0090, 0xa010, 0x9092, 0x0004, 0x9086, 0x0015, 0x1120,
+	0xa000, 0xa05a, 0x2011, 0x0031, 0xa212, 0xd1dc, 0x1960, 0x0828,
+	0x782b, 0x0004, 0x7003, 0x0000, 0x00ee, 0x00fe, 0x0005, 0xa014,
+	0x9005, 0x0550, 0x8001, 0x0036, 0x0096, 0xa016, 0xa058, 0x2048,
+	0xa010, 0x2009, 0x0031, 0x911a, 0x831c, 0x831c, 0x938a, 0x0007,
+	0x1a0c, 0x0db4, 0x9398, 0x3e8d, 0x231d, 0x083f, 0x9080, 0x0004,
+	0x7a2a, 0x7100, 0x8108, 0x7102, 0x009e, 0x003e, 0x908a, 0x0035,
+	0x1140, 0x0096, 0xa058, 0x2048, 0xa804, 0xa05a, 0x2001, 0x0019,
+	0x009e, 0xa012, 0x9085, 0x0001, 0x0005, 0x3eca, 0x3ec1, 0x3eb8,
+	0x3eaf, 0x3ea6, 0x3e9d, 0x3e94, 0xa964, 0x7902, 0xa968, 0x7906,
+	0xa96c, 0x7912, 0xa970, 0x7916, 0x0005, 0xa974, 0x7902, 0xa978,
+	0x7906, 0xa97c, 0x7912, 0xa980, 0x7916, 0x0005, 0xa984, 0x7902,
+	0xa988, 0x7906, 0xa98c, 0x7912, 0xa990, 0x7916, 0x0005, 0xa994,
+	0x7902, 0xa998, 0x7906, 0xa99c, 0x7912, 0xa9a0, 0x7916, 0x0005,
+	0xa9a4, 0x7902, 0xa9a8, 0x7906, 0xa9ac, 0x7912, 0xa9b0, 0x7916,
+	0x0005, 0xa9b4, 0x7902, 0xa9b8, 0x7906, 0xa9bc, 0x7912, 0xa9c0,
+	0x7916, 0x0005, 0xa9c4, 0x7902, 0xa9c8, 0x7906, 0xa9cc, 0x7912,
+	0xa9d0, 0x7916, 0x0005, 0x00f6, 0x00e6, 0x0086, 0x2071, 0x1a36,
+	0x2079, 0x0090, 0x792c, 0xd1fc, 0x01e8, 0x782b, 0x0002, 0x2940,
+	0x9026, 0x7000, 0x0002, 0x3efa, 0x3ee6, 0x3ef1, 0x8001, 0x7002,
+	0xd19c, 0x1180, 0x2011, 0x0001, 0x080c, 0x3e5f, 0x190c, 0x3e5f,
+	0x0048, 0x8001, 0x7002, 0x782c, 0xd0fc, 0x1d38, 0x2011, 0x0001,
+	0x080c, 0x3e5f, 0x008e, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x00e6,
+	0x00c6, 0x0086, 0x2061, 0x0200, 0x2001, 0x197b, 0x2004, 0x601a,
+	0x2061, 0x0100, 0x2001, 0x197a, 0x2004, 0x60ce, 0x6104, 0xc1ac,
+	0x6106, 0x2001, 0x002c, 0x2004, 0x9005, 0x0520, 0x2038, 0x2001,
+	0x002e, 0x2024, 0x2001, 0x002f, 0x201c, 0x080c, 0x4879, 0xa813,
 	0x0019, 0xaf16, 0x2900, 0xa85a, 0x978a, 0x0007, 0x0220, 0x2138,
 	0x2009, 0x0007, 0x0010, 0x2708, 0x903e, 0x0096, 0xa858, 0x2048,
-	0xa85c, 0x9080, 0x0019, 0x009e, 0x080c, 0x3f6f, 0x1d68, 0x2900,
-	0xa85a, 0x00d8, 0x080c, 0x4872, 0x2940, 0xa013, 0x0019, 0xa017,
-	0x0001, 0x2800, 0xa05a, 0x2001, 0x0030, 0x2004, 0xa066, 0x2001,
-	0x0031, 0x2004, 0xa06a, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8,
-	0xa06e, 0x2001, 0x002b, 0x2004, 0xa072, 0x2001, 0x032a, 0x2003,
-	0x0004, 0x7884, 0xd0ac, 0x1180, 0x2001, 0x0101, 0x200c, 0x918d,
-	0x0200, 0x2102, 0xa017, 0x0000, 0x2001, 0x1a33, 0x2003, 0x0003,
-	0x2001, 0x032a, 0x2003, 0x0009, 0x2001, 0x0300, 0x2003, 0x0000,
-	0x2001, 0x020d, 0x2003, 0x0000, 0x2001, 0x0004, 0x200c, 0x918d,
-	0x0002, 0x2102, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x20a9,
-	0x0013, 0x20a1, 0x1840, 0x20e9, 0x0001, 0x9006, 0x4004, 0x2009,
-	0x013c, 0x200a, 0x012e, 0x7880, 0x9086, 0x0052, 0x0108, 0x0005,
-	0x0804, 0x3330, 0x7d98, 0x7c9c, 0x0804, 0x3427, 0x080c, 0x6fa7,
-	0x190c, 0x5c8f, 0x2069, 0x1853, 0x2d00, 0x2009, 0x0030, 0x7a8c,
-	0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x080c, 0x48bb, 0x701f,
-	0x4042, 0x0005, 0x080c, 0x538e, 0x1130, 0x3b00, 0x3a08, 0xc194,
-	0xc095, 0x20d8, 0x21d0, 0x2069, 0x1853, 0x6800, 0x9005, 0x0904,
-	0x3365, 0x6804, 0xd094, 0x00c6, 0x2061, 0x0100, 0x6104, 0x0138,
-	0x6200, 0x9292, 0x0005, 0x0218, 0x918c, 0xffdf, 0x0010, 0x918d,
-	0x0020, 0x6106, 0x00ce, 0xd08c, 0x00c6, 0x2061, 0x0100, 0x6104,
-	0x0118, 0x918d, 0x0010, 0x0010, 0x918c, 0xffef, 0x6106, 0x00ce,
-	0xd084, 0x0158, 0x6a28, 0x928a, 0x007f, 0x1a04, 0x3365, 0x9288,
-	0x3131, 0x210d, 0x918c, 0x00ff, 0x6162, 0xd0dc, 0x0130, 0x6828,
-	0x908a, 0x007f, 0x1a04, 0x3365, 0x605a, 0x6888, 0x9084, 0x0030,
-	0x8004, 0x8004, 0x8004, 0x8004, 0x0006, 0x2009, 0x1982, 0x9080,
-	0x279f, 0x2005, 0x200a, 0x000e, 0x2009, 0x1983, 0x9080, 0x27a3,
-	0x2005, 0x200a, 0x6808, 0x908a, 0x0100, 0x0a04, 0x3365, 0x908a,
-	0x0841, 0x1a04, 0x3365, 0x9084, 0x0007, 0x1904, 0x3365, 0x680c,
-	0x9005, 0x0904, 0x3365, 0x6810, 0x9005, 0x0904, 0x3365, 0x6848,
-	0x6940, 0x910a, 0x1a04, 0x3365, 0x8001, 0x0904, 0x3365, 0x684c,
-	0x6944, 0x910a, 0x1a04, 0x3365, 0x8001, 0x0904, 0x3365, 0x2009,
-	0x1952, 0x200b, 0x0000, 0x2001, 0x1875, 0x2004, 0xd0c4, 0x0140,
-	0x7884, 0x200a, 0x2009, 0x017f, 0x200a, 0x3b00, 0xc085, 0x20d8,
-	0x6814, 0x908c, 0x00ff, 0x614a, 0x8007, 0x9084, 0x00ff, 0x604e,
-	0x080c, 0x72bc, 0x080c, 0x6628, 0x080c, 0x665d, 0x6808, 0x602a,
-	0x080c, 0x21da, 0x2009, 0x0170, 0x200b, 0x0080, 0xa001, 0xa001,
-	0x200b, 0x0000, 0x0036, 0x6b08, 0x080c, 0x2706, 0x003e, 0x6000,
-	0x9086, 0x0000, 0x1904, 0x41bf, 0x6818, 0x691c, 0x6a20, 0x6b24,
-	0x8007, 0x810f, 0x8217, 0x831f, 0x6016, 0x611a, 0x621e, 0x6322,
-	0x6c04, 0xd4f4, 0x0148, 0x6830, 0x6934, 0x6a38, 0x6b3c, 0x8007,
-	0x810f, 0x8217, 0x831f, 0x0010, 0x9084, 0xf0ff, 0x6006, 0x610a,
-	0x620e, 0x6312, 0x8007, 0x810f, 0x8217, 0x831f, 0x20a9, 0x0004,
-	0x20a1, 0x1984, 0x20e9, 0x0001, 0x4001, 0x20a9, 0x0004, 0x20a1,
-	0x199e, 0x20e9, 0x0001, 0x4001, 0x080c, 0x8119, 0x00c6, 0x900e,
-	0x20a9, 0x0001, 0x6b70, 0xd384, 0x0510, 0x0068, 0x2009, 0x0100,
-	0x210c, 0x918e, 0x0008, 0x1110, 0x839d, 0x0010, 0x83f5, 0x3e18,
-	0x12b0, 0x3508, 0x8109, 0x080c, 0x7887, 0x6878, 0x6016, 0x6874,
-	0x2008, 0x9084, 0xff00, 0x8007, 0x600a, 0x9184, 0x00ff, 0x6006,
-	0x8108, 0x1118, 0x6003, 0x0003, 0x0010, 0x6003, 0x0001, 0x1f04,
-	0x412e, 0x00ce, 0x00c6, 0x2061, 0x196d, 0x2063, 0x0001, 0x9006,
-	0x080c, 0x29ad, 0x9006, 0x080c, 0x2990, 0x0000, 0x00ce, 0x00e6,
-	0x2c70, 0x080c, 0x0e80, 0x00ee, 0x6888, 0xd0ec, 0x0130, 0x2011,
-	0x0114, 0x2204, 0x9085, 0x0100, 0x2012, 0x6a80, 0x9284, 0x0030,
-	0x9086, 0x0030, 0x1128, 0x9294, 0xffcf, 0x9295, 0x0020, 0x6a82,
-	0x2001, 0x194d, 0x6a80, 0x9294, 0x0030, 0x928e, 0x0000, 0x0170,
-	0x928e, 0x0010, 0x0118, 0x928e, 0x0020, 0x0140, 0x2003, 0xaaaa,
-	0x080c, 0x277b, 0x2001, 0x193e, 0x2102, 0x0008, 0x2102, 0x00c6,
-	0x2061, 0x0100, 0x602f, 0x0040, 0x602f, 0x0000, 0x00ce, 0x080c,
-	0x6fa7, 0x0128, 0x080c, 0x4c8b, 0x0110, 0x080c, 0x26cc, 0x60d0,
-	0x9005, 0x01c0, 0x6003, 0x0001, 0x2009, 0x41a7, 0x00d0, 0x080c,
-	0x6fa7, 0x1168, 0x2011, 0x6e28, 0x080c, 0x8010, 0x2011, 0x6e1b,
-	0x080c, 0x80e4, 0x080c, 0x7290, 0x080c, 0x6ed9, 0x0040, 0x080c,
-	0x5b89, 0x0028, 0x6003, 0x0004, 0x2009, 0x41bf, 0x0010, 0x0804,
-	0x3330, 0x2001, 0x0170, 0x2004, 0x9084, 0x00ff, 0x9086, 0x004c,
-	0x1118, 0x2091, 0x30bd, 0x0817, 0x2091, 0x303d, 0x0817, 0x6000,
-	0x9086, 0x0000, 0x0904, 0x3362, 0x2069, 0x1853, 0x7890, 0x6842,
-	0x7894, 0x6846, 0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88, 0x7c9c,
-	0x7d98, 0x2039, 0x0001, 0x0804, 0x48be, 0x9006, 0x080c, 0x26cc,
-	0x81ff, 0x1904, 0x3362, 0x080c, 0x6fa7, 0x11b0, 0x080c, 0x728b,
-	0x080c, 0x5cca, 0x080c, 0x312c, 0x0118, 0x6130, 0xc18d, 0x6132,
-	0x080c, 0xc1f9, 0x0130, 0x080c, 0x6fca, 0x1118, 0x080c, 0x6f7f,
-	0x0038, 0x080c, 0x6ed9, 0x0020, 0x080c, 0x5c8f, 0x080c, 0x5b89,
-	0x0804, 0x3330, 0x81ff, 0x1904, 0x3362, 0x080c, 0x6fa7, 0x1110,
-	0x0804, 0x3362, 0x6190, 0x81ff, 0x01a8, 0x704f, 0x0000, 0x2001,
-	0x1c80, 0x2009, 0x0040, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0126,
-	0x2091, 0x8000, 0x2039, 0x0001, 0x080c, 0x48be, 0x701f, 0x332e,
-	0x012e, 0x0005, 0x704f, 0x0001, 0x00d6, 0x2069, 0x1c80, 0x20a9,
-	0x0040, 0x20e9, 0x0001, 0x20a1, 0x1c80, 0x2019, 0xffff, 0x4304,
-	0x6558, 0x9588, 0x3131, 0x210d, 0x918c, 0x00ff, 0x216a, 0x900e,
-	0x2011, 0x0002, 0x2100, 0x9506, 0x01a8, 0x080c, 0x6237, 0x1190,
-	0xb814, 0x821c, 0x0238, 0x9398, 0x1c80, 0x9085, 0xff00, 0x8007,
-	0x201a, 0x0038, 0x9398, 0x1c80, 0x2324, 0x94a4, 0xff00, 0x9405,
-	0x201a, 0x8210, 0x8108, 0x9182, 0x0080, 0x1208, 0x0c18, 0x8201,
-	0x8007, 0x2d0c, 0x9105, 0x206a, 0x00de, 0x20a9, 0x0040, 0x20a1,
-	0x1c80, 0x2099, 0x1c80, 0x080c, 0x5c1a, 0x0804, 0x4217, 0x080c,
-	0x48a5, 0x0904, 0x3365, 0x080c, 0x4872, 0x1120, 0x2009, 0x0002,
-	0x0804, 0x3362, 0x080c, 0x537f, 0xd0b4, 0x0558, 0x7884, 0x908e,
-	0x007e, 0x0538, 0x908e, 0x007f, 0x0520, 0x908e, 0x0080, 0x0508,
-	0x080c, 0x3127, 0x1148, 0xb800, 0xd08c, 0x11d8, 0xb804, 0x9084,
-	0x00ff, 0x9086, 0x0006, 0x11a8, 0xa867, 0x0000, 0xa868, 0xc0fd,
-	0xa86a, 0x080c, 0xbcc7, 0x1120, 0x2009, 0x0003, 0x0804, 0x3362,
-	0x7007, 0x0003, 0x701f, 0x42a5, 0x0005, 0x080c, 0x48a5, 0x0904,
-	0x3365, 0x20a9, 0x002b, 0xb8b4, 0x20e0, 0xb8b8, 0x2098, 0xa860,
-	0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003, 0x20a9, 0x0008,
-	0x9080, 0x0006, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006,
-	0x2098, 0x080c, 0x0f68, 0x0070, 0x20a9, 0x0004, 0xa85c, 0x9080,
-	0x000a, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x000a, 0x2098,
-	0x080c, 0x0f68, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084,
-	0xffc0, 0x9080, 0x0002, 0x2009, 0x002b, 0x7a8c, 0x7b88, 0x7c9c,
-	0x7d98, 0x0804, 0x48be, 0x81ff, 0x1904, 0x3362, 0x080c, 0x4889,
-	0x0904, 0x3365, 0x080c, 0x63a9, 0x0904, 0x3362, 0x0058, 0xa878,
-	0x9005, 0x0120, 0x2009, 0x0004, 0x0804, 0x3362, 0xa974, 0xaa94,
-	0x0804, 0x3330, 0x080c, 0x5387, 0x0904, 0x3330, 0x701f, 0x42ef,
-	0x7007, 0x0003, 0x0005, 0x81ff, 0x1904, 0x3362, 0x7888, 0x908a,
-	0x1000, 0x1a04, 0x3365, 0x080c, 0x48a5, 0x0904, 0x3365, 0x080c,
-	0x655b, 0x0120, 0x080c, 0x6563, 0x1904, 0x3365, 0x080c, 0x642e,
-	0x0904, 0x3362, 0x2019, 0x0004, 0x900e, 0x080c, 0x63bb, 0x0904,
-	0x3362, 0x7984, 0x7a88, 0x04c9, 0x08a8, 0xa89c, 0x908a, 0x1000,
-	0x12f8, 0x080c, 0x48a3, 0x01e0, 0x080c, 0x655b, 0x0118, 0x080c,
-	0x6563, 0x11b0, 0x080c, 0x642e, 0x2009, 0x0002, 0x0168, 0x2009,
-	0x0002, 0x2019, 0x0004, 0x080c, 0x63bb, 0x2009, 0x0003, 0x0120,
-	0xa998, 0xaa9c, 0x00d1, 0x0060, 0xa897, 0x4005, 0xa99a, 0x0010,
-	0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005,
-	0xa897, 0x4000, 0x080c, 0x5387, 0x0110, 0x9006, 0x0018, 0x900e,
-	0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x9186, 0x00ff, 0x0110,
-	0x0071, 0x0060, 0x2029, 0x007e, 0x2061, 0x1800, 0x6458, 0x2400,
-	0x9506, 0x0110, 0x2508, 0x0019, 0x8529, 0x1ec8, 0x0005, 0x080c,
-	0x6237, 0x1138, 0x2200, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c,
-	0x801e, 0x0005, 0x81ff, 0x1904, 0x3362, 0x798c, 0x2001, 0x1951,
-	0x918c, 0x8000, 0x2102, 0x080c, 0x4889, 0x0904, 0x3365, 0x080c,
-	0x655b, 0x0120, 0x080c, 0x6563, 0x1904, 0x3365, 0x080c, 0x62fe,
-	0x0904, 0x3362, 0x080c, 0x63b2, 0x0904, 0x3362, 0x2001, 0x1951,
-	0x2004, 0xd0fc, 0x1904, 0x3330, 0x0804, 0x42fa, 0xa9a0, 0x2001,
-	0x1951, 0x918c, 0x8000, 0xc18d, 0x2102, 0x080c, 0x4896, 0x01a0,
-	0x080c, 0x655b, 0x0118, 0x080c, 0x6563, 0x1170, 0x080c, 0x62fe,
-	0x2009, 0x0002, 0x0128, 0x080c, 0x63b2, 0x1170, 0x2009, 0x0003,
-	0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085,
-	0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0x2001, 0x1951,
-	0x2004, 0xd0fc, 0x1128, 0x080c, 0x5387, 0x0110, 0x9006, 0x0018,
-	0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x81ff, 0x1904,
-	0x3362, 0x798c, 0x2001, 0x1950, 0x918c, 0x8000, 0x2102, 0x080c,
-	0x4889, 0x0904, 0x3365, 0x080c, 0x655b, 0x0120, 0x080c, 0x6563,
-	0x1904, 0x3365, 0x080c, 0x62fe, 0x0904, 0x3362, 0x080c, 0x63a0,
-	0x0904, 0x3362, 0x2001, 0x1950, 0x2004, 0xd0fc, 0x1904, 0x3330,
-	0x0804, 0x42fa, 0xa9a0, 0x2001, 0x1950, 0x918c, 0x8000, 0xc18d,
-	0x2102, 0x080c, 0x4896, 0x01a0, 0x080c, 0x655b, 0x0118, 0x080c,
-	0x6563, 0x1170, 0x080c, 0x62fe, 0x2009, 0x0002, 0x0128, 0x080c,
-	0x63a0, 0x1170, 0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010,
-	0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005,
-	0xa897, 0x4000, 0x2001, 0x1950, 0x2004, 0xd0fc, 0x1128, 0x080c,
-	0x5387, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001,
-	0x0000, 0x0005, 0x6100, 0x0804, 0x3330, 0x080c, 0x48a5, 0x0904,
-	0x3365, 0x080c, 0x5393, 0x1904, 0x3362, 0x79a8, 0xd184, 0x1158,
-	0xb834, 0x8007, 0x789e, 0xb830, 0x8007, 0x789a, 0xbb2c, 0x831f,
-	0xba28, 0x8217, 0x0050, 0xb824, 0x8007, 0x789e, 0xb820, 0x8007,
-	0x789a, 0xbb1c, 0x831f, 0xba18, 0x8217, 0xb900, 0x918c, 0x0200,
-	0x0804, 0x3330, 0x78a8, 0x909c, 0x0003, 0xd0b4, 0x1148, 0x939a,
-	0x0003, 0x1a04, 0x3362, 0x6258, 0x7884, 0x9206, 0x1904, 0x44aa,
-	0x2031, 0x1848, 0x2009, 0x013c, 0x2136, 0x2001, 0x1840, 0x2009,
-	0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x0006,
-	0x78a8, 0x9084, 0x0080, 0x11c8, 0x0006, 0x0036, 0x2001, 0x1a4f,
-	0x201c, 0x7b9a, 0x2003, 0x0000, 0x2001, 0x1a50, 0x201c, 0x7b9e,
-	0x2003, 0x0000, 0x2001, 0x1a51, 0x201c, 0x7ba2, 0x2003, 0x0000,
-	0x003e, 0x000e, 0x000e, 0x0804, 0x48be, 0x000e, 0x2031, 0x0000,
-	0x2061, 0x18ae, 0x2c44, 0xa66a, 0xa17a, 0xa772, 0xa076, 0xa28e,
-	0xa392, 0xa496, 0xa59a, 0x080c, 0x10d5, 0x7007, 0x0002, 0x701f,
-	0x44ca, 0x0005, 0x81ff, 0x1904, 0x3362, 0x080c, 0x48a5, 0x0904,
-	0x3365, 0x080c, 0x655b, 0x1904, 0x3362, 0x00c6, 0x080c, 0x4872,
-	0x00ce, 0x0904, 0x3362, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a,
-	0x7ea8, 0x080c, 0xbc6d, 0x0904, 0x3362, 0x7007, 0x0003, 0x701f,
-	0x44e4, 0x0005, 0x080c, 0x4014, 0x0006, 0x0036, 0x2001, 0x1a4f,
-	0x201c, 0x7b9a, 0x2003, 0x0000, 0x2001, 0x1a50, 0x201c, 0x7b9e,
-	0x2003, 0x0000, 0x2001, 0x1a51, 0x201c, 0x7ba2, 0x2003, 0x0000,
-	0x003e, 0x000e, 0x0804, 0x3330, 0xa830, 0x9086, 0x0100, 0x0904,
-	0x3362, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0,
-	0x9080, 0x001b, 0x2009, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98,
-	0x0804, 0x48be, 0x9006, 0x080c, 0x26cc, 0x78a8, 0x9084, 0x00ff,
-	0x9086, 0x00ff, 0x0118, 0x81ff, 0x1904, 0x3362, 0x080c, 0x6fa7,
-	0x0110, 0x080c, 0x5c8f, 0x7888, 0x908a, 0x1000, 0x1a04, 0x3365,
-	0x7984, 0x9186, 0x00ff, 0x0138, 0x9182, 0x007f, 0x1a04, 0x3365,
-	0x2100, 0x080c, 0x2696, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000,
-	0x2061, 0x19cb, 0x601b, 0x0000, 0x601f, 0x0000, 0x6073, 0x0000,
-	0x6077, 0x0000, 0x080c, 0x6fa7, 0x1158, 0x080c, 0x728b, 0x080c,
-	0x5cca, 0x9085, 0x0001, 0x080c, 0x6fee, 0x080c, 0x6ed9, 0x00d0,
-	0x080c, 0x9d9f, 0x2061, 0x0100, 0x2001, 0x1817, 0x2004, 0x9084,
-	0x00ff, 0x810f, 0x9105, 0x604a, 0x6043, 0x0090, 0x6043, 0x0010,
-	0x2009, 0x196a, 0x200b, 0x0000, 0x2009, 0x002d, 0x2011, 0x5bb5,
-	0x080c, 0x80a2, 0x7984, 0x080c, 0x6fa7, 0x1110, 0x2009, 0x00ff,
-	0x7a88, 0x080c, 0x435d, 0x012e, 0x00ce, 0x002e, 0x0804, 0x3330,
-	0x7984, 0x080c, 0x61d7, 0x2b08, 0x1904, 0x3365, 0x0804, 0x3330,
-	0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x3362, 0x60d8, 0xd0ac,
-	0x1130, 0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, 0x3362, 0x080c,
-	0x4872, 0x1120, 0x2009, 0x0002, 0x0804, 0x3362, 0x7984, 0x9192,
-	0x0021, 0x1a04, 0x3365, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c,
-	0x9080, 0x0019, 0x702a, 0xaf60, 0x7736, 0x080c, 0x48bb, 0x701f,
-	0x4598, 0x7880, 0x9086, 0x006e, 0x0110, 0x701f, 0x4e3d, 0x0005,
-	0x2009, 0x0080, 0x080c, 0x6237, 0x1118, 0x080c, 0x655b, 0x0120,
-	0x2021, 0x400a, 0x0804, 0x3332, 0x00d6, 0x0096, 0xa964, 0xaa6c,
-	0xab70, 0xac74, 0xad78, 0xae7c, 0xa884, 0x90be, 0x0100, 0x0904,
-	0x4631, 0x90be, 0x0112, 0x0904, 0x4631, 0x90be, 0x0113, 0x0904,
-	0x4631, 0x90be, 0x0114, 0x0904, 0x4631, 0x90be, 0x0117, 0x0904,
-	0x4631, 0x90be, 0x011a, 0x0904, 0x4631, 0x90be, 0x011c, 0x0904,
-	0x4631, 0x90be, 0x0121, 0x0904, 0x4618, 0x90be, 0x0131, 0x0904,
-	0x4618, 0x90be, 0x0171, 0x0904, 0x4631, 0x90be, 0x0173, 0x0904,
-	0x4631, 0x90be, 0x01a1, 0x1128, 0xa894, 0x8007, 0xa896, 0x0804,
-	0x463c, 0x90be, 0x0212, 0x0904, 0x4625, 0x90be, 0x0213, 0x05e8,
-	0x90be, 0x0214, 0x0500, 0x90be, 0x0217, 0x0188, 0x90be, 0x021a,
-	0x1120, 0xa89c, 0x8007, 0xa89e, 0x04e0, 0x90be, 0x021f, 0x05c8,
-	0x90be, 0x0300, 0x05b0, 0x009e, 0x00de, 0x0804, 0x3365, 0x7028,
-	0x9080, 0x0010, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9,
-	0x0007, 0x080c, 0x467a, 0x7028, 0x9080, 0x000e, 0x2098, 0x20a0,
-	0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x467a, 0x00c8,
-	0x7028, 0x9080, 0x000c, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8,
-	0x20a9, 0x0001, 0x080c, 0x4687, 0x00b8, 0x7028, 0x9080, 0x000e,
-	0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c,
-	0x4687, 0x7028, 0x9080, 0x000c, 0x2098, 0x20a0, 0x7034, 0x20e0,
-	0x20e8, 0x20a9, 0x0001, 0x04f1, 0x00c6, 0x080c, 0x4872, 0x0550,
-	0xa868, 0xc0fd, 0xa86a, 0xa867, 0x0119, 0x9006, 0xa882, 0xa87f,
-	0x0020, 0xa88b, 0x0001, 0x810b, 0xa9ae, 0xa8b2, 0xaab6, 0xabba,
-	0xacbe, 0xadc2, 0xa9c6, 0xa8ca, 0x00ce, 0x009e, 0x00de, 0xa866,
-	0xa822, 0xa868, 0xc0fd, 0xa86a, 0xa804, 0x2048, 0x080c, 0xbc88,
-	0x1120, 0x2009, 0x0003, 0x0804, 0x3362, 0x7007, 0x0003, 0x701f,
-	0x4671, 0x0005, 0x00ce, 0x009e, 0x00de, 0x2009, 0x0002, 0x0804,
-	0x3362, 0xa820, 0x9086, 0x8001, 0x1904, 0x3330, 0x2009, 0x0004,
-	0x0804, 0x3362, 0x0016, 0x0026, 0x3510, 0x20a9, 0x0002, 0x4002,
-	0x4104, 0x4004, 0x8211, 0x1dc8, 0x002e, 0x001e, 0x0005, 0x0016,
-	0x0026, 0x0036, 0x0046, 0x3520, 0x20a9, 0x0004, 0x4002, 0x4304,
-	0x4204, 0x4104, 0x4004, 0x8421, 0x1db8, 0x004e, 0x003e, 0x002e,
-	0x001e, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x3362,
-	0x60d8, 0xd0ac, 0x1160, 0xd09c, 0x0120, 0x2009, 0x0016, 0x0804,
-	0x3362, 0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, 0x3362, 0x7984,
-	0x78a8, 0x2040, 0x080c, 0x9d98, 0x1120, 0x9182, 0x007f, 0x0a04,
-	0x3365, 0x9186, 0x00ff, 0x0904, 0x3365, 0x9182, 0x0800, 0x1a04,
-	0x3365, 0x7a8c, 0x7b88, 0x6078, 0x9306, 0x1140, 0x607c, 0x924e,
-	0x0904, 0x3365, 0x99cc, 0xff00, 0x0904, 0x3365, 0x0126, 0x2091,
-	0x8000, 0x0026, 0x2011, 0x8008, 0x080c, 0x657f, 0x002e, 0x0140,
-	0x918d, 0x8000, 0x080c, 0x65c9, 0x1118, 0x2001, 0x4009, 0x0458,
-	0x080c, 0x478c, 0x0560, 0x90c6, 0x4000, 0x1170, 0x00c6, 0x0006,
-	0x900e, 0x080c, 0x6457, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108,
-	0xc18d, 0x000e, 0x00ce, 0x00b8, 0x90c6, 0x4007, 0x1110, 0x2408,
-	0x0090, 0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0060, 0x90c6,
-	0x4009, 0x1108, 0x0040, 0x90c6, 0x4006, 0x1108, 0x0020, 0x2001,
-	0x4005, 0x2009, 0x000a, 0x2020, 0x012e, 0x0804, 0x3332, 0x2b00,
-	0x7026, 0x0016, 0x00b6, 0x00c6, 0x00e6, 0x2c70, 0x080c, 0x9e66,
-	0x0904, 0x4759, 0x2b00, 0x6012, 0x080c, 0xbf73, 0x2e58, 0x00ee,
-	0x00e6, 0x00c6, 0x080c, 0x4872, 0x00ce, 0x2b70, 0x1158, 0x080c,
-	0x9e19, 0x00ee, 0x00ce, 0x00be, 0x001e, 0x012e, 0x2009, 0x0002,
-	0x0804, 0x3362, 0x900e, 0xa966, 0xa96a, 0x2900, 0x6016, 0xa932,
-	0xa868, 0xc0fd, 0xd88c, 0x0108, 0xc0f5, 0xa86a, 0x080c, 0x2fd7,
-	0x6023, 0x0001, 0x9006, 0x080c, 0x6174, 0x2001, 0x0002, 0x080c,
-	0x6188, 0x2009, 0x0002, 0x080c, 0x9e93, 0x78a8, 0xd094, 0x0138,
-	0x00ee, 0x7024, 0x00e6, 0x2058, 0xb8bc, 0xc08d, 0xb8be, 0x9085,
-	0x0001, 0x00ee, 0x00ce, 0x00be, 0x001e, 0x012e, 0x1120, 0x2009,
-	0x0003, 0x0804, 0x3362, 0x7007, 0x0003, 0x701f, 0x4768, 0x0005,
-	0xa830, 0x2008, 0x918e, 0xdead, 0x1120, 0x2021, 0x4009, 0x0804,
-	0x3332, 0x9086, 0x0100, 0x7024, 0x2058, 0x1138, 0x2009, 0x0004,
-	0xba04, 0x9294, 0x00ff, 0x0804, 0x52dc, 0x900e, 0xa868, 0xd0f4,
-	0x1904, 0x3330, 0x080c, 0x6457, 0x1108, 0xc185, 0xb800, 0xd0bc,
-	0x0108, 0xc18d, 0x0804, 0x3330, 0x00e6, 0x00d6, 0x0096, 0x83ff,
-	0x0904, 0x47d4, 0x902e, 0x080c, 0x9d98, 0x0130, 0x9026, 0x20a9,
-	0x0800, 0x2071, 0x1000, 0x0030, 0x2021, 0x007f, 0x20a9, 0x0781,
-	0x2071, 0x107f, 0x2e04, 0x9005, 0x11b0, 0x2100, 0x9406, 0x15e8,
-	0x2428, 0x94ce, 0x007f, 0x1120, 0x92ce, 0xfffd, 0x1528, 0x0030,
-	0x94ce, 0x0080, 0x1130, 0x92ce, 0xfffc, 0x11f0, 0x93ce, 0x00ff,
-	0x11d8, 0xc5fd, 0x0450, 0x2058, 0xbf10, 0x2700, 0x9306, 0x11b8,
-	0xbe14, 0x2600, 0x9206, 0x1198, 0x2400, 0x9106, 0x1150, 0xd884,
-	0x0568, 0xd894, 0x1558, 0x080c, 0x655b, 0x1540, 0x2001, 0x4000,
-	0x0430, 0x2001, 0x4007, 0x0418, 0x2001, 0x4006, 0x0400, 0x2400,
-	0x9106, 0x1158, 0xbe14, 0x87ff, 0x1128, 0x86ff, 0x0948, 0x080c,
-	0x9d98, 0x1930, 0x2001, 0x4008, 0x0090, 0x8420, 0x8e70, 0x1f04,
-	0x47a2, 0x85ff, 0x1130, 0x2001, 0x4009, 0x0048, 0x2001, 0x0001,
-	0x0030, 0x080c, 0x61d7, 0x1dd0, 0xbb12, 0xba16, 0x9006, 0x9005,
-	0x009e, 0x00de, 0x00ee, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001,
-	0x0804, 0x3362, 0x080c, 0x4872, 0x1120, 0x2009, 0x0002, 0x0804,
-	0x3362, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x7884, 0x9005,
-	0x0904, 0x3365, 0x9096, 0x00ff, 0x0120, 0x9092, 0x0004, 0x1a04,
-	0x3365, 0x2010, 0x2918, 0x080c, 0x2f7d, 0x1120, 0x2009, 0x0003,
-	0x0804, 0x3362, 0x7007, 0x0003, 0x701f, 0x4827, 0x0005, 0xa830,
-	0x9086, 0x0100, 0x1904, 0x3330, 0x2009, 0x0004, 0x0804, 0x3362,
-	0x7984, 0x080c, 0x9d98, 0x1120, 0x9182, 0x007f, 0x0a04, 0x3365,
-	0x9186, 0x00ff, 0x0904, 0x3365, 0x9182, 0x0800, 0x1a04, 0x3365,
-	0x2001, 0x9000, 0x080c, 0x5337, 0x1904, 0x3362, 0x0804, 0x3330,
-	0xa998, 0x080c, 0x9d98, 0x1118, 0x9182, 0x007f, 0x0280, 0x9186,
-	0x00ff, 0x0168, 0x9182, 0x0800, 0x1250, 0x2001, 0x9000, 0x080c,
-	0x5337, 0x11a8, 0x0060, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897,
+	0xa85c, 0x9080, 0x0019, 0x009e, 0x080c, 0x3f76, 0x1d68, 0x2900,
+	0xa85a, 0x00d0, 0x080c, 0x4879, 0xa813, 0x0019, 0xa817, 0x0001,
+	0x2900, 0xa85a, 0x2001, 0x002e, 0x2004, 0xa866, 0x2001, 0x002f,
+	0x2004, 0xa86a, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0xa86e,
+	0x2001, 0x002b, 0x2004, 0xa872, 0x2061, 0x0090, 0x2079, 0x0100,
+	0x2001, 0x197a, 0x2004, 0x6036, 0x2009, 0x0040, 0x080c, 0x2268,
+	0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0x601a, 0x0006, 0x2001,
+	0x002b, 0x2004, 0x601e, 0x78c6, 0x000e, 0x78ca, 0x9006, 0x600a,
+	0x600e, 0x008e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x00e6, 0x2071,
+	0x0080, 0xaa60, 0x22e8, 0x20a0, 0x20e1, 0x0000, 0x2099, 0x0088,
+	0x702b, 0x0026, 0x7402, 0x7306, 0x9006, 0x700a, 0x700e, 0x810b,
+	0x810b, 0x21a8, 0x810b, 0x7112, 0x702b, 0x0041, 0x702c, 0xd0fc,
+	0x0de8, 0x702b, 0x0002, 0x702b, 0x0040, 0x4005, 0x7400, 0x7304,
+	0x87ff, 0x0190, 0x0086, 0x0096, 0x2940, 0x0086, 0x080c, 0x4879,
+	0x008e, 0xa058, 0x00a6, 0x2050, 0x2900, 0xb006, 0xa05a, 0x00ae,
+	0x009e, 0x008e, 0x9085, 0x0001, 0x00ee, 0x0005, 0x00e6, 0x2001,
+	0x002d, 0x2004, 0x9005, 0x0528, 0x2038, 0x2001, 0x0030, 0x2024,
+	0x2001, 0x0031, 0x201c, 0x080c, 0x4879, 0x2940, 0xa813, 0x0019,
+	0xaf16, 0x2900, 0xa85a, 0x978a, 0x0007, 0x0220, 0x2138, 0x2009,
+	0x0007, 0x0010, 0x2708, 0x903e, 0x0096, 0xa858, 0x2048, 0xa85c,
+	0x9080, 0x0019, 0x009e, 0x080c, 0x3f76, 0x1d68, 0x2900, 0xa85a,
+	0x00d8, 0x080c, 0x4879, 0x2940, 0xa013, 0x0019, 0xa017, 0x0001,
+	0x2800, 0xa05a, 0x2001, 0x0030, 0x2004, 0xa066, 0x2001, 0x0031,
+	0x2004, 0xa06a, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0xa06e,
+	0x2001, 0x002b, 0x2004, 0xa072, 0x2001, 0x032a, 0x2003, 0x0004,
+	0x7884, 0xd0ac, 0x1180, 0x2001, 0x0101, 0x200c, 0x918d, 0x0200,
+	0x2102, 0xa017, 0x0000, 0x2001, 0x1a33, 0x2003, 0x0003, 0x2001,
+	0x032a, 0x2003, 0x0009, 0x2001, 0x0300, 0x2003, 0x0000, 0x2001,
+	0x020d, 0x2003, 0x0000, 0x2001, 0x0004, 0x200c, 0x918d, 0x0002,
+	0x2102, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x20a9, 0x0013,
+	0x20a1, 0x1840, 0x20e9, 0x0001, 0x9006, 0x4004, 0x2009, 0x013c,
+	0x200a, 0x012e, 0x7880, 0x9086, 0x0052, 0x0108, 0x0005, 0x0804,
+	0x3337, 0x7d98, 0x7c9c, 0x0804, 0x342e, 0x080c, 0x6fb2, 0x190c,
+	0x5c96, 0x2069, 0x1853, 0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88,
+	0x7c9c, 0x7d98, 0x2039, 0x0001, 0x080c, 0x48c2, 0x701f, 0x4049,
+	0x0005, 0x080c, 0x5395, 0x1130, 0x3b00, 0x3a08, 0xc194, 0xc095,
+	0x20d8, 0x21d0, 0x2069, 0x1853, 0x6800, 0x9005, 0x0904, 0x336c,
+	0x6804, 0xd094, 0x00c6, 0x2061, 0x0100, 0x6104, 0x0138, 0x6200,
+	0x9292, 0x0005, 0x0218, 0x918c, 0xffdf, 0x0010, 0x918d, 0x0020,
+	0x6106, 0x00ce, 0xd08c, 0x00c6, 0x2061, 0x0100, 0x6104, 0x0118,
+	0x918d, 0x0010, 0x0010, 0x918c, 0xffef, 0x6106, 0x00ce, 0xd084,
+	0x0158, 0x6a28, 0x928a, 0x007f, 0x1a04, 0x336c, 0x9288, 0x3138,
+	0x210d, 0x918c, 0x00ff, 0x6162, 0xd0dc, 0x0130, 0x6828, 0x908a,
+	0x007f, 0x1a04, 0x336c, 0x605a, 0x6888, 0x9084, 0x0030, 0x8004,
+	0x8004, 0x8004, 0x8004, 0x0006, 0x2009, 0x1982, 0x9080, 0x279f,
+	0x2005, 0x200a, 0x000e, 0x2009, 0x1983, 0x9080, 0x27a3, 0x2005,
+	0x200a, 0x6808, 0x908a, 0x0100, 0x0a04, 0x336c, 0x908a, 0x0841,
+	0x1a04, 0x336c, 0x9084, 0x0007, 0x1904, 0x336c, 0x680c, 0x9005,
+	0x0904, 0x336c, 0x6810, 0x9005, 0x0904, 0x336c, 0x6848, 0x6940,
+	0x910a, 0x1a04, 0x336c, 0x8001, 0x0904, 0x336c, 0x684c, 0x6944,
+	0x910a, 0x1a04, 0x336c, 0x8001, 0x0904, 0x336c, 0x2009, 0x1952,
+	0x200b, 0x0000, 0x2001, 0x1875, 0x2004, 0xd0c4, 0x0140, 0x7884,
+	0x200a, 0x2009, 0x017f, 0x200a, 0x3b00, 0xc085, 0x20d8, 0x6814,
+	0x908c, 0x00ff, 0x614a, 0x8007, 0x9084, 0x00ff, 0x604e, 0x080c,
+	0x72c7, 0x080c, 0x662f, 0x080c, 0x6664, 0x6808, 0x602a, 0x080c,
+	0x21da, 0x2009, 0x0170, 0x200b, 0x0080, 0xa001, 0xa001, 0x200b,
+	0x0000, 0x0036, 0x6b08, 0x080c, 0x2706, 0x003e, 0x6000, 0x9086,
+	0x0000, 0x1904, 0x41c6, 0x6818, 0x691c, 0x6a20, 0x6b24, 0x8007,
+	0x810f, 0x8217, 0x831f, 0x6016, 0x611a, 0x621e, 0x6322, 0x6c04,
+	0xd4f4, 0x0148, 0x6830, 0x6934, 0x6a38, 0x6b3c, 0x8007, 0x810f,
+	0x8217, 0x831f, 0x0010, 0x9084, 0xf0ff, 0x6006, 0x610a, 0x620e,
+	0x6312, 0x8007, 0x810f, 0x8217, 0x831f, 0x20a9, 0x0004, 0x20a1,
+	0x1984, 0x20e9, 0x0001, 0x4001, 0x20a9, 0x0004, 0x20a1, 0x199e,
+	0x20e9, 0x0001, 0x4001, 0x080c, 0x8141, 0x00c6, 0x900e, 0x20a9,
+	0x0001, 0x6b70, 0xd384, 0x0510, 0x0068, 0x2009, 0x0100, 0x210c,
+	0x918e, 0x0008, 0x1110, 0x839d, 0x0010, 0x83f5, 0x3e18, 0x12b0,
+	0x3508, 0x8109, 0x080c, 0x7892, 0x6878, 0x6016, 0x6874, 0x2008,
+	0x9084, 0xff00, 0x8007, 0x600a, 0x9184, 0x00ff, 0x6006, 0x8108,
+	0x1118, 0x6003, 0x0003, 0x0010, 0x6003, 0x0001, 0x1f04, 0x4135,
+	0x00ce, 0x00c6, 0x2061, 0x196d, 0x2063, 0x0001, 0x9006, 0x080c,
+	0x29ad, 0x9006, 0x080c, 0x2990, 0x0000, 0x00ce, 0x00e6, 0x2c70,
+	0x080c, 0x0e80, 0x00ee, 0x6888, 0xd0ec, 0x0130, 0x2011, 0x0114,
+	0x2204, 0x9085, 0x0100, 0x2012, 0x6a80, 0x9284, 0x0030, 0x9086,
+	0x0030, 0x1128, 0x9294, 0xffcf, 0x9295, 0x0020, 0x6a82, 0x2001,
+	0x194d, 0x6a80, 0x9294, 0x0030, 0x928e, 0x0000, 0x0170, 0x928e,
+	0x0010, 0x0118, 0x928e, 0x0020, 0x0140, 0x2003, 0xaaaa, 0x080c,
+	0x277b, 0x2001, 0x193e, 0x2102, 0x0008, 0x2102, 0x00c6, 0x2061,
+	0x0100, 0x602f, 0x0040, 0x602f, 0x0000, 0x00ce, 0x080c, 0x6fb2,
+	0x0128, 0x080c, 0x4c92, 0x0110, 0x080c, 0x26cc, 0x60d0, 0x9005,
+	0x01c0, 0x6003, 0x0001, 0x2009, 0x41ae, 0x00d0, 0x080c, 0x6fb2,
+	0x1168, 0x2011, 0x6e33, 0x080c, 0x8038, 0x2011, 0x6e26, 0x080c,
+	0x810c, 0x080c, 0x729b, 0x080c, 0x6ee4, 0x0040, 0x080c, 0x5b90,
+	0x0028, 0x6003, 0x0004, 0x2009, 0x41c6, 0x0010, 0x0804, 0x3337,
+	0x2001, 0x0170, 0x2004, 0x9084, 0x00ff, 0x9086, 0x004c, 0x1118,
+	0x2091, 0x30bd, 0x0817, 0x2091, 0x303d, 0x0817, 0x6000, 0x9086,
+	0x0000, 0x0904, 0x3369, 0x2069, 0x1853, 0x7890, 0x6842, 0x7894,
+	0x6846, 0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98,
+	0x2039, 0x0001, 0x0804, 0x48c5, 0x9006, 0x080c, 0x26cc, 0x81ff,
+	0x1904, 0x3369, 0x080c, 0x6fb2, 0x11b0, 0x080c, 0x7296, 0x080c,
+	0x5cd1, 0x080c, 0x3133, 0x0118, 0x6130, 0xc18d, 0x6132, 0x080c,
+	0xc212, 0x0130, 0x080c, 0x6fd5, 0x1118, 0x080c, 0x6f8a, 0x0038,
+	0x080c, 0x6ee4, 0x0020, 0x080c, 0x5c96, 0x080c, 0x5b90, 0x0804,
+	0x3337, 0x81ff, 0x1904, 0x3369, 0x080c, 0x6fb2, 0x1110, 0x0804,
+	0x3369, 0x6190, 0x81ff, 0x01a8, 0x704f, 0x0000, 0x2001, 0x1c80,
+	0x2009, 0x0040, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0126, 0x2091,
+	0x8000, 0x2039, 0x0001, 0x080c, 0x48c5, 0x701f, 0x3335, 0x012e,
+	0x0005, 0x704f, 0x0001, 0x00d6, 0x2069, 0x1c80, 0x20a9, 0x0040,
+	0x20e9, 0x0001, 0x20a1, 0x1c80, 0x2019, 0xffff, 0x4304, 0x6558,
+	0x9588, 0x3138, 0x210d, 0x918c, 0x00ff, 0x216a, 0x900e, 0x2011,
+	0x0002, 0x2100, 0x9506, 0x01a8, 0x080c, 0x623e, 0x1190, 0xb814,
+	0x821c, 0x0238, 0x9398, 0x1c80, 0x9085, 0xff00, 0x8007, 0x201a,
+	0x0038, 0x9398, 0x1c80, 0x2324, 0x94a4, 0xff00, 0x9405, 0x201a,
+	0x8210, 0x8108, 0x9182, 0x0080, 0x1208, 0x0c18, 0x8201, 0x8007,
+	0x2d0c, 0x9105, 0x206a, 0x00de, 0x20a9, 0x0040, 0x20a1, 0x1c80,
+	0x2099, 0x1c80, 0x080c, 0x5c21, 0x0804, 0x421e, 0x080c, 0x48ac,
+	0x0904, 0x336c, 0x080c, 0x4879, 0x1120, 0x2009, 0x0002, 0x0804,
+	0x3369, 0x080c, 0x5386, 0xd0b4, 0x0558, 0x7884, 0x908e, 0x007e,
+	0x0538, 0x908e, 0x007f, 0x0520, 0x908e, 0x0080, 0x0508, 0x080c,
+	0x312e, 0x1148, 0xb800, 0xd08c, 0x11d8, 0xb804, 0x9084, 0x00ff,
+	0x9086, 0x0006, 0x11a8, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a,
+	0x080c, 0xbce0, 0x1120, 0x2009, 0x0003, 0x0804, 0x3369, 0x7007,
+	0x0003, 0x701f, 0x42ac, 0x0005, 0x080c, 0x48ac, 0x0904, 0x336c,
+	0x20a9, 0x002b, 0xb8b4, 0x20e0, 0xb8b8, 0x2098, 0xa860, 0x20e8,
+	0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003, 0x20a9, 0x0008, 0x9080,
+	0x0006, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098,
+	0x080c, 0x0f68, 0x0070, 0x20a9, 0x0004, 0xa85c, 0x9080, 0x000a,
+	0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x000a, 0x2098, 0x080c,
+	0x0f68, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0,
+	0x9080, 0x0002, 0x2009, 0x002b, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98,
+	0x0804, 0x48c5, 0x81ff, 0x1904, 0x3369, 0x080c, 0x4890, 0x0904,
+	0x336c, 0x080c, 0x63b0, 0x0904, 0x3369, 0x0058, 0xa878, 0x9005,
+	0x0120, 0x2009, 0x0004, 0x0804, 0x3369, 0xa974, 0xaa94, 0x0804,
+	0x3337, 0x080c, 0x538e, 0x0904, 0x3337, 0x701f, 0x42f6, 0x7007,
+	0x0003, 0x0005, 0x81ff, 0x1904, 0x3369, 0x7888, 0x908a, 0x1000,
+	0x1a04, 0x336c, 0x080c, 0x48ac, 0x0904, 0x336c, 0x080c, 0x6562,
+	0x0120, 0x080c, 0x656a, 0x1904, 0x336c, 0x080c, 0x6435, 0x0904,
+	0x3369, 0x2019, 0x0004, 0x900e, 0x080c, 0x63c2, 0x0904, 0x3369,
+	0x7984, 0x7a88, 0x04c9, 0x08a8, 0xa89c, 0x908a, 0x1000, 0x12f8,
+	0x080c, 0x48aa, 0x01e0, 0x080c, 0x6562, 0x0118, 0x080c, 0x656a,
+	0x11b0, 0x080c, 0x6435, 0x2009, 0x0002, 0x0168, 0x2009, 0x0002,
+	0x2019, 0x0004, 0x080c, 0x63c2, 0x2009, 0x0003, 0x0120, 0xa998,
+	0xaa9c, 0x00d1, 0x0060, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897,
+	0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897,
+	0x4000, 0x080c, 0x538e, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085,
+	0x0001, 0x2001, 0x0000, 0x0005, 0x9186, 0x00ff, 0x0110, 0x0071,
+	0x0060, 0x2029, 0x007e, 0x2061, 0x1800, 0x6458, 0x2400, 0x9506,
+	0x0110, 0x2508, 0x0019, 0x8529, 0x1ec8, 0x0005, 0x080c, 0x623e,
+	0x1138, 0x2200, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, 0x8046,
+	0x0005, 0x81ff, 0x1904, 0x3369, 0x798c, 0x2001, 0x1951, 0x918c,
+	0x8000, 0x2102, 0x080c, 0x4890, 0x0904, 0x336c, 0x080c, 0x6562,
+	0x0120, 0x080c, 0x656a, 0x1904, 0x336c, 0x080c, 0x6305, 0x0904,
+	0x3369, 0x080c, 0x63b9, 0x0904, 0x3369, 0x2001, 0x1951, 0x2004,
+	0xd0fc, 0x1904, 0x3337, 0x0804, 0x4301, 0xa9a0, 0x2001, 0x1951,
+	0x918c, 0x8000, 0xc18d, 0x2102, 0x080c, 0x489d, 0x01a0, 0x080c,
+	0x6562, 0x0118, 0x080c, 0x656a, 0x1170, 0x080c, 0x6305, 0x2009,
+	0x0002, 0x0128, 0x080c, 0x63b9, 0x1170, 0x2009, 0x0003, 0xa897,
+	0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001,
+	0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0x2001, 0x1951, 0x2004,
+	0xd0fc, 0x1128, 0x080c, 0x538e, 0x0110, 0x9006, 0x0018, 0x900e,
+	0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x81ff, 0x1904, 0x3369,
+	0x798c, 0x2001, 0x1950, 0x918c, 0x8000, 0x2102, 0x080c, 0x4890,
+	0x0904, 0x336c, 0x080c, 0x6562, 0x0120, 0x080c, 0x656a, 0x1904,
+	0x336c, 0x080c, 0x6305, 0x0904, 0x3369, 0x080c, 0x63a7, 0x0904,
+	0x3369, 0x2001, 0x1950, 0x2004, 0xd0fc, 0x1904, 0x3337, 0x0804,
+	0x4301, 0xa9a0, 0x2001, 0x1950, 0x918c, 0x8000, 0xc18d, 0x2102,
+	0x080c, 0x489d, 0x01a0, 0x080c, 0x6562, 0x0118, 0x080c, 0x656a,
+	0x1170, 0x080c, 0x6305, 0x2009, 0x0002, 0x0128, 0x080c, 0x63a7,
+	0x1170, 0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897,
 	0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897,
-	0x4000, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x2009,
-	0x000a, 0x0c48, 0x080c, 0x0feb, 0x0198, 0x9006, 0xa802, 0x7014,
-	0x9005, 0x1120, 0x2900, 0x7016, 0x701a, 0x0040, 0x7018, 0xa802,
-	0x0086, 0x2040, 0x2900, 0xa006, 0x701a, 0x008e, 0x9085, 0x0001,
-	0x0005, 0x7984, 0x080c, 0x6237, 0x1130, 0x7e88, 0x9684, 0x3fff,
-	0x9082, 0x4000, 0x0208, 0x905e, 0x8bff, 0x0005, 0xa998, 0x080c,
-	0x6237, 0x1130, 0xae9c, 0x9684, 0x3fff, 0x9082, 0x4000, 0x0208,
-	0x905e, 0x8bff, 0x0005, 0xae98, 0x0008, 0x7e84, 0x2608, 0x080c,
-	0x6237, 0x1108, 0x0008, 0x905e, 0x8bff, 0x0005, 0x0016, 0x7114,
-	0x81ff, 0x0128, 0x2148, 0xa904, 0x080c, 0x101d, 0x0cc8, 0x7116,
-	0x711a, 0x001e, 0x0005, 0x2031, 0x0001, 0x0010, 0x2031, 0x0000,
-	0x2061, 0x18ae, 0x2c44, 0xa66a, 0xa17a, 0xa772, 0xa076, 0xa28e,
-	0xa392, 0xa496, 0xa59a, 0x080c, 0x10d5, 0x7007, 0x0002, 0x701f,
-	0x3330, 0x0005, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2079, 0x0000,
-	0x2001, 0x18a6, 0x2004, 0x9005, 0x1190, 0x0e04, 0x48ef, 0x7a36,
-	0x7833, 0x0012, 0x7a82, 0x7b86, 0x7c8a, 0x2091, 0x4080, 0x2001,
-	0x0089, 0x2004, 0xd084, 0x190c, 0x1187, 0x0804, 0x4955, 0x0016,
-	0x0086, 0x0096, 0x00c6, 0x00e6, 0x2071, 0x1894, 0x7044, 0x9005,
-	0x1540, 0x7148, 0x9182, 0x0010, 0x0288, 0x7038, 0x2060, 0x080c,
-	0x0feb, 0x0904, 0x494d, 0xa84b, 0x0000, 0x2900, 0x7046, 0x2001,
-	0x0002, 0x9080, 0x1f26, 0x2005, 0xa846, 0x0098, 0x7038, 0x90e0,
-	0x0004, 0x2001, 0x18b0, 0x9c82, 0x18f0, 0x0210, 0x2061, 0x18b0,
-	0x2c00, 0x703a, 0x7148, 0x81ff, 0x1108, 0x703e, 0x8108, 0x714a,
-	0x0460, 0x7148, 0x8108, 0x714a, 0x7044, 0x2040, 0xa144, 0x2105,
-	0x0016, 0x908a, 0x0036, 0x1a0c, 0x0db4, 0x2060, 0x001e, 0x8108,
-	0x2105, 0x9005, 0xa146, 0x1520, 0x080c, 0x0feb, 0x1130, 0x8109,
-	0xa946, 0x7148, 0x8109, 0x714a, 0x00d8, 0x9006, 0xa806, 0xa84a,
-	0xa046, 0x2800, 0xa802, 0x2900, 0xa006, 0x7046, 0x2001, 0x0002,
-	0x9080, 0x1f26, 0x2005, 0xa846, 0x0058, 0x2262, 0x6306, 0x640a,
-	0x00ee, 0x00ce, 0x009e, 0x008e, 0x001e, 0x012e, 0x00fe, 0x0005,
-	0x2c00, 0x9082, 0x001b, 0x0002, 0x4977, 0x4977, 0x4979, 0x4977,
-	0x4977, 0x4977, 0x497d, 0x4977, 0x4977, 0x4977, 0x4981, 0x4977,
-	0x4977, 0x4977, 0x4985, 0x4977, 0x4977, 0x4977, 0x4989, 0x4977,
-	0x4977, 0x4977, 0x498d, 0x4977, 0x4977, 0x4977, 0x4992, 0x080c,
-	0x0db4, 0xa276, 0xa37a, 0xa47e, 0x0898, 0xa286, 0xa38a, 0xa48e,
-	0x0878, 0xa296, 0xa39a, 0xa49e, 0x0858, 0xa2a6, 0xa3aa, 0xa4ae,
-	0x0838, 0xa2b6, 0xa3ba, 0xa4be, 0x0818, 0xa2c6, 0xa3ca, 0xa4ce,
-	0x0804, 0x4950, 0xa2d6, 0xa3da, 0xa4de, 0x0804, 0x4950, 0x00e6,
-	0x2071, 0x1894, 0x7048, 0x9005, 0x0904, 0x4a29, 0x0126, 0x2091,
-	0x8000, 0x0e04, 0x4a28, 0x00f6, 0x2079, 0x0000, 0x00c6, 0x0096,
-	0x0086, 0x0076, 0x9006, 0x2038, 0x7040, 0x2048, 0x9005, 0x0500,
-	0xa948, 0x2105, 0x0016, 0x908a, 0x0036, 0x1a0c, 0x0db4, 0x2060,
-	0x001e, 0x8108, 0x2105, 0x9005, 0xa94a, 0x1904, 0x4a2b, 0xa804,
-	0x9005, 0x090c, 0x0db4, 0x7042, 0x2938, 0x2040, 0xa003, 0x0000,
-	0x2001, 0x0002, 0x9080, 0x1f26, 0x2005, 0xa04a, 0x0804, 0x4a2b,
-	0x703c, 0x2060, 0x2c14, 0x6304, 0x6408, 0x650c, 0x2200, 0x7836,
-	0x7833, 0x0012, 0x7882, 0x2300, 0x7886, 0x2400, 0x788a, 0x2091,
-	0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1187, 0x87ff,
-	0x0118, 0x2748, 0x080c, 0x101d, 0x7048, 0x8001, 0x704a, 0x9005,
-	0x1170, 0x7040, 0x2048, 0x9005, 0x0128, 0x080c, 0x101d, 0x9006,
-	0x7042, 0x7046, 0x703b, 0x18b0, 0x703f, 0x18b0, 0x0420, 0x7040,
-	0x9005, 0x1508, 0x7238, 0x2c00, 0x9206, 0x0148, 0x9c80, 0x0004,
-	0x90fa, 0x18f0, 0x0210, 0x2001, 0x18b0, 0x703e, 0x00a0, 0x9006,
-	0x703e, 0x703a, 0x7044, 0x9005, 0x090c, 0x0db4, 0x2048, 0xa800,
-	0x9005, 0x1de0, 0x2900, 0x7042, 0x2001, 0x0002, 0x9080, 0x1f26,
-	0x2005, 0xa84a, 0x0000, 0x007e, 0x008e, 0x009e, 0x00ce, 0x00fe,
-	0x012e, 0x00ee, 0x0005, 0x2c00, 0x9082, 0x001b, 0x0002, 0x4a4a,
-	0x4a4a, 0x4a4c, 0x4a4a, 0x4a4a, 0x4a4a, 0x4a51, 0x4a4a, 0x4a4a,
-	0x4a4a, 0x4a56, 0x4a4a, 0x4a4a, 0x4a4a, 0x4a5b, 0x4a4a, 0x4a4a,
-	0x4a4a, 0x4a60, 0x4a4a, 0x4a4a, 0x4a4a, 0x4a65, 0x4a4a, 0x4a4a,
-	0x4a4a, 0x4a6a, 0x080c, 0x0db4, 0xaa74, 0xab78, 0xac7c, 0x0804,
-	0x49d6, 0xaa84, 0xab88, 0xac8c, 0x0804, 0x49d6, 0xaa94, 0xab98,
-	0xac9c, 0x0804, 0x49d6, 0xaaa4, 0xaba8, 0xacac, 0x0804, 0x49d6,
-	0xaab4, 0xabb8, 0xacbc, 0x0804, 0x49d6, 0xaac4, 0xabc8, 0xaccc,
-	0x0804, 0x49d6, 0xaad4, 0xabd8, 0xacdc, 0x0804, 0x49d6, 0x0026,
-	0x080c, 0x537f, 0xd0c4, 0x0120, 0x2011, 0x8014, 0x080c, 0x48d2,
-	0x002e, 0x0005, 0x81ff, 0x1904, 0x3362, 0x0126, 0x2091, 0x8000,
-	0x6030, 0xc08d, 0xc085, 0xc0ac, 0x6032, 0x080c, 0x6fa7, 0x1158,
-	0x080c, 0x728b, 0x080c, 0x5cca, 0x9085, 0x0001, 0x080c, 0x6fee,
-	0x080c, 0x6ed9, 0x0010, 0x080c, 0x5b89, 0x012e, 0x0804, 0x3330,
-	0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x3362, 0x080c, 0x5393,
-	0x0120, 0x2009, 0x0007, 0x0804, 0x3362, 0x080c, 0x6553, 0x0120,
-	0x2009, 0x0008, 0x0804, 0x3362, 0x0026, 0x2011, 0x0010, 0x080c,
-	0x657f, 0x002e, 0x0140, 0x7984, 0x080c, 0x65c9, 0x1120, 0x2009,
-	0x4009, 0x0804, 0x3362, 0x080c, 0x3127, 0x0128, 0x7984, 0x080c,
-	0x61d7, 0x1904, 0x3365, 0x080c, 0x48a5, 0x0904, 0x3365, 0x2b00,
-	0x7026, 0x080c, 0x655b, 0x7888, 0x1170, 0x9084, 0x0005, 0x1158,
-	0x900e, 0x080c, 0x6457, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108,
-	0xc18d, 0x0804, 0x3330, 0x080c, 0x4872, 0x0904, 0x3362, 0x9006,
-	0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xbd21, 0x0904,
-	0x3362, 0x7888, 0xd094, 0x0118, 0xb8bc, 0xc08d, 0xb8be, 0x7007,
-	0x0003, 0x701f, 0x4b40, 0x0005, 0x2061, 0x1800, 0x080c, 0x5393,
-	0x2009, 0x0007, 0x1578, 0x080c, 0x6553, 0x0118, 0x2009, 0x0008,
-	0x0448, 0x080c, 0x3127, 0x0120, 0xa998, 0x080c, 0x61d7, 0x1530,
-	0x080c, 0x48a3, 0x0518, 0x080c, 0x655b, 0xa89c, 0x1168, 0x9084,
-	0x0005, 0x1150, 0x900e, 0x080c, 0x6457, 0x1108, 0xc185, 0xb800,
-	0xd0bc, 0x0108, 0xc18d, 0x00d0, 0xa868, 0xc0fc, 0xa86a, 0x080c,
-	0xbd21, 0x11e0, 0xa89c, 0xd094, 0x0118, 0xb8bc, 0xc08d, 0xb8be,
-	0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006,
+	0x4000, 0x2001, 0x1950, 0x2004, 0xd0fc, 0x1128, 0x080c, 0x538e,
+	0x0110, 0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000,
+	0x0005, 0x6100, 0x0804, 0x3337, 0x080c, 0x48ac, 0x0904, 0x336c,
+	0x080c, 0x539a, 0x1904, 0x3369, 0x79a8, 0xd184, 0x1158, 0xb834,
+	0x8007, 0x789e, 0xb830, 0x8007, 0x789a, 0xbb2c, 0x831f, 0xba28,
+	0x8217, 0x0050, 0xb824, 0x8007, 0x789e, 0xb820, 0x8007, 0x789a,
+	0xbb1c, 0x831f, 0xba18, 0x8217, 0xb900, 0x918c, 0x0200, 0x0804,
+	0x3337, 0x78a8, 0x909c, 0x0003, 0xd0b4, 0x1148, 0x939a, 0x0003,
+	0x1a04, 0x3369, 0x6258, 0x7884, 0x9206, 0x1904, 0x44b1, 0x2031,
+	0x1848, 0x2009, 0x013c, 0x2136, 0x2001, 0x1840, 0x2009, 0x000c,
+	0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x0006, 0x78a8,
+	0x9084, 0x0080, 0x11c8, 0x0006, 0x0036, 0x2001, 0x1a4f, 0x201c,
+	0x7b9a, 0x2003, 0x0000, 0x2001, 0x1a50, 0x201c, 0x7b9e, 0x2003,
+	0x0000, 0x2001, 0x1a51, 0x201c, 0x7ba2, 0x2003, 0x0000, 0x003e,
+	0x000e, 0x000e, 0x0804, 0x48c5, 0x000e, 0x2031, 0x0000, 0x2061,
+	0x18ae, 0x2c44, 0xa66a, 0xa17a, 0xa772, 0xa076, 0xa28e, 0xa392,
+	0xa496, 0xa59a, 0x080c, 0x10d5, 0x7007, 0x0002, 0x701f, 0x44d1,
+	0x0005, 0x81ff, 0x1904, 0x3369, 0x080c, 0x48ac, 0x0904, 0x336c,
+	0x080c, 0x6562, 0x1904, 0x3369, 0x00c6, 0x080c, 0x4879, 0x00ce,
+	0x0904, 0x3369, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x7ea8,
+	0x080c, 0xbc86, 0x0904, 0x3369, 0x7007, 0x0003, 0x701f, 0x44eb,
+	0x0005, 0x080c, 0x401b, 0x0006, 0x0036, 0x2001, 0x1a4f, 0x201c,
+	0x7b9a, 0x2003, 0x0000, 0x2001, 0x1a50, 0x201c, 0x7b9e, 0x2003,
+	0x0000, 0x2001, 0x1a51, 0x201c, 0x7ba2, 0x2003, 0x0000, 0x003e,
+	0x000e, 0x0804, 0x3337, 0xa830, 0x9086, 0x0100, 0x0904, 0x3369,
+	0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080,
+	0x001b, 0x2009, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804,
+	0x48c5, 0x9006, 0x080c, 0x26cc, 0x78a8, 0x9084, 0x00ff, 0x9086,
+	0x00ff, 0x0118, 0x81ff, 0x1904, 0x3369, 0x080c, 0x6fb2, 0x0110,
+	0x080c, 0x5c96, 0x7888, 0x908a, 0x1000, 0x1a04, 0x336c, 0x7984,
+	0x9186, 0x00ff, 0x0138, 0x9182, 0x007f, 0x1a04, 0x336c, 0x2100,
+	0x080c, 0x2696, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, 0x2061,
+	0x19cb, 0x601b, 0x0000, 0x601f, 0x0000, 0x6073, 0x0000, 0x6077,
+	0x0000, 0x080c, 0x6fb2, 0x1158, 0x080c, 0x7296, 0x080c, 0x5cd1,
+	0x9085, 0x0001, 0x080c, 0x6ff9, 0x080c, 0x6ee4, 0x00d0, 0x080c,
+	0x9db8, 0x2061, 0x0100, 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff,
+	0x810f, 0x9105, 0x604a, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009,
+	0x196a, 0x200b, 0x0000, 0x2009, 0x002d, 0x2011, 0x5bbc, 0x080c,
+	0x80ca, 0x7984, 0x080c, 0x6fb2, 0x1110, 0x2009, 0x00ff, 0x7a88,
+	0x080c, 0x4364, 0x012e, 0x00ce, 0x002e, 0x0804, 0x3337, 0x7984,
+	0x080c, 0x61de, 0x2b08, 0x1904, 0x336c, 0x0804, 0x3337, 0x81ff,
+	0x0120, 0x2009, 0x0001, 0x0804, 0x3369, 0x60d8, 0xd0ac, 0x1130,
+	0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, 0x3369, 0x080c, 0x4879,
+	0x1120, 0x2009, 0x0002, 0x0804, 0x3369, 0x7984, 0x9192, 0x0021,
+	0x1a04, 0x336c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080,
+	0x0019, 0x702a, 0xaf60, 0x7736, 0x080c, 0x48c2, 0x701f, 0x459f,
+	0x7880, 0x9086, 0x006e, 0x0110, 0x701f, 0x4e44, 0x0005, 0x2009,
+	0x0080, 0x080c, 0x623e, 0x1118, 0x080c, 0x6562, 0x0120, 0x2021,
+	0x400a, 0x0804, 0x3339, 0x00d6, 0x0096, 0xa964, 0xaa6c, 0xab70,
+	0xac74, 0xad78, 0xae7c, 0xa884, 0x90be, 0x0100, 0x0904, 0x4638,
+	0x90be, 0x0112, 0x0904, 0x4638, 0x90be, 0x0113, 0x0904, 0x4638,
+	0x90be, 0x0114, 0x0904, 0x4638, 0x90be, 0x0117, 0x0904, 0x4638,
+	0x90be, 0x011a, 0x0904, 0x4638, 0x90be, 0x011c, 0x0904, 0x4638,
+	0x90be, 0x0121, 0x0904, 0x461f, 0x90be, 0x0131, 0x0904, 0x461f,
+	0x90be, 0x0171, 0x0904, 0x4638, 0x90be, 0x0173, 0x0904, 0x4638,
+	0x90be, 0x01a1, 0x1128, 0xa894, 0x8007, 0xa896, 0x0804, 0x4643,
+	0x90be, 0x0212, 0x0904, 0x462c, 0x90be, 0x0213, 0x05e8, 0x90be,
+	0x0214, 0x0500, 0x90be, 0x0217, 0x0188, 0x90be, 0x021a, 0x1120,
+	0xa89c, 0x8007, 0xa89e, 0x04e0, 0x90be, 0x021f, 0x05c8, 0x90be,
+	0x0300, 0x05b0, 0x009e, 0x00de, 0x0804, 0x336c, 0x7028, 0x9080,
+	0x0010, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0007,
+	0x080c, 0x4681, 0x7028, 0x9080, 0x000e, 0x2098, 0x20a0, 0x7034,
+	0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x4681, 0x00c8, 0x7028,
+	0x9080, 0x000c, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9,
+	0x0001, 0x080c, 0x468e, 0x00b8, 0x7028, 0x9080, 0x000e, 0x2098,
+	0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x468e,
+	0x7028, 0x9080, 0x000c, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8,
+	0x20a9, 0x0001, 0x04f1, 0x00c6, 0x080c, 0x4879, 0x0550, 0xa868,
+	0xc0fd, 0xa86a, 0xa867, 0x0119, 0x9006, 0xa882, 0xa87f, 0x0020,
+	0xa88b, 0x0001, 0x810b, 0xa9ae, 0xa8b2, 0xaab6, 0xabba, 0xacbe,
+	0xadc2, 0xa9c6, 0xa8ca, 0x00ce, 0x009e, 0x00de, 0xa866, 0xa822,
+	0xa868, 0xc0fd, 0xa86a, 0xa804, 0x2048, 0x080c, 0xbca1, 0x1120,
+	0x2009, 0x0003, 0x0804, 0x3369, 0x7007, 0x0003, 0x701f, 0x4678,
+	0x0005, 0x00ce, 0x009e, 0x00de, 0x2009, 0x0002, 0x0804, 0x3369,
+	0xa820, 0x9086, 0x8001, 0x1904, 0x3337, 0x2009, 0x0004, 0x0804,
+	0x3369, 0x0016, 0x0026, 0x3510, 0x20a9, 0x0002, 0x4002, 0x4104,
+	0x4004, 0x8211, 0x1dc8, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026,
+	0x0036, 0x0046, 0x3520, 0x20a9, 0x0004, 0x4002, 0x4304, 0x4204,
+	0x4104, 0x4004, 0x8421, 0x1db8, 0x004e, 0x003e, 0x002e, 0x001e,
+	0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x3369, 0x60d8,
+	0xd0ac, 0x1160, 0xd09c, 0x0120, 0x2009, 0x0016, 0x0804, 0x3369,
+	0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, 0x3369, 0x7984, 0x78a8,
+	0x2040, 0x080c, 0x9db1, 0x1120, 0x9182, 0x007f, 0x0a04, 0x336c,
+	0x9186, 0x00ff, 0x0904, 0x336c, 0x9182, 0x0800, 0x1a04, 0x336c,
+	0x7a8c, 0x7b88, 0x6078, 0x9306, 0x1140, 0x607c, 0x924e, 0x0904,
+	0x336c, 0x99cc, 0xff00, 0x0904, 0x336c, 0x0126, 0x2091, 0x8000,
+	0x0026, 0x2011, 0x8008, 0x080c, 0x6586, 0x002e, 0x0140, 0x918d,
+	0x8000, 0x080c, 0x65d0, 0x1118, 0x2001, 0x4009, 0x0458, 0x080c,
+	0x4793, 0x0560, 0x90c6, 0x4000, 0x1170, 0x00c6, 0x0006, 0x900e,
+	0x080c, 0x645e, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d,
+	0x000e, 0x00ce, 0x00b8, 0x90c6, 0x4007, 0x1110, 0x2408, 0x0090,
+	0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0060, 0x90c6, 0x4009,
+	0x1108, 0x0040, 0x90c6, 0x4006, 0x1108, 0x0020, 0x2001, 0x4005,
+	0x2009, 0x000a, 0x2020, 0x012e, 0x0804, 0x3339, 0x2b00, 0x7026,
+	0x0016, 0x00b6, 0x00c6, 0x00e6, 0x2c70, 0x080c, 0x9e7f, 0x0904,
+	0x4760, 0x2b00, 0x6012, 0x080c, 0xbf8c, 0x2e58, 0x00ee, 0x00e6,
+	0x00c6, 0x080c, 0x4879, 0x00ce, 0x2b70, 0x1158, 0x080c, 0x9e32,
+	0x00ee, 0x00ce, 0x00be, 0x001e, 0x012e, 0x2009, 0x0002, 0x0804,
+	0x3369, 0x900e, 0xa966, 0xa96a, 0x2900, 0x6016, 0xa932, 0xa868,
+	0xc0fd, 0xd88c, 0x0108, 0xc0f5, 0xa86a, 0x080c, 0x2fda, 0x6023,
+	0x0001, 0x9006, 0x080c, 0x617b, 0x2001, 0x0002, 0x080c, 0x618f,
+	0x2009, 0x0002, 0x080c, 0x9eac, 0x78a8, 0xd094, 0x0138, 0x00ee,
+	0x7024, 0x00e6, 0x2058, 0xb8bc, 0xc08d, 0xb8be, 0x9085, 0x0001,
+	0x00ee, 0x00ce, 0x00be, 0x001e, 0x012e, 0x1120, 0x2009, 0x0003,
+	0x0804, 0x3369, 0x7007, 0x0003, 0x701f, 0x476f, 0x0005, 0xa830,
+	0x2008, 0x918e, 0xdead, 0x1120, 0x2021, 0x4009, 0x0804, 0x3339,
+	0x9086, 0x0100, 0x7024, 0x2058, 0x1138, 0x2009, 0x0004, 0xba04,
+	0x9294, 0x00ff, 0x0804, 0x52e3, 0x900e, 0xa868, 0xd0f4, 0x1904,
+	0x3337, 0x080c, 0x645e, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108,
+	0xc18d, 0x0804, 0x3337, 0x00e6, 0x00d6, 0x0096, 0x83ff, 0x0904,
+	0x47db, 0x902e, 0x080c, 0x9db1, 0x0130, 0x9026, 0x20a9, 0x0800,
+	0x2071, 0x1000, 0x0030, 0x2021, 0x007f, 0x20a9, 0x0781, 0x2071,
+	0x107f, 0x2e04, 0x9005, 0x11b0, 0x2100, 0x9406, 0x15e8, 0x2428,
+	0x94ce, 0x007f, 0x1120, 0x92ce, 0xfffd, 0x1528, 0x0030, 0x94ce,
+	0x0080, 0x1130, 0x92ce, 0xfffc, 0x11f0, 0x93ce, 0x00ff, 0x11d8,
+	0xc5fd, 0x0450, 0x2058, 0xbf10, 0x2700, 0x9306, 0x11b8, 0xbe14,
+	0x2600, 0x9206, 0x1198, 0x2400, 0x9106, 0x1150, 0xd884, 0x0568,
+	0xd894, 0x1558, 0x080c, 0x6562, 0x1540, 0x2001, 0x4000, 0x0430,
+	0x2001, 0x4007, 0x0418, 0x2001, 0x4006, 0x0400, 0x2400, 0x9106,
+	0x1158, 0xbe14, 0x87ff, 0x1128, 0x86ff, 0x0948, 0x080c, 0x9db1,
+	0x1930, 0x2001, 0x4008, 0x0090, 0x8420, 0x8e70, 0x1f04, 0x47a9,
+	0x85ff, 0x1130, 0x2001, 0x4009, 0x0048, 0x2001, 0x0001, 0x0030,
+	0x080c, 0x61de, 0x1dd0, 0xbb12, 0xba16, 0x9006, 0x9005, 0x009e,
+	0x00de, 0x00ee, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804,
+	0x3369, 0x080c, 0x4879, 0x1120, 0x2009, 0x0002, 0x0804, 0x3369,
+	0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x7884, 0x9005, 0x0904,
+	0x336c, 0x9096, 0x00ff, 0x0120, 0x9092, 0x0004, 0x1a04, 0x336c,
+	0x2010, 0x2918, 0x080c, 0x2f80, 0x1120, 0x2009, 0x0003, 0x0804,
+	0x3369, 0x7007, 0x0003, 0x701f, 0x482e, 0x0005, 0xa830, 0x9086,
+	0x0100, 0x1904, 0x3337, 0x2009, 0x0004, 0x0804, 0x3369, 0x7984,
+	0x080c, 0x9db1, 0x1120, 0x9182, 0x007f, 0x0a04, 0x336c, 0x9186,
+	0x00ff, 0x0904, 0x336c, 0x9182, 0x0800, 0x1a04, 0x336c, 0x2001,
+	0x9000, 0x080c, 0x533e, 0x1904, 0x3369, 0x0804, 0x3337, 0xa998,
+	0x080c, 0x9db1, 0x1118, 0x9182, 0x007f, 0x0280, 0x9186, 0x00ff,
+	0x0168, 0x9182, 0x0800, 0x1250, 0x2001, 0x9000, 0x080c, 0x533e,
+	0x11a8, 0x0060, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006,
 	0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000,
-	0xa99a, 0x9006, 0x918d, 0x0001, 0x2008, 0x0005, 0x9006, 0x0005,
-	0xa830, 0x2008, 0x918e, 0xdead, 0x1120, 0x2021, 0x4009, 0x0804,
-	0x3332, 0x9086, 0x0100, 0x7024, 0x2058, 0x1110, 0x0804, 0x52dc,
-	0x900e, 0x080c, 0x6457, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108,
-	0xc18d, 0x0804, 0x3330, 0x080c, 0x5393, 0x0120, 0x2009, 0x0007,
-	0x0804, 0x3362, 0x7f84, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x080c,
-	0x4872, 0x1120, 0x2009, 0x0002, 0x0804, 0x3362, 0x900e, 0x2130,
-	0x7126, 0x7132, 0xa860, 0x20e8, 0x7036, 0xa85c, 0x9080, 0x0005,
-	0x702a, 0x20a0, 0x080c, 0x6237, 0x1904, 0x4bde, 0x080c, 0x655b,
-	0x0120, 0x080c, 0x6563, 0x1904, 0x4bde, 0x080c, 0x6553, 0x1130,
-	0x080c, 0x6457, 0x1118, 0xd79c, 0x0904, 0x4bde, 0xd794, 0x1110,
-	0xd784, 0x01a8, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098,
-	0x3400, 0xd794, 0x0160, 0x20a9, 0x0008, 0x4003, 0x2098, 0x20a0,
-	0x3d00, 0x20e0, 0x20a9, 0x0002, 0x080c, 0x4687, 0x0048, 0x20a9,
-	0x0004, 0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x080c, 0x4687,
-	0x4104, 0xd794, 0x0528, 0xb8b4, 0x20e0, 0xb8b8, 0x2060, 0x9c80,
-	0x0000, 0x2098, 0x20a9, 0x0002, 0x4003, 0x9c80, 0x0003, 0x2098,
-	0x20a9, 0x0001, 0x4005, 0x9c80, 0x0004, 0x2098, 0x3400, 0x20a9,
-	0x0002, 0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x080c, 0x467a,
-	0x9c80, 0x0026, 0x2098, 0xb8b4, 0x20e0, 0x20a9, 0x0002, 0x4003,
-	0xd794, 0x0110, 0x96b0, 0x000b, 0x96b0, 0x0005, 0x8108, 0x080c,
-	0x9d98, 0x0118, 0x9186, 0x0800, 0x0040, 0xd78c, 0x0120, 0x9186,
-	0x0800, 0x0170, 0x0018, 0x9186, 0x007e, 0x0150, 0xd794, 0x0118,
-	0x9686, 0x0020, 0x0010, 0x9686, 0x0028, 0x0150, 0x0804, 0x4b7a,
-	0x86ff, 0x1120, 0x7124, 0x810b, 0x0804, 0x3330, 0x7033, 0x0001,
-	0x7122, 0x7024, 0x9600, 0x7026, 0x772e, 0x2061, 0x18ae, 0x2c44,
-	0xa06b, 0x0000, 0xa67a, 0x7034, 0xa072, 0x7028, 0xa076, 0xa28e,
-	0xa392, 0xa496, 0xa59a, 0x080c, 0x10d5, 0x7007, 0x0002, 0x701f,
-	0x4c1a, 0x0005, 0x7030, 0x9005, 0x1180, 0x7120, 0x7028, 0x20a0,
-	0x772c, 0x9036, 0x7034, 0x20e8, 0x2061, 0x18ae, 0x2c44, 0xa28c,
-	0xa390, 0xa494, 0xa598, 0x0804, 0x4b7a, 0x7124, 0x810b, 0x0804,
-	0x3330, 0x2029, 0x007e, 0x7984, 0x7a88, 0x7b8c, 0x7c98, 0x9184,
-	0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x3365, 0x9502, 0x0a04,
-	0x3365, 0x9184, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x3365, 0x9502,
-	0x0a04, 0x3365, 0x9284, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04,
-	0x3365, 0x9502, 0x0a04, 0x3365, 0x9284, 0x00ff, 0x90e2, 0x0020,
-	0x0a04, 0x3365, 0x9502, 0x0a04, 0x3365, 0x9384, 0xff00, 0x8007,
-	0x90e2, 0x0020, 0x0a04, 0x3365, 0x9502, 0x0a04, 0x3365, 0x9384,
-	0x00ff, 0x90e2, 0x0020, 0x0a04, 0x3365, 0x9502, 0x0a04, 0x3365,
-	0x9484, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x3365, 0x9502,
-	0x0a04, 0x3365, 0x9484, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x3365,
-	0x9502, 0x0a04, 0x3365, 0x2061, 0x195a, 0x6102, 0x6206, 0x630a,
-	0x640e, 0x0804, 0x3330, 0x0006, 0x080c, 0x537f, 0xd0cc, 0x000e,
-	0x0005, 0x0006, 0x080c, 0x5383, 0xd0bc, 0x000e, 0x0005, 0x6170,
-	0x7a84, 0x6300, 0x82ff, 0x1118, 0x7986, 0x0804, 0x3330, 0x83ff,
-	0x1904, 0x3365, 0x2001, 0xfff0, 0x9200, 0x1a04, 0x3365, 0x2019,
-	0xffff, 0x6074, 0x9302, 0x9200, 0x0a04, 0x3365, 0x7986, 0x6272,
-	0x0804, 0x3330, 0x080c, 0x5393, 0x1904, 0x3362, 0x7c88, 0x7d84,
-	0x7e98, 0x7f8c, 0x080c, 0x4872, 0x0904, 0x3362, 0x900e, 0x901e,
-	0x7326, 0x7332, 0xa860, 0x20e8, 0x7036, 0xa85c, 0x9080, 0x0003,
-	0x702a, 0x20a0, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c,
-	0x655b, 0x0118, 0x080c, 0x6563, 0x1148, 0x20a9, 0x0001, 0xb814,
-	0x4004, 0xb810, 0x4004, 0x4104, 0x9398, 0x0003, 0x8108, 0x9182,
-	0x0800, 0x0120, 0x9386, 0x003c, 0x0170, 0x0c20, 0x83ff, 0x1148,
-	0x7224, 0x900e, 0x2001, 0x0003, 0x080c, 0x8248, 0x2208, 0x0804,
-	0x3330, 0x7033, 0x0001, 0x7122, 0x7024, 0x9300, 0x7026, 0x2061,
-	0x18ae, 0x2c44, 0xa06b, 0x0000, 0xa37a, 0x7028, 0xa076, 0x7034,
-	0xa072, 0xa48e, 0xa592, 0xa696, 0xa79a, 0x080c, 0x10d5, 0x7007,
-	0x0002, 0x701f, 0x4d0c, 0x0005, 0x7030, 0x9005, 0x1178, 0x7120,
-	0x7028, 0x20a0, 0x901e, 0x7034, 0x20e8, 0x2061, 0x18ae, 0x2c44,
-	0xa48c, 0xa590, 0xa694, 0xa798, 0x0804, 0x4cca, 0x7224, 0x900e,
-	0x2001, 0x0003, 0x080c, 0x8248, 0x2208, 0x0804, 0x3330, 0x00f6,
-	0x00e6, 0x080c, 0x5393, 0x2009, 0x0007, 0x1904, 0x4d9f, 0x2071,
-	0x1894, 0x745c, 0x84ff, 0x2009, 0x000e, 0x1904, 0x4d9f, 0xac9c,
-	0xad98, 0xaea4, 0xafa0, 0x0096, 0x080c, 0x1004, 0x2009, 0x0002,
-	0x0904, 0x4d9f, 0x2900, 0x705e, 0x900e, 0x901e, 0x7356, 0x7362,
-	0xa860, 0x7066, 0xa85c, 0x9080, 0x0003, 0x705a, 0x20a0, 0x91d8,
-	0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x655b, 0x0118, 0x080c,
-	0x6563, 0x1148, 0xb814, 0x20a9, 0x0001, 0x4004, 0xb810, 0x4004,
-	0x4104, 0x9398, 0x0003, 0x8108, 0x9182, 0x0800, 0x0120, 0x9386,
-	0x003c, 0x01e8, 0x0c20, 0x83ff, 0x11c0, 0x7254, 0x900e, 0x2001,
-	0x0003, 0x080c, 0x8248, 0x2208, 0x009e, 0xa897, 0x4000, 0xa99a,
-	0x715c, 0x81ff, 0x090c, 0x0db4, 0x2148, 0x080c, 0x101d, 0x9006,
-	0x705e, 0x918d, 0x0001, 0x2008, 0x0418, 0x7063, 0x0001, 0x7152,
-	0x7054, 0x9300, 0x7056, 0x2061, 0x18af, 0x2c44, 0xa37a, 0x7058,
-	0xa076, 0x7064, 0xa072, 0xa48e, 0xa592, 0xa696, 0xa79a, 0xa09f,
-	0x4dab, 0x000e, 0xa0a2, 0x080c, 0x10d5, 0x9006, 0x0048, 0x009e,
-	0xa897, 0x4005, 0xa99a, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030,
-	0x00ee, 0x00fe, 0x0005, 0x00f6, 0xa0a0, 0x904d, 0x090c, 0x0db4,
-	0x00e6, 0x2071, 0x1894, 0xa06c, 0x908e, 0x0100, 0x0138, 0xa87b,
-	0x0030, 0xa883, 0x0000, 0xa897, 0x4002, 0x00d8, 0x7060, 0x9005,
-	0x1158, 0x7150, 0x7058, 0x20a0, 0x901e, 0x7064, 0x20e8, 0xa48c,
-	0xa590, 0xa694, 0xa798, 0x0428, 0xa87b, 0x0000, 0xa883, 0x0000,
-	0xa897, 0x4000, 0x7254, 0x900e, 0x2001, 0x0003, 0x080c, 0x8248,
-	0xaa9a, 0x715c, 0x81ff, 0x090c, 0x0db4, 0x2148, 0x080c, 0x101d,
-	0x705f, 0x0000, 0xa0a0, 0x2048, 0x0126, 0x2091, 0x8000, 0x080c,
-	0x6885, 0x012e, 0xa09f, 0x0000, 0xa0a3, 0x0000, 0x00ee, 0x00fe,
-	0x0005, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x655b,
-	0x0118, 0x080c, 0x6563, 0x1148, 0xb814, 0x20a9, 0x0001, 0x4004,
+	0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x2009, 0x000a,
+	0x0c48, 0x080c, 0x0feb, 0x0198, 0x9006, 0xa802, 0x7014, 0x9005,
+	0x1120, 0x2900, 0x7016, 0x701a, 0x0040, 0x7018, 0xa802, 0x0086,
+	0x2040, 0x2900, 0xa006, 0x701a, 0x008e, 0x9085, 0x0001, 0x0005,
+	0x7984, 0x080c, 0x623e, 0x1130, 0x7e88, 0x9684, 0x3fff, 0x9082,
+	0x4000, 0x0208, 0x905e, 0x8bff, 0x0005, 0xa998, 0x080c, 0x623e,
+	0x1130, 0xae9c, 0x9684, 0x3fff, 0x9082, 0x4000, 0x0208, 0x905e,
+	0x8bff, 0x0005, 0xae98, 0x0008, 0x7e84, 0x2608, 0x080c, 0x623e,
+	0x1108, 0x0008, 0x905e, 0x8bff, 0x0005, 0x0016, 0x7114, 0x81ff,
+	0x0128, 0x2148, 0xa904, 0x080c, 0x101d, 0x0cc8, 0x7116, 0x711a,
+	0x001e, 0x0005, 0x2031, 0x0001, 0x0010, 0x2031, 0x0000, 0x2061,
+	0x18ae, 0x2c44, 0xa66a, 0xa17a, 0xa772, 0xa076, 0xa28e, 0xa392,
+	0xa496, 0xa59a, 0x080c, 0x10d5, 0x7007, 0x0002, 0x701f, 0x3337,
+	0x0005, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2079, 0x0000, 0x2001,
+	0x18a6, 0x2004, 0x9005, 0x1190, 0x0e04, 0x48f6, 0x7a36, 0x7833,
+	0x0012, 0x7a82, 0x7b86, 0x7c8a, 0x2091, 0x4080, 0x2001, 0x0089,
+	0x2004, 0xd084, 0x190c, 0x1187, 0x0804, 0x495c, 0x0016, 0x0086,
+	0x0096, 0x00c6, 0x00e6, 0x2071, 0x1894, 0x7044, 0x9005, 0x1540,
+	0x7148, 0x9182, 0x0010, 0x0288, 0x7038, 0x2060, 0x080c, 0x0feb,
+	0x0904, 0x4954, 0xa84b, 0x0000, 0x2900, 0x7046, 0x2001, 0x0002,
+	0x9080, 0x1f26, 0x2005, 0xa846, 0x0098, 0x7038, 0x90e0, 0x0004,
+	0x2001, 0x18b0, 0x9c82, 0x18f0, 0x0210, 0x2061, 0x18b0, 0x2c00,
+	0x703a, 0x7148, 0x81ff, 0x1108, 0x703e, 0x8108, 0x714a, 0x0460,
+	0x7148, 0x8108, 0x714a, 0x7044, 0x2040, 0xa144, 0x2105, 0x0016,
+	0x908a, 0x0036, 0x1a0c, 0x0db4, 0x2060, 0x001e, 0x8108, 0x2105,
+	0x9005, 0xa146, 0x1520, 0x080c, 0x0feb, 0x1130, 0x8109, 0xa946,
+	0x7148, 0x8109, 0x714a, 0x00d8, 0x9006, 0xa806, 0xa84a, 0xa046,
+	0x2800, 0xa802, 0x2900, 0xa006, 0x7046, 0x2001, 0x0002, 0x9080,
+	0x1f26, 0x2005, 0xa846, 0x0058, 0x2262, 0x6306, 0x640a, 0x00ee,
+	0x00ce, 0x009e, 0x008e, 0x001e, 0x012e, 0x00fe, 0x0005, 0x2c00,
+	0x9082, 0x001b, 0x0002, 0x497e, 0x497e, 0x4980, 0x497e, 0x497e,
+	0x497e, 0x4984, 0x497e, 0x497e, 0x497e, 0x4988, 0x497e, 0x497e,
+	0x497e, 0x498c, 0x497e, 0x497e, 0x497e, 0x4990, 0x497e, 0x497e,
+	0x497e, 0x4994, 0x497e, 0x497e, 0x497e, 0x4999, 0x080c, 0x0db4,
+	0xa276, 0xa37a, 0xa47e, 0x0898, 0xa286, 0xa38a, 0xa48e, 0x0878,
+	0xa296, 0xa39a, 0xa49e, 0x0858, 0xa2a6, 0xa3aa, 0xa4ae, 0x0838,
+	0xa2b6, 0xa3ba, 0xa4be, 0x0818, 0xa2c6, 0xa3ca, 0xa4ce, 0x0804,
+	0x4957, 0xa2d6, 0xa3da, 0xa4de, 0x0804, 0x4957, 0x00e6, 0x2071,
+	0x1894, 0x7048, 0x9005, 0x0904, 0x4a30, 0x0126, 0x2091, 0x8000,
+	0x0e04, 0x4a2f, 0x00f6, 0x2079, 0x0000, 0x00c6, 0x0096, 0x0086,
+	0x0076, 0x9006, 0x2038, 0x7040, 0x2048, 0x9005, 0x0500, 0xa948,
+	0x2105, 0x0016, 0x908a, 0x0036, 0x1a0c, 0x0db4, 0x2060, 0x001e,
+	0x8108, 0x2105, 0x9005, 0xa94a, 0x1904, 0x4a32, 0xa804, 0x9005,
+	0x090c, 0x0db4, 0x7042, 0x2938, 0x2040, 0xa003, 0x0000, 0x2001,
+	0x0002, 0x9080, 0x1f26, 0x2005, 0xa04a, 0x0804, 0x4a32, 0x703c,
+	0x2060, 0x2c14, 0x6304, 0x6408, 0x650c, 0x2200, 0x7836, 0x7833,
+	0x0012, 0x7882, 0x2300, 0x7886, 0x2400, 0x788a, 0x2091, 0x4080,
+	0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1187, 0x87ff, 0x0118,
+	0x2748, 0x080c, 0x101d, 0x7048, 0x8001, 0x704a, 0x9005, 0x1170,
+	0x7040, 0x2048, 0x9005, 0x0128, 0x080c, 0x101d, 0x9006, 0x7042,
+	0x7046, 0x703b, 0x18b0, 0x703f, 0x18b0, 0x0420, 0x7040, 0x9005,
+	0x1508, 0x7238, 0x2c00, 0x9206, 0x0148, 0x9c80, 0x0004, 0x90fa,
+	0x18f0, 0x0210, 0x2001, 0x18b0, 0x703e, 0x00a0, 0x9006, 0x703e,
+	0x703a, 0x7044, 0x9005, 0x090c, 0x0db4, 0x2048, 0xa800, 0x9005,
+	0x1de0, 0x2900, 0x7042, 0x2001, 0x0002, 0x9080, 0x1f26, 0x2005,
+	0xa84a, 0x0000, 0x007e, 0x008e, 0x009e, 0x00ce, 0x00fe, 0x012e,
+	0x00ee, 0x0005, 0x2c00, 0x9082, 0x001b, 0x0002, 0x4a51, 0x4a51,
+	0x4a53, 0x4a51, 0x4a51, 0x4a51, 0x4a58, 0x4a51, 0x4a51, 0x4a51,
+	0x4a5d, 0x4a51, 0x4a51, 0x4a51, 0x4a62, 0x4a51, 0x4a51, 0x4a51,
+	0x4a67, 0x4a51, 0x4a51, 0x4a51, 0x4a6c, 0x4a51, 0x4a51, 0x4a51,
+	0x4a71, 0x080c, 0x0db4, 0xaa74, 0xab78, 0xac7c, 0x0804, 0x49dd,
+	0xaa84, 0xab88, 0xac8c, 0x0804, 0x49dd, 0xaa94, 0xab98, 0xac9c,
+	0x0804, 0x49dd, 0xaaa4, 0xaba8, 0xacac, 0x0804, 0x49dd, 0xaab4,
+	0xabb8, 0xacbc, 0x0804, 0x49dd, 0xaac4, 0xabc8, 0xaccc, 0x0804,
+	0x49dd, 0xaad4, 0xabd8, 0xacdc, 0x0804, 0x49dd, 0x0026, 0x080c,
+	0x5386, 0xd0c4, 0x0120, 0x2011, 0x8014, 0x080c, 0x48d9, 0x002e,
+	0x0005, 0x81ff, 0x1904, 0x3369, 0x0126, 0x2091, 0x8000, 0x6030,
+	0xc08d, 0xc085, 0xc0ac, 0x6032, 0x080c, 0x6fb2, 0x1158, 0x080c,
+	0x7296, 0x080c, 0x5cd1, 0x9085, 0x0001, 0x080c, 0x6ff9, 0x080c,
+	0x6ee4, 0x0010, 0x080c, 0x5b90, 0x012e, 0x0804, 0x3337, 0x81ff,
+	0x0120, 0x2009, 0x0001, 0x0804, 0x3369, 0x080c, 0x539a, 0x0120,
+	0x2009, 0x0007, 0x0804, 0x3369, 0x080c, 0x655a, 0x0120, 0x2009,
+	0x0008, 0x0804, 0x3369, 0x0026, 0x2011, 0x0010, 0x080c, 0x6586,
+	0x002e, 0x0140, 0x7984, 0x080c, 0x65d0, 0x1120, 0x2009, 0x4009,
+	0x0804, 0x3369, 0x080c, 0x312e, 0x0128, 0x7984, 0x080c, 0x61de,
+	0x1904, 0x336c, 0x080c, 0x48ac, 0x0904, 0x336c, 0x2b00, 0x7026,
+	0x080c, 0x6562, 0x7888, 0x1170, 0x9084, 0x0005, 0x1158, 0x900e,
+	0x080c, 0x645e, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d,
+	0x0804, 0x3337, 0x080c, 0x4879, 0x0904, 0x3369, 0x9006, 0xa866,
+	0xa832, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xbd3a, 0x0904, 0x3369,
+	0x7888, 0xd094, 0x0118, 0xb8bc, 0xc08d, 0xb8be, 0x7007, 0x0003,
+	0x701f, 0x4b47, 0x0005, 0x2061, 0x1800, 0x080c, 0x539a, 0x2009,
+	0x0007, 0x1578, 0x080c, 0x655a, 0x0118, 0x2009, 0x0008, 0x0448,
+	0x080c, 0x312e, 0x0120, 0xa998, 0x080c, 0x61de, 0x1530, 0x080c,
+	0x48aa, 0x0518, 0x080c, 0x6562, 0xa89c, 0x1168, 0x9084, 0x0005,
+	0x1150, 0x900e, 0x080c, 0x645e, 0x1108, 0xc185, 0xb800, 0xd0bc,
+	0x0108, 0xc18d, 0x00d0, 0xa868, 0xc0fc, 0xa86a, 0x080c, 0xbd3a,
+	0x11e0, 0xa89c, 0xd094, 0x0118, 0xb8bc, 0xc08d, 0xb8be, 0x2009,
+	0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e,
+	0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0xa99a,
+	0x9006, 0x918d, 0x0001, 0x2008, 0x0005, 0x9006, 0x0005, 0xa830,
+	0x2008, 0x918e, 0xdead, 0x1120, 0x2021, 0x4009, 0x0804, 0x3339,
+	0x9086, 0x0100, 0x7024, 0x2058, 0x1110, 0x0804, 0x52e3, 0x900e,
+	0x080c, 0x645e, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d,
+	0x0804, 0x3337, 0x080c, 0x539a, 0x0120, 0x2009, 0x0007, 0x0804,
+	0x3369, 0x7f84, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x080c, 0x4879,
+	0x1120, 0x2009, 0x0002, 0x0804, 0x3369, 0x900e, 0x2130, 0x7126,
+	0x7132, 0xa860, 0x20e8, 0x7036, 0xa85c, 0x9080, 0x0005, 0x702a,
+	0x20a0, 0x080c, 0x623e, 0x1904, 0x4be5, 0x080c, 0x6562, 0x0120,
+	0x080c, 0x656a, 0x1904, 0x4be5, 0x080c, 0x655a, 0x1130, 0x080c,
+	0x645e, 0x1118, 0xd79c, 0x0904, 0x4be5, 0xd794, 0x1110, 0xd784,
+	0x01a8, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098, 0x3400,
+	0xd794, 0x0160, 0x20a9, 0x0008, 0x4003, 0x2098, 0x20a0, 0x3d00,
+	0x20e0, 0x20a9, 0x0002, 0x080c, 0x468e, 0x0048, 0x20a9, 0x0004,
+	0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x080c, 0x468e, 0x4104,
+	0xd794, 0x0528, 0xb8b4, 0x20e0, 0xb8b8, 0x2060, 0x9c80, 0x0000,
+	0x2098, 0x20a9, 0x0002, 0x4003, 0x9c80, 0x0003, 0x2098, 0x20a9,
+	0x0001, 0x4005, 0x9c80, 0x0004, 0x2098, 0x3400, 0x20a9, 0x0002,
+	0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x080c, 0x4681, 0x9c80,
+	0x0026, 0x2098, 0xb8b4, 0x20e0, 0x20a9, 0x0002, 0x4003, 0xd794,
+	0x0110, 0x96b0, 0x000b, 0x96b0, 0x0005, 0x8108, 0x080c, 0x9db1,
+	0x0118, 0x9186, 0x0800, 0x0040, 0xd78c, 0x0120, 0x9186, 0x0800,
+	0x0170, 0x0018, 0x9186, 0x007e, 0x0150, 0xd794, 0x0118, 0x9686,
+	0x0020, 0x0010, 0x9686, 0x0028, 0x0150, 0x0804, 0x4b81, 0x86ff,
+	0x1120, 0x7124, 0x810b, 0x0804, 0x3337, 0x7033, 0x0001, 0x7122,
+	0x7024, 0x9600, 0x7026, 0x772e, 0x2061, 0x18ae, 0x2c44, 0xa06b,
+	0x0000, 0xa67a, 0x7034, 0xa072, 0x7028, 0xa076, 0xa28e, 0xa392,
+	0xa496, 0xa59a, 0x080c, 0x10d5, 0x7007, 0x0002, 0x701f, 0x4c21,
+	0x0005, 0x7030, 0x9005, 0x1180, 0x7120, 0x7028, 0x20a0, 0x772c,
+	0x9036, 0x7034, 0x20e8, 0x2061, 0x18ae, 0x2c44, 0xa28c, 0xa390,
+	0xa494, 0xa598, 0x0804, 0x4b81, 0x7124, 0x810b, 0x0804, 0x3337,
+	0x2029, 0x007e, 0x7984, 0x7a88, 0x7b8c, 0x7c98, 0x9184, 0xff00,
+	0x8007, 0x90e2, 0x0020, 0x0a04, 0x336c, 0x9502, 0x0a04, 0x336c,
+	0x9184, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x336c, 0x9502, 0x0a04,
+	0x336c, 0x9284, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x336c,
+	0x9502, 0x0a04, 0x336c, 0x9284, 0x00ff, 0x90e2, 0x0020, 0x0a04,
+	0x336c, 0x9502, 0x0a04, 0x336c, 0x9384, 0xff00, 0x8007, 0x90e2,
+	0x0020, 0x0a04, 0x336c, 0x9502, 0x0a04, 0x336c, 0x9384, 0x00ff,
+	0x90e2, 0x0020, 0x0a04, 0x336c, 0x9502, 0x0a04, 0x336c, 0x9484,
+	0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x336c, 0x9502, 0x0a04,
+	0x336c, 0x9484, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x336c, 0x9502,
+	0x0a04, 0x336c, 0x2061, 0x195a, 0x6102, 0x6206, 0x630a, 0x640e,
+	0x0804, 0x3337, 0x0006, 0x080c, 0x5386, 0xd0cc, 0x000e, 0x0005,
+	0x0006, 0x080c, 0x538a, 0xd0bc, 0x000e, 0x0005, 0x6170, 0x7a84,
+	0x6300, 0x82ff, 0x1118, 0x7986, 0x0804, 0x3337, 0x83ff, 0x1904,
+	0x336c, 0x2001, 0xfff0, 0x9200, 0x1a04, 0x336c, 0x2019, 0xffff,
+	0x6074, 0x9302, 0x9200, 0x0a04, 0x336c, 0x7986, 0x6272, 0x0804,
+	0x3337, 0x080c, 0x539a, 0x1904, 0x3369, 0x7c88, 0x7d84, 0x7e98,
+	0x7f8c, 0x080c, 0x4879, 0x0904, 0x3369, 0x900e, 0x901e, 0x7326,
+	0x7332, 0xa860, 0x20e8, 0x7036, 0xa85c, 0x9080, 0x0003, 0x702a,
+	0x20a0, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x6562,
+	0x0118, 0x080c, 0x656a, 0x1148, 0x20a9, 0x0001, 0xb814, 0x4004,
 	0xb810, 0x4004, 0x4104, 0x9398, 0x0003, 0x8108, 0x9182, 0x0800,
-	0x0120, 0x9386, 0x003c, 0x0518, 0x0c20, 0x83ff, 0x11f0, 0x7154,
-	0x810c, 0xa99a, 0xa897, 0x4000, 0x715c, 0x81ff, 0x090c, 0x0db4,
-	0x2148, 0x080c, 0x101d, 0x9006, 0x705e, 0x918d, 0x0001, 0x2008,
-	0xa0a0, 0x2048, 0x0126, 0x2091, 0x8000, 0x080c, 0x6885, 0x012e,
-	0xa09f, 0x0000, 0xa0a3, 0x0000, 0x0070, 0x7063, 0x0001, 0x7152,
-	0x7054, 0x9300, 0x7056, 0xa37a, 0xa48e, 0xa592, 0xa696, 0xa79a,
-	0x080c, 0x10d5, 0x9006, 0x00ee, 0x0005, 0x0096, 0xa88c, 0x90be,
-	0x7000, 0x0148, 0x90be, 0x7100, 0x0130, 0x90be, 0x7200, 0x0118,
-	0x009e, 0x0804, 0x3365, 0xa884, 0xa988, 0x080c, 0x2663, 0x1518,
-	0x080c, 0x61d7, 0x1500, 0x7126, 0xbe12, 0xbd16, 0xae7c, 0x080c,
-	0x4872, 0x01c8, 0x080c, 0x4872, 0x01b0, 0x009e, 0xa867, 0x0000,
-	0xa868, 0xc0fd, 0xa86a, 0xa823, 0x0000, 0xa804, 0x2048, 0x080c,
-	0xbca8, 0x1120, 0x2009, 0x0003, 0x0804, 0x3362, 0x7007, 0x0003,
-	0x701f, 0x4e78, 0x0005, 0x009e, 0x2009, 0x0002, 0x0804, 0x3362,
-	0x7124, 0x080c, 0x30ce, 0xa820, 0x9086, 0x8001, 0x1120, 0x2009,
-	0x0004, 0x0804, 0x3362, 0x2900, 0x7022, 0xa804, 0x0096, 0x2048,
-	0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x009e,
-	0x9080, 0x0002, 0x0076, 0x0006, 0x2098, 0x20a0, 0x27e0, 0x27e8,
-	0x20a9, 0x002a, 0x080c, 0x0f68, 0xaa6c, 0xab70, 0xac74, 0xad78,
-	0x2061, 0x18ae, 0x2c44, 0xa06b, 0x0000, 0xae64, 0xaf8c, 0x97c6,
-	0x7000, 0x0118, 0x97c6, 0x7100, 0x1148, 0x96c2, 0x0004, 0x0600,
-	0x2009, 0x0004, 0x000e, 0x007e, 0x0804, 0x48be, 0x97c6, 0x7200,
-	0x11b8, 0x96c2, 0x0054, 0x02a0, 0x000e, 0x007e, 0x2061, 0x18ae,
-	0x2c44, 0xa076, 0xa772, 0xa07b, 0x002a, 0xa28e, 0xa392, 0xa496,
-	0xa59a, 0x080c, 0x10d5, 0x7007, 0x0002, 0x701f, 0x4ed4, 0x0005,
-	0x000e, 0x007e, 0x0804, 0x3365, 0x7020, 0x2048, 0xa804, 0x2048,
-	0xa804, 0x2048, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084,
-	0xffc0, 0x9080, 0x0002, 0x2098, 0x20a0, 0x27e0, 0x27e8, 0x20a9,
-	0x002a, 0x080c, 0x0f68, 0x2100, 0x2238, 0x2061, 0x18ae, 0x2c44,
-	0xa28c, 0xa390, 0xa494, 0xa598, 0x2009, 0x002a, 0x0804, 0x48be,
-	0x81ff, 0x1904, 0x3362, 0x798c, 0x2001, 0x194f, 0x918c, 0x8000,
-	0x2102, 0x080c, 0x4889, 0x0904, 0x3365, 0x080c, 0x655b, 0x0120,
-	0x080c, 0x6563, 0x1904, 0x3365, 0x080c, 0x62fe, 0x0904, 0x3362,
-	0x0126, 0x2091, 0x8000, 0x080c, 0x63c4, 0x012e, 0x0904, 0x3362,
-	0x2001, 0x194f, 0x2004, 0xd0fc, 0x1904, 0x3330, 0x0804, 0x42fa,
-	0xa9a0, 0x2001, 0x194f, 0x918c, 0x8000, 0xc18d, 0x2102, 0x080c,
-	0x4896, 0x01a0, 0x080c, 0x655b, 0x0118, 0x080c, 0x6563, 0x1170,
-	0x080c, 0x62fe, 0x2009, 0x0002, 0x0128, 0x080c, 0x63c4, 0x1170,
-	0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006,
-	0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000,
-	0x2001, 0x194f, 0x2004, 0xd0fc, 0x1128, 0x080c, 0x5387, 0x0110,
-	0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005,
-	0x78a8, 0xd08c, 0x1118, 0xd084, 0x0904, 0x426f, 0x080c, 0x48a5,
-	0x0904, 0x3365, 0x080c, 0x4872, 0x1120, 0x2009, 0x0002, 0x0804,
-	0x3362, 0x080c, 0x655b, 0x0130, 0x908e, 0x0004, 0x0118, 0x908e,
-	0x0005, 0x15a0, 0x78a8, 0xd08c, 0x0120, 0xb800, 0xc08c, 0xb802,
-	0x0028, 0x080c, 0x537f, 0xd0b4, 0x0904, 0x42a9, 0x7884, 0x908e,
-	0x007e, 0x0904, 0x42a9, 0x908e, 0x007f, 0x0904, 0x42a9, 0x908e,
-	0x0080, 0x0904, 0x42a9, 0xb800, 0xd08c, 0x1904, 0x42a9, 0xa867,
-	0x0000, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xbcc7, 0x1120, 0x2009,
-	0x0003, 0x0804, 0x3362, 0x7007, 0x0003, 0x701f, 0x4fa0, 0x0005,
-	0x080c, 0x48a5, 0x0904, 0x3365, 0x0804, 0x42a9, 0x080c, 0x3127,
-	0x0108, 0x0005, 0x2009, 0x1833, 0x210c, 0x81ff, 0x0120, 0x2009,
-	0x0001, 0x0804, 0x3362, 0x080c, 0x5393, 0x0120, 0x2009, 0x0007,
-	0x0804, 0x3362, 0x080c, 0x6553, 0x0120, 0x2009, 0x0008, 0x0804,
-	0x3362, 0xb89c, 0xd0a4, 0x1118, 0xd0ac, 0x1904, 0x42a9, 0x9006,
-	0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xbd21, 0x1120,
-	0x2009, 0x0003, 0x0804, 0x3362, 0x7007, 0x0003, 0x701f, 0x4fd9,
-	0x0005, 0xa830, 0x9086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804,
-	0x52dc, 0x080c, 0x48a5, 0x0904, 0x3365, 0x0804, 0x4f72, 0x81ff,
-	0x2009, 0x0001, 0x1904, 0x3362, 0x080c, 0x5393, 0x2009, 0x0007,
-	0x1904, 0x3362, 0x080c, 0x6553, 0x0120, 0x2009, 0x0008, 0x0804,
-	0x3362, 0x080c, 0x48a5, 0x0904, 0x3365, 0x080c, 0x655b, 0x2009,
-	0x0009, 0x1904, 0x3362, 0x080c, 0x4872, 0x2009, 0x0002, 0x0904,
-	0x3362, 0x9006, 0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x7988,
-	0x9194, 0xff00, 0x918c, 0x00ff, 0x9006, 0x82ff, 0x1128, 0xc0ed,
-	0xa952, 0x798c, 0xa956, 0x0038, 0x928e, 0x0100, 0x1904, 0x3365,
-	0xc0e5, 0xa952, 0xa956, 0xa83e, 0x080c, 0xbf74, 0x2009, 0x0003,
-	0x0904, 0x3362, 0x7007, 0x0003, 0x701f, 0x502f, 0x0005, 0xa830,
-	0x9086, 0x0100, 0x2009, 0x0004, 0x0904, 0x3362, 0x0804, 0x3330,
-	0x7aa8, 0x9284, 0xc000, 0x0148, 0xd2ec, 0x01a0, 0x080c, 0x5393,
-	0x1188, 0x2009, 0x0014, 0x0804, 0x3362, 0xd2dc, 0x1568, 0x81ff,
-	0x2009, 0x0001, 0x1904, 0x3362, 0x080c, 0x5393, 0x2009, 0x0007,
-	0x1904, 0x3362, 0xd2f4, 0x0130, 0x9284, 0x5000, 0x080c, 0x535a,
-	0x0804, 0x3330, 0xd2fc, 0x0158, 0x080c, 0x48a5, 0x0904, 0x3365,
-	0x7984, 0x9284, 0x9000, 0x080c, 0x5337, 0x0804, 0x3330, 0x080c,
-	0x48a5, 0x0904, 0x3365, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006,
-	0x2009, 0x0009, 0x1904, 0x5118, 0x080c, 0x4872, 0x2009, 0x0002,
-	0x0904, 0x5118, 0xa85c, 0x9080, 0x001b, 0xaf60, 0x2009, 0x0008,
-	0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x080c, 0x48bb, 0x701f, 0x5089,
-	0x0005, 0xa86c, 0x9086, 0x0500, 0x1138, 0xa870, 0x9005, 0x1120,
-	0xa874, 0x9084, 0xff00, 0x0110, 0x1904, 0x3365, 0xa866, 0xa832,
-	0xa868, 0xc0fd, 0xa86a, 0x080c, 0x48a5, 0x1110, 0x0804, 0x3365,
-	0x2009, 0x0043, 0x080c, 0xbfdc, 0x2009, 0x0003, 0x0904, 0x5118,
-	0x7007, 0x0003, 0x701f, 0x50ad, 0x0005, 0xa830, 0x9086, 0x0100,
-	0x2009, 0x0004, 0x0904, 0x5118, 0x7984, 0x7aa8, 0x9284, 0x1000,
-	0x080c, 0x5337, 0x0804, 0x3330, 0x00c6, 0xaab0, 0x9284, 0xc000,
-	0x0140, 0xd2ec, 0x0168, 0x080c, 0x5393, 0x1150, 0x2009, 0x0014,
-	0x04f0, 0x2061, 0x1800, 0x080c, 0x5393, 0x2009, 0x0007, 0x15b8,
-	0xd2f4, 0x0128, 0x9284, 0x5000, 0x080c, 0x535a, 0x0050, 0xd2fc,
-	0x0178, 0x080c, 0x48a3, 0x0588, 0xa998, 0x9284, 0x9000, 0x080c,
-	0x5337, 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0x0438,
-	0x080c, 0x48a3, 0x0510, 0x080c, 0x655b, 0x2009, 0x0009, 0x11b8,
-	0xa8c4, 0x9086, 0x0500, 0x11c8, 0xa8c8, 0x9005, 0x11b0, 0xa8cc,
-	0x9084, 0xff00, 0x1190, 0x080c, 0x48a3, 0x1108, 0x0070, 0x2009,
-	0x004b, 0x080c, 0xbfdc, 0x2009, 0x0003, 0x0108, 0x0078, 0x0429,
-	0x19c0, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e,
-	0x9085, 0x0001, 0x2001, 0x0030, 0x00ce, 0x0005, 0x9006, 0x0ce0,
-	0x7aa8, 0xd2dc, 0x0904, 0x3362, 0x0016, 0x7984, 0x9284, 0x1000,
-	0xc0fd, 0x080c, 0x5337, 0x001e, 0x1904, 0x3362, 0x0804, 0x3330,
-	0x00f6, 0x2d78, 0x0011, 0x00fe, 0x0005, 0xaab0, 0xd2dc, 0x0150,
-	0x0016, 0xa998, 0x9284, 0x1000, 0xc0fd, 0x080c, 0x5337, 0x001e,
-	0x9085, 0x0001, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804,
-	0x3362, 0x080c, 0x5393, 0x0120, 0x2009, 0x0007, 0x0804, 0x3362,
-	0x7984, 0x7ea8, 0x96b4, 0x00ff, 0x080c, 0x6237, 0x1904, 0x3365,
-	0x9186, 0x007f, 0x0138, 0x080c, 0x655b, 0x0120, 0x2009, 0x0009,
-	0x0804, 0x3362, 0x080c, 0x4872, 0x1120, 0x2009, 0x0002, 0x0804,
-	0x3362, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x2001, 0x0100,
-	0x8007, 0xa80a, 0x080c, 0xbce1, 0x1120, 0x2009, 0x0003, 0x0804,
-	0x3362, 0x7007, 0x0003, 0x701f, 0x5176, 0x0005, 0xa808, 0x8007,
-	0x9086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x3362, 0xa8e0,
-	0xa866, 0xa810, 0x8007, 0x9084, 0x00ff, 0x800c, 0xa814, 0x8007,
-	0x9084, 0x00ff, 0x8004, 0x9080, 0x0002, 0x9108, 0x8906, 0x8006,
-	0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0004, 0x7a8c,
-	0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x48be, 0x080c, 0x4872, 0x1120,
-	0x2009, 0x0002, 0x0804, 0x3362, 0x7984, 0x9194, 0xff00, 0x918c,
-	0x00ff, 0x8217, 0x82ff, 0x1118, 0x7023, 0x1984, 0x0040, 0x92c6,
-	0x0001, 0x1118, 0x7023, 0x199e, 0x0010, 0x0804, 0x3365, 0x2009,
-	0x001a, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019,
-	0xaf60, 0x080c, 0x48bb, 0x701f, 0x51c6, 0x0005, 0x2001, 0x182d,
-	0x2003, 0x0001, 0xa85c, 0x9080, 0x0019, 0x2098, 0xa860, 0x20e0,
-	0x20a9, 0x001a, 0x7020, 0x20a0, 0x20e9, 0x0001, 0x4003, 0x0804,
-	0x3330, 0x080c, 0x4872, 0x1120, 0x2009, 0x0002, 0x0804, 0x3362,
-	0x7984, 0x9194, 0xff00, 0x918c, 0x00ff, 0x8217, 0x82ff, 0x1118,
-	0x2099, 0x1984, 0x0040, 0x92c6, 0x0001, 0x1118, 0x2099, 0x199e,
-	0x0010, 0x0804, 0x3365, 0xa85c, 0x9080, 0x0019, 0x20a0, 0xa860,
-	0x20e8, 0x20a9, 0x001a, 0x20e1, 0x0001, 0x4003, 0x2009, 0x001a,
+	0x0120, 0x9386, 0x003c, 0x0170, 0x0c20, 0x83ff, 0x1148, 0x7224,
+	0x900e, 0x2001, 0x0003, 0x080c, 0x8270, 0x2208, 0x0804, 0x3337,
+	0x7033, 0x0001, 0x7122, 0x7024, 0x9300, 0x7026, 0x2061, 0x18ae,
+	0x2c44, 0xa06b, 0x0000, 0xa37a, 0x7028, 0xa076, 0x7034, 0xa072,
+	0xa48e, 0xa592, 0xa696, 0xa79a, 0x080c, 0x10d5, 0x7007, 0x0002,
+	0x701f, 0x4d13, 0x0005, 0x7030, 0x9005, 0x1178, 0x7120, 0x7028,
+	0x20a0, 0x901e, 0x7034, 0x20e8, 0x2061, 0x18ae, 0x2c44, 0xa48c,
+	0xa590, 0xa694, 0xa798, 0x0804, 0x4cd1, 0x7224, 0x900e, 0x2001,
+	0x0003, 0x080c, 0x8270, 0x2208, 0x0804, 0x3337, 0x00f6, 0x00e6,
+	0x080c, 0x539a, 0x2009, 0x0007, 0x1904, 0x4da6, 0x2071, 0x1894,
+	0x745c, 0x84ff, 0x2009, 0x000e, 0x1904, 0x4da6, 0xac9c, 0xad98,
+	0xaea4, 0xafa0, 0x0096, 0x080c, 0x1004, 0x2009, 0x0002, 0x0904,
+	0x4da6, 0x2900, 0x705e, 0x900e, 0x901e, 0x7356, 0x7362, 0xa860,
+	0x7066, 0xa85c, 0x9080, 0x0003, 0x705a, 0x20a0, 0x91d8, 0x1000,
+	0x2b5c, 0x8bff, 0x0178, 0x080c, 0x6562, 0x0118, 0x080c, 0x656a,
+	0x1148, 0xb814, 0x20a9, 0x0001, 0x4004, 0xb810, 0x4004, 0x4104,
+	0x9398, 0x0003, 0x8108, 0x9182, 0x0800, 0x0120, 0x9386, 0x003c,
+	0x01e8, 0x0c20, 0x83ff, 0x11c0, 0x7254, 0x900e, 0x2001, 0x0003,
+	0x080c, 0x8270, 0x2208, 0x009e, 0xa897, 0x4000, 0xa99a, 0x715c,
+	0x81ff, 0x090c, 0x0db4, 0x2148, 0x080c, 0x101d, 0x9006, 0x705e,
+	0x918d, 0x0001, 0x2008, 0x0418, 0x7063, 0x0001, 0x7152, 0x7054,
+	0x9300, 0x7056, 0x2061, 0x18af, 0x2c44, 0xa37a, 0x7058, 0xa076,
+	0x7064, 0xa072, 0xa48e, 0xa592, 0xa696, 0xa79a, 0xa09f, 0x4db2,
+	0x000e, 0xa0a2, 0x080c, 0x10d5, 0x9006, 0x0048, 0x009e, 0xa897,
+	0x4005, 0xa99a, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x00ee,
+	0x00fe, 0x0005, 0x00f6, 0xa0a0, 0x904d, 0x090c, 0x0db4, 0x00e6,
+	0x2071, 0x1894, 0xa06c, 0x908e, 0x0100, 0x0138, 0xa87b, 0x0030,
+	0xa883, 0x0000, 0xa897, 0x4002, 0x00d8, 0x7060, 0x9005, 0x1158,
+	0x7150, 0x7058, 0x20a0, 0x901e, 0x7064, 0x20e8, 0xa48c, 0xa590,
+	0xa694, 0xa798, 0x0428, 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897,
+	0x4000, 0x7254, 0x900e, 0x2001, 0x0003, 0x080c, 0x8270, 0xaa9a,
+	0x715c, 0x81ff, 0x090c, 0x0db4, 0x2148, 0x080c, 0x101d, 0x705f,
+	0x0000, 0xa0a0, 0x2048, 0x0126, 0x2091, 0x8000, 0x080c, 0x688c,
+	0x012e, 0xa09f, 0x0000, 0xa0a3, 0x0000, 0x00ee, 0x00fe, 0x0005,
+	0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x6562, 0x0118,
+	0x080c, 0x656a, 0x1148, 0xb814, 0x20a9, 0x0001, 0x4004, 0xb810,
+	0x4004, 0x4104, 0x9398, 0x0003, 0x8108, 0x9182, 0x0800, 0x0120,
+	0x9386, 0x003c, 0x0518, 0x0c20, 0x83ff, 0x11f0, 0x7154, 0x810c,
+	0xa99a, 0xa897, 0x4000, 0x715c, 0x81ff, 0x090c, 0x0db4, 0x2148,
+	0x080c, 0x101d, 0x9006, 0x705e, 0x918d, 0x0001, 0x2008, 0xa0a0,
+	0x2048, 0x0126, 0x2091, 0x8000, 0x080c, 0x688c, 0x012e, 0xa09f,
+	0x0000, 0xa0a3, 0x0000, 0x0070, 0x7063, 0x0001, 0x7152, 0x7054,
+	0x9300, 0x7056, 0xa37a, 0xa48e, 0xa592, 0xa696, 0xa79a, 0x080c,
+	0x10d5, 0x9006, 0x00ee, 0x0005, 0x0096, 0xa88c, 0x90be, 0x7000,
+	0x0148, 0x90be, 0x7100, 0x0130, 0x90be, 0x7200, 0x0118, 0x009e,
+	0x0804, 0x336c, 0xa884, 0xa988, 0x080c, 0x2663, 0x1518, 0x080c,
+	0x61de, 0x1500, 0x7126, 0xbe12, 0xbd16, 0xae7c, 0x080c, 0x4879,
+	0x01c8, 0x080c, 0x4879, 0x01b0, 0x009e, 0xa867, 0x0000, 0xa868,
+	0xc0fd, 0xa86a, 0xa823, 0x0000, 0xa804, 0x2048, 0x080c, 0xbcc1,
+	0x1120, 0x2009, 0x0003, 0x0804, 0x3369, 0x7007, 0x0003, 0x701f,
+	0x4e7f, 0x0005, 0x009e, 0x2009, 0x0002, 0x0804, 0x3369, 0x7124,
+	0x080c, 0x30d5, 0xa820, 0x9086, 0x8001, 0x1120, 0x2009, 0x0004,
+	0x0804, 0x3369, 0x2900, 0x7022, 0xa804, 0x0096, 0x2048, 0x8906,
+	0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x009e, 0x9080,
+	0x0002, 0x0076, 0x0006, 0x2098, 0x20a0, 0x27e0, 0x27e8, 0x20a9,
+	0x002a, 0x080c, 0x0f68, 0xaa6c, 0xab70, 0xac74, 0xad78, 0x2061,
+	0x18ae, 0x2c44, 0xa06b, 0x0000, 0xae64, 0xaf8c, 0x97c6, 0x7000,
+	0x0118, 0x97c6, 0x7100, 0x1148, 0x96c2, 0x0004, 0x0600, 0x2009,
+	0x0004, 0x000e, 0x007e, 0x0804, 0x48c5, 0x97c6, 0x7200, 0x11b8,
+	0x96c2, 0x0054, 0x02a0, 0x000e, 0x007e, 0x2061, 0x18ae, 0x2c44,
+	0xa076, 0xa772, 0xa07b, 0x002a, 0xa28e, 0xa392, 0xa496, 0xa59a,
+	0x080c, 0x10d5, 0x7007, 0x0002, 0x701f, 0x4edb, 0x0005, 0x000e,
+	0x007e, 0x0804, 0x336c, 0x7020, 0x2048, 0xa804, 0x2048, 0xa804,
+	0x2048, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0,
+	0x9080, 0x0002, 0x2098, 0x20a0, 0x27e0, 0x27e8, 0x20a9, 0x002a,
+	0x080c, 0x0f68, 0x2100, 0x2238, 0x2061, 0x18ae, 0x2c44, 0xa28c,
+	0xa390, 0xa494, 0xa598, 0x2009, 0x002a, 0x0804, 0x48c5, 0x81ff,
+	0x1904, 0x3369, 0x798c, 0x2001, 0x194f, 0x918c, 0x8000, 0x2102,
+	0x080c, 0x4890, 0x0904, 0x336c, 0x080c, 0x6562, 0x0120, 0x080c,
+	0x656a, 0x1904, 0x336c, 0x080c, 0x6305, 0x0904, 0x3369, 0x0126,
+	0x2091, 0x8000, 0x080c, 0x63cb, 0x012e, 0x0904, 0x3369, 0x2001,
+	0x194f, 0x2004, 0xd0fc, 0x1904, 0x3337, 0x0804, 0x4301, 0xa9a0,
+	0x2001, 0x194f, 0x918c, 0x8000, 0xc18d, 0x2102, 0x080c, 0x489d,
+	0x01a0, 0x080c, 0x6562, 0x0118, 0x080c, 0x656a, 0x1170, 0x080c,
+	0x6305, 0x2009, 0x0002, 0x0128, 0x080c, 0x63cb, 0x1170, 0x2009,
+	0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e,
+	0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0x2001,
+	0x194f, 0x2004, 0xd0fc, 0x1128, 0x080c, 0x538e, 0x0110, 0x9006,
+	0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x78a8,
+	0xd08c, 0x1118, 0xd084, 0x0904, 0x4276, 0x080c, 0x48ac, 0x0904,
+	0x336c, 0x080c, 0x4879, 0x1120, 0x2009, 0x0002, 0x0804, 0x3369,
+	0x080c, 0x6562, 0x0130, 0x908e, 0x0004, 0x0118, 0x908e, 0x0005,
+	0x15a0, 0x78a8, 0xd08c, 0x0120, 0xb800, 0xc08c, 0xb802, 0x0028,
+	0x080c, 0x5386, 0xd0b4, 0x0904, 0x42b0, 0x7884, 0x908e, 0x007e,
+	0x0904, 0x42b0, 0x908e, 0x007f, 0x0904, 0x42b0, 0x908e, 0x0080,
+	0x0904, 0x42b0, 0xb800, 0xd08c, 0x1904, 0x42b0, 0xa867, 0x0000,
+	0xa868, 0xc0fd, 0xa86a, 0x080c, 0xbce0, 0x1120, 0x2009, 0x0003,
+	0x0804, 0x3369, 0x7007, 0x0003, 0x701f, 0x4fa7, 0x0005, 0x080c,
+	0x48ac, 0x0904, 0x336c, 0x0804, 0x42b0, 0x080c, 0x312e, 0x0108,
+	0x0005, 0x2009, 0x1833, 0x210c, 0x81ff, 0x0120, 0x2009, 0x0001,
+	0x0804, 0x3369, 0x080c, 0x539a, 0x0120, 0x2009, 0x0007, 0x0804,
+	0x3369, 0x080c, 0x655a, 0x0120, 0x2009, 0x0008, 0x0804, 0x3369,
+	0xb89c, 0xd0a4, 0x1118, 0xd0ac, 0x1904, 0x42b0, 0x9006, 0xa866,
+	0xa832, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xbd3a, 0x1120, 0x2009,
+	0x0003, 0x0804, 0x3369, 0x7007, 0x0003, 0x701f, 0x4fe0, 0x0005,
+	0xa830, 0x9086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x52e3,
+	0x080c, 0x48ac, 0x0904, 0x336c, 0x0804, 0x4f79, 0x81ff, 0x2009,
+	0x0001, 0x1904, 0x3369, 0x080c, 0x539a, 0x2009, 0x0007, 0x1904,
+	0x3369, 0x080c, 0x655a, 0x0120, 0x2009, 0x0008, 0x0804, 0x3369,
+	0x080c, 0x48ac, 0x0904, 0x336c, 0x080c, 0x6562, 0x2009, 0x0009,
+	0x1904, 0x3369, 0x080c, 0x4879, 0x2009, 0x0002, 0x0904, 0x3369,
+	0x9006, 0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x7988, 0x9194,
+	0xff00, 0x918c, 0x00ff, 0x9006, 0x82ff, 0x1128, 0xc0ed, 0xa952,
+	0x798c, 0xa956, 0x0038, 0x928e, 0x0100, 0x1904, 0x336c, 0xc0e5,
+	0xa952, 0xa956, 0xa83e, 0x080c, 0xbf8d, 0x2009, 0x0003, 0x0904,
+	0x3369, 0x7007, 0x0003, 0x701f, 0x5036, 0x0005, 0xa830, 0x9086,
+	0x0100, 0x2009, 0x0004, 0x0904, 0x3369, 0x0804, 0x3337, 0x7aa8,
+	0x9284, 0xc000, 0x0148, 0xd2ec, 0x01a0, 0x080c, 0x539a, 0x1188,
+	0x2009, 0x0014, 0x0804, 0x3369, 0xd2dc, 0x1568, 0x81ff, 0x2009,
+	0x0001, 0x1904, 0x3369, 0x080c, 0x539a, 0x2009, 0x0007, 0x1904,
+	0x3369, 0xd2f4, 0x0130, 0x9284, 0x5000, 0x080c, 0x5361, 0x0804,
+	0x3337, 0xd2fc, 0x0158, 0x080c, 0x48ac, 0x0904, 0x336c, 0x7984,
+	0x9284, 0x9000, 0x080c, 0x533e, 0x0804, 0x3337, 0x080c, 0x48ac,
+	0x0904, 0x336c, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x2009,
+	0x0009, 0x1904, 0x511f, 0x080c, 0x4879, 0x2009, 0x0002, 0x0904,
+	0x511f, 0xa85c, 0x9080, 0x001b, 0xaf60, 0x2009, 0x0008, 0x7a8c,
+	0x7b88, 0x7c9c, 0x7d98, 0x080c, 0x48c2, 0x701f, 0x5090, 0x0005,
+	0xa86c, 0x9086, 0x0500, 0x1138, 0xa870, 0x9005, 0x1120, 0xa874,
+	0x9084, 0xff00, 0x0110, 0x1904, 0x336c, 0xa866, 0xa832, 0xa868,
+	0xc0fd, 0xa86a, 0x080c, 0x48ac, 0x1110, 0x0804, 0x336c, 0x2009,
+	0x0043, 0x080c, 0xbff5, 0x2009, 0x0003, 0x0904, 0x511f, 0x7007,
+	0x0003, 0x701f, 0x50b4, 0x0005, 0xa830, 0x9086, 0x0100, 0x2009,
+	0x0004, 0x0904, 0x511f, 0x7984, 0x7aa8, 0x9284, 0x1000, 0x080c,
+	0x533e, 0x0804, 0x3337, 0x00c6, 0xaab0, 0x9284, 0xc000, 0x0140,
+	0xd2ec, 0x0168, 0x080c, 0x539a, 0x1150, 0x2009, 0x0014, 0x04f0,
+	0x2061, 0x1800, 0x080c, 0x539a, 0x2009, 0x0007, 0x15b8, 0xd2f4,
+	0x0128, 0x9284, 0x5000, 0x080c, 0x5361, 0x0050, 0xd2fc, 0x0178,
+	0x080c, 0x48aa, 0x0588, 0xa998, 0x9284, 0x9000, 0x080c, 0x533e,
+	0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0x0438, 0x080c,
+	0x48aa, 0x0510, 0x080c, 0x6562, 0x2009, 0x0009, 0x11b8, 0xa8c4,
+	0x9086, 0x0500, 0x11c8, 0xa8c8, 0x9005, 0x11b0, 0xa8cc, 0x9084,
+	0xff00, 0x1190, 0x080c, 0x48aa, 0x1108, 0x0070, 0x2009, 0x004b,
+	0x080c, 0xbff5, 0x2009, 0x0003, 0x0108, 0x0078, 0x0429, 0x19c0,
+	0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085,
+	0x0001, 0x2001, 0x0030, 0x00ce, 0x0005, 0x9006, 0x0ce0, 0x7aa8,
+	0xd2dc, 0x0904, 0x3369, 0x0016, 0x7984, 0x9284, 0x1000, 0xc0fd,
+	0x080c, 0x533e, 0x001e, 0x1904, 0x3369, 0x0804, 0x3337, 0x00f6,
+	0x2d78, 0x0011, 0x00fe, 0x0005, 0xaab0, 0xd2dc, 0x0150, 0x0016,
+	0xa998, 0x9284, 0x1000, 0xc0fd, 0x080c, 0x533e, 0x001e, 0x9085,
+	0x0001, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x3369,
+	0x080c, 0x539a, 0x0120, 0x2009, 0x0007, 0x0804, 0x3369, 0x7984,
+	0x7ea8, 0x96b4, 0x00ff, 0x080c, 0x623e, 0x1904, 0x336c, 0x9186,
+	0x007f, 0x0138, 0x080c, 0x6562, 0x0120, 0x2009, 0x0009, 0x0804,
+	0x3369, 0x080c, 0x4879, 0x1120, 0x2009, 0x0002, 0x0804, 0x3369,
+	0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x2001, 0x0100, 0x8007,
+	0xa80a, 0x080c, 0xbcfa, 0x1120, 0x2009, 0x0003, 0x0804, 0x3369,
+	0x7007, 0x0003, 0x701f, 0x517d, 0x0005, 0xa808, 0x8007, 0x9086,
+	0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x3369, 0xa8e0, 0xa866,
+	0xa810, 0x8007, 0x9084, 0x00ff, 0x800c, 0xa814, 0x8007, 0x9084,
+	0x00ff, 0x8004, 0x9080, 0x0002, 0x9108, 0x8906, 0x8006, 0x8007,
+	0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0004, 0x7a8c, 0x7b88,
+	0x7c9c, 0x7d98, 0x0804, 0x48c5, 0x080c, 0x4879, 0x1120, 0x2009,
+	0x0002, 0x0804, 0x3369, 0x7984, 0x9194, 0xff00, 0x918c, 0x00ff,
+	0x8217, 0x82ff, 0x1118, 0x7023, 0x1984, 0x0040, 0x92c6, 0x0001,
+	0x1118, 0x7023, 0x199e, 0x0010, 0x0804, 0x336c, 0x2009, 0x001a,
 	0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019, 0xaf60,
-	0x0804, 0x48be, 0x7884, 0x908a, 0x1000, 0x1a04, 0x3365, 0x0126,
-	0x2091, 0x8000, 0x8003, 0x800b, 0x810b, 0x9108, 0x00c6, 0x2061,
-	0x19cb, 0x6142, 0x00ce, 0x012e, 0x0804, 0x3330, 0x00c6, 0x080c,
-	0x6fa7, 0x1160, 0x080c, 0x728b, 0x080c, 0x5cca, 0x9085, 0x0001,
-	0x080c, 0x6fee, 0x080c, 0x6ed9, 0x080c, 0x0db4, 0x2061, 0x1800,
-	0x6030, 0xc09d, 0x6032, 0x080c, 0x5b89, 0x00ce, 0x0005, 0x00c6,
-	0x2001, 0x1800, 0x2004, 0x908e, 0x0000, 0x0904, 0x3362, 0x7884,
-	0x9005, 0x0188, 0x7888, 0x2061, 0x196d, 0x2c0c, 0x2062, 0x080c,
-	0x2a45, 0x01a0, 0x080c, 0x2a4d, 0x0188, 0x080c, 0x2a55, 0x0170,
-	0x2162, 0x0804, 0x3365, 0x2061, 0x0100, 0x6038, 0x9086, 0x0007,
-	0x1118, 0x2009, 0x0001, 0x0010, 0x2009, 0x0000, 0x7884, 0x9086,
-	0x0002, 0x1548, 0x2061, 0x0100, 0x6028, 0xc09c, 0x602a, 0x0026,
-	0x2011, 0x0003, 0x080c, 0x9758, 0x2011, 0x0002, 0x080c, 0x9762,
-	0x002e, 0x080c, 0x9649, 0x0036, 0x901e, 0x080c, 0x96bf, 0x003e,
-	0x60e3, 0x0000, 0x080c, 0xd894, 0x080c, 0xd8af, 0x9085, 0x0001,
-	0x080c, 0x6fee, 0x9006, 0x080c, 0x2b14, 0x2001, 0x1800, 0x2003,
-	0x0004, 0x6027, 0x0008, 0x00ce, 0x0804, 0x3330, 0x81ff, 0x0120,
-	0x2009, 0x0001, 0x0804, 0x3362, 0x080c, 0x5393, 0x0120, 0x2009,
-	0x0007, 0x0804, 0x3362, 0x7984, 0x7ea8, 0x96b4, 0x00ff, 0x080c,
-	0x6237, 0x1904, 0x3365, 0x9186, 0x007f, 0x0138, 0x080c, 0x655b,
-	0x0120, 0x2009, 0x0009, 0x0804, 0x3362, 0x080c, 0x4872, 0x1120,
-	0x2009, 0x0002, 0x0804, 0x3362, 0xa867, 0x0000, 0xa868, 0xc0fd,
-	0xa86a, 0x080c, 0xbce4, 0x1120, 0x2009, 0x0003, 0x0804, 0x3362,
-	0x7007, 0x0003, 0x701f, 0x52c5, 0x0005, 0xa830, 0x9086, 0x0100,
-	0x1120, 0x2009, 0x0004, 0x0804, 0x3362, 0xa8e0, 0xa866, 0xa834,
-	0x8007, 0x800c, 0xa85c, 0x9080, 0x000c, 0x7a8c, 0x7b88, 0x7c9c,
-	0x7d98, 0xaf60, 0x0804, 0x48be, 0xa898, 0x9086, 0x000d, 0x1904,
-	0x3362, 0x2021, 0x4005, 0x0126, 0x2091, 0x8000, 0x0e04, 0x52e9,
-	0x0010, 0x012e, 0x0cc0, 0x7c36, 0x9486, 0x4000, 0x0118, 0x7833,
-	0x0011, 0x0010, 0x7833, 0x0010, 0x7883, 0x4005, 0xa998, 0x7986,
-	0xa9a4, 0x799a, 0xa9a8, 0x799e, 0x080c, 0x48ae, 0x2091, 0x4080,
-	0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1187, 0x7007, 0x0001,
-	0x2091, 0x5000, 0x700f, 0x0000, 0x012e, 0x0005, 0x0126, 0x2091,
-	0x8000, 0x00c6, 0x2061, 0x19cb, 0x7984, 0x6152, 0x614e, 0x6057,
-	0x0000, 0x604b, 0x0009, 0x7898, 0x606a, 0x789c, 0x6066, 0x7888,
-	0x6062, 0x788c, 0x605e, 0x2001, 0x19d9, 0x2044, 0x2001, 0x19e0,
-	0xa076, 0xa060, 0xa072, 0xa07b, 0x0001, 0xa07f, 0x0002, 0xa06b,
-	0x0000, 0xa09f, 0x0000, 0x00ce, 0x012e, 0x0804, 0x3330, 0x0126,
-	0x2091, 0x8000, 0x00b6, 0x00c6, 0x90e4, 0xc000, 0x0128, 0x0006,
-	0x080c, 0xbb4b, 0x000e, 0x1198, 0xd0e4, 0x0160, 0x9180, 0x1000,
-	0x2004, 0x905d, 0x0160, 0x080c, 0x5ce4, 0x080c, 0x9d98, 0x0110,
-	0xb817, 0x0000, 0x9006, 0x00ce, 0x00be, 0x012e, 0x0005, 0x9085,
-	0x0001, 0x0cc8, 0x0126, 0x2091, 0x8000, 0x0156, 0x2010, 0x900e,
-	0x20a9, 0x0800, 0x0016, 0x9180, 0x1000, 0x2004, 0x9005, 0x0180,
-	0x9186, 0x007e, 0x0168, 0x9186, 0x007f, 0x0150, 0x9186, 0x0080,
-	0x0138, 0x9186, 0x00ff, 0x0120, 0x0026, 0x2200, 0x0801, 0x002e,
-	0x001e, 0x8108, 0x1f04, 0x5362, 0x015e, 0x012e, 0x0005, 0x2001,
-	0x1854, 0x2004, 0x0005, 0x2001, 0x1873, 0x2004, 0x0005, 0x0006,
-	0x2001, 0x1810, 0x2004, 0xd0d4, 0x000e, 0x0005, 0x2001, 0x180e,
-	0x2004, 0xd0b4, 0x0005, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003,
-	0x0005, 0x0016, 0x00e6, 0x2071, 0x1894, 0x7108, 0x910d, 0x710a,
-	0x00ee, 0x001e, 0x0005, 0x79a4, 0x9182, 0x0081, 0x1a04, 0x3365,
-	0x810c, 0x0016, 0x080c, 0x4872, 0x080c, 0x0ef3, 0x2100, 0x2238,
-	0x7d84, 0x7c88, 0x7b8c, 0x7a90, 0x001e, 0x080c, 0x48bb, 0x701f,
-	0x53ba, 0x0005, 0x2079, 0x0000, 0x7d94, 0x7c98, 0x7ba8, 0x7aac,
-	0x79a4, 0x810c, 0x2061, 0x18ae, 0x2c44, 0xa770, 0xa074, 0x2071,
-	0x1894, 0x080c, 0x48be, 0x701f, 0x53ce, 0x0005, 0x2061, 0x18ae,
-	0x2c44, 0x0016, 0x0026, 0xa270, 0xa174, 0x080c, 0x0efb, 0x002e,
-	0x001e, 0x080c, 0x0fa8, 0x9006, 0xa802, 0xa806, 0x0804, 0x3330,
-	0x0126, 0x0156, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6, 0x00d6,
-	0x00e6, 0x00f6, 0x2061, 0x0100, 0x2069, 0x0200, 0x2071, 0x1800,
-	0x6044, 0xd0a4, 0x11e8, 0xd084, 0x0118, 0x080c, 0x5589, 0x0068,
-	0xd08c, 0x0118, 0x080c, 0x5492, 0x0040, 0xd094, 0x0118, 0x080c,
-	0x5462, 0x0018, 0xd09c, 0x0108, 0x0099, 0x00fe, 0x00ee, 0x00de,
-	0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x012e, 0x0005,
-	0x0016, 0x6128, 0xd19c, 0x1110, 0xc19d, 0x612a, 0x001e, 0x0c68,
-	0x0006, 0x7094, 0x9005, 0x000e, 0x0120, 0x7097, 0x0000, 0x708f,
-	0x0000, 0x624c, 0x9286, 0xf0f0, 0x1150, 0x6048, 0x9086, 0xf0f0,
-	0x0130, 0x624a, 0x6043, 0x0090, 0x6043, 0x0010, 0x0490, 0x9294,
-	0xff00, 0x9296, 0xf700, 0x0178, 0x7138, 0xd1a4, 0x1160, 0x6240,
-	0x9295, 0x0100, 0x6242, 0x9294, 0x0010, 0x0128, 0x2009, 0x00f7,
-	0x080c, 0x5c46, 0x00f0, 0x6040, 0x9084, 0x0010, 0x9085, 0x0140,
-	0x6042, 0x6043, 0x0000, 0x7083, 0x0000, 0x709f, 0x0001, 0x70c3,
-	0x0000, 0x70db, 0x0000, 0x2009, 0x1c80, 0x200b, 0x0000, 0x7093,
-	0x0000, 0x7087, 0x000f, 0x2009, 0x000f, 0x2011, 0x5b2c, 0x080c,
-	0x80a2, 0x0005, 0x2001, 0x1875, 0x2004, 0xd08c, 0x0110, 0x705b,
-	0xffff, 0x7084, 0x9005, 0x1528, 0x2011, 0x5b2c, 0x080c, 0x8010,
-	0x6040, 0x9094, 0x0010, 0x9285, 0x0020, 0x6042, 0x20a9, 0x00c8,
-	0x6044, 0xd08c, 0x1168, 0x1f04, 0x5478, 0x6242, 0x7097, 0x0000,
-	0x6040, 0x9094, 0x0010, 0x9285, 0x0080, 0x6042, 0x6242, 0x0048,
-	0x6242, 0x7097, 0x0000, 0x708b, 0x0000, 0x9006, 0x080c, 0x5ccf,
-	0x0000, 0x0005, 0x7088, 0x908a, 0x0003, 0x1a0c, 0x0db4, 0x000b,
-	0x0005, 0x549c, 0x54ed, 0x5588, 0x00f6, 0x0016, 0x6900, 0x918c,
-	0x0800, 0x708b, 0x0001, 0x2001, 0x015d, 0x2003, 0x0000, 0x6803,
-	0x00fc, 0x20a9, 0x0004, 0x6800, 0x9084, 0x00fc, 0x0120, 0x1f04,
-	0x54ab, 0x080c, 0x0db4, 0x68a0, 0x68a2, 0x689c, 0x689e, 0x6898,
-	0x689a, 0xa001, 0x918d, 0x1600, 0x6902, 0x001e, 0x6837, 0x0020,
-	0x080c, 0x5cab, 0x2079, 0x1c00, 0x7833, 0x1101, 0x7837, 0x0000,
-	0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0001, 0x20a1, 0x1c0e,
-	0x20a9, 0x0004, 0x4003, 0x080c, 0x9c26, 0x20e1, 0x0001, 0x2099,
+	0x080c, 0x48c2, 0x701f, 0x51cd, 0x0005, 0x2001, 0x182d, 0x2003,
+	0x0001, 0xa85c, 0x9080, 0x0019, 0x2098, 0xa860, 0x20e0, 0x20a9,
+	0x001a, 0x7020, 0x20a0, 0x20e9, 0x0001, 0x4003, 0x0804, 0x3337,
+	0x080c, 0x4879, 0x1120, 0x2009, 0x0002, 0x0804, 0x3369, 0x7984,
+	0x9194, 0xff00, 0x918c, 0x00ff, 0x8217, 0x82ff, 0x1118, 0x2099,
+	0x1984, 0x0040, 0x92c6, 0x0001, 0x1118, 0x2099, 0x199e, 0x0010,
+	0x0804, 0x336c, 0xa85c, 0x9080, 0x0019, 0x20a0, 0xa860, 0x20e8,
+	0x20a9, 0x001a, 0x20e1, 0x0001, 0x4003, 0x2009, 0x001a, 0x7a8c,
+	0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x0804,
+	0x48c5, 0x7884, 0x908a, 0x1000, 0x1a04, 0x336c, 0x0126, 0x2091,
+	0x8000, 0x8003, 0x800b, 0x810b, 0x9108, 0x00c6, 0x2061, 0x19cb,
+	0x6142, 0x00ce, 0x012e, 0x0804, 0x3337, 0x00c6, 0x080c, 0x6fb2,
+	0x1160, 0x080c, 0x7296, 0x080c, 0x5cd1, 0x9085, 0x0001, 0x080c,
+	0x6ff9, 0x080c, 0x6ee4, 0x080c, 0x0db4, 0x2061, 0x1800, 0x6030,
+	0xc09d, 0x6032, 0x080c, 0x5b90, 0x00ce, 0x0005, 0x00c6, 0x2001,
+	0x1800, 0x2004, 0x908e, 0x0000, 0x0904, 0x3369, 0x7884, 0x9005,
+	0x0188, 0x7888, 0x2061, 0x196d, 0x2c0c, 0x2062, 0x080c, 0x2a45,
+	0x01a0, 0x080c, 0x2a4d, 0x0188, 0x080c, 0x2a55, 0x0170, 0x2162,
+	0x0804, 0x336c, 0x2061, 0x0100, 0x6038, 0x9086, 0x0007, 0x1118,
+	0x2009, 0x0001, 0x0010, 0x2009, 0x0000, 0x7884, 0x9086, 0x0002,
+	0x1548, 0x2061, 0x0100, 0x6028, 0xc09c, 0x602a, 0x0026, 0x2011,
+	0x0003, 0x080c, 0x9771, 0x2011, 0x0002, 0x080c, 0x977b, 0x002e,
+	0x080c, 0x9662, 0x0036, 0x901e, 0x080c, 0x96d8, 0x003e, 0x60e3,
+	0x0000, 0x080c, 0xd8b4, 0x080c, 0xd8cf, 0x9085, 0x0001, 0x080c,
+	0x6ff9, 0x9006, 0x080c, 0x2b14, 0x2001, 0x1800, 0x2003, 0x0004,
+	0x6027, 0x0008, 0x00ce, 0x0804, 0x3337, 0x81ff, 0x0120, 0x2009,
+	0x0001, 0x0804, 0x3369, 0x080c, 0x539a, 0x0120, 0x2009, 0x0007,
+	0x0804, 0x3369, 0x7984, 0x7ea8, 0x96b4, 0x00ff, 0x080c, 0x623e,
+	0x1904, 0x336c, 0x9186, 0x007f, 0x0138, 0x080c, 0x6562, 0x0120,
+	0x2009, 0x0009, 0x0804, 0x3369, 0x080c, 0x4879, 0x1120, 0x2009,
+	0x0002, 0x0804, 0x3369, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a,
+	0x080c, 0xbcfd, 0x1120, 0x2009, 0x0003, 0x0804, 0x3369, 0x7007,
+	0x0003, 0x701f, 0x52cc, 0x0005, 0xa830, 0x9086, 0x0100, 0x1120,
+	0x2009, 0x0004, 0x0804, 0x3369, 0xa8e0, 0xa866, 0xa834, 0x8007,
+	0x800c, 0xa85c, 0x9080, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98,
+	0xaf60, 0x0804, 0x48c5, 0xa898, 0x9086, 0x000d, 0x1904, 0x3369,
+	0x2021, 0x4005, 0x0126, 0x2091, 0x8000, 0x0e04, 0x52f0, 0x0010,
+	0x012e, 0x0cc0, 0x7c36, 0x9486, 0x4000, 0x0118, 0x7833, 0x0011,
+	0x0010, 0x7833, 0x0010, 0x7883, 0x4005, 0xa998, 0x7986, 0xa9a4,
+	0x799a, 0xa9a8, 0x799e, 0x080c, 0x48b5, 0x2091, 0x4080, 0x2001,
+	0x0089, 0x2004, 0xd084, 0x190c, 0x1187, 0x7007, 0x0001, 0x2091,
+	0x5000, 0x700f, 0x0000, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000,
+	0x00c6, 0x2061, 0x19cb, 0x7984, 0x6152, 0x614e, 0x6057, 0x0000,
+	0x604b, 0x0009, 0x7898, 0x606a, 0x789c, 0x6066, 0x7888, 0x6062,
+	0x788c, 0x605e, 0x2001, 0x19d9, 0x2044, 0x2001, 0x19e0, 0xa076,
+	0xa060, 0xa072, 0xa07b, 0x0001, 0xa07f, 0x0002, 0xa06b, 0x0000,
+	0xa09f, 0x0000, 0x00ce, 0x012e, 0x0804, 0x3337, 0x0126, 0x2091,
+	0x8000, 0x00b6, 0x00c6, 0x90e4, 0xc000, 0x0128, 0x0006, 0x080c,
+	0xbb64, 0x000e, 0x1198, 0xd0e4, 0x0160, 0x9180, 0x1000, 0x2004,
+	0x905d, 0x0160, 0x080c, 0x5ceb, 0x080c, 0x9db1, 0x0110, 0xb817,
+	0x0000, 0x9006, 0x00ce, 0x00be, 0x012e, 0x0005, 0x9085, 0x0001,
+	0x0cc8, 0x0126, 0x2091, 0x8000, 0x0156, 0x2010, 0x900e, 0x20a9,
+	0x0800, 0x0016, 0x9180, 0x1000, 0x2004, 0x9005, 0x0180, 0x9186,
+	0x007e, 0x0168, 0x9186, 0x007f, 0x0150, 0x9186, 0x0080, 0x0138,
+	0x9186, 0x00ff, 0x0120, 0x0026, 0x2200, 0x0801, 0x002e, 0x001e,
+	0x8108, 0x1f04, 0x5369, 0x015e, 0x012e, 0x0005, 0x2001, 0x1854,
+	0x2004, 0x0005, 0x2001, 0x1873, 0x2004, 0x0005, 0x0006, 0x2001,
+	0x1810, 0x2004, 0xd0d4, 0x000e, 0x0005, 0x2001, 0x180e, 0x2004,
+	0xd0b4, 0x0005, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x0005,
+	0x0016, 0x00e6, 0x2071, 0x1894, 0x7108, 0x910d, 0x710a, 0x00ee,
+	0x001e, 0x0005, 0x79a4, 0x9182, 0x0081, 0x1a04, 0x336c, 0x810c,
+	0x0016, 0x080c, 0x4879, 0x080c, 0x0ef3, 0x2100, 0x2238, 0x7d84,
+	0x7c88, 0x7b8c, 0x7a90, 0x001e, 0x080c, 0x48c2, 0x701f, 0x53c1,
+	0x0005, 0x2079, 0x0000, 0x7d94, 0x7c98, 0x7ba8, 0x7aac, 0x79a4,
+	0x810c, 0x2061, 0x18ae, 0x2c44, 0xa770, 0xa074, 0x2071, 0x1894,
+	0x080c, 0x48c5, 0x701f, 0x53d5, 0x0005, 0x2061, 0x18ae, 0x2c44,
+	0x0016, 0x0026, 0xa270, 0xa174, 0x080c, 0x0efb, 0x002e, 0x001e,
+	0x080c, 0x0fa8, 0x9006, 0xa802, 0xa806, 0x0804, 0x3337, 0x0126,
+	0x0156, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6,
+	0x00f6, 0x2061, 0x0100, 0x2069, 0x0200, 0x2071, 0x1800, 0x6044,
+	0xd0a4, 0x11e8, 0xd084, 0x0118, 0x080c, 0x5590, 0x0068, 0xd08c,
+	0x0118, 0x080c, 0x5499, 0x0040, 0xd094, 0x0118, 0x080c, 0x5469,
+	0x0018, 0xd09c, 0x0108, 0x0099, 0x00fe, 0x00ee, 0x00de, 0x00ce,
+	0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x012e, 0x0005, 0x0016,
+	0x6128, 0xd19c, 0x1110, 0xc19d, 0x612a, 0x001e, 0x0c68, 0x0006,
+	0x7094, 0x9005, 0x000e, 0x0120, 0x7097, 0x0000, 0x708f, 0x0000,
+	0x624c, 0x9286, 0xf0f0, 0x1150, 0x6048, 0x9086, 0xf0f0, 0x0130,
+	0x624a, 0x6043, 0x0090, 0x6043, 0x0010, 0x0490, 0x9294, 0xff00,
+	0x9296, 0xf700, 0x0178, 0x7138, 0xd1a4, 0x1160, 0x6240, 0x9295,
+	0x0100, 0x6242, 0x9294, 0x0010, 0x0128, 0x2009, 0x00f7, 0x080c,
+	0x5c4d, 0x00f0, 0x6040, 0x9084, 0x0010, 0x9085, 0x0140, 0x6042,
+	0x6043, 0x0000, 0x7083, 0x0000, 0x709f, 0x0001, 0x70c3, 0x0000,
+	0x70db, 0x0000, 0x2009, 0x1c80, 0x200b, 0x0000, 0x7093, 0x0000,
+	0x7087, 0x000f, 0x2009, 0x000f, 0x2011, 0x5b33, 0x080c, 0x80ca,
+	0x0005, 0x2001, 0x1875, 0x2004, 0xd08c, 0x0110, 0x705b, 0xffff,
+	0x7084, 0x9005, 0x1528, 0x2011, 0x5b33, 0x080c, 0x8038, 0x6040,
+	0x9094, 0x0010, 0x9285, 0x0020, 0x6042, 0x20a9, 0x00c8, 0x6044,
+	0xd08c, 0x1168, 0x1f04, 0x547f, 0x6242, 0x7097, 0x0000, 0x6040,
+	0x9094, 0x0010, 0x9285, 0x0080, 0x6042, 0x6242, 0x0048, 0x6242,
+	0x7097, 0x0000, 0x708b, 0x0000, 0x9006, 0x080c, 0x5cd6, 0x0000,
+	0x0005, 0x7088, 0x908a, 0x0003, 0x1a0c, 0x0db4, 0x000b, 0x0005,
+	0x54a3, 0x54f4, 0x558f, 0x00f6, 0x0016, 0x6900, 0x918c, 0x0800,
+	0x708b, 0x0001, 0x2001, 0x015d, 0x2003, 0x0000, 0x6803, 0x00fc,
+	0x20a9, 0x0004, 0x6800, 0x9084, 0x00fc, 0x0120, 0x1f04, 0x54b2,
+	0x080c, 0x0db4, 0x68a0, 0x68a2, 0x689c, 0x689e, 0x6898, 0x689a,
+	0xa001, 0x918d, 0x1600, 0x6902, 0x001e, 0x6837, 0x0020, 0x080c,
+	0x5cb2, 0x2079, 0x1c00, 0x7833, 0x1101, 0x7837, 0x0000, 0x20e1,
+	0x0001, 0x2099, 0x1805, 0x20e9, 0x0001, 0x20a1, 0x1c0e, 0x20a9,
+	0x0004, 0x4003, 0x080c, 0x9c3f, 0x20e1, 0x0001, 0x2099, 0x1c00,
+	0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x0014, 0x4003, 0x60c3,
+	0x000c, 0x600f, 0x0000, 0x080c, 0x5b64, 0x00fe, 0x9006, 0x708e,
+	0x6043, 0x0008, 0x6042, 0x0005, 0x00f6, 0x708c, 0x708f, 0x0000,
+	0x9025, 0x0904, 0x556c, 0x6020, 0xd0b4, 0x1904, 0x556a, 0x719c,
+	0x81ff, 0x0904, 0x5558, 0x9486, 0x000c, 0x1904, 0x5565, 0x9480,
+	0x0018, 0x8004, 0x20a8, 0x080c, 0x5cab, 0x2011, 0x0260, 0x2019,
+	0x1c00, 0x220c, 0x2304, 0x9106, 0x11e8, 0x8210, 0x8318, 0x1f04,
+	0x5511, 0x6043, 0x0004, 0x2061, 0x0140, 0x605b, 0xbc94, 0x605f,
+	0xf0f0, 0x2061, 0x0100, 0x6043, 0x0006, 0x708b, 0x0002, 0x7097,
+	0x0002, 0x2009, 0x07d0, 0x2011, 0x5b3a, 0x080c, 0x80ca, 0x080c,
+	0x5cb2, 0x04c0, 0x080c, 0x5cab, 0x2079, 0x0260, 0x7930, 0x918e,
+	0x1101, 0x1558, 0x7834, 0x9005, 0x1540, 0x7900, 0x918c, 0x00ff,
+	0x1118, 0x7804, 0x9005, 0x0190, 0x080c, 0x5cab, 0x2011, 0x026e,
+	0x2019, 0x1805, 0x20a9, 0x0004, 0x220c, 0x2304, 0x9102, 0x0230,
+	0x11a0, 0x8210, 0x8318, 0x1f04, 0x554c, 0x0078, 0x709f, 0x0000,
+	0x080c, 0x5cab, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0001,
+	0x20a1, 0x1c00, 0x20a9, 0x0014, 0x4003, 0x6043, 0x0008, 0x6043,
+	0x0000, 0x0010, 0x00fe, 0x0005, 0x6040, 0x9085, 0x0100, 0x6042,
+	0x6020, 0xd0b4, 0x1db8, 0x080c, 0x9c3f, 0x20e1, 0x0001, 0x2099,
 	0x1c00, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x0014, 0x4003,
-	0x60c3, 0x000c, 0x600f, 0x0000, 0x080c, 0x5b5d, 0x00fe, 0x9006,
-	0x708e, 0x6043, 0x0008, 0x6042, 0x0005, 0x00f6, 0x708c, 0x708f,
-	0x0000, 0x9025, 0x0904, 0x5565, 0x6020, 0xd0b4, 0x1904, 0x5563,
-	0x719c, 0x81ff, 0x0904, 0x5551, 0x9486, 0x000c, 0x1904, 0x555e,
-	0x9480, 0x0018, 0x8004, 0x20a8, 0x080c, 0x5ca4, 0x2011, 0x0260,
-	0x2019, 0x1c00, 0x220c, 0x2304, 0x9106, 0x11e8, 0x8210, 0x8318,
-	0x1f04, 0x550a, 0x6043, 0x0004, 0x2061, 0x0140, 0x605b, 0xbc94,
-	0x605f, 0xf0f0, 0x2061, 0x0100, 0x6043, 0x0006, 0x708b, 0x0002,
-	0x7097, 0x0002, 0x2009, 0x07d0, 0x2011, 0x5b33, 0x080c, 0x80a2,
-	0x080c, 0x5cab, 0x04c0, 0x080c, 0x5ca4, 0x2079, 0x0260, 0x7930,
-	0x918e, 0x1101, 0x1558, 0x7834, 0x9005, 0x1540, 0x7900, 0x918c,
-	0x00ff, 0x1118, 0x7804, 0x9005, 0x0190, 0x080c, 0x5ca4, 0x2011,
-	0x026e, 0x2019, 0x1805, 0x20a9, 0x0004, 0x220c, 0x2304, 0x9102,
-	0x0230, 0x11a0, 0x8210, 0x8318, 0x1f04, 0x5545, 0x0078, 0x709f,
-	0x0000, 0x080c, 0x5ca4, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9,
-	0x0001, 0x20a1, 0x1c00, 0x20a9, 0x0014, 0x4003, 0x6043, 0x0008,
-	0x6043, 0x0000, 0x0010, 0x00fe, 0x0005, 0x6040, 0x9085, 0x0100,
-	0x6042, 0x6020, 0xd0b4, 0x1db8, 0x080c, 0x9c26, 0x20e1, 0x0001,
-	0x2099, 0x1c00, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x0014,
-	0x4003, 0x60c3, 0x000c, 0x2011, 0x19c2, 0x2013, 0x0000, 0x708f,
-	0x0000, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0x938a, 0x08d8,
-	0x0005, 0x7094, 0x908a, 0x001d, 0x1a0c, 0x0db4, 0x000b, 0x0005,
-	0x55ba, 0x55cd, 0x55f6, 0x5616, 0x563c, 0x566b, 0x5691, 0x56c9,
-	0x56ef, 0x571d, 0x5758, 0x5790, 0x57ae, 0x57d9, 0x57fb, 0x5816,
-	0x5820, 0x5854, 0x587a, 0x58a9, 0x58cf, 0x5907, 0x594b, 0x5988,
-	0x59a9, 0x5a02, 0x5a24, 0x5a52, 0x5a52, 0x00c6, 0x2061, 0x1800,
-	0x6003, 0x0007, 0x2061, 0x0100, 0x6004, 0x9084, 0xfff9, 0x6006,
-	0x00ce, 0x0005, 0x2061, 0x0140, 0x605b, 0xbc94, 0x605f, 0xf0f0,
-	0x2061, 0x0100, 0x6043, 0x0002, 0x7097, 0x0001, 0x2009, 0x07d0,
-	0x2011, 0x5b33, 0x080c, 0x80a2, 0x0005, 0x00f6, 0x708c, 0x9086,
-	0x0014, 0x1510, 0x6042, 0x6020, 0xd0b4, 0x11f0, 0x080c, 0x5ca4,
-	0x2079, 0x0260, 0x7a30, 0x9296, 0x1102, 0x11a0, 0x7834, 0x9005,
-	0x1188, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3,
-	0x0001, 0x2011, 0x5b33, 0x080c, 0x8010, 0x7097, 0x0010, 0x080c,
-	0x5820, 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x7097,
-	0x0003, 0x6043, 0x0004, 0x2011, 0x5b33, 0x080c, 0x8010, 0x080c,
-	0x5c28, 0x2079, 0x0240, 0x7833, 0x1102, 0x7837, 0x0000, 0x20a9,
-	0x0008, 0x9f88, 0x000e, 0x200b, 0x0000, 0x8108, 0x1f04, 0x560b,
-	0x60c3, 0x0014, 0x080c, 0x5b5d, 0x00fe, 0x0005, 0x00f6, 0x708c,
-	0x9005, 0x0500, 0x2011, 0x5b33, 0x080c, 0x8010, 0x9086, 0x0014,
-	0x11b8, 0x080c, 0x5ca4, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1102,
-	0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0,
-	0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, 0x0004, 0x0029, 0x0010,
-	0x080c, 0x5c80, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0005, 0x080c,
-	0x5c28, 0x2079, 0x0240, 0x7833, 0x1103, 0x7837, 0x0000, 0x080c,
-	0x5ca4, 0x080c, 0x5c87, 0x1170, 0x7080, 0x9005, 0x1158, 0x7158,
-	0x9186, 0xffff, 0x0138, 0x2011, 0x0008, 0x080c, 0x5ae0, 0x0168,
-	0x080c, 0x5c5d, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e,
-	0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c,
-	0x5b5d, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x0500, 0x2011,
-	0x5b33, 0x080c, 0x8010, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5ca4,
+	0x60c3, 0x000c, 0x2011, 0x19c2, 0x2013, 0x0000, 0x708f, 0x0000,
+	0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0x93a3, 0x08d8, 0x0005,
+	0x7094, 0x908a, 0x001d, 0x1a0c, 0x0db4, 0x000b, 0x0005, 0x55c1,
+	0x55d4, 0x55fd, 0x561d, 0x5643, 0x5672, 0x5698, 0x56d0, 0x56f6,
+	0x5724, 0x575f, 0x5797, 0x57b5, 0x57e0, 0x5802, 0x581d, 0x5827,
+	0x585b, 0x5881, 0x58b0, 0x58d6, 0x590e, 0x5952, 0x598f, 0x59b0,
+	0x5a09, 0x5a2b, 0x5a59, 0x5a59, 0x00c6, 0x2061, 0x1800, 0x6003,
+	0x0007, 0x2061, 0x0100, 0x6004, 0x9084, 0xfff9, 0x6006, 0x00ce,
+	0x0005, 0x2061, 0x0140, 0x605b, 0xbc94, 0x605f, 0xf0f0, 0x2061,
+	0x0100, 0x6043, 0x0002, 0x7097, 0x0001, 0x2009, 0x07d0, 0x2011,
+	0x5b3a, 0x080c, 0x80ca, 0x0005, 0x00f6, 0x708c, 0x9086, 0x0014,
+	0x1510, 0x6042, 0x6020, 0xd0b4, 0x11f0, 0x080c, 0x5cab, 0x2079,
+	0x0260, 0x7a30, 0x9296, 0x1102, 0x11a0, 0x7834, 0x9005, 0x1188,
+	0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001,
+	0x2011, 0x5b3a, 0x080c, 0x8038, 0x7097, 0x0010, 0x080c, 0x5827,
+	0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0003,
+	0x6043, 0x0004, 0x2011, 0x5b3a, 0x080c, 0x8038, 0x080c, 0x5c2f,
+	0x2079, 0x0240, 0x7833, 0x1102, 0x7837, 0x0000, 0x20a9, 0x0008,
+	0x9f88, 0x000e, 0x200b, 0x0000, 0x8108, 0x1f04, 0x5612, 0x60c3,
+	0x0014, 0x080c, 0x5b64, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005,
+	0x0500, 0x2011, 0x5b3a, 0x080c, 0x8038, 0x9086, 0x0014, 0x11b8,
+	0x080c, 0x5cab, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1102, 0x1178,
+	0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005,
+	0x1110, 0x70c3, 0x0001, 0x7097, 0x0004, 0x0029, 0x0010, 0x080c,
+	0x5c87, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0005, 0x080c, 0x5c2f,
+	0x2079, 0x0240, 0x7833, 0x1103, 0x7837, 0x0000, 0x080c, 0x5cab,
+	0x080c, 0x5c8e, 0x1170, 0x7080, 0x9005, 0x1158, 0x7158, 0x9186,
+	0xffff, 0x0138, 0x2011, 0x0008, 0x080c, 0x5ae7, 0x0168, 0x080c,
+	0x5c64, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9,
+	0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5b64,
+	0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, 0x5b3a,
+	0x080c, 0x8038, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5cab, 0x2079,
+	0x0260, 0x7a30, 0x9296, 0x1103, 0x1178, 0x7834, 0x9005, 0x1160,
+	0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001,
+	0x7097, 0x0006, 0x0029, 0x0010, 0x080c, 0x5c87, 0x00fe, 0x0005,
+	0x00f6, 0x7097, 0x0007, 0x080c, 0x5c2f, 0x2079, 0x0240, 0x7833,
+	0x1104, 0x7837, 0x0000, 0x080c, 0x5cab, 0x080c, 0x5c8e, 0x11b8,
+	0x7080, 0x9005, 0x11a0, 0x7160, 0x9186, 0xffff, 0x0180, 0x9180,
+	0x3138, 0x200d, 0x918c, 0xff00, 0x810f, 0x2011, 0x0008, 0x080c,
+	0x5ae7, 0x0180, 0x080c, 0x4c98, 0x0110, 0x080c, 0x26cc, 0x20a9,
+	0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1,
+	0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5b64, 0x00fe, 0x0005,
+	0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, 0x5b3a, 0x080c, 0x8038,
+	0x9086, 0x0014, 0x11b8, 0x080c, 0x5cab, 0x2079, 0x0260, 0x7a30,
+	0x9296, 0x1104, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc,
+	0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, 0x0008,
+	0x0029, 0x0010, 0x080c, 0x5c87, 0x00fe, 0x0005, 0x00f6, 0x7097,
+	0x0009, 0x080c, 0x5c2f, 0x2079, 0x0240, 0x7833, 0x1105, 0x7837,
+	0x0100, 0x080c, 0x5c8e, 0x1150, 0x7080, 0x9005, 0x1138, 0x080c,
+	0x5a5a, 0x1188, 0x9085, 0x0001, 0x080c, 0x26cc, 0x20a9, 0x0008,
+	0x080c, 0x5cab, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000,
+	0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5b64, 0x0010,
+	0x080c, 0x55b4, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x05a8,
+	0x2011, 0x5b3a, 0x080c, 0x8038, 0x9086, 0x0014, 0x1560, 0x080c,
+	0x5cab, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1105, 0x1520, 0x7834,
+	0x9084, 0x0100, 0x2011, 0x0100, 0x921e, 0x1160, 0x7a38, 0xd2fc,
+	0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, 0x000a,
+	0x00b1, 0x0098, 0x9005, 0x1178, 0x7a38, 0xd2fc, 0x0128, 0x70c0,
+	0x9005, 0x1110, 0x70c3, 0x0001, 0x7093, 0x0000, 0x7097, 0x000e,
+	0x080c, 0x5802, 0x0010, 0x080c, 0x5c87, 0x00fe, 0x0005, 0x00f6,
+	0x7097, 0x000b, 0x2011, 0x1c0e, 0x20e9, 0x0001, 0x22a0, 0x20a9,
+	0x0040, 0x2019, 0xffff, 0x4304, 0x080c, 0x5c2f, 0x2079, 0x0240,
+	0x7833, 0x1106, 0x7837, 0x0000, 0x080c, 0x5c8e, 0x0118, 0x2013,
+	0x0000, 0x0020, 0x705c, 0x9085, 0x0100, 0x2012, 0x20a9, 0x0040,
+	0x2009, 0x024e, 0x2011, 0x1c0e, 0x220e, 0x8210, 0x8108, 0x9186,
+	0x0260, 0x1128, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x1f04,
+	0x5784, 0x60c3, 0x0084, 0x080c, 0x5b64, 0x00fe, 0x0005, 0x00f6,
+	0x708c, 0x9005, 0x01c0, 0x2011, 0x5b3a, 0x080c, 0x8038, 0x9086,
+	0x0084, 0x1178, 0x080c, 0x5cab, 0x2079, 0x0260, 0x7a30, 0x9296,
+	0x1106, 0x1138, 0x7834, 0x9005, 0x1120, 0x7097, 0x000c, 0x0029,
+	0x0010, 0x080c, 0x5c87, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x000d,
+	0x080c, 0x5c2f, 0x2079, 0x0240, 0x7833, 0x1107, 0x7837, 0x0000,
+	0x080c, 0x5cab, 0x20a9, 0x0040, 0x2011, 0x026e, 0x2009, 0x024e,
+	0x220e, 0x8210, 0x8108, 0x9186, 0x0260, 0x1150, 0x6810, 0x8000,
+	0x6812, 0x2009, 0x0240, 0x6814, 0x8000, 0x6816, 0x2011, 0x0260,
+	0x1f04, 0x57c8, 0x60c3, 0x0084, 0x080c, 0x5b64, 0x00fe, 0x0005,
+	0x00f6, 0x708c, 0x9005, 0x01e0, 0x2011, 0x5b3a, 0x080c, 0x8038,
+	0x9086, 0x0084, 0x1198, 0x080c, 0x5cab, 0x2079, 0x0260, 0x7a30,
+	0x9296, 0x1107, 0x1158, 0x7834, 0x9005, 0x1140, 0x7093, 0x0001,
+	0x080c, 0x5c01, 0x7097, 0x000e, 0x0029, 0x0010, 0x080c, 0x5c87,
+	0x00fe, 0x0005, 0x918d, 0x0001, 0x080c, 0x5cd6, 0x7097, 0x000f,
+	0x708f, 0x0000, 0x2061, 0x0140, 0x605b, 0xbc85, 0x605f, 0xb5b5,
+	0x2061, 0x0100, 0x6043, 0x0005, 0x6043, 0x0004, 0x2009, 0x07d0,
+	0x2011, 0x5b3a, 0x080c, 0x802c, 0x0005, 0x708c, 0x9005, 0x0130,
+	0x2011, 0x5b3a, 0x080c, 0x8038, 0x7097, 0x0000, 0x0005, 0x7097,
+	0x0011, 0x080c, 0x9c3f, 0x080c, 0x5cab, 0x20e1, 0x0000, 0x2099,
+	0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x748c, 0x9480, 0x0018,
+	0x9080, 0x0007, 0x9084, 0x03f8, 0x8004, 0x20a8, 0x4003, 0x080c,
+	0x5c8e, 0x11a0, 0x7178, 0x81ff, 0x0188, 0x900e, 0x707c, 0x9084,
+	0x00ff, 0x0160, 0x080c, 0x2663, 0x9186, 0x007e, 0x0138, 0x9186,
+	0x0080, 0x0120, 0x2011, 0x0008, 0x080c, 0x5ae7, 0x60c3, 0x0014,
+	0x080c, 0x5b64, 0x0005, 0x00f6, 0x708c, 0x9005, 0x0500, 0x2011,
+	0x5b3a, 0x080c, 0x8038, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5cab,
 	0x2079, 0x0260, 0x7a30, 0x9296, 0x1103, 0x1178, 0x7834, 0x9005,
 	0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3,
-	0x0001, 0x7097, 0x0006, 0x0029, 0x0010, 0x080c, 0x5c80, 0x00fe,
-	0x0005, 0x00f6, 0x7097, 0x0007, 0x080c, 0x5c28, 0x2079, 0x0240,
-	0x7833, 0x1104, 0x7837, 0x0000, 0x080c, 0x5ca4, 0x080c, 0x5c87,
-	0x11b8, 0x7080, 0x9005, 0x11a0, 0x7160, 0x9186, 0xffff, 0x0180,
-	0x9180, 0x3131, 0x200d, 0x918c, 0xff00, 0x810f, 0x2011, 0x0008,
-	0x080c, 0x5ae0, 0x0180, 0x080c, 0x4c91, 0x0110, 0x080c, 0x26cc,
-	0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000,
-	0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5b5d, 0x00fe,
-	0x0005, 0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, 0x5b33, 0x080c,
-	0x8010, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5ca4, 0x2079, 0x0260,
-	0x7a30, 0x9296, 0x1104, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38,
-	0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097,
-	0x0008, 0x0029, 0x0010, 0x080c, 0x5c80, 0x00fe, 0x0005, 0x00f6,
-	0x7097, 0x0009, 0x080c, 0x5c28, 0x2079, 0x0240, 0x7833, 0x1105,
-	0x7837, 0x0100, 0x080c, 0x5c87, 0x1150, 0x7080, 0x9005, 0x1138,
-	0x080c, 0x5a53, 0x1188, 0x9085, 0x0001, 0x080c, 0x26cc, 0x20a9,
-	0x0008, 0x080c, 0x5ca4, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9,
-	0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5b5d,
-	0x0010, 0x080c, 0x55ad, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005,
-	0x05a8, 0x2011, 0x5b33, 0x080c, 0x8010, 0x9086, 0x0014, 0x1560,
-	0x080c, 0x5ca4, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1105, 0x1520,
-	0x7834, 0x9084, 0x0100, 0x2011, 0x0100, 0x921e, 0x1160, 0x7a38,
-	0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097,
-	0x000a, 0x00b1, 0x0098, 0x9005, 0x1178, 0x7a38, 0xd2fc, 0x0128,
-	0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7093, 0x0000, 0x7097,
-	0x000e, 0x080c, 0x57fb, 0x0010, 0x080c, 0x5c80, 0x00fe, 0x0005,
-	0x00f6, 0x7097, 0x000b, 0x2011, 0x1c0e, 0x20e9, 0x0001, 0x22a0,
-	0x20a9, 0x0040, 0x2019, 0xffff, 0x4304, 0x080c, 0x5c28, 0x2079,
-	0x0240, 0x7833, 0x1106, 0x7837, 0x0000, 0x080c, 0x5c87, 0x0118,
-	0x2013, 0x0000, 0x0020, 0x705c, 0x9085, 0x0100, 0x2012, 0x20a9,
-	0x0040, 0x2009, 0x024e, 0x2011, 0x1c0e, 0x220e, 0x8210, 0x8108,
-	0x9186, 0x0260, 0x1128, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240,
-	0x1f04, 0x577d, 0x60c3, 0x0084, 0x080c, 0x5b5d, 0x00fe, 0x0005,
-	0x00f6, 0x708c, 0x9005, 0x01c0, 0x2011, 0x5b33, 0x080c, 0x8010,
-	0x9086, 0x0084, 0x1178, 0x080c, 0x5ca4, 0x2079, 0x0260, 0x7a30,
-	0x9296, 0x1106, 0x1138, 0x7834, 0x9005, 0x1120, 0x7097, 0x000c,
-	0x0029, 0x0010, 0x080c, 0x5c80, 0x00fe, 0x0005, 0x00f6, 0x7097,
-	0x000d, 0x080c, 0x5c28, 0x2079, 0x0240, 0x7833, 0x1107, 0x7837,
-	0x0000, 0x080c, 0x5ca4, 0x20a9, 0x0040, 0x2011, 0x026e, 0x2009,
-	0x024e, 0x220e, 0x8210, 0x8108, 0x9186, 0x0260, 0x1150, 0x6810,
-	0x8000, 0x6812, 0x2009, 0x0240, 0x6814, 0x8000, 0x6816, 0x2011,
-	0x0260, 0x1f04, 0x57c1, 0x60c3, 0x0084, 0x080c, 0x5b5d, 0x00fe,
-	0x0005, 0x00f6, 0x708c, 0x9005, 0x01e0, 0x2011, 0x5b33, 0x080c,
-	0x8010, 0x9086, 0x0084, 0x1198, 0x080c, 0x5ca4, 0x2079, 0x0260,
-	0x7a30, 0x9296, 0x1107, 0x1158, 0x7834, 0x9005, 0x1140, 0x7093,
-	0x0001, 0x080c, 0x5bfa, 0x7097, 0x000e, 0x0029, 0x0010, 0x080c,
-	0x5c80, 0x00fe, 0x0005, 0x918d, 0x0001, 0x080c, 0x5ccf, 0x7097,
-	0x000f, 0x708f, 0x0000, 0x2061, 0x0140, 0x605b, 0xbc85, 0x605f,
-	0xb5b5, 0x2061, 0x0100, 0x6043, 0x0005, 0x6043, 0x0004, 0x2009,
-	0x07d0, 0x2011, 0x5b33, 0x080c, 0x8004, 0x0005, 0x708c, 0x9005,
-	0x0130, 0x2011, 0x5b33, 0x080c, 0x8010, 0x7097, 0x0000, 0x0005,
-	0x7097, 0x0011, 0x080c, 0x9c26, 0x080c, 0x5ca4, 0x20e1, 0x0000,
-	0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x748c, 0x9480,
-	0x0018, 0x9080, 0x0007, 0x9084, 0x03f8, 0x8004, 0x20a8, 0x4003,
-	0x080c, 0x5c87, 0x11a0, 0x7178, 0x81ff, 0x0188, 0x900e, 0x707c,
-	0x9084, 0x00ff, 0x0160, 0x080c, 0x2663, 0x9186, 0x007e, 0x0138,
-	0x9186, 0x0080, 0x0120, 0x2011, 0x0008, 0x080c, 0x5ae0, 0x60c3,
-	0x0014, 0x080c, 0x5b5d, 0x0005, 0x00f6, 0x708c, 0x9005, 0x0500,
-	0x2011, 0x5b33, 0x080c, 0x8010, 0x9086, 0x0014, 0x11b8, 0x080c,
-	0x5ca4, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1103, 0x1178, 0x7834,
-	0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110,
-	0x70c3, 0x0001, 0x7097, 0x0012, 0x0029, 0x0010, 0x708f, 0x0000,
-	0x00fe, 0x0005, 0x00f6, 0x7097, 0x0013, 0x080c, 0x5c36, 0x2079,
-	0x0240, 0x7833, 0x1103, 0x7837, 0x0000, 0x080c, 0x5ca4, 0x080c,
-	0x5c87, 0x1170, 0x7080, 0x9005, 0x1158, 0x7158, 0x9186, 0xffff,
-	0x0138, 0x2011, 0x0008, 0x080c, 0x5ae0, 0x0168, 0x080c, 0x5c5d,
-	0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000,
-	0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5b5d, 0x00fe,
-	0x0005, 0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, 0x5b33, 0x080c,
-	0x8010, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5ca4, 0x2079, 0x0260,
-	0x7a30, 0x9296, 0x1104, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38,
-	0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097,
-	0x0014, 0x0029, 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, 0x00f6,
-	0x7097, 0x0015, 0x080c, 0x5c36, 0x2079, 0x0240, 0x7833, 0x1104,
-	0x7837, 0x0000, 0x080c, 0x5ca4, 0x080c, 0x5c87, 0x11b8, 0x7080,
-	0x9005, 0x11a0, 0x7160, 0x9186, 0xffff, 0x0180, 0x9180, 0x3131,
-	0x200d, 0x918c, 0xff00, 0x810f, 0x2011, 0x0008, 0x080c, 0x5ae0,
-	0x0180, 0x080c, 0x4c91, 0x0110, 0x080c, 0x26cc, 0x20a9, 0x0008,
-	0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e,
-	0x4003, 0x60c3, 0x0014, 0x080c, 0x5b5d, 0x00fe, 0x0005, 0x00f6,
-	0x708c, 0x9005, 0x05f0, 0x2011, 0x5b33, 0x080c, 0x8010, 0x9086,
-	0x0014, 0x15a8, 0x080c, 0x5ca4, 0x2079, 0x0260, 0x7a30, 0x9296,
-	0x1105, 0x1568, 0x7834, 0x9084, 0x0100, 0x2011, 0x0100, 0x921e,
-	0x1168, 0x9085, 0x0001, 0x080c, 0x5ccf, 0x7a38, 0xd2fc, 0x0128,
-	0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x0080, 0x9005, 0x11b8,
-	0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001,
-	0x9085, 0x0001, 0x080c, 0x5ccf, 0x7093, 0x0000, 0x7a38, 0xd2f4,
-	0x0110, 0x70db, 0x0008, 0x7097, 0x0016, 0x0029, 0x0010, 0x708f,
-	0x0000, 0x00fe, 0x0005, 0x080c, 0x9c26, 0x080c, 0x5ca4, 0x20e1,
-	0x0000, 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9,
-	0x000e, 0x4003, 0x2011, 0x026d, 0x2204, 0x9084, 0x0100, 0x2011,
-	0x024d, 0x2012, 0x2011, 0x026e, 0x7097, 0x0017, 0x080c, 0x5c87,
-	0x1150, 0x7080, 0x9005, 0x1138, 0x080c, 0x5a53, 0x1188, 0x9085,
-	0x0001, 0x080c, 0x26cc, 0x20a9, 0x0008, 0x080c, 0x5ca4, 0x20e1,
+	0x0001, 0x7097, 0x0012, 0x0029, 0x0010, 0x708f, 0x0000, 0x00fe,
+	0x0005, 0x00f6, 0x7097, 0x0013, 0x080c, 0x5c3d, 0x2079, 0x0240,
+	0x7833, 0x1103, 0x7837, 0x0000, 0x080c, 0x5cab, 0x080c, 0x5c8e,
+	0x1170, 0x7080, 0x9005, 0x1158, 0x7158, 0x9186, 0xffff, 0x0138,
+	0x2011, 0x0008, 0x080c, 0x5ae7, 0x0168, 0x080c, 0x5c64, 0x20a9,
+	0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1,
+	0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5b64, 0x00fe, 0x0005,
+	0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, 0x5b3a, 0x080c, 0x8038,
+	0x9086, 0x0014, 0x11b8, 0x080c, 0x5cab, 0x2079, 0x0260, 0x7a30,
+	0x9296, 0x1104, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc,
+	0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, 0x0014,
+	0x0029, 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x7097,
+	0x0015, 0x080c, 0x5c3d, 0x2079, 0x0240, 0x7833, 0x1104, 0x7837,
+	0x0000, 0x080c, 0x5cab, 0x080c, 0x5c8e, 0x11b8, 0x7080, 0x9005,
+	0x11a0, 0x7160, 0x9186, 0xffff, 0x0180, 0x9180, 0x3138, 0x200d,
+	0x918c, 0xff00, 0x810f, 0x2011, 0x0008, 0x080c, 0x5ae7, 0x0180,
+	0x080c, 0x4c98, 0x0110, 0x080c, 0x26cc, 0x20a9, 0x0008, 0x20e1,
 	0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003,
-	0x60c3, 0x0014, 0x080c, 0x5b5d, 0x0010, 0x080c, 0x55ad, 0x0005,
-	0x00f6, 0x708c, 0x9005, 0x01d8, 0x2011, 0x5b33, 0x080c, 0x8010,
-	0x9086, 0x0084, 0x1190, 0x080c, 0x5ca4, 0x2079, 0x0260, 0x7a30,
-	0x9296, 0x1106, 0x1150, 0x7834, 0x9005, 0x1138, 0x9006, 0x080c,
-	0x5ccf, 0x7097, 0x0018, 0x0029, 0x0010, 0x708f, 0x0000, 0x00fe,
-	0x0005, 0x00f6, 0x7097, 0x0019, 0x080c, 0x5c36, 0x2079, 0x0240,
-	0x7833, 0x1106, 0x7837, 0x0000, 0x080c, 0x5ca4, 0x2009, 0x026e,
-	0x2039, 0x1c0e, 0x20a9, 0x0040, 0x213e, 0x8738, 0x8108, 0x9186,
-	0x0280, 0x1128, 0x6814, 0x8000, 0x6816, 0x2009, 0x0260, 0x1f04,
-	0x59bc, 0x2039, 0x1c0e, 0x080c, 0x5c87, 0x11e8, 0x2728, 0x2514,
-	0x8207, 0x9084, 0x00ff, 0x8000, 0x2018, 0x9294, 0x00ff, 0x8007,
-	0x9205, 0x202a, 0x705c, 0x2310, 0x8214, 0x92a0, 0x1c0e, 0x2414,
-	0x938c, 0x0001, 0x0118, 0x9294, 0xff00, 0x0018, 0x9294, 0x00ff,
-	0x8007, 0x9215, 0x2222, 0x20a9, 0x0040, 0x2009, 0x024e, 0x270e,
-	0x8738, 0x8108, 0x9186, 0x0260, 0x1128, 0x6810, 0x8000, 0x6812,
-	0x2009, 0x0240, 0x1f04, 0x59ef, 0x60c3, 0x0084, 0x080c, 0x5b5d,
-	0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x01e0, 0x2011, 0x5b33,
-	0x080c, 0x8010, 0x9086, 0x0084, 0x1198, 0x080c, 0x5ca4, 0x2079,
-	0x0260, 0x7a30, 0x9296, 0x1107, 0x1158, 0x7834, 0x9005, 0x1140,
-	0x7093, 0x0001, 0x080c, 0x5bfa, 0x7097, 0x001a, 0x0029, 0x0010,
-	0x708f, 0x0000, 0x00fe, 0x0005, 0x9085, 0x0001, 0x080c, 0x5ccf,
-	0x7097, 0x001b, 0x080c, 0x9c26, 0x080c, 0x5ca4, 0x2011, 0x0260,
-	0x2009, 0x0240, 0x748c, 0x9480, 0x0018, 0x9080, 0x0007, 0x9084,
-	0x03f8, 0x8004, 0x20a8, 0x220e, 0x8210, 0x8108, 0x9186, 0x0260,
-	0x1150, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x6814, 0x8000,
-	0x6816, 0x2011, 0x0260, 0x1f04, 0x5a3b, 0x60c3, 0x0084, 0x080c,
-	0x5b5d, 0x0005, 0x0005, 0x0086, 0x0096, 0x2029, 0x1854, 0x252c,
-	0x20a9, 0x0008, 0x2041, 0x1c0e, 0x20e9, 0x0001, 0x28a0, 0x080c,
-	0x5ca4, 0x20e1, 0x0000, 0x2099, 0x026e, 0x4003, 0x20a9, 0x0008,
-	0x2011, 0x0007, 0xd5d4, 0x0108, 0x9016, 0x2800, 0x9200, 0x200c,
-	0x91a6, 0xffff, 0x1148, 0xd5d4, 0x0110, 0x8210, 0x0008, 0x8211,
-	0x1f04, 0x5a6d, 0x0804, 0x5adc, 0x82ff, 0x1160, 0xd5d4, 0x0120,
-	0x91a6, 0x3fff, 0x0d90, 0x0020, 0x91a6, 0x3fff, 0x0904, 0x5adc,
-	0x918d, 0xc000, 0x20a9, 0x0010, 0x2019, 0x0001, 0xd5d4, 0x0110,
-	0x2019, 0x0010, 0x2120, 0xd5d4, 0x0110, 0x8423, 0x0008, 0x8424,
-	0x1240, 0xd5d4, 0x0110, 0x8319, 0x0008, 0x8318, 0x1f04, 0x5a93,
-	0x04d8, 0x23a8, 0x2021, 0x0001, 0x8426, 0x8425, 0x1f04, 0x5aa5,
-	0x2328, 0x8529, 0x92be, 0x0007, 0x0158, 0x0006, 0x2039, 0x0007,
-	0x2200, 0x973a, 0x000e, 0x27a8, 0x95a8, 0x0010, 0x1f04, 0x5ab4,
-	0x755a, 0x95c8, 0x3131, 0x292d, 0x95ac, 0x00ff, 0x757e, 0x6532,
-	0x6536, 0x0016, 0x2508, 0x080c, 0x26ac, 0x001e, 0x60e7, 0x0000,
-	0x65ea, 0x2018, 0x2304, 0x9405, 0x201a, 0x7083, 0x0001, 0x20e9,
-	0x0000, 0x20a1, 0x024e, 0x20e1, 0x0001, 0x2898, 0x20a9, 0x0008,
-	0x4003, 0x9085, 0x0001, 0x0008, 0x9006, 0x009e, 0x008e, 0x0005,
-	0x0156, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x22a8, 0x20e1, 0x0000,
-	0x2099, 0x026e, 0x20e9, 0x0000, 0x2011, 0x024e, 0x22a0, 0x4003,
-	0x014e, 0x013e, 0x01de, 0x01ce, 0x015e, 0x2118, 0x9026, 0x2001,
-	0x0007, 0x939a, 0x0010, 0x0218, 0x8420, 0x8001, 0x0cd0, 0x2118,
-	0x84ff, 0x0120, 0x939a, 0x0010, 0x8421, 0x1de0, 0x2021, 0x0001,
-	0x83ff, 0x0118, 0x8423, 0x8319, 0x1de8, 0x9238, 0x2029, 0x026e,
-	0x9528, 0x2504, 0x942c, 0x11b8, 0x9405, 0x203a, 0x715a, 0x91a0,
-	0x3131, 0x242d, 0x95ac, 0x00ff, 0x757e, 0x6532, 0x6536, 0x0016,
-	0x2508, 0x080c, 0x26ac, 0x001e, 0x60e7, 0x0000, 0x65ea, 0x7083,
-	0x0001, 0x9084, 0x0000, 0x0005, 0x00e6, 0x2071, 0x1800, 0x7087,
-	0x0000, 0x00ee, 0x0005, 0x00e6, 0x00f6, 0x2079, 0x0100, 0x2071,
-	0x0140, 0x080c, 0x5be9, 0x080c, 0x9393, 0x7004, 0x9084, 0x4000,
-	0x0110, 0x080c, 0x2b24, 0x0126, 0x2091, 0x8000, 0x2071, 0x1825,
-	0x2073, 0x0000, 0x7840, 0x0026, 0x0016, 0x2009, 0x00f7, 0x080c,
-	0x5c46, 0x001e, 0x9094, 0x0010, 0x9285, 0x0080, 0x7842, 0x7a42,
-	0x002e, 0x012e, 0x00fe, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000,
-	0x080c, 0x29ca, 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012,
-	0x2011, 0x19c2, 0x2013, 0x0000, 0x708f, 0x0000, 0x012e, 0x60a3,
-	0x0056, 0x60a7, 0x9575, 0x080c, 0x938a, 0x6144, 0xd184, 0x0120,
-	0x7194, 0x918d, 0x2000, 0x0018, 0x7188, 0x918d, 0x1000, 0x2011,
-	0x196a, 0x2112, 0x2009, 0x07d0, 0x2011, 0x5b33, 0x080c, 0x80a2,
-	0x0005, 0x0016, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c,
-	0x9d9f, 0x2009, 0x00f7, 0x080c, 0x5c46, 0x2061, 0x19cb, 0x900e,
-	0x611a, 0x611e, 0x6172, 0x6176, 0x2061, 0x1800, 0x6003, 0x0001,
-	0x2061, 0x0100, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x196a,
-	0x200b, 0x0000, 0x2009, 0x002d, 0x2011, 0x5bb5, 0x080c, 0x8004,
-	0x012e, 0x00ce, 0x002e, 0x001e, 0x0005, 0x00e6, 0x0006, 0x0126,
-	0x2091, 0x8000, 0x0471, 0x2071, 0x0100, 0x080c, 0x9393, 0x2071,
-	0x0140, 0x7004, 0x9084, 0x4000, 0x0110, 0x080c, 0x2b24, 0x080c,
-	0x6faf, 0x0188, 0x080c, 0x6fca, 0x1170, 0x080c, 0x7295, 0x0016,
-	0x080c, 0x277b, 0x2001, 0x193e, 0x2102, 0x001e, 0x080c, 0x7290,
-	0x080c, 0x6ed9, 0x0050, 0x2009, 0x0001, 0x080c, 0x2a63, 0x2001,
-	0x0001, 0x080c, 0x260c, 0x080c, 0x5b89, 0x012e, 0x000e, 0x00ee,
-	0x0005, 0x2001, 0x180e, 0x2004, 0xd0bc, 0x0158, 0x0026, 0x0036,
-	0x2011, 0x8017, 0x2001, 0x196a, 0x201c, 0x080c, 0x48d2, 0x003e,
-	0x002e, 0x0005, 0x20a9, 0x0012, 0x20e9, 0x0001, 0x20a1, 0x1c80,
-	0x080c, 0x5ca4, 0x20e9, 0x0000, 0x2099, 0x026e, 0x0099, 0x20a9,
-	0x0020, 0x080c, 0x5c9e, 0x2099, 0x0260, 0x20a1, 0x1c92, 0x0051,
-	0x20a9, 0x000e, 0x080c, 0x5ca1, 0x2099, 0x0260, 0x20a1, 0x1cb2,
-	0x0009, 0x0005, 0x0016, 0x0026, 0x3410, 0x3308, 0x2104, 0x8007,
-	0x2012, 0x8108, 0x8210, 0x1f04, 0x5c1e, 0x002e, 0x001e, 0x0005,
-	0x080c, 0x9c26, 0x20e1, 0x0001, 0x2099, 0x1c00, 0x20e9, 0x0000,
-	0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, 0x080c, 0x9c26,
-	0x080c, 0x5ca4, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000,
-	0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, 0x00c6, 0x0006,
-	0x2061, 0x0100, 0x810f, 0x2001, 0x1833, 0x2004, 0x9005, 0x1138,
-	0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, 0x9105, 0x0010, 0x9185,
-	0x00f7, 0x604a, 0x000e, 0x00ce, 0x0005, 0x0016, 0x0046, 0x080c,
-	0x6557, 0x0158, 0x9006, 0x2020, 0x2009, 0x002a, 0x080c, 0xd50a,
-	0x2001, 0x180c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a, 0x900e,
-	0x080c, 0x2fa2, 0x080c, 0xc1f9, 0x0140, 0x0036, 0x2019, 0xffff,
-	0x2021, 0x0007, 0x080c, 0x4a6f, 0x003e, 0x004e, 0x001e, 0x0005,
-	0x080c, 0x5b89, 0x7097, 0x0000, 0x708f, 0x0000, 0x0005, 0x0006,
-	0x2001, 0x180c, 0x2004, 0xd09c, 0x0100, 0x000e, 0x0005, 0x0006,
-	0x0016, 0x0126, 0x2091, 0x8000, 0x2001, 0x0101, 0x200c, 0x918d,
-	0x0006, 0x2102, 0x012e, 0x001e, 0x000e, 0x0005, 0x2009, 0x0001,
-	0x0020, 0x2009, 0x0002, 0x0008, 0x900e, 0x6814, 0x9084, 0xffc0,
-	0x910d, 0x6916, 0x0005, 0x00f6, 0x0156, 0x0146, 0x01d6, 0x9006,
-	0x20a9, 0x0080, 0x20e9, 0x0001, 0x20a1, 0x1c00, 0x4004, 0x2079,
-	0x1c00, 0x7803, 0x2200, 0x7807, 0x00ef, 0x780f, 0x00ef, 0x7813,
-	0x0138, 0x7823, 0xffff, 0x7827, 0xffff, 0x01de, 0x014e, 0x015e,
-	0x00fe, 0x0005, 0x2001, 0x1800, 0x2003, 0x0001, 0x0005, 0x2001,
-	0x1977, 0x0118, 0x2003, 0x0001, 0x0010, 0x2003, 0x0000, 0x0005,
-	0x0156, 0x20a9, 0x0800, 0x2009, 0x1000, 0x9006, 0x200a, 0x8108,
-	0x1f04, 0x5cde, 0x015e, 0x0005, 0x00d6, 0x0036, 0x0156, 0x0136,
-	0x0146, 0x2069, 0x1853, 0x9006, 0xb802, 0xb8be, 0xb807, 0x0707,
-	0xb80a, 0xb80e, 0xb812, 0x9198, 0x3131, 0x231d, 0x939c, 0x00ff,
-	0xbb16, 0x0016, 0x0026, 0xb8b2, 0x080c, 0x9d98, 0x1120, 0x9192,
-	0x007e, 0x1208, 0xbbb2, 0x20a9, 0x0004, 0xb8b4, 0x20e8, 0xb9b8,
-	0x9198, 0x0006, 0x9006, 0x23a0, 0x4004, 0x20a9, 0x0004, 0x9198,
-	0x000a, 0x23a0, 0x4004, 0x002e, 0x001e, 0xb83e, 0xb842, 0xb84e,
-	0xb852, 0xb856, 0xb85a, 0xb85e, 0xb862, 0xb866, 0xb86a, 0xb86f,
-	0x0100, 0xb872, 0xb876, 0xb87a, 0xb88a, 0xb88e, 0xb893, 0x0008,
-	0xb896, 0xb89a, 0xb89e, 0xb8ae, 0xb9a2, 0x0096, 0xb8a4, 0x904d,
-	0x0110, 0x080c, 0x101d, 0xb8a7, 0x0000, 0x009e, 0x9006, 0xb84a,
-	0x6810, 0xb83a, 0x680c, 0xb846, 0x6814, 0x9084, 0x00ff, 0xb842,
-	0x014e, 0x013e, 0x015e, 0x003e, 0x00de, 0x0005, 0x0126, 0x2091,
-	0x8000, 0xa974, 0xae78, 0x9684, 0x3fff, 0x9082, 0x4000, 0x1a04,
-	0x5db4, 0x9182, 0x0800, 0x1a04, 0x5db8, 0x2001, 0x180c, 0x2004,
-	0x9084, 0x0003, 0x1904, 0x5dbe, 0x9188, 0x1000, 0x2104, 0x905d,
-	0x0518, 0xb804, 0x9084, 0x00ff, 0x908e, 0x0006, 0x1508, 0xb8a4,
-	0x900d, 0x1904, 0x5dd0, 0xb850, 0x900d, 0x1148, 0xa802, 0x2900,
-	0xb852, 0xb84e, 0x080c, 0x83e6, 0x9006, 0x012e, 0x0005, 0x00a6,
-	0x2150, 0x2900, 0xb002, 0xa803, 0x0000, 0x00ae, 0xb852, 0x0c90,
-	0x2001, 0x0005, 0x900e, 0x04b8, 0x2001, 0x0028, 0x900e, 0x0498,
-	0x9082, 0x0006, 0x1290, 0x080c, 0x9d98, 0x1160, 0xb8a0, 0x9084,
-	0xff80, 0x1140, 0xb900, 0xd1fc, 0x0990, 0x2001, 0x0029, 0x2009,
-	0x1000, 0x0408, 0x2001, 0x0028, 0x00a8, 0x2009, 0x180c, 0x210c,
-	0xd18c, 0x0118, 0x2001, 0x0004, 0x0068, 0xd184, 0x0118, 0x2001,
-	0x0004, 0x0040, 0x2001, 0x0029, 0xb900, 0xd1fc, 0x0118, 0x2009,
-	0x1000, 0x0048, 0x900e, 0x0038, 0x2001, 0x0029, 0x900e, 0x0018,
-	0x2001, 0x0029, 0x900e, 0x9005, 0x012e, 0x0005, 0x2001, 0x180c,
-	0x2004, 0xd084, 0x19d0, 0x9188, 0x1000, 0x2104, 0x905d, 0x09a8,
-	0x080c, 0x655b, 0x1990, 0xb800, 0xd0bc, 0x0978, 0x0804, 0x5d67,
-	0x080c, 0x63d3, 0x0904, 0x5d80, 0x0804, 0x5d6b, 0x00b6, 0x00e6,
-	0x0126, 0x2091, 0x8000, 0xa974, 0x9182, 0x0800, 0x1a04, 0x5e51,
-	0x9188, 0x1000, 0x2104, 0x905d, 0x0904, 0x5e29, 0xb8a0, 0x9086,
-	0x007f, 0x0178, 0x080c, 0x6563, 0x0160, 0xa994, 0x81ff, 0x0130,
-	0x908e, 0x0004, 0x0130, 0x908e, 0x0005, 0x0118, 0x080c, 0x655b,
-	0x1598, 0xa87c, 0xd0fc, 0x01e0, 0xa894, 0x9005, 0x01c8, 0x2060,
-	0x0026, 0x2010, 0x080c, 0xbaec, 0x002e, 0x1120, 0x2001, 0x0008,
-	0x0804, 0x5e53, 0x6020, 0x9086, 0x000a, 0x0120, 0x2001, 0x0008,
-	0x0804, 0x5e53, 0x601a, 0x6003, 0x0008, 0x2900, 0x6016, 0x0058,
-	0x080c, 0x9dc3, 0x05e8, 0x2b00, 0x6012, 0x2900, 0x6016, 0x600b,
-	0xffff, 0x6023, 0x000a, 0x2009, 0x0003, 0x080c, 0x9e93, 0x9006,
-	0x0458, 0x2001, 0x0028, 0x0438, 0x9082, 0x0006, 0x1290, 0x080c,
-	0x9d98, 0x1160, 0xb8a0, 0x9084, 0xff80, 0x1140, 0xb900, 0xd1fc,
-	0x0900, 0x2001, 0x0029, 0x2009, 0x1000, 0x00a8, 0x2001, 0x0028,
-	0x0090, 0x2009, 0x180c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004,
-	0x0050, 0xd184, 0x0118, 0x2001, 0x0004, 0x0028, 0x2001, 0x0029,
-	0x0010, 0x2001, 0x0029, 0x9005, 0x012e, 0x00ee, 0x00be, 0x0005,
-	0x2001, 0x002c, 0x0cc0, 0x00f6, 0x00b6, 0x0126, 0x2091, 0x8000,
-	0xa8e0, 0x9005, 0x1550, 0xa8dc, 0x9082, 0x0101, 0x1630, 0xa8c8,
-	0x9005, 0x1518, 0xa8c4, 0x9082, 0x0101, 0x12f8, 0xa974, 0x2079,
-	0x1800, 0x9182, 0x0800, 0x12e8, 0x7830, 0x9084, 0x0003, 0x1130,
-	0xaa98, 0xab94, 0xa878, 0x9084, 0x0007, 0x00ea, 0x7930, 0xd18c,
-	0x0118, 0x2001, 0x0004, 0x0038, 0xd184, 0x0118, 0x2001, 0x0004,
-	0x0010, 0x2001, 0x0029, 0x900e, 0x0038, 0x2001, 0x002c, 0x900e,
-	0x0018, 0x2001, 0x0029, 0x900e, 0x9006, 0x0008, 0x9005, 0x012e,
-	0x00be, 0x00fe, 0x0005, 0x5ee8, 0x5ea3, 0x5eba, 0x5ee8, 0x5ee8,
-	0x5ee8, 0x5ee8, 0x5ee8, 0x2100, 0x9082, 0x007e, 0x1278, 0x080c,
-	0x61d7, 0x0148, 0x9046, 0xb810, 0x9306, 0x1904, 0x5ef0, 0xb814,
-	0x9206, 0x15f0, 0x0028, 0xbb12, 0xba16, 0x0010, 0x080c, 0x478c,
-	0x0150, 0x04b0, 0x080c, 0x6237, 0x1598, 0xb810, 0x9306, 0x1580,
-	0xb814, 0x9206, 0x1568, 0x080c, 0x9dc3, 0x0530, 0x2b00, 0x6012,
-	0x080c, 0xbf73, 0x2900, 0x6016, 0x600b, 0xffff, 0x6023, 0x000a,
-	0xa878, 0x9086, 0x0001, 0x1170, 0x080c, 0x2fd7, 0x9006, 0x080c,
-	0x6174, 0x2001, 0x0002, 0x080c, 0x6188, 0x2001, 0x0200, 0xb86e,
-	0xb893, 0x0002, 0x2009, 0x0003, 0x080c, 0x9e93, 0x9006, 0x0068,
-	0x2001, 0x0001, 0x900e, 0x0038, 0x2001, 0x002c, 0x900e, 0x0018,
-	0x2001, 0x0028, 0x900e, 0x9005, 0x0000, 0x012e, 0x00be, 0x00fe,
-	0x0005, 0x00b6, 0x00f6, 0x00e6, 0x0126, 0x2091, 0x8000, 0xa894,
-	0x90c6, 0x0015, 0x0904, 0x60c5, 0x90c6, 0x0056, 0x0904, 0x60c9,
-	0x90c6, 0x0066, 0x0904, 0x60cd, 0x90c6, 0x0067, 0x0904, 0x60d1,
-	0x90c6, 0x0068, 0x0904, 0x60d5, 0x90c6, 0x0071, 0x0904, 0x60d9,
-	0x90c6, 0x0074, 0x0904, 0x60dd, 0x90c6, 0x007c, 0x0904, 0x60e1,
-	0x90c6, 0x007e, 0x0904, 0x60e5, 0x90c6, 0x0037, 0x0904, 0x60e9,
-	0x9016, 0x2079, 0x1800, 0xa974, 0x9186, 0x00ff, 0x0904, 0x60c0,
-	0x9182, 0x0800, 0x1a04, 0x60c0, 0x080c, 0x6237, 0x1198, 0xb804,
-	0x9084, 0x00ff, 0x9082, 0x0006, 0x1268, 0xa894, 0x90c6, 0x006f,
-	0x0148, 0x080c, 0x9d98, 0x1904, 0x60a9, 0xb8a0, 0x9084, 0xff80,
-	0x1904, 0x60a9, 0xa894, 0x90c6, 0x006f, 0x0158, 0x90c6, 0x005e,
-	0x0904, 0x6009, 0x90c6, 0x0064, 0x0904, 0x6032, 0x2008, 0x0804,
-	0x5fcc, 0xa998, 0xa8b0, 0x2040, 0x080c, 0x9d98, 0x1120, 0x9182,
-	0x007f, 0x0a04, 0x5fcc, 0x9186, 0x00ff, 0x0904, 0x5fcc, 0x9182,
-	0x0800, 0x1a04, 0x5fcc, 0xaaa0, 0xab9c, 0x7878, 0x9306, 0x1188,
-	0x787c, 0x0096, 0x924e, 0x1128, 0x2208, 0x2310, 0x009e, 0x0804,
-	0x5fcc, 0x99cc, 0xff00, 0x009e, 0x1120, 0x2208, 0x2310, 0x0804,
-	0x5fcc, 0x080c, 0x478c, 0x0904, 0x5fd5, 0x900e, 0x9016, 0x90c6,
-	0x4000, 0x1558, 0x0006, 0x080c, 0x6457, 0x1108, 0xc185, 0xb800,
-	0xd0bc, 0x0108, 0xc18d, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c,
-	0x9080, 0x0031, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006,
-	0x2098, 0x080c, 0x0f68, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c,
-	0x9080, 0x0035, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x000a,
-	0x2098, 0x080c, 0x0f68, 0x000e, 0x00c8, 0x90c6, 0x4007, 0x1110,
-	0x2408, 0x00a0, 0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0070,
-	0x90c6, 0x4009, 0x1108, 0x0050, 0x90c6, 0x4006, 0x0138, 0x2001,
-	0x4005, 0x2009, 0x000a, 0x0010, 0x2001, 0x4006, 0xa896, 0xa99a,
-	0xaa9e, 0x2001, 0x0030, 0x900e, 0x0470, 0x080c, 0x9dc3, 0x1130,
-	0x2001, 0x4005, 0x2009, 0x0003, 0x9016, 0x0c80, 0x2b00, 0x6012,
-	0x080c, 0xbf73, 0x2900, 0x6016, 0x6023, 0x0001, 0xa868, 0xd88c,
-	0x0108, 0xc0f5, 0xa86a, 0x0126, 0x2091, 0x8000, 0x080c, 0x2fd7,
-	0x012e, 0x9006, 0x080c, 0x6174, 0x2001, 0x0002, 0x080c, 0x6188,
-	0x2009, 0x0002, 0x080c, 0x9e93, 0xa8b0, 0xd094, 0x0118, 0xb8bc,
-	0xc08d, 0xb8be, 0x9006, 0x9005, 0x012e, 0x00ee, 0x00fe, 0x00be,
-	0x0005, 0x080c, 0x5393, 0x0118, 0x2009, 0x0007, 0x00f8, 0xa998,
-	0xaeb0, 0x080c, 0x6237, 0x1904, 0x5fc7, 0x9186, 0x007f, 0x0130,
-	0x080c, 0x655b, 0x0118, 0x2009, 0x0009, 0x0080, 0x0096, 0x080c,
-	0x0feb, 0x1120, 0x009e, 0x2009, 0x0002, 0x0040, 0x2900, 0x009e,
-	0xa806, 0x080c, 0xbce4, 0x19b0, 0x2009, 0x0003, 0x2001, 0x4005,
-	0x0804, 0x5fce, 0xa998, 0xaeb0, 0x080c, 0x6237, 0x1904, 0x5fc7,
-	0x0096, 0x080c, 0x0feb, 0x1128, 0x009e, 0x2009, 0x0002, 0x0804,
-	0x6086, 0x2900, 0x009e, 0xa806, 0x0096, 0x2048, 0x20a9, 0x002b,
-	0xb8b4, 0x20e0, 0xb8b8, 0x2098, 0xa860, 0x20e8, 0xa85c, 0x9080,
-	0x0002, 0x20a0, 0x4003, 0x20a9, 0x0008, 0x9080, 0x0006, 0x20a0,
-	0xbbb8, 0x9398, 0x0006, 0x2398, 0x080c, 0x0f68, 0x009e, 0xa87b,
-	0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0xd684, 0x1168, 0x080c,
-	0x537f, 0xd0b4, 0x1118, 0xa89b, 0x000b, 0x00e0, 0xb800, 0xd08c,
-	0x0118, 0xa89b, 0x000c, 0x00b0, 0x080c, 0x655b, 0x0118, 0xa89b,
-	0x0009, 0x0080, 0x080c, 0x5393, 0x0118, 0xa89b, 0x0007, 0x0050,
-	0x080c, 0xbcc7, 0x1904, 0x6002, 0x2009, 0x0003, 0x2001, 0x4005,
-	0x0804, 0x5fce, 0xa87b, 0x0030, 0xa897, 0x4005, 0xa804, 0x8006,
-	0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002,
-	0x2009, 0x002b, 0xaaa0, 0xab9c, 0xaca8, 0xada4, 0x2031, 0x0000,
-	0x2041, 0x122f, 0x080c, 0xa31b, 0x1904, 0x6002, 0x2009, 0x0002,
-	0x08e8, 0x2001, 0x0028, 0x900e, 0x0804, 0x6003, 0x2009, 0x180c,
-	0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0038, 0xd184, 0x0118,
-	0x2001, 0x0004, 0x0010, 0x2001, 0x0029, 0x900e, 0x0804, 0x6003,
-	0x2001, 0x0029, 0x900e, 0x0804, 0x6003, 0x080c, 0x3555, 0x0804,
-	0x6004, 0x080c, 0x50bc, 0x0804, 0x6004, 0x080c, 0x4325, 0x0804,
-	0x6004, 0x080c, 0x439e, 0x0804, 0x6004, 0x080c, 0x43fa, 0x0804,
-	0x6004, 0x080c, 0x4848, 0x0804, 0x6004, 0x080c, 0x4af4, 0x0804,
-	0x6004, 0x080c, 0x4d27, 0x0804, 0x6004, 0x080c, 0x4f20, 0x0804,
-	0x6004, 0x080c, 0x3765, 0x0804, 0x6004, 0x00b6, 0xa974, 0xae78,
-	0x9684, 0x3fff, 0x9082, 0x4000, 0x1618, 0x9182, 0x0800, 0x1268,
-	0x9188, 0x1000, 0x2104, 0x905d, 0x0140, 0x080c, 0x655b, 0x1148,
-	0x00e9, 0x080c, 0x6362, 0x9006, 0x00b0, 0x2001, 0x0028, 0x900e,
-	0x0090, 0x9082, 0x0006, 0x1240, 0xb900, 0xd1fc, 0x0d88, 0x2001,
-	0x0029, 0x2009, 0x1000, 0x0038, 0x2001, 0x0029, 0x900e, 0x0018,
-	0x2001, 0x0029, 0x900e, 0x9005, 0x00be, 0x0005, 0x0126, 0x2091,
-	0x8000, 0xb850, 0x900d, 0x0150, 0x2900, 0x0096, 0x2148, 0xa802,
-	0x009e, 0xa803, 0x0000, 0xb852, 0x012e, 0x0005, 0x2900, 0xb852,
-	0xb84e, 0xa803, 0x0000, 0x0cc0, 0x0126, 0x2091, 0x8000, 0xb84c,
-	0x9005, 0x0170, 0x00e6, 0x2071, 0x19b8, 0x7004, 0x9086, 0x0002,
-	0x0168, 0x00ee, 0xb84c, 0xa802, 0x2900, 0xb84e, 0x012e, 0x0005,
-	0x2900, 0xb852, 0xb84e, 0xa803, 0x0000, 0x0cc0, 0x701c, 0x9b06,
-	0x1d80, 0xb84c, 0x00a6, 0x2050, 0xb000, 0xa802, 0x2900, 0xb002,
-	0x00ae, 0x00ee, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0xb84c,
-	0x904d, 0x0130, 0xa800, 0x9005, 0x1108, 0xb852, 0xb84e, 0x9905,
-	0x012e, 0x0005, 0xb84c, 0x904d, 0x0130, 0xa800, 0x9005, 0x1108,
-	0xb852, 0xb84e, 0x9905, 0x0005, 0x00b6, 0x0126, 0x00c6, 0x0026,
-	0x2091, 0x8000, 0x6210, 0x2258, 0xba00, 0x9005, 0x0110, 0xc285,
-	0x0008, 0xc284, 0xba02, 0x002e, 0x00ce, 0x012e, 0x00be, 0x0005,
-	0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, 0x6210, 0x2258, 0xba04,
-	0x0006, 0x9086, 0x0006, 0x1170, 0xb89c, 0xd0ac, 0x0158, 0x080c,
-	0x6557, 0x0140, 0x9284, 0xff00, 0x8007, 0x9086, 0x0007, 0x1110,
-	0x2011, 0x0600, 0x000e, 0x9294, 0xff00, 0x9215, 0xba06, 0x0006,
-	0x9086, 0x0006, 0x1120, 0xba90, 0x82ff, 0x090c, 0x0db4, 0x000e,
-	0x00ce, 0x012e, 0x00be, 0x0005, 0x00b6, 0x0126, 0x00c6, 0x2091,
-	0x8000, 0x6210, 0x2258, 0xba04, 0x0006, 0x9086, 0x0006, 0x1168,
-	0xb89c, 0xd0a4, 0x0150, 0x080c, 0x6553, 0x1138, 0x9284, 0x00ff,
-	0x9086, 0x0007, 0x1110, 0x2011, 0x0006, 0x000e, 0x9294, 0x00ff,
-	0x8007, 0x9215, 0xba06, 0x00ce, 0x012e, 0x00be, 0x0005, 0x9182,
-	0x0800, 0x0218, 0x9085, 0x0001, 0x0005, 0x00d6, 0x0026, 0x9190,
-	0x1000, 0x2204, 0x905d, 0x1180, 0x0096, 0x080c, 0x0feb, 0x2958,
-	0x009e, 0x0160, 0x2b00, 0x2012, 0xb85c, 0xb8ba, 0xb860, 0xb8b6,
-	0x9006, 0xb8a6, 0x080c, 0x5ce4, 0x9006, 0x0010, 0x9085, 0x0001,
-	0x002e, 0x00de, 0x0005, 0x00b6, 0x0096, 0x0126, 0x2091, 0x8000,
-	0x0026, 0x9182, 0x0800, 0x0218, 0x9085, 0x0001, 0x0458, 0x00d6,
-	0x9190, 0x1000, 0x2204, 0x905d, 0x0518, 0x2013, 0x0000, 0xb8a4,
-	0x904d, 0x0110, 0x080c, 0x101d, 0x00d6, 0x00c6, 0xb8ac, 0x2060,
-	0x8cff, 0x0168, 0x600c, 0x0006, 0x6014, 0x2048, 0x080c, 0xbafe,
-	0x0110, 0x080c, 0x0f9d, 0x080c, 0x9e19, 0x00ce, 0x0c88, 0x00ce,
-	0x00de, 0x2b48, 0xb8b8, 0xb85e, 0xb8b4, 0xb862, 0x080c, 0x102d,
-	0x00de, 0x9006, 0x002e, 0x012e, 0x009e, 0x00be, 0x0005, 0x0016,
-	0x9182, 0x0800, 0x0218, 0x9085, 0x0001, 0x0030, 0x9188, 0x1000,
-	0x2104, 0x905d, 0x0dc0, 0x9006, 0x001e, 0x0005, 0x00d6, 0x0156,
-	0x0136, 0x0146, 0x9006, 0xb80a, 0xb80e, 0xb800, 0xc08c, 0xb802,
-	0x080c, 0x6fa7, 0x1510, 0xb8a0, 0x9086, 0x007e, 0x0120, 0x080c,
-	0x9d98, 0x11d8, 0x0078, 0x7040, 0xd0e4, 0x01b8, 0x00c6, 0x2061,
-	0x1953, 0x7048, 0x2062, 0x704c, 0x6006, 0x7050, 0x600a, 0x7054,
-	0x600e, 0x00ce, 0x703c, 0x2069, 0x0140, 0x9005, 0x1110, 0x2001,
-	0x0001, 0x6886, 0x2069, 0x1800, 0x68b2, 0x7040, 0xb85e, 0x7048,
-	0xb862, 0x704c, 0xb866, 0x20e1, 0x0000, 0x2099, 0x0276, 0xb8b4,
-	0x20e8, 0xb8b8, 0x9088, 0x000a, 0x21a0, 0x20a9, 0x0004, 0x4003,
-	0x2099, 0x027a, 0x9088, 0x0006, 0x21a0, 0x20a9, 0x0004, 0x4003,
-	0x2069, 0x0200, 0x6817, 0x0001, 0x7040, 0xb86a, 0x7144, 0xb96e,
-	0x7048, 0xb872, 0x7050, 0xb876, 0x2069, 0x0200, 0x6817, 0x0000,
-	0xb8a0, 0x9086, 0x007e, 0x1110, 0x7144, 0xb96e, 0x9182, 0x0211,
-	0x1218, 0x2009, 0x0008, 0x0400, 0x9182, 0x0259, 0x1218, 0x2009,
-	0x0007, 0x00d0, 0x9182, 0x02c1, 0x1218, 0x2009, 0x0006, 0x00a0,
-	0x9182, 0x0349, 0x1218, 0x2009, 0x0005, 0x0070, 0x9182, 0x0421,
-	0x1218, 0x2009, 0x0004, 0x0040, 0x9182, 0x0581, 0x1218, 0x2009,
-	0x0003, 0x0010, 0x2009, 0x0002, 0xb992, 0x014e, 0x013e, 0x015e,
-	0x00de, 0x0005, 0x0016, 0x0026, 0x00e6, 0x2071, 0x0260, 0x7034,
-	0xb896, 0x703c, 0xb89a, 0x7054, 0xb89e, 0x0036, 0xbbbc, 0xc384,
-	0xba00, 0x2009, 0x1873, 0x210c, 0xd0bc, 0x0120, 0xd1ec, 0x0110,
-	0xc2ad, 0x0008, 0xc2ac, 0xd0c4, 0x0148, 0xd1e4, 0x0138, 0xc2bd,
-	0xd0cc, 0x0128, 0xd38c, 0x1108, 0xc385, 0x0008, 0xc2bc, 0xba02,
-	0xbbbe, 0x003e, 0x00ee, 0x002e, 0x001e, 0x0005, 0x0096, 0x0126,
-	0x2091, 0x8000, 0xb8a4, 0x904d, 0x0578, 0xa900, 0x81ff, 0x15c0,
-	0xaa04, 0x9282, 0x0010, 0x16c8, 0x0136, 0x0146, 0x01c6, 0x01d6,
-	0x8906, 0x8006, 0x8007, 0x908c, 0x003f, 0x21e0, 0x9084, 0xffc0,
-	0x9080, 0x0004, 0x2098, 0x2009, 0x0010, 0x20a9, 0x0001, 0x4002,
-	0x9086, 0xffff, 0x0120, 0x8109, 0x1dd0, 0x080c, 0x0db4, 0x3c00,
-	0x20e8, 0x3300, 0x8001, 0x20a0, 0x4604, 0x8210, 0xaa06, 0x01de,
-	0x01ce, 0x014e, 0x013e, 0x0060, 0x080c, 0x0feb, 0x0170, 0x2900,
-	0xb8a6, 0xa803, 0x0000, 0x080c, 0x63f3, 0xa807, 0x0001, 0xae12,
-	0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0126,
-	0x2091, 0x8000, 0x0096, 0xb8a4, 0x904d, 0x0188, 0xa800, 0x9005,
-	0x1150, 0x080c, 0x6402, 0x1158, 0xa804, 0x908a, 0x0002, 0x0218,
-	0x8001, 0xa806, 0x0020, 0x080c, 0x101d, 0xb8a7, 0x0000, 0x009e,
-	0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x83e6, 0x012e,
-	0x0005, 0x901e, 0x0010, 0x2019, 0x0001, 0x900e, 0x0126, 0x2091,
-	0x8000, 0xb84c, 0x2048, 0xb800, 0xd0dc, 0x1170, 0x89ff, 0x0500,
-	0x83ff, 0x0120, 0xa878, 0x9606, 0x0158, 0x0030, 0xa86c, 0x9406,
-	0x1118, 0xa870, 0x9506, 0x0120, 0x2908, 0xa800, 0x2048, 0x0c70,
-	0x080c, 0x9797, 0xaa00, 0xb84c, 0x9906, 0x1110, 0xba4e, 0x0020,
-	0x00a6, 0x2150, 0xb202, 0x00ae, 0x82ff, 0x1110, 0xb952, 0x89ff,
-	0x012e, 0x0005, 0x9016, 0x0489, 0x1110, 0x2011, 0x0001, 0x0005,
-	0x080c, 0x6457, 0x0128, 0x080c, 0xbbbb, 0x0010, 0x9085, 0x0001,
-	0x0005, 0x080c, 0x6457, 0x0128, 0x080c, 0xbb60, 0x0010, 0x9085,
-	0x0001, 0x0005, 0x080c, 0x6457, 0x0128, 0x080c, 0xbbb8, 0x0010,
-	0x9085, 0x0001, 0x0005, 0x080c, 0x6457, 0x0128, 0x080c, 0xbb7f,
-	0x0010, 0x9085, 0x0001, 0x0005, 0x080c, 0x6457, 0x0128, 0x080c,
-	0xbbfc, 0x0010, 0x9085, 0x0001, 0x0005, 0xb8a4, 0x900d, 0x1118,
-	0x9085, 0x0001, 0x0005, 0x0136, 0x01c6, 0xa800, 0x9005, 0x11b8,
-	0x890e, 0x810e, 0x810f, 0x9184, 0x003f, 0x20e0, 0x9184, 0xffc0,
-	0x9080, 0x0004, 0x2098, 0x20a9, 0x0001, 0x2009, 0x0010, 0x4002,
-	0x9606, 0x0128, 0x8109, 0x1dd8, 0x9085, 0x0001, 0x0008, 0x9006,
-	0x01ce, 0x013e, 0x0005, 0x0146, 0x01d6, 0xa860, 0x20e8, 0xa85c,
-	0x9080, 0x0004, 0x20a0, 0x20a9, 0x0010, 0x2009, 0xffff, 0x4104,
-	0x01de, 0x014e, 0x0136, 0x01c6, 0xa800, 0x9005, 0x11b8, 0x890e,
+	0x60c3, 0x0014, 0x080c, 0x5b64, 0x00fe, 0x0005, 0x00f6, 0x708c,
+	0x9005, 0x05f0, 0x2011, 0x5b3a, 0x080c, 0x8038, 0x9086, 0x0014,
+	0x15a8, 0x080c, 0x5cab, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1105,
+	0x1568, 0x7834, 0x9084, 0x0100, 0x2011, 0x0100, 0x921e, 0x1168,
+	0x9085, 0x0001, 0x080c, 0x5cd6, 0x7a38, 0xd2fc, 0x0128, 0x70c0,
+	0x9005, 0x1110, 0x70c3, 0x0001, 0x0080, 0x9005, 0x11b8, 0x7a38,
+	0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x9085,
+	0x0001, 0x080c, 0x5cd6, 0x7093, 0x0000, 0x7a38, 0xd2f4, 0x0110,
+	0x70db, 0x0008, 0x7097, 0x0016, 0x0029, 0x0010, 0x708f, 0x0000,
+	0x00fe, 0x0005, 0x080c, 0x9c3f, 0x080c, 0x5cab, 0x20e1, 0x0000,
+	0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000e,
+	0x4003, 0x2011, 0x026d, 0x2204, 0x9084, 0x0100, 0x2011, 0x024d,
+	0x2012, 0x2011, 0x026e, 0x7097, 0x0017, 0x080c, 0x5c8e, 0x1150,
+	0x7080, 0x9005, 0x1138, 0x080c, 0x5a5a, 0x1188, 0x9085, 0x0001,
+	0x080c, 0x26cc, 0x20a9, 0x0008, 0x080c, 0x5cab, 0x20e1, 0x0000,
+	0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3,
+	0x0014, 0x080c, 0x5b64, 0x0010, 0x080c, 0x55b4, 0x0005, 0x00f6,
+	0x708c, 0x9005, 0x01d8, 0x2011, 0x5b3a, 0x080c, 0x8038, 0x9086,
+	0x0084, 0x1190, 0x080c, 0x5cab, 0x2079, 0x0260, 0x7a30, 0x9296,
+	0x1106, 0x1150, 0x7834, 0x9005, 0x1138, 0x9006, 0x080c, 0x5cd6,
+	0x7097, 0x0018, 0x0029, 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005,
+	0x00f6, 0x7097, 0x0019, 0x080c, 0x5c3d, 0x2079, 0x0240, 0x7833,
+	0x1106, 0x7837, 0x0000, 0x080c, 0x5cab, 0x2009, 0x026e, 0x2039,
+	0x1c0e, 0x20a9, 0x0040, 0x213e, 0x8738, 0x8108, 0x9186, 0x0280,
+	0x1128, 0x6814, 0x8000, 0x6816, 0x2009, 0x0260, 0x1f04, 0x59c3,
+	0x2039, 0x1c0e, 0x080c, 0x5c8e, 0x11e8, 0x2728, 0x2514, 0x8207,
+	0x9084, 0x00ff, 0x8000, 0x2018, 0x9294, 0x00ff, 0x8007, 0x9205,
+	0x202a, 0x705c, 0x2310, 0x8214, 0x92a0, 0x1c0e, 0x2414, 0x938c,
+	0x0001, 0x0118, 0x9294, 0xff00, 0x0018, 0x9294, 0x00ff, 0x8007,
+	0x9215, 0x2222, 0x20a9, 0x0040, 0x2009, 0x024e, 0x270e, 0x8738,
+	0x8108, 0x9186, 0x0260, 0x1128, 0x6810, 0x8000, 0x6812, 0x2009,
+	0x0240, 0x1f04, 0x59f6, 0x60c3, 0x0084, 0x080c, 0x5b64, 0x00fe,
+	0x0005, 0x00f6, 0x708c, 0x9005, 0x01e0, 0x2011, 0x5b3a, 0x080c,
+	0x8038, 0x9086, 0x0084, 0x1198, 0x080c, 0x5cab, 0x2079, 0x0260,
+	0x7a30, 0x9296, 0x1107, 0x1158, 0x7834, 0x9005, 0x1140, 0x7093,
+	0x0001, 0x080c, 0x5c01, 0x7097, 0x001a, 0x0029, 0x0010, 0x708f,
+	0x0000, 0x00fe, 0x0005, 0x9085, 0x0001, 0x080c, 0x5cd6, 0x7097,
+	0x001b, 0x080c, 0x9c3f, 0x080c, 0x5cab, 0x2011, 0x0260, 0x2009,
+	0x0240, 0x748c, 0x9480, 0x0018, 0x9080, 0x0007, 0x9084, 0x03f8,
+	0x8004, 0x20a8, 0x220e, 0x8210, 0x8108, 0x9186, 0x0260, 0x1150,
+	0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x6814, 0x8000, 0x6816,
+	0x2011, 0x0260, 0x1f04, 0x5a42, 0x60c3, 0x0084, 0x080c, 0x5b64,
+	0x0005, 0x0005, 0x0086, 0x0096, 0x2029, 0x1854, 0x252c, 0x20a9,
+	0x0008, 0x2041, 0x1c0e, 0x20e9, 0x0001, 0x28a0, 0x080c, 0x5cab,
+	0x20e1, 0x0000, 0x2099, 0x026e, 0x4003, 0x20a9, 0x0008, 0x2011,
+	0x0007, 0xd5d4, 0x0108, 0x9016, 0x2800, 0x9200, 0x200c, 0x91a6,
+	0xffff, 0x1148, 0xd5d4, 0x0110, 0x8210, 0x0008, 0x8211, 0x1f04,
+	0x5a74, 0x0804, 0x5ae3, 0x82ff, 0x1160, 0xd5d4, 0x0120, 0x91a6,
+	0x3fff, 0x0d90, 0x0020, 0x91a6, 0x3fff, 0x0904, 0x5ae3, 0x918d,
+	0xc000, 0x20a9, 0x0010, 0x2019, 0x0001, 0xd5d4, 0x0110, 0x2019,
+	0x0010, 0x2120, 0xd5d4, 0x0110, 0x8423, 0x0008, 0x8424, 0x1240,
+	0xd5d4, 0x0110, 0x8319, 0x0008, 0x8318, 0x1f04, 0x5a9a, 0x04d8,
+	0x23a8, 0x2021, 0x0001, 0x8426, 0x8425, 0x1f04, 0x5aac, 0x2328,
+	0x8529, 0x92be, 0x0007, 0x0158, 0x0006, 0x2039, 0x0007, 0x2200,
+	0x973a, 0x000e, 0x27a8, 0x95a8, 0x0010, 0x1f04, 0x5abb, 0x755a,
+	0x95c8, 0x3138, 0x292d, 0x95ac, 0x00ff, 0x757e, 0x6532, 0x6536,
+	0x0016, 0x2508, 0x080c, 0x26ac, 0x001e, 0x60e7, 0x0000, 0x65ea,
+	0x2018, 0x2304, 0x9405, 0x201a, 0x7083, 0x0001, 0x20e9, 0x0000,
+	0x20a1, 0x024e, 0x20e1, 0x0001, 0x2898, 0x20a9, 0x0008, 0x4003,
+	0x9085, 0x0001, 0x0008, 0x9006, 0x009e, 0x008e, 0x0005, 0x0156,
+	0x01c6, 0x01d6, 0x0136, 0x0146, 0x22a8, 0x20e1, 0x0000, 0x2099,
+	0x026e, 0x20e9, 0x0000, 0x2011, 0x024e, 0x22a0, 0x4003, 0x014e,
+	0x013e, 0x01de, 0x01ce, 0x015e, 0x2118, 0x9026, 0x2001, 0x0007,
+	0x939a, 0x0010, 0x0218, 0x8420, 0x8001, 0x0cd0, 0x2118, 0x84ff,
+	0x0120, 0x939a, 0x0010, 0x8421, 0x1de0, 0x2021, 0x0001, 0x83ff,
+	0x0118, 0x8423, 0x8319, 0x1de8, 0x9238, 0x2029, 0x026e, 0x9528,
+	0x2504, 0x942c, 0x11b8, 0x9405, 0x203a, 0x715a, 0x91a0, 0x3138,
+	0x242d, 0x95ac, 0x00ff, 0x757e, 0x6532, 0x6536, 0x0016, 0x2508,
+	0x080c, 0x26ac, 0x001e, 0x60e7, 0x0000, 0x65ea, 0x7083, 0x0001,
+	0x9084, 0x0000, 0x0005, 0x00e6, 0x2071, 0x1800, 0x7087, 0x0000,
+	0x00ee, 0x0005, 0x00e6, 0x00f6, 0x2079, 0x0100, 0x2071, 0x0140,
+	0x080c, 0x5bf0, 0x080c, 0x93ac, 0x7004, 0x9084, 0x4000, 0x0110,
+	0x080c, 0x2b24, 0x0126, 0x2091, 0x8000, 0x2071, 0x1825, 0x2073,
+	0x0000, 0x7840, 0x0026, 0x0016, 0x2009, 0x00f7, 0x080c, 0x5c4d,
+	0x001e, 0x9094, 0x0010, 0x9285, 0x0080, 0x7842, 0x7a42, 0x002e,
+	0x012e, 0x00fe, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c,
+	0x29ca, 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012, 0x2011,
+	0x19c2, 0x2013, 0x0000, 0x708f, 0x0000, 0x012e, 0x60a3, 0x0056,
+	0x60a7, 0x9575, 0x080c, 0x93a3, 0x6144, 0xd184, 0x0120, 0x7194,
+	0x918d, 0x2000, 0x0018, 0x7188, 0x918d, 0x1000, 0x2011, 0x196a,
+	0x2112, 0x2009, 0x07d0, 0x2011, 0x5b3a, 0x080c, 0x80ca, 0x0005,
+	0x0016, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9db8,
+	0x2009, 0x00f7, 0x080c, 0x5c4d, 0x2061, 0x19cb, 0x900e, 0x611a,
+	0x611e, 0x6172, 0x6176, 0x2061, 0x1800, 0x6003, 0x0001, 0x2061,
+	0x0100, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x196a, 0x200b,
+	0x0000, 0x2009, 0x002d, 0x2011, 0x5bbc, 0x080c, 0x802c, 0x012e,
+	0x00ce, 0x002e, 0x001e, 0x0005, 0x00e6, 0x0006, 0x0126, 0x2091,
+	0x8000, 0x0471, 0x2071, 0x0100, 0x080c, 0x93ac, 0x2071, 0x0140,
+	0x7004, 0x9084, 0x4000, 0x0110, 0x080c, 0x2b24, 0x080c, 0x6fba,
+	0x0188, 0x080c, 0x6fd5, 0x1170, 0x080c, 0x72a0, 0x0016, 0x080c,
+	0x277b, 0x2001, 0x193e, 0x2102, 0x001e, 0x080c, 0x729b, 0x080c,
+	0x6ee4, 0x0050, 0x2009, 0x0001, 0x080c, 0x2a63, 0x2001, 0x0001,
+	0x080c, 0x260c, 0x080c, 0x5b90, 0x012e, 0x000e, 0x00ee, 0x0005,
+	0x2001, 0x180e, 0x2004, 0xd0bc, 0x0158, 0x0026, 0x0036, 0x2011,
+	0x8017, 0x2001, 0x196a, 0x201c, 0x080c, 0x48d9, 0x003e, 0x002e,
+	0x0005, 0x20a9, 0x0012, 0x20e9, 0x0001, 0x20a1, 0x1c80, 0x080c,
+	0x5cab, 0x20e9, 0x0000, 0x2099, 0x026e, 0x0099, 0x20a9, 0x0020,
+	0x080c, 0x5ca5, 0x2099, 0x0260, 0x20a1, 0x1c92, 0x0051, 0x20a9,
+	0x000e, 0x080c, 0x5ca8, 0x2099, 0x0260, 0x20a1, 0x1cb2, 0x0009,
+	0x0005, 0x0016, 0x0026, 0x3410, 0x3308, 0x2104, 0x8007, 0x2012,
+	0x8108, 0x8210, 0x1f04, 0x5c25, 0x002e, 0x001e, 0x0005, 0x080c,
+	0x9c3f, 0x20e1, 0x0001, 0x2099, 0x1c00, 0x20e9, 0x0000, 0x20a1,
+	0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, 0x080c, 0x9c3f, 0x080c,
+	0x5cab, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1,
+	0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, 0x00c6, 0x0006, 0x2061,
+	0x0100, 0x810f, 0x2001, 0x1833, 0x2004, 0x9005, 0x1138, 0x2001,
+	0x1817, 0x2004, 0x9084, 0x00ff, 0x9105, 0x0010, 0x9185, 0x00f7,
+	0x604a, 0x000e, 0x00ce, 0x0005, 0x0016, 0x0046, 0x080c, 0x655e,
+	0x0158, 0x9006, 0x2020, 0x2009, 0x002a, 0x080c, 0xd52a, 0x2001,
+	0x180c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a, 0x900e, 0x080c,
+	0x2fa5, 0x080c, 0xc212, 0x0140, 0x0036, 0x2019, 0xffff, 0x2021,
+	0x0007, 0x080c, 0x4a76, 0x003e, 0x004e, 0x001e, 0x0005, 0x080c,
+	0x5b90, 0x7097, 0x0000, 0x708f, 0x0000, 0x0005, 0x0006, 0x2001,
+	0x180c, 0x2004, 0xd09c, 0x0100, 0x000e, 0x0005, 0x0006, 0x0016,
+	0x0126, 0x2091, 0x8000, 0x2001, 0x0101, 0x200c, 0x918d, 0x0006,
+	0x2102, 0x012e, 0x001e, 0x000e, 0x0005, 0x2009, 0x0001, 0x0020,
+	0x2009, 0x0002, 0x0008, 0x900e, 0x6814, 0x9084, 0xffc0, 0x910d,
+	0x6916, 0x0005, 0x00f6, 0x0156, 0x0146, 0x01d6, 0x9006, 0x20a9,
+	0x0080, 0x20e9, 0x0001, 0x20a1, 0x1c00, 0x4004, 0x2079, 0x1c00,
+	0x7803, 0x2200, 0x7807, 0x00ef, 0x780f, 0x00ef, 0x7813, 0x0138,
+	0x7823, 0xffff, 0x7827, 0xffff, 0x01de, 0x014e, 0x015e, 0x00fe,
+	0x0005, 0x2001, 0x1800, 0x2003, 0x0001, 0x0005, 0x2001, 0x1977,
+	0x0118, 0x2003, 0x0001, 0x0010, 0x2003, 0x0000, 0x0005, 0x0156,
+	0x20a9, 0x0800, 0x2009, 0x1000, 0x9006, 0x200a, 0x8108, 0x1f04,
+	0x5ce5, 0x015e, 0x0005, 0x00d6, 0x0036, 0x0156, 0x0136, 0x0146,
+	0x2069, 0x1853, 0x9006, 0xb802, 0xb8be, 0xb807, 0x0707, 0xb80a,
+	0xb80e, 0xb812, 0x9198, 0x3138, 0x231d, 0x939c, 0x00ff, 0xbb16,
+	0x0016, 0x0026, 0xb8b2, 0x080c, 0x9db1, 0x1120, 0x9192, 0x007e,
+	0x1208, 0xbbb2, 0x20a9, 0x0004, 0xb8b4, 0x20e8, 0xb9b8, 0x9198,
+	0x0006, 0x9006, 0x23a0, 0x4004, 0x20a9, 0x0004, 0x9198, 0x000a,
+	0x23a0, 0x4004, 0x002e, 0x001e, 0xb83e, 0xb842, 0xb84e, 0xb852,
+	0xb856, 0xb85a, 0xb85e, 0xb862, 0xb866, 0xb86a, 0xb86f, 0x0100,
+	0xb872, 0xb876, 0xb87a, 0xb88a, 0xb88e, 0xb893, 0x0008, 0xb896,
+	0xb89a, 0xb89e, 0xb8ae, 0xb9a2, 0x0096, 0xb8a4, 0x904d, 0x0110,
+	0x080c, 0x101d, 0xb8a7, 0x0000, 0x009e, 0x9006, 0xb84a, 0x6810,
+	0xb83a, 0x680c, 0xb846, 0x6814, 0x9084, 0x00ff, 0xb842, 0x014e,
+	0x013e, 0x015e, 0x003e, 0x00de, 0x0005, 0x0126, 0x2091, 0x8000,
+	0xa974, 0xae78, 0x9684, 0x3fff, 0x9082, 0x4000, 0x1a04, 0x5dbb,
+	0x9182, 0x0800, 0x1a04, 0x5dbf, 0x2001, 0x180c, 0x2004, 0x9084,
+	0x0003, 0x1904, 0x5dc5, 0x9188, 0x1000, 0x2104, 0x905d, 0x0518,
+	0xb804, 0x9084, 0x00ff, 0x908e, 0x0006, 0x1508, 0xb8a4, 0x900d,
+	0x1904, 0x5dd7, 0xb850, 0x900d, 0x1148, 0xa802, 0x2900, 0xb852,
+	0xb84e, 0x080c, 0x840e, 0x9006, 0x012e, 0x0005, 0x00a6, 0x2150,
+	0x2900, 0xb002, 0xa803, 0x0000, 0x00ae, 0xb852, 0x0c90, 0x2001,
+	0x0005, 0x900e, 0x04b8, 0x2001, 0x0028, 0x900e, 0x0498, 0x9082,
+	0x0006, 0x1290, 0x080c, 0x9db1, 0x1160, 0xb8a0, 0x9084, 0xff80,
+	0x1140, 0xb900, 0xd1fc, 0x0990, 0x2001, 0x0029, 0x2009, 0x1000,
+	0x0408, 0x2001, 0x0028, 0x00a8, 0x2009, 0x180c, 0x210c, 0xd18c,
+	0x0118, 0x2001, 0x0004, 0x0068, 0xd184, 0x0118, 0x2001, 0x0004,
+	0x0040, 0x2001, 0x0029, 0xb900, 0xd1fc, 0x0118, 0x2009, 0x1000,
+	0x0048, 0x900e, 0x0038, 0x2001, 0x0029, 0x900e, 0x0018, 0x2001,
+	0x0029, 0x900e, 0x9005, 0x012e, 0x0005, 0x2001, 0x180c, 0x2004,
+	0xd084, 0x19d0, 0x9188, 0x1000, 0x2104, 0x905d, 0x09a8, 0x080c,
+	0x6562, 0x1990, 0xb800, 0xd0bc, 0x0978, 0x0804, 0x5d6e, 0x080c,
+	0x63da, 0x0904, 0x5d87, 0x0804, 0x5d72, 0x00b6, 0x00e6, 0x0126,
+	0x2091, 0x8000, 0xa974, 0x9182, 0x0800, 0x1a04, 0x5e58, 0x9188,
+	0x1000, 0x2104, 0x905d, 0x0904, 0x5e30, 0xb8a0, 0x9086, 0x007f,
+	0x0178, 0x080c, 0x656a, 0x0160, 0xa994, 0x81ff, 0x0130, 0x908e,
+	0x0004, 0x0130, 0x908e, 0x0005, 0x0118, 0x080c, 0x6562, 0x1598,
+	0xa87c, 0xd0fc, 0x01e0, 0xa894, 0x9005, 0x01c8, 0x2060, 0x0026,
+	0x2010, 0x080c, 0xbb05, 0x002e, 0x1120, 0x2001, 0x0008, 0x0804,
+	0x5e5a, 0x6020, 0x9086, 0x000a, 0x0120, 0x2001, 0x0008, 0x0804,
+	0x5e5a, 0x601a, 0x6003, 0x0008, 0x2900, 0x6016, 0x0058, 0x080c,
+	0x9ddc, 0x05e8, 0x2b00, 0x6012, 0x2900, 0x6016, 0x600b, 0xffff,
+	0x6023, 0x000a, 0x2009, 0x0003, 0x080c, 0x9eac, 0x9006, 0x0458,
+	0x2001, 0x0028, 0x0438, 0x9082, 0x0006, 0x1290, 0x080c, 0x9db1,
+	0x1160, 0xb8a0, 0x9084, 0xff80, 0x1140, 0xb900, 0xd1fc, 0x0900,
+	0x2001, 0x0029, 0x2009, 0x1000, 0x00a8, 0x2001, 0x0028, 0x0090,
+	0x2009, 0x180c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0050,
+	0xd184, 0x0118, 0x2001, 0x0004, 0x0028, 0x2001, 0x0029, 0x0010,
+	0x2001, 0x0029, 0x9005, 0x012e, 0x00ee, 0x00be, 0x0005, 0x2001,
+	0x002c, 0x0cc0, 0x00f6, 0x00b6, 0x0126, 0x2091, 0x8000, 0xa8e0,
+	0x9005, 0x1550, 0xa8dc, 0x9082, 0x0101, 0x1630, 0xa8c8, 0x9005,
+	0x1518, 0xa8c4, 0x9082, 0x0101, 0x12f8, 0xa974, 0x2079, 0x1800,
+	0x9182, 0x0800, 0x12e8, 0x7830, 0x9084, 0x0003, 0x1130, 0xaa98,
+	0xab94, 0xa878, 0x9084, 0x0007, 0x00ea, 0x7930, 0xd18c, 0x0118,
+	0x2001, 0x0004, 0x0038, 0xd184, 0x0118, 0x2001, 0x0004, 0x0010,
+	0x2001, 0x0029, 0x900e, 0x0038, 0x2001, 0x002c, 0x900e, 0x0018,
+	0x2001, 0x0029, 0x900e, 0x9006, 0x0008, 0x9005, 0x012e, 0x00be,
+	0x00fe, 0x0005, 0x5eef, 0x5eaa, 0x5ec1, 0x5eef, 0x5eef, 0x5eef,
+	0x5eef, 0x5eef, 0x2100, 0x9082, 0x007e, 0x1278, 0x080c, 0x61de,
+	0x0148, 0x9046, 0xb810, 0x9306, 0x1904, 0x5ef7, 0xb814, 0x9206,
+	0x15f0, 0x0028, 0xbb12, 0xba16, 0x0010, 0x080c, 0x4793, 0x0150,
+	0x04b0, 0x080c, 0x623e, 0x1598, 0xb810, 0x9306, 0x1580, 0xb814,
+	0x9206, 0x1568, 0x080c, 0x9ddc, 0x0530, 0x2b00, 0x6012, 0x080c,
+	0xbf8c, 0x2900, 0x6016, 0x600b, 0xffff, 0x6023, 0x000a, 0xa878,
+	0x9086, 0x0001, 0x1170, 0x080c, 0x2fda, 0x9006, 0x080c, 0x617b,
+	0x2001, 0x0002, 0x080c, 0x618f, 0x2001, 0x0200, 0xb86e, 0xb893,
+	0x0002, 0x2009, 0x0003, 0x080c, 0x9eac, 0x9006, 0x0068, 0x2001,
+	0x0001, 0x900e, 0x0038, 0x2001, 0x002c, 0x900e, 0x0018, 0x2001,
+	0x0028, 0x900e, 0x9005, 0x0000, 0x012e, 0x00be, 0x00fe, 0x0005,
+	0x00b6, 0x00f6, 0x00e6, 0x0126, 0x2091, 0x8000, 0xa894, 0x90c6,
+	0x0015, 0x0904, 0x60cc, 0x90c6, 0x0056, 0x0904, 0x60d0, 0x90c6,
+	0x0066, 0x0904, 0x60d4, 0x90c6, 0x0067, 0x0904, 0x60d8, 0x90c6,
+	0x0068, 0x0904, 0x60dc, 0x90c6, 0x0071, 0x0904, 0x60e0, 0x90c6,
+	0x0074, 0x0904, 0x60e4, 0x90c6, 0x007c, 0x0904, 0x60e8, 0x90c6,
+	0x007e, 0x0904, 0x60ec, 0x90c6, 0x0037, 0x0904, 0x60f0, 0x9016,
+	0x2079, 0x1800, 0xa974, 0x9186, 0x00ff, 0x0904, 0x60c7, 0x9182,
+	0x0800, 0x1a04, 0x60c7, 0x080c, 0x623e, 0x1198, 0xb804, 0x9084,
+	0x00ff, 0x9082, 0x0006, 0x1268, 0xa894, 0x90c6, 0x006f, 0x0148,
+	0x080c, 0x9db1, 0x1904, 0x60b0, 0xb8a0, 0x9084, 0xff80, 0x1904,
+	0x60b0, 0xa894, 0x90c6, 0x006f, 0x0158, 0x90c6, 0x005e, 0x0904,
+	0x6010, 0x90c6, 0x0064, 0x0904, 0x6039, 0x2008, 0x0804, 0x5fd3,
+	0xa998, 0xa8b0, 0x2040, 0x080c, 0x9db1, 0x1120, 0x9182, 0x007f,
+	0x0a04, 0x5fd3, 0x9186, 0x00ff, 0x0904, 0x5fd3, 0x9182, 0x0800,
+	0x1a04, 0x5fd3, 0xaaa0, 0xab9c, 0x7878, 0x9306, 0x1188, 0x787c,
+	0x0096, 0x924e, 0x1128, 0x2208, 0x2310, 0x009e, 0x0804, 0x5fd3,
+	0x99cc, 0xff00, 0x009e, 0x1120, 0x2208, 0x2310, 0x0804, 0x5fd3,
+	0x080c, 0x4793, 0x0904, 0x5fdc, 0x900e, 0x9016, 0x90c6, 0x4000,
+	0x1558, 0x0006, 0x080c, 0x645e, 0x1108, 0xc185, 0xb800, 0xd0bc,
+	0x0108, 0xc18d, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080,
+	0x0031, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098,
+	0x080c, 0x0f68, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080,
+	0x0035, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x000a, 0x2098,
+	0x080c, 0x0f68, 0x000e, 0x00c8, 0x90c6, 0x4007, 0x1110, 0x2408,
+	0x00a0, 0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0070, 0x90c6,
+	0x4009, 0x1108, 0x0050, 0x90c6, 0x4006, 0x0138, 0x2001, 0x4005,
+	0x2009, 0x000a, 0x0010, 0x2001, 0x4006, 0xa896, 0xa99a, 0xaa9e,
+	0x2001, 0x0030, 0x900e, 0x0470, 0x080c, 0x9ddc, 0x1130, 0x2001,
+	0x4005, 0x2009, 0x0003, 0x9016, 0x0c80, 0x2b00, 0x6012, 0x080c,
+	0xbf8c, 0x2900, 0x6016, 0x6023, 0x0001, 0xa868, 0xd88c, 0x0108,
+	0xc0f5, 0xa86a, 0x0126, 0x2091, 0x8000, 0x080c, 0x2fda, 0x012e,
+	0x9006, 0x080c, 0x617b, 0x2001, 0x0002, 0x080c, 0x618f, 0x2009,
+	0x0002, 0x080c, 0x9eac, 0xa8b0, 0xd094, 0x0118, 0xb8bc, 0xc08d,
+	0xb8be, 0x9006, 0x9005, 0x012e, 0x00ee, 0x00fe, 0x00be, 0x0005,
+	0x080c, 0x539a, 0x0118, 0x2009, 0x0007, 0x00f8, 0xa998, 0xaeb0,
+	0x080c, 0x623e, 0x1904, 0x5fce, 0x9186, 0x007f, 0x0130, 0x080c,
+	0x6562, 0x0118, 0x2009, 0x0009, 0x0080, 0x0096, 0x080c, 0x0feb,
+	0x1120, 0x009e, 0x2009, 0x0002, 0x0040, 0x2900, 0x009e, 0xa806,
+	0x080c, 0xbcfd, 0x19b0, 0x2009, 0x0003, 0x2001, 0x4005, 0x0804,
+	0x5fd5, 0xa998, 0xaeb0, 0x080c, 0x623e, 0x1904, 0x5fce, 0x0096,
+	0x080c, 0x0feb, 0x1128, 0x009e, 0x2009, 0x0002, 0x0804, 0x608d,
+	0x2900, 0x009e, 0xa806, 0x0096, 0x2048, 0x20a9, 0x002b, 0xb8b4,
+	0x20e0, 0xb8b8, 0x2098, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002,
+	0x20a0, 0x4003, 0x20a9, 0x0008, 0x9080, 0x0006, 0x20a0, 0xbbb8,
+	0x9398, 0x0006, 0x2398, 0x080c, 0x0f68, 0x009e, 0xa87b, 0x0000,
+	0xa883, 0x0000, 0xa897, 0x4000, 0xd684, 0x1168, 0x080c, 0x5386,
+	0xd0b4, 0x1118, 0xa89b, 0x000b, 0x00e0, 0xb800, 0xd08c, 0x0118,
+	0xa89b, 0x000c, 0x00b0, 0x080c, 0x6562, 0x0118, 0xa89b, 0x0009,
+	0x0080, 0x080c, 0x539a, 0x0118, 0xa89b, 0x0007, 0x0050, 0x080c,
+	0xbce0, 0x1904, 0x6009, 0x2009, 0x0003, 0x2001, 0x4005, 0x0804,
+	0x5fd5, 0xa87b, 0x0030, 0xa897, 0x4005, 0xa804, 0x8006, 0x8006,
+	0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2009,
+	0x002b, 0xaaa0, 0xab9c, 0xaca8, 0xada4, 0x2031, 0x0000, 0x2041,
+	0x122f, 0x080c, 0xa334, 0x1904, 0x6009, 0x2009, 0x0002, 0x08e8,
+	0x2001, 0x0028, 0x900e, 0x0804, 0x600a, 0x2009, 0x180c, 0x210c,
+	0xd18c, 0x0118, 0x2001, 0x0004, 0x0038, 0xd184, 0x0118, 0x2001,
+	0x0004, 0x0010, 0x2001, 0x0029, 0x900e, 0x0804, 0x600a, 0x2001,
+	0x0029, 0x900e, 0x0804, 0x600a, 0x080c, 0x355c, 0x0804, 0x600b,
+	0x080c, 0x50c3, 0x0804, 0x600b, 0x080c, 0x432c, 0x0804, 0x600b,
+	0x080c, 0x43a5, 0x0804, 0x600b, 0x080c, 0x4401, 0x0804, 0x600b,
+	0x080c, 0x484f, 0x0804, 0x600b, 0x080c, 0x4afb, 0x0804, 0x600b,
+	0x080c, 0x4d2e, 0x0804, 0x600b, 0x080c, 0x4f27, 0x0804, 0x600b,
+	0x080c, 0x376c, 0x0804, 0x600b, 0x00b6, 0xa974, 0xae78, 0x9684,
+	0x3fff, 0x9082, 0x4000, 0x1618, 0x9182, 0x0800, 0x1268, 0x9188,
+	0x1000, 0x2104, 0x905d, 0x0140, 0x080c, 0x6562, 0x1148, 0x00e9,
+	0x080c, 0x6369, 0x9006, 0x00b0, 0x2001, 0x0028, 0x900e, 0x0090,
+	0x9082, 0x0006, 0x1240, 0xb900, 0xd1fc, 0x0d88, 0x2001, 0x0029,
+	0x2009, 0x1000, 0x0038, 0x2001, 0x0029, 0x900e, 0x0018, 0x2001,
+	0x0029, 0x900e, 0x9005, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000,
+	0xb850, 0x900d, 0x0150, 0x2900, 0x0096, 0x2148, 0xa802, 0x009e,
+	0xa803, 0x0000, 0xb852, 0x012e, 0x0005, 0x2900, 0xb852, 0xb84e,
+	0xa803, 0x0000, 0x0cc0, 0x0126, 0x2091, 0x8000, 0xb84c, 0x9005,
+	0x0170, 0x00e6, 0x2071, 0x19b8, 0x7004, 0x9086, 0x0002, 0x0168,
+	0x00ee, 0xb84c, 0xa802, 0x2900, 0xb84e, 0x012e, 0x0005, 0x2900,
+	0xb852, 0xb84e, 0xa803, 0x0000, 0x0cc0, 0x701c, 0x9b06, 0x1d80,
+	0xb84c, 0x00a6, 0x2050, 0xb000, 0xa802, 0x2900, 0xb002, 0x00ae,
+	0x00ee, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0xb84c, 0x904d,
+	0x0130, 0xa800, 0x9005, 0x1108, 0xb852, 0xb84e, 0x9905, 0x012e,
+	0x0005, 0xb84c, 0x904d, 0x0130, 0xa800, 0x9005, 0x1108, 0xb852,
+	0xb84e, 0x9905, 0x0005, 0x00b6, 0x0126, 0x00c6, 0x0026, 0x2091,
+	0x8000, 0x6210, 0x2258, 0xba00, 0x9005, 0x0110, 0xc285, 0x0008,
+	0xc284, 0xba02, 0x002e, 0x00ce, 0x012e, 0x00be, 0x0005, 0x00b6,
+	0x0126, 0x00c6, 0x2091, 0x8000, 0x6210, 0x2258, 0xba04, 0x0006,
+	0x9086, 0x0006, 0x1170, 0xb89c, 0xd0ac, 0x0158, 0x080c, 0x655e,
+	0x0140, 0x9284, 0xff00, 0x8007, 0x9086, 0x0007, 0x1110, 0x2011,
+	0x0600, 0x000e, 0x9294, 0xff00, 0x9215, 0xba06, 0x0006, 0x9086,
+	0x0006, 0x1120, 0xba90, 0x82ff, 0x090c, 0x0db4, 0x000e, 0x00ce,
+	0x012e, 0x00be, 0x0005, 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000,
+	0x6210, 0x2258, 0xba04, 0x0006, 0x9086, 0x0006, 0x1168, 0xb89c,
+	0xd0a4, 0x0150, 0x080c, 0x655a, 0x1138, 0x9284, 0x00ff, 0x9086,
+	0x0007, 0x1110, 0x2011, 0x0006, 0x000e, 0x9294, 0x00ff, 0x8007,
+	0x9215, 0xba06, 0x00ce, 0x012e, 0x00be, 0x0005, 0x9182, 0x0800,
+	0x0218, 0x9085, 0x0001, 0x0005, 0x00d6, 0x0026, 0x9190, 0x1000,
+	0x2204, 0x905d, 0x1180, 0x0096, 0x080c, 0x0feb, 0x2958, 0x009e,
+	0x0160, 0x2b00, 0x2012, 0xb85c, 0xb8ba, 0xb860, 0xb8b6, 0x9006,
+	0xb8a6, 0x080c, 0x5ceb, 0x9006, 0x0010, 0x9085, 0x0001, 0x002e,
+	0x00de, 0x0005, 0x00b6, 0x0096, 0x0126, 0x2091, 0x8000, 0x0026,
+	0x9182, 0x0800, 0x0218, 0x9085, 0x0001, 0x0458, 0x00d6, 0x9190,
+	0x1000, 0x2204, 0x905d, 0x0518, 0x2013, 0x0000, 0xb8a4, 0x904d,
+	0x0110, 0x080c, 0x101d, 0x00d6, 0x00c6, 0xb8ac, 0x2060, 0x8cff,
+	0x0168, 0x600c, 0x0006, 0x6014, 0x2048, 0x080c, 0xbb17, 0x0110,
+	0x080c, 0x0f9d, 0x080c, 0x9e32, 0x00ce, 0x0c88, 0x00ce, 0x00de,
+	0x2b48, 0xb8b8, 0xb85e, 0xb8b4, 0xb862, 0x080c, 0x102d, 0x00de,
+	0x9006, 0x002e, 0x012e, 0x009e, 0x00be, 0x0005, 0x0016, 0x9182,
+	0x0800, 0x0218, 0x9085, 0x0001, 0x0030, 0x9188, 0x1000, 0x2104,
+	0x905d, 0x0dc0, 0x9006, 0x001e, 0x0005, 0x00d6, 0x0156, 0x0136,
+	0x0146, 0x9006, 0xb80a, 0xb80e, 0xb800, 0xc08c, 0xb802, 0x080c,
+	0x6fb2, 0x1510, 0xb8a0, 0x9086, 0x007e, 0x0120, 0x080c, 0x9db1,
+	0x11d8, 0x0078, 0x7040, 0xd0e4, 0x01b8, 0x00c6, 0x2061, 0x1953,
+	0x7048, 0x2062, 0x704c, 0x6006, 0x7050, 0x600a, 0x7054, 0x600e,
+	0x00ce, 0x703c, 0x2069, 0x0140, 0x9005, 0x1110, 0x2001, 0x0001,
+	0x6886, 0x2069, 0x1800, 0x68b2, 0x7040, 0xb85e, 0x7048, 0xb862,
+	0x704c, 0xb866, 0x20e1, 0x0000, 0x2099, 0x0276, 0xb8b4, 0x20e8,
+	0xb8b8, 0x9088, 0x000a, 0x21a0, 0x20a9, 0x0004, 0x4003, 0x2099,
+	0x027a, 0x9088, 0x0006, 0x21a0, 0x20a9, 0x0004, 0x4003, 0x2069,
+	0x0200, 0x6817, 0x0001, 0x7040, 0xb86a, 0x7144, 0xb96e, 0x7048,
+	0xb872, 0x7050, 0xb876, 0x2069, 0x0200, 0x6817, 0x0000, 0xb8a0,
+	0x9086, 0x007e, 0x1110, 0x7144, 0xb96e, 0x9182, 0x0211, 0x1218,
+	0x2009, 0x0008, 0x0400, 0x9182, 0x0259, 0x1218, 0x2009, 0x0007,
+	0x00d0, 0x9182, 0x02c1, 0x1218, 0x2009, 0x0006, 0x00a0, 0x9182,
+	0x0349, 0x1218, 0x2009, 0x0005, 0x0070, 0x9182, 0x0421, 0x1218,
+	0x2009, 0x0004, 0x0040, 0x9182, 0x0581, 0x1218, 0x2009, 0x0003,
+	0x0010, 0x2009, 0x0002, 0xb992, 0x014e, 0x013e, 0x015e, 0x00de,
+	0x0005, 0x0016, 0x0026, 0x00e6, 0x2071, 0x0260, 0x7034, 0xb896,
+	0x703c, 0xb89a, 0x7054, 0xb89e, 0x0036, 0xbbbc, 0xc384, 0xba00,
+	0x2009, 0x1873, 0x210c, 0xd0bc, 0x0120, 0xd1ec, 0x0110, 0xc2ad,
+	0x0008, 0xc2ac, 0xd0c4, 0x0148, 0xd1e4, 0x0138, 0xc2bd, 0xd0cc,
+	0x0128, 0xd38c, 0x1108, 0xc385, 0x0008, 0xc2bc, 0xba02, 0xbbbe,
+	0x003e, 0x00ee, 0x002e, 0x001e, 0x0005, 0x0096, 0x0126, 0x2091,
+	0x8000, 0xb8a4, 0x904d, 0x0578, 0xa900, 0x81ff, 0x15c0, 0xaa04,
+	0x9282, 0x0010, 0x16c8, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x8906,
+	0x8006, 0x8007, 0x908c, 0x003f, 0x21e0, 0x9084, 0xffc0, 0x9080,
+	0x0004, 0x2098, 0x2009, 0x0010, 0x20a9, 0x0001, 0x4002, 0x9086,
+	0xffff, 0x0120, 0x8109, 0x1dd0, 0x080c, 0x0db4, 0x3c00, 0x20e8,
+	0x3300, 0x8001, 0x20a0, 0x4604, 0x8210, 0xaa06, 0x01de, 0x01ce,
+	0x014e, 0x013e, 0x0060, 0x080c, 0x0feb, 0x0170, 0x2900, 0xb8a6,
+	0xa803, 0x0000, 0x080c, 0x63fa, 0xa807, 0x0001, 0xae12, 0x9085,
+	0x0001, 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0126, 0x2091,
+	0x8000, 0x0096, 0xb8a4, 0x904d, 0x0188, 0xa800, 0x9005, 0x1150,
+	0x080c, 0x6409, 0x1158, 0xa804, 0x908a, 0x0002, 0x0218, 0x8001,
+	0xa806, 0x0020, 0x080c, 0x101d, 0xb8a7, 0x0000, 0x009e, 0x012e,
+	0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x840e, 0x012e, 0x0005,
+	0x901e, 0x0010, 0x2019, 0x0001, 0x900e, 0x0126, 0x2091, 0x8000,
+	0xb84c, 0x2048, 0xb800, 0xd0dc, 0x1170, 0x89ff, 0x0500, 0x83ff,
+	0x0120, 0xa878, 0x9606, 0x0158, 0x0030, 0xa86c, 0x9406, 0x1118,
+	0xa870, 0x9506, 0x0120, 0x2908, 0xa800, 0x2048, 0x0c70, 0x080c,
+	0x97b0, 0xaa00, 0xb84c, 0x9906, 0x1110, 0xba4e, 0x0020, 0x00a6,
+	0x2150, 0xb202, 0x00ae, 0x82ff, 0x1110, 0xb952, 0x89ff, 0x012e,
+	0x0005, 0x9016, 0x0489, 0x1110, 0x2011, 0x0001, 0x0005, 0x080c,
+	0x645e, 0x0128, 0x080c, 0xbbd4, 0x0010, 0x9085, 0x0001, 0x0005,
+	0x080c, 0x645e, 0x0128, 0x080c, 0xbb79, 0x0010, 0x9085, 0x0001,
+	0x0005, 0x080c, 0x645e, 0x0128, 0x080c, 0xbbd1, 0x0010, 0x9085,
+	0x0001, 0x0005, 0x080c, 0x645e, 0x0128, 0x080c, 0xbb98, 0x0010,
+	0x9085, 0x0001, 0x0005, 0x080c, 0x645e, 0x0128, 0x080c, 0xbc15,
+	0x0010, 0x9085, 0x0001, 0x0005, 0xb8a4, 0x900d, 0x1118, 0x9085,
+	0x0001, 0x0005, 0x0136, 0x01c6, 0xa800, 0x9005, 0x11b8, 0x890e,
 	0x810e, 0x810f, 0x9184, 0x003f, 0x20e0, 0x9184, 0xffc0, 0x9080,
 	0x0004, 0x2098, 0x20a9, 0x0001, 0x2009, 0x0010, 0x4002, 0x9606,
-	0x0128, 0x8109, 0x1dd8, 0x9085, 0x0001, 0x0068, 0x0146, 0x01d6,
-	0x3300, 0x8001, 0x20a0, 0x3c00, 0x20e8, 0x2001, 0xffff, 0x4004,
-	0x01de, 0x014e, 0x9006, 0x01ce, 0x013e, 0x0005, 0x0096, 0x0126,
-	0x2091, 0x8000, 0xb8a4, 0x904d, 0x1128, 0x080c, 0x0feb, 0x0168,
-	0x2900, 0xb8a6, 0x080c, 0x63f3, 0xa803, 0x0001, 0xa807, 0x0000,
-	0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0096,
-	0x0126, 0x2091, 0x8000, 0xb8a4, 0x904d, 0x0130, 0xb8a7, 0x0000,
-	0x080c, 0x101d, 0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0xb89c,
-	0xd0a4, 0x0005, 0x00b6, 0x00f6, 0x080c, 0x6fa7, 0x01b0, 0x71c0,
-	0x81ff, 0x1198, 0x71d8, 0xd19c, 0x0180, 0x2001, 0x007e, 0x9080,
-	0x1000, 0x2004, 0x905d, 0x0148, 0xb804, 0x9084, 0x00ff, 0x9086,
-	0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802, 0x2079, 0x1853, 0x7804,
-	0x00d0, 0x0156, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x6237,
-	0x1168, 0xb804, 0x9084, 0xff00, 0x8007, 0x9096, 0x0004, 0x0118,
-	0x9086, 0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802, 0x001e, 0x8108,
-	0x1f04, 0x647d, 0x015e, 0x080c, 0x6519, 0x0120, 0x2001, 0x1956,
-	0x200c, 0x0030, 0x2079, 0x1853, 0x7804, 0x0030, 0x2009, 0x07d0,
-	0x2011, 0x64a7, 0x080c, 0x80a2, 0x00fe, 0x00be, 0x0005, 0x00b6,
-	0x2011, 0x64a7, 0x080c, 0x8010, 0x080c, 0x6519, 0x01d8, 0x2001,
-	0x107e, 0x2004, 0x2058, 0xb900, 0xc1ec, 0xb902, 0x080c, 0x6557,
-	0x0130, 0x2009, 0x07d0, 0x2011, 0x64a7, 0x080c, 0x80a2, 0x00e6,
-	0x2071, 0x1800, 0x9006, 0x707a, 0x705c, 0x707e, 0x080c, 0x2dbb,
-	0x00ee, 0x04b0, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x900e, 0x0016,
-	0x080c, 0x6237, 0x1538, 0xb800, 0xd0ec, 0x0520, 0x0046, 0xbaa0,
-	0x2220, 0x9006, 0x2009, 0x0029, 0x080c, 0xd50a, 0xb800, 0xc0e5,
-	0xc0ec, 0xb802, 0x080c, 0x6553, 0x2001, 0x0707, 0x1128, 0xb804,
-	0x9084, 0x00ff, 0x9085, 0x0700, 0xb806, 0x2019, 0x0029, 0x080c,
-	0x8549, 0x0076, 0x903e, 0x080c, 0x8441, 0x900e, 0x080c, 0xd27b,
-	0x007e, 0x004e, 0x001e, 0x8108, 0x1f04, 0x64cf, 0x00ce, 0x015e,
-	0x00be, 0x0005, 0x00b6, 0x6010, 0x2058, 0xb800, 0xc0ec, 0xb802,
-	0x00be, 0x0005, 0x7810, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0ac,
-	0x0005, 0x6010, 0x00b6, 0x905d, 0x0108, 0xb800, 0x00be, 0xd0bc,
-	0x0005, 0x00b6, 0x00f6, 0x2001, 0x107e, 0x2004, 0x905d, 0x0110,
-	0xb800, 0xd0ec, 0x00fe, 0x00be, 0x0005, 0x0126, 0x0026, 0x2091,
-	0x8000, 0x0006, 0xbaa0, 0x9290, 0x1000, 0x2204, 0x9b06, 0x190c,
-	0x0db4, 0x000e, 0xba00, 0x9005, 0x0110, 0xc2fd, 0x0008, 0xc2fc,
-	0xba02, 0x002e, 0x012e, 0x0005, 0x2011, 0x1836, 0x2204, 0xd0cc,
-	0x0138, 0x2001, 0x1954, 0x200c, 0x2011, 0x6549, 0x080c, 0x80a2,
-	0x0005, 0x2011, 0x6549, 0x080c, 0x8010, 0x2011, 0x1836, 0x2204,
-	0xc0cc, 0x2012, 0x0005, 0x080c, 0x537f, 0xd0ac, 0x0005, 0x080c,
-	0x537f, 0xd0a4, 0x0005, 0x0016, 0xb904, 0x9184, 0x00ff, 0x908e,
-	0x0006, 0x001e, 0x0005, 0x0016, 0xb904, 0x9184, 0xff00, 0x8007,
-	0x908e, 0x0006, 0x001e, 0x0005, 0x00b6, 0x00f6, 0x080c, 0xc1f9,
-	0x0158, 0x70d8, 0x9084, 0x0028, 0x0138, 0x2001, 0x107f, 0x2004,
-	0x905d, 0x0110, 0xb8bc, 0xd094, 0x00fe, 0x00be, 0x0005, 0x0006,
-	0x0016, 0x0036, 0x0046, 0x0076, 0x00b6, 0x2001, 0x1817, 0x203c,
-	0x9780, 0x3131, 0x203d, 0x97bc, 0xff00, 0x873f, 0x9006, 0x2018,
-	0x2008, 0x9284, 0x8000, 0x0110, 0x2019, 0x0001, 0x9294, 0x7fff,
-	0x2100, 0x9706, 0x0190, 0x91a0, 0x1000, 0x2404, 0x905d, 0x0168,
-	0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1138, 0x83ff, 0x0118,
-	0xb89c, 0xd0a4, 0x0110, 0x8211, 0x0158, 0x8108, 0x83ff, 0x0120,
-	0x9182, 0x0800, 0x0e28, 0x0068, 0x9182, 0x007e, 0x0e08, 0x0048,
-	0x00be, 0x007e, 0x004e, 0x003e, 0x001e, 0x9085, 0x0001, 0x000e,
-	0x0005, 0x00be, 0x007e, 0x004e, 0x003e, 0x001e, 0x9006, 0x000e,
-	0x0005, 0x0046, 0x0056, 0x0076, 0x00b6, 0x2100, 0x9084, 0x7fff,
-	0x9080, 0x1000, 0x2004, 0x905d, 0x0130, 0xb804, 0x9084, 0x00ff,
-	0x9086, 0x0006, 0x0550, 0x9184, 0x8000, 0x0580, 0x2001, 0x1817,
-	0x203c, 0x9780, 0x3131, 0x203d, 0x97bc, 0xff00, 0x873f, 0x9006,
-	0x2020, 0x2400, 0x9706, 0x01a0, 0x94a8, 0x1000, 0x2504, 0x905d,
-	0x0178, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1148, 0xb89c,
-	0xd0a4, 0x0130, 0xb814, 0x9206, 0x1118, 0xb810, 0x9306, 0x0128,
-	0x8420, 0x9482, 0x0800, 0x0e28, 0x0048, 0x918c, 0x7fff, 0x00be,
-	0x007e, 0x005e, 0x004e, 0x9085, 0x0001, 0x0005, 0x918c, 0x7fff,
-	0x00be, 0x007e, 0x005e, 0x004e, 0x9006, 0x0005, 0x2071, 0x1906,
-	0x7003, 0x0001, 0x7007, 0x0000, 0x9006, 0x7012, 0x7016, 0x701a,
-	0x701e, 0x700a, 0x7046, 0x2001, 0x1919, 0x2003, 0x0000, 0x0005,
-	0x0016, 0x00e6, 0x2071, 0x191a, 0x900e, 0x710a, 0x080c, 0x537f,
-	0xd0fc, 0x1140, 0x080c, 0x537f, 0x900e, 0xd09c, 0x0108, 0x8108,
-	0x7102, 0x0400, 0x2001, 0x1873, 0x200c, 0x9184, 0x0007, 0x9006,
-	0x0002, 0x6632, 0x6632, 0x6632, 0x6632, 0x6632, 0x6649, 0x6657,
-	0x6632, 0x7003, 0x0003, 0x2009, 0x1874, 0x210c, 0x9184, 0xff00,
-	0x8007, 0x9005, 0x1110, 0x2001, 0x0002, 0x7006, 0x0018, 0x7003,
-	0x0005, 0x0c88, 0x00ee, 0x001e, 0x0005, 0x00e6, 0x2071, 0x0050,
-	0x684c, 0x9005, 0x1150, 0x00e6, 0x2071, 0x1906, 0x7028, 0xc085,
-	0x702a, 0x00ee, 0x9085, 0x0001, 0x0488, 0x6844, 0x9005, 0x0158,
-	0x080c, 0x72fd, 0x6a60, 0x9200, 0x7002, 0x6864, 0x9101, 0x7006,
-	0x9006, 0x7012, 0x7016, 0x6860, 0x7002, 0x6864, 0x7006, 0x6868,
-	0x700a, 0x686c, 0x700e, 0x6844, 0x9005, 0x1110, 0x7012, 0x7016,
-	0x684c, 0x701a, 0x701c, 0x9085, 0x0040, 0x701e, 0x7037, 0x0019,
-	0x702b, 0x0001, 0x00e6, 0x2071, 0x1906, 0x7028, 0xc084, 0x702a,
-	0x7007, 0x0001, 0x700b, 0x0000, 0x00ee, 0x9006, 0x00ee, 0x0005,
-	0xa868, 0xd0fc, 0x11d8, 0x00e6, 0x0026, 0x2001, 0x191a, 0x2004,
-	0x9005, 0x0904, 0x688a, 0xa87c, 0xd0bc, 0x1904, 0x688a, 0xa978,
-	0xa874, 0x9105, 0x1904, 0x688a, 0x2001, 0x191a, 0x2004, 0x0002,
-	0x688a, 0x66e3, 0x671f, 0x671f, 0x688a, 0x671f, 0x0005, 0xa868,
-	0xd0fc, 0x1500, 0x00e6, 0x0026, 0x2009, 0x191a, 0x210c, 0x81ff,
-	0x0904, 0x688a, 0xa87c, 0xd0cc, 0x0904, 0x688a, 0xa880, 0x9084,
-	0x00ff, 0x9086, 0x0001, 0x1904, 0x688a, 0x9186, 0x0003, 0x0904,
-	0x671f, 0x9186, 0x0005, 0x0904, 0x671f, 0xa84f, 0x8021, 0xa853,
-	0x0017, 0x0028, 0x0005, 0xa84f, 0x8020, 0xa853, 0x0016, 0x2071,
-	0x1906, 0x701c, 0x9005, 0x1904, 0x6a4a, 0x0e04, 0x6a95, 0x2071,
-	0x0000, 0xa84c, 0x7082, 0xa850, 0x7032, 0xa86c, 0x7086, 0x7036,
-	0xa870, 0x708a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,
-	0x190c, 0x1187, 0x2071, 0x1800, 0x2011, 0x0001, 0xa804, 0x900d,
-	0x702c, 0x1158, 0xa802, 0x2900, 0x702e, 0x70bc, 0x9200, 0x70be,
-	0x080c, 0x7f35, 0x002e, 0x00ee, 0x0005, 0x0096, 0x2148, 0xa904,
-	0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x009e, 0x0c58, 0xa84f,
-	0x0000, 0x00f6, 0x2079, 0x0050, 0x2071, 0x1906, 0xa803, 0x0000,
-	0x7010, 0x9005, 0x1904, 0x680e, 0x782c, 0x908c, 0x0780, 0x190c,
-	0x6bbc, 0x8004, 0x8004, 0x8004, 0x9084, 0x0003, 0x0002, 0x673d,
-	0x680e, 0x6762, 0x67a9, 0x080c, 0x0db4, 0x2071, 0x1800, 0x2900,
-	0x7822, 0xa804, 0x900d, 0x1170, 0x2071, 0x19cb, 0x703c, 0x9005,
-	0x1328, 0x2001, 0x191b, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e,
-	0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210,
-	0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c,
-	0x7f35, 0x0c10, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d,
-	0x1580, 0x7824, 0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c, 0x1148,
-	0x2009, 0x182f, 0x210c, 0x918a, 0x0040, 0x0218, 0x7022, 0x00ee,
-	0x0058, 0x00ee, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc,
-	0x8000, 0x70be, 0x080c, 0x7f35, 0x782c, 0x9094, 0x0780, 0x190c,
-	0x6bbc, 0xd0a4, 0x19f0, 0x2071, 0x19cb, 0x703c, 0x9005, 0x1328,
-	0x2001, 0x191b, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee,
-	0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900,
-	0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x7f35,
-	0x0800, 0x0096, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c,
-	0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x7f35,
-	0x782c, 0x9094, 0x0780, 0x190c, 0x6bbc, 0xd0a4, 0x1d60, 0x00ee,
-	0x782c, 0x9094, 0x0780, 0x190c, 0x6bbc, 0xd09c, 0x11a0, 0x009e,
-	0x2900, 0x7822, 0xa804, 0x900d, 0x1560, 0x2071, 0x19cb, 0x703c,
-	0x9005, 0x1328, 0x2001, 0x191b, 0x2004, 0x8005, 0x703e, 0x00fe,
-	0x002e, 0x00ee, 0x0005, 0x009e, 0x2908, 0x7010, 0x8000, 0x7012,
-	0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148,
+	0x0128, 0x8109, 0x1dd8, 0x9085, 0x0001, 0x0008, 0x9006, 0x01ce,
+	0x013e, 0x0005, 0x0146, 0x01d6, 0xa860, 0x20e8, 0xa85c, 0x9080,
+	0x0004, 0x20a0, 0x20a9, 0x0010, 0x2009, 0xffff, 0x4104, 0x01de,
+	0x014e, 0x0136, 0x01c6, 0xa800, 0x9005, 0x11b8, 0x890e, 0x810e,
+	0x810f, 0x9184, 0x003f, 0x20e0, 0x9184, 0xffc0, 0x9080, 0x0004,
+	0x2098, 0x20a9, 0x0001, 0x2009, 0x0010, 0x4002, 0x9606, 0x0128,
+	0x8109, 0x1dd8, 0x9085, 0x0001, 0x0068, 0x0146, 0x01d6, 0x3300,
+	0x8001, 0x20a0, 0x3c00, 0x20e8, 0x2001, 0xffff, 0x4004, 0x01de,
+	0x014e, 0x9006, 0x01ce, 0x013e, 0x0005, 0x0096, 0x0126, 0x2091,
+	0x8000, 0xb8a4, 0x904d, 0x1128, 0x080c, 0x0feb, 0x0168, 0x2900,
+	0xb8a6, 0x080c, 0x63fa, 0xa803, 0x0001, 0xa807, 0x0000, 0x9085,
+	0x0001, 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0096, 0x0126,
+	0x2091, 0x8000, 0xb8a4, 0x904d, 0x0130, 0xb8a7, 0x0000, 0x080c,
+	0x101d, 0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0xb89c, 0xd0a4,
+	0x0005, 0x00b6, 0x00f6, 0x080c, 0x6fb2, 0x01b0, 0x71c0, 0x81ff,
+	0x1198, 0x71d8, 0xd19c, 0x0180, 0x2001, 0x007e, 0x9080, 0x1000,
+	0x2004, 0x905d, 0x0148, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006,
+	0x1118, 0xb800, 0xc0ed, 0xb802, 0x2079, 0x1853, 0x7804, 0x00d0,
+	0x0156, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x623e, 0x1168,
+	0xb804, 0x9084, 0xff00, 0x8007, 0x9096, 0x0004, 0x0118, 0x9086,
+	0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802, 0x001e, 0x8108, 0x1f04,
+	0x6484, 0x015e, 0x080c, 0x6520, 0x0120, 0x2001, 0x1956, 0x200c,
+	0x0030, 0x2079, 0x1853, 0x7804, 0x0030, 0x2009, 0x07d0, 0x2011,
+	0x64ae, 0x080c, 0x80ca, 0x00fe, 0x00be, 0x0005, 0x00b6, 0x2011,
+	0x64ae, 0x080c, 0x8038, 0x080c, 0x6520, 0x01d8, 0x2001, 0x107e,
+	0x2004, 0x2058, 0xb900, 0xc1ec, 0xb902, 0x080c, 0x655e, 0x0130,
+	0x2009, 0x07d0, 0x2011, 0x64ae, 0x080c, 0x80ca, 0x00e6, 0x2071,
+	0x1800, 0x9006, 0x707a, 0x705c, 0x707e, 0x080c, 0x2dbb, 0x00ee,
+	0x04b0, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c,
+	0x623e, 0x1538, 0xb800, 0xd0ec, 0x0520, 0x0046, 0xbaa0, 0x2220,
+	0x9006, 0x2009, 0x0029, 0x080c, 0xd52a, 0xb800, 0xc0e5, 0xc0ec,
+	0xb802, 0x080c, 0x655a, 0x2001, 0x0707, 0x1128, 0xb804, 0x9084,
+	0x00ff, 0x9085, 0x0700, 0xb806, 0x2019, 0x0029, 0x080c, 0x8571,
+	0x0076, 0x903e, 0x080c, 0x8469, 0x900e, 0x080c, 0xd29b, 0x007e,
+	0x004e, 0x001e, 0x8108, 0x1f04, 0x64d6, 0x00ce, 0x015e, 0x00be,
+	0x0005, 0x00b6, 0x6010, 0x2058, 0xb800, 0xc0ec, 0xb802, 0x00be,
+	0x0005, 0x7810, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0ac, 0x0005,
+	0x6010, 0x00b6, 0x905d, 0x0108, 0xb800, 0x00be, 0xd0bc, 0x0005,
+	0x00b6, 0x00f6, 0x2001, 0x107e, 0x2004, 0x905d, 0x0110, 0xb800,
+	0xd0ec, 0x00fe, 0x00be, 0x0005, 0x0126, 0x0026, 0x2091, 0x8000,
+	0x0006, 0xbaa0, 0x9290, 0x1000, 0x2204, 0x9b06, 0x190c, 0x0db4,
+	0x000e, 0xba00, 0x9005, 0x0110, 0xc2fd, 0x0008, 0xc2fc, 0xba02,
+	0x002e, 0x012e, 0x0005, 0x2011, 0x1836, 0x2204, 0xd0cc, 0x0138,
+	0x2001, 0x1954, 0x200c, 0x2011, 0x6550, 0x080c, 0x80ca, 0x0005,
+	0x2011, 0x6550, 0x080c, 0x8038, 0x2011, 0x1836, 0x2204, 0xc0cc,
+	0x2012, 0x0005, 0x080c, 0x5386, 0xd0ac, 0x0005, 0x080c, 0x5386,
+	0xd0a4, 0x0005, 0x0016, 0xb904, 0x9184, 0x00ff, 0x908e, 0x0006,
+	0x001e, 0x0005, 0x0016, 0xb904, 0x9184, 0xff00, 0x8007, 0x908e,
+	0x0006, 0x001e, 0x0005, 0x00b6, 0x00f6, 0x080c, 0xc212, 0x0158,
+	0x70d8, 0x9084, 0x0028, 0x0138, 0x2001, 0x107f, 0x2004, 0x905d,
+	0x0110, 0xb8bc, 0xd094, 0x00fe, 0x00be, 0x0005, 0x0006, 0x0016,
+	0x0036, 0x0046, 0x0076, 0x00b6, 0x2001, 0x1817, 0x203c, 0x9780,
+	0x3138, 0x203d, 0x97bc, 0xff00, 0x873f, 0x9006, 0x2018, 0x2008,
+	0x9284, 0x8000, 0x0110, 0x2019, 0x0001, 0x9294, 0x7fff, 0x2100,
+	0x9706, 0x0190, 0x91a0, 0x1000, 0x2404, 0x905d, 0x0168, 0xb804,
+	0x9084, 0x00ff, 0x9086, 0x0006, 0x1138, 0x83ff, 0x0118, 0xb89c,
+	0xd0a4, 0x0110, 0x8211, 0x0158, 0x8108, 0x83ff, 0x0120, 0x9182,
+	0x0800, 0x0e28, 0x0068, 0x9182, 0x007e, 0x0e08, 0x0048, 0x00be,
+	0x007e, 0x004e, 0x003e, 0x001e, 0x9085, 0x0001, 0x000e, 0x0005,
+	0x00be, 0x007e, 0x004e, 0x003e, 0x001e, 0x9006, 0x000e, 0x0005,
+	0x0046, 0x0056, 0x0076, 0x00b6, 0x2100, 0x9084, 0x7fff, 0x9080,
+	0x1000, 0x2004, 0x905d, 0x0130, 0xb804, 0x9084, 0x00ff, 0x9086,
+	0x0006, 0x0550, 0x9184, 0x8000, 0x0580, 0x2001, 0x1817, 0x203c,
+	0x9780, 0x3138, 0x203d, 0x97bc, 0xff00, 0x873f, 0x9006, 0x2020,
+	0x2400, 0x9706, 0x01a0, 0x94a8, 0x1000, 0x2504, 0x905d, 0x0178,
+	0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1148, 0xb89c, 0xd0a4,
+	0x0130, 0xb814, 0x9206, 0x1118, 0xb810, 0x9306, 0x0128, 0x8420,
+	0x9482, 0x0800, 0x0e28, 0x0048, 0x918c, 0x7fff, 0x00be, 0x007e,
+	0x005e, 0x004e, 0x9085, 0x0001, 0x0005, 0x918c, 0x7fff, 0x00be,
+	0x007e, 0x005e, 0x004e, 0x9006, 0x0005, 0x2071, 0x1906, 0x7003,
+	0x0001, 0x7007, 0x0000, 0x9006, 0x7012, 0x7016, 0x701a, 0x701e,
+	0x700a, 0x7046, 0x2001, 0x1919, 0x2003, 0x0000, 0x0005, 0x0016,
+	0x00e6, 0x2071, 0x191a, 0x900e, 0x710a, 0x080c, 0x5386, 0xd0fc,
+	0x1140, 0x080c, 0x5386, 0x900e, 0xd09c, 0x0108, 0x8108, 0x7102,
+	0x0400, 0x2001, 0x1873, 0x200c, 0x9184, 0x0007, 0x9006, 0x0002,
+	0x6639, 0x6639, 0x6639, 0x6639, 0x6639, 0x6650, 0x665e, 0x6639,
+	0x7003, 0x0003, 0x2009, 0x1874, 0x210c, 0x9184, 0xff00, 0x8007,
+	0x9005, 0x1110, 0x2001, 0x0002, 0x7006, 0x0018, 0x7003, 0x0005,
+	0x0c88, 0x00ee, 0x001e, 0x0005, 0x00e6, 0x2071, 0x0050, 0x684c,
+	0x9005, 0x1150, 0x00e6, 0x2071, 0x1906, 0x7028, 0xc085, 0x702a,
+	0x00ee, 0x9085, 0x0001, 0x0488, 0x6844, 0x9005, 0x0158, 0x080c,
+	0x7308, 0x6a60, 0x9200, 0x7002, 0x6864, 0x9101, 0x7006, 0x9006,
+	0x7012, 0x7016, 0x6860, 0x7002, 0x6864, 0x7006, 0x6868, 0x700a,
+	0x686c, 0x700e, 0x6844, 0x9005, 0x1110, 0x7012, 0x7016, 0x684c,
+	0x701a, 0x701c, 0x9085, 0x0040, 0x701e, 0x7037, 0x0019, 0x702b,
+	0x0001, 0x00e6, 0x2071, 0x1906, 0x7028, 0xc084, 0x702a, 0x7007,
+	0x0001, 0x700b, 0x0000, 0x00ee, 0x9006, 0x00ee, 0x0005, 0xa868,
+	0xd0fc, 0x11d8, 0x00e6, 0x0026, 0x2001, 0x191a, 0x2004, 0x9005,
+	0x0904, 0x6891, 0xa87c, 0xd0bc, 0x1904, 0x6891, 0xa978, 0xa874,
+	0x9105, 0x1904, 0x6891, 0x2001, 0x191a, 0x2004, 0x0002, 0x6891,
+	0x66ea, 0x6726, 0x6726, 0x6891, 0x6726, 0x0005, 0xa868, 0xd0fc,
+	0x1500, 0x00e6, 0x0026, 0x2009, 0x191a, 0x210c, 0x81ff, 0x0904,
+	0x6891, 0xa87c, 0xd0cc, 0x0904, 0x6891, 0xa880, 0x9084, 0x00ff,
+	0x9086, 0x0001, 0x1904, 0x6891, 0x9186, 0x0003, 0x0904, 0x6726,
+	0x9186, 0x0005, 0x0904, 0x6726, 0xa84f, 0x8021, 0xa853, 0x0017,
+	0x0028, 0x0005, 0xa84f, 0x8020, 0xa853, 0x0016, 0x2071, 0x1906,
+	0x701c, 0x9005, 0x1904, 0x6a51, 0x0e04, 0x6a9c, 0x2071, 0x0000,
+	0xa84c, 0x7082, 0xa850, 0x7032, 0xa86c, 0x7086, 0x7036, 0xa870,
+	0x708a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
+	0x1187, 0x2071, 0x1800, 0x2011, 0x0001, 0xa804, 0x900d, 0x702c,
+	0x1158, 0xa802, 0x2900, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c,
+	0x7f5d, 0x002e, 0x00ee, 0x0005, 0x0096, 0x2148, 0xa904, 0xa802,
+	0x8210, 0x2900, 0x81ff, 0x1dc8, 0x009e, 0x0c58, 0xa84f, 0x0000,
+	0x00f6, 0x2079, 0x0050, 0x2071, 0x1906, 0xa803, 0x0000, 0x7010,
+	0x9005, 0x1904, 0x6815, 0x782c, 0x908c, 0x0780, 0x190c, 0x6bc3,
+	0x8004, 0x8004, 0x8004, 0x9084, 0x0003, 0x0002, 0x6744, 0x6815,
+	0x6769, 0x67b0, 0x080c, 0x0db4, 0x2071, 0x1800, 0x2900, 0x7822,
 	0xa804, 0x900d, 0x1170, 0x2071, 0x19cb, 0x703c, 0x9005, 0x1328,
 	0x2001, 0x191b, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee,
-	0x0005, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802,
-	0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be,
-	0x080c, 0x7f35, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2908, 0x7010,
-	0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008,
-	0x711e, 0x2148, 0xa804, 0x900d, 0x1904, 0x6863, 0x782c, 0x9094,
-	0x0780, 0x190c, 0x6bbc, 0xd09c, 0x1198, 0x701c, 0x904d, 0x0180,
-	0x7010, 0x8001, 0x7012, 0x1108, 0x701a, 0xa800, 0x701e, 0x2900,
-	0x7822, 0x782c, 0x9094, 0x0780, 0x190c, 0x6bbc, 0xd09c, 0x0d68,
-	0x782c, 0x9094, 0x0780, 0x190c, 0x6bbc, 0xd0a4, 0x01b0, 0x00e6,
-	0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e,
-	0x70bc, 0x8000, 0x70be, 0x080c, 0x7f35, 0x782c, 0x9094, 0x0780,
-	0x190c, 0x6bbc, 0xd0a4, 0x1d60, 0x00ee, 0x2071, 0x19cb, 0x703c,
-	0x9005, 0x1328, 0x2001, 0x191b, 0x2004, 0x8005, 0x703e, 0x00fe,
-	0x002e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1800, 0x9016, 0x702c,
-	0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e,
-	0x70bc, 0x9200, 0x70be, 0x080c, 0x7f35, 0x00ee, 0x0804, 0x681e,
-	0xa868, 0xd0fc, 0x1904, 0x68c6, 0x0096, 0xa804, 0xa807, 0x0000,
-	0x904d, 0x190c, 0x0f9d, 0x009e, 0x0018, 0xa868, 0xd0fc, 0x15f0,
-	0x00e6, 0x0026, 0xa84f, 0x0000, 0x00f6, 0x2079, 0x0050, 0x2071,
-	0x1800, 0x70e8, 0x8001, 0x01d0, 0x1678, 0x2071, 0x1906, 0xa803,
-	0x0000, 0x7010, 0x9005, 0x1904, 0x69c4, 0x782c, 0x908c, 0x0780,
-	0x190c, 0x6bbc, 0x8004, 0x8004, 0x8004, 0x9084, 0x0003, 0x0002,
-	0x68c7, 0x69c4, 0x68e2, 0x6953, 0x080c, 0x0db4, 0x70eb, 0x0fa0,
-	0x71e4, 0x8107, 0x9106, 0x9094, 0x00c0, 0x9184, 0xff3f, 0x9205,
-	0x70e6, 0x3b08, 0x3a00, 0x9104, 0x918d, 0x00c0, 0x21d8, 0x9084,
-	0xff3f, 0x9205, 0x20d0, 0x0888, 0x70ea, 0x0878, 0x0005, 0x2071,
-	0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1120, 0x00fe, 0x002e,
-	0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210,
-	0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c,
-	0x7f35, 0x0c60, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d,
-	0x1904, 0x6942, 0x7830, 0x8007, 0x9084, 0x001f, 0x9082, 0x0005,
-	0x1220, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7824, 0x00e6, 0x2071,
-	0x0040, 0x712c, 0xd19c, 0x1148, 0x2009, 0x182f, 0x210c, 0x918a,
-	0x0040, 0x0218, 0x7022, 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c,
-	0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x7f35,
-	0x782c, 0x9094, 0x0780, 0x190c, 0x6bbc, 0xd0a4, 0x19f0, 0x0e04,
-	0x6939, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000,
-	0x6836, 0x6833, 0x0013, 0x00de, 0x2001, 0x1917, 0x200c, 0xc184,
-	0x2102, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
-	0x1187, 0x2009, 0x1919, 0x200b, 0x0000, 0x00fe, 0x002e, 0x00ee,
-	0x0005, 0x2001, 0x1917, 0x200c, 0xc185, 0x2102, 0x00fe, 0x002e,
-	0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210,
+	0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900,
+	0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x7f5d,
+	0x0c10, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1580,
+	0x7824, 0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c, 0x1148, 0x2009,
+	0x182f, 0x210c, 0x918a, 0x0040, 0x0218, 0x7022, 0x00ee, 0x0058,
+	0x00ee, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000,
+	0x70be, 0x080c, 0x7f5d, 0x782c, 0x9094, 0x0780, 0x190c, 0x6bc3,
+	0xd0a4, 0x19f0, 0x2071, 0x19cb, 0x703c, 0x9005, 0x1328, 0x2001,
+	0x191b, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005,
+	0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff,
+	0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x7f5d, 0x0800,
+	0x0096, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802,
+	0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x7f5d, 0x782c,
+	0x9094, 0x0780, 0x190c, 0x6bc3, 0xd0a4, 0x1d60, 0x00ee, 0x782c,
+	0x9094, 0x0780, 0x190c, 0x6bc3, 0xd09c, 0x11a0, 0x009e, 0x2900,
+	0x7822, 0xa804, 0x900d, 0x1560, 0x2071, 0x19cb, 0x703c, 0x9005,
+	0x1328, 0x2001, 0x191b, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e,
+	0x00ee, 0x0005, 0x009e, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018,
+	0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804,
+	0x900d, 0x1170, 0x2071, 0x19cb, 0x703c, 0x9005, 0x1328, 0x2001,
+	0x191b, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005,
+	0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210,
 	0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c,
-	0x7f35, 0x0804, 0x68f5, 0x0096, 0x00e6, 0x7824, 0x2048, 0x2071,
-	0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be,
-	0x080c, 0x7f35, 0x782c, 0x9094, 0x0780, 0x190c, 0x6bbc, 0xd0a4,
-	0x1d60, 0x00ee, 0x0e04, 0x6997, 0x7838, 0x7938, 0x910e, 0x1de0,
-	0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x7044,
-	0xc084, 0x7046, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,
-	0x190c, 0x1187, 0x2009, 0x1919, 0x200b, 0x0000, 0x782c, 0x9094,
-	0x0780, 0x190c, 0x6bbc, 0xd09c, 0x1170, 0x009e, 0x2900, 0x7822,
-	0xa804, 0x900d, 0x11e0, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7044,
-	0xc085, 0x7046, 0x0c58, 0x009e, 0x2908, 0x7010, 0x8000, 0x7012,
-	0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148,
-	0xa804, 0x900d, 0x1120, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2071,
-	0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900,
-	0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x7f35,
-	0x00fe, 0x002e, 0x00ee, 0x0005, 0x2908, 0x7010, 0x8000, 0x7012,
-	0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148,
-	0xa804, 0x900d, 0x1904, 0x6a35, 0x782c, 0x9094, 0x0780, 0x190c,
-	0x6bbc, 0xd09c, 0x11b0, 0x701c, 0x904d, 0x0198, 0xa84c, 0x9005,
-	0x1180, 0x7010, 0x8001, 0x7012, 0x1108, 0x701a, 0xa800, 0x701e,
-	0x2900, 0x7822, 0x782c, 0x9094, 0x0780, 0x190c, 0x6bbc, 0xd09c,
-	0x0d50, 0x782c, 0x9094, 0x0780, 0x190c, 0x6bbc, 0xd0a4, 0x05c8,
-	0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900,
-	0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x7f35, 0x782c, 0x9094,
-	0x0780, 0x190c, 0x6bbc, 0xd0a4, 0x1d60, 0x00ee, 0x0e04, 0x6a2e,
+	0x7f5d, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2908, 0x7010, 0x8000,
+	0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e,
+	0x2148, 0xa804, 0x900d, 0x1904, 0x686a, 0x782c, 0x9094, 0x0780,
+	0x190c, 0x6bc3, 0xd09c, 0x1198, 0x701c, 0x904d, 0x0180, 0x7010,
+	0x8001, 0x7012, 0x1108, 0x701a, 0xa800, 0x701e, 0x2900, 0x7822,
+	0x782c, 0x9094, 0x0780, 0x190c, 0x6bc3, 0xd09c, 0x0d68, 0x782c,
+	0x9094, 0x0780, 0x190c, 0x6bc3, 0xd0a4, 0x01b0, 0x00e6, 0x7824,
+	0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc,
+	0x8000, 0x70be, 0x080c, 0x7f5d, 0x782c, 0x9094, 0x0780, 0x190c,
+	0x6bc3, 0xd0a4, 0x1d60, 0x00ee, 0x2071, 0x19cb, 0x703c, 0x9005,
+	0x1328, 0x2001, 0x191b, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e,
+	0x00ee, 0x0005, 0x00e6, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148,
+	0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc,
+	0x9200, 0x70be, 0x080c, 0x7f5d, 0x00ee, 0x0804, 0x6825, 0xa868,
+	0xd0fc, 0x1904, 0x68cd, 0x0096, 0xa804, 0xa807, 0x0000, 0x904d,
+	0x190c, 0x0f9d, 0x009e, 0x0018, 0xa868, 0xd0fc, 0x15f0, 0x00e6,
+	0x0026, 0xa84f, 0x0000, 0x00f6, 0x2079, 0x0050, 0x2071, 0x1800,
+	0x70e8, 0x8001, 0x01d0, 0x1678, 0x2071, 0x1906, 0xa803, 0x0000,
+	0x7010, 0x9005, 0x1904, 0x69cb, 0x782c, 0x908c, 0x0780, 0x190c,
+	0x6bc3, 0x8004, 0x8004, 0x8004, 0x9084, 0x0003, 0x0002, 0x68ce,
+	0x69cb, 0x68e9, 0x695a, 0x080c, 0x0db4, 0x70eb, 0x0fa0, 0x71e4,
+	0x8107, 0x9106, 0x9094, 0x00c0, 0x9184, 0xff3f, 0x9205, 0x70e6,
+	0x3b08, 0x3a00, 0x9104, 0x918d, 0x00c0, 0x21d8, 0x9084, 0xff3f,
+	0x9205, 0x20d0, 0x0888, 0x70ea, 0x0878, 0x0005, 0x2071, 0x1800,
+	0x2900, 0x7822, 0xa804, 0x900d, 0x1120, 0x00fe, 0x002e, 0x00ee,
+	0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900,
+	0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x7f5d,
+	0x0c60, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1904,
+	0x6949, 0x7830, 0x8007, 0x9084, 0x001f, 0x9082, 0x0005, 0x1220,
+	0x00fe, 0x002e, 0x00ee, 0x0005, 0x7824, 0x00e6, 0x2071, 0x0040,
+	0x712c, 0xd19c, 0x1148, 0x2009, 0x182f, 0x210c, 0x918a, 0x0040,
+	0x0218, 0x7022, 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c, 0xa802,
+	0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x7f5d, 0x782c,
+	0x9094, 0x0780, 0x190c, 0x6bc3, 0xd0a4, 0x19f0, 0x0e04, 0x6940,
 	0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836,
-	0x6833, 0x0013, 0x00de, 0x7044, 0xc084, 0x7046, 0x2091, 0x4080,
-	0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1187, 0x2009, 0x1919,
-	0x200b, 0x0000, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7044, 0xc085,
-	0x7046, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1800,
+	0x6833, 0x0013, 0x00de, 0x2001, 0x1917, 0x200c, 0xc184, 0x2102,
+	0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1187,
+	0x2009, 0x1919, 0x200b, 0x0000, 0x00fe, 0x002e, 0x00ee, 0x0005,
+	0x2001, 0x1917, 0x200c, 0xc185, 0x2102, 0x00fe, 0x002e, 0x00ee,
+	0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900,
+	0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x7f5d,
+	0x0804, 0x68fc, 0x0096, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800,
+	0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c,
+	0x7f5d, 0x782c, 0x9094, 0x0780, 0x190c, 0x6bc3, 0xd0a4, 0x1d60,
+	0x00ee, 0x0e04, 0x699e, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6,
+	0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x7044, 0xc084,
+	0x7046, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
+	0x1187, 0x2009, 0x1919, 0x200b, 0x0000, 0x782c, 0x9094, 0x0780,
+	0x190c, 0x6bc3, 0xd09c, 0x1170, 0x009e, 0x2900, 0x7822, 0xa804,
+	0x900d, 0x11e0, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7044, 0xc085,
+	0x7046, 0x0c58, 0x009e, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018,
+	0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804,
+	0x900d, 0x1120, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800,
 	0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff,
-	0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x7f35, 0x00ee,
-	0x0804, 0x69d4, 0x2071, 0x1906, 0xa803, 0x0000, 0x2908, 0x7010,
-	0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008,
-	0x711e, 0x2148, 0xa804, 0x900d, 0x1128, 0x1e04, 0x6a75, 0x002e,
+	0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x7f5d, 0x00fe,
+	0x002e, 0x00ee, 0x0005, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018,
+	0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804,
+	0x900d, 0x1904, 0x6a3c, 0x782c, 0x9094, 0x0780, 0x190c, 0x6bc3,
+	0xd09c, 0x11b0, 0x701c, 0x904d, 0x0198, 0xa84c, 0x9005, 0x1180,
+	0x7010, 0x8001, 0x7012, 0x1108, 0x701a, 0xa800, 0x701e, 0x2900,
+	0x7822, 0x782c, 0x9094, 0x0780, 0x190c, 0x6bc3, 0xd09c, 0x0d50,
+	0x782c, 0x9094, 0x0780, 0x190c, 0x6bc3, 0xd0a4, 0x05c8, 0x00e6,
+	0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e,
+	0x70bc, 0x8000, 0x70be, 0x080c, 0x7f5d, 0x782c, 0x9094, 0x0780,
+	0x190c, 0x6bc3, 0xd0a4, 0x1d60, 0x00ee, 0x0e04, 0x6a35, 0x7838,
+	0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833,
+	0x0013, 0x00de, 0x7044, 0xc084, 0x7046, 0x2091, 0x4080, 0x2001,
+	0x0089, 0x2004, 0xd084, 0x190c, 0x1187, 0x2009, 0x1919, 0x200b,
+	0x0000, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7044, 0xc085, 0x7046,
+	0x00fe, 0x002e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1800, 0x9016,
+	0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8,
+	0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x7f5d, 0x00ee, 0x0804,
+	0x69db, 0x2071, 0x1906, 0xa803, 0x0000, 0x2908, 0x7010, 0x8000,
+	0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e,
+	0x2148, 0xa804, 0x900d, 0x1128, 0x1e04, 0x6a7c, 0x002e, 0x00ee,
+	0x0005, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802,
+	0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be,
+	0x080c, 0x7f5d, 0x0e04, 0x6a66, 0x2071, 0x1906, 0x701c, 0x2048,
+	0xa84c, 0x900d, 0x0d18, 0x2071, 0x0000, 0x7182, 0xa850, 0x7032,
+	0xa86c, 0x7086, 0x7036, 0xa870, 0x708a, 0x2091, 0x4080, 0x2001,
+	0x0089, 0x2004, 0xd084, 0x190c, 0x1187, 0x2071, 0x1906, 0x080c,
+	0x6baf, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1906, 0xa803, 0x0000,
+	0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110,
+	0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1118, 0x002e,
 	0x00ee, 0x0005, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904,
 	0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200,
-	0x70be, 0x080c, 0x7f35, 0x0e04, 0x6a5f, 0x2071, 0x1906, 0x701c,
-	0x2048, 0xa84c, 0x900d, 0x0d18, 0x2071, 0x0000, 0x7182, 0xa850,
-	0x7032, 0xa86c, 0x7086, 0x7036, 0xa870, 0x708a, 0x2091, 0x4080,
-	0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1187, 0x2071, 0x1906,
-	0x080c, 0x6ba8, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1906, 0xa803,
-	0x0000, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a,
-	0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1118,
-	0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148,
-	0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc,
-	0x9200, 0x70be, 0x080c, 0x7f35, 0x002e, 0x00ee, 0x0005, 0x0006,
-	0xa87c, 0x0006, 0xa867, 0x0103, 0x20a9, 0x001c, 0xa860, 0x20e8,
-	0xa85c, 0x9080, 0x001d, 0x20a0, 0x9006, 0x4004, 0x000e, 0x9084,
-	0x00ff, 0xa87e, 0x000e, 0xa87a, 0xa982, 0x0005, 0x2071, 0x1906,
-	0x7004, 0x0002, 0x6ae0, 0x6ae1, 0x6ba7, 0x6ae1, 0x0db4, 0x6ba7,
-	0x0005, 0x2001, 0x191a, 0x2004, 0x0002, 0x6aeb, 0x6aeb, 0x6b40,
-	0x6b41, 0x6aeb, 0x6b41, 0x0126, 0x2091, 0x8000, 0x1e0c, 0x6bc7,
-	0x701c, 0x904d, 0x01e0, 0xa84c, 0x9005, 0x01d8, 0x0e04, 0x6b0f,
-	0xa94c, 0x2071, 0x0000, 0x7182, 0xa850, 0x7032, 0xa86c, 0x7086,
-	0x7036, 0xa870, 0x708a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
-	0xd084, 0x190c, 0x1187, 0x2071, 0x1906, 0x080c, 0x6ba8, 0x012e,
-	0x0470, 0x2001, 0x005b, 0x2004, 0x9094, 0x0780, 0x190c, 0x6bbc,
-	0xd09c, 0x2071, 0x1906, 0x1510, 0x2071, 0x1906, 0x700f, 0x0001,
+	0x70be, 0x080c, 0x7f5d, 0x002e, 0x00ee, 0x0005, 0x0006, 0xa87c,
+	0x0006, 0xa867, 0x0103, 0x20a9, 0x001c, 0xa860, 0x20e8, 0xa85c,
+	0x9080, 0x001d, 0x20a0, 0x9006, 0x4004, 0x000e, 0x9084, 0x00ff,
+	0xa87e, 0x000e, 0xa87a, 0xa982, 0x0005, 0x2071, 0x1906, 0x7004,
+	0x0002, 0x6ae7, 0x6ae8, 0x6bae, 0x6ae8, 0x0db4, 0x6bae, 0x0005,
+	0x2001, 0x191a, 0x2004, 0x0002, 0x6af2, 0x6af2, 0x6b47, 0x6b48,
+	0x6af2, 0x6b48, 0x0126, 0x2091, 0x8000, 0x1e0c, 0x6bce, 0x701c,
+	0x904d, 0x01e0, 0xa84c, 0x9005, 0x01d8, 0x0e04, 0x6b16, 0xa94c,
+	0x2071, 0x0000, 0x7182, 0xa850, 0x7032, 0xa86c, 0x7086, 0x7036,
+	0xa870, 0x708a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,
+	0x190c, 0x1187, 0x2071, 0x1906, 0x080c, 0x6baf, 0x012e, 0x0470,
+	0x2001, 0x005b, 0x2004, 0x9094, 0x0780, 0x190c, 0x6bc3, 0xd09c,
+	0x2071, 0x1906, 0x1510, 0x2071, 0x1906, 0x700f, 0x0001, 0xa964,
+	0x9184, 0x00ff, 0x9086, 0x0003, 0x1130, 0x810f, 0x918c, 0x00ff,
+	0x8101, 0x0108, 0x710e, 0x2900, 0x00d6, 0x2069, 0x0050, 0x6822,
+	0x00de, 0x2071, 0x1906, 0x701c, 0x2048, 0x7010, 0x8001, 0x7012,
+	0xa800, 0x701e, 0x9005, 0x1108, 0x701a, 0x012e, 0x0005, 0x0005,
+	0x00d6, 0x2008, 0x2069, 0x19cb, 0x683c, 0x9005, 0x0760, 0x0158,
+	0x9186, 0x0003, 0x0540, 0x2001, 0x1814, 0x2004, 0x2009, 0x1a98,
+	0x210c, 0x9102, 0x1500, 0x0126, 0x2091, 0x8000, 0x2069, 0x0050,
+	0x693c, 0x6838, 0x9106, 0x0190, 0x0e04, 0x6b7a, 0x2069, 0x0000,
+	0x6837, 0x8040, 0x6833, 0x0012, 0x6883, 0x8040, 0x2091, 0x4080,
+	0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1187, 0x2069, 0x19cb,
+	0x683f, 0xffff, 0x012e, 0x00de, 0x0126, 0x2091, 0x8000, 0x1e0c,
+	0x6c3f, 0x701c, 0x904d, 0x0540, 0x2001, 0x005b, 0x2004, 0x9094,
+	0x0780, 0x15c9, 0xd09c, 0x1500, 0x2071, 0x1906, 0x700f, 0x0001,
 	0xa964, 0x9184, 0x00ff, 0x9086, 0x0003, 0x1130, 0x810f, 0x918c,
 	0x00ff, 0x8101, 0x0108, 0x710e, 0x2900, 0x00d6, 0x2069, 0x0050,
-	0x6822, 0x00de, 0x2071, 0x1906, 0x701c, 0x2048, 0x7010, 0x8001,
-	0x7012, 0xa800, 0x701e, 0x9005, 0x1108, 0x701a, 0x012e, 0x0005,
-	0x0005, 0x00d6, 0x2008, 0x2069, 0x19cb, 0x683c, 0x9005, 0x0760,
-	0x0158, 0x9186, 0x0003, 0x0540, 0x2001, 0x1814, 0x2004, 0x2009,
-	0x1a98, 0x210c, 0x9102, 0x1500, 0x0126, 0x2091, 0x8000, 0x2069,
-	0x0050, 0x693c, 0x6838, 0x9106, 0x0190, 0x0e04, 0x6b73, 0x2069,
-	0x0000, 0x6837, 0x8040, 0x6833, 0x0012, 0x6883, 0x8040, 0x2091,
-	0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1187, 0x2069,
-	0x19cb, 0x683f, 0xffff, 0x012e, 0x00de, 0x0126, 0x2091, 0x8000,
-	0x1e0c, 0x6c38, 0x701c, 0x904d, 0x0540, 0x2001, 0x005b, 0x2004,
-	0x9094, 0x0780, 0x15c9, 0xd09c, 0x1500, 0x2071, 0x1906, 0x700f,
-	0x0001, 0xa964, 0x9184, 0x00ff, 0x9086, 0x0003, 0x1130, 0x810f,
-	0x918c, 0x00ff, 0x8101, 0x0108, 0x710e, 0x2900, 0x00d6, 0x2069,
-	0x0050, 0x6822, 0x00de, 0x701c, 0x2048, 0x7010, 0x8001, 0x7012,
-	0xa800, 0x701e, 0x9005, 0x1108, 0x701a, 0x012e, 0x0005, 0x0005,
-	0x0126, 0x2091, 0x8000, 0x701c, 0x904d, 0x0160, 0x7010, 0x8001,
-	0x7012, 0xa800, 0x701e, 0x9005, 0x1108, 0x701a, 0x012e, 0x080c,
-	0x101d, 0x0005, 0x012e, 0x0005, 0x2091, 0x8000, 0x0e04, 0x6bbe,
-	0x0006, 0x0016, 0x2001, 0x8004, 0x0006, 0x0804, 0x0dbd, 0x0096,
-	0x00f6, 0x2079, 0x0050, 0x7044, 0xd084, 0x01e0, 0xc084, 0x7046,
-	0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836,
-	0x6833, 0x0013, 0x00de, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
-	0xd084, 0x190c, 0x1187, 0x2009, 0x1919, 0x200b, 0x0000, 0x00fe,
-	0x009e, 0x0005, 0x782c, 0x9094, 0x0780, 0x1971, 0xd0a4, 0x0db8,
-	0x2009, 0x1919, 0x2104, 0x8000, 0x200a, 0x9082, 0x000f, 0x0e78,
-	0x00e6, 0x2071, 0x1800, 0x7824, 0x00e6, 0x2071, 0x0040, 0x712c,
-	0xd19c, 0x1148, 0x2009, 0x182f, 0x210c, 0x918a, 0x0040, 0x0218,
-	0x7022, 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c, 0xa802, 0x2900,
-	0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x7f35, 0x782c, 0x9094,
-	0x0780, 0x190c, 0x6bbc, 0xd0a4, 0x19f0, 0x7838, 0x7938, 0x910e,
-	0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de,
-	0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1187,
-	0x2009, 0x1919, 0x200b, 0x0000, 0x00ee, 0x00fe, 0x009e, 0x0005,
-	0x00f6, 0x2079, 0x0050, 0x7044, 0xd084, 0x01b8, 0xc084, 0x7046,
-	0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836,
-	0x6833, 0x0013, 0x00de, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
-	0xd084, 0x190c, 0x1187, 0x00fe, 0x0005, 0x782c, 0x9094, 0x0780,
-	0x190c, 0x6bbc, 0xd0a4, 0x0db8, 0x00e6, 0x2071, 0x1800, 0x7824,
-	0x2048, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be,
-	0x080c, 0x7f35, 0x782c, 0x9094, 0x0780, 0x190c, 0x6bbc, 0xd0a4,
-	0x1d70, 0x00d6, 0x2069, 0x0050, 0x693c, 0x2069, 0x191a, 0x6808,
-	0x690a, 0x2069, 0x19cb, 0x9102, 0x1118, 0x683c, 0x9005, 0x1328,
-	0x2001, 0x191b, 0x200c, 0x810d, 0x693e, 0x00de, 0x00ee, 0x00fe,
-	0x0005, 0x7094, 0x908a, 0x0029, 0x1a0c, 0x0db4, 0x9082, 0x001d,
-	0x001b, 0x6027, 0x1e00, 0x0005, 0x6d5c, 0x6ce6, 0x6d02, 0x6d2a,
-	0x6d4b, 0x6d8b, 0x6d9d, 0x6d02, 0x6d73, 0x6ca1, 0x6ccf, 0x6ca0,
-	0x0005, 0x00d6, 0x2069, 0x0200, 0x6804, 0x9005, 0x1180, 0x6808,
-	0x9005, 0x1518, 0x7097, 0x0028, 0x2069, 0x1960, 0x2d04, 0x7002,
-	0x080c, 0x70e0, 0x6028, 0x9085, 0x0600, 0x602a, 0x00b0, 0x7097,
-	0x0028, 0x2069, 0x1960, 0x2d04, 0x7002, 0x6028, 0x9085, 0x0600,
-	0x602a, 0x00e6, 0x0036, 0x0046, 0x0056, 0x2071, 0x1a33, 0x080c,
-	0x1958, 0x005e, 0x004e, 0x003e, 0x00ee, 0x00de, 0x0005, 0x00d6,
-	0x2069, 0x0200, 0x6804, 0x9005, 0x1178, 0x6808, 0x9005, 0x1160,
-	0x7097, 0x0028, 0x2069, 0x1960, 0x2d04, 0x7002, 0x080c, 0x717a,
-	0x6028, 0x9085, 0x0600, 0x602a, 0x00de, 0x0005, 0x0006, 0x2001,
-	0x0090, 0x080c, 0x2b14, 0x000e, 0x6124, 0xd1e4, 0x1190, 0x080c,
-	0x6e0a, 0xd1d4, 0x1160, 0xd1dc, 0x1138, 0xd1cc, 0x0150, 0x7097,
-	0x0020, 0x080c, 0x6e0a, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097,
-	0x001f, 0x0005, 0x2001, 0x0088, 0x080c, 0x2b14, 0x6124, 0xd1cc,
-	0x11d8, 0xd1dc, 0x11b0, 0xd1e4, 0x1188, 0x9184, 0x1e00, 0x11c8,
-	0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c, 0x6fd3, 0x2001,
-	0x0080, 0x080c, 0x2b14, 0x7097, 0x0028, 0x0058, 0x7097, 0x001e,
-	0x0040, 0x7097, 0x001d, 0x0028, 0x7097, 0x0020, 0x0010, 0x7097,
-	0x001f, 0x0005, 0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c,
-	0x6fd3, 0x2001, 0x0080, 0x080c, 0x2b14, 0x6124, 0xd1d4, 0x1180,
-	0xd1dc, 0x1158, 0xd1e4, 0x1130, 0x9184, 0x1e00, 0x1158, 0x7097,
-	0x0028, 0x0040, 0x7097, 0x001e, 0x0028, 0x7097, 0x001d, 0x0010,
-	0x7097, 0x001f, 0x0005, 0x2001, 0x00a0, 0x080c, 0x2b14, 0x6124,
-	0xd1dc, 0x1138, 0xd1e4, 0x0138, 0x080c, 0x1982, 0x7097, 0x001e,
-	0x0010, 0x7097, 0x001d, 0x0005, 0x080c, 0x6e8d, 0x6124, 0xd1dc,
-	0x1188, 0x080c, 0x6e0a, 0x0016, 0x080c, 0x1982, 0x001e, 0xd1d4,
-	0x1128, 0xd1e4, 0x0138, 0x7097, 0x001e, 0x0020, 0x7097, 0x001f,
-	0x080c, 0x6e0a, 0x0005, 0x0006, 0x2001, 0x00a0, 0x080c, 0x2b14,
-	0x000e, 0x6124, 0xd1d4, 0x1160, 0xd1cc, 0x1150, 0xd1dc, 0x1128,
-	0xd1e4, 0x0140, 0x7097, 0x001e, 0x0028, 0x7097, 0x001d, 0x0010,
-	0x7097, 0x0021, 0x0005, 0x080c, 0x6e8d, 0x6124, 0xd1d4, 0x1150,
-	0xd1dc, 0x1128, 0xd1e4, 0x0140, 0x7097, 0x001e, 0x0028, 0x7097,
-	0x001d, 0x0010, 0x7097, 0x001f, 0x0005, 0x0006, 0x2001, 0x0090,
-	0x080c, 0x2b14, 0x000e, 0x6124, 0xd1d4, 0x1178, 0xd1cc, 0x1150,
-	0xd1dc, 0x1128, 0xd1e4, 0x0158, 0x7097, 0x001e, 0x0040, 0x7097,
-	0x001d, 0x0028, 0x7097, 0x0020, 0x0010, 0x7097, 0x001f, 0x0005,
-	0x0016, 0x00c6, 0x00d6, 0x00e6, 0x0126, 0x2061, 0x0100, 0x2069,
-	0x0140, 0x2071, 0x1800, 0x2091, 0x8000, 0x080c, 0x6fa7, 0x11d8,
-	0x2001, 0x180c, 0x200c, 0xd1b4, 0x01b0, 0xc1b4, 0x2102, 0x6027,
-	0x0200, 0x080c, 0x2a5d, 0x6024, 0xd0cc, 0x0148, 0x2001, 0x00a0,
-	0x080c, 0x2b14, 0x080c, 0x728b, 0x080c, 0x5cca, 0x0428, 0x6028,
-	0xc0cd, 0x602a, 0x0408, 0x080c, 0x6fc1, 0x0150, 0x080c, 0x6fb8,
-	0x1138, 0x2001, 0x0001, 0x080c, 0x260c, 0x080c, 0x6f7f, 0x00a0,
-	0x080c, 0x6e8a, 0x0178, 0x2001, 0x0001, 0x080c, 0x260c, 0x7094,
-	0x9086, 0x001e, 0x0120, 0x7094, 0x9086, 0x0022, 0x1118, 0x7097,
-	0x0025, 0x0010, 0x7097, 0x0021, 0x012e, 0x00ee, 0x00de, 0x00ce,
-	0x001e, 0x0005, 0x0026, 0x2011, 0x6e1b, 0x080c, 0x80e4, 0x002e,
-	0x0016, 0x0026, 0x2009, 0x0064, 0x2011, 0x6e1b, 0x080c, 0x80db,
-	0x002e, 0x001e, 0x0005, 0x00e6, 0x00f6, 0x0016, 0x080c, 0x9393,
-	0x2071, 0x1800, 0x080c, 0x6db8, 0x001e, 0x00fe, 0x00ee, 0x0005,
-	0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0126,
-	0x080c, 0x9393, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800,
-	0x2091, 0x8000, 0x6028, 0xc09c, 0x602a, 0x2011, 0x0003, 0x080c,
-	0x9758, 0x2011, 0x0002, 0x080c, 0x9762, 0x080c, 0x9649, 0x080c,
-	0x8090, 0x0036, 0x901e, 0x080c, 0x96bf, 0x003e, 0x60e3, 0x0000,
-	0x080c, 0xd894, 0x080c, 0xd8af, 0x2009, 0x0004, 0x080c, 0x2a63,
-	0x080c, 0x297e, 0x2001, 0x1800, 0x2003, 0x0004, 0x6027, 0x0008,
-	0x2011, 0x6e1b, 0x080c, 0x80e4, 0x080c, 0x6fc1, 0x0118, 0x9006,
-	0x080c, 0x2b14, 0x080c, 0x0b8f, 0x2001, 0x0001, 0x080c, 0x260c,
-	0x012e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e,
-	0x0005, 0x0026, 0x00e6, 0x2011, 0x6e28, 0x2071, 0x19cb, 0x701c,
-	0x9206, 0x1118, 0x7018, 0x9005, 0x0110, 0x9085, 0x0001, 0x00ee,
-	0x002e, 0x0005, 0x6020, 0xd09c, 0x0005, 0x6800, 0x9084, 0xfffe,
-	0x9086, 0x00c0, 0x01b8, 0x2001, 0x00c0, 0x080c, 0x2b14, 0x0156,
-	0x20a9, 0x002d, 0x1d04, 0x6e9a, 0x2091, 0x6000, 0x1f04, 0x6e9a,
-	0x015e, 0x00d6, 0x2069, 0x1800, 0x6898, 0x8001, 0x0220, 0x0118,
-	0x689a, 0x00de, 0x0005, 0x689b, 0x0014, 0x68e4, 0xd0dc, 0x0dc8,
-	0x6800, 0x9086, 0x0001, 0x1da8, 0x080c, 0x80f0, 0x0c90, 0x00c6,
-	0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800,
-	0x080c, 0x729a, 0x2001, 0x193e, 0x2003, 0x0000, 0x9006, 0x7096,
-	0x60e2, 0x6886, 0x080c, 0x26d7, 0x9006, 0x080c, 0x2b14, 0x080c,
-	0x5b89, 0x6027, 0xffff, 0x602b, 0x182f, 0x00ee, 0x00de, 0x00ce,
-	0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140,
-	0x2071, 0x1800, 0x2001, 0x194e, 0x200c, 0x9186, 0x0000, 0x0158,
-	0x9186, 0x0001, 0x0158, 0x9186, 0x0002, 0x0158, 0x9186, 0x0003,
-	0x0158, 0x0804, 0x6f6f, 0x7097, 0x0022, 0x0040, 0x7097, 0x0021,
-	0x0028, 0x7097, 0x0023, 0x0010, 0x7097, 0x0024, 0x60e3, 0x0000,
-	0x6887, 0x0001, 0x2001, 0x0001, 0x080c, 0x26d7, 0x0026, 0x080c,
-	0x9d9f, 0x002e, 0x7000, 0x908e, 0x0004, 0x0118, 0x602b, 0x0028,
-	0x0010, 0x602b, 0x0020, 0x0156, 0x0126, 0x2091, 0x8000, 0x20a9,
-	0x0005, 0x6024, 0xd0ac, 0x0150, 0x012e, 0x015e, 0x080c, 0xc1f9,
-	0x0118, 0x9006, 0x080c, 0x2b3e, 0x0804, 0x6f7b, 0x6800, 0x9084,
-	0x00a1, 0xc0bd, 0x6802, 0x080c, 0x2a5d, 0x6904, 0xd1d4, 0x1140,
-	0x2001, 0x0100, 0x080c, 0x2b14, 0x1f04, 0x6f19, 0x080c, 0x6ffe,
-	0x012e, 0x015e, 0x080c, 0x6fb8, 0x01a8, 0x6044, 0x9005, 0x0168,
-	0x6050, 0x0006, 0x9085, 0x0020, 0x6052, 0x080c, 0x6ffe, 0x9006,
-	0x8001, 0x1df0, 0x000e, 0x6052, 0x0028, 0x6804, 0xd0d4, 0x1110,
-	0x080c, 0x6ffe, 0x080c, 0xc1f9, 0x0118, 0x9006, 0x080c, 0x2b3e,
-	0x0016, 0x0026, 0x7000, 0x908e, 0x0004, 0x0130, 0x2009, 0x00c8,
-	0x2011, 0x6e28, 0x080c, 0x80a2, 0x002e, 0x001e, 0x080c, 0x7f2c,
-	0x7034, 0xc085, 0x7036, 0x2001, 0x194e, 0x2003, 0x0004, 0x080c,
-	0x6c89, 0x080c, 0x6fb8, 0x0138, 0x6804, 0xd0d4, 0x1120, 0xd0dc,
-	0x1100, 0x080c, 0x7290, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6,
-	0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800,
-	0x080c, 0x7f43, 0x080c, 0x7f35, 0x080c, 0x729a, 0x2001, 0x193e,
-	0x2003, 0x0000, 0x9006, 0x7096, 0x60e2, 0x6886, 0x080c, 0x26d7,
-	0x9006, 0x080c, 0x2b14, 0x6043, 0x0090, 0x6043, 0x0010, 0x6027,
-	0xffff, 0x602b, 0x182f, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x0006,
-	0x2001, 0x194d, 0x2004, 0x9086, 0xaaaa, 0x000e, 0x0005, 0x0006,
-	0x080c, 0x5383, 0x9084, 0x0030, 0x9086, 0x0000, 0x000e, 0x0005,
-	0x0006, 0x080c, 0x5383, 0x9084, 0x0030, 0x9086, 0x0030, 0x000e,
-	0x0005, 0x0006, 0x080c, 0x5383, 0x9084, 0x0030, 0x9086, 0x0010,
-	0x000e, 0x0005, 0x0006, 0x080c, 0x5383, 0x9084, 0x0030, 0x9086,
-	0x0020, 0x000e, 0x0005, 0x0036, 0x0016, 0x2001, 0x180c, 0x2004,
-	0x908c, 0x0013, 0x0180, 0x0020, 0x080c, 0x26f7, 0x900e, 0x0028,
-	0x080c, 0x6553, 0x1dc8, 0x2009, 0x0002, 0x2019, 0x0028, 0x080c,
-	0x2fa2, 0x9006, 0x0019, 0x001e, 0x003e, 0x0005, 0x00e6, 0x2071,
-	0x180c, 0x2e04, 0x0130, 0x080c, 0xc1f2, 0x1128, 0x9085, 0x0010,
-	0x0010, 0x9084, 0xffef, 0x2072, 0x00ee, 0x0005, 0x6050, 0x0006,
-	0x60ec, 0x0006, 0x600c, 0x0006, 0x6004, 0x0006, 0x6028, 0x0006,
-	0x0016, 0x6138, 0x6050, 0x9084, 0xfbff, 0x9085, 0x2000, 0x6052,
-	0x613a, 0x20a9, 0x0012, 0x1d04, 0x7013, 0x2091, 0x6000, 0x1f04,
-	0x7013, 0x602f, 0x0100, 0x602f, 0x0000, 0x6050, 0x9085, 0x0400,
-	0x9084, 0xdfff, 0x6052, 0x613a, 0x001e, 0x602f, 0x0040, 0x602f,
-	0x0000, 0x000e, 0x602a, 0x000e, 0x6006, 0x000e, 0x600e, 0x000e,
-	0x60ee, 0x60e3, 0x0000, 0x6887, 0x0001, 0x2001, 0x0001, 0x080c,
-	0x26d7, 0x2001, 0x00a0, 0x0006, 0x080c, 0xc1f9, 0x000e, 0x0130,
-	0x080c, 0x2b32, 0x9006, 0x080c, 0x2b3e, 0x0010, 0x080c, 0x2b14,
-	0x000e, 0x6052, 0x6050, 0x0006, 0xc0e5, 0x6052, 0x00f6, 0x2079,
-	0x0100, 0x080c, 0x29d2, 0x00fe, 0x000e, 0x6052, 0x0005, 0x0156,
-	0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100,
-	0x2069, 0x0140, 0x2071, 0x1800, 0x6020, 0x9084, 0x0080, 0x0138,
-	0x2001, 0x180c, 0x200c, 0xc1c5, 0x2102, 0x0804, 0x70d2, 0x2001,
-	0x180c, 0x200c, 0xc1c4, 0x2102, 0x6028, 0x9084, 0xe1ff, 0x602a,
-	0x6027, 0x0200, 0x2001, 0x0090, 0x080c, 0x2b14, 0x20a9, 0x0366,
-	0x6024, 0xd0cc, 0x1518, 0x1d04, 0x7080, 0x2091, 0x6000, 0x1f04,
-	0x7080, 0x2011, 0x0003, 0x080c, 0x9758, 0x2011, 0x0002, 0x080c,
-	0x9762, 0x080c, 0x9649, 0x901e, 0x080c, 0x96bf, 0x2001, 0x00a0,
-	0x080c, 0x2b14, 0x080c, 0x728b, 0x080c, 0x5cca, 0x080c, 0xc1f9,
-	0x0110, 0x080c, 0x0d22, 0x9085, 0x0001, 0x0490, 0x86ff, 0x1110,
-	0x080c, 0x1982, 0x60e3, 0x0000, 0x2001, 0x0002, 0x080c, 0x26d7,
-	0x60e2, 0x2001, 0x0080, 0x080c, 0x2b14, 0x20a9, 0x0366, 0x6027,
-	0x1e00, 0x2009, 0x1e00, 0x080c, 0x2a5d, 0x6024, 0x910c, 0x0138,
-	0x1d04, 0x70b7, 0x2091, 0x6000, 0x1f04, 0x70b7, 0x0810, 0x6028,
-	0x9085, 0x1e00, 0x602a, 0x70b0, 0x9005, 0x1118, 0x6887, 0x0001,
-	0x0008, 0x6886, 0x080c, 0xc1f9, 0x0110, 0x080c, 0x0d22, 0x9006,
-	0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005,
-	0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061,
-	0x0100, 0x2071, 0x1800, 0x7000, 0x9086, 0x0003, 0x1168, 0x2001,
-	0x020b, 0x2004, 0x9084, 0x5540, 0x9086, 0x5540, 0x1128, 0x2069,
-	0x1a49, 0x2d04, 0x8000, 0x206a, 0x2069, 0x0140, 0x6020, 0x9084,
-	0x00c0, 0x0120, 0x6884, 0x9005, 0x1904, 0x7145, 0x2001, 0x0088,
-	0x080c, 0x2b14, 0x9006, 0x60e2, 0x6886, 0x080c, 0x26d7, 0x2069,
-	0x0200, 0x6804, 0x9005, 0x1118, 0x6808, 0x9005, 0x01c0, 0x6028,
-	0x9084, 0xfbff, 0x602a, 0x6027, 0x0400, 0x2069, 0x1960, 0x7000,
-	0x206a, 0x7097, 0x0026, 0x7003, 0x0001, 0x20a9, 0x0002, 0x1d04,
-	0x7127, 0x2091, 0x6000, 0x1f04, 0x7127, 0x0804, 0x7172, 0x2069,
-	0x0140, 0x20a9, 0x0384, 0x6027, 0x1e00, 0x2009, 0x1e00, 0x080c,
-	0x2a5d, 0x6024, 0x910c, 0x0508, 0x9084, 0x1a00, 0x11f0, 0x1d04,
-	0x7133, 0x2091, 0x6000, 0x1f04, 0x7133, 0x2011, 0x0003, 0x080c,
-	0x9758, 0x2011, 0x0002, 0x080c, 0x9762, 0x080c, 0x9649, 0x901e,
-	0x080c, 0x96bf, 0x2001, 0x00a0, 0x080c, 0x2b14, 0x080c, 0x728b,
-	0x080c, 0x5cca, 0x9085, 0x0001, 0x00a8, 0x2001, 0x0080, 0x080c,
-	0x2b14, 0x2069, 0x0140, 0x60e3, 0x0000, 0x70b0, 0x9005, 0x1118,
-	0x6887, 0x0001, 0x0008, 0x6886, 0x2001, 0x0002, 0x080c, 0x26d7,
-	0x60e2, 0x9006, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e,
-	0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6,
-	0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, 0x6020, 0x9084, 0x00c0,
-	0x01c8, 0x2011, 0x0003, 0x080c, 0x9758, 0x2011, 0x0002, 0x080c,
-	0x9762, 0x080c, 0x9649, 0x901e, 0x080c, 0x96bf, 0x2069, 0x0140,
-	0x2001, 0x00a0, 0x080c, 0x2b14, 0x080c, 0x728b, 0x080c, 0x5cca,
-	0x0804, 0x720c, 0x2001, 0x180c, 0x200c, 0xd1b4, 0x1160, 0xc1b5,
-	0x2102, 0x080c, 0x6e10, 0x2069, 0x0140, 0x2001, 0x0080, 0x080c,
-	0x2b14, 0x60e3, 0x0000, 0x2069, 0x0200, 0x6804, 0x9005, 0x1118,
-	0x6808, 0x9005, 0x0180, 0x6028, 0x9084, 0xfdff, 0x602a, 0x6027,
-	0x0200, 0x2069, 0x1960, 0x7000, 0x206a, 0x7097, 0x0027, 0x7003,
-	0x0001, 0x0804, 0x720c, 0x6027, 0x1e00, 0x2009, 0x1e00, 0x080c,
-	0x2a5d, 0x6024, 0x910c, 0x01c8, 0x9084, 0x1c00, 0x11b0, 0x1d04,
-	0x71cb, 0x0006, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x080c, 0x7f74,
-	0x00ee, 0x00de, 0x00ce, 0x001e, 0x000e, 0x00e6, 0x2071, 0x19cb,
-	0x7018, 0x00ee, 0x9005, 0x19f8, 0x01f8, 0x0026, 0x2011, 0x6e28,
-	0x080c, 0x8010, 0x2011, 0x6e1b, 0x080c, 0x80e4, 0x002e, 0x2069,
-	0x0140, 0x60e3, 0x0000, 0x70b0, 0x9005, 0x1118, 0x6887, 0x0001,
-	0x0008, 0x6886, 0x2001, 0x0002, 0x080c, 0x26d7, 0x60e2, 0x2001,
-	0x180c, 0x200c, 0xc1b4, 0x2102, 0x00ee, 0x00de, 0x00ce, 0x003e,
-	0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036,
-	0x0046, 0x00c6, 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, 0x080c,
-	0xc1f2, 0x1904, 0x7279, 0x7130, 0xd184, 0x1170, 0x080c, 0x312c,
-	0x0138, 0xc18d, 0x7132, 0x2011, 0x1854, 0x2214, 0xd2ac, 0x1120,
-	0x7030, 0xd08c, 0x0904, 0x7279, 0x2011, 0x1854, 0x220c, 0x0438,
-	0x0016, 0x2019, 0x000e, 0x080c, 0xd486, 0x0156, 0x00b6, 0x20a9,
-	0x007f, 0x900e, 0x9186, 0x007e, 0x01a0, 0x9186, 0x0080, 0x0188,
-	0x080c, 0x6237, 0x1170, 0x2120, 0x9006, 0x0016, 0x2009, 0x000e,
-	0x080c, 0xd50a, 0x2009, 0x0001, 0x2011, 0x0100, 0x080c, 0x8207,
-	0x001e, 0x8108, 0x1f04, 0x7242, 0x00be, 0x015e, 0x001e, 0xd1ac,
-	0x1148, 0x0016, 0x2009, 0x0002, 0x2019, 0x0004, 0x080c, 0x2fa2,
-	0x001e, 0x0078, 0x0156, 0x00b6, 0x20a9, 0x007f, 0x900e, 0x080c,
-	0x6237, 0x1110, 0x080c, 0x5ce4, 0x8108, 0x1f04, 0x726f, 0x00be,
-	0x015e, 0x080c, 0x1982, 0x080c, 0x9d9f, 0x60e3, 0x0000, 0x080c,
-	0x5cca, 0x080c, 0x6ed9, 0x00ee, 0x00ce, 0x004e, 0x003e, 0x002e,
-	0x001e, 0x015e, 0x0005, 0x2001, 0x194e, 0x2003, 0x0001, 0x0005,
-	0x2001, 0x194e, 0x2003, 0x0000, 0x0005, 0x2001, 0x194d, 0x2003,
-	0xaaaa, 0x0005, 0x2001, 0x194d, 0x2003, 0x0000, 0x0005, 0x2071,
-	0x18f0, 0x7003, 0x0000, 0x7007, 0x0000, 0x080c, 0x1004, 0x090c,
-	0x0db4, 0xa8ab, 0xdcb0, 0x2900, 0x704e, 0x080c, 0x1004, 0x090c,
-	0x0db4, 0xa8ab, 0xdcb0, 0x2900, 0x7052, 0xa867, 0x0000, 0xa86b,
-	0x0001, 0xa89f, 0x0000, 0x0005, 0x00e6, 0x2071, 0x0040, 0x6848,
-	0x9005, 0x1118, 0x9085, 0x0001, 0x04b0, 0x6840, 0x9005, 0x0150,
-	0x04a1, 0x6a50, 0x9200, 0x7002, 0x6854, 0x9101, 0x7006, 0x9006,
-	0x7012, 0x7016, 0x6850, 0x7002, 0x6854, 0x7006, 0x6858, 0x700a,
-	0x685c, 0x700e, 0x6840, 0x9005, 0x1110, 0x7012, 0x7016, 0x6848,
-	0x701a, 0x701c, 0x9085, 0x0040, 0x701e, 0x2001, 0x0019, 0x7036,
-	0x702b, 0x0001, 0x2001, 0x0004, 0x200c, 0x918c, 0xfff7, 0x918d,
-	0x8000, 0x2102, 0x00d6, 0x2069, 0x18f0, 0x6807, 0x0001, 0x00de,
-	0x080c, 0x788c, 0x9006, 0x00ee, 0x0005, 0x900e, 0x0156, 0x20a9,
-	0x0006, 0x8003, 0x2011, 0x0100, 0x2214, 0x9296, 0x0008, 0x1110,
-	0x818d, 0x0010, 0x81f5, 0x3e08, 0x1f04, 0x7301, 0x015e, 0x0005,
-	0x2079, 0x0040, 0x2071, 0x18f0, 0x7004, 0x0002, 0x7320, 0x7321,
-	0x7358, 0x73b3, 0x74f4, 0x731e, 0x731e, 0x751e, 0x080c, 0x0db4,
-	0x0005, 0x2079, 0x0040, 0x782c, 0x908c, 0x0780, 0x190c, 0x7918,
-	0xd0a4, 0x01f0, 0x7824, 0x2048, 0x9006, 0xa802, 0xa806, 0xa864,
-	0x9084, 0x00ff, 0x908a, 0x0040, 0x0608, 0x00b8, 0x2001, 0x1800,
-	0x200c, 0x9186, 0x0003, 0x1160, 0x7104, 0x9186, 0x0004, 0x0140,
-	0x9186, 0x0007, 0x0128, 0x9186, 0x0003, 0x19e8, 0x080c, 0x73b3,
-	0x782c, 0xd09c, 0x090c, 0x788c, 0x0005, 0x9082, 0x005a, 0x1218,
-	0x2100, 0x003b, 0x0c18, 0x080c, 0x73e9, 0x0c90, 0x00e3, 0x08f0,
-	0x0005, 0x73e9, 0x73e9, 0x73e9, 0x73e9, 0x73e9, 0x73e9, 0x73e9,
-	0x73e9, 0x740b, 0x73e9, 0x73e9, 0x73e9, 0x73e9, 0x73e9, 0x73e9,
-	0x73e9, 0x73e9, 0x73e9, 0x73e9, 0x73e9, 0x73e9, 0x73e9, 0x73e9,
-	0x73e9, 0x73e9, 0x73e9, 0x73e9, 0x73e9, 0x73f5, 0x73e9, 0x75f3,
-	0x73e9, 0x73e9, 0x73e9, 0x740b, 0x73e9, 0x73f5, 0x7634, 0x7675,
-	0x76bc, 0x76d0, 0x73e9, 0x73e9, 0x740b, 0x73f5, 0x73e9, 0x73e9,
-	0x74c8, 0x777b, 0x7796, 0x73e9, 0x740b, 0x73e9, 0x73e9, 0x73e9,
-	0x73e9, 0x74be, 0x7796, 0x73e9, 0x73e9, 0x73e9, 0x73e9, 0x73e9,
-	0x73e9, 0x73e9, 0x73e9, 0x73e9, 0x741f, 0x73e9, 0x73e9, 0x73e9,
-	0x73e9, 0x73e9, 0x73e9, 0x73e9, 0x73e9, 0x73e9, 0x78bc, 0x73e9,
-	0x73e9, 0x73e9, 0x73e9, 0x73e9, 0x7433, 0x73e9, 0x73e9, 0x73e9,
-	0x73e9, 0x73e9, 0x73e9, 0x2079, 0x0040, 0x7004, 0x9086, 0x0003,
-	0x1198, 0x782c, 0x080c, 0x78b5, 0xd0a4, 0x0170, 0x7824, 0x2048,
-	0x9006, 0xa802, 0xa806, 0xa864, 0x9084, 0x00ff, 0x908a, 0x001a,
-	0x1210, 0x002b, 0x0c50, 0x00e9, 0x080c, 0x788c, 0x0005, 0x73e9,
-	0x73f5, 0x75df, 0x73e9, 0x73f5, 0x73e9, 0x73f5, 0x73f5, 0x73e9,
-	0x73f5, 0x75df, 0x73f5, 0x73f5, 0x73f5, 0x73f5, 0x73f5, 0x73e9,
-	0x73f5, 0x75df, 0x73e9, 0x73e9, 0x73f5, 0x73e9, 0x73e9, 0x73e9,
-	0x73f5, 0x00e6, 0x2071, 0x18f0, 0x2009, 0x0400, 0x0071, 0x00ee,
-	0x0005, 0x2009, 0x1000, 0x0049, 0x0005, 0x2009, 0x2000, 0x0029,
-	0x0005, 0x2009, 0x0800, 0x0009, 0x0005, 0x7007, 0x0001, 0xa868,
-	0x9084, 0x00ff, 0x9105, 0xa86a, 0x0126, 0x2091, 0x8000, 0x080c,
-	0x6885, 0x012e, 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff, 0x0d08,
-	0x8001, 0x1120, 0x7007, 0x0001, 0x0804, 0x759d, 0x7007, 0x0003,
-	0x7012, 0x2900, 0x7016, 0x701a, 0x704b, 0x759d, 0x0005, 0xa864,
-	0x8007, 0x9084, 0x00ff, 0x0968, 0x8001, 0x1120, 0x7007, 0x0001,
-	0x0804, 0x75b8, 0x7007, 0x0003, 0x7012, 0x2900, 0x7016, 0x701a,
-	0x704b, 0x75b8, 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff, 0x9086,
-	0x0001, 0x1904, 0x73f1, 0x7007, 0x0001, 0x2009, 0x1833, 0x210c,
-	0x81ff, 0x1904, 0x7495, 0xa994, 0x9186, 0x006f, 0x0188, 0x9186,
-	0x0074, 0x15b0, 0x0026, 0x2011, 0x0010, 0x080c, 0x657f, 0x002e,
-	0x0578, 0x0016, 0xa998, 0x080c, 0x65c9, 0x001e, 0x1548, 0x0400,
-	0x080c, 0x6fa7, 0x0140, 0xa897, 0x4005, 0xa89b, 0x0016, 0x2001,
-	0x0030, 0x900e, 0x0438, 0x0026, 0x2011, 0x8008, 0x080c, 0x657f,
-	0x002e, 0x01b0, 0x0016, 0x0026, 0x0036, 0xa998, 0xaaa0, 0xab9c,
-	0x918d, 0x8000, 0x080c, 0x65c9, 0x003e, 0x002e, 0x001e, 0x1140,
-	0xa897, 0x4005, 0xa89b, 0x4009, 0x2001, 0x0030, 0x900e, 0x0050,
-	0xa868, 0x9084, 0x00ff, 0xa86a, 0xa883, 0x0000, 0x080c, 0x5ef9,
-	0x1108, 0x0005, 0x0126, 0x2091, 0x8000, 0xa867, 0x0139, 0xa87a,
-	0xa982, 0x080c, 0x6885, 0x012e, 0x0ca0, 0xa994, 0x9186, 0x0071,
-	0x0904, 0x7443, 0x9186, 0x0064, 0x0904, 0x7443, 0x9186, 0x007c,
-	0x0904, 0x7443, 0x9186, 0x0028, 0x0904, 0x7443, 0x9186, 0x0038,
-	0x0904, 0x7443, 0x9186, 0x0078, 0x0904, 0x7443, 0x9186, 0x005f,
-	0x0904, 0x7443, 0x9186, 0x0056, 0x0904, 0x7443, 0xa897, 0x4005,
-	0xa89b, 0x0001, 0x2001, 0x0030, 0x900e, 0x0860, 0xa87c, 0x9084,
-	0x00c0, 0x9086, 0x00c0, 0x1120, 0x7007, 0x0001, 0x0804, 0x77ad,
-	0x2900, 0x7016, 0x701a, 0x20a9, 0x0004, 0xa860, 0x20e0, 0xa85c,
-	0x9080, 0x0030, 0x2098, 0x7050, 0x2040, 0xa060, 0x20e8, 0xa05c,
-	0x9080, 0x0023, 0x20a0, 0x4003, 0xa888, 0x7012, 0x9082, 0x0401,
-	0x1a04, 0x73f9, 0xaab4, 0x928a, 0x0002, 0x1a04, 0x73f9, 0x82ff,
-	0x1138, 0xa8b8, 0xa9bc, 0x9105, 0x0118, 0x2001, 0x755b, 0x0018,
-	0x9280, 0x7551, 0x2005, 0x7056, 0x7010, 0x9015, 0x0904, 0x753c,
-	0x080c, 0x1004, 0x1118, 0x7007, 0x0004, 0x0005, 0x2900, 0x7022,
-	0x7054, 0x2060, 0xe000, 0xa866, 0x7050, 0x2040, 0xa95c, 0xe004,
-	0x9100, 0xa076, 0xa860, 0xa072, 0xe008, 0x920a, 0x1210, 0x900e,
-	0x2200, 0x7112, 0xe20c, 0x8003, 0x800b, 0x9296, 0x0004, 0x0108,
-	0x9108, 0xa17a, 0x810b, 0xa17e, 0x080c, 0x10d5, 0xa06c, 0x908e,
-	0x0100, 0x0170, 0x9086, 0x0200, 0x0118, 0x7007, 0x0007, 0x0005,
-	0x7020, 0x2048, 0x080c, 0x101d, 0x7014, 0x2048, 0x0804, 0x73f9,
-	0x7020, 0x2048, 0x7018, 0xa802, 0xa807, 0x0000, 0x2908, 0x2048,
-	0xa906, 0x711a, 0x0804, 0x74f4, 0x7014, 0x2048, 0x7007, 0x0001,
-	0xa8b4, 0x9005, 0x1128, 0xa8b8, 0xa9bc, 0x9105, 0x0108, 0x00b9,
-	0xa864, 0x9084, 0x00ff, 0x9086, 0x001e, 0x0904, 0x77ad, 0x0804,
-	0x759d, 0x7553, 0x7557, 0x0002, 0x001d, 0x0007, 0x0004, 0x000a,
-	0x001b, 0x0005, 0x0006, 0x000a, 0x001d, 0x0005, 0x0004, 0x0076,
-	0x0066, 0xafb8, 0xaebc, 0xa804, 0x2050, 0xb0c0, 0xb0e2, 0xb0bc,
-	0xb0de, 0xb0b8, 0xb0d2, 0xb0b4, 0xb0ce, 0xb6da, 0xb7d6, 0xb0b0,
-	0xb0ca, 0xb0ac, 0xb0c6, 0xb0a8, 0xb0ba, 0xb0a4, 0xb0b6, 0xb6c2,
-	0xb7be, 0xb0a0, 0xb0b2, 0xb09c, 0xb0ae, 0xb098, 0xb0a2, 0xb094,
-	0xb09e, 0xb6aa, 0xb7a6, 0xb090, 0xb09a, 0xb08c, 0xb096, 0xb088,
-	0xb08a, 0xb084, 0xb086, 0xb692, 0xb78e, 0xb080, 0xb082, 0xb07c,
-	0xb07e, 0xb078, 0xb072, 0xb074, 0xb06e, 0xb67a, 0xb776, 0xb004,
-	0x9055, 0x1958, 0x006e, 0x007e, 0x0005, 0x2009, 0x1833, 0x210c,
-	0x81ff, 0x1178, 0x080c, 0x5d46, 0x1108, 0x0005, 0x080c, 0x6abf,
-	0x0126, 0x2091, 0x8000, 0x080c, 0xbded, 0x080c, 0x6885, 0x012e,
-	0x0ca0, 0x080c, 0xc1f2, 0x1d70, 0x2001, 0x0028, 0x900e, 0x0c70,
-	0x2009, 0x1833, 0x210c, 0x81ff, 0x11d8, 0xa888, 0x9005, 0x01e0,
-	0xa883, 0x0000, 0xa87c, 0xd0f4, 0x0120, 0x080c, 0x5e5b, 0x1138,
-	0x0005, 0x9006, 0xa87a, 0x080c, 0x5dd6, 0x1108, 0x0005, 0x0126,
-	0x2091, 0x8000, 0xa87a, 0xa982, 0x080c, 0x6885, 0x012e, 0x0cb0,
-	0x2001, 0x0028, 0x900e, 0x0c98, 0x2001, 0x0000, 0x0c80, 0x7018,
-	0xa802, 0x2908, 0x2048, 0xa906, 0x711a, 0x7010, 0x8001, 0x7012,
-	0x0118, 0x7007, 0x0003, 0x0030, 0x7014, 0x2048, 0x7007, 0x0001,
-	0x7048, 0x080f, 0x0005, 0x00b6, 0x7007, 0x0001, 0xa974, 0xa878,
-	0x9084, 0x00ff, 0x9096, 0x0004, 0x0540, 0x20a9, 0x0001, 0x9096,
-	0x0001, 0x0190, 0x900e, 0x20a9, 0x0800, 0x9096, 0x0002, 0x0160,
-	0x9005, 0x11d8, 0xa974, 0x080c, 0x6237, 0x11b8, 0x0066, 0xae80,
-	0x080c, 0x6347, 0x006e, 0x0088, 0x0046, 0x2011, 0x180c, 0x2224,
-	0xc484, 0x2412, 0x004e, 0x00c6, 0x080c, 0x6237, 0x1110, 0x080c,
-	0x6447, 0x8108, 0x1f04, 0x761c, 0x00ce, 0xa87c, 0xd084, 0x1120,
-	0x080c, 0x101d, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c,
-	0x6885, 0x012e, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000, 0x7007,
-	0x0001, 0x080c, 0x6557, 0x0580, 0x2061, 0x1a41, 0x6100, 0xd184,
-	0x0178, 0xa888, 0x9084, 0x00ff, 0x1550, 0x6000, 0xd084, 0x0520,
-	0x6004, 0x9005, 0x1538, 0x6003, 0x0000, 0x600b, 0x0000, 0x00c8,
-	0x2011, 0x0001, 0xa890, 0x9005, 0x1110, 0x2001, 0x001e, 0x8000,
-	0x6016, 0xa888, 0x9084, 0x00ff, 0x0178, 0x6006, 0xa888, 0x8007,
-	0x9084, 0x00ff, 0x0148, 0x600a, 0xa888, 0x8000, 0x1108, 0xc28d,
-	0x6202, 0x012e, 0x0804, 0x7876, 0x012e, 0x0804, 0x7870, 0x012e,
-	0x0804, 0x786a, 0x012e, 0x0804, 0x786d, 0x0126, 0x2091, 0x8000,
-	0x7007, 0x0001, 0x080c, 0x6557, 0x05e0, 0x2061, 0x1a41, 0x6000,
-	0xd084, 0x05b8, 0x6204, 0x6308, 0xd08c, 0x1530, 0xac78, 0x9484,
-	0x0003, 0x0170, 0xa988, 0x918c, 0x00ff, 0x8001, 0x1120, 0x2100,
-	0x9210, 0x0620, 0x0028, 0x8001, 0x1508, 0x2100, 0x9212, 0x02f0,
-	0x9484, 0x000c, 0x0188, 0xa988, 0x810f, 0x918c, 0x00ff, 0x9082,
-	0x0004, 0x1120, 0x2100, 0x9318, 0x0288, 0x0030, 0x9082, 0x0004,
-	0x1168, 0x2100, 0x931a, 0x0250, 0xa890, 0x9005, 0x0110, 0x8000,
-	0x6016, 0x6206, 0x630a, 0x012e, 0x0804, 0x7876, 0x012e, 0x0804,
-	0x7873, 0x012e, 0x0804, 0x7870, 0x0126, 0x2091, 0x8000, 0x7007,
-	0x0001, 0x2061, 0x1a41, 0x6300, 0xd38c, 0x1120, 0x6308, 0x8318,
-	0x0220, 0x630a, 0x012e, 0x0804, 0x7884, 0x012e, 0x0804, 0x7873,
-	0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, 0x7007, 0x0001, 0xa87c,
-	0xd0ac, 0x0148, 0x00c6, 0x2061, 0x1a41, 0x6000, 0x9084, 0xfcff,
-	0x6002, 0x00ce, 0x0440, 0xa888, 0x9005, 0x05d8, 0xa88c, 0x9065,
-	0x0598, 0x2001, 0x1833, 0x2004, 0x9005, 0x0118, 0x080c, 0x9e49,
-	0x0068, 0x6017, 0xf400, 0x605b, 0x0000, 0xa97c, 0xd1a4, 0x0110,
-	0xa980, 0x615a, 0x2009, 0x0041, 0x080c, 0x9e93, 0xa988, 0x918c,
-	0xff00, 0x9186, 0x2000, 0x1138, 0x0026, 0x900e, 0x2011, 0xfdff,
-	0x080c, 0x8207, 0x002e, 0xa87c, 0xd0c4, 0x0148, 0x2061, 0x1a41,
-	0x6000, 0xd08c, 0x1120, 0x6008, 0x8000, 0x0208, 0x600a, 0x00ce,
-	0x012e, 0x00be, 0x0804, 0x7876, 0x00ce, 0x012e, 0x00be, 0x0804,
-	0x7870, 0xa984, 0x9186, 0x002e, 0x0d30, 0x9186, 0x002d, 0x0d18,
-	0x9186, 0x0045, 0x0510, 0x9186, 0x002a, 0x1130, 0x2001, 0x180c,
-	0x200c, 0xc194, 0x2102, 0x08b8, 0x9186, 0x0020, 0x0158, 0x9186,
-	0x0029, 0x1d10, 0xa974, 0x080c, 0x6237, 0x1968, 0xb800, 0xc0e4,
-	0xb802, 0x0848, 0xa88c, 0x9065, 0x09b8, 0x6007, 0x0024, 0x2001,
-	0x1957, 0x2004, 0x601a, 0x0804, 0x770b, 0xa88c, 0x9065, 0x0960,
-	0x00e6, 0xa890, 0x9075, 0x2001, 0x1833, 0x2004, 0x9005, 0x0150,
-	0x080c, 0x9e49, 0x8eff, 0x0118, 0x2e60, 0x080c, 0x9e49, 0x00ee,
-	0x0804, 0x770b, 0x6024, 0xc0dc, 0xc0d5, 0x6026, 0x2e60, 0x6007,
-	0x003a, 0xa8a0, 0x9005, 0x0130, 0x6007, 0x003b, 0xa8a4, 0x602e,
-	0xa8a8, 0x6016, 0x6003, 0x0001, 0x080c, 0x83c9, 0x080c, 0x894b,
-	0x00ee, 0x0804, 0x770b, 0x2061, 0x1a41, 0x6000, 0xd084, 0x0190,
-	0xd08c, 0x1904, 0x7884, 0x0126, 0x2091, 0x8000, 0x6204, 0x8210,
-	0x0220, 0x6206, 0x012e, 0x0804, 0x7884, 0x012e, 0xa883, 0x0016,
-	0x0804, 0x787d, 0xa883, 0x0007, 0x0804, 0x787d, 0xa864, 0x8007,
-	0x9084, 0x00ff, 0x0130, 0x8001, 0x1138, 0x7007, 0x0001, 0x0069,
-	0x0005, 0x080c, 0x73f1, 0x0040, 0x7007, 0x0003, 0x7012, 0x2900,
-	0x7016, 0x701a, 0x704b, 0x77ad, 0x0005, 0x00b6, 0x00e6, 0x0126,
-	0x2091, 0x8000, 0x903e, 0x2061, 0x1800, 0x61cc, 0x81ff, 0x1904,
-	0x782f, 0x6130, 0xd194, 0x1904, 0x7859, 0xa878, 0x2070, 0x9e82,
-	0x1cd0, 0x0a04, 0x7823, 0x6064, 0x9e02, 0x1a04, 0x7823, 0x7120,
-	0x9186, 0x0006, 0x1904, 0x7815, 0x7010, 0x905d, 0x0904, 0x782f,
-	0xb800, 0xd0e4, 0x1904, 0x7853, 0x2061, 0x1a41, 0x6100, 0x9184,
-	0x0301, 0x9086, 0x0001, 0x15a0, 0x7024, 0xd0dc, 0x1904, 0x785c,
-	0xa883, 0x0000, 0xa803, 0x0000, 0x2908, 0x7014, 0x9005, 0x1198,
-	0x7116, 0xa87c, 0xd0f4, 0x1904, 0x785f, 0x080c, 0x537f, 0xd09c,
-	0x1118, 0xa87c, 0xc0cc, 0xa87e, 0x2e60, 0x080c, 0x8127, 0x012e,
-	0x00ee, 0x00be, 0x0005, 0x2048, 0xa800, 0x9005, 0x1de0, 0xa902,
-	0x2148, 0xa87c, 0xd0f4, 0x1904, 0x785f, 0x012e, 0x00ee, 0x00be,
-	0x0005, 0x012e, 0x00ee, 0xa883, 0x0006, 0x00be, 0x0804, 0x787d,
-	0xd184, 0x0db8, 0xd1c4, 0x1190, 0x00a0, 0xa974, 0x080c, 0x6237,
-	0x15d0, 0xb800, 0xd0e4, 0x15b8, 0x7120, 0x9186, 0x0007, 0x1118,
-	0xa883, 0x0002, 0x0490, 0xa883, 0x0008, 0x0478, 0xa883, 0x000e,
-	0x0460, 0xa883, 0x0017, 0x0448, 0xa883, 0x0035, 0x0430, 0x080c,
-	0x5383, 0xd0fc, 0x01e8, 0xa878, 0x2070, 0x9e82, 0x1cd0, 0x02c0,
-	0x6064, 0x9e02, 0x12a8, 0x7120, 0x9186, 0x0006, 0x1188, 0x7010,
-	0x905d, 0x0170, 0xb800, 0xd0bc, 0x0158, 0x2039, 0x0001, 0x7000,
-	0x9086, 0x0007, 0x1904, 0x77b9, 0x7003, 0x0002, 0x0804, 0x77b9,
-	0xa883, 0x0028, 0x0010, 0xa883, 0x0029, 0x012e, 0x00ee, 0x00be,
-	0x0420, 0xa883, 0x002a, 0x0cc8, 0xa883, 0x0045, 0x0cb0, 0x2e60,
-	0x2019, 0x0002, 0x601b, 0x0014, 0x080c, 0xd0c7, 0x012e, 0x00ee,
-	0x00be, 0x0005, 0x2009, 0x003e, 0x0058, 0x2009, 0x0004, 0x0040,
-	0x2009, 0x0006, 0x0028, 0x2009, 0x0016, 0x0010, 0x2009, 0x0001,
-	0xa884, 0x9084, 0xff00, 0x9105, 0xa886, 0x0126, 0x2091, 0x8000,
-	0x080c, 0x6885, 0x012e, 0x0005, 0x080c, 0x101d, 0x0005, 0x00d6,
-	0x080c, 0x811e, 0x00de, 0x0005, 0x00d6, 0x00e6, 0x0126, 0x2091,
-	0x8000, 0x2071, 0x0040, 0x702c, 0xd084, 0x01d8, 0x908c, 0x0780,
-	0x190c, 0x7918, 0xd09c, 0x11a8, 0x2071, 0x1800, 0x70bc, 0x90ea,
-	0x0040, 0x0278, 0x8001, 0x70be, 0x702c, 0x2048, 0xa800, 0x702e,
-	0x9006, 0xa802, 0xa806, 0x2071, 0x0040, 0x2900, 0x7022, 0x702c,
-	0x0c28, 0x012e, 0x00ee, 0x00de, 0x0005, 0x0006, 0x9084, 0x0780,
-	0x190c, 0x7918, 0x000e, 0x0005, 0x00d6, 0x00c6, 0x0036, 0x0026,
-	0x0016, 0x00b6, 0x7007, 0x0001, 0xaa74, 0x9282, 0x0004, 0x1a04,
-	0x7909, 0xa97c, 0x9188, 0x1000, 0x2104, 0x905d, 0xb804, 0xd284,
-	0x0140, 0x05e8, 0x8007, 0x9084, 0x00ff, 0x9084, 0x0006, 0x1108,
-	0x04b0, 0x2b10, 0x080c, 0x9dc3, 0x1118, 0x080c, 0x9e66, 0x05a8,
-	0x6212, 0xa874, 0x0002, 0x78e7, 0x78ec, 0x78ef, 0x78f5, 0x2019,
-	0x0002, 0x080c, 0xd486, 0x0060, 0x080c, 0xd422, 0x0048, 0x2019,
-	0x0002, 0xa980, 0x080c, 0xd43d, 0x0018, 0xa980, 0x080c, 0xd422,
-	0x080c, 0x9e19, 0xa887, 0x0000, 0x0126, 0x2091, 0x8000, 0x080c,
-	0x6885, 0x012e, 0x00be, 0x001e, 0x002e, 0x003e, 0x00ce, 0x00de,
-	0x0005, 0xa887, 0x0006, 0x0c80, 0xa887, 0x0002, 0x0c68, 0xa887,
-	0x0005, 0x0c50, 0xa887, 0x0004, 0x0c38, 0xa887, 0x0007, 0x0c20,
-	0x2091, 0x8000, 0x0e04, 0x791a, 0x0006, 0x0016, 0x2001, 0x8003,
-	0x0006, 0x0804, 0x0dbd, 0x2001, 0x1833, 0x2004, 0x9005, 0x0005,
-	0x0005, 0x00f6, 0x2079, 0x0300, 0x2001, 0x0200, 0x200c, 0xc1e5,
-	0xc1dc, 0x2102, 0x2009, 0x0218, 0x210c, 0xd1ec, 0x1120, 0x080c,
-	0x14a7, 0x00fe, 0x0005, 0x2001, 0x020d, 0x2003, 0x0020, 0x781f,
-	0x0300, 0x00fe, 0x0005, 0x781c, 0xd08c, 0x0904, 0x799a, 0x68bc,
-	0x90aa, 0x0005, 0x0a04, 0x7f2c, 0x7d44, 0x7c40, 0x9584, 0x00f6,
-	0x1510, 0x9484, 0x7000, 0x0140, 0x908a, 0x2000, 0x1260, 0x9584,
-	0x0700, 0x8007, 0x0804, 0x79a1, 0x7000, 0x9084, 0xff00, 0x9086,
-	0x8100, 0x0da8, 0x00b0, 0x9484, 0x0fff, 0x1130, 0x7000, 0x9084,
-	0xff00, 0x9086, 0x8100, 0x11c0, 0x080c, 0xd86c, 0x080c, 0x7e71,
-	0x7817, 0x0140, 0x00a8, 0x9584, 0x0076, 0x1118, 0x080c, 0x7ecf,
-	0x19c0, 0xd5a4, 0x0148, 0x0046, 0x0056, 0x080c, 0x79fc, 0x080c,
-	0x21cd, 0x005e, 0x004e, 0x0020, 0x080c, 0xd86c, 0x7817, 0x0140,
-	0x080c, 0x6fa7, 0x0168, 0x2001, 0x0111, 0x2004, 0xd08c, 0x0140,
-	0x688f, 0x0000, 0x2001, 0x0110, 0x2003, 0x0008, 0x2003, 0x0000,
-	0x080c, 0x79dd, 0x2001, 0x19c1, 0x2004, 0x9005, 0x090c, 0x894b,
-	0x0005, 0x0002, 0x79b3, 0x7c93, 0x79aa, 0x79aa, 0x79aa, 0x79aa,
-	0x79aa, 0x79aa, 0x7817, 0x0140, 0x2001, 0x19c1, 0x2004, 0x9005,
-	0x090c, 0x894b, 0x0005, 0x7000, 0x908c, 0xff00, 0x9194, 0xf000,
-	0x810f, 0x9484, 0x0fff, 0x688e, 0x9286, 0x2000, 0x1150, 0x6800,
-	0x9086, 0x0001, 0x1118, 0x080c, 0x53e0, 0x0070, 0x080c, 0x7a1c,
-	0x0058, 0x9286, 0x3000, 0x1118, 0x080c, 0x7bce, 0x0028, 0x9286,
-	0x8000, 0x1110, 0x080c, 0x7da1, 0x7817, 0x0140, 0x2001, 0x19c1,
-	0x2004, 0x9005, 0x090c, 0x894b, 0x0005, 0x2001, 0x1810, 0x2004,
-	0xd08c, 0x0178, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1148,
-	0x0026, 0x0036, 0x2011, 0x8048, 0x2518, 0x080c, 0x48d2, 0x003e,
-	0x002e, 0x0005, 0x0036, 0x0046, 0x0056, 0x00f6, 0x2079, 0x0200,
-	0x2019, 0xfffe, 0x7c30, 0x0050, 0x0036, 0x0046, 0x0056, 0x00f6,
-	0x2079, 0x0200, 0x7d44, 0x7c40, 0x2019, 0xffff, 0x2001, 0x1810,
-	0x2004, 0xd08c, 0x0160, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003,
-	0x1130, 0x0026, 0x2011, 0x8048, 0x080c, 0x48d2, 0x002e, 0x00fe,
-	0x005e, 0x004e, 0x003e, 0x0005, 0x00b6, 0x00c6, 0x7010, 0x9084,
-	0xff00, 0x8007, 0x9096, 0x0001, 0x0120, 0x9096, 0x0023, 0x1904,
-	0x7b9f, 0x9186, 0x0023, 0x15c0, 0x080c, 0x7e36, 0x0904, 0x7b9f,
-	0x6120, 0x9186, 0x0001, 0x0150, 0x9186, 0x0004, 0x0138, 0x9186,
-	0x0008, 0x0120, 0x9186, 0x000a, 0x1904, 0x7b9f, 0x7124, 0x610a,
-	0x7030, 0x908e, 0x0200, 0x1130, 0x2009, 0x0015, 0x080c, 0x9e93,
-	0x0804, 0x7b9f, 0x908e, 0x0214, 0x0118, 0x908e, 0x0210, 0x1130,
-	0x2009, 0x0015, 0x080c, 0x9e93, 0x0804, 0x7b9f, 0x908e, 0x0100,
-	0x1904, 0x7b9f, 0x7034, 0x9005, 0x1904, 0x7b9f, 0x2009, 0x0016,
-	0x080c, 0x9e93, 0x0804, 0x7b9f, 0x9186, 0x0022, 0x1904, 0x7b9f,
-	0x7030, 0x908e, 0x0300, 0x1580, 0x68d8, 0xd0a4, 0x0528, 0xc0b5,
-	0x68da, 0x7100, 0x918c, 0x00ff, 0x697a, 0x7004, 0x687e, 0x00f6,
-	0x2079, 0x0100, 0x79e6, 0x78ea, 0x0006, 0x9084, 0x00ff, 0x0016,
-	0x2008, 0x080c, 0x26ac, 0x7932, 0x7936, 0x001e, 0x000e, 0x00fe,
-	0x080c, 0x2663, 0x695a, 0x703c, 0x00e6, 0x2071, 0x0140, 0x7086,
-	0x2071, 0x1800, 0x70b2, 0x00ee, 0x7034, 0x9005, 0x1904, 0x7b9f,
-	0x2009, 0x0017, 0x0804, 0x7b6c, 0x908e, 0x0400, 0x1190, 0x7034,
-	0x9005, 0x1904, 0x7b9f, 0x080c, 0x6fa7, 0x0120, 0x2009, 0x001d,
-	0x0804, 0x7b6c, 0x68d8, 0xc0a5, 0x68da, 0x2009, 0x0030, 0x0804,
-	0x7b6c, 0x908e, 0x0500, 0x1140, 0x7034, 0x9005, 0x1904, 0x7b9f,
-	0x2009, 0x0018, 0x0804, 0x7b6c, 0x908e, 0x2010, 0x1120, 0x2009,
-	0x0019, 0x0804, 0x7b6c, 0x908e, 0x2110, 0x1120, 0x2009, 0x001a,
-	0x0804, 0x7b6c, 0x908e, 0x5200, 0x1140, 0x7034, 0x9005, 0x1904,
-	0x7b9f, 0x2009, 0x001b, 0x0804, 0x7b6c, 0x908e, 0x5000, 0x1140,
-	0x7034, 0x9005, 0x1904, 0x7b9f, 0x2009, 0x001c, 0x0804, 0x7b6c,
-	0x908e, 0x1300, 0x1120, 0x2009, 0x0034, 0x0804, 0x7b6c, 0x908e,
-	0x1200, 0x1140, 0x7034, 0x9005, 0x1904, 0x7b9f, 0x2009, 0x0024,
-	0x0804, 0x7b6c, 0x908c, 0xff00, 0x918e, 0x2400, 0x1170, 0x2009,
-	0x002d, 0x2001, 0x1810, 0x2004, 0xd09c, 0x0904, 0x7b6c, 0x080c,
-	0xc89e, 0x1904, 0x7b9f, 0x0804, 0x7b6a, 0x908c, 0xff00, 0x918e,
-	0x5300, 0x1120, 0x2009, 0x002a, 0x0804, 0x7b6c, 0x908e, 0x0f00,
-	0x1120, 0x2009, 0x0020, 0x0804, 0x7b6c, 0x908e, 0x6104, 0x1528,
-	0x2029, 0x0205, 0x2011, 0x026d, 0x8208, 0x2204, 0x9082, 0x0004,
-	0x8004, 0x8004, 0x20a8, 0x2011, 0x8015, 0x211c, 0x8108, 0x0046,
-	0x2124, 0x080c, 0x48d2, 0x004e, 0x8108, 0x0f04, 0x7b38, 0x9186,
-	0x0280, 0x1d88, 0x2504, 0x8000, 0x202a, 0x2009, 0x0260, 0x0c58,
-	0x202b, 0x0000, 0x2009, 0x0023, 0x0478, 0x908e, 0x6000, 0x1118,
-	0x2009, 0x003f, 0x0448, 0x908e, 0x7800, 0x1118, 0x2009, 0x0045,
-	0x0418, 0x908e, 0x1000, 0x1118, 0x2009, 0x004e, 0x00e8, 0x908e,
-	0x6300, 0x1118, 0x2009, 0x004a, 0x00b8, 0x908c, 0xff00, 0x918e,
-	0x5600, 0x1118, 0x2009, 0x004f, 0x0078, 0x908c, 0xff00, 0x918e,
-	0x5700, 0x1118, 0x2009, 0x0050, 0x0038, 0x2009, 0x001d, 0x6838,
-	0xd0d4, 0x0110, 0x2009, 0x004c, 0x0016, 0x2011, 0x0263, 0x2204,
-	0x8211, 0x220c, 0x080c, 0x2663, 0x1568, 0x080c, 0x61d7, 0x1550,
-	0xbe12, 0xbd16, 0x001e, 0x0016, 0xb8b0, 0x9005, 0x1168, 0x9186,
+	0x6822, 0x00de, 0x701c, 0x2048, 0x7010, 0x8001, 0x7012, 0xa800,
+	0x701e, 0x9005, 0x1108, 0x701a, 0x012e, 0x0005, 0x0005, 0x0126,
+	0x2091, 0x8000, 0x701c, 0x904d, 0x0160, 0x7010, 0x8001, 0x7012,
+	0xa800, 0x701e, 0x9005, 0x1108, 0x701a, 0x012e, 0x080c, 0x101d,
+	0x0005, 0x012e, 0x0005, 0x2091, 0x8000, 0x0e04, 0x6bc5, 0x0006,
+	0x0016, 0x2001, 0x8004, 0x0006, 0x0804, 0x0dbd, 0x0096, 0x00f6,
+	0x2079, 0x0050, 0x7044, 0xd084, 0x01e0, 0xc084, 0x7046, 0x7838,
+	0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833,
+	0x0013, 0x00de, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,
+	0x190c, 0x1187, 0x2009, 0x1919, 0x200b, 0x0000, 0x00fe, 0x009e,
+	0x0005, 0x782c, 0x9094, 0x0780, 0x1971, 0xd0a4, 0x0db8, 0x2009,
+	0x1919, 0x2104, 0x8000, 0x200a, 0x9082, 0x000f, 0x0e78, 0x00e6,
+	0x2071, 0x1800, 0x7824, 0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c,
+	0x1148, 0x2009, 0x182f, 0x210c, 0x918a, 0x0040, 0x0218, 0x7022,
+	0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e,
+	0x70bc, 0x8000, 0x70be, 0x080c, 0x7f5d, 0x782c, 0x9094, 0x0780,
+	0x190c, 0x6bc3, 0xd0a4, 0x19f0, 0x7838, 0x7938, 0x910e, 0x1de0,
+	0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x2091,
+	0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x1187, 0x2009,
+	0x1919, 0x200b, 0x0000, 0x00ee, 0x00fe, 0x009e, 0x0005, 0x00f6,
+	0x2079, 0x0050, 0x7044, 0xd084, 0x01b8, 0xc084, 0x7046, 0x7838,
+	0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833,
+	0x0013, 0x00de, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,
+	0x190c, 0x1187, 0x00fe, 0x0005, 0x782c, 0x9094, 0x0780, 0x190c,
+	0x6bc3, 0xd0a4, 0x0db8, 0x00e6, 0x2071, 0x1800, 0x7824, 0x2048,
+	0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c,
+	0x7f5d, 0x782c, 0x9094, 0x0780, 0x190c, 0x6bc3, 0xd0a4, 0x1d70,
+	0x00d6, 0x2069, 0x0050, 0x693c, 0x2069, 0x191a, 0x6808, 0x690a,
+	0x2069, 0x19cb, 0x9102, 0x1118, 0x683c, 0x9005, 0x1328, 0x2001,
+	0x191b, 0x200c, 0x810d, 0x693e, 0x00de, 0x00ee, 0x00fe, 0x0005,
+	0x7094, 0x908a, 0x0029, 0x1a0c, 0x0db4, 0x9082, 0x001d, 0x001b,
+	0x6027, 0x1e00, 0x0005, 0x6d67, 0x6ced, 0x6d09, 0x6d33, 0x6d56,
+	0x6d96, 0x6da8, 0x6d09, 0x6d7e, 0x6ca8, 0x6cd6, 0x6ca7, 0x0005,
+	0x00d6, 0x2069, 0x0200, 0x6804, 0x9005, 0x1180, 0x6808, 0x9005,
+	0x1518, 0x7097, 0x0028, 0x2069, 0x1960, 0x2d04, 0x7002, 0x080c,
+	0x70eb, 0x6028, 0x9085, 0x0600, 0x602a, 0x00b0, 0x7097, 0x0028,
+	0x2069, 0x1960, 0x2d04, 0x7002, 0x6028, 0x9085, 0x0600, 0x602a,
+	0x00e6, 0x0036, 0x0046, 0x0056, 0x2071, 0x1a33, 0x080c, 0x1958,
+	0x005e, 0x004e, 0x003e, 0x00ee, 0x00de, 0x0005, 0x00d6, 0x2069,
+	0x0200, 0x6804, 0x9005, 0x1178, 0x6808, 0x9005, 0x1160, 0x7097,
+	0x0028, 0x2069, 0x1960, 0x2d04, 0x7002, 0x080c, 0x7185, 0x6028,
+	0x9085, 0x0600, 0x602a, 0x00de, 0x0005, 0x0006, 0x2001, 0x0090,
+	0x080c, 0x2b14, 0x000e, 0x6124, 0xd1e4, 0x1190, 0x080c, 0x6e15,
+	0xd1d4, 0x1160, 0xd1dc, 0x1138, 0xd1cc, 0x0150, 0x7097, 0x0020,
+	0x080c, 0x6e15, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097, 0x001f,
+	0x0005, 0x2001, 0x0088, 0x080c, 0x2b14, 0x6124, 0xd1cc, 0x11e8,
+	0xd1dc, 0x11c0, 0xd1e4, 0x1198, 0x9184, 0x1e00, 0x11d8, 0x080c,
+	0x1982, 0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c, 0x6fde,
+	0x2001, 0x0080, 0x080c, 0x2b14, 0x7097, 0x0028, 0x0058, 0x7097,
+	0x001e, 0x0040, 0x7097, 0x001d, 0x0028, 0x7097, 0x0020, 0x0010,
+	0x7097, 0x001f, 0x0005, 0x080c, 0x1982, 0x60e3, 0x0001, 0x600c,
+	0xc0b4, 0x600e, 0x080c, 0x6fde, 0x2001, 0x0080, 0x080c, 0x2b14,
+	0x6124, 0xd1d4, 0x1180, 0xd1dc, 0x1158, 0xd1e4, 0x1130, 0x9184,
+	0x1e00, 0x1158, 0x7097, 0x0028, 0x0040, 0x7097, 0x001e, 0x0028,
+	0x7097, 0x001d, 0x0010, 0x7097, 0x001f, 0x0005, 0x2001, 0x00a0,
+	0x080c, 0x2b14, 0x6124, 0xd1dc, 0x1138, 0xd1e4, 0x0138, 0x080c,
+	0x1982, 0x7097, 0x001e, 0x0010, 0x7097, 0x001d, 0x0005, 0x080c,
+	0x6e98, 0x6124, 0xd1dc, 0x1188, 0x080c, 0x6e15, 0x0016, 0x080c,
+	0x1982, 0x001e, 0xd1d4, 0x1128, 0xd1e4, 0x0138, 0x7097, 0x001e,
+	0x0020, 0x7097, 0x001f, 0x080c, 0x6e15, 0x0005, 0x0006, 0x2001,
+	0x00a0, 0x080c, 0x2b14, 0x000e, 0x6124, 0xd1d4, 0x1160, 0xd1cc,
+	0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140, 0x7097, 0x001e, 0x0028,
+	0x7097, 0x001d, 0x0010, 0x7097, 0x0021, 0x0005, 0x080c, 0x6e98,
+	0x6124, 0xd1d4, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140, 0x7097,
+	0x001e, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097, 0x001f, 0x0005,
+	0x0006, 0x2001, 0x0090, 0x080c, 0x2b14, 0x000e, 0x6124, 0xd1d4,
+	0x1178, 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0158, 0x7097,
+	0x001e, 0x0040, 0x7097, 0x001d, 0x0028, 0x7097, 0x0020, 0x0010,
+	0x7097, 0x001f, 0x0005, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x0126,
+	0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x2091, 0x8000,
+	0x080c, 0x6fb2, 0x11d8, 0x2001, 0x180c, 0x200c, 0xd1b4, 0x01b0,
+	0xc1b4, 0x2102, 0x6027, 0x0200, 0x080c, 0x2a5d, 0x6024, 0xd0cc,
+	0x0148, 0x2001, 0x00a0, 0x080c, 0x2b14, 0x080c, 0x7296, 0x080c,
+	0x5cd1, 0x0428, 0x6028, 0xc0cd, 0x602a, 0x0408, 0x080c, 0x6fcc,
+	0x0150, 0x080c, 0x6fc3, 0x1138, 0x2001, 0x0001, 0x080c, 0x260c,
+	0x080c, 0x6f8a, 0x00a0, 0x080c, 0x6e95, 0x0178, 0x2001, 0x0001,
+	0x080c, 0x260c, 0x7094, 0x9086, 0x001e, 0x0120, 0x7094, 0x9086,
+	0x0022, 0x1118, 0x7097, 0x0025, 0x0010, 0x7097, 0x0021, 0x012e,
+	0x00ee, 0x00de, 0x00ce, 0x001e, 0x0005, 0x0026, 0x2011, 0x6e26,
+	0x080c, 0x810c, 0x002e, 0x0016, 0x0026, 0x2009, 0x0064, 0x2011,
+	0x6e26, 0x080c, 0x8103, 0x002e, 0x001e, 0x0005, 0x00e6, 0x00f6,
+	0x0016, 0x080c, 0x93ac, 0x2071, 0x1800, 0x080c, 0x6dc3, 0x001e,
+	0x00fe, 0x00ee, 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6,
+	0x00e6, 0x00f6, 0x0126, 0x080c, 0x93ac, 0x2061, 0x0100, 0x2069,
+	0x0140, 0x2071, 0x1800, 0x2091, 0x8000, 0x6028, 0xc09c, 0x602a,
+	0x2011, 0x0003, 0x080c, 0x9771, 0x2011, 0x0002, 0x080c, 0x977b,
+	0x080c, 0x9662, 0x080c, 0x80b8, 0x0036, 0x901e, 0x080c, 0x96d8,
+	0x003e, 0x60e3, 0x0000, 0x080c, 0xd8b4, 0x080c, 0xd8cf, 0x2009,
+	0x0004, 0x080c, 0x2a63, 0x080c, 0x297e, 0x2001, 0x1800, 0x2003,
+	0x0004, 0x6027, 0x0008, 0x2011, 0x6e26, 0x080c, 0x810c, 0x080c,
+	0x6fcc, 0x0118, 0x9006, 0x080c, 0x2b14, 0x080c, 0x0b8f, 0x2001,
+	0x0001, 0x080c, 0x260c, 0x012e, 0x00fe, 0x00ee, 0x00de, 0x00ce,
+	0x003e, 0x002e, 0x001e, 0x0005, 0x0026, 0x00e6, 0x2011, 0x6e33,
+	0x2071, 0x19cb, 0x701c, 0x9206, 0x1118, 0x7018, 0x9005, 0x0110,
+	0x9085, 0x0001, 0x00ee, 0x002e, 0x0005, 0x6020, 0xd09c, 0x0005,
+	0x6800, 0x9084, 0xfffe, 0x9086, 0x00c0, 0x01b8, 0x2001, 0x00c0,
+	0x080c, 0x2b14, 0x0156, 0x20a9, 0x002d, 0x1d04, 0x6ea5, 0x2091,
+	0x6000, 0x1f04, 0x6ea5, 0x015e, 0x00d6, 0x2069, 0x1800, 0x6898,
+	0x8001, 0x0220, 0x0118, 0x689a, 0x00de, 0x0005, 0x689b, 0x0014,
+	0x68e4, 0xd0dc, 0x0dc8, 0x6800, 0x9086, 0x0001, 0x1da8, 0x080c,
+	0x8118, 0x0c90, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069,
+	0x0140, 0x2071, 0x1800, 0x080c, 0x72a5, 0x2001, 0x193e, 0x2003,
+	0x0000, 0x9006, 0x7096, 0x60e2, 0x6886, 0x080c, 0x26d7, 0x9006,
+	0x080c, 0x2b14, 0x080c, 0x5b90, 0x6027, 0xffff, 0x602b, 0x182f,
+	0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061,
+	0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x2001, 0x194e, 0x200c,
+	0x9186, 0x0000, 0x0158, 0x9186, 0x0001, 0x0158, 0x9186, 0x0002,
+	0x0158, 0x9186, 0x0003, 0x0158, 0x0804, 0x6f7a, 0x7097, 0x0022,
+	0x0040, 0x7097, 0x0021, 0x0028, 0x7097, 0x0023, 0x0010, 0x7097,
+	0x0024, 0x60e3, 0x0000, 0x6887, 0x0001, 0x2001, 0x0001, 0x080c,
+	0x26d7, 0x0026, 0x080c, 0x9db8, 0x002e, 0x7000, 0x908e, 0x0004,
+	0x0118, 0x602b, 0x0028, 0x0010, 0x602b, 0x0020, 0x0156, 0x0126,
+	0x2091, 0x8000, 0x20a9, 0x0005, 0x6024, 0xd0ac, 0x0150, 0x012e,
+	0x015e, 0x080c, 0xc212, 0x0118, 0x9006, 0x080c, 0x2b3e, 0x0804,
+	0x6f86, 0x6800, 0x9084, 0x00a1, 0xc0bd, 0x6802, 0x080c, 0x2a5d,
+	0x6904, 0xd1d4, 0x1140, 0x2001, 0x0100, 0x080c, 0x2b14, 0x1f04,
+	0x6f24, 0x080c, 0x7009, 0x012e, 0x015e, 0x080c, 0x6fc3, 0x01a8,
+	0x6044, 0x9005, 0x0168, 0x6050, 0x0006, 0x9085, 0x0020, 0x6052,
+	0x080c, 0x7009, 0x9006, 0x8001, 0x1df0, 0x000e, 0x6052, 0x0028,
+	0x6804, 0xd0d4, 0x1110, 0x080c, 0x7009, 0x080c, 0xc212, 0x0118,
+	0x9006, 0x080c, 0x2b3e, 0x0016, 0x0026, 0x7000, 0x908e, 0x0004,
+	0x0130, 0x2009, 0x00c8, 0x2011, 0x6e33, 0x080c, 0x80ca, 0x002e,
+	0x001e, 0x080c, 0x7f54, 0x7034, 0xc085, 0x7036, 0x2001, 0x194e,
+	0x2003, 0x0004, 0x080c, 0x6c90, 0x080c, 0x6fc3, 0x0138, 0x6804,
+	0xd0d4, 0x1120, 0xd0dc, 0x1100, 0x080c, 0x729b, 0x00ee, 0x00de,
+	0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069,
+	0x0140, 0x2071, 0x1800, 0x080c, 0x7f6b, 0x080c, 0x7f5d, 0x080c,
+	0x72a5, 0x2001, 0x193e, 0x2003, 0x0000, 0x9006, 0x7096, 0x60e2,
+	0x6886, 0x080c, 0x26d7, 0x9006, 0x080c, 0x2b14, 0x6043, 0x0090,
+	0x6043, 0x0010, 0x6027, 0xffff, 0x602b, 0x182f, 0x00ee, 0x00de,
+	0x00ce, 0x0005, 0x0006, 0x2001, 0x194d, 0x2004, 0x9086, 0xaaaa,
+	0x000e, 0x0005, 0x0006, 0x080c, 0x538a, 0x9084, 0x0030, 0x9086,
+	0x0000, 0x000e, 0x0005, 0x0006, 0x080c, 0x538a, 0x9084, 0x0030,
+	0x9086, 0x0030, 0x000e, 0x0005, 0x0006, 0x080c, 0x538a, 0x9084,
+	0x0030, 0x9086, 0x0010, 0x000e, 0x0005, 0x0006, 0x080c, 0x538a,
+	0x9084, 0x0030, 0x9086, 0x0020, 0x000e, 0x0005, 0x0036, 0x0016,
+	0x2001, 0x180c, 0x2004, 0x908c, 0x0013, 0x0180, 0x0020, 0x080c,
+	0x26f7, 0x900e, 0x0028, 0x080c, 0x655a, 0x1dc8, 0x2009, 0x0002,
+	0x2019, 0x0028, 0x080c, 0x2fa5, 0x9006, 0x0019, 0x001e, 0x003e,
+	0x0005, 0x00e6, 0x2071, 0x180c, 0x2e04, 0x0130, 0x080c, 0xc20b,
+	0x1128, 0x9085, 0x0010, 0x0010, 0x9084, 0xffef, 0x2072, 0x00ee,
+	0x0005, 0x6050, 0x0006, 0x60ec, 0x0006, 0x600c, 0x0006, 0x6004,
+	0x0006, 0x6028, 0x0006, 0x0016, 0x6138, 0x6050, 0x9084, 0xfbff,
+	0x9085, 0x2000, 0x6052, 0x613a, 0x20a9, 0x0012, 0x1d04, 0x701e,
+	0x2091, 0x6000, 0x1f04, 0x701e, 0x602f, 0x0100, 0x602f, 0x0000,
+	0x6050, 0x9085, 0x0400, 0x9084, 0xdfff, 0x6052, 0x613a, 0x001e,
+	0x602f, 0x0040, 0x602f, 0x0000, 0x000e, 0x602a, 0x000e, 0x6006,
+	0x000e, 0x600e, 0x000e, 0x60ee, 0x60e3, 0x0000, 0x6887, 0x0001,
+	0x2001, 0x0001, 0x080c, 0x26d7, 0x2001, 0x00a0, 0x0006, 0x080c,
+	0xc212, 0x000e, 0x0130, 0x080c, 0x2b32, 0x9006, 0x080c, 0x2b3e,
+	0x0010, 0x080c, 0x2b14, 0x000e, 0x6052, 0x6050, 0x0006, 0xc0e5,
+	0x6052, 0x00f6, 0x2079, 0x0100, 0x080c, 0x29d2, 0x00fe, 0x000e,
+	0x6052, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6,
+	0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x6020,
+	0x9084, 0x0080, 0x0138, 0x2001, 0x180c, 0x200c, 0xc1c5, 0x2102,
+	0x0804, 0x70dd, 0x2001, 0x180c, 0x200c, 0xc1c4, 0x2102, 0x6028,
+	0x9084, 0xe1ff, 0x602a, 0x6027, 0x0200, 0x2001, 0x0090, 0x080c,
+	0x2b14, 0x20a9, 0x0366, 0x6024, 0xd0cc, 0x1518, 0x1d04, 0x708b,
+	0x2091, 0x6000, 0x1f04, 0x708b, 0x2011, 0x0003, 0x080c, 0x9771,
+	0x2011, 0x0002, 0x080c, 0x977b, 0x080c, 0x9662, 0x901e, 0x080c,
+	0x96d8, 0x2001, 0x00a0, 0x080c, 0x2b14, 0x080c, 0x7296, 0x080c,
+	0x5cd1, 0x080c, 0xc212, 0x0110, 0x080c, 0x0d22, 0x9085, 0x0001,
+	0x0490, 0x86ff, 0x1110, 0x080c, 0x1982, 0x60e3, 0x0000, 0x2001,
+	0x0002, 0x080c, 0x26d7, 0x60e2, 0x2001, 0x0080, 0x080c, 0x2b14,
+	0x20a9, 0x0366, 0x6027, 0x1e00, 0x2009, 0x1e00, 0x080c, 0x2a5d,
+	0x6024, 0x910c, 0x0138, 0x1d04, 0x70c2, 0x2091, 0x6000, 0x1f04,
+	0x70c2, 0x0810, 0x6028, 0x9085, 0x1e00, 0x602a, 0x70b0, 0x9005,
+	0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x080c, 0xc212, 0x0110,
+	0x080c, 0x0d22, 0x9006, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e,
+	0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6,
+	0x00d6, 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, 0x7000, 0x9086,
+	0x0003, 0x1168, 0x2001, 0x020b, 0x2004, 0x9084, 0x5540, 0x9086,
+	0x5540, 0x1128, 0x2069, 0x1a49, 0x2d04, 0x8000, 0x206a, 0x2069,
+	0x0140, 0x6020, 0x9084, 0x00c0, 0x0120, 0x6884, 0x9005, 0x1904,
+	0x7150, 0x2001, 0x0088, 0x080c, 0x2b14, 0x9006, 0x60e2, 0x6886,
+	0x080c, 0x26d7, 0x2069, 0x0200, 0x6804, 0x9005, 0x1118, 0x6808,
+	0x9005, 0x01c0, 0x6028, 0x9084, 0xfbff, 0x602a, 0x6027, 0x0400,
+	0x2069, 0x1960, 0x7000, 0x206a, 0x7097, 0x0026, 0x7003, 0x0001,
+	0x20a9, 0x0002, 0x1d04, 0x7132, 0x2091, 0x6000, 0x1f04, 0x7132,
+	0x0804, 0x717d, 0x2069, 0x0140, 0x20a9, 0x0384, 0x6027, 0x1e00,
+	0x2009, 0x1e00, 0x080c, 0x2a5d, 0x6024, 0x910c, 0x0508, 0x9084,
+	0x1a00, 0x11f0, 0x1d04, 0x713e, 0x2091, 0x6000, 0x1f04, 0x713e,
+	0x2011, 0x0003, 0x080c, 0x9771, 0x2011, 0x0002, 0x080c, 0x977b,
+	0x080c, 0x9662, 0x901e, 0x080c, 0x96d8, 0x2001, 0x00a0, 0x080c,
+	0x2b14, 0x080c, 0x7296, 0x080c, 0x5cd1, 0x9085, 0x0001, 0x00a8,
+	0x2001, 0x0080, 0x080c, 0x2b14, 0x2069, 0x0140, 0x60e3, 0x0000,
+	0x70b0, 0x9005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x2001,
+	0x0002, 0x080c, 0x26d7, 0x60e2, 0x9006, 0x00ee, 0x00de, 0x00ce,
+	0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026,
+	0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800,
+	0x6020, 0x9084, 0x00c0, 0x01c8, 0x2011, 0x0003, 0x080c, 0x9771,
+	0x2011, 0x0002, 0x080c, 0x977b, 0x080c, 0x9662, 0x901e, 0x080c,
+	0x96d8, 0x2069, 0x0140, 0x2001, 0x00a0, 0x080c, 0x2b14, 0x080c,
+	0x7296, 0x080c, 0x5cd1, 0x0804, 0x7217, 0x2001, 0x180c, 0x200c,
+	0xd1b4, 0x1160, 0xc1b5, 0x2102, 0x080c, 0x6e1b, 0x2069, 0x0140,
+	0x2001, 0x0080, 0x080c, 0x2b14, 0x60e3, 0x0000, 0x2069, 0x0200,
+	0x6804, 0x9005, 0x1118, 0x6808, 0x9005, 0x0180, 0x6028, 0x9084,
+	0xfdff, 0x602a, 0x6027, 0x0200, 0x2069, 0x1960, 0x7000, 0x206a,
+	0x7097, 0x0027, 0x7003, 0x0001, 0x0804, 0x7217, 0x6027, 0x1e00,
+	0x2009, 0x1e00, 0x080c, 0x2a5d, 0x6024, 0x910c, 0x01c8, 0x9084,
+	0x1c00, 0x11b0, 0x1d04, 0x71d6, 0x0006, 0x0016, 0x00c6, 0x00d6,
+	0x00e6, 0x080c, 0x7f9c, 0x00ee, 0x00de, 0x00ce, 0x001e, 0x000e,
+	0x00e6, 0x2071, 0x19cb, 0x7018, 0x00ee, 0x9005, 0x19f8, 0x01f8,
+	0x0026, 0x2011, 0x6e33, 0x080c, 0x8038, 0x2011, 0x6e26, 0x080c,
+	0x810c, 0x002e, 0x2069, 0x0140, 0x60e3, 0x0000, 0x70b0, 0x9005,
+	0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x2001, 0x0002, 0x080c,
+	0x26d7, 0x60e2, 0x2001, 0x180c, 0x200c, 0xc1b4, 0x2102, 0x00ee,
+	0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x0156,
+	0x0016, 0x0026, 0x0036, 0x0046, 0x00c6, 0x00e6, 0x2061, 0x0100,
+	0x2071, 0x1800, 0x080c, 0xc20b, 0x1904, 0x7284, 0x7130, 0xd184,
+	0x1170, 0x080c, 0x3133, 0x0138, 0xc18d, 0x7132, 0x2011, 0x1854,
+	0x2214, 0xd2ac, 0x1120, 0x7030, 0xd08c, 0x0904, 0x7284, 0x2011,
+	0x1854, 0x220c, 0x0438, 0x0016, 0x2019, 0x000e, 0x080c, 0xd4a6,
+	0x0156, 0x00b6, 0x20a9, 0x007f, 0x900e, 0x9186, 0x007e, 0x01a0,
+	0x9186, 0x0080, 0x0188, 0x080c, 0x623e, 0x1170, 0x2120, 0x9006,
+	0x0016, 0x2009, 0x000e, 0x080c, 0xd52a, 0x2009, 0x0001, 0x2011,
+	0x0100, 0x080c, 0x822f, 0x001e, 0x8108, 0x1f04, 0x724d, 0x00be,
+	0x015e, 0x001e, 0xd1ac, 0x1148, 0x0016, 0x2009, 0x0002, 0x2019,
+	0x0004, 0x080c, 0x2fa5, 0x001e, 0x0078, 0x0156, 0x00b6, 0x20a9,
+	0x007f, 0x900e, 0x080c, 0x623e, 0x1110, 0x080c, 0x5ceb, 0x8108,
+	0x1f04, 0x727a, 0x00be, 0x015e, 0x080c, 0x1982, 0x080c, 0x9db8,
+	0x60e3, 0x0000, 0x080c, 0x5cd1, 0x080c, 0x6ee4, 0x00ee, 0x00ce,
+	0x004e, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x2001, 0x194e,
+	0x2003, 0x0001, 0x0005, 0x2001, 0x194e, 0x2003, 0x0000, 0x0005,
+	0x2001, 0x194d, 0x2003, 0xaaaa, 0x0005, 0x2001, 0x194d, 0x2003,
+	0x0000, 0x0005, 0x2071, 0x18f0, 0x7003, 0x0000, 0x7007, 0x0000,
+	0x080c, 0x1004, 0x090c, 0x0db4, 0xa8ab, 0xdcb0, 0x2900, 0x704e,
+	0x080c, 0x1004, 0x090c, 0x0db4, 0xa8ab, 0xdcb0, 0x2900, 0x7052,
+	0xa867, 0x0000, 0xa86b, 0x0001, 0xa89f, 0x0000, 0x0005, 0x00e6,
+	0x2071, 0x0040, 0x6848, 0x9005, 0x1118, 0x9085, 0x0001, 0x04b0,
+	0x6840, 0x9005, 0x0150, 0x04a1, 0x6a50, 0x9200, 0x7002, 0x6854,
+	0x9101, 0x7006, 0x9006, 0x7012, 0x7016, 0x6850, 0x7002, 0x6854,
+	0x7006, 0x6858, 0x700a, 0x685c, 0x700e, 0x6840, 0x9005, 0x1110,
+	0x7012, 0x7016, 0x6848, 0x701a, 0x701c, 0x9085, 0x0040, 0x701e,
+	0x2001, 0x0019, 0x7036, 0x702b, 0x0001, 0x2001, 0x0004, 0x200c,
+	0x918c, 0xfff7, 0x918d, 0x8000, 0x2102, 0x00d6, 0x2069, 0x18f0,
+	0x6807, 0x0001, 0x00de, 0x080c, 0x7897, 0x9006, 0x00ee, 0x0005,
+	0x900e, 0x0156, 0x20a9, 0x0006, 0x8003, 0x2011, 0x0100, 0x2214,
+	0x9296, 0x0008, 0x1110, 0x818d, 0x0010, 0x81f5, 0x3e08, 0x1f04,
+	0x730c, 0x015e, 0x0005, 0x2079, 0x0040, 0x2071, 0x18f0, 0x7004,
+	0x0002, 0x732b, 0x732c, 0x7363, 0x73be, 0x74ff, 0x7329, 0x7329,
+	0x7529, 0x080c, 0x0db4, 0x0005, 0x2079, 0x0040, 0x782c, 0x908c,
+	0x0780, 0x190c, 0x7923, 0xd0a4, 0x01f0, 0x7824, 0x2048, 0x9006,
+	0xa802, 0xa806, 0xa864, 0x9084, 0x00ff, 0x908a, 0x0040, 0x0608,
+	0x00b8, 0x2001, 0x1800, 0x200c, 0x9186, 0x0003, 0x1160, 0x7104,
+	0x9186, 0x0004, 0x0140, 0x9186, 0x0007, 0x0128, 0x9186, 0x0003,
+	0x19e8, 0x080c, 0x73be, 0x782c, 0xd09c, 0x090c, 0x7897, 0x0005,
+	0x9082, 0x005a, 0x1218, 0x2100, 0x003b, 0x0c18, 0x080c, 0x73f4,
+	0x0c90, 0x00e3, 0x08f0, 0x0005, 0x73f4, 0x73f4, 0x73f4, 0x73f4,
+	0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x7416, 0x73f4, 0x73f4, 0x73f4,
+	0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4,
+	0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4,
+	0x7400, 0x73f4, 0x75fe, 0x73f4, 0x73f4, 0x73f4, 0x7416, 0x73f4,
+	0x7400, 0x763f, 0x7680, 0x76c7, 0x76db, 0x73f4, 0x73f4, 0x7416,
+	0x7400, 0x73f4, 0x73f4, 0x74d3, 0x7786, 0x77a1, 0x73f4, 0x7416,
+	0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x74c9, 0x77a1, 0x73f4, 0x73f4,
+	0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x742a,
+	0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4,
+	0x73f4, 0x78c7, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x743e,
+	0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x73f4, 0x2079, 0x0040,
+	0x7004, 0x9086, 0x0003, 0x1198, 0x782c, 0x080c, 0x78c0, 0xd0a4,
+	0x0170, 0x7824, 0x2048, 0x9006, 0xa802, 0xa806, 0xa864, 0x9084,
+	0x00ff, 0x908a, 0x001a, 0x1210, 0x002b, 0x0c50, 0x00e9, 0x080c,
+	0x7897, 0x0005, 0x73f4, 0x7400, 0x75ea, 0x73f4, 0x7400, 0x73f4,
+	0x7400, 0x7400, 0x73f4, 0x7400, 0x75ea, 0x7400, 0x7400, 0x7400,
+	0x7400, 0x7400, 0x73f4, 0x7400, 0x75ea, 0x73f4, 0x73f4, 0x7400,
+	0x73f4, 0x73f4, 0x73f4, 0x7400, 0x00e6, 0x2071, 0x18f0, 0x2009,
+	0x0400, 0x0071, 0x00ee, 0x0005, 0x2009, 0x1000, 0x0049, 0x0005,
+	0x2009, 0x2000, 0x0029, 0x0005, 0x2009, 0x0800, 0x0009, 0x0005,
+	0x7007, 0x0001, 0xa868, 0x9084, 0x00ff, 0x9105, 0xa86a, 0x0126,
+	0x2091, 0x8000, 0x080c, 0x688c, 0x012e, 0x0005, 0xa864, 0x8007,
+	0x9084, 0x00ff, 0x0d08, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804,
+	0x75a8, 0x7007, 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b,
+	0x75a8, 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff, 0x0968, 0x8001,
+	0x1120, 0x7007, 0x0001, 0x0804, 0x75c3, 0x7007, 0x0003, 0x7012,
+	0x2900, 0x7016, 0x701a, 0x704b, 0x75c3, 0x0005, 0xa864, 0x8007,
+	0x9084, 0x00ff, 0x9086, 0x0001, 0x1904, 0x73fc, 0x7007, 0x0001,
+	0x2009, 0x1833, 0x210c, 0x81ff, 0x1904, 0x74a0, 0xa994, 0x9186,
+	0x006f, 0x0188, 0x9186, 0x0074, 0x15b0, 0x0026, 0x2011, 0x0010,
+	0x080c, 0x6586, 0x002e, 0x0578, 0x0016, 0xa998, 0x080c, 0x65d0,
+	0x001e, 0x1548, 0x0400, 0x080c, 0x6fb2, 0x0140, 0xa897, 0x4005,
+	0xa89b, 0x0016, 0x2001, 0x0030, 0x900e, 0x0438, 0x0026, 0x2011,
+	0x8008, 0x080c, 0x6586, 0x002e, 0x01b0, 0x0016, 0x0026, 0x0036,
+	0xa998, 0xaaa0, 0xab9c, 0x918d, 0x8000, 0x080c, 0x65d0, 0x003e,
+	0x002e, 0x001e, 0x1140, 0xa897, 0x4005, 0xa89b, 0x4009, 0x2001,
+	0x0030, 0x900e, 0x0050, 0xa868, 0x9084, 0x00ff, 0xa86a, 0xa883,
+	0x0000, 0x080c, 0x5f00, 0x1108, 0x0005, 0x0126, 0x2091, 0x8000,
+	0xa867, 0x0139, 0xa87a, 0xa982, 0x080c, 0x688c, 0x012e, 0x0ca0,
+	0xa994, 0x9186, 0x0071, 0x0904, 0x744e, 0x9186, 0x0064, 0x0904,
+	0x744e, 0x9186, 0x007c, 0x0904, 0x744e, 0x9186, 0x0028, 0x0904,
+	0x744e, 0x9186, 0x0038, 0x0904, 0x744e, 0x9186, 0x0078, 0x0904,
+	0x744e, 0x9186, 0x005f, 0x0904, 0x744e, 0x9186, 0x0056, 0x0904,
+	0x744e, 0xa897, 0x4005, 0xa89b, 0x0001, 0x2001, 0x0030, 0x900e,
+	0x0860, 0xa87c, 0x9084, 0x00c0, 0x9086, 0x00c0, 0x1120, 0x7007,
+	0x0001, 0x0804, 0x77b8, 0x2900, 0x7016, 0x701a, 0x20a9, 0x0004,
+	0xa860, 0x20e0, 0xa85c, 0x9080, 0x0030, 0x2098, 0x7050, 0x2040,
+	0xa060, 0x20e8, 0xa05c, 0x9080, 0x0023, 0x20a0, 0x4003, 0xa888,
+	0x7012, 0x9082, 0x0401, 0x1a04, 0x7404, 0xaab4, 0x928a, 0x0002,
+	0x1a04, 0x7404, 0x82ff, 0x1138, 0xa8b8, 0xa9bc, 0x9105, 0x0118,
+	0x2001, 0x7566, 0x0018, 0x9280, 0x755c, 0x2005, 0x7056, 0x7010,
+	0x9015, 0x0904, 0x7547, 0x080c, 0x1004, 0x1118, 0x7007, 0x0004,
+	0x0005, 0x2900, 0x7022, 0x7054, 0x2060, 0xe000, 0xa866, 0x7050,
+	0x2040, 0xa95c, 0xe004, 0x9100, 0xa076, 0xa860, 0xa072, 0xe008,
+	0x920a, 0x1210, 0x900e, 0x2200, 0x7112, 0xe20c, 0x8003, 0x800b,
+	0x9296, 0x0004, 0x0108, 0x9108, 0xa17a, 0x810b, 0xa17e, 0x080c,
+	0x10d5, 0xa06c, 0x908e, 0x0100, 0x0170, 0x9086, 0x0200, 0x0118,
+	0x7007, 0x0007, 0x0005, 0x7020, 0x2048, 0x080c, 0x101d, 0x7014,
+	0x2048, 0x0804, 0x7404, 0x7020, 0x2048, 0x7018, 0xa802, 0xa807,
+	0x0000, 0x2908, 0x2048, 0xa906, 0x711a, 0x0804, 0x74ff, 0x7014,
+	0x2048, 0x7007, 0x0001, 0xa8b4, 0x9005, 0x1128, 0xa8b8, 0xa9bc,
+	0x9105, 0x0108, 0x00b9, 0xa864, 0x9084, 0x00ff, 0x9086, 0x001e,
+	0x0904, 0x77b8, 0x0804, 0x75a8, 0x755e, 0x7562, 0x0002, 0x001d,
+	0x0007, 0x0004, 0x000a, 0x001b, 0x0005, 0x0006, 0x000a, 0x001d,
+	0x0005, 0x0004, 0x0076, 0x0066, 0xafb8, 0xaebc, 0xa804, 0x2050,
+	0xb0c0, 0xb0e2, 0xb0bc, 0xb0de, 0xb0b8, 0xb0d2, 0xb0b4, 0xb0ce,
+	0xb6da, 0xb7d6, 0xb0b0, 0xb0ca, 0xb0ac, 0xb0c6, 0xb0a8, 0xb0ba,
+	0xb0a4, 0xb0b6, 0xb6c2, 0xb7be, 0xb0a0, 0xb0b2, 0xb09c, 0xb0ae,
+	0xb098, 0xb0a2, 0xb094, 0xb09e, 0xb6aa, 0xb7a6, 0xb090, 0xb09a,
+	0xb08c, 0xb096, 0xb088, 0xb08a, 0xb084, 0xb086, 0xb692, 0xb78e,
+	0xb080, 0xb082, 0xb07c, 0xb07e, 0xb078, 0xb072, 0xb074, 0xb06e,
+	0xb67a, 0xb776, 0xb004, 0x9055, 0x1958, 0x006e, 0x007e, 0x0005,
+	0x2009, 0x1833, 0x210c, 0x81ff, 0x1178, 0x080c, 0x5d4d, 0x1108,
+	0x0005, 0x080c, 0x6ac6, 0x0126, 0x2091, 0x8000, 0x080c, 0xbe06,
+	0x080c, 0x688c, 0x012e, 0x0ca0, 0x080c, 0xc20b, 0x1d70, 0x2001,
+	0x0028, 0x900e, 0x0c70, 0x2009, 0x1833, 0x210c, 0x81ff, 0x11d8,
+	0xa888, 0x9005, 0x01e0, 0xa883, 0x0000, 0xa87c, 0xd0f4, 0x0120,
+	0x080c, 0x5e62, 0x1138, 0x0005, 0x9006, 0xa87a, 0x080c, 0x5ddd,
+	0x1108, 0x0005, 0x0126, 0x2091, 0x8000, 0xa87a, 0xa982, 0x080c,
+	0x688c, 0x012e, 0x0cb0, 0x2001, 0x0028, 0x900e, 0x0c98, 0x2001,
+	0x0000, 0x0c80, 0x7018, 0xa802, 0x2908, 0x2048, 0xa906, 0x711a,
+	0x7010, 0x8001, 0x7012, 0x0118, 0x7007, 0x0003, 0x0030, 0x7014,
+	0x2048, 0x7007, 0x0001, 0x7048, 0x080f, 0x0005, 0x00b6, 0x7007,
+	0x0001, 0xa974, 0xa878, 0x9084, 0x00ff, 0x9096, 0x0004, 0x0540,
+	0x20a9, 0x0001, 0x9096, 0x0001, 0x0190, 0x900e, 0x20a9, 0x0800,
+	0x9096, 0x0002, 0x0160, 0x9005, 0x11d8, 0xa974, 0x080c, 0x623e,
+	0x11b8, 0x0066, 0xae80, 0x080c, 0x634e, 0x006e, 0x0088, 0x0046,
+	0x2011, 0x180c, 0x2224, 0xc484, 0x2412, 0x004e, 0x00c6, 0x080c,
+	0x623e, 0x1110, 0x080c, 0x644e, 0x8108, 0x1f04, 0x7627, 0x00ce,
+	0xa87c, 0xd084, 0x1120, 0x080c, 0x101d, 0x00be, 0x0005, 0x0126,
+	0x2091, 0x8000, 0x080c, 0x688c, 0x012e, 0x00be, 0x0005, 0x0126,
+	0x2091, 0x8000, 0x7007, 0x0001, 0x080c, 0x655e, 0x0580, 0x2061,
+	0x1a41, 0x6100, 0xd184, 0x0178, 0xa888, 0x9084, 0x00ff, 0x1550,
+	0x6000, 0xd084, 0x0520, 0x6004, 0x9005, 0x1538, 0x6003, 0x0000,
+	0x600b, 0x0000, 0x00c8, 0x2011, 0x0001, 0xa890, 0x9005, 0x1110,
+	0x2001, 0x001e, 0x8000, 0x6016, 0xa888, 0x9084, 0x00ff, 0x0178,
+	0x6006, 0xa888, 0x8007, 0x9084, 0x00ff, 0x0148, 0x600a, 0xa888,
+	0x8000, 0x1108, 0xc28d, 0x6202, 0x012e, 0x0804, 0x7881, 0x012e,
+	0x0804, 0x787b, 0x012e, 0x0804, 0x7875, 0x012e, 0x0804, 0x7878,
+	0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x080c, 0x655e, 0x05e0,
+	0x2061, 0x1a41, 0x6000, 0xd084, 0x05b8, 0x6204, 0x6308, 0xd08c,
+	0x1530, 0xac78, 0x9484, 0x0003, 0x0170, 0xa988, 0x918c, 0x00ff,
+	0x8001, 0x1120, 0x2100, 0x9210, 0x0620, 0x0028, 0x8001, 0x1508,
+	0x2100, 0x9212, 0x02f0, 0x9484, 0x000c, 0x0188, 0xa988, 0x810f,
+	0x918c, 0x00ff, 0x9082, 0x0004, 0x1120, 0x2100, 0x9318, 0x0288,
+	0x0030, 0x9082, 0x0004, 0x1168, 0x2100, 0x931a, 0x0250, 0xa890,
+	0x9005, 0x0110, 0x8000, 0x6016, 0x6206, 0x630a, 0x012e, 0x0804,
+	0x7881, 0x012e, 0x0804, 0x787e, 0x012e, 0x0804, 0x787b, 0x0126,
+	0x2091, 0x8000, 0x7007, 0x0001, 0x2061, 0x1a41, 0x6300, 0xd38c,
+	0x1120, 0x6308, 0x8318, 0x0220, 0x630a, 0x012e, 0x0804, 0x788f,
+	0x012e, 0x0804, 0x787e, 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000,
+	0x7007, 0x0001, 0xa87c, 0xd0ac, 0x0148, 0x00c6, 0x2061, 0x1a41,
+	0x6000, 0x9084, 0xfcff, 0x6002, 0x00ce, 0x0440, 0xa888, 0x9005,
+	0x05d8, 0xa88c, 0x9065, 0x0598, 0x2001, 0x1833, 0x2004, 0x9005,
+	0x0118, 0x080c, 0x9e62, 0x0068, 0x6017, 0xf400, 0x605b, 0x0000,
+	0xa97c, 0xd1a4, 0x0110, 0xa980, 0x615a, 0x2009, 0x0041, 0x080c,
+	0x9eac, 0xa988, 0x918c, 0xff00, 0x9186, 0x2000, 0x1138, 0x0026,
+	0x900e, 0x2011, 0xfdff, 0x080c, 0x822f, 0x002e, 0xa87c, 0xd0c4,
+	0x0148, 0x2061, 0x1a41, 0x6000, 0xd08c, 0x1120, 0x6008, 0x8000,
+	0x0208, 0x600a, 0x00ce, 0x012e, 0x00be, 0x0804, 0x7881, 0x00ce,
+	0x012e, 0x00be, 0x0804, 0x787b, 0xa984, 0x9186, 0x002e, 0x0d30,
+	0x9186, 0x002d, 0x0d18, 0x9186, 0x0045, 0x0510, 0x9186, 0x002a,
+	0x1130, 0x2001, 0x180c, 0x200c, 0xc194, 0x2102, 0x08b8, 0x9186,
+	0x0020, 0x0158, 0x9186, 0x0029, 0x1d10, 0xa974, 0x080c, 0x623e,
+	0x1968, 0xb800, 0xc0e4, 0xb802, 0x0848, 0xa88c, 0x9065, 0x09b8,
+	0x6007, 0x0024, 0x2001, 0x1957, 0x2004, 0x601a, 0x0804, 0x7716,
+	0xa88c, 0x9065, 0x0960, 0x00e6, 0xa890, 0x9075, 0x2001, 0x1833,
+	0x2004, 0x9005, 0x0150, 0x080c, 0x9e62, 0x8eff, 0x0118, 0x2e60,
+	0x080c, 0x9e62, 0x00ee, 0x0804, 0x7716, 0x6024, 0xc0dc, 0xc0d5,
+	0x6026, 0x2e60, 0x6007, 0x003a, 0xa8a0, 0x9005, 0x0130, 0x6007,
+	0x003b, 0xa8a4, 0x602e, 0xa8a8, 0x6016, 0x6003, 0x0001, 0x080c,
+	0x83f1, 0x080c, 0x8973, 0x00ee, 0x0804, 0x7716, 0x2061, 0x1a41,
+	0x6000, 0xd084, 0x0190, 0xd08c, 0x1904, 0x788f, 0x0126, 0x2091,
+	0x8000, 0x6204, 0x8210, 0x0220, 0x6206, 0x012e, 0x0804, 0x788f,
+	0x012e, 0xa883, 0x0016, 0x0804, 0x7888, 0xa883, 0x0007, 0x0804,
+	0x7888, 0xa864, 0x8007, 0x9084, 0x00ff, 0x0130, 0x8001, 0x1138,
+	0x7007, 0x0001, 0x0069, 0x0005, 0x080c, 0x73fc, 0x0040, 0x7007,
+	0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, 0x77b8, 0x0005,
+	0x00b6, 0x00e6, 0x0126, 0x2091, 0x8000, 0x903e, 0x2061, 0x1800,
+	0x61cc, 0x81ff, 0x1904, 0x783a, 0x6130, 0xd194, 0x1904, 0x7864,
+	0xa878, 0x2070, 0x9e82, 0x1cd0, 0x0a04, 0x782e, 0x6064, 0x9e02,
+	0x1a04, 0x782e, 0x7120, 0x9186, 0x0006, 0x1904, 0x7820, 0x7010,
+	0x905d, 0x0904, 0x783a, 0xb800, 0xd0e4, 0x1904, 0x785e, 0x2061,
+	0x1a41, 0x6100, 0x9184, 0x0301, 0x9086, 0x0001, 0x15a0, 0x7024,
+	0xd0dc, 0x1904, 0x7867, 0xa883, 0x0000, 0xa803, 0x0000, 0x2908,
+	0x7014, 0x9005, 0x1198, 0x7116, 0xa87c, 0xd0f4, 0x1904, 0x786a,
+	0x080c, 0x5386, 0xd09c, 0x1118, 0xa87c, 0xc0cc, 0xa87e, 0x2e60,
+	0x080c, 0x814f, 0x012e, 0x00ee, 0x00be, 0x0005, 0x2048, 0xa800,
+	0x9005, 0x1de0, 0xa902, 0x2148, 0xa87c, 0xd0f4, 0x1904, 0x786a,
+	0x012e, 0x00ee, 0x00be, 0x0005, 0x012e, 0x00ee, 0xa883, 0x0006,
+	0x00be, 0x0804, 0x7888, 0xd184, 0x0db8, 0xd1c4, 0x1190, 0x00a0,
+	0xa974, 0x080c, 0x623e, 0x15d0, 0xb800, 0xd0e4, 0x15b8, 0x7120,
+	0x9186, 0x0007, 0x1118, 0xa883, 0x0002, 0x0490, 0xa883, 0x0008,
+	0x0478, 0xa883, 0x000e, 0x0460, 0xa883, 0x0017, 0x0448, 0xa883,
+	0x0035, 0x0430, 0x080c, 0x538a, 0xd0fc, 0x01e8, 0xa878, 0x2070,
+	0x9e82, 0x1cd0, 0x02c0, 0x6064, 0x9e02, 0x12a8, 0x7120, 0x9186,
+	0x0006, 0x1188, 0x7010, 0x905d, 0x0170, 0xb800, 0xd0bc, 0x0158,
+	0x2039, 0x0001, 0x7000, 0x9086, 0x0007, 0x1904, 0x77c4, 0x7003,
+	0x0002, 0x0804, 0x77c4, 0xa883, 0x0028, 0x0010, 0xa883, 0x0029,
+	0x012e, 0x00ee, 0x00be, 0x0420, 0xa883, 0x002a, 0x0cc8, 0xa883,
+	0x0045, 0x0cb0, 0x2e60, 0x2019, 0x0002, 0x601b, 0x0014, 0x080c,
+	0xd0e5, 0x012e, 0x00ee, 0x00be, 0x0005, 0x2009, 0x003e, 0x0058,
+	0x2009, 0x0004, 0x0040, 0x2009, 0x0006, 0x0028, 0x2009, 0x0016,
+	0x0010, 0x2009, 0x0001, 0xa884, 0x9084, 0xff00, 0x9105, 0xa886,
+	0x0126, 0x2091, 0x8000, 0x080c, 0x688c, 0x012e, 0x0005, 0x080c,
+	0x101d, 0x0005, 0x00d6, 0x080c, 0x8146, 0x00de, 0x0005, 0x00d6,
+	0x00e6, 0x0126, 0x2091, 0x8000, 0x2071, 0x0040, 0x702c, 0xd084,
+	0x01d8, 0x908c, 0x0780, 0x190c, 0x7923, 0xd09c, 0x11a8, 0x2071,
+	0x1800, 0x70bc, 0x90ea, 0x0040, 0x0278, 0x8001, 0x70be, 0x702c,
+	0x2048, 0xa800, 0x702e, 0x9006, 0xa802, 0xa806, 0x2071, 0x0040,
+	0x2900, 0x7022, 0x702c, 0x0c28, 0x012e, 0x00ee, 0x00de, 0x0005,
+	0x0006, 0x9084, 0x0780, 0x190c, 0x7923, 0x000e, 0x0005, 0x00d6,
+	0x00c6, 0x0036, 0x0026, 0x0016, 0x00b6, 0x7007, 0x0001, 0xaa74,
+	0x9282, 0x0004, 0x1a04, 0x7914, 0xa97c, 0x9188, 0x1000, 0x2104,
+	0x905d, 0xb804, 0xd284, 0x0140, 0x05e8, 0x8007, 0x9084, 0x00ff,
+	0x9084, 0x0006, 0x1108, 0x04b0, 0x2b10, 0x080c, 0x9ddc, 0x1118,
+	0x080c, 0x9e7f, 0x05a8, 0x6212, 0xa874, 0x0002, 0x78f2, 0x78f7,
+	0x78fa, 0x7900, 0x2019, 0x0002, 0x080c, 0xd4a6, 0x0060, 0x080c,
+	0xd442, 0x0048, 0x2019, 0x0002, 0xa980, 0x080c, 0xd45d, 0x0018,
+	0xa980, 0x080c, 0xd442, 0x080c, 0x9e32, 0xa887, 0x0000, 0x0126,
+	0x2091, 0x8000, 0x080c, 0x688c, 0x012e, 0x00be, 0x001e, 0x002e,
+	0x003e, 0x00ce, 0x00de, 0x0005, 0xa887, 0x0006, 0x0c80, 0xa887,
+	0x0002, 0x0c68, 0xa887, 0x0005, 0x0c50, 0xa887, 0x0004, 0x0c38,
+	0xa887, 0x0007, 0x0c20, 0x2091, 0x8000, 0x0e04, 0x7925, 0x0006,
+	0x0016, 0x2001, 0x8003, 0x0006, 0x0804, 0x0dbd, 0x2001, 0x1833,
+	0x2004, 0x9005, 0x0005, 0x0005, 0x00f6, 0x2079, 0x0300, 0x2001,
+	0x0200, 0x200c, 0xc1e5, 0xc1dc, 0x2102, 0x2009, 0x0218, 0x210c,
+	0xd1ec, 0x1120, 0x080c, 0x14a7, 0x00fe, 0x0005, 0x2001, 0x020d,
+	0x2003, 0x0020, 0x781f, 0x0300, 0x00fe, 0x0005, 0x781c, 0xd08c,
+	0x0904, 0x79a5, 0x68bc, 0x90aa, 0x0005, 0x0a04, 0x7f54, 0x7d44,
+	0x7c40, 0x9584, 0x00f6, 0x1510, 0x9484, 0x7000, 0x0140, 0x908a,
+	0x2000, 0x1260, 0x9584, 0x0700, 0x8007, 0x0804, 0x79ac, 0x7000,
+	0x9084, 0xff00, 0x9086, 0x8100, 0x0da8, 0x00b0, 0x9484, 0x0fff,
+	0x1130, 0x7000, 0x9084, 0xff00, 0x9086, 0x8100, 0x11c0, 0x080c,
+	0xd88c, 0x080c, 0x7e99, 0x7817, 0x0140, 0x00a8, 0x9584, 0x0076,
+	0x1118, 0x080c, 0x7ef7, 0x19c0, 0xd5a4, 0x0148, 0x0046, 0x0056,
+	0x080c, 0x7a07, 0x080c, 0x21cd, 0x005e, 0x004e, 0x0020, 0x080c,
+	0xd88c, 0x7817, 0x0140, 0x080c, 0x6fb2, 0x0168, 0x2001, 0x0111,
+	0x2004, 0xd08c, 0x0140, 0x688f, 0x0000, 0x2001, 0x0110, 0x2003,
+	0x0008, 0x2003, 0x0000, 0x080c, 0x79e8, 0x2001, 0x19c1, 0x2004,
+	0x9005, 0x090c, 0x8973, 0x0005, 0x0002, 0x79be, 0x7cbb, 0x79b5,
+	0x79b5, 0x79b5, 0x79b5, 0x79b5, 0x79b5, 0x7817, 0x0140, 0x2001,
+	0x19c1, 0x2004, 0x9005, 0x090c, 0x8973, 0x0005, 0x7000, 0x908c,
+	0xff00, 0x9194, 0xf000, 0x810f, 0x9484, 0x0fff, 0x688e, 0x9286,
+	0x2000, 0x1150, 0x6800, 0x9086, 0x0001, 0x1118, 0x080c, 0x53e7,
+	0x0070, 0x080c, 0x7a27, 0x0058, 0x9286, 0x3000, 0x1118, 0x080c,
+	0x7bf6, 0x0028, 0x9286, 0x8000, 0x1110, 0x080c, 0x7dc9, 0x7817,
+	0x0140, 0x2001, 0x19c1, 0x2004, 0x9005, 0x090c, 0x8973, 0x0005,
+	0x2001, 0x1810, 0x2004, 0xd08c, 0x0178, 0x2001, 0x1800, 0x2004,
+	0x9086, 0x0003, 0x1148, 0x0026, 0x0036, 0x2011, 0x8048, 0x2518,
+	0x080c, 0x48d9, 0x003e, 0x002e, 0x0005, 0x0036, 0x0046, 0x0056,
+	0x00f6, 0x2079, 0x0200, 0x2019, 0xfffe, 0x7c30, 0x0050, 0x0036,
+	0x0046, 0x0056, 0x00f6, 0x2079, 0x0200, 0x7d44, 0x7c40, 0x2019,
+	0xffff, 0x2001, 0x1810, 0x2004, 0xd08c, 0x0160, 0x2001, 0x1800,
+	0x2004, 0x9086, 0x0003, 0x1130, 0x0026, 0x2011, 0x8048, 0x080c,
+	0x48d9, 0x002e, 0x00fe, 0x005e, 0x004e, 0x003e, 0x0005, 0x00b6,
+	0x00c6, 0x7010, 0x9084, 0xff00, 0x8007, 0x9096, 0x0001, 0x0120,
+	0x9096, 0x0023, 0x1904, 0x7bc7, 0x9186, 0x0023, 0x15c0, 0x080c,
+	0x7e5e, 0x0904, 0x7bc7, 0x6120, 0x9186, 0x0001, 0x0150, 0x9186,
+	0x0004, 0x0138, 0x9186, 0x0008, 0x0120, 0x9186, 0x000a, 0x1904,
+	0x7bc7, 0x7124, 0x610a, 0x7030, 0x908e, 0x0200, 0x1130, 0x2009,
+	0x0015, 0x080c, 0x9eac, 0x0804, 0x7bc7, 0x908e, 0x0214, 0x0118,
+	0x908e, 0x0210, 0x1130, 0x2009, 0x0015, 0x080c, 0x9eac, 0x0804,
+	0x7bc7, 0x908e, 0x0100, 0x1904, 0x7bc7, 0x7034, 0x9005, 0x1904,
+	0x7bc7, 0x2009, 0x0016, 0x080c, 0x9eac, 0x0804, 0x7bc7, 0x9186,
+	0x0022, 0x1904, 0x7bc7, 0x7030, 0x908e, 0x0300, 0x1580, 0x68d8,
+	0xd0a4, 0x0528, 0xc0b5, 0x68da, 0x7100, 0x918c, 0x00ff, 0x697a,
+	0x7004, 0x687e, 0x00f6, 0x2079, 0x0100, 0x79e6, 0x78ea, 0x0006,
+	0x9084, 0x00ff, 0x0016, 0x2008, 0x080c, 0x26ac, 0x7932, 0x7936,
+	0x001e, 0x000e, 0x00fe, 0x080c, 0x2663, 0x695a, 0x703c, 0x00e6,
+	0x2071, 0x0140, 0x7086, 0x2071, 0x1800, 0x70b2, 0x00ee, 0x7034,
+	0x9005, 0x1904, 0x7bc7, 0x2009, 0x0017, 0x0804, 0x7b77, 0x908e,
+	0x0400, 0x1190, 0x7034, 0x9005, 0x1904, 0x7bc7, 0x080c, 0x6fb2,
+	0x0120, 0x2009, 0x001d, 0x0804, 0x7b77, 0x68d8, 0xc0a5, 0x68da,
+	0x2009, 0x0030, 0x0804, 0x7b77, 0x908e, 0x0500, 0x1140, 0x7034,
+	0x9005, 0x1904, 0x7bc7, 0x2009, 0x0018, 0x0804, 0x7b77, 0x908e,
+	0x2010, 0x1120, 0x2009, 0x0019, 0x0804, 0x7b77, 0x908e, 0x2110,
+	0x1120, 0x2009, 0x001a, 0x0804, 0x7b77, 0x908e, 0x5200, 0x1140,
+	0x7034, 0x9005, 0x1904, 0x7bc7, 0x2009, 0x001b, 0x0804, 0x7b77,
+	0x908e, 0x5000, 0x1140, 0x7034, 0x9005, 0x1904, 0x7bc7, 0x2009,
+	0x001c, 0x0804, 0x7b77, 0x908e, 0x1300, 0x1120, 0x2009, 0x0034,
+	0x0804, 0x7b77, 0x908e, 0x1200, 0x1140, 0x7034, 0x9005, 0x1904,
+	0x7bc7, 0x2009, 0x0024, 0x0804, 0x7b77, 0x908c, 0xff00, 0x918e,
+	0x2400, 0x1170, 0x2009, 0x002d, 0x2001, 0x1810, 0x2004, 0xd09c,
+	0x0904, 0x7b77, 0x080c, 0xc8b8, 0x1904, 0x7bc7, 0x0804, 0x7b75,
+	0x908c, 0xff00, 0x918e, 0x5300, 0x1120, 0x2009, 0x002a, 0x0804,
+	0x7b77, 0x908e, 0x0f00, 0x1120, 0x2009, 0x0020, 0x0804, 0x7b77,
+	0x908e, 0x6104, 0x1528, 0x2029, 0x0205, 0x2011, 0x026d, 0x8208,
+	0x2204, 0x9082, 0x0004, 0x8004, 0x8004, 0x20a8, 0x2011, 0x8015,
+	0x211c, 0x8108, 0x0046, 0x2124, 0x080c, 0x48d9, 0x004e, 0x8108,
+	0x0f04, 0x7b43, 0x9186, 0x0280, 0x1d88, 0x2504, 0x8000, 0x202a,
+	0x2009, 0x0260, 0x0c58, 0x202b, 0x0000, 0x2009, 0x0023, 0x0478,
+	0x908e, 0x6000, 0x1118, 0x2009, 0x003f, 0x0448, 0x908e, 0x7800,
+	0x1118, 0x2009, 0x0045, 0x0418, 0x908e, 0x1000, 0x1118, 0x2009,
+	0x004e, 0x00e8, 0x908e, 0x6300, 0x1118, 0x2009, 0x004a, 0x00b8,
+	0x908c, 0xff00, 0x918e, 0x5600, 0x1118, 0x2009, 0x004f, 0x0078,
+	0x908c, 0xff00, 0x918e, 0x5700, 0x1118, 0x2009, 0x0050, 0x0038,
+	0x2009, 0x001d, 0x6838, 0xd0d4, 0x0110, 0x2009, 0x004c, 0x0016,
+	0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x2663, 0x1904,
+	0x7bca, 0x080c, 0x61de, 0x1904, 0x7bca, 0xbe12, 0xbd16, 0x001e,
+	0x0016, 0x080c, 0x6fb2, 0x01c0, 0x68d8, 0xd08c, 0x1148, 0x7000,
+	0x9084, 0x00ff, 0x1188, 0x7004, 0x9084, 0xff00, 0x1168, 0x0040,
+	0x6878, 0x9606, 0x1148, 0x687c, 0x9506, 0x9084, 0xff00, 0x1120,
+	0x9584, 0x00ff, 0xb8b2, 0x0080, 0xb8b0, 0x9005, 0x1168, 0x9186,
 	0x0046, 0x1150, 0x6878, 0x9606, 0x1138, 0x687c, 0x9506, 0x9084,
-	0xff00, 0x1110, 0x001e, 0x0098, 0x080c, 0x9dc3, 0x01a8, 0x2b08,
+	0xff00, 0x1110, 0x001e, 0x0098, 0x080c, 0x9ddc, 0x01a8, 0x2b08,
 	0x6112, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x9186, 0x004c,
-	0x1110, 0x6023, 0x000a, 0x0016, 0x001e, 0x080c, 0x9e93, 0x00ce,
+	0x1110, 0x6023, 0x000a, 0x0016, 0x001e, 0x080c, 0x9eac, 0x00ce,
 	0x00be, 0x0005, 0x001e, 0x0cd8, 0x2001, 0x180e, 0x2004, 0xd0ec,
-	0x0120, 0x2011, 0x8049, 0x080c, 0x48d2, 0x080c, 0x9e66, 0x0d90,
+	0x0120, 0x2011, 0x8049, 0x080c, 0x48d9, 0x080c, 0x9e7f, 0x0d90,
 	0x2b08, 0x6112, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x0016,
 	0x9186, 0x0017, 0x0118, 0x9186, 0x0030, 0x1128, 0x6007, 0x0009,
 	0x6017, 0x2900, 0x0020, 0x6007, 0x0051, 0x6017, 0x0000, 0x602f,
-	0x0009, 0x6003, 0x0001, 0x080c, 0x8411, 0x08a0, 0x080c, 0x30f6,
+	0x0009, 0x6003, 0x0001, 0x080c, 0x8439, 0x08a0, 0x080c, 0x30fd,
 	0x1140, 0x7010, 0x9084, 0xff00, 0x8007, 0x908e, 0x0008, 0x1108,
 	0x0009, 0x0005, 0x00b6, 0x00c6, 0x0046, 0x7000, 0x908c, 0xff00,
-	0x810f, 0x9186, 0x0033, 0x11e8, 0x080c, 0x7e36, 0x0904, 0x7c2b,
+	0x810f, 0x9186, 0x0033, 0x11e8, 0x080c, 0x7e5e, 0x0904, 0x7c53,
 	0x7124, 0x610a, 0x7030, 0x908e, 0x0200, 0x1140, 0x7034, 0x9005,
-	0x15d0, 0x2009, 0x0015, 0x080c, 0x9e93, 0x04a8, 0x908e, 0x0100,
-	0x1590, 0x7034, 0x9005, 0x1578, 0x2009, 0x0016, 0x080c, 0x9e93,
+	0x15d0, 0x2009, 0x0015, 0x080c, 0x9eac, 0x04a8, 0x908e, 0x0100,
+	0x1590, 0x7034, 0x9005, 0x1578, 0x2009, 0x0016, 0x080c, 0x9eac,
 	0x0450, 0x9186, 0x0032, 0x1538, 0x7030, 0x908e, 0x1400, 0x1518,
 	0x2009, 0x0038, 0x0016, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c,
-	0x080c, 0x2663, 0x11b8, 0x080c, 0x61d7, 0x11a0, 0xbe12, 0xbd16,
-	0x080c, 0x9dc3, 0x0178, 0x2b08, 0x6112, 0x080c, 0xbf73, 0x6023,
-	0x0004, 0x7120, 0x610a, 0x001e, 0x080c, 0x9e93, 0x080c, 0x894b,
+	0x080c, 0x2663, 0x11b8, 0x080c, 0x61de, 0x11a0, 0xbe12, 0xbd16,
+	0x080c, 0x9ddc, 0x0178, 0x2b08, 0x6112, 0x080c, 0xbf8c, 0x6023,
+	0x0004, 0x7120, 0x610a, 0x001e, 0x080c, 0x9eac, 0x080c, 0x8973,
 	0x0010, 0x00ce, 0x001e, 0x004e, 0x00ce, 0x00be, 0x0005, 0x00b6,
 	0x0046, 0x00e6, 0x00d6, 0x2028, 0x2130, 0x9696, 0x00ff, 0x11b8,
 	0x9592, 0xfffc, 0x02a0, 0x9596, 0xfffd, 0x1120, 0x2009, 0x007f,
-	0x0804, 0x7c8d, 0x9596, 0xfffe, 0x1120, 0x2009, 0x007e, 0x0804,
-	0x7c8d, 0x9596, 0xfffc, 0x1118, 0x2009, 0x0080, 0x04f0, 0x2011,
+	0x0804, 0x7cb5, 0x9596, 0xfffe, 0x1120, 0x2009, 0x007e, 0x0804,
+	0x7cb5, 0x9596, 0xfffc, 0x1118, 0x2009, 0x0080, 0x04f0, 0x2011,
 	0x0000, 0x2019, 0x1836, 0x231c, 0xd3ac, 0x0130, 0x9026, 0x20a9,
 	0x0800, 0x2071, 0x1000, 0x0030, 0x2021, 0x0081, 0x20a9, 0x077f,
 	0x2071, 0x1081, 0x2e1c, 0x93dd, 0x0000, 0x1140, 0x82ff, 0x11d0,
 	0x9496, 0x00ff, 0x01b8, 0x2410, 0xc2fd, 0x00a0, 0xbf10, 0x2600,
 	0x9706, 0xb814, 0x1120, 0x9546, 0x1110, 0x2408, 0x00b0, 0x9745,
 	0x1148, 0x94c6, 0x007e, 0x0130, 0x94c6, 0x007f, 0x0118, 0x94c6,
-	0x0080, 0x1d20, 0x8420, 0x8e70, 0x1f04, 0x7c62, 0x82ff, 0x1118,
+	0x0080, 0x1d20, 0x8420, 0x8e70, 0x1f04, 0x7c8a, 0x82ff, 0x1118,
 	0x9085, 0x0001, 0x0018, 0xc2fc, 0x2208, 0x9006, 0x00de, 0x00ee,
 	0x004e, 0x00be, 0x0005, 0x7000, 0x908c, 0xff00, 0x810f, 0x9184,
-	0x000f, 0x0002, 0x7caa, 0x7caa, 0x7caa, 0x7e48, 0x7caa, 0x7cb3,
-	0x7cde, 0x7d6c, 0x7caa, 0x7caa, 0x7caa, 0x7caa, 0x7caa, 0x7caa,
-	0x7caa, 0x7caa, 0x7817, 0x0140, 0x2001, 0x19c1, 0x2004, 0x9005,
-	0x090c, 0x894b, 0x0005, 0x00b6, 0x7110, 0xd1bc, 0x01e8, 0x7120,
+	0x000f, 0x0002, 0x7cd2, 0x7cd2, 0x7cd2, 0x7e70, 0x7cd2, 0x7cdb,
+	0x7d06, 0x7d94, 0x7cd2, 0x7cd2, 0x7cd2, 0x7cd2, 0x7cd2, 0x7cd2,
+	0x7cd2, 0x7cd2, 0x7817, 0x0140, 0x2001, 0x19c1, 0x2004, 0x9005,
+	0x090c, 0x8973, 0x0005, 0x00b6, 0x7110, 0xd1bc, 0x01e8, 0x7120,
 	0x2160, 0x9c8c, 0x0007, 0x11c0, 0x9c8a, 0x1cd0, 0x02a8, 0x6864,
 	0x9c02, 0x1290, 0x7008, 0x9084, 0x00ff, 0x6110, 0x2158, 0xb910,
 	0x9106, 0x1150, 0x700c, 0xb914, 0x9106, 0x1130, 0x7124, 0x610a,
-	0x2009, 0x0046, 0x080c, 0x9e93, 0x7817, 0x0140, 0x2001, 0x19c1,
-	0x2004, 0x9005, 0x090c, 0x894b, 0x00be, 0x0005, 0x00b6, 0x00c6,
-	0x9484, 0x0fff, 0x0904, 0x7d42, 0x7110, 0xd1bc, 0x1904, 0x7d42,
+	0x2009, 0x0046, 0x080c, 0x9eac, 0x7817, 0x0140, 0x2001, 0x19c1,
+	0x2004, 0x9005, 0x090c, 0x8973, 0x00be, 0x0005, 0x00b6, 0x00c6,
+	0x9484, 0x0fff, 0x0904, 0x7d6a, 0x7110, 0xd1bc, 0x1904, 0x7d6a,
 	0x7108, 0x700c, 0x2028, 0x918c, 0x00ff, 0x2130, 0x9094, 0xff00,
-	0x15b0, 0x81ff, 0x15a0, 0x9080, 0x3131, 0x200d, 0x918c, 0xff00,
-	0x810f, 0x2001, 0x0080, 0x9106, 0x0904, 0x7d42, 0x080c, 0x61d7,
-	0x1904, 0x7d42, 0xbe12, 0xbd16, 0xb800, 0xd0ec, 0x15d8, 0xba04,
-	0x9294, 0xff00, 0x9286, 0x0600, 0x11a0, 0x080c, 0x9dc3, 0x05e8,
+	0x15b0, 0x81ff, 0x15a0, 0x9080, 0x3138, 0x200d, 0x918c, 0xff00,
+	0x810f, 0x2001, 0x0080, 0x9106, 0x0904, 0x7d6a, 0x080c, 0x61de,
+	0x1904, 0x7d6a, 0xbe12, 0xbd16, 0xb800, 0xd0ec, 0x15d8, 0xba04,
+	0x9294, 0xff00, 0x9286, 0x0600, 0x11a0, 0x080c, 0x9ddc, 0x05e8,
 	0x2b08, 0x7028, 0x604a, 0x702c, 0x6046, 0x6112, 0x6023, 0x0006,
-	0x7120, 0x610a, 0x7130, 0x6156, 0x2009, 0x0044, 0x080c, 0xcaf6,
-	0x0408, 0x080c, 0x655b, 0x1138, 0xb807, 0x0606, 0x0c30, 0x190c,
-	0x7c2f, 0x11c0, 0x0898, 0x080c, 0x9dc3, 0x2b08, 0x0198, 0x6112,
+	0x7120, 0x610a, 0x7130, 0x6156, 0x2009, 0x0044, 0x080c, 0xcb14,
+	0x0408, 0x080c, 0x6562, 0x1138, 0xb807, 0x0606, 0x0c30, 0x190c,
+	0x7c57, 0x11c0, 0x0898, 0x080c, 0x9ddc, 0x2b08, 0x0198, 0x6112,
 	0x6023, 0x0004, 0x7120, 0x610a, 0x9286, 0x0400, 0x1118, 0x6007,
-	0x0005, 0x0010, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x8411,
-	0x080c, 0x894b, 0x7817, 0x0140, 0x2001, 0x19c1, 0x2004, 0x9005,
-	0x090c, 0x894b, 0x00ce, 0x00be, 0x0005, 0x2001, 0x180e, 0x2004,
-	0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x48d2, 0x080c, 0x9e66,
+	0x0005, 0x0010, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x8439,
+	0x080c, 0x8973, 0x7817, 0x0140, 0x2001, 0x19c1, 0x2004, 0x9005,
+	0x090c, 0x8973, 0x00ce, 0x00be, 0x0005, 0x2001, 0x180e, 0x2004,
+	0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x48d9, 0x080c, 0x9e7f,
 	0x0d48, 0x2b08, 0x6112, 0x6023, 0x0006, 0x7120, 0x610a, 0x7130,
 	0x6156, 0x6017, 0xf300, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c,
-	0x83c9, 0x080c, 0x894b, 0x08b0, 0x00b6, 0x7110, 0xd1bc, 0x01e8,
+	0x83f1, 0x080c, 0x8973, 0x08b0, 0x00b6, 0x7110, 0xd1bc, 0x01e8,
 	0x7020, 0x2060, 0x9c84, 0x0007, 0x11c0, 0x9c82, 0x1cd0, 0x02a8,
 	0x6864, 0x9c02, 0x1290, 0x7008, 0x9084, 0x00ff, 0x6110, 0x2158,
 	0xb910, 0x9106, 0x1150, 0x700c, 0xb914, 0x9106, 0x1130, 0x7124,
-	0x610a, 0x2009, 0x0045, 0x080c, 0x9e93, 0x7817, 0x0140, 0x2001,
-	0x19c1, 0x2004, 0x9005, 0x090c, 0x894b, 0x00be, 0x0005, 0x6120,
+	0x610a, 0x2009, 0x0045, 0x080c, 0x9eac, 0x7817, 0x0140, 0x2001,
+	0x19c1, 0x2004, 0x9005, 0x090c, 0x8973, 0x00be, 0x0005, 0x6120,
 	0x9186, 0x0002, 0x0128, 0x9186, 0x0005, 0x0110, 0x9085, 0x0001,
-	0x0005, 0x080c, 0x30f6, 0x1168, 0x7010, 0x9084, 0xff00, 0x8007,
+	0x0005, 0x080c, 0x30fd, 0x1168, 0x7010, 0x9084, 0xff00, 0x8007,
 	0x9086, 0x0000, 0x1130, 0x9184, 0x000f, 0x908a, 0x0006, 0x1208,
-	0x000b, 0x0005, 0x7db8, 0x7db9, 0x7db8, 0x7db8, 0x7e18, 0x7e27,
+	0x000b, 0x0005, 0x7de0, 0x7de1, 0x7de0, 0x7de0, 0x7e40, 0x7e4f,
 	0x0005, 0x00b6, 0x7110, 0xd1bc, 0x0120, 0x702c, 0xd084, 0x0904,
-	0x7e16, 0x700c, 0x7108, 0x080c, 0x2663, 0x1904, 0x7e16, 0x080c,
-	0x61d7, 0x1904, 0x7e16, 0xbe12, 0xbd16, 0x7110, 0xd1bc, 0x01d8,
-	0x080c, 0x655b, 0x0118, 0x9086, 0x0004, 0x1588, 0x00c6, 0x080c,
-	0x7e36, 0x00ce, 0x05d8, 0x080c, 0x9dc3, 0x2b08, 0x05b8, 0x6112,
-	0x080c, 0xbf73, 0x6023, 0x0002, 0x7120, 0x610a, 0x2009, 0x0088,
-	0x080c, 0x9e93, 0x0458, 0x080c, 0x655b, 0x0148, 0x9086, 0x0004,
-	0x0130, 0x080c, 0x6563, 0x0118, 0x9086, 0x0004, 0x1180, 0x080c,
-	0x9dc3, 0x2b08, 0x01d8, 0x6112, 0x080c, 0xbf73, 0x6023, 0x0005,
-	0x7120, 0x610a, 0x2009, 0x0088, 0x080c, 0x9e93, 0x0078, 0x080c,
-	0x9dc3, 0x2b08, 0x0158, 0x6112, 0x080c, 0xbf73, 0x6023, 0x0004,
-	0x7120, 0x610a, 0x2009, 0x0001, 0x080c, 0x9e93, 0x00be, 0x0005,
-	0x7110, 0xd1bc, 0x0158, 0x00d1, 0x0148, 0x080c, 0x7d97, 0x1130,
-	0x7124, 0x610a, 0x2009, 0x0089, 0x080c, 0x9e93, 0x0005, 0x7110,
-	0xd1bc, 0x0158, 0x0059, 0x0148, 0x080c, 0x7d97, 0x1130, 0x7124,
-	0x610a, 0x2009, 0x008a, 0x080c, 0x9e93, 0x0005, 0x7020, 0x2060,
+	0x7e3e, 0x700c, 0x7108, 0x080c, 0x2663, 0x1904, 0x7e3e, 0x080c,
+	0x61de, 0x1904, 0x7e3e, 0xbe12, 0xbd16, 0x7110, 0xd1bc, 0x01d8,
+	0x080c, 0x6562, 0x0118, 0x9086, 0x0004, 0x1588, 0x00c6, 0x080c,
+	0x7e5e, 0x00ce, 0x05d8, 0x080c, 0x9ddc, 0x2b08, 0x05b8, 0x6112,
+	0x080c, 0xbf8c, 0x6023, 0x0002, 0x7120, 0x610a, 0x2009, 0x0088,
+	0x080c, 0x9eac, 0x0458, 0x080c, 0x6562, 0x0148, 0x9086, 0x0004,
+	0x0130, 0x080c, 0x656a, 0x0118, 0x9086, 0x0004, 0x1180, 0x080c,
+	0x9ddc, 0x2b08, 0x01d8, 0x6112, 0x080c, 0xbf8c, 0x6023, 0x0005,
+	0x7120, 0x610a, 0x2009, 0x0088, 0x080c, 0x9eac, 0x0078, 0x080c,
+	0x9ddc, 0x2b08, 0x0158, 0x6112, 0x080c, 0xbf8c, 0x6023, 0x0004,
+	0x7120, 0x610a, 0x2009, 0x0001, 0x080c, 0x9eac, 0x00be, 0x0005,
+	0x7110, 0xd1bc, 0x0158, 0x00d1, 0x0148, 0x080c, 0x7dbf, 0x1130,
+	0x7124, 0x610a, 0x2009, 0x0089, 0x080c, 0x9eac, 0x0005, 0x7110,
+	0xd1bc, 0x0158, 0x0059, 0x0148, 0x080c, 0x7dbf, 0x1130, 0x7124,
+	0x610a, 0x2009, 0x008a, 0x080c, 0x9eac, 0x0005, 0x7020, 0x2060,
 	0x9c84, 0x0007, 0x1158, 0x9c82, 0x1cd0, 0x0240, 0x2001, 0x1819,
 	0x2004, 0x9c02, 0x1218, 0x9085, 0x0001, 0x0005, 0x9006, 0x0ce8,
 	0x00b6, 0x7110, 0xd1bc, 0x11d8, 0x7024, 0x2060, 0x9c84, 0x0007,
 	0x11b0, 0x9c82, 0x1cd0, 0x0298, 0x6864, 0x9c02, 0x1280, 0x7008,
 	0x9084, 0x00ff, 0x6110, 0x2158, 0xb910, 0x9106, 0x1140, 0x700c,
-	0xb914, 0x9106, 0x1120, 0x2009, 0x0051, 0x080c, 0x9e93, 0x7817,
-	0x0140, 0x2001, 0x19c1, 0x2004, 0x9005, 0x090c, 0x894b, 0x00be,
+	0xb914, 0x9106, 0x1120, 0x2009, 0x0051, 0x080c, 0x9eac, 0x7817,
+	0x0140, 0x2001, 0x19c1, 0x2004, 0x9005, 0x090c, 0x8973, 0x00be,
 	0x0005, 0x2031, 0x0105, 0x0069, 0x0005, 0x2031, 0x0206, 0x0049,
 	0x0005, 0x2031, 0x0207, 0x0029, 0x0005, 0x2031, 0x0213, 0x0009,
 	0x0005, 0x00c6, 0x0096, 0x00f6, 0x7000, 0x9084, 0xf000, 0x9086,
-	0xc000, 0x05d0, 0x080c, 0x9dc3, 0x05b8, 0x0066, 0x00c6, 0x0046,
+	0xc000, 0x05d0, 0x080c, 0x9ddc, 0x05b8, 0x0066, 0x00c6, 0x0046,
 	0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x2663, 0x15a0,
-	0x080c, 0x61d7, 0x1588, 0xbe12, 0xbd16, 0x2b00, 0x004e, 0x00ce,
-	0x6012, 0x080c, 0xbf73, 0x080c, 0x0feb, 0x0510, 0x2900, 0x605a,
+	0x080c, 0x61de, 0x1588, 0xbe12, 0xbd16, 0x2b00, 0x004e, 0x00ce,
+	0x6012, 0x080c, 0xbf8c, 0x080c, 0x0feb, 0x0510, 0x2900, 0x605a,
 	0x9006, 0xa802, 0xa866, 0xac6a, 0xa85c, 0x90f8, 0x001b, 0x20a9,
 	0x000e, 0xa860, 0x20e8, 0x20e1, 0x0000, 0x2fa0, 0x2e98, 0x4003,
 	0x006e, 0x6616, 0x6007, 0x003e, 0x6023, 0x0001, 0x6003, 0x0001,
-	0x080c, 0x8411, 0x080c, 0x894b, 0x00fe, 0x009e, 0x00ce, 0x0005,
-	0x080c, 0x9e19, 0x006e, 0x0cc0, 0x004e, 0x00ce, 0x0cc8, 0x00c6,
+	0x080c, 0x8439, 0x080c, 0x8973, 0x00fe, 0x009e, 0x00ce, 0x0005,
+	0x080c, 0x9e32, 0x006e, 0x0cc0, 0x004e, 0x00ce, 0x0cc8, 0x00c6,
 	0x7000, 0x908c, 0xff00, 0x9184, 0xf000, 0x810f, 0x9086, 0x2000,
-	0x1904, 0x7f26, 0x9186, 0x0022, 0x15f0, 0x2001, 0x0111, 0x2004,
-	0x9005, 0x1904, 0x7f28, 0x7030, 0x908e, 0x0400, 0x0904, 0x7f28,
+	0x1904, 0x7f4e, 0x9186, 0x0022, 0x15f0, 0x2001, 0x0111, 0x2004,
+	0x9005, 0x1904, 0x7f50, 0x7030, 0x908e, 0x0400, 0x0904, 0x7f50,
 	0x908e, 0x6000, 0x05e8, 0x908e, 0x5400, 0x05d0, 0x908e, 0x0300,
 	0x11d8, 0x2009, 0x1836, 0x210c, 0xd18c, 0x1590, 0xd1a4, 0x1580,
-	0x080c, 0x6519, 0x0558, 0x68ac, 0x9084, 0x00ff, 0x7100, 0x918c,
+	0x080c, 0x6520, 0x0558, 0x68ac, 0x9084, 0x00ff, 0x7100, 0x918c,
 	0x00ff, 0x9106, 0x1518, 0x687c, 0x69ac, 0x918c, 0xff00, 0x9105,
 	0x7104, 0x9106, 0x11d8, 0x00e0, 0x2009, 0x0103, 0x210c, 0xd1b4,
 	0x11a8, 0x908e, 0x5200, 0x09e8, 0x908e, 0x0500, 0x09d0, 0x908e,
-	0x5000, 0x09b8, 0x0058, 0x9186, 0x0023, 0x1140, 0x080c, 0x7e36,
+	0x5000, 0x09b8, 0x0058, 0x9186, 0x0023, 0x1140, 0x080c, 0x7e5e,
 	0x0128, 0x6004, 0x9086, 0x0002, 0x0118, 0x0000, 0x9006, 0x0010,
 	0x9085, 0x0001, 0x00ce, 0x0005, 0x00f6, 0x2079, 0x0200, 0x7800,
 	0xc0e5, 0xc0cc, 0x7802, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x1800,
@@ -3869,20 +3874,20 @@
 	0x7802, 0x00fe, 0x0005, 0x00e6, 0x2071, 0x1800, 0x7034, 0xc084,
 	0x7036, 0x00ee, 0x0005, 0x2071, 0x19cb, 0x7003, 0x0003, 0x700f,
 	0x0361, 0x9006, 0x701a, 0x7072, 0x7012, 0x7017, 0x1cd0, 0x7007,
-	0x0000, 0x7026, 0x702b, 0x93a9, 0x7032, 0x7037, 0x9417, 0x703f,
-	0xffff, 0x7042, 0x7047, 0x521e, 0x704a, 0x705b, 0x80ab, 0x080c,
+	0x0000, 0x7026, 0x702b, 0x93c2, 0x7032, 0x7037, 0x9430, 0x703f,
+	0xffff, 0x7042, 0x7047, 0x5225, 0x704a, 0x705b, 0x80d3, 0x080c,
 	0x1004, 0x090c, 0x0db4, 0x2900, 0x703a, 0xa867, 0x0003, 0xa86f,
-	0x0100, 0xa8ab, 0xdcb0, 0x0005, 0x2071, 0x19cb, 0x1d04, 0x7fff,
+	0x0100, 0xa8ab, 0xdcb0, 0x0005, 0x2071, 0x19cb, 0x1d04, 0x8027,
 	0x2091, 0x6000, 0x700c, 0x8001, 0x700e, 0x1510, 0x2001, 0x1875,
 	0x2004, 0xd0c4, 0x0158, 0x3a00, 0xd08c, 0x1140, 0x20d1, 0x0000,
 	0x20d1, 0x0001, 0x20d1, 0x0000, 0x080c, 0x0db4, 0x700f, 0x0361,
-	0x7007, 0x0001, 0x0126, 0x2091, 0x8000, 0x080c, 0x80f0, 0x7040,
+	0x7007, 0x0001, 0x0126, 0x2091, 0x8000, 0x080c, 0x8118, 0x7040,
 	0x900d, 0x0148, 0x8109, 0x7142, 0x1130, 0x7044, 0x080f, 0x0018,
 	0x0126, 0x2091, 0x8000, 0x7024, 0x900d, 0x0188, 0x7020, 0x8001,
 	0x7022, 0x1168, 0x7023, 0x0009, 0x8109, 0x7126, 0x9186, 0x03e8,
 	0x1110, 0x7028, 0x080f, 0x81ff, 0x1110, 0x7028, 0x080f, 0x7030,
 	0x900d, 0x0180, 0x702c, 0x8001, 0x702e, 0x1160, 0x702f, 0x0009,
-	0x8109, 0x7132, 0x0128, 0x9184, 0x007f, 0x090c, 0x9524, 0x0010,
+	0x8109, 0x7132, 0x0128, 0x9184, 0x007f, 0x090c, 0x953d, 0x0010,
 	0x7034, 0x080f, 0x703c, 0x9005, 0x0118, 0x0310, 0x8001, 0x703e,
 	0x704c, 0x900d, 0x0168, 0x7048, 0x8001, 0x704a, 0x1148, 0x704b,
 	0x0009, 0x8109, 0x714e, 0x1120, 0x7150, 0x714e, 0x7058, 0x080f,
@@ -3890,22 +3895,22 @@
 	0x8001, 0x706e, 0x1138, 0x706f, 0x0009, 0x8109, 0x7172, 0x1110,
 	0x7074, 0x080f, 0x001e, 0x7008, 0x8001, 0x700a, 0x1138, 0x700b,
 	0x0009, 0x8109, 0x711a, 0x1110, 0x701c, 0x080f, 0x012e, 0x7004,
-	0x0002, 0x8027, 0x8028, 0x8044, 0x00e6, 0x2071, 0x19cb, 0x7018,
+	0x0002, 0x804f, 0x8050, 0x806c, 0x00e6, 0x2071, 0x19cb, 0x7018,
 	0x9005, 0x1120, 0x711a, 0x721e, 0x700b, 0x0009, 0x00ee, 0x0005,
 	0x00e6, 0x0006, 0x2071, 0x19cb, 0x701c, 0x9206, 0x1120, 0x701a,
 	0x701e, 0x7072, 0x7076, 0x000e, 0x00ee, 0x0005, 0x00e6, 0x2071,
 	0x19cb, 0xb888, 0x9102, 0x0208, 0xb98a, 0x00ee, 0x0005, 0x0005,
-	0x00b6, 0x7110, 0x080c, 0x6237, 0x1168, 0xb888, 0x8001, 0x0250,
-	0xb88a, 0x1140, 0x0126, 0x2091, 0x8000, 0x0016, 0x080c, 0x894b,
+	0x00b6, 0x7110, 0x080c, 0x623e, 0x1168, 0xb888, 0x8001, 0x0250,
+	0xb88a, 0x1140, 0x0126, 0x2091, 0x8000, 0x0016, 0x080c, 0x8973,
 	0x001e, 0x012e, 0x8108, 0x9182, 0x0800, 0x0218, 0x900e, 0x7007,
 	0x0002, 0x7112, 0x00be, 0x0005, 0x7014, 0x2060, 0x0126, 0x2091,
 	0x8000, 0x6040, 0x9005, 0x0128, 0x8001, 0x6042, 0x1110, 0x080c,
-	0xbe04, 0x6018, 0x9005, 0x0528, 0x8001, 0x601a, 0x1510, 0x6120,
-	0x9186, 0x0003, 0x0118, 0x9186, 0x0006, 0x11c8, 0x080c, 0xbafe,
+	0xbe1d, 0x6018, 0x9005, 0x0528, 0x8001, 0x601a, 0x1510, 0x6120,
+	0x9186, 0x0003, 0x0118, 0x9186, 0x0006, 0x11c8, 0x080c, 0xbb17,
 	0x01b0, 0x6014, 0x2048, 0xa884, 0x908a, 0x199a, 0x0280, 0x9082,
 	0x1999, 0xa886, 0x908a, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003,
 	0x800b, 0x810b, 0x9108, 0x611a, 0xa87c, 0xd0e4, 0x0110, 0x080c,
-	0xb7fc, 0x012e, 0x9c88, 0x0018, 0x7116, 0x2001, 0x1819, 0x2004,
+	0xb815, 0x012e, 0x9c88, 0x0018, 0x7116, 0x2001, 0x1819, 0x2004,
 	0x9102, 0x0220, 0x7017, 0x1cd0, 0x7007, 0x0000, 0x0005, 0x00e6,
 	0x2071, 0x19cb, 0x7027, 0x07d0, 0x7023, 0x0009, 0x00ee, 0x0005,
 	0x2001, 0x19d4, 0x2003, 0x0000, 0x0005, 0x00e6, 0x2071, 0x19cb,
@@ -3915,7 +3920,7 @@
 	0x2001, 0x19d9, 0x2044, 0xa06c, 0x9086, 0x0000, 0x0150, 0x7068,
 	0xa09a, 0x7064, 0xa096, 0x7060, 0xa092, 0x705c, 0xa08e, 0x080c,
 	0x10d5, 0x002e, 0x008e, 0x0005, 0x0006, 0x0016, 0x0096, 0x00a6,
-	0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0156, 0x080c, 0x7f74,
+	0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0156, 0x080c, 0x7f9c,
 	0x015e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e,
 	0x001e, 0x000e, 0x0005, 0x00e6, 0x2071, 0x19cb, 0x7172, 0x7276,
 	0x706f, 0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071, 0x19cb,
@@ -3930,93 +3935,93 @@
 	0x908a, 0x199a, 0x1638, 0x9005, 0x1150, 0x00c6, 0x2061, 0x1a41,
 	0x6014, 0x00ce, 0x9005, 0x1130, 0x2001, 0x001e, 0x0018, 0x908e,
 	0xffff, 0x01b0, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0xa87c,
-	0x908c, 0x00c0, 0x918e, 0x00c0, 0x0904, 0x81b1, 0xd0b4, 0x1168,
-	0xd0bc, 0x1904, 0x818a, 0x2009, 0x0006, 0x080c, 0x81de, 0x0005,
+	0x908c, 0x00c0, 0x918e, 0x00c0, 0x0904, 0x81d9, 0xd0b4, 0x1168,
+	0xd0bc, 0x1904, 0x81b2, 0x2009, 0x0006, 0x080c, 0x8206, 0x0005,
 	0x900e, 0x0c60, 0x2001, 0x1999, 0x08b0, 0xd0fc, 0x0160, 0x908c,
-	0x0003, 0x0120, 0x918e, 0x0003, 0x1904, 0x81d8, 0x908c, 0x2020,
+	0x0003, 0x0120, 0x918e, 0x0003, 0x1904, 0x8200, 0x908c, 0x2020,
 	0x918e, 0x2020, 0x01a8, 0x6024, 0xd0d4, 0x11e8, 0x2009, 0x1875,
 	0x2104, 0xd084, 0x1138, 0x87ff, 0x1120, 0x2009, 0x0043, 0x0804,
-	0x9e93, 0x0005, 0x87ff, 0x1de8, 0x2009, 0x0042, 0x0804, 0x9e93,
+	0x9eac, 0x0005, 0x87ff, 0x1de8, 0x2009, 0x0042, 0x0804, 0x9eac,
 	0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1ac, 0x0d20, 0x6024,
 	0xc0cd, 0x6026, 0x0c00, 0xc0d4, 0x6026, 0xa890, 0x602e, 0xa88c,
 	0x6032, 0x08e0, 0xd0fc, 0x0160, 0x908c, 0x0003, 0x0120, 0x918e,
-	0x0003, 0x1904, 0x81d8, 0x908c, 0x2020, 0x918e, 0x2020, 0x0170,
+	0x0003, 0x1904, 0x8200, 0x908c, 0x2020, 0x918e, 0x2020, 0x0170,
 	0x0076, 0x00f6, 0x2c78, 0x080c, 0x1648, 0x00fe, 0x007e, 0x87ff,
-	0x1120, 0x2009, 0x0042, 0x080c, 0x9e93, 0x0005, 0x6110, 0x00b6,
+	0x1120, 0x2009, 0x0042, 0x080c, 0x9eac, 0x0005, 0x6110, 0x00b6,
 	0x2158, 0xb900, 0x00be, 0xd1ac, 0x0d58, 0x6124, 0xc1cd, 0x6126,
 	0x0c38, 0xd0fc, 0x0188, 0x908c, 0x2020, 0x918e, 0x2020, 0x01a8,
 	0x9084, 0x0003, 0x908e, 0x0002, 0x0148, 0x87ff, 0x1120, 0x2009,
-	0x0041, 0x080c, 0x9e93, 0x0005, 0x00b9, 0x0ce8, 0x87ff, 0x1dd8,
-	0x2009, 0x0043, 0x080c, 0x9e93, 0x0cb0, 0x6110, 0x00b6, 0x2158,
+	0x0041, 0x080c, 0x9eac, 0x0005, 0x00b9, 0x0ce8, 0x87ff, 0x1dd8,
+	0x2009, 0x0043, 0x080c, 0x9eac, 0x0cb0, 0x6110, 0x00b6, 0x2158,
 	0xb900, 0x00be, 0xd1ac, 0x0d20, 0x6124, 0xc1cd, 0x6126, 0x0c00,
 	0x2009, 0x0004, 0x0019, 0x0005, 0x2009, 0x0001, 0x0096, 0x080c,
-	0xbafe, 0x0518, 0x6014, 0x2048, 0xa982, 0xa800, 0x6016, 0x9186,
+	0xbb17, 0x0518, 0x6014, 0x2048, 0xa982, 0xa800, 0x6016, 0x9186,
 	0x0001, 0x1188, 0xa97c, 0x918c, 0x8100, 0x918e, 0x8100, 0x1158,
 	0x00c6, 0x2061, 0x1a41, 0x6200, 0xd28c, 0x1120, 0x6204, 0x8210,
-	0x0208, 0x6206, 0x00ce, 0x080c, 0x66bf, 0x6014, 0x904d, 0x0076,
-	0x2039, 0x0000, 0x190c, 0x8127, 0x007e, 0x009e, 0x0005, 0x0156,
+	0x0208, 0x6206, 0x00ce, 0x080c, 0x66c6, 0x6014, 0x904d, 0x0076,
+	0x2039, 0x0000, 0x190c, 0x814f, 0x007e, 0x009e, 0x0005, 0x0156,
 	0x00c6, 0x2061, 0x1a41, 0x6000, 0x81ff, 0x0110, 0x9205, 0x0008,
 	0x9204, 0x6002, 0x00ce, 0x015e, 0x0005, 0x6800, 0xd08c, 0x1138,
 	0x6808, 0x9005, 0x0120, 0x8001, 0x680a, 0x9085, 0x0001, 0x0005,
 	0x0126, 0x2091, 0x8000, 0x0036, 0x0046, 0x20a9, 0x0010, 0x9006,
 	0x8004, 0x2019, 0x0100, 0x231c, 0x93a6, 0x0008, 0x1118, 0x8086,
 	0x818e, 0x0020, 0x80f6, 0x3e00, 0x81f6, 0x3e08, 0x1208, 0x9200,
-	0x1f04, 0x8229, 0x93a6, 0x0008, 0x1118, 0x8086, 0x818e, 0x0020,
+	0x1f04, 0x8251, 0x93a6, 0x0008, 0x1118, 0x8086, 0x818e, 0x0020,
 	0x80f6, 0x3e00, 0x81f6, 0x3e08, 0x004e, 0x003e, 0x012e, 0x0005,
 	0x0126, 0x2091, 0x8000, 0x0076, 0x0156, 0x20a9, 0x0010, 0x9005,
 	0x0510, 0x911a, 0x1600, 0x8213, 0x2039, 0x0100, 0x273c, 0x97be,
 	0x0008, 0x1110, 0x818d, 0x0010, 0x81f5, 0x3e08, 0x0228, 0x911a,
-	0x1220, 0x1f04, 0x8253, 0x0028, 0x911a, 0x2308, 0x8210, 0x1f04,
-	0x8253, 0x0006, 0x3200, 0x9084, 0xefff, 0x2080, 0x000e, 0x015e,
+	0x1220, 0x1f04, 0x827b, 0x0028, 0x911a, 0x2308, 0x8210, 0x1f04,
+	0x827b, 0x0006, 0x3200, 0x9084, 0xefff, 0x2080, 0x000e, 0x015e,
 	0x007e, 0x012e, 0x0005, 0x0006, 0x3200, 0x9085, 0x1000, 0x0ca8,
 	0x0126, 0x2091, 0x2800, 0x2079, 0x19b8, 0x012e, 0x00d6, 0x2069,
 	0x19b8, 0x6803, 0x0005, 0x0156, 0x0146, 0x01d6, 0x20e9, 0x0000,
-	0x2069, 0x0200, 0x080c, 0x9c26, 0x0401, 0x080c, 0x9c11, 0x00e9,
-	0x080c, 0x9c14, 0x00d1, 0x080c, 0x9c17, 0x00b9, 0x080c, 0x9c1a,
-	0x00a1, 0x080c, 0x9c1d, 0x0089, 0x080c, 0x9c20, 0x0071, 0x080c,
-	0x9c23, 0x0059, 0x01de, 0x014e, 0x015e, 0x2069, 0x0004, 0x2d04,
+	0x2069, 0x0200, 0x080c, 0x9c3f, 0x0401, 0x080c, 0x9c2a, 0x00e9,
+	0x080c, 0x9c2d, 0x00d1, 0x080c, 0x9c30, 0x00b9, 0x080c, 0x9c33,
+	0x00a1, 0x080c, 0x9c36, 0x0089, 0x080c, 0x9c39, 0x0071, 0x080c,
+	0x9c3c, 0x0059, 0x01de, 0x014e, 0x015e, 0x2069, 0x0004, 0x2d04,
 	0x9085, 0x8001, 0x206a, 0x00de, 0x0005, 0x20a9, 0x0020, 0x20a1,
 	0x0240, 0x2001, 0x0000, 0x4004, 0x0005, 0x00c6, 0x6027, 0x0001,
-	0x7804, 0x9084, 0x0007, 0x0002, 0x82c6, 0x82ea, 0x8329, 0x82cc,
-	0x82ea, 0x82c6, 0x82c4, 0x82c4, 0x080c, 0x0db4, 0x080c, 0x8090,
-	0x080c, 0x894b, 0x00ce, 0x0005, 0x62c0, 0x82ff, 0x1110, 0x00ce,
-	0x0005, 0x2011, 0x5b33, 0x080c, 0x8010, 0x7828, 0x9092, 0x00c8,
-	0x1228, 0x8000, 0x782a, 0x080c, 0x5b73, 0x0c88, 0x62c0, 0x080c,
-	0x9c2a, 0x080c, 0x5b33, 0x7807, 0x0003, 0x7827, 0x0000, 0x782b,
-	0x0000, 0x0c28, 0x080c, 0x8090, 0x6220, 0xd2a4, 0x0160, 0x782b,
+	0x7804, 0x9084, 0x0007, 0x0002, 0x82ee, 0x8312, 0x8351, 0x82f4,
+	0x8312, 0x82ee, 0x82ec, 0x82ec, 0x080c, 0x0db4, 0x080c, 0x80b8,
+	0x080c, 0x8973, 0x00ce, 0x0005, 0x62c0, 0x82ff, 0x1110, 0x00ce,
+	0x0005, 0x2011, 0x5b3a, 0x080c, 0x8038, 0x7828, 0x9092, 0x00c8,
+	0x1228, 0x8000, 0x782a, 0x080c, 0x5b7a, 0x0c88, 0x62c0, 0x080c,
+	0x9c43, 0x080c, 0x5b3a, 0x7807, 0x0003, 0x7827, 0x0000, 0x782b,
+	0x0000, 0x0c28, 0x080c, 0x80b8, 0x6220, 0xd2a4, 0x0160, 0x782b,
 	0x0000, 0x7824, 0x9065, 0x090c, 0x0db4, 0x2009, 0x0013, 0x080c,
-	0x9e93, 0x00ce, 0x0005, 0x00c6, 0x7824, 0x9065, 0x090c, 0x0db4,
+	0x9eac, 0x00ce, 0x0005, 0x00c6, 0x7824, 0x9065, 0x090c, 0x0db4,
 	0x7828, 0x9092, 0xc350, 0x12c0, 0x8000, 0x782a, 0x00ce, 0x080c,
 	0x29ca, 0x0278, 0x00c6, 0x7924, 0x2160, 0x6010, 0x906d, 0x090c,
-	0x0db4, 0x7807, 0x0000, 0x7827, 0x0000, 0x00ce, 0x080c, 0x894b,
-	0x0c00, 0x080c, 0x936f, 0x08e8, 0x2011, 0x0130, 0x2214, 0x080c,
-	0x9c2a, 0x080c, 0xd8a9, 0x2009, 0x0014, 0x080c, 0x9e93, 0x00ce,
+	0x0db4, 0x7807, 0x0000, 0x7827, 0x0000, 0x00ce, 0x080c, 0x8973,
+	0x0c00, 0x080c, 0x9388, 0x08e8, 0x2011, 0x0130, 0x2214, 0x080c,
+	0x9c43, 0x080c, 0xd8c9, 0x2009, 0x0014, 0x080c, 0x9eac, 0x00ce,
 	0x0880, 0x2001, 0x19d4, 0x2003, 0x0000, 0x62c0, 0x82ff, 0x1160,
 	0x782b, 0x0000, 0x7824, 0x9065, 0x090c, 0x0db4, 0x2009, 0x0013,
-	0x080c, 0x9ee5, 0x00ce, 0x0005, 0x00b6, 0x00c6, 0x00d6, 0x7824,
+	0x080c, 0x9efe, 0x00ce, 0x0005, 0x00b6, 0x00c6, 0x00d6, 0x7824,
 	0x9005, 0x090c, 0x0db4, 0x7828, 0x9092, 0xc350, 0x1648, 0x8000,
 	0x782a, 0x00de, 0x00ce, 0x00be, 0x080c, 0x29ca, 0x02f0, 0x00b6,
 	0x00c6, 0x00d6, 0x781c, 0x905d, 0x090c, 0x0db4, 0xb800, 0xc0dc,
-	0xb802, 0x7924, 0x2160, 0x080c, 0x9e19, 0xb93c, 0x81ff, 0x090c,
+	0xb802, 0x7924, 0x2160, 0x080c, 0x9e32, 0xb93c, 0x81ff, 0x090c,
 	0x0db4, 0x8109, 0xb93e, 0x7807, 0x0000, 0x7827, 0x0000, 0x00de,
-	0x00ce, 0x00be, 0x080c, 0x894b, 0x0868, 0x080c, 0x936f, 0x0850,
-	0x2011, 0x0130, 0x2214, 0x080c, 0x9c2a, 0x080c, 0xd8a9, 0x7824,
-	0x9065, 0x2009, 0x0014, 0x080c, 0x9e93, 0x00de, 0x00ce, 0x00be,
-	0x0804, 0x833a, 0x00c6, 0x2001, 0x009b, 0x2004, 0xd0fc, 0x190c,
+	0x00ce, 0x00be, 0x080c, 0x8973, 0x0868, 0x080c, 0x9388, 0x0850,
+	0x2011, 0x0130, 0x2214, 0x080c, 0x9c43, 0x080c, 0xd8c9, 0x7824,
+	0x9065, 0x2009, 0x0014, 0x080c, 0x9eac, 0x00de, 0x00ce, 0x00be,
+	0x0804, 0x8362, 0x00c6, 0x2001, 0x009b, 0x2004, 0xd0fc, 0x190c,
 	0x1d4a, 0x6024, 0x6027, 0x0002, 0xd0f4, 0x1580, 0x62c8, 0x60c4,
 	0x9205, 0x1170, 0x783c, 0x9065, 0x0130, 0x2009, 0x0049, 0x080c,
-	0x9e93, 0x00ce, 0x0005, 0x2011, 0x19d7, 0x2013, 0x0000, 0x0cc8,
+	0x9eac, 0x00ce, 0x0005, 0x2011, 0x19d7, 0x2013, 0x0000, 0x0cc8,
 	0x793c, 0x81ff, 0x0dc0, 0x7944, 0x9192, 0x7530, 0x12f0, 0x8108,
 	0x7946, 0x793c, 0x9188, 0x0008, 0x210c, 0x918e, 0x0006, 0x1138,
 	0x6014, 0x9084, 0x1984, 0x9085, 0x0012, 0x6016, 0x0c10, 0x6014,
 	0x9084, 0x1984, 0x9085, 0x0016, 0x6016, 0x08d8, 0x793c, 0x2160,
-	0x2009, 0x004a, 0x080c, 0x9e93, 0x08a0, 0x7848, 0xc085, 0x784a,
+	0x2009, 0x004a, 0x080c, 0x9eac, 0x08a0, 0x7848, 0xc085, 0x784a,
 	0x0880, 0x0006, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f,
 	0x0000, 0x2c08, 0x2061, 0x19b8, 0x6020, 0x8000, 0x6022, 0x6010,
 	0x9005, 0x0148, 0x9080, 0x0003, 0x2102, 0x6112, 0x012e, 0x00ce,
 	0x001e, 0x000e, 0x0005, 0x6116, 0x6112, 0x0cc0, 0x00d6, 0x2069,
 	0x19b8, 0xb800, 0xd0d4, 0x0168, 0x6820, 0x8000, 0x6822, 0x9086,
-	0x0001, 0x1110, 0x2b00, 0x681e, 0x00de, 0x0804, 0x894b, 0x00de,
+	0x0001, 0x1110, 0x2b00, 0x681e, 0x00de, 0x0804, 0x8973, 0x00de,
 	0x0005, 0xc0d5, 0xb802, 0x6818, 0x9005, 0x0168, 0xb856, 0xb85b,
 	0x0000, 0x0086, 0x0006, 0x2b00, 0x681a, 0x008e, 0xa05a, 0x008e,
 	0x2069, 0x19b8, 0x0c08, 0xb856, 0xb85a, 0x2b00, 0x681a, 0x681e,
@@ -4029,156 +4034,156 @@
 	0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x00b6, 0x0096, 0x0076,
 	0x0066, 0x0056, 0x0036, 0x0026, 0x0016, 0x0006, 0x0126, 0x902e,
 	0x2071, 0x19b8, 0x7638, 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff,
-	0x0904, 0x84b8, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904, 0x84b3,
-	0x87ff, 0x0120, 0x6054, 0x9106, 0x1904, 0x84b3, 0x703c, 0x9c06,
-	0x1178, 0x0036, 0x2019, 0x0001, 0x080c, 0x96bf, 0x7033, 0x0000,
+	0x0904, 0x84e0, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904, 0x84db,
+	0x87ff, 0x0120, 0x6054, 0x9106, 0x1904, 0x84db, 0x703c, 0x9c06,
+	0x1178, 0x0036, 0x2019, 0x0001, 0x080c, 0x96d8, 0x7033, 0x0000,
 	0x9006, 0x703e, 0x7042, 0x7046, 0x704a, 0x003e, 0x2029, 0x0001,
 	0x7038, 0x9c36, 0x1110, 0x660c, 0x763a, 0x7034, 0x9c36, 0x1140,
 	0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000,
 	0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678,
-	0x600f, 0x0000, 0x080c, 0xbafe, 0x01c8, 0x6014, 0x2048, 0x6020,
+	0x600f, 0x0000, 0x080c, 0xbb17, 0x01c8, 0x6014, 0x2048, 0x6020,
 	0x9086, 0x0003, 0x1590, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000,
-	0x0016, 0x0036, 0x0076, 0x080c, 0xbded, 0x080c, 0xd7b3, 0x080c,
-	0x6885, 0x007e, 0x003e, 0x001e, 0x080c, 0xbce7, 0x080c, 0x9e49,
-	0x00ce, 0x0804, 0x8457, 0x2c78, 0x600c, 0x2060, 0x0804, 0x8457,
-	0x85ff, 0x0120, 0x0036, 0x080c, 0x8a26, 0x003e, 0x012e, 0x000e,
+	0x0016, 0x0036, 0x0076, 0x080c, 0xbe06, 0x080c, 0xd7d3, 0x080c,
+	0x688c, 0x007e, 0x003e, 0x001e, 0x080c, 0xbd00, 0x080c, 0x9e62,
+	0x00ce, 0x0804, 0x847f, 0x2c78, 0x600c, 0x2060, 0x0804, 0x847f,
+	0x85ff, 0x0120, 0x0036, 0x080c, 0x8a4e, 0x003e, 0x012e, 0x000e,
 	0x001e, 0x002e, 0x003e, 0x005e, 0x006e, 0x007e, 0x009e, 0x00be,
 	0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x6020, 0x9086, 0x0006,
-	0x1158, 0x0016, 0x0036, 0x0076, 0x080c, 0xd7b3, 0x080c, 0xd4b5,
+	0x1158, 0x0016, 0x0036, 0x0076, 0x080c, 0xd7d3, 0x080c, 0xd4d5,
 	0x007e, 0x003e, 0x001e, 0x0890, 0x6020, 0x9086, 0x000a, 0x0904,
-	0x849d, 0x0804, 0x849b, 0x0006, 0x0066, 0x0096, 0x00c6, 0x00d6,
+	0x84c5, 0x0804, 0x84c3, 0x0006, 0x0066, 0x0096, 0x00c6, 0x00d6,
 	0x00f6, 0x9036, 0x0126, 0x2091, 0x8000, 0x2079, 0x19b8, 0x7838,
-	0x9065, 0x0904, 0x8533, 0x600c, 0x0006, 0x600f, 0x0000, 0x783c,
-	0x9c06, 0x1168, 0x0036, 0x2019, 0x0001, 0x080c, 0x96bf, 0x7833,
+	0x9065, 0x0904, 0x855b, 0x600c, 0x0006, 0x600f, 0x0000, 0x783c,
+	0x9c06, 0x1168, 0x0036, 0x2019, 0x0001, 0x080c, 0x96d8, 0x7833,
 	0x0000, 0x901e, 0x7b3e, 0x7b42, 0x7b46, 0x7b4a, 0x003e, 0x080c,
-	0xbafe, 0x0520, 0x6014, 0x2048, 0x6020, 0x9086, 0x0003, 0x1568,
+	0xbb17, 0x0520, 0x6014, 0x2048, 0x6020, 0x9086, 0x0003, 0x1568,
 	0x3e08, 0x918e, 0x0002, 0x1188, 0x6010, 0x9005, 0x0170, 0x00b6,
 	0x2058, 0xb800, 0x00be, 0xd0bc, 0x0140, 0x6040, 0x9005, 0x1180,
 	0x2001, 0x1959, 0x2004, 0x6042, 0x0058, 0xa867, 0x0103, 0xab7a,
-	0xa877, 0x0000, 0x080c, 0x6878, 0x080c, 0xbce7, 0x080c, 0x9e49,
-	0x000e, 0x0804, 0x84f0, 0x7e3a, 0x7e36, 0x012e, 0x00fe, 0x00de,
+	0xa877, 0x0000, 0x080c, 0x687f, 0x080c, 0xbd00, 0x080c, 0x9e62,
+	0x000e, 0x0804, 0x8518, 0x7e3a, 0x7e36, 0x012e, 0x00fe, 0x00de,
 	0x00ce, 0x009e, 0x006e, 0x000e, 0x0005, 0x6020, 0x9086, 0x0006,
-	0x1118, 0x080c, 0xd4b5, 0x0c50, 0x6020, 0x9086, 0x000a, 0x09f8,
-	0x08e0, 0x0016, 0x0026, 0x0086, 0x9046, 0x0099, 0x080c, 0x8632,
+	0x1118, 0x080c, 0xd4d5, 0x0c50, 0x6020, 0x9086, 0x000a, 0x09f8,
+	0x08e0, 0x0016, 0x0026, 0x0086, 0x9046, 0x0099, 0x080c, 0x865a,
 	0x008e, 0x002e, 0x001e, 0x0005, 0x00f6, 0x0126, 0x2079, 0x19b8,
-	0x2091, 0x8000, 0x080c, 0x86c9, 0x080c, 0x8757, 0x012e, 0x00fe,
+	0x2091, 0x8000, 0x080c, 0x86f1, 0x080c, 0x877f, 0x012e, 0x00fe,
 	0x0005, 0x00b6, 0x0096, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066,
 	0x0016, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19b8, 0x7614,
-	0x2660, 0x2678, 0x8cff, 0x0904, 0x85f7, 0x6010, 0x2058, 0xb8a0,
-	0x9206, 0x1904, 0x85f2, 0x88ff, 0x0120, 0x6054, 0x9106, 0x1904,
-	0x85f2, 0x7024, 0x9c06, 0x1558, 0x2069, 0x0100, 0x6820, 0xd0a4,
-	0x1508, 0x080c, 0x8090, 0x080c, 0x9393, 0x68c3, 0x0000, 0x080c,
-	0x98c1, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384,
+	0x2660, 0x2678, 0x8cff, 0x0904, 0x861f, 0x6010, 0x2058, 0xb8a0,
+	0x9206, 0x1904, 0x861a, 0x88ff, 0x0120, 0x6054, 0x9106, 0x1904,
+	0x861a, 0x7024, 0x9c06, 0x1558, 0x2069, 0x0100, 0x6820, 0xd0a4,
+	0x1508, 0x080c, 0x80b8, 0x080c, 0x93ac, 0x68c3, 0x0000, 0x080c,
+	0x98da, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384,
 	0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2b14, 0x9006, 0x080c,
 	0x2b14, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001,
-	0x003e, 0x0028, 0x6003, 0x0009, 0x630a, 0x0804, 0x85f2, 0x7014,
+	0x003e, 0x0028, 0x6003, 0x0009, 0x630a, 0x0804, 0x861a, 0x7014,
 	0x9c36, 0x1110, 0x660c, 0x7616, 0x7010, 0x9c36, 0x1140, 0x2c00,
 	0x9f36, 0x0118, 0x2f00, 0x7012, 0x0010, 0x7013, 0x0000, 0x660c,
 	0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f,
-	0x0000, 0x6014, 0x2048, 0x080c, 0xbafe, 0x01e8, 0x6020, 0x9086,
-	0x0003, 0x1580, 0x080c, 0xbd04, 0x1118, 0x080c, 0xa7a7, 0x0098,
+	0x0000, 0x6014, 0x2048, 0x080c, 0xbb17, 0x01e8, 0x6020, 0x9086,
+	0x0003, 0x1580, 0x080c, 0xbd1d, 0x1118, 0x080c, 0xa7c0, 0x0098,
 	0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x0016, 0x0036, 0x0086,
-	0x080c, 0xbded, 0x080c, 0xd7b3, 0x080c, 0x6885, 0x008e, 0x003e,
-	0x001e, 0x080c, 0xbce7, 0x080c, 0x9e49, 0x080c, 0x9797, 0x00ce,
-	0x0804, 0x8572, 0x2c78, 0x600c, 0x2060, 0x0804, 0x8572, 0x012e,
+	0x080c, 0xbe06, 0x080c, 0xd7d3, 0x080c, 0x688c, 0x008e, 0x003e,
+	0x001e, 0x080c, 0xbd00, 0x080c, 0x9e62, 0x080c, 0x97b0, 0x00ce,
+	0x0804, 0x859a, 0x2c78, 0x600c, 0x2060, 0x0804, 0x859a, 0x012e,
 	0x000e, 0x001e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x009e,
 	0x00be, 0x0005, 0x6020, 0x9086, 0x0006, 0x1158, 0x0016, 0x0036,
-	0x0086, 0x080c, 0xd7b3, 0x080c, 0xd4b5, 0x008e, 0x003e, 0x001e,
-	0x08d0, 0x080c, 0xa7a7, 0x6020, 0x9086, 0x0002, 0x1160, 0x6004,
-	0x0006, 0x9086, 0x0085, 0x000e, 0x0904, 0x85d8, 0x9086, 0x008b,
-	0x0904, 0x85d8, 0x0840, 0x6020, 0x9086, 0x0005, 0x1920, 0x6004,
+	0x0086, 0x080c, 0xd7d3, 0x080c, 0xd4d5, 0x008e, 0x003e, 0x001e,
+	0x08d0, 0x080c, 0xa7c0, 0x6020, 0x9086, 0x0002, 0x1160, 0x6004,
+	0x0006, 0x9086, 0x0085, 0x000e, 0x0904, 0x8600, 0x9086, 0x008b,
+	0x0904, 0x8600, 0x0840, 0x6020, 0x9086, 0x0005, 0x1920, 0x6004,
 	0x0006, 0x9086, 0x0085, 0x000e, 0x09c8, 0x9086, 0x008b, 0x09b0,
-	0x0804, 0x85eb, 0x00b6, 0x00a6, 0x0096, 0x00c6, 0x0006, 0x0126,
-	0x2091, 0x8000, 0x9280, 0x1000, 0x2004, 0x905d, 0x0904, 0x86c2,
+	0x0804, 0x8613, 0x00b6, 0x00a6, 0x0096, 0x00c6, 0x0006, 0x0126,
+	0x2091, 0x8000, 0x9280, 0x1000, 0x2004, 0x905d, 0x0904, 0x86ea,
 	0x00f6, 0x00e6, 0x00d6, 0x0066, 0x2071, 0x19b8, 0xbe54, 0x7018,
 	0x9b06, 0x1108, 0x761a, 0x701c, 0x9b06, 0x1130, 0x86ff, 0x1118,
 	0x7018, 0x701e, 0x0008, 0x761e, 0xb858, 0x904d, 0x0108, 0xae56,
 	0x96d5, 0x0000, 0x0110, 0x2900, 0xb05a, 0xb857, 0x0000, 0xb85b,
-	0x0000, 0xb800, 0xc0d4, 0xc0dc, 0xb802, 0x080c, 0x616a, 0x0904,
-	0x86be, 0x7624, 0x86ff, 0x0904, 0x86ad, 0x9680, 0x0005, 0x2004,
+	0x0000, 0xb800, 0xc0d4, 0xc0dc, 0xb802, 0x080c, 0x6171, 0x0904,
+	0x86e6, 0x7624, 0x86ff, 0x0904, 0x86d5, 0x9680, 0x0005, 0x2004,
 	0x9906, 0x15d8, 0x00d6, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0560,
-	0x080c, 0x8090, 0x080c, 0x9393, 0x68c3, 0x0000, 0x080c, 0x98c1,
+	0x080c, 0x80b8, 0x080c, 0x93ac, 0x68c3, 0x0000, 0x080c, 0x98da,
 	0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000,
 	0x0138, 0x2001, 0x0100, 0x080c, 0x2b14, 0x9006, 0x080c, 0x2b14,
 	0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e,
 	0x00de, 0x00c6, 0xb83c, 0x9005, 0x0110, 0x8001, 0xb83e, 0x2660,
-	0x080c, 0x9e49, 0x00ce, 0x0048, 0x00de, 0x00c6, 0x2660, 0x6003,
-	0x0009, 0x630a, 0x00ce, 0x0804, 0x8665, 0x89ff, 0x0158, 0xa867,
-	0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0xbded, 0x080c, 0xd7b3,
-	0x080c, 0x6885, 0x080c, 0x9797, 0x0804, 0x8665, 0x006e, 0x00de,
+	0x080c, 0x9e62, 0x00ce, 0x0048, 0x00de, 0x00c6, 0x2660, 0x6003,
+	0x0009, 0x630a, 0x00ce, 0x0804, 0x868d, 0x89ff, 0x0158, 0xa867,
+	0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0xbe06, 0x080c, 0xd7d3,
+	0x080c, 0x688c, 0x080c, 0x97b0, 0x0804, 0x868d, 0x006e, 0x00de,
 	0x00ee, 0x00fe, 0x012e, 0x000e, 0x00ce, 0x009e, 0x00ae, 0x00be,
 	0x0005, 0x0096, 0x0006, 0x0066, 0x00c6, 0x00d6, 0x9036, 0x7814,
-	0x9065, 0x0904, 0x872a, 0x600c, 0x0006, 0x600f, 0x0000, 0x7824,
+	0x9065, 0x0904, 0x8752, 0x600c, 0x0006, 0x600f, 0x0000, 0x7824,
 	0x9c06, 0x1570, 0x2069, 0x0100, 0x6820, 0xd0a4, 0x1508, 0x080c,
-	0x8090, 0x080c, 0x9393, 0x68c3, 0x0000, 0x080c, 0x98c1, 0x7827,
+	0x80b8, 0x080c, 0x93ac, 0x68c3, 0x0000, 0x080c, 0x98da, 0x7827,
 	0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138,
 	0x2001, 0x0100, 0x080c, 0x2b14, 0x9006, 0x080c, 0x2b14, 0x2069,
 	0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0040,
-	0x080c, 0x6511, 0x1520, 0x6003, 0x0009, 0x630a, 0x2c30, 0x00f8,
-	0x6014, 0x2048, 0x080c, 0xbafc, 0x01b0, 0x6020, 0x9086, 0x0003,
-	0x1508, 0x080c, 0xbd04, 0x1118, 0x080c, 0xa7a7, 0x0060, 0x080c,
-	0x6511, 0x1168, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c,
-	0x6885, 0x080c, 0xbce7, 0x080c, 0x9e49, 0x080c, 0x9797, 0x000e,
-	0x0804, 0x86d0, 0x7e16, 0x7e12, 0x00de, 0x00ce, 0x006e, 0x000e,
-	0x009e, 0x0005, 0x6020, 0x9086, 0x0006, 0x1118, 0x080c, 0xd4b5,
-	0x0c50, 0x080c, 0xa7a7, 0x6020, 0x9086, 0x0002, 0x1150, 0x6004,
+	0x080c, 0x6518, 0x1520, 0x6003, 0x0009, 0x630a, 0x2c30, 0x00f8,
+	0x6014, 0x2048, 0x080c, 0xbb15, 0x01b0, 0x6020, 0x9086, 0x0003,
+	0x1508, 0x080c, 0xbd1d, 0x1118, 0x080c, 0xa7c0, 0x0060, 0x080c,
+	0x6518, 0x1168, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c,
+	0x688c, 0x080c, 0xbd00, 0x080c, 0x9e62, 0x080c, 0x97b0, 0x000e,
+	0x0804, 0x86f8, 0x7e16, 0x7e12, 0x00de, 0x00ce, 0x006e, 0x000e,
+	0x009e, 0x0005, 0x6020, 0x9086, 0x0006, 0x1118, 0x080c, 0xd4d5,
+	0x0c50, 0x080c, 0xa7c0, 0x6020, 0x9086, 0x0002, 0x1150, 0x6004,
 	0x0006, 0x9086, 0x0085, 0x000e, 0x0990, 0x9086, 0x008b, 0x0978,
 	0x08d0, 0x6020, 0x9086, 0x0005, 0x19b0, 0x6004, 0x0006, 0x9086,
 	0x0085, 0x000e, 0x0d18, 0x9086, 0x008b, 0x0d00, 0x0860, 0x0006,
 	0x0066, 0x0096, 0x00b6, 0x00c6, 0x00d6, 0x7818, 0x905d, 0x0904,
-	0x87d7, 0xb854, 0x0006, 0x9006, 0xb856, 0xb85a, 0xb800, 0xc0d4,
-	0xc0dc, 0xb802, 0x080c, 0x616a, 0x0904, 0x87d4, 0x7e24, 0x86ff,
-	0x0904, 0x87c7, 0x9680, 0x0005, 0x2004, 0x9906, 0x1904, 0x87c7,
-	0x00d6, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, 0x87be, 0x080c,
-	0x8090, 0x080c, 0x9393, 0x68c3, 0x0000, 0x080c, 0x98c1, 0x7827,
+	0x87ff, 0xb854, 0x0006, 0x9006, 0xb856, 0xb85a, 0xb800, 0xc0d4,
+	0xc0dc, 0xb802, 0x080c, 0x6171, 0x0904, 0x87fc, 0x7e24, 0x86ff,
+	0x0904, 0x87ef, 0x9680, 0x0005, 0x2004, 0x9906, 0x1904, 0x87ef,
+	0x00d6, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, 0x87e6, 0x080c,
+	0x80b8, 0x080c, 0x93ac, 0x68c3, 0x0000, 0x080c, 0x98da, 0x7827,
 	0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138,
 	0x2001, 0x0100, 0x080c, 0x2b14, 0x9006, 0x080c, 0x2b14, 0x2069,
 	0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x00de,
 	0x00c6, 0x3e08, 0x918e, 0x0002, 0x1168, 0xb800, 0xd0bc, 0x0150,
 	0x9680, 0x0010, 0x200c, 0x81ff, 0x1518, 0x2009, 0x1959, 0x210c,
 	0x2102, 0x00f0, 0xb83c, 0x9005, 0x0110, 0x8001, 0xb83e, 0x2660,
-	0x600f, 0x0000, 0x080c, 0x9e49, 0x00ce, 0x0048, 0x00de, 0x00c6,
-	0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, 0x0804, 0x876a, 0x89ff,
-	0x0138, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x6885,
-	0x080c, 0x9797, 0x0804, 0x876a, 0x000e, 0x0804, 0x875e, 0x781e,
+	0x600f, 0x0000, 0x080c, 0x9e62, 0x00ce, 0x0048, 0x00de, 0x00c6,
+	0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, 0x0804, 0x8792, 0x89ff,
+	0x0138, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x688c,
+	0x080c, 0x97b0, 0x0804, 0x8792, 0x000e, 0x0804, 0x8786, 0x781e,
 	0x781a, 0x00de, 0x00ce, 0x00be, 0x009e, 0x006e, 0x000e, 0x0005,
 	0x00e6, 0x00d6, 0x0096, 0x0066, 0xb800, 0xd0dc, 0x01a0, 0xb84c,
 	0x904d, 0x0188, 0xa878, 0x9606, 0x1170, 0x2071, 0x19b8, 0x7024,
 	0x9035, 0x0148, 0x9080, 0x0005, 0x2004, 0x9906, 0x1120, 0xb800,
 	0xc0dc, 0xb802, 0x0029, 0x006e, 0x009e, 0x00de, 0x00ee, 0x0005,
 	0x00f6, 0x2079, 0x0100, 0x78c0, 0x9005, 0x1138, 0x00c6, 0x2660,
-	0x6003, 0x0009, 0x630a, 0x00ce, 0x04b8, 0x080c, 0x9393, 0x78c3,
-	0x0000, 0x080c, 0x98c1, 0x7027, 0x0000, 0x0036, 0x2079, 0x0140,
+	0x6003, 0x0009, 0x630a, 0x00ce, 0x04b8, 0x080c, 0x93ac, 0x78c3,
+	0x0000, 0x080c, 0x98da, 0x7027, 0x0000, 0x0036, 0x2079, 0x0140,
 	0x7b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2b14,
 	0x9006, 0x080c, 0x2b14, 0x2079, 0x0100, 0x7824, 0xd084, 0x0110,
-	0x7827, 0x0001, 0x080c, 0x98c1, 0x003e, 0x080c, 0x616a, 0x00c6,
-	0xb83c, 0x9005, 0x0110, 0x8001, 0xb83e, 0x2660, 0x080c, 0x9e19,
-	0x00ce, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0xbded,
-	0x080c, 0x6885, 0x080c, 0x9797, 0x00fe, 0x0005, 0x00b6, 0x00e6,
+	0x7827, 0x0001, 0x080c, 0x98da, 0x003e, 0x080c, 0x6171, 0x00c6,
+	0xb83c, 0x9005, 0x0110, 0x8001, 0xb83e, 0x2660, 0x080c, 0x9e32,
+	0x00ce, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0xbe06,
+	0x080c, 0x688c, 0x080c, 0x97b0, 0x00fe, 0x0005, 0x00b6, 0x00e6,
 	0x00c6, 0x2011, 0x0101, 0x2204, 0xc0c4, 0x2012, 0x2001, 0x180c,
 	0x2014, 0xc2e4, 0x2202, 0x2071, 0x19b8, 0x7004, 0x9084, 0x0007,
-	0x0002, 0x8863, 0x8867, 0x887e, 0x88a7, 0x88e5, 0x8863, 0x887e,
-	0x8861, 0x080c, 0x0db4, 0x00ce, 0x00ee, 0x00be, 0x0005, 0x7024,
+	0x0002, 0x888b, 0x888f, 0x88a6, 0x88cf, 0x890d, 0x888b, 0x88a6,
+	0x8889, 0x080c, 0x0db4, 0x00ce, 0x00ee, 0x00be, 0x0005, 0x7024,
 	0x9065, 0x0148, 0x7020, 0x8001, 0x7022, 0x600c, 0x9015, 0x0158,
 	0x7216, 0x600f, 0x0000, 0x7007, 0x0000, 0x7027, 0x0000, 0x00ce,
 	0x00ee, 0x00be, 0x0005, 0x7216, 0x7212, 0x0ca8, 0x6010, 0x2058,
-	0x080c, 0x616a, 0xb800, 0xc0dc, 0xb802, 0x7007, 0x0000, 0x7027,
+	0x080c, 0x6171, 0xb800, 0xc0dc, 0xb802, 0x7007, 0x0000, 0x7027,
 	0x0000, 0x7020, 0x8001, 0x7022, 0x1148, 0x2001, 0x180c, 0x2014,
 	0xd2ec, 0x1180, 0x00ce, 0x00ee, 0x00be, 0x0005, 0xb854, 0x9015,
-	0x0120, 0x721e, 0x080c, 0x894b, 0x0ca8, 0x7218, 0x721e, 0x080c,
-	0x894b, 0x0c80, 0xc2ec, 0x2202, 0x080c, 0x8a26, 0x0c58, 0x7024,
-	0x9065, 0x05b8, 0x700c, 0x9c06, 0x1160, 0x080c, 0x9797, 0x600c,
+	0x0120, 0x721e, 0x080c, 0x8973, 0x0ca8, 0x7218, 0x721e, 0x080c,
+	0x8973, 0x0c80, 0xc2ec, 0x2202, 0x080c, 0x8a4e, 0x0c58, 0x7024,
+	0x9065, 0x05b8, 0x700c, 0x9c06, 0x1160, 0x080c, 0x97b0, 0x600c,
 	0x9015, 0x0120, 0x720e, 0x600f, 0x0000, 0x0448, 0x720e, 0x720a,
-	0x0430, 0x7014, 0x9c06, 0x1160, 0x080c, 0x9797, 0x600c, 0x9015,
+	0x0430, 0x7014, 0x9c06, 0x1160, 0x080c, 0x97b0, 0x600c, 0x9015,
 	0x0120, 0x7216, 0x600f, 0x0000, 0x00d0, 0x7216, 0x7212, 0x00b8,
-	0x6020, 0x9086, 0x0003, 0x1198, 0x6010, 0x2058, 0x080c, 0x616a,
-	0xb800, 0xc0dc, 0xb802, 0x080c, 0x9797, 0x701c, 0x9065, 0x0138,
+	0x6020, 0x9086, 0x0003, 0x1198, 0x6010, 0x2058, 0x080c, 0x6171,
+	0xb800, 0xc0dc, 0xb802, 0x080c, 0x97b0, 0x701c, 0x9065, 0x0138,
 	0xb854, 0x9015, 0x0110, 0x721e, 0x0010, 0x7218, 0x721e, 0x7027,
 	0x0000, 0x00ce, 0x00ee, 0x00be, 0x0005, 0x7024, 0x9065, 0x0140,
-	0x080c, 0x9797, 0x600c, 0x9015, 0x0158, 0x720e, 0x600f, 0x0000,
-	0x080c, 0x98c1, 0x7027, 0x0000, 0x00ce, 0x00ee, 0x00be, 0x0005,
+	0x080c, 0x97b0, 0x600c, 0x9015, 0x0158, 0x720e, 0x600f, 0x0000,
+	0x080c, 0x98da, 0x7027, 0x0000, 0x00ce, 0x00ee, 0x00be, 0x0005,
 	0x720e, 0x720a, 0x0ca8, 0x00d6, 0x2069, 0x19b8, 0x6830, 0x9084,
-	0x0003, 0x0002, 0x8908, 0x890a, 0x892e, 0x8906, 0x080c, 0x0db4,
+	0x0003, 0x0002, 0x8930, 0x8932, 0x8956, 0x892e, 0x080c, 0x0db4,
 	0x00de, 0x0005, 0x00c6, 0x6840, 0x9086, 0x0001, 0x01b8, 0x683c,
 	0x9065, 0x0130, 0x600c, 0x9015, 0x0170, 0x6a3a, 0x600f, 0x0000,
 	0x6833, 0x0000, 0x683f, 0x0000, 0x2011, 0x19d7, 0x2013, 0x0000,
@@ -4188,153 +4193,153 @@
 	0x0130, 0x6a3a, 0x600f, 0x0000, 0x683f, 0x0000, 0x0018, 0x683e,
 	0x683a, 0x6836, 0x00ce, 0x00de, 0x0005, 0x2001, 0x180c, 0x200c,
 	0xc1e5, 0x2102, 0x0005, 0x2001, 0x180c, 0x200c, 0xd1ec, 0x0120,
-	0xc1ec, 0x2102, 0x080c, 0x8a26, 0x2001, 0x19c4, 0x2004, 0x9086,
+	0xc1ec, 0x2102, 0x080c, 0x8a4e, 0x2001, 0x19c4, 0x2004, 0x9086,
 	0x0001, 0x0d58, 0x00d6, 0x2069, 0x19b8, 0x6804, 0x9084, 0x0007,
-	0x0002, 0x896b, 0x8a0e, 0x8a0e, 0x8a0e, 0x8a0e, 0x8a10, 0x8a0e,
-	0x8969, 0x080c, 0x0db4, 0x6820, 0x9005, 0x1110, 0x00de, 0x0005,
+	0x0002, 0x8993, 0x8a36, 0x8a36, 0x8a36, 0x8a36, 0x8a38, 0x8a36,
+	0x8991, 0x080c, 0x0db4, 0x6820, 0x9005, 0x1110, 0x00de, 0x0005,
 	0x00c6, 0x680c, 0x9065, 0x0150, 0x6807, 0x0004, 0x6826, 0x682b,
-	0x0000, 0x080c, 0x8a7c, 0x00ce, 0x00de, 0x0005, 0x6814, 0x9065,
-	0x0150, 0x6807, 0x0001, 0x6826, 0x682b, 0x0000, 0x080c, 0x8a7c,
+	0x0000, 0x080c, 0x8aa4, 0x00ce, 0x00de, 0x0005, 0x6814, 0x9065,
+	0x0150, 0x6807, 0x0001, 0x6826, 0x682b, 0x0000, 0x080c, 0x8aa4,
 	0x00ce, 0x00de, 0x0005, 0x00b6, 0x00e6, 0x6a1c, 0x92dd, 0x0000,
-	0x0904, 0x89fa, 0xb84c, 0x900d, 0x0118, 0xb888, 0x9005, 0x01a0,
-	0xb854, 0x905d, 0x0120, 0x920e, 0x0904, 0x89fa, 0x0028, 0x6818,
-	0x920e, 0x0904, 0x89fa, 0x2058, 0xb84c, 0x900d, 0x0d88, 0xb888,
+	0x0904, 0x8a22, 0xb84c, 0x900d, 0x0118, 0xb888, 0x9005, 0x01a0,
+	0xb854, 0x905d, 0x0120, 0x920e, 0x0904, 0x8a22, 0x0028, 0x6818,
+	0x920e, 0x0904, 0x8a22, 0x2058, 0xb84c, 0x900d, 0x0d88, 0xb888,
 	0x9005, 0x1d70, 0x2b00, 0x681e, 0xbb3c, 0xb838, 0x9302, 0x1e40,
-	0x080c, 0x9df0, 0x0904, 0x89fa, 0x8318, 0xbb3e, 0x6116, 0x2b10,
+	0x080c, 0x9e09, 0x0904, 0x8a22, 0x8318, 0xbb3e, 0x6116, 0x2b10,
 	0x6212, 0x0096, 0x2148, 0xa880, 0x9084, 0x00ff, 0x605e, 0xa883,
 	0x0000, 0xa884, 0x009e, 0x908a, 0x199a, 0x0210, 0x2001, 0x1999,
 	0x8003, 0x801b, 0x831b, 0x9318, 0x631a, 0x6114, 0x0096, 0x2148,
 	0xa964, 0x009e, 0x918c, 0x00ff, 0x918e, 0x0048, 0x0538, 0x00f6,
 	0x2c78, 0x2061, 0x0100, 0xbab0, 0x629a, 0x2069, 0x0200, 0x2071,
-	0x0240, 0x080c, 0x8fb4, 0x2069, 0x19b8, 0xbb00, 0xc3dd, 0xbb02,
+	0x0240, 0x080c, 0x8fdc, 0x2069, 0x19b8, 0xbb00, 0xc3dd, 0xbb02,
 	0x6807, 0x0002, 0x2f18, 0x6b26, 0x682b, 0x0000, 0x7823, 0x0003,
 	0x7803, 0x0001, 0x7807, 0x0040, 0x00fe, 0x00ee, 0x00be, 0x00ce,
 	0x00de, 0x0005, 0x00ee, 0x00be, 0x00ce, 0x0cd0, 0xbb00, 0xc3dd,
 	0xbb02, 0x6807, 0x0006, 0x2f18, 0x6b26, 0x682b, 0x0000, 0x080c,
-	0x9c4a, 0x00ee, 0x00be, 0x00ce, 0x00de, 0x0005, 0x00de, 0x0005,
+	0x9c63, 0x00ee, 0x00be, 0x00ce, 0x00de, 0x0005, 0x00de, 0x0005,
 	0x00c6, 0x680c, 0x9065, 0x0138, 0x6807, 0x0004, 0x6826, 0x682b,
-	0x0000, 0x080c, 0x8a7c, 0x00ce, 0x00de, 0x0005, 0x2001, 0x180c,
+	0x0000, 0x080c, 0x8aa4, 0x00ce, 0x00de, 0x0005, 0x2001, 0x180c,
 	0x2014, 0xc2ed, 0x2202, 0x00de, 0x00fe, 0x0005, 0x00f6, 0x00d6,
 	0x2069, 0x19b8, 0x6830, 0x9086, 0x0000, 0x1548, 0x2001, 0x180c,
-	0x2014, 0xd2e4, 0x0130, 0xc2e4, 0x2202, 0x080c, 0x895a, 0x2069,
+	0x2014, 0xd2e4, 0x0130, 0xc2e4, 0x2202, 0x080c, 0x8982, 0x2069,
 	0x19b8, 0x2001, 0x180c, 0x200c, 0xd1c4, 0x11e0, 0x6838, 0x907d,
 	0x01b0, 0x6a04, 0x9296, 0x0000, 0x1588, 0x6833, 0x0001, 0x683e,
 	0x6847, 0x0000, 0x684b, 0x0000, 0x0126, 0x00f6, 0x2091, 0x2400,
-	0x002e, 0x080c, 0x1ae8, 0x1178, 0x012e, 0x080c, 0x91e1, 0x00de,
+	0x002e, 0x080c, 0x1ae8, 0x1178, 0x012e, 0x080c, 0x9209, 0x00de,
 	0x00fe, 0x0005, 0xc1c4, 0x2102, 0x0066, 0x2031, 0x0001, 0x080c,
-	0x7057, 0x006e, 0x08d8, 0x012e, 0x6843, 0x0000, 0x7803, 0x0002,
+	0x7062, 0x006e, 0x08d8, 0x012e, 0x6843, 0x0000, 0x7803, 0x0002,
 	0x780c, 0x9015, 0x0140, 0x6a3a, 0x780f, 0x0000, 0x6833, 0x0000,
 	0x683f, 0x0000, 0x0c20, 0x683a, 0x6836, 0x0cc0, 0x6a04, 0x9296,
-	0x0006, 0x0958, 0x0804, 0x8a1e, 0x6020, 0x9084, 0x000f, 0x000b,
-	0x0005, 0x8a90, 0x8a95, 0x8eee, 0x8f7d, 0x8a95, 0x8eee, 0x8f7d,
-	0x8a90, 0x8a95, 0x8a90, 0x8a90, 0x8a90, 0x8a90, 0x8a90, 0x8a90,
-	0x080c, 0x8846, 0x080c, 0x894b, 0x0005, 0x00b6, 0x0156, 0x0136,
+	0x0006, 0x0958, 0x0804, 0x8a46, 0x6020, 0x9084, 0x000f, 0x000b,
+	0x0005, 0x8ab8, 0x8abd, 0x8f16, 0x8fa5, 0x8abd, 0x8f16, 0x8fa5,
+	0x8ab8, 0x8abd, 0x8ab8, 0x8ab8, 0x8ab8, 0x8ab8, 0x8ab8, 0x8ab8,
+	0x080c, 0x886e, 0x080c, 0x8973, 0x0005, 0x00b6, 0x0156, 0x0136,
 	0x0146, 0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2069,
 	0x0200, 0x2071, 0x0240, 0x6004, 0x908a, 0x0053, 0x1a0c, 0x0db4,
 	0x6110, 0x2158, 0xb9b0, 0x2c78, 0x2061, 0x0100, 0x619a, 0x908a,
-	0x0040, 0x1a04, 0x8b01, 0x005b, 0x00fe, 0x00ee, 0x00de, 0x00ce,
-	0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x00be, 0x0005, 0x8c78,
-	0x8cb3, 0x8cdc, 0x8d7f, 0x8da0, 0x8da6, 0x8db3, 0x8dbb, 0x8dc7,
-	0x8dcd, 0x8dde, 0x8dcd, 0x8e35, 0x8dbb, 0x8e41, 0x8e47, 0x8dc7,
-	0x8e47, 0x8e53, 0x8aff, 0x8aff, 0x8aff, 0x8aff, 0x8aff, 0x8aff,
-	0x8aff, 0x8aff, 0x8aff, 0x8aff, 0x8aff, 0x9576, 0x9599, 0x95aa,
-	0x95ca, 0x95fc, 0x8db3, 0x8aff, 0x8db3, 0x8dcd, 0x8aff, 0x8cdc,
-	0x8d7f, 0x8aff, 0x99ae, 0x8dcd, 0x8aff, 0x99ca, 0x8dcd, 0x8aff,
-	0x8dc7, 0x8c72, 0x8b22, 0x8aff, 0x99e6, 0x9a53, 0x9b2a, 0x8aff,
-	0x9b37, 0x8db0, 0x9b62, 0x8aff, 0x9606, 0x9b8f, 0x8aff, 0x080c,
+	0x0040, 0x1a04, 0x8b29, 0x005b, 0x00fe, 0x00ee, 0x00de, 0x00ce,
+	0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x00be, 0x0005, 0x8ca0,
+	0x8cdb, 0x8d04, 0x8da7, 0x8dc8, 0x8dce, 0x8ddb, 0x8de3, 0x8def,
+	0x8df5, 0x8e06, 0x8df5, 0x8e5d, 0x8de3, 0x8e69, 0x8e6f, 0x8def,
+	0x8e6f, 0x8e7b, 0x8b27, 0x8b27, 0x8b27, 0x8b27, 0x8b27, 0x8b27,
+	0x8b27, 0x8b27, 0x8b27, 0x8b27, 0x8b27, 0x958f, 0x95b2, 0x95c3,
+	0x95e3, 0x9615, 0x8ddb, 0x8b27, 0x8ddb, 0x8df5, 0x8b27, 0x8d04,
+	0x8da7, 0x8b27, 0x99c7, 0x8df5, 0x8b27, 0x99e3, 0x8df5, 0x8b27,
+	0x8def, 0x8c9a, 0x8b4a, 0x8b27, 0x99ff, 0x9a6c, 0x9b43, 0x8b27,
+	0x9b50, 0x8dd8, 0x9b7b, 0x8b27, 0x961f, 0x9ba8, 0x8b27, 0x080c,
 	0x0db4, 0x2100, 0x005b, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de,
-	0x01ce, 0x014e, 0x013e, 0x015e, 0x00be, 0x0005, 0x8b20, 0x8b20,
-	0x8b20, 0x8b49, 0x8bf5, 0x8c00, 0x8b20, 0x8b20, 0x8b20, 0x8c47,
-	0x8c53, 0x8b64, 0x8b20, 0x8b7f, 0x8bb3, 0x9d0c, 0x9d51, 0x8dcd,
-	0x080c, 0x0db4, 0x00d6, 0x0096, 0x080c, 0x8e66, 0x7003, 0x2414,
+	0x01ce, 0x014e, 0x013e, 0x015e, 0x00be, 0x0005, 0x8b48, 0x8b48,
+	0x8b48, 0x8b71, 0x8c1d, 0x8c28, 0x8b48, 0x8b48, 0x8b48, 0x8c6f,
+	0x8c7b, 0x8b8c, 0x8b48, 0x8ba7, 0x8bdb, 0x9d25, 0x9d6a, 0x8df5,
+	0x080c, 0x0db4, 0x00d6, 0x0096, 0x080c, 0x8e8e, 0x7003, 0x2414,
 	0x7007, 0x0018, 0x700b, 0x0800, 0x7814, 0x2048, 0xa83c, 0x700e,
-	0xa850, 0x7022, 0xa854, 0x7026, 0x60c3, 0x0018, 0x080c, 0x9367,
+	0xa850, 0x7022, 0xa854, 0x7026, 0x60c3, 0x0018, 0x080c, 0x9380,
 	0x009e, 0x00de, 0x0005, 0x7810, 0x00b6, 0x2058, 0xb8a0, 0x00be,
-	0x080c, 0x9d98, 0x1118, 0x9084, 0xff80, 0x0110, 0x9085, 0x0001,
-	0x0005, 0x00d6, 0x0096, 0x080c, 0x8e66, 0x7003, 0x0500, 0x7814,
+	0x080c, 0x9db1, 0x1118, 0x9084, 0xff80, 0x0110, 0x9085, 0x0001,
+	0x0005, 0x00d6, 0x0096, 0x080c, 0x8e8e, 0x7003, 0x0500, 0x7814,
 	0x2048, 0xa874, 0x700a, 0xa878, 0x700e, 0xa87c, 0x7012, 0xa880,
 	0x7016, 0xa884, 0x701a, 0xa888, 0x701e, 0x60c3, 0x0010, 0x080c,
-	0x9367, 0x009e, 0x00de, 0x0005, 0x00d6, 0x0096, 0x080c, 0x8e66,
+	0x9380, 0x009e, 0x00de, 0x0005, 0x00d6, 0x0096, 0x080c, 0x8e8e,
 	0x7003, 0x0500, 0x7814, 0x2048, 0xa8cc, 0x700a, 0xa8d0, 0x700e,
 	0xa8d4, 0x7012, 0xa8d8, 0x7016, 0xa8dc, 0x701a, 0xa8e0, 0x701e,
-	0x60c3, 0x0010, 0x080c, 0x9367, 0x009e, 0x00de, 0x0005, 0x00d6,
-	0x0096, 0x0126, 0x2091, 0x8000, 0x080c, 0x8e66, 0x20e9, 0x0000,
+	0x60c3, 0x0010, 0x080c, 0x9380, 0x009e, 0x00de, 0x0005, 0x00d6,
+	0x0096, 0x0126, 0x2091, 0x8000, 0x080c, 0x8e8e, 0x20e9, 0x0000,
 	0x2001, 0x1974, 0x2003, 0x0000, 0x7814, 0x2048, 0xa814, 0x8003,
 	0x60c2, 0xa830, 0x20a8, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x001b,
 	0x2098, 0x2001, 0x1974, 0x0016, 0x200c, 0x2001, 0x0001, 0x080c,
-	0x224d, 0x080c, 0xc800, 0x9006, 0x080c, 0x224d, 0x001e, 0xa804,
-	0x9005, 0x0110, 0x2048, 0x0c28, 0x04d9, 0x080c, 0x9367, 0x012e,
+	0x224d, 0x080c, 0xc81a, 0x9006, 0x080c, 0x224d, 0x001e, 0xa804,
+	0x9005, 0x0110, 0x2048, 0x0c28, 0x04d9, 0x080c, 0x9380, 0x012e,
 	0x009e, 0x00de, 0x0005, 0x00d6, 0x0096, 0x0126, 0x2091, 0x8000,
-	0x080c, 0x8eb1, 0x20e9, 0x0000, 0x2001, 0x1974, 0x2003, 0x0000,
+	0x080c, 0x8ed9, 0x20e9, 0x0000, 0x2001, 0x1974, 0x2003, 0x0000,
 	0x7814, 0x2048, 0xa86f, 0x0200, 0xa873, 0x0000, 0xa814, 0x8003,
 	0x60c2, 0xa830, 0x20a8, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x001b,
-	0x2098, 0x2001, 0x1974, 0x0016, 0x200c, 0x080c, 0xc800, 0x001e,
+	0x2098, 0x2001, 0x1974, 0x0016, 0x200c, 0x080c, 0xc81a, 0x001e,
 	0xa804, 0x9005, 0x0110, 0x2048, 0x0c60, 0x0051, 0x7814, 0x2048,
-	0x080c, 0x0f9d, 0x080c, 0x9367, 0x012e, 0x009e, 0x00de, 0x0005,
+	0x080c, 0x0f9d, 0x080c, 0x9380, 0x012e, 0x009e, 0x00de, 0x0005,
 	0x60c0, 0x8004, 0x9084, 0x0003, 0x9005, 0x0130, 0x9082, 0x0004,
-	0x20a3, 0x0000, 0x8000, 0x1de0, 0x0005, 0x080c, 0x8e66, 0x7003,
-	0x7800, 0x7808, 0x8007, 0x700a, 0x60c3, 0x0008, 0x0804, 0x9367,
-	0x00d6, 0x00e6, 0x080c, 0x8eb1, 0x7814, 0x9084, 0xff00, 0x2073,
+	0x20a3, 0x0000, 0x8000, 0x1de0, 0x0005, 0x080c, 0x8e8e, 0x7003,
+	0x7800, 0x7808, 0x8007, 0x700a, 0x60c3, 0x0008, 0x0804, 0x9380,
+	0x00d6, 0x00e6, 0x080c, 0x8ed9, 0x7814, 0x9084, 0xff00, 0x2073,
 	0x0200, 0x8e70, 0x8e70, 0x9095, 0x0010, 0x2272, 0x8e70, 0x2073,
 	0x0034, 0x8e70, 0x2069, 0x1805, 0x20a9, 0x0004, 0x2d76, 0x8d68,
-	0x8e70, 0x1f04, 0x8c16, 0x2069, 0x1801, 0x20a9, 0x0004, 0x2d76,
-	0x8d68, 0x8e70, 0x1f04, 0x8c1f, 0x2069, 0x1984, 0x9086, 0xdf00,
+	0x8e70, 0x1f04, 0x8c3e, 0x2069, 0x1801, 0x20a9, 0x0004, 0x2d76,
+	0x8d68, 0x8e70, 0x1f04, 0x8c47, 0x2069, 0x1984, 0x9086, 0xdf00,
 	0x0110, 0x2069, 0x199e, 0x20a9, 0x001a, 0x9e86, 0x0260, 0x1148,
 	0x00c6, 0x2061, 0x0200, 0x6010, 0x8000, 0x6012, 0x00ce, 0x2071,
-	0x0240, 0x2d04, 0x8007, 0x2072, 0x8d68, 0x8e70, 0x1f04, 0x8c2d,
-	0x60c3, 0x004c, 0x080c, 0x9367, 0x00ee, 0x00de, 0x0005, 0x080c,
-	0x8e66, 0x7003, 0x6300, 0x7007, 0x0028, 0x7808, 0x700e, 0x60c3,
-	0x0008, 0x0804, 0x9367, 0x00d6, 0x0026, 0x0016, 0x080c, 0x8eb1,
+	0x0240, 0x2d04, 0x8007, 0x2072, 0x8d68, 0x8e70, 0x1f04, 0x8c55,
+	0x60c3, 0x004c, 0x080c, 0x9380, 0x00ee, 0x00de, 0x0005, 0x080c,
+	0x8e8e, 0x7003, 0x6300, 0x7007, 0x0028, 0x7808, 0x700e, 0x60c3,
+	0x0008, 0x0804, 0x9380, 0x00d6, 0x0026, 0x0016, 0x080c, 0x8ed9,
 	0x7003, 0x0200, 0x7814, 0x700e, 0x00e6, 0x9ef0, 0x0004, 0x2009,
 	0x0001, 0x2011, 0x000c, 0x2073, 0x0800, 0x8e70, 0x2073, 0x0000,
-	0x00ee, 0x7206, 0x710a, 0x62c2, 0x080c, 0x9367, 0x001e, 0x002e,
-	0x00de, 0x0005, 0x2001, 0x1817, 0x2004, 0x609a, 0x0804, 0x9367,
-	0x080c, 0x8e66, 0x7003, 0x5200, 0x2069, 0x1853, 0x6804, 0xd084,
+	0x00ee, 0x7206, 0x710a, 0x62c2, 0x080c, 0x9380, 0x001e, 0x002e,
+	0x00de, 0x0005, 0x2001, 0x1817, 0x2004, 0x609a, 0x0804, 0x9380,
+	0x080c, 0x8e8e, 0x7003, 0x5200, 0x2069, 0x1853, 0x6804, 0xd084,
 	0x0130, 0x6828, 0x0016, 0x080c, 0x2696, 0x710e, 0x001e, 0x20a9,
 	0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1,
 	0x0250, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, 0x20a1, 0x0254,
-	0x4003, 0x080c, 0x9d98, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248,
+	0x4003, 0x080c, 0x9db1, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248,
 	0x2001, 0x181e, 0x2004, 0x7032, 0x2001, 0x181f, 0x2004, 0x7036,
 	0x0030, 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, 0x7036, 0x60c3,
-	0x001c, 0x0804, 0x9367, 0x080c, 0x8e66, 0x7003, 0x0500, 0x080c,
-	0x9d98, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001, 0x181e,
+	0x001c, 0x0804, 0x9380, 0x080c, 0x8e8e, 0x7003, 0x0500, 0x080c,
+	0x9db1, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001, 0x181e,
 	0x2004, 0x700a, 0x2001, 0x181f, 0x2004, 0x700e, 0x0030, 0x2001,
 	0x1817, 0x2004, 0x9084, 0x00ff, 0x700e, 0x20a9, 0x0004, 0x20e1,
 	0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1, 0x0250, 0x4003,
-	0x60c3, 0x0010, 0x0804, 0x9367, 0x080c, 0x8e66, 0x9006, 0x080c,
-	0x6525, 0xb8a0, 0x9086, 0x007e, 0x1130, 0x7003, 0x0400, 0x620c,
+	0x60c3, 0x0010, 0x0804, 0x9380, 0x080c, 0x8e8e, 0x9006, 0x080c,
+	0x652c, 0xb8a0, 0x9086, 0x007e, 0x1130, 0x7003, 0x0400, 0x620c,
 	0xc2b4, 0x620e, 0x0058, 0x7814, 0x0096, 0x904d, 0x0120, 0x9006,
 	0xa89a, 0xa8a6, 0xa8aa, 0x009e, 0x7003, 0x0300, 0xb8a0, 0x9086,
-	0x007e, 0x1904, 0x8d47, 0x00d6, 0x2069, 0x193d, 0x2001, 0x1836,
+	0x007e, 0x1904, 0x8d6f, 0x00d6, 0x2069, 0x193d, 0x2001, 0x1836,
 	0x2004, 0xd0a4, 0x0178, 0x6800, 0x700a, 0x6808, 0x9084, 0x2000,
 	0x7012, 0x680c, 0x7016, 0x701f, 0x2710, 0x6818, 0x7022, 0x681c,
 	0x7026, 0x0080, 0x6800, 0x700a, 0x6804, 0x700e, 0x6808, 0x080c,
-	0x6fa7, 0x1118, 0x9084, 0x37ff, 0x0010, 0x9084, 0x3fff, 0x7012,
+	0x6fb2, 0x1118, 0x9084, 0x37ff, 0x0010, 0x9084, 0x3fff, 0x7012,
 	0x680c, 0x7016, 0x00de, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099,
 	0x1805, 0x20e9, 0x0000, 0x20a1, 0x0256, 0x4003, 0x20a9, 0x0004,
-	0x2099, 0x1801, 0x20a1, 0x025a, 0x4003, 0x00d6, 0x080c, 0x9c11,
+	0x2099, 0x1801, 0x20a1, 0x025a, 0x4003, 0x00d6, 0x080c, 0x9c2a,
 	0x2069, 0x1945, 0x2071, 0x024e, 0x6800, 0xc0dd, 0x7002, 0x080c,
-	0x5383, 0xd0e4, 0x0110, 0x680c, 0x700e, 0x00de, 0x04a0, 0x2001,
+	0x538a, 0xd0e4, 0x0110, 0x680c, 0x700e, 0x00de, 0x04a0, 0x2001,
 	0x1836, 0x2004, 0xd0a4, 0x0168, 0x0016, 0x2009, 0x0002, 0x60e0,
 	0x9106, 0x0130, 0x2100, 0x60e3, 0x0000, 0x080c, 0x26d7, 0x61e2,
 	0x001e, 0x20e1, 0x0001, 0x2099, 0x193d, 0x20e9, 0x0000, 0x20a1,
 	0x024e, 0x20a9, 0x0008, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1805,
 	0x20a1, 0x0256, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, 0x20a1,
-	0x025a, 0x4003, 0x080c, 0x9c11, 0x20a1, 0x024e, 0x20a9, 0x0008,
-	0x2099, 0x1945, 0x4003, 0x60c3, 0x0074, 0x0804, 0x9367, 0x080c,
-	0x8e66, 0x7003, 0x2010, 0x7007, 0x0014, 0x700b, 0x0800, 0x700f,
+	0x025a, 0x4003, 0x080c, 0x9c2a, 0x20a1, 0x024e, 0x20a9, 0x0008,
+	0x2099, 0x1945, 0x4003, 0x60c3, 0x0074, 0x0804, 0x9380, 0x080c,
+	0x8e8e, 0x7003, 0x2010, 0x7007, 0x0014, 0x700b, 0x0800, 0x700f,
 	0x2000, 0x9006, 0x00f6, 0x2079, 0x1853, 0x7904, 0x00fe, 0xd1ac,
 	0x1110, 0x9085, 0x0020, 0x0010, 0x9085, 0x0010, 0x9085, 0x0002,
-	0x00d6, 0x0804, 0x8e16, 0x7026, 0x60c3, 0x0014, 0x0804, 0x9367,
-	0x080c, 0x8e66, 0x7003, 0x5000, 0x0804, 0x8cf6, 0x080c, 0x8e66,
-	0x7003, 0x2110, 0x7007, 0x0014, 0x60c3, 0x0014, 0x0804, 0x9367,
-	0x080c, 0x8ea8, 0x0010, 0x080c, 0x8eb1, 0x7003, 0x0200, 0x60c3,
-	0x0004, 0x0804, 0x9367, 0x080c, 0x8eb1, 0x7003, 0x0100, 0x700b,
-	0x0003, 0x700f, 0x2a00, 0x60c3, 0x0008, 0x0804, 0x9367, 0x080c,
-	0x8eb1, 0x7003, 0x0200, 0x0804, 0x8cf6, 0x080c, 0x8eb1, 0x7003,
+	0x00d6, 0x0804, 0x8e3e, 0x7026, 0x60c3, 0x0014, 0x0804, 0x9380,
+	0x080c, 0x8e8e, 0x7003, 0x5000, 0x0804, 0x8d1e, 0x080c, 0x8e8e,
+	0x7003, 0x2110, 0x7007, 0x0014, 0x60c3, 0x0014, 0x0804, 0x9380,
+	0x080c, 0x8ed0, 0x0010, 0x080c, 0x8ed9, 0x7003, 0x0200, 0x60c3,
+	0x0004, 0x0804, 0x9380, 0x080c, 0x8ed9, 0x7003, 0x0100, 0x700b,
+	0x0003, 0x700f, 0x2a00, 0x60c3, 0x0008, 0x0804, 0x9380, 0x080c,
+	0x8ed9, 0x7003, 0x0200, 0x0804, 0x8d1e, 0x080c, 0x8ed9, 0x7003,
 	0x0100, 0x782c, 0x9005, 0x0110, 0x700a, 0x0010, 0x700b, 0x0003,
-	0x7814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x9367, 0x00d6, 0x080c,
-	0x8eb1, 0x7003, 0x0210, 0x7007, 0x0014, 0x700b, 0x0800, 0xb894,
+	0x7814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x9380, 0x00d6, 0x080c,
+	0x8ed9, 0x7003, 0x0210, 0x7007, 0x0014, 0x700b, 0x0800, 0xb894,
 	0x9086, 0x0014, 0x1198, 0xb99c, 0x9184, 0x0030, 0x0190, 0xb998,
 	0x9184, 0xc000, 0x1140, 0xd1ec, 0x0118, 0x700f, 0x2100, 0x0058,
 	0x700f, 0x0100, 0x0040, 0x700f, 0x0400, 0x0028, 0x700f, 0x0700,
@@ -4344,56 +4349,56 @@
 	0x1873, 0x210c, 0xd1e4, 0x0150, 0xc0c5, 0xbabc, 0xd28c, 0x1108,
 	0xc0cd, 0x9094, 0x0030, 0x9296, 0x0010, 0x0140, 0xd1ec, 0x0130,
 	0x9094, 0x0030, 0x9296, 0x0010, 0x0108, 0xc0bd, 0x002e, 0x7026,
-	0x60c3, 0x0014, 0x00de, 0x0804, 0x9367, 0x080c, 0x8eb1, 0x7003,
+	0x60c3, 0x0014, 0x00de, 0x0804, 0x9380, 0x080c, 0x8ed9, 0x7003,
 	0x0210, 0x7007, 0x0014, 0x700f, 0x0100, 0x60c3, 0x0014, 0x0804,
-	0x9367, 0x080c, 0x8eb1, 0x7003, 0x0200, 0x0804, 0x8c7c, 0x080c,
-	0x8eb1, 0x7003, 0x0100, 0x700b, 0x0003, 0x700f, 0x2a00, 0x60c3,
-	0x0008, 0x0804, 0x9367, 0x080c, 0x8eb1, 0x7003, 0x0100, 0x700b,
-	0x000b, 0x60c3, 0x0008, 0x0804, 0x9367, 0x0026, 0x00d6, 0x0036,
+	0x9380, 0x080c, 0x8ed9, 0x7003, 0x0200, 0x0804, 0x8ca4, 0x080c,
+	0x8ed9, 0x7003, 0x0100, 0x700b, 0x0003, 0x700f, 0x2a00, 0x60c3,
+	0x0008, 0x0804, 0x9380, 0x080c, 0x8ed9, 0x7003, 0x0100, 0x700b,
+	0x000b, 0x60c3, 0x0008, 0x0804, 0x9380, 0x0026, 0x00d6, 0x0036,
 	0x0046, 0x2019, 0x3200, 0x2021, 0x0800, 0x0040, 0x0026, 0x00d6,
-	0x0036, 0x0046, 0x2019, 0x2200, 0x2021, 0x0100, 0x080c, 0x9c26,
+	0x0036, 0x0046, 0x2019, 0x2200, 0x2021, 0x0100, 0x080c, 0x9c3f,
 	0xb810, 0x9305, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6878,
 	0x700a, 0x687c, 0x700e, 0x9485, 0x0029, 0x7012, 0x004e, 0x003e,
-	0x00de, 0x080c, 0x9355, 0x721a, 0x9f95, 0x0000, 0x7222, 0x7027,
-	0xffff, 0x2071, 0x024c, 0x002e, 0x0005, 0x0026, 0x080c, 0x9c26,
+	0x00de, 0x080c, 0x936e, 0x721a, 0x9f95, 0x0000, 0x7222, 0x7027,
+	0xffff, 0x2071, 0x024c, 0x002e, 0x0005, 0x0026, 0x080c, 0x9c3f,
 	0x7003, 0x02ff, 0x7007, 0xfffc, 0x00d6, 0x2069, 0x1800, 0x6878,
 	0x700a, 0x687c, 0x700e, 0x00de, 0x7013, 0x2029, 0x0c10, 0x7003,
 	0x0100, 0x7007, 0x0000, 0x700b, 0xfc02, 0x700f, 0x0000, 0x0005,
 	0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x3300, 0x2021, 0x0800,
 	0x0040, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x2300, 0x2021,
-	0x0100, 0x080c, 0x9c26, 0xb810, 0x9305, 0x7002, 0xb814, 0x7006,
+	0x0100, 0x080c, 0x9c3f, 0xb810, 0x9305, 0x7002, 0xb814, 0x7006,
 	0x2069, 0x1800, 0xb810, 0x9005, 0x1140, 0xb814, 0x9005, 0x1128,
 	0x700b, 0x00ff, 0x700f, 0xfffe, 0x0020, 0x6878, 0x700a, 0x687c,
 	0x700e, 0x0000, 0x9485, 0x0098, 0x7012, 0x004e, 0x003e, 0x00de,
-	0x080c, 0x9355, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x2071,
-	0x024c, 0x002e, 0x0005, 0x080c, 0x9355, 0x721a, 0x7a08, 0x7222,
+	0x080c, 0x936e, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x2071,
+	0x024c, 0x002e, 0x0005, 0x080c, 0x936e, 0x721a, 0x7a08, 0x7222,
 	0x7814, 0x7026, 0x2071, 0x024c, 0x002e, 0x0005, 0x00b6, 0x00c6,
 	0x00d6, 0x00e6, 0x00f6, 0x2069, 0x0200, 0x2071, 0x0240, 0x6004,
 	0x908a, 0x0085, 0x0a0c, 0x0db4, 0x908a, 0x0092, 0x1a0c, 0x0db4,
 	0x6110, 0x2158, 0xb9b0, 0x2c78, 0x2061, 0x0100, 0x619a, 0x9082,
 	0x0085, 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x0005,
-	0x8f1f, 0x8f2e, 0x8f39, 0x8f1d, 0x8f1d, 0x8f1d, 0x8f1f, 0x8f1d,
-	0x8f1d, 0x8f1d, 0x8f1d, 0x8f1d, 0x8f1d, 0x080c, 0x0db4, 0x0411,
+	0x8f47, 0x8f56, 0x8f61, 0x8f45, 0x8f45, 0x8f45, 0x8f47, 0x8f45,
+	0x8f45, 0x8f45, 0x8f45, 0x8f45, 0x8f45, 0x080c, 0x0db4, 0x0411,
 	0x60c3, 0x0000, 0x0026, 0x080c, 0x29ca, 0x0228, 0x2011, 0x0101,
-	0x2204, 0xc0c5, 0x2012, 0x002e, 0x0804, 0x9367, 0x0431, 0x7808,
+	0x2204, 0xc0c5, 0x2012, 0x002e, 0x0804, 0x9380, 0x0431, 0x7808,
 	0x700a, 0x7814, 0x700e, 0x7017, 0xffff, 0x60c3, 0x000c, 0x0804,
-	0x9367, 0x0479, 0x7003, 0x0003, 0x7007, 0x0300, 0x60c3, 0x0004,
-	0x0804, 0x9367, 0x0026, 0x080c, 0x9c26, 0xb810, 0x9085, 0x8100,
+	0x9380, 0x0479, 0x7003, 0x0003, 0x7007, 0x0300, 0x60c3, 0x0004,
+	0x0804, 0x9380, 0x0026, 0x080c, 0x9c3f, 0xb810, 0x9085, 0x8100,
 	0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6878, 0x700a, 0x687c,
-	0x700e, 0x7013, 0x0009, 0x0804, 0x8e81, 0x0026, 0x080c, 0x9c26,
+	0x700e, 0x7013, 0x0009, 0x0804, 0x8ea9, 0x0026, 0x080c, 0x9c3f,
 	0xb810, 0x9085, 0x8400, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800,
 	0x6878, 0x700a, 0x687c, 0x700e, 0x2001, 0x0099, 0x7012, 0x0804,
-	0x8ee3, 0x0026, 0x080c, 0x9c26, 0xb810, 0x9085, 0x8500, 0x7002,
+	0x8f0b, 0x0026, 0x080c, 0x9c3f, 0xb810, 0x9085, 0x8500, 0x7002,
 	0xb814, 0x7006, 0x2069, 0x1800, 0x6878, 0x700a, 0x687c, 0x700e,
-	0x2001, 0x0099, 0x7012, 0x0804, 0x8ee3, 0x00b6, 0x00c6, 0x00d6,
+	0x2001, 0x0099, 0x7012, 0x0804, 0x8f0b, 0x00b6, 0x00c6, 0x00d6,
 	0x00e6, 0x00f6, 0x2c78, 0x2069, 0x0200, 0x2071, 0x0240, 0x7804,
 	0x908a, 0x0040, 0x0a0c, 0x0db4, 0x908a, 0x0054, 0x1a0c, 0x0db4,
 	0x7910, 0x2158, 0xb9b0, 0x2061, 0x0100, 0x619a, 0x9082, 0x0040,
-	0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x0005, 0x8fb4,
-	0x9070, 0x9043, 0x9192, 0x8fb2, 0x8fb2, 0x8fb2, 0x8fb2, 0x8fb2,
-	0x8fb2, 0x8fb2, 0x9774, 0x977c, 0x9784, 0x978c, 0x8fb2, 0x9b6e,
-	0x8fb2, 0x976c, 0x080c, 0x0db4, 0x0096, 0x780b, 0xffff, 0x080c,
-	0x901f, 0x7914, 0x2148, 0xa978, 0x7956, 0xae64, 0x96b4, 0x00ff,
+	0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x0005, 0x8fdc,
+	0x9098, 0x906b, 0x91ba, 0x8fda, 0x8fda, 0x8fda, 0x8fda, 0x8fda,
+	0x8fda, 0x8fda, 0x978d, 0x9795, 0x979d, 0x97a5, 0x8fda, 0x9b87,
+	0x8fda, 0x9785, 0x080c, 0x0db4, 0x0096, 0x780b, 0xffff, 0x080c,
+	0x9047, 0x7914, 0x2148, 0xa978, 0x7956, 0xae64, 0x96b4, 0x00ff,
 	0x9686, 0x0008, 0x1148, 0xa8b4, 0x7032, 0xa8b8, 0x7036, 0xa8bc,
 	0x703a, 0xa8c0, 0x703e, 0x0008, 0x7132, 0xa97c, 0x9184, 0x000f,
 	0x1118, 0x2001, 0x0005, 0x0040, 0xd184, 0x0118, 0x2001, 0x0004,
@@ -4412,19 +4417,19 @@
 	0x6a78, 0x720a, 0x6a7c, 0x720e, 0x7013, 0x0829, 0x2f10, 0x7222,
 	0x7027, 0xffff, 0x0005, 0x00d6, 0x0096, 0x0081, 0x7814, 0x2048,
 	0xa890, 0x7002, 0xa88c, 0x7006, 0xa8b0, 0x700a, 0xa8ac, 0x700e,
-	0x60c3, 0x000c, 0x009e, 0x00de, 0x0804, 0x9367, 0x6813, 0x0008,
+	0x60c3, 0x000c, 0x009e, 0x00de, 0x0804, 0x9380, 0x6813, 0x0008,
 	0xb810, 0x9085, 0x0500, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800,
-	0x6878, 0x700a, 0x687c, 0x700e, 0x7013, 0x0889, 0x080c, 0x9355,
+	0x6878, 0x700a, 0x687c, 0x700e, 0x7013, 0x0889, 0x080c, 0x936e,
 	0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x2071, 0x024c, 0x0005,
-	0x00d6, 0x0096, 0x080c, 0x9170, 0x7814, 0x2048, 0x080c, 0xbafc,
+	0x00d6, 0x0096, 0x080c, 0x9198, 0x7814, 0x2048, 0x080c, 0xbb15,
 	0x1130, 0x7814, 0x9084, 0x0700, 0x8007, 0x0033, 0x0010, 0x9006,
-	0x001b, 0x009e, 0x00de, 0x0005, 0x908e, 0x90f7, 0x9107, 0x912d,
-	0x9139, 0x914a, 0x9152, 0x908c, 0x080c, 0x0db4, 0x0016, 0x0036,
+	0x001b, 0x009e, 0x00de, 0x0005, 0x90b6, 0x911f, 0x912f, 0x9155,
+	0x9161, 0x9172, 0x917a, 0x90b4, 0x080c, 0x0db4, 0x0016, 0x0036,
 	0xa97c, 0x918c, 0x0003, 0x0118, 0x9186, 0x0003, 0x1198, 0xaba8,
 	0x7824, 0xd0cc, 0x1168, 0x7316, 0xa898, 0x701a, 0xa894, 0x701e,
-	0x003e, 0x001e, 0x2001, 0x1982, 0x2004, 0x60c2, 0x0804, 0x9367,
+	0x003e, 0x001e, 0x2001, 0x1982, 0x2004, 0x60c2, 0x0804, 0x9380,
 	0xc3e5, 0x0c88, 0x9186, 0x0001, 0x190c, 0x0db4, 0xaba8, 0x7824,
-	0xd0cc, 0x1904, 0x90f4, 0x7316, 0xa898, 0x701a, 0xa894, 0x701e,
+	0xd0cc, 0x1904, 0x911c, 0x7316, 0xa898, 0x701a, 0xa894, 0x701e,
 	0xa8a4, 0x7026, 0xa8ac, 0x702e, 0x2009, 0x0018, 0x9384, 0x0300,
 	0x0570, 0xd3c4, 0x0110, 0xa8ac, 0x9108, 0xd3cc, 0x0110, 0xa8a4,
 	0x9108, 0x6810, 0x9085, 0x0010, 0x6812, 0x2011, 0x0258, 0x20e9,
@@ -4432,2071 +4437,2070 @@
 	0x9080, 0x002c, 0x2098, 0x4003, 0x6810, 0x8000, 0x6812, 0x2011,
 	0x0240, 0x22a0, 0x20a9, 0x0005, 0x4003, 0x6810, 0xc084, 0x6812,
 	0x015e, 0x9184, 0x0003, 0x0118, 0x2019, 0x0245, 0x201a, 0x61c2,
-	0x003e, 0x001e, 0x0804, 0x9367, 0xc3e5, 0x0804, 0x90b3, 0x2011,
+	0x003e, 0x001e, 0x0804, 0x9380, 0xc3e5, 0x0804, 0x90db, 0x2011,
 	0x0008, 0x2001, 0x180f, 0x2004, 0xd0a4, 0x0110, 0x2011, 0x0028,
 	0x7824, 0xd0cc, 0x1110, 0x7216, 0x0470, 0x0ce8, 0xc2e5, 0x2011,
 	0x0302, 0x0016, 0x782c, 0x701a, 0x7930, 0x711e, 0x9105, 0x0108,
 	0xc2dd, 0x001e, 0x7824, 0xd0cc, 0x0108, 0xc2e5, 0x7216, 0x7027,
 	0x0012, 0x702f, 0x0008, 0x7043, 0x7000, 0x7047, 0x0500, 0x704f,
 	0x000a, 0x2069, 0x0200, 0x6813, 0x0009, 0x2071, 0x0240, 0x700b,
-	0x2500, 0x60c3, 0x0032, 0x0804, 0x9367, 0x2011, 0x0028, 0x7824,
-	0xd0cc, 0x1128, 0x7216, 0x60c3, 0x0018, 0x0804, 0x9367, 0x0cd0,
+	0x2500, 0x60c3, 0x0032, 0x0804, 0x9380, 0x2011, 0x0028, 0x7824,
+	0xd0cc, 0x1128, 0x7216, 0x60c3, 0x0018, 0x0804, 0x9380, 0x0cd0,
 	0xc2e5, 0x2011, 0x0100, 0x7824, 0xd0cc, 0x0108, 0xc2e5, 0x7216,
 	0x702f, 0x0008, 0x7858, 0x9084, 0x00ff, 0x7036, 0x60c3, 0x0020,
-	0x0804, 0x9367, 0x2011, 0x0008, 0x7824, 0xd0cc, 0x0108, 0xc2e5,
+	0x0804, 0x9380, 0x2011, 0x0008, 0x7824, 0xd0cc, 0x0108, 0xc2e5,
 	0x7216, 0x0c08, 0x0036, 0x7b14, 0x9384, 0xff00, 0x7816, 0x9384,
 	0x00ff, 0x8001, 0x1138, 0x7824, 0xd0cc, 0x0108, 0xc2e5, 0x7216,
 	0x003e, 0x0888, 0x0046, 0x2021, 0x0800, 0x0006, 0x7824, 0xd0cc,
 	0x000e, 0x0108, 0xc4e5, 0x7416, 0x004e, 0x701e, 0x003e, 0x0818,
 	0x00d6, 0x6813, 0x0008, 0xb810, 0x9085, 0x0700, 0x7002, 0xb814,
 	0x7006, 0x2069, 0x1800, 0x6878, 0x700a, 0x687c, 0x700e, 0x7824,
-	0xd0cc, 0x1168, 0x7013, 0x0898, 0x080c, 0x9355, 0x721a, 0x7a08,
+	0xd0cc, 0x1168, 0x7013, 0x0898, 0x080c, 0x936e, 0x721a, 0x7a08,
 	0x7222, 0x2f10, 0x7226, 0x2071, 0x024c, 0x00de, 0x0005, 0x7013,
 	0x0889, 0x0c90, 0x0016, 0x7814, 0x9084, 0x0700, 0x8007, 0x0013,
-	0x001e, 0x0005, 0x91a2, 0x91a2, 0x91a4, 0x91a2, 0x91a2, 0x91a2,
-	0x91be, 0x91a2, 0x080c, 0x0db4, 0x7914, 0x918c, 0x08ff, 0x918d,
+	0x001e, 0x0005, 0x91ca, 0x91ca, 0x91cc, 0x91ca, 0x91ca, 0x91ca,
+	0x91e6, 0x91ca, 0x080c, 0x0db4, 0x7914, 0x918c, 0x08ff, 0x918d,
 	0xf600, 0x7916, 0x2009, 0x0003, 0x00b9, 0x2069, 0x1853, 0x6804,
 	0xd0bc, 0x0130, 0x682c, 0x9084, 0x00ff, 0x8007, 0x7032, 0x0010,
-	0x7033, 0x3f00, 0x60c3, 0x0001, 0x0804, 0x9367, 0x2009, 0x0003,
-	0x0019, 0x7033, 0x7f00, 0x0cb0, 0x0016, 0x080c, 0x9c26, 0x001e,
+	0x7033, 0x3f00, 0x60c3, 0x0001, 0x0804, 0x9380, 0x2009, 0x0003,
+	0x0019, 0x7033, 0x7f00, 0x0cb0, 0x0016, 0x080c, 0x9c3f, 0x001e,
 	0xb810, 0x9085, 0x0100, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800,
 	0x6a78, 0x720a, 0x6a7c, 0x720e, 0x7013, 0x0888, 0x918d, 0x0008,
-	0x7116, 0x080c, 0x9355, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226,
+	0x7116, 0x080c, 0x936e, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226,
 	0x0005, 0x00b6, 0x0096, 0x00e6, 0x00d6, 0x00c6, 0x0056, 0x0046,
 	0x0036, 0x2061, 0x0100, 0x2071, 0x1800, 0x7810, 0x2058, 0xb8a0,
 	0x2028, 0xb910, 0xba14, 0x7378, 0x747c, 0x7820, 0x90be, 0x0006,
-	0x0904, 0x92c4, 0x90be, 0x000a, 0x1904, 0x9280, 0x609f, 0x0000,
-	0x7814, 0x2048, 0xa87c, 0xd0fc, 0x05d0, 0xaf90, 0x9784, 0xff00,
+	0x0904, 0x92dd, 0x90be, 0x000a, 0x1904, 0x9299, 0xb8b0, 0x609e,
+	0x7814, 0x2048, 0xa87c, 0xd0fc, 0x0558, 0xaf90, 0x9784, 0xff00,
 	0x9105, 0x6062, 0x873f, 0x9784, 0xff00, 0x0006, 0x7814, 0x2048,
-	0xa878, 0xc0fc, 0x9005, 0x000e, 0x1160, 0xaf94, 0x87ff, 0x0510,
+	0xa878, 0xc0fc, 0x9005, 0x000e, 0x1160, 0xaf94, 0x87ff, 0x0198,
 	0x2039, 0x0098, 0x9705, 0x6072, 0x7808, 0x6082, 0x2f00, 0x6086,
 	0x0038, 0x9185, 0x2200, 0x6062, 0x6073, 0x0129, 0x6077, 0x0000,
-	0x609f, 0x0000, 0x2001, 0x1836, 0x2004, 0xd0ac, 0x11a8, 0xd09c,
-	0x0130, 0x7814, 0x2048, 0xa874, 0x9082, 0x0080, 0x1268, 0xb814,
-	0x609e, 0x0050, 0x2039, 0x0029, 0x9705, 0x6072, 0x0c48, 0x9185,
-	0x0200, 0x6062, 0x6073, 0x2029, 0xa87c, 0xd0fc, 0x0118, 0xaf94,
-	0x87ff, 0x1120, 0x2f00, 0x6082, 0x7808, 0x6086, 0x6266, 0x636a,
-	0x646e, 0x6077, 0x0000, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e,
-	0x8007, 0x607a, 0x607f, 0x0000, 0xa838, 0x608a, 0xa834, 0x608e,
-	0xa848, 0x60c6, 0xa844, 0x60ca, 0xb86c, 0x60ce, 0x60af, 0x95d5,
-	0x60d7, 0x0000, 0x080c, 0x9c0b, 0x2009, 0x07d0, 0x60c4, 0x9084,
-	0xfff0, 0x9005, 0x0110, 0x2009, 0x1b58, 0x080c, 0x8095, 0x003e,
-	0x004e, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x009e, 0x00be, 0x0005,
-	0x7804, 0x9086, 0x0040, 0x0904, 0x9300, 0x9185, 0x0100, 0x6062,
-	0x6266, 0x636a, 0x646e, 0x6073, 0x0809, 0x6077, 0x0008, 0x60af,
-	0x95d5, 0x60d7, 0x0000, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e,
-	0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6082, 0x7808, 0x6086,
-	0x7814, 0x2048, 0xa838, 0x608a, 0xa834, 0x608e, 0xa848, 0x60c6,
-	0xa844, 0x60ca, 0xb86c, 0x60ce, 0xbab0, 0x629e, 0x080c, 0x9c0b,
-	0x2009, 0x07d0, 0x60c4, 0x9084, 0xfff0, 0x9005, 0x0110, 0x2009,
-	0x1b58, 0x080c, 0x8095, 0x003e, 0x004e, 0x005e, 0x00ce, 0x00de,
-	0x00ee, 0x009e, 0x00be, 0x0005, 0x7814, 0x2048, 0xa87c, 0x9084,
-	0x0003, 0x9086, 0x0002, 0x0904, 0x931c, 0x9185, 0x0100, 0x6062,
-	0x6266, 0x636a, 0x646e, 0x6073, 0x0880, 0x6077, 0x0008, 0xb88c,
-	0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a, 0x7838, 0x607e,
-	0x2f00, 0x6086, 0x7808, 0x6082, 0xa890, 0x608a, 0xa88c, 0x608e,
-	0xa8b0, 0x60c6, 0xa8ac, 0x60ca, 0xa8ac, 0x7930, 0x9108, 0x7932,
-	0xa8b0, 0x792c, 0x9109, 0x792e, 0xb86c, 0x60ce, 0x60af, 0x95d5,
-	0x60d7, 0x0000, 0xbab0, 0x629e, 0x080c, 0x9be8, 0x0804, 0x92b0,
-	0xb8bc, 0xd084, 0x0148, 0xb88c, 0x7814, 0x2048, 0xb88c, 0x7846,
-	0xa836, 0x2900, 0xa83a, 0xb04a, 0x9185, 0x0600, 0x6062, 0x6266,
-	0x636a, 0x646e, 0x6073, 0x0829, 0x6077, 0x0000, 0x60af, 0x9575,
-	0x60d7, 0x0000, 0x0804, 0x9293, 0x9185, 0x0700, 0x6062, 0x6266,
-	0x636a, 0x646e, 0x7824, 0xd0cc, 0x7826, 0x0118, 0x6073, 0x0889,
-	0x0010, 0x6073, 0x0898, 0x6077, 0x0000, 0xb88c, 0x8000, 0x9084,
-	0x00ff, 0xb88e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6086,
-	0x7808, 0x6082, 0xa838, 0x608a, 0xa834, 0x608e, 0xa848, 0x60c6,
-	0xa844, 0x60ca, 0xb86c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000,
-	0xbab0, 0x629e, 0x7824, 0xd0cc, 0x0120, 0x080c, 0x9c0b, 0x0804,
-	0x92b0, 0x080c, 0x9be8, 0x0804, 0x92b0, 0x7a10, 0x00b6, 0x2258,
-	0xba8c, 0x8210, 0x9294, 0x00ff, 0xba8e, 0x00be, 0x8217, 0x0005,
-	0x00d6, 0x2069, 0x19b8, 0x6843, 0x0001, 0x00de, 0x0005, 0x60a3,
-	0x0056, 0x60a7, 0x9575, 0x00f1, 0x080c, 0x8087, 0x0005, 0x0016,
-	0x2001, 0x180c, 0x200c, 0x9184, 0x0600, 0x9086, 0x0600, 0x0128,
-	0x0089, 0x080c, 0x8087, 0x001e, 0x0005, 0xc1e5, 0x2001, 0x180c,
-	0x2102, 0x2001, 0x19b9, 0x2003, 0x0000, 0x2001, 0x19c1, 0x2003,
-	0x0000, 0x0c88, 0x0006, 0x6014, 0x9084, 0x1804, 0x9085, 0x0009,
-	0x6016, 0x000e, 0x0005, 0x0016, 0x00c6, 0x0006, 0x2061, 0x0100,
-	0x61a4, 0x60a7, 0x95f5, 0x6014, 0x9084, 0x1804, 0x9085, 0x0008,
-	0x6016, 0x000e, 0xa001, 0xa001, 0xa001, 0x61a6, 0x00ce, 0x001e,
-	0x0005, 0x00c6, 0x00d6, 0x0016, 0x0026, 0x2061, 0x0100, 0x2069,
-	0x0140, 0x080c, 0x6fa7, 0x11e8, 0x2001, 0x19d4, 0x2004, 0x9005,
-	0x1904, 0x93f9, 0x0066, 0x2031, 0x0001, 0x080c, 0x7057, 0x006e,
-	0x1160, 0x2061, 0x0100, 0x6020, 0xd0b4, 0x1120, 0x6024, 0xd084,
-	0x090c, 0x0db4, 0x080c, 0x8087, 0x0460, 0x00c6, 0x2061, 0x19b8,
-	0x00d0, 0x6904, 0x9194, 0x4000, 0x0548, 0x080c, 0x9393, 0x080c,
-	0x2b24, 0x00c6, 0x2061, 0x19b8, 0x6128, 0x9192, 0x0008, 0x1258,
-	0x8108, 0x612a, 0x6124, 0x00ce, 0x81ff, 0x0198, 0x080c, 0x8087,
-	0x080c, 0x938a, 0x0070, 0x6124, 0x91e5, 0x0000, 0x0140, 0x080c,
-	0xd8a9, 0x080c, 0x8090, 0x2009, 0x0014, 0x080c, 0x9e93, 0x00ce,
-	0x0000, 0x002e, 0x001e, 0x00de, 0x00ce, 0x0005, 0x2001, 0x19d4,
-	0x2004, 0x9005, 0x1db0, 0x00c6, 0x2061, 0x19b8, 0x6128, 0x9192,
-	0x0003, 0x1e08, 0x8108, 0x612a, 0x00ce, 0x080c, 0x8087, 0x080c,
-	0x5b89, 0x2009, 0x1852, 0x2114, 0x8210, 0x220a, 0x0c10, 0x0096,
-	0x00c6, 0x00d6, 0x00e6, 0x0016, 0x0026, 0x080c, 0x809d, 0x2071,
-	0x19b8, 0x713c, 0x81ff, 0x0904, 0x9489, 0x2061, 0x0100, 0x2069,
-	0x0140, 0x080c, 0x6fa7, 0x11b0, 0x0036, 0x2019, 0x0002, 0x080c,
-	0x96bf, 0x003e, 0x713c, 0x2160, 0x080c, 0xd8a9, 0x2009, 0x004a,
-	0x080c, 0x9e93, 0x0066, 0x2031, 0x0001, 0x080c, 0x7057, 0x006e,
-	0x0804, 0x9489, 0x080c, 0x9495, 0x0904, 0x9489, 0x6904, 0xd1f4,
-	0x0904, 0x9490, 0x080c, 0x2b24, 0x00c6, 0x703c, 0x9065, 0x090c,
-	0x0db4, 0x6020, 0x00ce, 0x9086, 0x0006, 0x1528, 0x61c8, 0x60c4,
-	0x9105, 0x1508, 0x2009, 0x180c, 0x2104, 0xd0d4, 0x01e0, 0x6214,
-	0x9294, 0x1800, 0x1128, 0x6224, 0x9294, 0x0002, 0x1510, 0x0030,
-	0xc0d4, 0x200a, 0xd0cc, 0x0110, 0x080c, 0x2a77, 0x6014, 0x9084,
-	0xe7fd, 0x9085, 0x0010, 0x6016, 0x703c, 0x2060, 0x2009, 0x0049,
-	0x080c, 0x9e93, 0x0070, 0x0036, 0x2019, 0x0001, 0x080c, 0x96bf,
-	0x003e, 0x713c, 0x2160, 0x080c, 0xd8a9, 0x2009, 0x004a, 0x080c,
-	0x9e93, 0x002e, 0x001e, 0x00ee, 0x00de, 0x00ce, 0x009e, 0x0005,
-	0xd1ec, 0x1904, 0x944a, 0x0804, 0x944c, 0x00d6, 0x00c6, 0x0096,
-	0x703c, 0x9065, 0x090c, 0x0db4, 0x2001, 0x1836, 0x2004, 0xd09c,
-	0x1904, 0x9521, 0x2001, 0x0306, 0x200c, 0x9184, 0x0030, 0x0904,
-	0x9521, 0x9184, 0x0048, 0x9086, 0x0008, 0x1904, 0x9521, 0x2001,
-	0x020b, 0x2004, 0xd0fc, 0x0904, 0x9521, 0xd08c, 0x0904, 0x9521,
-	0x2009, 0x1a50, 0x2104, 0x8000, 0x0208, 0x200a, 0x2069, 0x0100,
-	0x6914, 0x918c, 0x0184, 0x918d, 0x0010, 0x6916, 0x69c8, 0x2011,
-	0x0020, 0x68c8, 0x9106, 0x1570, 0x8211, 0x1dd8, 0x2001, 0x0306,
-	0x2003, 0x4800, 0x2001, 0x009a, 0x2003, 0x0004, 0x2001, 0x1a36,
-	0x2003, 0x0000, 0x2001, 0x1a3f, 0x2003, 0x0000, 0x6a88, 0x698c,
-	0x2200, 0x9105, 0x1120, 0x2c10, 0x080c, 0x1a5c, 0x0040, 0x6014,
-	0x2048, 0xaa3a, 0xa936, 0x6ac4, 0x69c8, 0xa946, 0xaa4a, 0x0126,
-	0x00c6, 0x2091, 0x2400, 0x002e, 0x080c, 0x1ae8, 0x190c, 0x0db4,
-	0x012e, 0x0090, 0x2009, 0x1a51, 0x2104, 0x8000, 0x0208, 0x200a,
-	0x69c8, 0x2011, 0x0020, 0x8211, 0x1df0, 0x68c8, 0x9106, 0x1dc0,
-	0x69c4, 0x68c8, 0x9105, 0x0160, 0x6824, 0xd08c, 0x0110, 0x6827,
-	0x0002, 0x7048, 0xc085, 0x704a, 0x0079, 0x7048, 0xc084, 0x704a,
-	0x2009, 0x07d0, 0x080c, 0x8095, 0x9006, 0x009e, 0x00ce, 0x00de,
-	0x0005, 0x9085, 0x0001, 0x0cc8, 0x0026, 0x00e6, 0x2071, 0x19b8,
-	0x7048, 0xd084, 0x01c0, 0x713c, 0x81ff, 0x01a8, 0x2071, 0x0100,
-	0x9188, 0x0008, 0x2114, 0x928e, 0x0006, 0x1138, 0x7014, 0x9084,
-	0x1984, 0x9085, 0x0012, 0x7016, 0x0030, 0x7014, 0x9084, 0x1984,
-	0x9085, 0x0016, 0x7016, 0x00ee, 0x002e, 0x0005, 0x00b6, 0x00e6,
-	0x00d6, 0x00c6, 0x0066, 0x0056, 0x0046, 0x0006, 0x0126, 0x2091,
-	0x8000, 0x6010, 0x2058, 0xbca0, 0x2071, 0x19b8, 0x7018, 0x2058,
-	0x8bff, 0x0190, 0xb8a0, 0x9406, 0x0118, 0xb854, 0x2058, 0x0cc0,
-	0x6014, 0x0096, 0x2048, 0xac6c, 0xad70, 0xae78, 0x009e, 0x080c,
-	0x6369, 0x0110, 0x9085, 0x0001, 0x012e, 0x000e, 0x004e, 0x005e,
-	0x006e, 0x00ce, 0x00de, 0x00ee, 0x00be, 0x0005, 0x080c, 0x8e66,
-	0x7003, 0x1200, 0x7838, 0x7012, 0x783c, 0x7016, 0x00c6, 0x7820,
-	0x9086, 0x0004, 0x1148, 0x7810, 0x9005, 0x0130, 0x00b6, 0x2058,
-	0xb810, 0xb914, 0x00be, 0x0020, 0x2061, 0x1800, 0x6078, 0x617c,
-	0x9084, 0x00ff, 0x700a, 0x710e, 0x00ce, 0x60c3, 0x002c, 0x0804,
-	0x9367, 0x080c, 0x8e66, 0x7003, 0x0f00, 0x7808, 0xd09c, 0x0128,
-	0xb810, 0x9084, 0x00ff, 0x700a, 0xb814, 0x700e, 0x60c3, 0x0008,
-	0x0804, 0x9367, 0x0156, 0x080c, 0x8eb1, 0x7003, 0x0200, 0x2011,
-	0x1848, 0x63f0, 0x2312, 0x20a9, 0x0006, 0x2011, 0x1840, 0x2019,
-	0x1841, 0x9ef0, 0x0002, 0x2376, 0x8e70, 0x2276, 0x8e70, 0x9398,
-	0x0002, 0x9290, 0x0002, 0x1f04, 0x95bb, 0x60c3, 0x001c, 0x015e,
-	0x0804, 0x9367, 0x0016, 0x0026, 0x080c, 0x8e8d, 0x080c, 0x8e9f,
-	0x9e80, 0x0004, 0x20e9, 0x0000, 0x20a0, 0x7814, 0x0096, 0x2048,
-	0xa800, 0x2048, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0021, 0x2098,
-	0x009e, 0x7808, 0x9088, 0x0002, 0x21a8, 0x9192, 0x0010, 0x1250,
-	0x4003, 0x9080, 0x0004, 0x8003, 0x60c2, 0x080c, 0x9367, 0x002e,
-	0x001e, 0x0005, 0x20a9, 0x0010, 0x4003, 0x080c, 0x9c11, 0x20a1,
-	0x0240, 0x22a8, 0x4003, 0x0c68, 0x080c, 0x8e66, 0x7003, 0x6200,
-	0x7808, 0x700e, 0x60c3, 0x0008, 0x0804, 0x9367, 0x0016, 0x0026,
-	0x080c, 0x8e66, 0x20e9, 0x0000, 0x20a1, 0x024c, 0x7814, 0x0096,
-	0x2048, 0xa800, 0x2048, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0023,
-	0x2098, 0x009e, 0x7808, 0x9088, 0x0002, 0x21a8, 0x4003, 0x8003,
-	0x60c2, 0x080c, 0x9367, 0x002e, 0x001e, 0x0005, 0x00e6, 0x00c6,
-	0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19b8, 0x700c, 0x2060,
-	0x8cff, 0x0178, 0x080c, 0xbd04, 0x1110, 0x080c, 0xa7a7, 0x600c,
-	0x0006, 0x080c, 0xbf6b, 0x080c, 0x9e19, 0x080c, 0x9797, 0x00ce,
-	0x0c78, 0x2c00, 0x700e, 0x700a, 0x012e, 0x000e, 0x00ce, 0x00ee,
-	0x0005, 0x0126, 0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066,
-	0x0026, 0x0016, 0x0006, 0x2091, 0x8000, 0x2001, 0x180c, 0x200c,
-	0x918c, 0xe7ff, 0x2102, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071,
-	0x19b8, 0x7024, 0x2060, 0x8cff, 0x01f8, 0x080c, 0x9393, 0x6ac0,
-	0x68c3, 0x0000, 0x080c, 0x8090, 0x00c6, 0x2061, 0x0100, 0x080c,
-	0x9c2a, 0x00ce, 0x20a9, 0x01f4, 0x0461, 0x2009, 0x0013, 0x080c,
-	0x9e93, 0x000e, 0x001e, 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee,
-	0x00fe, 0x015e, 0x012e, 0x0005, 0x2001, 0x1800, 0x2004, 0x9096,
-	0x0001, 0x0d78, 0x9096, 0x0004, 0x0d60, 0x080c, 0x8090, 0x6814,
-	0x9084, 0x0001, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3,
-	0x0000, 0x2011, 0x5b33, 0x080c, 0x8010, 0x20a9, 0x01f4, 0x0009,
-	0x08c0, 0x6824, 0xd094, 0x0140, 0x6827, 0x0004, 0x7804, 0x9084,
-	0x4000, 0x190c, 0x2b24, 0x0090, 0xd084, 0x0118, 0x6827, 0x0001,
-	0x0010, 0x1f04, 0x96a1, 0x7804, 0x9084, 0x1000, 0x0138, 0x2001,
-	0x0100, 0x080c, 0x2b14, 0x9006, 0x080c, 0x2b14, 0x0005, 0x0126,
-	0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0016,
-	0x0006, 0x2091, 0x8000, 0x2001, 0x180c, 0x200c, 0x918c, 0xdbff,
-	0x2102, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x19b8, 0x703c,
-	0x2060, 0x8cff, 0x0904, 0x974d, 0x9386, 0x0002, 0x1128, 0x6814,
-	0x9084, 0x0002, 0x0904, 0x974d, 0x68af, 0x95f5, 0x6817, 0x0010,
-	0x2009, 0x00fa, 0x8109, 0x1df0, 0x69c6, 0x68cb, 0x0008, 0x080c,
-	0x809d, 0x080c, 0x1e90, 0x0046, 0x2009, 0x00a5, 0x080c, 0x0e2f,
-	0x2021, 0x0169, 0x2404, 0x9084, 0x000f, 0x9086, 0x0004, 0x11f8,
-	0x68af, 0x95f5, 0x68c6, 0x68cb, 0x0008, 0x00e6, 0x00f6, 0x2079,
-	0x0090, 0x2071, 0x1a36, 0x6814, 0x9084, 0x1984, 0x9085, 0x0012,
-	0x6816, 0x782b, 0x0008, 0x7003, 0x0000, 0x00fe, 0x00ee, 0x9386,
-	0x0002, 0x1128, 0x7884, 0x9005, 0x1110, 0x7887, 0x0001, 0x2001,
-	0x1952, 0x200c, 0x080c, 0x0e2f, 0x004e, 0x20a9, 0x03e8, 0x6824,
-	0xd094, 0x0140, 0x6827, 0x0004, 0x7804, 0x9084, 0x4000, 0x190c,
-	0x2b24, 0x0090, 0xd08c, 0x0118, 0x6827, 0x0002, 0x0010, 0x1f04,
-	0x9727, 0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c,
-	0x2b14, 0x9006, 0x080c, 0x2b14, 0x6827, 0x4000, 0x6824, 0x83ff,
-	0x1120, 0x2009, 0x0049, 0x080c, 0x9e93, 0x000e, 0x001e, 0x002e,
-	0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005,
-	0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, 0x19b8, 0x6a06, 0x012e,
-	0x00de, 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, 0x19b8,
-	0x6a32, 0x012e, 0x00de, 0x0005, 0x080c, 0x901f, 0x7854, 0x7032,
-	0x7042, 0x7047, 0x1000, 0x00f8, 0x080c, 0x901f, 0x7854, 0x7032,
-	0x7042, 0x7047, 0x4000, 0x00b8, 0x080c, 0x901f, 0x7854, 0x7032,
-	0x7042, 0x7047, 0x2000, 0x0078, 0x080c, 0x901f, 0x7854, 0x7032,
-	0x7042, 0x7047, 0x0400, 0x0038, 0x080c, 0x901f, 0x7854, 0x7032,
-	0x7042, 0x7047, 0x0200, 0x60c3, 0x0020, 0x0804, 0x9367, 0x00e6,
-	0x2071, 0x19b8, 0x7020, 0x9005, 0x0110, 0x8001, 0x7022, 0x00ee,
-	0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066, 0x0006,
-	0x0126, 0x2091, 0x8000, 0x2071, 0x19b8, 0x7614, 0x2660, 0x2678,
-	0x2039, 0x0001, 0x87ff, 0x0904, 0x983c, 0x8cff, 0x0904, 0x983c,
-	0x6020, 0x9086, 0x0006, 0x1904, 0x9837, 0x88ff, 0x0138, 0x2800,
-	0x9c06, 0x1904, 0x9837, 0x2039, 0x0000, 0x0050, 0x6010, 0x9b06,
-	0x1904, 0x9837, 0x85ff, 0x0120, 0x6054, 0x9106, 0x1904, 0x9837,
-	0x7024, 0x9c06, 0x15b0, 0x2069, 0x0100, 0x68c0, 0x9005, 0x1160,
-	0x6824, 0xd084, 0x0148, 0x6827, 0x0001, 0x080c, 0x8090, 0x080c,
-	0x98c1, 0x7027, 0x0000, 0x0428, 0x080c, 0x8090, 0x6820, 0xd0b4,
-	0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000, 0x080c,
-	0x98c1, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384,
-	0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2b14, 0x9006, 0x080c,
-	0x2b14, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001,
-	0x003e, 0x7014, 0x9c36, 0x1110, 0x660c, 0x7616, 0x7010, 0x9c36,
-	0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7012, 0x0010, 0x7013,
-	0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008,
-	0x2678, 0x89ff, 0x1168, 0x600f, 0x0000, 0x6014, 0x0096, 0x2048,
-	0x080c, 0xbafc, 0x0110, 0x080c, 0xd4b5, 0x009e, 0x080c, 0x9e49,
-	0x080c, 0x9797, 0x88ff, 0x1190, 0x00ce, 0x0804, 0x97b2, 0x2c78,
-	0x600c, 0x2060, 0x0804, 0x97b2, 0x9006, 0x012e, 0x000e, 0x006e,
-	0x007e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601b, 0x0000,
-	0x00ce, 0x98c5, 0x0001, 0x0c88, 0x00f6, 0x00e6, 0x00d6, 0x0096,
-	0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071,
-	0x19b8, 0x7638, 0x2660, 0x2678, 0x8cff, 0x0904, 0x98b0, 0x6020,
-	0x9086, 0x0006, 0x1904, 0x98ab, 0x87ff, 0x0128, 0x2700, 0x9c06,
-	0x1904, 0x98ab, 0x0040, 0x6010, 0x9b06, 0x15e8, 0x85ff, 0x0118,
-	0x6054, 0x9106, 0x15c0, 0x703c, 0x9c06, 0x1168, 0x0036, 0x2019,
-	0x0001, 0x080c, 0x96bf, 0x7033, 0x0000, 0x9006, 0x703e, 0x7042,
-	0x7046, 0x704a, 0x003e, 0x7038, 0x9c36, 0x1110, 0x660c, 0x763a,
-	0x7034, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7036,
-	0x0010, 0x7037, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110,
-	0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x6014, 0x2048, 0x080c,
-	0xbafc, 0x0110, 0x080c, 0xd4b5, 0x080c, 0x9e49, 0x87ff, 0x1198,
-	0x00ce, 0x0804, 0x985c, 0x2c78, 0x600c, 0x2060, 0x0804, 0x985c,
-	0x9006, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x009e, 0x00de,
-	0x00ee, 0x00fe, 0x0005, 0x601b, 0x0000, 0x00ce, 0x97bd, 0x0001,
-	0x0c80, 0x00e6, 0x2071, 0x19b8, 0x2001, 0x1800, 0x2004, 0x9086,
-	0x0002, 0x1118, 0x7007, 0x0005, 0x0010, 0x7007, 0x0000, 0x00ee,
-	0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126,
-	0x2091, 0x8000, 0x2071, 0x19b8, 0x2c10, 0x7638, 0x2660, 0x2678,
-	0x8cff, 0x0518, 0x2200, 0x9c06, 0x11e0, 0x7038, 0x9c36, 0x1110,
-	0x660c, 0x763a, 0x7034, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118,
-	0x2f00, 0x7036, 0x0010, 0x7037, 0x0000, 0x660c, 0x2c00, 0x9f06,
-	0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x9085, 0x0001,
-	0x0020, 0x2c78, 0x600c, 0x2060, 0x08d8, 0x012e, 0x000e, 0x002e,
-	0x006e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0096, 0x00f6, 0x00e6,
-	0x00d6, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000,
-	0x2071, 0x19b8, 0x760c, 0x2660, 0x2678, 0x8cff, 0x0904, 0x999d,
-	0x6010, 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x9206, 0x1904, 0x9998,
-	0x7024, 0x9c06, 0x1520, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904,
-	0x9974, 0x080c, 0x9393, 0x68c3, 0x0000, 0x080c, 0x98c1, 0x7027,
-	0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138,
-	0x2001, 0x0100, 0x080c, 0x2b14, 0x9006, 0x080c, 0x2b14, 0x2069,
-	0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x700c,
-	0x9c36, 0x1110, 0x660c, 0x760e, 0x7008, 0x9c36, 0x1140, 0x2c00,
-	0x9f36, 0x0118, 0x2f00, 0x700a, 0x0010, 0x700b, 0x0000, 0x660c,
-	0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f,
-	0x0000, 0x080c, 0xbcf3, 0x1158, 0x080c, 0x2ffc, 0x080c, 0xbd04,
-	0x11f0, 0x080c, 0xa7a7, 0x00d8, 0x080c, 0x98c1, 0x08c0, 0x080c,
-	0xbd04, 0x1118, 0x080c, 0xa7a7, 0x0090, 0x6014, 0x2048, 0x080c,
-	0xbafc, 0x0168, 0x6020, 0x9086, 0x0003, 0x1508, 0xa867, 0x0103,
-	0xab7a, 0xa877, 0x0000, 0x080c, 0x6878, 0x080c, 0xbce7, 0x080c,
-	0xbf6b, 0x080c, 0x9e49, 0x080c, 0x9797, 0x00ce, 0x0804, 0x991d,
-	0x2c78, 0x600c, 0x2060, 0x0804, 0x991d, 0x012e, 0x000e, 0x002e,
-	0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x009e, 0x0005, 0x6020,
-	0x9086, 0x0006, 0x1d20, 0x080c, 0xd4b5, 0x0c08, 0x00d6, 0x080c,
-	0x8eb1, 0x7003, 0x0200, 0x7007, 0x0014, 0x60c3, 0x0014, 0x20e1,
-	0x0001, 0x2099, 0x195a, 0x20e9, 0x0000, 0x20a1, 0x0250, 0x20a9,
-	0x0004, 0x4003, 0x7023, 0x0004, 0x7027, 0x7878, 0x080c, 0x9367,
-	0x00de, 0x0005, 0x080c, 0x8eb1, 0x700b, 0x0800, 0x7814, 0x9084,
-	0xff00, 0x700e, 0x7814, 0x9084, 0x00ff, 0x7022, 0x782c, 0x7026,
-	0x7858, 0x9084, 0x00ff, 0x9085, 0x0200, 0x7002, 0x7858, 0x9084,
-	0xff00, 0x8007, 0x7006, 0x60c2, 0x0804, 0x9367, 0x00b6, 0x00d6,
-	0x0016, 0x00d6, 0x2f68, 0x2009, 0x0035, 0x080c, 0xc171, 0x00de,
-	0x1904, 0x9a4b, 0x080c, 0x8e66, 0x7003, 0x1300, 0x782c, 0x080c,
-	0x9b4d, 0x2068, 0x6820, 0x9086, 0x0003, 0x0560, 0x7810, 0x2058,
-	0xbaa0, 0x080c, 0x9d98, 0x11d8, 0x9286, 0x007e, 0x1128, 0x700b,
-	0x00ff, 0x700f, 0xfffe, 0x0498, 0x9286, 0x007f, 0x1128, 0x700b,
-	0x00ff, 0x700f, 0xfffd, 0x0458, 0x9284, 0xff80, 0x0180, 0x9286,
-	0x0080, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffc, 0x0400, 0x92d8,
-	0x1000, 0x2b5c, 0xb810, 0x700a, 0xb814, 0x700e, 0x00c0, 0x6098,
-	0x700e, 0x00a8, 0x080c, 0x9d98, 0x1130, 0x7810, 0x2058, 0xb8a0,
-	0x9082, 0x007e, 0x0250, 0x00d6, 0x2069, 0x181e, 0x2d04, 0x700a,
-	0x8d68, 0x2d04, 0x700e, 0x00de, 0x0010, 0x6034, 0x700e, 0x7838,
-	0x7012, 0x783c, 0x7016, 0x60c3, 0x000c, 0x001e, 0x00de, 0x080c,
-	0x9367, 0x00be, 0x0005, 0x781b, 0x0001, 0x7803, 0x0006, 0x001e,
-	0x00de, 0x00be, 0x0005, 0x792c, 0x9180, 0x0008, 0x200c, 0x9186,
-	0x0006, 0x01c0, 0x9186, 0x0003, 0x0904, 0x9ac5, 0x9186, 0x0005,
-	0x0904, 0x9aae, 0x9186, 0x0004, 0x05d8, 0x9186, 0x0008, 0x0904,
-	0x9ab6, 0x7807, 0x0037, 0x782f, 0x0003, 0x7817, 0x1700, 0x080c,
-	0x9b2a, 0x0005, 0x080c, 0x9aeb, 0x00d6, 0x0026, 0x792c, 0x2168,
-	0x2009, 0x4000, 0x6800, 0x0002, 0x9a8f, 0x9a9a, 0x9a91, 0x9a9a,
-	0x9a96, 0x9a8f, 0x9a8f, 0x9a9a, 0x9a9a, 0x9a9a, 0x9a9a, 0x9a8f,
-	0x9a8f, 0x9a8f, 0x9a8f, 0x9a8f, 0x9a9a, 0x9a8f, 0x9a9a, 0x080c,
-	0x0db4, 0x6824, 0xd0e4, 0x0110, 0xd0cc, 0x0110, 0x900e, 0x0010,
-	0x2009, 0x2000, 0x682c, 0x7022, 0x6830, 0x7026, 0x0804, 0x9ae4,
-	0x080c, 0x9aeb, 0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000,
-	0x6a00, 0x9286, 0x0002, 0x1108, 0x900e, 0x04b0, 0x04e1, 0x00d6,
-	0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x0470, 0x04a1, 0x00d6,
-	0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x9286, 0x0005, 0x0118,
-	0x9286, 0x0002, 0x1108, 0x900e, 0x00f8, 0x0429, 0x00d6, 0x0026,
-	0x792c, 0x2168, 0x6814, 0x0096, 0x2048, 0xa9ac, 0xa834, 0x9112,
-	0xa9b0, 0xa838, 0x009e, 0x9103, 0x7022, 0x7226, 0x792c, 0x9180,
-	0x0000, 0x2004, 0x908e, 0x0002, 0x0130, 0x908e, 0x0004, 0x0118,
-	0x2009, 0x4000, 0x0008, 0x900e, 0x712a, 0x60c3, 0x0018, 0x002e,
-	0x00de, 0x0804, 0x9367, 0x00b6, 0x0036, 0x0046, 0x0056, 0x0066,
-	0x080c, 0x8eb1, 0x9006, 0x7003, 0x0200, 0x7938, 0x710a, 0x793c,
-	0x710e, 0x7810, 0x2058, 0xb8a0, 0x080c, 0x9d98, 0x1118, 0x9092,
-	0x007e, 0x0268, 0x00d6, 0x2069, 0x181e, 0x2d2c, 0x8d68, 0x2d34,
-	0x90d8, 0x1000, 0x2b5c, 0xbb10, 0xbc14, 0x00de, 0x0028, 0x901e,
-	0x6498, 0x2029, 0x0000, 0x6634, 0x782c, 0x9080, 0x0008, 0x2004,
-	0x9086, 0x0003, 0x1128, 0x7512, 0x7616, 0x731a, 0x741e, 0x0020,
-	0x7312, 0x7416, 0x751a, 0x761e, 0x006e, 0x005e, 0x004e, 0x003e,
-	0x00be, 0x0005, 0x080c, 0x8eb1, 0x7003, 0x0100, 0x782c, 0x700a,
-	0x7814, 0x700e, 0x700e, 0x60c3, 0x0008, 0x0804, 0x9367, 0x080c,
-	0x8e5d, 0x7003, 0x1400, 0x7838, 0x700a, 0x0079, 0x783c, 0x700e,
-	0x782c, 0x7012, 0x7830, 0x7016, 0x7834, 0x9084, 0x00ff, 0x8007,
-	0x701a, 0x60c3, 0x0010, 0x0804, 0x9367, 0x00e6, 0x2071, 0x0240,
-	0x0006, 0x00f6, 0x2078, 0x7810, 0x00b6, 0x2058, 0xb8bc, 0xd084,
-	0x0120, 0x7848, 0x702a, 0x7844, 0x702e, 0x00be, 0x00fe, 0x000e,
-	0x00ee, 0x0005, 0x080c, 0x8ea8, 0x7003, 0x0100, 0x782c, 0x700a,
-	0x7814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x9367, 0x0021, 0x60c3,
-	0x0000, 0x0804, 0x9367, 0x00d6, 0x080c, 0x9c26, 0xb810, 0x9085,
-	0x0300, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6878, 0x700a,
-	0x687c, 0x700e, 0x7013, 0x0819, 0x080c, 0x9355, 0x721a, 0x2f10,
-	0x7222, 0x7a08, 0x7226, 0x2071, 0x024c, 0x00de, 0x0005, 0x00a9,
-	0x7914, 0x712a, 0x60c3, 0x0000, 0x60a7, 0x9575, 0x0026, 0x080c,
-	0x29ca, 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012, 0x002e,
-	0x080c, 0x938a, 0x080c, 0x8087, 0x0005, 0x0036, 0x0096, 0x00d6,
-	0x00e6, 0x7858, 0x2048, 0xaa7c, 0x9296, 0x00c0, 0x9294, 0xfffd,
-	0xaa7e, 0xaa80, 0x9294, 0x0300, 0xaa82, 0xa96c, 0x9194, 0x00ff,
-	0xab74, 0x9384, 0x00ff, 0x908d, 0xc200, 0xa96e, 0x9384, 0xff00,
-	0x9215, 0xaa76, 0xa870, 0xaa78, 0xa87a, 0xaa72, 0x00d6, 0x2069,
-	0x0200, 0x080c, 0x9c26, 0x00de, 0x20e9, 0x0000, 0x20a1, 0x0240,
-	0x20a9, 0x000a, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x001b, 0x2098,
-	0x4003, 0x60a3, 0x0035, 0xaa68, 0x9294, 0x7000, 0x9286, 0x3000,
-	0x0110, 0x60a3, 0x0037, 0x00ee, 0x00de, 0x009e, 0x003e, 0x0005,
-	0x900e, 0x7814, 0x0096, 0x2048, 0xa87c, 0xd0fc, 0x01c0, 0x9084,
-	0x0003, 0x11a8, 0x2001, 0x180c, 0x2004, 0xd0bc, 0x0180, 0x7824,
-	0xd0cc, 0x1168, 0xd0c4, 0x1158, 0xa8a8, 0x9005, 0x1140, 0x2001,
-	0x180c, 0x200c, 0xc1d5, 0x2102, 0x2009, 0x1983, 0x210c, 0x009e,
-	0x918d, 0x0092, 0x0010, 0x2009, 0x0096, 0x60ab, 0x0036, 0x6116,
-	0x0005, 0x2009, 0x0009, 0x00a0, 0x2009, 0x000a, 0x0088, 0x2009,
-	0x000b, 0x0070, 0x2009, 0x000c, 0x0058, 0x2009, 0x000d, 0x0040,
-	0x2009, 0x000e, 0x0028, 0x2009, 0x000f, 0x0010, 0x2009, 0x0008,
-	0x6912, 0x0005, 0x00d6, 0x9290, 0x0018, 0x8214, 0x20e9, 0x0000,
-	0x2069, 0x0200, 0x6813, 0x0000, 0x22a8, 0x9284, 0x00e0, 0x0128,
-	0x20a9, 0x0020, 0x9292, 0x0020, 0x0008, 0x9016, 0x20a1, 0x0240,
-	0x9006, 0x4004, 0x82ff, 0x0120, 0x6810, 0x8000, 0x6812, 0x0c60,
-	0x00de, 0x0005, 0x00d6, 0x0096, 0x6014, 0x2048, 0xa878, 0x6056,
-	0x9006, 0xa836, 0xa83a, 0xa99c, 0xa946, 0xa84a, 0x6023, 0x0003,
-	0x6007, 0x0040, 0x6003, 0x0003, 0x600b, 0xffff, 0xa817, 0x0001,
-	0xa842, 0xa83e, 0x2900, 0xa85a, 0xa813, 0x1f24, 0x080c, 0x842e,
-	0x0126, 0x2091, 0x8000, 0x080c, 0x8a26, 0x012e, 0x009e, 0x00de,
-	0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x00a6, 0x0096, 0x0066,
-	0x0126, 0x2091, 0x8000, 0x2071, 0x19b8, 0x760c, 0x2660, 0x2678,
-	0x8cff, 0x0904, 0x9cf8, 0x7024, 0x9c06, 0x1520, 0x2069, 0x0100,
-	0x68c0, 0x9005, 0x0904, 0x9ccf, 0x080c, 0x9393, 0x68c3, 0x0000,
-	0x080c, 0x98c1, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04,
+	0xb8b0, 0x609e, 0x0050, 0x2039, 0x0029, 0x9705, 0x6072, 0x0cc0,
+	0x9185, 0x0200, 0x6062, 0x6073, 0x2029, 0xa87c, 0xd0fc, 0x0118,
+	0xaf94, 0x87ff, 0x1120, 0x2f00, 0x6082, 0x7808, 0x6086, 0x6266,
+	0x636a, 0x646e, 0x6077, 0x0000, 0xb88c, 0x8000, 0x9084, 0x00ff,
+	0xb88e, 0x8007, 0x607a, 0x607f, 0x0000, 0xa838, 0x608a, 0xa834,
+	0x608e, 0xa848, 0x60c6, 0xa844, 0x60ca, 0xb86c, 0x60ce, 0x60af,
+	0x95d5, 0x60d7, 0x0000, 0x080c, 0x9c24, 0x2009, 0x07d0, 0x60c4,
+	0x9084, 0xfff0, 0x9005, 0x0110, 0x2009, 0x1b58, 0x080c, 0x80bd,
+	0x003e, 0x004e, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x009e, 0x00be,
+	0x0005, 0x7804, 0x9086, 0x0040, 0x0904, 0x9319, 0x9185, 0x0100,
+	0x6062, 0x6266, 0x636a, 0x646e, 0x6073, 0x0809, 0x6077, 0x0008,
+	0x60af, 0x95d5, 0x60d7, 0x0000, 0xb88c, 0x8000, 0x9084, 0x00ff,
+	0xb88e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6082, 0x7808,
+	0x6086, 0x7814, 0x2048, 0xa838, 0x608a, 0xa834, 0x608e, 0xa848,
+	0x60c6, 0xa844, 0x60ca, 0xb86c, 0x60ce, 0xbab0, 0x629e, 0x080c,
+	0x9c24, 0x2009, 0x07d0, 0x60c4, 0x9084, 0xfff0, 0x9005, 0x0110,
+	0x2009, 0x1b58, 0x080c, 0x80bd, 0x003e, 0x004e, 0x005e, 0x00ce,
+	0x00de, 0x00ee, 0x009e, 0x00be, 0x0005, 0x7814, 0x2048, 0xa87c,
+	0x9084, 0x0003, 0x9086, 0x0002, 0x0904, 0x9335, 0x9185, 0x0100,
+	0x6062, 0x6266, 0x636a, 0x646e, 0x6073, 0x0880, 0x6077, 0x0008,
+	0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a, 0x7838,
+	0x607e, 0x2f00, 0x6086, 0x7808, 0x6082, 0xa890, 0x608a, 0xa88c,
+	0x608e, 0xa8b0, 0x60c6, 0xa8ac, 0x60ca, 0xa8ac, 0x7930, 0x9108,
+	0x7932, 0xa8b0, 0x792c, 0x9109, 0x792e, 0xb86c, 0x60ce, 0x60af,
+	0x95d5, 0x60d7, 0x0000, 0xbab0, 0x629e, 0x080c, 0x9c01, 0x0804,
+	0x92c9, 0xb8bc, 0xd084, 0x0148, 0xb88c, 0x7814, 0x2048, 0xb88c,
+	0x7846, 0xa836, 0x2900, 0xa83a, 0xb04a, 0x9185, 0x0600, 0x6062,
+	0x6266, 0x636a, 0x646e, 0x6073, 0x0829, 0x6077, 0x0000, 0x60af,
+	0x9575, 0x60d7, 0x0000, 0x0804, 0x92ac, 0x9185, 0x0700, 0x6062,
+	0x6266, 0x636a, 0x646e, 0x7824, 0xd0cc, 0x7826, 0x0118, 0x6073,
+	0x0889, 0x0010, 0x6073, 0x0898, 0x6077, 0x0000, 0xb88c, 0x8000,
+	0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00,
+	0x6086, 0x7808, 0x6082, 0xa838, 0x608a, 0xa834, 0x608e, 0xa848,
+	0x60c6, 0xa844, 0x60ca, 0xb86c, 0x60ce, 0x60af, 0x95d5, 0x60d7,
+	0x0000, 0xbab0, 0x629e, 0x7824, 0xd0cc, 0x0120, 0x080c, 0x9c24,
+	0x0804, 0x92c9, 0x080c, 0x9c01, 0x0804, 0x92c9, 0x7a10, 0x00b6,
+	0x2258, 0xba8c, 0x8210, 0x9294, 0x00ff, 0xba8e, 0x00be, 0x8217,
+	0x0005, 0x00d6, 0x2069, 0x19b8, 0x6843, 0x0001, 0x00de, 0x0005,
+	0x60a3, 0x0056, 0x60a7, 0x9575, 0x00f1, 0x080c, 0x80af, 0x0005,
+	0x0016, 0x2001, 0x180c, 0x200c, 0x9184, 0x0600, 0x9086, 0x0600,
+	0x0128, 0x0089, 0x080c, 0x80af, 0x001e, 0x0005, 0xc1e5, 0x2001,
+	0x180c, 0x2102, 0x2001, 0x19b9, 0x2003, 0x0000, 0x2001, 0x19c1,
+	0x2003, 0x0000, 0x0c88, 0x0006, 0x6014, 0x9084, 0x1804, 0x9085,
+	0x0009, 0x6016, 0x000e, 0x0005, 0x0016, 0x00c6, 0x0006, 0x2061,
+	0x0100, 0x61a4, 0x60a7, 0x95f5, 0x6014, 0x9084, 0x1804, 0x9085,
+	0x0008, 0x6016, 0x000e, 0xa001, 0xa001, 0xa001, 0x61a6, 0x00ce,
+	0x001e, 0x0005, 0x00c6, 0x00d6, 0x0016, 0x0026, 0x2061, 0x0100,
+	0x2069, 0x0140, 0x080c, 0x6fb2, 0x11e8, 0x2001, 0x19d4, 0x2004,
+	0x9005, 0x1904, 0x9412, 0x0066, 0x2031, 0x0001, 0x080c, 0x7062,
+	0x006e, 0x1160, 0x2061, 0x0100, 0x6020, 0xd0b4, 0x1120, 0x6024,
+	0xd084, 0x090c, 0x0db4, 0x080c, 0x80af, 0x0460, 0x00c6, 0x2061,
+	0x19b8, 0x00d0, 0x6904, 0x9194, 0x4000, 0x0548, 0x080c, 0x93ac,
+	0x080c, 0x2b24, 0x00c6, 0x2061, 0x19b8, 0x6128, 0x9192, 0x0008,
+	0x1258, 0x8108, 0x612a, 0x6124, 0x00ce, 0x81ff, 0x0198, 0x080c,
+	0x80af, 0x080c, 0x93a3, 0x0070, 0x6124, 0x91e5, 0x0000, 0x0140,
+	0x080c, 0xd8c9, 0x080c, 0x80b8, 0x2009, 0x0014, 0x080c, 0x9eac,
+	0x00ce, 0x0000, 0x002e, 0x001e, 0x00de, 0x00ce, 0x0005, 0x2001,
+	0x19d4, 0x2004, 0x9005, 0x1db0, 0x00c6, 0x2061, 0x19b8, 0x6128,
+	0x9192, 0x0003, 0x1e08, 0x8108, 0x612a, 0x00ce, 0x080c, 0x80af,
+	0x080c, 0x5b90, 0x2009, 0x1852, 0x2114, 0x8210, 0x220a, 0x0c10,
+	0x0096, 0x00c6, 0x00d6, 0x00e6, 0x0016, 0x0026, 0x080c, 0x80c5,
+	0x2071, 0x19b8, 0x713c, 0x81ff, 0x0904, 0x94a2, 0x2061, 0x0100,
+	0x2069, 0x0140, 0x080c, 0x6fb2, 0x11b0, 0x0036, 0x2019, 0x0002,
+	0x080c, 0x96d8, 0x003e, 0x713c, 0x2160, 0x080c, 0xd8c9, 0x2009,
+	0x004a, 0x080c, 0x9eac, 0x0066, 0x2031, 0x0001, 0x080c, 0x7062,
+	0x006e, 0x0804, 0x94a2, 0x080c, 0x94ae, 0x0904, 0x94a2, 0x6904,
+	0xd1f4, 0x0904, 0x94a9, 0x080c, 0x2b24, 0x00c6, 0x703c, 0x9065,
+	0x090c, 0x0db4, 0x6020, 0x00ce, 0x9086, 0x0006, 0x1528, 0x61c8,
+	0x60c4, 0x9105, 0x1508, 0x2009, 0x180c, 0x2104, 0xd0d4, 0x01e0,
+	0x6214, 0x9294, 0x1800, 0x1128, 0x6224, 0x9294, 0x0002, 0x1510,
+	0x0030, 0xc0d4, 0x200a, 0xd0cc, 0x0110, 0x080c, 0x2a77, 0x6014,
+	0x9084, 0xe7fd, 0x9085, 0x0010, 0x6016, 0x703c, 0x2060, 0x2009,
+	0x0049, 0x080c, 0x9eac, 0x0070, 0x0036, 0x2019, 0x0001, 0x080c,
+	0x96d8, 0x003e, 0x713c, 0x2160, 0x080c, 0xd8c9, 0x2009, 0x004a,
+	0x080c, 0x9eac, 0x002e, 0x001e, 0x00ee, 0x00de, 0x00ce, 0x009e,
+	0x0005, 0xd1ec, 0x1904, 0x9463, 0x0804, 0x9465, 0x00d6, 0x00c6,
+	0x0096, 0x703c, 0x9065, 0x090c, 0x0db4, 0x2001, 0x1836, 0x2004,
+	0xd09c, 0x1904, 0x953a, 0x2001, 0x0306, 0x200c, 0x9184, 0x0030,
+	0x0904, 0x953a, 0x9184, 0x0048, 0x9086, 0x0008, 0x1904, 0x953a,
+	0x2001, 0x020b, 0x2004, 0xd0fc, 0x0904, 0x953a, 0xd08c, 0x0904,
+	0x953a, 0x2009, 0x1a50, 0x2104, 0x8000, 0x0208, 0x200a, 0x2069,
+	0x0100, 0x6914, 0x918c, 0x0184, 0x918d, 0x0010, 0x6916, 0x69c8,
+	0x2011, 0x0020, 0x68c8, 0x9106, 0x1570, 0x8211, 0x1dd8, 0x2001,
+	0x0306, 0x2003, 0x4800, 0x2001, 0x009a, 0x2003, 0x0004, 0x2001,
+	0x1a36, 0x2003, 0x0000, 0x2001, 0x1a3f, 0x2003, 0x0000, 0x6a88,
+	0x698c, 0x2200, 0x9105, 0x1120, 0x2c10, 0x080c, 0x1a5c, 0x0040,
+	0x6014, 0x2048, 0xaa3a, 0xa936, 0x6ac4, 0x69c8, 0xa946, 0xaa4a,
+	0x0126, 0x00c6, 0x2091, 0x2400, 0x002e, 0x080c, 0x1ae8, 0x190c,
+	0x0db4, 0x012e, 0x0090, 0x2009, 0x1a51, 0x2104, 0x8000, 0x0208,
+	0x200a, 0x69c8, 0x2011, 0x0020, 0x8211, 0x1df0, 0x68c8, 0x9106,
+	0x1dc0, 0x69c4, 0x68c8, 0x9105, 0x0160, 0x6824, 0xd08c, 0x0110,
+	0x6827, 0x0002, 0x7048, 0xc085, 0x704a, 0x0079, 0x7048, 0xc084,
+	0x704a, 0x2009, 0x07d0, 0x080c, 0x80bd, 0x9006, 0x009e, 0x00ce,
+	0x00de, 0x0005, 0x9085, 0x0001, 0x0cc8, 0x0026, 0x00e6, 0x2071,
+	0x19b8, 0x7048, 0xd084, 0x01c0, 0x713c, 0x81ff, 0x01a8, 0x2071,
+	0x0100, 0x9188, 0x0008, 0x2114, 0x928e, 0x0006, 0x1138, 0x7014,
+	0x9084, 0x1984, 0x9085, 0x0012, 0x7016, 0x0030, 0x7014, 0x9084,
+	0x1984, 0x9085, 0x0016, 0x7016, 0x00ee, 0x002e, 0x0005, 0x00b6,
+	0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0056, 0x0046, 0x0006, 0x0126,
+	0x2091, 0x8000, 0x6010, 0x2058, 0xbca0, 0x2071, 0x19b8, 0x7018,
+	0x2058, 0x8bff, 0x0190, 0xb8a0, 0x9406, 0x0118, 0xb854, 0x2058,
+	0x0cc0, 0x6014, 0x0096, 0x2048, 0xac6c, 0xad70, 0xae78, 0x009e,
+	0x080c, 0x6370, 0x0110, 0x9085, 0x0001, 0x012e, 0x000e, 0x004e,
+	0x005e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00be, 0x0005, 0x080c,
+	0x8e8e, 0x7003, 0x1200, 0x7838, 0x7012, 0x783c, 0x7016, 0x00c6,
+	0x7820, 0x9086, 0x0004, 0x1148, 0x7810, 0x9005, 0x0130, 0x00b6,
+	0x2058, 0xb810, 0xb914, 0x00be, 0x0020, 0x2061, 0x1800, 0x6078,
+	0x617c, 0x9084, 0x00ff, 0x700a, 0x710e, 0x00ce, 0x60c3, 0x002c,
+	0x0804, 0x9380, 0x080c, 0x8e8e, 0x7003, 0x0f00, 0x7808, 0xd09c,
+	0x0128, 0xb810, 0x9084, 0x00ff, 0x700a, 0xb814, 0x700e, 0x60c3,
+	0x0008, 0x0804, 0x9380, 0x0156, 0x080c, 0x8ed9, 0x7003, 0x0200,
+	0x2011, 0x1848, 0x63f0, 0x2312, 0x20a9, 0x0006, 0x2011, 0x1840,
+	0x2019, 0x1841, 0x9ef0, 0x0002, 0x2376, 0x8e70, 0x2276, 0x8e70,
+	0x9398, 0x0002, 0x9290, 0x0002, 0x1f04, 0x95d4, 0x60c3, 0x001c,
+	0x015e, 0x0804, 0x9380, 0x0016, 0x0026, 0x080c, 0x8eb5, 0x080c,
+	0x8ec7, 0x9e80, 0x0004, 0x20e9, 0x0000, 0x20a0, 0x7814, 0x0096,
+	0x2048, 0xa800, 0x2048, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0021,
+	0x2098, 0x009e, 0x7808, 0x9088, 0x0002, 0x21a8, 0x9192, 0x0010,
+	0x1250, 0x4003, 0x9080, 0x0004, 0x8003, 0x60c2, 0x080c, 0x9380,
+	0x002e, 0x001e, 0x0005, 0x20a9, 0x0010, 0x4003, 0x080c, 0x9c2a,
+	0x20a1, 0x0240, 0x22a8, 0x4003, 0x0c68, 0x080c, 0x8e8e, 0x7003,
+	0x6200, 0x7808, 0x700e, 0x60c3, 0x0008, 0x0804, 0x9380, 0x0016,
+	0x0026, 0x080c, 0x8e8e, 0x20e9, 0x0000, 0x20a1, 0x024c, 0x7814,
+	0x0096, 0x2048, 0xa800, 0x2048, 0xa860, 0x20e0, 0xa85c, 0x9080,
+	0x0023, 0x2098, 0x009e, 0x7808, 0x9088, 0x0002, 0x21a8, 0x4003,
+	0x8003, 0x60c2, 0x080c, 0x9380, 0x002e, 0x001e, 0x0005, 0x00e6,
+	0x00c6, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19b8, 0x700c,
+	0x2060, 0x8cff, 0x0178, 0x080c, 0xbd1d, 0x1110, 0x080c, 0xa7c0,
+	0x600c, 0x0006, 0x080c, 0xbf84, 0x080c, 0x9e32, 0x080c, 0x97b0,
+	0x00ce, 0x0c78, 0x2c00, 0x700e, 0x700a, 0x012e, 0x000e, 0x00ce,
+	0x00ee, 0x0005, 0x0126, 0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6,
+	0x0066, 0x0026, 0x0016, 0x0006, 0x2091, 0x8000, 0x2001, 0x180c,
+	0x200c, 0x918c, 0xe7ff, 0x2102, 0x2069, 0x0100, 0x2079, 0x0140,
+	0x2071, 0x19b8, 0x7024, 0x2060, 0x8cff, 0x01f8, 0x080c, 0x93ac,
+	0x6ac0, 0x68c3, 0x0000, 0x080c, 0x80b8, 0x00c6, 0x2061, 0x0100,
+	0x080c, 0x9c43, 0x00ce, 0x20a9, 0x01f4, 0x0461, 0x2009, 0x0013,
+	0x080c, 0x9eac, 0x000e, 0x001e, 0x002e, 0x006e, 0x00ce, 0x00de,
+	0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x2001, 0x1800, 0x2004,
+	0x9096, 0x0001, 0x0d78, 0x9096, 0x0004, 0x0d60, 0x080c, 0x80b8,
+	0x6814, 0x9084, 0x0001, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008,
+	0x68c3, 0x0000, 0x2011, 0x5b3a, 0x080c, 0x8038, 0x20a9, 0x01f4,
+	0x0009, 0x08c0, 0x6824, 0xd094, 0x0140, 0x6827, 0x0004, 0x7804,
+	0x9084, 0x4000, 0x190c, 0x2b24, 0x0090, 0xd084, 0x0118, 0x6827,
+	0x0001, 0x0010, 0x1f04, 0x96ba, 0x7804, 0x9084, 0x1000, 0x0138,
+	0x2001, 0x0100, 0x080c, 0x2b14, 0x9006, 0x080c, 0x2b14, 0x0005,
+	0x0126, 0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026,
+	0x0016, 0x0006, 0x2091, 0x8000, 0x2001, 0x180c, 0x200c, 0x918c,
+	0xdbff, 0x2102, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x19b8,
+	0x703c, 0x2060, 0x8cff, 0x0904, 0x9766, 0x9386, 0x0002, 0x1128,
+	0x6814, 0x9084, 0x0002, 0x0904, 0x9766, 0x68af, 0x95f5, 0x6817,
+	0x0010, 0x2009, 0x00fa, 0x8109, 0x1df0, 0x69c6, 0x68cb, 0x0008,
+	0x080c, 0x80c5, 0x080c, 0x1e90, 0x0046, 0x2009, 0x00a5, 0x080c,
+	0x0e2f, 0x2021, 0x0169, 0x2404, 0x9084, 0x000f, 0x9086, 0x0004,
+	0x11f8, 0x68af, 0x95f5, 0x68c6, 0x68cb, 0x0008, 0x00e6, 0x00f6,
+	0x2079, 0x0090, 0x2071, 0x1a36, 0x6814, 0x9084, 0x1984, 0x9085,
+	0x0012, 0x6816, 0x782b, 0x0008, 0x7003, 0x0000, 0x00fe, 0x00ee,
+	0x9386, 0x0002, 0x1128, 0x7884, 0x9005, 0x1110, 0x7887, 0x0001,
+	0x2001, 0x1952, 0x200c, 0x080c, 0x0e2f, 0x004e, 0x20a9, 0x03e8,
+	0x6824, 0xd094, 0x0140, 0x6827, 0x0004, 0x7804, 0x9084, 0x4000,
+	0x190c, 0x2b24, 0x0090, 0xd08c, 0x0118, 0x6827, 0x0002, 0x0010,
+	0x1f04, 0x9740, 0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100,
+	0x080c, 0x2b14, 0x9006, 0x080c, 0x2b14, 0x6827, 0x4000, 0x6824,
+	0x83ff, 0x1120, 0x2009, 0x0049, 0x080c, 0x9eac, 0x000e, 0x001e,
+	0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e,
+	0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, 0x19b8, 0x6a06,
+	0x012e, 0x00de, 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069,
+	0x19b8, 0x6a32, 0x012e, 0x00de, 0x0005, 0x080c, 0x9047, 0x7854,
+	0x7032, 0x7042, 0x7047, 0x1000, 0x00f8, 0x080c, 0x9047, 0x7854,
+	0x7032, 0x7042, 0x7047, 0x4000, 0x00b8, 0x080c, 0x9047, 0x7854,
+	0x7032, 0x7042, 0x7047, 0x2000, 0x0078, 0x080c, 0x9047, 0x7854,
+	0x7032, 0x7042, 0x7047, 0x0400, 0x0038, 0x080c, 0x9047, 0x7854,
+	0x7032, 0x7042, 0x7047, 0x0200, 0x60c3, 0x0020, 0x0804, 0x9380,
+	0x00e6, 0x2071, 0x19b8, 0x7020, 0x9005, 0x0110, 0x8001, 0x7022,
+	0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066,
+	0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19b8, 0x7614, 0x2660,
+	0x2678, 0x2039, 0x0001, 0x87ff, 0x0904, 0x9855, 0x8cff, 0x0904,
+	0x9855, 0x6020, 0x9086, 0x0006, 0x1904, 0x9850, 0x88ff, 0x0138,
+	0x2800, 0x9c06, 0x1904, 0x9850, 0x2039, 0x0000, 0x0050, 0x6010,
+	0x9b06, 0x1904, 0x9850, 0x85ff, 0x0120, 0x6054, 0x9106, 0x1904,
+	0x9850, 0x7024, 0x9c06, 0x15b0, 0x2069, 0x0100, 0x68c0, 0x9005,
+	0x1160, 0x6824, 0xd084, 0x0148, 0x6827, 0x0001, 0x080c, 0x80b8,
+	0x080c, 0x98da, 0x7027, 0x0000, 0x0428, 0x080c, 0x80b8, 0x6820,
+	0xd0b4, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000,
+	0x080c, 0x98da, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04,
 	0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2b14, 0x9006,
 	0x080c, 0x2b14, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827,
-	0x0001, 0x003e, 0x700c, 0x9c36, 0x1110, 0x660c, 0x760e, 0x7008,
-	0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x700a, 0x0010,
-	0x700b, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e,
-	0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0xbcf3, 0x1158, 0x080c,
-	0x2ffc, 0x080c, 0xbd04, 0x11f0, 0x080c, 0xa7a7, 0x00d8, 0x080c,
-	0x98c1, 0x08c0, 0x080c, 0xbd04, 0x1118, 0x080c, 0xa7a7, 0x0090,
-	0x6014, 0x2048, 0x080c, 0xbafc, 0x0168, 0x6020, 0x9086, 0x0003,
-	0x1520, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x6885,
-	0x080c, 0xbce7, 0x080c, 0xbf6b, 0x080c, 0x9e49, 0x080c, 0x9797,
-	0x00ce, 0x0804, 0x9c80, 0x2c78, 0x600c, 0x2060, 0x0804, 0x9c80,
-	0x700f, 0x0000, 0x700b, 0x0000, 0x012e, 0x006e, 0x009e, 0x00ae,
-	0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x6020, 0x9086, 0x0006,
-	0x1d08, 0x080c, 0xd4b5, 0x08f0, 0x00d6, 0x0156, 0x080c, 0x8eb1,
-	0x7a14, 0x82ff, 0x0138, 0x7003, 0x0100, 0x700b, 0x0003, 0x60c3,
-	0x0008, 0x0490, 0x7003, 0x0200, 0x7007, 0x0000, 0x2069, 0x1800,
-	0x901e, 0x6800, 0x9086, 0x0004, 0x1110, 0xc38d, 0x0060, 0x080c,
-	0x6fa7, 0x1110, 0xc3ad, 0x0008, 0xc3a5, 0x6ad8, 0xd29c, 0x1110,
-	0xd2ac, 0x0108, 0xc39d, 0x730e, 0x2011, 0x1848, 0x63f0, 0x2312,
-	0x20a9, 0x0006, 0x2011, 0x1840, 0x2019, 0x1841, 0x2071, 0x0250,
-	0x2376, 0x8e70, 0x2276, 0x8e70, 0x9398, 0x0002, 0x9290, 0x0002,
-	0x1f04, 0x9d40, 0x60c3, 0x0020, 0x080c, 0x9367, 0x015e, 0x00de,
-	0x0005, 0x0156, 0x080c, 0x8eb1, 0x7a14, 0x82ff, 0x0168, 0x9286,
-	0xffff, 0x0118, 0x9282, 0x000e, 0x1238, 0x7003, 0x0100, 0x700b,
-	0x0003, 0x60c3, 0x0008, 0x0488, 0x7003, 0x0200, 0x7007, 0x001c,
-	0x700f, 0x0001, 0x2011, 0x198e, 0x2204, 0x8007, 0x701a, 0x8210,
-	0x2204, 0x8007, 0x701e, 0x0421, 0x1120, 0xb8a0, 0x9082, 0x007f,
-	0x0248, 0x2001, 0x181e, 0x2004, 0x7022, 0x2001, 0x181f, 0x2004,
-	0x7026, 0x0030, 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, 0x7026,
-	0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000,
-	0x20a1, 0x0256, 0x4003, 0x60c3, 0x001c, 0x015e, 0x0804, 0x9367,
-	0x0006, 0x2001, 0x1836, 0x2004, 0xd0ac, 0x000e, 0x0005, 0x2011,
-	0x0003, 0x080c, 0x9758, 0x2011, 0x0002, 0x080c, 0x9762, 0x080c,
-	0x9649, 0x0036, 0x901e, 0x080c, 0x96bf, 0x003e, 0x0005, 0x2071,
-	0x1883, 0x7000, 0x9005, 0x0140, 0x2001, 0x0976, 0x2071, 0x1800,
-	0x7072, 0x7076, 0x7067, 0xffe0, 0x2071, 0x1800, 0x7070, 0x7052,
-	0x7057, 0x1cd0, 0x0005, 0x00e6, 0x0126, 0x2071, 0x1800, 0x2091,
-	0x8000, 0x7550, 0x9582, 0x0010, 0x0608, 0x7054, 0x2060, 0x6000,
-	0x9086, 0x0000, 0x0148, 0x9ce0, 0x0018, 0x7064, 0x9c02, 0x1208,
-	0x0cb0, 0x2061, 0x1cd0, 0x0c98, 0x6003, 0x0008, 0x8529, 0x7552,
-	0x9ca8, 0x0018, 0x7064, 0x9502, 0x1230, 0x7556, 0x9085, 0x0001,
-	0x012e, 0x00ee, 0x0005, 0x7057, 0x1cd0, 0x0cc0, 0x9006, 0x0cc0,
-	0x00e6, 0x2071, 0x1800, 0x7550, 0x9582, 0x0010, 0x0600, 0x7054,
-	0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, 0x0018, 0x7064,
-	0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1cd0, 0x0c98, 0x6003, 0x0008,
-	0x8529, 0x7552, 0x9ca8, 0x0018, 0x7064, 0x9502, 0x1228, 0x7556,
-	0x9085, 0x0001, 0x00ee, 0x0005, 0x7057, 0x1cd0, 0x0cc8, 0x9006,
-	0x0cc8, 0x9c82, 0x1cd0, 0x0a0c, 0x0db4, 0x2001, 0x1819, 0x2004,
-	0x9c02, 0x1a0c, 0x0db4, 0x9006, 0x6006, 0x600a, 0x600e, 0x6016,
-	0x601a, 0x6012, 0x6023, 0x0000, 0x6003, 0x0000, 0x601e, 0x6056,
-	0x605a, 0x6026, 0x602a, 0x602e, 0x6032, 0x6036, 0x603a, 0x603e,
-	0x6042, 0x2061, 0x1800, 0x6050, 0x8000, 0x6052, 0x9086, 0x0001,
-	0x0108, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x894b, 0x012e,
-	0x0cc0, 0x0006, 0x6000, 0x9086, 0x0000, 0x01b0, 0x601c, 0xd084,
-	0x190c, 0x190d, 0x6017, 0x0000, 0x6023, 0x0007, 0x2001, 0x1957,
-	0x2004, 0x0006, 0x9082, 0x0051, 0x000e, 0x0208, 0x8004, 0x601a,
-	0x080c, 0xd767, 0x6043, 0x0000, 0x000e, 0x0005, 0x00e6, 0x0126,
-	0x2071, 0x1800, 0x2091, 0x8000, 0x7550, 0x9582, 0x0001, 0x0608,
+	0x0001, 0x003e, 0x7014, 0x9c36, 0x1110, 0x660c, 0x7616, 0x7010,
+	0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7012, 0x0010,
+	0x7013, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e,
+	0x0008, 0x2678, 0x89ff, 0x1168, 0x600f, 0x0000, 0x6014, 0x0096,
+	0x2048, 0x080c, 0xbb15, 0x0110, 0x080c, 0xd4d5, 0x009e, 0x080c,
+	0x9e62, 0x080c, 0x97b0, 0x88ff, 0x1190, 0x00ce, 0x0804, 0x97cb,
+	0x2c78, 0x600c, 0x2060, 0x0804, 0x97cb, 0x9006, 0x012e, 0x000e,
+	0x006e, 0x007e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601b,
+	0x0000, 0x00ce, 0x98c5, 0x0001, 0x0c88, 0x00f6, 0x00e6, 0x00d6,
+	0x0096, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000,
+	0x2071, 0x19b8, 0x7638, 0x2660, 0x2678, 0x8cff, 0x0904, 0x98c9,
+	0x6020, 0x9086, 0x0006, 0x1904, 0x98c4, 0x87ff, 0x0128, 0x2700,
+	0x9c06, 0x1904, 0x98c4, 0x0040, 0x6010, 0x9b06, 0x15e8, 0x85ff,
+	0x0118, 0x6054, 0x9106, 0x15c0, 0x703c, 0x9c06, 0x1168, 0x0036,
+	0x2019, 0x0001, 0x080c, 0x96d8, 0x7033, 0x0000, 0x9006, 0x703e,
+	0x7042, 0x7046, 0x704a, 0x003e, 0x7038, 0x9c36, 0x1110, 0x660c,
+	0x763a, 0x7034, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00,
+	0x7036, 0x0010, 0x7037, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06,
+	0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x6014, 0x2048,
+	0x080c, 0xbb15, 0x0110, 0x080c, 0xd4d5, 0x080c, 0x9e62, 0x87ff,
+	0x1198, 0x00ce, 0x0804, 0x9875, 0x2c78, 0x600c, 0x2060, 0x0804,
+	0x9875, 0x9006, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x009e,
+	0x00de, 0x00ee, 0x00fe, 0x0005, 0x601b, 0x0000, 0x00ce, 0x97bd,
+	0x0001, 0x0c80, 0x00e6, 0x2071, 0x19b8, 0x2001, 0x1800, 0x2004,
+	0x9086, 0x0002, 0x1118, 0x7007, 0x0005, 0x0010, 0x7007, 0x0000,
+	0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0066, 0x0026, 0x0006,
+	0x0126, 0x2091, 0x8000, 0x2071, 0x19b8, 0x2c10, 0x7638, 0x2660,
+	0x2678, 0x8cff, 0x0518, 0x2200, 0x9c06, 0x11e0, 0x7038, 0x9c36,
+	0x1110, 0x660c, 0x763a, 0x7034, 0x9c36, 0x1140, 0x2c00, 0x9f36,
+	0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000, 0x660c, 0x2c00,
+	0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x9085,
+	0x0001, 0x0020, 0x2c78, 0x600c, 0x2060, 0x08d8, 0x012e, 0x000e,
+	0x002e, 0x006e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0096, 0x00f6,
+	0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091,
+	0x8000, 0x2071, 0x19b8, 0x760c, 0x2660, 0x2678, 0x8cff, 0x0904,
+	0x99b6, 0x6010, 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x9206, 0x1904,
+	0x99b1, 0x7024, 0x9c06, 0x1520, 0x2069, 0x0100, 0x68c0, 0x9005,
+	0x0904, 0x998d, 0x080c, 0x93ac, 0x68c3, 0x0000, 0x080c, 0x98da,
+	0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000,
+	0x0138, 0x2001, 0x0100, 0x080c, 0x2b14, 0x9006, 0x080c, 0x2b14,
+	0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e,
+	0x700c, 0x9c36, 0x1110, 0x660c, 0x760e, 0x7008, 0x9c36, 0x1140,
+	0x2c00, 0x9f36, 0x0118, 0x2f00, 0x700a, 0x0010, 0x700b, 0x0000,
+	0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678,
+	0x600f, 0x0000, 0x080c, 0xbd0c, 0x1158, 0x080c, 0x3003, 0x080c,
+	0xbd1d, 0x11f0, 0x080c, 0xa7c0, 0x00d8, 0x080c, 0x98da, 0x08c0,
+	0x080c, 0xbd1d, 0x1118, 0x080c, 0xa7c0, 0x0090, 0x6014, 0x2048,
+	0x080c, 0xbb15, 0x0168, 0x6020, 0x9086, 0x0003, 0x1508, 0xa867,
+	0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x687f, 0x080c, 0xbd00,
+	0x080c, 0xbf84, 0x080c, 0x9e62, 0x080c, 0x97b0, 0x00ce, 0x0804,
+	0x9936, 0x2c78, 0x600c, 0x2060, 0x0804, 0x9936, 0x012e, 0x000e,
+	0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x009e, 0x0005,
+	0x6020, 0x9086, 0x0006, 0x1d20, 0x080c, 0xd4d5, 0x0c08, 0x00d6,
+	0x080c, 0x8ed9, 0x7003, 0x0200, 0x7007, 0x0014, 0x60c3, 0x0014,
+	0x20e1, 0x0001, 0x2099, 0x195a, 0x20e9, 0x0000, 0x20a1, 0x0250,
+	0x20a9, 0x0004, 0x4003, 0x7023, 0x0004, 0x7027, 0x7878, 0x080c,
+	0x9380, 0x00de, 0x0005, 0x080c, 0x8ed9, 0x700b, 0x0800, 0x7814,
+	0x9084, 0xff00, 0x700e, 0x7814, 0x9084, 0x00ff, 0x7022, 0x782c,
+	0x7026, 0x7858, 0x9084, 0x00ff, 0x9085, 0x0200, 0x7002, 0x7858,
+	0x9084, 0xff00, 0x8007, 0x7006, 0x60c2, 0x0804, 0x9380, 0x00b6,
+	0x00d6, 0x0016, 0x00d6, 0x2f68, 0x2009, 0x0035, 0x080c, 0xc18a,
+	0x00de, 0x1904, 0x9a64, 0x080c, 0x8e8e, 0x7003, 0x1300, 0x782c,
+	0x080c, 0x9b66, 0x2068, 0x6820, 0x9086, 0x0003, 0x0560, 0x7810,
+	0x2058, 0xbaa0, 0x080c, 0x9db1, 0x11d8, 0x9286, 0x007e, 0x1128,
+	0x700b, 0x00ff, 0x700f, 0xfffe, 0x0498, 0x9286, 0x007f, 0x1128,
+	0x700b, 0x00ff, 0x700f, 0xfffd, 0x0458, 0x9284, 0xff80, 0x0180,
+	0x9286, 0x0080, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffc, 0x0400,
+	0x92d8, 0x1000, 0x2b5c, 0xb810, 0x700a, 0xb814, 0x700e, 0x00c0,
+	0x6098, 0x700e, 0x00a8, 0x080c, 0x9db1, 0x1130, 0x7810, 0x2058,
+	0xb8a0, 0x9082, 0x007e, 0x0250, 0x00d6, 0x2069, 0x181e, 0x2d04,
+	0x700a, 0x8d68, 0x2d04, 0x700e, 0x00de, 0x0010, 0x6034, 0x700e,
+	0x7838, 0x7012, 0x783c, 0x7016, 0x60c3, 0x000c, 0x001e, 0x00de,
+	0x080c, 0x9380, 0x00be, 0x0005, 0x781b, 0x0001, 0x7803, 0x0006,
+	0x001e, 0x00de, 0x00be, 0x0005, 0x792c, 0x9180, 0x0008, 0x200c,
+	0x9186, 0x0006, 0x01c0, 0x9186, 0x0003, 0x0904, 0x9ade, 0x9186,
+	0x0005, 0x0904, 0x9ac7, 0x9186, 0x0004, 0x05d8, 0x9186, 0x0008,
+	0x0904, 0x9acf, 0x7807, 0x0037, 0x782f, 0x0003, 0x7817, 0x1700,
+	0x080c, 0x9b43, 0x0005, 0x080c, 0x9b04, 0x00d6, 0x0026, 0x792c,
+	0x2168, 0x2009, 0x4000, 0x6800, 0x0002, 0x9aa8, 0x9ab3, 0x9aaa,
+	0x9ab3, 0x9aaf, 0x9aa8, 0x9aa8, 0x9ab3, 0x9ab3, 0x9ab3, 0x9ab3,
+	0x9aa8, 0x9aa8, 0x9aa8, 0x9aa8, 0x9aa8, 0x9ab3, 0x9aa8, 0x9ab3,
+	0x080c, 0x0db4, 0x6824, 0xd0e4, 0x0110, 0xd0cc, 0x0110, 0x900e,
+	0x0010, 0x2009, 0x2000, 0x682c, 0x7022, 0x6830, 0x7026, 0x0804,
+	0x9afd, 0x080c, 0x9b04, 0x00d6, 0x0026, 0x792c, 0x2168, 0x2009,
+	0x4000, 0x6a00, 0x9286, 0x0002, 0x1108, 0x900e, 0x04b0, 0x04e1,
+	0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x0470, 0x04a1,
+	0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x9286, 0x0005,
+	0x0118, 0x9286, 0x0002, 0x1108, 0x900e, 0x00f8, 0x0429, 0x00d6,
+	0x0026, 0x792c, 0x2168, 0x6814, 0x0096, 0x2048, 0xa9ac, 0xa834,
+	0x9112, 0xa9b0, 0xa838, 0x009e, 0x9103, 0x7022, 0x7226, 0x792c,
+	0x9180, 0x0000, 0x2004, 0x908e, 0x0002, 0x0130, 0x908e, 0x0004,
+	0x0118, 0x2009, 0x4000, 0x0008, 0x900e, 0x712a, 0x60c3, 0x0018,
+	0x002e, 0x00de, 0x0804, 0x9380, 0x00b6, 0x0036, 0x0046, 0x0056,
+	0x0066, 0x080c, 0x8ed9, 0x9006, 0x7003, 0x0200, 0x7938, 0x710a,
+	0x793c, 0x710e, 0x7810, 0x2058, 0xb8a0, 0x080c, 0x9db1, 0x1118,
+	0x9092, 0x007e, 0x0268, 0x00d6, 0x2069, 0x181e, 0x2d2c, 0x8d68,
+	0x2d34, 0x90d8, 0x1000, 0x2b5c, 0xbb10, 0xbc14, 0x00de, 0x0028,
+	0x901e, 0x6498, 0x2029, 0x0000, 0x6634, 0x782c, 0x9080, 0x0008,
+	0x2004, 0x9086, 0x0003, 0x1128, 0x7512, 0x7616, 0x731a, 0x741e,
+	0x0020, 0x7312, 0x7416, 0x751a, 0x761e, 0x006e, 0x005e, 0x004e,
+	0x003e, 0x00be, 0x0005, 0x080c, 0x8ed9, 0x7003, 0x0100, 0x782c,
+	0x700a, 0x7814, 0x700e, 0x700e, 0x60c3, 0x0008, 0x0804, 0x9380,
+	0x080c, 0x8e85, 0x7003, 0x1400, 0x7838, 0x700a, 0x0079, 0x783c,
+	0x700e, 0x782c, 0x7012, 0x7830, 0x7016, 0x7834, 0x9084, 0x00ff,
+	0x8007, 0x701a, 0x60c3, 0x0010, 0x0804, 0x9380, 0x00e6, 0x2071,
+	0x0240, 0x0006, 0x00f6, 0x2078, 0x7810, 0x00b6, 0x2058, 0xb8bc,
+	0xd084, 0x0120, 0x7848, 0x702a, 0x7844, 0x702e, 0x00be, 0x00fe,
+	0x000e, 0x00ee, 0x0005, 0x080c, 0x8ed0, 0x7003, 0x0100, 0x782c,
+	0x700a, 0x7814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x9380, 0x0021,
+	0x60c3, 0x0000, 0x0804, 0x9380, 0x00d6, 0x080c, 0x9c3f, 0xb810,
+	0x9085, 0x0300, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6878,
+	0x700a, 0x687c, 0x700e, 0x7013, 0x0819, 0x080c, 0x936e, 0x721a,
+	0x2f10, 0x7222, 0x7a08, 0x7226, 0x2071, 0x024c, 0x00de, 0x0005,
+	0x00a9, 0x7914, 0x712a, 0x60c3, 0x0000, 0x60a7, 0x9575, 0x0026,
+	0x080c, 0x29ca, 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012,
+	0x002e, 0x080c, 0x93a3, 0x080c, 0x80af, 0x0005, 0x0036, 0x0096,
+	0x00d6, 0x00e6, 0x7858, 0x2048, 0xaa7c, 0x9296, 0x00c0, 0x9294,
+	0xfffd, 0xaa7e, 0xaa80, 0x9294, 0x0300, 0xaa82, 0xa96c, 0x9194,
+	0x00ff, 0xab74, 0x9384, 0x00ff, 0x908d, 0xc200, 0xa96e, 0x9384,
+	0xff00, 0x9215, 0xaa76, 0xa870, 0xaa78, 0xa87a, 0xaa72, 0x00d6,
+	0x2069, 0x0200, 0x080c, 0x9c3f, 0x00de, 0x20e9, 0x0000, 0x20a1,
+	0x0240, 0x20a9, 0x000a, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x001b,
+	0x2098, 0x4003, 0x60a3, 0x0035, 0xaa68, 0x9294, 0x7000, 0x9286,
+	0x3000, 0x0110, 0x60a3, 0x0037, 0x00ee, 0x00de, 0x009e, 0x003e,
+	0x0005, 0x900e, 0x7814, 0x0096, 0x2048, 0xa87c, 0xd0fc, 0x01c0,
+	0x9084, 0x0003, 0x11a8, 0x2001, 0x180c, 0x2004, 0xd0bc, 0x0180,
+	0x7824, 0xd0cc, 0x1168, 0xd0c4, 0x1158, 0xa8a8, 0x9005, 0x1140,
+	0x2001, 0x180c, 0x200c, 0xc1d5, 0x2102, 0x2009, 0x1983, 0x210c,
+	0x009e, 0x918d, 0x0092, 0x0010, 0x2009, 0x0096, 0x60ab, 0x0036,
+	0x6116, 0x0005, 0x2009, 0x0009, 0x00a0, 0x2009, 0x000a, 0x0088,
+	0x2009, 0x000b, 0x0070, 0x2009, 0x000c, 0x0058, 0x2009, 0x000d,
+	0x0040, 0x2009, 0x000e, 0x0028, 0x2009, 0x000f, 0x0010, 0x2009,
+	0x0008, 0x6912, 0x0005, 0x00d6, 0x9290, 0x0018, 0x8214, 0x20e9,
+	0x0000, 0x2069, 0x0200, 0x6813, 0x0000, 0x22a8, 0x9284, 0x00e0,
+	0x0128, 0x20a9, 0x0020, 0x9292, 0x0020, 0x0008, 0x9016, 0x20a1,
+	0x0240, 0x9006, 0x4004, 0x82ff, 0x0120, 0x6810, 0x8000, 0x6812,
+	0x0c60, 0x00de, 0x0005, 0x00d6, 0x0096, 0x6014, 0x2048, 0xa878,
+	0x6056, 0x9006, 0xa836, 0xa83a, 0xa99c, 0xa946, 0xa84a, 0x6023,
+	0x0003, 0x6007, 0x0040, 0x6003, 0x0003, 0x600b, 0xffff, 0xa817,
+	0x0001, 0xa842, 0xa83e, 0x2900, 0xa85a, 0xa813, 0x1f24, 0x080c,
+	0x8456, 0x0126, 0x2091, 0x8000, 0x080c, 0x8a4e, 0x012e, 0x009e,
+	0x00de, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x00a6, 0x0096,
+	0x0066, 0x0126, 0x2091, 0x8000, 0x2071, 0x19b8, 0x760c, 0x2660,
+	0x2678, 0x8cff, 0x0904, 0x9d11, 0x7024, 0x9c06, 0x1520, 0x2069,
+	0x0100, 0x68c0, 0x9005, 0x0904, 0x9ce8, 0x080c, 0x93ac, 0x68c3,
+	0x0000, 0x080c, 0x98da, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140,
+	0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2b14,
+	0x9006, 0x080c, 0x2b14, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110,
+	0x6827, 0x0001, 0x003e, 0x700c, 0x9c36, 0x1110, 0x660c, 0x760e,
+	0x7008, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x700a,
+	0x0010, 0x700b, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110,
+	0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0xbd0c, 0x1158,
+	0x080c, 0x3003, 0x080c, 0xbd1d, 0x11f0, 0x080c, 0xa7c0, 0x00d8,
+	0x080c, 0x98da, 0x08c0, 0x080c, 0xbd1d, 0x1118, 0x080c, 0xa7c0,
+	0x0090, 0x6014, 0x2048, 0x080c, 0xbb15, 0x0168, 0x6020, 0x9086,
+	0x0003, 0x1520, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c,
+	0x688c, 0x080c, 0xbd00, 0x080c, 0xbf84, 0x080c, 0x9e62, 0x080c,
+	0x97b0, 0x00ce, 0x0804, 0x9c99, 0x2c78, 0x600c, 0x2060, 0x0804,
+	0x9c99, 0x700f, 0x0000, 0x700b, 0x0000, 0x012e, 0x006e, 0x009e,
+	0x00ae, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x6020, 0x9086,
+	0x0006, 0x1d08, 0x080c, 0xd4d5, 0x08f0, 0x00d6, 0x0156, 0x080c,
+	0x8ed9, 0x7a14, 0x82ff, 0x0138, 0x7003, 0x0100, 0x700b, 0x0003,
+	0x60c3, 0x0008, 0x0490, 0x7003, 0x0200, 0x7007, 0x0000, 0x2069,
+	0x1800, 0x901e, 0x6800, 0x9086, 0x0004, 0x1110, 0xc38d, 0x0060,
+	0x080c, 0x6fb2, 0x1110, 0xc3ad, 0x0008, 0xc3a5, 0x6ad8, 0xd29c,
+	0x1110, 0xd2ac, 0x0108, 0xc39d, 0x730e, 0x2011, 0x1848, 0x63f0,
+	0x2312, 0x20a9, 0x0006, 0x2011, 0x1840, 0x2019, 0x1841, 0x2071,
+	0x0250, 0x2376, 0x8e70, 0x2276, 0x8e70, 0x9398, 0x0002, 0x9290,
+	0x0002, 0x1f04, 0x9d59, 0x60c3, 0x0020, 0x080c, 0x9380, 0x015e,
+	0x00de, 0x0005, 0x0156, 0x080c, 0x8ed9, 0x7a14, 0x82ff, 0x0168,
+	0x9286, 0xffff, 0x0118, 0x9282, 0x000e, 0x1238, 0x7003, 0x0100,
+	0x700b, 0x0003, 0x60c3, 0x0008, 0x0488, 0x7003, 0x0200, 0x7007,
+	0x001c, 0x700f, 0x0001, 0x2011, 0x198e, 0x2204, 0x8007, 0x701a,
+	0x8210, 0x2204, 0x8007, 0x701e, 0x0421, 0x1120, 0xb8a0, 0x9082,
+	0x007f, 0x0248, 0x2001, 0x181e, 0x2004, 0x7022, 0x2001, 0x181f,
+	0x2004, 0x7026, 0x0030, 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff,
+	0x7026, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9,
+	0x0000, 0x20a1, 0x0256, 0x4003, 0x60c3, 0x001c, 0x015e, 0x0804,
+	0x9380, 0x0006, 0x2001, 0x1836, 0x2004, 0xd0ac, 0x000e, 0x0005,
+	0x2011, 0x0003, 0x080c, 0x9771, 0x2011, 0x0002, 0x080c, 0x977b,
+	0x080c, 0x9662, 0x0036, 0x901e, 0x080c, 0x96d8, 0x003e, 0x0005,
+	0x2071, 0x1883, 0x7000, 0x9005, 0x0140, 0x2001, 0x0976, 0x2071,
+	0x1800, 0x7072, 0x7076, 0x7067, 0xffe0, 0x2071, 0x1800, 0x7070,
+	0x7052, 0x7057, 0x1cd0, 0x0005, 0x00e6, 0x0126, 0x2071, 0x1800,
+	0x2091, 0x8000, 0x7550, 0x9582, 0x0010, 0x0608, 0x7054, 0x2060,
+	0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, 0x0018, 0x7064, 0x9c02,
+	0x1208, 0x0cb0, 0x2061, 0x1cd0, 0x0c98, 0x6003, 0x0008, 0x8529,
+	0x7552, 0x9ca8, 0x0018, 0x7064, 0x9502, 0x1230, 0x7556, 0x9085,
+	0x0001, 0x012e, 0x00ee, 0x0005, 0x7057, 0x1cd0, 0x0cc0, 0x9006,
+	0x0cc0, 0x00e6, 0x2071, 0x1800, 0x7550, 0x9582, 0x0010, 0x0600,
 	0x7054, 0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, 0x0018,
 	0x7064, 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1cd0, 0x0c98, 0x6003,
-	0x0008, 0x8529, 0x7552, 0x9ca8, 0x0018, 0x7064, 0x9502, 0x1230,
-	0x7556, 0x9085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x7057, 0x1cd0,
-	0x0cc0, 0x9006, 0x0cc0, 0x6020, 0x9084, 0x000f, 0x0002, 0x9ea6,
-	0x9eaf, 0x9eca, 0x9ee5, 0xc21f, 0xc23c, 0xc257, 0x9ea6, 0x9eaf,
-	0x9ea6, 0x9f01, 0x9ea6, 0x9ea6, 0x9ea6, 0x9ea6, 0x9186, 0x0013,
-	0x1128, 0x080c, 0x8846, 0x080c, 0x894b, 0x0005, 0x0005, 0x0066,
-	0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0db4, 0x0013, 0x006e, 0x0005,
-	0x9ec8, 0xa620, 0xa7ee, 0x9ec8, 0xa87c, 0xa1e4, 0x9ec8, 0x9ec8,
-	0xa5a2, 0xae1e, 0x9ec8, 0x9ec8, 0x9ec8, 0x9ec8, 0x9ec8, 0x9ec8,
+	0x0008, 0x8529, 0x7552, 0x9ca8, 0x0018, 0x7064, 0x9502, 0x1228,
+	0x7556, 0x9085, 0x0001, 0x00ee, 0x0005, 0x7057, 0x1cd0, 0x0cc8,
+	0x9006, 0x0cc8, 0x9c82, 0x1cd0, 0x0a0c, 0x0db4, 0x2001, 0x1819,
+	0x2004, 0x9c02, 0x1a0c, 0x0db4, 0x9006, 0x6006, 0x600a, 0x600e,
+	0x6016, 0x601a, 0x6012, 0x6023, 0x0000, 0x6003, 0x0000, 0x601e,
+	0x6056, 0x605a, 0x6026, 0x602a, 0x602e, 0x6032, 0x6036, 0x603a,
+	0x603e, 0x6042, 0x2061, 0x1800, 0x6050, 0x8000, 0x6052, 0x9086,
+	0x0001, 0x0108, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x8973,
+	0x012e, 0x0cc0, 0x0006, 0x6000, 0x9086, 0x0000, 0x01b0, 0x601c,
+	0xd084, 0x190c, 0x190d, 0x6017, 0x0000, 0x6023, 0x0007, 0x2001,
+	0x1957, 0x2004, 0x0006, 0x9082, 0x0051, 0x000e, 0x0208, 0x8004,
+	0x601a, 0x080c, 0xd787, 0x6043, 0x0000, 0x000e, 0x0005, 0x00e6,
+	0x0126, 0x2071, 0x1800, 0x2091, 0x8000, 0x7550, 0x9582, 0x0001,
+	0x0608, 0x7054, 0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0,
+	0x0018, 0x7064, 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1cd0, 0x0c98,
+	0x6003, 0x0008, 0x8529, 0x7552, 0x9ca8, 0x0018, 0x7064, 0x9502,
+	0x1230, 0x7556, 0x9085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x7057,
+	0x1cd0, 0x0cc0, 0x9006, 0x0cc0, 0x6020, 0x9084, 0x000f, 0x0002,
+	0x9ebf, 0x9ec8, 0x9ee3, 0x9efe, 0xc238, 0xc255, 0xc270, 0x9ebf,
+	0x9ec8, 0x9ebf, 0x9f1a, 0x9ebf, 0x9ebf, 0x9ebf, 0x9ebf, 0x9186,
+	0x0013, 0x1128, 0x080c, 0x886e, 0x080c, 0x8973, 0x0005, 0x0005,
+	0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0db4, 0x0013, 0x006e,
+	0x0005, 0x9ee1, 0xa639, 0xa807, 0x9ee1, 0xa895, 0xa1fd, 0x9ee1,
+	0x9ee1, 0xa5bb, 0xae37, 0x9ee1, 0x9ee1, 0x9ee1, 0x9ee1, 0x9ee1,
+	0x9ee1, 0x080c, 0x0db4, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c,
+	0x0db4, 0x0013, 0x006e, 0x0005, 0x9efc, 0xb50b, 0x9efc, 0x9efc,
+	0x9efc, 0x9efc, 0x9efc, 0x9efc, 0xb4b0, 0xb68d, 0x9efc, 0xb54c,
+	0xb5cb, 0xb54c, 0xb5cb, 0x9efc, 0x080c, 0x0db4, 0x6000, 0x9082,
+	0x0016, 0x1a0c, 0x0db4, 0x6000, 0x0002, 0x9f18, 0xae7e, 0xaf63,
+	0xb093, 0xb23e, 0x9f18, 0x9f18, 0x9f18, 0xae52, 0xb43c, 0xb43f,
+	0x9f18, 0x9f18, 0x9f18, 0x9f18, 0xb46e, 0x9f18, 0x9f18, 0x9f18,
 	0x080c, 0x0db4, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0db4,
-	0x0013, 0x006e, 0x0005, 0x9ee3, 0xb4f2, 0x9ee3, 0x9ee3, 0x9ee3,
-	0x9ee3, 0x9ee3, 0x9ee3, 0xb497, 0xb674, 0x9ee3, 0xb533, 0xb5b2,
-	0xb533, 0xb5b2, 0x9ee3, 0x080c, 0x0db4, 0x6000, 0x9082, 0x0016,
-	0x1a0c, 0x0db4, 0x6000, 0x0002, 0x9eff, 0xae65, 0xaf4a, 0xb07a,
-	0xb225, 0x9eff, 0x9eff, 0x9eff, 0xae39, 0xb423, 0xb426, 0x9eff,
-	0x9eff, 0x9eff, 0x9eff, 0xb455, 0x9eff, 0x9eff, 0x9eff, 0x080c,
-	0x0db4, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0db4, 0x0013,
-	0x006e, 0x0005, 0x9f1a, 0x9f1a, 0x9f5d, 0x9ffc, 0xa091, 0x9f1a,
-	0x9f1a, 0x9f1a, 0x9f1c, 0x9f1a, 0x9f1a, 0x9f1a, 0x9f1a, 0x9f1a,
-	0x9f1a, 0x9f1a, 0x080c, 0x0db4, 0x9186, 0x004c, 0x0588, 0x9186,
-	0x0003, 0x190c, 0x0db4, 0x0096, 0x601c, 0xc0ed, 0x601e, 0x6003,
-	0x0003, 0x6106, 0x6014, 0x2048, 0xa87c, 0x9084, 0xa000, 0xc0b5,
-	0xa87e, 0xa8ac, 0xa846, 0xa8b0, 0xa84a, 0x9006, 0xa836, 0xa83a,
-	0xa884, 0x9092, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x8013,
-	0x8213, 0x9210, 0x621a, 0x009e, 0x2c10, 0x080c, 0x1a5c, 0x080c,
-	0x842e, 0x0126, 0x2091, 0x8000, 0x080c, 0x8a26, 0x012e, 0x0005,
-	0x6010, 0x00b6, 0x2058, 0xbca0, 0x00be, 0x2c00, 0x080c, 0xa0b3,
-	0x080c, 0xc211, 0x6003, 0x0007, 0x0005, 0x00d6, 0x0096, 0x00f6,
-	0x2079, 0x1800, 0x7a8c, 0x6014, 0x2048, 0xa87c, 0xd0ec, 0x1110,
-	0x9290, 0x0018, 0xac78, 0xc4fc, 0x0046, 0xa8e0, 0x9005, 0x1140,
-	0xa8dc, 0x921a, 0x0140, 0x0220, 0xa87b, 0x0007, 0x2010, 0x0028,
-	0xa87b, 0x0015, 0x0010, 0xa87b, 0x0000, 0x8214, 0xa883, 0x0000,
-	0xaa02, 0x0006, 0x0016, 0x0026, 0x00c6, 0x00d6, 0x00e6, 0x00f6,
-	0x2400, 0x9005, 0x1108, 0x009a, 0x2100, 0x9086, 0x0015, 0x1118,
-	0x2001, 0x0001, 0x0038, 0x2100, 0x9086, 0x0016, 0x0118, 0x2001,
-	0x0001, 0x002a, 0x94a4, 0x0007, 0x8423, 0x9405, 0x0002, 0x9fc4,
-	0x9fc4, 0x9fbf, 0x9fc2, 0x9fc4, 0x9fbc, 0x9faf, 0x9faf, 0x9faf,
-	0x9faf, 0x9faf, 0x9faf, 0x9faf, 0x9faf, 0x9faf, 0x9faf, 0x00fe,
-	0x00ee, 0x00de, 0x00ce, 0x002e, 0x001e, 0x000e, 0x004e, 0x00fe,
-	0x009e, 0x00de, 0x080c, 0x0db4, 0x080c, 0xaa5d, 0x0028, 0x080c,
-	0xab80, 0x0010, 0x080c, 0xac6f, 0x00fe, 0x00ee, 0x00de, 0x00ce,
-	0x002e, 0x001e, 0x2c00, 0xa896, 0x000e, 0x080c, 0xa171, 0x0530,
-	0xa804, 0xa80e, 0x00a6, 0x2050, 0xb100, 0x00ae, 0x8006, 0x8006,
-	0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0xaacc,
-	0xabd0, 0xacd4, 0xadd8, 0x2031, 0x0000, 0x2041, 0x1249, 0x080c,
-	0xa31b, 0x0160, 0x000e, 0x9005, 0x0120, 0x00fe, 0x009e, 0x00de,
-	0x0005, 0x00fe, 0x009e, 0x00de, 0x0804, 0x9e19, 0x2001, 0x002c,
-	0x900e, 0x080c, 0xa1d7, 0x0c70, 0x91b6, 0x0015, 0x0170, 0x91b6,
-	0x0016, 0x0158, 0x91b2, 0x0047, 0x0a0c, 0x0db4, 0x91b2, 0x0050,
-	0x1a0c, 0x0db4, 0x9182, 0x0047, 0x00ca, 0x2001, 0x0109, 0x2004,
-	0xd08c, 0x0198, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026,
-	0x080c, 0x8382, 0x002e, 0x001e, 0x000e, 0x012e, 0xa001, 0x6000,
-	0x9086, 0x0002, 0x1110, 0x0804, 0x9f5d, 0x0005, 0xa02f, 0xa02f,
-	0xa031, 0xa067, 0xa02f, 0xa02f, 0xa02f, 0xa02f, 0xa07a, 0x080c,
-	0x0db4, 0x00d6, 0x0016, 0x0096, 0x080c, 0x88fb, 0x080c, 0x8a26,
-	0x6003, 0x0004, 0x6114, 0x2148, 0xa87c, 0xd0fc, 0x01c0, 0xa878,
-	0xc0fc, 0x9005, 0x1158, 0xa894, 0x9005, 0x0140, 0x2001, 0x0000,
-	0x900e, 0x080c, 0xa1d7, 0x080c, 0x9e19, 0x00a8, 0x6003, 0x0002,
-	0xa8a4, 0xa9a8, 0x9105, 0x1178, 0xa8ae, 0xa8b2, 0x0c78, 0xa87f,
-	0x0020, 0xa88c, 0xa88a, 0xa8a4, 0xa8ae, 0xa8a8, 0xa8b2, 0xa8c7,
-	0x0000, 0xa8cb, 0x0000, 0x009e, 0x001e, 0x00de, 0x0005, 0x080c,
-	0x88fb, 0x00d6, 0x0096, 0x6114, 0x2148, 0x080c, 0xbafe, 0x0120,
-	0xa87b, 0x0006, 0x080c, 0x6885, 0x009e, 0x00de, 0x080c, 0x9e19,
-	0x0804, 0x8a26, 0x080c, 0x88fb, 0x080c, 0x2fd7, 0x080c, 0xc20e,
-	0x00d6, 0x0096, 0x6114, 0x2148, 0x080c, 0xbafe, 0x0120, 0xa87b,
-	0x0029, 0x080c, 0x6885, 0x009e, 0x00de, 0x080c, 0x9e19, 0x0804,
-	0x8a26, 0x9182, 0x0047, 0x0002, 0xa0a1, 0xa0a3, 0xa0a1, 0xa0a1,
-	0xa0a1, 0xa0a1, 0xa0a1, 0xa0a1, 0xa0a1, 0xa0a1, 0xa0a1, 0xa0a1,
-	0xa0a3, 0x080c, 0x0db4, 0x00d6, 0x0096, 0x080c, 0x150f, 0x6114,
-	0x2148, 0xa87b, 0x0000, 0xa883, 0x0000, 0x080c, 0x6885, 0x009e,
-	0x00de, 0x0804, 0x9e19, 0x0026, 0x0036, 0x0056, 0x0066, 0x0096,
-	0x00a6, 0x00f6, 0x0006, 0x080c, 0x0feb, 0x000e, 0x090c, 0x0db4,
-	0xa960, 0x21e8, 0xa95c, 0x9188, 0x0019, 0x21a0, 0x900e, 0x20a9,
-	0x0020, 0x4104, 0xa87a, 0x2079, 0x1800, 0x798c, 0x9188, 0x0018,
-	0x918c, 0x0fff, 0xa972, 0xac76, 0x2950, 0x00a6, 0x2001, 0x0205,
-	0x2003, 0x0000, 0x901e, 0x2029, 0x0001, 0x9182, 0x0034, 0x1228,
-	0x2011, 0x001f, 0x080c, 0xb6f9, 0x04c0, 0x2130, 0x2009, 0x0034,
-	0x2011, 0x001f, 0x080c, 0xb6f9, 0x96b2, 0x0034, 0xb004, 0x904d,
-	0x0110, 0x080c, 0x0f9d, 0x080c, 0x0feb, 0x01d0, 0x8528, 0xa867,
-	0x0110, 0xa86b, 0x0000, 0x2920, 0xb406, 0x968a, 0x003d, 0x1230,
-	0x2608, 0x2011, 0x001b, 0x080c, 0xb6f9, 0x00b8, 0x96b2, 0x003c,
-	0x2009, 0x003c, 0x2950, 0x2011, 0x001b, 0x080c, 0xb6f9, 0x0c18,
-	0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad, 0x0050,
-	0xb566, 0xb070, 0xc0fd, 0xb072, 0x0048, 0x2001, 0x0205, 0x2003,
-	0x0000, 0x00ae, 0x852f, 0x95ad, 0x0050, 0xb566, 0x2a48, 0xa804,
-	0xa807, 0x0000, 0x0006, 0x080c, 0x6885, 0x000e, 0x2048, 0x9005,
-	0x1db0, 0x00fe, 0x00ae, 0x009e, 0x006e, 0x005e, 0x003e, 0x002e,
-	0x0005, 0x00d6, 0x00f6, 0x0096, 0x0006, 0x080c, 0x0feb, 0x000e,
-	0x090c, 0x0db4, 0xa960, 0x21e8, 0xa95c, 0x9188, 0x0019, 0x21a0,
-	0x900e, 0x20a9, 0x0020, 0x4104, 0xaa66, 0xa87a, 0x2079, 0x1800,
-	0x798c, 0x810c, 0x9188, 0x000c, 0x9182, 0x001a, 0x0210, 0x2009,
-	0x001a, 0x21a8, 0x810b, 0xa972, 0xac76, 0x2e98, 0xa85c, 0x9080,
-	0x001f, 0x20a0, 0x2001, 0x0205, 0x200c, 0x918d, 0x0080, 0x2102,
-	0x4003, 0x2003, 0x0000, 0x080c, 0x6885, 0x009e, 0x00fe, 0x00de,
-	0x0005, 0x0016, 0x00d6, 0x00f6, 0x0096, 0x0016, 0x2001, 0x0205,
-	0x200c, 0x918d, 0x0080, 0x2102, 0x001e, 0x2079, 0x0200, 0x2e98,
-	0xa87c, 0xd0ec, 0x0118, 0x9e80, 0x000c, 0x2098, 0x2021, 0x003e,
-	0x901e, 0x9282, 0x0020, 0x0218, 0x2011, 0x0020, 0x2018, 0x9486,
-	0x003e, 0x1170, 0x0096, 0x080c, 0x0feb, 0x2900, 0x009e, 0x05c0,
-	0xa806, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0,
-	0x3300, 0x908e, 0x0260, 0x0140, 0x2009, 0x0280, 0x9102, 0x920a,
-	0x0218, 0x2010, 0x2100, 0x9318, 0x2200, 0x9402, 0x1228, 0x2400,
-	0x9202, 0x2410, 0x9318, 0x9006, 0x2020, 0x22a8, 0xa800, 0x9200,
-	0xa802, 0x20e1, 0x0000, 0x4003, 0x83ff, 0x0180, 0x3300, 0x9086,
-	0x0280, 0x1130, 0x7814, 0x8000, 0x9085, 0x0080, 0x7816, 0x2e98,
-	0x2310, 0x84ff, 0x0904, 0xa186, 0x0804, 0xa188, 0x9085, 0x0001,
-	0x7817, 0x0000, 0x009e, 0x00fe, 0x00de, 0x001e, 0x0005, 0x00d6,
-	0x0036, 0x0096, 0x6314, 0x2348, 0xa87a, 0xa982, 0x080c, 0x6878,
-	0x009e, 0x003e, 0x00de, 0x0005, 0x91b6, 0x0015, 0x1118, 0x080c,
-	0x9e19, 0x0030, 0x91b6, 0x0016, 0x190c, 0x0db4, 0x080c, 0x9e19,
-	0x0005, 0x20a9, 0x000e, 0x20e1, 0x0000, 0x2e98, 0x6014, 0x0096,
-	0x2048, 0xa860, 0x20e8, 0xa85c, 0x20a0, 0x009e, 0x4003, 0x0136,
-	0x9080, 0x001b, 0x2011, 0x0006, 0x20a9, 0x0001, 0x3418, 0x8318,
-	0x23a0, 0x4003, 0x3318, 0x8318, 0x2398, 0x8211, 0x1db8, 0x2011,
-	0x0006, 0x013e, 0x20a0, 0x3318, 0x8318, 0x2398, 0x4003, 0x3418,
-	0x8318, 0x23a0, 0x8211, 0x1db8, 0x0096, 0x080c, 0xbafe, 0x0130,
-	0x6014, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0x009e, 0x0804,
-	0x9e19, 0x0096, 0x00d6, 0x0036, 0x7330, 0x9386, 0x0200, 0x11a8,
-	0x6010, 0x00b6, 0x2058, 0xb8bf, 0x0000, 0x00be, 0x6014, 0x9005,
-	0x0130, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0xab32, 0x080c,
-	0x9e19, 0x003e, 0x00de, 0x009e, 0x0005, 0x0011, 0x1d48, 0x0cc8,
-	0x0006, 0x0016, 0x080c, 0xc1f9, 0x0188, 0x6014, 0x9005, 0x1170,
-	0x600b, 0x0003, 0x601b, 0x0000, 0x6043, 0x0000, 0x2009, 0x0022,
-	0x080c, 0xa5f8, 0x9006, 0x001e, 0x000e, 0x0005, 0x9085, 0x0001,
-	0x0cd0, 0x0096, 0x0016, 0x20a9, 0x0014, 0x9e80, 0x000c, 0x20e1,
-	0x0000, 0x2098, 0x6014, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080,
-	0x0002, 0x20a0, 0x4003, 0x2001, 0x0205, 0x2003, 0x0001, 0x2099,
-	0x0260, 0x20a9, 0x0016, 0x4003, 0x20a9, 0x000a, 0xa804, 0x2048,
-	0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003, 0x2001,
-	0x0205, 0x2003, 0x0002, 0x2099, 0x0260, 0x20a9, 0x0020, 0x4003,
-	0x2003, 0x0000, 0x6014, 0x2048, 0xa800, 0x2048, 0xa867, 0x0103,
-	0x080c, 0x9e19, 0x001e, 0x009e, 0x0005, 0x0096, 0x0016, 0x900e,
-	0x7030, 0x9086, 0x0100, 0x0140, 0x7038, 0x9084, 0x00ff, 0x800c,
-	0x703c, 0x9084, 0x00ff, 0x8004, 0x9080, 0x0004, 0x9108, 0x810b,
-	0x2011, 0x0002, 0x2019, 0x000c, 0x6014, 0x2048, 0x080c, 0xb6f9,
-	0x080c, 0xbafe, 0x0140, 0x6014, 0x2048, 0xa807, 0x0000, 0xa864,
-	0xa8e2, 0xa867, 0x0103, 0x080c, 0x9e19, 0x001e, 0x009e, 0x0005,
-	0x0016, 0x0096, 0x7030, 0x9086, 0x0100, 0x1118, 0x2009, 0x0004,
-	0x0010, 0x7034, 0x800c, 0x810b, 0x2011, 0x000c, 0x2019, 0x000c,
-	0x6014, 0x2048, 0xa804, 0x0096, 0x9005, 0x0108, 0x2048, 0x080c,
-	0xb6f9, 0x009e, 0x080c, 0xbafe, 0x0148, 0xa804, 0x9005, 0x1158,
-	0xa807, 0x0000, 0xa864, 0xa8e2, 0xa867, 0x0103, 0x080c, 0x9e19,
-	0x009e, 0x001e, 0x0005, 0x0086, 0x2040, 0xa030, 0x8007, 0x9086,
-	0x0100, 0x1118, 0x080c, 0xa7a7, 0x00e0, 0xa034, 0x8007, 0x800c,
-	0x8806, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080,
-	0x000c, 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0xaaa0,
-	0xab9c, 0xaca8, 0xada4, 0x2031, 0x0000, 0x2041, 0x122f, 0x0019,
-	0x0d08, 0x008e, 0x0898, 0x0096, 0x0006, 0x080c, 0x0feb, 0x000e,
-	0x01b0, 0xa8ab, 0x0dcb, 0xa876, 0x000e, 0xa8a2, 0x0006, 0xae6a,
-	0x2800, 0xa89e, 0xa97a, 0xaf72, 0xaa8e, 0xab92, 0xac96, 0xad9a,
-	0x0086, 0x2940, 0x080c, 0x10d5, 0x008e, 0x9085, 0x0001, 0x009e,
-	0x0005, 0x00e6, 0x00d6, 0x0026, 0x7008, 0x9084, 0x00ff, 0x6210,
-	0x00b6, 0x2258, 0xba10, 0x00be, 0x9206, 0x1520, 0x700c, 0x6210,
-	0x00b6, 0x2258, 0xba14, 0x00be, 0x9206, 0x11e0, 0x6043, 0x0000,
-	0x2c68, 0x0016, 0x2009, 0x0035, 0x080c, 0xc171, 0x001e, 0x1158,
-	0x622c, 0x2268, 0x2071, 0x026c, 0x6b20, 0x9386, 0x0003, 0x0130,
-	0x9386, 0x0006, 0x0128, 0x080c, 0x9e19, 0x0020, 0x0039, 0x0010,
-	0x080c, 0xa42d, 0x002e, 0x00de, 0x00ee, 0x0005, 0x0096, 0x6814,
-	0x2048, 0x9186, 0x0015, 0x0904, 0xa415, 0x918e, 0x0016, 0x1904,
-	0xa42b, 0x700c, 0x908c, 0xff00, 0x9186, 0x1700, 0x0120, 0x9186,
-	0x0300, 0x1904, 0xa3ef, 0x89ff, 0x1138, 0x6800, 0x9086, 0x000f,
-	0x0904, 0xa3d2, 0x0804, 0xa429, 0x6808, 0x9086, 0xffff, 0x1904,
-	0xa417, 0xa87c, 0x9084, 0x0060, 0x9086, 0x0020, 0x1128, 0xa83c,
-	0xa940, 0x9105, 0x1904, 0xa417, 0x6824, 0xd0b4, 0x1904, 0xa417,
-	0x080c, 0xbce7, 0x685c, 0xa882, 0xa87c, 0xc0dc, 0xc0f4, 0xc0d4,
-	0xa87e, 0x0026, 0x900e, 0x6a18, 0x2001, 0x000a, 0x080c, 0x8248,
-	0xa884, 0x920a, 0x0208, 0x8011, 0xaa86, 0x82ff, 0x002e, 0x1138,
-	0x00c6, 0x2d60, 0x080c, 0xb823, 0x00ce, 0x0804, 0xa429, 0x00c6,
-	0xa868, 0xd0fc, 0x1118, 0x080c, 0x5d46, 0x0010, 0x080c, 0x60ed,
-	0x00ce, 0x1904, 0xa417, 0x00c6, 0x2d60, 0x080c, 0x9e19, 0x00ce,
-	0x0804, 0xa429, 0x00c6, 0x080c, 0x9e66, 0x0198, 0x6017, 0x0000,
-	0x6810, 0x6012, 0x080c, 0xbf73, 0x6023, 0x0003, 0x6904, 0x00c6,
-	0x2d60, 0x080c, 0x9e19, 0x00ce, 0x080c, 0x9e93, 0x00ce, 0x0804,
-	0xa429, 0x2001, 0x1959, 0x2004, 0x6842, 0x00ce, 0x04d0, 0x7008,
-	0x9086, 0x000b, 0x11c8, 0x6010, 0x00b6, 0x2058, 0xb900, 0xc1bc,
-	0xb902, 0x00be, 0x00c6, 0x2d60, 0xa87b, 0x0003, 0x080c, 0xc1b3,
-	0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x080c, 0x83c9,
-	0x080c, 0x894b, 0x00ce, 0x00e8, 0x700c, 0x9086, 0x2a00, 0x1138,
-	0x2001, 0x1959, 0x2004, 0x6842, 0x00a0, 0x0479, 0x00a0, 0x89ff,
-	0x090c, 0x0db4, 0x00c6, 0x00d6, 0x2d60, 0xa867, 0x0103, 0xa87b,
-	0x0003, 0x080c, 0x66a0, 0x080c, 0xbce7, 0x080c, 0x9e49, 0x00de,
-	0x00ce, 0x080c, 0x9e19, 0x009e, 0x0005, 0x9186, 0x0015, 0x1128,
-	0x2001, 0x1959, 0x2004, 0x6842, 0x0068, 0x918e, 0x0016, 0x1160,
-	0x00c6, 0x2d00, 0x2060, 0x080c, 0xd767, 0x080c, 0x81dc, 0x080c,
-	0x9e19, 0x00ce, 0x080c, 0x9e19, 0x0005, 0x0026, 0x0036, 0x0046,
-	0x7228, 0xacb0, 0xabac, 0xd2f4, 0x0130, 0x2001, 0x1959, 0x2004,
-	0x6842, 0x0804, 0xa4a7, 0x00c6, 0x2d60, 0x080c, 0xb724, 0x00ce,
-	0x6804, 0x9086, 0x0050, 0x1168, 0x00c6, 0x2d00, 0x2060, 0x6003,
-	0x0001, 0x6007, 0x0050, 0x080c, 0x83c9, 0x080c, 0x894b, 0x00ce,
-	0x04f0, 0x6800, 0x9086, 0x000f, 0x01a8, 0x89ff, 0x090c, 0x0db4,
-	0x6800, 0x9086, 0x0004, 0x1190, 0xa87c, 0xd0ac, 0x0178, 0xa843,
-	0x0fff, 0xa83f, 0x0fff, 0xa880, 0xc0fc, 0xa882, 0x2001, 0x0001,
-	0x6832, 0x0400, 0x2001, 0x0007, 0x6832, 0x00e0, 0xa87c, 0xd0b4,
-	0x1150, 0xd0ac, 0x0db8, 0x6824, 0xd0f4, 0x1d48, 0xa838, 0xa934,
-	0x9105, 0x0d80, 0x0c20, 0xd2ec, 0x1d68, 0x7024, 0x9306, 0x1118,
-	0x7020, 0x9406, 0x0d38, 0x7020, 0x683e, 0x7024, 0x683a, 0x2001,
-	0x0005, 0x6832, 0x080c, 0xbe6a, 0x080c, 0x894b, 0x0010, 0x080c,
-	0x9e19, 0x004e, 0x003e, 0x002e, 0x0005, 0x00e6, 0x00d6, 0x0026,
-	0x7008, 0x9084, 0x00ff, 0x6210, 0x00b6, 0x2258, 0xba10, 0x00be,
-	0x9206, 0x1904, 0xa512, 0x700c, 0x6210, 0x00b6, 0x2258, 0xba14,
-	0x00be, 0x9206, 0x1904, 0xa512, 0x6038, 0x2068, 0x6824, 0xc0dc,
-	0x6826, 0x6a20, 0x9286, 0x0007, 0x0904, 0xa512, 0x9286, 0x0002,
-	0x0904, 0xa512, 0x9286, 0x0000, 0x05e8, 0x6808, 0x633c, 0x9306,
-	0x15c8, 0x2071, 0x026c, 0x9186, 0x0015, 0x0570, 0x918e, 0x0016,
-	0x1100, 0x00c6, 0x6038, 0x2060, 0x6104, 0x9186, 0x004b, 0x01c0,
-	0x9186, 0x004c, 0x01a8, 0x9186, 0x004d, 0x0190, 0x9186, 0x004e,
-	0x0178, 0x9186, 0x0052, 0x0160, 0x6014, 0x0096, 0x2048, 0x080c,
-	0xbafe, 0x090c, 0x0db4, 0xa87b, 0x0003, 0x009e, 0x080c, 0xc1b3,
-	0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x080c, 0x83c9,
-	0x080c, 0x894b, 0x00ce, 0x0030, 0x6038, 0x2070, 0x2001, 0x1959,
-	0x2004, 0x7042, 0x080c, 0x9e19, 0x002e, 0x00de, 0x00ee, 0x0005,
-	0x00b6, 0x0096, 0x00f6, 0x6014, 0x2048, 0x6010, 0x2058, 0x91b6,
-	0x0015, 0x0130, 0xba08, 0xbb0c, 0xbc00, 0xc48c, 0xbc02, 0x0460,
-	0x0096, 0x0156, 0x0036, 0x0026, 0x2b48, 0x9e90, 0x0010, 0x2019,
-	0x000a, 0x20a9, 0x0004, 0x080c, 0xadf4, 0x002e, 0x003e, 0x015e,
-	0x009e, 0x1904, 0xa581, 0x0096, 0x0156, 0x0036, 0x0026, 0x2b48,
-	0x9e90, 0x0014, 0x2019, 0x0006, 0x20a9, 0x0004, 0x080c, 0xadf4,
-	0x002e, 0x003e, 0x015e, 0x009e, 0x15a0, 0x7238, 0xba0a, 0x733c,
-	0xbb0e, 0xbc00, 0xc48d, 0xbc02, 0xa804, 0x9005, 0x1128, 0x00fe,
-	0x009e, 0x00be, 0x0804, 0xa21c, 0x0096, 0x2048, 0xaa12, 0xab16,
-	0xac0a, 0x009e, 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084,
-	0xffc0, 0x9080, 0x0002, 0x2009, 0x002b, 0xaaa0, 0xab9c, 0xaca8,
-	0xada4, 0x2031, 0x0000, 0x2041, 0x122f, 0x080c, 0xa31b, 0x0130,
-	0x00fe, 0x009e, 0x080c, 0x9e19, 0x00be, 0x0005, 0x080c, 0xa7a7,
-	0x0cb8, 0x2b78, 0x00f6, 0x080c, 0x2fd7, 0x080c, 0xc20e, 0x00fe,
-	0x00c6, 0x080c, 0x9dc3, 0x2f00, 0x6012, 0x6017, 0x0000, 0x6023,
-	0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x2001, 0x0007, 0x080c,
-	0x6188, 0x080c, 0x61b4, 0x080c, 0x8411, 0x080c, 0x894b, 0x00ce,
-	0x0804, 0xa554, 0x2100, 0x91b2, 0x0053, 0x1a0c, 0x0db4, 0x91b2,
-	0x0040, 0x1a04, 0xa60a, 0x0002, 0xa5f8, 0xa5f8, 0xa5ee, 0xa5f8,
-	0xa5f8, 0xa5f8, 0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec,
-	0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec,
-	0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec,
-	0xa5ec, 0xa5ec, 0xa5ec, 0xa5f8, 0xa5ec, 0xa5f8, 0xa5f8, 0xa5ec,
-	0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec, 0xa5ee, 0xa5ec, 0xa5ec, 0xa5ec,
-	0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec, 0xa5f8, 0xa5f8,
-	0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec, 0xa5ec,
-	0xa5ec, 0xa5f8, 0xa5ec, 0xa5ec, 0x080c, 0x0db4, 0x0066, 0x00b6,
-	0x6610, 0x2658, 0xb8bc, 0xc08c, 0xb8be, 0x00be, 0x006e, 0x0000,
-	0x6003, 0x0001, 0x6106, 0x9186, 0x0032, 0x0118, 0x080c, 0x8411,
-	0x0010, 0x080c, 0x83c9, 0x0126, 0x2091, 0x8000, 0x080c, 0x894b,
-	0x012e, 0x0005, 0x2600, 0x0002, 0xa61e, 0xa61e, 0xa61e, 0xa5f8,
-	0xa5f8, 0xa61e, 0xa61e, 0xa61e, 0xa61e, 0xa5f8, 0xa61e, 0xa5f8,
-	0xa61e, 0xa5f8, 0xa61e, 0xa61e, 0xa61e, 0xa61e, 0x080c, 0x0db4,
-	0x6004, 0x90b2, 0x0053, 0x1a0c, 0x0db4, 0x91b6, 0x0013, 0x0904,
-	0xa6e2, 0x91b6, 0x0027, 0x1904, 0xa69d, 0x080c, 0x8846, 0x6004,
-	0x080c, 0xbcf3, 0x01b0, 0x080c, 0xbd04, 0x01a8, 0x908e, 0x0021,
-	0x0904, 0xa69a, 0x908e, 0x0022, 0x1130, 0x080c, 0xa248, 0x0904,
-	0xa696, 0x0804, 0xa697, 0x908e, 0x003d, 0x0904, 0xa69a, 0x0804,
-	0xa690, 0x080c, 0x2ffc, 0x2001, 0x0007, 0x080c, 0x6188, 0x6010,
-	0x00b6, 0x2058, 0xb9a0, 0x00be, 0x080c, 0xa7a7, 0x9186, 0x007e,
-	0x1148, 0x2001, 0x1836, 0x2014, 0xc285, 0x080c, 0x6fa7, 0x1108,
-	0xc2ad, 0x2202, 0x0036, 0x0026, 0x2019, 0x0028, 0x2110, 0x080c,
-	0xd7c2, 0x002e, 0x003e, 0x0016, 0x0026, 0x0036, 0x2110, 0x2019,
-	0x0028, 0x080c, 0x8549, 0x0076, 0x903e, 0x080c, 0x8441, 0x6010,
-	0x00b6, 0x905d, 0x0100, 0x00be, 0x2c08, 0x080c, 0xd27b, 0x007e,
-	0x003e, 0x002e, 0x001e, 0x080c, 0xc20e, 0x0016, 0x080c, 0xbf6b,
-	0x080c, 0x9e19, 0x001e, 0x080c, 0x30ce, 0x080c, 0x894b, 0x0030,
-	0x080c, 0xbf6b, 0x080c, 0x9e19, 0x080c, 0x894b, 0x0005, 0x080c,
-	0xa7a7, 0x0cb0, 0x080c, 0xa7e3, 0x0c98, 0x9186, 0x0014, 0x1db0,
-	0x080c, 0x8846, 0x6004, 0x908e, 0x0022, 0x1118, 0x080c, 0xa248,
-	0x0d68, 0x080c, 0x2fd7, 0x080c, 0xc20e, 0x080c, 0xbcf3, 0x1190,
-	0x080c, 0x2ffc, 0x6010, 0x00b6, 0x2058, 0xb9a0, 0x00be, 0x080c,
-	0xa7a7, 0x9186, 0x007e, 0x1128, 0x2001, 0x1836, 0x200c, 0xc185,
-	0x2102, 0x0870, 0x080c, 0xbd04, 0x1118, 0x080c, 0xa7a7, 0x0840,
-	0x6004, 0x908e, 0x0032, 0x1160, 0x00e6, 0x00f6, 0x2071, 0x1894,
-	0x2079, 0x0000, 0x080c, 0x3362, 0x00fe, 0x00ee, 0x0804, 0xa690,
-	0x6004, 0x908e, 0x0021, 0x0d48, 0x908e, 0x0022, 0x090c, 0xa7a7,
-	0x0804, 0xa690, 0x90b2, 0x0040, 0x1a04, 0xa790, 0x2008, 0x0002,
-	0xa72a, 0xa72b, 0xa72e, 0xa731, 0xa734, 0xa737, 0xa728, 0xa728,
-	0xa728, 0xa728, 0xa728, 0xa728, 0xa728, 0xa728, 0xa728, 0xa728,
-	0xa728, 0xa728, 0xa728, 0xa728, 0xa728, 0xa728, 0xa728, 0xa728,
-	0xa728, 0xa728, 0xa728, 0xa728, 0xa728, 0xa728, 0xa73a, 0xa745,
-	0xa728, 0xa747, 0xa745, 0xa728, 0xa728, 0xa728, 0xa728, 0xa728,
-	0xa745, 0xa745, 0xa728, 0xa728, 0xa728, 0xa728, 0xa728, 0xa728,
-	0xa728, 0xa728, 0xa777, 0xa745, 0xa728, 0xa741, 0xa728, 0xa728,
-	0xa728, 0xa742, 0xa728, 0xa728, 0xa728, 0xa745, 0xa76e, 0xa728,
-	0x080c, 0x0db4, 0x00d0, 0x2001, 0x000b, 0x0410, 0x2001, 0x0003,
-	0x00f8, 0x2001, 0x0005, 0x00e0, 0x2001, 0x0001, 0x00c8, 0x2001,
-	0x0009, 0x00b0, 0x080c, 0x8846, 0x6003, 0x0005, 0x080c, 0x894b,
-	0x0070, 0x0018, 0x0010, 0x080c, 0x6188, 0x0804, 0xa788, 0x080c,
-	0x8846, 0x080c, 0xc211, 0x6003, 0x0004, 0x080c, 0x894b, 0x0005,
-	0x080c, 0x6188, 0x080c, 0x8846, 0x6003, 0x0002, 0x0036, 0x2019,
-	0x185e, 0x2304, 0x9084, 0xff00, 0x1120, 0x2001, 0x1957, 0x201c,
-	0x0040, 0x8007, 0x909a, 0x0004, 0x0ec0, 0x8003, 0x801b, 0x831b,
-	0x9318, 0x631a, 0x003e, 0x080c, 0x894b, 0x0c08, 0x080c, 0x8846,
-	0x080c, 0xbf6b, 0x080c, 0x9e19, 0x080c, 0x894b, 0x08c0, 0x00e6,
-	0x00f6, 0x2071, 0x1894, 0x2079, 0x0000, 0x080c, 0x3362, 0x00fe,
-	0x00ee, 0x080c, 0x8846, 0x080c, 0x9e19, 0x080c, 0x894b, 0x0838,
-	0x080c, 0x8846, 0x6003, 0x0002, 0x080c, 0xc211, 0x0804, 0x894b,
-	0x2600, 0x2008, 0x0002, 0xa7a5, 0xa7a5, 0xa7a5, 0xa788, 0xa788,
-	0xa7a5, 0xa7a5, 0xa7a5, 0xa7a5, 0xa788, 0xa7a5, 0xa788, 0xa7a5,
-	0xa788, 0xa7a5, 0xa7a5, 0xa7a5, 0xa7a5, 0x080c, 0x0db4, 0x00e6,
-	0x0096, 0x0026, 0x0016, 0x080c, 0xbafe, 0x0568, 0x6014, 0x2048,
-	0xa864, 0x9086, 0x0139, 0x11a8, 0xa894, 0x9086, 0x0056, 0x1148,
-	0x080c, 0x5128, 0x0130, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000,
-	0x0028, 0x2001, 0x0030, 0x900e, 0x2011, 0x4005, 0x080c, 0xc0d8,
-	0x0090, 0xa868, 0xd0fc, 0x0178, 0xa807, 0x0000, 0x0016, 0x6004,
-	0x908e, 0x0021, 0x0168, 0x908e, 0x003d, 0x0150, 0x001e, 0xa867,
-	0x0103, 0xa833, 0x0100, 0x001e, 0x002e, 0x009e, 0x00ee, 0x0005,
-	0x001e, 0x0009, 0x0cc0, 0x0096, 0x6014, 0x2048, 0xa800, 0x2048,
-	0xa867, 0x0103, 0xa823, 0x8001, 0x009e, 0x0005, 0x00b6, 0x6610,
-	0x2658, 0xb804, 0x9084, 0x00ff, 0x90b2, 0x000c, 0x1a0c, 0x0db4,
-	0x6604, 0x96b6, 0x004d, 0x1120, 0x080c, 0xbff7, 0x0804, 0xa86b,
-	0x6604, 0x96b6, 0x0043, 0x1120, 0x080c, 0xc040, 0x0804, 0xa86b,
-	0x6604, 0x96b6, 0x004b, 0x1120, 0x080c, 0xc06c, 0x0804, 0xa86b,
-	0x6604, 0x96b6, 0x0033, 0x1120, 0x080c, 0xbf8d, 0x0804, 0xa86b,
-	0x6604, 0x96b6, 0x0028, 0x1120, 0x080c, 0xbd3d, 0x0804, 0xa86b,
-	0x6604, 0x96b6, 0x0029, 0x1120, 0x080c, 0xbd7e, 0x0804, 0xa86b,
-	0x6604, 0x96b6, 0x001f, 0x1118, 0x080c, 0xa1f1, 0x04e0, 0x6604,
-	0x96b6, 0x0000, 0x1118, 0x080c, 0xa518, 0x04a8, 0x6604, 0x96b6,
-	0x0022, 0x1118, 0x080c, 0xa229, 0x0470, 0x6604, 0x96b6, 0x0035,
-	0x1118, 0x080c, 0xa339, 0x0438, 0x6604, 0x96b6, 0x0039, 0x1118,
-	0x080c, 0xa4ad, 0x0400, 0x6604, 0x96b6, 0x003d, 0x1118, 0x080c,
-	0xa261, 0x00c8, 0x6604, 0x96b6, 0x0044, 0x1118, 0x080c, 0xa29d,
-	0x0090, 0x6604, 0x96b6, 0x0049, 0x1118, 0x080c, 0xa2c8, 0x0058,
-	0x91b6, 0x0015, 0x1110, 0x0063, 0x0030, 0x91b6, 0x0016, 0x1128,
-	0x00be, 0x0804, 0xab29, 0x00be, 0x0005, 0x080c, 0x9eae, 0x0cd8,
-	0xa888, 0xa88b, 0xa888, 0xa8cf, 0xa888, 0xaa5d, 0xab36, 0xa888,
-	0xa888, 0xab03, 0xa888, 0xab17, 0x0096, 0x080c, 0x150f, 0x6014,
-	0x2048, 0xa800, 0x2048, 0xa867, 0x0103, 0x009e, 0x0804, 0x9e19,
-	0xa001, 0xa001, 0x0005, 0x00e6, 0x2071, 0x1800, 0x708c, 0x9086,
-	0x0074, 0x1540, 0x080c, 0xd24c, 0x11b0, 0x6010, 0x00b6, 0x2058,
-	0x7030, 0xd08c, 0x0128, 0xb800, 0xd0bc, 0x0110, 0xc0c5, 0xb802,
-	0x00e9, 0x00be, 0x2001, 0x0006, 0x080c, 0x6188, 0x080c, 0x2ffc,
-	0x080c, 0x9e19, 0x0088, 0x2001, 0x000a, 0x080c, 0x6188, 0x080c,
-	0x2ffc, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x8411, 0x080c,
-	0x894b, 0x0010, 0x080c, 0xaa48, 0x00ee, 0x0005, 0x00d6, 0xb800,
-	0xd084, 0x0158, 0x9006, 0x080c, 0x6174, 0x2069, 0x1853, 0x6804,
-	0x0020, 0x2001, 0x0006, 0x080c, 0x61b4, 0x00de, 0x0005, 0x00b6,
-	0x0096, 0x00d6, 0x2011, 0x1823, 0x2204, 0x9086, 0x0074, 0x1904,
-	0xaa21, 0x6010, 0x2058, 0xbaa0, 0x9286, 0x007e, 0x1120, 0x080c,
-	0xac7a, 0x0804, 0xa986, 0x00d6, 0x080c, 0x6fa7, 0x0198, 0x0026,
-	0x2011, 0x0010, 0x080c, 0x657f, 0x002e, 0x05c8, 0x080c, 0x5393,
-	0x1540, 0x6014, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833,
-	0xdead, 0x00f8, 0x0026, 0x2011, 0x8008, 0x080c, 0x657f, 0x002e,
-	0x0530, 0x6014, 0x2048, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039,
-	0x1140, 0x2001, 0x0030, 0x900e, 0x2011, 0x4009, 0x080c, 0xc0d8,
-	0x0040, 0x6014, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833,
-	0xdead, 0x6010, 0x2058, 0xb9a0, 0x0016, 0x080c, 0x2ffc, 0x080c,
-	0x9e19, 0x001e, 0x080c, 0x30ce, 0x00de, 0x0804, 0xaa22, 0x00de,
-	0x080c, 0xac6f, 0x6010, 0x2058, 0xbaa0, 0x9286, 0x0080, 0x1510,
-	0x6014, 0x9005, 0x01a8, 0x2048, 0xa864, 0x9084, 0x00ff, 0x9086,
-	0x0039, 0x1140, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c,
-	0xc0d8, 0x0030, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, 0x0200,
-	0x2001, 0x0006, 0x080c, 0x6188, 0x080c, 0x2ffc, 0x080c, 0x9e19,
-	0x0804, 0xaa22, 0x080c, 0xaa30, 0x6014, 0x9005, 0x0190, 0x2048,
-	0xa868, 0xd0f4, 0x01e8, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039,
-	0x1d08, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c, 0xc0d8,
-	0x08f8, 0x080c, 0xaa26, 0x0160, 0x9006, 0x080c, 0x6174, 0x2001,
-	0x0004, 0x080c, 0x61b4, 0x2001, 0x0007, 0x080c, 0x6188, 0x08a0,
-	0x2001, 0x0004, 0x080c, 0x6188, 0x6003, 0x0001, 0x6007, 0x0003,
-	0x080c, 0x8411, 0x080c, 0x894b, 0x0804, 0xaa22, 0xb85c, 0xd0e4,
-	0x01d0, 0x080c, 0xbf0d, 0x080c, 0x6fa7, 0x0118, 0xd0dc, 0x1904,
-	0xa948, 0x2011, 0x1836, 0x2204, 0xc0ad, 0x2012, 0x2001, 0x0002,
-	0x00f6, 0x2079, 0x0100, 0x78e3, 0x0000, 0x080c, 0x26d7, 0x78e2,
-	0x00fe, 0x0804, 0xa948, 0x080c, 0xbf4a, 0x2011, 0x1836, 0x2204,
-	0xc0a5, 0x2012, 0x0006, 0x080c, 0xd3a5, 0x000e, 0x1904, 0xa948,
-	0xc0b5, 0x2012, 0x2001, 0x0006, 0x080c, 0x6188, 0x9006, 0x080c,
-	0x6174, 0x00c6, 0x2001, 0x180f, 0x2004, 0xd09c, 0x0520, 0x00f6,
-	0x2079, 0x0100, 0x00e6, 0x2071, 0x1800, 0x700c, 0x9084, 0x00ff,
-	0x78e6, 0x707a, 0x7010, 0x78ea, 0x707e, 0x908c, 0x00ff, 0x00ee,
-	0x780c, 0xc0b5, 0x780e, 0x00fe, 0x080c, 0x26ac, 0x00f6, 0x2100,
-	0x900e, 0x080c, 0x2663, 0x795a, 0x00fe, 0x9186, 0x0081, 0x01d8,
-	0x2009, 0x0081, 0x00c8, 0x2009, 0x00ef, 0x00f6, 0x2079, 0x0100,
-	0x79ea, 0x7932, 0x7936, 0x780c, 0xc0b5, 0x780e, 0x00fe, 0x080c,
-	0x26ac, 0x00f6, 0x2079, 0x1800, 0x797e, 0x2100, 0x900e, 0x080c,
-	0x2663, 0x795a, 0x00fe, 0x8108, 0x080c, 0x61d7, 0x2b00, 0x00ce,
-	0x1904, 0xa948, 0x6012, 0x2009, 0x180f, 0x210c, 0xd19c, 0x0150,
-	0x2009, 0x027c, 0x210c, 0x918c, 0x00ff, 0xb912, 0x2009, 0x027d,
-	0x210c, 0xb916, 0x2001, 0x0002, 0x080c, 0x6188, 0x6023, 0x0001,
-	0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x8411, 0x080c, 0x894b,
-	0x0008, 0x0431, 0x00de, 0x009e, 0x00be, 0x0005, 0x2001, 0x1810,
-	0x2004, 0xd0a4, 0x0120, 0x2001, 0x1854, 0x2004, 0xd0ac, 0x0005,
-	0x00e6, 0x080c, 0xd81b, 0x0190, 0x2071, 0x0260, 0x7108, 0x720c,
-	0x918c, 0x00ff, 0x1118, 0x9284, 0xff00, 0x0140, 0x6010, 0x2058,
-	0xb8a0, 0x9084, 0xff80, 0x1110, 0xb912, 0xba16, 0x00ee, 0x0005,
-	0x2030, 0x2001, 0x0007, 0x080c, 0x6188, 0x080c, 0x5393, 0x1120,
-	0x2001, 0x0007, 0x080c, 0x61b4, 0x080c, 0x2ffc, 0x6020, 0x9086,
-	0x000a, 0x1108, 0x0005, 0x0804, 0x9e19, 0x00b6, 0x00e6, 0x0026,
-	0x0016, 0x2071, 0x1800, 0x708c, 0x9086, 0x0014, 0x1904, 0xaafa,
-	0x00d6, 0x080c, 0x6fa7, 0x0198, 0x0026, 0x2011, 0x0010, 0x080c,
-	0x657f, 0x002e, 0x05c8, 0x080c, 0x5393, 0x1540, 0x6014, 0x2048,
-	0xa807, 0x0000, 0xa867, 0x0103, 0xa833, 0xdead, 0x00f8, 0x0026,
-	0x2011, 0x8008, 0x080c, 0x657f, 0x002e, 0x0530, 0x6014, 0x2048,
-	0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, 0x0030,
-	0x900e, 0x2011, 0x4009, 0x080c, 0xc0d8, 0x0040, 0x6014, 0x2048,
-	0xa807, 0x0000, 0xa867, 0x0103, 0xa833, 0xdead, 0x6010, 0x2058,
-	0xb9a0, 0x0016, 0x080c, 0x2ffc, 0x080c, 0x9e19, 0x001e, 0x080c,
-	0x30ce, 0x00de, 0x0804, 0xaafe, 0x00de, 0x080c, 0x5393, 0x1170,
-	0x6014, 0x9005, 0x1158, 0x0036, 0x0046, 0x6010, 0x2058, 0xbba0,
-	0x2021, 0x0006, 0x080c, 0x4a6f, 0x004e, 0x003e, 0x00d6, 0x6010,
-	0x2058, 0x080c, 0x62d2, 0x080c, 0xa8be, 0x00de, 0x080c, 0xad40,
-	0x1588, 0x6010, 0x2058, 0xb890, 0x9005, 0x0560, 0x2001, 0x0006,
-	0x080c, 0x6188, 0x0096, 0x6014, 0x904d, 0x01d0, 0xa864, 0x9084,
-	0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, 0x0000, 0x900e, 0x2011,
-	0x4000, 0x080c, 0xc0d8, 0x0060, 0xa864, 0x9084, 0x00ff, 0x9086,
-	0x0029, 0x0130, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, 0x0200,
-	0x009e, 0x080c, 0x2ffc, 0x6020, 0x9086, 0x000a, 0x0138, 0x080c,
-	0x9e19, 0x0020, 0x080c, 0xa7a7, 0x080c, 0xaa48, 0x001e, 0x002e,
-	0x00ee, 0x00be, 0x0005, 0x2011, 0x1823, 0x2204, 0x9086, 0x0014,
-	0x1160, 0x2001, 0x0002, 0x080c, 0x6188, 0x6003, 0x0001, 0x6007,
-	0x0001, 0x080c, 0x8411, 0x0804, 0x894b, 0x0804, 0xaa48, 0x2030,
-	0x2011, 0x1823, 0x2204, 0x9086, 0x0004, 0x1148, 0x96b6, 0x000b,
-	0x1120, 0x2001, 0x0007, 0x080c, 0x6188, 0x0804, 0x9e19, 0x0804,
-	0xaa48, 0x0002, 0xa888, 0xab41, 0xa888, 0xab80, 0xa888, 0xac2b,
-	0xab36, 0xa888, 0xa888, 0xac3e, 0xa888, 0xac4e, 0x6604, 0x9686,
-	0x0003, 0x0904, 0xaa5d, 0x96b6, 0x001e, 0x1110, 0x080c, 0x9e19,
-	0x0005, 0x00b6, 0x00d6, 0x00c6, 0x080c, 0xac5e, 0x11a0, 0x9006,
-	0x080c, 0x6174, 0x080c, 0x2fd7, 0x080c, 0xc20e, 0x2001, 0x0002,
-	0x080c, 0x6188, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x8411,
-	0x080c, 0x894b, 0x0408, 0x2009, 0x026e, 0x2104, 0x9086, 0x0009,
-	0x1160, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0170,
-	0x8001, 0xb842, 0x601b, 0x000a, 0x0078, 0x2009, 0x026f, 0x2104,
-	0x9084, 0xff00, 0x9086, 0x1900, 0x1108, 0x08a0, 0x080c, 0x2fd7,
-	0x080c, 0xc20e, 0x080c, 0xaa48, 0x00ce, 0x00de, 0x00be, 0x0005,
-	0x0096, 0x00b6, 0x0026, 0x9016, 0x080c, 0xac6c, 0x00d6, 0x2069,
-	0x194d, 0x2d04, 0x9005, 0x0168, 0x6010, 0x2058, 0xb8a0, 0x9086,
-	0x007e, 0x1138, 0x2069, 0x181f, 0x2d04, 0x8000, 0x206a, 0x00de,
-	0x0010, 0x00de, 0x0088, 0x9006, 0x080c, 0x6174, 0x2001, 0x0002,
-	0x080c, 0x6188, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x8411,
-	0x080c, 0x894b, 0x0804, 0xabfb, 0x080c, 0xbafe, 0x01b0, 0x6014,
-	0x2048, 0xa864, 0x2010, 0x9086, 0x0139, 0x1138, 0x6007, 0x0016,
-	0x2001, 0x0002, 0x080c, 0xc132, 0x00b0, 0x6014, 0x2048, 0xa864,
-	0xd0fc, 0x0118, 0x2001, 0x0001, 0x0ca8, 0x2001, 0x180e, 0x2004,
-	0xd0dc, 0x0148, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005,
-	0x1110, 0x9006, 0x0c38, 0x080c, 0xa7a7, 0x2009, 0x026e, 0x2134,
-	0x96b4, 0x00ff, 0x9686, 0x0005, 0x0510, 0x9686, 0x000b, 0x01c8,
-	0x2009, 0x026f, 0x2104, 0x9084, 0xff00, 0x1118, 0x9686, 0x0009,
-	0x01b0, 0x9086, 0x1900, 0x1168, 0x9686, 0x0009, 0x0180, 0x2001,
-	0x0004, 0x080c, 0x6188, 0x2001, 0x0028, 0x601a, 0x6007, 0x0052,
-	0x0010, 0x080c, 0xaa48, 0x002e, 0x00be, 0x009e, 0x0005, 0x9286,
-	0x0139, 0x0160, 0x6014, 0x2048, 0x080c, 0xbafe, 0x0140, 0xa864,
-	0x9086, 0x0139, 0x0118, 0xa868, 0xd0fc, 0x0108, 0x0c50, 0x6010,
-	0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0138, 0x8001, 0xb842,
-	0x601b, 0x000a, 0x6007, 0x0016, 0x08f0, 0xb8a0, 0x9086, 0x007e,
-	0x1138, 0x00e6, 0x2071, 0x1800, 0x080c, 0x5c5d, 0x00ee, 0x0010,
-	0x080c, 0x2fd7, 0x0870, 0x080c, 0xac6c, 0x1160, 0x2001, 0x0004,
-	0x080c, 0x6188, 0x6003, 0x0001, 0x6007, 0x0003, 0x080c, 0x8411,
-	0x0804, 0x894b, 0x080c, 0xa7a7, 0x0804, 0xaa48, 0x0469, 0x1160,
-	0x2001, 0x0008, 0x080c, 0x6188, 0x6003, 0x0001, 0x6007, 0x0005,
-	0x080c, 0x8411, 0x0804, 0x894b, 0x0804, 0xaa48, 0x00e9, 0x1160,
-	0x2001, 0x000a, 0x080c, 0x6188, 0x6003, 0x0001, 0x6007, 0x0001,
-	0x080c, 0x8411, 0x0804, 0x894b, 0x0804, 0xaa48, 0x2009, 0x026e,
-	0x2104, 0x9086, 0x0003, 0x1138, 0x2009, 0x026f, 0x2104, 0x9084,
-	0xff00, 0x9086, 0x2a00, 0x0005, 0x9085, 0x0001, 0x0005, 0x00b6,
-	0x00c6, 0x0016, 0x6110, 0x2158, 0x080c, 0x6246, 0x001e, 0x00ce,
-	0x00be, 0x0005, 0x00b6, 0x00f6, 0x00e6, 0x00d6, 0x0036, 0x0016,
-	0x6010, 0x2058, 0x2009, 0x1836, 0x2104, 0x9085, 0x0003, 0x200a,
-	0x080c, 0xad12, 0x0560, 0x2009, 0x1836, 0x2104, 0xc0cd, 0x200a,
-	0x080c, 0x6557, 0x0158, 0x9006, 0x2020, 0x2009, 0x002a, 0x080c,
-	0xd50a, 0x2001, 0x180c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a,
-	0x2009, 0x0001, 0x080c, 0x2fa2, 0x00e6, 0x2071, 0x1800, 0x080c,
-	0x2dbb, 0x00ee, 0x00c6, 0x0156, 0x20a9, 0x0781, 0x2009, 0x007f,
-	0x080c, 0x30ce, 0x8108, 0x1f04, 0xacb0, 0x015e, 0x00ce, 0x080c,
-	0xac6f, 0x2071, 0x0260, 0x2079, 0x0200, 0x7817, 0x0001, 0x2001,
-	0x1836, 0x200c, 0xc1c5, 0x7018, 0xd0fc, 0x0110, 0xd0dc, 0x0118,
-	0x7038, 0xd0dc, 0x1108, 0xc1c4, 0x7817, 0x0000, 0x2001, 0x1836,
-	0x2102, 0x2079, 0x0100, 0x2e04, 0x9084, 0x00ff, 0x2069, 0x181e,
-	0x206a, 0x78e6, 0x0006, 0x8e70, 0x2e04, 0x2069, 0x181f, 0x206a,
-	0x78ea, 0x7832, 0x7836, 0x2010, 0x9084, 0xff00, 0x001e, 0x9105,
-	0x2009, 0x182b, 0x200a, 0x2200, 0x9084, 0x00ff, 0x2008, 0x080c,
-	0x26ac, 0x080c, 0x6fa7, 0x0170, 0x2071, 0x0260, 0x2069, 0x1953,
-	0x7048, 0x206a, 0x704c, 0x6806, 0x7050, 0x680a, 0x7054, 0x680e,
-	0x080c, 0xbf0d, 0x0040, 0x2001, 0x0006, 0x080c, 0x6188, 0x080c,
-	0x2ffc, 0x080c, 0x9e19, 0x001e, 0x003e, 0x00de, 0x00ee, 0x00fe,
-	0x00be, 0x0005, 0x0096, 0x0026, 0x0036, 0x00e6, 0x0156, 0x2019,
-	0x182b, 0x231c, 0x83ff, 0x01f0, 0x2071, 0x0260, 0x7200, 0x9294,
-	0x00ff, 0x7004, 0x9084, 0xff00, 0x9205, 0x9306, 0x1198, 0x2011,
-	0x0276, 0x20a9, 0x0004, 0x2b48, 0x2019, 0x000a, 0x080c, 0xadf4,
-	0x1148, 0x2011, 0x027a, 0x20a9, 0x0004, 0x2019, 0x0006, 0x080c,
-	0xadf4, 0x1100, 0x015e, 0x00ee, 0x003e, 0x002e, 0x009e, 0x0005,
-	0x00e6, 0x2071, 0x0260, 0x7034, 0x9086, 0x0014, 0x11a8, 0x7038,
-	0x9086, 0x0800, 0x1188, 0x703c, 0xd0ec, 0x0160, 0x9084, 0x0f00,
-	0x9086, 0x0100, 0x1138, 0x7054, 0xd0a4, 0x1110, 0xd0ac, 0x0110,
-	0x9006, 0x0010, 0x9085, 0x0001, 0x00ee, 0x0005, 0x00e6, 0x0096,
-	0x00c6, 0x0076, 0x0056, 0x0046, 0x0026, 0x0006, 0x0126, 0x2091,
-	0x8000, 0x2029, 0x19c1, 0x252c, 0x2021, 0x19c7, 0x2424, 0x2061,
-	0x1cd0, 0x2071, 0x1800, 0x7250, 0x7070, 0x9202, 0x1a04, 0xadcc,
-	0x080c, 0xd53b, 0x0904, 0xadc5, 0x6720, 0x9786, 0x0007, 0x0904,
-	0xadc5, 0x2500, 0x9c06, 0x0904, 0xadc5, 0x2400, 0x9c06, 0x05e8,
-	0x3e08, 0x9186, 0x0002, 0x1148, 0x6010, 0x9005, 0x0130, 0x00b6,
-	0x2058, 0xb800, 0x00be, 0xd0bc, 0x1580, 0x00c6, 0x6000, 0x9086,
-	0x0004, 0x1110, 0x080c, 0x190d, 0x9786, 0x000a, 0x0148, 0x080c,
-	0xbd04, 0x1130, 0x00ce, 0x080c, 0xa7a7, 0x080c, 0x9e49, 0x00e8,
-	0x6014, 0x2048, 0x080c, 0xbafe, 0x01a8, 0x9786, 0x0003, 0x1530,
-	0xa867, 0x0103, 0xa87c, 0xd0cc, 0x0130, 0x0096, 0xa878, 0x2048,
-	0x080c, 0x0f9d, 0x009e, 0xab7a, 0xa877, 0x0000, 0x080c, 0x6878,
-	0x080c, 0xbce7, 0x080c, 0x9e49, 0x00ce, 0x9ce0, 0x0018, 0x7064,
-	0x9c02, 0x1210, 0x0804, 0xad73, 0x012e, 0x000e, 0x002e, 0x004e,
-	0x005e, 0x007e, 0x00ce, 0x009e, 0x00ee, 0x0005, 0x9786, 0x0006,
-	0x1118, 0x080c, 0xd4b5, 0x0c30, 0x9786, 0x000a, 0x0998, 0x0880,
-	0x220c, 0x2304, 0x9106, 0x1130, 0x8210, 0x8318, 0x1f04, 0xade0,
-	0x9006, 0x0005, 0x2304, 0x9102, 0x0218, 0x2001, 0x0001, 0x0008,
-	0x9006, 0x918d, 0x0001, 0x0005, 0x0136, 0x01c6, 0x0016, 0x8906,
-	0x8006, 0x8007, 0x908c, 0x003f, 0x21e0, 0x9084, 0xffc0, 0x9300,
-	0x2098, 0x3518, 0x20a9, 0x0001, 0x220c, 0x4002, 0x910e, 0x1140,
-	0x8210, 0x8319, 0x1dc8, 0x9006, 0x001e, 0x01ce, 0x013e, 0x0005,
-	0x220c, 0x9102, 0x0218, 0x2001, 0x0001, 0x0010, 0x2001, 0x0000,
-	0x918d, 0x0001, 0x001e, 0x01ce, 0x013e, 0x0005, 0x6004, 0x908a,
-	0x0053, 0x1a0c, 0x0db4, 0x080c, 0xbcf3, 0x0120, 0x080c, 0xbd04,
-	0x0168, 0x0028, 0x080c, 0x2ffc, 0x080c, 0xbd04, 0x0138, 0x080c,
-	0x8846, 0x080c, 0x9e19, 0x080c, 0x894b, 0x0005, 0x080c, 0xa7a7,
-	0x0cb0, 0x9182, 0x0054, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a,
-	0x0005, 0xae55, 0xae55, 0xae55, 0xae55, 0xae55, 0xae55, 0xae55,
-	0xae55, 0xae55, 0xae55, 0xae55, 0xae57, 0xae57, 0xae57, 0xae57,
-	0xae55, 0xae55, 0xae55, 0xae57, 0xae55, 0x080c, 0x0db4, 0x600b,
-	0xffff, 0x6003, 0x0001, 0x6106, 0x080c, 0x83c9, 0x0126, 0x2091,
-	0x8000, 0x080c, 0x894b, 0x012e, 0x0005, 0x9186, 0x0013, 0x1128,
-	0x6004, 0x9082, 0x0040, 0x0804, 0xaf0c, 0x9186, 0x0027, 0x1520,
-	0x080c, 0x8846, 0x080c, 0x2fd7, 0x080c, 0xc20e, 0x0096, 0x6114,
-	0x2148, 0x080c, 0xbafe, 0x0198, 0x080c, 0xbd04, 0x1118, 0x080c,
-	0xa7a7, 0x0068, 0xa867, 0x0103, 0xa87b, 0x0029, 0xa877, 0x0000,
-	0xa97c, 0xc1c5, 0xa97e, 0x080c, 0x6885, 0x080c, 0xbce7, 0x009e,
-	0x080c, 0x9e19, 0x0804, 0x894b, 0x9186, 0x0014, 0x1120, 0x6004,
-	0x9082, 0x0040, 0x04a0, 0x9186, 0x0046, 0x0150, 0x9186, 0x0045,
-	0x0138, 0x9186, 0x0053, 0x0120, 0x9186, 0x0048, 0x190c, 0x0db4,
-	0x2001, 0x0109, 0x2004, 0xd084, 0x0508, 0x0126, 0x2091, 0x2800,
-	0x0006, 0x0016, 0x0026, 0x0036, 0x00f6, 0x00e6, 0x00c6, 0x2079,
-	0x19b8, 0x2071, 0x1800, 0x2061, 0x0100, 0x080c, 0x82b5, 0x00ce,
-	0x00ee, 0x00fe, 0x003e, 0x002e, 0x001e, 0x000e, 0x012e, 0xa001,
-	0x6000, 0x9086, 0x0002, 0x1110, 0x0804, 0xaf4a, 0x0005, 0x0002,
-	0xaee6, 0xaee4, 0xaee4, 0xaee4, 0xaee4, 0xaee4, 0xaee4, 0xaee4,
-	0xaee4, 0xaee4, 0xaee4, 0xaf01, 0xaf01, 0xaf01, 0xaf01, 0xaee4,
-	0xaf01, 0xaee4, 0xaf01, 0xaee4, 0x080c, 0x0db4, 0x080c, 0x8846,
-	0x0096, 0x6114, 0x2148, 0x080c, 0xbafe, 0x0168, 0xa867, 0x0103,
-	0xa87b, 0x0006, 0xa877, 0x0000, 0xa880, 0xc0ec, 0xa882, 0x080c,
-	0x6885, 0x080c, 0xbce7, 0x009e, 0x080c, 0x9e19, 0x080c, 0x894b,
-	0x0005, 0x080c, 0x8846, 0x080c, 0xbd04, 0x090c, 0xa7a7, 0x080c,
-	0x9e19, 0x080c, 0x894b, 0x0005, 0x0002, 0xaf23, 0xaf21, 0xaf21,
-	0xaf21, 0xaf21, 0xaf21, 0xaf21, 0xaf21, 0xaf21, 0xaf21, 0xaf21,
-	0xaf3a, 0xaf3a, 0xaf3a, 0xaf3a, 0xaf21, 0xaf44, 0xaf21, 0xaf3a,
-	0xaf21, 0x080c, 0x0db4, 0x0096, 0x080c, 0x8846, 0x6014, 0x2048,
-	0x2001, 0x1959, 0x2004, 0x6042, 0xa97c, 0xd1ac, 0x0140, 0x6003,
-	0x0004, 0xa87c, 0x9085, 0x0400, 0xa87e, 0x009e, 0x0005, 0x6003,
-	0x0002, 0x0cb8, 0x080c, 0x8846, 0x080c, 0xc211, 0x080c, 0xc216,
-	0x6003, 0x000f, 0x0804, 0x894b, 0x080c, 0x8846, 0x080c, 0x9e19,
-	0x0804, 0x894b, 0x9182, 0x0054, 0x1220, 0x9182, 0x0040, 0x0208,
-	0x000a, 0x0005, 0xaf66, 0xaf66, 0xaf66, 0xaf66, 0xaf66, 0xaf68,
-	0xb045, 0xaf66, 0xb079, 0xaf66, 0xaf66, 0xaf66, 0xaf66, 0xaf66,
-	0xaf66, 0xaf66, 0xaf66, 0xaf66, 0xaf66, 0xb079, 0x080c, 0x0db4,
-	0x00b6, 0x0096, 0x6114, 0x2148, 0x7644, 0x96b4, 0x0fff, 0x86ff,
-	0x1528, 0x6010, 0x2058, 0xb800, 0xd0bc, 0x1904, 0xb034, 0xa87b,
-	0x0000, 0xa867, 0x0103, 0xae76, 0xa87c, 0xd0ac, 0x0128, 0xa834,
-	0xa938, 0x9115, 0x190c, 0xb20e, 0x080c, 0x66a0, 0x6210, 0x2258,
-	0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, 0x7044, 0xd0e4, 0x1904,
-	0xb018, 0x080c, 0x9e19, 0x009e, 0x00be, 0x0005, 0x968c, 0x0c00,
-	0x0150, 0x6010, 0x2058, 0xb800, 0xd0bc, 0x1904, 0xb01c, 0x7348,
-	0xab92, 0x734c, 0xab8e, 0x968c, 0x00ff, 0x9186, 0x0002, 0x0508,
-	0x9186, 0x0028, 0x1118, 0xa87b, 0x001c, 0x00e8, 0xd6dc, 0x01a0,
-	0xa87b, 0x0015, 0xa87c, 0xd0ac, 0x0170, 0xa938, 0xaa34, 0x2100,
-	0x9205, 0x0148, 0x7048, 0x9106, 0x1118, 0x704c, 0x9206, 0x0118,
-	0xa992, 0xaa8e, 0xc6dc, 0x0038, 0xd6d4, 0x0118, 0xa87b, 0x0007,
-	0x0010, 0xa87b, 0x0000, 0xa867, 0x0103, 0xae76, 0x901e, 0xd6c4,
-	0x01d8, 0x9686, 0x0100, 0x1130, 0x7064, 0x9005, 0x1118, 0xc6c4,
-	0x0804, 0xaf6f, 0x735c, 0xab86, 0x83ff, 0x0170, 0x938a, 0x0009,
-	0x0210, 0x2019, 0x0008, 0x0036, 0x2308, 0x2019, 0x0018, 0x2011,
-	0x0025, 0x080c, 0xb6f9, 0x003e, 0xd6cc, 0x0904, 0xaf84, 0x7154,
-	0xa98a, 0x81ff, 0x0904, 0xaf84, 0x9192, 0x0021, 0x1278, 0x8304,
-	0x9098, 0x0018, 0x2011, 0x0029, 0x080c, 0xb6f9, 0x2011, 0x0205,
-	0x2013, 0x0000, 0x080c, 0xc19e, 0x0804, 0xaf84, 0xa868, 0xd0fc,
-	0x0120, 0x2009, 0x0020, 0xa98a, 0x0c50, 0x00a6, 0x2950, 0x080c,
-	0xb698, 0x00ae, 0x080c, 0xc19e, 0x080c, 0xb6e9, 0x0804, 0xaf86,
-	0x080c, 0xbdf7, 0x0804, 0xaf93, 0xa87c, 0xd0ac, 0x0904, 0xaf9f,
-	0xa880, 0xd0bc, 0x1904, 0xaf9f, 0x7348, 0xa838, 0x9306, 0x11c8,
-	0x734c, 0xa834, 0x931e, 0x0904, 0xaf9f, 0xd6d4, 0x0190, 0xab38,
-	0x9305, 0x0904, 0xaf9f, 0x0068, 0xa87c, 0xd0ac, 0x0904, 0xaf77,
-	0xa838, 0xa934, 0x9105, 0x0904, 0xaf77, 0xa880, 0xd0bc, 0x1904,
-	0xaf77, 0x080c, 0xbe31, 0x0804, 0xaf93, 0x0096, 0x00f6, 0x6003,
-	0x0003, 0x6007, 0x0043, 0x2079, 0x026c, 0x7c04, 0x7b00, 0x7e0c,
-	0x7d08, 0x6014, 0x2048, 0xa87c, 0xd0ac, 0x0140, 0x6003, 0x0002,
-	0x00fe, 0x009e, 0x0005, 0x2130, 0x2228, 0x0058, 0x2400, 0xa9ac,
-	0x910a, 0x2300, 0xaab0, 0x9213, 0x2600, 0x9102, 0x2500, 0x9203,
-	0x0e90, 0xac36, 0xab3a, 0xae46, 0xad4a, 0x00fe, 0x6043, 0x0000,
-	0x2c10, 0x080c, 0x1a5c, 0x080c, 0x842e, 0x080c, 0x8a26, 0x009e,
-	0x0005, 0x0005, 0x9182, 0x0054, 0x1220, 0x9182, 0x0040, 0x0208,
-	0x000a, 0x0005, 0xb096, 0xb096, 0xb096, 0xb096, 0xb096, 0xb098,
-	0xb12e, 0xb096, 0xb096, 0xb145, 0xb1d1, 0xb096, 0xb096, 0xb096,
-	0xb096, 0xb1e6, 0xb096, 0xb096, 0xb096, 0xb096, 0x080c, 0x0db4,
-	0x0076, 0x00a6, 0x00e6, 0x0096, 0x2071, 0x0260, 0x6114, 0x2150,
-	0x7644, 0xb676, 0x96b4, 0x0fff, 0xb77c, 0xc7e5, 0xb77e, 0x6210,
-	0x00b6, 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, 0x00be,
-	0x86ff, 0x0904, 0xb129, 0x9694, 0xff00, 0x9284, 0x0c00, 0x0120,
-	0x7048, 0xb092, 0x704c, 0xb08e, 0x9284, 0x0300, 0x0904, 0xb129,
-	0x080c, 0x0feb, 0x090c, 0x0db4, 0x2900, 0xb07a, 0xb77c, 0xc7cd,
-	0xb77e, 0xa867, 0x0103, 0xb068, 0xa86a, 0xb06c, 0xa86e, 0xb070,
-	0xa872, 0xae76, 0x968c, 0x0c00, 0x0120, 0x7348, 0xab92, 0x734c,
-	0xab8e, 0x968c, 0x00ff, 0x9186, 0x0002, 0x0180, 0x9186, 0x0028,
-	0x1118, 0xa87b, 0x001c, 0x0060, 0xd6dc, 0x0118, 0xa87b, 0x0015,
-	0x0038, 0xd6d4, 0x0118, 0xa87b, 0x0007, 0x0010, 0xa87b, 0x0000,
-	0xaf7e, 0xb080, 0xa882, 0xb084, 0xa886, 0x901e, 0xd6c4, 0x0190,
-	0x735c, 0xab86, 0x83ff, 0x0170, 0x938a, 0x0009, 0x0210, 0x2019,
-	0x0008, 0x0036, 0x2308, 0x2019, 0x0018, 0x2011, 0x0025, 0x080c,
-	0xb6f9, 0x003e, 0xd6cc, 0x01e8, 0x7154, 0xa98a, 0x81ff, 0x01c8,
-	0x9192, 0x0021, 0x1260, 0x8304, 0x9098, 0x0018, 0x2011, 0x0029,
-	0x080c, 0xb6f9, 0x2011, 0x0205, 0x2013, 0x0000, 0x0050, 0xb068,
-	0xd0fc, 0x0120, 0x2009, 0x0020, 0xa98a, 0x0c68, 0x2950, 0x080c,
-	0xb698, 0x009e, 0x00ee, 0x00ae, 0x007e, 0x0005, 0x00f6, 0x00a6,
-	0x6003, 0x0003, 0x2079, 0x026c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08,
-	0x6014, 0x2050, 0xb436, 0xb33a, 0xb646, 0xb54a, 0x00ae, 0x00fe,
-	0x2c10, 0x080c, 0x1a5c, 0x0804, 0x9360, 0x6003, 0x0002, 0x6004,
-	0x9086, 0x0040, 0x11c8, 0x0096, 0x6014, 0x2048, 0xa87c, 0xd0ac,
-	0x0160, 0x601c, 0xd084, 0x1130, 0x00f6, 0x2c00, 0x2078, 0x080c,
-	0x1648, 0x00fe, 0x6003, 0x0004, 0x0010, 0x6003, 0x0002, 0x009e,
-	0x080c, 0x8846, 0x080c, 0x894b, 0x0096, 0x2001, 0x1959, 0x2004,
-	0x6042, 0x080c, 0x88fb, 0x080c, 0x8a26, 0x6114, 0x2148, 0xa97c,
-	0xd1e4, 0x0904, 0xb1cc, 0xd1cc, 0x05a8, 0xa978, 0xa868, 0xd0fc,
-	0x0538, 0x0016, 0xa87c, 0x0006, 0xa880, 0x0006, 0xa860, 0x20e8,
-	0xa85c, 0x9080, 0x0019, 0x20a0, 0x810e, 0x810e, 0x810f, 0x9184,
-	0x003f, 0x20e0, 0x9184, 0xffc0, 0x9080, 0x0019, 0x2098, 0x0156,
-	0x20a9, 0x0020, 0x4003, 0x015e, 0x000e, 0xa882, 0x000e, 0xa87e,
-	0x001e, 0xa874, 0x0006, 0x2148, 0x080c, 0x0f9d, 0x001e, 0x0440,
-	0x0016, 0x080c, 0x0f9d, 0x009e, 0xa974, 0x0016, 0x080c, 0xb6e9,
-	0x001e, 0x00f0, 0xa867, 0x0103, 0xa974, 0x9184, 0x00ff, 0x90b6,
-	0x0002, 0x0180, 0x9086, 0x0028, 0x1118, 0xa87b, 0x001c, 0x0060,
-	0xd1dc, 0x0118, 0xa87b, 0x0015, 0x0038, 0xd1d4, 0x0118, 0xa87b,
-	0x0007, 0x0010, 0xa87b, 0x0000, 0x0016, 0x080c, 0x66a0, 0x001e,
-	0xd1e4, 0x1120, 0x080c, 0x9e19, 0x009e, 0x0005, 0x080c, 0xbdf7,
-	0x0cd8, 0x6004, 0x9086, 0x0040, 0x1120, 0x080c, 0x8846, 0x080c,
-	0x894b, 0x2019, 0x0001, 0x080c, 0x96bf, 0x6003, 0x0002, 0x080c,
-	0xc216, 0x080c, 0x88fb, 0x080c, 0x8a26, 0x0005, 0x6004, 0x9086,
-	0x0040, 0x1120, 0x080c, 0x8846, 0x080c, 0x894b, 0x2019, 0x0001,
-	0x080c, 0x96bf, 0x080c, 0x88fb, 0x080c, 0x2fd7, 0x080c, 0xc20e,
-	0x0096, 0x6114, 0x2148, 0x080c, 0xbafe, 0x0150, 0xa867, 0x0103,
-	0xa87b, 0x0029, 0xa877, 0x0000, 0x080c, 0x6885, 0x080c, 0xbce7,
-	0x009e, 0x080c, 0x9e19, 0x080c, 0x8a26, 0x0005, 0xa87b, 0x0015,
-	0xd1fc, 0x0180, 0xa87b, 0x0007, 0x8002, 0x8000, 0x810a, 0x9189,
-	0x0000, 0x0006, 0x0016, 0x2009, 0x1a4a, 0x2104, 0x8000, 0x200a,
-	0x001e, 0x000e, 0xa992, 0xa88e, 0x0005, 0x9182, 0x0054, 0x1220,
-	0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xb241, 0xb241, 0xb241,
-	0xb241, 0xb241, 0xb243, 0xb241, 0xb241, 0xb2e9, 0xb241, 0xb241,
-	0xb241, 0xb241, 0xb241, 0xb241, 0xb241, 0xb241, 0xb241, 0xb241,
-	0xb41a, 0x080c, 0x0db4, 0x0076, 0x00a6, 0x00e6, 0x0096, 0x2071,
-	0x0260, 0x6114, 0x2150, 0x7644, 0xb676, 0x96b4, 0x0fff, 0xb77c,
-	0xc7e5, 0xb77e, 0x6210, 0x00b6, 0x2258, 0xba3c, 0x82ff, 0x0110,
-	0x8211, 0xba3e, 0x00be, 0x86ff, 0x0904, 0xb2e2, 0x9694, 0xff00,
-	0x9284, 0x0c00, 0x0120, 0x7048, 0xb092, 0x704c, 0xb08e, 0x9284,
-	0x0300, 0x0904, 0xb2e2, 0x9686, 0x0100, 0x1130, 0x7064, 0x9005,
-	0x1118, 0xc6c4, 0xb676, 0x0c38, 0x080c, 0x0feb, 0x090c, 0x0db4,
-	0x2900, 0xb07a, 0xb77c, 0x97bd, 0x0200, 0xb77e, 0xa867, 0x0103,
-	0xb068, 0xa86a, 0xb06c, 0xa86e, 0xb070, 0xa872, 0x7044, 0x9084,
-	0xf000, 0x9635, 0xae76, 0x968c, 0x0c00, 0x0120, 0x7348, 0xab92,
+	0x0013, 0x006e, 0x0005, 0x9f33, 0x9f33, 0x9f76, 0xa015, 0xa0aa,
+	0x9f33, 0x9f33, 0x9f33, 0x9f35, 0x9f33, 0x9f33, 0x9f33, 0x9f33,
+	0x9f33, 0x9f33, 0x9f33, 0x080c, 0x0db4, 0x9186, 0x004c, 0x0588,
+	0x9186, 0x0003, 0x190c, 0x0db4, 0x0096, 0x601c, 0xc0ed, 0x601e,
+	0x6003, 0x0003, 0x6106, 0x6014, 0x2048, 0xa87c, 0x9084, 0xa000,
+	0xc0b5, 0xa87e, 0xa8ac, 0xa846, 0xa8b0, 0xa84a, 0x9006, 0xa836,
+	0xa83a, 0xa884, 0x9092, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003,
+	0x8013, 0x8213, 0x9210, 0x621a, 0x009e, 0x2c10, 0x080c, 0x1a5c,
+	0x080c, 0x8456, 0x0126, 0x2091, 0x8000, 0x080c, 0x8a4e, 0x012e,
+	0x0005, 0x6010, 0x00b6, 0x2058, 0xbca0, 0x00be, 0x2c00, 0x080c,
+	0xa0cc, 0x080c, 0xc22a, 0x6003, 0x0007, 0x0005, 0x00d6, 0x0096,
+	0x00f6, 0x2079, 0x1800, 0x7a8c, 0x6014, 0x2048, 0xa87c, 0xd0ec,
+	0x1110, 0x9290, 0x0018, 0xac78, 0xc4fc, 0x0046, 0xa8e0, 0x9005,
+	0x1140, 0xa8dc, 0x921a, 0x0140, 0x0220, 0xa87b, 0x0007, 0x2010,
+	0x0028, 0xa87b, 0x0015, 0x0010, 0xa87b, 0x0000, 0x8214, 0xa883,
+	0x0000, 0xaa02, 0x0006, 0x0016, 0x0026, 0x00c6, 0x00d6, 0x00e6,
+	0x00f6, 0x2400, 0x9005, 0x1108, 0x009a, 0x2100, 0x9086, 0x0015,
+	0x1118, 0x2001, 0x0001, 0x0038, 0x2100, 0x9086, 0x0016, 0x0118,
+	0x2001, 0x0001, 0x002a, 0x94a4, 0x0007, 0x8423, 0x9405, 0x0002,
+	0x9fdd, 0x9fdd, 0x9fd8, 0x9fdb, 0x9fdd, 0x9fd5, 0x9fc8, 0x9fc8,
+	0x9fc8, 0x9fc8, 0x9fc8, 0x9fc8, 0x9fc8, 0x9fc8, 0x9fc8, 0x9fc8,
+	0x00fe, 0x00ee, 0x00de, 0x00ce, 0x002e, 0x001e, 0x000e, 0x004e,
+	0x00fe, 0x009e, 0x00de, 0x080c, 0x0db4, 0x080c, 0xaa76, 0x0028,
+	0x080c, 0xab99, 0x0010, 0x080c, 0xac88, 0x00fe, 0x00ee, 0x00de,
+	0x00ce, 0x002e, 0x001e, 0x2c00, 0xa896, 0x000e, 0x080c, 0xa18a,
+	0x0530, 0xa804, 0xa80e, 0x00a6, 0x2050, 0xb100, 0x00ae, 0x8006,
+	0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002,
+	0xaacc, 0xabd0, 0xacd4, 0xadd8, 0x2031, 0x0000, 0x2041, 0x1249,
+	0x080c, 0xa334, 0x0160, 0x000e, 0x9005, 0x0120, 0x00fe, 0x009e,
+	0x00de, 0x0005, 0x00fe, 0x009e, 0x00de, 0x0804, 0x9e32, 0x2001,
+	0x002c, 0x900e, 0x080c, 0xa1f0, 0x0c70, 0x91b6, 0x0015, 0x0170,
+	0x91b6, 0x0016, 0x0158, 0x91b2, 0x0047, 0x0a0c, 0x0db4, 0x91b2,
+	0x0050, 0x1a0c, 0x0db4, 0x9182, 0x0047, 0x00ca, 0x2001, 0x0109,
+	0x2004, 0xd08c, 0x0198, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016,
+	0x0026, 0x080c, 0x83aa, 0x002e, 0x001e, 0x000e, 0x012e, 0xa001,
+	0x6000, 0x9086, 0x0002, 0x1110, 0x0804, 0x9f76, 0x0005, 0xa048,
+	0xa048, 0xa04a, 0xa080, 0xa048, 0xa048, 0xa048, 0xa048, 0xa093,
+	0x080c, 0x0db4, 0x00d6, 0x0016, 0x0096, 0x080c, 0x8923, 0x080c,
+	0x8a4e, 0x6003, 0x0004, 0x6114, 0x2148, 0xa87c, 0xd0fc, 0x01c0,
+	0xa878, 0xc0fc, 0x9005, 0x1158, 0xa894, 0x9005, 0x0140, 0x2001,
+	0x0000, 0x900e, 0x080c, 0xa1f0, 0x080c, 0x9e32, 0x00a8, 0x6003,
+	0x0002, 0xa8a4, 0xa9a8, 0x9105, 0x1178, 0xa8ae, 0xa8b2, 0x0c78,
+	0xa87f, 0x0020, 0xa88c, 0xa88a, 0xa8a4, 0xa8ae, 0xa8a8, 0xa8b2,
+	0xa8c7, 0x0000, 0xa8cb, 0x0000, 0x009e, 0x001e, 0x00de, 0x0005,
+	0x080c, 0x8923, 0x00d6, 0x0096, 0x6114, 0x2148, 0x080c, 0xbb17,
+	0x0120, 0xa87b, 0x0006, 0x080c, 0x688c, 0x009e, 0x00de, 0x080c,
+	0x9e32, 0x0804, 0x8a4e, 0x080c, 0x8923, 0x080c, 0x2fda, 0x080c,
+	0xc227, 0x00d6, 0x0096, 0x6114, 0x2148, 0x080c, 0xbb17, 0x0120,
+	0xa87b, 0x0029, 0x080c, 0x688c, 0x009e, 0x00de, 0x080c, 0x9e32,
+	0x0804, 0x8a4e, 0x9182, 0x0047, 0x0002, 0xa0ba, 0xa0bc, 0xa0ba,
+	0xa0ba, 0xa0ba, 0xa0ba, 0xa0ba, 0xa0ba, 0xa0ba, 0xa0ba, 0xa0ba,
+	0xa0ba, 0xa0bc, 0x080c, 0x0db4, 0x00d6, 0x0096, 0x080c, 0x150f,
+	0x6114, 0x2148, 0xa87b, 0x0000, 0xa883, 0x0000, 0x080c, 0x688c,
+	0x009e, 0x00de, 0x0804, 0x9e32, 0x0026, 0x0036, 0x0056, 0x0066,
+	0x0096, 0x00a6, 0x00f6, 0x0006, 0x080c, 0x0feb, 0x000e, 0x090c,
+	0x0db4, 0xa960, 0x21e8, 0xa95c, 0x9188, 0x0019, 0x21a0, 0x900e,
+	0x20a9, 0x0020, 0x4104, 0xa87a, 0x2079, 0x1800, 0x798c, 0x9188,
+	0x0018, 0x918c, 0x0fff, 0xa972, 0xac76, 0x2950, 0x00a6, 0x2001,
+	0x0205, 0x2003, 0x0000, 0x901e, 0x2029, 0x0001, 0x9182, 0x0034,
+	0x1228, 0x2011, 0x001f, 0x080c, 0xb712, 0x04c0, 0x2130, 0x2009,
+	0x0034, 0x2011, 0x001f, 0x080c, 0xb712, 0x96b2, 0x0034, 0xb004,
+	0x904d, 0x0110, 0x080c, 0x0f9d, 0x080c, 0x0feb, 0x01d0, 0x8528,
+	0xa867, 0x0110, 0xa86b, 0x0000, 0x2920, 0xb406, 0x968a, 0x003d,
+	0x1230, 0x2608, 0x2011, 0x001b, 0x080c, 0xb712, 0x00b8, 0x96b2,
+	0x003c, 0x2009, 0x003c, 0x2950, 0x2011, 0x001b, 0x080c, 0xb712,
+	0x0c18, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad,
+	0x0050, 0xb566, 0xb070, 0xc0fd, 0xb072, 0x0048, 0x2001, 0x0205,
+	0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad, 0x0050, 0xb566, 0x2a48,
+	0xa804, 0xa807, 0x0000, 0x0006, 0x080c, 0x688c, 0x000e, 0x2048,
+	0x9005, 0x1db0, 0x00fe, 0x00ae, 0x009e, 0x006e, 0x005e, 0x003e,
+	0x002e, 0x0005, 0x00d6, 0x00f6, 0x0096, 0x0006, 0x080c, 0x0feb,
+	0x000e, 0x090c, 0x0db4, 0xa960, 0x21e8, 0xa95c, 0x9188, 0x0019,
+	0x21a0, 0x900e, 0x20a9, 0x0020, 0x4104, 0xaa66, 0xa87a, 0x2079,
+	0x1800, 0x798c, 0x810c, 0x9188, 0x000c, 0x9182, 0x001a, 0x0210,
+	0x2009, 0x001a, 0x21a8, 0x810b, 0xa972, 0xac76, 0x2e98, 0xa85c,
+	0x9080, 0x001f, 0x20a0, 0x2001, 0x0205, 0x200c, 0x918d, 0x0080,
+	0x2102, 0x4003, 0x2003, 0x0000, 0x080c, 0x688c, 0x009e, 0x00fe,
+	0x00de, 0x0005, 0x0016, 0x00d6, 0x00f6, 0x0096, 0x0016, 0x2001,
+	0x0205, 0x200c, 0x918d, 0x0080, 0x2102, 0x001e, 0x2079, 0x0200,
+	0x2e98, 0xa87c, 0xd0ec, 0x0118, 0x9e80, 0x000c, 0x2098, 0x2021,
+	0x003e, 0x901e, 0x9282, 0x0020, 0x0218, 0x2011, 0x0020, 0x2018,
+	0x9486, 0x003e, 0x1170, 0x0096, 0x080c, 0x0feb, 0x2900, 0x009e,
+	0x05c0, 0xa806, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002,
+	0x20a0, 0x3300, 0x908e, 0x0260, 0x0140, 0x2009, 0x0280, 0x9102,
+	0x920a, 0x0218, 0x2010, 0x2100, 0x9318, 0x2200, 0x9402, 0x1228,
+	0x2400, 0x9202, 0x2410, 0x9318, 0x9006, 0x2020, 0x22a8, 0xa800,
+	0x9200, 0xa802, 0x20e1, 0x0000, 0x4003, 0x83ff, 0x0180, 0x3300,
+	0x9086, 0x0280, 0x1130, 0x7814, 0x8000, 0x9085, 0x0080, 0x7816,
+	0x2e98, 0x2310, 0x84ff, 0x0904, 0xa19f, 0x0804, 0xa1a1, 0x9085,
+	0x0001, 0x7817, 0x0000, 0x009e, 0x00fe, 0x00de, 0x001e, 0x0005,
+	0x00d6, 0x0036, 0x0096, 0x6314, 0x2348, 0xa87a, 0xa982, 0x080c,
+	0x687f, 0x009e, 0x003e, 0x00de, 0x0005, 0x91b6, 0x0015, 0x1118,
+	0x080c, 0x9e32, 0x0030, 0x91b6, 0x0016, 0x190c, 0x0db4, 0x080c,
+	0x9e32, 0x0005, 0x20a9, 0x000e, 0x20e1, 0x0000, 0x2e98, 0x6014,
+	0x0096, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x20a0, 0x009e, 0x4003,
+	0x0136, 0x9080, 0x001b, 0x2011, 0x0006, 0x20a9, 0x0001, 0x3418,
+	0x8318, 0x23a0, 0x4003, 0x3318, 0x8318, 0x2398, 0x8211, 0x1db8,
+	0x2011, 0x0006, 0x013e, 0x20a0, 0x3318, 0x8318, 0x2398, 0x4003,
+	0x3418, 0x8318, 0x23a0, 0x8211, 0x1db8, 0x0096, 0x080c, 0xbb17,
+	0x0130, 0x6014, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0x009e,
+	0x0804, 0x9e32, 0x0096, 0x00d6, 0x0036, 0x7330, 0x9386, 0x0200,
+	0x11a8, 0x6010, 0x00b6, 0x2058, 0xb8bf, 0x0000, 0x00be, 0x6014,
+	0x9005, 0x0130, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0xab32,
+	0x080c, 0x9e32, 0x003e, 0x00de, 0x009e, 0x0005, 0x0011, 0x1d48,
+	0x0cc8, 0x0006, 0x0016, 0x080c, 0xc212, 0x0188, 0x6014, 0x9005,
+	0x1170, 0x600b, 0x0003, 0x601b, 0x0000, 0x6043, 0x0000, 0x2009,
+	0x0022, 0x080c, 0xa611, 0x9006, 0x001e, 0x000e, 0x0005, 0x9085,
+	0x0001, 0x0cd0, 0x0096, 0x0016, 0x20a9, 0x0014, 0x9e80, 0x000c,
+	0x20e1, 0x0000, 0x2098, 0x6014, 0x2048, 0xa860, 0x20e8, 0xa85c,
+	0x9080, 0x0002, 0x20a0, 0x4003, 0x2001, 0x0205, 0x2003, 0x0001,
+	0x2099, 0x0260, 0x20a9, 0x0016, 0x4003, 0x20a9, 0x000a, 0xa804,
+	0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003,
+	0x2001, 0x0205, 0x2003, 0x0002, 0x2099, 0x0260, 0x20a9, 0x0020,
+	0x4003, 0x2003, 0x0000, 0x6014, 0x2048, 0xa800, 0x2048, 0xa867,
+	0x0103, 0x080c, 0x9e32, 0x001e, 0x009e, 0x0005, 0x0096, 0x0016,
+	0x900e, 0x7030, 0x9086, 0x0100, 0x0140, 0x7038, 0x9084, 0x00ff,
+	0x800c, 0x703c, 0x9084, 0x00ff, 0x8004, 0x9080, 0x0004, 0x9108,
+	0x810b, 0x2011, 0x0002, 0x2019, 0x000c, 0x6014, 0x2048, 0x080c,
+	0xb712, 0x080c, 0xbb17, 0x0140, 0x6014, 0x2048, 0xa807, 0x0000,
+	0xa864, 0xa8e2, 0xa867, 0x0103, 0x080c, 0x9e32, 0x001e, 0x009e,
+	0x0005, 0x0016, 0x0096, 0x7030, 0x9086, 0x0100, 0x1118, 0x2009,
+	0x0004, 0x0010, 0x7034, 0x800c, 0x810b, 0x2011, 0x000c, 0x2019,
+	0x000c, 0x6014, 0x2048, 0xa804, 0x0096, 0x9005, 0x0108, 0x2048,
+	0x080c, 0xb712, 0x009e, 0x080c, 0xbb17, 0x0148, 0xa804, 0x9005,
+	0x1158, 0xa807, 0x0000, 0xa864, 0xa8e2, 0xa867, 0x0103, 0x080c,
+	0x9e32, 0x009e, 0x001e, 0x0005, 0x0086, 0x2040, 0xa030, 0x8007,
+	0x9086, 0x0100, 0x1118, 0x080c, 0xa7c0, 0x00e0, 0xa034, 0x8007,
+	0x800c, 0x8806, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0,
+	0x9080, 0x000c, 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000,
+	0xaaa0, 0xab9c, 0xaca8, 0xada4, 0x2031, 0x0000, 0x2041, 0x122f,
+	0x0019, 0x0d08, 0x008e, 0x0898, 0x0096, 0x0006, 0x080c, 0x0feb,
+	0x000e, 0x01b0, 0xa8ab, 0x0dcb, 0xa876, 0x000e, 0xa8a2, 0x0006,
+	0xae6a, 0x2800, 0xa89e, 0xa97a, 0xaf72, 0xaa8e, 0xab92, 0xac96,
+	0xad9a, 0x0086, 0x2940, 0x080c, 0x10d5, 0x008e, 0x9085, 0x0001,
+	0x009e, 0x0005, 0x00e6, 0x00d6, 0x0026, 0x7008, 0x9084, 0x00ff,
+	0x6210, 0x00b6, 0x2258, 0xba10, 0x00be, 0x9206, 0x1520, 0x700c,
+	0x6210, 0x00b6, 0x2258, 0xba14, 0x00be, 0x9206, 0x11e0, 0x6043,
+	0x0000, 0x2c68, 0x0016, 0x2009, 0x0035, 0x080c, 0xc18a, 0x001e,
+	0x1158, 0x622c, 0x2268, 0x2071, 0x026c, 0x6b20, 0x9386, 0x0003,
+	0x0130, 0x9386, 0x0006, 0x0128, 0x080c, 0x9e32, 0x0020, 0x0039,
+	0x0010, 0x080c, 0xa446, 0x002e, 0x00de, 0x00ee, 0x0005, 0x0096,
+	0x6814, 0x2048, 0x9186, 0x0015, 0x0904, 0xa42e, 0x918e, 0x0016,
+	0x1904, 0xa444, 0x700c, 0x908c, 0xff00, 0x9186, 0x1700, 0x0120,
+	0x9186, 0x0300, 0x1904, 0xa408, 0x89ff, 0x1138, 0x6800, 0x9086,
+	0x000f, 0x0904, 0xa3eb, 0x0804, 0xa442, 0x6808, 0x9086, 0xffff,
+	0x1904, 0xa430, 0xa87c, 0x9084, 0x0060, 0x9086, 0x0020, 0x1128,
+	0xa83c, 0xa940, 0x9105, 0x1904, 0xa430, 0x6824, 0xd0b4, 0x1904,
+	0xa430, 0x080c, 0xbd00, 0x685c, 0xa882, 0xa87c, 0xc0dc, 0xc0f4,
+	0xc0d4, 0xa87e, 0x0026, 0x900e, 0x6a18, 0x2001, 0x000a, 0x080c,
+	0x8270, 0xa884, 0x920a, 0x0208, 0x8011, 0xaa86, 0x82ff, 0x002e,
+	0x1138, 0x00c6, 0x2d60, 0x080c, 0xb83c, 0x00ce, 0x0804, 0xa442,
+	0x00c6, 0xa868, 0xd0fc, 0x1118, 0x080c, 0x5d4d, 0x0010, 0x080c,
+	0x60f4, 0x00ce, 0x1904, 0xa430, 0x00c6, 0x2d60, 0x080c, 0x9e32,
+	0x00ce, 0x0804, 0xa442, 0x00c6, 0x080c, 0x9e7f, 0x0198, 0x6017,
+	0x0000, 0x6810, 0x6012, 0x080c, 0xbf8c, 0x6023, 0x0003, 0x6904,
+	0x00c6, 0x2d60, 0x080c, 0x9e32, 0x00ce, 0x080c, 0x9eac, 0x00ce,
+	0x0804, 0xa442, 0x2001, 0x1959, 0x2004, 0x6842, 0x00ce, 0x04d0,
+	0x7008, 0x9086, 0x000b, 0x11c8, 0x6010, 0x00b6, 0x2058, 0xb900,
+	0xc1bc, 0xb902, 0x00be, 0x00c6, 0x2d60, 0xa87b, 0x0003, 0x080c,
+	0xc1cc, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x080c,
+	0x83f1, 0x080c, 0x8973, 0x00ce, 0x00e8, 0x700c, 0x9086, 0x2a00,
+	0x1138, 0x2001, 0x1959, 0x2004, 0x6842, 0x00a0, 0x0479, 0x00a0,
+	0x89ff, 0x090c, 0x0db4, 0x00c6, 0x00d6, 0x2d60, 0xa867, 0x0103,
+	0xa87b, 0x0003, 0x080c, 0x66a7, 0x080c, 0xbd00, 0x080c, 0x9e62,
+	0x00de, 0x00ce, 0x080c, 0x9e32, 0x009e, 0x0005, 0x9186, 0x0015,
+	0x1128, 0x2001, 0x1959, 0x2004, 0x6842, 0x0068, 0x918e, 0x0016,
+	0x1160, 0x00c6, 0x2d00, 0x2060, 0x080c, 0xd787, 0x080c, 0x8204,
+	0x080c, 0x9e32, 0x00ce, 0x080c, 0x9e32, 0x0005, 0x0026, 0x0036,
+	0x0046, 0x7228, 0xacb0, 0xabac, 0xd2f4, 0x0130, 0x2001, 0x1959,
+	0x2004, 0x6842, 0x0804, 0xa4c0, 0x00c6, 0x2d60, 0x080c, 0xb73d,
+	0x00ce, 0x6804, 0x9086, 0x0050, 0x1168, 0x00c6, 0x2d00, 0x2060,
+	0x6003, 0x0001, 0x6007, 0x0050, 0x080c, 0x83f1, 0x080c, 0x8973,
+	0x00ce, 0x04f0, 0x6800, 0x9086, 0x000f, 0x01a8, 0x89ff, 0x090c,
+	0x0db4, 0x6800, 0x9086, 0x0004, 0x1190, 0xa87c, 0xd0ac, 0x0178,
+	0xa843, 0x0fff, 0xa83f, 0x0fff, 0xa880, 0xc0fc, 0xa882, 0x2001,
+	0x0001, 0x6832, 0x0400, 0x2001, 0x0007, 0x6832, 0x00e0, 0xa87c,
+	0xd0b4, 0x1150, 0xd0ac, 0x0db8, 0x6824, 0xd0f4, 0x1d48, 0xa838,
+	0xa934, 0x9105, 0x0d80, 0x0c20, 0xd2ec, 0x1d68, 0x7024, 0x9306,
+	0x1118, 0x7020, 0x9406, 0x0d38, 0x7020, 0x683e, 0x7024, 0x683a,
+	0x2001, 0x0005, 0x6832, 0x080c, 0xbe83, 0x080c, 0x8973, 0x0010,
+	0x080c, 0x9e32, 0x004e, 0x003e, 0x002e, 0x0005, 0x00e6, 0x00d6,
+	0x0026, 0x7008, 0x9084, 0x00ff, 0x6210, 0x00b6, 0x2258, 0xba10,
+	0x00be, 0x9206, 0x1904, 0xa52b, 0x700c, 0x6210, 0x00b6, 0x2258,
+	0xba14, 0x00be, 0x9206, 0x1904, 0xa52b, 0x6038, 0x2068, 0x6824,
+	0xc0dc, 0x6826, 0x6a20, 0x9286, 0x0007, 0x0904, 0xa52b, 0x9286,
+	0x0002, 0x0904, 0xa52b, 0x9286, 0x0000, 0x05e8, 0x6808, 0x633c,
+	0x9306, 0x15c8, 0x2071, 0x026c, 0x9186, 0x0015, 0x0570, 0x918e,
+	0x0016, 0x1100, 0x00c6, 0x6038, 0x2060, 0x6104, 0x9186, 0x004b,
+	0x01c0, 0x9186, 0x004c, 0x01a8, 0x9186, 0x004d, 0x0190, 0x9186,
+	0x004e, 0x0178, 0x9186, 0x0052, 0x0160, 0x6014, 0x0096, 0x2048,
+	0x080c, 0xbb17, 0x090c, 0x0db4, 0xa87b, 0x0003, 0x009e, 0x080c,
+	0xc1cc, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x080c,
+	0x83f1, 0x080c, 0x8973, 0x00ce, 0x0030, 0x6038, 0x2070, 0x2001,
+	0x1959, 0x2004, 0x7042, 0x080c, 0x9e32, 0x002e, 0x00de, 0x00ee,
+	0x0005, 0x00b6, 0x0096, 0x00f6, 0x6014, 0x2048, 0x6010, 0x2058,
+	0x91b6, 0x0015, 0x0130, 0xba08, 0xbb0c, 0xbc00, 0xc48c, 0xbc02,
+	0x0460, 0x0096, 0x0156, 0x0036, 0x0026, 0x2b48, 0x9e90, 0x0010,
+	0x2019, 0x000a, 0x20a9, 0x0004, 0x080c, 0xae0d, 0x002e, 0x003e,
+	0x015e, 0x009e, 0x1904, 0xa59a, 0x0096, 0x0156, 0x0036, 0x0026,
+	0x2b48, 0x9e90, 0x0014, 0x2019, 0x0006, 0x20a9, 0x0004, 0x080c,
+	0xae0d, 0x002e, 0x003e, 0x015e, 0x009e, 0x15a0, 0x7238, 0xba0a,
+	0x733c, 0xbb0e, 0xbc00, 0xc48d, 0xbc02, 0xa804, 0x9005, 0x1128,
+	0x00fe, 0x009e, 0x00be, 0x0804, 0xa235, 0x0096, 0x2048, 0xaa12,
+	0xab16, 0xac0a, 0x009e, 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f,
+	0x9084, 0xffc0, 0x9080, 0x0002, 0x2009, 0x002b, 0xaaa0, 0xab9c,
+	0xaca8, 0xada4, 0x2031, 0x0000, 0x2041, 0x122f, 0x080c, 0xa334,
+	0x0130, 0x00fe, 0x009e, 0x080c, 0x9e32, 0x00be, 0x0005, 0x080c,
+	0xa7c0, 0x0cb8, 0x2b78, 0x00f6, 0x080c, 0x2fda, 0x080c, 0xc227,
+	0x00fe, 0x00c6, 0x080c, 0x9ddc, 0x2f00, 0x6012, 0x6017, 0x0000,
+	0x6023, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x2001, 0x0007,
+	0x080c, 0x618f, 0x080c, 0x61bb, 0x080c, 0x8439, 0x080c, 0x8973,
+	0x00ce, 0x0804, 0xa56d, 0x2100, 0x91b2, 0x0053, 0x1a0c, 0x0db4,
+	0x91b2, 0x0040, 0x1a04, 0xa623, 0x0002, 0xa611, 0xa611, 0xa607,
+	0xa611, 0xa611, 0xa611, 0xa605, 0xa605, 0xa605, 0xa605, 0xa605,
+	0xa605, 0xa605, 0xa605, 0xa605, 0xa605, 0xa605, 0xa605, 0xa605,
+	0xa605, 0xa605, 0xa605, 0xa605, 0xa605, 0xa605, 0xa605, 0xa605,
+	0xa605, 0xa605, 0xa605, 0xa605, 0xa611, 0xa605, 0xa611, 0xa611,
+	0xa605, 0xa605, 0xa605, 0xa605, 0xa605, 0xa607, 0xa605, 0xa605,
+	0xa605, 0xa605, 0xa605, 0xa605, 0xa605, 0xa605, 0xa605, 0xa611,
+	0xa611, 0xa605, 0xa605, 0xa605, 0xa605, 0xa605, 0xa605, 0xa605,
+	0xa605, 0xa605, 0xa611, 0xa605, 0xa605, 0x080c, 0x0db4, 0x0066,
+	0x00b6, 0x6610, 0x2658, 0xb8bc, 0xc08c, 0xb8be, 0x00be, 0x006e,
+	0x0000, 0x6003, 0x0001, 0x6106, 0x9186, 0x0032, 0x0118, 0x080c,
+	0x8439, 0x0010, 0x080c, 0x83f1, 0x0126, 0x2091, 0x8000, 0x080c,
+	0x8973, 0x012e, 0x0005, 0x2600, 0x0002, 0xa637, 0xa637, 0xa637,
+	0xa611, 0xa611, 0xa637, 0xa637, 0xa637, 0xa637, 0xa611, 0xa637,
+	0xa611, 0xa637, 0xa611, 0xa637, 0xa637, 0xa637, 0xa637, 0x080c,
+	0x0db4, 0x6004, 0x90b2, 0x0053, 0x1a0c, 0x0db4, 0x91b6, 0x0013,
+	0x0904, 0xa6fb, 0x91b6, 0x0027, 0x1904, 0xa6b6, 0x080c, 0x886e,
+	0x6004, 0x080c, 0xbd0c, 0x01b0, 0x080c, 0xbd1d, 0x01a8, 0x908e,
+	0x0021, 0x0904, 0xa6b3, 0x908e, 0x0022, 0x1130, 0x080c, 0xa261,
+	0x0904, 0xa6af, 0x0804, 0xa6b0, 0x908e, 0x003d, 0x0904, 0xa6b3,
+	0x0804, 0xa6a9, 0x080c, 0x3003, 0x2001, 0x0007, 0x080c, 0x618f,
+	0x6010, 0x00b6, 0x2058, 0xb9a0, 0x00be, 0x080c, 0xa7c0, 0x9186,
+	0x007e, 0x1148, 0x2001, 0x1836, 0x2014, 0xc285, 0x080c, 0x6fb2,
+	0x1108, 0xc2ad, 0x2202, 0x0036, 0x0026, 0x2019, 0x0028, 0x2110,
+	0x080c, 0xd7e2, 0x002e, 0x003e, 0x0016, 0x0026, 0x0036, 0x2110,
+	0x2019, 0x0028, 0x080c, 0x8571, 0x0076, 0x903e, 0x080c, 0x8469,
+	0x6010, 0x00b6, 0x905d, 0x0100, 0x00be, 0x2c08, 0x080c, 0xd29b,
+	0x007e, 0x003e, 0x002e, 0x001e, 0x080c, 0xc227, 0x0016, 0x080c,
+	0xbf84, 0x080c, 0x9e32, 0x001e, 0x080c, 0x30d5, 0x080c, 0x8973,
+	0x0030, 0x080c, 0xbf84, 0x080c, 0x9e32, 0x080c, 0x8973, 0x0005,
+	0x080c, 0xa7c0, 0x0cb0, 0x080c, 0xa7fc, 0x0c98, 0x9186, 0x0014,
+	0x1db0, 0x080c, 0x886e, 0x6004, 0x908e, 0x0022, 0x1118, 0x080c,
+	0xa261, 0x0d68, 0x080c, 0x2fda, 0x080c, 0xc227, 0x080c, 0xbd0c,
+	0x1190, 0x080c, 0x3003, 0x6010, 0x00b6, 0x2058, 0xb9a0, 0x00be,
+	0x080c, 0xa7c0, 0x9186, 0x007e, 0x1128, 0x2001, 0x1836, 0x200c,
+	0xc185, 0x2102, 0x0870, 0x080c, 0xbd1d, 0x1118, 0x080c, 0xa7c0,
+	0x0840, 0x6004, 0x908e, 0x0032, 0x1160, 0x00e6, 0x00f6, 0x2071,
+	0x1894, 0x2079, 0x0000, 0x080c, 0x3369, 0x00fe, 0x00ee, 0x0804,
+	0xa6a9, 0x6004, 0x908e, 0x0021, 0x0d48, 0x908e, 0x0022, 0x090c,
+	0xa7c0, 0x0804, 0xa6a9, 0x90b2, 0x0040, 0x1a04, 0xa7a9, 0x2008,
+	0x0002, 0xa743, 0xa744, 0xa747, 0xa74a, 0xa74d, 0xa750, 0xa741,
+	0xa741, 0xa741, 0xa741, 0xa741, 0xa741, 0xa741, 0xa741, 0xa741,
+	0xa741, 0xa741, 0xa741, 0xa741, 0xa741, 0xa741, 0xa741, 0xa741,
+	0xa741, 0xa741, 0xa741, 0xa741, 0xa741, 0xa741, 0xa741, 0xa753,
+	0xa75e, 0xa741, 0xa760, 0xa75e, 0xa741, 0xa741, 0xa741, 0xa741,
+	0xa741, 0xa75e, 0xa75e, 0xa741, 0xa741, 0xa741, 0xa741, 0xa741,
+	0xa741, 0xa741, 0xa741, 0xa790, 0xa75e, 0xa741, 0xa75a, 0xa741,
+	0xa741, 0xa741, 0xa75b, 0xa741, 0xa741, 0xa741, 0xa75e, 0xa787,
+	0xa741, 0x080c, 0x0db4, 0x00d0, 0x2001, 0x000b, 0x0410, 0x2001,
+	0x0003, 0x00f8, 0x2001, 0x0005, 0x00e0, 0x2001, 0x0001, 0x00c8,
+	0x2001, 0x0009, 0x00b0, 0x080c, 0x886e, 0x6003, 0x0005, 0x080c,
+	0x8973, 0x0070, 0x0018, 0x0010, 0x080c, 0x618f, 0x0804, 0xa7a1,
+	0x080c, 0x886e, 0x080c, 0xc22a, 0x6003, 0x0004, 0x080c, 0x8973,
+	0x0005, 0x080c, 0x618f, 0x080c, 0x886e, 0x6003, 0x0002, 0x0036,
+	0x2019, 0x185e, 0x2304, 0x9084, 0xff00, 0x1120, 0x2001, 0x1957,
+	0x201c, 0x0040, 0x8007, 0x909a, 0x0004, 0x0ec0, 0x8003, 0x801b,
+	0x831b, 0x9318, 0x631a, 0x003e, 0x080c, 0x8973, 0x0c08, 0x080c,
+	0x886e, 0x080c, 0xbf84, 0x080c, 0x9e32, 0x080c, 0x8973, 0x08c0,
+	0x00e6, 0x00f6, 0x2071, 0x1894, 0x2079, 0x0000, 0x080c, 0x3369,
+	0x00fe, 0x00ee, 0x080c, 0x886e, 0x080c, 0x9e32, 0x080c, 0x8973,
+	0x0838, 0x080c, 0x886e, 0x6003, 0x0002, 0x080c, 0xc22a, 0x0804,
+	0x8973, 0x2600, 0x2008, 0x0002, 0xa7be, 0xa7be, 0xa7be, 0xa7a1,
+	0xa7a1, 0xa7be, 0xa7be, 0xa7be, 0xa7be, 0xa7a1, 0xa7be, 0xa7a1,
+	0xa7be, 0xa7a1, 0xa7be, 0xa7be, 0xa7be, 0xa7be, 0x080c, 0x0db4,
+	0x00e6, 0x0096, 0x0026, 0x0016, 0x080c, 0xbb17, 0x0568, 0x6014,
+	0x2048, 0xa864, 0x9086, 0x0139, 0x11a8, 0xa894, 0x9086, 0x0056,
+	0x1148, 0x080c, 0x512f, 0x0130, 0x2001, 0x0000, 0x900e, 0x2011,
+	0x4000, 0x0028, 0x2001, 0x0030, 0x900e, 0x2011, 0x4005, 0x080c,
+	0xc0f1, 0x0090, 0xa868, 0xd0fc, 0x0178, 0xa807, 0x0000, 0x0016,
+	0x6004, 0x908e, 0x0021, 0x0168, 0x908e, 0x003d, 0x0150, 0x001e,
+	0xa867, 0x0103, 0xa833, 0x0100, 0x001e, 0x002e, 0x009e, 0x00ee,
+	0x0005, 0x001e, 0x0009, 0x0cc0, 0x0096, 0x6014, 0x2048, 0xa800,
+	0x2048, 0xa867, 0x0103, 0xa823, 0x8001, 0x009e, 0x0005, 0x00b6,
+	0x6610, 0x2658, 0xb804, 0x9084, 0x00ff, 0x90b2, 0x000c, 0x1a0c,
+	0x0db4, 0x6604, 0x96b6, 0x004d, 0x1120, 0x080c, 0xc010, 0x0804,
+	0xa884, 0x6604, 0x96b6, 0x0043, 0x1120, 0x080c, 0xc059, 0x0804,
+	0xa884, 0x6604, 0x96b6, 0x004b, 0x1120, 0x080c, 0xc085, 0x0804,
+	0xa884, 0x6604, 0x96b6, 0x0033, 0x1120, 0x080c, 0xbfa6, 0x0804,
+	0xa884, 0x6604, 0x96b6, 0x0028, 0x1120, 0x080c, 0xbd56, 0x0804,
+	0xa884, 0x6604, 0x96b6, 0x0029, 0x1120, 0x080c, 0xbd97, 0x0804,
+	0xa884, 0x6604, 0x96b6, 0x001f, 0x1118, 0x080c, 0xa20a, 0x04e0,
+	0x6604, 0x96b6, 0x0000, 0x1118, 0x080c, 0xa531, 0x04a8, 0x6604,
+	0x96b6, 0x0022, 0x1118, 0x080c, 0xa242, 0x0470, 0x6604, 0x96b6,
+	0x0035, 0x1118, 0x080c, 0xa352, 0x0438, 0x6604, 0x96b6, 0x0039,
+	0x1118, 0x080c, 0xa4c6, 0x0400, 0x6604, 0x96b6, 0x003d, 0x1118,
+	0x080c, 0xa27a, 0x00c8, 0x6604, 0x96b6, 0x0044, 0x1118, 0x080c,
+	0xa2b6, 0x0090, 0x6604, 0x96b6, 0x0049, 0x1118, 0x080c, 0xa2e1,
+	0x0058, 0x91b6, 0x0015, 0x1110, 0x0063, 0x0030, 0x91b6, 0x0016,
+	0x1128, 0x00be, 0x0804, 0xab42, 0x00be, 0x0005, 0x080c, 0x9ec7,
+	0x0cd8, 0xa8a1, 0xa8a4, 0xa8a1, 0xa8e8, 0xa8a1, 0xaa76, 0xab4f,
+	0xa8a1, 0xa8a1, 0xab1c, 0xa8a1, 0xab30, 0x0096, 0x080c, 0x150f,
+	0x6014, 0x2048, 0xa800, 0x2048, 0xa867, 0x0103, 0x009e, 0x0804,
+	0x9e32, 0xa001, 0xa001, 0x0005, 0x00e6, 0x2071, 0x1800, 0x708c,
+	0x9086, 0x0074, 0x1540, 0x080c, 0xd26c, 0x11b0, 0x6010, 0x00b6,
+	0x2058, 0x7030, 0xd08c, 0x0128, 0xb800, 0xd0bc, 0x0110, 0xc0c5,
+	0xb802, 0x00e9, 0x00be, 0x2001, 0x0006, 0x080c, 0x618f, 0x080c,
+	0x3003, 0x080c, 0x9e32, 0x0088, 0x2001, 0x000a, 0x080c, 0x618f,
+	0x080c, 0x3003, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x8439,
+	0x080c, 0x8973, 0x0010, 0x080c, 0xaa61, 0x00ee, 0x0005, 0x00d6,
+	0xb800, 0xd084, 0x0158, 0x9006, 0x080c, 0x617b, 0x2069, 0x1853,
+	0x6804, 0x0020, 0x2001, 0x0006, 0x080c, 0x61bb, 0x00de, 0x0005,
+	0x00b6, 0x0096, 0x00d6, 0x2011, 0x1823, 0x2204, 0x9086, 0x0074,
+	0x1904, 0xaa3a, 0x6010, 0x2058, 0xbaa0, 0x9286, 0x007e, 0x1120,
+	0x080c, 0xac93, 0x0804, 0xa99f, 0x00d6, 0x080c, 0x6fb2, 0x0198,
+	0x0026, 0x2011, 0x0010, 0x080c, 0x6586, 0x002e, 0x05c8, 0x080c,
+	0x539a, 0x1540, 0x6014, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103,
+	0xa833, 0xdead, 0x00f8, 0x0026, 0x2011, 0x8008, 0x080c, 0x6586,
+	0x002e, 0x0530, 0x6014, 0x2048, 0xa864, 0x9084, 0x00ff, 0x9086,
+	0x0039, 0x1140, 0x2001, 0x0030, 0x900e, 0x2011, 0x4009, 0x080c,
+	0xc0f1, 0x0040, 0x6014, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103,
+	0xa833, 0xdead, 0x6010, 0x2058, 0xb9a0, 0x0016, 0x080c, 0x3003,
+	0x080c, 0x9e32, 0x001e, 0x080c, 0x30d5, 0x00de, 0x0804, 0xaa3b,
+	0x00de, 0x080c, 0xac88, 0x6010, 0x2058, 0xbaa0, 0x9286, 0x0080,
+	0x1510, 0x6014, 0x9005, 0x01a8, 0x2048, 0xa864, 0x9084, 0x00ff,
+	0x9086, 0x0039, 0x1140, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000,
+	0x080c, 0xc0f1, 0x0030, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833,
+	0x0200, 0x2001, 0x0006, 0x080c, 0x618f, 0x080c, 0x3003, 0x080c,
+	0x9e32, 0x0804, 0xaa3b, 0x080c, 0xaa49, 0x6014, 0x9005, 0x0190,
+	0x2048, 0xa868, 0xd0f4, 0x01e8, 0xa864, 0x9084, 0x00ff, 0x9086,
+	0x0039, 0x1d08, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c,
+	0xc0f1, 0x08f8, 0x080c, 0xaa3f, 0x0160, 0x9006, 0x080c, 0x617b,
+	0x2001, 0x0004, 0x080c, 0x61bb, 0x2001, 0x0007, 0x080c, 0x618f,
+	0x08a0, 0x2001, 0x0004, 0x080c, 0x618f, 0x6003, 0x0001, 0x6007,
+	0x0003, 0x080c, 0x8439, 0x080c, 0x8973, 0x0804, 0xaa3b, 0xb85c,
+	0xd0e4, 0x01d0, 0x080c, 0xbf26, 0x080c, 0x6fb2, 0x0118, 0xd0dc,
+	0x1904, 0xa961, 0x2011, 0x1836, 0x2204, 0xc0ad, 0x2012, 0x2001,
+	0x0002, 0x00f6, 0x2079, 0x0100, 0x78e3, 0x0000, 0x080c, 0x26d7,
+	0x78e2, 0x00fe, 0x0804, 0xa961, 0x080c, 0xbf63, 0x2011, 0x1836,
+	0x2204, 0xc0a5, 0x2012, 0x0006, 0x080c, 0xd3c5, 0x000e, 0x1904,
+	0xa961, 0xc0b5, 0x2012, 0x2001, 0x0006, 0x080c, 0x618f, 0x9006,
+	0x080c, 0x617b, 0x00c6, 0x2001, 0x180f, 0x2004, 0xd09c, 0x0520,
+	0x00f6, 0x2079, 0x0100, 0x00e6, 0x2071, 0x1800, 0x700c, 0x9084,
+	0x00ff, 0x78e6, 0x707a, 0x7010, 0x78ea, 0x707e, 0x908c, 0x00ff,
+	0x00ee, 0x780c, 0xc0b5, 0x780e, 0x00fe, 0x080c, 0x26ac, 0x00f6,
+	0x2100, 0x900e, 0x080c, 0x2663, 0x795a, 0x00fe, 0x9186, 0x0081,
+	0x01d8, 0x2009, 0x0081, 0x00c8, 0x2009, 0x00ef, 0x00f6, 0x2079,
+	0x0100, 0x79ea, 0x7932, 0x7936, 0x780c, 0xc0b5, 0x780e, 0x00fe,
+	0x080c, 0x26ac, 0x00f6, 0x2079, 0x1800, 0x797e, 0x2100, 0x900e,
+	0x080c, 0x2663, 0x795a, 0x00fe, 0x8108, 0x080c, 0x61de, 0x2b00,
+	0x00ce, 0x1904, 0xa961, 0x6012, 0x2009, 0x180f, 0x210c, 0xd19c,
+	0x0150, 0x2009, 0x027c, 0x210c, 0x918c, 0x00ff, 0xb912, 0x2009,
+	0x027d, 0x210c, 0xb916, 0x2001, 0x0002, 0x080c, 0x618f, 0x6023,
+	0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x8439, 0x080c,
+	0x8973, 0x0008, 0x0431, 0x00de, 0x009e, 0x00be, 0x0005, 0x2001,
+	0x1810, 0x2004, 0xd0a4, 0x0120, 0x2001, 0x1854, 0x2004, 0xd0ac,
+	0x0005, 0x00e6, 0x080c, 0xd83b, 0x0190, 0x2071, 0x0260, 0x7108,
+	0x720c, 0x918c, 0x00ff, 0x1118, 0x9284, 0xff00, 0x0140, 0x6010,
+	0x2058, 0xb8a0, 0x9084, 0xff80, 0x1110, 0xb912, 0xba16, 0x00ee,
+	0x0005, 0x2030, 0x2001, 0x0007, 0x080c, 0x618f, 0x080c, 0x539a,
+	0x1120, 0x2001, 0x0007, 0x080c, 0x61bb, 0x080c, 0x3003, 0x6020,
+	0x9086, 0x000a, 0x1108, 0x0005, 0x0804, 0x9e32, 0x00b6, 0x00e6,
+	0x0026, 0x0016, 0x2071, 0x1800, 0x708c, 0x9086, 0x0014, 0x1904,
+	0xab13, 0x00d6, 0x080c, 0x6fb2, 0x0198, 0x0026, 0x2011, 0x0010,
+	0x080c, 0x6586, 0x002e, 0x05c8, 0x080c, 0x539a, 0x1540, 0x6014,
+	0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, 0xdead, 0x00f8,
+	0x0026, 0x2011, 0x8008, 0x080c, 0x6586, 0x002e, 0x0530, 0x6014,
+	0x2048, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001,
+	0x0030, 0x900e, 0x2011, 0x4009, 0x080c, 0xc0f1, 0x0040, 0x6014,
+	0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, 0xdead, 0x6010,
+	0x2058, 0xb9a0, 0x0016, 0x080c, 0x3003, 0x080c, 0x9e32, 0x001e,
+	0x080c, 0x30d5, 0x00de, 0x0804, 0xab17, 0x00de, 0x080c, 0x539a,
+	0x1170, 0x6014, 0x9005, 0x1158, 0x0036, 0x0046, 0x6010, 0x2058,
+	0xbba0, 0x2021, 0x0006, 0x080c, 0x4a76, 0x004e, 0x003e, 0x00d6,
+	0x6010, 0x2058, 0x080c, 0x62d9, 0x080c, 0xa8d7, 0x00de, 0x080c,
+	0xad59, 0x1588, 0x6010, 0x2058, 0xb890, 0x9005, 0x0560, 0x2001,
+	0x0006, 0x080c, 0x618f, 0x0096, 0x6014, 0x904d, 0x01d0, 0xa864,
+	0x9084, 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, 0x0000, 0x900e,
+	0x2011, 0x4000, 0x080c, 0xc0f1, 0x0060, 0xa864, 0x9084, 0x00ff,
+	0x9086, 0x0029, 0x0130, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833,
+	0x0200, 0x009e, 0x080c, 0x3003, 0x6020, 0x9086, 0x000a, 0x0138,
+	0x080c, 0x9e32, 0x0020, 0x080c, 0xa7c0, 0x080c, 0xaa61, 0x001e,
+	0x002e, 0x00ee, 0x00be, 0x0005, 0x2011, 0x1823, 0x2204, 0x9086,
+	0x0014, 0x1160, 0x2001, 0x0002, 0x080c, 0x618f, 0x6003, 0x0001,
+	0x6007, 0x0001, 0x080c, 0x8439, 0x0804, 0x8973, 0x0804, 0xaa61,
+	0x2030, 0x2011, 0x1823, 0x2204, 0x9086, 0x0004, 0x1148, 0x96b6,
+	0x000b, 0x1120, 0x2001, 0x0007, 0x080c, 0x618f, 0x0804, 0x9e32,
+	0x0804, 0xaa61, 0x0002, 0xa8a1, 0xab5a, 0xa8a1, 0xab99, 0xa8a1,
+	0xac44, 0xab4f, 0xa8a1, 0xa8a1, 0xac57, 0xa8a1, 0xac67, 0x6604,
+	0x9686, 0x0003, 0x0904, 0xaa76, 0x96b6, 0x001e, 0x1110, 0x080c,
+	0x9e32, 0x0005, 0x00b6, 0x00d6, 0x00c6, 0x080c, 0xac77, 0x11a0,
+	0x9006, 0x080c, 0x617b, 0x080c, 0x2fda, 0x080c, 0xc227, 0x2001,
+	0x0002, 0x080c, 0x618f, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c,
+	0x8439, 0x080c, 0x8973, 0x0408, 0x2009, 0x026e, 0x2104, 0x9086,
+	0x0009, 0x1160, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005,
+	0x0170, 0x8001, 0xb842, 0x601b, 0x000a, 0x0078, 0x2009, 0x026f,
+	0x2104, 0x9084, 0xff00, 0x9086, 0x1900, 0x1108, 0x08a0, 0x080c,
+	0x2fda, 0x080c, 0xc227, 0x080c, 0xaa61, 0x00ce, 0x00de, 0x00be,
+	0x0005, 0x0096, 0x00b6, 0x0026, 0x9016, 0x080c, 0xac85, 0x00d6,
+	0x2069, 0x194d, 0x2d04, 0x9005, 0x0168, 0x6010, 0x2058, 0xb8a0,
+	0x9086, 0x007e, 0x1138, 0x2069, 0x181f, 0x2d04, 0x8000, 0x206a,
+	0x00de, 0x0010, 0x00de, 0x0088, 0x9006, 0x080c, 0x617b, 0x2001,
+	0x0002, 0x080c, 0x618f, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c,
+	0x8439, 0x080c, 0x8973, 0x0804, 0xac14, 0x080c, 0xbb17, 0x01b0,
+	0x6014, 0x2048, 0xa864, 0x2010, 0x9086, 0x0139, 0x1138, 0x6007,
+	0x0016, 0x2001, 0x0002, 0x080c, 0xc14b, 0x00b0, 0x6014, 0x2048,
+	0xa864, 0xd0fc, 0x0118, 0x2001, 0x0001, 0x0ca8, 0x2001, 0x180e,
+	0x2004, 0xd0dc, 0x0148, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff,
+	0x9005, 0x1110, 0x9006, 0x0c38, 0x080c, 0xa7c0, 0x2009, 0x026e,
+	0x2134, 0x96b4, 0x00ff, 0x9686, 0x0005, 0x0510, 0x9686, 0x000b,
+	0x01c8, 0x2009, 0x026f, 0x2104, 0x9084, 0xff00, 0x1118, 0x9686,
+	0x0009, 0x01b0, 0x9086, 0x1900, 0x1168, 0x9686, 0x0009, 0x0180,
+	0x2001, 0x0004, 0x080c, 0x618f, 0x2001, 0x0028, 0x601a, 0x6007,
+	0x0052, 0x0010, 0x080c, 0xaa61, 0x002e, 0x00be, 0x009e, 0x0005,
+	0x9286, 0x0139, 0x0160, 0x6014, 0x2048, 0x080c, 0xbb17, 0x0140,
+	0xa864, 0x9086, 0x0139, 0x0118, 0xa868, 0xd0fc, 0x0108, 0x0c50,
+	0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0138, 0x8001,
+	0xb842, 0x601b, 0x000a, 0x6007, 0x0016, 0x08f0, 0xb8a0, 0x9086,
+	0x007e, 0x1138, 0x00e6, 0x2071, 0x1800, 0x080c, 0x5c64, 0x00ee,
+	0x0010, 0x080c, 0x2fda, 0x0870, 0x080c, 0xac85, 0x1160, 0x2001,
+	0x0004, 0x080c, 0x618f, 0x6003, 0x0001, 0x6007, 0x0003, 0x080c,
+	0x8439, 0x0804, 0x8973, 0x080c, 0xa7c0, 0x0804, 0xaa61, 0x0469,
+	0x1160, 0x2001, 0x0008, 0x080c, 0x618f, 0x6003, 0x0001, 0x6007,
+	0x0005, 0x080c, 0x8439, 0x0804, 0x8973, 0x0804, 0xaa61, 0x00e9,
+	0x1160, 0x2001, 0x000a, 0x080c, 0x618f, 0x6003, 0x0001, 0x6007,
+	0x0001, 0x080c, 0x8439, 0x0804, 0x8973, 0x0804, 0xaa61, 0x2009,
+	0x026e, 0x2104, 0x9086, 0x0003, 0x1138, 0x2009, 0x026f, 0x2104,
+	0x9084, 0xff00, 0x9086, 0x2a00, 0x0005, 0x9085, 0x0001, 0x0005,
+	0x00b6, 0x00c6, 0x0016, 0x6110, 0x2158, 0x080c, 0x624d, 0x001e,
+	0x00ce, 0x00be, 0x0005, 0x00b6, 0x00f6, 0x00e6, 0x00d6, 0x0036,
+	0x0016, 0x6010, 0x2058, 0x2009, 0x1836, 0x2104, 0x9085, 0x0003,
+	0x200a, 0x080c, 0xad2b, 0x0560, 0x2009, 0x1836, 0x2104, 0xc0cd,
+	0x200a, 0x080c, 0x655e, 0x0158, 0x9006, 0x2020, 0x2009, 0x002a,
+	0x080c, 0xd52a, 0x2001, 0x180c, 0x200c, 0xc195, 0x2102, 0x2019,
+	0x002a, 0x2009, 0x0001, 0x080c, 0x2fa5, 0x00e6, 0x2071, 0x1800,
+	0x080c, 0x2dbb, 0x00ee, 0x00c6, 0x0156, 0x20a9, 0x0781, 0x2009,
+	0x007f, 0x080c, 0x30d5, 0x8108, 0x1f04, 0xacc9, 0x015e, 0x00ce,
+	0x080c, 0xac88, 0x2071, 0x0260, 0x2079, 0x0200, 0x7817, 0x0001,
+	0x2001, 0x1836, 0x200c, 0xc1c5, 0x7018, 0xd0fc, 0x0110, 0xd0dc,
+	0x0118, 0x7038, 0xd0dc, 0x1108, 0xc1c4, 0x7817, 0x0000, 0x2001,
+	0x1836, 0x2102, 0x2079, 0x0100, 0x2e04, 0x9084, 0x00ff, 0x2069,
+	0x181e, 0x206a, 0x78e6, 0x0006, 0x8e70, 0x2e04, 0x2069, 0x181f,
+	0x206a, 0x78ea, 0x7832, 0x7836, 0x2010, 0x9084, 0xff00, 0x001e,
+	0x9105, 0x2009, 0x182b, 0x200a, 0x2200, 0x9084, 0x00ff, 0x2008,
+	0x080c, 0x26ac, 0x080c, 0x6fb2, 0x0170, 0x2071, 0x0260, 0x2069,
+	0x1953, 0x7048, 0x206a, 0x704c, 0x6806, 0x7050, 0x680a, 0x7054,
+	0x680e, 0x080c, 0xbf26, 0x0040, 0x2001, 0x0006, 0x080c, 0x618f,
+	0x080c, 0x3003, 0x080c, 0x9e32, 0x001e, 0x003e, 0x00de, 0x00ee,
+	0x00fe, 0x00be, 0x0005, 0x0096, 0x0026, 0x0036, 0x00e6, 0x0156,
+	0x2019, 0x182b, 0x231c, 0x83ff, 0x01f0, 0x2071, 0x0260, 0x7200,
+	0x9294, 0x00ff, 0x7004, 0x9084, 0xff00, 0x9205, 0x9306, 0x1198,
+	0x2011, 0x0276, 0x20a9, 0x0004, 0x2b48, 0x2019, 0x000a, 0x080c,
+	0xae0d, 0x1148, 0x2011, 0x027a, 0x20a9, 0x0004, 0x2019, 0x0006,
+	0x080c, 0xae0d, 0x1100, 0x015e, 0x00ee, 0x003e, 0x002e, 0x009e,
+	0x0005, 0x00e6, 0x2071, 0x0260, 0x7034, 0x9086, 0x0014, 0x11a8,
+	0x7038, 0x9086, 0x0800, 0x1188, 0x703c, 0xd0ec, 0x0160, 0x9084,
+	0x0f00, 0x9086, 0x0100, 0x1138, 0x7054, 0xd0a4, 0x1110, 0xd0ac,
+	0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x00ee, 0x0005, 0x00e6,
+	0x0096, 0x00c6, 0x0076, 0x0056, 0x0046, 0x0026, 0x0006, 0x0126,
+	0x2091, 0x8000, 0x2029, 0x19c1, 0x252c, 0x2021, 0x19c7, 0x2424,
+	0x2061, 0x1cd0, 0x2071, 0x1800, 0x7250, 0x7070, 0x9202, 0x1a04,
+	0xade5, 0x080c, 0xd55b, 0x0904, 0xadde, 0x6720, 0x9786, 0x0007,
+	0x0904, 0xadde, 0x2500, 0x9c06, 0x0904, 0xadde, 0x2400, 0x9c06,
+	0x05e8, 0x3e08, 0x9186, 0x0002, 0x1148, 0x6010, 0x9005, 0x0130,
+	0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1580, 0x00c6, 0x6000,
+	0x9086, 0x0004, 0x1110, 0x080c, 0x190d, 0x9786, 0x000a, 0x0148,
+	0x080c, 0xbd1d, 0x1130, 0x00ce, 0x080c, 0xa7c0, 0x080c, 0x9e62,
+	0x00e8, 0x6014, 0x2048, 0x080c, 0xbb17, 0x01a8, 0x9786, 0x0003,
+	0x1530, 0xa867, 0x0103, 0xa87c, 0xd0cc, 0x0130, 0x0096, 0xa878,
+	0x2048, 0x080c, 0x0f9d, 0x009e, 0xab7a, 0xa877, 0x0000, 0x080c,
+	0x687f, 0x080c, 0xbd00, 0x080c, 0x9e62, 0x00ce, 0x9ce0, 0x0018,
+	0x7064, 0x9c02, 0x1210, 0x0804, 0xad8c, 0x012e, 0x000e, 0x002e,
+	0x004e, 0x005e, 0x007e, 0x00ce, 0x009e, 0x00ee, 0x0005, 0x9786,
+	0x0006, 0x1118, 0x080c, 0xd4d5, 0x0c30, 0x9786, 0x000a, 0x0998,
+	0x0880, 0x220c, 0x2304, 0x9106, 0x1130, 0x8210, 0x8318, 0x1f04,
+	0xadf9, 0x9006, 0x0005, 0x2304, 0x9102, 0x0218, 0x2001, 0x0001,
+	0x0008, 0x9006, 0x918d, 0x0001, 0x0005, 0x0136, 0x01c6, 0x0016,
+	0x8906, 0x8006, 0x8007, 0x908c, 0x003f, 0x21e0, 0x9084, 0xffc0,
+	0x9300, 0x2098, 0x3518, 0x20a9, 0x0001, 0x220c, 0x4002, 0x910e,
+	0x1140, 0x8210, 0x8319, 0x1dc8, 0x9006, 0x001e, 0x01ce, 0x013e,
+	0x0005, 0x220c, 0x9102, 0x0218, 0x2001, 0x0001, 0x0010, 0x2001,
+	0x0000, 0x918d, 0x0001, 0x001e, 0x01ce, 0x013e, 0x0005, 0x6004,
+	0x908a, 0x0053, 0x1a0c, 0x0db4, 0x080c, 0xbd0c, 0x0120, 0x080c,
+	0xbd1d, 0x0168, 0x0028, 0x080c, 0x3003, 0x080c, 0xbd1d, 0x0138,
+	0x080c, 0x886e, 0x080c, 0x9e32, 0x080c, 0x8973, 0x0005, 0x080c,
+	0xa7c0, 0x0cb0, 0x9182, 0x0054, 0x1220, 0x9182, 0x0040, 0x0208,
+	0x000a, 0x0005, 0xae6e, 0xae6e, 0xae6e, 0xae6e, 0xae6e, 0xae6e,
+	0xae6e, 0xae6e, 0xae6e, 0xae6e, 0xae6e, 0xae70, 0xae70, 0xae70,
+	0xae70, 0xae6e, 0xae6e, 0xae6e, 0xae70, 0xae6e, 0x080c, 0x0db4,
+	0x600b, 0xffff, 0x6003, 0x0001, 0x6106, 0x080c, 0x83f1, 0x0126,
+	0x2091, 0x8000, 0x080c, 0x8973, 0x012e, 0x0005, 0x9186, 0x0013,
+	0x1128, 0x6004, 0x9082, 0x0040, 0x0804, 0xaf25, 0x9186, 0x0027,
+	0x1520, 0x080c, 0x886e, 0x080c, 0x2fda, 0x080c, 0xc227, 0x0096,
+	0x6114, 0x2148, 0x080c, 0xbb17, 0x0198, 0x080c, 0xbd1d, 0x1118,
+	0x080c, 0xa7c0, 0x0068, 0xa867, 0x0103, 0xa87b, 0x0029, 0xa877,
+	0x0000, 0xa97c, 0xc1c5, 0xa97e, 0x080c, 0x688c, 0x080c, 0xbd00,
+	0x009e, 0x080c, 0x9e32, 0x0804, 0x8973, 0x9186, 0x0014, 0x1120,
+	0x6004, 0x9082, 0x0040, 0x04a0, 0x9186, 0x0046, 0x0150, 0x9186,
+	0x0045, 0x0138, 0x9186, 0x0053, 0x0120, 0x9186, 0x0048, 0x190c,
+	0x0db4, 0x2001, 0x0109, 0x2004, 0xd084, 0x0508, 0x0126, 0x2091,
+	0x2800, 0x0006, 0x0016, 0x0026, 0x0036, 0x00f6, 0x00e6, 0x00c6,
+	0x2079, 0x19b8, 0x2071, 0x1800, 0x2061, 0x0100, 0x080c, 0x82dd,
+	0x00ce, 0x00ee, 0x00fe, 0x003e, 0x002e, 0x001e, 0x000e, 0x012e,
+	0xa001, 0x6000, 0x9086, 0x0002, 0x1110, 0x0804, 0xaf63, 0x0005,
+	0x0002, 0xaeff, 0xaefd, 0xaefd, 0xaefd, 0xaefd, 0xaefd, 0xaefd,
+	0xaefd, 0xaefd, 0xaefd, 0xaefd, 0xaf1a, 0xaf1a, 0xaf1a, 0xaf1a,
+	0xaefd, 0xaf1a, 0xaefd, 0xaf1a, 0xaefd, 0x080c, 0x0db4, 0x080c,
+	0x886e, 0x0096, 0x6114, 0x2148, 0x080c, 0xbb17, 0x0168, 0xa867,
+	0x0103, 0xa87b, 0x0006, 0xa877, 0x0000, 0xa880, 0xc0ec, 0xa882,
+	0x080c, 0x688c, 0x080c, 0xbd00, 0x009e, 0x080c, 0x9e32, 0x080c,
+	0x8973, 0x0005, 0x080c, 0x886e, 0x080c, 0xbd1d, 0x090c, 0xa7c0,
+	0x080c, 0x9e32, 0x080c, 0x8973, 0x0005, 0x0002, 0xaf3c, 0xaf3a,
+	0xaf3a, 0xaf3a, 0xaf3a, 0xaf3a, 0xaf3a, 0xaf3a, 0xaf3a, 0xaf3a,
+	0xaf3a, 0xaf53, 0xaf53, 0xaf53, 0xaf53, 0xaf3a, 0xaf5d, 0xaf3a,
+	0xaf53, 0xaf3a, 0x080c, 0x0db4, 0x0096, 0x080c, 0x886e, 0x6014,
+	0x2048, 0x2001, 0x1959, 0x2004, 0x6042, 0xa97c, 0xd1ac, 0x0140,
+	0x6003, 0x0004, 0xa87c, 0x9085, 0x0400, 0xa87e, 0x009e, 0x0005,
+	0x6003, 0x0002, 0x0cb8, 0x080c, 0x886e, 0x080c, 0xc22a, 0x080c,
+	0xc22f, 0x6003, 0x000f, 0x0804, 0x8973, 0x080c, 0x886e, 0x080c,
+	0x9e32, 0x0804, 0x8973, 0x9182, 0x0054, 0x1220, 0x9182, 0x0040,
+	0x0208, 0x000a, 0x0005, 0xaf7f, 0xaf7f, 0xaf7f, 0xaf7f, 0xaf7f,
+	0xaf81, 0xb05e, 0xaf7f, 0xb092, 0xaf7f, 0xaf7f, 0xaf7f, 0xaf7f,
+	0xaf7f, 0xaf7f, 0xaf7f, 0xaf7f, 0xaf7f, 0xaf7f, 0xb092, 0x080c,
+	0x0db4, 0x00b6, 0x0096, 0x6114, 0x2148, 0x7644, 0x96b4, 0x0fff,
+	0x86ff, 0x1528, 0x6010, 0x2058, 0xb800, 0xd0bc, 0x1904, 0xb04d,
+	0xa87b, 0x0000, 0xa867, 0x0103, 0xae76, 0xa87c, 0xd0ac, 0x0128,
+	0xa834, 0xa938, 0x9115, 0x190c, 0xb227, 0x080c, 0x66a7, 0x6210,
+	0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, 0x7044, 0xd0e4,
+	0x1904, 0xb031, 0x080c, 0x9e32, 0x009e, 0x00be, 0x0005, 0x968c,
+	0x0c00, 0x0150, 0x6010, 0x2058, 0xb800, 0xd0bc, 0x1904, 0xb035,
+	0x7348, 0xab92, 0x734c, 0xab8e, 0x968c, 0x00ff, 0x9186, 0x0002,
+	0x0508, 0x9186, 0x0028, 0x1118, 0xa87b, 0x001c, 0x00e8, 0xd6dc,
+	0x01a0, 0xa87b, 0x0015, 0xa87c, 0xd0ac, 0x0170, 0xa938, 0xaa34,
+	0x2100, 0x9205, 0x0148, 0x7048, 0x9106, 0x1118, 0x704c, 0x9206,
+	0x0118, 0xa992, 0xaa8e, 0xc6dc, 0x0038, 0xd6d4, 0x0118, 0xa87b,
+	0x0007, 0x0010, 0xa87b, 0x0000, 0xa867, 0x0103, 0xae76, 0x901e,
+	0xd6c4, 0x01d8, 0x9686, 0x0100, 0x1130, 0x7064, 0x9005, 0x1118,
+	0xc6c4, 0x0804, 0xaf88, 0x735c, 0xab86, 0x83ff, 0x0170, 0x938a,
+	0x0009, 0x0210, 0x2019, 0x0008, 0x0036, 0x2308, 0x2019, 0x0018,
+	0x2011, 0x0025, 0x080c, 0xb712, 0x003e, 0xd6cc, 0x0904, 0xaf9d,
+	0x7154, 0xa98a, 0x81ff, 0x0904, 0xaf9d, 0x9192, 0x0021, 0x1278,
+	0x8304, 0x9098, 0x0018, 0x2011, 0x0029, 0x080c, 0xb712, 0x2011,
+	0x0205, 0x2013, 0x0000, 0x080c, 0xc1b7, 0x0804, 0xaf9d, 0xa868,
+	0xd0fc, 0x0120, 0x2009, 0x0020, 0xa98a, 0x0c50, 0x00a6, 0x2950,
+	0x080c, 0xb6b1, 0x00ae, 0x080c, 0xc1b7, 0x080c, 0xb702, 0x0804,
+	0xaf9f, 0x080c, 0xbe10, 0x0804, 0xafac, 0xa87c, 0xd0ac, 0x0904,
+	0xafb8, 0xa880, 0xd0bc, 0x1904, 0xafb8, 0x7348, 0xa838, 0x9306,
+	0x11c8, 0x734c, 0xa834, 0x931e, 0x0904, 0xafb8, 0xd6d4, 0x0190,
+	0xab38, 0x9305, 0x0904, 0xafb8, 0x0068, 0xa87c, 0xd0ac, 0x0904,
+	0xaf90, 0xa838, 0xa934, 0x9105, 0x0904, 0xaf90, 0xa880, 0xd0bc,
+	0x1904, 0xaf90, 0x080c, 0xbe4a, 0x0804, 0xafac, 0x0096, 0x00f6,
+	0x6003, 0x0003, 0x6007, 0x0043, 0x2079, 0x026c, 0x7c04, 0x7b00,
+	0x7e0c, 0x7d08, 0x6014, 0x2048, 0xa87c, 0xd0ac, 0x0140, 0x6003,
+	0x0002, 0x00fe, 0x009e, 0x0005, 0x2130, 0x2228, 0x0058, 0x2400,
+	0xa9ac, 0x910a, 0x2300, 0xaab0, 0x9213, 0x2600, 0x9102, 0x2500,
+	0x9203, 0x0e90, 0xac36, 0xab3a, 0xae46, 0xad4a, 0x00fe, 0x6043,
+	0x0000, 0x2c10, 0x080c, 0x1a5c, 0x080c, 0x8456, 0x080c, 0x8a4e,
+	0x009e, 0x0005, 0x0005, 0x9182, 0x0054, 0x1220, 0x9182, 0x0040,
+	0x0208, 0x000a, 0x0005, 0xb0af, 0xb0af, 0xb0af, 0xb0af, 0xb0af,
+	0xb0b1, 0xb147, 0xb0af, 0xb0af, 0xb15e, 0xb1ea, 0xb0af, 0xb0af,
+	0xb0af, 0xb0af, 0xb1ff, 0xb0af, 0xb0af, 0xb0af, 0xb0af, 0x080c,
+	0x0db4, 0x0076, 0x00a6, 0x00e6, 0x0096, 0x2071, 0x0260, 0x6114,
+	0x2150, 0x7644, 0xb676, 0x96b4, 0x0fff, 0xb77c, 0xc7e5, 0xb77e,
+	0x6210, 0x00b6, 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e,
+	0x00be, 0x86ff, 0x0904, 0xb142, 0x9694, 0xff00, 0x9284, 0x0c00,
+	0x0120, 0x7048, 0xb092, 0x704c, 0xb08e, 0x9284, 0x0300, 0x0904,
+	0xb142, 0x080c, 0x0feb, 0x090c, 0x0db4, 0x2900, 0xb07a, 0xb77c,
+	0xc7cd, 0xb77e, 0xa867, 0x0103, 0xb068, 0xa86a, 0xb06c, 0xa86e,
+	0xb070, 0xa872, 0xae76, 0x968c, 0x0c00, 0x0120, 0x7348, 0xab92,
 	0x734c, 0xab8e, 0x968c, 0x00ff, 0x9186, 0x0002, 0x0180, 0x9186,
 	0x0028, 0x1118, 0xa87b, 0x001c, 0x0060, 0xd6dc, 0x0118, 0xa87b,
 	0x0015, 0x0038, 0xd6d4, 0x0118, 0xa87b, 0x0007, 0x0010, 0xa87b,
 	0x0000, 0xaf7e, 0xb080, 0xa882, 0xb084, 0xa886, 0x901e, 0xd6c4,
 	0x0190, 0x735c, 0xab86, 0x83ff, 0x0170, 0x938a, 0x0009, 0x0210,
 	0x2019, 0x0008, 0x0036, 0x2308, 0x2019, 0x0018, 0x2011, 0x0025,
-	0x080c, 0xb6f9, 0x003e, 0xd6cc, 0x01e8, 0x7154, 0xa98a, 0x81ff,
+	0x080c, 0xb712, 0x003e, 0xd6cc, 0x01e8, 0x7154, 0xa98a, 0x81ff,
 	0x01c8, 0x9192, 0x0021, 0x1260, 0x8304, 0x9098, 0x0018, 0x2011,
-	0x0029, 0x080c, 0xb6f9, 0x2011, 0x0205, 0x2013, 0x0000, 0x0050,
+	0x0029, 0x080c, 0xb712, 0x2011, 0x0205, 0x2013, 0x0000, 0x0050,
 	0xb068, 0xd0fc, 0x0120, 0x2009, 0x0020, 0xa98a, 0x0c68, 0x2950,
-	0x080c, 0xb698, 0x080c, 0x18eb, 0x009e, 0x00ee, 0x00ae, 0x007e,
-	0x0005, 0x2001, 0x1959, 0x2004, 0x6042, 0x0096, 0x6114, 0x2148,
-	0xa83c, 0xa940, 0x9105, 0x1118, 0xa87c, 0xc0dc, 0xa87e, 0x6003,
-	0x0002, 0xa97c, 0xd1e4, 0x0904, 0xb415, 0x6043, 0x0000, 0x6010,
-	0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1500, 0xd1cc, 0x0904,
-	0xb3e4, 0xa978, 0xa868, 0xd0fc, 0x0904, 0xb3a5, 0x0016, 0xa87c,
-	0x0006, 0xa880, 0x0006, 0x00a6, 0x2150, 0xb174, 0x9184, 0x00ff,
-	0x90b6, 0x0002, 0x0904, 0xb373, 0x9086, 0x0028, 0x1904, 0xb35f,
-	0xa87b, 0x001c, 0xb07b, 0x001c, 0x0804, 0xb37b, 0x6024, 0xd0f4,
-	0x11d0, 0xa838, 0xaa34, 0x9205, 0x09c8, 0xa838, 0xaa90, 0x9206,
-	0x1120, 0xa88c, 0xaa34, 0x9206, 0x0988, 0x6024, 0xd0d4, 0x1148,
-	0xa9ac, 0xa834, 0x9102, 0x603a, 0xa9b0, 0xa838, 0x9103, 0x603e,
-	0x6024, 0xc0f5, 0x6026, 0x6010, 0x00b6, 0x2058, 0xb83c, 0x8000,
-	0xb83e, 0x00be, 0x9006, 0xa876, 0xa892, 0xa88e, 0xa87c, 0xc0e4,
-	0xa87e, 0xd0cc, 0x0140, 0xc0cc, 0xa87e, 0x0096, 0xa878, 0x2048,
-	0x080c, 0x0f9d, 0x009e, 0x080c, 0xbe31, 0x0804, 0xb415, 0xd1dc,
-	0x0158, 0xa87b, 0x0015, 0xb07b, 0x0015, 0x080c, 0xc0c1, 0x0118,
+	0x080c, 0xb6b1, 0x009e, 0x00ee, 0x00ae, 0x007e, 0x0005, 0x00f6,
+	0x00a6, 0x6003, 0x0003, 0x2079, 0x026c, 0x7c04, 0x7b00, 0x7e0c,
+	0x7d08, 0x6014, 0x2050, 0xb436, 0xb33a, 0xb646, 0xb54a, 0x00ae,
+	0x00fe, 0x2c10, 0x080c, 0x1a5c, 0x0804, 0x9379, 0x6003, 0x0002,
+	0x6004, 0x9086, 0x0040, 0x11c8, 0x0096, 0x6014, 0x2048, 0xa87c,
+	0xd0ac, 0x0160, 0x601c, 0xd084, 0x1130, 0x00f6, 0x2c00, 0x2078,
+	0x080c, 0x1648, 0x00fe, 0x6003, 0x0004, 0x0010, 0x6003, 0x0002,
+	0x009e, 0x080c, 0x886e, 0x080c, 0x8973, 0x0096, 0x2001, 0x1959,
+	0x2004, 0x6042, 0x080c, 0x8923, 0x080c, 0x8a4e, 0x6114, 0x2148,
+	0xa97c, 0xd1e4, 0x0904, 0xb1e5, 0xd1cc, 0x05a8, 0xa978, 0xa868,
+	0xd0fc, 0x0538, 0x0016, 0xa87c, 0x0006, 0xa880, 0x0006, 0xa860,
+	0x20e8, 0xa85c, 0x9080, 0x0019, 0x20a0, 0x810e, 0x810e, 0x810f,
+	0x9184, 0x003f, 0x20e0, 0x9184, 0xffc0, 0x9080, 0x0019, 0x2098,
+	0x0156, 0x20a9, 0x0020, 0x4003, 0x015e, 0x000e, 0xa882, 0x000e,
+	0xa87e, 0x001e, 0xa874, 0x0006, 0x2148, 0x080c, 0x0f9d, 0x001e,
+	0x0440, 0x0016, 0x080c, 0x0f9d, 0x009e, 0xa974, 0x0016, 0x080c,
+	0xb702, 0x001e, 0x00f0, 0xa867, 0x0103, 0xa974, 0x9184, 0x00ff,
+	0x90b6, 0x0002, 0x0180, 0x9086, 0x0028, 0x1118, 0xa87b, 0x001c,
+	0x0060, 0xd1dc, 0x0118, 0xa87b, 0x0015, 0x0038, 0xd1d4, 0x0118,
+	0xa87b, 0x0007, 0x0010, 0xa87b, 0x0000, 0x0016, 0x080c, 0x66a7,
+	0x001e, 0xd1e4, 0x1120, 0x080c, 0x9e32, 0x009e, 0x0005, 0x080c,
+	0xbe10, 0x0cd8, 0x6004, 0x9086, 0x0040, 0x1120, 0x080c, 0x886e,
+	0x080c, 0x8973, 0x2019, 0x0001, 0x080c, 0x96d8, 0x6003, 0x0002,
+	0x080c, 0xc22f, 0x080c, 0x8923, 0x080c, 0x8a4e, 0x0005, 0x6004,
+	0x9086, 0x0040, 0x1120, 0x080c, 0x886e, 0x080c, 0x8973, 0x2019,
+	0x0001, 0x080c, 0x96d8, 0x080c, 0x8923, 0x080c, 0x2fda, 0x080c,
+	0xc227, 0x0096, 0x6114, 0x2148, 0x080c, 0xbb17, 0x0150, 0xa867,
+	0x0103, 0xa87b, 0x0029, 0xa877, 0x0000, 0x080c, 0x688c, 0x080c,
+	0xbd00, 0x009e, 0x080c, 0x9e32, 0x080c, 0x8a4e, 0x0005, 0xa87b,
+	0x0015, 0xd1fc, 0x0180, 0xa87b, 0x0007, 0x8002, 0x8000, 0x810a,
+	0x9189, 0x0000, 0x0006, 0x0016, 0x2009, 0x1a4a, 0x2104, 0x8000,
+	0x200a, 0x001e, 0x000e, 0xa992, 0xa88e, 0x0005, 0x9182, 0x0054,
+	0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xb25a, 0xb25a,
+	0xb25a, 0xb25a, 0xb25a, 0xb25c, 0xb25a, 0xb25a, 0xb302, 0xb25a,
+	0xb25a, 0xb25a, 0xb25a, 0xb25a, 0xb25a, 0xb25a, 0xb25a, 0xb25a,
+	0xb25a, 0xb433, 0x080c, 0x0db4, 0x0076, 0x00a6, 0x00e6, 0x0096,
+	0x2071, 0x0260, 0x6114, 0x2150, 0x7644, 0xb676, 0x96b4, 0x0fff,
+	0xb77c, 0xc7e5, 0xb77e, 0x6210, 0x00b6, 0x2258, 0xba3c, 0x82ff,
+	0x0110, 0x8211, 0xba3e, 0x00be, 0x86ff, 0x0904, 0xb2fb, 0x9694,
+	0xff00, 0x9284, 0x0c00, 0x0120, 0x7048, 0xb092, 0x704c, 0xb08e,
+	0x9284, 0x0300, 0x0904, 0xb2fb, 0x9686, 0x0100, 0x1130, 0x7064,
+	0x9005, 0x1118, 0xc6c4, 0xb676, 0x0c38, 0x080c, 0x0feb, 0x090c,
+	0x0db4, 0x2900, 0xb07a, 0xb77c, 0x97bd, 0x0200, 0xb77e, 0xa867,
+	0x0103, 0xb068, 0xa86a, 0xb06c, 0xa86e, 0xb070, 0xa872, 0x7044,
+	0x9084, 0xf000, 0x9635, 0xae76, 0x968c, 0x0c00, 0x0120, 0x7348,
+	0xab92, 0x734c, 0xab8e, 0x968c, 0x00ff, 0x9186, 0x0002, 0x0180,
+	0x9186, 0x0028, 0x1118, 0xa87b, 0x001c, 0x0060, 0xd6dc, 0x0118,
+	0xa87b, 0x0015, 0x0038, 0xd6d4, 0x0118, 0xa87b, 0x0007, 0x0010,
+	0xa87b, 0x0000, 0xaf7e, 0xb080, 0xa882, 0xb084, 0xa886, 0x901e,
+	0xd6c4, 0x0190, 0x735c, 0xab86, 0x83ff, 0x0170, 0x938a, 0x0009,
+	0x0210, 0x2019, 0x0008, 0x0036, 0x2308, 0x2019, 0x0018, 0x2011,
+	0x0025, 0x080c, 0xb712, 0x003e, 0xd6cc, 0x01e8, 0x7154, 0xa98a,
+	0x81ff, 0x01c8, 0x9192, 0x0021, 0x1260, 0x8304, 0x9098, 0x0018,
+	0x2011, 0x0029, 0x080c, 0xb712, 0x2011, 0x0205, 0x2013, 0x0000,
+	0x0050, 0xb068, 0xd0fc, 0x0120, 0x2009, 0x0020, 0xa98a, 0x0c68,
+	0x2950, 0x080c, 0xb6b1, 0x080c, 0x18eb, 0x009e, 0x00ee, 0x00ae,
+	0x007e, 0x0005, 0x2001, 0x1959, 0x2004, 0x6042, 0x0096, 0x6114,
+	0x2148, 0xa83c, 0xa940, 0x9105, 0x1118, 0xa87c, 0xc0dc, 0xa87e,
+	0x6003, 0x0002, 0xa97c, 0xd1e4, 0x0904, 0xb42e, 0x6043, 0x0000,
+	0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1500, 0xd1cc,
+	0x0904, 0xb3fd, 0xa978, 0xa868, 0xd0fc, 0x0904, 0xb3be, 0x0016,
+	0xa87c, 0x0006, 0xa880, 0x0006, 0x00a6, 0x2150, 0xb174, 0x9184,
+	0x00ff, 0x90b6, 0x0002, 0x0904, 0xb38c, 0x9086, 0x0028, 0x1904,
+	0xb378, 0xa87b, 0x001c, 0xb07b, 0x001c, 0x0804, 0xb394, 0x6024,
+	0xd0f4, 0x11d0, 0xa838, 0xaa34, 0x9205, 0x09c8, 0xa838, 0xaa90,
+	0x9206, 0x1120, 0xa88c, 0xaa34, 0x9206, 0x0988, 0x6024, 0xd0d4,
+	0x1148, 0xa9ac, 0xa834, 0x9102, 0x603a, 0xa9b0, 0xa838, 0x9103,
+	0x603e, 0x6024, 0xc0f5, 0x6026, 0x6010, 0x00b6, 0x2058, 0xb83c,
+	0x8000, 0xb83e, 0x00be, 0x9006, 0xa876, 0xa892, 0xa88e, 0xa87c,
+	0xc0e4, 0xa87e, 0xd0cc, 0x0140, 0xc0cc, 0xa87e, 0x0096, 0xa878,
+	0x2048, 0x080c, 0x0f9d, 0x009e, 0x080c, 0xbe4a, 0x0804, 0xb42e,
+	0xd1dc, 0x0158, 0xa87b, 0x0015, 0xb07b, 0x0015, 0x080c, 0xc0da,
+	0x0118, 0xb174, 0xc1dc, 0xb176, 0x0078, 0xd1d4, 0x0128, 0xa87b,
+	0x0007, 0xb07b, 0x0007, 0x0040, 0xa87c, 0xd0ac, 0x0128, 0xa834,
+	0xa938, 0x9115, 0x190c, 0xb227, 0xa87c, 0xb07e, 0xa890, 0xb092,
+	0xa88c, 0xb08e, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0019, 0x20a0,
+	0x20a9, 0x0020, 0x8a06, 0x8006, 0x8007, 0x9094, 0x003f, 0x22e0,
+	0x9084, 0xffc0, 0x9080, 0x0019, 0x2098, 0x4003, 0x00ae, 0x000e,
+	0xa882, 0x000e, 0xa87e, 0x080c, 0xc1b7, 0x001e, 0xa874, 0x0006,
+	0x2148, 0x080c, 0x0f9d, 0x001e, 0x0804, 0xb42a, 0x0016, 0x00a6,
+	0x2150, 0xb174, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01e0, 0x9086,
+	0x0028, 0x1128, 0xa87b, 0x001c, 0xb07b, 0x001c, 0x00e0, 0xd1dc,
+	0x0158, 0xa87b, 0x0015, 0xb07b, 0x0015, 0x080c, 0xc0da, 0x0118,
 	0xb174, 0xc1dc, 0xb176, 0x0078, 0xd1d4, 0x0128, 0xa87b, 0x0007,
 	0xb07b, 0x0007, 0x0040, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938,
-	0x9115, 0x190c, 0xb20e, 0xa87c, 0xb07e, 0xa890, 0xb092, 0xa88c,
-	0xb08e, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0019, 0x20a0, 0x20a9,
-	0x0020, 0x8a06, 0x8006, 0x8007, 0x9094, 0x003f, 0x22e0, 0x9084,
-	0xffc0, 0x9080, 0x0019, 0x2098, 0x4003, 0x00ae, 0x000e, 0xa882,
-	0x000e, 0xa87e, 0x080c, 0xc19e, 0x001e, 0xa874, 0x0006, 0x2148,
-	0x080c, 0x0f9d, 0x001e, 0x0804, 0xb411, 0x0016, 0x00a6, 0x2150,
-	0xb174, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01e0, 0x9086, 0x0028,
-	0x1128, 0xa87b, 0x001c, 0xb07b, 0x001c, 0x00e0, 0xd1dc, 0x0158,
-	0xa87b, 0x0015, 0xb07b, 0x0015, 0x080c, 0xc0c1, 0x0118, 0xb174,
-	0xc1dc, 0xb176, 0x0078, 0xd1d4, 0x0128, 0xa87b, 0x0007, 0xb07b,
-	0x0007, 0x0040, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115,
-	0x190c, 0xb20e, 0xa890, 0xb092, 0xa88c, 0xb08e, 0xa87c, 0xb07e,
-	0x00ae, 0x080c, 0x0f9d, 0x009e, 0x080c, 0xc19e, 0xa974, 0x0016,
-	0x080c, 0xb6e9, 0x001e, 0x0468, 0xa867, 0x0103, 0xa974, 0x9184,
-	0x00ff, 0x90b6, 0x0002, 0x01b0, 0x9086, 0x0028, 0x1118, 0xa87b,
-	0x001c, 0x00d0, 0xd1dc, 0x0148, 0xa87b, 0x0015, 0x080c, 0xc0c1,
-	0x0118, 0xa974, 0xc1dc, 0xa976, 0x0078, 0xd1d4, 0x0118, 0xa87b,
-	0x0007, 0x0050, 0xa87b, 0x0000, 0xa87c, 0xd0ac, 0x0128, 0xa834,
-	0xa938, 0x9115, 0x190c, 0xb20e, 0xa974, 0x0016, 0x080c, 0x66a0,
-	0x001e, 0xd1e4, 0x1120, 0x080c, 0x9e19, 0x009e, 0x0005, 0x080c,
-	0xbdf7, 0x0cd8, 0x6114, 0x0096, 0x2148, 0xa97c, 0xd1e4, 0x190c,
-	0x18f9, 0x009e, 0x0005, 0x080c, 0x8846, 0x0010, 0x080c, 0x88fb,
-	0x080c, 0xbafe, 0x01f0, 0x0096, 0x6114, 0x2148, 0x080c, 0xbd04,
-	0x1118, 0x080c, 0xa7a7, 0x00a0, 0xa867, 0x0103, 0x2009, 0x180c,
-	0x210c, 0xd18c, 0x11b8, 0xd184, 0x1190, 0x6108, 0xa97a, 0x918e,
-	0x0029, 0x1110, 0x080c, 0xd7b3, 0xa877, 0x0000, 0x080c, 0x6885,
-	0x009e, 0x080c, 0x9e19, 0x080c, 0x894b, 0x0804, 0x8a26, 0xa87b,
-	0x0004, 0x0c90, 0xa87b, 0x0004, 0x0c78, 0x9182, 0x0054, 0x1220,
-	0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xb471, 0xb471, 0xb471,
-	0xb471, 0xb471, 0xb473, 0xb471, 0xb471, 0xb471, 0xb471, 0xb471,
-	0xb471, 0xb471, 0xb471, 0xb471, 0xb471, 0xb471, 0xb471, 0xb471,
-	0xb471, 0x080c, 0x0db4, 0x080c, 0x5387, 0x01f8, 0x6014, 0x7144,
-	0x918c, 0x0fff, 0x9016, 0xd1c4, 0x0118, 0x7264, 0x9294, 0x00ff,
-	0x0096, 0x904d, 0x0188, 0xa87b, 0x0000, 0xa864, 0x9086, 0x0139,
-	0x0128, 0xa867, 0x0103, 0xa976, 0xaa96, 0x0030, 0xa897, 0x4000,
-	0xa99a, 0xaa9e, 0x080c, 0x6885, 0x009e, 0x0804, 0x9e19, 0x9182,
-	0x0085, 0x0002, 0xb4a9, 0xb4a7, 0xb4a7, 0xb4b5, 0xb4a7, 0xb4a7,
-	0xb4a7, 0xb4a7, 0xb4a7, 0xb4a7, 0xb4a7, 0xb4a7, 0xb4a7, 0x080c,
-	0x0db4, 0x6003, 0x0001, 0x6106, 0x080c, 0x83c9, 0x0126, 0x2091,
-	0x8000, 0x080c, 0x894b, 0x012e, 0x0005, 0x0026, 0x0056, 0x00d6,
-	0x00e6, 0x2071, 0x0260, 0x7224, 0x6216, 0x7220, 0x080c, 0xbaec,
-	0x01a0, 0x2268, 0x6800, 0x9086, 0x0000, 0x0178, 0x6010, 0x6d10,
-	0x952e, 0x1158, 0x00c6, 0x2d60, 0x080c, 0xb724, 0x00ce, 0x0128,
-	0x6803, 0x0002, 0x6007, 0x0086, 0x0010, 0x6007, 0x0087, 0x6003,
-	0x0001, 0x080c, 0x83c9, 0x080c, 0x894b, 0x9280, 0x0004, 0x00b6,
-	0x2058, 0xb800, 0x00be, 0xd0bc, 0x0140, 0x6824, 0xd0ec, 0x0128,
-	0x00c6, 0x2260, 0x080c, 0xbe31, 0x00ce, 0x00ee, 0x00de, 0x005e,
-	0x002e, 0x0005, 0x9186, 0x0013, 0x1160, 0x6004, 0x908a, 0x0085,
-	0x0a0c, 0x0db4, 0x908a, 0x0092, 0x1a0c, 0x0db4, 0x9082, 0x0085,
-	0x00e2, 0x9186, 0x0027, 0x0120, 0x9186, 0x0014, 0x190c, 0x0db4,
-	0x080c, 0x8846, 0x0096, 0x6014, 0x2048, 0x080c, 0xbafe, 0x0140,
-	0xa867, 0x0103, 0xa877, 0x0000, 0xa87b, 0x0029, 0x080c, 0x6885,
-	0x009e, 0x080c, 0x9e49, 0x0804, 0x894b, 0xb52a, 0xb52c, 0xb52c,
-	0xb52a, 0xb52a, 0xb52a, 0xb52a, 0xb52a, 0xb52a, 0xb52a, 0xb52a,
-	0xb52a, 0xb52a, 0x080c, 0x0db4, 0x080c, 0x8846, 0x080c, 0x9e49,
-	0x080c, 0x894b, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004, 0x9082,
-	0x0085, 0x2008, 0x04b8, 0x9186, 0x0027, 0x11f8, 0x080c, 0x8846,
-	0x080c, 0x2fd7, 0x080c, 0xc20e, 0x0096, 0x6014, 0x2048, 0x080c,
-	0xbafe, 0x0150, 0xa867, 0x0103, 0xa877, 0x0000, 0xa87b, 0x0029,
-	0x080c, 0x6885, 0x080c, 0xbce7, 0x009e, 0x080c, 0x9e19, 0x080c,
-	0x894b, 0x0005, 0x080c, 0x9eae, 0x0ce0, 0x9186, 0x0014, 0x1dd0,
-	0x080c, 0x8846, 0x0096, 0x6014, 0x2048, 0x080c, 0xbafe, 0x0d60,
-	0xa867, 0x0103, 0xa877, 0x0000, 0xa87b, 0x0006, 0xa880, 0xc0ec,
-	0xa882, 0x08f0, 0x0002, 0xb582, 0xb580, 0xb580, 0xb580, 0xb580,
-	0xb580, 0xb59a, 0xb580, 0xb580, 0xb580, 0xb580, 0xb580, 0xb580,
-	0x080c, 0x0db4, 0x080c, 0x8846, 0x6034, 0x908c, 0xff00, 0x810f,
-	0x9186, 0x0039, 0x0118, 0x9186, 0x0035, 0x1118, 0x2001, 0x1957,
-	0x0010, 0x2001, 0x1958, 0x2004, 0x601a, 0x6003, 0x000c, 0x080c,
-	0x894b, 0x0005, 0x080c, 0x8846, 0x6034, 0x908c, 0xff00, 0x810f,
-	0x9186, 0x0039, 0x0118, 0x9186, 0x0035, 0x1118, 0x2001, 0x1957,
-	0x0010, 0x2001, 0x1958, 0x2004, 0x601a, 0x6003, 0x000e, 0x080c,
-	0x894b, 0x0005, 0x9182, 0x0092, 0x1220, 0x9182, 0x0085, 0x0208,
-	0x0012, 0x0804, 0x9eae, 0xb5c8, 0xb5c8, 0xb5c8, 0xb5c8, 0xb5ca,
-	0xb617, 0xb5c8, 0xb5c8, 0xb5c8, 0xb5c8, 0xb5c8, 0xb5c8, 0xb5c8,
-	0x080c, 0x0db4, 0x0096, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be,
-	0xd0bc, 0x0168, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039,
-	0x0118, 0x9186, 0x0035, 0x1118, 0x009e, 0x0804, 0xb62b, 0x080c,
-	0xbafe, 0x1118, 0x080c, 0xbce7, 0x0068, 0x6014, 0x2048, 0xa87c,
-	0xd0e4, 0x1110, 0x080c, 0xbce7, 0xa867, 0x0103, 0x080c, 0xc1d9,
-	0x080c, 0x6885, 0x00d6, 0x2c68, 0x080c, 0x9dc3, 0x01d0, 0x6003,
-	0x0001, 0x6007, 0x001e, 0x600b, 0xffff, 0x2009, 0x026e, 0x210c,
-	0x613a, 0x2009, 0x026f, 0x210c, 0x613e, 0x6910, 0x6112, 0x080c,
-	0xbf73, 0x6954, 0x6156, 0x6023, 0x0001, 0x080c, 0x83c9, 0x080c,
-	0x894b, 0x2d60, 0x00de, 0x080c, 0x9e19, 0x009e, 0x0005, 0x6010,
-	0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x05a0, 0x6034, 0x908c,
-	0xff00, 0x810f, 0x9186, 0x0035, 0x0130, 0x9186, 0x001e, 0x0118,
-	0x9186, 0x0039, 0x1538, 0x00d6, 0x2c68, 0x080c, 0xc171, 0x11f0,
-	0x080c, 0x9dc3, 0x01d8, 0x6106, 0x6003, 0x0001, 0x6023, 0x0001,
-	0x6910, 0x6112, 0x692c, 0x612e, 0x6930, 0x6132, 0x6934, 0x918c,
-	0x00ff, 0x6136, 0x6938, 0x613a, 0x693c, 0x613e, 0x6954, 0x6156,
-	0x080c, 0xbf73, 0x080c, 0x83c9, 0x080c, 0x894b, 0x2d60, 0x00de,
-	0x0804, 0x9e19, 0x0096, 0x6014, 0x2048, 0x080c, 0xbafe, 0x01c8,
-	0xa867, 0x0103, 0xa880, 0xd0b4, 0x0128, 0xc0ec, 0xa882, 0xa87b,
-	0x0006, 0x0048, 0xd0bc, 0x0118, 0xa87b, 0x0002, 0x0020, 0xa87b,
-	0x0005, 0x080c, 0xbdf3, 0xa877, 0x0000, 0x080c, 0x6885, 0x080c,
-	0xbce7, 0x009e, 0x0804, 0x9e19, 0x0016, 0x0096, 0x6014, 0x2048,
-	0x080c, 0xbafe, 0x0140, 0xa867, 0x0103, 0xa87b, 0x0028, 0xa877,
-	0x0000, 0x080c, 0x6885, 0x009e, 0x001e, 0x9186, 0x0013, 0x0148,
-	0x9186, 0x0014, 0x0130, 0x9186, 0x0027, 0x0118, 0x080c, 0x9eae,
-	0x0030, 0x080c, 0x8846, 0x080c, 0x9e49, 0x080c, 0x894b, 0x0005,
-	0x0056, 0x0066, 0x0096, 0x00a6, 0x2029, 0x0001, 0x9182, 0x0101,
-	0x1208, 0x0010, 0x2009, 0x0100, 0x2130, 0x8304, 0x9098, 0x0018,
-	0x2009, 0x0020, 0x2011, 0x0029, 0x080c, 0xb6f9, 0x96b2, 0x0020,
-	0xb004, 0x904d, 0x0110, 0x080c, 0x0f9d, 0x080c, 0x0feb, 0x0520,
-	0x8528, 0xa867, 0x0110, 0xa86b, 0x0000, 0x2920, 0xb406, 0x968a,
-	0x003d, 0x1228, 0x2608, 0x2011, 0x001b, 0x0499, 0x00a8, 0x96b2,
-	0x003c, 0x2009, 0x003c, 0x2950, 0x2011, 0x001b, 0x0451, 0x0c28,
-	0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad, 0x0003,
-	0xb566, 0x95ac, 0x0000, 0x0048, 0x2001, 0x0205, 0x2003, 0x0000,
-	0x00ae, 0x852f, 0x95ad, 0x0003, 0xb566, 0x009e, 0x006e, 0x005e,
-	0x0005, 0x00a6, 0x89ff, 0x0158, 0xa804, 0x9055, 0x0130, 0xa807,
-	0x0000, 0x080c, 0x6885, 0x2a48, 0x0cb8, 0x080c, 0x6885, 0x00ae,
-	0x0005, 0x00f6, 0x2079, 0x0200, 0x7814, 0x9085, 0x0080, 0x7816,
-	0xd184, 0x0108, 0x8108, 0x810c, 0x20a9, 0x0001, 0xa860, 0x20e8,
-	0xa85c, 0x9200, 0x20a0, 0x20e1, 0x0000, 0x2300, 0x9e00, 0x2098,
-	0x4003, 0x8318, 0x9386, 0x0020, 0x1148, 0x2018, 0x2300, 0x9e00,
-	0x2098, 0x7814, 0x8000, 0x9085, 0x0080, 0x7816, 0x8109, 0x1d80,
-	0x7817, 0x0000, 0x00fe, 0x0005, 0x0066, 0x0126, 0x2091, 0x8000,
-	0x2031, 0x0001, 0x6020, 0x9084, 0x000f, 0x0083, 0x012e, 0x006e,
-	0x0005, 0x0126, 0x2091, 0x8000, 0x0066, 0x2031, 0x0000, 0x6020,
-	0x9084, 0x000f, 0x001b, 0x006e, 0x012e, 0x0005, 0xb75f, 0xb75f,
-	0xb75a, 0xb781, 0xb74d, 0xb75a, 0xb781, 0xb75a, 0xb74d, 0xb74d,
-	0xb75a, 0xb75a, 0xb75a, 0xb74d, 0xb74d, 0x080c, 0x0db4, 0x0036,
-	0x2019, 0x0010, 0x080c, 0xd0c7, 0x6023, 0x0006, 0x6003, 0x0007,
-	0x003e, 0x0005, 0x9006, 0x0005, 0x9085, 0x0001, 0x0005, 0x0096,
-	0x86ff, 0x11d8, 0x6014, 0x2048, 0x080c, 0xbafe, 0x01c0, 0xa864,
-	0x9086, 0x0139, 0x1128, 0xa87b, 0x0005, 0xa883, 0x0000, 0x0028,
-	0x900e, 0x2001, 0x0005, 0x080c, 0x6abf, 0x080c, 0xbdf3, 0x080c,
-	0x6878, 0x080c, 0x9e49, 0x9085, 0x0001, 0x009e, 0x0005, 0x9006,
-	0x0ce0, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0db4, 0x0002, 0xb797,
-	0xb7c5, 0xb799, 0xb7e6, 0xb7c0, 0xb797, 0xb75a, 0xb75f, 0xb75f,
-	0xb75a, 0xb75a, 0xb75a, 0xb75a, 0xb75a, 0xb75a, 0xb75a, 0x080c,
-	0x0db4, 0x86ff, 0x1510, 0x6020, 0x9086, 0x0006, 0x01f0, 0x0096,
-	0x6014, 0x2048, 0x080c, 0xbafe, 0x0158, 0xa87c, 0xd0cc, 0x0130,
-	0x0096, 0xa878, 0x2048, 0x080c, 0x0f9d, 0x009e, 0x080c, 0xbdf3,
-	0x009e, 0x080c, 0xc1b3, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023,
-	0x0002, 0x080c, 0x83c9, 0x080c, 0x894b, 0x9085, 0x0001, 0x0005,
-	0x0066, 0x080c, 0x190d, 0x006e, 0x08a0, 0x00e6, 0x2071, 0x19b8,
-	0x7024, 0x9c06, 0x1120, 0x080c, 0x9649, 0x00ee, 0x0850, 0x6020,
-	0x9084, 0x000f, 0x9086, 0x0006, 0x1150, 0x0086, 0x0096, 0x2049,
-	0x0001, 0x2c40, 0x080c, 0x97a1, 0x009e, 0x008e, 0x0010, 0x080c,
-	0x9546, 0x00ee, 0x1904, 0xb799, 0x0804, 0xb75a, 0x0036, 0x00e6,
-	0x2071, 0x19b8, 0x703c, 0x9c06, 0x1138, 0x901e, 0x080c, 0x96bf,
-	0x00ee, 0x003e, 0x0804, 0xb799, 0x080c, 0x98d1, 0x00ee, 0x003e,
-	0x1904, 0xb799, 0x0804, 0xb75a, 0x00c6, 0x6020, 0x9084, 0x000f,
-	0x0013, 0x00ce, 0x0005, 0xb819, 0xb8e2, 0xba49, 0xb823, 0x9e49,
-	0xb819, 0xd0b9, 0xc21b, 0xb8e2, 0xb812, 0xbac8, 0xb812, 0xb812,
-	0xb812, 0xb812, 0x080c, 0x0db4, 0x080c, 0xbd04, 0x1110, 0x080c,
-	0xa7a7, 0x0005, 0x080c, 0x8846, 0x080c, 0x894b, 0x0804, 0x9e19,
-	0x601b, 0x0001, 0x0005, 0x080c, 0xbafe, 0x0130, 0x6014, 0x0096,
-	0x2048, 0x2c00, 0xa896, 0x009e, 0x6000, 0x908a, 0x0016, 0x1a0c,
-	0x0db4, 0x0002, 0xb842, 0xb844, 0xb868, 0xb87c, 0xb8a0, 0xb842,
-	0xb819, 0xb819, 0xb819, 0xb87c, 0xb87c, 0xb842, 0xb842, 0xb842,
-	0xb842, 0xb886, 0x080c, 0x0db4, 0x00e6, 0x6014, 0x0096, 0x2048,
-	0xa880, 0xc0b5, 0xa882, 0x009e, 0x2071, 0x19b8, 0x7024, 0x9c06,
-	0x01a0, 0x080c, 0x9546, 0x080c, 0xc1b3, 0x6007, 0x0085, 0x6003,
-	0x000b, 0x6023, 0x0002, 0x2001, 0x1958, 0x2004, 0x601a, 0x080c,
-	0x83c9, 0x080c, 0x894b, 0x00ee, 0x0005, 0x601b, 0x0001, 0x0cd8,
-	0x0096, 0x6014, 0x2048, 0xa880, 0xc0b5, 0xa882, 0x009e, 0x080c,
-	0xc1b3, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x080c,
-	0x83c9, 0x080c, 0x894b, 0x0005, 0x0096, 0x601b, 0x0001, 0x6014,
-	0x2048, 0xa880, 0xc0b5, 0xa882, 0x009e, 0x0005, 0x080c, 0x5387,
-	0x01a8, 0x6014, 0x0096, 0x904d, 0x0180, 0xa864, 0xa867, 0x0103,
-	0xa87b, 0x0006, 0x9086, 0x0139, 0x1140, 0xa867, 0x0139, 0xa897,
-	0x4005, 0xa89b, 0x0004, 0x080c, 0x6885, 0x009e, 0x0804, 0x9e19,
-	0x6014, 0x0096, 0x904d, 0x05c8, 0xa97c, 0xd1e4, 0x05b0, 0x2001,
-	0x180f, 0x2004, 0xd0c4, 0x0110, 0x009e, 0x0005, 0xa884, 0x009e,
-	0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0x2001, 0x0030, 0x2c08,
-	0x080c, 0x1518, 0x2001, 0x030c, 0x2004, 0x9086, 0x0041, 0x11a0,
-	0x6014, 0x0096, 0x904d, 0x090c, 0x0db4, 0xa880, 0xd0f4, 0x1130,
-	0xc0f5, 0xa882, 0x009e, 0x601b, 0x0002, 0x0070, 0x009e, 0x2001,
-	0x0037, 0x2c08, 0x080c, 0x1518, 0x6000, 0x9086, 0x0004, 0x1120,
-	0x2009, 0x0048, 0x080c, 0x9e93, 0x0005, 0x009e, 0x080c, 0x190d,
-	0x0804, 0xb868, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0db4, 0x000b,
-	0x0005, 0xb8f9, 0xb820, 0xb8fb, 0xb8f9, 0xb8fb, 0xb8fb, 0xb81a,
-	0xb8f9, 0xb814, 0xb814, 0xb8f9, 0xb8f9, 0xb8f9, 0xb8f9, 0xb8f9,
-	0xb8f9, 0x080c, 0x0db4, 0x6010, 0x00b6, 0x2058, 0xb804, 0x9084,
-	0x00ff, 0x00be, 0x908a, 0x000c, 0x1a0c, 0x0db4, 0x00b6, 0x0013,
-	0x00be, 0x0005, 0xb916, 0xb9e3, 0xb918, 0xb958, 0xb918, 0xb958,
-	0xb918, 0xb926, 0xb916, 0xb958, 0xb916, 0xb947, 0x080c, 0x0db4,
-	0x6004, 0x908e, 0x0016, 0x05c0, 0x908e, 0x0004, 0x05a8, 0x908e,
-	0x0002, 0x0590, 0x908e, 0x0052, 0x0904, 0xb9df, 0x6004, 0x080c,
-	0xbd04, 0x0904, 0xb9fc, 0x908e, 0x0004, 0x1110, 0x080c, 0x2ffc,
-	0x908e, 0x0021, 0x0904, 0xba00, 0x908e, 0x0022, 0x0904, 0xba44,
-	0x908e, 0x003d, 0x0904, 0xba00, 0x908e, 0x0039, 0x0904, 0xba04,
-	0x908e, 0x0035, 0x0904, 0xba04, 0x908e, 0x001e, 0x0178, 0x908e,
-	0x0001, 0x1140, 0x6010, 0x2058, 0xb804, 0x9084, 0x00ff, 0x9086,
-	0x0006, 0x0110, 0x080c, 0x2fd7, 0x080c, 0xa7a7, 0x0804, 0x9e49,
-	0x00c6, 0x00d6, 0x6104, 0x9186, 0x0016, 0x0904, 0xb9d0, 0x9186,
-	0x0002, 0x1904, 0xb9a5, 0x2001, 0x1836, 0x2004, 0xd08c, 0x11c8,
-	0x080c, 0x6fa7, 0x11b0, 0x080c, 0xc1f9, 0x0138, 0x080c, 0x6fca,
-	0x1120, 0x080c, 0x6eb7, 0x0804, 0xba2d, 0x2001, 0x194e, 0x2003,
-	0x0001, 0x2001, 0x1800, 0x2003, 0x0001, 0x080c, 0x6ed9, 0x0804,
-	0xba2d, 0x6010, 0x2058, 0x2001, 0x1836, 0x2004, 0xd0ac, 0x1904,
-	0xba2d, 0xb8a0, 0x9084, 0xff80, 0x1904, 0xba2d, 0xb840, 0x9084,
-	0x00ff, 0x9005, 0x0190, 0x8001, 0xb842, 0x6017, 0x0000, 0x6023,
-	0x0007, 0x601b, 0x0398, 0x6043, 0x0000, 0x080c, 0x9dc3, 0x0128,
-	0x2b00, 0x6012, 0x6023, 0x0001, 0x0458, 0x00de, 0x00ce, 0x6004,
-	0x908e, 0x0002, 0x11a0, 0x6010, 0x2058, 0xb8a0, 0x9086, 0x007e,
-	0x1170, 0x2009, 0x1836, 0x2104, 0xc085, 0x200a, 0x00e6, 0x2071,
-	0x1800, 0x080c, 0x5c5d, 0x00ee, 0x080c, 0xa7a7, 0x0030, 0x080c,
-	0xa7a7, 0x080c, 0x2fd7, 0x080c, 0xc20e, 0x00e6, 0x0126, 0x2091,
-	0x8000, 0x080c, 0x2ffc, 0x012e, 0x00ee, 0x080c, 0x9e49, 0x0005,
-	0x2001, 0x0002, 0x080c, 0x6188, 0x6003, 0x0001, 0x6007, 0x0002,
-	0x080c, 0x8411, 0x080c, 0x894b, 0x00de, 0x00ce, 0x0c80, 0x080c,
-	0x2ffc, 0x0804, 0xb954, 0x00c6, 0x00d6, 0x6104, 0x9186, 0x0016,
-	0x0d38, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0904,
-	0xb9a5, 0x8001, 0xb842, 0x6003, 0x0001, 0x080c, 0x8411, 0x080c,
-	0x894b, 0x00de, 0x00ce, 0x0898, 0x080c, 0xa7a7, 0x0804, 0xb956,
-	0x080c, 0xa7e3, 0x0804, 0xb956, 0x00d6, 0x2c68, 0x6104, 0x080c,
-	0xc171, 0x00de, 0x0118, 0x080c, 0x9e19, 0x00f0, 0x6004, 0x8007,
-	0x6134, 0x918c, 0x00ff, 0x9105, 0x6036, 0x6007, 0x0085, 0x6003,
-	0x000b, 0x6023, 0x0002, 0x603c, 0x600a, 0x2001, 0x1958, 0x2004,
-	0x601a, 0x602c, 0x2c08, 0x2060, 0x6024, 0xc0b5, 0x6026, 0x2160,
-	0x080c, 0x83c9, 0x080c, 0x894b, 0x0005, 0x00de, 0x00ce, 0x080c,
-	0xa7a7, 0x080c, 0x2fd7, 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c,
-	0x2ffc, 0x6017, 0x0000, 0x6023, 0x0007, 0x601b, 0x0398, 0x6043,
-	0x0000, 0x012e, 0x00ee, 0x0005, 0x080c, 0xa248, 0x1904, 0xb9fc,
-	0x0005, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0db4, 0x0096, 0x00d6,
-	0x001b, 0x00de, 0x009e, 0x0005, 0xba64, 0xba64, 0xba64, 0xba64,
-	0xba64, 0xba64, 0xba64, 0xba64, 0xba64, 0xb819, 0xba64, 0xb820,
-	0xba66, 0xb820, 0xba73, 0xba64, 0x080c, 0x0db4, 0x6004, 0x9086,
-	0x008b, 0x0148, 0x6007, 0x008b, 0x6003, 0x000d, 0x080c, 0x83c9,
-	0x080c, 0x894b, 0x0005, 0x080c, 0xc1ed, 0x0118, 0x080c, 0xc200,
-	0x0010, 0x080c, 0xc20e, 0x080c, 0xbce7, 0x080c, 0xbafe, 0x0570,
-	0x080c, 0x2fd7, 0x080c, 0xbafe, 0x0168, 0x6014, 0x2048, 0xa867,
-	0x0103, 0xa87b, 0x0006, 0xa877, 0x0000, 0xa880, 0xc0ed, 0xa882,
-	0x080c, 0x6885, 0x2c68, 0x080c, 0x9dc3, 0x0150, 0x6810, 0x6012,
-	0x080c, 0xbf73, 0x00c6, 0x2d60, 0x080c, 0x9e49, 0x00ce, 0x0008,
-	0x2d60, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001, 0x6003,
-	0x0001, 0x080c, 0x8411, 0x080c, 0x894b, 0x00c8, 0x080c, 0xc1ed,
-	0x0138, 0x6034, 0x9086, 0x4000, 0x1118, 0x080c, 0x2fd7, 0x08d0,
-	0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039, 0x0118, 0x9186,
-	0x0035, 0x1118, 0x080c, 0x2fd7, 0x0868, 0x080c, 0x9e49, 0x0005,
-	0x6000, 0x908a, 0x0016, 0x1a0c, 0x0db4, 0x0002, 0xbade, 0xbade,
-	0xbae0, 0xbae0, 0xbae0, 0xbade, 0xbade, 0x9e49, 0xbade, 0xbade,
-	0xbade, 0xbade, 0xbade, 0xbade, 0xbade, 0xbade, 0x080c, 0x0db4,
-	0x080c, 0x98d1, 0x6114, 0x0096, 0x2148, 0xa87b, 0x0006, 0x080c,
-	0x6885, 0x009e, 0x0804, 0x9e19, 0x9284, 0x0007, 0x1158, 0x9282,
-	0x1cd0, 0x0240, 0x2001, 0x1819, 0x2004, 0x9202, 0x1218, 0x9085,
-	0x0001, 0x0005, 0x9006, 0x0ce8, 0x0096, 0x0028, 0x0096, 0x0006,
-	0x6014, 0x2048, 0x000e, 0x0006, 0x9984, 0xf000, 0x9086, 0xf000,
-	0x0110, 0x080c, 0x1096, 0x000e, 0x009e, 0x0005, 0x00e6, 0x00c6,
-	0x0036, 0x0006, 0x0126, 0x2091, 0x8000, 0x2061, 0x1cd0, 0x2071,
-	0x1800, 0x7350, 0x7070, 0x9302, 0x1640, 0x6020, 0x9206, 0x11f8,
-	0x080c, 0xc1f9, 0x0180, 0x9286, 0x0001, 0x1168, 0x6004, 0x9086,
-	0x0004, 0x1148, 0x080c, 0x2fd7, 0x080c, 0xc20e, 0x00c6, 0x080c,
-	0x9e49, 0x00ce, 0x0060, 0x080c, 0xbeed, 0x0148, 0x080c, 0xbd04,
-	0x1110, 0x080c, 0xa7a7, 0x00c6, 0x080c, 0x9e19, 0x00ce, 0x9ce0,
-	0x0018, 0x7064, 0x9c02, 0x1208, 0x08a0, 0x012e, 0x000e, 0x003e,
-	0x00ce, 0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0016, 0x9188, 0x1000,
-	0x210c, 0x81ff, 0x0128, 0x2061, 0x1a80, 0x6112, 0x080c, 0x2fd7,
-	0x9006, 0x0010, 0x9085, 0x0001, 0x001e, 0x00ce, 0x00ee, 0x0005,
-	0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9dc3, 0x01b0, 0x6656,
-	0x2b00, 0x6012, 0x080c, 0x5387, 0x0118, 0x080c, 0xbc2b, 0x0168,
-	0x080c, 0xbf73, 0x6023, 0x0003, 0x2009, 0x004b, 0x080c, 0x9e93,
-	0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6,
-	0x0126, 0x2091, 0x8000, 0xbaa0, 0x080c, 0x9e66, 0x0560, 0x6057,
-	0x0000, 0x2b00, 0x6012, 0x080c, 0xbf73, 0x6023, 0x0003, 0x0016,
-	0x080c, 0x8549, 0x0076, 0x903e, 0x080c, 0x8441, 0x2c08, 0x080c,
-	0xd27b, 0x007e, 0x001e, 0xd184, 0x0128, 0x080c, 0x9e19, 0x9085,
-	0x0001, 0x0070, 0x080c, 0x5387, 0x0128, 0xd18c, 0x1170, 0x080c,
-	0xbc2b, 0x0148, 0x2009, 0x004c, 0x080c, 0x9e93, 0x9085, 0x0001,
-	0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2900, 0x6016, 0x0c90,
-	0x2009, 0x004d, 0x0010, 0x2009, 0x004e, 0x00f6, 0x00c6, 0x0046,
-	0x0016, 0x080c, 0x9dc3, 0x2c78, 0x0590, 0x7e56, 0x2b00, 0x7812,
-	0x7823, 0x0003, 0x2021, 0x0005, 0x080c, 0xbc3d, 0x9186, 0x004d,
-	0x0118, 0x9186, 0x004e, 0x0148, 0x2001, 0x1951, 0x200c, 0xd1fc,
-	0x0168, 0x2f60, 0x080c, 0x9e19, 0x00d0, 0x2001, 0x1950, 0x200c,
-	0xd1fc, 0x0120, 0x2f60, 0x080c, 0x9e19, 0x0088, 0x2f60, 0x080c,
-	0x5387, 0x0138, 0xd18c, 0x1118, 0x04f1, 0x0148, 0x0010, 0x2900,
-	0x7816, 0x001e, 0x0016, 0x080c, 0x9e93, 0x9085, 0x0001, 0x001e,
-	0x004e, 0x00ce, 0x00fe, 0x0005, 0x00f6, 0x00c6, 0x0046, 0x080c,
-	0x9dc3, 0x2c78, 0x0508, 0x7e56, 0x2b00, 0x7812, 0x7823, 0x0003,
-	0x0096, 0x2021, 0x0004, 0x0489, 0x009e, 0x2001, 0x194f, 0x200c,
-	0xd1fc, 0x0120, 0x2f60, 0x080c, 0x9e19, 0x0060, 0x2f60, 0x080c,
-	0x5387, 0x0120, 0xd18c, 0x1160, 0x0071, 0x0130, 0x2009, 0x0052,
-	0x080c, 0x9e93, 0x9085, 0x0001, 0x004e, 0x00ce, 0x00fe, 0x0005,
-	0x2900, 0x7816, 0x0c98, 0x00c6, 0x080c, 0x4872, 0x00ce, 0x1120,
-	0x080c, 0x9e19, 0x9006, 0x0005, 0xa867, 0x0000, 0xa86b, 0x8000,
-	0x2900, 0x6016, 0x9085, 0x0001, 0x0005, 0x0096, 0x0076, 0x0126,
-	0x2091, 0x8000, 0x080c, 0x636b, 0x0158, 0x2001, 0xbc42, 0x0006,
-	0x900e, 0x2400, 0x080c, 0x6abf, 0x080c, 0x6885, 0x000e, 0x0807,
-	0x2418, 0x080c, 0x87e0, 0xbaa0, 0x0086, 0x2041, 0x0001, 0x2039,
-	0x0001, 0x2608, 0x080c, 0x8561, 0x008e, 0x080c, 0x8441, 0x2f08,
-	0x2648, 0x080c, 0xd27b, 0xb93c, 0x81ff, 0x090c, 0x8632, 0x080c,
-	0x894b, 0x012e, 0x007e, 0x009e, 0x0005, 0x00c6, 0x0126, 0x2091,
-	0x8000, 0x080c, 0x9dc3, 0x0190, 0x660a, 0x2b08, 0x6112, 0x080c,
-	0xbf73, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x001f, 0x080c,
-	0x9e93, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8,
-	0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9e66, 0x01b8, 0x660a,
-	0x2b08, 0x6112, 0x080c, 0xbf73, 0x6023, 0x0008, 0x2900, 0x6016,
-	0x00f6, 0x2c78, 0x080c, 0x1648, 0x00fe, 0x2009, 0x0021, 0x080c,
-	0x9e93, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8,
-	0x2009, 0x003d, 0x00c6, 0x0126, 0x0016, 0x2091, 0x8000, 0x080c,
-	0x9dc3, 0x0198, 0x660a, 0x2b08, 0x6112, 0x080c, 0xbf73, 0x6023,
-	0x0001, 0x2900, 0x6016, 0x001e, 0x0016, 0x080c, 0x9e93, 0x9085,
-	0x0001, 0x001e, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd0, 0x00c6,
-	0x0126, 0x2091, 0x8000, 0x080c, 0x9e66, 0x0188, 0x2b08, 0x6112,
-	0x080c, 0xbf73, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x0000,
-	0x080c, 0x9e93, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006,
-	0x0cd8, 0x2009, 0x0044, 0x0830, 0x2009, 0x0049, 0x0818, 0x0026,
-	0x00b6, 0x6210, 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e,
-	0x00be, 0x002e, 0x0005, 0x0006, 0x0016, 0x6004, 0x908e, 0x0002,
-	0x0140, 0x908e, 0x0003, 0x0128, 0x908e, 0x0004, 0x0110, 0x9085,
-	0x0001, 0x001e, 0x000e, 0x0005, 0x0006, 0x0096, 0x6020, 0x9086,
-	0x0004, 0x0190, 0x6014, 0x904d, 0x080c, 0xbafe, 0x0168, 0xa864,
-	0x9086, 0x0139, 0x0158, 0x6020, 0x9086, 0x0003, 0x0128, 0xa868,
-	0xd0fc, 0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x009e, 0x000e,
-	0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9e66, 0x0198,
-	0x2b08, 0x6112, 0x080c, 0xbf73, 0x6023, 0x0001, 0x2900, 0x6016,
-	0x080c, 0x2fd7, 0x2009, 0x0028, 0x080c, 0x9e93, 0x9085, 0x0001,
-	0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x9186, 0x0015, 0x11a8,
-	0x2011, 0x1823, 0x2204, 0x9086, 0x0074, 0x1178, 0x00b6, 0x080c,
-	0xaa30, 0x00be, 0x080c, 0xac6f, 0x6003, 0x0001, 0x6007, 0x0029,
-	0x080c, 0x8411, 0x080c, 0x894b, 0x0078, 0x6014, 0x0096, 0x2048,
-	0xa868, 0x009e, 0xd0fc, 0x0148, 0x2001, 0x0001, 0x080c, 0xc132,
-	0x080c, 0xa7a7, 0x080c, 0x9e19, 0x0005, 0x0096, 0x6014, 0x904d,
-	0x090c, 0x0db4, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, 0x4005,
-	0xa89b, 0x0004, 0xa867, 0x0139, 0x0126, 0x2091, 0x8000, 0x080c,
-	0x6885, 0x012e, 0x009e, 0x080c, 0x9e19, 0x0c30, 0x0096, 0x9186,
-	0x0016, 0x1128, 0x2001, 0x0004, 0x080c, 0x6188, 0x00e8, 0x9186,
-	0x0015, 0x1510, 0x2011, 0x1823, 0x2204, 0x9086, 0x0014, 0x11e0,
-	0x6010, 0x00b6, 0x2058, 0x080c, 0x62d2, 0x00be, 0x080c, 0xad40,
-	0x1198, 0x6010, 0x00b6, 0x2058, 0xb890, 0x00be, 0x9005, 0x0160,
-	0x2001, 0x0006, 0x080c, 0x6188, 0x6014, 0x2048, 0xa868, 0xd0fc,
-	0x0170, 0x080c, 0xa21c, 0x0048, 0x6014, 0x2048, 0xa868, 0xd0fc,
-	0x0528, 0x080c, 0xa7a7, 0x080c, 0x9e19, 0x009e, 0x0005, 0x6014,
-	0x6310, 0x2358, 0x904d, 0x090c, 0x0db4, 0xa87b, 0x0000, 0xa883,
-	0x0000, 0xa897, 0x4000, 0x900e, 0x080c, 0x6457, 0x1108, 0xc185,
-	0xb800, 0xd0bc, 0x0108, 0xc18d, 0xa99a, 0x0126, 0x2091, 0x8000,
-	0x080c, 0x6885, 0x012e, 0x080c, 0x9e19, 0x08f8, 0x6014, 0x904d,
-	0x090c, 0x0db4, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, 0x4005,
-	0xa89b, 0x0004, 0xa867, 0x0139, 0x0126, 0x2091, 0x8000, 0x080c,
-	0x6885, 0x012e, 0x080c, 0x9e19, 0x0840, 0xa878, 0x9086, 0x0005,
-	0x1108, 0x0009, 0x0005, 0xa880, 0xc0ad, 0xa882, 0x0005, 0x6043,
-	0x0000, 0x6017, 0x0000, 0x6003, 0x0001, 0x6007, 0x0050, 0x080c,
-	0x83c9, 0x080c, 0x894b, 0x0005, 0x00c6, 0x6010, 0x00b6, 0x2058,
-	0xb800, 0x00be, 0xd0bc, 0x0120, 0x6020, 0x9084, 0x000f, 0x0013,
-	0x00ce, 0x0005, 0xb819, 0xbe23, 0xbe23, 0xbe26, 0xd559, 0xd574,
-	0xd577, 0xb819, 0xb819, 0xb819, 0xb819, 0xb819, 0xb819, 0xb819,
-	0xb819, 0x080c, 0x0db4, 0xa001, 0xa001, 0x0005, 0x0096, 0x6014,
-	0x904d, 0x0118, 0xa87c, 0xd0e4, 0x1110, 0x009e, 0x0010, 0x009e,
-	0x0005, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0550,
-	0x2001, 0x1833, 0x2004, 0x9005, 0x1540, 0x00f6, 0x2c78, 0x080c,
-	0x9dc3, 0x0508, 0x7810, 0x6012, 0x080c, 0xbf73, 0x7820, 0x9086,
-	0x0003, 0x0128, 0x7808, 0x603a, 0x2f00, 0x603e, 0x0020, 0x7808,
-	0x603e, 0x2f00, 0x603a, 0x602e, 0x6023, 0x0001, 0x6007, 0x0035,
-	0x6003, 0x0001, 0x7954, 0x6156, 0x080c, 0x83c9, 0x080c, 0x894b,
-	0x2f60, 0x00fe, 0x0005, 0x2f60, 0x00fe, 0x2001, 0x1959, 0x2004,
-	0x6042, 0x0005, 0x0016, 0x0096, 0x6814, 0x2048, 0xa87c, 0xd0e4,
-	0x0180, 0xc0e4, 0xa87e, 0xa877, 0x0000, 0xa893, 0x0000, 0xa88f,
-	0x0000, 0xd0cc, 0x0130, 0xc0cc, 0xa87e, 0xa878, 0x2048, 0x080c,
-	0x0f9d, 0x6830, 0x6036, 0x908e, 0x0001, 0x0148, 0x6803, 0x0002,
-	0x9086, 0x0005, 0x0170, 0x9006, 0x602e, 0x6032, 0x00d0, 0x681c,
-	0xc085, 0x681e, 0x6803, 0x0004, 0x6824, 0xc0f4, 0x9085, 0x0c00,
-	0x6826, 0x6814, 0x2048, 0xa8ac, 0x6938, 0x9102, 0xa8b0, 0x693c,
-	0x9103, 0x1e48, 0x683c, 0x602e, 0x6838, 0x9084, 0xfffc, 0x683a,
-	0x6032, 0x2d00, 0x603a, 0x6808, 0x603e, 0x6910, 0x6112, 0x6954,
-	0x6156, 0x6023, 0x0001, 0x6007, 0x0039, 0x6003, 0x0001, 0x080c,
-	0x83c9, 0x080c, 0x894b, 0x009e, 0x001e, 0x0005, 0x6024, 0xd0d4,
-	0x0510, 0xd0f4, 0x11f8, 0x6038, 0x940a, 0x603c, 0x9303, 0x0230,
-	0x9105, 0x0120, 0x6024, 0xc0d4, 0xc0f5, 0x0098, 0x643a, 0x633e,
-	0xac3e, 0xab42, 0x0046, 0x0036, 0x2400, 0xacac, 0x9402, 0xa836,
-	0x2300, 0xabb0, 0x9303, 0xa83a, 0x003e, 0x004e, 0x6024, 0xc0d4,
-	0x0000, 0x6026, 0x0005, 0xd0f4, 0x1138, 0xa83c, 0x603a, 0xa840,
-	0x603e, 0x6024, 0xc0f5, 0x6026, 0x0005, 0x0006, 0x0016, 0x6004,
-	0x908e, 0x0034, 0x01b8, 0x908e, 0x0035, 0x01a0, 0x908e, 0x0036,
-	0x0188, 0x908e, 0x0037, 0x0170, 0x908e, 0x0038, 0x0158, 0x908e,
-	0x0039, 0x0140, 0x908e, 0x003a, 0x0128, 0x908e, 0x003b, 0x0110,
-	0x9085, 0x0001, 0x001e, 0x000e, 0x0005, 0x0006, 0x0016, 0x0026,
-	0x0036, 0x00e6, 0x2001, 0x1953, 0x200c, 0x8000, 0x2014, 0x2001,
-	0x0032, 0x080c, 0x8248, 0x2001, 0x1957, 0x82ff, 0x1110, 0x2011,
-	0x0014, 0x2202, 0x2001, 0x1955, 0x200c, 0x8000, 0x2014, 0x2071,
-	0x193d, 0x711a, 0x721e, 0x2001, 0x0064, 0x080c, 0x8248, 0x2001,
-	0x1958, 0x82ff, 0x1110, 0x2011, 0x0014, 0x2202, 0x2001, 0x1959,
-	0x9288, 0x000a, 0x2102, 0x2001, 0x1a61, 0x2102, 0x2001, 0x0032,
-	0x080c, 0x1518, 0x080c, 0x653c, 0x00ee, 0x003e, 0x002e, 0x001e,
-	0x000e, 0x0005, 0x0006, 0x0016, 0x00e6, 0x2001, 0x1957, 0x2003,
-	0x0028, 0x2001, 0x1958, 0x2003, 0x0014, 0x2071, 0x193d, 0x701b,
-	0x0000, 0x701f, 0x07d0, 0x2001, 0x1959, 0x2009, 0x001e, 0x2102,
-	0x2001, 0x1a61, 0x2102, 0x2001, 0x0032, 0x080c, 0x1518, 0x00ee,
-	0x001e, 0x000e, 0x0005, 0x0096, 0x6058, 0x904d, 0x0110, 0x080c,
-	0x101d, 0x009e, 0x0005, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000,
-	0x080c, 0x9dc3, 0x0180, 0x2b08, 0x6112, 0x0ca9, 0x6023, 0x0001,
-	0x2900, 0x6016, 0x2009, 0x0033, 0x080c, 0x9e93, 0x9085, 0x0001,
-	0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x0096, 0x00e6, 0x00f6,
-	0x2071, 0x1800, 0x9186, 0x0015, 0x1500, 0x708c, 0x9086, 0x0018,
-	0x11e0, 0x6014, 0x2048, 0xaa3c, 0xd2e4, 0x1160, 0x2c78, 0x080c,
-	0x8b3b, 0x01d8, 0x7078, 0xaa50, 0x9206, 0x1160, 0x707c, 0xaa54,
-	0x9206, 0x1140, 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be, 0x900e,
-	0x080c, 0x301c, 0x080c, 0xa21c, 0x0020, 0x080c, 0xa7a7, 0x080c,
-	0x9e19, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c, 0xaa54, 0x9206,
-	0x0d48, 0x0c80, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9dc3,
-	0x0188, 0x2b08, 0x6112, 0x080c, 0xbf73, 0x6023, 0x0001, 0x2900,
-	0x6016, 0x2009, 0x004d, 0x080c, 0x9e93, 0x9085, 0x0001, 0x012e,
-	0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000,
-	0x0016, 0x080c, 0x9dc3, 0x0180, 0x2b08, 0x6112, 0x080c, 0xbf73,
-	0x6023, 0x0001, 0x2900, 0x6016, 0x001e, 0x080c, 0x9e93, 0x9085,
-	0x0001, 0x012e, 0x00ce, 0x0005, 0x001e, 0x9006, 0x0cd0, 0x0016,
-	0x0026, 0x0036, 0x0046, 0x0056, 0x0066, 0x0096, 0x00e6, 0x00f6,
-	0x2071, 0x1800, 0x9186, 0x0015, 0x1568, 0x718c, 0x6014, 0x2048,
-	0xa814, 0x8003, 0x9106, 0x1530, 0x20e1, 0x0000, 0x2001, 0x1971,
-	0x2003, 0x0000, 0x6014, 0x2048, 0xa830, 0x20a8, 0x8906, 0x8006,
-	0x8007, 0x9094, 0x003f, 0x22e8, 0x9084, 0xffc0, 0x9080, 0x001b,
-	0x20a0, 0x2001, 0x1971, 0x0016, 0x200c, 0x080c, 0xc7b4, 0x001e,
-	0xa804, 0x9005, 0x0110, 0x2048, 0x0c38, 0x6014, 0x2048, 0xa867,
-	0x0103, 0x0010, 0x080c, 0xa7a7, 0x080c, 0x9e19, 0x00fe, 0x00ee,
-	0x009e, 0x006e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, 0x0005,
-	0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, 0x11b8,
-	0x708c, 0x9086, 0x0004, 0x1198, 0x6014, 0x2048, 0x2c78, 0x080c,
-	0x8b3b, 0x01a8, 0x7078, 0xaa74, 0x9206, 0x1130, 0x707c, 0xaa78,
-	0x9206, 0x1110, 0x080c, 0x2fd7, 0x080c, 0xa21c, 0x0020, 0x080c,
-	0xa7a7, 0x080c, 0x9e19, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c,
-	0xaa78, 0x9206, 0x0d78, 0x0c80, 0x0096, 0x00e6, 0x00f6, 0x2071,
-	0x1800, 0x9186, 0x0015, 0x1550, 0x708c, 0x9086, 0x0004, 0x1530,
-	0x6014, 0x2048, 0x2c78, 0x080c, 0x8b3b, 0x05f0, 0x7078, 0xaacc,
-	0x9206, 0x1180, 0x707c, 0xaad0, 0x9206, 0x1160, 0x080c, 0x2fd7,
-	0x0016, 0xa998, 0xaab0, 0x9284, 0x1000, 0xc0fd, 0x080c, 0x5337,
-	0x001e, 0x0010, 0x080c, 0x5128, 0x080c, 0xbafe, 0x0508, 0xa87b,
-	0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0x0080, 0x080c, 0xbafe,
-	0x01b8, 0x6014, 0x2048, 0x080c, 0x5128, 0x1d70, 0xa87b, 0x0030,
-	0xa883, 0x0000, 0xa897, 0x4005, 0xa89b, 0x0004, 0x0126, 0x2091,
-	0x8000, 0xa867, 0x0139, 0x080c, 0x6885, 0x012e, 0x080c, 0x9e19,
-	0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c, 0xaad0, 0x9206, 0x0930,
-	0x0888, 0x0016, 0x0026, 0xa87c, 0xd0ac, 0x0178, 0xa938, 0xaa34,
-	0x2100, 0x9205, 0x0150, 0xa890, 0x9106, 0x1118, 0xa88c, 0x9206,
-	0x0120, 0xa992, 0xaa8e, 0x9085, 0x0001, 0x002e, 0x001e, 0x0005,
-	0x00b6, 0x00d6, 0x0036, 0x080c, 0xbafe, 0x0904, 0xc12e, 0x0096,
-	0x6314, 0x2348, 0xa87a, 0xa982, 0x929e, 0x4000, 0x1580, 0x6310,
-	0x00c6, 0x2358, 0x2009, 0x0000, 0xa868, 0xd0f4, 0x1140, 0x080c,
-	0x6457, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0xaa96,
-	0xa99a, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0031,
-	0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098, 0x080c,
-	0x0f68, 0x20a9, 0x0004, 0xa85c, 0x9080, 0x0035, 0x20a0, 0xb8b8,
-	0x9080, 0x000a, 0x2098, 0x080c, 0x0f68, 0x00ce, 0x0090, 0xaa96,
-	0x3918, 0x9398, 0x0007, 0x231c, 0x6004, 0x9086, 0x0016, 0x0110,
-	0xa89b, 0x0004, 0xaba2, 0x6310, 0x2358, 0xb804, 0x9084, 0x00ff,
-	0xa89e, 0x080c, 0x6878, 0x6017, 0x0000, 0x009e, 0x003e, 0x00de,
-	0x00be, 0x0005, 0x0026, 0x0036, 0x0046, 0x00b6, 0x0096, 0x00f6,
-	0x6214, 0x2248, 0x6210, 0x2258, 0x2079, 0x0260, 0x9096, 0x0000,
-	0x11a0, 0xb814, 0x9084, 0x00ff, 0x900e, 0x080c, 0x2663, 0x2118,
-	0x831f, 0x939c, 0xff00, 0x7838, 0x9084, 0x00ff, 0x931d, 0x7c3c,
-	0x2011, 0x8018, 0x080c, 0x48d2, 0x00a8, 0x9096, 0x0001, 0x1148,
-	0x89ff, 0x0180, 0xa89b, 0x000d, 0x7838, 0xa8a6, 0x783c, 0xa8aa,
-	0x0048, 0x9096, 0x0002, 0x1130, 0xa89b, 0x000d, 0x7838, 0xa8a6,
-	0x783c, 0xa8aa, 0x00fe, 0x009e, 0x00be, 0x004e, 0x003e, 0x002e,
-	0x0005, 0x00c6, 0x0026, 0x0016, 0x9186, 0x0035, 0x0110, 0x6a38,
-	0x0008, 0x6a2c, 0x080c, 0xbaec, 0x01f0, 0x2260, 0x6120, 0x9186,
-	0x0003, 0x0118, 0x9186, 0x0006, 0x1190, 0x6838, 0x9206, 0x0140,
-	0x683c, 0x9206, 0x1160, 0x6108, 0x6838, 0x9106, 0x1140, 0x0020,
-	0x6008, 0x693c, 0x9106, 0x1118, 0x6010, 0x6910, 0x9106, 0x001e,
-	0x002e, 0x00ce, 0x0005, 0x9085, 0x0001, 0x0cc8, 0xa974, 0xd1cc,
-	0x0188, 0x918c, 0x00ff, 0x918e, 0x0002, 0x1160, 0xa9a8, 0x918c,
-	0x0f00, 0x810f, 0x918e, 0x0001, 0x1128, 0xa834, 0xa938, 0x9115,
-	0x190c, 0xb20e, 0x0005, 0x0036, 0x2019, 0x0001, 0x0010, 0x0036,
-	0x901e, 0x0499, 0x01e0, 0x080c, 0xbafe, 0x01c8, 0x080c, 0xbce7,
-	0x6037, 0x4000, 0x6014, 0x6017, 0x0000, 0x0096, 0x2048, 0xa87c,
-	0x080c, 0xbd04, 0x1118, 0x080c, 0xa7a7, 0x0040, 0xa867, 0x0103,
-	0xa877, 0x0000, 0x83ff, 0x1129, 0x080c, 0x6885, 0x009e, 0x003e,
-	0x0005, 0xa880, 0xd0b4, 0x0128, 0xa87b, 0x0006, 0xc0ec, 0xa882,
-	0x0048, 0xd0bc, 0x0118, 0xa87b, 0x0002, 0x0020, 0xa87b, 0x0005,
-	0x080c, 0xbdf3, 0xa877, 0x0000, 0x0005, 0x2001, 0x1810, 0x2004,
-	0xd0ec, 0x0005, 0x0006, 0x2001, 0x1810, 0x2004, 0xd0f4, 0x000e,
-	0x0005, 0x0006, 0x2001, 0x1810, 0x2004, 0xd0e4, 0x000e, 0x0005,
-	0x0036, 0x0046, 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021,
-	0x0007, 0x080c, 0x4a6f, 0x004e, 0x003e, 0x0005, 0x0c51, 0x1d81,
-	0x0005, 0x2001, 0x1957, 0x2004, 0x601a, 0x0005, 0x2001, 0x1959,
-	0x2004, 0x6042, 0x0005, 0x080c, 0x9e19, 0x0804, 0x894b, 0x00b6,
-	0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0db4, 0x001b, 0x006e,
-	0x00be, 0x0005, 0xc23a, 0xc911, 0xca6c, 0xc23a, 0xc23a, 0xc23a,
-	0xc23a, 0xc23a, 0xc271, 0xcaea, 0xc23a, 0xc23a, 0xc23a, 0xc23a,
-	0xc23a, 0xc23a, 0x080c, 0x0db4, 0x0066, 0x6000, 0x90b2, 0x0016,
-	0x1a0c, 0x0db4, 0x0013, 0x006e, 0x0005, 0xc255, 0xd052, 0xc255,
-	0xc255, 0xc255, 0xc255, 0xc255, 0xc255, 0xcfff, 0xd0a6, 0xc255,
-	0xd694, 0xd6ca, 0xd694, 0xd6ca, 0xc255, 0x080c, 0x0db4, 0x6000,
-	0x9082, 0x0016, 0x1a0c, 0x0db4, 0x6000, 0x000a, 0x0005, 0xc26f,
-	0xccc7, 0xcdb7, 0xcdd9, 0xce98, 0xc26f, 0xcf76, 0xcf20, 0xcaf6,
-	0xcfd5, 0xcfea, 0xc26f, 0xc26f, 0xc26f, 0xc26f, 0xc26f, 0x080c,
-	0x0db4, 0x91b2, 0x0053, 0x1a0c, 0x0db4, 0x2100, 0x91b2, 0x0040,
-	0x1a04, 0xc6b2, 0x0002, 0xc2bb, 0xc4a3, 0xc2bb, 0xc2bb, 0xc2bb,
-	0xc4ac, 0xc2bb, 0xc2bb, 0xc2bb, 0xc2bb, 0xc2bb, 0xc2bb, 0xc2bb,
-	0xc2bb, 0xc2bb, 0xc2bb, 0xc2bb, 0xc2bb, 0xc2bb, 0xc2bb, 0xc2bb,
-	0xc2bb, 0xc2bb, 0xc2bd, 0xc320, 0xc32f, 0xc393, 0xc3be, 0xc436,
-	0xc48e, 0xc2bb, 0xc2bb, 0xc4af, 0xc2bb, 0xc2bb, 0xc4c4, 0xc4d1,
-	0xc2bb, 0xc2bb, 0xc2bb, 0xc2bb, 0xc2bb, 0xc554, 0xc2bb, 0xc2bb,
-	0xc568, 0xc2bb, 0xc2bb, 0xc523, 0xc2bb, 0xc2bb, 0xc2bb, 0xc580,
-	0xc2bb, 0xc2bb, 0xc2bb, 0xc5fd, 0xc2bb, 0xc2bb, 0xc2bb, 0xc2bb,
-	0xc2bb, 0xc2bb, 0xc67a, 0x080c, 0x0db4, 0x080c, 0x6519, 0x1150,
-	0x2001, 0x1836, 0x2004, 0xd0cc, 0x1128, 0x9084, 0x0009, 0x9086,
-	0x0008, 0x1140, 0x6007, 0x0009, 0x602f, 0x0009, 0x6017, 0x0000,
-	0x0804, 0xc49c, 0x080c, 0x6502, 0x00e6, 0x00c6, 0x0036, 0x0026,
-	0x0016, 0x6210, 0x2258, 0xbaa0, 0x0026, 0x2019, 0x0029, 0x080c,
-	0x8549, 0x0076, 0x903e, 0x080c, 0x8441, 0x2c08, 0x080c, 0xd27b,
-	0x007e, 0x001e, 0x001e, 0x002e, 0x003e, 0x00ce, 0x00ee, 0x6610,
-	0x2658, 0x080c, 0x6246, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006,
-	0x1268, 0x0016, 0x0026, 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be,
-	0x2c08, 0x080c, 0xd842, 0x002e, 0x001e, 0x1178, 0x080c, 0xd1ae,
-	0x1904, 0xc38b, 0x080c, 0xd14a, 0x1120, 0x6007, 0x0008, 0x0804,
-	0xc49c, 0x6007, 0x0009, 0x0804, 0xc49c, 0x080c, 0xd3a5, 0x0128,
-	0x080c, 0xd1ae, 0x0d78, 0x0804, 0xc38b, 0x6017, 0x1900, 0x0c88,
-	0x080c, 0x30f6, 0x1904, 0xc6af, 0x6106, 0x080c, 0xd101, 0x6007,
-	0x0006, 0x0804, 0xc49c, 0x6007, 0x0007, 0x0804, 0xc49c, 0x080c,
-	0xd706, 0x1904, 0xc6af, 0x080c, 0x30f6, 0x1904, 0xc6af, 0x00d6,
-	0x6610, 0x2658, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x1220,
-	0x2001, 0x0001, 0x080c, 0x6174, 0x96b4, 0xff00, 0x8637, 0x9686,
-	0x0006, 0x0188, 0x9686, 0x0004, 0x0170, 0xbe04, 0x96b4, 0x00ff,
-	0x9686, 0x0006, 0x0140, 0x9686, 0x0004, 0x0128, 0x9686, 0x0005,
-	0x0110, 0x00de, 0x0480, 0x00e6, 0x2071, 0x0260, 0x7034, 0x9084,
-	0x0003, 0x1140, 0x7034, 0x9082, 0x0014, 0x0220, 0x7030, 0x9084,
-	0x0003, 0x0130, 0x00ee, 0x6017, 0x0000, 0x602f, 0x0007, 0x00b0,
-	0x00ee, 0x080c, 0xd211, 0x1190, 0x9686, 0x0006, 0x1140, 0x0026,
-	0x6210, 0x2258, 0xbaa0, 0x900e, 0x080c, 0x301c, 0x002e, 0x080c,
-	0x62d2, 0x6007, 0x000a, 0x00de, 0x0804, 0xc49c, 0x6007, 0x000b,
-	0x00de, 0x0804, 0xc49c, 0x080c, 0x2fd7, 0x080c, 0xc20e, 0x6007,
-	0x0001, 0x0804, 0xc49c, 0x080c, 0xd706, 0x1904, 0xc6af, 0x080c,
-	0x30f6, 0x1904, 0xc6af, 0x2071, 0x0260, 0x7034, 0x90b4, 0x0003,
-	0x1948, 0x90b2, 0x0014, 0x0a30, 0x7030, 0x9084, 0x0003, 0x1910,
-	0x6610, 0x2658, 0xbe04, 0x9686, 0x0707, 0x09e8, 0x0026, 0x6210,
-	0x2258, 0xbaa0, 0x900e, 0x080c, 0x301c, 0x002e, 0x6007, 0x000c,
-	0x2001, 0x0001, 0x080c, 0xd822, 0x0804, 0xc49c, 0x080c, 0x6519,
-	0x1140, 0x2001, 0x1836, 0x2004, 0x9084, 0x0009, 0x9086, 0x0008,
-	0x1110, 0x0804, 0xc2ca, 0x080c, 0x6502, 0x6610, 0x2658, 0xbe04,
-	0x9684, 0x00ff, 0x9082, 0x0006, 0x06c0, 0x1138, 0x0026, 0x2001,
-	0x0006, 0x080c, 0x61b4, 0x002e, 0x0050, 0x96b4, 0xff00, 0x8637,
-	0x9686, 0x0004, 0x0120, 0x9686, 0x0006, 0x1904, 0xc38b, 0x080c,
-	0xd21e, 0x1120, 0x6007, 0x000e, 0x0804, 0xc49c, 0x0046, 0x6410,
-	0x2458, 0xbca0, 0x0046, 0x080c, 0x2fd7, 0x080c, 0xc20e, 0x004e,
-	0x0016, 0x9006, 0x2009, 0x1854, 0x210c, 0x0048, 0x2009, 0x0029,
-	0x080c, 0xd50a, 0x6010, 0x2058, 0xb800, 0xc0e5, 0xb802, 0x001e,
-	0x004e, 0x6007, 0x0001, 0x0804, 0xc49c, 0x2001, 0x0001, 0x080c,
-	0x6174, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019,
-	0x1805, 0x2011, 0x0270, 0x080c, 0xade0, 0x003e, 0x002e, 0x001e,
-	0x015e, 0x9005, 0x0168, 0x96b4, 0xff00, 0x8637, 0x9682, 0x0004,
-	0x0a04, 0xc38b, 0x9682, 0x0007, 0x0a04, 0xc3e7, 0x0804, 0xc38b,
-	0x6017, 0x1900, 0x6007, 0x0009, 0x0804, 0xc49c, 0x080c, 0x6519,
-	0x1140, 0x2001, 0x1836, 0x2004, 0x9084, 0x0009, 0x9086, 0x0008,
-	0x1110, 0x0804, 0xc2ca, 0x080c, 0x6502, 0x6610, 0x2658, 0xbe04,
-	0x9684, 0x00ff, 0x9082, 0x0006, 0x0688, 0x96b4, 0xff00, 0x8637,
-	0x9686, 0x0004, 0x0120, 0x9686, 0x0006, 0x1904, 0xc38b, 0x080c,
-	0xd24c, 0x1130, 0x080c, 0xd14a, 0x1118, 0x6007, 0x0010, 0x04e0,
-	0x0046, 0x6410, 0x2458, 0xbca0, 0x0046, 0x080c, 0x2fd7, 0x080c,
-	0xc20e, 0x004e, 0x0016, 0x9006, 0x2009, 0x1854, 0x210c, 0x0048,
-	0x2009, 0x0029, 0x080c, 0xd50a, 0x6010, 0x2058, 0xb800, 0xc0e5,
-	0xb802, 0x001e, 0x004e, 0x6007, 0x0001, 0x00f0, 0x080c, 0xd3a5,
-	0x0140, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0980, 0x0804,
-	0xc38b, 0x6017, 0x1900, 0x6007, 0x0009, 0x0070, 0x080c, 0x30f6,
-	0x1904, 0xc6af, 0x080c, 0xd706, 0x1904, 0xc6af, 0x080c, 0xc84f,
-	0x1904, 0xc38b, 0x6007, 0x0012, 0x6003, 0x0001, 0x080c, 0x8411,
-	0x080c, 0x894b, 0x0005, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c,
-	0x8411, 0x080c, 0x894b, 0x0cb0, 0x6007, 0x0005, 0x0c68, 0x080c,
-	0xd706, 0x1904, 0xc6af, 0x080c, 0x30f6, 0x1904, 0xc6af, 0x080c,
-	0xc84f, 0x1904, 0xc38b, 0x6007, 0x0020, 0x6003, 0x0001, 0x080c,
-	0x8411, 0x080c, 0x894b, 0x0005, 0x080c, 0x30f6, 0x1904, 0xc6af,
-	0x6007, 0x0023, 0x6003, 0x0001, 0x080c, 0x8411, 0x080c, 0x894b,
-	0x0005, 0x080c, 0xd706, 0x1904, 0xc6af, 0x080c, 0x30f6, 0x1904,
-	0xc6af, 0x080c, 0xc84f, 0x1904, 0xc38b, 0x0016, 0x0026, 0x00e6,
-	0x2071, 0x0260, 0x7244, 0x9286, 0xffff, 0x0180, 0x2c08, 0x080c,
-	0xbaec, 0x01b0, 0x2260, 0x7240, 0x6008, 0x9206, 0x1188, 0x6010,
-	0x9190, 0x0004, 0x2214, 0x9206, 0x01b8, 0x0050, 0x7240, 0x2c08,
-	0x9006, 0x080c, 0xd4dc, 0x1180, 0x7244, 0x9286, 0xffff, 0x01b0,
-	0x2160, 0x6007, 0x0026, 0x6017, 0x1700, 0x7214, 0x9296, 0xffff,
-	0x1180, 0x6007, 0x0025, 0x0068, 0x6020, 0x9086, 0x0007, 0x1d80,
-	0x6004, 0x9086, 0x0024, 0x1110, 0x080c, 0x9e19, 0x2160, 0x6007,
-	0x0025, 0x6003, 0x0001, 0x080c, 0x8411, 0x080c, 0x894b, 0x00ee,
-	0x002e, 0x001e, 0x0005, 0x2001, 0x0001, 0x080c, 0x6174, 0x0156,
-	0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011,
-	0x0276, 0x080c, 0xade0, 0x003e, 0x002e, 0x001e, 0x015e, 0x0120,
-	0x6007, 0x0031, 0x0804, 0xc49c, 0x080c, 0xaa48, 0x080c, 0x6fa7,
-	0x1190, 0x0006, 0x0026, 0x0036, 0x080c, 0x6fc1, 0x1138, 0x080c,
-	0x728b, 0x080c, 0x5cca, 0x080c, 0x6ed9, 0x0010, 0x080c, 0x6f7f,
-	0x003e, 0x002e, 0x000e, 0x0005, 0x080c, 0x30f6, 0x1904, 0xc6af,
-	0x080c, 0xc84f, 0x1904, 0xc38b, 0x6106, 0x080c, 0xc86b, 0x1120,
-	0x6007, 0x002b, 0x0804, 0xc49c, 0x6007, 0x002c, 0x0804, 0xc49c,
-	0x080c, 0xd706, 0x1904, 0xc6af, 0x080c, 0x30f6, 0x1904, 0xc6af,
-	0x080c, 0xc84f, 0x1904, 0xc38b, 0x6106, 0x080c, 0xc870, 0x1120,
-	0x6007, 0x002e, 0x0804, 0xc49c, 0x6007, 0x002f, 0x0804, 0xc49c,
-	0x080c, 0x30f6, 0x1904, 0xc6af, 0x00e6, 0x00d6, 0x00c6, 0x6010,
-	0x2058, 0xb904, 0x9184, 0x00ff, 0x9086, 0x0006, 0x0158, 0x9184,
-	0xff00, 0x8007, 0x9086, 0x0006, 0x0128, 0x00ce, 0x00de, 0x00ee,
-	0x0804, 0xc4a3, 0x080c, 0x5383, 0xd0e4, 0x0904, 0xc5fa, 0x2071,
-	0x026c, 0x7010, 0x603a, 0x7014, 0x603e, 0x7108, 0x720c, 0x080c,
-	0x6557, 0x0140, 0x6010, 0x2058, 0xb810, 0x9106, 0x1118, 0xb814,
-	0x9206, 0x0510, 0x080c, 0x6553, 0x15b8, 0x2069, 0x1800, 0x687c,
-	0x9206, 0x1590, 0x6878, 0x9106, 0x1578, 0x7210, 0x080c, 0xbaec,
-	0x0590, 0x080c, 0xc73a, 0x0578, 0x080c, 0xd586, 0x0560, 0x622e,
-	0x6007, 0x0036, 0x6003, 0x0001, 0x080c, 0x83c9, 0x080c, 0x894b,
-	0x00ce, 0x00de, 0x00ee, 0x0005, 0x7214, 0x9286, 0xffff, 0x0150,
-	0x080c, 0xbaec, 0x01c0, 0x9280, 0x0002, 0x2004, 0x7110, 0x9106,
-	0x1190, 0x08e0, 0x7210, 0x2c08, 0x9085, 0x0001, 0x080c, 0xd4dc,
-	0x2c10, 0x2160, 0x0140, 0x0890, 0x6007, 0x0037, 0x602f, 0x0009,
-	0x6017, 0x1500, 0x08b8, 0x6007, 0x0037, 0x602f, 0x0003, 0x6017,
-	0x1700, 0x0880, 0x6007, 0x0012, 0x0868, 0x080c, 0x30f6, 0x1904,
-	0xc6af, 0x6010, 0x2058, 0xb804, 0x9084, 0xff00, 0x8007, 0x9086,
-	0x0006, 0x1904, 0xc4a3, 0x00e6, 0x00d6, 0x00c6, 0x080c, 0x5383,
-	0xd0e4, 0x0904, 0xc672, 0x2069, 0x1800, 0x2071, 0x026c, 0x7008,
-	0x603a, 0x720c, 0x623e, 0x9286, 0xffff, 0x1150, 0x7208, 0x00c6,
-	0x2c08, 0x9085, 0x0001, 0x080c, 0xd4dc, 0x2c10, 0x00ce, 0x05e8,
-	0x080c, 0xbaec, 0x05d0, 0x7108, 0x9280, 0x0002, 0x2004, 0x9106,
-	0x15a0, 0x00c6, 0x0026, 0x2260, 0x080c, 0xb724, 0x002e, 0x00ce,
-	0x7118, 0x918c, 0xff00, 0x810f, 0x9186, 0x0001, 0x0178, 0x9186,
-	0x0005, 0x0118, 0x9186, 0x0007, 0x1198, 0x9280, 0x0005, 0x2004,
-	0x9005, 0x0170, 0x080c, 0xc73a, 0x0904, 0xc5f3, 0x0056, 0x7510,
-	0x7614, 0x080c, 0xd59f, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x0005,
-	0x6007, 0x003b, 0x602f, 0x0009, 0x6017, 0x2a00, 0x6003, 0x0001,
-	0x080c, 0x83c9, 0x080c, 0x894b, 0x0c78, 0x6007, 0x003b, 0x602f,
-	0x0003, 0x6017, 0x0300, 0x6003, 0x0001, 0x080c, 0x83c9, 0x080c,
-	0x894b, 0x0c10, 0x6007, 0x003b, 0x602f, 0x000b, 0x6017, 0x0000,
-	0x0804, 0xc5ca, 0x00e6, 0x0026, 0x080c, 0x6519, 0x0550, 0x080c,
-	0x6502, 0x080c, 0xd778, 0x1518, 0x2071, 0x1800, 0x70d8, 0x9085,
-	0x0003, 0x70da, 0x00f6, 0x2079, 0x0100, 0x72ac, 0x9284, 0x00ff,
-	0x707a, 0x78e6, 0x9284, 0xff00, 0x727c, 0x9205, 0x707e, 0x78ea,
-	0x00fe, 0x70e3, 0x0000, 0x080c, 0x6557, 0x0120, 0x2011, 0x19d1,
-	0x2013, 0x07d0, 0xd0ac, 0x1128, 0x080c, 0x2dbb, 0x0010, 0x080c,
-	0xd7aa, 0x002e, 0x00ee, 0x080c, 0x9e19, 0x0804, 0xc4a2, 0x080c,
-	0x9e19, 0x0005, 0x2600, 0x0002, 0xc6c6, 0xc6c6, 0xc6c6, 0xc6c6,
-	0xc6c6, 0xc6c8, 0xc6c6, 0xc6c6, 0xc6c6, 0xc6c6, 0xc6e5, 0xc6c6,
-	0xc6c6, 0xc6c6, 0xc6f7, 0xc704, 0xc735, 0xc6c6, 0x080c, 0x0db4,
-	0x080c, 0xd706, 0x1d20, 0x080c, 0x30f6, 0x1d08, 0x080c, 0xc84f,
-	0x1148, 0x7038, 0x6016, 0x6007, 0x0045, 0x6003, 0x0001, 0x080c,
-	0x8411, 0x0005, 0x080c, 0x2fd7, 0x080c, 0xc20e, 0x6007, 0x0001,
-	0x6003, 0x0001, 0x080c, 0x8411, 0x0005, 0x080c, 0xd706, 0x1938,
-	0x080c, 0x30f6, 0x1920, 0x080c, 0xc84f, 0x1d60, 0x703c, 0x6016,
-	0x6007, 0x004a, 0x6003, 0x0001, 0x080c, 0x8411, 0x0005, 0x080c,
-	0xc757, 0x0904, 0xc6af, 0x6007, 0x004e, 0x6003, 0x0001, 0x080c,
-	0x8411, 0x080c, 0x894b, 0x0005, 0x6007, 0x004f, 0x6017, 0x0000,
-	0x7134, 0x918c, 0x00ff, 0x81ff, 0x0508, 0x9186, 0x0001, 0x1160,
-	0x7140, 0x2001, 0x198e, 0x2004, 0x9106, 0x11b0, 0x7144, 0x2001,
-	0x198f, 0x2004, 0x9106, 0x0190, 0x9186, 0x0002, 0x1168, 0x2011,
-	0x0276, 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048, 0x2019, 0x000a,
-	0x080c, 0xadf4, 0x009e, 0x0110, 0x6017, 0x0001, 0x6003, 0x0001,
-	0x080c, 0x8411, 0x080c, 0x894b, 0x0005, 0x6007, 0x0050, 0x703c,
-	0x6016, 0x0ca0, 0x0016, 0x00e6, 0x2071, 0x0260, 0x00b6, 0x00c6,
-	0x2260, 0x6010, 0x2058, 0xb8bc, 0xd084, 0x0150, 0x7128, 0x6048,
-	0x9106, 0x1120, 0x712c, 0x6044, 0x9106, 0x0110, 0x9006, 0x0010,
-	0x9085, 0x0001, 0x00ce, 0x00be, 0x00ee, 0x001e, 0x0005, 0x0016,
-	0x0096, 0x0086, 0x00e6, 0x01c6, 0x01d6, 0x0126, 0x2091, 0x8000,
-	0x2071, 0x1800, 0x708c, 0x908a, 0x00f9, 0x16e8, 0x20e1, 0x0000,
-	0x2001, 0x1971, 0x2003, 0x0000, 0x080c, 0x1004, 0x05a0, 0x2900,
-	0x6016, 0x708c, 0x8004, 0xa816, 0x908a, 0x001e, 0x02d0, 0xa833,
-	0x001e, 0x20a9, 0x001e, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001b,
-	0x20a0, 0x2001, 0x1971, 0x0016, 0x200c, 0x0471, 0x001e, 0x2940,
-	0x080c, 0x1004, 0x01c0, 0x2900, 0xa006, 0x2100, 0x81ff, 0x0180,
-	0x0c18, 0xa832, 0x20a8, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001b,
-	0x20a0, 0x2001, 0x1971, 0x0016, 0x200c, 0x00b1, 0x001e, 0x0000,
-	0x9085, 0x0001, 0x0048, 0x2071, 0x1800, 0x708f, 0x0000, 0x6014,
-	0x2048, 0x080c, 0x0f9d, 0x9006, 0x012e, 0x01de, 0x01ce, 0x00ee,
-	0x008e, 0x009e, 0x001e, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036,
-	0x00c6, 0x918c, 0xffff, 0x11a8, 0x080c, 0x2241, 0x2099, 0x026c,
-	0x2001, 0x0014, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003, 0x00f8,
-	0x20a8, 0x4003, 0x22a8, 0x8108, 0x080c, 0x2241, 0x2099, 0x0260,
-	0x0ca8, 0x080c, 0x2241, 0x2061, 0x1971, 0x6004, 0x2098, 0x6008,
-	0x3518, 0x9312, 0x1218, 0x23a8, 0x4003, 0x0048, 0x20a8, 0x4003,
-	0x22a8, 0x8108, 0x080c, 0x2241, 0x2099, 0x0260, 0x0ca8, 0x2061,
-	0x1971, 0x2019, 0x0280, 0x3300, 0x931e, 0x0110, 0x6006, 0x0020,
-	0x2001, 0x0260, 0x6006, 0x8108, 0x2162, 0x9292, 0x0021, 0x9296,
-	0xffff, 0x620a, 0x00ce, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005,
-	0x0006, 0x0016, 0x0026, 0x0036, 0x00c6, 0x81ff, 0x11b8, 0x080c,
-	0x2259, 0x20a1, 0x024c, 0x2001, 0x0014, 0x3518, 0x9312, 0x1218,
-	0x23a8, 0x4003, 0x0418, 0x20a8, 0x4003, 0x82ff, 0x01f8, 0x22a8,
-	0x8108, 0x080c, 0x2259, 0x20a1, 0x0240, 0x0c98, 0x080c, 0x2259,
-	0x2061, 0x1974, 0x6004, 0x20a0, 0x6008, 0x3518, 0x9312, 0x1218,
-	0x23a8, 0x4003, 0x0058, 0x20a8, 0x4003, 0x82ff, 0x0138, 0x22a8,
-	0x8108, 0x080c, 0x2259, 0x20a1, 0x0240, 0x0c98, 0x2061, 0x1974,
-	0x2019, 0x0260, 0x3400, 0x931e, 0x0110, 0x6006, 0x0020, 0x2001,
-	0x0240, 0x6006, 0x8108, 0x2162, 0x9292, 0x0021, 0x9296, 0xffff,
-	0x620a, 0x00ce, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x00b6,
-	0x0066, 0x6610, 0x2658, 0xbe04, 0x96b4, 0xff00, 0x8637, 0x9686,
-	0x0006, 0x0170, 0x9686, 0x0004, 0x0158, 0xbe04, 0x96b4, 0x00ff,
-	0x9686, 0x0006, 0x0128, 0x9686, 0x0004, 0x0110, 0x9085, 0x0001,
-	0x006e, 0x00be, 0x0005, 0x00d6, 0x080c, 0xc8e7, 0x00de, 0x0005,
-	0x00d6, 0x080c, 0xc8f4, 0x1520, 0x680c, 0x908c, 0xff00, 0x6820,
-	0x9084, 0x00ff, 0x9115, 0x6216, 0x6824, 0x602e, 0xd1e4, 0x0130,
-	0x9006, 0x080c, 0xd822, 0x2009, 0x0001, 0x0078, 0xd1ec, 0x0180,
-	0x6920, 0x918c, 0x00ff, 0x6824, 0x080c, 0x2663, 0x1148, 0x2001,
-	0x0001, 0x080c, 0xd822, 0x2110, 0x900e, 0x080c, 0x301c, 0x0018,
-	0x9085, 0x0001, 0x0008, 0x9006, 0x00de, 0x0005, 0x00b6, 0x00c6,
-	0x080c, 0x9e66, 0x05a8, 0x0016, 0x0026, 0x00c6, 0x2011, 0x0263,
-	0x2204, 0x8211, 0x220c, 0x080c, 0x2663, 0x1578, 0x080c, 0x61d7,
-	0x1560, 0xbe12, 0xbd16, 0x00ce, 0x002e, 0x001e, 0x2b00, 0x6012,
-	0x080c, 0xd706, 0x11d8, 0x080c, 0x30f6, 0x11c0, 0x080c, 0xc84f,
-	0x0510, 0x2001, 0x0007, 0x080c, 0x6188, 0x2001, 0x0007, 0x080c,
-	0x61b4, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001, 0x6003,
-	0x0001, 0x080c, 0x8411, 0x080c, 0x894b, 0x0010, 0x080c, 0x9e19,
-	0x9085, 0x0001, 0x00ce, 0x00be, 0x0005, 0x080c, 0x9e19, 0x00ce,
-	0x002e, 0x001e, 0x0ca8, 0x080c, 0x9e19, 0x9006, 0x0c98, 0x2069,
-	0x026d, 0x6800, 0x9082, 0x0010, 0x1228, 0x6017, 0x0000, 0x9085,
-	0x0001, 0x0008, 0x9006, 0x0005, 0x6017, 0x0000, 0x2069, 0x026c,
-	0x6808, 0x9084, 0xff00, 0x9086, 0x0800, 0x1190, 0x6904, 0x9186,
-	0x0018, 0x0118, 0x9186, 0x0014, 0x1158, 0x810f, 0x6800, 0x9084,
-	0x00ff, 0x910d, 0x615a, 0x908e, 0x0014, 0x0110, 0x908e, 0x0010,
-	0x0005, 0x6004, 0x90b2, 0x0053, 0x1a0c, 0x0db4, 0x91b6, 0x0013,
-	0x1130, 0x2008, 0x91b2, 0x0040, 0x1a04, 0xca3c, 0x0092, 0x91b6,
-	0x0027, 0x0120, 0x91b6, 0x0014, 0x190c, 0x0db4, 0x2001, 0x0007,
-	0x080c, 0x61b4, 0x080c, 0x8846, 0x080c, 0x9e49, 0x080c, 0x894b,
-	0x0005, 0xc971, 0xc973, 0xc971, 0xc971, 0xc971, 0xc973, 0xc982,
-	0xca35, 0xc9d4, 0xca35, 0xc9e6, 0xca35, 0xc982, 0xca35, 0xca2d,
-	0xca35, 0xca2d, 0xca35, 0xca35, 0xc971, 0xc971, 0xc971, 0xc971,
-	0xc971, 0xc971, 0xc971, 0xc971, 0xc971, 0xc971, 0xc971, 0xc973,
-	0xc971, 0xca35, 0xc971, 0xc971, 0xca35, 0xc971, 0xca32, 0xca35,
-	0xc971, 0xc971, 0xc971, 0xc971, 0xca35, 0xca35, 0xc971, 0xca35,
-	0xca35, 0xc971, 0xc97d, 0xc971, 0xc971, 0xc971, 0xc971, 0xca31,
-	0xca35, 0xc971, 0xc971, 0xca35, 0xca35, 0xc971, 0xc971, 0xc971,
-	0xc971, 0x080c, 0x0db4, 0x080c, 0x8846, 0x080c, 0xc211, 0x6003,
-	0x0002, 0x080c, 0x894b, 0x0804, 0xca3b, 0x9006, 0x080c, 0x6174,
-	0x0804, 0xca35, 0x080c, 0x6553, 0x1904, 0xca35, 0x9006, 0x080c,
-	0x6174, 0x6010, 0x2058, 0xb810, 0x9086, 0x00ff, 0x1140, 0x00f6,
-	0x2079, 0x1800, 0x78a4, 0x8000, 0x78a6, 0x00fe, 0x0428, 0x6010,
-	0x2058, 0xb8b0, 0x9005, 0x1178, 0x080c, 0xc1f9, 0x1904, 0xca35,
-	0x0036, 0x0046, 0xbba0, 0x2021, 0x0007, 0x080c, 0x4a6f, 0x004e,
-	0x003e, 0x0804, 0xca35, 0x080c, 0x3127, 0x1904, 0xca35, 0x2001,
-	0x1800, 0x2004, 0x9086, 0x0002, 0x1138, 0x00f6, 0x2079, 0x1800,
-	0x78a4, 0x8000, 0x78a6, 0x00fe, 0x2001, 0x0002, 0x080c, 0x6188,
-	0x080c, 0x8846, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002,
-	0x080c, 0x8411, 0x080c, 0x894b, 0x6110, 0x2158, 0x2009, 0x0001,
-	0x080c, 0x801e, 0x0804, 0xca3b, 0x6610, 0x2658, 0xbe04, 0x96b4,
-	0xff00, 0x8637, 0x9686, 0x0006, 0x0904, 0xca35, 0x9686, 0x0004,
-	0x0904, 0xca35, 0x2001, 0x0004, 0x0804, 0xca33, 0x2001, 0x1800,
-	0x2004, 0x9086, 0x0003, 0x1158, 0x0036, 0x0046, 0x6010, 0x2058,
-	0xbba0, 0x2021, 0x0006, 0x080c, 0x4a6f, 0x004e, 0x003e, 0x2001,
-	0x0006, 0x080c, 0xca59, 0x6610, 0x2658, 0xbe04, 0x0066, 0x96b4,
-	0xff00, 0x8637, 0x9686, 0x0006, 0x006e, 0x0168, 0x2001, 0x0006,
-	0x080c, 0x61b4, 0x9284, 0x00ff, 0x908e, 0x0007, 0x1120, 0x2001,
-	0x0006, 0x080c, 0x6188, 0x080c, 0x6553, 0x11f8, 0x2001, 0x1836,
-	0x2004, 0xd0a4, 0x01d0, 0xbe04, 0x96b4, 0x00ff, 0x9686, 0x0006,
-	0x01a0, 0x00f6, 0x2079, 0x1800, 0x78a4, 0x8000, 0x78a6, 0x00fe,
-	0x0804, 0xc9bc, 0x2001, 0x0004, 0x0030, 0x2001, 0x0006, 0x0449,
-	0x0020, 0x0018, 0x0010, 0x080c, 0x61b4, 0x080c, 0x8846, 0x080c,
-	0x9e19, 0x080c, 0x894b, 0x0005, 0x2600, 0x0002, 0xca50, 0xca50,
-	0xca50, 0xca50, 0xca50, 0xca52, 0xca50, 0xca50, 0xca50, 0xca50,
-	0xca52, 0xca50, 0xca50, 0xca50, 0xca52, 0xca52, 0xca52, 0xca52,
-	0x080c, 0x0db4, 0x080c, 0x8846, 0x080c, 0x9e19, 0x080c, 0x894b,
-	0x0005, 0x0016, 0x00b6, 0x00d6, 0x6110, 0x2158, 0xb900, 0xd184,
-	0x0138, 0x080c, 0x6188, 0x9006, 0x080c, 0x6174, 0x080c, 0x2ffc,
-	0x00de, 0x00be, 0x001e, 0x0005, 0x6610, 0x2658, 0xb804, 0x9084,
-	0xff00, 0x8007, 0x90b2, 0x000c, 0x1a0c, 0x0db4, 0x91b6, 0x0015,
-	0x1110, 0x003b, 0x0028, 0x91b6, 0x0016, 0x190c, 0x0db4, 0x006b,
-	0x0005, 0xa888, 0xa888, 0xa888, 0xa888, 0xa888, 0xa888, 0xcad4,
-	0xca99, 0xa888, 0xa888, 0xa888, 0xa888, 0xa888, 0xa888, 0xa888,
-	0xa888, 0xa888, 0xa888, 0xcad4, 0xcadb, 0xa888, 0xa888, 0xa888,
-	0xa888, 0x00f6, 0x080c, 0x6553, 0x11d8, 0x080c, 0xc1f9, 0x11c0,
-	0x6010, 0x905d, 0x01a8, 0xb8b0, 0x9005, 0x0190, 0x9006, 0x080c,
-	0x6174, 0x2001, 0x0002, 0x080c, 0x6188, 0x6023, 0x0001, 0x6003,
-	0x0001, 0x6007, 0x0002, 0x080c, 0x8411, 0x080c, 0x894b, 0x00d0,
-	0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x2663, 0x1190,
-	0x080c, 0x6237, 0x0118, 0x080c, 0x9e19, 0x0060, 0xb810, 0x0006,
-	0xb814, 0x0006, 0x080c, 0x5ce4, 0x000e, 0xb816, 0x000e, 0xb812,
-	0x080c, 0x9e19, 0x00fe, 0x0005, 0x6604, 0x96b6, 0x001e, 0x1110,
-	0x080c, 0x9e19, 0x0005, 0x080c, 0xac6c, 0x1148, 0x6003, 0x0001,
-	0x6007, 0x0001, 0x080c, 0x8411, 0x080c, 0x894b, 0x0010, 0x080c,
-	0x9e19, 0x0005, 0x6004, 0x908a, 0x0053, 0x1a0c, 0x0db4, 0x080c,
-	0x8846, 0x080c, 0x9e49, 0x080c, 0x894b, 0x0005, 0x9182, 0x0040,
-	0x0002, 0xcb0c, 0xcb0c, 0xcb0c, 0xcb0c, 0xcb0e, 0xcb0c, 0xcb0c,
-	0xcb0c, 0xcb0c, 0xcb0c, 0xcb0c, 0xcb0c, 0xcb0c, 0xcb0c, 0xcb0c,
-	0xcb0c, 0xcb0c, 0xcb0c, 0xcb0c, 0x080c, 0x0db4, 0x0096, 0x00b6,
-	0x00d6, 0x00e6, 0x00f6, 0x0046, 0x0026, 0x6210, 0x2258, 0xb8ac,
-	0x9005, 0x11a8, 0x6106, 0x2071, 0x0260, 0x7444, 0x94a4, 0xff00,
-	0x0904, 0xcb74, 0x080c, 0xd816, 0x1170, 0x9486, 0x2000, 0x1158,
-	0x2009, 0x0001, 0x2011, 0x0200, 0x080c, 0x8207, 0x0020, 0x9026,
-	0x080c, 0xd74b, 0x0c38, 0x080c, 0x0feb, 0x090c, 0x0db4, 0x6003,
-	0x0007, 0xa867, 0x010d, 0x9006, 0xa802, 0xa86a, 0xac8a, 0x2c00,
-	0xa88e, 0x6008, 0xa8e2, 0x6010, 0x2058, 0xb8a0, 0x7130, 0xa97a,
-	0x0016, 0xa876, 0xa87f, 0x0000, 0xa883, 0x0000, 0xa887, 0x0036,
-	0x080c, 0x6885, 0x001e, 0x080c, 0xd816, 0x1904, 0xcbd4, 0x9486,
-	0x2000, 0x1130, 0x2019, 0x0017, 0x080c, 0xd486, 0x0804, 0xcbd4,
-	0x9486, 0x0200, 0x1120, 0x080c, 0xd422, 0x0804, 0xcbd4, 0x9486,
-	0x0400, 0x0120, 0x9486, 0x1000, 0x1904, 0xcbd4, 0x2019, 0x0002,
-	0x080c, 0xd43d, 0x0804, 0xcbd4, 0x2069, 0x1a41, 0x6a00, 0xd284,
-	0x0904, 0xcc3e, 0x9284, 0x0300, 0x1904, 0xcc37, 0x6804, 0x9005,
-	0x0904, 0xcc1f, 0x2d78, 0x6003, 0x0007, 0x080c, 0x1004, 0x0904,
-	0xcbe0, 0x7800, 0xd08c, 0x1118, 0x7804, 0x8001, 0x7806, 0x6017,
-	0x0000, 0x2001, 0x180f, 0x2004, 0xd084, 0x1904, 0xcc42, 0x9006,
-	0xa802, 0xa867, 0x0116, 0xa86a, 0x6008, 0xa8e2, 0x2c00, 0xa87a,
-	0x6010, 0x2058, 0xb8a0, 0x7130, 0xa9b6, 0xa876, 0xb928, 0xa9ba,
-	0xb92c, 0xa9be, 0xb930, 0xa9c2, 0xb934, 0xa9c6, 0xa883, 0x003d,
-	0x7044, 0x9084, 0x0003, 0x9080, 0xcbdc, 0x2005, 0xa87e, 0x20a9,
-	0x000a, 0x2001, 0x0270, 0xaa5c, 0x9290, 0x0021, 0x2009, 0x0205,
-	0x200b, 0x0080, 0x20e1, 0x0000, 0xab60, 0x23e8, 0x2098, 0x22a0,
-	0x4003, 0x200b, 0x0000, 0x2001, 0x027a, 0x200c, 0xa9b2, 0x8000,
-	0x200c, 0xa9ae, 0x080c, 0x6885, 0x002e, 0x004e, 0x00fe, 0x00ee,
-	0x00de, 0x00be, 0x009e, 0x0005, 0x0000, 0x0080, 0x0040, 0x0000,
-	0x2001, 0x1810, 0x2004, 0xd084, 0x0120, 0x080c, 0x0feb, 0x1904,
-	0xcb89, 0x6017, 0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c,
-	0x83c9, 0x080c, 0x894b, 0x0c00, 0x2069, 0x0260, 0x6848, 0x9084,
-	0xff00, 0x9086, 0x1200, 0x1198, 0x686c, 0x9084, 0x00ff, 0x0016,
-	0x6114, 0x918c, 0xf700, 0x910d, 0x6116, 0x001e, 0x6003, 0x0001,
-	0x6007, 0x0043, 0x080c, 0x83c9, 0x080c, 0x894b, 0x0828, 0x6868,
-	0x602e, 0x686c, 0x6032, 0x6017, 0xf200, 0x6003, 0x0001, 0x6007,
-	0x0041, 0x080c, 0x83c9, 0x080c, 0x894b, 0x0804, 0xcbd4, 0x2001,
-	0x180e, 0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x48d2,
-	0x6017, 0xf300, 0x0010, 0x6017, 0xf100, 0x6003, 0x0001, 0x6007,
-	0x0041, 0x080c, 0x83c9, 0x080c, 0x894b, 0x0804, 0xcbd4, 0x6017,
-	0xf500, 0x0c98, 0x6017, 0xf600, 0x0804, 0xcbf4, 0x6017, 0xf200,
-	0x0804, 0xcbf4, 0xa867, 0x0146, 0xa86b, 0x0000, 0x6008, 0xa886,
-	0x2c00, 0xa87a, 0x7044, 0x9084, 0x0003, 0x9080, 0xcbdc, 0x2005,
-	0xa87e, 0x2928, 0x6010, 0x2058, 0xb8a0, 0xa876, 0xb828, 0xa88a,
-	0xb82c, 0xa88e, 0xb830, 0xa892, 0xb834, 0xa896, 0xa883, 0x003d,
-	0x2009, 0x0205, 0x2104, 0x9085, 0x0080, 0x200a, 0x20e1, 0x0000,
-	0x2011, 0x0210, 0x2214, 0x9294, 0x0fff, 0xaaa2, 0x9282, 0x0111,
-	0x1a0c, 0x0db4, 0x8210, 0x821c, 0x2001, 0x026c, 0x2098, 0xa860,
-	0x20e8, 0xa85c, 0x9080, 0x0029, 0x20a0, 0x2011, 0xccbe, 0x2041,
-	0x0001, 0x223d, 0x9784, 0x00ff, 0x9322, 0x1208, 0x2300, 0x20a8,
-	0x4003, 0x931a, 0x0530, 0x8210, 0xd7fc, 0x1130, 0x8d68, 0x2d0a,
-	0x2001, 0x0260, 0x2098, 0x0c68, 0x2950, 0x080c, 0x1004, 0x0170,
-	0x2900, 0xb002, 0xa867, 0x0147, 0xa86b, 0x0000, 0xa860, 0x20e8,
-	0xa85c, 0x9080, 0x001b, 0x20a0, 0x8840, 0x08d8, 0x2548, 0xa800,
-	0x902d, 0x0118, 0x080c, 0x101d, 0x0cc8, 0x080c, 0x101d, 0x0804,
-	0xcbe0, 0x2548, 0x8847, 0x9885, 0x0046, 0xa866, 0x2009, 0x0205,
-	0x200b, 0x0000, 0x080c, 0xd4b5, 0x0804, 0xcbd4, 0x8010, 0x0004,
-	0x801a, 0x0006, 0x8018, 0x0008, 0x8016, 0x000a, 0x8014, 0x9186,
-	0x0013, 0x1160, 0x6004, 0x908a, 0x0054, 0x1a0c, 0x0db4, 0x9082,
-	0x0040, 0x0a0c, 0x0db4, 0x2008, 0x0804, 0xcd6f, 0x9186, 0x0051,
-	0x0108, 0x00c0, 0x2001, 0x0109, 0x2004, 0xd084, 0x0904, 0xcd20,
-	0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026, 0x080c, 0x82b5,
-	0x002e, 0x001e, 0x000e, 0x012e, 0x6000, 0x9086, 0x0002, 0x1580,
-	0x0804, 0xcdb7, 0x9186, 0x0027, 0x0530, 0x9186, 0x0048, 0x0128,
-	0x9186, 0x0014, 0x0500, 0x190c, 0x0db4, 0x2001, 0x0109, 0x2004,
-	0xd084, 0x01f0, 0x00c6, 0x0126, 0x2091, 0x2800, 0x00c6, 0x2061,
-	0x0100, 0x0006, 0x0016, 0x0026, 0x080c, 0x82b5, 0x002e, 0x001e,
-	0x000e, 0x00ce, 0x012e, 0x00ce, 0x6000, 0x9086, 0x0004, 0x190c,
-	0x0db4, 0x0804, 0xce98, 0x6004, 0x9082, 0x0040, 0x2008, 0x001a,
-	0x080c, 0x9eae, 0x0005, 0xcd36, 0xcd38, 0xcd38, 0xcd5f, 0xcd36,
-	0xcd36, 0xcd36, 0xcd36, 0xcd36, 0xcd36, 0xcd36, 0xcd36, 0xcd36,
-	0xcd36, 0xcd36, 0xcd36, 0xcd36, 0xcd36, 0xcd36, 0x080c, 0x0db4,
-	0x080c, 0x8846, 0x080c, 0x894b, 0x0036, 0x0096, 0x6014, 0x904d,
-	0x01d8, 0x080c, 0xbafe, 0x01c0, 0x6003, 0x0002, 0x6010, 0x00b6,
-	0x2058, 0xb800, 0x00be, 0xd0bc, 0x1178, 0x2019, 0x0004, 0x080c,
-	0xd4b5, 0x6017, 0x0000, 0x6018, 0x9005, 0x1120, 0x2001, 0x1958,
-	0x2004, 0x601a, 0x6003, 0x0007, 0x009e, 0x003e, 0x0005, 0x0096,
-	0x080c, 0x8846, 0x080c, 0x894b, 0x080c, 0xbafe, 0x0120, 0x6014,
-	0x2048, 0x080c, 0x101d, 0x080c, 0x9e49, 0x009e, 0x0005, 0x0002,
-	0xcd83, 0xcd9a, 0xcd85, 0xcdb1, 0xcd83, 0xcd83, 0xcd83, 0xcd83,
-	0xcd83, 0xcd83, 0xcd83, 0xcd83, 0xcd83, 0xcd83, 0xcd83, 0xcd83,
-	0xcd83, 0xcd83, 0xcd83, 0x080c, 0x0db4, 0x0096, 0x080c, 0x8846,
-	0x6014, 0x2048, 0xa87c, 0xd0b4, 0x0138, 0x6003, 0x0007, 0x2009,
-	0x0043, 0x080c, 0x9e93, 0x0010, 0x6003, 0x0004, 0x080c, 0x894b,
-	0x009e, 0x0005, 0x080c, 0x8846, 0x080c, 0xbafe, 0x0138, 0x6114,
-	0x0096, 0x2148, 0xa97c, 0x009e, 0xd1ec, 0x1138, 0x080c, 0x81dc,
-	0x080c, 0x9e19, 0x080c, 0x894b, 0x0005, 0x080c, 0xd70f, 0x0db0,
-	0x0cc8, 0x080c, 0x8846, 0x2009, 0x0041, 0x0804, 0xcf20, 0x9182,
-	0x0040, 0x0002, 0xcdcd, 0xcdcf, 0xcdcd, 0xcdcd, 0xcdcd, 0xcdcd,
-	0xcdcd, 0xcdcd, 0xcdcd, 0xcdcd, 0xcdcd, 0xcdcd, 0xcdcd, 0xcdcd,
-	0xcdcd, 0xcdcd, 0xcdcd, 0xcdd0, 0xcdcd, 0x080c, 0x0db4, 0x0005,
-	0x00d6, 0x080c, 0x81dc, 0x00de, 0x080c, 0xd767, 0x080c, 0x9e19,
-	0x0005, 0x9182, 0x0040, 0x0002, 0xcdef, 0xcdef, 0xcdef, 0xcdef,
-	0xcdef, 0xcdef, 0xcdef, 0xcdef, 0xcdef, 0xcdf1, 0xce60, 0xcdef,
-	0xcdef, 0xcdef, 0xcdef, 0xce60, 0xcdef, 0xcdef, 0xcdef, 0x080c,
-	0x0db4, 0x2001, 0x0105, 0x2004, 0x9084, 0x1800, 0x01c8, 0x2001,
-	0x0132, 0x200c, 0x2001, 0x0131, 0x2004, 0x9105, 0x1904, 0xce60,
-	0x2009, 0x180c, 0x2104, 0xd0d4, 0x0904, 0xce60, 0xc0d4, 0x200a,
-	0x2009, 0x0105, 0x2104, 0x9084, 0xe7fd, 0x9085, 0x0010, 0x200a,
-	0x2001, 0x1873, 0x2004, 0xd0e4, 0x1528, 0x603b, 0x0000, 0x080c,
-	0x88fb, 0x6014, 0x0096, 0x2048, 0xa87c, 0xd0fc, 0x0188, 0x908c,
-	0x0003, 0x918e, 0x0002, 0x0508, 0x2001, 0x180c, 0x2004, 0xd0d4,
-	0x11e0, 0x080c, 0x8a26, 0x2009, 0x0041, 0x009e, 0x0804, 0xcf20,
-	0x080c, 0x8a26, 0x6003, 0x0007, 0x601b, 0x0000, 0x080c, 0x81dc,
-	0x009e, 0x0005, 0x2001, 0x0100, 0x2004, 0x9082, 0x0005, 0x0aa8,
-	0x2001, 0x011f, 0x2004, 0x603a, 0x0890, 0x2001, 0x180c, 0x200c,
-	0xc1d4, 0x2102, 0xd1cc, 0x0110, 0x080c, 0x2a77, 0x080c, 0x8a26,
-	0x6014, 0x2048, 0xa97c, 0xd1ec, 0x1130, 0x080c, 0x81dc, 0x080c,
-	0x9e19, 0x009e, 0x0005, 0x080c, 0xd70f, 0x0db8, 0x009e, 0x0005,
-	0x2001, 0x180c, 0x200c, 0xc1d4, 0x2102, 0x0036, 0x080c, 0x88fb,
-	0x080c, 0x8a26, 0x6014, 0x0096, 0x2048, 0x6010, 0x00b6, 0x2058,
-	0xb800, 0x00be, 0xd0bc, 0x0188, 0xa87c, 0x9084, 0x0003, 0x9086,
-	0x0002, 0x0140, 0xa8ac, 0x6330, 0x931a, 0x6332, 0xa8b0, 0x632c,
-	0x931b, 0x632e, 0x6003, 0x0002, 0x0080, 0x2019, 0x0004, 0x080c,
-	0xd4b5, 0x6018, 0x9005, 0x1128, 0x2001, 0x1958, 0x2004, 0x8003,
-	0x601a, 0x6017, 0x0000, 0x6003, 0x0007, 0x009e, 0x003e, 0x0005,
-	0x9182, 0x0040, 0x0002, 0xceaf, 0xceaf, 0xceaf, 0xceaf, 0xceaf,
-	0xceaf, 0xceaf, 0xceaf, 0xceb1, 0xceaf, 0xceaf, 0xceaf, 0xceaf,
-	0xceaf, 0xceaf, 0xceaf, 0xceaf, 0xceaf, 0xceaf, 0xcefc, 0x080c,
-	0x0db4, 0x6014, 0x0096, 0x2048, 0xa834, 0xaa38, 0x6110, 0x00b6,
-	0x2158, 0xb900, 0x00be, 0xd1bc, 0x1190, 0x920d, 0x1518, 0xa87c,
-	0xd0fc, 0x0128, 0x2009, 0x0041, 0x009e, 0x0804, 0xcf20, 0x6003,
-	0x0007, 0x601b, 0x0000, 0x080c, 0x81dc, 0x009e, 0x0005, 0x6124,
-	0xd1f4, 0x1d58, 0x0006, 0x0046, 0xacac, 0x9422, 0xa9b0, 0x2200,
-	0x910b, 0x6030, 0x9420, 0x6432, 0x602c, 0x9109, 0x612e, 0x004e,
-	0x000e, 0x08d8, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1bc,
-	0x1178, 0x2009, 0x180e, 0x210c, 0xd19c, 0x0118, 0x6003, 0x0007,
-	0x0010, 0x6003, 0x0006, 0x00e9, 0x080c, 0x81de, 0x009e, 0x0005,
-	0x6003, 0x0002, 0x009e, 0x0005, 0x6024, 0xd0f4, 0x0128, 0x080c,
-	0x150f, 0x1904, 0xceb1, 0x0005, 0x6014, 0x0096, 0x2048, 0xa834,
-	0xa938, 0x009e, 0x9105, 0x1120, 0x080c, 0x150f, 0x1904, 0xceb1,
-	0x0005, 0xd2fc, 0x0140, 0x8002, 0x8000, 0x8212, 0x9291, 0x0000,
-	0x2009, 0x0009, 0x0010, 0x2009, 0x0015, 0xaa9a, 0xa896, 0x0005,
-	0x9182, 0x0040, 0x0208, 0x0062, 0x9186, 0x0013, 0x0120, 0x9186,
-	0x0014, 0x190c, 0x0db4, 0x6024, 0xd0dc, 0x090c, 0x0db4, 0x0005,
-	0xcf43, 0xcf4f, 0xcf5b, 0xcf67, 0xcf43, 0xcf43, 0xcf43, 0xcf43,
-	0xcf4a, 0xcf45, 0xcf45, 0xcf43, 0xcf43, 0xcf43, 0xcf43, 0xcf45,
-	0xcf43, 0xcf45, 0xcf43, 0x080c, 0x0db4, 0x6024, 0xd0dc, 0x090c,
-	0x0db4, 0x0005, 0x6014, 0x9005, 0x190c, 0x0db4, 0x0005, 0x6003,
-	0x0001, 0x6106, 0x080c, 0x83c9, 0x0126, 0x2091, 0x8000, 0x080c,
-	0x894b, 0x012e, 0x0005, 0x6003, 0x0001, 0x6106, 0x080c, 0x83c9,
-	0x0126, 0x2091, 0x8000, 0x080c, 0x894b, 0x012e, 0x0005, 0x6003,
-	0x0003, 0x6106, 0x2c10, 0x080c, 0x1a5c, 0x0126, 0x2091, 0x8000,
-	0x080c, 0x842e, 0x080c, 0x8a26, 0x012e, 0x0005, 0x0126, 0x2091,
-	0x8000, 0x0036, 0x0096, 0x9182, 0x0040, 0x0023, 0x009e, 0x003e,
-	0x012e, 0x0005, 0xcf92, 0xcf94, 0xcfa6, 0xcfc0, 0xcf92, 0xcf92,
-	0xcf92, 0xcf92, 0xcf92, 0xcf92, 0xcf92, 0xcf92, 0xcf92, 0xcf92,
-	0xcf92, 0xcf92, 0x080c, 0x0db4, 0x6014, 0x2048, 0xa87c, 0xd0fc,
-	0x01f8, 0x909c, 0x0003, 0x939e, 0x0003, 0x01d0, 0x6003, 0x0001,
-	0x6106, 0x080c, 0x83c9, 0x080c, 0x894b, 0x0470, 0x6014, 0x2048,
-	0xa87c, 0xd0fc, 0x0168, 0x909c, 0x0003, 0x939e, 0x0003, 0x0140,
-	0x6003, 0x0001, 0x6106, 0x080c, 0x83c9, 0x080c, 0x894b, 0x00e0,
-	0x901e, 0x6316, 0x631a, 0x2019, 0x0004, 0x080c, 0xd4b5, 0x00a0,
-	0x6014, 0x2048, 0xa87c, 0xd0fc, 0x0d98, 0x909c, 0x0003, 0x939e,
-	0x0003, 0x0d70, 0x6003, 0x0003, 0x6106, 0x2c10, 0x080c, 0x1a5c,
-	0x080c, 0x842e, 0x080c, 0x8a26, 0x0005, 0x080c, 0x8846, 0x6114,
-	0x81ff, 0x0158, 0x0096, 0x2148, 0x080c, 0xd7b3, 0x0036, 0x2019,
-	0x0029, 0x080c, 0xd4b5, 0x003e, 0x009e, 0x080c, 0x9e49, 0x080c,
-	0x894b, 0x0005, 0x080c, 0x88fb, 0x6114, 0x81ff, 0x0158, 0x0096,
-	0x2148, 0x080c, 0xd7b3, 0x0036, 0x2019, 0x0029, 0x080c, 0xd4b5,
-	0x003e, 0x009e, 0x080c, 0x9e49, 0x080c, 0x8a26, 0x0005, 0x9182,
-	0x0085, 0x0002, 0xd011, 0xd00f, 0xd00f, 0xd01d, 0xd00f, 0xd00f,
-	0xd00f, 0xd00f, 0xd00f, 0xd00f, 0xd00f, 0xd00f, 0xd00f, 0x080c,
-	0x0db4, 0x6003, 0x000b, 0x6106, 0x080c, 0x83c9, 0x0126, 0x2091,
-	0x8000, 0x080c, 0x894b, 0x012e, 0x0005, 0x0026, 0x00e6, 0x080c,
-	0xd706, 0x0118, 0x080c, 0x9e19, 0x0450, 0x2071, 0x0260, 0x7224,
-	0x6216, 0x2001, 0x180e, 0x2004, 0xd0e4, 0x0150, 0x6010, 0x00b6,
-	0x2058, 0xbca0, 0x00be, 0x2c00, 0x2011, 0x014e, 0x080c, 0xa139,
-	0x7220, 0x080c, 0xd35b, 0x0118, 0x6007, 0x0086, 0x0040, 0x6007,
-	0x0087, 0x7224, 0x9296, 0xffff, 0x1110, 0x6007, 0x0086, 0x6003,
-	0x0001, 0x080c, 0x83c9, 0x080c, 0x894b, 0x080c, 0x8a26, 0x00ee,
-	0x002e, 0x0005, 0x9186, 0x0013, 0x1160, 0x6004, 0x908a, 0x0085,
-	0x0a0c, 0x0db4, 0x908a, 0x0092, 0x1a0c, 0x0db4, 0x9082, 0x0085,
-	0x00a2, 0x9186, 0x0027, 0x0130, 0x9186, 0x0014, 0x0118, 0x080c,
-	0x9eae, 0x0050, 0x2001, 0x0007, 0x080c, 0x61b4, 0x080c, 0x8846,
-	0x080c, 0x9e49, 0x080c, 0x894b, 0x0005, 0xd082, 0xd084, 0xd084,
-	0xd082, 0xd082, 0xd082, 0xd082, 0xd082, 0xd082, 0xd082, 0xd082,
-	0xd082, 0xd082, 0x080c, 0x0db4, 0x080c, 0x8846, 0x080c, 0x9e49,
-	0x080c, 0x894b, 0x0005, 0x9182, 0x0085, 0x0a0c, 0x0db4, 0x9182,
-	0x0092, 0x1a0c, 0x0db4, 0x9182, 0x0085, 0x0002, 0xd0a3, 0xd0a3,
-	0xd0a3, 0xd0a5, 0xd0a3, 0xd0a3, 0xd0a3, 0xd0a3, 0xd0a3, 0xd0a3,
-	0xd0a3, 0xd0a3, 0xd0a3, 0x080c, 0x0db4, 0x0005, 0x9186, 0x0013,
+	0x9115, 0x190c, 0xb227, 0xa890, 0xb092, 0xa88c, 0xb08e, 0xa87c,
+	0xb07e, 0x00ae, 0x080c, 0x0f9d, 0x009e, 0x080c, 0xc1b7, 0xa974,
+	0x0016, 0x080c, 0xb702, 0x001e, 0x0468, 0xa867, 0x0103, 0xa974,
+	0x9184, 0x00ff, 0x90b6, 0x0002, 0x01b0, 0x9086, 0x0028, 0x1118,
+	0xa87b, 0x001c, 0x00d0, 0xd1dc, 0x0148, 0xa87b, 0x0015, 0x080c,
+	0xc0da, 0x0118, 0xa974, 0xc1dc, 0xa976, 0x0078, 0xd1d4, 0x0118,
+	0xa87b, 0x0007, 0x0050, 0xa87b, 0x0000, 0xa87c, 0xd0ac, 0x0128,
+	0xa834, 0xa938, 0x9115, 0x190c, 0xb227, 0xa974, 0x0016, 0x080c,
+	0x66a7, 0x001e, 0xd1e4, 0x1120, 0x080c, 0x9e32, 0x009e, 0x0005,
+	0x080c, 0xbe10, 0x0cd8, 0x6114, 0x0096, 0x2148, 0xa97c, 0xd1e4,
+	0x190c, 0x18f9, 0x009e, 0x0005, 0x080c, 0x886e, 0x0010, 0x080c,
+	0x8923, 0x080c, 0xbb17, 0x01f0, 0x0096, 0x6114, 0x2148, 0x080c,
+	0xbd1d, 0x1118, 0x080c, 0xa7c0, 0x00a0, 0xa867, 0x0103, 0x2009,
+	0x180c, 0x210c, 0xd18c, 0x11b8, 0xd184, 0x1190, 0x6108, 0xa97a,
+	0x918e, 0x0029, 0x1110, 0x080c, 0xd7d3, 0xa877, 0x0000, 0x080c,
+	0x688c, 0x009e, 0x080c, 0x9e32, 0x080c, 0x8973, 0x0804, 0x8a4e,
+	0xa87b, 0x0004, 0x0c90, 0xa87b, 0x0004, 0x0c78, 0x9182, 0x0054,
+	0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xb48a, 0xb48a,
+	0xb48a, 0xb48a, 0xb48a, 0xb48c, 0xb48a, 0xb48a, 0xb48a, 0xb48a,
+	0xb48a, 0xb48a, 0xb48a, 0xb48a, 0xb48a, 0xb48a, 0xb48a, 0xb48a,
+	0xb48a, 0xb48a, 0x080c, 0x0db4, 0x080c, 0x538e, 0x01f8, 0x6014,
+	0x7144, 0x918c, 0x0fff, 0x9016, 0xd1c4, 0x0118, 0x7264, 0x9294,
+	0x00ff, 0x0096, 0x904d, 0x0188, 0xa87b, 0x0000, 0xa864, 0x9086,
+	0x0139, 0x0128, 0xa867, 0x0103, 0xa976, 0xaa96, 0x0030, 0xa897,
+	0x4000, 0xa99a, 0xaa9e, 0x080c, 0x688c, 0x009e, 0x0804, 0x9e32,
+	0x9182, 0x0085, 0x0002, 0xb4c2, 0xb4c0, 0xb4c0, 0xb4ce, 0xb4c0,
+	0xb4c0, 0xb4c0, 0xb4c0, 0xb4c0, 0xb4c0, 0xb4c0, 0xb4c0, 0xb4c0,
+	0x080c, 0x0db4, 0x6003, 0x0001, 0x6106, 0x080c, 0x83f1, 0x0126,
+	0x2091, 0x8000, 0x080c, 0x8973, 0x012e, 0x0005, 0x0026, 0x0056,
+	0x00d6, 0x00e6, 0x2071, 0x0260, 0x7224, 0x6216, 0x7220, 0x080c,
+	0xbb05, 0x01a0, 0x2268, 0x6800, 0x9086, 0x0000, 0x0178, 0x6010,
+	0x6d10, 0x952e, 0x1158, 0x00c6, 0x2d60, 0x080c, 0xb73d, 0x00ce,
+	0x0128, 0x6803, 0x0002, 0x6007, 0x0086, 0x0010, 0x6007, 0x0087,
+	0x6003, 0x0001, 0x080c, 0x83f1, 0x080c, 0x8973, 0x9280, 0x0004,
+	0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0140, 0x6824, 0xd0ec,
+	0x0128, 0x00c6, 0x2260, 0x080c, 0xbe4a, 0x00ce, 0x00ee, 0x00de,
+	0x005e, 0x002e, 0x0005, 0x9186, 0x0013, 0x1160, 0x6004, 0x908a,
+	0x0085, 0x0a0c, 0x0db4, 0x908a, 0x0092, 0x1a0c, 0x0db4, 0x9082,
+	0x0085, 0x00e2, 0x9186, 0x0027, 0x0120, 0x9186, 0x0014, 0x190c,
+	0x0db4, 0x080c, 0x886e, 0x0096, 0x6014, 0x2048, 0x080c, 0xbb17,
+	0x0140, 0xa867, 0x0103, 0xa877, 0x0000, 0xa87b, 0x0029, 0x080c,
+	0x688c, 0x009e, 0x080c, 0x9e62, 0x0804, 0x8973, 0xb543, 0xb545,
+	0xb545, 0xb543, 0xb543, 0xb543, 0xb543, 0xb543, 0xb543, 0xb543,
+	0xb543, 0xb543, 0xb543, 0x080c, 0x0db4, 0x080c, 0x886e, 0x080c,
+	0x9e62, 0x080c, 0x8973, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004,
+	0x9082, 0x0085, 0x2008, 0x04b8, 0x9186, 0x0027, 0x11f8, 0x080c,
+	0x886e, 0x080c, 0x2fda, 0x080c, 0xc227, 0x0096, 0x6014, 0x2048,
+	0x080c, 0xbb17, 0x0150, 0xa867, 0x0103, 0xa877, 0x0000, 0xa87b,
+	0x0029, 0x080c, 0x688c, 0x080c, 0xbd00, 0x009e, 0x080c, 0x9e32,
+	0x080c, 0x8973, 0x0005, 0x080c, 0x9ec7, 0x0ce0, 0x9186, 0x0014,
+	0x1dd0, 0x080c, 0x886e, 0x0096, 0x6014, 0x2048, 0x080c, 0xbb17,
+	0x0d60, 0xa867, 0x0103, 0xa877, 0x0000, 0xa87b, 0x0006, 0xa880,
+	0xc0ec, 0xa882, 0x08f0, 0x0002, 0xb59b, 0xb599, 0xb599, 0xb599,
+	0xb599, 0xb599, 0xb5b3, 0xb599, 0xb599, 0xb599, 0xb599, 0xb599,
+	0xb599, 0x080c, 0x0db4, 0x080c, 0x886e, 0x6034, 0x908c, 0xff00,
+	0x810f, 0x9186, 0x0039, 0x0118, 0x9186, 0x0035, 0x1118, 0x2001,
+	0x1957, 0x0010, 0x2001, 0x1958, 0x2004, 0x601a, 0x6003, 0x000c,
+	0x080c, 0x8973, 0x0005, 0x080c, 0x886e, 0x6034, 0x908c, 0xff00,
+	0x810f, 0x9186, 0x0039, 0x0118, 0x9186, 0x0035, 0x1118, 0x2001,
+	0x1957, 0x0010, 0x2001, 0x1958, 0x2004, 0x601a, 0x6003, 0x000e,
+	0x080c, 0x8973, 0x0005, 0x9182, 0x0092, 0x1220, 0x9182, 0x0085,
+	0x0208, 0x0012, 0x0804, 0x9ec7, 0xb5e1, 0xb5e1, 0xb5e1, 0xb5e1,
+	0xb5e3, 0xb630, 0xb5e1, 0xb5e1, 0xb5e1, 0xb5e1, 0xb5e1, 0xb5e1,
+	0xb5e1, 0x080c, 0x0db4, 0x0096, 0x6010, 0x00b6, 0x2058, 0xb800,
+	0x00be, 0xd0bc, 0x0168, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186,
+	0x0039, 0x0118, 0x9186, 0x0035, 0x1118, 0x009e, 0x0804, 0xb644,
+	0x080c, 0xbb17, 0x1118, 0x080c, 0xbd00, 0x0068, 0x6014, 0x2048,
+	0xa87c, 0xd0e4, 0x1110, 0x080c, 0xbd00, 0xa867, 0x0103, 0x080c,
+	0xc1f2, 0x080c, 0x688c, 0x00d6, 0x2c68, 0x080c, 0x9ddc, 0x01d0,
+	0x6003, 0x0001, 0x6007, 0x001e, 0x600b, 0xffff, 0x2009, 0x026e,
+	0x210c, 0x613a, 0x2009, 0x026f, 0x210c, 0x613e, 0x6910, 0x6112,
+	0x080c, 0xbf8c, 0x6954, 0x6156, 0x6023, 0x0001, 0x080c, 0x83f1,
+	0x080c, 0x8973, 0x2d60, 0x00de, 0x080c, 0x9e32, 0x009e, 0x0005,
+	0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x05a0, 0x6034,
+	0x908c, 0xff00, 0x810f, 0x9186, 0x0035, 0x0130, 0x9186, 0x001e,
+	0x0118, 0x9186, 0x0039, 0x1538, 0x00d6, 0x2c68, 0x080c, 0xc18a,
+	0x11f0, 0x080c, 0x9ddc, 0x01d8, 0x6106, 0x6003, 0x0001, 0x6023,
+	0x0001, 0x6910, 0x6112, 0x692c, 0x612e, 0x6930, 0x6132, 0x6934,
+	0x918c, 0x00ff, 0x6136, 0x6938, 0x613a, 0x693c, 0x613e, 0x6954,
+	0x6156, 0x080c, 0xbf8c, 0x080c, 0x83f1, 0x080c, 0x8973, 0x2d60,
+	0x00de, 0x0804, 0x9e32, 0x0096, 0x6014, 0x2048, 0x080c, 0xbb17,
+	0x01c8, 0xa867, 0x0103, 0xa880, 0xd0b4, 0x0128, 0xc0ec, 0xa882,
+	0xa87b, 0x0006, 0x0048, 0xd0bc, 0x0118, 0xa87b, 0x0002, 0x0020,
+	0xa87b, 0x0005, 0x080c, 0xbe0c, 0xa877, 0x0000, 0x080c, 0x688c,
+	0x080c, 0xbd00, 0x009e, 0x0804, 0x9e32, 0x0016, 0x0096, 0x6014,
+	0x2048, 0x080c, 0xbb17, 0x0140, 0xa867, 0x0103, 0xa87b, 0x0028,
+	0xa877, 0x0000, 0x080c, 0x688c, 0x009e, 0x001e, 0x9186, 0x0013,
 	0x0148, 0x9186, 0x0014, 0x0130, 0x9186, 0x0027, 0x0118, 0x080c,
-	0x9eae, 0x0030, 0x080c, 0x8846, 0x080c, 0x9e49, 0x080c, 0x894b,
-	0x0005, 0x0036, 0x080c, 0xd767, 0x6043, 0x0000, 0x2019, 0x000b,
-	0x0031, 0x6023, 0x0006, 0x6003, 0x0007, 0x003e, 0x0005, 0x0126,
-	0x0036, 0x2091, 0x8000, 0x0086, 0x2c40, 0x0096, 0x904e, 0x080c,
-	0x97a1, 0x009e, 0x008e, 0x1550, 0x0076, 0x2c38, 0x080c, 0x984c,
-	0x007e, 0x1520, 0x6000, 0x9086, 0x0000, 0x0500, 0x6020, 0x9086,
-	0x0007, 0x01e0, 0x0096, 0x601c, 0xd084, 0x0140, 0x080c, 0xd767,
-	0x080c, 0xc211, 0x080c, 0x190d, 0x6023, 0x0007, 0x6014, 0x2048,
-	0x080c, 0xbafe, 0x0110, 0x080c, 0xd4b5, 0x009e, 0x6017, 0x0000,
-	0x080c, 0xd767, 0x6023, 0x0007, 0x080c, 0xc211, 0x003e, 0x012e,
-	0x0005, 0x00f6, 0x00c6, 0x00b6, 0x0036, 0x0156, 0x2079, 0x0260,
-	0x7938, 0x783c, 0x080c, 0x2663, 0x15b8, 0x0016, 0x00c6, 0x080c,
-	0x6237, 0x1580, 0x001e, 0x00c6, 0x2160, 0x080c, 0xc20e, 0x00ce,
-	0x002e, 0x0026, 0x0016, 0x2019, 0x0029, 0x080c, 0x990d, 0x080c,
-	0x8549, 0x0076, 0x903e, 0x080c, 0x8441, 0x007e, 0x001e, 0x0076,
-	0x903e, 0x080c, 0xd27b, 0x007e, 0x0026, 0xba04, 0x9294, 0xff00,
-	0x8217, 0x9286, 0x0006, 0x0118, 0x9286, 0x0004, 0x1118, 0xbaa0,
-	0x080c, 0x3090, 0x002e, 0x001e, 0x080c, 0x5ce4, 0xbe12, 0xbd16,
+	0x9ec7, 0x0030, 0x080c, 0x886e, 0x080c, 0x9e62, 0x080c, 0x8973,
+	0x0005, 0x0056, 0x0066, 0x0096, 0x00a6, 0x2029, 0x0001, 0x9182,
+	0x0101, 0x1208, 0x0010, 0x2009, 0x0100, 0x2130, 0x8304, 0x9098,
+	0x0018, 0x2009, 0x0020, 0x2011, 0x0029, 0x080c, 0xb712, 0x96b2,
+	0x0020, 0xb004, 0x904d, 0x0110, 0x080c, 0x0f9d, 0x080c, 0x0feb,
+	0x0520, 0x8528, 0xa867, 0x0110, 0xa86b, 0x0000, 0x2920, 0xb406,
+	0x968a, 0x003d, 0x1228, 0x2608, 0x2011, 0x001b, 0x0499, 0x00a8,
+	0x96b2, 0x003c, 0x2009, 0x003c, 0x2950, 0x2011, 0x001b, 0x0451,
+	0x0c28, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad,
+	0x0003, 0xb566, 0x95ac, 0x0000, 0x0048, 0x2001, 0x0205, 0x2003,
+	0x0000, 0x00ae, 0x852f, 0x95ad, 0x0003, 0xb566, 0x009e, 0x006e,
+	0x005e, 0x0005, 0x00a6, 0x89ff, 0x0158, 0xa804, 0x9055, 0x0130,
+	0xa807, 0x0000, 0x080c, 0x688c, 0x2a48, 0x0cb8, 0x080c, 0x688c,
+	0x00ae, 0x0005, 0x00f6, 0x2079, 0x0200, 0x7814, 0x9085, 0x0080,
+	0x7816, 0xd184, 0x0108, 0x8108, 0x810c, 0x20a9, 0x0001, 0xa860,
+	0x20e8, 0xa85c, 0x9200, 0x20a0, 0x20e1, 0x0000, 0x2300, 0x9e00,
+	0x2098, 0x4003, 0x8318, 0x9386, 0x0020, 0x1148, 0x2018, 0x2300,
+	0x9e00, 0x2098, 0x7814, 0x8000, 0x9085, 0x0080, 0x7816, 0x8109,
+	0x1d80, 0x7817, 0x0000, 0x00fe, 0x0005, 0x0066, 0x0126, 0x2091,
+	0x8000, 0x2031, 0x0001, 0x6020, 0x9084, 0x000f, 0x0083, 0x012e,
+	0x006e, 0x0005, 0x0126, 0x2091, 0x8000, 0x0066, 0x2031, 0x0000,
+	0x6020, 0x9084, 0x000f, 0x001b, 0x006e, 0x012e, 0x0005, 0xb778,
+	0xb778, 0xb773, 0xb79a, 0xb766, 0xb773, 0xb79a, 0xb773, 0xb766,
+	0xb766, 0xb773, 0xb773, 0xb773, 0xb766, 0xb766, 0x080c, 0x0db4,
+	0x0036, 0x2019, 0x0010, 0x080c, 0xd0e5, 0x6023, 0x0006, 0x6003,
+	0x0007, 0x003e, 0x0005, 0x9006, 0x0005, 0x9085, 0x0001, 0x0005,
+	0x0096, 0x86ff, 0x11d8, 0x6014, 0x2048, 0x080c, 0xbb17, 0x01c0,
+	0xa864, 0x9086, 0x0139, 0x1128, 0xa87b, 0x0005, 0xa883, 0x0000,
+	0x0028, 0x900e, 0x2001, 0x0005, 0x080c, 0x6ac6, 0x080c, 0xbe0c,
+	0x080c, 0x687f, 0x080c, 0x9e62, 0x9085, 0x0001, 0x009e, 0x0005,
+	0x9006, 0x0ce0, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0db4, 0x0002,
+	0xb7b0, 0xb7de, 0xb7b2, 0xb7ff, 0xb7d9, 0xb7b0, 0xb773, 0xb778,
+	0xb778, 0xb773, 0xb773, 0xb773, 0xb773, 0xb773, 0xb773, 0xb773,
+	0x080c, 0x0db4, 0x86ff, 0x1510, 0x6020, 0x9086, 0x0006, 0x01f0,
+	0x0096, 0x6014, 0x2048, 0x080c, 0xbb17, 0x0158, 0xa87c, 0xd0cc,
+	0x0130, 0x0096, 0xa878, 0x2048, 0x080c, 0x0f9d, 0x009e, 0x080c,
+	0xbe0c, 0x009e, 0x080c, 0xc1cc, 0x6007, 0x0085, 0x6003, 0x000b,
+	0x6023, 0x0002, 0x080c, 0x83f1, 0x080c, 0x8973, 0x9085, 0x0001,
+	0x0005, 0x0066, 0x080c, 0x190d, 0x006e, 0x08a0, 0x00e6, 0x2071,
+	0x19b8, 0x7024, 0x9c06, 0x1120, 0x080c, 0x9662, 0x00ee, 0x0850,
+	0x6020, 0x9084, 0x000f, 0x9086, 0x0006, 0x1150, 0x0086, 0x0096,
+	0x2049, 0x0001, 0x2c40, 0x080c, 0x97ba, 0x009e, 0x008e, 0x0010,
+	0x080c, 0x955f, 0x00ee, 0x1904, 0xb7b2, 0x0804, 0xb773, 0x0036,
+	0x00e6, 0x2071, 0x19b8, 0x703c, 0x9c06, 0x1138, 0x901e, 0x080c,
+	0x96d8, 0x00ee, 0x003e, 0x0804, 0xb7b2, 0x080c, 0x98ea, 0x00ee,
+	0x003e, 0x1904, 0xb7b2, 0x0804, 0xb773, 0x00c6, 0x6020, 0x9084,
+	0x000f, 0x0013, 0x00ce, 0x0005, 0xb832, 0xb8fb, 0xba62, 0xb83c,
+	0x9e62, 0xb832, 0xd0d7, 0xc234, 0xb8fb, 0xb82b, 0xbae1, 0xb82b,
+	0xb82b, 0xb82b, 0xb82b, 0x080c, 0x0db4, 0x080c, 0xbd1d, 0x1110,
+	0x080c, 0xa7c0, 0x0005, 0x080c, 0x886e, 0x080c, 0x8973, 0x0804,
+	0x9e32, 0x601b, 0x0001, 0x0005, 0x080c, 0xbb17, 0x0130, 0x6014,
+	0x0096, 0x2048, 0x2c00, 0xa896, 0x009e, 0x6000, 0x908a, 0x0016,
+	0x1a0c, 0x0db4, 0x0002, 0xb85b, 0xb85d, 0xb881, 0xb895, 0xb8b9,
+	0xb85b, 0xb832, 0xb832, 0xb832, 0xb895, 0xb895, 0xb85b, 0xb85b,
+	0xb85b, 0xb85b, 0xb89f, 0x080c, 0x0db4, 0x00e6, 0x6014, 0x0096,
+	0x2048, 0xa880, 0xc0b5, 0xa882, 0x009e, 0x2071, 0x19b8, 0x7024,
+	0x9c06, 0x01a0, 0x080c, 0x955f, 0x080c, 0xc1cc, 0x6007, 0x0085,
+	0x6003, 0x000b, 0x6023, 0x0002, 0x2001, 0x1958, 0x2004, 0x601a,
+	0x080c, 0x83f1, 0x080c, 0x8973, 0x00ee, 0x0005, 0x601b, 0x0001,
+	0x0cd8, 0x0096, 0x6014, 0x2048, 0xa880, 0xc0b5, 0xa882, 0x009e,
+	0x080c, 0xc1cc, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002,
+	0x080c, 0x83f1, 0x080c, 0x8973, 0x0005, 0x0096, 0x601b, 0x0001,
+	0x6014, 0x2048, 0xa880, 0xc0b5, 0xa882, 0x009e, 0x0005, 0x080c,
+	0x538e, 0x01a8, 0x6014, 0x0096, 0x904d, 0x0180, 0xa864, 0xa867,
+	0x0103, 0xa87b, 0x0006, 0x9086, 0x0139, 0x1140, 0xa867, 0x0139,
+	0xa897, 0x4005, 0xa89b, 0x0004, 0x080c, 0x688c, 0x009e, 0x0804,
+	0x9e32, 0x6014, 0x0096, 0x904d, 0x05c8, 0xa97c, 0xd1e4, 0x05b0,
+	0x2001, 0x180f, 0x2004, 0xd0c4, 0x0110, 0x009e, 0x0005, 0xa884,
+	0x009e, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0x2001, 0x0030,
+	0x2c08, 0x080c, 0x1518, 0x2001, 0x030c, 0x2004, 0x9086, 0x0041,
+	0x11a0, 0x6014, 0x0096, 0x904d, 0x090c, 0x0db4, 0xa880, 0xd0f4,
+	0x1130, 0xc0f5, 0xa882, 0x009e, 0x601b, 0x0002, 0x0070, 0x009e,
+	0x2001, 0x0037, 0x2c08, 0x080c, 0x1518, 0x6000, 0x9086, 0x0004,
+	0x1120, 0x2009, 0x0048, 0x080c, 0x9eac, 0x0005, 0x009e, 0x080c,
+	0x190d, 0x0804, 0xb881, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0db4,
+	0x000b, 0x0005, 0xb912, 0xb839, 0xb914, 0xb912, 0xb914, 0xb914,
+	0xb833, 0xb912, 0xb82d, 0xb82d, 0xb912, 0xb912, 0xb912, 0xb912,
+	0xb912, 0xb912, 0x080c, 0x0db4, 0x6010, 0x00b6, 0x2058, 0xb804,
+	0x9084, 0x00ff, 0x00be, 0x908a, 0x000c, 0x1a0c, 0x0db4, 0x00b6,
+	0x0013, 0x00be, 0x0005, 0xb92f, 0xb9fc, 0xb931, 0xb971, 0xb931,
+	0xb971, 0xb931, 0xb93f, 0xb92f, 0xb971, 0xb92f, 0xb960, 0x080c,
+	0x0db4, 0x6004, 0x908e, 0x0016, 0x05c0, 0x908e, 0x0004, 0x05a8,
+	0x908e, 0x0002, 0x0590, 0x908e, 0x0052, 0x0904, 0xb9f8, 0x6004,
+	0x080c, 0xbd1d, 0x0904, 0xba15, 0x908e, 0x0004, 0x1110, 0x080c,
+	0x3003, 0x908e, 0x0021, 0x0904, 0xba19, 0x908e, 0x0022, 0x0904,
+	0xba5d, 0x908e, 0x003d, 0x0904, 0xba19, 0x908e, 0x0039, 0x0904,
+	0xba1d, 0x908e, 0x0035, 0x0904, 0xba1d, 0x908e, 0x001e, 0x0178,
+	0x908e, 0x0001, 0x1140, 0x6010, 0x2058, 0xb804, 0x9084, 0x00ff,
+	0x9086, 0x0006, 0x0110, 0x080c, 0x2fda, 0x080c, 0xa7c0, 0x0804,
+	0x9e62, 0x00c6, 0x00d6, 0x6104, 0x9186, 0x0016, 0x0904, 0xb9e9,
+	0x9186, 0x0002, 0x1904, 0xb9be, 0x2001, 0x1836, 0x2004, 0xd08c,
+	0x11c8, 0x080c, 0x6fb2, 0x11b0, 0x080c, 0xc212, 0x0138, 0x080c,
+	0x6fd5, 0x1120, 0x080c, 0x6ec2, 0x0804, 0xba46, 0x2001, 0x194e,
+	0x2003, 0x0001, 0x2001, 0x1800, 0x2003, 0x0001, 0x080c, 0x6ee4,
+	0x0804, 0xba46, 0x6010, 0x2058, 0x2001, 0x1836, 0x2004, 0xd0ac,
+	0x1904, 0xba46, 0xb8a0, 0x9084, 0xff80, 0x1904, 0xba46, 0xb840,
+	0x9084, 0x00ff, 0x9005, 0x0190, 0x8001, 0xb842, 0x6017, 0x0000,
+	0x6023, 0x0007, 0x601b, 0x0398, 0x6043, 0x0000, 0x080c, 0x9ddc,
+	0x0128, 0x2b00, 0x6012, 0x6023, 0x0001, 0x0458, 0x00de, 0x00ce,
+	0x6004, 0x908e, 0x0002, 0x11a0, 0x6010, 0x2058, 0xb8a0, 0x9086,
+	0x007e, 0x1170, 0x2009, 0x1836, 0x2104, 0xc085, 0x200a, 0x00e6,
+	0x2071, 0x1800, 0x080c, 0x5c64, 0x00ee, 0x080c, 0xa7c0, 0x0030,
+	0x080c, 0xa7c0, 0x080c, 0x2fda, 0x080c, 0xc227, 0x00e6, 0x0126,
+	0x2091, 0x8000, 0x080c, 0x3003, 0x012e, 0x00ee, 0x080c, 0x9e62,
+	0x0005, 0x2001, 0x0002, 0x080c, 0x618f, 0x6003, 0x0001, 0x6007,
+	0x0002, 0x080c, 0x8439, 0x080c, 0x8973, 0x00de, 0x00ce, 0x0c80,
+	0x080c, 0x3003, 0x0804, 0xb96d, 0x00c6, 0x00d6, 0x6104, 0x9186,
+	0x0016, 0x0d38, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005,
+	0x0904, 0xb9be, 0x8001, 0xb842, 0x6003, 0x0001, 0x080c, 0x8439,
+	0x080c, 0x8973, 0x00de, 0x00ce, 0x0898, 0x080c, 0xa7c0, 0x0804,
+	0xb96f, 0x080c, 0xa7fc, 0x0804, 0xb96f, 0x00d6, 0x2c68, 0x6104,
+	0x080c, 0xc18a, 0x00de, 0x0118, 0x080c, 0x9e32, 0x00f0, 0x6004,
+	0x8007, 0x6134, 0x918c, 0x00ff, 0x9105, 0x6036, 0x6007, 0x0085,
+	0x6003, 0x000b, 0x6023, 0x0002, 0x603c, 0x600a, 0x2001, 0x1958,
+	0x2004, 0x601a, 0x602c, 0x2c08, 0x2060, 0x6024, 0xc0b5, 0x6026,
+	0x2160, 0x080c, 0x83f1, 0x080c, 0x8973, 0x0005, 0x00de, 0x00ce,
+	0x080c, 0xa7c0, 0x080c, 0x2fda, 0x00e6, 0x0126, 0x2091, 0x8000,
+	0x080c, 0x3003, 0x6017, 0x0000, 0x6023, 0x0007, 0x601b, 0x0398,
+	0x6043, 0x0000, 0x012e, 0x00ee, 0x0005, 0x080c, 0xa261, 0x1904,
+	0xba15, 0x0005, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0db4, 0x0096,
+	0x00d6, 0x001b, 0x00de, 0x009e, 0x0005, 0xba7d, 0xba7d, 0xba7d,
+	0xba7d, 0xba7d, 0xba7d, 0xba7d, 0xba7d, 0xba7d, 0xb832, 0xba7d,
+	0xb839, 0xba7f, 0xb839, 0xba8c, 0xba7d, 0x080c, 0x0db4, 0x6004,
+	0x9086, 0x008b, 0x0148, 0x6007, 0x008b, 0x6003, 0x000d, 0x080c,
+	0x83f1, 0x080c, 0x8973, 0x0005, 0x080c, 0xc206, 0x0118, 0x080c,
+	0xc219, 0x0010, 0x080c, 0xc227, 0x080c, 0xbd00, 0x080c, 0xbb17,
+	0x0570, 0x080c, 0x2fda, 0x080c, 0xbb17, 0x0168, 0x6014, 0x2048,
+	0xa867, 0x0103, 0xa87b, 0x0006, 0xa877, 0x0000, 0xa880, 0xc0ed,
+	0xa882, 0x080c, 0x688c, 0x2c68, 0x080c, 0x9ddc, 0x0150, 0x6810,
+	0x6012, 0x080c, 0xbf8c, 0x00c6, 0x2d60, 0x080c, 0x9e62, 0x00ce,
+	0x0008, 0x2d60, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001,
+	0x6003, 0x0001, 0x080c, 0x8439, 0x080c, 0x8973, 0x00c8, 0x080c,
+	0xc206, 0x0138, 0x6034, 0x9086, 0x4000, 0x1118, 0x080c, 0x2fda,
+	0x08d0, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039, 0x0118,
+	0x9186, 0x0035, 0x1118, 0x080c, 0x2fda, 0x0868, 0x080c, 0x9e62,
+	0x0005, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0db4, 0x0002, 0xbaf7,
+	0xbaf7, 0xbaf9, 0xbaf9, 0xbaf9, 0xbaf7, 0xbaf7, 0x9e62, 0xbaf7,
+	0xbaf7, 0xbaf7, 0xbaf7, 0xbaf7, 0xbaf7, 0xbaf7, 0xbaf7, 0x080c,
+	0x0db4, 0x080c, 0x98ea, 0x6114, 0x0096, 0x2148, 0xa87b, 0x0006,
+	0x080c, 0x688c, 0x009e, 0x0804, 0x9e32, 0x9284, 0x0007, 0x1158,
+	0x9282, 0x1cd0, 0x0240, 0x2001, 0x1819, 0x2004, 0x9202, 0x1218,
+	0x9085, 0x0001, 0x0005, 0x9006, 0x0ce8, 0x0096, 0x0028, 0x0096,
+	0x0006, 0x6014, 0x2048, 0x000e, 0x0006, 0x9984, 0xf000, 0x9086,
+	0xf000, 0x0110, 0x080c, 0x1096, 0x000e, 0x009e, 0x0005, 0x00e6,
+	0x00c6, 0x0036, 0x0006, 0x0126, 0x2091, 0x8000, 0x2061, 0x1cd0,
+	0x2071, 0x1800, 0x7350, 0x7070, 0x9302, 0x1640, 0x6020, 0x9206,
+	0x11f8, 0x080c, 0xc212, 0x0180, 0x9286, 0x0001, 0x1168, 0x6004,
+	0x9086, 0x0004, 0x1148, 0x080c, 0x2fda, 0x080c, 0xc227, 0x00c6,
+	0x080c, 0x9e62, 0x00ce, 0x0060, 0x080c, 0xbf06, 0x0148, 0x080c,
+	0xbd1d, 0x1110, 0x080c, 0xa7c0, 0x00c6, 0x080c, 0x9e32, 0x00ce,
+	0x9ce0, 0x0018, 0x7064, 0x9c02, 0x1208, 0x08a0, 0x012e, 0x000e,
+	0x003e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0016, 0x9188,
+	0x1000, 0x210c, 0x81ff, 0x0128, 0x2061, 0x1a80, 0x6112, 0x080c,
+	0x2fda, 0x9006, 0x0010, 0x9085, 0x0001, 0x001e, 0x00ce, 0x00ee,
+	0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9ddc, 0x01b0,
+	0x6656, 0x2b00, 0x6012, 0x080c, 0x538e, 0x0118, 0x080c, 0xbc44,
+	0x0168, 0x080c, 0xbf8c, 0x6023, 0x0003, 0x2009, 0x004b, 0x080c,
+	0x9eac, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8,
+	0x00c6, 0x0126, 0x2091, 0x8000, 0xbaa0, 0x080c, 0x9e7f, 0x0560,
+	0x6057, 0x0000, 0x2b00, 0x6012, 0x080c, 0xbf8c, 0x6023, 0x0003,
+	0x0016, 0x080c, 0x8571, 0x0076, 0x903e, 0x080c, 0x8469, 0x2c08,
+	0x080c, 0xd29b, 0x007e, 0x001e, 0xd184, 0x0128, 0x080c, 0x9e32,
+	0x9085, 0x0001, 0x0070, 0x080c, 0x538e, 0x0128, 0xd18c, 0x1170,
+	0x080c, 0xbc44, 0x0148, 0x2009, 0x004c, 0x080c, 0x9eac, 0x9085,
+	0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2900, 0x6016,
+	0x0c90, 0x2009, 0x004d, 0x0010, 0x2009, 0x004e, 0x00f6, 0x00c6,
+	0x0046, 0x0016, 0x080c, 0x9ddc, 0x2c78, 0x0590, 0x7e56, 0x2b00,
+	0x7812, 0x7823, 0x0003, 0x2021, 0x0005, 0x080c, 0xbc56, 0x9186,
+	0x004d, 0x0118, 0x9186, 0x004e, 0x0148, 0x2001, 0x1951, 0x200c,
+	0xd1fc, 0x0168, 0x2f60, 0x080c, 0x9e32, 0x00d0, 0x2001, 0x1950,
+	0x200c, 0xd1fc, 0x0120, 0x2f60, 0x080c, 0x9e32, 0x0088, 0x2f60,
+	0x080c, 0x538e, 0x0138, 0xd18c, 0x1118, 0x04f1, 0x0148, 0x0010,
+	0x2900, 0x7816, 0x001e, 0x0016, 0x080c, 0x9eac, 0x9085, 0x0001,
+	0x001e, 0x004e, 0x00ce, 0x00fe, 0x0005, 0x00f6, 0x00c6, 0x0046,
+	0x080c, 0x9ddc, 0x2c78, 0x0508, 0x7e56, 0x2b00, 0x7812, 0x7823,
+	0x0003, 0x0096, 0x2021, 0x0004, 0x0489, 0x009e, 0x2001, 0x194f,
+	0x200c, 0xd1fc, 0x0120, 0x2f60, 0x080c, 0x9e32, 0x0060, 0x2f60,
+	0x080c, 0x538e, 0x0120, 0xd18c, 0x1160, 0x0071, 0x0130, 0x2009,
+	0x0052, 0x080c, 0x9eac, 0x9085, 0x0001, 0x004e, 0x00ce, 0x00fe,
+	0x0005, 0x2900, 0x7816, 0x0c98, 0x00c6, 0x080c, 0x4879, 0x00ce,
+	0x1120, 0x080c, 0x9e32, 0x9006, 0x0005, 0xa867, 0x0000, 0xa86b,
+	0x8000, 0x2900, 0x6016, 0x9085, 0x0001, 0x0005, 0x0096, 0x0076,
+	0x0126, 0x2091, 0x8000, 0x080c, 0x6372, 0x0158, 0x2001, 0xbc5b,
+	0x0006, 0x900e, 0x2400, 0x080c, 0x6ac6, 0x080c, 0x688c, 0x000e,
+	0x0807, 0x2418, 0x080c, 0x8808, 0xbaa0, 0x0086, 0x2041, 0x0001,
+	0x2039, 0x0001, 0x2608, 0x080c, 0x8589, 0x008e, 0x080c, 0x8469,
+	0x2f08, 0x2648, 0x080c, 0xd29b, 0xb93c, 0x81ff, 0x090c, 0x865a,
+	0x080c, 0x8973, 0x012e, 0x007e, 0x009e, 0x0005, 0x00c6, 0x0126,
+	0x2091, 0x8000, 0x080c, 0x9ddc, 0x0190, 0x660a, 0x2b08, 0x6112,
+	0x080c, 0xbf8c, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x001f,
+	0x080c, 0x9eac, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006,
+	0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9e7f, 0x01b8,
+	0x660a, 0x2b08, 0x6112, 0x080c, 0xbf8c, 0x6023, 0x0008, 0x2900,
+	0x6016, 0x00f6, 0x2c78, 0x080c, 0x1648, 0x00fe, 0x2009, 0x0021,
+	0x080c, 0x9eac, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006,
+	0x0cd8, 0x2009, 0x003d, 0x00c6, 0x0126, 0x0016, 0x2091, 0x8000,
+	0x080c, 0x9ddc, 0x0198, 0x660a, 0x2b08, 0x6112, 0x080c, 0xbf8c,
+	0x6023, 0x0001, 0x2900, 0x6016, 0x001e, 0x0016, 0x080c, 0x9eac,
+	0x9085, 0x0001, 0x001e, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd0,
+	0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9e7f, 0x0188, 0x2b08,
+	0x6112, 0x080c, 0xbf8c, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009,
+	0x0000, 0x080c, 0x9eac, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005,
+	0x9006, 0x0cd8, 0x2009, 0x0044, 0x0830, 0x2009, 0x0049, 0x0818,
+	0x0026, 0x00b6, 0x6210, 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211,
+	0xba3e, 0x00be, 0x002e, 0x0005, 0x0006, 0x0016, 0x6004, 0x908e,
+	0x0002, 0x0140, 0x908e, 0x0003, 0x0128, 0x908e, 0x0004, 0x0110,
+	0x9085, 0x0001, 0x001e, 0x000e, 0x0005, 0x0006, 0x0096, 0x6020,
+	0x9086, 0x0004, 0x0190, 0x6014, 0x904d, 0x080c, 0xbb17, 0x0168,
+	0xa864, 0x9086, 0x0139, 0x0158, 0x6020, 0x9086, 0x0003, 0x0128,
+	0xa868, 0xd0fc, 0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x009e,
+	0x000e, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9e7f,
+	0x0198, 0x2b08, 0x6112, 0x080c, 0xbf8c, 0x6023, 0x0001, 0x2900,
+	0x6016, 0x080c, 0x2fda, 0x2009, 0x0028, 0x080c, 0x9eac, 0x9085,
+	0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x9186, 0x0015,
+	0x11a8, 0x2011, 0x1823, 0x2204, 0x9086, 0x0074, 0x1178, 0x00b6,
+	0x080c, 0xaa49, 0x00be, 0x080c, 0xac88, 0x6003, 0x0001, 0x6007,
+	0x0029, 0x080c, 0x8439, 0x080c, 0x8973, 0x0078, 0x6014, 0x0096,
+	0x2048, 0xa868, 0x009e, 0xd0fc, 0x0148, 0x2001, 0x0001, 0x080c,
+	0xc14b, 0x080c, 0xa7c0, 0x080c, 0x9e32, 0x0005, 0x0096, 0x6014,
+	0x904d, 0x090c, 0x0db4, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897,
+	0x4005, 0xa89b, 0x0004, 0xa867, 0x0139, 0x0126, 0x2091, 0x8000,
+	0x080c, 0x688c, 0x012e, 0x009e, 0x080c, 0x9e32, 0x0c30, 0x0096,
+	0x9186, 0x0016, 0x1128, 0x2001, 0x0004, 0x080c, 0x618f, 0x00e8,
+	0x9186, 0x0015, 0x1510, 0x2011, 0x1823, 0x2204, 0x9086, 0x0014,
+	0x11e0, 0x6010, 0x00b6, 0x2058, 0x080c, 0x62d9, 0x00be, 0x080c,
+	0xad59, 0x1198, 0x6010, 0x00b6, 0x2058, 0xb890, 0x00be, 0x9005,
+	0x0160, 0x2001, 0x0006, 0x080c, 0x618f, 0x6014, 0x2048, 0xa868,
+	0xd0fc, 0x0170, 0x080c, 0xa235, 0x0048, 0x6014, 0x2048, 0xa868,
+	0xd0fc, 0x0528, 0x080c, 0xa7c0, 0x080c, 0x9e32, 0x009e, 0x0005,
+	0x6014, 0x6310, 0x2358, 0x904d, 0x090c, 0x0db4, 0xa87b, 0x0000,
+	0xa883, 0x0000, 0xa897, 0x4000, 0x900e, 0x080c, 0x645e, 0x1108,
+	0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0xa99a, 0x0126, 0x2091,
+	0x8000, 0x080c, 0x688c, 0x012e, 0x080c, 0x9e32, 0x08f8, 0x6014,
+	0x904d, 0x090c, 0x0db4, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897,
+	0x4005, 0xa89b, 0x0004, 0xa867, 0x0139, 0x0126, 0x2091, 0x8000,
+	0x080c, 0x688c, 0x012e, 0x080c, 0x9e32, 0x0840, 0xa878, 0x9086,
+	0x0005, 0x1108, 0x0009, 0x0005, 0xa880, 0xc0ad, 0xa882, 0x0005,
+	0x6043, 0x0000, 0x6017, 0x0000, 0x6003, 0x0001, 0x6007, 0x0050,
+	0x080c, 0x83f1, 0x080c, 0x8973, 0x0005, 0x00c6, 0x6010, 0x00b6,
+	0x2058, 0xb800, 0x00be, 0xd0bc, 0x0120, 0x6020, 0x9084, 0x000f,
+	0x0013, 0x00ce, 0x0005, 0xb832, 0xbe3c, 0xbe3c, 0xbe3f, 0xd579,
+	0xd594, 0xd597, 0xb832, 0xb832, 0xb832, 0xb832, 0xb832, 0xb832,
+	0xb832, 0xb832, 0x080c, 0x0db4, 0xa001, 0xa001, 0x0005, 0x0096,
+	0x6014, 0x904d, 0x0118, 0xa87c, 0xd0e4, 0x1110, 0x009e, 0x0010,
+	0x009e, 0x0005, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc,
+	0x0550, 0x2001, 0x1833, 0x2004, 0x9005, 0x1540, 0x00f6, 0x2c78,
+	0x080c, 0x9ddc, 0x0508, 0x7810, 0x6012, 0x080c, 0xbf8c, 0x7820,
+	0x9086, 0x0003, 0x0128, 0x7808, 0x603a, 0x2f00, 0x603e, 0x0020,
+	0x7808, 0x603e, 0x2f00, 0x603a, 0x602e, 0x6023, 0x0001, 0x6007,
+	0x0035, 0x6003, 0x0001, 0x7954, 0x6156, 0x080c, 0x83f1, 0x080c,
+	0x8973, 0x2f60, 0x00fe, 0x0005, 0x2f60, 0x00fe, 0x2001, 0x1959,
+	0x2004, 0x6042, 0x0005, 0x0016, 0x0096, 0x6814, 0x2048, 0xa87c,
+	0xd0e4, 0x0180, 0xc0e4, 0xa87e, 0xa877, 0x0000, 0xa893, 0x0000,
+	0xa88f, 0x0000, 0xd0cc, 0x0130, 0xc0cc, 0xa87e, 0xa878, 0x2048,
+	0x080c, 0x0f9d, 0x6830, 0x6036, 0x908e, 0x0001, 0x0148, 0x6803,
+	0x0002, 0x9086, 0x0005, 0x0170, 0x9006, 0x602e, 0x6032, 0x00d0,
+	0x681c, 0xc085, 0x681e, 0x6803, 0x0004, 0x6824, 0xc0f4, 0x9085,
+	0x0c00, 0x6826, 0x6814, 0x2048, 0xa8ac, 0x6938, 0x9102, 0xa8b0,
+	0x693c, 0x9103, 0x1e48, 0x683c, 0x602e, 0x6838, 0x9084, 0xfffc,
+	0x683a, 0x6032, 0x2d00, 0x603a, 0x6808, 0x603e, 0x6910, 0x6112,
+	0x6954, 0x6156, 0x6023, 0x0001, 0x6007, 0x0039, 0x6003, 0x0001,
+	0x080c, 0x83f1, 0x080c, 0x8973, 0x009e, 0x001e, 0x0005, 0x6024,
+	0xd0d4, 0x0510, 0xd0f4, 0x11f8, 0x6038, 0x940a, 0x603c, 0x9303,
+	0x0230, 0x9105, 0x0120, 0x6024, 0xc0d4, 0xc0f5, 0x0098, 0x643a,
+	0x633e, 0xac3e, 0xab42, 0x0046, 0x0036, 0x2400, 0xacac, 0x9402,
+	0xa836, 0x2300, 0xabb0, 0x9303, 0xa83a, 0x003e, 0x004e, 0x6024,
+	0xc0d4, 0x0000, 0x6026, 0x0005, 0xd0f4, 0x1138, 0xa83c, 0x603a,
+	0xa840, 0x603e, 0x6024, 0xc0f5, 0x6026, 0x0005, 0x0006, 0x0016,
+	0x6004, 0x908e, 0x0034, 0x01b8, 0x908e, 0x0035, 0x01a0, 0x908e,
+	0x0036, 0x0188, 0x908e, 0x0037, 0x0170, 0x908e, 0x0038, 0x0158,
+	0x908e, 0x0039, 0x0140, 0x908e, 0x003a, 0x0128, 0x908e, 0x003b,
+	0x0110, 0x9085, 0x0001, 0x001e, 0x000e, 0x0005, 0x0006, 0x0016,
+	0x0026, 0x0036, 0x00e6, 0x2001, 0x1953, 0x200c, 0x8000, 0x2014,
+	0x2001, 0x0032, 0x080c, 0x8270, 0x2001, 0x1957, 0x82ff, 0x1110,
+	0x2011, 0x0014, 0x2202, 0x2001, 0x1955, 0x200c, 0x8000, 0x2014,
+	0x2071, 0x193d, 0x711a, 0x721e, 0x2001, 0x0064, 0x080c, 0x8270,
+	0x2001, 0x1958, 0x82ff, 0x1110, 0x2011, 0x0014, 0x2202, 0x2001,
+	0x1959, 0x9288, 0x000a, 0x2102, 0x2001, 0x1a61, 0x2102, 0x2001,
+	0x0032, 0x080c, 0x1518, 0x080c, 0x6543, 0x00ee, 0x003e, 0x002e,
+	0x001e, 0x000e, 0x0005, 0x0006, 0x0016, 0x00e6, 0x2001, 0x1957,
+	0x2003, 0x0028, 0x2001, 0x1958, 0x2003, 0x0014, 0x2071, 0x193d,
+	0x701b, 0x0000, 0x701f, 0x07d0, 0x2001, 0x1959, 0x2009, 0x001e,
+	0x2102, 0x2001, 0x1a61, 0x2102, 0x2001, 0x0032, 0x080c, 0x1518,
+	0x00ee, 0x001e, 0x000e, 0x0005, 0x0096, 0x6058, 0x904d, 0x0110,
+	0x080c, 0x101d, 0x009e, 0x0005, 0x0005, 0x00c6, 0x0126, 0x2091,
+	0x8000, 0x080c, 0x9ddc, 0x0180, 0x2b08, 0x6112, 0x0ca9, 0x6023,
+	0x0001, 0x2900, 0x6016, 0x2009, 0x0033, 0x080c, 0x9eac, 0x9085,
+	0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x0096, 0x00e6,
+	0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, 0x1500, 0x708c, 0x9086,
+	0x0018, 0x11e0, 0x6014, 0x2048, 0xaa3c, 0xd2e4, 0x1160, 0x2c78,
+	0x080c, 0x8b63, 0x01d8, 0x7078, 0xaa50, 0x9206, 0x1160, 0x707c,
+	0xaa54, 0x9206, 0x1140, 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be,
+	0x900e, 0x080c, 0x3023, 0x080c, 0xa235, 0x0020, 0x080c, 0xa7c0,
+	0x080c, 0x9e32, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c, 0xaa54,
+	0x9206, 0x0d48, 0x0c80, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c,
+	0x9ddc, 0x0188, 0x2b08, 0x6112, 0x080c, 0xbf8c, 0x6023, 0x0001,
+	0x2900, 0x6016, 0x2009, 0x004d, 0x080c, 0x9eac, 0x9085, 0x0001,
+	0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091,
+	0x8000, 0x0016, 0x080c, 0x9ddc, 0x0180, 0x2b08, 0x6112, 0x080c,
+	0xbf8c, 0x6023, 0x0001, 0x2900, 0x6016, 0x001e, 0x080c, 0x9eac,
+	0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x001e, 0x9006, 0x0cd0,
+	0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0066, 0x0096, 0x00e6,
+	0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, 0x1568, 0x718c, 0x6014,
+	0x2048, 0xa814, 0x8003, 0x9106, 0x1530, 0x20e1, 0x0000, 0x2001,
+	0x1971, 0x2003, 0x0000, 0x6014, 0x2048, 0xa830, 0x20a8, 0x8906,
+	0x8006, 0x8007, 0x9094, 0x003f, 0x22e8, 0x9084, 0xffc0, 0x9080,
+	0x001b, 0x20a0, 0x2001, 0x1971, 0x0016, 0x200c, 0x080c, 0xc7ce,
+	0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c38, 0x6014, 0x2048,
+	0xa867, 0x0103, 0x0010, 0x080c, 0xa7c0, 0x080c, 0x9e32, 0x00fe,
+	0x00ee, 0x009e, 0x006e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e,
+	0x0005, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015,
+	0x11b8, 0x708c, 0x9086, 0x0004, 0x1198, 0x6014, 0x2048, 0x2c78,
+	0x080c, 0x8b63, 0x01a8, 0x7078, 0xaa74, 0x9206, 0x1130, 0x707c,
+	0xaa78, 0x9206, 0x1110, 0x080c, 0x2fda, 0x080c, 0xa235, 0x0020,
+	0x080c, 0xa7c0, 0x080c, 0x9e32, 0x00fe, 0x00ee, 0x009e, 0x0005,
+	0x705c, 0xaa78, 0x9206, 0x0d78, 0x0c80, 0x0096, 0x00e6, 0x00f6,
+	0x2071, 0x1800, 0x9186, 0x0015, 0x1550, 0x708c, 0x9086, 0x0004,
+	0x1530, 0x6014, 0x2048, 0x2c78, 0x080c, 0x8b63, 0x05f0, 0x7078,
+	0xaacc, 0x9206, 0x1180, 0x707c, 0xaad0, 0x9206, 0x1160, 0x080c,
+	0x2fda, 0x0016, 0xa998, 0xaab0, 0x9284, 0x1000, 0xc0fd, 0x080c,
+	0x533e, 0x001e, 0x0010, 0x080c, 0x512f, 0x080c, 0xbb17, 0x0508,
+	0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0x0080, 0x080c,
+	0xbb17, 0x01b8, 0x6014, 0x2048, 0x080c, 0x512f, 0x1d70, 0xa87b,
+	0x0030, 0xa883, 0x0000, 0xa897, 0x4005, 0xa89b, 0x0004, 0x0126,
+	0x2091, 0x8000, 0xa867, 0x0139, 0x080c, 0x688c, 0x012e, 0x080c,
+	0x9e32, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c, 0xaad0, 0x9206,
+	0x0930, 0x0888, 0x0016, 0x0026, 0xa87c, 0xd0ac, 0x0178, 0xa938,
+	0xaa34, 0x2100, 0x9205, 0x0150, 0xa890, 0x9106, 0x1118, 0xa88c,
+	0x9206, 0x0120, 0xa992, 0xaa8e, 0x9085, 0x0001, 0x002e, 0x001e,
+	0x0005, 0x00b6, 0x00d6, 0x0036, 0x080c, 0xbb17, 0x0904, 0xc147,
+	0x0096, 0x6314, 0x2348, 0xa87a, 0xa982, 0x929e, 0x4000, 0x1580,
+	0x6310, 0x00c6, 0x2358, 0x2009, 0x0000, 0xa868, 0xd0f4, 0x1140,
+	0x080c, 0x645e, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d,
+	0xaa96, 0xa99a, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080,
+	0x0031, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098,
+	0x080c, 0x0f68, 0x20a9, 0x0004, 0xa85c, 0x9080, 0x0035, 0x20a0,
+	0xb8b8, 0x9080, 0x000a, 0x2098, 0x080c, 0x0f68, 0x00ce, 0x0090,
+	0xaa96, 0x3918, 0x9398, 0x0007, 0x231c, 0x6004, 0x9086, 0x0016,
+	0x0110, 0xa89b, 0x0004, 0xaba2, 0x6310, 0x2358, 0xb804, 0x9084,
+	0x00ff, 0xa89e, 0x080c, 0x687f, 0x6017, 0x0000, 0x009e, 0x003e,
+	0x00de, 0x00be, 0x0005, 0x0026, 0x0036, 0x0046, 0x00b6, 0x0096,
+	0x00f6, 0x6214, 0x2248, 0x6210, 0x2258, 0x2079, 0x0260, 0x9096,
+	0x0000, 0x11a0, 0xb814, 0x9084, 0x00ff, 0x900e, 0x080c, 0x2663,
+	0x2118, 0x831f, 0x939c, 0xff00, 0x7838, 0x9084, 0x00ff, 0x931d,
+	0x7c3c, 0x2011, 0x8018, 0x080c, 0x48d9, 0x00a8, 0x9096, 0x0001,
+	0x1148, 0x89ff, 0x0180, 0xa89b, 0x000d, 0x7838, 0xa8a6, 0x783c,
+	0xa8aa, 0x0048, 0x9096, 0x0002, 0x1130, 0xa89b, 0x000d, 0x7838,
+	0xa8a6, 0x783c, 0xa8aa, 0x00fe, 0x009e, 0x00be, 0x004e, 0x003e,
+	0x002e, 0x0005, 0x00c6, 0x0026, 0x0016, 0x9186, 0x0035, 0x0110,
+	0x6a38, 0x0008, 0x6a2c, 0x080c, 0xbb05, 0x01f0, 0x2260, 0x6120,
+	0x9186, 0x0003, 0x0118, 0x9186, 0x0006, 0x1190, 0x6838, 0x9206,
+	0x0140, 0x683c, 0x9206, 0x1160, 0x6108, 0x6838, 0x9106, 0x1140,
+	0x0020, 0x6008, 0x693c, 0x9106, 0x1118, 0x6010, 0x6910, 0x9106,
+	0x001e, 0x002e, 0x00ce, 0x0005, 0x9085, 0x0001, 0x0cc8, 0xa974,
+	0xd1cc, 0x0188, 0x918c, 0x00ff, 0x918e, 0x0002, 0x1160, 0xa9a8,
+	0x918c, 0x0f00, 0x810f, 0x918e, 0x0001, 0x1128, 0xa834, 0xa938,
+	0x9115, 0x190c, 0xb227, 0x0005, 0x0036, 0x2019, 0x0001, 0x0010,
+	0x0036, 0x901e, 0x0499, 0x01e0, 0x080c, 0xbb17, 0x01c8, 0x080c,
+	0xbd00, 0x6037, 0x4000, 0x6014, 0x6017, 0x0000, 0x0096, 0x2048,
+	0xa87c, 0x080c, 0xbd1d, 0x1118, 0x080c, 0xa7c0, 0x0040, 0xa867,
+	0x0103, 0xa877, 0x0000, 0x83ff, 0x1129, 0x080c, 0x688c, 0x009e,
+	0x003e, 0x0005, 0xa880, 0xd0b4, 0x0128, 0xa87b, 0x0006, 0xc0ec,
+	0xa882, 0x0048, 0xd0bc, 0x0118, 0xa87b, 0x0002, 0x0020, 0xa87b,
+	0x0005, 0x080c, 0xbe0c, 0xa877, 0x0000, 0x0005, 0x2001, 0x1810,
+	0x2004, 0xd0ec, 0x0005, 0x0006, 0x2001, 0x1810, 0x2004, 0xd0f4,
+	0x000e, 0x0005, 0x0006, 0x2001, 0x1810, 0x2004, 0xd0e4, 0x000e,
+	0x0005, 0x0036, 0x0046, 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be,
+	0x2021, 0x0007, 0x080c, 0x4a76, 0x004e, 0x003e, 0x0005, 0x0c51,
+	0x1d81, 0x0005, 0x2001, 0x1957, 0x2004, 0x601a, 0x0005, 0x2001,
+	0x1959, 0x2004, 0x6042, 0x0005, 0x080c, 0x9e32, 0x0804, 0x8973,
+	0x00b6, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0db4, 0x001b,
+	0x006e, 0x00be, 0x0005, 0xc253, 0xc92b, 0xca86, 0xc253, 0xc253,
+	0xc253, 0xc253, 0xc253, 0xc28a, 0xcb08, 0xc253, 0xc253, 0xc253,
+	0xc253, 0xc253, 0xc253, 0x080c, 0x0db4, 0x0066, 0x6000, 0x90b2,
+	0x0016, 0x1a0c, 0x0db4, 0x0013, 0x006e, 0x0005, 0xc26e, 0xd070,
+	0xc26e, 0xc26e, 0xc26e, 0xc26e, 0xc26e, 0xc26e, 0xd01d, 0xd0c4,
+	0xc26e, 0xd6b4, 0xd6ea, 0xd6b4, 0xd6ea, 0xc26e, 0x080c, 0x0db4,
+	0x6000, 0x9082, 0x0016, 0x1a0c, 0x0db4, 0x6000, 0x000a, 0x0005,
+	0xc288, 0xcce5, 0xcdd5, 0xcdf7, 0xceb6, 0xc288, 0xcf94, 0xcf3e,
+	0xcb14, 0xcff3, 0xd008, 0xc288, 0xc288, 0xc288, 0xc288, 0xc288,
+	0x080c, 0x0db4, 0x91b2, 0x0053, 0x1a0c, 0x0db4, 0x2100, 0x91b2,
+	0x0040, 0x1a04, 0xc6cc, 0x0002, 0xc2d4, 0xc4bd, 0xc2d4, 0xc2d4,
+	0xc2d4, 0xc4c6, 0xc2d4, 0xc2d4, 0xc2d4, 0xc2d4, 0xc2d4, 0xc2d4,
+	0xc2d4, 0xc2d4, 0xc2d4, 0xc2d4, 0xc2d4, 0xc2d4, 0xc2d4, 0xc2d4,
+	0xc2d4, 0xc2d4, 0xc2d4, 0xc2d6, 0xc339, 0xc348, 0xc3ac, 0xc3d7,
+	0xc44f, 0xc4a8, 0xc2d4, 0xc2d4, 0xc4c9, 0xc2d4, 0xc2d4, 0xc4de,
+	0xc4eb, 0xc2d4, 0xc2d4, 0xc2d4, 0xc2d4, 0xc2d4, 0xc56e, 0xc2d4,
+	0xc2d4, 0xc582, 0xc2d4, 0xc2d4, 0xc53d, 0xc2d4, 0xc2d4, 0xc2d4,
+	0xc59a, 0xc2d4, 0xc2d4, 0xc2d4, 0xc617, 0xc2d4, 0xc2d4, 0xc2d4,
+	0xc2d4, 0xc2d4, 0xc2d4, 0xc694, 0x080c, 0x0db4, 0x080c, 0x6520,
+	0x1150, 0x2001, 0x1836, 0x2004, 0xd0cc, 0x1128, 0x9084, 0x0009,
+	0x9086, 0x0008, 0x1140, 0x6007, 0x0009, 0x602f, 0x0009, 0x6017,
+	0x0000, 0x0804, 0xc4b6, 0x080c, 0x6509, 0x00e6, 0x00c6, 0x0036,
+	0x0026, 0x0016, 0x6210, 0x2258, 0xbaa0, 0x0026, 0x2019, 0x0029,
+	0x080c, 0x8571, 0x0076, 0x903e, 0x080c, 0x8469, 0x2c08, 0x080c,
+	0xd29b, 0x007e, 0x001e, 0x001e, 0x002e, 0x003e, 0x00ce, 0x00ee,
+	0x6610, 0x2658, 0x080c, 0x624d, 0xbe04, 0x9684, 0x00ff, 0x9082,
+	0x0006, 0x1268, 0x0016, 0x0026, 0x6210, 0x00b6, 0x2258, 0xbaa0,
+	0x00be, 0x2c08, 0x080c, 0xd862, 0x002e, 0x001e, 0x1178, 0x080c,
+	0xd1ce, 0x1904, 0xc3a4, 0x080c, 0xd16a, 0x1120, 0x6007, 0x0008,
+	0x0804, 0xc4b6, 0x6007, 0x0009, 0x0804, 0xc4b6, 0x080c, 0xd3c5,
+	0x0128, 0x080c, 0xd1ce, 0x0d78, 0x0804, 0xc3a4, 0x6017, 0x1900,
+	0x0c88, 0x080c, 0x30fd, 0x1904, 0xc6c9, 0x6106, 0x080c, 0xd11f,
+	0x6007, 0x0006, 0x0804, 0xc4b6, 0x6007, 0x0007, 0x0804, 0xc4b6,
+	0x080c, 0xd726, 0x1904, 0xc6c9, 0x080c, 0x30fd, 0x1904, 0xc6c9,
+	0x00d6, 0x6610, 0x2658, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006,
+	0x1220, 0x2001, 0x0001, 0x080c, 0x617b, 0x96b4, 0xff00, 0x8637,
+	0x9686, 0x0006, 0x0188, 0x9686, 0x0004, 0x0170, 0xbe04, 0x96b4,
+	0x00ff, 0x9686, 0x0006, 0x0140, 0x9686, 0x0004, 0x0128, 0x9686,
+	0x0005, 0x0110, 0x00de, 0x0480, 0x00e6, 0x2071, 0x0260, 0x7034,
+	0x9084, 0x0003, 0x1140, 0x7034, 0x9082, 0x0014, 0x0220, 0x7030,
+	0x9084, 0x0003, 0x0130, 0x00ee, 0x6017, 0x0000, 0x602f, 0x0007,
+	0x00b0, 0x00ee, 0x080c, 0xd231, 0x1190, 0x9686, 0x0006, 0x1140,
+	0x0026, 0x6210, 0x2258, 0xbaa0, 0x900e, 0x080c, 0x3023, 0x002e,
+	0x080c, 0x62d9, 0x6007, 0x000a, 0x00de, 0x0804, 0xc4b6, 0x6007,
+	0x000b, 0x00de, 0x0804, 0xc4b6, 0x080c, 0x2fda, 0x080c, 0xc227,
+	0x6007, 0x0001, 0x0804, 0xc4b6, 0x080c, 0xd726, 0x1904, 0xc6c9,
+	0x080c, 0x30fd, 0x1904, 0xc6c9, 0x2071, 0x0260, 0x7034, 0x90b4,
+	0x0003, 0x1948, 0x90b2, 0x0014, 0x0a30, 0x7030, 0x9084, 0x0003,
+	0x1910, 0x6610, 0x2658, 0xbe04, 0x9686, 0x0707, 0x09e8, 0x0026,
+	0x6210, 0x2258, 0xbaa0, 0x900e, 0x080c, 0x3023, 0x002e, 0x6007,
+	0x000c, 0x2001, 0x0001, 0x080c, 0xd842, 0x0804, 0xc4b6, 0x080c,
+	0x6520, 0x1140, 0x2001, 0x1836, 0x2004, 0x9084, 0x0009, 0x9086,
+	0x0008, 0x1110, 0x0804, 0xc2e3, 0x080c, 0x6509, 0x6610, 0x2658,
+	0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x06c0, 0x1138, 0x0026,
+	0x2001, 0x0006, 0x080c, 0x61bb, 0x002e, 0x0050, 0x96b4, 0xff00,
+	0x8637, 0x9686, 0x0004, 0x0120, 0x9686, 0x0006, 0x1904, 0xc3a4,
+	0x080c, 0xd23e, 0x1120, 0x6007, 0x000e, 0x0804, 0xc4b6, 0x0046,
+	0x6410, 0x2458, 0xbca0, 0x0046, 0x080c, 0x2fda, 0x080c, 0xc227,
+	0x004e, 0x0016, 0x9006, 0x2009, 0x1854, 0x210c, 0x0048, 0x2009,
+	0x0029, 0x080c, 0xd52a, 0x6010, 0x2058, 0xb800, 0xc0e5, 0xb802,
+	0x001e, 0x004e, 0x6007, 0x0001, 0x0804, 0xc4b6, 0x2001, 0x0001,
+	0x080c, 0x617b, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004,
+	0x2019, 0x1805, 0x2011, 0x0270, 0x080c, 0xadf9, 0x003e, 0x002e,
+	0x001e, 0x015e, 0x9005, 0x0168, 0x96b4, 0xff00, 0x8637, 0x9682,
+	0x0004, 0x0a04, 0xc3a4, 0x9682, 0x0007, 0x0a04, 0xc400, 0x0804,
+	0xc3a4, 0x6017, 0x1900, 0x6007, 0x0009, 0x0804, 0xc4b6, 0x080c,
+	0x6520, 0x1140, 0x2001, 0x1836, 0x2004, 0x9084, 0x0009, 0x9086,
+	0x0008, 0x1110, 0x0804, 0xc2e3, 0x080c, 0x6509, 0x6610, 0x2658,
+	0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x0690, 0x0150, 0x96b4,
+	0xff00, 0x8637, 0x9686, 0x0004, 0x0120, 0x9686, 0x0006, 0x1904,
+	0xc3a4, 0x080c, 0xd26c, 0x1130, 0x080c, 0xd16a, 0x1118, 0x6007,
+	0x0010, 0x04e0, 0x0046, 0x6410, 0x2458, 0xbca0, 0x0046, 0x080c,
+	0x2fda, 0x080c, 0xc227, 0x004e, 0x0016, 0x9006, 0x2009, 0x1854,
+	0x210c, 0x0048, 0x2009, 0x0029, 0x080c, 0xd52a, 0x6010, 0x2058,
+	0xb800, 0xc0e5, 0xb802, 0x001e, 0x004e, 0x6007, 0x0001, 0x00f0,
+	0x080c, 0xd3c5, 0x0140, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006,
+	0x0980, 0x0804, 0xc3a4, 0x6017, 0x1900, 0x6007, 0x0009, 0x0070,
+	0x080c, 0x30fd, 0x1904, 0xc6c9, 0x080c, 0xd726, 0x1904, 0xc6c9,
+	0x080c, 0xc869, 0x1904, 0xc3a4, 0x6007, 0x0012, 0x6003, 0x0001,
+	0x080c, 0x8439, 0x080c, 0x8973, 0x0005, 0x6007, 0x0001, 0x6003,
+	0x0001, 0x080c, 0x8439, 0x080c, 0x8973, 0x0cb0, 0x6007, 0x0005,
+	0x0c68, 0x080c, 0xd726, 0x1904, 0xc6c9, 0x080c, 0x30fd, 0x1904,
+	0xc6c9, 0x080c, 0xc869, 0x1904, 0xc3a4, 0x6007, 0x0020, 0x6003,
+	0x0001, 0x080c, 0x8439, 0x080c, 0x8973, 0x0005, 0x080c, 0x30fd,
+	0x1904, 0xc6c9, 0x6007, 0x0023, 0x6003, 0x0001, 0x080c, 0x8439,
+	0x080c, 0x8973, 0x0005, 0x080c, 0xd726, 0x1904, 0xc6c9, 0x080c,
+	0x30fd, 0x1904, 0xc6c9, 0x080c, 0xc869, 0x1904, 0xc3a4, 0x0016,
+	0x0026, 0x00e6, 0x2071, 0x0260, 0x7244, 0x9286, 0xffff, 0x0180,
+	0x2c08, 0x080c, 0xbb05, 0x01b0, 0x2260, 0x7240, 0x6008, 0x9206,
+	0x1188, 0x6010, 0x9190, 0x0004, 0x2214, 0x9206, 0x01b8, 0x0050,
+	0x7240, 0x2c08, 0x9006, 0x080c, 0xd4fc, 0x1180, 0x7244, 0x9286,
+	0xffff, 0x01b0, 0x2160, 0x6007, 0x0026, 0x6017, 0x1700, 0x7214,
+	0x9296, 0xffff, 0x1180, 0x6007, 0x0025, 0x0068, 0x6020, 0x9086,
+	0x0007, 0x1d80, 0x6004, 0x9086, 0x0024, 0x1110, 0x080c, 0x9e32,
+	0x2160, 0x6007, 0x0025, 0x6003, 0x0001, 0x080c, 0x8439, 0x080c,
+	0x8973, 0x00ee, 0x002e, 0x001e, 0x0005, 0x2001, 0x0001, 0x080c,
+	0x617b, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019,
+	0x1805, 0x2011, 0x0276, 0x080c, 0xadf9, 0x003e, 0x002e, 0x001e,
+	0x015e, 0x0120, 0x6007, 0x0031, 0x0804, 0xc4b6, 0x080c, 0xaa61,
+	0x080c, 0x6fb2, 0x1190, 0x0006, 0x0026, 0x0036, 0x080c, 0x6fcc,
+	0x1138, 0x080c, 0x7296, 0x080c, 0x5cd1, 0x080c, 0x6ee4, 0x0010,
+	0x080c, 0x6f8a, 0x003e, 0x002e, 0x000e, 0x0005, 0x080c, 0x30fd,
+	0x1904, 0xc6c9, 0x080c, 0xc869, 0x1904, 0xc3a4, 0x6106, 0x080c,
+	0xc885, 0x1120, 0x6007, 0x002b, 0x0804, 0xc4b6, 0x6007, 0x002c,
+	0x0804, 0xc4b6, 0x080c, 0xd726, 0x1904, 0xc6c9, 0x080c, 0x30fd,
+	0x1904, 0xc6c9, 0x080c, 0xc869, 0x1904, 0xc3a4, 0x6106, 0x080c,
+	0xc88a, 0x1120, 0x6007, 0x002e, 0x0804, 0xc4b6, 0x6007, 0x002f,
+	0x0804, 0xc4b6, 0x080c, 0x30fd, 0x1904, 0xc6c9, 0x00e6, 0x00d6,
+	0x00c6, 0x6010, 0x2058, 0xb904, 0x9184, 0x00ff, 0x9086, 0x0006,
+	0x0158, 0x9184, 0xff00, 0x8007, 0x9086, 0x0006, 0x0128, 0x00ce,
+	0x00de, 0x00ee, 0x0804, 0xc4bd, 0x080c, 0x538a, 0xd0e4, 0x0904,
+	0xc614, 0x2071, 0x026c, 0x7010, 0x603a, 0x7014, 0x603e, 0x7108,
+	0x720c, 0x080c, 0x655e, 0x0140, 0x6010, 0x2058, 0xb810, 0x9106,
+	0x1118, 0xb814, 0x9206, 0x0510, 0x080c, 0x655a, 0x15b8, 0x2069,
+	0x1800, 0x687c, 0x9206, 0x1590, 0x6878, 0x9106, 0x1578, 0x7210,
+	0x080c, 0xbb05, 0x0590, 0x080c, 0xc754, 0x0578, 0x080c, 0xd5a6,
+	0x0560, 0x622e, 0x6007, 0x0036, 0x6003, 0x0001, 0x080c, 0x83f1,
+	0x080c, 0x8973, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x7214, 0x9286,
+	0xffff, 0x0150, 0x080c, 0xbb05, 0x01c0, 0x9280, 0x0002, 0x2004,
+	0x7110, 0x9106, 0x1190, 0x08e0, 0x7210, 0x2c08, 0x9085, 0x0001,
+	0x080c, 0xd4fc, 0x2c10, 0x2160, 0x0140, 0x0890, 0x6007, 0x0037,
+	0x602f, 0x0009, 0x6017, 0x1500, 0x08b8, 0x6007, 0x0037, 0x602f,
+	0x0003, 0x6017, 0x1700, 0x0880, 0x6007, 0x0012, 0x0868, 0x080c,
+	0x30fd, 0x1904, 0xc6c9, 0x6010, 0x2058, 0xb804, 0x9084, 0xff00,
+	0x8007, 0x9086, 0x0006, 0x1904, 0xc4bd, 0x00e6, 0x00d6, 0x00c6,
+	0x080c, 0x538a, 0xd0e4, 0x0904, 0xc68c, 0x2069, 0x1800, 0x2071,
+	0x026c, 0x7008, 0x603a, 0x720c, 0x623e, 0x9286, 0xffff, 0x1150,
+	0x7208, 0x00c6, 0x2c08, 0x9085, 0x0001, 0x080c, 0xd4fc, 0x2c10,
+	0x00ce, 0x05e8, 0x080c, 0xbb05, 0x05d0, 0x7108, 0x9280, 0x0002,
+	0x2004, 0x9106, 0x15a0, 0x00c6, 0x0026, 0x2260, 0x080c, 0xb73d,
+	0x002e, 0x00ce, 0x7118, 0x918c, 0xff00, 0x810f, 0x9186, 0x0001,
+	0x0178, 0x9186, 0x0005, 0x0118, 0x9186, 0x0007, 0x1198, 0x9280,
+	0x0005, 0x2004, 0x9005, 0x0170, 0x080c, 0xc754, 0x0904, 0xc60d,
+	0x0056, 0x7510, 0x7614, 0x080c, 0xd5bf, 0x005e, 0x00ce, 0x00de,
+	0x00ee, 0x0005, 0x6007, 0x003b, 0x602f, 0x0009, 0x6017, 0x2a00,
+	0x6003, 0x0001, 0x080c, 0x83f1, 0x080c, 0x8973, 0x0c78, 0x6007,
+	0x003b, 0x602f, 0x0003, 0x6017, 0x0300, 0x6003, 0x0001, 0x080c,
+	0x83f1, 0x080c, 0x8973, 0x0c10, 0x6007, 0x003b, 0x602f, 0x000b,
+	0x6017, 0x0000, 0x0804, 0xc5e4, 0x00e6, 0x0026, 0x080c, 0x6520,
+	0x0550, 0x080c, 0x6509, 0x080c, 0xd798, 0x1518, 0x2071, 0x1800,
+	0x70d8, 0x9085, 0x0003, 0x70da, 0x00f6, 0x2079, 0x0100, 0x72ac,
+	0x9284, 0x00ff, 0x707a, 0x78e6, 0x9284, 0xff00, 0x727c, 0x9205,
+	0x707e, 0x78ea, 0x00fe, 0x70e3, 0x0000, 0x080c, 0x655e, 0x0120,
+	0x2011, 0x19d1, 0x2013, 0x07d0, 0xd0ac, 0x1128, 0x080c, 0x2dbb,
+	0x0010, 0x080c, 0xd7ca, 0x002e, 0x00ee, 0x080c, 0x9e32, 0x0804,
+	0xc4bc, 0x080c, 0x9e32, 0x0005, 0x2600, 0x0002, 0xc6e0, 0xc6e0,
+	0xc6e0, 0xc6e0, 0xc6e0, 0xc6e2, 0xc6e0, 0xc6e0, 0xc6e0, 0xc6e0,
+	0xc6ff, 0xc6e0, 0xc6e0, 0xc6e0, 0xc711, 0xc71e, 0xc74f, 0xc6e0,
+	0x080c, 0x0db4, 0x080c, 0xd726, 0x1d20, 0x080c, 0x30fd, 0x1d08,
+	0x080c, 0xc869, 0x1148, 0x7038, 0x6016, 0x6007, 0x0045, 0x6003,
+	0x0001, 0x080c, 0x8439, 0x0005, 0x080c, 0x2fda, 0x080c, 0xc227,
+	0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x8439, 0x0005, 0x080c,
+	0xd726, 0x1938, 0x080c, 0x30fd, 0x1920, 0x080c, 0xc869, 0x1d60,
+	0x703c, 0x6016, 0x6007, 0x004a, 0x6003, 0x0001, 0x080c, 0x8439,
+	0x0005, 0x080c, 0xc771, 0x0904, 0xc6c9, 0x6007, 0x004e, 0x6003,
+	0x0001, 0x080c, 0x8439, 0x080c, 0x8973, 0x0005, 0x6007, 0x004f,
+	0x6017, 0x0000, 0x7134, 0x918c, 0x00ff, 0x81ff, 0x0508, 0x9186,
+	0x0001, 0x1160, 0x7140, 0x2001, 0x198e, 0x2004, 0x9106, 0x11b0,
+	0x7144, 0x2001, 0x198f, 0x2004, 0x9106, 0x0190, 0x9186, 0x0002,
+	0x1168, 0x2011, 0x0276, 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048,
+	0x2019, 0x000a, 0x080c, 0xae0d, 0x009e, 0x0110, 0x6017, 0x0001,
+	0x6003, 0x0001, 0x080c, 0x8439, 0x080c, 0x8973, 0x0005, 0x6007,
+	0x0050, 0x703c, 0x6016, 0x0ca0, 0x0016, 0x00e6, 0x2071, 0x0260,
+	0x00b6, 0x00c6, 0x2260, 0x6010, 0x2058, 0xb8bc, 0xd084, 0x0150,
+	0x7128, 0x6048, 0x9106, 0x1120, 0x712c, 0x6044, 0x9106, 0x0110,
+	0x9006, 0x0010, 0x9085, 0x0001, 0x00ce, 0x00be, 0x00ee, 0x001e,
+	0x0005, 0x0016, 0x0096, 0x0086, 0x00e6, 0x01c6, 0x01d6, 0x0126,
+	0x2091, 0x8000, 0x2071, 0x1800, 0x708c, 0x908a, 0x00f9, 0x16e8,
+	0x20e1, 0x0000, 0x2001, 0x1971, 0x2003, 0x0000, 0x080c, 0x1004,
+	0x05a0, 0x2900, 0x6016, 0x708c, 0x8004, 0xa816, 0x908a, 0x001e,
+	0x02d0, 0xa833, 0x001e, 0x20a9, 0x001e, 0xa860, 0x20e8, 0xa85c,
+	0x9080, 0x001b, 0x20a0, 0x2001, 0x1971, 0x0016, 0x200c, 0x0471,
+	0x001e, 0x2940, 0x080c, 0x1004, 0x01c0, 0x2900, 0xa006, 0x2100,
+	0x81ff, 0x0180, 0x0c18, 0xa832, 0x20a8, 0xa860, 0x20e8, 0xa85c,
+	0x9080, 0x001b, 0x20a0, 0x2001, 0x1971, 0x0016, 0x200c, 0x00b1,
+	0x001e, 0x0000, 0x9085, 0x0001, 0x0048, 0x2071, 0x1800, 0x708f,
+	0x0000, 0x6014, 0x2048, 0x080c, 0x0f9d, 0x9006, 0x012e, 0x01de,
+	0x01ce, 0x00ee, 0x008e, 0x009e, 0x001e, 0x0005, 0x0006, 0x0016,
+	0x0026, 0x0036, 0x00c6, 0x918c, 0xffff, 0x11a8, 0x080c, 0x2241,
+	0x2099, 0x026c, 0x2001, 0x0014, 0x3518, 0x9312, 0x1218, 0x23a8,
+	0x4003, 0x00f8, 0x20a8, 0x4003, 0x22a8, 0x8108, 0x080c, 0x2241,
+	0x2099, 0x0260, 0x0ca8, 0x080c, 0x2241, 0x2061, 0x1971, 0x6004,
+	0x2098, 0x6008, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003, 0x0048,
+	0x20a8, 0x4003, 0x22a8, 0x8108, 0x080c, 0x2241, 0x2099, 0x0260,
+	0x0ca8, 0x2061, 0x1971, 0x2019, 0x0280, 0x3300, 0x931e, 0x0110,
+	0x6006, 0x0020, 0x2001, 0x0260, 0x6006, 0x8108, 0x2162, 0x9292,
+	0x0021, 0x9296, 0xffff, 0x620a, 0x00ce, 0x003e, 0x002e, 0x001e,
+	0x000e, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00c6, 0x81ff,
+	0x11b8, 0x080c, 0x2259, 0x20a1, 0x024c, 0x2001, 0x0014, 0x3518,
+	0x9312, 0x1218, 0x23a8, 0x4003, 0x0418, 0x20a8, 0x4003, 0x82ff,
+	0x01f8, 0x22a8, 0x8108, 0x080c, 0x2259, 0x20a1, 0x0240, 0x0c98,
+	0x080c, 0x2259, 0x2061, 0x1974, 0x6004, 0x20a0, 0x6008, 0x3518,
+	0x9312, 0x1218, 0x23a8, 0x4003, 0x0058, 0x20a8, 0x4003, 0x82ff,
+	0x0138, 0x22a8, 0x8108, 0x080c, 0x2259, 0x20a1, 0x0240, 0x0c98,
+	0x2061, 0x1974, 0x2019, 0x0260, 0x3400, 0x931e, 0x0110, 0x6006,
+	0x0020, 0x2001, 0x0240, 0x6006, 0x8108, 0x2162, 0x9292, 0x0021,
+	0x9296, 0xffff, 0x620a, 0x00ce, 0x003e, 0x002e, 0x001e, 0x000e,
+	0x0005, 0x00b6, 0x0066, 0x6610, 0x2658, 0xbe04, 0x96b4, 0xff00,
+	0x8637, 0x9686, 0x0006, 0x0170, 0x9686, 0x0004, 0x0158, 0xbe04,
+	0x96b4, 0x00ff, 0x9686, 0x0006, 0x0128, 0x9686, 0x0004, 0x0110,
+	0x9085, 0x0001, 0x006e, 0x00be, 0x0005, 0x00d6, 0x080c, 0xc901,
+	0x00de, 0x0005, 0x00d6, 0x080c, 0xc90e, 0x1520, 0x680c, 0x908c,
+	0xff00, 0x6820, 0x9084, 0x00ff, 0x9115, 0x6216, 0x6824, 0x602e,
+	0xd1e4, 0x0130, 0x9006, 0x080c, 0xd842, 0x2009, 0x0001, 0x0078,
+	0xd1ec, 0x0180, 0x6920, 0x918c, 0x00ff, 0x6824, 0x080c, 0x2663,
+	0x1148, 0x2001, 0x0001, 0x080c, 0xd842, 0x2110, 0x900e, 0x080c,
+	0x3023, 0x0018, 0x9085, 0x0001, 0x0008, 0x9006, 0x00de, 0x0005,
+	0x00b6, 0x00c6, 0x080c, 0x9e7f, 0x05a8, 0x0016, 0x0026, 0x00c6,
+	0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x2663, 0x1578,
+	0x080c, 0x61de, 0x1560, 0xbe12, 0xbd16, 0x00ce, 0x002e, 0x001e,
+	0x2b00, 0x6012, 0x080c, 0xd726, 0x11d8, 0x080c, 0x30fd, 0x11c0,
+	0x080c, 0xc869, 0x0510, 0x2001, 0x0007, 0x080c, 0x618f, 0x2001,
+	0x0007, 0x080c, 0x61bb, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007,
+	0x0001, 0x6003, 0x0001, 0x080c, 0x8439, 0x080c, 0x8973, 0x0010,
+	0x080c, 0x9e32, 0x9085, 0x0001, 0x00ce, 0x00be, 0x0005, 0x080c,
+	0x9e32, 0x00ce, 0x002e, 0x001e, 0x0ca8, 0x080c, 0x9e32, 0x9006,
+	0x0c98, 0x2069, 0x026d, 0x6800, 0x9082, 0x0010, 0x1228, 0x6017,
+	0x0000, 0x9085, 0x0001, 0x0008, 0x9006, 0x0005, 0x6017, 0x0000,
+	0x2069, 0x026c, 0x6808, 0x9084, 0xff00, 0x9086, 0x0800, 0x1190,
+	0x6904, 0x9186, 0x0018, 0x0118, 0x9186, 0x0014, 0x1158, 0x810f,
+	0x6800, 0x9084, 0x00ff, 0x910d, 0x615a, 0x908e, 0x0014, 0x0110,
+	0x908e, 0x0010, 0x0005, 0x6004, 0x90b2, 0x0053, 0x1a0c, 0x0db4,
+	0x91b6, 0x0013, 0x1130, 0x2008, 0x91b2, 0x0040, 0x1a04, 0xca56,
+	0x0092, 0x91b6, 0x0027, 0x0120, 0x91b6, 0x0014, 0x190c, 0x0db4,
+	0x2001, 0x0007, 0x080c, 0x61bb, 0x080c, 0x886e, 0x080c, 0x9e62,
+	0x080c, 0x8973, 0x0005, 0xc98b, 0xc98d, 0xc98b, 0xc98b, 0xc98b,
+	0xc98d, 0xc99c, 0xca4f, 0xc9ee, 0xca4f, 0xca00, 0xca4f, 0xc99c,
+	0xca4f, 0xca47, 0xca4f, 0xca47, 0xca4f, 0xca4f, 0xc98b, 0xc98b,
+	0xc98b, 0xc98b, 0xc98b, 0xc98b, 0xc98b, 0xc98b, 0xc98b, 0xc98b,
+	0xc98b, 0xc98d, 0xc98b, 0xca4f, 0xc98b, 0xc98b, 0xca4f, 0xc98b,
+	0xca4c, 0xca4f, 0xc98b, 0xc98b, 0xc98b, 0xc98b, 0xca4f, 0xca4f,
+	0xc98b, 0xca4f, 0xca4f, 0xc98b, 0xc997, 0xc98b, 0xc98b, 0xc98b,
+	0xc98b, 0xca4b, 0xca4f, 0xc98b, 0xc98b, 0xca4f, 0xca4f, 0xc98b,
+	0xc98b, 0xc98b, 0xc98b, 0x080c, 0x0db4, 0x080c, 0x886e, 0x080c,
+	0xc22a, 0x6003, 0x0002, 0x080c, 0x8973, 0x0804, 0xca55, 0x9006,
+	0x080c, 0x617b, 0x0804, 0xca4f, 0x080c, 0x655a, 0x1904, 0xca4f,
+	0x9006, 0x080c, 0x617b, 0x6010, 0x2058, 0xb810, 0x9086, 0x00ff,
+	0x1140, 0x00f6, 0x2079, 0x1800, 0x78a4, 0x8000, 0x78a6, 0x00fe,
+	0x0428, 0x6010, 0x2058, 0xb8b0, 0x9005, 0x1178, 0x080c, 0xc212,
+	0x1904, 0xca4f, 0x0036, 0x0046, 0xbba0, 0x2021, 0x0007, 0x080c,
+	0x4a76, 0x004e, 0x003e, 0x0804, 0xca4f, 0x080c, 0x312e, 0x1904,
+	0xca4f, 0x2001, 0x1800, 0x2004, 0x9086, 0x0002, 0x1138, 0x00f6,
+	0x2079, 0x1800, 0x78a4, 0x8000, 0x78a6, 0x00fe, 0x2001, 0x0002,
+	0x080c, 0x618f, 0x080c, 0x886e, 0x6023, 0x0001, 0x6003, 0x0001,
+	0x6007, 0x0002, 0x080c, 0x8439, 0x080c, 0x8973, 0x6110, 0x2158,
+	0x2009, 0x0001, 0x080c, 0x8046, 0x0804, 0xca55, 0x6610, 0x2658,
+	0xbe04, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0904, 0xca4f,
+	0x9686, 0x0004, 0x0904, 0xca4f, 0x2001, 0x0004, 0x0804, 0xca4d,
+	0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1158, 0x0036, 0x0046,
+	0x6010, 0x2058, 0xbba0, 0x2021, 0x0006, 0x080c, 0x4a76, 0x004e,
+	0x003e, 0x2001, 0x0006, 0x080c, 0xca73, 0x6610, 0x2658, 0xbe04,
+	0x0066, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x006e, 0x0168,
+	0x2001, 0x0006, 0x080c, 0x61bb, 0x9284, 0x00ff, 0x908e, 0x0007,
+	0x1120, 0x2001, 0x0006, 0x080c, 0x618f, 0x080c, 0x655a, 0x11f8,
+	0x2001, 0x1836, 0x2004, 0xd0a4, 0x01d0, 0xbe04, 0x96b4, 0x00ff,
+	0x9686, 0x0006, 0x01a0, 0x00f6, 0x2079, 0x1800, 0x78a4, 0x8000,
+	0x78a6, 0x00fe, 0x0804, 0xc9d6, 0x2001, 0x0004, 0x0030, 0x2001,
+	0x0006, 0x0449, 0x0020, 0x0018, 0x0010, 0x080c, 0x61bb, 0x080c,
+	0x886e, 0x080c, 0x9e32, 0x080c, 0x8973, 0x0005, 0x2600, 0x0002,
+	0xca6a, 0xca6a, 0xca6a, 0xca6a, 0xca6a, 0xca6c, 0xca6a, 0xca6a,
+	0xca6a, 0xca6a, 0xca6c, 0xca6a, 0xca6a, 0xca6a, 0xca6c, 0xca6c,
+	0xca6c, 0xca6c, 0x080c, 0x0db4, 0x080c, 0x886e, 0x080c, 0x9e32,
+	0x080c, 0x8973, 0x0005, 0x0016, 0x00b6, 0x00d6, 0x6110, 0x2158,
+	0xb900, 0xd184, 0x0138, 0x080c, 0x618f, 0x9006, 0x080c, 0x617b,
+	0x080c, 0x3003, 0x00de, 0x00be, 0x001e, 0x0005, 0x6610, 0x2658,
+	0xb804, 0x9084, 0xff00, 0x8007, 0x90b2, 0x000c, 0x1a0c, 0x0db4,
+	0x91b6, 0x0015, 0x1110, 0x003b, 0x0028, 0x91b6, 0x0016, 0x190c,
+	0x0db4, 0x006b, 0x0005, 0xa8a1, 0xa8a1, 0xa8a1, 0xa8a1, 0xa8a1,
+	0xa8a1, 0xcaf2, 0xcab3, 0xa8a1, 0xa8a1, 0xa8a1, 0xa8a1, 0xa8a1,
+	0xa8a1, 0xa8a1, 0xa8a1, 0xa8a1, 0xa8a1, 0xcaf2, 0xcaf9, 0xa8a1,
+	0xa8a1, 0xa8a1, 0xa8a1, 0x00f6, 0x080c, 0x655a, 0x11d8, 0x080c,
+	0xc212, 0x11c0, 0x6010, 0x905d, 0x01a8, 0xb8b0, 0x9005, 0x0190,
+	0x9006, 0x080c, 0x617b, 0x2001, 0x0002, 0x080c, 0x618f, 0x6023,
+	0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x8439, 0x080c,
+	0x8973, 0x00f0, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c,
+	0x2663, 0x11b0, 0x080c, 0x623e, 0x0118, 0x080c, 0x9e32, 0x0080,
+	0xb810, 0x0006, 0xb814, 0x0006, 0xb8b0, 0x0006, 0x080c, 0x5ceb,
+	0x000e, 0xb8b2, 0x000e, 0xb816, 0x000e, 0xb812, 0x080c, 0x9e32,
+	0x00fe, 0x0005, 0x6604, 0x96b6, 0x001e, 0x1110, 0x080c, 0x9e32,
+	0x0005, 0x080c, 0xac85, 0x1148, 0x6003, 0x0001, 0x6007, 0x0001,
+	0x080c, 0x8439, 0x080c, 0x8973, 0x0010, 0x080c, 0x9e32, 0x0005,
+	0x6004, 0x908a, 0x0053, 0x1a0c, 0x0db4, 0x080c, 0x886e, 0x080c,
+	0x9e62, 0x080c, 0x8973, 0x0005, 0x9182, 0x0040, 0x0002, 0xcb2a,
+	0xcb2a, 0xcb2a, 0xcb2a, 0xcb2c, 0xcb2a, 0xcb2a, 0xcb2a, 0xcb2a,
+	0xcb2a, 0xcb2a, 0xcb2a, 0xcb2a, 0xcb2a, 0xcb2a, 0xcb2a, 0xcb2a,
+	0xcb2a, 0xcb2a, 0x080c, 0x0db4, 0x0096, 0x00b6, 0x00d6, 0x00e6,
+	0x00f6, 0x0046, 0x0026, 0x6210, 0x2258, 0xb8ac, 0x9005, 0x11a8,
+	0x6106, 0x2071, 0x0260, 0x7444, 0x94a4, 0xff00, 0x0904, 0xcb92,
+	0x080c, 0xd836, 0x1170, 0x9486, 0x2000, 0x1158, 0x2009, 0x0001,
+	0x2011, 0x0200, 0x080c, 0x822f, 0x0020, 0x9026, 0x080c, 0xd76b,
+	0x0c38, 0x080c, 0x0feb, 0x090c, 0x0db4, 0x6003, 0x0007, 0xa867,
+	0x010d, 0x9006, 0xa802, 0xa86a, 0xac8a, 0x2c00, 0xa88e, 0x6008,
+	0xa8e2, 0x6010, 0x2058, 0xb8a0, 0x7130, 0xa97a, 0x0016, 0xa876,
+	0xa87f, 0x0000, 0xa883, 0x0000, 0xa887, 0x0036, 0x080c, 0x688c,
+	0x001e, 0x080c, 0xd836, 0x1904, 0xcbf2, 0x9486, 0x2000, 0x1130,
+	0x2019, 0x0017, 0x080c, 0xd4a6, 0x0804, 0xcbf2, 0x9486, 0x0200,
+	0x1120, 0x080c, 0xd442, 0x0804, 0xcbf2, 0x9486, 0x0400, 0x0120,
+	0x9486, 0x1000, 0x1904, 0xcbf2, 0x2019, 0x0002, 0x080c, 0xd45d,
+	0x0804, 0xcbf2, 0x2069, 0x1a41, 0x6a00, 0xd284, 0x0904, 0xcc5c,
+	0x9284, 0x0300, 0x1904, 0xcc55, 0x6804, 0x9005, 0x0904, 0xcc3d,
+	0x2d78, 0x6003, 0x0007, 0x080c, 0x1004, 0x0904, 0xcbfe, 0x7800,
+	0xd08c, 0x1118, 0x7804, 0x8001, 0x7806, 0x6017, 0x0000, 0x2001,
+	0x180f, 0x2004, 0xd084, 0x1904, 0xcc60, 0x9006, 0xa802, 0xa867,
+	0x0116, 0xa86a, 0x6008, 0xa8e2, 0x2c00, 0xa87a, 0x6010, 0x2058,
+	0xb8a0, 0x7130, 0xa9b6, 0xa876, 0xb928, 0xa9ba, 0xb92c, 0xa9be,
+	0xb930, 0xa9c2, 0xb934, 0xa9c6, 0xa883, 0x003d, 0x7044, 0x9084,
+	0x0003, 0x9080, 0xcbfa, 0x2005, 0xa87e, 0x20a9, 0x000a, 0x2001,
+	0x0270, 0xaa5c, 0x9290, 0x0021, 0x2009, 0x0205, 0x200b, 0x0080,
+	0x20e1, 0x0000, 0xab60, 0x23e8, 0x2098, 0x22a0, 0x4003, 0x200b,
+	0x0000, 0x2001, 0x027a, 0x200c, 0xa9b2, 0x8000, 0x200c, 0xa9ae,
+	0x080c, 0x688c, 0x002e, 0x004e, 0x00fe, 0x00ee, 0x00de, 0x00be,
+	0x009e, 0x0005, 0x0000, 0x0080, 0x0040, 0x0000, 0x2001, 0x1810,
+	0x2004, 0xd084, 0x0120, 0x080c, 0x0feb, 0x1904, 0xcba7, 0x6017,
+	0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x83f1, 0x080c,
+	0x8973, 0x0c00, 0x2069, 0x0260, 0x6848, 0x9084, 0xff00, 0x9086,
+	0x1200, 0x1198, 0x686c, 0x9084, 0x00ff, 0x0016, 0x6114, 0x918c,
+	0xf700, 0x910d, 0x6116, 0x001e, 0x6003, 0x0001, 0x6007, 0x0043,
+	0x080c, 0x83f1, 0x080c, 0x8973, 0x0828, 0x6868, 0x602e, 0x686c,
+	0x6032, 0x6017, 0xf200, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c,
+	0x83f1, 0x080c, 0x8973, 0x0804, 0xcbf2, 0x2001, 0x180e, 0x2004,
+	0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x48d9, 0x6017, 0xf300,
+	0x0010, 0x6017, 0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c,
+	0x83f1, 0x080c, 0x8973, 0x0804, 0xcbf2, 0x6017, 0xf500, 0x0c98,
+	0x6017, 0xf600, 0x0804, 0xcc12, 0x6017, 0xf200, 0x0804, 0xcc12,
+	0xa867, 0x0146, 0xa86b, 0x0000, 0x6008, 0xa886, 0x2c00, 0xa87a,
+	0x7044, 0x9084, 0x0003, 0x9080, 0xcbfa, 0x2005, 0xa87e, 0x2928,
+	0x6010, 0x2058, 0xb8a0, 0xa876, 0xb828, 0xa88a, 0xb82c, 0xa88e,
+	0xb830, 0xa892, 0xb834, 0xa896, 0xa883, 0x003d, 0x2009, 0x0205,
+	0x2104, 0x9085, 0x0080, 0x200a, 0x20e1, 0x0000, 0x2011, 0x0210,
+	0x2214, 0x9294, 0x0fff, 0xaaa2, 0x9282, 0x0111, 0x1a0c, 0x0db4,
+	0x8210, 0x821c, 0x2001, 0x026c, 0x2098, 0xa860, 0x20e8, 0xa85c,
+	0x9080, 0x0029, 0x20a0, 0x2011, 0xccdc, 0x2041, 0x0001, 0x223d,
+	0x9784, 0x00ff, 0x9322, 0x1208, 0x2300, 0x20a8, 0x4003, 0x931a,
+	0x0530, 0x8210, 0xd7fc, 0x1130, 0x8d68, 0x2d0a, 0x2001, 0x0260,
+	0x2098, 0x0c68, 0x2950, 0x080c, 0x1004, 0x0170, 0x2900, 0xb002,
+	0xa867, 0x0147, 0xa86b, 0x0000, 0xa860, 0x20e8, 0xa85c, 0x9080,
+	0x001b, 0x20a0, 0x8840, 0x08d8, 0x2548, 0xa800, 0x902d, 0x0118,
+	0x080c, 0x101d, 0x0cc8, 0x080c, 0x101d, 0x0804, 0xcbfe, 0x2548,
+	0x8847, 0x9885, 0x0046, 0xa866, 0x2009, 0x0205, 0x200b, 0x0000,
+	0x080c, 0xd4d5, 0x0804, 0xcbf2, 0x8010, 0x0004, 0x801a, 0x0006,
+	0x8018, 0x0008, 0x8016, 0x000a, 0x8014, 0x9186, 0x0013, 0x1160,
+	0x6004, 0x908a, 0x0054, 0x1a0c, 0x0db4, 0x9082, 0x0040, 0x0a0c,
+	0x0db4, 0x2008, 0x0804, 0xcd8d, 0x9186, 0x0051, 0x0108, 0x00c0,
+	0x2001, 0x0109, 0x2004, 0xd084, 0x0904, 0xcd3e, 0x0126, 0x2091,
+	0x2800, 0x0006, 0x0016, 0x0026, 0x080c, 0x82dd, 0x002e, 0x001e,
+	0x000e, 0x012e, 0x6000, 0x9086, 0x0002, 0x1580, 0x0804, 0xcdd5,
+	0x9186, 0x0027, 0x0530, 0x9186, 0x0048, 0x0128, 0x9186, 0x0014,
+	0x0500, 0x190c, 0x0db4, 0x2001, 0x0109, 0x2004, 0xd084, 0x01f0,
+	0x00c6, 0x0126, 0x2091, 0x2800, 0x00c6, 0x2061, 0x0100, 0x0006,
+	0x0016, 0x0026, 0x080c, 0x82dd, 0x002e, 0x001e, 0x000e, 0x00ce,
+	0x012e, 0x00ce, 0x6000, 0x9086, 0x0004, 0x190c, 0x0db4, 0x0804,
+	0xceb6, 0x6004, 0x9082, 0x0040, 0x2008, 0x001a, 0x080c, 0x9ec7,
+	0x0005, 0xcd54, 0xcd56, 0xcd56, 0xcd7d, 0xcd54, 0xcd54, 0xcd54,
+	0xcd54, 0xcd54, 0xcd54, 0xcd54, 0xcd54, 0xcd54, 0xcd54, 0xcd54,
+	0xcd54, 0xcd54, 0xcd54, 0xcd54, 0x080c, 0x0db4, 0x080c, 0x886e,
+	0x080c, 0x8973, 0x0036, 0x0096, 0x6014, 0x904d, 0x01d8, 0x080c,
+	0xbb17, 0x01c0, 0x6003, 0x0002, 0x6010, 0x00b6, 0x2058, 0xb800,
+	0x00be, 0xd0bc, 0x1178, 0x2019, 0x0004, 0x080c, 0xd4d5, 0x6017,
+	0x0000, 0x6018, 0x9005, 0x1120, 0x2001, 0x1958, 0x2004, 0x601a,
+	0x6003, 0x0007, 0x009e, 0x003e, 0x0005, 0x0096, 0x080c, 0x886e,
+	0x080c, 0x8973, 0x080c, 0xbb17, 0x0120, 0x6014, 0x2048, 0x080c,
+	0x101d, 0x080c, 0x9e62, 0x009e, 0x0005, 0x0002, 0xcda1, 0xcdb8,
+	0xcda3, 0xcdcf, 0xcda1, 0xcda1, 0xcda1, 0xcda1, 0xcda1, 0xcda1,
+	0xcda1, 0xcda1, 0xcda1, 0xcda1, 0xcda1, 0xcda1, 0xcda1, 0xcda1,
+	0xcda1, 0x080c, 0x0db4, 0x0096, 0x080c, 0x886e, 0x6014, 0x2048,
+	0xa87c, 0xd0b4, 0x0138, 0x6003, 0x0007, 0x2009, 0x0043, 0x080c,
+	0x9eac, 0x0010, 0x6003, 0x0004, 0x080c, 0x8973, 0x009e, 0x0005,
+	0x080c, 0x886e, 0x080c, 0xbb17, 0x0138, 0x6114, 0x0096, 0x2148,
+	0xa97c, 0x009e, 0xd1ec, 0x1138, 0x080c, 0x8204, 0x080c, 0x9e32,
+	0x080c, 0x8973, 0x0005, 0x080c, 0xd72f, 0x0db0, 0x0cc8, 0x080c,
+	0x886e, 0x2009, 0x0041, 0x0804, 0xcf3e, 0x9182, 0x0040, 0x0002,
+	0xcdeb, 0xcded, 0xcdeb, 0xcdeb, 0xcdeb, 0xcdeb, 0xcdeb, 0xcdeb,
+	0xcdeb, 0xcdeb, 0xcdeb, 0xcdeb, 0xcdeb, 0xcdeb, 0xcdeb, 0xcdeb,
+	0xcdeb, 0xcdee, 0xcdeb, 0x080c, 0x0db4, 0x0005, 0x00d6, 0x080c,
+	0x8204, 0x00de, 0x080c, 0xd787, 0x080c, 0x9e32, 0x0005, 0x9182,
+	0x0040, 0x0002, 0xce0d, 0xce0d, 0xce0d, 0xce0d, 0xce0d, 0xce0d,
+	0xce0d, 0xce0d, 0xce0d, 0xce0f, 0xce7e, 0xce0d, 0xce0d, 0xce0d,
+	0xce0d, 0xce7e, 0xce0d, 0xce0d, 0xce0d, 0x080c, 0x0db4, 0x2001,
+	0x0105, 0x2004, 0x9084, 0x1800, 0x01c8, 0x2001, 0x0132, 0x200c,
+	0x2001, 0x0131, 0x2004, 0x9105, 0x1904, 0xce7e, 0x2009, 0x180c,
+	0x2104, 0xd0d4, 0x0904, 0xce7e, 0xc0d4, 0x200a, 0x2009, 0x0105,
+	0x2104, 0x9084, 0xe7fd, 0x9085, 0x0010, 0x200a, 0x2001, 0x1873,
+	0x2004, 0xd0e4, 0x1528, 0x603b, 0x0000, 0x080c, 0x8923, 0x6014,
+	0x0096, 0x2048, 0xa87c, 0xd0fc, 0x0188, 0x908c, 0x0003, 0x918e,
+	0x0002, 0x0508, 0x2001, 0x180c, 0x2004, 0xd0d4, 0x11e0, 0x080c,
+	0x8a4e, 0x2009, 0x0041, 0x009e, 0x0804, 0xcf3e, 0x080c, 0x8a4e,
+	0x6003, 0x0007, 0x601b, 0x0000, 0x080c, 0x8204, 0x009e, 0x0005,
+	0x2001, 0x0100, 0x2004, 0x9082, 0x0005, 0x0aa8, 0x2001, 0x011f,
+	0x2004, 0x603a, 0x0890, 0x2001, 0x180c, 0x200c, 0xc1d4, 0x2102,
+	0xd1cc, 0x0110, 0x080c, 0x2a77, 0x080c, 0x8a4e, 0x6014, 0x2048,
+	0xa97c, 0xd1ec, 0x1130, 0x080c, 0x8204, 0x080c, 0x9e32, 0x009e,
+	0x0005, 0x080c, 0xd72f, 0x0db8, 0x009e, 0x0005, 0x2001, 0x180c,
+	0x200c, 0xc1d4, 0x2102, 0x0036, 0x080c, 0x8923, 0x080c, 0x8a4e,
+	0x6014, 0x0096, 0x2048, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be,
+	0xd0bc, 0x0188, 0xa87c, 0x9084, 0x0003, 0x9086, 0x0002, 0x0140,
+	0xa8ac, 0x6330, 0x931a, 0x6332, 0xa8b0, 0x632c, 0x931b, 0x632e,
+	0x6003, 0x0002, 0x0080, 0x2019, 0x0004, 0x080c, 0xd4d5, 0x6018,
+	0x9005, 0x1128, 0x2001, 0x1958, 0x2004, 0x8003, 0x601a, 0x6017,
+	0x0000, 0x6003, 0x0007, 0x009e, 0x003e, 0x0005, 0x9182, 0x0040,
+	0x0002, 0xcecd, 0xcecd, 0xcecd, 0xcecd, 0xcecd, 0xcecd, 0xcecd,
+	0xcecd, 0xcecf, 0xcecd, 0xcecd, 0xcecd, 0xcecd, 0xcecd, 0xcecd,
+	0xcecd, 0xcecd, 0xcecd, 0xcecd, 0xcf1a, 0x080c, 0x0db4, 0x6014,
+	0x0096, 0x2048, 0xa834, 0xaa38, 0x6110, 0x00b6, 0x2158, 0xb900,
+	0x00be, 0xd1bc, 0x1190, 0x920d, 0x1518, 0xa87c, 0xd0fc, 0x0128,
+	0x2009, 0x0041, 0x009e, 0x0804, 0xcf3e, 0x6003, 0x0007, 0x601b,
+	0x0000, 0x080c, 0x8204, 0x009e, 0x0005, 0x6124, 0xd1f4, 0x1d58,
+	0x0006, 0x0046, 0xacac, 0x9422, 0xa9b0, 0x2200, 0x910b, 0x6030,
+	0x9420, 0x6432, 0x602c, 0x9109, 0x612e, 0x004e, 0x000e, 0x08d8,
+	0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1bc, 0x1178, 0x2009,
+	0x180e, 0x210c, 0xd19c, 0x0118, 0x6003, 0x0007, 0x0010, 0x6003,
+	0x0006, 0x00e9, 0x080c, 0x8206, 0x009e, 0x0005, 0x6003, 0x0002,
+	0x009e, 0x0005, 0x6024, 0xd0f4, 0x0128, 0x080c, 0x150f, 0x1904,
+	0xcecf, 0x0005, 0x6014, 0x0096, 0x2048, 0xa834, 0xa938, 0x009e,
+	0x9105, 0x1120, 0x080c, 0x150f, 0x1904, 0xcecf, 0x0005, 0xd2fc,
+	0x0140, 0x8002, 0x8000, 0x8212, 0x9291, 0x0000, 0x2009, 0x0009,
+	0x0010, 0x2009, 0x0015, 0xaa9a, 0xa896, 0x0005, 0x9182, 0x0040,
+	0x0208, 0x0062, 0x9186, 0x0013, 0x0120, 0x9186, 0x0014, 0x190c,
+	0x0db4, 0x6024, 0xd0dc, 0x090c, 0x0db4, 0x0005, 0xcf61, 0xcf6d,
+	0xcf79, 0xcf85, 0xcf61, 0xcf61, 0xcf61, 0xcf61, 0xcf68, 0xcf63,
+	0xcf63, 0xcf61, 0xcf61, 0xcf61, 0xcf61, 0xcf63, 0xcf61, 0xcf63,
+	0xcf61, 0x080c, 0x0db4, 0x6024, 0xd0dc, 0x090c, 0x0db4, 0x0005,
+	0x6014, 0x9005, 0x190c, 0x0db4, 0x0005, 0x6003, 0x0001, 0x6106,
+	0x080c, 0x83f1, 0x0126, 0x2091, 0x8000, 0x080c, 0x8973, 0x012e,
+	0x0005, 0x6003, 0x0001, 0x6106, 0x080c, 0x83f1, 0x0126, 0x2091,
+	0x8000, 0x080c, 0x8973, 0x012e, 0x0005, 0x6003, 0x0003, 0x6106,
+	0x2c10, 0x080c, 0x1a5c, 0x0126, 0x2091, 0x8000, 0x080c, 0x8456,
+	0x080c, 0x8a4e, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x0036,
+	0x0096, 0x9182, 0x0040, 0x0023, 0x009e, 0x003e, 0x012e, 0x0005,
+	0xcfb0, 0xcfb2, 0xcfc4, 0xcfde, 0xcfb0, 0xcfb0, 0xcfb0, 0xcfb0,
+	0xcfb0, 0xcfb0, 0xcfb0, 0xcfb0, 0xcfb0, 0xcfb0, 0xcfb0, 0xcfb0,
+	0x080c, 0x0db4, 0x6014, 0x2048, 0xa87c, 0xd0fc, 0x01f8, 0x909c,
+	0x0003, 0x939e, 0x0003, 0x01d0, 0x6003, 0x0001, 0x6106, 0x080c,
+	0x83f1, 0x080c, 0x8973, 0x0470, 0x6014, 0x2048, 0xa87c, 0xd0fc,
+	0x0168, 0x909c, 0x0003, 0x939e, 0x0003, 0x0140, 0x6003, 0x0001,
+	0x6106, 0x080c, 0x83f1, 0x080c, 0x8973, 0x00e0, 0x901e, 0x6316,
+	0x631a, 0x2019, 0x0004, 0x080c, 0xd4d5, 0x00a0, 0x6014, 0x2048,
+	0xa87c, 0xd0fc, 0x0d98, 0x909c, 0x0003, 0x939e, 0x0003, 0x0d70,
+	0x6003, 0x0003, 0x6106, 0x2c10, 0x080c, 0x1a5c, 0x080c, 0x8456,
+	0x080c, 0x8a4e, 0x0005, 0x080c, 0x886e, 0x6114, 0x81ff, 0x0158,
+	0x0096, 0x2148, 0x080c, 0xd7d3, 0x0036, 0x2019, 0x0029, 0x080c,
+	0xd4d5, 0x003e, 0x009e, 0x080c, 0x9e62, 0x080c, 0x8973, 0x0005,
+	0x080c, 0x8923, 0x6114, 0x81ff, 0x0158, 0x0096, 0x2148, 0x080c,
+	0xd7d3, 0x0036, 0x2019, 0x0029, 0x080c, 0xd4d5, 0x003e, 0x009e,
+	0x080c, 0x9e62, 0x080c, 0x8a4e, 0x0005, 0x9182, 0x0085, 0x0002,
+	0xd02f, 0xd02d, 0xd02d, 0xd03b, 0xd02d, 0xd02d, 0xd02d, 0xd02d,
+	0xd02d, 0xd02d, 0xd02d, 0xd02d, 0xd02d, 0x080c, 0x0db4, 0x6003,
+	0x000b, 0x6106, 0x080c, 0x83f1, 0x0126, 0x2091, 0x8000, 0x080c,
+	0x8973, 0x012e, 0x0005, 0x0026, 0x00e6, 0x080c, 0xd726, 0x0118,
+	0x080c, 0x9e32, 0x0450, 0x2071, 0x0260, 0x7224, 0x6216, 0x2001,
+	0x180e, 0x2004, 0xd0e4, 0x0150, 0x6010, 0x00b6, 0x2058, 0xbca0,
+	0x00be, 0x2c00, 0x2011, 0x014e, 0x080c, 0xa152, 0x7220, 0x080c,
+	0xd37b, 0x0118, 0x6007, 0x0086, 0x0040, 0x6007, 0x0087, 0x7224,
+	0x9296, 0xffff, 0x1110, 0x6007, 0x0086, 0x6003, 0x0001, 0x080c,
+	0x83f1, 0x080c, 0x8973, 0x080c, 0x8a4e, 0x00ee, 0x002e, 0x0005,
+	0x9186, 0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0db4,
+	0x908a, 0x0092, 0x1a0c, 0x0db4, 0x9082, 0x0085, 0x00a2, 0x9186,
+	0x0027, 0x0130, 0x9186, 0x0014, 0x0118, 0x080c, 0x9ec7, 0x0050,
+	0x2001, 0x0007, 0x080c, 0x61bb, 0x080c, 0x886e, 0x080c, 0x9e62,
+	0x080c, 0x8973, 0x0005, 0xd0a0, 0xd0a2, 0xd0a2, 0xd0a0, 0xd0a0,
+	0xd0a0, 0xd0a0, 0xd0a0, 0xd0a0, 0xd0a0, 0xd0a0, 0xd0a0, 0xd0a0,
+	0x080c, 0x0db4, 0x080c, 0x886e, 0x080c, 0x9e62, 0x080c, 0x8973,
+	0x0005, 0x9182, 0x0085, 0x0a0c, 0x0db4, 0x9182, 0x0092, 0x1a0c,
+	0x0db4, 0x9182, 0x0085, 0x0002, 0xd0c1, 0xd0c1, 0xd0c1, 0xd0c3,
+	0xd0c1, 0xd0c1, 0xd0c1, 0xd0c1, 0xd0c1, 0xd0c1, 0xd0c1, 0xd0c1,
+	0xd0c1, 0x080c, 0x0db4, 0x0005, 0x9186, 0x0013, 0x0148, 0x9186,
+	0x0014, 0x0130, 0x9186, 0x0027, 0x0118, 0x080c, 0x9ec7, 0x0030,
+	0x080c, 0x886e, 0x080c, 0x9e62, 0x080c, 0x8973, 0x0005, 0x0036,
+	0x080c, 0xd787, 0x6043, 0x0000, 0x2019, 0x000b, 0x0031, 0x6023,
+	0x0006, 0x6003, 0x0007, 0x003e, 0x0005, 0x0126, 0x0036, 0x2091,
+	0x8000, 0x0086, 0x2c40, 0x0096, 0x904e, 0x080c, 0x97ba, 0x009e,
+	0x008e, 0x1550, 0x0076, 0x2c38, 0x080c, 0x9865, 0x007e, 0x1520,
+	0x6000, 0x9086, 0x0000, 0x0500, 0x6020, 0x9086, 0x0007, 0x01e0,
+	0x0096, 0x601c, 0xd084, 0x0140, 0x080c, 0xd787, 0x080c, 0xc22a,
+	0x080c, 0x190d, 0x6023, 0x0007, 0x6014, 0x2048, 0x080c, 0xbb17,
+	0x0110, 0x080c, 0xd4d5, 0x009e, 0x6017, 0x0000, 0x080c, 0xd787,
+	0x6023, 0x0007, 0x080c, 0xc22a, 0x003e, 0x012e, 0x0005, 0x00f6,
+	0x00c6, 0x00b6, 0x0036, 0x0156, 0x2079, 0x0260, 0x7938, 0x783c,
+	0x080c, 0x2663, 0x15c8, 0x0016, 0x00c6, 0x080c, 0x623e, 0x1590,
+	0x001e, 0x00c6, 0x2160, 0x080c, 0xc227, 0x00ce, 0x002e, 0x0026,
+	0x0016, 0x2019, 0x0029, 0x080c, 0x9926, 0x080c, 0x8571, 0x0076,
+	0x903e, 0x080c, 0x8469, 0x007e, 0x001e, 0x0076, 0x903e, 0x080c,
+	0xd29b, 0x007e, 0x0026, 0xba04, 0x9294, 0xff00, 0x8217, 0x9286,
+	0x0006, 0x0118, 0x9286, 0x0004, 0x1118, 0xbaa0, 0x080c, 0x3097,
+	0x002e, 0xbcb0, 0x001e, 0x080c, 0x5ceb, 0xbe12, 0xbd16, 0xbcb2,
 	0x9006, 0x0010, 0x00ce, 0x001e, 0x015e, 0x003e, 0x00be, 0x00ce,
 	0x00fe, 0x0005, 0x00c6, 0x00d6, 0x00b6, 0x0016, 0x2009, 0x1823,
-	0x2104, 0x9086, 0x0074, 0x1904, 0xd1a3, 0x2069, 0x0260, 0x6944,
-	0x9182, 0x0100, 0x06e0, 0x6940, 0x9184, 0x8000, 0x0904, 0xd1a0,
+	0x2104, 0x9086, 0x0074, 0x1904, 0xd1c3, 0x2069, 0x0260, 0x6944,
+	0x9182, 0x0100, 0x06e0, 0x6940, 0x9184, 0x8000, 0x0904, 0xd1c0,
 	0x2001, 0x194d, 0x2004, 0x9005, 0x1140, 0x6010, 0x2058, 0xb8b0,
 	0x9005, 0x0118, 0x9184, 0x0800, 0x0598, 0x6948, 0x918a, 0x0001,
-	0x0648, 0x080c, 0xd81b, 0x0118, 0x6978, 0xd1fc, 0x11b8, 0x2009,
+	0x0648, 0x080c, 0xd83b, 0x0118, 0x6978, 0xd1fc, 0x11b8, 0x2009,
 	0x0205, 0x200b, 0x0001, 0x693c, 0x81ff, 0x1198, 0x6944, 0x9182,
 	0x0100, 0x02a8, 0x6940, 0x81ff, 0x1178, 0x6948, 0x918a, 0x0001,
 	0x0288, 0x6950, 0x918a, 0x0001, 0x0298, 0x00d0, 0x6017, 0x0100,
@@ -6507,105 +6511,105 @@
 	0x0026, 0x0036, 0x0156, 0x6210, 0x2258, 0xbb04, 0x9394, 0x00ff,
 	0x9286, 0x0006, 0x0180, 0x9286, 0x0004, 0x0168, 0x9394, 0xff00,
 	0x8217, 0x9286, 0x0006, 0x0138, 0x9286, 0x0004, 0x0120, 0x080c,
-	0x6246, 0x0804, 0xd20a, 0x2011, 0x0276, 0x20a9, 0x0004, 0x0096,
-	0x2b48, 0x2019, 0x000a, 0x080c, 0xadf4, 0x009e, 0x15a0, 0x2011,
+	0x624d, 0x0804, 0xd22a, 0x2011, 0x0276, 0x20a9, 0x0004, 0x0096,
+	0x2b48, 0x2019, 0x000a, 0x080c, 0xae0d, 0x009e, 0x15a0, 0x2011,
 	0x027a, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c,
-	0xadf4, 0x009e, 0x1540, 0x0046, 0x0016, 0xbaa0, 0x2220, 0x9006,
-	0x2009, 0x1854, 0x210c, 0x0038, 0x2009, 0x0029, 0x080c, 0xd50a,
-	0xb800, 0xc0e5, 0xb802, 0x2019, 0x0029, 0x080c, 0x8549, 0x0076,
-	0x2039, 0x0000, 0x080c, 0x8441, 0x2c08, 0x080c, 0xd27b, 0x007e,
-	0x2001, 0x0007, 0x080c, 0x61b4, 0x2001, 0x0007, 0x080c, 0x6188,
+	0xae0d, 0x009e, 0x1540, 0x0046, 0x0016, 0xbaa0, 0x2220, 0x9006,
+	0x2009, 0x1854, 0x210c, 0x0038, 0x2009, 0x0029, 0x080c, 0xd52a,
+	0xb800, 0xc0e5, 0xb802, 0x2019, 0x0029, 0x080c, 0x8571, 0x0076,
+	0x2039, 0x0000, 0x080c, 0x8469, 0x2c08, 0x080c, 0xd29b, 0x007e,
+	0x2001, 0x0007, 0x080c, 0x61bb, 0x2001, 0x0007, 0x080c, 0x618f,
 	0x001e, 0x004e, 0x9006, 0x015e, 0x003e, 0x002e, 0x00be, 0x00ce,
 	0x0005, 0x00d6, 0x2069, 0x026e, 0x6800, 0x9086, 0x0800, 0x0118,
 	0x6017, 0x0000, 0x0008, 0x9006, 0x00de, 0x0005, 0x00b6, 0x00f6,
 	0x0016, 0x0026, 0x0036, 0x0156, 0x2079, 0x026c, 0x7930, 0x7834,
-	0x080c, 0x2663, 0x11d0, 0x080c, 0x6237, 0x11b8, 0x2011, 0x0270,
-	0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x000a, 0x080c, 0xadf4,
+	0x080c, 0x2663, 0x11d0, 0x080c, 0x623e, 0x11b8, 0x2011, 0x0270,
+	0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x000a, 0x080c, 0xae0d,
 	0x009e, 0x1158, 0x2011, 0x0274, 0x20a9, 0x0004, 0x0096, 0x2b48,
-	0x2019, 0x0006, 0x080c, 0xadf4, 0x009e, 0x015e, 0x003e, 0x002e,
+	0x2019, 0x0006, 0x080c, 0xae0d, 0x009e, 0x015e, 0x003e, 0x002e,
 	0x001e, 0x00fe, 0x00be, 0x0005, 0x00b6, 0x0006, 0x0016, 0x0026,
 	0x0036, 0x0156, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c,
-	0x2663, 0x11d0, 0x080c, 0x6237, 0x11b8, 0x2011, 0x0276, 0x20a9,
-	0x0004, 0x0096, 0x2b48, 0x2019, 0x000a, 0x080c, 0xadf4, 0x009e,
+	0x2663, 0x11d0, 0x080c, 0x623e, 0x11b8, 0x2011, 0x0276, 0x20a9,
+	0x0004, 0x0096, 0x2b48, 0x2019, 0x000a, 0x080c, 0xae0d, 0x009e,
 	0x1158, 0x2011, 0x027a, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019,
-	0x0006, 0x080c, 0xadf4, 0x009e, 0x015e, 0x003e, 0x002e, 0x001e,
+	0x0006, 0x080c, 0xae0d, 0x009e, 0x015e, 0x003e, 0x002e, 0x001e,
 	0x000e, 0x00be, 0x0005, 0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066,
 	0x0056, 0x0046, 0x0026, 0x0126, 0x2091, 0x8000, 0x2740, 0x2029,
 	0x19c1, 0x252c, 0x2021, 0x19c7, 0x2424, 0x2061, 0x1cd0, 0x2071,
 	0x1800, 0x7650, 0x7070, 0x81ff, 0x0150, 0x0006, 0x9186, 0x1a80,
-	0x000e, 0x0128, 0x8001, 0x9602, 0x1a04, 0xd314, 0x0018, 0x9606,
-	0x0904, 0xd314, 0x2100, 0x9c06, 0x0904, 0xd30b, 0x080c, 0xd54b,
-	0x1904, 0xd30b, 0x080c, 0xd838, 0x0904, 0xd30b, 0x080c, 0xd53b,
-	0x0904, 0xd30b, 0x6720, 0x9786, 0x0001, 0x1148, 0x080c, 0x3127,
-	0x0904, 0xd32f, 0x6004, 0x9086, 0x0000, 0x1904, 0xd32f, 0x9786,
-	0x0004, 0x0904, 0xd32f, 0x9786, 0x0007, 0x0904, 0xd30b, 0x2500,
-	0x9c06, 0x0904, 0xd30b, 0x2400, 0x9c06, 0x05e8, 0x88ff, 0x0118,
+	0x000e, 0x0128, 0x8001, 0x9602, 0x1a04, 0xd334, 0x0018, 0x9606,
+	0x0904, 0xd334, 0x2100, 0x9c06, 0x0904, 0xd32b, 0x080c, 0xd56b,
+	0x1904, 0xd32b, 0x080c, 0xd858, 0x0904, 0xd32b, 0x080c, 0xd55b,
+	0x0904, 0xd32b, 0x6720, 0x9786, 0x0001, 0x1148, 0x080c, 0x312e,
+	0x0904, 0xd34f, 0x6004, 0x9086, 0x0000, 0x1904, 0xd34f, 0x9786,
+	0x0004, 0x0904, 0xd34f, 0x9786, 0x0007, 0x0904, 0xd32b, 0x2500,
+	0x9c06, 0x0904, 0xd32b, 0x2400, 0x9c06, 0x05e8, 0x88ff, 0x0118,
 	0x6054, 0x9906, 0x15c0, 0x0096, 0x6000, 0x9086, 0x0004, 0x1120,
 	0x0016, 0x080c, 0x190d, 0x001e, 0x9786, 0x000a, 0x0148, 0x080c,
-	0xbd04, 0x1130, 0x080c, 0xa7a7, 0x009e, 0x080c, 0x9e49, 0x0418,
-	0x6014, 0x2048, 0x080c, 0xbafe, 0x01d8, 0x9786, 0x0003, 0x1570,
+	0xbd1d, 0x1130, 0x080c, 0xa7c0, 0x009e, 0x080c, 0x9e62, 0x0418,
+	0x6014, 0x2048, 0x080c, 0xbb17, 0x01d8, 0x9786, 0x0003, 0x1570,
 	0xa867, 0x0103, 0xa87c, 0xd0cc, 0x0130, 0x0096, 0xa878, 0x2048,
-	0x080c, 0x0f9d, 0x009e, 0xab7a, 0xa877, 0x0000, 0x080c, 0xd7b3,
-	0x0016, 0x080c, 0xbded, 0x080c, 0x6878, 0x001e, 0x080c, 0xbce7,
-	0x009e, 0x080c, 0x9e49, 0x9ce0, 0x0018, 0x2001, 0x1819, 0x2004,
-	0x9c02, 0x1210, 0x0804, 0xd28f, 0x012e, 0x002e, 0x004e, 0x005e,
+	0x080c, 0x0f9d, 0x009e, 0xab7a, 0xa877, 0x0000, 0x080c, 0xd7d3,
+	0x0016, 0x080c, 0xbe06, 0x080c, 0x687f, 0x001e, 0x080c, 0xbd00,
+	0x009e, 0x080c, 0x9e62, 0x9ce0, 0x0018, 0x2001, 0x1819, 0x2004,
+	0x9c02, 0x1210, 0x0804, 0xd2af, 0x012e, 0x002e, 0x004e, 0x005e,
 	0x006e, 0x007e, 0x008e, 0x00ce, 0x00ee, 0x0005, 0x9786, 0x0006,
-	0x1150, 0x9386, 0x0005, 0x0128, 0x080c, 0xd7b3, 0x080c, 0xd4b5,
+	0x1150, 0x9386, 0x0005, 0x0128, 0x080c, 0xd7d3, 0x080c, 0xd4d5,
 	0x08f8, 0x009e, 0x0c00, 0x9786, 0x000a, 0x0920, 0x0808, 0x81ff,
 	0x09d0, 0x9180, 0x0001, 0x2004, 0x9086, 0x0018, 0x0130, 0x9180,
 	0x0001, 0x2004, 0x9086, 0x002d, 0x1970, 0x6000, 0x9086, 0x0002,
-	0x1950, 0x080c, 0xbcf3, 0x0130, 0x080c, 0xbd04, 0x1920, 0x080c,
-	0xa7a7, 0x0038, 0x080c, 0x2ffc, 0x080c, 0xbd04, 0x1110, 0x080c,
-	0xa7a7, 0x080c, 0x9e49, 0x0804, 0xd30b, 0xa864, 0x9084, 0x00ff,
+	0x1950, 0x080c, 0xbd0c, 0x0130, 0x080c, 0xbd1d, 0x1920, 0x080c,
+	0xa7c0, 0x0038, 0x080c, 0x3003, 0x080c, 0xbd1d, 0x1110, 0x080c,
+	0xa7c0, 0x080c, 0x9e62, 0x0804, 0xd32b, 0xa864, 0x9084, 0x00ff,
 	0x9086, 0x0039, 0x0005, 0x00c6, 0x00e6, 0x0016, 0x2c08, 0x2170,
-	0x9006, 0x080c, 0xd4dc, 0x001e, 0x0120, 0x6020, 0x9084, 0x000f,
-	0x001b, 0x00ee, 0x00ce, 0x0005, 0xd37a, 0xd37a, 0xd37a, 0xd37a,
-	0xd37a, 0xd37a, 0xd37c, 0xd37a, 0xd37a, 0xd37a, 0xd37a, 0x9e49,
-	0x9e49, 0xd37a, 0x9006, 0x0005, 0x0036, 0x0046, 0x0016, 0x7010,
+	0x9006, 0x080c, 0xd4fc, 0x001e, 0x0120, 0x6020, 0x9084, 0x000f,
+	0x001b, 0x00ee, 0x00ce, 0x0005, 0xd39a, 0xd39a, 0xd39a, 0xd39a,
+	0xd39a, 0xd39a, 0xd39c, 0xd39a, 0xd39a, 0xd39a, 0xd39a, 0x9e62,
+	0x9e62, 0xd39a, 0x9006, 0x0005, 0x0036, 0x0046, 0x0016, 0x7010,
 	0x00b6, 0x2058, 0xbca0, 0x00be, 0x2c00, 0x2009, 0x0020, 0x080c,
-	0xd50a, 0x001e, 0x004e, 0x2019, 0x0002, 0x080c, 0xd0c7, 0x003e,
-	0x9085, 0x0001, 0x0005, 0x0096, 0x080c, 0xbafe, 0x0140, 0x6014,
-	0x904d, 0x080c, 0xb731, 0x687b, 0x0005, 0x080c, 0x6885, 0x009e,
-	0x080c, 0x9e49, 0x9085, 0x0001, 0x0005, 0x2001, 0x0001, 0x080c,
-	0x6174, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019,
-	0x1805, 0x2011, 0x0276, 0x080c, 0xade0, 0x003e, 0x002e, 0x001e,
+	0xd52a, 0x001e, 0x004e, 0x2019, 0x0002, 0x080c, 0xd0e5, 0x003e,
+	0x9085, 0x0001, 0x0005, 0x0096, 0x080c, 0xbb17, 0x0140, 0x6014,
+	0x904d, 0x080c, 0xb74a, 0x687b, 0x0005, 0x080c, 0x688c, 0x009e,
+	0x080c, 0x9e62, 0x9085, 0x0001, 0x0005, 0x2001, 0x0001, 0x080c,
+	0x617b, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019,
+	0x1805, 0x2011, 0x0276, 0x080c, 0xadf9, 0x003e, 0x002e, 0x001e,
 	0x015e, 0x9005, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086, 0x0076,
 	0x0066, 0x00b6, 0x0126, 0x2091, 0x8000, 0x2740, 0x2061, 0x1cd0,
-	0x2079, 0x0001, 0x8fff, 0x0904, 0xd415, 0x2071, 0x1800, 0x7650,
-	0x7070, 0x8001, 0x9602, 0x1a04, 0xd415, 0x88ff, 0x0120, 0x2800,
-	0x9c06, 0x1590, 0x2078, 0x080c, 0xd53b, 0x0570, 0x2400, 0x9c06,
+	0x2079, 0x0001, 0x8fff, 0x0904, 0xd435, 0x2071, 0x1800, 0x7650,
+	0x7070, 0x8001, 0x9602, 0x1a04, 0xd435, 0x88ff, 0x0120, 0x2800,
+	0x9c06, 0x1590, 0x2078, 0x080c, 0xd55b, 0x0570, 0x2400, 0x9c06,
 	0x0558, 0x6720, 0x9786, 0x0006, 0x1538, 0x9786, 0x0007, 0x0520,
 	0x88ff, 0x1140, 0x6010, 0x9b06, 0x11f8, 0x85ff, 0x0118, 0x6054,
-	0x9106, 0x11d0, 0x0096, 0x601c, 0xd084, 0x0140, 0x080c, 0xd767,
-	0x080c, 0xc211, 0x080c, 0x190d, 0x6023, 0x0007, 0x6014, 0x2048,
-	0x080c, 0xbafe, 0x0120, 0x0046, 0x080c, 0xd4b5, 0x004e, 0x009e,
-	0x080c, 0x9e49, 0x88ff, 0x1198, 0x9ce0, 0x0018, 0x2001, 0x1819,
-	0x2004, 0x9c02, 0x1210, 0x0804, 0xd3ca, 0x9006, 0x012e, 0x00be,
+	0x9106, 0x11d0, 0x0096, 0x601c, 0xd084, 0x0140, 0x080c, 0xd787,
+	0x080c, 0xc22a, 0x080c, 0x190d, 0x6023, 0x0007, 0x6014, 0x2048,
+	0x080c, 0xbb17, 0x0120, 0x0046, 0x080c, 0xd4d5, 0x004e, 0x009e,
+	0x080c, 0x9e62, 0x88ff, 0x1198, 0x9ce0, 0x0018, 0x2001, 0x1819,
+	0x2004, 0x9c02, 0x1210, 0x0804, 0xd3ea, 0x9006, 0x012e, 0x00be,
 	0x006e, 0x007e, 0x008e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x98c5,
 	0x0001, 0x0ca0, 0x00b6, 0x0076, 0x0056, 0x0086, 0x9046, 0x2029,
 	0x0001, 0x2c20, 0x2019, 0x0002, 0x6210, 0x2258, 0x0096, 0x904e,
-	0x080c, 0x97a1, 0x009e, 0x008e, 0x903e, 0x080c, 0x984c, 0x080c,
-	0xd3bb, 0x005e, 0x007e, 0x00be, 0x0005, 0x00b6, 0x0046, 0x0056,
+	0x080c, 0x97ba, 0x009e, 0x008e, 0x903e, 0x080c, 0x9865, 0x080c,
+	0xd3db, 0x005e, 0x007e, 0x00be, 0x0005, 0x00b6, 0x0046, 0x0056,
 	0x0076, 0x00c6, 0x0156, 0x2c20, 0x2128, 0x20a9, 0x007f, 0x900e,
-	0x0016, 0x0036, 0x080c, 0x6237, 0x1190, 0x0056, 0x0086, 0x9046,
-	0x2508, 0x2029, 0x0001, 0x0096, 0x904e, 0x080c, 0x97a1, 0x009e,
-	0x008e, 0x903e, 0x080c, 0x984c, 0x080c, 0xd3bb, 0x005e, 0x003e,
-	0x001e, 0x8108, 0x1f04, 0xd448, 0x015e, 0x00ce, 0x007e, 0x005e,
+	0x0016, 0x0036, 0x080c, 0x623e, 0x1190, 0x0056, 0x0086, 0x9046,
+	0x2508, 0x2029, 0x0001, 0x0096, 0x904e, 0x080c, 0x97ba, 0x009e,
+	0x008e, 0x903e, 0x080c, 0x9865, 0x080c, 0xd3db, 0x005e, 0x003e,
+	0x001e, 0x8108, 0x1f04, 0xd468, 0x015e, 0x00ce, 0x007e, 0x005e,
 	0x004e, 0x00be, 0x0005, 0x00b6, 0x0076, 0x0056, 0x6210, 0x2258,
 	0x0086, 0x9046, 0x2029, 0x0001, 0x2019, 0x0048, 0x0096, 0x904e,
-	0x080c, 0x97a1, 0x009e, 0x008e, 0x903e, 0x080c, 0x984c, 0x2c20,
-	0x080c, 0xd3bb, 0x005e, 0x007e, 0x00be, 0x0005, 0x00b6, 0x0046,
+	0x080c, 0x97ba, 0x009e, 0x008e, 0x903e, 0x080c, 0x9865, 0x2c20,
+	0x080c, 0xd3db, 0x005e, 0x007e, 0x00be, 0x0005, 0x00b6, 0x0046,
 	0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20, 0x20a9, 0x0800, 0x900e,
-	0x0016, 0x0036, 0x080c, 0x6237, 0x11a0, 0x0086, 0x9046, 0x2828,
-	0x0046, 0x2021, 0x0001, 0x080c, 0xd74b, 0x004e, 0x0096, 0x904e,
-	0x080c, 0x97a1, 0x009e, 0x008e, 0x903e, 0x080c, 0x984c, 0x080c,
-	0xd3bb, 0x003e, 0x001e, 0x8108, 0x1f04, 0xd490, 0x015e, 0x00ce,
+	0x0016, 0x0036, 0x080c, 0x623e, 0x11a0, 0x0086, 0x9046, 0x2828,
+	0x0046, 0x2021, 0x0001, 0x080c, 0xd76b, 0x004e, 0x0096, 0x904e,
+	0x080c, 0x97ba, 0x009e, 0x008e, 0x903e, 0x080c, 0x9865, 0x080c,
+	0xd3db, 0x003e, 0x001e, 0x8108, 0x1f04, 0xd4b0, 0x015e, 0x00ce,
 	0x007e, 0x005e, 0x004e, 0x00be, 0x0005, 0x0016, 0x00f6, 0x080c,
-	0xbafc, 0x0198, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0046, 0x0180,
-	0xa800, 0x907d, 0x0138, 0xa803, 0x0000, 0xab82, 0x080c, 0x6885,
-	0x2f48, 0x0cb0, 0xab82, 0x080c, 0x6885, 0x00fe, 0x001e, 0x0005,
-	0xa800, 0x907d, 0x0130, 0xa803, 0x0000, 0x080c, 0x6885, 0x2f48,
-	0x0cb8, 0x080c, 0x6885, 0x0c88, 0x00e6, 0x0046, 0x0036, 0x2061,
+	0xbb15, 0x0198, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0046, 0x0180,
+	0xa800, 0x907d, 0x0138, 0xa803, 0x0000, 0xab82, 0x080c, 0x688c,
+	0x2f48, 0x0cb0, 0xab82, 0x080c, 0x688c, 0x00fe, 0x001e, 0x0005,
+	0xa800, 0x907d, 0x0130, 0xa803, 0x0000, 0x080c, 0x688c, 0x2f48,
+	0x0cb8, 0x080c, 0x688c, 0x0c88, 0x00e6, 0x0046, 0x0036, 0x2061,
 	0x1cd0, 0x9005, 0x1138, 0x2071, 0x1800, 0x7450, 0x7070, 0x8001,
 	0x9402, 0x12d8, 0x2100, 0x9c06, 0x0168, 0x6000, 0x9086, 0x0000,
 	0x0148, 0x6008, 0x9206, 0x1130, 0x6010, 0x91a0, 0x0004, 0x2424,
@@ -6613,43 +6617,43 @@
 	0x1220, 0x0c40, 0x9085, 0x0001, 0x0008, 0x9006, 0x003e, 0x004e,
 	0x00ee, 0x0005, 0x0096, 0x0006, 0x080c, 0x0feb, 0x000e, 0x090c,
 	0x0db4, 0xaae2, 0xa867, 0x010d, 0xa88e, 0x0026, 0x2010, 0x080c,
-	0xbaec, 0x2001, 0x0000, 0x0120, 0x2200, 0x9080, 0x0015, 0x2004,
+	0xbb05, 0x2001, 0x0000, 0x0120, 0x2200, 0x9080, 0x0015, 0x2004,
 	0x002e, 0xa87a, 0x9186, 0x0020, 0x0110, 0xa8e3, 0xffff, 0xa986,
 	0xac76, 0xa87f, 0x0000, 0x2001, 0x195f, 0x2004, 0xa882, 0x9006,
-	0xa802, 0xa86a, 0xa88a, 0x0126, 0x2091, 0x8000, 0x080c, 0x6885,
+	0xa802, 0xa86a, 0xa88a, 0x0126, 0x2091, 0x8000, 0x080c, 0x688c,
 	0x012e, 0x009e, 0x0005, 0x6700, 0x9786, 0x0000, 0x0158, 0x9786,
 	0x0001, 0x0140, 0x9786, 0x000a, 0x0128, 0x9786, 0x0009, 0x0110,
 	0x9085, 0x0001, 0x0005, 0x00e6, 0x6010, 0x9075, 0x0138, 0x00b6,
 	0x2058, 0xb8a0, 0x00be, 0x9206, 0x00ee, 0x0005, 0x9085, 0x0001,
 	0x0cd8, 0x0016, 0x6004, 0x908e, 0x001e, 0x11a0, 0x8007, 0x6134,
 	0x918c, 0x00ff, 0x9105, 0x6036, 0x6007, 0x0085, 0x6003, 0x000b,
-	0x6023, 0x0005, 0x2001, 0x1958, 0x2004, 0x601a, 0x080c, 0x83c9,
-	0x080c, 0x894b, 0x001e, 0x0005, 0xa001, 0xa001, 0x0005, 0x6024,
-	0xd0e4, 0x0158, 0xd0cc, 0x0118, 0x080c, 0xbe31, 0x0030, 0x080c,
-	0xd767, 0x080c, 0x81dc, 0x080c, 0x9e19, 0x0005, 0x9280, 0x0008,
-	0x2004, 0x9084, 0x000f, 0x0002, 0xd59a, 0xd59a, 0xd59a, 0xd59c,
-	0xd59a, 0xd59c, 0xd59c, 0xd59a, 0xd59c, 0xd59a, 0xd59a, 0xd59a,
-	0xd59a, 0xd59a, 0x9006, 0x0005, 0x9085, 0x0001, 0x0005, 0x9280,
-	0x0008, 0x2004, 0x9084, 0x000f, 0x0002, 0xd5b3, 0xd5b3, 0xd5b3,
-	0xd5b3, 0xd5b3, 0xd5b3, 0xd5c0, 0xd5b3, 0xd5b3, 0xd5b3, 0xd5b3,
-	0xd5b3, 0xd5b3, 0xd5b3, 0x6007, 0x003b, 0x602f, 0x0009, 0x6017,
-	0x2a00, 0x6003, 0x0001, 0x080c, 0x83c9, 0x080c, 0x894b, 0x0005,
-	0x0096, 0x00c6, 0x2260, 0x080c, 0xd767, 0x6043, 0x0000, 0x6024,
+	0x6023, 0x0005, 0x2001, 0x1958, 0x2004, 0x601a, 0x080c, 0x83f1,
+	0x080c, 0x8973, 0x001e, 0x0005, 0xa001, 0xa001, 0x0005, 0x6024,
+	0xd0e4, 0x0158, 0xd0cc, 0x0118, 0x080c, 0xbe4a, 0x0030, 0x080c,
+	0xd787, 0x080c, 0x8204, 0x080c, 0x9e32, 0x0005, 0x9280, 0x0008,
+	0x2004, 0x9084, 0x000f, 0x0002, 0xd5ba, 0xd5ba, 0xd5ba, 0xd5bc,
+	0xd5ba, 0xd5bc, 0xd5bc, 0xd5ba, 0xd5bc, 0xd5ba, 0xd5ba, 0xd5ba,
+	0xd5ba, 0xd5ba, 0x9006, 0x0005, 0x9085, 0x0001, 0x0005, 0x9280,
+	0x0008, 0x2004, 0x9084, 0x000f, 0x0002, 0xd5d3, 0xd5d3, 0xd5d3,
+	0xd5d3, 0xd5d3, 0xd5d3, 0xd5e0, 0xd5d3, 0xd5d3, 0xd5d3, 0xd5d3,
+	0xd5d3, 0xd5d3, 0xd5d3, 0x6007, 0x003b, 0x602f, 0x0009, 0x6017,
+	0x2a00, 0x6003, 0x0001, 0x080c, 0x83f1, 0x080c, 0x8973, 0x0005,
+	0x0096, 0x00c6, 0x2260, 0x080c, 0xd787, 0x6043, 0x0000, 0x6024,
 	0xc0f4, 0xc0e4, 0x6026, 0x603b, 0x0000, 0x00ce, 0x00d6, 0x2268,
-	0x9186, 0x0007, 0x1904, 0xd619, 0x6814, 0x9005, 0x0138, 0x2048,
+	0x9186, 0x0007, 0x1904, 0xd639, 0x6814, 0x9005, 0x0138, 0x2048,
 	0xa87c, 0xd0fc, 0x1118, 0x00de, 0x009e, 0x08a8, 0x6007, 0x003a,
-	0x6003, 0x0001, 0x080c, 0x83c9, 0x080c, 0x894b, 0x00c6, 0x2d60,
-	0x6100, 0x9186, 0x0002, 0x1904, 0xd690, 0x6014, 0x9005, 0x1138,
-	0x6000, 0x9086, 0x0007, 0x190c, 0x0db4, 0x0804, 0xd690, 0x2048,
-	0x080c, 0xbafe, 0x1130, 0x0028, 0x2048, 0xa800, 0x9005, 0x1de0,
+	0x6003, 0x0001, 0x080c, 0x83f1, 0x080c, 0x8973, 0x00c6, 0x2d60,
+	0x6100, 0x9186, 0x0002, 0x1904, 0xd6b0, 0x6014, 0x9005, 0x1138,
+	0x6000, 0x9086, 0x0007, 0x190c, 0x0db4, 0x0804, 0xd6b0, 0x2048,
+	0x080c, 0xbb17, 0x1130, 0x0028, 0x2048, 0xa800, 0x9005, 0x1de0,
 	0x2900, 0x2048, 0xa87c, 0x9084, 0x0003, 0x9086, 0x0002, 0x1168,
 	0xa87c, 0xc0dc, 0xc0f4, 0xa87e, 0xa880, 0xc0fc, 0xa882, 0x2009,
-	0x0043, 0x080c, 0xcf20, 0x0804, 0xd690, 0x2009, 0x0041, 0x0804,
-	0xd68a, 0x9186, 0x0005, 0x15a0, 0x6814, 0x2048, 0xa87c, 0xd0bc,
-	0x1120, 0x00de, 0x009e, 0x0804, 0xd5b3, 0xd0b4, 0x0128, 0xd0fc,
-	0x090c, 0x0db4, 0x0804, 0xd5d4, 0x6007, 0x003a, 0x6003, 0x0001,
-	0x080c, 0x83c9, 0x080c, 0x894b, 0x00c6, 0x2d60, 0x6100, 0x9186,
-	0x0002, 0x0120, 0x9186, 0x0004, 0x1904, 0xd690, 0x6814, 0x2048,
+	0x0043, 0x080c, 0xcf3e, 0x0804, 0xd6b0, 0x2009, 0x0041, 0x0804,
+	0xd6aa, 0x9186, 0x0005, 0x15a0, 0x6814, 0x2048, 0xa87c, 0xd0bc,
+	0x1120, 0x00de, 0x009e, 0x0804, 0xd5d3, 0xd0b4, 0x0128, 0xd0fc,
+	0x090c, 0x0db4, 0x0804, 0xd5f4, 0x6007, 0x003a, 0x6003, 0x0001,
+	0x080c, 0x83f1, 0x080c, 0x8973, 0x00c6, 0x2d60, 0x6100, 0x9186,
+	0x0002, 0x0120, 0x9186, 0x0004, 0x1904, 0xd6b0, 0x6814, 0x2048,
 	0xa97c, 0xc1f4, 0xc1dc, 0xa97e, 0xa980, 0xc1fc, 0xc1bc, 0xa982,
 	0x00f6, 0x2c78, 0x080c, 0x1648, 0x00fe, 0x2009, 0x0042, 0x04d0,
 	0x0036, 0x080c, 0x0feb, 0x090c, 0x0db4, 0xa867, 0x010d, 0x9006,
@@ -6657,24 +6661,24 @@
 	0xa892, 0x6038, 0xa8a2, 0x2360, 0x6024, 0xc0dd, 0x6026, 0x6010,
 	0x00b6, 0x2058, 0xb8a0, 0x00be, 0x2004, 0x6354, 0xab7a, 0xa876,
 	0x9006, 0xa87e, 0xa882, 0xad9a, 0xae96, 0xa89f, 0x0001, 0x080c,
-	0x6885, 0x2019, 0x0045, 0x6008, 0x2068, 0x080c, 0xd0c7, 0x2d00,
+	0x688c, 0x2019, 0x0045, 0x6008, 0x2068, 0x080c, 0xd0e5, 0x2d00,
 	0x600a, 0x6023, 0x0006, 0x6003, 0x0007, 0x901e, 0x631a, 0x6342,
-	0x003e, 0x0038, 0x6043, 0x0000, 0x6003, 0x0007, 0x080c, 0xcf20,
+	0x003e, 0x0038, 0x6043, 0x0000, 0x6003, 0x0007, 0x080c, 0xcf3e,
 	0x00ce, 0x00de, 0x009e, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004,
 	0x9082, 0x0085, 0x2008, 0x00c2, 0x9186, 0x0027, 0x1178, 0x080c,
-	0x8846, 0x0036, 0x0096, 0x6014, 0x2048, 0x2019, 0x0004, 0x080c,
-	0xd4b5, 0x009e, 0x003e, 0x080c, 0x894b, 0x0005, 0x9186, 0x0014,
-	0x0d70, 0x080c, 0x9eae, 0x0005, 0xd6c3, 0xd6c1, 0xd6c1, 0xd6c1,
-	0xd6c1, 0xd6c1, 0xd6c3, 0xd6c1, 0xd6c1, 0xd6c1, 0xd6c1, 0xd6c1,
-	0xd6c1, 0x080c, 0x0db4, 0x080c, 0x8846, 0x6003, 0x000c, 0x080c,
-	0x894b, 0x0005, 0x9182, 0x0092, 0x1220, 0x9182, 0x0085, 0x0208,
-	0x001a, 0x080c, 0x9eae, 0x0005, 0xd6e1, 0xd6e1, 0xd6e1, 0xd6e1,
-	0xd6e3, 0xd703, 0xd6e1, 0xd6e1, 0xd6e1, 0xd6e1, 0xd6e1, 0xd6e1,
-	0xd6e1, 0x080c, 0x0db4, 0x00d6, 0x2c68, 0x080c, 0x9dc3, 0x01b0,
+	0x886e, 0x0036, 0x0096, 0x6014, 0x2048, 0x2019, 0x0004, 0x080c,
+	0xd4d5, 0x009e, 0x003e, 0x080c, 0x8973, 0x0005, 0x9186, 0x0014,
+	0x0d70, 0x080c, 0x9ec7, 0x0005, 0xd6e3, 0xd6e1, 0xd6e1, 0xd6e1,
+	0xd6e1, 0xd6e1, 0xd6e3, 0xd6e1, 0xd6e1, 0xd6e1, 0xd6e1, 0xd6e1,
+	0xd6e1, 0x080c, 0x0db4, 0x080c, 0x886e, 0x6003, 0x000c, 0x080c,
+	0x8973, 0x0005, 0x9182, 0x0092, 0x1220, 0x9182, 0x0085, 0x0208,
+	0x001a, 0x080c, 0x9ec7, 0x0005, 0xd701, 0xd701, 0xd701, 0xd701,
+	0xd703, 0xd723, 0xd701, 0xd701, 0xd701, 0xd701, 0xd701, 0xd701,
+	0xd701, 0x080c, 0x0db4, 0x00d6, 0x2c68, 0x080c, 0x9ddc, 0x01b0,
 	0x6003, 0x0001, 0x6007, 0x001e, 0x2009, 0x026e, 0x210c, 0x613a,
 	0x2009, 0x026f, 0x210c, 0x613e, 0x600b, 0xffff, 0x6910, 0x6112,
-	0x6023, 0x0004, 0x080c, 0x83c9, 0x080c, 0x894b, 0x2d60, 0x080c,
-	0x9e19, 0x00de, 0x0005, 0x080c, 0x9e19, 0x0005, 0x00e6, 0x6010,
+	0x6023, 0x0004, 0x080c, 0x83f1, 0x080c, 0x8973, 0x2d60, 0x080c,
+	0x9e32, 0x00de, 0x0005, 0x080c, 0x9e32, 0x0005, 0x00e6, 0x6010,
 	0x00b6, 0x2058, 0xb800, 0x00be, 0xd0ec, 0x00ee, 0x0005, 0x2009,
 	0x1873, 0x210c, 0xd1ec, 0x05b0, 0x6003, 0x0002, 0x6024, 0xc0e5,
 	0x6026, 0xd0cc, 0x0150, 0x2001, 0x1959, 0x2004, 0x6042, 0x2009,
@@ -6685,17 +6689,17 @@
 	0x9005, 0x0118, 0x9088, 0x0003, 0x0cd0, 0x2c0a, 0x600f, 0x0000,
 	0x9085, 0x0001, 0x0005, 0x0016, 0x00c6, 0x00e6, 0x6154, 0xb8ac,
 	0x2060, 0x8cff, 0x0180, 0x84ff, 0x1118, 0x6054, 0x9106, 0x1138,
-	0x600c, 0x2072, 0x080c, 0x81dc, 0x080c, 0x9e19, 0x0010, 0x9cf0,
+	0x600c, 0x2072, 0x080c, 0x8204, 0x080c, 0x9e32, 0x0010, 0x9cf0,
 	0x0003, 0x2e64, 0x0c70, 0x00ee, 0x00ce, 0x001e, 0x0005, 0x00d6,
 	0x00b6, 0x6010, 0x2058, 0xb8ac, 0x2068, 0x9005, 0x0130, 0x9c06,
 	0x0110, 0x680c, 0x0cd0, 0x600c, 0x680e, 0x00be, 0x00de, 0x0005,
 	0x0026, 0x0036, 0x0156, 0x2011, 0x182b, 0x2204, 0x9084, 0x00ff,
 	0x2019, 0x026e, 0x2334, 0x9636, 0x1508, 0x8318, 0x2334, 0x2204,
 	0x9084, 0xff00, 0x9636, 0x11d0, 0x2011, 0x0270, 0x20a9, 0x0004,
-	0x6010, 0x0096, 0x2048, 0x2019, 0x000a, 0x080c, 0xadf4, 0x009e,
+	0x6010, 0x0096, 0x2048, 0x2019, 0x000a, 0x080c, 0xae0d, 0x009e,
 	0x1168, 0x2011, 0x0274, 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048,
-	0x2019, 0x0006, 0x080c, 0xadf4, 0x009e, 0x1100, 0x015e, 0x003e,
-	0x002e, 0x0005, 0x00e6, 0x2071, 0x1800, 0x080c, 0x5c5d, 0x080c,
+	0x2019, 0x0006, 0x080c, 0xae0d, 0x009e, 0x1100, 0x015e, 0x003e,
+	0x002e, 0x0005, 0x00e6, 0x2071, 0x1800, 0x080c, 0x5c64, 0x080c,
 	0x2dbb, 0x00ee, 0x0005, 0x00e6, 0x6010, 0x00b6, 0x2058, 0xb800,
 	0x00be, 0xd0fc, 0x0108, 0x0011, 0x00ee, 0x0005, 0xa880, 0xc0e5,
 	0xa882, 0x0005, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066, 0x0056,
@@ -6703,17 +6707,17 @@
 	0x252c, 0x2021, 0x19c7, 0x2424, 0x2061, 0x1cd0, 0x2071, 0x1800,
 	0x7650, 0x7070, 0x9606, 0x0578, 0x6720, 0x9786, 0x0001, 0x0118,
 	0x9786, 0x0008, 0x1500, 0x2500, 0x9c06, 0x01e8, 0x2400, 0x9c06,
-	0x01d0, 0x080c, 0xd53b, 0x01b8, 0x080c, 0xd54b, 0x11a0, 0x6000,
+	0x01d0, 0x080c, 0xd55b, 0x01b8, 0x080c, 0xd56b, 0x11a0, 0x6000,
 	0x9086, 0x0004, 0x1120, 0x0016, 0x080c, 0x190d, 0x001e, 0x080c,
-	0xbcf3, 0x1110, 0x080c, 0x2ffc, 0x080c, 0xbd04, 0x1110, 0x080c,
-	0xa7a7, 0x080c, 0x9e49, 0x9ce0, 0x0018, 0x2001, 0x1819, 0x2004,
+	0xbd0c, 0x1110, 0x080c, 0x3003, 0x080c, 0xbd1d, 0x1110, 0x080c,
+	0xa7c0, 0x080c, 0x9e62, 0x9ce0, 0x0018, 0x2001, 0x1819, 0x2004,
 	0x9c02, 0x1208, 0x0858, 0x012e, 0x001e, 0x002e, 0x004e, 0x005e,
 	0x006e, 0x007e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x2001, 0x1810,
 	0x2004, 0xd0dc, 0x0005, 0x0006, 0x2001, 0x1836, 0x2004, 0xd09c,
-	0x000e, 0x0005, 0x0006, 0x0036, 0x0046, 0x080c, 0xc1f9, 0x0168,
+	0x000e, 0x0005, 0x0006, 0x0036, 0x0046, 0x080c, 0xc212, 0x0168,
 	0x2019, 0xffff, 0x9005, 0x0128, 0x6010, 0x00b6, 0x2058, 0xbba0,
-	0x00be, 0x2021, 0x0004, 0x080c, 0x4a6f, 0x004e, 0x003e, 0x000e,
-	0x6004, 0x9086, 0x0001, 0x1128, 0x080c, 0x990d, 0x080c, 0x9e49,
+	0x00be, 0x2021, 0x0004, 0x080c, 0x4a76, 0x004e, 0x003e, 0x000e,
+	0x6004, 0x9086, 0x0001, 0x1128, 0x080c, 0x9926, 0x080c, 0x9e62,
 	0x9006, 0x0005, 0x00e6, 0x00c6, 0x00b6, 0x0046, 0x2061, 0x1cd0,
 	0x2071, 0x1800, 0x7450, 0x7070, 0x8001, 0x9402, 0x12b8, 0x2100,
 	0x9c06, 0x0148, 0x6000, 0x9086, 0x0000, 0x0128, 0x6010, 0x2058,
@@ -6881,11 +6885,11 @@
 	0x000b, 0x3a44, 0x0002, 0x0c0a, 0x000b, 0x022a, 0x000b, 0x15b6,
 	0xf4ac, 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040,
 	0x0080, 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000,
-	0x8000, 0xbd16
+	0x8000, 0x89e3
 };
 #ifdef UNIQUE_FW_NAME
-unsigned short fw2300flx_length01 = 0xd57a;
+unsigned short fw2300flx_length01 = 0xd59a;
 #else
-unsigned short risc_code_length01 = 0xd57a;
+unsigned short risc_code_length01 = 0xd59a;
 #endif
 
diff -Nru a/drivers/scsi/qla2xxx/ql6322_fw.c b/drivers/scsi/qla2xxx/ql6322_fw.c
--- a/drivers/scsi/qla2xxx/ql6322_fw.c	Sun May 16 01:18:36 2004
+++ b/drivers/scsi/qla2xxx/ql6322_fw.c	Sun May 16 01:18:36 2004
@@ -18,7 +18,7 @@
  *************************************************************************/
 
 /*
- *	Firmware Version 3.02.26 (08:08 Mar 11, 2004)
+ *	Firmware Version 3.02.28 (14:05 Apr 03, 2004)
  */
 
 #ifdef UNIQUE_FW_NAME
@@ -28,15 +28,15 @@
 #endif
 
 #ifdef UNIQUE_FW_NAME
-unsigned char fw2322flx_version_str[] = {3, 2,26};
+unsigned char fw2322flx_version_str[] = {3, 2,28};
 #else
-unsigned char firmware_version[] = {3, 2,26};
+unsigned char firmware_version[] = {3, 2,28};
 #endif
 
 #ifdef UNIQUE_FW_NAME
-#define fw2322flx_VERSION_STRING "3.02.26"
+#define fw2322flx_VERSION_STRING "3.02.28"
 #else
-#define FW_VERSION_STRING "3.02.26"
+#define FW_VERSION_STRING "3.02.28"
 #endif
 
 #ifdef UNIQUE_FW_NAME
@@ -50,12 +50,12 @@
 #else
 unsigned short risc_code01[] = { 
 #endif
-	0x0470, 0x0000, 0x0000, 0xce19, 0x0000, 0x0003, 0x0002, 0x001a,
+	0x0470, 0x0000, 0x0000, 0xce3b, 0x0000, 0x0003, 0x0002, 0x001c,
 	0x0317, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2032, 0x3030,
 	0x3120, 0x514c, 0x4f47, 0x4943, 0x2043, 0x4f52, 0x504f, 0x5241,
 	0x5449, 0x4f4e, 0x2049, 0x5350, 0x3233, 0x3030, 0x2046, 0x6972,
 	0x6d77, 0x6172, 0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030,
-	0x332e, 0x3032, 0x2e32, 0x3620, 0x2020, 0x2020, 0x2400, 0x20a9,
+	0x332e, 0x3032, 0x2e32, 0x3820, 0x2020, 0x2020, 0x2400, 0x20a9,
 	0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2200, 0x20a9, 0x000f,
 	0x2001, 0x0000, 0x400f, 0x2091, 0x2400, 0x20a9, 0x000f, 0x2001,
 	0x0000, 0x400f, 0x2091, 0x2600, 0x20a9, 0x000f, 0x2001, 0x0000,
@@ -82,94 +82,94 @@
 	0x20a8, 0x900e, 0x4104, 0x2009, 0x1800, 0x810d, 0x810d, 0x810d,
 	0x810d, 0x810d, 0x918c, 0x001f, 0x2001, 0x0001, 0x9112, 0x20e9,
 	0x0001, 0x20a1, 0x0800, 0x900e, 0x20a9, 0x0800, 0x4104, 0x8211,
-	0x1dd8, 0x080c, 0x0f3a, 0x080c, 0x5ce3, 0x080c, 0x9b62, 0x080c,
-	0x10f1, 0x080c, 0x12d6, 0x080c, 0x1a5a, 0x080c, 0x8418, 0x080c,
-	0x0cf7, 0x080c, 0x1076, 0x080c, 0x3284, 0x080c, 0x73c0, 0x080c,
-	0x671b, 0x080c, 0x8062, 0x080c, 0x20dd, 0x080c, 0x7a54, 0x080c,
+	0x1dd8, 0x080c, 0x0f3a, 0x080c, 0x5cea, 0x080c, 0x9b7d, 0x080c,
+	0x10f1, 0x080c, 0x12d6, 0x080c, 0x1a5a, 0x080c, 0x8440, 0x080c,
+	0x0cf7, 0x080c, 0x1076, 0x080c, 0x328b, 0x080c, 0x73cb, 0x080c,
+	0x6722, 0x080c, 0x808a, 0x080c, 0x20dd, 0x080c, 0x7a5f, 0x080c,
 	0x1f2b, 0x080c, 0x2065, 0x080c, 0x20d2, 0x2091, 0x3009, 0x7883,
 	0x0000, 0x1004, 0x0941, 0x7880, 0x9086, 0x0002, 0x1190, 0x7883,
 	0x4000, 0x7837, 0x4000, 0x7833, 0x0010, 0x0e04, 0x0935, 0x2091,
 	0x5000, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
 	0x11be, 0x2071, 0x1800, 0x7003, 0x0000, 0x2071, 0x1800, 0x7000,
-	0x908e, 0x0003, 0x1158, 0x080c, 0x4996, 0x080c, 0x32ab, 0x080c,
-	0x7428, 0x080c, 0x6bc3, 0x080c, 0x808b, 0x0c78, 0x000b, 0x0c98,
+	0x908e, 0x0003, 0x1158, 0x080c, 0x499d, 0x080c, 0x32b2, 0x080c,
+	0x7433, 0x080c, 0x6bca, 0x080c, 0x80b3, 0x0c78, 0x000b, 0x0c98,
 	0x0962, 0x0963, 0x0afa, 0x0960, 0x0bab, 0x0cf6, 0x0cf6, 0x0cf6,
 	0x080c, 0x0d65, 0x0005, 0x0126, 0x00f6, 0x2091, 0x8000, 0x7000,
-	0x9086, 0x0001, 0x1904, 0x0acd, 0x080c, 0x0e8d, 0x080c, 0x70ac,
-	0x0150, 0x080c, 0x70cf, 0x15b0, 0x2079, 0x0100, 0x7828, 0x9085,
-	0x1800, 0x782a, 0x0478, 0x080c, 0x6fdd, 0x7000, 0x9086, 0x0001,
+	0x9086, 0x0001, 0x1904, 0x0acd, 0x080c, 0x0e8d, 0x080c, 0x70b7,
+	0x0150, 0x080c, 0x70da, 0x15b0, 0x2079, 0x0100, 0x7828, 0x9085,
+	0x1800, 0x782a, 0x0478, 0x080c, 0x6fe8, 0x7000, 0x9086, 0x0001,
 	0x1904, 0x0acd, 0x7094, 0x9086, 0x0028, 0x1904, 0x0acd, 0x080c,
-	0x805a, 0x080c, 0x804c, 0x2001, 0x0161, 0x2003, 0x0001, 0x2079,
+	0x8082, 0x080c, 0x8074, 0x2001, 0x0161, 0x2003, 0x0001, 0x2079,
 	0x0100, 0x2011, 0xffff, 0x080c, 0x286d, 0x7a28, 0x9295, 0x5e2c,
-	0x7a2a, 0x2011, 0x6f22, 0x080c, 0x8131, 0x2011, 0x6f15, 0x080c,
-	0x8237, 0x2011, 0x5b3a, 0x080c, 0x8131, 0x2011, 0x8030, 0x901e,
-	0x7392, 0x04d0, 0x080c, 0x53e7, 0x2079, 0x0100, 0x7844, 0x9005,
-	0x1904, 0x0acd, 0x2011, 0x5b3a, 0x080c, 0x8131, 0x2011, 0x6f22,
-	0x080c, 0x8131, 0x2011, 0x6f15, 0x080c, 0x8237, 0x2001, 0x0265,
+	0x7a2a, 0x2011, 0x6f2d, 0x080c, 0x8159, 0x2011, 0x6f20, 0x080c,
+	0x825f, 0x2011, 0x5b41, 0x080c, 0x8159, 0x2011, 0x8030, 0x901e,
+	0x7392, 0x04d0, 0x080c, 0x53ee, 0x2079, 0x0100, 0x7844, 0x9005,
+	0x1904, 0x0acd, 0x2011, 0x5b41, 0x080c, 0x8159, 0x2011, 0x6f2d,
+	0x080c, 0x8159, 0x2011, 0x6f20, 0x080c, 0x825f, 0x2001, 0x0265,
 	0x2001, 0x0205, 0x2003, 0x0000, 0x7840, 0x9084, 0xfffb, 0x7842,
 	0x2001, 0x1977, 0x2004, 0x9005, 0x1140, 0x00c6, 0x2061, 0x0100,
-	0x080c, 0x5c8b, 0x00ce, 0x0804, 0x0acd, 0x780f, 0x006b, 0x7a28,
-	0x080c, 0x70b4, 0x0118, 0x9295, 0x5e2c, 0x0010, 0x9295, 0x402c,
+	0x080c, 0x5c92, 0x00ce, 0x0804, 0x0acd, 0x780f, 0x006b, 0x7a28,
+	0x080c, 0x70bf, 0x0118, 0x9295, 0x5e2c, 0x0010, 0x9295, 0x402c,
 	0x7a2a, 0x2011, 0x8010, 0x73d4, 0x2001, 0x1978, 0x2003, 0x0001,
-	0x080c, 0x273f, 0x080c, 0x48d1, 0x7244, 0xc284, 0x7246, 0x2001,
+	0x080c, 0x273f, 0x080c, 0x48d8, 0x7244, 0xc284, 0x7246, 0x2001,
 	0x180c, 0x200c, 0xc1ac, 0xc1cc, 0x2102, 0x2001, 0x0390, 0x2003,
-	0x0400, 0x080c, 0x98ad, 0x080c, 0x91c6, 0x2011, 0x0004, 0x080c,
-	0xb83c, 0x080c, 0x98c9, 0x080c, 0x655b, 0x080c, 0x70ac, 0x1120,
-	0x080c, 0x279a, 0x0600, 0x0420, 0x080c, 0x5c92, 0x0140, 0x7093,
-	0x0001, 0x70cf, 0x0000, 0x080c, 0x55b4, 0x0804, 0x0acd, 0x080c,
-	0x5386, 0xd094, 0x01a8, 0x2001, 0x0390, 0x2003, 0x0404, 0x2011,
-	0x180c, 0x2204, 0xc0cd, 0x2012, 0x080c, 0x538a, 0xd0d4, 0x1118,
+	0x0400, 0x080c, 0x98c8, 0x080c, 0x91e1, 0x2011, 0x0004, 0x080c,
+	0xb857, 0x080c, 0x98e4, 0x080c, 0x6562, 0x080c, 0x70b7, 0x1120,
+	0x080c, 0x279a, 0x0600, 0x0420, 0x080c, 0x5c99, 0x0140, 0x7093,
+	0x0001, 0x70cf, 0x0000, 0x080c, 0x55bb, 0x0804, 0x0acd, 0x080c,
+	0x538d, 0xd094, 0x01a8, 0x2001, 0x0390, 0x2003, 0x0404, 0x2011,
+	0x180c, 0x2204, 0xc0cd, 0x2012, 0x080c, 0x5391, 0xd0d4, 0x1118,
 	0x080c, 0x279a, 0x1270, 0x2011, 0x180c, 0x2204, 0xc0bc, 0x0088,
-	0x080c, 0x538a, 0xd0d4, 0x1db8, 0x2011, 0x180c, 0x2204, 0xc0bd,
-	0x0040, 0x2011, 0x180c, 0x2204, 0xc0bd, 0x2012, 0x080c, 0x6658,
-	0x0008, 0x2012, 0x080c, 0x661e, 0x0120, 0x7a0c, 0xc2b4, 0x7a0e,
-	0x00a8, 0x707b, 0x0000, 0x080c, 0x70ac, 0x1130, 0x70ac, 0x9005,
-	0x1168, 0x080c, 0xbc93, 0x0050, 0x080c, 0xbc93, 0x70d8, 0xd09c,
-	0x1128, 0x70ac, 0x9005, 0x0110, 0x080c, 0x5c68, 0x70e3, 0x0000,
+	0x080c, 0x5391, 0xd0d4, 0x1db8, 0x2011, 0x180c, 0x2204, 0xc0bd,
+	0x0040, 0x2011, 0x180c, 0x2204, 0xc0bd, 0x2012, 0x080c, 0x665f,
+	0x0008, 0x2012, 0x080c, 0x6625, 0x0120, 0x7a0c, 0xc2b4, 0x7a0e,
+	0x00a8, 0x707b, 0x0000, 0x080c, 0x70b7, 0x1130, 0x70ac, 0x9005,
+	0x1168, 0x080c, 0xbcae, 0x0050, 0x080c, 0xbcae, 0x70d8, 0xd09c,
+	0x1128, 0x70ac, 0x9005, 0x0110, 0x080c, 0x5c6f, 0x70e3, 0x0000,
 	0x70df, 0x0000, 0x70a3, 0x0000, 0x080c, 0x27a2, 0x0228, 0x2011,
-	0x0101, 0x2204, 0xc0c4, 0x2012, 0x72d8, 0x080c, 0x70ac, 0x1178,
+	0x0101, 0x2204, 0xc0c4, 0x2012, 0x72d8, 0x080c, 0x70b7, 0x1178,
 	0x9016, 0x0016, 0x2009, 0x0002, 0x2019, 0x193e, 0x211a, 0x001e,
 	0x705b, 0xffff, 0x705f, 0x00ef, 0x707f, 0x0000, 0x0020, 0x2019,
 	0x193e, 0x201b, 0x0000, 0x2079, 0x1853, 0x7804, 0xd0ac, 0x0108,
-	0xc295, 0x72da, 0x080c, 0x70ac, 0x0118, 0x9296, 0x0004, 0x0518,
-	0x2011, 0x0001, 0x080c, 0xb83c, 0x70a7, 0x0000, 0x70ab, 0xffff,
-	0x7003, 0x0002, 0x00fe, 0x080c, 0x2ddb, 0x080c, 0x98ad, 0x2011,
-	0x0005, 0x080c, 0x931e, 0x080c, 0x98c9, 0x080c, 0x70ac, 0x0148,
+	0xc295, 0x72da, 0x080c, 0x70b7, 0x0118, 0x9296, 0x0004, 0x0518,
+	0x2011, 0x0001, 0x080c, 0xb857, 0x70a7, 0x0000, 0x70ab, 0xffff,
+	0x7003, 0x0002, 0x00fe, 0x080c, 0x2ddb, 0x080c, 0x98c8, 0x2011,
+	0x0005, 0x080c, 0x9339, 0x080c, 0x98e4, 0x080c, 0x70b7, 0x0148,
 	0x00c6, 0x2061, 0x0100, 0x0016, 0x2009, 0x0002, 0x61e2, 0x001e,
 	0x00ce, 0x012e, 0x00e0, 0x70a7, 0x0000, 0x70ab, 0xffff, 0x7003,
-	0x0002, 0x080c, 0x98ad, 0x2011, 0x0005, 0x080c, 0x931e, 0x080c,
-	0x98c9, 0x080c, 0x70ac, 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016,
+	0x0002, 0x080c, 0x98c8, 0x2011, 0x0005, 0x080c, 0x9339, 0x080c,
+	0x98e4, 0x080c, 0x70b7, 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016,
 	0x2009, 0x0002, 0x61e2, 0x001e, 0x00ce, 0x00fe, 0x012e, 0x0005,
-	0x00c6, 0x00b6, 0x080c, 0x70ac, 0x1118, 0x20a9, 0x0800, 0x0010,
-	0x20a9, 0x0782, 0x080c, 0x70ac, 0x1110, 0x900e, 0x0010, 0x2009,
+	0x00c6, 0x00b6, 0x080c, 0x70b7, 0x1118, 0x20a9, 0x0800, 0x0010,
+	0x20a9, 0x0782, 0x080c, 0x70b7, 0x1110, 0x900e, 0x0010, 0x2009,
 	0x007e, 0x86ff, 0x0138, 0x9180, 0x1000, 0x2004, 0x905d, 0x0110,
-	0xb800, 0xd0bc, 0x090c, 0x3113, 0x8108, 0x1f04, 0x0ae1, 0x707b,
+	0xb800, 0xd0bc, 0x090c, 0x311a, 0x8108, 0x1f04, 0x0ae1, 0x707b,
 	0x0000, 0x707c, 0x9084, 0x00ff, 0x707e, 0x70af, 0x0000, 0x00be,
 	0x00ce, 0x0005, 0x00b6, 0x0126, 0x2091, 0x8000, 0x7000, 0x9086,
 	0x0002, 0x1904, 0x0ba8, 0x70a8, 0x9086, 0xffff, 0x0120, 0x080c,
 	0x2ddb, 0x0804, 0x0ba8, 0x70d8, 0xd0ac, 0x1110, 0xd09c, 0x0520,
 	0xd084, 0x0510, 0x0006, 0x2001, 0x0103, 0x2003, 0x002b, 0x000e,
-	0xd08c, 0x01d0, 0x70dc, 0x9086, 0xffff, 0x0190, 0x080c, 0x2f63,
-	0x70d8, 0xd094, 0x1904, 0x0ba8, 0x2011, 0x0001, 0x080c, 0xbf46,
-	0x0110, 0x2011, 0x0003, 0x901e, 0x080c, 0x2f9d, 0x0804, 0x0ba8,
+	0xd08c, 0x01d0, 0x70dc, 0x9086, 0xffff, 0x0190, 0x080c, 0x2f66,
+	0x70d8, 0xd094, 0x1904, 0x0ba8, 0x2011, 0x0001, 0x080c, 0xbf61,
+	0x0110, 0x2011, 0x0003, 0x901e, 0x080c, 0x2fa0, 0x0804, 0x0ba8,
 	0x70e0, 0x9005, 0x1904, 0x0ba8, 0x70a4, 0x9005, 0x1904, 0x0ba8,
-	0x70d8, 0xd0a4, 0x0118, 0xd0b4, 0x0904, 0x0ba8, 0x080c, 0x661e,
-	0x1904, 0x0ba8, 0x080c, 0x6671, 0x1904, 0x0ba8, 0x080c, 0x6658,
+	0x70d8, 0xd0a4, 0x0118, 0xd0b4, 0x0904, 0x0ba8, 0x080c, 0x6625,
+	0x1904, 0x0ba8, 0x080c, 0x6678, 0x1904, 0x0ba8, 0x080c, 0x665f,
 	0x01c0, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c,
-	0x6269, 0x1118, 0xb800, 0xd0ec, 0x1138, 0x001e, 0x8108, 0x1f04,
+	0x6270, 0x1118, 0xb800, 0xd0ec, 0x1138, 0x001e, 0x8108, 0x1f04,
 	0x0b4e, 0x00ce, 0x015e, 0x0028, 0x001e, 0x00ce, 0x015e, 0x0804,
 	0x0ba8, 0x0006, 0x2001, 0x0103, 0x2003, 0x006b, 0x000e, 0x2011,
 	0x1984, 0x080c, 0x0faa, 0x2011, 0x199e, 0x080c, 0x0faa, 0x7030,
 	0xc08c, 0x7032, 0x7003, 0x0003, 0x70ab, 0xffff, 0x080c, 0x0e61,
 	0x9006, 0x080c, 0x23c9, 0x0036, 0x0046, 0x2019, 0xffff, 0x2021,
-	0x0006, 0x080c, 0x4a6e, 0x004e, 0x003e, 0x00f6, 0x2079, 0x0100,
-	0x080c, 0x70cf, 0x0150, 0x080c, 0x70ac, 0x7828, 0x0118, 0x9084,
-	0xe1ff, 0x0010, 0x9084, 0xffdf, 0x782a, 0x00fe, 0x080c, 0x98ad,
+	0x0006, 0x080c, 0x4a75, 0x004e, 0x003e, 0x00f6, 0x2079, 0x0100,
+	0x080c, 0x70da, 0x0150, 0x080c, 0x70b7, 0x7828, 0x0118, 0x9084,
+	0xe1ff, 0x0010, 0x9084, 0xffdf, 0x782a, 0x00fe, 0x080c, 0x98c8,
 	0x2001, 0x19b9, 0x2004, 0x9086, 0x0005, 0x1120, 0x2011, 0x0000,
-	0x080c, 0x931e, 0x2011, 0x0000, 0x080c, 0x9328, 0x080c, 0x98c9,
+	0x080c, 0x9339, 0x2011, 0x0000, 0x080c, 0x9343, 0x080c, 0x98e4,
 	0x012e, 0x00be, 0x0005, 0x0016, 0x0026, 0x0046, 0x00f6, 0x0126,
 	0x2091, 0x8000, 0x2079, 0x0100, 0x7904, 0x918c, 0xfffd, 0x7906,
-	0x2009, 0x00f7, 0x080c, 0x5c51, 0x7940, 0x918c, 0x0010, 0x7942,
+	0x2009, 0x00f7, 0x080c, 0x5c58, 0x7940, 0x918c, 0x0010, 0x7942,
 	0x7924, 0xd1b4, 0x0120, 0x2011, 0x0040, 0x080c, 0x286d, 0xd19c,
 	0x0120, 0x2011, 0x0008, 0x080c, 0x286d, 0x0006, 0x0036, 0x0156,
 	0x0000, 0x2001, 0x1978, 0x2004, 0x9005, 0x1518, 0x080c, 0x2801,
@@ -178,26 +178,26 @@
 	0x9006, 0x080c, 0x2751, 0x0068, 0x080c, 0x2811, 0x1d50, 0x2001,
 	0x1969, 0x2004, 0xd0fc, 0x0108, 0x0020, 0x080c, 0x2568, 0x0804,
 	0x0ca9, 0x080c, 0x2890, 0x080c, 0x28d4, 0x20a9, 0x003a, 0x1d04,
-	0x0bff, 0x080c, 0x8217, 0x1f04, 0x0bff, 0x080c, 0x70bd, 0x0148,
-	0x080c, 0x70cf, 0x1118, 0x080c, 0x73bb, 0x0050, 0x080c, 0x70b4,
-	0x0dd0, 0x080c, 0x73b6, 0x080c, 0x73ac, 0x080c, 0x6fdd, 0x0020,
-	0x2009, 0x00f8, 0x080c, 0x5c51, 0x7850, 0xc0e5, 0x7852, 0x080c,
-	0x70ac, 0x0120, 0x7843, 0x0090, 0x7843, 0x0010, 0x2021, 0xe678,
-	0x2019, 0xea60, 0x0d0c, 0x8217, 0x7820, 0xd09c, 0x15a0, 0x080c,
-	0x70ac, 0x0904, 0x0c8b, 0x7824, 0xd0ac, 0x1904, 0x0cae, 0x080c,
-	0x70cf, 0x1548, 0x0046, 0x2021, 0x0320, 0x8421, 0x1df0, 0x004e,
+	0x0bff, 0x080c, 0x823f, 0x1f04, 0x0bff, 0x080c, 0x70c8, 0x0148,
+	0x080c, 0x70da, 0x1118, 0x080c, 0x73c6, 0x0050, 0x080c, 0x70bf,
+	0x0dd0, 0x080c, 0x73c1, 0x080c, 0x73b7, 0x080c, 0x6fe8, 0x0020,
+	0x2009, 0x00f8, 0x080c, 0x5c58, 0x7850, 0xc0e5, 0x7852, 0x080c,
+	0x70b7, 0x0120, 0x7843, 0x0090, 0x7843, 0x0010, 0x2021, 0xe678,
+	0x2019, 0xea60, 0x0d0c, 0x823f, 0x7820, 0xd09c, 0x15a0, 0x080c,
+	0x70b7, 0x0904, 0x0c8b, 0x7824, 0xd0ac, 0x1904, 0x0cae, 0x080c,
+	0x70da, 0x1548, 0x0046, 0x2021, 0x0320, 0x8421, 0x1df0, 0x004e,
 	0x2011, 0x1800, 0x080c, 0x286d, 0x080c, 0x2819, 0x7824, 0x9084,
 	0x1800, 0x1168, 0x9484, 0x0fff, 0x1140, 0x2001, 0x1810, 0x2004,
 	0x9084, 0x9000, 0x0110, 0x080c, 0x0cd1, 0x8421, 0x1160, 0x1d04,
-	0x0c5b, 0x080c, 0x8217, 0x080c, 0x73b6, 0x080c, 0x73ac, 0x7003,
+	0x0c5b, 0x080c, 0x823f, 0x080c, 0x73c1, 0x080c, 0x73b7, 0x7003,
 	0x0001, 0x0804, 0x0cae, 0x8319, 0x1928, 0x2001, 0x1810, 0x2004,
 	0x9084, 0x9000, 0x0110, 0x080c, 0x0cd1, 0x1d04, 0x0c71, 0x080c,
-	0x8217, 0x2009, 0x196c, 0x2104, 0x9005, 0x0118, 0x8001, 0x200a,
+	0x823f, 0x2009, 0x196c, 0x2104, 0x9005, 0x0118, 0x8001, 0x200a,
 	0x1188, 0x200b, 0x000a, 0x2011, 0x0048, 0x080c, 0x286d, 0x20a9,
 	0x0002, 0x080c, 0x27fa, 0x7924, 0x080c, 0x2819, 0xd19c, 0x0110,
-	0x080c, 0x273f, 0x00f0, 0x080c, 0x70bd, 0x1140, 0x94a2, 0x03e8,
-	0x1128, 0x080c, 0x7080, 0x7003, 0x0001, 0x00c0, 0x2011, 0x1800,
-	0x080c, 0x286d, 0x080c, 0x2819, 0x7824, 0x080c, 0x70c6, 0x0110,
+	0x080c, 0x273f, 0x00f0, 0x080c, 0x70c8, 0x1140, 0x94a2, 0x03e8,
+	0x1128, 0x080c, 0x708b, 0x7003, 0x0001, 0x00c0, 0x2011, 0x1800,
+	0x080c, 0x286d, 0x080c, 0x2819, 0x7824, 0x080c, 0x70d1, 0x0110,
 	0xd0ac, 0x1160, 0x9084, 0x1800, 0x0904, 0x0c63, 0x7003, 0x0001,
 	0x0028, 0x2001, 0x0001, 0x080c, 0x23c9, 0x00a0, 0x7850, 0xc0e4,
 	0x7852, 0x2009, 0x180c, 0x210c, 0xd19c, 0x1120, 0x7904, 0x918d,
@@ -205,20 +205,20 @@
 	0x0028, 0x782a, 0x2001, 0x1978, 0x2003, 0x0000, 0x9006, 0x78f2,
 	0x015e, 0x003e, 0x000e, 0x012e, 0x00fe, 0x004e, 0x002e, 0x001e,
 	0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x0046, 0x00b6, 0x00c6,
-	0x00d6, 0x00e6, 0x00f6, 0x0156, 0x0071, 0x0d0c, 0x8217, 0x015e,
+	0x00d6, 0x00e6, 0x00f6, 0x0156, 0x0071, 0x0d0c, 0x823f, 0x015e,
 	0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x004e, 0x003e, 0x002e,
 	0x001e, 0x000e, 0x0005, 0x00e6, 0x2071, 0x1894, 0x7004, 0x9086,
-	0x0001, 0x1110, 0x080c, 0x32ab, 0x00ee, 0x0005, 0x0005, 0x2a70,
-	0x2061, 0x197c, 0x2063, 0x0003, 0x6007, 0x0002, 0x600b, 0x001a,
+	0x0001, 0x1110, 0x080c, 0x32b2, 0x00ee, 0x0005, 0x0005, 0x2a70,
+	0x2061, 0x197c, 0x2063, 0x0003, 0x6007, 0x0002, 0x600b, 0x001c,
 	0x600f, 0x0317, 0x2001, 0x194d, 0x900e, 0x2102, 0x7192, 0x2001,
 	0x0100, 0x2004, 0x9082, 0x0002, 0x0218, 0x705b, 0xffff, 0x0008,
-	0x715a, 0x7063, 0xffff, 0x717a, 0x717e, 0x080c, 0xbc93, 0x70eb,
+	0x715a, 0x7063, 0xffff, 0x717a, 0x717e, 0x080c, 0xbcae, 0x70eb,
 	0x00c0, 0x2061, 0x193d, 0x6003, 0x0909, 0x6106, 0x600b, 0x8800,
 	0x600f, 0x0200, 0x6013, 0x00ff, 0x6017, 0x000f, 0x611a, 0x601f,
 	0x07d0, 0x2061, 0x1945, 0x6003, 0x8000, 0x6106, 0x610a, 0x600f,
 	0x0200, 0x6013, 0x00ff, 0x6116, 0x601b, 0x0001, 0x611e, 0x2061,
 	0x195a, 0x6003, 0x514c, 0x6007, 0x4f47, 0x600b, 0x4943, 0x600f,
-	0x2020, 0x2001, 0x182b, 0x2102, 0x0005, 0x9016, 0x080c, 0x6269,
+	0x2020, 0x2001, 0x182b, 0x2102, 0x0005, 0x9016, 0x080c, 0x6270,
 	0x1178, 0xb804, 0x90c4, 0x00ff, 0x98c6, 0x0006, 0x0128, 0x90c4,
 	0xff00, 0x98c6, 0x0600, 0x1120, 0x9186, 0x0080, 0x0108, 0x8210,
 	0x8108, 0x9186, 0x0800, 0x1d50, 0x2208, 0x0005, 0x2091, 0x8000,
@@ -237,11 +237,11 @@
 	0x2079, 0x1800, 0x7803, 0x0005, 0x2091, 0x4080, 0x2001, 0x0089,
 	0x2004, 0xd084, 0x0180, 0x2001, 0x19f3, 0x2004, 0x9005, 0x0128,
 	0x2001, 0x008b, 0x2004, 0xd0fc, 0x0dd8, 0x2001, 0x008a, 0x2003,
-	0x0002, 0x2003, 0x1001, 0x080c, 0x5395, 0x1170, 0x080c, 0x0efb,
-	0x0110, 0x080c, 0x0e4e, 0x080c, 0x5395, 0x1130, 0x2071, 0x1800,
+	0x0002, 0x2003, 0x1001, 0x080c, 0x539c, 0x1170, 0x080c, 0x0efb,
+	0x0110, 0x080c, 0x0e4e, 0x080c, 0x539c, 0x1130, 0x2071, 0x1800,
 	0x2011, 0x8000, 0x080c, 0x0f0f, 0x0c70, 0x0005, 0x2001, 0x0382,
 	0x2004, 0x9084, 0x0007, 0x9086, 0x0001, 0x1120, 0x2001, 0x0015,
-	0x080c, 0x989e, 0x2079, 0x0380, 0x2069, 0x1ad4, 0x7818, 0x6802,
+	0x080c, 0x98b9, 0x2079, 0x0380, 0x2069, 0x1ad4, 0x7818, 0x6802,
 	0x781c, 0x6806, 0x7840, 0x680a, 0x7844, 0x680e, 0x782c, 0x6812,
 	0x2019, 0x1adf, 0x9016, 0x7808, 0xd09c, 0x0150, 0x7820, 0x201a,
 	0x8210, 0x8318, 0x8210, 0x9282, 0x0011, 0x0ea8, 0x2011, 0xdead,
@@ -320,7 +320,7 @@
 	0x0016, 0x890e, 0x810e, 0x810f, 0x9184, 0x003f, 0xa862, 0x9184,
 	0xffc0, 0xa85e, 0x001e, 0x0020, 0x00e6, 0x0126, 0x2091, 0x8000,
 	0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000,
-	0x70be, 0x080c, 0x804c, 0x012e, 0x00ee, 0x0005, 0x2071, 0x1800,
+	0x70be, 0x080c, 0x8074, 0x012e, 0x00ee, 0x0005, 0x2071, 0x1800,
 	0x9026, 0x2009, 0x0000, 0x2049, 0x0400, 0x2900, 0x702e, 0x8940,
 	0x2800, 0xa802, 0xa95e, 0xa863, 0x0001, 0x8420, 0x9886, 0x0440,
 	0x0120, 0x2848, 0x9188, 0x0040, 0x0c90, 0x2071, 0x1883, 0x7000,
@@ -384,15 +384,15 @@
 	0x008e, 0x00de, 0x009e, 0x080c, 0x112b, 0x0005, 0x00de, 0x009e,
 	0x080c, 0x112b, 0x0005, 0xa8a8, 0xd08c, 0x0005, 0x0096, 0xa0a0,
 	0x904d, 0x090c, 0x0d65, 0xa06c, 0x908e, 0x0100, 0x0130, 0xa87b,
-	0x0030, 0xa883, 0x0000, 0xa897, 0x4002, 0x080c, 0x6983, 0xa09f,
+	0x0030, 0xa883, 0x0000, 0xa897, 0x4002, 0x080c, 0x698a, 0xa09f,
 	0x0000, 0xa0a3, 0x0000, 0x2848, 0x080c, 0x1054, 0x009e, 0x0005,
 	0x00a6, 0xa0a0, 0x904d, 0x090c, 0x0d65, 0xa06c, 0x908e, 0x0100,
 	0x0128, 0xa87b, 0x0001, 0xa883, 0x0000, 0x00c0, 0xa80c, 0x2050,
 	0xb004, 0x9005, 0x0198, 0xa80e, 0x2050, 0x8006, 0x8006, 0x8007,
 	0x908c, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0xa076, 0xa172,
 	0xb000, 0xa07a, 0x2810, 0x080c, 0x110c, 0x00e8, 0xa97c, 0xa894,
-	0x0016, 0x0006, 0x080c, 0x6983, 0x000e, 0x001e, 0xd1fc, 0x1138,
-	0xd1f4, 0x0128, 0x00c6, 0x2060, 0x080c, 0x9bcc, 0x00ce, 0x7008,
+	0x0016, 0x0006, 0x080c, 0x698a, 0x000e, 0x001e, 0xd1fc, 0x1138,
+	0xd1f4, 0x0128, 0x00c6, 0x2060, 0x080c, 0x9be7, 0x00ce, 0x7008,
 	0x2048, 0xa89f, 0x0000, 0xa8a3, 0x0000, 0x080c, 0x1054, 0x7007,
 	0x0000, 0x080c, 0x112b, 0x00ae, 0x0005, 0x0126, 0x2091, 0x8000,
 	0x782b, 0x1001, 0x7007, 0x0005, 0x7000, 0xc094, 0x7002, 0x012e,
@@ -411,9 +411,9 @@
 	0x190c, 0x0d5e, 0xd19c, 0x05a0, 0x7820, 0x908c, 0xf000, 0x0540,
 	0x2060, 0x6020, 0x9086, 0x0003, 0x1550, 0x6000, 0x9086, 0x0004,
 	0x1530, 0x6114, 0x2148, 0xa876, 0xa87a, 0xa867, 0x0103, 0x080c,
-	0x67a5, 0x00b6, 0x6010, 0x2058, 0xba3c, 0x8211, 0x0208, 0xba3e,
-	0xb8c0, 0x9005, 0x190c, 0x6394, 0x00be, 0x6044, 0xd0fc, 0x190c,
-	0x98d6, 0x080c, 0x9bf4, 0x7808, 0xd09c, 0x19b0, 0x012e, 0x0005,
+	0x67ac, 0x00b6, 0x6010, 0x2058, 0xba3c, 0x8211, 0x0208, 0xba3e,
+	0xb8c0, 0x9005, 0x190c, 0x639b, 0x00be, 0x6044, 0xd0fc, 0x190c,
+	0x98f1, 0x080c, 0x9c0f, 0x7808, 0xd09c, 0x19b0, 0x012e, 0x0005,
 	0x908a, 0x0024, 0x1a0c, 0x0d65, 0x002b, 0x012e, 0x0005, 0x04b0,
 	0x012e, 0x0005, 0x138e, 0x13b4, 0x13e4, 0x13e9, 0x13ed, 0x13f2,
 	0x141a, 0x141e, 0x142c, 0x1430, 0x138e, 0x14ba, 0x14be, 0x1521,
@@ -421,25 +421,25 @@
 	0x138e, 0x138e, 0x138e, 0x138e, 0x138e, 0x13f4, 0x138e, 0x13bc,
 	0x13e1, 0x13a8, 0x138e, 0x13c8, 0x1392, 0x1390, 0x080c, 0x0d65,
 	0x080c, 0x0d5e, 0x080c, 0x1528, 0x2009, 0x1a49, 0x2104, 0x8000,
-	0x200a, 0x080c, 0x7b17, 0x080c, 0x195f, 0x0005, 0x6044, 0xd0fc,
-	0x190c, 0x98d6, 0x2009, 0x0055, 0x080c, 0x9c6a, 0x012e, 0x0005,
-	0x080c, 0x1528, 0x2060, 0x6044, 0xd0fc, 0x190c, 0x98d6, 0x2009,
-	0x0055, 0x080c, 0x9c6a, 0x0005, 0x2009, 0x0048, 0x080c, 0x1528,
-	0x2060, 0x080c, 0x9c6a, 0x0005, 0x2009, 0x0054, 0x080c, 0x1528,
-	0x2060, 0x6044, 0xd0fc, 0x190c, 0x98d6, 0x080c, 0x9c6a, 0x0005,
+	0x200a, 0x080c, 0x7b22, 0x080c, 0x195f, 0x0005, 0x6044, 0xd0fc,
+	0x190c, 0x98f1, 0x2009, 0x0055, 0x080c, 0x9c85, 0x012e, 0x0005,
+	0x080c, 0x1528, 0x2060, 0x6044, 0xd0fc, 0x190c, 0x98f1, 0x2009,
+	0x0055, 0x080c, 0x9c85, 0x0005, 0x2009, 0x0048, 0x080c, 0x1528,
+	0x2060, 0x080c, 0x9c85, 0x0005, 0x2009, 0x0054, 0x080c, 0x1528,
+	0x2060, 0x6044, 0xd0fc, 0x190c, 0x98f1, 0x080c, 0x9c85, 0x0005,
 	0x080c, 0x1528, 0x2060, 0x0056, 0x0066, 0x080c, 0x1528, 0x2028,
 	0x080c, 0x1528, 0x2030, 0x0036, 0x0046, 0x2021, 0x0000, 0x2418,
-	0x2009, 0x0056, 0x080c, 0x9c6a, 0x004e, 0x003e, 0x006e, 0x005e,
+	0x2009, 0x0056, 0x080c, 0x9c85, 0x004e, 0x003e, 0x006e, 0x005e,
 	0x0005, 0x080c, 0x1528, 0x0005, 0x7004, 0xc085, 0xc0b5, 0x7006,
 	0x0005, 0x7004, 0xc085, 0x7006, 0x0005, 0x080c, 0x1528, 0x080c,
 	0x15e5, 0x0005, 0x080c, 0x0d65, 0x080c, 0x1528, 0x2060, 0x6014,
 	0x0096, 0x2048, 0xa83b, 0xffff, 0x009e, 0x2009, 0x0048, 0x080c,
-	0x9c6a, 0x2001, 0x015d, 0x2003, 0x0000, 0x2009, 0x03e8, 0x8109,
+	0x9c85, 0x2001, 0x015d, 0x2003, 0x0000, 0x2009, 0x03e8, 0x8109,
 	0x0160, 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8, 0x2001, 0x0218,
 	0x2004, 0xd0ec, 0x1110, 0x080c, 0x152d, 0x2001, 0x0307, 0x2003,
 	0x8000, 0x0005, 0x7004, 0xc095, 0x7006, 0x0005, 0x080c, 0x1528,
 	0x2060, 0x6014, 0x0096, 0x2048, 0xa83b, 0xffff, 0x009e, 0x2009,
-	0x0048, 0x080c, 0x9c6a, 0x0005, 0x080c, 0x1528, 0x080c, 0x0d65,
+	0x0048, 0x080c, 0x9c85, 0x0005, 0x080c, 0x1528, 0x080c, 0x0d65,
 	0x080c, 0x1528, 0x080c, 0x14a5, 0x7827, 0x0018, 0x79ac, 0xd1dc,
 	0x0540, 0x7827, 0x0015, 0x7828, 0x782b, 0x0000, 0x9065, 0x0138,
 	0x2001, 0x020d, 0x2003, 0x0050, 0x2003, 0x0020, 0x0400, 0x7004,
@@ -447,13 +447,13 @@
 	0xd1bc, 0x090c, 0x0d65, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003,
 	0x0020, 0x0480, 0x78ab, 0x0004, 0x7803, 0x0001, 0x080c, 0x14be,
 	0x0005, 0x7828, 0x782b, 0x0000, 0x9065, 0x090c, 0x0d65, 0x6014,
-	0x2048, 0x78ab, 0x0004, 0x918c, 0x0700, 0x0198, 0x080c, 0x7b17,
-	0x080c, 0x195f, 0x080c, 0xb82c, 0x0158, 0xa9ac, 0xa936, 0xa9b0,
+	0x2048, 0x78ab, 0x0004, 0x918c, 0x0700, 0x0198, 0x080c, 0x7b22,
+	0x080c, 0x195f, 0x080c, 0xb847, 0x0158, 0xa9ac, 0xa936, 0xa9b0,
 	0xa93a, 0xa83f, 0xffff, 0xa843, 0xffff, 0xa880, 0xc0bd, 0xa882,
 	0x0005, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x6024,
-	0x190c, 0xbc28, 0x2029, 0x00c8, 0x8529, 0x0128, 0x2001, 0x0201,
-	0x2004, 0x9005, 0x0dc8, 0x7dbc, 0x080c, 0xd5b1, 0xd5a4, 0x1118,
-	0x080c, 0x152d, 0x0005, 0x080c, 0x7b17, 0x080c, 0x195f, 0x0005,
+	0x190c, 0xbc43, 0x2029, 0x00c8, 0x8529, 0x0128, 0x2001, 0x0201,
+	0x2004, 0x9005, 0x0dc8, 0x7dbc, 0x080c, 0xd5d3, 0xd5a4, 0x1118,
+	0x080c, 0x152d, 0x0005, 0x080c, 0x7b22, 0x080c, 0x195f, 0x0005,
 	0x781f, 0x0300, 0x7803, 0x0001, 0x0005, 0x0016, 0x0066, 0x0076,
 	0x00f6, 0x2079, 0x0300, 0x7908, 0x918c, 0x0007, 0x9186, 0x0003,
 	0x0120, 0x2001, 0x0016, 0x080c, 0x159e, 0x00fe, 0x007e, 0x006e,
@@ -470,7 +470,7 @@
 	0x0218, 0x2004, 0xd0ec, 0x1110, 0x0401, 0x0040, 0x2001, 0x020d,
 	0x2003, 0x0020, 0x080c, 0x12ea, 0x7803, 0x0001, 0x00ee, 0x001e,
 	0x0005, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003, 0x0020, 0x0069,
-	0x0ca8, 0x0031, 0x2060, 0x2009, 0x0053, 0x080c, 0x9c6a, 0x0005,
+	0x0ca8, 0x0031, 0x2060, 0x2009, 0x0053, 0x080c, 0x9c85, 0x0005,
 	0x7808, 0xd09c, 0x0de8, 0x7820, 0x0005, 0x080c, 0x14a5, 0x00d6,
 	0x2069, 0x0200, 0x2009, 0x01f4, 0x8109, 0x0510, 0x6804, 0x9005,
 	0x0dd8, 0x2001, 0x015d, 0x2003, 0x0000, 0x79bc, 0xd1a4, 0x1528,
@@ -478,7 +478,7 @@
 	0x0007, 0x918c, 0x0ff8, 0x810c, 0x810c, 0x810c, 0x080c, 0x1590,
 	0x6827, 0x0001, 0x8109, 0x1dd0, 0x04d9, 0x6827, 0x0002, 0x04c1,
 	0x6804, 0x9005, 0x1130, 0x682c, 0xd0e4, 0x1500, 0x6804, 0x9005,
-	0x0de8, 0x79b8, 0xd1ec, 0x1130, 0x08c0, 0x080c, 0x7b17, 0x080c,
+	0x0de8, 0x79b8, 0xd1ec, 0x1130, 0x08c0, 0x080c, 0x7b22, 0x080c,
 	0x195f, 0x0090, 0x7827, 0x0015, 0x782b, 0x0000, 0x7827, 0x0018,
 	0x782b, 0x0000, 0x2001, 0x020d, 0x2003, 0x0020, 0x2001, 0x0307,
 	0x2003, 0x0300, 0x7803, 0x0001, 0x00de, 0x0005, 0x682c, 0x9084,
@@ -499,9 +499,9 @@
 	0x1644, 0x7017, 0x0000, 0x2001, 0x0264, 0x2004, 0xd0bc, 0x0904,
 	0x1644, 0x2001, 0x0268, 0x00c6, 0x2064, 0x6104, 0x6038, 0x00ce,
 	0x918e, 0x0039, 0x1904, 0x1644, 0x9c06, 0x15f0, 0x0126, 0x2091,
-	0x2600, 0x080c, 0x7a6f, 0x012e, 0x7358, 0x745c, 0x6014, 0x905d,
+	0x2600, 0x080c, 0x7a7a, 0x012e, 0x7358, 0x745c, 0x6014, 0x905d,
 	0x0598, 0x2b48, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc,
-	0x190c, 0xbc03, 0xab42, 0xac3e, 0x2001, 0x1875, 0x2004, 0xd0b4,
+	0x190c, 0xbc1e, 0xab42, 0xac3e, 0x2001, 0x1875, 0x2004, 0xd0b4,
 	0x1170, 0x601c, 0xd0e4, 0x1158, 0x6010, 0x00b6, 0x2058, 0xb800,
 	0x00be, 0xd0bc, 0x1120, 0xa83b, 0x7fff, 0xa837, 0xffff, 0x080c,
 	0x1d17, 0x1190, 0x080c, 0x17f2, 0x2a00, 0xa816, 0x0130, 0x2800,
@@ -596,7 +596,7 @@
 	0x81ff, 0x1118, 0xa887, 0x0001, 0x0008, 0xa986, 0x601b, 0x0002,
 	0xa974, 0xd1dc, 0x1108, 0x0005, 0xa934, 0xa88c, 0x9106, 0x1158,
 	0xa938, 0xa890, 0x9106, 0x1138, 0x601c, 0xc084, 0x601e, 0x2009,
-	0x0048, 0x0804, 0x9c6a, 0x0005, 0x0126, 0x00c6, 0x2091, 0x2200,
+	0x0048, 0x0804, 0x9c85, 0x0005, 0x0126, 0x00c6, 0x2091, 0x2200,
 	0x00ce, 0x7908, 0x918c, 0x0007, 0x9186, 0x0000, 0x05b0, 0x9186,
 	0x0003, 0x0598, 0x6020, 0x6023, 0x0000, 0x0006, 0x2031, 0x0008,
 	0x00c6, 0x781f, 0x0808, 0x7808, 0xd09c, 0x0120, 0x080c, 0x132a,
@@ -607,17 +607,17 @@
 	0x19fb, 0x000e, 0x6022, 0x012e, 0x0005, 0x080c, 0x19e8, 0x7827,
 	0x0015, 0x7828, 0x9c06, 0x1db8, 0x782b, 0x0000, 0x0ca0, 0x00f6,
 	0x2079, 0x0300, 0x7803, 0x0000, 0x78ab, 0x0004, 0x00fe, 0x080c,
-	0x70ac, 0x11b0, 0x2001, 0x0138, 0x2003, 0x0000, 0x2001, 0x0160,
+	0x70b7, 0x11b0, 0x2001, 0x0138, 0x2003, 0x0000, 0x2001, 0x0160,
 	0x2003, 0x0000, 0x2011, 0x012c, 0xa001, 0xa001, 0x8211, 0x1de0,
-	0x0081, 0x2001, 0x0386, 0x2003, 0x2020, 0x080c, 0x714d, 0x0005,
+	0x0081, 0x2001, 0x0386, 0x2003, 0x2020, 0x080c, 0x7158, 0x0005,
 	0x0479, 0x0039, 0x2001, 0x0160, 0x2502, 0x2001, 0x0138, 0x2202,
 	0x0005, 0x00e6, 0x2071, 0x0200, 0x080c, 0x2825, 0x2009, 0x003c,
 	0x080c, 0x2052, 0x2001, 0x015d, 0x2003, 0x0000, 0x7000, 0x9084,
-	0x003c, 0x1de0, 0x080c, 0x804c, 0x70a0, 0x70a2, 0x7098, 0x709a,
+	0x003c, 0x1de0, 0x080c, 0x8074, 0x70a0, 0x70a2, 0x7098, 0x709a,
 	0x709c, 0x709e, 0x2001, 0x020d, 0x2003, 0x0020, 0x00f6, 0x2079,
 	0x0300, 0x080c, 0x12ea, 0x7803, 0x0001, 0x00fe, 0x00ee, 0x0005,
 	0x2001, 0x0138, 0x2014, 0x2003, 0x0000, 0x2001, 0x0160, 0x202c,
-	0x2003, 0x0000, 0x080c, 0x70ac, 0x1108, 0x0005, 0x2021, 0x0260,
+	0x2003, 0x0000, 0x080c, 0x70b7, 0x1108, 0x0005, 0x2021, 0x0260,
 	0x2001, 0x0141, 0x201c, 0xd3dc, 0x1168, 0x2001, 0x0109, 0x201c,
 	0x939c, 0x0048, 0x1160, 0x2001, 0x0111, 0x201c, 0x83ff, 0x1110,
 	0x8421, 0x1d70, 0x2001, 0x015d, 0x2003, 0x0000, 0x0005, 0x0046,
@@ -693,12 +693,12 @@
 	0x080c, 0x0d65, 0x00f6, 0x00e6, 0x0096, 0x00c6, 0x0026, 0x704c,
 	0x9c06, 0x190c, 0x0d65, 0x2079, 0x0090, 0x2001, 0x0105, 0x2003,
 	0x0010, 0x782b, 0x0004, 0x7057, 0x0000, 0x6014, 0x2048, 0x080c,
-	0xb82c, 0x0118, 0xa880, 0xc0bd, 0xa882, 0x6020, 0x9086, 0x0006,
+	0xb847, 0x0118, 0xa880, 0xc0bd, 0xa882, 0x6020, 0x9086, 0x0006,
 	0x1170, 0x2061, 0x0100, 0x62c8, 0x2001, 0x00fa, 0x8001, 0x1df0,
 	0x60c8, 0x9206, 0x1dc0, 0x60c4, 0xa89a, 0x60c8, 0xa896, 0x704c,
-	0x2060, 0x00c6, 0x080c, 0xb437, 0x080c, 0x98ad, 0x00ce, 0x704c,
-	0x9c06, 0x1150, 0x2009, 0x0040, 0x080c, 0x2052, 0x080c, 0x949d,
-	0x2011, 0x0000, 0x080c, 0x9328, 0x002e, 0x00ce, 0x009e, 0x00ee,
+	0x2060, 0x00c6, 0x080c, 0xb452, 0x080c, 0x98c8, 0x00ce, 0x704c,
+	0x9c06, 0x1150, 0x2009, 0x0040, 0x080c, 0x2052, 0x080c, 0x94b8,
+	0x2011, 0x0000, 0x080c, 0x9343, 0x002e, 0x00ce, 0x009e, 0x00ee,
 	0x00fe, 0x0005, 0x00f6, 0x2079, 0x0090, 0x781c, 0x0006, 0x7818,
 	0x0006, 0x2079, 0x0100, 0x7a14, 0x9284, 0x1984, 0x9085, 0x0012,
 	0x7816, 0x2019, 0x1000, 0x8319, 0x090c, 0x0d65, 0x7820, 0xd0bc,
@@ -708,11 +708,11 @@
 	0x00fe, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x19b8, 0x7054, 0x9086,
 	0x0000, 0x0904, 0x1cc8, 0x2079, 0x0090, 0x2009, 0x0207, 0x210c,
 	0xd194, 0x01b8, 0x2009, 0x020c, 0x210c, 0x9184, 0x0003, 0x0188,
-	0x080c, 0xd5fa, 0x2001, 0x0133, 0x2004, 0x9005, 0x090c, 0x0d65,
+	0x080c, 0xd61c, 0x2001, 0x0133, 0x2004, 0x9005, 0x090c, 0x0d65,
 	0x0016, 0x2009, 0x0040, 0x080c, 0x2052, 0x001e, 0x2001, 0x020c,
 	0x2102, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0x9106,
 	0x1120, 0x2009, 0x0040, 0x080c, 0x2052, 0x782c, 0xd0fc, 0x09a8,
-	0x080c, 0x98c9, 0x782c, 0xd0fc, 0x1de8, 0x080c, 0x98ad, 0x7054,
+	0x080c, 0x98e4, 0x782c, 0xd0fc, 0x1de8, 0x080c, 0x98c8, 0x7054,
 	0x9086, 0x0000, 0x1950, 0x782b, 0x0004, 0x782c, 0xd0ac, 0x1de8,
 	0x2009, 0x0040, 0x080c, 0x2052, 0x782b, 0x0002, 0x7057, 0x0000,
 	0x00ee, 0x00fe, 0x0005, 0x080c, 0x0d65, 0x8c60, 0x2c05, 0x9005,
@@ -797,17 +797,17 @@
 	0x781b, 0x0002, 0x783b, 0x001f, 0x7837, 0x0020, 0x7803, 0x1600,
 	0x012e, 0x0005, 0x2091, 0x2600, 0x781c, 0xd0a4, 0x190c, 0x204f,
 	0x7900, 0xd1dc, 0x1118, 0x9084, 0x0006, 0x001a, 0x9084, 0x000e,
-	0x0002, 0x1f71, 0x1f69, 0x7a6f, 0x1f69, 0x1f6b, 0x1f6b, 0x1f6b,
-	0x1f6b, 0x7a55, 0x1f69, 0x1f6d, 0x1f69, 0x1f6b, 0x1f69, 0x1f6b,
-	0x1f69, 0x080c, 0x0d65, 0x0031, 0x0020, 0x080c, 0x7a55, 0x080c,
-	0x7a6f, 0x0005, 0x0006, 0x0016, 0x0026, 0x080c, 0xd5fa, 0x7930,
-	0x9184, 0x0003, 0x01f0, 0x080c, 0x98ad, 0x2001, 0x19cb, 0x2004,
+	0x0002, 0x1f71, 0x1f69, 0x7a7a, 0x1f69, 0x1f6b, 0x1f6b, 0x1f6b,
+	0x1f6b, 0x7a60, 0x1f69, 0x1f6d, 0x1f69, 0x1f6b, 0x1f69, 0x1f6b,
+	0x1f69, 0x080c, 0x0d65, 0x0031, 0x0020, 0x080c, 0x7a60, 0x080c,
+	0x7a7a, 0x0005, 0x0006, 0x0016, 0x0026, 0x080c, 0xd61c, 0x7930,
+	0x9184, 0x0003, 0x01f0, 0x080c, 0x98c8, 0x2001, 0x19cb, 0x2004,
 	0x9005, 0x0180, 0x2001, 0x0133, 0x2004, 0x9005, 0x090c, 0x0d65,
-	0x00c6, 0x2001, 0x19cb, 0x2064, 0x080c, 0x98c9, 0x080c, 0xb437,
-	0x00ce, 0x0408, 0x2009, 0x0040, 0x080c, 0x2052, 0x080c, 0x98c9,
+	0x00c6, 0x2001, 0x19cb, 0x2064, 0x080c, 0x98e4, 0x080c, 0xb452,
+	0x00ce, 0x0408, 0x2009, 0x0040, 0x080c, 0x2052, 0x080c, 0x98e4,
 	0x00d0, 0x9184, 0x0014, 0x01a0, 0x6a00, 0x9286, 0x0003, 0x0160,
-	0x080c, 0x70ac, 0x1138, 0x080c, 0x73ac, 0x080c, 0x5cd5, 0x080c,
-	0x6fdd, 0x0010, 0x080c, 0x5b90, 0x080c, 0x7b0d, 0x0041, 0x0018,
+	0x080c, 0x70b7, 0x1138, 0x080c, 0x73b7, 0x080c, 0x5cdc, 0x080c,
+	0x6fe8, 0x0010, 0x080c, 0x5b97, 0x080c, 0x7b18, 0x0041, 0x0018,
 	0x9184, 0x9540, 0x1dc8, 0x002e, 0x001e, 0x000e, 0x0005, 0x00e6,
 	0x0036, 0x0046, 0x0056, 0x2071, 0x1a3c, 0x080c, 0x195f, 0x005e,
 	0x004e, 0x003e, 0x00ee, 0x0005, 0x0126, 0x2091, 0x2e00, 0x2071,
@@ -852,90 +852,90 @@
 	0x0007, 0x0002, 0x2105, 0x2102, 0x2102, 0x2102, 0x2104, 0x2102,
 	0x2102, 0x2102, 0x080c, 0x0d65, 0x0029, 0x002e, 0x001e, 0x000e,
 	0x012e, 0x0005, 0x00a6, 0x6124, 0x6028, 0xd09c, 0x0118, 0xd19c,
-	0x1904, 0x2364, 0xd1f4, 0x190c, 0x0d5e, 0x080c, 0x70ac, 0x0904,
-	0x2162, 0x080c, 0xbf46, 0x1120, 0x7000, 0x9086, 0x0003, 0x0580,
-	0x6024, 0x9084, 0x1800, 0x0560, 0x080c, 0x70cf, 0x0118, 0x080c,
-	0x70bd, 0x1530, 0x2011, 0x0020, 0x080c, 0x286d, 0x6043, 0x0000,
-	0x080c, 0xbf46, 0x0168, 0x080c, 0x70cf, 0x1150, 0x2001, 0x1978,
-	0x2003, 0x0001, 0x6027, 0x1800, 0x080c, 0x6f22, 0x0804, 0x2367,
+	0x1904, 0x2364, 0xd1f4, 0x190c, 0x0d5e, 0x080c, 0x70b7, 0x0904,
+	0x2162, 0x080c, 0xbf61, 0x1120, 0x7000, 0x9086, 0x0003, 0x0580,
+	0x6024, 0x9084, 0x1800, 0x0560, 0x080c, 0x70da, 0x0118, 0x080c,
+	0x70c8, 0x1530, 0x2011, 0x0020, 0x080c, 0x286d, 0x6043, 0x0000,
+	0x080c, 0xbf61, 0x0168, 0x080c, 0x70da, 0x1150, 0x2001, 0x1978,
+	0x2003, 0x0001, 0x6027, 0x1800, 0x080c, 0x6f2d, 0x0804, 0x2367,
 	0x70a0, 0x9005, 0x1150, 0x70a3, 0x0001, 0x00d6, 0x2069, 0x0140,
-	0x080c, 0x7103, 0x00de, 0x1904, 0x2367, 0x080c, 0x73b6, 0x0428,
-	0x080c, 0x70cf, 0x1590, 0x6024, 0x9084, 0x1800, 0x1108, 0x0468,
-	0x080c, 0x73b6, 0x080c, 0x73ac, 0x080c, 0x5cd5, 0x080c, 0x6fdd,
+	0x080c, 0x710e, 0x00de, 0x1904, 0x2367, 0x080c, 0x73c1, 0x0428,
+	0x080c, 0x70da, 0x1590, 0x6024, 0x9084, 0x1800, 0x1108, 0x0468,
+	0x080c, 0x73c1, 0x080c, 0x73b7, 0x080c, 0x5cdc, 0x080c, 0x6fe8,
 	0x0804, 0x2364, 0xd1ac, 0x1508, 0x6024, 0xd0dc, 0x1170, 0xd0e4,
 	0x1178, 0xd0d4, 0x1190, 0xd0cc, 0x0130, 0x7094, 0x9086, 0x0028,
-	0x1110, 0x080c, 0x728f, 0x0804, 0x2364, 0x080c, 0x73b1, 0x0048,
-	0x2001, 0x194e, 0x2003, 0x0002, 0x0020, 0x080c, 0x71ed, 0x0804,
-	0x2364, 0x080c, 0x7331, 0x0804, 0x2364, 0xd1ac, 0x0904, 0x227e,
-	0x080c, 0x70ac, 0x11d0, 0x2011, 0x0020, 0x080c, 0x286d, 0x0006,
-	0x0026, 0x0036, 0x080c, 0x70c6, 0x1158, 0x080c, 0x73ac, 0x080c,
-	0x5cd5, 0x080c, 0x6fdd, 0x003e, 0x002e, 0x000e, 0x00ae, 0x0005,
-	0x003e, 0x002e, 0x000e, 0x080c, 0x7080, 0x0016, 0x0046, 0x00c6,
+	0x1110, 0x080c, 0x729a, 0x0804, 0x2364, 0x080c, 0x73bc, 0x0048,
+	0x2001, 0x194e, 0x2003, 0x0002, 0x0020, 0x080c, 0x71f8, 0x0804,
+	0x2364, 0x080c, 0x733c, 0x0804, 0x2364, 0xd1ac, 0x0904, 0x227e,
+	0x080c, 0x70b7, 0x11d0, 0x2011, 0x0020, 0x080c, 0x286d, 0x0006,
+	0x0026, 0x0036, 0x080c, 0x70d1, 0x1158, 0x080c, 0x73b7, 0x080c,
+	0x5cdc, 0x080c, 0x6fe8, 0x003e, 0x002e, 0x000e, 0x00ae, 0x0005,
+	0x003e, 0x002e, 0x000e, 0x080c, 0x708b, 0x0016, 0x0046, 0x00c6,
 	0x644c, 0x9486, 0xf0f0, 0x1138, 0x2061, 0x0100, 0x644a, 0x6043,
 	0x0090, 0x6043, 0x0010, 0x74d6, 0x948c, 0xff00, 0x7038, 0xd084,
 	0x0178, 0x9186, 0xf800, 0x1160, 0x7044, 0xd084, 0x1148, 0xc085,
-	0x7046, 0x0036, 0x2418, 0x2011, 0x8016, 0x080c, 0x48d1, 0x003e,
-	0x080c, 0xbf3f, 0x1904, 0x2255, 0x9196, 0xff00, 0x05a8, 0x705c,
+	0x7046, 0x0036, 0x2418, 0x2011, 0x8016, 0x080c, 0x48d8, 0x003e,
+	0x080c, 0xbf5a, 0x1904, 0x2255, 0x9196, 0xff00, 0x05a8, 0x705c,
 	0x9084, 0x00ff, 0x810f, 0x81ff, 0x0110, 0x9116, 0x0568, 0x7130,
-	0xd184, 0x1550, 0x080c, 0x317f, 0x0128, 0xc18d, 0x7132, 0x080c,
-	0x6658, 0x1510, 0x6240, 0x9294, 0x0010, 0x0130, 0x6248, 0x9294,
+	0xd184, 0x1550, 0x080c, 0x3186, 0x0128, 0xc18d, 0x7132, 0x080c,
+	0x665f, 0x1510, 0x6240, 0x9294, 0x0010, 0x0130, 0x6248, 0x9294,
 	0xff00, 0x9296, 0xff00, 0x01c0, 0x7030, 0xd08c, 0x0904, 0x2255,
 	0x7038, 0xd08c, 0x1140, 0x2001, 0x180c, 0x200c, 0xd1ac, 0x1904,
 	0x2255, 0xc1ad, 0x2102, 0x0036, 0x73d4, 0x2011, 0x8013, 0x080c,
-	0x48d1, 0x003e, 0x0804, 0x2255, 0x7038, 0xd08c, 0x1140, 0x2001,
+	0x48d8, 0x003e, 0x0804, 0x2255, 0x7038, 0xd08c, 0x1140, 0x2001,
 	0x180c, 0x200c, 0xd1ac, 0x1904, 0x2255, 0xc1ad, 0x2102, 0x0036,
-	0x73d4, 0x2011, 0x8013, 0x080c, 0x48d1, 0x003e, 0x7130, 0xc185,
+	0x73d4, 0x2011, 0x8013, 0x080c, 0x48d8, 0x003e, 0x7130, 0xc185,
 	0x7132, 0x2011, 0x1854, 0x220c, 0x00f0, 0x0016, 0x2009, 0x0001,
-	0x2011, 0x0100, 0x080c, 0x83c3, 0x2019, 0x000e, 0x00c6, 0x2061,
-	0x0000, 0x080c, 0xd1c9, 0x00ce, 0x9484, 0x00ff, 0x9080, 0x3184,
+	0x2011, 0x0100, 0x080c, 0x83eb, 0x2019, 0x000e, 0x00c6, 0x2061,
+	0x0000, 0x080c, 0xd1eb, 0x00ce, 0x9484, 0x00ff, 0x9080, 0x318b,
 	0x200d, 0x918c, 0xff00, 0x810f, 0x2120, 0x9006, 0x2009, 0x000e,
-	0x080c, 0xd251, 0x001e, 0xd1ac, 0x1148, 0x0016, 0x2009, 0x0002,
-	0x2019, 0x0004, 0x080c, 0x2fc2, 0x001e, 0x0078, 0x0156, 0x00b6,
-	0x20a9, 0x007f, 0x900e, 0x080c, 0x6269, 0x1110, 0x080c, 0x5cef,
+	0x080c, 0xd273, 0x001e, 0xd1ac, 0x1148, 0x0016, 0x2009, 0x0002,
+	0x2019, 0x0004, 0x080c, 0x2fc5, 0x001e, 0x0078, 0x0156, 0x00b6,
+	0x20a9, 0x007f, 0x900e, 0x080c, 0x6270, 0x1110, 0x080c, 0x5cf6,
 	0x8108, 0x1f04, 0x224b, 0x00be, 0x015e, 0x00ce, 0x004e, 0x080c,
-	0x98ad, 0x080c, 0x9b52, 0x080c, 0x98c9, 0x60e3, 0x0000, 0x001e,
+	0x98c8, 0x080c, 0x9b6d, 0x080c, 0x98e4, 0x60e3, 0x0000, 0x001e,
 	0x2001, 0x1800, 0x2014, 0x9296, 0x0004, 0x1170, 0xd19c, 0x11b0,
 	0x2011, 0x180c, 0x2214, 0xd29c, 0x1120, 0x6204, 0x9295, 0x0002,
 	0x6206, 0x6228, 0xc29d, 0x622a, 0x2003, 0x0001, 0x2001, 0x1825,
 	0x2003, 0x0000, 0x2011, 0x0020, 0x080c, 0x286d, 0xd194, 0x0904,
-	0x2364, 0x0016, 0x080c, 0x98ad, 0x6220, 0xd2b4, 0x0904, 0x230c,
-	0x080c, 0x81e3, 0x080c, 0x8f9c, 0x2011, 0x0004, 0x080c, 0x286d,
+	0x2364, 0x0016, 0x080c, 0x98c8, 0x6220, 0xd2b4, 0x0904, 0x230c,
+	0x080c, 0x820b, 0x080c, 0x8fb7, 0x2011, 0x0004, 0x080c, 0x286d,
 	0x00f6, 0x2019, 0x19c4, 0x2304, 0x907d, 0x0904, 0x22d9, 0x7804,
 	0x9086, 0x0032, 0x15f0, 0x00d6, 0x00c6, 0x00e6, 0x0096, 0x2069,
 	0x0140, 0x782c, 0x685e, 0x7808, 0x685a, 0x6043, 0x0002, 0x2001,
 	0x0003, 0x8001, 0x1df0, 0x6043, 0x0000, 0x2001, 0x003c, 0x8001,
 	0x1df0, 0x080c, 0x2843, 0x2001, 0x001e, 0x8001, 0x0240, 0x20a9,
 	0x0009, 0x080c, 0x27fa, 0x6904, 0xd1dc, 0x1140, 0x0cb0, 0x2001,
-	0x0100, 0x080c, 0x2833, 0x9006, 0x080c, 0x2833, 0x080c, 0x884c,
-	0x080c, 0x98c9, 0x7814, 0x2048, 0xa867, 0x0103, 0x2f60, 0x080c,
-	0x9bcc, 0x009e, 0x00ee, 0x00ce, 0x00de, 0x00fe, 0x001e, 0x00ae,
+	0x0100, 0x080c, 0x2833, 0x9006, 0x080c, 0x2833, 0x080c, 0x8874,
+	0x080c, 0x98e4, 0x7814, 0x2048, 0xa867, 0x0103, 0x2f60, 0x080c,
+	0x9be7, 0x009e, 0x00ee, 0x00ce, 0x00de, 0x00fe, 0x001e, 0x00ae,
 	0x0005, 0x00fe, 0x00d6, 0x2069, 0x0140, 0x6804, 0x9084, 0x4000,
 	0x0110, 0x080c, 0x2843, 0x00de, 0x00c6, 0x2061, 0x19b8, 0x6034,
-	0x080c, 0xbf46, 0x0120, 0x909a, 0x0003, 0x1258, 0x0018, 0x909a,
-	0x00c8, 0x1238, 0x8000, 0x6036, 0x00ce, 0x080c, 0x8f74, 0x0804,
-	0x2361, 0x2061, 0x0100, 0x62c0, 0x080c, 0x97e3, 0x2019, 0x19c4,
+	0x080c, 0xbf61, 0x0120, 0x909a, 0x0003, 0x1258, 0x0018, 0x909a,
+	0x00c8, 0x1238, 0x8000, 0x6036, 0x00ce, 0x080c, 0x8f8f, 0x0804,
+	0x2361, 0x2061, 0x0100, 0x62c0, 0x080c, 0x97fe, 0x2019, 0x19c4,
 	0x2304, 0x9065, 0x0130, 0x6003, 0x0001, 0x2009, 0x0027, 0x080c,
-	0x9c6a, 0x00ce, 0x0804, 0x2361, 0xd2bc, 0x05e0, 0x080c, 0x81f0,
+	0x9c85, 0x00ce, 0x0804, 0x2361, 0xd2bc, 0x05e0, 0x080c, 0x8218,
 	0x2011, 0x0004, 0x080c, 0x286d, 0x00d6, 0x2069, 0x0140, 0x6804,
 	0x9084, 0x4000, 0x0110, 0x080c, 0x2843, 0x00de, 0x00c6, 0x2061,
-	0x19b8, 0x6050, 0x080c, 0xbf46, 0x0120, 0x909a, 0x0003, 0x1638,
+	0x19b8, 0x6050, 0x080c, 0xbf61, 0x0120, 0x909a, 0x0003, 0x1638,
 	0x0018, 0x909a, 0x00c8, 0x1618, 0x8000, 0x6052, 0x604c, 0x00ce,
-	0x9005, 0x0578, 0x2009, 0x07d0, 0x080c, 0x81e8, 0x9080, 0x0008,
+	0x9005, 0x0578, 0x2009, 0x07d0, 0x080c, 0x8210, 0x9080, 0x0008,
 	0x2004, 0x9086, 0x0006, 0x1138, 0x2009, 0x1984, 0x2011, 0x0012,
 	0x080c, 0x287c, 0x00f0, 0x2009, 0x1984, 0x2011, 0x0016, 0x080c,
 	0x287c, 0x00b8, 0x2011, 0x0004, 0x080c, 0x286d, 0x0090, 0x0036,
-	0x2019, 0x0001, 0x080c, 0x926b, 0x003e, 0x2019, 0x19cb, 0x2304,
-	0x9065, 0x0130, 0x2009, 0x004f, 0x6003, 0x0003, 0x080c, 0x9c6a,
-	0x00ce, 0x080c, 0x98c9, 0x001e, 0xd19c, 0x0904, 0x23c2, 0x7038,
+	0x2019, 0x0001, 0x080c, 0x9286, 0x003e, 0x2019, 0x19cb, 0x2304,
+	0x9065, 0x0130, 0x2009, 0x004f, 0x6003, 0x0003, 0x080c, 0x9c85,
+	0x00ce, 0x080c, 0x98e4, 0x001e, 0xd19c, 0x0904, 0x23c2, 0x7038,
 	0xd0ac, 0x1538, 0x0016, 0x0156, 0x2011, 0x0008, 0x080c, 0x286d,
 	0x6050, 0xc0e5, 0x6052, 0x20a9, 0x0367, 0x1f04, 0x238f, 0x1d04,
-	0x2377, 0x080c, 0x8217, 0x6020, 0xd09c, 0x1db8, 0x00f6, 0x2079,
+	0x2377, 0x080c, 0x823f, 0x6020, 0xd09c, 0x1db8, 0x00f6, 0x2079,
 	0x0100, 0x080c, 0x27aa, 0x00fe, 0x1d80, 0x6050, 0xc0e4, 0x6052,
 	0x2011, 0x0008, 0x080c, 0x286d, 0x015e, 0x001e, 0x0498, 0x015e,
-	0x001e, 0x0016, 0x6028, 0xc09c, 0x602a, 0x080c, 0x98ad, 0x080c,
-	0x9b52, 0x080c, 0x98c9, 0x60e3, 0x0000, 0x080c, 0xd5d9, 0x080c,
-	0xd5f4, 0x080c, 0x538a, 0xd0fc, 0x1138, 0x080c, 0xbf3f, 0x1120,
-	0x9085, 0x0001, 0x080c, 0x70f3, 0x9006, 0x080c, 0x2833, 0x2009,
+	0x001e, 0x0016, 0x6028, 0xc09c, 0x602a, 0x080c, 0x98c8, 0x080c,
+	0x9b6d, 0x080c, 0x98e4, 0x60e3, 0x0000, 0x080c, 0xd5fb, 0x080c,
+	0xd616, 0x080c, 0x5391, 0xd0fc, 0x1138, 0x080c, 0xbf5a, 0x1120,
+	0x9085, 0x0001, 0x080c, 0x70fe, 0x9006, 0x080c, 0x2833, 0x2009,
 	0x0002, 0x080c, 0x281f, 0x00e6, 0x2071, 0x1800, 0x7003, 0x0004,
 	0x080c, 0x0e9c, 0x00ee, 0x2011, 0x0008, 0x080c, 0x286d, 0x080c,
 	0x0bab, 0x001e, 0x918c, 0xffd0, 0x2110, 0x080c, 0x286d, 0x00ae,
@@ -943,34 +943,34 @@
 	0x2091, 0x8000, 0x2071, 0x1800, 0x71cc, 0x70ce, 0x9116, 0x0904,
 	0x241c, 0x81ff, 0x01a0, 0x2009, 0x0000, 0x080c, 0x281f, 0x2011,
 	0x8011, 0x2019, 0x010e, 0x231c, 0x939e, 0x0007, 0x1118, 0x2019,
-	0x0001, 0x0010, 0x2019, 0x0000, 0x080c, 0x48d1, 0x0468, 0x2001,
+	0x0001, 0x0010, 0x2019, 0x0000, 0x080c, 0x48d8, 0x0468, 0x2001,
 	0x1979, 0x200c, 0x81ff, 0x1140, 0x2001, 0x0109, 0x2004, 0xd0b4,
 	0x0118, 0x2019, 0x0003, 0x0008, 0x2118, 0x2011, 0x8012, 0x080c,
-	0x48d1, 0x080c, 0x0e9c, 0x080c, 0x538a, 0xd0fc, 0x11a8, 0x080c,
-	0xbf3f, 0x1190, 0x00c6, 0x080c, 0x24b8, 0x080c, 0x98ad, 0x080c,
-	0x91c6, 0x080c, 0x98c9, 0x2061, 0x0100, 0x2019, 0x0028, 0x2009,
-	0x0002, 0x080c, 0x2fc2, 0x00ce, 0x012e, 0x00fe, 0x00ee, 0x003e,
+	0x48d8, 0x080c, 0x0e9c, 0x080c, 0x5391, 0xd0fc, 0x11a8, 0x080c,
+	0xbf5a, 0x1190, 0x00c6, 0x080c, 0x24b8, 0x080c, 0x98c8, 0x080c,
+	0x91e1, 0x080c, 0x98e4, 0x2061, 0x0100, 0x2019, 0x0028, 0x2009,
+	0x0002, 0x080c, 0x2fc5, 0x00ce, 0x012e, 0x00fe, 0x00ee, 0x003e,
 	0x002e, 0x001e, 0x000e, 0x0005, 0x2028, 0x918c, 0x00ff, 0x2130,
 	0x9094, 0xff00, 0x11f0, 0x2011, 0x1836, 0x2214, 0xd2ac, 0x11c8,
 	0x81ff, 0x01e8, 0x2011, 0x181e, 0x2204, 0x9106, 0x1190, 0x2011,
 	0x181f, 0x2214, 0x9294, 0xff00, 0x9584, 0xff00, 0x9206, 0x1148,
 	0x2011, 0x181f, 0x2214, 0x9294, 0x00ff, 0x9584, 0x00ff, 0x9206,
-	0x1120, 0x2500, 0x080c, 0x7d48, 0x0048, 0x9584, 0x00ff, 0x9080,
-	0x3184, 0x200d, 0x918c, 0xff00, 0x810f, 0x9006, 0x0005, 0x9080,
-	0x3184, 0x200d, 0x918c, 0x00ff, 0x0005, 0x00d6, 0x2069, 0x0140,
+	0x1120, 0x2500, 0x080c, 0x7d70, 0x0048, 0x9584, 0x00ff, 0x9080,
+	0x318b, 0x200d, 0x918c, 0xff00, 0x810f, 0x9006, 0x0005, 0x9080,
+	0x318b, 0x200d, 0x918c, 0x00ff, 0x0005, 0x00d6, 0x2069, 0x0140,
 	0x2001, 0x1817, 0x2003, 0x00ef, 0x20a9, 0x0010, 0x9006, 0x6852,
 	0x6856, 0x1f04, 0x2468, 0x00de, 0x0005, 0x0006, 0x00d6, 0x0026,
 	0x2069, 0x0140, 0x2001, 0x1817, 0x2102, 0x8114, 0x8214, 0x8214,
 	0x8214, 0x20a9, 0x0010, 0x6853, 0x0000, 0x9006, 0x82ff, 0x1128,
-	0x9184, 0x000f, 0x9080, 0xd608, 0x2005, 0x6856, 0x8211, 0x1f04,
+	0x9184, 0x000f, 0x9080, 0xd62a, 0x2005, 0x6856, 0x8211, 0x1f04,
 	0x247d, 0x002e, 0x00de, 0x000e, 0x0005, 0x00c6, 0x2061, 0x1800,
 	0x6030, 0x0110, 0xc09d, 0x0008, 0xc09c, 0x6032, 0x00ce, 0x0005,
 	0x0156, 0x00d6, 0x0026, 0x0016, 0x0006, 0x2069, 0x0140, 0x6980,
 	0x9116, 0x0180, 0x9112, 0x1230, 0x8212, 0x8210, 0x22a8, 0x2001,
 	0x0402, 0x0018, 0x22a8, 0x2001, 0x0404, 0x680e, 0x1f04, 0x24ad,
 	0x680f, 0x0000, 0x000e, 0x001e, 0x002e, 0x00de, 0x015e, 0x0005,
-	0x080c, 0x5386, 0xd0c4, 0x0150, 0xd0a4, 0x0140, 0x9006, 0x0046,
-	0x2020, 0x2009, 0x002e, 0x080c, 0xd251, 0x004e, 0x0005, 0x00f6,
+	0x080c, 0x538d, 0xd0c4, 0x0150, 0xd0a4, 0x0140, 0x9006, 0x0046,
+	0x2020, 0x2009, 0x002e, 0x080c, 0xd273, 0x004e, 0x0005, 0x00f6,
 	0x0016, 0x0026, 0x2079, 0x0140, 0x78c4, 0xd0dc, 0x0904, 0x2524,
 	0x080c, 0x279a, 0x0660, 0x9084, 0x0700, 0x908e, 0x0600, 0x1120,
 	0x2011, 0x4000, 0x900e, 0x0458, 0x908e, 0x0500, 0x1120, 0x2011,
@@ -979,9 +979,9 @@
 	0x00b0, 0x908e, 0x0200, 0x1120, 0x9016, 0x2009, 0x0004, 0x0078,
 	0x908e, 0x0100, 0x1548, 0x9016, 0x2009, 0x0008, 0x0040, 0x9084,
 	0x0700, 0x908e, 0x0300, 0x1500, 0x2011, 0x0030, 0x0058, 0x2300,
-	0x9080, 0x0020, 0x2018, 0x080c, 0x83f1, 0x928c, 0xff00, 0x0110,
+	0x9080, 0x0020, 0x2018, 0x080c, 0x8419, 0x928c, 0xff00, 0x0110,
 	0x2011, 0x00ff, 0x2200, 0x8007, 0x9085, 0x004c, 0x78c2, 0x2009,
-	0x0138, 0x220a, 0x080c, 0x70ac, 0x1118, 0x2009, 0x193e, 0x220a,
+	0x0138, 0x220a, 0x080c, 0x70b7, 0x1118, 0x2009, 0x193e, 0x220a,
 	0x002e, 0x001e, 0x00fe, 0x0005, 0x78c3, 0x0000, 0x0cc8, 0x0126,
 	0x2091, 0x2800, 0x0006, 0x0016, 0x0026, 0x2001, 0x0170, 0x200c,
 	0x8000, 0x2014, 0x9184, 0x0003, 0x0110, 0x080c, 0x0d5e, 0x002e,
@@ -997,17 +997,17 @@
 	0x25f1, 0x25f3, 0x2001, 0x0001, 0x080c, 0x23c9, 0x080c, 0x27e4,
 	0x2001, 0x1963, 0x2003, 0x0000, 0x7828, 0x9084, 0xe1d7, 0x782a,
 	0x9006, 0x20a9, 0x0009, 0x080c, 0x27b6, 0x2001, 0x1961, 0x2003,
-	0x0006, 0x2009, 0x001e, 0x2011, 0x25f4, 0x080c, 0x81f5, 0x0005,
+	0x0006, 0x2009, 0x001e, 0x2011, 0x25f4, 0x080c, 0x821d, 0x0005,
 	0x2009, 0x1966, 0x200b, 0x0000, 0x2001, 0x196b, 0x2003, 0x0036,
 	0x2001, 0x196a, 0x2003, 0x002a, 0x2001, 0x1963, 0x2003, 0x0001,
 	0x9006, 0x080c, 0x2751, 0x2001, 0xffff, 0x20a9, 0x0009, 0x080c,
 	0x27b6, 0x2001, 0x1961, 0x2003, 0x0006, 0x2009, 0x001e, 0x2011,
-	0x25f4, 0x080c, 0x81f5, 0x0005, 0x080c, 0x0d65, 0x2001, 0x196b,
+	0x25f4, 0x080c, 0x821d, 0x0005, 0x080c, 0x0d65, 0x2001, 0x196b,
 	0x2003, 0x0036, 0x2001, 0x1963, 0x2003, 0x0003, 0x7a38, 0x9294,
 	0x0005, 0x9296, 0x0004, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001,
 	0x080c, 0x2751, 0x2001, 0x1967, 0x2003, 0x0000, 0x2001, 0xffff,
 	0x20a9, 0x0009, 0x080c, 0x27b6, 0x2001, 0x1961, 0x2003, 0x0006,
-	0x2009, 0x001e, 0x2011, 0x25f4, 0x080c, 0x81f5, 0x0005, 0x080c,
+	0x2009, 0x001e, 0x2011, 0x25f4, 0x080c, 0x821d, 0x0005, 0x080c,
 	0x0d65, 0x080c, 0x0d65, 0x0005, 0x0006, 0x0016, 0x0026, 0x00e6,
 	0x00f6, 0x0156, 0x0126, 0x2091, 0x8000, 0x2079, 0x0100, 0x2001,
 	0x1963, 0x2004, 0x908a, 0x0007, 0x1a0c, 0x0d65, 0x0043, 0x012e,
@@ -1069,24 +1069,24 @@
 	0x783b, 0x0007, 0x0090, 0x9186, 0x0001, 0x1118, 0x783b, 0x0006,
 	0x0060, 0x9186, 0x0002, 0x1118, 0x783b, 0x0005, 0x0030, 0x9186,
 	0x0003, 0x1118, 0x783b, 0x0004, 0x0000, 0x0006, 0x1d04, 0x27d6,
-	0x080c, 0x8217, 0x1f04, 0x27d6, 0x7850, 0x9085, 0x1000, 0x7852,
+	0x080c, 0x823f, 0x1f04, 0x27d6, 0x7850, 0x9085, 0x1000, 0x7852,
 	0x000e, 0x001e, 0x012e, 0x0005, 0x080c, 0x28d4, 0x0005, 0x0006,
 	0x0156, 0x00f6, 0x2079, 0x0100, 0x20a9, 0x000a, 0x7854, 0xd0ac,
 	0x1100, 0x7854, 0xd08c, 0x1110, 0x1f04, 0x27f1, 0x00fe, 0x015e,
-	0x000e, 0x0005, 0x1d04, 0x27fa, 0x080c, 0x8217, 0x1f04, 0x27fa,
+	0x000e, 0x0005, 0x1d04, 0x27fa, 0x080c, 0x823f, 0x1f04, 0x27fa,
 	0x0005, 0x0006, 0x2001, 0x196d, 0x2004, 0x9086, 0x0000, 0x000e,
 	0x0005, 0x0006, 0x2001, 0x196d, 0x2004, 0x9086, 0x0001, 0x000e,
 	0x0005, 0x0006, 0x2001, 0x196d, 0x2004, 0x9086, 0x0002, 0x000e,
 	0x0005, 0xa001, 0xa001, 0xa001, 0xa001, 0xa001, 0x0005, 0x0006,
 	0x2001, 0x1979, 0x2102, 0x000e, 0x0005, 0x2009, 0x0171, 0x2104,
 	0xd0dc, 0x0140, 0x2009, 0x0170, 0x2104, 0x200b, 0x0080, 0xa001,
-	0xa001, 0x200a, 0x0005, 0x0016, 0x0026, 0x080c, 0x70c6, 0x0108,
+	0xa001, 0x200a, 0x0005, 0x0016, 0x0026, 0x080c, 0x70d1, 0x0108,
 	0xc0bc, 0x2009, 0x0140, 0x2114, 0x9294, 0x0001, 0x9215, 0x220a,
 	0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x2009, 0x0140, 0x2114,
 	0x9294, 0x0001, 0x9285, 0x1000, 0x200a, 0x220a, 0x002e, 0x001e,
 	0x0005, 0x0016, 0x0026, 0x2009, 0x0140, 0x2114, 0x9294, 0x0001,
 	0x9215, 0x220a, 0x002e, 0x001e, 0x0005, 0x0006, 0x0016, 0x2009,
-	0x0140, 0x2104, 0x1128, 0x080c, 0x70c6, 0x0110, 0xc0bc, 0x0008,
+	0x0140, 0x2104, 0x1128, 0x080c, 0x70d1, 0x0110, 0xc0bc, 0x0008,
 	0xc0bd, 0x200a, 0x001e, 0x000e, 0x0005, 0x00f6, 0x2079, 0x0380,
 	0x7843, 0x0101, 0x7844, 0xd084, 0x1de8, 0x2001, 0x0109, 0x2202,
 	0x7843, 0x0100, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0380, 0x7843,
@@ -1193,2654 +1193,2659 @@
 	0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
 	0x0146, 0x0156, 0x080c, 0x2527, 0x080c, 0x1f20, 0x080c, 0x20e6,
 	0x080c, 0x132a, 0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006,
-	0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x9913,
+	0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x992e,
 	0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
-	0x0146, 0x0156, 0x080c, 0x9913, 0x080c, 0x20e6, 0x0804, 0x2dd2,
+	0x0146, 0x0156, 0x080c, 0x992e, 0x080c, 0x20e6, 0x0804, 0x2dd2,
 	0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
-	0x080c, 0x1f20, 0x080c, 0x9913, 0x0804, 0x2dd2, 0x0106, 0x0006,
+	0x080c, 0x1f20, 0x080c, 0x992e, 0x0804, 0x2dd2, 0x0106, 0x0006,
 	0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1f20,
-	0x080c, 0x9913, 0x080c, 0x20e6, 0x0804, 0x2dd2, 0x0106, 0x0006,
-	0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x9913,
+	0x080c, 0x992e, 0x080c, 0x20e6, 0x0804, 0x2dd2, 0x0106, 0x0006,
+	0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x992e,
 	0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6,
-	0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x9913, 0x080c, 0x20e6,
+	0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x992e, 0x080c, 0x20e6,
 	0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6,
-	0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1f20, 0x080c, 0x9913,
+	0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1f20, 0x080c, 0x992e,
 	0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6,
-	0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1f20, 0x080c, 0x9913,
+	0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1f20, 0x080c, 0x992e,
 	0x080c, 0x20e6, 0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006,
-	0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x9913,
+	0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x992e,
 	0x080c, 0x132a, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6,
-	0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x9913, 0x080c, 0x20e6,
+	0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x992e, 0x080c, 0x20e6,
 	0x080c, 0x132a, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6,
-	0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1f20, 0x080c, 0x9913,
+	0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1f20, 0x080c, 0x992e,
 	0x080c, 0x132a, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6,
-	0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1f20, 0x080c, 0x9913,
+	0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x1f20, 0x080c, 0x992e,
 	0x080c, 0x20e6, 0x080c, 0x132a, 0x0804, 0x2dd2, 0x0106, 0x0006,
-	0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x9913,
+	0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x992e,
 	0x080c, 0x132a, 0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006,
-	0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x9913,
+	0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x992e,
 	0x080c, 0x20e6, 0x080c, 0x132a, 0x080c, 0x1f4a, 0x0804, 0x2dd2,
 	0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
-	0x080c, 0x1f20, 0x080c, 0x9913, 0x080c, 0x132a, 0x080c, 0x1f4a,
+	0x080c, 0x1f20, 0x080c, 0x992e, 0x080c, 0x132a, 0x080c, 0x1f4a,
 	0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
-	0x0146, 0x0156, 0x080c, 0x1f20, 0x080c, 0x9913, 0x080c, 0x20e6,
+	0x0146, 0x0156, 0x080c, 0x1f20, 0x080c, 0x992e, 0x080c, 0x20e6,
 	0x080c, 0x132a, 0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006,
 	0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527,
-	0x080c, 0x9913, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6,
-	0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527, 0x080c, 0x9913,
+	0x080c, 0x992e, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6,
+	0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527, 0x080c, 0x992e,
 	0x080c, 0x20e6, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6,
 	0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527, 0x080c, 0x1f20,
-	0x080c, 0x9913, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6,
+	0x080c, 0x992e, 0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6,
 	0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527, 0x080c, 0x1f20,
-	0x080c, 0x9913, 0x080c, 0x20e6, 0x0804, 0x2dd2, 0x0106, 0x0006,
+	0x080c, 0x992e, 0x080c, 0x20e6, 0x0804, 0x2dd2, 0x0106, 0x0006,
 	0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527,
-	0x080c, 0x9913, 0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006,
+	0x080c, 0x992e, 0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006,
 	0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527,
-	0x080c, 0x9913, 0x080c, 0x20e6, 0x080c, 0x1f4a, 0x0804, 0x2dd2,
+	0x080c, 0x992e, 0x080c, 0x20e6, 0x080c, 0x1f4a, 0x0804, 0x2dd2,
 	0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
-	0x080c, 0x2527, 0x080c, 0x1f20, 0x080c, 0x9913, 0x080c, 0x1f4a,
+	0x080c, 0x2527, 0x080c, 0x1f20, 0x080c, 0x992e, 0x080c, 0x1f4a,
 	0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
-	0x0146, 0x0156, 0x080c, 0x2527, 0x080c, 0x1f20, 0x080c, 0x9913,
+	0x0146, 0x0156, 0x080c, 0x2527, 0x080c, 0x1f20, 0x080c, 0x992e,
 	0x080c, 0x20e6, 0x080c, 0x1f4a, 0x0804, 0x2dd2, 0x0106, 0x0006,
 	0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527,
-	0x080c, 0x9913, 0x080c, 0x132a, 0x0804, 0x2dd2, 0x0106, 0x0006,
+	0x080c, 0x992e, 0x080c, 0x132a, 0x0804, 0x2dd2, 0x0106, 0x0006,
 	0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527,
-	0x080c, 0x9913, 0x080c, 0x20e6, 0x080c, 0x132a, 0x0804, 0x2dd2,
+	0x080c, 0x992e, 0x080c, 0x20e6, 0x080c, 0x132a, 0x0804, 0x2dd2,
 	0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
-	0x080c, 0x2527, 0x080c, 0x1f20, 0x080c, 0x9913, 0x080c, 0x132a,
+	0x080c, 0x2527, 0x080c, 0x1f20, 0x080c, 0x992e, 0x080c, 0x132a,
 	0x0804, 0x2dd2, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
-	0x0146, 0x0156, 0x080c, 0x2527, 0x080c, 0x1f20, 0x080c, 0x9913,
+	0x0146, 0x0156, 0x080c, 0x2527, 0x080c, 0x1f20, 0x080c, 0x992e,
 	0x080c, 0x20e6, 0x080c, 0x132a, 0x0804, 0x2dd2, 0x0106, 0x0006,
 	0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527,
-	0x080c, 0x9913, 0x080c, 0x132a, 0x080c, 0x1f4a, 0x04d8, 0x0106,
+	0x080c, 0x992e, 0x080c, 0x132a, 0x080c, 0x1f4a, 0x04d8, 0x0106,
 	0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
-	0x2527, 0x080c, 0x9913, 0x080c, 0x20e6, 0x080c, 0x132a, 0x080c,
+	0x2527, 0x080c, 0x992e, 0x080c, 0x20e6, 0x080c, 0x132a, 0x080c,
 	0x1f4a, 0x0440, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
 	0x0146, 0x0156, 0x080c, 0x2527, 0x080c, 0x1f20, 0x080c, 0x132a,
-	0x080c, 0x9913, 0x080c, 0x1f4a, 0x00a8, 0x0106, 0x0006, 0x0126,
+	0x080c, 0x992e, 0x080c, 0x1f4a, 0x00a8, 0x0106, 0x0006, 0x0126,
 	0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2527, 0x080c,
-	0x1f20, 0x080c, 0x9913, 0x080c, 0x20e6, 0x080c, 0x132a, 0x080c,
+	0x1f20, 0x080c, 0x992e, 0x080c, 0x20e6, 0x080c, 0x132a, 0x080c,
 	0x1f4a, 0x0000, 0x015e, 0x014e, 0x013e, 0x01de, 0x01ce, 0x012e,
 	0x000e, 0x010e, 0x000d, 0x00b6, 0x00c6, 0x0026, 0x0046, 0x9026,
-	0x080c, 0x661e, 0x1904, 0x2ede, 0x72d8, 0x2001, 0x194d, 0x2004,
+	0x080c, 0x6625, 0x1904, 0x2ee1, 0x72d8, 0x2001, 0x194d, 0x2004,
 	0x9005, 0x1110, 0xd29c, 0x0148, 0xd284, 0x1138, 0xd2bc, 0x1904,
-	0x2ede, 0x080c, 0x2ee3, 0x0804, 0x2ede, 0xd2cc, 0x1904, 0x2ede,
-	0x080c, 0x70ac, 0x1120, 0x70ab, 0xffff, 0x0804, 0x2ede, 0xd294,
-	0x0120, 0x70ab, 0xffff, 0x0804, 0x2ede, 0x080c, 0x317a, 0x0160,
-	0x080c, 0xbf46, 0x0128, 0x2001, 0x1817, 0x203c, 0x0804, 0x2e70,
-	0x70ab, 0xffff, 0x0804, 0x2ede, 0x2001, 0x1817, 0x203c, 0x7290,
-	0xd284, 0x0904, 0x2e70, 0xd28c, 0x1904, 0x2e70, 0x0036, 0x73a8,
+	0x2ee1, 0x080c, 0x2ee6, 0x0804, 0x2ee1, 0xd2cc, 0x1904, 0x2ee1,
+	0x080c, 0x70b7, 0x1120, 0x70ab, 0xffff, 0x0804, 0x2ee1, 0xd294,
+	0x0120, 0x70ab, 0xffff, 0x0804, 0x2ee1, 0x080c, 0x3181, 0x0160,
+	0x080c, 0xbf61, 0x0128, 0x2001, 0x1817, 0x203c, 0x0804, 0x2e73,
+	0x70ab, 0xffff, 0x0804, 0x2ee1, 0x2001, 0x1817, 0x203c, 0x7290,
+	0xd284, 0x0904, 0x2e73, 0xd28c, 0x1904, 0x2e73, 0x0036, 0x73a8,
 	0x938e, 0xffff, 0x1110, 0x2019, 0x0001, 0x8314, 0x92e0, 0x1d80,
 	0x2c04, 0x938c, 0x0001, 0x0120, 0x9084, 0xff00, 0x8007, 0x0010,
-	0x9084, 0x00ff, 0x970e, 0x0590, 0x908e, 0x0000, 0x0578, 0x908e,
-	0x00ff, 0x1150, 0x7230, 0xd284, 0x1570, 0x7290, 0xc28d, 0x7292,
-	0x70ab, 0xffff, 0x003e, 0x0460, 0x0026, 0x2011, 0x0010, 0x080c,
-	0x6684, 0x002e, 0x0118, 0x70ab, 0xffff, 0x00f8, 0x900e, 0x080c,
-	0x2424, 0x080c, 0x6209, 0x11a8, 0x080c, 0x6660, 0x1150, 0x7030,
-	0xd08c, 0x0118, 0xb800, 0xd0bc, 0x0120, 0x080c, 0x2efc, 0x0148,
-	0x0028, 0x080c, 0x3050, 0x080c, 0x2f28, 0x0118, 0x8318, 0x0804,
-	0x2e25, 0x73aa, 0x0010, 0x70ab, 0xffff, 0x003e, 0x0804, 0x2ede,
-	0x9780, 0x3184, 0x203d, 0x97bc, 0xff00, 0x873f, 0x2041, 0x007e,
-	0x70a8, 0x9096, 0xffff, 0x1118, 0x900e, 0x28a8, 0x0050, 0x9812,
-	0x0220, 0x2008, 0x9802, 0x20a8, 0x0020, 0x70ab, 0xffff, 0x0804,
-	0x2ede, 0x2700, 0x0156, 0x0016, 0x9106, 0x0904, 0x2ed3, 0x0026,
-	0x2011, 0x0010, 0x080c, 0x6684, 0x002e, 0x0120, 0x2009, 0xffff,
-	0x0804, 0x2edb, 0xc484, 0x080c, 0x6269, 0x0138, 0x080c, 0xbf46,
-	0x1590, 0x080c, 0x6209, 0x15b8, 0x0008, 0xc485, 0x080c, 0x6660,
-	0x1130, 0x7030, 0xd08c, 0x01f8, 0xb800, 0xd0bc, 0x11e0, 0x7290,
-	0xd28c, 0x0180, 0x080c, 0x6660, 0x9082, 0x0006, 0x02e0, 0xd484,
-	0x1118, 0x080c, 0x622d, 0x0028, 0x080c, 0x30e8, 0x01a0, 0x080c,
-	0x3113, 0x0088, 0x080c, 0x3050, 0x080c, 0xbf46, 0x1160, 0x080c,
-	0x2f28, 0x0188, 0x0040, 0x080c, 0xbf46, 0x1118, 0x080c, 0x30e8,
-	0x0110, 0x0451, 0x0140, 0x001e, 0x8108, 0x015e, 0x1f04, 0x2e89,
-	0x70ab, 0xffff, 0x0018, 0x001e, 0x015e, 0x71aa, 0x004e, 0x002e,
-	0x00ce, 0x00be, 0x0005, 0x00c6, 0x0016, 0x70ab, 0x0001, 0x2009,
-	0x007e, 0x080c, 0x6209, 0x1168, 0xb813, 0x00ff, 0xb817, 0xfffe,
-	0x080c, 0x3050, 0x04a9, 0x0128, 0x70d8, 0xc0bd, 0x70da, 0x080c,
-	0xbc93, 0x001e, 0x00ce, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6,
-	0x2001, 0x1858, 0x2004, 0x9084, 0x00ff, 0xb842, 0x080c, 0x9c3d,
-	0x01d0, 0x2b00, 0x6012, 0x080c, 0xbcc0, 0x6023, 0x0001, 0x9006,
-	0x080c, 0x61a6, 0x2001, 0x0000, 0x080c, 0x61ba, 0x0126, 0x2091,
-	0x8000, 0x70a4, 0x8000, 0x70a6, 0x012e, 0x2009, 0x0004, 0x080c,
-	0x9c6a, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005,
-	0x0016, 0x0076, 0x00d6, 0x00c6, 0x2001, 0x1858, 0x2004, 0x9084,
-	0x00ff, 0xb842, 0x080c, 0x9c3d, 0x0548, 0x2b00, 0x6012, 0xb800,
-	0xc0c4, 0xb802, 0xb8a0, 0x9086, 0x007e, 0x0140, 0xb804, 0x9084,
-	0x00ff, 0x9086, 0x0006, 0x1110, 0x080c, 0x3003, 0x080c, 0xbcc0,
-	0x6023, 0x0001, 0x9006, 0x080c, 0x61a6, 0x2001, 0x0002, 0x080c,
-	0x61ba, 0x0126, 0x2091, 0x8000, 0x70a4, 0x8000, 0x70a6, 0x012e,
-	0x2009, 0x0002, 0x080c, 0x9c6a, 0x9085, 0x0001, 0x00ce, 0x00de,
-	0x007e, 0x001e, 0x0005, 0x00b6, 0x00c6, 0x0026, 0x2009, 0x0080,
-	0x080c, 0x6209, 0x1140, 0xb813, 0x00ff, 0xb817, 0xfffc, 0x0039,
-	0x0110, 0x70df, 0xffff, 0x002e, 0x00ce, 0x00be, 0x0005, 0x0016,
-	0x0076, 0x00d6, 0x00c6, 0x080c, 0x9b76, 0x01d0, 0x2b00, 0x6012,
-	0x080c, 0xbcc0, 0x6023, 0x0001, 0x9006, 0x080c, 0x61a6, 0x2001,
-	0x0002, 0x080c, 0x61ba, 0x0126, 0x2091, 0x8000, 0x70e0, 0x8000,
-	0x70e2, 0x012e, 0x2009, 0x0002, 0x080c, 0x9c6a, 0x9085, 0x0001,
-	0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, 0x00c6, 0x00d6, 0x0126,
-	0x2091, 0x8000, 0x2009, 0x007f, 0x080c, 0x6209, 0x11b8, 0xb813,
-	0x00ff, 0xb817, 0xfffd, 0xb8c7, 0x0004, 0x080c, 0x9b76, 0x0170,
-	0x2b00, 0x6012, 0x6316, 0x6023, 0x0001, 0x620a, 0x080c, 0xbcc0,
-	0x2009, 0x0022, 0x080c, 0x9c6a, 0x9085, 0x0001, 0x012e, 0x00de,
-	0x00ce, 0x0005, 0x00e6, 0x00c6, 0x0066, 0x0036, 0x0026, 0x00b6,
-	0x21f0, 0x9036, 0x080c, 0x98ad, 0x1110, 0x2031, 0x0001, 0x0066,
-	0x080c, 0x861e, 0x080c, 0x859e, 0x080c, 0x9803, 0x080c, 0xab2b,
-	0x006e, 0x86ff, 0x0110, 0x080c, 0x98c9, 0x3e08, 0x2130, 0x81ff,
-	0x0120, 0x20a9, 0x007e, 0x900e, 0x0018, 0x20a9, 0x007f, 0x900e,
-	0x0016, 0x080c, 0x6269, 0x1140, 0x9686, 0x0002, 0x1118, 0xb800,
-	0xd0bc, 0x1110, 0x080c, 0x5cef, 0x001e, 0x8108, 0x1f04, 0x2fe8,
-	0x9686, 0x0001, 0x190c, 0x314e, 0x00be, 0x002e, 0x003e, 0x006e,
-	0x00ce, 0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0036, 0x0026, 0x0016,
-	0x00b6, 0x9016, 0x080c, 0x98ad, 0x1110, 0x2011, 0x0001, 0x0026,
-	0x6210, 0x2258, 0xbaa0, 0x0026, 0x2019, 0x0029, 0x080c, 0x8613,
-	0x0076, 0x2039, 0x0000, 0x080c, 0x8502, 0x2c08, 0x080c, 0xcfa6,
-	0x007e, 0x001e, 0x002e, 0x82ff, 0x0110, 0x080c, 0x98c9, 0xba10,
-	0xbb14, 0x080c, 0x5cef, 0xba12, 0xbb16, 0x00be, 0x001e, 0x002e,
-	0x003e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x00b6, 0x6010,
-	0x2058, 0xb8a0, 0x00be, 0x9086, 0x0080, 0x0150, 0x2071, 0x1800,
-	0x70a4, 0x9005, 0x0110, 0x8001, 0x70a6, 0x000e, 0x00ee, 0x0005,
-	0x2071, 0x1800, 0x70e0, 0x9005, 0x0dc0, 0x8001, 0x70e2, 0x0ca8,
-	0xb800, 0xc08c, 0xb802, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x00b6,
-	0x0036, 0x0026, 0x0016, 0x0156, 0x2178, 0x9016, 0x080c, 0x98ad,
+	0x9084, 0x00ff, 0x970e, 0x05a8, 0x908e, 0x0000, 0x0590, 0x908e,
+	0x00ff, 0x1150, 0x7230, 0xd284, 0x1588, 0x7290, 0xc28d, 0x7292,
+	0x70ab, 0xffff, 0x003e, 0x0478, 0x0026, 0x2011, 0x0010, 0x080c,
+	0x668b, 0x002e, 0x0118, 0x70ab, 0xffff, 0x0410, 0x900e, 0x080c,
+	0x2424, 0x080c, 0x6210, 0x11c0, 0x080c, 0x6667, 0x1168, 0x7030,
+	0xd08c, 0x0130, 0xb800, 0xd0bc, 0x0138, 0x080c, 0x655f, 0x0120,
+	0x080c, 0x2eff, 0x0148, 0x0028, 0x080c, 0x3057, 0x080c, 0x2f2b,
+	0x0118, 0x8318, 0x0804, 0x2e25, 0x73aa, 0x0010, 0x70ab, 0xffff,
+	0x003e, 0x0804, 0x2ee1, 0x9780, 0x318b, 0x203d, 0x97bc, 0xff00,
+	0x873f, 0x2041, 0x007e, 0x70a8, 0x9096, 0xffff, 0x1118, 0x900e,
+	0x28a8, 0x0050, 0x9812, 0x0220, 0x2008, 0x9802, 0x20a8, 0x0020,
+	0x70ab, 0xffff, 0x0804, 0x2ee1, 0x2700, 0x0156, 0x0016, 0x9106,
+	0x0904, 0x2ed6, 0x0026, 0x2011, 0x0010, 0x080c, 0x668b, 0x002e,
+	0x0120, 0x2009, 0xffff, 0x0804, 0x2ede, 0xc484, 0x080c, 0x6270,
+	0x0138, 0x080c, 0xbf61, 0x1590, 0x080c, 0x6210, 0x15b8, 0x0008,
+	0xc485, 0x080c, 0x6667, 0x1130, 0x7030, 0xd08c, 0x01f8, 0xb800,
+	0xd0bc, 0x11e0, 0x7290, 0xd28c, 0x0180, 0x080c, 0x6667, 0x9082,
+	0x0006, 0x02e0, 0xd484, 0x1118, 0x080c, 0x6234, 0x0028, 0x080c,
+	0x30ef, 0x01a0, 0x080c, 0x311a, 0x0088, 0x080c, 0x3057, 0x080c,
+	0xbf61, 0x1160, 0x080c, 0x2f2b, 0x0188, 0x0040, 0x080c, 0xbf61,
+	0x1118, 0x080c, 0x30ef, 0x0110, 0x0451, 0x0140, 0x001e, 0x8108,
+	0x015e, 0x1f04, 0x2e8c, 0x70ab, 0xffff, 0x0018, 0x001e, 0x015e,
+	0x71aa, 0x004e, 0x002e, 0x00ce, 0x00be, 0x0005, 0x00c6, 0x0016,
+	0x70ab, 0x0001, 0x2009, 0x007e, 0x080c, 0x6210, 0x1168, 0xb813,
+	0x00ff, 0xb817, 0xfffe, 0x080c, 0x3057, 0x04a9, 0x0128, 0x70d8,
+	0xc0bd, 0x70da, 0x080c, 0xbcae, 0x001e, 0x00ce, 0x0005, 0x0016,
+	0x0076, 0x00d6, 0x00c6, 0x2001, 0x1858, 0x2004, 0x9084, 0x00ff,
+	0xb842, 0x080c, 0x9c58, 0x01d0, 0x2b00, 0x6012, 0x080c, 0xbcdb,
+	0x6023, 0x0001, 0x9006, 0x080c, 0x61ad, 0x2001, 0x0000, 0x080c,
+	0x61c1, 0x0126, 0x2091, 0x8000, 0x70a4, 0x8000, 0x70a6, 0x012e,
+	0x2009, 0x0004, 0x080c, 0x9c85, 0x9085, 0x0001, 0x00ce, 0x00de,
+	0x007e, 0x001e, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x2001,
+	0x1858, 0x2004, 0x9084, 0x00ff, 0xb842, 0x080c, 0x9c58, 0x0548,
+	0x2b00, 0x6012, 0xb800, 0xc0c4, 0xb802, 0xb8a0, 0x9086, 0x007e,
+	0x0140, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1110, 0x080c,
+	0x3006, 0x080c, 0xbcdb, 0x6023, 0x0001, 0x9006, 0x080c, 0x61ad,
+	0x2001, 0x0002, 0x080c, 0x61c1, 0x0126, 0x2091, 0x8000, 0x70a4,
+	0x8000, 0x70a6, 0x012e, 0x2009, 0x0002, 0x080c, 0x9c85, 0x9085,
+	0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, 0x00b6, 0x00c6,
+	0x0026, 0x2009, 0x0080, 0x080c, 0x6210, 0x1140, 0xb813, 0x00ff,
+	0xb817, 0xfffc, 0x0039, 0x0110, 0x70df, 0xffff, 0x002e, 0x00ce,
+	0x00be, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x080c, 0x9b91,
+	0x01d0, 0x2b00, 0x6012, 0x080c, 0xbcdb, 0x6023, 0x0001, 0x9006,
+	0x080c, 0x61ad, 0x2001, 0x0002, 0x080c, 0x61c1, 0x0126, 0x2091,
+	0x8000, 0x70e0, 0x8000, 0x70e2, 0x012e, 0x2009, 0x0002, 0x080c,
+	0x9c85, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005,
+	0x00c6, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2009, 0x007f, 0x080c,
+	0x6210, 0x11b8, 0xb813, 0x00ff, 0xb817, 0xfffd, 0xb8c7, 0x0004,
+	0x080c, 0x9b91, 0x0170, 0x2b00, 0x6012, 0x6316, 0x6023, 0x0001,
+	0x620a, 0x080c, 0xbcdb, 0x2009, 0x0022, 0x080c, 0x9c85, 0x9085,
+	0x0001, 0x012e, 0x00de, 0x00ce, 0x0005, 0x00e6, 0x00c6, 0x0066,
+	0x0036, 0x0026, 0x00b6, 0x21f0, 0x9036, 0x080c, 0x98c8, 0x1110,
+	0x2031, 0x0001, 0x0066, 0x080c, 0x8646, 0x080c, 0x85c6, 0x080c,
+	0x981e, 0x080c, 0xab46, 0x006e, 0x86ff, 0x0110, 0x080c, 0x98e4,
+	0x3e08, 0x2130, 0x81ff, 0x0120, 0x20a9, 0x007e, 0x900e, 0x0018,
+	0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x6270, 0x1140, 0x9686,
+	0x0002, 0x1118, 0xb800, 0xd0bc, 0x1110, 0x080c, 0x5cf6, 0x001e,
+	0x8108, 0x1f04, 0x2feb, 0x9686, 0x0001, 0x190c, 0x3155, 0x00be,
+	0x002e, 0x003e, 0x006e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x00c6,
+	0x0046, 0x0036, 0x0026, 0x0016, 0x00b6, 0x9016, 0x080c, 0x98c8,
+	0x1110, 0x2011, 0x0001, 0x0026, 0x6210, 0x2258, 0xbaa0, 0x0026,
+	0x2019, 0x0029, 0x080c, 0x863b, 0x0076, 0x2039, 0x0000, 0x080c,
+	0x852a, 0x2c08, 0x080c, 0xcfc8, 0x007e, 0x001e, 0x002e, 0x82ff,
+	0x0110, 0x080c, 0x98e4, 0xba10, 0xbb14, 0xbc84, 0x080c, 0x5cf6,
+	0xba12, 0xbb16, 0xbc86, 0x00be, 0x001e, 0x002e, 0x003e, 0x004e,
+	0x00ce, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x00b6, 0x6010, 0x2058,
+	0xb8a0, 0x00be, 0x9086, 0x0080, 0x0150, 0x2071, 0x1800, 0x70a4,
+	0x9005, 0x0110, 0x8001, 0x70a6, 0x000e, 0x00ee, 0x0005, 0x2071,
+	0x1800, 0x70e0, 0x9005, 0x0dc0, 0x8001, 0x70e2, 0x0ca8, 0xb800,
+	0xc08c, 0xb802, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x00b6, 0x0046,
+	0x0036, 0x0026, 0x0016, 0x0156, 0x2178, 0x9016, 0x080c, 0x98c8,
 	0x1110, 0x2011, 0x0001, 0x0026, 0x81ff, 0x1118, 0x20a9, 0x0001,
-	0x0080, 0x080c, 0x5386, 0xd0c4, 0x0148, 0x0040, 0x9006, 0x0046,
-	0x2020, 0x2009, 0x002d, 0x080c, 0xd251, 0x004e, 0x20a9, 0x0800,
-	0x9016, 0x0026, 0x928e, 0x007e, 0x0904, 0x30c3, 0x928e, 0x007f,
-	0x0904, 0x30c3, 0x928e, 0x0080, 0x05f0, 0x9288, 0x1000, 0x210c,
-	0x81ff, 0x05c8, 0x8fff, 0x1150, 0x2001, 0x195f, 0x0006, 0x2003,
-	0x0001, 0x080c, 0x30d5, 0x000e, 0x2003, 0x0000, 0x00b6, 0x00c6,
-	0x2158, 0x2001, 0x0001, 0x080c, 0x662a, 0x00ce, 0x00be, 0x2019,
-	0x0029, 0x080c, 0x8613, 0x0076, 0x2039, 0x0000, 0x080c, 0x8502,
-	0x00b6, 0x00c6, 0x0026, 0x2158, 0xba04, 0x9294, 0x00ff, 0x9286,
-	0x0006, 0x1118, 0xb807, 0x0404, 0x0028, 0x2001, 0x0004, 0x8007,
-	0x9215, 0xba06, 0x002e, 0x00ce, 0x00be, 0x0016, 0x2c08, 0x080c,
-	0xcfa6, 0x001e, 0x007e, 0x002e, 0x8210, 0x1f04, 0x3079, 0x002e,
-	0x82ff, 0x0110, 0x080c, 0x98c9, 0x015e, 0x001e, 0x002e, 0x003e,
-	0x00be, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0046, 0x0026, 0x0016,
-	0x080c, 0x5386, 0xd0c4, 0x0140, 0xd0a4, 0x0130, 0x9006, 0x2220,
-	0x2009, 0x0029, 0x080c, 0xd251, 0x001e, 0x002e, 0x004e, 0x0005,
-	0x0016, 0x0026, 0x0036, 0x00c6, 0x7290, 0x82ff, 0x01e8, 0x080c,
-	0x6658, 0x11d0, 0x2100, 0x080c, 0x2457, 0x81ff, 0x01b8, 0x2019,
-	0x0001, 0x8314, 0x92e0, 0x1d80, 0x2c04, 0xd384, 0x0120, 0x9084,
-	0xff00, 0x8007, 0x0010, 0x9084, 0x00ff, 0x9116, 0x0138, 0x9096,
-	0x00ff, 0x0110, 0x8318, 0x0c68, 0x9085, 0x0001, 0x00ce, 0x003e,
-	0x002e, 0x001e, 0x0005, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000,
-	0x0066, 0x9036, 0x080c, 0x98ad, 0x1110, 0x2031, 0x0001, 0x0066,
-	0x0036, 0x2019, 0x0029, 0x00d9, 0x003e, 0x006e, 0x86ff, 0x0110,
-	0x080c, 0x98c9, 0x006e, 0x9180, 0x1000, 0x2004, 0x9065, 0x0158,
-	0x0016, 0x00c6, 0x2061, 0x1b02, 0x001e, 0x6112, 0x080c, 0x3003,
-	0x001e, 0x080c, 0x622d, 0x012e, 0x00ce, 0x001e, 0x0005, 0x0016,
-	0x0026, 0x2110, 0x080c, 0x94d9, 0x080c, 0xd507, 0x002e, 0x001e,
-	0x0005, 0x2001, 0x1836, 0x2004, 0xd0cc, 0x0005, 0x00c6, 0x00b6,
-	0x080c, 0x70ac, 0x1118, 0x20a9, 0x0800, 0x0010, 0x20a9, 0x0782,
-	0x080c, 0x70ac, 0x1110, 0x900e, 0x0010, 0x2009, 0x007e, 0x9180,
-	0x1000, 0x2004, 0x905d, 0x0130, 0x86ff, 0x0110, 0xb800, 0xd0bc,
-	0x090c, 0x622d, 0x8108, 0x1f04, 0x315f, 0x2061, 0x1800, 0x607b,
-	0x0000, 0x607c, 0x9084, 0x00ff, 0x607e, 0x60af, 0x0000, 0x00be,
-	0x00ce, 0x0005, 0x2001, 0x1875, 0x2004, 0xd0bc, 0x0005, 0x2011,
-	0x1854, 0x2214, 0xd2ec, 0x0005, 0x7eef, 0x7de8, 0x7ce4, 0x80e2,
-	0x7be1, 0x80e0, 0x80dc, 0x80da, 0x7ad9, 0x80d6, 0x80d5, 0x80d4,
-	0x80d3, 0x80d2, 0x80d1, 0x79ce, 0x78cd, 0x80cc, 0x80cb, 0x80ca,
-	0x80c9, 0x80c7, 0x80c6, 0x77c5, 0x76c3, 0x80bc, 0x80ba, 0x75b9,
-	0x80b6, 0x74b5, 0x73b4, 0x72b3, 0x80b2, 0x80b1, 0x80ae, 0x71ad,
-	0x80ac, 0x70ab, 0x6faa, 0x6ea9, 0x80a7, 0x6da6, 0x6ca5, 0x6ba3,
-	0x6a9f, 0x699e, 0x689d, 0x809b, 0x8098, 0x6797, 0x6690, 0x658f,
-	0x6488, 0x6384, 0x6282, 0x8081, 0x8080, 0x617c, 0x607a, 0x8079,
-	0x5f76, 0x8075, 0x8074, 0x8073, 0x8072, 0x8071, 0x806e, 0x5e6d,
-	0x806c, 0x5d6b, 0x5c6a, 0x5b69, 0x8067, 0x5a66, 0x5965, 0x5863,
-	0x575c, 0x565a, 0x5559, 0x8056, 0x8055, 0x5454, 0x5353, 0x5252,
-	0x5151, 0x504e, 0x4f4d, 0x804c, 0x804b, 0x4e4a, 0x4d49, 0x8047,
-	0x4c46, 0x8045, 0x8043, 0x803c, 0x803a, 0x8039, 0x8036, 0x4b35,
-	0x8034, 0x4a33, 0x4932, 0x4831, 0x802e, 0x472d, 0x462c, 0x452b,
-	0x442a, 0x4329, 0x4227, 0x8026, 0x8025, 0x4123, 0x401f, 0x3f1e,
-	0x3e1d, 0x3d1b, 0x3c18, 0x8017, 0x8010, 0x3b0f, 0x3a08, 0x8004,
-	0x3902, 0x8001, 0x8000, 0x8000, 0x3800, 0x3700, 0x3600, 0x8000,
-	0x3500, 0x8000, 0x8000, 0x8000, 0x3400, 0x8000, 0x8000, 0x8000,
-	0x8000, 0x8000, 0x8000, 0x3300, 0x3200, 0x8000, 0x8000, 0x8000,
-	0x8000, 0x8000, 0x8000, 0x3100, 0x3000, 0x8000, 0x8000, 0x2f00,
-	0x8000, 0x2e00, 0x2d00, 0x2c00, 0x8000, 0x8000, 0x8000, 0x2b00,
-	0x8000, 0x2a00, 0x2900, 0x2800, 0x8000, 0x2700, 0x2600, 0x2500,
-	0x2400, 0x2300, 0x2200, 0x8000, 0x8000, 0x2100, 0x2000, 0x1f00,
-	0x1e00, 0x1d00, 0x1c00, 0x8000, 0x8000, 0x1b00, 0x1a00, 0x8000,
-	0x1900, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x1800,
-	0x8000, 0x1700, 0x1600, 0x1500, 0x8000, 0x1400, 0x1300, 0x1200,
-	0x1100, 0x1000, 0x0f00, 0x8000, 0x8000, 0x0e00, 0x0d00, 0x0c00,
-	0x0b00, 0x0a00, 0x0900, 0x8000, 0x8000, 0x0800, 0x0700, 0x8000,
-	0x0600, 0x8000, 0x8000, 0x8000, 0x0500, 0x0400, 0x0300, 0x8000,
-	0x0200, 0x8000, 0x8000, 0x8000, 0x0100, 0x8000, 0x8000, 0x8000,
-	0x8000, 0x8000, 0x8000, 0x0000, 0x8000, 0x8000, 0x8000, 0x8000,
+	0x0070, 0x080c, 0x538d, 0xd0c4, 0x0138, 0x0030, 0x9006, 0x2020,
+	0x2009, 0x002d, 0x080c, 0xd273, 0x20a9, 0x0800, 0x9016, 0x0026,
+	0x928e, 0x007e, 0x0904, 0x30c9, 0x928e, 0x007f, 0x0904, 0x30c9,
+	0x928e, 0x0080, 0x05f0, 0x9288, 0x1000, 0x210c, 0x81ff, 0x05c8,
+	0x8fff, 0x1150, 0x2001, 0x195f, 0x0006, 0x2003, 0x0001, 0x080c,
+	0x30dc, 0x000e, 0x2003, 0x0000, 0x00b6, 0x00c6, 0x2158, 0x2001,
+	0x0001, 0x080c, 0x6631, 0x00ce, 0x00be, 0x2019, 0x0029, 0x080c,
+	0x863b, 0x0076, 0x2039, 0x0000, 0x080c, 0x852a, 0x00b6, 0x00c6,
+	0x0026, 0x2158, 0xba04, 0x9294, 0x00ff, 0x9286, 0x0006, 0x1118,
+	0xb807, 0x0404, 0x0028, 0x2001, 0x0004, 0x8007, 0x9215, 0xba06,
+	0x002e, 0x00ce, 0x00be, 0x0016, 0x2c08, 0x080c, 0xcfc8, 0x001e,
+	0x007e, 0x002e, 0x8210, 0x1f04, 0x307f, 0x002e, 0x82ff, 0x0110,
+	0x080c, 0x98e4, 0x015e, 0x001e, 0x002e, 0x003e, 0x004e, 0x00be,
+	0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0046, 0x0026, 0x0016, 0x080c,
+	0x538d, 0xd0c4, 0x0140, 0xd0a4, 0x0130, 0x9006, 0x2220, 0x2009,
+	0x0029, 0x080c, 0xd273, 0x001e, 0x002e, 0x004e, 0x0005, 0x0016,
+	0x0026, 0x0036, 0x00c6, 0x7290, 0x82ff, 0x01e8, 0x080c, 0x665f,
+	0x11d0, 0x2100, 0x080c, 0x2457, 0x81ff, 0x01b8, 0x2019, 0x0001,
+	0x8314, 0x92e0, 0x1d80, 0x2c04, 0xd384, 0x0120, 0x9084, 0xff00,
+	0x8007, 0x0010, 0x9084, 0x00ff, 0x9116, 0x0138, 0x9096, 0x00ff,
+	0x0110, 0x8318, 0x0c68, 0x9085, 0x0001, 0x00ce, 0x003e, 0x002e,
+	0x001e, 0x0005, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x0066,
+	0x9036, 0x080c, 0x98c8, 0x1110, 0x2031, 0x0001, 0x0066, 0x0036,
+	0x2019, 0x0029, 0x00d9, 0x003e, 0x006e, 0x86ff, 0x0110, 0x080c,
+	0x98e4, 0x006e, 0x9180, 0x1000, 0x2004, 0x9065, 0x0158, 0x0016,
+	0x00c6, 0x2061, 0x1b02, 0x001e, 0x6112, 0x080c, 0x3006, 0x001e,
+	0x080c, 0x6234, 0x012e, 0x00ce, 0x001e, 0x0005, 0x0016, 0x0026,
+	0x2110, 0x080c, 0x94f4, 0x080c, 0xd529, 0x002e, 0x001e, 0x0005,
+	0x2001, 0x1836, 0x2004, 0xd0cc, 0x0005, 0x00c6, 0x00b6, 0x080c,
+	0x70b7, 0x1118, 0x20a9, 0x0800, 0x0010, 0x20a9, 0x0782, 0x080c,
+	0x70b7, 0x1110, 0x900e, 0x0010, 0x2009, 0x007e, 0x9180, 0x1000,
+	0x2004, 0x905d, 0x0130, 0x86ff, 0x0110, 0xb800, 0xd0bc, 0x090c,
+	0x6234, 0x8108, 0x1f04, 0x3166, 0x2061, 0x1800, 0x607b, 0x0000,
+	0x607c, 0x9084, 0x00ff, 0x607e, 0x60af, 0x0000, 0x00be, 0x00ce,
+	0x0005, 0x2001, 0x1875, 0x2004, 0xd0bc, 0x0005, 0x2011, 0x1854,
+	0x2214, 0xd2ec, 0x0005, 0x7eef, 0x7de8, 0x7ce4, 0x80e2, 0x7be1,
+	0x80e0, 0x80dc, 0x80da, 0x7ad9, 0x80d6, 0x80d5, 0x80d4, 0x80d3,
+	0x80d2, 0x80d1, 0x79ce, 0x78cd, 0x80cc, 0x80cb, 0x80ca, 0x80c9,
+	0x80c7, 0x80c6, 0x77c5, 0x76c3, 0x80bc, 0x80ba, 0x75b9, 0x80b6,
+	0x74b5, 0x73b4, 0x72b3, 0x80b2, 0x80b1, 0x80ae, 0x71ad, 0x80ac,
+	0x70ab, 0x6faa, 0x6ea9, 0x80a7, 0x6da6, 0x6ca5, 0x6ba3, 0x6a9f,
+	0x699e, 0x689d, 0x809b, 0x8098, 0x6797, 0x6690, 0x658f, 0x6488,
+	0x6384, 0x6282, 0x8081, 0x8080, 0x617c, 0x607a, 0x8079, 0x5f76,
+	0x8075, 0x8074, 0x8073, 0x8072, 0x8071, 0x806e, 0x5e6d, 0x806c,
+	0x5d6b, 0x5c6a, 0x5b69, 0x8067, 0x5a66, 0x5965, 0x5863, 0x575c,
+	0x565a, 0x5559, 0x8056, 0x8055, 0x5454, 0x5353, 0x5252, 0x5151,
+	0x504e, 0x4f4d, 0x804c, 0x804b, 0x4e4a, 0x4d49, 0x8047, 0x4c46,
+	0x8045, 0x8043, 0x803c, 0x803a, 0x8039, 0x8036, 0x4b35, 0x8034,
+	0x4a33, 0x4932, 0x4831, 0x802e, 0x472d, 0x462c, 0x452b, 0x442a,
+	0x4329, 0x4227, 0x8026, 0x8025, 0x4123, 0x401f, 0x3f1e, 0x3e1d,
+	0x3d1b, 0x3c18, 0x8017, 0x8010, 0x3b0f, 0x3a08, 0x8004, 0x3902,
+	0x8001, 0x8000, 0x8000, 0x3800, 0x3700, 0x3600, 0x8000, 0x3500,
+	0x8000, 0x8000, 0x8000, 0x3400, 0x8000, 0x8000, 0x8000, 0x8000,
+	0x8000, 0x8000, 0x3300, 0x3200, 0x8000, 0x8000, 0x8000, 0x8000,
+	0x8000, 0x8000, 0x3100, 0x3000, 0x8000, 0x8000, 0x2f00, 0x8000,
+	0x2e00, 0x2d00, 0x2c00, 0x8000, 0x8000, 0x8000, 0x2b00, 0x8000,
+	0x2a00, 0x2900, 0x2800, 0x8000, 0x2700, 0x2600, 0x2500, 0x2400,
+	0x2300, 0x2200, 0x8000, 0x8000, 0x2100, 0x2000, 0x1f00, 0x1e00,
+	0x1d00, 0x1c00, 0x8000, 0x8000, 0x1b00, 0x1a00, 0x8000, 0x1900,
+	0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x1800, 0x8000,
+	0x1700, 0x1600, 0x1500, 0x8000, 0x1400, 0x1300, 0x1200, 0x1100,
+	0x1000, 0x0f00, 0x8000, 0x8000, 0x0e00, 0x0d00, 0x0c00, 0x0b00,
+	0x0a00, 0x0900, 0x8000, 0x8000, 0x0800, 0x0700, 0x8000, 0x0600,
+	0x8000, 0x8000, 0x8000, 0x0500, 0x0400, 0x0300, 0x8000, 0x0200,
+	0x8000, 0x8000, 0x8000, 0x0100, 0x8000, 0x8000, 0x8000, 0x8000,
+	0x8000, 0x8000, 0x0000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
 	0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
-	0x8000, 0x8000, 0x8000, 0x8000, 0x2071, 0x1894, 0x7003, 0x0002,
-	0x9006, 0x7016, 0x701a, 0x704a, 0x704e, 0x700e, 0x7042, 0x7046,
-	0x703b, 0x18b0, 0x703f, 0x18b0, 0x7007, 0x0001, 0x080c, 0x103b,
-	0x090c, 0x0d65, 0x2900, 0x706a, 0xa867, 0x0002, 0xa8ab, 0xdcb0,
-	0x080c, 0x103b, 0x090c, 0x0d65, 0x2900, 0x706e, 0xa867, 0x0002,
-	0xa8ab, 0xdcb0, 0x0005, 0x2071, 0x1894, 0x7004, 0x0002, 0x32b3,
-	0x32b4, 0x32c7, 0x32db, 0x0005, 0x1004, 0x32c4, 0x0e04, 0x32c4,
-	0x2079, 0x0000, 0x0126, 0x2091, 0x8000, 0x700c, 0x9005, 0x1128,
-	0x700f, 0x0001, 0x012e, 0x0468, 0x0005, 0x012e, 0x0ce8, 0x2079,
-	0x0000, 0x2061, 0x18ae, 0x2c4c, 0xa86c, 0x908e, 0x0100, 0x0128,
-	0x9086, 0x0200, 0x0904, 0x33af, 0x0005, 0x7018, 0x2048, 0x2061,
-	0x1800, 0x701c, 0x0807, 0x7014, 0x2048, 0xa864, 0x9094, 0x00ff,
-	0x9296, 0x0029, 0x1120, 0xaa78, 0xd2fc, 0x0128, 0x0005, 0x9086,
-	0x0103, 0x0108, 0x0005, 0x2079, 0x0000, 0x2061, 0x1800, 0x701c,
-	0x0807, 0x2061, 0x1800, 0x7880, 0x908a, 0x0040, 0x1210, 0x61cc,
-	0x0042, 0x2100, 0x908a, 0x003f, 0x1a04, 0x33ac, 0x61cc, 0x0804,
-	0x3341, 0x3383, 0x33bb, 0x33c5, 0x33c9, 0x33d3, 0x33d9, 0x33dd,
-	0x33ed, 0x33f0, 0x33fa, 0x33ff, 0x3404, 0x340f, 0x341a, 0x3429,
-	0x3438, 0x3446, 0x345d, 0x3478, 0x33ac, 0x3521, 0x355f, 0x3604,
-	0x3615, 0x3638, 0x33ac, 0x33ac, 0x33ac, 0x3670, 0x3690, 0x3699,
-	0x36c5, 0x36cb, 0x33ac, 0x3711, 0x33ac, 0x33ac, 0x33ac, 0x33ac,
-	0x33ac, 0x371c, 0x3725, 0x372d, 0x372f, 0x33ac, 0x33ac, 0x33ac,
-	0x33ac, 0x33ac, 0x33ac, 0x375f, 0x33ac, 0x33ac, 0x33ac, 0x33ac,
-	0x33ac, 0x377c, 0x37d7, 0x33ac, 0x33ac, 0x33ac, 0x33ac, 0x33ac,
-	0x33ac, 0x0002, 0x3801, 0x3804, 0x3863, 0x387c, 0x38ac, 0x3b4e,
-	0x33ac, 0x4f57, 0x33ac, 0x33ac, 0x33ac, 0x33ac, 0x33ac, 0x33ac,
-	0x33ac, 0x33ac, 0x33fa, 0x33ff, 0x404d, 0x53aa, 0x4063, 0x4fe6,
-	0x5037, 0x513a, 0x33ac, 0x519c, 0x51d8, 0x5209, 0x5315, 0x5236,
-	0x5295, 0x33ac, 0x4067, 0x41f7, 0x420d, 0x4232, 0x4297, 0x430b,
-	0x432b, 0x43a2, 0x43fe, 0x445a, 0x445d, 0x4482, 0x44f5, 0x455f,
-	0x4567, 0x4699, 0x47fb, 0x482f, 0x4a79, 0x33ac, 0x4a97, 0x4b5a,
-	0x4c30, 0x33ac, 0x33ac, 0x33ac, 0x33ac, 0x4c96, 0x4cb1, 0x4567,
-	0x4ef7, 0x714c, 0x0000, 0x2021, 0x4000, 0x080c, 0x48ad, 0x0126,
-	0x2091, 0x8000, 0x0e04, 0x338d, 0x0010, 0x012e, 0x0cc0, 0x7c36,
-	0x9486, 0x4000, 0x0118, 0x7833, 0x0011, 0x0010, 0x7833, 0x0010,
-	0x7c82, 0x7986, 0x7a8a, 0x7b8e, 0x2091, 0x4080, 0x2001, 0x0089,
-	0x2004, 0xd084, 0x190c, 0x11be, 0x7007, 0x0001, 0x2091, 0x5000,
-	0x700f, 0x0000, 0x012e, 0x0005, 0x2021, 0x4001, 0x08b0, 0x2021,
-	0x4002, 0x0898, 0x2021, 0x4003, 0x0880, 0x2021, 0x4005, 0x0868,
-	0x2021, 0x4006, 0x0850, 0x2039, 0x0001, 0x902e, 0x2520, 0x7b88,
-	0x7a8c, 0x7884, 0x7990, 0x0804, 0x48ba, 0x7883, 0x0004, 0x7884,
-	0x0807, 0x2039, 0x0001, 0x902e, 0x2520, 0x7b88, 0x7a8c, 0x7884,
-	0x7990, 0x0804, 0x48bd, 0x7984, 0x7888, 0x2114, 0x200a, 0x0804,
-	0x3383, 0x7984, 0x2114, 0x0804, 0x3383, 0x20e1, 0x0000, 0x2099,
-	0x0021, 0x20e9, 0x0000, 0x20a1, 0x0021, 0x20a9, 0x001f, 0x4003,
-	0x7984, 0x7a88, 0x7b8c, 0x0804, 0x3383, 0x7884, 0x2060, 0x04d8,
-	0x2009, 0x0003, 0x2011, 0x0002, 0x2019, 0x001a, 0x789b, 0x0317,
-	0x0804, 0x3383, 0x2039, 0x0001, 0x7d98, 0x7c9c, 0x0800, 0x2039,
-	0x0001, 0x7d98, 0x7c9c, 0x0848, 0x79a0, 0x9182, 0x0040, 0x0210,
-	0x0804, 0x33b8, 0x2138, 0x7d98, 0x7c9c, 0x0804, 0x33bf, 0x79a0,
-	0x9182, 0x0040, 0x0210, 0x0804, 0x33b8, 0x2138, 0x7d98, 0x7c9c,
-	0x0804, 0x33cd, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x33b8,
-	0x21e8, 0x7984, 0x7888, 0x20a9, 0x0001, 0x21a0, 0x4004, 0x0804,
-	0x3383, 0x2061, 0x0800, 0xe10c, 0x9006, 0x2c15, 0x9200, 0x8c60,
-	0x8109, 0x1dd8, 0x2010, 0x9005, 0x0904, 0x3383, 0x0804, 0x33b2,
-	0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x33b8, 0x21e0, 0x20a9,
-	0x0001, 0x7984, 0x2198, 0x4012, 0x0804, 0x3383, 0x2069, 0x1853,
-	0x7884, 0x7990, 0x911a, 0x1a04, 0x33b8, 0x8019, 0x0904, 0x33b8,
-	0x684a, 0x6942, 0x788c, 0x6852, 0x7888, 0x6856, 0x9006, 0x685a,
-	0x685e, 0x080c, 0x73dd, 0x0804, 0x3383, 0x2069, 0x1853, 0x7884,
-	0x7994, 0x911a, 0x1a04, 0x33b8, 0x8019, 0x0904, 0x33b8, 0x684e,
-	0x6946, 0x788c, 0x6862, 0x7888, 0x6866, 0x9006, 0x686a, 0x686e,
-	0x0126, 0x2091, 0x8000, 0x080c, 0x6762, 0x012e, 0x0804, 0x3383,
-	0x902e, 0x2520, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x33b5,
-	0x7984, 0x7b88, 0x7a8c, 0x20a9, 0x0005, 0x20e9, 0x0001, 0x20a1,
-	0x189c, 0x4101, 0x080c, 0x4871, 0x1120, 0x2009, 0x0002, 0x0804,
-	0x33b5, 0x2009, 0x0020, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c,
-	0x48ba, 0x701f, 0x349c, 0x0005, 0xa864, 0x2008, 0x9084, 0x00ff,
-	0x9096, 0x0011, 0x0168, 0x9096, 0x0019, 0x0150, 0x9096, 0x0015,
-	0x0138, 0x9096, 0x0048, 0x0120, 0x9096, 0x0029, 0x1904, 0x33b5,
-	0x810f, 0x918c, 0x00ff, 0x0904, 0x33b5, 0x7112, 0x7010, 0x8001,
-	0x0560, 0x7012, 0x080c, 0x4871, 0x1120, 0x2009, 0x0002, 0x0804,
-	0x33b5, 0x2009, 0x0020, 0x7068, 0x2040, 0xa28c, 0xa390, 0xa494,
-	0xa598, 0x9290, 0x0040, 0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9,
-	0x0000, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, 0x48ba, 0x701f,
-	0x34da, 0x0005, 0xa864, 0x9084, 0x00ff, 0x9096, 0x0002, 0x0120,
-	0x9096, 0x000a, 0x1904, 0x33b5, 0x0888, 0x7014, 0x2048, 0xa868,
-	0xc0fd, 0xa86a, 0xa864, 0x9084, 0x00ff, 0x9096, 0x0029, 0x1160,
-	0xc2fd, 0xaa7a, 0x080c, 0x5ddd, 0x0150, 0x0126, 0x2091, 0x8000,
-	0xa87a, 0xa982, 0x012e, 0x0050, 0x080c, 0x60f4, 0x1128, 0x7007,
-	0x0003, 0x701f, 0x3506, 0x0005, 0x080c, 0x6bac, 0x0126, 0x2091,
-	0x8000, 0x20a9, 0x0005, 0x20e1, 0x0001, 0x2099, 0x189c, 0x400a,
-	0x2100, 0x9210, 0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9, 0x0000,
-	0xa85c, 0x9080, 0x0019, 0x2009, 0x0020, 0x012e, 0xaf60, 0x0804,
-	0x48bd, 0x2091, 0x8000, 0x7837, 0x4000, 0x7833, 0x0010, 0x7883,
-	0x4000, 0x7887, 0x4953, 0x788b, 0x5020, 0x788f, 0x2020, 0x2009,
-	0x017f, 0x2104, 0x7892, 0x3f00, 0x7896, 0x2061, 0x0100, 0x6200,
-	0x2061, 0x0200, 0x603c, 0x8007, 0x9205, 0x789a, 0x2009, 0x04fd,
-	0x2104, 0x789e, 0x2091, 0x5000, 0x2091, 0x4080, 0x2001, 0x0089,
-	0x2004, 0xd084, 0x0180, 0x2001, 0x19f3, 0x2004, 0x9005, 0x0128,
-	0x2001, 0x008b, 0x2004, 0xd0fc, 0x0dd8, 0x2001, 0x008a, 0x2003,
-	0x0002, 0x2003, 0x1001, 0x2071, 0x0080, 0x0804, 0x0427, 0x81ff,
-	0x1904, 0x33b5, 0x7984, 0x080c, 0x6269, 0x1904, 0x33b8, 0x7e98,
-	0x9684, 0x3fff, 0x9082, 0x4000, 0x1a04, 0x33b8, 0x7c88, 0x7d8c,
-	0x080c, 0x649b, 0x080c, 0x642c, 0x1518, 0x2061, 0x1ddc, 0x0126,
-	0x2091, 0x8000, 0x6000, 0x9086, 0x0000, 0x0148, 0x6014, 0x904d,
-	0x0130, 0xa86c, 0x9406, 0x1118, 0xa870, 0x9506, 0x0150, 0x012e,
-	0x9ce0, 0x001c, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1a04, 0x33b5,
-	0x0c30, 0x080c, 0xb437, 0x012e, 0x0904, 0x33b5, 0x0804, 0x3383,
-	0x900e, 0x2001, 0x0005, 0x080c, 0x6bac, 0x0126, 0x2091, 0x8000,
-	0x080c, 0xbb30, 0x080c, 0x698f, 0x012e, 0x0804, 0x3383, 0x00a6,
-	0x2950, 0xb198, 0x080c, 0x6269, 0x1904, 0x35f1, 0xb6a4, 0x9684,
-	0x3fff, 0x9082, 0x4000, 0x16e8, 0xb49c, 0xb5a0, 0x080c, 0x649b,
-	0x080c, 0x6446, 0x1520, 0x2061, 0x1ddc, 0x0126, 0x2091, 0x8000,
-	0x6000, 0x9086, 0x0000, 0x0148, 0x6014, 0x904d, 0x0130, 0xa86c,
-	0x9406, 0x1118, 0xa870, 0x9506, 0x0158, 0x012e, 0x9ce0, 0x001c,
-	0x2001, 0x1819, 0x2004, 0x9c02, 0x2009, 0x000d, 0x12b0, 0x0c28,
-	0x080c, 0xb437, 0x012e, 0x2009, 0x0003, 0x0178, 0x00e0, 0x900e,
-	0x2001, 0x0005, 0x080c, 0x6bac, 0x0126, 0x2091, 0x8000, 0x080c,
-	0xbb30, 0x080c, 0x6983, 0x012e, 0x0070, 0xb097, 0x4005, 0xb19a,
-	0x0010, 0xb097, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030,
-	0x2a48, 0x00ae, 0x0005, 0xb097, 0x4000, 0x9006, 0x918d, 0x0001,
-	0x2008, 0x2a48, 0x00ae, 0x0005, 0x81ff, 0x1904, 0x33b5, 0x080c,
-	0x4888, 0x0904, 0x33b8, 0x080c, 0x6330, 0x0904, 0x33b5, 0x080c,
-	0x64a1, 0x0904, 0x33b5, 0x0804, 0x4322, 0x81ff, 0x1904, 0x33b5,
-	0x080c, 0x48a4, 0x0904, 0x33b8, 0x080c, 0x652f, 0x0904, 0x33b5,
-	0x2019, 0x0005, 0x79a8, 0x080c, 0x64bc, 0x0904, 0x33b5, 0x7888,
-	0x908a, 0x1000, 0x1a04, 0x33b8, 0x8003, 0x800b, 0x810b, 0x9108,
-	0x080c, 0x813f, 0x7984, 0xd184, 0x1904, 0x3383, 0x0804, 0x4322,
-	0x0126, 0x2091, 0x8000, 0x81ff, 0x0118, 0x2009, 0x0001, 0x0450,
-	0x2029, 0x07ff, 0x6458, 0x2400, 0x9506, 0x01f8, 0x2508, 0x080c,
-	0x6269, 0x11d8, 0x080c, 0x652f, 0x1128, 0x2009, 0x0002, 0x62bc,
-	0x2518, 0x00c0, 0x2019, 0x0004, 0x900e, 0x080c, 0x64bc, 0x1118,
-	0x2009, 0x0006, 0x0078, 0x7884, 0x908a, 0x1000, 0x1270, 0x8003,
-	0x800b, 0x810b, 0x9108, 0x080c, 0x813f, 0x8529, 0x1ae0, 0x012e,
-	0x0804, 0x3383, 0x012e, 0x0804, 0x33b5, 0x012e, 0x0804, 0x33b8,
-	0x080c, 0x4888, 0x0904, 0x33b8, 0x080c, 0x6330, 0x0904, 0x33b5,
-	0x080c, 0x98ad, 0xbaa0, 0x2019, 0x0005, 0x00c6, 0x9066, 0x080c,
-	0x8613, 0x0076, 0x903e, 0x080c, 0x8502, 0x900e, 0x080c, 0xcfa6,
-	0x007e, 0x00ce, 0x080c, 0x98c9, 0x080c, 0x649b, 0x0804, 0x3383,
-	0x080c, 0x4888, 0x0904, 0x33b8, 0x080c, 0x649b, 0x2208, 0x0804,
-	0x3383, 0x0156, 0x00d6, 0x00e6, 0x00c6, 0x2069, 0x1906, 0x6810,
-	0x6914, 0x910a, 0x1208, 0x900e, 0x6816, 0x9016, 0x901e, 0x2071,
-	0x19b8, 0x7028, 0x9065, 0x0118, 0x8210, 0x600c, 0x0cd8, 0x2300,
-	0x9218, 0x00ce, 0x00ee, 0x00de, 0x015e, 0x0804, 0x3383, 0x00f6,
-	0x0016, 0x907d, 0x0138, 0x9006, 0x8000, 0x2f0c, 0x81ff, 0x0110,
-	0x2178, 0x0cd0, 0x001e, 0x00fe, 0x0005, 0x2069, 0x1906, 0x6910,
-	0x62b8, 0x0804, 0x3383, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804,
-	0x33b5, 0x0126, 0x2091, 0x8000, 0x080c, 0x539a, 0x0128, 0x2009,
-	0x0007, 0x012e, 0x0804, 0x33b5, 0x012e, 0x6158, 0x9190, 0x3184,
-	0x2215, 0x9294, 0x00ff, 0x6378, 0x83ff, 0x0108, 0x627c, 0x67d8,
-	0x97c4, 0x000a, 0x98c6, 0x000a, 0x1118, 0x2031, 0x0001, 0x00e8,
-	0x97c4, 0x0022, 0x98c6, 0x0022, 0x1118, 0x2031, 0x0003, 0x00a8,
-	0x97c4, 0x0012, 0x98c6, 0x0012, 0x1118, 0x2031, 0x0002, 0x0068,
-	0x080c, 0x70ac, 0x1118, 0x2031, 0x0004, 0x0038, 0xd79c, 0x0120,
-	0x2009, 0x0005, 0x0804, 0x33b5, 0x9036, 0x7e9a, 0x7f9e, 0x0804,
-	0x3383, 0x6148, 0x624c, 0x2019, 0x1957, 0x231c, 0x2001, 0x1958,
-	0x2004, 0x789a, 0x0804, 0x3383, 0x0126, 0x2091, 0x8000, 0x6138,
-	0x623c, 0x6340, 0x012e, 0x0804, 0x3383, 0x080c, 0x48a4, 0x0904,
-	0x33b8, 0xba44, 0xbb38, 0x0804, 0x3383, 0x080c, 0x0d65, 0x080c,
-	0x48a4, 0x2110, 0x0904, 0x33b8, 0xb804, 0x908c, 0x00ff, 0x918e,
-	0x0006, 0x0140, 0x9084, 0xff00, 0x9086, 0x0600, 0x2009, 0x0009,
-	0x1904, 0x33b5, 0x0126, 0x2091, 0x8000, 0x2019, 0x0005, 0x00c6,
-	0x9066, 0x080c, 0x98ad, 0x080c, 0x94d9, 0x080c, 0x8613, 0x0076,
-	0x903e, 0x080c, 0x8502, 0x900e, 0x080c, 0xcfa6, 0x007e, 0x00ce,
-	0x080c, 0x98c9, 0xb807, 0x0407, 0x012e, 0x0804, 0x3383, 0x6148,
-	0x624c, 0x7884, 0x604a, 0x7b88, 0x634e, 0x2069, 0x1853, 0x831f,
-	0x9305, 0x6816, 0x788c, 0x2069, 0x1957, 0x2d1c, 0x206a, 0x7e98,
-	0x9682, 0x0014, 0x1210, 0x2031, 0x07d0, 0x2069, 0x1958, 0x2d04,
-	0x266a, 0x789a, 0x0804, 0x3383, 0x0126, 0x2091, 0x8000, 0x6138,
-	0x7884, 0x603a, 0x910e, 0xd1b4, 0x190c, 0x0eb4, 0xd0c4, 0x01a8,
-	0x00d6, 0x78a8, 0x2009, 0x196e, 0x200a, 0x78ac, 0x2011, 0x196f,
-	0x2012, 0x2069, 0x0100, 0x6838, 0x9086, 0x0007, 0x1118, 0x2214,
-	0x6a5a, 0x0010, 0x210c, 0x695a, 0x00de, 0x7888, 0x603e, 0x2011,
-	0x0116, 0x220c, 0x7888, 0xd08c, 0x0118, 0x918d, 0x0040, 0x0010,
-	0x918c, 0xff7f, 0x2112, 0x6140, 0x788c, 0x6042, 0x910e, 0xd1e4,
-	0x190c, 0x0ecf, 0x6040, 0xd0cc, 0x0120, 0x78b0, 0x2011, 0x0114,
-	0x2012, 0x012e, 0x0804, 0x3383, 0x00f6, 0x2079, 0x1800, 0x7a38,
-	0xa898, 0x9084, 0xfebf, 0x9215, 0xa89c, 0x9084, 0xfebf, 0x8002,
-	0x9214, 0x7838, 0x9084, 0x0140, 0x9215, 0x7a3a, 0xa897, 0x4000,
-	0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x00fe, 0x0005, 0x7898,
-	0x9005, 0x01a8, 0x7888, 0x9025, 0x0904, 0x33b8, 0x788c, 0x902d,
-	0x0904, 0x33b8, 0x900e, 0x080c, 0x6269, 0x1120, 0xba44, 0xbb38,
-	0xbc46, 0xbd3a, 0x9186, 0x07ff, 0x0190, 0x8108, 0x0ca0, 0x080c,
-	0x48a4, 0x0904, 0x33b8, 0x7888, 0x900d, 0x0904, 0x33b8, 0x788c,
-	0x9005, 0x0904, 0x33b8, 0xba44, 0xb946, 0xbb38, 0xb83a, 0x0804,
-	0x3383, 0x2011, 0xbc09, 0x0010, 0x2011, 0xbc05, 0x080c, 0x539a,
-	0x1904, 0x33b5, 0x00c6, 0x2061, 0x0100, 0x7984, 0x9186, 0x00ff,
-	0x1130, 0x2001, 0x1817, 0x2004, 0x9085, 0xff00, 0x0088, 0x9182,
-	0x007f, 0x16e0, 0x9188, 0x3184, 0x210d, 0x918c, 0x00ff, 0x2001,
-	0x1817, 0x2004, 0x0026, 0x9116, 0x002e, 0x0580, 0x810f, 0x9105,
-	0x0126, 0x2091, 0x8000, 0x0006, 0x080c, 0x9b76, 0x000e, 0x0510,
-	0x602e, 0x620a, 0x7984, 0x00b6, 0x080c, 0x620f, 0x2b08, 0x00be,
-	0x1500, 0x6112, 0x6023, 0x0001, 0x080c, 0x4871, 0x01d0, 0x9006,
-	0xa866, 0x7007, 0x0003, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x701f,
-	0x385c, 0x2900, 0x6016, 0x2009, 0x0032, 0x080c, 0x9c6a, 0x012e,
-	0x00ce, 0x0005, 0x012e, 0x00ce, 0x0804, 0x33b5, 0x00ce, 0x0804,
-	0x33b8, 0x080c, 0x9bcc, 0x0cb0, 0xa830, 0x9086, 0x0100, 0x0904,
-	0x33b5, 0x0804, 0x3383, 0x2061, 0x1a3f, 0x0126, 0x2091, 0x8000,
-	0x6000, 0xd084, 0x0170, 0x6104, 0x6208, 0x2061, 0x1800, 0x6350,
-	0x6070, 0x789a, 0x60bc, 0x789e, 0x60b8, 0x78aa, 0x012e, 0x0804,
-	0x3383, 0x900e, 0x2110, 0x0c88, 0x81ff, 0x1904, 0x33b5, 0x080c,
-	0x70ac, 0x0904, 0x33b5, 0x0126, 0x2091, 0x8000, 0x6250, 0x6070,
-	0x9202, 0x0248, 0x9085, 0x0001, 0x080c, 0x248d, 0x080c, 0x55b4,
-	0x012e, 0x0804, 0x3383, 0x012e, 0x0804, 0x33b8, 0x0006, 0x0016,
-	0x00c6, 0x00e6, 0x2001, 0x197a, 0x2070, 0x2061, 0x1853, 0x6008,
-	0x2072, 0x900e, 0x2011, 0x1400, 0x080c, 0x83f1, 0x7206, 0x00ee,
-	0x00ce, 0x001e, 0x000e, 0x0005, 0x0126, 0x2091, 0x8000, 0x81ff,
-	0x0128, 0x012e, 0x2021, 0x400b, 0x0804, 0x3385, 0x7884, 0xd0fc,
-	0x0148, 0x2001, 0x002a, 0x2004, 0x9082, 0x00e1, 0x0288, 0x012e,
-	0x0804, 0x33b8, 0x2001, 0x002a, 0x2004, 0x2069, 0x1853, 0x6908,
-	0x9102, 0x1230, 0x012e, 0x0804, 0x33b8, 0x012e, 0x0804, 0x33b5,
-	0x080c, 0x9b4b, 0x0dd0, 0x7884, 0xd0fc, 0x0904, 0x3927, 0x00c6,
-	0x080c, 0x4871, 0x00ce, 0x0d88, 0xa867, 0x0000, 0x7884, 0xa80a,
-	0x7898, 0xa80e, 0x789c, 0xa812, 0x2001, 0x002e, 0x2004, 0xa81a,
-	0x2001, 0x002f, 0x2004, 0xa81e, 0x2001, 0x0030, 0x2004, 0xa822,
-	0x2001, 0x0031, 0x2004, 0xa826, 0x2001, 0x0034, 0x2004, 0xa82a,
-	0x2001, 0x0035, 0x2004, 0xa82e, 0x2001, 0x002a, 0x2004, 0x9080,
-	0x0003, 0x9084, 0x00fc, 0x8004, 0xa816, 0x080c, 0x3ab1, 0x0928,
-	0x7014, 0x2048, 0xad2c, 0xac28, 0xab1c, 0xaa18, 0xa930, 0xa808,
-	0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021, 0x0000, 0x8906, 0x8006,
-	0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, 0x080c,
-	0x48ba, 0x701f, 0x39ee, 0x7023, 0x0001, 0x012e, 0x0005, 0x080c,
-	0x98ad, 0x0046, 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6,
-	0x00e6, 0x00f6, 0x080c, 0x3896, 0x2001, 0x1970, 0x2003, 0x0000,
-	0x2021, 0x000a, 0x2061, 0x0100, 0x6104, 0x0016, 0x60bb, 0x0000,
-	0x60bf, 0x32e1, 0x60bf, 0x0012, 0x080c, 0x3b20, 0x080c, 0x3adf,
-	0x00f6, 0x00e6, 0x0086, 0x2940, 0x2071, 0x19b8, 0x2079, 0x0090,
-	0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0140, 0x2001, 0x0035,
-	0x2004, 0x780e, 0x2001, 0x0034, 0x2004, 0x780a, 0x00de, 0x2011,
-	0x0001, 0x080c, 0x3e91, 0x008e, 0x00ee, 0x00fe, 0x080c, 0x3dbe,
-	0x080c, 0x3ceb, 0x05b8, 0x2001, 0x020b, 0x2004, 0x9084, 0x0140,
-	0x1db8, 0x080c, 0x3f05, 0x00f6, 0x2079, 0x0300, 0x78bc, 0x00fe,
-	0x908c, 0x0070, 0x1560, 0x2071, 0x0200, 0x7037, 0x0000, 0x7050,
-	0x9084, 0xff00, 0x9086, 0x3200, 0x1510, 0x7037, 0x0001, 0x7050,
-	0x9084, 0xff00, 0x9086, 0xe100, 0x11d0, 0x7037, 0x0000, 0x7054,
-	0x7037, 0x0000, 0x715c, 0x9106, 0x1190, 0x2001, 0x181f, 0x2004,
-	0x9106, 0x1168, 0x00c6, 0x2061, 0x0100, 0x6024, 0x9084, 0x1e00,
-	0x00ce, 0x0138, 0x080c, 0x3cf5, 0x080c, 0x3ada, 0x0058, 0x080c,
-	0x3ada, 0x080c, 0x3e29, 0x080c, 0x3db4, 0x2001, 0x020b, 0x2004,
-	0xd0e4, 0x0dd8, 0x2001, 0x032a, 0x2003, 0x0004, 0x2061, 0x0100,
-	0x6027, 0x0002, 0x001e, 0x6106, 0x2011, 0x020d, 0x2013, 0x0020,
-	0x60bb, 0x0000, 0x60bf, 0x0108, 0x60bf, 0x0012, 0x2001, 0x0004,
-	0x200c, 0x918c, 0xfffd, 0x2102, 0x080c, 0x12d6, 0x2009, 0x0028,
-	0x080c, 0x2052, 0x2001, 0x0227, 0x200c, 0x2102, 0x080c, 0x98c9,
-	0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e,
-	0x004e, 0x2001, 0x1970, 0x2004, 0x9005, 0x1118, 0x012e, 0x0804,
-	0x3383, 0x012e, 0x2021, 0x400c, 0x0804, 0x3385, 0x0016, 0x0026,
-	0x0036, 0x0046, 0x0056, 0x0076, 0x0086, 0x0096, 0x00d6, 0x0156,
-	0x7014, 0x2048, 0x7020, 0x20a8, 0x8000, 0x7022, 0xa804, 0x9005,
-	0x0904, 0x3a4a, 0x2048, 0x1f04, 0x39fe, 0x7068, 0x2040, 0xa28c,
-	0xa390, 0xa494, 0xa598, 0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029,
-	0x0000, 0x2021, 0x0000, 0x0096, 0x7014, 0x2048, 0xa864, 0x009e,
-	0x9086, 0x0103, 0x0170, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f,
-	0x9084, 0xffc0, 0x9080, 0x001b, 0x080c, 0x48ba, 0x701f, 0x39ee,
-	0x00b0, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0,
-	0x9080, 0x001b, 0x21a8, 0x27e0, 0x2098, 0x27e8, 0x20a0, 0x0006,
-	0x080c, 0x0f9f, 0x000e, 0x080c, 0x48bd, 0x701f, 0x39ee, 0x015e,
-	0x00de, 0x009e, 0x008e, 0x007e, 0x005e, 0x004e, 0x003e, 0x002e,
-	0x001e, 0x0005, 0x7014, 0x2048, 0xa864, 0x9086, 0x0103, 0x1118,
-	0x701f, 0x3aaf, 0x0450, 0x7014, 0x2048, 0xa868, 0xc0fd, 0xa86a,
-	0x2009, 0x007f, 0x080c, 0x6209, 0x0110, 0x9006, 0x0030, 0xb813,
-	0x00ff, 0xb817, 0xfffd, 0x080c, 0xbd0f, 0x015e, 0x00de, 0x009e,
-	0x008e, 0x007e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, 0x0904,
-	0x33b5, 0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0076, 0x0086,
-	0x0096, 0x00d6, 0x0156, 0x701f, 0x3a81, 0x7007, 0x0003, 0x0804,
-	0x3a3f, 0xa830, 0x9086, 0x0100, 0x2021, 0x400c, 0x0904, 0x3385,
-	0x0076, 0xad10, 0xac0c, 0xab24, 0xaa20, 0xa930, 0xa808, 0xd0b4,
+	0x8000, 0x8000, 0x8000, 0x2071, 0x1894, 0x7003, 0x0002, 0x9006,
+	0x7016, 0x701a, 0x704a, 0x704e, 0x700e, 0x7042, 0x7046, 0x703b,
+	0x18b0, 0x703f, 0x18b0, 0x7007, 0x0001, 0x080c, 0x103b, 0x090c,
+	0x0d65, 0x2900, 0x706a, 0xa867, 0x0002, 0xa8ab, 0xdcb0, 0x080c,
+	0x103b, 0x090c, 0x0d65, 0x2900, 0x706e, 0xa867, 0x0002, 0xa8ab,
+	0xdcb0, 0x0005, 0x2071, 0x1894, 0x7004, 0x0002, 0x32ba, 0x32bb,
+	0x32ce, 0x32e2, 0x0005, 0x1004, 0x32cb, 0x0e04, 0x32cb, 0x2079,
+	0x0000, 0x0126, 0x2091, 0x8000, 0x700c, 0x9005, 0x1128, 0x700f,
+	0x0001, 0x012e, 0x0468, 0x0005, 0x012e, 0x0ce8, 0x2079, 0x0000,
+	0x2061, 0x18ae, 0x2c4c, 0xa86c, 0x908e, 0x0100, 0x0128, 0x9086,
+	0x0200, 0x0904, 0x33b6, 0x0005, 0x7018, 0x2048, 0x2061, 0x1800,
+	0x701c, 0x0807, 0x7014, 0x2048, 0xa864, 0x9094, 0x00ff, 0x9296,
+	0x0029, 0x1120, 0xaa78, 0xd2fc, 0x0128, 0x0005, 0x9086, 0x0103,
+	0x0108, 0x0005, 0x2079, 0x0000, 0x2061, 0x1800, 0x701c, 0x0807,
+	0x2061, 0x1800, 0x7880, 0x908a, 0x0040, 0x1210, 0x61cc, 0x0042,
+	0x2100, 0x908a, 0x003f, 0x1a04, 0x33b3, 0x61cc, 0x0804, 0x3348,
+	0x338a, 0x33c2, 0x33cc, 0x33d0, 0x33da, 0x33e0, 0x33e4, 0x33f4,
+	0x33f7, 0x3401, 0x3406, 0x340b, 0x3416, 0x3421, 0x3430, 0x343f,
+	0x344d, 0x3464, 0x347f, 0x33b3, 0x3528, 0x3566, 0x360b, 0x361c,
+	0x363f, 0x33b3, 0x33b3, 0x33b3, 0x3677, 0x3697, 0x36a0, 0x36cc,
+	0x36d2, 0x33b3, 0x3718, 0x33b3, 0x33b3, 0x33b3, 0x33b3, 0x33b3,
+	0x3723, 0x372c, 0x3734, 0x3736, 0x33b3, 0x33b3, 0x33b3, 0x33b3,
+	0x33b3, 0x33b3, 0x3766, 0x33b3, 0x33b3, 0x33b3, 0x33b3, 0x33b3,
+	0x3783, 0x37de, 0x33b3, 0x33b3, 0x33b3, 0x33b3, 0x33b3, 0x33b3,
+	0x0002, 0x3808, 0x380b, 0x386a, 0x3883, 0x38b3, 0x3b55, 0x33b3,
+	0x4f5e, 0x33b3, 0x33b3, 0x33b3, 0x33b3, 0x33b3, 0x33b3, 0x33b3,
+	0x33b3, 0x3401, 0x3406, 0x4054, 0x53b1, 0x406a, 0x4fed, 0x503e,
+	0x5141, 0x33b3, 0x51a3, 0x51df, 0x5210, 0x531c, 0x523d, 0x529c,
+	0x33b3, 0x406e, 0x41fe, 0x4214, 0x4239, 0x429e, 0x4312, 0x4332,
+	0x43a9, 0x4405, 0x4461, 0x4464, 0x4489, 0x44fc, 0x4566, 0x456e,
+	0x46a0, 0x4802, 0x4836, 0x4a80, 0x33b3, 0x4a9e, 0x4b61, 0x4c37,
+	0x33b3, 0x33b3, 0x33b3, 0x33b3, 0x4c9d, 0x4cb8, 0x456e, 0x4efe,
+	0x714c, 0x0000, 0x2021, 0x4000, 0x080c, 0x48b4, 0x0126, 0x2091,
+	0x8000, 0x0e04, 0x3394, 0x0010, 0x012e, 0x0cc0, 0x7c36, 0x9486,
+	0x4000, 0x0118, 0x7833, 0x0011, 0x0010, 0x7833, 0x0010, 0x7c82,
+	0x7986, 0x7a8a, 0x7b8e, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
+	0xd084, 0x190c, 0x11be, 0x7007, 0x0001, 0x2091, 0x5000, 0x700f,
+	0x0000, 0x012e, 0x0005, 0x2021, 0x4001, 0x08b0, 0x2021, 0x4002,
+	0x0898, 0x2021, 0x4003, 0x0880, 0x2021, 0x4005, 0x0868, 0x2021,
+	0x4006, 0x0850, 0x2039, 0x0001, 0x902e, 0x2520, 0x7b88, 0x7a8c,
+	0x7884, 0x7990, 0x0804, 0x48c1, 0x7883, 0x0004, 0x7884, 0x0807,
+	0x2039, 0x0001, 0x902e, 0x2520, 0x7b88, 0x7a8c, 0x7884, 0x7990,
+	0x0804, 0x48c4, 0x7984, 0x7888, 0x2114, 0x200a, 0x0804, 0x338a,
+	0x7984, 0x2114, 0x0804, 0x338a, 0x20e1, 0x0000, 0x2099, 0x0021,
+	0x20e9, 0x0000, 0x20a1, 0x0021, 0x20a9, 0x001f, 0x4003, 0x7984,
+	0x7a88, 0x7b8c, 0x0804, 0x338a, 0x7884, 0x2060, 0x04d8, 0x2009,
+	0x0003, 0x2011, 0x0002, 0x2019, 0x001c, 0x789b, 0x0317, 0x0804,
+	0x338a, 0x2039, 0x0001, 0x7d98, 0x7c9c, 0x0800, 0x2039, 0x0001,
+	0x7d98, 0x7c9c, 0x0848, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804,
+	0x33bf, 0x2138, 0x7d98, 0x7c9c, 0x0804, 0x33c6, 0x79a0, 0x9182,
+	0x0040, 0x0210, 0x0804, 0x33bf, 0x2138, 0x7d98, 0x7c9c, 0x0804,
+	0x33d4, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x33bf, 0x21e8,
+	0x7984, 0x7888, 0x20a9, 0x0001, 0x21a0, 0x4004, 0x0804, 0x338a,
+	0x2061, 0x0800, 0xe10c, 0x9006, 0x2c15, 0x9200, 0x8c60, 0x8109,
+	0x1dd8, 0x2010, 0x9005, 0x0904, 0x338a, 0x0804, 0x33b9, 0x79a0,
+	0x9182, 0x0040, 0x0210, 0x0804, 0x33bf, 0x21e0, 0x20a9, 0x0001,
+	0x7984, 0x2198, 0x4012, 0x0804, 0x338a, 0x2069, 0x1853, 0x7884,
+	0x7990, 0x911a, 0x1a04, 0x33bf, 0x8019, 0x0904, 0x33bf, 0x684a,
+	0x6942, 0x788c, 0x6852, 0x7888, 0x6856, 0x9006, 0x685a, 0x685e,
+	0x080c, 0x73e8, 0x0804, 0x338a, 0x2069, 0x1853, 0x7884, 0x7994,
+	0x911a, 0x1a04, 0x33bf, 0x8019, 0x0904, 0x33bf, 0x684e, 0x6946,
+	0x788c, 0x6862, 0x7888, 0x6866, 0x9006, 0x686a, 0x686e, 0x0126,
+	0x2091, 0x8000, 0x080c, 0x6769, 0x012e, 0x0804, 0x338a, 0x902e,
+	0x2520, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x33bc, 0x7984,
+	0x7b88, 0x7a8c, 0x20a9, 0x0005, 0x20e9, 0x0001, 0x20a1, 0x189c,
+	0x4101, 0x080c, 0x4878, 0x1120, 0x2009, 0x0002, 0x0804, 0x33bc,
+	0x2009, 0x0020, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, 0x48c1,
+	0x701f, 0x34a3, 0x0005, 0xa864, 0x2008, 0x9084, 0x00ff, 0x9096,
+	0x0011, 0x0168, 0x9096, 0x0019, 0x0150, 0x9096, 0x0015, 0x0138,
+	0x9096, 0x0048, 0x0120, 0x9096, 0x0029, 0x1904, 0x33bc, 0x810f,
+	0x918c, 0x00ff, 0x0904, 0x33bc, 0x7112, 0x7010, 0x8001, 0x0560,
+	0x7012, 0x080c, 0x4878, 0x1120, 0x2009, 0x0002, 0x0804, 0x33bc,
+	0x2009, 0x0020, 0x7068, 0x2040, 0xa28c, 0xa390, 0xa494, 0xa598,
+	0x9290, 0x0040, 0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9, 0x0000,
+	0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c, 0x48c1, 0x701f, 0x34e1,
+	0x0005, 0xa864, 0x9084, 0x00ff, 0x9096, 0x0002, 0x0120, 0x9096,
+	0x000a, 0x1904, 0x33bc, 0x0888, 0x7014, 0x2048, 0xa868, 0xc0fd,
+	0xa86a, 0xa864, 0x9084, 0x00ff, 0x9096, 0x0029, 0x1160, 0xc2fd,
+	0xaa7a, 0x080c, 0x5de4, 0x0150, 0x0126, 0x2091, 0x8000, 0xa87a,
+	0xa982, 0x012e, 0x0050, 0x080c, 0x60fb, 0x1128, 0x7007, 0x0003,
+	0x701f, 0x350d, 0x0005, 0x080c, 0x6bb3, 0x0126, 0x2091, 0x8000,
+	0x20a9, 0x0005, 0x20e1, 0x0001, 0x2099, 0x189c, 0x400a, 0x2100,
+	0x9210, 0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9, 0x0000, 0xa85c,
+	0x9080, 0x0019, 0x2009, 0x0020, 0x012e, 0xaf60, 0x0804, 0x48c4,
+	0x2091, 0x8000, 0x7837, 0x4000, 0x7833, 0x0010, 0x7883, 0x4000,
+	0x7887, 0x4953, 0x788b, 0x5020, 0x788f, 0x2020, 0x2009, 0x017f,
+	0x2104, 0x7892, 0x3f00, 0x7896, 0x2061, 0x0100, 0x6200, 0x2061,
+	0x0200, 0x603c, 0x8007, 0x9205, 0x789a, 0x2009, 0x04fd, 0x2104,
+	0x789e, 0x2091, 0x5000, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
+	0xd084, 0x0180, 0x2001, 0x19f3, 0x2004, 0x9005, 0x0128, 0x2001,
+	0x008b, 0x2004, 0xd0fc, 0x0dd8, 0x2001, 0x008a, 0x2003, 0x0002,
+	0x2003, 0x1001, 0x2071, 0x0080, 0x0804, 0x0427, 0x81ff, 0x1904,
+	0x33bc, 0x7984, 0x080c, 0x6270, 0x1904, 0x33bf, 0x7e98, 0x9684,
+	0x3fff, 0x9082, 0x4000, 0x1a04, 0x33bf, 0x7c88, 0x7d8c, 0x080c,
+	0x64a2, 0x080c, 0x6433, 0x1518, 0x2061, 0x1ddc, 0x0126, 0x2091,
+	0x8000, 0x6000, 0x9086, 0x0000, 0x0148, 0x6014, 0x904d, 0x0130,
+	0xa86c, 0x9406, 0x1118, 0xa870, 0x9506, 0x0150, 0x012e, 0x9ce0,
+	0x001c, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1a04, 0x33bc, 0x0c30,
+	0x080c, 0xb452, 0x012e, 0x0904, 0x33bc, 0x0804, 0x338a, 0x900e,
+	0x2001, 0x0005, 0x080c, 0x6bb3, 0x0126, 0x2091, 0x8000, 0x080c,
+	0xbb4b, 0x080c, 0x6996, 0x012e, 0x0804, 0x338a, 0x00a6, 0x2950,
+	0xb198, 0x080c, 0x6270, 0x1904, 0x35f8, 0xb6a4, 0x9684, 0x3fff,
+	0x9082, 0x4000, 0x16e8, 0xb49c, 0xb5a0, 0x080c, 0x64a2, 0x080c,
+	0x644d, 0x1520, 0x2061, 0x1ddc, 0x0126, 0x2091, 0x8000, 0x6000,
+	0x9086, 0x0000, 0x0148, 0x6014, 0x904d, 0x0130, 0xa86c, 0x9406,
+	0x1118, 0xa870, 0x9506, 0x0158, 0x012e, 0x9ce0, 0x001c, 0x2001,
+	0x1819, 0x2004, 0x9c02, 0x2009, 0x000d, 0x12b0, 0x0c28, 0x080c,
+	0xb452, 0x012e, 0x2009, 0x0003, 0x0178, 0x00e0, 0x900e, 0x2001,
+	0x0005, 0x080c, 0x6bb3, 0x0126, 0x2091, 0x8000, 0x080c, 0xbb4b,
+	0x080c, 0x698a, 0x012e, 0x0070, 0xb097, 0x4005, 0xb19a, 0x0010,
+	0xb097, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x2a48,
+	0x00ae, 0x0005, 0xb097, 0x4000, 0x9006, 0x918d, 0x0001, 0x2008,
+	0x2a48, 0x00ae, 0x0005, 0x81ff, 0x1904, 0x33bc, 0x080c, 0x488f,
+	0x0904, 0x33bf, 0x080c, 0x6337, 0x0904, 0x33bc, 0x080c, 0x64a8,
+	0x0904, 0x33bc, 0x0804, 0x4329, 0x81ff, 0x1904, 0x33bc, 0x080c,
+	0x48ab, 0x0904, 0x33bf, 0x080c, 0x6536, 0x0904, 0x33bc, 0x2019,
+	0x0005, 0x79a8, 0x080c, 0x64c3, 0x0904, 0x33bc, 0x7888, 0x908a,
+	0x1000, 0x1a04, 0x33bf, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c,
+	0x8167, 0x7984, 0xd184, 0x1904, 0x338a, 0x0804, 0x4329, 0x0126,
+	0x2091, 0x8000, 0x81ff, 0x0118, 0x2009, 0x0001, 0x0450, 0x2029,
+	0x07ff, 0x6458, 0x2400, 0x9506, 0x01f8, 0x2508, 0x080c, 0x6270,
+	0x11d8, 0x080c, 0x6536, 0x1128, 0x2009, 0x0002, 0x62bc, 0x2518,
+	0x00c0, 0x2019, 0x0004, 0x900e, 0x080c, 0x64c3, 0x1118, 0x2009,
+	0x0006, 0x0078, 0x7884, 0x908a, 0x1000, 0x1270, 0x8003, 0x800b,
+	0x810b, 0x9108, 0x080c, 0x8167, 0x8529, 0x1ae0, 0x012e, 0x0804,
+	0x338a, 0x012e, 0x0804, 0x33bc, 0x012e, 0x0804, 0x33bf, 0x080c,
+	0x488f, 0x0904, 0x33bf, 0x080c, 0x6337, 0x0904, 0x33bc, 0x080c,
+	0x98c8, 0xbaa0, 0x2019, 0x0005, 0x00c6, 0x9066, 0x080c, 0x863b,
+	0x0076, 0x903e, 0x080c, 0x852a, 0x900e, 0x080c, 0xcfc8, 0x007e,
+	0x00ce, 0x080c, 0x98e4, 0x080c, 0x64a2, 0x0804, 0x338a, 0x080c,
+	0x488f, 0x0904, 0x33bf, 0x080c, 0x64a2, 0x2208, 0x0804, 0x338a,
+	0x0156, 0x00d6, 0x00e6, 0x00c6, 0x2069, 0x1906, 0x6810, 0x6914,
+	0x910a, 0x1208, 0x900e, 0x6816, 0x9016, 0x901e, 0x2071, 0x19b8,
+	0x7028, 0x9065, 0x0118, 0x8210, 0x600c, 0x0cd8, 0x2300, 0x9218,
+	0x00ce, 0x00ee, 0x00de, 0x015e, 0x0804, 0x338a, 0x00f6, 0x0016,
+	0x907d, 0x0138, 0x9006, 0x8000, 0x2f0c, 0x81ff, 0x0110, 0x2178,
+	0x0cd0, 0x001e, 0x00fe, 0x0005, 0x2069, 0x1906, 0x6910, 0x62b8,
+	0x0804, 0x338a, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x33bc,
+	0x0126, 0x2091, 0x8000, 0x080c, 0x53a1, 0x0128, 0x2009, 0x0007,
+	0x012e, 0x0804, 0x33bc, 0x012e, 0x6158, 0x9190, 0x318b, 0x2215,
+	0x9294, 0x00ff, 0x6378, 0x83ff, 0x0108, 0x627c, 0x67d8, 0x97c4,
+	0x000a, 0x98c6, 0x000a, 0x1118, 0x2031, 0x0001, 0x00e8, 0x97c4,
+	0x0022, 0x98c6, 0x0022, 0x1118, 0x2031, 0x0003, 0x00a8, 0x97c4,
+	0x0012, 0x98c6, 0x0012, 0x1118, 0x2031, 0x0002, 0x0068, 0x080c,
+	0x70b7, 0x1118, 0x2031, 0x0004, 0x0038, 0xd79c, 0x0120, 0x2009,
+	0x0005, 0x0804, 0x33bc, 0x9036, 0x7e9a, 0x7f9e, 0x0804, 0x338a,
+	0x6148, 0x624c, 0x2019, 0x1957, 0x231c, 0x2001, 0x1958, 0x2004,
+	0x789a, 0x0804, 0x338a, 0x0126, 0x2091, 0x8000, 0x6138, 0x623c,
+	0x6340, 0x012e, 0x0804, 0x338a, 0x080c, 0x48ab, 0x0904, 0x33bf,
+	0xba44, 0xbb38, 0x0804, 0x338a, 0x080c, 0x0d65, 0x080c, 0x48ab,
+	0x2110, 0x0904, 0x33bf, 0xb804, 0x908c, 0x00ff, 0x918e, 0x0006,
+	0x0140, 0x9084, 0xff00, 0x9086, 0x0600, 0x2009, 0x0009, 0x1904,
+	0x33bc, 0x0126, 0x2091, 0x8000, 0x2019, 0x0005, 0x00c6, 0x9066,
+	0x080c, 0x98c8, 0x080c, 0x94f4, 0x080c, 0x863b, 0x0076, 0x903e,
+	0x080c, 0x852a, 0x900e, 0x080c, 0xcfc8, 0x007e, 0x00ce, 0x080c,
+	0x98e4, 0xb807, 0x0407, 0x012e, 0x0804, 0x338a, 0x6148, 0x624c,
+	0x7884, 0x604a, 0x7b88, 0x634e, 0x2069, 0x1853, 0x831f, 0x9305,
+	0x6816, 0x788c, 0x2069, 0x1957, 0x2d1c, 0x206a, 0x7e98, 0x9682,
+	0x0014, 0x1210, 0x2031, 0x07d0, 0x2069, 0x1958, 0x2d04, 0x266a,
+	0x789a, 0x0804, 0x338a, 0x0126, 0x2091, 0x8000, 0x6138, 0x7884,
+	0x603a, 0x910e, 0xd1b4, 0x190c, 0x0eb4, 0xd0c4, 0x01a8, 0x00d6,
+	0x78a8, 0x2009, 0x196e, 0x200a, 0x78ac, 0x2011, 0x196f, 0x2012,
+	0x2069, 0x0100, 0x6838, 0x9086, 0x0007, 0x1118, 0x2214, 0x6a5a,
+	0x0010, 0x210c, 0x695a, 0x00de, 0x7888, 0x603e, 0x2011, 0x0116,
+	0x220c, 0x7888, 0xd08c, 0x0118, 0x918d, 0x0040, 0x0010, 0x918c,
+	0xff7f, 0x2112, 0x6140, 0x788c, 0x6042, 0x910e, 0xd1e4, 0x190c,
+	0x0ecf, 0x6040, 0xd0cc, 0x0120, 0x78b0, 0x2011, 0x0114, 0x2012,
+	0x012e, 0x0804, 0x338a, 0x00f6, 0x2079, 0x1800, 0x7a38, 0xa898,
+	0x9084, 0xfebf, 0x9215, 0xa89c, 0x9084, 0xfebf, 0x8002, 0x9214,
+	0x7838, 0x9084, 0x0140, 0x9215, 0x7a3a, 0xa897, 0x4000, 0x900e,
+	0x9085, 0x0001, 0x2001, 0x0000, 0x00fe, 0x0005, 0x7898, 0x9005,
+	0x01a8, 0x7888, 0x9025, 0x0904, 0x33bf, 0x788c, 0x902d, 0x0904,
+	0x33bf, 0x900e, 0x080c, 0x6270, 0x1120, 0xba44, 0xbb38, 0xbc46,
+	0xbd3a, 0x9186, 0x07ff, 0x0190, 0x8108, 0x0ca0, 0x080c, 0x48ab,
+	0x0904, 0x33bf, 0x7888, 0x900d, 0x0904, 0x33bf, 0x788c, 0x9005,
+	0x0904, 0x33bf, 0xba44, 0xb946, 0xbb38, 0xb83a, 0x0804, 0x338a,
+	0x2011, 0xbc09, 0x0010, 0x2011, 0xbc05, 0x080c, 0x53a1, 0x1904,
+	0x33bc, 0x00c6, 0x2061, 0x0100, 0x7984, 0x9186, 0x00ff, 0x1130,
+	0x2001, 0x1817, 0x2004, 0x9085, 0xff00, 0x0088, 0x9182, 0x007f,
+	0x16e0, 0x9188, 0x318b, 0x210d, 0x918c, 0x00ff, 0x2001, 0x1817,
+	0x2004, 0x0026, 0x9116, 0x002e, 0x0580, 0x810f, 0x9105, 0x0126,
+	0x2091, 0x8000, 0x0006, 0x080c, 0x9b91, 0x000e, 0x0510, 0x602e,
+	0x620a, 0x7984, 0x00b6, 0x080c, 0x6216, 0x2b08, 0x00be, 0x1500,
+	0x6112, 0x6023, 0x0001, 0x080c, 0x4878, 0x01d0, 0x9006, 0xa866,
+	0x7007, 0x0003, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x701f, 0x3863,
+	0x2900, 0x6016, 0x2009, 0x0032, 0x080c, 0x9c85, 0x012e, 0x00ce,
+	0x0005, 0x012e, 0x00ce, 0x0804, 0x33bc, 0x00ce, 0x0804, 0x33bf,
+	0x080c, 0x9be7, 0x0cb0, 0xa830, 0x9086, 0x0100, 0x0904, 0x33bc,
+	0x0804, 0x338a, 0x2061, 0x1a3f, 0x0126, 0x2091, 0x8000, 0x6000,
+	0xd084, 0x0170, 0x6104, 0x6208, 0x2061, 0x1800, 0x6350, 0x6070,
+	0x789a, 0x60bc, 0x789e, 0x60b8, 0x78aa, 0x012e, 0x0804, 0x338a,
+	0x900e, 0x2110, 0x0c88, 0x81ff, 0x1904, 0x33bc, 0x080c, 0x70b7,
+	0x0904, 0x33bc, 0x0126, 0x2091, 0x8000, 0x6250, 0x6070, 0x9202,
+	0x0248, 0x9085, 0x0001, 0x080c, 0x248d, 0x080c, 0x55bb, 0x012e,
+	0x0804, 0x338a, 0x012e, 0x0804, 0x33bf, 0x0006, 0x0016, 0x00c6,
+	0x00e6, 0x2001, 0x197a, 0x2070, 0x2061, 0x1853, 0x6008, 0x2072,
+	0x900e, 0x2011, 0x1400, 0x080c, 0x8419, 0x7206, 0x00ee, 0x00ce,
+	0x001e, 0x000e, 0x0005, 0x0126, 0x2091, 0x8000, 0x81ff, 0x0128,
+	0x012e, 0x2021, 0x400b, 0x0804, 0x338c, 0x7884, 0xd0fc, 0x0148,
+	0x2001, 0x002a, 0x2004, 0x9082, 0x00e1, 0x0288, 0x012e, 0x0804,
+	0x33bf, 0x2001, 0x002a, 0x2004, 0x2069, 0x1853, 0x6908, 0x9102,
+	0x1230, 0x012e, 0x0804, 0x33bf, 0x012e, 0x0804, 0x33bc, 0x080c,
+	0x9b66, 0x0dd0, 0x7884, 0xd0fc, 0x0904, 0x392e, 0x00c6, 0x080c,
+	0x4878, 0x00ce, 0x0d88, 0xa867, 0x0000, 0x7884, 0xa80a, 0x7898,
+	0xa80e, 0x789c, 0xa812, 0x2001, 0x002e, 0x2004, 0xa81a, 0x2001,
+	0x002f, 0x2004, 0xa81e, 0x2001, 0x0030, 0x2004, 0xa822, 0x2001,
+	0x0031, 0x2004, 0xa826, 0x2001, 0x0034, 0x2004, 0xa82a, 0x2001,
+	0x0035, 0x2004, 0xa82e, 0x2001, 0x002a, 0x2004, 0x9080, 0x0003,
+	0x9084, 0x00fc, 0x8004, 0xa816, 0x080c, 0x3ab8, 0x0928, 0x7014,
+	0x2048, 0xad2c, 0xac28, 0xab1c, 0xaa18, 0xa930, 0xa808, 0xd0b4,
 	0x1120, 0x2029, 0x0000, 0x2021, 0x0000, 0x8906, 0x8006, 0x8007,
-	0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, 0x21a8, 0x27e0,
-	0x2098, 0x27e8, 0x20a0, 0x0006, 0x080c, 0x0f9f, 0x000e, 0x080c,
-	0x48bd, 0x007e, 0x701f, 0x39ee, 0x7023, 0x0001, 0x0005, 0x0804,
-	0x3383, 0x0156, 0x00c6, 0xa814, 0x908a, 0x001e, 0x0218, 0xa833,
-	0x001e, 0x0010, 0xa832, 0x0078, 0x81ff, 0x0168, 0x0016, 0x080c,
-	0x4871, 0x001e, 0x0130, 0xa800, 0x2040, 0xa008, 0xa80a, 0x2100,
-	0x0c58, 0x9006, 0x0010, 0x9085, 0x0001, 0x00ce, 0x015e, 0x0005,
-	0x0006, 0x00f6, 0x2079, 0x0000, 0x7880, 0x9086, 0x0044, 0x00fe,
-	0x000e, 0x0005, 0x2001, 0x1970, 0x2003, 0x0001, 0x0005, 0x00f6,
-	0x00e6, 0x00c6, 0x2061, 0x0200, 0x2001, 0x197b, 0x2004, 0x601a,
-	0x2061, 0x0100, 0x2001, 0x197a, 0x2004, 0x60ce, 0x6104, 0xc1ac,
-	0x6106, 0x080c, 0x4871, 0xa813, 0x0019, 0xa817, 0x0001, 0x2900,
-	0xa85a, 0x2001, 0x002e, 0x2004, 0xa866, 0x2001, 0x002f, 0x2004,
-	0xa86a, 0x2061, 0x0090, 0x2079, 0x0100, 0x2001, 0x197a, 0x2004,
-	0x6036, 0x2009, 0x0040, 0x080c, 0x2052, 0x2001, 0x002a, 0x2004,
-	0x9084, 0xfff8, 0xa86e, 0x601a, 0xa873, 0x0000, 0x601f, 0x0000,
-	0x78ca, 0x9006, 0x600a, 0x600e, 0x00ce, 0x00ee, 0x00fe, 0x0005,
-	0x00e6, 0x080c, 0x4871, 0x2940, 0xa013, 0x0019, 0xa017, 0x0001,
-	0x2800, 0xa05a, 0x2001, 0x0030, 0x2004, 0xa866, 0x2001, 0x0031,
-	0x2004, 0xa86a, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0xa86e,
-	0xa873, 0x0000, 0x2001, 0x032a, 0x2003, 0x0004, 0x2001, 0x0300,
-	0x2003, 0x0000, 0x2001, 0x020d, 0x2003, 0x0000, 0x2001, 0x0004,
-	0x200c, 0x918d, 0x0002, 0x2102, 0x00ee, 0x0005, 0x0126, 0x2091,
-	0x8000, 0x81ff, 0x0148, 0x080c, 0x2811, 0x1130, 0x9006, 0x080c,
-	0x276e, 0x9006, 0x080c, 0x2751, 0x7884, 0x9084, 0x0007, 0x0002,
-	0x3b6b, 0x3b74, 0x3b7d, 0x3b68, 0x3b68, 0x3b68, 0x3b68, 0x3b68,
-	0x012e, 0x0804, 0x33b8, 0x2009, 0x0114, 0x2104, 0x9085, 0x0800,
-	0x200a, 0x080c, 0x3d3f, 0x00c0, 0x2009, 0x0114, 0x2104, 0x9085,
-	0x4000, 0x200a, 0x080c, 0x3d3f, 0x0078, 0x080c, 0x70ac, 0x1128,
-	0x012e, 0x2009, 0x0016, 0x0804, 0x33b5, 0x81ff, 0x0128, 0x012e,
-	0x2021, 0x400b, 0x0804, 0x3385, 0x080c, 0x98ad, 0x0086, 0x0096,
-	0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x080c, 0x3896,
-	0x2009, 0x0101, 0x210c, 0x0016, 0x7ec8, 0x7dcc, 0x9006, 0x2068,
-	0x2060, 0x2058, 0x080c, 0x3fe0, 0x080c, 0x3f30, 0x903e, 0x2720,
-	0x00f6, 0x00e6, 0x0086, 0x2940, 0x2071, 0x19b8, 0x2079, 0x0090,
-	0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0120, 0x68d4, 0x780e,
-	0x68d0, 0x780a, 0x00de, 0x2011, 0x0001, 0x080c, 0x3e91, 0x080c,
-	0x2819, 0x080c, 0x2819, 0x080c, 0x2819, 0x080c, 0x2819, 0x080c,
-	0x3e91, 0x008e, 0x00ee, 0x00fe, 0x080c, 0x3dbe, 0x2009, 0x9c40,
-	0x8109, 0x11b0, 0x080c, 0x3cf5, 0x2001, 0x0004, 0x200c, 0x918c,
-	0xfffd, 0x2102, 0x001e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be,
-	0x00ae, 0x009e, 0x008e, 0x2009, 0x0017, 0x080c, 0x33b5, 0x0cf8,
-	0x2001, 0x020b, 0x2004, 0x9084, 0x0140, 0x1d10, 0x00f6, 0x2079,
-	0x0000, 0x7884, 0x00fe, 0xd0bc, 0x0178, 0x2001, 0x0201, 0x200c,
-	0x81ff, 0x0150, 0x080c, 0x3d9c, 0x2d00, 0x9c05, 0x9b05, 0x0120,
-	0x080c, 0x3cf5, 0x0804, 0x3c9e, 0x080c, 0x3f05, 0x080c, 0x3e29,
-	0x080c, 0x3d7f, 0x080c, 0x3db4, 0x00f6, 0x2079, 0x0100, 0x7824,
-	0xd0ac, 0x0130, 0x8b58, 0x080c, 0x3cf5, 0x00fe, 0x0804, 0x3c9e,
-	0x00fe, 0x080c, 0x3ceb, 0x1150, 0x8d68, 0x2001, 0x0032, 0x2602,
-	0x2001, 0x0033, 0x2502, 0x080c, 0x3cf5, 0x0080, 0x87ff, 0x0138,
-	0x2001, 0x0201, 0x2004, 0x9005, 0x1908, 0x8739, 0x0038, 0x2001,
-	0x1a3c, 0x2004, 0x9086, 0x0000, 0x1904, 0x3bee, 0x2001, 0x032f,
-	0x2003, 0x00f6, 0x8631, 0x1208, 0x8529, 0x2500, 0x9605, 0x0904,
-	0x3c9e, 0x7884, 0xd0bc, 0x0128, 0x2d00, 0x9c05, 0x9b05, 0x1904,
-	0x3c9e, 0xa013, 0x0019, 0x2001, 0x032a, 0x2003, 0x0004, 0x7884,
-	0xd0ac, 0x1148, 0x2001, 0x1a3c, 0x2003, 0x0003, 0x2001, 0x032a,
-	0x2003, 0x0009, 0x0030, 0xa017, 0x0001, 0x78b4, 0x9005, 0x0108,
-	0xa016, 0x2800, 0xa05a, 0x2009, 0x0040, 0x080c, 0x2052, 0x2900,
-	0xa85a, 0xa813, 0x0019, 0x7884, 0xd0a4, 0x1180, 0xa817, 0x0000,
-	0x00c6, 0x20a9, 0x0004, 0x2061, 0x0090, 0x602b, 0x0008, 0x2001,
-	0x0203, 0x2004, 0x1f04, 0x3c75, 0x00ce, 0x0030, 0xa817, 0x0001,
-	0x78b0, 0x9005, 0x0108, 0xa816, 0x00f6, 0x00c6, 0x2079, 0x0100,
-	0x2061, 0x0090, 0x7827, 0x0002, 0x2001, 0x002a, 0x2004, 0x9084,
-	0xfff8, 0x601a, 0x0006, 0x2001, 0x002b, 0x2004, 0x601e, 0x78c6,
-	0x000e, 0x78ca, 0x00ce, 0x00fe, 0x0804, 0x3ba8, 0x001e, 0x00c6,
-	0x2001, 0x032a, 0x2003, 0x0004, 0x2061, 0x0100, 0x6027, 0x0002,
-	0x6106, 0x2011, 0x020d, 0x2013, 0x0020, 0x2001, 0x0004, 0x200c,
-	0x918c, 0xfffd, 0x2102, 0x080c, 0x12d6, 0x7884, 0x9084, 0x0003,
-	0x9086, 0x0002, 0x01b0, 0x2009, 0x0028, 0x080c, 0x2052, 0x2001,
-	0x0227, 0x200c, 0x2102, 0x6050, 0x9084, 0xb7ff, 0x080c, 0x28d4,
-	0x6052, 0x602f, 0x0000, 0x604b, 0xf7f7, 0x6043, 0x0090, 0x6043,
-	0x0010, 0x080c, 0x98c9, 0x00ce, 0x2d08, 0x2c10, 0x2b18, 0x2b00,
-	0x9c05, 0x9d05, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae,
-	0x009e, 0x008e, 0x1118, 0x012e, 0x0804, 0x3383, 0x012e, 0x2021,
-	0x400c, 0x0804, 0x3385, 0x9085, 0x0001, 0x1d04, 0x3cf4, 0x2091,
-	0x6000, 0x8420, 0x9486, 0x0064, 0x0005, 0x2001, 0x0105, 0x2003,
-	0x0010, 0x2001, 0x032a, 0x2003, 0x0004, 0x2001, 0x1a3c, 0x2003,
-	0x0000, 0x0071, 0x2009, 0x0048, 0x080c, 0x2052, 0x2001, 0x0227,
-	0x2024, 0x2402, 0x2001, 0x0109, 0x2003, 0x4000, 0x9026, 0x0005,
-	0x00f6, 0x00e6, 0x2071, 0x19b8, 0x7054, 0x9086, 0x0000, 0x0520,
-	0x2079, 0x0090, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c,
-	0x9106, 0x1120, 0x2009, 0x0040, 0x080c, 0x2052, 0x782c, 0xd0fc,
-	0x0d88, 0x080c, 0x3f05, 0x7054, 0x9086, 0x0000, 0x1d58, 0x782b,
-	0x0004, 0x782c, 0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c, 0x2052,
-	0x782b, 0x0002, 0x7057, 0x0000, 0x00ee, 0x00fe, 0x0005, 0x00f6,
-	0x2079, 0x0100, 0x2001, 0x1817, 0x200c, 0x7932, 0x7936, 0x080c,
-	0x246d, 0x080c, 0x2890, 0x080c, 0x28d4, 0x784b, 0xf7f7, 0x7843,
-	0x0090, 0x7843, 0x0010, 0x7850, 0xc0e5, 0x7852, 0x2019, 0x61a8,
-	0x7820, 0xd09c, 0x0110, 0x8319, 0x1dd8, 0x7850, 0xc0e4, 0x7852,
-	0x2011, 0x0048, 0x080c, 0x286d, 0x7843, 0x0040, 0x2019, 0x01f4,
-	0xa001, 0xa001, 0x8319, 0x1de0, 0x2001, 0x0100, 0x080c, 0x2833,
-	0x2011, 0x0020, 0x080c, 0x286d, 0x7843, 0x0000, 0x9006, 0x080c,
-	0x2833, 0x2011, 0x0048, 0x080c, 0x286d, 0x00fe, 0x0005, 0x7884,
-	0xd0ac, 0x11c8, 0x00f6, 0x00e6, 0x2071, 0x1a3c, 0x2079, 0x0320,
-	0x2001, 0x0201, 0x2004, 0x9005, 0x0160, 0x7000, 0x9086, 0x0000,
-	0x1140, 0x0051, 0xd0bc, 0x0108, 0x8738, 0x7003, 0x0003, 0x782b,
-	0x0019, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0300, 0x78bc,
-	0x00fe, 0x908c, 0x0070, 0x0178, 0x2009, 0x0032, 0x260a, 0x2009,
-	0x0033, 0x250a, 0xd0b4, 0x0108, 0x8c60, 0xd0ac, 0x0108, 0x8d68,
-	0xd0a4, 0x0108, 0x8b58, 0x0005, 0x00f6, 0x2079, 0x0200, 0x781c,
-	0xd084, 0x0110, 0x7837, 0x0050, 0x00fe, 0x0005, 0x00e6, 0x2071,
-	0x0100, 0x2001, 0x197b, 0x2004, 0x70e2, 0x080c, 0x3ad0, 0x1188,
-	0x2001, 0x181f, 0x2004, 0x2009, 0x181e, 0x210c, 0x918c, 0x00ff,
-	0x706e, 0x716a, 0x7066, 0x918d, 0x3200, 0x7162, 0x7073, 0xe109,
-	0x0080, 0x702c, 0x9085, 0x0002, 0x702e, 0x2009, 0x1817, 0x210c,
-	0x716e, 0x7063, 0x0100, 0x7166, 0x719e, 0x706b, 0x0000, 0x7073,
-	0x0809, 0x7077, 0x0008, 0x7078, 0x9080, 0x0100, 0x707a, 0x7080,
-	0x8000, 0x7082, 0x7087, 0xaaaa, 0x9006, 0x708a, 0x708e, 0x707e,
-	0x70d6, 0x70ab, 0x0036, 0x70af, 0x95d5, 0x7014, 0x9084, 0x1984,
-	0x9085, 0x0092, 0x7016, 0x080c, 0x3f05, 0x00f6, 0x2071, 0x1a3c,
-	0x2079, 0x0320, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0120,
-	0x689c, 0x780e, 0x6898, 0x780a, 0x00de, 0x2009, 0x03e8, 0x8109,
-	0x1df0, 0x792c, 0xd1fc, 0x0110, 0x782b, 0x0004, 0x2011, 0x0011,
-	0x080c, 0x3e91, 0x2011, 0x0001, 0x080c, 0x3e91, 0x00fe, 0x00ee,
-	0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a3c, 0x2079, 0x0320, 0x792c,
-	0xd1fc, 0x0904, 0x3e8e, 0x782b, 0x0002, 0x9026, 0xd19c, 0x1904,
-	0x3e8a, 0x7000, 0x0002, 0x3e8e, 0x3e3f, 0x3e6f, 0x3e8a, 0xd1bc,
-	0x1170, 0xd1dc, 0x1190, 0x8001, 0x7002, 0x2011, 0x0001, 0x080c,
-	0x3e91, 0x0904, 0x3e8e, 0x080c, 0x3e91, 0x0804, 0x3e8e, 0x00f6,
-	0x2079, 0x0300, 0x78bf, 0x0000, 0x00fe, 0x7810, 0x7914, 0x782b,
-	0x0004, 0x7812, 0x7916, 0x2001, 0x0201, 0x200c, 0x81ff, 0x0de8,
-	0x080c, 0x3d9c, 0x2009, 0x0001, 0x00f6, 0x2079, 0x0300, 0x78b8,
-	0x00fe, 0xd0ec, 0x0110, 0x2009, 0x0011, 0x792a, 0x00f8, 0x8001,
-	0x7002, 0x9184, 0x0880, 0x1140, 0x782c, 0xd0fc, 0x1904, 0x3e33,
-	0x2011, 0x0001, 0x00b1, 0x0090, 0xa010, 0x9092, 0x0004, 0x9086,
-	0x0015, 0x1120, 0xa000, 0xa05a, 0x2011, 0x0031, 0xa212, 0xd1dc,
-	0x1960, 0x0828, 0x782b, 0x0004, 0x7003, 0x0000, 0x00ee, 0x00fe,
-	0x0005, 0xa014, 0x9005, 0x0550, 0x8001, 0x0036, 0x0096, 0xa016,
-	0xa058, 0x2048, 0xa010, 0x2009, 0x0031, 0x911a, 0x831c, 0x831c,
-	0x938a, 0x0007, 0x1a0c, 0x0d65, 0x9398, 0x3ebf, 0x231d, 0x083f,
-	0x9080, 0x0004, 0x7a2a, 0x7100, 0x8108, 0x7102, 0x009e, 0x003e,
-	0x908a, 0x0035, 0x1140, 0x0096, 0xa058, 0x2048, 0xa804, 0xa05a,
-	0x2001, 0x0019, 0x009e, 0xa012, 0x9085, 0x0001, 0x0005, 0x3efc,
-	0x3ef3, 0x3eea, 0x3ee1, 0x3ed8, 0x3ecf, 0x3ec6, 0xa964, 0x7902,
-	0xa968, 0x7906, 0xa96c, 0x7912, 0xa970, 0x7916, 0x0005, 0xa974,
-	0x7902, 0xa978, 0x7906, 0xa97c, 0x7912, 0xa980, 0x7916, 0x0005,
-	0xa984, 0x7902, 0xa988, 0x7906, 0xa98c, 0x7912, 0xa990, 0x7916,
-	0x0005, 0xa994, 0x7902, 0xa998, 0x7906, 0xa99c, 0x7912, 0xa9a0,
-	0x7916, 0x0005, 0xa9a4, 0x7902, 0xa9a8, 0x7906, 0xa9ac, 0x7912,
-	0xa9b0, 0x7916, 0x0005, 0xa9b4, 0x7902, 0xa9b8, 0x7906, 0xa9bc,
-	0x7912, 0xa9c0, 0x7916, 0x0005, 0xa9c4, 0x7902, 0xa9c8, 0x7906,
-	0xa9cc, 0x7912, 0xa9d0, 0x7916, 0x0005, 0x00f6, 0x00e6, 0x0086,
-	0x2071, 0x19b8, 0x2079, 0x0090, 0x792c, 0xd1fc, 0x01e8, 0x782b,
-	0x0002, 0x2940, 0x9026, 0x7054, 0x0002, 0x3f2c, 0x3f18, 0x3f23,
-	0x8001, 0x7056, 0xd19c, 0x1180, 0x2011, 0x0001, 0x080c, 0x3e91,
-	0x190c, 0x3e91, 0x0048, 0x8001, 0x7056, 0x782c, 0xd0fc, 0x1d38,
-	0x2011, 0x0001, 0x080c, 0x3e91, 0x008e, 0x00ee, 0x00fe, 0x0005,
-	0x00f6, 0x00e6, 0x00c6, 0x0086, 0x2061, 0x0200, 0x2001, 0x197b,
-	0x2004, 0x601a, 0x2061, 0x0100, 0x2001, 0x197a, 0x2004, 0x60ce,
-	0x6104, 0xc1ac, 0x6106, 0x2001, 0x002c, 0x2004, 0x9005, 0x0520,
-	0x2038, 0x2001, 0x002e, 0x2024, 0x2001, 0x002f, 0x201c, 0x080c,
-	0x4871, 0xa813, 0x0019, 0xaf16, 0x2900, 0xa85a, 0x978a, 0x0007,
-	0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e, 0x0096,
-	0xa858, 0x2048, 0xa85c, 0x9080, 0x0019, 0x009e, 0x080c, 0x3fa8,
-	0x1d68, 0x2900, 0xa85a, 0x00d0, 0x080c, 0x4871, 0xa813, 0x0019,
-	0xa817, 0x0001, 0x2900, 0xa85a, 0x2001, 0x002e, 0x2004, 0xa866,
-	0x2001, 0x002f, 0x2004, 0xa86a, 0x2001, 0x002a, 0x2004, 0x9084,
-	0xfff8, 0xa86e, 0x2001, 0x002b, 0x2004, 0xa872, 0x2061, 0x0090,
-	0x2079, 0x0100, 0x2001, 0x197a, 0x2004, 0x6036, 0x2009, 0x0040,
-	0x080c, 0x2052, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0x601a,
-	0x0006, 0x2001, 0x002b, 0x2004, 0x601e, 0x78c6, 0x000e, 0x78ca,
-	0x9006, 0x600a, 0x600e, 0x008e, 0x00ce, 0x00ee, 0x00fe, 0x0005,
-	0x00e6, 0x2071, 0x0080, 0xaa60, 0x22e8, 0x20a0, 0x20e1, 0x0000,
-	0x2099, 0x0088, 0x702b, 0x0026, 0x7402, 0x7306, 0x9006, 0x700a,
-	0x700e, 0x810b, 0x810b, 0x21a8, 0x810b, 0x7112, 0x702b, 0x0041,
-	0x702c, 0xd0fc, 0x0de8, 0x702b, 0x0002, 0x702b, 0x0040, 0x4005,
-	0x7400, 0x7304, 0x87ff, 0x0190, 0x0086, 0x0096, 0x2940, 0x0086,
-	0x080c, 0x4871, 0x008e, 0xa058, 0x00a6, 0x2050, 0x2900, 0xb006,
-	0xa05a, 0x00ae, 0x009e, 0x008e, 0x9085, 0x0001, 0x00ee, 0x0005,
-	0x00e6, 0x2001, 0x002d, 0x2004, 0x9005, 0x0528, 0x2038, 0x2001,
-	0x0030, 0x2024, 0x2001, 0x0031, 0x201c, 0x080c, 0x4871, 0x2940,
-	0xa813, 0x0019, 0xaf16, 0x2900, 0xa85a, 0x978a, 0x0007, 0x0220,
-	0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e, 0x0096, 0xa858,
-	0x2048, 0xa85c, 0x9080, 0x0019, 0x009e, 0x080c, 0x3fa8, 0x1d68,
-	0x2900, 0xa85a, 0x00d8, 0x080c, 0x4871, 0x2940, 0xa013, 0x0019,
-	0xa017, 0x0001, 0x2800, 0xa05a, 0x2001, 0x0030, 0x2004, 0xa066,
-	0x2001, 0x0031, 0x2004, 0xa06a, 0x2001, 0x002a, 0x2004, 0x9084,
-	0xfff8, 0xa06e, 0x2001, 0x002b, 0x2004, 0xa072, 0x2001, 0x032a,
-	0x2003, 0x0004, 0x7884, 0xd0ac, 0x1180, 0x2001, 0x0101, 0x200c,
-	0x918d, 0x0200, 0x2102, 0xa017, 0x0000, 0x2001, 0x1a3c, 0x2003,
-	0x0003, 0x2001, 0x032a, 0x2003, 0x0009, 0x2001, 0x0300, 0x2003,
+	0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, 0x080c, 0x48c1,
+	0x701f, 0x39f5, 0x7023, 0x0001, 0x012e, 0x0005, 0x080c, 0x98c8,
+	0x0046, 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6,
+	0x00f6, 0x080c, 0x389d, 0x2001, 0x1970, 0x2003, 0x0000, 0x2021,
+	0x000a, 0x2061, 0x0100, 0x6104, 0x0016, 0x60bb, 0x0000, 0x60bf,
+	0x32e1, 0x60bf, 0x0012, 0x080c, 0x3b27, 0x080c, 0x3ae6, 0x00f6,
+	0x00e6, 0x0086, 0x2940, 0x2071, 0x19b8, 0x2079, 0x0090, 0x00d6,
+	0x2069, 0x0000, 0x6884, 0xd0b4, 0x0140, 0x2001, 0x0035, 0x2004,
+	0x780e, 0x2001, 0x0034, 0x2004, 0x780a, 0x00de, 0x2011, 0x0001,
+	0x080c, 0x3e98, 0x008e, 0x00ee, 0x00fe, 0x080c, 0x3dc5, 0x080c,
+	0x3cf2, 0x05b8, 0x2001, 0x020b, 0x2004, 0x9084, 0x0140, 0x1db8,
+	0x080c, 0x3f0c, 0x00f6, 0x2079, 0x0300, 0x78bc, 0x00fe, 0x908c,
+	0x0070, 0x1560, 0x2071, 0x0200, 0x7037, 0x0000, 0x7050, 0x9084,
+	0xff00, 0x9086, 0x3200, 0x1510, 0x7037, 0x0001, 0x7050, 0x9084,
+	0xff00, 0x9086, 0xe100, 0x11d0, 0x7037, 0x0000, 0x7054, 0x7037,
+	0x0000, 0x715c, 0x9106, 0x1190, 0x2001, 0x181f, 0x2004, 0x9106,
+	0x1168, 0x00c6, 0x2061, 0x0100, 0x6024, 0x9084, 0x1e00, 0x00ce,
+	0x0138, 0x080c, 0x3cfc, 0x080c, 0x3ae1, 0x0058, 0x080c, 0x3ae1,
+	0x080c, 0x3e30, 0x080c, 0x3dbb, 0x2001, 0x020b, 0x2004, 0xd0e4,
+	0x0dd8, 0x2001, 0x032a, 0x2003, 0x0004, 0x2061, 0x0100, 0x6027,
+	0x0002, 0x001e, 0x6106, 0x2011, 0x020d, 0x2013, 0x0020, 0x60bb,
+	0x0000, 0x60bf, 0x0108, 0x60bf, 0x0012, 0x2001, 0x0004, 0x200c,
+	0x918c, 0xfffd, 0x2102, 0x080c, 0x12d6, 0x2009, 0x0028, 0x080c,
+	0x2052, 0x2001, 0x0227, 0x200c, 0x2102, 0x080c, 0x98e4, 0x00fe,
+	0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e, 0x004e,
+	0x2001, 0x1970, 0x2004, 0x9005, 0x1118, 0x012e, 0x0804, 0x338a,
+	0x012e, 0x2021, 0x400c, 0x0804, 0x338c, 0x0016, 0x0026, 0x0036,
+	0x0046, 0x0056, 0x0076, 0x0086, 0x0096, 0x00d6, 0x0156, 0x7014,
+	0x2048, 0x7020, 0x20a8, 0x8000, 0x7022, 0xa804, 0x9005, 0x0904,
+	0x3a51, 0x2048, 0x1f04, 0x3a05, 0x7068, 0x2040, 0xa28c, 0xa390,
+	0xa494, 0xa598, 0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000,
+	0x2021, 0x0000, 0x0096, 0x7014, 0x2048, 0xa864, 0x009e, 0x9086,
+	0x0103, 0x0170, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084,
+	0xffc0, 0x9080, 0x001b, 0x080c, 0x48c1, 0x701f, 0x39f5, 0x00b0,
+	0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080,
+	0x001b, 0x21a8, 0x27e0, 0x2098, 0x27e8, 0x20a0, 0x0006, 0x080c,
+	0x0f9f, 0x000e, 0x080c, 0x48c4, 0x701f, 0x39f5, 0x015e, 0x00de,
+	0x009e, 0x008e, 0x007e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e,
+	0x0005, 0x7014, 0x2048, 0xa864, 0x9086, 0x0103, 0x1118, 0x701f,
+	0x3ab6, 0x0450, 0x7014, 0x2048, 0xa868, 0xc0fd, 0xa86a, 0x2009,
+	0x007f, 0x080c, 0x6210, 0x0110, 0x9006, 0x0030, 0xb813, 0x00ff,
+	0xb817, 0xfffd, 0x080c, 0xbd2a, 0x015e, 0x00de, 0x009e, 0x008e,
+	0x007e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, 0x0904, 0x33bc,
+	0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0076, 0x0086, 0x0096,
+	0x00d6, 0x0156, 0x701f, 0x3a88, 0x7007, 0x0003, 0x0804, 0x3a46,
+	0xa830, 0x9086, 0x0100, 0x2021, 0x400c, 0x0904, 0x338c, 0x0076,
+	0xad10, 0xac0c, 0xab24, 0xaa20, 0xa930, 0xa808, 0xd0b4, 0x1120,
+	0x2029, 0x0000, 0x2021, 0x0000, 0x8906, 0x8006, 0x8007, 0x90bc,
+	0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, 0x21a8, 0x27e0, 0x2098,
+	0x27e8, 0x20a0, 0x0006, 0x080c, 0x0f9f, 0x000e, 0x080c, 0x48c4,
+	0x007e, 0x701f, 0x39f5, 0x7023, 0x0001, 0x0005, 0x0804, 0x338a,
+	0x0156, 0x00c6, 0xa814, 0x908a, 0x001e, 0x0218, 0xa833, 0x001e,
+	0x0010, 0xa832, 0x0078, 0x81ff, 0x0168, 0x0016, 0x080c, 0x4878,
+	0x001e, 0x0130, 0xa800, 0x2040, 0xa008, 0xa80a, 0x2100, 0x0c58,
+	0x9006, 0x0010, 0x9085, 0x0001, 0x00ce, 0x015e, 0x0005, 0x0006,
+	0x00f6, 0x2079, 0x0000, 0x7880, 0x9086, 0x0044, 0x00fe, 0x000e,
+	0x0005, 0x2001, 0x1970, 0x2003, 0x0001, 0x0005, 0x00f6, 0x00e6,
+	0x00c6, 0x2061, 0x0200, 0x2001, 0x197b, 0x2004, 0x601a, 0x2061,
+	0x0100, 0x2001, 0x197a, 0x2004, 0x60ce, 0x6104, 0xc1ac, 0x6106,
+	0x080c, 0x4878, 0xa813, 0x0019, 0xa817, 0x0001, 0x2900, 0xa85a,
+	0x2001, 0x002e, 0x2004, 0xa866, 0x2001, 0x002f, 0x2004, 0xa86a,
+	0x2061, 0x0090, 0x2079, 0x0100, 0x2001, 0x197a, 0x2004, 0x6036,
+	0x2009, 0x0040, 0x080c, 0x2052, 0x2001, 0x002a, 0x2004, 0x9084,
+	0xfff8, 0xa86e, 0x601a, 0xa873, 0x0000, 0x601f, 0x0000, 0x78ca,
+	0x9006, 0x600a, 0x600e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x00e6,
+	0x080c, 0x4878, 0x2940, 0xa013, 0x0019, 0xa017, 0x0001, 0x2800,
+	0xa05a, 0x2001, 0x0030, 0x2004, 0xa866, 0x2001, 0x0031, 0x2004,
+	0xa86a, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0xa86e, 0xa873,
+	0x0000, 0x2001, 0x032a, 0x2003, 0x0004, 0x2001, 0x0300, 0x2003,
 	0x0000, 0x2001, 0x020d, 0x2003, 0x0000, 0x2001, 0x0004, 0x200c,
 	0x918d, 0x0002, 0x2102, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000,
-	0x20a9, 0x0013, 0x20a1, 0x1840, 0x20e9, 0x0001, 0x9006, 0x4004,
-	0x2009, 0x013c, 0x200a, 0x012e, 0x7880, 0x9086, 0x0052, 0x0108,
-	0x0005, 0x0804, 0x3383, 0x7d98, 0x7c9c, 0x0804, 0x347a, 0x080c,
-	0x70ac, 0x190c, 0x5c9a, 0x2069, 0x1853, 0x2d00, 0x2009, 0x0030,
-	0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x080c, 0x48ba,
-	0x701f, 0x407b, 0x0005, 0x080c, 0x5395, 0x1130, 0x3b00, 0x3a08,
-	0xc194, 0xc095, 0x20d8, 0x21d0, 0x2069, 0x1853, 0x6800, 0x9005,
-	0x0904, 0x33b8, 0x6804, 0xd094, 0x00c6, 0x2061, 0x0100, 0x6104,
-	0x0138, 0x6200, 0x9292, 0x0005, 0x0218, 0x918c, 0xffdf, 0x0010,
-	0x918d, 0x0020, 0x6106, 0x00ce, 0xd08c, 0x00c6, 0x2061, 0x0100,
-	0x6104, 0x0118, 0x918d, 0x0010, 0x0010, 0x918c, 0xffef, 0x6106,
-	0x00ce, 0xd084, 0x0158, 0x6a28, 0x928a, 0x007f, 0x1a04, 0x33b8,
-	0x9288, 0x3184, 0x210d, 0x918c, 0x00ff, 0x6162, 0xd0dc, 0x0130,
-	0x6828, 0x908a, 0x007f, 0x1a04, 0x33b8, 0x605a, 0x6888, 0x9084,
-	0x0030, 0x8004, 0x8004, 0x8004, 0x8004, 0x0006, 0x2009, 0x1982,
-	0x9080, 0x2560, 0x2005, 0x200a, 0x2008, 0x2001, 0x0018, 0x080c,
-	0x989e, 0x2009, 0x0390, 0x200b, 0x0400, 0x000e, 0x2009, 0x1983,
-	0x9080, 0x2564, 0x2005, 0x200a, 0x6808, 0x908a, 0x0100, 0x0a04,
-	0x33b8, 0x908a, 0x0841, 0x1a04, 0x33b8, 0x9084, 0x0007, 0x1904,
-	0x33b8, 0x680c, 0x9005, 0x0904, 0x33b8, 0x6810, 0x9005, 0x0904,
-	0x33b8, 0x6848, 0x6940, 0x910a, 0x1a04, 0x33b8, 0x8001, 0x0904,
-	0x33b8, 0x684c, 0x6944, 0x910a, 0x1a04, 0x33b8, 0x8001, 0x0904,
-	0x33b8, 0x6814, 0x908c, 0x00ff, 0x614a, 0x8007, 0x9084, 0x00ff,
-	0x604e, 0x080c, 0x73dd, 0x080c, 0x672d, 0x080c, 0x6762, 0x6808,
-	0x602a, 0x080c, 0x1fc4, 0x2009, 0x0170, 0x200b, 0x0080, 0xa001,
-	0xa001, 0x200b, 0x0000, 0x0036, 0x6b08, 0x080c, 0x24c7, 0x003e,
-	0x6000, 0x9086, 0x0000, 0x1904, 0x41e7, 0x6818, 0x691c, 0x6a20,
-	0x6b24, 0x8007, 0x810f, 0x8217, 0x831f, 0x6016, 0x611a, 0x621e,
-	0x6322, 0x6c04, 0xd4f4, 0x0148, 0x6830, 0x6934, 0x6a38, 0x6b3c,
-	0x8007, 0x810f, 0x8217, 0x831f, 0x0010, 0x9084, 0xf0ff, 0x6006,
-	0x610a, 0x620e, 0x6312, 0x8007, 0x810f, 0x8217, 0x831f, 0x20a9,
-	0x0004, 0x20a1, 0x1984, 0x20e9, 0x0001, 0x4001, 0x20a9, 0x0004,
-	0x20a1, 0x199e, 0x20e9, 0x0001, 0x4001, 0x080c, 0x82a8, 0x00c6,
-	0x900e, 0x20a9, 0x0001, 0x6b70, 0xd384, 0x01c8, 0x0020, 0x839d,
-	0x12b0, 0x3508, 0x8109, 0x080c, 0x79b3, 0x6878, 0x6016, 0x6874,
-	0x2008, 0x9084, 0xff00, 0x8007, 0x600a, 0x9184, 0x00ff, 0x6006,
-	0x8108, 0x1118, 0x6003, 0x0003, 0x0010, 0x6003, 0x0001, 0x1f04,
-	0x415f, 0x00ce, 0x00c6, 0x2061, 0x196d, 0x2063, 0x0001, 0x9006,
-	0x080c, 0x276e, 0x9006, 0x080c, 0x2751, 0x0000, 0x00ce, 0x00e6,
-	0x2c70, 0x080c, 0x0e9c, 0x00ee, 0x6888, 0xd0ec, 0x0130, 0x2011,
-	0x0114, 0x2204, 0x9085, 0x0180, 0x2012, 0x6a80, 0x9284, 0x0030,
-	0x9086, 0x0030, 0x1128, 0x9294, 0xffcf, 0x9295, 0x0020, 0x6a82,
-	0x2001, 0x194d, 0x6a80, 0x9294, 0x0030, 0x928e, 0x0000, 0x0170,
-	0x928e, 0x0010, 0x0118, 0x928e, 0x0020, 0x0140, 0x2003, 0xaaaa,
-	0x080c, 0x253c, 0x2001, 0x193e, 0x2102, 0x0008, 0x2102, 0x00c6,
-	0x2061, 0x0100, 0x602f, 0x0040, 0x602f, 0x0000, 0x00ce, 0x080c,
-	0x70ac, 0x0128, 0x080c, 0x4c8a, 0x0110, 0x080c, 0x248d, 0x60d0,
-	0x9005, 0x01c0, 0x6003, 0x0001, 0x2009, 0x41cf, 0x00d0, 0x080c,
-	0x70ac, 0x1168, 0x2011, 0x6f22, 0x080c, 0x8131, 0x2011, 0x6f15,
-	0x080c, 0x8237, 0x080c, 0x73b1, 0x080c, 0x6fdd, 0x0040, 0x080c,
-	0x5b90, 0x0028, 0x6003, 0x0004, 0x2009, 0x41e7, 0x0010, 0x0804,
-	0x3383, 0x2001, 0x0170, 0x2004, 0x9084, 0x00ff, 0x9086, 0x004c,
-	0x1118, 0x2091, 0x31bd, 0x0817, 0x2091, 0x313d, 0x0817, 0x6000,
-	0x9086, 0x0000, 0x0904, 0x33b5, 0x2069, 0x1853, 0x7890, 0x6842,
-	0x7894, 0x6846, 0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88, 0x7c9c,
-	0x7d98, 0x2039, 0x0001, 0x0804, 0x48bd, 0x9006, 0x080c, 0x248d,
-	0x81ff, 0x1904, 0x33b5, 0x080c, 0x70ac, 0x11b0, 0x080c, 0x73ac,
-	0x080c, 0x5cd5, 0x080c, 0x317f, 0x0118, 0x6130, 0xc18d, 0x6132,
-	0x080c, 0xbf46, 0x0130, 0x080c, 0x70cf, 0x1118, 0x080c, 0x7080,
-	0x0038, 0x080c, 0x6fdd, 0x0020, 0x080c, 0x5c9a, 0x080c, 0x5b90,
-	0x0804, 0x3383, 0x81ff, 0x1904, 0x33b5, 0x080c, 0x70ac, 0x1110,
-	0x0804, 0x33b5, 0x6190, 0x81ff, 0x01a8, 0x704f, 0x0000, 0x2001,
-	0x1d80, 0x2009, 0x0040, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0126,
-	0x2091, 0x8000, 0x2039, 0x0001, 0x080c, 0x48bd, 0x701f, 0x3381,
-	0x012e, 0x0005, 0x704f, 0x0001, 0x00d6, 0x2069, 0x1d80, 0x20a9,
-	0x0040, 0x20e9, 0x0001, 0x20a1, 0x1d80, 0x2019, 0xffff, 0x4304,
-	0x6558, 0x9588, 0x3184, 0x210d, 0x918c, 0x00ff, 0x216a, 0x900e,
-	0x2011, 0x0002, 0x2100, 0x9506, 0x01a8, 0x080c, 0x6269, 0x1190,
-	0xb814, 0x821c, 0x0238, 0x9398, 0x1d80, 0x9085, 0xff00, 0x8007,
-	0x201a, 0x0038, 0x9398, 0x1d80, 0x2324, 0x94a4, 0xff00, 0x9405,
-	0x201a, 0x8210, 0x8108, 0x9182, 0x0080, 0x1208, 0x0c18, 0x8201,
-	0x8007, 0x2d0c, 0x9105, 0x206a, 0x00de, 0x20a9, 0x0040, 0x20a1,
-	0x1d80, 0x2099, 0x1d80, 0x080c, 0x5c25, 0x0804, 0x423f, 0x080c,
-	0x48a4, 0x0904, 0x33b8, 0x080c, 0x4871, 0x1120, 0x2009, 0x0002,
-	0x0804, 0x33b5, 0x080c, 0x5386, 0xd0b4, 0x0558, 0x7884, 0x908e,
-	0x007e, 0x0538, 0x908e, 0x007f, 0x0520, 0x908e, 0x0080, 0x0508,
-	0x080c, 0x317a, 0x1148, 0xb800, 0xd08c, 0x11d8, 0xb804, 0x9084,
-	0x00ff, 0x9086, 0x0006, 0x11a8, 0xa867, 0x0000, 0xa868, 0xc0fd,
-	0xa86a, 0x080c, 0xb9fb, 0x1120, 0x2009, 0x0003, 0x0804, 0x33b5,
-	0x7007, 0x0003, 0x701f, 0x42cd, 0x0005, 0x080c, 0x48a4, 0x0904,
-	0x33b8, 0x20a9, 0x002b, 0xb8b4, 0x20e0, 0xb8b8, 0x2098, 0xa860,
-	0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003, 0x20a9, 0x0008,
-	0x9080, 0x0006, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006,
-	0x2098, 0x080c, 0x0f9f, 0x0070, 0x20a9, 0x0004, 0xa85c, 0x9080,
-	0x000a, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x000a, 0x2098,
-	0x080c, 0x0f9f, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084,
-	0xffc0, 0x9080, 0x0002, 0x2009, 0x002b, 0x7a8c, 0x7b88, 0x7c9c,
-	0x7d98, 0x0804, 0x48bd, 0x81ff, 0x1904, 0x33b5, 0x080c, 0x4888,
-	0x0904, 0x33b8, 0x080c, 0x64aa, 0x0904, 0x33b5, 0x0058, 0xa878,
-	0x9005, 0x0120, 0x2009, 0x0004, 0x0804, 0x33b5, 0xa974, 0xaa94,
-	0x0804, 0x3383, 0x080c, 0x538e, 0x0904, 0x3383, 0x701f, 0x4317,
-	0x7007, 0x0003, 0x0005, 0x81ff, 0x1904, 0x33b5, 0x7888, 0x908a,
-	0x1000, 0x1a04, 0x33b8, 0x080c, 0x48a4, 0x0904, 0x33b8, 0x080c,
-	0x6660, 0x0120, 0x080c, 0x6668, 0x1904, 0x33b8, 0x080c, 0x652f,
-	0x0904, 0x33b5, 0x2019, 0x0004, 0x900e, 0x080c, 0x64bc, 0x0904,
-	0x33b5, 0x7984, 0x7a88, 0x04c9, 0x08a8, 0xa89c, 0x908a, 0x1000,
-	0x12f8, 0x080c, 0x48a2, 0x01e0, 0x080c, 0x6660, 0x0118, 0x080c,
-	0x6668, 0x11b0, 0x080c, 0x652f, 0x2009, 0x0002, 0x0168, 0x2009,
-	0x0002, 0x2019, 0x0004, 0x080c, 0x64bc, 0x2009, 0x0003, 0x0120,
-	0xa998, 0xaa9c, 0x00d1, 0x0060, 0xa897, 0x4005, 0xa99a, 0x0010,
-	0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005,
-	0xa897, 0x4000, 0x080c, 0x538e, 0x0110, 0x9006, 0x0018, 0x900e,
-	0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x9186, 0x00ff, 0x0110,
-	0x0071, 0x0060, 0x2029, 0x007e, 0x2061, 0x1800, 0x6458, 0x2400,
-	0x9506, 0x0110, 0x2508, 0x0019, 0x8529, 0x1ec8, 0x0005, 0x080c,
-	0x6269, 0x1138, 0x2200, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c,
-	0x813f, 0x0005, 0x81ff, 0x1904, 0x33b5, 0x798c, 0x2001, 0x1951,
-	0x918c, 0x8000, 0x2102, 0x080c, 0x4888, 0x0904, 0x33b8, 0x080c,
-	0x6660, 0x0120, 0x080c, 0x6668, 0x1904, 0x33b8, 0x080c, 0x6330,
-	0x0904, 0x33b5, 0x080c, 0x64b3, 0x0904, 0x33b5, 0x2001, 0x1951,
-	0x2004, 0xd0fc, 0x1904, 0x3383, 0x0804, 0x4322, 0xa9a0, 0x2001,
-	0x1951, 0x918c, 0x8000, 0xc18d, 0x2102, 0x080c, 0x4895, 0x01a0,
-	0x080c, 0x6660, 0x0118, 0x080c, 0x6668, 0x1170, 0x080c, 0x6330,
-	0x2009, 0x0002, 0x0128, 0x080c, 0x64b3, 0x1170, 0x2009, 0x0003,
-	0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085,
-	0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0x2001, 0x1951,
-	0x2004, 0xd0fc, 0x1128, 0x080c, 0x538e, 0x0110, 0x9006, 0x0018,
-	0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x81ff, 0x1904,
-	0x33b5, 0x798c, 0x2001, 0x1950, 0x918c, 0x8000, 0x2102, 0x080c,
-	0x4888, 0x0904, 0x33b8, 0x080c, 0x6660, 0x0120, 0x080c, 0x6668,
-	0x1904, 0x33b8, 0x080c, 0x6330, 0x0904, 0x33b5, 0x080c, 0x64a1,
-	0x0904, 0x33b5, 0x2001, 0x1950, 0x2004, 0xd0fc, 0x1904, 0x3383,
-	0x0804, 0x4322, 0xa9a0, 0x2001, 0x1950, 0x918c, 0x8000, 0xc18d,
-	0x2102, 0x080c, 0x4895, 0x01a0, 0x080c, 0x6660, 0x0118, 0x080c,
-	0x6668, 0x1170, 0x080c, 0x6330, 0x2009, 0x0002, 0x0128, 0x080c,
-	0x64a1, 0x1170, 0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010,
-	0xa897, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005,
-	0xa897, 0x4000, 0x2001, 0x1950, 0x2004, 0xd0fc, 0x1128, 0x080c,
-	0x538e, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001,
-	0x0000, 0x0005, 0x6100, 0x0804, 0x3383, 0x080c, 0x48a4, 0x0904,
-	0x33b8, 0x080c, 0x539a, 0x1904, 0x33b5, 0x79a8, 0xd184, 0x1158,
-	0xb834, 0x8007, 0x789e, 0xb830, 0x8007, 0x789a, 0xbb2c, 0x831f,
-	0xba28, 0x8217, 0x0050, 0xb824, 0x8007, 0x789e, 0xb820, 0x8007,
-	0x789a, 0xbb1c, 0x831f, 0xba18, 0x8217, 0xb900, 0x918c, 0x0200,
-	0x0804, 0x3383, 0x78a8, 0x909c, 0x0003, 0xd0b4, 0x1140, 0x939a,
-	0x0003, 0x1a04, 0x33b5, 0x6258, 0x7884, 0x9206, 0x1560, 0x2031,
-	0x1848, 0x2009, 0x013c, 0x2136, 0x2001, 0x1840, 0x2009, 0x000c,
-	0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x0006, 0x78a8,
-	0x9084, 0x0080, 0x1118, 0x000e, 0x0804, 0x48bd, 0x000e, 0x2031,
-	0x0000, 0x2061, 0x18ae, 0x2c44, 0xa66a, 0xa17a, 0xa772, 0xa076,
-	0xa28e, 0xa392, 0xa496, 0xa59a, 0x080c, 0x110c, 0x7007, 0x0002,
-	0x701f, 0x44db, 0x0005, 0x81ff, 0x1904, 0x33b5, 0x080c, 0x48a4,
-	0x0904, 0x33b8, 0x080c, 0x6660, 0x1904, 0x33b5, 0x00c6, 0x080c,
-	0x4871, 0x00ce, 0x0904, 0x33b5, 0xa867, 0x0000, 0xa868, 0xc0fd,
-	0xa86a, 0x7ea8, 0x080c, 0xb9a1, 0x0904, 0x33b5, 0x7007, 0x0003,
-	0x701f, 0x44df, 0x0005, 0x080c, 0x404d, 0x0804, 0x3383, 0xa830,
-	0x9086, 0x0100, 0x0904, 0x33b5, 0x8906, 0x8006, 0x8007, 0x90bc,
-	0x003f, 0x9084, 0xffc0, 0x9080, 0x001b, 0x2009, 0x000c, 0x7a8c,
-	0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x48bd, 0x9006, 0x080c, 0x248d,
-	0x78a8, 0x9084, 0x00ff, 0x9086, 0x00ff, 0x0118, 0x81ff, 0x1904,
-	0x33b5, 0x080c, 0x70ac, 0x0110, 0x080c, 0x5c9a, 0x7888, 0x908a,
-	0x1000, 0x1a04, 0x33b8, 0x7984, 0x9186, 0x00ff, 0x0138, 0x9182,
-	0x007f, 0x1a04, 0x33b8, 0x2100, 0x080c, 0x2457, 0x0026, 0x00c6,
-	0x0126, 0x2091, 0x8000, 0x2061, 0x19d4, 0x601b, 0x0000, 0x601f,
-	0x0000, 0x6073, 0x0000, 0x6077, 0x0000, 0x080c, 0x70ac, 0x1158,
-	0x080c, 0x73ac, 0x080c, 0x5cd5, 0x9085, 0x0001, 0x080c, 0x70f3,
-	0x080c, 0x6fdd, 0x00f0, 0x080c, 0x98ad, 0x080c, 0x9b52, 0x080c,
-	0x98c9, 0x2061, 0x0100, 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff,
-	0x810f, 0x9105, 0x604a, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009,
-	0x196a, 0x200b, 0x0000, 0x2009, 0x002d, 0x2011, 0x5bc0, 0x080c,
-	0x81f5, 0x7984, 0x080c, 0x70ac, 0x1110, 0x2009, 0x00ff, 0x7a88,
-	0x080c, 0x4385, 0x012e, 0x00ce, 0x002e, 0x0804, 0x3383, 0x7984,
-	0x080c, 0x6209, 0x2b08, 0x1904, 0x33b8, 0x0804, 0x3383, 0x81ff,
-	0x0120, 0x2009, 0x0001, 0x0804, 0x33b5, 0x60d8, 0xd0ac, 0x1130,
-	0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, 0x33b5, 0x080c, 0x4871,
-	0x1120, 0x2009, 0x0002, 0x0804, 0x33b5, 0x7984, 0x9192, 0x0021,
-	0x1a04, 0x33b8, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080,
-	0x0019, 0x702a, 0xaf60, 0x7736, 0x080c, 0x48ba, 0x701f, 0x4597,
-	0x7880, 0x9086, 0x006e, 0x0110, 0x701f, 0x4e3c, 0x0005, 0x2009,
-	0x0080, 0x080c, 0x6269, 0x1118, 0x080c, 0x6660, 0x0120, 0x2021,
-	0x400a, 0x0804, 0x3385, 0x00d6, 0x0096, 0xa964, 0xaa6c, 0xab70,
-	0xac74, 0xad78, 0xae7c, 0xa884, 0x90be, 0x0100, 0x0904, 0x4630,
-	0x90be, 0x0112, 0x0904, 0x4630, 0x90be, 0x0113, 0x0904, 0x4630,
-	0x90be, 0x0114, 0x0904, 0x4630, 0x90be, 0x0117, 0x0904, 0x4630,
-	0x90be, 0x011a, 0x0904, 0x4630, 0x90be, 0x011c, 0x0904, 0x4630,
-	0x90be, 0x0121, 0x0904, 0x4617, 0x90be, 0x0131, 0x0904, 0x4617,
-	0x90be, 0x0171, 0x0904, 0x4630, 0x90be, 0x0173, 0x0904, 0x4630,
-	0x90be, 0x01a1, 0x1128, 0xa894, 0x8007, 0xa896, 0x0804, 0x463b,
-	0x90be, 0x0212, 0x0904, 0x4624, 0x90be, 0x0213, 0x05e8, 0x90be,
-	0x0214, 0x0500, 0x90be, 0x0217, 0x0188, 0x90be, 0x021a, 0x1120,
-	0xa89c, 0x8007, 0xa89e, 0x04e0, 0x90be, 0x021f, 0x05c8, 0x90be,
-	0x0300, 0x05b0, 0x009e, 0x00de, 0x0804, 0x33b8, 0x7028, 0x9080,
-	0x0010, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0007,
-	0x080c, 0x4679, 0x7028, 0x9080, 0x000e, 0x2098, 0x20a0, 0x7034,
-	0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x4679, 0x00c8, 0x7028,
+	0x81ff, 0x0148, 0x080c, 0x2811, 0x1130, 0x9006, 0x080c, 0x276e,
+	0x9006, 0x080c, 0x2751, 0x7884, 0x9084, 0x0007, 0x0002, 0x3b72,
+	0x3b7b, 0x3b84, 0x3b6f, 0x3b6f, 0x3b6f, 0x3b6f, 0x3b6f, 0x012e,
+	0x0804, 0x33bf, 0x2009, 0x0114, 0x2104, 0x9085, 0x0800, 0x200a,
+	0x080c, 0x3d46, 0x00c0, 0x2009, 0x0114, 0x2104, 0x9085, 0x4000,
+	0x200a, 0x080c, 0x3d46, 0x0078, 0x080c, 0x70b7, 0x1128, 0x012e,
+	0x2009, 0x0016, 0x0804, 0x33bc, 0x81ff, 0x0128, 0x012e, 0x2021,
+	0x400b, 0x0804, 0x338c, 0x080c, 0x98c8, 0x0086, 0x0096, 0x00a6,
+	0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x080c, 0x389d, 0x2009,
+	0x0101, 0x210c, 0x0016, 0x7ec8, 0x7dcc, 0x9006, 0x2068, 0x2060,
+	0x2058, 0x080c, 0x3fe7, 0x080c, 0x3f37, 0x903e, 0x2720, 0x00f6,
+	0x00e6, 0x0086, 0x2940, 0x2071, 0x19b8, 0x2079, 0x0090, 0x00d6,
+	0x2069, 0x0000, 0x6884, 0xd0b4, 0x0120, 0x68d4, 0x780e, 0x68d0,
+	0x780a, 0x00de, 0x2011, 0x0001, 0x080c, 0x3e98, 0x080c, 0x2819,
+	0x080c, 0x2819, 0x080c, 0x2819, 0x080c, 0x2819, 0x080c, 0x3e98,
+	0x008e, 0x00ee, 0x00fe, 0x080c, 0x3dc5, 0x2009, 0x9c40, 0x8109,
+	0x11b0, 0x080c, 0x3cfc, 0x2001, 0x0004, 0x200c, 0x918c, 0xfffd,
+	0x2102, 0x001e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae,
+	0x009e, 0x008e, 0x2009, 0x0017, 0x080c, 0x33bc, 0x0cf8, 0x2001,
+	0x020b, 0x2004, 0x9084, 0x0140, 0x1d10, 0x00f6, 0x2079, 0x0000,
+	0x7884, 0x00fe, 0xd0bc, 0x0178, 0x2001, 0x0201, 0x200c, 0x81ff,
+	0x0150, 0x080c, 0x3da3, 0x2d00, 0x9c05, 0x9b05, 0x0120, 0x080c,
+	0x3cfc, 0x0804, 0x3ca5, 0x080c, 0x3f0c, 0x080c, 0x3e30, 0x080c,
+	0x3d86, 0x080c, 0x3dbb, 0x00f6, 0x2079, 0x0100, 0x7824, 0xd0ac,
+	0x0130, 0x8b58, 0x080c, 0x3cfc, 0x00fe, 0x0804, 0x3ca5, 0x00fe,
+	0x080c, 0x3cf2, 0x1150, 0x8d68, 0x2001, 0x0032, 0x2602, 0x2001,
+	0x0033, 0x2502, 0x080c, 0x3cfc, 0x0080, 0x87ff, 0x0138, 0x2001,
+	0x0201, 0x2004, 0x9005, 0x1908, 0x8739, 0x0038, 0x2001, 0x1a3c,
+	0x2004, 0x9086, 0x0000, 0x1904, 0x3bf5, 0x2001, 0x032f, 0x2003,
+	0x00f6, 0x8631, 0x1208, 0x8529, 0x2500, 0x9605, 0x0904, 0x3ca5,
+	0x7884, 0xd0bc, 0x0128, 0x2d00, 0x9c05, 0x9b05, 0x1904, 0x3ca5,
+	0xa013, 0x0019, 0x2001, 0x032a, 0x2003, 0x0004, 0x7884, 0xd0ac,
+	0x1148, 0x2001, 0x1a3c, 0x2003, 0x0003, 0x2001, 0x032a, 0x2003,
+	0x0009, 0x0030, 0xa017, 0x0001, 0x78b4, 0x9005, 0x0108, 0xa016,
+	0x2800, 0xa05a, 0x2009, 0x0040, 0x080c, 0x2052, 0x2900, 0xa85a,
+	0xa813, 0x0019, 0x7884, 0xd0a4, 0x1180, 0xa817, 0x0000, 0x00c6,
+	0x20a9, 0x0004, 0x2061, 0x0090, 0x602b, 0x0008, 0x2001, 0x0203,
+	0x2004, 0x1f04, 0x3c7c, 0x00ce, 0x0030, 0xa817, 0x0001, 0x78b0,
+	0x9005, 0x0108, 0xa816, 0x00f6, 0x00c6, 0x2079, 0x0100, 0x2061,
+	0x0090, 0x7827, 0x0002, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8,
+	0x601a, 0x0006, 0x2001, 0x002b, 0x2004, 0x601e, 0x78c6, 0x000e,
+	0x78ca, 0x00ce, 0x00fe, 0x0804, 0x3baf, 0x001e, 0x00c6, 0x2001,
+	0x032a, 0x2003, 0x0004, 0x2061, 0x0100, 0x6027, 0x0002, 0x6106,
+	0x2011, 0x020d, 0x2013, 0x0020, 0x2001, 0x0004, 0x200c, 0x918c,
+	0xfffd, 0x2102, 0x080c, 0x12d6, 0x7884, 0x9084, 0x0003, 0x9086,
+	0x0002, 0x01b0, 0x2009, 0x0028, 0x080c, 0x2052, 0x2001, 0x0227,
+	0x200c, 0x2102, 0x6050, 0x9084, 0xb7ff, 0x080c, 0x28d4, 0x6052,
+	0x602f, 0x0000, 0x604b, 0xf7f7, 0x6043, 0x0090, 0x6043, 0x0010,
+	0x080c, 0x98e4, 0x00ce, 0x2d08, 0x2c10, 0x2b18, 0x2b00, 0x9c05,
+	0x9d05, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e,
+	0x008e, 0x1118, 0x012e, 0x0804, 0x338a, 0x012e, 0x2021, 0x400c,
+	0x0804, 0x338c, 0x9085, 0x0001, 0x1d04, 0x3cfb, 0x2091, 0x6000,
+	0x8420, 0x9486, 0x0064, 0x0005, 0x2001, 0x0105, 0x2003, 0x0010,
+	0x2001, 0x032a, 0x2003, 0x0004, 0x2001, 0x1a3c, 0x2003, 0x0000,
+	0x0071, 0x2009, 0x0048, 0x080c, 0x2052, 0x2001, 0x0227, 0x2024,
+	0x2402, 0x2001, 0x0109, 0x2003, 0x4000, 0x9026, 0x0005, 0x00f6,
+	0x00e6, 0x2071, 0x19b8, 0x7054, 0x9086, 0x0000, 0x0520, 0x2079,
+	0x0090, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0x9106,
+	0x1120, 0x2009, 0x0040, 0x080c, 0x2052, 0x782c, 0xd0fc, 0x0d88,
+	0x080c, 0x3f0c, 0x7054, 0x9086, 0x0000, 0x1d58, 0x782b, 0x0004,
+	0x782c, 0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c, 0x2052, 0x782b,
+	0x0002, 0x7057, 0x0000, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x2079,
+	0x0100, 0x2001, 0x1817, 0x200c, 0x7932, 0x7936, 0x080c, 0x246d,
+	0x080c, 0x2890, 0x080c, 0x28d4, 0x784b, 0xf7f7, 0x7843, 0x0090,
+	0x7843, 0x0010, 0x7850, 0xc0e5, 0x7852, 0x2019, 0x61a8, 0x7820,
+	0xd09c, 0x0110, 0x8319, 0x1dd8, 0x7850, 0xc0e4, 0x7852, 0x2011,
+	0x0048, 0x080c, 0x286d, 0x7843, 0x0040, 0x2019, 0x01f4, 0xa001,
+	0xa001, 0x8319, 0x1de0, 0x2001, 0x0100, 0x080c, 0x2833, 0x2011,
+	0x0020, 0x080c, 0x286d, 0x7843, 0x0000, 0x9006, 0x080c, 0x2833,
+	0x2011, 0x0048, 0x080c, 0x286d, 0x00fe, 0x0005, 0x7884, 0xd0ac,
+	0x11c8, 0x00f6, 0x00e6, 0x2071, 0x1a3c, 0x2079, 0x0320, 0x2001,
+	0x0201, 0x2004, 0x9005, 0x0160, 0x7000, 0x9086, 0x0000, 0x1140,
+	0x0051, 0xd0bc, 0x0108, 0x8738, 0x7003, 0x0003, 0x782b, 0x0019,
+	0x00ee, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0300, 0x78bc, 0x00fe,
+	0x908c, 0x0070, 0x0178, 0x2009, 0x0032, 0x260a, 0x2009, 0x0033,
+	0x250a, 0xd0b4, 0x0108, 0x8c60, 0xd0ac, 0x0108, 0x8d68, 0xd0a4,
+	0x0108, 0x8b58, 0x0005, 0x00f6, 0x2079, 0x0200, 0x781c, 0xd084,
+	0x0110, 0x7837, 0x0050, 0x00fe, 0x0005, 0x00e6, 0x2071, 0x0100,
+	0x2001, 0x197b, 0x2004, 0x70e2, 0x080c, 0x3ad7, 0x1188, 0x2001,
+	0x181f, 0x2004, 0x2009, 0x181e, 0x210c, 0x918c, 0x00ff, 0x706e,
+	0x716a, 0x7066, 0x918d, 0x3200, 0x7162, 0x7073, 0xe109, 0x0080,
+	0x702c, 0x9085, 0x0002, 0x702e, 0x2009, 0x1817, 0x210c, 0x716e,
+	0x7063, 0x0100, 0x7166, 0x719e, 0x706b, 0x0000, 0x7073, 0x0809,
+	0x7077, 0x0008, 0x7078, 0x9080, 0x0100, 0x707a, 0x7080, 0x8000,
+	0x7082, 0x7087, 0xaaaa, 0x9006, 0x708a, 0x708e, 0x707e, 0x70d6,
+	0x70ab, 0x0036, 0x70af, 0x95d5, 0x7014, 0x9084, 0x1984, 0x9085,
+	0x0092, 0x7016, 0x080c, 0x3f0c, 0x00f6, 0x2071, 0x1a3c, 0x2079,
+	0x0320, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0120, 0x689c,
+	0x780e, 0x6898, 0x780a, 0x00de, 0x2009, 0x03e8, 0x8109, 0x1df0,
+	0x792c, 0xd1fc, 0x0110, 0x782b, 0x0004, 0x2011, 0x0011, 0x080c,
+	0x3e98, 0x2011, 0x0001, 0x080c, 0x3e98, 0x00fe, 0x00ee, 0x0005,
+	0x00f6, 0x00e6, 0x2071, 0x1a3c, 0x2079, 0x0320, 0x792c, 0xd1fc,
+	0x0904, 0x3e95, 0x782b, 0x0002, 0x9026, 0xd19c, 0x1904, 0x3e91,
+	0x7000, 0x0002, 0x3e95, 0x3e46, 0x3e76, 0x3e91, 0xd1bc, 0x1170,
+	0xd1dc, 0x1190, 0x8001, 0x7002, 0x2011, 0x0001, 0x080c, 0x3e98,
+	0x0904, 0x3e95, 0x080c, 0x3e98, 0x0804, 0x3e95, 0x00f6, 0x2079,
+	0x0300, 0x78bf, 0x0000, 0x00fe, 0x7810, 0x7914, 0x782b, 0x0004,
+	0x7812, 0x7916, 0x2001, 0x0201, 0x200c, 0x81ff, 0x0de8, 0x080c,
+	0x3da3, 0x2009, 0x0001, 0x00f6, 0x2079, 0x0300, 0x78b8, 0x00fe,
+	0xd0ec, 0x0110, 0x2009, 0x0011, 0x792a, 0x00f8, 0x8001, 0x7002,
+	0x9184, 0x0880, 0x1140, 0x782c, 0xd0fc, 0x1904, 0x3e3a, 0x2011,
+	0x0001, 0x00b1, 0x0090, 0xa010, 0x9092, 0x0004, 0x9086, 0x0015,
+	0x1120, 0xa000, 0xa05a, 0x2011, 0x0031, 0xa212, 0xd1dc, 0x1960,
+	0x0828, 0x782b, 0x0004, 0x7003, 0x0000, 0x00ee, 0x00fe, 0x0005,
+	0xa014, 0x9005, 0x0550, 0x8001, 0x0036, 0x0096, 0xa016, 0xa058,
+	0x2048, 0xa010, 0x2009, 0x0031, 0x911a, 0x831c, 0x831c, 0x938a,
+	0x0007, 0x1a0c, 0x0d65, 0x9398, 0x3ec6, 0x231d, 0x083f, 0x9080,
+	0x0004, 0x7a2a, 0x7100, 0x8108, 0x7102, 0x009e, 0x003e, 0x908a,
+	0x0035, 0x1140, 0x0096, 0xa058, 0x2048, 0xa804, 0xa05a, 0x2001,
+	0x0019, 0x009e, 0xa012, 0x9085, 0x0001, 0x0005, 0x3f03, 0x3efa,
+	0x3ef1, 0x3ee8, 0x3edf, 0x3ed6, 0x3ecd, 0xa964, 0x7902, 0xa968,
+	0x7906, 0xa96c, 0x7912, 0xa970, 0x7916, 0x0005, 0xa974, 0x7902,
+	0xa978, 0x7906, 0xa97c, 0x7912, 0xa980, 0x7916, 0x0005, 0xa984,
+	0x7902, 0xa988, 0x7906, 0xa98c, 0x7912, 0xa990, 0x7916, 0x0005,
+	0xa994, 0x7902, 0xa998, 0x7906, 0xa99c, 0x7912, 0xa9a0, 0x7916,
+	0x0005, 0xa9a4, 0x7902, 0xa9a8, 0x7906, 0xa9ac, 0x7912, 0xa9b0,
+	0x7916, 0x0005, 0xa9b4, 0x7902, 0xa9b8, 0x7906, 0xa9bc, 0x7912,
+	0xa9c0, 0x7916, 0x0005, 0xa9c4, 0x7902, 0xa9c8, 0x7906, 0xa9cc,
+	0x7912, 0xa9d0, 0x7916, 0x0005, 0x00f6, 0x00e6, 0x0086, 0x2071,
+	0x19b8, 0x2079, 0x0090, 0x792c, 0xd1fc, 0x01e8, 0x782b, 0x0002,
+	0x2940, 0x9026, 0x7054, 0x0002, 0x3f33, 0x3f1f, 0x3f2a, 0x8001,
+	0x7056, 0xd19c, 0x1180, 0x2011, 0x0001, 0x080c, 0x3e98, 0x190c,
+	0x3e98, 0x0048, 0x8001, 0x7056, 0x782c, 0xd0fc, 0x1d38, 0x2011,
+	0x0001, 0x080c, 0x3e98, 0x008e, 0x00ee, 0x00fe, 0x0005, 0x00f6,
+	0x00e6, 0x00c6, 0x0086, 0x2061, 0x0200, 0x2001, 0x197b, 0x2004,
+	0x601a, 0x2061, 0x0100, 0x2001, 0x197a, 0x2004, 0x60ce, 0x6104,
+	0xc1ac, 0x6106, 0x2001, 0x002c, 0x2004, 0x9005, 0x0520, 0x2038,
+	0x2001, 0x002e, 0x2024, 0x2001, 0x002f, 0x201c, 0x080c, 0x4878,
+	0xa813, 0x0019, 0xaf16, 0x2900, 0xa85a, 0x978a, 0x0007, 0x0220,
+	0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e, 0x0096, 0xa858,
+	0x2048, 0xa85c, 0x9080, 0x0019, 0x009e, 0x080c, 0x3faf, 0x1d68,
+	0x2900, 0xa85a, 0x00d0, 0x080c, 0x4878, 0xa813, 0x0019, 0xa817,
+	0x0001, 0x2900, 0xa85a, 0x2001, 0x002e, 0x2004, 0xa866, 0x2001,
+	0x002f, 0x2004, 0xa86a, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8,
+	0xa86e, 0x2001, 0x002b, 0x2004, 0xa872, 0x2061, 0x0090, 0x2079,
+	0x0100, 0x2001, 0x197a, 0x2004, 0x6036, 0x2009, 0x0040, 0x080c,
+	0x2052, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0x601a, 0x0006,
+	0x2001, 0x002b, 0x2004, 0x601e, 0x78c6, 0x000e, 0x78ca, 0x9006,
+	0x600a, 0x600e, 0x008e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x00e6,
+	0x2071, 0x0080, 0xaa60, 0x22e8, 0x20a0, 0x20e1, 0x0000, 0x2099,
+	0x0088, 0x702b, 0x0026, 0x7402, 0x7306, 0x9006, 0x700a, 0x700e,
+	0x810b, 0x810b, 0x21a8, 0x810b, 0x7112, 0x702b, 0x0041, 0x702c,
+	0xd0fc, 0x0de8, 0x702b, 0x0002, 0x702b, 0x0040, 0x4005, 0x7400,
+	0x7304, 0x87ff, 0x0190, 0x0086, 0x0096, 0x2940, 0x0086, 0x080c,
+	0x4878, 0x008e, 0xa058, 0x00a6, 0x2050, 0x2900, 0xb006, 0xa05a,
+	0x00ae, 0x009e, 0x008e, 0x9085, 0x0001, 0x00ee, 0x0005, 0x00e6,
+	0x2001, 0x002d, 0x2004, 0x9005, 0x0528, 0x2038, 0x2001, 0x0030,
+	0x2024, 0x2001, 0x0031, 0x201c, 0x080c, 0x4878, 0x2940, 0xa813,
+	0x0019, 0xaf16, 0x2900, 0xa85a, 0x978a, 0x0007, 0x0220, 0x2138,
+	0x2009, 0x0007, 0x0010, 0x2708, 0x903e, 0x0096, 0xa858, 0x2048,
+	0xa85c, 0x9080, 0x0019, 0x009e, 0x080c, 0x3faf, 0x1d68, 0x2900,
+	0xa85a, 0x00d8, 0x080c, 0x4878, 0x2940, 0xa013, 0x0019, 0xa017,
+	0x0001, 0x2800, 0xa05a, 0x2001, 0x0030, 0x2004, 0xa066, 0x2001,
+	0x0031, 0x2004, 0xa06a, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8,
+	0xa06e, 0x2001, 0x002b, 0x2004, 0xa072, 0x2001, 0x032a, 0x2003,
+	0x0004, 0x7884, 0xd0ac, 0x1180, 0x2001, 0x0101, 0x200c, 0x918d,
+	0x0200, 0x2102, 0xa017, 0x0000, 0x2001, 0x1a3c, 0x2003, 0x0003,
+	0x2001, 0x032a, 0x2003, 0x0009, 0x2001, 0x0300, 0x2003, 0x0000,
+	0x2001, 0x020d, 0x2003, 0x0000, 0x2001, 0x0004, 0x200c, 0x918d,
+	0x0002, 0x2102, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x20a9,
+	0x0013, 0x20a1, 0x1840, 0x20e9, 0x0001, 0x9006, 0x4004, 0x2009,
+	0x013c, 0x200a, 0x012e, 0x7880, 0x9086, 0x0052, 0x0108, 0x0005,
+	0x0804, 0x338a, 0x7d98, 0x7c9c, 0x0804, 0x3481, 0x080c, 0x70b7,
+	0x190c, 0x5ca1, 0x2069, 0x1853, 0x2d00, 0x2009, 0x0030, 0x7a8c,
+	0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x080c, 0x48c1, 0x701f,
+	0x4082, 0x0005, 0x080c, 0x539c, 0x1130, 0x3b00, 0x3a08, 0xc194,
+	0xc095, 0x20d8, 0x21d0, 0x2069, 0x1853, 0x6800, 0x9005, 0x0904,
+	0x33bf, 0x6804, 0xd094, 0x00c6, 0x2061, 0x0100, 0x6104, 0x0138,
+	0x6200, 0x9292, 0x0005, 0x0218, 0x918c, 0xffdf, 0x0010, 0x918d,
+	0x0020, 0x6106, 0x00ce, 0xd08c, 0x00c6, 0x2061, 0x0100, 0x6104,
+	0x0118, 0x918d, 0x0010, 0x0010, 0x918c, 0xffef, 0x6106, 0x00ce,
+	0xd084, 0x0158, 0x6a28, 0x928a, 0x007f, 0x1a04, 0x33bf, 0x9288,
+	0x318b, 0x210d, 0x918c, 0x00ff, 0x6162, 0xd0dc, 0x0130, 0x6828,
+	0x908a, 0x007f, 0x1a04, 0x33bf, 0x605a, 0x6888, 0x9084, 0x0030,
+	0x8004, 0x8004, 0x8004, 0x8004, 0x0006, 0x2009, 0x1982, 0x9080,
+	0x2560, 0x2005, 0x200a, 0x2008, 0x2001, 0x0018, 0x080c, 0x98b9,
+	0x2009, 0x0390, 0x200b, 0x0400, 0x000e, 0x2009, 0x1983, 0x9080,
+	0x2564, 0x2005, 0x200a, 0x6808, 0x908a, 0x0100, 0x0a04, 0x33bf,
+	0x908a, 0x0841, 0x1a04, 0x33bf, 0x9084, 0x0007, 0x1904, 0x33bf,
+	0x680c, 0x9005, 0x0904, 0x33bf, 0x6810, 0x9005, 0x0904, 0x33bf,
+	0x6848, 0x6940, 0x910a, 0x1a04, 0x33bf, 0x8001, 0x0904, 0x33bf,
+	0x684c, 0x6944, 0x910a, 0x1a04, 0x33bf, 0x8001, 0x0904, 0x33bf,
+	0x6814, 0x908c, 0x00ff, 0x614a, 0x8007, 0x9084, 0x00ff, 0x604e,
+	0x080c, 0x73e8, 0x080c, 0x6734, 0x080c, 0x6769, 0x6808, 0x602a,
+	0x080c, 0x1fc4, 0x2009, 0x0170, 0x200b, 0x0080, 0xa001, 0xa001,
+	0x200b, 0x0000, 0x0036, 0x6b08, 0x080c, 0x24c7, 0x003e, 0x6000,
+	0x9086, 0x0000, 0x1904, 0x41ee, 0x6818, 0x691c, 0x6a20, 0x6b24,
+	0x8007, 0x810f, 0x8217, 0x831f, 0x6016, 0x611a, 0x621e, 0x6322,
+	0x6c04, 0xd4f4, 0x0148, 0x6830, 0x6934, 0x6a38, 0x6b3c, 0x8007,
+	0x810f, 0x8217, 0x831f, 0x0010, 0x9084, 0xf0ff, 0x6006, 0x610a,
+	0x620e, 0x6312, 0x8007, 0x810f, 0x8217, 0x831f, 0x20a9, 0x0004,
+	0x20a1, 0x1984, 0x20e9, 0x0001, 0x4001, 0x20a9, 0x0004, 0x20a1,
+	0x199e, 0x20e9, 0x0001, 0x4001, 0x080c, 0x82d0, 0x00c6, 0x900e,
+	0x20a9, 0x0001, 0x6b70, 0xd384, 0x01c8, 0x0020, 0x839d, 0x12b0,
+	0x3508, 0x8109, 0x080c, 0x79be, 0x6878, 0x6016, 0x6874, 0x2008,
+	0x9084, 0xff00, 0x8007, 0x600a, 0x9184, 0x00ff, 0x6006, 0x8108,
+	0x1118, 0x6003, 0x0003, 0x0010, 0x6003, 0x0001, 0x1f04, 0x4166,
+	0x00ce, 0x00c6, 0x2061, 0x196d, 0x2063, 0x0001, 0x9006, 0x080c,
+	0x276e, 0x9006, 0x080c, 0x2751, 0x0000, 0x00ce, 0x00e6, 0x2c70,
+	0x080c, 0x0e9c, 0x00ee, 0x6888, 0xd0ec, 0x0130, 0x2011, 0x0114,
+	0x2204, 0x9085, 0x0180, 0x2012, 0x6a80, 0x9284, 0x0030, 0x9086,
+	0x0030, 0x1128, 0x9294, 0xffcf, 0x9295, 0x0020, 0x6a82, 0x2001,
+	0x194d, 0x6a80, 0x9294, 0x0030, 0x928e, 0x0000, 0x0170, 0x928e,
+	0x0010, 0x0118, 0x928e, 0x0020, 0x0140, 0x2003, 0xaaaa, 0x080c,
+	0x253c, 0x2001, 0x193e, 0x2102, 0x0008, 0x2102, 0x00c6, 0x2061,
+	0x0100, 0x602f, 0x0040, 0x602f, 0x0000, 0x00ce, 0x080c, 0x70b7,
+	0x0128, 0x080c, 0x4c91, 0x0110, 0x080c, 0x248d, 0x60d0, 0x9005,
+	0x01c0, 0x6003, 0x0001, 0x2009, 0x41d6, 0x00d0, 0x080c, 0x70b7,
+	0x1168, 0x2011, 0x6f2d, 0x080c, 0x8159, 0x2011, 0x6f20, 0x080c,
+	0x825f, 0x080c, 0x73bc, 0x080c, 0x6fe8, 0x0040, 0x080c, 0x5b97,
+	0x0028, 0x6003, 0x0004, 0x2009, 0x41ee, 0x0010, 0x0804, 0x338a,
+	0x2001, 0x0170, 0x2004, 0x9084, 0x00ff, 0x9086, 0x004c, 0x1118,
+	0x2091, 0x31bd, 0x0817, 0x2091, 0x313d, 0x0817, 0x6000, 0x9086,
+	0x0000, 0x0904, 0x33bc, 0x2069, 0x1853, 0x7890, 0x6842, 0x7894,
+	0x6846, 0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98,
+	0x2039, 0x0001, 0x0804, 0x48c4, 0x9006, 0x080c, 0x248d, 0x81ff,
+	0x1904, 0x33bc, 0x080c, 0x70b7, 0x11b0, 0x080c, 0x73b7, 0x080c,
+	0x5cdc, 0x080c, 0x3186, 0x0118, 0x6130, 0xc18d, 0x6132, 0x080c,
+	0xbf61, 0x0130, 0x080c, 0x70da, 0x1118, 0x080c, 0x708b, 0x0038,
+	0x080c, 0x6fe8, 0x0020, 0x080c, 0x5ca1, 0x080c, 0x5b97, 0x0804,
+	0x338a, 0x81ff, 0x1904, 0x33bc, 0x080c, 0x70b7, 0x1110, 0x0804,
+	0x33bc, 0x6190, 0x81ff, 0x01a8, 0x704f, 0x0000, 0x2001, 0x1d80,
+	0x2009, 0x0040, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0126, 0x2091,
+	0x8000, 0x2039, 0x0001, 0x080c, 0x48c4, 0x701f, 0x3388, 0x012e,
+	0x0005, 0x704f, 0x0001, 0x00d6, 0x2069, 0x1d80, 0x20a9, 0x0040,
+	0x20e9, 0x0001, 0x20a1, 0x1d80, 0x2019, 0xffff, 0x4304, 0x6558,
+	0x9588, 0x318b, 0x210d, 0x918c, 0x00ff, 0x216a, 0x900e, 0x2011,
+	0x0002, 0x2100, 0x9506, 0x01a8, 0x080c, 0x6270, 0x1190, 0xb814,
+	0x821c, 0x0238, 0x9398, 0x1d80, 0x9085, 0xff00, 0x8007, 0x201a,
+	0x0038, 0x9398, 0x1d80, 0x2324, 0x94a4, 0xff00, 0x9405, 0x201a,
+	0x8210, 0x8108, 0x9182, 0x0080, 0x1208, 0x0c18, 0x8201, 0x8007,
+	0x2d0c, 0x9105, 0x206a, 0x00de, 0x20a9, 0x0040, 0x20a1, 0x1d80,
+	0x2099, 0x1d80, 0x080c, 0x5c2c, 0x0804, 0x4246, 0x080c, 0x48ab,
+	0x0904, 0x33bf, 0x080c, 0x4878, 0x1120, 0x2009, 0x0002, 0x0804,
+	0x33bc, 0x080c, 0x538d, 0xd0b4, 0x0558, 0x7884, 0x908e, 0x007e,
+	0x0538, 0x908e, 0x007f, 0x0520, 0x908e, 0x0080, 0x0508, 0x080c,
+	0x3181, 0x1148, 0xb800, 0xd08c, 0x11d8, 0xb804, 0x9084, 0x00ff,
+	0x9086, 0x0006, 0x11a8, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a,
+	0x080c, 0xba16, 0x1120, 0x2009, 0x0003, 0x0804, 0x33bc, 0x7007,
+	0x0003, 0x701f, 0x42d4, 0x0005, 0x080c, 0x48ab, 0x0904, 0x33bf,
+	0x20a9, 0x002b, 0xb8b4, 0x20e0, 0xb8b8, 0x2098, 0xa860, 0x20e8,
+	0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003, 0x20a9, 0x0008, 0x9080,
+	0x0006, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098,
+	0x080c, 0x0f9f, 0x0070, 0x20a9, 0x0004, 0xa85c, 0x9080, 0x000a,
+	0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x000a, 0x2098, 0x080c,
+	0x0f9f, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0,
+	0x9080, 0x0002, 0x2009, 0x002b, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98,
+	0x0804, 0x48c4, 0x81ff, 0x1904, 0x33bc, 0x080c, 0x488f, 0x0904,
+	0x33bf, 0x080c, 0x64b1, 0x0904, 0x33bc, 0x0058, 0xa878, 0x9005,
+	0x0120, 0x2009, 0x0004, 0x0804, 0x33bc, 0xa974, 0xaa94, 0x0804,
+	0x338a, 0x080c, 0x5395, 0x0904, 0x338a, 0x701f, 0x431e, 0x7007,
+	0x0003, 0x0005, 0x81ff, 0x1904, 0x33bc, 0x7888, 0x908a, 0x1000,
+	0x1a04, 0x33bf, 0x080c, 0x48ab, 0x0904, 0x33bf, 0x080c, 0x6667,
+	0x0120, 0x080c, 0x666f, 0x1904, 0x33bf, 0x080c, 0x6536, 0x0904,
+	0x33bc, 0x2019, 0x0004, 0x900e, 0x080c, 0x64c3, 0x0904, 0x33bc,
+	0x7984, 0x7a88, 0x04c9, 0x08a8, 0xa89c, 0x908a, 0x1000, 0x12f8,
+	0x080c, 0x48a9, 0x01e0, 0x080c, 0x6667, 0x0118, 0x080c, 0x666f,
+	0x11b0, 0x080c, 0x6536, 0x2009, 0x0002, 0x0168, 0x2009, 0x0002,
+	0x2019, 0x0004, 0x080c, 0x64c3, 0x2009, 0x0003, 0x0120, 0xa998,
+	0xaa9c, 0x00d1, 0x0060, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897,
+	0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897,
+	0x4000, 0x080c, 0x5395, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085,
+	0x0001, 0x2001, 0x0000, 0x0005, 0x9186, 0x00ff, 0x0110, 0x0071,
+	0x0060, 0x2029, 0x007e, 0x2061, 0x1800, 0x6458, 0x2400, 0x9506,
+	0x0110, 0x2508, 0x0019, 0x8529, 0x1ec8, 0x0005, 0x080c, 0x6270,
+	0x1138, 0x2200, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, 0x8167,
+	0x0005, 0x81ff, 0x1904, 0x33bc, 0x798c, 0x2001, 0x1951, 0x918c,
+	0x8000, 0x2102, 0x080c, 0x488f, 0x0904, 0x33bf, 0x080c, 0x6667,
+	0x0120, 0x080c, 0x666f, 0x1904, 0x33bf, 0x080c, 0x6337, 0x0904,
+	0x33bc, 0x080c, 0x64ba, 0x0904, 0x33bc, 0x2001, 0x1951, 0x2004,
+	0xd0fc, 0x1904, 0x338a, 0x0804, 0x4329, 0xa9a0, 0x2001, 0x1951,
+	0x918c, 0x8000, 0xc18d, 0x2102, 0x080c, 0x489c, 0x01a0, 0x080c,
+	0x6667, 0x0118, 0x080c, 0x666f, 0x1170, 0x080c, 0x6337, 0x2009,
+	0x0002, 0x0128, 0x080c, 0x64ba, 0x1170, 0x2009, 0x0003, 0xa897,
+	0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001,
+	0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0x2001, 0x1951, 0x2004,
+	0xd0fc, 0x1128, 0x080c, 0x5395, 0x0110, 0x9006, 0x0018, 0x900e,
+	0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x81ff, 0x1904, 0x33bc,
+	0x798c, 0x2001, 0x1950, 0x918c, 0x8000, 0x2102, 0x080c, 0x488f,
+	0x0904, 0x33bf, 0x080c, 0x6667, 0x0120, 0x080c, 0x666f, 0x1904,
+	0x33bf, 0x080c, 0x6337, 0x0904, 0x33bc, 0x080c, 0x64a8, 0x0904,
+	0x33bc, 0x2001, 0x1950, 0x2004, 0xd0fc, 0x1904, 0x338a, 0x0804,
+	0x4329, 0xa9a0, 0x2001, 0x1950, 0x918c, 0x8000, 0xc18d, 0x2102,
+	0x080c, 0x489c, 0x01a0, 0x080c, 0x6667, 0x0118, 0x080c, 0x666f,
+	0x1170, 0x080c, 0x6337, 0x2009, 0x0002, 0x0128, 0x080c, 0x64a8,
+	0x1170, 0x2009, 0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897,
+	0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897,
+	0x4000, 0x2001, 0x1950, 0x2004, 0xd0fc, 0x1128, 0x080c, 0x5395,
+	0x0110, 0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000,
+	0x0005, 0x6100, 0x0804, 0x338a, 0x080c, 0x48ab, 0x0904, 0x33bf,
+	0x080c, 0x53a1, 0x1904, 0x33bc, 0x79a8, 0xd184, 0x1158, 0xb834,
+	0x8007, 0x789e, 0xb830, 0x8007, 0x789a, 0xbb2c, 0x831f, 0xba28,
+	0x8217, 0x0050, 0xb824, 0x8007, 0x789e, 0xb820, 0x8007, 0x789a,
+	0xbb1c, 0x831f, 0xba18, 0x8217, 0xb900, 0x918c, 0x0200, 0x0804,
+	0x338a, 0x78a8, 0x909c, 0x0003, 0xd0b4, 0x1140, 0x939a, 0x0003,
+	0x1a04, 0x33bc, 0x6258, 0x7884, 0x9206, 0x1560, 0x2031, 0x1848,
+	0x2009, 0x013c, 0x2136, 0x2001, 0x1840, 0x2009, 0x000c, 0x7a8c,
+	0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x0006, 0x78a8, 0x9084,
+	0x0080, 0x1118, 0x000e, 0x0804, 0x48c4, 0x000e, 0x2031, 0x0000,
+	0x2061, 0x18ae, 0x2c44, 0xa66a, 0xa17a, 0xa772, 0xa076, 0xa28e,
+	0xa392, 0xa496, 0xa59a, 0x080c, 0x110c, 0x7007, 0x0002, 0x701f,
+	0x44e2, 0x0005, 0x81ff, 0x1904, 0x33bc, 0x080c, 0x48ab, 0x0904,
+	0x33bf, 0x080c, 0x6667, 0x1904, 0x33bc, 0x00c6, 0x080c, 0x4878,
+	0x00ce, 0x0904, 0x33bc, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a,
+	0x7ea8, 0x080c, 0xb9bc, 0x0904, 0x33bc, 0x7007, 0x0003, 0x701f,
+	0x44e6, 0x0005, 0x080c, 0x4054, 0x0804, 0x338a, 0xa830, 0x9086,
+	0x0100, 0x0904, 0x33bc, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f,
+	0x9084, 0xffc0, 0x9080, 0x001b, 0x2009, 0x000c, 0x7a8c, 0x7b88,
+	0x7c9c, 0x7d98, 0x0804, 0x48c4, 0x9006, 0x080c, 0x248d, 0x78a8,
+	0x9084, 0x00ff, 0x9086, 0x00ff, 0x0118, 0x81ff, 0x1904, 0x33bc,
+	0x080c, 0x70b7, 0x0110, 0x080c, 0x5ca1, 0x7888, 0x908a, 0x1000,
+	0x1a04, 0x33bf, 0x7984, 0x9186, 0x00ff, 0x0138, 0x9182, 0x007f,
+	0x1a04, 0x33bf, 0x2100, 0x080c, 0x2457, 0x0026, 0x00c6, 0x0126,
+	0x2091, 0x8000, 0x2061, 0x19d4, 0x601b, 0x0000, 0x601f, 0x0000,
+	0x6073, 0x0000, 0x6077, 0x0000, 0x080c, 0x70b7, 0x1158, 0x080c,
+	0x73b7, 0x080c, 0x5cdc, 0x9085, 0x0001, 0x080c, 0x70fe, 0x080c,
+	0x6fe8, 0x00f0, 0x080c, 0x98c8, 0x080c, 0x9b6d, 0x080c, 0x98e4,
+	0x2061, 0x0100, 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, 0x810f,
+	0x9105, 0x604a, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x196a,
+	0x200b, 0x0000, 0x2009, 0x002d, 0x2011, 0x5bc7, 0x080c, 0x821d,
+	0x7984, 0x080c, 0x70b7, 0x1110, 0x2009, 0x00ff, 0x7a88, 0x080c,
+	0x438c, 0x012e, 0x00ce, 0x002e, 0x0804, 0x338a, 0x7984, 0x080c,
+	0x6210, 0x2b08, 0x1904, 0x33bf, 0x0804, 0x338a, 0x81ff, 0x0120,
+	0x2009, 0x0001, 0x0804, 0x33bc, 0x60d8, 0xd0ac, 0x1130, 0xd09c,
+	0x1120, 0x2009, 0x0005, 0x0804, 0x33bc, 0x080c, 0x4878, 0x1120,
+	0x2009, 0x0002, 0x0804, 0x33bc, 0x7984, 0x9192, 0x0021, 0x1a04,
+	0x33bf, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019,
+	0x702a, 0xaf60, 0x7736, 0x080c, 0x48c1, 0x701f, 0x459e, 0x7880,
+	0x9086, 0x006e, 0x0110, 0x701f, 0x4e43, 0x0005, 0x2009, 0x0080,
+	0x080c, 0x6270, 0x1118, 0x080c, 0x6667, 0x0120, 0x2021, 0x400a,
+	0x0804, 0x338c, 0x00d6, 0x0096, 0xa964, 0xaa6c, 0xab70, 0xac74,
+	0xad78, 0xae7c, 0xa884, 0x90be, 0x0100, 0x0904, 0x4637, 0x90be,
+	0x0112, 0x0904, 0x4637, 0x90be, 0x0113, 0x0904, 0x4637, 0x90be,
+	0x0114, 0x0904, 0x4637, 0x90be, 0x0117, 0x0904, 0x4637, 0x90be,
+	0x011a, 0x0904, 0x4637, 0x90be, 0x011c, 0x0904, 0x4637, 0x90be,
+	0x0121, 0x0904, 0x461e, 0x90be, 0x0131, 0x0904, 0x461e, 0x90be,
+	0x0171, 0x0904, 0x4637, 0x90be, 0x0173, 0x0904, 0x4637, 0x90be,
+	0x01a1, 0x1128, 0xa894, 0x8007, 0xa896, 0x0804, 0x4642, 0x90be,
+	0x0212, 0x0904, 0x462b, 0x90be, 0x0213, 0x05e8, 0x90be, 0x0214,
+	0x0500, 0x90be, 0x0217, 0x0188, 0x90be, 0x021a, 0x1120, 0xa89c,
+	0x8007, 0xa89e, 0x04e0, 0x90be, 0x021f, 0x05c8, 0x90be, 0x0300,
+	0x05b0, 0x009e, 0x00de, 0x0804, 0x33bf, 0x7028, 0x9080, 0x0010,
+	0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0007, 0x080c,
+	0x4680, 0x7028, 0x9080, 0x000e, 0x2098, 0x20a0, 0x7034, 0x20e0,
+	0x20e8, 0x20a9, 0x0001, 0x080c, 0x4680, 0x00c8, 0x7028, 0x9080,
+	0x000c, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001,
+	0x080c, 0x468d, 0x00b8, 0x7028, 0x9080, 0x000e, 0x2098, 0x20a0,
+	0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x468d, 0x7028,
 	0x9080, 0x000c, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9,
-	0x0001, 0x080c, 0x4686, 0x00b8, 0x7028, 0x9080, 0x000e, 0x2098,
-	0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x4686,
-	0x7028, 0x9080, 0x000c, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8,
-	0x20a9, 0x0001, 0x04f1, 0x00c6, 0x080c, 0x4871, 0x0550, 0xa868,
-	0xc0fd, 0xa86a, 0xa867, 0x0119, 0x9006, 0xa882, 0xa87f, 0x0020,
-	0xa88b, 0x0001, 0x810b, 0xa9ae, 0xa8b2, 0xaab6, 0xabba, 0xacbe,
-	0xadc2, 0xa9c6, 0xa8ca, 0x00ce, 0x009e, 0x00de, 0xa866, 0xa822,
-	0xa868, 0xc0fd, 0xa86a, 0xa804, 0x2048, 0x080c, 0xb9bc, 0x1120,
-	0x2009, 0x0003, 0x0804, 0x33b5, 0x7007, 0x0003, 0x701f, 0x4670,
-	0x0005, 0x00ce, 0x009e, 0x00de, 0x2009, 0x0002, 0x0804, 0x33b5,
-	0xa820, 0x9086, 0x8001, 0x1904, 0x3383, 0x2009, 0x0004, 0x0804,
-	0x33b5, 0x0016, 0x0026, 0x3510, 0x20a9, 0x0002, 0x4002, 0x4104,
-	0x4004, 0x8211, 0x1dc8, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026,
-	0x0036, 0x0046, 0x3520, 0x20a9, 0x0004, 0x4002, 0x4304, 0x4204,
-	0x4104, 0x4004, 0x8421, 0x1db8, 0x004e, 0x003e, 0x002e, 0x001e,
-	0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x33b5, 0x60d8,
-	0xd0ac, 0x1160, 0xd09c, 0x0120, 0x2009, 0x0016, 0x0804, 0x33b5,
-	0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, 0x33b5, 0x7984, 0x78a8,
-	0x2040, 0x080c, 0x9b4b, 0x1120, 0x9182, 0x007f, 0x0a04, 0x33b8,
-	0x9186, 0x00ff, 0x0904, 0x33b8, 0x9182, 0x0800, 0x1a04, 0x33b8,
-	0x7a8c, 0x7b88, 0x6078, 0x9306, 0x1140, 0x607c, 0x924e, 0x0904,
-	0x33b8, 0x99cc, 0xff00, 0x0904, 0x33b8, 0x0126, 0x2091, 0x8000,
-	0x0026, 0x2011, 0x8008, 0x080c, 0x6684, 0x002e, 0x0140, 0x918d,
-	0x8000, 0x080c, 0x66ce, 0x1118, 0x2001, 0x4009, 0x0458, 0x080c,
-	0x478b, 0x0560, 0x90c6, 0x4000, 0x1170, 0x00c6, 0x0006, 0x900e,
-	0x080c, 0x6558, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d,
-	0x000e, 0x00ce, 0x00b8, 0x90c6, 0x4007, 0x1110, 0x2408, 0x0090,
-	0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0060, 0x90c6, 0x4009,
-	0x1108, 0x0040, 0x90c6, 0x4006, 0x1108, 0x0020, 0x2001, 0x4005,
-	0x2009, 0x000a, 0x2020, 0x012e, 0x0804, 0x3385, 0x2b00, 0x7026,
-	0x0016, 0x00b6, 0x00c6, 0x00e6, 0x2c70, 0x080c, 0x9c3d, 0x0904,
-	0x4758, 0x2b00, 0x6012, 0x080c, 0xbcc0, 0x2e58, 0x00ee, 0x00e6,
-	0x00c6, 0x080c, 0x4871, 0x00ce, 0x2b70, 0x1158, 0x080c, 0x9bcc,
-	0x00ee, 0x00ce, 0x00be, 0x001e, 0x012e, 0x2009, 0x0002, 0x0804,
-	0x33b5, 0x900e, 0xa966, 0xa96a, 0x2900, 0x6016, 0xa932, 0xa868,
-	0xc0fd, 0xd88c, 0x0108, 0xc0f5, 0xa86a, 0x080c, 0x3003, 0x6023,
-	0x0001, 0x9006, 0x080c, 0x61a6, 0x2001, 0x0002, 0x080c, 0x61ba,
-	0x2009, 0x0002, 0x080c, 0x9c6a, 0x78a8, 0xd094, 0x0138, 0x00ee,
-	0x7024, 0x00e6, 0x2058, 0xb8c4, 0xc08d, 0xb8c6, 0x9085, 0x0001,
-	0x00ee, 0x00ce, 0x00be, 0x001e, 0x012e, 0x1120, 0x2009, 0x0003,
-	0x0804, 0x33b5, 0x7007, 0x0003, 0x701f, 0x4767, 0x0005, 0xa830,
-	0x2008, 0x918e, 0xdead, 0x1120, 0x2021, 0x4009, 0x0804, 0x3385,
-	0x9086, 0x0100, 0x7024, 0x2058, 0x1138, 0x2009, 0x0004, 0xba04,
-	0x9294, 0x00ff, 0x0804, 0x52e3, 0x900e, 0xa868, 0xd0f4, 0x1904,
-	0x3383, 0x080c, 0x6558, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108,
-	0xc18d, 0x0804, 0x3383, 0x00e6, 0x00d6, 0x0096, 0x83ff, 0x0904,
-	0x47d3, 0x902e, 0x080c, 0x9b4b, 0x0130, 0x9026, 0x20a9, 0x0800,
-	0x2071, 0x1000, 0x0030, 0x2021, 0x007f, 0x20a9, 0x0781, 0x2071,
-	0x107f, 0x2e04, 0x9005, 0x11b0, 0x2100, 0x9406, 0x15e8, 0x2428,
-	0x94ce, 0x007f, 0x1120, 0x92ce, 0xfffd, 0x1528, 0x0030, 0x94ce,
-	0x0080, 0x1130, 0x92ce, 0xfffc, 0x11f0, 0x93ce, 0x00ff, 0x11d8,
-	0xc5fd, 0x0450, 0x2058, 0xbf10, 0x2700, 0x9306, 0x11b8, 0xbe14,
-	0x2600, 0x9206, 0x1198, 0x2400, 0x9106, 0x1150, 0xd884, 0x0568,
-	0xd894, 0x1558, 0x080c, 0x6660, 0x1540, 0x2001, 0x4000, 0x0430,
-	0x2001, 0x4007, 0x0418, 0x2001, 0x4006, 0x0400, 0x2400, 0x9106,
-	0x1158, 0xbe14, 0x87ff, 0x1128, 0x86ff, 0x0948, 0x080c, 0x9b4b,
-	0x1930, 0x2001, 0x4008, 0x0090, 0x8420, 0x8e70, 0x1f04, 0x47a1,
-	0x85ff, 0x1130, 0x2001, 0x4009, 0x0048, 0x2001, 0x0001, 0x0030,
-	0x080c, 0x6209, 0x1dd0, 0xbb12, 0xba16, 0x9006, 0x9005, 0x009e,
-	0x00de, 0x00ee, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804,
-	0x33b5, 0x080c, 0x4871, 0x1120, 0x2009, 0x0002, 0x0804, 0x33b5,
-	0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x7884, 0x9005, 0x0904,
-	0x33b8, 0x9096, 0x00ff, 0x0120, 0x9092, 0x0004, 0x1a04, 0x33b8,
-	0x2010, 0x2918, 0x080c, 0x2f9d, 0x1120, 0x2009, 0x0003, 0x0804,
-	0x33b5, 0x7007, 0x0003, 0x701f, 0x4826, 0x0005, 0xa830, 0x9086,
-	0x0100, 0x1904, 0x3383, 0x2009, 0x0004, 0x0804, 0x33b5, 0x7984,
-	0x080c, 0x9b4b, 0x1120, 0x9182, 0x007f, 0x0a04, 0x33b8, 0x9186,
-	0x00ff, 0x0904, 0x33b8, 0x9182, 0x0800, 0x1a04, 0x33b8, 0x2001,
-	0x9000, 0x080c, 0x533e, 0x1904, 0x33b5, 0x0804, 0x3383, 0xa998,
-	0x080c, 0x9b4b, 0x1118, 0x9182, 0x007f, 0x0280, 0x9186, 0x00ff,
-	0x0168, 0x9182, 0x0800, 0x1250, 0x2001, 0x9000, 0x080c, 0x533e,
-	0x11a8, 0x0060, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006,
-	0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000,
-	0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x2009, 0x000a,
-	0x0c48, 0x080c, 0x1022, 0x0198, 0x9006, 0xa802, 0x7014, 0x9005,
-	0x1120, 0x2900, 0x7016, 0x701a, 0x0040, 0x7018, 0xa802, 0x0086,
-	0x2040, 0x2900, 0xa006, 0x701a, 0x008e, 0x9085, 0x0001, 0x0005,
-	0x7984, 0x080c, 0x6269, 0x1130, 0x7e88, 0x9684, 0x3fff, 0x9082,
-	0x4000, 0x0208, 0x905e, 0x8bff, 0x0005, 0xa998, 0x080c, 0x6269,
-	0x1130, 0xae9c, 0x9684, 0x3fff, 0x9082, 0x4000, 0x0208, 0x905e,
-	0x8bff, 0x0005, 0xae98, 0x0008, 0x7e84, 0x2608, 0x080c, 0x6269,
-	0x1108, 0x0008, 0x905e, 0x8bff, 0x0005, 0x0016, 0x7114, 0x81ff,
-	0x0128, 0x2148, 0xa904, 0x080c, 0x1054, 0x0cc8, 0x7116, 0x711a,
-	0x001e, 0x0005, 0x2031, 0x0001, 0x0010, 0x2031, 0x0000, 0x2061,
-	0x18ae, 0x2c44, 0xa66a, 0xa17a, 0xa772, 0xa076, 0xa28e, 0xa392,
-	0xa496, 0xa59a, 0x080c, 0x110c, 0x7007, 0x0002, 0x701f, 0x3383,
-	0x0005, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2079, 0x0000, 0x2001,
-	0x18a6, 0x2004, 0x9005, 0x1190, 0x0e04, 0x48ee, 0x7a36, 0x7833,
-	0x0012, 0x7a82, 0x7b86, 0x7c8a, 0x2091, 0x4080, 0x2001, 0x0089,
-	0x2004, 0xd084, 0x190c, 0x11be, 0x0804, 0x4954, 0x0016, 0x0086,
-	0x0096, 0x00c6, 0x00e6, 0x2071, 0x1894, 0x7044, 0x9005, 0x1540,
-	0x7148, 0x9182, 0x0010, 0x0288, 0x7038, 0x2060, 0x080c, 0x1022,
-	0x0904, 0x494c, 0xa84b, 0x0000, 0x2900, 0x7046, 0x2001, 0x0002,
-	0x9080, 0x1cf7, 0x2005, 0xa846, 0x0098, 0x7038, 0x90e0, 0x0004,
-	0x2001, 0x18b0, 0x9c82, 0x18f0, 0x0210, 0x2061, 0x18b0, 0x2c00,
-	0x703a, 0x7148, 0x81ff, 0x1108, 0x703e, 0x8108, 0x714a, 0x0460,
-	0x7148, 0x8108, 0x714a, 0x7044, 0x2040, 0xa144, 0x2105, 0x0016,
-	0x908a, 0x0036, 0x1a0c, 0x0d65, 0x2060, 0x001e, 0x8108, 0x2105,
-	0x9005, 0xa146, 0x1520, 0x080c, 0x1022, 0x1130, 0x8109, 0xa946,
-	0x7148, 0x8109, 0x714a, 0x00d8, 0x9006, 0xa806, 0xa84a, 0xa046,
-	0x2800, 0xa802, 0x2900, 0xa006, 0x7046, 0x2001, 0x0002, 0x9080,
-	0x1cf7, 0x2005, 0xa846, 0x0058, 0x2262, 0x6306, 0x640a, 0x00ee,
-	0x00ce, 0x009e, 0x008e, 0x001e, 0x012e, 0x00fe, 0x0005, 0x2c00,
-	0x9082, 0x001b, 0x0002, 0x4976, 0x4976, 0x4978, 0x4976, 0x4976,
-	0x4976, 0x497c, 0x4976, 0x4976, 0x4976, 0x4980, 0x4976, 0x4976,
-	0x4976, 0x4984, 0x4976, 0x4976, 0x4976, 0x4988, 0x4976, 0x4976,
-	0x4976, 0x498c, 0x4976, 0x4976, 0x4976, 0x4991, 0x080c, 0x0d65,
-	0xa276, 0xa37a, 0xa47e, 0x0898, 0xa286, 0xa38a, 0xa48e, 0x0878,
-	0xa296, 0xa39a, 0xa49e, 0x0858, 0xa2a6, 0xa3aa, 0xa4ae, 0x0838,
-	0xa2b6, 0xa3ba, 0xa4be, 0x0818, 0xa2c6, 0xa3ca, 0xa4ce, 0x0804,
-	0x494f, 0xa2d6, 0xa3da, 0xa4de, 0x0804, 0x494f, 0x00e6, 0x2071,
-	0x1894, 0x7048, 0x9005, 0x0904, 0x4a28, 0x0126, 0x2091, 0x8000,
-	0x0e04, 0x4a27, 0x00f6, 0x2079, 0x0000, 0x00c6, 0x0096, 0x0086,
-	0x0076, 0x9006, 0x2038, 0x7040, 0x2048, 0x9005, 0x0500, 0xa948,
-	0x2105, 0x0016, 0x908a, 0x0036, 0x1a0c, 0x0d65, 0x2060, 0x001e,
-	0x8108, 0x2105, 0x9005, 0xa94a, 0x1904, 0x4a2a, 0xa804, 0x9005,
-	0x090c, 0x0d65, 0x7042, 0x2938, 0x2040, 0xa003, 0x0000, 0x2001,
-	0x0002, 0x9080, 0x1cf7, 0x2005, 0xa04a, 0x0804, 0x4a2a, 0x703c,
-	0x2060, 0x2c14, 0x6304, 0x6408, 0x650c, 0x2200, 0x7836, 0x7833,
-	0x0012, 0x7882, 0x2300, 0x7886, 0x2400, 0x788a, 0x2091, 0x4080,
-	0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11be, 0x87ff, 0x0118,
-	0x2748, 0x080c, 0x1054, 0x7048, 0x8001, 0x704a, 0x9005, 0x1170,
-	0x7040, 0x2048, 0x9005, 0x0128, 0x080c, 0x1054, 0x9006, 0x7042,
-	0x7046, 0x703b, 0x18b0, 0x703f, 0x18b0, 0x0420, 0x7040, 0x9005,
-	0x1508, 0x7238, 0x2c00, 0x9206, 0x0148, 0x9c80, 0x0004, 0x90fa,
-	0x18f0, 0x0210, 0x2001, 0x18b0, 0x703e, 0x00a0, 0x9006, 0x703e,
-	0x703a, 0x7044, 0x9005, 0x090c, 0x0d65, 0x2048, 0xa800, 0x9005,
-	0x1de0, 0x2900, 0x7042, 0x2001, 0x0002, 0x9080, 0x1cf7, 0x2005,
-	0xa84a, 0x0000, 0x007e, 0x008e, 0x009e, 0x00ce, 0x00fe, 0x012e,
-	0x00ee, 0x0005, 0x2c00, 0x9082, 0x001b, 0x0002, 0x4a49, 0x4a49,
-	0x4a4b, 0x4a49, 0x4a49, 0x4a49, 0x4a50, 0x4a49, 0x4a49, 0x4a49,
-	0x4a55, 0x4a49, 0x4a49, 0x4a49, 0x4a5a, 0x4a49, 0x4a49, 0x4a49,
-	0x4a5f, 0x4a49, 0x4a49, 0x4a49, 0x4a64, 0x4a49, 0x4a49, 0x4a49,
-	0x4a69, 0x080c, 0x0d65, 0xaa74, 0xab78, 0xac7c, 0x0804, 0x49d5,
-	0xaa84, 0xab88, 0xac8c, 0x0804, 0x49d5, 0xaa94, 0xab98, 0xac9c,
-	0x0804, 0x49d5, 0xaaa4, 0xaba8, 0xacac, 0x0804, 0x49d5, 0xaab4,
-	0xabb8, 0xacbc, 0x0804, 0x49d5, 0xaac4, 0xabc8, 0xaccc, 0x0804,
-	0x49d5, 0xaad4, 0xabd8, 0xacdc, 0x0804, 0x49d5, 0x0026, 0x080c,
-	0x5386, 0xd0c4, 0x0120, 0x2011, 0x8014, 0x080c, 0x48d1, 0x002e,
-	0x0005, 0x81ff, 0x1904, 0x33b5, 0x0126, 0x2091, 0x8000, 0x6030,
-	0xc08d, 0xc085, 0xc0ac, 0x6032, 0x080c, 0x70ac, 0x1158, 0x080c,
-	0x73ac, 0x080c, 0x5cd5, 0x9085, 0x0001, 0x080c, 0x70f3, 0x080c,
-	0x6fdd, 0x0010, 0x080c, 0x5b90, 0x012e, 0x0804, 0x3383, 0x81ff,
-	0x0120, 0x2009, 0x0001, 0x0804, 0x33b5, 0x080c, 0x539a, 0x0120,
-	0x2009, 0x0007, 0x0804, 0x33b5, 0x080c, 0x6658, 0x0120, 0x2009,
-	0x0008, 0x0804, 0x33b5, 0x0026, 0x2011, 0x0010, 0x080c, 0x6684,
-	0x002e, 0x0140, 0x7984, 0x080c, 0x66ce, 0x1120, 0x2009, 0x4009,
-	0x0804, 0x33b5, 0x080c, 0x317a, 0x0128, 0x7984, 0x080c, 0x6209,
-	0x1904, 0x33b8, 0x080c, 0x48a4, 0x0904, 0x33b8, 0x2b00, 0x7026,
-	0x080c, 0x6660, 0x7888, 0x1170, 0x9084, 0x0005, 0x1158, 0x900e,
-	0x080c, 0x6558, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d,
-	0x0804, 0x3383, 0x080c, 0x4871, 0x0904, 0x33b5, 0x9006, 0xa866,
-	0xa832, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xba5e, 0x0904, 0x33b5,
-	0x7888, 0xd094, 0x0118, 0xb8c4, 0xc08d, 0xb8c6, 0x7007, 0x0003,
-	0x701f, 0x4b3f, 0x0005, 0x2061, 0x1800, 0x080c, 0x539a, 0x2009,
-	0x0007, 0x1578, 0x080c, 0x6658, 0x0118, 0x2009, 0x0008, 0x0448,
-	0x080c, 0x317a, 0x0120, 0xa998, 0x080c, 0x6209, 0x1530, 0x080c,
-	0x48a2, 0x0518, 0x080c, 0x6660, 0xa89c, 0x1168, 0x9084, 0x0005,
-	0x1150, 0x900e, 0x080c, 0x6558, 0x1108, 0xc185, 0xb800, 0xd0bc,
-	0x0108, 0xc18d, 0x00d0, 0xa868, 0xc0fc, 0xa86a, 0x080c, 0xba5e,
-	0x11e0, 0xa89c, 0xd094, 0x0118, 0xb8c4, 0xc08d, 0xb8c6, 0x2009,
-	0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e,
-	0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0xa99a,
-	0x9006, 0x918d, 0x0001, 0x2008, 0x0005, 0x9006, 0x0005, 0xa830,
-	0x2008, 0x918e, 0xdead, 0x1120, 0x2021, 0x4009, 0x0804, 0x3385,
-	0x9086, 0x0100, 0x7024, 0x2058, 0x1110, 0x0804, 0x52e3, 0x900e,
-	0x080c, 0x6558, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d,
-	0x0804, 0x3383, 0x080c, 0x539a, 0x0120, 0x2009, 0x0007, 0x0804,
-	0x33b5, 0x7f84, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x080c, 0x4871,
-	0x1120, 0x2009, 0x0002, 0x0804, 0x33b5, 0x900e, 0x2130, 0x7126,
-	0x7132, 0xa860, 0x20e8, 0x7036, 0xa85c, 0x9080, 0x0005, 0x702a,
-	0x20a0, 0x080c, 0x6269, 0x1904, 0x4bdd, 0x080c, 0x6660, 0x0120,
-	0x080c, 0x6668, 0x1904, 0x4bdd, 0x080c, 0x6658, 0x1130, 0x080c,
-	0x6558, 0x1118, 0xd79c, 0x0904, 0x4bdd, 0xd794, 0x1110, 0xd784,
-	0x01a8, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098, 0x3400,
-	0xd794, 0x0160, 0x20a9, 0x0008, 0x4003, 0x2098, 0x20a0, 0x3d00,
-	0x20e0, 0x20a9, 0x0002, 0x080c, 0x4686, 0x0048, 0x20a9, 0x0004,
-	0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x080c, 0x4686, 0x4104,
-	0xd794, 0x0528, 0xb8b4, 0x20e0, 0xb8b8, 0x2060, 0x9c80, 0x0000,
-	0x2098, 0x20a9, 0x0002, 0x4003, 0x9c80, 0x0003, 0x2098, 0x20a9,
-	0x0001, 0x4005, 0x9c80, 0x0004, 0x2098, 0x3400, 0x20a9, 0x0002,
-	0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x080c, 0x4679, 0x9c80,
-	0x0026, 0x2098, 0xb8b4, 0x20e0, 0x20a9, 0x0002, 0x4003, 0xd794,
-	0x0110, 0x96b0, 0x000b, 0x96b0, 0x0005, 0x8108, 0x080c, 0x9b4b,
-	0x0118, 0x9186, 0x0800, 0x0040, 0xd78c, 0x0120, 0x9186, 0x0800,
-	0x0170, 0x0018, 0x9186, 0x007e, 0x0150, 0xd794, 0x0118, 0x9686,
-	0x0020, 0x0010, 0x9686, 0x0028, 0x0150, 0x0804, 0x4b79, 0x86ff,
-	0x1120, 0x7124, 0x810b, 0x0804, 0x3383, 0x7033, 0x0001, 0x7122,
-	0x7024, 0x9600, 0x7026, 0x772e, 0x2061, 0x18ae, 0x2c44, 0xa06b,
-	0x0000, 0xa67a, 0x7034, 0xa072, 0x7028, 0xa076, 0xa28e, 0xa392,
-	0xa496, 0xa59a, 0x080c, 0x110c, 0x7007, 0x0002, 0x701f, 0x4c19,
-	0x0005, 0x7030, 0x9005, 0x1180, 0x7120, 0x7028, 0x20a0, 0x772c,
-	0x9036, 0x7034, 0x20e8, 0x2061, 0x18ae, 0x2c44, 0xa28c, 0xa390,
-	0xa494, 0xa598, 0x0804, 0x4b79, 0x7124, 0x810b, 0x0804, 0x3383,
-	0x2029, 0x007e, 0x7984, 0x7a88, 0x7b8c, 0x7c98, 0x9184, 0xff00,
-	0x8007, 0x90e2, 0x0020, 0x0a04, 0x33b8, 0x9502, 0x0a04, 0x33b8,
-	0x9184, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x33b8, 0x9502, 0x0a04,
-	0x33b8, 0x9284, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x33b8,
-	0x9502, 0x0a04, 0x33b8, 0x9284, 0x00ff, 0x90e2, 0x0020, 0x0a04,
-	0x33b8, 0x9502, 0x0a04, 0x33b8, 0x9384, 0xff00, 0x8007, 0x90e2,
-	0x0020, 0x0a04, 0x33b8, 0x9502, 0x0a04, 0x33b8, 0x9384, 0x00ff,
-	0x90e2, 0x0020, 0x0a04, 0x33b8, 0x9502, 0x0a04, 0x33b8, 0x9484,
-	0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x33b8, 0x9502, 0x0a04,
-	0x33b8, 0x9484, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x33b8, 0x9502,
-	0x0a04, 0x33b8, 0x2061, 0x195a, 0x6102, 0x6206, 0x630a, 0x640e,
-	0x0804, 0x3383, 0x0006, 0x080c, 0x5386, 0xd0cc, 0x000e, 0x0005,
-	0x0006, 0x080c, 0x538a, 0xd0bc, 0x000e, 0x0005, 0x6170, 0x7a84,
-	0x6300, 0x82ff, 0x1118, 0x7986, 0x0804, 0x3383, 0x83ff, 0x1904,
-	0x33b8, 0x2001, 0xfff0, 0x9200, 0x1a04, 0x33b8, 0x2019, 0xffff,
-	0x6074, 0x9302, 0x9200, 0x0a04, 0x33b8, 0x7986, 0x6272, 0x0804,
-	0x3383, 0x080c, 0x539a, 0x1904, 0x33b5, 0x7c88, 0x7d84, 0x7e98,
-	0x7f8c, 0x080c, 0x4871, 0x0904, 0x33b5, 0x900e, 0x901e, 0x7326,
-	0x7332, 0xa860, 0x20e8, 0x7036, 0xa85c, 0x9080, 0x0003, 0x702a,
-	0x20a0, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x6660,
-	0x0118, 0x080c, 0x6668, 0x1148, 0x20a9, 0x0001, 0xb814, 0x4004,
-	0xb810, 0x4004, 0x4104, 0x9398, 0x0003, 0x8108, 0x9182, 0x0800,
-	0x0120, 0x9386, 0x003c, 0x0170, 0x0c20, 0x83ff, 0x1148, 0x7224,
-	0x900e, 0x2001, 0x0003, 0x080c, 0x83f1, 0x2208, 0x0804, 0x3383,
-	0x7033, 0x0001, 0x7122, 0x7024, 0x9300, 0x7026, 0x2061, 0x18ae,
-	0x2c44, 0xa06b, 0x0000, 0xa37a, 0x7028, 0xa076, 0x7034, 0xa072,
-	0xa48e, 0xa592, 0xa696, 0xa79a, 0x080c, 0x110c, 0x7007, 0x0002,
-	0x701f, 0x4d0b, 0x0005, 0x7030, 0x9005, 0x1178, 0x7120, 0x7028,
-	0x20a0, 0x901e, 0x7034, 0x20e8, 0x2061, 0x18ae, 0x2c44, 0xa48c,
-	0xa590, 0xa694, 0xa798, 0x0804, 0x4cc9, 0x7224, 0x900e, 0x2001,
-	0x0003, 0x080c, 0x83f1, 0x2208, 0x0804, 0x3383, 0x00f6, 0x00e6,
-	0x080c, 0x539a, 0x2009, 0x0007, 0x1904, 0x4d9e, 0x2071, 0x1894,
-	0x745c, 0x84ff, 0x2009, 0x000e, 0x1904, 0x4d9e, 0xac9c, 0xad98,
-	0xaea4, 0xafa0, 0x0096, 0x080c, 0x103b, 0x2009, 0x0002, 0x0904,
-	0x4d9e, 0x2900, 0x705e, 0x900e, 0x901e, 0x7356, 0x7362, 0xa860,
-	0x7066, 0xa85c, 0x9080, 0x0003, 0x705a, 0x20a0, 0x91d8, 0x1000,
-	0x2b5c, 0x8bff, 0x0178, 0x080c, 0x6660, 0x0118, 0x080c, 0x6668,
-	0x1148, 0xb814, 0x20a9, 0x0001, 0x4004, 0xb810, 0x4004, 0x4104,
-	0x9398, 0x0003, 0x8108, 0x9182, 0x0800, 0x0120, 0x9386, 0x003c,
-	0x01e8, 0x0c20, 0x83ff, 0x11c0, 0x7254, 0x900e, 0x2001, 0x0003,
-	0x080c, 0x83f1, 0x2208, 0x009e, 0xa897, 0x4000, 0xa99a, 0x715c,
-	0x81ff, 0x090c, 0x0d65, 0x2148, 0x080c, 0x1054, 0x9006, 0x705e,
-	0x918d, 0x0001, 0x2008, 0x0418, 0x7063, 0x0001, 0x7152, 0x7054,
-	0x9300, 0x7056, 0x2061, 0x18af, 0x2c44, 0xa37a, 0x7058, 0xa076,
-	0x7064, 0xa072, 0xa48e, 0xa592, 0xa696, 0xa79a, 0xa09f, 0x4daa,
-	0x000e, 0xa0a2, 0x080c, 0x110c, 0x9006, 0x0048, 0x009e, 0xa897,
-	0x4005, 0xa99a, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x00ee,
-	0x00fe, 0x0005, 0x00f6, 0xa0a0, 0x904d, 0x090c, 0x0d65, 0x00e6,
-	0x2071, 0x1894, 0xa06c, 0x908e, 0x0100, 0x0138, 0xa87b, 0x0030,
-	0xa883, 0x0000, 0xa897, 0x4002, 0x00d8, 0x7060, 0x9005, 0x1158,
-	0x7150, 0x7058, 0x20a0, 0x901e, 0x7064, 0x20e8, 0xa48c, 0xa590,
-	0xa694, 0xa798, 0x0428, 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897,
-	0x4000, 0x7254, 0x900e, 0x2001, 0x0003, 0x080c, 0x83f1, 0xaa9a,
-	0x715c, 0x81ff, 0x090c, 0x0d65, 0x2148, 0x080c, 0x1054, 0x705f,
-	0x0000, 0xa0a0, 0x2048, 0x0126, 0x2091, 0x8000, 0x080c, 0x698f,
-	0x012e, 0xa09f, 0x0000, 0xa0a3, 0x0000, 0x00ee, 0x00fe, 0x0005,
-	0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x6660, 0x0118,
-	0x080c, 0x6668, 0x1148, 0xb814, 0x20a9, 0x0001, 0x4004, 0xb810,
+	0x0001, 0x04f1, 0x00c6, 0x080c, 0x4878, 0x0550, 0xa868, 0xc0fd,
+	0xa86a, 0xa867, 0x0119, 0x9006, 0xa882, 0xa87f, 0x0020, 0xa88b,
+	0x0001, 0x810b, 0xa9ae, 0xa8b2, 0xaab6, 0xabba, 0xacbe, 0xadc2,
+	0xa9c6, 0xa8ca, 0x00ce, 0x009e, 0x00de, 0xa866, 0xa822, 0xa868,
+	0xc0fd, 0xa86a, 0xa804, 0x2048, 0x080c, 0xb9d7, 0x1120, 0x2009,
+	0x0003, 0x0804, 0x33bc, 0x7007, 0x0003, 0x701f, 0x4677, 0x0005,
+	0x00ce, 0x009e, 0x00de, 0x2009, 0x0002, 0x0804, 0x33bc, 0xa820,
+	0x9086, 0x8001, 0x1904, 0x338a, 0x2009, 0x0004, 0x0804, 0x33bc,
+	0x0016, 0x0026, 0x3510, 0x20a9, 0x0002, 0x4002, 0x4104, 0x4004,
+	0x8211, 0x1dc8, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x0036,
+	0x0046, 0x3520, 0x20a9, 0x0004, 0x4002, 0x4304, 0x4204, 0x4104,
+	0x4004, 0x8421, 0x1db8, 0x004e, 0x003e, 0x002e, 0x001e, 0x0005,
+	0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x33bc, 0x60d8, 0xd0ac,
+	0x1160, 0xd09c, 0x0120, 0x2009, 0x0016, 0x0804, 0x33bc, 0xd09c,
+	0x1120, 0x2009, 0x0005, 0x0804, 0x33bc, 0x7984, 0x78a8, 0x2040,
+	0x080c, 0x9b66, 0x1120, 0x9182, 0x007f, 0x0a04, 0x33bf, 0x9186,
+	0x00ff, 0x0904, 0x33bf, 0x9182, 0x0800, 0x1a04, 0x33bf, 0x7a8c,
+	0x7b88, 0x6078, 0x9306, 0x1140, 0x607c, 0x924e, 0x0904, 0x33bf,
+	0x99cc, 0xff00, 0x0904, 0x33bf, 0x0126, 0x2091, 0x8000, 0x0026,
+	0x2011, 0x8008, 0x080c, 0x668b, 0x002e, 0x0140, 0x918d, 0x8000,
+	0x080c, 0x66d5, 0x1118, 0x2001, 0x4009, 0x0458, 0x080c, 0x4792,
+	0x0560, 0x90c6, 0x4000, 0x1170, 0x00c6, 0x0006, 0x900e, 0x080c,
+	0x655f, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x000e,
+	0x00ce, 0x00b8, 0x90c6, 0x4007, 0x1110, 0x2408, 0x0090, 0x90c6,
+	0x4008, 0x1118, 0x2708, 0x2610, 0x0060, 0x90c6, 0x4009, 0x1108,
+	0x0040, 0x90c6, 0x4006, 0x1108, 0x0020, 0x2001, 0x4005, 0x2009,
+	0x000a, 0x2020, 0x012e, 0x0804, 0x338c, 0x2b00, 0x7026, 0x0016,
+	0x00b6, 0x00c6, 0x00e6, 0x2c70, 0x080c, 0x9c58, 0x0904, 0x475f,
+	0x2b00, 0x6012, 0x080c, 0xbcdb, 0x2e58, 0x00ee, 0x00e6, 0x00c6,
+	0x080c, 0x4878, 0x00ce, 0x2b70, 0x1158, 0x080c, 0x9be7, 0x00ee,
+	0x00ce, 0x00be, 0x001e, 0x012e, 0x2009, 0x0002, 0x0804, 0x33bc,
+	0x900e, 0xa966, 0xa96a, 0x2900, 0x6016, 0xa932, 0xa868, 0xc0fd,
+	0xd88c, 0x0108, 0xc0f5, 0xa86a, 0x080c, 0x3006, 0x6023, 0x0001,
+	0x9006, 0x080c, 0x61ad, 0x2001, 0x0002, 0x080c, 0x61c1, 0x2009,
+	0x0002, 0x080c, 0x9c85, 0x78a8, 0xd094, 0x0138, 0x00ee, 0x7024,
+	0x00e6, 0x2058, 0xb8c4, 0xc08d, 0xb8c6, 0x9085, 0x0001, 0x00ee,
+	0x00ce, 0x00be, 0x001e, 0x012e, 0x1120, 0x2009, 0x0003, 0x0804,
+	0x33bc, 0x7007, 0x0003, 0x701f, 0x476e, 0x0005, 0xa830, 0x2008,
+	0x918e, 0xdead, 0x1120, 0x2021, 0x4009, 0x0804, 0x338c, 0x9086,
+	0x0100, 0x7024, 0x2058, 0x1138, 0x2009, 0x0004, 0xba04, 0x9294,
+	0x00ff, 0x0804, 0x52ea, 0x900e, 0xa868, 0xd0f4, 0x1904, 0x338a,
+	0x080c, 0x655f, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d,
+	0x0804, 0x338a, 0x00e6, 0x00d6, 0x0096, 0x83ff, 0x0904, 0x47da,
+	0x902e, 0x080c, 0x9b66, 0x0130, 0x9026, 0x20a9, 0x0800, 0x2071,
+	0x1000, 0x0030, 0x2021, 0x007f, 0x20a9, 0x0781, 0x2071, 0x107f,
+	0x2e04, 0x9005, 0x11b0, 0x2100, 0x9406, 0x15e8, 0x2428, 0x94ce,
+	0x007f, 0x1120, 0x92ce, 0xfffd, 0x1528, 0x0030, 0x94ce, 0x0080,
+	0x1130, 0x92ce, 0xfffc, 0x11f0, 0x93ce, 0x00ff, 0x11d8, 0xc5fd,
+	0x0450, 0x2058, 0xbf10, 0x2700, 0x9306, 0x11b8, 0xbe14, 0x2600,
+	0x9206, 0x1198, 0x2400, 0x9106, 0x1150, 0xd884, 0x0568, 0xd894,
+	0x1558, 0x080c, 0x6667, 0x1540, 0x2001, 0x4000, 0x0430, 0x2001,
+	0x4007, 0x0418, 0x2001, 0x4006, 0x0400, 0x2400, 0x9106, 0x1158,
+	0xbe14, 0x87ff, 0x1128, 0x86ff, 0x0948, 0x080c, 0x9b66, 0x1930,
+	0x2001, 0x4008, 0x0090, 0x8420, 0x8e70, 0x1f04, 0x47a8, 0x85ff,
+	0x1130, 0x2001, 0x4009, 0x0048, 0x2001, 0x0001, 0x0030, 0x080c,
+	0x6210, 0x1dd0, 0xbb12, 0xba16, 0x9006, 0x9005, 0x009e, 0x00de,
+	0x00ee, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x33bc,
+	0x080c, 0x4878, 0x1120, 0x2009, 0x0002, 0x0804, 0x33bc, 0xa867,
+	0x0000, 0xa868, 0xc0fd, 0xa86a, 0x7884, 0x9005, 0x0904, 0x33bf,
+	0x9096, 0x00ff, 0x0120, 0x9092, 0x0004, 0x1a04, 0x33bf, 0x2010,
+	0x2918, 0x080c, 0x2fa0, 0x1120, 0x2009, 0x0003, 0x0804, 0x33bc,
+	0x7007, 0x0003, 0x701f, 0x482d, 0x0005, 0xa830, 0x9086, 0x0100,
+	0x1904, 0x338a, 0x2009, 0x0004, 0x0804, 0x33bc, 0x7984, 0x080c,
+	0x9b66, 0x1120, 0x9182, 0x007f, 0x0a04, 0x33bf, 0x9186, 0x00ff,
+	0x0904, 0x33bf, 0x9182, 0x0800, 0x1a04, 0x33bf, 0x2001, 0x9000,
+	0x080c, 0x5345, 0x1904, 0x33bc, 0x0804, 0x338a, 0xa998, 0x080c,
+	0x9b66, 0x1118, 0x9182, 0x007f, 0x0280, 0x9186, 0x00ff, 0x0168,
+	0x9182, 0x0800, 0x1250, 0x2001, 0x9000, 0x080c, 0x5345, 0x11a8,
+	0x0060, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e,
+	0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0x900e,
+	0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x2009, 0x000a, 0x0c48,
+	0x080c, 0x1022, 0x0198, 0x9006, 0xa802, 0x7014, 0x9005, 0x1120,
+	0x2900, 0x7016, 0x701a, 0x0040, 0x7018, 0xa802, 0x0086, 0x2040,
+	0x2900, 0xa006, 0x701a, 0x008e, 0x9085, 0x0001, 0x0005, 0x7984,
+	0x080c, 0x6270, 0x1130, 0x7e88, 0x9684, 0x3fff, 0x9082, 0x4000,
+	0x0208, 0x905e, 0x8bff, 0x0005, 0xa998, 0x080c, 0x6270, 0x1130,
+	0xae9c, 0x9684, 0x3fff, 0x9082, 0x4000, 0x0208, 0x905e, 0x8bff,
+	0x0005, 0xae98, 0x0008, 0x7e84, 0x2608, 0x080c, 0x6270, 0x1108,
+	0x0008, 0x905e, 0x8bff, 0x0005, 0x0016, 0x7114, 0x81ff, 0x0128,
+	0x2148, 0xa904, 0x080c, 0x1054, 0x0cc8, 0x7116, 0x711a, 0x001e,
+	0x0005, 0x2031, 0x0001, 0x0010, 0x2031, 0x0000, 0x2061, 0x18ae,
+	0x2c44, 0xa66a, 0xa17a, 0xa772, 0xa076, 0xa28e, 0xa392, 0xa496,
+	0xa59a, 0x080c, 0x110c, 0x7007, 0x0002, 0x701f, 0x338a, 0x0005,
+	0x00f6, 0x0126, 0x2091, 0x8000, 0x2079, 0x0000, 0x2001, 0x18a6,
+	0x2004, 0x9005, 0x1190, 0x0e04, 0x48f5, 0x7a36, 0x7833, 0x0012,
+	0x7a82, 0x7b86, 0x7c8a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
+	0xd084, 0x190c, 0x11be, 0x0804, 0x495b, 0x0016, 0x0086, 0x0096,
+	0x00c6, 0x00e6, 0x2071, 0x1894, 0x7044, 0x9005, 0x1540, 0x7148,
+	0x9182, 0x0010, 0x0288, 0x7038, 0x2060, 0x080c, 0x1022, 0x0904,
+	0x4953, 0xa84b, 0x0000, 0x2900, 0x7046, 0x2001, 0x0002, 0x9080,
+	0x1cf7, 0x2005, 0xa846, 0x0098, 0x7038, 0x90e0, 0x0004, 0x2001,
+	0x18b0, 0x9c82, 0x18f0, 0x0210, 0x2061, 0x18b0, 0x2c00, 0x703a,
+	0x7148, 0x81ff, 0x1108, 0x703e, 0x8108, 0x714a, 0x0460, 0x7148,
+	0x8108, 0x714a, 0x7044, 0x2040, 0xa144, 0x2105, 0x0016, 0x908a,
+	0x0036, 0x1a0c, 0x0d65, 0x2060, 0x001e, 0x8108, 0x2105, 0x9005,
+	0xa146, 0x1520, 0x080c, 0x1022, 0x1130, 0x8109, 0xa946, 0x7148,
+	0x8109, 0x714a, 0x00d8, 0x9006, 0xa806, 0xa84a, 0xa046, 0x2800,
+	0xa802, 0x2900, 0xa006, 0x7046, 0x2001, 0x0002, 0x9080, 0x1cf7,
+	0x2005, 0xa846, 0x0058, 0x2262, 0x6306, 0x640a, 0x00ee, 0x00ce,
+	0x009e, 0x008e, 0x001e, 0x012e, 0x00fe, 0x0005, 0x2c00, 0x9082,
+	0x001b, 0x0002, 0x497d, 0x497d, 0x497f, 0x497d, 0x497d, 0x497d,
+	0x4983, 0x497d, 0x497d, 0x497d, 0x4987, 0x497d, 0x497d, 0x497d,
+	0x498b, 0x497d, 0x497d, 0x497d, 0x498f, 0x497d, 0x497d, 0x497d,
+	0x4993, 0x497d, 0x497d, 0x497d, 0x4998, 0x080c, 0x0d65, 0xa276,
+	0xa37a, 0xa47e, 0x0898, 0xa286, 0xa38a, 0xa48e, 0x0878, 0xa296,
+	0xa39a, 0xa49e, 0x0858, 0xa2a6, 0xa3aa, 0xa4ae, 0x0838, 0xa2b6,
+	0xa3ba, 0xa4be, 0x0818, 0xa2c6, 0xa3ca, 0xa4ce, 0x0804, 0x4956,
+	0xa2d6, 0xa3da, 0xa4de, 0x0804, 0x4956, 0x00e6, 0x2071, 0x1894,
+	0x7048, 0x9005, 0x0904, 0x4a2f, 0x0126, 0x2091, 0x8000, 0x0e04,
+	0x4a2e, 0x00f6, 0x2079, 0x0000, 0x00c6, 0x0096, 0x0086, 0x0076,
+	0x9006, 0x2038, 0x7040, 0x2048, 0x9005, 0x0500, 0xa948, 0x2105,
+	0x0016, 0x908a, 0x0036, 0x1a0c, 0x0d65, 0x2060, 0x001e, 0x8108,
+	0x2105, 0x9005, 0xa94a, 0x1904, 0x4a31, 0xa804, 0x9005, 0x090c,
+	0x0d65, 0x7042, 0x2938, 0x2040, 0xa003, 0x0000, 0x2001, 0x0002,
+	0x9080, 0x1cf7, 0x2005, 0xa04a, 0x0804, 0x4a31, 0x703c, 0x2060,
+	0x2c14, 0x6304, 0x6408, 0x650c, 0x2200, 0x7836, 0x7833, 0x0012,
+	0x7882, 0x2300, 0x7886, 0x2400, 0x788a, 0x2091, 0x4080, 0x2001,
+	0x0089, 0x2004, 0xd084, 0x190c, 0x11be, 0x87ff, 0x0118, 0x2748,
+	0x080c, 0x1054, 0x7048, 0x8001, 0x704a, 0x9005, 0x1170, 0x7040,
+	0x2048, 0x9005, 0x0128, 0x080c, 0x1054, 0x9006, 0x7042, 0x7046,
+	0x703b, 0x18b0, 0x703f, 0x18b0, 0x0420, 0x7040, 0x9005, 0x1508,
+	0x7238, 0x2c00, 0x9206, 0x0148, 0x9c80, 0x0004, 0x90fa, 0x18f0,
+	0x0210, 0x2001, 0x18b0, 0x703e, 0x00a0, 0x9006, 0x703e, 0x703a,
+	0x7044, 0x9005, 0x090c, 0x0d65, 0x2048, 0xa800, 0x9005, 0x1de0,
+	0x2900, 0x7042, 0x2001, 0x0002, 0x9080, 0x1cf7, 0x2005, 0xa84a,
+	0x0000, 0x007e, 0x008e, 0x009e, 0x00ce, 0x00fe, 0x012e, 0x00ee,
+	0x0005, 0x2c00, 0x9082, 0x001b, 0x0002, 0x4a50, 0x4a50, 0x4a52,
+	0x4a50, 0x4a50, 0x4a50, 0x4a57, 0x4a50, 0x4a50, 0x4a50, 0x4a5c,
+	0x4a50, 0x4a50, 0x4a50, 0x4a61, 0x4a50, 0x4a50, 0x4a50, 0x4a66,
+	0x4a50, 0x4a50, 0x4a50, 0x4a6b, 0x4a50, 0x4a50, 0x4a50, 0x4a70,
+	0x080c, 0x0d65, 0xaa74, 0xab78, 0xac7c, 0x0804, 0x49dc, 0xaa84,
+	0xab88, 0xac8c, 0x0804, 0x49dc, 0xaa94, 0xab98, 0xac9c, 0x0804,
+	0x49dc, 0xaaa4, 0xaba8, 0xacac, 0x0804, 0x49dc, 0xaab4, 0xabb8,
+	0xacbc, 0x0804, 0x49dc, 0xaac4, 0xabc8, 0xaccc, 0x0804, 0x49dc,
+	0xaad4, 0xabd8, 0xacdc, 0x0804, 0x49dc, 0x0026, 0x080c, 0x538d,
+	0xd0c4, 0x0120, 0x2011, 0x8014, 0x080c, 0x48d8, 0x002e, 0x0005,
+	0x81ff, 0x1904, 0x33bc, 0x0126, 0x2091, 0x8000, 0x6030, 0xc08d,
+	0xc085, 0xc0ac, 0x6032, 0x080c, 0x70b7, 0x1158, 0x080c, 0x73b7,
+	0x080c, 0x5cdc, 0x9085, 0x0001, 0x080c, 0x70fe, 0x080c, 0x6fe8,
+	0x0010, 0x080c, 0x5b97, 0x012e, 0x0804, 0x338a, 0x81ff, 0x0120,
+	0x2009, 0x0001, 0x0804, 0x33bc, 0x080c, 0x53a1, 0x0120, 0x2009,
+	0x0007, 0x0804, 0x33bc, 0x080c, 0x665f, 0x0120, 0x2009, 0x0008,
+	0x0804, 0x33bc, 0x0026, 0x2011, 0x0010, 0x080c, 0x668b, 0x002e,
+	0x0140, 0x7984, 0x080c, 0x66d5, 0x1120, 0x2009, 0x4009, 0x0804,
+	0x33bc, 0x080c, 0x3181, 0x0128, 0x7984, 0x080c, 0x6210, 0x1904,
+	0x33bf, 0x080c, 0x48ab, 0x0904, 0x33bf, 0x2b00, 0x7026, 0x080c,
+	0x6667, 0x7888, 0x1170, 0x9084, 0x0005, 0x1158, 0x900e, 0x080c,
+	0x655f, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x0804,
+	0x338a, 0x080c, 0x4878, 0x0904, 0x33bc, 0x9006, 0xa866, 0xa832,
+	0xa868, 0xc0fd, 0xa86a, 0x080c, 0xba79, 0x0904, 0x33bc, 0x7888,
+	0xd094, 0x0118, 0xb8c4, 0xc08d, 0xb8c6, 0x7007, 0x0003, 0x701f,
+	0x4b46, 0x0005, 0x2061, 0x1800, 0x080c, 0x53a1, 0x2009, 0x0007,
+	0x1578, 0x080c, 0x665f, 0x0118, 0x2009, 0x0008, 0x0448, 0x080c,
+	0x3181, 0x0120, 0xa998, 0x080c, 0x6210, 0x1530, 0x080c, 0x48a9,
+	0x0518, 0x080c, 0x6667, 0xa89c, 0x1168, 0x9084, 0x0005, 0x1150,
+	0x900e, 0x080c, 0x655f, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108,
+	0xc18d, 0x00d0, 0xa868, 0xc0fc, 0xa86a, 0x080c, 0xba79, 0x11e0,
+	0xa89c, 0xd094, 0x0118, 0xb8c4, 0xc08d, 0xb8c6, 0x2009, 0x0003,
+	0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085,
+	0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0xa99a, 0x9006,
+	0x918d, 0x0001, 0x2008, 0x0005, 0x9006, 0x0005, 0xa830, 0x2008,
+	0x918e, 0xdead, 0x1120, 0x2021, 0x4009, 0x0804, 0x338c, 0x9086,
+	0x0100, 0x7024, 0x2058, 0x1110, 0x0804, 0x52ea, 0x900e, 0x080c,
+	0x655f, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x0804,
+	0x338a, 0x080c, 0x53a1, 0x0120, 0x2009, 0x0007, 0x0804, 0x33bc,
+	0x7f84, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x080c, 0x4878, 0x1120,
+	0x2009, 0x0002, 0x0804, 0x33bc, 0x900e, 0x2130, 0x7126, 0x7132,
+	0xa860, 0x20e8, 0x7036, 0xa85c, 0x9080, 0x0005, 0x702a, 0x20a0,
+	0x080c, 0x6270, 0x1904, 0x4be4, 0x080c, 0x6667, 0x0120, 0x080c,
+	0x666f, 0x1904, 0x4be4, 0x080c, 0x665f, 0x1130, 0x080c, 0x655f,
+	0x1118, 0xd79c, 0x0904, 0x4be4, 0xd794, 0x1110, 0xd784, 0x01a8,
+	0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098, 0x3400, 0xd794,
+	0x0160, 0x20a9, 0x0008, 0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0,
+	0x20a9, 0x0002, 0x080c, 0x468d, 0x0048, 0x20a9, 0x0004, 0x4003,
+	0x2098, 0x20a0, 0x3d00, 0x20e0, 0x080c, 0x468d, 0x4104, 0xd794,
+	0x0528, 0xb8b4, 0x20e0, 0xb8b8, 0x2060, 0x9c80, 0x0000, 0x2098,
+	0x20a9, 0x0002, 0x4003, 0x9c80, 0x0003, 0x2098, 0x20a9, 0x0001,
+	0x4005, 0x9c80, 0x0004, 0x2098, 0x3400, 0x20a9, 0x0002, 0x4003,
+	0x2098, 0x20a0, 0x3d00, 0x20e0, 0x080c, 0x4680, 0x9c80, 0x0026,
+	0x2098, 0xb8b4, 0x20e0, 0x20a9, 0x0002, 0x4003, 0xd794, 0x0110,
+	0x96b0, 0x000b, 0x96b0, 0x0005, 0x8108, 0x080c, 0x9b66, 0x0118,
+	0x9186, 0x0800, 0x0040, 0xd78c, 0x0120, 0x9186, 0x0800, 0x0170,
+	0x0018, 0x9186, 0x007e, 0x0150, 0xd794, 0x0118, 0x9686, 0x0020,
+	0x0010, 0x9686, 0x0028, 0x0150, 0x0804, 0x4b80, 0x86ff, 0x1120,
+	0x7124, 0x810b, 0x0804, 0x338a, 0x7033, 0x0001, 0x7122, 0x7024,
+	0x9600, 0x7026, 0x772e, 0x2061, 0x18ae, 0x2c44, 0xa06b, 0x0000,
+	0xa67a, 0x7034, 0xa072, 0x7028, 0xa076, 0xa28e, 0xa392, 0xa496,
+	0xa59a, 0x080c, 0x110c, 0x7007, 0x0002, 0x701f, 0x4c20, 0x0005,
+	0x7030, 0x9005, 0x1180, 0x7120, 0x7028, 0x20a0, 0x772c, 0x9036,
+	0x7034, 0x20e8, 0x2061, 0x18ae, 0x2c44, 0xa28c, 0xa390, 0xa494,
+	0xa598, 0x0804, 0x4b80, 0x7124, 0x810b, 0x0804, 0x338a, 0x2029,
+	0x007e, 0x7984, 0x7a88, 0x7b8c, 0x7c98, 0x9184, 0xff00, 0x8007,
+	0x90e2, 0x0020, 0x0a04, 0x33bf, 0x9502, 0x0a04, 0x33bf, 0x9184,
+	0x00ff, 0x90e2, 0x0020, 0x0a04, 0x33bf, 0x9502, 0x0a04, 0x33bf,
+	0x9284, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x33bf, 0x9502,
+	0x0a04, 0x33bf, 0x9284, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x33bf,
+	0x9502, 0x0a04, 0x33bf, 0x9384, 0xff00, 0x8007, 0x90e2, 0x0020,
+	0x0a04, 0x33bf, 0x9502, 0x0a04, 0x33bf, 0x9384, 0x00ff, 0x90e2,
+	0x0020, 0x0a04, 0x33bf, 0x9502, 0x0a04, 0x33bf, 0x9484, 0xff00,
+	0x8007, 0x90e2, 0x0020, 0x0a04, 0x33bf, 0x9502, 0x0a04, 0x33bf,
+	0x9484, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x33bf, 0x9502, 0x0a04,
+	0x33bf, 0x2061, 0x195a, 0x6102, 0x6206, 0x630a, 0x640e, 0x0804,
+	0x338a, 0x0006, 0x080c, 0x538d, 0xd0cc, 0x000e, 0x0005, 0x0006,
+	0x080c, 0x5391, 0xd0bc, 0x000e, 0x0005, 0x6170, 0x7a84, 0x6300,
+	0x82ff, 0x1118, 0x7986, 0x0804, 0x338a, 0x83ff, 0x1904, 0x33bf,
+	0x2001, 0xfff0, 0x9200, 0x1a04, 0x33bf, 0x2019, 0xffff, 0x6074,
+	0x9302, 0x9200, 0x0a04, 0x33bf, 0x7986, 0x6272, 0x0804, 0x338a,
+	0x080c, 0x53a1, 0x1904, 0x33bc, 0x7c88, 0x7d84, 0x7e98, 0x7f8c,
+	0x080c, 0x4878, 0x0904, 0x33bc, 0x900e, 0x901e, 0x7326, 0x7332,
+	0xa860, 0x20e8, 0x7036, 0xa85c, 0x9080, 0x0003, 0x702a, 0x20a0,
+	0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x6667, 0x0118,
+	0x080c, 0x666f, 0x1148, 0x20a9, 0x0001, 0xb814, 0x4004, 0xb810,
 	0x4004, 0x4104, 0x9398, 0x0003, 0x8108, 0x9182, 0x0800, 0x0120,
-	0x9386, 0x003c, 0x0518, 0x0c20, 0x83ff, 0x11f0, 0x7154, 0x810c,
-	0xa99a, 0xa897, 0x4000, 0x715c, 0x81ff, 0x090c, 0x0d65, 0x2148,
-	0x080c, 0x1054, 0x9006, 0x705e, 0x918d, 0x0001, 0x2008, 0xa0a0,
-	0x2048, 0x0126, 0x2091, 0x8000, 0x080c, 0x698f, 0x012e, 0xa09f,
-	0x0000, 0xa0a3, 0x0000, 0x0070, 0x7063, 0x0001, 0x7152, 0x7054,
-	0x9300, 0x7056, 0xa37a, 0xa48e, 0xa592, 0xa696, 0xa79a, 0x080c,
-	0x110c, 0x9006, 0x00ee, 0x0005, 0x0096, 0xa88c, 0x90be, 0x7000,
-	0x0148, 0x90be, 0x7100, 0x0130, 0x90be, 0x7200, 0x0118, 0x009e,
-	0x0804, 0x33b8, 0xa884, 0xa988, 0x080c, 0x2424, 0x1518, 0x080c,
-	0x6209, 0x1500, 0x7126, 0xbe12, 0xbd16, 0xae7c, 0x080c, 0x4871,
-	0x01c8, 0x080c, 0x4871, 0x01b0, 0x009e, 0xa867, 0x0000, 0xa868,
-	0xc0fd, 0xa86a, 0xa823, 0x0000, 0xa804, 0x2048, 0x080c, 0xb9dc,
-	0x1120, 0x2009, 0x0003, 0x0804, 0x33b5, 0x7007, 0x0003, 0x701f,
-	0x4e77, 0x0005, 0x009e, 0x2009, 0x0002, 0x0804, 0x33b5, 0x7124,
-	0x080c, 0x3113, 0xa820, 0x9086, 0x8001, 0x1120, 0x2009, 0x0004,
-	0x0804, 0x33b5, 0x2900, 0x7022, 0xa804, 0x0096, 0x2048, 0x8906,
-	0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x009e, 0x9080,
-	0x0002, 0x0076, 0x0006, 0x2098, 0x20a0, 0x27e0, 0x27e8, 0x20a9,
-	0x002a, 0x080c, 0x0f9f, 0xaa6c, 0xab70, 0xac74, 0xad78, 0x2061,
-	0x18ae, 0x2c44, 0xa06b, 0x0000, 0xae64, 0xaf8c, 0x97c6, 0x7000,
-	0x0118, 0x97c6, 0x7100, 0x1148, 0x96c2, 0x0004, 0x0600, 0x2009,
-	0x0004, 0x000e, 0x007e, 0x0804, 0x48bd, 0x97c6, 0x7200, 0x11b8,
-	0x96c2, 0x0054, 0x02a0, 0x000e, 0x007e, 0x2061, 0x18ae, 0x2c44,
-	0xa076, 0xa772, 0xa07b, 0x002a, 0xa28e, 0xa392, 0xa496, 0xa59a,
-	0x080c, 0x110c, 0x7007, 0x0002, 0x701f, 0x4ed3, 0x0005, 0x000e,
-	0x007e, 0x0804, 0x33b8, 0x7020, 0x2048, 0xa804, 0x2048, 0xa804,
-	0x2048, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0,
-	0x9080, 0x0002, 0x2098, 0x20a0, 0x27e0, 0x27e8, 0x20a9, 0x002a,
-	0x080c, 0x0f9f, 0x2100, 0x2238, 0x2061, 0x18ae, 0x2c44, 0xa28c,
-	0xa390, 0xa494, 0xa598, 0x2009, 0x002a, 0x0804, 0x48bd, 0x81ff,
-	0x1904, 0x33b5, 0x798c, 0x2001, 0x194f, 0x918c, 0x8000, 0x2102,
-	0x080c, 0x4888, 0x0904, 0x33b8, 0x080c, 0x6660, 0x0120, 0x080c,
-	0x6668, 0x1904, 0x33b8, 0x080c, 0x6330, 0x0904, 0x33b5, 0x0126,
-	0x2091, 0x8000, 0x080c, 0x64c5, 0x012e, 0x0904, 0x33b5, 0x2001,
-	0x194f, 0x2004, 0xd0fc, 0x1904, 0x3383, 0x0804, 0x4322, 0xa9a0,
-	0x2001, 0x194f, 0x918c, 0x8000, 0xc18d, 0x2102, 0x080c, 0x4895,
-	0x01a0, 0x080c, 0x6660, 0x0118, 0x080c, 0x6668, 0x1170, 0x080c,
-	0x6330, 0x2009, 0x0002, 0x0128, 0x080c, 0x64c5, 0x1170, 0x2009,
-	0x0003, 0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e,
-	0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0x2001,
-	0x194f, 0x2004, 0xd0fc, 0x1128, 0x080c, 0x538e, 0x0110, 0x9006,
-	0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x78a8,
-	0xd08c, 0x1118, 0xd084, 0x0904, 0x4297, 0x080c, 0x48a4, 0x0904,
-	0x33b8, 0x080c, 0x4871, 0x1120, 0x2009, 0x0002, 0x0804, 0x33b5,
-	0x080c, 0x6660, 0x0130, 0x908e, 0x0004, 0x0118, 0x908e, 0x0005,
-	0x15a0, 0x78a8, 0xd08c, 0x0120, 0xb800, 0xc08c, 0xb802, 0x0028,
-	0x080c, 0x5386, 0xd0b4, 0x0904, 0x42d1, 0x7884, 0x908e, 0x007e,
-	0x0904, 0x42d1, 0x908e, 0x007f, 0x0904, 0x42d1, 0x908e, 0x0080,
-	0x0904, 0x42d1, 0xb800, 0xd08c, 0x1904, 0x42d1, 0xa867, 0x0000,
-	0xa868, 0xc0fd, 0xa86a, 0x080c, 0xb9fb, 0x1120, 0x2009, 0x0003,
-	0x0804, 0x33b5, 0x7007, 0x0003, 0x701f, 0x4f9f, 0x0005, 0x080c,
-	0x48a4, 0x0904, 0x33b8, 0x0804, 0x42d1, 0x080c, 0x317a, 0x0108,
-	0x0005, 0x2009, 0x1833, 0x210c, 0x81ff, 0x0120, 0x2009, 0x0001,
-	0x0804, 0x33b5, 0x080c, 0x539a, 0x0120, 0x2009, 0x0007, 0x0804,
-	0x33b5, 0x080c, 0x6658, 0x0120, 0x2009, 0x0008, 0x0804, 0x33b5,
-	0xb89c, 0xd0a4, 0x1118, 0xd0ac, 0x1904, 0x42d1, 0x9006, 0xa866,
-	0xa832, 0xa868, 0xc0fd, 0xa86a, 0x080c, 0xba5e, 0x1120, 0x2009,
-	0x0003, 0x0804, 0x33b5, 0x7007, 0x0003, 0x701f, 0x4fd8, 0x0005,
-	0xa830, 0x9086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x52e3,
-	0x080c, 0x48a4, 0x0904, 0x33b8, 0x0804, 0x4f71, 0x81ff, 0x2009,
-	0x0001, 0x1904, 0x33b5, 0x080c, 0x539a, 0x2009, 0x0007, 0x1904,
-	0x33b5, 0x080c, 0x6658, 0x0120, 0x2009, 0x0008, 0x0804, 0x33b5,
-	0x080c, 0x48a4, 0x0904, 0x33b8, 0x080c, 0x6660, 0x2009, 0x0009,
-	0x1904, 0x33b5, 0x080c, 0x4871, 0x2009, 0x0002, 0x0904, 0x33b5,
-	0x9006, 0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x7988, 0x9194,
-	0xff00, 0x918c, 0x00ff, 0x9006, 0x82ff, 0x1128, 0xc0ed, 0xa952,
-	0x798c, 0xa956, 0x0038, 0x928e, 0x0100, 0x1904, 0x33b8, 0xc0e5,
-	0xa952, 0xa956, 0xa83e, 0x080c, 0xbcc1, 0x2009, 0x0003, 0x0904,
-	0x33b5, 0x7007, 0x0003, 0x701f, 0x502e, 0x0005, 0xa830, 0x9086,
-	0x0100, 0x2009, 0x0004, 0x0904, 0x33b5, 0x0804, 0x3383, 0x7aa8,
-	0x9284, 0xc000, 0x0148, 0xd2ec, 0x01a0, 0x080c, 0x539a, 0x1188,
-	0x2009, 0x0014, 0x0804, 0x33b5, 0xd2dc, 0x1568, 0x81ff, 0x2009,
-	0x0001, 0x1904, 0x33b5, 0x080c, 0x539a, 0x2009, 0x0007, 0x1904,
-	0x33b5, 0xd2f4, 0x0130, 0x9284, 0x5000, 0x080c, 0x5361, 0x0804,
-	0x3383, 0xd2fc, 0x0158, 0x080c, 0x48a4, 0x0904, 0x33b8, 0x7984,
-	0x9284, 0x9000, 0x080c, 0x533e, 0x0804, 0x3383, 0x080c, 0x48a4,
-	0x0904, 0x33b8, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x2009,
-	0x0009, 0x1904, 0x5117, 0x080c, 0x4871, 0x2009, 0x0002, 0x0904,
-	0x5117, 0xa85c, 0x9080, 0x001b, 0xaf60, 0x2009, 0x0008, 0x7a8c,
-	0x7b88, 0x7c9c, 0x7d98, 0x080c, 0x48ba, 0x701f, 0x5088, 0x0005,
-	0xa86c, 0x9086, 0x0500, 0x1138, 0xa870, 0x9005, 0x1120, 0xa874,
-	0x9084, 0xff00, 0x0110, 0x1904, 0x33b8, 0xa866, 0xa832, 0xa868,
-	0xc0fd, 0xa86a, 0x080c, 0x48a4, 0x1110, 0x0804, 0x33b8, 0x2009,
-	0x0043, 0x080c, 0xbd29, 0x2009, 0x0003, 0x0904, 0x5117, 0x7007,
-	0x0003, 0x701f, 0x50ac, 0x0005, 0xa830, 0x9086, 0x0100, 0x2009,
-	0x0004, 0x0904, 0x5117, 0x7984, 0x7aa8, 0x9284, 0x1000, 0x080c,
-	0x533e, 0x0804, 0x3383, 0x00c6, 0xaab0, 0x9284, 0xc000, 0x0140,
-	0xd2ec, 0x0168, 0x080c, 0x539a, 0x1150, 0x2009, 0x0014, 0x04f0,
-	0x2061, 0x1800, 0x080c, 0x539a, 0x2009, 0x0007, 0x15b8, 0xd2f4,
-	0x0128, 0x9284, 0x5000, 0x080c, 0x5361, 0x0050, 0xd2fc, 0x0178,
-	0x080c, 0x48a2, 0x0588, 0xa998, 0x9284, 0x9000, 0x080c, 0x533e,
-	0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0x0438, 0x080c,
-	0x48a2, 0x0510, 0x080c, 0x6660, 0x2009, 0x0009, 0x11b8, 0xa8c4,
-	0x9086, 0x0500, 0x11c8, 0xa8c8, 0x9005, 0x11b0, 0xa8cc, 0x9084,
-	0xff00, 0x1190, 0x080c, 0x48a2, 0x1108, 0x0070, 0x2009, 0x004b,
-	0x080c, 0xbd29, 0x2009, 0x0003, 0x0108, 0x0078, 0x0429, 0x19c0,
+	0x9386, 0x003c, 0x0170, 0x0c20, 0x83ff, 0x1148, 0x7224, 0x900e,
+	0x2001, 0x0003, 0x080c, 0x8419, 0x2208, 0x0804, 0x338a, 0x7033,
+	0x0001, 0x7122, 0x7024, 0x9300, 0x7026, 0x2061, 0x18ae, 0x2c44,
+	0xa06b, 0x0000, 0xa37a, 0x7028, 0xa076, 0x7034, 0xa072, 0xa48e,
+	0xa592, 0xa696, 0xa79a, 0x080c, 0x110c, 0x7007, 0x0002, 0x701f,
+	0x4d12, 0x0005, 0x7030, 0x9005, 0x1178, 0x7120, 0x7028, 0x20a0,
+	0x901e, 0x7034, 0x20e8, 0x2061, 0x18ae, 0x2c44, 0xa48c, 0xa590,
+	0xa694, 0xa798, 0x0804, 0x4cd0, 0x7224, 0x900e, 0x2001, 0x0003,
+	0x080c, 0x8419, 0x2208, 0x0804, 0x338a, 0x00f6, 0x00e6, 0x080c,
+	0x53a1, 0x2009, 0x0007, 0x1904, 0x4da5, 0x2071, 0x1894, 0x745c,
+	0x84ff, 0x2009, 0x000e, 0x1904, 0x4da5, 0xac9c, 0xad98, 0xaea4,
+	0xafa0, 0x0096, 0x080c, 0x103b, 0x2009, 0x0002, 0x0904, 0x4da5,
+	0x2900, 0x705e, 0x900e, 0x901e, 0x7356, 0x7362, 0xa860, 0x7066,
+	0xa85c, 0x9080, 0x0003, 0x705a, 0x20a0, 0x91d8, 0x1000, 0x2b5c,
+	0x8bff, 0x0178, 0x080c, 0x6667, 0x0118, 0x080c, 0x666f, 0x1148,
+	0xb814, 0x20a9, 0x0001, 0x4004, 0xb810, 0x4004, 0x4104, 0x9398,
+	0x0003, 0x8108, 0x9182, 0x0800, 0x0120, 0x9386, 0x003c, 0x01e8,
+	0x0c20, 0x83ff, 0x11c0, 0x7254, 0x900e, 0x2001, 0x0003, 0x080c,
+	0x8419, 0x2208, 0x009e, 0xa897, 0x4000, 0xa99a, 0x715c, 0x81ff,
+	0x090c, 0x0d65, 0x2148, 0x080c, 0x1054, 0x9006, 0x705e, 0x918d,
+	0x0001, 0x2008, 0x0418, 0x7063, 0x0001, 0x7152, 0x7054, 0x9300,
+	0x7056, 0x2061, 0x18af, 0x2c44, 0xa37a, 0x7058, 0xa076, 0x7064,
+	0xa072, 0xa48e, 0xa592, 0xa696, 0xa79a, 0xa09f, 0x4db1, 0x000e,
+	0xa0a2, 0x080c, 0x110c, 0x9006, 0x0048, 0x009e, 0xa897, 0x4005,
+	0xa99a, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x00ee, 0x00fe,
+	0x0005, 0x00f6, 0xa0a0, 0x904d, 0x090c, 0x0d65, 0x00e6, 0x2071,
+	0x1894, 0xa06c, 0x908e, 0x0100, 0x0138, 0xa87b, 0x0030, 0xa883,
+	0x0000, 0xa897, 0x4002, 0x00d8, 0x7060, 0x9005, 0x1158, 0x7150,
+	0x7058, 0x20a0, 0x901e, 0x7064, 0x20e8, 0xa48c, 0xa590, 0xa694,
+	0xa798, 0x0428, 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000,
+	0x7254, 0x900e, 0x2001, 0x0003, 0x080c, 0x8419, 0xaa9a, 0x715c,
+	0x81ff, 0x090c, 0x0d65, 0x2148, 0x080c, 0x1054, 0x705f, 0x0000,
+	0xa0a0, 0x2048, 0x0126, 0x2091, 0x8000, 0x080c, 0x6996, 0x012e,
+	0xa09f, 0x0000, 0xa0a3, 0x0000, 0x00ee, 0x00fe, 0x0005, 0x91d8,
+	0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x6667, 0x0118, 0x080c,
+	0x666f, 0x1148, 0xb814, 0x20a9, 0x0001, 0x4004, 0xb810, 0x4004,
+	0x4104, 0x9398, 0x0003, 0x8108, 0x9182, 0x0800, 0x0120, 0x9386,
+	0x003c, 0x0518, 0x0c20, 0x83ff, 0x11f0, 0x7154, 0x810c, 0xa99a,
+	0xa897, 0x4000, 0x715c, 0x81ff, 0x090c, 0x0d65, 0x2148, 0x080c,
+	0x1054, 0x9006, 0x705e, 0x918d, 0x0001, 0x2008, 0xa0a0, 0x2048,
+	0x0126, 0x2091, 0x8000, 0x080c, 0x6996, 0x012e, 0xa09f, 0x0000,
+	0xa0a3, 0x0000, 0x0070, 0x7063, 0x0001, 0x7152, 0x7054, 0x9300,
+	0x7056, 0xa37a, 0xa48e, 0xa592, 0xa696, 0xa79a, 0x080c, 0x110c,
+	0x9006, 0x00ee, 0x0005, 0x0096, 0xa88c, 0x90be, 0x7000, 0x0148,
+	0x90be, 0x7100, 0x0130, 0x90be, 0x7200, 0x0118, 0x009e, 0x0804,
+	0x33bf, 0xa884, 0xa988, 0x080c, 0x2424, 0x1518, 0x080c, 0x6210,
+	0x1500, 0x7126, 0xbe12, 0xbd16, 0xae7c, 0x080c, 0x4878, 0x01c8,
+	0x080c, 0x4878, 0x01b0, 0x009e, 0xa867, 0x0000, 0xa868, 0xc0fd,
+	0xa86a, 0xa823, 0x0000, 0xa804, 0x2048, 0x080c, 0xb9f7, 0x1120,
+	0x2009, 0x0003, 0x0804, 0x33bc, 0x7007, 0x0003, 0x701f, 0x4e7e,
+	0x0005, 0x009e, 0x2009, 0x0002, 0x0804, 0x33bc, 0x7124, 0x080c,
+	0x311a, 0xa820, 0x9086, 0x8001, 0x1120, 0x2009, 0x0004, 0x0804,
+	0x33bc, 0x2900, 0x7022, 0xa804, 0x0096, 0x2048, 0x8906, 0x8006,
+	0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x009e, 0x9080, 0x0002,
+	0x0076, 0x0006, 0x2098, 0x20a0, 0x27e0, 0x27e8, 0x20a9, 0x002a,
+	0x080c, 0x0f9f, 0xaa6c, 0xab70, 0xac74, 0xad78, 0x2061, 0x18ae,
+	0x2c44, 0xa06b, 0x0000, 0xae64, 0xaf8c, 0x97c6, 0x7000, 0x0118,
+	0x97c6, 0x7100, 0x1148, 0x96c2, 0x0004, 0x0600, 0x2009, 0x0004,
+	0x000e, 0x007e, 0x0804, 0x48c4, 0x97c6, 0x7200, 0x11b8, 0x96c2,
+	0x0054, 0x02a0, 0x000e, 0x007e, 0x2061, 0x18ae, 0x2c44, 0xa076,
+	0xa772, 0xa07b, 0x002a, 0xa28e, 0xa392, 0xa496, 0xa59a, 0x080c,
+	0x110c, 0x7007, 0x0002, 0x701f, 0x4eda, 0x0005, 0x000e, 0x007e,
+	0x0804, 0x33bf, 0x7020, 0x2048, 0xa804, 0x2048, 0xa804, 0x2048,
+	0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080,
+	0x0002, 0x2098, 0x20a0, 0x27e0, 0x27e8, 0x20a9, 0x002a, 0x080c,
+	0x0f9f, 0x2100, 0x2238, 0x2061, 0x18ae, 0x2c44, 0xa28c, 0xa390,
+	0xa494, 0xa598, 0x2009, 0x002a, 0x0804, 0x48c4, 0x81ff, 0x1904,
+	0x33bc, 0x798c, 0x2001, 0x194f, 0x918c, 0x8000, 0x2102, 0x080c,
+	0x488f, 0x0904, 0x33bf, 0x080c, 0x6667, 0x0120, 0x080c, 0x666f,
+	0x1904, 0x33bf, 0x080c, 0x6337, 0x0904, 0x33bc, 0x0126, 0x2091,
+	0x8000, 0x080c, 0x64cc, 0x012e, 0x0904, 0x33bc, 0x2001, 0x194f,
+	0x2004, 0xd0fc, 0x1904, 0x338a, 0x0804, 0x4329, 0xa9a0, 0x2001,
+	0x194f, 0x918c, 0x8000, 0xc18d, 0x2102, 0x080c, 0x489c, 0x01a0,
+	0x080c, 0x6667, 0x0118, 0x080c, 0x666f, 0x1170, 0x080c, 0x6337,
+	0x2009, 0x0002, 0x0128, 0x080c, 0x64cc, 0x1170, 0x2009, 0x0003,
 	0xa897, 0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085,
-	0x0001, 0x2001, 0x0030, 0x00ce, 0x0005, 0x9006, 0x0ce0, 0x7aa8,
-	0xd2dc, 0x0904, 0x33b5, 0x0016, 0x7984, 0x9284, 0x1000, 0xc0fd,
-	0x080c, 0x533e, 0x001e, 0x1904, 0x33b5, 0x0804, 0x3383, 0x00f6,
-	0x2d78, 0x0011, 0x00fe, 0x0005, 0xaab0, 0xd2dc, 0x0150, 0x0016,
-	0xa998, 0x9284, 0x1000, 0xc0fd, 0x080c, 0x533e, 0x001e, 0x9085,
-	0x0001, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x33b5,
-	0x080c, 0x539a, 0x0120, 0x2009, 0x0007, 0x0804, 0x33b5, 0x7984,
-	0x7ea8, 0x96b4, 0x00ff, 0x080c, 0x6269, 0x1904, 0x33b8, 0x9186,
-	0x007f, 0x0138, 0x080c, 0x6660, 0x0120, 0x2009, 0x0009, 0x0804,
-	0x33b5, 0x080c, 0x4871, 0x1120, 0x2009, 0x0002, 0x0804, 0x33b5,
-	0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x2001, 0x0100, 0x8007,
-	0xa80a, 0x080c, 0xba15, 0x1120, 0x2009, 0x0003, 0x0804, 0x33b5,
-	0x7007, 0x0003, 0x701f, 0x5175, 0x0005, 0xa808, 0x8007, 0x9086,
-	0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x33b5, 0xa8e0, 0xa866,
-	0xa810, 0x8007, 0x9084, 0x00ff, 0x800c, 0xa814, 0x8007, 0x9084,
-	0x00ff, 0x8004, 0x9080, 0x0002, 0x9108, 0x8906, 0x8006, 0x8007,
-	0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0004, 0x7a8c, 0x7b88,
-	0x7c9c, 0x7d98, 0x0804, 0x48bd, 0x080c, 0x4871, 0x1120, 0x2009,
-	0x0002, 0x0804, 0x33b5, 0x7984, 0x9194, 0xff00, 0x918c, 0x00ff,
-	0x8217, 0x82ff, 0x1118, 0x7023, 0x1984, 0x0040, 0x92c6, 0x0001,
-	0x1118, 0x7023, 0x199e, 0x0010, 0x0804, 0x33b8, 0x2009, 0x001a,
-	0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019, 0xaf60,
-	0x080c, 0x48ba, 0x701f, 0x51c5, 0x0005, 0x2001, 0x182d, 0x2003,
-	0x0001, 0xa85c, 0x9080, 0x0019, 0x2098, 0xa860, 0x20e0, 0x20a9,
-	0x001a, 0x7020, 0x20a0, 0x20e9, 0x0001, 0x4003, 0x0804, 0x3383,
-	0x080c, 0x4871, 0x1120, 0x2009, 0x0002, 0x0804, 0x33b5, 0x7984,
-	0x9194, 0xff00, 0x918c, 0x00ff, 0x8217, 0x82ff, 0x1118, 0x2099,
-	0x1984, 0x0040, 0x92c6, 0x0001, 0x1118, 0x2099, 0x199e, 0x0010,
-	0x0804, 0x33b8, 0xa85c, 0x9080, 0x0019, 0x20a0, 0xa860, 0x20e8,
-	0x20a9, 0x001a, 0x20e1, 0x0001, 0x4003, 0x2009, 0x001a, 0x7a8c,
-	0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x0804,
-	0x48bd, 0x7884, 0x908a, 0x1000, 0x1a04, 0x33b8, 0x0126, 0x2091,
-	0x8000, 0x8003, 0x800b, 0x810b, 0x9108, 0x00c6, 0x2061, 0x19d4,
-	0x6142, 0x00ce, 0x012e, 0x0804, 0x3383, 0x00c6, 0x080c, 0x70ac,
-	0x1160, 0x080c, 0x73ac, 0x080c, 0x5cd5, 0x9085, 0x0001, 0x080c,
-	0x70f3, 0x080c, 0x6fdd, 0x080c, 0x0d65, 0x2061, 0x1800, 0x6030,
-	0xc09d, 0x6032, 0x080c, 0x5b90, 0x00ce, 0x0005, 0x00c6, 0x2001,
-	0x1800, 0x2004, 0x908e, 0x0000, 0x0904, 0x33b5, 0x7884, 0x9005,
-	0x0188, 0x7888, 0x2061, 0x196d, 0x2c0c, 0x2062, 0x080c, 0x2801,
-	0x01a0, 0x080c, 0x2809, 0x0188, 0x080c, 0x2811, 0x0170, 0x2162,
-	0x0804, 0x33b8, 0x2061, 0x0100, 0x6038, 0x9086, 0x0007, 0x1118,
-	0x2009, 0x0001, 0x0010, 0x2009, 0x0000, 0x7884, 0x9086, 0x0002,
-	0x1588, 0x2061, 0x0100, 0x6028, 0xc09c, 0x602a, 0x080c, 0x98ad,
-	0x0026, 0x2011, 0x0003, 0x080c, 0x931e, 0x2011, 0x0002, 0x080c,
-	0x9328, 0x002e, 0x080c, 0x91eb, 0x0036, 0x901e, 0x080c, 0x926b,
-	0x003e, 0x080c, 0x98c9, 0x60e3, 0x0000, 0x080c, 0xd5d9, 0x080c,
-	0xd5f4, 0x9085, 0x0001, 0x080c, 0x70f3, 0x9006, 0x080c, 0x2833,
-	0x2001, 0x1800, 0x2003, 0x0004, 0x0026, 0x2011, 0x0008, 0x080c,
-	0x286d, 0x002e, 0x00ce, 0x0804, 0x3383, 0x81ff, 0x0120, 0x2009,
-	0x0001, 0x0804, 0x33b5, 0x080c, 0x539a, 0x0120, 0x2009, 0x0007,
-	0x0804, 0x33b5, 0x7984, 0x7ea8, 0x96b4, 0x00ff, 0x080c, 0x6269,
-	0x1904, 0x33b8, 0x9186, 0x007f, 0x0138, 0x080c, 0x6660, 0x0120,
-	0x2009, 0x0009, 0x0804, 0x33b5, 0x080c, 0x4871, 0x1120, 0x2009,
-	0x0002, 0x0804, 0x33b5, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a,
-	0x080c, 0xba18, 0x1120, 0x2009, 0x0003, 0x0804, 0x33b5, 0x7007,
-	0x0003, 0x701f, 0x52cc, 0x0005, 0xa830, 0x9086, 0x0100, 0x1120,
-	0x2009, 0x0004, 0x0804, 0x33b5, 0xa8e0, 0xa866, 0xa834, 0x8007,
-	0x800c, 0xa85c, 0x9080, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98,
-	0xaf60, 0x0804, 0x48bd, 0xa898, 0x9086, 0x000d, 0x1904, 0x33b5,
-	0x2021, 0x4005, 0x0126, 0x2091, 0x8000, 0x0e04, 0x52f0, 0x0010,
-	0x012e, 0x0cc0, 0x7c36, 0x9486, 0x4000, 0x0118, 0x7833, 0x0011,
-	0x0010, 0x7833, 0x0010, 0x7883, 0x4005, 0xa998, 0x7986, 0xa9a4,
-	0x799a, 0xa9a8, 0x799e, 0x080c, 0x48ad, 0x2091, 0x4080, 0x2001,
-	0x0089, 0x2004, 0xd084, 0x190c, 0x11be, 0x7007, 0x0001, 0x2091,
-	0x5000, 0x700f, 0x0000, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000,
-	0x00c6, 0x2061, 0x19d4, 0x7984, 0x6152, 0x614e, 0x6057, 0x0000,
-	0x604b, 0x0009, 0x7898, 0x606a, 0x789c, 0x6066, 0x7888, 0x6062,
-	0x788c, 0x605e, 0x2001, 0x19e2, 0x2044, 0x2001, 0x19e9, 0xa076,
-	0xa060, 0xa072, 0xa07b, 0x0001, 0xa07f, 0x0002, 0xa06b, 0x0000,
-	0xa09f, 0x0000, 0x00ce, 0x012e, 0x0804, 0x3383, 0x0126, 0x2091,
-	0x8000, 0x00b6, 0x00c6, 0x90e4, 0xc000, 0x0128, 0x0006, 0x080c,
-	0xb879, 0x000e, 0x1198, 0xd0e4, 0x0160, 0x9180, 0x1000, 0x2004,
-	0x905d, 0x0160, 0x080c, 0x5cef, 0x080c, 0x9b4b, 0x0110, 0xb817,
-	0x0000, 0x9006, 0x00ce, 0x00be, 0x012e, 0x0005, 0x9085, 0x0001,
-	0x0cc8, 0x0126, 0x2091, 0x8000, 0x0156, 0x2010, 0x900e, 0x20a9,
-	0x0800, 0x0016, 0x9180, 0x1000, 0x2004, 0x9005, 0x0180, 0x9186,
-	0x007e, 0x0168, 0x9186, 0x007f, 0x0150, 0x9186, 0x0080, 0x0138,
-	0x9186, 0x00ff, 0x0120, 0x0026, 0x2200, 0x0801, 0x002e, 0x001e,
-	0x8108, 0x1f04, 0x5369, 0x015e, 0x012e, 0x0005, 0x2001, 0x1854,
-	0x2004, 0x0005, 0x2001, 0x1873, 0x2004, 0x0005, 0x0006, 0x2001,
-	0x1810, 0x2004, 0xd0d4, 0x000e, 0x0005, 0x2001, 0x180e, 0x2004,
-	0xd0b4, 0x0005, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x0005,
-	0x0016, 0x00e6, 0x2071, 0x1894, 0x7108, 0x910d, 0x710a, 0x00ee,
-	0x001e, 0x0005, 0x79a4, 0x9182, 0x0081, 0x1a04, 0x33b8, 0x810c,
-	0x0016, 0x080c, 0x4871, 0x080c, 0x0f2a, 0x2100, 0x2238, 0x7d84,
-	0x7c88, 0x7b8c, 0x7a90, 0x001e, 0x080c, 0x48ba, 0x701f, 0x53c1,
-	0x0005, 0x2079, 0x0000, 0x7d94, 0x7c98, 0x7ba8, 0x7aac, 0x79a4,
-	0x810c, 0x2061, 0x18ae, 0x2c44, 0xa770, 0xa074, 0x2071, 0x1894,
-	0x080c, 0x48bd, 0x701f, 0x53d5, 0x0005, 0x2061, 0x18ae, 0x2c44,
-	0x0016, 0x0026, 0xa270, 0xa174, 0x080c, 0x0f32, 0x002e, 0x001e,
-	0x080c, 0x0fdf, 0x9006, 0xa802, 0xa806, 0x0804, 0x3383, 0x0126,
-	0x0156, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6,
-	0x00f6, 0x2061, 0x0100, 0x2069, 0x0200, 0x2071, 0x1800, 0x6044,
-	0xd0a4, 0x11e8, 0xd084, 0x0118, 0x080c, 0x5590, 0x0068, 0xd08c,
-	0x0118, 0x080c, 0x5499, 0x0040, 0xd094, 0x0118, 0x080c, 0x5469,
-	0x0018, 0xd09c, 0x0108, 0x0099, 0x00fe, 0x00ee, 0x00de, 0x00ce,
-	0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x012e, 0x0005, 0x0016,
-	0x6128, 0xd19c, 0x1110, 0xc19d, 0x612a, 0x001e, 0x0c68, 0x0006,
-	0x7094, 0x9005, 0x000e, 0x0120, 0x7097, 0x0000, 0x708f, 0x0000,
-	0x624c, 0x9286, 0xf0f0, 0x1150, 0x6048, 0x9086, 0xf0f0, 0x0130,
-	0x624a, 0x6043, 0x0090, 0x6043, 0x0010, 0x0490, 0x9294, 0xff00,
-	0x9296, 0xf700, 0x0178, 0x7138, 0xd1a4, 0x1160, 0x6240, 0x9295,
-	0x0100, 0x6242, 0x9294, 0x0010, 0x0128, 0x2009, 0x00f7, 0x080c,
-	0x5c51, 0x00f0, 0x6040, 0x9084, 0x0010, 0x9085, 0x0140, 0x6042,
-	0x6043, 0x0000, 0x7083, 0x0000, 0x709f, 0x0001, 0x70c3, 0x0000,
-	0x70db, 0x0000, 0x2009, 0x1d80, 0x200b, 0x0000, 0x7093, 0x0000,
-	0x7087, 0x000f, 0x2009, 0x000f, 0x2011, 0x5b33, 0x080c, 0x81f5,
-	0x0005, 0x2001, 0x1875, 0x2004, 0xd08c, 0x0110, 0x705b, 0xffff,
-	0x7084, 0x9005, 0x1528, 0x2011, 0x5b33, 0x080c, 0x8131, 0x6040,
-	0x9094, 0x0010, 0x9285, 0x0020, 0x6042, 0x20a9, 0x00c8, 0x6044,
-	0xd08c, 0x1168, 0x1f04, 0x547f, 0x6242, 0x7097, 0x0000, 0x6040,
-	0x9094, 0x0010, 0x9285, 0x0080, 0x6042, 0x6242, 0x0048, 0x6242,
-	0x7097, 0x0000, 0x708b, 0x0000, 0x9006, 0x080c, 0x5cda, 0x0000,
-	0x0005, 0x7088, 0x908a, 0x0003, 0x1a0c, 0x0d65, 0x000b, 0x0005,
-	0x54a3, 0x54f4, 0x558f, 0x00f6, 0x0016, 0x6900, 0x918c, 0x0800,
-	0x708b, 0x0001, 0x2001, 0x015d, 0x2003, 0x0000, 0x6803, 0x00fc,
-	0x20a9, 0x0004, 0x6800, 0x9084, 0x00fc, 0x0120, 0x1f04, 0x54b2,
-	0x080c, 0x0d65, 0x68a0, 0x68a2, 0x689c, 0x689e, 0x6898, 0x689a,
-	0xa001, 0x918d, 0x1600, 0x6902, 0x001e, 0x6837, 0x0020, 0x080c,
-	0x5cb6, 0x2079, 0x1d00, 0x7833, 0x1101, 0x7837, 0x0000, 0x20e1,
-	0x0001, 0x2099, 0x1805, 0x20e9, 0x0001, 0x20a1, 0x1d0e, 0x20a9,
-	0x0004, 0x4003, 0x080c, 0x97df, 0x20e1, 0x0001, 0x2099, 0x1d00,
+	0x0001, 0x2001, 0x0030, 0x0005, 0xa897, 0x4000, 0x2001, 0x194f,
+	0x2004, 0xd0fc, 0x1128, 0x080c, 0x5395, 0x0110, 0x9006, 0x0018,
+	0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x78a8, 0xd08c,
+	0x1118, 0xd084, 0x0904, 0x429e, 0x080c, 0x48ab, 0x0904, 0x33bf,
+	0x080c, 0x4878, 0x1120, 0x2009, 0x0002, 0x0804, 0x33bc, 0x080c,
+	0x6667, 0x0130, 0x908e, 0x0004, 0x0118, 0x908e, 0x0005, 0x15a0,
+	0x78a8, 0xd08c, 0x0120, 0xb800, 0xc08c, 0xb802, 0x0028, 0x080c,
+	0x538d, 0xd0b4, 0x0904, 0x42d8, 0x7884, 0x908e, 0x007e, 0x0904,
+	0x42d8, 0x908e, 0x007f, 0x0904, 0x42d8, 0x908e, 0x0080, 0x0904,
+	0x42d8, 0xb800, 0xd08c, 0x1904, 0x42d8, 0xa867, 0x0000, 0xa868,
+	0xc0fd, 0xa86a, 0x080c, 0xba16, 0x1120, 0x2009, 0x0003, 0x0804,
+	0x33bc, 0x7007, 0x0003, 0x701f, 0x4fa6, 0x0005, 0x080c, 0x48ab,
+	0x0904, 0x33bf, 0x0804, 0x42d8, 0x080c, 0x3181, 0x0108, 0x0005,
+	0x2009, 0x1833, 0x210c, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804,
+	0x33bc, 0x080c, 0x53a1, 0x0120, 0x2009, 0x0007, 0x0804, 0x33bc,
+	0x080c, 0x665f, 0x0120, 0x2009, 0x0008, 0x0804, 0x33bc, 0xb89c,
+	0xd0a4, 0x1118, 0xd0ac, 0x1904, 0x42d8, 0x9006, 0xa866, 0xa832,
+	0xa868, 0xc0fd, 0xa86a, 0x080c, 0xba79, 0x1120, 0x2009, 0x0003,
+	0x0804, 0x33bc, 0x7007, 0x0003, 0x701f, 0x4fdf, 0x0005, 0xa830,
+	0x9086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x52ea, 0x080c,
+	0x48ab, 0x0904, 0x33bf, 0x0804, 0x4f78, 0x81ff, 0x2009, 0x0001,
+	0x1904, 0x33bc, 0x080c, 0x53a1, 0x2009, 0x0007, 0x1904, 0x33bc,
+	0x080c, 0x665f, 0x0120, 0x2009, 0x0008, 0x0804, 0x33bc, 0x080c,
+	0x48ab, 0x0904, 0x33bf, 0x080c, 0x6667, 0x2009, 0x0009, 0x1904,
+	0x33bc, 0x080c, 0x4878, 0x2009, 0x0002, 0x0904, 0x33bc, 0x9006,
+	0xa866, 0xa832, 0xa868, 0xc0fd, 0xa86a, 0x7988, 0x9194, 0xff00,
+	0x918c, 0x00ff, 0x9006, 0x82ff, 0x1128, 0xc0ed, 0xa952, 0x798c,
+	0xa956, 0x0038, 0x928e, 0x0100, 0x1904, 0x33bf, 0xc0e5, 0xa952,
+	0xa956, 0xa83e, 0x080c, 0xbcdc, 0x2009, 0x0003, 0x0904, 0x33bc,
+	0x7007, 0x0003, 0x701f, 0x5035, 0x0005, 0xa830, 0x9086, 0x0100,
+	0x2009, 0x0004, 0x0904, 0x33bc, 0x0804, 0x338a, 0x7aa8, 0x9284,
+	0xc000, 0x0148, 0xd2ec, 0x01a0, 0x080c, 0x53a1, 0x1188, 0x2009,
+	0x0014, 0x0804, 0x33bc, 0xd2dc, 0x1568, 0x81ff, 0x2009, 0x0001,
+	0x1904, 0x33bc, 0x080c, 0x53a1, 0x2009, 0x0007, 0x1904, 0x33bc,
+	0xd2f4, 0x0130, 0x9284, 0x5000, 0x080c, 0x5368, 0x0804, 0x338a,
+	0xd2fc, 0x0158, 0x080c, 0x48ab, 0x0904, 0x33bf, 0x7984, 0x9284,
+	0x9000, 0x080c, 0x5345, 0x0804, 0x338a, 0x080c, 0x48ab, 0x0904,
+	0x33bf, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x2009, 0x0009,
+	0x1904, 0x511e, 0x080c, 0x4878, 0x2009, 0x0002, 0x0904, 0x511e,
+	0xa85c, 0x9080, 0x001b, 0xaf60, 0x2009, 0x0008, 0x7a8c, 0x7b88,
+	0x7c9c, 0x7d98, 0x080c, 0x48c1, 0x701f, 0x508f, 0x0005, 0xa86c,
+	0x9086, 0x0500, 0x1138, 0xa870, 0x9005, 0x1120, 0xa874, 0x9084,
+	0xff00, 0x0110, 0x1904, 0x33bf, 0xa866, 0xa832, 0xa868, 0xc0fd,
+	0xa86a, 0x080c, 0x48ab, 0x1110, 0x0804, 0x33bf, 0x2009, 0x0043,
+	0x080c, 0xbd44, 0x2009, 0x0003, 0x0904, 0x511e, 0x7007, 0x0003,
+	0x701f, 0x50b3, 0x0005, 0xa830, 0x9086, 0x0100, 0x2009, 0x0004,
+	0x0904, 0x511e, 0x7984, 0x7aa8, 0x9284, 0x1000, 0x080c, 0x5345,
+	0x0804, 0x338a, 0x00c6, 0xaab0, 0x9284, 0xc000, 0x0140, 0xd2ec,
+	0x0168, 0x080c, 0x53a1, 0x1150, 0x2009, 0x0014, 0x04f0, 0x2061,
+	0x1800, 0x080c, 0x53a1, 0x2009, 0x0007, 0x15b8, 0xd2f4, 0x0128,
+	0x9284, 0x5000, 0x080c, 0x5368, 0x0050, 0xd2fc, 0x0178, 0x080c,
+	0x48a9, 0x0588, 0xa998, 0x9284, 0x9000, 0x080c, 0x5345, 0xa87b,
+	0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0x0438, 0x080c, 0x48a9,
+	0x0510, 0x080c, 0x6667, 0x2009, 0x0009, 0x11b8, 0xa8c4, 0x9086,
+	0x0500, 0x11c8, 0xa8c8, 0x9005, 0x11b0, 0xa8cc, 0x9084, 0xff00,
+	0x1190, 0x080c, 0x48a9, 0x1108, 0x0070, 0x2009, 0x004b, 0x080c,
+	0xbd44, 0x2009, 0x0003, 0x0108, 0x0078, 0x0429, 0x19c0, 0xa897,
+	0x4005, 0xa99a, 0x0010, 0xa897, 0x4006, 0x900e, 0x9085, 0x0001,
+	0x2001, 0x0030, 0x00ce, 0x0005, 0x9006, 0x0ce0, 0x7aa8, 0xd2dc,
+	0x0904, 0x33bc, 0x0016, 0x7984, 0x9284, 0x1000, 0xc0fd, 0x080c,
+	0x5345, 0x001e, 0x1904, 0x33bc, 0x0804, 0x338a, 0x00f6, 0x2d78,
+	0x0011, 0x00fe, 0x0005, 0xaab0, 0xd2dc, 0x0150, 0x0016, 0xa998,
+	0x9284, 0x1000, 0xc0fd, 0x080c, 0x5345, 0x001e, 0x9085, 0x0001,
+	0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x33bc, 0x080c,
+	0x53a1, 0x0120, 0x2009, 0x0007, 0x0804, 0x33bc, 0x7984, 0x7ea8,
+	0x96b4, 0x00ff, 0x080c, 0x6270, 0x1904, 0x33bf, 0x9186, 0x007f,
+	0x0138, 0x080c, 0x6667, 0x0120, 0x2009, 0x0009, 0x0804, 0x33bc,
+	0x080c, 0x4878, 0x1120, 0x2009, 0x0002, 0x0804, 0x33bc, 0xa867,
+	0x0000, 0xa868, 0xc0fd, 0xa86a, 0x2001, 0x0100, 0x8007, 0xa80a,
+	0x080c, 0xba30, 0x1120, 0x2009, 0x0003, 0x0804, 0x33bc, 0x7007,
+	0x0003, 0x701f, 0x517c, 0x0005, 0xa808, 0x8007, 0x9086, 0x0100,
+	0x1120, 0x2009, 0x0004, 0x0804, 0x33bc, 0xa8e0, 0xa866, 0xa810,
+	0x8007, 0x9084, 0x00ff, 0x800c, 0xa814, 0x8007, 0x9084, 0x00ff,
+	0x8004, 0x9080, 0x0002, 0x9108, 0x8906, 0x8006, 0x8007, 0x90bc,
+	0x003f, 0x9084, 0xffc0, 0x9080, 0x0004, 0x7a8c, 0x7b88, 0x7c9c,
+	0x7d98, 0x0804, 0x48c4, 0x080c, 0x4878, 0x1120, 0x2009, 0x0002,
+	0x0804, 0x33bc, 0x7984, 0x9194, 0xff00, 0x918c, 0x00ff, 0x8217,
+	0x82ff, 0x1118, 0x7023, 0x1984, 0x0040, 0x92c6, 0x0001, 0x1118,
+	0x7023, 0x199e, 0x0010, 0x0804, 0x33bf, 0x2009, 0x001a, 0x7a8c,
+	0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x080c,
+	0x48c1, 0x701f, 0x51cc, 0x0005, 0x2001, 0x182d, 0x2003, 0x0001,
+	0xa85c, 0x9080, 0x0019, 0x2098, 0xa860, 0x20e0, 0x20a9, 0x001a,
+	0x7020, 0x20a0, 0x20e9, 0x0001, 0x4003, 0x0804, 0x338a, 0x080c,
+	0x4878, 0x1120, 0x2009, 0x0002, 0x0804, 0x33bc, 0x7984, 0x9194,
+	0xff00, 0x918c, 0x00ff, 0x8217, 0x82ff, 0x1118, 0x2099, 0x1984,
+	0x0040, 0x92c6, 0x0001, 0x1118, 0x2099, 0x199e, 0x0010, 0x0804,
+	0x33bf, 0xa85c, 0x9080, 0x0019, 0x20a0, 0xa860, 0x20e8, 0x20a9,
+	0x001a, 0x20e1, 0x0001, 0x4003, 0x2009, 0x001a, 0x7a8c, 0x7b88,
+	0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x0019, 0xaf60, 0x0804, 0x48c4,
+	0x7884, 0x908a, 0x1000, 0x1a04, 0x33bf, 0x0126, 0x2091, 0x8000,
+	0x8003, 0x800b, 0x810b, 0x9108, 0x00c6, 0x2061, 0x19d4, 0x6142,
+	0x00ce, 0x012e, 0x0804, 0x338a, 0x00c6, 0x080c, 0x70b7, 0x1160,
+	0x080c, 0x73b7, 0x080c, 0x5cdc, 0x9085, 0x0001, 0x080c, 0x70fe,
+	0x080c, 0x6fe8, 0x080c, 0x0d65, 0x2061, 0x1800, 0x6030, 0xc09d,
+	0x6032, 0x080c, 0x5b97, 0x00ce, 0x0005, 0x00c6, 0x2001, 0x1800,
+	0x2004, 0x908e, 0x0000, 0x0904, 0x33bc, 0x7884, 0x9005, 0x0188,
+	0x7888, 0x2061, 0x196d, 0x2c0c, 0x2062, 0x080c, 0x2801, 0x01a0,
+	0x080c, 0x2809, 0x0188, 0x080c, 0x2811, 0x0170, 0x2162, 0x0804,
+	0x33bf, 0x2061, 0x0100, 0x6038, 0x9086, 0x0007, 0x1118, 0x2009,
+	0x0001, 0x0010, 0x2009, 0x0000, 0x7884, 0x9086, 0x0002, 0x1588,
+	0x2061, 0x0100, 0x6028, 0xc09c, 0x602a, 0x080c, 0x98c8, 0x0026,
+	0x2011, 0x0003, 0x080c, 0x9339, 0x2011, 0x0002, 0x080c, 0x9343,
+	0x002e, 0x080c, 0x9206, 0x0036, 0x901e, 0x080c, 0x9286, 0x003e,
+	0x080c, 0x98e4, 0x60e3, 0x0000, 0x080c, 0xd5fb, 0x080c, 0xd616,
+	0x9085, 0x0001, 0x080c, 0x70fe, 0x9006, 0x080c, 0x2833, 0x2001,
+	0x1800, 0x2003, 0x0004, 0x0026, 0x2011, 0x0008, 0x080c, 0x286d,
+	0x002e, 0x00ce, 0x0804, 0x338a, 0x81ff, 0x0120, 0x2009, 0x0001,
+	0x0804, 0x33bc, 0x080c, 0x53a1, 0x0120, 0x2009, 0x0007, 0x0804,
+	0x33bc, 0x7984, 0x7ea8, 0x96b4, 0x00ff, 0x080c, 0x6270, 0x1904,
+	0x33bf, 0x9186, 0x007f, 0x0138, 0x080c, 0x6667, 0x0120, 0x2009,
+	0x0009, 0x0804, 0x33bc, 0x080c, 0x4878, 0x1120, 0x2009, 0x0002,
+	0x0804, 0x33bc, 0xa867, 0x0000, 0xa868, 0xc0fd, 0xa86a, 0x080c,
+	0xba33, 0x1120, 0x2009, 0x0003, 0x0804, 0x33bc, 0x7007, 0x0003,
+	0x701f, 0x52d3, 0x0005, 0xa830, 0x9086, 0x0100, 0x1120, 0x2009,
+	0x0004, 0x0804, 0x33bc, 0xa8e0, 0xa866, 0xa834, 0x8007, 0x800c,
+	0xa85c, 0x9080, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xaf60,
+	0x0804, 0x48c4, 0xa898, 0x9086, 0x000d, 0x1904, 0x33bc, 0x2021,
+	0x4005, 0x0126, 0x2091, 0x8000, 0x0e04, 0x52f7, 0x0010, 0x012e,
+	0x0cc0, 0x7c36, 0x9486, 0x4000, 0x0118, 0x7833, 0x0011, 0x0010,
+	0x7833, 0x0010, 0x7883, 0x4005, 0xa998, 0x7986, 0xa9a4, 0x799a,
+	0xa9a8, 0x799e, 0x080c, 0x48b4, 0x2091, 0x4080, 0x2001, 0x0089,
+	0x2004, 0xd084, 0x190c, 0x11be, 0x7007, 0x0001, 0x2091, 0x5000,
+	0x700f, 0x0000, 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x00c6,
+	0x2061, 0x19d4, 0x7984, 0x6152, 0x614e, 0x6057, 0x0000, 0x604b,
+	0x0009, 0x7898, 0x606a, 0x789c, 0x6066, 0x7888, 0x6062, 0x788c,
+	0x605e, 0x2001, 0x19e2, 0x2044, 0x2001, 0x19e9, 0xa076, 0xa060,
+	0xa072, 0xa07b, 0x0001, 0xa07f, 0x0002, 0xa06b, 0x0000, 0xa09f,
+	0x0000, 0x00ce, 0x012e, 0x0804, 0x338a, 0x0126, 0x2091, 0x8000,
+	0x00b6, 0x00c6, 0x90e4, 0xc000, 0x0128, 0x0006, 0x080c, 0xb894,
+	0x000e, 0x1198, 0xd0e4, 0x0160, 0x9180, 0x1000, 0x2004, 0x905d,
+	0x0160, 0x080c, 0x5cf6, 0x080c, 0x9b66, 0x0110, 0xb817, 0x0000,
+	0x9006, 0x00ce, 0x00be, 0x012e, 0x0005, 0x9085, 0x0001, 0x0cc8,
+	0x0126, 0x2091, 0x8000, 0x0156, 0x2010, 0x900e, 0x20a9, 0x0800,
+	0x0016, 0x9180, 0x1000, 0x2004, 0x9005, 0x0180, 0x9186, 0x007e,
+	0x0168, 0x9186, 0x007f, 0x0150, 0x9186, 0x0080, 0x0138, 0x9186,
+	0x00ff, 0x0120, 0x0026, 0x2200, 0x0801, 0x002e, 0x001e, 0x8108,
+	0x1f04, 0x5370, 0x015e, 0x012e, 0x0005, 0x2001, 0x1854, 0x2004,
+	0x0005, 0x2001, 0x1873, 0x2004, 0x0005, 0x0006, 0x2001, 0x1810,
+	0x2004, 0xd0d4, 0x000e, 0x0005, 0x2001, 0x180e, 0x2004, 0xd0b4,
+	0x0005, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x0005, 0x0016,
+	0x00e6, 0x2071, 0x1894, 0x7108, 0x910d, 0x710a, 0x00ee, 0x001e,
+	0x0005, 0x79a4, 0x9182, 0x0081, 0x1a04, 0x33bf, 0x810c, 0x0016,
+	0x080c, 0x4878, 0x080c, 0x0f2a, 0x2100, 0x2238, 0x7d84, 0x7c88,
+	0x7b8c, 0x7a90, 0x001e, 0x080c, 0x48c1, 0x701f, 0x53c8, 0x0005,
+	0x2079, 0x0000, 0x7d94, 0x7c98, 0x7ba8, 0x7aac, 0x79a4, 0x810c,
+	0x2061, 0x18ae, 0x2c44, 0xa770, 0xa074, 0x2071, 0x1894, 0x080c,
+	0x48c4, 0x701f, 0x53dc, 0x0005, 0x2061, 0x18ae, 0x2c44, 0x0016,
+	0x0026, 0xa270, 0xa174, 0x080c, 0x0f32, 0x002e, 0x001e, 0x080c,
+	0x0fdf, 0x9006, 0xa802, 0xa806, 0x0804, 0x338a, 0x0126, 0x0156,
+	0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6, 0x00f6,
+	0x2061, 0x0100, 0x2069, 0x0200, 0x2071, 0x1800, 0x6044, 0xd0a4,
+	0x11e8, 0xd084, 0x0118, 0x080c, 0x5597, 0x0068, 0xd08c, 0x0118,
+	0x080c, 0x54a0, 0x0040, 0xd094, 0x0118, 0x080c, 0x5470, 0x0018,
+	0xd09c, 0x0108, 0x0099, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de,
+	0x01ce, 0x014e, 0x013e, 0x015e, 0x012e, 0x0005, 0x0016, 0x6128,
+	0xd19c, 0x1110, 0xc19d, 0x612a, 0x001e, 0x0c68, 0x0006, 0x7094,
+	0x9005, 0x000e, 0x0120, 0x7097, 0x0000, 0x708f, 0x0000, 0x624c,
+	0x9286, 0xf0f0, 0x1150, 0x6048, 0x9086, 0xf0f0, 0x0130, 0x624a,
+	0x6043, 0x0090, 0x6043, 0x0010, 0x0490, 0x9294, 0xff00, 0x9296,
+	0xf700, 0x0178, 0x7138, 0xd1a4, 0x1160, 0x6240, 0x9295, 0x0100,
+	0x6242, 0x9294, 0x0010, 0x0128, 0x2009, 0x00f7, 0x080c, 0x5c58,
+	0x00f0, 0x6040, 0x9084, 0x0010, 0x9085, 0x0140, 0x6042, 0x6043,
+	0x0000, 0x7083, 0x0000, 0x709f, 0x0001, 0x70c3, 0x0000, 0x70db,
+	0x0000, 0x2009, 0x1d80, 0x200b, 0x0000, 0x7093, 0x0000, 0x7087,
+	0x000f, 0x2009, 0x000f, 0x2011, 0x5b3a, 0x080c, 0x821d, 0x0005,
+	0x2001, 0x1875, 0x2004, 0xd08c, 0x0110, 0x705b, 0xffff, 0x7084,
+	0x9005, 0x1528, 0x2011, 0x5b3a, 0x080c, 0x8159, 0x6040, 0x9094,
+	0x0010, 0x9285, 0x0020, 0x6042, 0x20a9, 0x00c8, 0x6044, 0xd08c,
+	0x1168, 0x1f04, 0x5486, 0x6242, 0x7097, 0x0000, 0x6040, 0x9094,
+	0x0010, 0x9285, 0x0080, 0x6042, 0x6242, 0x0048, 0x6242, 0x7097,
+	0x0000, 0x708b, 0x0000, 0x9006, 0x080c, 0x5ce1, 0x0000, 0x0005,
+	0x7088, 0x908a, 0x0003, 0x1a0c, 0x0d65, 0x000b, 0x0005, 0x54aa,
+	0x54fb, 0x5596, 0x00f6, 0x0016, 0x6900, 0x918c, 0x0800, 0x708b,
+	0x0001, 0x2001, 0x015d, 0x2003, 0x0000, 0x6803, 0x00fc, 0x20a9,
+	0x0004, 0x6800, 0x9084, 0x00fc, 0x0120, 0x1f04, 0x54b9, 0x080c,
+	0x0d65, 0x68a0, 0x68a2, 0x689c, 0x689e, 0x6898, 0x689a, 0xa001,
+	0x918d, 0x1600, 0x6902, 0x001e, 0x6837, 0x0020, 0x080c, 0x5cbd,
+	0x2079, 0x1d00, 0x7833, 0x1101, 0x7837, 0x0000, 0x20e1, 0x0001,
+	0x2099, 0x1805, 0x20e9, 0x0001, 0x20a1, 0x1d0e, 0x20a9, 0x0004,
+	0x4003, 0x080c, 0x97fa, 0x20e1, 0x0001, 0x2099, 0x1d00, 0x20e9,
+	0x0000, 0x20a1, 0x0240, 0x20a9, 0x0014, 0x4003, 0x60c3, 0x000c,
+	0x600f, 0x0000, 0x080c, 0x5b6b, 0x00fe, 0x9006, 0x708e, 0x6043,
+	0x0008, 0x6042, 0x0005, 0x00f6, 0x708c, 0x708f, 0x0000, 0x9025,
+	0x0904, 0x5573, 0x6020, 0xd0b4, 0x1904, 0x5571, 0x719c, 0x81ff,
+	0x0904, 0x555f, 0x9486, 0x000c, 0x1904, 0x556c, 0x9480, 0x0018,
+	0x8004, 0x20a8, 0x080c, 0x5cb6, 0x2011, 0x0260, 0x2019, 0x1d00,
+	0x220c, 0x2304, 0x9106, 0x11e8, 0x8210, 0x8318, 0x1f04, 0x5518,
+	0x6043, 0x0004, 0x2061, 0x0140, 0x605b, 0xbc94, 0x605f, 0xf0f0,
+	0x2061, 0x0100, 0x6043, 0x0006, 0x708b, 0x0002, 0x7097, 0x0002,
+	0x2009, 0x07d0, 0x2011, 0x5b41, 0x080c, 0x821d, 0x080c, 0x5cbd,
+	0x04c0, 0x080c, 0x5cb6, 0x2079, 0x0260, 0x7930, 0x918e, 0x1101,
+	0x1558, 0x7834, 0x9005, 0x1540, 0x7900, 0x918c, 0x00ff, 0x1118,
+	0x7804, 0x9005, 0x0190, 0x080c, 0x5cb6, 0x2011, 0x026e, 0x2019,
+	0x1805, 0x20a9, 0x0004, 0x220c, 0x2304, 0x9102, 0x0230, 0x11a0,
+	0x8210, 0x8318, 0x1f04, 0x5553, 0x0078, 0x709f, 0x0000, 0x080c,
+	0x5cb6, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0001, 0x20a1,
+	0x1d00, 0x20a9, 0x0014, 0x4003, 0x6043, 0x0008, 0x6043, 0x0000,
+	0x0010, 0x00fe, 0x0005, 0x6040, 0x9085, 0x0100, 0x6042, 0x6020,
+	0xd0b4, 0x1db8, 0x080c, 0x97fa, 0x20e1, 0x0001, 0x2099, 0x1d00,
 	0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x0014, 0x4003, 0x60c3,
-	0x000c, 0x600f, 0x0000, 0x080c, 0x5b64, 0x00fe, 0x9006, 0x708e,
-	0x6043, 0x0008, 0x6042, 0x0005, 0x00f6, 0x708c, 0x708f, 0x0000,
-	0x9025, 0x0904, 0x556c, 0x6020, 0xd0b4, 0x1904, 0x556a, 0x719c,
-	0x81ff, 0x0904, 0x5558, 0x9486, 0x000c, 0x1904, 0x5565, 0x9480,
-	0x0018, 0x8004, 0x20a8, 0x080c, 0x5caf, 0x2011, 0x0260, 0x2019,
-	0x1d00, 0x220c, 0x2304, 0x9106, 0x11e8, 0x8210, 0x8318, 0x1f04,
-	0x5511, 0x6043, 0x0004, 0x2061, 0x0140, 0x605b, 0xbc94, 0x605f,
-	0xf0f0, 0x2061, 0x0100, 0x6043, 0x0006, 0x708b, 0x0002, 0x7097,
-	0x0002, 0x2009, 0x07d0, 0x2011, 0x5b3a, 0x080c, 0x81f5, 0x080c,
-	0x5cb6, 0x04c0, 0x080c, 0x5caf, 0x2079, 0x0260, 0x7930, 0x918e,
-	0x1101, 0x1558, 0x7834, 0x9005, 0x1540, 0x7900, 0x918c, 0x00ff,
-	0x1118, 0x7804, 0x9005, 0x0190, 0x080c, 0x5caf, 0x2011, 0x026e,
-	0x2019, 0x1805, 0x20a9, 0x0004, 0x220c, 0x2304, 0x9102, 0x0230,
-	0x11a0, 0x8210, 0x8318, 0x1f04, 0x554c, 0x0078, 0x709f, 0x0000,
-	0x080c, 0x5caf, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0001,
-	0x20a1, 0x1d00, 0x20a9, 0x0014, 0x4003, 0x6043, 0x0008, 0x6043,
-	0x0000, 0x0010, 0x00fe, 0x0005, 0x6040, 0x9085, 0x0100, 0x6042,
-	0x6020, 0xd0b4, 0x1db8, 0x080c, 0x97df, 0x20e1, 0x0001, 0x2099,
-	0x1d00, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x0014, 0x4003,
-	0x60c3, 0x000c, 0x2011, 0x19c5, 0x2013, 0x0000, 0x708f, 0x0000,
-	0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0x8f8f, 0x08d8, 0x0005,
-	0x7094, 0x908a, 0x001d, 0x1a0c, 0x0d65, 0x000b, 0x0005, 0x55c1,
-	0x55d4, 0x55fd, 0x561d, 0x5643, 0x5672, 0x5698, 0x56d0, 0x56f6,
-	0x5724, 0x575f, 0x5797, 0x57b5, 0x57e0, 0x5802, 0x581d, 0x5827,
-	0x585b, 0x5881, 0x58b0, 0x58d6, 0x590e, 0x5952, 0x598f, 0x59b0,
-	0x5a09, 0x5a2b, 0x5a59, 0x5a59, 0x00c6, 0x2061, 0x1800, 0x6003,
-	0x0007, 0x2061, 0x0100, 0x6004, 0x9084, 0xfff9, 0x6006, 0x00ce,
-	0x0005, 0x2061, 0x0140, 0x605b, 0xbc94, 0x605f, 0xf0f0, 0x2061,
-	0x0100, 0x6043, 0x0002, 0x7097, 0x0001, 0x2009, 0x07d0, 0x2011,
-	0x5b3a, 0x080c, 0x81f5, 0x0005, 0x00f6, 0x708c, 0x9086, 0x0014,
-	0x1510, 0x6042, 0x6020, 0xd0b4, 0x11f0, 0x080c, 0x5caf, 0x2079,
-	0x0260, 0x7a30, 0x9296, 0x1102, 0x11a0, 0x7834, 0x9005, 0x1188,
-	0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001,
-	0x2011, 0x5b3a, 0x080c, 0x8131, 0x7097, 0x0010, 0x080c, 0x5827,
-	0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0003,
-	0x6043, 0x0004, 0x2011, 0x5b3a, 0x080c, 0x8131, 0x080c, 0x5c33,
-	0x2079, 0x0240, 0x7833, 0x1102, 0x7837, 0x0000, 0x20a9, 0x0008,
-	0x9f88, 0x000e, 0x200b, 0x0000, 0x8108, 0x1f04, 0x5612, 0x60c3,
-	0x0014, 0x080c, 0x5b64, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005,
-	0x0500, 0x2011, 0x5b3a, 0x080c, 0x8131, 0x9086, 0x0014, 0x11b8,
-	0x080c, 0x5caf, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1102, 0x1178,
-	0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005,
-	0x1110, 0x70c3, 0x0001, 0x7097, 0x0004, 0x0029, 0x0010, 0x080c,
-	0x5c8b, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0005, 0x080c, 0x5c33,
-	0x2079, 0x0240, 0x7833, 0x1103, 0x7837, 0x0000, 0x080c, 0x5caf,
-	0x080c, 0x5c92, 0x1170, 0x7080, 0x9005, 0x1158, 0x7158, 0x9186,
-	0xffff, 0x0138, 0x2011, 0x0008, 0x080c, 0x5ae7, 0x0168, 0x080c,
-	0x5c68, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9,
-	0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5b64,
-	0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, 0x5b3a,
-	0x080c, 0x8131, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5caf, 0x2079,
+	0x000c, 0x2011, 0x19c5, 0x2013, 0x0000, 0x708f, 0x0000, 0x60a3,
+	0x0056, 0x60a7, 0x9575, 0x080c, 0x8faa, 0x08d8, 0x0005, 0x7094,
+	0x908a, 0x001d, 0x1a0c, 0x0d65, 0x000b, 0x0005, 0x55c8, 0x55db,
+	0x5604, 0x5624, 0x564a, 0x5679, 0x569f, 0x56d7, 0x56fd, 0x572b,
+	0x5766, 0x579e, 0x57bc, 0x57e7, 0x5809, 0x5824, 0x582e, 0x5862,
+	0x5888, 0x58b7, 0x58dd, 0x5915, 0x5959, 0x5996, 0x59b7, 0x5a10,
+	0x5a32, 0x5a60, 0x5a60, 0x00c6, 0x2061, 0x1800, 0x6003, 0x0007,
+	0x2061, 0x0100, 0x6004, 0x9084, 0xfff9, 0x6006, 0x00ce, 0x0005,
+	0x2061, 0x0140, 0x605b, 0xbc94, 0x605f, 0xf0f0, 0x2061, 0x0100,
+	0x6043, 0x0002, 0x7097, 0x0001, 0x2009, 0x07d0, 0x2011, 0x5b41,
+	0x080c, 0x821d, 0x0005, 0x00f6, 0x708c, 0x9086, 0x0014, 0x1510,
+	0x6042, 0x6020, 0xd0b4, 0x11f0, 0x080c, 0x5cb6, 0x2079, 0x0260,
+	0x7a30, 0x9296, 0x1102, 0x11a0, 0x7834, 0x9005, 0x1188, 0x7a38,
+	0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x2011,
+	0x5b41, 0x080c, 0x8159, 0x7097, 0x0010, 0x080c, 0x582e, 0x0010,
+	0x708f, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0003, 0x6043,
+	0x0004, 0x2011, 0x5b41, 0x080c, 0x8159, 0x080c, 0x5c3a, 0x2079,
+	0x0240, 0x7833, 0x1102, 0x7837, 0x0000, 0x20a9, 0x0008, 0x9f88,
+	0x000e, 0x200b, 0x0000, 0x8108, 0x1f04, 0x5619, 0x60c3, 0x0014,
+	0x080c, 0x5b6b, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x0500,
+	0x2011, 0x5b41, 0x080c, 0x8159, 0x9086, 0x0014, 0x11b8, 0x080c,
+	0x5cb6, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1102, 0x1178, 0x7834,
+	0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110,
+	0x70c3, 0x0001, 0x7097, 0x0004, 0x0029, 0x0010, 0x080c, 0x5c92,
+	0x00fe, 0x0005, 0x00f6, 0x7097, 0x0005, 0x080c, 0x5c3a, 0x2079,
+	0x0240, 0x7833, 0x1103, 0x7837, 0x0000, 0x080c, 0x5cb6, 0x080c,
+	0x5c99, 0x1170, 0x7080, 0x9005, 0x1158, 0x7158, 0x9186, 0xffff,
+	0x0138, 0x2011, 0x0008, 0x080c, 0x5aee, 0x0168, 0x080c, 0x5c6f,
+	0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000,
+	0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5b6b, 0x00fe,
+	0x0005, 0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, 0x5b41, 0x080c,
+	0x8159, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5cb6, 0x2079, 0x0260,
+	0x7a30, 0x9296, 0x1103, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38,
+	0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097,
+	0x0006, 0x0029, 0x0010, 0x080c, 0x5c92, 0x00fe, 0x0005, 0x00f6,
+	0x7097, 0x0007, 0x080c, 0x5c3a, 0x2079, 0x0240, 0x7833, 0x1104,
+	0x7837, 0x0000, 0x080c, 0x5cb6, 0x080c, 0x5c99, 0x11b8, 0x7080,
+	0x9005, 0x11a0, 0x7160, 0x9186, 0xffff, 0x0180, 0x9180, 0x318b,
+	0x200d, 0x918c, 0xff00, 0x810f, 0x2011, 0x0008, 0x080c, 0x5aee,
+	0x0180, 0x080c, 0x4c97, 0x0110, 0x080c, 0x248d, 0x20a9, 0x0008,
+	0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e,
+	0x4003, 0x60c3, 0x0014, 0x080c, 0x5b6b, 0x00fe, 0x0005, 0x00f6,
+	0x708c, 0x9005, 0x0500, 0x2011, 0x5b41, 0x080c, 0x8159, 0x9086,
+	0x0014, 0x11b8, 0x080c, 0x5cb6, 0x2079, 0x0260, 0x7a30, 0x9296,
+	0x1104, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128,
+	0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, 0x0008, 0x0029,
+	0x0010, 0x080c, 0x5c92, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0009,
+	0x080c, 0x5c3a, 0x2079, 0x0240, 0x7833, 0x1105, 0x7837, 0x0100,
+	0x080c, 0x5c99, 0x1150, 0x7080, 0x9005, 0x1138, 0x080c, 0x5a61,
+	0x1188, 0x9085, 0x0001, 0x080c, 0x248d, 0x20a9, 0x0008, 0x080c,
+	0x5cb6, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1,
+	0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5b6b, 0x0010, 0x080c,
+	0x55bb, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x05a8, 0x2011,
+	0x5b41, 0x080c, 0x8159, 0x9086, 0x0014, 0x1560, 0x080c, 0x5cb6,
+	0x2079, 0x0260, 0x7a30, 0x9296, 0x1105, 0x1520, 0x7834, 0x9084,
+	0x0100, 0x2011, 0x0100, 0x921e, 0x1160, 0x7a38, 0xd2fc, 0x0128,
+	0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, 0x000a, 0x00b1,
+	0x0098, 0x9005, 0x1178, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005,
+	0x1110, 0x70c3, 0x0001, 0x7093, 0x0000, 0x7097, 0x000e, 0x080c,
+	0x5809, 0x0010, 0x080c, 0x5c92, 0x00fe, 0x0005, 0x00f6, 0x7097,
+	0x000b, 0x2011, 0x1d0e, 0x20e9, 0x0001, 0x22a0, 0x20a9, 0x0040,
+	0x2019, 0xffff, 0x4304, 0x080c, 0x5c3a, 0x2079, 0x0240, 0x7833,
+	0x1106, 0x7837, 0x0000, 0x080c, 0x5c99, 0x0118, 0x2013, 0x0000,
+	0x0020, 0x705c, 0x9085, 0x0100, 0x2012, 0x20a9, 0x0040, 0x2009,
+	0x024e, 0x2011, 0x1d0e, 0x220e, 0x8210, 0x8108, 0x9186, 0x0260,
+	0x1128, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x1f04, 0x578b,
+	0x60c3, 0x0084, 0x080c, 0x5b6b, 0x00fe, 0x0005, 0x00f6, 0x708c,
+	0x9005, 0x01c0, 0x2011, 0x5b41, 0x080c, 0x8159, 0x9086, 0x0084,
+	0x1178, 0x080c, 0x5cb6, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1106,
+	0x1138, 0x7834, 0x9005, 0x1120, 0x7097, 0x000c, 0x0029, 0x0010,
+	0x080c, 0x5c92, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x000d, 0x080c,
+	0x5c3a, 0x2079, 0x0240, 0x7833, 0x1107, 0x7837, 0x0000, 0x080c,
+	0x5cb6, 0x20a9, 0x0040, 0x2011, 0x026e, 0x2009, 0x024e, 0x220e,
+	0x8210, 0x8108, 0x9186, 0x0260, 0x1150, 0x6810, 0x8000, 0x6812,
+	0x2009, 0x0240, 0x6814, 0x8000, 0x6816, 0x2011, 0x0260, 0x1f04,
+	0x57cf, 0x60c3, 0x0084, 0x080c, 0x5b6b, 0x00fe, 0x0005, 0x00f6,
+	0x708c, 0x9005, 0x01e0, 0x2011, 0x5b41, 0x080c, 0x8159, 0x9086,
+	0x0084, 0x1198, 0x080c, 0x5cb6, 0x2079, 0x0260, 0x7a30, 0x9296,
+	0x1107, 0x1158, 0x7834, 0x9005, 0x1140, 0x7093, 0x0001, 0x080c,
+	0x5c0c, 0x7097, 0x000e, 0x0029, 0x0010, 0x080c, 0x5c92, 0x00fe,
+	0x0005, 0x918d, 0x0001, 0x080c, 0x5ce1, 0x7097, 0x000f, 0x708f,
+	0x0000, 0x2061, 0x0140, 0x605b, 0xbc85, 0x605f, 0xb5b5, 0x2061,
+	0x0100, 0x6043, 0x0005, 0x6043, 0x0004, 0x2009, 0x07d0, 0x2011,
+	0x5b41, 0x080c, 0x814d, 0x0005, 0x708c, 0x9005, 0x0130, 0x2011,
+	0x5b41, 0x080c, 0x8159, 0x7097, 0x0000, 0x0005, 0x7097, 0x0011,
+	0x080c, 0x97fa, 0x080c, 0x5cb6, 0x20e1, 0x0000, 0x2099, 0x0260,
+	0x20e9, 0x0000, 0x20a1, 0x0240, 0x748c, 0x9480, 0x0018, 0x9080,
+	0x0007, 0x9084, 0x03f8, 0x8004, 0x20a8, 0x4003, 0x080c, 0x5c99,
+	0x11a0, 0x7178, 0x81ff, 0x0188, 0x900e, 0x707c, 0x9084, 0x00ff,
+	0x0160, 0x080c, 0x2424, 0x9186, 0x007e, 0x0138, 0x9186, 0x0080,
+	0x0120, 0x2011, 0x0008, 0x080c, 0x5aee, 0x60c3, 0x0014, 0x080c,
+	0x5b6b, 0x0005, 0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, 0x5b41,
+	0x080c, 0x8159, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5cb6, 0x2079,
 	0x0260, 0x7a30, 0x9296, 0x1103, 0x1178, 0x7834, 0x9005, 0x1160,
 	0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001,
-	0x7097, 0x0006, 0x0029, 0x0010, 0x080c, 0x5c8b, 0x00fe, 0x0005,
-	0x00f6, 0x7097, 0x0007, 0x080c, 0x5c33, 0x2079, 0x0240, 0x7833,
-	0x1104, 0x7837, 0x0000, 0x080c, 0x5caf, 0x080c, 0x5c92, 0x11b8,
-	0x7080, 0x9005, 0x11a0, 0x7160, 0x9186, 0xffff, 0x0180, 0x9180,
-	0x3184, 0x200d, 0x918c, 0xff00, 0x810f, 0x2011, 0x0008, 0x080c,
-	0x5ae7, 0x0180, 0x080c, 0x4c90, 0x0110, 0x080c, 0x248d, 0x20a9,
-	0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1,
-	0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5b64, 0x00fe, 0x0005,
-	0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, 0x5b3a, 0x080c, 0x8131,
-	0x9086, 0x0014, 0x11b8, 0x080c, 0x5caf, 0x2079, 0x0260, 0x7a30,
-	0x9296, 0x1104, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc,
-	0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, 0x0008,
-	0x0029, 0x0010, 0x080c, 0x5c8b, 0x00fe, 0x0005, 0x00f6, 0x7097,
-	0x0009, 0x080c, 0x5c33, 0x2079, 0x0240, 0x7833, 0x1105, 0x7837,
-	0x0100, 0x080c, 0x5c92, 0x1150, 0x7080, 0x9005, 0x1138, 0x080c,
-	0x5a5a, 0x1188, 0x9085, 0x0001, 0x080c, 0x248d, 0x20a9, 0x0008,
-	0x080c, 0x5caf, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000,
-	0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5b64, 0x0010,
-	0x080c, 0x55b4, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x05a8,
-	0x2011, 0x5b3a, 0x080c, 0x8131, 0x9086, 0x0014, 0x1560, 0x080c,
-	0x5caf, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1105, 0x1520, 0x7834,
-	0x9084, 0x0100, 0x2011, 0x0100, 0x921e, 0x1160, 0x7a38, 0xd2fc,
-	0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, 0x000a,
-	0x00b1, 0x0098, 0x9005, 0x1178, 0x7a38, 0xd2fc, 0x0128, 0x70c0,
-	0x9005, 0x1110, 0x70c3, 0x0001, 0x7093, 0x0000, 0x7097, 0x000e,
-	0x080c, 0x5802, 0x0010, 0x080c, 0x5c8b, 0x00fe, 0x0005, 0x00f6,
-	0x7097, 0x000b, 0x2011, 0x1d0e, 0x20e9, 0x0001, 0x22a0, 0x20a9,
-	0x0040, 0x2019, 0xffff, 0x4304, 0x080c, 0x5c33, 0x2079, 0x0240,
-	0x7833, 0x1106, 0x7837, 0x0000, 0x080c, 0x5c92, 0x0118, 0x2013,
-	0x0000, 0x0020, 0x705c, 0x9085, 0x0100, 0x2012, 0x20a9, 0x0040,
-	0x2009, 0x024e, 0x2011, 0x1d0e, 0x220e, 0x8210, 0x8108, 0x9186,
-	0x0260, 0x1128, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x1f04,
-	0x5784, 0x60c3, 0x0084, 0x080c, 0x5b64, 0x00fe, 0x0005, 0x00f6,
-	0x708c, 0x9005, 0x01c0, 0x2011, 0x5b3a, 0x080c, 0x8131, 0x9086,
-	0x0084, 0x1178, 0x080c, 0x5caf, 0x2079, 0x0260, 0x7a30, 0x9296,
-	0x1106, 0x1138, 0x7834, 0x9005, 0x1120, 0x7097, 0x000c, 0x0029,
-	0x0010, 0x080c, 0x5c8b, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x000d,
-	0x080c, 0x5c33, 0x2079, 0x0240, 0x7833, 0x1107, 0x7837, 0x0000,
-	0x080c, 0x5caf, 0x20a9, 0x0040, 0x2011, 0x026e, 0x2009, 0x024e,
-	0x220e, 0x8210, 0x8108, 0x9186, 0x0260, 0x1150, 0x6810, 0x8000,
-	0x6812, 0x2009, 0x0240, 0x6814, 0x8000, 0x6816, 0x2011, 0x0260,
-	0x1f04, 0x57c8, 0x60c3, 0x0084, 0x080c, 0x5b64, 0x00fe, 0x0005,
-	0x00f6, 0x708c, 0x9005, 0x01e0, 0x2011, 0x5b3a, 0x080c, 0x8131,
-	0x9086, 0x0084, 0x1198, 0x080c, 0x5caf, 0x2079, 0x0260, 0x7a30,
-	0x9296, 0x1107, 0x1158, 0x7834, 0x9005, 0x1140, 0x7093, 0x0001,
-	0x080c, 0x5c05, 0x7097, 0x000e, 0x0029, 0x0010, 0x080c, 0x5c8b,
-	0x00fe, 0x0005, 0x918d, 0x0001, 0x080c, 0x5cda, 0x7097, 0x000f,
-	0x708f, 0x0000, 0x2061, 0x0140, 0x605b, 0xbc85, 0x605f, 0xb5b5,
-	0x2061, 0x0100, 0x6043, 0x0005, 0x6043, 0x0004, 0x2009, 0x07d0,
-	0x2011, 0x5b3a, 0x080c, 0x8125, 0x0005, 0x708c, 0x9005, 0x0130,
-	0x2011, 0x5b3a, 0x080c, 0x8131, 0x7097, 0x0000, 0x0005, 0x7097,
-	0x0011, 0x080c, 0x97df, 0x080c, 0x5caf, 0x20e1, 0x0000, 0x2099,
-	0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x748c, 0x9480, 0x0018,
-	0x9080, 0x0007, 0x9084, 0x03f8, 0x8004, 0x20a8, 0x4003, 0x080c,
-	0x5c92, 0x11a0, 0x7178, 0x81ff, 0x0188, 0x900e, 0x707c, 0x9084,
-	0x00ff, 0x0160, 0x080c, 0x2424, 0x9186, 0x007e, 0x0138, 0x9186,
-	0x0080, 0x0120, 0x2011, 0x0008, 0x080c, 0x5ae7, 0x60c3, 0x0014,
-	0x080c, 0x5b64, 0x0005, 0x00f6, 0x708c, 0x9005, 0x0500, 0x2011,
-	0x5b3a, 0x080c, 0x8131, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5caf,
-	0x2079, 0x0260, 0x7a30, 0x9296, 0x1103, 0x1178, 0x7834, 0x9005,
-	0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3,
-	0x0001, 0x7097, 0x0012, 0x0029, 0x0010, 0x708f, 0x0000, 0x00fe,
-	0x0005, 0x00f6, 0x7097, 0x0013, 0x080c, 0x5c41, 0x2079, 0x0240,
-	0x7833, 0x1103, 0x7837, 0x0000, 0x080c, 0x5caf, 0x080c, 0x5c92,
-	0x1170, 0x7080, 0x9005, 0x1158, 0x7158, 0x9186, 0xffff, 0x0138,
-	0x2011, 0x0008, 0x080c, 0x5ae7, 0x0168, 0x080c, 0x5c68, 0x20a9,
-	0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1,
-	0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5b64, 0x00fe, 0x0005,
-	0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, 0x5b3a, 0x080c, 0x8131,
-	0x9086, 0x0014, 0x11b8, 0x080c, 0x5caf, 0x2079, 0x0260, 0x7a30,
-	0x9296, 0x1104, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc,
-	0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, 0x0014,
-	0x0029, 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x7097,
-	0x0015, 0x080c, 0x5c41, 0x2079, 0x0240, 0x7833, 0x1104, 0x7837,
-	0x0000, 0x080c, 0x5caf, 0x080c, 0x5c92, 0x11b8, 0x7080, 0x9005,
-	0x11a0, 0x7160, 0x9186, 0xffff, 0x0180, 0x9180, 0x3184, 0x200d,
-	0x918c, 0xff00, 0x810f, 0x2011, 0x0008, 0x080c, 0x5ae7, 0x0180,
-	0x080c, 0x4c90, 0x0110, 0x080c, 0x248d, 0x20a9, 0x0008, 0x20e1,
-	0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003,
-	0x60c3, 0x0014, 0x080c, 0x5b64, 0x00fe, 0x0005, 0x00f6, 0x708c,
-	0x9005, 0x05f0, 0x2011, 0x5b3a, 0x080c, 0x8131, 0x9086, 0x0014,
-	0x15a8, 0x080c, 0x5caf, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1105,
-	0x1568, 0x7834, 0x9084, 0x0100, 0x2011, 0x0100, 0x921e, 0x1168,
-	0x9085, 0x0001, 0x080c, 0x5cda, 0x7a38, 0xd2fc, 0x0128, 0x70c0,
-	0x9005, 0x1110, 0x70c3, 0x0001, 0x0080, 0x9005, 0x11b8, 0x7a38,
-	0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x9085,
-	0x0001, 0x080c, 0x5cda, 0x7093, 0x0000, 0x7a38, 0xd2f4, 0x0110,
-	0x70db, 0x0008, 0x7097, 0x0016, 0x0029, 0x0010, 0x708f, 0x0000,
-	0x00fe, 0x0005, 0x080c, 0x97df, 0x080c, 0x5caf, 0x20e1, 0x0000,
-	0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000e,
-	0x4003, 0x2011, 0x026d, 0x2204, 0x9084, 0x0100, 0x2011, 0x024d,
-	0x2012, 0x2011, 0x026e, 0x7097, 0x0017, 0x080c, 0x5c92, 0x1150,
-	0x7080, 0x9005, 0x1138, 0x080c, 0x5a5a, 0x1188, 0x9085, 0x0001,
-	0x080c, 0x248d, 0x20a9, 0x0008, 0x080c, 0x5caf, 0x20e1, 0x0000,
+	0x7097, 0x0012, 0x0029, 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005,
+	0x00f6, 0x7097, 0x0013, 0x080c, 0x5c48, 0x2079, 0x0240, 0x7833,
+	0x1103, 0x7837, 0x0000, 0x080c, 0x5cb6, 0x080c, 0x5c99, 0x1170,
+	0x7080, 0x9005, 0x1158, 0x7158, 0x9186, 0xffff, 0x0138, 0x2011,
+	0x0008, 0x080c, 0x5aee, 0x0168, 0x080c, 0x5c6f, 0x20a9, 0x0008,
+	0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e,
+	0x4003, 0x60c3, 0x0014, 0x080c, 0x5b6b, 0x00fe, 0x0005, 0x00f6,
+	0x708c, 0x9005, 0x0500, 0x2011, 0x5b41, 0x080c, 0x8159, 0x9086,
+	0x0014, 0x11b8, 0x080c, 0x5cb6, 0x2079, 0x0260, 0x7a30, 0x9296,
+	0x1104, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128,
+	0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, 0x0014, 0x0029,
+	0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0015,
+	0x080c, 0x5c48, 0x2079, 0x0240, 0x7833, 0x1104, 0x7837, 0x0000,
+	0x080c, 0x5cb6, 0x080c, 0x5c99, 0x11b8, 0x7080, 0x9005, 0x11a0,
+	0x7160, 0x9186, 0xffff, 0x0180, 0x9180, 0x318b, 0x200d, 0x918c,
+	0xff00, 0x810f, 0x2011, 0x0008, 0x080c, 0x5aee, 0x0180, 0x080c,
+	0x4c97, 0x0110, 0x080c, 0x248d, 0x20a9, 0x0008, 0x20e1, 0x0000,
 	0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3,
-	0x0014, 0x080c, 0x5b64, 0x0010, 0x080c, 0x55b4, 0x0005, 0x00f6,
-	0x708c, 0x9005, 0x01d8, 0x2011, 0x5b3a, 0x080c, 0x8131, 0x9086,
-	0x0084, 0x1190, 0x080c, 0x5caf, 0x2079, 0x0260, 0x7a30, 0x9296,
-	0x1106, 0x1150, 0x7834, 0x9005, 0x1138, 0x9006, 0x080c, 0x5cda,
-	0x7097, 0x0018, 0x0029, 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005,
-	0x00f6, 0x7097, 0x0019, 0x080c, 0x5c41, 0x2079, 0x0240, 0x7833,
-	0x1106, 0x7837, 0x0000, 0x080c, 0x5caf, 0x2009, 0x026e, 0x2039,
-	0x1d0e, 0x20a9, 0x0040, 0x213e, 0x8738, 0x8108, 0x9186, 0x0280,
-	0x1128, 0x6814, 0x8000, 0x6816, 0x2009, 0x0260, 0x1f04, 0x59c3,
-	0x2039, 0x1d0e, 0x080c, 0x5c92, 0x11e8, 0x2728, 0x2514, 0x8207,
-	0x9084, 0x00ff, 0x8000, 0x2018, 0x9294, 0x00ff, 0x8007, 0x9205,
-	0x202a, 0x705c, 0x2310, 0x8214, 0x92a0, 0x1d0e, 0x2414, 0x938c,
-	0x0001, 0x0118, 0x9294, 0xff00, 0x0018, 0x9294, 0x00ff, 0x8007,
-	0x9215, 0x2222, 0x20a9, 0x0040, 0x2009, 0x024e, 0x270e, 0x8738,
-	0x8108, 0x9186, 0x0260, 0x1128, 0x6810, 0x8000, 0x6812, 0x2009,
-	0x0240, 0x1f04, 0x59f6, 0x60c3, 0x0084, 0x080c, 0x5b64, 0x00fe,
-	0x0005, 0x00f6, 0x708c, 0x9005, 0x01e0, 0x2011, 0x5b3a, 0x080c,
-	0x8131, 0x9086, 0x0084, 0x1198, 0x080c, 0x5caf, 0x2079, 0x0260,
-	0x7a30, 0x9296, 0x1107, 0x1158, 0x7834, 0x9005, 0x1140, 0x7093,
-	0x0001, 0x080c, 0x5c05, 0x7097, 0x001a, 0x0029, 0x0010, 0x708f,
-	0x0000, 0x00fe, 0x0005, 0x9085, 0x0001, 0x080c, 0x5cda, 0x7097,
-	0x001b, 0x080c, 0x97df, 0x080c, 0x5caf, 0x2011, 0x0260, 0x2009,
-	0x0240, 0x748c, 0x9480, 0x0018, 0x9080, 0x0007, 0x9084, 0x03f8,
-	0x8004, 0x20a8, 0x220e, 0x8210, 0x8108, 0x9186, 0x0260, 0x1150,
-	0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x6814, 0x8000, 0x6816,
-	0x2011, 0x0260, 0x1f04, 0x5a42, 0x60c3, 0x0084, 0x080c, 0x5b64,
-	0x0005, 0x0005, 0x0086, 0x0096, 0x2029, 0x1854, 0x252c, 0x20a9,
-	0x0008, 0x2041, 0x1d0e, 0x20e9, 0x0001, 0x28a0, 0x080c, 0x5caf,
-	0x20e1, 0x0000, 0x2099, 0x026e, 0x4003, 0x20a9, 0x0008, 0x2011,
-	0x0007, 0xd5d4, 0x0108, 0x9016, 0x2800, 0x9200, 0x200c, 0x91a6,
-	0xffff, 0x1148, 0xd5d4, 0x0110, 0x8210, 0x0008, 0x8211, 0x1f04,
-	0x5a74, 0x0804, 0x5ae3, 0x82ff, 0x1160, 0xd5d4, 0x0120, 0x91a6,
-	0x3fff, 0x0d90, 0x0020, 0x91a6, 0x3fff, 0x0904, 0x5ae3, 0x918d,
-	0xc000, 0x20a9, 0x0010, 0x2019, 0x0001, 0xd5d4, 0x0110, 0x2019,
-	0x0010, 0x2120, 0xd5d4, 0x0110, 0x8423, 0x0008, 0x8424, 0x1240,
-	0xd5d4, 0x0110, 0x8319, 0x0008, 0x8318, 0x1f04, 0x5a9a, 0x04d8,
-	0x23a8, 0x2021, 0x0001, 0x8426, 0x8425, 0x1f04, 0x5aac, 0x2328,
-	0x8529, 0x92be, 0x0007, 0x0158, 0x0006, 0x2039, 0x0007, 0x2200,
-	0x973a, 0x000e, 0x27a8, 0x95a8, 0x0010, 0x1f04, 0x5abb, 0x755a,
-	0x95c8, 0x3184, 0x292d, 0x95ac, 0x00ff, 0x757e, 0x6532, 0x6536,
-	0x0016, 0x2508, 0x080c, 0x246d, 0x001e, 0x60e7, 0x0000, 0x65ea,
-	0x2018, 0x2304, 0x9405, 0x201a, 0x7083, 0x0001, 0x20e9, 0x0000,
-	0x20a1, 0x024e, 0x20e1, 0x0001, 0x2898, 0x20a9, 0x0008, 0x4003,
-	0x9085, 0x0001, 0x0008, 0x9006, 0x009e, 0x008e, 0x0005, 0x0156,
-	0x01c6, 0x01d6, 0x0136, 0x0146, 0x22a8, 0x20e1, 0x0000, 0x2099,
-	0x026e, 0x20e9, 0x0000, 0x2011, 0x024e, 0x22a0, 0x4003, 0x014e,
-	0x013e, 0x01de, 0x01ce, 0x015e, 0x2118, 0x9026, 0x2001, 0x0007,
-	0x939a, 0x0010, 0x0218, 0x8420, 0x8001, 0x0cd0, 0x2118, 0x84ff,
-	0x0120, 0x939a, 0x0010, 0x8421, 0x1de0, 0x2021, 0x0001, 0x83ff,
-	0x0118, 0x8423, 0x8319, 0x1de8, 0x9238, 0x2029, 0x026e, 0x9528,
-	0x2504, 0x942c, 0x11b8, 0x9405, 0x203a, 0x715a, 0x91a0, 0x3184,
-	0x242d, 0x95ac, 0x00ff, 0x757e, 0x6532, 0x6536, 0x0016, 0x2508,
-	0x080c, 0x246d, 0x001e, 0x60e7, 0x0000, 0x65ea, 0x7083, 0x0001,
-	0x9084, 0x0000, 0x0005, 0x00e6, 0x2071, 0x1800, 0x7087, 0x0000,
-	0x00ee, 0x0005, 0x00e6, 0x00f6, 0x2079, 0x0100, 0x2071, 0x0140,
-	0x080c, 0x5bf4, 0x080c, 0x8f9c, 0x7004, 0x9084, 0x4000, 0x0110,
-	0x080c, 0x2843, 0x0126, 0x2091, 0x8000, 0x2071, 0x1825, 0x2073,
-	0x0000, 0x7840, 0x0026, 0x0016, 0x2009, 0x00f7, 0x080c, 0x5c51,
-	0x001e, 0x9094, 0x0010, 0x9285, 0x0080, 0x7842, 0x7a42, 0x002e,
-	0x012e, 0x00fe, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c,
-	0x27a2, 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012, 0x2011,
-	0x19c5, 0x2013, 0x0000, 0x708f, 0x0000, 0x012e, 0x60a3, 0x0056,
-	0x60a7, 0x9575, 0x080c, 0x8f8f, 0x6144, 0xd184, 0x0120, 0x7194,
-	0x918d, 0x2000, 0x0018, 0x7188, 0x918d, 0x1000, 0x2011, 0x196a,
-	0x2112, 0x2009, 0x07d0, 0x2011, 0x5b3a, 0x080c, 0x81f5, 0x0005,
-	0x0016, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x98ad,
-	0x080c, 0x9b52, 0x080c, 0x98c9, 0x2009, 0x00f7, 0x080c, 0x5c51,
-	0x2061, 0x19d4, 0x900e, 0x611a, 0x611e, 0x6172, 0x6176, 0x2061,
-	0x1800, 0x6003, 0x0001, 0x2061, 0x0100, 0x6043, 0x0090, 0x6043,
-	0x0010, 0x2009, 0x196a, 0x200b, 0x0000, 0x2009, 0x002d, 0x2011,
-	0x5bc0, 0x080c, 0x8125, 0x012e, 0x00ce, 0x002e, 0x001e, 0x0005,
-	0x00e6, 0x0006, 0x0126, 0x2091, 0x8000, 0x0471, 0x2071, 0x0100,
-	0x080c, 0x8f9c, 0x2071, 0x0140, 0x7004, 0x9084, 0x4000, 0x0110,
-	0x080c, 0x2843, 0x080c, 0x70b4, 0x0188, 0x080c, 0x70cf, 0x1170,
-	0x080c, 0x73b6, 0x0016, 0x080c, 0x253c, 0x2001, 0x193e, 0x2102,
-	0x001e, 0x080c, 0x73b1, 0x080c, 0x6fdd, 0x0050, 0x2009, 0x0001,
-	0x080c, 0x281f, 0x2001, 0x0001, 0x080c, 0x23c9, 0x080c, 0x5b90,
-	0x012e, 0x000e, 0x00ee, 0x0005, 0x2001, 0x180e, 0x2004, 0xd0bc,
-	0x0158, 0x0026, 0x0036, 0x2011, 0x8017, 0x2001, 0x196a, 0x201c,
-	0x080c, 0x48d1, 0x003e, 0x002e, 0x0005, 0x20a9, 0x0012, 0x20e9,
-	0x0001, 0x20a1, 0x1d80, 0x080c, 0x5caf, 0x20e9, 0x0000, 0x2099,
-	0x026e, 0x0099, 0x20a9, 0x0020, 0x080c, 0x5ca9, 0x2099, 0x0260,
-	0x20a1, 0x1d92, 0x0051, 0x20a9, 0x000e, 0x080c, 0x5cac, 0x2099,
-	0x0260, 0x20a1, 0x1db2, 0x0009, 0x0005, 0x0016, 0x0026, 0x3410,
-	0x3308, 0x2104, 0x8007, 0x2012, 0x8108, 0x8210, 0x1f04, 0x5c29,
-	0x002e, 0x001e, 0x0005, 0x080c, 0x97df, 0x20e1, 0x0001, 0x2099,
-	0x1d00, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003,
-	0x0005, 0x080c, 0x97df, 0x080c, 0x5caf, 0x20e1, 0x0000, 0x2099,
-	0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003,
-	0x0005, 0x00c6, 0x0006, 0x2061, 0x0100, 0x810f, 0x2001, 0x1833,
-	0x2004, 0x9005, 0x1138, 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff,
-	0x9105, 0x0010, 0x9185, 0x00f7, 0x604a, 0x000e, 0x00ce, 0x0005,
-	0x0016, 0x0046, 0x080c, 0x665c, 0x0158, 0x9006, 0x2020, 0x2009,
-	0x002a, 0x080c, 0xd251, 0x2001, 0x180c, 0x200c, 0xc195, 0x2102,
-	0x2019, 0x002a, 0x900e, 0x080c, 0x2fc2, 0x080c, 0xbf46, 0x0140,
-	0x0036, 0x2019, 0xffff, 0x2021, 0x0007, 0x080c, 0x4a6e, 0x003e,
-	0x004e, 0x001e, 0x0005, 0x080c, 0x5b90, 0x7097, 0x0000, 0x708f,
-	0x0000, 0x0005, 0x0006, 0x2001, 0x180c, 0x2004, 0xd09c, 0x0100,
-	0x000e, 0x0005, 0x0006, 0x0016, 0x0126, 0x2091, 0x8000, 0x2001,
-	0x0101, 0x200c, 0x918d, 0x0006, 0x2102, 0x012e, 0x001e, 0x000e,
-	0x0005, 0x2009, 0x0001, 0x0020, 0x2009, 0x0002, 0x0008, 0x900e,
-	0x6814, 0x9084, 0xffc0, 0x910d, 0x6916, 0x0005, 0x00f6, 0x0156,
-	0x0146, 0x01d6, 0x9006, 0x20a9, 0x0080, 0x20e9, 0x0001, 0x20a1,
-	0x1d00, 0x4004, 0x2079, 0x1d00, 0x7803, 0x2200, 0x7807, 0x00ef,
-	0x780f, 0x00ef, 0x7813, 0x0138, 0x7823, 0xffff, 0x7827, 0xffff,
-	0x01de, 0x014e, 0x015e, 0x00fe, 0x0005, 0x2001, 0x1800, 0x2003,
-	0x0001, 0x0005, 0x2001, 0x1977, 0x0118, 0x2003, 0x0001, 0x0010,
-	0x2003, 0x0000, 0x0005, 0x0156, 0x20a9, 0x0800, 0x2009, 0x1000,
-	0x9006, 0x200a, 0x8108, 0x1f04, 0x5ce9, 0x015e, 0x0005, 0x00d6,
-	0x0036, 0x0156, 0x0136, 0x0146, 0x2069, 0x1853, 0x9006, 0xb802,
-	0xb8c6, 0xb807, 0x0707, 0xb80a, 0xb80e, 0xb812, 0x9198, 0x3184,
-	0x231d, 0x939c, 0x00ff, 0xbb16, 0x0016, 0x0026, 0xb886, 0x080c,
-	0x9b4b, 0x1120, 0x9192, 0x007e, 0x1208, 0xbb86, 0x20a9, 0x0004,
-	0xb8b4, 0x20e8, 0xb9b8, 0x9198, 0x0006, 0x9006, 0x23a0, 0x4004,
-	0x20a9, 0x0004, 0x9198, 0x000a, 0x23a0, 0x4004, 0x002e, 0x001e,
-	0xb83e, 0xb842, 0xb8be, 0xb8c2, 0xb85e, 0xb862, 0xb866, 0xb86a,
-	0xb86f, 0x0100, 0xb872, 0xb876, 0xb87a, 0xb88a, 0xb88e, 0xb893,
-	0x0008, 0xb896, 0xb89a, 0xb89e, 0xb8ae, 0xb9a2, 0x0096, 0xb8a4,
-	0x904d, 0x0110, 0x080c, 0x1054, 0xb8a7, 0x0000, 0x009e, 0x9006,
-	0xb84a, 0x6810, 0xb83a, 0x680c, 0xb846, 0x6814, 0x9084, 0x00ff,
-	0xb842, 0x014e, 0x013e, 0x015e, 0x003e, 0x00de, 0x0005, 0x0126,
-	0x2091, 0x8000, 0xa974, 0xae78, 0x9684, 0x3fff, 0x9082, 0x4000,
-	0x1a04, 0x5dad, 0x9182, 0x0800, 0x1a04, 0x5db1, 0x2001, 0x180c,
-	0x2004, 0x9084, 0x0003, 0x1904, 0x5db7, 0x9188, 0x1000, 0x2104,
-	0x905d, 0x0198, 0xb804, 0x9084, 0x00ff, 0x908e, 0x0006, 0x1188,
-	0xb8a4, 0x900d, 0x1904, 0x5dc9, 0x080c, 0x6123, 0x9006, 0x012e,
-	0x0005, 0x2001, 0x0005, 0x900e, 0x04b8, 0x2001, 0x0028, 0x900e,
-	0x0498, 0x9082, 0x0006, 0x1290, 0x080c, 0x9b4b, 0x1160, 0xb8a0,
-	0x9084, 0xff80, 0x1140, 0xb900, 0xd1fc, 0x0d10, 0x2001, 0x0029,
-	0x2009, 0x1000, 0x0408, 0x2001, 0x0028, 0x00a8, 0x2009, 0x180c,
-	0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0068, 0xd184, 0x0118,
-	0x2001, 0x0004, 0x0040, 0x2001, 0x0029, 0xb900, 0xd1fc, 0x0118,
-	0x2009, 0x1000, 0x0048, 0x900e, 0x0038, 0x2001, 0x0029, 0x900e,
-	0x0018, 0x2001, 0x0029, 0x900e, 0x9005, 0x012e, 0x0005, 0x2001,
-	0x180c, 0x2004, 0xd084, 0x19d0, 0x9188, 0x1000, 0x2104, 0x9065,
-	0x09a8, 0x080c, 0x6660, 0x1990, 0xb800, 0xd0bc, 0x0978, 0x0804,
-	0x5d70, 0x080c, 0x64d4, 0x0904, 0x5d79, 0x0804, 0x5d74, 0x00e6,
-	0x2071, 0x19b8, 0x7004, 0x9086, 0x0002, 0x1128, 0x7030, 0x9080,
-	0x0004, 0x2004, 0x9b06, 0x00ee, 0x0005, 0x00b6, 0x00e6, 0x0126,
-	0x2091, 0x8000, 0xa974, 0x9182, 0x0800, 0x1a04, 0x5e58, 0x9188,
-	0x1000, 0x2104, 0x905d, 0x0904, 0x5e30, 0xb8a0, 0x9086, 0x007f,
-	0x0178, 0x080c, 0x6668, 0x0160, 0xa994, 0x81ff, 0x0130, 0x908e,
-	0x0004, 0x0130, 0x908e, 0x0005, 0x0118, 0x080c, 0x6660, 0x1598,
-	0xa87c, 0xd0fc, 0x01e0, 0xa894, 0x9005, 0x01c8, 0x2060, 0x0026,
-	0x2010, 0x080c, 0xb81a, 0x002e, 0x1120, 0x2001, 0x0008, 0x0804,
-	0x5e5a, 0x6020, 0x9086, 0x000a, 0x0120, 0x2001, 0x0008, 0x0804,
-	0x5e5a, 0x601a, 0x6003, 0x0008, 0x2900, 0x6016, 0x0058, 0x080c,
-	0x9b76, 0x05e8, 0x2b00, 0x6012, 0x2900, 0x6016, 0x600b, 0xffff,
-	0x6023, 0x000a, 0x2009, 0x0003, 0x080c, 0x9c6a, 0x9006, 0x0458,
-	0x2001, 0x0028, 0x0438, 0x9082, 0x0006, 0x1290, 0x080c, 0x9b4b,
-	0x1160, 0xb8a0, 0x9084, 0xff80, 0x1140, 0xb900, 0xd1fc, 0x0900,
-	0x2001, 0x0029, 0x2009, 0x1000, 0x00a8, 0x2001, 0x0028, 0x0090,
-	0x2009, 0x180c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0050,
-	0xd184, 0x0118, 0x2001, 0x0004, 0x0028, 0x2001, 0x0029, 0x0010,
-	0x2001, 0x0029, 0x9005, 0x012e, 0x00ee, 0x00be, 0x0005, 0x2001,
-	0x002c, 0x0cc0, 0x00f6, 0x00b6, 0x0126, 0x2091, 0x8000, 0xa8e0,
-	0x9005, 0x1550, 0xa8dc, 0x9082, 0x0101, 0x1630, 0xa8c8, 0x9005,
-	0x1518, 0xa8c4, 0x9082, 0x0101, 0x12f8, 0xa974, 0x2079, 0x1800,
-	0x9182, 0x0800, 0x12e8, 0x7830, 0x9084, 0x0003, 0x1130, 0xaa98,
-	0xab94, 0xa878, 0x9084, 0x0007, 0x00ea, 0x7930, 0xd18c, 0x0118,
-	0x2001, 0x0004, 0x0038, 0xd184, 0x0118, 0x2001, 0x0004, 0x0010,
-	0x2001, 0x0029, 0x900e, 0x0038, 0x2001, 0x002c, 0x900e, 0x0018,
-	0x2001, 0x0029, 0x900e, 0x9006, 0x0008, 0x9005, 0x012e, 0x00be,
-	0x00fe, 0x0005, 0x5eef, 0x5eaa, 0x5ec1, 0x5eef, 0x5eef, 0x5eef,
-	0x5eef, 0x5eef, 0x2100, 0x9082, 0x007e, 0x1278, 0x080c, 0x6209,
-	0x0148, 0x9046, 0xb810, 0x9306, 0x1904, 0x5ef7, 0xb814, 0x9206,
-	0x15f0, 0x0028, 0xbb12, 0xba16, 0x0010, 0x080c, 0x478b, 0x0150,
-	0x04b0, 0x080c, 0x6269, 0x1598, 0xb810, 0x9306, 0x1580, 0xb814,
-	0x9206, 0x1568, 0x080c, 0x9b76, 0x0530, 0x2b00, 0x6012, 0x080c,
-	0xbcc0, 0x2900, 0x6016, 0x600b, 0xffff, 0x6023, 0x000a, 0xa878,
-	0x9086, 0x0001, 0x1170, 0x080c, 0x3003, 0x9006, 0x080c, 0x61a6,
-	0x2001, 0x0002, 0x080c, 0x61ba, 0x2001, 0x0200, 0xb86e, 0xb893,
-	0x0002, 0x2009, 0x0003, 0x080c, 0x9c6a, 0x9006, 0x0068, 0x2001,
-	0x0001, 0x900e, 0x0038, 0x2001, 0x002c, 0x900e, 0x0018, 0x2001,
-	0x0028, 0x900e, 0x9005, 0x0000, 0x012e, 0x00be, 0x00fe, 0x0005,
-	0x00b6, 0x00f6, 0x00e6, 0x0126, 0x2091, 0x8000, 0xa894, 0x90c6,
-	0x0015, 0x0904, 0x60cc, 0x90c6, 0x0056, 0x0904, 0x60d0, 0x90c6,
-	0x0066, 0x0904, 0x60d4, 0x90c6, 0x0067, 0x0904, 0x60d8, 0x90c6,
-	0x0068, 0x0904, 0x60dc, 0x90c6, 0x0071, 0x0904, 0x60e0, 0x90c6,
-	0x0074, 0x0904, 0x60e4, 0x90c6, 0x007c, 0x0904, 0x60e8, 0x90c6,
-	0x007e, 0x0904, 0x60ec, 0x90c6, 0x0037, 0x0904, 0x60f0, 0x9016,
-	0x2079, 0x1800, 0xa974, 0x9186, 0x00ff, 0x0904, 0x60c7, 0x9182,
-	0x0800, 0x1a04, 0x60c7, 0x080c, 0x6269, 0x1198, 0xb804, 0x9084,
-	0x00ff, 0x9082, 0x0006, 0x1268, 0xa894, 0x90c6, 0x006f, 0x0148,
-	0x080c, 0x9b4b, 0x1904, 0x60b0, 0xb8a0, 0x9084, 0xff80, 0x1904,
-	0x60b0, 0xa894, 0x90c6, 0x006f, 0x0158, 0x90c6, 0x005e, 0x0904,
-	0x6010, 0x90c6, 0x0064, 0x0904, 0x6039, 0x2008, 0x0804, 0x5fd3,
-	0xa998, 0xa8b0, 0x2040, 0x080c, 0x9b4b, 0x1120, 0x9182, 0x007f,
-	0x0a04, 0x5fd3, 0x9186, 0x00ff, 0x0904, 0x5fd3, 0x9182, 0x0800,
-	0x1a04, 0x5fd3, 0xaaa0, 0xab9c, 0x7878, 0x9306, 0x1188, 0x787c,
-	0x0096, 0x924e, 0x1128, 0x2208, 0x2310, 0x009e, 0x0804, 0x5fd3,
-	0x99cc, 0xff00, 0x009e, 0x1120, 0x2208, 0x2310, 0x0804, 0x5fd3,
-	0x080c, 0x478b, 0x0904, 0x5fdc, 0x900e, 0x9016, 0x90c6, 0x4000,
-	0x1558, 0x0006, 0x080c, 0x6558, 0x1108, 0xc185, 0xb800, 0xd0bc,
-	0x0108, 0xc18d, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080,
-	0x0031, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098,
-	0x080c, 0x0f9f, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080,
-	0x0035, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x000a, 0x2098,
-	0x080c, 0x0f9f, 0x000e, 0x00c8, 0x90c6, 0x4007, 0x1110, 0x2408,
-	0x00a0, 0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0070, 0x90c6,
-	0x4009, 0x1108, 0x0050, 0x90c6, 0x4006, 0x0138, 0x2001, 0x4005,
-	0x2009, 0x000a, 0x0010, 0x2001, 0x4006, 0xa896, 0xa99a, 0xaa9e,
-	0x2001, 0x0030, 0x900e, 0x0470, 0x080c, 0x9b76, 0x1130, 0x2001,
-	0x4005, 0x2009, 0x0003, 0x9016, 0x0c80, 0x2b00, 0x6012, 0x080c,
-	0xbcc0, 0x2900, 0x6016, 0x6023, 0x0001, 0xa868, 0xd88c, 0x0108,
-	0xc0f5, 0xa86a, 0x0126, 0x2091, 0x8000, 0x080c, 0x3003, 0x012e,
-	0x9006, 0x080c, 0x61a6, 0x2001, 0x0002, 0x080c, 0x61ba, 0x2009,
-	0x0002, 0x080c, 0x9c6a, 0xa8b0, 0xd094, 0x0118, 0xb8c4, 0xc08d,
-	0xb8c6, 0x9006, 0x9005, 0x012e, 0x00ee, 0x00fe, 0x00be, 0x0005,
-	0x080c, 0x539a, 0x0118, 0x2009, 0x0007, 0x00f8, 0xa998, 0xaeb0,
-	0x080c, 0x6269, 0x1904, 0x5fce, 0x9186, 0x007f, 0x0130, 0x080c,
-	0x6660, 0x0118, 0x2009, 0x0009, 0x0080, 0x0096, 0x080c, 0x1022,
-	0x1120, 0x009e, 0x2009, 0x0002, 0x0040, 0x2900, 0x009e, 0xa806,
-	0x080c, 0xba18, 0x19b0, 0x2009, 0x0003, 0x2001, 0x4005, 0x0804,
-	0x5fd5, 0xa998, 0xaeb0, 0x080c, 0x6269, 0x1904, 0x5fce, 0x0096,
-	0x080c, 0x1022, 0x1128, 0x009e, 0x2009, 0x0002, 0x0804, 0x608d,
-	0x2900, 0x009e, 0xa806, 0x0096, 0x2048, 0x20a9, 0x002b, 0xb8b4,
-	0x20e0, 0xb8b8, 0x2098, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002,
-	0x20a0, 0x4003, 0x20a9, 0x0008, 0x9080, 0x0006, 0x20a0, 0xbbb8,
-	0x9398, 0x0006, 0x2398, 0x080c, 0x0f9f, 0x009e, 0xa87b, 0x0000,
-	0xa883, 0x0000, 0xa897, 0x4000, 0xd684, 0x1168, 0x080c, 0x5386,
-	0xd0b4, 0x1118, 0xa89b, 0x000b, 0x00e0, 0xb800, 0xd08c, 0x0118,
-	0xa89b, 0x000c, 0x00b0, 0x080c, 0x6660, 0x0118, 0xa89b, 0x0009,
-	0x0080, 0x080c, 0x539a, 0x0118, 0xa89b, 0x0007, 0x0050, 0x080c,
-	0xb9fb, 0x1904, 0x6009, 0x2009, 0x0003, 0x2001, 0x4005, 0x0804,
-	0x5fd5, 0xa87b, 0x0030, 0xa897, 0x4005, 0xa804, 0x8006, 0x8006,
-	0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2009,
-	0x002b, 0xaaa0, 0xab9c, 0xaca8, 0xada4, 0x2031, 0x0000, 0x2041,
-	0x1266, 0x080c, 0xa0da, 0x1904, 0x6009, 0x2009, 0x0002, 0x08e8,
-	0x2001, 0x0028, 0x900e, 0x0804, 0x600a, 0x2009, 0x180c, 0x210c,
-	0xd18c, 0x0118, 0x2001, 0x0004, 0x0038, 0xd184, 0x0118, 0x2001,
-	0x0004, 0x0010, 0x2001, 0x0029, 0x900e, 0x0804, 0x600a, 0x2001,
-	0x0029, 0x900e, 0x0804, 0x600a, 0x080c, 0x35a7, 0x0804, 0x600b,
-	0x080c, 0x50bb, 0x0804, 0x600b, 0x080c, 0x434d, 0x0804, 0x600b,
-	0x080c, 0x43c6, 0x0804, 0x600b, 0x080c, 0x4422, 0x0804, 0x600b,
-	0x080c, 0x4847, 0x0804, 0x600b, 0x080c, 0x4af3, 0x0804, 0x600b,
-	0x080c, 0x4d26, 0x0804, 0x600b, 0x080c, 0x4f1f, 0x0804, 0x600b,
-	0x080c, 0x37bc, 0x0804, 0x600b, 0x00b6, 0xa974, 0xae78, 0x9684,
-	0x3fff, 0x9082, 0x4000, 0x1608, 0x9182, 0x0800, 0x1258, 0x9188,
-	0x1000, 0x2104, 0x905d, 0x0130, 0x080c, 0x6660, 0x1138, 0x00d9,
-	0x9006, 0x00b0, 0x2001, 0x0028, 0x900e, 0x0090, 0x9082, 0x0006,
-	0x1240, 0xb900, 0xd1fc, 0x0d98, 0x2001, 0x0029, 0x2009, 0x1000,
-	0x0038, 0x2001, 0x0029, 0x900e, 0x0018, 0x2001, 0x0029, 0x900e,
-	0x9005, 0x00be, 0x0005, 0xa877, 0x0000, 0xb8c0, 0x9005, 0x1904,
-	0x619a, 0xb888, 0x9005, 0x1904, 0x619a, 0xb838, 0xb93c, 0x9102,
-	0x1a04, 0x619a, 0x2b10, 0x080c, 0x9ba3, 0x0904, 0x6196, 0x8108,
-	0xb93e, 0x6212, 0x2900, 0x6016, 0x6023, 0x0003, 0x600b, 0xffff,
+	0x0014, 0x080c, 0x5b6b, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005,
+	0x05f0, 0x2011, 0x5b41, 0x080c, 0x8159, 0x9086, 0x0014, 0x15a8,
+	0x080c, 0x5cb6, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1105, 0x1568,
+	0x7834, 0x9084, 0x0100, 0x2011, 0x0100, 0x921e, 0x1168, 0x9085,
+	0x0001, 0x080c, 0x5ce1, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005,
+	0x1110, 0x70c3, 0x0001, 0x0080, 0x9005, 0x11b8, 0x7a38, 0xd2fc,
+	0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x9085, 0x0001,
+	0x080c, 0x5ce1, 0x7093, 0x0000, 0x7a38, 0xd2f4, 0x0110, 0x70db,
+	0x0008, 0x7097, 0x0016, 0x0029, 0x0010, 0x708f, 0x0000, 0x00fe,
+	0x0005, 0x080c, 0x97fa, 0x080c, 0x5cb6, 0x20e1, 0x0000, 0x2099,
+	0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000e, 0x4003,
+	0x2011, 0x026d, 0x2204, 0x9084, 0x0100, 0x2011, 0x024d, 0x2012,
+	0x2011, 0x026e, 0x7097, 0x0017, 0x080c, 0x5c99, 0x1150, 0x7080,
+	0x9005, 0x1138, 0x080c, 0x5a61, 0x1188, 0x9085, 0x0001, 0x080c,
+	0x248d, 0x20a9, 0x0008, 0x080c, 0x5cb6, 0x20e1, 0x0000, 0x2099,
+	0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014,
+	0x080c, 0x5b6b, 0x0010, 0x080c, 0x55bb, 0x0005, 0x00f6, 0x708c,
+	0x9005, 0x01d8, 0x2011, 0x5b41, 0x080c, 0x8159, 0x9086, 0x0084,
+	0x1190, 0x080c, 0x5cb6, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1106,
+	0x1150, 0x7834, 0x9005, 0x1138, 0x9006, 0x080c, 0x5ce1, 0x7097,
+	0x0018, 0x0029, 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, 0x00f6,
+	0x7097, 0x0019, 0x080c, 0x5c48, 0x2079, 0x0240, 0x7833, 0x1106,
+	0x7837, 0x0000, 0x080c, 0x5cb6, 0x2009, 0x026e, 0x2039, 0x1d0e,
+	0x20a9, 0x0040, 0x213e, 0x8738, 0x8108, 0x9186, 0x0280, 0x1128,
+	0x6814, 0x8000, 0x6816, 0x2009, 0x0260, 0x1f04, 0x59ca, 0x2039,
+	0x1d0e, 0x080c, 0x5c99, 0x11e8, 0x2728, 0x2514, 0x8207, 0x9084,
+	0x00ff, 0x8000, 0x2018, 0x9294, 0x00ff, 0x8007, 0x9205, 0x202a,
+	0x705c, 0x2310, 0x8214, 0x92a0, 0x1d0e, 0x2414, 0x938c, 0x0001,
+	0x0118, 0x9294, 0xff00, 0x0018, 0x9294, 0x00ff, 0x8007, 0x9215,
+	0x2222, 0x20a9, 0x0040, 0x2009, 0x024e, 0x270e, 0x8738, 0x8108,
+	0x9186, 0x0260, 0x1128, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240,
+	0x1f04, 0x59fd, 0x60c3, 0x0084, 0x080c, 0x5b6b, 0x00fe, 0x0005,
+	0x00f6, 0x708c, 0x9005, 0x01e0, 0x2011, 0x5b41, 0x080c, 0x8159,
+	0x9086, 0x0084, 0x1198, 0x080c, 0x5cb6, 0x2079, 0x0260, 0x7a30,
+	0x9296, 0x1107, 0x1158, 0x7834, 0x9005, 0x1140, 0x7093, 0x0001,
+	0x080c, 0x5c0c, 0x7097, 0x001a, 0x0029, 0x0010, 0x708f, 0x0000,
+	0x00fe, 0x0005, 0x9085, 0x0001, 0x080c, 0x5ce1, 0x7097, 0x001b,
+	0x080c, 0x97fa, 0x080c, 0x5cb6, 0x2011, 0x0260, 0x2009, 0x0240,
+	0x748c, 0x9480, 0x0018, 0x9080, 0x0007, 0x9084, 0x03f8, 0x8004,
+	0x20a8, 0x220e, 0x8210, 0x8108, 0x9186, 0x0260, 0x1150, 0x6810,
+	0x8000, 0x6812, 0x2009, 0x0240, 0x6814, 0x8000, 0x6816, 0x2011,
+	0x0260, 0x1f04, 0x5a49, 0x60c3, 0x0084, 0x080c, 0x5b6b, 0x0005,
+	0x0005, 0x0086, 0x0096, 0x2029, 0x1854, 0x252c, 0x20a9, 0x0008,
+	0x2041, 0x1d0e, 0x20e9, 0x0001, 0x28a0, 0x080c, 0x5cb6, 0x20e1,
+	0x0000, 0x2099, 0x026e, 0x4003, 0x20a9, 0x0008, 0x2011, 0x0007,
+	0xd5d4, 0x0108, 0x9016, 0x2800, 0x9200, 0x200c, 0x91a6, 0xffff,
+	0x1148, 0xd5d4, 0x0110, 0x8210, 0x0008, 0x8211, 0x1f04, 0x5a7b,
+	0x0804, 0x5aea, 0x82ff, 0x1160, 0xd5d4, 0x0120, 0x91a6, 0x3fff,
+	0x0d90, 0x0020, 0x91a6, 0x3fff, 0x0904, 0x5aea, 0x918d, 0xc000,
+	0x20a9, 0x0010, 0x2019, 0x0001, 0xd5d4, 0x0110, 0x2019, 0x0010,
+	0x2120, 0xd5d4, 0x0110, 0x8423, 0x0008, 0x8424, 0x1240, 0xd5d4,
+	0x0110, 0x8319, 0x0008, 0x8318, 0x1f04, 0x5aa1, 0x04d8, 0x23a8,
+	0x2021, 0x0001, 0x8426, 0x8425, 0x1f04, 0x5ab3, 0x2328, 0x8529,
+	0x92be, 0x0007, 0x0158, 0x0006, 0x2039, 0x0007, 0x2200, 0x973a,
+	0x000e, 0x27a8, 0x95a8, 0x0010, 0x1f04, 0x5ac2, 0x755a, 0x95c8,
+	0x318b, 0x292d, 0x95ac, 0x00ff, 0x757e, 0x6532, 0x6536, 0x0016,
+	0x2508, 0x080c, 0x246d, 0x001e, 0x60e7, 0x0000, 0x65ea, 0x2018,
+	0x2304, 0x9405, 0x201a, 0x7083, 0x0001, 0x20e9, 0x0000, 0x20a1,
+	0x024e, 0x20e1, 0x0001, 0x2898, 0x20a9, 0x0008, 0x4003, 0x9085,
+	0x0001, 0x0008, 0x9006, 0x009e, 0x008e, 0x0005, 0x0156, 0x01c6,
+	0x01d6, 0x0136, 0x0146, 0x22a8, 0x20e1, 0x0000, 0x2099, 0x026e,
+	0x20e9, 0x0000, 0x2011, 0x024e, 0x22a0, 0x4003, 0x014e, 0x013e,
+	0x01de, 0x01ce, 0x015e, 0x2118, 0x9026, 0x2001, 0x0007, 0x939a,
+	0x0010, 0x0218, 0x8420, 0x8001, 0x0cd0, 0x2118, 0x84ff, 0x0120,
+	0x939a, 0x0010, 0x8421, 0x1de0, 0x2021, 0x0001, 0x83ff, 0x0118,
+	0x8423, 0x8319, 0x1de8, 0x9238, 0x2029, 0x026e, 0x9528, 0x2504,
+	0x942c, 0x11b8, 0x9405, 0x203a, 0x715a, 0x91a0, 0x318b, 0x242d,
+	0x95ac, 0x00ff, 0x757e, 0x6532, 0x6536, 0x0016, 0x2508, 0x080c,
+	0x246d, 0x001e, 0x60e7, 0x0000, 0x65ea, 0x7083, 0x0001, 0x9084,
+	0x0000, 0x0005, 0x00e6, 0x2071, 0x1800, 0x7087, 0x0000, 0x00ee,
+	0x0005, 0x00e6, 0x00f6, 0x2079, 0x0100, 0x2071, 0x0140, 0x080c,
+	0x5bfb, 0x080c, 0x8fb7, 0x7004, 0x9084, 0x4000, 0x0110, 0x080c,
+	0x2843, 0x0126, 0x2091, 0x8000, 0x2071, 0x1825, 0x2073, 0x0000,
+	0x7840, 0x0026, 0x0016, 0x2009, 0x00f7, 0x080c, 0x5c58, 0x001e,
+	0x9094, 0x0010, 0x9285, 0x0080, 0x7842, 0x7a42, 0x002e, 0x012e,
+	0x00fe, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x27a2,
+	0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012, 0x2011, 0x19c5,
+	0x2013, 0x0000, 0x708f, 0x0000, 0x012e, 0x60a3, 0x0056, 0x60a7,
+	0x9575, 0x080c, 0x8faa, 0x6144, 0xd184, 0x0120, 0x7194, 0x918d,
+	0x2000, 0x0018, 0x7188, 0x918d, 0x1000, 0x2011, 0x196a, 0x2112,
+	0x2009, 0x07d0, 0x2011, 0x5b41, 0x080c, 0x821d, 0x0005, 0x0016,
+	0x0026, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x98c8, 0x080c,
+	0x9b6d, 0x080c, 0x98e4, 0x2009, 0x00f7, 0x080c, 0x5c58, 0x2061,
+	0x19d4, 0x900e, 0x611a, 0x611e, 0x6172, 0x6176, 0x2061, 0x1800,
+	0x6003, 0x0001, 0x2061, 0x0100, 0x6043, 0x0090, 0x6043, 0x0010,
+	0x2009, 0x196a, 0x200b, 0x0000, 0x2009, 0x002d, 0x2011, 0x5bc7,
+	0x080c, 0x814d, 0x012e, 0x00ce, 0x002e, 0x001e, 0x0005, 0x00e6,
+	0x0006, 0x0126, 0x2091, 0x8000, 0x0471, 0x2071, 0x0100, 0x080c,
+	0x8fb7, 0x2071, 0x0140, 0x7004, 0x9084, 0x4000, 0x0110, 0x080c,
+	0x2843, 0x080c, 0x70bf, 0x0188, 0x080c, 0x70da, 0x1170, 0x080c,
+	0x73c1, 0x0016, 0x080c, 0x253c, 0x2001, 0x193e, 0x2102, 0x001e,
+	0x080c, 0x73bc, 0x080c, 0x6fe8, 0x0050, 0x2009, 0x0001, 0x080c,
+	0x281f, 0x2001, 0x0001, 0x080c, 0x23c9, 0x080c, 0x5b97, 0x012e,
+	0x000e, 0x00ee, 0x0005, 0x2001, 0x180e, 0x2004, 0xd0bc, 0x0158,
+	0x0026, 0x0036, 0x2011, 0x8017, 0x2001, 0x196a, 0x201c, 0x080c,
+	0x48d8, 0x003e, 0x002e, 0x0005, 0x20a9, 0x0012, 0x20e9, 0x0001,
+	0x20a1, 0x1d80, 0x080c, 0x5cb6, 0x20e9, 0x0000, 0x2099, 0x026e,
+	0x0099, 0x20a9, 0x0020, 0x080c, 0x5cb0, 0x2099, 0x0260, 0x20a1,
+	0x1d92, 0x0051, 0x20a9, 0x000e, 0x080c, 0x5cb3, 0x2099, 0x0260,
+	0x20a1, 0x1db2, 0x0009, 0x0005, 0x0016, 0x0026, 0x3410, 0x3308,
+	0x2104, 0x8007, 0x2012, 0x8108, 0x8210, 0x1f04, 0x5c30, 0x002e,
+	0x001e, 0x0005, 0x080c, 0x97fa, 0x20e1, 0x0001, 0x2099, 0x1d00,
+	0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005,
+	0x080c, 0x97fa, 0x080c, 0x5cb6, 0x20e1, 0x0000, 0x2099, 0x0260,
+	0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005,
+	0x00c6, 0x0006, 0x2061, 0x0100, 0x810f, 0x2001, 0x1833, 0x2004,
+	0x9005, 0x1138, 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, 0x9105,
+	0x0010, 0x9185, 0x00f7, 0x604a, 0x000e, 0x00ce, 0x0005, 0x0016,
+	0x0046, 0x080c, 0x6663, 0x0158, 0x9006, 0x2020, 0x2009, 0x002a,
+	0x080c, 0xd273, 0x2001, 0x180c, 0x200c, 0xc195, 0x2102, 0x2019,
+	0x002a, 0x900e, 0x080c, 0x2fc5, 0x080c, 0xbf61, 0x0140, 0x0036,
+	0x2019, 0xffff, 0x2021, 0x0007, 0x080c, 0x4a75, 0x003e, 0x004e,
+	0x001e, 0x0005, 0x080c, 0x5b97, 0x7097, 0x0000, 0x708f, 0x0000,
+	0x0005, 0x0006, 0x2001, 0x180c, 0x2004, 0xd09c, 0x0100, 0x000e,
+	0x0005, 0x0006, 0x0016, 0x0126, 0x2091, 0x8000, 0x2001, 0x0101,
+	0x200c, 0x918d, 0x0006, 0x2102, 0x012e, 0x001e, 0x000e, 0x0005,
+	0x2009, 0x0001, 0x0020, 0x2009, 0x0002, 0x0008, 0x900e, 0x6814,
+	0x9084, 0xffc0, 0x910d, 0x6916, 0x0005, 0x00f6, 0x0156, 0x0146,
+	0x01d6, 0x9006, 0x20a9, 0x0080, 0x20e9, 0x0001, 0x20a1, 0x1d00,
+	0x4004, 0x2079, 0x1d00, 0x7803, 0x2200, 0x7807, 0x00ef, 0x780f,
+	0x00ef, 0x7813, 0x0138, 0x7823, 0xffff, 0x7827, 0xffff, 0x01de,
+	0x014e, 0x015e, 0x00fe, 0x0005, 0x2001, 0x1800, 0x2003, 0x0001,
+	0x0005, 0x2001, 0x1977, 0x0118, 0x2003, 0x0001, 0x0010, 0x2003,
+	0x0000, 0x0005, 0x0156, 0x20a9, 0x0800, 0x2009, 0x1000, 0x9006,
+	0x200a, 0x8108, 0x1f04, 0x5cf0, 0x015e, 0x0005, 0x00d6, 0x0036,
+	0x0156, 0x0136, 0x0146, 0x2069, 0x1853, 0x9006, 0xb802, 0xb8c6,
+	0xb807, 0x0707, 0xb80a, 0xb80e, 0xb812, 0x9198, 0x318b, 0x231d,
+	0x939c, 0x00ff, 0xbb16, 0x0016, 0x0026, 0xb886, 0x080c, 0x9b66,
+	0x1120, 0x9192, 0x007e, 0x1208, 0xbb86, 0x20a9, 0x0004, 0xb8b4,
+	0x20e8, 0xb9b8, 0x9198, 0x0006, 0x9006, 0x23a0, 0x4004, 0x20a9,
+	0x0004, 0x9198, 0x000a, 0x23a0, 0x4004, 0x002e, 0x001e, 0xb83e,
+	0xb842, 0xb8be, 0xb8c2, 0xb85e, 0xb862, 0xb866, 0xb86a, 0xb86f,
+	0x0100, 0xb872, 0xb876, 0xb87a, 0xb88a, 0xb88e, 0xb893, 0x0008,
+	0xb896, 0xb89a, 0xb89e, 0xb8ae, 0xb9a2, 0x0096, 0xb8a4, 0x904d,
+	0x0110, 0x080c, 0x1054, 0xb8a7, 0x0000, 0x009e, 0x9006, 0xb84a,
+	0x6810, 0xb83a, 0x680c, 0xb846, 0x6814, 0x9084, 0x00ff, 0xb842,
+	0x014e, 0x013e, 0x015e, 0x003e, 0x00de, 0x0005, 0x0126, 0x2091,
+	0x8000, 0xa974, 0xae78, 0x9684, 0x3fff, 0x9082, 0x4000, 0x1a04,
+	0x5db4, 0x9182, 0x0800, 0x1a04, 0x5db8, 0x2001, 0x180c, 0x2004,
+	0x9084, 0x0003, 0x1904, 0x5dbe, 0x9188, 0x1000, 0x2104, 0x905d,
+	0x0198, 0xb804, 0x9084, 0x00ff, 0x908e, 0x0006, 0x1188, 0xb8a4,
+	0x900d, 0x1904, 0x5dd0, 0x080c, 0x612a, 0x9006, 0x012e, 0x0005,
+	0x2001, 0x0005, 0x900e, 0x04b8, 0x2001, 0x0028, 0x900e, 0x0498,
+	0x9082, 0x0006, 0x1290, 0x080c, 0x9b66, 0x1160, 0xb8a0, 0x9084,
+	0xff80, 0x1140, 0xb900, 0xd1fc, 0x0d10, 0x2001, 0x0029, 0x2009,
+	0x1000, 0x0408, 0x2001, 0x0028, 0x00a8, 0x2009, 0x180c, 0x210c,
+	0xd18c, 0x0118, 0x2001, 0x0004, 0x0068, 0xd184, 0x0118, 0x2001,
+	0x0004, 0x0040, 0x2001, 0x0029, 0xb900, 0xd1fc, 0x0118, 0x2009,
+	0x1000, 0x0048, 0x900e, 0x0038, 0x2001, 0x0029, 0x900e, 0x0018,
+	0x2001, 0x0029, 0x900e, 0x9005, 0x012e, 0x0005, 0x2001, 0x180c,
+	0x2004, 0xd084, 0x19d0, 0x9188, 0x1000, 0x2104, 0x9065, 0x09a8,
+	0x080c, 0x6667, 0x1990, 0xb800, 0xd0bc, 0x0978, 0x0804, 0x5d77,
+	0x080c, 0x64db, 0x0904, 0x5d80, 0x0804, 0x5d7b, 0x00e6, 0x2071,
+	0x19b8, 0x7004, 0x9086, 0x0002, 0x1128, 0x7030, 0x9080, 0x0004,
+	0x2004, 0x9b06, 0x00ee, 0x0005, 0x00b6, 0x00e6, 0x0126, 0x2091,
+	0x8000, 0xa974, 0x9182, 0x0800, 0x1a04, 0x5e5f, 0x9188, 0x1000,
+	0x2104, 0x905d, 0x0904, 0x5e37, 0xb8a0, 0x9086, 0x007f, 0x0178,
+	0x080c, 0x666f, 0x0160, 0xa994, 0x81ff, 0x0130, 0x908e, 0x0004,
+	0x0130, 0x908e, 0x0005, 0x0118, 0x080c, 0x6667, 0x1598, 0xa87c,
+	0xd0fc, 0x01e0, 0xa894, 0x9005, 0x01c8, 0x2060, 0x0026, 0x2010,
+	0x080c, 0xb835, 0x002e, 0x1120, 0x2001, 0x0008, 0x0804, 0x5e61,
+	0x6020, 0x9086, 0x000a, 0x0120, 0x2001, 0x0008, 0x0804, 0x5e61,
+	0x601a, 0x6003, 0x0008, 0x2900, 0x6016, 0x0058, 0x080c, 0x9b91,
+	0x05e8, 0x2b00, 0x6012, 0x2900, 0x6016, 0x600b, 0xffff, 0x6023,
+	0x000a, 0x2009, 0x0003, 0x080c, 0x9c85, 0x9006, 0x0458, 0x2001,
+	0x0028, 0x0438, 0x9082, 0x0006, 0x1290, 0x080c, 0x9b66, 0x1160,
+	0xb8a0, 0x9084, 0xff80, 0x1140, 0xb900, 0xd1fc, 0x0900, 0x2001,
+	0x0029, 0x2009, 0x1000, 0x00a8, 0x2001, 0x0028, 0x0090, 0x2009,
+	0x180c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0050, 0xd184,
+	0x0118, 0x2001, 0x0004, 0x0028, 0x2001, 0x0029, 0x0010, 0x2001,
+	0x0029, 0x9005, 0x012e, 0x00ee, 0x00be, 0x0005, 0x2001, 0x002c,
+	0x0cc0, 0x00f6, 0x00b6, 0x0126, 0x2091, 0x8000, 0xa8e0, 0x9005,
+	0x1550, 0xa8dc, 0x9082, 0x0101, 0x1630, 0xa8c8, 0x9005, 0x1518,
+	0xa8c4, 0x9082, 0x0101, 0x12f8, 0xa974, 0x2079, 0x1800, 0x9182,
+	0x0800, 0x12e8, 0x7830, 0x9084, 0x0003, 0x1130, 0xaa98, 0xab94,
+	0xa878, 0x9084, 0x0007, 0x00ea, 0x7930, 0xd18c, 0x0118, 0x2001,
+	0x0004, 0x0038, 0xd184, 0x0118, 0x2001, 0x0004, 0x0010, 0x2001,
+	0x0029, 0x900e, 0x0038, 0x2001, 0x002c, 0x900e, 0x0018, 0x2001,
+	0x0029, 0x900e, 0x9006, 0x0008, 0x9005, 0x012e, 0x00be, 0x00fe,
+	0x0005, 0x5ef6, 0x5eb1, 0x5ec8, 0x5ef6, 0x5ef6, 0x5ef6, 0x5ef6,
+	0x5ef6, 0x2100, 0x9082, 0x007e, 0x1278, 0x080c, 0x6210, 0x0148,
+	0x9046, 0xb810, 0x9306, 0x1904, 0x5efe, 0xb814, 0x9206, 0x15f0,
+	0x0028, 0xbb12, 0xba16, 0x0010, 0x080c, 0x4792, 0x0150, 0x04b0,
+	0x080c, 0x6270, 0x1598, 0xb810, 0x9306, 0x1580, 0xb814, 0x9206,
+	0x1568, 0x080c, 0x9b91, 0x0530, 0x2b00, 0x6012, 0x080c, 0xbcdb,
+	0x2900, 0x6016, 0x600b, 0xffff, 0x6023, 0x000a, 0xa878, 0x9086,
+	0x0001, 0x1170, 0x080c, 0x3006, 0x9006, 0x080c, 0x61ad, 0x2001,
+	0x0002, 0x080c, 0x61c1, 0x2001, 0x0200, 0xb86e, 0xb893, 0x0002,
+	0x2009, 0x0003, 0x080c, 0x9c85, 0x9006, 0x0068, 0x2001, 0x0001,
+	0x900e, 0x0038, 0x2001, 0x002c, 0x900e, 0x0018, 0x2001, 0x0028,
+	0x900e, 0x9005, 0x0000, 0x012e, 0x00be, 0x00fe, 0x0005, 0x00b6,
+	0x00f6, 0x00e6, 0x0126, 0x2091, 0x8000, 0xa894, 0x90c6, 0x0015,
+	0x0904, 0x60d3, 0x90c6, 0x0056, 0x0904, 0x60d7, 0x90c6, 0x0066,
+	0x0904, 0x60db, 0x90c6, 0x0067, 0x0904, 0x60df, 0x90c6, 0x0068,
+	0x0904, 0x60e3, 0x90c6, 0x0071, 0x0904, 0x60e7, 0x90c6, 0x0074,
+	0x0904, 0x60eb, 0x90c6, 0x007c, 0x0904, 0x60ef, 0x90c6, 0x007e,
+	0x0904, 0x60f3, 0x90c6, 0x0037, 0x0904, 0x60f7, 0x9016, 0x2079,
+	0x1800, 0xa974, 0x9186, 0x00ff, 0x0904, 0x60ce, 0x9182, 0x0800,
+	0x1a04, 0x60ce, 0x080c, 0x6270, 0x1198, 0xb804, 0x9084, 0x00ff,
+	0x9082, 0x0006, 0x1268, 0xa894, 0x90c6, 0x006f, 0x0148, 0x080c,
+	0x9b66, 0x1904, 0x60b7, 0xb8a0, 0x9084, 0xff80, 0x1904, 0x60b7,
+	0xa894, 0x90c6, 0x006f, 0x0158, 0x90c6, 0x005e, 0x0904, 0x6017,
+	0x90c6, 0x0064, 0x0904, 0x6040, 0x2008, 0x0804, 0x5fda, 0xa998,
+	0xa8b0, 0x2040, 0x080c, 0x9b66, 0x1120, 0x9182, 0x007f, 0x0a04,
+	0x5fda, 0x9186, 0x00ff, 0x0904, 0x5fda, 0x9182, 0x0800, 0x1a04,
+	0x5fda, 0xaaa0, 0xab9c, 0x7878, 0x9306, 0x1188, 0x787c, 0x0096,
+	0x924e, 0x1128, 0x2208, 0x2310, 0x009e, 0x0804, 0x5fda, 0x99cc,
+	0xff00, 0x009e, 0x1120, 0x2208, 0x2310, 0x0804, 0x5fda, 0x080c,
+	0x4792, 0x0904, 0x5fe3, 0x900e, 0x9016, 0x90c6, 0x4000, 0x1558,
+	0x0006, 0x080c, 0x655f, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108,
+	0xc18d, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0031,
+	0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098, 0x080c,
+	0x0f9f, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0035,
+	0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x000a, 0x2098, 0x080c,
+	0x0f9f, 0x000e, 0x00c8, 0x90c6, 0x4007, 0x1110, 0x2408, 0x00a0,
+	0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0070, 0x90c6, 0x4009,
+	0x1108, 0x0050, 0x90c6, 0x4006, 0x0138, 0x2001, 0x4005, 0x2009,
+	0x000a, 0x0010, 0x2001, 0x4006, 0xa896, 0xa99a, 0xaa9e, 0x2001,
+	0x0030, 0x900e, 0x0470, 0x080c, 0x9b91, 0x1130, 0x2001, 0x4005,
+	0x2009, 0x0003, 0x9016, 0x0c80, 0x2b00, 0x6012, 0x080c, 0xbcdb,
+	0x2900, 0x6016, 0x6023, 0x0001, 0xa868, 0xd88c, 0x0108, 0xc0f5,
+	0xa86a, 0x0126, 0x2091, 0x8000, 0x080c, 0x3006, 0x012e, 0x9006,
+	0x080c, 0x61ad, 0x2001, 0x0002, 0x080c, 0x61c1, 0x2009, 0x0002,
+	0x080c, 0x9c85, 0xa8b0, 0xd094, 0x0118, 0xb8c4, 0xc08d, 0xb8c6,
+	0x9006, 0x9005, 0x012e, 0x00ee, 0x00fe, 0x00be, 0x0005, 0x080c,
+	0x53a1, 0x0118, 0x2009, 0x0007, 0x00f8, 0xa998, 0xaeb0, 0x080c,
+	0x6270, 0x1904, 0x5fd5, 0x9186, 0x007f, 0x0130, 0x080c, 0x6667,
+	0x0118, 0x2009, 0x0009, 0x0080, 0x0096, 0x080c, 0x1022, 0x1120,
+	0x009e, 0x2009, 0x0002, 0x0040, 0x2900, 0x009e, 0xa806, 0x080c,
+	0xba33, 0x19b0, 0x2009, 0x0003, 0x2001, 0x4005, 0x0804, 0x5fdc,
+	0xa998, 0xaeb0, 0x080c, 0x6270, 0x1904, 0x5fd5, 0x0096, 0x080c,
+	0x1022, 0x1128, 0x009e, 0x2009, 0x0002, 0x0804, 0x6094, 0x2900,
+	0x009e, 0xa806, 0x0096, 0x2048, 0x20a9, 0x002b, 0xb8b4, 0x20e0,
+	0xb8b8, 0x2098, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0,
+	0x4003, 0x20a9, 0x0008, 0x9080, 0x0006, 0x20a0, 0xbbb8, 0x9398,
+	0x0006, 0x2398, 0x080c, 0x0f9f, 0x009e, 0xa87b, 0x0000, 0xa883,
+	0x0000, 0xa897, 0x4000, 0xd684, 0x1168, 0x080c, 0x538d, 0xd0b4,
+	0x1118, 0xa89b, 0x000b, 0x00e0, 0xb800, 0xd08c, 0x0118, 0xa89b,
+	0x000c, 0x00b0, 0x080c, 0x6667, 0x0118, 0xa89b, 0x0009, 0x0080,
+	0x080c, 0x53a1, 0x0118, 0xa89b, 0x0007, 0x0050, 0x080c, 0xba16,
+	0x1904, 0x6010, 0x2009, 0x0003, 0x2001, 0x4005, 0x0804, 0x5fdc,
+	0xa87b, 0x0030, 0xa897, 0x4005, 0xa804, 0x8006, 0x8006, 0x8007,
+	0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2009, 0x002b,
+	0xaaa0, 0xab9c, 0xaca8, 0xada4, 0x2031, 0x0000, 0x2041, 0x1266,
+	0x080c, 0xa0f5, 0x1904, 0x6010, 0x2009, 0x0002, 0x08e8, 0x2001,
+	0x0028, 0x900e, 0x0804, 0x6011, 0x2009, 0x180c, 0x210c, 0xd18c,
+	0x0118, 0x2001, 0x0004, 0x0038, 0xd184, 0x0118, 0x2001, 0x0004,
+	0x0010, 0x2001, 0x0029, 0x900e, 0x0804, 0x6011, 0x2001, 0x0029,
+	0x900e, 0x0804, 0x6011, 0x080c, 0x35ae, 0x0804, 0x6012, 0x080c,
+	0x50c2, 0x0804, 0x6012, 0x080c, 0x4354, 0x0804, 0x6012, 0x080c,
+	0x43cd, 0x0804, 0x6012, 0x080c, 0x4429, 0x0804, 0x6012, 0x080c,
+	0x484e, 0x0804, 0x6012, 0x080c, 0x4afa, 0x0804, 0x6012, 0x080c,
+	0x4d2d, 0x0804, 0x6012, 0x080c, 0x4f26, 0x0804, 0x6012, 0x080c,
+	0x37c3, 0x0804, 0x6012, 0x00b6, 0xa974, 0xae78, 0x9684, 0x3fff,
+	0x9082, 0x4000, 0x1608, 0x9182, 0x0800, 0x1258, 0x9188, 0x1000,
+	0x2104, 0x905d, 0x0130, 0x080c, 0x6667, 0x1138, 0x00d9, 0x9006,
+	0x00b0, 0x2001, 0x0028, 0x900e, 0x0090, 0x9082, 0x0006, 0x1240,
+	0xb900, 0xd1fc, 0x0d98, 0x2001, 0x0029, 0x2009, 0x1000, 0x0038,
+	0x2001, 0x0029, 0x900e, 0x0018, 0x2001, 0x0029, 0x900e, 0x9005,
+	0x00be, 0x0005, 0xa877, 0x0000, 0xb8c0, 0x9005, 0x1904, 0x61a1,
+	0xb888, 0x9005, 0x1904, 0x61a1, 0xb838, 0xb93c, 0x9102, 0x1a04,
+	0x61a1, 0x2b10, 0x080c, 0x9bbe, 0x0904, 0x619d, 0x8108, 0xb93e,
+	0x6212, 0x2900, 0x6016, 0x6023, 0x0003, 0x600b, 0xffff, 0x6007,
+	0x0040, 0xa878, 0x605e, 0xa880, 0x9084, 0x00ff, 0x6066, 0xa883,
+	0x0000, 0xa87c, 0xd0ac, 0x05c0, 0xc0dd, 0xa87e, 0xa888, 0x8001,
+	0x1568, 0x2001, 0x00f8, 0x8001, 0xa001, 0xa001, 0xa001, 0x1dd8,
+	0xa816, 0xa864, 0x9094, 0x00f7, 0x9296, 0x0011, 0x11f8, 0x9084,
+	0x00ff, 0xc0bd, 0x601e, 0xa8ac, 0xaab0, 0xa836, 0xaa3a, 0x2001,
+	0x000f, 0x8001, 0x1df0, 0x2001, 0x8004, 0x6003, 0x0004, 0x6046,
+	0x00f6, 0x2079, 0x0380, 0x7818, 0xd0bc, 0x1de8, 0x7833, 0x0010,
+	0x2c00, 0x7836, 0x781b, 0x8080, 0x00fe, 0x0005, 0x080c, 0x164f,
+	0x601c, 0xc0bd, 0x601e, 0x0c38, 0x0006, 0x2001, 0x00e8, 0x8001,
+	0xa001, 0xa001, 0xa001, 0x1dd8, 0x000e, 0xd0b4, 0x190c, 0x1ad2,
+	0x2001, 0x8004, 0x6003, 0x0002, 0x08d0, 0x81ff, 0x1110, 0xb88b,
+	0x0001, 0x2908, 0xb8bc, 0xb9be, 0x9005, 0x1110, 0xb9c2, 0x0020,
+	0x0096, 0x2048, 0xa902, 0x009e, 0x0005, 0x00b6, 0x0126, 0x00c6,
+	0x0026, 0x2091, 0x8000, 0x6210, 0x2258, 0xba00, 0x9005, 0x0110,
+	0xc285, 0x0008, 0xc284, 0xba02, 0x002e, 0x00ce, 0x012e, 0x00be,
+	0x0005, 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, 0x6210, 0x2258,
+	0xba04, 0x0006, 0x9086, 0x0006, 0x1170, 0xb89c, 0xd0ac, 0x0158,
+	0x080c, 0x6663, 0x0140, 0x9284, 0xff00, 0x8007, 0x9086, 0x0007,
+	0x1110, 0x2011, 0x0600, 0x000e, 0x9294, 0xff00, 0x9215, 0xba06,
+	0x0006, 0x9086, 0x0006, 0x1120, 0xba90, 0x82ff, 0x090c, 0x0d65,
+	0x000e, 0x00ce, 0x012e, 0x00be, 0x0005, 0x00b6, 0x0126, 0x00c6,
+	0x2091, 0x8000, 0x6210, 0x2258, 0xba04, 0x0006, 0x9086, 0x0006,
+	0x1168, 0xb89c, 0xd0a4, 0x0150, 0x080c, 0x665f, 0x1138, 0x9284,
+	0x00ff, 0x9086, 0x0007, 0x1110, 0x2011, 0x0006, 0x000e, 0x9294,
+	0x00ff, 0x8007, 0x9215, 0xba06, 0x00ce, 0x012e, 0x00be, 0x0005,
+	0x9182, 0x0800, 0x0218, 0x9085, 0x0001, 0x0005, 0x00d6, 0x0026,
+	0x9190, 0x1000, 0x2204, 0x905d, 0x1180, 0x0096, 0x080c, 0x1022,
+	0x2958, 0x009e, 0x0160, 0x2b00, 0x2012, 0xb85c, 0xb8ba, 0xb860,
+	0xb8b6, 0x9006, 0xb8a6, 0x080c, 0x5cf6, 0x9006, 0x0010, 0x9085,
+	0x0001, 0x002e, 0x00de, 0x0005, 0x00b6, 0x0096, 0x0126, 0x2091,
+	0x8000, 0x0026, 0x9182, 0x0800, 0x0218, 0x9085, 0x0001, 0x0458,
+	0x00d6, 0x9190, 0x1000, 0x2204, 0x905d, 0x0518, 0x2013, 0x0000,
+	0xb8a4, 0x904d, 0x0110, 0x080c, 0x1054, 0x00d6, 0x00c6, 0xb8ac,
+	0x2060, 0x8cff, 0x0168, 0x600c, 0x0006, 0x6014, 0x2048, 0x080c,
+	0xb847, 0x0110, 0x080c, 0x0fd4, 0x080c, 0x9be7, 0x00ce, 0x0c88,
+	0x00ce, 0x00de, 0x2b48, 0xb8b8, 0xb85e, 0xb8b4, 0xb862, 0x080c,
+	0x1064, 0x00de, 0x9006, 0x002e, 0x012e, 0x009e, 0x00be, 0x0005,
+	0x0016, 0x9182, 0x0800, 0x0218, 0x9085, 0x0001, 0x0030, 0x9188,
+	0x1000, 0x2104, 0x905d, 0x0dc0, 0x9006, 0x001e, 0x0005, 0x00d6,
+	0x0156, 0x0136, 0x0146, 0x9006, 0xb80a, 0xb80e, 0xb800, 0xc08c,
+	0xb802, 0x080c, 0x70b7, 0x1510, 0xb8a0, 0x9086, 0x007e, 0x0120,
+	0x080c, 0x9b66, 0x11d8, 0x0078, 0x7040, 0xd0e4, 0x01b8, 0x00c6,
+	0x2061, 0x1953, 0x7048, 0x2062, 0x704c, 0x6006, 0x7050, 0x600a,
+	0x7054, 0x600e, 0x00ce, 0x703c, 0x2069, 0x0140, 0x9005, 0x1110,
+	0x2001, 0x0001, 0x6886, 0x2069, 0x1800, 0x68b2, 0x7040, 0xb85e,
+	0x7048, 0xb862, 0x704c, 0xb866, 0x20e1, 0x0000, 0x2099, 0x0276,
+	0xb8b4, 0x20e8, 0xb8b8, 0x9088, 0x000a, 0x21a0, 0x20a9, 0x0004,
+	0x4003, 0x2099, 0x027a, 0x9088, 0x0006, 0x21a0, 0x20a9, 0x0004,
+	0x4003, 0x2069, 0x0200, 0x6817, 0x0001, 0x7040, 0xb86a, 0x7144,
+	0xb96e, 0x7048, 0xb872, 0x7050, 0xb876, 0x2069, 0x0200, 0x6817,
+	0x0000, 0xb8a0, 0x9086, 0x007e, 0x1110, 0x7144, 0xb96e, 0x9182,
+	0x0211, 0x1218, 0x2009, 0x0008, 0x0400, 0x9182, 0x0259, 0x1218,
+	0x2009, 0x0007, 0x00d0, 0x9182, 0x02c1, 0x1218, 0x2009, 0x0006,
+	0x00a0, 0x9182, 0x0349, 0x1218, 0x2009, 0x0005, 0x0070, 0x9182,
+	0x0421, 0x1218, 0x2009, 0x0004, 0x0040, 0x9182, 0x0581, 0x1218,
+	0x2009, 0x0003, 0x0010, 0x2009, 0x0002, 0xb992, 0x014e, 0x013e,
+	0x015e, 0x00de, 0x0005, 0x0016, 0x0026, 0x00e6, 0x2071, 0x0260,
+	0x7034, 0xb896, 0x703c, 0xb89a, 0x7054, 0xb89e, 0x0036, 0xbbc4,
+	0xc384, 0xba00, 0x2009, 0x1873, 0x210c, 0xd0bc, 0x0120, 0xd1ec,
+	0x0110, 0xc2ad, 0x0008, 0xc2ac, 0xd0c4, 0x0148, 0xd1e4, 0x0138,
+	0xc2bd, 0xd0cc, 0x0128, 0xd38c, 0x1108, 0xc385, 0x0008, 0xc2bc,
+	0xba02, 0xbbc6, 0x003e, 0x00ee, 0x002e, 0x001e, 0x0005, 0x0096,
+	0x0126, 0x2091, 0x8000, 0xb8a4, 0x904d, 0x0578, 0xa900, 0x81ff,
+	0x15c0, 0xaa04, 0x9282, 0x0010, 0x16c8, 0x0136, 0x0146, 0x01c6,
+	0x01d6, 0x8906, 0x8006, 0x8007, 0x908c, 0x003f, 0x21e0, 0x9084,
+	0xffc0, 0x9080, 0x0004, 0x2098, 0x2009, 0x0010, 0x20a9, 0x0001,
+	0x4002, 0x9086, 0xffff, 0x0120, 0x8109, 0x1dd0, 0x080c, 0x0d65,
+	0x3c00, 0x20e8, 0x3300, 0x8001, 0x20a0, 0x4604, 0x8210, 0xaa06,
+	0x01de, 0x01ce, 0x014e, 0x013e, 0x0060, 0x080c, 0x1022, 0x0170,
+	0x2900, 0xb8a6, 0xa803, 0x0000, 0x080c, 0x64fb, 0xa807, 0x0001,
+	0xae12, 0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8,
+	0x0126, 0x2091, 0x8000, 0x0096, 0xb8a4, 0x904d, 0x0188, 0xa800,
+	0x9005, 0x1150, 0x080c, 0x650a, 0x1158, 0xa804, 0x908a, 0x0002,
+	0x0218, 0x8001, 0xa806, 0x0020, 0x080c, 0x1054, 0xb8a7, 0x0000,
+	0x009e, 0x012e, 0x0005, 0x0096, 0x00c6, 0xb888, 0x9005, 0x1904,
+	0x63f4, 0xb8c0, 0x904d, 0x0904, 0x63f4, 0x080c, 0x9bbe, 0x0904,
+	0x63f0, 0x8210, 0xba3e, 0xa800, 0xb8c2, 0x9005, 0x1108, 0xb8be,
+	0x2b00, 0x6012, 0x2900, 0x6016, 0x6023, 0x0003, 0x600b, 0xffff,
 	0x6007, 0x0040, 0xa878, 0x605e, 0xa880, 0x9084, 0x00ff, 0x6066,
-	0xa883, 0x0000, 0xa87c, 0xd0ac, 0x05c0, 0xc0dd, 0xa87e, 0xa888,
-	0x8001, 0x1568, 0x2001, 0x00f8, 0x8001, 0xa001, 0xa001, 0xa001,
-	0x1dd8, 0xa816, 0xa864, 0x9094, 0x00f7, 0x9296, 0x0011, 0x11f8,
-	0x9084, 0x00ff, 0xc0bd, 0x601e, 0xa8ac, 0xaab0, 0xa836, 0xaa3a,
-	0x2001, 0x000f, 0x8001, 0x1df0, 0x2001, 0x8004, 0x6003, 0x0004,
-	0x6046, 0x00f6, 0x2079, 0x0380, 0x7818, 0xd0bc, 0x1de8, 0x7833,
-	0x0010, 0x2c00, 0x7836, 0x781b, 0x8080, 0x00fe, 0x0005, 0x080c,
-	0x164f, 0x601c, 0xc0bd, 0x601e, 0x0c38, 0x0006, 0x2001, 0x00e8,
-	0x8001, 0xa001, 0xa001, 0xa001, 0x1dd8, 0x000e, 0xd0b4, 0x190c,
-	0x1ad2, 0x2001, 0x8004, 0x6003, 0x0002, 0x08d0, 0x81ff, 0x1110,
-	0xb88b, 0x0001, 0x2908, 0xb8bc, 0xb9be, 0x9005, 0x1110, 0xb9c2,
-	0x0020, 0x0096, 0x2048, 0xa902, 0x009e, 0x0005, 0x00b6, 0x0126,
-	0x00c6, 0x0026, 0x2091, 0x8000, 0x6210, 0x2258, 0xba00, 0x9005,
-	0x0110, 0xc285, 0x0008, 0xc284, 0xba02, 0x002e, 0x00ce, 0x012e,
-	0x00be, 0x0005, 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, 0x6210,
-	0x2258, 0xba04, 0x0006, 0x9086, 0x0006, 0x1170, 0xb89c, 0xd0ac,
-	0x0158, 0x080c, 0x665c, 0x0140, 0x9284, 0xff00, 0x8007, 0x9086,
-	0x0007, 0x1110, 0x2011, 0x0600, 0x000e, 0x9294, 0xff00, 0x9215,
-	0xba06, 0x0006, 0x9086, 0x0006, 0x1120, 0xba90, 0x82ff, 0x090c,
-	0x0d65, 0x000e, 0x00ce, 0x012e, 0x00be, 0x0005, 0x00b6, 0x0126,
-	0x00c6, 0x2091, 0x8000, 0x6210, 0x2258, 0xba04, 0x0006, 0x9086,
-	0x0006, 0x1168, 0xb89c, 0xd0a4, 0x0150, 0x080c, 0x6658, 0x1138,
-	0x9284, 0x00ff, 0x9086, 0x0007, 0x1110, 0x2011, 0x0006, 0x000e,
-	0x9294, 0x00ff, 0x8007, 0x9215, 0xba06, 0x00ce, 0x012e, 0x00be,
-	0x0005, 0x9182, 0x0800, 0x0218, 0x9085, 0x0001, 0x0005, 0x00d6,
-	0x0026, 0x9190, 0x1000, 0x2204, 0x905d, 0x1180, 0x0096, 0x080c,
-	0x1022, 0x2958, 0x009e, 0x0160, 0x2b00, 0x2012, 0xb85c, 0xb8ba,
-	0xb860, 0xb8b6, 0x9006, 0xb8a6, 0x080c, 0x5cef, 0x9006, 0x0010,
-	0x9085, 0x0001, 0x002e, 0x00de, 0x0005, 0x00b6, 0x0096, 0x0126,
-	0x2091, 0x8000, 0x0026, 0x9182, 0x0800, 0x0218, 0x9085, 0x0001,
-	0x0458, 0x00d6, 0x9190, 0x1000, 0x2204, 0x905d, 0x0518, 0x2013,
-	0x0000, 0xb8a4, 0x904d, 0x0110, 0x080c, 0x1054, 0x00d6, 0x00c6,
-	0xb8ac, 0x2060, 0x8cff, 0x0168, 0x600c, 0x0006, 0x6014, 0x2048,
-	0x080c, 0xb82c, 0x0110, 0x080c, 0x0fd4, 0x080c, 0x9bcc, 0x00ce,
-	0x0c88, 0x00ce, 0x00de, 0x2b48, 0xb8b8, 0xb85e, 0xb8b4, 0xb862,
-	0x080c, 0x1064, 0x00de, 0x9006, 0x002e, 0x012e, 0x009e, 0x00be,
-	0x0005, 0x0016, 0x9182, 0x0800, 0x0218, 0x9085, 0x0001, 0x0030,
-	0x9188, 0x1000, 0x2104, 0x905d, 0x0dc0, 0x9006, 0x001e, 0x0005,
-	0x00d6, 0x0156, 0x0136, 0x0146, 0x9006, 0xb80a, 0xb80e, 0xb800,
-	0xc08c, 0xb802, 0x080c, 0x70ac, 0x1510, 0xb8a0, 0x9086, 0x007e,
-	0x0120, 0x080c, 0x9b4b, 0x11d8, 0x0078, 0x7040, 0xd0e4, 0x01b8,
-	0x00c6, 0x2061, 0x1953, 0x7048, 0x2062, 0x704c, 0x6006, 0x7050,
-	0x600a, 0x7054, 0x600e, 0x00ce, 0x703c, 0x2069, 0x0140, 0x9005,
-	0x1110, 0x2001, 0x0001, 0x6886, 0x2069, 0x1800, 0x68b2, 0x7040,
-	0xb85e, 0x7048, 0xb862, 0x704c, 0xb866, 0x20e1, 0x0000, 0x2099,
-	0x0276, 0xb8b4, 0x20e8, 0xb8b8, 0x9088, 0x000a, 0x21a0, 0x20a9,
-	0x0004, 0x4003, 0x2099, 0x027a, 0x9088, 0x0006, 0x21a0, 0x20a9,
-	0x0004, 0x4003, 0x2069, 0x0200, 0x6817, 0x0001, 0x7040, 0xb86a,
-	0x7144, 0xb96e, 0x7048, 0xb872, 0x7050, 0xb876, 0x2069, 0x0200,
-	0x6817, 0x0000, 0xb8a0, 0x9086, 0x007e, 0x1110, 0x7144, 0xb96e,
-	0x9182, 0x0211, 0x1218, 0x2009, 0x0008, 0x0400, 0x9182, 0x0259,
-	0x1218, 0x2009, 0x0007, 0x00d0, 0x9182, 0x02c1, 0x1218, 0x2009,
-	0x0006, 0x00a0, 0x9182, 0x0349, 0x1218, 0x2009, 0x0005, 0x0070,
-	0x9182, 0x0421, 0x1218, 0x2009, 0x0004, 0x0040, 0x9182, 0x0581,
-	0x1218, 0x2009, 0x0003, 0x0010, 0x2009, 0x0002, 0xb992, 0x014e,
-	0x013e, 0x015e, 0x00de, 0x0005, 0x0016, 0x0026, 0x00e6, 0x2071,
-	0x0260, 0x7034, 0xb896, 0x703c, 0xb89a, 0x7054, 0xb89e, 0x0036,
-	0xbbc4, 0xc384, 0xba00, 0x2009, 0x1873, 0x210c, 0xd0bc, 0x0120,
-	0xd1ec, 0x0110, 0xc2ad, 0x0008, 0xc2ac, 0xd0c4, 0x0148, 0xd1e4,
-	0x0138, 0xc2bd, 0xd0cc, 0x0128, 0xd38c, 0x1108, 0xc385, 0x0008,
-	0xc2bc, 0xba02, 0xbbc6, 0x003e, 0x00ee, 0x002e, 0x001e, 0x0005,
-	0x0096, 0x0126, 0x2091, 0x8000, 0xb8a4, 0x904d, 0x0578, 0xa900,
-	0x81ff, 0x15c0, 0xaa04, 0x9282, 0x0010, 0x16c8, 0x0136, 0x0146,
-	0x01c6, 0x01d6, 0x8906, 0x8006, 0x8007, 0x908c, 0x003f, 0x21e0,
-	0x9084, 0xffc0, 0x9080, 0x0004, 0x2098, 0x2009, 0x0010, 0x20a9,
-	0x0001, 0x4002, 0x9086, 0xffff, 0x0120, 0x8109, 0x1dd0, 0x080c,
-	0x0d65, 0x3c00, 0x20e8, 0x3300, 0x8001, 0x20a0, 0x4604, 0x8210,
-	0xaa06, 0x01de, 0x01ce, 0x014e, 0x013e, 0x0060, 0x080c, 0x1022,
-	0x0170, 0x2900, 0xb8a6, 0xa803, 0x0000, 0x080c, 0x64f4, 0xa807,
-	0x0001, 0xae12, 0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0x9006,
-	0x0cd8, 0x0126, 0x2091, 0x8000, 0x0096, 0xb8a4, 0x904d, 0x0188,
-	0xa800, 0x9005, 0x1150, 0x080c, 0x6503, 0x1158, 0xa804, 0x908a,
-	0x0002, 0x0218, 0x8001, 0xa806, 0x0020, 0x080c, 0x1054, 0xb8a7,
-	0x0000, 0x009e, 0x012e, 0x0005, 0x0096, 0x00c6, 0xb888, 0x9005,
-	0x1904, 0x63ed, 0xb8c0, 0x904d, 0x0904, 0x63ed, 0x080c, 0x9ba3,
-	0x0904, 0x63e9, 0x8210, 0xba3e, 0xa800, 0xb8c2, 0x9005, 0x1108,
-	0xb8be, 0x2b00, 0x6012, 0x2900, 0x6016, 0x6023, 0x0003, 0x600b,
-	0xffff, 0x6007, 0x0040, 0xa878, 0x605e, 0xa880, 0x9084, 0x00ff,
-	0x6066, 0xa883, 0x0000, 0xa87c, 0xd0ac, 0x01c8, 0xc0dd, 0xa87e,
-	0xa888, 0x8001, 0x1568, 0xa816, 0xa864, 0x9094, 0x00f7, 0x9296,
-	0x0011, 0x1530, 0x9084, 0x00ff, 0xc0bd, 0x601e, 0xa8ac, 0xaab0,
-	0xa836, 0xaa3a, 0x2001, 0x8004, 0x6003, 0x0004, 0x0030, 0x080c,
-	0x1ad2, 0x2001, 0x8004, 0x6003, 0x0002, 0x6046, 0x2001, 0x0010,
-	0x2c08, 0x080c, 0x989e, 0xb838, 0xba3c, 0x9202, 0x0a04, 0x639a,
-	0x0020, 0x82ff, 0x1110, 0xb88b, 0x0001, 0x00ce, 0x009e, 0x0005,
-	0x080c, 0x164f, 0x601c, 0xc0bd, 0x601e, 0x08e0, 0x00b6, 0x0096,
-	0x0016, 0x20a9, 0x0800, 0x900e, 0x0016, 0x080c, 0x6269, 0x1158,
-	0xb8c0, 0x904d, 0x0140, 0x3e00, 0x9086, 0x0002, 0x1118, 0xb800,
-	0xd0bc, 0x1108, 0x0041, 0x001e, 0x8108, 0x1f04, 0x63fc, 0x001e,
-	0x00be, 0x009e, 0x0005, 0x0096, 0x0016, 0xb8c0, 0x904d, 0x0188,
-	0xa800, 0xb8c2, 0x9005, 0x1108, 0xb8be, 0x9006, 0xa802, 0xa867,
-	0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0xbb2a, 0x080c, 0x698f,
-	0x0c60, 0x001e, 0x009e, 0x0005, 0x0086, 0x9046, 0xb8c0, 0x904d,
-	0x0198, 0xa86c, 0x9406, 0x1118, 0xa870, 0x9506, 0x0128, 0x2940,
-	0xa800, 0x904d, 0x0148, 0x0ca8, 0xa800, 0x88ff, 0x1110, 0xb8c2,
-	0x0008, 0xa002, 0xa803, 0x0000, 0x008e, 0x0005, 0x901e, 0x0010,
-	0x2019, 0x0001, 0x00e6, 0x0096, 0x00c6, 0x0086, 0x0026, 0x0126,
-	0x2091, 0x8000, 0x2071, 0x19b8, 0x9046, 0x7028, 0x9065, 0x01e8,
-	0x6014, 0x2068, 0x83ff, 0x0120, 0x605c, 0x9606, 0x0158, 0x0030,
-	0xa86c, 0x9406, 0x1118, 0xa870, 0x9506, 0x0120, 0x2c40, 0x600c,
-	0x2060, 0x0c60, 0x600c, 0x0006, 0x0066, 0x2830, 0x080c, 0x90f5,
-	0x006e, 0x000e, 0x83ff, 0x0508, 0x0c08, 0x9046, 0xb8c0, 0x904d,
-	0x01e0, 0x83ff, 0x0120, 0xa878, 0x9606, 0x0158, 0x0030, 0xa86c,
-	0x9406, 0x1118, 0xa870, 0x9506, 0x0120, 0x2940, 0xa800, 0x2048,
-	0x0c70, 0xb8c0, 0xaa00, 0x0026, 0x9906, 0x1110, 0xbac2, 0x0008,
-	0xa202, 0x000e, 0x83ff, 0x0108, 0x0c10, 0x002e, 0x008e, 0x00ce,
-	0x009e, 0x00ee, 0x0005, 0x9016, 0x0489, 0x1110, 0x2011, 0x0001,
-	0x0005, 0x080c, 0x6558, 0x0128, 0x080c, 0xb8ed, 0x0010, 0x9085,
-	0x0001, 0x0005, 0x080c, 0x6558, 0x0128, 0x080c, 0xb88e, 0x0010,
-	0x9085, 0x0001, 0x0005, 0x080c, 0x6558, 0x0128, 0x080c, 0xb8ea,
-	0x0010, 0x9085, 0x0001, 0x0005, 0x080c, 0x6558, 0x0128, 0x080c,
-	0xb8ad, 0x0010, 0x9085, 0x0001, 0x0005, 0x080c, 0x6558, 0x0128,
-	0x080c, 0xb92e, 0x0010, 0x9085, 0x0001, 0x0005, 0xb8a4, 0x900d,
-	0x1118, 0x9085, 0x0001, 0x0005, 0x0136, 0x01c6, 0xa800, 0x9005,
-	0x11b8, 0x890e, 0x810e, 0x810f, 0x9184, 0x003f, 0x20e0, 0x9184,
-	0xffc0, 0x9080, 0x0004, 0x2098, 0x20a9, 0x0001, 0x2009, 0x0010,
-	0x4002, 0x9606, 0x0128, 0x8109, 0x1dd8, 0x9085, 0x0001, 0x0008,
-	0x9006, 0x01ce, 0x013e, 0x0005, 0x0146, 0x01d6, 0xa860, 0x20e8,
-	0xa85c, 0x9080, 0x0004, 0x20a0, 0x20a9, 0x0010, 0x2009, 0xffff,
-	0x4104, 0x01de, 0x014e, 0x0136, 0x01c6, 0xa800, 0x9005, 0x11b8,
+	0xa883, 0x0000, 0xa87c, 0xd0ac, 0x01c8, 0xc0dd, 0xa87e, 0xa888,
+	0x8001, 0x1568, 0xa816, 0xa864, 0x9094, 0x00f7, 0x9296, 0x0011,
+	0x1530, 0x9084, 0x00ff, 0xc0bd, 0x601e, 0xa8ac, 0xaab0, 0xa836,
+	0xaa3a, 0x2001, 0x8004, 0x6003, 0x0004, 0x0030, 0x080c, 0x1ad2,
+	0x2001, 0x8004, 0x6003, 0x0002, 0x6046, 0x2001, 0x0010, 0x2c08,
+	0x080c, 0x98b9, 0xb838, 0xba3c, 0x9202, 0x0a04, 0x63a1, 0x0020,
+	0x82ff, 0x1110, 0xb88b, 0x0001, 0x00ce, 0x009e, 0x0005, 0x080c,
+	0x164f, 0x601c, 0xc0bd, 0x601e, 0x08e0, 0x00b6, 0x0096, 0x0016,
+	0x20a9, 0x0800, 0x900e, 0x0016, 0x080c, 0x6270, 0x1158, 0xb8c0,
+	0x904d, 0x0140, 0x3e00, 0x9086, 0x0002, 0x1118, 0xb800, 0xd0bc,
+	0x1108, 0x0041, 0x001e, 0x8108, 0x1f04, 0x6403, 0x001e, 0x00be,
+	0x009e, 0x0005, 0x0096, 0x0016, 0xb8c0, 0x904d, 0x0188, 0xa800,
+	0xb8c2, 0x9005, 0x1108, 0xb8be, 0x9006, 0xa802, 0xa867, 0x0103,
+	0xab7a, 0xa877, 0x0000, 0x080c, 0xbb45, 0x080c, 0x6996, 0x0c60,
+	0x001e, 0x009e, 0x0005, 0x0086, 0x9046, 0xb8c0, 0x904d, 0x0198,
+	0xa86c, 0x9406, 0x1118, 0xa870, 0x9506, 0x0128, 0x2940, 0xa800,
+	0x904d, 0x0148, 0x0ca8, 0xa800, 0x88ff, 0x1110, 0xb8c2, 0x0008,
+	0xa002, 0xa803, 0x0000, 0x008e, 0x0005, 0x901e, 0x0010, 0x2019,
+	0x0001, 0x00e6, 0x0096, 0x00c6, 0x0086, 0x0026, 0x0126, 0x2091,
+	0x8000, 0x2071, 0x19b8, 0x9046, 0x7028, 0x9065, 0x01e8, 0x6014,
+	0x2068, 0x83ff, 0x0120, 0x605c, 0x9606, 0x0158, 0x0030, 0xa86c,
+	0x9406, 0x1118, 0xa870, 0x9506, 0x0120, 0x2c40, 0x600c, 0x2060,
+	0x0c60, 0x600c, 0x0006, 0x0066, 0x2830, 0x080c, 0x9110, 0x006e,
+	0x000e, 0x83ff, 0x0508, 0x0c08, 0x9046, 0xb8c0, 0x904d, 0x01e0,
+	0x83ff, 0x0120, 0xa878, 0x9606, 0x0158, 0x0030, 0xa86c, 0x9406,
+	0x1118, 0xa870, 0x9506, 0x0120, 0x2940, 0xa800, 0x2048, 0x0c70,
+	0xb8c0, 0xaa00, 0x0026, 0x9906, 0x1110, 0xbac2, 0x0008, 0xa202,
+	0x000e, 0x83ff, 0x0108, 0x0c10, 0x002e, 0x008e, 0x00ce, 0x009e,
+	0x00ee, 0x0005, 0x9016, 0x0489, 0x1110, 0x2011, 0x0001, 0x0005,
+	0x080c, 0x655f, 0x0128, 0x080c, 0xb908, 0x0010, 0x9085, 0x0001,
+	0x0005, 0x080c, 0x655f, 0x0128, 0x080c, 0xb8a9, 0x0010, 0x9085,
+	0x0001, 0x0005, 0x080c, 0x655f, 0x0128, 0x080c, 0xb905, 0x0010,
+	0x9085, 0x0001, 0x0005, 0x080c, 0x655f, 0x0128, 0x080c, 0xb8c8,
+	0x0010, 0x9085, 0x0001, 0x0005, 0x080c, 0x655f, 0x0128, 0x080c,
+	0xb949, 0x0010, 0x9085, 0x0001, 0x0005, 0xb8a4, 0x900d, 0x1118,
+	0x9085, 0x0001, 0x0005, 0x0136, 0x01c6, 0xa800, 0x9005, 0x11b8,
 	0x890e, 0x810e, 0x810f, 0x9184, 0x003f, 0x20e0, 0x9184, 0xffc0,
 	0x9080, 0x0004, 0x2098, 0x20a9, 0x0001, 0x2009, 0x0010, 0x4002,
-	0x9606, 0x0128, 0x8109, 0x1dd8, 0x9085, 0x0001, 0x0068, 0x0146,
-	0x01d6, 0x3300, 0x8001, 0x20a0, 0x3c00, 0x20e8, 0x2001, 0xffff,
-	0x4004, 0x01de, 0x014e, 0x9006, 0x01ce, 0x013e, 0x0005, 0x0096,
-	0x0126, 0x2091, 0x8000, 0xb8a4, 0x904d, 0x1128, 0x080c, 0x1022,
-	0x0168, 0x2900, 0xb8a6, 0x080c, 0x64f4, 0xa803, 0x0001, 0xa807,
-	0x0000, 0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8,
-	0x0096, 0x0126, 0x2091, 0x8000, 0xb8a4, 0x904d, 0x0130, 0xb8a7,
-	0x0000, 0x080c, 0x1054, 0x9085, 0x0001, 0x012e, 0x009e, 0x0005,
-	0xb89c, 0xd0a4, 0x0005, 0x00b6, 0x00f6, 0x080c, 0x70ac, 0x01b0,
-	0x71c0, 0x81ff, 0x1198, 0x71d8, 0xd19c, 0x0180, 0x2001, 0x007e,
-	0x9080, 0x1000, 0x2004, 0x905d, 0x0148, 0xb804, 0x9084, 0x00ff,
-	0x9086, 0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802, 0x2079, 0x1853,
-	0x7804, 0x00d0, 0x0156, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c,
-	0x6269, 0x1168, 0xb804, 0x9084, 0xff00, 0x8007, 0x9096, 0x0004,
-	0x0118, 0x9086, 0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802, 0x001e,
-	0x8108, 0x1f04, 0x657e, 0x015e, 0x080c, 0x661e, 0x0120, 0x2001,
-	0x1956, 0x200c, 0x0030, 0x2079, 0x1853, 0x7804, 0x0030, 0x2009,
-	0x07d0, 0x2011, 0x65a8, 0x080c, 0x81f5, 0x00fe, 0x00be, 0x0005,
-	0x00b6, 0x2011, 0x65a8, 0x080c, 0x8131, 0x080c, 0x661e, 0x01d8,
-	0x2001, 0x107e, 0x2004, 0x2058, 0xb900, 0xc1ec, 0xb902, 0x080c,
-	0x665c, 0x0130, 0x2009, 0x07d0, 0x2011, 0x65a8, 0x080c, 0x81f5,
-	0x00e6, 0x2071, 0x1800, 0x9006, 0x707a, 0x705c, 0x707e, 0x080c,
-	0x2ddb, 0x00ee, 0x04d0, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x900e,
-	0x0016, 0x080c, 0x6269, 0x1558, 0xb800, 0xd0ec, 0x0540, 0x0046,
-	0xbaa0, 0x2220, 0x9006, 0x2009, 0x0029, 0x080c, 0xd251, 0xb800,
-	0xc0e5, 0xc0ec, 0xb802, 0x080c, 0x6658, 0x2001, 0x0707, 0x1128,
-	0xb804, 0x9084, 0x00ff, 0x9085, 0x0700, 0xb806, 0x080c, 0x98ad,
-	0x2019, 0x0029, 0x080c, 0x8613, 0x0076, 0x903e, 0x080c, 0x8502,
-	0x900e, 0x080c, 0xcfa6, 0x007e, 0x004e, 0x080c, 0x98c9, 0x001e,
-	0x8108, 0x1f04, 0x65d0, 0x00ce, 0x015e, 0x00be, 0x0005, 0x00b6,
-	0x6010, 0x2058, 0xb800, 0xc0ec, 0xb802, 0x00be, 0x0005, 0x7810,
-	0x00b6, 0x2058, 0xb800, 0x00be, 0xd0ac, 0x0005, 0x6010, 0x00b6,
-	0x905d, 0x0108, 0xb800, 0x00be, 0xd0bc, 0x0005, 0x00b6, 0x00f6,
-	0x2001, 0x107e, 0x2004, 0x905d, 0x0110, 0xb800, 0xd0ec, 0x00fe,
-	0x00be, 0x0005, 0x0126, 0x0026, 0x2091, 0x8000, 0x0006, 0xbaa0,
-	0x9290, 0x1000, 0x2204, 0x9b06, 0x190c, 0x0d65, 0x000e, 0xba00,
-	0x9005, 0x0110, 0xc2fd, 0x0008, 0xc2fc, 0xba02, 0x002e, 0x012e,
-	0x0005, 0x2011, 0x1836, 0x2204, 0xd0cc, 0x0138, 0x2001, 0x1954,
-	0x200c, 0x2011, 0x664e, 0x080c, 0x81f5, 0x0005, 0x2011, 0x664e,
-	0x080c, 0x8131, 0x2011, 0x1836, 0x2204, 0xc0cc, 0x2012, 0x0005,
-	0x080c, 0x5386, 0xd0ac, 0x0005, 0x080c, 0x5386, 0xd0a4, 0x0005,
-	0x0016, 0xb904, 0x9184, 0x00ff, 0x908e, 0x0006, 0x001e, 0x0005,
-	0x0016, 0xb904, 0x9184, 0xff00, 0x8007, 0x908e, 0x0006, 0x001e,
-	0x0005, 0x00b6, 0x00f6, 0x080c, 0xbf46, 0x0158, 0x70d8, 0x9084,
-	0x0028, 0x0138, 0x2001, 0x107f, 0x2004, 0x905d, 0x0110, 0xb8c4,
-	0xd094, 0x00fe, 0x00be, 0x0005, 0x0006, 0x0016, 0x0036, 0x0046,
-	0x0076, 0x00b6, 0x2001, 0x1817, 0x203c, 0x9780, 0x3184, 0x203d,
-	0x97bc, 0xff00, 0x873f, 0x9006, 0x2018, 0x2008, 0x9284, 0x8000,
-	0x0110, 0x2019, 0x0001, 0x9294, 0x7fff, 0x2100, 0x9706, 0x0190,
-	0x91a0, 0x1000, 0x2404, 0x905d, 0x0168, 0xb804, 0x9084, 0x00ff,
-	0x9086, 0x0006, 0x1138, 0x83ff, 0x0118, 0xb89c, 0xd0a4, 0x0110,
-	0x8211, 0x0158, 0x8108, 0x83ff, 0x0120, 0x9182, 0x0800, 0x0e28,
-	0x0068, 0x9182, 0x007e, 0x0e08, 0x0048, 0x00be, 0x007e, 0x004e,
-	0x003e, 0x001e, 0x9085, 0x0001, 0x000e, 0x0005, 0x00be, 0x007e,
-	0x004e, 0x003e, 0x001e, 0x9006, 0x000e, 0x0005, 0x0046, 0x0056,
-	0x0076, 0x00b6, 0x2100, 0x9084, 0x7fff, 0x9080, 0x1000, 0x2004,
-	0x905d, 0x0130, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x0550,
-	0x9184, 0x8000, 0x0580, 0x2001, 0x1817, 0x203c, 0x9780, 0x3184,
-	0x203d, 0x97bc, 0xff00, 0x873f, 0x9006, 0x2020, 0x2400, 0x9706,
-	0x01a0, 0x94a8, 0x1000, 0x2504, 0x905d, 0x0178, 0xb804, 0x9084,
-	0x00ff, 0x9086, 0x0006, 0x1148, 0xb89c, 0xd0a4, 0x0130, 0xb814,
-	0x9206, 0x1118, 0xb810, 0x9306, 0x0128, 0x8420, 0x9482, 0x0800,
-	0x0e28, 0x0048, 0x918c, 0x7fff, 0x00be, 0x007e, 0x005e, 0x004e,
-	0x9085, 0x0001, 0x0005, 0x918c, 0x7fff, 0x00be, 0x007e, 0x005e,
-	0x004e, 0x9006, 0x0005, 0x2071, 0x1906, 0x7003, 0x0001, 0x7007,
-	0x0000, 0x9006, 0x7012, 0x7016, 0x701a, 0x701e, 0x700a, 0x7046,
-	0x2001, 0x1919, 0x2003, 0x0000, 0x0005, 0x0016, 0x00e6, 0x2071,
-	0x191a, 0x900e, 0x710a, 0x080c, 0x5386, 0xd0fc, 0x1140, 0x080c,
-	0x5386, 0x900e, 0xd09c, 0x0108, 0x8108, 0x7102, 0x0400, 0x2001,
-	0x1873, 0x200c, 0x9184, 0x0007, 0x9006, 0x0002, 0x6737, 0x6737,
-	0x6737, 0x6737, 0x6737, 0x674e, 0x675c, 0x6737, 0x7003, 0x0003,
-	0x2009, 0x1874, 0x210c, 0x9184, 0xff00, 0x8007, 0x9005, 0x1110,
-	0x2001, 0x0002, 0x7006, 0x0018, 0x7003, 0x0005, 0x0c88, 0x00ee,
-	0x001e, 0x0005, 0x00e6, 0x2071, 0x0050, 0x684c, 0x9005, 0x1150,
-	0x00e6, 0x2071, 0x1906, 0x7028, 0xc085, 0x702a, 0x00ee, 0x9085,
-	0x0001, 0x0488, 0x6844, 0x9005, 0x0158, 0x080c, 0x741e, 0x6a60,
-	0x9200, 0x7002, 0x6864, 0x9101, 0x7006, 0x9006, 0x7012, 0x7016,
-	0x6860, 0x7002, 0x6864, 0x7006, 0x6868, 0x700a, 0x686c, 0x700e,
-	0x6844, 0x9005, 0x1110, 0x7012, 0x7016, 0x684c, 0x701a, 0x701c,
-	0x9085, 0x0040, 0x701e, 0x7037, 0x0019, 0x702b, 0x0001, 0x00e6,
-	0x2071, 0x1906, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0x700b,
-	0x0000, 0x00ee, 0x9006, 0x00ee, 0x0005, 0xa868, 0xd0fc, 0x11d8,
-	0x00e6, 0x0026, 0x2001, 0x191a, 0x2004, 0x9005, 0x0904, 0x6994,
-	0xa87c, 0xd0bc, 0x1904, 0x6994, 0xa978, 0xa874, 0x9105, 0x1904,
-	0x6994, 0x2001, 0x191a, 0x2004, 0x0002, 0x6994, 0x67e8, 0x6824,
-	0x6824, 0x6994, 0x6824, 0x0005, 0xa868, 0xd0fc, 0x1500, 0x00e6,
-	0x0026, 0x2009, 0x191a, 0x210c, 0x81ff, 0x0904, 0x6994, 0xa87c,
-	0xd0cc, 0x0904, 0x6994, 0xa880, 0x9084, 0x00ff, 0x9086, 0x0001,
-	0x1904, 0x6994, 0x9186, 0x0003, 0x0904, 0x6824, 0x9186, 0x0005,
-	0x0904, 0x6824, 0xa84f, 0x8021, 0xa853, 0x0017, 0x0028, 0x0005,
-	0xa84f, 0x8020, 0xa853, 0x0016, 0x2071, 0x1906, 0x701c, 0x9005,
-	0x1904, 0x6b37, 0x0e04, 0x6b82, 0x2071, 0x0000, 0xa84c, 0x7082,
-	0xa850, 0x7032, 0xa86c, 0x7086, 0x7036, 0xa870, 0x708a, 0x2091,
-	0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11be, 0x2071,
-	0x1800, 0x2011, 0x0001, 0xa804, 0x900d, 0x702c, 0x1158, 0xa802,
-	0x2900, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x804c, 0x002e,
-	0x00ee, 0x0005, 0x0096, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900,
-	0x81ff, 0x1dc8, 0x009e, 0x0c58, 0xa84f, 0x0000, 0x00f6, 0x2079,
-	0x0050, 0x2071, 0x1906, 0xa803, 0x0000, 0x7010, 0x9005, 0x1904,
-	0x6919, 0x782c, 0x908c, 0x0780, 0x190c, 0x6ca9, 0x8004, 0x8004,
-	0x8004, 0x9084, 0x0003, 0x0002, 0x6842, 0x6919, 0x6867, 0x68b4,
-	0x080c, 0x0d65, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d,
-	0x1170, 0x2071, 0x19d4, 0x703c, 0x9005, 0x1328, 0x2001, 0x191b,
-	0x2004, 0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016,
-	0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8,
-	0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x804c, 0x0c10, 0x2071,
-	0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x15a8, 0x7824, 0x00e6,
-	0x2071, 0x0040, 0x712c, 0xd19c, 0x1170, 0x2009, 0x182f, 0x210c,
-	0x918a, 0x0040, 0x0240, 0x7022, 0x2001, 0x1dc0, 0x200c, 0x8108,
-	0x2102, 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c, 0xa802, 0x2900,
-	0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x804c, 0x782c, 0x9094,
-	0x0780, 0x190c, 0x6ca9, 0xd0a4, 0x19c8, 0x2071, 0x19d4, 0x703c,
-	0x9005, 0x1328, 0x2001, 0x191b, 0x2004, 0x8005, 0x703e, 0x00fe,
-	0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802,
-	0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be,
-	0x080c, 0x804c, 0x0804, 0x686e, 0x0096, 0x00e6, 0x7824, 0x2048,
-	0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000,
-	0x70be, 0x080c, 0x804c, 0x782c, 0x9094, 0x0780, 0x190c, 0x6ca9,
-	0xd0a4, 0x1d60, 0x00ee, 0x782c, 0x9094, 0x0780, 0x190c, 0x6ca9,
-	0xd09c, 0x11a0, 0x009e, 0x2900, 0x7822, 0xa804, 0x900d, 0x1560,
-	0x2071, 0x19d4, 0x703c, 0x9005, 0x1328, 0x2001, 0x191b, 0x2004,
-	0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x009e, 0x2908,
-	0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902,
-	0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1170, 0x2071, 0x19d4,
-	0x703c, 0x9005, 0x1328, 0x2001, 0x191b, 0x2004, 0x8005, 0x703e,
-	0x00fe, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016, 0x702c,
-	0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e,
-	0x70bc, 0x9200, 0x70be, 0x080c, 0x804c, 0x00fe, 0x002e, 0x00ee,
-	0x0005, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a,
-	0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1904,
-	0x696e, 0x782c, 0x9094, 0x0780, 0x190c, 0x6ca9, 0xd09c, 0x1198,
-	0x701c, 0x904d, 0x0180, 0x7010, 0x8001, 0x7012, 0x1108, 0x701a,
-	0xa800, 0x701e, 0x2900, 0x7822, 0x782c, 0x9094, 0x0780, 0x190c,
-	0x6ca9, 0xd09c, 0x0d68, 0x782c, 0x9094, 0x0780, 0x190c, 0x6ca9,
-	0xd0a4, 0x01b0, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c,
-	0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x804c,
-	0x782c, 0x9094, 0x0780, 0x190c, 0x6ca9, 0xd0a4, 0x1d60, 0x00ee,
+	0x9606, 0x0128, 0x8109, 0x1dd8, 0x9085, 0x0001, 0x0008, 0x9006,
+	0x01ce, 0x013e, 0x0005, 0x0146, 0x01d6, 0xa860, 0x20e8, 0xa85c,
+	0x9080, 0x0004, 0x20a0, 0x20a9, 0x0010, 0x2009, 0xffff, 0x4104,
+	0x01de, 0x014e, 0x0136, 0x01c6, 0xa800, 0x9005, 0x11b8, 0x890e,
+	0x810e, 0x810f, 0x9184, 0x003f, 0x20e0, 0x9184, 0xffc0, 0x9080,
+	0x0004, 0x2098, 0x20a9, 0x0001, 0x2009, 0x0010, 0x4002, 0x9606,
+	0x0128, 0x8109, 0x1dd8, 0x9085, 0x0001, 0x0068, 0x0146, 0x01d6,
+	0x3300, 0x8001, 0x20a0, 0x3c00, 0x20e8, 0x2001, 0xffff, 0x4004,
+	0x01de, 0x014e, 0x9006, 0x01ce, 0x013e, 0x0005, 0x0096, 0x0126,
+	0x2091, 0x8000, 0xb8a4, 0x904d, 0x1128, 0x080c, 0x1022, 0x0168,
+	0x2900, 0xb8a6, 0x080c, 0x64fb, 0xa803, 0x0001, 0xa807, 0x0000,
+	0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0096,
+	0x0126, 0x2091, 0x8000, 0xb8a4, 0x904d, 0x0130, 0xb8a7, 0x0000,
+	0x080c, 0x1054, 0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0xb89c,
+	0xd0a4, 0x0005, 0x00b6, 0x00f6, 0x080c, 0x70b7, 0x01b0, 0x71c0,
+	0x81ff, 0x1198, 0x71d8, 0xd19c, 0x0180, 0x2001, 0x007e, 0x9080,
+	0x1000, 0x2004, 0x905d, 0x0148, 0xb804, 0x9084, 0x00ff, 0x9086,
+	0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802, 0x2079, 0x1853, 0x7804,
+	0x00d0, 0x0156, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x6270,
+	0x1168, 0xb804, 0x9084, 0xff00, 0x8007, 0x9096, 0x0004, 0x0118,
+	0x9086, 0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802, 0x001e, 0x8108,
+	0x1f04, 0x6585, 0x015e, 0x080c, 0x6625, 0x0120, 0x2001, 0x1956,
+	0x200c, 0x0030, 0x2079, 0x1853, 0x7804, 0x0030, 0x2009, 0x07d0,
+	0x2011, 0x65af, 0x080c, 0x821d, 0x00fe, 0x00be, 0x0005, 0x00b6,
+	0x2011, 0x65af, 0x080c, 0x8159, 0x080c, 0x6625, 0x01d8, 0x2001,
+	0x107e, 0x2004, 0x2058, 0xb900, 0xc1ec, 0xb902, 0x080c, 0x6663,
+	0x0130, 0x2009, 0x07d0, 0x2011, 0x65af, 0x080c, 0x821d, 0x00e6,
+	0x2071, 0x1800, 0x9006, 0x707a, 0x705c, 0x707e, 0x080c, 0x2ddb,
+	0x00ee, 0x04d0, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x900e, 0x0016,
+	0x080c, 0x6270, 0x1558, 0xb800, 0xd0ec, 0x0540, 0x0046, 0xbaa0,
+	0x2220, 0x9006, 0x2009, 0x0029, 0x080c, 0xd273, 0xb800, 0xc0e5,
+	0xc0ec, 0xb802, 0x080c, 0x665f, 0x2001, 0x0707, 0x1128, 0xb804,
+	0x9084, 0x00ff, 0x9085, 0x0700, 0xb806, 0x080c, 0x98c8, 0x2019,
+	0x0029, 0x080c, 0x863b, 0x0076, 0x903e, 0x080c, 0x852a, 0x900e,
+	0x080c, 0xcfc8, 0x007e, 0x004e, 0x080c, 0x98e4, 0x001e, 0x8108,
+	0x1f04, 0x65d7, 0x00ce, 0x015e, 0x00be, 0x0005, 0x00b6, 0x6010,
+	0x2058, 0xb800, 0xc0ec, 0xb802, 0x00be, 0x0005, 0x7810, 0x00b6,
+	0x2058, 0xb800, 0x00be, 0xd0ac, 0x0005, 0x6010, 0x00b6, 0x905d,
+	0x0108, 0xb800, 0x00be, 0xd0bc, 0x0005, 0x00b6, 0x00f6, 0x2001,
+	0x107e, 0x2004, 0x905d, 0x0110, 0xb800, 0xd0ec, 0x00fe, 0x00be,
+	0x0005, 0x0126, 0x0026, 0x2091, 0x8000, 0x0006, 0xbaa0, 0x9290,
+	0x1000, 0x2204, 0x9b06, 0x190c, 0x0d65, 0x000e, 0xba00, 0x9005,
+	0x0110, 0xc2fd, 0x0008, 0xc2fc, 0xba02, 0x002e, 0x012e, 0x0005,
+	0x2011, 0x1836, 0x2204, 0xd0cc, 0x0138, 0x2001, 0x1954, 0x200c,
+	0x2011, 0x6655, 0x080c, 0x821d, 0x0005, 0x2011, 0x6655, 0x080c,
+	0x8159, 0x2011, 0x1836, 0x2204, 0xc0cc, 0x2012, 0x0005, 0x080c,
+	0x538d, 0xd0ac, 0x0005, 0x080c, 0x538d, 0xd0a4, 0x0005, 0x0016,
+	0xb904, 0x9184, 0x00ff, 0x908e, 0x0006, 0x001e, 0x0005, 0x0016,
+	0xb904, 0x9184, 0xff00, 0x8007, 0x908e, 0x0006, 0x001e, 0x0005,
+	0x00b6, 0x00f6, 0x080c, 0xbf61, 0x0158, 0x70d8, 0x9084, 0x0028,
+	0x0138, 0x2001, 0x107f, 0x2004, 0x905d, 0x0110, 0xb8c4, 0xd094,
+	0x00fe, 0x00be, 0x0005, 0x0006, 0x0016, 0x0036, 0x0046, 0x0076,
+	0x00b6, 0x2001, 0x1817, 0x203c, 0x9780, 0x318b, 0x203d, 0x97bc,
+	0xff00, 0x873f, 0x9006, 0x2018, 0x2008, 0x9284, 0x8000, 0x0110,
+	0x2019, 0x0001, 0x9294, 0x7fff, 0x2100, 0x9706, 0x0190, 0x91a0,
+	0x1000, 0x2404, 0x905d, 0x0168, 0xb804, 0x9084, 0x00ff, 0x9086,
+	0x0006, 0x1138, 0x83ff, 0x0118, 0xb89c, 0xd0a4, 0x0110, 0x8211,
+	0x0158, 0x8108, 0x83ff, 0x0120, 0x9182, 0x0800, 0x0e28, 0x0068,
+	0x9182, 0x007e, 0x0e08, 0x0048, 0x00be, 0x007e, 0x004e, 0x003e,
+	0x001e, 0x9085, 0x0001, 0x000e, 0x0005, 0x00be, 0x007e, 0x004e,
+	0x003e, 0x001e, 0x9006, 0x000e, 0x0005, 0x0046, 0x0056, 0x0076,
+	0x00b6, 0x2100, 0x9084, 0x7fff, 0x9080, 0x1000, 0x2004, 0x905d,
+	0x0130, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x0550, 0x9184,
+	0x8000, 0x0580, 0x2001, 0x1817, 0x203c, 0x9780, 0x318b, 0x203d,
+	0x97bc, 0xff00, 0x873f, 0x9006, 0x2020, 0x2400, 0x9706, 0x01a0,
+	0x94a8, 0x1000, 0x2504, 0x905d, 0x0178, 0xb804, 0x9084, 0x00ff,
+	0x9086, 0x0006, 0x1148, 0xb89c, 0xd0a4, 0x0130, 0xb814, 0x9206,
+	0x1118, 0xb810, 0x9306, 0x0128, 0x8420, 0x9482, 0x0800, 0x0e28,
+	0x0048, 0x918c, 0x7fff, 0x00be, 0x007e, 0x005e, 0x004e, 0x9085,
+	0x0001, 0x0005, 0x918c, 0x7fff, 0x00be, 0x007e, 0x005e, 0x004e,
+	0x9006, 0x0005, 0x2071, 0x1906, 0x7003, 0x0001, 0x7007, 0x0000,
+	0x9006, 0x7012, 0x7016, 0x701a, 0x701e, 0x700a, 0x7046, 0x2001,
+	0x1919, 0x2003, 0x0000, 0x0005, 0x0016, 0x00e6, 0x2071, 0x191a,
+	0x900e, 0x710a, 0x080c, 0x538d, 0xd0fc, 0x1140, 0x080c, 0x538d,
+	0x900e, 0xd09c, 0x0108, 0x8108, 0x7102, 0x0400, 0x2001, 0x1873,
+	0x200c, 0x9184, 0x0007, 0x9006, 0x0002, 0x673e, 0x673e, 0x673e,
+	0x673e, 0x673e, 0x6755, 0x6763, 0x673e, 0x7003, 0x0003, 0x2009,
+	0x1874, 0x210c, 0x9184, 0xff00, 0x8007, 0x9005, 0x1110, 0x2001,
+	0x0002, 0x7006, 0x0018, 0x7003, 0x0005, 0x0c88, 0x00ee, 0x001e,
+	0x0005, 0x00e6, 0x2071, 0x0050, 0x684c, 0x9005, 0x1150, 0x00e6,
+	0x2071, 0x1906, 0x7028, 0xc085, 0x702a, 0x00ee, 0x9085, 0x0001,
+	0x0488, 0x6844, 0x9005, 0x0158, 0x080c, 0x7429, 0x6a60, 0x9200,
+	0x7002, 0x6864, 0x9101, 0x7006, 0x9006, 0x7012, 0x7016, 0x6860,
+	0x7002, 0x6864, 0x7006, 0x6868, 0x700a, 0x686c, 0x700e, 0x6844,
+	0x9005, 0x1110, 0x7012, 0x7016, 0x684c, 0x701a, 0x701c, 0x9085,
+	0x0040, 0x701e, 0x7037, 0x0019, 0x702b, 0x0001, 0x00e6, 0x2071,
+	0x1906, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0x700b, 0x0000,
+	0x00ee, 0x9006, 0x00ee, 0x0005, 0xa868, 0xd0fc, 0x11d8, 0x00e6,
+	0x0026, 0x2001, 0x191a, 0x2004, 0x9005, 0x0904, 0x699b, 0xa87c,
+	0xd0bc, 0x1904, 0x699b, 0xa978, 0xa874, 0x9105, 0x1904, 0x699b,
+	0x2001, 0x191a, 0x2004, 0x0002, 0x699b, 0x67ef, 0x682b, 0x682b,
+	0x699b, 0x682b, 0x0005, 0xa868, 0xd0fc, 0x1500, 0x00e6, 0x0026,
+	0x2009, 0x191a, 0x210c, 0x81ff, 0x0904, 0x699b, 0xa87c, 0xd0cc,
+	0x0904, 0x699b, 0xa880, 0x9084, 0x00ff, 0x9086, 0x0001, 0x1904,
+	0x699b, 0x9186, 0x0003, 0x0904, 0x682b, 0x9186, 0x0005, 0x0904,
+	0x682b, 0xa84f, 0x8021, 0xa853, 0x0017, 0x0028, 0x0005, 0xa84f,
+	0x8020, 0xa853, 0x0016, 0x2071, 0x1906, 0x701c, 0x9005, 0x1904,
+	0x6b3e, 0x0e04, 0x6b89, 0x2071, 0x0000, 0xa84c, 0x7082, 0xa850,
+	0x7032, 0xa86c, 0x7086, 0x7036, 0xa870, 0x708a, 0x2091, 0x4080,
+	0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11be, 0x2071, 0x1800,
+	0x2011, 0x0001, 0xa804, 0x900d, 0x702c, 0x1158, 0xa802, 0x2900,
+	0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x8074, 0x002e, 0x00ee,
+	0x0005, 0x0096, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff,
+	0x1dc8, 0x009e, 0x0c58, 0xa84f, 0x0000, 0x00f6, 0x2079, 0x0050,
+	0x2071, 0x1906, 0xa803, 0x0000, 0x7010, 0x9005, 0x1904, 0x6920,
+	0x782c, 0x908c, 0x0780, 0x190c, 0x6cb0, 0x8004, 0x8004, 0x8004,
+	0x9084, 0x0003, 0x0002, 0x6849, 0x6920, 0x686e, 0x68bb, 0x080c,
+	0x0d65, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1170,
 	0x2071, 0x19d4, 0x703c, 0x9005, 0x1328, 0x2001, 0x191b, 0x2004,
-	0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x00e6, 0x2071,
-	0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900,
-	0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x804c,
-	0x00ee, 0x0804, 0x6929, 0xa868, 0xd0fc, 0x1560, 0x0096, 0xa804,
-	0xa807, 0x0000, 0x904d, 0x190c, 0x0fd4, 0x009e, 0x0018, 0xa868,
-	0xd0fc, 0x1500, 0x00e6, 0x0026, 0xa84f, 0x0000, 0x00f6, 0x2079,
-	0x0050, 0x2071, 0x1906, 0xa803, 0x0000, 0x7010, 0x9005, 0x1904,
-	0x6ab1, 0x782c, 0x908c, 0x0780, 0x190c, 0x6ca9, 0x8004, 0x8004,
-	0x8004, 0x9084, 0x0003, 0x0002, 0x69b3, 0x6ab1, 0x69ce, 0x6a40,
-	0x080c, 0x0d65, 0x0005, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804,
-	0x900d, 0x1120, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c,
+	0x8005, 0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c,
 	0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e,
-	0x70bc, 0x9200, 0x70be, 0x080c, 0x804c, 0x0c60, 0x2071, 0x1800,
-	0x2900, 0x7822, 0xa804, 0x900d, 0x1904, 0x6a2f, 0x7830, 0xd0dc,
-	0x1120, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7824, 0x00e6, 0x2071,
+	0x70bc, 0x9200, 0x70be, 0x080c, 0x8074, 0x0c10, 0x2071, 0x1800,
+	0x2900, 0x7822, 0xa804, 0x900d, 0x15a8, 0x7824, 0x00e6, 0x2071,
 	0x0040, 0x712c, 0xd19c, 0x1170, 0x2009, 0x182f, 0x210c, 0x918a,
 	0x0040, 0x0240, 0x7022, 0x2001, 0x1dc0, 0x200c, 0x8108, 0x2102,
 	0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e,
-	0x70bc, 0x8000, 0x70be, 0x080c, 0x804c, 0x782c, 0x9094, 0x0780,
-	0x190c, 0x6ca9, 0xd0a4, 0x19c8, 0x0e04, 0x6a26, 0x7838, 0x7938,
-	0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013,
-	0x00de, 0x2001, 0x1917, 0x200c, 0xc184, 0x2102, 0x2091, 0x4080,
-	0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11be, 0x2009, 0x1919,
-	0x200b, 0x0000, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2001, 0x1917,
-	0x200c, 0xc185, 0x2102, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016,
-	0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8,
-	0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x804c, 0x0804, 0x69dd,
-	0x0096, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802,
-	0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x804c, 0x782c,
-	0x9094, 0x0780, 0x190c, 0x6ca9, 0xd0a4, 0x1d60, 0x00ee, 0x0e04,
-	0x6a84, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000,
-	0x6836, 0x6833, 0x0013, 0x00de, 0x7044, 0xc084, 0x7046, 0x2091,
-	0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11be, 0x2009,
-	0x1919, 0x200b, 0x0000, 0x782c, 0x9094, 0x0780, 0x190c, 0x6ca9,
-	0xd09c, 0x1170, 0x009e, 0x2900, 0x7822, 0xa804, 0x900d, 0x11e0,
-	0x00fe, 0x002e, 0x00ee, 0x0005, 0x7044, 0xc085, 0x7046, 0x0c58,
-	0x009e, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a,
-	0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1120,
-	0x00fe, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016, 0x702c,
-	0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e,
-	0x70bc, 0x9200, 0x70be, 0x080c, 0x804c, 0x00fe, 0x002e, 0x00ee,
-	0x0005, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a,
-	0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1904,
-	0x6b22, 0x782c, 0x9094, 0x0780, 0x190c, 0x6ca9, 0xd09c, 0x11b0,
-	0x701c, 0x904d, 0x0198, 0xa84c, 0x9005, 0x1180, 0x7010, 0x8001,
-	0x7012, 0x1108, 0x701a, 0xa800, 0x701e, 0x2900, 0x7822, 0x782c,
-	0x9094, 0x0780, 0x190c, 0x6ca9, 0xd09c, 0x0d50, 0x782c, 0x9094,
-	0x0780, 0x190c, 0x6ca9, 0xd0a4, 0x05c8, 0x00e6, 0x7824, 0x2048,
-	0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000,
-	0x70be, 0x080c, 0x804c, 0x782c, 0x9094, 0x0780, 0x190c, 0x6ca9,
-	0xd0a4, 0x1d60, 0x00ee, 0x0e04, 0x6b1b, 0x7838, 0x7938, 0x910e,
+	0x70bc, 0x8000, 0x70be, 0x080c, 0x8074, 0x782c, 0x9094, 0x0780,
+	0x190c, 0x6cb0, 0xd0a4, 0x19c8, 0x2071, 0x19d4, 0x703c, 0x9005,
+	0x1328, 0x2001, 0x191b, 0x2004, 0x8005, 0x703e, 0x00fe, 0x002e,
+	0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210,
+	0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c,
+	0x8074, 0x0804, 0x6875, 0x0096, 0x00e6, 0x7824, 0x2048, 0x2071,
+	0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be,
+	0x080c, 0x8074, 0x782c, 0x9094, 0x0780, 0x190c, 0x6cb0, 0xd0a4,
+	0x1d60, 0x00ee, 0x782c, 0x9094, 0x0780, 0x190c, 0x6cb0, 0xd09c,
+	0x11a0, 0x009e, 0x2900, 0x7822, 0xa804, 0x900d, 0x1560, 0x2071,
+	0x19d4, 0x703c, 0x9005, 0x1328, 0x2001, 0x191b, 0x2004, 0x8005,
+	0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x009e, 0x2908, 0x7010,
+	0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008,
+	0x711e, 0x2148, 0xa804, 0x900d, 0x1170, 0x2071, 0x19d4, 0x703c,
+	0x9005, 0x1328, 0x2001, 0x191b, 0x2004, 0x8005, 0x703e, 0x00fe,
+	0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148,
+	0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc,
+	0x9200, 0x70be, 0x080c, 0x8074, 0x00fe, 0x002e, 0x00ee, 0x0005,
+	0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110,
+	0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1904, 0x6975,
+	0x782c, 0x9094, 0x0780, 0x190c, 0x6cb0, 0xd09c, 0x1198, 0x701c,
+	0x904d, 0x0180, 0x7010, 0x8001, 0x7012, 0x1108, 0x701a, 0xa800,
+	0x701e, 0x2900, 0x7822, 0x782c, 0x9094, 0x0780, 0x190c, 0x6cb0,
+	0xd09c, 0x0d68, 0x782c, 0x9094, 0x0780, 0x190c, 0x6cb0, 0xd0a4,
+	0x01b0, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802,
+	0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x8074, 0x782c,
+	0x9094, 0x0780, 0x190c, 0x6cb0, 0xd0a4, 0x1d60, 0x00ee, 0x2071,
+	0x19d4, 0x703c, 0x9005, 0x1328, 0x2001, 0x191b, 0x2004, 0x8005,
+	0x703e, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1800,
+	0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff,
+	0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x8074, 0x00ee,
+	0x0804, 0x6930, 0xa868, 0xd0fc, 0x1560, 0x0096, 0xa804, 0xa807,
+	0x0000, 0x904d, 0x190c, 0x0fd4, 0x009e, 0x0018, 0xa868, 0xd0fc,
+	0x1500, 0x00e6, 0x0026, 0xa84f, 0x0000, 0x00f6, 0x2079, 0x0050,
+	0x2071, 0x1906, 0xa803, 0x0000, 0x7010, 0x9005, 0x1904, 0x6ab8,
+	0x782c, 0x908c, 0x0780, 0x190c, 0x6cb0, 0x8004, 0x8004, 0x8004,
+	0x9084, 0x0003, 0x0002, 0x69ba, 0x6ab8, 0x69d5, 0x6a47, 0x080c,
+	0x0d65, 0x0005, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d,
+	0x1120, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148,
+	0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc,
+	0x9200, 0x70be, 0x080c, 0x8074, 0x0c60, 0x2071, 0x1800, 0x2900,
+	0x7822, 0xa804, 0x900d, 0x1904, 0x6a36, 0x7830, 0xd0dc, 0x1120,
+	0x00fe, 0x002e, 0x00ee, 0x0005, 0x7824, 0x00e6, 0x2071, 0x0040,
+	0x712c, 0xd19c, 0x1170, 0x2009, 0x182f, 0x210c, 0x918a, 0x0040,
+	0x0240, 0x7022, 0x2001, 0x1dc0, 0x200c, 0x8108, 0x2102, 0x00ee,
+	0x0058, 0x00ee, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc,
+	0x8000, 0x70be, 0x080c, 0x8074, 0x782c, 0x9094, 0x0780, 0x190c,
+	0x6cb0, 0xd0a4, 0x19c8, 0x0e04, 0x6a2d, 0x7838, 0x7938, 0x910e,
 	0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de,
-	0x7044, 0xc084, 0x7046, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
-	0xd084, 0x190c, 0x11be, 0x2009, 0x1919, 0x200b, 0x0000, 0x00fe,
-	0x002e, 0x00ee, 0x0005, 0x7044, 0xc085, 0x7046, 0x00fe, 0x002e,
-	0x00ee, 0x0005, 0x00e6, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148,
+	0x2001, 0x1917, 0x200c, 0xc184, 0x2102, 0x2091, 0x4080, 0x2001,
+	0x0089, 0x2004, 0xd084, 0x190c, 0x11be, 0x2009, 0x1919, 0x200b,
+	0x0000, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2001, 0x1917, 0x200c,
+	0xc185, 0x2102, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c,
+	0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e,
+	0x70bc, 0x9200, 0x70be, 0x080c, 0x8074, 0x0804, 0x69e4, 0x0096,
+	0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900,
+	0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x8074, 0x782c, 0x9094,
+	0x0780, 0x190c, 0x6cb0, 0xd0a4, 0x1d60, 0x00ee, 0x0e04, 0x6a8b,
+	0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836,
+	0x6833, 0x0013, 0x00de, 0x7044, 0xc084, 0x7046, 0x2091, 0x4080,
+	0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11be, 0x2009, 0x1919,
+	0x200b, 0x0000, 0x782c, 0x9094, 0x0780, 0x190c, 0x6cb0, 0xd09c,
+	0x1170, 0x009e, 0x2900, 0x7822, 0xa804, 0x900d, 0x11e0, 0x00fe,
+	0x002e, 0x00ee, 0x0005, 0x7044, 0xc085, 0x7046, 0x0c58, 0x009e,
+	0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110,
+	0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1120, 0x00fe,
+	0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148,
 	0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc,
-	0x9200, 0x70be, 0x080c, 0x804c, 0x00ee, 0x0804, 0x6ac1, 0x2071,
-	0x1906, 0xa803, 0x0000, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018,
-	0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804,
-	0x900d, 0x1128, 0x1e04, 0x6b62, 0x002e, 0x00ee, 0x0005, 0x2071,
+	0x9200, 0x70be, 0x080c, 0x8074, 0x00fe, 0x002e, 0x00ee, 0x0005,
+	0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110,
+	0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1904, 0x6b29,
+	0x782c, 0x9094, 0x0780, 0x190c, 0x6cb0, 0xd09c, 0x11b0, 0x701c,
+	0x904d, 0x0198, 0xa84c, 0x9005, 0x1180, 0x7010, 0x8001, 0x7012,
+	0x1108, 0x701a, 0xa800, 0x701e, 0x2900, 0x7822, 0x782c, 0x9094,
+	0x0780, 0x190c, 0x6cb0, 0xd09c, 0x0d50, 0x782c, 0x9094, 0x0780,
+	0x190c, 0x6cb0, 0xd0a4, 0x05c8, 0x00e6, 0x7824, 0x2048, 0x2071,
+	0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be,
+	0x080c, 0x8074, 0x782c, 0x9094, 0x0780, 0x190c, 0x6cb0, 0xd0a4,
+	0x1d60, 0x00ee, 0x0e04, 0x6b22, 0x7838, 0x7938, 0x910e, 0x1de0,
+	0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x7044,
+	0xc084, 0x7046, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,
+	0x190c, 0x11be, 0x2009, 0x1919, 0x200b, 0x0000, 0x00fe, 0x002e,
+	0x00ee, 0x0005, 0x7044, 0xc085, 0x7046, 0x00fe, 0x002e, 0x00ee,
+	0x0005, 0x00e6, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904,
+	0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200,
+	0x70be, 0x080c, 0x8074, 0x00ee, 0x0804, 0x6ac8, 0x2071, 0x1906,
+	0xa803, 0x0000, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d,
+	0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d,
+	0x1128, 0x1e04, 0x6b69, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800,
+	0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff,
+	0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x8074, 0x0e04,
+	0x6b53, 0x2071, 0x1906, 0x701c, 0x2048, 0xa84c, 0x900d, 0x0d18,
+	0x2071, 0x0000, 0x7182, 0xa850, 0x7032, 0xa86c, 0x7086, 0x7036,
+	0xa870, 0x708a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,
+	0x190c, 0x11be, 0x2071, 0x1906, 0x080c, 0x6c9c, 0x002e, 0x00ee,
+	0x0005, 0x2071, 0x1906, 0xa803, 0x0000, 0x2908, 0x7010, 0x8000,
+	0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e,
+	0x2148, 0xa804, 0x900d, 0x1118, 0x002e, 0x00ee, 0x0005, 0x2071,
 	0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900,
-	0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x804c,
-	0x0e04, 0x6b4c, 0x2071, 0x1906, 0x701c, 0x2048, 0xa84c, 0x900d,
-	0x0d18, 0x2071, 0x0000, 0x7182, 0xa850, 0x7032, 0xa86c, 0x7086,
-	0x7036, 0xa870, 0x708a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
-	0xd084, 0x190c, 0x11be, 0x2071, 0x1906, 0x080c, 0x6c95, 0x002e,
-	0x00ee, 0x0005, 0x2071, 0x1906, 0xa803, 0x0000, 0x2908, 0x7010,
-	0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008,
-	0x711e, 0x2148, 0xa804, 0x900d, 0x1118, 0x002e, 0x00ee, 0x0005,
-	0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210,
-	0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c,
-	0x804c, 0x002e, 0x00ee, 0x0005, 0x0006, 0xa87c, 0x0006, 0xa867,
-	0x0103, 0x20a9, 0x001c, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001d,
-	0x20a0, 0x9006, 0x4004, 0x000e, 0x9084, 0x00ff, 0xa87e, 0x000e,
-	0xa87a, 0xa982, 0x0005, 0x2071, 0x1906, 0x7004, 0x0002, 0x6bcd,
-	0x6bce, 0x6c94, 0x6bce, 0x0d65, 0x6c94, 0x0005, 0x2001, 0x191a,
-	0x2004, 0x0002, 0x6bd8, 0x6bd8, 0x6c2d, 0x6c2e, 0x6bd8, 0x6c2e,
-	0x0126, 0x2091, 0x8000, 0x1e0c, 0x6cb4, 0x701c, 0x904d, 0x01e0,
-	0xa84c, 0x9005, 0x01d8, 0x0e04, 0x6bfc, 0xa94c, 0x2071, 0x0000,
-	0x7182, 0xa850, 0x7032, 0xa86c, 0x7086, 0x7036, 0xa870, 0x708a,
-	0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11be,
-	0x2071, 0x1906, 0x080c, 0x6c95, 0x012e, 0x0470, 0x2001, 0x005b,
-	0x2004, 0x9094, 0x0780, 0x190c, 0x6ca9, 0xd09c, 0x2071, 0x1906,
-	0x1510, 0x2071, 0x1906, 0x700f, 0x0001, 0xa964, 0x9184, 0x00ff,
-	0x9086, 0x0003, 0x1130, 0x810f, 0x918c, 0x00ff, 0x8101, 0x0108,
-	0x710e, 0x2900, 0x00d6, 0x2069, 0x0050, 0x6822, 0x00de, 0x2071,
-	0x1906, 0x701c, 0x2048, 0x7010, 0x8001, 0x7012, 0xa800, 0x701e,
-	0x9005, 0x1108, 0x701a, 0x012e, 0x0005, 0x0005, 0x00d6, 0x2008,
-	0x2069, 0x19d4, 0x683c, 0x9005, 0x0760, 0x0158, 0x9186, 0x0003,
-	0x0540, 0x2001, 0x1814, 0x2004, 0x2009, 0x1b1e, 0x210c, 0x9102,
-	0x1500, 0x0126, 0x2091, 0x8000, 0x2069, 0x0050, 0x693c, 0x6838,
-	0x9106, 0x0190, 0x0e04, 0x6c60, 0x2069, 0x0000, 0x6837, 0x8040,
-	0x6833, 0x0012, 0x6883, 0x8040, 0x2091, 0x4080, 0x2001, 0x0089,
-	0x2004, 0xd084, 0x190c, 0x11be, 0x2069, 0x19d4, 0x683f, 0xffff,
-	0x012e, 0x00de, 0x0126, 0x2091, 0x8000, 0x1e0c, 0x6d2a, 0x701c,
-	0x904d, 0x0540, 0x2001, 0x005b, 0x2004, 0x9094, 0x0780, 0x15c9,
-	0xd09c, 0x1500, 0x2071, 0x1906, 0x700f, 0x0001, 0xa964, 0x9184,
-	0x00ff, 0x9086, 0x0003, 0x1130, 0x810f, 0x918c, 0x00ff, 0x8101,
-	0x0108, 0x710e, 0x2900, 0x00d6, 0x2069, 0x0050, 0x6822, 0x00de,
+	0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x8074,
+	0x002e, 0x00ee, 0x0005, 0x0006, 0xa87c, 0x0006, 0xa867, 0x0103,
+	0x20a9, 0x001c, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001d, 0x20a0,
+	0x9006, 0x4004, 0x000e, 0x9084, 0x00ff, 0xa87e, 0x000e, 0xa87a,
+	0xa982, 0x0005, 0x2071, 0x1906, 0x7004, 0x0002, 0x6bd4, 0x6bd5,
+	0x6c9b, 0x6bd5, 0x0d65, 0x6c9b, 0x0005, 0x2001, 0x191a, 0x2004,
+	0x0002, 0x6bdf, 0x6bdf, 0x6c34, 0x6c35, 0x6bdf, 0x6c35, 0x0126,
+	0x2091, 0x8000, 0x1e0c, 0x6cbb, 0x701c, 0x904d, 0x01e0, 0xa84c,
+	0x9005, 0x01d8, 0x0e04, 0x6c03, 0xa94c, 0x2071, 0x0000, 0x7182,
+	0xa850, 0x7032, 0xa86c, 0x7086, 0x7036, 0xa870, 0x708a, 0x2091,
+	0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11be, 0x2071,
+	0x1906, 0x080c, 0x6c9c, 0x012e, 0x0470, 0x2001, 0x005b, 0x2004,
+	0x9094, 0x0780, 0x190c, 0x6cb0, 0xd09c, 0x2071, 0x1906, 0x1510,
+	0x2071, 0x1906, 0x700f, 0x0001, 0xa964, 0x9184, 0x00ff, 0x9086,
+	0x0003, 0x1130, 0x810f, 0x918c, 0x00ff, 0x8101, 0x0108, 0x710e,
+	0x2900, 0x00d6, 0x2069, 0x0050, 0x6822, 0x00de, 0x2071, 0x1906,
 	0x701c, 0x2048, 0x7010, 0x8001, 0x7012, 0xa800, 0x701e, 0x9005,
-	0x1108, 0x701a, 0x012e, 0x0005, 0x0005, 0x0126, 0x2091, 0x8000,
-	0x701c, 0x904d, 0x0160, 0x7010, 0x8001, 0x7012, 0xa800, 0x701e,
-	0x9005, 0x1108, 0x701a, 0x012e, 0x080c, 0x1054, 0x0005, 0x012e,
-	0x0005, 0x2091, 0x8000, 0x0e04, 0x6cab, 0x0006, 0x0016, 0x2001,
-	0x8004, 0x0006, 0x0804, 0x0d6e, 0x0096, 0x00f6, 0x2079, 0x0050,
-	0x7044, 0xd084, 0x01e0, 0xc084, 0x7046, 0x7838, 0x7938, 0x910e,
-	0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de,
-	0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11be,
-	0x2009, 0x1919, 0x200b, 0x0000, 0x00fe, 0x009e, 0x0005, 0x782c,
-	0x9094, 0x0780, 0x1971, 0xd0a4, 0x0db8, 0x2009, 0x1919, 0x2104,
-	0x8000, 0x200a, 0x9082, 0x000f, 0x0e78, 0x00e6, 0x2071, 0x1800,
-	0x7824, 0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c, 0x1170, 0x2009,
-	0x182f, 0x210c, 0x918a, 0x0040, 0x0240, 0x7022, 0x2001, 0x1dc0,
-	0x200c, 0x8108, 0x2102, 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c,
-	0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x804c,
-	0x782c, 0x9094, 0x0780, 0x190c, 0x6ca9, 0xd0a4, 0x19c8, 0x7838,
-	0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833,
-	0x0013, 0x00de, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,
-	0x190c, 0x11be, 0x2009, 0x1919, 0x200b, 0x0000, 0x00ee, 0x00fe,
-	0x009e, 0x0005, 0x00f6, 0x2079, 0x0050, 0x7044, 0xd084, 0x01b8,
-	0xc084, 0x7046, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069,
-	0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x2091, 0x4080, 0x2001,
-	0x0089, 0x2004, 0xd084, 0x190c, 0x11be, 0x00fe, 0x0005, 0x782c,
-	0x9094, 0x0780, 0x190c, 0x6ca9, 0xd0a4, 0x0db8, 0x00e6, 0x2071,
-	0x1800, 0x7824, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc,
-	0x8000, 0x70be, 0x080c, 0x804c, 0x782c, 0x9094, 0x0780, 0x190c,
-	0x6ca9, 0xd0a4, 0x1d70, 0x00d6, 0x2069, 0x0050, 0x693c, 0x2069,
-	0x191a, 0x6808, 0x690a, 0x2069, 0x19d4, 0x9102, 0x1118, 0x683c,
-	0x9005, 0x1328, 0x2001, 0x191b, 0x200c, 0x810d, 0x693e, 0x00de,
-	0x00ee, 0x00fe, 0x0005, 0x7094, 0x908a, 0x0029, 0x1a0c, 0x0d65,
-	0x9082, 0x001d, 0x003b, 0x0026, 0x2011, 0x1e00, 0x080c, 0x286d,
-	0x002e, 0x0005, 0x6e52, 0x6ddc, 0x6df8, 0x6e20, 0x6e41, 0x6e81,
-	0x6e93, 0x6df8, 0x6e69, 0x6d97, 0x6dc5, 0x6d96, 0x0005, 0x00d6,
-	0x2069, 0x0200, 0x6804, 0x9005, 0x1180, 0x6808, 0x9005, 0x1518,
-	0x7097, 0x0028, 0x2069, 0x1960, 0x2d04, 0x7002, 0x080c, 0x71ed,
-	0x6028, 0x9085, 0x0600, 0x602a, 0x00b0, 0x7097, 0x0028, 0x2069,
-	0x1960, 0x2d04, 0x7002, 0x6028, 0x9085, 0x0600, 0x602a, 0x00e6,
-	0x0036, 0x0046, 0x0056, 0x2071, 0x1a3c, 0x080c, 0x195f, 0x005e,
-	0x004e, 0x003e, 0x00ee, 0x00de, 0x0005, 0x00d6, 0x2069, 0x0200,
-	0x6804, 0x9005, 0x1178, 0x6808, 0x9005, 0x1160, 0x7097, 0x0028,
-	0x2069, 0x1960, 0x2d04, 0x7002, 0x080c, 0x728f, 0x6028, 0x9085,
-	0x0600, 0x602a, 0x00de, 0x0005, 0x0006, 0x2001, 0x0090, 0x080c,
-	0x2833, 0x000e, 0x6124, 0xd1e4, 0x1190, 0x080c, 0x6f04, 0xd1d4,
-	0x1160, 0xd1dc, 0x1138, 0xd1cc, 0x0150, 0x7097, 0x0020, 0x080c,
-	0x6f04, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097, 0x001f, 0x0005,
-	0x2001, 0x0088, 0x080c, 0x2833, 0x6124, 0xd1cc, 0x11d8, 0xd1dc,
-	0x11b0, 0xd1e4, 0x1188, 0x9184, 0x1e00, 0x11c8, 0x60e3, 0x0001,
-	0x600c, 0xc0b4, 0x600e, 0x080c, 0x70d8, 0x2001, 0x0080, 0x080c,
-	0x2833, 0x7097, 0x0028, 0x0058, 0x7097, 0x001e, 0x0040, 0x7097,
-	0x001d, 0x0028, 0x7097, 0x0020, 0x0010, 0x7097, 0x001f, 0x0005,
-	0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c, 0x70d8, 0x2001,
-	0x0080, 0x080c, 0x2833, 0x6124, 0xd1d4, 0x1180, 0xd1dc, 0x1158,
-	0xd1e4, 0x1130, 0x9184, 0x1e00, 0x1158, 0x7097, 0x0028, 0x0040,
-	0x7097, 0x001e, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097, 0x001f,
-	0x0005, 0x2001, 0x00a0, 0x080c, 0x2833, 0x6124, 0xd1dc, 0x1138,
-	0xd1e4, 0x0138, 0x080c, 0x1989, 0x7097, 0x001e, 0x0010, 0x7097,
-	0x001d, 0x0005, 0x080c, 0x6f8d, 0x6124, 0xd1dc, 0x1188, 0x080c,
-	0x6f04, 0x0016, 0x080c, 0x1989, 0x001e, 0xd1d4, 0x1128, 0xd1e4,
-	0x0138, 0x7097, 0x001e, 0x0020, 0x7097, 0x001f, 0x080c, 0x6f04,
-	0x0005, 0x0006, 0x2001, 0x00a0, 0x080c, 0x2833, 0x000e, 0x6124,
-	0xd1d4, 0x1160, 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140,
-	0x7097, 0x001e, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097, 0x0021,
-	0x0005, 0x080c, 0x6f8d, 0x6124, 0xd1d4, 0x1150, 0xd1dc, 0x1128,
-	0xd1e4, 0x0140, 0x7097, 0x001e, 0x0028, 0x7097, 0x001d, 0x0010,
-	0x7097, 0x001f, 0x0005, 0x0006, 0x2001, 0x0090, 0x080c, 0x2833,
-	0x000e, 0x6124, 0xd1d4, 0x1178, 0xd1cc, 0x1150, 0xd1dc, 0x1128,
-	0xd1e4, 0x0158, 0x7097, 0x001e, 0x0040, 0x7097, 0x001d, 0x0028,
-	0x7097, 0x0020, 0x0010, 0x7097, 0x001f, 0x0005, 0x0016, 0x00c6,
-	0x00d6, 0x00e6, 0x0126, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071,
-	0x1800, 0x2091, 0x8000, 0x080c, 0x70ac, 0x11f8, 0x2001, 0x180c,
-	0x200c, 0xd1b4, 0x01d0, 0xc1b4, 0x2102, 0x0026, 0x2011, 0x0200,
-	0x080c, 0x286d, 0x002e, 0x080c, 0x2819, 0x6024, 0xd0cc, 0x0148,
-	0x2001, 0x00a0, 0x080c, 0x2833, 0x080c, 0x73ac, 0x080c, 0x5cd5,
-	0x0428, 0x6028, 0xc0cd, 0x602a, 0x0408, 0x080c, 0x70c6, 0x0150,
-	0x080c, 0x70bd, 0x1138, 0x2001, 0x0001, 0x080c, 0x23c9, 0x080c,
-	0x7080, 0x00a0, 0x080c, 0x6f8a, 0x0178, 0x2001, 0x0001, 0x080c,
-	0x23c9, 0x7094, 0x9086, 0x001e, 0x0120, 0x7094, 0x9086, 0x0022,
-	0x1118, 0x7097, 0x0025, 0x0010, 0x7097, 0x0021, 0x012e, 0x00ee,
-	0x00de, 0x00ce, 0x001e, 0x0005, 0x0026, 0x2011, 0x6f15, 0x080c,
-	0x8237, 0x002e, 0x0016, 0x0026, 0x2009, 0x0064, 0x2011, 0x6f15,
-	0x080c, 0x822e, 0x002e, 0x001e, 0x0005, 0x00e6, 0x00f6, 0x0016,
-	0x080c, 0x8f9c, 0x2071, 0x1800, 0x080c, 0x6eae, 0x001e, 0x00fe,
-	0x00ee, 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6,
-	0x00f6, 0x0126, 0x080c, 0x8f9c, 0x2061, 0x0100, 0x2069, 0x0140,
-	0x2071, 0x1800, 0x2091, 0x8000, 0x6028, 0xc09c, 0x602a, 0x080c,
-	0x98ad, 0x2011, 0x0003, 0x080c, 0x931e, 0x2011, 0x0002, 0x080c,
-	0x9328, 0x080c, 0x91eb, 0x080c, 0x81e3, 0x0036, 0x901e, 0x080c,
-	0x926b, 0x003e, 0x080c, 0x98c9, 0x60e3, 0x0000, 0x080c, 0xd5d9,
-	0x080c, 0xd5f4, 0x2009, 0x0004, 0x080c, 0x281f, 0x080c, 0x273f,
-	0x2001, 0x1800, 0x2003, 0x0004, 0x2011, 0x0008, 0x080c, 0x286d,
-	0x2011, 0x6f15, 0x080c, 0x8237, 0x080c, 0x70c6, 0x0118, 0x9006,
-	0x080c, 0x2833, 0x080c, 0x0bab, 0x2001, 0x0001, 0x080c, 0x23c9,
-	0x012e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e,
-	0x0005, 0x0026, 0x00e6, 0x2011, 0x6f22, 0x2071, 0x19d4, 0x701c,
-	0x9206, 0x1118, 0x7018, 0x9005, 0x0110, 0x9085, 0x0001, 0x00ee,
-	0x002e, 0x0005, 0x6020, 0xd09c, 0x0005, 0x6800, 0x9084, 0xfffe,
-	0x9086, 0x00c0, 0x01b8, 0x2001, 0x00c0, 0x080c, 0x2833, 0x0156,
-	0x20a9, 0x002d, 0x1d04, 0x6f9a, 0x2091, 0x6000, 0x1f04, 0x6f9a,
-	0x015e, 0x00d6, 0x2069, 0x1800, 0x6898, 0x8001, 0x0220, 0x0118,
-	0x689a, 0x00de, 0x0005, 0x689b, 0x0014, 0x68e8, 0xd0dc, 0x0dc8,
-	0x6800, 0x9086, 0x0001, 0x1da8, 0x080c, 0x8243, 0x0c90, 0x00c6,
-	0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800,
-	0x080c, 0x73bb, 0x2001, 0x193e, 0x2003, 0x0000, 0x9006, 0x7096,
-	0x60e2, 0x6886, 0x080c, 0x2498, 0x9006, 0x080c, 0x2833, 0x080c,
-	0x5b90, 0x0026, 0x2011, 0xffff, 0x080c, 0x286d, 0x002e, 0x602b,
-	0x182c, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6,
-	0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x2001, 0x194e,
-	0x200c, 0x9186, 0x0000, 0x0158, 0x9186, 0x0001, 0x0158, 0x9186,
-	0x0002, 0x0158, 0x9186, 0x0003, 0x0158, 0x0804, 0x7070, 0x7097,
-	0x0022, 0x0040, 0x7097, 0x0021, 0x0028, 0x7097, 0x0023, 0x0010,
-	0x7097, 0x0024, 0x60e3, 0x0000, 0x6887, 0x0001, 0x2001, 0x0001,
-	0x080c, 0x2498, 0x080c, 0x98ad, 0x0026, 0x080c, 0x9b52, 0x002e,
-	0x080c, 0x98c9, 0x7000, 0x908e, 0x0004, 0x0118, 0x602b, 0x0028,
-	0x0010, 0x602b, 0x0020, 0x0156, 0x0126, 0x2091, 0x8000, 0x20a9,
-	0x0005, 0x6024, 0xd0ac, 0x0150, 0x012e, 0x015e, 0x080c, 0xbf46,
-	0x0118, 0x9006, 0x080c, 0x285d, 0x0804, 0x707c, 0x6800, 0x9084,
-	0x00a1, 0xc0bd, 0x6802, 0x080c, 0x2819, 0x6904, 0xd1d4, 0x1140,
-	0x2001, 0x0100, 0x080c, 0x2833, 0x1f04, 0x7021, 0x080c, 0x7103,
-	0x012e, 0x015e, 0x080c, 0x70bd, 0x0170, 0x6044, 0x9005, 0x0130,
-	0x080c, 0x7103, 0x9006, 0x8001, 0x1df0, 0x0028, 0x6804, 0xd0d4,
-	0x1110, 0x080c, 0x7103, 0x080c, 0xbf46, 0x0118, 0x9006, 0x080c,
-	0x285d, 0x0016, 0x0026, 0x7000, 0x908e, 0x0004, 0x0130, 0x2009,
-	0x00c8, 0x2011, 0x6f22, 0x080c, 0x81f5, 0x002e, 0x001e, 0x080c,
-	0x8043, 0x7034, 0xc085, 0x7036, 0x2001, 0x194e, 0x2003, 0x0004,
-	0x080c, 0x6d7b, 0x080c, 0x70bd, 0x0138, 0x6804, 0xd0d4, 0x1120,
-	0xd0dc, 0x1100, 0x080c, 0x73b1, 0x00ee, 0x00de, 0x00ce, 0x0005,
+	0x1108, 0x701a, 0x012e, 0x0005, 0x0005, 0x00d6, 0x2008, 0x2069,
+	0x19d4, 0x683c, 0x9005, 0x0760, 0x0158, 0x9186, 0x0003, 0x0540,
+	0x2001, 0x1814, 0x2004, 0x2009, 0x1b1e, 0x210c, 0x9102, 0x1500,
+	0x0126, 0x2091, 0x8000, 0x2069, 0x0050, 0x693c, 0x6838, 0x9106,
+	0x0190, 0x0e04, 0x6c67, 0x2069, 0x0000, 0x6837, 0x8040, 0x6833,
+	0x0012, 0x6883, 0x8040, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
+	0xd084, 0x190c, 0x11be, 0x2069, 0x19d4, 0x683f, 0xffff, 0x012e,
+	0x00de, 0x0126, 0x2091, 0x8000, 0x1e0c, 0x6d31, 0x701c, 0x904d,
+	0x0540, 0x2001, 0x005b, 0x2004, 0x9094, 0x0780, 0x15c9, 0xd09c,
+	0x1500, 0x2071, 0x1906, 0x700f, 0x0001, 0xa964, 0x9184, 0x00ff,
+	0x9086, 0x0003, 0x1130, 0x810f, 0x918c, 0x00ff, 0x8101, 0x0108,
+	0x710e, 0x2900, 0x00d6, 0x2069, 0x0050, 0x6822, 0x00de, 0x701c,
+	0x2048, 0x7010, 0x8001, 0x7012, 0xa800, 0x701e, 0x9005, 0x1108,
+	0x701a, 0x012e, 0x0005, 0x0005, 0x0126, 0x2091, 0x8000, 0x701c,
+	0x904d, 0x0160, 0x7010, 0x8001, 0x7012, 0xa800, 0x701e, 0x9005,
+	0x1108, 0x701a, 0x012e, 0x080c, 0x1054, 0x0005, 0x012e, 0x0005,
+	0x2091, 0x8000, 0x0e04, 0x6cb2, 0x0006, 0x0016, 0x2001, 0x8004,
+	0x0006, 0x0804, 0x0d6e, 0x0096, 0x00f6, 0x2079, 0x0050, 0x7044,
+	0xd084, 0x01e0, 0xc084, 0x7046, 0x7838, 0x7938, 0x910e, 0x1de0,
+	0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x2091,
+	0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11be, 0x2009,
+	0x1919, 0x200b, 0x0000, 0x00fe, 0x009e, 0x0005, 0x782c, 0x9094,
+	0x0780, 0x1971, 0xd0a4, 0x0db8, 0x2009, 0x1919, 0x2104, 0x8000,
+	0x200a, 0x9082, 0x000f, 0x0e78, 0x00e6, 0x2071, 0x1800, 0x7824,
+	0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c, 0x1170, 0x2009, 0x182f,
+	0x210c, 0x918a, 0x0040, 0x0240, 0x7022, 0x2001, 0x1dc0, 0x200c,
+	0x8108, 0x2102, 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c, 0xa802,
+	0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x8074, 0x782c,
+	0x9094, 0x0780, 0x190c, 0x6cb0, 0xd0a4, 0x19c8, 0x7838, 0x7938,
+	0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013,
+	0x00de, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
+	0x11be, 0x2009, 0x1919, 0x200b, 0x0000, 0x00ee, 0x00fe, 0x009e,
+	0x0005, 0x00f6, 0x2079, 0x0050, 0x7044, 0xd084, 0x01b8, 0xc084,
+	0x7046, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000,
+	0x6836, 0x6833, 0x0013, 0x00de, 0x2091, 0x4080, 0x2001, 0x0089,
+	0x2004, 0xd084, 0x190c, 0x11be, 0x00fe, 0x0005, 0x782c, 0x9094,
+	0x0780, 0x190c, 0x6cb0, 0xd0a4, 0x0db8, 0x00e6, 0x2071, 0x1800,
+	0x7824, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000,
+	0x70be, 0x080c, 0x8074, 0x782c, 0x9094, 0x0780, 0x190c, 0x6cb0,
+	0xd0a4, 0x1d70, 0x00d6, 0x2069, 0x0050, 0x693c, 0x2069, 0x191a,
+	0x6808, 0x690a, 0x2069, 0x19d4, 0x9102, 0x1118, 0x683c, 0x9005,
+	0x1328, 0x2001, 0x191b, 0x200c, 0x810d, 0x693e, 0x00de, 0x00ee,
+	0x00fe, 0x0005, 0x7094, 0x908a, 0x0029, 0x1a0c, 0x0d65, 0x9082,
+	0x001d, 0x003b, 0x0026, 0x2011, 0x1e00, 0x080c, 0x286d, 0x002e,
+	0x0005, 0x6e5d, 0x6de3, 0x6dff, 0x6e29, 0x6e4c, 0x6e8c, 0x6e9e,
+	0x6dff, 0x6e74, 0x6d9e, 0x6dcc, 0x6d9d, 0x0005, 0x00d6, 0x2069,
+	0x0200, 0x6804, 0x9005, 0x1180, 0x6808, 0x9005, 0x1518, 0x7097,
+	0x0028, 0x2069, 0x1960, 0x2d04, 0x7002, 0x080c, 0x71f8, 0x6028,
+	0x9085, 0x0600, 0x602a, 0x00b0, 0x7097, 0x0028, 0x2069, 0x1960,
+	0x2d04, 0x7002, 0x6028, 0x9085, 0x0600, 0x602a, 0x00e6, 0x0036,
+	0x0046, 0x0056, 0x2071, 0x1a3c, 0x080c, 0x195f, 0x005e, 0x004e,
+	0x003e, 0x00ee, 0x00de, 0x0005, 0x00d6, 0x2069, 0x0200, 0x6804,
+	0x9005, 0x1178, 0x6808, 0x9005, 0x1160, 0x7097, 0x0028, 0x2069,
+	0x1960, 0x2d04, 0x7002, 0x080c, 0x729a, 0x6028, 0x9085, 0x0600,
+	0x602a, 0x00de, 0x0005, 0x0006, 0x2001, 0x0090, 0x080c, 0x2833,
+	0x000e, 0x6124, 0xd1e4, 0x1190, 0x080c, 0x6f0f, 0xd1d4, 0x1160,
+	0xd1dc, 0x1138, 0xd1cc, 0x0150, 0x7097, 0x0020, 0x080c, 0x6f0f,
+	0x0028, 0x7097, 0x001d, 0x0010, 0x7097, 0x001f, 0x0005, 0x2001,
+	0x0088, 0x080c, 0x2833, 0x6124, 0xd1cc, 0x11e8, 0xd1dc, 0x11c0,
+	0xd1e4, 0x1198, 0x9184, 0x1e00, 0x11d8, 0x080c, 0x1989, 0x60e3,
+	0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c, 0x70e3, 0x2001, 0x0080,
+	0x080c, 0x2833, 0x7097, 0x0028, 0x0058, 0x7097, 0x001e, 0x0040,
+	0x7097, 0x001d, 0x0028, 0x7097, 0x0020, 0x0010, 0x7097, 0x001f,
+	0x0005, 0x080c, 0x1989, 0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e,
+	0x080c, 0x70e3, 0x2001, 0x0080, 0x080c, 0x2833, 0x6124, 0xd1d4,
+	0x1180, 0xd1dc, 0x1158, 0xd1e4, 0x1130, 0x9184, 0x1e00, 0x1158,
+	0x7097, 0x0028, 0x0040, 0x7097, 0x001e, 0x0028, 0x7097, 0x001d,
+	0x0010, 0x7097, 0x001f, 0x0005, 0x2001, 0x00a0, 0x080c, 0x2833,
+	0x6124, 0xd1dc, 0x1138, 0xd1e4, 0x0138, 0x080c, 0x1989, 0x7097,
+	0x001e, 0x0010, 0x7097, 0x001d, 0x0005, 0x080c, 0x6f98, 0x6124,
+	0xd1dc, 0x1188, 0x080c, 0x6f0f, 0x0016, 0x080c, 0x1989, 0x001e,
+	0xd1d4, 0x1128, 0xd1e4, 0x0138, 0x7097, 0x001e, 0x0020, 0x7097,
+	0x001f, 0x080c, 0x6f0f, 0x0005, 0x0006, 0x2001, 0x00a0, 0x080c,
+	0x2833, 0x000e, 0x6124, 0xd1d4, 0x1160, 0xd1cc, 0x1150, 0xd1dc,
+	0x1128, 0xd1e4, 0x0140, 0x7097, 0x001e, 0x0028, 0x7097, 0x001d,
+	0x0010, 0x7097, 0x0021, 0x0005, 0x080c, 0x6f98, 0x6124, 0xd1d4,
+	0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140, 0x7097, 0x001e, 0x0028,
+	0x7097, 0x001d, 0x0010, 0x7097, 0x001f, 0x0005, 0x0006, 0x2001,
+	0x0090, 0x080c, 0x2833, 0x000e, 0x6124, 0xd1d4, 0x1178, 0xd1cc,
+	0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0158, 0x7097, 0x001e, 0x0040,
+	0x7097, 0x001d, 0x0028, 0x7097, 0x0020, 0x0010, 0x7097, 0x001f,
+	0x0005, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x0126, 0x2061, 0x0100,
+	0x2069, 0x0140, 0x2071, 0x1800, 0x2091, 0x8000, 0x080c, 0x70b7,
+	0x11f8, 0x2001, 0x180c, 0x200c, 0xd1b4, 0x01d0, 0xc1b4, 0x2102,
+	0x0026, 0x2011, 0x0200, 0x080c, 0x286d, 0x002e, 0x080c, 0x2819,
+	0x6024, 0xd0cc, 0x0148, 0x2001, 0x00a0, 0x080c, 0x2833, 0x080c,
+	0x73b7, 0x080c, 0x5cdc, 0x0428, 0x6028, 0xc0cd, 0x602a, 0x0408,
+	0x080c, 0x70d1, 0x0150, 0x080c, 0x70c8, 0x1138, 0x2001, 0x0001,
+	0x080c, 0x23c9, 0x080c, 0x708b, 0x00a0, 0x080c, 0x6f95, 0x0178,
+	0x2001, 0x0001, 0x080c, 0x23c9, 0x7094, 0x9086, 0x001e, 0x0120,
+	0x7094, 0x9086, 0x0022, 0x1118, 0x7097, 0x0025, 0x0010, 0x7097,
+	0x0021, 0x012e, 0x00ee, 0x00de, 0x00ce, 0x001e, 0x0005, 0x0026,
+	0x2011, 0x6f20, 0x080c, 0x825f, 0x002e, 0x0016, 0x0026, 0x2009,
+	0x0064, 0x2011, 0x6f20, 0x080c, 0x8256, 0x002e, 0x001e, 0x0005,
+	0x00e6, 0x00f6, 0x0016, 0x080c, 0x8fb7, 0x2071, 0x1800, 0x080c,
+	0x6eb9, 0x001e, 0x00fe, 0x00ee, 0x0005, 0x0016, 0x0026, 0x0036,
+	0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0126, 0x080c, 0x8fb7, 0x2061,
+	0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x2091, 0x8000, 0x6028,
+	0xc09c, 0x602a, 0x080c, 0x98c8, 0x2011, 0x0003, 0x080c, 0x9339,
+	0x2011, 0x0002, 0x080c, 0x9343, 0x080c, 0x9206, 0x080c, 0x820b,
+	0x0036, 0x901e, 0x080c, 0x9286, 0x003e, 0x080c, 0x98e4, 0x60e3,
+	0x0000, 0x080c, 0xd5fb, 0x080c, 0xd616, 0x2009, 0x0004, 0x080c,
+	0x281f, 0x080c, 0x273f, 0x2001, 0x1800, 0x2003, 0x0004, 0x2011,
+	0x0008, 0x080c, 0x286d, 0x2011, 0x6f20, 0x080c, 0x825f, 0x080c,
+	0x70d1, 0x0118, 0x9006, 0x080c, 0x2833, 0x080c, 0x0bab, 0x2001,
+	0x0001, 0x080c, 0x23c9, 0x012e, 0x00fe, 0x00ee, 0x00de, 0x00ce,
+	0x003e, 0x002e, 0x001e, 0x0005, 0x0026, 0x00e6, 0x2011, 0x6f2d,
+	0x2071, 0x19d4, 0x701c, 0x9206, 0x1118, 0x7018, 0x9005, 0x0110,
+	0x9085, 0x0001, 0x00ee, 0x002e, 0x0005, 0x6020, 0xd09c, 0x0005,
+	0x6800, 0x9084, 0xfffe, 0x9086, 0x00c0, 0x01b8, 0x2001, 0x00c0,
+	0x080c, 0x2833, 0x0156, 0x20a9, 0x002d, 0x1d04, 0x6fa5, 0x2091,
+	0x6000, 0x1f04, 0x6fa5, 0x015e, 0x00d6, 0x2069, 0x1800, 0x6898,
+	0x8001, 0x0220, 0x0118, 0x689a, 0x00de, 0x0005, 0x689b, 0x0014,
+	0x68e8, 0xd0dc, 0x0dc8, 0x6800, 0x9086, 0x0001, 0x1da8, 0x080c,
+	0x826b, 0x0c90, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069,
+	0x0140, 0x2071, 0x1800, 0x080c, 0x73c6, 0x2001, 0x193e, 0x2003,
+	0x0000, 0x9006, 0x7096, 0x60e2, 0x6886, 0x080c, 0x2498, 0x9006,
+	0x080c, 0x2833, 0x080c, 0x5b97, 0x0026, 0x2011, 0xffff, 0x080c,
+	0x286d, 0x002e, 0x602b, 0x182c, 0x00ee, 0x00de, 0x00ce, 0x0005,
 	0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071,
-	0x1800, 0x080c, 0x805a, 0x080c, 0x804c, 0x080c, 0x73bb, 0x2001,
-	0x193e, 0x2003, 0x0000, 0x9006, 0x7096, 0x60e2, 0x6886, 0x080c,
-	0x2498, 0x9006, 0x080c, 0x2833, 0x6043, 0x0090, 0x6043, 0x0010,
-	0x0026, 0x2011, 0xffff, 0x080c, 0x286d, 0x002e, 0x602b, 0x182c,
-	0x00ee, 0x00de, 0x00ce, 0x0005, 0x0006, 0x2001, 0x194d, 0x2004,
-	0x9086, 0xaaaa, 0x000e, 0x0005, 0x0006, 0x080c, 0x538a, 0x9084,
-	0x0030, 0x9086, 0x0000, 0x000e, 0x0005, 0x0006, 0x080c, 0x538a,
-	0x9084, 0x0030, 0x9086, 0x0030, 0x000e, 0x0005, 0x0006, 0x080c,
-	0x538a, 0x9084, 0x0030, 0x9086, 0x0010, 0x000e, 0x0005, 0x0006,
-	0x080c, 0x538a, 0x9084, 0x0030, 0x9086, 0x0020, 0x000e, 0x0005,
-	0x0036, 0x0016, 0x2001, 0x180c, 0x2004, 0x908c, 0x0013, 0x0180,
-	0x0020, 0x080c, 0x24b8, 0x900e, 0x0028, 0x080c, 0x6658, 0x1dc8,
-	0x2009, 0x0002, 0x2019, 0x0028, 0x080c, 0x2fc2, 0x9006, 0x0019,
-	0x001e, 0x003e, 0x0005, 0x00e6, 0x2071, 0x180c, 0x2e04, 0x0130,
-	0x080c, 0xbf3f, 0x1128, 0x9085, 0x0010, 0x0010, 0x9084, 0xffef,
-	0x2072, 0x00ee, 0x0005, 0x6050, 0x0006, 0x60ec, 0x0006, 0x600c,
-	0x0006, 0x6004, 0x0006, 0x6028, 0x0006, 0x602f, 0x0100, 0x602f,
-	0x0000, 0x602f, 0x0040, 0x602f, 0x0000, 0x20a9, 0x0002, 0x080c,
-	0x27fa, 0x0026, 0x2011, 0x0040, 0x080c, 0x286d, 0x002e, 0x000e,
-	0x602a, 0x000e, 0x6006, 0x000e, 0x600e, 0x000e, 0x60ee, 0x60e3,
-	0x0000, 0x6887, 0x0001, 0x2001, 0x0001, 0x080c, 0x2498, 0x2001,
-	0x00a0, 0x0006, 0x080c, 0xbf46, 0x000e, 0x0130, 0x080c, 0x2851,
-	0x9006, 0x080c, 0x285d, 0x0010, 0x080c, 0x2833, 0x000e, 0x6052,
-	0x6050, 0x0006, 0xc0e5, 0x6052, 0x00f6, 0x2079, 0x0100, 0x080c,
-	0x27aa, 0x00fe, 0x000e, 0x6052, 0x0005, 0x0156, 0x0016, 0x0026,
-	0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140,
-	0x2071, 0x1800, 0x080c, 0x990b, 0x0158, 0x2001, 0x0386, 0x2004,
-	0xd0b4, 0x1130, 0x2001, 0x0016, 0x080c, 0x989e, 0x0804, 0x71df,
-	0x2001, 0x180c, 0x200c, 0xc1c4, 0x2102, 0x6028, 0x9084, 0xe1ff,
-	0x602a, 0x2011, 0x0200, 0x080c, 0x286d, 0x2001, 0x0090, 0x080c,
-	0x2833, 0x20a9, 0x0366, 0x6024, 0xd0cc, 0x1558, 0x1d04, 0x717b,
-	0x2091, 0x6000, 0x1f04, 0x717b, 0x080c, 0x98ad, 0x2011, 0x0003,
-	0x080c, 0x931e, 0x2011, 0x0002, 0x080c, 0x9328, 0x080c, 0x91eb,
-	0x901e, 0x080c, 0x926b, 0x2001, 0x0386, 0x2003, 0x7000, 0x080c,
-	0x98c9, 0x2001, 0x00a0, 0x080c, 0x2833, 0x080c, 0x73ac, 0x080c,
-	0x5cd5, 0x080c, 0xbf46, 0x0110, 0x080c, 0x0cd1, 0x9085, 0x0001,
-	0x04e0, 0x2001, 0x0386, 0x2004, 0xd0ac, 0x0110, 0x080c, 0x1989,
-	0x60e3, 0x0000, 0x2001, 0x0002, 0x080c, 0x2498, 0x60e2, 0x2001,
-	0x0080, 0x080c, 0x2833, 0x20a9, 0x0366, 0x2011, 0x1e00, 0x080c,
-	0x286d, 0x2009, 0x1e00, 0x080c, 0x2819, 0x6024, 0x910c, 0x0140,
-	0x1d04, 0x71bd, 0x2091, 0x6000, 0x1f04, 0x71bd, 0x0804, 0x7184,
-	0x2001, 0x0386, 0x2003, 0x7000, 0x6028, 0x9085, 0x1e00, 0x602a,
-	0x70b0, 0x9005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x080c,
-	0xbf46, 0x0110, 0x080c, 0x0cd1, 0x9006, 0x00ee, 0x00de, 0x00ce,
-	0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026,
-	0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800,
-	0x7000, 0x9086, 0x0003, 0x1168, 0x2001, 0x020b, 0x2004, 0x9084,
-	0x5540, 0x9086, 0x5540, 0x1128, 0x2069, 0x1a47, 0x2d04, 0x8000,
-	0x206a, 0x2069, 0x0140, 0x6020, 0x9084, 0x00c0, 0x0120, 0x6884,
-	0x9005, 0x1904, 0x7256, 0x2001, 0x0088, 0x080c, 0x2833, 0x9006,
-	0x60e2, 0x6886, 0x080c, 0x2498, 0x2069, 0x0200, 0x6804, 0x9005,
-	0x1118, 0x6808, 0x9005, 0x01d0, 0x6028, 0x9084, 0xfbff, 0x602a,
-	0x2011, 0x0400, 0x080c, 0x286d, 0x2069, 0x1960, 0x7000, 0x206a,
-	0x7097, 0x0026, 0x7003, 0x0001, 0x20a9, 0x0002, 0x1d04, 0x7236,
-	0x2091, 0x6000, 0x1f04, 0x7236, 0x0804, 0x7287, 0x2069, 0x0140,
-	0x20a9, 0x0384, 0x2011, 0x1e00, 0x080c, 0x286d, 0x2009, 0x1e00,
-	0x080c, 0x2819, 0x6024, 0x910c, 0x0528, 0x9084, 0x1a00, 0x1510,
-	0x1d04, 0x7242, 0x2091, 0x6000, 0x1f04, 0x7242, 0x080c, 0x98ad,
-	0x2011, 0x0003, 0x080c, 0x931e, 0x2011, 0x0002, 0x080c, 0x9328,
-	0x080c, 0x91eb, 0x901e, 0x080c, 0x926b, 0x080c, 0x98c9, 0x2001,
-	0x00a0, 0x080c, 0x2833, 0x080c, 0x73ac, 0x080c, 0x5cd5, 0x9085,
-	0x0001, 0x00a8, 0x2001, 0x0080, 0x080c, 0x2833, 0x2069, 0x0140,
-	0x60e3, 0x0000, 0x70b0, 0x9005, 0x1118, 0x6887, 0x0001, 0x0008,
-	0x6886, 0x2001, 0x0002, 0x080c, 0x2498, 0x60e2, 0x9006, 0x00ee,
-	0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x0156,
-	0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100,
-	0x2071, 0x1800, 0x6020, 0x9084, 0x00c0, 0x01e8, 0x080c, 0x98ad,
-	0x2011, 0x0003, 0x080c, 0x931e, 0x2011, 0x0002, 0x080c, 0x9328,
-	0x080c, 0x91eb, 0x901e, 0x080c, 0x926b, 0x080c, 0x98c9, 0x2069,
-	0x0140, 0x2001, 0x00a0, 0x080c, 0x2833, 0x080c, 0x73ac, 0x080c,
-	0x5cd5, 0x0804, 0x7329, 0x2001, 0x180c, 0x200c, 0xd1b4, 0x1160,
-	0xc1b5, 0x2102, 0x080c, 0x6f0a, 0x2069, 0x0140, 0x2001, 0x0080,
-	0x080c, 0x2833, 0x60e3, 0x0000, 0x2069, 0x0200, 0x6804, 0x9005,
-	0x1118, 0x6808, 0x9005, 0x0190, 0x6028, 0x9084, 0xfdff, 0x602a,
-	0x2011, 0x0200, 0x080c, 0x286d, 0x2069, 0x1960, 0x7000, 0x206a,
-	0x7097, 0x0027, 0x7003, 0x0001, 0x0804, 0x7329, 0x2011, 0x1e00,
-	0x080c, 0x286d, 0x2009, 0x1e00, 0x080c, 0x2819, 0x6024, 0x910c,
-	0x01c8, 0x9084, 0x1c00, 0x11b0, 0x1d04, 0x72e6, 0x0006, 0x0016,
-	0x00c6, 0x00d6, 0x00e6, 0x080c, 0x808b, 0x00ee, 0x00de, 0x00ce,
-	0x001e, 0x000e, 0x00e6, 0x2071, 0x19d4, 0x7018, 0x00ee, 0x9005,
-	0x19e8, 0x01f8, 0x0026, 0x2011, 0x6f22, 0x080c, 0x8131, 0x2011,
-	0x6f15, 0x080c, 0x8237, 0x002e, 0x2069, 0x0140, 0x60e3, 0x0000,
-	0x70b0, 0x9005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x2001,
-	0x0002, 0x080c, 0x2498, 0x60e2, 0x2001, 0x180c, 0x200c, 0xc1b4,
-	0x2102, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e,
-	0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x0046, 0x00c6, 0x00e6,
-	0x2061, 0x0100, 0x2071, 0x1800, 0x080c, 0xbf3f, 0x1904, 0x7396,
-	0x7130, 0xd184, 0x1170, 0x080c, 0x317f, 0x0138, 0xc18d, 0x7132,
-	0x2011, 0x1854, 0x2214, 0xd2ac, 0x1120, 0x7030, 0xd08c, 0x0904,
-	0x7396, 0x2011, 0x1854, 0x220c, 0x0438, 0x0016, 0x2019, 0x000e,
-	0x080c, 0xd1c9, 0x0156, 0x00b6, 0x20a9, 0x007f, 0x900e, 0x9186,
-	0x007e, 0x01a0, 0x9186, 0x0080, 0x0188, 0x080c, 0x6269, 0x1170,
-	0x2120, 0x9006, 0x0016, 0x2009, 0x000e, 0x080c, 0xd251, 0x2009,
-	0x0001, 0x2011, 0x0100, 0x080c, 0x83c3, 0x001e, 0x8108, 0x1f04,
-	0x735f, 0x00be, 0x015e, 0x001e, 0xd1ac, 0x1148, 0x0016, 0x2009,
-	0x0002, 0x2019, 0x0004, 0x080c, 0x2fc2, 0x001e, 0x0078, 0x0156,
-	0x00b6, 0x20a9, 0x007f, 0x900e, 0x080c, 0x6269, 0x1110, 0x080c,
-	0x5cef, 0x8108, 0x1f04, 0x738c, 0x00be, 0x015e, 0x080c, 0x1989,
-	0x080c, 0x98ad, 0x080c, 0x9b52, 0x080c, 0x98c9, 0x60e3, 0x0000,
-	0x080c, 0x5cd5, 0x080c, 0x6fdd, 0x00ee, 0x00ce, 0x004e, 0x003e,
-	0x002e, 0x001e, 0x015e, 0x0005, 0x2001, 0x194e, 0x2003, 0x0001,
-	0x0005, 0x2001, 0x194e, 0x2003, 0x0000, 0x0005, 0x2001, 0x194d,
-	0x2003, 0xaaaa, 0x0005, 0x2001, 0x194d, 0x2003, 0x0000, 0x0005,
-	0x2071, 0x18f0, 0x7003, 0x0000, 0x7007, 0x0000, 0x080c, 0x103b,
-	0x090c, 0x0d65, 0xa8ab, 0xdcb0, 0x2900, 0x704e, 0x080c, 0x103b,
-	0x090c, 0x0d65, 0xa8ab, 0xdcb0, 0x2900, 0x7052, 0xa867, 0x0000,
-	0xa86b, 0x0001, 0xa89f, 0x0000, 0x0005, 0x00e6, 0x2071, 0x0040,
-	0x6848, 0x9005, 0x1118, 0x9085, 0x0001, 0x04b0, 0x6840, 0x9005,
-	0x0150, 0x04a1, 0x6a50, 0x9200, 0x7002, 0x6854, 0x9101, 0x7006,
-	0x9006, 0x7012, 0x7016, 0x6850, 0x7002, 0x6854, 0x7006, 0x6858,
-	0x700a, 0x685c, 0x700e, 0x6840, 0x9005, 0x1110, 0x7012, 0x7016,
-	0x6848, 0x701a, 0x701c, 0x9085, 0x0040, 0x701e, 0x2001, 0x0019,
-	0x7036, 0x702b, 0x0001, 0x2001, 0x0004, 0x200c, 0x918c, 0xfff7,
-	0x918d, 0x8000, 0x2102, 0x00d6, 0x2069, 0x18f0, 0x6807, 0x0001,
-	0x00de, 0x080c, 0x79b8, 0x9006, 0x00ee, 0x0005, 0x900e, 0x0156,
-	0x20a9, 0x0006, 0x8003, 0x818d, 0x1f04, 0x7422, 0x015e, 0x0005,
-	0x2079, 0x0040, 0x2071, 0x18f0, 0x7004, 0x0002, 0x7438, 0x7439,
-	0x7484, 0x74df, 0x7620, 0x7436, 0x7436, 0x764a, 0x080c, 0x0d65,
-	0x0005, 0x2079, 0x0040, 0x2001, 0x1dc0, 0x2003, 0x0000, 0x782c,
-	0x908c, 0x0780, 0x190c, 0x7a44, 0xd0a4, 0x0570, 0x2001, 0x1dc0,
-	0x2004, 0x9082, 0x0080, 0x1640, 0x1d04, 0x7456, 0x2001, 0x19d7,
-	0x200c, 0x8109, 0x0508, 0x2091, 0x6000, 0x2102, 0x7824, 0x2048,
-	0x9006, 0xa802, 0xa806, 0xa864, 0x9084, 0x00ff, 0x908a, 0x0040,
-	0x0608, 0x00b8, 0x2001, 0x1800, 0x200c, 0x9186, 0x0003, 0x1160,
-	0x7104, 0x9186, 0x0004, 0x0140, 0x9186, 0x0007, 0x0128, 0x9186,
-	0x0003, 0x1968, 0x080c, 0x74df, 0x782c, 0xd09c, 0x090c, 0x79b8,
-	0x0005, 0x9082, 0x005a, 0x1218, 0x2100, 0x003b, 0x0c18, 0x080c,
-	0x7515, 0x0c90, 0x00e3, 0x08f0, 0x0005, 0x7515, 0x7515, 0x7515,
-	0x7515, 0x7515, 0x7515, 0x7515, 0x7515, 0x7537, 0x7515, 0x7515,
-	0x7515, 0x7515, 0x7515, 0x7515, 0x7515, 0x7515, 0x7515, 0x7515,
-	0x7515, 0x7515, 0x7515, 0x7515, 0x7515, 0x7515, 0x7515, 0x7515,
-	0x7515, 0x7521, 0x7515, 0x771f, 0x7515, 0x7515, 0x7515, 0x7537,
-	0x7515, 0x7521, 0x7760, 0x77a1, 0x77e8, 0x77fc, 0x7515, 0x7515,
-	0x7537, 0x7521, 0x7515, 0x7515, 0x75f4, 0x78a7, 0x78c2, 0x7515,
-	0x7537, 0x7515, 0x7515, 0x7515, 0x7515, 0x75ea, 0x78c2, 0x7515,
-	0x7515, 0x7515, 0x7515, 0x7515, 0x7515, 0x7515, 0x7515, 0x7515,
-	0x754b, 0x7515, 0x7515, 0x7515, 0x7515, 0x7515, 0x7515, 0x7515,
-	0x7515, 0x7515, 0x79e8, 0x7515, 0x7515, 0x7515, 0x7515, 0x7515,
-	0x755f, 0x7515, 0x7515, 0x7515, 0x7515, 0x7515, 0x7515, 0x2079,
-	0x0040, 0x7004, 0x9086, 0x0003, 0x1198, 0x782c, 0x080c, 0x79e1,
-	0xd0a4, 0x0170, 0x7824, 0x2048, 0x9006, 0xa802, 0xa806, 0xa864,
-	0x9084, 0x00ff, 0x908a, 0x001a, 0x1210, 0x002b, 0x0c50, 0x00e9,
-	0x080c, 0x79b8, 0x0005, 0x7515, 0x7521, 0x770b, 0x7515, 0x7521,
-	0x7515, 0x7521, 0x7521, 0x7515, 0x7521, 0x770b, 0x7521, 0x7521,
-	0x7521, 0x7521, 0x7521, 0x7515, 0x7521, 0x770b, 0x7515, 0x7515,
-	0x7521, 0x7515, 0x7515, 0x7515, 0x7521, 0x00e6, 0x2071, 0x18f0,
-	0x2009, 0x0400, 0x0071, 0x00ee, 0x0005, 0x2009, 0x1000, 0x0049,
-	0x0005, 0x2009, 0x2000, 0x0029, 0x0005, 0x2009, 0x0800, 0x0009,
-	0x0005, 0x7007, 0x0001, 0xa868, 0x9084, 0x00ff, 0x9105, 0xa86a,
-	0x0126, 0x2091, 0x8000, 0x080c, 0x698f, 0x012e, 0x0005, 0xa864,
-	0x8007, 0x9084, 0x00ff, 0x0d08, 0x8001, 0x1120, 0x7007, 0x0001,
-	0x0804, 0x76c9, 0x7007, 0x0003, 0x7012, 0x2900, 0x7016, 0x701a,
-	0x704b, 0x76c9, 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff, 0x0968,
-	0x8001, 0x1120, 0x7007, 0x0001, 0x0804, 0x76e4, 0x7007, 0x0003,
-	0x7012, 0x2900, 0x7016, 0x701a, 0x704b, 0x76e4, 0x0005, 0xa864,
-	0x8007, 0x9084, 0x00ff, 0x9086, 0x0001, 0x1904, 0x751d, 0x7007,
-	0x0001, 0x2009, 0x1833, 0x210c, 0x81ff, 0x1904, 0x75c1, 0xa994,
-	0x9186, 0x006f, 0x0188, 0x9186, 0x0074, 0x15b0, 0x0026, 0x2011,
-	0x0010, 0x080c, 0x6684, 0x002e, 0x0578, 0x0016, 0xa998, 0x080c,
-	0x66ce, 0x001e, 0x1548, 0x0400, 0x080c, 0x70ac, 0x0140, 0xa897,
-	0x4005, 0xa89b, 0x0016, 0x2001, 0x0030, 0x900e, 0x0438, 0x0026,
-	0x2011, 0x8008, 0x080c, 0x6684, 0x002e, 0x01b0, 0x0016, 0x0026,
-	0x0036, 0xa998, 0xaaa0, 0xab9c, 0x918d, 0x8000, 0x080c, 0x66ce,
-	0x003e, 0x002e, 0x001e, 0x1140, 0xa897, 0x4005, 0xa89b, 0x4009,
-	0x2001, 0x0030, 0x900e, 0x0050, 0xa868, 0x9084, 0x00ff, 0xa86a,
-	0xa883, 0x0000, 0x080c, 0x5f00, 0x1108, 0x0005, 0x0126, 0x2091,
-	0x8000, 0xa867, 0x0139, 0xa87a, 0xa982, 0x080c, 0x698f, 0x012e,
-	0x0ca0, 0xa994, 0x9186, 0x0071, 0x0904, 0x756f, 0x9186, 0x0064,
-	0x0904, 0x756f, 0x9186, 0x007c, 0x0904, 0x756f, 0x9186, 0x0028,
-	0x0904, 0x756f, 0x9186, 0x0038, 0x0904, 0x756f, 0x9186, 0x0078,
-	0x0904, 0x756f, 0x9186, 0x005f, 0x0904, 0x756f, 0x9186, 0x0056,
-	0x0904, 0x756f, 0xa897, 0x4005, 0xa89b, 0x0001, 0x2001, 0x0030,
-	0x900e, 0x0860, 0xa87c, 0x9084, 0x00c0, 0x9086, 0x00c0, 0x1120,
-	0x7007, 0x0001, 0x0804, 0x78d9, 0x2900, 0x7016, 0x701a, 0x20a9,
-	0x0004, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0030, 0x2098, 0x7050,
-	0x2040, 0xa060, 0x20e8, 0xa05c, 0x9080, 0x0023, 0x20a0, 0x4003,
-	0xa888, 0x7012, 0x9082, 0x0401, 0x1a04, 0x7525, 0xaab4, 0x928a,
-	0x0002, 0x1a04, 0x7525, 0x82ff, 0x1138, 0xa8b8, 0xa9bc, 0x9105,
-	0x0118, 0x2001, 0x7687, 0x0018, 0x9280, 0x767d, 0x2005, 0x7056,
-	0x7010, 0x9015, 0x0904, 0x7668, 0x080c, 0x103b, 0x1118, 0x7007,
-	0x0004, 0x0005, 0x2900, 0x7022, 0x7054, 0x2060, 0xe000, 0xa866,
-	0x7050, 0x2040, 0xa95c, 0xe004, 0x9100, 0xa076, 0xa860, 0xa072,
-	0xe008, 0x920a, 0x1210, 0x900e, 0x2200, 0x7112, 0xe20c, 0x8003,
-	0x800b, 0x9296, 0x0004, 0x0108, 0x9108, 0xa17a, 0x810b, 0xa17e,
-	0x080c, 0x110c, 0xa06c, 0x908e, 0x0100, 0x0170, 0x9086, 0x0200,
-	0x0118, 0x7007, 0x0007, 0x0005, 0x7020, 0x2048, 0x080c, 0x1054,
-	0x7014, 0x2048, 0x0804, 0x7525, 0x7020, 0x2048, 0x7018, 0xa802,
-	0xa807, 0x0000, 0x2908, 0x2048, 0xa906, 0x711a, 0x0804, 0x7620,
-	0x7014, 0x2048, 0x7007, 0x0001, 0xa8b4, 0x9005, 0x1128, 0xa8b8,
-	0xa9bc, 0x9105, 0x0108, 0x00b9, 0xa864, 0x9084, 0x00ff, 0x9086,
-	0x001e, 0x0904, 0x78d9, 0x0804, 0x76c9, 0x767f, 0x7683, 0x0002,
-	0x001d, 0x0007, 0x0004, 0x000a, 0x001b, 0x0005, 0x0006, 0x000a,
-	0x001d, 0x0005, 0x0004, 0x0076, 0x0066, 0xafb8, 0xaebc, 0xa804,
-	0x2050, 0xb0c0, 0xb0e2, 0xb0bc, 0xb0de, 0xb0b8, 0xb0d2, 0xb0b4,
-	0xb0ce, 0xb6da, 0xb7d6, 0xb0b0, 0xb0ca, 0xb0ac, 0xb0c6, 0xb0a8,
-	0xb0ba, 0xb0a4, 0xb0b6, 0xb6c2, 0xb7be, 0xb0a0, 0xb0b2, 0xb09c,
-	0xb0ae, 0xb098, 0xb0a2, 0xb094, 0xb09e, 0xb6aa, 0xb7a6, 0xb090,
-	0xb09a, 0xb08c, 0xb096, 0xb088, 0xb08a, 0xb084, 0xb086, 0xb692,
-	0xb78e, 0xb080, 0xb082, 0xb07c, 0xb07e, 0xb078, 0xb072, 0xb074,
-	0xb06e, 0xb67a, 0xb776, 0xb004, 0x9055, 0x1958, 0x006e, 0x007e,
-	0x0005, 0x2009, 0x1833, 0x210c, 0x81ff, 0x1178, 0x080c, 0x5d4f,
-	0x1108, 0x0005, 0x080c, 0x6bac, 0x0126, 0x2091, 0x8000, 0x080c,
-	0xbb2a, 0x080c, 0x698f, 0x012e, 0x0ca0, 0x080c, 0xbf3f, 0x1d70,
-	0x2001, 0x0028, 0x900e, 0x0c70, 0x2009, 0x1833, 0x210c, 0x81ff,
-	0x11d8, 0xa888, 0x9005, 0x01e0, 0xa883, 0x0000, 0xa87c, 0xd0f4,
-	0x0120, 0x080c, 0x5e62, 0x1138, 0x0005, 0x9006, 0xa87a, 0x080c,
-	0x5ddd, 0x1108, 0x0005, 0x0126, 0x2091, 0x8000, 0xa87a, 0xa982,
-	0x080c, 0x698f, 0x012e, 0x0cb0, 0x2001, 0x0028, 0x900e, 0x0c98,
-	0x2001, 0x0000, 0x0c80, 0x7018, 0xa802, 0x2908, 0x2048, 0xa906,
-	0x711a, 0x7010, 0x8001, 0x7012, 0x0118, 0x7007, 0x0003, 0x0030,
-	0x7014, 0x2048, 0x7007, 0x0001, 0x7048, 0x080f, 0x0005, 0x00b6,
-	0x7007, 0x0001, 0xa974, 0xa878, 0x9084, 0x00ff, 0x9096, 0x0004,
-	0x0540, 0x20a9, 0x0001, 0x9096, 0x0001, 0x0190, 0x900e, 0x20a9,
-	0x0800, 0x9096, 0x0002, 0x0160, 0x9005, 0x11d8, 0xa974, 0x080c,
-	0x6269, 0x11b8, 0x0066, 0xae80, 0x080c, 0x6379, 0x006e, 0x0088,
-	0x0046, 0x2011, 0x180c, 0x2224, 0xc484, 0x2412, 0x004e, 0x00c6,
-	0x080c, 0x6269, 0x1110, 0x080c, 0x6548, 0x8108, 0x1f04, 0x7748,
-	0x00ce, 0xa87c, 0xd084, 0x1120, 0x080c, 0x1054, 0x00be, 0x0005,
-	0x0126, 0x2091, 0x8000, 0x080c, 0x698f, 0x012e, 0x00be, 0x0005,
-	0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x080c, 0x665c, 0x0580,
-	0x2061, 0x1a3f, 0x6100, 0xd184, 0x0178, 0xa888, 0x9084, 0x00ff,
-	0x1550, 0x6000, 0xd084, 0x0520, 0x6004, 0x9005, 0x1538, 0x6003,
-	0x0000, 0x600b, 0x0000, 0x00c8, 0x2011, 0x0001, 0xa890, 0x9005,
-	0x1110, 0x2001, 0x001e, 0x8000, 0x6016, 0xa888, 0x9084, 0x00ff,
-	0x0178, 0x6006, 0xa888, 0x8007, 0x9084, 0x00ff, 0x0148, 0x600a,
-	0xa888, 0x8000, 0x1108, 0xc28d, 0x6202, 0x012e, 0x0804, 0x79a2,
-	0x012e, 0x0804, 0x799c, 0x012e, 0x0804, 0x7996, 0x012e, 0x0804,
-	0x7999, 0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x080c, 0x665c,
-	0x05e0, 0x2061, 0x1a3f, 0x6000, 0xd084, 0x05b8, 0x6204, 0x6308,
-	0xd08c, 0x1530, 0xac78, 0x9484, 0x0003, 0x0170, 0xa988, 0x918c,
-	0x00ff, 0x8001, 0x1120, 0x2100, 0x9210, 0x0620, 0x0028, 0x8001,
-	0x1508, 0x2100, 0x9212, 0x02f0, 0x9484, 0x000c, 0x0188, 0xa988,
-	0x810f, 0x918c, 0x00ff, 0x9082, 0x0004, 0x1120, 0x2100, 0x9318,
-	0x0288, 0x0030, 0x9082, 0x0004, 0x1168, 0x2100, 0x931a, 0x0250,
-	0xa890, 0x9005, 0x0110, 0x8000, 0x6016, 0x6206, 0x630a, 0x012e,
-	0x0804, 0x79a2, 0x012e, 0x0804, 0x799f, 0x012e, 0x0804, 0x799c,
-	0x0126, 0x2091, 0x8000, 0x7007, 0x0001, 0x2061, 0x1a3f, 0x6300,
-	0xd38c, 0x1120, 0x6308, 0x8318, 0x0220, 0x630a, 0x012e, 0x0804,
-	0x79b0, 0x012e, 0x0804, 0x799f, 0x00b6, 0x0126, 0x00c6, 0x2091,
-	0x8000, 0x7007, 0x0001, 0xa87c, 0xd0ac, 0x0148, 0x00c6, 0x2061,
-	0x1a3f, 0x6000, 0x9084, 0xfcff, 0x6002, 0x00ce, 0x0440, 0xa888,
-	0x9005, 0x05d8, 0xa88c, 0x9065, 0x0598, 0x2001, 0x1833, 0x2004,
-	0x9005, 0x0118, 0x080c, 0x9c06, 0x0068, 0x6017, 0xf400, 0x6063,
-	0x0000, 0xa97c, 0xd1a4, 0x0110, 0xa980, 0x6162, 0x2009, 0x0041,
-	0x080c, 0x9c6a, 0xa988, 0x918c, 0xff00, 0x9186, 0x2000, 0x1138,
-	0x0026, 0x900e, 0x2011, 0xfdff, 0x080c, 0x83c3, 0x002e, 0xa87c,
-	0xd0c4, 0x0148, 0x2061, 0x1a3f, 0x6000, 0xd08c, 0x1120, 0x6008,
-	0x8000, 0x0208, 0x600a, 0x00ce, 0x012e, 0x00be, 0x0804, 0x79a2,
-	0x00ce, 0x012e, 0x00be, 0x0804, 0x799c, 0xa984, 0x9186, 0x002e,
-	0x0d30, 0x9186, 0x002d, 0x0d18, 0x9186, 0x0045, 0x0510, 0x9186,
-	0x002a, 0x1130, 0x2001, 0x180c, 0x200c, 0xc194, 0x2102, 0x08b8,
-	0x9186, 0x0020, 0x0158, 0x9186, 0x0029, 0x1d10, 0xa974, 0x080c,
-	0x6269, 0x1968, 0xb800, 0xc0e4, 0xb802, 0x0848, 0xa88c, 0x9065,
-	0x09b8, 0x6007, 0x0024, 0x2001, 0x1957, 0x2004, 0x601a, 0x0804,
-	0x7837, 0xa88c, 0x9065, 0x0960, 0x00e6, 0xa890, 0x9075, 0x2001,
-	0x1833, 0x2004, 0x9005, 0x0150, 0x080c, 0x9c06, 0x8eff, 0x0118,
-	0x2e60, 0x080c, 0x9c06, 0x00ee, 0x0804, 0x7837, 0x6024, 0xc0dc,
-	0xc0d5, 0x6026, 0x2e60, 0x6007, 0x003a, 0xa8a0, 0x9005, 0x0130,
-	0x6007, 0x003b, 0xa8a4, 0x602e, 0xa8a8, 0x6016, 0x6003, 0x0001,
-	0x2009, 0x8020, 0x080c, 0x84a9, 0x00ee, 0x0804, 0x7837, 0x2061,
-	0x1a3f, 0x6000, 0xd084, 0x0190, 0xd08c, 0x1904, 0x79b0, 0x0126,
-	0x2091, 0x8000, 0x6204, 0x8210, 0x0220, 0x6206, 0x012e, 0x0804,
-	0x79b0, 0x012e, 0xa883, 0x0016, 0x0804, 0x79a9, 0xa883, 0x0007,
-	0x0804, 0x79a9, 0xa864, 0x8007, 0x9084, 0x00ff, 0x0130, 0x8001,
-	0x1138, 0x7007, 0x0001, 0x0069, 0x0005, 0x080c, 0x751d, 0x0040,
-	0x7007, 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, 0x78d9,
-	0x0005, 0x00b6, 0x00e6, 0x0126, 0x2091, 0x8000, 0x903e, 0x2061,
-	0x1800, 0x61cc, 0x81ff, 0x1904, 0x795b, 0x6130, 0xd194, 0x1904,
-	0x7985, 0xa878, 0x2070, 0x9e82, 0x1ddc, 0x0a04, 0x794f, 0x6064,
-	0x9e02, 0x1a04, 0x794f, 0x7120, 0x9186, 0x0006, 0x1904, 0x7941,
-	0x7010, 0x905d, 0x0904, 0x795b, 0xb800, 0xd0e4, 0x1904, 0x797f,
-	0x2061, 0x1a3f, 0x6100, 0x9184, 0x0301, 0x9086, 0x0001, 0x15a0,
-	0x7024, 0xd0dc, 0x1904, 0x7988, 0xa883, 0x0000, 0xa803, 0x0000,
-	0x2908, 0x7014, 0x9005, 0x1198, 0x7116, 0xa87c, 0xd0f4, 0x1904,
-	0x798b, 0x080c, 0x5386, 0xd09c, 0x1118, 0xa87c, 0xc0cc, 0xa87e,
-	0x2e60, 0x080c, 0x82b6, 0x012e, 0x00ee, 0x00be, 0x0005, 0x2048,
-	0xa800, 0x9005, 0x1de0, 0xa902, 0x2148, 0xa87c, 0xd0f4, 0x1904,
-	0x798b, 0x012e, 0x00ee, 0x00be, 0x0005, 0x012e, 0x00ee, 0xa883,
-	0x0006, 0x00be, 0x0804, 0x79a9, 0xd184, 0x0db8, 0xd1c4, 0x1190,
-	0x00a0, 0xa974, 0x080c, 0x6269, 0x15d0, 0xb800, 0xd0e4, 0x15b8,
-	0x7120, 0x9186, 0x0007, 0x1118, 0xa883, 0x0002, 0x0490, 0xa883,
-	0x0008, 0x0478, 0xa883, 0x000e, 0x0460, 0xa883, 0x0017, 0x0448,
-	0xa883, 0x0035, 0x0430, 0x080c, 0x538a, 0xd0fc, 0x01e8, 0xa878,
-	0x2070, 0x9e82, 0x1ddc, 0x02c0, 0x6064, 0x9e02, 0x12a8, 0x7120,
-	0x9186, 0x0006, 0x1188, 0x7010, 0x905d, 0x0170, 0xb800, 0xd0bc,
-	0x0158, 0x2039, 0x0001, 0x7000, 0x9086, 0x0007, 0x1904, 0x78e5,
-	0x7003, 0x0002, 0x0804, 0x78e5, 0xa883, 0x0028, 0x0010, 0xa883,
-	0x0029, 0x012e, 0x00ee, 0x00be, 0x0420, 0xa883, 0x002a, 0x0cc8,
-	0xa883, 0x0045, 0x0cb0, 0x2e60, 0x2019, 0x0002, 0x601b, 0x0014,
-	0x080c, 0xcdd9, 0x012e, 0x00ee, 0x00be, 0x0005, 0x2009, 0x003e,
-	0x0058, 0x2009, 0x0004, 0x0040, 0x2009, 0x0006, 0x0028, 0x2009,
-	0x0016, 0x0010, 0x2009, 0x0001, 0xa884, 0x9084, 0xff00, 0x9105,
-	0xa886, 0x0126, 0x2091, 0x8000, 0x080c, 0x698f, 0x012e, 0x0005,
-	0x080c, 0x1054, 0x0005, 0x00d6, 0x080c, 0x82ad, 0x00de, 0x0005,
-	0x00d6, 0x00e6, 0x0126, 0x2091, 0x8000, 0x2071, 0x0040, 0x702c,
-	0xd084, 0x01d8, 0x908c, 0x0780, 0x190c, 0x7a44, 0xd09c, 0x11a8,
-	0x2071, 0x1800, 0x70bc, 0x90ea, 0x0040, 0x0278, 0x8001, 0x70be,
-	0x702c, 0x2048, 0xa800, 0x702e, 0x9006, 0xa802, 0xa806, 0x2071,
-	0x0040, 0x2900, 0x7022, 0x702c, 0x0c28, 0x012e, 0x00ee, 0x00de,
-	0x0005, 0x0006, 0x9084, 0x0780, 0x190c, 0x7a44, 0x000e, 0x0005,
-	0x00d6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x00b6, 0x7007, 0x0001,
-	0xaa74, 0x9282, 0x0004, 0x1a04, 0x7a35, 0xa97c, 0x9188, 0x1000,
-	0x2104, 0x905d, 0xb804, 0xd284, 0x0140, 0x05e8, 0x8007, 0x9084,
-	0x00ff, 0x9084, 0x0006, 0x1108, 0x04b0, 0x2b10, 0x080c, 0x9b76,
-	0x1118, 0x080c, 0x9c3d, 0x05a8, 0x6212, 0xa874, 0x0002, 0x7a13,
-	0x7a18, 0x7a1b, 0x7a21, 0x2019, 0x0002, 0x080c, 0xd1c9, 0x0060,
-	0x080c, 0xd159, 0x0048, 0x2019, 0x0002, 0xa980, 0x080c, 0xd178,
-	0x0018, 0xa980, 0x080c, 0xd159, 0x080c, 0x9bcc, 0xa887, 0x0000,
-	0x0126, 0x2091, 0x8000, 0x080c, 0x698f, 0x012e, 0x00be, 0x001e,
-	0x002e, 0x003e, 0x00ce, 0x00de, 0x0005, 0xa887, 0x0006, 0x0c80,
-	0xa887, 0x0002, 0x0c68, 0xa887, 0x0005, 0x0c50, 0xa887, 0x0004,
-	0x0c38, 0xa887, 0x0007, 0x0c20, 0x2091, 0x8000, 0x0e04, 0x7a46,
-	0x0006, 0x0016, 0x2001, 0x8003, 0x0006, 0x0804, 0x0d6e, 0x2001,
-	0x1833, 0x2004, 0x9005, 0x0005, 0x0005, 0x00f6, 0x2079, 0x0300,
-	0x2001, 0x0200, 0x200c, 0xc1e5, 0xc1dc, 0x2102, 0x2009, 0x0218,
-	0x210c, 0xd1ec, 0x1120, 0x080c, 0x152d, 0x00fe, 0x0005, 0x2001,
-	0x020d, 0x2003, 0x0020, 0x781f, 0x0300, 0x00fe, 0x0005, 0x781c,
-	0xd08c, 0x0904, 0x7ac7, 0x68bc, 0x90aa, 0x0005, 0x0a04, 0x8043,
-	0x7d44, 0x7c40, 0xd59c, 0x190c, 0x0d65, 0x9584, 0x00f6, 0x1508,
-	0x9484, 0x7000, 0x0138, 0x908a, 0x2000, 0x1258, 0x9584, 0x0700,
-	0x8007, 0x04f0, 0x7000, 0x9084, 0xff00, 0x9086, 0x8100, 0x0db0,
-	0x00b0, 0x9484, 0x0fff, 0x1130, 0x7000, 0x9084, 0xff00, 0x9086,
-	0x8100, 0x11c0, 0x080c, 0xd5b1, 0x080c, 0x7f8a, 0x7817, 0x0140,
-	0x00a8, 0x9584, 0x0076, 0x1118, 0x080c, 0x7fe6, 0x19c8, 0xd5a4,
-	0x0148, 0x0046, 0x0056, 0x080c, 0x7b17, 0x080c, 0x1fb7, 0x005e,
-	0x004e, 0x0020, 0x080c, 0xd5b1, 0x7817, 0x0140, 0x080c, 0x70ac,
-	0x0168, 0x2001, 0x0111, 0x2004, 0xd08c, 0x0140, 0x688f, 0x0000,
-	0x2001, 0x0110, 0x2003, 0x0008, 0x2003, 0x0000, 0x0489, 0x0005,
-	0x0002, 0x7ad4, 0x7dac, 0x7ad1, 0x7ad1, 0x7ad1, 0x7ad1, 0x7ad1,
-	0x7ad1, 0x7817, 0x0140, 0x0005, 0x7000, 0x908c, 0xff00, 0x9194,
-	0xf000, 0x810f, 0x9484, 0x0fff, 0x688e, 0x9286, 0x2000, 0x1150,
-	0x6800, 0x9086, 0x0001, 0x1118, 0x080c, 0x53e7, 0x0070, 0x080c,
-	0x7b37, 0x0058, 0x9286, 0x3000, 0x1118, 0x080c, 0x7ce9, 0x0028,
-	0x9286, 0x8000, 0x1110, 0x080c, 0x7ec0, 0x7817, 0x0140, 0x0005,
-	0x2001, 0x1810, 0x2004, 0xd08c, 0x0178, 0x2001, 0x1800, 0x2004,
-	0x9086, 0x0003, 0x1148, 0x0026, 0x0036, 0x2011, 0x8048, 0x2518,
-	0x080c, 0x48d1, 0x003e, 0x002e, 0x0005, 0x0036, 0x0046, 0x0056,
-	0x00f6, 0x2079, 0x0200, 0x2019, 0xfffe, 0x7c30, 0x0050, 0x0036,
-	0x0046, 0x0056, 0x00f6, 0x2079, 0x0200, 0x7d44, 0x7c40, 0x2019,
-	0xffff, 0x2001, 0x1810, 0x2004, 0xd08c, 0x0160, 0x2001, 0x1800,
-	0x2004, 0x9086, 0x0003, 0x1130, 0x0026, 0x2011, 0x8048, 0x080c,
-	0x48d1, 0x002e, 0x00fe, 0x005e, 0x004e, 0x003e, 0x0005, 0x00b6,
-	0x00c6, 0x7010, 0x9084, 0xff00, 0x8007, 0x9096, 0x0001, 0x0120,
-	0x9096, 0x0023, 0x1904, 0x7cba, 0x9186, 0x0023, 0x15c0, 0x080c,
-	0x7f55, 0x0904, 0x7cba, 0x6120, 0x9186, 0x0001, 0x0150, 0x9186,
-	0x0004, 0x0138, 0x9186, 0x0008, 0x0120, 0x9186, 0x000a, 0x1904,
-	0x7cba, 0x7124, 0x610a, 0x7030, 0x908e, 0x0200, 0x1130, 0x2009,
-	0x0015, 0x080c, 0x9c6a, 0x0804, 0x7cba, 0x908e, 0x0214, 0x0118,
-	0x908e, 0x0210, 0x1130, 0x2009, 0x0015, 0x080c, 0x9c6a, 0x0804,
-	0x7cba, 0x908e, 0x0100, 0x1904, 0x7cba, 0x7034, 0x9005, 0x1904,
-	0x7cba, 0x2009, 0x0016, 0x080c, 0x9c6a, 0x0804, 0x7cba, 0x9186,
-	0x0022, 0x1904, 0x7cba, 0x7030, 0x908e, 0x0300, 0x1580, 0x68d8,
-	0xd0a4, 0x0528, 0xc0b5, 0x68da, 0x7100, 0x918c, 0x00ff, 0x697a,
-	0x7004, 0x687e, 0x00f6, 0x2079, 0x0100, 0x79e6, 0x78ea, 0x0006,
-	0x9084, 0x00ff, 0x0016, 0x2008, 0x080c, 0x246d, 0x7932, 0x7936,
-	0x001e, 0x000e, 0x00fe, 0x080c, 0x2424, 0x695a, 0x703c, 0x00e6,
-	0x2071, 0x0140, 0x7086, 0x2071, 0x1800, 0x70b2, 0x00ee, 0x7034,
-	0x9005, 0x1904, 0x7cba, 0x2009, 0x0017, 0x0804, 0x7c87, 0x908e,
-	0x0400, 0x1190, 0x7034, 0x9005, 0x1904, 0x7cba, 0x080c, 0x70ac,
-	0x0120, 0x2009, 0x001d, 0x0804, 0x7c87, 0x68d8, 0xc0a5, 0x68da,
-	0x2009, 0x0030, 0x0804, 0x7c87, 0x908e, 0x0500, 0x1140, 0x7034,
-	0x9005, 0x1904, 0x7cba, 0x2009, 0x0018, 0x0804, 0x7c87, 0x908e,
-	0x2010, 0x1120, 0x2009, 0x0019, 0x0804, 0x7c87, 0x908e, 0x2110,
-	0x1120, 0x2009, 0x001a, 0x0804, 0x7c87, 0x908e, 0x5200, 0x1140,
-	0x7034, 0x9005, 0x1904, 0x7cba, 0x2009, 0x001b, 0x0804, 0x7c87,
-	0x908e, 0x5000, 0x1140, 0x7034, 0x9005, 0x1904, 0x7cba, 0x2009,
-	0x001c, 0x0804, 0x7c87, 0x908e, 0x1300, 0x1120, 0x2009, 0x0034,
-	0x0804, 0x7c87, 0x908e, 0x1200, 0x1140, 0x7034, 0x9005, 0x1904,
-	0x7cba, 0x2009, 0x0024, 0x0804, 0x7c87, 0x908c, 0xff00, 0x918e,
-	0x2400, 0x1170, 0x2009, 0x002d, 0x2001, 0x1810, 0x2004, 0xd09c,
-	0x0904, 0x7c87, 0x080c, 0xc613, 0x1904, 0x7cba, 0x0804, 0x7c85,
-	0x908c, 0xff00, 0x918e, 0x5300, 0x1120, 0x2009, 0x002a, 0x0804,
-	0x7c87, 0x908e, 0x0f00, 0x1120, 0x2009, 0x0020, 0x0804, 0x7c87,
-	0x908e, 0x6104, 0x1528, 0x2029, 0x0205, 0x2011, 0x026d, 0x8208,
-	0x2204, 0x9082, 0x0004, 0x8004, 0x8004, 0x20a8, 0x2011, 0x8015,
-	0x211c, 0x8108, 0x0046, 0x2124, 0x080c, 0x48d1, 0x004e, 0x8108,
-	0x0f04, 0x7c53, 0x9186, 0x0280, 0x1d88, 0x2504, 0x8000, 0x202a,
-	0x2009, 0x0260, 0x0c58, 0x202b, 0x0000, 0x2009, 0x0023, 0x0478,
-	0x908e, 0x6000, 0x1118, 0x2009, 0x003f, 0x0448, 0x908e, 0x7800,
-	0x1118, 0x2009, 0x0045, 0x0418, 0x908e, 0x1000, 0x1118, 0x2009,
-	0x004e, 0x00e8, 0x908e, 0x6300, 0x1118, 0x2009, 0x004a, 0x00b8,
-	0x908c, 0xff00, 0x918e, 0x5600, 0x1118, 0x2009, 0x004f, 0x0078,
-	0x908c, 0xff00, 0x918e, 0x5700, 0x1118, 0x2009, 0x0050, 0x0038,
-	0x2009, 0x001d, 0x6838, 0xd0d4, 0x0110, 0x2009, 0x004c, 0x0016,
-	0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x2424, 0x1568,
-	0x080c, 0x6209, 0x1550, 0xbe12, 0xbd16, 0x001e, 0x0016, 0xb884,
+	0x1800, 0x2001, 0x194e, 0x200c, 0x9186, 0x0000, 0x0158, 0x9186,
+	0x0001, 0x0158, 0x9186, 0x0002, 0x0158, 0x9186, 0x0003, 0x0158,
+	0x0804, 0x707b, 0x7097, 0x0022, 0x0040, 0x7097, 0x0021, 0x0028,
+	0x7097, 0x0023, 0x0010, 0x7097, 0x0024, 0x60e3, 0x0000, 0x6887,
+	0x0001, 0x2001, 0x0001, 0x080c, 0x2498, 0x080c, 0x98c8, 0x0026,
+	0x080c, 0x9b6d, 0x002e, 0x080c, 0x98e4, 0x7000, 0x908e, 0x0004,
+	0x0118, 0x602b, 0x0028, 0x0010, 0x602b, 0x0020, 0x0156, 0x0126,
+	0x2091, 0x8000, 0x20a9, 0x0005, 0x6024, 0xd0ac, 0x0150, 0x012e,
+	0x015e, 0x080c, 0xbf61, 0x0118, 0x9006, 0x080c, 0x285d, 0x0804,
+	0x7087, 0x6800, 0x9084, 0x00a1, 0xc0bd, 0x6802, 0x080c, 0x2819,
+	0x6904, 0xd1d4, 0x1140, 0x2001, 0x0100, 0x080c, 0x2833, 0x1f04,
+	0x702c, 0x080c, 0x710e, 0x012e, 0x015e, 0x080c, 0x70c8, 0x0170,
+	0x6044, 0x9005, 0x0130, 0x080c, 0x710e, 0x9006, 0x8001, 0x1df0,
+	0x0028, 0x6804, 0xd0d4, 0x1110, 0x080c, 0x710e, 0x080c, 0xbf61,
+	0x0118, 0x9006, 0x080c, 0x285d, 0x0016, 0x0026, 0x7000, 0x908e,
+	0x0004, 0x0130, 0x2009, 0x00c8, 0x2011, 0x6f2d, 0x080c, 0x821d,
+	0x002e, 0x001e, 0x080c, 0x806b, 0x7034, 0xc085, 0x7036, 0x2001,
+	0x194e, 0x2003, 0x0004, 0x080c, 0x6d82, 0x080c, 0x70c8, 0x0138,
+	0x6804, 0xd0d4, 0x1120, 0xd0dc, 0x1100, 0x080c, 0x73bc, 0x00ee,
+	0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100,
+	0x2069, 0x0140, 0x2071, 0x1800, 0x080c, 0x8082, 0x080c, 0x8074,
+	0x080c, 0x73c6, 0x2001, 0x193e, 0x2003, 0x0000, 0x9006, 0x7096,
+	0x60e2, 0x6886, 0x080c, 0x2498, 0x9006, 0x080c, 0x2833, 0x6043,
+	0x0090, 0x6043, 0x0010, 0x0026, 0x2011, 0xffff, 0x080c, 0x286d,
+	0x002e, 0x602b, 0x182c, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x0006,
+	0x2001, 0x194d, 0x2004, 0x9086, 0xaaaa, 0x000e, 0x0005, 0x0006,
+	0x080c, 0x5391, 0x9084, 0x0030, 0x9086, 0x0000, 0x000e, 0x0005,
+	0x0006, 0x080c, 0x5391, 0x9084, 0x0030, 0x9086, 0x0030, 0x000e,
+	0x0005, 0x0006, 0x080c, 0x5391, 0x9084, 0x0030, 0x9086, 0x0010,
+	0x000e, 0x0005, 0x0006, 0x080c, 0x5391, 0x9084, 0x0030, 0x9086,
+	0x0020, 0x000e, 0x0005, 0x0036, 0x0016, 0x2001, 0x180c, 0x2004,
+	0x908c, 0x0013, 0x0180, 0x0020, 0x080c, 0x24b8, 0x900e, 0x0028,
+	0x080c, 0x665f, 0x1dc8, 0x2009, 0x0002, 0x2019, 0x0028, 0x080c,
+	0x2fc5, 0x9006, 0x0019, 0x001e, 0x003e, 0x0005, 0x00e6, 0x2071,
+	0x180c, 0x2e04, 0x0130, 0x080c, 0xbf5a, 0x1128, 0x9085, 0x0010,
+	0x0010, 0x9084, 0xffef, 0x2072, 0x00ee, 0x0005, 0x6050, 0x0006,
+	0x60ec, 0x0006, 0x600c, 0x0006, 0x6004, 0x0006, 0x6028, 0x0006,
+	0x602f, 0x0100, 0x602f, 0x0000, 0x602f, 0x0040, 0x602f, 0x0000,
+	0x20a9, 0x0002, 0x080c, 0x27fa, 0x0026, 0x2011, 0x0040, 0x080c,
+	0x286d, 0x002e, 0x000e, 0x602a, 0x000e, 0x6006, 0x000e, 0x600e,
+	0x000e, 0x60ee, 0x60e3, 0x0000, 0x6887, 0x0001, 0x2001, 0x0001,
+	0x080c, 0x2498, 0x2001, 0x00a0, 0x0006, 0x080c, 0xbf61, 0x000e,
+	0x0130, 0x080c, 0x2851, 0x9006, 0x080c, 0x285d, 0x0010, 0x080c,
+	0x2833, 0x000e, 0x6052, 0x6050, 0x0006, 0xc0e5, 0x6052, 0x00f6,
+	0x2079, 0x0100, 0x080c, 0x27aa, 0x00fe, 0x000e, 0x6052, 0x0005,
+	0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061,
+	0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x080c, 0x9926, 0x0158,
+	0x2001, 0x0386, 0x2004, 0xd0b4, 0x1130, 0x2001, 0x0016, 0x080c,
+	0x98b9, 0x0804, 0x71ea, 0x2001, 0x180c, 0x200c, 0xc1c4, 0x2102,
+	0x6028, 0x9084, 0xe1ff, 0x602a, 0x2011, 0x0200, 0x080c, 0x286d,
+	0x2001, 0x0090, 0x080c, 0x2833, 0x20a9, 0x0366, 0x6024, 0xd0cc,
+	0x1558, 0x1d04, 0x7186, 0x2091, 0x6000, 0x1f04, 0x7186, 0x080c,
+	0x98c8, 0x2011, 0x0003, 0x080c, 0x9339, 0x2011, 0x0002, 0x080c,
+	0x9343, 0x080c, 0x9206, 0x901e, 0x080c, 0x9286, 0x2001, 0x0386,
+	0x2003, 0x7000, 0x080c, 0x98e4, 0x2001, 0x00a0, 0x080c, 0x2833,
+	0x080c, 0x73b7, 0x080c, 0x5cdc, 0x080c, 0xbf61, 0x0110, 0x080c,
+	0x0cd1, 0x9085, 0x0001, 0x04e0, 0x2001, 0x0386, 0x2004, 0xd0ac,
+	0x0110, 0x080c, 0x1989, 0x60e3, 0x0000, 0x2001, 0x0002, 0x080c,
+	0x2498, 0x60e2, 0x2001, 0x0080, 0x080c, 0x2833, 0x20a9, 0x0366,
+	0x2011, 0x1e00, 0x080c, 0x286d, 0x2009, 0x1e00, 0x080c, 0x2819,
+	0x6024, 0x910c, 0x0140, 0x1d04, 0x71c8, 0x2091, 0x6000, 0x1f04,
+	0x71c8, 0x0804, 0x718f, 0x2001, 0x0386, 0x2003, 0x7000, 0x6028,
+	0x9085, 0x1e00, 0x602a, 0x70b0, 0x9005, 0x1118, 0x6887, 0x0001,
+	0x0008, 0x6886, 0x080c, 0xbf61, 0x0110, 0x080c, 0x0cd1, 0x9006,
+	0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005,
+	0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061,
+	0x0100, 0x2071, 0x1800, 0x7000, 0x9086, 0x0003, 0x1168, 0x2001,
+	0x020b, 0x2004, 0x9084, 0x5540, 0x9086, 0x5540, 0x1128, 0x2069,
+	0x1a47, 0x2d04, 0x8000, 0x206a, 0x2069, 0x0140, 0x6020, 0x9084,
+	0x00c0, 0x0120, 0x6884, 0x9005, 0x1904, 0x7261, 0x2001, 0x0088,
+	0x080c, 0x2833, 0x9006, 0x60e2, 0x6886, 0x080c, 0x2498, 0x2069,
+	0x0200, 0x6804, 0x9005, 0x1118, 0x6808, 0x9005, 0x01d0, 0x6028,
+	0x9084, 0xfbff, 0x602a, 0x2011, 0x0400, 0x080c, 0x286d, 0x2069,
+	0x1960, 0x7000, 0x206a, 0x7097, 0x0026, 0x7003, 0x0001, 0x20a9,
+	0x0002, 0x1d04, 0x7241, 0x2091, 0x6000, 0x1f04, 0x7241, 0x0804,
+	0x7292, 0x2069, 0x0140, 0x20a9, 0x0384, 0x2011, 0x1e00, 0x080c,
+	0x286d, 0x2009, 0x1e00, 0x080c, 0x2819, 0x6024, 0x910c, 0x0528,
+	0x9084, 0x1a00, 0x1510, 0x1d04, 0x724d, 0x2091, 0x6000, 0x1f04,
+	0x724d, 0x080c, 0x98c8, 0x2011, 0x0003, 0x080c, 0x9339, 0x2011,
+	0x0002, 0x080c, 0x9343, 0x080c, 0x9206, 0x901e, 0x080c, 0x9286,
+	0x080c, 0x98e4, 0x2001, 0x00a0, 0x080c, 0x2833, 0x080c, 0x73b7,
+	0x080c, 0x5cdc, 0x9085, 0x0001, 0x00a8, 0x2001, 0x0080, 0x080c,
+	0x2833, 0x2069, 0x0140, 0x60e3, 0x0000, 0x70b0, 0x9005, 0x1118,
+	0x6887, 0x0001, 0x0008, 0x6886, 0x2001, 0x0002, 0x080c, 0x2498,
+	0x60e2, 0x9006, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e,
+	0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6,
+	0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, 0x6020, 0x9084, 0x00c0,
+	0x01e8, 0x080c, 0x98c8, 0x2011, 0x0003, 0x080c, 0x9339, 0x2011,
+	0x0002, 0x080c, 0x9343, 0x080c, 0x9206, 0x901e, 0x080c, 0x9286,
+	0x080c, 0x98e4, 0x2069, 0x0140, 0x2001, 0x00a0, 0x080c, 0x2833,
+	0x080c, 0x73b7, 0x080c, 0x5cdc, 0x0804, 0x7334, 0x2001, 0x180c,
+	0x200c, 0xd1b4, 0x1160, 0xc1b5, 0x2102, 0x080c, 0x6f15, 0x2069,
+	0x0140, 0x2001, 0x0080, 0x080c, 0x2833, 0x60e3, 0x0000, 0x2069,
+	0x0200, 0x6804, 0x9005, 0x1118, 0x6808, 0x9005, 0x0190, 0x6028,
+	0x9084, 0xfdff, 0x602a, 0x2011, 0x0200, 0x080c, 0x286d, 0x2069,
+	0x1960, 0x7000, 0x206a, 0x7097, 0x0027, 0x7003, 0x0001, 0x0804,
+	0x7334, 0x2011, 0x1e00, 0x080c, 0x286d, 0x2009, 0x1e00, 0x080c,
+	0x2819, 0x6024, 0x910c, 0x01c8, 0x9084, 0x1c00, 0x11b0, 0x1d04,
+	0x72f1, 0x0006, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x080c, 0x80b3,
+	0x00ee, 0x00de, 0x00ce, 0x001e, 0x000e, 0x00e6, 0x2071, 0x19d4,
+	0x7018, 0x00ee, 0x9005, 0x19e8, 0x01f8, 0x0026, 0x2011, 0x6f2d,
+	0x080c, 0x8159, 0x2011, 0x6f20, 0x080c, 0x825f, 0x002e, 0x2069,
+	0x0140, 0x60e3, 0x0000, 0x70b0, 0x9005, 0x1118, 0x6887, 0x0001,
+	0x0008, 0x6886, 0x2001, 0x0002, 0x080c, 0x2498, 0x60e2, 0x2001,
+	0x180c, 0x200c, 0xc1b4, 0x2102, 0x00ee, 0x00de, 0x00ce, 0x003e,
+	0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036,
+	0x0046, 0x00c6, 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, 0x080c,
+	0xbf5a, 0x1904, 0x73a1, 0x7130, 0xd184, 0x1170, 0x080c, 0x3186,
+	0x0138, 0xc18d, 0x7132, 0x2011, 0x1854, 0x2214, 0xd2ac, 0x1120,
+	0x7030, 0xd08c, 0x0904, 0x73a1, 0x2011, 0x1854, 0x220c, 0x0438,
+	0x0016, 0x2019, 0x000e, 0x080c, 0xd1eb, 0x0156, 0x00b6, 0x20a9,
+	0x007f, 0x900e, 0x9186, 0x007e, 0x01a0, 0x9186, 0x0080, 0x0188,
+	0x080c, 0x6270, 0x1170, 0x2120, 0x9006, 0x0016, 0x2009, 0x000e,
+	0x080c, 0xd273, 0x2009, 0x0001, 0x2011, 0x0100, 0x080c, 0x83eb,
+	0x001e, 0x8108, 0x1f04, 0x736a, 0x00be, 0x015e, 0x001e, 0xd1ac,
+	0x1148, 0x0016, 0x2009, 0x0002, 0x2019, 0x0004, 0x080c, 0x2fc5,
+	0x001e, 0x0078, 0x0156, 0x00b6, 0x20a9, 0x007f, 0x900e, 0x080c,
+	0x6270, 0x1110, 0x080c, 0x5cf6, 0x8108, 0x1f04, 0x7397, 0x00be,
+	0x015e, 0x080c, 0x1989, 0x080c, 0x98c8, 0x080c, 0x9b6d, 0x080c,
+	0x98e4, 0x60e3, 0x0000, 0x080c, 0x5cdc, 0x080c, 0x6fe8, 0x00ee,
+	0x00ce, 0x004e, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x2001,
+	0x194e, 0x2003, 0x0001, 0x0005, 0x2001, 0x194e, 0x2003, 0x0000,
+	0x0005, 0x2001, 0x194d, 0x2003, 0xaaaa, 0x0005, 0x2001, 0x194d,
+	0x2003, 0x0000, 0x0005, 0x2071, 0x18f0, 0x7003, 0x0000, 0x7007,
+	0x0000, 0x080c, 0x103b, 0x090c, 0x0d65, 0xa8ab, 0xdcb0, 0x2900,
+	0x704e, 0x080c, 0x103b, 0x090c, 0x0d65, 0xa8ab, 0xdcb0, 0x2900,
+	0x7052, 0xa867, 0x0000, 0xa86b, 0x0001, 0xa89f, 0x0000, 0x0005,
+	0x00e6, 0x2071, 0x0040, 0x6848, 0x9005, 0x1118, 0x9085, 0x0001,
+	0x04b0, 0x6840, 0x9005, 0x0150, 0x04a1, 0x6a50, 0x9200, 0x7002,
+	0x6854, 0x9101, 0x7006, 0x9006, 0x7012, 0x7016, 0x6850, 0x7002,
+	0x6854, 0x7006, 0x6858, 0x700a, 0x685c, 0x700e, 0x6840, 0x9005,
+	0x1110, 0x7012, 0x7016, 0x6848, 0x701a, 0x701c, 0x9085, 0x0040,
+	0x701e, 0x2001, 0x0019, 0x7036, 0x702b, 0x0001, 0x2001, 0x0004,
+	0x200c, 0x918c, 0xfff7, 0x918d, 0x8000, 0x2102, 0x00d6, 0x2069,
+	0x18f0, 0x6807, 0x0001, 0x00de, 0x080c, 0x79c3, 0x9006, 0x00ee,
+	0x0005, 0x900e, 0x0156, 0x20a9, 0x0006, 0x8003, 0x818d, 0x1f04,
+	0x742d, 0x015e, 0x0005, 0x2079, 0x0040, 0x2071, 0x18f0, 0x7004,
+	0x0002, 0x7443, 0x7444, 0x748f, 0x74ea, 0x762b, 0x7441, 0x7441,
+	0x7655, 0x080c, 0x0d65, 0x0005, 0x2079, 0x0040, 0x2001, 0x1dc0,
+	0x2003, 0x0000, 0x782c, 0x908c, 0x0780, 0x190c, 0x7a4f, 0xd0a4,
+	0x0570, 0x2001, 0x1dc0, 0x2004, 0x9082, 0x0080, 0x1640, 0x1d04,
+	0x7461, 0x2001, 0x19d7, 0x200c, 0x8109, 0x0508, 0x2091, 0x6000,
+	0x2102, 0x7824, 0x2048, 0x9006, 0xa802, 0xa806, 0xa864, 0x9084,
+	0x00ff, 0x908a, 0x0040, 0x0608, 0x00b8, 0x2001, 0x1800, 0x200c,
+	0x9186, 0x0003, 0x1160, 0x7104, 0x9186, 0x0004, 0x0140, 0x9186,
+	0x0007, 0x0128, 0x9186, 0x0003, 0x1968, 0x080c, 0x74ea, 0x782c,
+	0xd09c, 0x090c, 0x79c3, 0x0005, 0x9082, 0x005a, 0x1218, 0x2100,
+	0x003b, 0x0c18, 0x080c, 0x7520, 0x0c90, 0x00e3, 0x08f0, 0x0005,
+	0x7520, 0x7520, 0x7520, 0x7520, 0x7520, 0x7520, 0x7520, 0x7520,
+	0x7542, 0x7520, 0x7520, 0x7520, 0x7520, 0x7520, 0x7520, 0x7520,
+	0x7520, 0x7520, 0x7520, 0x7520, 0x7520, 0x7520, 0x7520, 0x7520,
+	0x7520, 0x7520, 0x7520, 0x7520, 0x752c, 0x7520, 0x772a, 0x7520,
+	0x7520, 0x7520, 0x7542, 0x7520, 0x752c, 0x776b, 0x77ac, 0x77f3,
+	0x7807, 0x7520, 0x7520, 0x7542, 0x752c, 0x7520, 0x7520, 0x75ff,
+	0x78b2, 0x78cd, 0x7520, 0x7542, 0x7520, 0x7520, 0x7520, 0x7520,
+	0x75f5, 0x78cd, 0x7520, 0x7520, 0x7520, 0x7520, 0x7520, 0x7520,
+	0x7520, 0x7520, 0x7520, 0x7556, 0x7520, 0x7520, 0x7520, 0x7520,
+	0x7520, 0x7520, 0x7520, 0x7520, 0x7520, 0x79f3, 0x7520, 0x7520,
+	0x7520, 0x7520, 0x7520, 0x756a, 0x7520, 0x7520, 0x7520, 0x7520,
+	0x7520, 0x7520, 0x2079, 0x0040, 0x7004, 0x9086, 0x0003, 0x1198,
+	0x782c, 0x080c, 0x79ec, 0xd0a4, 0x0170, 0x7824, 0x2048, 0x9006,
+	0xa802, 0xa806, 0xa864, 0x9084, 0x00ff, 0x908a, 0x001a, 0x1210,
+	0x002b, 0x0c50, 0x00e9, 0x080c, 0x79c3, 0x0005, 0x7520, 0x752c,
+	0x7716, 0x7520, 0x752c, 0x7520, 0x752c, 0x752c, 0x7520, 0x752c,
+	0x7716, 0x752c, 0x752c, 0x752c, 0x752c, 0x752c, 0x7520, 0x752c,
+	0x7716, 0x7520, 0x7520, 0x752c, 0x7520, 0x7520, 0x7520, 0x752c,
+	0x00e6, 0x2071, 0x18f0, 0x2009, 0x0400, 0x0071, 0x00ee, 0x0005,
+	0x2009, 0x1000, 0x0049, 0x0005, 0x2009, 0x2000, 0x0029, 0x0005,
+	0x2009, 0x0800, 0x0009, 0x0005, 0x7007, 0x0001, 0xa868, 0x9084,
+	0x00ff, 0x9105, 0xa86a, 0x0126, 0x2091, 0x8000, 0x080c, 0x6996,
+	0x012e, 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff, 0x0d08, 0x8001,
+	0x1120, 0x7007, 0x0001, 0x0804, 0x76d4, 0x7007, 0x0003, 0x7012,
+	0x2900, 0x7016, 0x701a, 0x704b, 0x76d4, 0x0005, 0xa864, 0x8007,
+	0x9084, 0x00ff, 0x0968, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804,
+	0x76ef, 0x7007, 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b,
+	0x76ef, 0x0005, 0xa864, 0x8007, 0x9084, 0x00ff, 0x9086, 0x0001,
+	0x1904, 0x7528, 0x7007, 0x0001, 0x2009, 0x1833, 0x210c, 0x81ff,
+	0x1904, 0x75cc, 0xa994, 0x9186, 0x006f, 0x0188, 0x9186, 0x0074,
+	0x15b0, 0x0026, 0x2011, 0x0010, 0x080c, 0x668b, 0x002e, 0x0578,
+	0x0016, 0xa998, 0x080c, 0x66d5, 0x001e, 0x1548, 0x0400, 0x080c,
+	0x70b7, 0x0140, 0xa897, 0x4005, 0xa89b, 0x0016, 0x2001, 0x0030,
+	0x900e, 0x0438, 0x0026, 0x2011, 0x8008, 0x080c, 0x668b, 0x002e,
+	0x01b0, 0x0016, 0x0026, 0x0036, 0xa998, 0xaaa0, 0xab9c, 0x918d,
+	0x8000, 0x080c, 0x66d5, 0x003e, 0x002e, 0x001e, 0x1140, 0xa897,
+	0x4005, 0xa89b, 0x4009, 0x2001, 0x0030, 0x900e, 0x0050, 0xa868,
+	0x9084, 0x00ff, 0xa86a, 0xa883, 0x0000, 0x080c, 0x5f07, 0x1108,
+	0x0005, 0x0126, 0x2091, 0x8000, 0xa867, 0x0139, 0xa87a, 0xa982,
+	0x080c, 0x6996, 0x012e, 0x0ca0, 0xa994, 0x9186, 0x0071, 0x0904,
+	0x757a, 0x9186, 0x0064, 0x0904, 0x757a, 0x9186, 0x007c, 0x0904,
+	0x757a, 0x9186, 0x0028, 0x0904, 0x757a, 0x9186, 0x0038, 0x0904,
+	0x757a, 0x9186, 0x0078, 0x0904, 0x757a, 0x9186, 0x005f, 0x0904,
+	0x757a, 0x9186, 0x0056, 0x0904, 0x757a, 0xa897, 0x4005, 0xa89b,
+	0x0001, 0x2001, 0x0030, 0x900e, 0x0860, 0xa87c, 0x9084, 0x00c0,
+	0x9086, 0x00c0, 0x1120, 0x7007, 0x0001, 0x0804, 0x78e4, 0x2900,
+	0x7016, 0x701a, 0x20a9, 0x0004, 0xa860, 0x20e0, 0xa85c, 0x9080,
+	0x0030, 0x2098, 0x7050, 0x2040, 0xa060, 0x20e8, 0xa05c, 0x9080,
+	0x0023, 0x20a0, 0x4003, 0xa888, 0x7012, 0x9082, 0x0401, 0x1a04,
+	0x7530, 0xaab4, 0x928a, 0x0002, 0x1a04, 0x7530, 0x82ff, 0x1138,
+	0xa8b8, 0xa9bc, 0x9105, 0x0118, 0x2001, 0x7692, 0x0018, 0x9280,
+	0x7688, 0x2005, 0x7056, 0x7010, 0x9015, 0x0904, 0x7673, 0x080c,
+	0x103b, 0x1118, 0x7007, 0x0004, 0x0005, 0x2900, 0x7022, 0x7054,
+	0x2060, 0xe000, 0xa866, 0x7050, 0x2040, 0xa95c, 0xe004, 0x9100,
+	0xa076, 0xa860, 0xa072, 0xe008, 0x920a, 0x1210, 0x900e, 0x2200,
+	0x7112, 0xe20c, 0x8003, 0x800b, 0x9296, 0x0004, 0x0108, 0x9108,
+	0xa17a, 0x810b, 0xa17e, 0x080c, 0x110c, 0xa06c, 0x908e, 0x0100,
+	0x0170, 0x9086, 0x0200, 0x0118, 0x7007, 0x0007, 0x0005, 0x7020,
+	0x2048, 0x080c, 0x1054, 0x7014, 0x2048, 0x0804, 0x7530, 0x7020,
+	0x2048, 0x7018, 0xa802, 0xa807, 0x0000, 0x2908, 0x2048, 0xa906,
+	0x711a, 0x0804, 0x762b, 0x7014, 0x2048, 0x7007, 0x0001, 0xa8b4,
+	0x9005, 0x1128, 0xa8b8, 0xa9bc, 0x9105, 0x0108, 0x00b9, 0xa864,
+	0x9084, 0x00ff, 0x9086, 0x001e, 0x0904, 0x78e4, 0x0804, 0x76d4,
+	0x768a, 0x768e, 0x0002, 0x001d, 0x0007, 0x0004, 0x000a, 0x001b,
+	0x0005, 0x0006, 0x000a, 0x001d, 0x0005, 0x0004, 0x0076, 0x0066,
+	0xafb8, 0xaebc, 0xa804, 0x2050, 0xb0c0, 0xb0e2, 0xb0bc, 0xb0de,
+	0xb0b8, 0xb0d2, 0xb0b4, 0xb0ce, 0xb6da, 0xb7d6, 0xb0b0, 0xb0ca,
+	0xb0ac, 0xb0c6, 0xb0a8, 0xb0ba, 0xb0a4, 0xb0b6, 0xb6c2, 0xb7be,
+	0xb0a0, 0xb0b2, 0xb09c, 0xb0ae, 0xb098, 0xb0a2, 0xb094, 0xb09e,
+	0xb6aa, 0xb7a6, 0xb090, 0xb09a, 0xb08c, 0xb096, 0xb088, 0xb08a,
+	0xb084, 0xb086, 0xb692, 0xb78e, 0xb080, 0xb082, 0xb07c, 0xb07e,
+	0xb078, 0xb072, 0xb074, 0xb06e, 0xb67a, 0xb776, 0xb004, 0x9055,
+	0x1958, 0x006e, 0x007e, 0x0005, 0x2009, 0x1833, 0x210c, 0x81ff,
+	0x1178, 0x080c, 0x5d56, 0x1108, 0x0005, 0x080c, 0x6bb3, 0x0126,
+	0x2091, 0x8000, 0x080c, 0xbb45, 0x080c, 0x6996, 0x012e, 0x0ca0,
+	0x080c, 0xbf5a, 0x1d70, 0x2001, 0x0028, 0x900e, 0x0c70, 0x2009,
+	0x1833, 0x210c, 0x81ff, 0x11d8, 0xa888, 0x9005, 0x01e0, 0xa883,
+	0x0000, 0xa87c, 0xd0f4, 0x0120, 0x080c, 0x5e69, 0x1138, 0x0005,
+	0x9006, 0xa87a, 0x080c, 0x5de4, 0x1108, 0x0005, 0x0126, 0x2091,
+	0x8000, 0xa87a, 0xa982, 0x080c, 0x6996, 0x012e, 0x0cb0, 0x2001,
+	0x0028, 0x900e, 0x0c98, 0x2001, 0x0000, 0x0c80, 0x7018, 0xa802,
+	0x2908, 0x2048, 0xa906, 0x711a, 0x7010, 0x8001, 0x7012, 0x0118,
+	0x7007, 0x0003, 0x0030, 0x7014, 0x2048, 0x7007, 0x0001, 0x7048,
+	0x080f, 0x0005, 0x00b6, 0x7007, 0x0001, 0xa974, 0xa878, 0x9084,
+	0x00ff, 0x9096, 0x0004, 0x0540, 0x20a9, 0x0001, 0x9096, 0x0001,
+	0x0190, 0x900e, 0x20a9, 0x0800, 0x9096, 0x0002, 0x0160, 0x9005,
+	0x11d8, 0xa974, 0x080c, 0x6270, 0x11b8, 0x0066, 0xae80, 0x080c,
+	0x6380, 0x006e, 0x0088, 0x0046, 0x2011, 0x180c, 0x2224, 0xc484,
+	0x2412, 0x004e, 0x00c6, 0x080c, 0x6270, 0x1110, 0x080c, 0x654f,
+	0x8108, 0x1f04, 0x7753, 0x00ce, 0xa87c, 0xd084, 0x1120, 0x080c,
+	0x1054, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x6996,
+	0x012e, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000, 0x7007, 0x0001,
+	0x080c, 0x6663, 0x0580, 0x2061, 0x1a3f, 0x6100, 0xd184, 0x0178,
+	0xa888, 0x9084, 0x00ff, 0x1550, 0x6000, 0xd084, 0x0520, 0x6004,
+	0x9005, 0x1538, 0x6003, 0x0000, 0x600b, 0x0000, 0x00c8, 0x2011,
+	0x0001, 0xa890, 0x9005, 0x1110, 0x2001, 0x001e, 0x8000, 0x6016,
+	0xa888, 0x9084, 0x00ff, 0x0178, 0x6006, 0xa888, 0x8007, 0x9084,
+	0x00ff, 0x0148, 0x600a, 0xa888, 0x8000, 0x1108, 0xc28d, 0x6202,
+	0x012e, 0x0804, 0x79ad, 0x012e, 0x0804, 0x79a7, 0x012e, 0x0804,
+	0x79a1, 0x012e, 0x0804, 0x79a4, 0x0126, 0x2091, 0x8000, 0x7007,
+	0x0001, 0x080c, 0x6663, 0x05e0, 0x2061, 0x1a3f, 0x6000, 0xd084,
+	0x05b8, 0x6204, 0x6308, 0xd08c, 0x1530, 0xac78, 0x9484, 0x0003,
+	0x0170, 0xa988, 0x918c, 0x00ff, 0x8001, 0x1120, 0x2100, 0x9210,
+	0x0620, 0x0028, 0x8001, 0x1508, 0x2100, 0x9212, 0x02f0, 0x9484,
+	0x000c, 0x0188, 0xa988, 0x810f, 0x918c, 0x00ff, 0x9082, 0x0004,
+	0x1120, 0x2100, 0x9318, 0x0288, 0x0030, 0x9082, 0x0004, 0x1168,
+	0x2100, 0x931a, 0x0250, 0xa890, 0x9005, 0x0110, 0x8000, 0x6016,
+	0x6206, 0x630a, 0x012e, 0x0804, 0x79ad, 0x012e, 0x0804, 0x79aa,
+	0x012e, 0x0804, 0x79a7, 0x0126, 0x2091, 0x8000, 0x7007, 0x0001,
+	0x2061, 0x1a3f, 0x6300, 0xd38c, 0x1120, 0x6308, 0x8318, 0x0220,
+	0x630a, 0x012e, 0x0804, 0x79bb, 0x012e, 0x0804, 0x79aa, 0x00b6,
+	0x0126, 0x00c6, 0x2091, 0x8000, 0x7007, 0x0001, 0xa87c, 0xd0ac,
+	0x0148, 0x00c6, 0x2061, 0x1a3f, 0x6000, 0x9084, 0xfcff, 0x6002,
+	0x00ce, 0x0440, 0xa888, 0x9005, 0x05d8, 0xa88c, 0x9065, 0x0598,
+	0x2001, 0x1833, 0x2004, 0x9005, 0x0118, 0x080c, 0x9c21, 0x0068,
+	0x6017, 0xf400, 0x6063, 0x0000, 0xa97c, 0xd1a4, 0x0110, 0xa980,
+	0x6162, 0x2009, 0x0041, 0x080c, 0x9c85, 0xa988, 0x918c, 0xff00,
+	0x9186, 0x2000, 0x1138, 0x0026, 0x900e, 0x2011, 0xfdff, 0x080c,
+	0x83eb, 0x002e, 0xa87c, 0xd0c4, 0x0148, 0x2061, 0x1a3f, 0x6000,
+	0xd08c, 0x1120, 0x6008, 0x8000, 0x0208, 0x600a, 0x00ce, 0x012e,
+	0x00be, 0x0804, 0x79ad, 0x00ce, 0x012e, 0x00be, 0x0804, 0x79a7,
+	0xa984, 0x9186, 0x002e, 0x0d30, 0x9186, 0x002d, 0x0d18, 0x9186,
+	0x0045, 0x0510, 0x9186, 0x002a, 0x1130, 0x2001, 0x180c, 0x200c,
+	0xc194, 0x2102, 0x08b8, 0x9186, 0x0020, 0x0158, 0x9186, 0x0029,
+	0x1d10, 0xa974, 0x080c, 0x6270, 0x1968, 0xb800, 0xc0e4, 0xb802,
+	0x0848, 0xa88c, 0x9065, 0x09b8, 0x6007, 0x0024, 0x2001, 0x1957,
+	0x2004, 0x601a, 0x0804, 0x7842, 0xa88c, 0x9065, 0x0960, 0x00e6,
+	0xa890, 0x9075, 0x2001, 0x1833, 0x2004, 0x9005, 0x0150, 0x080c,
+	0x9c21, 0x8eff, 0x0118, 0x2e60, 0x080c, 0x9c21, 0x00ee, 0x0804,
+	0x7842, 0x6024, 0xc0dc, 0xc0d5, 0x6026, 0x2e60, 0x6007, 0x003a,
+	0xa8a0, 0x9005, 0x0130, 0x6007, 0x003b, 0xa8a4, 0x602e, 0xa8a8,
+	0x6016, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x84d1, 0x00ee,
+	0x0804, 0x7842, 0x2061, 0x1a3f, 0x6000, 0xd084, 0x0190, 0xd08c,
+	0x1904, 0x79bb, 0x0126, 0x2091, 0x8000, 0x6204, 0x8210, 0x0220,
+	0x6206, 0x012e, 0x0804, 0x79bb, 0x012e, 0xa883, 0x0016, 0x0804,
+	0x79b4, 0xa883, 0x0007, 0x0804, 0x79b4, 0xa864, 0x8007, 0x9084,
+	0x00ff, 0x0130, 0x8001, 0x1138, 0x7007, 0x0001, 0x0069, 0x0005,
+	0x080c, 0x7528, 0x0040, 0x7007, 0x0003, 0x7012, 0x2900, 0x7016,
+	0x701a, 0x704b, 0x78e4, 0x0005, 0x00b6, 0x00e6, 0x0126, 0x2091,
+	0x8000, 0x903e, 0x2061, 0x1800, 0x61cc, 0x81ff, 0x1904, 0x7966,
+	0x6130, 0xd194, 0x1904, 0x7990, 0xa878, 0x2070, 0x9e82, 0x1ddc,
+	0x0a04, 0x795a, 0x6064, 0x9e02, 0x1a04, 0x795a, 0x7120, 0x9186,
+	0x0006, 0x1904, 0x794c, 0x7010, 0x905d, 0x0904, 0x7966, 0xb800,
+	0xd0e4, 0x1904, 0x798a, 0x2061, 0x1a3f, 0x6100, 0x9184, 0x0301,
+	0x9086, 0x0001, 0x15a0, 0x7024, 0xd0dc, 0x1904, 0x7993, 0xa883,
+	0x0000, 0xa803, 0x0000, 0x2908, 0x7014, 0x9005, 0x1198, 0x7116,
+	0xa87c, 0xd0f4, 0x1904, 0x7996, 0x080c, 0x538d, 0xd09c, 0x1118,
+	0xa87c, 0xc0cc, 0xa87e, 0x2e60, 0x080c, 0x82de, 0x012e, 0x00ee,
+	0x00be, 0x0005, 0x2048, 0xa800, 0x9005, 0x1de0, 0xa902, 0x2148,
+	0xa87c, 0xd0f4, 0x1904, 0x7996, 0x012e, 0x00ee, 0x00be, 0x0005,
+	0x012e, 0x00ee, 0xa883, 0x0006, 0x00be, 0x0804, 0x79b4, 0xd184,
+	0x0db8, 0xd1c4, 0x1190, 0x00a0, 0xa974, 0x080c, 0x6270, 0x15d0,
+	0xb800, 0xd0e4, 0x15b8, 0x7120, 0x9186, 0x0007, 0x1118, 0xa883,
+	0x0002, 0x0490, 0xa883, 0x0008, 0x0478, 0xa883, 0x000e, 0x0460,
+	0xa883, 0x0017, 0x0448, 0xa883, 0x0035, 0x0430, 0x080c, 0x5391,
+	0xd0fc, 0x01e8, 0xa878, 0x2070, 0x9e82, 0x1ddc, 0x02c0, 0x6064,
+	0x9e02, 0x12a8, 0x7120, 0x9186, 0x0006, 0x1188, 0x7010, 0x905d,
+	0x0170, 0xb800, 0xd0bc, 0x0158, 0x2039, 0x0001, 0x7000, 0x9086,
+	0x0007, 0x1904, 0x78f0, 0x7003, 0x0002, 0x0804, 0x78f0, 0xa883,
+	0x0028, 0x0010, 0xa883, 0x0029, 0x012e, 0x00ee, 0x00be, 0x0420,
+	0xa883, 0x002a, 0x0cc8, 0xa883, 0x0045, 0x0cb0, 0x2e60, 0x2019,
+	0x0002, 0x601b, 0x0014, 0x080c, 0xcdf9, 0x012e, 0x00ee, 0x00be,
+	0x0005, 0x2009, 0x003e, 0x0058, 0x2009, 0x0004, 0x0040, 0x2009,
+	0x0006, 0x0028, 0x2009, 0x0016, 0x0010, 0x2009, 0x0001, 0xa884,
+	0x9084, 0xff00, 0x9105, 0xa886, 0x0126, 0x2091, 0x8000, 0x080c,
+	0x6996, 0x012e, 0x0005, 0x080c, 0x1054, 0x0005, 0x00d6, 0x080c,
+	0x82d5, 0x00de, 0x0005, 0x00d6, 0x00e6, 0x0126, 0x2091, 0x8000,
+	0x2071, 0x0040, 0x702c, 0xd084, 0x01d8, 0x908c, 0x0780, 0x190c,
+	0x7a4f, 0xd09c, 0x11a8, 0x2071, 0x1800, 0x70bc, 0x90ea, 0x0040,
+	0x0278, 0x8001, 0x70be, 0x702c, 0x2048, 0xa800, 0x702e, 0x9006,
+	0xa802, 0xa806, 0x2071, 0x0040, 0x2900, 0x7022, 0x702c, 0x0c28,
+	0x012e, 0x00ee, 0x00de, 0x0005, 0x0006, 0x9084, 0x0780, 0x190c,
+	0x7a4f, 0x000e, 0x0005, 0x00d6, 0x00c6, 0x0036, 0x0026, 0x0016,
+	0x00b6, 0x7007, 0x0001, 0xaa74, 0x9282, 0x0004, 0x1a04, 0x7a40,
+	0xa97c, 0x9188, 0x1000, 0x2104, 0x905d, 0xb804, 0xd284, 0x0140,
+	0x05e8, 0x8007, 0x9084, 0x00ff, 0x9084, 0x0006, 0x1108, 0x04b0,
+	0x2b10, 0x080c, 0x9b91, 0x1118, 0x080c, 0x9c58, 0x05a8, 0x6212,
+	0xa874, 0x0002, 0x7a1e, 0x7a23, 0x7a26, 0x7a2c, 0x2019, 0x0002,
+	0x080c, 0xd1eb, 0x0060, 0x080c, 0xd17b, 0x0048, 0x2019, 0x0002,
+	0xa980, 0x080c, 0xd19a, 0x0018, 0xa980, 0x080c, 0xd17b, 0x080c,
+	0x9be7, 0xa887, 0x0000, 0x0126, 0x2091, 0x8000, 0x080c, 0x6996,
+	0x012e, 0x00be, 0x001e, 0x002e, 0x003e, 0x00ce, 0x00de, 0x0005,
+	0xa887, 0x0006, 0x0c80, 0xa887, 0x0002, 0x0c68, 0xa887, 0x0005,
+	0x0c50, 0xa887, 0x0004, 0x0c38, 0xa887, 0x0007, 0x0c20, 0x2091,
+	0x8000, 0x0e04, 0x7a51, 0x0006, 0x0016, 0x2001, 0x8003, 0x0006,
+	0x0804, 0x0d6e, 0x2001, 0x1833, 0x2004, 0x9005, 0x0005, 0x0005,
+	0x00f6, 0x2079, 0x0300, 0x2001, 0x0200, 0x200c, 0xc1e5, 0xc1dc,
+	0x2102, 0x2009, 0x0218, 0x210c, 0xd1ec, 0x1120, 0x080c, 0x152d,
+	0x00fe, 0x0005, 0x2001, 0x020d, 0x2003, 0x0020, 0x781f, 0x0300,
+	0x00fe, 0x0005, 0x781c, 0xd08c, 0x0904, 0x7ad2, 0x68bc, 0x90aa,
+	0x0005, 0x0a04, 0x806b, 0x7d44, 0x7c40, 0xd59c, 0x190c, 0x0d65,
+	0x9584, 0x00f6, 0x1508, 0x9484, 0x7000, 0x0138, 0x908a, 0x2000,
+	0x1258, 0x9584, 0x0700, 0x8007, 0x04f0, 0x7000, 0x9084, 0xff00,
+	0x9086, 0x8100, 0x0db0, 0x00b0, 0x9484, 0x0fff, 0x1130, 0x7000,
+	0x9084, 0xff00, 0x9086, 0x8100, 0x11c0, 0x080c, 0xd5d3, 0x080c,
+	0x7fb2, 0x7817, 0x0140, 0x00a8, 0x9584, 0x0076, 0x1118, 0x080c,
+	0x800e, 0x19c8, 0xd5a4, 0x0148, 0x0046, 0x0056, 0x080c, 0x7b22,
+	0x080c, 0x1fb7, 0x005e, 0x004e, 0x0020, 0x080c, 0xd5d3, 0x7817,
+	0x0140, 0x080c, 0x70b7, 0x0168, 0x2001, 0x0111, 0x2004, 0xd08c,
+	0x0140, 0x688f, 0x0000, 0x2001, 0x0110, 0x2003, 0x0008, 0x2003,
+	0x0000, 0x0489, 0x0005, 0x0002, 0x7adf, 0x7dd4, 0x7adc, 0x7adc,
+	0x7adc, 0x7adc, 0x7adc, 0x7adc, 0x7817, 0x0140, 0x0005, 0x7000,
+	0x908c, 0xff00, 0x9194, 0xf000, 0x810f, 0x9484, 0x0fff, 0x688e,
+	0x9286, 0x2000, 0x1150, 0x6800, 0x9086, 0x0001, 0x1118, 0x080c,
+	0x53ee, 0x0070, 0x080c, 0x7b42, 0x0058, 0x9286, 0x3000, 0x1118,
+	0x080c, 0x7d11, 0x0028, 0x9286, 0x8000, 0x1110, 0x080c, 0x7ee8,
+	0x7817, 0x0140, 0x0005, 0x2001, 0x1810, 0x2004, 0xd08c, 0x0178,
+	0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1148, 0x0026, 0x0036,
+	0x2011, 0x8048, 0x2518, 0x080c, 0x48d8, 0x003e, 0x002e, 0x0005,
+	0x0036, 0x0046, 0x0056, 0x00f6, 0x2079, 0x0200, 0x2019, 0xfffe,
+	0x7c30, 0x0050, 0x0036, 0x0046, 0x0056, 0x00f6, 0x2079, 0x0200,
+	0x7d44, 0x7c40, 0x2019, 0xffff, 0x2001, 0x1810, 0x2004, 0xd08c,
+	0x0160, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1130, 0x0026,
+	0x2011, 0x8048, 0x080c, 0x48d8, 0x002e, 0x00fe, 0x005e, 0x004e,
+	0x003e, 0x0005, 0x00b6, 0x00c6, 0x7010, 0x9084, 0xff00, 0x8007,
+	0x9096, 0x0001, 0x0120, 0x9096, 0x0023, 0x1904, 0x7ce2, 0x9186,
+	0x0023, 0x15c0, 0x080c, 0x7f7d, 0x0904, 0x7ce2, 0x6120, 0x9186,
+	0x0001, 0x0150, 0x9186, 0x0004, 0x0138, 0x9186, 0x0008, 0x0120,
+	0x9186, 0x000a, 0x1904, 0x7ce2, 0x7124, 0x610a, 0x7030, 0x908e,
+	0x0200, 0x1130, 0x2009, 0x0015, 0x080c, 0x9c85, 0x0804, 0x7ce2,
+	0x908e, 0x0214, 0x0118, 0x908e, 0x0210, 0x1130, 0x2009, 0x0015,
+	0x080c, 0x9c85, 0x0804, 0x7ce2, 0x908e, 0x0100, 0x1904, 0x7ce2,
+	0x7034, 0x9005, 0x1904, 0x7ce2, 0x2009, 0x0016, 0x080c, 0x9c85,
+	0x0804, 0x7ce2, 0x9186, 0x0022, 0x1904, 0x7ce2, 0x7030, 0x908e,
+	0x0300, 0x1580, 0x68d8, 0xd0a4, 0x0528, 0xc0b5, 0x68da, 0x7100,
+	0x918c, 0x00ff, 0x697a, 0x7004, 0x687e, 0x00f6, 0x2079, 0x0100,
+	0x79e6, 0x78ea, 0x0006, 0x9084, 0x00ff, 0x0016, 0x2008, 0x080c,
+	0x246d, 0x7932, 0x7936, 0x001e, 0x000e, 0x00fe, 0x080c, 0x2424,
+	0x695a, 0x703c, 0x00e6, 0x2071, 0x0140, 0x7086, 0x2071, 0x1800,
+	0x70b2, 0x00ee, 0x7034, 0x9005, 0x1904, 0x7ce2, 0x2009, 0x0017,
+	0x0804, 0x7c92, 0x908e, 0x0400, 0x1190, 0x7034, 0x9005, 0x1904,
+	0x7ce2, 0x080c, 0x70b7, 0x0120, 0x2009, 0x001d, 0x0804, 0x7c92,
+	0x68d8, 0xc0a5, 0x68da, 0x2009, 0x0030, 0x0804, 0x7c92, 0x908e,
+	0x0500, 0x1140, 0x7034, 0x9005, 0x1904, 0x7ce2, 0x2009, 0x0018,
+	0x0804, 0x7c92, 0x908e, 0x2010, 0x1120, 0x2009, 0x0019, 0x0804,
+	0x7c92, 0x908e, 0x2110, 0x1120, 0x2009, 0x001a, 0x0804, 0x7c92,
+	0x908e, 0x5200, 0x1140, 0x7034, 0x9005, 0x1904, 0x7ce2, 0x2009,
+	0x001b, 0x0804, 0x7c92, 0x908e, 0x5000, 0x1140, 0x7034, 0x9005,
+	0x1904, 0x7ce2, 0x2009, 0x001c, 0x0804, 0x7c92, 0x908e, 0x1300,
+	0x1120, 0x2009, 0x0034, 0x0804, 0x7c92, 0x908e, 0x1200, 0x1140,
+	0x7034, 0x9005, 0x1904, 0x7ce2, 0x2009, 0x0024, 0x0804, 0x7c92,
+	0x908c, 0xff00, 0x918e, 0x2400, 0x1170, 0x2009, 0x002d, 0x2001,
+	0x1810, 0x2004, 0xd09c, 0x0904, 0x7c92, 0x080c, 0xc62f, 0x1904,
+	0x7ce2, 0x0804, 0x7c90, 0x908c, 0xff00, 0x918e, 0x5300, 0x1120,
+	0x2009, 0x002a, 0x0804, 0x7c92, 0x908e, 0x0f00, 0x1120, 0x2009,
+	0x0020, 0x0804, 0x7c92, 0x908e, 0x6104, 0x1528, 0x2029, 0x0205,
+	0x2011, 0x026d, 0x8208, 0x2204, 0x9082, 0x0004, 0x8004, 0x8004,
+	0x20a8, 0x2011, 0x8015, 0x211c, 0x8108, 0x0046, 0x2124, 0x080c,
+	0x48d8, 0x004e, 0x8108, 0x0f04, 0x7c5e, 0x9186, 0x0280, 0x1d88,
+	0x2504, 0x8000, 0x202a, 0x2009, 0x0260, 0x0c58, 0x202b, 0x0000,
+	0x2009, 0x0023, 0x0478, 0x908e, 0x6000, 0x1118, 0x2009, 0x003f,
+	0x0448, 0x908e, 0x7800, 0x1118, 0x2009, 0x0045, 0x0418, 0x908e,
+	0x1000, 0x1118, 0x2009, 0x004e, 0x00e8, 0x908e, 0x6300, 0x1118,
+	0x2009, 0x004a, 0x00b8, 0x908c, 0xff00, 0x918e, 0x5600, 0x1118,
+	0x2009, 0x004f, 0x0078, 0x908c, 0xff00, 0x918e, 0x5700, 0x1118,
+	0x2009, 0x0050, 0x0038, 0x2009, 0x001d, 0x6838, 0xd0d4, 0x0110,
+	0x2009, 0x004c, 0x0016, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c,
+	0x080c, 0x2424, 0x1904, 0x7ce5, 0x080c, 0x6210, 0x1904, 0x7ce5,
+	0xbe12, 0xbd16, 0x001e, 0x0016, 0x080c, 0x70b7, 0x01c0, 0x68d8,
+	0xd08c, 0x1148, 0x7000, 0x9084, 0x00ff, 0x1188, 0x7004, 0x9084,
+	0xff00, 0x1168, 0x0040, 0x6878, 0x9606, 0x1148, 0x687c, 0x9506,
+	0x9084, 0xff00, 0x1120, 0x9584, 0x00ff, 0xb886, 0x0080, 0xb884,
 	0x9005, 0x1168, 0x9186, 0x0046, 0x1150, 0x6878, 0x9606, 0x1138,
 	0x687c, 0x9506, 0x9084, 0xff00, 0x1110, 0x001e, 0x0098, 0x080c,
-	0x9b76, 0x01a8, 0x2b08, 0x6112, 0x6023, 0x0004, 0x7120, 0x610a,
+	0x9b91, 0x01a8, 0x2b08, 0x6112, 0x6023, 0x0004, 0x7120, 0x610a,
 	0x001e, 0x9186, 0x004c, 0x1110, 0x6023, 0x000a, 0x0016, 0x001e,
-	0x080c, 0x9c6a, 0x00ce, 0x00be, 0x0005, 0x001e, 0x0cd8, 0x2001,
-	0x180e, 0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x48d1,
-	0x080c, 0x9c3d, 0x0d90, 0x2b08, 0x6112, 0x6023, 0x0004, 0x7120,
+	0x080c, 0x9c85, 0x00ce, 0x00be, 0x0005, 0x001e, 0x0cd8, 0x2001,
+	0x180e, 0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x48d8,
+	0x080c, 0x9c58, 0x0d90, 0x2b08, 0x6112, 0x6023, 0x0004, 0x7120,
 	0x610a, 0x001e, 0x0016, 0x9186, 0x0017, 0x0118, 0x9186, 0x0030,
 	0x1128, 0x6007, 0x0009, 0x6017, 0x2900, 0x0020, 0x6007, 0x0051,
-	0x6017, 0x0000, 0x602f, 0x0009, 0x6003, 0x0001, 0x080c, 0x84b0,
-	0x08a0, 0x080c, 0x3149, 0x1140, 0x7010, 0x9084, 0xff00, 0x8007,
+	0x6017, 0x0000, 0x602f, 0x0009, 0x6003, 0x0001, 0x080c, 0x84d8,
+	0x08a0, 0x080c, 0x3150, 0x1140, 0x7010, 0x9084, 0xff00, 0x8007,
 	0x908e, 0x0008, 0x1108, 0x0009, 0x0005, 0x00b6, 0x00c6, 0x0046,
 	0x7000, 0x908c, 0xff00, 0x810f, 0x9186, 0x0033, 0x11e8, 0x080c,
-	0x7f55, 0x0904, 0x7d44, 0x7124, 0x610a, 0x7030, 0x908e, 0x0200,
-	0x1140, 0x7034, 0x9005, 0x15c0, 0x2009, 0x0015, 0x080c, 0x9c6a,
+	0x7f7d, 0x0904, 0x7d6c, 0x7124, 0x610a, 0x7030, 0x908e, 0x0200,
+	0x1140, 0x7034, 0x9005, 0x15c0, 0x2009, 0x0015, 0x080c, 0x9c85,
 	0x0498, 0x908e, 0x0100, 0x1580, 0x7034, 0x9005, 0x1568, 0x2009,
-	0x0016, 0x080c, 0x9c6a, 0x0440, 0x9186, 0x0032, 0x1528, 0x7030,
+	0x0016, 0x080c, 0x9c85, 0x0440, 0x9186, 0x0032, 0x1528, 0x7030,
 	0x908e, 0x1400, 0x1508, 0x2009, 0x0038, 0x0016, 0x2011, 0x0263,
-	0x2204, 0x8211, 0x220c, 0x080c, 0x2424, 0x11a8, 0x080c, 0x6209,
-	0x1190, 0xbe12, 0xbd16, 0x080c, 0x9b76, 0x0168, 0x2b08, 0x6112,
-	0x080c, 0xbcc0, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x080c,
-	0x9c6a, 0x0010, 0x00ce, 0x001e, 0x004e, 0x00ce, 0x00be, 0x0005,
+	0x2204, 0x8211, 0x220c, 0x080c, 0x2424, 0x11a8, 0x080c, 0x6210,
+	0x1190, 0xbe12, 0xbd16, 0x080c, 0x9b91, 0x0168, 0x2b08, 0x6112,
+	0x080c, 0xbcdb, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x080c,
+	0x9c85, 0x0010, 0x00ce, 0x001e, 0x004e, 0x00ce, 0x00be, 0x0005,
 	0x00b6, 0x0046, 0x00e6, 0x00d6, 0x2028, 0x2130, 0x9696, 0x00ff,
 	0x11b8, 0x9592, 0xfffc, 0x02a0, 0x9596, 0xfffd, 0x1120, 0x2009,
-	0x007f, 0x0804, 0x7da6, 0x9596, 0xfffe, 0x1120, 0x2009, 0x007e,
-	0x0804, 0x7da6, 0x9596, 0xfffc, 0x1118, 0x2009, 0x0080, 0x04f0,
+	0x007f, 0x0804, 0x7dce, 0x9596, 0xfffe, 0x1120, 0x2009, 0x007e,
+	0x0804, 0x7dce, 0x9596, 0xfffc, 0x1118, 0x2009, 0x0080, 0x04f0,
 	0x2011, 0x0000, 0x2019, 0x1836, 0x231c, 0xd3ac, 0x0130, 0x9026,
 	0x20a9, 0x0800, 0x2071, 0x1000, 0x0030, 0x2021, 0x0081, 0x20a9,
 	0x077f, 0x2071, 0x1081, 0x2e1c, 0x93dd, 0x0000, 0x1140, 0x82ff,
 	0x11d0, 0x9496, 0x00ff, 0x01b8, 0x2410, 0xc2fd, 0x00a0, 0xbf10,
 	0x2600, 0x9706, 0xb814, 0x1120, 0x9546, 0x1110, 0x2408, 0x00b0,
 	0x9745, 0x1148, 0x94c6, 0x007e, 0x0130, 0x94c6, 0x007f, 0x0118,
-	0x94c6, 0x0080, 0x1d20, 0x8420, 0x8e70, 0x1f04, 0x7d7b, 0x82ff,
+	0x94c6, 0x0080, 0x1d20, 0x8420, 0x8e70, 0x1f04, 0x7da3, 0x82ff,
 	0x1118, 0x9085, 0x0001, 0x0018, 0xc2fc, 0x2208, 0x9006, 0x00de,
 	0x00ee, 0x004e, 0x00be, 0x0005, 0x7000, 0x908c, 0xff00, 0x810f,
-	0x9184, 0x000f, 0x0002, 0x7dc3, 0x7dc3, 0x7dc3, 0x7f67, 0x7dc3,
-	0x7dc6, 0x7deb, 0x7e74, 0x7dc3, 0x7dc3, 0x7dc3, 0x7dc3, 0x7dc3,
-	0x7dc3, 0x7dc3, 0x7dc3, 0x7817, 0x0140, 0x0005, 0x00b6, 0x7110,
+	0x9184, 0x000f, 0x0002, 0x7deb, 0x7deb, 0x7deb, 0x7f8f, 0x7deb,
+	0x7dee, 0x7e13, 0x7e9c, 0x7deb, 0x7deb, 0x7deb, 0x7deb, 0x7deb,
+	0x7deb, 0x7deb, 0x7deb, 0x7817, 0x0140, 0x0005, 0x00b6, 0x7110,
 	0xd1bc, 0x01e8, 0x7120, 0x2160, 0x9c8c, 0x0003, 0x11c0, 0x9c8a,
 	0x1ddc, 0x02a8, 0x6864, 0x9c02, 0x1290, 0x7008, 0x9084, 0x00ff,
 	0x6110, 0x2158, 0xb910, 0x9106, 0x1150, 0x700c, 0xb914, 0x9106,
-	0x1130, 0x7124, 0x610a, 0x2009, 0x0046, 0x080c, 0x9c6a, 0x7817,
+	0x1130, 0x7124, 0x610a, 0x2009, 0x0046, 0x080c, 0x9c85, 0x7817,
 	0x0140, 0x00be, 0x0005, 0x00b6, 0x00c6, 0x9484, 0x0fff, 0x0904,
-	0x7e50, 0x7110, 0xd1bc, 0x1904, 0x7e50, 0x7108, 0x700c, 0x2028,
+	0x7e78, 0x7110, 0xd1bc, 0x1904, 0x7e78, 0x7108, 0x700c, 0x2028,
 	0x918c, 0x00ff, 0x2130, 0x9094, 0xff00, 0x15c8, 0x81ff, 0x15b8,
-	0x9080, 0x3184, 0x200d, 0x918c, 0xff00, 0x810f, 0x2001, 0x0080,
-	0x9106, 0x0904, 0x7e50, 0x9182, 0x0801, 0x1a04, 0x7e50, 0x9190,
+	0x9080, 0x318b, 0x200d, 0x918c, 0xff00, 0x810f, 0x2001, 0x0080,
+	0x9106, 0x0904, 0x7e78, 0x9182, 0x0801, 0x1a04, 0x7e78, 0x9190,
 	0x1000, 0x2204, 0x905d, 0x05e0, 0xbe12, 0xbd16, 0xb800, 0xd0ec,
 	0x15b8, 0xba04, 0x9294, 0xff00, 0x9286, 0x0600, 0x1190, 0x080c,
-	0x9b76, 0x0598, 0x2b08, 0x7028, 0x6052, 0x702c, 0x604e, 0x6112,
-	0x6023, 0x0006, 0x7120, 0x610a, 0x7130, 0x615e, 0x080c, 0xc873,
-	0x00f8, 0x080c, 0x6660, 0x1138, 0xb807, 0x0606, 0x0c40, 0x190c,
-	0x7d48, 0x11b0, 0x0880, 0x080c, 0x9b76, 0x2b08, 0x0188, 0x6112,
+	0x9b91, 0x0598, 0x2b08, 0x7028, 0x6052, 0x702c, 0x604e, 0x6112,
+	0x6023, 0x0006, 0x7120, 0x610a, 0x7130, 0x615e, 0x080c, 0xc893,
+	0x00f8, 0x080c, 0x6667, 0x1138, 0xb807, 0x0606, 0x0c40, 0x190c,
+	0x7d70, 0x11b0, 0x0880, 0x080c, 0x9b91, 0x2b08, 0x0188, 0x6112,
 	0x6023, 0x0004, 0x7120, 0x610a, 0x9286, 0x0400, 0x1118, 0x6007,
-	0x0005, 0x0010, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x84b0,
+	0x0005, 0x0010, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x84d8,
 	0x7817, 0x0140, 0x00ce, 0x00be, 0x0005, 0x2001, 0x180e, 0x2004,
-	0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x48d1, 0x080c, 0x9c3d,
+	0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x48d8, 0x080c, 0x9c58,
 	0x0d78, 0x2b08, 0x6112, 0x6023, 0x0006, 0x7120, 0x610a, 0x7130,
 	0x615e, 0x6017, 0xf300, 0x6003, 0x0001, 0x6007, 0x0041, 0x2009,
-	0xa022, 0x080c, 0x84a9, 0x08e0, 0x00b6, 0x7110, 0xd1bc, 0x05d0,
+	0xa022, 0x080c, 0x84d1, 0x08e0, 0x00b6, 0x7110, 0xd1bc, 0x05d0,
 	0x7020, 0x2060, 0x9c84, 0x0003, 0x15a8, 0x9c82, 0x1ddc, 0x0690,
 	0x6864, 0x9c02, 0x1678, 0x9484, 0x0fff, 0x9082, 0x000c, 0x0650,
 	0x7008, 0x9084, 0x00ff, 0x6110, 0x2158, 0xb910, 0x9106, 0x1510,
@@ -3848,55 +3853,55 @@
 	0x11c8, 0x2001, 0x0271, 0x2004, 0x9005, 0x1180, 0x9484, 0x0fff,
 	0x9082, 0x000c, 0x0158, 0x0066, 0x2031, 0x0100, 0xa001, 0xa001,
 	0x8631, 0x1de0, 0x006e, 0x601c, 0xd0fc, 0x1120, 0x2009, 0x0045,
-	0x080c, 0x9c6a, 0x7817, 0x0140, 0x00be, 0x0005, 0x6120, 0x9186,
+	0x080c, 0x9c85, 0x7817, 0x0140, 0x00be, 0x0005, 0x6120, 0x9186,
 	0x0002, 0x0128, 0x9186, 0x0005, 0x0110, 0x9085, 0x0001, 0x0005,
-	0x080c, 0x3149, 0x1168, 0x7010, 0x9084, 0xff00, 0x8007, 0x9086,
+	0x080c, 0x3150, 0x1168, 0x7010, 0x9084, 0xff00, 0x8007, 0x9086,
 	0x0000, 0x1130, 0x9184, 0x000f, 0x908a, 0x0006, 0x1208, 0x000b,
-	0x0005, 0x7ed7, 0x7ed8, 0x7ed7, 0x7ed7, 0x7f37, 0x7f46, 0x0005,
-	0x00b6, 0x7110, 0xd1bc, 0x0120, 0x702c, 0xd084, 0x0904, 0x7f35,
-	0x700c, 0x7108, 0x080c, 0x2424, 0x1904, 0x7f35, 0x080c, 0x6209,
-	0x1904, 0x7f35, 0xbe12, 0xbd16, 0x7110, 0xd1bc, 0x01d8, 0x080c,
-	0x6660, 0x0118, 0x9086, 0x0004, 0x1588, 0x00c6, 0x080c, 0x7f55,
-	0x00ce, 0x05d8, 0x080c, 0x9b76, 0x2b08, 0x05b8, 0x6112, 0x080c,
-	0xbcc0, 0x6023, 0x0002, 0x7120, 0x610a, 0x2009, 0x0088, 0x080c,
-	0x9c6a, 0x0458, 0x080c, 0x6660, 0x0148, 0x9086, 0x0004, 0x0130,
-	0x080c, 0x6668, 0x0118, 0x9086, 0x0004, 0x1180, 0x080c, 0x9b76,
-	0x2b08, 0x01d8, 0x6112, 0x080c, 0xbcc0, 0x6023, 0x0005, 0x7120,
-	0x610a, 0x2009, 0x0088, 0x080c, 0x9c6a, 0x0078, 0x080c, 0x9b76,
-	0x2b08, 0x0158, 0x6112, 0x080c, 0xbcc0, 0x6023, 0x0004, 0x7120,
-	0x610a, 0x2009, 0x0001, 0x080c, 0x9c6a, 0x00be, 0x0005, 0x7110,
-	0xd1bc, 0x0158, 0x00d1, 0x0148, 0x080c, 0x7eb6, 0x1130, 0x7124,
-	0x610a, 0x2009, 0x0089, 0x080c, 0x9c6a, 0x0005, 0x7110, 0xd1bc,
-	0x0158, 0x0059, 0x0148, 0x080c, 0x7eb6, 0x1130, 0x7124, 0x610a,
-	0x2009, 0x008a, 0x080c, 0x9c6a, 0x0005, 0x7020, 0x2060, 0x9c84,
+	0x0005, 0x7eff, 0x7f00, 0x7eff, 0x7eff, 0x7f5f, 0x7f6e, 0x0005,
+	0x00b6, 0x7110, 0xd1bc, 0x0120, 0x702c, 0xd084, 0x0904, 0x7f5d,
+	0x700c, 0x7108, 0x080c, 0x2424, 0x1904, 0x7f5d, 0x080c, 0x6210,
+	0x1904, 0x7f5d, 0xbe12, 0xbd16, 0x7110, 0xd1bc, 0x01d8, 0x080c,
+	0x6667, 0x0118, 0x9086, 0x0004, 0x1588, 0x00c6, 0x080c, 0x7f7d,
+	0x00ce, 0x05d8, 0x080c, 0x9b91, 0x2b08, 0x05b8, 0x6112, 0x080c,
+	0xbcdb, 0x6023, 0x0002, 0x7120, 0x610a, 0x2009, 0x0088, 0x080c,
+	0x9c85, 0x0458, 0x080c, 0x6667, 0x0148, 0x9086, 0x0004, 0x0130,
+	0x080c, 0x666f, 0x0118, 0x9086, 0x0004, 0x1180, 0x080c, 0x9b91,
+	0x2b08, 0x01d8, 0x6112, 0x080c, 0xbcdb, 0x6023, 0x0005, 0x7120,
+	0x610a, 0x2009, 0x0088, 0x080c, 0x9c85, 0x0078, 0x080c, 0x9b91,
+	0x2b08, 0x0158, 0x6112, 0x080c, 0xbcdb, 0x6023, 0x0004, 0x7120,
+	0x610a, 0x2009, 0x0001, 0x080c, 0x9c85, 0x00be, 0x0005, 0x7110,
+	0xd1bc, 0x0158, 0x00d1, 0x0148, 0x080c, 0x7ede, 0x1130, 0x7124,
+	0x610a, 0x2009, 0x0089, 0x080c, 0x9c85, 0x0005, 0x7110, 0xd1bc,
+	0x0158, 0x0059, 0x0148, 0x080c, 0x7ede, 0x1130, 0x7124, 0x610a,
+	0x2009, 0x008a, 0x080c, 0x9c85, 0x0005, 0x7020, 0x2060, 0x9c84,
 	0x0003, 0x1158, 0x9c82, 0x1ddc, 0x0240, 0x2001, 0x1819, 0x2004,
 	0x9c02, 0x1218, 0x9085, 0x0001, 0x0005, 0x9006, 0x0ce8, 0x00b6,
 	0x7110, 0xd1bc, 0x11d8, 0x7024, 0x2060, 0x9c84, 0x0003, 0x11b0,
 	0x9c82, 0x1ddc, 0x0298, 0x6864, 0x9c02, 0x1280, 0x7008, 0x9084,
 	0x00ff, 0x6110, 0x2158, 0xb910, 0x9106, 0x1140, 0x700c, 0xb914,
-	0x9106, 0x1120, 0x2009, 0x0051, 0x080c, 0x9c6a, 0x7817, 0x0140,
+	0x9106, 0x1120, 0x2009, 0x0051, 0x080c, 0x9c85, 0x7817, 0x0140,
 	0x00be, 0x0005, 0x2031, 0x0105, 0x0069, 0x0005, 0x2031, 0x0206,
 	0x0049, 0x0005, 0x2031, 0x0207, 0x0029, 0x0005, 0x2031, 0x0213,
 	0x0009, 0x0005, 0x00c6, 0x0096, 0x00f6, 0x7000, 0x9084, 0xf000,
-	0x9086, 0xc000, 0x05c0, 0x080c, 0x9b76, 0x05a8, 0x0066, 0x00c6,
+	0x9086, 0xc000, 0x05c0, 0x080c, 0x9b91, 0x05a8, 0x0066, 0x00c6,
 	0x0046, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x2424,
-	0x1590, 0x080c, 0x6209, 0x1578, 0xbe12, 0xbd16, 0x2b00, 0x004e,
-	0x00ce, 0x6012, 0x080c, 0xbcc0, 0x080c, 0x1022, 0x0500, 0x2900,
+	0x1590, 0x080c, 0x6210, 0x1578, 0xbe12, 0xbd16, 0x2b00, 0x004e,
+	0x00ce, 0x6012, 0x080c, 0xbcdb, 0x080c, 0x1022, 0x0500, 0x2900,
 	0x6062, 0x9006, 0xa802, 0xa866, 0xac6a, 0xa85c, 0x90f8, 0x001b,
 	0x20a9, 0x000e, 0xa860, 0x20e8, 0x20e1, 0x0000, 0x2fa0, 0x2e98,
 	0x4003, 0x006e, 0x6616, 0x6007, 0x003e, 0x6023, 0x0001, 0x6003,
-	0x0001, 0x080c, 0x84b0, 0x00fe, 0x009e, 0x00ce, 0x0005, 0x080c,
-	0x9bcc, 0x006e, 0x0cc0, 0x004e, 0x00ce, 0x0cc8, 0x00c6, 0x7000,
+	0x0001, 0x080c, 0x84d8, 0x00fe, 0x009e, 0x00ce, 0x0005, 0x080c,
+	0x9be7, 0x006e, 0x0cc0, 0x004e, 0x00ce, 0x0cc8, 0x00c6, 0x7000,
 	0x908c, 0xff00, 0x9184, 0xf000, 0x810f, 0x9086, 0x2000, 0x1904,
-	0x803d, 0x9186, 0x0022, 0x15f0, 0x2001, 0x0111, 0x2004, 0x9005,
-	0x1904, 0x803f, 0x7030, 0x908e, 0x0400, 0x0904, 0x803f, 0x908e,
+	0x8065, 0x9186, 0x0022, 0x15f0, 0x2001, 0x0111, 0x2004, 0x9005,
+	0x1904, 0x8067, 0x7030, 0x908e, 0x0400, 0x0904, 0x8067, 0x908e,
 	0x6000, 0x05e8, 0x908e, 0x5400, 0x05d0, 0x908e, 0x0300, 0x11d8,
 	0x2009, 0x1836, 0x210c, 0xd18c, 0x1590, 0xd1a4, 0x1580, 0x080c,
-	0x661e, 0x0558, 0x68ac, 0x9084, 0x00ff, 0x7100, 0x918c, 0x00ff,
+	0x6625, 0x0558, 0x68ac, 0x9084, 0x00ff, 0x7100, 0x918c, 0x00ff,
 	0x9106, 0x1518, 0x687c, 0x69ac, 0x918c, 0xff00, 0x9105, 0x7104,
 	0x9106, 0x11d8, 0x00e0, 0x2009, 0x0103, 0x210c, 0xd1b4, 0x11a8,
 	0x908e, 0x5200, 0x09e8, 0x908e, 0x0500, 0x09d0, 0x908e, 0x5000,
-	0x09b8, 0x0058, 0x9186, 0x0023, 0x1140, 0x080c, 0x7f55, 0x0128,
+	0x09b8, 0x0058, 0x9186, 0x0023, 0x1140, 0x080c, 0x7f7d, 0x0128,
 	0x6004, 0x9086, 0x0002, 0x0118, 0x0000, 0x9006, 0x0010, 0x9085,
 	0x0001, 0x00ce, 0x0005, 0x00f6, 0x2079, 0x0200, 0x7800, 0xc0e5,
 	0xc0cc, 0x7802, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x1800, 0x7834,
@@ -3904,21 +3909,21 @@
 	0x00fe, 0x0005, 0x00e6, 0x2071, 0x1800, 0x7034, 0xc084, 0x7036,
 	0x00ee, 0x0005, 0x2071, 0x19d4, 0x7003, 0x0003, 0x700f, 0x0361,
 	0x9006, 0x701a, 0x7072, 0x7012, 0x7017, 0x1ddc, 0x7007, 0x0000,
-	0x7026, 0x702b, 0x8fbe, 0x7032, 0x7037, 0x903b, 0x703f, 0xffff,
-	0x7042, 0x7047, 0x521d, 0x704a, 0x705b, 0x81fe, 0x080c, 0x103b,
+	0x7026, 0x702b, 0x8fd9, 0x7032, 0x7037, 0x9056, 0x703f, 0xffff,
+	0x7042, 0x7047, 0x5224, 0x704a, 0x705b, 0x8226, 0x080c, 0x103b,
 	0x090c, 0x0d65, 0x2900, 0x703a, 0xa867, 0x0003, 0xa86f, 0x0100,
-	0xa8ab, 0xdcb0, 0x0005, 0x2071, 0x19d4, 0x1d04, 0x8120, 0x2091,
+	0xa8ab, 0xdcb0, 0x0005, 0x2071, 0x19d4, 0x1d04, 0x8148, 0x2091,
 	0x6000, 0x700c, 0x8001, 0x700e, 0x1560, 0x2001, 0x1875, 0x2004,
 	0xd0c4, 0x0158, 0x3a00, 0xd08c, 0x1140, 0x20d1, 0x0000, 0x20d1,
 	0x0001, 0x20d1, 0x0000, 0x080c, 0x0d65, 0x700f, 0x0361, 0x7007,
 	0x0001, 0x0126, 0x2091, 0x8000, 0x2069, 0x1800, 0x69e8, 0xd1e4,
-	0x1138, 0xd1dc, 0x1118, 0x080c, 0x826c, 0x0010, 0x080c, 0x8243,
+	0x1138, 0xd1dc, 0x1118, 0x080c, 0x8294, 0x0010, 0x080c, 0x826b,
 	0x7040, 0x900d, 0x0148, 0x8109, 0x7142, 0x1130, 0x7044, 0x080f,
 	0x0018, 0x0126, 0x2091, 0x8000, 0x7024, 0x900d, 0x0188, 0x7020,
 	0x8001, 0x7022, 0x1168, 0x7023, 0x0009, 0x8109, 0x7126, 0x9186,
 	0x03e8, 0x1110, 0x7028, 0x080f, 0x81ff, 0x1110, 0x7028, 0x080f,
 	0x7030, 0x900d, 0x0180, 0x702c, 0x8001, 0x702e, 0x1160, 0x702f,
-	0x0009, 0x8109, 0x7132, 0x0128, 0x9184, 0x007f, 0x090c, 0x90c3,
+	0x0009, 0x8109, 0x7132, 0x0128, 0x9184, 0x007f, 0x090c, 0x90de,
 	0x0010, 0x7034, 0x080f, 0x703c, 0x9005, 0x0118, 0x0310, 0x8001,
 	0x703e, 0x704c, 0x900d, 0x0168, 0x7048, 0x8001, 0x704a, 0x1148,
 	0x704b, 0x0009, 0x8109, 0x714e, 0x1120, 0x7150, 0x714e, 0x7058,
@@ -3926,29 +3931,29 @@
 	0x706c, 0x8001, 0x706e, 0x1138, 0x706f, 0x0009, 0x8109, 0x7172,
 	0x1110, 0x7074, 0x080f, 0x001e, 0x7008, 0x8001, 0x700a, 0x1138,
 	0x700b, 0x0009, 0x8109, 0x711a, 0x1110, 0x701c, 0x080f, 0x012e,
-	0x7004, 0x0002, 0x8148, 0x8149, 0x8173, 0x00e6, 0x2071, 0x19d4,
+	0x7004, 0x0002, 0x8170, 0x8171, 0x819b, 0x00e6, 0x2071, 0x19d4,
 	0x7018, 0x9005, 0x1120, 0x711a, 0x721e, 0x700b, 0x0009, 0x00ee,
 	0x0005, 0x00e6, 0x0006, 0x2071, 0x19d4, 0x701c, 0x9206, 0x1120,
 	0x701a, 0x701e, 0x7072, 0x7076, 0x000e, 0x00ee, 0x0005, 0x00e6,
 	0x2071, 0x19d4, 0xb888, 0x9102, 0x0208, 0xb98a, 0x00ee, 0x0005,
-	0x0005, 0x00b6, 0x2031, 0x0010, 0x7110, 0x080c, 0x6269, 0x11a8,
+	0x0005, 0x00b6, 0x2031, 0x0010, 0x7110, 0x080c, 0x6270, 0x11a8,
 	0xb888, 0x8001, 0x0290, 0xb88a, 0x1180, 0x0126, 0x2091, 0x8000,
 	0x0066, 0xb8c0, 0x9005, 0x0138, 0x0026, 0xba3c, 0x0016, 0x080c,
-	0x6394, 0x001e, 0x002e, 0x006e, 0x012e, 0x8108, 0x9182, 0x0800,
+	0x639b, 0x001e, 0x002e, 0x006e, 0x012e, 0x8108, 0x9182, 0x0800,
 	0x1220, 0x8631, 0x0128, 0x7112, 0x0c00, 0x900e, 0x7007, 0x0002,
 	0x7112, 0x00be, 0x0005, 0x2031, 0x0010, 0x7014, 0x2060, 0x0126,
 	0x2091, 0x8000, 0x6048, 0x9005, 0x0128, 0x8001, 0x604a, 0x1110,
-	0x080c, 0xbb41, 0x6018, 0x9005, 0x0904, 0x81c5, 0x00f6, 0x2079,
-	0x0300, 0x7918, 0xd1b4, 0x1904, 0x81d8, 0x781b, 0x2020, 0xa001,
-	0x7918, 0xd1b4, 0x0120, 0x781b, 0x2000, 0x0804, 0x81d8, 0x8001,
+	0x080c, 0xbb5c, 0x6018, 0x9005, 0x0904, 0x81ed, 0x00f6, 0x2079,
+	0x0300, 0x7918, 0xd1b4, 0x1904, 0x8200, 0x781b, 0x2020, 0xa001,
+	0x7918, 0xd1b4, 0x0120, 0x781b, 0x2000, 0x0804, 0x8200, 0x8001,
 	0x601a, 0x0106, 0x781b, 0x2000, 0xa001, 0x7918, 0xd1ac, 0x1dd0,
 	0x010e, 0x00fe, 0x1510, 0x6120, 0x9186, 0x0003, 0x0118, 0x9186,
-	0x0006, 0x11c8, 0x080c, 0xb82c, 0x01b0, 0x6014, 0x2048, 0xa884,
+	0x0006, 0x11c8, 0x080c, 0xb847, 0x01b0, 0x6014, 0x2048, 0xa884,
 	0x908a, 0x199a, 0x0280, 0x9082, 0x1999, 0xa886, 0x908a, 0x199a,
 	0x0210, 0x2001, 0x1999, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a,
-	0x080c, 0xbf72, 0x0110, 0x080c, 0xb52a, 0x012e, 0x9c88, 0x001c,
+	0x080c, 0xbf8d, 0x0110, 0x080c, 0xb545, 0x012e, 0x9c88, 0x001c,
 	0x7116, 0x2001, 0x1819, 0x2004, 0x9102, 0x1228, 0x8631, 0x0138,
-	0x2160, 0x0804, 0x8177, 0x7017, 0x1ddc, 0x7007, 0x0000, 0x0005,
+	0x2160, 0x0804, 0x819f, 0x7017, 0x1ddc, 0x7007, 0x0000, 0x0005,
 	0x00fe, 0x0c58, 0x00e6, 0x2071, 0x19d4, 0x7027, 0x07d0, 0x7023,
 	0x0009, 0x00ee, 0x0005, 0x2001, 0x19dd, 0x2003, 0x0000, 0x0005,
 	0x00e6, 0x2071, 0x19d4, 0x7132, 0x702f, 0x0009, 0x00ee, 0x0005,
@@ -3958,7 +3963,7 @@
 	0x0000, 0x0150, 0x7068, 0xa09a, 0x7064, 0xa096, 0x7060, 0xa092,
 	0x705c, 0xa08e, 0x080c, 0x110c, 0x002e, 0x008e, 0x0005, 0x0006,
 	0x0016, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6,
-	0x0156, 0x080c, 0x808b, 0x015e, 0x00fe, 0x00ee, 0x00de, 0x00ce,
+	0x0156, 0x080c, 0x80b3, 0x015e, 0x00fe, 0x00ee, 0x00de, 0x00ce,
 	0x00be, 0x00ae, 0x009e, 0x001e, 0x000e, 0x0005, 0x00e6, 0x2071,
 	0x19d4, 0x7172, 0x7276, 0x706f, 0x0009, 0x00ee, 0x0005, 0x00e6,
 	0x0006, 0x2071, 0x19d4, 0x7074, 0x9206, 0x1110, 0x7072, 0x7076,
@@ -3980,8 +3985,8 @@
 	0x199a, 0x1638, 0x9005, 0x1150, 0x00c6, 0x2061, 0x1a3f, 0x6014,
 	0x00ce, 0x9005, 0x1130, 0x2001, 0x001e, 0x0018, 0x908e, 0xffff,
 	0x01b0, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0xa87c, 0x908c,
-	0x00c0, 0x918e, 0x00c0, 0x0904, 0x836d, 0xd0b4, 0x1168, 0xd0bc,
-	0x1904, 0x8346, 0x2009, 0x0006, 0x080c, 0x839a, 0x0005, 0x900e,
+	0x00c0, 0x918e, 0x00c0, 0x0904, 0x8395, 0xd0b4, 0x1168, 0xd0bc,
+	0x1904, 0x836e, 0x2009, 0x0006, 0x080c, 0x83c2, 0x0005, 0x900e,
 	0x0c60, 0x2001, 0x1999, 0x08b0, 0xd0fc, 0x05c8, 0x908c, 0x2023,
 	0x1550, 0x87ff, 0x1540, 0x6124, 0x918c, 0x0500, 0x1520, 0x6100,
 	0x918e, 0x0007, 0x1500, 0x2009, 0x1875, 0x210c, 0xd184, 0x11d8,
@@ -3989,44 +3994,44 @@
 	0xa87c, 0xc0dd, 0xa87e, 0x600f, 0x0000, 0x00f6, 0x2079, 0x0380,
 	0x7818, 0xd0bc, 0x1de8, 0x7833, 0x0013, 0x2c00, 0x7836, 0x781b,
 	0x8080, 0x00fe, 0x0005, 0x908c, 0x0003, 0x0120, 0x918e, 0x0003,
-	0x1904, 0x8394, 0x908c, 0x2020, 0x918e, 0x2020, 0x01a8, 0x6024,
+	0x1904, 0x83bc, 0x908c, 0x2020, 0x918e, 0x2020, 0x01a8, 0x6024,
 	0xd0d4, 0x11e8, 0x2009, 0x1875, 0x2104, 0xd084, 0x1138, 0x87ff,
-	0x1120, 0x2009, 0x0043, 0x0804, 0x9c6a, 0x0005, 0x87ff, 0x1de8,
-	0x2009, 0x0042, 0x0804, 0x9c6a, 0x6110, 0x00b6, 0x2158, 0xb900,
+	0x1120, 0x2009, 0x0043, 0x0804, 0x9c85, 0x0005, 0x87ff, 0x1de8,
+	0x2009, 0x0042, 0x0804, 0x9c85, 0x6110, 0x00b6, 0x2158, 0xb900,
 	0x00be, 0xd1ac, 0x0d20, 0x6024, 0xc0cd, 0x6026, 0x0c00, 0xc0d4,
 	0x6026, 0xa890, 0x602e, 0xa88c, 0x6032, 0x08e0, 0xd0fc, 0x0160,
-	0x908c, 0x0003, 0x0120, 0x918e, 0x0003, 0x1904, 0x8394, 0x908c,
+	0x908c, 0x0003, 0x0120, 0x918e, 0x0003, 0x1904, 0x83bc, 0x908c,
 	0x2020, 0x918e, 0x2020, 0x0170, 0x0076, 0x00f6, 0x2c78, 0x080c,
 	0x164f, 0x00fe, 0x007e, 0x87ff, 0x1120, 0x2009, 0x0042, 0x080c,
-	0x9c6a, 0x0005, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1ac,
+	0x9c85, 0x0005, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1ac,
 	0x0d58, 0x6124, 0xc1cd, 0x6126, 0x0c38, 0xd0fc, 0x0188, 0x908c,
 	0x2020, 0x918e, 0x2020, 0x01a8, 0x9084, 0x0003, 0x908e, 0x0002,
-	0x0148, 0x87ff, 0x1120, 0x2009, 0x0041, 0x080c, 0x9c6a, 0x0005,
-	0x00b9, 0x0ce8, 0x87ff, 0x1dd8, 0x2009, 0x0043, 0x080c, 0x9c6a,
+	0x0148, 0x87ff, 0x1120, 0x2009, 0x0041, 0x080c, 0x9c85, 0x0005,
+	0x00b9, 0x0ce8, 0x87ff, 0x1dd8, 0x2009, 0x0043, 0x080c, 0x9c85,
 	0x0cb0, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1ac, 0x0d20,
 	0x6124, 0xc1cd, 0x6126, 0x0c00, 0x2009, 0x0004, 0x0019, 0x0005,
-	0x2009, 0x0001, 0x0096, 0x080c, 0xb82c, 0x0518, 0x6014, 0x2048,
+	0x2009, 0x0001, 0x0096, 0x080c, 0xb847, 0x0518, 0x6014, 0x2048,
 	0xa982, 0xa800, 0x6016, 0x9186, 0x0001, 0x1188, 0xa97c, 0x918c,
 	0x8100, 0x918e, 0x8100, 0x1158, 0x00c6, 0x2061, 0x1a3f, 0x6200,
 	0xd28c, 0x1120, 0x6204, 0x8210, 0x0208, 0x6206, 0x00ce, 0x080c,
-	0x67c4, 0x6014, 0x904d, 0x0076, 0x2039, 0x0000, 0x190c, 0x82b6,
+	0x67cb, 0x6014, 0x904d, 0x0076, 0x2039, 0x0000, 0x190c, 0x82de,
 	0x007e, 0x009e, 0x0005, 0x0156, 0x00c6, 0x2061, 0x1a3f, 0x6000,
 	0x81ff, 0x0110, 0x9205, 0x0008, 0x9204, 0x6002, 0x00ce, 0x015e,
 	0x0005, 0x6800, 0xd08c, 0x1138, 0x6808, 0x9005, 0x0120, 0x8001,
 	0x680a, 0x9085, 0x0001, 0x0005, 0x0126, 0x2091, 0x8000, 0x0036,
 	0x0046, 0x20a9, 0x0010, 0x9006, 0x8004, 0x8086, 0x818e, 0x1208,
-	0x9200, 0x1f04, 0x83e5, 0x8086, 0x818e, 0x004e, 0x003e, 0x012e,
+	0x9200, 0x1f04, 0x840d, 0x8086, 0x818e, 0x004e, 0x003e, 0x012e,
 	0x0005, 0x0126, 0x2091, 0x8000, 0x0076, 0x0156, 0x20a9, 0x0010,
 	0x9005, 0x01c8, 0x911a, 0x12b8, 0x8213, 0x818d, 0x0228, 0x911a,
-	0x1220, 0x1f04, 0x83fc, 0x0028, 0x911a, 0x2308, 0x8210, 0x1f04,
-	0x83fc, 0x0006, 0x3200, 0x9084, 0xefff, 0x2080, 0x000e, 0x015e,
+	0x1220, 0x1f04, 0x8424, 0x0028, 0x911a, 0x2308, 0x8210, 0x1f04,
+	0x8424, 0x0006, 0x3200, 0x9084, 0xefff, 0x2080, 0x000e, 0x015e,
 	0x007e, 0x012e, 0x0005, 0x0006, 0x3200, 0x9085, 0x1000, 0x0ca8,
 	0x0126, 0x2091, 0x2800, 0x2079, 0x19b8, 0x012e, 0x00d6, 0x2069,
 	0x19b8, 0x6803, 0x0005, 0x0156, 0x0146, 0x01d6, 0x20e9, 0x0000,
-	0x2069, 0x0200, 0x080c, 0x97df, 0x04a9, 0x080c, 0x97ca, 0x0491,
-	0x080c, 0x97cd, 0x0479, 0x080c, 0x97d0, 0x0461, 0x080c, 0x97d3,
-	0x0449, 0x080c, 0x97d6, 0x0431, 0x080c, 0x97d9, 0x0419, 0x080c,
-	0x97dc, 0x0401, 0x01de, 0x014e, 0x015e, 0x6857, 0x0000, 0x00f6,
+	0x2069, 0x0200, 0x080c, 0x97fa, 0x04a9, 0x080c, 0x97e5, 0x0491,
+	0x080c, 0x97e8, 0x0479, 0x080c, 0x97eb, 0x0461, 0x080c, 0x97ee,
+	0x0449, 0x080c, 0x97f1, 0x0431, 0x080c, 0x97f4, 0x0419, 0x080c,
+	0x97f7, 0x0401, 0x01de, 0x014e, 0x015e, 0x6857, 0x0000, 0x00f6,
 	0x2079, 0x0380, 0x00f9, 0x7807, 0x0003, 0x7803, 0x0000, 0x7803,
 	0x0001, 0x2069, 0x0004, 0x2d04, 0x9084, 0xfffe, 0x9085, 0x8000,
 	0x206a, 0x2069, 0x0100, 0x6828, 0x9084, 0xfffc, 0x682a, 0x00fe,
@@ -4039,256 +4044,256 @@
 	0x9086, 0x0001, 0x01b0, 0x00c6, 0x6146, 0x600f, 0x0000, 0x2c08,
 	0x2061, 0x19b8, 0x602c, 0x8000, 0x602e, 0x601c, 0x9005, 0x0130,
 	0x9080, 0x0003, 0x2102, 0x611e, 0x00ce, 0x0005, 0x6122, 0x611e,
-	0x0cd8, 0x6146, 0x2c08, 0x2001, 0x0012, 0x080c, 0x989e, 0x0005,
+	0x0cd8, 0x6146, 0x2c08, 0x2001, 0x0012, 0x080c, 0x98b9, 0x0005,
 	0x0016, 0x2009, 0x8020, 0x6146, 0x2c08, 0x2001, 0x0382, 0x2004,
 	0x9084, 0x0007, 0x9086, 0x0001, 0x1128, 0x2001, 0x0019, 0x080c,
-	0x989e, 0x0088, 0x00c6, 0x2061, 0x19b8, 0x602c, 0x8000, 0x602e,
+	0x98b9, 0x0088, 0x00c6, 0x2061, 0x19b8, 0x602c, 0x8000, 0x602e,
 	0x600c, 0x9005, 0x0128, 0x9080, 0x0003, 0x2102, 0x610e, 0x0010,
 	0x6112, 0x610e, 0x00ce, 0x001e, 0x0005, 0x2001, 0x0382, 0x2004,
 	0x9084, 0x0007, 0x9086, 0x0001, 0x0198, 0x00c6, 0x6146, 0x600f,
 	0x0000, 0x2c08, 0x2061, 0x19b8, 0x6044, 0x9005, 0x0130, 0x9080,
 	0x0003, 0x2102, 0x6146, 0x00ce, 0x0005, 0x614a, 0x6146, 0x0cd8,
-	0x6146, 0x600f, 0x0000, 0x2c08, 0x2001, 0x0013, 0x080c, 0x989e,
+	0x6146, 0x600f, 0x0000, 0x2c08, 0x2001, 0x0013, 0x080c, 0x98b9,
 	0x0005, 0x6044, 0xd0dc, 0x0128, 0x9006, 0x7007, 0x0000, 0x700a,
 	0x7032, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x00b6, 0x0096,
 	0x0076, 0x0066, 0x0056, 0x0036, 0x0026, 0x0016, 0x0006, 0x0126,
 	0x902e, 0x2071, 0x19b8, 0x7648, 0x2660, 0x2678, 0x2091, 0x8000,
-	0x8cff, 0x0904, 0x857b, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904,
-	0x8576, 0x87ff, 0x0120, 0x605c, 0x9106, 0x1904, 0x8576, 0x704c,
-	0x9c06, 0x1178, 0x0036, 0x2019, 0x0001, 0x080c, 0x926b, 0x703f,
+	0x8cff, 0x0904, 0x85a3, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904,
+	0x859e, 0x87ff, 0x0120, 0x605c, 0x9106, 0x1904, 0x859e, 0x704c,
+	0x9c06, 0x1178, 0x0036, 0x2019, 0x0001, 0x080c, 0x9286, 0x703f,
 	0x0000, 0x9006, 0x704e, 0x706a, 0x7052, 0x706e, 0x003e, 0x2029,
-	0x0001, 0x080c, 0x84f9, 0x7048, 0x9c36, 0x1110, 0x660c, 0x764a,
+	0x0001, 0x080c, 0x8521, 0x7048, 0x9c36, 0x1110, 0x660c, 0x764a,
 	0x7044, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7046,
 	0x0010, 0x7047, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110,
-	0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0xb82c, 0x01c8,
+	0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0xb847, 0x01c8,
 	0x6014, 0x2048, 0x6020, 0x9086, 0x0003, 0x1560, 0xa867, 0x0103,
-	0xab7a, 0xa877, 0x0000, 0x0016, 0x0036, 0x0076, 0x080c, 0xbb2a,
-	0x080c, 0xd4f8, 0x080c, 0x698f, 0x007e, 0x003e, 0x001e, 0x080c,
-	0xba1b, 0x080c, 0x9c06, 0x00ce, 0x0804, 0x8518, 0x2c78, 0x600c,
-	0x2060, 0x0804, 0x8518, 0x012e, 0x000e, 0x001e, 0x002e, 0x003e,
+	0xab7a, 0xa877, 0x0000, 0x0016, 0x0036, 0x0076, 0x080c, 0xbb45,
+	0x080c, 0xd51a, 0x080c, 0x6996, 0x007e, 0x003e, 0x001e, 0x080c,
+	0xba36, 0x080c, 0x9c21, 0x00ce, 0x0804, 0x8540, 0x2c78, 0x600c,
+	0x2060, 0x0804, 0x8540, 0x012e, 0x000e, 0x001e, 0x002e, 0x003e,
 	0x005e, 0x006e, 0x007e, 0x009e, 0x00be, 0x00ce, 0x00de, 0x00ee,
 	0x00fe, 0x0005, 0x6020, 0x9086, 0x0006, 0x1158, 0x0016, 0x0036,
-	0x0076, 0x080c, 0xd4f8, 0x080c, 0xd1fc, 0x007e, 0x003e, 0x001e,
+	0x0076, 0x080c, 0xd51a, 0x080c, 0xd21e, 0x007e, 0x003e, 0x001e,
 	0x08c0, 0x6020, 0x9086, 0x000a, 0x0918, 0x0800, 0x0006, 0x0066,
 	0x0096, 0x00c6, 0x00d6, 0x00f6, 0x9036, 0x0126, 0x2091, 0x8000,
-	0x2079, 0x19b8, 0x7848, 0x9065, 0x0904, 0x85fd, 0x600c, 0x0006,
+	0x2079, 0x19b8, 0x7848, 0x9065, 0x0904, 0x8625, 0x600c, 0x0006,
 	0x600f, 0x0000, 0x784c, 0x9c06, 0x11a0, 0x0036, 0x2019, 0x0001,
-	0x080c, 0x926b, 0x783f, 0x0000, 0x901e, 0x7b4e, 0x7b6a, 0x7b52,
+	0x080c, 0x9286, 0x783f, 0x0000, 0x901e, 0x7b4e, 0x7b6a, 0x7b52,
 	0x7b6e, 0x003e, 0x000e, 0x9005, 0x1118, 0x600c, 0x600f, 0x0000,
-	0x0006, 0x00e6, 0x2f70, 0x080c, 0x84f9, 0x00ee, 0x080c, 0xb82c,
+	0x0006, 0x00e6, 0x2f70, 0x080c, 0x8521, 0x00ee, 0x080c, 0xb847,
 	0x0520, 0x6014, 0x2048, 0x6020, 0x9086, 0x0003, 0x1580, 0x3e08,
 	0x918e, 0x0002, 0x1188, 0x6010, 0x9005, 0x0170, 0x00b6, 0x2058,
 	0xb800, 0x00be, 0xd0bc, 0x0140, 0x6048, 0x9005, 0x1198, 0x2001,
 	0x1959, 0x2004, 0x604a, 0x0070, 0xa867, 0x0103, 0xab7a, 0xa877,
-	0x0000, 0x080c, 0x6983, 0x080c, 0xba1b, 0x6044, 0xc0fc, 0x6046,
-	0x080c, 0x9c06, 0x000e, 0x0804, 0x85ab, 0x7e4a, 0x7e46, 0x012e,
+	0x0000, 0x080c, 0x698a, 0x080c, 0xba36, 0x6044, 0xc0fc, 0x6046,
+	0x080c, 0x9c21, 0x000e, 0x0804, 0x85d3, 0x7e4a, 0x7e46, 0x012e,
 	0x00fe, 0x00de, 0x00ce, 0x009e, 0x006e, 0x000e, 0x0005, 0x6020,
-	0x9086, 0x0006, 0x1118, 0x080c, 0xd1fc, 0x0c38, 0x6020, 0x9086,
+	0x9086, 0x0006, 0x1118, 0x080c, 0xd21e, 0x0c38, 0x6020, 0x9086,
 	0x000a, 0x09e0, 0x08c8, 0x0016, 0x0026, 0x0086, 0x9046, 0x00a9,
-	0x080c, 0x8704, 0x008e, 0x002e, 0x001e, 0x0005, 0x00f6, 0x0126,
-	0x2079, 0x19b8, 0x2091, 0x8000, 0x080c, 0x874d, 0x080c, 0x87e1,
-	0x080c, 0x63f6, 0x012e, 0x00fe, 0x0005, 0x00b6, 0x0096, 0x00f6,
+	0x080c, 0x872c, 0x008e, 0x002e, 0x001e, 0x0005, 0x00f6, 0x0126,
+	0x2079, 0x19b8, 0x2091, 0x8000, 0x080c, 0x8775, 0x080c, 0x8809,
+	0x080c, 0x63fd, 0x012e, 0x00fe, 0x0005, 0x00b6, 0x0096, 0x00f6,
 	0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0016, 0x0006, 0x0126, 0x2091,
 	0x8000, 0x2071, 0x19b8, 0x7620, 0x2660, 0x2678, 0x8cff, 0x0904,
-	0x86c9, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904, 0x86c4, 0x88ff,
-	0x0120, 0x605c, 0x9106, 0x1904, 0x86c4, 0x7030, 0x9c06, 0x1570,
-	0x2069, 0x0100, 0x6820, 0xd0a4, 0x1508, 0x080c, 0x81e3, 0x080c,
-	0x8f9c, 0x68c3, 0x0000, 0x080c, 0x9487, 0x7033, 0x0000, 0x0036,
+	0x86f1, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904, 0x86ec, 0x88ff,
+	0x0120, 0x605c, 0x9106, 0x1904, 0x86ec, 0x7030, 0x9c06, 0x1570,
+	0x2069, 0x0100, 0x6820, 0xd0a4, 0x1508, 0x080c, 0x820b, 0x080c,
+	0x8fb7, 0x68c3, 0x0000, 0x080c, 0x94a2, 0x7033, 0x0000, 0x0036,
 	0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100,
 	0x080c, 0x2833, 0x9006, 0x080c, 0x2833, 0x2069, 0x0100, 0x6824,
 	0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0040, 0x7008, 0xc0ad,
-	0x700a, 0x6003, 0x0009, 0x630a, 0x0804, 0x86c4, 0x7020, 0x9c36,
+	0x700a, 0x6003, 0x0009, 0x630a, 0x0804, 0x86ec, 0x7020, 0x9c36,
 	0x1110, 0x660c, 0x7622, 0x701c, 0x9c36, 0x1140, 0x2c00, 0x9f36,
 	0x0118, 0x2f00, 0x701e, 0x0010, 0x701f, 0x0000, 0x660c, 0x0066,
 	0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000,
-	0x6044, 0xc0fc, 0x6046, 0x6014, 0x2048, 0x080c, 0xb82c, 0x01e8,
-	0x6020, 0x9086, 0x0003, 0x1580, 0x080c, 0xba41, 0x1118, 0x080c,
-	0xa574, 0x0098, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x0016,
-	0x0036, 0x0086, 0x080c, 0xbb2a, 0x080c, 0xd4f8, 0x080c, 0x698f,
-	0x008e, 0x003e, 0x001e, 0x080c, 0xba1b, 0x080c, 0x9c06, 0x080c,
-	0x935d, 0x00ce, 0x0804, 0x863e, 0x2c78, 0x600c, 0x2060, 0x0804,
-	0x863e, 0x012e, 0x000e, 0x001e, 0x006e, 0x00ce, 0x00de, 0x00ee,
+	0x6044, 0xc0fc, 0x6046, 0x6014, 0x2048, 0x080c, 0xb847, 0x01e8,
+	0x6020, 0x9086, 0x0003, 0x1580, 0x080c, 0xba5c, 0x1118, 0x080c,
+	0xa58f, 0x0098, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x0016,
+	0x0036, 0x0086, 0x080c, 0xbb45, 0x080c, 0xd51a, 0x080c, 0x6996,
+	0x008e, 0x003e, 0x001e, 0x080c, 0xba36, 0x080c, 0x9c21, 0x080c,
+	0x9378, 0x00ce, 0x0804, 0x8666, 0x2c78, 0x600c, 0x2060, 0x0804,
+	0x8666, 0x012e, 0x000e, 0x001e, 0x006e, 0x00ce, 0x00de, 0x00ee,
 	0x00fe, 0x009e, 0x00be, 0x0005, 0x6020, 0x9086, 0x0006, 0x1158,
-	0x0016, 0x0036, 0x0086, 0x080c, 0xd4f8, 0x080c, 0xd1fc, 0x008e,
-	0x003e, 0x001e, 0x08d0, 0x080c, 0xa574, 0x6020, 0x9086, 0x0002,
-	0x1160, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x0904, 0x86aa,
-	0x9086, 0x008b, 0x0904, 0x86aa, 0x0840, 0x6020, 0x9086, 0x0005,
+	0x0016, 0x0036, 0x0086, 0x080c, 0xd51a, 0x080c, 0xd21e, 0x008e,
+	0x003e, 0x001e, 0x08d0, 0x080c, 0xa58f, 0x6020, 0x9086, 0x0002,
+	0x1160, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x0904, 0x86d2,
+	0x9086, 0x008b, 0x0904, 0x86d2, 0x0840, 0x6020, 0x9086, 0x0005,
 	0x1920, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x09c8, 0x9086,
-	0x008b, 0x09b0, 0x0804, 0x86bd, 0x0006, 0x00f6, 0x00e6, 0x0096,
+	0x008b, 0x09b0, 0x0804, 0x86e5, 0x0006, 0x00f6, 0x00e6, 0x0096,
 	0x00b6, 0x00c6, 0x0066, 0x0016, 0x0126, 0x2091, 0x8000, 0x9280,
 	0x1000, 0x2004, 0x905d, 0x2079, 0x19b8, 0x9036, 0x7828, 0x2060,
 	0x8cff, 0x0538, 0x6010, 0x9b06, 0x1500, 0x6043, 0xffff, 0x080c,
-	0x9a69, 0x01d8, 0x610c, 0x0016, 0x080c, 0x90f5, 0x6014, 0x2048,
+	0x9a84, 0x01d8, 0x610c, 0x0016, 0x080c, 0x9110, 0x6014, 0x2048,
 	0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x0016, 0x0036, 0x0086,
-	0x080c, 0xbb2a, 0x080c, 0xd4f8, 0x080c, 0x698f, 0x008e, 0x003e,
-	0x001e, 0x080c, 0x9c06, 0x00ce, 0x08d8, 0x2c30, 0x600c, 0x2060,
-	0x08b8, 0x080c, 0x6413, 0x012e, 0x001e, 0x006e, 0x00ce, 0x00be,
+	0x080c, 0xbb45, 0x080c, 0xd51a, 0x080c, 0x6996, 0x008e, 0x003e,
+	0x001e, 0x080c, 0x9c21, 0x00ce, 0x08d8, 0x2c30, 0x600c, 0x2060,
+	0x08b8, 0x080c, 0x641a, 0x012e, 0x001e, 0x006e, 0x00ce, 0x00be,
 	0x009e, 0x00ee, 0x00fe, 0x000e, 0x0005, 0x0096, 0x0006, 0x0066,
-	0x00c6, 0x00d6, 0x9036, 0x7820, 0x9065, 0x0904, 0x87b4, 0x600c,
+	0x00c6, 0x00d6, 0x9036, 0x7820, 0x9065, 0x0904, 0x87dc, 0x600c,
 	0x0006, 0x6044, 0xc0fc, 0x6046, 0x600f, 0x0000, 0x7830, 0x9c06,
-	0x1588, 0x2069, 0x0100, 0x6820, 0xd0a4, 0x1508, 0x080c, 0x81e3,
-	0x080c, 0x8f9c, 0x68c3, 0x0000, 0x080c, 0x9487, 0x7833, 0x0000,
+	0x1588, 0x2069, 0x0100, 0x6820, 0xd0a4, 0x1508, 0x080c, 0x820b,
+	0x080c, 0x8fb7, 0x68c3, 0x0000, 0x080c, 0x94a2, 0x7833, 0x0000,
 	0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001,
 	0x0100, 0x080c, 0x2833, 0x9006, 0x080c, 0x2833, 0x2069, 0x0100,
 	0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0058, 0x080c,
-	0x6616, 0x1538, 0x6003, 0x0009, 0x630a, 0x7808, 0xc0ad, 0x780a,
-	0x2c30, 0x00f8, 0x6014, 0x2048, 0x080c, 0xb82a, 0x01b0, 0x6020,
-	0x9086, 0x0003, 0x1508, 0x080c, 0xba41, 0x1118, 0x080c, 0xa574,
-	0x0060, 0x080c, 0x6616, 0x1168, 0xa867, 0x0103, 0xab7a, 0xa877,
-	0x0000, 0x080c, 0x698f, 0x080c, 0xba1b, 0x080c, 0x9c06, 0x080c,
-	0x935d, 0x000e, 0x0804, 0x8754, 0x7e22, 0x7e1e, 0x00de, 0x00ce,
+	0x661d, 0x1538, 0x6003, 0x0009, 0x630a, 0x7808, 0xc0ad, 0x780a,
+	0x2c30, 0x00f8, 0x6014, 0x2048, 0x080c, 0xb845, 0x01b0, 0x6020,
+	0x9086, 0x0003, 0x1508, 0x080c, 0xba5c, 0x1118, 0x080c, 0xa58f,
+	0x0060, 0x080c, 0x661d, 0x1168, 0xa867, 0x0103, 0xab7a, 0xa877,
+	0x0000, 0x080c, 0x6996, 0x080c, 0xba36, 0x080c, 0x9c21, 0x080c,
+	0x9378, 0x000e, 0x0804, 0x877c, 0x7e22, 0x7e1e, 0x00de, 0x00ce,
 	0x006e, 0x000e, 0x009e, 0x0005, 0x6020, 0x9086, 0x0006, 0x1118,
-	0x080c, 0xd1fc, 0x0c50, 0x080c, 0xa574, 0x6020, 0x9086, 0x0002,
+	0x080c, 0xd21e, 0x0c50, 0x080c, 0xa58f, 0x6020, 0x9086, 0x0002,
 	0x1150, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e, 0x0990, 0x9086,
 	0x008b, 0x0978, 0x08d0, 0x6020, 0x9086, 0x0005, 0x19b0, 0x6004,
 	0x0006, 0x9086, 0x0085, 0x000e, 0x0d18, 0x9086, 0x008b, 0x0d00,
 	0x0860, 0x0006, 0x0096, 0x00b6, 0x00c6, 0x0066, 0x9036, 0x7828,
 	0x9065, 0x0510, 0x6010, 0x2058, 0x600c, 0x0006, 0x3e08, 0x918e,
 	0x0002, 0x1118, 0xb800, 0xd0bc, 0x11a8, 0x6043, 0xffff, 0x080c,
-	0x9a69, 0x0180, 0x610c, 0x080c, 0x90f5, 0x6014, 0x2048, 0xa867,
-	0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x698f, 0x080c, 0x9c06,
+	0x9a84, 0x0180, 0x610c, 0x080c, 0x9110, 0x6014, 0x2048, 0xa867,
+	0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0x6996, 0x080c, 0x9c21,
 	0x000e, 0x08f0, 0x2c30, 0x0ce0, 0x006e, 0x00ce, 0x00be, 0x009e,
-	0x000e, 0x0005, 0x00e6, 0x00d6, 0x0096, 0x0066, 0x080c, 0x5dcf,
+	0x000e, 0x0005, 0x00e6, 0x00d6, 0x0096, 0x0066, 0x080c, 0x5dd6,
 	0x11b0, 0x2071, 0x19b8, 0x7030, 0x9080, 0x0005, 0x2004, 0x904d,
 	0x0170, 0xa878, 0x9606, 0x1158, 0x2071, 0x19b8, 0x7030, 0x9035,
 	0x0130, 0x9080, 0x0005, 0x2004, 0x9906, 0x1108, 0x0029, 0x006e,
 	0x009e, 0x00de, 0x00ee, 0x0005, 0x00c6, 0x2660, 0x6043, 0xffff,
-	0x080c, 0x9a69, 0x0178, 0x080c, 0x90f5, 0x6014, 0x2048, 0xa867,
-	0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0xbb2a, 0x080c, 0x698f,
-	0x080c, 0x9c06, 0x00ce, 0x0005, 0x00b6, 0x00e6, 0x00c6, 0x080c,
-	0x990b, 0x0106, 0x190c, 0x98ad, 0x2071, 0x0101, 0x2e04, 0xc0c4,
-	0x2072, 0x6044, 0xd0fc, 0x1138, 0x010e, 0x190c, 0x98c9, 0x00ce,
+	0x080c, 0x9a84, 0x0178, 0x080c, 0x9110, 0x6014, 0x2048, 0xa867,
+	0x0103, 0xab7a, 0xa877, 0x0000, 0x080c, 0xbb45, 0x080c, 0x6996,
+	0x080c, 0x9c21, 0x00ce, 0x0005, 0x00b6, 0x00e6, 0x00c6, 0x080c,
+	0x9926, 0x0106, 0x190c, 0x98c8, 0x2071, 0x0101, 0x2e04, 0xc0c4,
+	0x2072, 0x6044, 0xd0fc, 0x1138, 0x010e, 0x190c, 0x98e4, 0x00ce,
 	0x00ee, 0x00be, 0x0005, 0x2071, 0x19b8, 0x7030, 0x9005, 0x0da0,
-	0x9c06, 0x190c, 0x0d65, 0x7036, 0x080c, 0x81e3, 0x7004, 0x9084,
-	0x0007, 0x0002, 0x887c, 0x887e, 0x8885, 0x888f, 0x889d, 0x887c,
-	0x8885, 0x887a, 0x080c, 0x0d65, 0x0428, 0x0005, 0x080c, 0x9a54,
+	0x9c06, 0x190c, 0x0d65, 0x7036, 0x080c, 0x820b, 0x7004, 0x9084,
+	0x0007, 0x0002, 0x88a4, 0x88a6, 0x88ad, 0x88b7, 0x88c5, 0x88a4,
+	0x88ad, 0x88a2, 0x080c, 0x0d65, 0x0428, 0x0005, 0x080c, 0x9a6f,
 	0x7007, 0x0000, 0x7033, 0x0000, 0x00e8, 0x0066, 0x9036, 0x080c,
-	0x90f5, 0x006e, 0x7007, 0x0000, 0x7033, 0x0000, 0x0098, 0x080c,
-	0x9a3f, 0x0140, 0x080c, 0x9a54, 0x0128, 0x0066, 0x9036, 0x080c,
-	0x90f5, 0x006e, 0x7033, 0x0000, 0x0028, 0x080c, 0x9a3f, 0x080c,
-	0x9487, 0x0000, 0x010e, 0x190c, 0x98c9, 0x00ce, 0x00ee, 0x00be,
-	0x0005, 0x00d6, 0x00c6, 0x080c, 0x990b, 0x0106, 0x190c, 0x98ad,
-	0x6044, 0xd0fc, 0x1130, 0x010e, 0x190c, 0x98c9, 0x00ce, 0x00de,
+	0x9110, 0x006e, 0x7007, 0x0000, 0x7033, 0x0000, 0x0098, 0x080c,
+	0x9a5a, 0x0140, 0x080c, 0x9a6f, 0x0128, 0x0066, 0x9036, 0x080c,
+	0x9110, 0x006e, 0x7033, 0x0000, 0x0028, 0x080c, 0x9a5a, 0x080c,
+	0x94a2, 0x0000, 0x010e, 0x190c, 0x98e4, 0x00ce, 0x00ee, 0x00be,
+	0x0005, 0x00d6, 0x00c6, 0x080c, 0x9926, 0x0106, 0x190c, 0x98c8,
+	0x6044, 0xd0fc, 0x1130, 0x010e, 0x190c, 0x98e4, 0x00ce, 0x00de,
 	0x0005, 0x2069, 0x19b8, 0x684c, 0x9005, 0x0da8, 0x9c06, 0x190c,
-	0x0d65, 0x6852, 0x00e6, 0x2d70, 0x080c, 0x84f9, 0x00ee, 0x080c,
-	0x81f0, 0x0016, 0x2009, 0x0040, 0x080c, 0x2052, 0x001e, 0x683c,
-	0x9084, 0x0003, 0x0002, 0x88d9, 0x88da, 0x88f8, 0x88d7, 0x080c,
+	0x0d65, 0x6852, 0x00e6, 0x2d70, 0x080c, 0x8521, 0x00ee, 0x080c,
+	0x8218, 0x0016, 0x2009, 0x0040, 0x080c, 0x2052, 0x001e, 0x683c,
+	0x9084, 0x0003, 0x0002, 0x8901, 0x8902, 0x8920, 0x88ff, 0x080c,
 	0x0d65, 0x0460, 0x6868, 0x9086, 0x0001, 0x0190, 0x600c, 0x9015,
 	0x0160, 0x6a4a, 0x600f, 0x0000, 0x6044, 0xc0fc, 0x6046, 0x9006,
 	0x7042, 0x684e, 0x683f, 0x0000, 0x00c8, 0x684a, 0x6846, 0x0ca0,
 	0x686b, 0x0000, 0x6848, 0x9065, 0x0d78, 0x6003, 0x0002, 0x0c60,
 	0x9006, 0x686a, 0x6852, 0x686e, 0x600c, 0x9015, 0x0120, 0x6a4a,
 	0x600f, 0x0000, 0x0018, 0x684e, 0x684a, 0x6846, 0x684f, 0x0000,
-	0x010e, 0x190c, 0x98c9, 0x00ce, 0x00de, 0x0005, 0x0005, 0x6020,
-	0x9084, 0x000f, 0x000b, 0x0005, 0x8924, 0x8927, 0x8d80, 0x8e0f,
-	0x8927, 0x8d80, 0x8e0f, 0x8924, 0x8927, 0x8924, 0x8924, 0x8924,
-	0x8924, 0x8924, 0x8924, 0x8924, 0x080c, 0x884c, 0x0005, 0x00b6,
+	0x010e, 0x190c, 0x98e4, 0x00ce, 0x00de, 0x0005, 0x0005, 0x6020,
+	0x9084, 0x000f, 0x000b, 0x0005, 0x894c, 0x894f, 0x8da8, 0x8e37,
+	0x894f, 0x8da8, 0x8e37, 0x894c, 0x894f, 0x894c, 0x894c, 0x894c,
+	0x894c, 0x894c, 0x894c, 0x894c, 0x080c, 0x8874, 0x0005, 0x00b6,
 	0x0156, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6,
 	0x00f6, 0x2069, 0x0200, 0x2071, 0x0240, 0x6004, 0x908a, 0x0053,
 	0x1a0c, 0x0d65, 0x6110, 0x2158, 0xb984, 0x2c78, 0x2061, 0x0100,
-	0x619a, 0x908a, 0x0040, 0x1a04, 0x8993, 0x005b, 0x00fe, 0x00ee,
+	0x619a, 0x908a, 0x0040, 0x1a04, 0x89bb, 0x005b, 0x00fe, 0x00ee,
 	0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x00be,
-	0x0005, 0x8b0a, 0x8b45, 0x8b6e, 0x8c11, 0x8c32, 0x8c38, 0x8c45,
-	0x8c4d, 0x8c59, 0x8c5f, 0x8c70, 0x8c5f, 0x8cc7, 0x8c4d, 0x8cd3,
-	0x8cd9, 0x8c59, 0x8cd9, 0x8ce5, 0x8991, 0x8991, 0x8991, 0x8991,
-	0x8991, 0x8991, 0x8991, 0x8991, 0x8991, 0x8991, 0x8991, 0x9116,
-	0x9139, 0x914a, 0x916a, 0x919c, 0x8c45, 0x8991, 0x8c45, 0x8c5f,
-	0x8991, 0x8b6e, 0x8c11, 0x8991, 0x957a, 0x8c5f, 0x8991, 0x9596,
-	0x8c5f, 0x8991, 0x8c59, 0x8b04, 0x89b4, 0x8991, 0x95b2, 0x961f,
-	0x96ff, 0x8991, 0x970c, 0x8c42, 0x9737, 0x8991, 0x91a6, 0x9743,
-	0x8991, 0x080c, 0x0d65, 0x2100, 0x005b, 0x00fe, 0x00ee, 0x00de,
+	0x0005, 0x8b32, 0x8b6d, 0x8b96, 0x8c39, 0x8c5a, 0x8c60, 0x8c6d,
+	0x8c75, 0x8c81, 0x8c87, 0x8c98, 0x8c87, 0x8cef, 0x8c75, 0x8cfb,
+	0x8d01, 0x8c81, 0x8d01, 0x8d0d, 0x89b9, 0x89b9, 0x89b9, 0x89b9,
+	0x89b9, 0x89b9, 0x89b9, 0x89b9, 0x89b9, 0x89b9, 0x89b9, 0x9131,
+	0x9154, 0x9165, 0x9185, 0x91b7, 0x8c6d, 0x89b9, 0x8c6d, 0x8c87,
+	0x89b9, 0x8b96, 0x8c39, 0x89b9, 0x9595, 0x8c87, 0x89b9, 0x95b1,
+	0x8c87, 0x89b9, 0x8c81, 0x8b2c, 0x89dc, 0x89b9, 0x95cd, 0x963a,
+	0x971a, 0x89b9, 0x9727, 0x8c6a, 0x9752, 0x89b9, 0x91c1, 0x975e,
+	0x89b9, 0x080c, 0x0d65, 0x2100, 0x005b, 0x00fe, 0x00ee, 0x00de,
 	0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x00be, 0x0005,
-	0x89b2, 0x89b2, 0x89b2, 0x89db, 0x8a87, 0x8a92, 0x89b2, 0x89b2,
-	0x89b2, 0x8ad9, 0x8ae5, 0x89f6, 0x89b2, 0x8a11, 0x8a45, 0x9abf,
-	0x9b04, 0x8c5f, 0x080c, 0x0d65, 0x00d6, 0x0096, 0x080c, 0x8cf8,
+	0x89da, 0x89da, 0x89da, 0x8a03, 0x8aaf, 0x8aba, 0x89da, 0x89da,
+	0x89da, 0x8b01, 0x8b0d, 0x8a1e, 0x89da, 0x8a39, 0x8a6d, 0x9ada,
+	0x9b1f, 0x8c87, 0x080c, 0x0d65, 0x00d6, 0x0096, 0x080c, 0x8d20,
 	0x7003, 0x2414, 0x7007, 0x0018, 0x700b, 0x0800, 0x7814, 0x2048,
 	0xa83c, 0x700e, 0xa850, 0x7022, 0xa854, 0x7026, 0x60c3, 0x0018,
-	0x080c, 0x8f6c, 0x009e, 0x00de, 0x0005, 0x7810, 0x00b6, 0x2058,
-	0xb8a0, 0x00be, 0x080c, 0x9b4b, 0x1118, 0x9084, 0xff80, 0x0110,
-	0x9085, 0x0001, 0x0005, 0x00d6, 0x0096, 0x080c, 0x8cf8, 0x7003,
+	0x080c, 0x8f87, 0x009e, 0x00de, 0x0005, 0x7810, 0x00b6, 0x2058,
+	0xb8a0, 0x00be, 0x080c, 0x9b66, 0x1118, 0x9084, 0xff80, 0x0110,
+	0x9085, 0x0001, 0x0005, 0x00d6, 0x0096, 0x080c, 0x8d20, 0x7003,
 	0x0500, 0x7814, 0x2048, 0xa874, 0x700a, 0xa878, 0x700e, 0xa87c,
 	0x7012, 0xa880, 0x7016, 0xa884, 0x701a, 0xa888, 0x701e, 0x60c3,
-	0x0010, 0x080c, 0x8f6c, 0x009e, 0x00de, 0x0005, 0x00d6, 0x0096,
-	0x080c, 0x8cf8, 0x7003, 0x0500, 0x7814, 0x2048, 0xa8cc, 0x700a,
+	0x0010, 0x080c, 0x8f87, 0x009e, 0x00de, 0x0005, 0x00d6, 0x0096,
+	0x080c, 0x8d20, 0x7003, 0x0500, 0x7814, 0x2048, 0xa8cc, 0x700a,
 	0xa8d0, 0x700e, 0xa8d4, 0x7012, 0xa8d8, 0x7016, 0xa8dc, 0x701a,
-	0xa8e0, 0x701e, 0x60c3, 0x0010, 0x080c, 0x8f6c, 0x009e, 0x00de,
-	0x0005, 0x00d6, 0x0096, 0x0126, 0x2091, 0x8000, 0x080c, 0x8cf8,
+	0xa8e0, 0x701e, 0x60c3, 0x0010, 0x080c, 0x8f87, 0x009e, 0x00de,
+	0x0005, 0x00d6, 0x0096, 0x0126, 0x2091, 0x8000, 0x080c, 0x8d20,
 	0x20e9, 0x0000, 0x2001, 0x1974, 0x2003, 0x0000, 0x7814, 0x2048,
 	0xa814, 0x8003, 0x60c2, 0xa830, 0x20a8, 0xa860, 0x20e0, 0xa85c,
 	0x9080, 0x001b, 0x2098, 0x2001, 0x1974, 0x0016, 0x200c, 0x2001,
-	0x0001, 0x080c, 0x2037, 0x080c, 0xc575, 0x9006, 0x080c, 0x2037,
+	0x0001, 0x080c, 0x2037, 0x080c, 0xc591, 0x9006, 0x080c, 0x2037,
 	0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c28, 0x04d9, 0x080c,
-	0x8f6c, 0x012e, 0x009e, 0x00de, 0x0005, 0x00d6, 0x0096, 0x0126,
-	0x2091, 0x8000, 0x080c, 0x8d43, 0x20e9, 0x0000, 0x2001, 0x1974,
+	0x8f87, 0x012e, 0x009e, 0x00de, 0x0005, 0x00d6, 0x0096, 0x0126,
+	0x2091, 0x8000, 0x080c, 0x8d6b, 0x20e9, 0x0000, 0x2001, 0x1974,
 	0x2003, 0x0000, 0x7814, 0x2048, 0xa86f, 0x0200, 0xa873, 0x0000,
 	0xa814, 0x8003, 0x60c2, 0xa830, 0x20a8, 0xa860, 0x20e0, 0xa85c,
 	0x9080, 0x001b, 0x2098, 0x2001, 0x1974, 0x0016, 0x200c, 0x080c,
-	0xc575, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c60, 0x0051,
-	0x7814, 0x2048, 0x080c, 0x0fd4, 0x080c, 0x8f6c, 0x012e, 0x009e,
+	0xc591, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c60, 0x0051,
+	0x7814, 0x2048, 0x080c, 0x0fd4, 0x080c, 0x8f87, 0x012e, 0x009e,
 	0x00de, 0x0005, 0x60c0, 0x8004, 0x9084, 0x0003, 0x9005, 0x0130,
 	0x9082, 0x0004, 0x20a3, 0x0000, 0x8000, 0x1de0, 0x0005, 0x080c,
-	0x8cf8, 0x7003, 0x7800, 0x7808, 0x8007, 0x700a, 0x60c3, 0x0008,
-	0x0804, 0x8f6c, 0x00d6, 0x00e6, 0x080c, 0x8d43, 0x7814, 0x9084,
+	0x8d20, 0x7003, 0x7800, 0x7808, 0x8007, 0x700a, 0x60c3, 0x0008,
+	0x0804, 0x8f87, 0x00d6, 0x00e6, 0x080c, 0x8d6b, 0x7814, 0x9084,
 	0xff00, 0x2073, 0x0200, 0x8e70, 0x8e70, 0x9095, 0x0010, 0x2272,
 	0x8e70, 0x2073, 0x0034, 0x8e70, 0x2069, 0x1805, 0x20a9, 0x0004,
-	0x2d76, 0x8d68, 0x8e70, 0x1f04, 0x8aa8, 0x2069, 0x1801, 0x20a9,
-	0x0004, 0x2d76, 0x8d68, 0x8e70, 0x1f04, 0x8ab1, 0x2069, 0x1984,
+	0x2d76, 0x8d68, 0x8e70, 0x1f04, 0x8ad0, 0x2069, 0x1801, 0x20a9,
+	0x0004, 0x2d76, 0x8d68, 0x8e70, 0x1f04, 0x8ad9, 0x2069, 0x1984,
 	0x9086, 0xdf00, 0x0110, 0x2069, 0x199e, 0x20a9, 0x001a, 0x9e86,
 	0x0260, 0x1148, 0x00c6, 0x2061, 0x0200, 0x6010, 0x8000, 0x6012,
 	0x00ce, 0x2071, 0x0240, 0x2d04, 0x8007, 0x2072, 0x8d68, 0x8e70,
-	0x1f04, 0x8abf, 0x60c3, 0x004c, 0x080c, 0x8f6c, 0x00ee, 0x00de,
-	0x0005, 0x080c, 0x8cf8, 0x7003, 0x6300, 0x7007, 0x0028, 0x7808,
-	0x700e, 0x60c3, 0x0008, 0x0804, 0x8f6c, 0x00d6, 0x0026, 0x0016,
-	0x080c, 0x8d43, 0x7003, 0x0200, 0x7814, 0x700e, 0x00e6, 0x9ef0,
+	0x1f04, 0x8ae7, 0x60c3, 0x004c, 0x080c, 0x8f87, 0x00ee, 0x00de,
+	0x0005, 0x080c, 0x8d20, 0x7003, 0x6300, 0x7007, 0x0028, 0x7808,
+	0x700e, 0x60c3, 0x0008, 0x0804, 0x8f87, 0x00d6, 0x0026, 0x0016,
+	0x080c, 0x8d6b, 0x7003, 0x0200, 0x7814, 0x700e, 0x00e6, 0x9ef0,
 	0x0004, 0x2009, 0x0001, 0x2011, 0x000c, 0x2073, 0x0800, 0x8e70,
-	0x2073, 0x0000, 0x00ee, 0x7206, 0x710a, 0x62c2, 0x080c, 0x8f6c,
+	0x2073, 0x0000, 0x00ee, 0x7206, 0x710a, 0x62c2, 0x080c, 0x8f87,
 	0x001e, 0x002e, 0x00de, 0x0005, 0x2001, 0x1817, 0x2004, 0x609a,
-	0x0804, 0x8f6c, 0x080c, 0x8cf8, 0x7003, 0x5200, 0x2069, 0x1853,
+	0x0804, 0x8f87, 0x080c, 0x8d20, 0x7003, 0x5200, 0x2069, 0x1853,
 	0x6804, 0xd084, 0x0130, 0x6828, 0x0016, 0x080c, 0x2457, 0x710e,
 	0x001e, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9,
 	0x0000, 0x20a1, 0x0250, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801,
-	0x20a1, 0x0254, 0x4003, 0x080c, 0x9b4b, 0x1120, 0xb8a0, 0x9082,
+	0x20a1, 0x0254, 0x4003, 0x080c, 0x9b66, 0x1120, 0xb8a0, 0x9082,
 	0x007f, 0x0248, 0x2001, 0x181e, 0x2004, 0x7032, 0x2001, 0x181f,
 	0x2004, 0x7036, 0x0030, 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff,
-	0x7036, 0x60c3, 0x001c, 0x0804, 0x8f6c, 0x080c, 0x8cf8, 0x7003,
-	0x0500, 0x080c, 0x9b4b, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248,
+	0x7036, 0x60c3, 0x001c, 0x0804, 0x8f87, 0x080c, 0x8d20, 0x7003,
+	0x0500, 0x080c, 0x9b66, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248,
 	0x2001, 0x181e, 0x2004, 0x700a, 0x2001, 0x181f, 0x2004, 0x700e,
 	0x0030, 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, 0x700e, 0x20a9,
 	0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1,
-	0x0250, 0x4003, 0x60c3, 0x0010, 0x0804, 0x8f6c, 0x080c, 0x8cf8,
-	0x9006, 0x080c, 0x662a, 0xb8a0, 0x9086, 0x007e, 0x1130, 0x7003,
+	0x0250, 0x4003, 0x60c3, 0x0010, 0x0804, 0x8f87, 0x080c, 0x8d20,
+	0x9006, 0x080c, 0x6631, 0xb8a0, 0x9086, 0x007e, 0x1130, 0x7003,
 	0x0400, 0x620c, 0xc2b4, 0x620e, 0x0058, 0x7814, 0x0096, 0x904d,
 	0x0120, 0x9006, 0xa89a, 0xa8a6, 0xa8aa, 0x009e, 0x7003, 0x0300,
-	0xb8a0, 0x9086, 0x007e, 0x1904, 0x8bd9, 0x00d6, 0x2069, 0x193d,
+	0xb8a0, 0x9086, 0x007e, 0x1904, 0x8c01, 0x00d6, 0x2069, 0x193d,
 	0x2001, 0x1836, 0x2004, 0xd0a4, 0x0178, 0x6800, 0x700a, 0x6808,
 	0x9084, 0x2000, 0x7012, 0x680c, 0x7016, 0x701f, 0x2710, 0x6818,
 	0x7022, 0x681c, 0x7026, 0x0080, 0x6800, 0x700a, 0x6804, 0x700e,
-	0x6808, 0x080c, 0x70ac, 0x1118, 0x9084, 0x37ff, 0x0010, 0x9084,
+	0x6808, 0x080c, 0x70b7, 0x1118, 0x9084, 0x37ff, 0x0010, 0x9084,
 	0x3fff, 0x7012, 0x680c, 0x7016, 0x00de, 0x20a9, 0x0004, 0x20e1,
 	0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1, 0x0256, 0x4003,
 	0x20a9, 0x0004, 0x2099, 0x1801, 0x20a1, 0x025a, 0x4003, 0x00d6,
-	0x080c, 0x97ca, 0x2069, 0x1945, 0x2071, 0x024e, 0x6800, 0xc0dd,
-	0x7002, 0x080c, 0x538a, 0xd0e4, 0x0110, 0x680c, 0x700e, 0x00de,
+	0x080c, 0x97e5, 0x2069, 0x1945, 0x2071, 0x024e, 0x6800, 0xc0dd,
+	0x7002, 0x080c, 0x5391, 0xd0e4, 0x0110, 0x680c, 0x700e, 0x00de,
 	0x04a0, 0x2001, 0x1836, 0x2004, 0xd0a4, 0x0168, 0x0016, 0x2009,
 	0x0002, 0x60e0, 0x9106, 0x0130, 0x2100, 0x60e3, 0x0000, 0x080c,
 	0x2498, 0x61e2, 0x001e, 0x20e1, 0x0001, 0x2099, 0x193d, 0x20e9,
 	0x0000, 0x20a1, 0x024e, 0x20a9, 0x0008, 0x4003, 0x20a9, 0x0004,
 	0x2099, 0x1805, 0x20a1, 0x0256, 0x4003, 0x20a9, 0x0004, 0x2099,
-	0x1801, 0x20a1, 0x025a, 0x4003, 0x080c, 0x97ca, 0x20a1, 0x024e,
+	0x1801, 0x20a1, 0x025a, 0x4003, 0x080c, 0x97e5, 0x20a1, 0x024e,
 	0x20a9, 0x0008, 0x2099, 0x1945, 0x4003, 0x60c3, 0x0074, 0x0804,
-	0x8f6c, 0x080c, 0x8cf8, 0x7003, 0x2010, 0x7007, 0x0014, 0x700b,
+	0x8f87, 0x080c, 0x8d20, 0x7003, 0x2010, 0x7007, 0x0014, 0x700b,
 	0x0800, 0x700f, 0x2000, 0x9006, 0x00f6, 0x2079, 0x1853, 0x7904,
 	0x00fe, 0xd1ac, 0x1110, 0x9085, 0x0020, 0x0010, 0x9085, 0x0010,
-	0x9085, 0x0002, 0x00d6, 0x0804, 0x8ca8, 0x7026, 0x60c3, 0x0014,
-	0x0804, 0x8f6c, 0x080c, 0x8cf8, 0x7003, 0x5000, 0x0804, 0x8b88,
-	0x080c, 0x8cf8, 0x7003, 0x2110, 0x7007, 0x0014, 0x60c3, 0x0014,
-	0x0804, 0x8f6c, 0x080c, 0x8d3a, 0x0010, 0x080c, 0x8d43, 0x7003,
-	0x0200, 0x60c3, 0x0004, 0x0804, 0x8f6c, 0x080c, 0x8d43, 0x7003,
+	0x9085, 0x0002, 0x00d6, 0x0804, 0x8cd0, 0x7026, 0x60c3, 0x0014,
+	0x0804, 0x8f87, 0x080c, 0x8d20, 0x7003, 0x5000, 0x0804, 0x8bb0,
+	0x080c, 0x8d20, 0x7003, 0x2110, 0x7007, 0x0014, 0x60c3, 0x0014,
+	0x0804, 0x8f87, 0x080c, 0x8d62, 0x0010, 0x080c, 0x8d6b, 0x7003,
+	0x0200, 0x60c3, 0x0004, 0x0804, 0x8f87, 0x080c, 0x8d6b, 0x7003,
 	0x0100, 0x700b, 0x0003, 0x700f, 0x2a00, 0x60c3, 0x0008, 0x0804,
-	0x8f6c, 0x080c, 0x8d43, 0x7003, 0x0200, 0x0804, 0x8b88, 0x080c,
-	0x8d43, 0x7003, 0x0100, 0x782c, 0x9005, 0x0110, 0x700a, 0x0010,
-	0x700b, 0x0003, 0x7814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x8f6c,
-	0x00d6, 0x080c, 0x8d43, 0x7003, 0x0210, 0x7007, 0x0014, 0x700b,
+	0x8f87, 0x080c, 0x8d6b, 0x7003, 0x0200, 0x0804, 0x8bb0, 0x080c,
+	0x8d6b, 0x7003, 0x0100, 0x782c, 0x9005, 0x0110, 0x700a, 0x0010,
+	0x700b, 0x0003, 0x7814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x8f87,
+	0x00d6, 0x080c, 0x8d6b, 0x7003, 0x0210, 0x7007, 0x0014, 0x700b,
 	0x0800, 0xb894, 0x9086, 0x0014, 0x1198, 0xb99c, 0x9184, 0x0030,
 	0x0190, 0xb998, 0x9184, 0xc000, 0x1140, 0xd1ec, 0x0118, 0x700f,
 	0x2100, 0x0058, 0x700f, 0x0100, 0x0040, 0x700f, 0x0400, 0x0028,
@@ -4298,2359 +4303,2358 @@
 	0x0026, 0x2009, 0x1873, 0x210c, 0xd1e4, 0x0150, 0xc0c5, 0xbac4,
 	0xd28c, 0x1108, 0xc0cd, 0x9094, 0x0030, 0x9296, 0x0010, 0x0140,
 	0xd1ec, 0x0130, 0x9094, 0x0030, 0x9296, 0x0010, 0x0108, 0xc0bd,
-	0x002e, 0x7026, 0x60c3, 0x0014, 0x00de, 0x0804, 0x8f6c, 0x080c,
-	0x8d43, 0x7003, 0x0210, 0x7007, 0x0014, 0x700f, 0x0100, 0x60c3,
-	0x0014, 0x0804, 0x8f6c, 0x080c, 0x8d43, 0x7003, 0x0200, 0x0804,
-	0x8b0e, 0x080c, 0x8d43, 0x7003, 0x0100, 0x700b, 0x0003, 0x700f,
-	0x2a00, 0x60c3, 0x0008, 0x0804, 0x8f6c, 0x080c, 0x8d43, 0x7003,
-	0x0100, 0x700b, 0x000b, 0x60c3, 0x0008, 0x0804, 0x8f6c, 0x0026,
+	0x002e, 0x7026, 0x60c3, 0x0014, 0x00de, 0x0804, 0x8f87, 0x080c,
+	0x8d6b, 0x7003, 0x0210, 0x7007, 0x0014, 0x700f, 0x0100, 0x60c3,
+	0x0014, 0x0804, 0x8f87, 0x080c, 0x8d6b, 0x7003, 0x0200, 0x0804,
+	0x8b36, 0x080c, 0x8d6b, 0x7003, 0x0100, 0x700b, 0x0003, 0x700f,
+	0x2a00, 0x60c3, 0x0008, 0x0804, 0x8f87, 0x080c, 0x8d6b, 0x7003,
+	0x0100, 0x700b, 0x000b, 0x60c3, 0x0008, 0x0804, 0x8f87, 0x0026,
 	0x00d6, 0x0036, 0x0046, 0x2019, 0x3200, 0x2021, 0x0800, 0x0040,
 	0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x2200, 0x2021, 0x0100,
-	0x080c, 0x97df, 0xb810, 0x9305, 0x7002, 0xb814, 0x7006, 0x2069,
+	0x080c, 0x97fa, 0xb810, 0x9305, 0x7002, 0xb814, 0x7006, 0x2069,
 	0x1800, 0x6878, 0x700a, 0x687c, 0x700e, 0x9485, 0x0029, 0x7012,
-	0x004e, 0x003e, 0x00de, 0x080c, 0x8f60, 0x721a, 0x9f95, 0x0000,
+	0x004e, 0x003e, 0x00de, 0x080c, 0x8f7b, 0x721a, 0x9f95, 0x0000,
 	0x7222, 0x7027, 0xffff, 0x2071, 0x024c, 0x002e, 0x0005, 0x0026,
-	0x080c, 0x97df, 0x7003, 0x02ff, 0x7007, 0xfffc, 0x00d6, 0x2069,
+	0x080c, 0x97fa, 0x7003, 0x02ff, 0x7007, 0xfffc, 0x00d6, 0x2069,
 	0x1800, 0x6878, 0x700a, 0x687c, 0x700e, 0x00de, 0x7013, 0x2029,
 	0x0c10, 0x7003, 0x0100, 0x7007, 0x0000, 0x700b, 0xfc02, 0x700f,
 	0x0000, 0x0005, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x3300,
 	0x2021, 0x0800, 0x0040, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019,
-	0x2300, 0x2021, 0x0100, 0x080c, 0x97df, 0xb810, 0x9305, 0x7002,
+	0x2300, 0x2021, 0x0100, 0x080c, 0x97fa, 0xb810, 0x9305, 0x7002,
 	0xb814, 0x7006, 0x2069, 0x1800, 0xb810, 0x9005, 0x1140, 0xb814,
 	0x9005, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffe, 0x0020, 0x6878,
 	0x700a, 0x687c, 0x700e, 0x0000, 0x9485, 0x0098, 0x7012, 0x004e,
-	0x003e, 0x00de, 0x080c, 0x8f60, 0x721a, 0x7a08, 0x7222, 0x2f10,
-	0x7226, 0x2071, 0x024c, 0x002e, 0x0005, 0x080c, 0x8f60, 0x721a,
+	0x003e, 0x00de, 0x080c, 0x8f7b, 0x721a, 0x7a08, 0x7222, 0x2f10,
+	0x7226, 0x2071, 0x024c, 0x002e, 0x0005, 0x080c, 0x8f7b, 0x721a,
 	0x7a08, 0x7222, 0x7814, 0x7026, 0x2071, 0x024c, 0x002e, 0x0005,
 	0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2069, 0x0200, 0x2071,
 	0x0240, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0d65, 0x908a, 0x0092,
 	0x1a0c, 0x0d65, 0x6110, 0x2158, 0xb984, 0x2c78, 0x2061, 0x0100,
 	0x619a, 0x9082, 0x0085, 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce,
-	0x00be, 0x0005, 0x8db1, 0x8dc0, 0x8dcb, 0x8daf, 0x8daf, 0x8daf,
-	0x8db1, 0x8daf, 0x8daf, 0x8daf, 0x8daf, 0x8daf, 0x8daf, 0x080c,
+	0x00be, 0x0005, 0x8dd9, 0x8de8, 0x8df3, 0x8dd7, 0x8dd7, 0x8dd7,
+	0x8dd9, 0x8dd7, 0x8dd7, 0x8dd7, 0x8dd7, 0x8dd7, 0x8dd7, 0x080c,
 	0x0d65, 0x0411, 0x60c3, 0x0000, 0x0026, 0x080c, 0x27a2, 0x0228,
-	0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012, 0x002e, 0x0804, 0x8f6c,
+	0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012, 0x002e, 0x0804, 0x8f87,
 	0x0431, 0x7808, 0x700a, 0x7814, 0x700e, 0x7017, 0xffff, 0x60c3,
-	0x000c, 0x0804, 0x8f6c, 0x0479, 0x7003, 0x0003, 0x7007, 0x0300,
-	0x60c3, 0x0004, 0x0804, 0x8f6c, 0x0026, 0x080c, 0x97df, 0xb810,
+	0x000c, 0x0804, 0x8f87, 0x0479, 0x7003, 0x0003, 0x7007, 0x0300,
+	0x60c3, 0x0004, 0x0804, 0x8f87, 0x0026, 0x080c, 0x97fa, 0xb810,
 	0x9085, 0x8100, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6878,
-	0x700a, 0x687c, 0x700e, 0x7013, 0x0009, 0x0804, 0x8d13, 0x0026,
-	0x080c, 0x97df, 0xb810, 0x9085, 0x8400, 0x7002, 0xb814, 0x7006,
+	0x700a, 0x687c, 0x700e, 0x7013, 0x0009, 0x0804, 0x8d3b, 0x0026,
+	0x080c, 0x97fa, 0xb810, 0x9085, 0x8400, 0x7002, 0xb814, 0x7006,
 	0x2069, 0x1800, 0x6878, 0x700a, 0x687c, 0x700e, 0x2001, 0x0099,
-	0x7012, 0x0804, 0x8d75, 0x0026, 0x080c, 0x97df, 0xb810, 0x9085,
+	0x7012, 0x0804, 0x8d9d, 0x0026, 0x080c, 0x97fa, 0xb810, 0x9085,
 	0x8500, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6878, 0x700a,
-	0x687c, 0x700e, 0x2001, 0x0099, 0x7012, 0x0804, 0x8d75, 0x00b6,
+	0x687c, 0x700e, 0x2001, 0x0099, 0x7012, 0x0804, 0x8d9d, 0x00b6,
 	0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2c78, 0x2069, 0x0200, 0x2071,
 	0x0240, 0x7804, 0x908a, 0x0040, 0x0a0c, 0x0d65, 0x908a, 0x0057,
 	0x1a0c, 0x0d65, 0x7910, 0x2158, 0xb984, 0x2061, 0x0100, 0x619a,
 	0x9082, 0x0040, 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be,
-	0x0005, 0x8e44, 0x8e44, 0x8e44, 0x8e68, 0x8e44, 0x8e44, 0x8e44,
-	0x8e44, 0x8e44, 0x8e44, 0x8e44, 0x933a, 0x9342, 0x934a, 0x9352,
-	0x8e44, 0x8e44, 0x8e44, 0x9332, 0x080c, 0x0d65, 0x6813, 0x0008,
+	0x0005, 0x8e6c, 0x8e6c, 0x8e6c, 0x8e92, 0x8e6c, 0x8e6c, 0x8e6c,
+	0x8e6c, 0x8e6c, 0x8e6c, 0x8e6c, 0x9355, 0x935d, 0x9365, 0x936d,
+	0x8e6c, 0x8e6c, 0x8e6c, 0x934d, 0x080c, 0x0d65, 0x6813, 0x0008,
 	0xba8c, 0x8210, 0xb8c4, 0xd084, 0x0128, 0x7a4e, 0x7b14, 0x7b52,
 	0x722e, 0x732a, 0x9294, 0x00ff, 0xba8e, 0x8217, 0x721a, 0xba10,
-	0x9295, 0x0600, 0x7202, 0xba14, 0x7206, 0x6a78, 0x720a, 0x6a7c,
-	0x720e, 0x7013, 0x0829, 0x2f10, 0x7222, 0x7027, 0xffff, 0x0005,
-	0x0016, 0x7814, 0x9084, 0x0700, 0x8007, 0x0013, 0x001e, 0x0005,
-	0x8e78, 0x8e78, 0x8e7a, 0x8e78, 0x8e78, 0x8e78, 0x8e94, 0x8e78,
-	0x080c, 0x0d65, 0x7914, 0x918c, 0x08ff, 0x918d, 0xf600, 0x7916,
-	0x2009, 0x0003, 0x00b9, 0x2069, 0x1853, 0x6804, 0xd0bc, 0x0130,
-	0x682c, 0x9084, 0x00ff, 0x8007, 0x7032, 0x0010, 0x7033, 0x3f00,
-	0x60c3, 0x0001, 0x0804, 0x8f6c, 0x2009, 0x0003, 0x0019, 0x7033,
-	0x7f00, 0x0cb0, 0x0016, 0x080c, 0x97df, 0x001e, 0xb810, 0x9085,
-	0x0100, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6a78, 0x720a,
-	0x6a7c, 0x720e, 0x7013, 0x0888, 0x918d, 0x0008, 0x7116, 0x080c,
-	0x8f60, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x0005, 0x00b6,
-	0x0096, 0x00e6, 0x00d6, 0x00c6, 0x0056, 0x0046, 0x0036, 0x2061,
-	0x0100, 0x2071, 0x1800, 0x7810, 0x2058, 0xb8a0, 0x2028, 0xb910,
-	0xba14, 0x7378, 0x747c, 0x7820, 0x0002, 0x8edc, 0x8edc, 0x8edc,
-	0x8edc, 0x8edc, 0x8edc, 0x8edc, 0x8edc, 0x8edc, 0x8edc, 0x8ede,
-	0x8edc, 0x8edc, 0x8edc, 0x8edc, 0x080c, 0x0d65, 0x609f, 0x0000,
-	0x7814, 0x2048, 0xa87c, 0xd0fc, 0x05d0, 0xaf90, 0x9784, 0xff00,
-	0x9105, 0x6062, 0x873f, 0x9784, 0xff00, 0x0006, 0x7814, 0x2048,
-	0xa878, 0xc0fc, 0x9005, 0x000e, 0x1160, 0xaf94, 0x87ff, 0x0510,
-	0x2039, 0x0098, 0x9705, 0x6072, 0x7808, 0x6082, 0x2f00, 0x6086,
-	0x0038, 0x9185, 0x2200, 0x6062, 0x6073, 0x0129, 0x6077, 0x0000,
-	0x609f, 0x0000, 0x2001, 0x1836, 0x2004, 0xd0ac, 0x11a8, 0xd09c,
-	0x0130, 0x7814, 0x2048, 0xa874, 0x9082, 0x0080, 0x1268, 0xb814,
-	0x609e, 0x0050, 0x2039, 0x0029, 0x9705, 0x6072, 0x0c48, 0x9185,
-	0x0200, 0x6062, 0x6073, 0x2029, 0xa87c, 0xd0fc, 0x0118, 0xaf94,
-	0x87ff, 0x1120, 0x2f00, 0x6082, 0x7808, 0x6086, 0x6266, 0x636a,
-	0x646e, 0x6077, 0x0000, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e,
-	0x8007, 0x607a, 0x607f, 0x0000, 0xa848, 0x608a, 0xa844, 0x608e,
-	0xa838, 0x60c6, 0xa834, 0x60ca, 0xb86c, 0x60ce, 0x60af, 0x95d5,
-	0x60d7, 0x0000, 0x080c, 0x97bf, 0x2009, 0x07d0, 0x60c4, 0x9084,
-	0xfff0, 0x9005, 0x0110, 0x2009, 0x1b58, 0x080c, 0x81e8, 0x003e,
-	0x004e, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x009e, 0x00be, 0x0005,
-	0x7a40, 0x9294, 0x00ff, 0x8217, 0x0005, 0x00d6, 0x2069, 0x19b8,
-	0x686b, 0x0001, 0x00de, 0x0005, 0x60a3, 0x0056, 0x60a7, 0x9575,
-	0x00f1, 0x080c, 0x81da, 0x0005, 0x0016, 0x2001, 0x180c, 0x200c,
-	0x9184, 0x0600, 0x9086, 0x0600, 0x0128, 0x0089, 0x080c, 0x81da,
-	0x001e, 0x0005, 0xc1e5, 0x2001, 0x180c, 0x2102, 0x2001, 0x19b9,
-	0x2003, 0x0000, 0x2001, 0x19c4, 0x2003, 0x0000, 0x0c88, 0x0006,
-	0x0016, 0x0026, 0x2009, 0x1804, 0x2011, 0x0009, 0x080c, 0x287c,
-	0x002e, 0x001e, 0x000e, 0x0005, 0x0016, 0x00c6, 0x0006, 0x080c,
-	0x990b, 0x0106, 0x190c, 0x98ad, 0x2061, 0x0100, 0x61a4, 0x60a7,
-	0x95f5, 0x0016, 0x0026, 0x2009, 0x1804, 0x2011, 0x0008, 0x080c,
-	0x287c, 0x002e, 0x001e, 0x010e, 0x190c, 0x98c9, 0x000e, 0xa001,
-	0xa001, 0xa001, 0x61a6, 0x00ce, 0x001e, 0x0005, 0x00c6, 0x00d6,
-	0x0016, 0x0026, 0x2061, 0x0100, 0x2069, 0x0140, 0x080c, 0x70ac,
-	0x1510, 0x2001, 0x19dd, 0x2004, 0x9005, 0x1904, 0x901d, 0x080c,
-	0x714d, 0x11a8, 0x2069, 0x0380, 0x6843, 0x0101, 0x6844, 0xd084,
-	0x1de8, 0x2061, 0x0100, 0x6020, 0xd0b4, 0x1120, 0x6024, 0xd084,
-	0x090c, 0x0d65, 0x6843, 0x0100, 0x080c, 0x81da, 0x04b0, 0x00c6,
-	0x2061, 0x19b8, 0x00f0, 0x6904, 0x9194, 0x4000, 0x0598, 0x080c,
-	0x8f9c, 0x080c, 0x2843, 0x00c6, 0x2061, 0x19b8, 0x6134, 0x9192,
-	0x0008, 0x1278, 0x8108, 0x6136, 0x080c, 0x98ad, 0x6130, 0x080c,
-	0x98c9, 0x00ce, 0x81ff, 0x01c8, 0x080c, 0x81da, 0x080c, 0x8f8f,
-	0x00a0, 0x080c, 0x98ad, 0x6130, 0x91e5, 0x0000, 0x0150, 0x080c,
-	0xd5ee, 0x080c, 0x81e3, 0x6003, 0x0001, 0x2009, 0x0014, 0x080c,
-	0x9c6a, 0x080c, 0x98c9, 0x00ce, 0x0000, 0x002e, 0x001e, 0x00de,
-	0x00ce, 0x0005, 0x2001, 0x19dd, 0x2004, 0x9005, 0x1db0, 0x00c6,
-	0x2061, 0x19b8, 0x6134, 0x9192, 0x0003, 0x1ad8, 0x8108, 0x6136,
-	0x00ce, 0x080c, 0x81da, 0x080c, 0x5b90, 0x2009, 0x1852, 0x2114,
-	0x8210, 0x220a, 0x0c10, 0x0096, 0x00c6, 0x00d6, 0x00e6, 0x0016,
-	0x0026, 0x080c, 0x81f0, 0x080c, 0x98ad, 0x2001, 0x0387, 0x2003,
-	0x0202, 0x2071, 0x19b8, 0x714c, 0x81ff, 0x0904, 0x90b1, 0x2061,
-	0x0100, 0x2069, 0x0140, 0x080c, 0x70ac, 0x11c0, 0x0036, 0x2019,
-	0x0002, 0x080c, 0x926b, 0x003e, 0x714c, 0x2160, 0x080c, 0xd5ee,
-	0x2009, 0x004a, 0x6003, 0x0003, 0x080c, 0x9c6a, 0x2001, 0x0386,
-	0x2003, 0x5040, 0x080c, 0x714d, 0x0804, 0x90b1, 0x6904, 0xd1f4,
-	0x0904, 0x90be, 0x080c, 0x2843, 0x00c6, 0x704c, 0x9065, 0x090c,
-	0x0d65, 0x6020, 0x00ce, 0x9086, 0x0006, 0x1518, 0x61c8, 0x60c4,
-	0x9105, 0x11f8, 0x2009, 0x180c, 0x2104, 0xd0d4, 0x01d0, 0x6214,
-	0x9294, 0x1800, 0x1128, 0x6224, 0x9294, 0x0002, 0x1510, 0x0010,
-	0xc0d4, 0x200a, 0x6014, 0x9084, 0xe7fd, 0x9085, 0x0010, 0x6016,
-	0x704c, 0x2060, 0x080c, 0x88a9, 0x2009, 0x0049, 0x080c, 0x9c6a,
-	0x0080, 0x0036, 0x2019, 0x0001, 0x080c, 0x926b, 0x003e, 0x714c,
-	0x2160, 0x080c, 0xd5ee, 0x2009, 0x004a, 0x6003, 0x0003, 0x080c,
-	0x9c6a, 0x2001, 0x0387, 0x2003, 0x0200, 0x080c, 0x98c9, 0x002e,
-	0x001e, 0x00ee, 0x00de, 0x00ce, 0x009e, 0x0005, 0xd1ec, 0x1904,
-	0x9072, 0x0804, 0x9074, 0x0026, 0x00e6, 0x2071, 0x19b8, 0x706c,
-	0xd084, 0x01d0, 0xc084, 0x706e, 0x714c, 0x81ff, 0x01a8, 0x2071,
-	0x0100, 0x9188, 0x0008, 0x2114, 0x928e, 0x0006, 0x1138, 0x2009,
-	0x1984, 0x2011, 0x0012, 0x080c, 0x287c, 0x0030, 0x2009, 0x1984,
-	0x2011, 0x0016, 0x080c, 0x287c, 0x00ee, 0x002e, 0x0005, 0x9036,
-	0x2001, 0x19c2, 0x2004, 0x9005, 0x0128, 0x9c06, 0x0128, 0x2c30,
-	0x600c, 0x0cc8, 0x9085, 0x0001, 0x0005, 0x00f6, 0x2079, 0x19b8,
-	0x610c, 0x9006, 0x600e, 0x6044, 0xc0fc, 0x6046, 0x86ff, 0x1140,
-	0x7824, 0x9c06, 0x1118, 0x7826, 0x782a, 0x0050, 0x792a, 0x0040,
-	0x00c6, 0x2660, 0x610e, 0x00ce, 0x7824, 0x9c06, 0x1108, 0x7e26,
-	0x080c, 0x935d, 0x080c, 0xba1b, 0x00fe, 0x0005, 0x080c, 0x8cf8,
-	0x7003, 0x1200, 0x7838, 0x7012, 0x783c, 0x7016, 0x00c6, 0x7820,
-	0x9086, 0x0004, 0x1148, 0x7810, 0x9005, 0x0130, 0x00b6, 0x2058,
-	0xb810, 0xb914, 0x00be, 0x0020, 0x2061, 0x1800, 0x6078, 0x617c,
-	0x9084, 0x00ff, 0x700a, 0x710e, 0x00ce, 0x60c3, 0x002c, 0x0804,
-	0x8f6c, 0x080c, 0x8cf8, 0x7003, 0x0f00, 0x7808, 0xd09c, 0x0128,
-	0xb810, 0x9084, 0x00ff, 0x700a, 0xb814, 0x700e, 0x60c3, 0x0008,
-	0x0804, 0x8f6c, 0x0156, 0x080c, 0x8d43, 0x7003, 0x0200, 0x2011,
-	0x1848, 0x63f0, 0x2312, 0x20a9, 0x0006, 0x2011, 0x1840, 0x2019,
-	0x1841, 0x9ef0, 0x0002, 0x2376, 0x8e70, 0x2276, 0x8e70, 0x9398,
-	0x0002, 0x9290, 0x0002, 0x1f04, 0x915b, 0x60c3, 0x001c, 0x015e,
-	0x0804, 0x8f6c, 0x0016, 0x0026, 0x080c, 0x8d1f, 0x080c, 0x8d31,
-	0x9e80, 0x0004, 0x20e9, 0x0000, 0x20a0, 0x7814, 0x0096, 0x2048,
-	0xa800, 0x2048, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0021, 0x2098,
-	0x009e, 0x7808, 0x9088, 0x0002, 0x21a8, 0x9192, 0x0010, 0x1250,
-	0x4003, 0x9080, 0x0004, 0x8003, 0x60c2, 0x080c, 0x8f6c, 0x002e,
-	0x001e, 0x0005, 0x20a9, 0x0010, 0x4003, 0x080c, 0x97ca, 0x20a1,
-	0x0240, 0x22a8, 0x4003, 0x0c68, 0x080c, 0x8cf8, 0x7003, 0x6200,
-	0x7808, 0x700e, 0x60c3, 0x0008, 0x0804, 0x8f6c, 0x0016, 0x0026,
-	0x080c, 0x8cf8, 0x20e9, 0x0000, 0x20a1, 0x024c, 0x7814, 0x0096,
-	0x2048, 0xa800, 0x2048, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0023,
-	0x2098, 0x009e, 0x7808, 0x9088, 0x0002, 0x21a8, 0x4003, 0x8003,
-	0x60c2, 0x080c, 0x8f6c, 0x002e, 0x001e, 0x0005, 0x00e6, 0x00c6,
-	0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19b8, 0x7010, 0x2060,
-	0x8cff, 0x0188, 0x080c, 0xba41, 0x1110, 0x080c, 0xa574, 0x600c,
-	0x0006, 0x080c, 0xbcb8, 0x600f, 0x0000, 0x080c, 0x9bcc, 0x080c,
-	0x935d, 0x00ce, 0x0c68, 0x2c00, 0x7012, 0x700e, 0x012e, 0x000e,
-	0x00ce, 0x00ee, 0x0005, 0x0126, 0x0156, 0x00f6, 0x00e6, 0x00d6,
-	0x00c6, 0x0066, 0x0026, 0x0016, 0x0006, 0x2091, 0x8000, 0x2001,
-	0x180c, 0x200c, 0x918c, 0xe7ff, 0x2102, 0x2069, 0x0100, 0x2079,
-	0x0140, 0x2071, 0x19b8, 0x7030, 0x2060, 0x8cff, 0x0548, 0x080c,
-	0x8f9c, 0x6ac0, 0x68c3, 0x0000, 0x080c, 0x81e3, 0x00c6, 0x2061,
-	0x0100, 0x080c, 0x97e3, 0x00ce, 0x20a9, 0x01f4, 0x04b1, 0x080c,
-	0x884c, 0x6044, 0xd0ac, 0x1128, 0x2001, 0x1959, 0x2004, 0x604a,
-	0x0020, 0x2009, 0x0013, 0x080c, 0x9c6a, 0x000e, 0x001e, 0x002e,
-	0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005,
-	0x2001, 0x1800, 0x2004, 0x9096, 0x0001, 0x0d78, 0x9096, 0x0004,
-	0x0d60, 0x080c, 0x81e3, 0x6814, 0x9084, 0x0001, 0x0110, 0x68a7,
-	0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000, 0x2011, 0x5b3a, 0x080c,
-	0x8131, 0x20a9, 0x01f4, 0x0009, 0x08c0, 0x6824, 0xd094, 0x0140,
-	0x6827, 0x0004, 0x7804, 0x9084, 0x4000, 0x190c, 0x2843, 0x0090,
-	0xd084, 0x0118, 0x6827, 0x0001, 0x0010, 0x1f04, 0x924d, 0x7804,
-	0x9084, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2833, 0x9006,
-	0x080c, 0x2833, 0x0005, 0x0126, 0x0156, 0x00f6, 0x00e6, 0x00d6,
-	0x00c6, 0x0066, 0x0026, 0x0016, 0x0006, 0x2091, 0x8000, 0x2001,
-	0x180c, 0x200c, 0x918c, 0xdbff, 0x2102, 0x2069, 0x0100, 0x2079,
-	0x0140, 0x2071, 0x0380, 0x701c, 0x0006, 0x701f, 0x0202, 0x2071,
-	0x19b8, 0x704c, 0x2060, 0x8cff, 0x0904, 0x930c, 0x9386, 0x0002,
-	0x1128, 0x6814, 0x9084, 0x0002, 0x0904, 0x930c, 0x68af, 0x95f5,
-	0x6817, 0x0010, 0x2009, 0x00fa, 0x8109, 0x1df0, 0x69c6, 0x68cb,
-	0x0008, 0x080c, 0x81f0, 0x080c, 0x1c7a, 0x0046, 0x2009, 0x00a5,
-	0x080c, 0x0e3d, 0x2021, 0x0169, 0x2404, 0x9084, 0x000f, 0x9086,
-	0x0004, 0x11f8, 0x68af, 0x95f5, 0x68c6, 0x68cb, 0x0008, 0x00e6,
-	0x00f6, 0x2079, 0x0090, 0x2071, 0x19b8, 0x6814, 0x9084, 0x1984,
-	0x9085, 0x0012, 0x6816, 0x782b, 0x0008, 0x7057, 0x0000, 0x00fe,
-	0x00ee, 0x9386, 0x0002, 0x1128, 0x7884, 0x9005, 0x1110, 0x7887,
-	0x0001, 0x0016, 0x2009, 0x0040, 0x080c, 0x2052, 0x001e, 0x2009,
-	0x0000, 0x080c, 0x0e3d, 0x004e, 0x20a9, 0x03e8, 0x6824, 0xd094,
-	0x0140, 0x6827, 0x0004, 0x7804, 0x9084, 0x4000, 0x190c, 0x2843,
-	0x0090, 0xd08c, 0x0118, 0x6827, 0x0002, 0x0010, 0x1f04, 0x92de,
-	0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2833,
-	0x9006, 0x080c, 0x2833, 0x6827, 0x4000, 0x6824, 0x83ff, 0x1160,
-	0x2009, 0x0049, 0x080c, 0x88a9, 0x6044, 0xd0ac, 0x1118, 0x6003,
-	0x0002, 0x0010, 0x080c, 0x9c6a, 0x000e, 0x2071, 0x0380, 0xd08c,
-	0x1110, 0x701f, 0x0200, 0x000e, 0x001e, 0x002e, 0x006e, 0x00ce,
-	0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x00d6, 0x0126,
-	0x2091, 0x8000, 0x2069, 0x19b8, 0x6a06, 0x012e, 0x00de, 0x0005,
-	0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, 0x19b8, 0x6a3e, 0x012e,
-	0x00de, 0x0005, 0x080c, 0x8e46, 0x785c, 0x7032, 0x7042, 0x7047,
-	0x1000, 0x00f8, 0x080c, 0x8e46, 0x785c, 0x7032, 0x7042, 0x7047,
-	0x4000, 0x00b8, 0x080c, 0x8e46, 0x785c, 0x7032, 0x7042, 0x7047,
-	0x2000, 0x0078, 0x080c, 0x8e46, 0x785c, 0x7032, 0x7042, 0x7047,
-	0x0400, 0x0038, 0x080c, 0x8e46, 0x785c, 0x7032, 0x7042, 0x7047,
-	0x0200, 0x60c3, 0x0020, 0x0804, 0x8f6c, 0x00e6, 0x2071, 0x19b8,
-	0x702c, 0x9005, 0x0110, 0x8001, 0x702e, 0x00ee, 0x0005, 0x00f6,
-	0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066, 0x0006, 0x0126, 0x2091,
-	0x8000, 0x2071, 0x19b8, 0x7620, 0x2660, 0x2678, 0x2039, 0x0001,
-	0x87ff, 0x0904, 0x9402, 0x8cff, 0x0904, 0x9402, 0x6020, 0x9086,
-	0x0006, 0x1904, 0x93fd, 0x88ff, 0x0138, 0x2800, 0x9c06, 0x1904,
-	0x93fd, 0x2039, 0x0000, 0x0050, 0x6010, 0x9b06, 0x1904, 0x93fd,
-	0x85ff, 0x0120, 0x605c, 0x9106, 0x1904, 0x93fd, 0x7030, 0x9c06,
-	0x15b0, 0x2069, 0x0100, 0x68c0, 0x9005, 0x1160, 0x6824, 0xd084,
-	0x0148, 0x6827, 0x0001, 0x080c, 0x81e3, 0x080c, 0x9487, 0x7033,
-	0x0000, 0x0428, 0x080c, 0x81e3, 0x6820, 0xd0b4, 0x0110, 0x68a7,
-	0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000, 0x080c, 0x9487, 0x7033,
+	0x9295, 0x0600, 0x7202, 0xba14, 0x7206, 0x2069, 0x1800, 0x6a78,
+	0x720a, 0x6a7c, 0x720e, 0x7013, 0x0829, 0x2f10, 0x7222, 0x7027,
+	0xffff, 0x0005, 0x0016, 0x7814, 0x9084, 0x0700, 0x8007, 0x0013,
+	0x001e, 0x0005, 0x8ea2, 0x8ea2, 0x8ea4, 0x8ea2, 0x8ea2, 0x8ea2,
+	0x8ebe, 0x8ea2, 0x080c, 0x0d65, 0x7914, 0x918c, 0x08ff, 0x918d,
+	0xf600, 0x7916, 0x2009, 0x0003, 0x00b9, 0x2069, 0x1853, 0x6804,
+	0xd0bc, 0x0130, 0x682c, 0x9084, 0x00ff, 0x8007, 0x7032, 0x0010,
+	0x7033, 0x3f00, 0x60c3, 0x0001, 0x0804, 0x8f87, 0x2009, 0x0003,
+	0x0019, 0x7033, 0x7f00, 0x0cb0, 0x0016, 0x080c, 0x97fa, 0x001e,
+	0xb810, 0x9085, 0x0100, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800,
+	0x6a78, 0x720a, 0x6a7c, 0x720e, 0x7013, 0x0888, 0x918d, 0x0008,
+	0x7116, 0x080c, 0x8f7b, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226,
+	0x0005, 0x00b6, 0x0096, 0x00e6, 0x00d6, 0x00c6, 0x0056, 0x0046,
+	0x0036, 0x2061, 0x0100, 0x2071, 0x1800, 0x7810, 0x2058, 0xb8a0,
+	0x2028, 0xb910, 0xba14, 0x7378, 0x747c, 0x7820, 0x0002, 0x8f06,
+	0x8f06, 0x8f06, 0x8f06, 0x8f06, 0x8f06, 0x8f06, 0x8f06, 0x8f06,
+	0x8f06, 0x8f08, 0x8f06, 0x8f06, 0x8f06, 0x8f06, 0x080c, 0x0d65,
+	0xb884, 0x609e, 0x7814, 0x2048, 0xa87c, 0xd0fc, 0x0558, 0xaf90,
+	0x9784, 0xff00, 0x9105, 0x6062, 0x873f, 0x9784, 0xff00, 0x0006,
+	0x7814, 0x2048, 0xa878, 0xc0fc, 0x9005, 0x000e, 0x1160, 0xaf94,
+	0x87ff, 0x0198, 0x2039, 0x0098, 0x9705, 0x6072, 0x7808, 0x6082,
+	0x2f00, 0x6086, 0x0038, 0x9185, 0x2200, 0x6062, 0x6073, 0x0129,
+	0x6077, 0x0000, 0xb884, 0x609e, 0x0050, 0x2039, 0x0029, 0x9705,
+	0x6072, 0x0cc0, 0x9185, 0x0200, 0x6062, 0x6073, 0x2029, 0xa87c,
+	0xd0fc, 0x0118, 0xaf94, 0x87ff, 0x1120, 0x2f00, 0x6082, 0x7808,
+	0x6086, 0x6266, 0x636a, 0x646e, 0x6077, 0x0000, 0xb88c, 0x8000,
+	0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a, 0x607f, 0x0000, 0xa848,
+	0x608a, 0xa844, 0x608e, 0xa838, 0x60c6, 0xa834, 0x60ca, 0xb86c,
+	0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000, 0x080c, 0x97da, 0x2009,
+	0x07d0, 0x60c4, 0x9084, 0xfff0, 0x9005, 0x0110, 0x2009, 0x1b58,
+	0x080c, 0x8210, 0x003e, 0x004e, 0x005e, 0x00ce, 0x00de, 0x00ee,
+	0x009e, 0x00be, 0x0005, 0x7a40, 0x9294, 0x00ff, 0x8217, 0x0005,
+	0x00d6, 0x2069, 0x19b8, 0x686b, 0x0001, 0x00de, 0x0005, 0x60a3,
+	0x0056, 0x60a7, 0x9575, 0x00f1, 0x080c, 0x8202, 0x0005, 0x0016,
+	0x2001, 0x180c, 0x200c, 0x9184, 0x0600, 0x9086, 0x0600, 0x0128,
+	0x0089, 0x080c, 0x8202, 0x001e, 0x0005, 0xc1e5, 0x2001, 0x180c,
+	0x2102, 0x2001, 0x19b9, 0x2003, 0x0000, 0x2001, 0x19c4, 0x2003,
+	0x0000, 0x0c88, 0x0006, 0x0016, 0x0026, 0x2009, 0x1804, 0x2011,
+	0x0009, 0x080c, 0x287c, 0x002e, 0x001e, 0x000e, 0x0005, 0x0016,
+	0x00c6, 0x0006, 0x080c, 0x9926, 0x0106, 0x190c, 0x98c8, 0x2061,
+	0x0100, 0x61a4, 0x60a7, 0x95f5, 0x0016, 0x0026, 0x2009, 0x1804,
+	0x2011, 0x0008, 0x080c, 0x287c, 0x002e, 0x001e, 0x010e, 0x190c,
+	0x98e4, 0x000e, 0xa001, 0xa001, 0xa001, 0x61a6, 0x00ce, 0x001e,
+	0x0005, 0x00c6, 0x00d6, 0x0016, 0x0026, 0x2061, 0x0100, 0x2069,
+	0x0140, 0x080c, 0x70b7, 0x1510, 0x2001, 0x19dd, 0x2004, 0x9005,
+	0x1904, 0x9038, 0x080c, 0x7158, 0x11a8, 0x2069, 0x0380, 0x6843,
+	0x0101, 0x6844, 0xd084, 0x1de8, 0x2061, 0x0100, 0x6020, 0xd0b4,
+	0x1120, 0x6024, 0xd084, 0x090c, 0x0d65, 0x6843, 0x0100, 0x080c,
+	0x8202, 0x04b0, 0x00c6, 0x2061, 0x19b8, 0x00f0, 0x6904, 0x9194,
+	0x4000, 0x0598, 0x080c, 0x8fb7, 0x080c, 0x2843, 0x00c6, 0x2061,
+	0x19b8, 0x6134, 0x9192, 0x0008, 0x1278, 0x8108, 0x6136, 0x080c,
+	0x98c8, 0x6130, 0x080c, 0x98e4, 0x00ce, 0x81ff, 0x01c8, 0x080c,
+	0x8202, 0x080c, 0x8faa, 0x00a0, 0x080c, 0x98c8, 0x6130, 0x91e5,
+	0x0000, 0x0150, 0x080c, 0xd610, 0x080c, 0x820b, 0x6003, 0x0001,
+	0x2009, 0x0014, 0x080c, 0x9c85, 0x080c, 0x98e4, 0x00ce, 0x0000,
+	0x002e, 0x001e, 0x00de, 0x00ce, 0x0005, 0x2001, 0x19dd, 0x2004,
+	0x9005, 0x1db0, 0x00c6, 0x2061, 0x19b8, 0x6134, 0x9192, 0x0003,
+	0x1ad8, 0x8108, 0x6136, 0x00ce, 0x080c, 0x8202, 0x080c, 0x5b97,
+	0x2009, 0x1852, 0x2114, 0x8210, 0x220a, 0x0c10, 0x0096, 0x00c6,
+	0x00d6, 0x00e6, 0x0016, 0x0026, 0x080c, 0x8218, 0x080c, 0x98c8,
+	0x2001, 0x0387, 0x2003, 0x0202, 0x2071, 0x19b8, 0x714c, 0x81ff,
+	0x0904, 0x90cc, 0x2061, 0x0100, 0x2069, 0x0140, 0x080c, 0x70b7,
+	0x11c0, 0x0036, 0x2019, 0x0002, 0x080c, 0x9286, 0x003e, 0x714c,
+	0x2160, 0x080c, 0xd610, 0x2009, 0x004a, 0x6003, 0x0003, 0x080c,
+	0x9c85, 0x2001, 0x0386, 0x2003, 0x5040, 0x080c, 0x7158, 0x0804,
+	0x90cc, 0x6904, 0xd1f4, 0x0904, 0x90d9, 0x080c, 0x2843, 0x00c6,
+	0x704c, 0x9065, 0x090c, 0x0d65, 0x6020, 0x00ce, 0x9086, 0x0006,
+	0x1518, 0x61c8, 0x60c4, 0x9105, 0x11f8, 0x2009, 0x180c, 0x2104,
+	0xd0d4, 0x01d0, 0x6214, 0x9294, 0x1800, 0x1128, 0x6224, 0x9294,
+	0x0002, 0x1510, 0x0010, 0xc0d4, 0x200a, 0x6014, 0x9084, 0xe7fd,
+	0x9085, 0x0010, 0x6016, 0x704c, 0x2060, 0x080c, 0x88d1, 0x2009,
+	0x0049, 0x080c, 0x9c85, 0x0080, 0x0036, 0x2019, 0x0001, 0x080c,
+	0x9286, 0x003e, 0x714c, 0x2160, 0x080c, 0xd610, 0x2009, 0x004a,
+	0x6003, 0x0003, 0x080c, 0x9c85, 0x2001, 0x0387, 0x2003, 0x0200,
+	0x080c, 0x98e4, 0x002e, 0x001e, 0x00ee, 0x00de, 0x00ce, 0x009e,
+	0x0005, 0xd1ec, 0x1904, 0x908d, 0x0804, 0x908f, 0x0026, 0x00e6,
+	0x2071, 0x19b8, 0x706c, 0xd084, 0x01d0, 0xc084, 0x706e, 0x714c,
+	0x81ff, 0x01a8, 0x2071, 0x0100, 0x9188, 0x0008, 0x2114, 0x928e,
+	0x0006, 0x1138, 0x2009, 0x1984, 0x2011, 0x0012, 0x080c, 0x287c,
+	0x0030, 0x2009, 0x1984, 0x2011, 0x0016, 0x080c, 0x287c, 0x00ee,
+	0x002e, 0x0005, 0x9036, 0x2001, 0x19c2, 0x2004, 0x9005, 0x0128,
+	0x9c06, 0x0128, 0x2c30, 0x600c, 0x0cc8, 0x9085, 0x0001, 0x0005,
+	0x00f6, 0x2079, 0x19b8, 0x610c, 0x9006, 0x600e, 0x6044, 0xc0fc,
+	0x6046, 0x86ff, 0x1140, 0x7824, 0x9c06, 0x1118, 0x7826, 0x782a,
+	0x0050, 0x792a, 0x0040, 0x00c6, 0x2660, 0x610e, 0x00ce, 0x7824,
+	0x9c06, 0x1108, 0x7e26, 0x080c, 0x9378, 0x080c, 0xba36, 0x00fe,
+	0x0005, 0x080c, 0x8d20, 0x7003, 0x1200, 0x7838, 0x7012, 0x783c,
+	0x7016, 0x00c6, 0x7820, 0x9086, 0x0004, 0x1148, 0x7810, 0x9005,
+	0x0130, 0x00b6, 0x2058, 0xb810, 0xb914, 0x00be, 0x0020, 0x2061,
+	0x1800, 0x6078, 0x617c, 0x9084, 0x00ff, 0x700a, 0x710e, 0x00ce,
+	0x60c3, 0x002c, 0x0804, 0x8f87, 0x080c, 0x8d20, 0x7003, 0x0f00,
+	0x7808, 0xd09c, 0x0128, 0xb810, 0x9084, 0x00ff, 0x700a, 0xb814,
+	0x700e, 0x60c3, 0x0008, 0x0804, 0x8f87, 0x0156, 0x080c, 0x8d6b,
+	0x7003, 0x0200, 0x2011, 0x1848, 0x63f0, 0x2312, 0x20a9, 0x0006,
+	0x2011, 0x1840, 0x2019, 0x1841, 0x9ef0, 0x0002, 0x2376, 0x8e70,
+	0x2276, 0x8e70, 0x9398, 0x0002, 0x9290, 0x0002, 0x1f04, 0x9176,
+	0x60c3, 0x001c, 0x015e, 0x0804, 0x8f87, 0x0016, 0x0026, 0x080c,
+	0x8d47, 0x080c, 0x8d59, 0x9e80, 0x0004, 0x20e9, 0x0000, 0x20a0,
+	0x7814, 0x0096, 0x2048, 0xa800, 0x2048, 0xa860, 0x20e0, 0xa85c,
+	0x9080, 0x0021, 0x2098, 0x009e, 0x7808, 0x9088, 0x0002, 0x21a8,
+	0x9192, 0x0010, 0x1250, 0x4003, 0x9080, 0x0004, 0x8003, 0x60c2,
+	0x080c, 0x8f87, 0x002e, 0x001e, 0x0005, 0x20a9, 0x0010, 0x4003,
+	0x080c, 0x97e5, 0x20a1, 0x0240, 0x22a8, 0x4003, 0x0c68, 0x080c,
+	0x8d20, 0x7003, 0x6200, 0x7808, 0x700e, 0x60c3, 0x0008, 0x0804,
+	0x8f87, 0x0016, 0x0026, 0x080c, 0x8d20, 0x20e9, 0x0000, 0x20a1,
+	0x024c, 0x7814, 0x0096, 0x2048, 0xa800, 0x2048, 0xa860, 0x20e0,
+	0xa85c, 0x9080, 0x0023, 0x2098, 0x009e, 0x7808, 0x9088, 0x0002,
+	0x21a8, 0x4003, 0x8003, 0x60c2, 0x080c, 0x8f87, 0x002e, 0x001e,
+	0x0005, 0x00e6, 0x00c6, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071,
+	0x19b8, 0x7010, 0x2060, 0x8cff, 0x0188, 0x080c, 0xba5c, 0x1110,
+	0x080c, 0xa58f, 0x600c, 0x0006, 0x080c, 0xbcd3, 0x600f, 0x0000,
+	0x080c, 0x9be7, 0x080c, 0x9378, 0x00ce, 0x0c68, 0x2c00, 0x7012,
+	0x700e, 0x012e, 0x000e, 0x00ce, 0x00ee, 0x0005, 0x0126, 0x0156,
+	0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0016, 0x0006,
+	0x2091, 0x8000, 0x2001, 0x180c, 0x200c, 0x918c, 0xe7ff, 0x2102,
+	0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x19b8, 0x7030, 0x2060,
+	0x8cff, 0x0548, 0x080c, 0x8fb7, 0x6ac0, 0x68c3, 0x0000, 0x080c,
+	0x820b, 0x00c6, 0x2061, 0x0100, 0x080c, 0x97fe, 0x00ce, 0x20a9,
+	0x01f4, 0x04b1, 0x080c, 0x8874, 0x6044, 0xd0ac, 0x1128, 0x2001,
+	0x1959, 0x2004, 0x604a, 0x0020, 0x2009, 0x0013, 0x080c, 0x9c85,
+	0x000e, 0x001e, 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe,
+	0x015e, 0x012e, 0x0005, 0x2001, 0x1800, 0x2004, 0x9096, 0x0001,
+	0x0d78, 0x9096, 0x0004, 0x0d60, 0x080c, 0x820b, 0x6814, 0x9084,
+	0x0001, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000,
+	0x2011, 0x5b41, 0x080c, 0x8159, 0x20a9, 0x01f4, 0x0009, 0x08c0,
+	0x6824, 0xd094, 0x0140, 0x6827, 0x0004, 0x7804, 0x9084, 0x4000,
+	0x190c, 0x2843, 0x0090, 0xd084, 0x0118, 0x6827, 0x0001, 0x0010,
+	0x1f04, 0x9268, 0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100,
+	0x080c, 0x2833, 0x9006, 0x080c, 0x2833, 0x0005, 0x0126, 0x0156,
+	0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0016, 0x0006,
+	0x2091, 0x8000, 0x2001, 0x180c, 0x200c, 0x918c, 0xdbff, 0x2102,
+	0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x0380, 0x701c, 0x0006,
+	0x701f, 0x0202, 0x2071, 0x19b8, 0x704c, 0x2060, 0x8cff, 0x0904,
+	0x9327, 0x9386, 0x0002, 0x1128, 0x6814, 0x9084, 0x0002, 0x0904,
+	0x9327, 0x68af, 0x95f5, 0x6817, 0x0010, 0x2009, 0x00fa, 0x8109,
+	0x1df0, 0x69c6, 0x68cb, 0x0008, 0x080c, 0x8218, 0x080c, 0x1c7a,
+	0x0046, 0x2009, 0x00a5, 0x080c, 0x0e3d, 0x2021, 0x0169, 0x2404,
+	0x9084, 0x000f, 0x9086, 0x0004, 0x11f8, 0x68af, 0x95f5, 0x68c6,
+	0x68cb, 0x0008, 0x00e6, 0x00f6, 0x2079, 0x0090, 0x2071, 0x19b8,
+	0x6814, 0x9084, 0x1984, 0x9085, 0x0012, 0x6816, 0x782b, 0x0008,
+	0x7057, 0x0000, 0x00fe, 0x00ee, 0x9386, 0x0002, 0x1128, 0x7884,
+	0x9005, 0x1110, 0x7887, 0x0001, 0x0016, 0x2009, 0x0040, 0x080c,
+	0x2052, 0x001e, 0x2009, 0x0000, 0x080c, 0x0e3d, 0x004e, 0x20a9,
+	0x03e8, 0x6824, 0xd094, 0x0140, 0x6827, 0x0004, 0x7804, 0x9084,
+	0x4000, 0x190c, 0x2843, 0x0090, 0xd08c, 0x0118, 0x6827, 0x0002,
+	0x0010, 0x1f04, 0x92f9, 0x7804, 0x9084, 0x1000, 0x0138, 0x2001,
+	0x0100, 0x080c, 0x2833, 0x9006, 0x080c, 0x2833, 0x6827, 0x4000,
+	0x6824, 0x83ff, 0x1160, 0x2009, 0x0049, 0x080c, 0x88d1, 0x6044,
+	0xd0ac, 0x1118, 0x6003, 0x0002, 0x0010, 0x080c, 0x9c85, 0x000e,
+	0x2071, 0x0380, 0xd08c, 0x1110, 0x701f, 0x0200, 0x000e, 0x001e,
+	0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e,
+	0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, 0x19b8, 0x6a06,
+	0x012e, 0x00de, 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069,
+	0x19b8, 0x6a3e, 0x012e, 0x00de, 0x0005, 0x080c, 0x8e6e, 0x785c,
+	0x7032, 0x7042, 0x7047, 0x1000, 0x00f8, 0x080c, 0x8e6e, 0x785c,
+	0x7032, 0x7042, 0x7047, 0x4000, 0x00b8, 0x080c, 0x8e6e, 0x785c,
+	0x7032, 0x7042, 0x7047, 0x2000, 0x0078, 0x080c, 0x8e6e, 0x785c,
+	0x7032, 0x7042, 0x7047, 0x0400, 0x0038, 0x080c, 0x8e6e, 0x785c,
+	0x7032, 0x7042, 0x7047, 0x0200, 0x60c3, 0x0020, 0x0804, 0x8f87,
+	0x00e6, 0x2071, 0x19b8, 0x702c, 0x9005, 0x0110, 0x8001, 0x702e,
+	0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066,
+	0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19b8, 0x7620, 0x2660,
+	0x2678, 0x2039, 0x0001, 0x87ff, 0x0904, 0x941d, 0x8cff, 0x0904,
+	0x941d, 0x6020, 0x9086, 0x0006, 0x1904, 0x9418, 0x88ff, 0x0138,
+	0x2800, 0x9c06, 0x1904, 0x9418, 0x2039, 0x0000, 0x0050, 0x6010,
+	0x9b06, 0x1904, 0x9418, 0x85ff, 0x0120, 0x605c, 0x9106, 0x1904,
+	0x9418, 0x7030, 0x9c06, 0x15b0, 0x2069, 0x0100, 0x68c0, 0x9005,
+	0x1160, 0x6824, 0xd084, 0x0148, 0x6827, 0x0001, 0x080c, 0x820b,
+	0x080c, 0x94a2, 0x7033, 0x0000, 0x0428, 0x080c, 0x820b, 0x6820,
+	0xd0b4, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000,
+	0x080c, 0x94a2, 0x7033, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04,
+	0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2833, 0x9006,
+	0x080c, 0x2833, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827,
+	0x0001, 0x003e, 0x7020, 0x9c36, 0x1110, 0x660c, 0x7622, 0x701c,
+	0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x701e, 0x0010,
+	0x701f, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e,
+	0x0008, 0x2678, 0x89ff, 0x1168, 0x600f, 0x0000, 0x6014, 0x0096,
+	0x2048, 0x080c, 0xb845, 0x0110, 0x080c, 0xd21e, 0x009e, 0x080c,
+	0x9c21, 0x080c, 0x9378, 0x88ff, 0x1190, 0x00ce, 0x0804, 0x9393,
+	0x2c78, 0x600c, 0x2060, 0x0804, 0x9393, 0x9006, 0x012e, 0x000e,
+	0x006e, 0x007e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601b,
+	0x0000, 0x00ce, 0x98c5, 0x0001, 0x0c88, 0x00f6, 0x00e6, 0x00d6,
+	0x0096, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000,
+	0x2071, 0x19b8, 0x7648, 0x2660, 0x2678, 0x8cff, 0x0904, 0x9491,
+	0x6020, 0x9086, 0x0006, 0x1904, 0x948c, 0x87ff, 0x0128, 0x2700,
+	0x9c06, 0x1904, 0x948c, 0x0040, 0x6010, 0x9b06, 0x15e8, 0x85ff,
+	0x0118, 0x605c, 0x9106, 0x15c0, 0x704c, 0x9c06, 0x1168, 0x0036,
+	0x2019, 0x0001, 0x080c, 0x9286, 0x703f, 0x0000, 0x9006, 0x704e,
+	0x706a, 0x7052, 0x706e, 0x003e, 0x7048, 0x9c36, 0x1110, 0x660c,
+	0x764a, 0x7044, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00,
+	0x7046, 0x0010, 0x7047, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06,
+	0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x6014, 0x2048,
+	0x080c, 0xb845, 0x0110, 0x080c, 0xd21e, 0x080c, 0x9c21, 0x87ff,
+	0x1198, 0x00ce, 0x0804, 0x943d, 0x2c78, 0x600c, 0x2060, 0x0804,
+	0x943d, 0x9006, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x009e,
+	0x00de, 0x00ee, 0x00fe, 0x0005, 0x601b, 0x0000, 0x00ce, 0x97bd,
+	0x0001, 0x0c80, 0x00e6, 0x2071, 0x19b8, 0x7033, 0x0000, 0x7004,
+	0x9086, 0x0003, 0x0158, 0x2001, 0x1800, 0x2004, 0x9086, 0x0002,
+	0x1118, 0x7007, 0x0005, 0x0010, 0x7007, 0x0000, 0x00ee, 0x0005,
+	0x00f6, 0x00e6, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091,
+	0x8000, 0x2071, 0x19b8, 0x2c10, 0x7648, 0x2660, 0x2678, 0x8cff,
+	0x0518, 0x2200, 0x9c06, 0x11e0, 0x7048, 0x9c36, 0x1110, 0x660c,
+	0x764a, 0x7044, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00,
+	0x7046, 0x0010, 0x7047, 0x0000, 0x660c, 0x2c00, 0x9f06, 0x0110,
+	0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x9085, 0x0001, 0x0020,
+	0x2c78, 0x600c, 0x2060, 0x08d8, 0x012e, 0x000e, 0x002e, 0x006e,
+	0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0096, 0x00f6, 0x00e6, 0x00d6,
+	0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071,
+	0x19b8, 0x7610, 0x2660, 0x2678, 0x8cff, 0x0904, 0x9584, 0x6010,
+	0x00b6, 0x2058, 0xb8a0, 0x00be, 0x9206, 0x1904, 0x957f, 0x7030,
+	0x9c06, 0x1520, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, 0x955b,
+	0x080c, 0x8fb7, 0x68c3, 0x0000, 0x080c, 0x94a2, 0x7033, 0x0000,
+	0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001,
+	0x0100, 0x080c, 0x2833, 0x9006, 0x080c, 0x2833, 0x2069, 0x0100,
+	0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x7010, 0x9c36,
+	0x1110, 0x660c, 0x7612, 0x700c, 0x9c36, 0x1140, 0x2c00, 0x9f36,
+	0x0118, 0x2f00, 0x700e, 0x0010, 0x700f, 0x0000, 0x660c, 0x0066,
+	0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000,
+	0x080c, 0xba4b, 0x1158, 0x080c, 0x303b, 0x080c, 0xba5c, 0x11f0,
+	0x080c, 0xa58f, 0x00d8, 0x080c, 0x94a2, 0x08c0, 0x080c, 0xba5c,
+	0x1118, 0x080c, 0xa58f, 0x0090, 0x6014, 0x2048, 0x080c, 0xb845,
+	0x0168, 0x6020, 0x9086, 0x0003, 0x1508, 0xa867, 0x0103, 0xab7a,
+	0xa877, 0x0000, 0x080c, 0x698a, 0x080c, 0xba36, 0x080c, 0xbcd3,
+	0x080c, 0x9c21, 0x080c, 0x9378, 0x00ce, 0x0804, 0x9504, 0x2c78,
+	0x600c, 0x2060, 0x0804, 0x9504, 0x012e, 0x000e, 0x002e, 0x006e,
+	0x00ce, 0x00de, 0x00ee, 0x00fe, 0x009e, 0x0005, 0x6020, 0x9086,
+	0x0006, 0x1d20, 0x080c, 0xd21e, 0x0c08, 0x00d6, 0x080c, 0x8d6b,
+	0x7003, 0x0200, 0x7007, 0x0014, 0x60c3, 0x0014, 0x20e1, 0x0001,
+	0x2099, 0x195a, 0x20e9, 0x0000, 0x20a1, 0x0250, 0x20a9, 0x0004,
+	0x4003, 0x7023, 0x0004, 0x7027, 0x7878, 0x080c, 0x8f87, 0x00de,
+	0x0005, 0x080c, 0x8d6b, 0x700b, 0x0800, 0x7814, 0x9084, 0xff00,
+	0x700e, 0x7814, 0x9084, 0x00ff, 0x7022, 0x782c, 0x7026, 0x7860,
+	0x9084, 0x00ff, 0x9085, 0x0200, 0x7002, 0x7860, 0x9084, 0xff00,
+	0x8007, 0x7006, 0x60c2, 0x0804, 0x8f87, 0x00b6, 0x00d6, 0x0016,
+	0x00d6, 0x2f68, 0x2009, 0x0035, 0x080c, 0xbed9, 0x00de, 0x1904,
+	0x9632, 0x080c, 0x8d20, 0x7003, 0x1300, 0x782c, 0x080c, 0x973d,
+	0x2068, 0x6820, 0x9086, 0x0003, 0x0560, 0x7810, 0x2058, 0xbaa0,
+	0x080c, 0x9b66, 0x11d8, 0x9286, 0x007e, 0x1128, 0x700b, 0x00ff,
+	0x700f, 0xfffe, 0x0498, 0x9286, 0x007f, 0x1128, 0x700b, 0x00ff,
+	0x700f, 0xfffd, 0x0458, 0x9284, 0xff80, 0x0180, 0x9286, 0x0080,
+	0x1128, 0x700b, 0x00ff, 0x700f, 0xfffc, 0x0400, 0x92d8, 0x1000,
+	0x2b5c, 0xb810, 0x700a, 0xb814, 0x700e, 0x00c0, 0xb884, 0x700e,
+	0x00a8, 0x080c, 0x9b66, 0x1130, 0x7810, 0x2058, 0xb8a0, 0x9082,
+	0x007e, 0x0250, 0x00d6, 0x2069, 0x181e, 0x2d04, 0x700a, 0x8d68,
+	0x2d04, 0x700e, 0x00de, 0x0010, 0x6034, 0x700e, 0x7838, 0x7012,
+	0x783c, 0x7016, 0x60c3, 0x000c, 0x001e, 0x00de, 0x080c, 0x8f87,
+	0x00be, 0x0005, 0x781b, 0x0001, 0x7803, 0x0006, 0x001e, 0x00de,
+	0x00be, 0x0005, 0x792c, 0x9180, 0x0008, 0x200c, 0x9186, 0x0006,
+	0x01c0, 0x9186, 0x0003, 0x0904, 0x96b0, 0x9186, 0x0005, 0x0904,
+	0x9698, 0x9186, 0x0004, 0x05f0, 0x9186, 0x0008, 0x0904, 0x96a1,
+	0x7807, 0x0037, 0x782f, 0x0003, 0x7817, 0x1700, 0x080c, 0x971a,
+	0x0005, 0x080c, 0x96db, 0x00d6, 0x0026, 0x792c, 0x2168, 0x2009,
+	0x4000, 0x6800, 0x6a44, 0xd2fc, 0x11f8, 0x0002, 0x9679, 0x9684,
+	0x967b, 0x9684, 0x9680, 0x9679, 0x9679, 0x9684, 0x9684, 0x9684,
+	0x9684, 0x9679, 0x9679, 0x9679, 0x9679, 0x9679, 0x9684, 0x9679,
+	0x9684, 0x080c, 0x0d65, 0x6824, 0xd0e4, 0x0110, 0xd0cc, 0x0110,
+	0x900e, 0x0010, 0x2009, 0x2000, 0x682c, 0x7022, 0x6830, 0x7026,
+	0x0804, 0x96d4, 0x080c, 0x96db, 0x00d6, 0x0026, 0x792c, 0x2168,
+	0x2009, 0x4000, 0x6a00, 0x9286, 0x0002, 0x1108, 0x900e, 0x04e0,
+	0x080c, 0x96db, 0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000,
+	0x0498, 0x04c9, 0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000,
+	0x9286, 0x0005, 0x0118, 0x9286, 0x0002, 0x1108, 0x900e, 0x0420,
+	0x0451, 0x00d6, 0x0026, 0x792c, 0x2168, 0x6814, 0x0096, 0x2048,
+	0xa9ac, 0xa834, 0x9112, 0xa9b0, 0xa838, 0x009e, 0x9103, 0x7022,
+	0x7226, 0x792c, 0x9180, 0x0011, 0x2004, 0xd0fc, 0x1148, 0x9180,
+	0x0000, 0x2004, 0x908e, 0x0002, 0x0130, 0x908e, 0x0004, 0x0118,
+	0x2009, 0x4000, 0x0008, 0x900e, 0x712a, 0x60c3, 0x0018, 0x002e,
+	0x00de, 0x0804, 0x8f87, 0x00b6, 0x0036, 0x0046, 0x0056, 0x0066,
+	0x080c, 0x8d6b, 0x9006, 0x7003, 0x0200, 0x7938, 0x710a, 0x793c,
+	0x710e, 0x7810, 0x2058, 0xb8a0, 0x080c, 0x9b66, 0x1118, 0x9092,
+	0x007e, 0x0268, 0x00d6, 0x2069, 0x181e, 0x2d2c, 0x8d68, 0x2d34,
+	0x90d8, 0x1000, 0x2b5c, 0xbb10, 0xbc14, 0x00de, 0x0028, 0x901e,
+	0xbc84, 0x2029, 0x0000, 0x6634, 0x782c, 0x9080, 0x0008, 0x2004,
+	0x9086, 0x0003, 0x1128, 0x7512, 0x7616, 0x731a, 0x741e, 0x0020,
+	0x7312, 0x7416, 0x751a, 0x761e, 0x006e, 0x005e, 0x004e, 0x003e,
+	0x00be, 0x0005, 0x080c, 0x8d6b, 0x7003, 0x0100, 0x782c, 0x700a,
+	0x7814, 0x700e, 0x700e, 0x60c3, 0x0008, 0x0804, 0x8f87, 0x080c,
+	0x8d17, 0x7003, 0x1400, 0x7838, 0x700a, 0x0079, 0x783c, 0x700e,
+	0x782c, 0x7012, 0x7830, 0x7016, 0x7834, 0x9084, 0x00ff, 0x8007,
+	0x701a, 0x60c3, 0x0010, 0x0804, 0x8f87, 0x00e6, 0x2071, 0x0240,
+	0x0006, 0x00f6, 0x2078, 0x7810, 0x00b6, 0x2058, 0xb8c4, 0xd084,
+	0x0120, 0x7850, 0x702a, 0x784c, 0x702e, 0x00be, 0x00fe, 0x000e,
+	0x00ee, 0x0005, 0x080c, 0x8d62, 0x7003, 0x0100, 0x782c, 0x700a,
+	0x7814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x8f87, 0x00a9, 0x7914,
+	0x712a, 0x60c3, 0x0000, 0x60a7, 0x9575, 0x0026, 0x080c, 0x27a2,
+	0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012, 0x002e, 0x080c,
+	0x8faa, 0x080c, 0x8202, 0x0005, 0x0036, 0x0096, 0x00d6, 0x00e6,
+	0x7860, 0x2048, 0xaa7c, 0x9296, 0x00c0, 0x9294, 0xfffd, 0xaa7e,
+	0xaa80, 0x9294, 0x0300, 0xaa82, 0xa96c, 0x9194, 0x00ff, 0xab74,
+	0x9384, 0x00ff, 0x908d, 0xc200, 0xa96e, 0x9384, 0xff00, 0x9215,
+	0xaa76, 0xa870, 0xaa78, 0xa87a, 0xaa72, 0x00d6, 0x2069, 0x0200,
+	0x080c, 0x97fa, 0x00de, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9,
+	0x000a, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x001b, 0x2098, 0x4003,
+	0x60a3, 0x0035, 0xaa68, 0x9294, 0x7000, 0x9286, 0x3000, 0x0110,
+	0x60a3, 0x0037, 0x00ee, 0x00de, 0x009e, 0x003e, 0x0005, 0x900e,
+	0x7814, 0x0096, 0x2048, 0xa87c, 0xd0fc, 0x01c0, 0x9084, 0x0003,
+	0x11a8, 0x2001, 0x180c, 0x2004, 0xd0bc, 0x0180, 0x7824, 0xd0cc,
+	0x1168, 0xd0c4, 0x1158, 0xa8a8, 0x9005, 0x1140, 0x2001, 0x180c,
+	0x200c, 0xc1d5, 0x2102, 0x2009, 0x1983, 0x210c, 0x009e, 0x918d,
+	0x0092, 0x0010, 0x2009, 0x0096, 0x60ab, 0x0036, 0x0026, 0x2110,
+	0x900e, 0x080c, 0x287c, 0x002e, 0x0005, 0x2009, 0x0009, 0x00a0,
+	0x2009, 0x000a, 0x0088, 0x2009, 0x000b, 0x0070, 0x2009, 0x000c,
+	0x0058, 0x2009, 0x000d, 0x0040, 0x2009, 0x000e, 0x0028, 0x2009,
+	0x000f, 0x0010, 0x2009, 0x0008, 0x6912, 0x0005, 0x00d6, 0x9290,
+	0x0018, 0x8214, 0x20e9, 0x0000, 0x2069, 0x0200, 0x6813, 0x0000,
+	0x22a8, 0x9284, 0x00e0, 0x0128, 0x20a9, 0x0020, 0x9292, 0x0020,
+	0x0008, 0x9016, 0x20a1, 0x0240, 0x9006, 0x4004, 0x82ff, 0x0120,
+	0x6810, 0x8000, 0x6812, 0x0c60, 0x00de, 0x0005, 0x00f6, 0x00e6,
+	0x00d6, 0x00c6, 0x00a6, 0x0096, 0x0066, 0x0126, 0x2091, 0x8000,
+	0x2071, 0x19b8, 0x7610, 0x2660, 0x2678, 0x8cff, 0x0904, 0x98a5,
+	0x7030, 0x9c06, 0x1520, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904,
+	0x987c, 0x080c, 0x8fb7, 0x68c3, 0x0000, 0x080c, 0x94a2, 0x7033,
 	0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138,
 	0x2001, 0x0100, 0x080c, 0x2833, 0x9006, 0x080c, 0x2833, 0x2069,
-	0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x7020,
-	0x9c36, 0x1110, 0x660c, 0x7622, 0x701c, 0x9c36, 0x1140, 0x2c00,
-	0x9f36, 0x0118, 0x2f00, 0x701e, 0x0010, 0x701f, 0x0000, 0x660c,
-	0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x89ff,
-	0x1168, 0x600f, 0x0000, 0x6014, 0x0096, 0x2048, 0x080c, 0xb82a,
-	0x0110, 0x080c, 0xd1fc, 0x009e, 0x080c, 0x9c06, 0x080c, 0x935d,
-	0x88ff, 0x1190, 0x00ce, 0x0804, 0x9378, 0x2c78, 0x600c, 0x2060,
-	0x0804, 0x9378, 0x9006, 0x012e, 0x000e, 0x006e, 0x007e, 0x00ce,
-	0x00de, 0x00ee, 0x00fe, 0x0005, 0x601b, 0x0000, 0x00ce, 0x98c5,
-	0x0001, 0x0c88, 0x00f6, 0x00e6, 0x00d6, 0x0096, 0x00c6, 0x0066,
-	0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19b8, 0x7648,
-	0x2660, 0x2678, 0x8cff, 0x0904, 0x9476, 0x6020, 0x9086, 0x0006,
-	0x1904, 0x9471, 0x87ff, 0x0128, 0x2700, 0x9c06, 0x1904, 0x9471,
-	0x0040, 0x6010, 0x9b06, 0x15e8, 0x85ff, 0x0118, 0x605c, 0x9106,
-	0x15c0, 0x704c, 0x9c06, 0x1168, 0x0036, 0x2019, 0x0001, 0x080c,
-	0x926b, 0x703f, 0x0000, 0x9006, 0x704e, 0x706a, 0x7052, 0x706e,
-	0x003e, 0x7048, 0x9c36, 0x1110, 0x660c, 0x764a, 0x7044, 0x9c36,
-	0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7046, 0x0010, 0x7047,
-	0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008,
-	0x2678, 0x600f, 0x0000, 0x6014, 0x2048, 0x080c, 0xb82a, 0x0110,
-	0x080c, 0xd1fc, 0x080c, 0x9c06, 0x87ff, 0x1198, 0x00ce, 0x0804,
-	0x9422, 0x2c78, 0x600c, 0x2060, 0x0804, 0x9422, 0x9006, 0x012e,
-	0x000e, 0x002e, 0x006e, 0x00ce, 0x009e, 0x00de, 0x00ee, 0x00fe,
-	0x0005, 0x601b, 0x0000, 0x00ce, 0x97bd, 0x0001, 0x0c80, 0x00e6,
-	0x2071, 0x19b8, 0x7033, 0x0000, 0x7004, 0x9086, 0x0003, 0x0158,
-	0x2001, 0x1800, 0x2004, 0x9086, 0x0002, 0x1118, 0x7007, 0x0005,
-	0x0010, 0x7007, 0x0000, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00c6,
-	0x0066, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19b8,
-	0x2c10, 0x7648, 0x2660, 0x2678, 0x8cff, 0x0518, 0x2200, 0x9c06,
-	0x11e0, 0x7048, 0x9c36, 0x1110, 0x660c, 0x764a, 0x7044, 0x9c36,
-	0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7046, 0x0010, 0x7047,
-	0x0000, 0x660c, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678,
-	0x600f, 0x0000, 0x9085, 0x0001, 0x0020, 0x2c78, 0x600c, 0x2060,
-	0x08d8, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x00ee, 0x00fe,
-	0x0005, 0x0096, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026,
-	0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19b8, 0x7610, 0x2660,
-	0x2678, 0x8cff, 0x0904, 0x9569, 0x6010, 0x00b6, 0x2058, 0xb8a0,
-	0x00be, 0x9206, 0x1904, 0x9564, 0x7030, 0x9c06, 0x1520, 0x2069,
-	0x0100, 0x68c0, 0x9005, 0x0904, 0x9540, 0x080c, 0x8f9c, 0x68c3,
-	0x0000, 0x080c, 0x9487, 0x7033, 0x0000, 0x0036, 0x2069, 0x0140,
+	0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x7010,
+	0x9c36, 0x1110, 0x660c, 0x7612, 0x700c, 0x9c36, 0x1140, 0x2c00,
+	0x9f36, 0x0118, 0x2f00, 0x700e, 0x0010, 0x700f, 0x0000, 0x660c,
+	0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f,
+	0x0000, 0x080c, 0xba4b, 0x1158, 0x080c, 0x303b, 0x080c, 0xba5c,
+	0x11f0, 0x080c, 0xa58f, 0x00d8, 0x080c, 0x94a2, 0x08c0, 0x080c,
+	0xba5c, 0x1118, 0x080c, 0xa58f, 0x0090, 0x6014, 0x2048, 0x080c,
+	0xb845, 0x0168, 0x6020, 0x9086, 0x0003, 0x1520, 0xa867, 0x0103,
+	0xab7a, 0xa877, 0x0000, 0x080c, 0x6996, 0x080c, 0xba36, 0x080c,
+	0xbcd3, 0x080c, 0x9c21, 0x080c, 0x9378, 0x00ce, 0x0804, 0x982d,
+	0x2c78, 0x600c, 0x2060, 0x0804, 0x982d, 0x7013, 0x0000, 0x700f,
+	0x0000, 0x012e, 0x006e, 0x009e, 0x00ae, 0x00ce, 0x00de, 0x00ee,
+	0x00fe, 0x0005, 0x6020, 0x9086, 0x0006, 0x1d08, 0x080c, 0xd21e,
+	0x08f0, 0x00f6, 0x0036, 0x2079, 0x0380, 0x7b18, 0xd3bc, 0x1de8,
+	0x7832, 0x7936, 0x7a3a, 0x781b, 0x8080, 0x003e, 0x00fe, 0x0005,
+	0x0016, 0x2001, 0x0382, 0x2004, 0x9084, 0x0007, 0x9086, 0x0001,
+	0x1188, 0x2001, 0x0015, 0x0c29, 0x2009, 0x1000, 0x2001, 0x0382,
+	0x2004, 0x9084, 0x0007, 0x9086, 0x0003, 0x0120, 0x8109, 0x1db0,
+	0x080c, 0x0d65, 0x001e, 0x0005, 0x2001, 0x0382, 0x2004, 0x9084,
+	0x0007, 0x9086, 0x0003, 0x1120, 0x2001, 0x0380, 0x2003, 0x0001,
+	0x0005, 0x0156, 0x0016, 0x0026, 0x00e6, 0x900e, 0x2071, 0x19b8,
+	0x0469, 0x0106, 0x0190, 0x7004, 0x9086, 0x0003, 0x0148, 0x20a9,
+	0x1000, 0x6044, 0xd0fc, 0x01d8, 0x1f04, 0x9901, 0x080c, 0x0d65,
+	0x080c, 0x98c8, 0x6044, 0xd0fc, 0x0190, 0x7030, 0x9c06, 0x1148,
+	0x080c, 0x8874, 0x6044, 0xd0dc, 0x0150, 0xc0dc, 0x6046, 0x700a,
+	0x7042, 0x704c, 0x9c06, 0x190c, 0x0d65, 0x080c, 0x88d1, 0x010e,
+	0x1919, 0x00ee, 0x002e, 0x001e, 0x015e, 0x0005, 0x2001, 0x0382,
+	0x2004, 0x9084, 0x0007, 0x9086, 0x0003, 0x0005, 0x0126, 0x2091,
+	0x2400, 0x7808, 0xd0a4, 0x190c, 0x0d5e, 0xd09c, 0x0128, 0x7820,
+	0x908c, 0xf000, 0x11b8, 0x0012, 0x012e, 0x0005, 0x994e, 0x998c,
+	0x99b3, 0x99e3, 0x99f3, 0x9a04, 0x9a13, 0x9a21, 0x9a32, 0x9a36,
+	0x994e, 0x994e, 0x994e, 0x994e, 0x994e, 0x994e, 0x080c, 0x0d65,
+	0x012e, 0x0005, 0x2060, 0x6044, 0xd0bc, 0x0140, 0xc0bc, 0x6046,
+	0x6000, 0x908a, 0x0016, 0x1a0c, 0x0d65, 0x0012, 0x012e, 0x0005,
+	0x9973, 0x9975, 0x9973, 0x997b, 0x9973, 0x9973, 0x9973, 0x9973,
+	0x9973, 0x9975, 0x9973, 0x9975, 0x9973, 0x9975, 0x9973, 0x9973,
+	0x9973, 0x9975, 0x9973, 0x080c, 0x0d65, 0x2009, 0x0013, 0x080c,
+	0x9c85, 0x012e, 0x0005, 0x6014, 0x2048, 0xa87c, 0xd0dc, 0x0130,
+	0x080c, 0x83c0, 0x080c, 0x9be7, 0x012e, 0x0005, 0x2009, 0x0049,
+	0x080c, 0x9c85, 0x012e, 0x0005, 0x080c, 0x98c8, 0x2001, 0x19dd,
+	0x2003, 0x0000, 0x7030, 0x9065, 0x090c, 0x0d65, 0x7034, 0x9092,
+	0x00c8, 0x1258, 0x8000, 0x7036, 0x7004, 0x9086, 0x0003, 0x0110,
+	0x7007, 0x0000, 0x781f, 0x0808, 0x0040, 0x080c, 0xd610, 0x6003,
+	0x0001, 0x2009, 0x0014, 0x080c, 0x9c85, 0x781f, 0x0100, 0x080c,
+	0x98e4, 0x012e, 0x0005, 0x080c, 0x98c8, 0x714c, 0x81ff, 0x1128,
+	0x2011, 0x19e0, 0x2013, 0x0000, 0x0400, 0x2061, 0x0100, 0x7150,
+	0x9192, 0x7530, 0x12b8, 0x8108, 0x7152, 0x714c, 0x9188, 0x0008,
+	0x210c, 0x918e, 0x0006, 0x1138, 0x6014, 0x9084, 0x1984, 0x9085,
+	0x0012, 0x6016, 0x0050, 0x6014, 0x9084, 0x1984, 0x9085, 0x0016,
+	0x6016, 0x0018, 0x706c, 0xc085, 0x706e, 0x781f, 0x0200, 0x080c,
+	0x98e4, 0x012e, 0x0005, 0x080c, 0x98c8, 0x714c, 0x2160, 0x6003,
+	0x0003, 0x2009, 0x004a, 0x080c, 0x9c85, 0x781f, 0x0200, 0x080c,
+	0x98e4, 0x012e, 0x0005, 0x7808, 0xd09c, 0x0de8, 0x7820, 0x2060,
+	0x6003, 0x0003, 0x080c, 0x98c8, 0x080c, 0x1c02, 0x781f, 0x0400,
+	0x080c, 0x98e4, 0x012e, 0x0005, 0x7808, 0xd09c, 0x0de8, 0x7820,
+	0x2060, 0x080c, 0x98c8, 0x080c, 0x1c4a, 0x781f, 0x0400, 0x080c,
+	0x98e4, 0x012e, 0x0005, 0x7030, 0x9065, 0x0148, 0x6044, 0xc0bc,
+	0x6046, 0x7104, 0x9186, 0x0003, 0x0110, 0x080c, 0x8937, 0x012e,
+	0x0005, 0x00f6, 0x703c, 0x9086, 0x0002, 0x0148, 0x704c, 0x907d,
+	0x0130, 0x7844, 0xc0bc, 0x7846, 0x080c, 0x8ee1, 0x0000, 0x00fe,
+	0x012e, 0x0005, 0x080c, 0x7158, 0x012e, 0x0005, 0x080c, 0x0d65,
+	0x0005, 0x00e6, 0x2071, 0x19b8, 0x6044, 0xc0bc, 0x6046, 0xd0fc,
+	0x01b8, 0x704c, 0x9c06, 0x1190, 0x2019, 0x0001, 0x080c, 0x9286,
+	0x704f, 0x0000, 0x2001, 0x0109, 0x2004, 0xd08c, 0x1138, 0x2001,
+	0x0108, 0x2004, 0xd0bc, 0x1110, 0x703f, 0x0000, 0x080c, 0x94b8,
+	0x00ee, 0x0005, 0x0026, 0x7010, 0x9c06, 0x1178, 0x080c, 0x9378,
+	0x6044, 0xc0fc, 0x6046, 0x600c, 0x9015, 0x0120, 0x7212, 0x600f,
+	0x0000, 0x0010, 0x7212, 0x720e, 0x9006, 0x002e, 0x0005, 0x0026,
+	0x7020, 0x9c06, 0x1178, 0x080c, 0x9378, 0x6044, 0xc0fc, 0x6046,
+	0x600c, 0x9015, 0x0120, 0x7222, 0x600f, 0x0000, 0x0010, 0x7222,
+	0x721e, 0x9006, 0x002e, 0x0005, 0x00d6, 0x0036, 0x7830, 0x9c06,
+	0x1558, 0x2069, 0x0100, 0x68c0, 0x9005, 0x01f8, 0x080c, 0x820b,
+	0x080c, 0x8fb7, 0x68c3, 0x0000, 0x080c, 0x94a2, 0x2069, 0x0140,
 	0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2833,
 	0x9006, 0x080c, 0x2833, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110,
-	0x6827, 0x0001, 0x003e, 0x7010, 0x9c36, 0x1110, 0x660c, 0x7612,
-	0x700c, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x700e,
-	0x0010, 0x700f, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110,
-	0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0xba30, 0x1158,
-	0x080c, 0x3034, 0x080c, 0xba41, 0x11f0, 0x080c, 0xa574, 0x00d8,
-	0x080c, 0x9487, 0x08c0, 0x080c, 0xba41, 0x1118, 0x080c, 0xa574,
-	0x0090, 0x6014, 0x2048, 0x080c, 0xb82a, 0x0168, 0x6020, 0x9086,
-	0x0003, 0x1508, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000, 0x080c,
-	0x6983, 0x080c, 0xba1b, 0x080c, 0xbcb8, 0x080c, 0x9c06, 0x080c,
-	0x935d, 0x00ce, 0x0804, 0x94e9, 0x2c78, 0x600c, 0x2060, 0x0804,
-	0x94e9, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee,
-	0x00fe, 0x009e, 0x0005, 0x6020, 0x9086, 0x0006, 0x1d20, 0x080c,
-	0xd1fc, 0x0c08, 0x00d6, 0x080c, 0x8d43, 0x7003, 0x0200, 0x7007,
-	0x0014, 0x60c3, 0x0014, 0x20e1, 0x0001, 0x2099, 0x195a, 0x20e9,
-	0x0000, 0x20a1, 0x0250, 0x20a9, 0x0004, 0x4003, 0x7023, 0x0004,
-	0x7027, 0x7878, 0x080c, 0x8f6c, 0x00de, 0x0005, 0x080c, 0x8d43,
-	0x700b, 0x0800, 0x7814, 0x9084, 0xff00, 0x700e, 0x7814, 0x9084,
-	0x00ff, 0x7022, 0x782c, 0x7026, 0x7860, 0x9084, 0x00ff, 0x9085,
-	0x0200, 0x7002, 0x7860, 0x9084, 0xff00, 0x8007, 0x7006, 0x60c2,
-	0x0804, 0x8f6c, 0x00b6, 0x00d6, 0x0016, 0x00d6, 0x2f68, 0x2009,
-	0x0035, 0x080c, 0xbebe, 0x00de, 0x1904, 0x9617, 0x080c, 0x8cf8,
-	0x7003, 0x1300, 0x782c, 0x080c, 0x9722, 0x2068, 0x6820, 0x9086,
-	0x0003, 0x0560, 0x7810, 0x2058, 0xbaa0, 0x080c, 0x9b4b, 0x11d8,
-	0x9286, 0x007e, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffe, 0x0498,
-	0x9286, 0x007f, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffd, 0x0458,
-	0x9284, 0xff80, 0x0180, 0x9286, 0x0080, 0x1128, 0x700b, 0x00ff,
-	0x700f, 0xfffc, 0x0400, 0x92d8, 0x1000, 0x2b5c, 0xb810, 0x700a,
-	0xb814, 0x700e, 0x00c0, 0xb884, 0x700e, 0x00a8, 0x080c, 0x9b4b,
-	0x1130, 0x7810, 0x2058, 0xb8a0, 0x9082, 0x007e, 0x0250, 0x00d6,
-	0x2069, 0x181e, 0x2d04, 0x700a, 0x8d68, 0x2d04, 0x700e, 0x00de,
-	0x0010, 0x6034, 0x700e, 0x7838, 0x7012, 0x783c, 0x7016, 0x60c3,
-	0x000c, 0x001e, 0x00de, 0x080c, 0x8f6c, 0x00be, 0x0005, 0x781b,
-	0x0001, 0x7803, 0x0006, 0x001e, 0x00de, 0x00be, 0x0005, 0x792c,
-	0x9180, 0x0008, 0x200c, 0x9186, 0x0006, 0x01c0, 0x9186, 0x0003,
-	0x0904, 0x9695, 0x9186, 0x0005, 0x0904, 0x967d, 0x9186, 0x0004,
-	0x05f0, 0x9186, 0x0008, 0x0904, 0x9686, 0x7807, 0x0037, 0x782f,
-	0x0003, 0x7817, 0x1700, 0x080c, 0x96ff, 0x0005, 0x080c, 0x96c0,
-	0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x6800, 0x6a44,
-	0xd2fc, 0x11f8, 0x0002, 0x965e, 0x9669, 0x9660, 0x9669, 0x9665,
-	0x965e, 0x965e, 0x9669, 0x9669, 0x9669, 0x9669, 0x965e, 0x965e,
-	0x965e, 0x965e, 0x965e, 0x9669, 0x965e, 0x9669, 0x080c, 0x0d65,
-	0x6824, 0xd0e4, 0x0110, 0xd0cc, 0x0110, 0x900e, 0x0010, 0x2009,
-	0x2000, 0x682c, 0x7022, 0x6830, 0x7026, 0x0804, 0x96b9, 0x080c,
-	0x96c0, 0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x6a00,
-	0x9286, 0x0002, 0x1108, 0x900e, 0x04e0, 0x080c, 0x96c0, 0x00d6,
-	0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x0498, 0x04c9, 0x00d6,
-	0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x9286, 0x0005, 0x0118,
-	0x9286, 0x0002, 0x1108, 0x900e, 0x0420, 0x0451, 0x00d6, 0x0026,
-	0x792c, 0x2168, 0x6814, 0x0096, 0x2048, 0xa9ac, 0xa834, 0x9112,
-	0xa9b0, 0xa838, 0x009e, 0x9103, 0x7022, 0x7226, 0x792c, 0x9180,
-	0x0011, 0x2004, 0xd0fc, 0x1148, 0x9180, 0x0000, 0x2004, 0x908e,
-	0x0002, 0x0130, 0x908e, 0x0004, 0x0118, 0x2009, 0x4000, 0x0008,
-	0x900e, 0x712a, 0x60c3, 0x0018, 0x002e, 0x00de, 0x0804, 0x8f6c,
-	0x00b6, 0x0036, 0x0046, 0x0056, 0x0066, 0x080c, 0x8d43, 0x9006,
-	0x7003, 0x0200, 0x7938, 0x710a, 0x793c, 0x710e, 0x7810, 0x2058,
-	0xb8a0, 0x080c, 0x9b4b, 0x1118, 0x9092, 0x007e, 0x0268, 0x00d6,
-	0x2069, 0x181e, 0x2d2c, 0x8d68, 0x2d34, 0x90d8, 0x1000, 0x2b5c,
-	0xbb10, 0xbc14, 0x00de, 0x0028, 0x901e, 0xbc84, 0x2029, 0x0000,
-	0x6634, 0x782c, 0x9080, 0x0008, 0x2004, 0x9086, 0x0003, 0x1128,
-	0x7512, 0x7616, 0x731a, 0x741e, 0x0020, 0x7312, 0x7416, 0x751a,
-	0x761e, 0x006e, 0x005e, 0x004e, 0x003e, 0x00be, 0x0005, 0x080c,
-	0x8d43, 0x7003, 0x0100, 0x782c, 0x700a, 0x7814, 0x700e, 0x700e,
-	0x60c3, 0x0008, 0x0804, 0x8f6c, 0x080c, 0x8cef, 0x7003, 0x1400,
-	0x7838, 0x700a, 0x0079, 0x783c, 0x700e, 0x782c, 0x7012, 0x7830,
-	0x7016, 0x7834, 0x9084, 0x00ff, 0x8007, 0x701a, 0x60c3, 0x0010,
-	0x0804, 0x8f6c, 0x00e6, 0x2071, 0x0240, 0x0006, 0x00f6, 0x2078,
-	0x7810, 0x00b6, 0x2058, 0xb8c4, 0xd084, 0x0120, 0x7850, 0x702a,
-	0x784c, 0x702e, 0x00be, 0x00fe, 0x000e, 0x00ee, 0x0005, 0x080c,
-	0x8d3a, 0x7003, 0x0100, 0x782c, 0x700a, 0x7814, 0x700e, 0x60c3,
-	0x0008, 0x0804, 0x8f6c, 0x00a9, 0x7914, 0x712a, 0x60c3, 0x0000,
-	0x60a7, 0x9575, 0x0026, 0x080c, 0x27a2, 0x0228, 0x2011, 0x0101,
-	0x2204, 0xc0c5, 0x2012, 0x002e, 0x080c, 0x8f8f, 0x080c, 0x81da,
-	0x0005, 0x0036, 0x0096, 0x00d6, 0x00e6, 0x7860, 0x2048, 0xaa7c,
-	0x9296, 0x00c0, 0x9294, 0xfffd, 0xaa7e, 0xaa80, 0x9294, 0x0300,
-	0xaa82, 0xa96c, 0x9194, 0x00ff, 0xab74, 0x9384, 0x00ff, 0x908d,
-	0xc200, 0xa96e, 0x9384, 0xff00, 0x9215, 0xaa76, 0xa870, 0xaa78,
-	0xa87a, 0xaa72, 0x00d6, 0x2069, 0x0200, 0x080c, 0x97df, 0x00de,
-	0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000a, 0xa860, 0x20e0,
-	0xa85c, 0x9080, 0x001b, 0x2098, 0x4003, 0x60a3, 0x0035, 0xaa68,
-	0x9294, 0x7000, 0x9286, 0x3000, 0x0110, 0x60a3, 0x0037, 0x00ee,
-	0x00de, 0x009e, 0x003e, 0x0005, 0x900e, 0x7814, 0x0096, 0x2048,
-	0xa87c, 0xd0fc, 0x01c0, 0x9084, 0x0003, 0x11a8, 0x2001, 0x180c,
-	0x2004, 0xd0bc, 0x0180, 0x7824, 0xd0cc, 0x1168, 0xd0c4, 0x1158,
-	0xa8a8, 0x9005, 0x1140, 0x2001, 0x180c, 0x200c, 0xc1d5, 0x2102,
-	0x2009, 0x1983, 0x210c, 0x009e, 0x918d, 0x0092, 0x0010, 0x2009,
-	0x0096, 0x60ab, 0x0036, 0x0026, 0x2110, 0x900e, 0x080c, 0x287c,
-	0x002e, 0x0005, 0x2009, 0x0009, 0x00a0, 0x2009, 0x000a, 0x0088,
-	0x2009, 0x000b, 0x0070, 0x2009, 0x000c, 0x0058, 0x2009, 0x000d,
-	0x0040, 0x2009, 0x000e, 0x0028, 0x2009, 0x000f, 0x0010, 0x2009,
-	0x0008, 0x6912, 0x0005, 0x00d6, 0x9290, 0x0018, 0x8214, 0x20e9,
-	0x0000, 0x2069, 0x0200, 0x6813, 0x0000, 0x22a8, 0x9284, 0x00e0,
-	0x0128, 0x20a9, 0x0020, 0x9292, 0x0020, 0x0008, 0x9016, 0x20a1,
-	0x0240, 0x9006, 0x4004, 0x82ff, 0x0120, 0x6810, 0x8000, 0x6812,
-	0x0c60, 0x00de, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x00a6,
-	0x0096, 0x0066, 0x0126, 0x2091, 0x8000, 0x2071, 0x19b8, 0x7610,
-	0x2660, 0x2678, 0x8cff, 0x0904, 0x988a, 0x7030, 0x9c06, 0x1520,
-	0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, 0x9861, 0x080c, 0x8f9c,
-	0x68c3, 0x0000, 0x080c, 0x9487, 0x7033, 0x0000, 0x0036, 0x2069,
-	0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c,
-	0x2833, 0x9006, 0x080c, 0x2833, 0x2069, 0x0100, 0x6824, 0xd084,
-	0x0110, 0x6827, 0x0001, 0x003e, 0x7010, 0x9c36, 0x1110, 0x660c,
-	0x7612, 0x700c, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00,
-	0x700e, 0x0010, 0x700f, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06,
-	0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0xba30,
-	0x1158, 0x080c, 0x3034, 0x080c, 0xba41, 0x11f0, 0x080c, 0xa574,
-	0x00d8, 0x080c, 0x9487, 0x08c0, 0x080c, 0xba41, 0x1118, 0x080c,
-	0xa574, 0x0090, 0x6014, 0x2048, 0x080c, 0xb82a, 0x0168, 0x6020,
-	0x9086, 0x0003, 0x1520, 0xa867, 0x0103, 0xab7a, 0xa877, 0x0000,
-	0x080c, 0x698f, 0x080c, 0xba1b, 0x080c, 0xbcb8, 0x080c, 0x9c06,
-	0x080c, 0x935d, 0x00ce, 0x0804, 0x9812, 0x2c78, 0x600c, 0x2060,
-	0x0804, 0x9812, 0x7013, 0x0000, 0x700f, 0x0000, 0x012e, 0x006e,
-	0x009e, 0x00ae, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x6020,
-	0x9086, 0x0006, 0x1d08, 0x080c, 0xd1fc, 0x08f0, 0x00f6, 0x0036,
-	0x2079, 0x0380, 0x7b18, 0xd3bc, 0x1de8, 0x7832, 0x7936, 0x7a3a,
-	0x781b, 0x8080, 0x003e, 0x00fe, 0x0005, 0x0016, 0x2001, 0x0382,
-	0x2004, 0x9084, 0x0007, 0x9086, 0x0001, 0x1188, 0x2001, 0x0015,
-	0x0c29, 0x2009, 0x1000, 0x2001, 0x0382, 0x2004, 0x9084, 0x0007,
-	0x9086, 0x0003, 0x0120, 0x8109, 0x1db0, 0x080c, 0x0d65, 0x001e,
-	0x0005, 0x2001, 0x0382, 0x2004, 0x9084, 0x0007, 0x9086, 0x0003,
-	0x1120, 0x2001, 0x0380, 0x2003, 0x0001, 0x0005, 0x0156, 0x0016,
-	0x0026, 0x00e6, 0x900e, 0x2071, 0x19b8, 0x0469, 0x0106, 0x0190,
-	0x7004, 0x9086, 0x0003, 0x0148, 0x20a9, 0x1000, 0x6044, 0xd0fc,
-	0x01d8, 0x1f04, 0x98e6, 0x080c, 0x0d65, 0x080c, 0x98ad, 0x6044,
-	0xd0fc, 0x0190, 0x7030, 0x9c06, 0x1148, 0x080c, 0x884c, 0x6044,
-	0xd0dc, 0x0150, 0xc0dc, 0x6046, 0x700a, 0x7042, 0x704c, 0x9c06,
-	0x190c, 0x0d65, 0x080c, 0x88a9, 0x010e, 0x1919, 0x00ee, 0x002e,
-	0x001e, 0x015e, 0x0005, 0x2001, 0x0382, 0x2004, 0x9084, 0x0007,
-	0x9086, 0x0003, 0x0005, 0x0126, 0x2091, 0x2400, 0x7808, 0xd0a4,
-	0x190c, 0x0d5e, 0xd09c, 0x0128, 0x7820, 0x908c, 0xf000, 0x11b8,
-	0x0012, 0x012e, 0x0005, 0x9933, 0x9971, 0x9998, 0x99c8, 0x99d8,
-	0x99e9, 0x99f8, 0x9a06, 0x9a17, 0x9a1b, 0x9933, 0x9933, 0x9933,
-	0x9933, 0x9933, 0x9933, 0x080c, 0x0d65, 0x012e, 0x0005, 0x2060,
-	0x6044, 0xd0bc, 0x0140, 0xc0bc, 0x6046, 0x6000, 0x908a, 0x0016,
-	0x1a0c, 0x0d65, 0x0012, 0x012e, 0x0005, 0x9958, 0x995a, 0x9958,
-	0x9960, 0x9958, 0x9958, 0x9958, 0x9958, 0x9958, 0x995a, 0x9958,
-	0x995a, 0x9958, 0x995a, 0x9958, 0x9958, 0x9958, 0x995a, 0x9958,
-	0x080c, 0x0d65, 0x2009, 0x0013, 0x080c, 0x9c6a, 0x012e, 0x0005,
-	0x6014, 0x2048, 0xa87c, 0xd0dc, 0x0130, 0x080c, 0x8398, 0x080c,
-	0x9bcc, 0x012e, 0x0005, 0x2009, 0x0049, 0x080c, 0x9c6a, 0x012e,
-	0x0005, 0x080c, 0x98ad, 0x2001, 0x19dd, 0x2003, 0x0000, 0x7030,
-	0x9065, 0x090c, 0x0d65, 0x7034, 0x9092, 0x00c8, 0x1258, 0x8000,
-	0x7036, 0x7004, 0x9086, 0x0003, 0x0110, 0x7007, 0x0000, 0x781f,
-	0x0808, 0x0040, 0x080c, 0xd5ee, 0x6003, 0x0001, 0x2009, 0x0014,
-	0x080c, 0x9c6a, 0x781f, 0x0100, 0x080c, 0x98c9, 0x012e, 0x0005,
-	0x080c, 0x98ad, 0x714c, 0x81ff, 0x1128, 0x2011, 0x19e0, 0x2013,
-	0x0000, 0x0400, 0x2061, 0x0100, 0x7150, 0x9192, 0x7530, 0x12b8,
-	0x8108, 0x7152, 0x714c, 0x9188, 0x0008, 0x210c, 0x918e, 0x0006,
-	0x1138, 0x6014, 0x9084, 0x1984, 0x9085, 0x0012, 0x6016, 0x0050,
-	0x6014, 0x9084, 0x1984, 0x9085, 0x0016, 0x6016, 0x0018, 0x706c,
-	0xc085, 0x706e, 0x781f, 0x0200, 0x080c, 0x98c9, 0x012e, 0x0005,
-	0x080c, 0x98ad, 0x714c, 0x2160, 0x6003, 0x0003, 0x2009, 0x004a,
-	0x080c, 0x9c6a, 0x781f, 0x0200, 0x080c, 0x98c9, 0x012e, 0x0005,
-	0x7808, 0xd09c, 0x0de8, 0x7820, 0x2060, 0x6003, 0x0003, 0x080c,
-	0x98ad, 0x080c, 0x1c02, 0x781f, 0x0400, 0x080c, 0x98c9, 0x012e,
-	0x0005, 0x7808, 0xd09c, 0x0de8, 0x7820, 0x2060, 0x080c, 0x98ad,
-	0x080c, 0x1c4a, 0x781f, 0x0400, 0x080c, 0x98c9, 0x012e, 0x0005,
-	0x7030, 0x9065, 0x0148, 0x6044, 0xc0bc, 0x6046, 0x7104, 0x9186,
-	0x0003, 0x0110, 0x080c, 0x890f, 0x012e, 0x0005, 0x00f6, 0x703c,
-	0x9086, 0x0002, 0x0148, 0x704c, 0x907d, 0x0130, 0x7844, 0xc0bc,
-	0x7846, 0x080c, 0x8eb7, 0x0000, 0x00fe, 0x012e, 0x0005, 0x080c,
-	0x714d, 0x012e, 0x0005, 0x080c, 0x0d65, 0x0005, 0x00e6, 0x2071,
-	0x19b8, 0x6044, 0xc0bc, 0x6046, 0xd0fc, 0x01b8, 0x704c, 0x9c06,
-	0x1190, 0x2019, 0x0001, 0x080c, 0x926b, 0x704f, 0x0000, 0x2001,
-	0x0109, 0x2004, 0xd08c, 0x1138, 0x2001, 0x0108, 0x2004, 0xd0bc,
-	0x1110, 0x703f, 0x0000, 0x080c, 0x949d, 0x00ee, 0x0005, 0x0026,
-	0x7010, 0x9c06, 0x1178, 0x080c, 0x935d, 0x6044, 0xc0fc, 0x6046,
-	0x600c, 0x9015, 0x0120, 0x7212, 0x600f, 0x0000, 0x0010, 0x7212,
-	0x720e, 0x9006, 0x002e, 0x0005, 0x0026, 0x7020, 0x9c06, 0x1178,
-	0x080c, 0x935d, 0x6044, 0xc0fc, 0x6046, 0x600c, 0x9015, 0x0120,
-	0x7222, 0x600f, 0x0000, 0x0010, 0x7222, 0x721e, 0x9006, 0x002e,
-	0x0005, 0x00d6, 0x0036, 0x7830, 0x9c06, 0x1558, 0x2069, 0x0100,
-	0x68c0, 0x9005, 0x01f8, 0x080c, 0x81e3, 0x080c, 0x8f9c, 0x68c3,
-	0x0000, 0x080c, 0x9487, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000,
-	0x0138, 0x2001, 0x0100, 0x080c, 0x2833, 0x9006, 0x080c, 0x2833,
-	0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x9085,
-	0x0001, 0x0038, 0x7808, 0xc0ad, 0x780a, 0x6003, 0x0009, 0x630a,
-	0x9006, 0x003e, 0x00de, 0x0005, 0x0016, 0x0026, 0x0036, 0x6100,
-	0x2019, 0x0100, 0x2001, 0x0382, 0x2004, 0xd09c, 0x0190, 0x00c6,
-	0x0126, 0x2091, 0x2800, 0x0016, 0x0036, 0x080c, 0x9913, 0x003e,
-	0x001e, 0x012e, 0x00ce, 0x6200, 0x2200, 0x9106, 0x0d58, 0x2200,
-	0x0010, 0x8319, 0x1d38, 0x003e, 0x002e, 0x001e, 0x0005, 0x00d6,
-	0x0156, 0x080c, 0x8d43, 0x7a14, 0x82ff, 0x0138, 0x7003, 0x0100,
-	0x700b, 0x0003, 0x60c3, 0x0008, 0x0490, 0x7003, 0x0200, 0x7007,
-	0x0000, 0x2069, 0x1800, 0x901e, 0x6800, 0x9086, 0x0004, 0x1110,
-	0xc38d, 0x0060, 0x080c, 0x70ac, 0x1110, 0xc3ad, 0x0008, 0xc3a5,
-	0x6ad8, 0xd29c, 0x1110, 0xd2ac, 0x0108, 0xc39d, 0x730e, 0x2011,
-	0x1848, 0x63f0, 0x2312, 0x20a9, 0x0006, 0x2011, 0x1840, 0x2019,
-	0x1841, 0x2071, 0x0250, 0x2376, 0x8e70, 0x2276, 0x8e70, 0x9398,
-	0x0002, 0x9290, 0x0002, 0x1f04, 0x9af3, 0x60c3, 0x0020, 0x080c,
-	0x8f6c, 0x015e, 0x00de, 0x0005, 0x0156, 0x080c, 0x8d43, 0x7a14,
-	0x82ff, 0x0168, 0x9286, 0xffff, 0x0118, 0x9282, 0x000e, 0x1238,
-	0x7003, 0x0100, 0x700b, 0x0003, 0x60c3, 0x0008, 0x0488, 0x7003,
-	0x0200, 0x7007, 0x001c, 0x700f, 0x0001, 0x2011, 0x198e, 0x2204,
-	0x8007, 0x701a, 0x8210, 0x2204, 0x8007, 0x701e, 0x0421, 0x1120,
-	0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001, 0x181e, 0x2004, 0x7022,
-	0x2001, 0x181f, 0x2004, 0x7026, 0x0030, 0x2001, 0x1817, 0x2004,
-	0x9084, 0x00ff, 0x7026, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099,
-	0x1805, 0x20e9, 0x0000, 0x20a1, 0x0256, 0x4003, 0x60c3, 0x001c,
-	0x015e, 0x0804, 0x8f6c, 0x0006, 0x2001, 0x1836, 0x2004, 0xd0ac,
-	0x000e, 0x0005, 0x2011, 0x0003, 0x080c, 0x931e, 0x2011, 0x0002,
-	0x080c, 0x9328, 0x080c, 0x91eb, 0x0036, 0x901e, 0x080c, 0x926b,
-	0x003e, 0x0005, 0x2071, 0x1883, 0x7000, 0x9005, 0x0140, 0x2001,
-	0x0812, 0x2071, 0x1800, 0x7072, 0x7076, 0x7067, 0xffd4, 0x2071,
-	0x1800, 0x7070, 0x7052, 0x7057, 0x1ddc, 0x0005, 0x00e6, 0x0126,
-	0x2071, 0x1800, 0x2091, 0x8000, 0x7550, 0x9582, 0x0010, 0x0608,
-	0x7054, 0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, 0x001c,
-	0x7064, 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1ddc, 0x0c98, 0x6003,
-	0x0008, 0x8529, 0x7552, 0x9ca8, 0x001c, 0x7064, 0x9502, 0x1230,
-	0x7556, 0x9085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x7057, 0x1ddc,
-	0x0cc0, 0x9006, 0x0cc0, 0x00e6, 0x2071, 0x1800, 0x7550, 0x9582,
-	0x0010, 0x0600, 0x7054, 0x2060, 0x6000, 0x9086, 0x0000, 0x0148,
+	0x6827, 0x0001, 0x9085, 0x0001, 0x0038, 0x7808, 0xc0ad, 0x780a,
+	0x6003, 0x0009, 0x630a, 0x9006, 0x003e, 0x00de, 0x0005, 0x0016,
+	0x0026, 0x0036, 0x6100, 0x2019, 0x0100, 0x2001, 0x0382, 0x2004,
+	0xd09c, 0x0190, 0x00c6, 0x0126, 0x2091, 0x2800, 0x0016, 0x0036,
+	0x080c, 0x992e, 0x003e, 0x001e, 0x012e, 0x00ce, 0x6200, 0x2200,
+	0x9106, 0x0d58, 0x2200, 0x0010, 0x8319, 0x1d38, 0x003e, 0x002e,
+	0x001e, 0x0005, 0x00d6, 0x0156, 0x080c, 0x8d6b, 0x7a14, 0x82ff,
+	0x0138, 0x7003, 0x0100, 0x700b, 0x0003, 0x60c3, 0x0008, 0x0490,
+	0x7003, 0x0200, 0x7007, 0x0000, 0x2069, 0x1800, 0x901e, 0x6800,
+	0x9086, 0x0004, 0x1110, 0xc38d, 0x0060, 0x080c, 0x70b7, 0x1110,
+	0xc3ad, 0x0008, 0xc3a5, 0x6ad8, 0xd29c, 0x1110, 0xd2ac, 0x0108,
+	0xc39d, 0x730e, 0x2011, 0x1848, 0x63f0, 0x2312, 0x20a9, 0x0006,
+	0x2011, 0x1840, 0x2019, 0x1841, 0x2071, 0x0250, 0x2376, 0x8e70,
+	0x2276, 0x8e70, 0x9398, 0x0002, 0x9290, 0x0002, 0x1f04, 0x9b0e,
+	0x60c3, 0x0020, 0x080c, 0x8f87, 0x015e, 0x00de, 0x0005, 0x0156,
+	0x080c, 0x8d6b, 0x7a14, 0x82ff, 0x0168, 0x9286, 0xffff, 0x0118,
+	0x9282, 0x000e, 0x1238, 0x7003, 0x0100, 0x700b, 0x0003, 0x60c3,
+	0x0008, 0x0488, 0x7003, 0x0200, 0x7007, 0x001c, 0x700f, 0x0001,
+	0x2011, 0x198e, 0x2204, 0x8007, 0x701a, 0x8210, 0x2204, 0x8007,
+	0x701e, 0x0421, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001,
+	0x181e, 0x2004, 0x7022, 0x2001, 0x181f, 0x2004, 0x7026, 0x0030,
+	0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, 0x7026, 0x20a9, 0x0004,
+	0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1, 0x0256,
+	0x4003, 0x60c3, 0x001c, 0x015e, 0x0804, 0x8f87, 0x0006, 0x2001,
+	0x1836, 0x2004, 0xd0ac, 0x000e, 0x0005, 0x2011, 0x0003, 0x080c,
+	0x9339, 0x2011, 0x0002, 0x080c, 0x9343, 0x080c, 0x9206, 0x0036,
+	0x901e, 0x080c, 0x9286, 0x003e, 0x0005, 0x2071, 0x1883, 0x7000,
+	0x9005, 0x0140, 0x2001, 0x0812, 0x2071, 0x1800, 0x7072, 0x7076,
+	0x7067, 0xffd4, 0x2071, 0x1800, 0x7070, 0x7052, 0x7057, 0x1ddc,
+	0x0005, 0x00e6, 0x0126, 0x2071, 0x1800, 0x2091, 0x8000, 0x7550,
+	0x9582, 0x0010, 0x0608, 0x7054, 0x2060, 0x6000, 0x9086, 0x0000,
+	0x0148, 0x9ce0, 0x001c, 0x7064, 0x9c02, 0x1208, 0x0cb0, 0x2061,
+	0x1ddc, 0x0c98, 0x6003, 0x0008, 0x8529, 0x7552, 0x9ca8, 0x001c,
+	0x7064, 0x9502, 0x1230, 0x7556, 0x9085, 0x0001, 0x012e, 0x00ee,
+	0x0005, 0x7057, 0x1ddc, 0x0cc0, 0x9006, 0x0cc0, 0x00e6, 0x2071,
+	0x1800, 0x7550, 0x9582, 0x0010, 0x0600, 0x7054, 0x2060, 0x6000,
+	0x9086, 0x0000, 0x0148, 0x9ce0, 0x001c, 0x7064, 0x9c02, 0x1208,
+	0x0cb0, 0x2061, 0x1ddc, 0x0c98, 0x6003, 0x0008, 0x8529, 0x7552,
+	0x9ca8, 0x001c, 0x7064, 0x9502, 0x1228, 0x7556, 0x9085, 0x0001,
+	0x00ee, 0x0005, 0x7057, 0x1ddc, 0x0cc8, 0x9006, 0x0cc8, 0x9c82,
+	0x1ddc, 0x0a0c, 0x0d65, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1a0c,
+	0x0d65, 0x9006, 0x6006, 0x600a, 0x600e, 0x6016, 0x601a, 0x6012,
+	0x6023, 0x0000, 0x6003, 0x0000, 0x601e, 0x605e, 0x6062, 0x6026,
+	0x602a, 0x602e, 0x6032, 0x6036, 0x603a, 0x603e, 0x604a, 0x6046,
+	0x6042, 0x2061, 0x1800, 0x6050, 0x8000, 0x6052, 0x0005, 0x9006,
+	0x600e, 0x6016, 0x601a, 0x6012, 0x6022, 0x6002, 0x601e, 0x605e,
+	0x6062, 0x604a, 0x6046, 0x2061, 0x1800, 0x6050, 0x8000, 0x6052,
+	0x0005, 0x0006, 0x6000, 0x9086, 0x0000, 0x01d0, 0x601c, 0xd084,
+	0x190c, 0x1914, 0x6023, 0x0007, 0x2001, 0x1957, 0x2004, 0x0006,
+	0x9082, 0x0051, 0x000e, 0x0208, 0x8004, 0x601a, 0x080c, 0xd4ce,
+	0x604b, 0x0000, 0x6044, 0xd0fc, 0x1129, 0x9006, 0x6046, 0x6016,
+	0x000e, 0x0005, 0x080c, 0x9926, 0x0106, 0x190c, 0x98c8, 0x2001,
+	0x19cb, 0x2004, 0x9c06, 0x1130, 0x0036, 0x2019, 0x0001, 0x080c,
+	0x9286, 0x003e, 0x080c, 0x94b8, 0x010e, 0x190c, 0x98e4, 0x0005,
+	0x00e6, 0x0126, 0x2071, 0x1800, 0x2091, 0x8000, 0x7550, 0x9582,
+	0x0001, 0x0608, 0x7054, 0x2060, 0x6000, 0x9086, 0x0000, 0x0148,
 	0x9ce0, 0x001c, 0x7064, 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1ddc,
 	0x0c98, 0x6003, 0x0008, 0x8529, 0x7552, 0x9ca8, 0x001c, 0x7064,
-	0x9502, 0x1228, 0x7556, 0x9085, 0x0001, 0x00ee, 0x0005, 0x7057,
-	0x1ddc, 0x0cc8, 0x9006, 0x0cc8, 0x9c82, 0x1ddc, 0x0a0c, 0x0d65,
-	0x2001, 0x1819, 0x2004, 0x9c02, 0x1a0c, 0x0d65, 0x9006, 0x6006,
-	0x600a, 0x600e, 0x6016, 0x601a, 0x6012, 0x6023, 0x0000, 0x6003,
-	0x0000, 0x601e, 0x605e, 0x6062, 0x6026, 0x602a, 0x602e, 0x6032,
-	0x6036, 0x603a, 0x603e, 0x604a, 0x6046, 0x6042, 0x2061, 0x1800,
-	0x6050, 0x8000, 0x6052, 0x0005, 0x9006, 0x600e, 0x6016, 0x601a,
-	0x6012, 0x6022, 0x6002, 0x601e, 0x605e, 0x6062, 0x604a, 0x6046,
-	0x2061, 0x1800, 0x6050, 0x8000, 0x6052, 0x0005, 0x0006, 0x6000,
-	0x9086, 0x0000, 0x01d0, 0x601c, 0xd084, 0x190c, 0x1914, 0x6023,
-	0x0007, 0x2001, 0x1957, 0x2004, 0x0006, 0x9082, 0x0051, 0x000e,
-	0x0208, 0x8004, 0x601a, 0x080c, 0xd4ac, 0x604b, 0x0000, 0x6044,
-	0xd0fc, 0x1129, 0x9006, 0x6046, 0x6016, 0x000e, 0x0005, 0x080c,
-	0x990b, 0x0106, 0x190c, 0x98ad, 0x2001, 0x19cb, 0x2004, 0x9c06,
-	0x1130, 0x0036, 0x2019, 0x0001, 0x080c, 0x926b, 0x003e, 0x080c,
-	0x949d, 0x010e, 0x190c, 0x98c9, 0x0005, 0x00e6, 0x0126, 0x2071,
-	0x1800, 0x2091, 0x8000, 0x7550, 0x9582, 0x0001, 0x0608, 0x7054,
-	0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, 0x001c, 0x7064,
-	0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1ddc, 0x0c98, 0x6003, 0x0008,
-	0x8529, 0x7552, 0x9ca8, 0x001c, 0x7064, 0x9502, 0x1230, 0x7556,
-	0x9085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x7057, 0x1ddc, 0x0cc0,
-	0x9006, 0x0cc0, 0x6020, 0x9084, 0x000f, 0x0002, 0x9c7e, 0x9c88,
-	0x9ca3, 0x9cbe, 0xbf90, 0xbfad, 0xbfc8, 0x9c7e, 0x9c88, 0x9c7e,
-	0x9cda, 0x9c7e, 0x9c7e, 0x9c7e, 0x9c7e, 0x9c7e, 0x9186, 0x0013,
-	0x1130, 0x6044, 0xd0fc, 0x0110, 0x080c, 0x884c, 0x0005, 0x0005,
-	0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0d65, 0x0013, 0x006e,
-	0x0005, 0x9ca1, 0xa3e9, 0xa5bb, 0x9ca1, 0xa649, 0x9fa3, 0x9ca1,
-	0x9ca1, 0xa36b, 0xabee, 0x9ca1, 0x9ca1, 0x9ca1, 0x9ca1, 0x9ca1,
-	0x9ca1, 0x080c, 0x0d65, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c,
-	0x0d65, 0x0013, 0x006e, 0x0005, 0x9cbc, 0xb1f9, 0x9cbc, 0x9cbc,
-	0x9cbc, 0x9cbc, 0x9cbc, 0x9cbc, 0xb19e, 0xb37c, 0x9cbc, 0xb236,
-	0xb2ba, 0xb236, 0xb2ba, 0x9cbc, 0x080c, 0x0d65, 0x6000, 0x9082,
-	0x0016, 0x1a0c, 0x0d65, 0x6000, 0x0002, 0x9cd8, 0xac38, 0xaccf,
-	0xae4f, 0xaebe, 0x9cd8, 0x9cd8, 0x9cd8, 0xac07, 0xb11f, 0xb122,
-	0x9cd8, 0x9cd8, 0x9cd8, 0x9cd8, 0xb152, 0x9cd8, 0x9cd8, 0x9cd8,
-	0x080c, 0x0d65, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0d65,
-	0x0013, 0x006e, 0x0005, 0x9cf3, 0x9cf3, 0x9d31, 0x9dd0, 0x9e50,
-	0x9cf3, 0x9cf3, 0x9cf3, 0x9cf5, 0x9cf3, 0x9cf3, 0x9cf3, 0x9cf3,
-	0x9cf3, 0x9cf3, 0x9cf3, 0x080c, 0x0d65, 0x9186, 0x004c, 0x0560,
-	0x9186, 0x0003, 0x190c, 0x0d65, 0x0096, 0x601c, 0xc0ed, 0x601e,
-	0x6003, 0x0003, 0x6106, 0x6014, 0x2048, 0xa87c, 0x9084, 0xa000,
-	0xc0b5, 0xa87e, 0xa8ac, 0xa836, 0xa8b0, 0xa83a, 0x9006, 0xa846,
-	0xa84a, 0xa884, 0x9092, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003,
-	0x8013, 0x8213, 0x9210, 0x621a, 0x009e, 0x080c, 0x1a64, 0x2009,
-	0x8030, 0x080c, 0x84f0, 0x0005, 0x6010, 0x00b6, 0x2058, 0xbca0,
-	0x00be, 0x2c00, 0x080c, 0x9e72, 0x080c, 0xbf5e, 0x6003, 0x0007,
-	0x0005, 0x00d6, 0x0096, 0x00f6, 0x2079, 0x1800, 0x7a8c, 0x6014,
-	0x2048, 0xa87c, 0xd0ec, 0x1110, 0x9290, 0x0018, 0xac78, 0xc4fc,
-	0x0046, 0xa8e0, 0x9005, 0x1140, 0xa8dc, 0x921a, 0x0140, 0x0220,
-	0xa87b, 0x0007, 0x2010, 0x0028, 0xa87b, 0x0015, 0x0010, 0xa87b,
-	0x0000, 0x8214, 0xa883, 0x0000, 0xaa02, 0x0006, 0x0016, 0x0026,
-	0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2400, 0x9005, 0x1108, 0x009a,
-	0x2100, 0x9086, 0x0015, 0x1118, 0x2001, 0x0001, 0x0038, 0x2100,
-	0x9086, 0x0016, 0x0118, 0x2001, 0x0001, 0x002a, 0x94a4, 0x0007,
-	0x8423, 0x9405, 0x0002, 0x9d98, 0x9d98, 0x9d93, 0x9d96, 0x9d98,
-	0x9d90, 0x9d83, 0x9d83, 0x9d83, 0x9d83, 0x9d83, 0x9d83, 0x9d83,
-	0x9d83, 0x9d83, 0x9d83, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x002e,
-	0x001e, 0x000e, 0x004e, 0x00fe, 0x009e, 0x00de, 0x080c, 0x0d65,
-	0x080c, 0xa82a, 0x0028, 0x080c, 0xa94d, 0x0010, 0x080c, 0xaa3c,
-	0x00fe, 0x00ee, 0x00de, 0x00ce, 0x002e, 0x001e, 0x2c00, 0xa896,
-	0x000e, 0x080c, 0x9f30, 0x0530, 0xa804, 0xa80e, 0x00a6, 0x2050,
-	0xb100, 0x00ae, 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084,
-	0xffc0, 0x9080, 0x0002, 0xaacc, 0xabd0, 0xacd4, 0xadd8, 0x2031,
-	0x0000, 0x2041, 0x1280, 0x080c, 0xa0da, 0x0160, 0x000e, 0x9005,
-	0x0120, 0x00fe, 0x009e, 0x00de, 0x0005, 0x00fe, 0x009e, 0x00de,
-	0x0804, 0x9bcc, 0x2001, 0x002c, 0x900e, 0x080c, 0x9f96, 0x0c70,
-	0x91b6, 0x0015, 0x0170, 0x91b6, 0x0016, 0x0158, 0x91b2, 0x0047,
-	0x0a0c, 0x0d65, 0x91b2, 0x0050, 0x1a0c, 0x0d65, 0x9182, 0x0047,
-	0x0042, 0x080c, 0x9a9c, 0x0120, 0x9086, 0x0002, 0x0904, 0x9d31,
-	0x0005, 0x9df2, 0x9df2, 0x9df4, 0x9e26, 0x9df2, 0x9df2, 0x9df2,
-	0x9df2, 0x9e39, 0x080c, 0x0d65, 0x00d6, 0x0016, 0x0096, 0x6003,
-	0x0004, 0x6114, 0x2148, 0xa87c, 0xd0fc, 0x01c0, 0xa878, 0xc0fc,
-	0x9005, 0x1158, 0xa894, 0x9005, 0x0140, 0x2001, 0x0000, 0x900e,
-	0x080c, 0x9f96, 0x080c, 0x9bcc, 0x00a8, 0x6003, 0x0002, 0xa8a4,
-	0xa9a8, 0x9105, 0x1178, 0xa8ae, 0xa8b2, 0x0c78, 0xa87f, 0x0020,
-	0xa88c, 0xa88a, 0xa8a4, 0xa8ae, 0xa8a8, 0xa8b2, 0xa8c7, 0x0000,
-	0xa8cb, 0x0000, 0x009e, 0x001e, 0x00de, 0x0005, 0x080c, 0x88a9,
-	0x00d6, 0x0096, 0x6114, 0x2148, 0x080c, 0xb82c, 0x0120, 0xa87b,
-	0x0006, 0x080c, 0x698f, 0x009e, 0x00de, 0x080c, 0x9bcc, 0x0804,
-	0x890e, 0x080c, 0x88a9, 0x080c, 0x3003, 0x080c, 0xbf5b, 0x00d6,
-	0x0096, 0x6114, 0x2148, 0x080c, 0xb82c, 0x0120, 0xa87b, 0x0029,
-	0x080c, 0x698f, 0x009e, 0x00de, 0x080c, 0x9bcc, 0x0804, 0x890e,
-	0x9182, 0x0047, 0x0002, 0x9e60, 0x9e62, 0x9e60, 0x9e60, 0x9e60,
-	0x9e60, 0x9e60, 0x9e60, 0x9e60, 0x9e60, 0x9e60, 0x9e60, 0x9e62,
-	0x080c, 0x0d65, 0x00d6, 0x0096, 0x080c, 0x1595, 0x6114, 0x2148,
-	0xa87b, 0x0000, 0xa883, 0x0000, 0x080c, 0x698f, 0x009e, 0x00de,
-	0x0804, 0x9bcc, 0x0026, 0x0036, 0x0056, 0x0066, 0x0096, 0x00a6,
-	0x00f6, 0x0006, 0x080c, 0x1022, 0x000e, 0x090c, 0x0d65, 0xa960,
-	0x21e8, 0xa95c, 0x9188, 0x0019, 0x21a0, 0x900e, 0x20a9, 0x0020,
-	0x4104, 0xa87a, 0x2079, 0x1800, 0x798c, 0x9188, 0x0018, 0x918c,
-	0x0fff, 0xa972, 0xac76, 0x2950, 0x00a6, 0x2001, 0x0205, 0x2003,
-	0x0000, 0x901e, 0x2029, 0x0001, 0x9182, 0x0034, 0x1228, 0x2011,
-	0x001f, 0x080c, 0xb3ff, 0x04c0, 0x2130, 0x2009, 0x0034, 0x2011,
-	0x001f, 0x080c, 0xb3ff, 0x96b2, 0x0034, 0xb004, 0x904d, 0x0110,
-	0x080c, 0x0fd4, 0x080c, 0x1022, 0x01d0, 0x8528, 0xa867, 0x0110,
-	0xa86b, 0x0000, 0x2920, 0xb406, 0x968a, 0x003d, 0x1230, 0x2608,
-	0x2011, 0x001b, 0x080c, 0xb3ff, 0x00b8, 0x96b2, 0x003c, 0x2009,
-	0x003c, 0x2950, 0x2011, 0x001b, 0x080c, 0xb3ff, 0x0c18, 0x2001,
+	0x9502, 0x1230, 0x7556, 0x9085, 0x0001, 0x012e, 0x00ee, 0x0005,
+	0x7057, 0x1ddc, 0x0cc0, 0x9006, 0x0cc0, 0x6020, 0x9084, 0x000f,
+	0x0002, 0x9c99, 0x9ca3, 0x9cbe, 0x9cd9, 0xbfab, 0xbfc8, 0xbfe3,
+	0x9c99, 0x9ca3, 0x9c99, 0x9cf5, 0x9c99, 0x9c99, 0x9c99, 0x9c99,
+	0x9c99, 0x9186, 0x0013, 0x1130, 0x6044, 0xd0fc, 0x0110, 0x080c,
+	0x8874, 0x0005, 0x0005, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c,
+	0x0d65, 0x0013, 0x006e, 0x0005, 0x9cbc, 0xa404, 0xa5d6, 0x9cbc,
+	0xa664, 0x9fbe, 0x9cbc, 0x9cbc, 0xa386, 0xac09, 0x9cbc, 0x9cbc,
+	0x9cbc, 0x9cbc, 0x9cbc, 0x9cbc, 0x080c, 0x0d65, 0x0066, 0x6000,
+	0x90b2, 0x0016, 0x1a0c, 0x0d65, 0x0013, 0x006e, 0x0005, 0x9cd7,
+	0xb214, 0x9cd7, 0x9cd7, 0x9cd7, 0x9cd7, 0x9cd7, 0x9cd7, 0xb1b9,
+	0xb397, 0x9cd7, 0xb251, 0xb2d5, 0xb251, 0xb2d5, 0x9cd7, 0x080c,
+	0x0d65, 0x6000, 0x9082, 0x0016, 0x1a0c, 0x0d65, 0x6000, 0x0002,
+	0x9cf3, 0xac53, 0xacea, 0xae6a, 0xaed9, 0x9cf3, 0x9cf3, 0x9cf3,
+	0xac22, 0xb13a, 0xb13d, 0x9cf3, 0x9cf3, 0x9cf3, 0x9cf3, 0xb16d,
+	0x9cf3, 0x9cf3, 0x9cf3, 0x080c, 0x0d65, 0x0066, 0x6000, 0x90b2,
+	0x0016, 0x1a0c, 0x0d65, 0x0013, 0x006e, 0x0005, 0x9d0e, 0x9d0e,
+	0x9d4c, 0x9deb, 0x9e6b, 0x9d0e, 0x9d0e, 0x9d0e, 0x9d10, 0x9d0e,
+	0x9d0e, 0x9d0e, 0x9d0e, 0x9d0e, 0x9d0e, 0x9d0e, 0x080c, 0x0d65,
+	0x9186, 0x004c, 0x0560, 0x9186, 0x0003, 0x190c, 0x0d65, 0x0096,
+	0x601c, 0xc0ed, 0x601e, 0x6003, 0x0003, 0x6106, 0x6014, 0x2048,
+	0xa87c, 0x9084, 0xa000, 0xc0b5, 0xa87e, 0xa8ac, 0xa836, 0xa8b0,
+	0xa83a, 0x9006, 0xa846, 0xa84a, 0xa884, 0x9092, 0x199a, 0x0210,
+	0x2001, 0x1999, 0x8003, 0x8013, 0x8213, 0x9210, 0x621a, 0x009e,
+	0x080c, 0x1a64, 0x2009, 0x8030, 0x080c, 0x8518, 0x0005, 0x6010,
+	0x00b6, 0x2058, 0xbca0, 0x00be, 0x2c00, 0x080c, 0x9e8d, 0x080c,
+	0xbf79, 0x6003, 0x0007, 0x0005, 0x00d6, 0x0096, 0x00f6, 0x2079,
+	0x1800, 0x7a8c, 0x6014, 0x2048, 0xa87c, 0xd0ec, 0x1110, 0x9290,
+	0x0018, 0xac78, 0xc4fc, 0x0046, 0xa8e0, 0x9005, 0x1140, 0xa8dc,
+	0x921a, 0x0140, 0x0220, 0xa87b, 0x0007, 0x2010, 0x0028, 0xa87b,
+	0x0015, 0x0010, 0xa87b, 0x0000, 0x8214, 0xa883, 0x0000, 0xaa02,
+	0x0006, 0x0016, 0x0026, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2400,
+	0x9005, 0x1108, 0x009a, 0x2100, 0x9086, 0x0015, 0x1118, 0x2001,
+	0x0001, 0x0038, 0x2100, 0x9086, 0x0016, 0x0118, 0x2001, 0x0001,
+	0x002a, 0x94a4, 0x0007, 0x8423, 0x9405, 0x0002, 0x9db3, 0x9db3,
+	0x9dae, 0x9db1, 0x9db3, 0x9dab, 0x9d9e, 0x9d9e, 0x9d9e, 0x9d9e,
+	0x9d9e, 0x9d9e, 0x9d9e, 0x9d9e, 0x9d9e, 0x9d9e, 0x00fe, 0x00ee,
+	0x00de, 0x00ce, 0x002e, 0x001e, 0x000e, 0x004e, 0x00fe, 0x009e,
+	0x00de, 0x080c, 0x0d65, 0x080c, 0xa845, 0x0028, 0x080c, 0xa968,
+	0x0010, 0x080c, 0xaa57, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x002e,
+	0x001e, 0x2c00, 0xa896, 0x000e, 0x080c, 0x9f4b, 0x0530, 0xa804,
+	0xa80e, 0x00a6, 0x2050, 0xb100, 0x00ae, 0x8006, 0x8006, 0x8007,
+	0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0xaacc, 0xabd0,
+	0xacd4, 0xadd8, 0x2031, 0x0000, 0x2041, 0x1280, 0x080c, 0xa0f5,
+	0x0160, 0x000e, 0x9005, 0x0120, 0x00fe, 0x009e, 0x00de, 0x0005,
+	0x00fe, 0x009e, 0x00de, 0x0804, 0x9be7, 0x2001, 0x002c, 0x900e,
+	0x080c, 0x9fb1, 0x0c70, 0x91b6, 0x0015, 0x0170, 0x91b6, 0x0016,
+	0x0158, 0x91b2, 0x0047, 0x0a0c, 0x0d65, 0x91b2, 0x0050, 0x1a0c,
+	0x0d65, 0x9182, 0x0047, 0x0042, 0x080c, 0x9ab7, 0x0120, 0x9086,
+	0x0002, 0x0904, 0x9d4c, 0x0005, 0x9e0d, 0x9e0d, 0x9e0f, 0x9e41,
+	0x9e0d, 0x9e0d, 0x9e0d, 0x9e0d, 0x9e54, 0x080c, 0x0d65, 0x00d6,
+	0x0016, 0x0096, 0x6003, 0x0004, 0x6114, 0x2148, 0xa87c, 0xd0fc,
+	0x01c0, 0xa878, 0xc0fc, 0x9005, 0x1158, 0xa894, 0x9005, 0x0140,
+	0x2001, 0x0000, 0x900e, 0x080c, 0x9fb1, 0x080c, 0x9be7, 0x00a8,
+	0x6003, 0x0002, 0xa8a4, 0xa9a8, 0x9105, 0x1178, 0xa8ae, 0xa8b2,
+	0x0c78, 0xa87f, 0x0020, 0xa88c, 0xa88a, 0xa8a4, 0xa8ae, 0xa8a8,
+	0xa8b2, 0xa8c7, 0x0000, 0xa8cb, 0x0000, 0x009e, 0x001e, 0x00de,
+	0x0005, 0x080c, 0x88d1, 0x00d6, 0x0096, 0x6114, 0x2148, 0x080c,
+	0xb847, 0x0120, 0xa87b, 0x0006, 0x080c, 0x6996, 0x009e, 0x00de,
+	0x080c, 0x9be7, 0x0804, 0x8936, 0x080c, 0x88d1, 0x080c, 0x3006,
+	0x080c, 0xbf76, 0x00d6, 0x0096, 0x6114, 0x2148, 0x080c, 0xb847,
+	0x0120, 0xa87b, 0x0029, 0x080c, 0x6996, 0x009e, 0x00de, 0x080c,
+	0x9be7, 0x0804, 0x8936, 0x9182, 0x0047, 0x0002, 0x9e7b, 0x9e7d,
+	0x9e7b, 0x9e7b, 0x9e7b, 0x9e7b, 0x9e7b, 0x9e7b, 0x9e7b, 0x9e7b,
+	0x9e7b, 0x9e7b, 0x9e7d, 0x080c, 0x0d65, 0x00d6, 0x0096, 0x080c,
+	0x1595, 0x6114, 0x2148, 0xa87b, 0x0000, 0xa883, 0x0000, 0x080c,
+	0x6996, 0x009e, 0x00de, 0x0804, 0x9be7, 0x0026, 0x0036, 0x0056,
+	0x0066, 0x0096, 0x00a6, 0x00f6, 0x0006, 0x080c, 0x1022, 0x000e,
+	0x090c, 0x0d65, 0xa960, 0x21e8, 0xa95c, 0x9188, 0x0019, 0x21a0,
+	0x900e, 0x20a9, 0x0020, 0x4104, 0xa87a, 0x2079, 0x1800, 0x798c,
+	0x9188, 0x0018, 0x918c, 0x0fff, 0xa972, 0xac76, 0x2950, 0x00a6,
+	0x2001, 0x0205, 0x2003, 0x0000, 0x901e, 0x2029, 0x0001, 0x9182,
+	0x0034, 0x1228, 0x2011, 0x001f, 0x080c, 0xb41a, 0x04c0, 0x2130,
+	0x2009, 0x0034, 0x2011, 0x001f, 0x080c, 0xb41a, 0x96b2, 0x0034,
+	0xb004, 0x904d, 0x0110, 0x080c, 0x0fd4, 0x080c, 0x1022, 0x01d0,
+	0x8528, 0xa867, 0x0110, 0xa86b, 0x0000, 0x2920, 0xb406, 0x968a,
+	0x003d, 0x1230, 0x2608, 0x2011, 0x001b, 0x080c, 0xb41a, 0x00b8,
+	0x96b2, 0x003c, 0x2009, 0x003c, 0x2950, 0x2011, 0x001b, 0x080c,
+	0xb41a, 0x0c18, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f,
+	0x95ad, 0x0050, 0xb566, 0xb070, 0xc0fd, 0xb072, 0x0048, 0x2001,
 	0x0205, 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad, 0x0050, 0xb566,
-	0xb070, 0xc0fd, 0xb072, 0x0048, 0x2001, 0x0205, 0x2003, 0x0000,
-	0x00ae, 0x852f, 0x95ad, 0x0050, 0xb566, 0x2a48, 0xa804, 0xa807,
-	0x0000, 0x0006, 0x080c, 0x698f, 0x000e, 0x2048, 0x9005, 0x1db0,
-	0x00fe, 0x00ae, 0x009e, 0x006e, 0x005e, 0x003e, 0x002e, 0x0005,
-	0x00d6, 0x00f6, 0x0096, 0x0006, 0x080c, 0x1022, 0x000e, 0x090c,
-	0x0d65, 0xa960, 0x21e8, 0xa95c, 0x9188, 0x0019, 0x21a0, 0x900e,
-	0x20a9, 0x0020, 0x4104, 0xaa66, 0xa87a, 0x2079, 0x1800, 0x798c,
-	0x810c, 0x9188, 0x000c, 0x9182, 0x001a, 0x0210, 0x2009, 0x001a,
-	0x21a8, 0x810b, 0xa972, 0xac76, 0x2e98, 0xa85c, 0x9080, 0x001f,
-	0x20a0, 0x2001, 0x0205, 0x200c, 0x918d, 0x0080, 0x2102, 0x4003,
-	0x2003, 0x0000, 0x080c, 0x698f, 0x009e, 0x00fe, 0x00de, 0x0005,
-	0x0016, 0x00d6, 0x00f6, 0x0096, 0x0016, 0x2001, 0x0205, 0x200c,
-	0x918d, 0x0080, 0x2102, 0x001e, 0x2079, 0x0200, 0x2e98, 0xa87c,
-	0xd0ec, 0x0118, 0x9e80, 0x000c, 0x2098, 0x2021, 0x003e, 0x901e,
-	0x9282, 0x0020, 0x0218, 0x2011, 0x0020, 0x2018, 0x9486, 0x003e,
-	0x1170, 0x0096, 0x080c, 0x1022, 0x2900, 0x009e, 0x05c0, 0xa806,
-	0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x3300,
-	0x908e, 0x0260, 0x0140, 0x2009, 0x0280, 0x9102, 0x920a, 0x0218,
-	0x2010, 0x2100, 0x9318, 0x2200, 0x9402, 0x1228, 0x2400, 0x9202,
-	0x2410, 0x9318, 0x9006, 0x2020, 0x22a8, 0xa800, 0x9200, 0xa802,
-	0x20e1, 0x0000, 0x4003, 0x83ff, 0x0180, 0x3300, 0x9086, 0x0280,
-	0x1130, 0x7814, 0x8000, 0x9085, 0x0080, 0x7816, 0x2e98, 0x2310,
-	0x84ff, 0x0904, 0x9f45, 0x0804, 0x9f47, 0x9085, 0x0001, 0x7817,
-	0x0000, 0x009e, 0x00fe, 0x00de, 0x001e, 0x0005, 0x00d6, 0x0036,
-	0x0096, 0x6314, 0x2348, 0xa87a, 0xa982, 0x080c, 0x6983, 0x009e,
-	0x003e, 0x00de, 0x0005, 0x91b6, 0x0015, 0x1118, 0x080c, 0x9bcc,
-	0x0030, 0x91b6, 0x0016, 0x190c, 0x0d65, 0x080c, 0x9bcc, 0x0005,
-	0x20a9, 0x000e, 0x20e1, 0x0000, 0x2e98, 0x6014, 0x0096, 0x2048,
-	0xa860, 0x20e8, 0xa85c, 0x20a0, 0x009e, 0x4003, 0x0136, 0x9080,
-	0x001b, 0x2011, 0x0006, 0x20a9, 0x0001, 0x3418, 0x8318, 0x23a0,
-	0x4003, 0x3318, 0x8318, 0x2398, 0x8211, 0x1db8, 0x2011, 0x0006,
-	0x013e, 0x20a0, 0x3318, 0x8318, 0x2398, 0x4003, 0x3418, 0x8318,
-	0x23a0, 0x8211, 0x1db8, 0x0096, 0x080c, 0xb82c, 0x0130, 0x6014,
-	0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0x009e, 0x0804, 0x9bcc,
-	0x0096, 0x00d6, 0x0036, 0x7330, 0x9386, 0x0200, 0x11a8, 0x6010,
-	0x00b6, 0x2058, 0xb8c7, 0x0000, 0x00be, 0x6014, 0x9005, 0x0130,
-	0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0xab32, 0x080c, 0x9bcc,
-	0x003e, 0x00de, 0x009e, 0x0005, 0x0011, 0x1d48, 0x0cc8, 0x0006,
-	0x0016, 0x080c, 0xbf46, 0x0188, 0x6014, 0x9005, 0x1170, 0x600b,
-	0x0003, 0x601b, 0x0000, 0x604b, 0x0000, 0x2009, 0x0022, 0x080c,
-	0xa3c1, 0x9006, 0x001e, 0x000e, 0x0005, 0x9085, 0x0001, 0x0cd0,
-	0x0096, 0x0016, 0x20a9, 0x0014, 0x9e80, 0x000c, 0x20e1, 0x0000,
-	0x2098, 0x6014, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002,
-	0x20a0, 0x4003, 0x2001, 0x0205, 0x2003, 0x0001, 0x2099, 0x0260,
-	0x20a9, 0x0016, 0x4003, 0x20a9, 0x000a, 0xa804, 0x2048, 0xa860,
-	0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003, 0x2001, 0x0205,
-	0x2003, 0x0002, 0x2099, 0x0260, 0x20a9, 0x0020, 0x4003, 0x2003,
-	0x0000, 0x6014, 0x2048, 0xa800, 0x2048, 0xa867, 0x0103, 0x080c,
-	0x9bcc, 0x001e, 0x009e, 0x0005, 0x0096, 0x0016, 0x900e, 0x7030,
-	0x9086, 0x0100, 0x0140, 0x7038, 0x9084, 0x00ff, 0x800c, 0x703c,
-	0x9084, 0x00ff, 0x8004, 0x9080, 0x0004, 0x9108, 0x810b, 0x2011,
-	0x0002, 0x2019, 0x000c, 0x6014, 0x2048, 0x080c, 0xb3ff, 0x080c,
-	0xb82c, 0x0140, 0x6014, 0x2048, 0xa807, 0x0000, 0xa864, 0xa8e2,
-	0xa867, 0x0103, 0x080c, 0x9bcc, 0x001e, 0x009e, 0x0005, 0x0016,
-	0x0096, 0x7030, 0x9086, 0x0100, 0x1118, 0x2009, 0x0004, 0x0010,
-	0x7034, 0x800c, 0x810b, 0x2011, 0x000c, 0x2019, 0x000c, 0x6014,
-	0x2048, 0xa804, 0x0096, 0x9005, 0x0108, 0x2048, 0x080c, 0xb3ff,
-	0x009e, 0x080c, 0xb82c, 0x0148, 0xa804, 0x9005, 0x1158, 0xa807,
-	0x0000, 0xa864, 0xa8e2, 0xa867, 0x0103, 0x080c, 0x9bcc, 0x009e,
-	0x001e, 0x0005, 0x0086, 0x2040, 0xa030, 0x8007, 0x9086, 0x0100,
-	0x1118, 0x080c, 0xa574, 0x00e0, 0xa034, 0x8007, 0x800c, 0x8806,
-	0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x000c,
-	0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0xaaa0, 0xab9c,
-	0xaca8, 0xada4, 0x2031, 0x0000, 0x2041, 0x1266, 0x0019, 0x0d08,
-	0x008e, 0x0898, 0x0096, 0x0006, 0x080c, 0x1022, 0x000e, 0x01b0,
-	0xa8ab, 0x0dcb, 0xa876, 0x000e, 0xa8a2, 0x0006, 0xae6a, 0x2800,
-	0xa89e, 0xa97a, 0xaf72, 0xaa8e, 0xab92, 0xac96, 0xad9a, 0x0086,
-	0x2940, 0x080c, 0x110c, 0x008e, 0x9085, 0x0001, 0x009e, 0x0005,
-	0x00e6, 0x00d6, 0x0026, 0x7008, 0x9084, 0x00ff, 0x6210, 0x00b6,
-	0x2258, 0xba10, 0x00be, 0x9206, 0x1520, 0x700c, 0x6210, 0x00b6,
-	0x2258, 0xba14, 0x00be, 0x9206, 0x11e0, 0x604b, 0x0000, 0x2c68,
-	0x0016, 0x2009, 0x0035, 0x080c, 0xbebe, 0x001e, 0x1158, 0x622c,
-	0x2268, 0x2071, 0x026c, 0x6b20, 0x9386, 0x0003, 0x0130, 0x9386,
-	0x0006, 0x0128, 0x080c, 0x9bcc, 0x0020, 0x0039, 0x0010, 0x080c,
-	0xa1f6, 0x002e, 0x00de, 0x00ee, 0x0005, 0x0096, 0x6814, 0x2048,
-	0x9186, 0x0015, 0x0904, 0xa1d5, 0x918e, 0x0016, 0x1904, 0xa1f4,
-	0x700c, 0x908c, 0xff00, 0x9186, 0x1700, 0x0120, 0x9186, 0x0300,
-	0x1904, 0xa1af, 0x89ff, 0x1138, 0x6800, 0x9086, 0x000f, 0x0904,
-	0xa191, 0x0804, 0xa1f2, 0x6808, 0x9086, 0xffff, 0x1904, 0xa1d7,
-	0xa87c, 0x9084, 0x0060, 0x9086, 0x0020, 0x1128, 0xa83c, 0xa940,
-	0x9105, 0x1904, 0xa1d7, 0x6824, 0xd0b4, 0x1904, 0xa1d7, 0x080c,
-	0xba1b, 0x6864, 0xa882, 0xa87c, 0xc0dc, 0xc0f4, 0xc0d4, 0xa87e,
-	0x0026, 0x900e, 0x6a18, 0x2001, 0x000a, 0x080c, 0x83f1, 0xa884,
-	0x920a, 0x0208, 0x8011, 0xaa86, 0x82ff, 0x002e, 0x1138, 0x00c6,
-	0x2d60, 0x080c, 0xb552, 0x00ce, 0x0804, 0xa1f2, 0x00c6, 0xa868,
-	0xd0fc, 0x1118, 0x080c, 0x5d4f, 0x0010, 0x080c, 0x60f4, 0x00ce,
-	0x1904, 0xa1d7, 0x00c6, 0x2d60, 0x080c, 0x9bcc, 0x00ce, 0x0804,
-	0xa1f2, 0x00c6, 0x080c, 0x9c3d, 0x0198, 0x6017, 0x0000, 0x6810,
-	0x6012, 0x080c, 0xbcc0, 0x6023, 0x0003, 0x6904, 0x00c6, 0x2d60,
-	0x080c, 0x9bcc, 0x00ce, 0x080c, 0x9c6a, 0x00ce, 0x0804, 0xa1f2,
-	0x2001, 0x1959, 0x2004, 0x684a, 0x00ce, 0x0804, 0xa1f2, 0x7008,
-	0x9086, 0x000b, 0x11c8, 0x6010, 0x00b6, 0x2058, 0xb900, 0xc1bc,
-	0xb902, 0x00be, 0x00c6, 0x2d60, 0xa87b, 0x0003, 0x080c, 0xbf00,
-	0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x2009, 0x8020,
-	0x080c, 0x84a9, 0x00ce, 0x0430, 0x700c, 0x9086, 0x2a00, 0x1138,
-	0x2001, 0x1959, 0x2004, 0x684a, 0x00e8, 0x04c1, 0x00e8, 0x89ff,
-	0x090c, 0x0d65, 0x00c6, 0x00d6, 0x2d60, 0xa867, 0x0103, 0xa87b,
-	0x0003, 0x080c, 0x67a5, 0x080c, 0xba1b, 0x080c, 0x9c06, 0x0026,
-	0x6010, 0x00b6, 0x2058, 0xba3c, 0x080c, 0x6394, 0x00be, 0x002e,
-	0x00de, 0x00ce, 0x080c, 0x9bcc, 0x009e, 0x0005, 0x9186, 0x0015,
-	0x1128, 0x2001, 0x1959, 0x2004, 0x684a, 0x0068, 0x918e, 0x0016,
-	0x1160, 0x00c6, 0x2d00, 0x2060, 0x080c, 0xd4ac, 0x080c, 0x8398,
-	0x080c, 0x9bcc, 0x00ce, 0x080c, 0x9bcc, 0x0005, 0x0026, 0x0036,
-	0x0046, 0x7228, 0xacb0, 0xabac, 0xd2f4, 0x0130, 0x2001, 0x1959,
-	0x2004, 0x684a, 0x0804, 0xa270, 0x00c6, 0x2d60, 0x080c, 0xb42a,
-	0x00ce, 0x6804, 0x9086, 0x0050, 0x1168, 0x00c6, 0x2d00, 0x2060,
-	0x6003, 0x0001, 0x6007, 0x0050, 0x2009, 0x8023, 0x080c, 0x84a9,
-	0x00ce, 0x04f0, 0x6800, 0x9086, 0x000f, 0x01a8, 0x89ff, 0x090c,
-	0x0d65, 0x6800, 0x9086, 0x0004, 0x1190, 0xa87c, 0xd0ac, 0x0178,
-	0xa843, 0x0fff, 0xa83f, 0x0fff, 0xa880, 0xc0fc, 0xa882, 0x2001,
-	0x0001, 0x6832, 0x0400, 0x2001, 0x0007, 0x6832, 0x00e0, 0xa87c,
-	0xd0b4, 0x1150, 0xd0ac, 0x0db8, 0x6824, 0xd0f4, 0x1d48, 0xa838,
-	0xa934, 0x9105, 0x0d80, 0x0c20, 0xd2ec, 0x1d68, 0x7024, 0x9306,
-	0x1118, 0x7020, 0x9406, 0x0d38, 0x7020, 0x683e, 0x7024, 0x683a,
-	0x2001, 0x0005, 0x6832, 0x080c, 0xbbaa, 0x080c, 0x890e, 0x0010,
-	0x080c, 0x9bcc, 0x004e, 0x003e, 0x002e, 0x0005, 0x00e6, 0x00d6,
-	0x0026, 0x7008, 0x9084, 0x00ff, 0x6210, 0x00b6, 0x2258, 0xba10,
-	0x00be, 0x9206, 0x1904, 0xa2db, 0x700c, 0x6210, 0x00b6, 0x2258,
-	0xba14, 0x00be, 0x9206, 0x1904, 0xa2db, 0x6038, 0x2068, 0x6824,
-	0xc0dc, 0x6826, 0x6a20, 0x9286, 0x0007, 0x0904, 0xa2db, 0x9286,
-	0x0002, 0x0904, 0xa2db, 0x9286, 0x0000, 0x05e8, 0x6808, 0x633c,
-	0x9306, 0x15c8, 0x2071, 0x026c, 0x9186, 0x0015, 0x0570, 0x918e,
-	0x0016, 0x1100, 0x00c6, 0x6038, 0x2060, 0x6104, 0x9186, 0x004b,
-	0x01c0, 0x9186, 0x004c, 0x01a8, 0x9186, 0x004d, 0x0190, 0x9186,
-	0x004e, 0x0178, 0x9186, 0x0052, 0x0160, 0x6014, 0x0096, 0x2048,
-	0x080c, 0xb82c, 0x090c, 0x0d65, 0xa87b, 0x0003, 0x009e, 0x080c,
-	0xbf00, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x2009,
-	0x8020, 0x080c, 0x84a9, 0x00ce, 0x0030, 0x6038, 0x2070, 0x2001,
-	0x1959, 0x2004, 0x704a, 0x080c, 0x9bcc, 0x002e, 0x00de, 0x00ee,
-	0x0005, 0x00b6, 0x0096, 0x00f6, 0x6014, 0x2048, 0x6010, 0x2058,
-	0x91b6, 0x0015, 0x0130, 0xba08, 0xbb0c, 0xbc00, 0xc48c, 0xbc02,
-	0x0460, 0x0096, 0x0156, 0x0036, 0x0026, 0x2b48, 0x9e90, 0x0010,
-	0x2019, 0x000a, 0x20a9, 0x0004, 0x080c, 0xabc4, 0x002e, 0x003e,
-	0x015e, 0x009e, 0x1904, 0xa34a, 0x0096, 0x0156, 0x0036, 0x0026,
-	0x2b48, 0x9e90, 0x0014, 0x2019, 0x0006, 0x20a9, 0x0004, 0x080c,
-	0xabc4, 0x002e, 0x003e, 0x015e, 0x009e, 0x15a0, 0x7238, 0xba0a,
-	0x733c, 0xbb0e, 0xbc00, 0xc48d, 0xbc02, 0xa804, 0x9005, 0x1128,
-	0x00fe, 0x009e, 0x00be, 0x0804, 0x9fdb, 0x0096, 0x2048, 0xaa12,
-	0xab16, 0xac0a, 0x009e, 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f,
-	0x9084, 0xffc0, 0x9080, 0x0002, 0x2009, 0x002b, 0xaaa0, 0xab9c,
-	0xaca8, 0xada4, 0x2031, 0x0000, 0x2041, 0x1266, 0x080c, 0xa0da,
-	0x0130, 0x00fe, 0x009e, 0x080c, 0x9bcc, 0x00be, 0x0005, 0x080c,
-	0xa574, 0x0cb8, 0x2b78, 0x00f6, 0x080c, 0x3003, 0x080c, 0xbf5b,
-	0x00fe, 0x00c6, 0x080c, 0x9b76, 0x2f00, 0x6012, 0x6017, 0x0000,
-	0x6023, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x2001, 0x0007,
-	0x080c, 0x61ba, 0x080c, 0x61e6, 0x080c, 0x84b0, 0x080c, 0x890e,
-	0x00ce, 0x0804, 0xa31d, 0x2100, 0x91b2, 0x0053, 0x1a0c, 0x0d65,
-	0x91b2, 0x0040, 0x1a04, 0xa3d3, 0x0002, 0xa3c1, 0xa3c1, 0xa3b7,
-	0xa3c1, 0xa3c1, 0xa3c1, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5,
-	0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5,
-	0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5,
-	0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3c1, 0xa3b5, 0xa3c1, 0xa3c1,
-	0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b7, 0xa3b5, 0xa3b5,
-	0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3c1,
-	0xa3c1, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5, 0xa3b5,
-	0xa3b5, 0xa3b5, 0xa3c1, 0xa3b5, 0xa3b5, 0x080c, 0x0d65, 0x0066,
-	0x00b6, 0x6610, 0x2658, 0xb8c4, 0xc08c, 0xb8c6, 0x00be, 0x006e,
-	0x0000, 0x6003, 0x0001, 0x6106, 0x9186, 0x0032, 0x0118, 0x080c,
-	0x84b0, 0x0010, 0x080c, 0x84a9, 0x0126, 0x2091, 0x8000, 0x080c,
-	0x890e, 0x012e, 0x0005, 0x2600, 0x0002, 0xa3e7, 0xa3e7, 0xa3e7,
-	0xa3c1, 0xa3c1, 0xa3e7, 0xa3e7, 0xa3e7, 0xa3e7, 0xa3c1, 0xa3e7,
-	0xa3c1, 0xa3e7, 0xa3c1, 0xa3e7, 0xa3e7, 0xa3e7, 0xa3e7, 0x080c,
-	0x0d65, 0x6004, 0x90b2, 0x0053, 0x1a0c, 0x0d65, 0x91b6, 0x0013,
-	0x0904, 0xa4be, 0x91b6, 0x0027, 0x1904, 0xa46a, 0x080c, 0x884c,
-	0x6004, 0x080c, 0xba30, 0x01b0, 0x080c, 0xba41, 0x01a8, 0x908e,
-	0x0021, 0x0904, 0xa467, 0x908e, 0x0022, 0x1130, 0x080c, 0xa007,
-	0x0904, 0xa463, 0x0804, 0xa464, 0x908e, 0x003d, 0x0904, 0xa467,
-	0x0804, 0xa45d, 0x080c, 0x3034, 0x2001, 0x0007, 0x080c, 0x61ba,
-	0x6010, 0x00b6, 0x2058, 0xb9a0, 0x00be, 0x080c, 0xa574, 0x9186,
-	0x007e, 0x1148, 0x2001, 0x1836, 0x2014, 0xc285, 0x080c, 0x70ac,
-	0x1108, 0xc2ad, 0x2202, 0x080c, 0x98ad, 0x0036, 0x0026, 0x2019,
-	0x0028, 0x2110, 0x080c, 0xd507, 0x002e, 0x003e, 0x0016, 0x0026,
-	0x0036, 0x2110, 0x2019, 0x0028, 0x080c, 0x8613, 0x0076, 0x903e,
-	0x080c, 0x8502, 0x6010, 0x00b6, 0x905d, 0x0100, 0x00be, 0x2c08,
-	0x080c, 0xcfa6, 0x007e, 0x003e, 0x002e, 0x001e, 0x080c, 0x98c9,
-	0x080c, 0xbf5b, 0x0016, 0x080c, 0xbcb8, 0x080c, 0x9bcc, 0x001e,
-	0x080c, 0x3113, 0x080c, 0x890e, 0x0030, 0x080c, 0xbcb8, 0x080c,
-	0x9bcc, 0x080c, 0x890e, 0x0005, 0x080c, 0xa574, 0x0cb0, 0x080c,
-	0xa5b0, 0x0c98, 0x9186, 0x0015, 0x0118, 0x9186, 0x0016, 0x1140,
-	0x080c, 0x9a9c, 0x0d80, 0x9086, 0x0002, 0x0904, 0xa5bb, 0x0c58,
-	0x9186, 0x0014, 0x1d40, 0x080c, 0x884c, 0x6004, 0x908e, 0x0022,
-	0x1118, 0x080c, 0xa007, 0x09f8, 0x080c, 0x3003, 0x080c, 0xbf5b,
-	0x080c, 0xba30, 0x1190, 0x080c, 0x3034, 0x6010, 0x00b6, 0x2058,
-	0xb9a0, 0x00be, 0x080c, 0xa574, 0x9186, 0x007e, 0x1128, 0x2001,
-	0x1836, 0x200c, 0xc185, 0x2102, 0x0800, 0x080c, 0xba41, 0x1120,
-	0x080c, 0xa574, 0x0804, 0xa45d, 0x6004, 0x908e, 0x0032, 0x1160,
-	0x00e6, 0x00f6, 0x2071, 0x1894, 0x2079, 0x0000, 0x080c, 0x33b5,
-	0x00fe, 0x00ee, 0x0804, 0xa45d, 0x6004, 0x908e, 0x0021, 0x0d40,
-	0x908e, 0x0022, 0x090c, 0xa574, 0x0804, 0xa45d, 0x90b2, 0x0040,
-	0x1a04, 0xa55d, 0x2008, 0x0002, 0xa506, 0xa507, 0xa50a, 0xa50d,
-	0xa510, 0xa513, 0xa504, 0xa504, 0xa504, 0xa504, 0xa504, 0xa504,
-	0xa504, 0xa504, 0xa504, 0xa504, 0xa504, 0xa504, 0xa504, 0xa504,
-	0xa504, 0xa504, 0xa504, 0xa504, 0xa504, 0xa504, 0xa504, 0xa504,
-	0xa504, 0xa504, 0xa516, 0xa51f, 0xa504, 0xa520, 0xa51f, 0xa504,
-	0xa504, 0xa504, 0xa504, 0xa504, 0xa51f, 0xa51f, 0xa504, 0xa504,
-	0xa504, 0xa504, 0xa504, 0xa504, 0xa504, 0xa504, 0xa548, 0xa51f,
-	0xa504, 0xa51b, 0xa504, 0xa504, 0xa504, 0xa51c, 0xa504, 0xa504,
-	0xa504, 0xa51f, 0xa543, 0xa504, 0x080c, 0x0d65, 0x00c0, 0x2001,
-	0x000b, 0x00e8, 0x2001, 0x0003, 0x00d0, 0x2001, 0x0005, 0x00b8,
-	0x2001, 0x0001, 0x00a0, 0x2001, 0x0009, 0x0088, 0x6003, 0x0005,
-	0x080c, 0x890e, 0x0058, 0x0018, 0x0010, 0x080c, 0x61ba, 0x04b8,
-	0x080c, 0xbf5e, 0x6003, 0x0004, 0x080c, 0x890e, 0x0005, 0x080c,
-	0x61ba, 0x6003, 0x0002, 0x0036, 0x2019, 0x185e, 0x2304, 0x9084,
-	0xff00, 0x1120, 0x2001, 0x1957, 0x201c, 0x0040, 0x8007, 0x909a,
-	0x0004, 0x0ec0, 0x8003, 0x801b, 0x831b, 0x9318, 0x631a, 0x003e,
-	0x080c, 0x890e, 0x0c18, 0x080c, 0xbcb8, 0x080c, 0x9bcc, 0x08f0,
-	0x00e6, 0x00f6, 0x2071, 0x1894, 0x2079, 0x0000, 0x080c, 0x33b5,
-	0x00fe, 0x00ee, 0x080c, 0x884c, 0x080c, 0x9bcc, 0x0878, 0x6003,
-	0x0002, 0x080c, 0xbf5e, 0x0804, 0x890e, 0x2600, 0x2008, 0x0002,
-	0xa572, 0xa572, 0xa572, 0xa557, 0xa557, 0xa572, 0xa572, 0xa572,
-	0xa572, 0xa557, 0xa572, 0xa557, 0xa572, 0xa557, 0xa572, 0xa572,
-	0xa572, 0xa572, 0x080c, 0x0d65, 0x00e6, 0x0096, 0x0026, 0x0016,
-	0x080c, 0xb82c, 0x0568, 0x6014, 0x2048, 0xa864, 0x9086, 0x0139,
-	0x11a8, 0xa894, 0x9086, 0x0056, 0x1148, 0x080c, 0x5127, 0x0130,
-	0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x0028, 0x2001, 0x0030,
-	0x900e, 0x2011, 0x4005, 0x080c, 0xbe25, 0x0090, 0xa868, 0xd0fc,
-	0x0178, 0xa807, 0x0000, 0x0016, 0x6004, 0x908e, 0x0021, 0x0168,
-	0x908e, 0x003d, 0x0150, 0x001e, 0xa867, 0x0103, 0xa833, 0x0100,
-	0x001e, 0x002e, 0x009e, 0x00ee, 0x0005, 0x001e, 0x0009, 0x0cc0,
-	0x0096, 0x6014, 0x2048, 0xa800, 0x2048, 0xa867, 0x0103, 0xa823,
-	0x8001, 0x009e, 0x0005, 0x00b6, 0x6610, 0x2658, 0xb804, 0x9084,
-	0x00ff, 0x90b2, 0x000c, 0x1a0c, 0x0d65, 0x6604, 0x96b6, 0x004d,
-	0x1120, 0x080c, 0xbd44, 0x0804, 0xa638, 0x6604, 0x96b6, 0x0043,
-	0x1120, 0x080c, 0xbd8d, 0x0804, 0xa638, 0x6604, 0x96b6, 0x004b,
-	0x1120, 0x080c, 0xbdb9, 0x0804, 0xa638, 0x6604, 0x96b6, 0x0033,
-	0x1120, 0x080c, 0xbcda, 0x0804, 0xa638, 0x6604, 0x96b6, 0x0028,
-	0x1120, 0x080c, 0xba7a, 0x0804, 0xa638, 0x6604, 0x96b6, 0x0029,
-	0x1120, 0x080c, 0xbabb, 0x0804, 0xa638, 0x6604, 0x96b6, 0x001f,
-	0x1118, 0x080c, 0x9fb0, 0x04e0, 0x6604, 0x96b6, 0x0000, 0x1118,
-	0x080c, 0xa2e1, 0x04a8, 0x6604, 0x96b6, 0x0022, 0x1118, 0x080c,
-	0x9fe8, 0x0470, 0x6604, 0x96b6, 0x0035, 0x1118, 0x080c, 0xa0f8,
-	0x0438, 0x6604, 0x96b6, 0x0039, 0x1118, 0x080c, 0xa276, 0x0400,
-	0x6604, 0x96b6, 0x003d, 0x1118, 0x080c, 0xa020, 0x00c8, 0x6604,
-	0x96b6, 0x0044, 0x1118, 0x080c, 0xa05c, 0x0090, 0x6604, 0x96b6,
-	0x0049, 0x1118, 0x080c, 0xa087, 0x0058, 0x91b6, 0x0015, 0x1110,
-	0x0063, 0x0030, 0x91b6, 0x0016, 0x1128, 0x00be, 0x0804, 0xa8f6,
-	0x00be, 0x0005, 0x080c, 0x9c87, 0x0cd8, 0xa655, 0xa658, 0xa655,
-	0xa69c, 0xa655, 0xa82a, 0xa903, 0xa655, 0xa655, 0xa8d0, 0xa655,
-	0xa8e4, 0x0096, 0x080c, 0x1595, 0x6014, 0x2048, 0xa800, 0x2048,
-	0xa867, 0x0103, 0x009e, 0x0804, 0x9bcc, 0xa001, 0xa001, 0x0005,
-	0x00e6, 0x2071, 0x1800, 0x708c, 0x9086, 0x0074, 0x1540, 0x080c,
-	0xcf77, 0x11b0, 0x6010, 0x00b6, 0x2058, 0x7030, 0xd08c, 0x0128,
-	0xb800, 0xd0bc, 0x0110, 0xc0c5, 0xb802, 0x00e9, 0x00be, 0x2001,
-	0x0006, 0x080c, 0x61ba, 0x080c, 0x3034, 0x080c, 0x9bcc, 0x0088,
-	0x2001, 0x000a, 0x080c, 0x61ba, 0x080c, 0x3034, 0x6003, 0x0001,
-	0x6007, 0x0001, 0x080c, 0x84b0, 0x080c, 0x890e, 0x0010, 0x080c,
-	0xa815, 0x00ee, 0x0005, 0x00d6, 0xb800, 0xd084, 0x0158, 0x9006,
-	0x080c, 0x61a6, 0x2069, 0x1853, 0x6804, 0x0020, 0x2001, 0x0006,
-	0x080c, 0x61e6, 0x00de, 0x0005, 0x00b6, 0x0096, 0x00d6, 0x2011,
-	0x1823, 0x2204, 0x9086, 0x0074, 0x1904, 0xa7ee, 0x6010, 0x2058,
-	0xbaa0, 0x9286, 0x007e, 0x1120, 0x080c, 0xaa47, 0x0804, 0xa753,
-	0x00d6, 0x080c, 0x70ac, 0x0198, 0x0026, 0x2011, 0x0010, 0x080c,
-	0x6684, 0x002e, 0x05c8, 0x080c, 0x539a, 0x1540, 0x6014, 0x2048,
+	0x2a48, 0xa804, 0xa807, 0x0000, 0x0006, 0x080c, 0x6996, 0x000e,
+	0x2048, 0x9005, 0x1db0, 0x00fe, 0x00ae, 0x009e, 0x006e, 0x005e,
+	0x003e, 0x002e, 0x0005, 0x00d6, 0x00f6, 0x0096, 0x0006, 0x080c,
+	0x1022, 0x000e, 0x090c, 0x0d65, 0xa960, 0x21e8, 0xa95c, 0x9188,
+	0x0019, 0x21a0, 0x900e, 0x20a9, 0x0020, 0x4104, 0xaa66, 0xa87a,
+	0x2079, 0x1800, 0x798c, 0x810c, 0x9188, 0x000c, 0x9182, 0x001a,
+	0x0210, 0x2009, 0x001a, 0x21a8, 0x810b, 0xa972, 0xac76, 0x2e98,
+	0xa85c, 0x9080, 0x001f, 0x20a0, 0x2001, 0x0205, 0x200c, 0x918d,
+	0x0080, 0x2102, 0x4003, 0x2003, 0x0000, 0x080c, 0x6996, 0x009e,
+	0x00fe, 0x00de, 0x0005, 0x0016, 0x00d6, 0x00f6, 0x0096, 0x0016,
+	0x2001, 0x0205, 0x200c, 0x918d, 0x0080, 0x2102, 0x001e, 0x2079,
+	0x0200, 0x2e98, 0xa87c, 0xd0ec, 0x0118, 0x9e80, 0x000c, 0x2098,
+	0x2021, 0x003e, 0x901e, 0x9282, 0x0020, 0x0218, 0x2011, 0x0020,
+	0x2018, 0x9486, 0x003e, 0x1170, 0x0096, 0x080c, 0x1022, 0x2900,
+	0x009e, 0x05c0, 0xa806, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080,
+	0x0002, 0x20a0, 0x3300, 0x908e, 0x0260, 0x0140, 0x2009, 0x0280,
+	0x9102, 0x920a, 0x0218, 0x2010, 0x2100, 0x9318, 0x2200, 0x9402,
+	0x1228, 0x2400, 0x9202, 0x2410, 0x9318, 0x9006, 0x2020, 0x22a8,
+	0xa800, 0x9200, 0xa802, 0x20e1, 0x0000, 0x4003, 0x83ff, 0x0180,
+	0x3300, 0x9086, 0x0280, 0x1130, 0x7814, 0x8000, 0x9085, 0x0080,
+	0x7816, 0x2e98, 0x2310, 0x84ff, 0x0904, 0x9f60, 0x0804, 0x9f62,
+	0x9085, 0x0001, 0x7817, 0x0000, 0x009e, 0x00fe, 0x00de, 0x001e,
+	0x0005, 0x00d6, 0x0036, 0x0096, 0x6314, 0x2348, 0xa87a, 0xa982,
+	0x080c, 0x698a, 0x009e, 0x003e, 0x00de, 0x0005, 0x91b6, 0x0015,
+	0x1118, 0x080c, 0x9be7, 0x0030, 0x91b6, 0x0016, 0x190c, 0x0d65,
+	0x080c, 0x9be7, 0x0005, 0x20a9, 0x000e, 0x20e1, 0x0000, 0x2e98,
+	0x6014, 0x0096, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x20a0, 0x009e,
+	0x4003, 0x0136, 0x9080, 0x001b, 0x2011, 0x0006, 0x20a9, 0x0001,
+	0x3418, 0x8318, 0x23a0, 0x4003, 0x3318, 0x8318, 0x2398, 0x8211,
+	0x1db8, 0x2011, 0x0006, 0x013e, 0x20a0, 0x3318, 0x8318, 0x2398,
+	0x4003, 0x3418, 0x8318, 0x23a0, 0x8211, 0x1db8, 0x0096, 0x080c,
+	0xb847, 0x0130, 0x6014, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103,
+	0x009e, 0x0804, 0x9be7, 0x0096, 0x00d6, 0x0036, 0x7330, 0x9386,
+	0x0200, 0x11a8, 0x6010, 0x00b6, 0x2058, 0xb8c7, 0x0000, 0x00be,
+	0x6014, 0x9005, 0x0130, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103,
+	0xab32, 0x080c, 0x9be7, 0x003e, 0x00de, 0x009e, 0x0005, 0x0011,
+	0x1d48, 0x0cc8, 0x0006, 0x0016, 0x080c, 0xbf61, 0x0188, 0x6014,
+	0x9005, 0x1170, 0x600b, 0x0003, 0x601b, 0x0000, 0x604b, 0x0000,
+	0x2009, 0x0022, 0x080c, 0xa3dc, 0x9006, 0x001e, 0x000e, 0x0005,
+	0x9085, 0x0001, 0x0cd0, 0x0096, 0x0016, 0x20a9, 0x0014, 0x9e80,
+	0x000c, 0x20e1, 0x0000, 0x2098, 0x6014, 0x2048, 0xa860, 0x20e8,
+	0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003, 0x2001, 0x0205, 0x2003,
+	0x0001, 0x2099, 0x0260, 0x20a9, 0x0016, 0x4003, 0x20a9, 0x000a,
+	0xa804, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0,
+	0x4003, 0x2001, 0x0205, 0x2003, 0x0002, 0x2099, 0x0260, 0x20a9,
+	0x0020, 0x4003, 0x2003, 0x0000, 0x6014, 0x2048, 0xa800, 0x2048,
+	0xa867, 0x0103, 0x080c, 0x9be7, 0x001e, 0x009e, 0x0005, 0x0096,
+	0x0016, 0x900e, 0x7030, 0x9086, 0x0100, 0x0140, 0x7038, 0x9084,
+	0x00ff, 0x800c, 0x703c, 0x9084, 0x00ff, 0x8004, 0x9080, 0x0004,
+	0x9108, 0x810b, 0x2011, 0x0002, 0x2019, 0x000c, 0x6014, 0x2048,
+	0x080c, 0xb41a, 0x080c, 0xb847, 0x0140, 0x6014, 0x2048, 0xa807,
+	0x0000, 0xa864, 0xa8e2, 0xa867, 0x0103, 0x080c, 0x9be7, 0x001e,
+	0x009e, 0x0005, 0x0016, 0x0096, 0x7030, 0x9086, 0x0100, 0x1118,
+	0x2009, 0x0004, 0x0010, 0x7034, 0x800c, 0x810b, 0x2011, 0x000c,
+	0x2019, 0x000c, 0x6014, 0x2048, 0xa804, 0x0096, 0x9005, 0x0108,
+	0x2048, 0x080c, 0xb41a, 0x009e, 0x080c, 0xb847, 0x0148, 0xa804,
+	0x9005, 0x1158, 0xa807, 0x0000, 0xa864, 0xa8e2, 0xa867, 0x0103,
+	0x080c, 0x9be7, 0x009e, 0x001e, 0x0005, 0x0086, 0x2040, 0xa030,
+	0x8007, 0x9086, 0x0100, 0x1118, 0x080c, 0xa58f, 0x00e0, 0xa034,
+	0x8007, 0x800c, 0x8806, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084,
+	0xffc0, 0x9080, 0x000c, 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897,
+	0x4000, 0xaaa0, 0xab9c, 0xaca8, 0xada4, 0x2031, 0x0000, 0x2041,
+	0x1266, 0x0019, 0x0d08, 0x008e, 0x0898, 0x0096, 0x0006, 0x080c,
+	0x1022, 0x000e, 0x01b0, 0xa8ab, 0x0dcb, 0xa876, 0x000e, 0xa8a2,
+	0x0006, 0xae6a, 0x2800, 0xa89e, 0xa97a, 0xaf72, 0xaa8e, 0xab92,
+	0xac96, 0xad9a, 0x0086, 0x2940, 0x080c, 0x110c, 0x008e, 0x9085,
+	0x0001, 0x009e, 0x0005, 0x00e6, 0x00d6, 0x0026, 0x7008, 0x9084,
+	0x00ff, 0x6210, 0x00b6, 0x2258, 0xba10, 0x00be, 0x9206, 0x1520,
+	0x700c, 0x6210, 0x00b6, 0x2258, 0xba14, 0x00be, 0x9206, 0x11e0,
+	0x604b, 0x0000, 0x2c68, 0x0016, 0x2009, 0x0035, 0x080c, 0xbed9,
+	0x001e, 0x1158, 0x622c, 0x2268, 0x2071, 0x026c, 0x6b20, 0x9386,
+	0x0003, 0x0130, 0x9386, 0x0006, 0x0128, 0x080c, 0x9be7, 0x0020,
+	0x0039, 0x0010, 0x080c, 0xa211, 0x002e, 0x00de, 0x00ee, 0x0005,
+	0x0096, 0x6814, 0x2048, 0x9186, 0x0015, 0x0904, 0xa1f0, 0x918e,
+	0x0016, 0x1904, 0xa20f, 0x700c, 0x908c, 0xff00, 0x9186, 0x1700,
+	0x0120, 0x9186, 0x0300, 0x1904, 0xa1ca, 0x89ff, 0x1138, 0x6800,
+	0x9086, 0x000f, 0x0904, 0xa1ac, 0x0804, 0xa20d, 0x6808, 0x9086,
+	0xffff, 0x1904, 0xa1f2, 0xa87c, 0x9084, 0x0060, 0x9086, 0x0020,
+	0x1128, 0xa83c, 0xa940, 0x9105, 0x1904, 0xa1f2, 0x6824, 0xd0b4,
+	0x1904, 0xa1f2, 0x080c, 0xba36, 0x6864, 0xa882, 0xa87c, 0xc0dc,
+	0xc0f4, 0xc0d4, 0xa87e, 0x0026, 0x900e, 0x6a18, 0x2001, 0x000a,
+	0x080c, 0x8419, 0xa884, 0x920a, 0x0208, 0x8011, 0xaa86, 0x82ff,
+	0x002e, 0x1138, 0x00c6, 0x2d60, 0x080c, 0xb56d, 0x00ce, 0x0804,
+	0xa20d, 0x00c6, 0xa868, 0xd0fc, 0x1118, 0x080c, 0x5d56, 0x0010,
+	0x080c, 0x60fb, 0x00ce, 0x1904, 0xa1f2, 0x00c6, 0x2d60, 0x080c,
+	0x9be7, 0x00ce, 0x0804, 0xa20d, 0x00c6, 0x080c, 0x9c58, 0x0198,
+	0x6017, 0x0000, 0x6810, 0x6012, 0x080c, 0xbcdb, 0x6023, 0x0003,
+	0x6904, 0x00c6, 0x2d60, 0x080c, 0x9be7, 0x00ce, 0x080c, 0x9c85,
+	0x00ce, 0x0804, 0xa20d, 0x2001, 0x1959, 0x2004, 0x684a, 0x00ce,
+	0x0804, 0xa20d, 0x7008, 0x9086, 0x000b, 0x11c8, 0x6010, 0x00b6,
+	0x2058, 0xb900, 0xc1bc, 0xb902, 0x00be, 0x00c6, 0x2d60, 0xa87b,
+	0x0003, 0x080c, 0xbf1b, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023,
+	0x0002, 0x2009, 0x8020, 0x080c, 0x84d1, 0x00ce, 0x0430, 0x700c,
+	0x9086, 0x2a00, 0x1138, 0x2001, 0x1959, 0x2004, 0x684a, 0x00e8,
+	0x04c1, 0x00e8, 0x89ff, 0x090c, 0x0d65, 0x00c6, 0x00d6, 0x2d60,
+	0xa867, 0x0103, 0xa87b, 0x0003, 0x080c, 0x67ac, 0x080c, 0xba36,
+	0x080c, 0x9c21, 0x0026, 0x6010, 0x00b6, 0x2058, 0xba3c, 0x080c,
+	0x639b, 0x00be, 0x002e, 0x00de, 0x00ce, 0x080c, 0x9be7, 0x009e,
+	0x0005, 0x9186, 0x0015, 0x1128, 0x2001, 0x1959, 0x2004, 0x684a,
+	0x0068, 0x918e, 0x0016, 0x1160, 0x00c6, 0x2d00, 0x2060, 0x080c,
+	0xd4ce, 0x080c, 0x83c0, 0x080c, 0x9be7, 0x00ce, 0x080c, 0x9be7,
+	0x0005, 0x0026, 0x0036, 0x0046, 0x7228, 0xacb0, 0xabac, 0xd2f4,
+	0x0130, 0x2001, 0x1959, 0x2004, 0x684a, 0x0804, 0xa28b, 0x00c6,
+	0x2d60, 0x080c, 0xb445, 0x00ce, 0x6804, 0x9086, 0x0050, 0x1168,
+	0x00c6, 0x2d00, 0x2060, 0x6003, 0x0001, 0x6007, 0x0050, 0x2009,
+	0x8023, 0x080c, 0x84d1, 0x00ce, 0x04f0, 0x6800, 0x9086, 0x000f,
+	0x01a8, 0x89ff, 0x090c, 0x0d65, 0x6800, 0x9086, 0x0004, 0x1190,
+	0xa87c, 0xd0ac, 0x0178, 0xa843, 0x0fff, 0xa83f, 0x0fff, 0xa880,
+	0xc0fc, 0xa882, 0x2001, 0x0001, 0x6832, 0x0400, 0x2001, 0x0007,
+	0x6832, 0x00e0, 0xa87c, 0xd0b4, 0x1150, 0xd0ac, 0x0db8, 0x6824,
+	0xd0f4, 0x1d48, 0xa838, 0xa934, 0x9105, 0x0d80, 0x0c20, 0xd2ec,
+	0x1d68, 0x7024, 0x9306, 0x1118, 0x7020, 0x9406, 0x0d38, 0x7020,
+	0x683e, 0x7024, 0x683a, 0x2001, 0x0005, 0x6832, 0x080c, 0xbbc5,
+	0x080c, 0x8936, 0x0010, 0x080c, 0x9be7, 0x004e, 0x003e, 0x002e,
+	0x0005, 0x00e6, 0x00d6, 0x0026, 0x7008, 0x9084, 0x00ff, 0x6210,
+	0x00b6, 0x2258, 0xba10, 0x00be, 0x9206, 0x1904, 0xa2f6, 0x700c,
+	0x6210, 0x00b6, 0x2258, 0xba14, 0x00be, 0x9206, 0x1904, 0xa2f6,
+	0x6038, 0x2068, 0x6824, 0xc0dc, 0x6826, 0x6a20, 0x9286, 0x0007,
+	0x0904, 0xa2f6, 0x9286, 0x0002, 0x0904, 0xa2f6, 0x9286, 0x0000,
+	0x05e8, 0x6808, 0x633c, 0x9306, 0x15c8, 0x2071, 0x026c, 0x9186,
+	0x0015, 0x0570, 0x918e, 0x0016, 0x1100, 0x00c6, 0x6038, 0x2060,
+	0x6104, 0x9186, 0x004b, 0x01c0, 0x9186, 0x004c, 0x01a8, 0x9186,
+	0x004d, 0x0190, 0x9186, 0x004e, 0x0178, 0x9186, 0x0052, 0x0160,
+	0x6014, 0x0096, 0x2048, 0x080c, 0xb847, 0x090c, 0x0d65, 0xa87b,
+	0x0003, 0x009e, 0x080c, 0xbf1b, 0x6007, 0x0085, 0x6003, 0x000b,
+	0x6023, 0x0002, 0x2009, 0x8020, 0x080c, 0x84d1, 0x00ce, 0x0030,
+	0x6038, 0x2070, 0x2001, 0x1959, 0x2004, 0x704a, 0x080c, 0x9be7,
+	0x002e, 0x00de, 0x00ee, 0x0005, 0x00b6, 0x0096, 0x00f6, 0x6014,
+	0x2048, 0x6010, 0x2058, 0x91b6, 0x0015, 0x0130, 0xba08, 0xbb0c,
+	0xbc00, 0xc48c, 0xbc02, 0x0460, 0x0096, 0x0156, 0x0036, 0x0026,
+	0x2b48, 0x9e90, 0x0010, 0x2019, 0x000a, 0x20a9, 0x0004, 0x080c,
+	0xabdf, 0x002e, 0x003e, 0x015e, 0x009e, 0x1904, 0xa365, 0x0096,
+	0x0156, 0x0036, 0x0026, 0x2b48, 0x9e90, 0x0014, 0x2019, 0x0006,
+	0x20a9, 0x0004, 0x080c, 0xabdf, 0x002e, 0x003e, 0x015e, 0x009e,
+	0x15a0, 0x7238, 0xba0a, 0x733c, 0xbb0e, 0xbc00, 0xc48d, 0xbc02,
+	0xa804, 0x9005, 0x1128, 0x00fe, 0x009e, 0x00be, 0x0804, 0x9ff6,
+	0x0096, 0x2048, 0xaa12, 0xab16, 0xac0a, 0x009e, 0x8006, 0x8006,
+	0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2009,
+	0x002b, 0xaaa0, 0xab9c, 0xaca8, 0xada4, 0x2031, 0x0000, 0x2041,
+	0x1266, 0x080c, 0xa0f5, 0x0130, 0x00fe, 0x009e, 0x080c, 0x9be7,
+	0x00be, 0x0005, 0x080c, 0xa58f, 0x0cb8, 0x2b78, 0x00f6, 0x080c,
+	0x3006, 0x080c, 0xbf76, 0x00fe, 0x00c6, 0x080c, 0x9b91, 0x2f00,
+	0x6012, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001, 0x6003,
+	0x0001, 0x2001, 0x0007, 0x080c, 0x61c1, 0x080c, 0x61ed, 0x080c,
+	0x84d8, 0x080c, 0x8936, 0x00ce, 0x0804, 0xa338, 0x2100, 0x91b2,
+	0x0053, 0x1a0c, 0x0d65, 0x91b2, 0x0040, 0x1a04, 0xa3ee, 0x0002,
+	0xa3dc, 0xa3dc, 0xa3d2, 0xa3dc, 0xa3dc, 0xa3dc, 0xa3d0, 0xa3d0,
+	0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0,
+	0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0,
+	0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3dc,
+	0xa3d0, 0xa3dc, 0xa3dc, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0,
+	0xa3d2, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0,
+	0xa3d0, 0xa3d0, 0xa3dc, 0xa3dc, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0,
+	0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3d0, 0xa3dc, 0xa3d0, 0xa3d0,
+	0x080c, 0x0d65, 0x0066, 0x00b6, 0x6610, 0x2658, 0xb8c4, 0xc08c,
+	0xb8c6, 0x00be, 0x006e, 0x0000, 0x6003, 0x0001, 0x6106, 0x9186,
+	0x0032, 0x0118, 0x080c, 0x84d8, 0x0010, 0x080c, 0x84d1, 0x0126,
+	0x2091, 0x8000, 0x080c, 0x8936, 0x012e, 0x0005, 0x2600, 0x0002,
+	0xa402, 0xa402, 0xa402, 0xa3dc, 0xa3dc, 0xa402, 0xa402, 0xa402,
+	0xa402, 0xa3dc, 0xa402, 0xa3dc, 0xa402, 0xa3dc, 0xa402, 0xa402,
+	0xa402, 0xa402, 0x080c, 0x0d65, 0x6004, 0x90b2, 0x0053, 0x1a0c,
+	0x0d65, 0x91b6, 0x0013, 0x0904, 0xa4d9, 0x91b6, 0x0027, 0x1904,
+	0xa485, 0x080c, 0x8874, 0x6004, 0x080c, 0xba4b, 0x01b0, 0x080c,
+	0xba5c, 0x01a8, 0x908e, 0x0021, 0x0904, 0xa482, 0x908e, 0x0022,
+	0x1130, 0x080c, 0xa022, 0x0904, 0xa47e, 0x0804, 0xa47f, 0x908e,
+	0x003d, 0x0904, 0xa482, 0x0804, 0xa478, 0x080c, 0x303b, 0x2001,
+	0x0007, 0x080c, 0x61c1, 0x6010, 0x00b6, 0x2058, 0xb9a0, 0x00be,
+	0x080c, 0xa58f, 0x9186, 0x007e, 0x1148, 0x2001, 0x1836, 0x2014,
+	0xc285, 0x080c, 0x70b7, 0x1108, 0xc2ad, 0x2202, 0x080c, 0x98c8,
+	0x0036, 0x0026, 0x2019, 0x0028, 0x2110, 0x080c, 0xd529, 0x002e,
+	0x003e, 0x0016, 0x0026, 0x0036, 0x2110, 0x2019, 0x0028, 0x080c,
+	0x863b, 0x0076, 0x903e, 0x080c, 0x852a, 0x6010, 0x00b6, 0x905d,
+	0x0100, 0x00be, 0x2c08, 0x080c, 0xcfc8, 0x007e, 0x003e, 0x002e,
+	0x001e, 0x080c, 0x98e4, 0x080c, 0xbf76, 0x0016, 0x080c, 0xbcd3,
+	0x080c, 0x9be7, 0x001e, 0x080c, 0x311a, 0x080c, 0x8936, 0x0030,
+	0x080c, 0xbcd3, 0x080c, 0x9be7, 0x080c, 0x8936, 0x0005, 0x080c,
+	0xa58f, 0x0cb0, 0x080c, 0xa5cb, 0x0c98, 0x9186, 0x0015, 0x0118,
+	0x9186, 0x0016, 0x1140, 0x080c, 0x9ab7, 0x0d80, 0x9086, 0x0002,
+	0x0904, 0xa5d6, 0x0c58, 0x9186, 0x0014, 0x1d40, 0x080c, 0x8874,
+	0x6004, 0x908e, 0x0022, 0x1118, 0x080c, 0xa022, 0x09f8, 0x080c,
+	0x3006, 0x080c, 0xbf76, 0x080c, 0xba4b, 0x1190, 0x080c, 0x303b,
+	0x6010, 0x00b6, 0x2058, 0xb9a0, 0x00be, 0x080c, 0xa58f, 0x9186,
+	0x007e, 0x1128, 0x2001, 0x1836, 0x200c, 0xc185, 0x2102, 0x0800,
+	0x080c, 0xba5c, 0x1120, 0x080c, 0xa58f, 0x0804, 0xa478, 0x6004,
+	0x908e, 0x0032, 0x1160, 0x00e6, 0x00f6, 0x2071, 0x1894, 0x2079,
+	0x0000, 0x080c, 0x33bc, 0x00fe, 0x00ee, 0x0804, 0xa478, 0x6004,
+	0x908e, 0x0021, 0x0d40, 0x908e, 0x0022, 0x090c, 0xa58f, 0x0804,
+	0xa478, 0x90b2, 0x0040, 0x1a04, 0xa578, 0x2008, 0x0002, 0xa521,
+	0xa522, 0xa525, 0xa528, 0xa52b, 0xa52e, 0xa51f, 0xa51f, 0xa51f,
+	0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa51f,
+	0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa51f,
+	0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa531, 0xa53a, 0xa51f,
+	0xa53b, 0xa53a, 0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa53a,
+	0xa53a, 0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa51f, 0xa51f,
+	0xa51f, 0xa563, 0xa53a, 0xa51f, 0xa536, 0xa51f, 0xa51f, 0xa51f,
+	0xa537, 0xa51f, 0xa51f, 0xa51f, 0xa53a, 0xa55e, 0xa51f, 0x080c,
+	0x0d65, 0x00c0, 0x2001, 0x000b, 0x00e8, 0x2001, 0x0003, 0x00d0,
+	0x2001, 0x0005, 0x00b8, 0x2001, 0x0001, 0x00a0, 0x2001, 0x0009,
+	0x0088, 0x6003, 0x0005, 0x080c, 0x8936, 0x0058, 0x0018, 0x0010,
+	0x080c, 0x61c1, 0x04b8, 0x080c, 0xbf79, 0x6003, 0x0004, 0x080c,
+	0x8936, 0x0005, 0x080c, 0x61c1, 0x6003, 0x0002, 0x0036, 0x2019,
+	0x185e, 0x2304, 0x9084, 0xff00, 0x1120, 0x2001, 0x1957, 0x201c,
+	0x0040, 0x8007, 0x909a, 0x0004, 0x0ec0, 0x8003, 0x801b, 0x831b,
+	0x9318, 0x631a, 0x003e, 0x080c, 0x8936, 0x0c18, 0x080c, 0xbcd3,
+	0x080c, 0x9be7, 0x08f0, 0x00e6, 0x00f6, 0x2071, 0x1894, 0x2079,
+	0x0000, 0x080c, 0x33bc, 0x00fe, 0x00ee, 0x080c, 0x8874, 0x080c,
+	0x9be7, 0x0878, 0x6003, 0x0002, 0x080c, 0xbf79, 0x0804, 0x8936,
+	0x2600, 0x2008, 0x0002, 0xa58d, 0xa58d, 0xa58d, 0xa572, 0xa572,
+	0xa58d, 0xa58d, 0xa58d, 0xa58d, 0xa572, 0xa58d, 0xa572, 0xa58d,
+	0xa572, 0xa58d, 0xa58d, 0xa58d, 0xa58d, 0x080c, 0x0d65, 0x00e6,
+	0x0096, 0x0026, 0x0016, 0x080c, 0xb847, 0x0568, 0x6014, 0x2048,
+	0xa864, 0x9086, 0x0139, 0x11a8, 0xa894, 0x9086, 0x0056, 0x1148,
+	0x080c, 0x512e, 0x0130, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000,
+	0x0028, 0x2001, 0x0030, 0x900e, 0x2011, 0x4005, 0x080c, 0xbe40,
+	0x0090, 0xa868, 0xd0fc, 0x0178, 0xa807, 0x0000, 0x0016, 0x6004,
+	0x908e, 0x0021, 0x0168, 0x908e, 0x003d, 0x0150, 0x001e, 0xa867,
+	0x0103, 0xa833, 0x0100, 0x001e, 0x002e, 0x009e, 0x00ee, 0x0005,
+	0x001e, 0x0009, 0x0cc0, 0x0096, 0x6014, 0x2048, 0xa800, 0x2048,
+	0xa867, 0x0103, 0xa823, 0x8001, 0x009e, 0x0005, 0x00b6, 0x6610,
+	0x2658, 0xb804, 0x9084, 0x00ff, 0x90b2, 0x000c, 0x1a0c, 0x0d65,
+	0x6604, 0x96b6, 0x004d, 0x1120, 0x080c, 0xbd5f, 0x0804, 0xa653,
+	0x6604, 0x96b6, 0x0043, 0x1120, 0x080c, 0xbda8, 0x0804, 0xa653,
+	0x6604, 0x96b6, 0x004b, 0x1120, 0x080c, 0xbdd4, 0x0804, 0xa653,
+	0x6604, 0x96b6, 0x0033, 0x1120, 0x080c, 0xbcf5, 0x0804, 0xa653,
+	0x6604, 0x96b6, 0x0028, 0x1120, 0x080c, 0xba95, 0x0804, 0xa653,
+	0x6604, 0x96b6, 0x0029, 0x1120, 0x080c, 0xbad6, 0x0804, 0xa653,
+	0x6604, 0x96b6, 0x001f, 0x1118, 0x080c, 0x9fcb, 0x04e0, 0x6604,
+	0x96b6, 0x0000, 0x1118, 0x080c, 0xa2fc, 0x04a8, 0x6604, 0x96b6,
+	0x0022, 0x1118, 0x080c, 0xa003, 0x0470, 0x6604, 0x96b6, 0x0035,
+	0x1118, 0x080c, 0xa113, 0x0438, 0x6604, 0x96b6, 0x0039, 0x1118,
+	0x080c, 0xa291, 0x0400, 0x6604, 0x96b6, 0x003d, 0x1118, 0x080c,
+	0xa03b, 0x00c8, 0x6604, 0x96b6, 0x0044, 0x1118, 0x080c, 0xa077,
+	0x0090, 0x6604, 0x96b6, 0x0049, 0x1118, 0x080c, 0xa0a2, 0x0058,
+	0x91b6, 0x0015, 0x1110, 0x0063, 0x0030, 0x91b6, 0x0016, 0x1128,
+	0x00be, 0x0804, 0xa911, 0x00be, 0x0005, 0x080c, 0x9ca2, 0x0cd8,
+	0xa670, 0xa673, 0xa670, 0xa6b7, 0xa670, 0xa845, 0xa91e, 0xa670,
+	0xa670, 0xa8eb, 0xa670, 0xa8ff, 0x0096, 0x080c, 0x1595, 0x6014,
+	0x2048, 0xa800, 0x2048, 0xa867, 0x0103, 0x009e, 0x0804, 0x9be7,
+	0xa001, 0xa001, 0x0005, 0x00e6, 0x2071, 0x1800, 0x708c, 0x9086,
+	0x0074, 0x1540, 0x080c, 0xcf99, 0x11b0, 0x6010, 0x00b6, 0x2058,
+	0x7030, 0xd08c, 0x0128, 0xb800, 0xd0bc, 0x0110, 0xc0c5, 0xb802,
+	0x00e9, 0x00be, 0x2001, 0x0006, 0x080c, 0x61c1, 0x080c, 0x303b,
+	0x080c, 0x9be7, 0x0088, 0x2001, 0x000a, 0x080c, 0x61c1, 0x080c,
+	0x303b, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x84d8, 0x080c,
+	0x8936, 0x0010, 0x080c, 0xa830, 0x00ee, 0x0005, 0x00d6, 0xb800,
+	0xd084, 0x0158, 0x9006, 0x080c, 0x61ad, 0x2069, 0x1853, 0x6804,
+	0x0020, 0x2001, 0x0006, 0x080c, 0x61ed, 0x00de, 0x0005, 0x00b6,
+	0x0096, 0x00d6, 0x2011, 0x1823, 0x2204, 0x9086, 0x0074, 0x1904,
+	0xa809, 0x6010, 0x2058, 0xbaa0, 0x9286, 0x007e, 0x1120, 0x080c,
+	0xaa62, 0x0804, 0xa76e, 0x00d6, 0x080c, 0x70b7, 0x0198, 0x0026,
+	0x2011, 0x0010, 0x080c, 0x668b, 0x002e, 0x05c8, 0x080c, 0x53a1,
+	0x1540, 0x6014, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833,
+	0xdead, 0x00f8, 0x0026, 0x2011, 0x8008, 0x080c, 0x668b, 0x002e,
+	0x0530, 0x6014, 0x2048, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039,
+	0x1140, 0x2001, 0x0030, 0x900e, 0x2011, 0x4009, 0x080c, 0xbe40,
+	0x0040, 0x6014, 0x2048, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833,
+	0xdead, 0x6010, 0x2058, 0xb9a0, 0x0016, 0x080c, 0x303b, 0x080c,
+	0x9be7, 0x001e, 0x080c, 0x311a, 0x00de, 0x0804, 0xa80a, 0x00de,
+	0x080c, 0xaa57, 0x6010, 0x2058, 0xbaa0, 0x9286, 0x0080, 0x1510,
+	0x6014, 0x9005, 0x01a8, 0x2048, 0xa864, 0x9084, 0x00ff, 0x9086,
+	0x0039, 0x1140, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c,
+	0xbe40, 0x0030, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, 0x0200,
+	0x2001, 0x0006, 0x080c, 0x61c1, 0x080c, 0x303b, 0x080c, 0x9be7,
+	0x0804, 0xa80a, 0x080c, 0xa818, 0x6014, 0x9005, 0x0190, 0x2048,
+	0xa868, 0xd0f4, 0x01e8, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039,
+	0x1d08, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c, 0xbe40,
+	0x08f8, 0x080c, 0xa80e, 0x0160, 0x9006, 0x080c, 0x61ad, 0x2001,
+	0x0004, 0x080c, 0x61ed, 0x2001, 0x0007, 0x080c, 0x61c1, 0x08a0,
+	0x2001, 0x0004, 0x080c, 0x61c1, 0x6003, 0x0001, 0x6007, 0x0003,
+	0x080c, 0x84d8, 0x080c, 0x8936, 0x0804, 0xa80a, 0xb85c, 0xd0e4,
+	0x01d0, 0x080c, 0xbc6d, 0x080c, 0x70b7, 0x0118, 0xd0dc, 0x1904,
+	0xa730, 0x2011, 0x1836, 0x2204, 0xc0ad, 0x2012, 0x2001, 0x0002,
+	0x00f6, 0x2079, 0x0100, 0x78e3, 0x0000, 0x080c, 0x2498, 0x78e2,
+	0x00fe, 0x0804, 0xa730, 0x080c, 0xbcae, 0x2011, 0x1836, 0x2204,
+	0xc0a5, 0x2012, 0x0006, 0x080c, 0xd0fe, 0x000e, 0x1904, 0xa730,
+	0xc0b5, 0x2012, 0x2001, 0x0006, 0x080c, 0x61c1, 0x9006, 0x080c,
+	0x61ad, 0x00c6, 0x2001, 0x180f, 0x2004, 0xd09c, 0x0520, 0x00f6,
+	0x2079, 0x0100, 0x00e6, 0x2071, 0x1800, 0x700c, 0x9084, 0x00ff,
+	0x78e6, 0x707a, 0x7010, 0x78ea, 0x707e, 0x908c, 0x00ff, 0x00ee,
+	0x780c, 0xc0b5, 0x780e, 0x00fe, 0x080c, 0x246d, 0x00f6, 0x2100,
+	0x900e, 0x080c, 0x2424, 0x795a, 0x00fe, 0x9186, 0x0081, 0x01d8,
+	0x2009, 0x0081, 0x00c8, 0x2009, 0x00ef, 0x00f6, 0x2079, 0x0100,
+	0x79ea, 0x7932, 0x7936, 0x780c, 0xc0b5, 0x780e, 0x00fe, 0x080c,
+	0x246d, 0x00f6, 0x2079, 0x1800, 0x797e, 0x2100, 0x900e, 0x080c,
+	0x2424, 0x795a, 0x00fe, 0x8108, 0x080c, 0x6210, 0x2b00, 0x00ce,
+	0x1904, 0xa730, 0x6012, 0x2009, 0x180f, 0x210c, 0xd19c, 0x0150,
+	0x2009, 0x027c, 0x210c, 0x918c, 0x00ff, 0xb912, 0x2009, 0x027d,
+	0x210c, 0xb916, 0x2001, 0x0002, 0x080c, 0x61c1, 0x6023, 0x0001,
+	0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x84d8, 0x080c, 0x8936,
+	0x0008, 0x0431, 0x00de, 0x009e, 0x00be, 0x0005, 0x2001, 0x1810,
+	0x2004, 0xd0a4, 0x0120, 0x2001, 0x1854, 0x2004, 0xd0ac, 0x0005,
+	0x00e6, 0x080c, 0xd582, 0x0190, 0x2071, 0x0260, 0x7108, 0x720c,
+	0x918c, 0x00ff, 0x1118, 0x9284, 0xff00, 0x0140, 0x6010, 0x2058,
+	0xb8a0, 0x9084, 0xff80, 0x1110, 0xb912, 0xba16, 0x00ee, 0x0005,
+	0x2030, 0x2001, 0x0007, 0x080c, 0x61c1, 0x080c, 0x53a1, 0x1120,
+	0x2001, 0x0007, 0x080c, 0x61ed, 0x080c, 0x303b, 0x6020, 0x9086,
+	0x000a, 0x1108, 0x0005, 0x0804, 0x9be7, 0x00b6, 0x00e6, 0x0026,
+	0x0016, 0x2071, 0x1800, 0x708c, 0x9086, 0x0014, 0x1904, 0xa8e2,
+	0x00d6, 0x080c, 0x70b7, 0x0198, 0x0026, 0x2011, 0x0010, 0x080c,
+	0x668b, 0x002e, 0x05c8, 0x080c, 0x53a1, 0x1540, 0x6014, 0x2048,
 	0xa807, 0x0000, 0xa867, 0x0103, 0xa833, 0xdead, 0x00f8, 0x0026,
-	0x2011, 0x8008, 0x080c, 0x6684, 0x002e, 0x0530, 0x6014, 0x2048,
+	0x2011, 0x8008, 0x080c, 0x668b, 0x002e, 0x0530, 0x6014, 0x2048,
 	0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, 0x0030,
-	0x900e, 0x2011, 0x4009, 0x080c, 0xbe25, 0x0040, 0x6014, 0x2048,
+	0x900e, 0x2011, 0x4009, 0x080c, 0xbe40, 0x0040, 0x6014, 0x2048,
 	0xa807, 0x0000, 0xa867, 0x0103, 0xa833, 0xdead, 0x6010, 0x2058,
-	0xb9a0, 0x0016, 0x080c, 0x3034, 0x080c, 0x9bcc, 0x001e, 0x080c,
-	0x3113, 0x00de, 0x0804, 0xa7ef, 0x00de, 0x080c, 0xaa3c, 0x6010,
-	0x2058, 0xbaa0, 0x9286, 0x0080, 0x1510, 0x6014, 0x9005, 0x01a8,
-	0x2048, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001,
-	0x0000, 0x900e, 0x2011, 0x4000, 0x080c, 0xbe25, 0x0030, 0xa807,
-	0x0000, 0xa867, 0x0103, 0xa833, 0x0200, 0x2001, 0x0006, 0x080c,
-	0x61ba, 0x080c, 0x3034, 0x080c, 0x9bcc, 0x0804, 0xa7ef, 0x080c,
-	0xa7fd, 0x6014, 0x9005, 0x0190, 0x2048, 0xa868, 0xd0f4, 0x01e8,
-	0xa864, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1d08, 0x2001, 0x0000,
-	0x900e, 0x2011, 0x4000, 0x080c, 0xbe25, 0x08f8, 0x080c, 0xa7f3,
-	0x0160, 0x9006, 0x080c, 0x61a6, 0x2001, 0x0004, 0x080c, 0x61e6,
-	0x2001, 0x0007, 0x080c, 0x61ba, 0x08a0, 0x2001, 0x0004, 0x080c,
-	0x61ba, 0x6003, 0x0001, 0x6007, 0x0003, 0x080c, 0x84b0, 0x080c,
-	0x890e, 0x0804, 0xa7ef, 0xb85c, 0xd0e4, 0x01d0, 0x080c, 0xbc52,
-	0x080c, 0x70ac, 0x0118, 0xd0dc, 0x1904, 0xa715, 0x2011, 0x1836,
-	0x2204, 0xc0ad, 0x2012, 0x2001, 0x0002, 0x00f6, 0x2079, 0x0100,
-	0x78e3, 0x0000, 0x080c, 0x2498, 0x78e2, 0x00fe, 0x0804, 0xa715,
-	0x080c, 0xbc93, 0x2011, 0x1836, 0x2204, 0xc0a5, 0x2012, 0x0006,
-	0x080c, 0xd0dc, 0x000e, 0x1904, 0xa715, 0xc0b5, 0x2012, 0x2001,
-	0x0006, 0x080c, 0x61ba, 0x9006, 0x080c, 0x61a6, 0x00c6, 0x2001,
-	0x180f, 0x2004, 0xd09c, 0x0520, 0x00f6, 0x2079, 0x0100, 0x00e6,
-	0x2071, 0x1800, 0x700c, 0x9084, 0x00ff, 0x78e6, 0x707a, 0x7010,
-	0x78ea, 0x707e, 0x908c, 0x00ff, 0x00ee, 0x780c, 0xc0b5, 0x780e,
-	0x00fe, 0x080c, 0x246d, 0x00f6, 0x2100, 0x900e, 0x080c, 0x2424,
-	0x795a, 0x00fe, 0x9186, 0x0081, 0x01d8, 0x2009, 0x0081, 0x00c8,
-	0x2009, 0x00ef, 0x00f6, 0x2079, 0x0100, 0x79ea, 0x7932, 0x7936,
-	0x780c, 0xc0b5, 0x780e, 0x00fe, 0x080c, 0x246d, 0x00f6, 0x2079,
-	0x1800, 0x797e, 0x2100, 0x900e, 0x080c, 0x2424, 0x795a, 0x00fe,
-	0x8108, 0x080c, 0x6209, 0x2b00, 0x00ce, 0x1904, 0xa715, 0x6012,
-	0x2009, 0x180f, 0x210c, 0xd19c, 0x0150, 0x2009, 0x027c, 0x210c,
-	0x918c, 0x00ff, 0xb912, 0x2009, 0x027d, 0x210c, 0xb916, 0x2001,
-	0x0002, 0x080c, 0x61ba, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007,
-	0x0002, 0x080c, 0x84b0, 0x080c, 0x890e, 0x0008, 0x0431, 0x00de,
-	0x009e, 0x00be, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0a4, 0x0120,
-	0x2001, 0x1854, 0x2004, 0xd0ac, 0x0005, 0x00e6, 0x080c, 0xd560,
-	0x0190, 0x2071, 0x0260, 0x7108, 0x720c, 0x918c, 0x00ff, 0x1118,
-	0x9284, 0xff00, 0x0140, 0x6010, 0x2058, 0xb8a0, 0x9084, 0xff80,
-	0x1110, 0xb912, 0xba16, 0x00ee, 0x0005, 0x2030, 0x2001, 0x0007,
-	0x080c, 0x61ba, 0x080c, 0x539a, 0x1120, 0x2001, 0x0007, 0x080c,
-	0x61e6, 0x080c, 0x3034, 0x6020, 0x9086, 0x000a, 0x1108, 0x0005,
-	0x0804, 0x9bcc, 0x00b6, 0x00e6, 0x0026, 0x0016, 0x2071, 0x1800,
-	0x708c, 0x9086, 0x0014, 0x1904, 0xa8c7, 0x00d6, 0x080c, 0x70ac,
-	0x0198, 0x0026, 0x2011, 0x0010, 0x080c, 0x6684, 0x002e, 0x05c8,
-	0x080c, 0x539a, 0x1540, 0x6014, 0x2048, 0xa807, 0x0000, 0xa867,
-	0x0103, 0xa833, 0xdead, 0x00f8, 0x0026, 0x2011, 0x8008, 0x080c,
-	0x6684, 0x002e, 0x0530, 0x6014, 0x2048, 0xa864, 0x9084, 0x00ff,
-	0x9086, 0x0039, 0x1140, 0x2001, 0x0030, 0x900e, 0x2011, 0x4009,
-	0x080c, 0xbe25, 0x0040, 0x6014, 0x2048, 0xa807, 0x0000, 0xa867,
-	0x0103, 0xa833, 0xdead, 0x6010, 0x2058, 0xb9a0, 0x0016, 0x080c,
-	0x3034, 0x080c, 0x9bcc, 0x001e, 0x080c, 0x3113, 0x00de, 0x0804,
-	0xa8cb, 0x00de, 0x080c, 0x539a, 0x1170, 0x6014, 0x9005, 0x1158,
-	0x0036, 0x0046, 0x6010, 0x2058, 0xbba0, 0x2021, 0x0006, 0x080c,
-	0x4a6e, 0x004e, 0x003e, 0x00d6, 0x6010, 0x2058, 0x080c, 0x6304,
-	0x080c, 0xa68b, 0x00de, 0x080c, 0xab0d, 0x1588, 0x6010, 0x2058,
-	0xb890, 0x9005, 0x0560, 0x2001, 0x0006, 0x080c, 0x61ba, 0x0096,
-	0x6014, 0x904d, 0x01d0, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0039,
-	0x1140, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c, 0xbe25,
-	0x0060, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0029, 0x0130, 0xa807,
-	0x0000, 0xa867, 0x0103, 0xa833, 0x0200, 0x009e, 0x080c, 0x3034,
-	0x6020, 0x9086, 0x000a, 0x0138, 0x080c, 0x9bcc, 0x0020, 0x080c,
-	0xa574, 0x080c, 0xa815, 0x001e, 0x002e, 0x00ee, 0x00be, 0x0005,
-	0x2011, 0x1823, 0x2204, 0x9086, 0x0014, 0x1160, 0x2001, 0x0002,
-	0x080c, 0x61ba, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x84b0,
-	0x0804, 0x890e, 0x0804, 0xa815, 0x2030, 0x2011, 0x1823, 0x2204,
-	0x9086, 0x0004, 0x1148, 0x96b6, 0x000b, 0x1120, 0x2001, 0x0007,
-	0x080c, 0x61ba, 0x0804, 0x9bcc, 0x0804, 0xa815, 0x0002, 0xa655,
-	0xa90e, 0xa655, 0xa94d, 0xa655, 0xa9f8, 0xa903, 0xa655, 0xa655,
-	0xaa0b, 0xa655, 0xaa1b, 0x6604, 0x9686, 0x0003, 0x0904, 0xa82a,
-	0x96b6, 0x001e, 0x1110, 0x080c, 0x9bcc, 0x0005, 0x00b6, 0x00d6,
-	0x00c6, 0x080c, 0xaa2b, 0x11a0, 0x9006, 0x080c, 0x61a6, 0x080c,
-	0x3003, 0x080c, 0xbf5b, 0x2001, 0x0002, 0x080c, 0x61ba, 0x6003,
-	0x0001, 0x6007, 0x0002, 0x080c, 0x84b0, 0x080c, 0x890e, 0x0408,
-	0x2009, 0x026e, 0x2104, 0x9086, 0x0009, 0x1160, 0x6010, 0x2058,
-	0xb840, 0x9084, 0x00ff, 0x9005, 0x0170, 0x8001, 0xb842, 0x601b,
-	0x000a, 0x0078, 0x2009, 0x026f, 0x2104, 0x9084, 0xff00, 0x9086,
-	0x1900, 0x1108, 0x08a0, 0x080c, 0x3003, 0x080c, 0xbf5b, 0x080c,
-	0xa815, 0x00ce, 0x00de, 0x00be, 0x0005, 0x0096, 0x00b6, 0x0026,
-	0x9016, 0x080c, 0xaa39, 0x00d6, 0x2069, 0x194d, 0x2d04, 0x9005,
-	0x0168, 0x6010, 0x2058, 0xb8a0, 0x9086, 0x007e, 0x1138, 0x2069,
-	0x181f, 0x2d04, 0x8000, 0x206a, 0x00de, 0x0010, 0x00de, 0x0088,
-	0x9006, 0x080c, 0x61a6, 0x2001, 0x0002, 0x080c, 0x61ba, 0x6003,
-	0x0001, 0x6007, 0x0002, 0x080c, 0x84b0, 0x080c, 0x890e, 0x0804,
-	0xa9c8, 0x080c, 0xb82c, 0x01b0, 0x6014, 0x2048, 0xa864, 0x2010,
-	0x9086, 0x0139, 0x1138, 0x6007, 0x0016, 0x2001, 0x0002, 0x080c,
-	0xbe7f, 0x00b0, 0x6014, 0x2048, 0xa864, 0xd0fc, 0x0118, 0x2001,
-	0x0001, 0x0ca8, 0x2001, 0x180e, 0x2004, 0xd0dc, 0x0148, 0x6010,
-	0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x1110, 0x9006, 0x0c38,
-	0x080c, 0xa574, 0x2009, 0x026e, 0x2134, 0x96b4, 0x00ff, 0x9686,
-	0x0005, 0x0510, 0x9686, 0x000b, 0x01c8, 0x2009, 0x026f, 0x2104,
-	0x9084, 0xff00, 0x1118, 0x9686, 0x0009, 0x01b0, 0x9086, 0x1900,
-	0x1168, 0x9686, 0x0009, 0x0180, 0x2001, 0x0004, 0x080c, 0x61ba,
-	0x2001, 0x0028, 0x601a, 0x6007, 0x0052, 0x0010, 0x080c, 0xa815,
-	0x002e, 0x00be, 0x009e, 0x0005, 0x9286, 0x0139, 0x0160, 0x6014,
-	0x2048, 0x080c, 0xb82c, 0x0140, 0xa864, 0x9086, 0x0139, 0x0118,
-	0xa868, 0xd0fc, 0x0108, 0x0c50, 0x6010, 0x2058, 0xb840, 0x9084,
-	0x00ff, 0x9005, 0x0138, 0x8001, 0xb842, 0x601b, 0x000a, 0x6007,
-	0x0016, 0x08f0, 0xb8a0, 0x9086, 0x007e, 0x1138, 0x00e6, 0x2071,
-	0x1800, 0x080c, 0x5c68, 0x00ee, 0x0010, 0x080c, 0x3003, 0x0870,
-	0x080c, 0xaa39, 0x1160, 0x2001, 0x0004, 0x080c, 0x61ba, 0x6003,
-	0x0001, 0x6007, 0x0003, 0x080c, 0x84b0, 0x0804, 0x890e, 0x080c,
-	0xa574, 0x0804, 0xa815, 0x0469, 0x1160, 0x2001, 0x0008, 0x080c,
-	0x61ba, 0x6003, 0x0001, 0x6007, 0x0005, 0x080c, 0x84b0, 0x0804,
-	0x890e, 0x0804, 0xa815, 0x00e9, 0x1160, 0x2001, 0x000a, 0x080c,
-	0x61ba, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x84b0, 0x0804,
-	0x890e, 0x0804, 0xa815, 0x2009, 0x026e, 0x2104, 0x9086, 0x0003,
-	0x1138, 0x2009, 0x026f, 0x2104, 0x9084, 0xff00, 0x9086, 0x2a00,
-	0x0005, 0x9085, 0x0001, 0x0005, 0x00b6, 0x00c6, 0x0016, 0x6110,
-	0x2158, 0x080c, 0x6278, 0x001e, 0x00ce, 0x00be, 0x0005, 0x00b6,
-	0x00f6, 0x00e6, 0x00d6, 0x0036, 0x0016, 0x6010, 0x2058, 0x2009,
-	0x1836, 0x2104, 0x9085, 0x0003, 0x200a, 0x080c, 0xaadf, 0x0560,
-	0x2009, 0x1836, 0x2104, 0xc0cd, 0x200a, 0x080c, 0x665c, 0x0158,
-	0x9006, 0x2020, 0x2009, 0x002a, 0x080c, 0xd251, 0x2001, 0x180c,
-	0x200c, 0xc195, 0x2102, 0x2019, 0x002a, 0x2009, 0x0001, 0x080c,
-	0x2fc2, 0x00e6, 0x2071, 0x1800, 0x080c, 0x2ddb, 0x00ee, 0x00c6,
-	0x0156, 0x20a9, 0x0781, 0x2009, 0x007f, 0x080c, 0x3113, 0x8108,
-	0x1f04, 0xaa7d, 0x015e, 0x00ce, 0x080c, 0xaa3c, 0x2071, 0x0260,
-	0x2079, 0x0200, 0x7817, 0x0001, 0x2001, 0x1836, 0x200c, 0xc1c5,
-	0x7018, 0xd0fc, 0x0110, 0xd0dc, 0x0118, 0x7038, 0xd0dc, 0x1108,
-	0xc1c4, 0x7817, 0x0000, 0x2001, 0x1836, 0x2102, 0x2079, 0x0100,
-	0x2e04, 0x9084, 0x00ff, 0x2069, 0x181e, 0x206a, 0x78e6, 0x0006,
-	0x8e70, 0x2e04, 0x2069, 0x181f, 0x206a, 0x78ea, 0x7832, 0x7836,
-	0x2010, 0x9084, 0xff00, 0x001e, 0x9105, 0x2009, 0x182b, 0x200a,
-	0x2200, 0x9084, 0x00ff, 0x2008, 0x080c, 0x246d, 0x080c, 0x70ac,
-	0x0170, 0x2071, 0x0260, 0x2069, 0x1953, 0x7048, 0x206a, 0x704c,
-	0x6806, 0x7050, 0x680a, 0x7054, 0x680e, 0x080c, 0xbc52, 0x0040,
-	0x2001, 0x0006, 0x080c, 0x61ba, 0x080c, 0x3034, 0x080c, 0x9bcc,
-	0x001e, 0x003e, 0x00de, 0x00ee, 0x00fe, 0x00be, 0x0005, 0x0096,
-	0x0026, 0x0036, 0x00e6, 0x0156, 0x2019, 0x182b, 0x231c, 0x83ff,
-	0x01f0, 0x2071, 0x0260, 0x7200, 0x9294, 0x00ff, 0x7004, 0x9084,
-	0xff00, 0x9205, 0x9306, 0x1198, 0x2011, 0x0276, 0x20a9, 0x0004,
-	0x2b48, 0x2019, 0x000a, 0x080c, 0xabc4, 0x1148, 0x2011, 0x027a,
-	0x20a9, 0x0004, 0x2019, 0x0006, 0x080c, 0xabc4, 0x1100, 0x015e,
-	0x00ee, 0x003e, 0x002e, 0x009e, 0x0005, 0x00e6, 0x2071, 0x0260,
-	0x7034, 0x9086, 0x0014, 0x11a8, 0x7038, 0x9086, 0x0800, 0x1188,
-	0x703c, 0xd0ec, 0x0160, 0x9084, 0x0f00, 0x9086, 0x0100, 0x1138,
-	0x7054, 0xd0a4, 0x1110, 0xd0ac, 0x0110, 0x9006, 0x0010, 0x9085,
-	0x0001, 0x00ee, 0x0005, 0x00e6, 0x0096, 0x00c6, 0x0076, 0x0056,
-	0x0046, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2029, 0x19c4,
-	0x252c, 0x2021, 0x19cb, 0x2424, 0x2061, 0x1ddc, 0x2071, 0x1800,
-	0x7250, 0x7070, 0x9202, 0x1a04, 0xab9c, 0x080c, 0xd282, 0x0904,
-	0xab95, 0x6720, 0x9786, 0x0007, 0x0904, 0xab95, 0x2500, 0x9c06,
-	0x0904, 0xab95, 0x2400, 0x9c06, 0x0904, 0xab95, 0x3e08, 0x9186,
-	0x0002, 0x1148, 0x6010, 0x9005, 0x0130, 0x00b6, 0x2058, 0xb800,
-	0x00be, 0xd0bc, 0x1590, 0x00c6, 0x6043, 0xffff, 0x6000, 0x9086,
-	0x0004, 0x1110, 0x080c, 0x1914, 0x9786, 0x000a, 0x0148, 0x080c,
-	0xba41, 0x1130, 0x00ce, 0x080c, 0xa574, 0x080c, 0x9c06, 0x00e8,
-	0x6014, 0x2048, 0x080c, 0xb82c, 0x01a8, 0x9786, 0x0003, 0x1530,
-	0xa867, 0x0103, 0xa87c, 0xd0cc, 0x0130, 0x0096, 0xa878, 0x2048,
-	0x080c, 0x0fd4, 0x009e, 0xab7a, 0xa877, 0x0000, 0x080c, 0x6983,
-	0x080c, 0xba1b, 0x080c, 0x9c06, 0x00ce, 0x9ce0, 0x001c, 0x7064,
-	0x9c02, 0x1210, 0x0804, 0xab40, 0x012e, 0x000e, 0x002e, 0x004e,
-	0x005e, 0x007e, 0x00ce, 0x009e, 0x00ee, 0x0005, 0x9786, 0x0006,
-	0x1118, 0x080c, 0xd1fc, 0x0c30, 0x9786, 0x000a, 0x0998, 0x0880,
-	0x220c, 0x2304, 0x9106, 0x1130, 0x8210, 0x8318, 0x1f04, 0xabb0,
-	0x9006, 0x0005, 0x2304, 0x9102, 0x0218, 0x2001, 0x0001, 0x0008,
-	0x9006, 0x918d, 0x0001, 0x0005, 0x0136, 0x01c6, 0x0016, 0x8906,
-	0x8006, 0x8007, 0x908c, 0x003f, 0x21e0, 0x9084, 0xffc0, 0x9300,
-	0x2098, 0x3518, 0x20a9, 0x0001, 0x220c, 0x4002, 0x910e, 0x1140,
-	0x8210, 0x8319, 0x1dc8, 0x9006, 0x001e, 0x01ce, 0x013e, 0x0005,
-	0x220c, 0x9102, 0x0218, 0x2001, 0x0001, 0x0010, 0x2001, 0x0000,
-	0x918d, 0x0001, 0x001e, 0x01ce, 0x013e, 0x0005, 0x6004, 0x908a,
-	0x0053, 0x1a0c, 0x0d65, 0x080c, 0xba30, 0x0120, 0x080c, 0xba41,
-	0x0158, 0x0028, 0x080c, 0x3034, 0x080c, 0xba41, 0x0128, 0x080c,
-	0x884c, 0x080c, 0x9bcc, 0x0005, 0x080c, 0xa574, 0x0cc0, 0x9182,
-	0x0057, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xac26,
-	0xac26, 0xac26, 0xac26, 0xac26, 0xac26, 0xac26, 0xac26, 0xac26,
-	0xac26, 0xac26, 0xac28, 0xac28, 0xac28, 0xac28, 0xac26, 0xac26,
-	0xac26, 0xac28, 0xac26, 0xac26, 0xac26, 0xac26, 0x080c, 0x0d65,
-	0x600b, 0xffff, 0x6003, 0x000f, 0x6106, 0x0126, 0x2091, 0x8000,
-	0x080c, 0xbf5e, 0x2009, 0x8000, 0x080c, 0x84a9, 0x012e, 0x0005,
-	0x9186, 0x0013, 0x1128, 0x6004, 0x9082, 0x0040, 0x0804, 0xacad,
-	0x9186, 0x0027, 0x1520, 0x080c, 0x884c, 0x080c, 0x3003, 0x080c,
-	0xbf5b, 0x0096, 0x6114, 0x2148, 0x080c, 0xb82c, 0x0198, 0x080c,
-	0xba41, 0x1118, 0x080c, 0xa574, 0x0068, 0xa867, 0x0103, 0xa87b,
-	0x0029, 0xa877, 0x0000, 0xa97c, 0xc1c5, 0xa97e, 0x080c, 0x698f,
-	0x080c, 0xba1b, 0x009e, 0x080c, 0x9bcc, 0x0804, 0x890e, 0x9186,
-	0x0014, 0x1120, 0x6004, 0x9082, 0x0040, 0x0018, 0x080c, 0x0d65,
-	0x0005, 0x0002, 0xac8b, 0xac89, 0xac89, 0xac89, 0xac89, 0xac89,
-	0xac89, 0xac89, 0xac89, 0xac89, 0xac89, 0xaca4, 0xaca4, 0xaca4,
-	0xaca4, 0xac89, 0xaca4, 0xac89, 0xaca4, 0xac89, 0xac89, 0xac89,
-	0xac89, 0x080c, 0x0d65, 0x080c, 0x884c, 0x0096, 0x6114, 0x2148,
-	0x080c, 0xb82c, 0x0168, 0xa867, 0x0103, 0xa87b, 0x0006, 0xa877,
-	0x0000, 0xa880, 0xc0ec, 0xa882, 0x080c, 0x698f, 0x080c, 0xba1b,
-	0x009e, 0x080c, 0x9bcc, 0x0005, 0x080c, 0x884c, 0x080c, 0xba41,
-	0x090c, 0xa574, 0x080c, 0x9bcc, 0x0005, 0x0002, 0xacc7, 0xacc5,
-	0xacc5, 0xacc5, 0xacc5, 0xacc5, 0xacc5, 0xacc5, 0xacc5, 0xacc5,
-	0xacc5, 0xacc9, 0xacc9, 0xacc9, 0xacc9, 0xacc5, 0xaccb, 0xacc5,
-	0xacc9, 0xacc5, 0xacc5, 0xacc5, 0xacc5, 0x080c, 0x0d65, 0x080c,
-	0x0d65, 0x080c, 0x0d65, 0x080c, 0x9bcc, 0x0804, 0x890e, 0x9182,
-	0x0057, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xacee,
-	0xacee, 0xacee, 0xacee, 0xacee, 0xad27, 0xae16, 0xacee, 0xae22,
-	0xacee, 0xacee, 0xacee, 0xacee, 0xacee, 0xacee, 0xacee, 0xacee,
-	0xacee, 0xacee, 0xae22, 0xacf0, 0xacee, 0xae20, 0x080c, 0x0d65,
-	0x00b6, 0x0096, 0x6114, 0x2148, 0x6010, 0x2058, 0xb800, 0xd0bc,
-	0x1508, 0xa87b, 0x0000, 0xa867, 0x0103, 0xa877, 0x0000, 0xa87c,
-	0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115, 0x190c, 0xaea7, 0x080c,
-	0x67a5, 0x6210, 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e,
-	0xb8c0, 0x9005, 0x0110, 0x080c, 0x6394, 0x080c, 0x9bcc, 0x009e,
-	0x00be, 0x0005, 0xa87c, 0xd0ac, 0x09e0, 0xa838, 0xa934, 0x9105,
-	0x09c0, 0xa880, 0xd0bc, 0x19a8, 0x080c, 0xbb71, 0x0c80, 0x00b6,
-	0x0096, 0x6114, 0x2148, 0x601c, 0xd0fc, 0x1110, 0x7644, 0x0008,
-	0x9036, 0x96b4, 0x0fff, 0x86ff, 0x1590, 0x6010, 0x2058, 0xb800,
-	0xd0bc, 0x1904, 0xae05, 0xa87b, 0x0000, 0xa867, 0x0103, 0xae76,
-	0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115, 0x190c, 0xaea7,
-	0x080c, 0x67a5, 0x6210, 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211,
-	0xba3e, 0xb8c0, 0x9005, 0x0110, 0x080c, 0x6394, 0x601c, 0xd0fc,
-	0x1148, 0x7044, 0xd0e4, 0x1904, 0xade9, 0x080c, 0x9bcc, 0x009e,
-	0x00be, 0x0005, 0x2009, 0x0211, 0x210c, 0x080c, 0x0d65, 0x968c,
-	0x0c00, 0x0150, 0x6010, 0x2058, 0xb800, 0xd0bc, 0x1904, 0xaded,
-	0x7348, 0xab92, 0x734c, 0xab8e, 0x968c, 0x00ff, 0x9186, 0x0002,
-	0x0508, 0x9186, 0x0028, 0x1118, 0xa87b, 0x001c, 0x00e8, 0xd6dc,
-	0x01a0, 0xa87b, 0x0015, 0xa87c, 0xd0ac, 0x0170, 0xa938, 0xaa34,
-	0x2100, 0x9205, 0x0148, 0x7048, 0x9106, 0x1118, 0x704c, 0x9206,
-	0x0118, 0xa992, 0xaa8e, 0xc6dc, 0x0038, 0xd6d4, 0x0118, 0xa87b,
-	0x0007, 0x0010, 0xa87b, 0x0000, 0xa867, 0x0103, 0xae76, 0x901e,
-	0xd6c4, 0x01d8, 0x9686, 0x0100, 0x1130, 0x7064, 0x9005, 0x1118,
-	0xc6c4, 0x0804, 0xad33, 0x735c, 0xab86, 0x83ff, 0x0170, 0x938a,
-	0x0009, 0x0210, 0x2019, 0x0008, 0x0036, 0x2308, 0x2019, 0x0018,
-	0x2011, 0x0025, 0x080c, 0xb3ff, 0x003e, 0xd6cc, 0x0904, 0xad48,
-	0x7154, 0xa98a, 0x81ff, 0x0904, 0xad48, 0x9192, 0x0021, 0x1278,
-	0x8304, 0x9098, 0x0018, 0x2011, 0x0029, 0x080c, 0xb3ff, 0x2011,
-	0x0205, 0x2013, 0x0000, 0x080c, 0xbeeb, 0x0804, 0xad48, 0xa868,
-	0xd0fc, 0x0120, 0x2009, 0x0020, 0xa98a, 0x0c50, 0x00a6, 0x2950,
-	0x080c, 0xb39e, 0x00ae, 0x080c, 0xbeeb, 0x080c, 0xb3ef, 0x0804,
-	0xad4a, 0x080c, 0xbb34, 0x0804, 0xad5f, 0xa87c, 0xd0ac, 0x0904,
-	0xad70, 0xa880, 0xd0bc, 0x1904, 0xad70, 0x7348, 0xa838, 0x9306,
-	0x11c8, 0x734c, 0xa834, 0x931e, 0x0904, 0xad70, 0xd6d4, 0x0190,
-	0xab38, 0x9305, 0x0904, 0xad70, 0x0068, 0xa87c, 0xd0ac, 0x0904,
-	0xad3b, 0xa838, 0xa934, 0x9105, 0x0904, 0xad3b, 0xa880, 0xd0bc,
-	0x1904, 0xad3b, 0x080c, 0xbb71, 0x0804, 0xad5f, 0x00f6, 0x2079,
-	0x026c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x00fe, 0x0021, 0x0005,
-	0x0011, 0x0005, 0x0005, 0x0096, 0x6003, 0x0002, 0x6007, 0x0043,
-	0x6014, 0x2048, 0xa87c, 0xd0ac, 0x0128, 0x009e, 0x0005, 0x2130,
-	0x2228, 0x0058, 0x2400, 0xa9ac, 0x910a, 0x2300, 0xaab0, 0x9213,
-	0x2600, 0x9102, 0x2500, 0x9203, 0x0e90, 0xac46, 0xab4a, 0xae36,
-	0xad3a, 0x6044, 0xd0fc, 0x190c, 0x98d6, 0x604b, 0x0000, 0x080c,
-	0x1ad2, 0x1118, 0x6144, 0x080c, 0x84d5, 0x009e, 0x0005, 0x9182,
-	0x0057, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xae6e,
-	0xae6e, 0xae6e, 0xae6e, 0xae6e, 0xae6e, 0xae6e, 0xae6e, 0xae6e,
-	0xae6e, 0xae70, 0xae6e, 0xae6e, 0xae6e, 0xae6e, 0xae81, 0xae6e,
-	0xae6e, 0xae6e, 0xae6e, 0xaea5, 0xae6e, 0xae6e, 0x080c, 0x0d65,
-	0x6004, 0x9086, 0x0040, 0x1110, 0x080c, 0x884c, 0x2019, 0x0001,
-	0x080c, 0x926b, 0x6003, 0x0002, 0x080c, 0xbf63, 0x080c, 0x88a9,
-	0x0005, 0x6004, 0x9086, 0x0040, 0x1110, 0x080c, 0x884c, 0x2019,
-	0x0001, 0x080c, 0x926b, 0x080c, 0x88a9, 0x080c, 0x3003, 0x080c,
-	0xbf5b, 0x0096, 0x6114, 0x2148, 0x080c, 0xb82c, 0x0150, 0xa867,
-	0x0103, 0xa87b, 0x0029, 0xa877, 0x0000, 0x080c, 0x698f, 0x080c,
-	0xba1b, 0x009e, 0x080c, 0x9bcc, 0x0005, 0x080c, 0x0d65, 0xa87b,
-	0x0015, 0xd1fc, 0x0180, 0xa87b, 0x0007, 0x8002, 0x8000, 0x810a,
-	0x9189, 0x0000, 0x0006, 0x0016, 0x2009, 0x1a48, 0x2104, 0x8000,
-	0x200a, 0x001e, 0x000e, 0xa992, 0xa88e, 0x0005, 0x9182, 0x0057,
-	0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xaedd, 0xaedd,
-	0xaedd, 0xaedd, 0xaedd, 0xaedf, 0xaedd, 0xaedd, 0xaf9c, 0xaedd,
-	0xaedd, 0xaedd, 0xaedd, 0xaedd, 0xaedd, 0xaedd, 0xaedd, 0xaedd,
-	0xaedd, 0xb0e0, 0xaedd, 0xb0ea, 0xaedd, 0x080c, 0x0d65, 0x601c,
-	0xd0bc, 0x0178, 0xd084, 0x0168, 0xd0f4, 0x0120, 0xc084, 0x601e,
-	0x0804, 0xaccf, 0x6114, 0x0096, 0x2148, 0xa87c, 0xc0e5, 0xa87e,
-	0x009e, 0x0076, 0x00a6, 0x00e6, 0x0096, 0x2071, 0x0260, 0x6114,
-	0x2150, 0x601c, 0xd0fc, 0x1110, 0x7644, 0x0008, 0x9036, 0xb676,
-	0x96b4, 0x0fff, 0xb77c, 0xc7e5, 0xb77e, 0x6210, 0x00b6, 0x2258,
-	0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, 0x00be, 0x86ff, 0x0904,
-	0xaf95, 0x9694, 0xff00, 0x9284, 0x0c00, 0x0120, 0x7048, 0xb092,
-	0x704c, 0xb08e, 0x9284, 0x0300, 0x0904, 0xaf95, 0x9686, 0x0100,
-	0x1130, 0x7064, 0x9005, 0x1118, 0xc6c4, 0xb676, 0x0c38, 0x080c,
-	0x1022, 0x090c, 0x0d65, 0x2900, 0xb07a, 0xb77c, 0x97bd, 0x0200,
-	0xb77e, 0xa867, 0x0103, 0xb068, 0xa86a, 0xb06c, 0xa86e, 0xb070,
-	0xa872, 0x7044, 0x9084, 0xf000, 0x9635, 0xae76, 0x968c, 0x0c00,
-	0x0120, 0x7348, 0xab92, 0x734c, 0xab8e, 0x968c, 0x00ff, 0x9186,
-	0x0002, 0x0180, 0x9186, 0x0028, 0x1118, 0xa87b, 0x001c, 0x0060,
-	0xd6dc, 0x0118, 0xa87b, 0x0015, 0x0038, 0xd6d4, 0x0118, 0xa87b,
-	0x0007, 0x0010, 0xa87b, 0x0000, 0xaf7e, 0xb080, 0xa882, 0xb084,
-	0xa886, 0x901e, 0xd6c4, 0x0190, 0x735c, 0xab86, 0x83ff, 0x0170,
-	0x938a, 0x0009, 0x0210, 0x2019, 0x0008, 0x0036, 0x2308, 0x2019,
-	0x0018, 0x2011, 0x0025, 0x080c, 0xb3ff, 0x003e, 0xd6cc, 0x01e8,
-	0x7154, 0xa98a, 0x81ff, 0x01c8, 0x9192, 0x0021, 0x1260, 0x8304,
-	0x9098, 0x0018, 0x2011, 0x0029, 0x080c, 0xb3ff, 0x2011, 0x0205,
-	0x2013, 0x0000, 0x0050, 0xb068, 0xd0fc, 0x0120, 0x2009, 0x0020,
-	0xa98a, 0x0c68, 0x2950, 0x080c, 0xb39e, 0x080c, 0x18f2, 0x009e,
-	0x00ee, 0x00ae, 0x007e, 0x0005, 0x2001, 0x1959, 0x2004, 0x604a,
-	0x0096, 0x6114, 0x2148, 0xa83c, 0xa940, 0x9105, 0x1118, 0xa87c,
-	0xc0dc, 0xa87e, 0x6003, 0x0002, 0x080c, 0xbf6c, 0x0904, 0xb0db,
-	0x604b, 0x0000, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc,
-	0x1500, 0xd1cc, 0x0904, 0xb09a, 0xa978, 0xa868, 0xd0fc, 0x0904,
-	0xb05b, 0x0016, 0xa87c, 0x0006, 0xa880, 0x0006, 0x00a6, 0x2150,
-	0xb174, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x0904, 0xb029, 0x9086,
-	0x0028, 0x1904, 0xb015, 0xa87b, 0x001c, 0xb07b, 0x001c, 0x0804,
-	0xb031, 0x6024, 0xd0f4, 0x11d0, 0xa838, 0xaa34, 0x9205, 0x09c8,
-	0xa838, 0xaa90, 0x9206, 0x1120, 0xa88c, 0xaa34, 0x9206, 0x0988,
-	0x6024, 0xd0d4, 0x1148, 0xa9ac, 0xa834, 0x9102, 0x603a, 0xa9b0,
-	0xa838, 0x9103, 0x603e, 0x6024, 0xc0f5, 0x6026, 0x6010, 0x00b6,
-	0x2058, 0xb83c, 0x8000, 0xb83e, 0x00be, 0x601c, 0xc0fc, 0x601e,
-	0x9006, 0xa876, 0xa892, 0xa88e, 0xa87c, 0xc0e4, 0xa87e, 0xd0cc,
-	0x0140, 0xc0cc, 0xa87e, 0x0096, 0xa878, 0x2048, 0x080c, 0x0fd4,
-	0x009e, 0x080c, 0xbb71, 0x0804, 0xb0db, 0xd1dc, 0x0158, 0xa87b,
-	0x0015, 0xb07b, 0x0015, 0x080c, 0xbe0e, 0x0118, 0xb174, 0xc1dc,
-	0xb176, 0x0078, 0xd1d4, 0x0128, 0xa87b, 0x0007, 0xb07b, 0x0007,
-	0x0040, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115, 0x190c,
-	0xaea7, 0xa87c, 0xb07e, 0xa890, 0xb092, 0xa88c, 0xb08e, 0xa860,
-	0x20e8, 0xa85c, 0x9080, 0x0019, 0x20a0, 0x20a9, 0x0020, 0x8a06,
-	0x8006, 0x8007, 0x9094, 0x003f, 0x22e0, 0x9084, 0xffc0, 0x9080,
-	0x0019, 0x2098, 0x4003, 0x00ae, 0x000e, 0xa882, 0x000e, 0xa87e,
-	0x080c, 0xbeeb, 0x001e, 0xa874, 0x0006, 0x2148, 0x080c, 0x0fd4,
-	0x001e, 0x0804, 0xb0c7, 0x0016, 0x00a6, 0x2150, 0xb174, 0x9184,
-	0x00ff, 0x90b6, 0x0002, 0x01e0, 0x9086, 0x0028, 0x1128, 0xa87b,
-	0x001c, 0xb07b, 0x001c, 0x00e0, 0xd1dc, 0x0158, 0xa87b, 0x0015,
-	0xb07b, 0x0015, 0x080c, 0xbe0e, 0x0118, 0xb174, 0xc1dc, 0xb176,
-	0x0078, 0xd1d4, 0x0128, 0xa87b, 0x0007, 0xb07b, 0x0007, 0x0040,
-	0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115, 0x190c, 0xaea7,
-	0xa890, 0xb092, 0xa88c, 0xb08e, 0xa87c, 0xb07e, 0x00ae, 0x080c,
-	0x0fd4, 0x009e, 0x080c, 0xbeeb, 0xa974, 0x0016, 0x080c, 0xb3ef,
-	0x001e, 0x0468, 0xa867, 0x0103, 0xa974, 0x9184, 0x00ff, 0x90b6,
-	0x0002, 0x01b0, 0x9086, 0x0028, 0x1118, 0xa87b, 0x001c, 0x00d0,
-	0xd1dc, 0x0148, 0xa87b, 0x0015, 0x080c, 0xbe0e, 0x0118, 0xa974,
-	0xc1dc, 0xa976, 0x0078, 0xd1d4, 0x0118, 0xa87b, 0x0007, 0x0050,
-	0xa87b, 0x0000, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115,
-	0x190c, 0xaea7, 0xa974, 0x0016, 0x080c, 0x67a5, 0x001e, 0x6010,
-	0x00b6, 0x2058, 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, 0xb8c0,
-	0x9005, 0x0120, 0x0016, 0x080c, 0x6394, 0x001e, 0x00be, 0xd1e4,
-	0x1120, 0x080c, 0x9bcc, 0x009e, 0x0005, 0x080c, 0xbb34, 0x0cd8,
-	0x6114, 0x0096, 0x2148, 0xa97c, 0x080c, 0xbf6c, 0x190c, 0x1900,
-	0x009e, 0x0005, 0x0096, 0x6114, 0x2148, 0xa83c, 0xa940, 0x9105,
-	0x01e8, 0xa877, 0x0000, 0xa87b, 0x0000, 0xa867, 0x0103, 0x00b6,
-	0x6010, 0x2058, 0xa834, 0xa938, 0x9115, 0x11a0, 0x080c, 0x67a5,
-	0xba3c, 0x8211, 0x0208, 0xba3e, 0xb8c0, 0x9005, 0x0110, 0x080c,
-	0x6394, 0x080c, 0x9bcc, 0x00be, 0x009e, 0x0005, 0xa87c, 0xc0dc,
-	0xa87e, 0x08f8, 0xb800, 0xd0bc, 0x1120, 0xa834, 0x080c, 0xaea7,
-	0x0c28, 0xa880, 0xd0bc, 0x1dc8, 0x080c, 0xbb71, 0x0c60, 0x080c,
-	0x884c, 0x0010, 0x080c, 0x88a9, 0x601c, 0xd084, 0x0110, 0x080c,
-	0x1914, 0x080c, 0xb82c, 0x01f0, 0x0096, 0x6114, 0x2148, 0x080c,
-	0xba41, 0x1118, 0x080c, 0xa574, 0x00a0, 0xa867, 0x0103, 0x2009,
-	0x180c, 0x210c, 0xd18c, 0x1198, 0xd184, 0x1170, 0x6108, 0xa97a,
-	0x918e, 0x0029, 0x1110, 0x080c, 0xd4f8, 0xa877, 0x0000, 0x080c,
-	0x698f, 0x009e, 0x0804, 0x9c06, 0xa87b, 0x0004, 0x0cb0, 0xa87b,
-	0x0004, 0x0c98, 0x9182, 0x0057, 0x1220, 0x9182, 0x0040, 0x0208,
-	0x000a, 0x0005, 0xb171, 0xb171, 0xb171, 0xb171, 0xb171, 0xb173,
-	0xb171, 0xb171, 0xb171, 0xb171, 0xb171, 0xb171, 0xb171, 0xb171,
-	0xb171, 0xb171, 0xb171, 0xb171, 0xb171, 0xb171, 0xb197, 0xb171,
-	0xb171, 0x080c, 0x0d65, 0x080c, 0x538e, 0x01f8, 0x6014, 0x7144,
-	0x918c, 0x0fff, 0x9016, 0xd1c4, 0x0118, 0x7264, 0x9294, 0x00ff,
-	0x0096, 0x904d, 0x0188, 0xa87b, 0x0000, 0xa864, 0x9086, 0x0139,
-	0x0128, 0xa867, 0x0103, 0xa976, 0xaa96, 0x0030, 0xa897, 0x4000,
-	0xa99a, 0xaa9e, 0x080c, 0x698f, 0x009e, 0x0804, 0x9bcc, 0x080c,
-	0x538e, 0x0dd8, 0x6014, 0x900e, 0x9016, 0x0c10, 0x9182, 0x0085,
-	0x0002, 0xb1b0, 0xb1ae, 0xb1ae, 0xb1bc, 0xb1ae, 0xb1ae, 0xb1ae,
-	0xb1ae, 0xb1ae, 0xb1ae, 0xb1ae, 0xb1ae, 0xb1ae, 0x080c, 0x0d65,
-	0x6003, 0x0001, 0x6106, 0x0126, 0x2091, 0x8000, 0x2009, 0x8020,
-	0x080c, 0x84a9, 0x012e, 0x0005, 0x0026, 0x0056, 0x00d6, 0x00e6,
-	0x2071, 0x0260, 0x7224, 0x6216, 0x7220, 0x080c, 0xb81a, 0x01a0,
-	0x2268, 0x6800, 0x9086, 0x0000, 0x0178, 0x6010, 0x6d10, 0x952e,
-	0x1158, 0x00c6, 0x2d60, 0x080c, 0xb42a, 0x00ce, 0x0128, 0x6803,
-	0x0002, 0x6007, 0x0086, 0x0010, 0x6007, 0x0087, 0x6003, 0x0001,
-	0x2009, 0x8020, 0x080c, 0x84a9, 0x9280, 0x0004, 0x00b6, 0x2058,
-	0xb800, 0x00be, 0xd0bc, 0x0140, 0x6824, 0xd0ec, 0x0128, 0x00c6,
-	0x2260, 0x080c, 0xbb71, 0x00ce, 0x00ee, 0x00de, 0x005e, 0x002e,
-	0x0005, 0x9186, 0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c,
-	0x0d65, 0x908a, 0x0092, 0x1a0c, 0x0d65, 0x9082, 0x0085, 0x00e2,
-	0x9186, 0x0027, 0x0120, 0x9186, 0x0014, 0x190c, 0x0d65, 0x080c,
-	0x884c, 0x0096, 0x6014, 0x2048, 0x080c, 0xb82c, 0x0140, 0xa867,
-	0x0103, 0xa877, 0x0000, 0xa87b, 0x0029, 0x080c, 0x698f, 0x009e,
-	0x080c, 0x9c06, 0x0804, 0x890e, 0xb231, 0xb233, 0xb233, 0xb231,
-	0xb231, 0xb231, 0xb231, 0xb231, 0xb231, 0xb231, 0xb231, 0xb231,
-	0xb231, 0x080c, 0x0d65, 0x080c, 0x9c06, 0x0005, 0x9186, 0x0013,
-	0x1130, 0x6004, 0x9082, 0x0085, 0x2008, 0x0804, 0xb282, 0x9186,
-	0x0027, 0x1558, 0x080c, 0x884c, 0x080c, 0x3003, 0x080c, 0xbf5b,
-	0x0096, 0x6014, 0x2048, 0x080c, 0xb82c, 0x0150, 0xa867, 0x0103,
-	0xa877, 0x0000, 0xa87b, 0x0029, 0x080c, 0x698f, 0x080c, 0xba1b,
-	0x009e, 0x080c, 0x9bcc, 0x0005, 0x9186, 0x0089, 0x0118, 0x9186,
-	0x008a, 0x1140, 0x080c, 0x9a9c, 0x0128, 0x9086, 0x000c, 0x0904,
-	0xb2ba, 0x0000, 0x080c, 0x9c87, 0x0c70, 0x9186, 0x0014, 0x1d60,
-	0x080c, 0x884c, 0x0096, 0x6014, 0x2048, 0x080c, 0xb82c, 0x0d00,
-	0xa867, 0x0103, 0xa877, 0x0000, 0xa87b, 0x0006, 0xa880, 0xc0ec,
-	0xa882, 0x0890, 0x0002, 0xb292, 0xb290, 0xb290, 0xb290, 0xb290,
-	0xb290, 0xb2a6, 0xb290, 0xb290, 0xb290, 0xb290, 0xb290, 0xb290,
-	0x080c, 0x0d65, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039,
-	0x0118, 0x9186, 0x0035, 0x1118, 0x2001, 0x1957, 0x0010, 0x2001,
-	0x1958, 0x2004, 0x601a, 0x6003, 0x000c, 0x0005, 0x6034, 0x908c,
-	0xff00, 0x810f, 0x9186, 0x0039, 0x0118, 0x9186, 0x0035, 0x1118,
-	0x2001, 0x1957, 0x0010, 0x2001, 0x1958, 0x2004, 0x601a, 0x6003,
-	0x000e, 0x0005, 0x9182, 0x0092, 0x1220, 0x9182, 0x0085, 0x0208,
-	0x0012, 0x0804, 0x9c87, 0xb2d0, 0xb2d0, 0xb2d0, 0xb2d0, 0xb2d2,
-	0xb31f, 0xb2d0, 0xb2d0, 0xb2d0, 0xb2d0, 0xb2d0, 0xb2d0, 0xb2d0,
-	0x080c, 0x0d65, 0x0096, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be,
-	0xd0bc, 0x0168, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039,
-	0x0118, 0x9186, 0x0035, 0x1118, 0x009e, 0x0804, 0xb333, 0x080c,
-	0xb82c, 0x1118, 0x080c, 0xba1b, 0x0068, 0x6014, 0x2048, 0x080c,
-	0xbf72, 0x1110, 0x080c, 0xba1b, 0xa867, 0x0103, 0x080c, 0xbf26,
-	0x080c, 0x698f, 0x00d6, 0x2c68, 0x080c, 0x9b76, 0x01d0, 0x6003,
-	0x0001, 0x6007, 0x001e, 0x600b, 0xffff, 0x2009, 0x026e, 0x210c,
-	0x613a, 0x2009, 0x026f, 0x210c, 0x613e, 0x6910, 0x6112, 0x080c,
-	0xbcc0, 0x695c, 0x615e, 0x6023, 0x0001, 0x2009, 0x8020, 0x080c,
-	0x84a9, 0x2d60, 0x00de, 0x080c, 0x9bcc, 0x009e, 0x0005, 0x6010,
-	0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x05a0, 0x6034, 0x908c,
-	0xff00, 0x810f, 0x9186, 0x0035, 0x0130, 0x9186, 0x001e, 0x0118,
-	0x9186, 0x0039, 0x1538, 0x00d6, 0x2c68, 0x080c, 0xbebe, 0x11f0,
-	0x080c, 0x9b76, 0x01d8, 0x6106, 0x6003, 0x0001, 0x6023, 0x0001,
-	0x6910, 0x6112, 0x692c, 0x612e, 0x6930, 0x6132, 0x6934, 0x918c,
-	0x00ff, 0x6136, 0x6938, 0x613a, 0x693c, 0x613e, 0x695c, 0x615e,
-	0x080c, 0xbcc0, 0x2009, 0x8020, 0x080c, 0x84a9, 0x2d60, 0x00de,
-	0x0804, 0x9bcc, 0x0096, 0x6014, 0x2048, 0x080c, 0xb82c, 0x01c8,
-	0xa867, 0x0103, 0xa880, 0xd0b4, 0x0128, 0xc0ec, 0xa882, 0xa87b,
-	0x0006, 0x0048, 0xd0bc, 0x0118, 0xa87b, 0x0002, 0x0020, 0xa87b,
-	0x0005, 0x080c, 0xbb30, 0xa877, 0x0000, 0x080c, 0x698f, 0x080c,
-	0xba1b, 0x009e, 0x0804, 0x9bcc, 0x0016, 0x0096, 0x6014, 0x2048,
-	0x080c, 0xb82c, 0x0140, 0xa867, 0x0103, 0xa87b, 0x0028, 0xa877,
-	0x0000, 0x080c, 0x698f, 0x009e, 0x001e, 0x9186, 0x0013, 0x0158,
-	0x9186, 0x0014, 0x0130, 0x9186, 0x0027, 0x0118, 0x080c, 0x9c87,
-	0x0020, 0x080c, 0x884c, 0x080c, 0x9c06, 0x0005, 0x0056, 0x0066,
-	0x0096, 0x00a6, 0x2029, 0x0001, 0x9182, 0x0101, 0x1208, 0x0010,
-	0x2009, 0x0100, 0x2130, 0x8304, 0x9098, 0x0018, 0x2009, 0x0020,
-	0x2011, 0x0029, 0x080c, 0xb3ff, 0x96b2, 0x0020, 0xb004, 0x904d,
-	0x0110, 0x080c, 0x0fd4, 0x080c, 0x1022, 0x0520, 0x8528, 0xa867,
-	0x0110, 0xa86b, 0x0000, 0x2920, 0xb406, 0x968a, 0x003d, 0x1228,
-	0x2608, 0x2011, 0x001b, 0x0499, 0x00a8, 0x96b2, 0x003c, 0x2009,
-	0x003c, 0x2950, 0x2011, 0x001b, 0x0451, 0x0c28, 0x2001, 0x0205,
-	0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad, 0x0003, 0xb566, 0x95ac,
-	0x0000, 0x0048, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f,
-	0x95ad, 0x0003, 0xb566, 0x009e, 0x006e, 0x005e, 0x0005, 0x00a6,
-	0x89ff, 0x0158, 0xa804, 0x9055, 0x0130, 0xa807, 0x0000, 0x080c,
-	0x698f, 0x2a48, 0x0cb8, 0x080c, 0x698f, 0x00ae, 0x0005, 0x00f6,
-	0x2079, 0x0200, 0x7814, 0x9085, 0x0080, 0x7816, 0xd184, 0x0108,
-	0x8108, 0x810c, 0x20a9, 0x0001, 0xa860, 0x20e8, 0xa85c, 0x9200,
-	0x20a0, 0x20e1, 0x0000, 0x2300, 0x9e00, 0x2098, 0x4003, 0x8318,
-	0x9386, 0x0020, 0x1148, 0x2018, 0x2300, 0x9e00, 0x2098, 0x7814,
-	0x8000, 0x9085, 0x0080, 0x7816, 0x8109, 0x1d80, 0x7817, 0x0000,
-	0x00fe, 0x0005, 0x0066, 0x0126, 0x2091, 0x8000, 0x2031, 0x0001,
-	0x6020, 0x9084, 0x000f, 0x0083, 0x012e, 0x006e, 0x0005, 0x0126,
-	0x2091, 0x8000, 0x0066, 0x2031, 0x0000, 0x6020, 0x9084, 0x000f,
-	0x001b, 0x006e, 0x012e, 0x0005, 0xb47c, 0xb47c, 0xb477, 0xb4a0,
-	0xb454, 0xb477, 0xb456, 0xb477, 0xb454, 0xb454, 0xb477, 0xb477,
-	0xb477, 0xb454, 0xb454, 0xb454, 0x080c, 0x0d65, 0x6010, 0x9080,
-	0x0000, 0x2004, 0xd0bc, 0x190c, 0xb4a0, 0x0036, 0x6014, 0x0096,
-	0x2048, 0xa880, 0x009e, 0xd0cc, 0x0118, 0x2019, 0x000c, 0x0038,
-	0xd094, 0x0118, 0x2019, 0x000d, 0x0010, 0x2019, 0x0010, 0x080c,
-	0xcdd9, 0x6023, 0x0006, 0x6003, 0x0007, 0x003e, 0x0005, 0x9006,
-	0x0005, 0x9085, 0x0001, 0x0005, 0x0096, 0x86ff, 0x11e8, 0x6014,
-	0x2048, 0x080c, 0xb82c, 0x01d0, 0x6043, 0xffff, 0xa864, 0x9086,
-	0x0139, 0x1128, 0xa87b, 0x0005, 0xa883, 0x0000, 0x0028, 0x900e,
-	0x2001, 0x0005, 0x080c, 0x6bac, 0x080c, 0xbb30, 0x080c, 0x6983,
-	0x080c, 0x9c06, 0x9085, 0x0001, 0x009e, 0x0005, 0x9006, 0x0ce0,
-	0x080c, 0x98ad, 0x080c, 0xbf80, 0x6000, 0x908a, 0x0016, 0x1a0c,
-	0x0d65, 0x002b, 0x0106, 0x080c, 0x98c9, 0x010e, 0x0005, 0xb4bf,
-	0xb4ed, 0xb4c1, 0xb514, 0xb4e8, 0xb4bf, 0xb477, 0xb47c, 0xb47c,
-	0xb477, 0xb477, 0xb477, 0xb477, 0xb477, 0xb477, 0xb477, 0x080c,
-	0x0d65, 0x86ff, 0x1510, 0x6020, 0x9086, 0x0006, 0x01f0, 0x0096,
-	0x6014, 0x2048, 0x080c, 0xb82c, 0x0158, 0xa87c, 0xd0cc, 0x0130,
-	0x0096, 0xa878, 0x2048, 0x080c, 0x0fd4, 0x009e, 0x080c, 0xbb30,
-	0x009e, 0x080c, 0xbf00, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023,
-	0x0002, 0x2009, 0x8020, 0x080c, 0x848b, 0x9085, 0x0001, 0x0005,
-	0x0066, 0x080c, 0x1914, 0x006e, 0x08a0, 0x00e6, 0x2071, 0x19b8,
-	0x7030, 0x9c06, 0x1120, 0x080c, 0x91eb, 0x00ee, 0x0850, 0x6020,
-	0x9084, 0x000f, 0x9086, 0x0006, 0x1150, 0x0086, 0x0096, 0x2049,
-	0x0001, 0x2c40, 0x080c, 0x9367, 0x009e, 0x008e, 0x0040, 0x0066,
-	0x080c, 0x90e7, 0x190c, 0x0d65, 0x080c, 0x90f5, 0x006e, 0x00ee,
-	0x1904, 0xb4c1, 0x0804, 0xb477, 0x0036, 0x00e6, 0x2071, 0x19b8,
-	0x704c, 0x9c06, 0x1138, 0x901e, 0x080c, 0x926b, 0x00ee, 0x003e,
-	0x0804, 0xb4c1, 0x080c, 0x949d, 0x00ee, 0x003e, 0x1904, 0xb4c1,
-	0x0804, 0xb477, 0x00c6, 0x0066, 0x6020, 0x9084, 0x000f, 0x001b,
-	0x006e, 0x00ce, 0x0005, 0xb54a, 0xb60c, 0xb773, 0xb552, 0x9c06,
-	0xb54a, 0xcdcb, 0xbf68, 0xb60c, 0xb543, 0xb7f2, 0xb543, 0xb543,
-	0xb543, 0xb543, 0xb543, 0x080c, 0x0d65, 0x080c, 0xba41, 0x1110,
-	0x080c, 0xa574, 0x0005, 0x080c, 0x884c, 0x0804, 0x9bcc, 0x601b,
-	0x0001, 0x0005, 0x080c, 0xb82c, 0x0130, 0x6014, 0x0096, 0x2048,
-	0x2c00, 0xa896, 0x009e, 0x080c, 0x98ad, 0x080c, 0xbf80, 0x6000,
-	0x908a, 0x0016, 0x1a0c, 0x0d65, 0x0013, 0x0804, 0x98c9, 0xb577,
-	0xb579, 0xb5a3, 0xb5b7, 0xb5e2, 0xb577, 0xb54a, 0xb54a, 0xb54a,
-	0xb5be, 0xb5be, 0xb577, 0xb577, 0xb577, 0xb577, 0xb5c8, 0x080c,
-	0x0d65, 0x00e6, 0x6014, 0x0096, 0x2048, 0xa880, 0xc0b5, 0xa882,
-	0x009e, 0x2071, 0x19b8, 0x7030, 0x9c06, 0x01d0, 0x0066, 0x080c,
-	0x90e7, 0x190c, 0x0d65, 0x080c, 0x90f5, 0x006e, 0x080c, 0xbf00,
-	0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x2001, 0x1958,
-	0x2004, 0x601a, 0x2009, 0x8020, 0x080c, 0x848b, 0x00ee, 0x0005,
-	0x601b, 0x0001, 0x0cd8, 0x0096, 0x6014, 0x2048, 0xa880, 0xc0b5,
-	0xa882, 0x009e, 0x080c, 0xbf00, 0x6007, 0x0085, 0x6003, 0x000b,
-	0x6023, 0x0002, 0x2009, 0x8020, 0x080c, 0x848b, 0x0005, 0x080c,
-	0x98ad, 0x080c, 0x9a1e, 0x080c, 0x98c9, 0x0c28, 0x0096, 0x601b,
-	0x0001, 0x6014, 0x2048, 0xa880, 0xc0b5, 0xa882, 0x009e, 0x0005,
-	0x080c, 0x538e, 0x01a8, 0x6014, 0x0096, 0x904d, 0x0180, 0xa864,
-	0xa867, 0x0103, 0xa87b, 0x0006, 0x9086, 0x0139, 0x1140, 0xa867,
-	0x0139, 0xa897, 0x4005, 0xa89b, 0x0004, 0x080c, 0x698f, 0x009e,
-	0x0804, 0x9bcc, 0x6014, 0x0096, 0x904d, 0x0508, 0x080c, 0xbf6c,
-	0x01f0, 0x080c, 0x98c9, 0x2001, 0x180f, 0x2004, 0xd0c4, 0x0110,
-	0x009e, 0x0005, 0xa884, 0x009e, 0x8003, 0x800b, 0x810b, 0x9108,
-	0x611a, 0x2001, 0x0037, 0x2c08, 0x080c, 0x159e, 0x6000, 0x9086,
-	0x0004, 0x1120, 0x2009, 0x0048, 0x080c, 0x9c6a, 0x0005, 0x009e,
-	0x080c, 0x1914, 0x0804, 0xb5a3, 0x6000, 0x908a, 0x0016, 0x1a0c,
-	0x0d65, 0x000b, 0x0005, 0xb623, 0xb54f, 0xb625, 0xb623, 0xb625,
-	0xb625, 0xb54b, 0xb623, 0xb545, 0xb545, 0xb623, 0xb623, 0xb623,
-	0xb623, 0xb623, 0xb623, 0x080c, 0x0d65, 0x6010, 0x00b6, 0x2058,
-	0xb804, 0x9084, 0x00ff, 0x00be, 0x908a, 0x000c, 0x1a0c, 0x0d65,
-	0x00b6, 0x0013, 0x00be, 0x0005, 0xb640, 0xb70d, 0xb642, 0xb682,
-	0xb642, 0xb682, 0xb642, 0xb650, 0xb640, 0xb682, 0xb640, 0xb671,
-	0x080c, 0x0d65, 0x6004, 0x908e, 0x0016, 0x05c0, 0x908e, 0x0004,
-	0x05a8, 0x908e, 0x0002, 0x0590, 0x908e, 0x0052, 0x0904, 0xb709,
-	0x6004, 0x080c, 0xba41, 0x0904, 0xb726, 0x908e, 0x0004, 0x1110,
-	0x080c, 0x3034, 0x908e, 0x0021, 0x0904, 0xb72a, 0x908e, 0x0022,
-	0x0904, 0xb76e, 0x908e, 0x003d, 0x0904, 0xb72a, 0x908e, 0x0039,
-	0x0904, 0xb72e, 0x908e, 0x0035, 0x0904, 0xb72e, 0x908e, 0x001e,
-	0x0178, 0x908e, 0x0001, 0x1140, 0x6010, 0x2058, 0xb804, 0x9084,
-	0x00ff, 0x9086, 0x0006, 0x0110, 0x080c, 0x3003, 0x080c, 0xa574,
-	0x0804, 0x9c06, 0x00c6, 0x00d6, 0x6104, 0x9186, 0x0016, 0x0904,
-	0xb6fa, 0x9186, 0x0002, 0x1904, 0xb6cf, 0x2001, 0x1836, 0x2004,
-	0xd08c, 0x11c8, 0x080c, 0x70ac, 0x11b0, 0x080c, 0xbf46, 0x0138,
-	0x080c, 0x70cf, 0x1120, 0x080c, 0x6fb7, 0x0804, 0xb757, 0x2001,
-	0x194e, 0x2003, 0x0001, 0x2001, 0x1800, 0x2003, 0x0001, 0x080c,
-	0x6fdd, 0x0804, 0xb757, 0x6010, 0x2058, 0x2001, 0x1836, 0x2004,
-	0xd0ac, 0x1904, 0xb757, 0xb8a0, 0x9084, 0xff80, 0x1904, 0xb757,
-	0xb840, 0x9084, 0x00ff, 0x9005, 0x0190, 0x8001, 0xb842, 0x6017,
-	0x0000, 0x6023, 0x0007, 0x601b, 0x0398, 0x604b, 0x0000, 0x080c,
-	0x9b76, 0x0128, 0x2b00, 0x6012, 0x6023, 0x0001, 0x0458, 0x00de,
-	0x00ce, 0x6004, 0x908e, 0x0002, 0x11a0, 0x6010, 0x2058, 0xb8a0,
-	0x9086, 0x007e, 0x1170, 0x2009, 0x1836, 0x2104, 0xc085, 0x200a,
-	0x00e6, 0x2071, 0x1800, 0x080c, 0x5c68, 0x00ee, 0x080c, 0xa574,
-	0x0030, 0x080c, 0xa574, 0x080c, 0x3003, 0x080c, 0xbf5b, 0x00e6,
-	0x0126, 0x2091, 0x8000, 0x080c, 0x3034, 0x012e, 0x00ee, 0x080c,
-	0x9c06, 0x0005, 0x2001, 0x0002, 0x080c, 0x61ba, 0x6003, 0x0001,
-	0x6007, 0x0002, 0x080c, 0x84b0, 0x080c, 0x890e, 0x00de, 0x00ce,
-	0x0c80, 0x080c, 0x3034, 0x0804, 0xb67e, 0x00c6, 0x00d6, 0x6104,
-	0x9186, 0x0016, 0x0d38, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff,
-	0x9005, 0x0904, 0xb6cf, 0x8001, 0xb842, 0x6003, 0x0001, 0x080c,
-	0x84b0, 0x080c, 0x890e, 0x00de, 0x00ce, 0x0898, 0x080c, 0xa574,
-	0x0804, 0xb680, 0x080c, 0xa5b0, 0x0804, 0xb680, 0x00d6, 0x2c68,
-	0x6104, 0x080c, 0xbebe, 0x00de, 0x0118, 0x080c, 0x9bcc, 0x00f0,
-	0x6004, 0x8007, 0x6134, 0x918c, 0x00ff, 0x9105, 0x6036, 0x6007,
-	0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x603c, 0x600a, 0x2001,
-	0x1958, 0x2004, 0x601a, 0x602c, 0x2c08, 0x2060, 0x6024, 0xc0b5,
-	0x6026, 0x2160, 0x2009, 0x8020, 0x080c, 0x84a9, 0x0005, 0x00de,
-	0x00ce, 0x080c, 0xa574, 0x080c, 0x3003, 0x00e6, 0x0126, 0x2091,
-	0x8000, 0x080c, 0x3034, 0x6017, 0x0000, 0x6023, 0x0007, 0x601b,
-	0x0398, 0x604b, 0x0000, 0x012e, 0x00ee, 0x0005, 0x080c, 0xa007,
-	0x1904, 0xb726, 0x0005, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0d65,
-	0x0096, 0x00d6, 0x001b, 0x00de, 0x009e, 0x0005, 0xb78e, 0xb78e,
-	0xb78e, 0xb78e, 0xb78e, 0xb78e, 0xb78e, 0xb78e, 0xb78e, 0xb54a,
-	0xb78e, 0xb54f, 0xb790, 0xb54f, 0xb79d, 0xb78e, 0x080c, 0x0d65,
-	0x6004, 0x9086, 0x008b, 0x0148, 0x6007, 0x008b, 0x6003, 0x000d,
-	0x2009, 0x8020, 0x080c, 0x84a9, 0x0005, 0x080c, 0xbf3a, 0x0118,
-	0x080c, 0xbf4d, 0x0010, 0x080c, 0xbf5b, 0x080c, 0xba1b, 0x080c,
-	0xb82c, 0x0570, 0x080c, 0x3003, 0x080c, 0xb82c, 0x0168, 0x6014,
-	0x2048, 0xa867, 0x0103, 0xa87b, 0x0006, 0xa877, 0x0000, 0xa880,
-	0xc0ed, 0xa882, 0x080c, 0x698f, 0x2c68, 0x080c, 0x9b76, 0x0150,
-	0x6810, 0x6012, 0x080c, 0xbcc0, 0x00c6, 0x2d60, 0x080c, 0x9c06,
-	0x00ce, 0x0008, 0x2d60, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007,
-	0x0001, 0x6003, 0x0001, 0x080c, 0x84b0, 0x080c, 0x890e, 0x00c8,
-	0x080c, 0xbf3a, 0x0138, 0x6034, 0x9086, 0x4000, 0x1118, 0x080c,
-	0x3003, 0x08d0, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039,
-	0x0118, 0x9186, 0x0035, 0x1118, 0x080c, 0x3003, 0x0868, 0x080c,
-	0x9c06, 0x0005, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0d65, 0x0002,
-	0xb808, 0xb808, 0xb80a, 0xb80a, 0xb80a, 0xb808, 0xb808, 0x9c06,
-	0xb808, 0xb808, 0xb808, 0xb808, 0xb808, 0xb808, 0xb808, 0xb808,
-	0x080c, 0x0d65, 0x080c, 0x98ad, 0x080c, 0x9a1e, 0x080c, 0x98c9,
-	0x6114, 0x0096, 0x2148, 0xa87b, 0x0006, 0x080c, 0x698f, 0x009e,
-	0x0804, 0x9bcc, 0x9284, 0x0003, 0x1158, 0x9282, 0x1ddc, 0x0240,
-	0x2001, 0x1819, 0x2004, 0x9202, 0x1218, 0x9085, 0x0001, 0x0005,
-	0x9006, 0x0ce8, 0x0096, 0x0028, 0x0096, 0x0006, 0x6014, 0x2048,
-	0x000e, 0x0006, 0x9984, 0xf000, 0x9086, 0xf000, 0x0110, 0x080c,
-	0x10cd, 0x000e, 0x009e, 0x0005, 0x00e6, 0x00c6, 0x0036, 0x0006,
-	0x0126, 0x2091, 0x8000, 0x2061, 0x1ddc, 0x2071, 0x1800, 0x7350,
-	0x7070, 0x9302, 0x1640, 0x6020, 0x9206, 0x11f8, 0x080c, 0xbf46,
-	0x0180, 0x9286, 0x0001, 0x1168, 0x6004, 0x9086, 0x0004, 0x1148,
-	0x080c, 0x3003, 0x080c, 0xbf5b, 0x00c6, 0x080c, 0x9c06, 0x00ce,
-	0x0060, 0x080c, 0xbc32, 0x0148, 0x080c, 0xba41, 0x1110, 0x080c,
-	0xa574, 0x00c6, 0x080c, 0x9bcc, 0x00ce, 0x9ce0, 0x001c, 0x7064,
-	0x9c02, 0x1208, 0x08a0, 0x012e, 0x000e, 0x003e, 0x00ce, 0x00ee,
-	0x0005, 0x00e6, 0x00c6, 0x0016, 0x9188, 0x1000, 0x210c, 0x81ff,
-	0x0128, 0x2061, 0x1b02, 0x6112, 0x080c, 0x3003, 0x9006, 0x0010,
-	0x9085, 0x0001, 0x001e, 0x00ce, 0x00ee, 0x0005, 0x00c6, 0x0126,
-	0x2091, 0x8000, 0x080c, 0x9b76, 0x01b0, 0x665e, 0x2b00, 0x6012,
-	0x080c, 0x538e, 0x0118, 0x080c, 0xb95d, 0x0168, 0x080c, 0xbcc0,
-	0x6023, 0x0003, 0x2009, 0x004b, 0x080c, 0x9c6a, 0x9085, 0x0001,
-	0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091,
-	0x8000, 0xbaa0, 0x080c, 0x9c3d, 0x0580, 0x605f, 0x0000, 0x2b00,
-	0x6012, 0x080c, 0xbcc0, 0x6023, 0x0003, 0x0016, 0x080c, 0x98ad,
-	0x080c, 0x8613, 0x0076, 0x903e, 0x080c, 0x8502, 0x2c08, 0x080c,
-	0xcfa6, 0x007e, 0x080c, 0x98c9, 0x001e, 0xd184, 0x0128, 0x080c,
-	0x9bcc, 0x9085, 0x0001, 0x0070, 0x080c, 0x538e, 0x0128, 0xd18c,
-	0x1170, 0x080c, 0xb95d, 0x0148, 0x2009, 0x004c, 0x080c, 0x9c6a,
-	0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2900,
-	0x6016, 0x0c90, 0x2009, 0x004d, 0x0010, 0x2009, 0x004e, 0x00f6,
-	0x00c6, 0x0046, 0x0016, 0x080c, 0x9b76, 0x2c78, 0x0590, 0x7e5e,
-	0x2b00, 0x7812, 0x7823, 0x0003, 0x2021, 0x0005, 0x080c, 0xb96f,
-	0x9186, 0x004d, 0x0118, 0x9186, 0x004e, 0x0148, 0x2001, 0x1951,
-	0x200c, 0xd1fc, 0x0168, 0x2f60, 0x080c, 0x9bcc, 0x00d0, 0x2001,
-	0x1950, 0x200c, 0xd1fc, 0x0120, 0x2f60, 0x080c, 0x9bcc, 0x0088,
-	0x2f60, 0x080c, 0x538e, 0x0138, 0xd18c, 0x1118, 0x04f1, 0x0148,
-	0x0010, 0x2900, 0x7816, 0x001e, 0x0016, 0x080c, 0x9c6a, 0x9085,
-	0x0001, 0x001e, 0x004e, 0x00ce, 0x00fe, 0x0005, 0x00f6, 0x00c6,
-	0x0046, 0x080c, 0x9b76, 0x2c78, 0x0508, 0x7e5e, 0x2b00, 0x7812,
-	0x7823, 0x0003, 0x0096, 0x2021, 0x0004, 0x0489, 0x009e, 0x2001,
-	0x194f, 0x200c, 0xd1fc, 0x0120, 0x2f60, 0x080c, 0x9bcc, 0x0060,
-	0x2f60, 0x080c, 0x538e, 0x0120, 0xd18c, 0x1160, 0x0071, 0x0130,
-	0x2009, 0x0052, 0x080c, 0x9c6a, 0x9085, 0x0001, 0x004e, 0x00ce,
-	0x00fe, 0x0005, 0x2900, 0x7816, 0x0c98, 0x00c6, 0x080c, 0x4871,
-	0x00ce, 0x1120, 0x080c, 0x9bcc, 0x9006, 0x0005, 0xa867, 0x0000,
-	0xa86b, 0x8000, 0x2900, 0x6016, 0x9085, 0x0001, 0x0005, 0x0096,
-	0x0076, 0x0126, 0x2091, 0x8000, 0x080c, 0x98ad, 0x080c, 0x6448,
-	0x0158, 0x2001, 0xb976, 0x0006, 0x900e, 0x2400, 0x080c, 0x6bac,
-	0x080c, 0x698f, 0x000e, 0x0807, 0x2418, 0x080c, 0x8812, 0xbaa0,
-	0x0086, 0x2041, 0x0001, 0x2039, 0x0001, 0x2608, 0x080c, 0x862d,
-	0x008e, 0x080c, 0x8502, 0x2f08, 0x2648, 0x080c, 0xcfa6, 0xb93c,
-	0x81ff, 0x090c, 0x8704, 0x080c, 0x98c9, 0x012e, 0x007e, 0x009e,
-	0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9b76, 0x0190,
-	0x660a, 0x2b08, 0x6112, 0x080c, 0xbcc0, 0x6023, 0x0001, 0x2900,
-	0x6016, 0x2009, 0x001f, 0x080c, 0x9c6a, 0x9085, 0x0001, 0x012e,
+	0xb9a0, 0x0016, 0x080c, 0x303b, 0x080c, 0x9be7, 0x001e, 0x080c,
+	0x311a, 0x00de, 0x0804, 0xa8e6, 0x00de, 0x080c, 0x53a1, 0x1170,
+	0x6014, 0x9005, 0x1158, 0x0036, 0x0046, 0x6010, 0x2058, 0xbba0,
+	0x2021, 0x0006, 0x080c, 0x4a75, 0x004e, 0x003e, 0x00d6, 0x6010,
+	0x2058, 0x080c, 0x630b, 0x080c, 0xa6a6, 0x00de, 0x080c, 0xab28,
+	0x1588, 0x6010, 0x2058, 0xb890, 0x9005, 0x0560, 0x2001, 0x0006,
+	0x080c, 0x61c1, 0x0096, 0x6014, 0x904d, 0x01d0, 0xa864, 0x9084,
+	0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, 0x0000, 0x900e, 0x2011,
+	0x4000, 0x080c, 0xbe40, 0x0060, 0xa864, 0x9084, 0x00ff, 0x9086,
+	0x0029, 0x0130, 0xa807, 0x0000, 0xa867, 0x0103, 0xa833, 0x0200,
+	0x009e, 0x080c, 0x303b, 0x6020, 0x9086, 0x000a, 0x0138, 0x080c,
+	0x9be7, 0x0020, 0x080c, 0xa58f, 0x080c, 0xa830, 0x001e, 0x002e,
+	0x00ee, 0x00be, 0x0005, 0x2011, 0x1823, 0x2204, 0x9086, 0x0014,
+	0x1160, 0x2001, 0x0002, 0x080c, 0x61c1, 0x6003, 0x0001, 0x6007,
+	0x0001, 0x080c, 0x84d8, 0x0804, 0x8936, 0x0804, 0xa830, 0x2030,
+	0x2011, 0x1823, 0x2204, 0x9086, 0x0004, 0x1148, 0x96b6, 0x000b,
+	0x1120, 0x2001, 0x0007, 0x080c, 0x61c1, 0x0804, 0x9be7, 0x0804,
+	0xa830, 0x0002, 0xa670, 0xa929, 0xa670, 0xa968, 0xa670, 0xaa13,
+	0xa91e, 0xa670, 0xa670, 0xaa26, 0xa670, 0xaa36, 0x6604, 0x9686,
+	0x0003, 0x0904, 0xa845, 0x96b6, 0x001e, 0x1110, 0x080c, 0x9be7,
+	0x0005, 0x00b6, 0x00d6, 0x00c6, 0x080c, 0xaa46, 0x11a0, 0x9006,
+	0x080c, 0x61ad, 0x080c, 0x3006, 0x080c, 0xbf76, 0x2001, 0x0002,
+	0x080c, 0x61c1, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x84d8,
+	0x080c, 0x8936, 0x0408, 0x2009, 0x026e, 0x2104, 0x9086, 0x0009,
+	0x1160, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0170,
+	0x8001, 0xb842, 0x601b, 0x000a, 0x0078, 0x2009, 0x026f, 0x2104,
+	0x9084, 0xff00, 0x9086, 0x1900, 0x1108, 0x08a0, 0x080c, 0x3006,
+	0x080c, 0xbf76, 0x080c, 0xa830, 0x00ce, 0x00de, 0x00be, 0x0005,
+	0x0096, 0x00b6, 0x0026, 0x9016, 0x080c, 0xaa54, 0x00d6, 0x2069,
+	0x194d, 0x2d04, 0x9005, 0x0168, 0x6010, 0x2058, 0xb8a0, 0x9086,
+	0x007e, 0x1138, 0x2069, 0x181f, 0x2d04, 0x8000, 0x206a, 0x00de,
+	0x0010, 0x00de, 0x0088, 0x9006, 0x080c, 0x61ad, 0x2001, 0x0002,
+	0x080c, 0x61c1, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x84d8,
+	0x080c, 0x8936, 0x0804, 0xa9e3, 0x080c, 0xb847, 0x01b0, 0x6014,
+	0x2048, 0xa864, 0x2010, 0x9086, 0x0139, 0x1138, 0x6007, 0x0016,
+	0x2001, 0x0002, 0x080c, 0xbe9a, 0x00b0, 0x6014, 0x2048, 0xa864,
+	0xd0fc, 0x0118, 0x2001, 0x0001, 0x0ca8, 0x2001, 0x180e, 0x2004,
+	0xd0dc, 0x0148, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005,
+	0x1110, 0x9006, 0x0c38, 0x080c, 0xa58f, 0x2009, 0x026e, 0x2134,
+	0x96b4, 0x00ff, 0x9686, 0x0005, 0x0510, 0x9686, 0x000b, 0x01c8,
+	0x2009, 0x026f, 0x2104, 0x9084, 0xff00, 0x1118, 0x9686, 0x0009,
+	0x01b0, 0x9086, 0x1900, 0x1168, 0x9686, 0x0009, 0x0180, 0x2001,
+	0x0004, 0x080c, 0x61c1, 0x2001, 0x0028, 0x601a, 0x6007, 0x0052,
+	0x0010, 0x080c, 0xa830, 0x002e, 0x00be, 0x009e, 0x0005, 0x9286,
+	0x0139, 0x0160, 0x6014, 0x2048, 0x080c, 0xb847, 0x0140, 0xa864,
+	0x9086, 0x0139, 0x0118, 0xa868, 0xd0fc, 0x0108, 0x0c50, 0x6010,
+	0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0138, 0x8001, 0xb842,
+	0x601b, 0x000a, 0x6007, 0x0016, 0x08f0, 0xb8a0, 0x9086, 0x007e,
+	0x1138, 0x00e6, 0x2071, 0x1800, 0x080c, 0x5c6f, 0x00ee, 0x0010,
+	0x080c, 0x3006, 0x0870, 0x080c, 0xaa54, 0x1160, 0x2001, 0x0004,
+	0x080c, 0x61c1, 0x6003, 0x0001, 0x6007, 0x0003, 0x080c, 0x84d8,
+	0x0804, 0x8936, 0x080c, 0xa58f, 0x0804, 0xa830, 0x0469, 0x1160,
+	0x2001, 0x0008, 0x080c, 0x61c1, 0x6003, 0x0001, 0x6007, 0x0005,
+	0x080c, 0x84d8, 0x0804, 0x8936, 0x0804, 0xa830, 0x00e9, 0x1160,
+	0x2001, 0x000a, 0x080c, 0x61c1, 0x6003, 0x0001, 0x6007, 0x0001,
+	0x080c, 0x84d8, 0x0804, 0x8936, 0x0804, 0xa830, 0x2009, 0x026e,
+	0x2104, 0x9086, 0x0003, 0x1138, 0x2009, 0x026f, 0x2104, 0x9084,
+	0xff00, 0x9086, 0x2a00, 0x0005, 0x9085, 0x0001, 0x0005, 0x00b6,
+	0x00c6, 0x0016, 0x6110, 0x2158, 0x080c, 0x627f, 0x001e, 0x00ce,
+	0x00be, 0x0005, 0x00b6, 0x00f6, 0x00e6, 0x00d6, 0x0036, 0x0016,
+	0x6010, 0x2058, 0x2009, 0x1836, 0x2104, 0x9085, 0x0003, 0x200a,
+	0x080c, 0xaafa, 0x0560, 0x2009, 0x1836, 0x2104, 0xc0cd, 0x200a,
+	0x080c, 0x6663, 0x0158, 0x9006, 0x2020, 0x2009, 0x002a, 0x080c,
+	0xd273, 0x2001, 0x180c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a,
+	0x2009, 0x0001, 0x080c, 0x2fc5, 0x00e6, 0x2071, 0x1800, 0x080c,
+	0x2ddb, 0x00ee, 0x00c6, 0x0156, 0x20a9, 0x0781, 0x2009, 0x007f,
+	0x080c, 0x311a, 0x8108, 0x1f04, 0xaa98, 0x015e, 0x00ce, 0x080c,
+	0xaa57, 0x2071, 0x0260, 0x2079, 0x0200, 0x7817, 0x0001, 0x2001,
+	0x1836, 0x200c, 0xc1c5, 0x7018, 0xd0fc, 0x0110, 0xd0dc, 0x0118,
+	0x7038, 0xd0dc, 0x1108, 0xc1c4, 0x7817, 0x0000, 0x2001, 0x1836,
+	0x2102, 0x2079, 0x0100, 0x2e04, 0x9084, 0x00ff, 0x2069, 0x181e,
+	0x206a, 0x78e6, 0x0006, 0x8e70, 0x2e04, 0x2069, 0x181f, 0x206a,
+	0x78ea, 0x7832, 0x7836, 0x2010, 0x9084, 0xff00, 0x001e, 0x9105,
+	0x2009, 0x182b, 0x200a, 0x2200, 0x9084, 0x00ff, 0x2008, 0x080c,
+	0x246d, 0x080c, 0x70b7, 0x0170, 0x2071, 0x0260, 0x2069, 0x1953,
+	0x7048, 0x206a, 0x704c, 0x6806, 0x7050, 0x680a, 0x7054, 0x680e,
+	0x080c, 0xbc6d, 0x0040, 0x2001, 0x0006, 0x080c, 0x61c1, 0x080c,
+	0x303b, 0x080c, 0x9be7, 0x001e, 0x003e, 0x00de, 0x00ee, 0x00fe,
+	0x00be, 0x0005, 0x0096, 0x0026, 0x0036, 0x00e6, 0x0156, 0x2019,
+	0x182b, 0x231c, 0x83ff, 0x01f0, 0x2071, 0x0260, 0x7200, 0x9294,
+	0x00ff, 0x7004, 0x9084, 0xff00, 0x9205, 0x9306, 0x1198, 0x2011,
+	0x0276, 0x20a9, 0x0004, 0x2b48, 0x2019, 0x000a, 0x080c, 0xabdf,
+	0x1148, 0x2011, 0x027a, 0x20a9, 0x0004, 0x2019, 0x0006, 0x080c,
+	0xabdf, 0x1100, 0x015e, 0x00ee, 0x003e, 0x002e, 0x009e, 0x0005,
+	0x00e6, 0x2071, 0x0260, 0x7034, 0x9086, 0x0014, 0x11a8, 0x7038,
+	0x9086, 0x0800, 0x1188, 0x703c, 0xd0ec, 0x0160, 0x9084, 0x0f00,
+	0x9086, 0x0100, 0x1138, 0x7054, 0xd0a4, 0x1110, 0xd0ac, 0x0110,
+	0x9006, 0x0010, 0x9085, 0x0001, 0x00ee, 0x0005, 0x00e6, 0x0096,
+	0x00c6, 0x0076, 0x0056, 0x0046, 0x0026, 0x0006, 0x0126, 0x2091,
+	0x8000, 0x2029, 0x19c4, 0x252c, 0x2021, 0x19cb, 0x2424, 0x2061,
+	0x1ddc, 0x2071, 0x1800, 0x7250, 0x7070, 0x9202, 0x1a04, 0xabb7,
+	0x080c, 0xd2a4, 0x0904, 0xabb0, 0x6720, 0x9786, 0x0007, 0x0904,
+	0xabb0, 0x2500, 0x9c06, 0x0904, 0xabb0, 0x2400, 0x9c06, 0x0904,
+	0xabb0, 0x3e08, 0x9186, 0x0002, 0x1148, 0x6010, 0x9005, 0x0130,
+	0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1590, 0x00c6, 0x6043,
+	0xffff, 0x6000, 0x9086, 0x0004, 0x1110, 0x080c, 0x1914, 0x9786,
+	0x000a, 0x0148, 0x080c, 0xba5c, 0x1130, 0x00ce, 0x080c, 0xa58f,
+	0x080c, 0x9c21, 0x00e8, 0x6014, 0x2048, 0x080c, 0xb847, 0x01a8,
+	0x9786, 0x0003, 0x1530, 0xa867, 0x0103, 0xa87c, 0xd0cc, 0x0130,
+	0x0096, 0xa878, 0x2048, 0x080c, 0x0fd4, 0x009e, 0xab7a, 0xa877,
+	0x0000, 0x080c, 0x698a, 0x080c, 0xba36, 0x080c, 0x9c21, 0x00ce,
+	0x9ce0, 0x001c, 0x7064, 0x9c02, 0x1210, 0x0804, 0xab5b, 0x012e,
+	0x000e, 0x002e, 0x004e, 0x005e, 0x007e, 0x00ce, 0x009e, 0x00ee,
+	0x0005, 0x9786, 0x0006, 0x1118, 0x080c, 0xd21e, 0x0c30, 0x9786,
+	0x000a, 0x0998, 0x0880, 0x220c, 0x2304, 0x9106, 0x1130, 0x8210,
+	0x8318, 0x1f04, 0xabcb, 0x9006, 0x0005, 0x2304, 0x9102, 0x0218,
+	0x2001, 0x0001, 0x0008, 0x9006, 0x918d, 0x0001, 0x0005, 0x0136,
+	0x01c6, 0x0016, 0x8906, 0x8006, 0x8007, 0x908c, 0x003f, 0x21e0,
+	0x9084, 0xffc0, 0x9300, 0x2098, 0x3518, 0x20a9, 0x0001, 0x220c,
+	0x4002, 0x910e, 0x1140, 0x8210, 0x8319, 0x1dc8, 0x9006, 0x001e,
+	0x01ce, 0x013e, 0x0005, 0x220c, 0x9102, 0x0218, 0x2001, 0x0001,
+	0x0010, 0x2001, 0x0000, 0x918d, 0x0001, 0x001e, 0x01ce, 0x013e,
+	0x0005, 0x6004, 0x908a, 0x0053, 0x1a0c, 0x0d65, 0x080c, 0xba4b,
+	0x0120, 0x080c, 0xba5c, 0x0158, 0x0028, 0x080c, 0x303b, 0x080c,
+	0xba5c, 0x0128, 0x080c, 0x8874, 0x080c, 0x9be7, 0x0005, 0x080c,
+	0xa58f, 0x0cc0, 0x9182, 0x0057, 0x1220, 0x9182, 0x0040, 0x0208,
+	0x000a, 0x0005, 0xac41, 0xac41, 0xac41, 0xac41, 0xac41, 0xac41,
+	0xac41, 0xac41, 0xac41, 0xac41, 0xac41, 0xac43, 0xac43, 0xac43,
+	0xac43, 0xac41, 0xac41, 0xac41, 0xac43, 0xac41, 0xac41, 0xac41,
+	0xac41, 0x080c, 0x0d65, 0x600b, 0xffff, 0x6003, 0x000f, 0x6106,
+	0x0126, 0x2091, 0x8000, 0x080c, 0xbf79, 0x2009, 0x8000, 0x080c,
+	0x84d1, 0x012e, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004, 0x9082,
+	0x0040, 0x0804, 0xacc8, 0x9186, 0x0027, 0x1520, 0x080c, 0x8874,
+	0x080c, 0x3006, 0x080c, 0xbf76, 0x0096, 0x6114, 0x2148, 0x080c,
+	0xb847, 0x0198, 0x080c, 0xba5c, 0x1118, 0x080c, 0xa58f, 0x0068,
+	0xa867, 0x0103, 0xa87b, 0x0029, 0xa877, 0x0000, 0xa97c, 0xc1c5,
+	0xa97e, 0x080c, 0x6996, 0x080c, 0xba36, 0x009e, 0x080c, 0x9be7,
+	0x0804, 0x8936, 0x9186, 0x0014, 0x1120, 0x6004, 0x9082, 0x0040,
+	0x0018, 0x080c, 0x0d65, 0x0005, 0x0002, 0xaca6, 0xaca4, 0xaca4,
+	0xaca4, 0xaca4, 0xaca4, 0xaca4, 0xaca4, 0xaca4, 0xaca4, 0xaca4,
+	0xacbf, 0xacbf, 0xacbf, 0xacbf, 0xaca4, 0xacbf, 0xaca4, 0xacbf,
+	0xaca4, 0xaca4, 0xaca4, 0xaca4, 0x080c, 0x0d65, 0x080c, 0x8874,
+	0x0096, 0x6114, 0x2148, 0x080c, 0xb847, 0x0168, 0xa867, 0x0103,
+	0xa87b, 0x0006, 0xa877, 0x0000, 0xa880, 0xc0ec, 0xa882, 0x080c,
+	0x6996, 0x080c, 0xba36, 0x009e, 0x080c, 0x9be7, 0x0005, 0x080c,
+	0x8874, 0x080c, 0xba5c, 0x090c, 0xa58f, 0x080c, 0x9be7, 0x0005,
+	0x0002, 0xace2, 0xace0, 0xace0, 0xace0, 0xace0, 0xace0, 0xace0,
+	0xace0, 0xace0, 0xace0, 0xace0, 0xace4, 0xace4, 0xace4, 0xace4,
+	0xace0, 0xace6, 0xace0, 0xace4, 0xace0, 0xace0, 0xace0, 0xace0,
+	0x080c, 0x0d65, 0x080c, 0x0d65, 0x080c, 0x0d65, 0x080c, 0x9be7,
+	0x0804, 0x8936, 0x9182, 0x0057, 0x1220, 0x9182, 0x0040, 0x0208,
+	0x000a, 0x0005, 0xad09, 0xad09, 0xad09, 0xad09, 0xad09, 0xad42,
+	0xae31, 0xad09, 0xae3d, 0xad09, 0xad09, 0xad09, 0xad09, 0xad09,
+	0xad09, 0xad09, 0xad09, 0xad09, 0xad09, 0xae3d, 0xad0b, 0xad09,
+	0xae3b, 0x080c, 0x0d65, 0x00b6, 0x0096, 0x6114, 0x2148, 0x6010,
+	0x2058, 0xb800, 0xd0bc, 0x1508, 0xa87b, 0x0000, 0xa867, 0x0103,
+	0xa877, 0x0000, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115,
+	0x190c, 0xaec2, 0x080c, 0x67ac, 0x6210, 0x2258, 0xba3c, 0x82ff,
+	0x0110, 0x8211, 0xba3e, 0xb8c0, 0x9005, 0x0110, 0x080c, 0x639b,
+	0x080c, 0x9be7, 0x009e, 0x00be, 0x0005, 0xa87c, 0xd0ac, 0x09e0,
+	0xa838, 0xa934, 0x9105, 0x09c0, 0xa880, 0xd0bc, 0x19a8, 0x080c,
+	0xbb8c, 0x0c80, 0x00b6, 0x0096, 0x6114, 0x2148, 0x601c, 0xd0fc,
+	0x1110, 0x7644, 0x0008, 0x9036, 0x96b4, 0x0fff, 0x86ff, 0x1590,
+	0x6010, 0x2058, 0xb800, 0xd0bc, 0x1904, 0xae20, 0xa87b, 0x0000,
+	0xa867, 0x0103, 0xae76, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938,
+	0x9115, 0x190c, 0xaec2, 0x080c, 0x67ac, 0x6210, 0x2258, 0xba3c,
+	0x82ff, 0x0110, 0x8211, 0xba3e, 0xb8c0, 0x9005, 0x0110, 0x080c,
+	0x639b, 0x601c, 0xd0fc, 0x1148, 0x7044, 0xd0e4, 0x1904, 0xae04,
+	0x080c, 0x9be7, 0x009e, 0x00be, 0x0005, 0x2009, 0x0211, 0x210c,
+	0x080c, 0x0d65, 0x968c, 0x0c00, 0x0150, 0x6010, 0x2058, 0xb800,
+	0xd0bc, 0x1904, 0xae08, 0x7348, 0xab92, 0x734c, 0xab8e, 0x968c,
+	0x00ff, 0x9186, 0x0002, 0x0508, 0x9186, 0x0028, 0x1118, 0xa87b,
+	0x001c, 0x00e8, 0xd6dc, 0x01a0, 0xa87b, 0x0015, 0xa87c, 0xd0ac,
+	0x0170, 0xa938, 0xaa34, 0x2100, 0x9205, 0x0148, 0x7048, 0x9106,
+	0x1118, 0x704c, 0x9206, 0x0118, 0xa992, 0xaa8e, 0xc6dc, 0x0038,
+	0xd6d4, 0x0118, 0xa87b, 0x0007, 0x0010, 0xa87b, 0x0000, 0xa867,
+	0x0103, 0xae76, 0x901e, 0xd6c4, 0x01d8, 0x9686, 0x0100, 0x1130,
+	0x7064, 0x9005, 0x1118, 0xc6c4, 0x0804, 0xad4e, 0x735c, 0xab86,
+	0x83ff, 0x0170, 0x938a, 0x0009, 0x0210, 0x2019, 0x0008, 0x0036,
+	0x2308, 0x2019, 0x0018, 0x2011, 0x0025, 0x080c, 0xb41a, 0x003e,
+	0xd6cc, 0x0904, 0xad63, 0x7154, 0xa98a, 0x81ff, 0x0904, 0xad63,
+	0x9192, 0x0021, 0x1278, 0x8304, 0x9098, 0x0018, 0x2011, 0x0029,
+	0x080c, 0xb41a, 0x2011, 0x0205, 0x2013, 0x0000, 0x080c, 0xbf06,
+	0x0804, 0xad63, 0xa868, 0xd0fc, 0x0120, 0x2009, 0x0020, 0xa98a,
+	0x0c50, 0x00a6, 0x2950, 0x080c, 0xb3b9, 0x00ae, 0x080c, 0xbf06,
+	0x080c, 0xb40a, 0x0804, 0xad65, 0x080c, 0xbb4f, 0x0804, 0xad7a,
+	0xa87c, 0xd0ac, 0x0904, 0xad8b, 0xa880, 0xd0bc, 0x1904, 0xad8b,
+	0x7348, 0xa838, 0x9306, 0x11c8, 0x734c, 0xa834, 0x931e, 0x0904,
+	0xad8b, 0xd6d4, 0x0190, 0xab38, 0x9305, 0x0904, 0xad8b, 0x0068,
+	0xa87c, 0xd0ac, 0x0904, 0xad56, 0xa838, 0xa934, 0x9105, 0x0904,
+	0xad56, 0xa880, 0xd0bc, 0x1904, 0xad56, 0x080c, 0xbb8c, 0x0804,
+	0xad7a, 0x00f6, 0x2079, 0x026c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08,
+	0x00fe, 0x0021, 0x0005, 0x0011, 0x0005, 0x0005, 0x0096, 0x6003,
+	0x0002, 0x6007, 0x0043, 0x6014, 0x2048, 0xa87c, 0xd0ac, 0x0128,
+	0x009e, 0x0005, 0x2130, 0x2228, 0x0058, 0x2400, 0xa9ac, 0x910a,
+	0x2300, 0xaab0, 0x9213, 0x2600, 0x9102, 0x2500, 0x9203, 0x0e90,
+	0xac46, 0xab4a, 0xae36, 0xad3a, 0x6044, 0xd0fc, 0x190c, 0x98f1,
+	0x604b, 0x0000, 0x080c, 0x1ad2, 0x1118, 0x6144, 0x080c, 0x84fd,
+	0x009e, 0x0005, 0x9182, 0x0057, 0x1220, 0x9182, 0x0040, 0x0208,
+	0x000a, 0x0005, 0xae89, 0xae89, 0xae89, 0xae89, 0xae89, 0xae89,
+	0xae89, 0xae89, 0xae89, 0xae89, 0xae8b, 0xae89, 0xae89, 0xae89,
+	0xae89, 0xae9c, 0xae89, 0xae89, 0xae89, 0xae89, 0xaec0, 0xae89,
+	0xae89, 0x080c, 0x0d65, 0x6004, 0x9086, 0x0040, 0x1110, 0x080c,
+	0x8874, 0x2019, 0x0001, 0x080c, 0x9286, 0x6003, 0x0002, 0x080c,
+	0xbf7e, 0x080c, 0x88d1, 0x0005, 0x6004, 0x9086, 0x0040, 0x1110,
+	0x080c, 0x8874, 0x2019, 0x0001, 0x080c, 0x9286, 0x080c, 0x88d1,
+	0x080c, 0x3006, 0x080c, 0xbf76, 0x0096, 0x6114, 0x2148, 0x080c,
+	0xb847, 0x0150, 0xa867, 0x0103, 0xa87b, 0x0029, 0xa877, 0x0000,
+	0x080c, 0x6996, 0x080c, 0xba36, 0x009e, 0x080c, 0x9be7, 0x0005,
+	0x080c, 0x0d65, 0xa87b, 0x0015, 0xd1fc, 0x0180, 0xa87b, 0x0007,
+	0x8002, 0x8000, 0x810a, 0x9189, 0x0000, 0x0006, 0x0016, 0x2009,
+	0x1a48, 0x2104, 0x8000, 0x200a, 0x001e, 0x000e, 0xa992, 0xa88e,
+	0x0005, 0x9182, 0x0057, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a,
+	0x0005, 0xaef8, 0xaef8, 0xaef8, 0xaef8, 0xaef8, 0xaefa, 0xaef8,
+	0xaef8, 0xafb7, 0xaef8, 0xaef8, 0xaef8, 0xaef8, 0xaef8, 0xaef8,
+	0xaef8, 0xaef8, 0xaef8, 0xaef8, 0xb0fb, 0xaef8, 0xb105, 0xaef8,
+	0x080c, 0x0d65, 0x601c, 0xd0bc, 0x0178, 0xd084, 0x0168, 0xd0f4,
+	0x0120, 0xc084, 0x601e, 0x0804, 0xacea, 0x6114, 0x0096, 0x2148,
+	0xa87c, 0xc0e5, 0xa87e, 0x009e, 0x0076, 0x00a6, 0x00e6, 0x0096,
+	0x2071, 0x0260, 0x6114, 0x2150, 0x601c, 0xd0fc, 0x1110, 0x7644,
+	0x0008, 0x9036, 0xb676, 0x96b4, 0x0fff, 0xb77c, 0xc7e5, 0xb77e,
+	0x6210, 0x00b6, 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e,
+	0x00be, 0x86ff, 0x0904, 0xafb0, 0x9694, 0xff00, 0x9284, 0x0c00,
+	0x0120, 0x7048, 0xb092, 0x704c, 0xb08e, 0x9284, 0x0300, 0x0904,
+	0xafb0, 0x9686, 0x0100, 0x1130, 0x7064, 0x9005, 0x1118, 0xc6c4,
+	0xb676, 0x0c38, 0x080c, 0x1022, 0x090c, 0x0d65, 0x2900, 0xb07a,
+	0xb77c, 0x97bd, 0x0200, 0xb77e, 0xa867, 0x0103, 0xb068, 0xa86a,
+	0xb06c, 0xa86e, 0xb070, 0xa872, 0x7044, 0x9084, 0xf000, 0x9635,
+	0xae76, 0x968c, 0x0c00, 0x0120, 0x7348, 0xab92, 0x734c, 0xab8e,
+	0x968c, 0x00ff, 0x9186, 0x0002, 0x0180, 0x9186, 0x0028, 0x1118,
+	0xa87b, 0x001c, 0x0060, 0xd6dc, 0x0118, 0xa87b, 0x0015, 0x0038,
+	0xd6d4, 0x0118, 0xa87b, 0x0007, 0x0010, 0xa87b, 0x0000, 0xaf7e,
+	0xb080, 0xa882, 0xb084, 0xa886, 0x901e, 0xd6c4, 0x0190, 0x735c,
+	0xab86, 0x83ff, 0x0170, 0x938a, 0x0009, 0x0210, 0x2019, 0x0008,
+	0x0036, 0x2308, 0x2019, 0x0018, 0x2011, 0x0025, 0x080c, 0xb41a,
+	0x003e, 0xd6cc, 0x01e8, 0x7154, 0xa98a, 0x81ff, 0x01c8, 0x9192,
+	0x0021, 0x1260, 0x8304, 0x9098, 0x0018, 0x2011, 0x0029, 0x080c,
+	0xb41a, 0x2011, 0x0205, 0x2013, 0x0000, 0x0050, 0xb068, 0xd0fc,
+	0x0120, 0x2009, 0x0020, 0xa98a, 0x0c68, 0x2950, 0x080c, 0xb3b9,
+	0x080c, 0x18f2, 0x009e, 0x00ee, 0x00ae, 0x007e, 0x0005, 0x2001,
+	0x1959, 0x2004, 0x604a, 0x0096, 0x6114, 0x2148, 0xa83c, 0xa940,
+	0x9105, 0x1118, 0xa87c, 0xc0dc, 0xa87e, 0x6003, 0x0002, 0x080c,
+	0xbf87, 0x0904, 0xb0f6, 0x604b, 0x0000, 0x6010, 0x00b6, 0x2058,
+	0xb800, 0x00be, 0xd0bc, 0x1500, 0xd1cc, 0x0904, 0xb0b5, 0xa978,
+	0xa868, 0xd0fc, 0x0904, 0xb076, 0x0016, 0xa87c, 0x0006, 0xa880,
+	0x0006, 0x00a6, 0x2150, 0xb174, 0x9184, 0x00ff, 0x90b6, 0x0002,
+	0x0904, 0xb044, 0x9086, 0x0028, 0x1904, 0xb030, 0xa87b, 0x001c,
+	0xb07b, 0x001c, 0x0804, 0xb04c, 0x6024, 0xd0f4, 0x11d0, 0xa838,
+	0xaa34, 0x9205, 0x09c8, 0xa838, 0xaa90, 0x9206, 0x1120, 0xa88c,
+	0xaa34, 0x9206, 0x0988, 0x6024, 0xd0d4, 0x1148, 0xa9ac, 0xa834,
+	0x9102, 0x603a, 0xa9b0, 0xa838, 0x9103, 0x603e, 0x6024, 0xc0f5,
+	0x6026, 0x6010, 0x00b6, 0x2058, 0xb83c, 0x8000, 0xb83e, 0x00be,
+	0x601c, 0xc0fc, 0x601e, 0x9006, 0xa876, 0xa892, 0xa88e, 0xa87c,
+	0xc0e4, 0xa87e, 0xd0cc, 0x0140, 0xc0cc, 0xa87e, 0x0096, 0xa878,
+	0x2048, 0x080c, 0x0fd4, 0x009e, 0x080c, 0xbb8c, 0x0804, 0xb0f6,
+	0xd1dc, 0x0158, 0xa87b, 0x0015, 0xb07b, 0x0015, 0x080c, 0xbe29,
+	0x0118, 0xb174, 0xc1dc, 0xb176, 0x0078, 0xd1d4, 0x0128, 0xa87b,
+	0x0007, 0xb07b, 0x0007, 0x0040, 0xa87c, 0xd0ac, 0x0128, 0xa834,
+	0xa938, 0x9115, 0x190c, 0xaec2, 0xa87c, 0xb07e, 0xa890, 0xb092,
+	0xa88c, 0xb08e, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0019, 0x20a0,
+	0x20a9, 0x0020, 0x8a06, 0x8006, 0x8007, 0x9094, 0x003f, 0x22e0,
+	0x9084, 0xffc0, 0x9080, 0x0019, 0x2098, 0x4003, 0x00ae, 0x000e,
+	0xa882, 0x000e, 0xa87e, 0x080c, 0xbf06, 0x001e, 0xa874, 0x0006,
+	0x2148, 0x080c, 0x0fd4, 0x001e, 0x0804, 0xb0e2, 0x0016, 0x00a6,
+	0x2150, 0xb174, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01e0, 0x9086,
+	0x0028, 0x1128, 0xa87b, 0x001c, 0xb07b, 0x001c, 0x00e0, 0xd1dc,
+	0x0158, 0xa87b, 0x0015, 0xb07b, 0x0015, 0x080c, 0xbe29, 0x0118,
+	0xb174, 0xc1dc, 0xb176, 0x0078, 0xd1d4, 0x0128, 0xa87b, 0x0007,
+	0xb07b, 0x0007, 0x0040, 0xa87c, 0xd0ac, 0x0128, 0xa834, 0xa938,
+	0x9115, 0x190c, 0xaec2, 0xa890, 0xb092, 0xa88c, 0xb08e, 0xa87c,
+	0xb07e, 0x00ae, 0x080c, 0x0fd4, 0x009e, 0x080c, 0xbf06, 0xa974,
+	0x0016, 0x080c, 0xb40a, 0x001e, 0x0468, 0xa867, 0x0103, 0xa974,
+	0x9184, 0x00ff, 0x90b6, 0x0002, 0x01b0, 0x9086, 0x0028, 0x1118,
+	0xa87b, 0x001c, 0x00d0, 0xd1dc, 0x0148, 0xa87b, 0x0015, 0x080c,
+	0xbe29, 0x0118, 0xa974, 0xc1dc, 0xa976, 0x0078, 0xd1d4, 0x0118,
+	0xa87b, 0x0007, 0x0050, 0xa87b, 0x0000, 0xa87c, 0xd0ac, 0x0128,
+	0xa834, 0xa938, 0x9115, 0x190c, 0xaec2, 0xa974, 0x0016, 0x080c,
+	0x67ac, 0x001e, 0x6010, 0x00b6, 0x2058, 0xba3c, 0x82ff, 0x0110,
+	0x8211, 0xba3e, 0xb8c0, 0x9005, 0x0120, 0x0016, 0x080c, 0x639b,
+	0x001e, 0x00be, 0xd1e4, 0x1120, 0x080c, 0x9be7, 0x009e, 0x0005,
+	0x080c, 0xbb4f, 0x0cd8, 0x6114, 0x0096, 0x2148, 0xa97c, 0x080c,
+	0xbf87, 0x190c, 0x1900, 0x009e, 0x0005, 0x0096, 0x6114, 0x2148,
+	0xa83c, 0xa940, 0x9105, 0x01e8, 0xa877, 0x0000, 0xa87b, 0x0000,
+	0xa867, 0x0103, 0x00b6, 0x6010, 0x2058, 0xa834, 0xa938, 0x9115,
+	0x11a0, 0x080c, 0x67ac, 0xba3c, 0x8211, 0x0208, 0xba3e, 0xb8c0,
+	0x9005, 0x0110, 0x080c, 0x639b, 0x080c, 0x9be7, 0x00be, 0x009e,
+	0x0005, 0xa87c, 0xc0dc, 0xa87e, 0x08f8, 0xb800, 0xd0bc, 0x1120,
+	0xa834, 0x080c, 0xaec2, 0x0c28, 0xa880, 0xd0bc, 0x1dc8, 0x080c,
+	0xbb8c, 0x0c60, 0x080c, 0x8874, 0x0010, 0x080c, 0x88d1, 0x601c,
+	0xd084, 0x0110, 0x080c, 0x1914, 0x080c, 0xb847, 0x01f0, 0x0096,
+	0x6114, 0x2148, 0x080c, 0xba5c, 0x1118, 0x080c, 0xa58f, 0x00a0,
+	0xa867, 0x0103, 0x2009, 0x180c, 0x210c, 0xd18c, 0x1198, 0xd184,
+	0x1170, 0x6108, 0xa97a, 0x918e, 0x0029, 0x1110, 0x080c, 0xd51a,
+	0xa877, 0x0000, 0x080c, 0x6996, 0x009e, 0x0804, 0x9c21, 0xa87b,
+	0x0004, 0x0cb0, 0xa87b, 0x0004, 0x0c98, 0x9182, 0x0057, 0x1220,
+	0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xb18c, 0xb18c, 0xb18c,
+	0xb18c, 0xb18c, 0xb18e, 0xb18c, 0xb18c, 0xb18c, 0xb18c, 0xb18c,
+	0xb18c, 0xb18c, 0xb18c, 0xb18c, 0xb18c, 0xb18c, 0xb18c, 0xb18c,
+	0xb18c, 0xb1b2, 0xb18c, 0xb18c, 0x080c, 0x0d65, 0x080c, 0x5395,
+	0x01f8, 0x6014, 0x7144, 0x918c, 0x0fff, 0x9016, 0xd1c4, 0x0118,
+	0x7264, 0x9294, 0x00ff, 0x0096, 0x904d, 0x0188, 0xa87b, 0x0000,
+	0xa864, 0x9086, 0x0139, 0x0128, 0xa867, 0x0103, 0xa976, 0xaa96,
+	0x0030, 0xa897, 0x4000, 0xa99a, 0xaa9e, 0x080c, 0x6996, 0x009e,
+	0x0804, 0x9be7, 0x080c, 0x5395, 0x0dd8, 0x6014, 0x900e, 0x9016,
+	0x0c10, 0x9182, 0x0085, 0x0002, 0xb1cb, 0xb1c9, 0xb1c9, 0xb1d7,
+	0xb1c9, 0xb1c9, 0xb1c9, 0xb1c9, 0xb1c9, 0xb1c9, 0xb1c9, 0xb1c9,
+	0xb1c9, 0x080c, 0x0d65, 0x6003, 0x0001, 0x6106, 0x0126, 0x2091,
+	0x8000, 0x2009, 0x8020, 0x080c, 0x84d1, 0x012e, 0x0005, 0x0026,
+	0x0056, 0x00d6, 0x00e6, 0x2071, 0x0260, 0x7224, 0x6216, 0x7220,
+	0x080c, 0xb835, 0x01a0, 0x2268, 0x6800, 0x9086, 0x0000, 0x0178,
+	0x6010, 0x6d10, 0x952e, 0x1158, 0x00c6, 0x2d60, 0x080c, 0xb445,
+	0x00ce, 0x0128, 0x6803, 0x0002, 0x6007, 0x0086, 0x0010, 0x6007,
+	0x0087, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x84d1, 0x9280,
+	0x0004, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0140, 0x6824,
+	0xd0ec, 0x0128, 0x00c6, 0x2260, 0x080c, 0xbb8c, 0x00ce, 0x00ee,
+	0x00de, 0x005e, 0x002e, 0x0005, 0x9186, 0x0013, 0x1160, 0x6004,
+	0x908a, 0x0085, 0x0a0c, 0x0d65, 0x908a, 0x0092, 0x1a0c, 0x0d65,
+	0x9082, 0x0085, 0x00e2, 0x9186, 0x0027, 0x0120, 0x9186, 0x0014,
+	0x190c, 0x0d65, 0x080c, 0x8874, 0x0096, 0x6014, 0x2048, 0x080c,
+	0xb847, 0x0140, 0xa867, 0x0103, 0xa877, 0x0000, 0xa87b, 0x0029,
+	0x080c, 0x6996, 0x009e, 0x080c, 0x9c21, 0x0804, 0x8936, 0xb24c,
+	0xb24e, 0xb24e, 0xb24c, 0xb24c, 0xb24c, 0xb24c, 0xb24c, 0xb24c,
+	0xb24c, 0xb24c, 0xb24c, 0xb24c, 0x080c, 0x0d65, 0x080c, 0x9c21,
+	0x0005, 0x9186, 0x0013, 0x1130, 0x6004, 0x9082, 0x0085, 0x2008,
+	0x0804, 0xb29d, 0x9186, 0x0027, 0x1558, 0x080c, 0x8874, 0x080c,
+	0x3006, 0x080c, 0xbf76, 0x0096, 0x6014, 0x2048, 0x080c, 0xb847,
+	0x0150, 0xa867, 0x0103, 0xa877, 0x0000, 0xa87b, 0x0029, 0x080c,
+	0x6996, 0x080c, 0xba36, 0x009e, 0x080c, 0x9be7, 0x0005, 0x9186,
+	0x0089, 0x0118, 0x9186, 0x008a, 0x1140, 0x080c, 0x9ab7, 0x0128,
+	0x9086, 0x000c, 0x0904, 0xb2d5, 0x0000, 0x080c, 0x9ca2, 0x0c70,
+	0x9186, 0x0014, 0x1d60, 0x080c, 0x8874, 0x0096, 0x6014, 0x2048,
+	0x080c, 0xb847, 0x0d00, 0xa867, 0x0103, 0xa877, 0x0000, 0xa87b,
+	0x0006, 0xa880, 0xc0ec, 0xa882, 0x0890, 0x0002, 0xb2ad, 0xb2ab,
+	0xb2ab, 0xb2ab, 0xb2ab, 0xb2ab, 0xb2c1, 0xb2ab, 0xb2ab, 0xb2ab,
+	0xb2ab, 0xb2ab, 0xb2ab, 0x080c, 0x0d65, 0x6034, 0x908c, 0xff00,
+	0x810f, 0x9186, 0x0039, 0x0118, 0x9186, 0x0035, 0x1118, 0x2001,
+	0x1957, 0x0010, 0x2001, 0x1958, 0x2004, 0x601a, 0x6003, 0x000c,
+	0x0005, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039, 0x0118,
+	0x9186, 0x0035, 0x1118, 0x2001, 0x1957, 0x0010, 0x2001, 0x1958,
+	0x2004, 0x601a, 0x6003, 0x000e, 0x0005, 0x9182, 0x0092, 0x1220,
+	0x9182, 0x0085, 0x0208, 0x0012, 0x0804, 0x9ca2, 0xb2eb, 0xb2eb,
+	0xb2eb, 0xb2eb, 0xb2ed, 0xb33a, 0xb2eb, 0xb2eb, 0xb2eb, 0xb2eb,
+	0xb2eb, 0xb2eb, 0xb2eb, 0x080c, 0x0d65, 0x0096, 0x6010, 0x00b6,
+	0x2058, 0xb800, 0x00be, 0xd0bc, 0x0168, 0x6034, 0x908c, 0xff00,
+	0x810f, 0x9186, 0x0039, 0x0118, 0x9186, 0x0035, 0x1118, 0x009e,
+	0x0804, 0xb34e, 0x080c, 0xb847, 0x1118, 0x080c, 0xba36, 0x0068,
+	0x6014, 0x2048, 0x080c, 0xbf8d, 0x1110, 0x080c, 0xba36, 0xa867,
+	0x0103, 0x080c, 0xbf41, 0x080c, 0x6996, 0x00d6, 0x2c68, 0x080c,
+	0x9b91, 0x01d0, 0x6003, 0x0001, 0x6007, 0x001e, 0x600b, 0xffff,
+	0x2009, 0x026e, 0x210c, 0x613a, 0x2009, 0x026f, 0x210c, 0x613e,
+	0x6910, 0x6112, 0x080c, 0xbcdb, 0x695c, 0x615e, 0x6023, 0x0001,
+	0x2009, 0x8020, 0x080c, 0x84d1, 0x2d60, 0x00de, 0x080c, 0x9be7,
+	0x009e, 0x0005, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc,
+	0x05a0, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0035, 0x0130,
+	0x9186, 0x001e, 0x0118, 0x9186, 0x0039, 0x1538, 0x00d6, 0x2c68,
+	0x080c, 0xbed9, 0x11f0, 0x080c, 0x9b91, 0x01d8, 0x6106, 0x6003,
+	0x0001, 0x6023, 0x0001, 0x6910, 0x6112, 0x692c, 0x612e, 0x6930,
+	0x6132, 0x6934, 0x918c, 0x00ff, 0x6136, 0x6938, 0x613a, 0x693c,
+	0x613e, 0x695c, 0x615e, 0x080c, 0xbcdb, 0x2009, 0x8020, 0x080c,
+	0x84d1, 0x2d60, 0x00de, 0x0804, 0x9be7, 0x0096, 0x6014, 0x2048,
+	0x080c, 0xb847, 0x01c8, 0xa867, 0x0103, 0xa880, 0xd0b4, 0x0128,
+	0xc0ec, 0xa882, 0xa87b, 0x0006, 0x0048, 0xd0bc, 0x0118, 0xa87b,
+	0x0002, 0x0020, 0xa87b, 0x0005, 0x080c, 0xbb4b, 0xa877, 0x0000,
+	0x080c, 0x6996, 0x080c, 0xba36, 0x009e, 0x0804, 0x9be7, 0x0016,
+	0x0096, 0x6014, 0x2048, 0x080c, 0xb847, 0x0140, 0xa867, 0x0103,
+	0xa87b, 0x0028, 0xa877, 0x0000, 0x080c, 0x6996, 0x009e, 0x001e,
+	0x9186, 0x0013, 0x0158, 0x9186, 0x0014, 0x0130, 0x9186, 0x0027,
+	0x0118, 0x080c, 0x9ca2, 0x0020, 0x080c, 0x8874, 0x080c, 0x9c21,
+	0x0005, 0x0056, 0x0066, 0x0096, 0x00a6, 0x2029, 0x0001, 0x9182,
+	0x0101, 0x1208, 0x0010, 0x2009, 0x0100, 0x2130, 0x8304, 0x9098,
+	0x0018, 0x2009, 0x0020, 0x2011, 0x0029, 0x080c, 0xb41a, 0x96b2,
+	0x0020, 0xb004, 0x904d, 0x0110, 0x080c, 0x0fd4, 0x080c, 0x1022,
+	0x0520, 0x8528, 0xa867, 0x0110, 0xa86b, 0x0000, 0x2920, 0xb406,
+	0x968a, 0x003d, 0x1228, 0x2608, 0x2011, 0x001b, 0x0499, 0x00a8,
+	0x96b2, 0x003c, 0x2009, 0x003c, 0x2950, 0x2011, 0x001b, 0x0451,
+	0x0c28, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad,
+	0x0003, 0xb566, 0x95ac, 0x0000, 0x0048, 0x2001, 0x0205, 0x2003,
+	0x0000, 0x00ae, 0x852f, 0x95ad, 0x0003, 0xb566, 0x009e, 0x006e,
+	0x005e, 0x0005, 0x00a6, 0x89ff, 0x0158, 0xa804, 0x9055, 0x0130,
+	0xa807, 0x0000, 0x080c, 0x6996, 0x2a48, 0x0cb8, 0x080c, 0x6996,
+	0x00ae, 0x0005, 0x00f6, 0x2079, 0x0200, 0x7814, 0x9085, 0x0080,
+	0x7816, 0xd184, 0x0108, 0x8108, 0x810c, 0x20a9, 0x0001, 0xa860,
+	0x20e8, 0xa85c, 0x9200, 0x20a0, 0x20e1, 0x0000, 0x2300, 0x9e00,
+	0x2098, 0x4003, 0x8318, 0x9386, 0x0020, 0x1148, 0x2018, 0x2300,
+	0x9e00, 0x2098, 0x7814, 0x8000, 0x9085, 0x0080, 0x7816, 0x8109,
+	0x1d80, 0x7817, 0x0000, 0x00fe, 0x0005, 0x0066, 0x0126, 0x2091,
+	0x8000, 0x2031, 0x0001, 0x6020, 0x9084, 0x000f, 0x0083, 0x012e,
+	0x006e, 0x0005, 0x0126, 0x2091, 0x8000, 0x0066, 0x2031, 0x0000,
+	0x6020, 0x9084, 0x000f, 0x001b, 0x006e, 0x012e, 0x0005, 0xb497,
+	0xb497, 0xb492, 0xb4bb, 0xb46f, 0xb492, 0xb471, 0xb492, 0xb46f,
+	0xb46f, 0xb492, 0xb492, 0xb492, 0xb46f, 0xb46f, 0xb46f, 0x080c,
+	0x0d65, 0x6010, 0x9080, 0x0000, 0x2004, 0xd0bc, 0x190c, 0xb4bb,
+	0x0036, 0x6014, 0x0096, 0x2048, 0xa880, 0x009e, 0xd0cc, 0x0118,
+	0x2019, 0x000c, 0x0038, 0xd094, 0x0118, 0x2019, 0x000d, 0x0010,
+	0x2019, 0x0010, 0x080c, 0xcdf9, 0x6023, 0x0006, 0x6003, 0x0007,
+	0x003e, 0x0005, 0x9006, 0x0005, 0x9085, 0x0001, 0x0005, 0x0096,
+	0x86ff, 0x11e8, 0x6014, 0x2048, 0x080c, 0xb847, 0x01d0, 0x6043,
+	0xffff, 0xa864, 0x9086, 0x0139, 0x1128, 0xa87b, 0x0005, 0xa883,
+	0x0000, 0x0028, 0x900e, 0x2001, 0x0005, 0x080c, 0x6bb3, 0x080c,
+	0xbb4b, 0x080c, 0x698a, 0x080c, 0x9c21, 0x9085, 0x0001, 0x009e,
+	0x0005, 0x9006, 0x0ce0, 0x080c, 0x98c8, 0x080c, 0xbf9b, 0x6000,
+	0x908a, 0x0016, 0x1a0c, 0x0d65, 0x002b, 0x0106, 0x080c, 0x98e4,
+	0x010e, 0x0005, 0xb4da, 0xb508, 0xb4dc, 0xb52f, 0xb503, 0xb4da,
+	0xb492, 0xb497, 0xb497, 0xb492, 0xb492, 0xb492, 0xb492, 0xb492,
+	0xb492, 0xb492, 0x080c, 0x0d65, 0x86ff, 0x1510, 0x6020, 0x9086,
+	0x0006, 0x01f0, 0x0096, 0x6014, 0x2048, 0x080c, 0xb847, 0x0158,
+	0xa87c, 0xd0cc, 0x0130, 0x0096, 0xa878, 0x2048, 0x080c, 0x0fd4,
+	0x009e, 0x080c, 0xbb4b, 0x009e, 0x080c, 0xbf1b, 0x6007, 0x0085,
+	0x6003, 0x000b, 0x6023, 0x0002, 0x2009, 0x8020, 0x080c, 0x84b3,
+	0x9085, 0x0001, 0x0005, 0x0066, 0x080c, 0x1914, 0x006e, 0x08a0,
+	0x00e6, 0x2071, 0x19b8, 0x7030, 0x9c06, 0x1120, 0x080c, 0x9206,
+	0x00ee, 0x0850, 0x6020, 0x9084, 0x000f, 0x9086, 0x0006, 0x1150,
+	0x0086, 0x0096, 0x2049, 0x0001, 0x2c40, 0x080c, 0x9382, 0x009e,
+	0x008e, 0x0040, 0x0066, 0x080c, 0x9102, 0x190c, 0x0d65, 0x080c,
+	0x9110, 0x006e, 0x00ee, 0x1904, 0xb4dc, 0x0804, 0xb492, 0x0036,
+	0x00e6, 0x2071, 0x19b8, 0x704c, 0x9c06, 0x1138, 0x901e, 0x080c,
+	0x9286, 0x00ee, 0x003e, 0x0804, 0xb4dc, 0x080c, 0x94b8, 0x00ee,
+	0x003e, 0x1904, 0xb4dc, 0x0804, 0xb492, 0x00c6, 0x0066, 0x6020,
+	0x9084, 0x000f, 0x001b, 0x006e, 0x00ce, 0x0005, 0xb565, 0xb627,
+	0xb78e, 0xb56d, 0x9c21, 0xb565, 0xcdeb, 0xbf83, 0xb627, 0xb55e,
+	0xb80d, 0xb55e, 0xb55e, 0xb55e, 0xb55e, 0xb55e, 0x080c, 0x0d65,
+	0x080c, 0xba5c, 0x1110, 0x080c, 0xa58f, 0x0005, 0x080c, 0x8874,
+	0x0804, 0x9be7, 0x601b, 0x0001, 0x0005, 0x080c, 0xb847, 0x0130,
+	0x6014, 0x0096, 0x2048, 0x2c00, 0xa896, 0x009e, 0x080c, 0x98c8,
+	0x080c, 0xbf9b, 0x6000, 0x908a, 0x0016, 0x1a0c, 0x0d65, 0x0013,
+	0x0804, 0x98e4, 0xb592, 0xb594, 0xb5be, 0xb5d2, 0xb5fd, 0xb592,
+	0xb565, 0xb565, 0xb565, 0xb5d9, 0xb5d9, 0xb592, 0xb592, 0xb592,
+	0xb592, 0xb5e3, 0x080c, 0x0d65, 0x00e6, 0x6014, 0x0096, 0x2048,
+	0xa880, 0xc0b5, 0xa882, 0x009e, 0x2071, 0x19b8, 0x7030, 0x9c06,
+	0x01d0, 0x0066, 0x080c, 0x9102, 0x190c, 0x0d65, 0x080c, 0x9110,
+	0x006e, 0x080c, 0xbf1b, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023,
+	0x0002, 0x2001, 0x1958, 0x2004, 0x601a, 0x2009, 0x8020, 0x080c,
+	0x84b3, 0x00ee, 0x0005, 0x601b, 0x0001, 0x0cd8, 0x0096, 0x6014,
+	0x2048, 0xa880, 0xc0b5, 0xa882, 0x009e, 0x080c, 0xbf1b, 0x6007,
+	0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x2009, 0x8020, 0x080c,
+	0x84b3, 0x0005, 0x080c, 0x98c8, 0x080c, 0x9a39, 0x080c, 0x98e4,
+	0x0c28, 0x0096, 0x601b, 0x0001, 0x6014, 0x2048, 0xa880, 0xc0b5,
+	0xa882, 0x009e, 0x0005, 0x080c, 0x5395, 0x01a8, 0x6014, 0x0096,
+	0x904d, 0x0180, 0xa864, 0xa867, 0x0103, 0xa87b, 0x0006, 0x9086,
+	0x0139, 0x1140, 0xa867, 0x0139, 0xa897, 0x4005, 0xa89b, 0x0004,
+	0x080c, 0x6996, 0x009e, 0x0804, 0x9be7, 0x6014, 0x0096, 0x904d,
+	0x0508, 0x080c, 0xbf87, 0x01f0, 0x080c, 0x98e4, 0x2001, 0x180f,
+	0x2004, 0xd0c4, 0x0110, 0x009e, 0x0005, 0xa884, 0x009e, 0x8003,
+	0x800b, 0x810b, 0x9108, 0x611a, 0x2001, 0x0037, 0x2c08, 0x080c,
+	0x159e, 0x6000, 0x9086, 0x0004, 0x1120, 0x2009, 0x0048, 0x080c,
+	0x9c85, 0x0005, 0x009e, 0x080c, 0x1914, 0x0804, 0xb5be, 0x6000,
+	0x908a, 0x0016, 0x1a0c, 0x0d65, 0x000b, 0x0005, 0xb63e, 0xb56a,
+	0xb640, 0xb63e, 0xb640, 0xb640, 0xb566, 0xb63e, 0xb560, 0xb560,
+	0xb63e, 0xb63e, 0xb63e, 0xb63e, 0xb63e, 0xb63e, 0x080c, 0x0d65,
+	0x6010, 0x00b6, 0x2058, 0xb804, 0x9084, 0x00ff, 0x00be, 0x908a,
+	0x000c, 0x1a0c, 0x0d65, 0x00b6, 0x0013, 0x00be, 0x0005, 0xb65b,
+	0xb728, 0xb65d, 0xb69d, 0xb65d, 0xb69d, 0xb65d, 0xb66b, 0xb65b,
+	0xb69d, 0xb65b, 0xb68c, 0x080c, 0x0d65, 0x6004, 0x908e, 0x0016,
+	0x05c0, 0x908e, 0x0004, 0x05a8, 0x908e, 0x0002, 0x0590, 0x908e,
+	0x0052, 0x0904, 0xb724, 0x6004, 0x080c, 0xba5c, 0x0904, 0xb741,
+	0x908e, 0x0004, 0x1110, 0x080c, 0x303b, 0x908e, 0x0021, 0x0904,
+	0xb745, 0x908e, 0x0022, 0x0904, 0xb789, 0x908e, 0x003d, 0x0904,
+	0xb745, 0x908e, 0x0039, 0x0904, 0xb749, 0x908e, 0x0035, 0x0904,
+	0xb749, 0x908e, 0x001e, 0x0178, 0x908e, 0x0001, 0x1140, 0x6010,
+	0x2058, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x0110, 0x080c,
+	0x3006, 0x080c, 0xa58f, 0x0804, 0x9c21, 0x00c6, 0x00d6, 0x6104,
+	0x9186, 0x0016, 0x0904, 0xb715, 0x9186, 0x0002, 0x1904, 0xb6ea,
+	0x2001, 0x1836, 0x2004, 0xd08c, 0x11c8, 0x080c, 0x70b7, 0x11b0,
+	0x080c, 0xbf61, 0x0138, 0x080c, 0x70da, 0x1120, 0x080c, 0x6fc2,
+	0x0804, 0xb772, 0x2001, 0x194e, 0x2003, 0x0001, 0x2001, 0x1800,
+	0x2003, 0x0001, 0x080c, 0x6fe8, 0x0804, 0xb772, 0x6010, 0x2058,
+	0x2001, 0x1836, 0x2004, 0xd0ac, 0x1904, 0xb772, 0xb8a0, 0x9084,
+	0xff80, 0x1904, 0xb772, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0190,
+	0x8001, 0xb842, 0x6017, 0x0000, 0x6023, 0x0007, 0x601b, 0x0398,
+	0x604b, 0x0000, 0x080c, 0x9b91, 0x0128, 0x2b00, 0x6012, 0x6023,
+	0x0001, 0x0458, 0x00de, 0x00ce, 0x6004, 0x908e, 0x0002, 0x11a0,
+	0x6010, 0x2058, 0xb8a0, 0x9086, 0x007e, 0x1170, 0x2009, 0x1836,
+	0x2104, 0xc085, 0x200a, 0x00e6, 0x2071, 0x1800, 0x080c, 0x5c6f,
+	0x00ee, 0x080c, 0xa58f, 0x0030, 0x080c, 0xa58f, 0x080c, 0x3006,
+	0x080c, 0xbf76, 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x303b,
+	0x012e, 0x00ee, 0x080c, 0x9c21, 0x0005, 0x2001, 0x0002, 0x080c,
+	0x61c1, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x84d8, 0x080c,
+	0x8936, 0x00de, 0x00ce, 0x0c80, 0x080c, 0x303b, 0x0804, 0xb699,
+	0x00c6, 0x00d6, 0x6104, 0x9186, 0x0016, 0x0d38, 0x6010, 0x2058,
+	0xb840, 0x9084, 0x00ff, 0x9005, 0x0904, 0xb6ea, 0x8001, 0xb842,
+	0x6003, 0x0001, 0x080c, 0x84d8, 0x080c, 0x8936, 0x00de, 0x00ce,
+	0x0898, 0x080c, 0xa58f, 0x0804, 0xb69b, 0x080c, 0xa5cb, 0x0804,
+	0xb69b, 0x00d6, 0x2c68, 0x6104, 0x080c, 0xbed9, 0x00de, 0x0118,
+	0x080c, 0x9be7, 0x00f0, 0x6004, 0x8007, 0x6134, 0x918c, 0x00ff,
+	0x9105, 0x6036, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002,
+	0x603c, 0x600a, 0x2001, 0x1958, 0x2004, 0x601a, 0x602c, 0x2c08,
+	0x2060, 0x6024, 0xc0b5, 0x6026, 0x2160, 0x2009, 0x8020, 0x080c,
+	0x84d1, 0x0005, 0x00de, 0x00ce, 0x080c, 0xa58f, 0x080c, 0x3006,
+	0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x303b, 0x6017, 0x0000,
+	0x6023, 0x0007, 0x601b, 0x0398, 0x604b, 0x0000, 0x012e, 0x00ee,
+	0x0005, 0x080c, 0xa022, 0x1904, 0xb741, 0x0005, 0x6000, 0x908a,
+	0x0016, 0x1a0c, 0x0d65, 0x0096, 0x00d6, 0x001b, 0x00de, 0x009e,
+	0x0005, 0xb7a9, 0xb7a9, 0xb7a9, 0xb7a9, 0xb7a9, 0xb7a9, 0xb7a9,
+	0xb7a9, 0xb7a9, 0xb565, 0xb7a9, 0xb56a, 0xb7ab, 0xb56a, 0xb7b8,
+	0xb7a9, 0x080c, 0x0d65, 0x6004, 0x9086, 0x008b, 0x0148, 0x6007,
+	0x008b, 0x6003, 0x000d, 0x2009, 0x8020, 0x080c, 0x84d1, 0x0005,
+	0x080c, 0xbf55, 0x0118, 0x080c, 0xbf68, 0x0010, 0x080c, 0xbf76,
+	0x080c, 0xba36, 0x080c, 0xb847, 0x0570, 0x080c, 0x3006, 0x080c,
+	0xb847, 0x0168, 0x6014, 0x2048, 0xa867, 0x0103, 0xa87b, 0x0006,
+	0xa877, 0x0000, 0xa880, 0xc0ed, 0xa882, 0x080c, 0x6996, 0x2c68,
+	0x080c, 0x9b91, 0x0150, 0x6810, 0x6012, 0x080c, 0xbcdb, 0x00c6,
+	0x2d60, 0x080c, 0x9c21, 0x00ce, 0x0008, 0x2d60, 0x6017, 0x0000,
+	0x6023, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x84d8,
+	0x080c, 0x8936, 0x00c8, 0x080c, 0xbf55, 0x0138, 0x6034, 0x9086,
+	0x4000, 0x1118, 0x080c, 0x3006, 0x08d0, 0x6034, 0x908c, 0xff00,
+	0x810f, 0x9186, 0x0039, 0x0118, 0x9186, 0x0035, 0x1118, 0x080c,
+	0x3006, 0x0868, 0x080c, 0x9c21, 0x0005, 0x6000, 0x908a, 0x0016,
+	0x1a0c, 0x0d65, 0x0002, 0xb823, 0xb823, 0xb825, 0xb825, 0xb825,
+	0xb823, 0xb823, 0x9c21, 0xb823, 0xb823, 0xb823, 0xb823, 0xb823,
+	0xb823, 0xb823, 0xb823, 0x080c, 0x0d65, 0x080c, 0x98c8, 0x080c,
+	0x9a39, 0x080c, 0x98e4, 0x6114, 0x0096, 0x2148, 0xa87b, 0x0006,
+	0x080c, 0x6996, 0x009e, 0x0804, 0x9be7, 0x9284, 0x0003, 0x1158,
+	0x9282, 0x1ddc, 0x0240, 0x2001, 0x1819, 0x2004, 0x9202, 0x1218,
+	0x9085, 0x0001, 0x0005, 0x9006, 0x0ce8, 0x0096, 0x0028, 0x0096,
+	0x0006, 0x6014, 0x2048, 0x000e, 0x0006, 0x9984, 0xf000, 0x9086,
+	0xf000, 0x0110, 0x080c, 0x10cd, 0x000e, 0x009e, 0x0005, 0x00e6,
+	0x00c6, 0x0036, 0x0006, 0x0126, 0x2091, 0x8000, 0x2061, 0x1ddc,
+	0x2071, 0x1800, 0x7350, 0x7070, 0x9302, 0x1640, 0x6020, 0x9206,
+	0x11f8, 0x080c, 0xbf61, 0x0180, 0x9286, 0x0001, 0x1168, 0x6004,
+	0x9086, 0x0004, 0x1148, 0x080c, 0x3006, 0x080c, 0xbf76, 0x00c6,
+	0x080c, 0x9c21, 0x00ce, 0x0060, 0x080c, 0xbc4d, 0x0148, 0x080c,
+	0xba5c, 0x1110, 0x080c, 0xa58f, 0x00c6, 0x080c, 0x9be7, 0x00ce,
+	0x9ce0, 0x001c, 0x7064, 0x9c02, 0x1208, 0x08a0, 0x012e, 0x000e,
+	0x003e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0016, 0x9188,
+	0x1000, 0x210c, 0x81ff, 0x0128, 0x2061, 0x1b02, 0x6112, 0x080c,
+	0x3006, 0x9006, 0x0010, 0x9085, 0x0001, 0x001e, 0x00ce, 0x00ee,
+	0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9b91, 0x01b0,
+	0x665e, 0x2b00, 0x6012, 0x080c, 0x5395, 0x0118, 0x080c, 0xb978,
+	0x0168, 0x080c, 0xbcdb, 0x6023, 0x0003, 0x2009, 0x004b, 0x080c,
+	0x9c85, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8,
+	0x00c6, 0x0126, 0x2091, 0x8000, 0xbaa0, 0x080c, 0x9c58, 0x0580,
+	0x605f, 0x0000, 0x2b00, 0x6012, 0x080c, 0xbcdb, 0x6023, 0x0003,
+	0x0016, 0x080c, 0x98c8, 0x080c, 0x863b, 0x0076, 0x903e, 0x080c,
+	0x852a, 0x2c08, 0x080c, 0xcfc8, 0x007e, 0x080c, 0x98e4, 0x001e,
+	0xd184, 0x0128, 0x080c, 0x9be7, 0x9085, 0x0001, 0x0070, 0x080c,
+	0x5395, 0x0128, 0xd18c, 0x1170, 0x080c, 0xb978, 0x0148, 0x2009,
+	0x004c, 0x080c, 0x9c85, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005,
+	0x9006, 0x0cd8, 0x2900, 0x6016, 0x0c90, 0x2009, 0x004d, 0x0010,
+	0x2009, 0x004e, 0x00f6, 0x00c6, 0x0046, 0x0016, 0x080c, 0x9b91,
+	0x2c78, 0x0590, 0x7e5e, 0x2b00, 0x7812, 0x7823, 0x0003, 0x2021,
+	0x0005, 0x080c, 0xb98a, 0x9186, 0x004d, 0x0118, 0x9186, 0x004e,
+	0x0148, 0x2001, 0x1951, 0x200c, 0xd1fc, 0x0168, 0x2f60, 0x080c,
+	0x9be7, 0x00d0, 0x2001, 0x1950, 0x200c, 0xd1fc, 0x0120, 0x2f60,
+	0x080c, 0x9be7, 0x0088, 0x2f60, 0x080c, 0x5395, 0x0138, 0xd18c,
+	0x1118, 0x04f1, 0x0148, 0x0010, 0x2900, 0x7816, 0x001e, 0x0016,
+	0x080c, 0x9c85, 0x9085, 0x0001, 0x001e, 0x004e, 0x00ce, 0x00fe,
+	0x0005, 0x00f6, 0x00c6, 0x0046, 0x080c, 0x9b91, 0x2c78, 0x0508,
+	0x7e5e, 0x2b00, 0x7812, 0x7823, 0x0003, 0x0096, 0x2021, 0x0004,
+	0x0489, 0x009e, 0x2001, 0x194f, 0x200c, 0xd1fc, 0x0120, 0x2f60,
+	0x080c, 0x9be7, 0x0060, 0x2f60, 0x080c, 0x5395, 0x0120, 0xd18c,
+	0x1160, 0x0071, 0x0130, 0x2009, 0x0052, 0x080c, 0x9c85, 0x9085,
+	0x0001, 0x004e, 0x00ce, 0x00fe, 0x0005, 0x2900, 0x7816, 0x0c98,
+	0x00c6, 0x080c, 0x4878, 0x00ce, 0x1120, 0x080c, 0x9be7, 0x9006,
+	0x0005, 0xa867, 0x0000, 0xa86b, 0x8000, 0x2900, 0x6016, 0x9085,
+	0x0001, 0x0005, 0x0096, 0x0076, 0x0126, 0x2091, 0x8000, 0x080c,
+	0x98c8, 0x080c, 0x644f, 0x0158, 0x2001, 0xb991, 0x0006, 0x900e,
+	0x2400, 0x080c, 0x6bb3, 0x080c, 0x6996, 0x000e, 0x0807, 0x2418,
+	0x080c, 0x883a, 0xbaa0, 0x0086, 0x2041, 0x0001, 0x2039, 0x0001,
+	0x2608, 0x080c, 0x8655, 0x008e, 0x080c, 0x852a, 0x2f08, 0x2648,
+	0x080c, 0xcfc8, 0xb93c, 0x81ff, 0x090c, 0x872c, 0x080c, 0x98e4,
+	0x012e, 0x007e, 0x009e, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000,
+	0x080c, 0x9b91, 0x0190, 0x660a, 0x2b08, 0x6112, 0x080c, 0xbcdb,
+	0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x001f, 0x080c, 0x9c85,
+	0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6,
+	0x0126, 0x2091, 0x8000, 0x080c, 0x9c58, 0x01b8, 0x660a, 0x2b08,
+	0x6112, 0x080c, 0xbcdb, 0x6023, 0x0008, 0x2900, 0x6016, 0x00f6,
+	0x2c78, 0x080c, 0x164f, 0x00fe, 0x2009, 0x0021, 0x080c, 0x9c85,
+	0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2009,
+	0x003d, 0x00c6, 0x0126, 0x0016, 0x2091, 0x8000, 0x080c, 0x9b91,
+	0x0198, 0x660a, 0x2b08, 0x6112, 0x080c, 0xbcdb, 0x6023, 0x0001,
+	0x2900, 0x6016, 0x001e, 0x0016, 0x080c, 0x9c85, 0x9085, 0x0001,
+	0x001e, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd0, 0x00c6, 0x0126,
+	0x2091, 0x8000, 0x080c, 0x9c58, 0x0188, 0x2b08, 0x6112, 0x080c,
+	0xbcdb, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x0000, 0x080c,
+	0x9c85, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8,
+	0x2009, 0x0044, 0x0830, 0x2009, 0x0049, 0x0818, 0x0026, 0x00b6,
+	0x6210, 0x2258, 0xba3c, 0x82ff, 0x0118, 0x8211, 0xba3e, 0x1140,
+	0xb8c0, 0x9005, 0x0128, 0xb888, 0x9005, 0x1110, 0xb88b, 0x0001,
+	0x00be, 0x002e, 0x0005, 0x0006, 0x0016, 0x6004, 0x908e, 0x0002,
+	0x0140, 0x908e, 0x0003, 0x0128, 0x908e, 0x0004, 0x0110, 0x9085,
+	0x0001, 0x001e, 0x000e, 0x0005, 0x0006, 0x0096, 0x6020, 0x9086,
+	0x0004, 0x0190, 0x6014, 0x904d, 0x080c, 0xb847, 0x0168, 0xa864,
+	0x9086, 0x0139, 0x0158, 0x6020, 0x9086, 0x0003, 0x0128, 0xa868,
+	0xd0fc, 0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x009e, 0x000e,
+	0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9c58, 0x0198,
+	0x2b08, 0x6112, 0x080c, 0xbcdb, 0x6023, 0x0001, 0x2900, 0x6016,
+	0x080c, 0x3006, 0x2009, 0x0028, 0x080c, 0x9c85, 0x9085, 0x0001,
+	0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x9186, 0x0015, 0x11a8,
+	0x2011, 0x1823, 0x2204, 0x9086, 0x0074, 0x1178, 0x00b6, 0x080c,
+	0xa818, 0x00be, 0x080c, 0xaa57, 0x6003, 0x0001, 0x6007, 0x0029,
+	0x080c, 0x84d8, 0x080c, 0x8936, 0x0078, 0x6014, 0x0096, 0x2048,
+	0xa868, 0x009e, 0xd0fc, 0x0148, 0x2001, 0x0001, 0x080c, 0xbe9a,
+	0x080c, 0xa58f, 0x080c, 0x9be7, 0x0005, 0x0096, 0x6014, 0x904d,
+	0x090c, 0x0d65, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, 0x4005,
+	0xa89b, 0x0004, 0xa867, 0x0139, 0x0126, 0x2091, 0x8000, 0x080c,
+	0x6996, 0x012e, 0x009e, 0x080c, 0x9be7, 0x0c30, 0x0096, 0x9186,
+	0x0016, 0x1128, 0x2001, 0x0004, 0x080c, 0x61c1, 0x00e8, 0x9186,
+	0x0015, 0x1510, 0x2011, 0x1823, 0x2204, 0x9086, 0x0014, 0x11e0,
+	0x6010, 0x00b6, 0x2058, 0x080c, 0x630b, 0x00be, 0x080c, 0xab28,
+	0x1198, 0x6010, 0x00b6, 0x2058, 0xb890, 0x00be, 0x9005, 0x0160,
+	0x2001, 0x0006, 0x080c, 0x61c1, 0x6014, 0x2048, 0xa868, 0xd0fc,
+	0x0170, 0x080c, 0x9ff6, 0x0048, 0x6014, 0x2048, 0xa868, 0xd0fc,
+	0x0528, 0x080c, 0xa58f, 0x080c, 0x9be7, 0x009e, 0x0005, 0x6014,
+	0x6310, 0x2358, 0x904d, 0x090c, 0x0d65, 0xa87b, 0x0000, 0xa883,
+	0x0000, 0xa897, 0x4000, 0x900e, 0x080c, 0x655f, 0x1108, 0xc185,
+	0xb800, 0xd0bc, 0x0108, 0xc18d, 0xa99a, 0x0126, 0x2091, 0x8000,
+	0x080c, 0x6996, 0x012e, 0x080c, 0x9be7, 0x08f8, 0x6014, 0x904d,
+	0x090c, 0x0d65, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897, 0x4005,
+	0xa89b, 0x0004, 0xa867, 0x0139, 0x0126, 0x2091, 0x8000, 0x080c,
+	0x6996, 0x012e, 0x080c, 0x9be7, 0x0840, 0xa878, 0x9086, 0x0005,
+	0x1108, 0x0009, 0x0005, 0xa880, 0xc0ad, 0xa882, 0x0005, 0x604b,
+	0x0000, 0x6017, 0x0000, 0x6003, 0x0001, 0x6007, 0x0050, 0x2009,
+	0x8023, 0x080c, 0x84d1, 0x0005, 0x00c6, 0x6010, 0x00b6, 0x2058,
+	0xb800, 0x00be, 0xd0bc, 0x0130, 0x0066, 0x6020, 0x9084, 0x000f,
+	0x001b, 0x006e, 0x00ce, 0x0005, 0xb565, 0xbb7e, 0xbb7e, 0xbb81,
+	0xd2c2, 0xd2dd, 0xd2e0, 0xb565, 0xb565, 0xb565, 0xb565, 0xb565,
+	0xb565, 0xb565, 0xb565, 0xb565, 0x080c, 0x0d65, 0xa001, 0xa001,
+	0x0005, 0x0096, 0x6014, 0x904d, 0x0118, 0xa87c, 0xd0e4, 0x1110,
+	0x009e, 0x0010, 0x009e, 0x0005, 0x6010, 0x00b6, 0x2058, 0xb800,
+	0x00be, 0xd0bc, 0x0550, 0x2001, 0x1833, 0x2004, 0x9005, 0x1540,
+	0x00f6, 0x2c78, 0x080c, 0x9b91, 0x0508, 0x7810, 0x6012, 0x080c,
+	0xbcdb, 0x7820, 0x9086, 0x0003, 0x0128, 0x7808, 0x603a, 0x2f00,
+	0x603e, 0x0020, 0x7808, 0x603e, 0x2f00, 0x603a, 0x602e, 0x6023,
+	0x0001, 0x6007, 0x0035, 0x6003, 0x0001, 0x795c, 0x615e, 0x2009,
+	0x8020, 0x080c, 0x84d1, 0x2f60, 0x00fe, 0x0005, 0x2f60, 0x00fe,
+	0x2001, 0x1959, 0x2004, 0x604a, 0x0005, 0x0016, 0x0096, 0x6814,
+	0x2048, 0x681c, 0xd0fc, 0xc0fc, 0x681e, 0xa87c, 0x1108, 0xd0e4,
+	0x0180, 0xc0e4, 0xa87e, 0xa877, 0x0000, 0xa893, 0x0000, 0xa88f,
+	0x0000, 0xd0cc, 0x0130, 0xc0cc, 0xa87e, 0xa878, 0x2048, 0x080c,
+	0x0fd4, 0x6830, 0x6036, 0x908e, 0x0001, 0x0148, 0x6803, 0x0002,
+	0x9086, 0x0005, 0x0170, 0x9006, 0x602e, 0x6032, 0x00d0, 0x681c,
+	0xc085, 0x681e, 0x6803, 0x0004, 0x6824, 0xc0f4, 0x9085, 0x0c00,
+	0x6826, 0x6814, 0x2048, 0xa8ac, 0x6938, 0x9102, 0xa8b0, 0x693c,
+	0x9103, 0x1e48, 0x683c, 0x602e, 0x6838, 0x9084, 0xfffc, 0x683a,
+	0x6032, 0x2d00, 0x603a, 0x6808, 0x603e, 0x6910, 0x6112, 0x695c,
+	0x615e, 0x6023, 0x0001, 0x6007, 0x0039, 0x6003, 0x0001, 0x2009,
+	0x8020, 0x080c, 0x84d1, 0x009e, 0x001e, 0x0005, 0x6024, 0xd0d4,
+	0x0510, 0xd0f4, 0x11f8, 0x6038, 0x940a, 0x603c, 0x9303, 0x0230,
+	0x9105, 0x0120, 0x6024, 0xc0d4, 0xc0f5, 0x0098, 0x643a, 0x633e,
+	0xac3e, 0xab42, 0x0046, 0x0036, 0x2400, 0xacac, 0x9402, 0xa836,
+	0x2300, 0xabb0, 0x9303, 0xa83a, 0x003e, 0x004e, 0x6024, 0xc0d4,
+	0x0000, 0x6026, 0x0005, 0xd0f4, 0x1138, 0xa83c, 0x603a, 0xa840,
+	0x603e, 0x6024, 0xc0f5, 0x6026, 0x0005, 0x0006, 0x0016, 0x6004,
+	0x908e, 0x0034, 0x01b8, 0x908e, 0x0035, 0x01a0, 0x908e, 0x0036,
+	0x0188, 0x908e, 0x0037, 0x0170, 0x908e, 0x0038, 0x0158, 0x908e,
+	0x0039, 0x0140, 0x908e, 0x003a, 0x0128, 0x908e, 0x003b, 0x0110,
+	0x9085, 0x0001, 0x001e, 0x000e, 0x0005, 0x0006, 0x0016, 0x0026,
+	0x0036, 0x00e6, 0x2001, 0x1953, 0x200c, 0x8000, 0x2014, 0x2001,
+	0x0032, 0x080c, 0x8419, 0x2001, 0x1957, 0x82ff, 0x1110, 0x2011,
+	0x0014, 0x2202, 0x2001, 0x1955, 0x200c, 0x8000, 0x2014, 0x2071,
+	0x193d, 0x711a, 0x721e, 0x2001, 0x0064, 0x080c, 0x8419, 0x2001,
+	0x1958, 0x82ff, 0x1110, 0x2011, 0x0014, 0x2202, 0x2001, 0x1959,
+	0x9288, 0x000a, 0x2102, 0x2001, 0x0017, 0x080c, 0x98b9, 0x2001,
+	0x1a59, 0x2102, 0x2001, 0x0032, 0x080c, 0x159e, 0x080c, 0x6648,
+	0x00ee, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x0006, 0x0016,
+	0x00e6, 0x2001, 0x1957, 0x2003, 0x0028, 0x2001, 0x1958, 0x2003,
+	0x0014, 0x2071, 0x193d, 0x701b, 0x0000, 0x701f, 0x07d0, 0x2001,
+	0x1959, 0x2009, 0x001e, 0x2102, 0x2001, 0x0017, 0x080c, 0x98b9,
+	0x2001, 0x1a59, 0x2102, 0x2001, 0x0032, 0x080c, 0x159e, 0x00ee,
+	0x001e, 0x000e, 0x0005, 0x0096, 0x6060, 0x904d, 0x0110, 0x080c,
+	0x1054, 0x009e, 0x0005, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000,
+	0x080c, 0x9b91, 0x0180, 0x2b08, 0x6112, 0x0ca9, 0x6023, 0x0001,
+	0x2900, 0x6016, 0x2009, 0x0033, 0x080c, 0x9c85, 0x9085, 0x0001,
+	0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x0096, 0x00e6, 0x00f6,
+	0x2071, 0x1800, 0x9186, 0x0015, 0x1500, 0x708c, 0x9086, 0x0018,
+	0x11e0, 0x6014, 0x2048, 0xaa3c, 0xd2e4, 0x1160, 0x2c78, 0x080c,
+	0x89f5, 0x01d8, 0x7078, 0xaa50, 0x9206, 0x1160, 0x707c, 0xaa54,
+	0x9206, 0x1140, 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be, 0x900e,
+	0x080c, 0x305b, 0x080c, 0x9ff6, 0x0020, 0x080c, 0xa58f, 0x080c,
+	0x9be7, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c, 0xaa54, 0x9206,
+	0x0d48, 0x0c80, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9b91,
+	0x0188, 0x2b08, 0x6112, 0x080c, 0xbcdb, 0x6023, 0x0001, 0x2900,
+	0x6016, 0x2009, 0x004d, 0x080c, 0x9c85, 0x9085, 0x0001, 0x012e,
 	0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000,
-	0x080c, 0x9c3d, 0x01b8, 0x660a, 0x2b08, 0x6112, 0x080c, 0xbcc0,
-	0x6023, 0x0008, 0x2900, 0x6016, 0x00f6, 0x2c78, 0x080c, 0x164f,
-	0x00fe, 0x2009, 0x0021, 0x080c, 0x9c6a, 0x9085, 0x0001, 0x012e,
-	0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2009, 0x003d, 0x00c6, 0x0126,
-	0x0016, 0x2091, 0x8000, 0x080c, 0x9b76, 0x0198, 0x660a, 0x2b08,
-	0x6112, 0x080c, 0xbcc0, 0x6023, 0x0001, 0x2900, 0x6016, 0x001e,
-	0x0016, 0x080c, 0x9c6a, 0x9085, 0x0001, 0x001e, 0x012e, 0x00ce,
-	0x0005, 0x9006, 0x0cd0, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c,
-	0x9c3d, 0x0188, 0x2b08, 0x6112, 0x080c, 0xbcc0, 0x6023, 0x0001,
-	0x2900, 0x6016, 0x2009, 0x0000, 0x080c, 0x9c6a, 0x9085, 0x0001,
-	0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2009, 0x0044, 0x0830,
-	0x2009, 0x0049, 0x0818, 0x0026, 0x00b6, 0x6210, 0x2258, 0xba3c,
-	0x82ff, 0x0118, 0x8211, 0xba3e, 0x1140, 0xb8c0, 0x9005, 0x0128,
-	0xb888, 0x9005, 0x1110, 0xb88b, 0x0001, 0x00be, 0x002e, 0x0005,
-	0x0006, 0x0016, 0x6004, 0x908e, 0x0002, 0x0140, 0x908e, 0x0003,
-	0x0128, 0x908e, 0x0004, 0x0110, 0x9085, 0x0001, 0x001e, 0x000e,
-	0x0005, 0x0006, 0x0096, 0x6020, 0x9086, 0x0004, 0x0190, 0x6014,
-	0x904d, 0x080c, 0xb82c, 0x0168, 0xa864, 0x9086, 0x0139, 0x0158,
-	0x6020, 0x9086, 0x0003, 0x0128, 0xa868, 0xd0fc, 0x0110, 0x9006,
-	0x0010, 0x9085, 0x0001, 0x009e, 0x000e, 0x0005, 0x00c6, 0x0126,
-	0x2091, 0x8000, 0x080c, 0x9c3d, 0x0198, 0x2b08, 0x6112, 0x080c,
-	0xbcc0, 0x6023, 0x0001, 0x2900, 0x6016, 0x080c, 0x3003, 0x2009,
-	0x0028, 0x080c, 0x9c6a, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005,
-	0x9006, 0x0cd8, 0x9186, 0x0015, 0x11a8, 0x2011, 0x1823, 0x2204,
-	0x9086, 0x0074, 0x1178, 0x00b6, 0x080c, 0xa7fd, 0x00be, 0x080c,
-	0xaa3c, 0x6003, 0x0001, 0x6007, 0x0029, 0x080c, 0x84b0, 0x080c,
-	0x890e, 0x0078, 0x6014, 0x0096, 0x2048, 0xa868, 0x009e, 0xd0fc,
-	0x0148, 0x2001, 0x0001, 0x080c, 0xbe7f, 0x080c, 0xa574, 0x080c,
-	0x9bcc, 0x0005, 0x0096, 0x6014, 0x904d, 0x090c, 0x0d65, 0xa87b,
-	0x0030, 0xa883, 0x0000, 0xa897, 0x4005, 0xa89b, 0x0004, 0xa867,
-	0x0139, 0x0126, 0x2091, 0x8000, 0x080c, 0x698f, 0x012e, 0x009e,
-	0x080c, 0x9bcc, 0x0c30, 0x0096, 0x9186, 0x0016, 0x1128, 0x2001,
-	0x0004, 0x080c, 0x61ba, 0x00e8, 0x9186, 0x0015, 0x1510, 0x2011,
-	0x1823, 0x2204, 0x9086, 0x0014, 0x11e0, 0x6010, 0x00b6, 0x2058,
-	0x080c, 0x6304, 0x00be, 0x080c, 0xab0d, 0x1198, 0x6010, 0x00b6,
-	0x2058, 0xb890, 0x00be, 0x9005, 0x0160, 0x2001, 0x0006, 0x080c,
-	0x61ba, 0x6014, 0x2048, 0xa868, 0xd0fc, 0x0170, 0x080c, 0x9fdb,
-	0x0048, 0x6014, 0x2048, 0xa868, 0xd0fc, 0x0528, 0x080c, 0xa574,
-	0x080c, 0x9bcc, 0x009e, 0x0005, 0x6014, 0x6310, 0x2358, 0x904d,
-	0x090c, 0x0d65, 0xa87b, 0x0000, 0xa883, 0x0000, 0xa897, 0x4000,
-	0x900e, 0x080c, 0x6558, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108,
-	0xc18d, 0xa99a, 0x0126, 0x2091, 0x8000, 0x080c, 0x698f, 0x012e,
-	0x080c, 0x9bcc, 0x08f8, 0x6014, 0x904d, 0x090c, 0x0d65, 0xa87b,
-	0x0030, 0xa883, 0x0000, 0xa897, 0x4005, 0xa89b, 0x0004, 0xa867,
-	0x0139, 0x0126, 0x2091, 0x8000, 0x080c, 0x698f, 0x012e, 0x080c,
-	0x9bcc, 0x0840, 0xa878, 0x9086, 0x0005, 0x1108, 0x0009, 0x0005,
-	0xa880, 0xc0ad, 0xa882, 0x0005, 0x604b, 0x0000, 0x6017, 0x0000,
-	0x6003, 0x0001, 0x6007, 0x0050, 0x2009, 0x8023, 0x080c, 0x84a9,
-	0x0005, 0x00c6, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc,
-	0x0130, 0x0066, 0x6020, 0x9084, 0x000f, 0x001b, 0x006e, 0x00ce,
-	0x0005, 0xb54a, 0xbb63, 0xbb63, 0xbb66, 0xd2a0, 0xd2bb, 0xd2be,
-	0xb54a, 0xb54a, 0xb54a, 0xb54a, 0xb54a, 0xb54a, 0xb54a, 0xb54a,
-	0xb54a, 0x080c, 0x0d65, 0xa001, 0xa001, 0x0005, 0x0096, 0x6014,
-	0x904d, 0x0118, 0xa87c, 0xd0e4, 0x1110, 0x009e, 0x0010, 0x009e,
-	0x0005, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0550,
-	0x2001, 0x1833, 0x2004, 0x9005, 0x1540, 0x00f6, 0x2c78, 0x080c,
-	0x9b76, 0x0508, 0x7810, 0x6012, 0x080c, 0xbcc0, 0x7820, 0x9086,
-	0x0003, 0x0128, 0x7808, 0x603a, 0x2f00, 0x603e, 0x0020, 0x7808,
-	0x603e, 0x2f00, 0x603a, 0x602e, 0x6023, 0x0001, 0x6007, 0x0035,
-	0x6003, 0x0001, 0x795c, 0x615e, 0x2009, 0x8020, 0x080c, 0x84a9,
-	0x2f60, 0x00fe, 0x0005, 0x2f60, 0x00fe, 0x2001, 0x1959, 0x2004,
-	0x604a, 0x0005, 0x0016, 0x0096, 0x6814, 0x2048, 0x681c, 0xd0fc,
-	0xc0fc, 0x681e, 0xa87c, 0x1108, 0xd0e4, 0x0180, 0xc0e4, 0xa87e,
-	0xa877, 0x0000, 0xa893, 0x0000, 0xa88f, 0x0000, 0xd0cc, 0x0130,
-	0xc0cc, 0xa87e, 0xa878, 0x2048, 0x080c, 0x0fd4, 0x6830, 0x6036,
-	0x908e, 0x0001, 0x0148, 0x6803, 0x0002, 0x9086, 0x0005, 0x0170,
-	0x9006, 0x602e, 0x6032, 0x00d0, 0x681c, 0xc085, 0x681e, 0x6803,
-	0x0004, 0x6824, 0xc0f4, 0x9085, 0x0c00, 0x6826, 0x6814, 0x2048,
-	0xa8ac, 0x6938, 0x9102, 0xa8b0, 0x693c, 0x9103, 0x1e48, 0x683c,
-	0x602e, 0x6838, 0x9084, 0xfffc, 0x683a, 0x6032, 0x2d00, 0x603a,
-	0x6808, 0x603e, 0x6910, 0x6112, 0x695c, 0x615e, 0x6023, 0x0001,
-	0x6007, 0x0039, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x84a9,
-	0x009e, 0x001e, 0x0005, 0x6024, 0xd0d4, 0x0510, 0xd0f4, 0x11f8,
-	0x6038, 0x940a, 0x603c, 0x9303, 0x0230, 0x9105, 0x0120, 0x6024,
-	0xc0d4, 0xc0f5, 0x0098, 0x643a, 0x633e, 0xac3e, 0xab42, 0x0046,
-	0x0036, 0x2400, 0xacac, 0x9402, 0xa836, 0x2300, 0xabb0, 0x9303,
-	0xa83a, 0x003e, 0x004e, 0x6024, 0xc0d4, 0x0000, 0x6026, 0x0005,
-	0xd0f4, 0x1138, 0xa83c, 0x603a, 0xa840, 0x603e, 0x6024, 0xc0f5,
-	0x6026, 0x0005, 0x0006, 0x0016, 0x6004, 0x908e, 0x0034, 0x01b8,
-	0x908e, 0x0035, 0x01a0, 0x908e, 0x0036, 0x0188, 0x908e, 0x0037,
-	0x0170, 0x908e, 0x0038, 0x0158, 0x908e, 0x0039, 0x0140, 0x908e,
-	0x003a, 0x0128, 0x908e, 0x003b, 0x0110, 0x9085, 0x0001, 0x001e,
-	0x000e, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00e6, 0x2001,
-	0x1953, 0x200c, 0x8000, 0x2014, 0x2001, 0x0032, 0x080c, 0x83f1,
-	0x2001, 0x1957, 0x82ff, 0x1110, 0x2011, 0x0014, 0x2202, 0x2001,
-	0x1955, 0x200c, 0x8000, 0x2014, 0x2071, 0x193d, 0x711a, 0x721e,
-	0x2001, 0x0064, 0x080c, 0x83f1, 0x2001, 0x1958, 0x82ff, 0x1110,
-	0x2011, 0x0014, 0x2202, 0x2001, 0x1959, 0x9288, 0x000a, 0x2102,
-	0x2001, 0x0017, 0x080c, 0x989e, 0x2001, 0x1a59, 0x2102, 0x2001,
-	0x0032, 0x080c, 0x159e, 0x080c, 0x6641, 0x00ee, 0x003e, 0x002e,
-	0x001e, 0x000e, 0x0005, 0x0006, 0x0016, 0x00e6, 0x2001, 0x1957,
-	0x2003, 0x0028, 0x2001, 0x1958, 0x2003, 0x0014, 0x2071, 0x193d,
-	0x701b, 0x0000, 0x701f, 0x07d0, 0x2001, 0x1959, 0x2009, 0x001e,
-	0x2102, 0x2001, 0x0017, 0x080c, 0x989e, 0x2001, 0x1a59, 0x2102,
-	0x2001, 0x0032, 0x080c, 0x159e, 0x00ee, 0x001e, 0x000e, 0x0005,
-	0x0096, 0x6060, 0x904d, 0x0110, 0x080c, 0x1054, 0x009e, 0x0005,
-	0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9b76, 0x0180,
-	0x2b08, 0x6112, 0x0ca9, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009,
-	0x0033, 0x080c, 0x9c6a, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005,
-	0x9006, 0x0cd8, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186,
-	0x0015, 0x1500, 0x708c, 0x9086, 0x0018, 0x11e0, 0x6014, 0x2048,
-	0xaa3c, 0xd2e4, 0x1160, 0x2c78, 0x080c, 0x89cd, 0x01d8, 0x7078,
-	0xaa50, 0x9206, 0x1160, 0x707c, 0xaa54, 0x9206, 0x1140, 0x6210,
-	0x00b6, 0x2258, 0xbaa0, 0x00be, 0x900e, 0x080c, 0x3054, 0x080c,
-	0x9fdb, 0x0020, 0x080c, 0xa574, 0x080c, 0x9bcc, 0x00fe, 0x00ee,
-	0x009e, 0x0005, 0x705c, 0xaa54, 0x9206, 0x0d48, 0x0c80, 0x00c6,
-	0x0126, 0x2091, 0x8000, 0x080c, 0x9b76, 0x0188, 0x2b08, 0x6112,
-	0x080c, 0xbcc0, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x004d,
-	0x080c, 0x9c6a, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006,
-	0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x0016, 0x080c, 0x9b76,
-	0x0180, 0x2b08, 0x6112, 0x080c, 0xbcc0, 0x6023, 0x0001, 0x2900,
-	0x6016, 0x001e, 0x080c, 0x9c6a, 0x9085, 0x0001, 0x012e, 0x00ce,
-	0x0005, 0x001e, 0x9006, 0x0cd0, 0x0016, 0x0026, 0x0036, 0x0046,
-	0x0056, 0x0066, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186,
-	0x0015, 0x1568, 0x718c, 0x6014, 0x2048, 0xa814, 0x8003, 0x9106,
-	0x1530, 0x20e1, 0x0000, 0x2001, 0x1971, 0x2003, 0x0000, 0x6014,
-	0x2048, 0xa830, 0x20a8, 0x8906, 0x8006, 0x8007, 0x9094, 0x003f,
-	0x22e8, 0x9084, 0xffc0, 0x9080, 0x001b, 0x20a0, 0x2001, 0x1971,
-	0x0016, 0x200c, 0x080c, 0xc529, 0x001e, 0xa804, 0x9005, 0x0110,
-	0x2048, 0x0c38, 0x6014, 0x2048, 0xa867, 0x0103, 0x0010, 0x080c,
-	0xa574, 0x080c, 0x9bcc, 0x00fe, 0x00ee, 0x009e, 0x006e, 0x005e,
-	0x004e, 0x003e, 0x002e, 0x001e, 0x0005, 0x0096, 0x00e6, 0x00f6,
-	0x2071, 0x1800, 0x9186, 0x0015, 0x11b8, 0x708c, 0x9086, 0x0004,
-	0x1198, 0x6014, 0x2048, 0x2c78, 0x080c, 0x89cd, 0x01a8, 0x7078,
-	0xaa74, 0x9206, 0x1130, 0x707c, 0xaa78, 0x9206, 0x1110, 0x080c,
-	0x3003, 0x080c, 0x9fdb, 0x0020, 0x080c, 0xa574, 0x080c, 0x9bcc,
-	0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c, 0xaa78, 0x9206, 0x0d78,
-	0x0c80, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015,
-	0x1550, 0x708c, 0x9086, 0x0004, 0x1530, 0x6014, 0x2048, 0x2c78,
-	0x080c, 0x89cd, 0x05f0, 0x7078, 0xaacc, 0x9206, 0x1180, 0x707c,
-	0xaad0, 0x9206, 0x1160, 0x080c, 0x3003, 0x0016, 0xa998, 0xaab0,
-	0x9284, 0x1000, 0xc0fd, 0x080c, 0x533e, 0x001e, 0x0010, 0x080c,
-	0x5127, 0x080c, 0xb82c, 0x0508, 0xa87b, 0x0000, 0xa883, 0x0000,
-	0xa897, 0x4000, 0x0080, 0x080c, 0xb82c, 0x01b8, 0x6014, 0x2048,
-	0x080c, 0x5127, 0x1d70, 0xa87b, 0x0030, 0xa883, 0x0000, 0xa897,
-	0x4005, 0xa89b, 0x0004, 0x0126, 0x2091, 0x8000, 0xa867, 0x0139,
-	0x080c, 0x698f, 0x012e, 0x080c, 0x9bcc, 0x00fe, 0x00ee, 0x009e,
-	0x0005, 0x705c, 0xaad0, 0x9206, 0x0930, 0x0888, 0x0016, 0x0026,
-	0xa87c, 0xd0ac, 0x0178, 0xa938, 0xaa34, 0x2100, 0x9205, 0x0150,
-	0xa890, 0x9106, 0x1118, 0xa88c, 0x9206, 0x0120, 0xa992, 0xaa8e,
-	0x9085, 0x0001, 0x002e, 0x001e, 0x0005, 0x00b6, 0x00d6, 0x0036,
-	0x080c, 0xb82c, 0x0904, 0xbe7b, 0x0096, 0x6314, 0x2348, 0xa87a,
-	0xa982, 0x929e, 0x4000, 0x1580, 0x6310, 0x00c6, 0x2358, 0x2009,
-	0x0000, 0xa868, 0xd0f4, 0x1140, 0x080c, 0x6558, 0x1108, 0xc185,
-	0xb800, 0xd0bc, 0x0108, 0xc18d, 0xaa96, 0xa99a, 0x20a9, 0x0004,
-	0xa860, 0x20e8, 0xa85c, 0x9080, 0x0031, 0x20a0, 0xb8b4, 0x20e0,
-	0xb8b8, 0x9080, 0x0006, 0x2098, 0x080c, 0x0f9f, 0x20a9, 0x0004,
-	0xa85c, 0x9080, 0x0035, 0x20a0, 0xb8b8, 0x9080, 0x000a, 0x2098,
-	0x080c, 0x0f9f, 0x00ce, 0x0090, 0xaa96, 0x3918, 0x9398, 0x0007,
-	0x231c, 0x6004, 0x9086, 0x0016, 0x0110, 0xa89b, 0x0004, 0xaba2,
-	0x6310, 0x2358, 0xb804, 0x9084, 0x00ff, 0xa89e, 0x080c, 0x6983,
-	0x6017, 0x0000, 0x009e, 0x003e, 0x00de, 0x00be, 0x0005, 0x0026,
-	0x0036, 0x0046, 0x00b6, 0x0096, 0x00f6, 0x6214, 0x2248, 0x6210,
-	0x2258, 0x2079, 0x0260, 0x9096, 0x0000, 0x11a0, 0xb814, 0x9084,
-	0x00ff, 0x900e, 0x080c, 0x2424, 0x2118, 0x831f, 0x939c, 0xff00,
-	0x7838, 0x9084, 0x00ff, 0x931d, 0x7c3c, 0x2011, 0x8018, 0x080c,
-	0x48d1, 0x00a8, 0x9096, 0x0001, 0x1148, 0x89ff, 0x0180, 0xa89b,
-	0x000d, 0x7838, 0xa8a6, 0x783c, 0xa8aa, 0x0048, 0x9096, 0x0002,
-	0x1130, 0xa89b, 0x000d, 0x7838, 0xa8a6, 0x783c, 0xa8aa, 0x00fe,
-	0x009e, 0x00be, 0x004e, 0x003e, 0x002e, 0x0005, 0x00c6, 0x0026,
-	0x0016, 0x9186, 0x0035, 0x0110, 0x6a38, 0x0008, 0x6a2c, 0x080c,
-	0xb81a, 0x01f0, 0x2260, 0x6120, 0x9186, 0x0003, 0x0118, 0x9186,
-	0x0006, 0x1190, 0x6838, 0x9206, 0x0140, 0x683c, 0x9206, 0x1160,
-	0x6108, 0x6838, 0x9106, 0x1140, 0x0020, 0x6008, 0x693c, 0x9106,
-	0x1118, 0x6010, 0x6910, 0x9106, 0x001e, 0x002e, 0x00ce, 0x0005,
-	0x9085, 0x0001, 0x0cc8, 0xa974, 0xd1cc, 0x0188, 0x918c, 0x00ff,
-	0x918e, 0x0002, 0x1160, 0xa9a8, 0x918c, 0x0f00, 0x810f, 0x918e,
-	0x0001, 0x1128, 0xa834, 0xa938, 0x9115, 0x190c, 0xaea7, 0x0005,
-	0x0036, 0x2019, 0x0001, 0x0010, 0x0036, 0x901e, 0x0499, 0x01e0,
-	0x080c, 0xb82c, 0x01c8, 0x080c, 0xba1b, 0x6037, 0x4000, 0x6014,
-	0x6017, 0x0000, 0x0096, 0x2048, 0xa87c, 0x080c, 0xba41, 0x1118,
-	0x080c, 0xa574, 0x0040, 0xa867, 0x0103, 0xa877, 0x0000, 0x83ff,
-	0x1129, 0x080c, 0x698f, 0x009e, 0x003e, 0x0005, 0xa880, 0xd0b4,
-	0x0128, 0xa87b, 0x0006, 0xc0ec, 0xa882, 0x0048, 0xd0bc, 0x0118,
-	0xa87b, 0x0002, 0x0020, 0xa87b, 0x0005, 0x080c, 0xbb30, 0xa877,
-	0x0000, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0ec, 0x0005, 0x0006,
-	0x2001, 0x1810, 0x2004, 0xd0f4, 0x000e, 0x0005, 0x0006, 0x2001,
-	0x1810, 0x2004, 0xd0e4, 0x000e, 0x0005, 0x0036, 0x0046, 0x6010,
-	0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, 0x0007, 0x080c, 0x4a6e,
-	0x004e, 0x003e, 0x0005, 0x0c51, 0x1d81, 0x0005, 0x2001, 0x1957,
-	0x2004, 0x601a, 0x0005, 0x2001, 0x1959, 0x2004, 0x604a, 0x0005,
-	0x080c, 0x9bcc, 0x0804, 0x890e, 0x611c, 0xd1fc, 0xa97c, 0x1108,
-	0xd1e4, 0x0005, 0x601c, 0xd0fc, 0xa87c, 0x1108, 0xd0e4, 0x0005,
-	0x601c, 0xd0fc, 0xc0fc, 0x601e, 0xa87c, 0x1108, 0xd0e4, 0x0005,
-	0x6044, 0xd0fc, 0x0160, 0xd0dc, 0x1128, 0x908c, 0x000f, 0x9186,
-	0x0005, 0x1118, 0x6003, 0x0003, 0x0010, 0x6003, 0x0001, 0x0005,
-	0x00b6, 0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0d65, 0x001b,
-	0x006e, 0x00be, 0x0005, 0xbfab, 0xc684, 0xc7d3, 0xbfab, 0xbfab,
-	0xbfab, 0xbfab, 0xbfab, 0xbfe2, 0xc851, 0xbfab, 0xbfab, 0xbfab,
-	0xbfab, 0xbfab, 0xbfab, 0x080c, 0x0d65, 0x0066, 0x6000, 0x90b2,
-	0x0016, 0x1a0c, 0x0d65, 0x0013, 0x006e, 0x0005, 0xbfc6, 0xcd68,
-	0xbfc6, 0xbfc6, 0xbfc6, 0xbfc6, 0xbfc6, 0xbfc6, 0xcd17, 0xcdba,
-	0xbfc6, 0xd3db, 0xd40f, 0xd3db, 0xd40f, 0xbfc6, 0x080c, 0x0d65,
-	0x6000, 0x9082, 0x0016, 0x1a0c, 0x0d65, 0x6000, 0x000a, 0x0005,
-	0xbfe0, 0xca2d, 0xcaf6, 0xcb18, 0xcb93, 0xbfe0, 0xcc8d, 0xcc1b,
-	0xc85b, 0xccef, 0xcd04, 0xbfe0, 0xbfe0, 0xbfe0, 0xbfe0, 0xbfe0,
-	0x080c, 0x0d65, 0x91b2, 0x0053, 0x1a0c, 0x0d65, 0x2100, 0x91b2,
-	0x0040, 0x1a04, 0xc427, 0x0002, 0xc02c, 0xc218, 0xc02c, 0xc02c,
-	0xc02c, 0xc221, 0xc02c, 0xc02c, 0xc02c, 0xc02c, 0xc02c, 0xc02c,
-	0xc02c, 0xc02c, 0xc02c, 0xc02c, 0xc02c, 0xc02c, 0xc02c, 0xc02c,
-	0xc02c, 0xc02c, 0xc02c, 0xc02e, 0xc095, 0xc0a4, 0xc108, 0xc133,
-	0xc1ab, 0xc203, 0xc02c, 0xc02c, 0xc224, 0xc02c, 0xc02c, 0xc239,
-	0xc246, 0xc02c, 0xc02c, 0xc02c, 0xc02c, 0xc02c, 0xc2c9, 0xc02c,
-	0xc02c, 0xc2dd, 0xc02c, 0xc02c, 0xc298, 0xc02c, 0xc02c, 0xc02c,
-	0xc2f5, 0xc02c, 0xc02c, 0xc02c, 0xc372, 0xc02c, 0xc02c, 0xc02c,
-	0xc02c, 0xc02c, 0xc02c, 0xc3ef, 0x080c, 0x0d65, 0x080c, 0x661e,
-	0x1150, 0x2001, 0x1836, 0x2004, 0xd0cc, 0x1128, 0x9084, 0x0009,
-	0x9086, 0x0008, 0x1140, 0x6007, 0x0009, 0x602f, 0x0009, 0x6017,
-	0x0000, 0x0804, 0xc211, 0x080c, 0x6607, 0x00e6, 0x00c6, 0x0036,
-	0x0026, 0x0016, 0x6210, 0x2258, 0xbaa0, 0x0026, 0x2019, 0x0029,
-	0x080c, 0x98ad, 0x080c, 0x8613, 0x0076, 0x903e, 0x080c, 0x8502,
-	0x2c08, 0x080c, 0xcfa6, 0x007e, 0x001e, 0x080c, 0x98c9, 0x001e,
-	0x002e, 0x003e, 0x00ce, 0x00ee, 0x6610, 0x2658, 0x080c, 0x6278,
-	0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x1268, 0x0016, 0x0026,
-	0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be, 0x2c08, 0x080c, 0xd587,
-	0x002e, 0x001e, 0x1178, 0x080c, 0xced5, 0x1904, 0xc100, 0x080c,
-	0xce71, 0x1120, 0x6007, 0x0008, 0x0804, 0xc211, 0x6007, 0x0009,
-	0x0804, 0xc211, 0x080c, 0xd0dc, 0x0128, 0x080c, 0xced5, 0x0d78,
-	0x0804, 0xc100, 0x6017, 0x1900, 0x0c88, 0x080c, 0x3149, 0x1904,
-	0xc424, 0x6106, 0x080c, 0xce24, 0x6007, 0x0006, 0x0804, 0xc211,
-	0x6007, 0x0007, 0x0804, 0xc211, 0x080c, 0xd44b, 0x1904, 0xc424,
-	0x080c, 0x3149, 0x1904, 0xc424, 0x00d6, 0x6610, 0x2658, 0xbe04,
-	0x9684, 0x00ff, 0x9082, 0x0006, 0x1220, 0x2001, 0x0001, 0x080c,
-	0x61a6, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0188, 0x9686,
-	0x0004, 0x0170, 0xbe04, 0x96b4, 0x00ff, 0x9686, 0x0006, 0x0140,
-	0x9686, 0x0004, 0x0128, 0x9686, 0x0005, 0x0110, 0x00de, 0x0480,
-	0x00e6, 0x2071, 0x0260, 0x7034, 0x9084, 0x0003, 0x1140, 0x7034,
-	0x9082, 0x0014, 0x0220, 0x7030, 0x9084, 0x0003, 0x0130, 0x00ee,
-	0x6017, 0x0000, 0x602f, 0x0007, 0x00b0, 0x00ee, 0x080c, 0xcf3c,
-	0x1190, 0x9686, 0x0006, 0x1140, 0x0026, 0x6210, 0x2258, 0xbaa0,
-	0x900e, 0x080c, 0x3054, 0x002e, 0x080c, 0x6304, 0x6007, 0x000a,
-	0x00de, 0x0804, 0xc211, 0x6007, 0x000b, 0x00de, 0x0804, 0xc211,
-	0x080c, 0x3003, 0x080c, 0xbf5b, 0x6007, 0x0001, 0x0804, 0xc211,
-	0x080c, 0xd44b, 0x1904, 0xc424, 0x080c, 0x3149, 0x1904, 0xc424,
-	0x2071, 0x0260, 0x7034, 0x90b4, 0x0003, 0x1948, 0x90b2, 0x0014,
-	0x0a30, 0x7030, 0x9084, 0x0003, 0x1910, 0x6610, 0x2658, 0xbe04,
-	0x9686, 0x0707, 0x09e8, 0x0026, 0x6210, 0x2258, 0xbaa0, 0x900e,
-	0x080c, 0x3054, 0x002e, 0x6007, 0x000c, 0x2001, 0x0001, 0x080c,
-	0xd567, 0x0804, 0xc211, 0x080c, 0x661e, 0x1140, 0x2001, 0x1836,
-	0x2004, 0x9084, 0x0009, 0x9086, 0x0008, 0x1110, 0x0804, 0xc03b,
-	0x080c, 0x6607, 0x6610, 0x2658, 0xbe04, 0x9684, 0x00ff, 0x9082,
-	0x0006, 0x06c0, 0x1138, 0x0026, 0x2001, 0x0006, 0x080c, 0x61e6,
-	0x002e, 0x0050, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0004, 0x0120,
-	0x9686, 0x0006, 0x1904, 0xc100, 0x080c, 0xcf49, 0x1120, 0x6007,
-	0x000e, 0x0804, 0xc211, 0x0046, 0x6410, 0x2458, 0xbca0, 0x0046,
-	0x080c, 0x3003, 0x080c, 0xbf5b, 0x004e, 0x0016, 0x9006, 0x2009,
-	0x1854, 0x210c, 0x0048, 0x2009, 0x0029, 0x080c, 0xd251, 0x6010,
-	0x2058, 0xb800, 0xc0e5, 0xb802, 0x001e, 0x004e, 0x6007, 0x0001,
-	0x0804, 0xc211, 0x2001, 0x0001, 0x080c, 0x61a6, 0x0156, 0x0016,
-	0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011, 0x0270,
-	0x080c, 0xabb0, 0x003e, 0x002e, 0x001e, 0x015e, 0x9005, 0x0168,
-	0x96b4, 0xff00, 0x8637, 0x9682, 0x0004, 0x0a04, 0xc100, 0x9682,
-	0x0007, 0x0a04, 0xc15c, 0x0804, 0xc100, 0x6017, 0x1900, 0x6007,
-	0x0009, 0x0804, 0xc211, 0x080c, 0x661e, 0x1140, 0x2001, 0x1836,
-	0x2004, 0x9084, 0x0009, 0x9086, 0x0008, 0x1110, 0x0804, 0xc03b,
-	0x080c, 0x6607, 0x6610, 0x2658, 0xbe04, 0x9684, 0x00ff, 0x9082,
-	0x0006, 0x0688, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0004, 0x0120,
-	0x9686, 0x0006, 0x1904, 0xc100, 0x080c, 0xcf77, 0x1130, 0x080c,
-	0xce71, 0x1118, 0x6007, 0x0010, 0x04e0, 0x0046, 0x6410, 0x2458,
-	0xbca0, 0x0046, 0x080c, 0x3003, 0x080c, 0xbf5b, 0x004e, 0x0016,
-	0x9006, 0x2009, 0x1854, 0x210c, 0x0048, 0x2009, 0x0029, 0x080c,
-	0xd251, 0x6010, 0x2058, 0xb800, 0xc0e5, 0xb802, 0x001e, 0x004e,
-	0x6007, 0x0001, 0x00f0, 0x080c, 0xd0dc, 0x0140, 0x96b4, 0xff00,
-	0x8637, 0x9686, 0x0006, 0x0980, 0x0804, 0xc100, 0x6017, 0x1900,
-	0x6007, 0x0009, 0x0070, 0x080c, 0x3149, 0x1904, 0xc424, 0x080c,
-	0xd44b, 0x1904, 0xc424, 0x080c, 0xc5c4, 0x1904, 0xc100, 0x6007,
-	0x0012, 0x6003, 0x0001, 0x080c, 0x84b0, 0x080c, 0x890e, 0x0005,
-	0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x84b0, 0x080c, 0x890e,
-	0x0cb0, 0x6007, 0x0005, 0x0c68, 0x080c, 0xd44b, 0x1904, 0xc424,
-	0x080c, 0x3149, 0x1904, 0xc424, 0x080c, 0xc5c4, 0x1904, 0xc100,
-	0x6007, 0x0020, 0x6003, 0x0001, 0x080c, 0x84b0, 0x080c, 0x890e,
-	0x0005, 0x080c, 0x3149, 0x1904, 0xc424, 0x6007, 0x0023, 0x6003,
-	0x0001, 0x080c, 0x84b0, 0x080c, 0x890e, 0x0005, 0x080c, 0xd44b,
-	0x1904, 0xc424, 0x080c, 0x3149, 0x1904, 0xc424, 0x080c, 0xc5c4,
-	0x1904, 0xc100, 0x0016, 0x0026, 0x00e6, 0x2071, 0x0260, 0x7244,
-	0x9286, 0xffff, 0x0180, 0x2c08, 0x080c, 0xb81a, 0x01b0, 0x2260,
-	0x7240, 0x6008, 0x9206, 0x1188, 0x6010, 0x9190, 0x0004, 0x2214,
-	0x9206, 0x01b8, 0x0050, 0x7240, 0x2c08, 0x9006, 0x080c, 0xd223,
-	0x1180, 0x7244, 0x9286, 0xffff, 0x01b0, 0x2160, 0x6007, 0x0026,
-	0x6017, 0x1700, 0x7214, 0x9296, 0xffff, 0x1180, 0x6007, 0x0025,
-	0x0068, 0x6020, 0x9086, 0x0007, 0x1d80, 0x6004, 0x9086, 0x0024,
-	0x1110, 0x080c, 0x9bcc, 0x2160, 0x6007, 0x0025, 0x6003, 0x0001,
-	0x080c, 0x84b0, 0x080c, 0x890e, 0x00ee, 0x002e, 0x001e, 0x0005,
-	0x2001, 0x0001, 0x080c, 0x61a6, 0x0156, 0x0016, 0x0026, 0x0036,
-	0x20a9, 0x0004, 0x2019, 0x1805, 0x2011, 0x0276, 0x080c, 0xabb0,
-	0x003e, 0x002e, 0x001e, 0x015e, 0x0120, 0x6007, 0x0031, 0x0804,
-	0xc211, 0x080c, 0xa815, 0x080c, 0x70ac, 0x1190, 0x0006, 0x0026,
-	0x0036, 0x080c, 0x70c6, 0x1138, 0x080c, 0x73ac, 0x080c, 0x5cd5,
-	0x080c, 0x6fdd, 0x0010, 0x080c, 0x7080, 0x003e, 0x002e, 0x000e,
-	0x0005, 0x080c, 0x3149, 0x1904, 0xc424, 0x080c, 0xc5c4, 0x1904,
-	0xc100, 0x6106, 0x080c, 0xc5e0, 0x1120, 0x6007, 0x002b, 0x0804,
-	0xc211, 0x6007, 0x002c, 0x0804, 0xc211, 0x080c, 0xd44b, 0x1904,
-	0xc424, 0x080c, 0x3149, 0x1904, 0xc424, 0x080c, 0xc5c4, 0x1904,
-	0xc100, 0x6106, 0x080c, 0xc5e5, 0x1120, 0x6007, 0x002e, 0x0804,
-	0xc211, 0x6007, 0x002f, 0x0804, 0xc211, 0x080c, 0x3149, 0x1904,
-	0xc424, 0x00e6, 0x00d6, 0x00c6, 0x6010, 0x2058, 0xb904, 0x9184,
-	0x00ff, 0x9086, 0x0006, 0x0158, 0x9184, 0xff00, 0x8007, 0x9086,
-	0x0006, 0x0128, 0x00ce, 0x00de, 0x00ee, 0x0804, 0xc218, 0x080c,
-	0x538a, 0xd0e4, 0x0904, 0xc36f, 0x2071, 0x026c, 0x7010, 0x603a,
-	0x7014, 0x603e, 0x7108, 0x720c, 0x080c, 0x665c, 0x0140, 0x6010,
-	0x2058, 0xb810, 0x9106, 0x1118, 0xb814, 0x9206, 0x0510, 0x080c,
-	0x6658, 0x15b8, 0x2069, 0x1800, 0x687c, 0x9206, 0x1590, 0x6878,
-	0x9106, 0x1578, 0x7210, 0x080c, 0xb81a, 0x0590, 0x080c, 0xc4af,
-	0x0578, 0x080c, 0xd2cd, 0x0560, 0x622e, 0x6007, 0x0036, 0x6003,
-	0x0001, 0x2009, 0x8020, 0x080c, 0x84a9, 0x00ce, 0x00de, 0x00ee,
-	0x0005, 0x7214, 0x9286, 0xffff, 0x0150, 0x080c, 0xb81a, 0x01c0,
-	0x9280, 0x0002, 0x2004, 0x7110, 0x9106, 0x1190, 0x08e0, 0x7210,
-	0x2c08, 0x9085, 0x0001, 0x080c, 0xd223, 0x2c10, 0x2160, 0x0140,
-	0x0890, 0x6007, 0x0037, 0x602f, 0x0009, 0x6017, 0x1500, 0x08b8,
-	0x6007, 0x0037, 0x602f, 0x0003, 0x6017, 0x1700, 0x0880, 0x6007,
-	0x0012, 0x0868, 0x080c, 0x3149, 0x1904, 0xc424, 0x6010, 0x2058,
-	0xb804, 0x9084, 0xff00, 0x8007, 0x9086, 0x0006, 0x1904, 0xc218,
-	0x00e6, 0x00d6, 0x00c6, 0x080c, 0x538a, 0xd0e4, 0x0904, 0xc3e7,
-	0x2069, 0x1800, 0x2071, 0x026c, 0x7008, 0x603a, 0x720c, 0x623e,
-	0x9286, 0xffff, 0x1150, 0x7208, 0x00c6, 0x2c08, 0x9085, 0x0001,
-	0x080c, 0xd223, 0x2c10, 0x00ce, 0x05e8, 0x080c, 0xb81a, 0x05d0,
-	0x7108, 0x9280, 0x0002, 0x2004, 0x9106, 0x15a0, 0x00c6, 0x0026,
-	0x2260, 0x080c, 0xb42a, 0x002e, 0x00ce, 0x7118, 0x918c, 0xff00,
-	0x810f, 0x9186, 0x0001, 0x0178, 0x9186, 0x0005, 0x0118, 0x9186,
-	0x0007, 0x1198, 0x9280, 0x0005, 0x2004, 0x9005, 0x0170, 0x080c,
-	0xc4af, 0x0904, 0xc368, 0x0056, 0x7510, 0x7614, 0x080c, 0xd2e6,
-	0x005e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x6007, 0x003b, 0x602f,
-	0x0009, 0x6017, 0x2a00, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c,
-	0x84a9, 0x0c78, 0x6007, 0x003b, 0x602f, 0x0003, 0x6017, 0x0300,
-	0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x84a9, 0x0c10, 0x6007,
-	0x003b, 0x602f, 0x000b, 0x6017, 0x0000, 0x0804, 0xc33f, 0x00e6,
-	0x0026, 0x080c, 0x661e, 0x0550, 0x080c, 0x6607, 0x080c, 0xd4bd,
-	0x1518, 0x2071, 0x1800, 0x70d8, 0x9085, 0x0003, 0x70da, 0x00f6,
-	0x2079, 0x0100, 0x72ac, 0x9284, 0x00ff, 0x707a, 0x78e6, 0x9284,
-	0xff00, 0x727c, 0x9205, 0x707e, 0x78ea, 0x00fe, 0x70e3, 0x0000,
-	0x080c, 0x665c, 0x0120, 0x2011, 0x19da, 0x2013, 0x07d0, 0xd0ac,
-	0x1128, 0x080c, 0x2ddb, 0x0010, 0x080c, 0xd4ef, 0x002e, 0x00ee,
-	0x080c, 0x9bcc, 0x0804, 0xc217, 0x080c, 0x9bcc, 0x0005, 0x2600,
-	0x0002, 0xc43b, 0xc43b, 0xc43b, 0xc43b, 0xc43b, 0xc43d, 0xc43b,
-	0xc43b, 0xc43b, 0xc43b, 0xc45a, 0xc43b, 0xc43b, 0xc43b, 0xc46c,
-	0xc479, 0xc4aa, 0xc43b, 0x080c, 0x0d65, 0x080c, 0xd44b, 0x1d20,
-	0x080c, 0x3149, 0x1d08, 0x080c, 0xc5c4, 0x1148, 0x7038, 0x6016,
-	0x6007, 0x0045, 0x6003, 0x0001, 0x080c, 0x84b0, 0x0005, 0x080c,
-	0x3003, 0x080c, 0xbf5b, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c,
-	0x84b0, 0x0005, 0x080c, 0xd44b, 0x1938, 0x080c, 0x3149, 0x1920,
-	0x080c, 0xc5c4, 0x1d60, 0x703c, 0x6016, 0x6007, 0x004a, 0x6003,
-	0x0001, 0x080c, 0x84b0, 0x0005, 0x080c, 0xc4cc, 0x0904, 0xc424,
-	0x6007, 0x004e, 0x6003, 0x0001, 0x080c, 0x84b0, 0x080c, 0x890e,
-	0x0005, 0x6007, 0x004f, 0x6017, 0x0000, 0x7134, 0x918c, 0x00ff,
-	0x81ff, 0x0508, 0x9186, 0x0001, 0x1160, 0x7140, 0x2001, 0x198e,
-	0x2004, 0x9106, 0x11b0, 0x7144, 0x2001, 0x198f, 0x2004, 0x9106,
-	0x0190, 0x9186, 0x0002, 0x1168, 0x2011, 0x0276, 0x20a9, 0x0004,
-	0x6010, 0x0096, 0x2048, 0x2019, 0x000a, 0x080c, 0xabc4, 0x009e,
-	0x0110, 0x6017, 0x0001, 0x6003, 0x0001, 0x080c, 0x84b0, 0x080c,
-	0x890e, 0x0005, 0x6007, 0x0050, 0x703c, 0x6016, 0x0ca0, 0x0016,
-	0x00e6, 0x2071, 0x0260, 0x00b6, 0x00c6, 0x2260, 0x6010, 0x2058,
-	0xb8c4, 0xd084, 0x0150, 0x7128, 0x6050, 0x9106, 0x1120, 0x712c,
-	0x604c, 0x9106, 0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x00ce,
-	0x00be, 0x00ee, 0x001e, 0x0005, 0x0016, 0x0096, 0x0086, 0x00e6,
-	0x01c6, 0x01d6, 0x0126, 0x2091, 0x8000, 0x2071, 0x1800, 0x708c,
-	0x908a, 0x00f9, 0x16e8, 0x20e1, 0x0000, 0x2001, 0x1971, 0x2003,
-	0x0000, 0x080c, 0x103b, 0x05a0, 0x2900, 0x6016, 0x708c, 0x8004,
-	0xa816, 0x908a, 0x001e, 0x02d0, 0xa833, 0x001e, 0x20a9, 0x001e,
-	0xa860, 0x20e8, 0xa85c, 0x9080, 0x001b, 0x20a0, 0x2001, 0x1971,
-	0x0016, 0x200c, 0x0471, 0x001e, 0x2940, 0x080c, 0x103b, 0x01c0,
-	0x2900, 0xa006, 0x2100, 0x81ff, 0x0180, 0x0c18, 0xa832, 0x20a8,
-	0xa860, 0x20e8, 0xa85c, 0x9080, 0x001b, 0x20a0, 0x2001, 0x1971,
-	0x0016, 0x200c, 0x00b1, 0x001e, 0x0000, 0x9085, 0x0001, 0x0048,
-	0x2071, 0x1800, 0x708f, 0x0000, 0x6014, 0x2048, 0x080c, 0x0fd4,
-	0x9006, 0x012e, 0x01de, 0x01ce, 0x00ee, 0x008e, 0x009e, 0x001e,
-	0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00c6, 0x918c, 0xffff,
-	0x11a8, 0x080c, 0x202b, 0x2099, 0x026c, 0x2001, 0x0014, 0x3518,
-	0x9312, 0x1218, 0x23a8, 0x4003, 0x00f8, 0x20a8, 0x4003, 0x22a8,
-	0x8108, 0x080c, 0x202b, 0x2099, 0x0260, 0x0ca8, 0x080c, 0x202b,
-	0x2061, 0x1971, 0x6004, 0x2098, 0x6008, 0x3518, 0x9312, 0x1218,
-	0x23a8, 0x4003, 0x0048, 0x20a8, 0x4003, 0x22a8, 0x8108, 0x080c,
-	0x202b, 0x2099, 0x0260, 0x0ca8, 0x2061, 0x1971, 0x2019, 0x0280,
-	0x3300, 0x931e, 0x0110, 0x6006, 0x0020, 0x2001, 0x0260, 0x6006,
-	0x8108, 0x2162, 0x9292, 0x0021, 0x9296, 0xffff, 0x620a, 0x00ce,
-	0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x0006, 0x0016, 0x0026,
-	0x0036, 0x00c6, 0x81ff, 0x11b8, 0x080c, 0x2043, 0x20a1, 0x024c,
-	0x2001, 0x0014, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003, 0x0418,
-	0x20a8, 0x4003, 0x82ff, 0x01f8, 0x22a8, 0x8108, 0x080c, 0x2043,
-	0x20a1, 0x0240, 0x0c98, 0x080c, 0x2043, 0x2061, 0x1974, 0x6004,
-	0x20a0, 0x6008, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003, 0x0058,
-	0x20a8, 0x4003, 0x82ff, 0x0138, 0x22a8, 0x8108, 0x080c, 0x2043,
-	0x20a1, 0x0240, 0x0c98, 0x2061, 0x1974, 0x2019, 0x0260, 0x3400,
-	0x931e, 0x0110, 0x6006, 0x0020, 0x2001, 0x0240, 0x6006, 0x8108,
-	0x2162, 0x9292, 0x0021, 0x9296, 0xffff, 0x620a, 0x00ce, 0x003e,
-	0x002e, 0x001e, 0x000e, 0x0005, 0x00b6, 0x0066, 0x6610, 0x2658,
-	0xbe04, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0170, 0x9686,
-	0x0004, 0x0158, 0xbe04, 0x96b4, 0x00ff, 0x9686, 0x0006, 0x0128,
-	0x9686, 0x0004, 0x0110, 0x9085, 0x0001, 0x006e, 0x00be, 0x0005,
-	0x00d6, 0x080c, 0xc65a, 0x00de, 0x0005, 0x00d6, 0x080c, 0xc667,
-	0x1520, 0x680c, 0x908c, 0xff00, 0x6820, 0x9084, 0x00ff, 0x9115,
-	0x6216, 0x6824, 0x602e, 0xd1e4, 0x0130, 0x9006, 0x080c, 0xd567,
-	0x2009, 0x0001, 0x0078, 0xd1ec, 0x0180, 0x6920, 0x918c, 0x00ff,
-	0x6824, 0x080c, 0x2424, 0x1148, 0x2001, 0x0001, 0x080c, 0xd567,
-	0x2110, 0x900e, 0x080c, 0x3054, 0x0018, 0x9085, 0x0001, 0x0008,
-	0x9006, 0x00de, 0x0005, 0x00b6, 0x00c6, 0x080c, 0x9c3d, 0x0598,
-	0x0016, 0x0026, 0x00c6, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c,
-	0x080c, 0x2424, 0x1568, 0x080c, 0x6209, 0x1550, 0xbe12, 0xbd16,
-	0x00ce, 0x002e, 0x001e, 0x2b00, 0x6012, 0x080c, 0xd44b, 0x11c8,
-	0x080c, 0x3149, 0x11b0, 0x080c, 0xc5c4, 0x0500, 0x2001, 0x0007,
-	0x080c, 0x61ba, 0x2001, 0x0007, 0x080c, 0x61e6, 0x6017, 0x0000,
-	0x6023, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x84b0,
-	0x0010, 0x080c, 0x9bcc, 0x9085, 0x0001, 0x00ce, 0x00be, 0x0005,
-	0x080c, 0x9bcc, 0x00ce, 0x002e, 0x001e, 0x0ca8, 0x080c, 0x9bcc,
-	0x9006, 0x0c98, 0x2069, 0x026d, 0x6800, 0x9082, 0x0010, 0x1228,
-	0x6017, 0x0000, 0x9085, 0x0001, 0x0008, 0x9006, 0x0005, 0x6017,
-	0x0000, 0x2069, 0x026c, 0x6808, 0x9084, 0xff00, 0x9086, 0x0800,
-	0x1190, 0x6904, 0x9186, 0x0018, 0x0118, 0x9186, 0x0014, 0x1158,
-	0x810f, 0x6800, 0x9084, 0x00ff, 0x910d, 0x6162, 0x908e, 0x0014,
-	0x0110, 0x908e, 0x0010, 0x0005, 0x6004, 0x90b2, 0x0053, 0x1a0c,
-	0x0d65, 0x91b6, 0x0013, 0x1130, 0x2008, 0x91b2, 0x0040, 0x1a04,
-	0xc7a7, 0x0092, 0x91b6, 0x0027, 0x0120, 0x91b6, 0x0014, 0x190c,
-	0x0d65, 0x2001, 0x0007, 0x080c, 0x61e6, 0x080c, 0x884c, 0x080c,
-	0x9c06, 0x080c, 0x890e, 0x0005, 0xc6e4, 0xc6e6, 0xc6e4, 0xc6e4,
-	0xc6e4, 0xc6e6, 0xc6f3, 0xc7a4, 0xc743, 0xc7a4, 0xc755, 0xc7a4,
-	0xc6f3, 0xc7a4, 0xc79c, 0xc7a4, 0xc79c, 0xc7a4, 0xc7a4, 0xc6e4,
-	0xc6e4, 0xc6e4, 0xc6e4, 0xc6e4, 0xc6e4, 0xc6e4, 0xc6e4, 0xc6e4,
-	0xc6e4, 0xc6e4, 0xc6e6, 0xc6e4, 0xc7a4, 0xc6e4, 0xc6e4, 0xc7a4,
-	0xc6e4, 0xc7a1, 0xc7a4, 0xc6e4, 0xc6e4, 0xc6e4, 0xc6e4, 0xc7a4,
-	0xc7a4, 0xc6e4, 0xc7a4, 0xc7a4, 0xc6e4, 0xc6ee, 0xc6e4, 0xc6e4,
-	0xc6e4, 0xc6e4, 0xc7a0, 0xc7a4, 0xc6e4, 0xc6e4, 0xc7a4, 0xc7a4,
-	0xc6e4, 0xc6e4, 0xc6e4, 0xc6e4, 0x080c, 0x0d65, 0x080c, 0xbf5e,
-	0x6003, 0x0002, 0x080c, 0x890e, 0x0804, 0xc7a6, 0x9006, 0x080c,
-	0x61a6, 0x0804, 0xc7a4, 0x080c, 0x6658, 0x1904, 0xc7a4, 0x9006,
-	0x080c, 0x61a6, 0x6010, 0x2058, 0xb810, 0x9086, 0x00ff, 0x1140,
-	0x00f6, 0x2079, 0x1800, 0x78a4, 0x8000, 0x78a6, 0x00fe, 0x0428,
-	0x6010, 0x2058, 0xb884, 0x9005, 0x1178, 0x080c, 0xbf46, 0x1904,
-	0xc7a4, 0x0036, 0x0046, 0xbba0, 0x2021, 0x0007, 0x080c, 0x4a6e,
-	0x004e, 0x003e, 0x0804, 0xc7a4, 0x080c, 0x317a, 0x1904, 0xc7a4,
-	0x2001, 0x1800, 0x2004, 0x9086, 0x0002, 0x1138, 0x00f6, 0x2079,
-	0x1800, 0x78a4, 0x8000, 0x78a6, 0x00fe, 0x2001, 0x0002, 0x080c,
-	0x61ba, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c,
-	0x84b0, 0x080c, 0x890e, 0x6110, 0x2158, 0x2009, 0x0001, 0x080c,
-	0x813f, 0x0804, 0xc7a6, 0x6610, 0x2658, 0xbe04, 0x96b4, 0xff00,
-	0x8637, 0x9686, 0x0006, 0x0904, 0xc7a4, 0x9686, 0x0004, 0x0904,
-	0xc7a4, 0x2001, 0x0004, 0x0804, 0xc7a2, 0x2001, 0x1800, 0x2004,
-	0x9086, 0x0003, 0x1158, 0x0036, 0x0046, 0x6010, 0x2058, 0xbba0,
-	0x2021, 0x0006, 0x080c, 0x4a6e, 0x004e, 0x003e, 0x2001, 0x0006,
-	0x080c, 0xc7c0, 0x6610, 0x2658, 0xbe04, 0x0066, 0x96b4, 0xff00,
-	0x8637, 0x9686, 0x0006, 0x006e, 0x0168, 0x2001, 0x0006, 0x080c,
-	0x61e6, 0x9284, 0x00ff, 0x908e, 0x0007, 0x1120, 0x2001, 0x0006,
-	0x080c, 0x61ba, 0x080c, 0x6658, 0x11f8, 0x2001, 0x1836, 0x2004,
-	0xd0a4, 0x01d0, 0xbe04, 0x96b4, 0x00ff, 0x9686, 0x0006, 0x01a0,
-	0x00f6, 0x2079, 0x1800, 0x78a4, 0x8000, 0x78a6, 0x00fe, 0x0804,
-	0xc72d, 0x2001, 0x0004, 0x0030, 0x2001, 0x0006, 0x0409, 0x0020,
-	0x0018, 0x0010, 0x080c, 0x61e6, 0x080c, 0x9bcc, 0x0005, 0x2600,
-	0x0002, 0xc7bb, 0xc7bb, 0xc7bb, 0xc7bb, 0xc7bb, 0xc7bd, 0xc7bb,
-	0xc7bb, 0xc7bb, 0xc7bb, 0xc7bd, 0xc7bb, 0xc7bb, 0xc7bb, 0xc7bd,
-	0xc7bd, 0xc7bd, 0xc7bd, 0x080c, 0x0d65, 0x080c, 0x9bcc, 0x0005,
-	0x0016, 0x00b6, 0x00d6, 0x6110, 0x2158, 0xb900, 0xd184, 0x0138,
-	0x080c, 0x61ba, 0x9006, 0x080c, 0x61a6, 0x080c, 0x3034, 0x00de,
-	0x00be, 0x001e, 0x0005, 0x6610, 0x2658, 0xb804, 0x9084, 0xff00,
-	0x8007, 0x90b2, 0x000c, 0x1a0c, 0x0d65, 0x91b6, 0x0015, 0x1110,
-	0x003b, 0x0028, 0x91b6, 0x0016, 0x190c, 0x0d65, 0x006b, 0x0005,
-	0xa655, 0xa655, 0xa655, 0xa655, 0xa655, 0xa655, 0xc83b, 0xc800,
-	0xa655, 0xa655, 0xa655, 0xa655, 0xa655, 0xa655, 0xa655, 0xa655,
-	0xa655, 0xa655, 0xc83b, 0xc842, 0xa655, 0xa655, 0xa655, 0xa655,
-	0x00f6, 0x080c, 0x6658, 0x11d8, 0x080c, 0xbf46, 0x11c0, 0x6010,
-	0x905d, 0x01a8, 0xb884, 0x9005, 0x0190, 0x9006, 0x080c, 0x61a6,
-	0x2001, 0x0002, 0x080c, 0x61ba, 0x6023, 0x0001, 0x6003, 0x0001,
-	0x6007, 0x0002, 0x080c, 0x84b0, 0x080c, 0x890e, 0x00d0, 0x2011,
-	0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x2424, 0x1190, 0x080c,
-	0x6269, 0x0118, 0x080c, 0x9bcc, 0x0060, 0xb810, 0x0006, 0xb814,
-	0x0006, 0x080c, 0x5cef, 0x000e, 0xb816, 0x000e, 0xb812, 0x080c,
-	0x9bcc, 0x00fe, 0x0005, 0x6604, 0x96b6, 0x001e, 0x1110, 0x080c,
-	0x9bcc, 0x0005, 0x080c, 0xaa39, 0x1148, 0x6003, 0x0001, 0x6007,
-	0x0001, 0x080c, 0x84b0, 0x080c, 0x890e, 0x0010, 0x080c, 0x9bcc,
-	0x0005, 0x6004, 0x908a, 0x0053, 0x1a0c, 0x0d65, 0x080c, 0x884c,
-	0x080c, 0x9c06, 0x0005, 0x9182, 0x0040, 0x0002, 0xc871, 0xc871,
-	0xc871, 0xc871, 0xc873, 0xc871, 0xc871, 0xc871, 0xc871, 0xc871,
-	0xc871, 0xc871, 0xc871, 0xc871, 0xc871, 0xc871, 0xc871, 0xc871,
-	0xc871, 0x080c, 0x0d65, 0x0096, 0x00b6, 0x00d6, 0x00e6, 0x00f6,
+	0x0016, 0x080c, 0x9b91, 0x0180, 0x2b08, 0x6112, 0x080c, 0xbcdb,
+	0x6023, 0x0001, 0x2900, 0x6016, 0x001e, 0x080c, 0x9c85, 0x9085,
+	0x0001, 0x012e, 0x00ce, 0x0005, 0x001e, 0x9006, 0x0cd0, 0x0016,
+	0x0026, 0x0036, 0x0046, 0x0056, 0x0066, 0x0096, 0x00e6, 0x00f6,
+	0x2071, 0x1800, 0x9186, 0x0015, 0x1568, 0x718c, 0x6014, 0x2048,
+	0xa814, 0x8003, 0x9106, 0x1530, 0x20e1, 0x0000, 0x2001, 0x1971,
+	0x2003, 0x0000, 0x6014, 0x2048, 0xa830, 0x20a8, 0x8906, 0x8006,
+	0x8007, 0x9094, 0x003f, 0x22e8, 0x9084, 0xffc0, 0x9080, 0x001b,
+	0x20a0, 0x2001, 0x1971, 0x0016, 0x200c, 0x080c, 0xc545, 0x001e,
+	0xa804, 0x9005, 0x0110, 0x2048, 0x0c38, 0x6014, 0x2048, 0xa867,
+	0x0103, 0x0010, 0x080c, 0xa58f, 0x080c, 0x9be7, 0x00fe, 0x00ee,
+	0x009e, 0x006e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, 0x0005,
+	0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, 0x11b8,
+	0x708c, 0x9086, 0x0004, 0x1198, 0x6014, 0x2048, 0x2c78, 0x080c,
+	0x89f5, 0x01a8, 0x7078, 0xaa74, 0x9206, 0x1130, 0x707c, 0xaa78,
+	0x9206, 0x1110, 0x080c, 0x3006, 0x080c, 0x9ff6, 0x0020, 0x080c,
+	0xa58f, 0x080c, 0x9be7, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c,
+	0xaa78, 0x9206, 0x0d78, 0x0c80, 0x0096, 0x00e6, 0x00f6, 0x2071,
+	0x1800, 0x9186, 0x0015, 0x1550, 0x708c, 0x9086, 0x0004, 0x1530,
+	0x6014, 0x2048, 0x2c78, 0x080c, 0x89f5, 0x05f0, 0x7078, 0xaacc,
+	0x9206, 0x1180, 0x707c, 0xaad0, 0x9206, 0x1160, 0x080c, 0x3006,
+	0x0016, 0xa998, 0xaab0, 0x9284, 0x1000, 0xc0fd, 0x080c, 0x5345,
+	0x001e, 0x0010, 0x080c, 0x512e, 0x080c, 0xb847, 0x0508, 0xa87b,
+	0x0000, 0xa883, 0x0000, 0xa897, 0x4000, 0x0080, 0x080c, 0xb847,
+	0x01b8, 0x6014, 0x2048, 0x080c, 0x512e, 0x1d70, 0xa87b, 0x0030,
+	0xa883, 0x0000, 0xa897, 0x4005, 0xa89b, 0x0004, 0x0126, 0x2091,
+	0x8000, 0xa867, 0x0139, 0x080c, 0x6996, 0x012e, 0x080c, 0x9be7,
+	0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c, 0xaad0, 0x9206, 0x0930,
+	0x0888, 0x0016, 0x0026, 0xa87c, 0xd0ac, 0x0178, 0xa938, 0xaa34,
+	0x2100, 0x9205, 0x0150, 0xa890, 0x9106, 0x1118, 0xa88c, 0x9206,
+	0x0120, 0xa992, 0xaa8e, 0x9085, 0x0001, 0x002e, 0x001e, 0x0005,
+	0x00b6, 0x00d6, 0x0036, 0x080c, 0xb847, 0x0904, 0xbe96, 0x0096,
+	0x6314, 0x2348, 0xa87a, 0xa982, 0x929e, 0x4000, 0x1580, 0x6310,
+	0x00c6, 0x2358, 0x2009, 0x0000, 0xa868, 0xd0f4, 0x1140, 0x080c,
+	0x655f, 0x1108, 0xc185, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0xaa96,
+	0xa99a, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0031,
+	0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098, 0x080c,
+	0x0f9f, 0x20a9, 0x0004, 0xa85c, 0x9080, 0x0035, 0x20a0, 0xb8b8,
+	0x9080, 0x000a, 0x2098, 0x080c, 0x0f9f, 0x00ce, 0x0090, 0xaa96,
+	0x3918, 0x9398, 0x0007, 0x231c, 0x6004, 0x9086, 0x0016, 0x0110,
+	0xa89b, 0x0004, 0xaba2, 0x6310, 0x2358, 0xb804, 0x9084, 0x00ff,
+	0xa89e, 0x080c, 0x698a, 0x6017, 0x0000, 0x009e, 0x003e, 0x00de,
+	0x00be, 0x0005, 0x0026, 0x0036, 0x0046, 0x00b6, 0x0096, 0x00f6,
+	0x6214, 0x2248, 0x6210, 0x2258, 0x2079, 0x0260, 0x9096, 0x0000,
+	0x11a0, 0xb814, 0x9084, 0x00ff, 0x900e, 0x080c, 0x2424, 0x2118,
+	0x831f, 0x939c, 0xff00, 0x7838, 0x9084, 0x00ff, 0x931d, 0x7c3c,
+	0x2011, 0x8018, 0x080c, 0x48d8, 0x00a8, 0x9096, 0x0001, 0x1148,
+	0x89ff, 0x0180, 0xa89b, 0x000d, 0x7838, 0xa8a6, 0x783c, 0xa8aa,
+	0x0048, 0x9096, 0x0002, 0x1130, 0xa89b, 0x000d, 0x7838, 0xa8a6,
+	0x783c, 0xa8aa, 0x00fe, 0x009e, 0x00be, 0x004e, 0x003e, 0x002e,
+	0x0005, 0x00c6, 0x0026, 0x0016, 0x9186, 0x0035, 0x0110, 0x6a38,
+	0x0008, 0x6a2c, 0x080c, 0xb835, 0x01f0, 0x2260, 0x6120, 0x9186,
+	0x0003, 0x0118, 0x9186, 0x0006, 0x1190, 0x6838, 0x9206, 0x0140,
+	0x683c, 0x9206, 0x1160, 0x6108, 0x6838, 0x9106, 0x1140, 0x0020,
+	0x6008, 0x693c, 0x9106, 0x1118, 0x6010, 0x6910, 0x9106, 0x001e,
+	0x002e, 0x00ce, 0x0005, 0x9085, 0x0001, 0x0cc8, 0xa974, 0xd1cc,
+	0x0188, 0x918c, 0x00ff, 0x918e, 0x0002, 0x1160, 0xa9a8, 0x918c,
+	0x0f00, 0x810f, 0x918e, 0x0001, 0x1128, 0xa834, 0xa938, 0x9115,
+	0x190c, 0xaec2, 0x0005, 0x0036, 0x2019, 0x0001, 0x0010, 0x0036,
+	0x901e, 0x0499, 0x01e0, 0x080c, 0xb847, 0x01c8, 0x080c, 0xba36,
+	0x6037, 0x4000, 0x6014, 0x6017, 0x0000, 0x0096, 0x2048, 0xa87c,
+	0x080c, 0xba5c, 0x1118, 0x080c, 0xa58f, 0x0040, 0xa867, 0x0103,
+	0xa877, 0x0000, 0x83ff, 0x1129, 0x080c, 0x6996, 0x009e, 0x003e,
+	0x0005, 0xa880, 0xd0b4, 0x0128, 0xa87b, 0x0006, 0xc0ec, 0xa882,
+	0x0048, 0xd0bc, 0x0118, 0xa87b, 0x0002, 0x0020, 0xa87b, 0x0005,
+	0x080c, 0xbb4b, 0xa877, 0x0000, 0x0005, 0x2001, 0x1810, 0x2004,
+	0xd0ec, 0x0005, 0x0006, 0x2001, 0x1810, 0x2004, 0xd0f4, 0x000e,
+	0x0005, 0x0006, 0x2001, 0x1810, 0x2004, 0xd0e4, 0x000e, 0x0005,
+	0x0036, 0x0046, 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021,
+	0x0007, 0x080c, 0x4a75, 0x004e, 0x003e, 0x0005, 0x0c51, 0x1d81,
+	0x0005, 0x2001, 0x1957, 0x2004, 0x601a, 0x0005, 0x2001, 0x1959,
+	0x2004, 0x604a, 0x0005, 0x080c, 0x9be7, 0x0804, 0x8936, 0x611c,
+	0xd1fc, 0xa97c, 0x1108, 0xd1e4, 0x0005, 0x601c, 0xd0fc, 0xa87c,
+	0x1108, 0xd0e4, 0x0005, 0x601c, 0xd0fc, 0xc0fc, 0x601e, 0xa87c,
+	0x1108, 0xd0e4, 0x0005, 0x6044, 0xd0fc, 0x0160, 0xd0dc, 0x1128,
+	0x908c, 0x000f, 0x9186, 0x0005, 0x1118, 0x6003, 0x0003, 0x0010,
+	0x6003, 0x0001, 0x0005, 0x00b6, 0x0066, 0x6000, 0x90b2, 0x0016,
+	0x1a0c, 0x0d65, 0x001b, 0x006e, 0x00be, 0x0005, 0xbfc6, 0xc6a0,
+	0xc7ef, 0xbfc6, 0xbfc6, 0xbfc6, 0xbfc6, 0xbfc6, 0xbffd, 0xc871,
+	0xbfc6, 0xbfc6, 0xbfc6, 0xbfc6, 0xbfc6, 0xbfc6, 0x080c, 0x0d65,
+	0x0066, 0x6000, 0x90b2, 0x0016, 0x1a0c, 0x0d65, 0x0013, 0x006e,
+	0x0005, 0xbfe1, 0xcd88, 0xbfe1, 0xbfe1, 0xbfe1, 0xbfe1, 0xbfe1,
+	0xbfe1, 0xcd37, 0xcdda, 0xbfe1, 0xd3fd, 0xd431, 0xd3fd, 0xd431,
+	0xbfe1, 0x080c, 0x0d65, 0x6000, 0x9082, 0x0016, 0x1a0c, 0x0d65,
+	0x6000, 0x000a, 0x0005, 0xbffb, 0xca4d, 0xcb16, 0xcb38, 0xcbb3,
+	0xbffb, 0xccad, 0xcc3b, 0xc87b, 0xcd0f, 0xcd24, 0xbffb, 0xbffb,
+	0xbffb, 0xbffb, 0xbffb, 0x080c, 0x0d65, 0x91b2, 0x0053, 0x1a0c,
+	0x0d65, 0x2100, 0x91b2, 0x0040, 0x1a04, 0xc443, 0x0002, 0xc047,
+	0xc234, 0xc047, 0xc047, 0xc047, 0xc23d, 0xc047, 0xc047, 0xc047,
+	0xc047, 0xc047, 0xc047, 0xc047, 0xc047, 0xc047, 0xc047, 0xc047,
+	0xc047, 0xc047, 0xc047, 0xc047, 0xc047, 0xc047, 0xc049, 0xc0b0,
+	0xc0bf, 0xc123, 0xc14e, 0xc1c6, 0xc21f, 0xc047, 0xc047, 0xc240,
+	0xc047, 0xc047, 0xc255, 0xc262, 0xc047, 0xc047, 0xc047, 0xc047,
+	0xc047, 0xc2e5, 0xc047, 0xc047, 0xc2f9, 0xc047, 0xc047, 0xc2b4,
+	0xc047, 0xc047, 0xc047, 0xc311, 0xc047, 0xc047, 0xc047, 0xc38e,
+	0xc047, 0xc047, 0xc047, 0xc047, 0xc047, 0xc047, 0xc40b, 0x080c,
+	0x0d65, 0x080c, 0x6625, 0x1150, 0x2001, 0x1836, 0x2004, 0xd0cc,
+	0x1128, 0x9084, 0x0009, 0x9086, 0x0008, 0x1140, 0x6007, 0x0009,
+	0x602f, 0x0009, 0x6017, 0x0000, 0x0804, 0xc22d, 0x080c, 0x660e,
+	0x00e6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x6210, 0x2258, 0xbaa0,
+	0x0026, 0x2019, 0x0029, 0x080c, 0x98c8, 0x080c, 0x863b, 0x0076,
+	0x903e, 0x080c, 0x852a, 0x2c08, 0x080c, 0xcfc8, 0x007e, 0x001e,
+	0x080c, 0x98e4, 0x001e, 0x002e, 0x003e, 0x00ce, 0x00ee, 0x6610,
+	0x2658, 0x080c, 0x627f, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006,
+	0x1268, 0x0016, 0x0026, 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be,
+	0x2c08, 0x080c, 0xd5a9, 0x002e, 0x001e, 0x1178, 0x080c, 0xcef7,
+	0x1904, 0xc11b, 0x080c, 0xce93, 0x1120, 0x6007, 0x0008, 0x0804,
+	0xc22d, 0x6007, 0x0009, 0x0804, 0xc22d, 0x080c, 0xd0fe, 0x0128,
+	0x080c, 0xcef7, 0x0d78, 0x0804, 0xc11b, 0x6017, 0x1900, 0x0c88,
+	0x080c, 0x3150, 0x1904, 0xc440, 0x6106, 0x080c, 0xce44, 0x6007,
+	0x0006, 0x0804, 0xc22d, 0x6007, 0x0007, 0x0804, 0xc22d, 0x080c,
+	0xd46d, 0x1904, 0xc440, 0x080c, 0x3150, 0x1904, 0xc440, 0x00d6,
+	0x6610, 0x2658, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x1220,
+	0x2001, 0x0001, 0x080c, 0x61ad, 0x96b4, 0xff00, 0x8637, 0x9686,
+	0x0006, 0x0188, 0x9686, 0x0004, 0x0170, 0xbe04, 0x96b4, 0x00ff,
+	0x9686, 0x0006, 0x0140, 0x9686, 0x0004, 0x0128, 0x9686, 0x0005,
+	0x0110, 0x00de, 0x0480, 0x00e6, 0x2071, 0x0260, 0x7034, 0x9084,
+	0x0003, 0x1140, 0x7034, 0x9082, 0x0014, 0x0220, 0x7030, 0x9084,
+	0x0003, 0x0130, 0x00ee, 0x6017, 0x0000, 0x602f, 0x0007, 0x00b0,
+	0x00ee, 0x080c, 0xcf5e, 0x1190, 0x9686, 0x0006, 0x1140, 0x0026,
+	0x6210, 0x2258, 0xbaa0, 0x900e, 0x080c, 0x305b, 0x002e, 0x080c,
+	0x630b, 0x6007, 0x000a, 0x00de, 0x0804, 0xc22d, 0x6007, 0x000b,
+	0x00de, 0x0804, 0xc22d, 0x080c, 0x3006, 0x080c, 0xbf76, 0x6007,
+	0x0001, 0x0804, 0xc22d, 0x080c, 0xd46d, 0x1904, 0xc440, 0x080c,
+	0x3150, 0x1904, 0xc440, 0x2071, 0x0260, 0x7034, 0x90b4, 0x0003,
+	0x1948, 0x90b2, 0x0014, 0x0a30, 0x7030, 0x9084, 0x0003, 0x1910,
+	0x6610, 0x2658, 0xbe04, 0x9686, 0x0707, 0x09e8, 0x0026, 0x6210,
+	0x2258, 0xbaa0, 0x900e, 0x080c, 0x305b, 0x002e, 0x6007, 0x000c,
+	0x2001, 0x0001, 0x080c, 0xd589, 0x0804, 0xc22d, 0x080c, 0x6625,
+	0x1140, 0x2001, 0x1836, 0x2004, 0x9084, 0x0009, 0x9086, 0x0008,
+	0x1110, 0x0804, 0xc056, 0x080c, 0x660e, 0x6610, 0x2658, 0xbe04,
+	0x9684, 0x00ff, 0x9082, 0x0006, 0x06c0, 0x1138, 0x0026, 0x2001,
+	0x0006, 0x080c, 0x61ed, 0x002e, 0x0050, 0x96b4, 0xff00, 0x8637,
+	0x9686, 0x0004, 0x0120, 0x9686, 0x0006, 0x1904, 0xc11b, 0x080c,
+	0xcf6b, 0x1120, 0x6007, 0x000e, 0x0804, 0xc22d, 0x0046, 0x6410,
+	0x2458, 0xbca0, 0x0046, 0x080c, 0x3006, 0x080c, 0xbf76, 0x004e,
+	0x0016, 0x9006, 0x2009, 0x1854, 0x210c, 0x0048, 0x2009, 0x0029,
+	0x080c, 0xd273, 0x6010, 0x2058, 0xb800, 0xc0e5, 0xb802, 0x001e,
+	0x004e, 0x6007, 0x0001, 0x0804, 0xc22d, 0x2001, 0x0001, 0x080c,
+	0x61ad, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019,
+	0x1805, 0x2011, 0x0270, 0x080c, 0xabcb, 0x003e, 0x002e, 0x001e,
+	0x015e, 0x9005, 0x0168, 0x96b4, 0xff00, 0x8637, 0x9682, 0x0004,
+	0x0a04, 0xc11b, 0x9682, 0x0007, 0x0a04, 0xc177, 0x0804, 0xc11b,
+	0x6017, 0x1900, 0x6007, 0x0009, 0x0804, 0xc22d, 0x080c, 0x6625,
+	0x1140, 0x2001, 0x1836, 0x2004, 0x9084, 0x0009, 0x9086, 0x0008,
+	0x1110, 0x0804, 0xc056, 0x080c, 0x660e, 0x6610, 0x2658, 0xbe04,
+	0x9684, 0x00ff, 0x9082, 0x0006, 0x0690, 0x0150, 0x96b4, 0xff00,
+	0x8637, 0x9686, 0x0004, 0x0120, 0x9686, 0x0006, 0x1904, 0xc11b,
+	0x080c, 0xcf99, 0x1130, 0x080c, 0xce93, 0x1118, 0x6007, 0x0010,
+	0x04e0, 0x0046, 0x6410, 0x2458, 0xbca0, 0x0046, 0x080c, 0x3006,
+	0x080c, 0xbf76, 0x004e, 0x0016, 0x9006, 0x2009, 0x1854, 0x210c,
+	0x0048, 0x2009, 0x0029, 0x080c, 0xd273, 0x6010, 0x2058, 0xb800,
+	0xc0e5, 0xb802, 0x001e, 0x004e, 0x6007, 0x0001, 0x00f0, 0x080c,
+	0xd0fe, 0x0140, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0980,
+	0x0804, 0xc11b, 0x6017, 0x1900, 0x6007, 0x0009, 0x0070, 0x080c,
+	0x3150, 0x1904, 0xc440, 0x080c, 0xd46d, 0x1904, 0xc440, 0x080c,
+	0xc5e0, 0x1904, 0xc11b, 0x6007, 0x0012, 0x6003, 0x0001, 0x080c,
+	0x84d8, 0x080c, 0x8936, 0x0005, 0x6007, 0x0001, 0x6003, 0x0001,
+	0x080c, 0x84d8, 0x080c, 0x8936, 0x0cb0, 0x6007, 0x0005, 0x0c68,
+	0x080c, 0xd46d, 0x1904, 0xc440, 0x080c, 0x3150, 0x1904, 0xc440,
+	0x080c, 0xc5e0, 0x1904, 0xc11b, 0x6007, 0x0020, 0x6003, 0x0001,
+	0x080c, 0x84d8, 0x080c, 0x8936, 0x0005, 0x080c, 0x3150, 0x1904,
+	0xc440, 0x6007, 0x0023, 0x6003, 0x0001, 0x080c, 0x84d8, 0x080c,
+	0x8936, 0x0005, 0x080c, 0xd46d, 0x1904, 0xc440, 0x080c, 0x3150,
+	0x1904, 0xc440, 0x080c, 0xc5e0, 0x1904, 0xc11b, 0x0016, 0x0026,
+	0x00e6, 0x2071, 0x0260, 0x7244, 0x9286, 0xffff, 0x0180, 0x2c08,
+	0x080c, 0xb835, 0x01b0, 0x2260, 0x7240, 0x6008, 0x9206, 0x1188,
+	0x6010, 0x9190, 0x0004, 0x2214, 0x9206, 0x01b8, 0x0050, 0x7240,
+	0x2c08, 0x9006, 0x080c, 0xd245, 0x1180, 0x7244, 0x9286, 0xffff,
+	0x01b0, 0x2160, 0x6007, 0x0026, 0x6017, 0x1700, 0x7214, 0x9296,
+	0xffff, 0x1180, 0x6007, 0x0025, 0x0068, 0x6020, 0x9086, 0x0007,
+	0x1d80, 0x6004, 0x9086, 0x0024, 0x1110, 0x080c, 0x9be7, 0x2160,
+	0x6007, 0x0025, 0x6003, 0x0001, 0x080c, 0x84d8, 0x080c, 0x8936,
+	0x00ee, 0x002e, 0x001e, 0x0005, 0x2001, 0x0001, 0x080c, 0x61ad,
+	0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0x1805,
+	0x2011, 0x0276, 0x080c, 0xabcb, 0x003e, 0x002e, 0x001e, 0x015e,
+	0x0120, 0x6007, 0x0031, 0x0804, 0xc22d, 0x080c, 0xa830, 0x080c,
+	0x70b7, 0x1190, 0x0006, 0x0026, 0x0036, 0x080c, 0x70d1, 0x1138,
+	0x080c, 0x73b7, 0x080c, 0x5cdc, 0x080c, 0x6fe8, 0x0010, 0x080c,
+	0x708b, 0x003e, 0x002e, 0x000e, 0x0005, 0x080c, 0x3150, 0x1904,
+	0xc440, 0x080c, 0xc5e0, 0x1904, 0xc11b, 0x6106, 0x080c, 0xc5fc,
+	0x1120, 0x6007, 0x002b, 0x0804, 0xc22d, 0x6007, 0x002c, 0x0804,
+	0xc22d, 0x080c, 0xd46d, 0x1904, 0xc440, 0x080c, 0x3150, 0x1904,
+	0xc440, 0x080c, 0xc5e0, 0x1904, 0xc11b, 0x6106, 0x080c, 0xc601,
+	0x1120, 0x6007, 0x002e, 0x0804, 0xc22d, 0x6007, 0x002f, 0x0804,
+	0xc22d, 0x080c, 0x3150, 0x1904, 0xc440, 0x00e6, 0x00d6, 0x00c6,
+	0x6010, 0x2058, 0xb904, 0x9184, 0x00ff, 0x9086, 0x0006, 0x0158,
+	0x9184, 0xff00, 0x8007, 0x9086, 0x0006, 0x0128, 0x00ce, 0x00de,
+	0x00ee, 0x0804, 0xc234, 0x080c, 0x5391, 0xd0e4, 0x0904, 0xc38b,
+	0x2071, 0x026c, 0x7010, 0x603a, 0x7014, 0x603e, 0x7108, 0x720c,
+	0x080c, 0x6663, 0x0140, 0x6010, 0x2058, 0xb810, 0x9106, 0x1118,
+	0xb814, 0x9206, 0x0510, 0x080c, 0x665f, 0x15b8, 0x2069, 0x1800,
+	0x687c, 0x9206, 0x1590, 0x6878, 0x9106, 0x1578, 0x7210, 0x080c,
+	0xb835, 0x0590, 0x080c, 0xc4cb, 0x0578, 0x080c, 0xd2ef, 0x0560,
+	0x622e, 0x6007, 0x0036, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c,
+	0x84d1, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x7214, 0x9286, 0xffff,
+	0x0150, 0x080c, 0xb835, 0x01c0, 0x9280, 0x0002, 0x2004, 0x7110,
+	0x9106, 0x1190, 0x08e0, 0x7210, 0x2c08, 0x9085, 0x0001, 0x080c,
+	0xd245, 0x2c10, 0x2160, 0x0140, 0x0890, 0x6007, 0x0037, 0x602f,
+	0x0009, 0x6017, 0x1500, 0x08b8, 0x6007, 0x0037, 0x602f, 0x0003,
+	0x6017, 0x1700, 0x0880, 0x6007, 0x0012, 0x0868, 0x080c, 0x3150,
+	0x1904, 0xc440, 0x6010, 0x2058, 0xb804, 0x9084, 0xff00, 0x8007,
+	0x9086, 0x0006, 0x1904, 0xc234, 0x00e6, 0x00d6, 0x00c6, 0x080c,
+	0x5391, 0xd0e4, 0x0904, 0xc403, 0x2069, 0x1800, 0x2071, 0x026c,
+	0x7008, 0x603a, 0x720c, 0x623e, 0x9286, 0xffff, 0x1150, 0x7208,
+	0x00c6, 0x2c08, 0x9085, 0x0001, 0x080c, 0xd245, 0x2c10, 0x00ce,
+	0x05e8, 0x080c, 0xb835, 0x05d0, 0x7108, 0x9280, 0x0002, 0x2004,
+	0x9106, 0x15a0, 0x00c6, 0x0026, 0x2260, 0x080c, 0xb445, 0x002e,
+	0x00ce, 0x7118, 0x918c, 0xff00, 0x810f, 0x9186, 0x0001, 0x0178,
+	0x9186, 0x0005, 0x0118, 0x9186, 0x0007, 0x1198, 0x9280, 0x0005,
+	0x2004, 0x9005, 0x0170, 0x080c, 0xc4cb, 0x0904, 0xc384, 0x0056,
+	0x7510, 0x7614, 0x080c, 0xd308, 0x005e, 0x00ce, 0x00de, 0x00ee,
+	0x0005, 0x6007, 0x003b, 0x602f, 0x0009, 0x6017, 0x2a00, 0x6003,
+	0x0001, 0x2009, 0x8020, 0x080c, 0x84d1, 0x0c78, 0x6007, 0x003b,
+	0x602f, 0x0003, 0x6017, 0x0300, 0x6003, 0x0001, 0x2009, 0x8020,
+	0x080c, 0x84d1, 0x0c10, 0x6007, 0x003b, 0x602f, 0x000b, 0x6017,
+	0x0000, 0x0804, 0xc35b, 0x00e6, 0x0026, 0x080c, 0x6625, 0x0550,
+	0x080c, 0x660e, 0x080c, 0xd4df, 0x1518, 0x2071, 0x1800, 0x70d8,
+	0x9085, 0x0003, 0x70da, 0x00f6, 0x2079, 0x0100, 0x72ac, 0x9284,
+	0x00ff, 0x707a, 0x78e6, 0x9284, 0xff00, 0x727c, 0x9205, 0x707e,
+	0x78ea, 0x00fe, 0x70e3, 0x0000, 0x080c, 0x6663, 0x0120, 0x2011,
+	0x19da, 0x2013, 0x07d0, 0xd0ac, 0x1128, 0x080c, 0x2ddb, 0x0010,
+	0x080c, 0xd511, 0x002e, 0x00ee, 0x080c, 0x9be7, 0x0804, 0xc233,
+	0x080c, 0x9be7, 0x0005, 0x2600, 0x0002, 0xc457, 0xc457, 0xc457,
+	0xc457, 0xc457, 0xc459, 0xc457, 0xc457, 0xc457, 0xc457, 0xc476,
+	0xc457, 0xc457, 0xc457, 0xc488, 0xc495, 0xc4c6, 0xc457, 0x080c,
+	0x0d65, 0x080c, 0xd46d, 0x1d20, 0x080c, 0x3150, 0x1d08, 0x080c,
+	0xc5e0, 0x1148, 0x7038, 0x6016, 0x6007, 0x0045, 0x6003, 0x0001,
+	0x080c, 0x84d8, 0x0005, 0x080c, 0x3006, 0x080c, 0xbf76, 0x6007,
+	0x0001, 0x6003, 0x0001, 0x080c, 0x84d8, 0x0005, 0x080c, 0xd46d,
+	0x1938, 0x080c, 0x3150, 0x1920, 0x080c, 0xc5e0, 0x1d60, 0x703c,
+	0x6016, 0x6007, 0x004a, 0x6003, 0x0001, 0x080c, 0x84d8, 0x0005,
+	0x080c, 0xc4e8, 0x0904, 0xc440, 0x6007, 0x004e, 0x6003, 0x0001,
+	0x080c, 0x84d8, 0x080c, 0x8936, 0x0005, 0x6007, 0x004f, 0x6017,
+	0x0000, 0x7134, 0x918c, 0x00ff, 0x81ff, 0x0508, 0x9186, 0x0001,
+	0x1160, 0x7140, 0x2001, 0x198e, 0x2004, 0x9106, 0x11b0, 0x7144,
+	0x2001, 0x198f, 0x2004, 0x9106, 0x0190, 0x9186, 0x0002, 0x1168,
+	0x2011, 0x0276, 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048, 0x2019,
+	0x000a, 0x080c, 0xabdf, 0x009e, 0x0110, 0x6017, 0x0001, 0x6003,
+	0x0001, 0x080c, 0x84d8, 0x080c, 0x8936, 0x0005, 0x6007, 0x0050,
+	0x703c, 0x6016, 0x0ca0, 0x0016, 0x00e6, 0x2071, 0x0260, 0x00b6,
+	0x00c6, 0x2260, 0x6010, 0x2058, 0xb8c4, 0xd084, 0x0150, 0x7128,
+	0x6050, 0x9106, 0x1120, 0x712c, 0x604c, 0x9106, 0x0110, 0x9006,
+	0x0010, 0x9085, 0x0001, 0x00ce, 0x00be, 0x00ee, 0x001e, 0x0005,
+	0x0016, 0x0096, 0x0086, 0x00e6, 0x01c6, 0x01d6, 0x0126, 0x2091,
+	0x8000, 0x2071, 0x1800, 0x708c, 0x908a, 0x00f9, 0x16e8, 0x20e1,
+	0x0000, 0x2001, 0x1971, 0x2003, 0x0000, 0x080c, 0x103b, 0x05a0,
+	0x2900, 0x6016, 0x708c, 0x8004, 0xa816, 0x908a, 0x001e, 0x02d0,
+	0xa833, 0x001e, 0x20a9, 0x001e, 0xa860, 0x20e8, 0xa85c, 0x9080,
+	0x001b, 0x20a0, 0x2001, 0x1971, 0x0016, 0x200c, 0x0471, 0x001e,
+	0x2940, 0x080c, 0x103b, 0x01c0, 0x2900, 0xa006, 0x2100, 0x81ff,
+	0x0180, 0x0c18, 0xa832, 0x20a8, 0xa860, 0x20e8, 0xa85c, 0x9080,
+	0x001b, 0x20a0, 0x2001, 0x1971, 0x0016, 0x200c, 0x00b1, 0x001e,
+	0x0000, 0x9085, 0x0001, 0x0048, 0x2071, 0x1800, 0x708f, 0x0000,
+	0x6014, 0x2048, 0x080c, 0x0fd4, 0x9006, 0x012e, 0x01de, 0x01ce,
+	0x00ee, 0x008e, 0x009e, 0x001e, 0x0005, 0x0006, 0x0016, 0x0026,
+	0x0036, 0x00c6, 0x918c, 0xffff, 0x11a8, 0x080c, 0x202b, 0x2099,
+	0x026c, 0x2001, 0x0014, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003,
+	0x00f8, 0x20a8, 0x4003, 0x22a8, 0x8108, 0x080c, 0x202b, 0x2099,
+	0x0260, 0x0ca8, 0x080c, 0x202b, 0x2061, 0x1971, 0x6004, 0x2098,
+	0x6008, 0x3518, 0x9312, 0x1218, 0x23a8, 0x4003, 0x0048, 0x20a8,
+	0x4003, 0x22a8, 0x8108, 0x080c, 0x202b, 0x2099, 0x0260, 0x0ca8,
+	0x2061, 0x1971, 0x2019, 0x0280, 0x3300, 0x931e, 0x0110, 0x6006,
+	0x0020, 0x2001, 0x0260, 0x6006, 0x8108, 0x2162, 0x9292, 0x0021,
+	0x9296, 0xffff, 0x620a, 0x00ce, 0x003e, 0x002e, 0x001e, 0x000e,
+	0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00c6, 0x81ff, 0x11b8,
+	0x080c, 0x2043, 0x20a1, 0x024c, 0x2001, 0x0014, 0x3518, 0x9312,
+	0x1218, 0x23a8, 0x4003, 0x0418, 0x20a8, 0x4003, 0x82ff, 0x01f8,
+	0x22a8, 0x8108, 0x080c, 0x2043, 0x20a1, 0x0240, 0x0c98, 0x080c,
+	0x2043, 0x2061, 0x1974, 0x6004, 0x20a0, 0x6008, 0x3518, 0x9312,
+	0x1218, 0x23a8, 0x4003, 0x0058, 0x20a8, 0x4003, 0x82ff, 0x0138,
+	0x22a8, 0x8108, 0x080c, 0x2043, 0x20a1, 0x0240, 0x0c98, 0x2061,
+	0x1974, 0x2019, 0x0260, 0x3400, 0x931e, 0x0110, 0x6006, 0x0020,
+	0x2001, 0x0240, 0x6006, 0x8108, 0x2162, 0x9292, 0x0021, 0x9296,
+	0xffff, 0x620a, 0x00ce, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005,
+	0x00b6, 0x0066, 0x6610, 0x2658, 0xbe04, 0x96b4, 0xff00, 0x8637,
+	0x9686, 0x0006, 0x0170, 0x9686, 0x0004, 0x0158, 0xbe04, 0x96b4,
+	0x00ff, 0x9686, 0x0006, 0x0128, 0x9686, 0x0004, 0x0110, 0x9085,
+	0x0001, 0x006e, 0x00be, 0x0005, 0x00d6, 0x080c, 0xc676, 0x00de,
+	0x0005, 0x00d6, 0x080c, 0xc683, 0x1520, 0x680c, 0x908c, 0xff00,
+	0x6820, 0x9084, 0x00ff, 0x9115, 0x6216, 0x6824, 0x602e, 0xd1e4,
+	0x0130, 0x9006, 0x080c, 0xd589, 0x2009, 0x0001, 0x0078, 0xd1ec,
+	0x0180, 0x6920, 0x918c, 0x00ff, 0x6824, 0x080c, 0x2424, 0x1148,
+	0x2001, 0x0001, 0x080c, 0xd589, 0x2110, 0x900e, 0x080c, 0x305b,
+	0x0018, 0x9085, 0x0001, 0x0008, 0x9006, 0x00de, 0x0005, 0x00b6,
+	0x00c6, 0x080c, 0x9c58, 0x0598, 0x0016, 0x0026, 0x00c6, 0x2011,
+	0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x2424, 0x1568, 0x080c,
+	0x6210, 0x1550, 0xbe12, 0xbd16, 0x00ce, 0x002e, 0x001e, 0x2b00,
+	0x6012, 0x080c, 0xd46d, 0x11c8, 0x080c, 0x3150, 0x11b0, 0x080c,
+	0xc5e0, 0x0500, 0x2001, 0x0007, 0x080c, 0x61c1, 0x2001, 0x0007,
+	0x080c, 0x61ed, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001,
+	0x6003, 0x0001, 0x080c, 0x84d8, 0x0010, 0x080c, 0x9be7, 0x9085,
+	0x0001, 0x00ce, 0x00be, 0x0005, 0x080c, 0x9be7, 0x00ce, 0x002e,
+	0x001e, 0x0ca8, 0x080c, 0x9be7, 0x9006, 0x0c98, 0x2069, 0x026d,
+	0x6800, 0x9082, 0x0010, 0x1228, 0x6017, 0x0000, 0x9085, 0x0001,
+	0x0008, 0x9006, 0x0005, 0x6017, 0x0000, 0x2069, 0x026c, 0x6808,
+	0x9084, 0xff00, 0x9086, 0x0800, 0x1190, 0x6904, 0x9186, 0x0018,
+	0x0118, 0x9186, 0x0014, 0x1158, 0x810f, 0x6800, 0x9084, 0x00ff,
+	0x910d, 0x6162, 0x908e, 0x0014, 0x0110, 0x908e, 0x0010, 0x0005,
+	0x6004, 0x90b2, 0x0053, 0x1a0c, 0x0d65, 0x91b6, 0x0013, 0x1130,
+	0x2008, 0x91b2, 0x0040, 0x1a04, 0xc7c3, 0x0092, 0x91b6, 0x0027,
+	0x0120, 0x91b6, 0x0014, 0x190c, 0x0d65, 0x2001, 0x0007, 0x080c,
+	0x61ed, 0x080c, 0x8874, 0x080c, 0x9c21, 0x080c, 0x8936, 0x0005,
+	0xc700, 0xc702, 0xc700, 0xc700, 0xc700, 0xc702, 0xc70f, 0xc7c0,
+	0xc75f, 0xc7c0, 0xc771, 0xc7c0, 0xc70f, 0xc7c0, 0xc7b8, 0xc7c0,
+	0xc7b8, 0xc7c0, 0xc7c0, 0xc700, 0xc700, 0xc700, 0xc700, 0xc700,
+	0xc700, 0xc700, 0xc700, 0xc700, 0xc700, 0xc700, 0xc702, 0xc700,
+	0xc7c0, 0xc700, 0xc700, 0xc7c0, 0xc700, 0xc7bd, 0xc7c0, 0xc700,
+	0xc700, 0xc700, 0xc700, 0xc7c0, 0xc7c0, 0xc700, 0xc7c0, 0xc7c0,
+	0xc700, 0xc70a, 0xc700, 0xc700, 0xc700, 0xc700, 0xc7bc, 0xc7c0,
+	0xc700, 0xc700, 0xc7c0, 0xc7c0, 0xc700, 0xc700, 0xc700, 0xc700,
+	0x080c, 0x0d65, 0x080c, 0xbf79, 0x6003, 0x0002, 0x080c, 0x8936,
+	0x0804, 0xc7c2, 0x9006, 0x080c, 0x61ad, 0x0804, 0xc7c0, 0x080c,
+	0x665f, 0x1904, 0xc7c0, 0x9006, 0x080c, 0x61ad, 0x6010, 0x2058,
+	0xb810, 0x9086, 0x00ff, 0x1140, 0x00f6, 0x2079, 0x1800, 0x78a4,
+	0x8000, 0x78a6, 0x00fe, 0x0428, 0x6010, 0x2058, 0xb884, 0x9005,
+	0x1178, 0x080c, 0xbf61, 0x1904, 0xc7c0, 0x0036, 0x0046, 0xbba0,
+	0x2021, 0x0007, 0x080c, 0x4a75, 0x004e, 0x003e, 0x0804, 0xc7c0,
+	0x080c, 0x3181, 0x1904, 0xc7c0, 0x2001, 0x1800, 0x2004, 0x9086,
+	0x0002, 0x1138, 0x00f6, 0x2079, 0x1800, 0x78a4, 0x8000, 0x78a6,
+	0x00fe, 0x2001, 0x0002, 0x080c, 0x61c1, 0x6023, 0x0001, 0x6003,
+	0x0001, 0x6007, 0x0002, 0x080c, 0x84d8, 0x080c, 0x8936, 0x6110,
+	0x2158, 0x2009, 0x0001, 0x080c, 0x8167, 0x0804, 0xc7c2, 0x6610,
+	0x2658, 0xbe04, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0904,
+	0xc7c0, 0x9686, 0x0004, 0x0904, 0xc7c0, 0x2001, 0x0004, 0x0804,
+	0xc7be, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1158, 0x0036,
+	0x0046, 0x6010, 0x2058, 0xbba0, 0x2021, 0x0006, 0x080c, 0x4a75,
+	0x004e, 0x003e, 0x2001, 0x0006, 0x080c, 0xc7dc, 0x6610, 0x2658,
+	0xbe04, 0x0066, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x006e,
+	0x0168, 0x2001, 0x0006, 0x080c, 0x61ed, 0x9284, 0x00ff, 0x908e,
+	0x0007, 0x1120, 0x2001, 0x0006, 0x080c, 0x61c1, 0x080c, 0x665f,
+	0x11f8, 0x2001, 0x1836, 0x2004, 0xd0a4, 0x01d0, 0xbe04, 0x96b4,
+	0x00ff, 0x9686, 0x0006, 0x01a0, 0x00f6, 0x2079, 0x1800, 0x78a4,
+	0x8000, 0x78a6, 0x00fe, 0x0804, 0xc749, 0x2001, 0x0004, 0x0030,
+	0x2001, 0x0006, 0x0409, 0x0020, 0x0018, 0x0010, 0x080c, 0x61ed,
+	0x080c, 0x9be7, 0x0005, 0x2600, 0x0002, 0xc7d7, 0xc7d7, 0xc7d7,
+	0xc7d7, 0xc7d7, 0xc7d9, 0xc7d7, 0xc7d7, 0xc7d7, 0xc7d7, 0xc7d9,
+	0xc7d7, 0xc7d7, 0xc7d7, 0xc7d9, 0xc7d9, 0xc7d9, 0xc7d9, 0x080c,
+	0x0d65, 0x080c, 0x9be7, 0x0005, 0x0016, 0x00b6, 0x00d6, 0x6110,
+	0x2158, 0xb900, 0xd184, 0x0138, 0x080c, 0x61c1, 0x9006, 0x080c,
+	0x61ad, 0x080c, 0x303b, 0x00de, 0x00be, 0x001e, 0x0005, 0x6610,
+	0x2658, 0xb804, 0x9084, 0xff00, 0x8007, 0x90b2, 0x000c, 0x1a0c,
+	0x0d65, 0x91b6, 0x0015, 0x1110, 0x003b, 0x0028, 0x91b6, 0x0016,
+	0x190c, 0x0d65, 0x006b, 0x0005, 0xa670, 0xa670, 0xa670, 0xa670,
+	0xa670, 0xa670, 0xc85b, 0xc81c, 0xa670, 0xa670, 0xa670, 0xa670,
+	0xa670, 0xa670, 0xa670, 0xa670, 0xa670, 0xa670, 0xc85b, 0xc862,
+	0xa670, 0xa670, 0xa670, 0xa670, 0x00f6, 0x080c, 0x665f, 0x11d8,
+	0x080c, 0xbf61, 0x11c0, 0x6010, 0x905d, 0x01a8, 0xb884, 0x9005,
+	0x0190, 0x9006, 0x080c, 0x61ad, 0x2001, 0x0002, 0x080c, 0x61c1,
+	0x6023, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x84d8,
+	0x080c, 0x8936, 0x00f0, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c,
+	0x080c, 0x2424, 0x11b0, 0x080c, 0x6270, 0x0118, 0x080c, 0x9be7,
+	0x0080, 0xb810, 0x0006, 0xb814, 0x0006, 0xb884, 0x0006, 0x080c,
+	0x5cf6, 0x000e, 0xb886, 0x000e, 0xb816, 0x000e, 0xb812, 0x080c,
+	0x9be7, 0x00fe, 0x0005, 0x6604, 0x96b6, 0x001e, 0x1110, 0x080c,
+	0x9be7, 0x0005, 0x080c, 0xaa54, 0x1148, 0x6003, 0x0001, 0x6007,
+	0x0001, 0x080c, 0x84d8, 0x080c, 0x8936, 0x0010, 0x080c, 0x9be7,
+	0x0005, 0x6004, 0x908a, 0x0053, 0x1a0c, 0x0d65, 0x080c, 0x8874,
+	0x080c, 0x9c21, 0x0005, 0x9182, 0x0040, 0x0002, 0xc891, 0xc891,
+	0xc891, 0xc891, 0xc893, 0xc891, 0xc891, 0xc891, 0xc891, 0xc891,
+	0xc891, 0xc891, 0xc891, 0xc891, 0xc891, 0xc891, 0xc891, 0xc891,
+	0xc891, 0x080c, 0x0d65, 0x0096, 0x00b6, 0x00d6, 0x00e6, 0x00f6,
 	0x0046, 0x0026, 0x6210, 0x2258, 0xb8ac, 0x9005, 0x11b0, 0x6007,
-	0x0044, 0x2071, 0x0260, 0x7444, 0x94a4, 0xff00, 0x0904, 0xc8da,
-	0x080c, 0xd55b, 0x1170, 0x9486, 0x2000, 0x1158, 0x2009, 0x0001,
-	0x2011, 0x0200, 0x080c, 0x83c3, 0x0020, 0x9026, 0x080c, 0xd490,
+	0x0044, 0x2071, 0x0260, 0x7444, 0x94a4, 0xff00, 0x0904, 0xc8fa,
+	0x080c, 0xd57d, 0x1170, 0x9486, 0x2000, 0x1158, 0x2009, 0x0001,
+	0x2011, 0x0200, 0x080c, 0x83eb, 0x0020, 0x9026, 0x080c, 0xd4b2,
 	0x0c30, 0x080c, 0x1022, 0x090c, 0x0d65, 0x6003, 0x0007, 0xa867,
 	0x010d, 0x9006, 0xa802, 0xa86a, 0xac8a, 0x2c00, 0xa88e, 0x6008,
 	0xa8e2, 0x6010, 0x2058, 0xb8a0, 0x7130, 0xa97a, 0x0016, 0xa876,
-	0xa87f, 0x0000, 0xa883, 0x0000, 0xa887, 0x0036, 0x080c, 0x698f,
-	0x001e, 0x080c, 0xd55b, 0x1904, 0xc93a, 0x9486, 0x2000, 0x1130,
-	0x2019, 0x0017, 0x080c, 0xd1c9, 0x0804, 0xc93a, 0x9486, 0x0200,
-	0x1120, 0x080c, 0xd159, 0x0804, 0xc93a, 0x9486, 0x0400, 0x0120,
-	0x9486, 0x1000, 0x1904, 0xc93a, 0x2019, 0x0002, 0x080c, 0xd178,
-	0x0804, 0xc93a, 0x2069, 0x1a3f, 0x6a00, 0xd284, 0x0904, 0xc9a4,
-	0x9284, 0x0300, 0x1904, 0xc99d, 0x6804, 0x9005, 0x0904, 0xc985,
-	0x2d78, 0x6003, 0x0007, 0x080c, 0x103b, 0x0904, 0xc946, 0x7800,
+	0xa87f, 0x0000, 0xa883, 0x0000, 0xa887, 0x0036, 0x080c, 0x6996,
+	0x001e, 0x080c, 0xd57d, 0x1904, 0xc95a, 0x9486, 0x2000, 0x1130,
+	0x2019, 0x0017, 0x080c, 0xd1eb, 0x0804, 0xc95a, 0x9486, 0x0200,
+	0x1120, 0x080c, 0xd17b, 0x0804, 0xc95a, 0x9486, 0x0400, 0x0120,
+	0x9486, 0x1000, 0x1904, 0xc95a, 0x2019, 0x0002, 0x080c, 0xd19a,
+	0x0804, 0xc95a, 0x2069, 0x1a3f, 0x6a00, 0xd284, 0x0904, 0xc9c4,
+	0x9284, 0x0300, 0x1904, 0xc9bd, 0x6804, 0x9005, 0x0904, 0xc9a5,
+	0x2d78, 0x6003, 0x0007, 0x080c, 0x103b, 0x0904, 0xc966, 0x7800,
 	0xd08c, 0x1118, 0x7804, 0x8001, 0x7806, 0x6017, 0x0000, 0x2001,
-	0x180f, 0x2004, 0xd084, 0x1904, 0xc9a8, 0x9006, 0xa802, 0xa867,
+	0x180f, 0x2004, 0xd084, 0x1904, 0xc9c8, 0x9006, 0xa802, 0xa867,
 	0x0116, 0xa86a, 0x6008, 0xa8e2, 0x2c00, 0xa87a, 0x6010, 0x2058,
 	0xb8a0, 0x7130, 0xa9b6, 0xa876, 0xb928, 0xa9ba, 0xb92c, 0xa9be,
 	0xb930, 0xa9c2, 0xb934, 0xa9c6, 0xa883, 0x003d, 0x7044, 0x9084,
-	0x0003, 0x9080, 0xc942, 0x2005, 0xa87e, 0x20a9, 0x000a, 0x2001,
+	0x0003, 0x9080, 0xc962, 0x2005, 0xa87e, 0x20a9, 0x000a, 0x2001,
 	0x0270, 0xaa5c, 0x9290, 0x0021, 0x2009, 0x0205, 0x200b, 0x0080,
 	0x20e1, 0x0000, 0xab60, 0x23e8, 0x2098, 0x22a0, 0x4003, 0x200b,
 	0x0000, 0x2001, 0x027a, 0x200c, 0xa9b2, 0x8000, 0x200c, 0xa9ae,
-	0x080c, 0x6992, 0x002e, 0x004e, 0x00fe, 0x00ee, 0x00de, 0x00be,
+	0x080c, 0x6999, 0x002e, 0x004e, 0x00fe, 0x00ee, 0x00de, 0x00be,
 	0x009e, 0x0005, 0x0000, 0x0080, 0x0040, 0x0000, 0x2001, 0x1810,
-	0x2004, 0xd084, 0x0120, 0x080c, 0x1022, 0x1904, 0xc8ef, 0x6017,
+	0x2004, 0xd084, 0x0120, 0x080c, 0x1022, 0x1904, 0xc90f, 0x6017,
 	0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x2009, 0xa022, 0x080c,
-	0x84a9, 0x0c00, 0x2069, 0x0260, 0x6848, 0x9084, 0xff00, 0x9086,
+	0x84d1, 0x0c00, 0x2069, 0x0260, 0x6848, 0x9084, 0xff00, 0x9086,
 	0x1200, 0x1198, 0x686c, 0x9084, 0x00ff, 0x0016, 0x6114, 0x918c,
 	0xf700, 0x910d, 0x6116, 0x001e, 0x6003, 0x0001, 0x6007, 0x0043,
-	0x2009, 0xa025, 0x080c, 0x84a9, 0x0828, 0x6868, 0x602e, 0x686c,
+	0x2009, 0xa025, 0x080c, 0x84d1, 0x0828, 0x6868, 0x602e, 0x686c,
 	0x6032, 0x6017, 0xf200, 0x6003, 0x0001, 0x6007, 0x0041, 0x2009,
-	0xa022, 0x080c, 0x84a9, 0x0804, 0xc93a, 0x2001, 0x180e, 0x2004,
-	0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x48d1, 0x6017, 0xf300,
+	0xa022, 0x080c, 0x84d1, 0x0804, 0xc95a, 0x2001, 0x180e, 0x2004,
+	0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x48d8, 0x6017, 0xf300,
 	0x0010, 0x6017, 0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x2009,
-	0xa022, 0x080c, 0x84a9, 0x0804, 0xc93a, 0x6017, 0xf500, 0x0c98,
-	0x6017, 0xf600, 0x0804, 0xc95a, 0x6017, 0xf200, 0x0804, 0xc95a,
+	0xa022, 0x080c, 0x84d1, 0x0804, 0xc95a, 0x6017, 0xf500, 0x0c98,
+	0x6017, 0xf600, 0x0804, 0xc97a, 0x6017, 0xf200, 0x0804, 0xc97a,
 	0xa867, 0x0146, 0xa86b, 0x0000, 0x6008, 0xa886, 0x2c00, 0xa87a,
-	0x7044, 0x9084, 0x0003, 0x9080, 0xc942, 0x2005, 0xa87e, 0x2928,
+	0x7044, 0x9084, 0x0003, 0x9080, 0xc962, 0x2005, 0xa87e, 0x2928,
 	0x6010, 0x2058, 0xb8a0, 0xa876, 0xb828, 0xa88a, 0xb82c, 0xa88e,
 	0xb830, 0xa892, 0xb834, 0xa896, 0xa883, 0x003d, 0x2009, 0x0205,
 	0x2104, 0x9085, 0x0080, 0x200a, 0x20e1, 0x0000, 0x2011, 0x0210,
 	0x2214, 0x9294, 0x0fff, 0xaaa2, 0x9282, 0x0111, 0x1a0c, 0x0d65,
 	0x8210, 0x821c, 0x2001, 0x026c, 0x2098, 0xa860, 0x20e8, 0xa85c,
-	0x9080, 0x0029, 0x20a0, 0x2011, 0xca24, 0x2041, 0x0001, 0x223d,
+	0x9080, 0x0029, 0x20a0, 0x2011, 0xca44, 0x2041, 0x0001, 0x223d,
 	0x9784, 0x00ff, 0x9322, 0x1208, 0x2300, 0x20a8, 0x4003, 0x931a,
 	0x0530, 0x8210, 0xd7fc, 0x1130, 0x8d68, 0x2d0a, 0x2001, 0x0260,
 	0x2098, 0x0c68, 0x2950, 0x080c, 0x103b, 0x0170, 0x2900, 0xb002,
 	0xa867, 0x0147, 0xa86b, 0x0000, 0xa860, 0x20e8, 0xa85c, 0x9080,
 	0x001b, 0x20a0, 0x8840, 0x08d8, 0x2548, 0xa800, 0x902d, 0x0118,
-	0x080c, 0x1054, 0x0cc8, 0x080c, 0x1054, 0x0804, 0xc946, 0x2548,
+	0x080c, 0x1054, 0x0cc8, 0x080c, 0x1054, 0x0804, 0xc966, 0x2548,
 	0x8847, 0x9885, 0x0046, 0xa866, 0x2009, 0x0205, 0x200b, 0x0000,
-	0x080c, 0xd1fc, 0x0804, 0xc93a, 0x8010, 0x0004, 0x801a, 0x0006,
+	0x080c, 0xd21e, 0x0804, 0xc95a, 0x8010, 0x0004, 0x801a, 0x0006,
 	0x8018, 0x0008, 0x8016, 0x000a, 0x8014, 0x9186, 0x0013, 0x1160,
 	0x6004, 0x908a, 0x0057, 0x1a0c, 0x0d65, 0x9082, 0x0040, 0x0a0c,
-	0x0d65, 0x2008, 0x0804, 0xcaaf, 0x9186, 0x0051, 0x0108, 0x0040,
-	0x080c, 0x9a9c, 0x01e8, 0x9086, 0x0002, 0x0904, 0xcaf6, 0x00c0,
+	0x0d65, 0x2008, 0x0804, 0xcacf, 0x9186, 0x0051, 0x0108, 0x0040,
+	0x080c, 0x9ab7, 0x01e8, 0x9086, 0x0002, 0x0904, 0xcb16, 0x00c0,
 	0x9186, 0x0027, 0x0180, 0x9186, 0x0048, 0x0128, 0x9186, 0x0014,
-	0x0150, 0x190c, 0x0d65, 0x080c, 0x9a9c, 0x0150, 0x9086, 0x0004,
-	0x0904, 0xcb93, 0x0028, 0x6004, 0x9082, 0x0040, 0x2008, 0x001a,
-	0x080c, 0x9c87, 0x0005, 0xca76, 0xca78, 0xca78, 0xca9f, 0xca76,
-	0xca76, 0xca76, 0xca76, 0xca76, 0xca76, 0xca76, 0xca76, 0xca76,
-	0xca76, 0xca76, 0xca76, 0xca76, 0xca76, 0xca76, 0x080c, 0x0d65,
-	0x080c, 0x884c, 0x080c, 0x890e, 0x0036, 0x0096, 0x6014, 0x904d,
-	0x01d8, 0x080c, 0xb82c, 0x01c0, 0x6003, 0x0002, 0x6010, 0x00b6,
+	0x0150, 0x190c, 0x0d65, 0x080c, 0x9ab7, 0x0150, 0x9086, 0x0004,
+	0x0904, 0xcbb3, 0x0028, 0x6004, 0x9082, 0x0040, 0x2008, 0x001a,
+	0x080c, 0x9ca2, 0x0005, 0xca96, 0xca98, 0xca98, 0xcabf, 0xca96,
+	0xca96, 0xca96, 0xca96, 0xca96, 0xca96, 0xca96, 0xca96, 0xca96,
+	0xca96, 0xca96, 0xca96, 0xca96, 0xca96, 0xca96, 0x080c, 0x0d65,
+	0x080c, 0x8874, 0x080c, 0x8936, 0x0036, 0x0096, 0x6014, 0x904d,
+	0x01d8, 0x080c, 0xb847, 0x01c0, 0x6003, 0x0002, 0x6010, 0x00b6,
 	0x2058, 0xb800, 0x00be, 0xd0bc, 0x1178, 0x2019, 0x0004, 0x080c,
-	0xd1fc, 0x6017, 0x0000, 0x6018, 0x9005, 0x1120, 0x2001, 0x1958,
+	0xd21e, 0x6017, 0x0000, 0x6018, 0x9005, 0x1120, 0x2001, 0x1958,
 	0x2004, 0x601a, 0x6003, 0x0007, 0x009e, 0x003e, 0x0005, 0x0096,
-	0x080c, 0x884c, 0x080c, 0x890e, 0x080c, 0xb82c, 0x0120, 0x6014,
-	0x2048, 0x080c, 0x1054, 0x080c, 0x9c06, 0x009e, 0x0005, 0x0002,
-	0xcac3, 0xcad8, 0xcac5, 0xcaed, 0xcac3, 0xcac3, 0xcac3, 0xcac3,
-	0xcac3, 0xcac3, 0xcac3, 0xcac3, 0xcac3, 0xcac3, 0xcac3, 0xcac3,
-	0xcac3, 0xcac3, 0xcac3, 0x080c, 0x0d65, 0x0096, 0x6014, 0x2048,
+	0x080c, 0x8874, 0x080c, 0x8936, 0x080c, 0xb847, 0x0120, 0x6014,
+	0x2048, 0x080c, 0x1054, 0x080c, 0x9c21, 0x009e, 0x0005, 0x0002,
+	0xcae3, 0xcaf8, 0xcae5, 0xcb0d, 0xcae3, 0xcae3, 0xcae3, 0xcae3,
+	0xcae3, 0xcae3, 0xcae3, 0xcae3, 0xcae3, 0xcae3, 0xcae3, 0xcae3,
+	0xcae3, 0xcae3, 0xcae3, 0x080c, 0x0d65, 0x0096, 0x6014, 0x2048,
 	0xa87c, 0xd0b4, 0x0138, 0x6003, 0x0007, 0x2009, 0x0043, 0x080c,
-	0x9c6a, 0x0010, 0x6003, 0x0004, 0x080c, 0x890e, 0x009e, 0x0005,
-	0x080c, 0xb82c, 0x0138, 0x6114, 0x0096, 0x2148, 0xa97c, 0x009e,
-	0xd1ec, 0x1138, 0x080c, 0x8398, 0x080c, 0x9bcc, 0x080c, 0x890e,
-	0x0005, 0x080c, 0xd454, 0x0db0, 0x0cc8, 0x6003, 0x0001, 0x6007,
-	0x0041, 0x2009, 0xa022, 0x080c, 0x84a9, 0x0005, 0x9182, 0x0040,
-	0x0002, 0xcb0c, 0xcb0e, 0xcb0c, 0xcb0c, 0xcb0c, 0xcb0c, 0xcb0c,
-	0xcb0c, 0xcb0c, 0xcb0c, 0xcb0c, 0xcb0c, 0xcb0c, 0xcb0c, 0xcb0c,
-	0xcb0c, 0xcb0c, 0xcb0f, 0xcb0c, 0x080c, 0x0d65, 0x0005, 0x00d6,
-	0x080c, 0x8398, 0x00de, 0x080c, 0xd4ac, 0x080c, 0x9bcc, 0x0005,
-	0x9182, 0x0040, 0x0002, 0xcb2e, 0xcb2e, 0xcb2e, 0xcb2e, 0xcb2e,
-	0xcb2e, 0xcb2e, 0xcb2e, 0xcb2e, 0xcb30, 0xcb5b, 0xcb2e, 0xcb2e,
-	0xcb2e, 0xcb2e, 0xcb5b, 0xcb2e, 0xcb2e, 0xcb2e, 0x080c, 0x0d65,
+	0x9c85, 0x0010, 0x6003, 0x0004, 0x080c, 0x8936, 0x009e, 0x0005,
+	0x080c, 0xb847, 0x0138, 0x6114, 0x0096, 0x2148, 0xa97c, 0x009e,
+	0xd1ec, 0x1138, 0x080c, 0x83c0, 0x080c, 0x9be7, 0x080c, 0x8936,
+	0x0005, 0x080c, 0xd476, 0x0db0, 0x0cc8, 0x6003, 0x0001, 0x6007,
+	0x0041, 0x2009, 0xa022, 0x080c, 0x84d1, 0x0005, 0x9182, 0x0040,
+	0x0002, 0xcb2c, 0xcb2e, 0xcb2c, 0xcb2c, 0xcb2c, 0xcb2c, 0xcb2c,
+	0xcb2c, 0xcb2c, 0xcb2c, 0xcb2c, 0xcb2c, 0xcb2c, 0xcb2c, 0xcb2c,
+	0xcb2c, 0xcb2c, 0xcb2f, 0xcb2c, 0x080c, 0x0d65, 0x0005, 0x00d6,
+	0x080c, 0x83c0, 0x00de, 0x080c, 0xd4ce, 0x080c, 0x9be7, 0x0005,
+	0x9182, 0x0040, 0x0002, 0xcb4e, 0xcb4e, 0xcb4e, 0xcb4e, 0xcb4e,
+	0xcb4e, 0xcb4e, 0xcb4e, 0xcb4e, 0xcb50, 0xcb7b, 0xcb4e, 0xcb4e,
+	0xcb4e, 0xcb4e, 0xcb7b, 0xcb4e, 0xcb4e, 0xcb4e, 0x080c, 0x0d65,
 	0x6014, 0x0096, 0x2048, 0xa87c, 0xd0fc, 0x0168, 0x908c, 0x0003,
 	0x918e, 0x0002, 0x0180, 0x6144, 0xd1e4, 0x1168, 0x2009, 0x0041,
-	0x009e, 0x0804, 0xcc1b, 0x6003, 0x0007, 0x601b, 0x0000, 0x080c,
-	0x8398, 0x009e, 0x0005, 0x6014, 0x2048, 0xa97c, 0xd1ec, 0x1130,
-	0x080c, 0x8398, 0x080c, 0x9bcc, 0x009e, 0x0005, 0x080c, 0xd454,
+	0x009e, 0x0804, 0xcc3b, 0x6003, 0x0007, 0x601b, 0x0000, 0x080c,
+	0x83c0, 0x009e, 0x0005, 0x6014, 0x2048, 0xa97c, 0xd1ec, 0x1130,
+	0x080c, 0x83c0, 0x080c, 0x9be7, 0x009e, 0x0005, 0x080c, 0xd476,
 	0x0db8, 0x009e, 0x0005, 0x2001, 0x180c, 0x200c, 0xc1d4, 0x2102,
-	0x0036, 0x080c, 0x88a9, 0x080c, 0x890e, 0x6014, 0x0096, 0x2048,
+	0x0036, 0x080c, 0x88d1, 0x080c, 0x8936, 0x6014, 0x0096, 0x2048,
 	0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0188, 0xa87c,
 	0x9084, 0x0003, 0x9086, 0x0002, 0x0140, 0xa8ac, 0x6330, 0x931a,
 	0x6332, 0xa8b0, 0x632c, 0x931b, 0x632e, 0x6003, 0x0002, 0x0080,
-	0x2019, 0x0004, 0x080c, 0xd1fc, 0x6018, 0x9005, 0x1128, 0x2001,
+	0x2019, 0x0004, 0x080c, 0xd21e, 0x6018, 0x9005, 0x1128, 0x2001,
 	0x1958, 0x2004, 0x8003, 0x601a, 0x6017, 0x0000, 0x6003, 0x0007,
-	0x009e, 0x003e, 0x0005, 0x9182, 0x0040, 0x0002, 0xcbaa, 0xcbaa,
-	0xcbaa, 0xcbaa, 0xcbaa, 0xcbaa, 0xcbaa, 0xcbaa, 0xcbac, 0xcbaa,
-	0xcbaa, 0xcbaa, 0xcbaa, 0xcbaa, 0xcbaa, 0xcbaa, 0xcbaa, 0xcbaa,
-	0xcbaa, 0xcbf7, 0x080c, 0x0d65, 0x6014, 0x0096, 0x2048, 0xa834,
+	0x009e, 0x003e, 0x0005, 0x9182, 0x0040, 0x0002, 0xcbca, 0xcbca,
+	0xcbca, 0xcbca, 0xcbca, 0xcbca, 0xcbca, 0xcbca, 0xcbcc, 0xcbca,
+	0xcbca, 0xcbca, 0xcbca, 0xcbca, 0xcbca, 0xcbca, 0xcbca, 0xcbca,
+	0xcbca, 0xcc17, 0x080c, 0x0d65, 0x6014, 0x0096, 0x2048, 0xa834,
 	0xaa38, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1bc, 0x1190,
 	0x920d, 0x1518, 0xa87c, 0xd0fc, 0x0128, 0x2009, 0x0041, 0x009e,
-	0x0804, 0xcc1b, 0x6003, 0x0007, 0x601b, 0x0000, 0x080c, 0x8398,
+	0x0804, 0xcc3b, 0x6003, 0x0007, 0x601b, 0x0000, 0x080c, 0x83c0,
 	0x009e, 0x0005, 0x6124, 0xd1f4, 0x1d58, 0x0006, 0x0046, 0xacac,
 	0x9422, 0xa9b0, 0x2200, 0x910b, 0x6030, 0x9420, 0x6432, 0x602c,
 	0x9109, 0x612e, 0x004e, 0x000e, 0x08d8, 0x6110, 0x00b6, 0x2158,
 	0xb900, 0x00be, 0xd1bc, 0x1178, 0x2009, 0x180e, 0x210c, 0xd19c,
 	0x0118, 0x6003, 0x0007, 0x0010, 0x6003, 0x0006, 0x00e9, 0x080c,
-	0x839a, 0x009e, 0x0005, 0x6003, 0x0002, 0x009e, 0x0005, 0x6024,
-	0xd0f4, 0x0128, 0x080c, 0x1595, 0x1904, 0xcbac, 0x0005, 0x6014,
+	0x83c2, 0x009e, 0x0005, 0x6003, 0x0002, 0x009e, 0x0005, 0x6024,
+	0xd0f4, 0x0128, 0x080c, 0x1595, 0x1904, 0xcbcc, 0x0005, 0x6014,
 	0x0096, 0x2048, 0xa834, 0xa938, 0x009e, 0x9105, 0x1120, 0x080c,
-	0x1595, 0x1904, 0xcbac, 0x0005, 0xd2fc, 0x0140, 0x8002, 0x8000,
+	0x1595, 0x1904, 0xcbcc, 0x0005, 0xd2fc, 0x0140, 0x8002, 0x8000,
 	0x8212, 0x9291, 0x0000, 0x2009, 0x0009, 0x0010, 0x2009, 0x0015,
 	0xaa9a, 0xa896, 0x0005, 0x9182, 0x0040, 0x0208, 0x0062, 0x9186,
 	0x0013, 0x0120, 0x9186, 0x0014, 0x190c, 0x0d65, 0x6024, 0xd0dc,
-	0x090c, 0x0d65, 0x0005, 0xcc3e, 0xcc4a, 0xcc56, 0xcc62, 0xcc3e,
-	0xcc3e, 0xcc3e, 0xcc3e, 0xcc45, 0xcc40, 0xcc40, 0xcc3e, 0xcc3e,
-	0xcc3e, 0xcc3e, 0xcc40, 0xcc3e, 0xcc40, 0xcc3e, 0x080c, 0x0d65,
+	0x090c, 0x0d65, 0x0005, 0xcc5e, 0xcc6a, 0xcc76, 0xcc82, 0xcc5e,
+	0xcc5e, 0xcc5e, 0xcc5e, 0xcc65, 0xcc60, 0xcc60, 0xcc5e, 0xcc5e,
+	0xcc5e, 0xcc5e, 0xcc60, 0xcc5e, 0xcc60, 0xcc5e, 0x080c, 0x0d65,
 	0x6024, 0xd0dc, 0x090c, 0x0d65, 0x0005, 0x6014, 0x9005, 0x190c,
 	0x0d65, 0x0005, 0x6003, 0x0001, 0x6106, 0x0126, 0x2091, 0x8000,
-	0x2009, 0xa022, 0x080c, 0x848b, 0x012e, 0x0005, 0x6003, 0x0004,
-	0x6106, 0x0126, 0x2091, 0x8000, 0x2009, 0xa001, 0x080c, 0x84a9,
+	0x2009, 0xa022, 0x080c, 0x84b3, 0x012e, 0x0005, 0x6003, 0x0004,
+	0x6106, 0x0126, 0x2091, 0x8000, 0x2009, 0xa001, 0x080c, 0x84d1,
 	0x012e, 0x0005, 0x6003, 0x0003, 0x6106, 0x080c, 0x1aa5, 0x0126,
 	0x2091, 0x8000, 0x6014, 0x0096, 0x2048, 0xa87c, 0xd0fc, 0x0188,
 	0x9084, 0x0003, 0x9086, 0x0002, 0x01a0, 0x6024, 0xd0cc, 0x1148,
 	0xd0c4, 0x1138, 0xa8a8, 0x9005, 0x1120, 0x6144, 0x918d, 0xb035,
-	0x0018, 0x6144, 0x918d, 0xa035, 0x009e, 0x080c, 0x84f0, 0x012e,
+	0x0018, 0x6144, 0x918d, 0xa035, 0x009e, 0x080c, 0x8518, 0x012e,
 	0x0005, 0x6144, 0x918d, 0xa032, 0x0cb8, 0x0126, 0x2091, 0x8000,
 	0x0036, 0x0096, 0x9182, 0x0040, 0x0023, 0x009e, 0x003e, 0x012e,
-	0x0005, 0xcca9, 0xccab, 0xccc0, 0xccda, 0xcca9, 0xcca9, 0xcca9,
-	0xcca9, 0xcca9, 0xcca9, 0xcca9, 0xcca9, 0xcca9, 0xcca9, 0xcca9,
-	0xcca9, 0x080c, 0x0d65, 0x6014, 0x2048, 0xa87c, 0xd0fc, 0x0510,
+	0x0005, 0xccc9, 0xcccb, 0xcce0, 0xccfa, 0xccc9, 0xccc9, 0xccc9,
+	0xccc9, 0xccc9, 0xccc9, 0xccc9, 0xccc9, 0xccc9, 0xccc9, 0xccc9,
+	0xccc9, 0x080c, 0x0d65, 0x6014, 0x2048, 0xa87c, 0xd0fc, 0x0510,
 	0x909c, 0x0003, 0x939e, 0x0003, 0x01e8, 0x6003, 0x0001, 0x6106,
-	0x0126, 0x2091, 0x8000, 0x2009, 0xa022, 0x080c, 0x84a9, 0x0470,
+	0x0126, 0x2091, 0x8000, 0x2009, 0xa022, 0x080c, 0x84d1, 0x0470,
 	0x6014, 0x2048, 0xa87c, 0xd0fc, 0x0168, 0x909c, 0x0003, 0x939e,
 	0x0003, 0x0140, 0x6003, 0x0001, 0x6106, 0x2009, 0xa001, 0x080c,
-	0x84a9, 0x00e0, 0x901e, 0x6316, 0x631a, 0x2019, 0x0004, 0x080c,
-	0xd1fc, 0x00a0, 0x6014, 0x2048, 0xa87c, 0xd0fc, 0x0d98, 0x909c,
+	0x84d1, 0x00e0, 0x901e, 0x6316, 0x631a, 0x2019, 0x0004, 0x080c,
+	0xd21e, 0x00a0, 0x6014, 0x2048, 0xa87c, 0xd0fc, 0x0d98, 0x909c,
 	0x0003, 0x939e, 0x0003, 0x0d70, 0x6003, 0x0003, 0x6106, 0x080c,
-	0x1aa5, 0x6144, 0x918d, 0xa035, 0x080c, 0x84f0, 0x0005, 0x080c,
-	0x884c, 0x6114, 0x81ff, 0x0158, 0x0096, 0x2148, 0x080c, 0xd4f8,
-	0x0036, 0x2019, 0x0029, 0x080c, 0xd1fc, 0x003e, 0x009e, 0x080c,
-	0x9c06, 0x080c, 0x890e, 0x0005, 0x080c, 0x88a9, 0x6114, 0x81ff,
-	0x0158, 0x0096, 0x2148, 0x080c, 0xd4f8, 0x0036, 0x2019, 0x0029,
-	0x080c, 0xd1fc, 0x003e, 0x009e, 0x080c, 0x9c06, 0x0005, 0x9182,
-	0x0085, 0x0002, 0xcd29, 0xcd27, 0xcd27, 0xcd35, 0xcd27, 0xcd27,
-	0xcd27, 0xcd27, 0xcd27, 0xcd27, 0xcd27, 0xcd27, 0xcd27, 0x080c,
+	0x1aa5, 0x6144, 0x918d, 0xa035, 0x080c, 0x8518, 0x0005, 0x080c,
+	0x8874, 0x6114, 0x81ff, 0x0158, 0x0096, 0x2148, 0x080c, 0xd51a,
+	0x0036, 0x2019, 0x0029, 0x080c, 0xd21e, 0x003e, 0x009e, 0x080c,
+	0x9c21, 0x080c, 0x8936, 0x0005, 0x080c, 0x88d1, 0x6114, 0x81ff,
+	0x0158, 0x0096, 0x2148, 0x080c, 0xd51a, 0x0036, 0x2019, 0x0029,
+	0x080c, 0xd21e, 0x003e, 0x009e, 0x080c, 0x9c21, 0x0005, 0x9182,
+	0x0085, 0x0002, 0xcd49, 0xcd47, 0xcd47, 0xcd55, 0xcd47, 0xcd47,
+	0xcd47, 0xcd47, 0xcd47, 0xcd47, 0xcd47, 0xcd47, 0xcd47, 0x080c,
 	0x0d65, 0x6003, 0x000b, 0x6106, 0x0126, 0x2091, 0x8000, 0x2009,
-	0x8020, 0x080c, 0x84a9, 0x012e, 0x0005, 0x0026, 0x00e6, 0x080c,
-	0xd44b, 0x0118, 0x080c, 0x9bcc, 0x0440, 0x2071, 0x0260, 0x7224,
+	0x8020, 0x080c, 0x84d1, 0x012e, 0x0005, 0x0026, 0x00e6, 0x080c,
+	0xd46d, 0x0118, 0x080c, 0x9be7, 0x0440, 0x2071, 0x0260, 0x7224,
 	0x6216, 0x2001, 0x180e, 0x2004, 0xd0e4, 0x0150, 0x6010, 0x00b6,
-	0x2058, 0xbca0, 0x00be, 0x2c00, 0x2011, 0x014e, 0x080c, 0x9ef8,
-	0x7220, 0x080c, 0xd092, 0x0118, 0x6007, 0x0086, 0x0040, 0x6007,
+	0x2058, 0xbca0, 0x00be, 0x2c00, 0x2011, 0x014e, 0x080c, 0x9f13,
+	0x7220, 0x080c, 0xd0b4, 0x0118, 0x6007, 0x0086, 0x0040, 0x6007,
 	0x0087, 0x7224, 0x9296, 0xffff, 0x1110, 0x6007, 0x0086, 0x6003,
-	0x0001, 0x2009, 0x8020, 0x080c, 0x84a9, 0x00ee, 0x002e, 0x0005,
+	0x0001, 0x2009, 0x8020, 0x080c, 0x84d1, 0x00ee, 0x002e, 0x0005,
 	0x9186, 0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0d65,
 	0x908a, 0x0092, 0x1a0c, 0x0d65, 0x9082, 0x0085, 0x00a2, 0x9186,
-	0x0027, 0x0130, 0x9186, 0x0014, 0x0118, 0x080c, 0x9c87, 0x0050,
-	0x2001, 0x0007, 0x080c, 0x61e6, 0x080c, 0x884c, 0x080c, 0x9c06,
-	0x080c, 0x890e, 0x0005, 0xcd98, 0xcd9a, 0xcd9a, 0xcd98, 0xcd98,
-	0xcd98, 0xcd98, 0xcd98, 0xcd98, 0xcd98, 0xcd98, 0xcd98, 0xcd98,
-	0x080c, 0x0d65, 0x080c, 0x9c06, 0x080c, 0x890e, 0x0005, 0x9182,
+	0x0027, 0x0130, 0x9186, 0x0014, 0x0118, 0x080c, 0x9ca2, 0x0050,
+	0x2001, 0x0007, 0x080c, 0x61ed, 0x080c, 0x8874, 0x080c, 0x9c21,
+	0x080c, 0x8936, 0x0005, 0xcdb8, 0xcdba, 0xcdba, 0xcdb8, 0xcdb8,
+	0xcdb8, 0xcdb8, 0xcdb8, 0xcdb8, 0xcdb8, 0xcdb8, 0xcdb8, 0xcdb8,
+	0x080c, 0x0d65, 0x080c, 0x9c21, 0x080c, 0x8936, 0x0005, 0x9182,
 	0x0085, 0x0a0c, 0x0d65, 0x9182, 0x0092, 0x1a0c, 0x0d65, 0x9182,
-	0x0085, 0x0002, 0xcdb7, 0xcdb7, 0xcdb7, 0xcdb9, 0xcdb7, 0xcdb7,
-	0xcdb7, 0xcdb7, 0xcdb7, 0xcdb7, 0xcdb7, 0xcdb7, 0xcdb7, 0x080c,
+	0x0085, 0x0002, 0xcdd7, 0xcdd7, 0xcdd7, 0xcdd9, 0xcdd7, 0xcdd7,
+	0xcdd7, 0xcdd7, 0xcdd7, 0xcdd7, 0xcdd7, 0xcdd7, 0xcdd7, 0x080c,
 	0x0d65, 0x0005, 0x9186, 0x0013, 0x0148, 0x9186, 0x0014, 0x0130,
-	0x9186, 0x0027, 0x0118, 0x080c, 0x9c87, 0x0020, 0x080c, 0x884c,
-	0x080c, 0x9c06, 0x0005, 0x0036, 0x080c, 0xd4ac, 0x604b, 0x0000,
+	0x9186, 0x0027, 0x0118, 0x080c, 0x9ca2, 0x0020, 0x080c, 0x8874,
+	0x080c, 0x9c21, 0x0005, 0x0036, 0x080c, 0xd4ce, 0x604b, 0x0000,
 	0x2019, 0x000b, 0x0031, 0x6023, 0x0006, 0x6003, 0x0007, 0x003e,
 	0x0005, 0x0126, 0x0036, 0x2091, 0x8000, 0x2001, 0x0382, 0x2004,
-	0x9084, 0x0007, 0x0006, 0x9086, 0x0003, 0x0110, 0x080c, 0x98ad,
-	0x0086, 0x2c40, 0x0096, 0x904e, 0x080c, 0x9367, 0x009e, 0x008e,
-	0x1550, 0x0076, 0x2c38, 0x080c, 0x9412, 0x007e, 0x1520, 0x6000,
+	0x9084, 0x0007, 0x0006, 0x9086, 0x0003, 0x0110, 0x080c, 0x98c8,
+	0x0086, 0x2c40, 0x0096, 0x904e, 0x080c, 0x9382, 0x009e, 0x008e,
+	0x1550, 0x0076, 0x2c38, 0x080c, 0x942d, 0x007e, 0x1520, 0x6000,
 	0x9086, 0x0000, 0x0500, 0x6020, 0x9086, 0x0007, 0x01e0, 0x0096,
-	0x601c, 0xd084, 0x0140, 0x080c, 0xd4ac, 0x080c, 0xbf5e, 0x080c,
-	0x1914, 0x6023, 0x0007, 0x6014, 0x2048, 0x080c, 0xb82c, 0x0110,
-	0x080c, 0xd1fc, 0x009e, 0x6017, 0x0000, 0x080c, 0xd4ac, 0x6023,
-	0x0007, 0x080c, 0xbf5e, 0x000e, 0x9086, 0x0003, 0x0110, 0x080c,
-	0x98c9, 0x003e, 0x012e, 0x0005, 0x00f6, 0x00c6, 0x00b6, 0x0036,
-	0x0156, 0x2079, 0x0260, 0x7938, 0x783c, 0x080c, 0x2424, 0x15d8,
-	0x0016, 0x00c6, 0x080c, 0x6269, 0x15a0, 0x001e, 0x00c6, 0x2160,
-	0x080c, 0xbf5b, 0x00ce, 0x002e, 0x0026, 0x0016, 0x080c, 0x98ad,
-	0x2019, 0x0029, 0x080c, 0x94d9, 0x080c, 0x8613, 0x0076, 0x903e,
-	0x080c, 0x8502, 0x007e, 0x001e, 0x0076, 0x903e, 0x080c, 0xcfa6,
-	0x007e, 0x080c, 0x98c9, 0x0026, 0xba04, 0x9294, 0xff00, 0x8217,
+	0x601c, 0xd084, 0x0140, 0x080c, 0xd4ce, 0x080c, 0xbf79, 0x080c,
+	0x1914, 0x6023, 0x0007, 0x6014, 0x2048, 0x080c, 0xb847, 0x0110,
+	0x080c, 0xd21e, 0x009e, 0x6017, 0x0000, 0x080c, 0xd4ce, 0x6023,
+	0x0007, 0x080c, 0xbf79, 0x000e, 0x9086, 0x0003, 0x0110, 0x080c,
+	0x98e4, 0x003e, 0x012e, 0x0005, 0x00f6, 0x00c6, 0x00b6, 0x0036,
+	0x0156, 0x2079, 0x0260, 0x7938, 0x783c, 0x080c, 0x2424, 0x15e8,
+	0x0016, 0x00c6, 0x080c, 0x6270, 0x15b0, 0x001e, 0x00c6, 0x2160,
+	0x080c, 0xbf76, 0x00ce, 0x002e, 0x0026, 0x0016, 0x080c, 0x98c8,
+	0x2019, 0x0029, 0x080c, 0x94f4, 0x080c, 0x863b, 0x0076, 0x903e,
+	0x080c, 0x852a, 0x007e, 0x001e, 0x0076, 0x903e, 0x080c, 0xcfc8,
+	0x007e, 0x080c, 0x98e4, 0x0026, 0xba04, 0x9294, 0xff00, 0x8217,
 	0x9286, 0x0006, 0x0118, 0x9286, 0x0004, 0x1118, 0xbaa0, 0x080c,
-	0x30d5, 0x002e, 0x001e, 0x080c, 0x5cef, 0xbe12, 0xbd16, 0x9006,
-	0x0010, 0x00ce, 0x001e, 0x015e, 0x003e, 0x00be, 0x00ce, 0x00fe,
-	0x0005, 0x00c6, 0x00d6, 0x00b6, 0x0016, 0x2009, 0x1823, 0x2104,
-	0x9086, 0x0074, 0x1904, 0xceca, 0x2069, 0x0260, 0x6944, 0x9182,
-	0x0100, 0x06e0, 0x6940, 0x9184, 0x8000, 0x0904, 0xcec7, 0x2001,
-	0x194d, 0x2004, 0x9005, 0x1140, 0x6010, 0x2058, 0xb884, 0x9005,
-	0x0118, 0x9184, 0x0800, 0x0598, 0x6948, 0x918a, 0x0001, 0x0648,
-	0x080c, 0xd560, 0x0118, 0x6978, 0xd1fc, 0x11b8, 0x2009, 0x0205,
-	0x200b, 0x0001, 0x693c, 0x81ff, 0x1198, 0x6944, 0x9182, 0x0100,
-	0x02a8, 0x6940, 0x81ff, 0x1178, 0x6948, 0x918a, 0x0001, 0x0288,
-	0x6950, 0x918a, 0x0001, 0x0298, 0x00d0, 0x6017, 0x0100, 0x00a0,
-	0x6017, 0x0300, 0x0088, 0x6017, 0x0500, 0x0070, 0x6017, 0x0700,
-	0x0058, 0x6017, 0x0900, 0x0040, 0x6017, 0x0b00, 0x0028, 0x6017,
-	0x0f00, 0x0010, 0x6017, 0x2d00, 0x9085, 0x0001, 0x0008, 0x9006,
-	0x001e, 0x00be, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00b6, 0x0026,
-	0x0036, 0x0156, 0x6210, 0x2258, 0xbb04, 0x9394, 0x00ff, 0x9286,
-	0x0006, 0x0180, 0x9286, 0x0004, 0x0168, 0x9394, 0xff00, 0x8217,
-	0x9286, 0x0006, 0x0138, 0x9286, 0x0004, 0x0120, 0x080c, 0x6278,
-	0x0804, 0xcf35, 0x2011, 0x0276, 0x20a9, 0x0004, 0x0096, 0x2b48,
-	0x2019, 0x000a, 0x080c, 0xabc4, 0x009e, 0x15c0, 0x2011, 0x027a,
-	0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c, 0xabc4,
-	0x009e, 0x1560, 0x0046, 0x0016, 0xbaa0, 0x2220, 0x9006, 0x2009,
-	0x1854, 0x210c, 0x0038, 0x2009, 0x0029, 0x080c, 0xd251, 0xb800,
-	0xc0e5, 0xb802, 0x080c, 0x98ad, 0x2019, 0x0029, 0x080c, 0x8613,
-	0x0076, 0x2039, 0x0000, 0x080c, 0x8502, 0x2c08, 0x080c, 0xcfa6,
-	0x007e, 0x080c, 0x98c9, 0x2001, 0x0007, 0x080c, 0x61e6, 0x2001,
-	0x0007, 0x080c, 0x61ba, 0x001e, 0x004e, 0x9006, 0x015e, 0x003e,
-	0x002e, 0x00be, 0x00ce, 0x0005, 0x00d6, 0x2069, 0x026e, 0x6800,
-	0x9086, 0x0800, 0x0118, 0x6017, 0x0000, 0x0008, 0x9006, 0x00de,
-	0x0005, 0x00b6, 0x00f6, 0x0016, 0x0026, 0x0036, 0x0156, 0x2079,
-	0x026c, 0x7930, 0x7834, 0x080c, 0x2424, 0x11d0, 0x080c, 0x6269,
-	0x11b8, 0x2011, 0x0270, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019,
-	0x000a, 0x080c, 0xabc4, 0x009e, 0x1158, 0x2011, 0x0274, 0x20a9,
-	0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c, 0xabc4, 0x009e,
-	0x015e, 0x003e, 0x002e, 0x001e, 0x00fe, 0x00be, 0x0005, 0x00b6,
-	0x0006, 0x0016, 0x0026, 0x0036, 0x0156, 0x2011, 0x0263, 0x2204,
-	0x8211, 0x220c, 0x080c, 0x2424, 0x11d0, 0x080c, 0x6269, 0x11b8,
-	0x2011, 0x0276, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x000a,
-	0x080c, 0xabc4, 0x009e, 0x1158, 0x2011, 0x027a, 0x20a9, 0x0004,
-	0x0096, 0x2b48, 0x2019, 0x0006, 0x080c, 0xabc4, 0x009e, 0x015e,
-	0x003e, 0x002e, 0x001e, 0x000e, 0x00be, 0x0005, 0x00e6, 0x00c6,
-	0x0086, 0x0076, 0x0066, 0x0056, 0x0046, 0x0026, 0x0126, 0x2091,
-	0x8000, 0x080c, 0x990b, 0x0106, 0x190c, 0x98ad, 0x2740, 0x2029,
-	0x19c4, 0x252c, 0x2021, 0x19cb, 0x2424, 0x2061, 0x1ddc, 0x2071,
-	0x1800, 0x7650, 0x7070, 0x81ff, 0x0150, 0x0006, 0x9186, 0x1b02,
-	0x000e, 0x0128, 0x8001, 0x9602, 0x1a04, 0xd047, 0x0018, 0x9606,
-	0x0904, 0xd047, 0x2100, 0x9c06, 0x0904, 0xd03e, 0x080c, 0xd292,
-	0x1904, 0xd03e, 0x080c, 0xd57d, 0x0904, 0xd03e, 0x080c, 0xd282,
-	0x0904, 0xd03e, 0x6720, 0x9786, 0x0001, 0x1148, 0x080c, 0x317a,
-	0x0904, 0xd066, 0x6004, 0x9086, 0x0000, 0x1904, 0xd066, 0x9786,
-	0x0004, 0x0904, 0xd066, 0x9786, 0x0007, 0x0904, 0xd03e, 0x2500,
-	0x9c06, 0x0904, 0xd03e, 0x2400, 0x9c06, 0x0904, 0xd03e, 0x88ff,
-	0x0118, 0x605c, 0x9906, 0x15d0, 0x0096, 0x6043, 0xffff, 0x6000,
-	0x9086, 0x0004, 0x1120, 0x0016, 0x080c, 0x1914, 0x001e, 0x9786,
-	0x000a, 0x0148, 0x080c, 0xba41, 0x1130, 0x080c, 0xa574, 0x009e,
-	0x080c, 0x9c06, 0x0418, 0x6014, 0x2048, 0x080c, 0xb82c, 0x01d8,
-	0x9786, 0x0003, 0x1588, 0xa867, 0x0103, 0xa87c, 0xd0cc, 0x0130,
-	0x0096, 0xa878, 0x2048, 0x080c, 0x0fd4, 0x009e, 0xab7a, 0xa877,
-	0x0000, 0x080c, 0xd4f8, 0x0016, 0x080c, 0xbb2a, 0x080c, 0x6983,
-	0x001e, 0x080c, 0xba1b, 0x009e, 0x080c, 0x9c06, 0x9ce0, 0x001c,
-	0x2001, 0x1819, 0x2004, 0x9c02, 0x1210, 0x0804, 0xcfbf, 0x010e,
-	0x190c, 0x98c9, 0x012e, 0x002e, 0x004e, 0x005e, 0x006e, 0x007e,
-	0x008e, 0x00ce, 0x00ee, 0x0005, 0x9786, 0x0006, 0x1150, 0x9386,
-	0x0005, 0x0128, 0x080c, 0xd4f8, 0x080c, 0xd1fc, 0x08e0, 0x009e,
-	0x08e8, 0x9786, 0x000a, 0x0908, 0x0804, 0xd023, 0x81ff, 0x09b0,
-	0x9180, 0x0001, 0x2004, 0x9086, 0x0018, 0x0130, 0x9180, 0x0001,
-	0x2004, 0x9086, 0x002d, 0x1950, 0x6000, 0x9086, 0x0002, 0x1930,
-	0x080c, 0xba30, 0x0130, 0x080c, 0xba41, 0x1900, 0x080c, 0xa574,
-	0x0038, 0x080c, 0x3034, 0x080c, 0xba41, 0x1110, 0x080c, 0xa574,
-	0x080c, 0x9c06, 0x0804, 0xd03e, 0xa864, 0x9084, 0x00ff, 0x9086,
-	0x0039, 0x0005, 0x00c6, 0x00e6, 0x0016, 0x2c08, 0x2170, 0x9006,
-	0x080c, 0xd223, 0x001e, 0x0120, 0x6020, 0x9084, 0x000f, 0x001b,
-	0x00ee, 0x00ce, 0x0005, 0xd0b1, 0xd0b1, 0xd0b1, 0xd0b1, 0xd0b1,
-	0xd0b1, 0xd0b3, 0xd0b1, 0xd0b1, 0xd0b1, 0xd0b1, 0x9c06, 0x9c06,
-	0xd0b1, 0x9006, 0x0005, 0x0036, 0x0046, 0x0016, 0x7010, 0x00b6,
-	0x2058, 0xbca0, 0x00be, 0x2c00, 0x2009, 0x0020, 0x080c, 0xd251,
-	0x001e, 0x004e, 0x2019, 0x0002, 0x080c, 0xcdd9, 0x003e, 0x9085,
-	0x0001, 0x0005, 0x0096, 0x080c, 0xb82c, 0x0140, 0x6014, 0x904d,
-	0x080c, 0xb437, 0x687b, 0x0005, 0x080c, 0x698f, 0x009e, 0x080c,
-	0x9c06, 0x9085, 0x0001, 0x0005, 0x2001, 0x0001, 0x080c, 0x61a6,
-	0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0x1805,
-	0x2011, 0x0276, 0x080c, 0xabb0, 0x003e, 0x002e, 0x001e, 0x015e,
-	0x9005, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066,
-	0x00b6, 0x0126, 0x2091, 0x8000, 0x2740, 0x2061, 0x1ddc, 0x2079,
-	0x0001, 0x8fff, 0x0904, 0xd14c, 0x2071, 0x1800, 0x7650, 0x7070,
-	0x8001, 0x9602, 0x1a04, 0xd14c, 0x88ff, 0x0120, 0x2800, 0x9c06,
-	0x1590, 0x2078, 0x080c, 0xd282, 0x0570, 0x2400, 0x9c06, 0x0558,
-	0x6720, 0x9786, 0x0006, 0x1538, 0x9786, 0x0007, 0x0520, 0x88ff,
-	0x1140, 0x6010, 0x9b06, 0x11f8, 0x85ff, 0x0118, 0x605c, 0x9106,
-	0x11d0, 0x0096, 0x601c, 0xd084, 0x0140, 0x080c, 0xd4ac, 0x080c,
-	0xbf5e, 0x080c, 0x1914, 0x6023, 0x0007, 0x6014, 0x2048, 0x080c,
-	0xb82c, 0x0120, 0x0046, 0x080c, 0xd1fc, 0x004e, 0x009e, 0x080c,
-	0x9c06, 0x88ff, 0x1198, 0x9ce0, 0x001c, 0x2001, 0x1819, 0x2004,
-	0x9c02, 0x1210, 0x0804, 0xd101, 0x9006, 0x012e, 0x00be, 0x006e,
-	0x007e, 0x008e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x98c5, 0x0001,
-	0x0ca0, 0x080c, 0x98ad, 0x00b6, 0x0076, 0x0056, 0x0086, 0x9046,
-	0x2029, 0x0001, 0x2c20, 0x2019, 0x0002, 0x6210, 0x2258, 0x0096,
-	0x904e, 0x080c, 0x9367, 0x009e, 0x008e, 0x903e, 0x080c, 0x9412,
-	0x080c, 0xd0f2, 0x005e, 0x007e, 0x00be, 0x080c, 0x98c9, 0x0005,
-	0x080c, 0x98ad, 0x00b6, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156,
-	0x2c20, 0x2128, 0x20a9, 0x007f, 0x900e, 0x0016, 0x0036, 0x080c,
-	0x6269, 0x1190, 0x0056, 0x0086, 0x9046, 0x2508, 0x2029, 0x0001,
-	0x0096, 0x904e, 0x080c, 0x9367, 0x009e, 0x008e, 0x903e, 0x080c,
-	0x9412, 0x080c, 0xd0f2, 0x005e, 0x003e, 0x001e, 0x8108, 0x1f04,
-	0xd185, 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e, 0x00be, 0x080c,
-	0x98c9, 0x0005, 0x080c, 0x98ad, 0x00b6, 0x0076, 0x0056, 0x6210,
-	0x2258, 0x0086, 0x9046, 0x2029, 0x0001, 0x2019, 0x0048, 0x0096,
-	0x904e, 0x080c, 0x9367, 0x009e, 0x008e, 0x903e, 0x080c, 0x9412,
-	0x2c20, 0x080c, 0xd0f2, 0x005e, 0x007e, 0x00be, 0x080c, 0x98c9,
-	0x0005, 0x080c, 0x98ad, 0x00b6, 0x0046, 0x0056, 0x0076, 0x00c6,
-	0x0156, 0x2c20, 0x20a9, 0x0800, 0x900e, 0x0016, 0x0036, 0x080c,
-	0x6269, 0x11a0, 0x0086, 0x9046, 0x2828, 0x0046, 0x2021, 0x0001,
-	0x080c, 0xd490, 0x004e, 0x0096, 0x904e, 0x080c, 0x9367, 0x009e,
-	0x008e, 0x903e, 0x080c, 0x9412, 0x080c, 0xd0f2, 0x003e, 0x001e,
-	0x8108, 0x1f04, 0xd1d5, 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e,
-	0x00be, 0x080c, 0x98c9, 0x0005, 0x0016, 0x00f6, 0x080c, 0xb82a,
-	0x0198, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0046, 0x0180, 0xa800,
-	0x907d, 0x0138, 0xa803, 0x0000, 0xab82, 0x080c, 0x698f, 0x2f48,
-	0x0cb0, 0xab82, 0x080c, 0x698f, 0x00fe, 0x001e, 0x0005, 0xa800,
-	0x907d, 0x0130, 0xa803, 0x0000, 0x080c, 0x698f, 0x2f48, 0x0cb8,
-	0x080c, 0x698f, 0x0c88, 0x00e6, 0x0046, 0x0036, 0x2061, 0x1ddc,
-	0x9005, 0x1138, 0x2071, 0x1800, 0x7450, 0x7070, 0x8001, 0x9402,
-	0x12d8, 0x2100, 0x9c06, 0x0168, 0x6000, 0x9086, 0x0000, 0x0148,
-	0x6008, 0x9206, 0x1130, 0x6010, 0x91a0, 0x0004, 0x2424, 0x9406,
-	0x0140, 0x9ce0, 0x001c, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1220,
-	0x0c40, 0x9085, 0x0001, 0x0008, 0x9006, 0x003e, 0x004e, 0x00ee,
-	0x0005, 0x0096, 0x0006, 0x080c, 0x1022, 0x000e, 0x090c, 0x0d65,
-	0xaae2, 0xa867, 0x010d, 0xa88e, 0x0026, 0x2010, 0x080c, 0xb81a,
-	0x2001, 0x0000, 0x0120, 0x2200, 0x9080, 0x0017, 0x2004, 0x002e,
-	0xa87a, 0x9186, 0x0020, 0x0110, 0xa8e3, 0xffff, 0xa986, 0xac76,
-	0xa87f, 0x0000, 0x2001, 0x195f, 0x2004, 0xa882, 0x9006, 0xa802,
-	0xa86a, 0xa88a, 0x0126, 0x2091, 0x8000, 0x080c, 0x698f, 0x012e,
-	0x009e, 0x0005, 0x6700, 0x9786, 0x0000, 0x0158, 0x9786, 0x0001,
-	0x0140, 0x9786, 0x000a, 0x0128, 0x9786, 0x0009, 0x0110, 0x9085,
-	0x0001, 0x0005, 0x00e6, 0x6010, 0x9075, 0x0138, 0x00b6, 0x2058,
-	0xb8a0, 0x00be, 0x9206, 0x00ee, 0x0005, 0x9085, 0x0001, 0x0cd8,
-	0x0016, 0x6004, 0x908e, 0x001e, 0x11a0, 0x8007, 0x6134, 0x918c,
-	0x00ff, 0x9105, 0x6036, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023,
-	0x0005, 0x2001, 0x1958, 0x2004, 0x601a, 0x2009, 0x8020, 0x080c,
-	0x84a9, 0x001e, 0x0005, 0xa001, 0xa001, 0x0005, 0x6024, 0xd0e4,
-	0x0158, 0xd0cc, 0x0118, 0x080c, 0xbb71, 0x0030, 0x080c, 0xd4ac,
-	0x080c, 0x8398, 0x080c, 0x9bcc, 0x0005, 0x9280, 0x0008, 0x2004,
-	0x9084, 0x000f, 0x0002, 0xd2e1, 0xd2e1, 0xd2e1, 0xd2e3, 0xd2e1,
-	0xd2e3, 0xd2e3, 0xd2e1, 0xd2e3, 0xd2e1, 0xd2e1, 0xd2e1, 0xd2e1,
-	0xd2e1, 0x9006, 0x0005, 0x9085, 0x0001, 0x0005, 0x9280, 0x0008,
-	0x2004, 0x9084, 0x000f, 0x0002, 0xd2fa, 0xd2fa, 0xd2fa, 0xd2fa,
-	0xd2fa, 0xd2fa, 0xd307, 0xd2fa, 0xd2fa, 0xd2fa, 0xd2fa, 0xd2fa,
-	0xd2fa, 0xd2fa, 0x6007, 0x003b, 0x602f, 0x0009, 0x6017, 0x2a00,
-	0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x84a9, 0x0005, 0x0096,
-	0x00c6, 0x2260, 0x080c, 0xd4ac, 0x604b, 0x0000, 0x6024, 0xc0f4,
-	0xc0e4, 0x6026, 0x603b, 0x0000, 0x00ce, 0x00d6, 0x2268, 0x9186,
-	0x0007, 0x1904, 0xd360, 0x6814, 0x9005, 0x0138, 0x2048, 0xa87c,
-	0xd0fc, 0x1118, 0x00de, 0x009e, 0x08a8, 0x6007, 0x003a, 0x6003,
-	0x0001, 0x2009, 0x8020, 0x080c, 0x84a9, 0x00c6, 0x2d60, 0x6100,
-	0x9186, 0x0002, 0x1904, 0xd3d7, 0x6014, 0x9005, 0x1138, 0x6000,
-	0x9086, 0x0007, 0x190c, 0x0d65, 0x0804, 0xd3d7, 0x2048, 0x080c,
-	0xb82c, 0x1130, 0x0028, 0x2048, 0xa800, 0x9005, 0x1de0, 0x2900,
-	0x2048, 0xa87c, 0x9084, 0x0003, 0x9086, 0x0002, 0x1168, 0xa87c,
-	0xc0dc, 0xc0f4, 0xa87e, 0xa880, 0xc0fc, 0xa882, 0x2009, 0x0043,
-	0x080c, 0xcc1b, 0x0804, 0xd3d7, 0x2009, 0x0041, 0x0804, 0xd3d1,
-	0x9186, 0x0005, 0x15a0, 0x6814, 0x2048, 0xa87c, 0xd0bc, 0x1120,
-	0x00de, 0x009e, 0x0804, 0xd2fa, 0xd0b4, 0x0128, 0xd0fc, 0x090c,
-	0x0d65, 0x0804, 0xd31b, 0x6007, 0x003a, 0x6003, 0x0001, 0x2009,
-	0x8020, 0x080c, 0x84a9, 0x00c6, 0x2d60, 0x6100, 0x9186, 0x0002,
-	0x0120, 0x9186, 0x0004, 0x1904, 0xd3d7, 0x6814, 0x2048, 0xa97c,
-	0xc1f4, 0xc1dc, 0xa97e, 0xa980, 0xc1fc, 0xc1bc, 0xa982, 0x00f6,
-	0x2c78, 0x080c, 0x164f, 0x00fe, 0x2009, 0x0042, 0x04d0, 0x0036,
-	0x080c, 0x1022, 0x090c, 0x0d65, 0xa867, 0x010d, 0x9006, 0xa802,
-	0xa86a, 0xa88a, 0x2d18, 0xab8e, 0xa887, 0x0045, 0x2c00, 0xa892,
-	0x6038, 0xa8a2, 0x2360, 0x6024, 0xc0dd, 0x6026, 0x6010, 0x00b6,
-	0x2058, 0xb8a0, 0x00be, 0x2004, 0x635c, 0xab7a, 0xa876, 0x9006,
-	0xa87e, 0xa882, 0xad9a, 0xae96, 0xa89f, 0x0001, 0x080c, 0x698f,
-	0x2019, 0x0045, 0x6008, 0x2068, 0x080c, 0xcdd9, 0x2d00, 0x600a,
-	0x6023, 0x0006, 0x6003, 0x0007, 0x901e, 0x631a, 0x634a, 0x003e,
-	0x0038, 0x604b, 0x0000, 0x6003, 0x0007, 0x080c, 0xcc1b, 0x00ce,
-	0x00de, 0x009e, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004, 0x9082,
-	0x0085, 0x2008, 0x00c2, 0x9186, 0x0027, 0x1178, 0x080c, 0x884c,
-	0x0036, 0x0096, 0x6014, 0x2048, 0x2019, 0x0004, 0x080c, 0xd1fc,
-	0x009e, 0x003e, 0x080c, 0x890e, 0x0005, 0x9186, 0x0014, 0x0d70,
-	0x080c, 0x9c87, 0x0005, 0xd40a, 0xd408, 0xd408, 0xd408, 0xd408,
-	0xd408, 0xd40a, 0xd408, 0xd408, 0xd408, 0xd408, 0xd408, 0xd408,
-	0x080c, 0x0d65, 0x6003, 0x000c, 0x080c, 0x890e, 0x0005, 0x9182,
-	0x0092, 0x1220, 0x9182, 0x0085, 0x0208, 0x001a, 0x080c, 0x9c87,
-	0x0005, 0xd426, 0xd426, 0xd426, 0xd426, 0xd428, 0xd448, 0xd426,
-	0xd426, 0xd426, 0xd426, 0xd426, 0xd426, 0xd426, 0x080c, 0x0d65,
-	0x00d6, 0x2c68, 0x080c, 0x9b76, 0x01b0, 0x6003, 0x0001, 0x6007,
-	0x001e, 0x2009, 0x026e, 0x210c, 0x613a, 0x2009, 0x026f, 0x210c,
-	0x613e, 0x600b, 0xffff, 0x6910, 0x6112, 0x6023, 0x0004, 0x2009,
-	0x8020, 0x080c, 0x84a9, 0x2d60, 0x080c, 0x9bcc, 0x00de, 0x0005,
-	0x080c, 0x9bcc, 0x0005, 0x00e6, 0x6010, 0x00b6, 0x2058, 0xb800,
-	0x00be, 0xd0ec, 0x00ee, 0x0005, 0x2009, 0x1873, 0x210c, 0xd1ec,
-	0x05b0, 0x6003, 0x0002, 0x6024, 0xc0e5, 0x6026, 0xd0cc, 0x0150,
-	0x2001, 0x1959, 0x2004, 0x604a, 0x2009, 0x1873, 0x210c, 0xd1f4,
-	0x1520, 0x00a0, 0x2009, 0x1873, 0x210c, 0xd1f4, 0x0128, 0x6024,
-	0xc0e4, 0x6026, 0x9006, 0x00d8, 0x2001, 0x1959, 0x200c, 0x2001,
-	0x1957, 0x2004, 0x9100, 0x9080, 0x000a, 0x604a, 0x6010, 0x00b6,
-	0x2058, 0xb8ac, 0x00be, 0x0008, 0x2104, 0x9005, 0x0118, 0x9088,
-	0x0003, 0x0cd0, 0x2c0a, 0x600f, 0x0000, 0x9085, 0x0001, 0x0005,
-	0x0016, 0x00c6, 0x00e6, 0x615c, 0xb8ac, 0x2060, 0x8cff, 0x0180,
-	0x84ff, 0x1118, 0x605c, 0x9106, 0x1138, 0x600c, 0x2072, 0x080c,
-	0x8398, 0x080c, 0x9bcc, 0x0010, 0x9cf0, 0x0003, 0x2e64, 0x0c70,
-	0x00ee, 0x00ce, 0x001e, 0x0005, 0x00d6, 0x00b6, 0x6010, 0x2058,
-	0xb8ac, 0x2068, 0x9005, 0x0130, 0x9c06, 0x0110, 0x680c, 0x0cd0,
-	0x600c, 0x680e, 0x00be, 0x00de, 0x0005, 0x0026, 0x0036, 0x0156,
-	0x2011, 0x182b, 0x2204, 0x9084, 0x00ff, 0x2019, 0x026e, 0x2334,
-	0x9636, 0x1508, 0x8318, 0x2334, 0x2204, 0x9084, 0xff00, 0x9636,
-	0x11d0, 0x2011, 0x0270, 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048,
-	0x2019, 0x000a, 0x080c, 0xabc4, 0x009e, 0x1168, 0x2011, 0x0274,
-	0x20a9, 0x0004, 0x6010, 0x0096, 0x2048, 0x2019, 0x0006, 0x080c,
-	0xabc4, 0x009e, 0x1100, 0x015e, 0x003e, 0x002e, 0x0005, 0x00e6,
-	0x2071, 0x1800, 0x080c, 0x5c68, 0x080c, 0x2ddb, 0x00ee, 0x0005,
-	0x00e6, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0fc, 0x0108,
-	0x0011, 0x00ee, 0x0005, 0xa880, 0xc0e5, 0xa882, 0x0005, 0x00e6,
-	0x00d6, 0x00c6, 0x0076, 0x0066, 0x0056, 0x0046, 0x0026, 0x0016,
-	0x0126, 0x2091, 0x8000, 0x2029, 0x19c4, 0x252c, 0x2021, 0x19cb,
-	0x2424, 0x2061, 0x1ddc, 0x2071, 0x1800, 0x7650, 0x7070, 0x9606,
-	0x0578, 0x6720, 0x9786, 0x0001, 0x0118, 0x9786, 0x0008, 0x1500,
-	0x2500, 0x9c06, 0x01e8, 0x2400, 0x9c06, 0x01d0, 0x080c, 0xd282,
-	0x01b8, 0x080c, 0xd292, 0x11a0, 0x6000, 0x9086, 0x0004, 0x1120,
-	0x0016, 0x080c, 0x1914, 0x001e, 0x080c, 0xba30, 0x1110, 0x080c,
-	0x3034, 0x080c, 0xba41, 0x1110, 0x080c, 0xa574, 0x080c, 0x9c06,
-	0x9ce0, 0x001c, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1208, 0x0858,
-	0x012e, 0x001e, 0x002e, 0x004e, 0x005e, 0x006e, 0x007e, 0x00ce,
-	0x00de, 0x00ee, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0dc, 0x0005,
-	0x0006, 0x2001, 0x1836, 0x2004, 0xd09c, 0x000e, 0x0005, 0x0006,
-	0x0036, 0x0046, 0x080c, 0xbf46, 0x0168, 0x2019, 0xffff, 0x9005,
-	0x0128, 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, 0x0004,
-	0x080c, 0x4a6e, 0x004e, 0x003e, 0x000e, 0x6004, 0x9086, 0x0001,
-	0x1128, 0x080c, 0x94d9, 0x080c, 0x9c06, 0x9006, 0x0005, 0x00e6,
-	0x00c6, 0x00b6, 0x0046, 0x2061, 0x1ddc, 0x2071, 0x1800, 0x7450,
-	0x7070, 0x8001, 0x9402, 0x12b8, 0x2100, 0x9c06, 0x0148, 0x6000,
-	0x9086, 0x0000, 0x0128, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x0140,
-	0x9ce0, 0x001c, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1220, 0x0c60,
-	0x9085, 0x0001, 0x0008, 0x9006, 0x004e, 0x00be, 0x00ce, 0x00ee,
-	0x0005, 0x0126, 0x0006, 0x00e6, 0x0016, 0x2091, 0x8000, 0x2071,
-	0x1840, 0xd5a4, 0x0118, 0x7034, 0x8000, 0x7036, 0xd5b4, 0x0118,
-	0x7030, 0x8000, 0x7032, 0xd5ac, 0x0178, 0x2500, 0x9084, 0x0007,
-	0x908e, 0x0003, 0x0148, 0x908e, 0x0004, 0x0130, 0x908e, 0x0005,
-	0x0118, 0x2071, 0x184a, 0x0089, 0x001e, 0x00ee, 0x000e, 0x012e,
-	0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071, 0x1842,
-	0x0021, 0x00ee, 0x000e, 0x012e, 0x0005, 0x2e04, 0x8000, 0x2072,
-	0x1220, 0x8e70, 0x2e04, 0x8000, 0x2072, 0x0005, 0x00e6, 0x2071,
-	0x1840, 0x0c99, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1844, 0x0c69,
-	0x00ee, 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071,
-	0x1840, 0x7044, 0x8000, 0x7046, 0x00ee, 0x000e, 0x012e, 0x0005,
-	0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080,
-	0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000,
-	0x7c76
+	0x30dc, 0x002e, 0xbc84, 0x001e, 0x080c, 0x5cf6, 0xbe12, 0xbd16,
+	0xbc86, 0x9006, 0x0010, 0x00ce, 0x001e, 0x015e, 0x003e, 0x00be,
+	0x00ce, 0x00fe, 0x0005, 0x00c6, 0x00d6, 0x00b6, 0x0016, 0x2009,
+	0x1823, 0x2104, 0x9086, 0x0074, 0x1904, 0xceec, 0x2069, 0x0260,
+	0x6944, 0x9182, 0x0100, 0x06e0, 0x6940, 0x9184, 0x8000, 0x0904,
+	0xcee9, 0x2001, 0x194d, 0x2004, 0x9005, 0x1140, 0x6010, 0x2058,
+	0xb884, 0x9005, 0x0118, 0x9184, 0x0800, 0x0598, 0x6948, 0x918a,
+	0x0001, 0x0648, 0x080c, 0xd582, 0x0118, 0x6978, 0xd1fc, 0x11b8,
+	0x2009, 0x0205, 0x200b, 0x0001, 0x693c, 0x81ff, 0x1198, 0x6944,
+	0x9182, 0x0100, 0x02a8, 0x6940, 0x81ff, 0x1178, 0x6948, 0x918a,
+	0x0001, 0x0288, 0x6950, 0x918a, 0x0001, 0x0298, 0x00d0, 0x6017,
+	0x0100, 0x00a0, 0x6017, 0x0300, 0x0088, 0x6017, 0x0500, 0x0070,
+	0x6017, 0x0700, 0x0058, 0x6017, 0x0900, 0x0040, 0x6017, 0x0b00,
+	0x0028, 0x6017, 0x0f00, 0x0010, 0x6017, 0x2d00, 0x9085, 0x0001,
+	0x0008, 0x9006, 0x001e, 0x00be, 0x00de, 0x00ce, 0x0005, 0x00c6,
+	0x00b6, 0x0026, 0x0036, 0x0156, 0x6210, 0x2258, 0xbb04, 0x9394,
+	0x00ff, 0x9286, 0x0006, 0x0180, 0x9286, 0x0004, 0x0168, 0x9394,
+	0xff00, 0x8217, 0x9286, 0x0006, 0x0138, 0x9286, 0x0004, 0x0120,
+	0x080c, 0x627f, 0x0804, 0xcf57, 0x2011, 0x0276, 0x20a9, 0x0004,
+	0x0096, 0x2b48, 0x2019, 0x000a, 0x080c, 0xabdf, 0x009e, 0x15c0,
+	0x2011, 0x027a, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006,
+	0x080c, 0xabdf, 0x009e, 0x1560, 0x0046, 0x0016, 0xbaa0, 0x2220,
+	0x9006, 0x2009, 0x1854, 0x210c, 0x0038, 0x2009, 0x0029, 0x080c,
+	0xd273, 0xb800, 0xc0e5, 0xb802, 0x080c, 0x98c8, 0x2019, 0x0029,
+	0x080c, 0x863b, 0x0076, 0x2039, 0x0000, 0x080c, 0x852a, 0x2c08,
+	0x080c, 0xcfc8, 0x007e, 0x080c, 0x98e4, 0x2001, 0x0007, 0x080c,
+	0x61ed, 0x2001, 0x0007, 0x080c, 0x61c1, 0x001e, 0x004e, 0x9006,
+	0x015e, 0x003e, 0x002e, 0x00be, 0x00ce, 0x0005, 0x00d6, 0x2069,
+	0x026e, 0x6800, 0x9086, 0x0800, 0x0118, 0x6017, 0x0000, 0x0008,
+	0x9006, 0x00de, 0x0005, 0x00b6, 0x00f6, 0x0016, 0x0026, 0x0036,
+	0x0156, 0x2079, 0x026c, 0x7930, 0x7834, 0x080c, 0x2424, 0x11d0,
+	0x080c, 0x6270, 0x11b8, 0x2011, 0x0270, 0x20a9, 0x0004, 0x0096,
+	0x2b48, 0x2019, 0x000a, 0x080c, 0xabdf, 0x009e, 0x1158, 0x2011,
+	0x0274, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c,
+	0xabdf, 0x009e, 0x015e, 0x003e, 0x002e, 0x001e, 0x00fe, 0x00be,
+	0x0005, 0x00b6, 0x0006, 0x0016, 0x0026, 0x0036, 0x0156, 0x2011,
+	0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x2424, 0x11d0, 0x080c,
+	0x6270, 0x11b8, 0x2011, 0x0276, 0x20a9, 0x0004, 0x0096, 0x2b48,
+	0x2019, 0x000a, 0x080c, 0xabdf, 0x009e, 0x1158, 0x2011, 0x027a,
+	0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c, 0xabdf,
+	0x009e, 0x015e, 0x003e, 0x002e, 0x001e, 0x000e, 0x00be, 0x0005,
+	0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066, 0x0056, 0x0046, 0x0026,
+	0x0126, 0x2091, 0x8000, 0x080c, 0x9926, 0x0106, 0x190c, 0x98c8,
+	0x2740, 0x2029, 0x19c4, 0x252c, 0x2021, 0x19cb, 0x2424, 0x2061,
+	0x1ddc, 0x2071, 0x1800, 0x7650, 0x7070, 0x81ff, 0x0150, 0x0006,
+	0x9186, 0x1b02, 0x000e, 0x0128, 0x8001, 0x9602, 0x1a04, 0xd069,
+	0x0018, 0x9606, 0x0904, 0xd069, 0x2100, 0x9c06, 0x0904, 0xd060,
+	0x080c, 0xd2b4, 0x1904, 0xd060, 0x080c, 0xd59f, 0x0904, 0xd060,
+	0x080c, 0xd2a4, 0x0904, 0xd060, 0x6720, 0x9786, 0x0001, 0x1148,
+	0x080c, 0x3181, 0x0904, 0xd088, 0x6004, 0x9086, 0x0000, 0x1904,
+	0xd088, 0x9786, 0x0004, 0x0904, 0xd088, 0x9786, 0x0007, 0x0904,
+	0xd060, 0x2500, 0x9c06, 0x0904, 0xd060, 0x2400, 0x9c06, 0x0904,
+	0xd060, 0x88ff, 0x0118, 0x605c, 0x9906, 0x15d0, 0x0096, 0x6043,
+	0xffff, 0x6000, 0x9086, 0x0004, 0x1120, 0x0016, 0x080c, 0x1914,
+	0x001e, 0x9786, 0x000a, 0x0148, 0x080c, 0xba5c, 0x1130, 0x080c,
+	0xa58f, 0x009e, 0x080c, 0x9c21, 0x0418, 0x6014, 0x2048, 0x080c,
+	0xb847, 0x01d8, 0x9786, 0x0003, 0x1588, 0xa867, 0x0103, 0xa87c,
+	0xd0cc, 0x0130, 0x0096, 0xa878, 0x2048, 0x080c, 0x0fd4, 0x009e,
+	0xab7a, 0xa877, 0x0000, 0x080c, 0xd51a, 0x0016, 0x080c, 0xbb45,
+	0x080c, 0x698a, 0x001e, 0x080c, 0xba36, 0x009e, 0x080c, 0x9c21,
+	0x9ce0, 0x001c, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1210, 0x0804,
+	0xcfe1, 0x010e, 0x190c, 0x98e4, 0x012e, 0x002e, 0x004e, 0x005e,
+	0x006e, 0x007e, 0x008e, 0x00ce, 0x00ee, 0x0005, 0x9786, 0x0006,
+	0x1150, 0x9386, 0x0005, 0x0128, 0x080c, 0xd51a, 0x080c, 0xd21e,
+	0x08e0, 0x009e, 0x08e8, 0x9786, 0x000a, 0x0908, 0x0804, 0xd045,
+	0x81ff, 0x09b0, 0x9180, 0x0001, 0x2004, 0x9086, 0x0018, 0x0130,
+	0x9180, 0x0001, 0x2004, 0x9086, 0x002d, 0x1950, 0x6000, 0x9086,
+	0x0002, 0x1930, 0x080c, 0xba4b, 0x0130, 0x080c, 0xba5c, 0x1900,
+	0x080c, 0xa58f, 0x0038, 0x080c, 0x303b, 0x080c, 0xba5c, 0x1110,
+	0x080c, 0xa58f, 0x080c, 0x9c21, 0x0804, 0xd060, 0xa864, 0x9084,
+	0x00ff, 0x9086, 0x0039, 0x0005, 0x00c6, 0x00e6, 0x0016, 0x2c08,
+	0x2170, 0x9006, 0x080c, 0xd245, 0x001e, 0x0120, 0x6020, 0x9084,
+	0x000f, 0x001b, 0x00ee, 0x00ce, 0x0005, 0xd0d3, 0xd0d3, 0xd0d3,
+	0xd0d3, 0xd0d3, 0xd0d3, 0xd0d5, 0xd0d3, 0xd0d3, 0xd0d3, 0xd0d3,
+	0x9c21, 0x9c21, 0xd0d3, 0x9006, 0x0005, 0x0036, 0x0046, 0x0016,
+	0x7010, 0x00b6, 0x2058, 0xbca0, 0x00be, 0x2c00, 0x2009, 0x0020,
+	0x080c, 0xd273, 0x001e, 0x004e, 0x2019, 0x0002, 0x080c, 0xcdf9,
+	0x003e, 0x9085, 0x0001, 0x0005, 0x0096, 0x080c, 0xb847, 0x0140,
+	0x6014, 0x904d, 0x080c, 0xb452, 0x687b, 0x0005, 0x080c, 0x6996,
+	0x009e, 0x080c, 0x9c21, 0x9085, 0x0001, 0x0005, 0x2001, 0x0001,
+	0x080c, 0x61ad, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004,
+	0x2019, 0x1805, 0x2011, 0x0276, 0x080c, 0xabcb, 0x003e, 0x002e,
+	0x001e, 0x015e, 0x9005, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086,
+	0x0076, 0x0066, 0x00b6, 0x0126, 0x2091, 0x8000, 0x2740, 0x2061,
+	0x1ddc, 0x2079, 0x0001, 0x8fff, 0x0904, 0xd16e, 0x2071, 0x1800,
+	0x7650, 0x7070, 0x8001, 0x9602, 0x1a04, 0xd16e, 0x88ff, 0x0120,
+	0x2800, 0x9c06, 0x1590, 0x2078, 0x080c, 0xd2a4, 0x0570, 0x2400,
+	0x9c06, 0x0558, 0x6720, 0x9786, 0x0006, 0x1538, 0x9786, 0x0007,
+	0x0520, 0x88ff, 0x1140, 0x6010, 0x9b06, 0x11f8, 0x85ff, 0x0118,
+	0x605c, 0x9106, 0x11d0, 0x0096, 0x601c, 0xd084, 0x0140, 0x080c,
+	0xd4ce, 0x080c, 0xbf79, 0x080c, 0x1914, 0x6023, 0x0007, 0x6014,
+	0x2048, 0x080c, 0xb847, 0x0120, 0x0046, 0x080c, 0xd21e, 0x004e,
+	0x009e, 0x080c, 0x9c21, 0x88ff, 0x1198, 0x9ce0, 0x001c, 0x2001,
+	0x1819, 0x2004, 0x9c02, 0x1210, 0x0804, 0xd123, 0x9006, 0x012e,
+	0x00be, 0x006e, 0x007e, 0x008e, 0x00ce, 0x00ee, 0x00fe, 0x0005,
+	0x98c5, 0x0001, 0x0ca0, 0x080c, 0x98c8, 0x00b6, 0x0076, 0x0056,
+	0x0086, 0x9046, 0x2029, 0x0001, 0x2c20, 0x2019, 0x0002, 0x6210,
+	0x2258, 0x0096, 0x904e, 0x080c, 0x9382, 0x009e, 0x008e, 0x903e,
+	0x080c, 0x942d, 0x080c, 0xd114, 0x005e, 0x007e, 0x00be, 0x080c,
+	0x98e4, 0x0005, 0x080c, 0x98c8, 0x00b6, 0x0046, 0x0056, 0x0076,
+	0x00c6, 0x0156, 0x2c20, 0x2128, 0x20a9, 0x007f, 0x900e, 0x0016,
+	0x0036, 0x080c, 0x6270, 0x1190, 0x0056, 0x0086, 0x9046, 0x2508,
+	0x2029, 0x0001, 0x0096, 0x904e, 0x080c, 0x9382, 0x009e, 0x008e,
+	0x903e, 0x080c, 0x942d, 0x080c, 0xd114, 0x005e, 0x003e, 0x001e,
+	0x8108, 0x1f04, 0xd1a7, 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e,
+	0x00be, 0x080c, 0x98e4, 0x0005, 0x080c, 0x98c8, 0x00b6, 0x0076,
+	0x0056, 0x6210, 0x2258, 0x0086, 0x9046, 0x2029, 0x0001, 0x2019,
+	0x0048, 0x0096, 0x904e, 0x080c, 0x9382, 0x009e, 0x008e, 0x903e,
+	0x080c, 0x942d, 0x2c20, 0x080c, 0xd114, 0x005e, 0x007e, 0x00be,
+	0x080c, 0x98e4, 0x0005, 0x080c, 0x98c8, 0x00b6, 0x0046, 0x0056,
+	0x0076, 0x00c6, 0x0156, 0x2c20, 0x20a9, 0x0800, 0x900e, 0x0016,
+	0x0036, 0x080c, 0x6270, 0x11a0, 0x0086, 0x9046, 0x2828, 0x0046,
+	0x2021, 0x0001, 0x080c, 0xd4b2, 0x004e, 0x0096, 0x904e, 0x080c,
+	0x9382, 0x009e, 0x008e, 0x903e, 0x080c, 0x942d, 0x080c, 0xd114,
+	0x003e, 0x001e, 0x8108, 0x1f04, 0xd1f7, 0x015e, 0x00ce, 0x007e,
+	0x005e, 0x004e, 0x00be, 0x080c, 0x98e4, 0x0005, 0x0016, 0x00f6,
+	0x080c, 0xb845, 0x0198, 0xa864, 0x9084, 0x00ff, 0x9086, 0x0046,
+	0x0180, 0xa800, 0x907d, 0x0138, 0xa803, 0x0000, 0xab82, 0x080c,
+	0x6996, 0x2f48, 0x0cb0, 0xab82, 0x080c, 0x6996, 0x00fe, 0x001e,
+	0x0005, 0xa800, 0x907d, 0x0130, 0xa803, 0x0000, 0x080c, 0x6996,
+	0x2f48, 0x0cb8, 0x080c, 0x6996, 0x0c88, 0x00e6, 0x0046, 0x0036,
+	0x2061, 0x1ddc, 0x9005, 0x1138, 0x2071, 0x1800, 0x7450, 0x7070,
+	0x8001, 0x9402, 0x12d8, 0x2100, 0x9c06, 0x0168, 0x6000, 0x9086,
+	0x0000, 0x0148, 0x6008, 0x9206, 0x1130, 0x6010, 0x91a0, 0x0004,
+	0x2424, 0x9406, 0x0140, 0x9ce0, 0x001c, 0x2001, 0x1819, 0x2004,
+	0x9c02, 0x1220, 0x0c40, 0x9085, 0x0001, 0x0008, 0x9006, 0x003e,
+	0x004e, 0x00ee, 0x0005, 0x0096, 0x0006, 0x080c, 0x1022, 0x000e,
+	0x090c, 0x0d65, 0xaae2, 0xa867, 0x010d, 0xa88e, 0x0026, 0x2010,
+	0x080c, 0xb835, 0x2001, 0x0000, 0x0120, 0x2200, 0x9080, 0x0017,
+	0x2004, 0x002e, 0xa87a, 0x9186, 0x0020, 0x0110, 0xa8e3, 0xffff,
+	0xa986, 0xac76, 0xa87f, 0x0000, 0x2001, 0x195f, 0x2004, 0xa882,
+	0x9006, 0xa802, 0xa86a, 0xa88a, 0x0126, 0x2091, 0x8000, 0x080c,
+	0x6996, 0x012e, 0x009e, 0x0005, 0x6700, 0x9786, 0x0000, 0x0158,
+	0x9786, 0x0001, 0x0140, 0x9786, 0x000a, 0x0128, 0x9786, 0x0009,
+	0x0110, 0x9085, 0x0001, 0x0005, 0x00e6, 0x6010, 0x9075, 0x0138,
+	0x00b6, 0x2058, 0xb8a0, 0x00be, 0x9206, 0x00ee, 0x0005, 0x9085,
+	0x0001, 0x0cd8, 0x0016, 0x6004, 0x908e, 0x001e, 0x11a0, 0x8007,
+	0x6134, 0x918c, 0x00ff, 0x9105, 0x6036, 0x6007, 0x0085, 0x6003,
+	0x000b, 0x6023, 0x0005, 0x2001, 0x1958, 0x2004, 0x601a, 0x2009,
+	0x8020, 0x080c, 0x84d1, 0x001e, 0x0005, 0xa001, 0xa001, 0x0005,
+	0x6024, 0xd0e4, 0x0158, 0xd0cc, 0x0118, 0x080c, 0xbb8c, 0x0030,
+	0x080c, 0xd4ce, 0x080c, 0x83c0, 0x080c, 0x9be7, 0x0005, 0x9280,
+	0x0008, 0x2004, 0x9084, 0x000f, 0x0002, 0xd303, 0xd303, 0xd303,
+	0xd305, 0xd303, 0xd305, 0xd305, 0xd303, 0xd305, 0xd303, 0xd303,
+	0xd303, 0xd303, 0xd303, 0x9006, 0x0005, 0x9085, 0x0001, 0x0005,
+	0x9280, 0x0008, 0x2004, 0x9084, 0x000f, 0x0002, 0xd31c, 0xd31c,
+	0xd31c, 0xd31c, 0xd31c, 0xd31c, 0xd329, 0xd31c, 0xd31c, 0xd31c,
+	0xd31c, 0xd31c, 0xd31c, 0xd31c, 0x6007, 0x003b, 0x602f, 0x0009,
+	0x6017, 0x2a00, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x84d1,
+	0x0005, 0x0096, 0x00c6, 0x2260, 0x080c, 0xd4ce, 0x604b, 0x0000,
+	0x6024, 0xc0f4, 0xc0e4, 0x6026, 0x603b, 0x0000, 0x00ce, 0x00d6,
+	0x2268, 0x9186, 0x0007, 0x1904, 0xd382, 0x6814, 0x9005, 0x0138,
+	0x2048, 0xa87c, 0xd0fc, 0x1118, 0x00de, 0x009e, 0x08a8, 0x6007,
+	0x003a, 0x6003, 0x0001, 0x2009, 0x8020, 0x080c, 0x84d1, 0x00c6,
+	0x2d60, 0x6100, 0x9186, 0x0002, 0x1904, 0xd3f9, 0x6014, 0x9005,
+	0x1138, 0x6000, 0x9086, 0x0007, 0x190c, 0x0d65, 0x0804, 0xd3f9,
+	0x2048, 0x080c, 0xb847, 0x1130, 0x0028, 0x2048, 0xa800, 0x9005,
+	0x1de0, 0x2900, 0x2048, 0xa87c, 0x9084, 0x0003, 0x9086, 0x0002,
+	0x1168, 0xa87c, 0xc0dc, 0xc0f4, 0xa87e, 0xa880, 0xc0fc, 0xa882,
+	0x2009, 0x0043, 0x080c, 0xcc3b, 0x0804, 0xd3f9, 0x2009, 0x0041,
+	0x0804, 0xd3f3, 0x9186, 0x0005, 0x15a0, 0x6814, 0x2048, 0xa87c,
+	0xd0bc, 0x1120, 0x00de, 0x009e, 0x0804, 0xd31c, 0xd0b4, 0x0128,
+	0xd0fc, 0x090c, 0x0d65, 0x0804, 0xd33d, 0x6007, 0x003a, 0x6003,
+	0x0001, 0x2009, 0x8020, 0x080c, 0x84d1, 0x00c6, 0x2d60, 0x6100,
+	0x9186, 0x0002, 0x0120, 0x9186, 0x0004, 0x1904, 0xd3f9, 0x6814,
+	0x2048, 0xa97c, 0xc1f4, 0xc1dc, 0xa97e, 0xa980, 0xc1fc, 0xc1bc,
+	0xa982, 0x00f6, 0x2c78, 0x080c, 0x164f, 0x00fe, 0x2009, 0x0042,
+	0x04d0, 0x0036, 0x080c, 0x1022, 0x090c, 0x0d65, 0xa867, 0x010d,
+	0x9006, 0xa802, 0xa86a, 0xa88a, 0x2d18, 0xab8e, 0xa887, 0x0045,
+	0x2c00, 0xa892, 0x6038, 0xa8a2, 0x2360, 0x6024, 0xc0dd, 0x6026,
+	0x6010, 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x2004, 0x635c, 0xab7a,
+	0xa876, 0x9006, 0xa87e, 0xa882, 0xad9a, 0xae96, 0xa89f, 0x0001,
+	0x080c, 0x6996, 0x2019, 0x0045, 0x6008, 0x2068, 0x080c, 0xcdf9,
+	0x2d00, 0x600a, 0x6023, 0x0006, 0x6003, 0x0007, 0x901e, 0x631a,
+	0x634a, 0x003e, 0x0038, 0x604b, 0x0000, 0x6003, 0x0007, 0x080c,
+	0xcc3b, 0x00ce, 0x00de, 0x009e, 0x0005, 0x9186, 0x0013, 0x1128,
+	0x6004, 0x9082, 0x0085, 0x2008, 0x00c2, 0x9186, 0x0027, 0x1178,
+	0x080c, 0x8874, 0x0036, 0x0096, 0x6014, 0x2048, 0x2019, 0x0004,
+	0x080c, 0xd21e, 0x009e, 0x003e, 0x080c, 0x8936, 0x0005, 0x9186,
+	0x0014, 0x0d70, 0x080c, 0x9ca2, 0x0005, 0xd42c, 0xd42a, 0xd42a,
+	0xd42a, 0xd42a, 0xd42a, 0xd42c, 0xd42a, 0xd42a, 0xd42a, 0xd42a,
+	0xd42a, 0xd42a, 0x080c, 0x0d65, 0x6003, 0x000c, 0x080c, 0x8936,
+	0x0005, 0x9182, 0x0092, 0x1220, 0x9182, 0x0085, 0x0208, 0x001a,
+	0x080c, 0x9ca2, 0x0005, 0xd448, 0xd448, 0xd448, 0xd448, 0xd44a,
+	0xd46a, 0xd448, 0xd448, 0xd448, 0xd448, 0xd448, 0xd448, 0xd448,
+	0x080c, 0x0d65, 0x00d6, 0x2c68, 0x080c, 0x9b91, 0x01b0, 0x6003,
+	0x0001, 0x6007, 0x001e, 0x2009, 0x026e, 0x210c, 0x613a, 0x2009,
+	0x026f, 0x210c, 0x613e, 0x600b, 0xffff, 0x6910, 0x6112, 0x6023,
+	0x0004, 0x2009, 0x8020, 0x080c, 0x84d1, 0x2d60, 0x080c, 0x9be7,
+	0x00de, 0x0005, 0x080c, 0x9be7, 0x0005, 0x00e6, 0x6010, 0x00b6,
+	0x2058, 0xb800, 0x00be, 0xd0ec, 0x00ee, 0x0005, 0x2009, 0x1873,
+	0x210c, 0xd1ec, 0x05b0, 0x6003, 0x0002, 0x6024, 0xc0e5, 0x6026,
+	0xd0cc, 0x0150, 0x2001, 0x1959, 0x2004, 0x604a, 0x2009, 0x1873,
+	0x210c, 0xd1f4, 0x1520, 0x00a0, 0x2009, 0x1873, 0x210c, 0xd1f4,
+	0x0128, 0x6024, 0xc0e4, 0x6026, 0x9006, 0x00d8, 0x2001, 0x1959,
+	0x200c, 0x2001, 0x1957, 0x2004, 0x9100, 0x9080, 0x000a, 0x604a,
+	0x6010, 0x00b6, 0x2058, 0xb8ac, 0x00be, 0x0008, 0x2104, 0x9005,
+	0x0118, 0x9088, 0x0003, 0x0cd0, 0x2c0a, 0x600f, 0x0000, 0x9085,
+	0x0001, 0x0005, 0x0016, 0x00c6, 0x00e6, 0x615c, 0xb8ac, 0x2060,
+	0x8cff, 0x0180, 0x84ff, 0x1118, 0x605c, 0x9106, 0x1138, 0x600c,
+	0x2072, 0x080c, 0x83c0, 0x080c, 0x9be7, 0x0010, 0x9cf0, 0x0003,
+	0x2e64, 0x0c70, 0x00ee, 0x00ce, 0x001e, 0x0005, 0x00d6, 0x00b6,
+	0x6010, 0x2058, 0xb8ac, 0x2068, 0x9005, 0x0130, 0x9c06, 0x0110,
+	0x680c, 0x0cd0, 0x600c, 0x680e, 0x00be, 0x00de, 0x0005, 0x0026,
+	0x0036, 0x0156, 0x2011, 0x182b, 0x2204, 0x9084, 0x00ff, 0x2019,
+	0x026e, 0x2334, 0x9636, 0x1508, 0x8318, 0x2334, 0x2204, 0x9084,
+	0xff00, 0x9636, 0x11d0, 0x2011, 0x0270, 0x20a9, 0x0004, 0x6010,
+	0x0096, 0x2048, 0x2019, 0x000a, 0x080c, 0xabdf, 0x009e, 0x1168,
+	0x2011, 0x0274, 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048, 0x2019,
+	0x0006, 0x080c, 0xabdf, 0x009e, 0x1100, 0x015e, 0x003e, 0x002e,
+	0x0005, 0x00e6, 0x2071, 0x1800, 0x080c, 0x5c6f, 0x080c, 0x2ddb,
+	0x00ee, 0x0005, 0x00e6, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be,
+	0xd0fc, 0x0108, 0x0011, 0x00ee, 0x0005, 0xa880, 0xc0e5, 0xa882,
+	0x0005, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066, 0x0056, 0x0046,
+	0x0026, 0x0016, 0x0126, 0x2091, 0x8000, 0x2029, 0x19c4, 0x252c,
+	0x2021, 0x19cb, 0x2424, 0x2061, 0x1ddc, 0x2071, 0x1800, 0x7650,
+	0x7070, 0x9606, 0x0578, 0x6720, 0x9786, 0x0001, 0x0118, 0x9786,
+	0x0008, 0x1500, 0x2500, 0x9c06, 0x01e8, 0x2400, 0x9c06, 0x01d0,
+	0x080c, 0xd2a4, 0x01b8, 0x080c, 0xd2b4, 0x11a0, 0x6000, 0x9086,
+	0x0004, 0x1120, 0x0016, 0x080c, 0x1914, 0x001e, 0x080c, 0xba4b,
+	0x1110, 0x080c, 0x303b, 0x080c, 0xba5c, 0x1110, 0x080c, 0xa58f,
+	0x080c, 0x9c21, 0x9ce0, 0x001c, 0x2001, 0x1819, 0x2004, 0x9c02,
+	0x1208, 0x0858, 0x012e, 0x001e, 0x002e, 0x004e, 0x005e, 0x006e,
+	0x007e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x2001, 0x1810, 0x2004,
+	0xd0dc, 0x0005, 0x0006, 0x2001, 0x1836, 0x2004, 0xd09c, 0x000e,
+	0x0005, 0x0006, 0x0036, 0x0046, 0x080c, 0xbf61, 0x0168, 0x2019,
+	0xffff, 0x9005, 0x0128, 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be,
+	0x2021, 0x0004, 0x080c, 0x4a75, 0x004e, 0x003e, 0x000e, 0x6004,
+	0x9086, 0x0001, 0x1128, 0x080c, 0x94f4, 0x080c, 0x9c21, 0x9006,
+	0x0005, 0x00e6, 0x00c6, 0x00b6, 0x0046, 0x2061, 0x1ddc, 0x2071,
+	0x1800, 0x7450, 0x7070, 0x8001, 0x9402, 0x12b8, 0x2100, 0x9c06,
+	0x0148, 0x6000, 0x9086, 0x0000, 0x0128, 0x6010, 0x2058, 0xb8a0,
+	0x9206, 0x0140, 0x9ce0, 0x001c, 0x2001, 0x1819, 0x2004, 0x9c02,
+	0x1220, 0x0c60, 0x9085, 0x0001, 0x0008, 0x9006, 0x004e, 0x00be,
+	0x00ce, 0x00ee, 0x0005, 0x0126, 0x0006, 0x00e6, 0x0016, 0x2091,
+	0x8000, 0x2071, 0x1840, 0xd5a4, 0x0118, 0x7034, 0x8000, 0x7036,
+	0xd5b4, 0x0118, 0x7030, 0x8000, 0x7032, 0xd5ac, 0x0178, 0x2500,
+	0x9084, 0x0007, 0x908e, 0x0003, 0x0148, 0x908e, 0x0004, 0x0130,
+	0x908e, 0x0005, 0x0118, 0x2071, 0x184a, 0x0089, 0x001e, 0x00ee,
+	0x000e, 0x012e, 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000,
+	0x2071, 0x1842, 0x0021, 0x00ee, 0x000e, 0x012e, 0x0005, 0x2e04,
+	0x8000, 0x2072, 0x1220, 0x8e70, 0x2e04, 0x8000, 0x2072, 0x0005,
+	0x00e6, 0x2071, 0x1840, 0x0c99, 0x00ee, 0x0005, 0x00e6, 0x2071,
+	0x1844, 0x0c69, 0x00ee, 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091,
+	0x8000, 0x2071, 0x1840, 0x7044, 0x8000, 0x7046, 0x00ee, 0x000e,
+	0x012e, 0x0005, 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020,
+	0x0040, 0x0080, 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000,
+	0x4000, 0x8000, 0xfddb
 };
 #ifdef UNIQUE_FW_NAME
-unsigned short fw2322flx_length01 = 0xce19;
+unsigned short fw2322flx_length01 = 0xce3b;
 #else
-unsigned short risc_code_length01 = 0xce19;
+unsigned short risc_code_length01 = 0xce3b;
 #endif
 
 /*
diff -Nru a/drivers/scsi/qla2xxx/qla_dbg.c b/drivers/scsi/qla2xxx/qla_dbg.c
--- a/drivers/scsi/qla2xxx/qla_dbg.c	Sun May 16 01:18:36 2004
+++ b/drivers/scsi/qla2xxx/qla_dbg.c	Sun May 16 01:18:36 2004
@@ -53,7 +53,7 @@
 		qla_printk(KERN_WARNING, ha,
 		    "Firmware has been previously dumped (%p) -- ignoring "
 		    "request...\n", ha->fw_dump);
-		return;
+		goto qla2300_fw_dump_failed;
 	}
 
 	/* Allocate (large) dump buffer. */
@@ -64,7 +64,7 @@
 		qla_printk(KERN_WARNING, ha,
 		    "Unable to allocated memory for firmware dump (%d/%Zd).\n",
 		    ha->fw_dump_order, sizeof(struct qla2300_fw_dump));
-		return;
+		goto qla2300_fw_dump_failed;
 	}
 	fw = ha->fw_dump;
 
@@ -360,7 +360,7 @@
 
 	if (rval != QLA_SUCCESS) {
 		qla_printk(KERN_WARNING, ha,
-		    "Failed to dump firmware (%d)!!!\n", rval);
+		    "Failed to dump firmware (%x)!!!\n", rval);
 
 		free_pages((unsigned long)ha->fw_dump, ha->fw_dump_order);
 		ha->fw_dump = NULL;
@@ -370,6 +370,7 @@
 		    ha->host_no, ha->fw_dump);
 	}
 
+qla2300_fw_dump_failed:
 	if (!hardware_locked)
 		spin_unlock_irqrestore(&ha->hardware_lock, flags);
 }
@@ -569,7 +570,7 @@
 {
 	int		rval;
 	uint32_t	cnt, timer;
-	uint32_t	risc_address;
+	uint16_t	risc_address;
 	uint16_t	mb0, mb2;
 
 	device_reg_t	*reg;
@@ -589,7 +590,7 @@
 		qla_printk(KERN_WARNING, ha,
 		    "Firmware has been previously dumped (%p) -- ignoring "
 		    "request...\n", ha->fw_dump);
-		return;
+		goto qla2100_fw_dump_failed;
 	}
 
 	/* Allocate (large) dump buffer. */
@@ -600,7 +601,7 @@
 		qla_printk(KERN_WARNING, ha,
 		    "Unable to allocated memory for firmware dump (%d/%Zd).\n",
 		    ha->fw_dump_order, sizeof(struct qla2100_fw_dump));
-		return;
+		goto qla2100_fw_dump_failed;
 	}
 	fw = ha->fw_dump;
 
@@ -616,7 +617,6 @@
 		else
 			rval = QLA_FUNCTION_TIMEOUT;
 	}
-
 	if (rval == QLA_SUCCESS) {
 		dmp_reg = (uint16_t *)(reg + 0);
 		for (cnt = 0; cnt < sizeof(fw->pbiu_reg) / 2; cnt++) 
@@ -694,18 +694,8 @@
 		for (cnt = 0; cnt < sizeof(fw->fpm_b1_reg) / 2; cnt++) 
 			fw->fpm_b1_reg[cnt] = RD_REG_WORD(dmp_reg++);
 
-		/* Disable ISP interrupts. */
-		WRT_REG_WORD(&reg->ictrl, 0);
-
-		/* Reset RISC module. */
-		WRT_REG_WORD(&reg->hccr, HCCR_RESET_RISC);
-
-		/* Release RISC module. */
-		WRT_REG_WORD(&reg->hccr, HCCR_RELEASE_RISC); 
-
-		/* Insure mailbox registers are free. */
-		WRT_REG_WORD(&reg->hccr, HCCR_CLR_RISC_INT); 
-		WRT_REG_WORD(&reg->hccr, HCCR_CLR_HOST_INT); 
+		/* Reset the ISP. */
+		WRT_REG_WORD(&reg->ctrl_status, CSR_ISP_SOFT_RESET);
 	}
 
 	for (cnt = 30000; RD_MAILBOX_REG(ha, reg, 0) != 0 &&
@@ -729,7 +719,6 @@
 			else
 				rval = QLA_FUNCTION_TIMEOUT;
 		}
-
 		if (rval == QLA_SUCCESS) {
 			/* Set memory configuration and timing. */
 			if (IS_QLA2100(ha))
@@ -750,7 +739,7 @@
 	}
 	for (cnt = 0; cnt < sizeof(fw->risc_ram) / 2 && rval == QLA_SUCCESS;
 	    cnt++, risc_address++) {
- 		WRT_MAILBOX_REG(ha, reg, 1, (uint16_t)risc_address);
+ 		WRT_MAILBOX_REG(ha, reg, 1, risc_address);
 		WRT_REG_WORD(&reg->hccr, HCCR_SET_HOST_INT);
 
 		for (timer = 6000000; timer != 0; timer--) {
@@ -783,7 +772,7 @@
 
 	if (rval != QLA_SUCCESS) {
 		qla_printk(KERN_WARNING, ha,
-		    "Failed to dump firmware (%d)!!!\n", rval);
+		    "Failed to dump firmware (%x)!!!\n", rval);
 
 		free_pages((unsigned long)ha->fw_dump, ha->fw_dump_order);
 		ha->fw_dump = NULL;
@@ -793,6 +782,7 @@
 		    ha->host_no, ha->fw_dump);
 	}
 
+qla2100_fw_dump_failed:
 	if (!hardware_locked)
 		spin_unlock_irqrestore(&ha->hardware_lock, flags);
 }
diff -Nru a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h
--- a/drivers/scsi/qla2xxx/qla_def.h	Sun May 16 01:18:35 2004
+++ b/drivers/scsi/qla2xxx/qla_def.h	Sun May 16 01:18:35 2004
@@ -154,6 +154,9 @@
 #define RD_REG_BYTE(addr)		readb(addr)
 #define RD_REG_WORD(addr)		readw(addr)
 #define RD_REG_DWORD(addr)		readl(addr)
+#define RD_REG_BYTE_RELAXED(addr)	readb_relaxed(addr)
+#define RD_REG_WORD_RELAXED(addr)	readw_relaxed(addr)
+#define RD_REG_DWORD_RELAXED(addr)	readl_relaxed(addr)
 #define WRT_REG_BYTE(addr, data)	writeb(data,addr)
 #define WRT_REG_WORD(addr, data)	writew(data,addr)
 #define WRT_REG_DWORD(addr, data)	writel(data,addr)
@@ -209,20 +212,11 @@
 #define MAX_OUTSTANDING_COMMANDS	1024
 
 /* ISP request and response entry counts (37-65535) */
-#define REQUEST_ENTRY_CNT		2048	/* Number of request entries. */
+#define REQUEST_ENTRY_CNT_2100		128	/* Number of request entries. */
+#define REQUEST_ENTRY_CNT_2200		2048	/* Number of request entries. */
 #define RESPONSE_ENTRY_CNT_2100		64	/* Number of response entries.*/
 #define RESPONSE_ENTRY_CNT_2300		512	/* Number of response entries.*/
 
-/* Calculations for SG segments */
-#define SEGS_PER_REQUEST_32	3 
-#define SEGS_PER_CONT_32	7
-#define SG_SEGMENTS_32 (SEGS_PER_REQUEST_32 + \
-    (SEGS_PER_CONT_32 * (REQUEST_ENTRY_CNT - 2)))     
-#define SEGS_PER_REQUEST_64	2 
-#define SEGS_PER_CONT_64	5
-#define SG_SEGMENTS_64 (SEGS_PER_REQUEST_64 + \
-    (SEGS_PER_CONT_64 * (REQUEST_ENTRY_CNT - 2)))     
-
 /*
  * SCSI Request Block 
  */
@@ -294,7 +288,8 @@
 
 #define SRB_BUSY		BIT_8	/* Command is in busy retry state */
 #define SRB_FO_CANCEL		BIT_9	/* Command don't need to do failover */
-#define	SRB_IOCTL		BIT_10	/* IOCTL command. */
+#define SRB_IOCTL		BIT_10	/* IOCTL command. */
+#define SRB_TAPE		BIT_11	/* FCP2 (Tape) command. */
 
 /*
  * SRB state definitions
@@ -1931,10 +1926,6 @@
 #define	RFT_ID_SNS_CMD_SIZE	60
 #define	RFT_ID_SNS_DATA_SIZE	16
 
-#define	RFF_ID_SNS_SCMD_LEN	8
-#define	RFF_ID_SNS_CMD_SIZE	32
-#define	RFF_ID_SNS_DATA_SIZE	16
-
 #define	RNN_ID_SNS_SCMD_LEN	10
 #define	RNN_ID_SNS_CMD_SIZE	36
 #define	RNN_ID_SNS_DATA_SIZE	16
@@ -1970,7 +1961,6 @@
 		} cmd;
 
 		uint8_t rft_data[RFT_ID_SNS_DATA_SIZE];
-		uint8_t rff_data[RFF_ID_SNS_DATA_SIZE];
 		uint8_t rnn_data[RNN_ID_SNS_DATA_SIZE];
 		uint8_t gan_data[GA_NXT_SNS_DATA_SIZE];
 		uint8_t gid_data[GID_PT_SNS_DATA_SIZE];
@@ -2123,6 +2113,7 @@
 	request_t       *request_ring_ptr;  /* Current address. */
 	uint16_t        req_ring_index;     /* Current index. */
 	uint16_t        req_q_cnt;          /* Number of available entries. */
+	uint16_t	request_q_length;
 
 	dma_addr_t	response_dma;       /* Physical address. */
 	response_t      *response_ring;     /* Base virtual address */
@@ -2340,8 +2331,6 @@
 
 	uint8_t     node_name[WWN_SIZE];
 	uint8_t     nvram_version; 
-	uint8_t     optrom_major; 
-	uint8_t     optrom_minor; 
 	uint32_t    isp_abort_cnt;
 
 	/* Adapter I/O statistics for failover */
diff -Nru a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h
--- a/drivers/scsi/qla2xxx/qla_gbl.h	Sun May 16 01:18:37 2004
+++ b/drivers/scsi/qla2xxx/qla_gbl.h	Sun May 16 01:18:37 2004
@@ -198,7 +198,7 @@
 qla2x00_get_port_name(scsi_qla_host_t *, uint16_t, uint8_t *, uint8_t);
 
 extern uint8_t
-qla2x00_get_link_status(scsi_qla_host_t *, uint8_t, link_stat_t *, uint16_t *);
+qla2x00_get_link_status(scsi_qla_host_t *, uint16_t, link_stat_t *, uint16_t *);
 
 extern int
 qla2x00_lip_reset(scsi_qla_host_t *);
@@ -255,14 +255,6 @@
 extern void qla2x00_unlock_nvram_access(scsi_qla_host_t *);
 extern uint16_t qla2x00_get_nvram_word(scsi_qla_host_t *, uint32_t);
 extern void qla2x00_write_nvram_word(scsi_qla_host_t *, uint32_t, uint16_t);
-extern void qla2x00_flash_enable(scsi_qla_host_t *);
-extern void qla2x00_flash_disable(scsi_qla_host_t *);
-extern uint8_t qla2x00_read_flash_byte(scsi_qla_host_t *, uint32_t);
-extern uint8_t qla2x00_get_flash_manufacturer(scsi_qla_host_t *);
-extern uint16_t qla2x00_get_flash_version(scsi_qla_host_t *);
-extern uint16_t qla2x00_get_flash_image(scsi_qla_host_t *, uint8_t *);
-extern uint16_t qla2x00_set_flash_image(scsi_qla_host_t *, uint8_t *);
-
 /*
  * Global Function Prototypes in qla_dbg.c source file.
  */
diff -Nru a/drivers/scsi/qla2xxx/qla_gs.c b/drivers/scsi/qla2xxx/qla_gs.c
--- a/drivers/scsi/qla2xxx/qla_gs.c	Sun May 16 01:18:34 2004
+++ b/drivers/scsi/qla2xxx/qla_gs.c	Sun May 16 01:18:34 2004
@@ -34,7 +34,6 @@
 static int qla2x00_sns_gpn_id(scsi_qla_host_t *, sw_info_t *);
 static int qla2x00_sns_gnn_id(scsi_qla_host_t *, sw_info_t *);
 static int qla2x00_sns_rft_id(scsi_qla_host_t *);
-static int qla2x00_sns_rff_id(scsi_qla_host_t *);
 static int qla2x00_sns_rnn_id(scsi_qla_host_t *);
 
 /**
@@ -113,7 +112,7 @@
 	struct ct_sns_req	*ct_req;
 	struct ct_sns_rsp	*ct_rsp;
 
-	if (IS_QLA2200(ha)) {
+	if (IS_QLA2100(ha) || IS_QLA2200(ha)) {
 		return (qla2x00_sns_ga_nxt(ha, fcport));
 	}
 
@@ -201,7 +200,7 @@
 
 	struct ct_sns_gid_pt_data *gid_data;
 
-	if (IS_QLA2200(ha)) {
+	if (IS_QLA2100(ha) || IS_QLA2200(ha)) {
 		return (qla2x00_sns_gid_pt(ha, list));
 	}
 
@@ -278,7 +277,7 @@
 	struct ct_sns_req	*ct_req;
 	struct ct_sns_rsp	*ct_rsp;
 
-	if (IS_QLA2200(ha)) {
+	if (IS_QLA2100(ha) || IS_QLA2200(ha)) {
 		return (qla2x00_sns_gpn_id(ha, list));
 	}
 
@@ -343,7 +342,7 @@
 	struct ct_sns_req	*ct_req;
 	struct ct_sns_rsp	*ct_rsp;
 
-	if (IS_QLA2200(ha)) {
+	if (IS_QLA2100(ha) || IS_QLA2200(ha)) {
 		return (qla2x00_sns_gnn_id(ha, list));
 	}
 
@@ -422,7 +421,7 @@
 	struct ct_sns_req	*ct_req;
 	struct ct_sns_rsp	*ct_rsp;
 
-	if (IS_QLA2200(ha)) {
+	if (IS_QLA2100(ha) || IS_QLA2200(ha)) {
 		return (qla2x00_sns_rft_id(ha));
 	}
 
@@ -479,8 +478,10 @@
 	struct ct_sns_req	*ct_req;
 	struct ct_sns_rsp	*ct_rsp;
 
-	if (IS_QLA2200(ha)) {
-		return (qla2x00_sns_rff_id(ha));
+	if (IS_QLA2100(ha) || IS_QLA2200(ha)) {
+		DEBUG2(printk("scsi(%ld): RFF_ID call unsupported on "
+		    "ISP2100/ISP2200.\n", ha->host_no));
+		return (QLA_SUCCESS);
 	}
 
 	/* Issue RFF_ID */
@@ -536,7 +537,7 @@
 	struct ct_sns_req	*ct_req;
 	struct ct_sns_rsp	*ct_rsp;
 
-	if (IS_QLA2200(ha)) {
+	if (IS_QLA2100(ha) || IS_QLA2200(ha)) {
 		return (qla2x00_sns_rnn_id(ha));
 	}
 
@@ -595,9 +596,9 @@
 	struct ct_sns_req	*ct_req;
 	struct ct_sns_rsp	*ct_rsp;
 
-	if (IS_QLA2200(ha)) {
+	if (IS_QLA2100(ha) || IS_QLA2200(ha)) {
 		DEBUG2(printk("scsi(%ld): RSNN_ID call unsupported on "
-		    "ISP2200.\n", ha->host_no));
+		    "ISP2100/ISP2200.\n", ha->host_no));
 		return (QLA_SUCCESS);
 	}
 
@@ -997,55 +998,6 @@
 		rval = QLA_FUNCTION_FAILED;
 	} else {
 		DEBUG2(printk("scsi(%ld): RFT_ID exiting normally.\n",
-		    ha->host_no));
-	}
-
-	return (rval);
-}
-
-/**
- * qla2x00_sns_rff_id() - SNS Register FC-4 Features (RFF_ID) supported by the
- * HBA.
- * @ha: HA context
- *
- * This command uses the old Exectute SNS Command mailbox routine.
- *
- * Returns 0 on success.
- */
-static int
-qla2x00_sns_rff_id(scsi_qla_host_t *ha)
-{
-	int		rval;
-
-	struct sns_cmd_pkt	*sns_cmd;
-
-	/* Issue RFF_ID. */
-	/* Prepare SNS command request. */
-	sns_cmd = qla2x00_prep_sns_cmd(ha, RFF_ID_CMD, RFF_ID_SNS_SCMD_LEN,
-	    RFF_ID_SNS_DATA_SIZE);
-
-	/* Prepare SNS command arguments -- port_id, FC-4 feature, FC-4 type */
-	sns_cmd->p.cmd.param[0] = ha->d_id.b.al_pa;
-	sns_cmd->p.cmd.param[1] = ha->d_id.b.area;
-	sns_cmd->p.cmd.param[2] = ha->d_id.b.domain;
-
-	sns_cmd->p.cmd.param[6] = 0x08;			/* SCSI - FCP */
-
-	/* Execute SNS command. */
-	rval = qla2x00_send_sns(ha, ha->sns_cmd_dma, RFF_ID_SNS_CMD_SIZE / 2,
-	    sizeof(struct sns_cmd_pkt));
-	if (rval != QLA_SUCCESS) {
-		/*EMPTY*/
-		DEBUG2_3(printk("scsi(%ld): RFF_ID Send SNS failed (%d).\n",
-		    ha->host_no, rval));
-	} else if (sns_cmd->p.rff_data[8] != 0x80 ||
-	    sns_cmd->p.rff_data[9] != 0x02) {
-		DEBUG2_3(printk("scsi(%ld): RFF_ID failed, rejected request, "
-		    "rff_rsp:\n", ha->host_no));
-		DEBUG2_3(qla2x00_dump_buffer(sns_cmd->p.rff_data, 16));
-		rval = QLA_FUNCTION_FAILED;
-	} else {
-		DEBUG2(printk("scsi(%ld): RFF_ID exiting normally.\n",
 		    ha->host_no));
 	}
 
diff -Nru a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
--- a/drivers/scsi/qla2xxx/qla_init.c	Sun May 16 01:18:36 2004
+++ b/drivers/scsi/qla2xxx/qla_init.c	Sun May 16 01:18:36 2004
@@ -102,9 +102,9 @@
 qla2x00_initialize_adapter(scsi_qla_host_t *ha)
 {
 	int	rval;
-	uint8_t	isp_init = 0;
 	uint8_t	restart_risc = 0;
 	uint8_t	retry;
+	uint32_t wait_time;
 
 	/* Clear adapter flags. */
 	ha->flags.online = FALSE;
@@ -133,14 +133,9 @@
 	/* Initialize target map database. */
 	qla2x00_init_tgt_map(ha);
 
-	/* Get Flash Version */
-	qla2x00_get_flash_version(ha);
-
 	qla_printk(KERN_INFO, ha, "Configure NVRAM parameters...\n");
 	qla2x00_nvram_config(ha);
 
-	ha->retry_count = ql2xretrycount;
-
 	qla_printk(KERN_INFO, ha, "Verifying loaded RISC code...\n");
 
 #if 0
@@ -161,7 +156,6 @@
 	 */
 	do {
 		restart_risc = 0;
-		isp_init = 0;
 
 		/* If firmware needs to be loaded */
 		if (qla2x00_isp_firmware(ha) != QLA_SUCCESS) {
@@ -180,21 +174,22 @@
 			 * value OR a minimum of 4 seconds OR If no 
 			 * cable, only 5 seconds.
 			 */
-			if (!qla2x00_fw_ready(ha)) {
+			rval = qla2x00_fw_ready(ha);
+			if (rval == QLA_SUCCESS) {
 				clear_bit(RESET_MARKER_NEEDED, &ha->dpc_flags);
 
 				/*
-				 * Go setup flash database devices with proper
-				 * Loop ID's.
+				 * Wait at most MAX_TARGET RSCNs for a stable
+				 * link.
 				 */
+				wait_time = 256;
 				do {
 					clear_bit(LOOP_RESYNC_NEEDED,
 					    &ha->dpc_flags);
 					rval = qla2x00_configure_loop(ha);
 
-					if (test_bit(ISP_ABORT_NEEDED,
+					if (test_and_clear_bit(ISP_ABORT_NEEDED,
 					    &ha->dpc_flags)) {
-
 						restart_risc = 1;
 						break;
 					}
@@ -209,20 +204,22 @@
 					    LOOP_DOWN && retry--) {
 						goto check_fw_ready_again;
 					}
+					wait_time--;
 				} while (!atomic_read(&ha->loop_down_timer) &&
 				    retry &&
-				    (test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags)));
+				    wait_time &&
+				    (test_bit(LOOP_RESYNC_NEEDED,
+					&ha->dpc_flags)));
+
+				if (wait_time == 0)
+					rval = QLA_FUNCTION_FAILED;
+				if (ha->mem_err)
+					restart_risc = 1;
 			}
-
-			if (ha->mem_err) {
-				restart_risc = 1;
-			}
-			isp_init = 1;
-
 		}
 	} while (restart_risc && retry--);
 
-	if (isp_init) {
+	if (rval == QLA_SUCCESS) {
 		/* Retrieve firmware information */
 		qla2x00_get_fw_version(ha, &ha->fw_major_version,
 		    &ha->fw_minor_version, &ha->fw_subminor_version,
@@ -234,9 +231,7 @@
 		ha->marker_needed = 0;
 
 		ha->flags.online = TRUE;
-	}
-
-	if (rval) {
+	} else {
 		DEBUG2_3(printk("%s(): **** FAILED ****\n", __func__));
 	}
 
@@ -290,7 +285,7 @@
 		/* PCI Specification Revision 2.3 changes */
 		if (IS_QLA2322(ha) || IS_QLA6322(ha))
 			/* Command Register - Reset Interrupt Disable. */
-			w &= ~BIT_10;
+			w &= ~PCI_COMMAND_INTX_DISABLE;
 
 		/*
 		 * If this is a 2300 card and not 2312, reset the
@@ -603,10 +598,11 @@
 	ha->product_id[3] = mb[4];
 
 	/* Adjust fw RISC transfer size */
-	if (REQUEST_ENTRY_CNT > 1024)
+	if (ha->request_q_length > 1024)
 		ha->fw_transfer_size = REQUEST_ENTRY_SIZE * 1024;
 	else
-		ha->fw_transfer_size = REQUEST_ENTRY_SIZE * REQUEST_ENTRY_CNT;
+		ha->fw_transfer_size = REQUEST_ENTRY_SIZE *
+		    ha->request_q_length;
 
 	if (IS_QLA2200(ha) &&
 	    RD_MAILBOX_REG(ha, reg, 7) == QLA2200A_RISC_ROM_VER) {
@@ -774,6 +770,54 @@
 }
 
 /**
+ * qla2x00_update_fw_options() - Read and process firmware options.
+ * @ha: HA context
+ *
+ * Returns 0 on success.
+ */
+static void
+qla2x00_update_fw_options(scsi_qla_host_t *ha)
+{
+	/* Setup seriallink options */
+	uint16_t swing, emphasis;
+
+	memset(ha->fw_options, 0, sizeof(ha->fw_options));
+	qla2x00_get_fw_options(ha, ha->fw_options);
+
+	if (IS_QLA2100(ha) || IS_QLA2200(ha))
+		return;
+
+	/* Serial Link options. */
+	DEBUG3(printk("scsi(%ld): Serial link options:\n",
+	    ha->host_no));
+	DEBUG3(qla2x00_dump_buffer((uint8_t *)&ha->fw_seriallink_options,
+	    sizeof(ha->fw_seriallink_options)));
+
+	ha->fw_options[1] &= ~FO1_SET_EMPHASIS_SWING;
+	if (ha->fw_seriallink_options[1] & BIT_2)
+		ha->fw_options[1] |= FO1_SET_EMPHASIS_SWING;
+
+	/*  1G settings */
+	swing = ha->fw_seriallink_options[0] & (BIT_2 | BIT_1 | BIT_0);
+	emphasis = ha->fw_seriallink_options[0] & (BIT_4 | BIT_3);
+	emphasis >>= 3;
+	ha->fw_options[10] = (emphasis << 14) | (swing << 8) | 0x3;
+
+	/*  2G settings */
+	swing = ha->fw_seriallink_options[0] & (BIT_7 | BIT_6 | BIT_5);
+	swing >>= 5;
+	emphasis = ha->fw_seriallink_options[1] & (BIT_1 | BIT_0);
+	ha->fw_options[11] = (emphasis << 14) | (swing << 8) | 0x3;
+
+	/* FCP2 options. */
+	/*  Return command IOCBs without waiting for an ABTS to complete. */
+	ha->fw_options[3] |= BIT_13;
+
+	/* Update Serial Link options. */
+	qla2x00_set_fw_options(ha, ha->fw_options);
+}
+
+/**
  * qla2x00_init_rings() - Initializes firmware.
  * @ha: HA context
  *
@@ -805,7 +849,7 @@
 	/* Initialize firmware. */
 	ha->request_ring_ptr  = ha->request_ring;
 	ha->req_ring_index    = 0;
-	ha->req_q_cnt         = REQUEST_ENTRY_CNT;
+	ha->req_q_cnt         = ha->request_q_length;
 	ha->response_ring_ptr = ha->response_ring;
 	ha->rsp_ring_index    = 0;
 
@@ -826,35 +870,8 @@
 		DEBUG2_3(printk("scsi(%ld): Init firmware **** FAILED ****.\n",
 		    ha->host_no));
 	} else {
-		/* Setup seriallink options */
-		uint16_t swing, emphasis;
-
-		DEBUG3(printk("scsi(%ld): Serial link options:\n",
-		    ha->host_no));
-		DEBUG3(qla2x00_dump_buffer(
-		    (uint8_t *)&ha->fw_seriallink_options,
-		    sizeof(ha->fw_seriallink_options)));
-
-		memset(ha->fw_options, 0, sizeof(ha->fw_options));
-		qla2x00_get_fw_options(ha, ha->fw_options);
-
-		ha->fw_options[1] &= ~FO1_SET_EMPHASIS_SWING;
-		if (ha->fw_seriallink_options[1] & BIT_2)
-			ha->fw_options[1] |= FO1_SET_EMPHASIS_SWING;
-
-		/* 1G settings */
-		swing = ha->fw_seriallink_options[0] & (BIT_2 | BIT_1 | BIT_0);
-		emphasis = ha->fw_seriallink_options[0] & (BIT_4 | BIT_3);
-		emphasis >>= 3;
-		ha->fw_options[10] = (emphasis << 14) | (swing << 8) | 0x3;
-
-		/* 2G settings */
-		swing = ha->fw_seriallink_options[0] & (BIT_7 | BIT_6 | BIT_5);
-		swing >>= 5;
-		emphasis = ha->fw_seriallink_options[1] & (BIT_1 | BIT_0);
-		ha->fw_options[11] = (emphasis << 14) | (swing << 8) | 0x3;
-
-		qla2x00_set_fw_options(ha, ha->fw_options);
+		/* Update any ISP specific firmware options. */
+		qla2x00_update_fw_options(ha);
 
 		DEBUG3(printk("scsi(%ld): Init firmware -- success.\n",
 		    ha->host_no));
@@ -946,7 +963,7 @@
 			break;
 
 		/* Delay for a while */
-		set_current_state(TASK_INTERRUPTIBLE);
+		set_current_state(TASK_UNINTERRUPTIBLE);
 		schedule_timeout(HZ / 2);
 
 		DEBUG3(printk("scsi(%ld): fw_state=%x curr time=%lx.\n",
@@ -1005,10 +1022,6 @@
 
 	ha->loop_id = loop_id;
 
-	/* Make sure 2100 only has loop, in case of any firmware bug. */
-	if (IS_QLA2100(ha))
-		topo = 0;
-
 	/* initialize */
 	ha->min_external_loopid = SNS_FIRST_LOOP_ID;
 	ha->operating_mode = LOOP;
@@ -1381,7 +1394,7 @@
 	 */
 	icb->request_q_outpointer = __constant_cpu_to_le16(0);
 	icb->response_q_inpointer = __constant_cpu_to_le16(0);
-	icb->request_q_length = __constant_cpu_to_le16(REQUEST_ENTRY_CNT);
+	icb->request_q_length = cpu_to_le16(ha->request_q_length);
 	icb->response_q_length = cpu_to_le16(ha->response_q_length);
 	icb->request_q_address[0] = cpu_to_le32(LSD(ha->request_dma));
 	icb->request_q_address[1] = cpu_to_le32(MSD(ha->request_dma));
@@ -1496,24 +1509,24 @@
 qla2x00_configure_loop(scsi_qla_host_t *ha) 
 {
 	int  rval;
-	uint8_t  rval1 = 0;
 	unsigned long flags, save_flags;
 
 	rval = QLA_SUCCESS;
 
 	/* Get Initiator ID */
-	if (qla2x00_configure_hba(ha)) {
-		DEBUG(printk("scsi(%ld): Unable to configure HBA.\n",
-		    ha->host_no));
-		return (QLA_FUNCTION_FAILED);
+	if (test_bit(LOCAL_LOOP_UPDATE, &ha->dpc_flags)) {
+		rval = qla2x00_configure_hba(ha);
+		if (rval != QLA_SUCCESS) {
+			DEBUG(printk("scsi(%ld): Unable to configure HBA.\n",
+			    ha->host_no));
+			return (rval);
+		}
 	}
 
 	save_flags = flags = ha->dpc_flags;
 	DEBUG(printk("scsi(%ld): Configure loop -- dpc flags =0x%lx\n",
 	    ha->host_no, flags));
 
-	/* dg 02/26/02 ha->dpc_flags &= ~(LOCAL_LOOP_UPDATE | RSCN_UPDATE); */
-
 	/*
 	 * If we have both an RSCN and PORT UPDATE pending then handle them
 	 * both at the same time.
@@ -1544,50 +1557,32 @@
 		set_bit(LOCAL_LOOP_UPDATE, &flags);
 	}
 
-	do {
-		if (test_bit(LOCAL_LOOP_UPDATE, &flags)) {
-			rval = rval | qla2x00_configure_local_loop(ha);
-		}
-
-		if (test_bit(RSCN_UPDATE, &flags)) {
-			rval1 = qla2x00_configure_fabric(ha);
-			if ((rval1 & BIT_0) && ha->sns_retry_cnt < 8) {
-				ha->sns_retry_cnt++;
-				set_bit(LOGIN_RETRY_NEEDED, &ha->dpc_flags);
-			}
+	if (test_bit(LOCAL_LOOP_UPDATE, &flags)) {
+		if (test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags)) {
+			rval = QLA_FUNCTION_FAILED;
+		} else {
+			rval = qla2x00_configure_local_loop(ha);
 		}
+	}
 
-		/* Isolate error status. */
-		if (rval & BIT_0) {
-			rval = 1;
+	if (rval == QLA_SUCCESS && test_bit(RSCN_UPDATE, &flags)) {
+		if (test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags)) {
+			rval = QLA_FUNCTION_FAILED;
 		} else {
-			rval = QLA_SUCCESS;
+			rval = qla2x00_configure_fabric(ha);
 		}
+	}
 
-	} while (rval != QLA_SUCCESS);
-
-	if (!atomic_read(&ha->loop_down_timer) &&
-	    !(test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags))) {
-
-		qla2x00_config_os(ha);
-
-		/* If we found all devices then go ready */
-		if (!(test_bit(LOGIN_RETRY_NEEDED, &ha->dpc_flags))) {
+	if (rval == QLA_SUCCESS) {
+		if (atomic_read(&ha->loop_down_timer) ||
+		    test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags)) {
+			rval = QLA_FUNCTION_FAILED;
+		} else {
+			qla2x00_config_os(ha);
 			atomic_set(&ha->loop_state, LOOP_READY);
 
 			DEBUG(printk("scsi(%ld): LOOP READY\n", ha->host_no));
-		} else {
-			if (test_bit(LOCAL_LOOP_UPDATE, &save_flags))
-				set_bit(LOCAL_LOOP_UPDATE, &ha->dpc_flags);
-			if (test_bit(RSCN_UPDATE, &save_flags))
-				set_bit(RSCN_UPDATE, &ha->dpc_flags);
 		}
-	} else {
-		DEBUG(printk("scsi(%ld): Loop down counter running= %d or "
-		    "Resync needed- dpc flags= %ld\n",
-		    ha->host_no,
-		    atomic_read(&ha->loop_down_timer), ha->dpc_flags));
-		/* ???? dg 02/26/02  rval = 1; */
 	}
 
 	if (rval) {
@@ -1619,7 +1614,6 @@
  *
  * Returns:
  *	0 = success.
- *	BIT_0 = error.
  */
 static int
 qla2x00_configure_local_loop(scsi_qla_host_t *ha) 
@@ -1644,19 +1638,9 @@
 	uint16_t	loop_id;
 	uint8_t		domain, area, al_pa;
 
-	rval = QLA_SUCCESS;
 	found_devs = 0;
 	new_fcport = NULL;
 
-	/*
-	 * No point in continuing if the loop is in a volatile state -- 
-	 * reschedule LOCAL_LOOP_UPDATE for later processing
-	 */
-	if (test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags)) {
-		set_bit(LOCAL_LOOP_UPDATE, &ha->dpc_flags);
-		return (rval);
-	}
-
 	entries = MAX_FIBRE_DEVICES;
 	id_list = pci_alloc_consistent(ha->pdev, MAX_ID_LIST_SIZE,
 	    &id_list_dma);
@@ -1668,7 +1652,7 @@
 		    "Memory Allocation failed - port_list");
 
 		ha->mem_err++;
-		return (BIT_0);
+		return (QLA_MEMORY_ALLOC_FAILED);
 	}
 	memset(id_list, 0, MAX_ID_LIST_SIZE);
 
@@ -1677,8 +1661,7 @@
 
 	/* Get list of logged in devices. */
 	rval = qla2x00_get_id_list(ha, id_list, id_list_dma, &entries);
-	if (rval) {
-		rval = BIT_0;
+	if (rval != QLA_SUCCESS) {
 		goto cleanup_allocation;
 	}
 
@@ -1690,7 +1673,7 @@
 	/* Allocate temporary fcport for any new fcports discovered. */
 	new_fcport = qla2x00_alloc_fcport(ha, GFP_KERNEL);
 	if (new_fcport == NULL) {
-		rval = BIT_0;
+		rval = QLA_MEMORY_ALLOC_FAILED;
 		goto cleanup_allocation;
 	}
 	new_fcport->flags &= ~FCF_FABRIC_DEVICE;
@@ -1783,7 +1766,7 @@
 			fcport = new_fcport;
 			new_fcport = qla2x00_alloc_fcport(ha, GFP_KERNEL);
 			if (new_fcport == NULL) {
-				rval = BIT_0;
+				rval = QLA_MEMORY_ALLOC_FAILED;
 				goto cleanup_allocation;
 			}
 			new_fcport->flags &= ~FCF_FABRIC_DEVICE;
@@ -1800,7 +1783,7 @@
 	if (new_fcport)
 		kfree(new_fcport);
 
-	if (rval & BIT_0) {
+	if (rval != QLA_SUCCESS) {
 		DEBUG2(printk("scsi(%ld): Configure local loop error exit: "
 		    "rval=%x\n", ha->host_no, rval));
 	}
@@ -2339,7 +2322,7 @@
 	/* Mark devices that need re-synchronization. */
 	rval2 = qla2x00_device_resync(ha);
 	if (rval2 == QLA_RSCNS_HANDLED) {
-		/* No, point doing the scan, just continue. */
+		/* No point doing the scan, just continue. */
 		return (QLA_SUCCESS);
 	}
 	do {
@@ -2489,7 +2472,6 @@
  *
  * Returns:
  *	0 = success.
- *	BIT_0 = error.
  *
  * Context:
  *	Kernel context.
@@ -3082,6 +3064,7 @@
 qla2x00_loop_resync(scsi_qla_host_t *ha) 
 {
 	int   rval;
+	uint32_t wait_time;
 
 	rval = QLA_SUCCESS;
 
@@ -3090,6 +3073,8 @@
 	clear_bit(ISP_ABORT_RETRY, &ha->dpc_flags);
 	if (ha->flags.online) {
 		if (!(rval = qla2x00_fw_ready(ha))) {
+			/* Wait at most MAX_TARGET RSCNs for a stable link. */
+			wait_time = 256;
 			do {
 				/* v2.19.05b6 */
 				atomic_set(&ha->loop_state, LOOP_UPDATE);
@@ -3104,12 +3089,13 @@
 				clear_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags);
 
 				qla2x00_configure_loop(ha);
-
+				wait_time--;
 			} while (!atomic_read(&ha->loop_down_timer) &&
 				!(test_bit(ISP_ABORT_NEEDED, &ha->dpc_flags)) &&
+				wait_time &&
 				(test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags)));
 		}
-		qla2x00_restart_queues(ha,TRUE);
+		qla2x00_restart_queues(ha, TRUE);
 	}
 
 	if (test_bit(ISP_ABORT_NEEDED, &ha->dpc_flags)) {
@@ -3150,6 +3136,10 @@
 		spin_lock_irqsave(&ha->list_lock,flags);
 		list_for_each_safe(list, temp, &ha->pending_queue) {
 			sp = list_entry(list, srb_t, list);
+
+			if ((sp->flags & SRB_TAPE))
+				continue;
+			 
 			/* 
 			 * When time expire return request back to OS as BUSY 
 			 */
@@ -3292,6 +3282,7 @@
 static uint16_t
 qla2x00_fcport_bind(scsi_qla_host_t *ha, fc_port_t *fcport) 
 {
+	int		found;
 	uint16_t	tgt;
 	os_tgt_t	*tq;
 
@@ -3300,18 +3291,32 @@
 		if ((tq = TGT_Q(ha, tgt)) == NULL)
 			continue;
 
-		if (ha->binding_type == BIND_BY_PORT_ID &&
-		    fcport->d_id.b24 == tq->d_id.b24) {
-			memcpy(tq->node_name, fcport->node_name, WWN_SIZE);
-			memcpy(tq->port_name, fcport->port_name, WWN_SIZE);
+		found = 0;
+		switch (ha->binding_type) {
+		case BIND_BY_PORT_ID:
+			if (fcport->d_id.b24 == tq->d_id.b24) {
+				memcpy(tq->node_name, fcport->node_name,
+				    WWN_SIZE);
+				memcpy(tq->port_name, fcport->port_name,
+				    WWN_SIZE);
+				found++;
+			}
 			break;
-		}
-
-		if (memcmp(fcport->port_name, tq->port_name, WWN_SIZE) == 0) {
-			/* In case of persistent binding, update the WWNN */
-			memcpy(tq->node_name, fcport->node_name, WWN_SIZE);
+		case BIND_BY_PORT_NAME:    
+			if (memcmp(fcport->port_name, tq->port_name,
+			    WWN_SIZE) == 0) {
+				/*
+				 * In case of persistent binding, update the
+				 * WWNN.
+				 */
+				memcpy(tq->node_name, fcport->node_name,
+				    WWN_SIZE);
+				found++;
+			}
 			break;
 		}
+		if (found)
+		    break;	
 	}
 
 	/* TODO: honor the ConfigRequired flag */
@@ -4226,6 +4231,7 @@
 	uint8_t		status = 0;
 	device_reg_t	*reg;
 	unsigned long	flags = 0;
+	uint32_t wait_time;
 
 	/* If firmware needs to be loaded */
 	if (qla2x00_isp_firmware(ha)) {
@@ -4269,11 +4275,15 @@
 					__func__,
 					status);)
 			ha->flags.online = TRUE;
+			/* Wait at most MAX_TARGET RSCNs for a stable link. */
+			wait_time = 256;
 			do {
 				clear_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags);
 				qla2x00_configure_loop(ha);
+				wait_time--;
 			} while (!atomic_read(&ha->loop_down_timer) &&
 				!(test_bit(ISP_ABORT_NEEDED, &ha->dpc_flags)) &&
+				wait_time &&
 				(test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags)));
 		}
 
diff -Nru a/drivers/scsi/qla2xxx/qla_iocb.c b/drivers/scsi/qla2xxx/qla_iocb.c
--- a/drivers/scsi/qla2xxx/qla_iocb.c	Sun May 16 01:18:35 2004
+++ b/drivers/scsi/qla2xxx/qla_iocb.c	Sun May 16 01:18:35 2004
@@ -124,7 +124,7 @@
 
 	/* Adjust ring index. */
 	ha->req_ring_index++;
-	if (ha->req_ring_index == REQUEST_ENTRY_CNT) {
+	if (ha->req_ring_index == ha->request_q_length) {
 		ha->req_ring_index = 0;
 		ha->request_ring_ptr = ha->request_ring;
 	} else {
@@ -153,7 +153,7 @@
 
 	/* Adjust ring index. */
 	ha->req_ring_index++;
-	if (ha->req_ring_index == REQUEST_ENTRY_CNT) {
+	if (ha->req_ring_index == ha->request_q_length) {
 		ha->req_ring_index = 0;
 		ha->request_ring_ptr = ha->request_ring;
 	} else {
@@ -390,11 +390,11 @@
 
 	if (ha->req_q_cnt < (sp->req_cnt + 2)) {
 		/* Calculate number of free request entries */
-		cnt = RD_REG_WORD(ISP_REQ_Q_OUT(ha, reg));
+		cnt = RD_REG_WORD_RELAXED(ISP_REQ_Q_OUT(ha, reg));
 		if (ha->req_ring_index < cnt)
 			ha->req_q_cnt = cnt - ha->req_ring_index;
 		else
-			ha->req_q_cnt = REQUEST_ENTRY_CNT -
+			ha->req_q_cnt = ha->request_q_length -
 			    (ha->req_ring_index - cnt);
 	}
 
@@ -484,7 +484,7 @@
 
 	/* Adjust ring index. */
 	ha->req_ring_index++;
-	if (ha->req_ring_index == REQUEST_ENTRY_CNT) {
+	if (ha->req_ring_index == ha->request_q_length) {
 		ha->req_ring_index = 0;
 		ha->request_ring_ptr = ha->request_ring;
 	} else
@@ -499,7 +499,7 @@
 
 	/* Set chip new ring index. */
 	WRT_REG_WORD(ISP_REQ_Q_IN(ha, reg), ha->req_ring_index);
-	RD_REG_WORD(ISP_REQ_Q_IN(ha, reg));	/* PCI Posting. */
+	RD_REG_WORD_RELAXED(ISP_REQ_Q_IN(ha, reg));	/* PCI Posting. */
 
 	spin_unlock_irqrestore(&ha->hardware_lock, flags);
 	return (QLA_SUCCESS);
@@ -588,7 +588,7 @@
 			if  (ha->req_ring_index < cnt)
 				ha->req_q_cnt = cnt - ha->req_ring_index;
 			else
-				ha->req_q_cnt = REQUEST_ENTRY_CNT -
+				ha->req_q_cnt = ha->request_q_length -
 				    (ha->req_ring_index - cnt);
 		}
 		/* If room for request in request ring. */
@@ -658,7 +658,7 @@
 			if (ha->req_ring_index < cnt) {
 				ha->req_q_cnt = cnt - ha->req_ring_index;
 			} else {
-				ha->req_q_cnt = REQUEST_ENTRY_CNT -
+				ha->req_q_cnt = ha->request_q_length -
 				    (ha->req_ring_index - cnt);
 			}
 		}
@@ -740,7 +740,7 @@
 
 	/* Adjust ring index. */
 	ha->req_ring_index++;
-	if (ha->req_ring_index == REQUEST_ENTRY_CNT) {
+	if (ha->req_ring_index == ha->request_q_length) {
 		ha->req_ring_index = 0;
 		ha->request_ring_ptr = ha->request_ring;
 	} else
@@ -748,5 +748,5 @@
 
 	/* Set chip new ring index. */
 	WRT_REG_WORD(ISP_REQ_Q_IN(ha, reg), ha->req_ring_index);
-	RD_REG_WORD(ISP_REQ_Q_IN(ha, reg));	/* PCI Posting. */
+	RD_REG_WORD_RELAXED(ISP_REQ_Q_IN(ha, reg));	/* PCI Posting. */
 }
diff -Nru a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
--- a/drivers/scsi/qla2xxx/qla_isr.c	Sun May 16 01:18:37 2004
+++ b/drivers/scsi/qla2xxx/qla_isr.c	Sun May 16 01:18:37 2004
@@ -165,7 +165,7 @@
 				break;
 			}
 			WRT_REG_WORD(&reg->hccr, HCCR_CLR_RISC_INT);
-			RD_REG_WORD(&reg->hccr);
+			RD_REG_WORD_RELAXED(&reg->hccr);
 		}
 	}
 
@@ -907,7 +907,7 @@
 	 * If loop is in transient state Report DID_BUS_BUSY
 	 */
 	if ((comp_status != CS_COMPLETE || scsi_status != 0)) {
-		if (!(sp->flags & SRB_IOCTL) &&
+		if (!(sp->flags & (SRB_IOCTL | SRB_TAPE)) &&
 		    (atomic_read(&ha->loop_down_timer) ||
 			atomic_read(&ha->loop_state) != LOOP_READY)) {
 
@@ -986,7 +986,7 @@
 		if (sp->request_sense_length != 0)
 			ha->status_srb = sp;
 
-		if (!(sp->flags & SRB_IOCTL) &&
+		if (!(sp->flags & (SRB_IOCTL | SRB_TAPE)) &&
 		    qla2x00_check_sense(cp, lq) == QLA_SUCCESS) {
 			/* Throw away status_cont if any */
 			ha->status_srb = NULL;
@@ -1053,7 +1053,7 @@
 			if (sp->request_sense_length != 0)
 				ha->status_srb = sp;
 
-			if (!(sp->flags & SRB_IOCTL) &&
+			if (!(sp->flags & (SRB_IOCTL | SRB_TAPE)) &&
 			    (qla2x00_check_sense(cp, lq) == QLA_SUCCESS)) {
 				ha->status_srb = NULL;
 				add_to_scsi_retry_queue(ha, sp);
@@ -1137,7 +1137,7 @@
 		    ha->host_no, t, l, cp->serial_number, comp_status,
 		    atomic_read(&fcport->state)));
 
-		if ((sp->flags & SRB_IOCTL) ||
+		if ((sp->flags & (SRB_IOCTL | SRB_TAPE)) ||
 		    atomic_read(&fcport->state) == FCS_DEVICE_DEAD) {
 			cp->result = DID_NO_CONNECT << 16;
 			if (atomic_read(&ha->loop_state) == LOOP_DOWN) 
@@ -1162,7 +1162,7 @@
 		    "scsi(%ld): RESET status detected 0x%x-0x%x.\n",
 		    ha->host_no, comp_status, scsi_status));
 
-		if (sp->flags & SRB_IOCTL) {
+		if (sp->flags & (SRB_IOCTL | SRB_TAPE)) {
 			cp->result = DID_RESET << 16;
 		} else {
 			qla2x00_extend_timeout(cp, EXTEND_CMD_TIMEOUT);
diff -Nru a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c
--- a/drivers/scsi/qla2xxx/qla_mbx.c	Sun May 16 01:18:35 2004
+++ b/drivers/scsi/qla2xxx/qla_mbx.c	Sun May 16 01:18:35 2004
@@ -279,6 +279,9 @@
 			DEBUG2_3_11(printk("qla2x00_mailbox_command(%ld): "
 			    "timeout schedule isp_abort_needed.\n",
 			    ha->host_no);)
+			qla_printk(KERN_WARNING, ha,
+			    "Mailbox command timeout occured. Scheduling ISP "
+			    "abort.\n");
 			set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
 			if (ha->dpc_wait && !ha->dpc_active) 
 				up(ha->dpc_wait);
@@ -290,6 +293,9 @@
 			    "calling abort_isp\n", ha->host_no);)
 			DEBUG2_3_11(printk("qla2x00_mailbox_command(%ld): "
 			    "timeout calling abort_isp\n", ha->host_no);)
+			qla_printk(KERN_WARNING, ha,
+			    "Mailbox command timeout occured. Issuing ISP "
+			    "abort.\n");
 
 			set_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags);
 			clear_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
@@ -981,7 +987,6 @@
 
 	if (atomic_read(&ha->loop_state) == LOOP_DOWN ||
 	    atomic_read(&fcport->state) == FCS_DEVICE_LOST) {
-		/* v2.19.8 Ignore abort request if port is down */
 		return 1;
 	}
 
@@ -1062,6 +1067,9 @@
 	qla2x00_marker(ha, loop_id, lun, MK_SYNC_ID_LUN);
 
 	if (rval != QLA_SUCCESS) {
+		qla_printk(KERN_WARNING, ha,
+		    "Failed Abort Device Mailbox command. Scheduling ISP "
+		    "abort.\n");
 		set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
 		if (ha->dpc_wait && !ha->dpc_active) 
 			up(ha->dpc_wait);
@@ -1598,7 +1606,7 @@
  *	BIT_1 = mailbox error.
  */
 uint8_t
-qla2x00_get_link_status(scsi_qla_host_t *ha, uint8_t loop_id,
+qla2x00_get_link_status(scsi_qla_host_t *ha, uint16_t loop_id,
     link_stat_t *ret_buf, uint16_t *status)
 {
 	int rval;
diff -Nru a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
--- a/drivers/scsi/qla2xxx/qla_os.c	Sun May 16 01:18:36 2004
+++ b/drivers/scsi/qla2xxx/qla_os.c	Sun May 16 01:18:37 2004
@@ -168,7 +168,6 @@
 	.slave_configure	= qla2xxx_slave_configure,
 
 	.this_id		= -1,
-	.can_queue		= REQUEST_ENTRY_CNT+128,
 	.cmd_per_lun		= 3,
 	.use_clustering		= ENABLE_CLUSTERING,
 	.sg_tablesize		= SG_ALL,
@@ -776,10 +775,13 @@
 
 	/* Only modify the allowed count if the target is a *non* tape device */
 	if ((fcport->flags & FCF_TAPE_PRESENT) == 0) {
+		sp->flags &= ~SRB_TAPE;
 		if (cmd->allowed < ql2xretrycount) {
 			cmd->allowed = ql2xretrycount;
 		}
-	}
+	} else
+		sp->flags |= SRB_TAPE;
+
 
 	DEBUG5(printk("scsi(%ld:%2d:%2d): (queuecmd) queue sp = %p, "
 	    "flags=0x%x fo retry=%d, pid=%ld\n",
@@ -808,7 +810,7 @@
 	    atomic_read(&ha2->loop_state) == LOOP_DEAD) {
 		/*
 		 * Add the command to the done-queue for later failover
-		 * processing
+		 * processing.
 		 */
 		cmd->result = DID_NO_CONNECT << 16;
 		if (atomic_read(&ha2->loop_state) == LOOP_DOWN) 
@@ -822,7 +824,8 @@
 		spin_lock_irq(ha->host->host_lock);
 		return (0);
 	}
-	if (tq && test_bit(TQF_SUSPENDED, &tq->flags)) {
+	if (tq && test_bit(TQF_SUSPENDED, &tq->flags) &&
+	    (sp->flags & SRB_TAPE) == 0) {
 		/* If target suspended put incoming I/O in retry_q. */
 		qla2x00_extend_timeout(sp->cmd, 10);
 		add_to_scsi_retry_queue(ha, sp);
@@ -834,7 +837,7 @@
 		device_reg_t *reg;
 		reg = ha->iobase;
 		
-		if (RD_REG_WORD(ISP_RSP_Q_IN(ha, reg)) != ha->rsp_ring_index) {
+		if (ha->response_ring_ptr->signature != RESPONSE_PROCESSED) {
 			spin_lock_irqsave(&ha->hardware_lock, flags);	
 			qla2x00_process_response_queue(ha);
 			spin_unlock_irqrestore(&ha->hardware_lock, flags);
@@ -914,7 +917,7 @@
 
 		spin_unlock_irq(ha->host->host_lock);
 
-		set_current_state(TASK_INTERRUPTIBLE);
+		set_current_state(TASK_UNINTERRUPTIBLE);
 		schedule_timeout(2*HZ);
 
 		spin_lock_irq(ha->host->host_lock);
@@ -962,7 +965,7 @@
 	    test_bit(ISP_ABORT_RETRY, &ha->dpc_flags)) &&
 		time_before(jiffies, wait_online)) {
 
-		set_current_state(TASK_INTERRUPTIBLE);
+		set_current_state(TASK_UNINTERRUPTIBLE);
 		schedule_timeout(HZ);
 	}
 	if (ha->flags.online == TRUE) 
@@ -1005,7 +1008,7 @@
 	    atomic_read(&ha->loop_state) == LOOP_DOWN) ||
 	    test_bit(CFG_ACTIVE, &ha->cfg_flags) ||
 	    atomic_read(&ha->loop_state) != LOOP_READY) {
-		set_current_state(TASK_INTERRUPTIBLE);
+		set_current_state(TASK_UNINTERRUPTIBLE);
 		schedule_timeout(HZ);
 		if (time_after_eq(jiffies, loop_timeout)) {
 			return_status = QLA_FUNCTION_FAILED;
@@ -1783,10 +1786,9 @@
 		queue_depth = 32;
 
 	if (sdev->tagged_supported) {
-#if defined(MODULE)
-		if (!(ql2xmaxqdepth == 0 || ql2xmaxqdepth > 256))
+		if (ql2xmaxqdepth != 0 && ql2xmaxqdepth <= 0xffffU)
 			queue_depth = ql2xmaxqdepth;
-#endif 
+
 		ql2xmaxqdepth = queue_depth;
 
 		scsi_adjust_queue_depth(sdev, MSG_ORDERED_TAG, queue_depth);
@@ -1983,19 +1985,24 @@
 	if (IS_QLA2100(ha)) {
 		ha->max_targets = MAX_TARGETS_2100;
 		ha->mbx_count = MAILBOX_REGISTER_COUNT_2100;
+		ha->request_q_length = REQUEST_ENTRY_CNT_2100;
 		ha->response_q_length = RESPONSE_ENTRY_CNT_2100;
 		ha->last_loop_id = SNS_LAST_LOOP_ID_2100;
+		host->sg_tablesize = 32;
 	} else if (IS_QLA2200(ha)) {
 		ha->max_targets = MAX_TARGETS_2200;
 		ha->mbx_count = MAILBOX_REGISTER_COUNT;
+		ha->request_q_length = REQUEST_ENTRY_CNT_2200;
 		ha->response_q_length = RESPONSE_ENTRY_CNT_2100;
 		ha->last_loop_id = SNS_LAST_LOOP_ID_2100;
 	} else /*if (IS_QLA2300(ha))*/ {
 		ha->max_targets = MAX_TARGETS_2200;
 		ha->mbx_count = MAILBOX_REGISTER_COUNT;
+		ha->request_q_length = REQUEST_ENTRY_CNT_2200;
 		ha->response_q_length = RESPONSE_ENTRY_CNT_2300;
 		ha->last_loop_id = SNS_LAST_LOOP_ID_2300;
 	}
+	host->can_queue = ha->request_q_length + 128;
 
 	/* load the F/W, read paramaters, and init the H/W */
 	ha->instance = num_hosts;
@@ -2020,6 +2027,7 @@
 	spin_lock_init(&ha->mbx_reg_lock);
 	spin_lock_init(&ha->list_lock);
 
+	ha->dpc_pid = -1;
 	init_completion(&ha->dpc_inited);
 	init_completion(&ha->dpc_exited);
 
@@ -2125,8 +2133,8 @@
 
 		qla2x00_check_fabric_devices(ha);
 
-		set_current_state(TASK_INTERRUPTIBLE);
-		schedule_timeout(5);
+		set_current_state(TASK_UNINTERRUPTIBLE);
+		schedule_timeout(HZ/100);
 	}
 
 	pci_set_drvdata(pdev, ha);
@@ -2313,18 +2321,17 @@
     char **start, off_t offset, int length, int inout)
 {
 	struct info_str	info;
-	int		i;
 	int             retval = -EINVAL;
 	os_lun_t	*up;
-	fc_port_t	*fcport;
+	os_tgt_t	*tq;
 	unsigned int	t, l;
 	uint32_t        tmp_sn;
-	unsigned long   *flags;
+	uint32_t	*flags;
 	uint8_t		*loop_state;
 	int	found;
 	scsi_qla_host_t *ha;
 	char fw_info[30];
-
+ 
 	DEBUG3(printk(KERN_INFO
 	    "Entering proc_info buff_in=%p, offset=0x%lx, length=0x%x\n",
 	    buffer, offset, length);)
@@ -2390,8 +2397,8 @@
 		(unsigned long long)ha->response_dma);
 
 	copy_info(&info,
-	    "Request Queue count = %ld, Response Queue count = %ld\n",
-	    (long)REQUEST_ENTRY_CNT, (long)ha->response_q_length);
+	    "Request Queue count = %d, Response Queue count = %d\n",
+	    ha->request_q_length, ha->response_q_length);
 
 	copy_info(&info,
 	    "Total number of active commands = %ld\n",
@@ -2428,7 +2435,7 @@
 	    ha->done_q_cnt, ha->scsi_retry_q_cnt);
 
 
-	flags = (unsigned long *) &ha->flags;
+	flags = (uint32_t *) &ha->flags;
 
 	if (atomic_read(&ha->loop_state) == LOOP_DOWN) {
 		loop_state = "DOWN";
@@ -2502,24 +2509,19 @@
 	    ha->init_cb->port_name[7]);
 
 	/* Print out device port names */
-	i = 0;
- 	list_for_each_entry(fcport, &ha->fcports, list) {
-		if (fcport->port_type != FCT_TARGET)
+	for (t = 0; t < MAX_FIBRE_DEVICES; t++) {
+		if ((tq = TGT_Q(ha, t)) == NULL)
 			continue;
 
 		copy_info(&info,
 		    "scsi-qla%d-target-%d="
-		    "%02x%02x%02x%02x%02x%02x%02x%02x:%02x%02x%02x;\n",
-		    (int)ha->instance, i,
-		    fcport->port_name[0], fcport->port_name[1],
-		    fcport->port_name[2], fcport->port_name[3],
-		    fcport->port_name[4], fcport->port_name[5],
-		    fcport->port_name[6], fcport->port_name[7],
-		    fcport->d_id.b.domain, fcport->d_id.b.area,
-		    fcport->d_id.b.al_pa);
-		i++;
+		    "%02x%02x%02x%02x%02x%02x%02x%02x;\n",
+		    (int)ha->instance, t,
+		    tq->port_name[0], tq->port_name[1],
+		    tq->port_name[2], tq->port_name[3],
+		    tq->port_name[4], tq->port_name[5],
+		    tq->port_name[6], tq->port_name[7]);
 	}
-
 	copy_info(&info, "\nSCSI LUN Information:\n");
 	copy_info(&info,
 	    "(Id:Lun)  * - indicates lun is not registered with the OS.\n");
@@ -2861,14 +2863,14 @@
 		 * little delay and a retry.
 		 */
 		ha->request_ring = pci_alloc_consistent(ha->pdev,
-		    ((REQUEST_ENTRY_CNT + 1) * (sizeof(request_t))),
+		    ((ha->request_q_length + 1) * (sizeof(request_t))),
 		    &ha->request_dma);
 		if (ha->request_ring == NULL) {
 			qla_printk(KERN_WARNING, ha,
 			    "Memory Allocation failed - request_ring\n");
 
 			qla2x00_mem_free(ha);
-			set_current_state(TASK_INTERRUPTIBLE);
+			set_current_state(TASK_UNINTERRUPTIBLE);
 			schedule_timeout(HZ/10);
 
 			continue;
@@ -2882,7 +2884,7 @@
 			    "Memory Allocation failed - response_ring\n");
 
 			qla2x00_mem_free(ha);
-			set_current_state(TASK_INTERRUPTIBLE);
+			set_current_state(TASK_UNINTERRUPTIBLE);
 			schedule_timeout(HZ/10);
 
 			continue;
@@ -2896,7 +2898,7 @@
 			    "Memory Allocation failed - init_cb\n");
 
 			qla2x00_mem_free(ha);
-			set_current_state(TASK_INTERRUPTIBLE);
+			set_current_state(TASK_UNINTERRUPTIBLE);
 			schedule_timeout(HZ/10);
 
 			continue;
@@ -2909,7 +2911,7 @@
 			    "Memory Allocation failed - ioctl_mem\n");
 
 			qla2x00_mem_free(ha);
-			set_current_state(TASK_INTERRUPTIBLE);
+			set_current_state(TASK_UNINTERRUPTIBLE);
 			schedule_timeout(HZ/10);
 
 			continue;
@@ -2921,14 +2923,14 @@
 			    "qla2x00_allocate_sp_pool()\n");
 
 			qla2x00_mem_free(ha);
-			set_current_state(TASK_INTERRUPTIBLE);
+			set_current_state(TASK_UNINTERRUPTIBLE);
 			schedule_timeout(HZ/10);
 
 			continue;
 		}
 
 		/* Allocate memory for SNS commands */
-		if (IS_QLA2200(ha)) {
+		if (IS_QLA2100(ha) || IS_QLA2200(ha)) {
 			/* Get consistent memory allocated for SNS commands */
 			ha->sns_cmd = pci_alloc_consistent(ha->pdev,
 			    sizeof(struct sns_cmd_pkt), &ha->sns_cmd_dma);
@@ -2938,13 +2940,13 @@
 				    "Memory Allocation failed - sns_cmd\n");
 
 				qla2x00_mem_free(ha);
-				set_current_state(TASK_INTERRUPTIBLE);
+				set_current_state(TASK_UNINTERRUPTIBLE);
 				schedule_timeout(HZ/10);
 
 				continue;
 			}
 			memset(ha->sns_cmd, 0, sizeof(struct sns_cmd_pkt));
-		} else if (!IS_QLA2100(ha)) {
+		} else {
 			/* Get consistent memory allocated for MS IOCB */
 			ha->ms_iocb = pci_alloc_consistent(ha->pdev,
 			    sizeof(ms_iocb_entry_t), &ha->ms_iocb_dma);
@@ -2954,7 +2956,7 @@
 				    "Memory Allocation failed - ms_iocb\n");
 
 				qla2x00_mem_free(ha);
-				set_current_state(TASK_INTERRUPTIBLE);
+				set_current_state(TASK_UNINTERRUPTIBLE);
 				schedule_timeout(HZ/10);
 
 				continue;
@@ -2973,7 +2975,7 @@
 				    "Memory Allocation failed - ct_sns\n");
 
 				qla2x00_mem_free(ha);
-				set_current_state(TASK_INTERRUPTIBLE);
+				set_current_state(TASK_UNINTERRUPTIBLE);
 				schedule_timeout(HZ/10);
 
 				continue;
@@ -2990,7 +2992,7 @@
 			    "Memory Allocation failed - iodesc_pd\n");
 
 			qla2x00_mem_free(ha);
-			set_current_state(TASK_INTERRUPTIBLE);
+			set_current_state(TASK_UNINTERRUPTIBLE);
 			schedule_timeout(HZ/10);
 
 			continue;
@@ -3077,7 +3079,7 @@
 
 	if (ha->request_ring) {
 		pci_free_consistent(ha->pdev,
-		    ((REQUEST_ENTRY_CNT + 1) * (sizeof(request_t))),
+		    ((ha->request_q_length + 1) * (sizeof(request_t))),
 		    ha->request_ring, ha->request_dma);
 	}
 
@@ -3852,6 +3854,8 @@
 				DEBUG(printk("scsi(%ld): Loop down - "
 				    "aborting ISP.\n",
 				    ha->host_no));
+				qla_printk(KERN_WARNING, ha,
+				    "Loop down - aborting ISP.\n");
 
 				set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
 			}
@@ -3936,8 +3940,8 @@
 	int processed;
 	scsi_qla_host_t *vis_ha, *dest_ha;
 	struct scsi_cmnd *cmd;
-	ulong      flags;
-	fc_port_t	*fcport;
+	unsigned long flags, cpu_flags;
+	fc_port_t *fcport;
 
 	cmd = sp->cmd;
 	vis_ha = (scsi_qla_host_t *)cmd->device->host->hostdata;
@@ -4032,6 +4036,64 @@
 		 return;
 	}
 
+	spin_lock_irqsave(&dest_ha->list_lock, cpu_flags);
+	if (sp->state == SRB_DONE_STATE) {
+		/* IO in done_q  -- leave it */
+		DEBUG(printk("scsi(%ld): Found in Done queue pid %ld sp=%p.\n",
+		    dest_ha->host_no, cmd->serial_number, sp));
+	} else if (sp->state == SRB_SUSPENDED_STATE) {
+		DEBUG(printk("scsi(%ld): Found SP %p in suspended state  "
+		    "- pid %ld:\n",
+		    dest_ha->host_no, sp, cmd->serial_number));
+		DEBUG(qla2x00_dump_buffer((uint8_t *)sp, sizeof(srb_t));)
+	} else if (sp->state == SRB_ACTIVE_STATE) {
+		/*
+		 * IO is with ISP find the command in our active list.
+		 */
+		spin_unlock_irqrestore(&dest_ha->list_lock, cpu_flags);
+		spin_lock_irqsave(&dest_ha->hardware_lock, flags);
+		if (sp == dest_ha->outstanding_cmds[
+		    (unsigned long)sp->cmd->host_scribble]) {
+
+			DEBUG(printk("cmd_timeout: Found in ISP \n"));
+
+			if (sp->flags & SRB_TAPE) {
+				/*
+				 * We cannot allow the midlayer error handler
+				 * to wakeup and begin the abort process.
+				 * Extend the timer so that the firmware can
+				 * properly return the IOCB.
+				 */
+				DEBUG(printk("cmd_timeout: Extending timeout "
+				    "of FCP2 tape command!\n"));
+				qla2x00_extend_timeout(sp->cmd,
+				    EXTEND_CMD_TIMEOUT);
+			}
+			sp->state = SRB_ACTIVE_TIMEOUT_STATE;
+			spin_unlock_irqrestore(&dest_ha->hardware_lock, flags);
+		} else {
+			spin_unlock_irqrestore(&dest_ha->hardware_lock, flags);
+			printk(KERN_INFO 
+				"qla_cmd_timeout: State indicates it is with "
+				"ISP, But not in active array\n");
+		}
+		spin_lock_irqsave(&dest_ha->list_lock, cpu_flags);
+	} else if (sp->state == SRB_ACTIVE_TIMEOUT_STATE) {
+		DEBUG(printk("qla2100%ld: Found in Active timeout state"
+				"pid %ld, State = %x., \n",
+				dest_ha->host_no,
+				sp->cmd->serial_number, sp->state);)
+	} else {
+		/* EMPTY */
+		DEBUG2(printk("cmd_timeout%ld: LOST command state = "
+				"0x%x, sp=%p\n",
+				vis_ha->host_no, sp->state,sp);)
+
+		qla_printk(KERN_INFO, vis_ha,
+			"cmd_timeout: LOST command state = 0x%x\n", sp->state);
+	}
+	spin_unlock_irqrestore(&dest_ha->list_lock, cpu_flags);
+
 	DEBUG3(printk("cmd_timeout: Leaving\n");)
 }
 
@@ -4180,9 +4242,6 @@
 	spin_lock_irqsave(&ha->hardware_lock,flags);
 	qla2x00_process_response_queue(ha);
 	spin_unlock_irqrestore(&ha->hardware_lock, flags);
-
-	if (!list_empty(&ha->done_queue))
-		qla2x00_done(ha);
 }
 
 /*
@@ -4261,7 +4320,7 @@
 		 * continues until the LOOP DOWN time expires or the condition
 		 * goes away.
 		 */
-	 	if (!(sp->flags & SRB_IOCTL) &&
+		if (!(sp->flags & (SRB_IOCTL | SRB_TAPE)) &&
 		    (atomic_read(&fcport->state) != FCS_ONLINE ||
 			test_bit(ABORT_ISP_ACTIVE, &dest_ha->dpc_flags) ||
 			atomic_read(&dest_ha->loop_state) != LOOP_READY)) {
@@ -4286,7 +4345,7 @@
 		 * If this request's lun is suspended then put the request on
 		 * the  scsi_retry queue. 
 		 */
-	 	if (!(sp->flags & SRB_IOCTL) &&
+	 	if (!(sp->flags & (SRB_IOCTL | SRB_TAPE)) &&
 		    sp->lun_queue->q_state == LUN_STATE_WAIT) {
 			DEBUG3(printk("scsi(%ld): lun wait state - pid=%ld, "
 			    "opcode=%d, allowed=%d, retries=%d\n",
diff -Nru a/drivers/scsi/qla2xxx/qla_rscn.c b/drivers/scsi/qla2xxx/qla_rscn.c
--- a/drivers/scsi/qla2xxx/qla_rscn.c	Sun May 16 01:18:34 2004
+++ b/drivers/scsi/qla2xxx/qla_rscn.c	Sun May 16 01:18:34 2004
@@ -283,6 +283,8 @@
 
 	qla2x00_free_iodesc(iodesc);
 
+	qla_printk(KERN_WARNING, iodesc->ha,
+	    "IO descriptor timeout. Scheduling ISP abort.\n");
 	set_bit(ISP_ABORT_NEEDED, &iodesc->ha->dpc_flags);
 }
 
@@ -385,7 +387,7 @@
 		if  (ha->req_ring_index < cnt)
 			ha->req_q_cnt = cnt - ha->req_ring_index;
 		else
-			ha->req_q_cnt = REQUEST_ENTRY_CNT -
+			ha->req_q_cnt = ha->request_q_length -
 			    (ha->req_ring_index - cnt);
 	}
 	if (ha->req_q_cnt >= 3) {
diff -Nru a/drivers/scsi/qla2xxx/qla_sup.c b/drivers/scsi/qla2xxx/qla_sup.c
--- a/drivers/scsi/qla2xxx/qla_sup.c	Sun May 16 01:18:33 2004
+++ b/drivers/scsi/qla2xxx/qla_sup.c	Sun May 16 01:18:33 2004
@@ -24,20 +24,6 @@
 static void qla2x00_nv_deselect(scsi_qla_host_t *);
 static void qla2x00_nv_write(scsi_qla_host_t *, uint16_t);
 
-uint8_t qla2x00_read_flash_byte(scsi_qla_host_t *, uint32_t);
-static void qla2x00_write_flash_byte(scsi_qla_host_t *, uint32_t, uint8_t);
-static uint8_t qla2x00_poll_flash(scsi_qla_host_t *ha,
-		uint32_t addr, uint8_t poll_data, uint8_t mid);
-static uint8_t qla2x00_program_flash_address(scsi_qla_host_t *ha,
-		uint32_t addr, uint8_t data, uint8_t mid);
-static uint8_t qla2x00_erase_flash_sector(scsi_qla_host_t *ha,
-		uint32_t addr, uint32_t sec_mask, uint8_t mid);
-
-uint8_t qla2x00_get_flash_manufacturer(scsi_qla_host_t *ha);
-uint16_t qla2x00_get_flash_version(scsi_qla_host_t *);
-uint16_t qla2x00_get_flash_image(scsi_qla_host_t *ha, uint8_t *image);
-uint16_t qla2x00_set_flash_image(scsi_qla_host_t *ha, uint8_t *image);
-
 
 /*
  * NVRAM support routines
@@ -279,435 +265,3 @@
 	RD_REG_WORD(&reg->nvram);		/* PCI Posting. */
 }
 
-/*
- * Flash support routines
- */
-
-/**
- * qla2x00_flash_enable() - Setup flash for reading and writing.
- * @ha: HA context
- */
-void
-qla2x00_flash_enable(scsi_qla_host_t *ha)
-{
-	uint16_t	data;
-	device_reg_t	*reg = ha->iobase;
-
-	data = RD_REG_WORD(&reg->ctrl_status);
-	data |= CSR_FLASH_ENABLE;
-	WRT_REG_WORD(&reg->ctrl_status, data);
-	RD_REG_WORD(&reg->ctrl_status);		/* PCI Posting. */
-}
-
-/**
- * qla2x00_flash_disable() - Disable flash and allow RISC to run.
- * @ha: HA context
- */
-void
-qla2x00_flash_disable(scsi_qla_host_t *ha)
-{
-	uint16_t	data;
-	device_reg_t	*reg = ha->iobase;
-
-	data = RD_REG_WORD(&reg->ctrl_status);
-	data &= ~(CSR_FLASH_ENABLE);
-	WRT_REG_WORD(&reg->ctrl_status, data);
-	RD_REG_WORD(&reg->ctrl_status);		/* PCI Posting. */
-}
-
-/**
- * qla2x00_read_flash_byte() - Reads a byte from flash
- * @ha: HA context
- * @addr: Address in flash to read
- *
- * A word is read from the chip, but, only the lower byte is valid.
- *
- * Returns the byte read from flash @addr.
- */
-uint8_t
-qla2x00_read_flash_byte(scsi_qla_host_t *ha, uint32_t addr)
-{
-	uint16_t	data;
-	uint16_t	bank_select;
-	device_reg_t	*reg = ha->iobase;
-
-	/* Setup bit 16 of flash address. */
-	bank_select = RD_REG_WORD(&reg->ctrl_status);
-	if ((addr & BIT_16) && ((bank_select & CSR_FLASH_64K_BANK) == 0)) {
-		bank_select |= CSR_FLASH_64K_BANK;
-		WRT_REG_WORD(&reg->ctrl_status, bank_select);
-		RD_REG_WORD(&reg->ctrl_status);	/* PCI Posting. */
-	} else if (((addr & BIT_16) == 0) &&
-	    (bank_select & CSR_FLASH_64K_BANK)) {
-		bank_select &= ~(CSR_FLASH_64K_BANK);
-		WRT_REG_WORD(&reg->ctrl_status, bank_select);
-		RD_REG_WORD(&reg->ctrl_status);	/* PCI Posting. */
-	}
-
-	/* The ISP2312 v2 chip cannot access the FLASH registers via MMIO. */
-	if (IS_QLA2312(ha) && ha->product_id[3] == 0x2 && ha->pio_address) {
-		uint16_t data2;
-
-		reg = (device_reg_t *)ha->pio_address;
-		outw((uint16_t)addr, (unsigned long)(&reg->flash_address));
-		do {
-			data = inw((unsigned long)(&reg->flash_data));
-			barrier();
-			cpu_relax();
-			data2 = inw((unsigned long)(&reg->flash_data));
-		} while (data != data2);
-	} else {
-		WRT_REG_WORD(&reg->flash_address, (uint16_t)addr);
-		data = qla2x00_debounce_register(&reg->flash_data);
-	}
-
-	return ((uint8_t)data);
-}
-
-/**
- * qla2x00_write_flash_byte() - Write a byte to flash
- * @ha: HA context
- * @addr: Address in flash to write
- * @data: Data to write
- */
-static void
-qla2x00_write_flash_byte(scsi_qla_host_t *ha, uint32_t addr, uint8_t data)
-{
-	uint16_t	bank_select;
-	device_reg_t	*reg = ha->iobase;
-
-	/* Setup bit 16 of flash address. */
-	bank_select = RD_REG_WORD(&reg->ctrl_status);
-	if ((addr & BIT_16) && ((bank_select & CSR_FLASH_64K_BANK) == 0)) {
-		bank_select |= CSR_FLASH_64K_BANK;
-		WRT_REG_WORD(&reg->ctrl_status, bank_select);
-		RD_REG_WORD(&reg->ctrl_status);	/* PCI Posting. */
-	} else if (((addr & BIT_16) == 0) &&
-	    (bank_select & CSR_FLASH_64K_BANK)) {
-		bank_select &= ~(CSR_FLASH_64K_BANK);
-		WRT_REG_WORD(&reg->ctrl_status, bank_select);
-		RD_REG_WORD(&reg->ctrl_status);	/* PCI Posting. */
-	}
-
-	/* The ISP2312 v2 chip cannot access the FLASH registers via MMIO. */
-	if (IS_QLA2312(ha) && ha->product_id[3] == 0x2 && ha->pio_address) {
-		reg = (device_reg_t *)ha->pio_address;
-		outw((uint16_t)addr, (unsigned long)(&reg->flash_address));
-		outw((uint16_t)data, (unsigned long)(&reg->flash_data));
-	} else {
-		WRT_REG_WORD(&reg->flash_address, (uint16_t)addr);
-		RD_REG_WORD(&reg->ctrl_status);		/* PCI Posting. */
-		WRT_REG_WORD(&reg->flash_data, (uint16_t)data);
-		RD_REG_WORD(&reg->ctrl_status);		/* PCI Posting. */
-	}
-}
-
-/**
- * qla2x00_poll_flash() - Polls flash for completion.
- * @ha: HA context
- * @addr: Address in flash to poll
- * @poll_data: Data to be polled
- * @mid: Flash manufacturer ID
- *
- * This function polls the device until bit 7 of what is read matches data
- * bit 7 or until data bit 5 becomes a 1.  If that hapens, the flash ROM timed
- * out (a fatal error).  The flash book recommeds reading bit 7 again after
- * reading bit 5 as a 1.
- *
- * Returns 0 on success, else non-zero.
- */
-static uint8_t
-qla2x00_poll_flash(scsi_qla_host_t *ha,
-    uint32_t addr, uint8_t poll_data, uint8_t mid)
-{
-	uint8_t		status;
-	uint8_t		flash_data;
-	uint32_t	cnt;
-	int		failed_pass;
-
-	status = 1;
-	failed_pass = 1;
-
-	/* Wait for 30 seconds for command to finish. */
-	poll_data &= BIT_7;
-	for (cnt = 3000000; cnt; cnt--) {
-		flash_data = qla2x00_read_flash_byte(ha, addr);
-		if ((flash_data & BIT_7) == poll_data) {
-			status = 0;
-			break;
-		}
-
-		if (mid != 0x40 && mid != 0xda) {
-			if (flash_data & BIT_5)
-				failed_pass--;
-			if (failed_pass < 0)
-				break;
-		}
-		udelay(10);
-		barrier();
-	}
-	return (status);
-}
-
-/**
- * qla2x00_program_flash_address() - Programs a flash address
- * @ha: HA context
- * @addr: Address in flash to program
- * @data: Data to be written in flash
- * @mid: Flash manufacturer ID
- *
- * Returns 0 on success, else non-zero.
- */
-static uint8_t
-qla2x00_program_flash_address(scsi_qla_host_t *ha,
-    uint32_t addr, uint8_t data, uint8_t mid)
-{
-	/* Write Program Command Sequence */
-	qla2x00_write_flash_byte(ha, 0x5555, 0xaa);
-	qla2x00_write_flash_byte(ha, 0x2aaa, 0x55);
-	qla2x00_write_flash_byte(ha, 0x5555, 0xa0);
-	qla2x00_write_flash_byte(ha, addr, data);
-
-	/* Wait for write to complete. */
-	return (qla2x00_poll_flash(ha, addr, data, mid));
-}
-
-/**
- * qla2x00_erase_flash_sector() - Erase a flash sector.
- * @ha: HA context
- * @addr: Flash sector to erase
- * @sec_mask: Sector address mask
- * @mid: Flash manufacturer ID
- *
- * Returns 0 on success, else non-zero.
- */
-static uint8_t
-qla2x00_erase_flash_sector(scsi_qla_host_t *ha,
-    uint32_t addr, uint32_t sec_mask, uint8_t mid)
-{
-	/* Individual Sector Erase Command Sequence */
-	qla2x00_write_flash_byte(ha, 0x5555, 0xaa);
-	qla2x00_write_flash_byte(ha, 0x2aaa, 0x55);
-	qla2x00_write_flash_byte(ha, 0x5555, 0x80);
-	qla2x00_write_flash_byte(ha, 0x5555, 0xaa);
-	qla2x00_write_flash_byte(ha, 0x2aaa, 0x55);
-
-	if (mid == 0xda)
-		qla2x00_write_flash_byte(ha, addr & sec_mask, 0x10);
-	else
-		qla2x00_write_flash_byte(ha, addr & sec_mask, 0x30);
-
-	udelay(150);
-
-	/* Wait for erase to complete. */
-	return (qla2x00_poll_flash(ha, addr, 0x80, mid));
-}
-
-/**
- * qla2x00_get_flash_manufacturer() - Read manufacturer ID from flash chip.
- * @ha: HA context
- *
- * Returns the manufacturer's ID read from the flash chip.
- */
-uint8_t
-qla2x00_get_flash_manufacturer(scsi_qla_host_t *ha)
-{
-	uint8_t	manuf_id;
-
-	qla2x00_write_flash_byte(ha, 0x5555, 0xaa);
-	qla2x00_write_flash_byte(ha, 0x2aaa, 0x55);
-	qla2x00_write_flash_byte(ha, 0x5555, 0x90);
-	manuf_id = qla2x00_read_flash_byte(ha, 0x0001);
-
-	return (manuf_id);
-}
-
-/**
- * qla2x00_get_flash_version() - Read version information from flash.
- * @ha: HA context
- *
- * Returns QLA_SUCCESS on successful retrieval of flash version.
- */
-uint16_t
-qla2x00_get_flash_version(scsi_qla_host_t *ha)
-{
-	uint16_t	ret = QLA_SUCCESS;
-	uint32_t	loop_cnt = 1;  /* this is for error exit only */
-	uint32_t	pcir_adr;
-
-	/* The ISP2312 v2 chip cannot access the FLASH registers via MMIO. */
-	if (IS_QLA2312(ha) && ha->product_id[3] == 0x2 && !ha->pio_address)
-		ret = QLA_FUNCTION_FAILED;
-
-	qla2x00_flash_enable(ha);
-	do {	/* Loop once to provide quick error exit */
-		/* Match signature */
-		if (!(qla2x00_read_flash_byte(ha, 0) == 0x55 &&
-		    qla2x00_read_flash_byte(ha, 1) == 0xaa)) {
-			/* No signature */
-			DEBUG2(printk("scsi(%ld): No matching FLASH "
-			    "signature.\n", ha->host_no));
-			ret = QLA_FUNCTION_FAILED;
-			break;
-		}
-
-		pcir_adr = qla2x00_read_flash_byte(ha, 0x18) & 0xff;
-
-		/* validate signature of PCI data structure */
-		if ((qla2x00_read_flash_byte(ha, pcir_adr)) == 'P' &&
-		    (qla2x00_read_flash_byte(ha, pcir_adr + 1)) == 'C' &&
-		    (qla2x00_read_flash_byte(ha, pcir_adr + 2)) == 'I' &&
-		    (qla2x00_read_flash_byte(ha, pcir_adr + 3)) == 'R') {
-
-			/* Read version */
-			ha->optrom_minor =
-			    qla2x00_read_flash_byte(ha, pcir_adr + 0x12);
-			ha->optrom_major =
-			    qla2x00_read_flash_byte(ha, pcir_adr + 0x13);
-			DEBUG3(printk("%s(): got %d.%d.\n",
-			    __func__, ha->optrom_major, ha->optrom_minor));
-		} else {
-			/* error */
-			DEBUG2(printk("%s(): PCI data struct not found. "
-			    "pcir_adr=%x.\n",
-			    __func__, pcir_adr));
-			ret = QLA_FUNCTION_FAILED;
-			break;
-		}
-
-	} while (--loop_cnt);
-	qla2x00_flash_disable(ha);
-
-	return (ret);
-}
-
-/**
- * qla2x00_get_flash_image() - Read image from flash chip.
- * @ha: HA context
- * @image: Buffer to receive flash image
- *
- * Returns 0 on success, else non-zero.
- */
-uint16_t
-qla2x00_get_flash_image(scsi_qla_host_t *ha, uint8_t *image)
-{
-	uint32_t	addr;
-	uint32_t	midpoint;
-	uint8_t		*data;
-	device_reg_t	*reg = ha->iobase;
-
-	midpoint = FLASH_IMAGE_SIZE / 2;
-
-	qla2x00_flash_enable(ha);
-	WRT_REG_WORD(&reg->nvram, 0);
-	RD_REG_WORD(&reg->nvram);		/* PCI Posting. */
-	for (addr = 0, data = image; addr < FLASH_IMAGE_SIZE; addr++, data++) {
-		if (addr == midpoint)
-			WRT_REG_WORD(&reg->nvram, NVR_SELECT);
-
-		*data = qla2x00_read_flash_byte(ha, addr);
-	}
-	qla2x00_flash_disable(ha);
-
-	return (0);
-}
-
-/**
- * qla2x00_set_flash_image() - Write image to flash chip.
- * @ha: HA context
- * @image: Source image to write to flash
- *
- * Returns 0 on success, else non-zero.
- */
-uint16_t
-qla2x00_set_flash_image(scsi_qla_host_t *ha, uint8_t *image)
-{
-	uint16_t	status;
-	uint32_t	addr;
-	uint32_t	midpoint;
-	uint32_t	sec_mask;
-	uint32_t	rest_addr;
-	uint8_t		mid;
-	uint8_t		sec_number;
-	uint8_t		data;
-	device_reg_t	*reg = ha->iobase;
-
-	status = 0;
-	sec_number = 0;
-
-	/* Reset ISP chip. */
-	WRT_REG_WORD(&reg->ctrl_status, CSR_ISP_SOFT_RESET);
-	RD_REG_WORD(&reg->ctrl_status);		/* PCI Posting. */
-
-	qla2x00_flash_enable(ha);
-	do {	/* Loop once to provide quick error exit */
-		/* Structure of flash memory based on manufacturer */
-		mid = qla2x00_get_flash_manufacturer(ha);
-		if (mid == 0x6d) {
-			// Am29LV001 part
-			rest_addr = 0x1fff;
-			sec_mask = 0x1e000;
-		} else if (mid == 0x40) {
-			// Mostel v29c51001 part
-			rest_addr = 0x1ff;
-			sec_mask = 0x1fe00;
-		} else if (mid == 0xbf) {
-			// SST39sf10 part
-			rest_addr = 0xfff;
-			sec_mask = 0x1f000;
-		} else if (mid == 0xda) {
-			// Winbond W29EE011 part
-			rest_addr = 0x7f;
-			sec_mask = 0x1ff80;
-			addr = 0;
-			if (qla2x00_erase_flash_sector(ha, addr, sec_mask,
-			    mid)) {
-				status = 1;
-				break;
-			}
-		} else {
-			// Am29F010 part
-			rest_addr = 0x3fff;
-			sec_mask = 0x1c000;
-		}
-
-		midpoint = FLASH_IMAGE_SIZE / 2;
-		for (addr = 0; addr < FLASH_IMAGE_SIZE; addr++) {
-			data = *image++;
-			/* Are we at the beginning of a sector? */
-			if (!(addr & rest_addr)) {
-				if (addr == midpoint)
-					WRT_REG_WORD(&reg->nvram, NVR_SELECT);
-
-				/* Then erase it */
-				if (qla2x00_erase_flash_sector(ha, addr,
-				    sec_mask, mid)) {
-					status = 1;
-					break;
-				}
-
-				sec_number++;
-			}
-			if (mid == 0x6d) {
-				if (sec_number == 1 &&
-				    (addr == (rest_addr - 1))) {
-					rest_addr = 0x0fff;
-					sec_mask   = 0x1f000;
-				} else if (sec_number == 3 && (addr & 0x7ffe)) {
-					rest_addr = 0x3fff;
-					sec_mask   = 0x1c000;
-				}
-			}
-
-			if (qla2x00_program_flash_address(ha, addr, data,
-			    mid)) {
-				status = 1;
-				break;
-			}
-		}
-	} while (0);
-
-	qla2x00_flash_disable(ha);
-
-	return (status);
-}
diff -Nru a/drivers/scsi/qla2xxx/qla_version.h b/drivers/scsi/qla2xxx/qla_version.h
--- a/drivers/scsi/qla2xxx/qla_version.h	Sun May 16 01:18:35 2004
+++ b/drivers/scsi/qla2xxx/qla_version.h	Sun May 16 01:18:35 2004
@@ -19,9 +19,9 @@
 /*
  * Driver version 
  */
-#define QLA2XXX_VERSION      "8.00.00b11-k"
+#define QLA2XXX_VERSION      "8.00.00b12-k"
 
 #define QLA_DRIVER_MAJOR_VER	8
 #define QLA_DRIVER_MINOR_VER	0
 #define QLA_DRIVER_PATCH_VER	0
-#define QLA_DRIVER_BETA_VER	11
+#define QLA_DRIVER_BETA_VER	12
diff -Nru a/drivers/scsi/qlogicfas.c b/drivers/scsi/qlogicfas.c
--- a/drivers/scsi/qlogicfas.c	Sun May 16 01:18:37 2004
+++ b/drivers/scsi/qlogicfas.c	Sun May 16 01:18:37 2004
@@ -1,43 +1,19 @@
-/*----------------------------------------------------------------*/
 /*
-   Qlogic linux driver - work in progress. No Warranty express or implied.
-   Use at your own risk.  Support Tort Reform so you won't have to read all
-   these silly disclaimers.
-
-   Copyright 1994, Tom Zerucha.   
-   tz@execpc.com
-   
-   Additional Code, and much appreciated help by
-   Michael A. Griffith
-   grif@cs.ucr.edu
-
-   Thanks to Eric Youngdale and Dave Hinds for loadable module and PCMCIA
-   help respectively, and for suffering through my foolishness during the
-   debugging process.
-
-   Reference Qlogic FAS408 Technical Manual, 53408-510-00A, May 10, 1994
-   (you can reference it, but it is incomplete and inaccurate in places)
-
-   Version 0.46 1/30/97 - kernel 1.2.0+
-
-   Functions as standalone, loadable, and PCMCIA driver, the latter from
-   Dave Hinds' PCMCIA package.
-   
-   Cleaned up 26/10/2002 by Alan Cox <alan@redhat.com> as part of the 2.5
-   SCSI driver cleanup and audit. This driver still needs work on the
-   following
-   	-	Non terminating hardware waits
-   	-	Some layering violations with its pcmcia stub
-
-   Redistributable under terms of the GNU General Public License
-
-   For the avoidance of doubt the "preferred form" of this code is one which
-   is in an open non patent encumbered format. Where cryptographic key signing
-   forms part of the process of creating an executable the information
-   including keys needed to generate an equivalently functional executable
-   are deemed to be part of the source code.
-
-*/
+ * Qlogic FAS408 ISA card driver
+ *
+ * Copyright 1994, Tom Zerucha.   
+ * tz@execpc.com
+ * 
+ * Redistributable under terms of the GNU General Public License
+ *
+ * For the avoidance of doubt the "preferred form" of this code is one which
+ * is in an open non patent encumbered format. Where cryptographic key signing
+ * forms part of the process of creating an executable the information
+ * including keys needed to generate an equivalently functional executable
+ * are deemed to be part of the source code.
+ *
+ * Check qlogicfas408.c for more credits and info.
+ */
 
 #include <linux/module.h>
 #include <linux/blkdev.h>		/* to get disk capacity */
@@ -57,429 +33,28 @@
 
 #include "scsi.h"
 #include "hosts.h"
-#include "qlogicfas.h"
-
-/*----------------------------------------------------------------*/
-int qlcfg5 = (XTALFREQ << 5);	/* 15625/512 */
-int qlcfg6 = SYNCXFRPD;
-int qlcfg7 = SYNCOFFST;
-int qlcfg8 = (SLOWCABLE << 7) | (QL_ENABLE_PARITY << 4);
-int qlcfg9 = ((XTALFREQ + 4) / 5);
-int qlcfgc = (FASTCLK << 3) | (FASTSCSI << 4);
-
-static char qlogicfas_name[] = "qlogicfas";
-
-int qlogicfas_queuecommand(Scsi_Cmnd * cmd, void (*done) (Scsi_Cmnd *));
-
-/*----------------------------------------------------------------*/
-
-/*----------------------------------------------------------------*/
-/* local functions */
-/*----------------------------------------------------------------*/
-
-/* error recovery - reset everything */
-
-static void ql_zap(qlogicfas_priv_t priv)
-{
-	int x;
-	int qbase = priv->qbase;
-
-	x = inb(qbase + 0xd);
-	REG0;
-	outb(3, qbase + 3);	/* reset SCSI */
-	outb(2, qbase + 3);	/* reset chip */
-	if (x & 0x80)
-		REG1;
-}
-
-/*
- *	Do a pseudo-dma tranfer
- */
- 
-static int ql_pdma(qlogicfas_priv_t priv, int phase, char *request, int reqlen)
-{
-	int j;
-	int qbase = priv->qbase;
-	j = 0;
-	if (phase & 1) {	/* in */
-#if QL_TURBO_PDMA
-		rtrc(4)
-		/* empty fifo in large chunks */
-		if (reqlen >= 128 && (inb(qbase + 8) & 2)) {	/* full */
-			insl(qbase + 4, request, 32);
-			reqlen -= 128;
-			request += 128;
-		}
-		while (reqlen >= 84 && !(j & 0xc0))	/* 2/3 */
-			if ((j = inb(qbase + 8)) & 4) 
-			{
-				insl(qbase + 4, request, 21);
-				reqlen -= 84;
-				request += 84;
-			}
-		if (reqlen >= 44 && (inb(qbase + 8) & 8)) {	/* 1/3 */
-			insl(qbase + 4, request, 11);
-			reqlen -= 44;
-			request += 44;
-		}
-#endif
-		/* until both empty and int (or until reclen is 0) */
-		rtrc(7)
-		j = 0;
-		while (reqlen && !((j & 0x10) && (j & 0xc0))) 
-		{
-			/* while bytes to receive and not empty */
-			j &= 0xc0;
-			while (reqlen && !((j = inb(qbase + 8)) & 0x10)) 
-			{
-				*request++ = inb(qbase + 4);
-				reqlen--;
-			}
-			if (j & 0x10)
-				j = inb(qbase + 8);
-
-		}
-	} else {		/* out */
-#if QL_TURBO_PDMA
-		rtrc(4)
-		    if (reqlen >= 128 && inb(qbase + 8) & 0x10) {	/* empty */
-			outsl(qbase + 4, request, 32);
-			reqlen -= 128;
-			request += 128;
-		}
-		while (reqlen >= 84 && !(j & 0xc0))	/* 1/3 */
-			if (!((j = inb(qbase + 8)) & 8)) {
-				outsl(qbase + 4, request, 21);
-				reqlen -= 84;
-				request += 84;
-			}
-		if (reqlen >= 40 && !(inb(qbase + 8) & 4)) {	/* 2/3 */
-			outsl(qbase + 4, request, 10);
-			reqlen -= 40;
-			request += 40;
-		}
-#endif
-		/* until full and int (or until reclen is 0) */
-		rtrc(7)
-		    j = 0;
-		while (reqlen && !((j & 2) && (j & 0xc0))) {
-			/* while bytes to send and not full */
-			while (reqlen && !((j = inb(qbase + 8)) & 2)) 
-			{
-				outb(*request++, qbase + 4);
-				reqlen--;
-			}
-			if (j & 2)
-				j = inb(qbase + 8);
-		}
-	}
-	/* maybe return reqlen */
-	return inb(qbase + 8) & 0xc0;
-}
-
-/*
- *	Wait for interrupt flag (polled - not real hardware interrupt) 
- */
-
-static int ql_wai(qlogicfas_priv_t priv)
-{
-	int k;
-	int qbase = priv->qbase;
-	unsigned long i;
-
-	k = 0;
-	i = jiffies + WATCHDOG;
-	while (time_before(jiffies, i) && !priv->qabort &&
-					!((k = inb(qbase + 4)) & 0xe0)) {
-		barrier();
-		cpu_relax();
-	}
-	if (time_after_eq(jiffies, i))
-		return (DID_TIME_OUT);
-	if (priv->qabort)
-		return (priv->qabort == 1 ? DID_ABORT : DID_RESET);
-	if (k & 0x60)
-		ql_zap(priv);
-	if (k & 0x20)
-		return (DID_PARITY);
-	if (k & 0x40)
-		return (DID_ERROR);
-	return 0;
-}
-
-/*
- *	Initiate scsi command - queueing handler 
- *	caller must hold host lock
- */
-
-static void ql_icmd(Scsi_Cmnd * cmd)
-{
-	qlogicfas_priv_t priv = (qlogicfas_priv_t)&(cmd->device->host->hostdata[0]);
-	int 	qbase = priv->qbase;
-	unsigned int i;
-
-	priv->qabort = 0;
-
-	REG0;
-	/* clearing of interrupts and the fifo is needed */
-
-	inb(qbase + 5);		/* clear interrupts */
-	if (inb(qbase + 5))	/* if still interrupting */
-		outb(2, qbase + 3);	/* reset chip */
-	else if (inb(qbase + 7) & 0x1f)
-		outb(1, qbase + 3);	/* clear fifo */
-	while (inb(qbase + 5));	/* clear ints */
-	REG1;
-	outb(1, qbase + 8);	/* set for PIO pseudo DMA */
-	outb(0, qbase + 0xb);	/* disable ints */
-	inb(qbase + 8);		/* clear int bits */
-	REG0;
-	outb(0x40, qbase + 0xb);	/* enable features */
-
-	/* configurables */
-	outb(qlcfgc, qbase + 0xc);
-	/* config: no reset interrupt, (initiator) bus id */
-	outb(0x40 | qlcfg8 | priv->qinitid, qbase + 8);
-	outb(qlcfg7, qbase + 7);
-	outb(qlcfg6, qbase + 6);
-	 /**/ outb(qlcfg5, qbase + 5);	/* select timer */
-	outb(qlcfg9 & 7, qbase + 9);	/* prescaler */
-/*	outb(0x99, qbase + 5);	*/
-	outb(cmd->device->id, qbase + 4);
-
-	for (i = 0; i < cmd->cmd_len; i++)
-		outb(cmd->cmnd[i], qbase + 2);
-
-	priv->qlcmd = cmd;
-	outb(0x41, qbase + 3);	/* select and send command */
-}
-
-/*
- *	Process scsi command - usually after interrupt 
- */
-
-static unsigned int ql_pcmd(Scsi_Cmnd * cmd)
-{
-	unsigned int i, j;
-	unsigned long k;
-	unsigned int result;	/* ultimate return result */
-	unsigned int status;	/* scsi returned status */
-	unsigned int message;	/* scsi returned message */
-	unsigned int phase;	/* recorded scsi phase */
-	unsigned int reqlen;	/* total length of transfer */
-	struct scatterlist *sglist;	/* scatter-gather list pointer */
-	unsigned int sgcount;	/* sg counter */
-	char *buf;
-	qlogicfas_priv_t priv = (qlogicfas_priv_t)&(cmd->device->host->hostdata[0]);
-	int qbase = priv->qbase;
-
-	rtrc(1)
-	j = inb(qbase + 6);
-	i = inb(qbase + 5);
-	if (i == 0x20) {
-		return (DID_NO_CONNECT << 16);
-	}
-	i |= inb(qbase + 5);	/* the 0x10 bit can be set after the 0x08 */
-	if (i != 0x18) {
-		printk(KERN_ERR "Ql:Bad Interrupt status:%02x\n", i);
-		ql_zap(priv);
-		return (DID_BAD_INTR << 16);
-	}
-	j &= 7;			/* j = inb( qbase + 7 ) >> 5; */
-
-	/* correct status is supposed to be step 4 */
-	/* it sometimes returns step 3 but with 0 bytes left to send */
-	/* We can try stuffing the FIFO with the max each time, but we will get a
-	   sequence of 3 if any bytes are left (but we do flush the FIFO anyway */
-
-	if (j != 3 && j != 4) {
-		printk(KERN_ERR "Ql:Bad sequence for command %d, int %02X, cmdleft = %d\n",
-		     j, i, inb(qbase + 7) & 0x1f);
-		ql_zap(priv);
-		return (DID_ERROR << 16);
-	}
-	result = DID_OK;
-	if (inb(qbase + 7) & 0x1f)	/* if some bytes in fifo */
-		outb(1, qbase + 3);	/* clear fifo */
-	/* note that request_bufflen is the total xfer size when sg is used */
-	reqlen = cmd->request_bufflen;
-	/* note that it won't work if transfers > 16M are requested */
-	if (reqlen && !((phase = inb(qbase + 4)) & 6)) {	/* data phase */
-		rtrc(2)
-		outb(reqlen, qbase);	/* low-mid xfer cnt */
-		outb(reqlen >> 8, qbase + 1);	/* low-mid xfer cnt */
-		outb(reqlen >> 16, qbase + 0xe);	/* high xfer cnt */
-		outb(0x90, qbase + 3);	/* command do xfer */
-		/* PIO pseudo DMA to buffer or sglist */
-		REG1;
-		if (!cmd->use_sg)
-			ql_pdma(priv, phase, cmd->request_buffer,
-				cmd->request_bufflen);
-		else {
-			sgcount = cmd->use_sg;
-			sglist = cmd->request_buffer;
-			while (sgcount--) {
-				if (priv->qabort) {
-					REG0;
-					return ((priv->qabort == 1 ?
-						DID_ABORT : DID_RESET) << 16);
-				}
-				buf = page_address(sglist->page) + sglist->offset;
-				if (ql_pdma(priv, phase, buf, sglist->length))
-					break;
-				sglist++;
-			}
-		}
-		REG0;
-		rtrc(2)
-		/*
-		 *	Wait for irq (split into second state of irq handler
-		 *	if this can take time) 
-		 */
-		if ((k = ql_wai(priv)))
-			return (k << 16);
-		k = inb(qbase + 5);	/* should be 0x10, bus service */
-	}
-
-	/*
-	 *	Enter Status (and Message In) Phase 
-	 */
-	 
-	k = jiffies + WATCHDOG;
-
-	while (time_before(jiffies, k) && !priv->qabort &&
-						!(inb(qbase + 4) & 6))
-		cpu_relax();	/* wait for status phase */
-
-	if (time_after_eq(jiffies, k)) {
-		ql_zap(priv);
-		return (DID_TIME_OUT << 16);
-	}
-
-	/* FIXME: timeout ?? */
-	while (inb(qbase + 5))
-		cpu_relax();	/* clear pending ints */
-
-	if (priv->qabort)
-		return ((priv->qabort == 1 ? DID_ABORT : DID_RESET) << 16);
-
-	outb(0x11, qbase + 3);	/* get status and message */
-	if ((k = ql_wai(priv)))
-		return (k << 16);
-	i = inb(qbase + 5);	/* get chip irq stat */
-	j = inb(qbase + 7) & 0x1f;	/* and bytes rec'd */
-	status = inb(qbase + 2);
-	message = inb(qbase + 2);
-
-	/*
-	 *	Should get function complete int if Status and message, else 
-	 *	bus serv if only status 
-	 */
-	if (!((i == 8 && j == 2) || (i == 0x10 && j == 1))) {
-		printk(KERN_ERR "Ql:Error during status phase, int=%02X, %d bytes recd\n", i, j);
-		result = DID_ERROR;
-	}
-	outb(0x12, qbase + 3);	/* done, disconnect */
-	rtrc(1)
-	if ((k = ql_wai(priv)))
-		return (k << 16);
-
-	/*
-	 *	Should get bus service interrupt and disconnect interrupt 
-	 */
-	 
-	i = inb(qbase + 5);	/* should be bus service */
-	while (!priv->qabort && ((i & 0x20) != 0x20)) {
-		barrier();
-		cpu_relax();
-		i |= inb(qbase + 5);
-	}
-	rtrc(0)
-
-	if (priv->qabort)
-		return ((priv->qabort == 1 ? DID_ABORT : DID_RESET) << 16);
-		
-	return (result << 16) | (message << 8) | (status & STATUS_MASK);
-}
+#include "qlogicfas408.h"
 
-/*
- *	Interrupt handler 
+/* Set the following to 2 to use normal interrupt (active high/totempole-
+ * tristate), otherwise use 0 (REQUIRED FOR PCMCIA) for active low, open
+ * drain
  */
+#define INT_TYPE	2
 
-static void ql_ihandl(int irq, void *dev_id, struct pt_regs *regs)
-{
-	Scsi_Cmnd *icmd;
-	struct Scsi_Host *host = (struct Scsi_Host *)dev_id;
-	qlogicfas_priv_t priv = (qlogicfas_priv_t)&(host->hostdata[0]);
-	int qbase = priv->qbase;
-	REG0;
-
-	if (!(inb(qbase + 4) & 0x80))	/* false alarm? */
-		return;
-
-	if (priv->qlcmd == NULL) {	/* no command to process? */
-		int i;
-		i = 16;
-		while (i-- && inb(qbase + 5));	/* maybe also ql_zap() */
-		return;
-	}
-	icmd = priv->qlcmd;
-	icmd->result = ql_pcmd(icmd);
-	priv->qlcmd = NULL;
-	/*
-	 *	If result is CHECK CONDITION done calls qcommand to request 
-	 *	sense 
-	 */
-	(icmd->scsi_done) (icmd);
-}
-
-irqreturn_t do_ql_ihandl(int irq, void *dev_id, struct pt_regs *regs)
-{
-	unsigned long flags;
-	struct Scsi_Host *host = dev_id;
-
-	spin_lock_irqsave(host->host_lock, flags);
-	ql_ihandl(irq, dev_id, regs);
-	spin_unlock_irqrestore(host->host_lock, flags);
-	return IRQ_HANDLED;
-}
-
-/*
- *	Queued command
- */
-
-int qlogicfas_queuecommand(Scsi_Cmnd * cmd, void (*done) (Scsi_Cmnd *))
-{
-	qlogicfas_priv_t priv = (qlogicfas_priv_t)&(cmd->device->host->hostdata[0]);
-	if (cmd->device->id == priv->qinitid) {
-		cmd->result = DID_BAD_TARGET << 16;
-		done(cmd);
-		return 0;
-	}
-
-	cmd->scsi_done = done;
-	/* wait for the last command's interrupt to finish */
-	while (priv->qlcmd != NULL) {
-		barrier();
-		cpu_relax();
-	}
-	ql_icmd(cmd);
-	return 0;
-}
+static char qlogicfas_name[] = "qlogicfas";
 
-#ifndef PCMCIA
 /*
  *	Look for qlogic card and init if found 
  */
  
-struct Scsi_Host *__qlogicfas_detect(Scsi_Host_Template *host, int qbase,
+static struct Scsi_Host *__qlogicfas_detect(Scsi_Host_Template *host,
+								int qbase,
 								int qlirq)
 {
-	int i, j;		/* these are only used by IRQ detect */
 	int qltyp;		/* type of chip */
 	int qinitid;
 	struct Scsi_Host *hreg;	/* registered host structure */
-	qlogicfas_priv_t priv;
+	struct qlogicfas408_priv *priv;
 
 	/*	Qlogic Cards only exist at 0x230 or 0x330 (the chip itself
 	 *	decodes the address - I check 230 first since MIDI cards are
@@ -490,70 +65,36 @@
 	 *	the second card, but I haven't tested this.
 	 */
 
-	if (!qbase) {
-		for (qbase = 0x230; qbase < 0x430; qbase += 0x100) {
-			if (!request_region(qbase, 0x10, qlogicfas_name))
-				continue;
-			REG1;
-			if (((inb(qbase + 0xe) ^ inb(qbase + 0xe)) == 7)
-			    && ((inb(qbase + 0xe) ^ inb(qbase + 0xe)) == 7))
-				break;
-			release_region(qbase, 0x10);
-		}
-		if (qbase == 0x430)
-			return NULL;
-	} else
-		printk(KERN_INFO "Ql: Using preset base address of %03x\n", qbase);
+	if (!qbase || qlirq == -1)
+		goto err;
+
+	if (!request_region(qbase, 0x10, qlogicfas_name)) {
+		printk(KERN_INFO "%s: address %#x is busy\n", qlogicfas_name,
+							      qbase);
+		goto err;
+	}
+
+	if (!qlogicfas408_detect(qbase, INT_TYPE)) {
+		printk(KERN_WARNING "%s: probe failed for %#x\n",
+								qlogicfas_name,
+								qbase);
+		goto err_release_mem;
+	}
 
-	qltyp = inb(qbase + 0xe) & 0xf8;
+	printk(KERN_INFO "%s: Using preset base address of %03x,"
+			 " IRQ %d\n", qlogicfas_name, qbase, qlirq);
+
+	qltyp = qlogicfas408_get_chip_type(qbase, INT_TYPE);
 	qinitid = host->this_id;
 	if (qinitid < 0)
 		qinitid = 7;	/* if no ID, use 7 */
-	outb(1, qbase + 8);	/* set for PIO pseudo DMA */
-	REG0;
-	outb(0x40 | qlcfg8 | qinitid, qbase + 8);	/* (ini) bus id, disable scsi rst */
-	outb(qlcfg5, qbase + 5);	/* select timer */
-	outb(qlcfg9, qbase + 9);	/* prescaler */
-
-#if QL_RESET_AT_START
-	outb(3, qbase + 3);
-	REG1;
-	/* FIXME: timeout */
-	while (inb(qbase + 0xf) & 4)
-		cpu_relax();
-	REG0;
-#endif
-
-	/*
-	 *	IRQ probe - toggle pin and check request pending 
-	 */
 
-	if (qlirq == -1) {
-		i = 0xffff;
-		j = 3;
-		outb(0x90, qbase + 3);	/* illegal command - cause interrupt */
-		REG1;
-		outb(10, 0x20);	/* access pending interrupt map */
-		outb(10, 0xa0);
-		while (j--) {
-			outb(0xb0 | QL_INT_ACTIVE_HIGH, qbase + 0xd);	/* int pin off */
-			i &= ~(inb(0x20) | (inb(0xa0) << 8));		/* find IRQ off */
-			outb(0xb4 | QL_INT_ACTIVE_HIGH, qbase + 0xd);	/* int pin on */
-			i &= inb(0x20) | (inb(0xa0) << 8);		/* find IRQ on */
-		}
-		REG0;
-		while (inb(qbase + 5));	/* purge int */
-		j = -1;
-		while (i)	/* find on bit */
-			i >>= 1, j++;	/* should check for exactly 1 on */
-		qlirq = j;
-	} else
-		printk(KERN_INFO "Ql: Using preset IRQ %d\n", qlirq);
+	qlogicfas408_setup(qbase, qinitid, INT_TYPE);
 
-	hreg = scsi_host_alloc(host, sizeof(struct qlogicfas_priv));
+	hreg = scsi_host_alloc(host, sizeof(struct qlogicfas408_priv));
 	if (!hreg)
 		goto err_release_mem;
-	priv = (qlogicfas_priv_t)&(hreg->hostdata[0]);
+	priv = get_priv_by_host(hreg);
 	hreg->io_port = qbase;
 	hreg->n_io_port = 16;
 	hreg->dma_channel = -1;
@@ -563,13 +104,14 @@
 	priv->qlirq = qlirq;
 	priv->qinitid = qinitid;
 	priv->shost = hreg;
+	priv->int_type = INT_TYPE;
 
 	sprintf(priv->qinfo,
 		"Qlogicfas Driver version 0.46, chip %02X at %03X, IRQ %d, TPdma:%d",
 		qltyp, qbase, qlirq, QL_TURBO_PDMA);
 	host->name = qlogicfas_name;
 
-	if (request_irq(qlirq, do_ql_ihandl, 0, qlogicfas_name, hreg))
+	if (request_irq(qlirq, qlogicfas408_ihandl, 0, qlogicfas_name, hreg))
 		goto free_scsi_host;
 
 	if (scsi_add_host(hreg, NULL))
@@ -587,11 +129,12 @@
 
 err_release_mem:
 	release_region(qbase, 0x10);
+err:
 	return NULL;
 }
 
 #define MAX_QLOGICFAS	8
-static qlogicfas_priv_t cards;
+static struct qlogicfas408_priv *cards;
 static int iobase[MAX_QLOGICFAS];
 static int irq[MAX_QLOGICFAS] = { [0 ... MAX_QLOGICFAS-1] = -1 };
 MODULE_PARM(iobase, "1-" __MODULE_STRING(MAX_QLOGICFAS) "i");
@@ -599,23 +142,21 @@
 MODULE_PARM_DESC(iobase, "I/O address");
 MODULE_PARM_DESC(irq, "IRQ");
 
-int __devinit qlogicfas_detect(Scsi_Host_Template *sht)
+static int __devinit qlogicfas_detect(Scsi_Host_Template *sht)
 {
-	struct Scsi_Host	*shost;
-	qlogicfas_priv_t	priv;
-	int	i,
-		num = 0;
+	struct Scsi_Host *shost;
+	struct qlogicfas408_priv *priv;
+	int num;
 
-	for (i = 0; i < MAX_QLOGICFAS; i++) {
+	for (num = 0; num < MAX_QLOGICFAS; num++) {
 		shost = __qlogicfas_detect(sht, iobase[num], irq[num]);
 		if (shost == NULL) {
 			/* no more devices */
 			break;
 		}
-		priv = (qlogicfas_priv_t)&(shost->hostdata[0]);
+		priv = get_priv_by_host(shost);
 		priv->next = cards;
 		cards = priv;
-		num++;
 	}
 
 	return num;
@@ -623,13 +164,10 @@
 
 static int qlogicfas_release(struct Scsi_Host *shost)
 {
-	qlogicfas_priv_t priv = (qlogicfas_priv_t)&(shost->hostdata[0]);
-	int qbase = priv->qbase;
+	struct qlogicfas408_priv *priv = get_priv_by_host(shost);
 
 	if (shost->irq) {
-		REG1;
-		outb(0, qbase + 0xb);	/* disable ints */
-	
+		qlogicfas408_disable_ints(priv);	
 		free_irq(shost->irq, shost);
 	}
 	if (shost->dma_channel != 0xff)
@@ -641,100 +179,21 @@
 
 	return 0;
 }
-#endif	/* ifndef PCMCIA */
-
-/* 
- *	Return bios parameters 
- */
-
-int qlogicfas_biosparam(struct scsi_device * disk,
-		        struct block_device *dev,
-			sector_t capacity, int ip[])
-{
-/* This should mimic the DOS Qlogic driver's behavior exactly */
-	ip[0] = 0x40;
-	ip[1] = 0x20;
-	ip[2] = (unsigned long) capacity / (ip[0] * ip[1]);
-	if (ip[2] > 1024) {
-		ip[0] = 0xff;
-		ip[1] = 0x3f;
-		ip[2] = (unsigned long) capacity / (ip[0] * ip[1]);
-#if 0
-		if (ip[2] > 1023)
-			ip[2] = 1023;
-#endif
-	}
-	return 0;
-}
-
-/*
- *	Abort a command in progress
- */
- 
-static int qlogicfas_abort(Scsi_Cmnd * cmd)
-{
-	qlogicfas_priv_t priv = (qlogicfas_priv_t)&(cmd->device->host->hostdata[0]);
-	priv->qabort = 1;
-	ql_zap(priv);
-	return SUCCESS;
-}
-
-/* 
- *	Reset SCSI bus
- *	FIXME: This function is invoked with cmd = NULL directly by
- *	the PCMCIA qlogic_stub code. This wants fixing
- */
-
-int qlogicfas_bus_reset(Scsi_Cmnd * cmd)
-{
-	qlogicfas_priv_t priv = (qlogicfas_priv_t)&(cmd->device->host->hostdata[0]);
-	priv->qabort = 2;
-	ql_zap(priv);
-	return SUCCESS;
-}
-
-/* 
- *	Reset SCSI host controller
- */
-
-static int qlogicfas_host_reset(Scsi_Cmnd * cmd)
-{
-	return FAILED;
-}
-
-/* 
- *	Reset SCSI device
- */
-
-static int qlogicfas_device_reset(Scsi_Cmnd * cmd)
-{
-	return FAILED;
-}
-
-/*
- *	Return info string
- */
-
-static const char *qlogicfas_info(struct Scsi_Host *host)
-{
-	qlogicfas_priv_t priv = (qlogicfas_priv_t)&(host->hostdata[0]);
-	return priv->qinfo;
-}
 
 /*
  *	The driver template is also needed for PCMCIA
  */
-Scsi_Host_Template qlogicfas_driver_template = {
+static Scsi_Host_Template qlogicfas_driver_template = {
 	.module			= THIS_MODULE,
 	.name			= qlogicfas_name,
 	.proc_name		= qlogicfas_name,
-	.info			= qlogicfas_info,
-	.queuecommand		= qlogicfas_queuecommand,
-	.eh_abort_handler	= qlogicfas_abort,
-	.eh_bus_reset_handler	= qlogicfas_bus_reset,
-	.eh_device_reset_handler= qlogicfas_device_reset,
-	.eh_host_reset_handler	= qlogicfas_host_reset,
-	.bios_param		= qlogicfas_biosparam,
+	.info			= qlogicfas408_info,
+	.queuecommand		= qlogicfas408_queuecommand,
+	.eh_abort_handler	= qlogicfas408_abort,
+	.eh_bus_reset_handler	= qlogicfas408_bus_reset,
+	.eh_device_reset_handler= qlogicfas408_device_reset,
+	.eh_host_reset_handler	= qlogicfas408_host_reset,
+	.bios_param		= qlogicfas408_biosparam,
 	.can_queue		= 1,
 	.this_id		= -1,
 	.sg_tablesize		= SG_ALL,
@@ -742,11 +201,13 @@
 	.use_clustering		= DISABLE_CLUSTERING,
 };
 
-#ifndef PCMCIA
 static __init int qlogicfas_init(void)
 {
 	if (!qlogicfas_detect(&qlogicfas_driver_template)) {
 		/* no cards found */
+		printk(KERN_INFO "%s: no cards were found, please specify "
+				 "I/O address and IRQ using iobase= and irq= "
+				 "options", qlogicfas_name);
 		return -ENODEV;
 	}
 
@@ -755,16 +216,15 @@
 
 static __exit void qlogicfas_exit(void)
 {
-	qlogicfas_priv_t	priv;
+	struct qlogicfas408_priv *priv;
 
 	for (priv = cards; priv != NULL; priv = priv->next)
 		qlogicfas_release(priv->shost);
 }
 
 MODULE_AUTHOR("Tom Zerucha, Michael Griffith");
-MODULE_DESCRIPTION("Driver for the Qlogic FAS SCSI controllers");
+MODULE_DESCRIPTION("Driver for the Qlogic FAS408 based ISA card");
 MODULE_LICENSE("GPL");
 module_init(qlogicfas_init);
 module_exit(qlogicfas_exit);
-#endif	/* ifndef PCMCIA */
 
diff -Nru a/drivers/scsi/qlogicfas.h b/drivers/scsi/qlogicfas.h
--- a/drivers/scsi/qlogicfas.h	Sun May 16 01:18:34 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,124 +0,0 @@
-/* to be used by qlogicfas and qlogic_cs */
-#ifndef __QLOGICFAS_H
-#define __QLOGICFAS_H
-
-/*----------------------------------------------------------------*/
-/* Configuration */
-
-/* Set the following to 2 to use normal interrupt (active high/totempole-
-   tristate), otherwise use 0 (REQUIRED FOR PCMCIA) for active low, open
-   drain */
-
-#define QL_INT_ACTIVE_HIGH 2
-
-/* Set the following to max out the speed of the PIO PseudoDMA transfers,
-   again, 0 tends to be slower, but more stable.  */
-
-#define QL_TURBO_PDMA 1
-
-/* This should be 1 to enable parity detection */
-
-#define QL_ENABLE_PARITY 1
-
-/* This will reset all devices when the driver is initialized (during bootup).
-   The other linux drivers don't do this, but the DOS drivers do, and after
-   using DOS or some kind of crash or lockup this will bring things back
-   without requiring a cold boot.  It does take some time to recover from a
-   reset, so it is slower, and I have seen timeouts so that devices weren't
-   recognized when this was set. */
-
-#define QL_RESET_AT_START 0
-
-/* crystal frequency in megahertz (for offset 5 and 9)
-   Please set this for your card.  Most Qlogic cards are 40 Mhz.  The
-   Control Concepts ISA (not VLB) is 24 Mhz */
-
-#define XTALFREQ	40
-
-/**********/
-/* DANGER! modify these at your own risk */
-/* SLOWCABLE can usually be reset to zero if you have a clean setup and
-   proper termination.  The rest are for synchronous transfers and other
-   advanced features if your device can transfer faster than 5Mb/sec.
-   If you are really curious, email me for a quick howto until I have
-   something official */
-/**********/
-
-/*****/
-/* config register 1 (offset 8) options */
-/* This needs to be set to 1 if your cabling is long or noisy */
-#define SLOWCABLE 1
-
-/*****/
-/* offset 0xc */
-/* This will set fast (10Mhz) synchronous timing when set to 1
-   For this to have an effect, FASTCLK must also be 1 */
-#define FASTSCSI 0
-
-/* This when set to 1 will set a faster sync transfer rate */
-#define FASTCLK 0	/*(XTALFREQ>25?1:0)*/
-
-/*****/
-/* offset 6 */
-/* This is the sync transfer divisor, XTALFREQ/X will be the maximum
-   achievable data rate (assuming the rest of the system is capable
-   and set properly) */
-#define SYNCXFRPD 5	/*(XTALFREQ/5)*/
-
-/*****/
-/* offset 7 */
-/* This is the count of how many synchronous transfers can take place
-	i.e. how many reqs can occur before an ack is given.
-	The maximum value for this is 15, the upper bits can modify
-	REQ/ACK assertion and deassertion during synchronous transfers
-	If this is 0, the bus will only transfer asynchronously */
-#define SYNCOFFST 0
-/* for the curious, bits 7&6 control the deassertion delay in 1/2 cycles
-	of the 40Mhz clock. If FASTCLK is 1, specifying 01 (1/2) will
-	cause the deassertion to be early by 1/2 clock.  Bits 5&4 control
-	the assertion delay, also in 1/2 clocks (FASTCLK is ignored here). */
-
-/*----------------------------------------------------------------*/
-#ifdef PCMCIA
-#undef QL_INT_ACTIVE_HIGH
-#define QL_INT_ACTIVE_HIGH 0
-#endif
-
-struct qlogicfas_priv;
-typedef struct qlogicfas_priv *qlogicfas_priv_t;
-struct qlogicfas_priv {
-	 int		qbase;		/* Port */
-	 int		qinitid;	/* initiator ID */
-	 int		qabort;		/* Flag to cause an abort */
-	 int		qlirq;		/* IRQ being used */
-	 char		qinfo[80];	/* description */
-	 Scsi_Cmnd 	*qlcmd;		/* current command being processed */
-	 struct Scsi_Host	*shost;	/* pointer back to host */
-	 qlogicfas_priv_t	next;	/* next private struct */
-};
-
-extern int qlcfg5;
-extern int qlcfg6;
-extern int qlcfg7;
-extern int qlcfg8;
-extern int qlcfg9;
-extern int qlcfgc;
-
-/* The qlogic card uses two register maps - These macros select which one */
-#define REG0 ( outb( inb( qbase + 0xd ) & 0x7f , qbase + 0xd ), outb( 4 , qbase + 0xd ))
-#define REG1 ( outb( inb( qbase + 0xd ) | 0x80 , qbase + 0xd ), outb( 0xb4 | QL_INT_ACTIVE_HIGH , qbase + 0xd ))
-
-/* following is watchdog timeout in microseconds */
-#define WATCHDOG 5000000
-
-/*----------------------------------------------------------------*/
-/* the following will set the monitor border color (useful to find
-   where something crashed or gets stuck at and as a simple profiler) */
-
-#if 0
-#define rtrc(i) {inb(0x3da);outb(0x31,0x3c0);outb((i),0x3c0);}
-#else
-#define rtrc(i) {}
-#endif
-#endif	/* __QLOGICFAS_H */
-
diff -Nru a/drivers/scsi/qlogicfas408.c b/drivers/scsi/qlogicfas408.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/drivers/scsi/qlogicfas408.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,637 @@
+/*----------------------------------------------------------------*/
+/*
+   Qlogic linux driver - work in progress. No Warranty express or implied.
+   Use at your own risk.  Support Tort Reform so you won't have to read all
+   these silly disclaimers.
+
+   Copyright 1994, Tom Zerucha.   
+   tz@execpc.com
+   
+   Additional Code, and much appreciated help by
+   Michael A. Griffith
+   grif@cs.ucr.edu
+
+   Thanks to Eric Youngdale and Dave Hinds for loadable module and PCMCIA
+   help respectively, and for suffering through my foolishness during the
+   debugging process.
+
+   Reference Qlogic FAS408 Technical Manual, 53408-510-00A, May 10, 1994
+   (you can reference it, but it is incomplete and inaccurate in places)
+
+   Version 0.46 1/30/97 - kernel 1.2.0+
+
+   Functions as standalone, loadable, and PCMCIA driver, the latter from
+   Dave Hinds' PCMCIA package.
+   
+   Cleaned up 26/10/2002 by Alan Cox <alan@redhat.com> as part of the 2.5
+   SCSI driver cleanup and audit. This driver still needs work on the
+   following
+   	-	Non terminating hardware waits
+   	-	Some layering violations with its pcmcia stub
+
+   Redistributable under terms of the GNU General Public License
+
+   For the avoidance of doubt the "preferred form" of this code is one which
+   is in an open non patent encumbered format. Where cryptographic key signing
+   forms part of the process of creating an executable the information
+   including keys needed to generate an equivalently functional executable
+   are deemed to be part of the source code.
+
+*/
+
+#include <linux/module.h>
+#include <linux/blkdev.h>		/* to get disk capacity */
+#include <linux/kernel.h>
+#include <linux/string.h>
+#include <linux/init.h>
+#include <linux/interrupt.h>
+#include <linux/ioport.h>
+#include <linux/proc_fs.h>
+#include <linux/unistd.h>
+#include <linux/spinlock.h>
+#include <linux/stat.h>
+
+#include <asm/io.h>
+#include <asm/irq.h>
+#include <asm/dma.h>
+
+#include "scsi.h"
+#include "hosts.h"
+#include "qlogicfas408.h"
+
+/*----------------------------------------------------------------*/
+static int qlcfg5 = (XTALFREQ << 5);	/* 15625/512 */
+static int qlcfg6 = SYNCXFRPD;
+static int qlcfg7 = SYNCOFFST;
+static int qlcfg8 = (SLOWCABLE << 7) | (QL_ENABLE_PARITY << 4);
+static int qlcfg9 = ((XTALFREQ + 4) / 5);
+static int qlcfgc = (FASTCLK << 3) | (FASTSCSI << 4);
+
+/*----------------------------------------------------------------*/
+
+/*----------------------------------------------------------------*/
+/* local functions */
+/*----------------------------------------------------------------*/
+
+/* error recovery - reset everything */
+
+static void ql_zap(struct qlogicfas408_priv *priv)
+{
+	int x;
+	int qbase = priv->qbase;
+	int int_type = priv->int_type;
+
+	x = inb(qbase + 0xd);
+	REG0;
+	outb(3, qbase + 3);	/* reset SCSI */
+	outb(2, qbase + 3);	/* reset chip */
+	if (x & 0x80)
+		REG1;
+}
+
+/*
+ *	Do a pseudo-dma tranfer
+ */
+ 
+static int ql_pdma(struct qlogicfas408_priv *priv, int phase, char *request, int reqlen)
+{
+	int j;
+	int qbase = priv->qbase;
+	j = 0;
+	if (phase & 1) {	/* in */
+#if QL_TURBO_PDMA
+		rtrc(4)
+		/* empty fifo in large chunks */
+		if (reqlen >= 128 && (inb(qbase + 8) & 2)) {	/* full */
+			insl(qbase + 4, request, 32);
+			reqlen -= 128;
+			request += 128;
+		}
+		while (reqlen >= 84 && !(j & 0xc0))	/* 2/3 */
+			if ((j = inb(qbase + 8)) & 4) 
+			{
+				insl(qbase + 4, request, 21);
+				reqlen -= 84;
+				request += 84;
+			}
+		if (reqlen >= 44 && (inb(qbase + 8) & 8)) {	/* 1/3 */
+			insl(qbase + 4, request, 11);
+			reqlen -= 44;
+			request += 44;
+		}
+#endif
+		/* until both empty and int (or until reclen is 0) */
+		rtrc(7)
+		j = 0;
+		while (reqlen && !((j & 0x10) && (j & 0xc0))) 
+		{
+			/* while bytes to receive and not empty */
+			j &= 0xc0;
+			while (reqlen && !((j = inb(qbase + 8)) & 0x10)) 
+			{
+				*request++ = inb(qbase + 4);
+				reqlen--;
+			}
+			if (j & 0x10)
+				j = inb(qbase + 8);
+
+		}
+	} else {		/* out */
+#if QL_TURBO_PDMA
+		rtrc(4)
+		    if (reqlen >= 128 && inb(qbase + 8) & 0x10) {	/* empty */
+			outsl(qbase + 4, request, 32);
+			reqlen -= 128;
+			request += 128;
+		}
+		while (reqlen >= 84 && !(j & 0xc0))	/* 1/3 */
+			if (!((j = inb(qbase + 8)) & 8)) {
+				outsl(qbase + 4, request, 21);
+				reqlen -= 84;
+				request += 84;
+			}
+		if (reqlen >= 40 && !(inb(qbase + 8) & 4)) {	/* 2/3 */
+			outsl(qbase + 4, request, 10);
+			reqlen -= 40;
+			request += 40;
+		}
+#endif
+		/* until full and int (or until reclen is 0) */
+		rtrc(7)
+		    j = 0;
+		while (reqlen && !((j & 2) && (j & 0xc0))) {
+			/* while bytes to send and not full */
+			while (reqlen && !((j = inb(qbase + 8)) & 2)) 
+			{
+				outb(*request++, qbase + 4);
+				reqlen--;
+			}
+			if (j & 2)
+				j = inb(qbase + 8);
+		}
+	}
+	/* maybe return reqlen */
+	return inb(qbase + 8) & 0xc0;
+}
+
+/*
+ *	Wait for interrupt flag (polled - not real hardware interrupt) 
+ */
+
+static int ql_wai(struct qlogicfas408_priv *priv)
+{
+	int k;
+	int qbase = priv->qbase;
+	unsigned long i;
+
+	k = 0;
+	i = jiffies + WATCHDOG;
+	while (time_before(jiffies, i) && !priv->qabort &&
+					!((k = inb(qbase + 4)) & 0xe0)) {
+		barrier();
+		cpu_relax();
+	}
+	if (time_after_eq(jiffies, i))
+		return (DID_TIME_OUT);
+	if (priv->qabort)
+		return (priv->qabort == 1 ? DID_ABORT : DID_RESET);
+	if (k & 0x60)
+		ql_zap(priv);
+	if (k & 0x20)
+		return (DID_PARITY);
+	if (k & 0x40)
+		return (DID_ERROR);
+	return 0;
+}
+
+/*
+ *	Initiate scsi command - queueing handler 
+ *	caller must hold host lock
+ */
+
+static void ql_icmd(Scsi_Cmnd * cmd)
+{
+	struct qlogicfas408_priv *priv = get_priv_by_cmd(cmd);
+	int 	qbase = priv->qbase;
+	int	int_type = priv->int_type;
+	unsigned int i;
+
+	priv->qabort = 0;
+
+	REG0;
+	/* clearing of interrupts and the fifo is needed */
+
+	inb(qbase + 5);		/* clear interrupts */
+	if (inb(qbase + 5))	/* if still interrupting */
+		outb(2, qbase + 3);	/* reset chip */
+	else if (inb(qbase + 7) & 0x1f)
+		outb(1, qbase + 3);	/* clear fifo */
+	while (inb(qbase + 5));	/* clear ints */
+	REG1;
+	outb(1, qbase + 8);	/* set for PIO pseudo DMA */
+	outb(0, qbase + 0xb);	/* disable ints */
+	inb(qbase + 8);		/* clear int bits */
+	REG0;
+	outb(0x40, qbase + 0xb);	/* enable features */
+
+	/* configurables */
+	outb(qlcfgc, qbase + 0xc);
+	/* config: no reset interrupt, (initiator) bus id */
+	outb(0x40 | qlcfg8 | priv->qinitid, qbase + 8);
+	outb(qlcfg7, qbase + 7);
+	outb(qlcfg6, qbase + 6);
+	 /**/ outb(qlcfg5, qbase + 5);	/* select timer */
+	outb(qlcfg9 & 7, qbase + 9);	/* prescaler */
+/*	outb(0x99, qbase + 5);	*/
+	outb(cmd->device->id, qbase + 4);
+
+	for (i = 0; i < cmd->cmd_len; i++)
+		outb(cmd->cmnd[i], qbase + 2);
+
+	priv->qlcmd = cmd;
+	outb(0x41, qbase + 3);	/* select and send command */
+}
+
+/*
+ *	Process scsi command - usually after interrupt 
+ */
+
+static unsigned int ql_pcmd(Scsi_Cmnd * cmd)
+{
+	unsigned int i, j;
+	unsigned long k;
+	unsigned int result;	/* ultimate return result */
+	unsigned int status;	/* scsi returned status */
+	unsigned int message;	/* scsi returned message */
+	unsigned int phase;	/* recorded scsi phase */
+	unsigned int reqlen;	/* total length of transfer */
+	struct scatterlist *sglist;	/* scatter-gather list pointer */
+	unsigned int sgcount;	/* sg counter */
+	char *buf;
+	struct qlogicfas408_priv *priv = get_priv_by_cmd(cmd);
+	int qbase = priv->qbase;
+	int int_type = priv->int_type;
+
+	rtrc(1)
+	j = inb(qbase + 6);
+	i = inb(qbase + 5);
+	if (i == 0x20) {
+		return (DID_NO_CONNECT << 16);
+	}
+	i |= inb(qbase + 5);	/* the 0x10 bit can be set after the 0x08 */
+	if (i != 0x18) {
+		printk(KERN_ERR "Ql:Bad Interrupt status:%02x\n", i);
+		ql_zap(priv);
+		return (DID_BAD_INTR << 16);
+	}
+	j &= 7;			/* j = inb( qbase + 7 ) >> 5; */
+
+	/* correct status is supposed to be step 4 */
+	/* it sometimes returns step 3 but with 0 bytes left to send */
+	/* We can try stuffing the FIFO with the max each time, but we will get a
+	   sequence of 3 if any bytes are left (but we do flush the FIFO anyway */
+
+	if (j != 3 && j != 4) {
+		printk(KERN_ERR "Ql:Bad sequence for command %d, int %02X, cmdleft = %d\n",
+		     j, i, inb(qbase + 7) & 0x1f);
+		ql_zap(priv);
+		return (DID_ERROR << 16);
+	}
+	result = DID_OK;
+	if (inb(qbase + 7) & 0x1f)	/* if some bytes in fifo */
+		outb(1, qbase + 3);	/* clear fifo */
+	/* note that request_bufflen is the total xfer size when sg is used */
+	reqlen = cmd->request_bufflen;
+	/* note that it won't work if transfers > 16M are requested */
+	if (reqlen && !((phase = inb(qbase + 4)) & 6)) {	/* data phase */
+		rtrc(2)
+		outb(reqlen, qbase);	/* low-mid xfer cnt */
+		outb(reqlen >> 8, qbase + 1);	/* low-mid xfer cnt */
+		outb(reqlen >> 16, qbase + 0xe);	/* high xfer cnt */
+		outb(0x90, qbase + 3);	/* command do xfer */
+		/* PIO pseudo DMA to buffer or sglist */
+		REG1;
+		if (!cmd->use_sg)
+			ql_pdma(priv, phase, cmd->request_buffer,
+				cmd->request_bufflen);
+		else {
+			sgcount = cmd->use_sg;
+			sglist = cmd->request_buffer;
+			while (sgcount--) {
+				if (priv->qabort) {
+					REG0;
+					return ((priv->qabort == 1 ?
+						DID_ABORT : DID_RESET) << 16);
+				}
+				buf = page_address(sglist->page) + sglist->offset;
+				if (ql_pdma(priv, phase, buf, sglist->length))
+					break;
+				sglist++;
+			}
+		}
+		REG0;
+		rtrc(2)
+		/*
+		 *	Wait for irq (split into second state of irq handler
+		 *	if this can take time) 
+		 */
+		if ((k = ql_wai(priv)))
+			return (k << 16);
+		k = inb(qbase + 5);	/* should be 0x10, bus service */
+	}
+
+	/*
+	 *	Enter Status (and Message In) Phase 
+	 */
+	 
+	k = jiffies + WATCHDOG;
+
+	while (time_before(jiffies, k) && !priv->qabort &&
+						!(inb(qbase + 4) & 6))
+		cpu_relax();	/* wait for status phase */
+
+	if (time_after_eq(jiffies, k)) {
+		ql_zap(priv);
+		return (DID_TIME_OUT << 16);
+	}
+
+	/* FIXME: timeout ?? */
+	while (inb(qbase + 5))
+		cpu_relax();	/* clear pending ints */
+
+	if (priv->qabort)
+		return ((priv->qabort == 1 ? DID_ABORT : DID_RESET) << 16);
+
+	outb(0x11, qbase + 3);	/* get status and message */
+	if ((k = ql_wai(priv)))
+		return (k << 16);
+	i = inb(qbase + 5);	/* get chip irq stat */
+	j = inb(qbase + 7) & 0x1f;	/* and bytes rec'd */
+	status = inb(qbase + 2);
+	message = inb(qbase + 2);
+
+	/*
+	 *	Should get function complete int if Status and message, else 
+	 *	bus serv if only status 
+	 */
+	if (!((i == 8 && j == 2) || (i == 0x10 && j == 1))) {
+		printk(KERN_ERR "Ql:Error during status phase, int=%02X, %d bytes recd\n", i, j);
+		result = DID_ERROR;
+	}
+	outb(0x12, qbase + 3);	/* done, disconnect */
+	rtrc(1)
+	if ((k = ql_wai(priv)))
+		return (k << 16);
+
+	/*
+	 *	Should get bus service interrupt and disconnect interrupt 
+	 */
+	 
+	i = inb(qbase + 5);	/* should be bus service */
+	while (!priv->qabort && ((i & 0x20) != 0x20)) {
+		barrier();
+		cpu_relax();
+		i |= inb(qbase + 5);
+	}
+	rtrc(0)
+
+	if (priv->qabort)
+		return ((priv->qabort == 1 ? DID_ABORT : DID_RESET) << 16);
+		
+	return (result << 16) | (message << 8) | (status & STATUS_MASK);
+}
+
+/*
+ *	Interrupt handler 
+ */
+
+static void ql_ihandl(int irq, void *dev_id, struct pt_regs *regs)
+{
+	Scsi_Cmnd *icmd;
+	struct Scsi_Host *host = (struct Scsi_Host *)dev_id;
+	struct qlogicfas408_priv *priv = get_priv_by_host(host);
+	int qbase = priv->qbase;
+	REG0;
+
+	if (!(inb(qbase + 4) & 0x80))	/* false alarm? */
+		return;
+
+	if (priv->qlcmd == NULL) {	/* no command to process? */
+		int i;
+		i = 16;
+		while (i-- && inb(qbase + 5));	/* maybe also ql_zap() */
+		return;
+	}
+	icmd = priv->qlcmd;
+	icmd->result = ql_pcmd(icmd);
+	priv->qlcmd = NULL;
+	/*
+	 *	If result is CHECK CONDITION done calls qcommand to request 
+	 *	sense 
+	 */
+	(icmd->scsi_done) (icmd);
+}
+
+irqreturn_t qlogicfas408_ihandl(int irq, void *dev_id, struct pt_regs *regs)
+{
+	unsigned long flags;
+	struct Scsi_Host *host = dev_id;
+
+	spin_lock_irqsave(host->host_lock, flags);
+	ql_ihandl(irq, dev_id, regs);
+	spin_unlock_irqrestore(host->host_lock, flags);
+	return IRQ_HANDLED;
+}
+
+/*
+ *	Queued command
+ */
+
+int qlogicfas408_queuecommand(Scsi_Cmnd * cmd, void (*done) (Scsi_Cmnd *))
+{
+	struct qlogicfas408_priv *priv = get_priv_by_cmd(cmd);
+	if (cmd->device->id == priv->qinitid) {
+		cmd->result = DID_BAD_TARGET << 16;
+		done(cmd);
+		return 0;
+	}
+
+	cmd->scsi_done = done;
+	/* wait for the last command's interrupt to finish */
+	while (priv->qlcmd != NULL) {
+		barrier();
+		cpu_relax();
+	}
+	ql_icmd(cmd);
+	return 0;
+}
+
+/* 
+ *	Return bios parameters 
+ */
+
+int qlogicfas408_biosparam(struct scsi_device * disk,
+		        struct block_device *dev,
+			sector_t capacity, int ip[])
+{
+/* This should mimic the DOS Qlogic driver's behavior exactly */
+	ip[0] = 0x40;
+	ip[1] = 0x20;
+	ip[2] = (unsigned long) capacity / (ip[0] * ip[1]);
+	if (ip[2] > 1024) {
+		ip[0] = 0xff;
+		ip[1] = 0x3f;
+		ip[2] = (unsigned long) capacity / (ip[0] * ip[1]);
+#if 0
+		if (ip[2] > 1023)
+			ip[2] = 1023;
+#endif
+	}
+	return 0;
+}
+
+/*
+ *	Abort a command in progress
+ */
+ 
+int qlogicfas408_abort(Scsi_Cmnd * cmd)
+{
+	struct qlogicfas408_priv *priv = get_priv_by_cmd(cmd);
+	priv->qabort = 1;
+	ql_zap(priv);
+	return SUCCESS;
+}
+
+/* 
+ *	Reset SCSI bus
+ *	FIXME: This function is invoked with cmd = NULL directly by
+ *	the PCMCIA qlogic_stub code. This wants fixing
+ */
+
+int qlogicfas408_bus_reset(Scsi_Cmnd * cmd)
+{
+	struct qlogicfas408_priv *priv = get_priv_by_cmd(cmd);
+	priv->qabort = 2;
+	ql_zap(priv);
+	return SUCCESS;
+}
+
+/* 
+ *	Reset SCSI host controller
+ */
+
+int qlogicfas408_host_reset(Scsi_Cmnd * cmd)
+{
+	return FAILED;
+}
+
+/* 
+ *	Reset SCSI device
+ */
+
+int qlogicfas408_device_reset(Scsi_Cmnd * cmd)
+{
+	return FAILED;
+}
+
+/*
+ *	Return info string
+ */
+
+char *qlogicfas408_info(struct Scsi_Host *host)
+{
+	struct qlogicfas408_priv *priv = get_priv_by_host(host);
+	return priv->qinfo;
+}
+
+/*
+ *	Get type of chip
+ */
+
+int qlogicfas408_get_chip_type(int qbase, int int_type)
+{
+	REG1;
+	return inb(qbase + 0xe) & 0xf8;
+}
+
+/*
+ *	Perform initialization tasks
+ */
+
+void qlogicfas408_setup(int qbase, int id, int int_type)
+{
+	outb(1, qbase + 8);	/* set for PIO pseudo DMA */
+	REG0;
+	outb(0x40 | qlcfg8 | id, qbase + 8);	/* (ini) bus id, disable scsi rst */
+	outb(qlcfg5, qbase + 5);	/* select timer */
+	outb(qlcfg9, qbase + 9);	/* prescaler */
+
+#if QL_RESET_AT_START
+	outb(3, qbase + 3);
+
+	REG1;
+	/* FIXME: timeout */
+	while (inb(qbase + 0xf) & 4)
+		cpu_relax();
+
+	REG0;
+#endif
+}
+
+/*
+ *	Checks if this is a QLogic FAS 408
+ */
+
+int qlogicfas408_detect(int qbase, int int_type)
+{
+        REG1;
+	return (((inb(qbase + 0xe) ^ inb(qbase + 0xe)) == 7) &&
+	       ((inb(qbase + 0xe) ^ inb(qbase + 0xe)) == 7));		
+}
+
+/*
+ *	Disable interrupts
+ */
+
+void qlogicfas408_disable_ints(struct qlogicfas408_priv *priv)
+{
+	int qbase = priv->qbase;
+	int int_type = priv->int_type;
+
+	REG1;
+	outb(0, qbase + 0xb);	/* disable ints */
+}
+
+/*
+ *	Init and exit functions
+ */
+
+static int __init qlogicfas408_init(void)
+{
+	return 0;
+}
+
+static void __exit qlogicfas408_exit(void)
+{
+
+}
+
+MODULE_AUTHOR("Tom Zerucha, Michael Griffith");
+MODULE_DESCRIPTION("Driver for the Qlogic FAS SCSI controllers");
+MODULE_LICENSE("GPL");
+module_init(qlogicfas408_init);
+module_exit(qlogicfas408_exit);
+
+EXPORT_SYMBOL(qlogicfas408_info);
+EXPORT_SYMBOL(qlogicfas408_queuecommand);
+EXPORT_SYMBOL(qlogicfas408_abort);
+EXPORT_SYMBOL(qlogicfas408_bus_reset);
+EXPORT_SYMBOL(qlogicfas408_device_reset);
+EXPORT_SYMBOL(qlogicfas408_host_reset);
+EXPORT_SYMBOL(qlogicfas408_biosparam);
+EXPORT_SYMBOL(qlogicfas408_ihandl);
+EXPORT_SYMBOL(qlogicfas408_get_chip_type);
+EXPORT_SYMBOL(qlogicfas408_setup);
+EXPORT_SYMBOL(qlogicfas408_detect);
+EXPORT_SYMBOL(qlogicfas408_disable_ints);
+
diff -Nru a/drivers/scsi/qlogicfas408.h b/drivers/scsi/qlogicfas408.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/drivers/scsi/qlogicfas408.h	Sun May 16 01:18:34 2004
@@ -0,0 +1,120 @@
+/* to be used by qlogicfas and qlogic_cs */
+#ifndef __QLOGICFAS408_H
+#define __QLOGICFAS408_H
+
+/*----------------------------------------------------------------*/
+/* Configuration */
+
+/* Set the following to max out the speed of the PIO PseudoDMA transfers,
+   again, 0 tends to be slower, but more stable.  */
+
+#define QL_TURBO_PDMA 1
+
+/* This should be 1 to enable parity detection */
+
+#define QL_ENABLE_PARITY 1
+
+/* This will reset all devices when the driver is initialized (during bootup).
+   The other linux drivers don't do this, but the DOS drivers do, and after
+   using DOS or some kind of crash or lockup this will bring things back
+   without requiring a cold boot.  It does take some time to recover from a
+   reset, so it is slower, and I have seen timeouts so that devices weren't
+   recognized when this was set. */
+
+#define QL_RESET_AT_START 0
+
+/* crystal frequency in megahertz (for offset 5 and 9)
+   Please set this for your card.  Most Qlogic cards are 40 Mhz.  The
+   Control Concepts ISA (not VLB) is 24 Mhz */
+
+#define XTALFREQ	40
+
+/**********/
+/* DANGER! modify these at your own risk */
+/* SLOWCABLE can usually be reset to zero if you have a clean setup and
+   proper termination.  The rest are for synchronous transfers and other
+   advanced features if your device can transfer faster than 5Mb/sec.
+   If you are really curious, email me for a quick howto until I have
+   something official */
+/**********/
+
+/*****/
+/* config register 1 (offset 8) options */
+/* This needs to be set to 1 if your cabling is long or noisy */
+#define SLOWCABLE 1
+
+/*****/
+/* offset 0xc */
+/* This will set fast (10Mhz) synchronous timing when set to 1
+   For this to have an effect, FASTCLK must also be 1 */
+#define FASTSCSI 0
+
+/* This when set to 1 will set a faster sync transfer rate */
+#define FASTCLK 0	/*(XTALFREQ>25?1:0)*/
+
+/*****/
+/* offset 6 */
+/* This is the sync transfer divisor, XTALFREQ/X will be the maximum
+   achievable data rate (assuming the rest of the system is capable
+   and set properly) */
+#define SYNCXFRPD 5	/*(XTALFREQ/5)*/
+
+/*****/
+/* offset 7 */
+/* This is the count of how many synchronous transfers can take place
+	i.e. how many reqs can occur before an ack is given.
+	The maximum value for this is 15, the upper bits can modify
+	REQ/ACK assertion and deassertion during synchronous transfers
+	If this is 0, the bus will only transfer asynchronously */
+#define SYNCOFFST 0
+/* for the curious, bits 7&6 control the deassertion delay in 1/2 cycles
+	of the 40Mhz clock. If FASTCLK is 1, specifying 01 (1/2) will
+	cause the deassertion to be early by 1/2 clock.  Bits 5&4 control
+	the assertion delay, also in 1/2 clocks (FASTCLK is ignored here). */
+
+/*----------------------------------------------------------------*/
+
+struct qlogicfas408_priv {
+	 int		qbase;		/* Port */
+	 int		qinitid;	/* initiator ID */
+	 int		qabort;		/* Flag to cause an abort */
+	 int		qlirq;		/* IRQ being used */
+	 int		int_type;	/* type of irq, 2 for ISA board, 0 for PCMCIA */
+	 char		qinfo[80];	/* description */
+	 Scsi_Cmnd 	*qlcmd;		/* current command being processed */
+	 struct Scsi_Host *shost;	/* pointer back to host */
+	 struct qlogicfas408_priv *next; /* next private struct */
+};
+
+/* The qlogic card uses two register maps - These macros select which one */
+#define REG0 ( outb( inb( qbase + 0xd ) & 0x7f , qbase + 0xd ), outb( 4 , qbase + 0xd ))
+#define REG1 ( outb( inb( qbase + 0xd ) | 0x80 , qbase + 0xd ), outb( 0xb4 | int_type, qbase + 0xd ))
+
+/* following is watchdog timeout in microseconds */
+#define WATCHDOG 5000000
+
+/*----------------------------------------------------------------*/
+/* the following will set the monitor border color (useful to find
+   where something crashed or gets stuck at and as a simple profiler) */
+
+#define rtrc(i) {}
+
+#define get_priv_by_cmd(x) (struct qlogicfas408_priv *)&((x)->device->host->hostdata[0])
+#define get_priv_by_host(x) (struct qlogicfas408_priv *)&((x)->hostdata[0])
+
+irqreturn_t qlogicfas408_ihandl(int irq, void *dev_id, struct pt_regs *regs);
+int qlogicfas408_queuecommand(Scsi_Cmnd * cmd, void (*done) (Scsi_Cmnd *));
+int qlogicfas408_biosparam(struct scsi_device * disk,
+		        struct block_device *dev,
+			sector_t capacity, int ip[]);
+int qlogicfas408_abort(Scsi_Cmnd * cmd);
+int qlogicfas408_bus_reset(Scsi_Cmnd * cmd);
+int qlogicfas408_host_reset(Scsi_Cmnd * cmd);
+int qlogicfas408_device_reset(Scsi_Cmnd * cmd);
+char *qlogicfas408_info(struct Scsi_Host *host);
+int qlogicfas408_get_chip_type(int qbase, int int_type);
+void qlogicfas408_setup(int qbase, int id, int int_type);
+int qlogicfas408_detect(int qbase, int int_type);
+void qlogicfas408_disable_ints(struct qlogicfas408_priv *priv);
+#endif	/* __QLOGICFAS408_H */
+
diff -Nru a/drivers/scsi/sata_promise.c b/drivers/scsi/sata_promise.c
--- a/drivers/scsi/sata_promise.c	Sun May 16 01:18:36 2004
+++ b/drivers/scsi/sata_promise.c	Sun May 16 01:18:36 2004
@@ -1,6 +1,10 @@
 /*
  *  sata_promise.c - Promise SATA
  *
+ *  Maintained by:  Jeff Garzik <jgarzik@pobox.com>
+ *  		    Please ALWAYS copy linux-ide@vger.kernel.org
+ *		    on emails.
+ *
  *  Copyright 2003-2004 Red Hat, Inc.
  *
  *  The contents of this file are subject to the Open
@@ -33,16 +37,14 @@
 #include "hosts.h"
 #include <linux/libata.h>
 #include <asm/io.h>
+#include "sata_promise.h"
 
 #define DRV_NAME	"sata_promise"
-#define DRV_VERSION	"0.92"
+#define DRV_VERSION	"1.00"
 
 
 enum {
-	PDC_PRD_TBL		= 0x44,	/* Direct command DMA table addr */
-
 	PDC_PKT_SUBMIT		= 0x40, /* Command packet pointer addr */
-	PDC_HDMA_PKT_SUBMIT	= 0x100, /* Host DMA packet pointer addr */
 	PDC_INT_SEQMASK		= 0x40,	/* Mask of asserted SEQ INTs */
 	PDC_TBG_MODE		= 0x41,	/* TBG mode */
 	PDC_FLASH_CTL		= 0x44, /* Flash control register */
@@ -51,141 +53,39 @@
 	PDC_CTLSTAT		= 0x60,	/* IDE control and status (per port) */
 	PDC_SATA_PLUG_CSR	= 0x6C, /* SATA Plug control/status reg */
 	PDC_SLEW_CTL		= 0x470, /* slew rate control reg */
-	PDC_HDMA_CTLSTAT	= 0x12C, /* Host DMA control / status */
-
-	PDC_20621_SEQCTL	= 0x400,
-	PDC_20621_SEQMASK	= 0x480,
-	PDC_20621_GENERAL_CTL	= 0x484,
-	PDC_20621_PAGE_SIZE	= (32 * 1024),
-
-	/* chosen, not constant, values; we design our own DIMM mem map */
-	PDC_20621_DIMM_WINDOW	= 0x0C,	/* page# for 32K DIMM window */
-	PDC_20621_DIMM_BASE	= 0x00200000,
-	PDC_20621_DIMM_DATA	= (64 * 1024),
-	PDC_DIMM_DATA_STEP	= (256 * 1024),
-	PDC_DIMM_WINDOW_STEP	= (8 * 1024),
-	PDC_DIMM_HOST_PRD	= (6 * 1024),
-	PDC_DIMM_HOST_PKT	= (128 * 0),
-	PDC_DIMM_HPKT_PRD	= (128 * 1),
-	PDC_DIMM_ATA_PKT	= (128 * 2),
-	PDC_DIMM_APKT_PRD	= (128 * 3),
-	PDC_DIMM_HEADER_SZ	= PDC_DIMM_APKT_PRD + 128,
-	PDC_PAGE_WINDOW		= 0x40,
-	PDC_PAGE_DATA		= PDC_PAGE_WINDOW +
-				  (PDC_20621_DIMM_DATA / PDC_20621_PAGE_SIZE),
-	PDC_PAGE_SET		= PDC_DIMM_DATA_STEP / PDC_20621_PAGE_SIZE,
 
-	PDC_CHIP0_OFS		= 0xC0000, /* offset of chip #0 */
-
-	PDC_20621_ERR_MASK	= (1<<19) | (1<<20) | (1<<21) | (1<<22) |
-				  (1<<23),
 	PDC_ERR_MASK		= (1<<19) | (1<<20) | (1<<21) | (1<<22) |
 				  (1<<8) | (1<<9) | (1<<10),
 
 	board_2037x		= 0,	/* FastTrak S150 TX2plus */
 	board_20319		= 1,	/* FastTrak S150 TX4 */
-	board_20621		= 2,	/* FastTrak S150 SX4 */
 
 	PDC_HAS_PATA		= (1 << 1), /* PDC20375 has PATA */
 
-	PDC_FLAG_20621		= (1 << 30), /* we have a 20621 */
 	PDC_RESET		= (1 << 11), /* HDMA reset */
-
-	PDC_MAX_HDMA		= 32,
-	PDC_HDMA_Q_MASK		= (PDC_MAX_HDMA - 1),
-
-	PDC_DIMM0_SPD_DEV_ADDRESS     = 0x50,
-	PDC_DIMM1_SPD_DEV_ADDRESS     = 0x51,
-	PDC_MAX_DIMM_MODULE           = 0x02,
-	PDC_I2C_CONTROL_OFFSET        = 0x48,
-	PDC_I2C_ADDR_DATA_OFFSET      = 0x4C,
-	PDC_DIMM0_CONTROL_OFFSET      = 0x80,
-	PDC_DIMM1_CONTROL_OFFSET      = 0x84,
-	PDC_SDRAM_CONTROL_OFFSET      = 0x88,
-	PDC_I2C_WRITE                 = 0x00000000,
-	PDC_I2C_READ                  = 0x00000040,	
-	PDC_I2C_START                 = 0x00000080,
-	PDC_I2C_MASK_INT              = 0x00000020,
-	PDC_I2C_COMPLETE              = 0x00010000,
-	PDC_I2C_NO_ACK                = 0x00100000,
-	PDC_DIMM_SPD_SUBADDRESS_START = 0x00,
-	PDC_DIMM_SPD_SUBADDRESS_END   = 0x7F,
-	PDC_DIMM_SPD_ROW_NUM          = 3,
-	PDC_DIMM_SPD_COLUMN_NUM       = 4,
-	PDC_DIMM_SPD_MODULE_ROW       = 5,
-	PDC_DIMM_SPD_TYPE             = 11,
-	PDC_DIMM_SPD_FRESH_RATE       = 12,         
-	PDC_DIMM_SPD_BANK_NUM         = 17,	
-	PDC_DIMM_SPD_CAS_LATENCY      = 18,
-	PDC_DIMM_SPD_ATTRIBUTE        = 21,    
-	PDC_DIMM_SPD_ROW_PRE_CHARGE   = 27,
-	PDC_DIMM_SPD_ROW_ACTIVE_DELAY = 28,      
-	PDC_DIMM_SPD_RAS_CAS_DELAY    = 29,
-	PDC_DIMM_SPD_ACTIVE_PRECHARGE = 30,
-	PDC_DIMM_SPD_SYSTEM_FREQ      = 126,
-	PDC_CTL_STATUS		      = 0x08,	
-	PDC_DIMM_WINDOW_CTLR	      = 0x0C,
-	PDC_TIME_CONTROL              = 0x3C,
-	PDC_TIME_PERIOD               = 0x40,
-	PDC_TIME_COUNTER              = 0x44,
-	PDC_GENERAL_CTLR	      = 0x484,
-	PCI_PLL_INIT                  = 0x8A531824,
-	PCI_X_TCOUNT                  = 0xEE1E5CFF
 };
 
 
 struct pdc_port_priv {
-	u8			dimm_buf[(ATA_PRD_SZ * ATA_MAX_PRD) + 512];
 	u8			*pkt;
 	dma_addr_t		pkt_dma;
 };
 
-struct pdc_host_priv {
-	void			*dimm_mmio;
-
-	unsigned int		doing_hdma;
-	unsigned int		hdma_prod;
-	unsigned int		hdma_cons;
-	struct {
-		struct ata_queued_cmd *qc;
-		unsigned int	seq;
-		unsigned long	pkt_ofs;
-	} hdma[32];
-};
-
-
 static u32 pdc_sata_scr_read (struct ata_port *ap, unsigned int sc_reg);
 static void pdc_sata_scr_write (struct ata_port *ap, unsigned int sc_reg, u32 val);
 static int pdc_sata_init_one (struct pci_dev *pdev, const struct pci_device_id *ent);
+static void pdc_dma_setup(struct ata_queued_cmd *qc);
 static void pdc_dma_start(struct ata_queued_cmd *qc);
-static void pdc20621_dma_start(struct ata_queued_cmd *qc);
 static irqreturn_t pdc_interrupt (int irq, void *dev_instance, struct pt_regs *regs);
-static irqreturn_t pdc20621_interrupt (int irq, void *dev_instance, struct pt_regs *regs);
 static void pdc_eng_timeout(struct ata_port *ap);
-static void pdc_20621_phy_reset (struct ata_port *ap);
 static int pdc_port_start(struct ata_port *ap);
 static void pdc_port_stop(struct ata_port *ap);
 static void pdc_phy_reset(struct ata_port *ap);
 static void pdc_fill_sg(struct ata_queued_cmd *qc);
-static void pdc20621_fill_sg(struct ata_queued_cmd *qc);
 static void pdc_tf_load_mmio(struct ata_port *ap, struct ata_taskfile *tf);
 static void pdc_exec_command_mmio(struct ata_port *ap, struct ata_taskfile *tf);
-static void pdc20621_host_stop(struct ata_host_set *host_set);
 static inline void pdc_dma_complete (struct ata_port *ap,
                                      struct ata_queued_cmd *qc, int have_err);
-static unsigned int pdc20621_dimm_init(struct ata_probe_ent *pe);
-static int pdc20621_detect_dimm(struct ata_probe_ent *pe);
-static unsigned int pdc20621_i2c_read(struct ata_probe_ent *pe, 
-				      u32 device, u32 subaddr, u32 *pdata);
-static int pdc20621_prog_dimm0(struct ata_probe_ent *pe);
-static unsigned int pdc20621_prog_dimm_global(struct ata_probe_ent *pe);
-#ifdef ATA_VERBOSE_DEBUG
-static void pdc20621_get_from_dimm(struct ata_probe_ent *pe, 
-				   void *psource, u32 offset, u32 size);
-#endif
-static void pdc20621_put_to_dimm(struct ata_probe_ent *pe, 
-				 void *psource, u32 offset, u32 size);
-
 
 static Scsi_Host_Template pdc_sata_sht = {
 	.module			= THIS_MODULE,
@@ -212,6 +112,7 @@
 	.check_status		= ata_check_status_mmio,
 	.exec_command		= pdc_exec_command_mmio,
 	.phy_reset		= pdc_phy_reset,
+	.bmdma_setup            = pdc_dma_setup,
 	.bmdma_start            = pdc_dma_start,
 	.fill_sg		= pdc_fill_sg,
 	.eng_timeout		= pdc_eng_timeout,
@@ -222,22 +123,6 @@
 	.port_stop		= pdc_port_stop,
 };
 
-static struct ata_port_operations pdc_20621_ops = {
-	.port_disable		= ata_port_disable,
-	.tf_load		= pdc_tf_load_mmio,
-	.tf_read		= ata_tf_read_mmio,
-	.check_status		= ata_check_status_mmio,
-	.exec_command		= pdc_exec_command_mmio,
-	.phy_reset		= pdc_20621_phy_reset,
-	.bmdma_start            = pdc20621_dma_start,
-	.fill_sg		= pdc20621_fill_sg,
-	.eng_timeout		= pdc_eng_timeout,
-	.irq_handler		= pdc20621_interrupt,
-	.port_start		= pdc_port_start,
-	.port_stop		= pdc_port_stop,
-	.host_stop		= pdc20621_host_stop,
-};
-
 static struct ata_port_info pdc_port_info[] = {
 	/* board_2037x */
 	{
@@ -258,18 +143,6 @@
 		.udma_mask	= 0x7f, /* udma0-6 ; FIXME */
 		.port_ops	= &pdc_sata_ops,
 	},
-
-	/* board_20621 */
-	{
-		.sht		= &pdc_sata_sht,
-		.host_flags	= ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
-				  ATA_FLAG_SRST | ATA_FLAG_MMIO |
-				  PDC_FLAG_20621,
-		.pio_mask	= 0x03, /* pio3-4 */
-		.udma_mask	= 0x7f, /* udma0-6 ; FIXME */
-		.port_ops	= &pdc_20621_ops,
-	},
-
 };
 
 static struct pci_device_id pdc_sata_pci_tbl[] = {
@@ -285,8 +158,6 @@
 	  board_20319 },
 	{ PCI_VENDOR_ID_PROMISE, 0x3319, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
 	  board_20319 },
-	{ PCI_VENDOR_ID_PROMISE, 0x6622, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
-	  board_20621 },
 	{ }	/* terminate list */
 };
 
@@ -299,15 +170,6 @@
 };
 
 
-static void pdc20621_host_stop(struct ata_host_set *host_set)
-{
-	struct pdc_host_priv *hpriv = host_set->private_data;
-	void *dimm_mmio = hpriv->dimm_mmio;
-
-	iounmap(dimm_mmio);
-	kfree(hpriv);
-}
-
 static int pdc_port_start(struct ata_port *ap)
 {
 	struct pci_dev *pdev = ap->host_set->pdev;
@@ -355,14 +217,6 @@
 }
 
 
-static void pdc_20621_phy_reset (struct ata_port *ap)
-{
-	VPRINTK("ENTER\n");
-        ap->cbl = ATA_CBL_SATA;
-        ata_port_probe(ap);
-        ata_bus_reset(ap);
-}
-
 static void pdc_reset_port(struct ata_port *ap)
 {
 	void *mmio = (void *) ap->ioaddr.cmd_addr + PDC_CTLSTAT;
@@ -407,587 +261,6 @@
 	writel(val, (void *) ap->ioaddr.scr_addr + (sc_reg * 4));
 }
 
-enum pdc_packet_bits {
-	PDC_PKT_READ		= (1 << 2),
-	PDC_PKT_NODATA		= (1 << 3),
-
-	PDC_PKT_SIZEMASK	= (1 << 7) | (1 << 6) | (1 << 5),
-	PDC_PKT_CLEAR_BSY	= (1 << 4),
-	PDC_PKT_WAIT_DRDY	= (1 << 3) | (1 << 4),
-	PDC_LAST_REG		= (1 << 3),
-
-	PDC_REG_DEVCTL		= (1 << 3) | (1 << 2) | (1 << 1),
-};
-
-static inline unsigned int pdc_pkt_header(struct ata_taskfile *tf,
-					  dma_addr_t sg_table,
-					  unsigned int devno, u8 *buf)
-{
-	u8 dev_reg;
-	u32 *buf32 = (u32 *) buf;
-
-	/* set control bits (byte 0), zero delay seq id (byte 3),
-	 * and seq id (byte 2)
-	 */
-	switch (tf->protocol) {
-	case ATA_PROT_DMA:
-		if (!(tf->flags & ATA_TFLAG_WRITE))
-			buf32[0] = cpu_to_le32(PDC_PKT_READ);
-		else
-			buf32[0] = 0;
-		break;
-
-	case ATA_PROT_NODATA:
-		buf32[0] = cpu_to_le32(PDC_PKT_NODATA);
-		break;
-
-	default:
-		BUG();
-		break;
-	}
-
-	buf32[1] = cpu_to_le32(sg_table);	/* S/G table addr */
-	buf32[2] = 0;				/* no next-packet */
-
-	if (devno == 0)
-		dev_reg = ATA_DEVICE_OBS;
-	else
-		dev_reg = ATA_DEVICE_OBS | ATA_DEV1;
-
-	/* select device */
-	buf[12] = (1 << 5) | PDC_PKT_CLEAR_BSY | ATA_REG_DEVICE;
-	buf[13] = dev_reg;
-
-	/* device control register */
-	buf[14] = (1 << 5) | PDC_REG_DEVCTL;
-	buf[15] = tf->ctl;
-
-	return 16; 	/* offset of next byte */
-}
-
-static inline unsigned int pdc_pkt_footer(struct ata_taskfile *tf, u8 *buf,
-				  unsigned int i)
-{
-	if (tf->flags & ATA_TFLAG_DEVICE) {
-		buf[i++] = (1 << 5) | ATA_REG_DEVICE;
-		buf[i++] = tf->device;
-	}
-
-	/* and finally the command itself; also includes end-of-pkt marker */
-	buf[i++] = (1 << 5) | PDC_LAST_REG | ATA_REG_CMD;
-	buf[i++] = tf->command;
-
-	return i;
-}
-
-static inline unsigned int pdc_prep_lba28(struct ata_taskfile *tf, u8 *buf, unsigned int i)
-{
-	/* the "(1 << 5)" should be read "(count << 5)" */
-
-	/* ATA command block registers */
-	buf[i++] = (1 << 5) | ATA_REG_FEATURE;
-	buf[i++] = tf->feature;
-
-	buf[i++] = (1 << 5) | ATA_REG_NSECT;
-	buf[i++] = tf->nsect;
-
-	buf[i++] = (1 << 5) | ATA_REG_LBAL;
-	buf[i++] = tf->lbal;
-
-	buf[i++] = (1 << 5) | ATA_REG_LBAM;
-	buf[i++] = tf->lbam;
-
-	buf[i++] = (1 << 5) | ATA_REG_LBAH;
-	buf[i++] = tf->lbah;
-
-	return i;
-}
-
-static inline unsigned int pdc_prep_lba48(struct ata_taskfile *tf, u8 *buf, unsigned int i)
-{
-	/* the "(2 << 5)" should be read "(count << 5)" */
-
-	/* ATA command block registers */
-	buf[i++] = (2 << 5) | ATA_REG_FEATURE;
-	buf[i++] = tf->hob_feature;
-	buf[i++] = tf->feature;
-
-	buf[i++] = (2 << 5) | ATA_REG_NSECT;
-	buf[i++] = tf->hob_nsect;
-	buf[i++] = tf->nsect;
-
-	buf[i++] = (2 << 5) | ATA_REG_LBAL;
-	buf[i++] = tf->hob_lbal;
-	buf[i++] = tf->lbal;
-
-	buf[i++] = (2 << 5) | ATA_REG_LBAM;
-	buf[i++] = tf->hob_lbam;
-	buf[i++] = tf->lbam;
-
-	buf[i++] = (2 << 5) | ATA_REG_LBAH;
-	buf[i++] = tf->hob_lbah;
-	buf[i++] = tf->lbah;
-
-	return i;
-}
-
-static inline void pdc20621_ata_sg(struct ata_taskfile *tf, u8 *buf,
-				    	   unsigned int portno,
-					   unsigned int total_len)
-{
-	u32 addr;
-	unsigned int dw = PDC_DIMM_APKT_PRD >> 2;
-	u32 *buf32 = (u32 *) buf;
-
-	/* output ATA packet S/G table */
-	addr = PDC_20621_DIMM_BASE + PDC_20621_DIMM_DATA +
-	       (PDC_DIMM_DATA_STEP * portno);
-	VPRINTK("ATA sg addr 0x%x, %d\n", addr, addr);
-	buf32[dw] = cpu_to_le32(addr);
-	buf32[dw + 1] = cpu_to_le32(total_len | ATA_PRD_EOT);
-
-	VPRINTK("ATA PSG @ %x == (0x%x, 0x%x)\n",
-		PDC_20621_DIMM_BASE +
-		       (PDC_DIMM_WINDOW_STEP * portno) +
-		       PDC_DIMM_APKT_PRD,
-		buf32[dw], buf32[dw + 1]);
-}
-
-static inline void pdc20621_host_sg(struct ata_taskfile *tf, u8 *buf,
-				    	    unsigned int portno,
-					    unsigned int total_len)
-{
-	u32 addr;
-	unsigned int dw = PDC_DIMM_HPKT_PRD >> 2;
-	u32 *buf32 = (u32 *) buf;
-
-	/* output Host DMA packet S/G table */
-	addr = PDC_20621_DIMM_BASE + PDC_20621_DIMM_DATA +
-	       (PDC_DIMM_DATA_STEP * portno);
-
-	buf32[dw] = cpu_to_le32(addr);
-	buf32[dw + 1] = cpu_to_le32(total_len | ATA_PRD_EOT);
-
-	VPRINTK("HOST PSG @ %x == (0x%x, 0x%x)\n",
-		PDC_20621_DIMM_BASE +
-		       (PDC_DIMM_WINDOW_STEP * portno) +
-		       PDC_DIMM_HPKT_PRD,
-		buf32[dw], buf32[dw + 1]);
-}
-
-static inline unsigned int pdc20621_ata_pkt(struct ata_taskfile *tf,
-					    unsigned int devno, u8 *buf,
-					    unsigned int portno)
-{
-	unsigned int i, dw;
-	u32 *buf32 = (u32 *) buf;
-	u8 dev_reg;
-
-	unsigned int dimm_sg = PDC_20621_DIMM_BASE +
-			       (PDC_DIMM_WINDOW_STEP * portno) +
-			       PDC_DIMM_APKT_PRD;
-	VPRINTK("ENTER, dimm_sg == 0x%x, %d\n", dimm_sg, dimm_sg);
-
-	i = PDC_DIMM_ATA_PKT;
-
-	/*
-	 * Set up ATA packet
-	 */
-	if ((tf->protocol == ATA_PROT_DMA) && (!(tf->flags & ATA_TFLAG_WRITE)))
-		buf[i++] = PDC_PKT_READ;
-	else if (tf->protocol == ATA_PROT_NODATA)
-		buf[i++] = PDC_PKT_NODATA;
-	else
-		buf[i++] = 0;
-	buf[i++] = 0;			/* reserved */
-	buf[i++] = portno + 1;		/* seq. id */
-	buf[i++] = 0xff;		/* delay seq. id */
-
-	/* dimm dma S/G, and next-pkt */
-	dw = i >> 2;
-	buf32[dw] = cpu_to_le32(dimm_sg);
-	buf32[dw + 1] = 0;
-	i += 8;
-
-	if (devno == 0)
-		dev_reg = ATA_DEVICE_OBS;
-	else
-		dev_reg = ATA_DEVICE_OBS | ATA_DEV1;
-
-	/* select device */
-	buf[i++] = (1 << 5) | PDC_PKT_CLEAR_BSY | ATA_REG_DEVICE;
-	buf[i++] = dev_reg;
-
-	/* device control register */
-	buf[i++] = (1 << 5) | PDC_REG_DEVCTL;
-	buf[i++] = tf->ctl;
-
-	return i;
-}
-
-static inline void pdc20621_host_pkt(struct ata_taskfile *tf, u8 *buf,
-				     unsigned int portno)
-{
-	unsigned int dw;
-	u32 tmp, *buf32 = (u32 *) buf;
-
-	unsigned int host_sg = PDC_20621_DIMM_BASE +
-			       (PDC_DIMM_WINDOW_STEP * portno) +
-			       PDC_DIMM_HOST_PRD;
-	unsigned int dimm_sg = PDC_20621_DIMM_BASE +
-			       (PDC_DIMM_WINDOW_STEP * portno) +
-			       PDC_DIMM_HPKT_PRD;
-	VPRINTK("ENTER, dimm_sg == 0x%x, %d\n", dimm_sg, dimm_sg);
-	VPRINTK("host_sg == 0x%x, %d\n", host_sg, host_sg);
-
-	dw = PDC_DIMM_HOST_PKT >> 2;
-
-	/*
-	 * Set up Host DMA packet
-	 */
-	if ((tf->protocol == ATA_PROT_DMA) && (!(tf->flags & ATA_TFLAG_WRITE)))
-		tmp = PDC_PKT_READ;
-	else
-		tmp = 0;
-	tmp |= ((portno + 1 + 4) << 16);	/* seq. id */
-	tmp |= (0xff << 24);			/* delay seq. id */
-	buf32[dw + 0] = cpu_to_le32(tmp);
-	buf32[dw + 1] = cpu_to_le32(host_sg);
-	buf32[dw + 2] = cpu_to_le32(dimm_sg);
-	buf32[dw + 3] = 0;
-
-	VPRINTK("HOST PKT @ %x == (0x%x 0x%x 0x%x 0x%x)\n",
-		PDC_20621_DIMM_BASE + (PDC_DIMM_WINDOW_STEP * portno) +
-			PDC_DIMM_HOST_PKT,
-		buf32[dw + 0],
-		buf32[dw + 1],
-		buf32[dw + 2],
-		buf32[dw + 3]);
-}
-
-static void pdc20621_fill_sg(struct ata_queued_cmd *qc)
-{
-	struct scatterlist *sg = qc->sg;
-	struct ata_port *ap = qc->ap;
-	struct pdc_port_priv *pp = ap->private_data;
-	void *mmio = ap->host_set->mmio_base;
-	struct pdc_host_priv *hpriv = ap->host_set->private_data;
-	void *dimm_mmio = hpriv->dimm_mmio;
-	unsigned int portno = ap->port_no;
-	unsigned int i, last, idx, total_len = 0, sgt_len;
-	u32 *buf = (u32 *) &pp->dimm_buf[PDC_DIMM_HEADER_SZ];
-
-	VPRINTK("ata%u: ENTER\n", ap->id);
-
-	/* hard-code chip #0 */
-	mmio += PDC_CHIP0_OFS;
-
-	/*
-	 * Build S/G table
-	 */
-	last = qc->n_elem;
-	idx = 0;
-	for (i = 0; i < last; i++) {
-		buf[idx++] = cpu_to_le32(sg_dma_address(&sg[i]));
-		buf[idx++] = cpu_to_le32(sg_dma_len(&sg[i]));
-		total_len += sg[i].length;
-	}
-	buf[idx - 1] |= cpu_to_le32(ATA_PRD_EOT);
-	sgt_len = idx * 4;
-
-	/*
-	 * Build ATA, host DMA packets
-	 */
-	pdc20621_host_sg(&qc->tf, &pp->dimm_buf[0], portno, total_len);
-	pdc20621_host_pkt(&qc->tf, &pp->dimm_buf[0], portno);
-
-	pdc20621_ata_sg(&qc->tf, &pp->dimm_buf[0], portno, total_len);
-	i = pdc20621_ata_pkt(&qc->tf, qc->dev->devno, &pp->dimm_buf[0], portno);
-
-	if (qc->tf.flags & ATA_TFLAG_LBA48)
-		i = pdc_prep_lba48(&qc->tf, &pp->dimm_buf[0], i);
-	else
-		i = pdc_prep_lba28(&qc->tf, &pp->dimm_buf[0], i);
-
-	pdc_pkt_footer(&qc->tf, &pp->dimm_buf[0], i);
-
-	/* copy three S/G tables and two packets to DIMM MMIO window */
-	memcpy_toio(dimm_mmio + (portno * PDC_DIMM_WINDOW_STEP),
-		    &pp->dimm_buf, PDC_DIMM_HEADER_SZ);
-	memcpy_toio(dimm_mmio + (portno * PDC_DIMM_WINDOW_STEP) +
-		    PDC_DIMM_HOST_PRD,
-		    &pp->dimm_buf[PDC_DIMM_HEADER_SZ], sgt_len);
-
-	/* force host FIFO dump */
-	writel(0x00000001, mmio + PDC_20621_GENERAL_CTL);
-
-	readl(dimm_mmio);	/* MMIO PCI posting flush */
-
-	VPRINTK("ata pkt buf ofs %u, prd size %u, mmio copied\n", i, sgt_len);
-}
-
-static void __pdc20621_push_hdma(struct ata_queued_cmd *qc,
-				 unsigned int seq,
-				 u32 pkt_ofs)
-{
-	struct ata_port *ap = qc->ap;
-	struct ata_host_set *host_set = ap->host_set;
-	void *mmio = host_set->mmio_base;
-
-	/* hard-code chip #0 */
-	mmio += PDC_CHIP0_OFS;
-
-	writel(0x00000001, mmio + PDC_20621_SEQCTL + (seq * 4));
-	readl(mmio + PDC_20621_SEQCTL + (seq * 4));	/* flush */
-
-	writel(pkt_ofs, mmio + PDC_HDMA_PKT_SUBMIT);
-	readl(mmio + PDC_HDMA_PKT_SUBMIT);	/* flush */
-}
-
-static void pdc20621_push_hdma(struct ata_queued_cmd *qc,
-				unsigned int seq,
-				u32 pkt_ofs)
-{
-	struct ata_port *ap = qc->ap;
-	struct pdc_host_priv *pp = ap->host_set->private_data;
-	unsigned int idx = pp->hdma_prod & PDC_HDMA_Q_MASK;
-
-	if (!pp->doing_hdma) {
-		__pdc20621_push_hdma(qc, seq, pkt_ofs);
-		pp->doing_hdma = 1;
-		return;
-	}
-
-	pp->hdma[idx].qc = qc;
-	pp->hdma[idx].seq = seq;
-	pp->hdma[idx].pkt_ofs = pkt_ofs;
-	pp->hdma_prod++;
-}
-
-static void pdc20621_pop_hdma(struct ata_queued_cmd *qc)
-{
-	struct ata_port *ap = qc->ap;
-	struct pdc_host_priv *pp = ap->host_set->private_data;
-	unsigned int idx = pp->hdma_cons & PDC_HDMA_Q_MASK;
-
-	/* if nothing on queue, we're done */
-	if (pp->hdma_prod == pp->hdma_cons) {
-		pp->doing_hdma = 0;
-		return;
-	}
-
-	__pdc20621_push_hdma(pp->hdma[idx].qc, pp->hdma[idx].seq,
-			     pp->hdma[idx].pkt_ofs);
-	pp->hdma_cons++;
-}
-
-#ifdef ATA_VERBOSE_DEBUG
-static void pdc20621_dump_hdma(struct ata_queued_cmd *qc)
-{
-	struct ata_port *ap = qc->ap;
-	unsigned int port_no = ap->port_no;
-	struct pdc_host_priv *hpriv = ap->host_set->private_data;
-	void *dimm_mmio = hpriv->dimm_mmio;
-
-	dimm_mmio += (port_no * PDC_DIMM_WINDOW_STEP);
-	dimm_mmio += PDC_DIMM_HOST_PKT;
-
-	printk(KERN_ERR "HDMA[0] == 0x%08X\n", readl(dimm_mmio));
-	printk(KERN_ERR "HDMA[1] == 0x%08X\n", readl(dimm_mmio + 4));
-	printk(KERN_ERR "HDMA[2] == 0x%08X\n", readl(dimm_mmio + 8));
-	printk(KERN_ERR "HDMA[3] == 0x%08X\n", readl(dimm_mmio + 12));
-}
-#else
-static inline void pdc20621_dump_hdma(struct ata_queued_cmd *qc) { }
-#endif /* ATA_VERBOSE_DEBUG */
-
-static void pdc20621_dma_start(struct ata_queued_cmd *qc)
-{
-	struct ata_port *ap = qc->ap;
-	struct ata_host_set *host_set = ap->host_set;
-	unsigned int port_no = ap->port_no;
-	void *mmio = host_set->mmio_base;
-	unsigned int rw = (qc->tf.flags & ATA_TFLAG_WRITE);
-	u8 seq = (u8) (port_no + 1);
-	unsigned int doing_hdma = 0, port_ofs;
-
-	/* hard-code chip #0 */
-	mmio += PDC_CHIP0_OFS;
-
-	VPRINTK("ata%u: ENTER\n", ap->id);
-
-	port_ofs = PDC_20621_DIMM_BASE + (PDC_DIMM_WINDOW_STEP * port_no);
-
-	/* if writing, we (1) DMA to DIMM, then (2) do ATA command */
-	if (rw) {
-		doing_hdma = 1;
-		seq += 4;
-	}
-
-	wmb();			/* flush PRD, pkt writes */
-
-	if (doing_hdma) {
-		pdc20621_dump_hdma(qc);
-		pdc20621_push_hdma(qc, seq, port_ofs + PDC_DIMM_HOST_PKT);
-		VPRINTK("queued ofs 0x%x (%u), seq %u\n",
-			port_ofs + PDC_DIMM_HOST_PKT,
-			port_ofs + PDC_DIMM_HOST_PKT,
-			seq);
-	} else {
-		writel(0x00000001, mmio + PDC_20621_SEQCTL + (seq * 4));
-		readl(mmio + PDC_20621_SEQCTL + (seq * 4));	/* flush */
-
-		writel(port_ofs + PDC_DIMM_ATA_PKT,
-		       (void *) ap->ioaddr.cmd_addr + PDC_PKT_SUBMIT);
-		readl((void *) ap->ioaddr.cmd_addr + PDC_PKT_SUBMIT);
-		VPRINTK("submitted ofs 0x%x (%u), seq %u\n",
-			port_ofs + PDC_DIMM_ATA_PKT,
-			port_ofs + PDC_DIMM_ATA_PKT,
-			seq);
-	}
-}
-
-static inline unsigned int pdc20621_host_intr( struct ata_port *ap,
-                                          struct ata_queued_cmd *qc,
-					  unsigned int doing_hdma,
-					  void *mmio)
-{
-	unsigned int port_no = ap->port_no;
-	unsigned int port_ofs =
-		PDC_20621_DIMM_BASE + (PDC_DIMM_WINDOW_STEP * port_no);
-	u8 status;
-	unsigned int handled = 0;
-
-	VPRINTK("ENTER\n");
-
-	if ((qc->tf.protocol == ATA_PROT_DMA) &&	/* read */
-	    (!(qc->tf.flags & ATA_TFLAG_WRITE))) {
-
-		/* step two - DMA from DIMM to host */
-		if (doing_hdma) {
-			VPRINTK("ata%u: read hdma, 0x%x 0x%x\n", ap->id,
-				readl(mmio + 0x104), readl(mmio + PDC_HDMA_CTLSTAT));
-			pdc_dma_complete(ap, qc, 0);
-			pdc20621_pop_hdma(qc);
-		}
-
-		/* step one - exec ATA command */
-		else {
-			u8 seq = (u8) (port_no + 1 + 4);
-			VPRINTK("ata%u: read ata, 0x%x 0x%x\n", ap->id,
-				readl(mmio + 0x104), readl(mmio + PDC_HDMA_CTLSTAT));
-
-			/* submit hdma pkt */
-			pdc20621_dump_hdma(qc);
-			pdc20621_push_hdma(qc, seq,
-					   port_ofs + PDC_DIMM_HOST_PKT);
-		}
-		handled = 1;
-
-	} else if (qc->tf.protocol == ATA_PROT_DMA) {	/* write */
-
-		/* step one - DMA from host to DIMM */
-		if (doing_hdma) {
-			u8 seq = (u8) (port_no + 1);
-			VPRINTK("ata%u: write hdma, 0x%x 0x%x\n", ap->id,
-				readl(mmio + 0x104), readl(mmio + PDC_HDMA_CTLSTAT));
-
-			/* submit ata pkt */
-			writel(0x00000001, mmio + PDC_20621_SEQCTL + (seq * 4));
-			readl(mmio + PDC_20621_SEQCTL + (seq * 4));
-			writel(port_ofs + PDC_DIMM_ATA_PKT,
-			       (void *) ap->ioaddr.cmd_addr + PDC_PKT_SUBMIT);
-			readl((void *) ap->ioaddr.cmd_addr + PDC_PKT_SUBMIT);
-		}
-
-		/* step two - execute ATA command */
-		else {
-			VPRINTK("ata%u: write ata, 0x%x 0x%x\n", ap->id,
-				readl(mmio + 0x104), readl(mmio + PDC_HDMA_CTLSTAT));
-			pdc_dma_complete(ap, qc, 0);
-			pdc20621_pop_hdma(qc);
-		}
-		handled = 1;
-
-	/* command completion, but no data xfer */
-	} else if (qc->tf.protocol == ATA_PROT_NODATA) {
-
-		status = ata_busy_wait(ap, ATA_BUSY | ATA_DRQ, 1000);
-		DPRINTK("BUS_NODATA (drv_stat 0x%X)\n", status);
-		ata_qc_complete(qc, status, 0);
-		handled = 1;
-
-	} else {
-		ap->stats.idle_irq++;
-	}
-
-	return handled;
-}
-
-static irqreturn_t pdc20621_interrupt (int irq, void *dev_instance, struct pt_regs *regs)
-{
-	struct ata_host_set *host_set = dev_instance;
-	struct ata_port *ap;
-	u32 mask = 0;
-	unsigned int i, tmp, port_no;
-	unsigned int handled = 0;
-	void *mmio_base;
-
-	VPRINTK("ENTER\n");
-
-	if (!host_set || !host_set->mmio_base) {
-		VPRINTK("QUICK EXIT\n");
-		return IRQ_NONE;
-	}
-
-	mmio_base = host_set->mmio_base;
-
-	/* reading should also clear interrupts */
-	mmio_base += PDC_CHIP0_OFS;
-	mask = readl(mmio_base + PDC_20621_SEQMASK);
-	VPRINTK("mask == 0x%x\n", mask);
-
-	if (mask == 0xffffffff) {
-		VPRINTK("QUICK EXIT 2\n");
-		return IRQ_NONE;
-	}
-	mask &= 0xffff;		/* only 16 tags possible */
-	if (!mask) {
-		VPRINTK("QUICK EXIT 3\n");
-		return IRQ_NONE;
-	}
-
-        spin_lock(&host_set->lock);
-
-        for (i = 1; i < 9; i++) {
-		port_no = i - 1;
-		if (port_no > 3)
-			port_no -= 4;
-		if (port_no >= host_set->n_ports)
-			ap = NULL;
-		else
-			ap = host_set->ports[port_no];
-		tmp = mask & (1 << i);
-		VPRINTK("seq %u, port_no %u, ap %p, tmp %x\n", i, port_no, ap, tmp);
-		if (tmp && ap && (!(ap->flags & ATA_FLAG_PORT_DISABLED))) {
-			struct ata_queued_cmd *qc;
-
-			qc = ata_qc_from_tag(ap, ap->active_tag);
-			if (qc && ((qc->flags & ATA_QCFLAG_POLL) == 0))
-				handled += pdc20621_host_intr(ap, qc, (i > 4),
-							      mmio_base);
-		}
-	}
-
-        spin_unlock(&host_set->lock);
-
-	VPRINTK("mask == 0x%x\n", mask);
-
-	VPRINTK("EXIT\n");
-
-	return IRQ_RETVAL(handled);
-}
-
 static void pdc_fill_sg(struct ata_queued_cmd *qc)
 {
 	struct pdc_port_priv *pp = qc->ap->private_data;
@@ -1014,8 +287,7 @@
 	u8 err_bit = have_err ? ATA_ERR : 0;
 
 	/* get drive status; clear intr; complete txn */
-	ata_qc_complete(ata_qc_from_tag(ap, ap->active_tag),
-			ata_wait_idle(ap) | err_bit, 0);
+	ata_qc_complete(qc, ata_wait_idle(ap) | err_bit);
 }
 
 static void pdc_eng_timeout(struct ata_port *ap)
@@ -1043,8 +315,7 @@
 	switch (qc->tf.protocol) {
 	case ATA_PROT_DMA:
 		printk(KERN_ERR "ata%u: DMA timeout\n", ap->id);
-		ata_qc_complete(ata_qc_from_tag(ap, ap->active_tag),
-			        ata_wait_idle(ap) | ATA_ERR, 0);
+		ata_qc_complete(qc, ata_wait_idle(ap) | ATA_ERR);
 		break;
 
 	case ATA_PROT_NODATA:
@@ -1053,7 +324,7 @@
 		printk(KERN_ERR "ata%u: command 0x%x timeout, stat 0x%x\n",
 		       ap->id, qc->tf.command, drv_stat);
 
-		ata_qc_complete(qc, drv_stat, 1);
+		ata_qc_complete(qc, drv_stat);
 		break;
 
 	default:
@@ -1062,7 +333,7 @@
 		printk(KERN_ERR "ata%u: unknown timeout, cmd 0x%x stat 0x%x\n",
 		       ap->id, qc->tf.command, drv_stat);
 
-		ata_qc_complete(qc, drv_stat, 1);
+		ata_qc_complete(qc, drv_stat);
 		break;
 	}
 
@@ -1095,7 +366,7 @@
 		DPRINTK("BUS_NODATA (drv_stat 0x%X)\n", status);
 		if (have_err)
 			status |= ATA_ERR;
-		ata_qc_complete(qc, status, 0);
+		ata_qc_complete(qc, status);
 		handled = 1;
 		break;
 
@@ -1148,7 +419,7 @@
 			struct ata_queued_cmd *qc;
 
 			qc = ata_qc_from_tag(ap, ap->active_tag);
-			if (qc && ((qc->flags & ATA_QCFLAG_POLL) == 0))
+			if (qc && (!(qc->tf.ctl & ATA_NIEN)))
 				handled += pdc_host_intr(ap, qc);
 		}
 	}
@@ -1160,6 +431,12 @@
 	return IRQ_RETVAL(handled);
 }
 
+static void pdc_dma_setup(struct ata_queued_cmd *qc)
+{
+	/* nothing for now.  later, we will call standard
+	 * code in libata-core for ATAPI here */
+}
+
 static void pdc_dma_start(struct ata_queued_cmd *qc)
 {
 	struct ata_port *ap = qc->ap;
@@ -1210,456 +487,11 @@
 }
 
 
-#ifdef ATA_VERBOSE_DEBUG
-static void pdc20621_get_from_dimm(struct ata_probe_ent *pe, void *psource, 
-				   u32 offset, u32 size)
-{
-	u32 window_size;
-	u16 idx;
-	u8 page_mask;
-	long dist;
-	void *mmio = pe->mmio_base;
-	struct pdc_host_priv *hpriv = pe->private_data;
-	void *dimm_mmio = hpriv->dimm_mmio;
-
-	/* hard-code chip #0 */
-	mmio += PDC_CHIP0_OFS;
-
-	page_mask = 0x00;	
-   	window_size = 0x2000 * 4; /* 32K byte uchar size */  
-	idx = (u16) (offset / window_size); 
-
-	writel(0x01, mmio + PDC_GENERAL_CTLR);
-	readl(mmio + PDC_GENERAL_CTLR);
-	writel(((idx) << page_mask), mmio + PDC_DIMM_WINDOW_CTLR);
-	readl(mmio + PDC_DIMM_WINDOW_CTLR);
-
-	offset -= (idx * window_size);
-	idx++;
-	dist = ((long) (window_size - (offset + size))) >= 0 ? size : 
-		(long) (window_size - offset);
-	memcpy_fromio((char *) psource, (char *) (dimm_mmio + offset / 4), 
-		      dist);
-
-	psource += dist;    
-	size -= dist;
-	for (; (long) size >= (long) window_size ;) {
-		writel(0x01, mmio + PDC_GENERAL_CTLR);
-		readl(mmio + PDC_GENERAL_CTLR);
-		writel(((idx) << page_mask), mmio + PDC_DIMM_WINDOW_CTLR);
-		readl(mmio + PDC_DIMM_WINDOW_CTLR);
-		memcpy_fromio((char *) psource, (char *) (dimm_mmio), 
-			      window_size / 4);
-		psource += window_size;
-		size -= window_size;
-		idx ++;
-	}
-
-	if (size) {
-		writel(0x01, mmio + PDC_GENERAL_CTLR);
-		readl(mmio + PDC_GENERAL_CTLR);
-		writel(((idx) << page_mask), mmio + PDC_DIMM_WINDOW_CTLR);
-		readl(mmio + PDC_DIMM_WINDOW_CTLR);
-		memcpy_fromio((char *) psource, (char *) (dimm_mmio), 
-			      size / 4);
-	}
-}
-#endif
-
-
-static void pdc20621_put_to_dimm(struct ata_probe_ent *pe, void *psource, 
-				 u32 offset, u32 size)
-{
-	u32 window_size;
-	u16 idx;
-	u8 page_mask;
-	long dist;
-	void *mmio = pe->mmio_base;
-	struct pdc_host_priv *hpriv = pe->private_data;
-	void *dimm_mmio = hpriv->dimm_mmio;
-
-	/* hard-code chip #0 */   
-	mmio += PDC_CHIP0_OFS;
-
-	page_mask = 0x00;	
-   	window_size = 0x2000 * 4;       /* 32K byte uchar size */  
-	idx = (u16) (offset / window_size);
-
-	writel(((idx) << page_mask), mmio + PDC_DIMM_WINDOW_CTLR);
-	readl(mmio + PDC_DIMM_WINDOW_CTLR);
-	offset -= (idx * window_size); 
-	idx++;
-	dist = ((long) (window_size - (offset + size))) >= 0 ? size : 
-		(long) (window_size - offset);
-	memcpy_toio((char *) (dimm_mmio + offset / 4), (char *) psource, dist);
-	writel(0x01, mmio + PDC_GENERAL_CTLR);
-	readl(mmio + PDC_GENERAL_CTLR);
-
-	psource += dist;    
-	size -= dist;
-	for (; (long) size >= (long) window_size ;) {
-		writel(((idx) << page_mask), mmio + PDC_DIMM_WINDOW_CTLR);
-		readl(mmio + PDC_DIMM_WINDOW_CTLR);
-		memcpy_toio((char *) (dimm_mmio), (char *) psource, 
-			    window_size / 4);
-		writel(0x01, mmio + PDC_GENERAL_CTLR);
-		readl(mmio + PDC_GENERAL_CTLR);
-		psource += window_size;
-		size -= window_size;
-		idx ++;
-	}
-    
-	if (size) {
-		writel(((idx) << page_mask), mmio + PDC_DIMM_WINDOW_CTLR);
-		readl(mmio + PDC_DIMM_WINDOW_CTLR);
-		memcpy_toio((char *) (dimm_mmio), (char *) psource, size / 4);
-		writel(0x01, mmio + PDC_GENERAL_CTLR);
-		readl(mmio + PDC_GENERAL_CTLR);
-	}
-}
-
-
-static unsigned int pdc20621_i2c_read(struct ata_probe_ent *pe, u32 device, 
-				      u32 subaddr, u32 *pdata)
-{
-	void *mmio = pe->mmio_base;
-	u32 i2creg  = 0;
-	u32 status;     
-	u32 count =0;
-
-	/* hard-code chip #0 */
-	mmio += PDC_CHIP0_OFS;
-
-	i2creg |= device << 24;
-	i2creg |= subaddr << 16;
-
-	/* Set the device and subaddress */
-	writel(i2creg, mmio + PDC_I2C_ADDR_DATA_OFFSET);
-	readl(mmio + PDC_I2C_ADDR_DATA_OFFSET);
-
-	/* Write Control to perform read operation, mask int */
-	writel(PDC_I2C_READ | PDC_I2C_START | PDC_I2C_MASK_INT, 
-	       mmio + PDC_I2C_CONTROL_OFFSET);
-
-	for (count = 0; count <= 1000; count ++) {
-		status = readl(mmio + PDC_I2C_CONTROL_OFFSET);
-		if (status & PDC_I2C_COMPLETE) {
-			status = readl(mmio + PDC_I2C_ADDR_DATA_OFFSET);
-			break;
-		} else if (count == 1000)
-			return 0;
-	}
-
-	*pdata = (status >> 8) & 0x000000ff;
-	return 1;           
-}
-
-
-static int pdc20621_detect_dimm(struct ata_probe_ent *pe)
-{
-	u32 data=0 ;
-  	if (pdc20621_i2c_read(pe, PDC_DIMM0_SPD_DEV_ADDRESS, 
-			     PDC_DIMM_SPD_SYSTEM_FREQ, &data)) {
-   		if (data == 100)
-			return 100;
-  	} else
-		return 0;
- 	
-   	if (pdc20621_i2c_read(pe, PDC_DIMM0_SPD_DEV_ADDRESS, 9, &data)) {
-		if(data <= 0x75) 
-			return 133;
-   	} else
-		return 0;
-   	
-   	return 0;
-}
-
-
-static int pdc20621_prog_dimm0(struct ata_probe_ent *pe)
-{
-	u32 spd0[50];
-	u32 data = 0;
-   	int size, i;
-   	u8 bdimmsize; 
-   	void *mmio = pe->mmio_base;
-	static const struct {
-		unsigned int reg;
-		unsigned int ofs;
-	} pdc_i2c_read_data [] = {
-		{ PDC_DIMM_SPD_TYPE, 11 },		
-		{ PDC_DIMM_SPD_FRESH_RATE, 12 },
-		{ PDC_DIMM_SPD_COLUMN_NUM, 4 }, 
-		{ PDC_DIMM_SPD_ATTRIBUTE, 21 },
-		{ PDC_DIMM_SPD_ROW_NUM, 3 },
-		{ PDC_DIMM_SPD_BANK_NUM, 17 },
-		{ PDC_DIMM_SPD_MODULE_ROW, 5 },
-		{ PDC_DIMM_SPD_ROW_PRE_CHARGE, 27 },
-		{ PDC_DIMM_SPD_ROW_ACTIVE_DELAY, 28 },
-		{ PDC_DIMM_SPD_RAS_CAS_DELAY, 29 },
-		{ PDC_DIMM_SPD_ACTIVE_PRECHARGE, 30 },
-		{ PDC_DIMM_SPD_CAS_LATENCY, 18 },       
-	};
-
-	/* hard-code chip #0 */
-	mmio += PDC_CHIP0_OFS;
-
-	for(i=0; i<ARRAY_SIZE(pdc_i2c_read_data); i++)
-		pdc20621_i2c_read(pe, PDC_DIMM0_SPD_DEV_ADDRESS,
-				  pdc_i2c_read_data[i].reg, 
-				  &spd0[pdc_i2c_read_data[i].ofs]);
-  
-   	data |= (spd0[4] - 8) | ((spd0[21] != 0) << 3) | ((spd0[3]-11) << 4);
-   	data |= ((spd0[17] / 4) << 6) | ((spd0[5] / 2) << 7) | 
-		((((spd0[27] + 9) / 10) - 1) << 8) ;
-   	data |= (((((spd0[29] > spd0[28]) 
-		    ? spd0[29] : spd0[28]) + 9) / 10) - 1) << 10; 
-   	data |= ((spd0[30] - spd0[29] + 9) / 10 - 2) << 12;
-   
-   	if (spd0[18] & 0x08) 
-		data |= ((0x03) << 14);
-   	else if (spd0[18] & 0x04)
-		data |= ((0x02) << 14);
-   	else if (spd0[18] & 0x01)
-		data |= ((0x01) << 14);
-   	else
-		data |= (0 << 14);
-
-  	/* 
-	   Calculate the size of bDIMMSize (power of 2) and
-	   merge the DIMM size by program start/end address.
-	*/
-
-   	bdimmsize = spd0[4] + (spd0[5] / 2) + spd0[3] + (spd0[17] / 2) + 3;
-   	size = (1 << bdimmsize) >> 20;	/* size = xxx(MB) */
-   	data |= (((size / 16) - 1) << 16);
-   	data |= (0 << 23);
-	data |= 8;
-   	writel(data, mmio + PDC_DIMM0_CONTROL_OFFSET); 
-	readl(mmio + PDC_DIMM0_CONTROL_OFFSET);
-   	return size;                          
-}
-
-
-static unsigned int pdc20621_prog_dimm_global(struct ata_probe_ent *pe)
-{
-	u32 data, spd0;
-   	int error, i;
-   	void *mmio = pe->mmio_base;
-
-	/* hard-code chip #0 */
-   	mmio += PDC_CHIP0_OFS;
-
-   	/*
-	  Set To Default : DIMM Module Global Control Register (0x022259F1)
-	  DIMM Arbitration Disable (bit 20)
-	  DIMM Data/Control Output Driving Selection (bit12 - bit15)
-	  Refresh Enable (bit 17)
-	*/
-
-	data = 0x022259F1;   
-	writel(data, mmio + PDC_SDRAM_CONTROL_OFFSET);
-	readl(mmio + PDC_SDRAM_CONTROL_OFFSET);
-
-	/* Turn on for ECC */
-	pdc20621_i2c_read(pe, PDC_DIMM0_SPD_DEV_ADDRESS, 
-			  PDC_DIMM_SPD_TYPE, &spd0);
-	if (spd0 == 0x02) {
-		data |= (0x01 << 16);
-		writel(data, mmio + PDC_SDRAM_CONTROL_OFFSET);
-		readl(mmio + PDC_SDRAM_CONTROL_OFFSET);
-		printk(KERN_ERR "Local DIMM ECC Enabled\n");
-   	}
-
-   	/* DIMM Initialization Select/Enable (bit 18/19) */
-   	data &= (~(1<<18));
-   	data |= (1<<19);
-   	writel(data, mmio + PDC_SDRAM_CONTROL_OFFSET);
-
-   	error = 1;                     
-   	for (i = 1; i <= 10; i++) {   /* polling ~5 secs */
-		data = readl(mmio + PDC_SDRAM_CONTROL_OFFSET);
-		if (!(data & (1<<19))) {
-	   		error = 0;
-	   		break;     
-		}
-		set_current_state(TASK_INTERRUPTIBLE);
-		schedule_timeout((i * 100) * HZ / 1000);
-   	}
-   	return error;
-}
-	
-
-static unsigned int pdc20621_dimm_init(struct ata_probe_ent *pe)
-{
-	int speed, size, length; 
-	u32 addr,spd0,pci_status;
-	u32 tmp=0;
-	u32 time_period=0;
-	u32 tcount=0;
-	u32 ticks=0;
-	u32 clock=0;
-	u32 fparam=0;
-   	void *mmio = pe->mmio_base;
-
-	/* hard-code chip #0 */
-   	mmio += PDC_CHIP0_OFS;
-
-	/* Initialize PLL based upon PCI Bus Frequency */
-
-	/* Initialize Time Period Register */
-	writel(0xffffffff, mmio + PDC_TIME_PERIOD);
-	time_period = readl(mmio + PDC_TIME_PERIOD);
-	VPRINTK("Time Period Register (0x40): 0x%x\n", time_period);
-
-	/* Enable timer */
-	writel(0x00001a0, mmio + PDC_TIME_CONTROL);
-	readl(mmio + PDC_TIME_CONTROL);
-
-	/* Wait 3 seconds */
-	set_current_state(TASK_UNINTERRUPTIBLE);
-	schedule_timeout(3 * HZ);
-
-	/* 
-	   When timer is enabled, counter is decreased every internal
-	   clock cycle.
-	*/
-
-	tcount = readl(mmio + PDC_TIME_COUNTER);
-	VPRINTK("Time Counter Register (0x44): 0x%x\n", tcount);
-
-	/* 
-	   If SX4 is on PCI-X bus, after 3 seconds, the timer counter
-	   register should be >= (0xffffffff - 3x10^8).
-	*/
-	if(tcount >= PCI_X_TCOUNT) {
-		ticks = (time_period - tcount);
-		VPRINTK("Num counters 0x%x (%d)\n", ticks, ticks);
-	
-		clock = (ticks / 300000);
-		VPRINTK("10 * Internal clk = 0x%x (%d)\n", clock, clock);
-		
-		clock = (clock * 33);
-		VPRINTK("10 * Internal clk * 33 = 0x%x (%d)\n", clock, clock);
-
-		/* PLL F Param (bit 22:16) */
-		fparam = (1400000 / clock) - 2;
-		VPRINTK("PLL F Param: 0x%x (%d)\n", fparam, fparam);
-		
-		/* OD param = 0x2 (bit 31:30), R param = 0x5 (bit 29:25) */
-		pci_status = (0x8a001824 | (fparam << 16));
-	} else
-		pci_status = PCI_PLL_INIT;
-
-	/* Initialize PLL. */
-	VPRINTK("pci_status: 0x%x\n", pci_status);
-	writel(pci_status, mmio + PDC_CTL_STATUS);
-	readl(mmio + PDC_CTL_STATUS);
-
-	/* 
-	   Read SPD of DIMM by I2C interface,
-	   and program the DIMM Module Controller.
-	*/
- 	if (!(speed = pdc20621_detect_dimm(pe))) {
-		printk(KERN_ERR "Detect Local DIMM Fail\n");  
-		return 1;	/* DIMM error */
-   	}
-   	VPRINTK("Local DIMM Speed = %d\n", speed);
-
-   	/* Programming DIMM0 Module Control Register (index_CID0:80h) */ 
-   	size = pdc20621_prog_dimm0(pe);
-   	VPRINTK("Local DIMM Size = %dMB\n",size);
-
-   	/* Programming DIMM Module Global Control Register (index_CID0:88h) */ 
-   	if (pdc20621_prog_dimm_global(pe)) {
-		printk(KERN_ERR "Programming DIMM Module Global Control Register Fail\n");
-		return 1;
-   	}
-
-#ifdef ATA_VERBOSE_DEBUG
-	{
-		u8 test_parttern1[40] = {0x55,0xAA,'P','r','o','m','i','s','e',' ',
-  				'N','o','t',' ','Y','e','t',' ','D','e','f','i','n','e','d',' ',
- 				 '1','.','1','0',
-  				'9','8','0','3','1','6','1','2',0,0};
-		u8 test_parttern2[40] = {0};
-
-		pdc20621_put_to_dimm(pe, (void *) test_parttern2, 0x10040, 40);
-		pdc20621_put_to_dimm(pe, (void *) test_parttern2, 0x40, 40);
-
-		pdc20621_put_to_dimm(pe, (void *) test_parttern1, 0x10040, 40);
-		pdc20621_get_from_dimm(pe, (void *) test_parttern2, 0x40, 40);
-		printk(KERN_ERR "%x, %x, %s\n", test_parttern2[0], 
-		       test_parttern2[1], &(test_parttern2[2]));
-		pdc20621_get_from_dimm(pe, (void *) test_parttern2, 0x10040, 
-				       40);
-		printk(KERN_ERR "%x, %x, %s\n", test_parttern2[0], 
-		       test_parttern2[1], &(test_parttern2[2]));
-
-		pdc20621_put_to_dimm(pe, (void *) test_parttern1, 0x40, 40);
-		pdc20621_get_from_dimm(pe, (void *) test_parttern2, 0x40, 40);
-		printk(KERN_ERR "%x, %x, %s\n", test_parttern2[0], 
-		       test_parttern2[1], &(test_parttern2[2]));
-	}
-#endif
-
-	/* ECC initiliazation. */
-
-	pdc20621_i2c_read(pe, PDC_DIMM0_SPD_DEV_ADDRESS, 
-			  PDC_DIMM_SPD_TYPE, &spd0);
-	if (spd0 == 0x02) {
-		VPRINTK("Start ECC initialization\n");
-		addr = 0;
-		length = size * 1024 * 1024;
-		while (addr < length) {
-			pdc20621_put_to_dimm(pe, (void *) &tmp, addr, 
-					     sizeof(u32));
-			addr += sizeof(u32);
-		}
-		VPRINTK("Finish ECC initialization\n");
-	}
-	return 0;
-}
-
-
-static void pdc_20621_init(struct ata_probe_ent *pe)
-{
-	u32 tmp;
-	void *mmio = pe->mmio_base;
-
-	/* hard-code chip #0 */
-	mmio += PDC_CHIP0_OFS;
-
-	/*
-	 * Select page 0x40 for our 32k DIMM window
-	 */
-	tmp = readl(mmio + PDC_20621_DIMM_WINDOW) & 0xffff0000;
-	tmp |= PDC_PAGE_WINDOW;	/* page 40h; arbitrarily selected */
-	writel(tmp, mmio + PDC_20621_DIMM_WINDOW);
-
-	/*
-	 * Reset Host DMA
-	 */
-	tmp = readl(mmio + PDC_HDMA_CTLSTAT);
-	tmp |= PDC_RESET;
-	writel(tmp, mmio + PDC_HDMA_CTLSTAT);
-	readl(mmio + PDC_HDMA_CTLSTAT);		/* flush */
-
-	udelay(10);
-
-	tmp = readl(mmio + PDC_HDMA_CTLSTAT);
-	tmp &= ~PDC_RESET;
-	writel(tmp, mmio + PDC_HDMA_CTLSTAT);
-	readl(mmio + PDC_HDMA_CTLSTAT);		/* flush */
-}
-
 static void pdc_host_init(unsigned int chip_id, struct ata_probe_ent *pe)
 {
 	void *mmio = pe->mmio_base;
 	u32 tmp;
 
-	if (chip_id == board_20621)
-		BUG();
-
 	/*
 	 * Except for the hotplug stuff, this is voodoo from the
 	 * Promise driver.  Label this entire section
@@ -1687,7 +519,7 @@
 
 	readl(mmio + PDC_TBG_MODE);	/* flush */
 	set_current_state(TASK_UNINTERRUPTIBLE);
-	schedule_timeout(msecs_to_jiffies(10));
+	schedule_timeout(msecs_to_jiffies(10) + 1);
 
 	/* adjust slew rate control register. */
 	tmp = readl(mmio + PDC_SLEW_CTL);
@@ -1701,10 +533,8 @@
 	static int printed_version;
 	struct ata_probe_ent *probe_ent = NULL;
 	unsigned long base;
-	void *mmio_base, *dimm_mmio = NULL;
-	struct pdc_host_priv *hpriv = NULL;
+	void *mmio_base;
 	unsigned int board_idx = (unsigned int) ent->driver_data;
-	unsigned int have_20621 = (board_idx == board_20621);
 	int rc;
 
 	if (!printed_version++)
@@ -1747,25 +577,6 @@
 	}
 	base = (unsigned long) mmio_base;
 
-	if (have_20621) {
-		hpriv = kmalloc(sizeof(*hpriv), GFP_KERNEL);
-		if (!hpriv) {
-			rc = -ENOMEM;
-			goto err_out_iounmap;
-		}
-		memset(hpriv, 0, sizeof(*hpriv));
-
-		dimm_mmio = ioremap(pci_resource_start(pdev, 4),
-				    pci_resource_len(pdev, 4));
-		if (!dimm_mmio) {
-			kfree(hpriv);
-			rc = -ENOMEM;
-			goto err_out_iounmap;
-		}
-
-		hpriv->dimm_mmio = dimm_mmio;
-	}
-
 	probe_ent->sht		= pdc_port_info[board_idx].sht;
 	probe_ent->host_flags	= pdc_port_info[board_idx].host_flags;
 	probe_ent->pio_mask	= pdc_port_info[board_idx].pio_mask;
@@ -1776,32 +587,22 @@
        	probe_ent->irq_flags = SA_SHIRQ;
 	probe_ent->mmio_base = mmio_base;
 
-	if (have_20621) {
-		probe_ent->private_data = hpriv;
-		base += PDC_CHIP0_OFS;
-	}
-
 	pdc_sata_setup_port(&probe_ent->port[0], base + 0x200);
 	pdc_sata_setup_port(&probe_ent->port[1], base + 0x280);
 
-	if (!have_20621) {
-		probe_ent->port[0].scr_addr = base + 0x400;
-		probe_ent->port[1].scr_addr = base + 0x500;
-	}
+	probe_ent->port[0].scr_addr = base + 0x400;
+	probe_ent->port[1].scr_addr = base + 0x500;
 
 	/* notice 4-port boards */
 	switch (board_idx) {
 	case board_20319:
-	case board_20621:
        		probe_ent->n_ports = 4;
 
 		pdc_sata_setup_port(&probe_ent->port[2], base + 0x300);
 		pdc_sata_setup_port(&probe_ent->port[3], base + 0x380);
 
-		if (!have_20621) {
-			probe_ent->port[2].scr_addr = base + 0x600;
-			probe_ent->port[3].scr_addr = base + 0x700;
-		}
+		probe_ent->port[2].scr_addr = base + 0x600;
+		probe_ent->port[3].scr_addr = base + 0x700;
 		break;
 	case board_2037x:
        		probe_ent->n_ports = 2;
@@ -1814,15 +615,7 @@
 	pci_set_master(pdev);
 
 	/* initialize adapter */
-	if (have_20621) {
-		/* initialize local dimm */
-		if (pdc20621_dimm_init(probe_ent)) {
-			rc = -ENOMEM;
-			goto err_out_iounmap_dimm;
-		}
-		pdc_20621_init(probe_ent);
-	} else
-		pdc_host_init(board_idx, probe_ent);
+	pdc_host_init(board_idx, probe_ent);
 
 	/* FIXME: check ata_device_add return value */
 	ata_device_add(probe_ent);
@@ -1830,11 +623,6 @@
 
 	return 0;
 
-err_out_iounmap_dimm:		/* only get to this label if 20621 */
-	kfree(hpriv);
-	iounmap(dimm_mmio);
-err_out_iounmap:
-	iounmap(mmio_base);
 err_out_free_ent:
 	kfree(probe_ent);
 err_out_regions:
@@ -1858,7 +646,7 @@
 
 
 MODULE_AUTHOR("Jeff Garzik");
-MODULE_DESCRIPTION("Promise SATA low-level driver");
+MODULE_DESCRIPTION("Promise SATA TX2/TX4 low-level driver");
 MODULE_LICENSE("GPL");
 MODULE_DEVICE_TABLE(pci, pdc_sata_pci_tbl);
 
diff -Nru a/drivers/scsi/sata_promise.h b/drivers/scsi/sata_promise.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/drivers/scsi/sata_promise.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,154 @@
+/*
+ *  sata_promise.h - Promise SATA common definitions and inline funcs
+ *
+ *  Copyright 2003-2004 Red Hat, Inc.
+ *
+ *  The contents of this file are subject to the Open
+ *  Software License version 1.1 that can be found at
+ *  http://www.opensource.org/licenses/osl-1.1.txt and is included herein
+ *  by reference.
+ *
+ *  Alternatively, the contents of this file may be used under the terms
+ *  of the GNU General Public License version 2 (the "GPL") as distributed
+ *  in the kernel source COPYING file, in which case the provisions of
+ *  the GPL are applicable instead of the above.  If you wish to allow
+ *  the use of your version of this file only under the terms of the
+ *  GPL and not to allow others to use your version of this file under
+ *  the OSL, indicate your decision by deleting the provisions above and
+ *  replace them with the notice and other provisions required by the GPL.
+ *  If you do not delete the provisions above, a recipient may use your
+ *  version of this file under either the OSL or the GPL.
+ *
+ */
+
+#ifndef __SATA_PROMISE_H__
+#define __SATA_PROMISE_H__
+
+#include <linux/ata.h>
+
+enum pdc_packet_bits {
+	PDC_PKT_READ		= (1 << 2),
+	PDC_PKT_NODATA		= (1 << 3),
+
+	PDC_PKT_SIZEMASK	= (1 << 7) | (1 << 6) | (1 << 5),
+	PDC_PKT_CLEAR_BSY	= (1 << 4),
+	PDC_PKT_WAIT_DRDY	= (1 << 3) | (1 << 4),
+	PDC_LAST_REG		= (1 << 3),
+
+	PDC_REG_DEVCTL		= (1 << 3) | (1 << 2) | (1 << 1),
+};
+
+static inline unsigned int pdc_pkt_header(struct ata_taskfile *tf,
+					  dma_addr_t sg_table,
+					  unsigned int devno, u8 *buf)
+{
+	u8 dev_reg;
+	u32 *buf32 = (u32 *) buf;
+
+	/* set control bits (byte 0), zero delay seq id (byte 3),
+	 * and seq id (byte 2)
+	 */
+	switch (tf->protocol) {
+	case ATA_PROT_DMA:
+		if (!(tf->flags & ATA_TFLAG_WRITE))
+			buf32[0] = cpu_to_le32(PDC_PKT_READ);
+		else
+			buf32[0] = 0;
+		break;
+
+	case ATA_PROT_NODATA:
+		buf32[0] = cpu_to_le32(PDC_PKT_NODATA);
+		break;
+
+	default:
+		BUG();
+		break;
+	}
+
+	buf32[1] = cpu_to_le32(sg_table);	/* S/G table addr */
+	buf32[2] = 0;				/* no next-packet */
+
+	if (devno == 0)
+		dev_reg = ATA_DEVICE_OBS;
+	else
+		dev_reg = ATA_DEVICE_OBS | ATA_DEV1;
+
+	/* select device */
+	buf[12] = (1 << 5) | PDC_PKT_CLEAR_BSY | ATA_REG_DEVICE;
+	buf[13] = dev_reg;
+
+	/* device control register */
+	buf[14] = (1 << 5) | PDC_REG_DEVCTL;
+	buf[15] = tf->ctl;
+
+	return 16; 	/* offset of next byte */
+}
+
+static inline unsigned int pdc_pkt_footer(struct ata_taskfile *tf, u8 *buf,
+				  unsigned int i)
+{
+	if (tf->flags & ATA_TFLAG_DEVICE) {
+		buf[i++] = (1 << 5) | ATA_REG_DEVICE;
+		buf[i++] = tf->device;
+	}
+
+	/* and finally the command itself; also includes end-of-pkt marker */
+	buf[i++] = (1 << 5) | PDC_LAST_REG | ATA_REG_CMD;
+	buf[i++] = tf->command;
+
+	return i;
+}
+
+static inline unsigned int pdc_prep_lba28(struct ata_taskfile *tf, u8 *buf, unsigned int i)
+{
+	/* the "(1 << 5)" should be read "(count << 5)" */
+
+	/* ATA command block registers */
+	buf[i++] = (1 << 5) | ATA_REG_FEATURE;
+	buf[i++] = tf->feature;
+
+	buf[i++] = (1 << 5) | ATA_REG_NSECT;
+	buf[i++] = tf->nsect;
+
+	buf[i++] = (1 << 5) | ATA_REG_LBAL;
+	buf[i++] = tf->lbal;
+
+	buf[i++] = (1 << 5) | ATA_REG_LBAM;
+	buf[i++] = tf->lbam;
+
+	buf[i++] = (1 << 5) | ATA_REG_LBAH;
+	buf[i++] = tf->lbah;
+
+	return i;
+}
+
+static inline unsigned int pdc_prep_lba48(struct ata_taskfile *tf, u8 *buf, unsigned int i)
+{
+	/* the "(2 << 5)" should be read "(count << 5)" */
+
+	/* ATA command block registers */
+	buf[i++] = (2 << 5) | ATA_REG_FEATURE;
+	buf[i++] = tf->hob_feature;
+	buf[i++] = tf->feature;
+
+	buf[i++] = (2 << 5) | ATA_REG_NSECT;
+	buf[i++] = tf->hob_nsect;
+	buf[i++] = tf->nsect;
+
+	buf[i++] = (2 << 5) | ATA_REG_LBAL;
+	buf[i++] = tf->hob_lbal;
+	buf[i++] = tf->lbal;
+
+	buf[i++] = (2 << 5) | ATA_REG_LBAM;
+	buf[i++] = tf->hob_lbam;
+	buf[i++] = tf->lbam;
+
+	buf[i++] = (2 << 5) | ATA_REG_LBAH;
+	buf[i++] = tf->hob_lbah;
+	buf[i++] = tf->lbah;
+
+	return i;
+}
+
+
+#endif /* __SATA_PROMISE_H__ */
diff -Nru a/drivers/scsi/sata_sil.c b/drivers/scsi/sata_sil.c
--- a/drivers/scsi/sata_sil.c	Sun May 16 01:18:33 2004
+++ b/drivers/scsi/sata_sil.c	Sun May 16 01:18:33 2004
@@ -1,5 +1,9 @@
 /*
- *  ata_sil.c - Silicon Image SATA
+ *  sata_sil.c - Silicon Image SATA
+ *
+ *  Maintained by:  Jeff Garzik <jgarzik@pobox.com>
+ *  		    Please ALWAYS copy linux-ide@vger.kernel.org
+ *		    on emails.
  *
  *  Copyright 2003 Red Hat, Inc.
  *  Copyright 2003 Benjamin Herrenschmidt <benh@kernel.crashing.org>
@@ -125,6 +129,7 @@
 	.exec_command		= ata_exec_command_mmio,
 	.phy_reset		= sata_phy_reset,
 	.post_set_mode		= sil_post_set_mode,
+	.bmdma_setup            = ata_bmdma_setup_mmio,
 	.bmdma_start            = ata_bmdma_start_mmio,
 	.fill_sg		= ata_fill_sg,
 	.eng_timeout		= ata_eng_timeout,
diff -Nru a/drivers/scsi/sata_sis.c b/drivers/scsi/sata_sis.c
--- a/drivers/scsi/sata_sis.c	Sun May 16 01:18:35 2004
+++ b/drivers/scsi/sata_sis.c	Sun May 16 01:18:35 2004
@@ -1,6 +1,10 @@
 /*
  *  sata_sis.c - Silicon Integrated Systems SATA
  *
+ *  Maintained by:  Uwe Koziolek
+ *  		    Please ALWAYS copy linux-ide@vger.kernel.org
+ *		    on emails.
+ *
  *  Copyright 2004 Uwe Koziolek
  *
  *  The contents of this file are subject to the Open
@@ -56,7 +60,8 @@
 static void sis_scr_write (struct ata_port *ap, unsigned int sc_reg, u32 val);
 
 static struct pci_device_id sis_pci_tbl[] = {
-	{ PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_180, PCI_ANY_ID, PCI_ANY_ID, 0, 0, sis_180 },
+	{ PCI_VENDOR_ID_SI, 0x180, PCI_ANY_ID, PCI_ANY_ID, 0, 0, sis_180 },
+	{ PCI_VENDOR_ID_SI, 0x181, PCI_ANY_ID, PCI_ANY_ID, 0, 0, sis_180 },
 	{ }	/* terminate list */
 };
 
@@ -93,6 +98,7 @@
 	.check_status		= ata_check_status_pio,
 	.exec_command		= ata_exec_command_pio,
 	.phy_reset		= sata_phy_reset,
+	.bmdma_setup            = ata_bmdma_setup_pio,
 	.bmdma_start            = ata_bmdma_start_pio,
 	.fill_sg		= ata_fill_sg,
 	.eng_timeout		= ata_eng_timeout,
diff -Nru a/drivers/scsi/sata_svw.c b/drivers/scsi/sata_svw.c
--- a/drivers/scsi/sata_svw.c	Sun May 16 01:18:35 2004
+++ b/drivers/scsi/sata_svw.c	Sun May 16 01:18:35 2004
@@ -1,5 +1,10 @@
 /*
- *  ata_k2.c - Broadcom (Apple K2) SATA
+ *  sata_svw.c - ServerWorks / Apple K2 SATA
+ *
+ *  Maintained by: Benjamin Herrenschmidt <benh@kernel.crashing.org> and
+ *		   Jeff Garzik <jgarzik@pobox.com>
+ *  		    Please ALWAYS copy linux-ide@vger.kernel.org
+ *		    on emails.
  *
  *  Copyright 2003 Benjamin Herrenschmidt <benh@kernel.crashing.org>
  *
@@ -226,6 +231,7 @@
 	.check_status		= k2_stat_check_status,
 	.exec_command		= ata_exec_command_mmio,
 	.phy_reset		= sata_phy_reset,
+	.bmdma_setup            = ata_bmdma_setup_mmio,
 	.bmdma_start            = ata_bmdma_start_mmio,
 	.fill_sg		= ata_fill_sg,
 	.eng_timeout		= ata_eng_timeout,
diff -Nru a/drivers/scsi/sata_sx4.c b/drivers/scsi/sata_sx4.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/drivers/scsi/sata_sx4.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,1446 @@
+/*
+ *  sata_sx4.c - Promise SATA
+ *
+ *  Maintained by:  Jeff Garzik <jgarzik@pobox.com>
+ *  		    Please ALWAYS copy linux-ide@vger.kernel.org
+ *		    on emails.
+ *
+ *  Copyright 2003-2004 Red Hat, Inc.
+ *
+ *  The contents of this file are subject to the Open
+ *  Software License version 1.1 that can be found at
+ *  http://www.opensource.org/licenses/osl-1.1.txt and is included herein
+ *  by reference.
+ *
+ *  Alternatively, the contents of this file may be used under the terms
+ *  of the GNU General Public License version 2 (the "GPL") as distributed
+ *  in the kernel source COPYING file, in which case the provisions of
+ *  the GPL are applicable instead of the above.  If you wish to allow
+ *  the use of your version of this file only under the terms of the
+ *  GPL and not to allow others to use your version of this file under
+ *  the OSL, indicate your decision by deleting the provisions above and
+ *  replace them with the notice and other provisions required by the GPL.
+ *  If you do not delete the provisions above, a recipient may use your
+ *  version of this file under either the OSL or the GPL.
+ *
+ */
+
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/pci.h>
+#include <linux/init.h>
+#include <linux/blkdev.h>
+#include <linux/delay.h>
+#include <linux/interrupt.h>
+#include <linux/sched.h>
+#include "scsi.h"
+#include "hosts.h"
+#include <linux/libata.h>
+#include <asm/io.h>
+#include "sata_promise.h"
+
+#define DRV_NAME	"sata_sx4"
+#define DRV_VERSION	"0.50"
+
+
+enum {
+	PDC_PRD_TBL		= 0x44,	/* Direct command DMA table addr */
+
+	PDC_PKT_SUBMIT		= 0x40, /* Command packet pointer addr */
+	PDC_HDMA_PKT_SUBMIT	= 0x100, /* Host DMA packet pointer addr */
+	PDC_INT_SEQMASK		= 0x40,	/* Mask of asserted SEQ INTs */
+	PDC_HDMA_CTLSTAT	= 0x12C, /* Host DMA control / status */
+
+	PDC_20621_SEQCTL	= 0x400,
+	PDC_20621_SEQMASK	= 0x480,
+	PDC_20621_GENERAL_CTL	= 0x484,
+	PDC_20621_PAGE_SIZE	= (32 * 1024),
+
+	/* chosen, not constant, values; we design our own DIMM mem map */
+	PDC_20621_DIMM_WINDOW	= 0x0C,	/* page# for 32K DIMM window */
+	PDC_20621_DIMM_BASE	= 0x00200000,
+	PDC_20621_DIMM_DATA	= (64 * 1024),
+	PDC_DIMM_DATA_STEP	= (256 * 1024),
+	PDC_DIMM_WINDOW_STEP	= (8 * 1024),
+	PDC_DIMM_HOST_PRD	= (6 * 1024),
+	PDC_DIMM_HOST_PKT	= (128 * 0),
+	PDC_DIMM_HPKT_PRD	= (128 * 1),
+	PDC_DIMM_ATA_PKT	= (128 * 2),
+	PDC_DIMM_APKT_PRD	= (128 * 3),
+	PDC_DIMM_HEADER_SZ	= PDC_DIMM_APKT_PRD + 128,
+	PDC_PAGE_WINDOW		= 0x40,
+	PDC_PAGE_DATA		= PDC_PAGE_WINDOW +
+				  (PDC_20621_DIMM_DATA / PDC_20621_PAGE_SIZE),
+	PDC_PAGE_SET		= PDC_DIMM_DATA_STEP / PDC_20621_PAGE_SIZE,
+
+	PDC_CHIP0_OFS		= 0xC0000, /* offset of chip #0 */
+
+	PDC_20621_ERR_MASK	= (1<<19) | (1<<20) | (1<<21) | (1<<22) |
+				  (1<<23),
+
+	board_20621		= 0,	/* FastTrak S150 SX4 */
+
+	PDC_RESET		= (1 << 11), /* HDMA reset */
+
+	PDC_MAX_HDMA		= 32,
+	PDC_HDMA_Q_MASK		= (PDC_MAX_HDMA - 1),
+
+	PDC_DIMM0_SPD_DEV_ADDRESS     = 0x50,
+	PDC_DIMM1_SPD_DEV_ADDRESS     = 0x51,
+	PDC_MAX_DIMM_MODULE           = 0x02,
+	PDC_I2C_CONTROL_OFFSET        = 0x48,
+	PDC_I2C_ADDR_DATA_OFFSET      = 0x4C,
+	PDC_DIMM0_CONTROL_OFFSET      = 0x80,
+	PDC_DIMM1_CONTROL_OFFSET      = 0x84,
+	PDC_SDRAM_CONTROL_OFFSET      = 0x88,
+	PDC_I2C_WRITE                 = 0x00000000,
+	PDC_I2C_READ                  = 0x00000040,	
+	PDC_I2C_START                 = 0x00000080,
+	PDC_I2C_MASK_INT              = 0x00000020,
+	PDC_I2C_COMPLETE              = 0x00010000,
+	PDC_I2C_NO_ACK                = 0x00100000,
+	PDC_DIMM_SPD_SUBADDRESS_START = 0x00,
+	PDC_DIMM_SPD_SUBADDRESS_END   = 0x7F,
+	PDC_DIMM_SPD_ROW_NUM          = 3,
+	PDC_DIMM_SPD_COLUMN_NUM       = 4,
+	PDC_DIMM_SPD_MODULE_ROW       = 5,
+	PDC_DIMM_SPD_TYPE             = 11,
+	PDC_DIMM_SPD_FRESH_RATE       = 12,         
+	PDC_DIMM_SPD_BANK_NUM         = 17,	
+	PDC_DIMM_SPD_CAS_LATENCY      = 18,
+	PDC_DIMM_SPD_ATTRIBUTE        = 21,    
+	PDC_DIMM_SPD_ROW_PRE_CHARGE   = 27,
+	PDC_DIMM_SPD_ROW_ACTIVE_DELAY = 28,      
+	PDC_DIMM_SPD_RAS_CAS_DELAY    = 29,
+	PDC_DIMM_SPD_ACTIVE_PRECHARGE = 30,
+	PDC_DIMM_SPD_SYSTEM_FREQ      = 126,
+	PDC_CTL_STATUS		      = 0x08,	
+	PDC_DIMM_WINDOW_CTLR	      = 0x0C,
+	PDC_TIME_CONTROL              = 0x3C,
+	PDC_TIME_PERIOD               = 0x40,
+	PDC_TIME_COUNTER              = 0x44,
+	PDC_GENERAL_CTLR	      = 0x484,
+	PCI_PLL_INIT                  = 0x8A531824,
+	PCI_X_TCOUNT                  = 0xEE1E5CFF
+};
+
+
+struct pdc_port_priv {
+	u8			dimm_buf[(ATA_PRD_SZ * ATA_MAX_PRD) + 512];
+	u8			*pkt;
+	dma_addr_t		pkt_dma;
+};
+
+struct pdc_host_priv {
+	void			*dimm_mmio;
+
+	unsigned int		doing_hdma;
+	unsigned int		hdma_prod;
+	unsigned int		hdma_cons;
+	struct {
+		struct ata_queued_cmd *qc;
+		unsigned int	seq;
+		unsigned long	pkt_ofs;
+	} hdma[32];
+};
+
+
+static int pdc_sata_init_one (struct pci_dev *pdev, const struct pci_device_id *ent);
+static void pdc20621_dma_setup(struct ata_queued_cmd *qc);
+static void pdc20621_dma_start(struct ata_queued_cmd *qc);
+static irqreturn_t pdc20621_interrupt (int irq, void *dev_instance, struct pt_regs *regs);
+static void pdc_eng_timeout(struct ata_port *ap);
+static void pdc_20621_phy_reset (struct ata_port *ap);
+static int pdc_port_start(struct ata_port *ap);
+static void pdc_port_stop(struct ata_port *ap);
+static void pdc20621_fill_sg(struct ata_queued_cmd *qc);
+static void pdc_tf_load_mmio(struct ata_port *ap, struct ata_taskfile *tf);
+static void pdc_exec_command_mmio(struct ata_port *ap, struct ata_taskfile *tf);
+static void pdc20621_host_stop(struct ata_host_set *host_set);
+static inline void pdc_dma_complete (struct ata_port *ap,
+                                     struct ata_queued_cmd *qc, int have_err);
+static unsigned int pdc20621_dimm_init(struct ata_probe_ent *pe);
+static int pdc20621_detect_dimm(struct ata_probe_ent *pe);
+static unsigned int pdc20621_i2c_read(struct ata_probe_ent *pe, 
+				      u32 device, u32 subaddr, u32 *pdata);
+static int pdc20621_prog_dimm0(struct ata_probe_ent *pe);
+static unsigned int pdc20621_prog_dimm_global(struct ata_probe_ent *pe);
+#ifdef ATA_VERBOSE_DEBUG
+static void pdc20621_get_from_dimm(struct ata_probe_ent *pe, 
+				   void *psource, u32 offset, u32 size);
+#endif
+static void pdc20621_put_to_dimm(struct ata_probe_ent *pe, 
+				 void *psource, u32 offset, u32 size);
+
+
+static Scsi_Host_Template pdc_sata_sht = {
+	.module			= THIS_MODULE,
+	.name			= DRV_NAME,
+	.queuecommand		= ata_scsi_queuecmd,
+	.eh_strategy_handler	= ata_scsi_error,
+	.can_queue		= ATA_DEF_QUEUE,
+	.this_id		= ATA_SHT_THIS_ID,
+	.sg_tablesize		= LIBATA_MAX_PRD,
+	.max_sectors		= ATA_MAX_SECTORS,
+	.cmd_per_lun		= ATA_SHT_CMD_PER_LUN,
+	.emulated		= ATA_SHT_EMULATED,
+	.use_clustering		= ATA_SHT_USE_CLUSTERING,
+	.proc_name		= DRV_NAME,
+	.dma_boundary		= ATA_DMA_BOUNDARY,
+	.slave_configure	= ata_scsi_slave_config,
+	.bios_param		= ata_std_bios_param,
+};
+
+static struct ata_port_operations pdc_20621_ops = {
+	.port_disable		= ata_port_disable,
+	.tf_load		= pdc_tf_load_mmio,
+	.tf_read		= ata_tf_read_mmio,
+	.check_status		= ata_check_status_mmio,
+	.exec_command		= pdc_exec_command_mmio,
+	.phy_reset		= pdc_20621_phy_reset,
+	.bmdma_setup            = pdc20621_dma_setup,
+	.bmdma_start            = pdc20621_dma_start,
+	.fill_sg		= pdc20621_fill_sg,
+	.eng_timeout		= pdc_eng_timeout,
+	.irq_handler		= pdc20621_interrupt,
+	.port_start		= pdc_port_start,
+	.port_stop		= pdc_port_stop,
+	.host_stop		= pdc20621_host_stop,
+};
+
+static struct ata_port_info pdc_port_info[] = {
+	/* board_20621 */
+	{
+		.sht		= &pdc_sata_sht,
+		.host_flags	= ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
+				  ATA_FLAG_SRST | ATA_FLAG_MMIO,
+		.pio_mask	= 0x03, /* pio3-4 */
+		.udma_mask	= 0x7f, /* udma0-6 ; FIXME */
+		.port_ops	= &pdc_20621_ops,
+	},
+
+};
+
+static struct pci_device_id pdc_sata_pci_tbl[] = {
+	{ PCI_VENDOR_ID_PROMISE, 0x6622, PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+	  board_20621 },
+	{ }	/* terminate list */
+};
+
+
+static struct pci_driver pdc_sata_pci_driver = {
+	.name			= DRV_NAME,
+	.id_table		= pdc_sata_pci_tbl,
+	.probe			= pdc_sata_init_one,
+	.remove			= ata_pci_remove_one,
+};
+
+
+static void pdc20621_host_stop(struct ata_host_set *host_set)
+{
+	struct pdc_host_priv *hpriv = host_set->private_data;
+	void *dimm_mmio = hpriv->dimm_mmio;
+
+	iounmap(dimm_mmio);
+	kfree(hpriv);
+}
+
+static int pdc_port_start(struct ata_port *ap)
+{
+	struct pci_dev *pdev = ap->host_set->pdev;
+	struct pdc_port_priv *pp;
+	int rc;
+
+	rc = ata_port_start(ap);
+	if (rc)
+		return rc;
+
+	pp = kmalloc(sizeof(*pp), GFP_KERNEL);
+	if (!pp) {
+		rc = -ENOMEM;
+		goto err_out;
+	}
+	memset(pp, 0, sizeof(*pp));
+
+	pp->pkt = pci_alloc_consistent(pdev, 128, &pp->pkt_dma);
+	if (!pp->pkt) {
+		rc = -ENOMEM;
+		goto err_out_kfree;
+	}
+
+	ap->private_data = pp;
+
+	return 0;
+
+err_out_kfree:
+	kfree(pp);
+err_out:
+	ata_port_stop(ap);
+	return rc;
+}
+
+
+static void pdc_port_stop(struct ata_port *ap)
+{
+	struct pci_dev *pdev = ap->host_set->pdev;
+	struct pdc_port_priv *pp = ap->private_data;
+
+	ap->private_data = NULL;
+	pci_free_consistent(pdev, 128, pp->pkt, pp->pkt_dma);
+	kfree(pp);
+	ata_port_stop(ap);
+}
+
+
+static void pdc_20621_phy_reset (struct ata_port *ap)
+{
+	VPRINTK("ENTER\n");
+        ap->cbl = ATA_CBL_SATA;
+        ata_port_probe(ap);
+        ata_bus_reset(ap);
+}
+
+static inline void pdc20621_ata_sg(struct ata_taskfile *tf, u8 *buf,
+				    	   unsigned int portno,
+					   unsigned int total_len)
+{
+	u32 addr;
+	unsigned int dw = PDC_DIMM_APKT_PRD >> 2;
+	u32 *buf32 = (u32 *) buf;
+
+	/* output ATA packet S/G table */
+	addr = PDC_20621_DIMM_BASE + PDC_20621_DIMM_DATA +
+	       (PDC_DIMM_DATA_STEP * portno);
+	VPRINTK("ATA sg addr 0x%x, %d\n", addr, addr);
+	buf32[dw] = cpu_to_le32(addr);
+	buf32[dw + 1] = cpu_to_le32(total_len | ATA_PRD_EOT);
+
+	VPRINTK("ATA PSG @ %x == (0x%x, 0x%x)\n",
+		PDC_20621_DIMM_BASE +
+		       (PDC_DIMM_WINDOW_STEP * portno) +
+		       PDC_DIMM_APKT_PRD,
+		buf32[dw], buf32[dw + 1]);
+}
+
+static inline void pdc20621_host_sg(struct ata_taskfile *tf, u8 *buf,
+				    	    unsigned int portno,
+					    unsigned int total_len)
+{
+	u32 addr;
+	unsigned int dw = PDC_DIMM_HPKT_PRD >> 2;
+	u32 *buf32 = (u32 *) buf;
+
+	/* output Host DMA packet S/G table */
+	addr = PDC_20621_DIMM_BASE + PDC_20621_DIMM_DATA +
+	       (PDC_DIMM_DATA_STEP * portno);
+
+	buf32[dw] = cpu_to_le32(addr);
+	buf32[dw + 1] = cpu_to_le32(total_len | ATA_PRD_EOT);
+
+	VPRINTK("HOST PSG @ %x == (0x%x, 0x%x)\n",
+		PDC_20621_DIMM_BASE +
+		       (PDC_DIMM_WINDOW_STEP * portno) +
+		       PDC_DIMM_HPKT_PRD,
+		buf32[dw], buf32[dw + 1]);
+}
+
+static inline unsigned int pdc20621_ata_pkt(struct ata_taskfile *tf,
+					    unsigned int devno, u8 *buf,
+					    unsigned int portno)
+{
+	unsigned int i, dw;
+	u32 *buf32 = (u32 *) buf;
+	u8 dev_reg;
+
+	unsigned int dimm_sg = PDC_20621_DIMM_BASE +
+			       (PDC_DIMM_WINDOW_STEP * portno) +
+			       PDC_DIMM_APKT_PRD;
+	VPRINTK("ENTER, dimm_sg == 0x%x, %d\n", dimm_sg, dimm_sg);
+
+	i = PDC_DIMM_ATA_PKT;
+
+	/*
+	 * Set up ATA packet
+	 */
+	if ((tf->protocol == ATA_PROT_DMA) && (!(tf->flags & ATA_TFLAG_WRITE)))
+		buf[i++] = PDC_PKT_READ;
+	else if (tf->protocol == ATA_PROT_NODATA)
+		buf[i++] = PDC_PKT_NODATA;
+	else
+		buf[i++] = 0;
+	buf[i++] = 0;			/* reserved */
+	buf[i++] = portno + 1;		/* seq. id */
+	buf[i++] = 0xff;		/* delay seq. id */
+
+	/* dimm dma S/G, and next-pkt */
+	dw = i >> 2;
+	buf32[dw] = cpu_to_le32(dimm_sg);
+	buf32[dw + 1] = 0;
+	i += 8;
+
+	if (devno == 0)
+		dev_reg = ATA_DEVICE_OBS;
+	else
+		dev_reg = ATA_DEVICE_OBS | ATA_DEV1;
+
+	/* select device */
+	buf[i++] = (1 << 5) | PDC_PKT_CLEAR_BSY | ATA_REG_DEVICE;
+	buf[i++] = dev_reg;
+
+	/* device control register */
+	buf[i++] = (1 << 5) | PDC_REG_DEVCTL;
+	buf[i++] = tf->ctl;
+
+	return i;
+}
+
+static inline void pdc20621_host_pkt(struct ata_taskfile *tf, u8 *buf,
+				     unsigned int portno)
+{
+	unsigned int dw;
+	u32 tmp, *buf32 = (u32 *) buf;
+
+	unsigned int host_sg = PDC_20621_DIMM_BASE +
+			       (PDC_DIMM_WINDOW_STEP * portno) +
+			       PDC_DIMM_HOST_PRD;
+	unsigned int dimm_sg = PDC_20621_DIMM_BASE +
+			       (PDC_DIMM_WINDOW_STEP * portno) +
+			       PDC_DIMM_HPKT_PRD;
+	VPRINTK("ENTER, dimm_sg == 0x%x, %d\n", dimm_sg, dimm_sg);
+	VPRINTK("host_sg == 0x%x, %d\n", host_sg, host_sg);
+
+	dw = PDC_DIMM_HOST_PKT >> 2;
+
+	/*
+	 * Set up Host DMA packet
+	 */
+	if ((tf->protocol == ATA_PROT_DMA) && (!(tf->flags & ATA_TFLAG_WRITE)))
+		tmp = PDC_PKT_READ;
+	else
+		tmp = 0;
+	tmp |= ((portno + 1 + 4) << 16);	/* seq. id */
+	tmp |= (0xff << 24);			/* delay seq. id */
+	buf32[dw + 0] = cpu_to_le32(tmp);
+	buf32[dw + 1] = cpu_to_le32(host_sg);
+	buf32[dw + 2] = cpu_to_le32(dimm_sg);
+	buf32[dw + 3] = 0;
+
+	VPRINTK("HOST PKT @ %x == (0x%x 0x%x 0x%x 0x%x)\n",
+		PDC_20621_DIMM_BASE + (PDC_DIMM_WINDOW_STEP * portno) +
+			PDC_DIMM_HOST_PKT,
+		buf32[dw + 0],
+		buf32[dw + 1],
+		buf32[dw + 2],
+		buf32[dw + 3]);
+}
+
+static void pdc20621_fill_sg(struct ata_queued_cmd *qc)
+{
+	struct scatterlist *sg = qc->sg;
+	struct ata_port *ap = qc->ap;
+	struct pdc_port_priv *pp = ap->private_data;
+	void *mmio = ap->host_set->mmio_base;
+	struct pdc_host_priv *hpriv = ap->host_set->private_data;
+	void *dimm_mmio = hpriv->dimm_mmio;
+	unsigned int portno = ap->port_no;
+	unsigned int i, last, idx, total_len = 0, sgt_len;
+	u32 *buf = (u32 *) &pp->dimm_buf[PDC_DIMM_HEADER_SZ];
+
+	VPRINTK("ata%u: ENTER\n", ap->id);
+
+	/* hard-code chip #0 */
+	mmio += PDC_CHIP0_OFS;
+
+	/*
+	 * Build S/G table
+	 */
+	last = qc->n_elem;
+	idx = 0;
+	for (i = 0; i < last; i++) {
+		buf[idx++] = cpu_to_le32(sg_dma_address(&sg[i]));
+		buf[idx++] = cpu_to_le32(sg_dma_len(&sg[i]));
+		total_len += sg[i].length;
+	}
+	buf[idx - 1] |= cpu_to_le32(ATA_PRD_EOT);
+	sgt_len = idx * 4;
+
+	/*
+	 * Build ATA, host DMA packets
+	 */
+	pdc20621_host_sg(&qc->tf, &pp->dimm_buf[0], portno, total_len);
+	pdc20621_host_pkt(&qc->tf, &pp->dimm_buf[0], portno);
+
+	pdc20621_ata_sg(&qc->tf, &pp->dimm_buf[0], portno, total_len);
+	i = pdc20621_ata_pkt(&qc->tf, qc->dev->devno, &pp->dimm_buf[0], portno);
+
+	if (qc->tf.flags & ATA_TFLAG_LBA48)
+		i = pdc_prep_lba48(&qc->tf, &pp->dimm_buf[0], i);
+	else
+		i = pdc_prep_lba28(&qc->tf, &pp->dimm_buf[0], i);
+
+	pdc_pkt_footer(&qc->tf, &pp->dimm_buf[0], i);
+
+	/* copy three S/G tables and two packets to DIMM MMIO window */
+	memcpy_toio(dimm_mmio + (portno * PDC_DIMM_WINDOW_STEP),
+		    &pp->dimm_buf, PDC_DIMM_HEADER_SZ);
+	memcpy_toio(dimm_mmio + (portno * PDC_DIMM_WINDOW_STEP) +
+		    PDC_DIMM_HOST_PRD,
+		    &pp->dimm_buf[PDC_DIMM_HEADER_SZ], sgt_len);
+
+	/* force host FIFO dump */
+	writel(0x00000001, mmio + PDC_20621_GENERAL_CTL);
+
+	readl(dimm_mmio);	/* MMIO PCI posting flush */
+
+	VPRINTK("ata pkt buf ofs %u, prd size %u, mmio copied\n", i, sgt_len);
+}
+
+static void __pdc20621_push_hdma(struct ata_queued_cmd *qc,
+				 unsigned int seq,
+				 u32 pkt_ofs)
+{
+	struct ata_port *ap = qc->ap;
+	struct ata_host_set *host_set = ap->host_set;
+	void *mmio = host_set->mmio_base;
+
+	/* hard-code chip #0 */
+	mmio += PDC_CHIP0_OFS;
+
+	writel(0x00000001, mmio + PDC_20621_SEQCTL + (seq * 4));
+	readl(mmio + PDC_20621_SEQCTL + (seq * 4));	/* flush */
+
+	writel(pkt_ofs, mmio + PDC_HDMA_PKT_SUBMIT);
+	readl(mmio + PDC_HDMA_PKT_SUBMIT);	/* flush */
+}
+
+static void pdc20621_push_hdma(struct ata_queued_cmd *qc,
+				unsigned int seq,
+				u32 pkt_ofs)
+{
+	struct ata_port *ap = qc->ap;
+	struct pdc_host_priv *pp = ap->host_set->private_data;
+	unsigned int idx = pp->hdma_prod & PDC_HDMA_Q_MASK;
+
+	if (!pp->doing_hdma) {
+		__pdc20621_push_hdma(qc, seq, pkt_ofs);
+		pp->doing_hdma = 1;
+		return;
+	}
+
+	pp->hdma[idx].qc = qc;
+	pp->hdma[idx].seq = seq;
+	pp->hdma[idx].pkt_ofs = pkt_ofs;
+	pp->hdma_prod++;
+}
+
+static void pdc20621_pop_hdma(struct ata_queued_cmd *qc)
+{
+	struct ata_port *ap = qc->ap;
+	struct pdc_host_priv *pp = ap->host_set->private_data;
+	unsigned int idx = pp->hdma_cons & PDC_HDMA_Q_MASK;
+
+	/* if nothing on queue, we're done */
+	if (pp->hdma_prod == pp->hdma_cons) {
+		pp->doing_hdma = 0;
+		return;
+	}
+
+	__pdc20621_push_hdma(pp->hdma[idx].qc, pp->hdma[idx].seq,
+			     pp->hdma[idx].pkt_ofs);
+	pp->hdma_cons++;
+}
+
+#ifdef ATA_VERBOSE_DEBUG
+static void pdc20621_dump_hdma(struct ata_queued_cmd *qc)
+{
+	struct ata_port *ap = qc->ap;
+	unsigned int port_no = ap->port_no;
+	struct pdc_host_priv *hpriv = ap->host_set->private_data;
+	void *dimm_mmio = hpriv->dimm_mmio;
+
+	dimm_mmio += (port_no * PDC_DIMM_WINDOW_STEP);
+	dimm_mmio += PDC_DIMM_HOST_PKT;
+
+	printk(KERN_ERR "HDMA[0] == 0x%08X\n", readl(dimm_mmio));
+	printk(KERN_ERR "HDMA[1] == 0x%08X\n", readl(dimm_mmio + 4));
+	printk(KERN_ERR "HDMA[2] == 0x%08X\n", readl(dimm_mmio + 8));
+	printk(KERN_ERR "HDMA[3] == 0x%08X\n", readl(dimm_mmio + 12));
+}
+#else
+static inline void pdc20621_dump_hdma(struct ata_queued_cmd *qc) { }
+#endif /* ATA_VERBOSE_DEBUG */
+
+static void pdc20621_dma_setup(struct ata_queued_cmd *qc)
+{
+	/* nothing for now.  later, we will call standard
+	 * code in libata-core for ATAPI here */
+}
+
+static void pdc20621_dma_start(struct ata_queued_cmd *qc)
+{
+	struct ata_port *ap = qc->ap;
+	struct ata_host_set *host_set = ap->host_set;
+	unsigned int port_no = ap->port_no;
+	void *mmio = host_set->mmio_base;
+	unsigned int rw = (qc->tf.flags & ATA_TFLAG_WRITE);
+	u8 seq = (u8) (port_no + 1);
+	unsigned int doing_hdma = 0, port_ofs;
+
+	/* hard-code chip #0 */
+	mmio += PDC_CHIP0_OFS;
+
+	VPRINTK("ata%u: ENTER\n", ap->id);
+
+	port_ofs = PDC_20621_DIMM_BASE + (PDC_DIMM_WINDOW_STEP * port_no);
+
+	/* if writing, we (1) DMA to DIMM, then (2) do ATA command */
+	if (rw) {
+		doing_hdma = 1;
+		seq += 4;
+	}
+
+	wmb();			/* flush PRD, pkt writes */
+
+	if (doing_hdma) {
+		pdc20621_dump_hdma(qc);
+		pdc20621_push_hdma(qc, seq, port_ofs + PDC_DIMM_HOST_PKT);
+		VPRINTK("queued ofs 0x%x (%u), seq %u\n",
+			port_ofs + PDC_DIMM_HOST_PKT,
+			port_ofs + PDC_DIMM_HOST_PKT,
+			seq);
+	} else {
+		writel(0x00000001, mmio + PDC_20621_SEQCTL + (seq * 4));
+		readl(mmio + PDC_20621_SEQCTL + (seq * 4));	/* flush */
+
+		writel(port_ofs + PDC_DIMM_ATA_PKT,
+		       (void *) ap->ioaddr.cmd_addr + PDC_PKT_SUBMIT);
+		readl((void *) ap->ioaddr.cmd_addr + PDC_PKT_SUBMIT);
+		VPRINTK("submitted ofs 0x%x (%u), seq %u\n",
+			port_ofs + PDC_DIMM_ATA_PKT,
+			port_ofs + PDC_DIMM_ATA_PKT,
+			seq);
+	}
+}
+
+static inline unsigned int pdc20621_host_intr( struct ata_port *ap,
+                                          struct ata_queued_cmd *qc,
+					  unsigned int doing_hdma,
+					  void *mmio)
+{
+	unsigned int port_no = ap->port_no;
+	unsigned int port_ofs =
+		PDC_20621_DIMM_BASE + (PDC_DIMM_WINDOW_STEP * port_no);
+	u8 status;
+	unsigned int handled = 0;
+
+	VPRINTK("ENTER\n");
+
+	if ((qc->tf.protocol == ATA_PROT_DMA) &&	/* read */
+	    (!(qc->tf.flags & ATA_TFLAG_WRITE))) {
+
+		/* step two - DMA from DIMM to host */
+		if (doing_hdma) {
+			VPRINTK("ata%u: read hdma, 0x%x 0x%x\n", ap->id,
+				readl(mmio + 0x104), readl(mmio + PDC_HDMA_CTLSTAT));
+			pdc_dma_complete(ap, qc, 0);
+			pdc20621_pop_hdma(qc);
+		}
+
+		/* step one - exec ATA command */
+		else {
+			u8 seq = (u8) (port_no + 1 + 4);
+			VPRINTK("ata%u: read ata, 0x%x 0x%x\n", ap->id,
+				readl(mmio + 0x104), readl(mmio + PDC_HDMA_CTLSTAT));
+
+			/* submit hdma pkt */
+			pdc20621_dump_hdma(qc);
+			pdc20621_push_hdma(qc, seq,
+					   port_ofs + PDC_DIMM_HOST_PKT);
+		}
+		handled = 1;
+
+	} else if (qc->tf.protocol == ATA_PROT_DMA) {	/* write */
+
+		/* step one - DMA from host to DIMM */
+		if (doing_hdma) {
+			u8 seq = (u8) (port_no + 1);
+			VPRINTK("ata%u: write hdma, 0x%x 0x%x\n", ap->id,
+				readl(mmio + 0x104), readl(mmio + PDC_HDMA_CTLSTAT));
+
+			/* submit ata pkt */
+			writel(0x00000001, mmio + PDC_20621_SEQCTL + (seq * 4));
+			readl(mmio + PDC_20621_SEQCTL + (seq * 4));
+			writel(port_ofs + PDC_DIMM_ATA_PKT,
+			       (void *) ap->ioaddr.cmd_addr + PDC_PKT_SUBMIT);
+			readl((void *) ap->ioaddr.cmd_addr + PDC_PKT_SUBMIT);
+		}
+
+		/* step two - execute ATA command */
+		else {
+			VPRINTK("ata%u: write ata, 0x%x 0x%x\n", ap->id,
+				readl(mmio + 0x104), readl(mmio + PDC_HDMA_CTLSTAT));
+			pdc_dma_complete(ap, qc, 0);
+			pdc20621_pop_hdma(qc);
+		}
+		handled = 1;
+
+	/* command completion, but no data xfer */
+	} else if (qc->tf.protocol == ATA_PROT_NODATA) {
+
+		status = ata_busy_wait(ap, ATA_BUSY | ATA_DRQ, 1000);
+		DPRINTK("BUS_NODATA (drv_stat 0x%X)\n", status);
+		ata_qc_complete(qc, status);
+		handled = 1;
+
+	} else {
+		ap->stats.idle_irq++;
+	}
+
+	return handled;
+}
+
+static irqreturn_t pdc20621_interrupt (int irq, void *dev_instance, struct pt_regs *regs)
+{
+	struct ata_host_set *host_set = dev_instance;
+	struct ata_port *ap;
+	u32 mask = 0;
+	unsigned int i, tmp, port_no;
+	unsigned int handled = 0;
+	void *mmio_base;
+
+	VPRINTK("ENTER\n");
+
+	if (!host_set || !host_set->mmio_base) {
+		VPRINTK("QUICK EXIT\n");
+		return IRQ_NONE;
+	}
+
+	mmio_base = host_set->mmio_base;
+
+	/* reading should also clear interrupts */
+	mmio_base += PDC_CHIP0_OFS;
+	mask = readl(mmio_base + PDC_20621_SEQMASK);
+	VPRINTK("mask == 0x%x\n", mask);
+
+	if (mask == 0xffffffff) {
+		VPRINTK("QUICK EXIT 2\n");
+		return IRQ_NONE;
+	}
+	mask &= 0xffff;		/* only 16 tags possible */
+	if (!mask) {
+		VPRINTK("QUICK EXIT 3\n");
+		return IRQ_NONE;
+	}
+
+        spin_lock(&host_set->lock);
+
+        for (i = 1; i < 9; i++) {
+		port_no = i - 1;
+		if (port_no > 3)
+			port_no -= 4;
+		if (port_no >= host_set->n_ports)
+			ap = NULL;
+		else
+			ap = host_set->ports[port_no];
+		tmp = mask & (1 << i);
+		VPRINTK("seq %u, port_no %u, ap %p, tmp %x\n", i, port_no, ap, tmp);
+		if (tmp && ap && (!(ap->flags & ATA_FLAG_PORT_DISABLED))) {
+			struct ata_queued_cmd *qc;
+
+			qc = ata_qc_from_tag(ap, ap->active_tag);
+			if (qc && (!(qc->tf.ctl & ATA_NIEN)))
+				handled += pdc20621_host_intr(ap, qc, (i > 4),
+							      mmio_base);
+		}
+	}
+
+        spin_unlock(&host_set->lock);
+
+	VPRINTK("mask == 0x%x\n", mask);
+
+	VPRINTK("EXIT\n");
+
+	return IRQ_RETVAL(handled);
+}
+
+static inline void pdc_dma_complete (struct ata_port *ap,
+                                     struct ata_queued_cmd *qc,
+				     int have_err)
+{
+	u8 err_bit = have_err ? ATA_ERR : 0;
+
+	/* get drive status; clear intr; complete txn */
+	ata_qc_complete(qc, ata_wait_idle(ap) | err_bit);
+}
+
+static void pdc_eng_timeout(struct ata_port *ap)
+{
+	u8 drv_stat;
+	struct ata_queued_cmd *qc;
+
+	DPRINTK("ENTER\n");
+
+	qc = ata_qc_from_tag(ap, ap->active_tag);
+	if (!qc) {
+		printk(KERN_ERR "ata%u: BUG: timeout without command\n",
+		       ap->id);
+		goto out;
+	}
+
+	/* hack alert!  We cannot use the supplied completion
+	 * function from inside the ->eh_strategy_handler() thread.
+	 * libata is the only user of ->eh_strategy_handler() in
+	 * any kernel, so the default scsi_done() assumes it is
+	 * not being called from the SCSI EH.
+	 */
+	qc->scsidone = scsi_finish_command;
+
+	switch (qc->tf.protocol) {
+	case ATA_PROT_DMA:
+		printk(KERN_ERR "ata%u: DMA timeout\n", ap->id);
+		ata_qc_complete(qc, ata_wait_idle(ap) | ATA_ERR);
+		break;
+
+	case ATA_PROT_NODATA:
+		drv_stat = ata_busy_wait(ap, ATA_BUSY | ATA_DRQ, 1000);
+
+		printk(KERN_ERR "ata%u: command 0x%x timeout, stat 0x%x\n",
+		       ap->id, qc->tf.command, drv_stat);
+
+		ata_qc_complete(qc, drv_stat);
+		break;
+
+	default:
+		drv_stat = ata_busy_wait(ap, ATA_BUSY | ATA_DRQ, 1000);
+
+		printk(KERN_ERR "ata%u: unknown timeout, cmd 0x%x stat 0x%x\n",
+		       ap->id, qc->tf.command, drv_stat);
+
+		ata_qc_complete(qc, drv_stat);
+		break;
+	}
+
+out:
+	DPRINTK("EXIT\n");
+}
+
+static void pdc_tf_load_mmio(struct ata_port *ap, struct ata_taskfile *tf)
+{
+	if (tf->protocol == ATA_PROT_PIO)
+		ata_tf_load_mmio(ap, tf);
+}
+
+
+static void pdc_exec_command_mmio(struct ata_port *ap, struct ata_taskfile *tf)
+{
+	if (tf->protocol == ATA_PROT_PIO)
+		ata_exec_command_mmio(ap, tf);
+}
+
+
+static void pdc_sata_setup_port(struct ata_ioports *port, unsigned long base)
+{
+	port->cmd_addr		= base;
+	port->data_addr		= base;
+	port->feature_addr	=
+	port->error_addr	= base + 0x4;
+	port->nsect_addr	= base + 0x8;
+	port->lbal_addr		= base + 0xc;
+	port->lbam_addr		= base + 0x10;
+	port->lbah_addr		= base + 0x14;
+	port->device_addr	= base + 0x18;
+	port->command_addr	=
+	port->status_addr	= base + 0x1c;
+	port->altstatus_addr	=
+	port->ctl_addr		= base + 0x38;
+}
+
+
+#ifdef ATA_VERBOSE_DEBUG
+static void pdc20621_get_from_dimm(struct ata_probe_ent *pe, void *psource, 
+				   u32 offset, u32 size)
+{
+	u32 window_size;
+	u16 idx;
+	u8 page_mask;
+	long dist;
+	void *mmio = pe->mmio_base;
+	struct pdc_host_priv *hpriv = pe->private_data;
+	void *dimm_mmio = hpriv->dimm_mmio;
+
+	/* hard-code chip #0 */
+	mmio += PDC_CHIP0_OFS;
+
+	page_mask = 0x00;	
+   	window_size = 0x2000 * 4; /* 32K byte uchar size */  
+	idx = (u16) (offset / window_size); 
+
+	writel(0x01, mmio + PDC_GENERAL_CTLR);
+	readl(mmio + PDC_GENERAL_CTLR);
+	writel(((idx) << page_mask), mmio + PDC_DIMM_WINDOW_CTLR);
+	readl(mmio + PDC_DIMM_WINDOW_CTLR);
+
+	offset -= (idx * window_size);
+	idx++;
+	dist = ((long) (window_size - (offset + size))) >= 0 ? size : 
+		(long) (window_size - offset);
+	memcpy_fromio((char *) psource, (char *) (dimm_mmio + offset / 4), 
+		      dist);
+
+	psource += dist;    
+	size -= dist;
+	for (; (long) size >= (long) window_size ;) {
+		writel(0x01, mmio + PDC_GENERAL_CTLR);
+		readl(mmio + PDC_GENERAL_CTLR);
+		writel(((idx) << page_mask), mmio + PDC_DIMM_WINDOW_CTLR);
+		readl(mmio + PDC_DIMM_WINDOW_CTLR);
+		memcpy_fromio((char *) psource, (char *) (dimm_mmio), 
+			      window_size / 4);
+		psource += window_size;
+		size -= window_size;
+		idx ++;
+	}
+
+	if (size) {
+		writel(0x01, mmio + PDC_GENERAL_CTLR);
+		readl(mmio + PDC_GENERAL_CTLR);
+		writel(((idx) << page_mask), mmio + PDC_DIMM_WINDOW_CTLR);
+		readl(mmio + PDC_DIMM_WINDOW_CTLR);
+		memcpy_fromio((char *) psource, (char *) (dimm_mmio), 
+			      size / 4);
+	}
+}
+#endif
+
+
+static void pdc20621_put_to_dimm(struct ata_probe_ent *pe, void *psource, 
+				 u32 offset, u32 size)
+{
+	u32 window_size;
+	u16 idx;
+	u8 page_mask;
+	long dist;
+	void *mmio = pe->mmio_base;
+	struct pdc_host_priv *hpriv = pe->private_data;
+	void *dimm_mmio = hpriv->dimm_mmio;
+
+	/* hard-code chip #0 */   
+	mmio += PDC_CHIP0_OFS;
+
+	page_mask = 0x00;	
+   	window_size = 0x2000 * 4;       /* 32K byte uchar size */  
+	idx = (u16) (offset / window_size);
+
+	writel(((idx) << page_mask), mmio + PDC_DIMM_WINDOW_CTLR);
+	readl(mmio + PDC_DIMM_WINDOW_CTLR);
+	offset -= (idx * window_size); 
+	idx++;
+	dist = ((long)(s32)(window_size - (offset + size))) >= 0 ? size :
+		(long) (window_size - offset);
+	memcpy_toio((char *) (dimm_mmio + offset / 4), (char *) psource, dist);
+	writel(0x01, mmio + PDC_GENERAL_CTLR);
+	readl(mmio + PDC_GENERAL_CTLR);
+
+	psource += dist;    
+	size -= dist;
+	for (; (long) size >= (long) window_size ;) {
+		writel(((idx) << page_mask), mmio + PDC_DIMM_WINDOW_CTLR);
+		readl(mmio + PDC_DIMM_WINDOW_CTLR);
+		memcpy_toio((char *) (dimm_mmio), (char *) psource, 
+			    window_size / 4);
+		writel(0x01, mmio + PDC_GENERAL_CTLR);
+		readl(mmio + PDC_GENERAL_CTLR);
+		psource += window_size;
+		size -= window_size;
+		idx ++;
+	}
+    
+	if (size) {
+		writel(((idx) << page_mask), mmio + PDC_DIMM_WINDOW_CTLR);
+		readl(mmio + PDC_DIMM_WINDOW_CTLR);
+		memcpy_toio((char *) (dimm_mmio), (char *) psource, size / 4);
+		writel(0x01, mmio + PDC_GENERAL_CTLR);
+		readl(mmio + PDC_GENERAL_CTLR);
+	}
+}
+
+
+static unsigned int pdc20621_i2c_read(struct ata_probe_ent *pe, u32 device, 
+				      u32 subaddr, u32 *pdata)
+{
+	void *mmio = pe->mmio_base;
+	u32 i2creg  = 0;
+	u32 status;     
+	u32 count =0;
+
+	/* hard-code chip #0 */
+	mmio += PDC_CHIP0_OFS;
+
+	i2creg |= device << 24;
+	i2creg |= subaddr << 16;
+
+	/* Set the device and subaddress */
+	writel(i2creg, mmio + PDC_I2C_ADDR_DATA_OFFSET);
+	readl(mmio + PDC_I2C_ADDR_DATA_OFFSET);
+
+	/* Write Control to perform read operation, mask int */
+	writel(PDC_I2C_READ | PDC_I2C_START | PDC_I2C_MASK_INT, 
+	       mmio + PDC_I2C_CONTROL_OFFSET);
+
+	for (count = 0; count <= 1000; count ++) {
+		status = readl(mmio + PDC_I2C_CONTROL_OFFSET);
+		if (status & PDC_I2C_COMPLETE) {
+			status = readl(mmio + PDC_I2C_ADDR_DATA_OFFSET);
+			break;
+		} else if (count == 1000)
+			return 0;
+	}
+
+	*pdata = (status >> 8) & 0x000000ff;
+	return 1;           
+}
+
+
+static int pdc20621_detect_dimm(struct ata_probe_ent *pe)
+{
+	u32 data=0 ;
+  	if (pdc20621_i2c_read(pe, PDC_DIMM0_SPD_DEV_ADDRESS, 
+			     PDC_DIMM_SPD_SYSTEM_FREQ, &data)) {
+   		if (data == 100)
+			return 100;
+  	} else
+		return 0;
+ 	
+   	if (pdc20621_i2c_read(pe, PDC_DIMM0_SPD_DEV_ADDRESS, 9, &data)) {
+		if(data <= 0x75) 
+			return 133;
+   	} else
+		return 0;
+   	
+   	return 0;
+}
+
+
+static int pdc20621_prog_dimm0(struct ata_probe_ent *pe)
+{
+	u32 spd0[50];
+	u32 data = 0;
+   	int size, i;
+   	u8 bdimmsize; 
+   	void *mmio = pe->mmio_base;
+	static const struct {
+		unsigned int reg;
+		unsigned int ofs;
+	} pdc_i2c_read_data [] = {
+		{ PDC_DIMM_SPD_TYPE, 11 },		
+		{ PDC_DIMM_SPD_FRESH_RATE, 12 },
+		{ PDC_DIMM_SPD_COLUMN_NUM, 4 }, 
+		{ PDC_DIMM_SPD_ATTRIBUTE, 21 },
+		{ PDC_DIMM_SPD_ROW_NUM, 3 },
+		{ PDC_DIMM_SPD_BANK_NUM, 17 },
+		{ PDC_DIMM_SPD_MODULE_ROW, 5 },
+		{ PDC_DIMM_SPD_ROW_PRE_CHARGE, 27 },
+		{ PDC_DIMM_SPD_ROW_ACTIVE_DELAY, 28 },
+		{ PDC_DIMM_SPD_RAS_CAS_DELAY, 29 },
+		{ PDC_DIMM_SPD_ACTIVE_PRECHARGE, 30 },
+		{ PDC_DIMM_SPD_CAS_LATENCY, 18 },       
+	};
+
+	/* hard-code chip #0 */
+	mmio += PDC_CHIP0_OFS;
+
+	for(i=0; i<ARRAY_SIZE(pdc_i2c_read_data); i++)
+		pdc20621_i2c_read(pe, PDC_DIMM0_SPD_DEV_ADDRESS,
+				  pdc_i2c_read_data[i].reg, 
+				  &spd0[pdc_i2c_read_data[i].ofs]);
+  
+   	data |= (spd0[4] - 8) | ((spd0[21] != 0) << 3) | ((spd0[3]-11) << 4);
+   	data |= ((spd0[17] / 4) << 6) | ((spd0[5] / 2) << 7) | 
+		((((spd0[27] + 9) / 10) - 1) << 8) ;
+   	data |= (((((spd0[29] > spd0[28]) 
+		    ? spd0[29] : spd0[28]) + 9) / 10) - 1) << 10; 
+   	data |= ((spd0[30] - spd0[29] + 9) / 10 - 2) << 12;
+   
+   	if (spd0[18] & 0x08) 
+		data |= ((0x03) << 14);
+   	else if (spd0[18] & 0x04)
+		data |= ((0x02) << 14);
+   	else if (spd0[18] & 0x01)
+		data |= ((0x01) << 14);
+   	else
+		data |= (0 << 14);
+
+  	/* 
+	   Calculate the size of bDIMMSize (power of 2) and
+	   merge the DIMM size by program start/end address.
+	*/
+
+   	bdimmsize = spd0[4] + (spd0[5] / 2) + spd0[3] + (spd0[17] / 2) + 3;
+   	size = (1 << bdimmsize) >> 20;	/* size = xxx(MB) */
+   	data |= (((size / 16) - 1) << 16);
+   	data |= (0 << 23);
+	data |= 8;
+   	writel(data, mmio + PDC_DIMM0_CONTROL_OFFSET); 
+	readl(mmio + PDC_DIMM0_CONTROL_OFFSET);
+   	return size;                          
+}
+
+
+static unsigned int pdc20621_prog_dimm_global(struct ata_probe_ent *pe)
+{
+	u32 data, spd0;
+   	int error, i;
+   	void *mmio = pe->mmio_base;
+
+	/* hard-code chip #0 */
+   	mmio += PDC_CHIP0_OFS;
+
+   	/*
+	  Set To Default : DIMM Module Global Control Register (0x022259F1)
+	  DIMM Arbitration Disable (bit 20)
+	  DIMM Data/Control Output Driving Selection (bit12 - bit15)
+	  Refresh Enable (bit 17)
+	*/
+
+	data = 0x022259F1;   
+	writel(data, mmio + PDC_SDRAM_CONTROL_OFFSET);
+	readl(mmio + PDC_SDRAM_CONTROL_OFFSET);
+
+	/* Turn on for ECC */
+	pdc20621_i2c_read(pe, PDC_DIMM0_SPD_DEV_ADDRESS, 
+			  PDC_DIMM_SPD_TYPE, &spd0);
+	if (spd0 == 0x02) {
+		data |= (0x01 << 16);
+		writel(data, mmio + PDC_SDRAM_CONTROL_OFFSET);
+		readl(mmio + PDC_SDRAM_CONTROL_OFFSET);
+		printk(KERN_ERR "Local DIMM ECC Enabled\n");
+   	}
+
+   	/* DIMM Initialization Select/Enable (bit 18/19) */
+   	data &= (~(1<<18));
+   	data |= (1<<19);
+   	writel(data, mmio + PDC_SDRAM_CONTROL_OFFSET);
+
+   	error = 1;                     
+   	for (i = 1; i <= 10; i++) {   /* polling ~5 secs */
+		data = readl(mmio + PDC_SDRAM_CONTROL_OFFSET);
+		if (!(data & (1<<19))) {
+	   		error = 0;
+	   		break;     
+		}
+		set_current_state(TASK_UNINTERRUPTIBLE);
+		schedule_timeout((i * 100) * HZ / 1000 + 1);
+   	}
+   	return error;
+}
+	
+
+static unsigned int pdc20621_dimm_init(struct ata_probe_ent *pe)
+{
+	int speed, size, length; 
+	u32 addr,spd0,pci_status;
+	u32 tmp=0;
+	u32 time_period=0;
+	u32 tcount=0;
+	u32 ticks=0;
+	u32 clock=0;
+	u32 fparam=0;
+   	void *mmio = pe->mmio_base;
+
+	/* hard-code chip #0 */
+   	mmio += PDC_CHIP0_OFS;
+
+	/* Initialize PLL based upon PCI Bus Frequency */
+
+	/* Initialize Time Period Register */
+	writel(0xffffffff, mmio + PDC_TIME_PERIOD);
+	time_period = readl(mmio + PDC_TIME_PERIOD);
+	VPRINTK("Time Period Register (0x40): 0x%x\n", time_period);
+
+	/* Enable timer */
+	writel(0x00001a0, mmio + PDC_TIME_CONTROL);
+	readl(mmio + PDC_TIME_CONTROL);
+
+	/* Wait 3 seconds */
+	set_current_state(TASK_UNINTERRUPTIBLE);
+	schedule_timeout(3 * HZ);
+
+	/* 
+	   When timer is enabled, counter is decreased every internal
+	   clock cycle.
+	*/
+
+	tcount = readl(mmio + PDC_TIME_COUNTER);
+	VPRINTK("Time Counter Register (0x44): 0x%x\n", tcount);
+
+	/* 
+	   If SX4 is on PCI-X bus, after 3 seconds, the timer counter
+	   register should be >= (0xffffffff - 3x10^8).
+	*/
+	if(tcount >= PCI_X_TCOUNT) {
+		ticks = (time_period - tcount);
+		VPRINTK("Num counters 0x%x (%d)\n", ticks, ticks);
+	
+		clock = (ticks / 300000);
+		VPRINTK("10 * Internal clk = 0x%x (%d)\n", clock, clock);
+		
+		clock = (clock * 33);
+		VPRINTK("10 * Internal clk * 33 = 0x%x (%d)\n", clock, clock);
+
+		/* PLL F Param (bit 22:16) */
+		fparam = (1400000 / clock) - 2;
+		VPRINTK("PLL F Param: 0x%x (%d)\n", fparam, fparam);
+		
+		/* OD param = 0x2 (bit 31:30), R param = 0x5 (bit 29:25) */
+		pci_status = (0x8a001824 | (fparam << 16));
+	} else
+		pci_status = PCI_PLL_INIT;
+
+	/* Initialize PLL. */
+	VPRINTK("pci_status: 0x%x\n", pci_status);
+	writel(pci_status, mmio + PDC_CTL_STATUS);
+	readl(mmio + PDC_CTL_STATUS);
+
+	/* 
+	   Read SPD of DIMM by I2C interface,
+	   and program the DIMM Module Controller.
+	*/
+ 	if (!(speed = pdc20621_detect_dimm(pe))) {
+		printk(KERN_ERR "Detect Local DIMM Fail\n");  
+		return 1;	/* DIMM error */
+   	}
+   	VPRINTK("Local DIMM Speed = %d\n", speed);
+
+   	/* Programming DIMM0 Module Control Register (index_CID0:80h) */ 
+   	size = pdc20621_prog_dimm0(pe);
+   	VPRINTK("Local DIMM Size = %dMB\n",size);
+
+   	/* Programming DIMM Module Global Control Register (index_CID0:88h) */ 
+   	if (pdc20621_prog_dimm_global(pe)) {
+		printk(KERN_ERR "Programming DIMM Module Global Control Register Fail\n");
+		return 1;
+   	}
+
+#ifdef ATA_VERBOSE_DEBUG
+	{
+		u8 test_parttern1[40] = {0x55,0xAA,'P','r','o','m','i','s','e',' ',
+  				'N','o','t',' ','Y','e','t',' ','D','e','f','i','n','e','d',' ',
+ 				 '1','.','1','0',
+  				'9','8','0','3','1','6','1','2',0,0};
+		u8 test_parttern2[40] = {0};
+
+		pdc20621_put_to_dimm(pe, (void *) test_parttern2, 0x10040, 40);
+		pdc20621_put_to_dimm(pe, (void *) test_parttern2, 0x40, 40);
+
+		pdc20621_put_to_dimm(pe, (void *) test_parttern1, 0x10040, 40);
+		pdc20621_get_from_dimm(pe, (void *) test_parttern2, 0x40, 40);
+		printk(KERN_ERR "%x, %x, %s\n", test_parttern2[0], 
+		       test_parttern2[1], &(test_parttern2[2]));
+		pdc20621_get_from_dimm(pe, (void *) test_parttern2, 0x10040, 
+				       40);
+		printk(KERN_ERR "%x, %x, %s\n", test_parttern2[0], 
+		       test_parttern2[1], &(test_parttern2[2]));
+
+		pdc20621_put_to_dimm(pe, (void *) test_parttern1, 0x40, 40);
+		pdc20621_get_from_dimm(pe, (void *) test_parttern2, 0x40, 40);
+		printk(KERN_ERR "%x, %x, %s\n", test_parttern2[0], 
+		       test_parttern2[1], &(test_parttern2[2]));
+	}
+#endif
+
+	/* ECC initiliazation. */
+
+	pdc20621_i2c_read(pe, PDC_DIMM0_SPD_DEV_ADDRESS, 
+			  PDC_DIMM_SPD_TYPE, &spd0);
+	if (spd0 == 0x02) {
+		VPRINTK("Start ECC initialization\n");
+		addr = 0;
+		length = size * 1024 * 1024;
+		while (addr < length) {
+			pdc20621_put_to_dimm(pe, (void *) &tmp, addr, 
+					     sizeof(u32));
+			addr += sizeof(u32);
+		}
+		VPRINTK("Finish ECC initialization\n");
+	}
+	return 0;
+}
+
+
+static void pdc_20621_init(struct ata_probe_ent *pe)
+{
+	u32 tmp;
+	void *mmio = pe->mmio_base;
+
+	/* hard-code chip #0 */
+	mmio += PDC_CHIP0_OFS;
+
+	/*
+	 * Select page 0x40 for our 32k DIMM window
+	 */
+	tmp = readl(mmio + PDC_20621_DIMM_WINDOW) & 0xffff0000;
+	tmp |= PDC_PAGE_WINDOW;	/* page 40h; arbitrarily selected */
+	writel(tmp, mmio + PDC_20621_DIMM_WINDOW);
+
+	/*
+	 * Reset Host DMA
+	 */
+	tmp = readl(mmio + PDC_HDMA_CTLSTAT);
+	tmp |= PDC_RESET;
+	writel(tmp, mmio + PDC_HDMA_CTLSTAT);
+	readl(mmio + PDC_HDMA_CTLSTAT);		/* flush */
+
+	udelay(10);
+
+	tmp = readl(mmio + PDC_HDMA_CTLSTAT);
+	tmp &= ~PDC_RESET;
+	writel(tmp, mmio + PDC_HDMA_CTLSTAT);
+	readl(mmio + PDC_HDMA_CTLSTAT);		/* flush */
+}
+
+static int pdc_sata_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
+{
+	static int printed_version;
+	struct ata_probe_ent *probe_ent = NULL;
+	unsigned long base;
+	void *mmio_base, *dimm_mmio = NULL;
+	struct pdc_host_priv *hpriv = NULL;
+	unsigned int board_idx = (unsigned int) ent->driver_data;
+	int rc;
+
+	if (!printed_version++)
+		printk(KERN_DEBUG DRV_NAME " version " DRV_VERSION "\n");
+
+	/*
+	 * If this driver happens to only be useful on Apple's K2, then
+	 * we should check that here as it has a normal Serverworks ID
+	 */
+	rc = pci_enable_device(pdev);
+	if (rc)
+		return rc;
+
+	rc = pci_request_regions(pdev, DRV_NAME);
+	if (rc)
+		goto err_out;
+
+	rc = pci_set_dma_mask(pdev, ATA_DMA_MASK);
+	if (rc)
+		goto err_out_regions;
+	rc = pci_set_consistent_dma_mask(pdev, ATA_DMA_MASK);
+	if (rc)
+		goto err_out_regions;
+
+	probe_ent = kmalloc(sizeof(*probe_ent), GFP_KERNEL);
+	if (probe_ent == NULL) {
+		rc = -ENOMEM;
+		goto err_out_regions;
+	}
+
+	memset(probe_ent, 0, sizeof(*probe_ent));
+	probe_ent->pdev = pdev;
+	INIT_LIST_HEAD(&probe_ent->node);
+
+	mmio_base = ioremap(pci_resource_start(pdev, 3),
+		            pci_resource_len(pdev, 3));
+	if (mmio_base == NULL) {
+		rc = -ENOMEM;
+		goto err_out_free_ent;
+	}
+	base = (unsigned long) mmio_base;
+
+	hpriv = kmalloc(sizeof(*hpriv), GFP_KERNEL);
+	if (!hpriv) {
+		rc = -ENOMEM;
+		goto err_out_iounmap;
+	}
+	memset(hpriv, 0, sizeof(*hpriv));
+
+	dimm_mmio = ioremap(pci_resource_start(pdev, 4),
+			    pci_resource_len(pdev, 4));
+	if (!dimm_mmio) {
+		kfree(hpriv);
+		rc = -ENOMEM;
+		goto err_out_iounmap;
+	}
+
+	hpriv->dimm_mmio = dimm_mmio;
+
+	probe_ent->sht		= pdc_port_info[board_idx].sht;
+	probe_ent->host_flags	= pdc_port_info[board_idx].host_flags;
+	probe_ent->pio_mask	= pdc_port_info[board_idx].pio_mask;
+	probe_ent->udma_mask	= pdc_port_info[board_idx].udma_mask;
+	probe_ent->port_ops	= pdc_port_info[board_idx].port_ops;
+
+       	probe_ent->irq = pdev->irq;
+       	probe_ent->irq_flags = SA_SHIRQ;
+	probe_ent->mmio_base = mmio_base;
+
+	probe_ent->private_data = hpriv;
+	base += PDC_CHIP0_OFS;
+
+	pdc_sata_setup_port(&probe_ent->port[0], base + 0x200);
+	pdc_sata_setup_port(&probe_ent->port[1], base + 0x280);
+
+	/* notice 4-port boards */
+	switch (board_idx) {
+	case board_20621:
+       		probe_ent->n_ports = 4;
+
+		pdc_sata_setup_port(&probe_ent->port[2], base + 0x300);
+		pdc_sata_setup_port(&probe_ent->port[3], base + 0x380);
+		break;
+	default:
+		BUG();
+		break;
+	}
+
+	pci_set_master(pdev);
+
+	/* initialize adapter */
+	/* initialize local dimm */
+	if (pdc20621_dimm_init(probe_ent)) {
+		rc = -ENOMEM;
+		goto err_out_iounmap_dimm;
+	}
+	pdc_20621_init(probe_ent);
+
+	/* FIXME: check ata_device_add return value */
+	ata_device_add(probe_ent);
+	kfree(probe_ent);
+
+	return 0;
+
+err_out_iounmap_dimm:		/* only get to this label if 20621 */
+	kfree(hpriv);
+	iounmap(dimm_mmio);
+err_out_iounmap:
+	iounmap(mmio_base);
+err_out_free_ent:
+	kfree(probe_ent);
+err_out_regions:
+	pci_release_regions(pdev);
+err_out:
+	pci_disable_device(pdev);
+	return rc;
+}
+
+
+static int __init pdc_sata_init(void)
+{
+	return pci_module_init(&pdc_sata_pci_driver);
+}
+
+
+static void __exit pdc_sata_exit(void)
+{
+	pci_unregister_driver(&pdc_sata_pci_driver);
+}
+
+
+MODULE_AUTHOR("Jeff Garzik");
+MODULE_DESCRIPTION("Promise SATA low-level driver");
+MODULE_LICENSE("GPL");
+MODULE_DEVICE_TABLE(pci, pdc_sata_pci_tbl);
+
+module_init(pdc_sata_init);
+module_exit(pdc_sata_exit);
diff -Nru a/drivers/scsi/sata_via.c b/drivers/scsi/sata_via.c
--- a/drivers/scsi/sata_via.c	Sun May 16 01:18:34 2004
+++ b/drivers/scsi/sata_via.c	Sun May 16 01:18:34 2004
@@ -1,6 +1,10 @@
 /*
    sata_via.c - VIA Serial ATA controllers
 
+   Maintained by:  Jeff Garzik <jgarzik@pobox.com>
+   		   Please ALWAYS copy linux-ide@vger.kernel.org
+ 		   on emails.
+
    Copyright 2003-2004 Red Hat, Inc.  All rights reserved.
    Copyright 2003-2004 Jeff Garzik
 
@@ -102,6 +106,7 @@
 
 	.phy_reset		= sata_phy_reset,
 
+	.bmdma_setup            = ata_bmdma_setup_pio,
 	.bmdma_start            = ata_bmdma_start_pio,
 	.fill_sg		= ata_fill_sg,
 	.eng_timeout		= ata_eng_timeout,
diff -Nru a/drivers/scsi/sata_vsc.c b/drivers/scsi/sata_vsc.c
--- a/drivers/scsi/sata_vsc.c	Sun May 16 01:18:35 2004
+++ b/drivers/scsi/sata_vsc.c	Sun May 16 01:18:35 2004
@@ -1,6 +1,10 @@
 /*
  *  sata_vsc.c - Vitesse VSC7174 4 port DPA SATA
  *
+ *  Maintained by:  Jeremy Higdon @ SGI
+ * 		    Please ALWAYS copy linux-ide@vger.kernel.org
+ *		    on emails.
+ *
  *  Copyright 2004 SGI
  *
  *  Bits from Jeff Garzik, Copyright RedHat, Inc.
@@ -171,7 +175,7 @@
 				struct ata_queued_cmd *qc;
 
 				qc = ata_qc_from_tag(ap, ap->active_tag);
-				if (qc && ((qc->flags & ATA_QCFLAG_POLL) == 0))
+				if (qc && (!(qc->tf.ctl & ATA_NIEN)))
 					handled += ata_host_intr(ap, qc);
 			}
 		}
@@ -209,6 +213,7 @@
 	.exec_command		= ata_exec_command_mmio,
 	.check_status		= ata_check_status_mmio,
 	.phy_reset		= sata_phy_reset,
+	.bmdma_setup            = ata_bmdma_setup_mmio,
 	.bmdma_start            = ata_bmdma_start_mmio,
 	.fill_sg		= ata_fill_sg,
 	.eng_timeout		= ata_eng_timeout,
diff -Nru a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c
--- a/drivers/scsi/scsi.c	Sun May 16 01:18:35 2004
+++ b/drivers/scsi/scsi.c	Sun May 16 01:18:35 2004
@@ -977,8 +977,6 @@
  */
 int scsi_device_get(struct scsi_device *sdev)
 {
-	if(!sdev)
-		return -ENXIO;
 	if (sdev->sdev_state == SDEV_DEL || sdev->sdev_state == SDEV_CANCEL)
 		return -ENXIO;
 	if (!get_device(&sdev->sdev_gendev))
diff -Nru a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c
--- a/drivers/scsi/scsi_scan.c	Sun May 16 01:18:36 2004
+++ b/drivers/scsi/scsi_scan.c	Sun May 16 01:18:36 2004
@@ -330,6 +330,7 @@
 	struct scsi_device *sdev = sreq->sr_device;	/* a bit ugly */
 	unsigned char scsi_cmd[MAX_COMMAND_SIZE];
 	int possible_inq_resp_len;
+	int count = 0;
 
 	*bflags = 0;
  repeat_inquiry:
@@ -350,19 +351,24 @@
 	SCSI_LOG_SCAN_BUS(3, printk(KERN_INFO "scsi scan: 1st INQUIRY %s with"
 			" code 0x%x\n", sreq->sr_result ?
 			"failed" : "successful", sreq->sr_result));
+	++count;
 
 	if (sreq->sr_result) {
 		if ((driver_byte(sreq->sr_result) & DRIVER_SENSE) != 0 &&
 		    (sreq->sr_sense_buffer[2] & 0xf) == UNIT_ATTENTION &&
-		    sreq->sr_sense_buffer[12] == 0x28 &&
+		    (sreq->sr_sense_buffer[12] == 0x28 ||
+		     sreq->sr_sense_buffer[12] == 0x29) &&
 		    sreq->sr_sense_buffer[13] == 0) {
-			/* not-ready to ready transition - good */
+			/* not-ready to ready transition or power-on - good */
 			/* dpg: bogus? INQUIRY never returns UNIT_ATTENTION */
-		} else
-			/*
-			 * assume no peripheral if any other sort of error
-			 */
-			return;
+			/* Supposedly, but many buggy devices do so anyway */
+			if (count < 3)
+				goto repeat_inquiry;
+		}
+		/*
+		 * assume no peripheral if any other sort of error
+		 */
+		return;
 	}
 
 	/*
@@ -543,17 +549,12 @@
 	 * 011 the same. Stay compatible with previous code, and create a
 	 * Scsi_Device for a PQ of 1
 	 *
-	 * XXX Save the PQ field let the upper layers figure out if they
-	 * want to attach or not to this device, do not set online FALSE;
-	 * otherwise, offline devices still get an sd allocated, and they
-	 * use up an sd slot.
-	 */
-	if (((inq_result[0] >> 5) & 7) == 1) {
-		SCSI_LOG_SCAN_BUS(3, printk(KERN_INFO "scsi scan: peripheral"
-				" qualifier of 1, device offlined\n"));
-		scsi_device_set_state(sdev, SDEV_OFFLINE);
-	}
+	 * Don't set the device offline here; rather let the upper
+	 * level drivers eval the PQ to decide whether they should
+	 * attach. So remove ((inq_result[0] >> 5) & 7) == 1 check.
+	 */ 
 
+	sdev->inq_periph_qual = (inq_result[0] >> 5) & 7;
 	sdev->removable = (0x80 & inq_result[1]) >> 7;
 	sdev->lockable = sdev->removable;
 	sdev->soft_reset = (inq_result[7] & 1) && ((inq_result[3] & 7) == 2);
diff -Nru a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c
--- a/drivers/scsi/scsi_sysfs.c	Sun May 16 01:18:34 2004
+++ b/drivers/scsi/scsi_sysfs.c	Sun May 16 01:18:34 2004
@@ -181,7 +181,8 @@
 /* all probing is done in the individual ->probe routines */
 static int scsi_bus_match(struct device *dev, struct device_driver *gendrv)
 {
-	return 1;
+	struct scsi_device *sdp = to_scsi_device(dev);
+	return (sdp->inq_periph_qual == SCSI_INQ_PQ_CON)? 1: 0;
 }
 
 struct bus_type scsi_bus_type = {
@@ -302,6 +303,26 @@
 sdev_rd_attr (rev, "%.4s\n");
 
 static ssize_t
+sdev_show_timeout (struct device *dev, char *buf)
+{
+	struct scsi_device *sdev;
+	sdev = to_scsi_device(dev);
+	return snprintf (buf, 20, "%d\n", sdev->timeout / HZ);
+}
+
+static ssize_t
+sdev_store_timeout (struct device *dev, const char *buf, size_t count)
+{
+	struct scsi_device *sdev;
+	int timeout;
+	sdev = to_scsi_device(dev);
+	sscanf (buf, "%d\n", &timeout);
+	sdev->timeout = timeout * HZ;
+	return count;
+}
+static DEVICE_ATTR(timeout, S_IRUGO | S_IWUSR, sdev_show_timeout, sdev_store_timeout)
+
+static ssize_t
 store_rescan_field (struct device *dev, const char *buf, size_t count) 
 {
 	scsi_rescan_device(dev);
@@ -367,6 +388,7 @@
 	&dev_attr_rescan,
 	&dev_attr_delete,
 	&dev_attr_state,
+	&dev_attr_timeout,
 	NULL
 };
 
diff -Nru a/drivers/scsi/sd.c b/drivers/scsi/sd.c
--- a/drivers/scsi/sd.c	Sun May 16 01:18:36 2004
+++ b/drivers/scsi/sd.c	Sun May 16 01:18:36 2004
@@ -179,7 +179,16 @@
 		goto out;
 	sdkp = scsi_disk(disk);
 	if (!kref_get(&sdkp->kref))
-		sdkp = NULL;
+		goto out_sdkp;
+	if (scsi_device_get(sdkp->device))
+		goto out_put;
+	up(&sd_ref_sem);
+	return sdkp;
+
+ out_put:
+	kref_put(&sdkp->kref);
+ out_sdkp:
+	sdkp = NULL;
  out:
 	up(&sd_ref_sem);
 	return sdkp;
@@ -188,6 +197,7 @@
 static void scsi_disk_put(struct scsi_disk *sdkp)
 {
 	down(&sd_ref_sem);
+	scsi_device_put(sdkp->device);
 	kref_put(&sdkp->kref);
 	up(&sd_ref_sem);
 }
@@ -207,9 +217,7 @@
 	sector_t block;
 	struct scsi_device *sdp = SCpnt->device;
 
-	timeout = SD_TIMEOUT;
-	if (SCpnt->device->type != TYPE_DISK)
-		timeout = SD_MOD_TIMEOUT;
+	timeout = sdp->timeout;
 
 	/*
 	 * these are already setup, just copy cdb basically
@@ -1342,16 +1350,13 @@
 	if ((sdp->type != TYPE_DISK) && (sdp->type != TYPE_MOD))
 		goto out;
 
-	if ((error = scsi_device_get(sdp)) != 0)
-		goto out;
-
 	SCSI_LOG_HLQUEUE(3, printk("sd_attach: scsi device: <%d,%d,%d,%d>\n", 
 			 sdp->host->host_no, sdp->channel, sdp->id, sdp->lun));
 
 	error = -ENOMEM;
 	sdkp = kmalloc(sizeof(*sdkp), GFP_KERNEL);
 	if (!sdkp)
-		goto out_put_sdev;
+		goto out;
 
 	memset (sdkp, 0, sizeof(*sdkp));
 	kref_init(&sdkp->kref, scsi_disk_release);
@@ -1382,6 +1387,13 @@
 	sdkp->index = index;
 	sdkp->openers = 0;
 
+	if (!sdp->timeout) {
+		if (sdp->type == TYPE_DISK)
+			sdp->timeout = SD_TIMEOUT;
+		else
+			sdp->timeout = SD_MOD_TIMEOUT;
+	}
+
 	devno = make_sd_dev(index, 0);
 	gd->major = MAJOR(devno);
 	gd->first_minor = MINOR(devno);
@@ -1427,8 +1439,6 @@
 	put_disk(gd);
 out_free:
 	kfree(sdkp);
-out_put_sdev:
-	scsi_device_put(sdp);
 out:
 	return error;
 }
@@ -1450,7 +1460,9 @@
 
 	del_gendisk(sdkp->disk);
 	sd_shutdown(dev);
-	scsi_disk_put(sdkp);
+	down(&sd_ref_sem);
+	kref_put(&sdkp->kref);
+	up(&sd_ref_sem);
 
 	return 0;
 }
@@ -1467,7 +1479,6 @@
 static void scsi_disk_release(struct kref *kref)
 {
 	struct scsi_disk *sdkp = to_scsi_disk(kref);
-	struct scsi_device *sdev = sdkp->device;
 	struct gendisk *disk = sdkp->disk;
 	
 	spin_lock(&sd_index_lock);
@@ -1479,8 +1490,6 @@
 	put_disk(disk);
 
 	kfree(sdkp);
-
-	scsi_device_put(sdev);
 }
 
 /*
diff -Nru a/drivers/scsi/sg.c b/drivers/scsi/sg.c
--- a/drivers/scsi/sg.c	Sun May 16 01:18:35 2004
+++ b/drivers/scsi/sg.c	Sun May 16 01:18:35 2004
@@ -1099,10 +1099,10 @@
 				page_ptr = sg_scatg2virt(sclp) + m;
 				page = virt_to_page(page_ptr);
 				if (startFinish)
-					atomic_inc(&page->count);
+					get_page(page);
 				else {
 					if (page_count(page) > 0)
-						atomic_dec(&page->count);
+						__put_page(page);
 				}
 			}
 		}
@@ -1111,10 +1111,10 @@
 			page_ptr = (unsigned char *) rsv_schp->buffer + m;
 			page = virt_to_page(page_ptr);
 			if (startFinish)
-				atomic_inc(&page->count);
+				get_page(page);
 			else {
 				if (page_count(page) > 0)
-					atomic_dec(&page->count);
+					__put_page(page);
 			}
 		}
 	}
diff -Nru a/drivers/scsi/sgiwd93.c b/drivers/scsi/sgiwd93.c
--- a/drivers/scsi/sgiwd93.c	Sun May 16 01:18:36 2004
+++ b/drivers/scsi/sgiwd93.c	Sun May 16 01:18:36 2004
@@ -1,32 +1,32 @@
 /*
- * sgiwd93.c: SGI WD93 scsi driver.
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
  *
  * Copyright (C) 1996 David S. Miller (dm@engr.sgi.com)
- *		 1999 Andrew R. Baker (andrewb@uab.edu)
- *		      - Support for 2nd SCSI controller on Indigo2
- *		 2001 Florian Lohoff (flo@rfc822.org)
- *		      - Delete HPC scatter gather (Read corruption on 
- *		        multiple disks)
- *		      - Cleanup wback cache handling
+ * Copyright (C) 1999 Andrew R. Baker (andrewb@uab.edu)
+ * Copyright (C) 2001 Florian Lohoff (flo@rfc822.org)
+ * Copyright (C) 2003 Ralf Baechle (ralf@linux-mips.org)
  * 
  * (In all truth, Jed Schimmel wrote all this code.)
- *
  */
 #include <linux/init.h>
+#include <linux/interrupt.h>
 #include <linux/types.h>
 #include <linux/mm.h>
 #include <linux/blkdev.h>
 #include <linux/version.h>
 #include <linux/delay.h>
+#include <linux/dma-mapping.h>
 #include <linux/spinlock.h>
 
 #include <asm/page.h>
 #include <asm/pgtable.h>
 #include <asm/sgialib.h>
 #include <asm/sgi/sgi.h>
-#include <asm/sgi/sgimc.h>
-#include <asm/sgi/sgihpc.h>
-#include <asm/sgi/sgint23.h>
+#include <asm/sgi/mc.h>
+#include <asm/sgi/hpc3.h>
+#include <asm/sgi/ip22.h>
 #include <asm/irq.h>
 #include <asm/io.h>
 
@@ -37,95 +37,130 @@
 
 #include <linux/stat.h>
 
+#if 0
+#define DPRINTK(args...)	printk(args)
+#else
+#define DPRINTK(args...)
+#endif
+
+#define HDATA(ptr) ((struct ip22_hostdata *)((ptr)->hostdata))
+
+struct ip22_hostdata {
+	struct WD33C93_hostdata wh;
+	struct hpc_data {
+		dma_addr_t      dma;
+		void            * cpu;
+	} hd;
+};
+
 struct hpc_chunk {
 	struct hpc_dma_desc desc;
 	u32 _padding;	/* align to quadword boundary */
 };
 
-struct Scsi_Host *sgiwd93_host = NULL;
-struct Scsi_Host *sgiwd93_host1 = NULL;
+struct Scsi_Host *sgiwd93_host;
+struct Scsi_Host *sgiwd93_host1;
 
 /* Wuff wuff, wuff, wd33c93.c, wuff wuff, object oriented, bow wow. */
+static inline void write_wd33c93_count(const wd33c93_regs regs,
+                                      unsigned long value)
+{
+	*regs.SASR = WD_TRANSFER_COUNT_MSB;
+	mb();
+	*regs.SCMD = ((value >> 16) & 0xff);
+	*regs.SCMD = ((value >>  8) & 0xff);
+	*regs.SCMD = ((value >>  0) & 0xff);
+	mb();
+}
 
-/* XXX woof! */
-static void sgiwd93_intr(int irq, void *dev_id, struct pt_regs *regs)
+static inline unsigned long read_wd33c93_count(const wd33c93_regs regs)
 {
-	unsigned long flags;
-	struct Scsi_Host *dev = dev_id;
-	
-	spin_lock_irqsave(dev->host_lock, flags);
-	wd33c93_intr((struct Scsi_Host *) dev_id);
-	spin_unlock_irqrestore(dev->host_lock, flags);
+	unsigned long value;
+
+	*regs.SASR = WD_TRANSFER_COUNT_MSB;
+	mb();
+	value =  ((*regs.SCMD & 0xff) << 16);
+	value |= ((*regs.SCMD & 0xff) <<  8);
+	value |= ((*regs.SCMD & 0xff) <<  0);
+	mb();
+	return value;
 }
 
-#undef DEBUG_DMA
+static irqreturn_t sgiwd93_intr(int irq, void *dev_id, struct pt_regs *regs)
+{
+	struct Scsi_Host * host = (struct Scsi_Host *) dev_id;
+	unsigned long flags;
+
+	spin_lock_irqsave(host->host_lock, flags);
+	wd33c93_intr(host);
+	spin_unlock_irqrestore(host->host_lock, flags);
+
+	return IRQ_HANDLED;
+}
 
 static inline
-void fill_hpc_entries (struct hpc_chunk **hcp, char *addr, unsigned long len)
+void fill_hpc_entries(struct hpc_chunk *hcp, Scsi_Cmnd *cmd, int datainp)
 {
-	unsigned long physaddr;
+	unsigned long len = cmd->SCp.this_residual;
+	void *addr = cmd->SCp.ptr;
+	dma_addr_t physaddr;
 	unsigned long count;
-	
-	physaddr = PHYSADDR(addr);
+
+	physaddr = dma_map_single(NULL, addr, len, cmd->sc_data_direction);
+	cmd->SCp.dma_handle = physaddr;
+
 	while (len) {
 		/*
 		 * even cntinfo could be up to 16383, without
 		 * magic only 8192 works correctly
 		 */
 		count = len > 8192 ? 8192 : len;
-		(*hcp)->desc.pbuf = physaddr;
-		(*hcp)->desc.cntinfo = count;
-		(*hcp)++;
+		hcp->desc.pbuf = physaddr;
+		hcp->desc.cntinfo = count;
+		hcp++;
 		len -= count;
 		physaddr += count;
 	}
+
+	/*
+	 * To make sure, if we trip an HPC bug, that we transfer every single
+	 * byte, we tag on an extra zero length dma descriptor at the end of
+	 * the chain.
+	 */
+	hcp->desc.pbuf = 0;
+	hcp->desc.cntinfo = HPCDMA_EOX;
 }
 
 static int dma_setup(Scsi_Cmnd *cmd, int datainp)
 {
-	struct WD33C93_hostdata *hdata = (struct WD33C93_hostdata *)cmd->host->hostdata;
-	struct hpc3_scsiregs *hregs = (struct hpc3_scsiregs *) cmd->host->base;
-	struct hpc_chunk *hcp = (struct hpc_chunk *) hdata->dma_bounce_buffer;
-
-#ifdef DEBUG_DMA
-	printk("dma_setup: datainp<%d> hcp<%p> ",
-	       datainp, hcp);
-#endif
+	struct ip22_hostdata *hdata = HDATA(cmd->device->host);
+	struct hpc3_scsiregs *hregs =
+		(struct hpc3_scsiregs *) cmd->device->host->base;
+	struct hpc_chunk *hcp = (struct hpc_chunk *) hdata->hd.cpu;
+
+	DPRINTK("dma_setup: datainp<%d> hcp<%p> ", datainp, hcp);
 
-	hdata->dma_dir = datainp;
+	hdata->wh.dma_dir = datainp;
 
 	/*
-	 * wd33c93 shouldn't pass us bogus dma_setups, but
-	 * it does:-( The other wd33c93 drivers deal with
-	 * it the same way (which isn't that obvious).
-	 * IMHO a better fix would be, not to do these
-	 * dma setups in the first place
+	 * wd33c93 shouldn't pass us bogus dma_setups, but it does:-(  The
+	 * other wd33c93 drivers deal with it the same way (which isn't that
+	 * obvious).  IMHO a better fix would be, not to do these dma setups
+	 * in the first place.
 	 */
-	if (cmd->SCp.ptr == NULL)
+	if (cmd->SCp.ptr == NULL || cmd->SCp.this_residual == 0)
 		return 1;
 
-	fill_hpc_entries (&hcp, cmd->SCp.ptr,cmd->SCp.this_residual);
+	fill_hpc_entries(hcp, cmd, datainp);
 
-	/* To make sure, if we trip an HPC bug, that we transfer
-	 * every single byte, we tag on an extra zero length dma
-	 * descriptor at the end of the chain.
-	 */
-	hcp->desc.pbuf = 0;
-	hcp->desc.cntinfo = (HPCDMA_EOX);
-
-#ifdef DEBUG_DMA
-	printk(" HPCGO\n");
-#endif
+	DPRINTK(" HPCGO\n");
 
 	/* Start up the HPC. */
-	hregs->ndptr = PHYSADDR(hdata->dma_bounce_buffer);
-	if(datainp) {
-		dma_cache_inv((unsigned long) cmd->SCp.ptr, cmd->SCp.this_residual);
-		hregs->ctrl = (HPC3_SCTRL_ACTIVE);
-	} else {
-		dma_cache_wback_inv((unsigned long) cmd->SCp.ptr, cmd->SCp.this_residual);
-		hregs->ctrl = (HPC3_SCTRL_ACTIVE | HPC3_SCTRL_DIR);
-	}
+	hregs->ndptr = hdata->hd.dma;
+	if (datainp)
+		hregs->ctrl = HPC3_SCTRL_ACTIVE;
+	else
+		hregs->ctrl = HPC3_SCTRL_ACTIVE | HPC3_SCTRL_DIR;
 
 	return 0;
 }
@@ -133,29 +168,27 @@
 static void dma_stop(struct Scsi_Host *instance, Scsi_Cmnd *SCpnt,
 		     int status)
 {
-	struct WD33C93_hostdata *hdata = (struct WD33C93_hostdata *)instance->hostdata;
+	struct ip22_hostdata *hdata = HDATA(instance);
 	struct hpc3_scsiregs *hregs;
 
 	if (!SCpnt)
 		return;
 
-	hregs = (struct hpc3_scsiregs *) SCpnt->host->base;
+	hregs = (struct hpc3_scsiregs *) SCpnt->device->host->base;
 
-#ifdef DEBUG_DMA
-	printk("dma_stop: status<%d> ", status);
-#endif
+	DPRINTK("dma_stop: status<%d> ", status);
 
 	/* First stop the HPC and flush it's FIFO. */
-	if(hdata->dma_dir) {
+	if (hdata->wh.dma_dir) {
 		hregs->ctrl |= HPC3_SCTRL_FLUSH;
-		while(hregs->ctrl & HPC3_SCTRL_ACTIVE)
+		while (hregs->ctrl & HPC3_SCTRL_ACTIVE)
 			barrier();
 	}
 	hregs->ctrl = 0;
+	dma_unmap_single(NULL, SCpnt->SCp.dma_handle, SCpnt->SCp.this_residual,
+	                 SCpnt->sc_data_direction);
 
-#ifdef DEBUG_DMA
-	printk("\n");
-#endif
+	DPRINTK("\n");
 }
 
 void sgiwd93_reset(unsigned long base)
@@ -163,142 +196,142 @@
 	struct hpc3_scsiregs *hregs = (struct hpc3_scsiregs *) base;
 
 	hregs->ctrl = HPC3_SCTRL_CRESET;
-	udelay (50);
+	udelay(50);
 	hregs->ctrl = 0;
 }
 
-static inline void init_hpc_chain(uchar *buf)
+static inline void init_hpc_chain(struct hpc_data *hd)
 {
-	struct hpc_chunk *hcp = (struct hpc_chunk *) buf;
+	struct hpc_chunk *hcp = (struct hpc_chunk *) hd->cpu;
+	struct hpc_chunk *dma = (struct hpc_chunk *) hd->dma;
 	unsigned long start, end;
 
-	start = (unsigned long) buf;
+	start = (unsigned long) hcp;
 	end = start + PAGE_SIZE;
-	while(start < end) {
-		hcp->desc.pnext = PHYSADDR((hcp + 1));
+	while (start < end) {
+		hcp->desc.pnext = (u32) (dma + 1);
 		hcp->desc.cntinfo = HPCDMA_EOX;
-		hcp++;
+		hcp++; dma++;
 		start += sizeof(struct hpc_chunk);
 	};
 	hcp--;
-	hcp->desc.pnext = PHYSADDR(buf);
-
-	/* Force flush to memory */
-	dma_cache_wback_inv((unsigned long) buf, PAGE_SIZE);
+	hcp->desc.pnext = hd->dma;
 }
 
-int __init sgiwd93_detect(Scsi_Host_Template *SGIblows)
+static struct Scsi_Host * __init sgiwd93_setup_scsi(
+	Scsi_Host_Template *SGIblows, int unit, int irq,
+	struct hpc3_scsiregs *hregs, unsigned char *wdregs)
 {
-	static unsigned char called = 0;
-	struct hpc3_scsiregs *hregs = &hpc3c0->scsi_chan0;
-	struct hpc3_scsiregs *hregs1 = &hpc3c0->scsi_chan1;
-	struct WD33C93_hostdata *hdata;
-	struct WD33C93_hostdata *hdata1;
+	struct ip22_hostdata *hdata;
+	struct Scsi_Host *host;
 	wd33c93_regs regs;
-	uchar *buf;
-	
-	if(called)
-		return 0; /* Should bitch on the console about this... */
-
-	SGIblows->proc_name = "SGIWD93";
 
-	sgiwd93_host = scsi_register(SGIblows, sizeof(struct WD33C93_hostdata));
-	if(sgiwd93_host == NULL)
-		return 0;
-	sgiwd93_host->base = (unsigned long) hregs;
-	sgiwd93_host->irq = SGI_WD93_0_IRQ;
-
-	buf = (uchar *) get_zeroed_page(GFP_KERNEL);
-	if (!buf) {
-		printk(KERN_WARNING "sgiwd93: Could not allocate memory for host0 buffer.\n");
-		scsi_unregister(sgiwd93_host);
-		return 0;
+	host = scsi_register(SGIblows, sizeof(struct ip22_hostdata));
+	if (!host)
+		return NULL;
+
+	host->base = (unsigned long) hregs;
+	host->irq = irq;
+
+	hdata = HDATA(host);
+	hdata->hd.cpu = dma_alloc_coherent(NULL, PAGE_SIZE, &hdata->hd.dma,
+	                                   GFP_KERNEL);
+	if (!hdata->hd.cpu) {
+		printk(KERN_WARNING "sgiwd93: Could not allocate memory for "
+		       "host %d buffer.\n", unit);
+		goto out_unregister;
 	}
-	init_hpc_chain(buf);
-	
-	/* HPC_SCSI_REG0 | 0x03 | KSEG1 */
-	regs.SASR = (unsigned char*) KSEG1ADDR (0x1fbc0003);
-	regs.SCMD = (unsigned char*) KSEG1ADDR (0x1fbc0007);
-	wd33c93_init(sgiwd93_host, regs, dma_setup, dma_stop, WD33C93_FS_16_20);
-
-	hdata = (struct WD33C93_hostdata *)sgiwd93_host->hostdata;
-	hdata->no_sync = 0;
-	hdata->dma_bounce_buffer = (uchar *) (KSEG1ADDR(buf));
-
-	if (request_irq(SGI_WD93_0_IRQ, sgiwd93_intr, 0, "SGI WD93", (void *) sgiwd93_host)) {
-		printk(KERN_WARNING "sgiwd93: Could not register IRQ %d (for host 0).\n", SGI_WD93_0_IRQ);
-		wd33c93_release();
-		free_page((unsigned long)buf);
-		scsi_unregister(sgiwd93_host);
-		return 0;
+	init_hpc_chain(&hdata->hd);
+
+	regs.SASR = wdregs + 3;
+	regs.SCMD = wdregs + 7;
+
+	wd33c93_init(host, regs, dma_setup, dma_stop, WD33C93_FS_16_20);
+
+	hdata->wh.no_sync = 0;
+
+	if (request_irq(irq, sgiwd93_intr, 0, "SGI WD93", (void *) host)) {
+		printk(KERN_WARNING "sgiwd93: Could not register irq %d "
+		       "for host %d.\n", irq, unit);
+		goto out_free;
 	}
-        /* set up second controller on the Indigo2 */
-	if(!sgi_guiness) {
-		sgiwd93_host1 = scsi_register(SGIblows, sizeof(struct WD33C93_hostdata));
-		if(sgiwd93_host1 != NULL)
-		{
-			sgiwd93_host1->base = (unsigned long) hregs1;
-			sgiwd93_host1->irq = SGI_WD93_1_IRQ;
-	
-			buf = (uchar *) get_zeroed_page(GFP_KERNEL);
-			if (!buf) {
-				printk(KERN_WARNING "sgiwd93: Could not allocate memory for host1 buffer.\n");
-				scsi_unregister(sgiwd93_host1);
-				called = 1;
-				return 1; /* We registered host0 so return success*/
-			}
-			init_hpc_chain(buf);
-
-			/* HPC_SCSI_REG1 | 0x03 | KSEG1 */
-			regs.SASR = (unsigned char*) KSEG1ADDR(0x1fbc8003);
-			regs.SCMD = (unsigned char*) KSEG1ADDR(0x1fbc8007);
-			wd33c93_init(sgiwd93_host1, regs, dma_setup, dma_stop,
-			             WD33C93_FS_16_20);
-	
-			hdata1 = (struct WD33C93_hostdata *)sgiwd93_host1->hostdata;
-			hdata1->no_sync = 0;
-			hdata1->dma_bounce_buffer = (uchar *) (KSEG1ADDR(buf));
-	
-			if (request_irq(SGI_WD93_1_IRQ, sgiwd93_intr, 0, "SGI WD93", (void *) sgiwd93_host1)) {
-				printk(KERN_WARNING "sgiwd93: Could not allocate irq %d (for host1).\n", SGI_WD93_1_IRQ);
-				wd33c93_release();
-				free_page((unsigned long)buf);
-				scsi_unregister(sgiwd93_host1);
-				/* Fall through since host0 registered OK */
-			}
-		}
+	return host;
+
+out_free:
+	dma_free_coherent(NULL, PAGE_SIZE, hdata->hd.cpu, hdata->hd.dma);
+	wd33c93_release();
+
+out_unregister:
+	scsi_unregister(host);
+
+	return NULL;
+}
+
+int __init sgiwd93_detect(Scsi_Host_Template *SGIblows)
+{
+	int found = 0;
+
+	SGIblows->proc_name = "SGIWD93";
+	sgiwd93_host = sgiwd93_setup_scsi(SGIblows, 0, SGI_WD93_0_IRQ,
+	                                  &hpc3c0->scsi_chan0,
+	                                  (unsigned char *)hpc3c0->scsi0_ext);
+	if (sgiwd93_host)
+		found++;
+
+	/* Set up second controller on the Indigo2 */
+	if (ip22_is_fullhouse()) {
+		sgiwd93_host1 = sgiwd93_setup_scsi(SGIblows, 1, SGI_WD93_1_IRQ,
+		                          &hpc3c0->scsi_chan1,
+		                          (unsigned char *)hpc3c0->scsi1_ext);
+		if (sgiwd93_host1)
+			found++;
 	}
-	
-	called = 1;
 
-	return 1; /* Found one. */
+	return found;
 }
 
 int sgiwd93_release(struct Scsi_Host *instance)
 {
-	free_irq(SGI_WD93_0_IRQ, sgiwd93_intr);
-	free_page(KSEG0ADDR(hdata->dma_bounce_buffer));
+	struct ip22_hostdata *hdata = HDATA(instance);
+	int irq = 0;
+
+	if (sgiwd93_host && sgiwd93_host == instance)
+		irq = SGI_WD93_0_IRQ;
+	else if (sgiwd93_host1 && sgiwd93_host1 == instance)
+		irq = SGI_WD93_1_IRQ;
+
+	free_irq(irq, sgiwd93_intr);
+	dma_free_coherent(NULL, PAGE_SIZE, hdata->hd.cpu, hdata->hd.dma);
 	wd33c93_release();
-	if(!sgi_guiness) {
-		free_irq(SGI_WD93_1_IRQ, sgiwd93_intr);
-		free_page(KSEG0ADDR(hdata1->dma_bounce_buffer));
-		wd33c93_release();
-	}
+
 	return 1;
 }
 
+static int sgiwd93_bus_reset(Scsi_Cmnd *cmd)
+{
+	/* FIXME perform bus-specific reset */
+	wd33c93_host_reset(cmd);
+	return SUCCESS;
+}
+
+/*
+ * Kludge alert - the SCSI code calls the abort and reset method with int
+ * arguments not with pointers.  So this is going to blow up beautyfully
+ * on 64-bit systems with memory outside the compat address spaces.
+ */
 static Scsi_Host_Template driver_template = {
-	.proc_name	     = "SGIWD93",
-	.name                = "SGI WD93",
-	.detect              = sgiwd93_detect,
-	.release             = sgiwd93_release,
-	.queuecommand        = wd33c93_queuecommand,
-	.abort               = wd33c93_abort,
-	.reset               = wd33c93_reset,
-	.can_queue           = CAN_QUEUE,
-	.this_id             = 7,
-	.sg_tablesize        = SG_ALL,
-	.cmd_per_lun	     = CMD_PER_LUN,
-	.use_clustering      = DISABLE_CLUSTERING,
+	.proc_name		= "SGIWD93",
+	.name			= "SGI WD93",
+	.detect			= sgiwd93_detect,
+	.release		= sgiwd93_release,
+	.queuecommand		= wd33c93_queuecommand,
+	.eh_abort_handler	= wd33c93_abort,
+	.eh_bus_reset_handler	= sgiwd93_bus_reset,
+	.eh_host_reset_handler	= wd33c93_host_reset,
+	.can_queue		= CAN_QUEUE,
+	.this_id		= 7,
+	.sg_tablesize		= SG_ALL,
+	.cmd_per_lun		= CMD_PER_LUN,
+	.use_clustering		= DISABLE_CLUSTERING,
 };
 #include "scsi_module.c"
diff -Nru a/drivers/scsi/sgiwd93.h b/drivers/scsi/sgiwd93.h
--- a/drivers/scsi/sgiwd93.h	Sun May 16 01:18:34 2004
+++ b/drivers/scsi/sgiwd93.h	Sun May 16 01:18:34 2004
@@ -19,6 +19,6 @@
 const char *wd33c93_info(void);
 int wd33c93_queuecommand(Scsi_Cmnd *, void (*done)(Scsi_Cmnd *));
 int wd33c93_abort(Scsi_Cmnd *);
-int wd33c93_reset(Scsi_Cmnd *, unsigned int);
+int wd33c93_host_reset(Scsi_Cmnd * SCpnt);
 
 #endif /* !(_SGIWD93_H) */
diff -Nru a/drivers/scsi/sr.c b/drivers/scsi/sr.c
--- a/drivers/scsi/sr.c	Sun May 16 01:18:34 2004
+++ b/drivers/scsi/sr.c	Sun May 16 01:18:34 2004
@@ -138,7 +138,15 @@
 		goto out;
 	cd = scsi_cd(disk);
 	if (!kref_get(&cd->kref))
-		cd = NULL;
+		goto out_null;
+	if (scsi_device_get(cd->device))
+		goto out_put;
+	goto out;
+
+ out_put:
+	kref_put(&cd->kref);
+ out_null:
+	cd = NULL;
  out:
 	up(&sr_ref_sem);
 	return cd;
@@ -147,6 +155,7 @@
 static inline void scsi_cd_put(struct scsi_cd *cd)
 {
 	down(&sr_ref_sem);
+	scsi_device_put(cd->device);
 	kref_put(&cd->kref);
 	up(&sr_ref_sem);
 }
@@ -558,13 +567,10 @@
 	if (sdev->type != TYPE_ROM && sdev->type != TYPE_WORM)
 		goto fail;
 
-	if ((error = scsi_device_get(sdev)) != 0)
-		goto fail;
-
 	error = -ENOMEM;
 	cd = kmalloc(sizeof(*cd), GFP_KERNEL);
 	if (!cd)
-		goto fail_put_sdev;
+		goto fail;
 	memset(cd, 0, sizeof(*cd));
 
 	kref_init(&cd->kref, sr_kref_release);
@@ -637,8 +643,6 @@
 	put_disk(disk);
 fail_free:
 	kfree(cd);
-fail_put_sdev:
-	scsi_device_put(sdev);
 fail:
 	return error;
 }
@@ -926,7 +930,6 @@
 static void sr_kref_release(struct kref *kref)
 {
 	struct scsi_cd *cd = container_of(kref, struct scsi_cd, kref);
-	struct scsi_device *sdev = cd->device;
 	struct gendisk *disk = cd->disk;
 
 	spin_lock(&sr_index_lock);
@@ -940,8 +943,6 @@
 	put_disk(disk);
 
 	kfree(cd);
-
-	scsi_device_put(sdev);
 }
 
 static int sr_remove(struct device *dev)
@@ -950,7 +951,9 @@
 
 	del_gendisk(cd->disk);
 
-	scsi_cd_put(cd);
+	down(&sr_ref_sem);
+	kref_put(&cd->kref);
+	up(&sr_ref_sem);
 
 	return 0;
 }
diff -Nru a/drivers/scsi/st.c b/drivers/scsi/st.c
--- a/drivers/scsi/st.c	Sun May 16 01:18:35 2004
+++ b/drivers/scsi/st.c	Sun May 16 01:18:35 2004
@@ -17,7 +17,7 @@
    Last modified: 18-JAN-1998 Richard Gooch <rgooch@atnf.csiro.au> Devfs support
  */
 
-static char *verstr = "20040318";
+static char *verstr = "20040403";
 
 #include <linux/module.h>
 
@@ -1031,7 +1031,8 @@
 
 	/* See that we have at least a one page buffer available */
 	if (!enlarge_buffer(STp->buffer, PAGE_SIZE, STp->restr_dma)) {
-		printk(KERN_WARNING "%s: Can't allocate tape buffer.\n", name);
+		printk(KERN_WARNING "%s: Can't allocate one page tape buffer.\n",
+		       name);
 		retval = (-EOVERFLOW);
 		goto err_out;
 	}
@@ -1318,6 +1319,8 @@
 			bufsize = count;
 		if (bufsize > STbp->buffer_size &&
 		    !enlarge_buffer(STbp, bufsize, STp->restr_dma)) {
+			printk(KERN_WARNING "%s: Can't allocate %d byte tape buffer.\n",
+			       tape_name(STp), bufsize);
 			retval = (-EOVERFLOW);
 			goto out;
 		}
@@ -1960,26 +1963,29 @@
 
 
 
+DEB(
 /* Set the driver options */
 static void st_log_options(Scsi_Tape * STp, ST_mode * STm, char *name)
 {
-	printk(KERN_INFO
-	       "%s: Mode %d options: buffer writes: %d, async writes: %d, read ahead: %d\n",
-	       name, STp->current_mode, STm->do_buffer_writes, STm->do_async_writes,
-	       STm->do_read_ahead);
-	printk(KERN_INFO
-	       "%s:    can bsr: %d, two FMs: %d, fast mteom: %d, auto lock: %d,\n",
-	       name, STp->can_bsr, STp->two_fm, STp->fast_mteom, STp->do_auto_lock);
-	printk(KERN_INFO
-	       "%s:    defs for wr: %d, no block limits: %d, partitions: %d, s2 log: %d\n",
-	       name, STm->defaults_for_writes, STp->omit_blklims, STp->can_partitions,
-	       STp->scsi2_logical);
-	printk(KERN_INFO
-	       "%s:    sysv: %d nowait: %d\n", name, STm->sysv, STp->immediate);
-        DEB(printk(KERN_INFO
-                   "%s:    debugging: %d\n",
-                   name, debugging);)
+	if (debugging) {
+		printk(KERN_INFO
+		       "%s: Mode %d options: buffer writes: %d, async writes: %d, read ahead: %d\n",
+		       name, STp->current_mode, STm->do_buffer_writes, STm->do_async_writes,
+		       STm->do_read_ahead);
+		printk(KERN_INFO
+		       "%s:    can bsr: %d, two FMs: %d, fast mteom: %d, auto lock: %d,\n",
+		       name, STp->can_bsr, STp->two_fm, STp->fast_mteom, STp->do_auto_lock);
+		printk(KERN_INFO
+		       "%s:    defs for wr: %d, no block limits: %d, partitions: %d, s2 log: %d\n",
+		       name, STm->defaults_for_writes, STp->omit_blklims, STp->can_partitions,
+		       STp->scsi2_logical);
+		printk(KERN_INFO
+		       "%s:    sysv: %d nowait: %d\n", name, STm->sysv, STp->immediate);
+		printk(KERN_INFO "%s:    debugging: %d\n",
+		       name, debugging);
+	}
 }
+	)
 
 
 static int st_set_options(Scsi_Tape *STp, long options)
@@ -2017,8 +2023,8 @@
 		STp->scsi2_logical = (options & MT_ST_SCSI2LOGICAL) != 0;
 		STp->immediate = (options & MT_ST_NOWAIT) != 0;
 		STm->sysv = (options & MT_ST_SYSV) != 0;
-		DEB( debugging = (options & MT_ST_DEBUGGING) != 0; )
-		st_log_options(STp, STm, name);
+		DEB( debugging = (options & MT_ST_DEBUGGING) != 0;
+		     st_log_options(STp, STm, name); )
 	} else if (code == MT_ST_SETBOOLEANS || code == MT_ST_CLEARBOOLEANS) {
 		value = (code == MT_ST_SETBOOLEANS);
 		if ((options & MT_ST_BUFFER_WRITES) != 0)
@@ -2050,19 +2056,19 @@
 			STm->sysv = value;
                 DEB(
 		if ((options & MT_ST_DEBUGGING) != 0)
-			debugging = value; )
-		st_log_options(STp, STm, name);
+			debugging = value;
+			st_log_options(STp, STm, name); )
 	} else if (code == MT_ST_WRITE_THRESHOLD) {
 		/* Retained for compatibility */
 	} else if (code == MT_ST_DEF_BLKSIZE) {
 		value = (options & ~MT_ST_OPTIONS);
 		if (value == ~MT_ST_OPTIONS) {
 			STm->default_blksize = (-1);
-			printk(KERN_INFO "%s: Default block size disabled.\n", name);
+			DEBC( printk(KERN_INFO "%s: Default block size disabled.\n", name));
 		} else {
 			STm->default_blksize = value;
-			printk(KERN_INFO "%s: Default block size set to %d bytes.\n",
-			       name, STm->default_blksize);
+			DEBC( printk(KERN_INFO "%s: Default block size set to %d bytes.\n",
+			       name, STm->default_blksize));
 			if (STp->ready == ST_READY) {
 				STp->blksize_changed = FALSE;
 				set_mode_densblk(STp, STm);
@@ -2072,12 +2078,12 @@
 		value = (options & ~MT_ST_OPTIONS);
 		if ((value & MT_ST_SET_LONG_TIMEOUT) != 0) {
 			STp->long_timeout = (value & ~MT_ST_SET_LONG_TIMEOUT) * HZ;
-			printk(KERN_INFO "%s: Long timeout set to %d seconds.\n", name,
-			       (value & ~MT_ST_SET_LONG_TIMEOUT));
+			DEBC( printk(KERN_INFO "%s: Long timeout set to %d seconds.\n", name,
+			       (value & ~MT_ST_SET_LONG_TIMEOUT)));
 		} else {
 			STp->timeout = value * HZ;
-			printk(KERN_INFO "%s: Normal timeout set to %d seconds.\n",
-                               name, value);
+			DEBC( printk(KERN_INFO "%s: Normal timeout set to %d seconds.\n",
+				name, value) );
 		}
 	} else if (code == MT_ST_SET_CLN) {
 		value = (options & ~MT_ST_OPTIONS) & 0xff;
@@ -2096,12 +2102,12 @@
 		if (code == MT_ST_DEF_DENSITY) {
 			if (value == MT_ST_CLEAR_DEFAULT) {
 				STm->default_density = (-1);
-				printk(KERN_INFO "%s: Density default disabled.\n",
-                                       name);
+				DEBC( printk(KERN_INFO "%s: Density default disabled.\n",
+                                       name));
 			} else {
 				STm->default_density = value & 0xff;
-				printk(KERN_INFO "%s: Density default set to %x\n",
-				       name, STm->default_density);
+				DEBC( printk(KERN_INFO "%s: Density default set to %x\n",
+				       name, STm->default_density));
 				if (STp->ready == ST_READY) {
 					STp->density_changed = FALSE;
 					set_mode_densblk(STp, STm);
@@ -2110,31 +2116,31 @@
 		} else if (code == MT_ST_DEF_DRVBUFFER) {
 			if (value == MT_ST_CLEAR_DEFAULT) {
 				STp->default_drvbuffer = 0xff;
-				printk(KERN_INFO
-                                       "%s: Drive buffer default disabled.\n", name);
+				DEBC( printk(KERN_INFO
+                                       "%s: Drive buffer default disabled.\n", name));
 			} else {
 				STp->default_drvbuffer = value & 7;
-				printk(KERN_INFO
+				DEBC( printk(KERN_INFO
                                        "%s: Drive buffer default set to %x\n",
-				       name, STp->default_drvbuffer);
+				       name, STp->default_drvbuffer));
 				if (STp->ready == ST_READY)
 					st_int_ioctl(STp, MTSETDRVBUFFER, STp->default_drvbuffer);
 			}
 		} else if (code == MT_ST_DEF_COMPRESSION) {
 			if (value == MT_ST_CLEAR_DEFAULT) {
 				STm->default_compression = ST_DONT_TOUCH;
-				printk(KERN_INFO
-                                       "%s: Compression default disabled.\n", name);
+				DEBC( printk(KERN_INFO
+                                       "%s: Compression default disabled.\n", name));
 			} else {
 				if ((value & 0xff00) != 0) {
 					STp->c_algo = (value & 0xff00) >> 8;
-					printk(KERN_INFO "%s: Compression algorithm set to 0x%x.\n",
-					       name, STp->c_algo);
+					DEBC( printk(KERN_INFO "%s: Compression algorithm set to 0x%x.\n",
+					       name, STp->c_algo));
 				}
 				if ((value & 0xff) != 0xff) {
 					STm->default_compression = (value & 1 ? ST_YES : ST_NO);
-					printk(KERN_INFO "%s: Compression default set to %x\n",
-					       name, (value & 1));
+					DEBC( printk(KERN_INFO "%s: Compression default set to %x\n",
+					       name, (value & 1)));
 					if (STp->ready == ST_READY) {
 						STp->compression_changed = FALSE;
 						st_compression(STp, (STm->default_compression == ST_YES));
@@ -3465,7 +3471,7 @@
 	if (nbr <= 0)
 		return FALSE;
 
-	priority = GFP_KERNEL;
+	priority = GFP_KERNEL | __GFP_NOWARN;
 	if (need_dma)
 		priority |= GFP_DMA;
 	for (b_size = PAGE_SIZE, order=0;
@@ -3482,8 +3488,6 @@
 				order--;
 				continue;
 			}
-			printk(KERN_NOTICE "st: failed to enlarge buffer to %d bytes.\n",
-			       new_size);
 			DEB(STbuffer->buffer_size = got);
 			normalize_buffer(STbuffer);
 			return FALSE;
@@ -3495,9 +3499,6 @@
 		segs++;
 	}
 	STbuffer->b_data = page_address(STbuffer->frp[0].page);
-        DEBC(printk(ST_DEB_MSG
-                    "st: Succeeded to enlarge buffer at %p to %d bytes (segs %d->%d, %d).\n",
-                    STbuffer, got, STbuffer->orig_frp_segs, STbuffer->frp_segs, b_size));
 
 	return TRUE;
 }
@@ -3513,11 +3514,6 @@
 		__free_pages(STbuffer->frp[i].page, order);
 		STbuffer->buffer_size -= STbuffer->frp[i].length;
 	}
-        DEB(
-	if (debugging && STbuffer->orig_frp_segs < STbuffer->frp_segs)
-		printk(ST_DEB_MSG "st: Buffer at %p normalized to %d bytes (segs %d->%d).\n",
-		       STbuffer, STbuffer->buffer_size, STbuffer->frp_segs, STbuffer->orig_frp_segs);
-        ) /* end DEB */
 	STbuffer->frp_segs = STbuffer->orig_frp_segs;
 	STbuffer->frp_sg_current = 0;
 }
@@ -3547,11 +3543,9 @@
 		ubp += cnt;
 		offset = 0;
 	}
-	if (do_count) {		/* Should never happen */
-		printk(KERN_WARNING "st: append_to_buffer overflow (left %d).\n",
-		       do_count);
+	if (do_count) /* Should never happen */
 		return (-EIO);
-	}
+
 	return 0;
 }
 
@@ -3581,11 +3575,9 @@
 		ubp += cnt;
 		offset = 0;
 	}
-	if (do_count) {		/* Should never happen */
-		printk(KERN_WARNING "st: from_buffer overflow (left %d).\n",
-		       do_count);
+	if (do_count) /* Should never happen */
 		return (-EIO);
-	}
+
 	return 0;
 }
 
@@ -3605,10 +3597,6 @@
 		if (src_offset < st_bp->frp[src_seg].length)
 			break;
 		offset -= st_bp->frp[src_seg].length;
-	}
-	if (src_seg == st_bp->frp_segs) {	/* Should never happen */
-		printk(KERN_WARNING "st: move_buffer offset overflow.\n");
-		return;
 	}
 
 	st_bp->buffer_bytes = st_bp->read_pointer = total;
diff -Nru a/drivers/scsi/sym53c8xx_comm.h b/drivers/scsi/sym53c8xx_comm.h
--- a/drivers/scsi/sym53c8xx_comm.h	Sun May 16 01:18:35 2004
+++ b/drivers/scsi/sym53c8xx_comm.h	Sun May 16 01:18:35 2004
@@ -59,11 +59,8 @@
 **	sym53c8xx and ncr53c8xx drivers should share.
 **	The sharing will be achieved in a further version  
 **	of the driver bundle. For now, only the ncr53c8xx 
-**	driver includes	this file.
+**	driver includes this file.
 */
-
-#define MIN(a,b)        (((a) < (b)) ? (a) : (b))
-#define MAX(a,b)        (((a) > (b)) ? (a) : (b))
 
 /*==========================================================
 **
diff -Nru a/drivers/serial/68360serial.c b/drivers/serial/68360serial.c
--- a/drivers/serial/68360serial.c	Sun May 16 01:18:36 2004
+++ b/drivers/serial/68360serial.c	Sun May 16 01:18:36 2004
@@ -1650,7 +1650,6 @@
 	
 	if (tty_hung_up_p(filp)) {
 		DBG_CNT("before DEC-hung");
-		MOD_DEC_USE_COUNT;
 		local_irq_restore(flags);
 		return;
 	}
@@ -1677,7 +1676,6 @@
 	}
 	if (state->count) {
 		DBG_CNT("before DEC-2");
-		MOD_DEC_USE_COUNT;
 		local_irq_restore(flags);
 		return;
 	}
@@ -1732,7 +1730,6 @@
 	}
 	info->flags &= ~(ASYNC_NORMAL_ACTIVE|ASYNC_CLOSING);
 	wake_up_interruptible(&info->close_wait);
-	MOD_DEC_USE_COUNT;
 	local_irq_restore(flags);
 }
 
@@ -1993,14 +1990,12 @@
 	if (retval)
 		return retval;
 
-	MOD_INC_USE_COUNT;
 	retval = block_til_ready(tty, filp, info);
 	if (retval) {
 #ifdef SERIAL_DEBUG_OPEN
 		printk("rs_open returning after block_til_ready with %d\n",
 		       retval);
 #endif
-		MOD_DEC_USE_COUNT;
 		return retval;
 	}
 
@@ -2476,6 +2471,7 @@
 static	int	baud_idx;
 
 static struct tty_operations rs_360_ops = {
+	.owner = THIS_MODULE,
 	.open = rs_360_open,
 	.close = rs_360_close,
 	.write = rs_360_write,
diff -Nru a/drivers/serial/8250_pci.c b/drivers/serial/8250_pci.c
--- a/drivers/serial/8250_pci.c	Sun May 16 01:18:36 2004
+++ b/drivers/serial/8250_pci.c	Sun May 16 01:18:36 2004
@@ -704,7 +704,7 @@
 		.subdevice	= PCI_SUBDEVICE_ID_OCTPRO232,
 		.init		= sbs_init,
 		.setup		= sbs_setup,
-		.exit		= sbs_exit
+		.exit		= __devexit_p(sbs_exit),
 	},
 	/*
 	 * SBS Technologies, Inc., PMC-OCTALPRO 422
@@ -716,7 +716,7 @@
 		.subdevice	= PCI_SUBDEVICE_ID_OCTPRO422,
 		.init		= sbs_init,
 		.setup		= sbs_setup,
-		.exit		= sbs_exit
+		.exit		= __devexit_p(sbs_exit),
 	},
 	/*
 	 * SBS Technologies, Inc., P-Octal 232
@@ -728,7 +728,7 @@
 		.subdevice	= PCI_SUBDEVICE_ID_POCTAL232,
 		.init		= sbs_init,
 		.setup		= sbs_setup,
-		.exit		= sbs_exit
+		.exit		= __devexit_p(sbs_exit),
 	},
 	/*
 	 * SBS Technologies, Inc., P-Octal 422
@@ -740,7 +740,7 @@
 		.subdevice	= PCI_SUBDEVICE_ID_POCTAL422,
 		.init		= sbs_init,
 		.setup		= sbs_setup,
-		.exit		= sbs_exit
+		.exit		= __devexit_p(sbs_exit),
 	},
 
 	/*
diff -Nru a/drivers/serial/sh-sci.c b/drivers/serial/sh-sci.c
--- a/drivers/serial/sh-sci.c	Sun May 16 01:18:36 2004
+++ b/drivers/serial/sh-sci.c	Sun May 16 01:18:36 2004
@@ -904,14 +904,14 @@
 {
 	struct sci_port *s = &sci_ports[port->line];
 
-	sci_request_irq(s);
-	sci_start_tx(port, 1);
-	sci_start_rx(port, 1);
-
 #if defined(__H8300S__)
 	h8300_sci_enable(port, sci_enable);
 #endif
 
+	sci_request_irq(s);
+	sci_start_tx(port, 1);
+	sci_start_rx(port, 1);
+
 	return 0;
 }
 
@@ -1328,6 +1328,7 @@
 	int bits = 8;
 	int parity = 'n';
 	int flow = 'n';
+	int ret;
 
 	if (co->index >= SCI_NPORTS)
 		co->index = 0;
@@ -1345,10 +1346,19 @@
 #else
 	port->uartclk = CONFIG_CPU_CLOCK;
 #endif
+#if defined(__H8300S__)
+	h8300_sci_enable(port, sci_enable);
+#endif
 	if (options)
 		uart_parse_options(options, &baud, &parity, &bits, &flow);
 
-	return uart_set_options(port, co, baud, parity, bits, flow);
+	ret = uart_set_options(port, co, baud, parity, bits, flow);
+#if defined(__H8300H__) || defined(__H8300S__)
+	/* disable rx interrupt */
+	if (ret == 0)
+		sci_stop_rx(port);
+#endif
+	return ret;
 }
 
 static struct console serial_console = {
diff -Nru a/drivers/telephony/ixj.h b/drivers/telephony/ixj.h
--- a/drivers/telephony/ixj.h	Sun May 16 01:18:37 2004
+++ b/drivers/telephony/ixj.h	Sun May 16 01:18:37 2004
@@ -1198,22 +1198,13 @@
 	int aec_level;
 	int cid_play_aec_level;
 	int readers, writers;
-#if LINUX_VERSION_CODE < 0x020400
-	struct wait_queue *poll_q;
-	struct wait_queue *read_q;
-#else
         wait_queue_head_t poll_q;
         wait_queue_head_t read_q;
-#endif
 	char *read_buffer, *read_buffer_end;
 	char *read_convert_buffer;
 	size_t read_buffer_size;
 	unsigned int read_buffer_ready;
-#if LINUX_VERSION_CODE < 0x020400
-	struct wait_queue *write_q;
-#else
         wait_queue_head_t write_q;
-#endif
 	char *write_buffer, *write_buffer_end;
 	char *write_convert_buffer;
 	size_t write_buffer_size;
diff -Nru a/drivers/usb/Makefile b/drivers/usb/Makefile
--- a/drivers/usb/Makefile	Sun May 16 01:18:36 2004
+++ b/drivers/usb/Makefile	Sun May 16 01:18:36 2004
@@ -66,3 +66,4 @@
 obj-$(CONFIG_USB_TEST)		+= misc/
 obj-$(CONFIG_USB_TIGL)		+= misc/
 obj-$(CONFIG_USB_USS720)	+= misc/
+obj-$(CONFIG_USB_PHIDGETSERVO)	+= misc/
diff -Nru a/drivers/usb/class/bluetty.c b/drivers/usb/class/bluetty.c
--- a/drivers/usb/class/bluetty.c	Sun May 16 01:18:36 2004
+++ b/drivers/usb/class/bluetty.c	Sun May 16 01:18:36 2004
@@ -1234,7 +1234,7 @@
 	.chars_in_buffer =	bluetooth_chars_in_buffer,
 };
 
-int usb_bluetooth_init(void)
+static int usb_bluetooth_init(void)
 {
 	int i;
 	int result;
@@ -1283,7 +1283,7 @@
 }
 
 
-void usb_bluetooth_exit(void)
+static void usb_bluetooth_exit(void)
 {
 	usb_deregister(&usb_bluetooth_driver);
 	tty_unregister_driver(bluetooth_tty_driver);
diff -Nru a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
--- a/drivers/usb/class/cdc-acm.c	Sun May 16 01:18:35 2004
+++ b/drivers/usb/class/cdc-acm.c	Sun May 16 01:18:35 2004
@@ -567,6 +567,8 @@
  * USB probe and disconnect routines.
  */
 
+#define CHECK_XFERTYPE(descr, xfer_type) (((descr)->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == xfer_type)
+			
 static int acm_probe (struct usb_interface *intf,
 		      const struct usb_device_id *id)
 {
@@ -583,143 +585,150 @@
 
 	dev = interface_to_usbdev (intf);
 
-			cfacm = dev->actconfig;
-	
-			/* We know we're probe()d with the control interface. */
-			ifcom = intf->cur_altsetting;
-
-			/* ACM doesn't guarantee the data interface is
-			 * adjacent to the control interface, or that if one
-			 * is there it's not for call management ... so find
-			 * it
-			 */
-			for (j = 0; j < cfacm->desc.bNumInterfaces; j++) {
-				ifdata = cfacm->interface[j]->cur_altsetting;
-				data = cfacm->interface[j];
-
-				if (ifdata->desc.bInterfaceClass == 10 &&
-				    ifdata->desc.bNumEndpoints == 2) {
-					epctrl = &ifcom->endpoint[0].desc;
-					epread = &ifdata->endpoint[0].desc;
-					epwrite = &ifdata->endpoint[1].desc;
-
-					if ((epctrl->bEndpointAddress & 0x80) != 0x80 ||
-					    (epctrl->bmAttributes & 3) != 3 ||
-					    (epread->bmAttributes & 3) != 2 || 
-					    (epwrite->bmAttributes & 3) != 2 ||
-					    ((epread->bEndpointAddress & 0x80) ^ (epwrite->bEndpointAddress & 0x80)) != 0x80) 
-						goto next_interface;
-
-					if ((epread->bEndpointAddress & 0x80) != 0x80) {
-						epread = &ifdata->endpoint[1].desc;
-						epwrite = &ifdata->endpoint[0].desc;
-					}
-					dbg("found data interface at %d\n", j);
-					break;
-				} else {
-next_interface:
-					ifdata = NULL;
-					data = NULL;
-				}
-			}
-
-			/* there's been a problem */
-			if (!ifdata) {
-				dbg("interface not found (%p)\n", ifdata);
-				return -ENODEV;
-
-			}
-
-			for (minor = 0; minor < ACM_TTY_MINORS && acm_table[minor]; minor++);
-			if (acm_table[minor]) {
-				err("no more free acm devices");
-				return -ENODEV;
-			}
+	cfacm = dev->actconfig;
 
-			if (!(acm = kmalloc(sizeof(struct acm), GFP_KERNEL))) {
-				err("out of memory");
-				return -ENOMEM;
-			}
-			memset(acm, 0, sizeof(struct acm));
-
-			ctrlsize = epctrl->wMaxPacketSize;
-			readsize = epread->wMaxPacketSize;
-			acm->writesize = epwrite->wMaxPacketSize;
-			acm->control = intf;
-			acm->data = data;
-			acm->minor = minor;
-			acm->dev = dev;
-
-			acm->bh.func = acm_rx_tasklet;
-			acm->bh.data = (unsigned long) acm;
-			INIT_WORK(&acm->work, acm_softint, acm);
-
-			if (!(buf = kmalloc(ctrlsize + readsize + acm->writesize, GFP_KERNEL))) {
-				err("out of memory");
-				kfree(acm);
-				return -ENOMEM;
-			}
+	/* We know we're probe()d with the control interface. */
+	ifcom = intf->cur_altsetting;
 
-			acm->ctrlurb = usb_alloc_urb(0, GFP_KERNEL);
-			if (!acm->ctrlurb) {
-				err("out of memory");
-				kfree(acm);
-				kfree(buf);
-				return -ENOMEM;
-			}
-			acm->readurb = usb_alloc_urb(0, GFP_KERNEL);
-			if (!acm->readurb) {
-				err("out of memory");
-				usb_free_urb(acm->ctrlurb);
-				kfree(acm);
-				kfree(buf);
-				return -ENOMEM;
-			}
-			acm->writeurb = usb_alloc_urb(0, GFP_KERNEL);
-			if (!acm->writeurb) {
-				err("out of memory");
-				usb_free_urb(acm->readurb);
-				usb_free_urb(acm->ctrlurb);
-				kfree(acm);
-				kfree(buf);
-				return -ENOMEM;
-			}
-
-			usb_fill_int_urb(acm->ctrlurb, dev, usb_rcvintpipe(dev, epctrl->bEndpointAddress),
-				buf, ctrlsize, acm_ctrl_irq, acm, epctrl->bInterval);
+	/* ACM doesn't guarantee the data interface is
+	 * adjacent to the control interface, or that if one
+	 * is there it's not for call management ... so find
+	 * it
+	 */
+	for (j = 0; j < cfacm->desc.bNumInterfaces; j++) {
+		ifdata = cfacm->interface[j]->cur_altsetting;
+		data = cfacm->interface[j];
+
+		if (ifdata->desc.bInterfaceClass == USB_CLASS_CDC_DATA
+		    && ifdata->desc.bNumEndpoints == 2) {
+			
+			epctrl = &ifcom->endpoint[0].desc;
+			epread = &ifdata->endpoint[0].desc;
+			epwrite = &ifdata->endpoint[1].desc;
+
+			if ((epctrl->bEndpointAddress & USB_DIR_IN) != USB_DIR_IN
+			    || !CHECK_XFERTYPE(epctrl,  USB_ENDPOINT_XFER_INT)
+			    || !CHECK_XFERTYPE(epread,  USB_ENDPOINT_XFER_BULK)
+			    || !CHECK_XFERTYPE(epwrite, USB_ENDPOINT_XFER_BULK)
+			    || ((epread->bEndpointAddress & USB_DIR_IN)
+			        ^ (epwrite->bEndpointAddress & USB_DIR_IN)) != USB_DIR_IN) {
+				/* not suitable */
+				goto next_interface;
+			}
+			
+			if ((epread->bEndpointAddress & USB_DIR_IN) != USB_DIR_IN) {
+				/* descriptors are swapped */
+				epread = &ifdata->endpoint[1].desc;
+				epwrite = &ifdata->endpoint[0].desc;
+			}
+			dev_dbg(&intf->dev, "found data interface at %d\n", j);
+			break;
+		} else {
+next_interface:
+			ifdata = NULL;
+			data = NULL;
+		}
+	}
+
+	/* there's been a problem */
+	if (!ifdata) {
+		dev_dbg(&intf->dev, "data interface not found\n");
+		return -ENODEV;
+
+	}
+
+	for (minor = 0; minor < ACM_TTY_MINORS && acm_table[minor]; minor++);
+	if (acm_table[minor]) {
+		err("no more free acm devices");
+		return -ENODEV;
+	}
+
+	if (!(acm = kmalloc(sizeof(struct acm), GFP_KERNEL))) {
+		dev_dbg(&intf->dev, "out of memory (acm kmalloc)\n");
+		return -ENOMEM;
+	}
+	
+	memset(acm, 0, sizeof(struct acm));
 
-			usb_fill_bulk_urb(acm->readurb, dev, usb_rcvbulkpipe(dev, epread->bEndpointAddress),
-				buf += ctrlsize, readsize, acm_read_bulk, acm);
-			acm->readurb->transfer_flags |= URB_NO_FSBR;
-
-			usb_fill_bulk_urb(acm->writeurb, dev, usb_sndbulkpipe(dev, epwrite->bEndpointAddress),
-				buf += readsize, acm->writesize, acm_write_bulk, acm);
-			acm->writeurb->transfer_flags |= URB_NO_FSBR;
-
-			dev_info(&intf->dev, "ttyACM%d: USB ACM device", minor);
-
-			acm_set_control(acm, acm->ctrlout);
-
-			acm->line.speed = cpu_to_le32(9600);
-			acm->line.databits = 8;
-			acm_set_line(acm, &acm->line);
-
-			if ( (j = usb_driver_claim_interface(&acm_driver, data, acm)) != 0) {
-				err("claim failed");
-				usb_free_urb(acm->ctrlurb);
-				usb_free_urb(acm->readurb);
-				usb_free_urb(acm->writeurb);
-				kfree(acm);
-				kfree(buf);
-				return j;
-			} 
-
-			tty_register_device(acm_tty_driver, minor, &intf->dev);
-
-			acm_table[minor] = acm;
-			usb_set_intfdata (intf, acm);
-			return 0;
+	ctrlsize = epctrl->wMaxPacketSize;
+	readsize = epread->wMaxPacketSize;
+	acm->writesize = epwrite->wMaxPacketSize;
+	acm->control = intf;
+	acm->data = data;
+	acm->minor = minor;
+	acm->dev = dev;
+
+	acm->bh.func = acm_rx_tasklet;
+	acm->bh.data = (unsigned long) acm;
+	INIT_WORK(&acm->work, acm_softint, acm);
+
+	if (!(buf = kmalloc(ctrlsize + readsize + acm->writesize, GFP_KERNEL))) {
+		dev_dbg(&intf->dev, "out of memory (buf kmalloc)\n");
+		kfree(acm);
+		return -ENOMEM;
+	}
+
+	acm->ctrlurb = usb_alloc_urb(0, GFP_KERNEL);
+	if (!acm->ctrlurb) {
+		dev_dbg(&intf->dev, "out of memory (ctrlurb kmalloc)\n");
+		kfree(acm);
+		kfree(buf);
+		return -ENOMEM;
+	}
+	acm->readurb = usb_alloc_urb(0, GFP_KERNEL);
+	if (!acm->readurb) {
+		dev_dbg(&intf->dev, "out of memory (readurb kmalloc)\n");
+		usb_free_urb(acm->ctrlurb);
+		kfree(acm);
+		kfree(buf);
+		return -ENOMEM;
+	}
+	acm->writeurb = usb_alloc_urb(0, GFP_KERNEL);
+	if (!acm->writeurb) {
+		dev_dbg(&intf->dev, "out of memory (writeurb kmalloc)\n");
+		usb_free_urb(acm->readurb);
+		usb_free_urb(acm->ctrlurb);
+		kfree(acm);
+		kfree(buf);
+		return -ENOMEM;
+	}
+
+	usb_fill_int_urb(acm->ctrlurb, dev, usb_rcvintpipe(dev, epctrl->bEndpointAddress),
+		buf, ctrlsize, acm_ctrl_irq, acm, epctrl->bInterval);
+
+	usb_fill_bulk_urb(acm->readurb, dev, usb_rcvbulkpipe(dev, epread->bEndpointAddress),
+		buf += ctrlsize, readsize, acm_read_bulk, acm);
+	acm->readurb->transfer_flags |= URB_NO_FSBR;
+
+	usb_fill_bulk_urb(acm->writeurb, dev, usb_sndbulkpipe(dev, epwrite->bEndpointAddress),
+		buf += readsize, acm->writesize, acm_write_bulk, acm);
+	acm->writeurb->transfer_flags |= URB_NO_FSBR;
+
+	if ( (j = usb_driver_claim_interface(&acm_driver, data, acm)) != 0) {
+		err("claim failed");
+		usb_free_urb(acm->ctrlurb);
+		usb_free_urb(acm->readurb);
+		usb_free_urb(acm->writeurb);
+		kfree(acm);
+		kfree(buf);
+		return j;
+	} 
+
+	tty_register_device(acm_tty_driver, minor, &intf->dev);
+
+	dev_info(&intf->dev, "ttyACM%d: USB ACM device\n", minor);
+
+	acm_set_control(acm, acm->ctrlout);
+
+	acm->line.speed = cpu_to_le32(9600);
+	acm->line.databits = 8;
+	acm_set_line(acm, &acm->line);
+
+	acm_table[minor] = acm;
+	usb_set_intfdata (intf, acm);
+	return 0;
 }
+#undef CHECK_XFERTYPE
 
 static void acm_disconnect(struct usb_interface *intf)
 {
diff -Nru a/drivers/usb/core/config.c b/drivers/usb/core/config.c
--- a/drivers/usb/core/config.c	Sun May 16 01:18:33 2004
+++ b/drivers/usb/core/config.c	Sun May 16 01:18:33 2004
@@ -18,6 +18,11 @@
 #define USB_MAXCONFIG			8	/* Arbitrary limit */
 
 
+static inline const char *plural(int n)
+{
+	return (n == 1 ? "" : "s");
+}
+
 static int find_next_descriptor(unsigned char *buffer, int size,
     int dt1, int dt2, int *num_skipped)
 {
@@ -26,7 +31,7 @@
 	unsigned char *buffer0 = buffer;
 
 	/* Find the next descriptor of type dt1 or dt2 */
-	while (size >= sizeof(struct usb_descriptor_header)) {
+	while (size > 0) {
 		h = (struct usb_descriptor_header *) buffer;
 		if (h->bDescriptorType == dt1 || h->bDescriptorType == dt2)
 			break;
@@ -43,46 +48,46 @@
 }
 
 static int usb_parse_endpoint(struct device *ddev, int cfgno, int inum,
-    int asnum, struct usb_host_endpoint *endpoint,
+    int asnum, struct usb_host_interface *ifp, int num_ep,
     unsigned char *buffer, int size)
 {
 	unsigned char *buffer0 = buffer;
-	struct usb_descriptor_header *header;
+	struct usb_endpoint_descriptor *d;
+	struct usb_host_endpoint *endpoint;
 	int n, i;
 
-	header = (struct usb_descriptor_header *)buffer;
-	if (header->bDescriptorType != USB_DT_ENDPOINT) {
-		dev_err(ddev, "config %d interface %d altsetting %d has an "
-		    "unexpected descriptor of type 0x%X, "
-		    "expecting endpoint type 0x%X\n",
-		    cfgno, inum, asnum,
-		    header->bDescriptorType, USB_DT_ENDPOINT);
-		return -EINVAL;
-	}
+	d = (struct usb_endpoint_descriptor *) buffer;
+	buffer += d->bLength;
+	size -= d->bLength;
 
-	if (header->bLength >= USB_DT_ENDPOINT_AUDIO_SIZE)
-		memcpy(&endpoint->desc, buffer, USB_DT_ENDPOINT_AUDIO_SIZE);
-	else if (header->bLength >= USB_DT_ENDPOINT_SIZE)
-		memcpy(&endpoint->desc, buffer, USB_DT_ENDPOINT_SIZE);
+	if (d->bLength >= USB_DT_ENDPOINT_AUDIO_SIZE)
+		n = USB_DT_ENDPOINT_AUDIO_SIZE;
+	else if (d->bLength >= USB_DT_ENDPOINT_SIZE)
+		n = USB_DT_ENDPOINT_SIZE;
 	else {
-		dev_err(ddev, "config %d interface %d altsetting %d has an "
-		    "invalid endpoint descriptor of length %d\n",
-		    cfgno, inum, asnum, header->bLength);
-		return -EINVAL;
+		dev_warn(ddev, "config %d interface %d altsetting %d has an "
+		    "invalid endpoint descriptor of length %d, skipping\n",
+		    cfgno, inum, asnum, d->bLength);
+		goto skip_to_next_endpoint_or_interface_descriptor;
 	}
 
-	i = endpoint->desc.bEndpointAddress & ~USB_ENDPOINT_DIR_MASK;
+	i = d->bEndpointAddress & ~USB_ENDPOINT_DIR_MASK;
 	if (i >= 16 || i == 0) {
-		dev_err(ddev, "config %d interface %d altsetting %d has an "
-		    "invalid endpoint with address 0x%X\n",
-		    cfgno, inum, asnum, endpoint->desc.bEndpointAddress);
-		return -EINVAL;
+		dev_warn(ddev, "config %d interface %d altsetting %d has an "
+		    "invalid endpoint with address 0x%X, skipping\n",
+		    cfgno, inum, asnum, d->bEndpointAddress);
+		goto skip_to_next_endpoint_or_interface_descriptor;
 	}
 
-	le16_to_cpus(&endpoint->desc.wMaxPacketSize);
+	/* Only store as many endpoints as we have room for */
+	if (ifp->desc.bNumEndpoints >= num_ep)
+		goto skip_to_next_endpoint_or_interface_descriptor;
+
+	endpoint = &ifp->endpoint[ifp->desc.bNumEndpoints];
+	++ifp->desc.bNumEndpoints;
 
-	buffer += header->bLength;
-	size -= header->bLength;
+	memcpy(&endpoint->desc, d, n);
+	le16_to_cpus(&endpoint->desc.wMaxPacketSize);
 
 	/* Skip over any Class Specific or Vendor Specific descriptors;
 	 * find the next endpoint or interface descriptor */
@@ -91,67 +96,72 @@
 	    USB_DT_INTERFACE, &n);
 	endpoint->extralen = i;
 	if (n > 0)
-		dev_dbg(ddev, "skipped %d class/vendor specific endpoint "
-		    "descriptors\n", n);
+		dev_dbg(ddev, "skipped %d descriptor%s after %s\n",
+		    n, plural(n), "endpoint");
+	return buffer - buffer0 + i;
+
+skip_to_next_endpoint_or_interface_descriptor:
+	i = find_next_descriptor(buffer, size, USB_DT_ENDPOINT,
+	    USB_DT_INTERFACE, NULL);
 	return buffer - buffer0 + i;
 }
 
-static void usb_free_intf(struct usb_interface *intf)
+static void usb_release_interface_cache(struct kref *ref)
 {
+	struct usb_interface_cache *intfc = ref_to_usb_interface_cache(ref);
 	int j;
 
-	if (intf->altsetting) {
-		for (j = 0; j < intf->num_altsetting; j++) {
-			struct usb_host_interface *alt = &intf->altsetting[j];
-
-			kfree(alt->endpoint);
-		}
-		kfree(intf->altsetting);
-	}
-	kfree(intf);
+	for (j = 0; j < intfc->num_altsetting; j++)
+		kfree(intfc->altsetting[j].endpoint);
+	kfree(intfc);
 }
 
 static int usb_parse_interface(struct device *ddev, int cfgno,
-    struct usb_host_config *config, unsigned char *buffer, int size)
+    struct usb_host_config *config, unsigned char *buffer, int size,
+    u8 inums[], u8 nalts[])
 {
 	unsigned char *buffer0 = buffer;
 	struct usb_interface_descriptor	*d;
 	int inum, asnum;
-	struct usb_interface *interface;
+	struct usb_interface_cache *intfc;
 	struct usb_host_interface *alt;
 	int i, n;
 	int len, retval;
+	int num_ep, num_ep_orig;
 
 	d = (struct usb_interface_descriptor *) buffer;
 	buffer += d->bLength;
 	size -= d->bLength;
 
-	if (d->bDescriptorType != USB_DT_INTERFACE) {
-		dev_err(ddev, "config %d has an unexpected descriptor of type "
-		    "0x%X, expecting interface type 0x%X\n",
-		    cfgno, d->bDescriptorType, USB_DT_INTERFACE);
-		return -EINVAL;
-	}
+	if (d->bLength < USB_DT_INTERFACE_SIZE)
+		goto skip_to_next_interface_descriptor;
 
+	/* Which interface entry is this? */
+	intfc = NULL;
 	inum = d->bInterfaceNumber;
-	if (inum >= config->desc.bNumInterfaces)
+	for (i = 0; i < config->desc.bNumInterfaces; ++i) {
+		if (inums[i] == inum) {
+			intfc = config->intf_cache[i];
+			break;
+		}
+	}
+	if (!intfc || intfc->num_altsetting >= nalts[i])
 		goto skip_to_next_interface_descriptor;
 
-	interface = config->interface[inum];
+	/* Check for duplicate altsetting entries */
 	asnum = d->bAlternateSetting;
-	if (asnum >= interface->num_altsetting) {
-		dev_err(ddev, "config %d interface %d has an invalid "
-		    "alternate setting number: %d but max is %d\n",
-		    cfgno, inum, asnum, interface->num_altsetting - 1);
-		return -EINVAL;
+	for ((i = 0, alt = &intfc->altsetting[0]);
+	      i < intfc->num_altsetting;
+	     (++i, ++alt)) {
+		if (alt->desc.bAlternateSetting == asnum) {
+			dev_warn(ddev, "Duplicate descriptor for config %d "
+			    "interface %d altsetting %d, skipping\n",
+			    cfgno, inum, asnum);
+			goto skip_to_next_interface_descriptor;
+		}
 	}
 
-	alt = &interface->altsetting[asnum];
-	if (alt->desc.bLength) {
-		dev_err(ddev, "Duplicate descriptor for config %d "
-		    "interface %d altsetting %d\n", cfgno, inum, asnum);
-		return -EINVAL;
-	}
+	++intfc->num_altsetting;
 	memcpy(&alt->desc, d, USB_DT_INTERFACE_SIZE);
 
 	/* Skip over any Class Specific or Vendor Specific descriptors;
@@ -161,41 +171,48 @@
 	    USB_DT_INTERFACE, &n);
 	alt->extralen = i;
 	if (n > 0)
-		dev_dbg(ddev, "skipped %d class/vendor specific "
-		    "interface descriptors\n", n);
+		dev_dbg(ddev, "skipped %d descriptor%s after %s\n",
+		    n, plural(n), "interface");
 	buffer += i;
 	size -= i;
 
-	if (alt->desc.bNumEndpoints > USB_MAXENDPOINTS) {
-		dev_err(ddev, "too many endpoints for config %d interface %d "
-		    "altsetting %d: %d, maximum allowed: %d\n",
-		    cfgno, inum, asnum, alt->desc.bNumEndpoints,
-		    USB_MAXENDPOINTS);
-		return -EINVAL;
+	/* Allocate space for the right(?) number of endpoints */
+	num_ep = num_ep_orig = alt->desc.bNumEndpoints;
+	alt->desc.bNumEndpoints = 0;		// Use as a counter
+	if (num_ep > USB_MAXENDPOINTS) {
+		dev_warn(ddev, "too many endpoints for config %d interface %d "
+		    "altsetting %d: %d, using maximum allowed: %d\n",
+		    cfgno, inum, asnum, num_ep, USB_MAXENDPOINTS);
+		num_ep = USB_MAXENDPOINTS;
 	}
 
-	len = alt->desc.bNumEndpoints * sizeof(struct usb_host_endpoint);
+	len = sizeof(struct usb_host_endpoint) * num_ep;
 	alt->endpoint = kmalloc(len, GFP_KERNEL);
 	if (!alt->endpoint)
 		return -ENOMEM;
 	memset(alt->endpoint, 0, len);
 
-	for (i = 0; i < alt->desc.bNumEndpoints; i++) {
-		if (size < USB_DT_ENDPOINT_SIZE) {
-			dev_err(ddev, "too few endpoint descriptors for "
-			    "config %d interface %d altsetting %d\n",
-			    cfgno, inum, asnum);
-			return -EINVAL;
-		}
-
-		retval = usb_parse_endpoint(ddev, cfgno, inum, asnum,
-		    alt->endpoint + i, buffer, size);
+	/* Parse all the endpoint descriptors */
+	n = 0;
+	while (size > 0) {
+		if (((struct usb_descriptor_header *) buffer)->bDescriptorType
+		     == USB_DT_INTERFACE)
+			break;
+		retval = usb_parse_endpoint(ddev, cfgno, inum, asnum, alt,
+		    num_ep, buffer, size);
 		if (retval < 0)
 			return retval;
+		++n;
 
 		buffer += retval;
 		size -= retval;
 	}
+
+	if (n != num_ep_orig)
+		dev_warn(ddev, "config %d interface %d altsetting %d has %d "
+		    "endpoint descriptor%s, different from the interface "
+		    "descriptor's value: %d\n",
+		    cfgno, inum, asnum, n, plural(n), num_ep_orig);
 	return buffer - buffer0;
 
 skip_to_next_interface_descriptor:
@@ -207,14 +224,16 @@
 int usb_parse_configuration(struct device *ddev, int cfgidx,
     struct usb_host_config *config, unsigned char *buffer, int size)
 {
+	unsigned char *buffer0 = buffer;
 	int cfgno;
 	int nintf, nintf_orig;
 	int i, j, n;
-	struct usb_interface *interface;
+	struct usb_interface_cache *intfc;
 	unsigned char *buffer2;
 	int size2;
 	struct usb_descriptor_header *header;
 	int len, retval;
+	u8 inums[USB_MAXINTERFACES], nalts[USB_MAXINTERFACES];
 
 	memcpy(&config->desc, buffer, USB_DT_CONFIG_SIZE);
 	if (config->desc.bDescriptorType != USB_DT_CONFIG ||
@@ -224,7 +243,6 @@
 		    config->desc.bDescriptorType, config->desc.bLength);
 		return -EINVAL;
 	}
-	config->desc.wTotalLength = size;
 	cfgno = config->desc.bConfigurationValue;
 
 	buffer += config->desc.bLength;
@@ -235,84 +253,110 @@
 		dev_warn(ddev, "config %d has too many interfaces: %d, "
 		    "using maximum allowed: %d\n",
 		    cfgno, nintf, USB_MAXINTERFACES);
-		config->desc.bNumInterfaces = nintf = USB_MAXINTERFACES;
-	}
-
-	for (i = 0; i < nintf; ++i) {
-		interface = config->interface[i] =
-		    kmalloc(sizeof(struct usb_interface), GFP_KERNEL);
-		if (!interface)
-			return -ENOMEM;
-		memset(interface, 0, sizeof(struct usb_interface));
+		nintf = USB_MAXINTERFACES;
 	}
 
 	/* Go through the descriptors, checking their length and counting the
 	 * number of altsettings for each interface */
+	n = 0;
 	for ((buffer2 = buffer, size2 = size);
-	      size2 >= sizeof(struct usb_descriptor_header);
+	      size2 > 0;
 	     (buffer2 += header->bLength, size2 -= header->bLength)) {
 
+		if (size2 < sizeof(struct usb_descriptor_header)) {
+			dev_warn(ddev, "config %d descriptor has %d excess "
+			    "byte%s, ignoring\n",
+			    cfgno, size2, plural(size2));
+			break;
+		}
+
 		header = (struct usb_descriptor_header *) buffer2;
 		if ((header->bLength > size2) || (header->bLength < 2)) {
-			dev_err(ddev, "config %d has an invalid descriptor "
-			    "of length %d\n", cfgno, header->bLength);
-			return -EINVAL;
+			dev_warn(ddev, "config %d has an invalid descriptor "
+			    "of length %d, skipping remainder of the config\n",
+			    cfgno, header->bLength);
+			break;
 		}
 
 		if (header->bDescriptorType == USB_DT_INTERFACE) {
 			struct usb_interface_descriptor *d;
+			int inum;
 
 			d = (struct usb_interface_descriptor *) header;
 			if (d->bLength < USB_DT_INTERFACE_SIZE) {
-				dev_err(ddev, "config %d has an invalid "
-				    "interface descriptor of length %d\n",
-				    cfgno, d->bLength);
-				return -EINVAL;
+				dev_warn(ddev, "config %d has an invalid "
+				    "interface descriptor of length %d, "
+				    "skipping\n", cfgno, d->bLength);
+				continue;
 			}
 
-			i = d->bInterfaceNumber;
-			if (i >= nintf_orig) {
-				dev_err(ddev, "config %d has an invalid "
+			inum = d->bInterfaceNumber;
+			if (inum >= nintf_orig)
+				dev_warn(ddev, "config %d has an invalid "
 				    "interface number: %d but max is %d\n",
-				    cfgno, i, nintf_orig - 1);
-				return -EINVAL;
+				    cfgno, inum, nintf_orig - 1);
+
+			/* Have we already encountered this interface?
+			 * Count its altsettings */
+			for (i = 0; i < n; ++i) {
+				if (inums[i] == inum)
+					break;
+			}
+			if (i < n) {
+				if (nalts[i] < 255)
+					++nalts[i];
+			} else if (n < USB_MAXINTERFACES) {
+				inums[n] = inum;
+				nalts[n] = 1;
+				++n;
 			}
-			if (i < nintf)
-				++config->interface[i]->num_altsetting;
 
 		} else if (header->bDescriptorType == USB_DT_DEVICE ||
-			    header->bDescriptorType == USB_DT_CONFIG) {
-			dev_err(ddev, "config %d contains an unexpected "
-			    "descriptor of type 0x%X\n",
+			    header->bDescriptorType == USB_DT_CONFIG)
+			dev_warn(ddev, "config %d contains an unexpected "
+			    "descriptor of type 0x%X, skipping\n",
 			    cfgno, header->bDescriptorType);
-			return -EINVAL;
-		}
 
 	}	/* for ((buffer2 = buffer, size2 = size); ...) */
+	size = buffer2 - buffer;
+	config->desc.wTotalLength = buffer2 - buffer0;
+
+	if (n != nintf)
+		dev_warn(ddev, "config %d has %d interface%s, different from "
+		    "the descriptor's value: %d\n",
+		    cfgno, n, plural(n), nintf_orig);
+	else if (n == 0)
+		dev_warn(ddev, "config %d has no interfaces?\n", cfgno);
+	config->desc.bNumInterfaces = nintf = n;
 
-	/* Allocate the altsetting arrays */
+	/* Check for missing interface numbers */
 	for (i = 0; i < nintf; ++i) {
-		interface = config->interface[i];
-		if (interface->num_altsetting > USB_MAXALTSETTING) {
-			dev_err(ddev, "too many alternate settings for "
-			    "config %d interface %d: %d, "
-			    "maximum allowed: %d\n",
-			    cfgno, i, interface->num_altsetting,
-			    USB_MAXALTSETTING);
-			return -EINVAL;
+		for (j = 0; j < nintf; ++j) {
+			if (inums[j] == i)
+				break;
 		}
-		if (interface->num_altsetting == 0) {
-			dev_err(ddev, "config %d has no interface number "
+		if (j >= nintf)
+			dev_warn(ddev, "config %d has no interface number "
 			    "%d\n", cfgno, i);
-			return -EINVAL;
+	}
+
+	/* Allocate the usb_interface_caches and altsetting arrays */
+	for (i = 0; i < nintf; ++i) {
+		j = nalts[i];
+		if (j > USB_MAXALTSETTING) {
+			dev_warn(ddev, "too many alternate settings for "
+			    "config %d interface %d: %d, "
+			    "using maximum allowed: %d\n",
+			    cfgno, inums[i], j, USB_MAXALTSETTING);
+			nalts[i] = j = USB_MAXALTSETTING;
 		}
 
-		len = sizeof(*interface->altsetting) *
-		    interface->num_altsetting;
-		interface->altsetting = kmalloc(len, GFP_KERNEL);
-		if (!interface->altsetting)
+		len = sizeof(*intfc) + sizeof(struct usb_host_interface) * j;
+		config->intf_cache[i] = intfc = kmalloc(len, GFP_KERNEL);
+		if (!intfc)
 			return -ENOMEM;
-		memset(interface->altsetting, 0, len);
+		memset(intfc, 0, len);
+		kref_init(&intfc->ref, usb_release_interface_cache);
 	}
 
 	/* Skip over any Class Specific or Vendor Specific descriptors;
@@ -322,15 +366,15 @@
 	    USB_DT_INTERFACE, &n);
 	config->extralen = i;
 	if (n > 0)
-		dev_dbg(ddev, "skipped %d class/vendor specific "
-		    "configuration descriptors\n", n);
+		dev_dbg(ddev, "skipped %d descriptor%s after %s\n",
+		    n, plural(n), "configuration");
 	buffer += i;
 	size -= i;
 
 	/* Parse all the interface/altsetting descriptors */
-	while (size >= sizeof(struct usb_descriptor_header)) {
+	while (size > 0) {
 		retval = usb_parse_interface(ddev, cfgno, config,
-		    buffer, size);
+		    buffer, size, inums, nalts);
 		if (retval < 0)
 			return retval;
 
@@ -340,17 +384,20 @@
 
 	/* Check for missing altsettings */
 	for (i = 0; i < nintf; ++i) {
-		interface = config->interface[i];
-		for (j = 0; j < interface->num_altsetting; ++j) {
-			if (!interface->altsetting[j].desc.bLength) {
-				dev_err(ddev, "config %d interface %d has no "
-				    "altsetting %d\n", cfgno, i, j);
-				return -EINVAL;
+		intfc = config->intf_cache[i];
+		for (j = 0; j < intfc->num_altsetting; ++j) {
+			for (n = 0; n < intfc->num_altsetting; ++n) {
+				if (intfc->altsetting[n].desc.
+				    bAlternateSetting == j)
+					break;
 			}
+			if (n >= intfc->num_altsetting)
+				dev_warn(ddev, "config %d interface %d has no "
+				    "altsetting %d\n", cfgno, inums[i], j);
 		}
 	}
 
-	return size;
+	return 0;
 }
 
 // hub-only!! ... and only exported for reset/reinit path.
@@ -374,10 +421,8 @@
 		struct usb_host_config *cf = &dev->config[c];
 
 		for (i = 0; i < cf->desc.bNumInterfaces; i++) {
-			struct usb_interface *ifp = cf->interface[i];
-
-			if (ifp)
-				usb_free_intf(ifp);
+			if (cf->intf_cache[i])
+				kref_put(&cf->intf_cache[i]->ref);
 		}
 	}
 	kfree(dev->config);
@@ -458,21 +503,16 @@
 			goto err;
 		}
 		if (result < length) {
-			dev_err(ddev, "config index %d descriptor too short "
+			dev_warn(ddev, "config index %d descriptor too short "
 			    "(expected %i, got %i)\n", cfgno, length, result);
-			result = -EINVAL;
-			kfree(bigbuffer);
-			goto err;
+			length = result;
 		}
 
 		dev->rawdescriptors[cfgno] = bigbuffer;
 
 		result = usb_parse_configuration(&dev->dev, cfgno,
 		    &dev->config[cfgno], bigbuffer, length);
-		if (result > 0)
-			dev_dbg(ddev, "config index %d descriptor has %d "
-			    "excess byte(s)\n", cfgno, result);
-		else if (result < 0) {
+		if (result < 0) {
 			++cfgno;
 			goto err;
 		}
diff -Nru a/drivers/usb/core/devices.c b/drivers/usb/core/devices.c
--- a/drivers/usb/core/devices.c	Sun May 16 01:18:36 2004
+++ b/drivers/usb/core/devices.c	Sun May 16 01:18:36 2004
@@ -232,13 +232,21 @@
 	return start;
 }
 
-static char *usb_dump_interface_descriptor(char *start, char *end, const struct usb_interface *iface, int setno)
+static char *usb_dump_interface_descriptor(char *start, char *end,
+	const struct usb_interface_cache *intfc,
+	const struct usb_interface *iface,
+	int setno)
 {
-	struct usb_interface_descriptor *desc = &iface->altsetting[setno].desc;
+	const struct usb_interface_descriptor *desc = &intfc->altsetting[setno].desc;
+	char *driver_name = "";
 
 	if (start > end)
 		return start;
 	down_read(&usb_bus_type.subsys.rwsem);
+	if (iface)
+		driver_name = (iface->dev.driver
+				? iface->dev.driver->name
+				: "(none)");
 	start += sprintf(start, format_iface,
 			 desc->bInterfaceNumber,
 			 desc->bAlternateSetting,
@@ -247,9 +255,7 @@
 			 class_decode(desc->bInterfaceClass),
 			 desc->bInterfaceSubClass,
 			 desc->bInterfaceProtocol,
-			 iface->dev.driver
-				? iface->dev.driver->name
-				: "(none)");
+			 driver_name);
 	up_read(&usb_bus_type.subsys.rwsem);
 	return start;
 }
@@ -258,13 +264,14 @@
 	int speed,
 	char *start,
 	char *end,
+	const struct usb_interface_cache *intfc,
 	const struct usb_interface *iface,
 	int setno
 ) {
-	struct usb_host_interface *desc = &iface->altsetting[setno];
+	const struct usb_host_interface *desc = &intfc->altsetting[setno];
 	int i;
 
-	start = usb_dump_interface_descriptor(start, end, iface, setno);
+	start = usb_dump_interface_descriptor(start, end, intfc, iface, setno);
 	for (i = 0; i < desc->desc.bNumEndpoints; i++) {
 		if (start > end)
 			return start;
@@ -303,6 +310,7 @@
 )
 {
 	int i, j;
+	struct usb_interface_cache *intfc;
 	struct usb_interface *interface;
 
 	if (start > end)
@@ -311,14 +319,13 @@
 		return start + sprintf(start, "(null Cfg. desc.)\n");
 	start = usb_dump_config_descriptor(start, end, &config->desc, active);
 	for (i = 0; i < config->desc.bNumInterfaces; i++) {
+		intfc = config->intf_cache[i];
 		interface = config->interface[i];
-		if (!interface)
-			break;
-		for (j = 0; j < interface->num_altsetting; j++) {
+		for (j = 0; j < intfc->num_altsetting; j++) {
 			if (start > end)
 				return start;
 			start = usb_dump_interface(speed,
-					start, end, interface, j);
+				start, end, intfc, interface, j);
 		}
 	}
 	return start;
@@ -395,7 +402,7 @@
 		return start;
 	
 	start = usb_dump_device_strings (start, end, dev);
-	
+
 	for (i = 0; i < dev->descriptor.bNumConfigurations; i++) {
 		if (start > end)
 			return start;
@@ -445,6 +452,7 @@
  * nbytes - the maximum number of bytes to write
  * skip_bytes - the number of bytes to skip before writing anything
  * file_offset - the offset into the devices file on completion
+ * The caller must own the usbdev->serialize semaphore.
  */
 static ssize_t usb_device_dump(char __user **buffer, size_t *nbytes, loff_t *skip_bytes, loff_t *file_offset,
 				struct usb_device *usbdev, struct usb_bus *bus, int level, int index, int count)
@@ -545,9 +553,13 @@
 	
 	/* Now look at all of this device's children. */
 	for (chix = 0; chix < usbdev->maxchild; chix++) {
-		if (usbdev->children[chix]) {
-			ret = usb_device_dump(buffer, nbytes, skip_bytes, file_offset, usbdev->children[chix],
+		struct usb_device *childdev = usbdev->children[chix];
+
+		if (childdev) {
+			down(&childdev->serialize);
+			ret = usb_device_dump(buffer, nbytes, skip_bytes, file_offset, childdev,
 					bus, level + 1, chix, ++cnt);
+			up(&childdev->serialize);
 			if (ret == -EFAULT)
 				return total_written;
 			total_written += ret;
@@ -575,8 +587,11 @@
 	for (buslist = usb_bus_list.next; buslist != &usb_bus_list; buslist = buslist->next) {
 		/* print devices for this bus */
 		bus = list_entry(buslist, struct usb_bus, bus_list);
+
 		/* recurse through all children of the root hub */
+		down(&bus->root_hub->serialize);
 		ret = usb_device_dump(&buf, &nbytes, &skip_bytes, ppos, bus->root_hub, bus, 0, 0, 0);
+		up(&bus->root_hub->serialize);
 		if (ret < 0) {
 			up(&usb_bus_list_lock);
 			return ret;
diff -Nru a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
--- a/drivers/usb/core/devio.c	Sun May 16 01:18:35 2004
+++ b/drivers/usb/core/devio.c	Sun May 16 01:18:35 2004
@@ -45,6 +45,7 @@
 #include <linux/usbdevice_fs.h>
 #include <asm/uaccess.h>
 #include <asm/byteorder.h>
+#include <linux/moduleparam.h>
 
 #include "hcd.h"	/* for usbcore internals */
 #include "usb.h"
@@ -54,12 +55,28 @@
 	struct dev_state *ps;
 	struct task_struct *task;
 	unsigned int signr;
-	unsigned int intf;
+	unsigned int ifnum;
 	void __user *userbuffer;
 	void __user *userurb;
 	struct urb *urb;
 };
 
+static int usbfs_snoop = 0;
+module_param (usbfs_snoop, bool, S_IRUGO | S_IWUSR);
+MODULE_PARM_DESC (usbfs_snoop, "true to log all usbfs traffic");
+
+#define snoop(dev, format, arg...)				\
+	do {							\
+		if (usbfs_snoop)				\
+			dev_info( dev , format , ## arg);	\
+	} while (0)
+
+
+static inline int connected (struct usb_device *dev)
+{
+	return dev->state != USB_STATE_NOTATTACHED;
+}
+
 static loff_t usbdev_lseek(struct file *file, loff_t offset, int orig)
 {
 	loff_t ret;
@@ -87,14 +104,15 @@
 static ssize_t usbdev_read(struct file *file, char __user *buf, size_t nbytes, loff_t *ppos)
 {
 	struct dev_state *ps = (struct dev_state *)file->private_data;
+	struct usb_device *dev = ps->dev;
 	ssize_t ret = 0;
 	unsigned len;
 	loff_t pos;
 	int i;
 
 	pos = *ppos;
-	down_read(&ps->devsem);
-	if (!ps->dev) {
+	down(&dev->serialize);
+	if (!connected(dev)) {
 		ret = -ENODEV;
 		goto err;
 	} else if (pos < 0) {
@@ -106,7 +124,7 @@
 		len = sizeof(struct usb_device_descriptor) - pos;
 		if (len > nbytes)
 			len = nbytes;
-		if (copy_to_user(buf, ((char *)&ps->dev->descriptor) + pos, len)) {
+		if (copy_to_user(buf, ((char *)&dev->descriptor) + pos, len)) {
 			ret = -EFAULT;
 			goto err;
 		}
@@ -118,9 +136,9 @@
 	}
 
 	pos = sizeof(struct usb_device_descriptor);
-	for (i = 0; nbytes && i < ps->dev->descriptor.bNumConfigurations; i++) {
+	for (i = 0; nbytes && i < dev->descriptor.bNumConfigurations; i++) {
 		struct usb_config_descriptor *config =
-			(struct usb_config_descriptor *)ps->dev->rawdescriptors[i];
+			(struct usb_config_descriptor *)dev->rawdescriptors[i];
 		unsigned int length = le16_to_cpu(config->wTotalLength);
 
 		if (*ppos < pos + length) {
@@ -128,7 +146,7 @@
 			/* The descriptor may claim to be longer than it
 			 * really is.  Here is the actual allocated length. */
 			unsigned alloclen =
-				ps->dev->config[i].desc.wTotalLength;
+				dev->config[i].desc.wTotalLength;
 
 			len = length - (*ppos - pos);
 			if (len > nbytes)
@@ -138,7 +156,7 @@
 			if (alloclen > (*ppos - pos)) {
 				alloclen -= (*ppos - pos);
 				if (copy_to_user(buf,
-				    ps->dev->rawdescriptors[i] + (*ppos - pos),
+				    dev->rawdescriptors[i] + (*ppos - pos),
 				    min(len, alloclen))) {
 					ret = -EFAULT;
 					goto err;
@@ -155,35 +173,10 @@
 	}
 
 err:
-	up_read(&ps->devsem);
+	up(&dev->serialize);
 	return ret;
 }
 
-extern inline unsigned int ld2(unsigned int x)
-{
-        unsigned int r = 0;
-        
-        if (x >= 0x10000) {
-                x >>= 16;
-                r += 16;
-        }
-        if (x >= 0x100) {
-                x >>= 8;
-                r += 8;
-        }
-        if (x >= 0x10) {
-                x >>= 4;
-                r += 4;
-        }
-        if (x >= 4) {
-                x >>= 2;
-                r += 2;
-        }
-        if (x >= 2)
-                r++;
-        return r;
-}
-
 /*
  * async list handling
  */
@@ -213,7 +206,7 @@
         kfree(as);
 }
 
-extern __inline__ void async_newpending(struct async *as)
+static inline void async_newpending(struct async *as)
 {
         struct dev_state *ps = as->ps;
         unsigned long flags;
@@ -223,7 +216,7 @@
         spin_unlock_irqrestore(&ps->lock, flags);
 }
 
-extern __inline__ void async_removepending(struct async *as)
+static inline void async_removepending(struct async *as)
 {
         struct dev_state *ps = as->ps;
         unsigned long flags;
@@ -233,7 +226,7 @@
         spin_unlock_irqrestore(&ps->lock, flags);
 }
 
-extern __inline__ struct async *async_getcompleted(struct dev_state *ps)
+static inline struct async *async_getcompleted(struct dev_state *ps)
 {
         unsigned long flags;
         struct async *as = NULL;
@@ -247,7 +240,7 @@
         return as;
 }
 
-extern __inline__ struct async *async_getpending(struct dev_state *ps, void __user *userurb)
+static inline struct async *async_getpending(struct dev_state *ps, void __user *userurb)
 {
         unsigned long flags;
         struct async *as;
@@ -301,7 +294,7 @@
 		free_async(as);
 }
 
-static void destroy_async_on_interface (struct dev_state *ps, unsigned int intf)
+static void destroy_async_on_interface (struct dev_state *ps, unsigned int ifnum)
 {
 	struct list_head *p, *q, hitlist;
 	unsigned long flags;
@@ -309,13 +302,13 @@
 	INIT_LIST_HEAD(&hitlist);
 	spin_lock_irqsave(&ps->lock, flags);
 	list_for_each_safe(p, q, &ps->async_pending)
-		if (intf == list_entry(p, struct async, asynclist)->intf)
+		if (ifnum == list_entry(p, struct async, asynclist)->ifnum)
 			list_move_tail(p, &hitlist);
 	spin_unlock_irqrestore(&ps->lock, flags);
 	destroy_async(ps, &hitlist);
 }
 
-extern __inline__ void destroy_all_async(struct dev_state *ps)
+static inline void destroy_all_async(struct dev_state *ps)
 {
 	        destroy_async(ps, &ps->async_pending);
 }
@@ -335,6 +328,7 @@
 static void driver_disconnect(struct usb_interface *intf)
 {
 	struct dev_state *ps = usb_get_intfdata (intf);
+	unsigned int ifnum = intf->altsetting->desc.bInterfaceNumber;
 
 	if (!ps)
 		return;
@@ -343,13 +337,15 @@
 	 * all pending I/O requests; 2.6 does that.
 	 */
 
-	/* prevent new I/O requests */
-	ps->dev = 0;
-	clear_bit(intf->cur_altsetting->desc.bInterfaceNumber, &ps->ifclaimed);
+	if (likely(ifnum < 8*sizeof(ps->ifclaimed)))
+		clear_bit(ifnum, &ps->ifclaimed);
+	else
+		warn("interface number %u out of range", ifnum);
+
 	usb_set_intfdata (intf, NULL);
 
 	/* force async requests to complete */
-	destroy_all_async (ps);
+	destroy_async_on_interface(ps, ifnum);
 }
 
 struct usb_driver usbdevfs_driver = {
@@ -359,71 +355,70 @@
 	.disconnect =	driver_disconnect,
 };
 
-static int claimintf(struct dev_state *ps, unsigned int intf)
+static int claimintf(struct dev_state *ps, unsigned int ifnum)
 {
 	struct usb_device *dev = ps->dev;
-	struct usb_interface *iface;
+	struct usb_interface *intf;
 	int err;
 
-	if (intf >= 8*sizeof(ps->ifclaimed) || !dev
-			|| intf >= dev->actconfig->desc.bNumInterfaces)
+	if (ifnum >= 8*sizeof(ps->ifclaimed))
 		return -EINVAL;
 	/* already claimed */
-	if (test_bit(intf, &ps->ifclaimed))
+	if (test_bit(ifnum, &ps->ifclaimed))
 		return 0;
-	iface = dev->actconfig->interface[intf];
-	err = -EBUSY;
 
 	/* lock against other changes to driver bindings */
 	down_write(&usb_bus_type.subsys.rwsem);
-	if (!usb_interface_claimed(iface)) {
-		usb_driver_claim_interface(&usbdevfs_driver, iface, ps);
-		set_bit(intf, &ps->ifclaimed);
-		err = 0;
-	}
+	intf = usb_ifnum_to_if(dev, ifnum);
+	if (!intf)
+		err = -ENOENT;
+	else
+		err = usb_driver_claim_interface(&usbdevfs_driver, intf, ps);
 	up_write(&usb_bus_type.subsys.rwsem);
+	if (err == 0)
+		set_bit(ifnum, &ps->ifclaimed);
 	return err;
 }
 
-static int releaseintf(struct dev_state *ps, unsigned int intf)
+static int releaseintf(struct dev_state *ps, unsigned int ifnum)
 {
 	struct usb_device *dev;
-	struct usb_interface *iface;
+	struct usb_interface *intf;
 	int err;
 
-	if (intf >= 8*sizeof(ps->ifclaimed))
-		return -EINVAL;
 	err = -EINVAL;
+	if (ifnum >= 8*sizeof(ps->ifclaimed))
+		return err;
 	dev = ps->dev;
-	down(&dev->serialize);
 	/* lock against other changes to driver bindings */
 	down_write(&usb_bus_type.subsys.rwsem);
-	if (test_and_clear_bit(intf, &ps->ifclaimed)) {
-		iface = dev->actconfig->interface[intf];
-		usb_driver_release_interface(&usbdevfs_driver, iface);
+	intf = usb_ifnum_to_if(dev, ifnum);
+	if (!intf)
+		err = -ENOENT;
+	else if (test_and_clear_bit(ifnum, &ps->ifclaimed)) {
+		usb_driver_release_interface(&usbdevfs_driver, intf);
 		err = 0;
 	}
 	up_write(&usb_bus_type.subsys.rwsem);
-	up(&dev->serialize);
 	return err;
 }
 
-static int checkintf(struct dev_state *ps, unsigned int intf)
+static int checkintf(struct dev_state *ps, unsigned int ifnum)
 {
-	if (intf >= 8*sizeof(ps->ifclaimed))
+	if (ifnum >= 8*sizeof(ps->ifclaimed))
 		return -EINVAL;
-	if (test_bit(intf, &ps->ifclaimed))
+	if (test_bit(ifnum, &ps->ifclaimed))
 		return 0;
 	/* if not yet claimed, claim it for the driver */
-	printk(KERN_WARNING "usbfs: process %d (%s) did not claim interface %u before use\n",
-	       current->pid, current->comm, intf);
-	return claimintf(ps, intf);
+	dev_warn(&ps->dev->dev, "usbfs: process %d (%s) did not claim interface %u before use\n",
+	       current->pid, current->comm, ifnum);
+	return claimintf(ps, ifnum);
 }
 
 static int findintfep(struct usb_device *dev, unsigned int ep)
 {
 	unsigned int i, j, e;
-        struct usb_interface *iface;
+        struct usb_interface *intf;
 	struct usb_host_interface *alts;
 	struct usb_endpoint_descriptor *endpt;
 
@@ -432,58 +427,38 @@
 	if (!dev->actconfig)
 		return -ESRCH;
 	for (i = 0; i < dev->actconfig->desc.bNumInterfaces; i++) {
-		iface = dev->actconfig->interface[i];
-		for (j = 0; j < iface->num_altsetting; j++) {
-                        alts = &iface->altsetting[j];
+		intf = dev->actconfig->interface[i];
+		for (j = 0; j < intf->num_altsetting; j++) {
+                        alts = &intf->altsetting[j];
 			for (e = 0; e < alts->desc.bNumEndpoints; e++) {
 				endpt = &alts->endpoint[e].desc;
 				if (endpt->bEndpointAddress == ep)
-					return i;
+					return alts->desc.bInterfaceNumber;
 			}
 		}
 	}
 	return -ENOENT; 
 }
 
-static int findintfif(struct usb_device *dev, unsigned int ifn)
-{
-	unsigned int i;
-
-	if (ifn & ~0xff)
-		return -EINVAL;
-	if (!dev->actconfig)
-		return -ESRCH;
-	for (i = 0; i < dev->actconfig->desc.bNumInterfaces; i++) {
-		if (dev->actconfig->interface[i]->
-				altsetting[0].desc.bInterfaceNumber == ifn)
-			return i;
-	}
-	return -ENOENT; 
-}
-
 static int check_ctrlrecip(struct dev_state *ps, unsigned int requesttype, unsigned int index)
 {
-	int ret;
+	int ret = 0;
 
 	if (USB_TYPE_VENDOR == (USB_TYPE_MASK & requesttype))
 		return 0;
 
+	index &= 0xff;
 	switch (requesttype & USB_RECIP_MASK) {
 	case USB_RECIP_ENDPOINT:
-		if ((ret = findintfep(ps->dev, index & 0xff)) < 0)
-			return ret;
-		if ((ret = checkintf(ps, ret)))
-			return ret;
+		if ((ret = findintfep(ps->dev, index)) >= 0)
+			ret = checkintf(ps, ret);
 		break;
 
 	case USB_RECIP_INTERFACE:
-		if ((ret = findintfif(ps->dev, index & 0xff)) < 0)
-			return ret;
-		if ((ret = checkintf(ps, ret)))
-			return ret;
+		ret = checkintf(ps, index);
 		break;
 	}
-	return 0;
+	return ret;
 }
 
 /*
@@ -496,8 +471,7 @@
 	int ret;
 
 	/* 
-	 * no locking necessary here, as both sys_open (actually filp_open)
-	 * and the hub thread have the kernel lock
+	 * no locking necessary here, as chrdev_open has the kernel lock
 	 * (still acquire the kernel lock for safety)
 	 */
 	ret = -ENOMEM;
@@ -506,7 +480,7 @@
 
 	lock_kernel();
 	ret = -ENOENT;
-	dev = inode->u.generic_ip;
+	dev = usb_get_dev(inode->u.generic_ip);
 	if (!dev) {
 		kfree(ps);
 		goto out;
@@ -518,7 +492,6 @@
 	INIT_LIST_HEAD(&ps->async_pending);
 	INIT_LIST_HEAD(&ps->async_completed);
 	init_waitqueue_head(&ps->wait);
-	init_rwsem(&ps->devsem);
 	ps->discsignr = 0;
 	ps->disctask = current;
 	ps->disccontext = NULL;
@@ -535,18 +508,21 @@
 static int usbdev_release(struct inode *inode, struct file *file)
 {
 	struct dev_state *ps = (struct dev_state *)file->private_data;
-	unsigned int i;
+	struct usb_device *dev = ps->dev;
+	unsigned int ifnum;
 
-	lock_kernel();
+	down(&dev->serialize);
 	list_del_init(&ps->list);
 
-	if (ps->dev) {
-		for (i = 0; ps->ifclaimed && i < 8*sizeof(ps->ifclaimed); i++)
-			if (test_bit(i, &ps->ifclaimed))
-				releaseintf(ps, i);
+	if (connected(dev)) {
+		for (ifnum = 0; ps->ifclaimed && ifnum < 8*sizeof(ps->ifclaimed); ifnum++)
+			if (test_bit(ifnum, &ps->ifclaimed))
+				releaseintf(ps, ifnum);
+		destroy_all_async(ps);
 	}
-	unlock_kernel();
-	destroy_all_async(ps);
+	up(&dev->serialize);
+	usb_put_dev(dev);
+	ps->dev = NULL;
 	kfree(ps);
         return 0;
 }
@@ -557,7 +533,7 @@
 	struct usbdevfs_ctrltransfer ctrl;
 	unsigned int tmo;
 	unsigned char *tbuf;
-	int i, ret;
+	int i, j, ret;
 
 	if (copy_from_user(&ctrl, arg, sizeof(ctrl)))
 		return -EFAULT;
@@ -573,9 +549,18 @@
 			free_page((unsigned long)tbuf);
 			return -EINVAL;
 		}
+		snoop(&dev->dev, "control read: bRequest=%02x bRrequestType=%02x wValue=%04x wIndex=%04x\n", 
+			ctrl.bRequest, ctrl.bRequestType, ctrl.wValue, ctrl.wIndex);
+
 		i = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), ctrl.bRequest, ctrl.bRequestType,
 				       ctrl.wValue, ctrl.wIndex, tbuf, ctrl.wLength, tmo);
 		if ((i > 0) && ctrl.wLength) {
+			if (usbfs_snoop) {
+				dev_info(&dev->dev, "control read: data ");
+				for (j = 0; j < ctrl.wLength; ++j)
+					printk ("%02x ", (unsigned char)((char *)ctrl.data)[j]);
+				printk("\n");
+			}
 			if (copy_to_user(ctrl.data, tbuf, ctrl.wLength)) {
 				free_page((unsigned long)tbuf);
 				return -EFAULT;
@@ -588,15 +573,23 @@
 				return -EFAULT;
 			}
 		}
+		snoop(&dev->dev, "control write: bRequest=%02x bRrequestType=%02x wValue=%04x wIndex=%04x\n", 
+			ctrl.bRequest, ctrl.bRequestType, ctrl.wValue, ctrl.wIndex);
+		if (usbfs_snoop) {
+			dev_info(&dev->dev, "control write: data: ");
+			for (j = 0; j < ctrl.wLength; ++j)
+				printk ("%02x ", (unsigned char)((char *)ctrl.data)[j]);
+			printk("\n");
+		}
 		i = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), ctrl.bRequest, ctrl.bRequestType,
 				       ctrl.wValue, ctrl.wIndex, tbuf, ctrl.wLength, tmo);
 	}
 	free_page((unsigned long)tbuf);
 	if (i<0) {
-		printk(KERN_DEBUG "usbfs: USBDEVFS_CONTROL failed "
-			"cmd %s dev %d rqt %u rq %u len %u ret %d\n", 
-			current->comm,
-		       dev->devnum, ctrl.bRequestType, ctrl.bRequest, ctrl.wLength, i);
+		dev_printk(KERN_DEBUG, &dev->dev, "usbfs: USBDEVFS_CONTROL "
+			   "failed cmd %s rqt %u rq %u len %u ret %d\n",
+			   current->comm, ctrl.bRequestType, ctrl.bRequest,
+			   ctrl.wLength, i);
 	}
 	return i;
 }
@@ -649,8 +642,8 @@
 	}
 	kfree(tbuf);
 	if (i < 0) {
-		printk(KERN_WARNING "usbfs: USBDEVFS_BULK failed dev %d ep 0x%x len %u ret %d\n", 
-		       dev->devnum, bulk.ep, bulk.len, i);
+		dev_warn(&dev->dev, "usbfs: USBDEVFS_BULK failed "
+			 "ep 0x%x len %u ret %d\n", bulk.ep, bulk.len, i);
 		return i;
 	}
 	return len2;
@@ -695,20 +688,22 @@
 static int proc_getdriver(struct dev_state *ps, void __user *arg)
 {
 	struct usbdevfs_getdriver gd;
-	struct usb_interface *interface;
+	struct usb_interface *intf;
 	int ret;
 
 	if (copy_from_user(&gd, arg, sizeof(gd)))
 		return -EFAULT;
-	if ((ret = findintfif(ps->dev, gd.interface)) < 0)
-		return ret;
-	interface = ps->dev->actconfig->interface[ret];
-	if (!interface->dev.driver)
-		return -ENODATA;
-	strncpy(gd.driver, interface->dev.driver->name, sizeof(gd.driver));
-	if (copy_to_user(arg, &gd, sizeof(gd)))
-		return -EFAULT;
-	return 0;
+	down_read(&usb_bus_type.subsys.rwsem);
+	intf = usb_ifnum_to_if(ps->dev, gd.interface);
+	if (!intf || !intf->dev.driver)
+		ret = -ENODATA;
+	else {
+		strncpy(gd.driver, intf->dev.driver->name,
+				sizeof(gd.driver));
+		ret = (copy_to_user(arg, &gd, sizeof(gd)) ? -EFAULT : 0);
+	}
+	up_read(&usb_bus_type.subsys.rwsem);
+	return ret;
 }
 
 static int proc_connectinfo(struct dev_state *ps, void __user *arg)
@@ -724,9 +719,6 @@
 
 static int proc_resetdevice(struct dev_state *ps)
 {
-	/* FIXME when usb_reset_device() is fixed we'll need to grab
-	 * ps->dev->serialize before calling it.
-	 */
 	return usb_reset_device(ps->dev);
 
 }
@@ -734,21 +726,14 @@
 static int proc_setintf(struct dev_state *ps, void __user *arg)
 {
 	struct usbdevfs_setinterface setintf;
-	struct usb_interface *interface;
 	int ret;
 
 	if (copy_from_user(&setintf, arg, sizeof(setintf)))
 		return -EFAULT;
-	if ((ret = findintfif(ps->dev, setintf.interface)) < 0)
+	if ((ret = checkintf(ps, setintf.interface)))
 		return ret;
-	interface = ps->dev->actconfig->interface[ret];
-	if (interface->dev.driver) {
-		if ((ret = checkintf(ps, ret)))
-			return ret;
-	}
-	if (usb_set_interface(ps->dev, setintf.interface, setintf.altsetting))
-		return -EINVAL;
-	return 0;
+	return usb_set_interface(ps->dev, setintf.interface,
+			setintf.altsetting);
 }
 
 static int proc_setconfig(struct dev_state *ps, void __user *arg)
@@ -760,7 +745,6 @@
 	if (get_user(u, (unsigned int __user *)arg))
 		return -EFAULT;
 
-	down(&ps->dev->serialize);
  	actconfig = ps->dev->actconfig;
  
  	/* Don't touch the device if any interfaces are claimed.
@@ -796,7 +780,6 @@
 		else
 			status = usb_set_configuration(ps->dev, u);
 	}
-	up(&ps->dev->serialize);
 
 	return status;
 }
@@ -809,7 +792,7 @@
 	struct async *as;
 	struct usb_ctrlrequest *dr = NULL;
 	unsigned int u, totlen, isofrmlen;
-	int ret, interval = 0, intf = -1;
+	int ret, interval = 0, ifnum = -1;
 
 	if (copy_from_user(&uurb, arg, sizeof(uurb)))
 		return -EFAULT;
@@ -821,9 +804,9 @@
 	if (uurb.signr != 0 && (uurb.signr < SIGRTMIN || uurb.signr > SIGRTMAX))
 		return -EINVAL;
 	if (!(uurb.type == USBDEVFS_URB_TYPE_CONTROL && (uurb.endpoint & ~USB_ENDPOINT_DIR_MASK) == 0)) {
-		if ((intf = findintfep(ps->dev, uurb.endpoint)) < 0)
-			return intf;
-		if ((ret = checkintf(ps, intf)))
+		if ((ifnum = findintfep(ps->dev, uurb.endpoint)) < 0)
+			return ifnum;
+		if ((ret = checkintf(ps, ifnum)))
 			return ret;
 	}
 	switch(uurb.type) {
@@ -873,6 +856,9 @@
 		/* arbitrary limit */
 		if (uurb.number_of_packets < 1 || uurb.number_of_packets > 128)
 			return -EINVAL;
+		if (!(ep_desc = usb_epnum_to_ep_desc(ps->dev, uurb.endpoint)))
+			return -ENOENT;
+		interval = 1 << min (15, ep_desc->bInterval - 1);
 		isofrmlen = sizeof(struct usbdevfs_iso_packet_desc) * uurb.number_of_packets;
 		if (!(isopkt = kmalloc(isofrmlen, GFP_KERNEL)))
 			return -ENOMEM;
@@ -898,7 +884,10 @@
 		uurb.number_of_packets = 0;
 		if (!(ep_desc = usb_epnum_to_ep_desc(ps->dev, uurb.endpoint)))
 			return -ENOENT;
-		interval = ep_desc->bInterval;
+		if (ps->dev->speed == USB_SPEED_HIGH)
+			interval = 1 << min (15, ep_desc->bInterval - 1);
+		else
+			interval = ep_desc->bInterval;
 		if (uurb.buffer_length > 16384)
 			return -EINVAL;
 		if (!access_ok((uurb.endpoint & USB_DIR_IN) ? VERIFY_WRITE : VERIFY_READ, uurb.buffer, uurb.buffer_length))
@@ -947,7 +936,7 @@
 	else
 		as->userbuffer = NULL;
 	as->signr = uurb.signr;
-	as->intf = intf;
+	as->ifnum = ifnum;
 	as->task = current;
 	if (!(uurb.endpoint & USB_DIR_IN)) {
 		if (copy_from_user(as->urb->transfer_buffer, uurb.buffer, as->urb->transfer_buffer_length)) {
@@ -957,7 +946,7 @@
 	}
         async_newpending(as);
         if ((ret = usb_submit_urb(as->urb, GFP_KERNEL))) {
-		printk(KERN_DEBUG "usbfs: usb_submit_urb returned %d\n", ret);
+		dev_printk(KERN_DEBUG, &ps->dev->dev, "usbfs: usb_submit_urb returned %d\n", ret);
                 async_removepending(as);
                 free_async(as);
                 return ret;
@@ -1012,18 +1001,19 @@
         DECLARE_WAITQUEUE(wait, current);
 	struct async *as = NULL;
 	void __user *addr;
+	struct usb_device *dev = ps->dev;
 	int ret;
 
 	add_wait_queue(&ps->wait, &wait);
-	while (ps->dev) {
+	while (connected(dev)) {
 		__set_current_state(TASK_INTERRUPTIBLE);
 		if ((as = async_getcompleted(ps)))
 			break;
 		if (signal_pending(current))
 			break;
-		up_read(&ps->devsem);
+		up(&dev->serialize);
 		schedule();
-		down_read(&ps->devsem);
+		down(&dev->serialize);
 	}
 	remove_wait_queue(&ps->wait, &wait);
 	set_current_state(TASK_RUNNING);
@@ -1075,28 +1065,23 @@
 
 static int proc_claiminterface(struct dev_state *ps, void __user *arg)
 {
-	unsigned int intf;
-	int ret;
+	unsigned int ifnum;
 
-	if (get_user(intf, (unsigned int __user *)arg))
+	if (get_user(ifnum, (unsigned int __user *)arg))
 		return -EFAULT;
-	if ((ret = findintfif(ps->dev, intf)) < 0)
-		return ret;
-	return claimintf(ps, ret);
+	return claimintf(ps, ifnum);
 }
 
 static int proc_releaseinterface(struct dev_state *ps, void __user *arg)
 {
-	unsigned int intf;
+	unsigned int ifnum;
 	int ret;
 
-	if (get_user(intf, (unsigned int __user *)arg))
+	if (get_user(ifnum, (unsigned int __user *)arg))
 		return -EFAULT;
-	if ((ret = findintfif(ps->dev, intf)) < 0)
-		return ret;
-	if ((ret = releaseintf(ps, intf)) < 0)
+	if ((ret = releaseintf(ps, ifnum)) < 0)
 		return ret;
-	destroy_async_on_interface (ps, intf);
+	destroy_async_on_interface (ps, ifnum);
 	return 0;
 }
 
@@ -1106,7 +1091,7 @@
 	int			size;
 	void			*buf = 0;
 	int			retval = 0;
-	struct usb_interface    *ifp = 0;
+	struct usb_interface    *intf = 0;
 	struct usb_driver       *driver = 0;
 
 	/* get input parameters and alloc buffer */
@@ -1125,26 +1110,25 @@
 		}
 	}
 
-	if (!ps->dev) {
+	if (!connected(ps->dev)) {
 		if (buf)
 			kfree(buf);
 		return -ENODEV;
 	}
 
-	down(&ps->dev->serialize);
 	if (ps->dev->state != USB_STATE_CONFIGURED)
 		retval = -ENODEV;
-	else if (!(ifp = usb_ifnum_to_if (ps->dev, ctrl.ifno)))
+	else if (!(intf = usb_ifnum_to_if (ps->dev, ctrl.ifno)))
                retval = -EINVAL;
 	else switch (ctrl.ioctl_code) {
 
 	/* disconnect kernel driver from interface */
 	case USBDEVFS_DISCONNECT:
 		down_write(&usb_bus_type.subsys.rwsem);
-		if (ifp->dev.driver) {
-			driver = to_usb_driver(ifp->dev.driver);
-			dev_dbg (&ifp->dev, "disconnect by usbfs\n");
-			usb_driver_release_interface(driver, ifp);
+		if (intf->dev.driver) {
+			driver = to_usb_driver(intf->dev.driver);
+			dev_dbg (&intf->dev, "disconnect by usbfs\n");
+			usb_driver_release_interface(driver, intf);
 		} else
 			retval = -ENODATA;
 		up_write(&usb_bus_type.subsys.rwsem);
@@ -1152,24 +1136,23 @@
 
 	/* let kernel drivers try to (re)bind to the interface */
 	case USBDEVFS_CONNECT:
-		bus_rescan_devices(ifp->dev.bus);
+		bus_rescan_devices(intf->dev.bus);
 		break;
 
 	/* talk directly to the interface's driver */
 	default:
 		down_read(&usb_bus_type.subsys.rwsem);
-		if (ifp->dev.driver)
-			driver = to_usb_driver(ifp->dev.driver);
+		if (intf->dev.driver)
+			driver = to_usb_driver(intf->dev.driver);
 		if (driver == 0 || driver->ioctl == 0) {
 			retval = -ENOTTY;
 		} else {
-			retval = driver->ioctl (ifp, ctrl.ioctl_code, buf);
+			retval = driver->ioctl (intf, ctrl.ioctl_code, buf);
 			if (retval == -ENOIOCTLCMD)
 				retval = -ENOTTY;
 		}
 		up_read(&usb_bus_type.subsys.rwsem);
 	}
-	up(&ps->dev->serialize);
 
 	/* cleanup and return */
 	if (retval >= 0
@@ -1190,95 +1173,114 @@
 static int usbdev_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
 {
 	struct dev_state *ps = (struct dev_state *)file->private_data;
+	struct usb_device *dev = ps->dev;
 	int ret = -ENOTTY;
 
 	if (!(file->f_mode & FMODE_WRITE))
 		return -EPERM;
-	down_read(&ps->devsem);
-	if (!ps->dev) {
-		up_read(&ps->devsem);
+	down(&dev->serialize);
+	if (!connected(dev)) {
+		up(&dev->serialize);
 		return -ENODEV;
 	}
+
 	switch (cmd) {
 	case USBDEVFS_CONTROL:
+		snoop(&dev->dev, "%s: CONTROL\n", __FUNCTION__);
 		ret = proc_control(ps, (void __user *)arg);
 		if (ret >= 0)
 			inode->i_mtime = CURRENT_TIME;
 		break;
 
 	case USBDEVFS_BULK:
+		snoop(&dev->dev, "%s: BULK\n", __FUNCTION__);
 		ret = proc_bulk(ps, (void __user *)arg);
 		if (ret >= 0)
 			inode->i_mtime = CURRENT_TIME;
 		break;
 
 	case USBDEVFS_RESETEP:
+		snoop(&dev->dev, "%s: RESETEP\n", __FUNCTION__);
 		ret = proc_resetep(ps, (void __user *)arg);
 		if (ret >= 0)
 			inode->i_mtime = CURRENT_TIME;
 		break;
 
 	case USBDEVFS_RESET:
+		snoop(&dev->dev, "%s: RESET\n", __FUNCTION__);
 		ret = proc_resetdevice(ps);
 		break;
 
 	case USBDEVFS_CLEAR_HALT:
+		snoop(&dev->dev, "%s: CLEAR_HALT\n", __FUNCTION__);
 		ret = proc_clearhalt(ps, (void __user *)arg);
 		if (ret >= 0)
 			inode->i_mtime = CURRENT_TIME;
 		break;
 
 	case USBDEVFS_GETDRIVER:
+		snoop(&dev->dev, "%s: GETDRIVER\n", __FUNCTION__);
 		ret = proc_getdriver(ps, (void __user *)arg);
 		break;
 
 	case USBDEVFS_CONNECTINFO:
+		snoop(&dev->dev, "%s: CONNECTINFO\n", __FUNCTION__);
 		ret = proc_connectinfo(ps, (void __user *)arg);
 		break;
 
 	case USBDEVFS_SETINTERFACE:
+		snoop(&dev->dev, "%s: SETINTERFACE\n", __FUNCTION__);
 		ret = proc_setintf(ps, (void __user *)arg);
 		break;
 
 	case USBDEVFS_SETCONFIGURATION:
+		snoop(&dev->dev, "%s: SETCONFIGURATION\n", __FUNCTION__);
 		ret = proc_setconfig(ps, (void __user *)arg);
 		break;
 
 	case USBDEVFS_SUBMITURB:
+		snoop(&dev->dev, "%s: SUBMITURB\n", __FUNCTION__);
 		ret = proc_submiturb(ps, (void __user *)arg);
 		if (ret >= 0)
 			inode->i_mtime = CURRENT_TIME;
 		break;
 
 	case USBDEVFS_DISCARDURB:
+		snoop(&dev->dev, "%s: DISCARDURB\n", __FUNCTION__);
 		ret = proc_unlinkurb(ps, (void __user *)arg);
 		break;
 
 	case USBDEVFS_REAPURB:
+		snoop(&dev->dev, "%s: REAPURB\n", __FUNCTION__);
 		ret = proc_reapurb(ps, (void __user *)arg);
 		break;
 
 	case USBDEVFS_REAPURBNDELAY:
+		snoop(&dev->dev, "%s: REAPURBDELAY\n", __FUNCTION__);
 		ret = proc_reapurbnonblock(ps, (void __user *)arg);
 		break;
 
 	case USBDEVFS_DISCSIGNAL:
+		snoop(&dev->dev, "%s: DISCSIGNAL\n", __FUNCTION__);
 		ret = proc_disconnectsignal(ps, (void __user *)arg);
 		break;
 
 	case USBDEVFS_CLAIMINTERFACE:
+		snoop(&dev->dev, "%s: CLAIMINTERFACE\n", __FUNCTION__);
 		ret = proc_claiminterface(ps, (void __user *)arg);
 		break;
 
 	case USBDEVFS_RELEASEINTERFACE:
+		snoop(&dev->dev, "%s: RELEASEINTERFACE\n", __FUNCTION__);
 		ret = proc_releaseinterface(ps, (void __user *)arg);
 		break;
 
 	case USBDEVFS_IOCTL:
+		snoop(&dev->dev, "%s: IOCTL\n", __FUNCTION__);
 		ret = proc_ioctl(ps, (void __user *) arg);
 		break;
 	}
-	up_read(&ps->devsem);
+	up(&dev->serialize);
 	if (ret >= 0)
 		inode->i_atime = CURRENT_TIME;
 	return ret;
@@ -1293,7 +1295,7 @@
 	poll_wait(file, &ps->wait, wait);
 	if (file->f_mode & FMODE_WRITE && !list_empty(&ps->async_completed))
 		mask |= POLLOUT | POLLWRNORM;
-	if (!ps->dev)
+	if (!connected(ps->dev))
 		mask |= POLLERR | POLLHUP;
 	return mask;
 }
diff -Nru a/drivers/usb/core/hcd-pci.c b/drivers/usb/core/hcd-pci.c
--- a/drivers/usb/core/hcd-pci.c	Sun May 16 01:18:35 2004
+++ b/drivers/usb/core/hcd-pci.c	Sun May 16 01:18:35 2004
@@ -279,41 +279,54 @@
 {
 	struct usb_hcd		*hcd;
 	int			retval = 0;
+	int			has_pci_pm;
 
 	hcd = pci_get_drvdata(dev);
-	dev_dbg (hcd->self.controller, "suspend D%d --> D%d\n",
-			dev->current_state, state);
 
-	if (pci_find_capability(dev, PCI_CAP_ID_PM)) {
-		dev_dbg(hcd->self.controller, "No PM capability\n");
-		return 0;
-	}
+	/* even when the PCI layer rejects some of the PCI calls
+	 * below, HCs can try global suspend and reduce DMA traffic.
+	 * PM-sensitive HCDs may already have done this.
+	 */
+	has_pci_pm = pci_find_capability(dev, PCI_CAP_ID_PM);
+	if (has_pci_pm)
+		dev_dbg(hcd->self.controller, "suspend D%d --> D%d\n",
+			dev->current_state, state);
 
 	switch (hcd->state) {
 	case USB_STATE_HALT:
 		dev_dbg (hcd->self.controller, "halted; hcd not suspended\n");
 		break;
-	case USB_STATE_SUSPENDED:
+	case HCD_STATE_SUSPENDED:
 		dev_dbg (hcd->self.controller, "hcd already suspended\n");
 		break;
 	default:
-		/* remote wakeup needs hub->suspend() cooperation */
-		// pci_enable_wake (dev, 3, 1);
-
-		pci_save_state (dev, hcd->pci_state);
-
-		/* driver may want to disable DMA etc */
-		hcd->state = USB_STATE_QUIESCING;
 		retval = hcd->driver->suspend (hcd, state);
 		if (retval)
 			dev_dbg (hcd->self.controller, 
 					"suspend fail, retval %d\n",
 					retval);
-		else
-			hcd->state = USB_STATE_SUSPENDED;
+		else {
+			hcd->state = HCD_STATE_SUSPENDED;
+			pci_save_state (dev, hcd->pci_state);
+#ifdef	CONFIG_USB_SUSPEND
+			pci_enable_wake (dev, state, hcd->remote_wakeup);
+			pci_enable_wake (dev, 4, hcd->remote_wakeup);
+#endif
+			/* no DMA or IRQs except in D0 */
+			pci_disable_device (dev);
+			free_irq (hcd->irq, hcd);
+			
+			if (has_pci_pm)
+				retval = pci_set_power_state (dev, state);
+			dev->dev.power.power_state = state;
+			if (retval < 0) {
+				dev_dbg (&dev->dev,
+						"PCI suspend fail, %d\n",
+						retval);
+				(void) usb_hcd_pci_resume (dev);
+			}
+		}
 	}
-
- 	pci_set_power_state (dev, state);
 	return retval;
 }
 EXPORT_SYMBOL (usb_hcd_pci_suspend);
@@ -328,23 +341,37 @@
 {
 	struct usb_hcd		*hcd;
 	int			retval;
+	int			has_pci_pm;
 
 	hcd = pci_get_drvdata(dev);
-	dev_dbg (hcd->self.controller, "resume from state D%d\n",
-			dev->current_state);
+	has_pci_pm = pci_find_capability(dev, PCI_CAP_ID_PM);
+	if (has_pci_pm)
+		dev_dbg(hcd->self.controller, "resume from state D%d\n",
+				dev->current_state);
 
-	if (hcd->state != USB_STATE_SUSPENDED) {
+	if (hcd->state != HCD_STATE_SUSPENDED) {
 		dev_dbg (hcd->self.controller, 
 				"can't resume, not suspended!\n");
 		return -EL3HLT;
 	}
 	hcd->state = USB_STATE_RESUMING;
 
-	pci_set_power_state (dev, 0);
+	if (has_pci_pm)
+		pci_set_power_state (dev, 0);
+	dev->dev.power.power_state = 0;
+	retval = request_irq (dev->irq, usb_hcd_irq, SA_SHIRQ,
+				hcd->description, hcd);
+	if (retval < 0) {
+		dev_err (hcd->self.controller,
+			"can't restore IRQ after resume!\n");
+		return retval;
+	}
+	pci_set_master (dev);
 	pci_restore_state (dev, hcd->pci_state);
-
-	/* remote wakeup needs hub->suspend() cooperation */
-	// pci_enable_wake (dev, 3, 0);
+#ifdef	CONFIG_USB_SUSPEND
+	pci_enable_wake (dev, dev->current_state, 0);
+	pci_enable_wake (dev, 4, 0);
+#endif
 
 	retval = hcd->driver->resume (hcd);
 	if (!HCD_IS_RUNNING (hcd->state)) {
diff -Nru a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
--- a/drivers/usb/core/hcd.c	Sun May 16 01:18:35 2004
+++ b/drivers/usb/core/hcd.c	Sun May 16 01:18:35 2004
@@ -171,10 +171,10 @@
 	0x01,       /*  __u8  bNumInterfaces; (1) */
 	0x01,       /*  __u8  bConfigurationValue; */
 	0x00,       /*  __u8  iConfiguration; */
-	0x40,       /*  __u8  bmAttributes; 
-				 Bit 7: Bus-powered,
+	0xc0,       /*  __u8  bmAttributes; 
+				 Bit 7: must be set,
 				     6: Self-powered,
-				     5 Remote-wakwup,
+				     5: Remote wakeup,
 				     4..0: resvd */
 	0x00,       /*  __u8  MaxPower; */
       
@@ -218,10 +218,10 @@
 	0x01,       /*  __u8  bNumInterfaces; (1) */
 	0x01,       /*  __u8  bConfigurationValue; */
 	0x00,       /*  __u8  iConfiguration; */
-	0x40,       /*  __u8  bmAttributes; 
-				 Bit 7: Bus-powered,
+	0xc0,       /*  __u8  bmAttributes; 
+				 Bit 7: must be set,
 				     6: Self-powered,
-				     5 Remote-wakwup,
+				     5: Remote wakeup,
 				     4..0: resvd */
 	0x00,       /*  __u8  MaxPower; */
       
@@ -324,13 +324,15 @@
 /* Root hub control transfers execute synchronously */
 static int rh_call_control (struct usb_hcd *hcd, struct urb *urb)
 {
-	struct usb_ctrlrequest *cmd = (struct usb_ctrlrequest *) urb->setup_packet;
+	struct usb_ctrlrequest *cmd;
  	u16		typeReq, wValue, wIndex, wLength;
 	const u8	*bufp = 0;
 	u8		*ubuf = urb->transfer_buffer;
 	int		len = 0;
+	int		patch_wakeup = 0;
 	unsigned long	flags;
 
+	cmd = (struct usb_ctrlrequest *) urb->setup_packet;
 	typeReq  = (cmd->bRequestType << 8) | cmd->bRequest;
 	wValue   = le16_to_cpu (cmd->wValue);
 	wIndex   = le16_to_cpu (cmd->wIndex);
@@ -347,13 +349,21 @@
 	/* DEVICE REQUESTS */
 
 	case DeviceRequest | USB_REQ_GET_STATUS:
-		// DEVICE_REMOTE_WAKEUP
-		ubuf [0] = 1; // selfpowered
+		ubuf [0] = (hcd->remote_wakeup << USB_DEVICE_REMOTE_WAKEUP)
+				| (1 << USB_DEVICE_SELF_POWERED);
 		ubuf [1] = 0;
-			/* FALLTHROUGH */
+		break;
 	case DeviceOutRequest | USB_REQ_CLEAR_FEATURE:
+		if (wValue == USB_DEVICE_REMOTE_WAKEUP)
+			hcd->remote_wakeup = 0;
+		else
+			goto error;
+		break;
 	case DeviceOutRequest | USB_REQ_SET_FEATURE:
-		dev_dbg (hcd->self.controller, "no device features yet yet\n");
+		if (hcd->can_wakeup && wValue == USB_DEVICE_REMOTE_WAKEUP)
+			hcd->remote_wakeup = 1;
+		else
+			goto error;
 		break;
 	case DeviceRequest | USB_REQ_GET_CONFIGURATION:
 		ubuf [0] = 1;
@@ -379,6 +389,8 @@
 				bufp = fs_rh_config_descriptor;
 				len = sizeof fs_rh_config_descriptor;
 			}
+			if (hcd->can_wakeup)
+				patch_wakeup = 1;
 			break;
 		case USB_DT_STRING << 8:
 			urb->actual_length = rh_string (
@@ -444,6 +456,11 @@
 		urb->actual_length = len;
 		// always USB_DIR_IN, toward host
 		memcpy (ubuf, bufp, len);
+
+		/* report whether RH hardware supports remote wakeup */
+		if (patch_wakeup)
+			((struct usb_config_descriptor *)ubuf)->bmAttributes
+				|= USB_CONFIG_ATT_WAKEUP;
 	}
 
 	/* any errors get returned through the urb completion */
@@ -762,10 +779,22 @@
 	set_bit (devnum, usb_dev->bus->devmap.devicemap);
 	usb_dev->state = USB_STATE_ADDRESS;
 
+	usb_dev->epmaxpacketin[0] = usb_dev->epmaxpacketout[0] = 64;
+	retval = usb_get_device_descriptor(usb_dev, USB_DT_DEVICE_SIZE);
+	if (retval != sizeof usb_dev->descriptor) {
+		dev_dbg (parent_dev, "can't read %s device descriptor %d\n",
+				usb_dev->dev.bus_id, retval);
+		return (retval < 0) ? retval : -EMSGSIZE;
+	}
+
+	(void) usb_get_dev (usb_dev);
+	down (&usb_dev->serialize);
 	retval = usb_new_device (usb_dev);
 	if (retval)
 		dev_err (parent_dev, "can't register root hub for %s, %d\n",
 				usb_dev->dev.bus_id, retval);
+	up (&usb_dev->serialize);
+	usb_put_dev (usb_dev);
 	return retval;
 }
 EXPORT_SYMBOL (usb_register_root_hub);
diff -Nru a/drivers/usb/core/hcd.h b/drivers/usb/core/hcd.h
--- a/drivers/usb/core/hcd.h	Sun May 16 01:18:34 2004
+++ b/drivers/usb/core/hcd.h	Sun May 16 01:18:34 2004
@@ -74,6 +74,8 @@
 	 */
 	struct hc_driver	*driver;	/* hw-specific hooks */
 	unsigned		saw_irq : 1;
+	unsigned		can_wakeup:1;	/* hw supports wakeup? */
+	unsigned		remote_wakeup:1;/* sw should use wakeup? */
 	int			irq;		/* irq allocated */
 	void			*regs;		/* device memory/io */
 
@@ -94,7 +96,7 @@
 #	define	USB_STATE_RUNNING	(__ACTIVE)
 #	define	USB_STATE_QUIESCING	(__SUSPEND|__TRANSIENT|__ACTIVE)
 #	define	USB_STATE_RESUMING	(__SUSPEND|__TRANSIENT)
-#	define	USB_STATE_SUSPENDED	(__SUSPEND)
+#	define	HCD_STATE_SUSPENDED	(__SUSPEND)
 
 #define	HCD_IS_RUNNING(state) ((state) & __ACTIVE)
 #define	HCD_IS_SUSPENDED(state) ((state) & __SUSPEND)
@@ -344,9 +346,16 @@
 extern int usb_register_root_hub (struct usb_device *usb_dev,
 		struct device *parent_dev);
 
-/* for portability to 2.4, hcds should call this */
 static inline int hcd_register_root (struct usb_hcd *hcd)
 {
+	/* hcd->driver->start() reported can_wakeup, probably with
+	 * assistance from board's boot firmware.
+	 * NOTE:  normal devices won't enable wakeup by default.
+	 */
+	if (hcd->can_wakeup)
+		dev_dbg (hcd->self.controller, "supports USB remote wakeup\n");
+	hcd->remote_wakeup = hcd->can_wakeup;
+
 	return usb_register_root_hub (
 		hcd_to_bus (hcd)->root_hub, hcd->self.controller);
 }
diff -Nru a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
--- a/drivers/usb/core/hub.c	Sun May 16 01:18:35 2004
+++ b/drivers/usb/core/hub.c	Sun May 16 01:18:35 2004
@@ -38,7 +38,6 @@
 
 /* Wakes up khubd */
 static spinlock_t hub_event_lock = SPIN_LOCK_UNLOCKED;
-static DECLARE_MUTEX(usb_address0_sem);
 
 static LIST_HEAD(hub_event_list);	/* List of hubs needing servicing */
 static LIST_HEAD(hub_list);		/* List of all hubs (for cleanup) */
@@ -373,12 +372,13 @@
 	struct usb_device *dev;
 	int i;
 
-	/* Enable power to the ports */
-	dev_dbg(hubdev(interface_to_usbdev(hub->intf)),
-		"enabling power on all ports\n");
-	dev = interface_to_usbdev(hub->intf);
-	for (i = 0; i < hub->descriptor->bNbrPorts; i++)
-		set_port_feature(dev, i + 1, USB_PORT_FEAT_POWER);
+	/* if hub supports power switching, enable power on each port */
+	if ((hub->descriptor->wHubCharacteristics & HUB_CHAR_LPSM) < 2) {
+		dev_dbg(&hub->intf->dev, "enabling power on all ports\n");
+		dev = interface_to_usbdev(hub->intf);
+		for (i = 0; i < hub->descriptor->bNbrPorts; i++)
+			set_port_feature(dev, i + 1, USB_PORT_FEAT_POWER);
+	}
 
 	/* Wait for power to be enabled */
 	wait_ms(hub->descriptor->bPwrOn2PwrGood * 2);
@@ -545,8 +545,25 @@
 
 	dev_dbg(hub_dev, "power on to power good time: %dms\n",
 		hub->descriptor->bPwrOn2PwrGood * 2);
-	dev_dbg(hub_dev, "hub controller current requirement: %dmA\n",
-		hub->descriptor->bHubContrCurrent);
+
+	/* power budgeting mostly matters with bus-powered hubs,
+	 * and battery-powered root hubs (may provide just 8 mA).
+	 */
+	ret = usb_get_status(dev, USB_RECIP_DEVICE, 0, &hubstatus);
+	if (ret < 0) {
+		message = "can't get hubdev status";
+		goto fail;
+	}
+	cpu_to_le16s(&hubstatus);
+	if ((hubstatus & (1 << USB_DEVICE_SELF_POWERED)) == 0) {
+		dev_dbg(hub_dev, "hub controller current requirement: %dmA\n",
+			hub->descriptor->bHubContrCurrent);
+		hub->power_budget = (501 - hub->descriptor->bHubContrCurrent)
+					/ 2;
+		dev_dbg(hub_dev, "%dmA bus power budget for children\n",
+			hub->power_budget * 2);
+	}
+
 
 	ret = hub_hub_status(hub, &hubstatus, &hubchange);
 	if (ret < 0) {
@@ -554,12 +571,11 @@
 		goto fail;
 	}
 
-	/* FIXME implement per-port power budgeting;
-	 * enable it for bus-powered hubs.
-	 */
-	dev_dbg(hub_dev, "local power source is %s\n",
-		(hubstatus & HUB_STATUS_LOCAL_POWER)
-		? "lost (inactive)" : "good");
+	/* local power status reports aren't always correct */
+	if (dev->actconfig->desc.bmAttributes & USB_CONFIG_ATT_SELFPOWER)
+		dev_dbg(hub_dev, "local power source is %s\n",
+			(hubstatus & HUB_STATUS_LOCAL_POWER)
+			? "lost (inactive)" : "good");
 
 	if ((hub->descriptor->wHubCharacteristics & HUB_CHAR_OCPM) == 0)
 		dev_dbg(hub_dev, "%sover-current condition exists\n",
@@ -611,6 +627,8 @@
 	return ret;
 }
 
+static unsigned highspeed_hubs;
+
 static void hub_disconnect(struct usb_interface *intf)
 {
 	struct usb_hub *hub = usb_get_intfdata (intf);
@@ -620,6 +638,9 @@
 	if (!hub)
 		return;
 
+	if (interface_to_usbdev(intf)->speed == USB_SPEED_HIGH)
+		highspeed_hubs--;
+
 	usb_set_intfdata (intf, NULL);
 	spin_lock_irqsave(&hub_event_lock, flags);
 	hub->urb_complete = &urb_complete;
@@ -731,6 +752,9 @@
 
 	usb_set_intfdata (intf, hub);
 
+	if (dev->speed == USB_SPEED_HIGH)
+		highspeed_hubs++;
+
 	if (hub_configure(hub, endpoint) >= 0)
 		return 0;
 
@@ -841,8 +865,11 @@
 	return ret;
 }
 
-#define HUB_RESET_TRIES		5
-#define HUB_PROBE_TRIES		2
+#define PORT_RESET_TRIES	5
+#define SET_ADDRESS_TRIES	2
+#define GET_DESCRIPTOR_TRIES	2
+#define SET_CONFIG_TRIES	2
+
 #define HUB_ROOT_RESET_TIME	50	/* times are in msec */
 #define HUB_SHORT_RESET_TIME	10
 #define HUB_LONG_RESET_TIME	200
@@ -907,7 +934,7 @@
 	int i, status;
 
 	/* Reset the port */
-	for (i = 0; i < HUB_RESET_TRIES; i++) {
+	for (i = 0; i < PORT_RESET_TRIES; i++) {
 		set_port_feature(hub, port + 1, USB_PORT_FEAT_RESET);
 
 		/* return on disconnect or reset */
@@ -934,7 +961,7 @@
 	return -1;
 }
 
-int hub_port_disable(struct usb_device *hub, int port)
+static int hub_port_disable(struct usb_device *hub, int port)
 {
 	int ret;
 
@@ -1003,40 +1030,22 @@
 	return ((portstatus&USB_PORT_STAT_CONNECTION)) ? 0 : 1;
 }
 
-static void hub_port_connect_change(struct usb_hub *hubstate, int port,
-					u16 portstatus, u16 portchange)
+/* reset device, (re)assign address, get device descriptor.
+ * device connection is stable, no more debouncing needed.
+ * returns device in USB_STATE_ADDRESS, except on error.
+ * on error return, device is no longer usable (ref dropped).
+ *
+ * caller owns dev->serialize for the device, guarding against
+ * config changes and disconnect processing.
+ */
+static int
+hub_port_init (struct usb_device *hub, struct usb_device *dev, int port)
 {
-	struct usb_device *hub = interface_to_usbdev(hubstate->intf);
-	struct usb_device *dev;
-	unsigned int delay = HUB_SHORT_RESET_TIME;
-	int i;
+	static DECLARE_MUTEX(usb_address0_sem);
 
-	dev_dbg (&hubstate->intf->dev,
-		"port %d, status %x, change %x, %s\n",
-		port + 1, portstatus, portchange, portspeed (portstatus));
-
-	/* Clear the connection change status */
-	clear_port_feature(hub, port + 1, USB_PORT_FEAT_C_CONNECTION);
-
-	/* Disconnect any existing devices under this port */
-	if (hub->children[port])
-		usb_disconnect(&hub->children[port]);
-
-	/* Return now if nothing is connected */
-	if (!(portstatus & USB_PORT_STAT_CONNECTION)) {
-		if (portstatus & USB_PORT_STAT_ENABLE)
-			hub_port_disable(hub, port);
-
-		return;
-	}
-
-	if (hub_port_debounce(hub, port)) {
-		dev_err (&hubstate->intf->dev,
-			"connect-debounce failed, port %d disabled\n",
-			port+1);
-		hub_port_disable(hub, port);
-		return;
-	}
+	int			i, j, retval = -ENODEV;
+	unsigned		delay = HUB_SHORT_RESET_TIME;
+	enum usb_device_speed	oldspeed = dev->speed;
 
 	/* root hub ports have a slightly longer reset period
 	 * (from USB 2.0 spec, section 7.1.7.5)
@@ -1046,31 +1055,53 @@
 
 	/* Some low speed devices have problems with the quick delay, so */
 	/*  be a bit pessimistic with those devices. RHbug #23670 */
-	if (portstatus & USB_PORT_STAT_LOW_SPEED)
+	if (oldspeed == USB_SPEED_LOW)
 		delay = HUB_LONG_RESET_TIME;
 
 	down(&usb_address0_sem);
 
-	for (i = 0; i < HUB_PROBE_TRIES; i++) {
-
-		/* Allocate a new device struct */
-		dev = usb_alloc_dev(hub, hub->bus, port);
-		if (!dev) {
-			dev_err (&hubstate->intf->dev,
-				"couldn't allocate usb_device\n");
-			break;
-		}
-
-		dev->state = USB_STATE_POWERED;
-
-		/* Reset the device, and detect its speed */
-		if (hub_port_reset(hub, port, dev, delay)) {
-			usb_put_dev(dev);
-			break;
-		}
-
-		/* Find a new address for it */
+	/* Reset the device; full speed may morph to high speed */
+	switch (hub_port_reset(hub, port, dev, delay)) {
+	case 0:			/* success, speed is known */
+		break;
+	case 1:			/* disconnect, give to companion */
+		retval = -EBUSY;
+		/* FALL THROUGH */
+	default:		/* error */
+		goto fail;
+	}
+	if (oldspeed != USB_SPEED_UNKNOWN && oldspeed != dev->speed) {
+		dev_dbg(&dev->dev, "device reset changed speed!\n");
+		goto fail;
+	}
+  
+	/* USB 2.0 section 5.5.3 talks about ep0 maxpacket ...
+	 * it's fixed size except for full speed devices.
+	 */
+	switch (dev->speed) {
+	case USB_SPEED_HIGH:		/* fixed at 64 */
+		i = 64;
+		break;
+	case USB_SPEED_FULL:		/* 8, 16, 32, or 64 */
+		/* to determine the ep0 maxpacket size, read the first 8
+		 * bytes from the device descriptor to get bMaxPacketSize0;
+		 * then correct our initial (small) guess.
+		 */
+		// FALLTHROUGH
+	case USB_SPEED_LOW:		/* fixed at 8 */
+		i = 8;
+		break;
+	default:
+		goto fail;
+	}
+	dev->epmaxpacketin [0] = i;
+	dev->epmaxpacketout[0] = i;
+ 
+	/* set the address */
+	if (dev->devnum <= 0) {
 		usb_choose_address(dev);
+		if (dev->devnum <= 0)
+			goto fail;
 
 		/* Set up TT records, if needed  */
 		if (hub->tt) {
@@ -1078,12 +1109,21 @@
 			dev->ttport = hub->ttport;
 		} else if (dev->speed != USB_SPEED_HIGH
 				&& hub->speed == USB_SPEED_HIGH) {
+			struct usb_hub	*hubstate;
+ 
+			hubstate = usb_get_intfdata (hub->actconfig
+							->interface[0]);
 			dev->tt = &hubstate->tt;
 			dev->ttport = port + 1;
 		}
 
-		dev_info (&dev->dev,
-			"new %s speed USB device using address %d\n",
+		/* force the right log message (below) at low speed */
+		oldspeed = USB_SPEED_UNKNOWN;
+	}
+ 
+	dev_info (&dev->dev,
+			"%s %s speed USB device using address %d\n",
+			(oldspeed == USB_SPEED_UNKNOWN) ? "new" : "reset",
 			({ char *speed; switch (dev->speed) {
 			case USB_SPEED_LOW:	speed = "low";	break;
 			case USB_SPEED_FULL:	speed = "full";	break;
@@ -1091,23 +1131,265 @@
 			default: 		speed = "?";	break;
 			}; speed;}),
 			dev->devnum);
+ 
+	/* Why interleave GET_DESCRIPTOR and SET_ADDRESS this way?
+	 * Because device hardware and firmware is sometimes buggy in
+	 * this area, and this is how Linux has done it for ages.
+	 * Change it cautiously.
+	 *
+	 * NOTE:  Windows gets the descriptor first, seemingly to help
+	 * work around device bugs like "can't use addresses with bit 3
+	 * set in certain configurations".  Yes, really.
+	 */
+	for (i = 0; i < GET_DESCRIPTOR_TRIES; ++i) {
+		for (j = 0; j < SET_ADDRESS_TRIES; ++j) {
+			retval = usb_set_address(dev);
+			if (retval >= 0)
+				break;
+			wait_ms(200);
+		}
+		if (retval < 0) {
+			dev_err(&dev->dev,
+				"device not accepting address %d, error %d\n",
+				dev->devnum, retval);
+ fail:
+			hub_port_disable(hub, port);
+			clear_bit(dev->devnum, dev->bus->devmap.devicemap);
+			dev->devnum = -1;
+			usb_put_dev(dev);
+			up(&usb_address0_sem);
+			return retval;
+		}
+ 
+		/* cope with hardware quirkiness:
+		 *  - let SET_ADDRESS settle, some device hardware wants it
+		 *  - read ep0 maxpacket even for high and low speed,
+  		 */
+		wait_ms(10);
+		retval = usb_get_device_descriptor(dev, 8);
+		if (retval >= 8)
+			break;
+		wait_ms(100);
+	}
+	if (retval != 8) {
+		dev_err(&dev->dev, "device descriptor read/%s, error %d\n",
+				"8", retval);
+		if (retval >= 0)
+			retval = -EMSGSIZE;
+		goto fail;
+	}
+	if (dev->speed == USB_SPEED_FULL
+			&& (dev->epmaxpacketin [0]
+				!= dev->descriptor.bMaxPacketSize0)) {
+		usb_disable_endpoint(dev, 0);
+		usb_endpoint_running(dev, 0, 1);
+		usb_endpoint_running(dev, 0, 0);
+		dev->epmaxpacketin [0] = dev->descriptor.bMaxPacketSize0;
+		dev->epmaxpacketout[0] = dev->descriptor.bMaxPacketSize0;
+	}
+  
+	retval = usb_get_device_descriptor(dev, USB_DT_DEVICE_SIZE);
+	if (retval < (signed)sizeof(dev->descriptor)) {
+		dev_err(&dev->dev, "device descriptor read/%s, error %d\n",
+			"all", retval);
+		if (retval >= 0)
+			retval = -ENOMSG;
+		goto fail;
+	}
 
-		/* Run it through the hoops (find a driver, etc) */
-		if (usb_new_device(dev) == 0) {
-			hub->children[port] = dev;
-			goto done;
+	/* now dev is visible to other tasks */
+	hub->children[port] = dev;
+
+	up(&usb_address0_sem);
+	return 0;
+}
+
+static void
+check_highspeed (struct usb_hub *hub, struct usb_device *dev, int port)
+{
+	struct usb_qualifier_descriptor	*qual;
+	int				status;
+
+	qual = kmalloc (sizeof *qual, SLAB_KERNEL);
+	if (qual == 0)
+		return;
+
+	status = usb_get_descriptor (dev, USB_DT_DEVICE_QUALIFIER, 0,
+			qual, sizeof *qual);
+	if (status == sizeof *qual) {
+		dev_info(&dev->dev, "not running at top speed; "
+			"connect to a high speed hub\n");
+		/* hub LEDs are probably harder to miss than syslog */
+		if (hub->has_indicators) {
+			hub->indicator[port] = INDICATOR_GREEN_BLINK;
+			schedule_work (&hub->leds);
 		}
+	}
+	kfree (qual);
+}
 
-		/* Free the configuration if there was an error */
-		usb_put_dev(dev);
+static unsigned
+hub_power_remaining (struct usb_hub *hubstate, struct usb_device *hub)
+{
+	int remaining;
+	unsigned i;
 
-		/* Switch to a long reset time */
-		delay = HUB_LONG_RESET_TIME;
+	remaining = hubstate->power_budget;
+	if (!remaining)		/* self-powered */
+		return 0;
+
+	for (i = 0; i < hub->maxchild; i++) {
+		struct usb_device	*dev = hub->children[i];
+		int			delta;
+
+		if (!dev)
+			continue;
+
+		if (dev->actconfig)
+			delta = dev->actconfig->desc.bMaxPower;
+		else
+			delta = 50;
+		// dev_dbg(&dev->dev, "budgeted %dmA\n", 2 * delta);
+		remaining -= delta;
+	}
+	if (remaining < 0) {
+		dev_warn(&hubstate->intf->dev,
+			"%dmA over power budget!\n",
+			-2 * remaining);
+		remaining = 0;
 	}
+	return remaining;
+}
+ 
+static void hub_port_connect_change(struct usb_hub *hubstate, int port,
+					u16 portstatus, u16 portchange)
+{
+	struct usb_device *hub = interface_to_usbdev(hubstate->intf);
+	int status, i;
+ 
+	dev_dbg (&hubstate->intf->dev,
+		"port %d, status %04x, change %04x, %s\n",
+		port + 1, portstatus, portchange, portspeed (portstatus));
+ 
+	/* Clear the connection change status */
+	clear_port_feature(hub, port + 1, USB_PORT_FEAT_C_CONNECTION);
 
-	hub_port_disable(hub, port);
+	if (hubstate->has_indicators) {
+		set_port_led(hub, hubstate, port + 1, HUB_LED_AUTO);
+		hubstate->indicator[port] = INDICATOR_AUTO;
+	}
+ 
+	/* Disconnect any existing devices under this port */
+	if (hub->children[port])
+		usb_disconnect(&hub->children[port]);
+
+	/* Return now if nothing is connected */
+	if (!(portstatus & USB_PORT_STAT_CONNECTION)) {
+
+		/* maybe switch power back on (e.g. root hub was reset) */
+		if ((hubstate->descriptor->wHubCharacteristics
+					& HUB_CHAR_LPSM) < 2
+				&& !(portstatus & (1 << USB_PORT_FEAT_POWER)))
+			set_port_feature(hub, port + 1, USB_PORT_FEAT_POWER);
+ 
+		if (portstatus & USB_PORT_STAT_ENABLE)
+  			goto done;
+		return;
+	}
+  
+	if (hub_port_debounce(hub, port)) {
+		dev_err (&hubstate->intf->dev,
+			"connect-debounce failed, port %d disabled\n",
+			port+1);
+		goto done;
+	}
+
+	for (i = 0; i < SET_CONFIG_TRIES; i++) {
+		struct usb_device *dev;
+
+		/* reallocate for each attempt, since references
+		 * to the previous one can escape in various ways
+		 */
+		dev = usb_alloc_dev(hub, hub->bus, port);
+		if (!dev) {
+			dev_err (&hubstate->intf->dev,
+				"couldn't allocate port %d usb_device\n", port+1);
+			goto done;
+		}
+		dev->state = USB_STATE_POWERED;
+	  
+		/* hub can tell if it's lowspeed already:  D- pullup (not D+) */
+		if (portstatus & USB_PORT_STAT_LOW_SPEED)
+			dev->speed = USB_SPEED_LOW;
+		else
+			dev->speed = USB_SPEED_UNKNOWN;
+
+		/* reset, set address, get descriptor, add to hub's children */
+		down (&dev->serialize);
+		status = hub_port_init(hub, dev, port);
+		if (status == -EBUSY)
+			break;
+		if (status < 0)
+			continue;
+
+		/* consecutive bus-powered hubs aren't reliable; they can
+		 * violate the voltage drop budget.  if the new child has
+		 * a "powered" LED, users should notice we didn't enable it
+		 * (without reading syslog), even without per-port LEDs
+		 * on the parent.
+		 */
+		if (dev->descriptor.bDeviceClass == USB_CLASS_HUB
+				&& hubstate->power_budget) {
+			u16	devstat;
+
+			status = usb_get_status(dev, USB_RECIP_DEVICE, 0,
+					&devstat);
+			if (status < 0) {
+				dev_dbg(&dev->dev, "get status %d ?\n", status);
+				continue;
+			}
+			cpu_to_le16s(&devstat);
+			if ((devstat & (1 << USB_DEVICE_SELF_POWERED)) == 0) {
+				dev_err(&dev->dev,
+					"can't connect bus-powered hub "
+					"to this port\n");
+				if (hubstate->has_indicators) {
+					hubstate->indicator[port] =
+						INDICATOR_AMBER_BLINK;
+					schedule_work (&hubstate->leds);
+				}
+				hub->children[port] = NULL;
+				usb_put_dev(dev);
+				hub_port_disable(hub, port);
+				return;
+			}
+		}
+ 
+		/* check for devices running slower than they could */
+		if (dev->descriptor.bcdUSB >= 0x0200
+				&& dev->speed == USB_SPEED_FULL
+				&& highspeed_hubs != 0)
+			check_highspeed (hubstate, dev, port);
+
+		/* Run it through the hoops (find a driver, etc) */
+		status = usb_new_device(dev);
+		if (status != 0) {
+			hub->children[port] = NULL;
+			continue;
+		}
+		up (&dev->serialize);
+
+		status = hub_power_remaining(hubstate, hub);
+		if (status)
+			dev_dbg(&hubstate->intf->dev,
+				"%dmA power budget left\n",
+				2 * status);
+
+		return;
+	}
+ 
 done:
-	up(&usb_address0_sem);
+	hub_port_disable(hub, port);
 }
 
 static void hub_events(void)
@@ -1173,7 +1455,7 @@
 				hub_port_connect_change(hub, i, portstatus, portchange);
 			} else if (portchange & USB_PORT_STAT_C_ENABLE) {
 				dev_dbg (hubdev (dev),
-					"port %d enable change, status %x\n",
+					"port %d enable change, status %08x\n",
 					i + 1, portstatus);
 				clear_port_feature(dev,
 					i + 1, USB_PORT_FEAT_C_ENABLE);
@@ -1331,25 +1613,68 @@
 	usb_deregister(&hub_driver);
 } /* usb_hub_cleanup() */
 
+
+static int config_descriptors_changed(struct usb_device *dev)
+{
+	unsigned			index;
+	unsigned			len = 0;
+	struct usb_config_descriptor	*buf;
+
+	for (index = 0; index < dev->descriptor.bNumConfigurations; index++) {
+		if (len < dev->config[index].desc.wTotalLength)
+			len = dev->config[index].desc.wTotalLength;
+	}
+	buf = kmalloc (len, SLAB_KERNEL);
+	if (buf == 0) {
+		dev_err(&dev->dev, "no mem to re-read configs after reset\n");
+		/* assume the worst */
+		return 1;
+	}
+	for (index = 0; index < dev->descriptor.bNumConfigurations; index++) {
+		int length;
+		int old_length = dev->config[index].desc.wTotalLength;
+
+		length = usb_get_descriptor(dev, USB_DT_CONFIG, index, buf,
+				old_length);
+		if (length < old_length) {
+			dev_dbg(&dev->dev, "config index %d, error %d\n",
+					index, length);
+			break;
+		}
+		if (memcmp (buf, dev->rawdescriptors[index], old_length)
+				!= 0) {
+			dev_dbg(&dev->dev, "config index %d changed (#%d)\n",
+				index, buf->bConfigurationValue);
+/* FIXME enable this when we can re-enumerate after reset;
+ * until then DFU-ish drivers need this and other workarounds
+ */
+//			break;
+		}
+	}
+	kfree(buf);
+	return index != dev->descriptor.bNumConfigurations;
+}
+
 /*
- * WARNING - If a driver calls usb_reset_device, you should simulate a
- * disconnect() and probe() for other interfaces you doesn't claim. This
- * is left up to the driver writer right now. This insures other drivers
- * have a chance to re-setup their interface.
+ * WARNING - don't reset any device unless drivers for all of its
+ * interfaces are expecting that reset!  Maybe some driver->reset()
+ * method should eventually help ensure sufficient cooperation.
  *
- * Take a look at proc_resetdevice in devio.c for some sample code to
- * do this.
- * Use this only from within your probe function, otherwise use
- * usb_reset_device() below, which ensure proper locking
+ * This is the same as usb_reset_device() except that the caller
+ * already holds dev->serialize.  For example, it's safe to use
+ * this from a driver probe() routine after downloading new firmware.
  */
-int usb_physical_reset_device(struct usb_device *dev)
+int __usb_reset_device(struct usb_device *dev)
 {
 	struct usb_device *parent = dev->parent;
-	struct usb_device_descriptor *descriptor;
+	struct usb_device_descriptor descriptor = dev->descriptor;
 	int i, ret, port = -1;
 
-	if (!parent) {
-		err("attempting to reset root hub!");
+	if (dev->maxchild) {
+		/* this requires hub- or hcd-specific logic;
+		 * see hub_reset() and OHCI hc_restart()
+		 */
+		dev_dbg(&dev->dev, "%s for hub!\n", __FUNCTION__);
 		return -EINVAL;
 	}
 
@@ -1362,114 +1687,69 @@
 	if (port < 0)
 		return -ENOENT;
 
-	descriptor = kmalloc(sizeof *descriptor, GFP_NOIO);
-	if (!descriptor) {
-		return -ENOMEM;
-	}
-
-	down(&usb_address0_sem);
-
-	/* Send a reset to the device */
-	if (hub_port_reset(parent, port, dev, HUB_SHORT_RESET_TIME)) {
-		hub_port_disable(parent, port);
-		up(&usb_address0_sem);
-		kfree(descriptor);
-		return(-ENODEV);
-	}
-
-	/* Reprogram the Address */
-	ret = usb_set_address(dev);
-	if (ret < 0) {
-		err("USB device not accepting new address (error=%d)", ret);
-		hub_port_disable(parent, port);
-		up(&usb_address0_sem);
-		kfree(descriptor);
-		return ret;
-	}
-
-	/* Let the SET_ADDRESS settle */
-	wait_ms(10);
-
-	up(&usb_address0_sem);
-
-	/*
-	 * Now we fetch the configuration descriptors for the device and
-	 * see if anything has changed. If it has, we dump the current
-	 * parsed descriptors and reparse from scratch. Then we leave
-	 * the device alone for the caller to finish setting up.
-	 *
-	 * If nothing changed, we reprogram the configuration and then
-	 * the alternate settings.
-	 */
-
-	ret = usb_get_descriptor(dev, USB_DT_DEVICE, 0, descriptor,
-			sizeof(*descriptor));
-	if (ret < 0) {
-		kfree(descriptor);
-		return ret;
-	}
-
-	le16_to_cpus(&descriptor->bcdUSB);
-	le16_to_cpus(&descriptor->idVendor);
-	le16_to_cpus(&descriptor->idProduct);
-	le16_to_cpus(&descriptor->bcdDevice);
-
-	if (memcmp(&dev->descriptor, descriptor, sizeof(*descriptor))) {
-		kfree(descriptor);
-		usb_destroy_configuration(dev);
-
-		/* FIXME Linux doesn't yet handle these "device morphed"
-		 * paths.  DFU variants need this to work ... and they
-		 * include the "config descriptors changed" case this
-		 * doesn't yet detect!
-		 */
-		dev->state = USB_STATE_NOTATTACHED;
-		dev_err(&dev->dev, "device morphed (DFU?), nyet supported\n");
-
-		return -ENODEV;
-	}
-
-	kfree(descriptor);
+	ret = hub_port_init(parent, dev, port);
+	if (ret < 0)
+		goto re_enumerate;
+ 
+	/* Device might have changed firmware (DFU or similar) */
+	if (memcmp(&dev->descriptor, &descriptor, sizeof descriptor)
+			|| config_descriptors_changed (dev)) {
+		dev_info(&dev->dev, "device firmware changed\n");
+		dev->descriptor = descriptor;	/* for disconnect() calls */
+		goto re_enumerate;
+  	}
+  
+	if (!dev->actconfig)
+		return 0;
 
 	ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
 			USB_REQ_SET_CONFIGURATION, 0,
 			dev->actconfig->desc.bConfigurationValue, 0,
 			NULL, 0, HZ * USB_CTRL_SET_TIMEOUT);
 	if (ret < 0) {
-		err("failed to set dev %s active configuration (error=%d)",
-			dev->devpath, ret);
-		return ret;
-	}
+		dev_err(&dev->dev,
+			"can't restore configuration #%d (error=%d)\n",
+			dev->actconfig->desc.bConfigurationValue, ret);
+		goto re_enumerate;
+  	}
 	dev->state = USB_STATE_CONFIGURED;
 
 	for (i = 0; i < dev->actconfig->desc.bNumInterfaces; i++) {
 		struct usb_interface *intf = dev->actconfig->interface[i];
 		struct usb_interface_descriptor *desc;
 
+		/* set_interface resets host side toggle and halt status even
+		 * for altsetting zero.  the interface may have no driver.
+		 */
 		desc = &intf->cur_altsetting->desc;
 		ret = usb_set_interface(dev, desc->bInterfaceNumber,
 			desc->bAlternateSetting);
 		if (ret < 0) {
-			err("failed to set active alternate setting "
-				"for dev %s interface %d (error=%d)",
-				dev->devpath, desc->bInterfaceNumber, ret);
-			return ret;
+			dev_err(&dev->dev, "failed to restore interface %d "
+				"altsetting %d (error=%d)\n",
+				desc->bInterfaceNumber,
+				desc->bAlternateSetting,
+				ret);
+			goto re_enumerate;
 		}
 	}
 
 	return 0;
+ 
+re_enumerate:
+	/* FIXME make some task re-enumerate; don't just mark unusable */
+	dev->state = USB_STATE_NOTATTACHED;
+	return -ENODEV;
 }
+EXPORT_SYMBOL(__usb_reset_device);
 
 int usb_reset_device(struct usb_device *udev)
 {
-	struct device *gdev = &udev->dev;
 	int r;
 	
-	down_read(&gdev->bus->subsys.rwsem);
-	r = usb_physical_reset_device(udev);
-	up_read(&gdev->bus->subsys.rwsem);
+	down(&udev->serialize);
+	r = __usb_reset_device(udev);
+	up(&udev->serialize);
 
 	return r;
 }
-
-
diff -Nru a/drivers/usb/core/hub.h b/drivers/usb/core/hub.h
--- a/drivers/usb/core/hub.h	Sun May 16 01:18:33 2004
+++ b/drivers/usb/core/hub.h	Sun May 16 01:18:33 2004
@@ -209,6 +209,8 @@
 	struct semaphore	khubd_sem;
 	struct usb_tt		tt;		/* Transaction Translator */
 
+	u8			power_budget;	/* in 2mA units; or zero */
+
 	unsigned		has_indicators:1;
 	enum hub_led_mode	indicator[USB_MAXCHILDREN];
 	struct work_struct	leds;
diff -Nru a/drivers/usb/core/inode.c b/drivers/usb/core/inode.c
--- a/drivers/usb/core/inode.c	Sun May 16 01:18:33 2004
+++ b/drivers/usb/core/inode.c	Sun May 16 01:18:33 2004
@@ -717,9 +717,6 @@
 	while (!list_empty(&dev->filelist)) {
 		ds = list_entry(dev->filelist.next, struct dev_state, list);
 		list_del_init(&ds->list);
-		down_write(&ds->devsem);
-		ds->dev = NULL;
-		up_write(&ds->devsem);
 		if (ds->discsignr) {
 			sinfo.si_signo = SIGPIPE;
 			sinfo.si_errno = EPIPE;
diff -Nru a/drivers/usb/core/message.c b/drivers/usb/core/message.c
--- a/drivers/usb/core/message.c	Sun May 16 01:18:34 2004
+++ b/drivers/usb/core/message.c	Sun May 16 01:18:34 2004
@@ -796,10 +796,6 @@
 	}
 }
 
-static void release_interface(struct device *dev)
-{
-}
-
 /*
  * usb_disable_device - Disable all the endpoints for a USB device
  * @dev: the device whose endpoints are being disabled
@@ -834,7 +830,15 @@
 			interface = dev->actconfig->interface[i];
 			dev_dbg (&dev->dev, "unregistering interface %s\n",
 				interface->dev.bus_id);
-			device_unregister (&interface->dev);
+			device_del (&interface->dev);
+		}
+
+		/* Now that the interfaces are unbound, nobody should
+		 * try to access them.
+		 */
+		for (i = 0; i < dev->actconfig->desc.bNumInterfaces; i++) {
+			put_device (&dev->actconfig->interface[i]->dev);
+			dev->actconfig->interface[i] = NULL;
 		}
 		dev->actconfig = 0;
 		if (dev->state == USB_STATE_CONFIGURED)
@@ -1071,6 +1075,16 @@
 	return 0;
 }
 
+static void release_interface(struct device *dev)
+{
+	struct usb_interface *intf = to_usb_interface(dev);
+	struct usb_interface_cache *intfc =
+			altsetting_to_usb_interface_cache(intf->altsetting);
+
+	kref_put(&intfc->ref);
+	kfree(intf);
+}
+
 /*
  * usb_set_configuration - Makes a particular device setting be current
  * @dev: the device whose configuration is being updated
@@ -1109,19 +1123,19 @@
 {
 	int i, ret;
 	struct usb_host_config *cp = NULL;
-	
+	struct usb_interface **new_interfaces = NULL;
+	int n, nintf;
+
 	/* dev->serialize guards all config changes */
 
-	for (i=0; i<dev->descriptor.bNumConfigurations; i++) {
+	for (i = 0; i < dev->descriptor.bNumConfigurations; i++) {
 		if (dev->config[i].desc.bConfigurationValue == configuration) {
 			cp = &dev->config[i];
 			break;
 		}
 	}
-	if ((!cp && configuration != 0)) {
-		ret = -EINVAL;
-		goto out;
-	}
+	if ((!cp && configuration != 0))
+		return -EINVAL;
 
 	/* The USB spec says configuration 0 means unconfigured.
 	 * But if a device includes a configuration numbered 0,
@@ -1130,6 +1144,34 @@
 	if (cp && configuration == 0)
 		dev_warn(&dev->dev, "config 0 descriptor??\n");
 
+	/* Allocate memory for new interfaces before doing anything else,
+	 * so that if we run out then nothing will have changed. */
+	n = nintf = 0;
+	if (cp) {
+		nintf = cp->desc.bNumInterfaces;
+		new_interfaces = kmalloc(nintf * sizeof(*new_interfaces),
+				GFP_KERNEL);
+		if (!new_interfaces) {
+			dev_err(&dev->dev, "Out of memory");
+			return -ENOMEM;
+		}
+
+		for (; n < nintf; ++n) {
+			new_interfaces[n] = kmalloc(
+					sizeof(struct usb_interface),
+					GFP_KERNEL);
+			if (!new_interfaces[n]) {
+				dev_err(&dev->dev, "Out of memory");
+				ret = -ENOMEM;
+free_interfaces:
+				while (--n >= 0)
+					kfree(new_interfaces[n]);
+				kfree(new_interfaces);
+				return ret;
+			}
+		}
+	}
+
 	/* if it's already configured, clear out old state first.
 	 * getting rid of old interfaces means unbinding their drivers.
 	 */
@@ -1139,7 +1181,7 @@
 	if ((ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
 			USB_REQ_SET_CONFIGURATION, 0, configuration, 0,
 			NULL, 0, HZ * USB_CTRL_SET_TIMEOUT)) < 0)
-		goto out;
+		goto free_interfaces;
 
 	dev->actconfig = cp;
 	if (!cp)
@@ -1147,14 +1189,21 @@
 	else {
 		dev->state = USB_STATE_CONFIGURED;
 
-		/* re-initialize hc/hcd/usbcore interface/endpoint state.
-		 * this triggers binding of drivers to interfaces; and
-		 * maybe probe() calls will choose different altsettings.
+		/* Initialize the new interface structures and the
+		 * hc/hcd/usbcore interface/endpoint state.
 		 */
-		for (i = 0; i < cp->desc.bNumInterfaces; ++i) {
-			struct usb_interface *intf = cp->interface[i];
+		for (i = 0; i < nintf; ++i) {
+			struct usb_interface_cache *intfc;
+			struct usb_interface *intf;
 			struct usb_host_interface *alt;
 
+			cp->interface[i] = intf = new_interfaces[i];
+			memset(intf, 0, sizeof(*intf));
+			intfc = cp->intf_cache[i];
+			intf->altsetting = intfc->altsetting;
+			intf->num_altsetting = intfc->num_altsetting;
+			kref_get(&intfc->ref);
+
 			alt = usb_altnum_to_altsetting(intf, 0);
 
 			/* No altsetting 0?  We'll assume the first altsetting.
@@ -1178,12 +1227,15 @@
 				 configuration,
 				 alt->desc.bInterfaceNumber);
 		}
+		kfree(new_interfaces);
 
-		/* Now that all interfaces are setup, probe() calls
-		 * may claim() any interface that's not yet bound.
-		 * Many class drivers need that: CDC, audio, video, etc.
+		/* Now that all the interfaces are set up, register them
+		 * to trigger binding of drivers to interfaces.  probe()
+		 * routines may install different altsettings and may
+		 * claim() any interfaces not yet bound.  Many class drivers
+		 * need that: CDC, audio, video, etc.
 		 */
-		for (i = 0; i < cp->desc.bNumInterfaces; ++i) {
+		for (i = 0; i < nintf; ++i) {
 			struct usb_interface *intf = cp->interface[i];
 			struct usb_interface_descriptor *desc;
 
@@ -1204,7 +1256,6 @@
 		}
 	}
 
-out:
 	return ret;
 }
 
diff -Nru a/drivers/usb/core/urb.c b/drivers/usb/core/urb.c
--- a/drivers/usb/core/urb.c	Sun May 16 01:18:35 2004
+++ b/drivers/usb/core/urb.c	Sun May 16 01:18:35 2004
@@ -13,6 +13,14 @@
 #include <linux/usb.h>
 #include "hcd.h"
 
+#define to_urb(d) container_of(d, struct urb, kref)
+
+static void urb_destroy(struct kref *kref)
+{
+	struct urb *urb = to_urb(kref);
+	kfree(urb);
+}
+
 /**
  * usb_init_urb - initializes a urb so that it can be used by a USB driver
  * @urb: pointer to the urb to initialize
@@ -31,7 +39,7 @@
 {
 	if (urb) {
 		memset(urb, 0, sizeof(*urb));
-		urb->count = (atomic_t)ATOMIC_INIT(1);
+		kref_init(&urb->kref, urb_destroy);
 		spin_lock_init(&urb->lock);
 	}
 }
@@ -80,8 +88,7 @@
 void usb_free_urb(struct urb *urb)
 {
 	if (urb)
-		if (atomic_dec_and_test(&urb->count))
-			kfree(urb);
+		kref_put(&urb->kref);
 }
 
 /**
@@ -96,11 +103,9 @@
  */
 struct urb * usb_get_urb(struct urb *urb)
 {
-	if (urb) {
-		atomic_inc(&urb->count);
-		return urb;
-	} else
-		return NULL;
+	if (urb)
+		kref_get(&urb->kref);
+	return urb;
 }
 		
 		
@@ -232,6 +237,8 @@
 	    (dev->state < USB_STATE_DEFAULT) ||
 	    (!dev->bus) || (dev->devnum <= 0))
 		return -ENODEV;
+	if (dev->state == USB_STATE_SUSPENDED)
+		return -EHOSTUNREACH;
 	if (!(op = dev->bus->op) || !op->submit_urb)
 		return -ENODEV;
 
diff -Nru a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c
--- a/drivers/usb/core/usb.c	Sun May 16 01:18:35 2004
+++ b/drivers/usb/core/usb.c	Sun May 16 01:18:35 2004
@@ -198,6 +198,9 @@
  * This routine helps device drivers avoid such mistakes.
  * However, you should make sure that you do the right thing with any
  * alternate settings available for this interfaces.
+ *
+ * Don't call this function unless you are bound to one of the interfaces
+ * on this device or you own the dev->serialize semaphore!
  */
 struct usb_interface *usb_ifnum_to_if(struct usb_device *dev, unsigned ifnum)
 {
@@ -228,6 +231,9 @@
  * it would be incorrect to assume that the first altsetting entry in
  * the array corresponds to altsetting zero.  This routine helps device
  * drivers avoid such mistakes.
+ *
+ * Don't call this function unless you are bound to the intf interface
+ * or you own the device's ->serialize semaphore!
  */
 struct usb_host_interface *usb_altnum_to_altsetting(struct usb_interface *intf,
 		unsigned int altnum)
@@ -1064,92 +1070,29 @@
 }
 
 /*
- * By the time we get here, we chose a new device address
- * and is in the default state. We need to identify the thing and
- * get the ball rolling..
+ * usb_new_device - perform initial device setup (usbcore-internal)
+ * @dev: newly addressed device (in ADDRESS state)
  *
- * Returns 0 for success, != 0 for error.
+ * This is called with devices which have been enumerated, but not yet
+ * configured.  The device descriptor is available, but not descriptors
+ * for any device configuration.  The caller owns dev->serialize, and
+ * the device is not visible through sysfs or other filesystem code.
+ *
+ * Returns 0 for success (device is configured and listed, with its
+ * interfaces, in sysfs); else a negative errno value.  On error, one
+ * reference count to the device has been dropped.
  *
  * This call is synchronous, and may not be used in an interrupt context.
  *
  * Only the hub driver should ever call this; root hub registration
  * uses it only indirectly.
  */
-#define NEW_DEVICE_RETRYS	2
-#define SET_ADDRESS_RETRYS	2
 int usb_new_device(struct usb_device *dev)
 {
-	int err = -EINVAL;
+	int err;
 	int i;
-	int j;
 	int config;
 
-	/* USB 2.0 section 5.5.3 talks about ep0 maxpacket ...
-	 * it's fixed size except for full speed devices.
-	 */
-	switch (dev->speed) {
-	case USB_SPEED_HIGH:		/* fixed at 64 */
-		i = 64;
-		break;
-	case USB_SPEED_FULL:		/* 8, 16, 32, or 64 */
-		/* to determine the ep0 maxpacket size, read the first 8
-		 * bytes from the device descriptor to get bMaxPacketSize0;
-		 * then correct our initial (small) guess.
-		 */
-		// FALLTHROUGH
-	case USB_SPEED_LOW:		/* fixed at 8 */
-		i = 8;
-		break;
-	default:
-		goto fail;
-	}
-	dev->epmaxpacketin [0] = i;
-	dev->epmaxpacketout[0] = i;
-
-	for (i = 0; i < NEW_DEVICE_RETRYS; ++i) {
-
-		for (j = 0; j < SET_ADDRESS_RETRYS; ++j) {
-			err = usb_set_address(dev);
-			if (err >= 0)
-				break;
-			wait_ms(200);
-		}
-		if (err < 0) {
-			dev_err(&dev->dev,
-				"device not accepting address %d, error %d\n",
-				dev->devnum, err);
-			goto fail;
-		}
-
-		wait_ms(10);	/* Let the SET_ADDRESS settle */
-
-		/* high and low speed devices don't need this... */
-		err = usb_get_device_descriptor(dev, 8);
-		if (err >= 8)
-			break;
-		wait_ms(100);
-	}
-
-	if (err < 8) {
-		dev_err(&dev->dev, "device descriptor read/8, error %d\n", err);
-		goto fail;
-	}
-	if (dev->speed == USB_SPEED_FULL) {
-		usb_disable_endpoint(dev, 0);
-		usb_endpoint_running(dev, 0, 1);
-		usb_endpoint_running(dev, 0, 0);
-		dev->epmaxpacketin [0] = dev->descriptor.bMaxPacketSize0;
-		dev->epmaxpacketout[0] = dev->descriptor.bMaxPacketSize0;
-	}
-
-	/* USB device state == addressed ... still not usable */
-
-	err = usb_get_device_descriptor(dev, sizeof(dev->descriptor));
-	if (err != (signed)sizeof(dev->descriptor)) {
-		dev_err(&dev->dev, "device descriptor read/all, error %d\n", err);
-		goto fail;
-	}
-
 	err = usb_get_configuration(dev);
 	if (err < 0) {
 		dev_err(&dev->dev, "can't read configurations, error %d\n",
@@ -1170,13 +1113,10 @@
 		usb_show_string(dev, "SerialNumber", dev->descriptor.iSerialNumber);
 #endif
 
-	down(&dev->serialize);
-
 	/* put device-specific files into sysfs */
 	err = device_add (&dev->dev);
 	if (err) {
 		dev_err(&dev->dev, "can't device_add, error %d\n", err);
-		up(&dev->serialize);
 		goto fail;
 	}
 	usb_create_driverfs_dev_files (dev);
@@ -1193,7 +1133,7 @@
 			/* heuristic:  Linux is more likely to have class
 			 * drivers, so avoid vendor-specific interfaces.
 			 */
-			desc = &dev->config[i].interface[0]
+			desc = &dev->config[i].intf_cache[0]
 					->altsetting->desc;
 			if (desc->bInterfaceClass == USB_CLASS_VENDOR_SPEC)
 				continue;
@@ -1211,7 +1151,6 @@
 			dev->descriptor.bNumConfigurations);
 	}
 	err = usb_set_configuration(dev, config);
-	up(&dev->serialize);
 	if (err) {
 		dev_err(&dev->dev, "can't set config #%d, error %d\n",
 			config, err);
@@ -1226,9 +1165,10 @@
 
 	return 0;
 fail:
-	dev->state = USB_STATE_DEFAULT;
+	dev->state = USB_STATE_NOTATTACHED;
 	clear_bit(dev->devnum, dev->bus->devmap.devicemap);
 	dev->devnum = -1;
+	usb_put_dev(dev);
 	return err;
 }
 
@@ -1577,20 +1517,40 @@
  */
 static int __init usb_init(void)
 {
+	int retval;
 	if (nousb) {
 		pr_info ("%s: USB support disabled\n", usbcore_name);
 		return 0;
 	}
 
-	bus_register(&usb_bus_type);
+	retval = bus_register(&usb_bus_type);
+	if (retval) 
+		goto out;
 	usb_host_init();
-	usb_major_init();
-	usbfs_init();
-	usb_hub_init();
-
-	driver_register(&usb_generic_driver);
-
-	return 0;
+	retval = usb_major_init();
+	if (retval)
+		goto major_init_failed;
+	retval = usbfs_init();
+	if (retval)
+		goto fs_init_failed;
+	retval = usb_hub_init();
+	if (retval)
+		goto hub_init_failed;
+
+	retval = driver_register(&usb_generic_driver);
+	if (!retval)
+		goto out;
+
+	usb_hub_cleanup();
+hub_init_failed:
+	usbfs_cleanup();
+fs_init_failed:
+	usb_major_cleanup();	
+major_init_failed:
+	usb_host_cleanup();
+	bus_unregister(&usb_bus_type);
+out:
+	return retval;
 }
 
 /*
diff -Nru a/drivers/usb/gadget/dummy_hcd.c b/drivers/usb/gadget/dummy_hcd.c
--- a/drivers/usb/gadget/dummy_hcd.c	Sun May 16 01:18:33 2004
+++ b/drivers/usb/gadget/dummy_hcd.c	Sun May 16 01:18:33 2004
@@ -144,6 +144,7 @@
 	struct usb_gadget_driver	*driver;
 	struct dummy_request		fifo_req;
 	u8				fifo_buf [FIFO_SIZE];
+	u16				devstatus;
 
 	struct hcd_dev			*hdev;
 
@@ -156,6 +157,8 @@
 	u32				port_status;
 	int				started;
 	struct completion		released;
+	unsigned			resuming:1;
+	unsigned long			re_timeout;
 };
 
 static struct dummy	*the_controller;
@@ -556,8 +559,37 @@
 	return tv.tv_usec / 1000;
 }
 
+static int dummy_wakeup (struct usb_gadget *_gadget)
+{
+	struct dummy	*dum;
+
+	dum = container_of (_gadget, struct dummy, gadget);
+	if ((dum->devstatus & (1 << USB_DEVICE_REMOTE_WAKEUP)) == 0
+			|| !(dum->port_status & (1 << USB_PORT_FEAT_SUSPEND)))
+		return -EINVAL;
+
+	/* hub notices our request, issues downstream resume, etc */
+	dum->resuming = 1;
+	dum->port_status |= (1 << USB_PORT_FEAT_C_SUSPEND);
+	return 0;
+}
+
+static int dummy_set_selfpowered (struct usb_gadget *_gadget, int value)
+{
+	struct dummy	*dum;
+
+	dum = container_of (_gadget, struct dummy, gadget);
+	if (value)
+		dum->devstatus |= (1 << USB_DEVICE_SELF_POWERED);
+	else
+		dum->devstatus &= ~(1 << USB_DEVICE_SELF_POWERED);
+	return 0;
+}
+
 static const struct usb_gadget_ops dummy_ops = {
 	.get_frame	= dummy_g_get_frame,
+	.wakeup		= dummy_wakeup,
+	.set_selfpowered = dummy_set_selfpowered,
 };
 
 /*-------------------------------------------------------------------------*/
@@ -653,6 +685,9 @@
 	dum->gadget.ops = &dummy_ops;
 	dum->gadget.is_dualspeed = 1;
 
+	dum->devstatus = 0;
+	dum->resuming = 0;
+
 	INIT_LIST_HEAD (&dum->gadget.ep_list);
 	for (i = 0; i < DUMMY_ENDPOINTS; i++) {
 		struct dummy_ep	*ep = &dum->ep [i];
@@ -1130,8 +1165,19 @@
 				break;
 			case USB_REQ_SET_FEATURE:
 				if (setup.bRequestType == Dev_Request) {
-					// remote wakeup, and (hs) test mode
-					value = -EOPNOTSUPP;
+					value = 0;
+					switch (setup.wValue) {
+					case USB_DEVICE_REMOTE_WAKEUP:
+						break;
+					default:
+						value = -EOPNOTSUPP;
+					}
+					if (value == 0) {
+						dum->devstatus |=
+							(1 << setup.wValue);
+						maybe_set_status (urb, 0);
+					}
+
 				} else if (setup.bRequestType == Ep_Request) {
 					// endpoint halt
 					ep2 = find_endpoint (dum,
@@ -1147,9 +1193,17 @@
 				break;
 			case USB_REQ_CLEAR_FEATURE:
 				if (setup.bRequestType == Dev_Request) {
-					// remote wakeup
-					value = 0;
-					maybe_set_status (urb, 0);
+					switch (setup.wValue) {
+					case USB_DEVICE_REMOTE_WAKEUP:
+						dum->devstatus &= ~(1 <<
+							USB_DEVICE_REMOTE_WAKEUP);
+						value = 0;
+						maybe_set_status (urb, 0);
+						break;
+					default:
+						value = -EOPNOTSUPP;
+						break;
+					}
 				} else if (setup.bRequestType == Ep_Request) {
 					// endpoint halt
 					ep2 = find_endpoint (dum,
@@ -1185,6 +1239,10 @@
 		break;
 	}
 	buf [0] = ep2->halted;
+						} else if (setup.bRequestType ==
+								Dev_InRequest) {
+							buf [0] = (u8)
+								dum->devstatus;
 						} else
 							buf [0] = 0;
 					}
@@ -1338,8 +1396,21 @@
 	case ClearHubFeature:
 		break;
 	case ClearPortFeature:
-		// FIXME won't some of these need special handling?
-		dum->port_status &= ~(1 << wValue);
+		switch (wValue) {
+		case USB_PORT_FEAT_SUSPEND:
+			/* 20msec resume signaling */
+			dum->resuming = 1;
+			dum->re_timeout = jiffies + ((HZ * 20)/1000);
+			break;
+		case USB_PORT_FEAT_POWER:
+			dum->port_status = 0;
+			dum->address = 0;
+			dum->hdev = 0;
+			dum->resuming = 0;
+			break;
+		default:
+			dum->port_status &= ~(1 << wValue);
+		}
 		break;
 	case GetHubDescriptor:
 		hub_descriptor ((struct usb_hub_descriptor *) buf);
@@ -1350,33 +1421,28 @@
 	case GetPortStatus:
 		if (wIndex != 1)
 			retval = -EPIPE;
-		((u16 *) buf)[0] = cpu_to_le16 (dum->port_status);
-		((u16 *) buf)[1] = cpu_to_le16 (dum->port_status >> 16);
-		break;
-	case SetHubFeature:
-		retval = -EPIPE;
-		break;
-	case SetPortFeature:
-		if (wValue == USB_PORT_FEAT_RESET) {
-			/* if it's already running, disconnect first */
-			if (dum->port_status & USB_PORT_STAT_ENABLE) {
-				dum->port_status &= ~(USB_PORT_STAT_ENABLE
-						| USB_PORT_STAT_LOW_SPEED
-						| USB_PORT_STAT_HIGH_SPEED);
-				if (dum->driver) {
-					dev_dbg (hardware, "disconnect\n");
-					stop_activity (dum, dum->driver);
-				}
 
-				/* FIXME test that code path! */
-			} else
-				dum->port_status |=
-					(1 << USB_PORT_FEAT_C_ENABLE);
-
-			dum->port_status |= USB_PORT_STAT_ENABLE |
-				  (1 << USB_PORT_FEAT_C_RESET);
+		/* whoever resets or resumes must GetPortStatus to
+		 * complete it!!
+		 */
+		if (dum->resuming && time_after (jiffies, dum->re_timeout)) {
+			dum->port_status |= (1 << USB_PORT_FEAT_C_SUSPEND);
+			dum->port_status &= ~(1 << USB_PORT_FEAT_SUSPEND);
+			dum->resuming = 0;
+			dum->re_timeout = 0;
+			if (dum->driver->resume) {
+				spin_unlock (&dum->lock);
+				dum->driver->resume (&dum->gadget);
+				spin_lock (&dum->lock);
+			}
+		}
+		if ((dum->port_status & (1 << USB_PORT_FEAT_RESET)) != 0
+				&& time_after (jiffies, dum->re_timeout)) {
+			dum->port_status |= (1 << USB_PORT_FEAT_C_RESET);
+			dum->port_status &= ~(1 << USB_PORT_FEAT_RESET);
+			dum->re_timeout = 0;
 			if (dum->driver) {
-
+				dum->port_status |= USB_PORT_STAT_ENABLE;
 				/* give it the best speed we agree on */
 				dum->gadget.speed = dum->driver->speed;
 				dum->gadget.ep0->maxpacket = 64;
@@ -1395,8 +1461,42 @@
 					break;
 				}
 			}
-		} else
+		}
+		((u16 *) buf)[0] = cpu_to_le16 (dum->port_status);
+		((u16 *) buf)[1] = cpu_to_le16 (dum->port_status >> 16);
+		break;
+	case SetHubFeature:
+		retval = -EPIPE;
+		break;
+	case SetPortFeature:
+		switch (wValue) {
+		case USB_PORT_FEAT_SUSPEND:
+			dum->port_status |= (1 << USB_PORT_FEAT_SUSPEND);
+			if (dum->driver->suspend) {
+				spin_unlock (&dum->lock);
+				dum->driver->suspend (&dum->gadget);
+				spin_lock (&dum->lock);
+			}
+			break;
+		case USB_PORT_FEAT_RESET:
+			/* if it's already running, disconnect first */
+			if (dum->port_status & USB_PORT_STAT_ENABLE) {
+				dum->port_status &= ~(USB_PORT_STAT_ENABLE
+						| USB_PORT_STAT_LOW_SPEED
+						| USB_PORT_STAT_HIGH_SPEED);
+				if (dum->driver) {
+					dev_dbg (hardware, "disconnect\n");
+					stop_activity (dum, dum->driver);
+				}
+
+				/* FIXME test that code path! */
+			}
+			/* 50msec reset signaling */
+			dum->re_timeout = jiffies + ((HZ * 50)/1000);
+			/* FALLTHROUGH */
+		default:
 			dum->port_status |= (1 << wValue);
+		}
 		break;
 
 	default:
diff -Nru a/drivers/usb/gadget/file_storage.c b/drivers/usb/gadget/file_storage.c
--- a/drivers/usb/gadget/file_storage.c	Sun May 16 01:18:36 2004
+++ b/drivers/usb/gadget/file_storage.c	Sun May 16 01:18:36 2004
@@ -2054,7 +2054,7 @@
 	buf[0] = 0x80 | 0x70;			// Valid, current error
 	buf[2] = SK(sd);
 	put_be32(&buf[3], sdinfo);		// Sense information
-	buf[7] = 18 - 7;			// Additional sense length
+	buf[7] = 18 - 8;			// Additional sense length
 	buf[12] = ASC(sd);
 	buf[13] = ASCQ(sd);
 	return 18;
diff -Nru a/drivers/usb/gadget/gadget_chips.h b/drivers/usb/gadget/gadget_chips.h
--- a/drivers/usb/gadget/gadget_chips.h	Sun May 16 01:18:33 2004
+++ b/drivers/usb/gadget/gadget_chips.h	Sun May 16 01:18:33 2004
@@ -20,7 +20,7 @@
 #define	gadget_is_dummy(g)	0
 #endif
 
-#ifdef CONFIG_USB_GADGET_PXA
+#ifdef CONFIG_USB_GADGET_PXA2XX
 #define	gadget_is_pxa(g)	!strcmp("pxa2xx_udc", (g)->name)
 #else
 #define	gadget_is_pxa(g)	0
diff -Nru a/drivers/usb/gadget/serial.c b/drivers/usb/gadget/serial.c
--- a/drivers/usb/gadget/serial.c	Sun May 16 01:18:36 2004
+++ b/drivers/usb/gadget/serial.c	Sun May 16 01:18:36 2004
@@ -157,8 +157,12 @@
 
 /* debug macro */
 #if G_SERIAL_DEBUG
-
 static int debug = G_SERIAL_DEBUG;
+#else
+static int debug = 0;
+#endif
+
+#if G_SERIAL_DEBUG
 
 #define gs_debug(format, arg...) \
 	do { if (debug) printk(KERN_DEBUG format, ## arg); } while(0)
diff -Nru a/drivers/usb/gadget/zero.c b/drivers/usb/gadget/zero.c
--- a/drivers/usb/gadget/zero.c	Sun May 16 01:18:34 2004
+++ b/drivers/usb/gadget/zero.c	Sun May 16 01:18:34 2004
@@ -130,6 +130,9 @@
 	 */
 	u8			config;
 	struct usb_ep		*in_ep, *out_ep;
+
+	/* autoresume timer */
+	struct timer_list	resume;
 };
 
 #define xprintk(d,level,fmt,args...) \
@@ -167,6 +170,12 @@
 module_param (qlen, uint, S_IRUGO|S_IWUSR);
 module_param (pattern, uint, S_IRUGO|S_IWUSR);
 
+/*
+ * if it's nonzero, autoresume says how many seconds to wait
+ * before trying to wake up the host after suspend.
+ */
+static unsigned autoresume = 0;
+module_param (autoresume, uint, 0);
 
 /*
  * Normally the "loopback" configuration is second (index 1) so
@@ -224,7 +233,7 @@
 	.bNumConfigurations =	2,
 };
 
-static const struct usb_config_descriptor
+static struct usb_config_descriptor
 source_sink_config = {
 	.bLength =		sizeof source_sink_config,
 	.bDescriptorType =	USB_DT_CONFIG,
@@ -237,7 +246,7 @@
 	.bMaxPower =		1,	/* self-powered */
 };
 
-static const struct usb_config_descriptor
+static struct usb_config_descriptor
 loopback_config = {
 	.bLength =		sizeof loopback_config,
 	.bDescriptorType =	USB_DT_CONFIG,
@@ -1060,6 +1069,19 @@
 	 */
 }
 
+static void
+zero_autoresume (unsigned long _dev)
+{
+	struct zero_dev	*dev = (struct zero_dev *) _dev;
+	int		status;
+
+	/* normally the host would be woken up for something
+	 * more significant than just a timer firing...
+	 */
+	status = usb_gadget_wakeup (dev->gadget);
+	DBG (dev, "wakeup --> %d\n", status);
+}
+
 /*-------------------------------------------------------------------------*/
 
 static void
@@ -1072,6 +1094,7 @@
 	/* we've already been disconnected ... no i/o is active */
 	if (dev->req)
 		free_ep_req (gadget->ep0, dev->req);
+	del_timer_sync (&dev->resume);
 	kfree (dev);
 	set_gadget_data (gadget, 0);
 }
@@ -1176,6 +1199,14 @@
 
 	usb_gadget_set_selfpowered (gadget);
 
+	init_timer (&dev->resume);
+	dev->resume.function = zero_autoresume;
+	dev->resume.data = (unsigned long) dev;
+	if (autoresume) {
+		source_sink_config.bmAttributes |= USB_CONFIG_ATT_WAKEUP;
+		loopback_config.bmAttributes |= USB_CONFIG_ATT_WAKEUP;
+	}
+
 	gadget->ep0->driver_data = dev;
 
 	INFO (dev, "%s, version: " DRIVER_VERSION "\n", longname);
@@ -1195,6 +1226,33 @@
 
 /*-------------------------------------------------------------------------*/
 
+static void
+zero_suspend (struct usb_gadget *gadget)
+{
+	struct zero_dev		*dev = get_gadget_data (gadget);
+
+	if (gadget->speed == USB_SPEED_UNKNOWN)
+		return;
+
+	if (autoresume) {
+		mod_timer (&dev->resume, jiffies + (HZ * autoresume));
+		DBG (dev, "suspend, wakeup in %d seconds\n", autoresume);
+	} else
+		DBG (dev, "suspend\n");
+}
+
+static void
+zero_resume (struct usb_gadget *gadget)
+{
+	struct zero_dev		*dev = get_gadget_data (gadget);
+
+	DBG (dev, "resume\n");
+	del_timer (&dev->resume);
+}
+
+
+/*-------------------------------------------------------------------------*/
+
 static struct usb_gadget_driver zero_driver = {
 #ifdef CONFIG_USB_GADGET_DUALSPEED
 	.speed		= USB_SPEED_HIGH,
@@ -1207,6 +1265,9 @@
 
 	.setup		= zero_setup,
 	.disconnect	= zero_disconnect,
+
+	.suspend	= zero_suspend,
+	.resume		= zero_resume,
 
 	.driver 	= {
 		.name		= (char *) shortname,
diff -Nru a/drivers/usb/host/ehci-dbg.c b/drivers/usb/host/ehci-dbg.c
--- a/drivers/usb/host/ehci-dbg.c	Sun May 16 01:18:36 2004
+++ b/drivers/usb/host/ehci-dbg.c	Sun May 16 01:18:36 2004
@@ -170,6 +170,20 @@
 		itd->index[6], itd->index[7]);
 }
 
+static void __attribute__((__unused__))
+dbg_sitd (const char *label, struct ehci_hcd *ehci, struct ehci_sitd *sitd) 
+{
+	ehci_dbg (ehci, "%s [%d] sitd %p, next %08x, urb %p\n",
+		label, sitd->frame, sitd, le32_to_cpu(sitd->hw_next), sitd->urb);
+	ehci_dbg (ehci,
+		"  addr %08x sched %04x result %08x buf %08x %08x\n", 
+		le32_to_cpu(sitd->hw_fullspeed_ep),
+		le32_to_cpu(sitd->hw_uframe),
+		le32_to_cpu(sitd->hw_results),
+		le32_to_cpu(sitd->hw_buf [0]),
+		le32_to_cpu(sitd->hw_buf [1]));
+}
+
 static int __attribute__((__unused__))
 dbg_status_buf (char *buf, unsigned len, char *label, u32 status)
 {
@@ -625,11 +639,20 @@
 
 	spin_lock_irqsave (&ehci->lock, flags);
 
+	if (bus->controller->power.power_state) {
+		size = scnprintf (next, size,
+			"bus %s, device %s (driver " DRIVER_VERSION ")\n"
+			"SUSPENDED (no register access)\n",
+			hcd->self.controller->bus->name,
+			hcd->self.controller->bus_id);
+		goto done;
+	}
+
 	/* Capability Registers */
 	i = HC_VERSION(readl (&ehci->caps->hc_capbase));
 	temp = scnprintf (next, size,
-		"bus %s device %s\n"
-		"EHCI %x.%02x, hcd state %d (driver " DRIVER_VERSION ")\n",
+		"bus %s, device %s (driver " DRIVER_VERSION ")\n"
+		"EHCI %x.%02x, hcd state %d\n",
 		hcd->self.controller->bus->name,
 		hcd->self.controller->bus_id,
 		i >> 8, i & 0x0ff, ehci->hcd.state);
@@ -672,7 +695,7 @@
 	next += temp;
 
 	for (i = 0; i < HCS_N_PORTS (ehci->hcs_params); i++) {
-		temp = dbg_port_buf (scratch, sizeof scratch, label, i,
+		temp = dbg_port_buf (scratch, sizeof scratch, label, i + 1,
 				readl (&ehci->regs->port_status [i]));
 		temp = scnprintf (next, size, fmt, temp, scratch);
 		size -= temp;
@@ -701,6 +724,7 @@
 	next += temp;
 #endif
 
+done:
 	spin_unlock_irqrestore (&ehci->lock, flags);
 
 	return PAGE_SIZE - size;
diff -Nru a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
--- a/drivers/usb/host/ehci-hcd.c	Sun May 16 01:18:35 2004
+++ b/drivers/usb/host/ehci-hcd.c	Sun May 16 01:18:35 2004
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000-2002 by David Brownell
+ * Copyright (c) 2000-2004 by David Brownell
  * 
  * This program is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the
@@ -69,6 +69,7 @@
  *
  * HISTORY:
  *
+ * 2004-05-10 Root hub and PCI suspend/resume support; remote wakeup. (db)
  * 2004-02-24 Replace pci_* with generic dma_* API calls (dsaxena@plexity.net)
  * 2003-12-29 Rewritten high speed iso transfer support (by Michal Sojka,
  *	<sojkam@centrum.cz>, updates by DB).
@@ -96,7 +97,7 @@
  * 2001-June	Works with usb-storage and NEC EHCI on 2.4
  */
 
-#define DRIVER_VERSION "2003-Dec-29"
+#define DRIVER_VERSION "2004-May-10"
 #define DRIVER_AUTHOR "David Brownell"
 #define DRIVER_DESC "USB 2.0 'Enhanced' Host Controller (EHCI) Driver"
 
@@ -128,7 +129,7 @@
 module_param (log2_irq_thresh, int, S_IRUGO);
 MODULE_PARM_DESC (log2_irq_thresh, "log2 IRQ latency, 1-64 microframes");
 
-#define	INTR_MASK (STS_IAA | STS_FATAL | STS_ERR | STS_INT)
+#define	INTR_MASK (STS_IAA | STS_FATAL | STS_PCD | STS_ERR | STS_INT)
 
 /*-------------------------------------------------------------------------*/
 
@@ -201,6 +202,7 @@
 	dbg_cmd (ehci, "reset", command);
 	writel (command, &ehci->regs->command);
 	ehci->hcd.state = USB_STATE_HALT;
+	ehci->next_statechange = jiffies;
 	return handshake (&ehci->regs->command, CMD_RESET, 0, 250 * 1000);
 }
 
@@ -241,6 +243,8 @@
 
 /*-------------------------------------------------------------------------*/
 
+static void ehci_work(struct ehci_hcd *ehci, struct pt_regs *regs);
+
 #include "ehci-hub.c"
 #include "ehci-mem.c"
 #include "ehci-q.c"
@@ -248,8 +252,6 @@
 
 /*-------------------------------------------------------------------------*/
 
-static void ehci_work(struct ehci_hcd *ehci, struct pt_regs *regs);
-
 static void ehci_watchdog (unsigned long param)
 {
 	struct ehci_hcd		*ehci = (struct ehci_hcd *) param;
@@ -428,12 +430,17 @@
 #ifdef	CONFIG_PCI
 	if (hcd->self.controller->bus == &pci_bus_type) {
 		struct pci_dev		*pdev;
+		u16			port_wake;
 
 		pdev = to_pci_dev(hcd->self.controller);
 
 		/* Serial Bus Release Number is at PCI 0x60 offset */
 		pci_read_config_byte(pdev, 0x60, &sbrn);
 
+		/* port wake capability, reported by boot firmware */
+		pci_read_config_word(pdev, 0x62, &port_wake);
+		hcd->can_wakeup = (port_wake & 1) != 0;
+
 		/* help hc dma work well with cachelines */
 		pci_set_mwi (pdev);
 
@@ -615,41 +622,26 @@
 
 /* suspend/resume, section 4.3 */
 
+/* These routines rely on PCI to handle powerdown and wakeup, and
+ * transceivers that don't need any software attention to set up
+ * the right sort of wakeup.  
+ */
+
 static int ehci_suspend (struct usb_hcd *hcd, u32 state)
 {
 	struct ehci_hcd		*ehci = hcd_to_ehci (hcd);
-	int			ports;
-	int			i;
-
-	ehci_dbg (ehci, "suspend to %d\n", state);
 
-	ports = HCS_N_PORTS (ehci->hcs_params);
+	while (time_before (jiffies, ehci->next_statechange))
+		msec_delay (100);
 
-	// FIXME:  This assumes what's probably a D3 level suspend...
-
-	// FIXME:  usb wakeup events on this bus should resume the machine.
-	// pci config register PORTWAKECAP controls which ports can do it;
-	// bios may have initted the register...
-
-	/* suspend each port, then stop the hc */
-	for (i = 0; i < ports; i++) {
-		int	temp = readl (&ehci->regs->port_status [i]);
-
-		if ((temp & PORT_PE) == 0
-				|| (temp & PORT_OWNER) != 0)
-			continue;
-		ehci_dbg (ehci, "suspend port %d", i);
-		temp |= PORT_SUSPEND;
-		writel (temp, &ehci->regs->port_status [i]);
-	}
-
-	if (hcd->state == USB_STATE_RUNNING)
-		ehci_ready (ehci);
-	writel (readl (&ehci->regs->command) & ~CMD_RUN, &ehci->regs->command);
-
-// save pci FLADJ value
+#ifdef	CONFIG_USB_SUSPEND
+	(void) usb_suspend_device (hcd->self.root_hub);
+#else
+	/* FIXME lock root hub */
+	(void) ehci_hub_suspend (hcd);
+#endif
 
-	/* who tells PCI to reduce power consumption? */
+	// save (PCI) FLADJ in case of Vaux power loss
 
 	return 0;
 }
@@ -657,40 +649,22 @@
 static int ehci_resume (struct usb_hcd *hcd)
 {
 	struct ehci_hcd		*ehci = hcd_to_ehci (hcd);
-	int			ports;
-	int			i;
+	int			retval;
 
-	ehci_dbg (ehci, "resume\n");
+	// maybe restore (PCI) FLADJ
 
-	ports = HCS_N_PORTS (ehci->hcs_params);
+	while (time_before (jiffies, ehci->next_statechange))
+		msec_delay (100);
 
-	// FIXME:  if controller didn't retain state,
-	// return and let generic code clean it up
-	// test configured_flag ?
-
-	/* resume HC and each port */
-// restore pci FLADJ value
-	// khubd and drivers will set HC running, if needed;
-	hcd->state = USB_STATE_RUNNING;
-	// FIXME Philips/Intel/... etc don't really have a "READY"
-	// state ... turn on CMD_RUN too
-	for (i = 0; i < ports; i++) {
-		int	temp = readl (&ehci->regs->port_status [i]);
-
-		if ((temp & PORT_PE) == 0
-				|| (temp & PORT_SUSPEND) != 0)
-			continue;
-		ehci_dbg (ehci, "resume port %d", i);
-		temp |= PORT_RESUME;
-		writel (temp, &ehci->regs->port_status [i]);
-		readl (&ehci->regs->command);	/* unblock posted writes */
-
-		wait_ms (20);
-		temp &= ~PORT_RESUME;
-		writel (temp, &ehci->regs->port_status [i]);
-	}
-	readl (&ehci->regs->command);	/* unblock posted writes */
-	return 0;
+#ifdef	CONFIG_USB_SUSPEND
+	retval = usb_resume_device (hcd->self.root_hub);
+#else
+	/* FIXME lock root hub */
+	retval = ehci_hub_resume (hcd);
+#endif
+	if (retval == 0)
+		hcd->self.controller->power.power_state = 0;
+	return retval;
 }
 
 #endif
@@ -752,7 +726,7 @@
 	bh = 0;
 
 #ifdef	EHCI_VERBOSE_DEBUG
-	/* unrequested/ignored: Port Change Detect, Frame List Rollover */
+	/* unrequested/ignored: Frame List Rollover */
 	dbg_status (ehci, "irq", status);
 #endif
 
@@ -774,6 +748,34 @@
 		bh = 1;
 	}
 
+	/* remote wakeup [4.3.1] */
+	if ((status & STS_PCD) && ehci->hcd.remote_wakeup) {
+		unsigned	i = HCS_N_PORTS (ehci->hcs_params);
+
+		/* resume root hub? */
+		status = readl (&ehci->regs->command);
+		if (!(status & CMD_RUN))
+			writel (status | CMD_RUN, &ehci->regs->command);
+
+		while (i--) {
+			status = readl (&ehci->regs->port_status [i]);
+			if (status & PORT_OWNER)
+				continue;
+			if (!(status & PORT_RESUME)
+					|| ehci->reset_done [i] != 0)
+				continue;
+
+			/* start 20 msec resume signaling from this port,
+			 * and make khubd collect PORT_STAT_C_SUSPEND to
+			 * stop that signaling.
+			 */
+			ehci->reset_done [i] = jiffies + MSEC_TO_JIFFIES (20);
+			mod_timer (&ehci->hcd.rh_timer,
+					ehci->reset_done [i] + 1);
+			ehci_dbg (ehci, "port %d remote wakeup\n", i + 1);
+		}
+	}
+
 	/* PCI errors [4.15.2.4] */
 	if (unlikely ((status & STS_FATAL) != 0)) {
 		ehci_err (ehci, "fatal error\n");
@@ -814,7 +816,6 @@
 	struct ehci_hcd		*ehci = hcd_to_ehci (hcd);
 	struct list_head	qtd_list;
 
-	urb->transfer_flags &= ~EHCI_STATE_UNLINK;
 	INIT_LIST_HEAD (&qtd_list);
 
 	switch (usb_pipetype (urb->pipe)) {
@@ -914,7 +915,6 @@
 
 		// wait till next completion, do it then.
 		// completion irqs can wait up to 1024 msec,
-		urb->transfer_flags |= EHCI_STATE_UNLINK;
 		break;
 	}
 	spin_unlock_irqrestore (&ehci->lock, flags);
@@ -965,7 +965,7 @@
 		goto rescan;
 	case QH_STATE_IDLE:		/* fully unlinked */
 		if (list_empty (&qh->qtd_list)) {
-			qh_put (ehci, qh);
+			qh_put (qh);
 			break;
 		}
 		/* else FALL THROUGH */
diff -Nru a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c
--- a/drivers/usb/host/ehci-hub.c	Sun May 16 01:18:36 2004
+++ b/drivers/usb/host/ehci-hub.c	Sun May 16 01:18:36 2004
@@ -28,6 +28,131 @@
 
 /*-------------------------------------------------------------------------*/
 
+#ifdef	CONFIG_PM
+
+static int ehci_hub_suspend (struct usb_hcd *hcd)
+{
+	struct ehci_hcd		*ehci = hcd_to_ehci (hcd);
+	struct usb_device	*root = hcd_to_bus (&ehci->hcd)->root_hub;
+	int			port;
+	int			status = 0;
+
+	if (root->dev.power.power_state != 0)
+		return 0;
+	if (time_before (jiffies, ehci->next_statechange))
+		return -EAGAIN;
+
+	port = HCS_N_PORTS (ehci->hcs_params);
+	spin_lock_irq (&ehci->lock);
+
+	/* suspend any active/unsuspended ports, maybe allow wakeup */
+	while (port--) {
+		u32	t1 = readl (&ehci->regs->port_status [port]);
+		u32	t2 = t1;
+
+		if ((t1 & PORT_PE) && !(t1 & PORT_OWNER))
+			t2 |= PORT_SUSPEND;
+		if (ehci->hcd.remote_wakeup)
+			t2 |= PORT_WKOC_E|PORT_WKDISC_E|PORT_WKCONN_E;
+		else
+			t2 &= ~(PORT_WKOC_E|PORT_WKDISC_E|PORT_WKCONN_E);
+
+		if (t1 != t2) {
+			ehci_vdbg (ehci, "port %d, %08x -> %08x\n",
+				port + 1, t1, t2);
+			writel (t2, &ehci->regs->port_status [port]);
+		}
+	}
+
+	/* stop schedules, then turn off HC and clean any completed work */
+	if (hcd->state == USB_STATE_RUNNING)
+		ehci_ready (ehci);
+	ehci->command = readl (&ehci->regs->command);
+	writel (ehci->command & ~CMD_RUN, &ehci->regs->command);
+	if (ehci->reclaim)
+		ehci->reclaim_ready = 1;
+	ehci_work (ehci, 0);
+	(void) handshake (&ehci->regs->status, STS_HALT, STS_HALT, 2000);
+
+	root->dev.power.power_state = 3;
+	ehci->next_statechange = jiffies + MSEC_TO_JIFFIES(10);
+	spin_unlock_irq (&ehci->lock);
+	return status;
+}
+
+
+/* caller owns root->serialize, and should reset/reinit on error */
+static int ehci_hub_resume (struct usb_hcd *hcd)
+{
+	struct ehci_hcd		*ehci = hcd_to_ehci (hcd);
+	struct usb_device	*root = hcd_to_bus (&ehci->hcd)->root_hub;
+	u32			temp;
+	int			i;
+
+	if (!root->dev.power.power_state)
+		return 0;
+	if (time_before (jiffies, ehci->next_statechange))
+		return -EAGAIN;
+
+	/* re-init operational registers in case we lost power */
+	if (readl (&ehci->regs->intr_enable) == 0) {
+		writel (INTR_MASK, &ehci->regs->intr_enable);
+		writel (0, &ehci->regs->segment);
+		writel (ehci->periodic_dma, &ehci->regs->frame_list);
+		writel ((u32)ehci->async->qh_dma, &ehci->regs->async_next);
+		/* FIXME will this work even (pci) vAUX was lost? */
+	}
+
+	/* restore CMD_RUN, framelist size, and irq threshold */
+	writel (ehci->command, &ehci->regs->command);
+
+	/* take ports out of suspend */
+	i = HCS_N_PORTS (ehci->hcs_params);
+	while (i--) {
+		temp = readl (&ehci->regs->port_status [i]);
+		temp &= ~(PORT_WKOC_E|PORT_WKDISC_E|PORT_WKCONN_E);
+		if (temp & PORT_SUSPEND) {
+			ehci->reset_done [i] = jiffies + MSEC_TO_JIFFIES (20);
+			temp |= PORT_RESUME;
+		}
+		writel (temp, &ehci->regs->port_status [i]);
+	}
+	i = HCS_N_PORTS (ehci->hcs_params);
+	wait_ms (20);
+	while (i--) {
+		temp = readl (&ehci->regs->port_status [i]);
+		if ((temp & PORT_SUSPEND) == 0)
+			continue;
+		temp &= ~PORT_RESUME;
+		writel (temp, &ehci->regs->port_status [i]);
+		ehci_vdbg (ehci, "resumed port %d\n", i + 1);
+	}
+	(void) readl (&ehci->regs->command);
+
+	/* maybe re-activate the schedule(s) */
+	temp = 0;
+	if (ehci->async->qh_next.qh)
+		temp |= CMD_ASE;
+	if (ehci->periodic_sched)
+		temp |= CMD_PSE;
+	if (temp)
+		writel (ehci->command | temp, &ehci->regs->command);
+
+	root->dev.power.power_state = 0;
+	ehci->next_statechange = jiffies + MSEC_TO_JIFFIES(5);
+	ehci->hcd.state = USB_STATE_RUNNING;
+	return 0;
+}
+
+#else
+
+#define ehci_hub_suspend	0
+#define ehci_hub_resume		0
+
+#endif	/* CONFIG_PM */
+
+/*-------------------------------------------------------------------------*/
+
 static int check_reset_complete (
 	struct ehci_hcd	*ehci,
 	int		index,
@@ -99,7 +224,11 @@
 		}
 		if (!(temp & PORT_CONNECT))
 			ehci->reset_done [i] = 0;
-		if ((temp & (PORT_CSC | PORT_PEC | PORT_OCC)) != 0) {
+		if ((temp & (PORT_CSC | PORT_PEC | PORT_OCC)) != 0
+				// PORT_STAT_C_SUSPEND?
+				|| ((temp & PORT_RESUME) != 0
+					&& time_after (jiffies,
+						ehci->reset_done [i]))) {
 			if (i < 7)
 			    buf [0] |= 1 << (i + 1);
 			else
@@ -143,6 +272,8 @@
 
 /*-------------------------------------------------------------------------*/
 
+#define	PORT_WAKE_BITS 	(PORT_WKOC_E|PORT_WKDISC_E|PORT_WKCONN_E)
+
 static int ehci_hub_control (
 	struct usb_hcd	*hcd,
 	u16		typeReq,
@@ -194,8 +325,20 @@
 				&ehci->regs->port_status [wIndex]);
 			break;
 		case USB_PORT_FEAT_SUSPEND:
+			if (temp & PORT_RESET)
+				goto error;
+			if (temp & PORT_SUSPEND) {
+				if ((temp & PORT_PE) == 0)
+					goto error;
+				/* resume signaling for 20 msec */
+				writel ((temp & ~PORT_WAKE_BITS) | PORT_RESUME,
+					&ehci->regs->port_status [wIndex]);
+				ehci->reset_done [wIndex] = jiffies
+						+ MSEC_TO_JIFFIES (20);
+			}
+			break;
 		case USB_PORT_FEAT_C_SUSPEND:
-			/* ? */
+			/* we auto-clear this feature */
 			break;
 		case USB_PORT_FEAT_POWER:
 			if (HCS_PPC (ehci->hcs_params))
@@ -239,15 +382,37 @@
 			status |= 1 << USB_PORT_FEAT_C_CONNECTION;
 		if (temp & PORT_PEC)
 			status |= 1 << USB_PORT_FEAT_C_ENABLE;
-		// USB_PORT_FEAT_C_SUSPEND
 		if (temp & PORT_OCC)
 			status |= 1 << USB_PORT_FEAT_C_OVER_CURRENT;
 
+		/* whoever resumes must GetPortStatus to complete it!! */
+		if ((temp & PORT_RESUME)
+				&& time_after (jiffies,
+					ehci->reset_done [wIndex])) {
+			status |= 1 << USB_PORT_FEAT_C_SUSPEND;
+			ehci->reset_done [wIndex] = 0;
+
+			/* stop resume signaling */
+			temp = readl (&ehci->regs->port_status [wIndex]);
+			writel (temp & ~PORT_RESUME,
+				&ehci->regs->port_status [wIndex]);
+			retval = handshake (
+					&ehci->regs->port_status [wIndex],
+					PORT_RESUME, 0, 2000 /* 2msec */);
+			if (retval != 0) {
+				ehci_err (ehci, "port %d resume error %d\n",
+					wIndex + 1, retval);
+				goto error;
+			}
+			temp &= ~(PORT_SUSPEND|PORT_RESUME|(3<<10));
+		}
+
 		/* whoever resets must GetPortStatus to complete it!! */
 		if ((temp & PORT_RESET)
 				&& time_after (jiffies,
 					ehci->reset_done [wIndex])) {
 			status |= 1 << USB_PORT_FEAT_C_RESET;
+			ehci->reset_done [wIndex] = 0;
 
 			/* force reset to complete */
 			writel (temp & ~PORT_RESET,
@@ -275,7 +440,7 @@
 			}
 			if (temp & PORT_PE)
 				status |= 1 << USB_PORT_FEAT_ENABLE;
-			if (temp & PORT_SUSPEND)
+			if (temp & (PORT_SUSPEND|PORT_RESUME))
 				status |= 1 << USB_PORT_FEAT_SUSPEND;
 			if (temp & PORT_OC)
 				status |= 1 << USB_PORT_FEAT_OVER_CURRENT;
@@ -312,6 +477,11 @@
 
 		switch (wValue) {
 		case USB_PORT_FEAT_SUSPEND:
+			if ((temp & PORT_PE) == 0
+					|| (temp & PORT_RESET) != 0)
+				goto error;
+			if (ehci->hcd.remote_wakeup)
+				temp |= PORT_WAKE_BITS;
 			writel (temp | PORT_SUSPEND,
 				&ehci->regs->port_status [wIndex]);
 			break;
@@ -321,6 +491,8 @@
 					&ehci->regs->port_status [wIndex]);
 			break;
 		case USB_PORT_FEAT_RESET:
+			if (temp & PORT_RESUME)
+				goto error;
 			/* line status bits may report this as low speed,
 			 * which can be fine if this root hub has a
 			 * transaction translator built in.
@@ -342,7 +514,7 @@
 				 * usb 2.0 spec says 50 ms resets on root
 				 */
 				ehci->reset_done [wIndex] = jiffies
-				    	+ ((50 /* msec */ * HZ) / 1000);
+						+ MSEC_TO_JIFFIES (50);
 			}
 			writel (temp, &ehci->regs->port_status [wIndex]);
 			break;
diff -Nru a/drivers/usb/host/ehci-mem.c b/drivers/usb/host/ehci-mem.c
--- a/drivers/usb/host/ehci-mem.c	Sun May 16 01:18:36 2004
+++ b/drivers/usb/host/ehci-mem.c	Sun May 16 01:18:36 2004
@@ -87,6 +87,22 @@
 }
 
 
+static void qh_destroy (struct kref *kref)
+{
+	struct ehci_qh *qh = container_of(kref, struct ehci_qh, kref);
+	struct ehci_hcd *ehci = qh->ehci;
+
+	/* clean qtds first, and know this is not linked */
+	if (!list_empty (&qh->qtd_list) || qh->qh_next.ptr) {
+		ehci_dbg (ehci, "unused qh not empty!\n");
+		BUG ();
+	}
+	if (qh->dummy)
+		ehci_qtd_free (ehci, qh->dummy);
+	usb_put_dev (qh->dev);
+	dma_pool_free (ehci->qh_pool, qh, qh->qh_dma);
+}
+
 static struct ehci_qh *ehci_qh_alloc (struct ehci_hcd *ehci, int flags)
 {
 	struct ehci_qh		*qh;
@@ -98,7 +114,8 @@
 		return qh;
 
 	memset (qh, 0, sizeof *qh);
-	atomic_set (&qh->refcount, 1);
+	kref_init(&qh->kref, qh_destroy);
+	qh->ehci = ehci;
 	qh->qh_dma = dma;
 	// INIT_LIST_HEAD (&qh->qh_list);
 	INIT_LIST_HEAD (&qh->qtd_list);
@@ -114,25 +131,15 @@
 }
 
 /* to share a qh (cpu threads, or hc) */
-static inline struct ehci_qh *qh_get (/* ehci, */ struct ehci_qh *qh)
+static inline struct ehci_qh *qh_get (struct ehci_qh *qh)
 {
-	atomic_inc (&qh->refcount);
+	kref_get(&qh->kref);
 	return qh;
 }
 
-static void qh_put (struct ehci_hcd *ehci, struct ehci_qh *qh)
+static inline void qh_put (struct ehci_qh *qh)
 {
-	if (!atomic_dec_and_test (&qh->refcount))
-		return;
-	/* clean qtds first, and know this is not linked */
-	if (!list_empty (&qh->qtd_list) || qh->qh_next.ptr) {
-		ehci_dbg (ehci, "unused qh not empty!\n");
-		BUG ();
-	}
-	if (qh->dummy)
-		ehci_qtd_free (ehci, qh->dummy);
-	usb_put_dev (qh->dev);
-	dma_pool_free (ehci->qh_pool, qh, qh->qh_dma);
+	kref_put(&qh->kref);
 }
 
 /*-------------------------------------------------------------------------*/
@@ -145,7 +152,7 @@
 static void ehci_mem_cleanup (struct ehci_hcd *ehci)
 {
 	if (ehci->async)
-		qh_put (ehci, ehci->async);
+		qh_put (ehci->async);
 	ehci->async = 0;
 
 	/* DMA consistent memory and pools */
diff -Nru a/drivers/usb/host/ehci-q.c b/drivers/usb/host/ehci-q.c
--- a/drivers/usb/host/ehci-q.c	Sun May 16 01:18:36 2004
+++ b/drivers/usb/host/ehci-q.c	Sun May 16 01:18:36 2004
@@ -193,7 +193,7 @@
 			/* ... update hc-wide periodic stats (for usbfs) */
 			hcd_to_bus (&ehci->hcd)->bandwidth_int_reqs--;
 		}
-		qh_put (ehci, qh);
+		qh_put (qh);
 	}
 
 	spin_lock (&urb->lock);
@@ -708,7 +708,7 @@
 	default:
  		dbg ("bogus dev %p speed %d", urb->dev, urb->dev->speed);
 done:
-		qh_put (ehci, qh);
+		qh_put (qh);
 		return 0;
 	}
 
@@ -951,7 +951,7 @@
 	// qh->hw_next = cpu_to_le32 (qh->qh_dma);
 	qh->qh_state = QH_STATE_IDLE;
 	qh->qh_next.qh = 0;
-	qh_put (ehci, qh);			// refcount from reclaim 
+	qh_put (qh);			// refcount from reclaim 
 
 	/* other unlink(s) may be pending (in QH_STATE_UNLINK_WAIT) */
 	next = qh->reclaim;
@@ -965,7 +965,7 @@
 			&& HCD_IS_RUNNING (ehci->hcd.state))
 		qh_link_async (ehci, qh);
 	else {
-		qh_put (ehci, qh);		// refcount from async list
+		qh_put (qh);		// refcount from async list
 
 		/* it's not free to turn the async schedule on/off; leave it
 		 * active but idle for a while once it empties.
@@ -1067,7 +1067,7 @@
 				qh = qh_get (qh);
 				qh->stamp = ehci->stamp;
 				temp = qh_completions (ehci, qh, regs);
-				qh_put (ehci, qh);
+				qh_put (qh);
 				if (temp != 0) {
 					goto rescan;
 				}
diff -Nru a/drivers/usb/host/ehci-sched.c b/drivers/usb/host/ehci-sched.c
--- a/drivers/usb/host/ehci-sched.c	Sun May 16 01:18:34 2004
+++ b/drivers/usb/host/ehci-sched.c	Sun May 16 01:18:34 2004
@@ -312,7 +312,7 @@
 
 	do {
 		periodic_unlink (ehci, frame, qh);
-		qh_put (ehci, qh);
+		qh_put (qh);
 		frame += qh->period;
 	} while (frame < ehci->periodic_size);
 
@@ -355,7 +355,7 @@
 
 	dbg ("descheduled qh %p, period = %d frame = %d count = %d, urbs = %d",
 		qh, qh->period, frame,
-		atomic_read (&qh->refcount), ehci->periodic_sched);
+		atomic_read (&qh->kref.refcount), ehci->periodic_sched);
 }
 
 static int check_period (
@@ -1846,7 +1846,7 @@
 				modified = qh_completions (ehci, temp.qh, regs);
 				if (unlikely (list_empty (&temp.qh->qtd_list)))
 					intr_deschedule (ehci, temp.qh, 0);
-				qh_put (ehci, temp.qh);
+				qh_put (temp.qh);
 				break;
 			case Q_TYPE_FSTN:
 				/* for "save place" FSTNs, look at QH entries
diff -Nru a/drivers/usb/host/ehci.h b/drivers/usb/host/ehci.h
--- a/drivers/usb/host/ehci.h	Sun May 16 01:18:36 2004
+++ b/drivers/usb/host/ehci.h	Sun May 16 01:18:36 2004
@@ -84,6 +84,8 @@
 	struct notifier_block	reboot_notifier;
 	unsigned long		actions;
 	unsigned		stamp;
+	unsigned long		next_statechange;
+	u32			command;
 
 	unsigned		is_arc_rh_tt:1;	/* ARC roothub with TT */
 
@@ -99,8 +101,6 @@
 /* unwrap an HCD pointer to get an EHCI_HCD pointer */ 
 #define hcd_to_ehci(hcd_ptr) container_of(hcd_ptr, struct ehci_hcd, hcd)
 
-/* NOTE:  urb->transfer_flags expected to not use this bit !!! */
-#define EHCI_STATE_UNLINK	0x8000		/* urb being unlinked */
 
 enum ehci_timer_action {
 	TIMER_IO_WATCHDOG,
@@ -221,7 +221,7 @@
 	u32		segment; 	/* address bits 63:32 if needed */
 	/* PERIODICLISTBASE: offset 0x14 */
 	u32		frame_list; 	/* points to periodic list */
-	/* ASYNCICLISTADDR: offset 0x18 */
+	/* ASYNCLISTADDR: offset 0x18 */
 	u32		async_next;	/* address of next async queue head */
 
 	u32		reserved [9];
@@ -237,7 +237,10 @@
 #define PORT_WKDISC_E	(1<<21)		/* wake on disconnect (enable) */
 #define PORT_WKCONN_E	(1<<20)		/* wake on connect (enable) */
 /* 19:16 for port testing */
-/* 15:14 for using port indicator leds (if HCS_INDICATOR allows) */
+#define PORT_LED_OFF	(0<<14)
+#define PORT_LED_AMBER	(1<<14)
+#define PORT_LED_GREEN	(2<<14)
+#define PORT_LED_MASK	(3<<14)
 #define PORT_OWNER	(1<<13)		/* true: companion hc owns this port */
 #define PORT_POWER	(1<<12)		/* true: has power (see PPC) */
 #define PORT_USB11(x) (((x)&(3<<10))==(1<<10))	/* USB 1.1 device */
@@ -366,7 +369,8 @@
 	struct ehci_qtd		*dummy;
 	struct ehci_qh		*reclaim;	/* next to reclaim */
 
-	atomic_t		refcount;
+	struct ehci_hcd		*ehci;
+	struct kref		kref;
 	unsigned		stamp;
 
 	u8			qh_state;
@@ -591,6 +595,14 @@
 #endif
 
 /*-------------------------------------------------------------------------*/
+
+#define	MSEC_TO_JIFFIES(msec) ((HZ * (msec) + 999) / 1000)
+
+static inline void msec_delay(int msec)
+{
+	set_current_state(TASK_UNINTERRUPTIBLE);
+	schedule_timeout(MSEC_TO_JIFFIES(msec));
+}
 
 #ifndef DEBUG
 #define STUB_DEBUG_FILES
diff -Nru a/drivers/usb/host/ohci-dbg.c b/drivers/usb/host/ohci-dbg.c
--- a/drivers/usb/host/ohci-dbg.c	Sun May 16 01:18:36 2004
+++ b/drivers/usb/host/ohci-dbg.c	Sun May 16 01:18:36 2004
@@ -617,7 +617,17 @@
 	/* dump driver info, then registers in spec order */
 
 	ohci_dbg_sw (ohci, &next, &size,
-		"%s version " DRIVER_VERSION "\n", hcd_name);
+		"bus %s, device %s\n"
+		"%s version " DRIVER_VERSION "\n",
+		hcd->self.controller->bus->name,
+		hcd->self.controller->bus_id,
+		hcd_name);
+
+	if (bus->controller->power.power_state) {
+		size -= scnprintf (next, size,
+			"SUSPENDED (no register access)\n");
+		goto done;
+	}
 
 	ohci_dump_status(ohci, &next, &size);
 
@@ -657,8 +667,8 @@
 	/* roothub */
 	ohci_dump_roothub (ohci, 1, &next, &size);
 
+done:
 	spin_unlock_irqrestore (&ohci->lock, flags);
-
 	return PAGE_SIZE - size;
 }
 static CLASS_DEVICE_ATTR (registers, S_IRUGO, show_registers, NULL);
diff -Nru a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c
--- a/drivers/usb/host/ohci-hcd.c	Sun May 16 01:18:33 2004
+++ b/drivers/usb/host/ohci-hcd.c	Sun May 16 01:18:33 2004
@@ -117,8 +117,8 @@
 
 /* For initializing controller (mask in an HCFS mode too) */
 #define	OHCI_CONTROL_INIT 	OHCI_CTRL_CBSR
-
-#define OHCI_UNLINK_TIMEOUT	 (HZ / 10)
+#define	OHCI_INTR_INIT \
+	(OHCI_INTR_MIE | OHCI_INTR_UE | OHCI_INTR_RD | OHCI_INTR_WDH)
 
 /*-------------------------------------------------------------------------*/
 
@@ -126,11 +126,6 @@
 
 #include "ohci.h"
 
-static inline void disable (struct ohci_hcd *ohci)
-{
-	ohci->hcd.state = USB_STATE_HALT;
-}
-
 #include "ohci-hub.c"
 #include "ohci-dbg.c"
 #include "ohci-mem.c"
@@ -206,8 +201,7 @@
 	if (!urb_priv)
 		return -ENOMEM;
 	memset (urb_priv, 0, sizeof (urb_priv_t) + size * sizeof (struct td *));
-	
-	/* fill the private part of the URB */
+	INIT_LIST_HEAD (&urb_priv->pending);
 	urb_priv->length = size;
 	urb_priv->ed = ed;	
 
@@ -397,6 +391,16 @@
 {
 	u32 temp;
 
+	/* boot firmware should have set this up (5.1.1.3.1) */
+	if (!ohci->fminterval) {
+		temp = readl (&ohci->regs->fminterval);
+		if (temp & 0x3fff0000)
+			ohci->fminterval = temp;
+		else
+			ohci->fminterval = DEFAULT_FMINTERVAL;
+		/* also: power/overcurrent flags in roothub.a */
+	}
+
 	/* SMM owns the HC?  not for long!
 	 * On PA-RISC, PDC can leave IR set incorrectly; ignore it there.
 	 */
@@ -413,7 +417,7 @@
 		writel (OHCI_INTR_OC, &ohci->regs->intrenable);
 		writel (OHCI_OCR, &ohci->regs->cmdstatus);
 		while (readl (&ohci->regs->control) & OHCI_CTRL_IR) {
-			wait_ms (10);
+			msec_delay (10);
 			if (--temp == 0) {
 				ohci_err (ohci, "USB HC TakeOver failed!\n");
 				return -1;
@@ -430,9 +434,12 @@
 
   	/* Reset USB (needed by some controllers); RemoteWakeupConnected
 	 * saved if boot firmware (BIOS/SMM/...) told us it's connected
+	 * (for OHCI integrated on mainboard, it normally is)
 	 */
 	ohci->hc_control = readl (&ohci->regs->control);
 	ohci->hc_control &= OHCI_CTRL_RWC;	/* hcfs 0 = RESET */
+	if (ohci->hc_control)
+		ohci->hcd.can_wakeup = 1;
 	writel (ohci->hc_control, &ohci->regs->control);
 	if (power_switching) {
 		unsigned ports = roothub_a (ohci) & RH_A_NDP; 
@@ -444,7 +451,7 @@
 	}
 	// flush those pci writes
 	(void) readl (&ohci->regs->control);
-	wait_ms (50);
+	msec_delay (50);
 
 	/* HC Reset requires max 10 us delay */
 	writel (OHCI_HCR,  &ohci->regs->cmdstatus);
@@ -473,9 +480,6 @@
 
 /*-------------------------------------------------------------------------*/
 
-#define	FI		0x2edf		/* 12000 bits per frame (-1) */
-#define LSTHRESH	0x628		/* lowspeed bit threshold */
-
 /* Start an OHCI controller, set the BUS operational
  * enable interrupts 
  * connect the virtual root hub
@@ -486,7 +490,6 @@
   	struct usb_device	*udev;
   	struct usb_bus		*bus;
 
-	spin_lock_init (&ohci->lock);
 	disable (ohci);
 
 	/* Tell the controller where the control and bulk lists are
@@ -497,12 +500,7 @@
 	/* a reset clears this */
 	writel ((u32) ohci->hcca_dma, &ohci->regs->hcca);
 
-	/* force default fmInterval (we won't adjust it); init thresholds
-	 * for last FS and LS packets, reserve 90% for periodic.
-	 */
-	writel ((((6 * (FI - 210)) / 7) << 16) | FI, &ohci->regs->fminterval);
-	writel (((9 * FI) / 10) & 0x3fff, &ohci->regs->periodicstart);
-	writel (LSTHRESH, &ohci->regs->lsthresh);
+	periodic_reinit (ohci);
 
 	/* some OHCI implementations are finicky about how they init.
 	 * bogus values here mean not even enumeration could work.
@@ -519,8 +517,11 @@
  	writel (ohci->hc_control, &ohci->regs->control);
 	ohci->hcd.state = USB_STATE_RUNNING;
 
+	/* wake on ConnectStatusChange, matching external hubs */
+	writel (RH_HS_DRWE, &ohci->regs->roothub.status);
+
 	/* Choose the interrupts we care about now, others later on demand */
-	mask = OHCI_INTR_MIE | OHCI_INTR_UE | OHCI_INTR_WDH;
+	mask = OHCI_INTR_INIT;
 	writel (mask, &ohci->regs->intrstatus);
 	writel (mask, &ohci->regs->intrenable);
 
@@ -551,9 +552,14 @@
 
 	// POTPGT delay is bits 24-31, in 2 ms units.
 	mdelay ((roothub_a (ohci) >> 23) & 0x1fe);
+	bus = hcd_to_bus (&ohci->hcd);
+
+	if (bus->root_hub) {
+		ohci->hcd.state = USB_STATE_RUNNING;
+		return 0;
+	}
  
 	/* connect the virtual root hub */
-	bus = hcd_to_bus (&ohci->hcd);
 	bus->root_hub = udev = usb_alloc_dev (NULL, bus, 0);
 	ohci->hcd.state = USB_STATE_RUNNING;
 	if (!udev) {
@@ -610,11 +616,18 @@
 		ohci_dump (ohci, 1);
 		hc_reset (ohci);
 	}
-  
+
+	if (ints & OHCI_INTR_RD) {
+		ohci_vdbg (ohci, "resume detect\n");
+		schedule_work(&ohci->rh_resume);
+	}
+
 	if (ints & OHCI_INTR_WDH) {
 		if (HCD_IS_RUNNING(hcd->state))
 			writel (OHCI_INTR_WDH, &regs->intrdisable);	
-		dl_done_list (ohci, dl_reverse_done_list (ohci), ptregs);
+		spin_lock (&ohci->lock);
+		dl_done_list (ohci, ptregs);
+		spin_unlock (&ohci->lock);
 		if (HCD_IS_RUNNING(hcd->state))
 			writel (OHCI_INTR_WDH, &regs->intrenable); 
 	}
@@ -654,6 +667,7 @@
 		ohci->hcd.state);
 	ohci_dump (ohci, 1);
 
+	flush_scheduled_work();
 	if (HCD_IS_RUNNING(ohci->hcd.state))
 		hc_reset (ohci);
 	
@@ -670,22 +684,68 @@
 
 /*-------------------------------------------------------------------------*/
 
-// FIXME:  this restart logic should be generic,
-// and handle full hcd state cleanup
-
-/* controller died; cleanup debris, then restart */
 /* must not be called from interrupt context */
 
 #ifdef CONFIG_PM
+
+static void mark_children_gone (struct usb_device *dev)
+{
+	unsigned i;
+
+	for (i = 0; i < dev->maxchild; i++) {
+		if (dev->children [i] == 0)
+			continue;
+		dev->children [i]->state = USB_STATE_NOTATTACHED;
+		mark_children_gone (dev->children [i]);
+	}
+}
+
 static int hc_restart (struct ohci_hcd *ohci)
 {
 	int temp;
 	int i;
+	struct urb_priv *priv;
 
+	/* mark any devices gone, so they do nothing till khubd disconnects.
+	 * recycle any "live" eds/tds (and urbs) right away.
+	 * later, khubd disconnect processing will recycle the other state,
+	 * (either as disconnect/reconnect, or maybe someday as a reset).
+	 */ 
+	spin_lock_irq(&ohci->lock);
 	disable (ohci);
-	if (hcd_to_bus (&ohci->hcd)->root_hub)
-		usb_disconnect (&hcd_to_bus (&ohci->hcd)->root_hub);
-	
+	mark_children_gone (ohci->hcd.self.root_hub);
+	if (!list_empty (&ohci->pending))
+		ohci_dbg(ohci, "abort schedule...\n");
+	list_for_each_entry (priv, &ohci->pending, pending) {
+		struct urb	*urb = priv->td[0]->urb;
+		struct ed	*ed = priv->ed;
+
+		switch (ed->state) {
+		case ED_OPER:
+			ed->state = ED_UNLINK;
+			ed->hwINFO |= ED_DEQUEUE;
+			ed_deschedule (ohci, ed);
+
+			ed->ed_next = ohci->ed_rm_list;
+			ed->ed_prev = 0;
+			ohci->ed_rm_list = ed;
+			/* FALLTHROUGH */
+		case ED_UNLINK:
+			break;
+		default:
+			ohci_dbg(ohci, "bogus ed %p state %d\n",
+					ed, ed->state);
+		}
+
+		spin_lock (&urb->lock);
+		urb->status = -ESHUTDOWN;
+		spin_unlock (&urb->lock);
+	}
+	finish_unlinks (ohci, 0, 0);
+	spin_unlock_irq(&ohci->lock);
+
+	/* paranoia, in case that didn't work: */
+
 	/* empty the interrupt branches */
 	for (i = 0; i < NUM_INTS; i++) ohci->load [i] = 0;
 	for (i = 0; i < NUM_INTS; i++) ohci->hcca->int_table [i] = 0;
@@ -700,8 +760,20 @@
 	if ((temp = hc_reset (ohci)) < 0 || (temp = hc_start (ohci)) < 0) {
 		ohci_err (ohci, "can't restart, %d\n", temp);
 		return temp;
-	} else
+	} else {
+		/* here we "know" root ports should always stay powered,
+		 * and that if we try to turn them back on the root hub
+		 * will respond to CSC processing.
+		 */
+		i = roothub_a (ohci) & RH_A_NDP;
+		while (i--)
+			writel (RH_PS_PSS,
+				&ohci->regs->roothub.portstatus [temp]);
+		ohci->hcd.self.root_hub->dev.power.power_state = 0;
+		ohci->hcd.state = USB_STATE_RUNNING;
 		ohci_dbg (ohci, "restart complete\n");
+		ohci_dump (ohci, 1);
+	}
 	return 0;
 }
 #endif
diff -Nru a/drivers/usb/host/ohci-hub.c b/drivers/usb/host/ohci-hub.c
--- a/drivers/usb/host/ohci-hub.c	Sun May 16 01:18:33 2004
+++ b/drivers/usb/host/ohci-hub.c	Sun May 16 01:18:33 2004
@@ -60,6 +60,261 @@
 		(temp & RH_PS_CCS) ? " CCS" : "" \
 		);
 
+/*-------------------------------------------------------------------------*/
+
+#if	defined(CONFIG_USB_SUSPEND) || defined(CONFIG_PM)
+
+#define OHCI_SCHED_ENABLES \
+	(OHCI_CTRL_CLE|OHCI_CTRL_BLE|OHCI_CTRL_PLE|OHCI_CTRL_IE)
+
+static void dl_done_list (struct ohci_hcd *, struct pt_regs *);
+static void finish_unlinks (struct ohci_hcd *, u16 , struct pt_regs *);
+
+static int ohci_hub_suspend (struct usb_hcd *hcd)
+{
+	struct ohci_hcd		*ohci = hcd_to_ohci (hcd);
+	struct usb_device	*root = hcd_to_bus (&ohci->hcd)->root_hub;
+	int			status = 0;
+
+	if (root->dev.power.power_state != 0)
+		return 0;
+	if (time_before (jiffies, ohci->next_statechange))
+		return -EAGAIN;
+
+	spin_lock_irq (&ohci->lock);
+
+	ohci->hc_control = readl (&ohci->regs->control);
+	switch (ohci->hc_control & OHCI_CTRL_HCFS) {
+	case OHCI_USB_RESUME:
+		ohci_dbg (ohci, "resume/suspend?\n");
+		ohci->hc_control &= ~OHCI_CTRL_HCFS;
+		ohci->hc_control |= OHCI_USB_RESET;
+		writel (ohci->hc_control, &ohci->regs->control);
+		(void) readl (&ohci->regs->control);
+		/* FALL THROUGH */
+	case OHCI_USB_RESET:
+		status = -EBUSY;
+		ohci_dbg (ohci, "needs reinit!\n");
+		goto done;
+	case OHCI_USB_SUSPEND:
+		ohci_dbg (ohci, "already suspended?\n");
+		goto succeed;
+	}
+	ohci_dbg (ohci, "suspend root hub\n");
+
+	/* First stop any processing */
+	ohci->hcd.state = USB_STATE_QUIESCING;
+	if (ohci->hc_control & OHCI_SCHED_ENABLES) {
+		int		limit;
+
+		ohci->hc_control &= ~OHCI_SCHED_ENABLES;
+		writel (ohci->hc_control, &ohci->regs->control);
+		ohci->hc_control = readl (&ohci->regs->control);
+		writel (OHCI_INTR_SF, &ohci->regs->intrstatus);
+
+		/* sched disables take effect on the next frame,
+		 * then the last WDH could take 6+ msec
+		 */
+		ohci_dbg (ohci, "stopping schedules ...\n");
+		limit = 2000;
+		while (limit > 0) {
+			udelay (250);
+			limit =- 250;
+			if (readl (&ohci->regs->intrstatus) & OHCI_INTR_SF)
+				break;
+		}
+		dl_done_list (ohci, 0);
+		mdelay (7);
+	}
+	dl_done_list (ohci, 0);
+	finish_unlinks (ohci, OHCI_FRAME_NO(ohci->hcca), 0);
+	writel (readl (&ohci->regs->intrstatus), &ohci->regs->intrstatus);
+
+	/* maybe resume can wake root hub */
+	if (ohci->hcd.remote_wakeup)
+		ohci->hc_control |= OHCI_CTRL_RWE;
+	else
+		ohci->hc_control &= ~OHCI_CTRL_RWE;
+
+	/* Suspend hub */
+	ohci->hc_control &= ~OHCI_CTRL_HCFS;
+	ohci->hc_control |= OHCI_USB_SUSPEND;
+	writel (ohci->hc_control, &ohci->regs->control);
+	(void) readl (&ohci->regs->control);
+
+	/* no resumes until devices finish suspending */
+	ohci->next_statechange = jiffies + MSEC_TO_JIFFIES (5);
+
+succeed:
+	/* it's not USB_STATE_SUSPENDED unless access to this
+	 * hub from the non-usb side (PCI, SOC, etc) stopped 
+	 */
+	root->dev.power.power_state = 3;
+done:
+	spin_unlock_irq (&ohci->lock);
+	return status;
+}
+
+static inline struct ed *find_head (struct ed *ed)
+{
+	/* for bulk and control lists */
+	while (ed->ed_prev)
+		ed = ed->ed_prev;
+	return ed;
+}
+
+static int hc_restart (struct ohci_hcd *ohci);
+
+/* caller owns root->serialize */
+static int ohci_hub_resume (struct usb_hcd *hcd)
+{
+	struct ohci_hcd		*ohci = hcd_to_ohci (hcd);
+	struct usb_device	*root = hcd_to_bus (&ohci->hcd)->root_hub;
+	u32			temp, enables;
+	int			status = -EINPROGRESS;
+
+	if (!root->dev.power.power_state)
+		return 0;
+	if (time_before (jiffies, ohci->next_statechange))
+		return -EAGAIN;
+
+	spin_lock_irq (&ohci->lock);
+	ohci->hc_control = readl (&ohci->regs->control);
+	switch (ohci->hc_control & OHCI_CTRL_HCFS) {
+	case OHCI_USB_SUSPEND:
+		ohci->hc_control &= ~(OHCI_CTRL_HCFS|OHCI_SCHED_ENABLES);
+		ohci->hc_control |= OHCI_USB_RESUME;
+		writel (ohci->hc_control, &ohci->regs->control);
+		(void) readl (&ohci->regs->control);
+		ohci_dbg (ohci, "resume root hub\n");
+		break;
+	case OHCI_USB_RESUME:
+		/* HCFS changes sometime after INTR_RD */
+		ohci_info (ohci, "remote wakeup\n");
+		break;
+	case OHCI_USB_OPER:
+		ohci_dbg (ohci, "odd resume\n");
+		root->dev.power.power_state = 0;
+		status = 0;
+		break;
+	default:		/* RESET, we lost power */
+		ohci_dbg (ohci, "root hub hardware reset\n");
+		status = -EBUSY;
+	}
+	spin_unlock_irq (&ohci->lock);
+	if (status == -EBUSY)
+		return hc_restart (ohci);
+	if (status != -EINPROGRESS)
+		return status;
+
+	temp = roothub_a (ohci) & RH_A_NDP;
+	enables = 0;
+	while (temp--) {
+		u32 stat = readl (&ohci->regs->roothub.portstatus [temp]);
+
+		/* force global, not selective, resume */
+		if (!(stat & RH_PS_PSS))
+			continue;
+		writel (RH_PS_POCI, &ohci->regs->roothub.portstatus [temp]);
+	}
+
+	/* Some controllers (lucent) need extra-long delays */
+	ohci->hcd.state = USB_STATE_RESUMING;
+	mdelay (20 /* usb 11.5.1.10 */ + 15);
+
+	temp = readl (&ohci->regs->control);
+	temp &= OHCI_CTRL_HCFS;
+	if (temp != OHCI_USB_RESUME) {
+		ohci_err (ohci, "controller won't resume\n");
+		return -EBUSY;
+	}
+
+	/* disable old schedule state, reinit from scratch */
+	writel (0, &ohci->regs->ed_controlhead);
+	writel (0, &ohci->regs->ed_controlcurrent);
+	writel (0, &ohci->regs->ed_bulkhead);
+	writel (0, &ohci->regs->ed_bulkcurrent);
+	writel (0, &ohci->regs->ed_periodcurrent);
+	writel ((u32) ohci->hcca_dma, &ohci->regs->hcca);
+
+	periodic_reinit (ohci);
+
+	/* interrupts might have been disabled */
+	writel (OHCI_INTR_INIT, &ohci->regs->intrenable);
+	if (ohci->ed_rm_list)
+		writel (OHCI_INTR_SF, &ohci->regs->intrenable);
+	writel (readl (&ohci->regs->intrstatus), &ohci->regs->intrstatus);
+
+	/* Then re-enable operations */
+	writel (OHCI_USB_OPER, &ohci->regs->control);
+	(void) readl (&ohci->regs->control);
+	msec_delay (3);
+
+	temp = OHCI_CONTROL_INIT | OHCI_USB_OPER;
+	if (ohci->hcd.can_wakeup)
+		temp |= OHCI_CTRL_RWC;
+	ohci->hc_control = temp;
+	writel (temp, &ohci->regs->control);
+	(void) readl (&ohci->regs->control);
+
+	/* TRSMRCY */
+	msec_delay (10);
+	root->dev.power.power_state = 0;
+
+	/* keep it alive for ~5x suspend + resume costs */
+	ohci->next_statechange = jiffies + MSEC_TO_JIFFIES (250);
+
+	/* maybe turn schedules back on */
+	enables = 0;
+	temp = 0;
+	if (!ohci->ed_rm_list) {
+		if (ohci->ed_controltail) {
+			writel (find_head (ohci->ed_controltail)->dma,
+				&ohci->regs->ed_controlhead);
+			enables |= OHCI_CTRL_CLE;
+			temp |= OHCI_CLF;
+		}
+		if (ohci->ed_bulktail) {
+			writel (find_head (ohci->ed_bulktail)->dma,
+				&ohci->regs->ed_bulkhead);
+			enables |= OHCI_CTRL_BLE;
+			temp |= OHCI_BLF;
+		}
+	}
+	if (hcd_to_bus (&ohci->hcd)->bandwidth_isoc_reqs
+			|| hcd_to_bus (&ohci->hcd)->bandwidth_int_reqs)
+		enables |= OHCI_CTRL_PLE|OHCI_CTRL_IE;
+	if (enables) {
+		ohci_dbg (ohci, "restarting schedules ... %08x\n", enables);
+		ohci->hc_control |= enables;
+		writel (ohci->hc_control, &ohci->regs->control);
+		if (temp)
+			writel (status, &ohci->regs->cmdstatus);
+		(void) readl (&ohci->regs->control);
+	}
+
+	ohci->hcd.state = USB_STATE_RUNNING;
+	return 0;
+}
+
+static void ohci_rh_resume (void *_hcd)
+{
+	struct usb_hcd	*hcd = _hcd;
+
+	down (&hcd->self.root_hub->serialize);
+	(void) ohci_hub_resume (hcd);
+	up (&hcd->self.root_hub->serialize);
+}
+
+#else
+
+static void ohci_rh_resume (void *_hcd)
+{
+	struct ohci_hcd	*ohci = hcd_to_ohci (_hcd);
+	ohci_dbg(ohci, "rh_resume ??\n");
+}
+
+#endif	/* CONFIG_USB_SUSPEND || CONFIG_PM */
 
 /*-------------------------------------------------------------------------*/
 
@@ -70,6 +325,7 @@
 {
 	struct ohci_hcd	*ohci = hcd_to_ohci (hcd);
 	int		ports, i, changed = 0, length = 1;
+	int		can_suspend = 1;
 
 	ports = roothub_a (ohci) & RH_A_NDP; 
 	if (ports > MAX_ROOT_PORTS) {
@@ -95,16 +351,45 @@
 	for (i = 0; i < ports; i++) {
 		u32	status = roothub_portstatus (ohci, i);
 
-		status &= RH_PS_CSC | RH_PS_PESC | RH_PS_PSSC
-				| RH_PS_OCIC | RH_PS_PRSC;
-		if (status) {
+		if (status & (RH_PS_CSC | RH_PS_PESC | RH_PS_PSSC
+				| RH_PS_OCIC | RH_PS_PRSC)) {
 			changed = 1;
 			if (i < 7)
 			    buf [0] |= 1 << (i + 1);
 			else
 			    buf [1] |= 1 << (i - 7);
+			continue;
 		}
+
+		/* can suspend if no ports are enabled; or if all all
+		 * enabled ports are suspended AND remote wakeup is on.
+		 */
+		if (!(status & RH_PS_CCS))
+			continue;
+		if ((status & RH_PS_PSS) && ohci->hcd.remote_wakeup)
+			continue;
+		can_suspend = 0;
 	}
+
+#ifdef CONFIG_PM
+	/* save power by suspending idle root hubs;
+	 * INTR_RD wakes us when there's work
+	 */
+	if (can_suspend
+			&& !changed
+			&& !ohci->ed_rm_list
+			&& ((OHCI_CTRL_HCFS | OHCI_SCHED_ENABLES)
+					& ohci->hc_control)
+				== OHCI_USB_OPER
+			&& down_trylock (&hcd->self.root_hub->serialize) == 0
+			) {
+		ohci_vdbg (ohci, "autosuspend\n");
+		(void) ohci_hub_suspend (&ohci->hcd);
+		ohci->hcd.state = USB_STATE_RUNNING;
+		up (&hcd->self.root_hub->serialize);
+	}
+#endif
+
 	return changed ? length : 0;
 }
 
@@ -188,6 +473,9 @@
 			break;
 		case USB_PORT_FEAT_SUSPEND:
 			temp = RH_PS_POCI;
+			if ((ohci->hc_control & OHCI_CTRL_HCFS)
+					!= OHCI_USB_OPER)
+				schedule_work (&ohci->rh_resume);
 			break;
 		case USB_PORT_FEAT_C_SUSPEND:
 			temp = RH_PS_PSSC;
diff -Nru a/drivers/usb/host/ohci-mem.c b/drivers/usb/host/ohci-mem.c
--- a/drivers/usb/host/ohci-mem.c	Sun May 16 01:18:35 2004
+++ b/drivers/usb/host/ohci-mem.c	Sun May 16 01:18:35 2004
@@ -31,6 +31,9 @@
 	if (ohci != 0) {
 		memset (ohci, 0, sizeof (struct ohci_hcd));
 		ohci->hcd.product_desc = "OHCI Host Controller";
+		spin_lock_init (&ohci->lock);
+		INIT_LIST_HEAD (&ohci->pending);
+		INIT_WORK (&ohci->rh_resume, ohci_rh_resume, &ohci->hcd);
 		return &ohci->hcd;
 	}
 	return 0;
diff -Nru a/drivers/usb/host/ohci-pci.c b/drivers/usb/host/ohci-pci.c
--- a/drivers/usb/host/ohci-pci.c	Sun May 16 01:18:36 2004
+++ b/drivers/usb/host/ohci-pci.c	Sun May 16 01:18:36 2004
@@ -36,6 +36,7 @@
 	struct ohci_hcd	*ohci = hcd_to_ohci (hcd);
 
 	ohci->regs = hcd->regs;
+	ohci->next_statechange = jiffies;
 	return hc_reset (ohci);
 }
 
@@ -118,74 +119,25 @@
 static int ohci_pci_suspend (struct usb_hcd *hcd, u32 state)
 {
 	struct ohci_hcd		*ohci = hcd_to_ohci (hcd);
-	u16			cmd;
-	u32			tmp;
 
-	if ((ohci->hc_control & OHCI_CTRL_HCFS) != OHCI_USB_OPER) {
-		ohci_dbg (ohci, "can't suspend (state is %s)\n",
-			hcfs2string (ohci->hc_control & OHCI_CTRL_HCFS));
-		return -EIO;
-	}
+	/* suspend root hub, hoping it keeps power during suspend */
+	while (time_before (jiffies, ohci->next_statechange))
+		msec_delay (100);
+
+#ifdef	CONFIG_USB_SUSPEND
+	(void) usb_suspend_device (hcd->self.root_hub);
+#else
+	/* FIXME lock root hub */
+	(void) ohci_hub_suspend (hcd);
+#endif
 
-	/* act as if usb suspend can always be used */
-	ohci_dbg (ohci, "suspend to %d\n", state);
+	/* let things settle down a bit */
+	msec_delay (100);
 	
-	/* First stop processing */
-  	spin_lock_irq (&ohci->lock);
-	ohci->hc_control &=
-		~(OHCI_CTRL_PLE|OHCI_CTRL_CLE|OHCI_CTRL_BLE|OHCI_CTRL_IE);
-	writel (ohci->hc_control, &ohci->regs->control);
-	writel (OHCI_INTR_SF, &ohci->regs->intrstatus);
-	(void) readl (&ohci->regs->intrstatus);
-  	spin_unlock_irq (&ohci->lock);
-
-	/* Wait a frame or two */
-	mdelay (1);
-	if (!readl (&ohci->regs->intrstatus) & OHCI_INTR_SF)
-		mdelay (1);
-		
 #ifdef CONFIG_PMAC_PBOOK
 	if (_machine == _MACH_Pmac)
 		disable_irq ((to_pci_dev(hcd->self.controller))->irq);
- 	/* else, 2.4 assumes shared irqs -- don't disable */
-#endif
-
-	/* Enable remote wakeup */
-	writel (readl (&ohci->regs->intrenable) | OHCI_INTR_RD,
-		&ohci->regs->intrenable);
-
-	/* Suspend chip and let things settle down a bit */
-  	spin_lock_irq (&ohci->lock);
- 	ohci->hc_control = OHCI_USB_SUSPEND;
- 	writel (ohci->hc_control, &ohci->regs->control);
-	(void) readl (&ohci->regs->control);
-  	spin_unlock_irq (&ohci->lock);
-
-	set_current_state (TASK_UNINTERRUPTIBLE);
-	schedule_timeout (HZ/2);
-
-	tmp = readl (&ohci->regs->control) | OHCI_CTRL_HCFS;
-	switch (tmp) {
-		case OHCI_USB_RESET:
-		case OHCI_USB_RESUME:
-		case OHCI_USB_OPER:
-			ohci_err (ohci, "can't suspend; hcfs %d\n", tmp);
-			break;
-		case OHCI_USB_SUSPEND:
-			ohci_dbg (ohci, "suspended\n");
-			break;
-	}
 
-	/* In some rare situations, Apple's OHCI have happily trashed
-	 * memory during sleep. We disable its bus master bit during
-	 * suspend
-	 */
-	pci_read_config_word (to_pci_dev(hcd->self.controller), PCI_COMMAND, 
-				&cmd);
-	cmd &= ~PCI_COMMAND_MASTER;
-	pci_write_config_word (to_pci_dev(hcd->self.controller), PCI_COMMAND, 
-				cmd);
-#ifdef CONFIG_PMAC_PBOOK
 	{
 	   	struct device_node	*of_node;
  
@@ -202,7 +154,6 @@
 static int ohci_pci_resume (struct usb_hcd *hcd)
 {
 	struct ohci_hcd		*ohci = hcd_to_ohci (hcd);
-	int			temp;
 	int			retval = 0;
 
 #ifdef CONFIG_PMAC_PBOOK
@@ -215,90 +166,25 @@
 			pmac_call_feature (PMAC_FTR_USB_ENABLE, of_node, 0, 1);
 	}
 #endif
-	/* did we suspend, or were we powered off? */
-	ohci->hc_control = readl (&ohci->regs->control);
-	temp = ohci->hc_control & OHCI_CTRL_HCFS;
-
-#ifdef DEBUG
-	/* the registers may look crazy here */
-	ohci_dump_status (ohci, 0, 0);
-#endif
 
-	/* Re-enable bus mastering */
-	pci_set_master (to_pci_dev(ohci->hcd.self.controller));
-	
-	switch (temp) {
-
-	case OHCI_USB_RESET:	// lost power
-restart:
-		ohci_info (ohci, "USB restart\n");
-		retval = hc_restart (ohci);
-		break;
-
-	case OHCI_USB_SUSPEND:	// host wakeup
-	case OHCI_USB_RESUME:	// remote wakeup
-		ohci_info (ohci, "USB continue from %s wakeup\n",
-			 (temp == OHCI_USB_SUSPEND)
-				? "host" : "remote");
-
-		/* we "should" only need RESUME if we're SUSPENDed ... */
-		ohci->hc_control = OHCI_USB_RESUME;
-		writel (ohci->hc_control, &ohci->regs->control);
-		(void) readl (&ohci->regs->control);
-		/* Some controllers (lucent) need extra-long delays */
-		mdelay (35); /* no schedule here ! */
-
-		temp = readl (&ohci->regs->control);
-		temp = ohci->hc_control & OHCI_CTRL_HCFS;
-		if (temp != OHCI_USB_RESUME) {
-			ohci_err (ohci, "controller won't resume\n");
-			/* maybe we can reset */
-			goto restart;
-		}
-
-		/* Then re-enable operations */
-		writel (OHCI_USB_OPER, &ohci->regs->control);
-		(void) readl (&ohci->regs->control);
-		mdelay (3);
-
-		spin_lock_irq (&ohci->lock);
-		ohci->hc_control = OHCI_CONTROL_INIT | OHCI_USB_OPER;
-		if (!ohci->ed_rm_list) {
-			if (ohci->ed_controltail)
-				ohci->hc_control |= OHCI_CTRL_CLE;
-			if (ohci->ed_bulktail)
-				ohci->hc_control |= OHCI_CTRL_BLE;
-		}
-		if (hcd_to_bus (&ohci->hcd)->bandwidth_isoc_reqs
-				|| hcd_to_bus (&ohci->hcd)->bandwidth_int_reqs)
-			ohci->hc_control |= OHCI_CTRL_PLE|OHCI_CTRL_IE;
-		hcd->state = USB_STATE_RUNNING;
-		writel (ohci->hc_control, &ohci->regs->control);
-
-		/* trigger a start-frame interrupt (why?) */
-		writel (OHCI_INTR_SF, &ohci->regs->intrstatus);
-		writel (OHCI_INTR_SF, &ohci->regs->intrenable);
-
-		writel (OHCI_INTR_WDH, &ohci->regs->intrdisable);	
-		(void) readl (&ohci->regs->intrdisable);
-		spin_unlock_irq (&ohci->lock);
+	/* resume root hub */
+	while (time_before (jiffies, ohci->next_statechange))
+		msec_delay (100);
+#ifdef	CONFIG_USB_SUSPEND
+	/* get extra cleanup even if remote wakeup isn't in use */
+	retval = usb_resume_device (hcd->self.root_hub);
+#else
+	down (&hcd->self.root_hub->serialize);
+	retval = ohci_hub_resume (hcd);
+	up (&hcd->self.root_hub->serialize);
+#endif
 
+	if (retval == 0) {
+		hcd->self.controller->power.power_state = 0;
 #ifdef CONFIG_PMAC_PBOOK
 		if (_machine == _MACH_Pmac)
 			enable_irq (to_pci_dev(hcd->self.controller)->irq);
 #endif
-
-		/* Check for a pending done list */
-		if (ohci->hcca->done_head)
-			dl_done_list (ohci, dl_reverse_done_list (ohci), NULL);
-		writel (OHCI_INTR_WDH, &ohci->regs->intrenable); 
-
-		/* assume there are TDs on the bulk and control lists */
-		writel (OHCI_BLF | OHCI_CLF, &ohci->regs->cmdstatus);
-		break;
-
-	default:
-		ohci_warn (ohci, "odd PCI resume\n");
 	}
 	return retval;
 }
diff -Nru a/drivers/usb/host/ohci-q.c b/drivers/usb/host/ohci-q.c
--- a/drivers/usb/host/ohci-q.c	Sun May 16 01:18:36 2004
+++ b/drivers/usb/host/ohci-q.c	Sun May 16 01:18:36 2004
@@ -22,6 +22,7 @@
 		}
 	}
 
+	list_del (&urb_priv->pending);
 	kfree (urb_priv);
 }
 
@@ -169,6 +170,9 @@
 {	 
 	int	branch;
 
+	if (ohci->hcd.state == USB_STATE_QUIESCING)
+		return -EAGAIN;
+
 	ed->state = ED_OPER;
 	ed->ed_prev = 0;
 	ed->ed_next = 0;
@@ -419,7 +423,7 @@
 	}
 
 	/* NOTE: only ep0 currently needs this "re"init logic, during
-	 * enumeration (after set_address, or if ep0 maxpacket >8).
+	 * enumeration (after set_address).
 	 */
   	if (ed->state == ED_IDLE) {
 		u32	info;
@@ -593,6 +597,7 @@
 	}
 
 	urb_priv->td_cnt = 0;
+	list_add (&urb_priv->pending, &ohci->pending);
 
 	if (data_len)
 		data = urb->transfer_dma;
@@ -865,9 +870,6 @@
 	u32		td_dma;
 	struct td	*td_rev = NULL;
 	struct td	*td = NULL;
-  	unsigned long	flags;
-
-  	spin_lock_irqsave (&ohci->lock, flags);
 
 	td_dma = le32_to_cpup (&ohci->hcca->done_head);
 	ohci->hcca->done_head = 0;
@@ -899,7 +901,6 @@
 		td_rev = td;
 		td_dma = le32_to_cpup (&td->hwNextTD);
 	}	
-	spin_unlock_irqrestore (&ohci->lock, flags);
 	return td_rev;
 }
 
@@ -1013,7 +1014,9 @@
    	}
 
 	/* maybe reenable control and bulk lists */ 
-	if (HCD_IS_RUNNING(ohci->hcd.state) && !ohci->ed_rm_list) {
+	if (HCD_IS_RUNNING(ohci->hcd.state)
+			&& ohci->hcd.state != USB_STATE_QUIESCING
+			&& !ohci->ed_rm_list) {
 		u32	command = 0, control = 0;
 
 		if (ohci->ed_controltail) {
@@ -1053,11 +1056,10 @@
  * scanning the (re-reversed) donelist as this does.
  */
 static void
-dl_done_list (struct ohci_hcd *ohci, struct td *td, struct pt_regs *regs)
+dl_done_list (struct ohci_hcd *ohci, struct pt_regs *regs)
 {
-	unsigned long	flags;
+	struct td	*td = dl_reverse_done_list (ohci);
 
-  	spin_lock_irqsave (&ohci->lock, flags);
   	while (td) {
 		struct td	*td_next = td->next_dl_td;
 		struct urb	*urb = td->urb;
@@ -1098,5 +1100,4 @@
 
     		td = td_next;
   	}  
-	spin_unlock_irqrestore (&ohci->lock, flags);
 }
diff -Nru a/drivers/usb/host/ohci.h b/drivers/usb/host/ohci.h
--- a/drivers/usb/host/ohci.h	Sun May 16 01:18:37 2004
+++ b/drivers/usb/host/ohci.h	Sun May 16 01:18:37 2004
@@ -318,8 +318,9 @@
 /* hcd-private per-urb state */
 typedef struct urb_priv {
 	struct ed		*ed;
-	__u16			length;		// # tds in this request
-	__u16			td_cnt;		// tds already serviced
+	u16			length;		// # tds in this request
+	u16			td_cnt;		// tds already serviced
+	struct list_head	pending;
 	struct td		*td [0];	// all TDs in this request
 
 } urb_priv_t;
@@ -364,12 +365,17 @@
 	struct dma_pool		*td_cache;
 	struct dma_pool		*ed_cache;
 	struct td		*td_hash [TD_HASH_SIZE];
+	struct list_head	pending;
 
 	/*
 	 * driver state
 	 */
 	int			load [NUM_INTS];
 	u32 			hc_control;	/* copy of hc control reg */
+	unsigned long		next_statechange;	/* suspend/resume */
+	u32			fminterval;		/* saved register */
+
+	struct work_struct	rh_resume;
 
 	unsigned long		flags;		/* for HC bugs */
 #define	OHCI_QUIRK_AMD756	0x01			/* erratum #4 */
@@ -383,6 +389,32 @@
 };
 
 #define hcd_to_ohci(hcd_ptr) container_of(hcd_ptr, struct ohci_hcd, hcd)
+
+/*-------------------------------------------------------------------------*/
+
+static inline void disable (struct ohci_hcd *ohci)
+{
+	ohci->hcd.state = USB_STATE_HALT;
+}
+
+#define	MSEC_TO_JIFFIES(msec) ((HZ * (msec) + 999) / 1000)
+
+static inline void msec_delay(int msec)
+{
+	set_current_state(TASK_UNINTERRUPTIBLE);
+	schedule_timeout(MSEC_TO_JIFFIES(msec));
+}
+
+#define	FI			0x2edf		/* 12000 bits per frame (-1) */
+#define	DEFAULT_FMINTERVAL 	((((6 * (FI - 210)) / 7) << 16) | FI)
+#define LSTHRESH		0x628		/* lowspeed bit threshold */
+
+static inline void periodic_reinit (struct ohci_hcd *ohci)
+{
+	writel (ohci->fminterval, &ohci->regs->fminterval);
+	writel (((9 * FI) / 10) & 0x3fff, &ohci->regs->periodicstart);
+	writel (LSTHRESH, &ohci->regs->lsthresh);
+}
 
 /*-------------------------------------------------------------------------*/
 
diff -Nru a/drivers/usb/host/uhci-hcd.c b/drivers/usb/host/uhci-hcd.c
--- a/drivers/usb/host/uhci-hcd.c	Sun May 16 01:18:36 2004
+++ b/drivers/usb/host/uhci-hcd.c	Sun May 16 01:18:36 2004
@@ -157,8 +157,8 @@
 	return td;
 }
 
-static inline void uhci_fill_td(struct uhci_td *td, __u32 status,
-		__u32 token, __u32 buffer)
+static inline void uhci_fill_td(struct uhci_td *td, u32 status,
+		u32 token, u32 buffer)
 {
 	td->status = cpu_to_le32(status);
 	td->token = cpu_to_le32(token);
@@ -184,11 +184,11 @@
 		list_add_tail(&td->fl_list, &ftd->fl_list);
 
 		td->link = ltd->link;
-		mb();
+		wmb();
 		ltd->link = cpu_to_le32(td->dma_handle);
 	} else {
 		td->link = uhci->fl->frame[framenum];
-		mb();
+		wmb();
 		uhci->fl->frame[framenum] = cpu_to_le32(td->dma_handle);
 		uhci->fl->frame_cpu[framenum] = td;
 	}
@@ -218,7 +218,7 @@
 		ptd->link = td->link;
 	}
 
-	mb();
+	wmb();
 	td->link = UHCI_PTR_TERM;
 
 	list_del_init(&td->fl_list);
@@ -332,17 +332,7 @@
 	/* Grab the last QH */
 	lqh = list_entry(skelqh->list.prev, struct uhci_qh, list);
 
-	/*
-	 * Patch this endpoint's URB's QHs to point to the next skelqh:
-	 *    skelqh --> ... lqh --> newqh --> next skelqh
-	 * Do this first, so the HC always sees the right QH after this one.
-	 */
-	list_for_each (tmp, &urbp->queue_list) {
-		struct urb_priv *turbp =
-			list_entry(tmp, struct urb_priv, queue_list);
-
-		turbp->qh->link = lqh->link;
-	}
+	/* Point to the next skelqh */
 	urbp->qh->link = lqh->link;
 	wmb();				/* Ordering is important */
 
@@ -362,15 +352,15 @@
 	 *
 	 * The HC could see (and use!) any of these as we write them.
 	 */
+	lqh->link = cpu_to_le32(urbp->qh->dma_handle) | UHCI_PTR_QH;
 	if (lqh->urbp) {
 		list_for_each (tmp, &lqh->urbp->queue_list) {
 			struct urb_priv *turbp =
 				list_entry(tmp, struct urb_priv, queue_list);
 
-			turbp->qh->link = cpu_to_le32(urbp->qh->dma_handle) | UHCI_PTR_QH;
+			turbp->qh->link = lqh->link;
 		}
 	}
-	lqh->link = cpu_to_le32(urbp->qh->dma_handle) | UHCI_PTR_QH;
 
 	list_add_tail(&urbp->qh->list, &skelqh->list);
 }
@@ -382,7 +372,7 @@
 static void uhci_remove_qh(struct uhci_hcd *uhci, struct uhci_qh *qh)
 {
 	struct uhci_qh *pqh;
-	__u32 newlink;
+	u32 newlink;
 
 	if (!qh)
 		return;
@@ -423,7 +413,7 @@
 				turbp->qh->link = newlink;
 			}
 		}
-		mb();
+		wmb();
 
 		/* Leave qh->link in case the HC is on the QH now, it will */
 		/* continue the rest of the schedule */
@@ -510,7 +500,7 @@
 	/* All qh's in the queue need to link to the next queue */
 	urbp->qh->link = eurbp->qh->link;
 
-	mb();			/* Make sure we flush everything */
+	wmb();			/* Make sure we flush everything */
 
 	lltd->link = cpu_to_le32(urbp->qh->dma_handle) | UHCI_PTR_QH;
 
@@ -1044,9 +1034,13 @@
 			usb_pipeout(urb->pipe));
 	}
 
-	/* Set the flag on the last packet */
-	if (!(urb->transfer_flags & URB_NO_INTERRUPT))
-		td->status |= cpu_to_le32(TD_CTRL_IOC);
+	/* Set the interrupt-on-completion flag on the last packet.
+	 * A more-or-less typical 4 KB URB (= size of one memory page)
+	 * will require about 3 ms to transfer; that's a little on the
+	 * fast side but not enough to justify delaying an interrupt
+	 * more than 2 or 3 URBs, so we will ignore the URB_NO_INTERRUPT
+	 * flag setting. */
+	td->status |= cpu_to_le32(TD_CTRL_IOC);
 
 	qh = uhci_alloc_qh(uhci, urb->dev);
 	if (!qh)
@@ -1786,6 +1780,9 @@
 
 	spin_unlock(&uhci->schedule_lock);
 
+	/* Wake up anyone waiting for an URB to complete */
+	wake_up_all(&uhci->waitqh);
+
 	return IRQ_HANDLED;
 }
 
@@ -2086,6 +2083,8 @@
 
 	INIT_LIST_HEAD(&uhci->complete_list);
 
+	init_waitqueue_head(&uhci->waitqh);
+
 	uhci->fl = dma_alloc_coherent(uhci_dev(uhci), sizeof(*uhci->fl),
 			&dma_handle, 0);
 	if (!uhci->fl) {
@@ -2296,6 +2295,9 @@
 	uhci_free_pending_qhs(uhci);
 	uhci_free_pending_tds(uhci);
 	spin_unlock_irq(&uhci->schedule_lock);
+
+	/* Wake up anyone waiting for an URB to complete */
+	wake_up_all(&uhci->waitqh);
 	
 	release_uhci(uhci);
 }
@@ -2361,6 +2363,46 @@
 	kfree(hcd_to_uhci(hcd));
 }
 
+/* Are there any URBs for a particular device/endpoint on a given list? */
+static int urbs_for_ep_list(struct list_head *head,
+		struct hcd_dev *hdev, int ep)
+{
+	struct urb_priv *urbp;
+
+	list_for_each_entry(urbp, head, urb_list) {
+		struct urb *urb = urbp->urb;
+
+		if (hdev == urb->dev->hcpriv && ep ==
+				(usb_pipeendpoint(urb->pipe) |
+				 usb_pipein(urb->pipe)))
+			return 1;
+	}
+	return 0;
+}
+
+/* Are there any URBs for a particular device/endpoint? */
+static int urbs_for_ep(struct uhci_hcd *uhci, struct hcd_dev *hdev, int ep)
+{
+	int rc;
+
+	spin_lock_irq(&uhci->schedule_lock);
+	rc = (urbs_for_ep_list(&uhci->urb_list, hdev, ep) ||
+			urbs_for_ep_list(&uhci->complete_list, hdev, ep) ||
+			urbs_for_ep_list(&uhci->urb_remove_list, hdev, ep));
+	spin_unlock_irq(&uhci->schedule_lock);
+	return rc;
+}
+
+/* Wait until all the URBs for a particular device/endpoint are gone */
+static void uhci_hcd_endpoint_disable(struct usb_hcd *hcd,
+		struct hcd_dev *hdev, int endpoint)
+{
+	struct uhci_hcd *uhci = hcd_to_uhci(hcd);
+
+	wait_event_interruptible(uhci->waitqh,
+			!urbs_for_ep(uhci, hdev, endpoint));
+}
+
 static int uhci_hcd_get_frame_number(struct usb_hcd *hcd)
 {
 	return uhci_get_current_frame_number(hcd_to_uhci(hcd));
@@ -2390,6 +2432,7 @@
 	.urb_enqueue =		uhci_urb_enqueue,
 	.urb_dequeue =		uhci_urb_dequeue,
 
+	.endpoint_disable =	uhci_hcd_endpoint_disable,
 	.get_frame_number =	uhci_hcd_get_frame_number,
 
 	.hub_status_data =	uhci_hub_status_data,
diff -Nru a/drivers/usb/host/uhci-hcd.h b/drivers/usb/host/uhci-hcd.h
--- a/drivers/usb/host/uhci-hcd.h	Sun May 16 01:18:36 2004
+++ b/drivers/usb/host/uhci-hcd.h	Sun May 16 01:18:36 2004
@@ -80,7 +80,7 @@
 #define CAN_SCHEDULE_FRAMES	1000	/* how far future frames can be scheduled */
 
 struct uhci_frame_list {
-	__u32 frame[UHCI_NUMFRAMES];
+	u32 frame[UHCI_NUMFRAMES];
 
 	void *frame_cpu[UHCI_NUMFRAMES];
 
@@ -105,8 +105,8 @@
  */
 struct uhci_qh {
 	/* Hardware fields */
-	__u32 link;			/* Next queue */
-	__u32 element;			/* Queue element pointer */
+	u32 link;			/* Next queue */
+	u32 element;			/* Queue element pointer */
 
 	/* Software fields */
 	dma_addr_t dma_handle;
@@ -185,10 +185,10 @@
  */
 struct uhci_td {
 	/* Hardware fields */
-	__u32 link;
-	__u32 status;
-	__u32 token;
-	__u32 buffer;
+	u32 link;
+	u32 status;
+	u32 token;
+	u32 buffer;
 
 	/* Software fields */
 	dma_addr_t dma_handle;
@@ -370,6 +370,8 @@
 	int rh_numports;
 
 	struct timer_list stall_timer;
+
+	wait_queue_head_t waitqh;		/* endpoint_disable waiters */
 };
 
 struct urb_priv {
diff -Nru a/drivers/usb/image/mdc800.c b/drivers/usb/image/mdc800.c
--- a/drivers/usb/image/mdc800.c	Sun May 16 01:18:35 2004
+++ b/drivers/usb/image/mdc800.c	Sun May 16 01:18:35 2004
@@ -319,7 +319,9 @@
 	set_current_state(TASK_INTERRUPTIBLE);
 	if (!mdc800->irq_woken)
 	{
-		schedule_timeout (msec*HZ/1000);
+		long timeout = msec*HZ/1000;
+		while(timeout)
+			timeout = schedule_timeout (timeout);
 	}
         remove_wait_queue(&mdc800->irq_wait, &wait);
 	set_current_state(TASK_RUNNING);
@@ -718,7 +720,9 @@
 				set_current_state(TASK_INTERRUPTIBLE);
 				if (!mdc800->downloaded)
 				{
-					schedule_timeout (TO_DOWNLOAD_GET_READY*HZ/1000);
+					long timeout = TO_DOWNLOAD_GET_READY*HZ/1000;
+					while(timeout)
+						timeout = schedule_timeout (timeout);
 				}
 				set_current_state(TASK_RUNNING);
 				remove_wait_queue(&mdc800->download_wait, &wait);
@@ -842,7 +846,9 @@
 			set_current_state(TASK_INTERRUPTIBLE);
 			if (!mdc800->written)
 			{
-				schedule_timeout (TO_WRITE_GET_READY*HZ/1000);
+				long timeout = TO_WRITE_GET_READY*HZ/1000;
+				while(timeout)
+					timeout = schedule_timeout (timeout);
 			}
                         set_current_state(TASK_RUNNING);
 			remove_wait_queue(&mdc800->write_wait, &wait);
diff -Nru a/drivers/usb/input/Kconfig b/drivers/usb/input/Kconfig
--- a/drivers/usb/input/Kconfig	Sun May 16 01:18:36 2004
+++ b/drivers/usb/input/Kconfig	Sun May 16 01:18:36 2004
@@ -191,6 +191,19 @@
 	  To compile this driver as a module, choose M here: the
 	  module will be called mtouchusb.
 
+config USB_EGALAX
+	tristate "eGalax TouchKit USB Touchscreen Driver"
+	depends on USB && INPUT
+	---help---
+	  Say Y here if you want to use a eGalax TouchKit USB
+	  Touchscreen controller.
+
+	  The driver has been tested on a Xenarc 700TSV monitor
+	  with eGalax touchscreen.
+
+	  To compile this driver as a module, choose M here: the
+	  module will be called touchkitusb.
+
 config USB_XPAD
 	tristate "X-Box gamepad support"
 	depends on USB && INPUT
diff -Nru a/drivers/usb/input/Makefile b/drivers/usb/input/Makefile
--- a/drivers/usb/input/Makefile	Sun May 16 01:18:35 2004
+++ b/drivers/usb/input/Makefile	Sun May 16 01:18:35 2004
@@ -33,6 +33,7 @@
 obj-$(CONFIG_USB_KBTAB)		+= kbtab.o
 obj-$(CONFIG_USB_MOUSE)		+= usbmouse.o
 obj-$(CONFIG_USB_MTOUCH)	+= mtouchusb.o
+obj-$(CONFIG_USB_EGALAX)	+= touchkitusb.o
 obj-$(CONFIG_USB_POWERMATE)	+= powermate.o
 obj-$(CONFIG_USB_WACOM)		+= wacom.o
 obj-$(CONFIG_USB_XPAD)		+= xpad.o
diff -Nru a/drivers/usb/input/aiptek.c b/drivers/usb/input/aiptek.c
--- a/drivers/usb/input/aiptek.c	Sun May 16 01:18:36 2004
+++ b/drivers/usb/input/aiptek.c	Sun May 16 01:18:36 2004
@@ -188,13 +188,13 @@
 		     __FUNCTION__, retval);
 }
 
-struct aiptek_features aiptek_features[] = {
+static struct aiptek_features aiptek_features[] = {
 	{"Aiptek 6000U/8000U",
 	 8, 3000, 2250, 26, 511, aiptek_irq, 0, 0, 0, 0},
 	{NULL, 0}
 };
 
-struct usb_device_id aiptek_ids[] = {
+static struct usb_device_id aiptek_ids[] = {
 	{USB_DEVICE(USB_VENDOR_ID_AIPTEK, 0x20), .driver_info = 0},
 	{}
 };
diff -Nru a/drivers/usb/input/hid-core.c b/drivers/usb/input/hid-core.c
--- a/drivers/usb/input/hid-core.c	Sun May 16 01:18:35 2004
+++ b/drivers/usb/input/hid-core.c	Sun May 16 01:18:35 2004
@@ -958,7 +958,7 @@
  * Create a report.
  */
 
-void hid_output_report(struct hid_report *report, __u8 *data)
+static void hid_output_report(struct hid_report *report, __u8 *data)
 {
 	unsigned n;
 
@@ -1038,7 +1038,8 @@
 	return -1;
 }
 
-int hid_find_field_in_report(struct hid_report *report, __u32 wanted_usage, struct hid_field **field)
+#if 0
+static int hid_find_field_in_report(struct hid_report *report, __u32 wanted_usage, struct hid_field **field)
 {
 	int i, j;
 
@@ -1051,6 +1052,7 @@
 
 	return -1;
 }
+#endif
 
 static int hid_submit_out(struct hid_device *hid)
 {
@@ -1412,7 +1414,15 @@
 #define USB_VENDOR_ID_CHIC		0x05fe
 #define USB_DEVICE_ID_CHIC_GAMEPAD	0x0014
 
-struct hid_blacklist {
+#define USB_VENDOR_ID_GLAB		0x06c2
+#define USB_DEVICE_ID_4_PHIDGETSERVO_30	0x0038
+#define USB_DEVICE_ID_1_PHIDGETSERVO_30	0x0039
+
+#define USB_VENDOR_ID_WISEGROUP		0x0925
+#define USB_DEVICE_ID_1_PHIDGETSERVO_20	0x8101
+#define USB_DEVICE_ID_4_PHIDGETSERVO_20	0x8104
+
+static struct hid_blacklist {
 	__u16 idVendor;
 	__u16 idProduct;
 	unsigned quirks;
@@ -1459,6 +1469,10 @@
 	{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS2 + 7, HID_QUIRK_IGNORE },
 	{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_VOLITO, HID_QUIRK_IGNORE },
 	{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_PTU, HID_QUIRK_IGNORE },
+	{ USB_VENDOR_ID_GLAB, USB_DEVICE_ID_4_PHIDGETSERVO_30, HID_QUIRK_IGNORE },
+	{ USB_VENDOR_ID_GLAB, USB_DEVICE_ID_1_PHIDGETSERVO_30, HID_QUIRK_IGNORE },
+	{ USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_4_PHIDGETSERVO_20, HID_QUIRK_IGNORE },
+	{ USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_1_PHIDGETSERVO_20, HID_QUIRK_IGNORE },
 
 	{ USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_UC100KM, HID_QUIRK_NOGET },
 	{ USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS124U, HID_QUIRK_NOGET },
@@ -1767,7 +1781,7 @@
 
 static struct usb_driver hid_driver = {
 	.owner =	THIS_MODULE,
-	.name =		"hid",
+	.name =		"usbhid",
 	.probe =	hid_probe,
 	.disconnect =	hid_disconnect,
 	.id_table =	hid_usb_ids,
diff -Nru a/drivers/usb/input/kbtab.c b/drivers/usb/input/kbtab.c
--- a/drivers/usb/input/kbtab.c	Sun May 16 01:18:33 2004
+++ b/drivers/usb/input/kbtab.c	Sun May 16 01:18:33 2004
@@ -95,7 +95,7 @@
 		     __FUNCTION__, retval);
 }
 
-struct usb_device_id kbtab_ids[] = {
+static struct usb_device_id kbtab_ids[] = {
 	{ USB_DEVICE(USB_VENDOR_ID_KBGEAR, 0x1001), .driver_info = 0 },
 	{ }
 };
diff -Nru a/drivers/usb/input/mtouchusb.c b/drivers/usb/input/mtouchusb.c
--- a/drivers/usb/input/mtouchusb.c	Sun May 16 01:18:35 2004
+++ b/drivers/usb/input/mtouchusb.c	Sun May 16 01:18:35 2004
@@ -28,6 +28,12 @@
  *    Complete rewrite using Linux Input in 2.6.3
  *    Unfortunately no calibration support at this time
  *
+ *  1.4 04/25/2004 (TEJ) tejohnson@yahoo.com
+ *    Changed reset from standard USB dev reset to vendor reset
+ *    Changed data sent to host from compensated to raw coordinates
+ *    Eliminated vendor/product module params
+ *    Performed multiple successfull tests with an EXII-5010UC
+ *
  *****************************************************************************/
 
 #include <linux/config.h>
@@ -45,25 +51,28 @@
 #include <linux/init.h>
 #include <linux/usb.h>
 
-#define MTOUCHUSB_MIN_XC                0xc8
-#define MTOUCHUSB_MAX_XC                0xff78
+#define MTOUCHUSB_MIN_XC                0x0
+#define MTOUCHUSB_MAX_XC                0x4000
 #define MTOUCHUSB_XC_FUZZ               0x0
 #define MTOUCHUSB_XC_FLAT               0x0
 #define MTOUCHUSB_MIN_YC                0x0
-#define MTOUCHUSB_MAX_YC                0xff78
+#define MTOUCHUSB_MAX_YC                0x4000
 #define MTOUCHUSB_YC_FUZZ               0x0
 #define MTOUCHUSB_YC_FLAT               0x0
-#define MTOUCHUSB_ASYC_REPORT           1
-#define MTOUCHUSB_REPORT_SIZE_DATA      11
+
+#define MTOUCHUSB_ASYNC_REPORT          1
+#define MTOUCHUSB_RESET                 7
+#define MTOUCHUSB_REPORT_DATA_SIZE      11
 #define MTOUCHUSB_REQ_CTRLLR_ID         10
 
-#define MTOUCHUSB_GET_XC(data)          (data[4]<<8 | data[3])
-#define MTOUCHUSB_GET_YC(data)          (data[6]<<8 | data[5])
+#define MTOUCHUSB_GET_XC(data)          (data[8]<<8 | data[7])
+#define MTOUCHUSB_GET_YC(data)          (data[10]<<8 | data[9])
 #define MTOUCHUSB_GET_TOUCHED(data)     ((data[2] & 0x40) ? 1:0)
 
-#define DRIVER_VERSION "v0.1"
+#define DRIVER_VERSION "v1.4"
 #define DRIVER_AUTHOR "Todd E. Johnson, tejohnson@yahoo.com"
-#define DRIVER_DESC "Microtouch USB HID Touchscreen Driver"
+#define DRIVER_DESC "3M USB Touchscreen Driver"
+#define DRIVER_LICENSE "GPL"
 
 struct mtouch_usb {
         unsigned char *data;
@@ -76,11 +85,9 @@
         char phys[64];
 };
 
-static __s32 vendor=-1, product=-1;
-
 static struct usb_device_id mtouchusb_devices [] = {
-        { USB_DEVICE(0x0596, 0x0001) }, /* 3M (Formerly MicroTouch) 14-206 */
-        { }                             /* Terminating entry */
+        { USB_DEVICE(0x0596, 0x0001) },
+        { }
 };
 
 static void mtouchusb_irq(struct urb *urb, struct pt_regs *regs)
@@ -135,8 +142,10 @@
 
         mtouch->irq->dev = mtouch->udev;
 
-        if (usb_submit_urb (mtouch->irq, GFP_ATOMIC))
+        if (usb_submit_urb (mtouch->irq, GFP_ATOMIC)) {
+                mtouch->open--;
                 return -EIO;
+        }
 
         return 0;
 }
@@ -153,7 +162,7 @@
 {
         dbg("%s - called", __FUNCTION__);
 
-        mtouch->data = usb_buffer_alloc(udev, MTOUCHUSB_REPORT_SIZE_DATA,
+        mtouch->data = usb_buffer_alloc(udev, MTOUCHUSB_REPORT_DATA_SIZE,
                                         SLAB_ATOMIC, &mtouch->data_dma);
 
         if (!mtouch->data)
@@ -167,7 +176,7 @@
         dbg("%s - called", __FUNCTION__);
 
         if (mtouch->data)
-                usb_buffer_free(udev, MTOUCHUSB_REPORT_SIZE_DATA,
+                usb_buffer_free(udev, MTOUCHUSB_REPORT_DATA_SIZE,
                                 mtouch->data, mtouch->data_dma);
 }
 
@@ -180,41 +189,8 @@
         char path[64];
         char *buf;
         int nRet;
-        int ix;
-        char valid_device = 0;
 
         dbg("%s - called", __FUNCTION__);
-        if (vendor != -1 && product != -1) {
-                info("%s - User specified USB Touch -- Vend:Prod - %x:%x",
-                     __FUNCTION__, vendor, product);
-        }
-
-        for (ix = 0; ix < sizeof (mtouchusb_devices) /
-             sizeof (struct usb_device_id); ix++) {
-                if ((udev->descriptor.idVendor ==
-                     mtouchusb_devices [ix].idVendor) &&
-                     (udev->descriptor.idProduct ==
-                     mtouchusb_devices [ix].idProduct)) {
-                        valid_device = 1;
-                        break;
-                }
-        }
-
-        if (udev->descriptor.idVendor == vendor &&
-            udev->descriptor.idProduct == product) {  /* User specified */
-                valid_device = 1;
-        }
-
-        if (!valid_device) {
-                err("%s - No valid device!", __FUNCTION__);
-                return -EIO;
-        }
-
-        if (udev->descriptor.bNumConfigurations != 1) {
-                err("%s -  Only one device configuration is supported.",
-                    __FUNCTION__);
-                return -EIO;
-        }
 
         dbg("%s - setting interface", __FUNCTION__);
         interface = intf->cur_altsetting;
@@ -222,11 +198,6 @@
         dbg("%s - setting endpoint", __FUNCTION__);
         endpoint = &interface->endpoint[0].desc;
 
-        if (interface->desc.bNumEndpoints != 1) {
-                err("%s - Only one endpoint is supported.", __FUNCTION__);
-                return -EIO;
-        }
-
         if (!(mtouch = kmalloc (sizeof (struct mtouch_usb), GFP_KERNEL))) {
                 err("%s - Out of memory.", __FUNCTION__);
                 return -ENOMEM;
@@ -266,8 +237,8 @@
         mtouch->input.absmax[ABS_X] =  MTOUCHUSB_MAX_XC;
         mtouch->input.absfuzz[ABS_X] = MTOUCHUSB_XC_FUZZ;
         mtouch->input.absflat[ABS_X] = MTOUCHUSB_XC_FLAT;
-        mtouch->input.absmin[ABS_Y] =  MTOUCHUSB_MAX_YC;
-        mtouch->input.absmax[ABS_Y] =  MTOUCHUSB_MIN_YC;
+        mtouch->input.absmin[ABS_Y] =  MTOUCHUSB_MIN_YC;
+        mtouch->input.absmax[ABS_Y] =  MTOUCHUSB_MAX_YC;
         mtouch->input.absfuzz[ABS_Y] = MTOUCHUSB_YC_FUZZ;
         mtouch->input.absflat[ABS_Y] = MTOUCHUSB_YC_FLAT;
 
@@ -290,15 +261,15 @@
         kfree(buf);
 
         nRet = usb_control_msg(mtouch->udev,
-                               usb_rcvctrlpipe(udev, 0x80),
-                               USB_REQ_GET_CONFIGURATION,
-                               USB_DIR_IN | USB_TYPE_STANDARD | USB_RECIP_DEVICE,
+                               usb_rcvctrlpipe(udev, 0),
+                               MTOUCHUSB_RESET,
+                               USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
+                               1,
                                0,
-                               0x81,
                                NULL,
                                0,
                                HZ * USB_CTRL_SET_TIMEOUT);
-        dbg("%s - usb_control_msg - USB_REQ_GET_CONFIGURATION - bytes|err: %d",
+        dbg("%s - usb_control_msg - MTOUCHUSB_RESET - bytes|err: %d",
             __FUNCTION__, nRet);
 
         dbg("%s - usb_alloc_urb: mtouch->irq", __FUNCTION__);
@@ -315,7 +286,7 @@
                          mtouch->udev,
                          usb_rcvintpipe(mtouch->udev, 0x81),
                          mtouch->data,
-                         MTOUCHUSB_REPORT_SIZE_DATA,
+                         MTOUCHUSB_REPORT_DATA_SIZE,
                          mtouchusb_irq,
                          mtouch,
                          endpoint->bInterval);
@@ -324,15 +295,15 @@
         input_register_device(&mtouch->input);
 
         nRet = usb_control_msg(mtouch->udev,
-                               usb_rcvctrlpipe(udev, 0x80),
-                               MTOUCHUSB_ASYC_REPORT,
+                               usb_rcvctrlpipe(udev, 0),
+                               MTOUCHUSB_ASYNC_REPORT,
                                USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
-                               MTOUCHUSB_ASYC_REPORT,
-                               MTOUCHUSB_ASYC_REPORT,
+                               1,
+                               1,
                                NULL,
                                0,
                                HZ * USB_CTRL_SET_TIMEOUT);
-        dbg("%s - usb_control_msg - MTOUCHUSB_ASYC_REPORT - bytes|err: %d",
+        dbg("%s - usb_control_msg - MTOUCHUSB_ASYNC_REPORT - bytes|err: %d",
             __FUNCTION__, nRet);
 
         printk(KERN_INFO "input: %s on %s\n", mtouch->name, path);
@@ -383,9 +354,3 @@
 MODULE_AUTHOR( DRIVER_AUTHOR );
 MODULE_DESCRIPTION( DRIVER_DESC );
 MODULE_LICENSE("GPL");
-MODULE_PARM(vendor, "i");
-MODULE_PARM_DESC(vendor, "User specified USB idVendor");
-MODULE_PARM(product, "i");
-MODULE_PARM_DESC(product, "User specified USB idProduct");
-
-
diff -Nru a/drivers/usb/input/touchkitusb.c b/drivers/usb/input/touchkitusb.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/drivers/usb/input/touchkitusb.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,310 @@
+/******************************************************************************
+ * touchkitusb.c  --  Driver for eGalax TouchKit USB Touchscreens
+ *
+ * Copyright (C) 2004 by Daniel Ritz
+ * Copyright (C) by Todd E. Johnson (mtouchusb.c)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * Based upon mtouchusb.c
+ *
+ *****************************************************************************/
+
+//#define DEBUG
+
+#include <linux/config.h>
+#include <linux/kernel.h>
+#include <linux/slab.h>
+#include <linux/input.h>
+#include <linux/module.h>
+#include <linux/init.h>
+
+#if !defined(DEBUG) && defined(CONFIG_USB_DEBUG)
+#define DEBUG
+#endif
+#include <linux/usb.h>
+
+
+#define TOUCHKIT_MIN_XC			0x0
+#define TOUCHKIT_MAX_XC			0x07ff
+#define TOUCHKIT_XC_FUZZ		0x0
+#define TOUCHKIT_XC_FLAT		0x0
+#define TOUCHKIT_MIN_YC			0x0
+#define TOUCHKIT_MAX_YC			0x07ff
+#define TOUCHKIT_YC_FUZZ		0x0
+#define TOUCHKIT_YC_FLAT		0x0
+#define TOUCHKIT_REPORT_DATA_SIZE	8
+
+#define TOUCHKIT_DOWN			0x01
+#define TOUCHKIT_POINT_TOUCH		0x81
+#define TOUCHKIT_POINT_NOTOUCH		0x80
+
+#define TOUCHKIT_GET_TOUCHED(dat)	((((dat)[0]) & TOUCHKIT_DOWN) ? 1 : 0)
+#define TOUCHKIT_GET_X(dat)		(((dat)[3] << 7) | (dat)[4])
+#define TOUCHKIT_GET_Y(dat)		(((dat)[1] << 7) | (dat)[2])
+
+#define DRIVER_VERSION			"v0.1"
+#define DRIVER_AUTHOR			"Daniel Ritz <daniel.ritz@gmx.ch>"
+#define DRIVER_DESC			"eGalax TouchKit USB HID Touchscreen Driver"
+
+struct touchkit_usb {
+	unsigned char *data;
+	dma_addr_t data_dma;
+	struct urb *irq;
+	struct usb_device *udev;
+	struct input_dev input;
+	int open;
+	char name[128];
+	char phys[64];
+};
+
+static struct usb_device_id touchkit_devices[] = {
+	{USB_DEVICE(0x3823, 0x0001)},
+	{USB_DEVICE(0x0eef, 0x0001)},
+	{}
+};
+
+static void touchkit_irq(struct urb *urb, struct pt_regs *regs)
+{
+	struct touchkit_usb *touchkit = urb->context;
+	int retval;
+
+	switch (urb->status) {
+	case 0:
+		/* success */
+		break;
+	case -ETIMEDOUT:
+		/* this urb is timing out */
+		dbg("%s - urb timed out - was the device unplugged?",
+		    __FUNCTION__);
+		return;
+	case -ECONNRESET:
+	case -ENOENT:
+	case -ESHUTDOWN:
+		/* this urb is terminated, clean up */
+		dbg("%s - urb shutting down with status: %d",
+		    __FUNCTION__, urb->status);
+		return;
+	default:
+		dbg("%s - nonzero urb status received: %d",
+		    __FUNCTION__, urb->status);
+		goto exit;
+	}
+
+	input_regs(&touchkit->input, regs);
+	input_report_key(&touchkit->input, BTN_TOUCH,
+	                 TOUCHKIT_GET_TOUCHED(touchkit->data));
+	input_report_abs(&touchkit->input, ABS_X,
+	                 TOUCHKIT_GET_X(touchkit->data));
+	input_report_abs(&touchkit->input, ABS_Y,
+	                 TOUCHKIT_GET_Y(touchkit->data));
+	input_sync(&touchkit->input);
+
+exit:
+	retval = usb_submit_urb(urb, GFP_ATOMIC);
+	if (retval)
+		err("%s - usb_submit_urb failed with result: %d",
+		    __FUNCTION__, retval);
+}
+
+static int touchkit_open(struct input_dev *input)
+{
+	struct touchkit_usb *touchkit = input->private;
+
+	if (touchkit->open++)
+		return 0;
+
+	touchkit->irq->dev = touchkit->udev;
+
+	if (usb_submit_urb(touchkit->irq, GFP_ATOMIC)) {
+		touchkit->open--;
+		return -EIO;
+	}
+
+	return 0;
+}
+
+static void touchkit_close(struct input_dev *input)
+{
+	struct touchkit_usb *touchkit = input->private;
+
+	if (!--touchkit->open)
+		usb_unlink_urb(touchkit->irq);
+}
+
+static int touchkit_alloc_buffers(struct usb_device *udev,
+				  struct touchkit_usb *touchkit)
+{
+	touchkit->data = usb_buffer_alloc(udev, TOUCHKIT_REPORT_DATA_SIZE,
+	                                  SLAB_ATOMIC, &touchkit->data_dma);
+
+	if (!touchkit->data)
+		return -1;
+
+	return 0;
+}
+
+static void touchkit_free_buffers(struct usb_device *udev,
+				  struct touchkit_usb *touchkit)
+{
+	if (touchkit->data)
+		usb_buffer_free(udev, TOUCHKIT_REPORT_DATA_SIZE,
+		                touchkit->data, touchkit->data_dma);
+}
+
+static int touchkit_probe(struct usb_interface *intf,
+			  const struct usb_device_id *id)
+{
+	int ret;
+	struct touchkit_usb *touchkit;
+	struct usb_host_interface *interface;
+	struct usb_endpoint_descriptor *endpoint;
+	struct usb_device *udev = interface_to_usbdev(intf);
+	char path[64];
+	char *buf;
+
+	interface = intf->cur_altsetting;
+	endpoint = &interface->endpoint[0].desc;
+
+	touchkit = kmalloc(sizeof(struct touchkit_usb), GFP_KERNEL);
+	if (!touchkit)
+		return -ENOMEM;
+
+	memset(touchkit, 0, sizeof(struct touchkit_usb));
+	touchkit->udev = udev;
+
+	if (touchkit_alloc_buffers(udev, touchkit)) {
+		ret = -ENOMEM;
+		goto out_free;
+	}
+
+	touchkit->input.private = touchkit;
+	touchkit->input.open = touchkit_open;
+	touchkit->input.close = touchkit_close;
+
+	usb_make_path(udev, path, 64);
+	sprintf(touchkit->phys, "%s/input0", path);
+
+	touchkit->input.name = touchkit->name;
+	touchkit->input.phys = touchkit->phys;
+	touchkit->input.id.bustype = BUS_USB;
+	touchkit->input.id.vendor = udev->descriptor.idVendor;
+	touchkit->input.id.product = udev->descriptor.idProduct;
+	touchkit->input.id.version = udev->descriptor.bcdDevice;
+	touchkit->input.dev = &intf->dev;
+
+	touchkit->input.evbit[0] = BIT(EV_KEY) | BIT(EV_ABS);
+	touchkit->input.absbit[0] = BIT(ABS_X) | BIT(ABS_Y);
+	touchkit->input.keybit[LONG(BTN_TOUCH)] = BIT(BTN_TOUCH);
+
+	/* Used to Scale Compensated Data */
+	touchkit->input.absmin[ABS_X] = TOUCHKIT_MIN_XC;
+	touchkit->input.absmax[ABS_X] = TOUCHKIT_MAX_XC;
+	touchkit->input.absfuzz[ABS_X] = TOUCHKIT_XC_FUZZ;
+	touchkit->input.absflat[ABS_X] = TOUCHKIT_XC_FLAT;
+	touchkit->input.absmin[ABS_Y] = TOUCHKIT_MIN_YC;
+	touchkit->input.absmax[ABS_Y] = TOUCHKIT_MAX_YC;
+	touchkit->input.absfuzz[ABS_Y] = TOUCHKIT_YC_FUZZ;
+	touchkit->input.absflat[ABS_Y] = TOUCHKIT_YC_FLAT;
+
+	buf = kmalloc(63, GFP_KERNEL);
+	if (!buf) {
+		ret = -ENOMEM;
+		goto out_free_buffers;
+	}
+
+	if (udev->descriptor.iManufacturer &&
+	    usb_string(udev, udev->descriptor.iManufacturer, buf, 63) > 0)
+		strcat(touchkit->name, buf);
+	if (udev->descriptor.iProduct &&
+	    usb_string(udev, udev->descriptor.iProduct, buf, 63) > 0)
+		sprintf(touchkit->name, "%s %s", touchkit->name, buf);
+
+	if (!strlen(touchkit->name))
+		sprintf(touchkit->name, "USB Touchscreen %04x:%04x",
+		        touchkit->input.id.vendor, touchkit->input.id.product);
+
+	kfree(buf);
+
+	touchkit->irq = usb_alloc_urb(0, GFP_KERNEL);
+	if (!touchkit->irq) {
+		dbg("%s - usb_alloc_urb failed: touchkit->irq", __FUNCTION__);
+		ret = -ENOMEM;
+		goto out_free_buffers;
+	}
+
+	usb_fill_int_urb(touchkit->irq, touchkit->udev,
+	                 usb_rcvintpipe(touchkit->udev, 0x81),
+	                 touchkit->data, TOUCHKIT_REPORT_DATA_SIZE,
+	                 touchkit_irq, touchkit, endpoint->bInterval);
+
+	input_register_device(&touchkit->input);
+
+	printk(KERN_INFO "input: %s on %s\n", touchkit->name, path);
+	usb_set_intfdata(intf, touchkit);
+
+	return 0;
+
+out_free_buffers:
+	touchkit_free_buffers(udev, touchkit);
+out_free:
+	kfree(touchkit);
+	return ret;
+}
+
+static void touchkit_disconnect(struct usb_interface *intf)
+{
+	struct touchkit_usb *touchkit = usb_get_intfdata(intf);
+
+	dbg("%s - called", __FUNCTION__);
+
+	if (!touchkit)
+		return;
+
+	dbg("%s - touchkit is initialized, cleaning up", __FUNCTION__);
+	usb_set_intfdata(intf, NULL);
+	input_unregister_device(&touchkit->input);
+	usb_unlink_urb(touchkit->irq);
+	usb_free_urb(touchkit->irq);
+	touchkit_free_buffers(interface_to_usbdev(intf), touchkit);
+	kfree(touchkit);
+}
+
+MODULE_DEVICE_TABLE(usb, touchkit_devices);
+
+static struct usb_driver touchkit_driver = {
+	.owner		= THIS_MODULE,
+	.name		= "touchkitusb",
+	.probe		= touchkit_probe,
+	.disconnect	= touchkit_disconnect,
+	.id_table	= touchkit_devices,
+};
+
+static int __init touchkit_init(void)
+{
+	return usb_register(&touchkit_driver);
+}
+
+static void __exit touchkit_cleanup(void)
+{
+	usb_deregister(&touchkit_driver);
+}
+
+module_init(touchkit_init);
+module_exit(touchkit_cleanup);
+
+MODULE_AUTHOR(DRIVER_AUTHOR);
+MODULE_DESCRIPTION(DRIVER_DESC);
+MODULE_LICENSE("GPL");
diff -Nru a/drivers/usb/input/wacom.c b/drivers/usb/input/wacom.c
--- a/drivers/usb/input/wacom.c	Sun May 16 01:18:33 2004
+++ b/drivers/usb/input/wacom.c	Sun May 16 01:18:33 2004
@@ -527,7 +527,7 @@
 		     __FUNCTION__, retval);
 }
 
-struct wacom_features wacom_features[] = {
+static struct wacom_features wacom_features[] = {
 	{ "Wacom Penpartner",    7,   5040,  3780,  255, 32, 0, wacom_penpartner_irq },
         { "Wacom Graphire",      8,  10206,  7422,  511, 32, 1, wacom_graphire_irq },
 	{ "Wacom Graphire2 4x5", 8,  10206,  7422,  511, 32, 1, wacom_graphire_irq },
@@ -556,7 +556,7 @@
  	{ }
 };
 
-struct usb_device_id wacom_ids[] = {
+static struct usb_device_id wacom_ids[] = {
 	{ USB_DEVICE(USB_VENDOR_ID_WACOM, 0x00) },
 	{ USB_DEVICE(USB_VENDOR_ID_WACOM, 0x10) },
 	{ USB_DEVICE(USB_VENDOR_ID_WACOM, 0x11) },
diff -Nru a/drivers/usb/media/dsbr100.c b/drivers/usb/media/dsbr100.c
--- a/drivers/usb/media/dsbr100.c	Sun May 16 01:18:34 2004
+++ b/drivers/usb/media/dsbr100.c	Sun May 16 01:18:34 2004
@@ -33,6 +33,9 @@
 
  History:
 
+ Version 0.40:
+  Markus: Updates for 2.6.x kernels, code layout changes, name sanitizing
+
  Version 0.30:
  	Markus: Updates for 2.5.x kernel and more ISO compliant source
 
@@ -75,13 +78,17 @@
 /*
  * Version Information
  */
-#define DRIVER_VERSION "v0.30"
+#define DRIVER_VERSION "v0.40"
 #define DRIVER_AUTHOR "Markus Demleitner <msdemlei@tucana.harvard.edu>"
 #define DRIVER_DESC "D-Link DSB-R100 USB FM radio driver"
 
 #define DSB100_VENDOR 0x04b4
 #define DSB100_PRODUCT 0x1002
 
+/* Commands the device appears to understand */
+#define DSB100_TUNE 1
+#define DSB100_ONOFF 2
+
 #define TB_LEN 16
 
 /* Frequency limits in MHz -- these are European values.  For Japanese
@@ -102,15 +109,19 @@
 static int radio_nr = -1;
 MODULE_PARM(radio_nr, "i");
 
-typedef struct
-{
-	struct usb_device *dev;
+/* Data for one (physical) device */
+typedef struct {
+	struct usb_device *usbdev;
+	struct video_device *videodev;
 	unsigned char transfer_buffer[TB_LEN];
 	int curfreq;
 	int stereo;
-} usb_dsbr100;
+	int users;
+	int removed;
+} dsbr100_device;
 
 
+/* File system interface */
 static struct file_operations usb_dsbr100_fops = {
 	.owner =	THIS_MODULE,
 	.open =		usb_dsbr100_open,
@@ -118,65 +129,84 @@
 	.ioctl =        usb_dsbr100_ioctl,
 	.llseek =       no_llseek,
 };
-static struct video_device usb_dsbr100_radio=
+
+/* V4L interface */
+static struct video_device dsbr100_videodev_template=
 {
 	.owner =	THIS_MODULE,
 	.name =		"D-Link DSB-R 100",
 	.type =		VID_TYPE_TUNER,
 	.hardware =	VID_HARDWARE_AZTECH,
 	.fops =         &usb_dsbr100_fops,
+	.release = video_device_release,
 };
 
-static int users = 0;
-
-static struct usb_device_id usb_dsbr100_table [] = {
+static struct usb_device_id usb_dsbr100_device_table [] = {
 	{ USB_DEVICE(DSB100_VENDOR, DSB100_PRODUCT) },
 	{ }						/* Terminating entry */
 };
 
-MODULE_DEVICE_TABLE (usb, usb_dsbr100_table);
+MODULE_DEVICE_TABLE (usb, usb_dsbr100_device_table);
 
+/* USB subsystem interface */
 static struct usb_driver usb_dsbr100_driver = {
 	.owner =	THIS_MODULE,
 	.name =		"dsbr100",
 	.probe =	usb_dsbr100_probe,
 	.disconnect =	usb_dsbr100_disconnect,
-	.id_table =	usb_dsbr100_table,
+	.id_table =	usb_dsbr100_device_table,
 };
 
+/* Low-level device interface begins here */
 
-static int dsbr100_start(usb_dsbr100 *radio)
+/* switch on radio */
+static int dsbr100_start(dsbr100_device *radio)
 {
-	if (usb_control_msg(radio->dev, usb_rcvctrlpipe(radio->dev, 0),
-		0x00, 0xC0, 0x00, 0xC7, radio->transfer_buffer, 8, 300)<0 ||
-	    usb_control_msg(radio->dev, usb_rcvctrlpipe(radio->dev, 0),
-		0x02, 0xC0, 0x01, 0x00, radio->transfer_buffer, 8, 300)<0)
+	if (usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0),
+			USB_REQ_GET_STATUS, 
+			USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN,
+			0x00, 0xC7, radio->transfer_buffer, 8, 300)<0 ||
+	usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0),
+			DSB100_ONOFF, 
+			USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN,
+			0x01, 0x00, radio->transfer_buffer, 8, 300)<0)
 		return -1;
 	return (radio->transfer_buffer)[0];
 }
 
 
-static int dsbr100_stop(usb_dsbr100 *radio)
+/* switch off radio */
+static int dsbr100_stop(dsbr100_device *radio)
 {
-	if (usb_control_msg(radio->dev, usb_rcvctrlpipe(radio->dev, 0),
-		0x00, 0xC0, 0x16, 0x1C, radio->transfer_buffer, 8, 300)<0 ||
-	    usb_control_msg(radio->dev, usb_rcvctrlpipe(radio->dev, 0),
-		0x02, 0xC0, 0x00, 0x00, radio->transfer_buffer, 8, 300)<0)
+	if (usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0),
+			USB_REQ_GET_STATUS, 
+			USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN,
+			0x16, 0x1C, radio->transfer_buffer, 8, 300)<0 ||
+	usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0),
+			DSB100_ONOFF, 
+			USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN,
+			0x00, 0x00, radio->transfer_buffer, 8, 300)<0)
 		return -1;
 	return (radio->transfer_buffer)[0];
 }
 
-
-static int dsbr100_setfreq(usb_dsbr100 *radio, int freq)
+/* set a frequency, freq is defined by v4l's TUNER_LOW, i.e. 1/16th kHz */
+static int dsbr100_setfreq(dsbr100_device *radio, int freq)
 {
 	freq = (freq/16*80)/1000+856;
-	if (usb_control_msg(radio->dev, usb_rcvctrlpipe(radio->dev, 0),
-		0x01, 0xC0, (freq>>8)&0x00ff, freq&0xff, 
-		radio->transfer_buffer, 8, 300)<0 ||
-	    usb_control_msg(radio->dev, usb_rcvctrlpipe(radio->dev, 0),
-		0x00, 0xC0, 0x96, 0xB7, radio->transfer_buffer, 8, 300)<0 ||
-	    usb_control_msg(radio->dev, usb_rcvctrlpipe(radio->dev, 0),
-		0x00, 0xC0, 0x00, 0x24, radio->transfer_buffer, 8, 300)<0) {
+	if (usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0),
+			DSB100_TUNE, 
+			USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN,
+			(freq>>8)&0x00ff, freq&0xff, 
+			radio->transfer_buffer, 8, 300)<0 ||
+	   usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0),
+		 	USB_REQ_GET_STATUS, 
+			USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN,
+			0x96, 0xB7, radio->transfer_buffer, 8, 300)<0 ||
+	usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0),
+			USB_REQ_GET_STATUS, 
+			USB_TYPE_VENDOR | USB_RECIP_DEVICE |  USB_DIR_IN,
+			0x00, 0x24, radio->transfer_buffer, 8, 300)<0) {
 		radio->stereo = -1;
 		return -1;
 	}
@@ -184,61 +214,91 @@
 	return (radio->transfer_buffer)[0];
 }
 
-static void dsbr100_getstat(usb_dsbr100 *radio)
-{
-	if (usb_control_msg(radio->dev, usb_rcvctrlpipe(radio->dev, 0),
-		0x00, 0xC0, 0x00 , 0x24, radio->transfer_buffer, 8, 300)<0)
+/* return the device status.  This is, in effect, just whether it
+sees a stereo signal or not.  Pity. */
+static void dsbr100_getstat(dsbr100_device *radio)
+{
+	if (usb_control_msg(radio->usbdev, usb_rcvctrlpipe(radio->usbdev, 0),
+		USB_REQ_GET_STATUS, 
+		USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN,
+		0x00 , 0x24, radio->transfer_buffer, 8, 300)<0)
 		radio->stereo = -1;
 	else
 		radio->stereo = ! (radio->transfer_buffer[0]&0x01);
 }
 
 
+/* USB subsystem interface begins here */
+
+/* check if the device is present and register with v4l and
+usb if it is */
 static int usb_dsbr100_probe(struct usb_interface *intf, 
 			 const struct usb_device_id *id)
 {
-	usb_dsbr100 *radio;
+	dsbr100_device *radio;
 
-	if (!(radio = kmalloc(sizeof(usb_dsbr100),GFP_KERNEL)))
+	if (!(radio = kmalloc(sizeof(dsbr100_device), GFP_KERNEL)))
 		return -ENOMEM;
-	usb_dsbr100_radio.priv = radio;
-	radio->dev = interface_to_usbdev (intf);
+	if (!(radio->videodev = video_device_alloc())) {
+		kfree(radio);
+		return -ENOMEM;
+	}
+	memcpy(radio->videodev, &dsbr100_videodev_template, 
+		sizeof(dsbr100_videodev_template));
+	radio->removed = 0;
+	radio->users = 0;
+	radio->usbdev = interface_to_usbdev(intf);
 	radio->curfreq = FREQ_MIN*FREQ_MUL;
-	usb_set_intfdata (intf, radio);
+	video_set_drvdata(radio->videodev, radio);
+	if (video_register_device(radio->videodev, VFL_TYPE_RADIO,
+		radio_nr)) {
+		warn("Could not register video device");
+		video_device_release(radio->videodev);
+		kfree(radio);
+		return -EIO;
+	}
+	usb_set_intfdata(intf, radio);
 	return 0;
 }
 
+/* handle unplugging of the device, release data structures
+if nothing keeps us from doing it.  If something is still
+keeping us busy, the release callback of v4l will take care
+of releasing it.  stv680.c does not relase its private
+data, so I don't do this here either.  Checking out the
+code I'd expect I better did that, but if there's a memory
+leak here it's tiny (~50 bytes per disconnect) */
 static void usb_dsbr100_disconnect(struct usb_interface *intf)
 {
-	usb_dsbr100 *radio = usb_get_intfdata (intf);
+	dsbr100_device *radio = usb_get_intfdata(intf);
 
 	usb_set_intfdata (intf, NULL);
-
 	if (radio) {
-		lock_kernel();
-		if (users) {
-			unlock_kernel();
-			return;
+		video_unregister_device(radio->videodev);
+		radio->videodev = NULL;
+		if (radio->users) {
+			kfree(radio);
+		} else {
+			radio->removed = 1;
 		}
-		kfree(radio);
-		usb_dsbr100_radio.priv = NULL;
-		unlock_kernel();
 	}
 }
 
+
+/* Video for Linux interface */
+
 static int usb_dsbr100_do_ioctl(struct inode *inode, struct file *file,
 				unsigned int cmd, void *arg)
 {
-	struct video_device *dev = video_devdata(file);
-	usb_dsbr100 *radio=dev->priv;
+	dsbr100_device *radio=video_get_drvdata(video_devdata(file));
 
 	if (!radio)
-		return -EINVAL;
+		return -EIO;
 
-	switch(cmd)
-	{
+	switch(cmd) {
 		case VIDIOCGCAP: {
 			struct video_capability *v = arg;
+
 			memset(v, 0, sizeof(*v));
 			v->type = VID_TYPE_TUNER;
 			v->channels = 1;
@@ -248,6 +308,7 @@
 		}
 		case VIDIOCGTUNER: {
 			struct video_tuner *v = arg;
+
 			dsbr100_getstat(radio);
 			if(v->tuner)	/* Only 1 tuner */ 
 				return -EINVAL;
@@ -263,21 +324,21 @@
 		}
 		case VIDIOCSTUNER: {
 			struct video_tuner *v = arg;
+
 			if(v->tuner!=0)
 				return -EINVAL;
 			/* Only 1 tuner so no setting needed ! */
 			return 0;
 		}
-		case VIDIOCGFREQ:
-		{
+		case VIDIOCGFREQ: {
 			int *freq = arg;
+
 			if (radio->curfreq==-1)
 				return -EINVAL;
 			*freq = radio->curfreq;
 			return 0;
 		}
-		case VIDIOCSFREQ:
-		{
+		case VIDIOCSFREQ: {
 			int *freq = arg;
 
 			radio->curfreq = *freq;
@@ -287,6 +348,7 @@
 		}
 		case VIDIOCGAUDIO: {
 			struct video_audio *v = arg;
+
 			memset(v, 0, sizeof(*v));
 			v->flags |= VIDEO_AUDIO_MUTABLE;
 			v->mode = VIDEO_SOUND_STEREO;
@@ -297,9 +359,9 @@
 		}
 		case VIDIOCSAUDIO: {
 			struct video_audio *v = arg;
+
 			if (v->audio) 
 				return -EINVAL;
-
 			if (v->flags&VIDEO_AUDIO_MUTE) {
 				if (dsbr100_stop(radio)==-1)
 					warn("Radio did not respond properly");
@@ -322,64 +384,40 @@
 
 static int usb_dsbr100_open(struct inode *inode, struct file *file)
 {
-	struct video_device *dev = video_devdata(file);
-	usb_dsbr100 *radio=dev->priv;
+	dsbr100_device *radio=video_get_drvdata(video_devdata(file));
 
-	if (! radio) {
-		warn("Radio not initialised");
-		return -EAGAIN;
-	}
-	if(users)
-	{
-		warn("Radio in use");
-		return -EBUSY;
-	}
-	users++;
-	if (dsbr100_start(radio)<0)
+	radio->users = 1;
+	if (dsbr100_start(radio)<0) {
 		warn("Radio did not start up properly");
+		radio->users = 0;
+		return -EIO;
+	}
 	dsbr100_setfreq(radio, radio->curfreq);
 	return 0;
 }
 
 static int usb_dsbr100_close(struct inode *inode, struct file *file)
 {
-	struct video_device *dev = video_devdata(file);
-	usb_dsbr100 *radio=dev->priv;
+	dsbr100_device *radio=video_get_drvdata(video_devdata(file));
 
 	if (!radio)
 		return -ENODEV;
-	users--;
+	radio->users = 0;
+	if (radio->removed) {
+		kfree(radio);
+	}
 	return 0;
 }
 
 static int __init dsbr100_init(void)
 {
-	int retval;
-	usb_dsbr100_radio.priv = NULL;
-	retval = usb_register(&usb_dsbr100_driver);
-	if (retval)
-		goto failed_usb_register;
-	retval = video_register_device(&usb_dsbr100_radio, VFL_TYPE_RADIO,
-				       radio_nr);
-	if (retval) {	
-		warn("Couldn't register video device");
-		goto failed_video_register;
-	}
+	int retval = usb_register(&usb_dsbr100_driver);
 	info(DRIVER_VERSION ":" DRIVER_DESC);
-	return 0;
-failed_video_register:
-	usb_deregister(&usb_dsbr100_driver);
-failed_usb_register:
 	return retval;
 }
 
 static void __exit dsbr100_exit(void)
 {
-	usb_dsbr100 *radio=usb_dsbr100_radio.priv;
-
-	if (radio)
-		dsbr100_stop(radio);
-	video_unregister_device(&usb_dsbr100_radio);
 	usb_deregister(&usb_dsbr100_driver);
 }
 
diff -Nru a/drivers/usb/media/ibmcam.c b/drivers/usb/media/ibmcam.c
--- a/drivers/usb/media/ibmcam.c	Sun May 16 01:18:34 2004
+++ b/drivers/usb/media/ibmcam.c	Sun May 16 01:18:34 2004
@@ -3647,7 +3647,7 @@
 {
 	struct usb_device *dev = interface_to_usbdev(intf);
 	struct uvd *uvd = NULL;
-	int i, nas, model=0, canvasX=0, canvasY=0;
+	int ix, i, nas, model=0, canvasX=0, canvasY=0;
 	int actInterface=-1, inactInterface=-1, maxPS=0;
 	__u8 ifnum = intf->altsetting->desc.bInterfaceNumber;
 	unsigned char video_ep = 0;
@@ -3718,7 +3718,7 @@
 	} while (0);
 
 	/* Validate found interface: must have one ISO endpoint */
-	nas = dev->actconfig->interface[ifnum]->num_altsetting;
+	nas = intf->num_altsetting;
 	if (debug > 0)
 		info("Number of alternate settings=%d.", nas);
 	if (nas < 2) {
@@ -3726,11 +3726,12 @@
 		return -ENODEV;
 	}
 	/* Validate all alternate settings */
-	for (i=0; i < nas; i++) {
+	for (ix=0; ix < nas; ix++) {
 		const struct usb_host_interface *interface;
 		const struct usb_endpoint_descriptor *endpoint;
 
-		interface = &dev->actconfig->interface[ifnum]->altsetting[i];
+		interface = &intf->altsetting[ix];
+		i = interface->desc.bAlternateSetting;
 		if (interface->desc.bNumEndpoints != 1) {
 			err("Interface %d. has %u. endpoints!",
 			    ifnum, (unsigned)(interface->desc.bNumEndpoints));
diff -Nru a/drivers/usb/media/konicawc.c b/drivers/usb/media/konicawc.c
--- a/drivers/usb/media/konicawc.c	Sun May 16 01:18:33 2004
+++ b/drivers/usb/media/konicawc.c	Sun May 16 01:18:33 2004
@@ -381,9 +381,15 @@
 	int i, errFlag;
 	struct konicawc *cam = (struct konicawc *)uvd->user_data;
 	int pktsz;
-	struct usb_host_interface *interface;
+	struct usb_interface *intf;
+	struct usb_host_interface *interface = NULL;
 
-	interface = &dev->actconfig->interface[uvd->iface]->altsetting[spd_to_iface[cam->speed]];
+	intf = usb_ifnum_to_if(dev, uvd->iface);
+	if (intf)
+		interface = usb_altnum_to_altsetting(intf,
+				spd_to_iface[cam->speed]);
+	if (!interface)
+		return -ENXIO;
 	pktsz = interface->endpoint[1].desc.wMaxPacketSize;
 	DEBUG(1, "pktsz = %d", pktsz);
 	if (!CAMERA_IS_OPERATIONAL(uvd)) {
@@ -721,7 +727,7 @@
 {
 	struct usb_device *dev = interface_to_usbdev(intf);
 	struct uvd *uvd = NULL;
-	int i, nas;
+	int ix, i, nas;
 	int actInterface=-1, inactInterface=-1, maxPS=0;
 	unsigned char video_ep = 0;
 
@@ -741,11 +747,12 @@
 		return -ENODEV;
 	}
 	/* Validate all alternate settings */
-	for (i=0; i < nas; i++) {
+	for (ix=0; ix < nas; ix++) {
 		const struct usb_host_interface *interface;
 		const struct usb_endpoint_descriptor *endpoint;
 
-		interface = &intf->altsetting[i];
+		interface = &intf->altsetting[ix];
+		i = interface->desc.bAlternateSetting;
 		if (interface->desc.bNumEndpoints != 2) {
 			err("Interface %d. has %u. endpoints!",
 			    interface->desc.bInterfaceNumber,
diff -Nru a/drivers/usb/media/ov511.c b/drivers/usb/media/ov511.c
--- a/drivers/usb/media/ov511.c	Sun May 16 01:18:34 2004
+++ b/drivers/usb/media/ov511.c	Sun May 16 01:18:34 2004
@@ -5603,8 +5603,16 @@
 
 	if (ov->bridge == BRG_OV518)
 	{
-		struct usb_interface *ifp = ov->dev->config[0].interface[0];
-		__u16 mxps = ifp->altsetting[7].endpoint[0].desc.wMaxPacketSize;
+		struct usb_interface *ifp;
+		struct usb_host_interface *alt;
+		__u16 mxps = 0;
+
+		ifp = usb_ifnum_to_if(ov->dev, 0);
+		if (ifp) {
+			alt = usb_altnum_to_altsetting(ifp, 7);
+			if (alt)
+				mxps = alt->endpoint[0].desc.wMaxPacketSize;
+		}
 
 		/* Some OV518s have packet numbering by default, some don't */
 		if (mxps == 897)
@@ -5805,7 +5813,7 @@
 	if (dev->descriptor.bNumConfigurations != 1)
 		return -ENODEV;
 
-	idesc = &intf->altsetting[0].desc;
+	idesc = &intf->cur_altsetting->desc;
 
 	if (idesc->bInterfaceClass != 0xFF)
 		return -ENODEV;
diff -Nru a/drivers/usb/media/pwc-if.c b/drivers/usb/media/pwc-if.c
--- a/drivers/usb/media/pwc-if.c	Sun May 16 01:18:36 2004
+++ b/drivers/usb/media/pwc-if.c	Sun May 16 01:18:36 2004
@@ -789,7 +789,8 @@
 	struct urb *urb;
 	int i, j, ret;
 
-	struct usb_host_interface *idesc;
+	struct usb_interface *intf;
+	struct usb_host_interface *idesc = NULL;
 
 	if (pdev == NULL)
 		return -EFAULT;
@@ -801,7 +802,9 @@
 	/* Get the current alternate interface, adjust packet size */
 	if (!udev->actconfig)
 		return -EFAULT;
-	idesc = &udev->actconfig->interface[0]->altsetting[pdev->valternate];
+	intf = usb_ifnum_to_if(udev, 0);
+	if (intf)
+		idesc = usb_altnum_to_altsetting(intf, pdev->valternate);
 	if (!idesc)
 		return -EFAULT;
 
diff -Nru a/drivers/usb/media/se401.c b/drivers/usb/media/se401.c
--- a/drivers/usb/media/se401.c	Sun May 16 01:18:34 2004
+++ b/drivers/usb/media/se401.c	Sun May 16 01:18:34 2004
@@ -1326,7 +1326,7 @@
         if (dev->descriptor.bNumConfigurations != 1)
                 return -ENODEV;
 
-        interface = &intf->altsetting[0].desc;
+        interface = &intf->cur_altsetting->desc;
 
         /* Is it an se401? */
         if (dev->descriptor.idVendor == 0x03e8 &&
diff -Nru a/drivers/usb/media/ultracam.c b/drivers/usb/media/ultracam.c
--- a/drivers/usb/media/ultracam.c	Sun May 16 01:18:34 2004
+++ b/drivers/usb/media/ultracam.c	Sun May 16 01:18:34 2004
@@ -95,7 +95,7 @@
  * 02-Nov-2000 First (mostly dummy) version.
  * 06-Nov-2000 Rewrote to dump all data into frame.
  */
-void ultracam_ProcessIsocData(struct uvd *uvd, struct usbvideo_frame *frame)
+static void ultracam_ProcessIsocData(struct uvd *uvd, struct usbvideo_frame *frame)
 {
 	int n;
 
@@ -513,7 +513,7 @@
 {
 	struct usb_device *dev = interface_to_usbdev(intf);
 	struct uvd *uvd = NULL;
-	int i, nas;
+	int ix, i, nas;
 	int actInterface=-1, inactInterface=-1, maxPS=0;
 	unsigned char video_ep = 0;
 
@@ -540,11 +540,12 @@
 		return -ENODEV;
 	}
 	/* Validate all alternate settings */
-	for (i=0; i < nas; i++) {
+	for (ix=0; ix < nas; ix++) {
 		const struct usb_host_interface *interface;
 		const struct usb_endpoint_descriptor *endpoint;
 
-		interface = &intf->altsetting[i];
+		interface = &intf->altsetting[ix];
+		i = interface->desc.bAlternateSetting;
 		if (interface->desc.bNumEndpoints != 1) {
 			err("Interface %d. has %u. endpoints!",
 			    interface->desc.bInterfaceNumber,
diff -Nru a/drivers/usb/media/vicam.c b/drivers/usb/media/vicam.c
--- a/drivers/usb/media/vicam.c	Sun May 16 01:18:34 2004
+++ b/drivers/usb/media/vicam.c	Sun May 16 01:18:34 2004
@@ -1303,7 +1303,7 @@
 
 	printk(KERN_INFO "ViCam based webcam connected\n");
 
-	interface = &intf->altsetting[0];
+	interface = intf->cur_altsetting;
 
 	DBG(KERN_DEBUG "Interface %d. has %u. endpoints!\n",
 	       interface->desc.bInterfaceNumber, (unsigned) (interface->desc.bNumEndpoints));
diff -Nru a/drivers/usb/media/w9968cf.c b/drivers/usb/media/w9968cf.c
--- a/drivers/usb/media/w9968cf.c	Sun May 16 01:18:36 2004
+++ b/drivers/usb/media/w9968cf.c	Sun May 16 01:18:36 2004
@@ -1578,7 +1578,7 @@
 
 	static struct i2c_adapter adap = {
 		.id =                I2C_ALGO_SMBUS | I2C_HW_SMBUS_W9968CF,
-		.class =             I2C_ADAP_CLASS_CAM_DIGITAL,
+		.class =             I2C_CLASS_CAM_DIGITAL,
 		.owner =             THIS_MODULE,
 		.client_register =   w9968cf_i2c_attach_inform,
 		.client_unregister = w9968cf_i2c_detach_inform,
diff -Nru a/drivers/usb/media/w9968cf.h b/drivers/usb/media/w9968cf.h
--- a/drivers/usb/media/w9968cf.h	Sun May 16 01:18:33 2004
+++ b/drivers/usb/media/w9968cf.h	Sun May 16 01:18:33 2004
@@ -189,8 +189,8 @@
 	VPP_UYVY_TO_RGBX = 0x08,
 };
 
-struct list_head w9968cf_dev_list; /* head of V4L registered cameras list */
-LIST_HEAD(w9968cf_dev_list);
+static struct list_head w9968cf_dev_list; /* head of V4L registered cameras list */
+static LIST_HEAD(w9968cf_dev_list);
 struct semaphore w9968cf_devlist_sem; /* semaphore for list traversal */
 
 /* Main device driver structure */
diff -Nru a/drivers/usb/misc/Kconfig b/drivers/usb/misc/Kconfig
--- a/drivers/usb/misc/Kconfig	Sun May 16 01:18:36 2004
+++ b/drivers/usb/misc/Kconfig	Sun May 16 01:18:36 2004
@@ -133,6 +133,18 @@
 	  To compile this driver as a module, choose M here: the
 	  module will be called speedtch.
 
+config USB_PHIDGETSERVO
+	tristate "USB PhidgetServo support"
+	depends on USB
+	help
+	  Say Y here if you want to connect an 1 or 4 Motor PhidgetServo 
+	  servo controller version 2.0 or 3.0.
+
+	  Phidgets Inc. has a web page at <http://www.phidgets.com/>.
+
+	  To compile this driver as a module, choose M here: the
+	  module will be called phidgetservo.
+
 config USB_TEST
 	tristate "USB testing driver (DEVELOPMENT)"
 	depends on USB && USB_DEVICEFS && EXPERIMENTAL
diff -Nru a/drivers/usb/misc/Makefile b/drivers/usb/misc/Makefile
--- a/drivers/usb/misc/Makefile	Sun May 16 01:18:35 2004
+++ b/drivers/usb/misc/Makefile	Sun May 16 01:18:35 2004
@@ -15,3 +15,4 @@
 obj-$(CONFIG_USB_TEST)		+= usbtest.o
 obj-$(CONFIG_USB_TIGL)		+= tiglusb.o
 obj-$(CONFIG_USB_USS720)	+= uss720.o
+obj-$(CONFIG_USB_PHIDGETSERVO)	+= phidgetservo.o
diff -Nru a/drivers/usb/misc/cytherm.c b/drivers/usb/misc/cytherm.c
--- a/drivers/usb/misc/cytherm.c	Sun May 16 01:18:36 2004
+++ b/drivers/usb/misc/cytherm.c	Sun May 16 01:18:36 2004
@@ -46,9 +46,6 @@
 static int cytherm_probe(struct usb_interface *interface, 
 			 const struct usb_device_id *id);
 static void cytherm_disconnect(struct usb_interface *interface);
-int vendor_command(struct usb_device *dev, unsigned char request, 
-		   unsigned char value, unsigned char index,
-		   void *buf, int size);
 
 
 /* usb specific object needed to register this driver with the usb subsystem */
@@ -71,9 +68,9 @@
 
 
 /* Send a vendor command to device */
-int vendor_command(struct usb_device *dev, unsigned char request, 
-		   unsigned char value, unsigned char index,
-		   void *buf, int size)
+static int vendor_command(struct usb_device *dev, unsigned char request, 
+			  unsigned char value, unsigned char index,
+			  void *buf, int size)
 {
 	return usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
 			       request, 
@@ -122,12 +119,12 @@
 	retval = vendor_command(cytherm->udev, WRITE_RAM, BRIGHTNESS, 
 				cytherm->brightness, buffer, 8);
 	if (retval)
-		dev_dbg(&led->udev->dev, "retval = %d\n", retval);
+		dev_dbg(&cytherm->udev->dev, "retval = %d\n", retval);
 	/* Inform µC that we have changed the brightness setting */
 	retval = vendor_command(cytherm->udev, WRITE_RAM, BRIGHTNESS_SEM,
 				0x01, buffer, 8);
 	if (retval)
-		dev_dbg(&led->udev->dev, "retval = %d\n", retval);
+		dev_dbg(&cytherm->udev->dev, "retval = %d\n", retval);
    
 	kfree(buffer);
    
@@ -161,13 +158,13 @@
 	/* read temperature */
 	retval = vendor_command(cytherm->udev, READ_RAM, TEMP, 0, buffer, 8);
 	if (retval)
-		dev_dbg(&led->udev->dev, "retval = %d\n", retval);
+		dev_dbg(&cytherm->udev->dev, "retval = %d\n", retval);
 	temp = buffer[1];
    
 	/* read sign */
 	retval = vendor_command(cytherm->udev, READ_RAM, SIGN, 0, buffer, 8);
 	if (retval)
-		dev_dbg(&led->udev->dev, "retval = %d\n", retval);
+		dev_dbg(&cytherm->udev->dev, "retval = %d\n", retval);
 	sign = buffer[1];
 
 	kfree(buffer);
@@ -205,7 +202,7 @@
 	/* check button */
 	retval = vendor_command(cytherm->udev, READ_RAM, BUTTON, 0, buffer, 8);
 	if (retval)
-		dev_dbg(&led->udev->dev, "retval = %d\n", retval);
+		dev_dbg(&cytherm->udev->dev, "retval = %d\n", retval);
    
 	retval = buffer[1];
 
@@ -242,7 +239,7 @@
 
 	retval = vendor_command(cytherm->udev, READ_PORT, 0, 0, buffer, 8);
 	if (retval)
-		dev_dbg(&led->udev->dev, "retval = %d\n", retval);
+		dev_dbg(&cytherm->udev->dev, "retval = %d\n", retval);
 
 	retval = buffer[1];
 
@@ -277,7 +274,7 @@
 	retval = vendor_command(cytherm->udev, WRITE_PORT, 0,
 				tmp, buffer, 8);
 	if (retval)
-		dev_dbg(&led->udev->dev, "retval = %d\n", retval);
+		dev_dbg(&cytherm->udev->dev, "retval = %d\n", retval);
 
 	kfree(buffer);
 
@@ -302,7 +299,7 @@
 
 	retval = vendor_command(cytherm->udev, READ_PORT, 1, 0, buffer, 8);
 	if (retval)
-		dev_dbg(&led->udev->dev, "retval = %d\n", retval);
+		dev_dbg(&cytherm->udev->dev, "retval = %d\n", retval);
    
 	retval = buffer[1];
 
@@ -337,7 +334,7 @@
 	retval = vendor_command(cytherm->udev, WRITE_PORT, 1,
 				tmp, buffer, 8);
 	if (retval)
-		dev_dbg(&led->udev->dev, "retval = %d\n", retval);
+		dev_dbg(&cytherm->udev->dev, "retval = %d\n", retval);
 
 	kfree(buffer);
 
diff -Nru a/drivers/usb/misc/emi26.c b/drivers/usb/misc/emi26.c
--- a/drivers/usb/misc/emi26.c	Sun May 16 01:18:34 2004
+++ b/drivers/usb/misc/emi26.c	Sun May 16 01:18:34 2004
@@ -226,7 +226,7 @@
 {
 }
 
-struct usb_driver emi26_driver = {
+static struct usb_driver emi26_driver = {
 	.owner		= THIS_MODULE,
 	.name		= "emi26 - firmware loader",
 	.probe		= emi26_probe,
diff -Nru a/drivers/usb/misc/emi26_fw.h b/drivers/usb/misc/emi26_fw.h
--- a/drivers/usb/misc/emi26_fw.h	Sun May 16 01:18:36 2004
+++ b/drivers/usb/misc/emi26_fw.h	Sun May 16 01:18:36 2004
@@ -17,7 +17,7 @@
  * any driver which includes this firmware, in whole or in part,
  * requires the inclusion of this statement.
  */
-INTEL_HEX_RECORD g_bitstream[]={
+static INTEL_HEX_RECORD g_bitstream[]={
 {  16, 0x8010, 0, {0xff,0xff,0xff,0xff,0xaa,0x99,0x55,0x66,0x30,0x00,0x80,0x01,0x00,0x00,0x00,0x07 } },
 {  16, 0x8020, 0, {0x30,0x01,0x60,0x01,0x00,0x00,0x00,0x0b,0x30,0x01,0x20,0x01,0x00,0x80,0x3f,0x2d } },
 {  16, 0x8030, 0, {0x30,0x00,0xc0,0x01,0x00,0x00,0x00,0x00,0x30,0x00,0x80,0x01,0x00,0x00,0x00,0x09 } },
@@ -4406,7 +4406,7 @@
  * any driver which includes this firmware, in whole or in part,
  * requires the inclusion of this statement.
  */
-INTEL_HEX_RECORD g_Firmware[] = {
+static INTEL_HEX_RECORD g_Firmware[] = {
 {   3,0x0000,0,{0x02,0x43,0x56} },
 {   3,0x0003,0,{0x02,0x4b,0xcd} },
 {   3,0x000b,0,{0x02,0x4b,0xd2} },
@@ -5669,7 +5669,7 @@
  * any driver which includes this firmware, in whole or in part,
  * requires the inclusion of this statement.
  */
-INTEL_HEX_RECORD g_Loader[] = {
+static INTEL_HEX_RECORD g_Loader[] = {
 {   3,0x0000,0,{0x02,0x03,0x1c} },
 {   3,0x0043,0,{0x02,0x04,0x00} },
 {  16,0x0100,0,{0x90,0x7f,0xe9,0xe0,0x24,0x5b,0x60,0x60,0x24,0x02,0x60,0x03,0x02,0x01,0xbe,0x90} },
diff -Nru a/drivers/usb/misc/emi62.c b/drivers/usb/misc/emi62.c
--- a/drivers/usb/misc/emi62.c	Sun May 16 01:18:36 2004
+++ b/drivers/usb/misc/emi62.c	Sun May 16 01:18:36 2004
@@ -265,7 +265,7 @@
 {
 }
 
-struct usb_driver emi62_driver = {
+static struct usb_driver emi62_driver = {
 	.owner		= THIS_MODULE,
 	.name		= "emi62 - firmware loader",
 	.probe		= emi62_probe,
diff -Nru a/drivers/usb/misc/emi62_fw_m.h b/drivers/usb/misc/emi62_fw_m.h
--- a/drivers/usb/misc/emi62_fw_m.h	Sun May 16 01:18:34 2004
+++ b/drivers/usb/misc/emi62_fw_m.h	Sun May 16 01:18:34 2004
@@ -3,7 +3,7 @@
  */
 /* generated Tue Jun 3 21:36:11 EEST 2003 */
 
-INTEL_HEX_RECORD g_emi62bs[]={
+static INTEL_HEX_RECORD g_emi62bs[]={
   16, 0x8010, 0, {0xff,0xff,0xff,0xff,0xaa,0x99,0x55,0x66,0x30,0x00,0x80,0x01,0x00,0x00,0x00,0x07 },
   16, 0x8020, 0, {0x30,0x01,0x60,0x01,0x00,0x00,0x00,0x0d,0x30,0x01,0x20,0x01,0x00,0x80,0x3f,0x2d },
   16, 0x8030, 0, {0x30,0x00,0xc0,0x01,0x00,0x00,0x00,0x00,0x30,0x00,0x80,0x01,0x00,0x00,0x00,0x09 },
@@ -6112,7 +6112,7 @@
 };
 // VERSION= 1.0.0.191
 // DATE= 2002oct28
-INTEL_HEX_RECORD g_HexMidiFw62[] = {
+static INTEL_HEX_RECORD g_HexMidiFw62[] = {
    3,0x0000,0,{0x02,0x46,0xb9},
    3,0x0003,0,{0x02,0x0f,0xfd},
    3,0x000b,0,{0x02,0x4e,0x0f},
@@ -8640,7 +8640,8 @@
 /*
 VERSION=1.04.062
 DATE=16.10.2002  
-*/INTEL_HEX_RECORD g_emi62_loader[] = {
+*/
+static INTEL_HEX_RECORD g_emi62_loader[] = {
    3,0x0000,0,{0x02,0x02,0x87},
    3,0x0043,0,{0x02,0x04,0x00},
   16,0x0100,0,{0xe4,0xff,0xfe,0xc2,0x20,0xd2,0xe8,0x43,0xd8,0x20,0x90,0x7f,0xab,0x74,0xff,0xf0},
diff -Nru a/drivers/usb/misc/emi62_fw_s.h b/drivers/usb/misc/emi62_fw_s.h
--- a/drivers/usb/misc/emi62_fw_s.h	Sun May 16 01:18:34 2004
+++ b/drivers/usb/misc/emi62_fw_s.h	Sun May 16 01:18:34 2004
@@ -3,7 +3,7 @@
  */
 /* generated Tue Apr 15 21:59:42 EEST 2003 */
 
-INTEL_HEX_RECORD g_emi62bs[]={
+static INTEL_HEX_RECORD g_emi62bs[]={
  {16, 0x8010, 0, {0xff,0xff,0xff,0xff,0xaa,0x99,0x55,0x66,0x30,0x00,0x80,0x01,0x00,0x00,0x00,0x07 }},
  {16, 0x8020, 0, {0x30,0x01,0x60,0x01,0x00,0x00,0x00,0x0d,0x30,0x01,0x20,0x01,0x00,0x80,0x3f,0x2d }},
  {16, 0x8030, 0, {0x30,0x00,0xc0,0x01,0x00,0x00,0x00,0x00,0x30,0x00,0x80,0x01,0x00,0x00,0x00,0x09 }},
@@ -6112,7 +6112,7 @@
 };
 // VERSION= 1.0.0.191
 // DATE= 2002oct28
-INTEL_HEX_RECORD g_HexSpdifFw62[] = {
+static INTEL_HEX_RECORD g_HexSpdifFw62[] = {
   {3,0x0000,0,{0x02,0x45,0xf9}},
  { 3,0x0003,0,{0x02,0x0f,0xfd}},
  { 3,0x000b,0,{0x02,0x4d,0x9b}},
@@ -8623,7 +8623,8 @@
 /*
 VERSION=1.04.062
 DATE=16.10.2002  
-*/INTEL_HEX_RECORD g_emi62_loader[] = {
+*/
+static INTEL_HEX_RECORD g_emi62_loader[] = {
  { 3,0x0000,0,{0x02,0x02,0x87}},
  { 3,0x0043,0,{0x02,0x04,0x00}},
  {16,0x0100,0,{0xe4,0xff,0xfe,0xc2,0x20,0xd2,0xe8,0x43,0xd8,0x20,0x90,0x7f,0xab,0x74,0xff,0xf0}},
diff -Nru a/drivers/usb/misc/legousbtower.c b/drivers/usb/misc/legousbtower.c
--- a/drivers/usb/misc/legousbtower.c	Sun May 16 01:18:35 2004
+++ b/drivers/usb/misc/legousbtower.c	Sun May 16 01:18:35 2004
@@ -1,8 +1,8 @@
 /*
  * LEGO USB Tower driver
  *
- * Copyright (C) 2003 David Glance <davidgsf@sourceforge.net> 
- *               2001 Juergen Stuber <stuber@loria.fr>
+ * Copyright (C) 2003 David Glance <davidgsf@sourceforge.net>
+ *               2001-2004 Juergen Stuber <starblue@users.sourceforge.net>
  *
  *	This program is free software; you can redistribute it and/or
  *	modify it under the terms of the GNU General Public License as
@@ -33,14 +33,44 @@
  *   - changed to use lego0 rather than tower0
  *   - changed dbg() to use __func__ rather than deprecated __FUNCTION__
  * 2003-01-12 - 0.53 david (david@csse.uwa.edu.au)
- *   - changed read and write to write everything or timeout (from a patch by Chris Riesen and 
- *     Brett Thaeler driver)
+ *   - changed read and write to write everything or
+ *     timeout (from a patch by Chris Riesen and Brett Thaeler driver)
  *   - added ioctl functionality to set timeouts
- * 2003-07-18 - 0.54 davidgsf (david@csse.uwa.edu.au) 
+ * 2003-07-18 - 0.54 davidgsf (david@csse.uwa.edu.au)
  *   - initial import into LegoUSB project
  *   - merge of existing LegoUSB.c driver
- * 2003-07-18 - 0.56 davidgsf (david@csse.uwa.edu.au) 
+ * 2003-07-18 - 0.56 davidgsf (david@csse.uwa.edu.au)
  *   - port to 2.6 style driver
+ * 2004-02-29 - 0.6 Juergen Stuber <starblue@users.sourceforge.net>
+ *   - fix locking
+ *   - unlink read URBs which are no longer needed
+ *   - allow increased buffer size, eliminates need for timeout on write
+ *   - have read URB running continuously
+ *   - added poll
+ *   - forbid seeking
+ *   - added nonblocking I/O
+ *   - changed back __func__ to __FUNCTION__
+ *   - read and log tower firmware version
+ *   - reset tower on probe, avoids failure of first write
+ * 2004-03-09 - 0.7 Juergen Stuber <starblue@users.sourceforge.net>
+ *   - timeout read now only after inactivity, shorten default accordingly
+ * 2004-03-11 - 0.8 Juergen Stuber <starblue@users.sourceforge.net>
+ *   - log major, minor instead of possibly confusing device filename
+ *   - whitespace cleanup
+ * 2004-03-12 - 0.9 Juergen Stuber <starblue@users.sourceforge.net>
+ *   - normalize whitespace in debug messages
+ *   - take care about endianness in control message responses
+ * 2004-03-13 - 0.91 Juergen Stuber <starblue@users.sourceforge.net>
+ *   - make default intervals longer to accommodate current EHCI driver
+ * 2004-03-19 - 0.92 Juergen Stuber <starblue@users.sourceforge.net>
+ *   - replaced atomic_t by memory barriers
+ * 2004-04-21 - 0.93 Juergen Stuber <starblue@users.sourceforge.net>
+ *   - wait for completion of write urb in release (needed for remotecontrol)
+ *   - corrected poll for write direction (missing negation)
+ * 2004-04-22 - 0.94 Juergen Stuber <starblue@users.sourceforge.net>
+ *   - make device locking interruptible
+ * 2004-04-30 - 0.95 Juergen Stuber <starblue@users.sourceforge.net>
+ *   - check for valid udev on resubmitting and unlinking urbs
  */
 
 #include <linux/config.h>
@@ -53,33 +83,113 @@
 #include <linux/completion.h>
 #include <asm/uaccess.h>
 #include <linux/usb.h>
+#include <linux/poll.h>
 
 
 #ifdef CONFIG_USB_DEBUG
 	static int debug = 4;
 #else
-	static int debug = 1;
+	static int debug = 0;
 #endif
 
 /* Use our own dbg macro */
 #undef dbg
-#define dbg(lvl, format, arg...) do { if (debug >= lvl) printk(KERN_DEBUG  __FILE__ " : " format " \n", ## arg); } while (0)
+#define dbg(lvl, format, arg...) do { if (debug >= lvl) printk(KERN_DEBUG  __FILE__ ": " format "\n", ## arg); } while (0)
 
 
 /* Version Information */
-#define DRIVER_VERSION "v0.56"
-#define DRIVER_AUTHOR "David Glance, davidgsf@sourceforge.net"
+#define DRIVER_VERSION "v0.95"
+#define DRIVER_AUTHOR "Juergen Stuber <starblue@sourceforge.net>"
 #define DRIVER_DESC "LEGO USB Tower Driver"
 
-/* Module paramaters */
+/* Module parameters */
 MODULE_PARM(debug, "i");
 MODULE_PARM_DESC(debug, "Debug enabled or not");
 
+/* The defaults are chosen to work with the latest versions of leJOS and NQC.
+ */
+
+/* Some legacy software likes to receive packets in one piece.
+ * In this case read_buffer_size should exceed the maximal packet length
+ * (417 for datalog uploads), and packet_timeout should be set.
+ */
+static size_t read_buffer_size = 480;
+MODULE_PARM(read_buffer_size, "i");
+MODULE_PARM_DESC(read_buffer_size, "Read buffer size");
+
+/* Some legacy software likes to send packets in one piece.
+ * In this case write_buffer_size should exceed the maximal packet length
+ * (417 for firmware and program downloads).
+ * A problem with long writes is that the following read may time out
+ * if the software is not prepared to wait long enough.
+ */
+static size_t write_buffer_size = 480;
+MODULE_PARM(write_buffer_size, "i");
+MODULE_PARM_DESC(write_buffer_size, "Write buffer size");
+
+/* Some legacy software expects reads to contain whole LASM packets.
+ * To achieve this, characters which arrive before a packet timeout
+ * occurs will be returned in a single read operation.
+ * A problem with long reads is that the software may time out
+ * if it is not prepared to wait long enough.
+ * The packet timeout should be greater than the time between the
+ * reception of subsequent characters, which should arrive about
+ * every 5ms for the standard 2400 baud.
+ * Set it to 0 to disable.
+ */
+static int packet_timeout = 50;
+MODULE_PARM(packet_timeout, "i");
+MODULE_PARM_DESC(packet_timeout, "Packet timeout in ms");
+
+/* Some legacy software expects blocking reads to time out.
+ * Timeout occurs after the specified time of read and write inactivity.
+ * Set it to 0 to disable.
+ */
+static int read_timeout = 200;
+MODULE_PARM(read_timeout, "i");
+MODULE_PARM_DESC(read_timeout, "Read timeout in ms");
+
+/* As of kernel version 2.6.4 ehci-hcd uses an
+ * "only one interrupt transfer per frame" shortcut
+ * to simplify the scheduling of periodic transfers.
+ * This conflicts with our standard 1ms intervals for in and out URBs.
+ * We use default intervals of 2ms for in and 8ms for out transfers,
+ * which is fast enough for 2400 baud and allows a small additional load.
+ * Increase the interval to allow more devices that do interrupt transfers,
+ * or set to 0 to use the standard interval from the endpoint descriptors.
+ */
+static int interrupt_in_interval = 2;
+MODULE_PARM(interrupt_in_interval, "i");
+MODULE_PARM_DESC(interrupt_in_interval, "Interrupt in interval in ms");
+
+static int interrupt_out_interval = 8;
+MODULE_PARM(interrupt_out_interval, "i");
+MODULE_PARM_DESC(interrupt_out_interval, "Interrupt out interval in ms");
 
 /* Define these values to match your device */
 #define LEGO_USB_TOWER_VENDOR_ID	0x0694
 #define LEGO_USB_TOWER_PRODUCT_ID	0x0001
 
+/* Vendor requests */
+#define LEGO_USB_TOWER_REQUEST_RESET		0x04
+#define LEGO_USB_TOWER_REQUEST_GET_VERSION	0xFD
+
+struct tower_reset_reply {
+	__u16 size;		/* little-endian */
+	__u8 err_code;
+	__u8 spare;
+} __attribute__ ((packed));
+
+struct tower_get_version_reply {
+	__u16 size;		/* little-endian */
+	__u8 err_code;
+	__u8 spare;
+	__u8 major;
+	__u8 minor;
+	__u16 build_no;		/* little-endian */
+} __attribute__ ((packed));
+
+
 /* table of devices that work with this driver */
 static struct usb_device_id tower_table [] = {
 	{ USB_DEVICE(LEGO_USB_TOWER_VENDOR_ID, LEGO_USB_TOWER_PRODUCT_ID) },
@@ -90,22 +200,21 @@
 
 #define LEGO_USB_TOWER_MINOR_BASE	160
 
-/* we can have up to this number of device plugged in at once */
-#define MAX_DEVICES		16
-
-#define COMMAND_TIMEOUT		(2*HZ)  /* 2 second timeout for a command */
 
 /* Structure to hold all of our device specific stuff */
 struct lego_usb_tower {
 	struct semaphore	sem;		/* locks this structure */
-	struct usb_device* 	udev;		/* save off the usb device pointer */
-	struct usb_interface*   interface;
+	struct usb_device*	udev;		/* save off the usb device pointer */
 	unsigned char		minor;		/* the starting minor number for this device */
 
 	int			open_count;	/* number of times this port has been opened */
 
 	char*			read_buffer;
-	int			read_buffer_length;
+	size_t			read_buffer_length; /* this much came in */
+	size_t			read_packet_length; /* this much will be returned on read */
+	spinlock_t		read_buffer_lock;
+	int			packet_timeout_jiffies;
+	unsigned long		read_last_arrival;
 
 	wait_queue_head_t	read_wait;
 	wait_queue_head_t	write_wait;
@@ -113,18 +222,18 @@
 	char*			interrupt_in_buffer;
 	struct usb_endpoint_descriptor* interrupt_in_endpoint;
 	struct urb*		interrupt_in_urb;
+	int			interrupt_in_interval;
+	int			interrupt_in_running;
+	int			interrupt_in_done;
 
 	char*			interrupt_out_buffer;
 	struct usb_endpoint_descriptor* interrupt_out_endpoint;
 	struct urb*		interrupt_out_urb;
+	int			interrupt_out_interval;
+	int			interrupt_out_busy;
 
 };
 
-/* Note that no locking is needed:
- * read_buffer is arbitrated by read_buffer_length == 0
- * interrupt_out_buffer is arbitrated by interrupt_out_urb->status == -EINPROGRESS
- * interrupt_in_buffer belongs to urb alone and is overwritten on overflow
- */
 
 /* local function prototypes */
 static ssize_t tower_read	(struct file *file, char *buffer, size_t count, loff_t *ppos);
@@ -132,8 +241,11 @@
 static inline void tower_delete (struct lego_usb_tower *dev);
 static int tower_open		(struct inode *inode, struct file *file);
 static int tower_release	(struct inode *inode, struct file *file);
-static int tower_release_internal (struct lego_usb_tower *dev);
+static unsigned int tower_poll	(struct file *file, poll_table *wait);
+static loff_t tower_llseek	(struct file *file, loff_t off, int whence);
+
 static void tower_abort_transfers (struct lego_usb_tower *dev);
+static void tower_check_for_read_packet (struct lego_usb_tower *dev);
 static void tower_interrupt_in_callback (struct urb *urb, struct pt_regs *regs);
 static void tower_interrupt_out_callback (struct urb *urb, struct pt_regs *regs);
 
@@ -146,14 +258,16 @@
 
 /* file operations needed when we register this driver */
 static struct file_operations tower_fops = {
-	.owner = 	THIS_MODULE,
-	.read  = 	tower_read,
+	.owner =	THIS_MODULE,
+	.read  =	tower_read,
 	.write =	tower_write,
 	.open =		tower_open,
-	.release = 	tower_release,
+	.release =	tower_release,
+	.poll =		tower_poll,
+	.llseek =	tower_llseek,
 };
 
-/* 
+/*
  * usb class driver info in order to get a minor number from the usb core,
  * and to have the device registered with devfs and the driver core
  */
@@ -167,11 +281,11 @@
 
 /* usb specific object needed to register this driver with the usb subsystem */
 static struct usb_driver tower_driver = {
-	.owner =        THIS_MODULE,
-	.name =	        "legousbtower",
-	.probe = 	tower_probe,
-	.disconnect = 	tower_disconnect,
-	.id_table = 	tower_table,
+	.owner =	THIS_MODULE,
+	.name =		"legousbtower",
+	.probe =	tower_probe,
+	.disconnect =	tower_disconnect,
+	.id_table =	tower_table,
 };
 
 
@@ -183,8 +297,8 @@
 	int i;
 
 	if (debug < level)
-		return; 
-	
+		return;
+
 	printk (KERN_DEBUG __FILE__": %s - length = %d, data = ", function, size);
 	for (i = 0; i < size; ++i) {
 		printk ("%.2x ", data[i]);
@@ -198,7 +312,7 @@
  */
 static inline void tower_delete (struct lego_usb_tower *dev)
 {
-	dbg(2, "%s enter", __func__);
+	dbg(2, "%s: enter", __FUNCTION__);
 
 	tower_abort_transfers (dev);
 
@@ -214,7 +328,7 @@
 	kfree (dev->interrupt_out_buffer);
 	kfree (dev);
 
-	dbg(2, "%s : leave", __func__);
+	dbg(2, "%s: leave", __FUNCTION__);
 }
 
 
@@ -228,7 +342,7 @@
 	int retval = 0;
 	struct usb_interface *interface;
 
-	dbg(2,"%s : enter", __func__);
+	dbg(2, "%s: enter", __FUNCTION__);
 
 	subminor = iminor(inode);
 
@@ -240,37 +354,63 @@
 		err ("%s - error, can't find device for minor %d",
 		     __FUNCTION__, subminor);
 		retval = -ENODEV;
-		goto exit_no_device;
+		goto unlock_disconnect_exit;
 	}
 
 	dev = usb_get_intfdata(interface);
 
 	if (!dev) {
 		retval = -ENODEV;
-		goto exit_no_device;
+		goto unlock_disconnect_exit;
 	}
 
 	/* lock this device */
-	down (&dev->sem);
-
-	
-	/* increment our usage count for the device */
-	++dev->open_count;
-
-	/* save device in the file's private structure */
-	file->private_data = dev;
+	if (down_interruptible (&dev->sem)) {
+	        retval = -ERESTARTSYS;
+		goto unlock_disconnect_exit;
+	}
 
+	/* allow opening only once */
+	if (dev->open_count) {
+		retval = -EBUSY;
+		goto unlock_exit;
+	}
+	dev->open_count = 1;
 
 	/* initialize in direction */
 	dev->read_buffer_length = 0;
+	dev->read_packet_length = 0;
+	usb_fill_int_urb (dev->interrupt_in_urb,
+			  dev->udev,
+			  usb_rcvintpipe(dev->udev, dev->interrupt_in_endpoint->bEndpointAddress),
+			  dev->interrupt_in_buffer,
+			  dev->interrupt_in_endpoint->wMaxPacketSize,
+			  tower_interrupt_in_callback,
+			  dev,
+			  dev->interrupt_in_interval);
+
+	dev->interrupt_in_running = 1;
+	dev->interrupt_in_done = 0;
+	mb();
 
-	up (&dev->sem);
+	retval = usb_submit_urb (dev->interrupt_in_urb, GFP_KERNEL);
+	if (retval) {
+		err("Couldn't submit interrupt_in_urb %d", retval);
+		dev->interrupt_in_running = 0;
+		dev->open_count = 0;
+		goto unlock_exit;
+	}
 
-exit_no_device:
+	/* save device in the file's private structure */
+	file->private_data = dev;
 
+unlock_exit:
+	up (&dev->sem);
+
+unlock_disconnect_exit:
 	up (&disconnect_sem);
 
-	dbg(2,"%s : leave, return value %d ", __func__, retval);
+	dbg(2, "%s: leave, return value %d ", __FUNCTION__, retval);
 
 	return retval;
 }
@@ -283,87 +423,137 @@
 	struct lego_usb_tower *dev;
 	int retval = 0;
 
-	dbg(2," %s : enter", __func__);
+	dbg(2, "%s: enter", __FUNCTION__);
 
 	dev = (struct lego_usb_tower *)file->private_data;
 
 	if (dev == NULL) {
-		dbg(1," %s : object is NULL", __func__);
+		dbg(1, "%s: object is NULL", __FUNCTION__);
 		retval = -ENODEV;
 		goto exit;
 	}
 
+	if (down_interruptible (&dev->sem)) {
+	        retval = -ERESTARTSYS;
+		goto exit;
+	}
 
-	/* lock our device */
-	down (&dev->sem);
-
- 	if (dev->open_count <= 0) {
-		dbg(1," %s : device not opened", __func__);
+	if (dev->open_count != 1) {
+		dbg(1, "%s: device not opened exactly once", __FUNCTION__);
 		retval = -ENODEV;
+		goto unlock_exit;
+	}
+	if (dev->udev == NULL) {
+		/* the device was unplugged before the file was released */
+		up (&dev->sem);	/* unlock here as tower_delete frees dev */
+		tower_delete (dev);
 		goto exit;
 	}
 
-	/* do the work */
-	retval = tower_release_internal (dev);
+	/* wait until write transfer is finished */
+	if (dev->interrupt_out_busy) {
+		wait_event_interruptible_timeout (dev->write_wait, !dev->interrupt_out_busy, 2 * HZ);
+	}
+	tower_abort_transfers (dev);
+	dev->open_count = 0;
 
-exit:
+unlock_exit:
 	up (&dev->sem);
-	dbg(2," %s : leave, return value %d", __func__, retval);
+
+exit:
+	dbg(2, "%s: leave, return value %d", __FUNCTION__, retval);
 	return retval;
 }
 
 
 /**
- *	tower_release_internal
+ *	tower_abort_transfers
+ *      aborts transfers and frees associated data structures
  */
-static int tower_release_internal (struct lego_usb_tower *dev)
+static void tower_abort_transfers (struct lego_usb_tower *dev)
 {
-	int retval = 0;
+	dbg(2, "%s: enter", __FUNCTION__);
 
-	dbg(2," %s : enter", __func__);
-
-	if (dev->udev == NULL) {
-		/* the device was unplugged before the file was released */
-		tower_delete (dev);
+	if (dev == NULL) {
+		dbg(1, "%s: dev is null", __FUNCTION__);
 		goto exit;
 	}
 
-	/* decrement our usage count for the device */
-	--dev->open_count;
-	if (dev->open_count <= 0) {
-		tower_abort_transfers (dev);
-		dev->open_count = 0;
+	/* shutdown transfer */
+	if (dev->interrupt_in_running) {
+		dev->interrupt_in_running = 0;
+		mb();
+		if (dev->interrupt_in_urb != NULL && dev->udev) {
+			usb_unlink_urb (dev->interrupt_in_urb);
+		}
+	}
+	if (dev->interrupt_out_busy) {
+		if (dev->interrupt_out_urb != NULL && dev->udev) {
+			usb_unlink_urb (dev->interrupt_out_urb);
+		}
 	}
 
 exit:
-	dbg(2," %s : leave", __func__);
-	return retval;
+	dbg(2, "%s: leave", __FUNCTION__);
 }
 
 
 /**
- *	tower_abort_transfers
- *      aborts transfers and frees associated data structures
+ *	tower_check_for_read_packet
+ *
+ *      To get correct semantics for signals and non-blocking I/O
+ *      with packetizing we pretend not to see any data in the read buffer
+ *      until it has been there unchanged for at least
+ *      dev->packet_timeout_jiffies, or until the buffer is full.
  */
-static void tower_abort_transfers (struct lego_usb_tower *dev)
+static void tower_check_for_read_packet (struct lego_usb_tower *dev)
 {
-	dbg(2," %s : enter", __func__);
-
-	if (dev == NULL) {
-		dbg(1," %s : dev is null", __func__);
-	        goto exit;
+	spin_lock_irq (&dev->read_buffer_lock);
+	if (!packet_timeout
+	    || time_after(jiffies, dev->read_last_arrival + dev->packet_timeout_jiffies)
+	    || dev->read_buffer_length == read_buffer_size) {
+		dev->read_packet_length = dev->read_buffer_length;
 	}
+	dev->interrupt_in_done = 0;
+	spin_unlock_irq (&dev->read_buffer_lock);
+}
 
-	/* shutdown transfer */
-	if (dev->interrupt_in_urb != NULL) {
-		usb_unlink_urb (dev->interrupt_in_urb);
+
+/**
+ *	tower_poll
+ */
+static unsigned int tower_poll (struct file *file, poll_table *wait)
+{
+	struct lego_usb_tower *dev;
+	unsigned int mask = 0;
+
+	dbg(2, "%s: enter", __FUNCTION__);
+
+	dev = file->private_data;
+
+	poll_wait(file, &dev->read_wait, wait);
+	poll_wait(file, &dev->write_wait, wait);
+
+	tower_check_for_read_packet(dev);
+	if (dev->read_packet_length > 0) {
+		mask |= POLLIN | POLLRDNORM;
 	}
-	if (dev->interrupt_out_urb != NULL) {
-		usb_unlink_urb (dev->interrupt_out_urb);
+	if (!dev->interrupt_out_busy) {
+		mask |= POLLOUT | POLLWRNORM;
 	}
 
-exit:
-	dbg(2," %s : leave", __func__);
+	dbg(2, "%s: leave, mask = %d", __FUNCTION__, mask);
+
+	return mask;
+}
+
+
+/**
+ *	tower_llseek
+ */
+static loff_t tower_llseek (struct file *file, loff_t off, int whence)
+{
+	return -ESPIPE;		/* unseekable */
 }
 
 
@@ -373,96 +563,87 @@
 static ssize_t tower_read (struct file *file, char *buffer, size_t count, loff_t *ppos)
 {
 	struct lego_usb_tower *dev;
-	size_t bytes_read = 0;
 	size_t bytes_to_read;
 	int i;
 	int retval = 0;
-	int timeout = 0;
+	unsigned long timeout = 0;
 
-	dbg(2," %s : enter, count = %Zd", __func__, count);
+	dbg(2, "%s: enter, count = %Zd", __FUNCTION__, count);
 
 	dev = (struct lego_usb_tower *)file->private_data;
-	
+
 	/* lock this object */
-	down (&dev->sem);
+	if (down_interruptible (&dev->sem)) {
+		retval = -ERESTARTSYS;
+		goto exit;
+	}
 
 	/* verify that the device wasn't unplugged */
 	if (dev->udev == NULL) {
 		retval = -ENODEV;
 		err("No device or device unplugged %d", retval);
-		goto exit;
+		goto unlock_exit;
 	}
 
 	/* verify that we actually have some data to read */
 	if (count == 0) {
-		dbg(1," %s : read request of 0 bytes", __func__);
-		goto exit;
+		dbg(1, "%s: read request of 0 bytes", __FUNCTION__);
+		goto unlock_exit;
 	}
 
+	if (read_timeout) {
+		timeout = jiffies + read_timeout * HZ / 1000;
+	}
+
+	/* wait for data */
+	tower_check_for_read_packet (dev);
+	while (dev->read_packet_length == 0) {
+		if (file->f_flags & O_NONBLOCK) {
+			retval = -EAGAIN;
+			goto unlock_exit;
+		}
+		retval = wait_event_interruptible_timeout(dev->read_wait, dev->interrupt_in_done, dev->packet_timeout_jiffies);
+		if (retval < 0) {
+			goto unlock_exit;
+		}
 
-	timeout = COMMAND_TIMEOUT;
+		/* reset read timeout during read or write activity */
+		if (read_timeout
+		    && (dev->read_buffer_length || dev->interrupt_out_busy)) {
+			timeout = jiffies + read_timeout * HZ / 1000;
+		}
+		/* check for read timeout */
+		if (read_timeout && time_after (jiffies, timeout)) {
+			retval = -ETIMEDOUT;
+			goto unlock_exit;
+		}
+		tower_check_for_read_packet (dev);
+	}
 
-	while (1) {
-		if (dev->read_buffer_length == 0) {
+	/* copy the data from read_buffer into userspace */
+	bytes_to_read = min(count, dev->read_packet_length);
 
-			/* start reading */
-			usb_fill_int_urb (dev->interrupt_in_urb,dev->udev,
-					  usb_rcvintpipe(dev->udev, dev->interrupt_in_endpoint->bEndpointAddress),
-					  dev->interrupt_in_buffer,
-					  dev->interrupt_in_endpoint->wMaxPacketSize,
-					  tower_interrupt_in_callback,
-					  dev,
-					  dev->interrupt_in_endpoint->bInterval);
-			
-			retval = usb_submit_urb (dev->interrupt_in_urb, GFP_KERNEL);
-			
-			if (retval < 0) {
-				err("Couldn't submit interrupt_in_urb");
-				goto exit;
-			}
-
-			if (timeout <= 0) {
-			        retval = -ETIMEDOUT;
-			        goto exit;
-			}
-
-			if (signal_pending(current)) {
-				retval = -EINTR;
-				goto exit;
-			}
-
-			up (&dev->sem);
-			timeout = interruptible_sleep_on_timeout (&dev->read_wait, timeout);
-			down (&dev->sem);
+	if (copy_to_user (buffer, dev->read_buffer, bytes_to_read)) {
+		retval = -EFAULT;
+		goto unlock_exit;
+	}
 
-		} else {
-			/* copy the data from read_buffer into userspace */
-			bytes_to_read = count > dev->read_buffer_length ? dev->read_buffer_length : count;
-			if (copy_to_user (buffer, dev->read_buffer, bytes_to_read) != 0) {
-				retval = -EFAULT;
-				goto exit;
-			}
-			dev->read_buffer_length -= bytes_to_read;
-			for (i=0; i<dev->read_buffer_length; i++) {
-				dev->read_buffer[i] = dev->read_buffer[i+bytes_to_read];
-			}
-
-			buffer += bytes_to_read;
-			count -= bytes_to_read;
-			bytes_read += bytes_to_read;
-			if (count == 0) {
-				break;
-			}
-		}
+	spin_lock_irq (&dev->read_buffer_lock);
+	dev->read_buffer_length -= bytes_to_read;
+	dev->read_packet_length -= bytes_to_read;
+	for (i=0; i<dev->read_buffer_length; i++) {
+		dev->read_buffer[i] = dev->read_buffer[i+bytes_to_read];
 	}
+	spin_unlock_irq (&dev->read_buffer_lock);
 
-	retval = bytes_read;
+	retval = bytes_to_read;
 
-exit:
+unlock_exit:
 	/* unlock the device */
 	up (&dev->sem);
 
-	dbg(2," %s : leave, return value %d", __func__, retval);
+exit:
+	dbg(2, "%s: leave, return value %d", __FUNCTION__, retval);
 	return retval;
 }
 
@@ -473,107 +654,80 @@
 static ssize_t tower_write (struct file *file, const char *buffer, size_t count, loff_t *ppos)
 {
 	struct lego_usb_tower *dev;
-	size_t bytes_written = 0;
 	size_t bytes_to_write;
-	size_t buffer_size;
 	int retval = 0;
-	int timeout = 0;
 
-	dbg(2," %s : enter, count = %Zd", __func__, count);
+	dbg(2, "%s: enter, count = %Zd", __FUNCTION__, count);
 
 	dev = (struct lego_usb_tower *)file->private_data;
 
 	/* lock this object */
-	down (&dev->sem);
+	if (down_interruptible (&dev->sem)) {
+		retval = -ERESTARTSYS;
+		goto exit;
+	}
 
 	/* verify that the device wasn't unplugged */
 	if (dev->udev == NULL) {
 		retval = -ENODEV;
 		err("No device or device unplugged %d", retval);
-		goto exit;
+		goto unlock_exit;
 	}
 
 	/* verify that we actually have some data to write */
 	if (count == 0) {
-		dbg(1," %s : write request of 0 bytes", __func__);
-		goto exit;
+		dbg(1, "%s: write request of 0 bytes", __FUNCTION__);
+		goto unlock_exit;
 	}
 
+	/* wait until previous transfer is finished */
+	while (dev->interrupt_out_busy) {
+		if (file->f_flags & O_NONBLOCK) {
+			retval = -EAGAIN;
+			goto unlock_exit;
+		}
+		retval = wait_event_interruptible (dev->write_wait, !dev->interrupt_out_busy);
+		if (retval) {
+			goto unlock_exit;
+		}
+	}
 
-	while (count > 0) {
-		if (dev->interrupt_out_urb->status == -EINPROGRESS) {
-			timeout = COMMAND_TIMEOUT;
-
-			while (timeout > 0) {
-				if (signal_pending(current)) {
-					dbg(1," %s : interrupted", __func__);
-					retval = -EINTR;
-					goto exit;
-				}
-				up (&dev->sem);
-				timeout = interruptible_sleep_on_timeout (&dev->write_wait, timeout);
-				down (&dev->sem);
-				if (timeout > 0) {
-					break;
-				}
-				dbg(1," %s : interrupted timeout: %d", __func__, timeout);
-			}
-
-
-			dbg(1," %s : final timeout: %d", __func__, timeout);
-
-			if (timeout == 0) {
-				dbg(1, "%s - command timed out.", __func__);
-				retval = -ETIMEDOUT;
-				goto exit;
-			}
-
-			dbg(4," %s : in progress, count = %Zd", __func__, count);
-		} else {
-			dbg(4," %s : sending, count = %Zd", __func__, count);
-
-			/* write the data into interrupt_out_buffer from userspace */
-			buffer_size = dev->interrupt_out_endpoint->wMaxPacketSize;
-			bytes_to_write = count > buffer_size ? buffer_size : count;
-			dbg(4," %s : buffer_size = %Zd, count = %Zd, bytes_to_write = %Zd", __func__, buffer_size, count, bytes_to_write);
-
-			if (copy_from_user (dev->interrupt_out_buffer, buffer, bytes_to_write) != 0) {
-				retval = -EFAULT;
-				goto exit;
-			}
-
-			/* send off the urb */
-			usb_fill_int_urb(dev->interrupt_out_urb,
-					dev->udev, 
-					usb_sndintpipe(dev->udev, dev->interrupt_out_endpoint->bEndpointAddress),
-					dev->interrupt_out_buffer,
-					bytes_to_write,
-					tower_interrupt_out_callback,
-					dev,
-					dev->interrupt_in_endpoint->bInterval);
-
-			dev->interrupt_out_urb->actual_length = bytes_to_write;
-			retval = usb_submit_urb (dev->interrupt_out_urb, GFP_KERNEL);
-
-			if (retval < 0) {
-				err("Couldn't submit interrupt_out_urb %d", retval);
-				goto exit;
-			}
+	/* write the data into interrupt_out_buffer from userspace */
+	bytes_to_write = min(count, write_buffer_size);
+	dbg(4, "%s: count = %Zd, bytes_to_write = %Zd", __FUNCTION__, count, bytes_to_write);
+
+	if (copy_from_user (dev->interrupt_out_buffer, buffer, bytes_to_write)) {
+		retval = -EFAULT;
+		goto unlock_exit;
+	}
+
+	/* send off the urb */
+	usb_fill_int_urb(dev->interrupt_out_urb,
+			 dev->udev,
+			 usb_sndintpipe(dev->udev, dev->interrupt_out_endpoint->bEndpointAddress),
+			 dev->interrupt_out_buffer,
+			 bytes_to_write,
+			 tower_interrupt_out_callback,
+			 dev,
+			 dev->interrupt_out_interval);
 
-			buffer += bytes_to_write;
-			count -= bytes_to_write;
+	dev->interrupt_out_busy = 1;
+	wmb();
 
-			bytes_written += bytes_to_write;
-		}
+	retval = usb_submit_urb (dev->interrupt_out_urb, GFP_KERNEL);
+	if (retval) {
+		dev->interrupt_out_busy = 0;
+		err("Couldn't submit interrupt_out_urb %d", retval);
+		goto unlock_exit;
 	}
+	retval = bytes_to_write;
 
-	retval = bytes_written;
-
-exit:
+unlock_exit:
 	/* unlock the device */
 	up (&dev->sem);
 
-	dbg(2," %s : leave, return value %d", __func__, retval);
+exit:
+	dbg(2, "%s: leave, return value %d", __FUNCTION__, retval);
 
 	return retval;
 }
@@ -585,39 +739,53 @@
 static void tower_interrupt_in_callback (struct urb *urb, struct pt_regs *regs)
 {
 	struct lego_usb_tower *dev = (struct lego_usb_tower *)urb->context;
+	int retval;
 
-	dbg(4," %s : enter, status %d", __func__, urb->status);
+	dbg(4, "%s: enter, status %d", __FUNCTION__, urb->status);
 
-	lego_usb_tower_debug_data(5,__func__, urb->actual_length, urb->transfer_buffer);
+	lego_usb_tower_debug_data(5, __FUNCTION__, urb->actual_length, urb->transfer_buffer);
 
-	if (urb->status != 0) {
-		if ((urb->status != -ENOENT) && (urb->status != -ECONNRESET)) {
-			dbg(1," %s : nonzero status received: %d", __func__, urb->status);
+	if (urb->status) {
+		if (urb->status == -ENOENT ||
+		    urb->status == -ECONNRESET ||
+		    urb->status == -ESHUTDOWN) {
+			goto exit;
+		} else {
+			dbg(1, "%s: nonzero status received: %d", __FUNCTION__, urb->status);
+			goto resubmit; /* maybe we can recover */
 		}
-		goto exit;
 	}
 
-	down (&dev->sem);
-
 	if (urb->actual_length > 0) {
-		if (dev->read_buffer_length < (4 * dev->interrupt_in_endpoint->wMaxPacketSize) - (urb->actual_length)) {
-
-			memcpy (dev->read_buffer+dev->read_buffer_length, dev->interrupt_in_buffer, urb->actual_length);
-
+		spin_lock (&dev->read_buffer_lock);
+		if (dev->read_buffer_length + urb->actual_length < read_buffer_size) {
+			memcpy (dev->read_buffer + dev->read_buffer_length,
+				dev->interrupt_in_buffer,
+				urb->actual_length);
 			dev->read_buffer_length += urb->actual_length;
-			dbg(1," %s reading  %d ", __func__, urb->actual_length);
-			wake_up_interruptible (&dev->read_wait);
-
+			dev->read_last_arrival = jiffies;
+			dbg(3, "%s: received %d bytes", __FUNCTION__, urb->actual_length);
 		} else {
-			dbg(1," %s : read_buffer overflow", __func__);
+			printk(KERN_WARNING "%s: read_buffer overflow, %d bytes dropped", __FUNCTION__, urb->actual_length);
 		}
+		spin_unlock (&dev->read_buffer_lock);
 	}
 
-	up (&dev->sem);
+resubmit:
+	/* resubmit if we're still running */
+	if (dev->interrupt_in_running && dev->udev) {
+		retval = usb_submit_urb (dev->interrupt_in_urb, GFP_ATOMIC);
+		if (retval) {
+			err("%s: usb_submit_urb failed (%d)", __FUNCTION__, retval);
+		}
+	}
 
 exit:
-	lego_usb_tower_debug_data(5,__func__, urb->actual_length, urb->transfer_buffer);
-	dbg(4," %s : leave, status %d", __func__, urb->status);
+	dev->interrupt_in_done = 1;
+	wake_up_interruptible (&dev->read_wait);
+
+	lego_usb_tower_debug_data(5, __FUNCTION__, urb->actual_length, urb->transfer_buffer);
+	dbg(4, "%s: leave, status %d", __FUNCTION__, urb->status);
 }
 
 
@@ -628,22 +796,22 @@
 {
 	struct lego_usb_tower *dev = (struct lego_usb_tower *)urb->context;
 
-	dbg(4," %s : enter, status %d", __func__, urb->status);
-	lego_usb_tower_debug_data(5,__func__, urb->actual_length, urb->transfer_buffer);
+	dbg(4, "%s: enter, status %d", __FUNCTION__, urb->status);
+	lego_usb_tower_debug_data(5, __FUNCTION__, urb->actual_length, urb->transfer_buffer);
 
-	if (urb->status != 0) {
-		if ((urb->status != -ENOENT) && 
-		    (urb->status != -ECONNRESET)) {
-			dbg(1, " %s :nonzero status received: %d", __func__, urb->status);
-		}
-		goto exit;
-	}                        
+	/* sync/async unlink faults aren't errors */
+	if (urb->status && !(urb->status == -ENOENT ||
+			     urb->status == -ECONNRESET ||
+			     urb->status == -ESHUTDOWN)) {
+		dbg(1, "%s - nonzero write bulk status received: %d",
+		    __FUNCTION__, urb->status);
+	}
 
+	dev->interrupt_out_busy = 0;
 	wake_up_interruptible(&dev->write_wait);
-exit:
 
-	lego_usb_tower_debug_data(5,__func__, urb->actual_length, urb->transfer_buffer);
-	dbg(4," %s : leave, status %d", __func__, urb->status);
+	lego_usb_tower_debug_data(5, __FUNCTION__, urb->actual_length, urb->transfer_buffer);
+	dbg(4, "%s: leave, status %d", __FUNCTION__, urb->status);
 }
 
 
@@ -659,15 +827,18 @@
 	struct lego_usb_tower *dev = NULL;
 	struct usb_host_interface *iface_desc;
 	struct usb_endpoint_descriptor* endpoint;
+	struct tower_reset_reply reset_reply;
+	struct tower_get_version_reply get_version_reply;
 	int i;
 	int retval = -ENOMEM;
+	int result;
 
-	dbg(2," %s : enter", __func__);
+	dbg(2, "%s: enter", __FUNCTION__);
 
 	if (udev == NULL) {
 		info ("udev is NULL.");
 	}
-	
+
 	/* See if the device offered us matches what we can accept */
 	if ((udev->descriptor.idVendor != LEGO_USB_TOWER_VENDOR_ID) ||
 	    (udev->descriptor.idProduct != LEGO_USB_TOWER_PRODUCT_ID)) {
@@ -691,6 +862,10 @@
 
 	dev->read_buffer = NULL;
 	dev->read_buffer_length = 0;
+	dev->read_packet_length = 0;
+	spin_lock_init (&dev->read_buffer_lock);
+	dev->packet_timeout_jiffies = packet_timeout * HZ / 1000;
+	dev->read_last_arrival = jiffies;
 
 	init_waitqueue_head (&dev->read_wait);
 	init_waitqueue_head (&dev->write_wait);
@@ -698,13 +873,15 @@
 	dev->interrupt_in_buffer = NULL;
 	dev->interrupt_in_endpoint = NULL;
 	dev->interrupt_in_urb = NULL;
+	dev->interrupt_in_running = 0;
+	dev->interrupt_in_done = 0;
 
 	dev->interrupt_out_buffer = NULL;
 	dev->interrupt_out_endpoint = NULL;
 	dev->interrupt_out_urb = NULL;
+	dev->interrupt_out_busy = 0;
 
-
-	iface_desc = &interface->altsetting[0];
+	iface_desc = interface->cur_altsetting;
 
 	/* set up the endpoint information */
 	for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
@@ -714,7 +891,7 @@
 		    ((endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_INT)) {
 			dev->interrupt_in_endpoint = endpoint;
 		}
-		
+
 		if (((endpoint->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT) &&
 		    ((endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_INT)) {
 			dev->interrupt_out_endpoint = endpoint;
@@ -729,7 +906,7 @@
 		goto error;
 	}
 
-	dev->read_buffer = kmalloc ((4*dev->interrupt_in_endpoint->wMaxPacketSize), GFP_KERNEL);
+	dev->read_buffer = kmalloc (read_buffer_size, GFP_KERNEL);
 	if (!dev->read_buffer) {
 		err("Couldn't allocate read_buffer");
 		goto error;
@@ -744,7 +921,7 @@
 		err("Couldn't allocate interrupt_in_urb");
 		goto error;
 	}
-	dev->interrupt_out_buffer = kmalloc (dev->interrupt_out_endpoint->wMaxPacketSize, GFP_KERNEL);
+	dev->interrupt_out_buffer = kmalloc (write_buffer_size, GFP_KERNEL);
 	if (!dev->interrupt_out_buffer) {
 		err("Couldn't allocate interrupt_out_buffer");
 		goto error;
@@ -753,7 +930,9 @@
 	if (!dev->interrupt_out_urb) {
 		err("Couldn't allocate interrupt_out_urb");
 		goto error;
-	}                
+	}
+	dev->interrupt_in_interval = interrupt_in_interval ? interrupt_in_interval : dev->interrupt_in_endpoint->bInterval;
+	dev->interrupt_out_interval = interrupt_out_interval ? interrupt_out_interval : dev->interrupt_out_endpoint->bInterval;
 
 	/* we can register the device now, as it is ready */
 	usb_set_intfdata (interface, dev);
@@ -766,16 +945,50 @@
 		usb_set_intfdata (interface, NULL);
 		goto error;
 	}
-
 	dev->minor = interface->minor;
 
 	/* let the user know what node this device is now attached to */
-	info ("LEGO USB Tower device now attached to /dev/usb/lego%d", (dev->minor - LEGO_USB_TOWER_MINOR_BASE));
+	info ("LEGO USB Tower #%d now attached to major %d minor %d", (dev->minor - LEGO_USB_TOWER_MINOR_BASE), USB_MAJOR, dev->minor);
 
+	/* reset the tower */
+	result = usb_control_msg (udev,
+				  usb_rcvctrlpipe(udev, 0),
+				  LEGO_USB_TOWER_REQUEST_RESET,
+				  USB_TYPE_VENDOR | USB_DIR_IN | USB_RECIP_DEVICE,
+				  0,
+				  0,
+				  &reset_reply,
+				  sizeof(reset_reply),
+				  HZ);
+	if (result < 0) {
+		err("LEGO USB Tower reset control request failed");
+		retval = result;
+		goto error;
+	}
+
+	/* get the firmware version and log it */
+	result = usb_control_msg (udev,
+				  usb_rcvctrlpipe(udev, 0),
+				  LEGO_USB_TOWER_REQUEST_GET_VERSION,
+				  USB_TYPE_VENDOR | USB_DIR_IN | USB_RECIP_DEVICE,
+				  0,
+				  0,
+				  &get_version_reply,
+				  sizeof(get_version_reply),
+				  HZ);
+	if (result < 0) {
+		err("LEGO USB Tower get version control request failed");
+		retval = result;
+		goto error;
+	}
+	info("LEGO USB Tower firmware version is %d.%d build %d",
+	     get_version_reply.major,
+	     get_version_reply.minor,
+	     le16_to_cpu(get_version_reply.build_no));
 
 
 exit:
-	dbg(2," %s : leave, return value 0x%.8lx (dev)", __func__, (long) dev);
+	dbg(2, "%s: leave, return value 0x%.8lx (dev)", __FUNCTION__, (long) dev);
 
 	return retval;
 
@@ -795,7 +1008,7 @@
 	struct lego_usb_tower *dev;
 	int minor;
 
-	dbg(2," %s : enter", __func__);
+	dbg(2, "%s: enter", __FUNCTION__);
 
 	down (&disconnect_sem);
 
@@ -823,7 +1036,7 @@
 
 	info("LEGO USB Tower #%d now disconnected", (minor - LEGO_USB_TOWER_MINOR_BASE));
 
-	dbg(2," %s : leave", __func__);
+	dbg(2, "%s: leave", __FUNCTION__);
 }
 
 
@@ -836,7 +1049,7 @@
 	int result;
 	int retval = 0;
 
-	dbg(2," %s : enter", __func__);
+	dbg(2, "%s: enter", __FUNCTION__);
 
 	/* register this driver with the USB subsystem */
 	result = usb_register(&tower_driver);
@@ -849,7 +1062,7 @@
 	info(DRIVER_DESC " " DRIVER_VERSION);
 
 exit:
-	dbg(2," %s : leave, return value %d", __func__, retval);
+	dbg(2, "%s: leave, return value %d", __FUNCTION__, retval);
 
 	return retval;
 }
@@ -860,12 +1073,12 @@
  */
 static void __exit lego_usb_tower_exit(void)
 {
-	dbg(2," %s : enter", __func__);
+	dbg(2, "%s: enter", __FUNCTION__);
 
 	/* deregister this driver with the USB subsystem */
 	usb_deregister (&tower_driver);
 
-	dbg(2," %s : leave", __func__);
+	dbg(2, "%s: leave", __FUNCTION__);
 }
 
 module_init (lego_usb_tower_init);
diff -Nru a/drivers/usb/misc/phidgetservo.c b/drivers/usb/misc/phidgetservo.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/drivers/usb/misc/phidgetservo.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,327 @@
+/*
+ * USB PhidgetServo driver 1.0
+ *
+ * Copyright (C) 2004 Sean Young <sean@mess.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This is a driver for the USB PhidgetServo version 2.0 and 3.0 servo 
+ * controllers available at: http://www.phidgets.com/ 
+ *
+ * Note that the driver takes input as: degrees.minutes
+ * -23 < degrees < 203
+ * 0 < minutes < 59
+ *
+ * CAUTION: Generally you should use 0 < degrees < 180 as anything else
+ * is probably beyond the range of your servo and may damage it.
+ */
+
+#include <linux/config.h>
+#ifdef CONFIG_USB_DEBUG
+#define DEBUG	1
+#endif
+#include <linux/kernel.h>
+#include <linux/errno.h>
+#include <linux/init.h>
+#include <linux/slab.h>
+#include <linux/module.h>
+#include <linux/usb.h>
+
+#define DRIVER_AUTHOR "Sean Young <sean@mess.org>"
+#define DRIVER_DESC "USB PhidgetServo Driver"
+
+#define VENDOR_ID_GLAB			0x06c2
+#define DEVICE_ID_4MOTOR_SERVO_30	0x0038
+#define DEVICE_ID_1MOTOR_SERVO_30	0x0039
+
+#define VENDOR_ID_WISEGROUP		0x0925
+#define DEVICE_ID_1MOTOR_SERVO_20	0x8101
+#define DEVICE_ID_4MOTOR_SERVO_20	0x8104
+
+static struct usb_device_id id_table[] = {
+	{USB_DEVICE(VENDOR_ID_GLAB, DEVICE_ID_4MOTOR_SERVO_30)},
+	{USB_DEVICE(VENDOR_ID_GLAB, DEVICE_ID_1MOTOR_SERVO_30)},
+	{USB_DEVICE(VENDOR_ID_WISEGROUP, DEVICE_ID_4MOTOR_SERVO_20)},
+	{USB_DEVICE(VENDOR_ID_WISEGROUP, DEVICE_ID_1MOTOR_SERVO_20)},
+	{}
+};
+
+MODULE_DEVICE_TABLE(usb, id_table);
+
+struct phidget_servo {
+	struct usb_device *udev;
+	int version;
+	int quad_servo;
+	int pulse[4];
+	int degrees[4];
+	int minutes[4];
+};
+
+static void
+change_position_v30(struct phidget_servo *servo, int servo_no, int degrees, 
+								int minutes)
+{
+	int retval;
+	unsigned char *buffer;
+
+	buffer = kmalloc(6, GFP_KERNEL);
+	if (!buffer) {
+		dev_err(&servo->udev->dev, "%s - out of memory\n",
+			__FUNCTION__);
+		return;
+	}
+
+	/*
+	 * pulse = 0 - 4095
+	 * angle = 0 - 180 degrees
+	 *
+	 * pulse = angle * 10.6 + 243.8	
+	 */
+	servo->pulse[servo_no] = ((degrees*60 + minutes)*106 + 2438*60)/600;	
+	servo->degrees[servo_no]= degrees;
+	servo->minutes[servo_no]= minutes;	
+
+	/* 
+	 * The PhidgetServo v3.0 is controlled by sending 6 bytes,
+	 * 4 * 12 bits for each servo.
+	 *
+	 * low = lower 8 bits pulse
+	 * high = higher 4 bits pulse
+	 *
+	 * offset     bits
+	 * +---+-----------------+
+	 * | 0 |      low 0      |
+	 * +---+--------+--------+
+	 * | 1 | high 1 | high 0 |
+	 * +---+--------+--------+
+	 * | 2 |      low 1      |
+	 * +---+-----------------+
+	 * | 3 |      low 2      |
+	 * +---+--------+--------+
+	 * | 4 | high 3 | high 2 |
+	 * +---+--------+--------+
+	 * | 5 |      low 3      |
+	 * +---+-----------------+
+	 */
+
+	buffer[0] = servo->pulse[0] & 0xff;
+	buffer[1] = (servo->pulse[0] >> 8 & 0x0f)
+	    | (servo->pulse[1] >> 4 & 0xf0);
+	buffer[2] = servo->pulse[1] & 0xff;
+	buffer[3] = servo->pulse[2] & 0xff;
+	buffer[4] = (servo->pulse[2] >> 8 & 0x0f)
+	    | (servo->pulse[3] >> 4 & 0xf0);
+	buffer[5] = servo->pulse[3] & 0xff;
+
+	dev_dbg(&servo->udev->dev,
+		"data: %02x %02x %02x %02x %02x %02x\n",
+		buffer[0], buffer[1], buffer[2],
+		buffer[3], buffer[4], buffer[5]);
+
+	retval = usb_control_msg(servo->udev,
+				 usb_sndctrlpipe(servo->udev, 0),
+				 0x09, 0x21, 0x0200, 0x0000, buffer, 6, 2 * HZ);
+	if (retval != 6)
+		dev_err(&servo->udev->dev, "retval = %d\n", retval);
+	kfree(buffer);
+}
+
+static void
+change_position_v20(struct phidget_servo *servo, int servo_no, int degrees,
+								int minutes)
+{
+	int retval;
+	unsigned char *buffer;
+
+	buffer = kmalloc(2, GFP_KERNEL);
+	if (!buffer) {
+		dev_err(&servo->udev->dev, "%s - out of memory\n",
+			__FUNCTION__);
+		return;
+	}
+
+	/*
+	 * angle = 0 - 180 degrees
+	 * pulse = angle + 23
+	 */
+	servo->pulse[servo_no]= degrees + 23;
+	servo->degrees[servo_no]= degrees;
+	servo->minutes[servo_no]= 0;
+
+	/*
+	 * The PhidgetServo v2.0 is controlled by sending two bytes. The
+	 * first byte is the servo number xor'ed with 2:
+	 *
+	 * servo 0 = 2
+	 * servo 1 = 3
+	 * servo 2 = 0
+	 * servo 3 = 1
+	 *
+	 * The second byte is the position.
+	 */
+
+	buffer[0] = servo_no ^ 2;
+	buffer[1] = servo->pulse[servo_no];
+
+	dev_dbg(&servo->udev->dev, "data: %02x %02x\n", buffer[0], buffer[1]);
+
+	retval = usb_control_msg(servo->udev,
+				 usb_sndctrlpipe(servo->udev, 0),
+				 0x09, 0x21, 0x0200, 0x0000, buffer, 2, 2 * HZ);
+	if (retval != 2)
+		dev_err(&servo->udev->dev, "retval = %d\n", retval);
+	kfree(buffer);
+}
+
+#define show_set(value)	\
+static ssize_t set_servo##value (struct device *dev,			\
+					const char *buf, size_t count)	\
+{									\
+	int degrees, minutes;						\
+	struct usb_interface *intf = to_usb_interface (dev);		\
+	struct phidget_servo *servo = usb_get_intfdata (intf);		\
+									\
+	minutes = 0;							\
+	/* must at least convert degrees */				\
+	if (sscanf (buf, "%d.%d", &degrees, &minutes) < 1) {		\
+		return -EINVAL;						\
+	}								\
+									\
+	if (degrees < -23 || degrees > (180 + 23) ||			\
+	    minutes < 0 || minutes > 59) {				\
+		return -EINVAL;						\
+	}								\
+									\
+	if (servo->version >= 3) 					\
+		change_position_v30 (servo, value, degrees, minutes);	\
+	else 								\
+		change_position_v20 (servo, value, degrees, minutes);	\
+									\
+	return count;							\
+}									\
+									\
+static ssize_t show_servo##value (struct device *dev, char *buf) 	\
+{									\
+	struct usb_interface *intf = to_usb_interface (dev);		\
+	struct phidget_servo *servo = usb_get_intfdata (intf);		\
+									\
+	return sprintf (buf, "%d.%02d\n", servo->degrees[value],	\
+				servo->minutes[value]);			\
+}									\
+static DEVICE_ATTR(servo##value, S_IWUGO | S_IRUGO,			\
+	  show_servo##value, set_servo##value);
+
+show_set(0);
+show_set(1);
+show_set(2);
+show_set(3);
+
+static int
+servo_probe(struct usb_interface *interface, const struct usb_device_id *id)
+{
+	struct usb_device *udev = interface_to_usbdev(interface);
+	struct phidget_servo *dev = NULL;
+
+	dev = kmalloc(sizeof (struct phidget_servo), GFP_KERNEL);
+	if (dev == NULL) {
+		dev_err(&interface->dev, "%s - out of memory\n", __FUNCTION__);
+		return -ENOMEM;
+	}
+	memset(dev, 0x00, sizeof (*dev));
+
+	dev->udev = usb_get_dev(udev);
+	switch (udev->descriptor.idVendor) {
+	case VENDOR_ID_WISEGROUP:
+		dev->version = 2;
+		break;
+	case VENDOR_ID_GLAB:
+		dev->version = 3;
+		break;
+	}
+	switch (udev->descriptor.idProduct) {
+	case DEVICE_ID_4MOTOR_SERVO_20:
+	case DEVICE_ID_4MOTOR_SERVO_30:
+		dev->quad_servo = 1;
+		break;
+	case DEVICE_ID_1MOTOR_SERVO_20:
+	case DEVICE_ID_1MOTOR_SERVO_30:
+		dev->quad_servo = 0;
+		break;
+	}
+
+	usb_set_intfdata(interface, dev);
+
+	device_create_file(&interface->dev, &dev_attr_servo0);
+	if (dev->quad_servo) {
+		device_create_file(&interface->dev, &dev_attr_servo1);
+		device_create_file(&interface->dev, &dev_attr_servo2);
+		device_create_file(&interface->dev, &dev_attr_servo3);
+	}
+
+	dev_info(&interface->dev, "USB %d-Motor PhidgetServo v%d.0 attached\n",
+		 dev->quad_servo ? 4 : 1, dev->version);
+	if (dev->version == 2) 
+		dev_info(&interface->dev,
+			 "WARNING: v2.0 not tested! Please report if it works.\n");
+
+	return 0;
+}
+
+static void
+servo_disconnect(struct usb_interface *interface)
+{
+	struct phidget_servo *dev;
+
+	dev = usb_get_intfdata(interface);
+	usb_set_intfdata(interface, NULL);
+
+	device_remove_file(&interface->dev, &dev_attr_servo0);
+	if (dev->quad_servo) {
+		device_remove_file(&interface->dev, &dev_attr_servo1);
+		device_remove_file(&interface->dev, &dev_attr_servo2);
+		device_remove_file(&interface->dev, &dev_attr_servo3);
+	}
+
+	usb_put_dev(dev->udev);
+
+	kfree(dev);
+
+	dev_info(&interface->dev, "USB %d-Motor PhidgetServo v%d.0 detached\n",
+		 dev->quad_servo ? 4 : 1, dev->version);
+}
+
+static struct usb_driver servo_driver = {
+	.owner = THIS_MODULE,
+	.name = "phidgetservo",
+	.probe = servo_probe,
+	.disconnect = servo_disconnect,
+	.id_table = id_table
+};
+
+static int __init
+phidget_servo_init(void)
+{
+	int retval = 0;
+
+	retval = usb_register(&servo_driver);
+	if (retval)
+		err("usb_register failed. Error number %d", retval);
+
+	return retval;
+}
+
+static void __exit
+phidget_servo_exit(void)
+{
+	usb_deregister(&servo_driver);
+}
+
+module_init(phidget_servo_init);
+module_exit(phidget_servo_exit);
+
+MODULE_AUTHOR(DRIVER_AUTHOR);
+MODULE_DESCRIPTION(DRIVER_DESC);
+MODULE_LICENSE("GPL");
diff -Nru a/drivers/usb/misc/tiglusb.c b/drivers/usb/misc/tiglusb.c
--- a/drivers/usb/misc/tiglusb.c	Sun May 16 01:18:33 2004
+++ b/drivers/usb/misc/tiglusb.c	Sun May 16 01:18:33 2004
@@ -33,6 +33,7 @@
 #include <linux/usb.h>
 #include <linux/smp_lock.h>
 #include <linux/devfs_fs_kernel.h>
+#include <linux/device.h>
 
 #include <linux/ticable.h>
 #include "tiglusb.h"
@@ -49,6 +50,7 @@
 
 static tiglusb_t tiglusb[MAXTIGL];
 static int timeout = TIMAXTIME;	/* timeout in tenth of seconds     */
+static struct class_simple *tiglusb_class;
 
 /*---------- misc functions ------------------------------------------- */
 
@@ -336,7 +338,7 @@
 {
 	struct usb_device *dev = interface_to_usbdev(intf);
 	int minor = -1;
-	int i;
+	int i, err = 0;
 	ptiglusb_t s;
 
 	dbg ("probing vendor id 0x%x, device id 0x%x",
@@ -347,18 +349,23 @@
 	 * the TIGL hardware, there's only 1 configuration.
 	 */
 
-	if (dev->descriptor.bNumConfigurations != 1)
-		return -ENODEV;
+	if (dev->descriptor.bNumConfigurations != 1) {
+		err = -ENODEV;
+		goto out;
+	}
 
 	if ((dev->descriptor.idProduct != 0xe001)
-	    && (dev->descriptor.idVendor != 0x451))
-		return -ENODEV;
+	    && (dev->descriptor.idVendor != 0x451)) {
+		err = -ENODEV;
+		goto out;
+	}
 
 	// NOTE:  it's already in this config, this shouldn't be needed.
 	// is this working around some hardware bug?
 	if (usb_reset_configuration (dev) < 0) {
 		err ("tiglusb_probe: reset_configuration failed");
-		return -ENODEV;
+		err = -ENODEV;
+		goto out;
 	}
 
 	/*
@@ -372,8 +379,10 @@
 		}
 	}
 
-	if (minor == -1)
-		return -ENODEV;
+	if (minor == -1) {
+		err = -ENODEV;
+		goto out;
+	}
 
 	s = &tiglusb[minor];
 
@@ -383,17 +392,28 @@
 	up (&s->mutex);
 	dbg ("bound to interface");
 
-	devfs_mk_cdev(MKDEV(TIUSB_MAJOR, TIUSB_MINOR) + s->minor,
+	class_simple_device_add(tiglusb_class, MKDEV(TIUSB_MAJOR, TIUSB_MINOR + s->minor),
+			NULL, "usb%d", s->minor);
+	err = devfs_mk_cdev(MKDEV(TIUSB_MAJOR, TIUSB_MINOR) + s->minor,
 			S_IFCHR | S_IRUGO | S_IWUGO,
 			"ticables/usb/%d", s->minor);
 
+	if (err)
+		goto out_class;
+
 	/* Display firmware version */
 	info ("firmware revision %i.%02x",
 		dev->descriptor.bcdDevice >> 8,
 		dev->descriptor.bcdDevice & 0xff);
 
 	usb_set_intfdata (intf, s);
-	return 0;
+	err = 0;
+	goto out;
+
+out_class:
+	class_simple_device_remove(MKDEV(TIUSB_MAJOR, TIUSB_MINOR + s->minor));
+out:
+	return err;
 }
 
 static void
@@ -423,6 +443,7 @@
 	s->dev = NULL;
 	s->opened = 0;
 
+	class_simple_device_remove(MKDEV(TIUSB_MAJOR, TIUSB_MINOR + s->minor));
 	devfs_remove("ticables/usb/%d", s->minor);
 
 	info ("device %d removed", s->minor);
@@ -473,7 +494,7 @@
 tiglusb_init (void)
 {
 	unsigned u;
-	int result;
+	int result, err = 0;
 
 	/* initialize struct */
 	for (u = 0; u < MAXTIGL; u++) {
@@ -490,28 +511,41 @@
 	/* register device */
 	if (register_chrdev (TIUSB_MAJOR, "tiglusb", &tiglusb_fops)) {
 		err ("unable to get major %d", TIUSB_MAJOR);
-		return -EIO;
+		err = -EIO;
+		goto out;
 	}
 
 	/* Use devfs, tree: /dev/ticables/usb/[0..3] */
 	devfs_mk_dir ("ticables/usb");
 
+	tiglusb_class = class_simple_create(THIS_MODULE, "tiglusb");
+	if (IS_ERR(tiglusb_class)) {
+		err = PTR_ERR(tiglusb_class);
+		goto out_chrdev;
+	}
 	/* register USB module */
 	result = usb_register (&tiglusb_driver);
 	if (result < 0) {
-		unregister_chrdev (TIUSB_MAJOR, "tiglusb");
-		return -1;
+		err = -1;
+		goto out_chrdev;
 	}
 
 	info (DRIVER_DESC ", version " DRIVER_VERSION);
 
-	return 0;
+	err = 0;
+	goto out;
+
+out_chrdev:
+	unregister_chrdev (TIUSB_MAJOR, "tiglusb");
+out:
+	return err;
 }
 
 static void __exit
 tiglusb_cleanup (void)
 {
 	usb_deregister (&tiglusb_driver);
+	class_simple_destroy(tiglusb_class);
 	devfs_remove("ticables/usb");
 	unregister_chrdev (TIUSB_MAJOR, "tiglusb");
 }
diff -Nru a/drivers/usb/misc/usbtest.c b/drivers/usb/misc/usbtest.c
--- a/drivers/usb/misc/usbtest.c	Sun May 16 01:18:36 2004
+++ b/drivers/usb/misc/usbtest.c	Sun May 16 01:18:36 2004
@@ -802,6 +802,7 @@
 				switch (status) {
 				case -EINPROGRESS:
 				case -EBUSY:
+				case -EIDRM:
 					continue;
 				default:
 					dbg ("urb unlink --> %d", status);
@@ -1038,8 +1039,6 @@
 	if (!status)
 		status = usb_submit_urb (urb, SLAB_ATOMIC);
 	if (status) {
-		if (status == -ECONNRESET || status == -ENOENT)
-			status = 0;
 		urb->status = status;
 		complete ((struct completion *) urb->context);
 	}
@@ -1077,8 +1076,9 @@
 	wait_ms (jiffies % (2 * INTERRUPT_RATE));
 retry:
 	retval = usb_unlink_urb (urb);
-	if (retval == -EBUSY) {
+	if (retval == -EBUSY || retval == -EIDRM) {
 		/* we can't unlink urbs while they're completing.
+		 * or if they've completed, and we haven't resubmitted.
 		 * "normal" drivers would prevent resubmission, but
 		 * since we're testing unlink paths, we can't.
 		 */
diff -Nru a/drivers/usb/misc/uss720.c b/drivers/usb/misc/uss720.c
--- a/drivers/usb/misc/uss720.c	Sun May 16 01:18:33 2004
+++ b/drivers/usb/misc/uss720.c	Sun May 16 01:18:33 2004
@@ -553,7 +553,7 @@
 	i = usb_set_interface(usbdev, intf->altsetting->desc.bInterfaceNumber, 2);
 	printk(KERN_DEBUG "uss720: set inteface result %d\n", i);
 
-	interface = &intf->altsetting[2];
+	interface = intf->cur_altsetting;
 
 	/*
 	 * Allocate parport interface 
diff -Nru a/drivers/usb/net/kaweth.c b/drivers/usb/net/kaweth.c
--- a/drivers/usb/net/kaweth.c	Sun May 16 01:18:36 2004
+++ b/drivers/usb/net/kaweth.c	Sun May 16 01:18:36 2004
@@ -123,9 +123,10 @@
 		const struct usb_device_id *id	/* from id_table */
 	);
 static void kaweth_disconnect(struct usb_interface *intf);
-int kaweth_internal_control_msg(struct usb_device *usb_dev, unsigned int pipe,
-				struct usb_ctrlrequest *cmd, void *data,
-				int len, int timeout);
+static int kaweth_internal_control_msg(struct usb_device *usb_dev,
+				       unsigned int pipe,
+				       struct usb_ctrlrequest *cmd, void *data,
+				       int len, int timeout);
 
 /****************************************************************
  *     usb_device_id
@@ -1277,9 +1278,10 @@
 
 /*-------------------------------------------------------------------*/
 // returns status (negative) or length (positive)
-int kaweth_internal_control_msg(struct usb_device *usb_dev, unsigned int pipe,
-                            struct usb_ctrlrequest *cmd, void *data, int len,
-			    int timeout)
+static int kaweth_internal_control_msg(struct usb_device *usb_dev,
+				       unsigned int pipe,
+				       struct usb_ctrlrequest *cmd, void *data,
+				       int len, int timeout)
 {
         struct urb *urb;
         int retv;
@@ -1305,7 +1307,7 @@
 /****************************************************************
  *     kaweth_init
  ****************************************************************/
-int __init kaweth_init(void)
+static int __init kaweth_init(void)
 {
 	kaweth_dbg("Driver loading");
 	return usb_register(&kaweth_driver);
@@ -1314,7 +1316,7 @@
 /****************************************************************
  *     kaweth_exit
  ****************************************************************/
-void __exit kaweth_exit(void)
+static void __exit kaweth_exit(void)
 {
 	usb_deregister(&kaweth_driver);
 }
diff -Nru a/drivers/usb/net/pegasus.c b/drivers/usb/net/pegasus.c
--- a/drivers/usb/net/pegasus.c	Sun May 16 01:18:36 2004
+++ b/drivers/usb/net/pegasus.c	Sun May 16 01:18:36 2004
@@ -1321,13 +1321,13 @@
 	.id_table = pegasus_ids,
 };
 
-int __init pegasus_init(void)
+static int __init pegasus_init(void)
 {
 	info(DRIVER_VERSION ":" DRIVER_DESC);
 	return usb_register(&pegasus_driver);
 }
 
-void __exit pegasus_exit(void)
+static void __exit pegasus_exit(void)
 {
 	usb_deregister(&pegasus_driver);
 }
diff -Nru a/drivers/usb/net/rtl8150.c b/drivers/usb/net/rtl8150.c
--- a/drivers/usb/net/rtl8150.c	Sun May 16 01:18:35 2004
+++ b/drivers/usb/net/rtl8150.c	Sun May 16 01:18:35 2004
@@ -167,7 +167,7 @@
 
 typedef struct rtl8150 rtl8150_t;
 
-unsigned long multicast_filter_limit = 32;
+static unsigned long multicast_filter_limit = 32;
 
 static void fill_skb_pool(rtl8150_t *);
 static void free_skb_pool(rtl8150_t *);
@@ -516,7 +516,7 @@
 	netif_wake_queue(dev->netdev);
 }
 
-void intr_callback(struct urb *urb, struct pt_regs *regs)
+static void intr_callback(struct urb *urb, struct pt_regs *regs)
 {
 	rtl8150_t *dev;
 	__u8 *d;
@@ -977,13 +977,13 @@
 	}
 }
 
-int __init usb_rtl8150_init(void)
+static int __init usb_rtl8150_init(void)
 {
 	info(DRIVER_DESC " " DRIVER_VERSION);
 	return usb_register(&rtl8150_driver);
 }
 
-void __exit usb_rtl8150_exit(void)
+static void __exit usb_rtl8150_exit(void)
 {
 	usb_deregister(&rtl8150_driver);
 }
diff -Nru a/drivers/usb/net/usbnet.c b/drivers/usb/net/usbnet.c
--- a/drivers/usb/net/usbnet.c	Sun May 16 01:18:35 2004
+++ b/drivers/usb/net/usbnet.c	Sun May 16 01:18:35 2004
@@ -107,7 +107,13 @@
  *
  *-------------------------------------------------------------------------*/
 
+// #define	DEBUG			// error path messages, extra info
+// #define	VERBOSE			// more; success messages
+
 #include <linux/config.h>
+#ifdef	CONFIG_USB_DEBUG
+#   define DEBUG
+#endif
 #include <linux/module.h>
 #include <linux/kmod.h>
 #include <linux/sched.h>
@@ -120,25 +126,15 @@
 #include <linux/mii.h>
 #include <asm/uaccess.h>
 #include <asm/unaligned.h>
-
-
-// #define	DEBUG			// error path messages, extra info
-// #define	VERBOSE			// more; success messages
-#define	REALLY_QUEUE
-
-#if !defined (DEBUG) && defined (CONFIG_USB_DEBUG)
-#   define DEBUG
-#endif
 #include <linux/usb.h>
-
 #include <asm/io.h>
 #include <asm/scatterlist.h>
 #include <linux/mm.h>
 #include <linux/dma-mapping.h>
 
-
 #define DRIVER_VERSION		"25-Aug-2003"
 
+
 /*-------------------------------------------------------------------------*/
 
 /*
@@ -148,13 +144,8 @@
  * For high speed, each frame comfortably fits almost 36 max size
  * Ethernet packets (so queues should be bigger).
  */
-#ifdef REALLY_QUEUE
 #define	RX_QLEN(dev) (((dev)->udev->speed == USB_SPEED_HIGH) ? 60 : 4)
 #define	TX_QLEN(dev) (((dev)->udev->speed == USB_SPEED_HIGH) ? 60 : 4)
-#else
-#define	RX_QLEN(dev)		1
-#define	TX_QLEN(dev)		1
-#endif
 
 // packets are always ethernet inside
 // ... except they can be bigger (limit of 64K with NetChip framing)
@@ -606,7 +597,7 @@
 	ax8817x_write_cmd(dev, AX_CMD_SET_HW_MII, 0, 0, 0, &buf);
 }
 
-void ax8817x_get_wol(struct net_device *net, struct ethtool_wolinfo *wolinfo)
+static void ax8817x_get_wol(struct net_device *net, struct ethtool_wolinfo *wolinfo)
 {
 	struct usbnet *dev = (struct usbnet *)net->priv;
 	u8 opt;
@@ -626,7 +617,7 @@
 	}
 }
 
-int ax8817x_set_wol(struct net_device *net, struct ethtool_wolinfo *wolinfo)
+static int ax8817x_set_wol(struct net_device *net, struct ethtool_wolinfo *wolinfo)
 {
 	struct usbnet *dev = (struct usbnet *)net->priv;
 	u8 opt = 0;
@@ -646,8 +637,8 @@
 	return 0;
 }
 
-int ax8817x_get_eeprom(struct net_device *net, 
-		       struct ethtool_eeprom *eeprom, u8 *data)
+static int ax8817x_get_eeprom(struct net_device *net,
+			      struct ethtool_eeprom *eeprom, u8 *data)
 {
 	struct usbnet *dev = (struct usbnet *)net->priv;
 	u16 *ebuf = (u16 *)data;
@@ -928,8 +919,8 @@
  */
 static int generic_cdc_bind (struct usbnet *dev, struct usb_interface *intf)
 {
-	u8				*buf = intf->altsetting->extra;
-	int				len = intf->altsetting->extralen;
+	u8				*buf = intf->cur_altsetting->extra;
+	int				len = intf->cur_altsetting->extralen;
 	struct usb_interface_descriptor	*d;
 	struct cdc_state		*info = (void *) &dev->data;
 	int				status;
@@ -955,7 +946,7 @@
 	/* this assumes that if there's a non-RNDIS vendor variant
 	 * of cdc-acm, it'll fail RNDIS requests cleanly.
 	 */
-	rndis = (intf->altsetting->desc.bInterfaceProtocol == 0xff);
+	rndis = (intf->cur_altsetting->desc.bInterfaceProtocol == 0xff);
 
 	memset (info, 0, sizeof *info);
 	info->control = intf;
@@ -1006,7 +997,7 @@
 			if (!info->control || !info->data) {
 				dev_dbg (&intf->dev,
 					"master #%u/%p slave #%u/%p\n",
-					info->u->bMasterInterface0
+					info->u->bMasterInterface0,
 					info->control,
 					info->u->bSlaveInterface0,
 					info->data);
@@ -1025,7 +1016,7 @@
 			}
 
 			/* a data interface altsetting does the real i/o */
-			d = &info->data->altsetting->desc;
+			d = &info->data->cur_altsetting->desc;
 			if (d->bInterfaceClass != USB_CLASS_CDC_DATA) {
 				dev_dbg (&intf->dev, "slave class %u\n",
 					d->bInterfaceClass);
@@ -1142,10 +1133,13 @@
 	unsigned char	buf [13];
 
 	tmp = usb_string (dev->udev, e->iMACAddress, buf, sizeof buf);
-	if (tmp < 0)
+	if (tmp != 12) {
+		dev_dbg (&dev->udev->dev,
+			"bad MAC string %d fetch, %d\n", e->iMACAddress, tmp);
+		if (tmp >= 0)
+			tmp = -EINVAL;
 		return tmp;
-	else if (tmp != 12)
-		return -EINVAL;
+	}
 	for (i = tmp = 0; i < 6; i++, tmp += 2)
 		dev->net->dev_addr [i] =
 			 (nibble (buf [tmp]) << 4) + nibble (buf [tmp + 1]);
@@ -3014,7 +3008,7 @@
 
 // precondition: never called in_interrupt
 
-int
+static int
 usbnet_probe (struct usb_interface *udev, const struct usb_device_id *prod)
 {
 	struct usbnet			*dev;
@@ -3204,6 +3198,10 @@
 	// Hawking UF200, TrendNet TU2-ET100
 	USB_DEVICE (0x07b8, 0x420a),
 	.driver_info =  (unsigned long) &hawking_uf200_info,
+}, {
+        // Billionton Systems, USB2AR 
+        USB_DEVICE (0x08dd, 0x90ff),
+        .driver_info =  (unsigned long) &ax8817x_info,
 }, {
 	// ATEN UC210T
 	USB_DEVICE (0x0557, 0x2009),
diff -Nru a/drivers/usb/serial/belkin_sa.c b/drivers/usb/serial/belkin_sa.c
--- a/drivers/usb/serial/belkin_sa.c	Sun May 16 01:18:35 2004
+++ b/drivers/usb/serial/belkin_sa.c	Sun May 16 01:18:35 2004
@@ -244,23 +244,12 @@
 
 static void belkin_sa_close (struct usb_serial_port *port, struct file *filp)
 {
-	struct usb_serial *serial;
-
-	if (port_paranoia_check (port, __FUNCTION__))
-		return;
-
-	serial = get_usb_serial (port, __FUNCTION__);
-	if (!serial)
-		return;
-
 	dbg("%s port %d", __FUNCTION__, port->number);
 
-	if (serial->dev) {
-		/* shutdown our bulk reads and writes */
-		usb_unlink_urb (port->write_urb);
-		usb_unlink_urb (port->read_urb);
-		usb_unlink_urb (port->interrupt_in_urb);
-	}
+	/* shutdown our bulk reads and writes */
+	usb_unlink_urb (port->write_urb);
+	usb_unlink_urb (port->read_urb);
+	usb_unlink_urb (port->interrupt_in_urb);
 } /* belkin_sa_close */
 
 
@@ -268,7 +257,6 @@
 {
 	struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
 	struct belkin_sa_private *priv;
-	struct usb_serial *serial;
 	unsigned char *data = urb->transfer_buffer;
 	int retval;
 	unsigned long flags;
@@ -288,14 +276,6 @@
 		goto exit;
 	}
 
-	if (port_paranoia_check (port, __FUNCTION__))
-		return;
-
-	serial = port->serial;
-
-	if (serial_paranoia_check (serial, __FUNCTION__))
-		return;
-	
 	usb_serial_debug_data (__FILE__, __FUNCTION__, urb->actual_length, data);
 
 	/* Handle known interrupt data */
diff -Nru a/drivers/usb/serial/console.c b/drivers/usb/serial/console.c
--- a/drivers/usb/serial/console.c	Sun May 16 01:18:36 2004
+++ b/drivers/usb/serial/console.c	Sun May 16 01:18:36 2004
@@ -199,11 +199,12 @@
 {
 	static struct usbcons_info *info = &usbcons_info;
 	struct usb_serial_port *port = info->port;
-	struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
+	struct usb_serial *serial;
 	int retval = -ENODEV;
 
-	if (!serial || !port)
+	if (!port)
 		return;
+	serial = port->serial;
 
 	if (count == 0)
 		return;
diff -Nru a/drivers/usb/serial/cyberjack.c b/drivers/usb/serial/cyberjack.c
--- a/drivers/usb/serial/cyberjack.c	Sun May 16 01:18:36 2004
+++ b/drivers/usb/serial/cyberjack.c	Sun May 16 01:18:36 2004
@@ -155,9 +155,6 @@
 	unsigned long flags;
 	int result = 0;
 
-	if (port_paranoia_check (port, __FUNCTION__))
-		return -ENODEV;
-
 	dbg("%s - port %d", __FUNCTION__, port->number);
 
 	dbg("%s - usb_clear_halt", __FUNCTION__ );
@@ -321,23 +318,15 @@
 {
 	struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
 	struct cyberjack_private *priv = usb_get_serial_port_data(port);
-	struct usb_serial *serial;
 	unsigned char *data = urb->transfer_buffer;
 	int result;
 
-	if (port_paranoia_check (port, __FUNCTION__))
-		return;
-
 	dbg("%s - port %d", __FUNCTION__, port->number);
 
 	/* the urb might have been killed. */
 	if (urb->status)
 		return;
 
-	serial = port->serial;
-	if (serial_paranoia_check (serial, __FUNCTION__))
-		return;
-
 	usb_serial_debug_data (__FILE__, __FUNCTION__, urb->actual_length, data);
 
 	/* React only to interrupts signaling a bulk_in transfer */
@@ -386,7 +375,6 @@
 {
 	struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
 	struct cyberjack_private *priv = usb_get_serial_port_data(port);
-	struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
 	struct tty_struct *tty;
 	unsigned char *data = urb->transfer_buffer;
 	short todo;
@@ -395,11 +383,6 @@
 
 	dbg("%s - port %d", __FUNCTION__, port->number);
 	
-	if (!serial) {
-		dbg("%s - bad serial pointer, exiting", __FUNCTION__);
-		return;
-	}
-
 	if (urb->status) {
 		usb_serial_debug_data (__FILE__, __FUNCTION__, urb->actual_length, urb->transfer_buffer);
 		dbg("%s - nonzero read bulk status received: %d", __FUNCTION__, urb->status);
@@ -447,15 +430,9 @@
 {
 	struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
 	struct cyberjack_private *priv = usb_get_serial_port_data(port);
-	struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
 
 	dbg("%s - port %d", __FUNCTION__, port->number);
 	
-	if (!serial) {
-		dbg("%s - bad serial pointer, exiting", __FUNCTION__);
-		return;
-	}
-
 	if (urb->status) {
 		dbg("%s - nonzero write bulk status received: %d", __FUNCTION__, urb->status);
 		return;
@@ -483,11 +460,11 @@
 		priv->wrsent+=length;
 
 		/* set up our urb */
-		usb_fill_bulk_urb(port->write_urb, serial->dev, 
-			      usb_sndbulkpipe(serial->dev, port->bulk_out_endpointAddress),
+		usb_fill_bulk_urb(port->write_urb, port->serial->dev, 
+			      usb_sndbulkpipe(port->serial->dev, port->bulk_out_endpointAddress),
 			      port->write_urb->transfer_buffer, length,
-			      ((serial->type->write_bulk_callback) ? 
-			       serial->type->write_bulk_callback : 
+			      ((port->serial->type->write_bulk_callback) ? 
+			       port->serial->type->write_bulk_callback : 
 			       cyberjack_write_bulk_callback), 
 			      port);
 
diff -Nru a/drivers/usb/serial/digi_acceleport.c b/drivers/usb/serial/digi_acceleport.c
--- a/drivers/usb/serial/digi_acceleport.c	Sun May 16 01:18:35 2004
+++ b/drivers/usb/serial/digi_acceleport.c	Sun May 16 01:18:35 2004
@@ -1396,11 +1396,6 @@
 		return;
 	}
 
-	/* further sanity checks */
-	if( port_paranoia_check( port, __FUNCTION__ )
-	|| serial_paranoia_check( serial, __FUNCTION__ ) )
-		return;
-
 	/* try to send any buffered data on this port, if it is open */
 	spin_lock( &priv->dp_port_lock );
 	priv->dp_write_urb_in_use = 0;
@@ -1798,7 +1793,6 @@
 		return;
 	}
 	if( port->serial == NULL
-	|| serial_paranoia_check( port->serial, __FUNCTION__ )
 	|| (serial_priv=usb_get_serial_data(port->serial)) == NULL ) {
 		err("%s: serial is bad or serial->private is NULL, status=%d", __FUNCTION__, urb->status );
 		return;
@@ -1851,11 +1845,6 @@
 	unsigned char *data = ((unsigned char *)urb->transfer_buffer)+3;
 	int flag,throttled;
 
-
-	/* sanity check */
-	if( port_paranoia_check( port, __FUNCTION__ ) )
-		return( -1 );
-
 	/* do not process callbacks on closed ports */
 	/* but do continue the read chain */
 	if( port->open_count == 0 )
@@ -1980,9 +1969,8 @@
 
 		port = serial->port[line];
 
-		if( port_paranoia_check( port, __FUNCTION__ )
-		|| (priv=usb_get_serial_port_data(port)) == NULL )
-			return( -1 );
+		if ((priv=usb_get_serial_port_data(port)) == NULL )
+			return -1;
 
 		if( opcode == DIGI_CMD_READ_INPUT_SIGNALS ) {
 
diff -Nru a/drivers/usb/serial/empeg.c b/drivers/usb/serial/empeg.c
--- a/drivers/usb/serial/empeg.c	Sun May 16 01:18:36 2004
+++ b/drivers/usb/serial/empeg.c	Sun May 16 01:18:36 2004
@@ -157,9 +157,6 @@
 	struct usb_serial *serial = port->serial;
 	int result = 0;
 
-	if (port_paranoia_check (port, __FUNCTION__))
-		return -ENODEV;
-
 	dbg("%s - port %d", __FUNCTION__, port->number);
 
 	/* Force default termio settings */
@@ -190,21 +187,10 @@
 
 static void empeg_close (struct usb_serial_port *port, struct file * filp)
 {
-	struct usb_serial *serial;
-
-	if (port_paranoia_check (port, __FUNCTION__))
-		return;
-
 	dbg("%s - port %d", __FUNCTION__, port->number);
 
-	serial = get_usb_serial (port, __FUNCTION__);
-	if (!serial)
-		return;
-
-	if (serial->dev) {
-		/* shutdown our bulk read */
-		usb_unlink_urb (port->read_urb);
-	}
+	/* shutdown our bulk read */
+	usb_unlink_urb (port->read_urb);
 	/* Uncomment the following line if you want to see some statistics in your syslog */
 	/* dev_info (&port->dev, "Bytes In = %d  Bytes Out = %d\n", bytes_in, bytes_out); */
 }
@@ -353,9 +339,6 @@
 {
 	struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
 
-	if (port_paranoia_check (port, __FUNCTION__))
-		return;
-
 	dbg("%s - port %d", __FUNCTION__, port->number);
 
 	if (urb->status) {
@@ -370,22 +353,13 @@
 static void empeg_read_bulk_callback (struct urb *urb, struct pt_regs *regs)
 {
 	struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
-	struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
 	struct tty_struct *tty;
 	unsigned char *data = urb->transfer_buffer;
 	int i;
 	int result;
 
-	if (port_paranoia_check (port, __FUNCTION__))
-		return;
-
 	dbg("%s - port %d", __FUNCTION__, port->number);
 
-	if (!serial) {
-		dbg("%s - bad serial pointer, exiting", __FUNCTION__);
-		return;
-	}
-
 	if (urb->status) {
 		dbg("%s - nonzero read bulk status received: %d", __FUNCTION__, urb->status);
 		return;
@@ -416,8 +390,8 @@
 	/* Continue trying to always read  */
 	usb_fill_bulk_urb(
 		port->read_urb,
-		serial->dev, 
-		usb_rcvbulkpipe(serial->dev,
+		port->serial->dev, 
+		usb_rcvbulkpipe(port->serial->dev,
 			port->bulk_in_endpointAddress),
 		port->read_urb->transfer_buffer,
 		port->read_urb->transfer_buffer_length,
diff -Nru a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
--- a/drivers/usb/serial/ftdi_sio.c	Sun May 16 01:18:36 2004
+++ b/drivers/usb/serial/ftdi_sio.c	Sun May 16 01:18:36 2004
@@ -1282,7 +1282,7 @@
 static int  ftdi_open (struct usb_serial_port *port, struct file *filp)
 { /* ftdi_open */
 	struct termios tmp_termios;
-	struct usb_serial *serial = port->serial;
+	struct usb_device *dev = port->serial->dev;
 	struct ftdi_private *priv = usb_get_serial_port_data(port);
 	
 	int result = 0;
@@ -1295,7 +1295,7 @@
 
 	/* No error checking for this (will get errors later anyway) */
 	/* See ftdi_sio.h for description of what is reset */
-	usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
+	usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
 			FTDI_SIO_RESET_REQUEST, FTDI_SIO_RESET_REQUEST_TYPE, 
 			FTDI_SIO_RESET_SIO, 
 			0, buf, 0, WDR_TIMEOUT);
@@ -1318,8 +1318,8 @@
 	}
 
 	/* Start reading from the device */
-	usb_fill_bulk_urb(port->read_urb, serial->dev, 
-		      usb_rcvbulkpipe(serial->dev, port->bulk_in_endpointAddress),
+	usb_fill_bulk_urb(port->read_urb, dev,
+		      usb_rcvbulkpipe(dev, port->bulk_in_endpointAddress),
 		      port->read_urb->transfer_buffer, port->read_urb->transfer_buffer_length,
 		      ftdi_read_bulk_callback, port);
 	result = usb_submit_urb(port->read_urb, GFP_KERNEL);
@@ -1342,47 +1342,37 @@
 
 static void ftdi_close (struct usb_serial_port *port, struct file *filp)
 { /* ftdi_close */
-	struct usb_serial *serial;
 	unsigned int c_cflag = port->tty->termios->c_cflag;
 	char buf[1];
 
 	dbg("%s", __FUNCTION__);
 
-	serial = get_usb_serial ( port, __FUNCTION__);
-	if (!serial)
-		return;
+	if (c_cflag & HUPCL){
+		/* Disable flow control */
+		if (usb_control_msg(port->serial->dev, 
+				    usb_sndctrlpipe(port->serial->dev, 0),
+				    FTDI_SIO_SET_FLOW_CTRL_REQUEST,
+				    FTDI_SIO_SET_FLOW_CTRL_REQUEST_TYPE,
+				    0, 0, buf, 0, WDR_TIMEOUT) < 0) {
+			err("error from flowcontrol urb");
+		}	    
 
-	if (serial->dev) {
-		if (c_cflag & HUPCL){
-			/* Disable flow control */
-			if (usb_control_msg(serial->dev, 
-					    usb_sndctrlpipe(serial->dev, 0),
-					    FTDI_SIO_SET_FLOW_CTRL_REQUEST,
-					    FTDI_SIO_SET_FLOW_CTRL_REQUEST_TYPE,
-					    0, 0, buf, 0, WDR_TIMEOUT) < 0) {
-				err("error from flowcontrol urb");
-			}	    
-
-			/* drop DTR */
-			if (set_dtr(port, LOW) < 0){
-				err("Error from DTR LOW urb");
-			}
-			/* drop RTS */
-			if (set_rts(port, LOW) < 0) {
-				err("Error from RTS LOW urb");
-			}
-		} /* Note change no line if hupcl is off */
-		
-		/* shutdown our bulk read */
-		if (port->read_urb) {
-			if (usb_unlink_urb (port->read_urb) < 0) {
-				err("Error unlinking read urb");
-			}
+		/* drop DTR */
+		if (set_dtr(port, LOW) < 0){
+			err("Error from DTR LOW urb");
 		}
-
-	} /* if (serial->dev) */
-
-
+		/* drop RTS */
+		if (set_rts(port, LOW) < 0) {
+			err("Error from RTS LOW urb");
+		}
+	} /* Note change no line if hupcl is off */
+	
+	/* shutdown our bulk read */
+	if (port->read_urb) {
+		if (usb_unlink_urb (port->read_urb) < 0) {
+			err("Error unlinking read urb");
+		}
+	}
 } /* ftdi_close */
 
 
@@ -1397,7 +1387,6 @@
 static int ftdi_write (struct usb_serial_port *port, int from_user,
 			   const unsigned char *buf, int count)
 { /* ftdi_write */
-	struct usb_serial *serial = get_usb_serial ( port, __FUNCTION__);
 	struct ftdi_private *priv = usb_get_serial_port_data(port);
 	struct urb *urb;
 	unsigned char *buffer;
@@ -1484,8 +1473,8 @@
 	usb_serial_debug_data (__FILE__, __FUNCTION__, transfer_size, buffer);
 
 	/* fill the buffer and send it */
-	usb_fill_bulk_urb(urb, serial->dev, 
-		      usb_sndbulkpipe(serial->dev, port->bulk_out_endpointAddress),
+	usb_fill_bulk_urb(urb, port->serial->dev, 
+		      usb_sndbulkpipe(port->serial->dev, port->bulk_out_endpointAddress),
 		      buffer, transfer_size,
 		      ftdi_write_bulk_callback, port);
 
@@ -1513,9 +1502,6 @@
 	/* free up the transfer buffer, as usb_free_urb() does not do this */
 	kfree (urb->transfer_buffer);
 
-	if (port_paranoia_check (port, __FUNCTION__))
-		return;
-	
 	dbg("%s - port %d", __FUNCTION__, port->number);
 	
 	if (urb->status) {
@@ -1558,7 +1544,6 @@
 static void ftdi_read_bulk_callback (struct urb *urb, struct pt_regs *regs)
 { /* ftdi_read_bulk_callback */
 	struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
-	struct usb_serial *serial;
 	struct tty_struct *tty;
 	struct ftdi_private *priv;
 	char error_flag;
@@ -1577,18 +1562,9 @@
 
 	dbg("%s", __FUNCTION__);
 
-	if (port_paranoia_check (port, __FUNCTION__)) {
-		return;
-	}
 	if (port->open_count <= 0)
 		return;
 
-	serial = get_usb_serial(port,__FUNCTION__);
-	if (!serial){
-		dbg("%s - bad serial pointer - exiting",__FUNCTION__);
-		return;
-	}
-	
 	tty = port->tty;
 	if (!tty) {
 		dbg("%s - bad tty pointer - exiting",__FUNCTION__);
@@ -1696,8 +1672,8 @@
 	/* if the port is closed stop trying to read */
 	if (port->open_count > 0){
 		/* Continue trying to always read  */
-		usb_fill_bulk_urb(port->read_urb, serial->dev, 
-			      usb_rcvbulkpipe(serial->dev, port->bulk_in_endpointAddress),
+		usb_fill_bulk_urb(port->read_urb, port->serial->dev, 
+			      usb_rcvbulkpipe(port->serial->dev, port->bulk_in_endpointAddress),
 			      port->read_urb->transfer_buffer, port->read_urb->transfer_buffer_length,
 			      ftdi_read_bulk_callback, port);
 
@@ -1712,7 +1688,6 @@
 
 static void ftdi_break_ctl( struct usb_serial_port *port, int break_state )
 {
-	struct usb_serial *serial = port->serial;
 	struct ftdi_private *priv = usb_get_serial_port_data(port);
 	__u16 urb_value = 0; 
 	char buf[1];
@@ -1728,7 +1703,7 @@
 	}
 
 	
-	if (usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
+	if (usb_control_msg(port->serial->dev, usb_sndctrlpipe(port->serial->dev, 0),
 			    FTDI_SIO_SET_DATA_REQUEST, 
 			    FTDI_SIO_SET_DATA_REQUEST_TYPE,
 			    urb_value , 0,
@@ -1748,7 +1723,7 @@
 
 static void ftdi_set_termios (struct usb_serial_port *port, struct termios *old_termios)
 { /* ftdi_termios */
-	struct usb_serial *serial = port->serial;
+	struct usb_device *dev = port->serial->dev;
 	unsigned int cflag = port->tty->termios->c_cflag;
 	struct ftdi_private *priv = usb_get_serial_port_data(port);
 	__u16 urb_value; /* will hold the new flags */
@@ -1807,7 +1782,7 @@
 	 *  or'ed with this value  */
 	priv->last_set_data_urb_value = urb_value;
 	
-	if (usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
+	if (usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
 			    FTDI_SIO_SET_DATA_REQUEST, 
 			    FTDI_SIO_SET_DATA_REQUEST_TYPE,
 			    urb_value , 0,
@@ -1818,7 +1793,7 @@
 	/* Now do the baudrate */
 	if ((cflag & CBAUD) == B0 ) {
 		/* Disable flow control */
-		if (usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
+		if (usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
 				    FTDI_SIO_SET_FLOW_CTRL_REQUEST, 
 				    FTDI_SIO_SET_FLOW_CTRL_REQUEST_TYPE,
 				    0, 0, 
@@ -1844,8 +1819,8 @@
 	/* Note device also supports DTR/CD (ugh) and Xon/Xoff in hardware */
 	if (cflag & CRTSCTS) {
 		dbg("%s Setting to CRTSCTS flow control", __FUNCTION__);
-		if (usb_control_msg(serial->dev, 
-				    usb_sndctrlpipe(serial->dev, 0),
+		if (usb_control_msg(dev, 
+				    usb_sndctrlpipe(dev, 0),
 				    FTDI_SIO_SET_FLOW_CTRL_REQUEST, 
 				    FTDI_SIO_SET_FLOW_CTRL_REQUEST_TYPE,
 				    0 , FTDI_SIO_RTS_CTS_HS,
@@ -1870,8 +1845,8 @@
 			vstop=port->tty->termios->c_cc[VSTOP];
 			urb_value=(vstop << 8) | (vstart);
 
-			if (usb_control_msg(serial->dev,
-					    usb_sndctrlpipe(serial->dev, 0),
+			if (usb_control_msg(dev,
+					    usb_sndctrlpipe(dev, 0),
 					    FTDI_SIO_SET_FLOW_CTRL_REQUEST,
 					    FTDI_SIO_SET_FLOW_CTRL_REQUEST_TYPE,
 					    urb_value , FTDI_SIO_XON_XOFF_HS,
@@ -1882,8 +1857,8 @@
 			/* else clause to only run if cfag ! CRTSCTS and iflag ! XOFF */
 			/* CHECKME Assuming XON/XOFF handled by tty stack - not by device */
 			dbg("%s Turning off hardware flow control", __FUNCTION__);
-			if (usb_control_msg(serial->dev, 
-					    usb_sndctrlpipe(serial->dev, 0),
+			if (usb_control_msg(dev, 
+					    usb_sndctrlpipe(dev, 0),
 					    FTDI_SIO_SET_FLOW_CTRL_REQUEST, 
 					    FTDI_SIO_SET_FLOW_CTRL_REQUEST_TYPE,
 					    0, 0, 
@@ -1899,7 +1874,6 @@
 
 static int ftdi_tiocmget (struct usb_serial_port *port, struct file *file)
 {
-	struct usb_serial *serial = port->serial;
 	struct ftdi_private *priv = usb_get_serial_port_data(port);
 	unsigned char buf[2];
 	int ret;
@@ -1908,8 +1882,8 @@
 	switch (priv->chip_type) {
 	case SIO:
 		/* Request the status from the device */
-		if ((ret = usb_control_msg(serial->dev, 
-					   usb_rcvctrlpipe(serial->dev, 0),
+		if ((ret = usb_control_msg(port->serial->dev, 
+					   usb_rcvctrlpipe(port->serial->dev, 0),
 					   FTDI_SIO_GET_MODEM_STATUS_REQUEST, 
 					   FTDI_SIO_GET_MODEM_STATUS_REQUEST_TYPE,
 					   0, 0, 
@@ -1923,8 +1897,8 @@
 	case FT232BM:
 		/* the 8U232AM returns a two byte value (the sio is a 1 byte value) - in the same
 		   format as the data returned from the in point */
-		if ((ret = usb_control_msg(serial->dev, 
-					   usb_rcvctrlpipe(serial->dev, 0),
+		if ((ret = usb_control_msg(port->serial->dev, 
+					   usb_rcvctrlpipe(port->serial->dev, 0),
 					   FTDI_SIO_GET_MODEM_STATUS_REQUEST, 
 					   FTDI_SIO_GET_MODEM_STATUS_REQUEST_TYPE,
 					   0, 0, 
@@ -2107,14 +2081,13 @@
 static void ftdi_unthrottle (struct usb_serial_port *port)
 {
 	int result;
-	struct usb_serial *serial = port->serial;
 
 	dbg("%s - port %d", __FUNCTION__, port->number);
 
-	port->read_urb->dev = serial->dev;
+	port->read_urb->dev = port->serial->dev;
 
-	usb_fill_bulk_urb(port->read_urb, serial->dev, 
-		      usb_rcvbulkpipe(serial->dev, port->bulk_in_endpointAddress),
+	usb_fill_bulk_urb(port->read_urb, port->serial->dev, 
+		      usb_rcvbulkpipe(port->serial->dev, port->bulk_in_endpointAddress),
 		      port->read_urb->transfer_buffer, port->read_urb->transfer_buffer_length,
 		      ftdi_read_bulk_callback, port);
 
diff -Nru a/drivers/usb/serial/generic.c b/drivers/usb/serial/generic.c
--- a/drivers/usb/serial/generic.c	Sun May 16 01:18:33 2004
+++ b/drivers/usb/serial/generic.c	Sun May 16 01:18:33 2004
@@ -16,6 +16,7 @@
 #include <linux/tty.h>
 #include <linux/tty_flip.h>
 #include <linux/module.h>
+#include <linux/moduleparam.h>
 #include <linux/usb.h>
 #include <asm/uaccess.h>
 
@@ -32,10 +33,10 @@
 static __u16 vendor  = 0x05f9;
 static __u16 product = 0xffff;
 
-MODULE_PARM(vendor, "h");
+module_param(vendor, ushort, 0);
 MODULE_PARM_DESC(vendor, "User specified USB idVendor");
 
-MODULE_PARM(product, "h");
+module_param(product, ushort, 0);
 MODULE_PARM_DESC(product, "User specified USB idProduct");
 
 static struct usb_device_id generic_device_ids[2]; /* Initially all zeroes. */
@@ -83,9 +84,6 @@
 	struct usb_serial *serial = port->serial;
 	int result = 0;
 
-	if (port_paranoia_check (port, __FUNCTION__))
-		return -ENODEV;
-
 	dbg("%s - port %d", __FUNCTION__, port->number);
 
 	/* force low_latency on so that our tty_push actually forces the data through, 
@@ -223,7 +221,7 @@
 void usb_serial_generic_read_bulk_callback (struct urb *urb, struct pt_regs *regs)
 {
 	struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
-	struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
+	struct usb_serial *serial = port->serial;
 	struct tty_struct *tty;
 	unsigned char *data = urb->transfer_buffer;
 	int i;
@@ -231,11 +229,6 @@
 
 	dbg("%s - port %d", __FUNCTION__, port->number);
 
-	if (!serial) {
-		dbg("%s - bad serial pointer, exiting", __FUNCTION__);
-		return;
-	}
-
 	if (urb->status) {
 		dbg("%s - nonzero read bulk status received: %d", __FUNCTION__, urb->status);
 		return;
@@ -273,14 +266,8 @@
 void usb_serial_generic_write_bulk_callback (struct urb *urb, struct pt_regs *regs)
 {
 	struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
-	struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
 
 	dbg("%s - port %d", __FUNCTION__, port->number);
-
-	if (!serial) {
-		dbg("%s - bad serial pointer, exiting", __FUNCTION__);
-		return;
-	}
 
 	if (urb->status) {
 		dbg("%s - nonzero write bulk status received: %d", __FUNCTION__, urb->status);
diff -Nru a/drivers/usb/serial/io_edgeport.c b/drivers/usb/serial/io_edgeport.c
--- a/drivers/usb/serial/io_edgeport.c	Sun May 16 01:18:33 2004
+++ b/drivers/usb/serial/io_edgeport.c	Sun May 16 01:18:33 2004
@@ -776,10 +776,6 @@
 
 	dbg("%s", __FUNCTION__);
 
-	if (serial_paranoia_check (edge_serial->serial, __FUNCTION__)) {
-		return;
-	}
-
 	switch (urb->status) {
 	case 0:
 		/* success */
@@ -825,19 +821,17 @@
 			txCredits = data[position] | (data[position+1] << 8);
 			if (txCredits) {
 				port = edge_serial->serial->port[portNumber];
-				if (port_paranoia_check (port, __FUNCTION__) == 0) {
-					edge_port = usb_get_serial_port_data(port);
-					if (edge_port->open) {
-						edge_port->txCredits += txCredits;
-						dbg("%s - txcredits for port%d = %d", __FUNCTION__, portNumber, edge_port->txCredits);
-
-						/* tell the tty driver that something has changed */
-						if (edge_port->port->tty)
-							wake_up_interruptible(&edge_port->port->tty->write_wait);
+				edge_port = usb_get_serial_port_data(port);
+				if (edge_port->open) {
+					edge_port->txCredits += txCredits;
+					dbg("%s - txcredits for port%d = %d", __FUNCTION__, portNumber, edge_port->txCredits);
+
+					/* tell the tty driver that something has changed */
+					if (edge_port->port->tty)
+						wake_up_interruptible(&edge_port->port->tty->write_wait);
 
-						// Since we have more credit, check if more data can be sent
-						send_more_port_data(edge_serial, edge_port);
-					}
+					// Since we have more credit, check if more data can be sent
+					send_more_port_data(edge_serial, edge_port);
 				}
 			}
 			position += 2;
@@ -867,10 +861,6 @@
 
 	dbg("%s", __FUNCTION__);
 
-	if (serial_paranoia_check (edge_serial->serial, __FUNCTION__)) {
-		return;
-	}
-
 	if (urb->status) {
 		dbg("%s - nonzero read bulk status received: %d", __FUNCTION__, urb->status);
 		return;
@@ -916,10 +906,6 @@
 
 	dbg("%s", __FUNCTION__);
 
-	if (port_paranoia_check (edge_port->port, __FUNCTION__)) {
-		return;
-	}
-
 	if (urb->status) {
 		dbg("%s - nonzero write bulk status received: %d", __FUNCTION__, urb->status);
 	}
@@ -969,10 +955,6 @@
 	/* Free the command urb */
 	usb_free_urb (urb);
 
-	if (port_paranoia_check (edge_port->port, __FUNCTION__)) {
-		return;
-	}
-
 	if (status) {
 		dbg("%s - nonzero write bulk status received: %d", __FUNCTION__, status);
 		return;
@@ -1009,9 +991,6 @@
 	int response;
 	int timeout;
 
-	if (port_paranoia_check (port, __FUNCTION__))
-		return -ENODEV;
-	
 	dbg("%s - port %d", __FUNCTION__, port->number);
 
 	if (edge_port == NULL)
@@ -1240,55 +1219,45 @@
  *****************************************************************************/
 static void edge_close (struct usb_serial_port *port, struct file * filp)
 {
-	struct usb_serial *serial;
 	struct edgeport_serial *edge_serial;
 	struct edgeport_port *edge_port;
 	int status;
 
-	if (port_paranoia_check (port, __FUNCTION__))
-		return;
-	
 	dbg("%s - port %d", __FUNCTION__, port->number);
 			 
-	serial = get_usb_serial (port, __FUNCTION__);
-	if (!serial)
-		return;
-	
-	edge_serial = usb_get_serial_data(serial);
+	edge_serial = usb_get_serial_data(port->serial);
 	edge_port = usb_get_serial_port_data(port);
 	if ((edge_serial == NULL) || (edge_port == NULL))
 		return;
 	
-	if (serial->dev) {
-		// block until tx is empty
-		block_until_tx_empty(edge_port);
-
-		edge_port->closePending = TRUE;
-
-		/* flush and chase */
-		edge_port->chaseResponsePending = TRUE;
-
-		dbg("%s - Sending IOSP_CMD_CHASE_PORT", __FUNCTION__);
-		status = send_iosp_ext_cmd (edge_port, IOSP_CMD_CHASE_PORT, 0);
-		if (status == 0) {
-			// block until chase finished
-			block_until_chase_response(edge_port);
-		} else {
-			edge_port->chaseResponsePending = FALSE;
-		}
+	// block until tx is empty
+	block_until_tx_empty(edge_port);
 
-		/* close the port */
-		dbg("%s - Sending IOSP_CMD_CLOSE_PORT", __FUNCTION__);
-		send_iosp_ext_cmd (edge_port, IOSP_CMD_CLOSE_PORT, 0);
-
-		//port->close = TRUE;
-		edge_port->closePending = FALSE;
-		edge_port->open = FALSE;
-		edge_port->openPending = FALSE;
+	edge_port->closePending = TRUE;
 
-		if (edge_port->write_urb) {
-			usb_unlink_urb (edge_port->write_urb);
-		}
+	/* flush and chase */
+	edge_port->chaseResponsePending = TRUE;
+
+	dbg("%s - Sending IOSP_CMD_CHASE_PORT", __FUNCTION__);
+	status = send_iosp_ext_cmd (edge_port, IOSP_CMD_CHASE_PORT, 0);
+	if (status == 0) {
+		// block until chase finished
+		block_until_chase_response(edge_port);
+	} else {
+		edge_port->chaseResponsePending = FALSE;
+	}
+
+	/* close the port */
+	dbg("%s - Sending IOSP_CMD_CLOSE_PORT", __FUNCTION__);
+	send_iosp_ext_cmd (edge_port, IOSP_CMD_CLOSE_PORT, 0);
+
+	//port->close = TRUE;
+	edge_port->closePending = FALSE;
+	edge_port->open = FALSE;
+	edge_port->openPending = FALSE;
+
+	if (edge_port->write_urb) {
+		usb_unlink_urb (edge_port->write_urb);
 	}
 
 	if (edge_port->write_urb) {
@@ -2071,24 +2040,22 @@
 				/* spit this data back into the tty driver if this port is open */
 				if (rxLen) {
 					port = edge_serial->serial->port[edge_serial->rxPort];
-					if (port_paranoia_check (port, __FUNCTION__) == 0) {
-        					edge_port = usb_get_serial_port_data(port);
-						if (edge_port->open) {
-							tty = edge_port->port->tty;
-							if (tty) {
-								dbg("%s - Sending %d bytes to TTY for port %d", __FUNCTION__, rxLen, edge_serial->rxPort);
-								for (i = 0; i < rxLen ; ++i) {
-									/* if we insert more than TTY_FLIPBUF_SIZE characters, we drop them. */
-									if(tty->flip.count >= TTY_FLIPBUF_SIZE) {
-										tty_flip_buffer_push(tty);
-									}
-									/* this doesn't actually push the data through unless tty->low_latency is set */
-									tty_insert_flip_char(tty, buffer[i], 0);
+					edge_port = usb_get_serial_port_data(port);
+					if (edge_port->open) {
+						tty = edge_port->port->tty;
+						if (tty) {
+							dbg("%s - Sending %d bytes to TTY for port %d", __FUNCTION__, rxLen, edge_serial->rxPort);
+							for (i = 0; i < rxLen ; ++i) {
+								/* if we insert more than TTY_FLIPBUF_SIZE characters, we drop them. */
+								if(tty->flip.count >= TTY_FLIPBUF_SIZE) {
+									tty_flip_buffer_push(tty);
 								}
-								tty_flip_buffer_push(tty);
+								/* this doesn't actually push the data through unless tty->low_latency is set */
+								tty_insert_flip_char(tty, buffer[i], 0);
 							}
-							edge_port->icount.rx += rxLen;
+							tty_flip_buffer_push(tty);
 						}
+						edge_port->icount.rx += rxLen;
 					}
 					buffer += rxLen;
 				}
@@ -2124,9 +2091,6 @@
 
 	/* switch the port pointer to the one being currently talked about */
 	port = edge_serial->serial->port[edge_serial->rxPort];
-	if (port_paranoia_check (port, __FUNCTION__)) {
-		return;
-	}
         edge_port = usb_get_serial_port_data(port);
 	if (edge_port == NULL) {
 		dev_err(&edge_serial->serial->dev->dev, "%s - edge_port == NULL for port %d\n", __FUNCTION__, edge_serial->rxPort);
diff -Nru a/drivers/usb/serial/io_ti.c b/drivers/usb/serial/io_ti.c
--- a/drivers/usb/serial/io_ti.c	Sun May 16 01:18:36 2004
+++ b/drivers/usb/serial/io_ti.c	Sun May 16 01:18:36 2004
@@ -279,8 +279,8 @@
  * @address_type: Can read both XDATA and I2C
  * @buffer: pointer to input data buffer
  */
-int TIReadDownloadMemory (struct usb_device *dev, int start_address, int length,
-			  __u8 address_type, __u8 *buffer)
+static int TIReadDownloadMemory(struct usb_device *dev, int start_address,
+				int length, __u8 address_type, __u8 *buffer)
 {
 	int status = 0;
 	__u8 read_length;
@@ -328,7 +328,7 @@
 	return status;
 }
 
-int TIReadRam (struct usb_device *dev, int start_address, int length, __u8 *buffer)
+static int TIReadRam (struct usb_device *dev, int start_address, int length, __u8 *buffer)
 {
 	return TIReadDownloadMemory (dev,
 				     start_address,
@@ -612,7 +612,7 @@
 	return 0;
 }
 
-int TIReadRom (struct edgeport_serial *serial, int start_address, int length, __u8 *buffer)
+static int TIReadRom (struct edgeport_serial *serial, int start_address, int length, __u8 *buffer)
 {
 	int status;
 
@@ -632,7 +632,7 @@
 	return status;
 }
 
-int TIWriteRom (struct edgeport_serial *serial, int start_address, int length, __u8 *buffer)
+static int TIWriteRom (struct edgeport_serial *serial, int start_address, int length, __u8 *buffer)
 {
 	if (serial->product_info.TiMode == TI_MODE_BOOT)
 		return TIWriteBootMemory (serial,
@@ -995,7 +995,7 @@
 	if (status)
 		return status;
 
-	interface = &serial->serial->dev->config->interface[0]->altsetting->desc;
+	interface = &serial->serial->interface->cur_altsetting->desc;
 	if (!interface) {
 		dev_err (&serial->serial->dev->dev, "%s - no interface set, error!", __FUNCTION__);
 		return -ENODEV;
@@ -1649,10 +1649,6 @@
 
 	dbg("%s", __FUNCTION__);
 
-	if (serial_paranoia_check (edge_serial->serial, __FUNCTION__)) {
-		return;
-	}
-
 	switch (urb->status) {
 	case 0:
 		/* success */
@@ -1685,11 +1681,6 @@
 	dbg ("%s - port_number %d, function %d, info 0x%x",
 	     __FUNCTION__, port_number, function, data[1]);
 	port = edge_serial->serial->port[port_number];
-	if (port_paranoia_check (port, __FUNCTION__)) {
-		dbg ("%s - change found for port that is not present",
-		     __FUNCTION__);
-		return;
-	}
 	edge_port = usb_get_serial_port_data(port);
 	if (!edge_port) {
 		dbg ("%s - edge_port not found", __FUNCTION__);
@@ -1744,9 +1735,6 @@
 
 	dbg("%s", __FUNCTION__);
 
-	if (port_paranoia_check (edge_port->port, __FUNCTION__))
-		return;
-
 	if (urb->status) {
 		dbg ("%s - nonzero read bulk status received: %d",
 		     __FUNCTION__, urb->status);
@@ -1804,23 +1792,17 @@
 static void edge_bulk_out_callback (struct urb *urb, struct pt_regs *regs)
 {
 	struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
-	struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
 	struct tty_struct *tty;
 
 	dbg ("%s - port %d", __FUNCTION__, port->number);
 
-	if (!serial) {
-		dbg ("%s - bad serial pointer, exiting", __FUNCTION__);
-		return;
-	}
-
 	if (urb->status) {
 		dbg ("%s - nonzero write bulk status received: %d",
 		     __FUNCTION__, urb->status);
 
 		if (urb->status == -EPIPE) {
 			/* clear any problem that might have happened on this pipe */
-			usb_clear_halt (serial->dev, urb->pipe);
+			usb_clear_halt (port->serial->dev, urb->pipe);
 		}
 		return;
 	}
@@ -1848,9 +1830,6 @@
 	u16 open_settings;
 	u8 transaction_timeout;
 
-	if (port_paranoia_check (port, __FUNCTION__))
-		return -ENODEV;
-	
 	dbg("%s - port %d", __FUNCTION__, port->number);
 
 	if (edge_port == NULL)
@@ -1993,61 +1972,50 @@
 
 static void edge_close (struct usb_serial_port *port, struct file * filp)
 {
-	struct usb_serial *serial;
 	struct edgeport_serial *edge_serial;
 	struct edgeport_port *edge_port;
 	int port_number;
 	int status;
 
-	if (port_paranoia_check (port, __FUNCTION__))
-		return;
-	
 	dbg("%s - port %d", __FUNCTION__, port->number);
 			 
-	serial = get_usb_serial (port, __FUNCTION__);
-	if (!serial)
-		return;
-	
-	edge_serial = usb_get_serial_data(serial);
+	edge_serial = usb_get_serial_data(port->serial);
 	edge_port = usb_get_serial_port_data(port);
 	if ((edge_serial == NULL) || (edge_port == NULL))
 		return;
 	
-	if (serial->dev) {
-		/* The bulkreadcompletion routine will check 
-		 * this flag and dump add read data */
-		edge_port->close_pending = 1;
-
-		/* chase the port close */
-		TIChasePort (edge_port);
-
-		usb_unlink_urb (port->read_urb);
-
-		/* assuming we can still talk to the device,
-		 * send a close port command to it */
-		dbg("%s - send umpc_close_port", __FUNCTION__);
-		port_number = port->number - port->serial->minor;
-		status = TIWriteCommandSync (port->serial->dev,
-					     UMPC_CLOSE_PORT,
-					     (__u8)(UMPM_UART1_PORT + port_number),
-					     0,
-					     NULL,
-					     0);
-		--edge_port->edge_serial->num_ports_open;
-		if (edge_port->edge_serial->num_ports_open <= 0) {
-			/* last port is now closed, let's shut down our interrupt urb */
-			usb_unlink_urb (serial->port[0]->interrupt_in_urb);
-			edge_port->edge_serial->num_ports_open = 0;
-		}
-	edge_port->close_pending = 0;
+	/* The bulkreadcompletion routine will check 
+	 * this flag and dump add read data */
+	edge_port->close_pending = 1;
+
+	/* chase the port close */
+	TIChasePort (edge_port);
+
+	usb_unlink_urb (port->read_urb);
+
+	/* assuming we can still talk to the device,
+	 * send a close port command to it */
+	dbg("%s - send umpc_close_port", __FUNCTION__);
+	port_number = port->number - port->serial->minor;
+	status = TIWriteCommandSync (port->serial->dev,
+				     UMPC_CLOSE_PORT,
+				     (__u8)(UMPM_UART1_PORT + port_number),
+				     0,
+				     NULL,
+				     0);
+	--edge_port->edge_serial->num_ports_open;
+	if (edge_port->edge_serial->num_ports_open <= 0) {
+		/* last port is now closed, let's shut down our interrupt urb */
+		usb_unlink_urb (port->serial->port[0]->interrupt_in_urb);
+		edge_port->edge_serial->num_ports_open = 0;
 	}
+	edge_port->close_pending = 0;
 
 	dbg("%s - exited", __FUNCTION__);
 }
 
 static int edge_write (struct usb_serial_port *port, int from_user, const unsigned char *data, int count)
 {
-	struct usb_serial *serial = port->serial;
 	struct edgeport_port *edge_port = usb_get_serial_port_data(port);
 	int result;
 
@@ -2080,8 +2048,8 @@
 	usb_serial_debug_data (__FILE__, __FUNCTION__, count, port->write_urb->transfer_buffer);
 
 	/* set up our urb */
-	usb_fill_bulk_urb (port->write_urb, serial->dev,
-			   usb_sndbulkpipe (serial->dev,
+	usb_fill_bulk_urb (port->write_urb, port->serial->dev,
+			   usb_sndbulkpipe (port->serial->dev,
 					    port->bulk_out_endpointAddress),
 			   port->write_urb->transfer_buffer, count,
 			   edge_bulk_out_callback,
diff -Nru a/drivers/usb/serial/ipaq.c b/drivers/usb/serial/ipaq.c
--- a/drivers/usb/serial/ipaq.c	Sun May 16 01:18:36 2004
+++ b/drivers/usb/serial/ipaq.c	Sun May 16 01:18:36 2004
@@ -150,7 +150,7 @@
 
 
 /* All of the device info needed for the Compaq iPAQ */
-struct usb_serial_device_type ipaq_device = {
+static struct usb_serial_device_type ipaq_device = {
 	.owner =		THIS_MODULE,
 	.name =			"PocketPC PDA",
 	.id_table =		ipaq_id_table,
@@ -181,10 +181,6 @@
 	int			i, result = 0;
 	int			retries = KP_RETRIES;
 
-	if (port_paranoia_check(port, __FUNCTION__)) {
-		return -ENODEV;
-	}
-	
 	dbg("%s - port %d", __FUNCTION__, port->number);
 
 	bytes_in = 0;
@@ -288,23 +284,13 @@
 
 static void ipaq_close(struct usb_serial_port *port, struct file *filp)
 {
-	struct usb_serial	*serial;
 	struct ipaq_private	*priv = usb_get_serial_port_data(port);
 
-	if (port_paranoia_check(port, __FUNCTION__)) {
-		return; 
-	}
-	
 	dbg("%s - port %d", __FUNCTION__, port->number);
 			 
-	serial = get_usb_serial(port, __FUNCTION__);
-	if (!serial)
-		return;
-
 	/*
 	 * shut down bulk read and write
 	 */
-
 	usb_unlink_urb(port->write_urb);
 	usb_unlink_urb(port->read_urb);
 	ipaq_destroy_lists(port);
@@ -318,21 +304,12 @@
 static void ipaq_read_bulk_callback(struct urb *urb, struct pt_regs *regs)
 {
 	struct usb_serial_port	*port = (struct usb_serial_port *)urb->context;
-	struct usb_serial	*serial = get_usb_serial (port, __FUNCTION__);
 	struct tty_struct	*tty;
 	unsigned char		*data = urb->transfer_buffer;
 	int			i, result;
 
-	if (port_paranoia_check(port, __FUNCTION__))
-		return;
-
 	dbg("%s - port %d", __FUNCTION__, port->number);
 
-	if (!serial) {
-		dbg("%s - bad serial pointer, exiting", __FUNCTION__);
-		return;
-	}
-
 	if (urb->status) {
 		dbg("%s - nonzero read bulk status received: %d", __FUNCTION__, urb->status);
 		return;
@@ -355,8 +332,8 @@
 	}
 
 	/* Continue trying to always read  */
-	usb_fill_bulk_urb(port->read_urb, serial->dev, 
-		      usb_rcvbulkpipe(serial->dev, port->bulk_in_endpointAddress),
+	usb_fill_bulk_urb(port->read_urb, port->serial->dev, 
+		      usb_rcvbulkpipe(port->serial->dev, port->bulk_in_endpointAddress),
 		      port->read_urb->transfer_buffer, port->read_urb->transfer_buffer_length,
 		      ipaq_read_bulk_callback, port);
 	result = usb_submit_urb(port->read_urb, GFP_ATOMIC);
@@ -488,10 +465,6 @@
 	unsigned long		flags;
 	int			result;
 
-	if (port_paranoia_check (port, __FUNCTION__)) {
-		return;
-	}
-	
 	dbg("%s - port %d", __FUNCTION__, port->number);
 	
 	if (urb->status) {
diff -Nru a/drivers/usb/serial/ir-usb.c b/drivers/usb/serial/ir-usb.c
--- a/drivers/usb/serial/ir-usb.c	Sun May 16 01:18:35 2004
+++ b/drivers/usb/serial/ir-usb.c	Sun May 16 01:18:35 2004
@@ -138,7 +138,7 @@
 };
 
 
-struct usb_serial_device_type ir_device = {
+static struct usb_serial_device_type ir_device = {
 	.owner =		THIS_MODULE,
 	.name =			"IR Dongle",
 	.id_table =		id_table,
@@ -279,13 +279,9 @@
 
 static int ir_open (struct usb_serial_port *port, struct file *filp)
 {
-	struct usb_serial *serial = port->serial;
 	char *buffer;
 	int result = 0;
 
-	if (port_paranoia_check (port, __FUNCTION__))
-		return -ENODEV;
-	
 	dbg("%s - port %d", __FUNCTION__, port->number);
 
 	if (buffer_size) {
@@ -313,8 +309,8 @@
 	/* Start reading from the device */
 	usb_fill_bulk_urb (
 		port->read_urb,
-		serial->dev, 
-		usb_rcvbulkpipe(serial->dev, port->bulk_in_endpointAddress),
+		port->serial->dev, 
+		usb_rcvbulkpipe(port->serial->dev, port->bulk_in_endpointAddress),
 		port->read_urb->transfer_buffer,
 		port->read_urb->transfer_buffer_length,
 		ir_read_bulk_callback,
@@ -328,21 +324,10 @@
 
 static void ir_close (struct usb_serial_port *port, struct file * filp)
 {
-	struct usb_serial *serial;
-
-	if (port_paranoia_check (port, __FUNCTION__))
-		return;
-	
 	dbg("%s - port %d", __FUNCTION__, port->number);
 			 
-	serial = get_usb_serial (port, __FUNCTION__);
-	if (!serial)
-		return;
-	
-	if (serial->dev) {
-		/* shutdown our bulk read */
-		usb_unlink_urb (port->read_urb);
-	}
+	/* shutdown our bulk read */
+	usb_unlink_urb (port->read_urb);
 }
 
 static int ir_write (struct usb_serial_port *port, int from_user, const unsigned char *buf, int count)
@@ -411,9 +396,6 @@
 {
 	struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
 
-	if (port_paranoia_check (port, __FUNCTION__))
-		return;
-	
 	dbg("%s - port %d", __FUNCTION__, port->number);
 	
 	if (urb->status) {
@@ -433,21 +415,12 @@
 static void ir_read_bulk_callback (struct urb *urb, struct pt_regs *regs)
 {
 	struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
-	struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
 	struct tty_struct *tty;
 	unsigned char *data = urb->transfer_buffer;
 	int result;
 
-	if (port_paranoia_check (port, __FUNCTION__))
-		return;
-
 	dbg("%s - port %d", __FUNCTION__, port->number);
 
-	if (!serial) {
-		dbg("%s - bad serial pointer, exiting", __FUNCTION__);
-		return;
-	}
-
 	if (!port->open_count) {
 		dbg("%s - port closed.", __FUNCTION__);
 		return;
@@ -496,8 +469,8 @@
 			/* Continue trying to always read */
 			usb_fill_bulk_urb (
 				port->read_urb,
-				serial->dev, 
-				usb_rcvbulkpipe(serial->dev,
+				port->serial->dev, 
+				usb_rcvbulkpipe(port->serial->dev,
 					port->bulk_in_endpointAddress),
 				port->read_urb->transfer_buffer,
 				port->read_urb->transfer_buffer_length,
diff -Nru a/drivers/usb/serial/keyspan.c b/drivers/usb/serial/keyspan.c
--- a/drivers/usb/serial/keyspan.c	Sun May 16 01:18:33 2004
+++ b/drivers/usb/serial/keyspan.c	Sun May 16 01:18:33 2004
@@ -133,9 +133,6 @@
 
 	/* Per device and per port private data */
 struct keyspan_serial_private {
-	/* number of active ports */
-	atomic_t	active_count;
-
 	const struct keyspan_device_details	*device_details;
 
 	struct urb	*instat_urb;
@@ -1144,13 +1141,9 @@
 static void keyspan_close(struct usb_serial_port *port, struct file *filp)
 {
 	int			i;
-	struct usb_serial	*serial;
+	struct usb_serial	*serial = port->serial;
 	struct keyspan_serial_private 	*s_priv;
 	struct keyspan_port_private 	*p_priv;
-
-	serial = get_usb_serial (port, __FUNCTION__);
-	if (!serial)
-		return;
 
 	dbg("%s", __FUNCTION__);
 	s_priv = usb_get_serial_data(serial);
diff -Nru a/drivers/usb/serial/keyspan.h b/drivers/usb/serial/keyspan.h
--- a/drivers/usb/serial/keyspan.h	Sun May 16 01:18:35 2004
+++ b/drivers/usb/serial/keyspan.h	Sun May 16 01:18:35 2004
@@ -326,6 +326,22 @@
 	.baudclk		= KEYSPAN_USA19_BAUDCLK,
 };
 
+static const struct keyspan_device_details mpr_device_details = {
+	.product_id		= keyspan_mpr_product_id,
+	.msg_format		= msg_usa28,
+	.num_ports		= 1,
+	.indat_endp_flip	= 1,
+	.outdat_endp_flip	= 1,
+	.indat_endpoints	= {0x81},
+	.outdat_endpoints	= {0x01},
+	.inack_endpoints	= {0x83},
+	.outcont_endpoints	= {0x03},
+	.instat_endpoint	= 0x84,
+	.glocont_endpoint	= -1,
+	.calculate_baud_rate	= keyspan_usa28_calc_baud,
+	.baudclk		= KEYSPAN_USA19_BAUDCLK,
+};
+
 static const struct keyspan_device_details usa19qw_device_details = {
 	.product_id		= keyspan_usa19qw_product_id,
 	.msg_format		= msg_usa26,
@@ -460,6 +476,7 @@
 	&usa18x_device_details,
 	&usa19_device_details,
 	&usa19qi_device_details,
+	&mpr_device_details,
 	&usa19qw_device_details,
 	&usa19w_device_details,
 	&usa19hs_device_details,
@@ -535,7 +552,7 @@
 	{ USB_DEVICE(KEYSPAN_VENDOR_ID, keyspan_usa19qw_product_id) },
 	{ USB_DEVICE(KEYSPAN_VENDOR_ID, keyspan_usa19w_product_id) },
 	{ USB_DEVICE(KEYSPAN_VENDOR_ID, keyspan_usa19hs_product_id) },
-	{ USB_DEVICE(KEYSPAN_VENDOR_ID, keyspan_mpr_pre_product_id) },
+	{ USB_DEVICE(KEYSPAN_VENDOR_ID, keyspan_mpr_product_id) },
 	{ } /* Terminating entry */
 };
 
diff -Nru a/drivers/usb/serial/keyspan_pda.c b/drivers/usb/serial/keyspan_pda.c
--- a/drivers/usb/serial/keyspan_pda.c	Sun May 16 01:18:35 2004
+++ b/drivers/usb/serial/keyspan_pda.c	Sun May 16 01:18:35 2004
@@ -226,8 +226,7 @@
 static void keyspan_pda_rx_interrupt (struct urb *urb, struct pt_regs *regs)
 {
 	struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
-	struct usb_serial *serial;
-       	struct tty_struct *tty;
+       	struct tty_struct *tty = port->tty;
 	unsigned char *data = urb->transfer_buffer;
 	int i;
 	int status;
@@ -249,22 +248,11 @@
 		goto exit;
 	}
 
-	
-	if (port_paranoia_check (port, "keyspan_pda_rx_interrupt")) {
-		return;
-	}
-
-	serial = port->serial;
-	if (serial_paranoia_check (serial, "keyspan_pda_rx_interrupt")) {
-		return;
-	}
-	
  	/* see if the message is data or a status interrupt */
 	switch (data[0]) {
 	case 0:
 		/* rest of message is rx data */
 		if (urb->actual_length) {
-			tty = serial->port[0]->tty;
 			for (i = 1; i < urb->actual_length ; ++i) {
 				tty_insert_flip_char(tty, data[i], 0);
 			}
@@ -278,7 +266,6 @@
 		case 1: /* modemline change */
 			break;
 		case 2: /* tx unthrottle interrupt */
-			tty = serial->port[0]->tty;
 			priv->tx_throttled = 0;
 			/* queue up a wakeup at scheduler time */
 			schedule_work(&priv->wakeup_work);
@@ -633,20 +620,10 @@
 static void keyspan_pda_write_bulk_callback (struct urb *urb, struct pt_regs *regs)
 {
 	struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
-	struct usb_serial *serial;
 	struct keyspan_pda_private *priv;
 
 	priv = usb_get_serial_port_data(port);
 
-	if (port_paranoia_check (port, "keyspan_pda_rx_interrupt")) {
-		return;
-	}
-
-	serial = port->serial;
-	if (serial_paranoia_check (serial, "keyspan_pda_rx_interrupt")) {
-		return;
-	}
-	
 	/* queue up a wakeup at scheduler time */
 	schedule_work(&priv->wakeup_work);
 }
diff -Nru a/drivers/usb/serial/kl5kusb105.c b/drivers/usb/serial/kl5kusb105.c
--- a/drivers/usb/serial/kl5kusb105.c	Sun May 16 01:18:35 2004
+++ b/drivers/usb/serial/kl5kusb105.c	Sun May 16 01:18:35 2004
@@ -187,12 +187,13 @@
 
 #define KLSI_TIMEOUT	 (HZ * 5 ) /* default urb timeout */
 
-static int klsi_105_chg_port_settings(struct usb_serial *serial,
+static int klsi_105_chg_port_settings(struct usb_serial_port *port,
 				      struct klsi_105_port_settings *settings)
 {
 	int rc;
 
-        rc = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
+        rc = usb_control_msg(port->serial->dev,
+			     usb_sndctrlpipe(port->serial->dev, 0),
 			     KL5KUSB105A_SIO_SET_DATA,
                              USB_TYPE_VENDOR | USB_DIR_OUT | USB_RECIP_INTERFACE,
 			     0, /* value */
@@ -227,7 +228,7 @@
  */
 /* It seems that the status buffer has always only 2 bytes length */
 #define KLSI_STATUSBUF_LEN	2
-static int klsi_105_get_line_state(struct usb_serial *serial,
+static int klsi_105_get_line_state(struct usb_serial_port *port,
 				   unsigned long *line_state_p)
 {
 	int rc;
@@ -235,7 +236,8 @@
 	__u16 status;
 
 	info("%s - sending SIO Poll request", __FUNCTION__);
-        rc = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
+        rc = usb_control_msg(port->serial->dev,
+			     usb_rcvctrlpipe(port->serial->dev, 0),
 			     KL5KUSB105A_SIO_POLL,
                              USB_TYPE_VENDOR | USB_DIR_IN,
 			     0, /* value */
@@ -362,7 +364,6 @@
 
 static int  klsi_105_open (struct usb_serial_port *port, struct file *filp)
 {
-	struct usb_serial *serial = port->serial;
 	struct klsi_105_private *priv = usb_get_serial_port_data(port);
 	int retval = 0;
 	int rc;
@@ -389,7 +390,7 @@
 	cfg.databits = kl5kusb105a_dtb_8;
 	cfg.unknown1 = 0;
 	cfg.unknown2 = 1;
-	klsi_105_chg_port_settings(serial, &cfg);
+	klsi_105_chg_port_settings(port, &cfg);
 	
 	/* set up termios structure */
 	spin_lock_irqsave (&priv->lock, flags);
@@ -407,8 +408,8 @@
 	spin_unlock_irqrestore (&priv->lock, flags);
 
 	/* READ_ON and urb submission */
-	usb_fill_bulk_urb(port->read_urb, serial->dev, 
-		      usb_rcvbulkpipe(serial->dev,
+	usb_fill_bulk_urb(port->read_urb, port->serial->dev, 
+		      usb_rcvbulkpipe(port->serial->dev,
 				      port->bulk_in_endpointAddress),
 		      port->read_urb->transfer_buffer,
 		      port->read_urb->transfer_buffer_length,
@@ -422,7 +423,8 @@
 		goto exit;
 	}
 
-	rc = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev,0),
+	rc = usb_control_msg(port->serial->dev,
+			     usb_sndctrlpipe(port->serial->dev,0),
 			     KL5KUSB105A_SIO_CONFIGURE,
 			     USB_TYPE_VENDOR|USB_DIR_OUT|USB_RECIP_INTERFACE,
 			     KL5KUSB105A_SIO_CONFIGURE_READ_ON,
@@ -436,7 +438,7 @@
 	} else 
 		dbg("%s - enabled reading", __FUNCTION__);
 
-	rc = klsi_105_get_line_state(serial, &line_state);
+	rc = klsi_105_get_line_state(port, &line_state);
 	if (rc >= 0) {
 		spin_lock_irqsave (&priv->lock, flags);
 		priv->line_state = line_state;
@@ -453,20 +455,14 @@
 
 static void klsi_105_close (struct usb_serial_port *port, struct file *filp)
 {
-	struct usb_serial *serial;
 	struct klsi_105_private *priv = usb_get_serial_port_data(port);
 	int rc;
 
 	dbg("%s port %d", __FUNCTION__, port->number);
 
-	serial = get_usb_serial (port, __FUNCTION__);
-
-	if(!serial)
-		return;
-
 	/* send READ_OFF */
-	rc = usb_control_msg (serial->dev,
-			      usb_sndctrlpipe(serial->dev, 0),
+	rc = usb_control_msg (port->serial->dev,
+			      usb_sndctrlpipe(port->serial->dev, 0),
 			      KL5KUSB105A_SIO_CONFIGURE,
 			      USB_TYPE_VENDOR | USB_DIR_OUT,
 			      KL5KUSB105A_SIO_CONFIGURE_READ_OFF,
@@ -497,7 +493,6 @@
 static int klsi_105_write (struct usb_serial_port *port, int from_user,
 			   const unsigned char *buf, int count)
 {
-	struct usb_serial *serial = port->serial;
 	struct klsi_105_private *priv = usb_get_serial_port_data(port);
 	int result, size;
 	int bytes_sent=0;
@@ -551,8 +546,8 @@
 		((__u8 *)urb->transfer_buffer)[1] = (__u8) ((size & 0xFF00)>>8);
 
 		/* set up our urb */
-		usb_fill_bulk_urb(urb, serial->dev,
-			      usb_sndbulkpipe(serial->dev,
+		usb_fill_bulk_urb(urb, port->serial->dev,
+			      usb_sndbulkpipe(port->serial->dev,
 					      port->bulk_out_endpointAddress),
 			      urb->transfer_buffer,
 			      URB_TRANSFER_BUFFER_SIZE,
@@ -579,15 +574,9 @@
 static void klsi_105_write_bulk_callback ( struct urb *urb, struct pt_regs *regs)
 {
 	struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
-	struct usb_serial *serial = port->serial;
 
 	dbg("%s - port %d", __FUNCTION__, port->number);
 	
-	if (!serial) {
-		dbg("%s - bad serial pointer, exiting", __FUNCTION__);
-		return;
-	}
-
 	if (urb->status) {
 		dbg("%s - nonzero write bulk status received: %d", __FUNCTION__,
 		    urb->status);
@@ -646,7 +635,6 @@
 static void klsi_105_read_bulk_callback (struct urb *urb, struct pt_regs *regs)
 {
 	struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
-	struct usb_serial *serial = port->serial;
 	struct klsi_105_private *priv = usb_get_serial_port_data(port);
 	struct tty_struct *tty;
 	unsigned char *data = urb->transfer_buffer;
@@ -660,10 +648,6 @@
 		    urb->status);
                 return;
         }
-	if (!serial) {
-		dbg("%s - bad serial pointer, exiting", __FUNCTION__);
-		return;
-	}
 	
 	/* The data received is again preceded by a length double-byte in LSB-
 	 * first order (see klsi_105_write() )
@@ -714,8 +698,8 @@
 		priv->bytes_in += bytes_sent;
 	}
 	/* Continue trying to always read  */
-	usb_fill_bulk_urb(port->read_urb, serial->dev, 
-		      usb_rcvbulkpipe(serial->dev,
+	usb_fill_bulk_urb(port->read_urb, port->serial->dev, 
+		      usb_rcvbulkpipe(port->serial->dev,
 				      port->bulk_in_endpointAddress),
 		      port->read_urb->transfer_buffer,
 		      port->read_urb->transfer_buffer_length,
@@ -730,7 +714,6 @@
 static void klsi_105_set_termios (struct usb_serial_port *port,
 				  struct termios *old_termios)
 {
-	struct usb_serial *serial = port->serial;
 	struct klsi_105_private *priv = usb_get_serial_port_data(port);
 	unsigned int iflag = port->tty->termios->c_iflag;
 	unsigned int old_iflag = old_termios->c_iflag;
@@ -868,7 +851,7 @@
 	spin_unlock_irqrestore (&priv->lock, flags);
 	
 	/* now commit changes to device */
-	klsi_105_chg_port_settings(serial, &cfg);
+	klsi_105_chg_port_settings(port, &cfg);
 } /* klsi_105_set_termios */
 
 
@@ -890,14 +873,13 @@
 
 static int klsi_105_tiocmget (struct usb_serial_port *port, struct file *file)
 {
-	struct usb_serial *serial = port->serial;
 	struct klsi_105_private *priv = usb_get_serial_port_data(port);
 	unsigned long flags;
 	int rc;
 	unsigned long line_state;
 	dbg("%s - request, just guessing", __FUNCTION__);
 
-	rc = klsi_105_get_line_state(serial, &line_state);
+	rc = klsi_105_get_line_state(port, &line_state);
 	if (rc < 0) {
 		err("Reading line control failed (error = %d)", rc);
 		/* better return value? EAGAIN? */
diff -Nru a/drivers/usb/serial/kobil_sct.c b/drivers/usb/serial/kobil_sct.c
--- a/drivers/usb/serial/kobil_sct.c	Sun May 16 01:18:36 2004
+++ b/drivers/usb/serial/kobil_sct.c	Sun May 16 01:18:36 2004
@@ -110,7 +110,7 @@
 };
 
 
-struct usb_serial_device_type kobil_device = {
+static struct usb_serial_device_type kobil_device = {
 	.owner =		THIS_MODULE,
 	.name =			"KOBIL USB smart card terminal",
 	.id_table =		id_table,
@@ -183,7 +183,7 @@
 	pdev = serial->dev;
  	actconfig = pdev->actconfig;
  	interface = actconfig->interface[0];
-	altsetting = interface->altsetting;
+	altsetting = interface->cur_altsetting;
  	endpoint = altsetting->endpoint;
   
  	for (i = 0; i < altsetting->desc.bNumEndpoints; i++) {
@@ -229,9 +229,6 @@
 	dbg("%s - port %d", __FUNCTION__, port->number);
 	priv = usb_get_serial_port_data(port);
 	priv->line_state = 0;
-
-	if (port_paranoia_check (port, __FUNCTION__))
-		return -ENODEV;
 
 	// someone sets the dev to 0 if the close method has been called
 	port->interrupt_in_urb->dev = port->serial->dev;
diff -Nru a/drivers/usb/serial/omninet.c b/drivers/usb/serial/omninet.c
--- a/drivers/usb/serial/omninet.c	Sun May 16 01:18:36 2004
+++ b/drivers/usb/serial/omninet.c	Sun May 16 01:18:36 2004
@@ -151,20 +151,13 @@
 
 static int omninet_open (struct usb_serial_port *port, struct file *filp)
 {
-	struct usb_serial	*serial;
+	struct usb_serial	*serial = port->serial;
 	struct usb_serial_port	*wport;
 	struct omninet_data	*od;
 	int			result = 0;
 
-	if (port_paranoia_check (port, __FUNCTION__))
-		return -ENODEV;
-
 	dbg("%s - port %d", __FUNCTION__, port->number);
 
-	serial = get_usb_serial (port, __FUNCTION__);
-	if (!serial)
-		return -ENODEV;
-
 	od = kmalloc( sizeof(struct omninet_data), GFP_KERNEL );
 	if( !od ) {
 		err("%s- kmalloc(%Zd) failed.", __FUNCTION__, sizeof(struct omninet_data));
@@ -189,24 +182,15 @@
 
 static void omninet_close (struct usb_serial_port *port, struct file * filp)
 {
-	struct usb_serial 	*serial;
+	struct usb_serial 	*serial = port->serial;
 	struct usb_serial_port 	*wport;
 	struct omninet_data 	*od;
 
-	if (port_paranoia_check (port, __FUNCTION__))
-		return;
-
 	dbg("%s - port %d", __FUNCTION__, port->number);
 
-	serial = get_usb_serial (port, __FUNCTION__);
-	if (!serial)
-		return;
-
-	if (serial->dev) {
-		wport = serial->port[1];
-		usb_unlink_urb (wport->write_urb);
-		usb_unlink_urb (port->read_urb);
-	}
+	wport = serial->port[1];
+	usb_unlink_urb(wport->write_urb);
+	usb_unlink_urb(port->read_urb);
 
 	od = usb_get_serial_port_data(port);
 	if (od)
@@ -221,8 +205,6 @@
 static void omninet_read_bulk_callback (struct urb *urb, struct pt_regs *regs)
 {
 	struct usb_serial_port 	*port 	= (struct usb_serial_port *)urb->context;
-	struct usb_serial	*serial = get_usb_serial (port, __FUNCTION__);
-
 	unsigned char 		*data 	= urb->transfer_buffer;
 	struct omninet_header 	*header = (struct omninet_header *) &data[0];
 
@@ -231,11 +213,6 @@
 
 //	dbg("omninet_read_bulk_callback");
 
-	if (!serial) {
-		dbg("%s - bad serial pointer, exiting", __FUNCTION__);
-		return;
-	}
-
 	if (urb->status) {
 		dbg("%s - nonzero read bulk status received: %d", __FUNCTION__, urb->status);
 		return;
@@ -259,8 +236,8 @@
 	}
 
 	/* Continue trying to always read  */
-	usb_fill_bulk_urb(urb, serial->dev, 
-		      usb_rcvbulkpipe(serial->dev, port->bulk_in_endpointAddress),
+	usb_fill_bulk_urb(urb, port->serial->dev, 
+		      usb_rcvbulkpipe(port->serial->dev, port->bulk_in_endpointAddress),
 		      urb->transfer_buffer, urb->transfer_buffer_length,
 		      omninet_read_bulk_callback, port);
 	result = usb_submit_urb(urb, GFP_ATOMIC);
@@ -344,19 +321,8 @@
 {
 /*	struct omninet_header	*header = (struct omninet_header  *) urb->transfer_buffer; */
 	struct usb_serial_port 	*port   = (struct usb_serial_port *) urb->context;
-	struct usb_serial 	*serial;
 
 //	dbg("omninet_write_bulk_callback, port %0x\n", port);
-
-
-	if (port_paranoia_check (port, __FUNCTION__)) {
-		return;
-	}
-
-	serial = port->serial;
-	if (serial_paranoia_check (serial, __FUNCTION__)) {
-		return;
-	}
 
 	if (urb->status) {
 		dbg("%s - nonzero write bulk status received: %d", __FUNCTION__, urb->status);
diff -Nru a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c
--- a/drivers/usb/serial/pl2303.c	Sun May 16 01:18:35 2004
+++ b/drivers/usb/serial/pl2303.c	Sun May 16 01:18:35 2004
@@ -1,7 +1,7 @@
 /*
  * Prolific PL2303 USB to serial adaptor driver
  *
- * Copyright (C) 2001-2003 Greg Kroah-Hartman (greg@kroah.com)
+ * Copyright (C) 2001-2004 Greg Kroah-Hartman (greg@kroah.com)
  * Copyright (C) 2003 IBM Corp.
  *
  * Original driver for 2.2.x by anonymous
@@ -45,6 +45,7 @@
 #include <linux/tty_flip.h>
 #include <linux/serial.h>
 #include <linux/module.h>
+#include <linux/moduleparam.h>
 #include <linux/spinlock.h>
 #include <asm/uaccess.h>
 #include <linux/usb.h>
@@ -80,6 +81,7 @@
 	{ USB_DEVICE(RADIOSHACK_VENDOR_ID, RADIOSHACK_PRODUCT_ID) },
 	{ USB_DEVICE(DCU10_VENDOR_ID, DCU10_PRODUCT_ID) },
 	{ USB_DEVICE(SITECOM_VENDOR_ID, SITECOM_PRODUCT_ID) },
+	{ USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_ID) },
 	{ }					/* Terminating entry */
 };
 
@@ -410,9 +412,6 @@
 	unsigned char *buf;
 	int result;
 
-	if (port_paranoia_check (port, __FUNCTION__))
-		return -ENODEV;
-		
 	dbg("%s -  port %d", __FUNCTION__, port->number);
 
 	usb_clear_halt(serial->dev, port->write_urb->pipe);
@@ -473,18 +472,11 @@
 
 static void pl2303_close (struct usb_serial_port *port, struct file *filp)
 {
-	struct usb_serial *serial;
 	struct pl2303_private *priv;
 	unsigned long flags;
 	unsigned int c_cflag;
 	int result;
 
-	if (port_paranoia_check (port, __FUNCTION__))
-		return;
-	serial = get_usb_serial (port, __FUNCTION__);
-	if (!serial)
-		return;
-	
 	dbg("%s - port %d", __FUNCTION__, port->number);
 
 	/* shutdown our urbs */
@@ -661,7 +653,6 @@
 static void pl2303_read_int_callback (struct urb *urb, struct pt_regs *regs)
 {
 	struct usb_serial_port *port = (struct usb_serial_port *) urb->context;
-	struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
 	struct pl2303_private *priv = usb_get_serial_port_data(port);
 	unsigned char *data = urb->transfer_buffer;
 	unsigned long flags;
@@ -685,9 +676,6 @@
 		goto exit;
 	}
 
-	if (!serial) {
-		return;
-	}
 
 	usb_serial_debug_data (__FILE__, __FUNCTION__, urb->actual_length, urb->transfer_buffer);
 
@@ -712,7 +700,6 @@
 static void pl2303_read_bulk_callback (struct urb *urb, struct pt_regs *regs)
 {
 	struct usb_serial_port *port = (struct usb_serial_port *) urb->context;
-	struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
 	struct pl2303_private *priv = usb_get_serial_port_data(port);
 	struct tty_struct *tty;
 	unsigned char *data = urb->transfer_buffer;
@@ -722,16 +709,8 @@
 	u8 status;
 	char tty_flag;
 
-	if (port_paranoia_check (port, __FUNCTION__))
-		return;
-
 	dbg("%s - port %d", __FUNCTION__, port->number);
 
-	if (!serial) {
-		dbg("%s - bad serial pointer, exiting", __FUNCTION__);
-		return;
-	}
-
 	if (urb->status) {
 		dbg("%s - urb->status = %d", __FUNCTION__, urb->status);
 		if (!port->open_count) {
@@ -742,7 +721,7 @@
 			/* PL2303 mysteriously fails with -EPROTO reschedule the read */
 			dbg("%s - caught -EPROTO, resubmitting the urb", __FUNCTION__);
 			urb->status = 0;
-			urb->dev = serial->dev;
+			urb->dev = port->serial->dev;
 			result = usb_submit_urb(urb, GFP_ATOMIC);
 			if (result)
 				dev_err(&urb->dev->dev, "%s - failed resubmitting read urb, error %d\n", __FUNCTION__, result);
@@ -790,7 +769,7 @@
 
 	/* Schedule the next read _if_ we are still open */
 	if (port->open_count) {
-		urb->dev = serial->dev;
+		urb->dev = port->serial->dev;
 		result = usb_submit_urb(urb, GFP_ATOMIC);
 		if (result)
 			dev_err(&urb->dev->dev, "%s - failed resubmitting read urb, error %d\n", __FUNCTION__, result);
@@ -806,16 +785,10 @@
 	struct usb_serial_port *port = (struct usb_serial_port *) urb->context;
 	int result;
 
-	if (port_paranoia_check (port, __FUNCTION__))
-		return;
-	
 	dbg("%s - port %d", __FUNCTION__, port->number);
 	
 	if (urb->status) {
 		/* error in the urb, so we have to resubmit it */
-		if (serial_paranoia_check (port->serial, __FUNCTION__)) {
-			return;
-		}
 		dbg("%s - Overflow in write", __FUNCTION__);
 		dbg("%s - nonzero write bulk status received: %d", __FUNCTION__, urb->status);
 		port->write_urb->transfer_buffer_length = 1;
@@ -862,6 +835,6 @@
 MODULE_DESCRIPTION(DRIVER_DESC);
 MODULE_LICENSE("GPL");
 
-MODULE_PARM(debug, "i");
+module_param(debug, bool, S_IRUGO | S_IWUSR);
 MODULE_PARM_DESC(debug, "Debug enabled or not");
 
diff -Nru a/drivers/usb/serial/pl2303.h b/drivers/usb/serial/pl2303.h
--- a/drivers/usb/serial/pl2303.h	Sun May 16 01:18:35 2004
+++ b/drivers/usb/serial/pl2303.h	Sun May 16 01:18:35 2004
@@ -41,3 +41,6 @@
 
 #define SITECOM_VENDOR_ID	0x6189
 #define SITECOM_PRODUCT_ID	0x2068
+
+#define ALCATEL_VENDOR_ID	0x11f7
+#define ALCATEL_PRODUCT_ID	0x02df
diff -Nru a/drivers/usb/serial/safe_serial.c b/drivers/usb/serial/safe_serial.c
--- a/drivers/usb/serial/safe_serial.c	Sun May 16 01:18:34 2004
+++ b/drivers/usb/serial/safe_serial.c	Sun May 16 01:18:34 2004
@@ -211,7 +211,6 @@
 static void safe_read_bulk_callback (struct urb *urb, struct pt_regs *regs)
 {
 	struct usb_serial_port *port = (struct usb_serial_port *) urb->context;
-	struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
 	unsigned char *data = urb->transfer_buffer;
 	unsigned char length = urb->actual_length;
 	int i;
@@ -219,11 +218,6 @@
 
 	dbg ("%s", __FUNCTION__);
 
-	if (!serial) {
-		dbg ("%s - bad serial pointer, exiting", __FUNCTION__);
-		return;
-	}
-
 	if (urb->status) {
 		dbg ("%s - nonzero read bulk status received: %d", __FUNCTION__, urb->status);
 		return;
@@ -272,8 +266,8 @@
 	}
 
 	/* Continue trying to always read  */
-	usb_fill_bulk_urb (urb, serial->dev,
-		       usb_rcvbulkpipe (serial->dev, port->bulk_in_endpointAddress),
+	usb_fill_bulk_urb (urb, port->serial->dev,
+		       usb_rcvbulkpipe (port->serial->dev, port->bulk_in_endpointAddress),
 		       urb->transfer_buffer, urb->transfer_buffer_length,
 		       safe_read_bulk_callback, port);
 
@@ -284,7 +278,6 @@
 
 static int safe_write (struct usb_serial_port *port, int from_user, const unsigned char *buf, int count)
 {
-	struct usb_serial *serial = port->serial;
 	unsigned char *data;
 	int result;
 	int i;
@@ -367,7 +360,7 @@
 		printk ("\n");
 	}
 #endif
-	port->write_urb->dev = serial->dev;
+	port->write_urb->dev = port->serial->dev;
 	if ((result = usb_submit_urb (port->write_urb, GFP_KERNEL))) {
 		err ("%s - failed submitting write urb, error %d", __FUNCTION__, result);
 		return 0;
@@ -395,7 +388,7 @@
 
 static int safe_startup (struct usb_serial *serial)
 {
-	switch (serial->interface->altsetting->desc.bInterfaceProtocol) {
+	switch (serial->interface->cur_altsetting->desc.bInterfaceProtocol) {
 	case LINEO_SAFESERIAL_CRC:
 		break;
 	case LINEO_SAFESERIAL_CRC_PADDED:
diff -Nru a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c
--- a/drivers/usb/serial/usb-serial.c	Sun May 16 01:18:34 2004
+++ b/drivers/usb/serial/usb-serial.c	Sun May 16 01:18:34 2004
@@ -1,7 +1,7 @@
 /*
  * USB Serial Converter driver
  *
- * Copyright (C) 1999 - 2003 Greg Kroah-Hartman (greg@kroah.com)
+ * Copyright (C) 1999 - 2004 Greg Kroah-Hartman (greg@kroah.com)
  * Copyright (C) 2000 Peter Berger (pberger@brimson.com)
  * Copyright (C) 2000 Al Borchers (borchers@steinerpoint.com)
  *
@@ -330,6 +330,7 @@
 #include <linux/tty_driver.h>
 #include <linux/tty_flip.h>
 #include <linux/module.h>
+#include <linux/moduleparam.h>
 #include <linux/spinlock.h>
 #include <linux/list.h>
 #include <linux/smp_lock.h>
@@ -416,8 +417,7 @@
 			}
 		if (good_spot == 0)
 			continue;
-			
-		serial->magic = USB_SERIAL_MAGIC;
+
 		*minor = i;
 		dbg("%s - minor base = %d", __FUNCTION__, *minor);
 		for (i = *minor; (i < (*minor + num_ports)) && (i < SERIAL_TTY_MINORS); ++i)
@@ -461,9 +461,6 @@
 	/* get the serial object associated with this tty pointer */
 	serial = usb_serial_get_by_index(tty->index);
 
-	if (serial_paranoia_check (serial, __FUNCTION__))
-		return -ENODEV;
-
 	/* set up our port structure making the tty driver remember our port object, and us it */
 	portNumber = tty->index - serial->minor;
 	port = serial->port[portNumber];
@@ -496,10 +493,6 @@
 static void serial_close(struct tty_struct *tty, struct file * filp)
 {
 	struct usb_serial_port *port = (struct usb_serial_port *) tty->driver_data;
-	struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
-
-	if (!serial)
-		return;
 
 	dbg("%s - port %d", __FUNCTION__, port->number);
 
@@ -524,12 +517,8 @@
 static int serial_write (struct tty_struct * tty, int from_user, const unsigned char *buf, int count)
 {
 	struct usb_serial_port *port = (struct usb_serial_port *) tty->driver_data;
-	struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
 	int retval = -EINVAL;
 
-	if (!serial)
-		return -ENODEV;
-
 	dbg("%s - port %d, %d byte(s)", __FUNCTION__, port->number, count);
 
 	if (!port->open_count) {
@@ -538,7 +527,7 @@
 	}
 
 	/* pass on to the driver specific version of this function */
-	retval = serial->type->write(port, from_user, buf, count);
+	retval = port->serial->type->write(port, from_user, buf, count);
 
 exit:
 	return retval;
@@ -547,12 +536,8 @@
 static int serial_write_room (struct tty_struct *tty) 
 {
 	struct usb_serial_port *port = (struct usb_serial_port *) tty->driver_data;
-	struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
 	int retval = -EINVAL;
 
-	if (!serial)
-		return -ENODEV;
-
 	dbg("%s - port %d", __FUNCTION__, port->number);
 
 	if (!port->open_count) {
@@ -561,7 +546,7 @@
 	}
 
 	/* pass on to the driver specific version of this function */
-	retval = serial->type->write_room(port);
+	retval = port->serial->type->write_room(port);
 
 exit:
 	return retval;
@@ -570,12 +555,8 @@
 static int serial_chars_in_buffer (struct tty_struct *tty) 
 {
 	struct usb_serial_port *port = (struct usb_serial_port *) tty->driver_data;
-	struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
 	int retval = -EINVAL;
 
-	if (!serial)
-		return -ENODEV;
-
 	dbg("%s = port %d", __FUNCTION__, port->number);
 
 	if (!port->open_count) {
@@ -584,7 +565,7 @@
 	}
 
 	/* pass on to the driver specific version of this function */
-	retval = serial->type->chars_in_buffer(port);
+	retval = port->serial->type->chars_in_buffer(port);
 
 exit:
 	return retval;
@@ -593,10 +574,6 @@
 static void serial_throttle (struct tty_struct * tty)
 {
 	struct usb_serial_port *port = (struct usb_serial_port *) tty->driver_data;
-	struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
-
-	if (!serial)
-		return;
 
 	dbg("%s - port %d", __FUNCTION__, port->number);
 
@@ -606,8 +583,8 @@
 	}
 
 	/* pass on to the driver specific version of this function */
-	if (serial->type->throttle)
-		serial->type->throttle(port);
+	if (port->serial->type->throttle)
+		port->serial->type->throttle(port);
 
 exit:
 	;
@@ -616,10 +593,6 @@
 static void serial_unthrottle (struct tty_struct * tty)
 {
 	struct usb_serial_port *port = (struct usb_serial_port *) tty->driver_data;
-	struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
-
-	if (!serial)
-		return;
 
 	dbg("%s - port %d", __FUNCTION__, port->number);
 
@@ -629,8 +602,8 @@
 	}
 
 	/* pass on to the driver specific version of this function */
-	if (serial->type->unthrottle)
-		serial->type->unthrottle(port);
+	if (port->serial->type->unthrottle)
+		port->serial->type->unthrottle(port);
 
 exit:
 	;
@@ -639,12 +612,8 @@
 static int serial_ioctl (struct tty_struct *tty, struct file * file, unsigned int cmd, unsigned long arg)
 {
 	struct usb_serial_port *port = (struct usb_serial_port *) tty->driver_data;
-	struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
 	int retval = -ENODEV;
 
-	if (!serial)
-		return -ENODEV;
-
 	dbg("%s - port %d, cmd 0x%.4x", __FUNCTION__, port->number, cmd);
 
 	if (!port->open_count) {
@@ -653,8 +622,8 @@
 	}
 
 	/* pass on to the driver specific version of this function if it is available */
-	if (serial->type->ioctl)
-		retval = serial->type->ioctl(port, file, cmd, arg);
+	if (port->serial->type->ioctl)
+		retval = port->serial->type->ioctl(port, file, cmd, arg);
 	else
 		retval = -ENOIOCTLCMD;
 
@@ -665,10 +634,6 @@
 static void serial_set_termios (struct tty_struct *tty, struct termios * old)
 {
 	struct usb_serial_port *port = (struct usb_serial_port *) tty->driver_data;
-	struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
-
-	if (!serial)
-		return;
 
 	dbg("%s - port %d", __FUNCTION__, port->number);
 
@@ -678,8 +643,8 @@
 	}
 
 	/* pass on to the driver specific version of this function if it is available */
-	if (serial->type->set_termios)
-		serial->type->set_termios(port, old);
+	if (port->serial->type->set_termios)
+		port->serial->type->set_termios(port, old);
 
 exit:
 	;
@@ -688,10 +653,6 @@
 static void serial_break (struct tty_struct *tty, int break_state)
 {
 	struct usb_serial_port *port = (struct usb_serial_port *) tty->driver_data;
-	struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
-
-	if (!serial)
-		return;
 
 	dbg("%s - port %d", __FUNCTION__, port->number);
 
@@ -701,8 +662,8 @@
 	}
 
 	/* pass on to the driver specific version of this function if it is available */
-	if (serial->type->break_ctl)
-		serial->type->break_ctl(port, break_state);
+	if (port->serial->type->break_ctl)
+		port->serial->type->break_ctl(port, break_state);
 
 exit:
 	;
@@ -761,10 +722,6 @@
 static int serial_tiocmget (struct tty_struct *tty, struct file *file)
 {
 	struct usb_serial_port *port = (struct usb_serial_port *) tty->driver_data;
-	struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
-
-	if (!serial)
-		goto exit;
 
 	dbg("%s - port %d", __FUNCTION__, port->number);
 
@@ -773,8 +730,8 @@
 		goto exit;
 	}
 
-	if (serial->type->tiocmget)
-		return serial->type->tiocmget(port, file);
+	if (port->serial->type->tiocmget)
+		return port->serial->type->tiocmget(port, file);
 
 exit:
 	return -EINVAL;
@@ -784,10 +741,6 @@
 			    unsigned int set, unsigned int clear)
 {
 	struct usb_serial_port *port = (struct usb_serial_port *) tty->driver_data;
-	struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
-
-	if (!serial)
-		goto exit;
 
 	dbg("%s - port %d", __FUNCTION__, port->number);
 
@@ -796,8 +749,8 @@
 		goto exit;
 	}
 
-	if (serial->type->tiocmset)
-		return serial->type->tiocmset(port, file, set, clear);
+	if (port->serial->type->tiocmset)
+		return port->serial->type->tiocmset(port, file, set, clear);
 
 exit:
 	return -EINVAL;
@@ -806,7 +759,6 @@
 void usb_serial_port_softint(void *private)
 {
 	struct usb_serial_port *port = (struct usb_serial_port *)private;
-	struct usb_serial *serial;
 	struct tty_struct *tty;
 
 	dbg("%s - port %d", __FUNCTION__, port->number);
@@ -814,10 +766,6 @@
 	if (!port)
 		return;
 
-	serial = get_usb_serial (port, __FUNCTION__);
-	if (!serial)
-		return;
-
 	tty = port->tty;
 	if (!tty)
 		return;
@@ -1037,7 +985,7 @@
 	     (dev->descriptor.idProduct == ATEN_PRODUCT_ID))) {
 		if (interface != dev->actconfig->interface[0]) {
 			/* check out the endpoints of the other interface*/
-			iface_desc = &dev->actconfig->interface[0]->altsetting[0];
+			iface_desc = dev->actconfig->interface[0]->cur_altsetting;
 			for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
 				endpoint = &iface_desc->endpoint[i].desc;
 				if ((endpoint->bEndpointAddress & 0x80) &&
@@ -1117,7 +1065,6 @@
 		memset(port, 0x00, sizeof(struct usb_serial_port));
 		port->number = i + serial->minor;
 		port->serial = serial;
-		port->magic = USB_SERIAL_PORT_MAGIC;
 		INIT_WORK(&port->work, usb_serial_port_softint, port);
 		serial->port[i] = port;
 	}
@@ -1463,5 +1410,5 @@
 MODULE_DESCRIPTION( DRIVER_DESC );
 MODULE_LICENSE("GPL");
 
-MODULE_PARM(debug, "i");
+module_param(debug, bool, S_IRUGO | S_IWUSR);
 MODULE_PARM_DESC(debug, "Debug enabled or not");
diff -Nru a/drivers/usb/serial/usb-serial.h b/drivers/usb/serial/usb-serial.h
--- a/drivers/usb/serial/usb-serial.h	Sun May 16 01:18:37 2004
+++ b/drivers/usb/serial/usb-serial.h	Sun May 16 01:18:37 2004
@@ -1,7 +1,7 @@
 /*
  * USB Serial Converter driver
  *
- *	Copyright (C) 1999 - 2003
+ *	Copyright (C) 1999 - 2004
  *	    Greg Kroah-Hartman (greg@kroah.com)
  *
  *	This program is free software; you can redistribute it and/or modify
@@ -62,15 +62,11 @@
 
 #define MAX_NUM_PORTS		8	/* The maximum number of ports one device can grab at once */
 
-#define USB_SERIAL_MAGIC	0x6702	/* magic number for usb_serial struct */
-#define USB_SERIAL_PORT_MAGIC	0x7301	/* magic number for usb_serial_port struct */
-
 /* parity check flag */
 #define RELEVANT_IFLAG(iflag)	(iflag & (IGNBRK|BRKINT|IGNPAR|PARMRK|INPCK))
 
 /**
  * usb_serial_port: structure for the specific ports of a device.
- * @magic: magic number for internal validity of this pointer.
  * @serial: pointer back to the struct usb_serial owner of this port.
  * @tty: pointer to the corresponding tty for this port.
  * @number: the number of the port (the minor number).
@@ -95,8 +91,7 @@
  * ports of a device.
  */
 struct usb_serial_port {
-	int			magic;
-	struct usb_serial	*serial;
+	struct usb_serial *	serial;
 	struct tty_struct *	tty;
 	unsigned char		number;
 
@@ -133,7 +128,6 @@
 
 /**
  * usb_serial - structure used by the usb-serial core for a device
- * @magic: magic number for internal validity of this pointer.
  * @dev: pointer to the struct usb_device for this device
  * @type: pointer to the struct usb_serial_device_type for this device
  * @interface: pointer to the struct usb_interface for this device
@@ -151,7 +145,6 @@
  *	usb_set_serial_data() to access this.
  */
 struct usb_serial {
-	int				magic;
 	struct usb_device *		dev;
 	struct usb_serial_device_type *	type;
 	struct usb_interface *		interface;
@@ -300,60 +293,6 @@
 extern struct usb_serial_device_type usb_serial_generic_device;
 extern struct bus_type usb_serial_bus_type;
 extern struct tty_driver *usb_serial_tty_driver;
-
-/* Inline functions to check the sanity of a pointer that is passed to us */
-static inline int serial_paranoia_check (struct usb_serial *serial, const char *function)
-{
-	if (!serial) {
-		dbg("%s - serial == NULL", function);
-		return -1;
-	}
-	if (serial->magic != USB_SERIAL_MAGIC) {
-		dbg("%s - bad magic number for serial", function);
-		return -1;
-	}
-	if (!serial->type) {
-		dbg("%s - serial->type == NULL!", function);
-		return -1;
-	}
-
-	return 0;
-}
-
-
-static inline int port_paranoia_check (struct usb_serial_port *port, const char *function)
-{
-	if (!port) {
-		dbg("%s - port == NULL", function);
-		return -1;
-	}
-	if (port->magic != USB_SERIAL_PORT_MAGIC) {
-		dbg("%s - bad magic number for port", function);
-		return -1;
-	}
-	if (!port->serial) {
-		dbg("%s - port->serial == NULL", function);
-		return -1;
-	}
-
-	return 0;
-}
-
-
-static inline struct usb_serial* get_usb_serial (struct usb_serial_port *port, const char *function) 
-{ 
-	/* if no port was specified, or it fails a paranoia check */
-	if (!port || 
-		port_paranoia_check (port, function) ||
-		serial_paranoia_check (port->serial, function)) {
-		/* then say that we don't have a valid usb_serial thing, which will
-		 * end up genrating -ENODEV return values */ 
-		return NULL;
-	}
-
-	return port->serial;
-}
-
 
 static inline void usb_serial_debug_data (const char *file, const char *function, int size, const unsigned char *data)
 {
diff -Nru a/drivers/usb/serial/visor.c b/drivers/usb/serial/visor.c
--- a/drivers/usb/serial/visor.c	Sun May 16 01:18:34 2004
+++ b/drivers/usb/serial/visor.c	Sun May 16 01:18:34 2004
@@ -2,7 +2,7 @@
  * USB HandSpring Visor, Palm m50x, and Sony Clie driver
  * (supports all of the Palm OS USB devices)
  *
- *	Copyright (C) 1999 - 2003
+ *	Copyright (C) 1999 - 2004
  *	    Greg Kroah-Hartman (greg@kroah.com)
  *
  *	This program is free software; you can redistribute it and/or modify
@@ -151,6 +151,7 @@
 #include <linux/tty_driver.h>
 #include <linux/tty_flip.h>
 #include <linux/module.h>
+#include <linux/moduleparam.h>
 #include <linux/spinlock.h>
 #include <asm/uaccess.h>
 #include <linux/usb.h>
@@ -194,8 +195,8 @@
 static int palm_os_4_probe (struct usb_serial *serial, const struct usb_device_id *id);
 
 /* Parameters that may be passed into the module. */
-static int vendor = -1;
-static int product = -1;
+static __u16 vendor;
+static __u16 product;
 
 static struct usb_device_id id_table [] = {
 	{ USB_DEVICE(HANDSPRING_VENDOR_ID, HANDSPRING_VISOR_ID),
@@ -222,6 +223,8 @@
 		.driver_info = (kernel_ulong_t)&palm_os_4_probe },
 	{ USB_DEVICE(PALM_VENDOR_ID, PALM_TUNGSTEN_Z_ID),
 		.driver_info = (kernel_ulong_t)&palm_os_4_probe },
+	{ USB_DEVICE(PALM_VENDOR_ID, PALM_ZIRE31_ID),
+		.driver_info = (kernel_ulong_t)&palm_os_4_probe },
 	{ USB_DEVICE(PALM_VENDOR_ID, PALM_ZIRE_ID),
 		.driver_info = (kernel_ulong_t)&palm_os_4_probe },
 	{ USB_DEVICE(SONY_VENDOR_ID, SONY_CLIE_4_0_ID),
@@ -273,6 +276,7 @@
 	{ USB_DEVICE(PALM_VENDOR_ID, PALM_M130_ID) },
 	{ USB_DEVICE(PALM_VENDOR_ID, PALM_TUNGSTEN_T_ID) },
 	{ USB_DEVICE(PALM_VENDOR_ID, PALM_TUNGSTEN_Z_ID) },
+	{ USB_DEVICE(PALM_VENDOR_ID, PALM_ZIRE31_ID) },
 	{ USB_DEVICE(PALM_VENDOR_ID, PALM_ZIRE_ID) },
 	{ USB_DEVICE(SONY_VENDOR_ID, SONY_CLIE_3_5_ID) },
 	{ USB_DEVICE(SONY_VENDOR_ID, SONY_CLIE_4_0_ID) },
@@ -393,9 +397,6 @@
 	struct usb_serial *serial = port->serial;
 	int result = 0;
 
-	if (port_paranoia_check (port, __FUNCTION__))
-		return -ENODEV;
-	
 	dbg("%s - port %d", __FUNCTION__, port->number);
 
 	if (!port->read_urb) {
@@ -443,18 +444,10 @@
 
 static void visor_close (struct usb_serial_port *port, struct file * filp)
 {
-	struct usb_serial *serial;
 	unsigned char *transfer_buffer;
 
-	if (port_paranoia_check (port, __FUNCTION__))
-		return;
-	
 	dbg("%s - port %d", __FUNCTION__, port->number);
 			 
-	serial = get_usb_serial (port, __FUNCTION__);
-	if (!serial)
-		return;
-	
 	/* shutdown our urbs */
 	usb_unlink_urb (port->read_urb);
 	if (port->interrupt_in_urb)
@@ -463,8 +456,8 @@
 	/* Try to send shutdown message, if the device is gone, this will just fail. */
 	transfer_buffer =  kmalloc (0x12, GFP_KERNEL);
 	if (transfer_buffer) {
-		usb_control_msg (serial->dev,
-				 usb_rcvctrlpipe(serial->dev, 0),
+		usb_control_msg (port->serial->dev,
+				 usb_rcvctrlpipe(port->serial->dev, 0),
 				 VISOR_CLOSE_NOTIFICATION, 0xc2,
 				 0x0000, 0x0000, 
 				 transfer_buffer, 0x12, 300);
@@ -568,9 +561,6 @@
 	/* free up the transfer buffer, as usb_free_urb() does not do this */
 	kfree (urb->transfer_buffer);
 
-	if (port_paranoia_check (port, __FUNCTION__))
-		return;
-	
 	dbg("%s - port %d", __FUNCTION__, port->number);
 	
 	if (urb->status)
@@ -584,22 +574,13 @@
 static void visor_read_bulk_callback (struct urb *urb, struct pt_regs *regs)
 {
 	struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
-	struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
 	struct tty_struct *tty;
 	unsigned char *data = urb->transfer_buffer;
 	int i;
 	int result;
 
-	if (port_paranoia_check (port, __FUNCTION__))
-		return;
-
 	dbg("%s - port %d", __FUNCTION__, port->number);
 
-	if (!serial) {
-		dbg("%s - bad serial pointer, exiting", __FUNCTION__);
-		return;
-	}
-
 	if (urb->status) {
 		dbg("%s - nonzero read bulk status received: %d", __FUNCTION__, urb->status);
 		return;
@@ -622,9 +603,9 @@
 	bytes_in += urb->actual_length;
 
 	/* Continue trying to always read  */
-	usb_fill_bulk_urb (port->read_urb, serial->dev,
-			   usb_rcvbulkpipe (serial->dev,
-					    port->bulk_in_endpointAddress),
+	usb_fill_bulk_urb (port->read_urb, port->serial->dev,
+			   usb_rcvbulkpipe(port->serial->dev,
+					   port->bulk_in_endpointAddress),
 			   port->read_urb->transfer_buffer,
 			   port->read_urb->transfer_buffer_length,
 			   visor_read_bulk_callback, port);
@@ -1099,10 +1080,10 @@
 MODULE_DESCRIPTION( DRIVER_DESC );
 MODULE_LICENSE("GPL");
 
-MODULE_PARM(debug, "i");
+module_param(debug, bool, S_IRUGO | S_IWUSR);
 MODULE_PARM_DESC(debug, "Debug enabled or not");
 
-MODULE_PARM(vendor, "i");
+module_param(vendor, ushort, 0);
 MODULE_PARM_DESC(vendor, "User specified vendor ID");
-MODULE_PARM(product, "i");
+module_param(product, ushort, 0);
 MODULE_PARM_DESC(product, "User specified product ID");
diff -Nru a/drivers/usb/serial/visor.h b/drivers/usb/serial/visor.h
--- a/drivers/usb/serial/visor.h	Sun May 16 01:18:36 2004
+++ b/drivers/usb/serial/visor.h	Sun May 16 01:18:36 2004
@@ -31,6 +31,7 @@
 #define PALM_M130_ID			0x0050
 #define PALM_TUNGSTEN_T_ID		0x0060
 #define PALM_TUNGSTEN_Z_ID		0x0031
+#define PALM_ZIRE31_ID			0x0061
 #define PALM_ZIRE_ID			0x0070
 #define PALM_M100_ID			0x0080
 
diff -Nru a/drivers/usb/serial/whiteheat.c b/drivers/usb/serial/whiteheat.c
--- a/drivers/usb/serial/whiteheat.c	Sun May 16 01:18:34 2004
+++ b/drivers/usb/serial/whiteheat.c	Sun May 16 01:18:34 2004
@@ -984,7 +984,6 @@
 static void command_port_read_callback (struct urb *urb, struct pt_regs *regs)
 {
 	struct usb_serial_port *command_port = (struct usb_serial_port *)urb->context;
-	struct usb_serial *serial = get_usb_serial (command_port, __FUNCTION__);
 	struct whiteheat_command_private *command_info;
 	unsigned char *data = urb->transfer_buffer;
 	int result;
@@ -997,11 +996,6 @@
 		return;
 	}
 
-	if (!serial) {
-		dbg("%s - bad serial pointer, exiting", __FUNCTION__);
-		return;
-	}
-	
 	usb_serial_debug_data (__FILE__, __FUNCTION__, urb->actual_length, data);
 
 	command_info = usb_get_serial_port_data(command_port);
@@ -1029,7 +1023,7 @@
 	}
 	
 	/* Continue trying to always read */
-	command_port->read_urb->dev = serial->dev;
+	command_port->read_urb->dev = command_port->serial->dev;
 	result = usb_submit_urb(command_port->read_urb, GFP_ATOMIC);
 	spin_unlock_irqrestore(&command_info->lock, flags);
 	if (result)
@@ -1040,7 +1034,6 @@
 static void whiteheat_read_callback(struct urb *urb, struct pt_regs *regs)
 {
 	struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
-	struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
 	struct whiteheat_urb_wrap *wrap;
 	unsigned char *data = urb->transfer_buffer;
 	struct whiteheat_private *info = usb_get_serial_port_data(port);
@@ -1057,14 +1050,6 @@
 	list_del(&wrap->list);
 	spin_unlock(&info->lock);
 
-	if (!serial) {
-		dbg("%s - bad serial pointer, exiting", __FUNCTION__);
-		spin_lock(&info->lock);
-		list_add(&wrap->list, &info->rx_urbs_free);
-		spin_unlock(&info->lock);
-		return;
-	}
-
 	if (urb->status) {
 		dbg("%s - nonzero read bulk status received: %d", __FUNCTION__, urb->status);
 		spin_lock(&info->lock);
@@ -1091,7 +1076,6 @@
 static void whiteheat_write_callback(struct urb *urb, struct pt_regs *regs)
 {
 	struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
-	struct usb_serial *serial = get_usb_serial (port, __FUNCTION__);
 	struct whiteheat_private *info = usb_get_serial_port_data(port);
 	struct whiteheat_urb_wrap *wrap;
 
@@ -1107,11 +1091,6 @@
 	list_del(&wrap->list);
 	list_add(&wrap->list, &info->tx_urbs_free);
 	spin_unlock(&info->lock);
-
-	if (!serial) {
-		dbg("%s - bad serial pointer, exiting", __FUNCTION__);
-		return;
-	}
 
 	if (urb->status) {
 		dbg("%s - nonzero write bulk status received: %d", __FUNCTION__, urb->status);
diff -Nru a/drivers/usb/storage/datafab.c b/drivers/usb/storage/datafab.c
--- a/drivers/usb/storage/datafab.c	Sun May 16 01:18:36 2004
+++ b/drivers/usb/storage/datafab.c	Sun May 16 01:18:36 2004
@@ -489,7 +489,7 @@
 	return USB_STOR_TRANSPORT_GOOD;
 }
 
-void datafab_info_destructor(void *extra)
+static void datafab_info_destructor(void *extra)
 {
 	// this routine is a placeholder...
 	// currently, we don't allocate any extra memory so we're okay
diff -Nru a/drivers/usb/storage/isd200.c b/drivers/usb/storage/isd200.c
--- a/drivers/usb/storage/isd200.c	Sun May 16 01:18:35 2004
+++ b/drivers/usb/storage/isd200.c	Sun May 16 01:18:35 2004
@@ -349,7 +349,7 @@
  * RETURNS:
  *    void
  */
-void isd200_build_sense(struct us_data *us, Scsi_Cmnd *srb)
+static void isd200_build_sense(struct us_data *us, Scsi_Cmnd *srb)
 {
 	struct isd200_info *info = (struct isd200_info *)us->extra;
 	struct sense_data *buf = (struct sense_data *) &srb->sense_buffer[0];
@@ -505,7 +505,7 @@
  * RETURNS:
  *    ISD status code
  */
-int isd200_read_regs( struct us_data *us )
+static int isd200_read_regs( struct us_data *us )
 {
 	struct isd200_info *info = (struct isd200_info *)us->extra;
 	int retStatus = ISD200_GOOD;
@@ -534,7 +534,7 @@
  * This is used by the protocol layers to actually send the message to
  * the device and receive the response.
  */
-void isd200_invoke_transport( struct us_data *us, 
+static void isd200_invoke_transport( struct us_data *us, 
 			      Scsi_Cmnd *srb, 
 			      union ata_cdb *ataCdb )
 {
@@ -677,7 +677,7 @@
  * RETURNS:
  *    ISD status code
  */
-int isd200_write_config( struct us_data *us ) 
+static int isd200_write_config( struct us_data *us ) 
 {
 	struct isd200_info *info = (struct isd200_info *)us->extra;
 	int retStatus = ISD200_GOOD;
@@ -720,7 +720,7 @@
  * RETURNS:
  *    ISD status code
  */
-int isd200_read_config( struct us_data *us ) 
+static int isd200_read_config( struct us_data *us ) 
 {
 	struct isd200_info *info = (struct isd200_info *)us->extra;
 	int retStatus = ISD200_GOOD;
@@ -765,7 +765,7 @@
  * RETURNS:
  *    NT status code
  */
-int isd200_atapi_soft_reset( struct us_data *us ) 
+static int isd200_atapi_soft_reset( struct us_data *us ) 
 {
 	int retStatus = ISD200_GOOD;
 	int transferStatus;
@@ -791,7 +791,7 @@
  * RETURNS:
  *    ISD status code
  */
-int isd200_srst( struct us_data *us ) 
+static int isd200_srst( struct us_data *us ) 
 {
 	int retStatus = ISD200_GOOD;
 	int transferStatus;
@@ -937,7 +937,7 @@
  * RETURNS:
  *    ISD status code
  */
-int isd200_manual_enum(struct us_data *us)
+static int isd200_manual_enum(struct us_data *us)
 {
 	struct isd200_info *info = (struct isd200_info *)us->extra;
 	int retStatus = ISD200_GOOD;
@@ -981,7 +981,7 @@
  * RETURNS:
  *    ISD status code
  */
-int isd200_get_inquiry_data( struct us_data *us )
+static int isd200_get_inquiry_data( struct us_data *us )
 {
 	struct isd200_info *info = (struct isd200_info *)us->extra;
 	int retStatus = ISD200_GOOD;
@@ -1124,8 +1124,8 @@
  *    TRUE if the command needs to be sent to the transport layer
  *    FALSE otherwise
  */
-int isd200_scsi_to_ata(Scsi_Cmnd *srb, struct us_data *us, 
-		       union ata_cdb * ataCdb)
+static int isd200_scsi_to_ata(Scsi_Cmnd *srb, struct us_data *us,
+			      union ata_cdb * ataCdb)
 {
 	struct isd200_info *info = (struct isd200_info *)us->extra;
 	struct hd_driveid *id = info->id;
@@ -1339,7 +1339,7 @@
  *
  * Frees the driver structure.
  */
-void isd200_free_info_ptrs(void *info_)
+static void isd200_free_info_ptrs(void *info_)
 {
 	struct isd200_info *info = (struct isd200_info *) info_;
 
@@ -1357,7 +1357,7 @@
  * RETURNS:
  *    ISD status code
  */
-int isd200_init_info(struct us_data *us)
+static int isd200_init_info(struct us_data *us)
 {
 	int retStatus = ISD200_GOOD;
 	struct isd200_info *info;
diff -Nru a/drivers/usb/storage/jumpshot.c b/drivers/usb/storage/jumpshot.c
--- a/drivers/usb/storage/jumpshot.c	Sun May 16 01:18:33 2004
+++ b/drivers/usb/storage/jumpshot.c	Sun May 16 01:18:33 2004
@@ -416,7 +416,7 @@
 }
 
 
-void jumpshot_info_destructor(void *extra)
+static void jumpshot_info_destructor(void *extra)
 {
 	// this routine is a placeholder...
 	// currently, we don't allocate any extra blocks so we're okay
diff -Nru a/drivers/usb/storage/scsiglue.c b/drivers/usb/storage/scsiglue.c
--- a/drivers/usb/storage/scsiglue.c	Sun May 16 01:18:35 2004
+++ b/drivers/usb/storage/scsiglue.c	Sun May 16 01:18:35 2004
@@ -159,14 +159,18 @@
 		return FAILED;
 	}
 
-	/* Set state to ABORTING, set the ABORTING bit, and release the lock */
+	/* Set state to ABORTING and set the ABORTING bit, but only if
+	 * a device reset isn't already in progress (to avoid interfering
+	 * with the reset).  To prevent races with auto-reset, we must
+	 * stop any ongoing USB transfers while still holding the host
+	 * lock. */
 	us->sm_state = US_STATE_ABORTING;
-	set_bit(US_FLIDX_ABORTING, &us->flags);
+	if (!test_bit(US_FLIDX_RESETTING, &us->flags)) {
+		set_bit(US_FLIDX_ABORTING, &us->flags);
+		usb_stor_stop_transport(us);
+	}
 	scsi_unlock(host);
 
-	/* Stop an ongoing USB transfer */
-	usb_stor_stop_transport(us);
-
 	/* Wait for the aborted command to finish */
 	wait_for_completion(&us->notify);
 
@@ -254,18 +258,17 @@
 }
 
 /* Report a driver-initiated device reset to the SCSI layer.
- * Calling this for a SCSI-initiated reset is unnecessary but harmless. */
+ * Calling this for a SCSI-initiated reset is unnecessary but harmless.
+ * The caller must own the SCSI host lock. */
 void usb_stor_report_device_reset(struct us_data *us)
 {
 	int i;
 
-	scsi_lock(us->host);
 	scsi_report_device_reset(us->host, 0, 0);
 	if (us->flags & US_FL_SCM_MULT_TARG) {
 		for (i = 1; i < us->host->max_id; ++i)
 			scsi_report_device_reset(us->host, 0, i);
 	}
-	scsi_unlock(us->host);
 }
 
 /***********************************************************************
diff -Nru a/drivers/usb/storage/shuttle_usbat.c b/drivers/usb/storage/shuttle_usbat.c
--- a/drivers/usb/storage/shuttle_usbat.c	Sun May 16 01:18:33 2004
+++ b/drivers/usb/storage/shuttle_usbat.c	Sun May 16 01:18:33 2004
@@ -55,11 +55,11 @@
 
 int transferred = 0;
 
-int usbat_read(struct us_data *us,
-	     unsigned char access,
-	     unsigned char reg, 
-	     unsigned char *content) {
-
+static int usbat_read(struct us_data *us,
+		      unsigned char access,
+		      unsigned char reg,
+		      unsigned char *content)
+{
 	int result;
 
 	result = usb_stor_ctrl_transfer(us,
@@ -74,11 +74,11 @@
 	return result;
 }
 
-int usbat_write(struct us_data *us,
-	     unsigned char access,
-	     unsigned char reg, 
-	     unsigned char content) {
-
+static int usbat_write(struct us_data *us,
+		       unsigned char access,
+		       unsigned char reg,
+		       unsigned char content)
+{
 	int result;
 
 	result = usb_stor_ctrl_transfer(us,
@@ -93,14 +93,14 @@
 	return result;
 }
 
-int usbat_set_shuttle_features(struct us_data *us,
-	     unsigned char external_trigger,
-	     unsigned char epp_control, 
-	     unsigned char mask_byte, 
-	     unsigned char test_pattern, 
-	     unsigned char subcountH, 
-	     unsigned char subcountL) {
-
+static int usbat_set_shuttle_features(struct us_data *us,
+				      unsigned char external_trigger,
+				      unsigned char epp_control,
+				      unsigned char mask_byte,
+				      unsigned char test_pattern,
+				      unsigned char subcountH,
+				      unsigned char subcountL)
+{
 	int result;
 	unsigned char *command = us->iobuf;
 
@@ -125,13 +125,13 @@
 	return result;
 }
 
-int usbat_read_block(struct us_data *us,
-	     unsigned char access,
-	     unsigned char reg, 
-	     unsigned char *content,
-	     unsigned short len,
-	     int use_sg) {
-
+static int usbat_read_block(struct us_data *us,
+			    unsigned char access,
+			    unsigned char reg,
+			    unsigned char *content,
+			    unsigned short len,
+			    int use_sg)
+{
 	int result;
 	unsigned char *command = us->iobuf;
 
@@ -171,8 +171,8 @@
  * an error condition.
  */
 
-int usbat_wait_not_busy(struct us_data *us, int minutes) {
-
+static int usbat_wait_not_busy(struct us_data *us, int minutes)
+{
 	int i;
 	int result;
 	unsigned char *status = us->iobuf;
@@ -216,14 +216,13 @@
 	return USB_STOR_TRANSPORT_FAILED;
 }
 
-int usbat_write_block(struct us_data *us,
-	     unsigned char access,
-	     unsigned char reg, 
-	     unsigned char *content,
-	     unsigned short len,
-	     int use_sg,
-	     int minutes) {
-
+static int usbat_write_block(struct us_data *us,
+			     unsigned char access, 
+			     unsigned char reg,
+			     unsigned char *content,
+			     unsigned short len,
+			     int use_sg, int minutes)
+{
 	int result;
 	unsigned char *command = us->iobuf;
 
@@ -260,21 +259,21 @@
 	return usbat_wait_not_busy(us, minutes);
 }
 
-int usbat_rw_block_test(struct us_data *us,
-	     unsigned char access,
-	     unsigned char *registers,
-	     unsigned char *data_out,
-	     unsigned short num_registers,
-	     unsigned char data_reg, 
-	     unsigned char status_reg, 
-	     unsigned char timeout, 
-	     unsigned char qualifier, 
-	     int direction,
-	     unsigned char *content,
-	     unsigned short len,
-	     int use_sg,
-	     int minutes) {
-
+static int usbat_rw_block_test(struct us_data *us,
+			       unsigned char access,
+			       unsigned char *registers,
+			       unsigned char *data_out,
+			       unsigned short num_registers,
+			       unsigned char data_reg,
+			       unsigned char status_reg,
+			       unsigned char timeout,
+			       unsigned char qualifier,
+			       int direction,
+			       unsigned char *content,
+			       unsigned short len,
+			       int use_sg,
+			       int minutes)
+{
 	int result;
 	unsigned int pipe = (direction == SCSI_DATA_READ) ?
 			us->recv_bulk_pipe : us->send_bulk_pipe;
@@ -431,12 +430,12 @@
  * transfers of data!
  */
 
-int usbat_multiple_write(struct us_data *us, 
-			unsigned char access,
-			unsigned char *registers,
-			unsigned char *data_out,
-			unsigned short num_registers) {
-
+static int usbat_multiple_write(struct us_data *us,
+				unsigned char access,
+				unsigned char *registers,
+				unsigned char *data_out,
+				unsigned short num_registers)
+{
 	int result;
 	unsigned char *data = us->iobuf;
 	int i;
@@ -479,9 +478,8 @@
 	return usbat_wait_not_busy(us, 0);
 }
 
-int usbat_read_user_io(struct us_data *us,
-		unsigned char *data_flags) {
-
+static int usbat_read_user_io(struct us_data *us, unsigned char *data_flags)
+{
 	int result;
 
 	result = usb_stor_ctrl_transfer(us,
@@ -496,10 +494,10 @@
 	return result;
 }
 
-int usbat_write_user_io(struct us_data *us,
-		unsigned char enable_flags,
-		unsigned char data_flags) {
-
+static int usbat_write_user_io(struct us_data *us,
+			       unsigned char enable_flags,
+			       unsigned char data_flags)
+{
 	int result;
 
 	result = usb_stor_ctrl_transfer(us,
@@ -519,11 +517,11 @@
  * a little ( <= 65535 byte) ATAPI pipe
  */
 
-int usbat_handle_read10(struct us_data *us,
-		unsigned char *registers,
-		unsigned char *data,
-		Scsi_Cmnd *srb) {
-
+static int usbat_handle_read10(struct us_data *us,
+			       unsigned char *registers,
+			       unsigned char *data,
+			       Scsi_Cmnd *srb)
+{
 	int result = USB_STOR_TRANSPORT_GOOD;
 	unsigned char *buffer;
 	unsigned int len;
@@ -630,8 +628,8 @@
 	return result;
 }
 
-static int hp_8200e_select_and_test_registers(struct us_data *us) {
-
+static int hp_8200e_select_and_test_registers(struct us_data *us)
+{
 	int selector;
 	unsigned char *status = us->iobuf;
 
@@ -679,8 +677,8 @@
 	return USB_STOR_TRANSPORT_GOOD;
 }
 
-int init_8200e(struct us_data *us) {
-
+int init_8200e(struct us_data *us)
+{
 	int result;
 	unsigned char *status = us->iobuf;
 
diff -Nru a/drivers/usb/storage/shuttle_usbat.h b/drivers/usb/storage/shuttle_usbat.h
--- a/drivers/usb/storage/shuttle_usbat.h	Sun May 16 01:18:33 2004
+++ b/drivers/usb/storage/shuttle_usbat.h	Sun May 16 01:18:33 2004
@@ -52,27 +52,7 @@
 #define USBAT_UIO_OE0		0x10 // I/O 0 set=output/clr=input
 #define USBAT_UIO_ADPRST	0x01 // Reset SCM chip
 
-/* USBAT-specific commands */
-
-extern int usbat_read(struct us_data *us, unsigned char access,
-	unsigned char reg, unsigned char *content);
-extern int usbat_write(struct us_data *us, unsigned char access,
-	unsigned char reg, unsigned char content);
-extern int usbat_read_block(struct us_data *us, unsigned char access,
-	unsigned char reg, unsigned char *content, unsigned short len,
-	int use_sg);
-extern int usbat_write_block(struct us_data *us, unsigned char access,
-	unsigned char reg, unsigned char *content, unsigned short len,
-	int use_sg, int minutes);
-extern int usbat_multiple_write(struct us_data *us, unsigned char access,
-	unsigned char *registers, unsigned char *data_out,
-	unsigned short num_registers);
-extern int usbat_read_user_io(struct us_data *us, unsigned char *data_flags);
-extern int usbat_write_user_io(struct us_data *us,
-	unsigned char enable_flags, unsigned char data_flags);
-
 /* HP 8200e stuff */
-
 extern int hp8200e_transport(Scsi_Cmnd *srb, struct us_data *us);
 extern int init_8200e(struct us_data *us);
 
diff -Nru a/drivers/usb/storage/transport.c b/drivers/usb/storage/transport.c
--- a/drivers/usb/storage/transport.c	Sun May 16 01:18:34 2004
+++ b/drivers/usb/storage/transport.c	Sun May 16 01:18:34 2004
@@ -137,7 +137,7 @@
 	int status;
 
 	/* don't submit URBs during abort/disconnect processing */
-	if (us->flags & DONT_SUBMIT)
+	if (us->flags & ABORTING_OR_DISCONNECTING)
 		return -EIO;
 
 	/* set up data structures for the wakeup system */
@@ -172,7 +172,7 @@
 	set_bit(US_FLIDX_URB_ACTIVE, &us->flags);
 
 	/* did an abort/disconnect occur during the submission? */
-	if (us->flags & DONT_SUBMIT) {
+	if (us->flags & ABORTING_OR_DISCONNECTING) {
 
 		/* cancel the URB, if it hasn't been cancelled already */
 		if (test_and_clear_bit(US_FLIDX_URB_ACTIVE, &us->flags)) {
@@ -440,7 +440,7 @@
 	int result;
 
 	/* don't submit s-g requests during abort/disconnect processing */
-	if (us->flags & DONT_SUBMIT)
+	if (us->flags & ABORTING_OR_DISCONNECTING)
 		return USB_STOR_XFER_ERROR;
 
 	/* initialize the scatter-gather request block */
@@ -458,7 +458,7 @@
 	set_bit(US_FLIDX_SG_ACTIVE, &us->flags);
 
 	/* did an abort/disconnect occur during the submission? */
-	if (us->flags & DONT_SUBMIT) {
+	if (us->flags & ABORTING_OR_DISCONNECTING) {
 
 		/* cancel the request, if it hasn't been cancelled already */
 		if (test_and_clear_bit(US_FLIDX_SG_ACTIVE, &us->flags)) {
@@ -712,14 +712,10 @@
 
 	/* abort processing: the bulk-only transport requires a reset
 	 * following an abort */
-	Handle_Abort:
+  Handle_Abort:
 	srb->result = DID_ABORT << 16;
-	if (us->protocol == US_PR_BULK) {
-
-		/* permit the reset transfer to take place */
-		clear_bit(US_FLIDX_ABORTING, &us->flags);
+	if (us->protocol == US_PR_BULK)
 		us->transport_reset(us);
-	}
 }
 
 /* Stop the current URB transfer */
@@ -912,6 +908,17 @@
 				 USB_RECIP_INTERFACE,
 				 0, us->ifnum, us->iobuf, 1, HZ);
 
+	/* 
+	 * Some devices (i.e. Iomega Zip100) need this -- apparently
+	 * the bulk pipes get STALLed when the GetMaxLUN request is
+	 * processed.   This is, in theory, harmless to all other devices
+	 * (regardless of if they stall or not).
+	 */
+	if (result < 0) {
+		usb_stor_clear_halt(us, us->recv_bulk_pipe);
+		usb_stor_clear_halt(us, us->send_bulk_pipe);
+	}
+
 	US_DEBUGP("GetMaxLUN command result is %d, data is %d\n", 
 		  result, us->iobuf[0]);
 
@@ -1079,20 +1086,28 @@
 {
 	int result;
 	int result2;
+	int rc = FAILED;
 
-	/* Let the SCSI layer know we are doing a reset */
+	/* Let the SCSI layer know we are doing a reset, set the
+	 * RESETTING bit, and clear the ABORTING bit so that the reset
+	 * may proceed.
+	 */
+	scsi_lock(us->host);
 	usb_stor_report_device_reset(us);
+	set_bit(US_FLIDX_RESETTING, &us->flags);
+	clear_bit(US_FLIDX_ABORTING, &us->flags);
+	scsi_unlock(us->host);
 
 	/* A 20-second timeout may seem rather long, but a LaCie
-	 *  StudioDrive USB2 device takes 16+ seconds to get going
-	 *  following a powerup or USB attach event. */
-
+	 * StudioDrive USB2 device takes 16+ seconds to get going
+	 * following a powerup or USB attach event.
+	 */
 	result = usb_stor_control_msg(us, us->send_ctrl_pipe,
 			request, requesttype, value, index, data, size,
 			20*HZ);
 	if (result < 0) {
 		US_DEBUGP("Soft reset failed: %d\n", result);
-		return FAILED;
+		goto Done;
 	}
 
 	/* long wait for reset, so unlock to allow disconnects */
@@ -1102,12 +1117,9 @@
 	down(&us->dev_semaphore);
 	if (test_bit(US_FLIDX_DISCONNECTING, &us->flags)) {
 		US_DEBUGP("Reset interrupted by disconnect\n");
-		return FAILED;
+		goto Done;
 	}
 
-	/* permit the clear-halt transfers to take place */
-	clear_bit(US_FLIDX_ABORTING, &us->flags);
-
 	US_DEBUGP("Soft reset: clearing bulk-in endpoint halt\n");
 	result = usb_stor_clear_halt(us, us->recv_bulk_pipe);
 
@@ -1117,10 +1129,14 @@
 	/* return a result code based on the result of the control message */
 	if (result < 0 || result2 < 0) {
 		US_DEBUGP("Soft reset failed\n");
-		return FAILED;
+		goto Done;
 	}
 	US_DEBUGP("Soft reset done\n");
-	return SUCCESS;
+	rc = SUCCESS;
+
+  Done:
+	clear_bit(US_FLIDX_RESETTING, &us->flags);
+	return rc;
 }
 
 /* This issues a CB[I] Reset to the device in question
diff -Nru a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
--- a/drivers/usb/storage/unusual_devs.h	Sun May 16 01:18:36 2004
+++ b/drivers/usb/storage/unusual_devs.h	Sun May 16 01:18:36 2004
@@ -90,6 +90,12 @@
  		US_SC_SCSI, US_PR_DPCM_USB, NULL, 0 ),
 #endif
 
+/* Patch submitted by Alessandro Fracchetti <al.fracchetti@tin.it> */
+UNUSUAL_DEV(  0x0482, 0x0105, 0x0100, 0x0100,
+		"Kyocera",
+		"Finecam L3",
+		US_SC_SCSI, US_PR_BULK, NULL, US_FL_FIX_INQUIRY),
+
 /* Patch submitted by Philipp Friedrich <philipp@void.at> */
 UNUSUAL_DEV(  0x0482, 0x0100, 0x0100, 0x0100,
 		"Kyocera",
@@ -297,6 +303,13 @@
 		US_SC_SCSI, US_PR_DEVICE, NULL,
 		US_FL_SINGLE_LUN | US_FL_MODE_XLATE),
 
+/* Submitted by Rajesh Kumble Nayak <nayak@obs-nice.fr> */
+UNUSUAL_DEV(  0x054c, 0x002e, 0x0500, 0x0500, 
+		"Sony",
+		"Handycam HC-85",
+		US_SC_UFI, US_PR_DEVICE, NULL,
+		US_FL_SINGLE_LUN | US_FL_MODE_XLATE),
+
 UNUSUAL_DEV(  0x054c, 0x0032, 0x0000, 0x9999,
 		"Sony",
 		"Memorystick MSC-U01N",
@@ -322,6 +335,13 @@
 		"PEG Mass Storage",
 		US_SC_DEVICE, US_PR_DEVICE, NULL,
 		US_FL_FIX_INQUIRY ),
+
+/* Submitted by Mike Alborn <malborn@deandra.homeip.net> */
+UNUSUAL_DEV(  0x054c, 0x016a, 0x0000, 0x9999,
+		"Sony",
+		"PEG Mass Storage",
+		US_SC_DEVICE, US_PR_DEVICE, NULL,
+		US_FL_FIX_INQUIRY ),
 		
 UNUSUAL_DEV(  0x057b, 0x0000, 0x0000, 0x0299, 
 		"Y-E Data",
@@ -438,22 +458,6 @@
 		US_FL_SINGLE_LUN ),
 #endif
 
-/* Following three Minolta cameras reported by Martin Pool
- * <mbp@sourcefrog.net>.  Originally discovered by Kedar Petankar,
- * Matthew Geier, Mikael Lofj"ard, Marcel de Boer.
- */
-UNUSUAL_DEV( 0x0686, 0x4006, 0x0001, 0x0001,
-		"Minolta",
-		"DiMAGE 7",
-		US_SC_SCSI, US_PR_DEVICE, NULL,
-		0 ),
-
-UNUSUAL_DEV( 0x0686, 0x400f, 0x0001, 0x0001,
-		"Minolta",
-		"DiMAGE 7Hi",
-		US_SC_SCSI, US_PR_DEVICE, NULL,
-		0 ),
-
 /* Submitted by Benny Sjostrand <benny@hostmobility.com> */
 UNUSUAL_DEV( 0x0686, 0x4011, 0x0001, 0x0001,
 		"Minolta",
@@ -629,7 +633,7 @@
 		"Casio",
 		"QV DigitalCamera",
 		US_SC_DEVICE, US_PR_CB, NULL,
-		US_FL_FIX_INQUIRY ),
+		US_FL_NEED_OVERRIDE | US_FL_FIX_INQUIRY ),
 
 /* Later Casio cameras apparently tell the truth */
 UNUSUAL_DEV( 0x07cf, 0x1001, 0x9010, 0x9999,
@@ -688,7 +692,7 @@
 UNUSUAL_DEV(  0x0a16, 0x8888, 0x0100, 0x0100,
 		"IBM",
 		"IBM USB Memory Key",
-		US_SC_SCSI, US_PR_BULK, NULL,
+		US_SC_DEVICE, US_PR_DEVICE, NULL,
 		US_FL_FIX_INQUIRY ),
 
 /* This Pentax still camera is not conformant
diff -Nru a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c
--- a/drivers/usb/storage/usb.c	Sun May 16 01:18:34 2004
+++ b/drivers/usb/storage/usb.c	Sun May 16 01:18:34 2004
@@ -84,8 +84,6 @@
 
 
 #include <linux/module.h>
-#include <linux/sched.h>
-#include <linux/errno.h>
 #include <linux/init.h>
 #include <linux/slab.h>
 
@@ -490,7 +488,7 @@
 		if (unusual_dev->useTransport != US_PR_DEVICE &&
 			us->protocol == idesc->bInterfaceProtocol)
 			msg += 2;
-		if (msg >= 0)
+		if (msg >= 0 && !(unusual_dev->flags & US_FL_NEED_OVERRIDE))
 			printk(KERN_NOTICE USB_STORAGE "This device "
 				"(%04x,%04x,%04x S %02x P %02x)"
 				" has %s in unusual_devs.h\n"
diff -Nru a/drivers/usb/storage/usb.h b/drivers/usb/storage/usb.h
--- a/drivers/usb/storage/usb.h	Sun May 16 01:18:35 2004
+++ b/drivers/usb/storage/usb.h	Sun May 16 01:18:35 2004
@@ -69,6 +69,7 @@
 /* Flag definitions: these entries are static */
 #define US_FL_SINGLE_LUN      0x00000001 /* allow access to only LUN 0	    */
 #define US_FL_MODE_XLATE      0          /* [no longer used]                */
+#define US_FL_NEED_OVERRIDE   0x00000004 /* unusual_devs entry is necessary */
 #define US_FL_IGNORE_SER      0		 /* [no longer used]		    */
 #define US_FL_SCM_MULT_TARG   0x00000020 /* supports multiple targets	    */
 #define US_FL_FIX_INQUIRY     0x00000040 /* INQUIRY response needs faking   */
@@ -79,8 +80,9 @@
 #define US_FLIDX_SG_ACTIVE	19  /* 0x00080000  current_sg is in use   */
 #define US_FLIDX_ABORTING	20  /* 0x00100000  abort is in progress   */
 #define US_FLIDX_DISCONNECTING	21  /* 0x00200000  disconnect in progress */
-#define DONT_SUBMIT	((1UL << US_FLIDX_ABORTING) | \
-			 (1UL << US_FLIDX_DISCONNECTING))
+#define ABORTING_OR_DISCONNECTING	((1UL << US_FLIDX_ABORTING) | \
+					 (1UL << US_FLIDX_DISCONNECTING))
+#define US_FLIDX_RESETTING	22  /* 0x00400000  device reset in progress */
 
 
 /* processing state machine states */
diff -Nru a/drivers/video/Kconfig b/drivers/video/Kconfig
--- a/drivers/video/Kconfig	Sun May 16 01:18:33 2004
+++ b/drivers/video/Kconfig	Sun May 16 01:18:33 2004
@@ -225,6 +225,10 @@
 	  This is the frame buffer device driver for the Chips & Technologies
 	  65550 graphics chip in PowerBooks.
 
+config FB_ASILIANT
+	bool "Chips 69000 display support"
+	depends on FB && PCI
+
 config FB_IMSTT
 	bool "IMS Twin Turbo display support"
 	depends on FB && PCI
@@ -308,6 +312,14 @@
 	  As this card technology is 15 years old, most people will answer N
 	  here.
 
+config FB_HGA_ACCEL
+	bool "Hercules mono Acceleration functions (EXPERIMENTAL)"
+	depends on FB_HGA && EXPERIMENTAL
+	---help---
+	This will compile the Hercules mono graphics with
+	acceleration functions.
+
+
 config VIDEO_SELECT
 	bool
 	depends on FB && X86
@@ -319,6 +331,21 @@
 	help
 	  SGI Visual Workstation support for framebuffer graphics.
 
+config FB_GBE
+	bool "SGI Graphics Backend frame buffer support"
+	depends on FB && (SGI_IP32 || X86_VISWS)
+ 	help
+	  This is the frame buffer device driver for SGI Graphics Backend.
+	  This chip is used in SGI O2 and Visual Workstation 320/540.
+
+config FB_GBE_MEM
+	int "Video memory size in MB"
+	depends on FB_GBE
+	default 8
+	help
+	  This is the amount of memory reserved for the framebuffer,
+	  which can be any value between 1MB and 8MB.
+
 config BUS_I2C
 	bool
 	depends on FB && VISWS
@@ -743,6 +770,14 @@
 	  To compile this driver as a module, choose M here: the
 	  module will be called tdfxfb.
 
+config FB_3DFX_ACCEL
+	bool "3Dfx Banshee/Voodoo3 Acceleration functions (EXPERIMENTAL)"
+	depends on FB_3DFX && EXPERIMENTAL
+	---help---
+	This will compile the 3Dfx Banshee/Voodoo3 frame buffer device
+	with acceleration functions.
+
+
 config FB_VOODOO1
 	tristate "3Dfx Voodoo Graphics (sst1) support"
 	depends on FB && PCI
@@ -772,6 +807,14 @@
 	  To compile this driver as a module, choose M here: the
 	  module will be called tridentfb.
 
+config FB_TRIDENT_ACCEL
+	bool "Trident Acceleration functions (EXPERIMENTAL)"
+	depends on FB_TRIDENT && EXPERIMENTAL
+	---help---
+	This will compile the Trident frame buffer device with
+	acceleration functions.
+
+
 config FB_PM3
 	tristate "Permedia3 support"
 	depends on FB && PCI && BROKEN
@@ -879,6 +922,37 @@
 	help
 	  Say Y here if you want to support the built-in frame buffer of
 	  the Motorola 68328 CPU family.
+
+config FB_PXA
+	tristate "PXA LCD framebuffer support"
+	depends on FB && ARCH_PXA
+	---help---
+	  Frame buffer driver for the built-in LCD controller in the Intel
+	  PXA2x0 processor.
+
+	  This driver is also available as a module ( = code which can be
+	  inserted and removed from the running kernel whenever you want). The
+	  module will be called vfb. If you want to compile it as a module,
+	  say M here and read <file:Documentation/modules.txt>.
+
+	  If unsure, say N.
+
+config FB_PXA_PARAMETERS
+	bool "PXA LCD command line parameters"
+	default n
+	depends on FB_PXA
+	---help---
+	  Enable the use of kernel command line or module parameters
+	  to configure the physical properties of the LCD panel when
+	  using the PXA LCD driver.
+
+	  This option allows you to override the panel parameters
+	  supplied by the platform in order to support multiple
+	  different models of flatpanel. If you will only be using a
+	  single model of flatpanel then you can safely leave this
+	  option disabled.
+
+	  Documentation/fb/pxafb.txt describes the available parameters.
 
 config FB_VIRTUAL
 	tristate "Virtual Frame Buffer support (ONLY FOR TESTING!)"
diff -Nru a/drivers/video/Makefile b/drivers/video/Makefile
--- a/drivers/video/Makefile	Sun May 16 01:18:33 2004
+++ b/drivers/video/Makefile	Sun May 16 01:18:33 2004
@@ -22,7 +22,7 @@
 obj-$(CONFIG_FB_ATARI)            += atafb.o
 obj-$(CONFIG_FB_68328)            += 68328fb.o
 obj-$(CONFIG_FB_RADEON_OLD)	  += radeonfb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
-obj-$(CONFIG_FB_NEOMAGIC)         += neofb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
+obj-$(CONFIG_FB_NEOMAGIC)         += neofb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o vgastate.o
 obj-$(CONFIG_FB_IGA)              += igafb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
 obj-$(CONFIG_FB_CONTROL)          += controlfb.o macmodes.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
 obj-$(CONFIG_FB_PLATINUM)         += platinumfb.o macmodes.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
@@ -31,6 +31,7 @@
 obj-$(CONFIG_FB_CLPS711X)         += clps711xfb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
 obj-$(CONFIG_FB_CYBER)            += cyberfb.o
 obj-$(CONFIG_FB_CYBER2000)        += cyber2000fb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
+obj-$(CONFIG_FB_GBE)              += gbefb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
 obj-$(CONFIG_FB_SGIVW)            += sgivwfb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
 obj-$(CONFIG_FB_3DFX)             += tdfxfb.o cfbimgblt.o
 obj-$(CONFIG_FB_MAC)              += macfb.o macmodes.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o 
@@ -72,6 +73,7 @@
 obj-$(CONFIG_FB_PVR2)             += pvr2fb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
 obj-$(CONFIG_FB_KYRO)             += kyro/ cfbfillrect.o cfbcopyarea.o cfbimgblt.o
 obj-$(CONFIG_FB_VOODOO1)          += sstfb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
+obj-$(CONFIG_FB_ASILIANT)	  += asiliantfb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
 
 obj-$(CONFIG_FB_FFB)               += ffb.o sbuslib.o cfbimgblt.o cfbcopyarea.o
 obj-$(CONFIG_FB_CG6)               += cg6.o sbuslib.o cfbimgblt.o cfbcopyarea.o
@@ -87,4 +89,4 @@
 				      cfbfillrect.o
 obj-$(CONFIG_FB_LEO)               += leo.o sbuslib.o cfbimgblt.o cfbcopyarea.o \
 				      cfbfillrect.o
-
+obj-$(CONFIG_FB_PXA)		   += pxafb.o cfbimgblt.o cfbcopyarea.o cfbfillrect.o
diff -Nru a/drivers/video/asiliantfb.c b/drivers/video/asiliantfb.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/drivers/video/asiliantfb.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,620 @@
+/*
+ * drivers/video/asiliantfb.c
+ *  frame buffer driver for Asiliant 69000 chip
+ *  Copyright (C) 2001-2003 Saito.K & Jeanne
+ *
+ *  from driver/video/chipsfb.c and,
+ *
+ *  drivers/video/asiliantfb.c -- frame buffer device for
+ *  Asiliant 69030 chip (formerly Intel, formerly Chips & Technologies)
+ *  Author: apc@agelectronics.co.uk
+ *  Copyright (C) 2000 AG Electronics
+ *  Note: the data sheets don't seem to be available from Asiliant.
+ *  They are available by searching developer.intel.com, but are not otherwise
+ *  linked to.
+ *
+ *  This driver should be portable with minimal effort to the 69000 display
+ *  chip, and to the twin-display mode of the 69030.
+ *  Contains code from Thomas Hhenleitner <th@visuelle-maschinen.de> (thanks)
+ *
+ *  Derived from the CT65550 driver chipsfb.c:
+ *  Copyright (C) 1998 Paul Mackerras
+ *  ...which was derived from the Powermac "chips" driver:
+ *  Copyright (C) 1997 Fabio Riccardi.
+ *  And from the frame buffer device for Open Firmware-initialized devices:
+ *  Copyright (C) 1997 Geert Uytterhoeven.
+ *
+ *  This file is subject to the terms and conditions of the GNU General Public
+ *  License. See the file COPYING in the main directory of this archive for
+ *  more details.
+ */
+
+#include <linux/config.h>
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/errno.h>
+#include <linux/string.h>
+#include <linux/mm.h>
+#include <linux/tty.h>
+#include <linux/slab.h>
+#include <linux/vmalloc.h>
+#include <linux/delay.h>
+#include <linux/interrupt.h>
+#include <linux/fb.h>
+#include <linux/init.h>
+#include <linux/pci.h>
+#include <asm/io.h>
+
+/* Built in clock of the 69030 */
+const unsigned Fref = 14318180;
+
+#define mmio_base (p->screen_base + 0x400000)
+
+#define mm_write_ind(num, val, ap, dp)	do { \
+	writeb((num), mmio_base + (ap)); writeb((val), mmio_base + (dp)); \
+} while (0)
+
+static void mm_write_xr(struct fb_info *p, u8 reg, u8 data)
+{
+	mm_write_ind(reg, data, 0x7ac, 0x7ad);
+}
+#define write_xr(num, val)	mm_write_xr(p, num, val)
+
+static void mm_write_fr(struct fb_info *p, u8 reg, u8 data)
+{
+	mm_write_ind(reg, data, 0x7a0, 0x7a1);
+}
+#define write_fr(num, val)	mm_write_fr(p, num, val)
+
+static void mm_write_cr(struct fb_info *p, u8 reg, u8 data)
+{
+	mm_write_ind(reg, data, 0x7a8, 0x7a9);
+}
+#define write_cr(num, val)	mm_write_cr(p, num, val)
+
+static void mm_write_gr(struct fb_info *p, u8 reg, u8 data)
+{
+	mm_write_ind(reg, data, 0x79c, 0x79d);
+}
+#define write_gr(num, val)	mm_write_gr(p, num, val)
+
+static void mm_write_sr(struct fb_info *p, u8 reg, u8 data)
+{
+	mm_write_ind(reg, data, 0x788, 0x789);
+}
+#define write_sr(num, val)	mm_write_sr(p, num, val)
+
+static void mm_write_ar(struct fb_info *p, u8 reg, u8 data)
+{
+	readb(mmio_base + 0x7b4);
+	mm_write_ind(reg, data, 0x780, 0x780);
+}
+#define write_ar(num, val)	mm_write_ar(p, num, val)
+
+/*
+ * Exported functions
+ */
+int asiliantfb_init(void);
+
+static int asiliantfb_pci_init(struct pci_dev *dp, const struct pci_device_id *);
+static int asiliantfb_check_var(struct fb_var_screeninfo *var,
+				struct fb_info *info);
+static int asiliantfb_set_par(struct fb_info *info);
+static int asiliantfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
+				u_int transp, struct fb_info *info);
+
+static struct fb_ops asiliantfb_ops = {
+	.owner		= THIS_MODULE,
+	.fb_check_var	= asiliantfb_check_var,
+	.fb_set_par	= asiliantfb_set_par,
+	.fb_setcolreg	= asiliantfb_setcolreg,
+	.fb_fillrect	= cfb_fillrect,
+	.fb_copyarea	= cfb_copyarea,
+	.fb_imageblit	= cfb_imageblit,
+	.fb_cursor	= soft_cursor,
+};
+
+/* Calculate the ratios for the dot clocks without using a single long long
+ * value */
+static void asiliant_calc_dclk2(u32 *ppixclock, u8 *dclk2_m, u8 *dclk2_n, u8 *dclk2_div)
+{
+	unsigned pixclock = *ppixclock;
+	unsigned Ftarget = 1000000 * (1000000 / pixclock);
+	unsigned n;
+	unsigned best_error = 0xffffffff;
+	unsigned best_m = 0xffffffff,
+	         best_n = 0xffffffff;
+	unsigned ratio;
+	unsigned remainder;
+	unsigned char divisor = 0;
+
+	/* Calculate the frequency required. This is hard enough. */
+	ratio = 1000000 / pixclock;
+	remainder = 1000000 % pixclock;
+	Ftarget = 1000000 * ratio + (1000000 * remainder) / pixclock;
+
+	while (Ftarget < 100000000) {
+		divisor += 0x10;
+		Ftarget <<= 1;
+	}
+
+	ratio = Ftarget / Fref;
+	remainder = Ftarget % Fref;
+
+	/* This expresses the constraint that 150kHz <= Fref/n <= 5Mhz,
+	 * together with 3 <= n <= 257. */
+	for (n = 3; n <= 257; n++) {
+		unsigned m = n * ratio + (n * remainder) / Fref;
+
+		/* 3 <= m <= 257 */
+		if (m >= 3 && m <= 257) {
+			unsigned new_error = ((Ftarget * n) - (Fref * m)) >= 0 ?
+					       ((Ftarget * n) - (Fref * m)) : ((Fref * m) - (Ftarget * n));
+			if (new_error < best_error) {
+				best_n = n;
+				best_m = m;
+				best_error = new_error;
+			}
+		}
+		/* But if VLD = 4, then 4m <= 1028 */
+		else if (m <= 1028) {
+			/* remember there are still only 8-bits of precision in m, so
+			 * avoid over-optimistic error calculations */
+			unsigned new_error = ((Ftarget * n) - (Fref * (m & ~3))) >= 0 ?
+					       ((Ftarget * n) - (Fref * (m & ~3))) : ((Fref * (m & ~3)) - (Ftarget * n));
+			if (new_error < best_error) {
+				best_n = n;
+				best_m = m;
+				best_error = new_error;
+			}
+		}
+	}
+	if (best_m > 257)
+		best_m >>= 2;	/* divide m by 4, and leave VCO loop divide at 4 */
+	else
+		divisor |= 4;	/* or set VCO loop divide to 1 */
+	*dclk2_m = best_m - 2;
+	*dclk2_n = best_n - 2;
+	*dclk2_div = divisor;
+	*ppixclock = pixclock;
+	return;
+}
+
+static void asiliant_set_timing(struct fb_info *p)
+{
+	unsigned hd = p->var.xres / 8;
+	unsigned hs = (p->var.xres + p->var.right_margin) / 8;
+       	unsigned he = (p->var.xres + p->var.right_margin + p->var.hsync_len) / 8;
+	unsigned ht = (p->var.left_margin + p->var.xres + p->var.right_margin + p->var.hsync_len) / 8;
+	unsigned vd = p->var.yres;
+	unsigned vs = p->var.yres + p->var.lower_margin;
+	unsigned ve = p->var.yres + p->var.lower_margin + p->var.vsync_len;
+	unsigned vt = p->var.upper_margin + p->var.yres + p->var.lower_margin + p->var.vsync_len;
+	unsigned wd = (p->var.xres_virtual * ((p->var.bits_per_pixel+7)/8)) / 8;
+
+	if ((p->var.xres == 640) && (p->var.yres == 480) && (p->var.pixclock == 39722)) {
+	  write_fr(0x01, 0x02);  /* LCD */
+	} else {
+	  write_fr(0x01, 0x01);  /* CRT */
+	}
+
+	write_cr(0x11, (ve - 1) & 0x0f);
+	write_cr(0x00, (ht - 5) & 0xff);
+	write_cr(0x01, hd - 1);
+	write_cr(0x02, hd);
+	write_cr(0x03, ((ht - 1) & 0x1f) | 0x80);
+	write_cr(0x04, hs);
+	write_cr(0x05, (((ht - 1) & 0x20) <<2) | (he & 0x1f));
+	write_cr(0x3c, (ht - 1) & 0xc0);
+	write_cr(0x06, (vt - 2) & 0xff);
+	write_cr(0x30, (vt - 2) >> 8);
+	write_cr(0x07, 0x00);
+	write_cr(0x08, 0x00);
+	write_cr(0x09, 0x00);
+	write_cr(0x10, (vs - 1) & 0xff);
+	write_cr(0x32, ((vs - 1) >> 8) & 0xf);
+	write_cr(0x11, ((ve - 1) & 0x0f) | 0x80);
+	write_cr(0x12, (vd - 1) & 0xff);
+	write_cr(0x31, ((vd - 1) & 0xf00) >> 8);
+	write_cr(0x13, wd & 0xff);
+	write_cr(0x41, (wd & 0xf00) >> 8);
+	write_cr(0x15, (vs - 1) & 0xff);
+	write_cr(0x33, ((vs - 1) >> 8) & 0xf);
+	write_cr(0x38, ((ht - 5) & 0x100) >> 8);
+	write_cr(0x16, (vt - 1) & 0xff);
+	write_cr(0x18, 0x00);
+
+	if (p->var.xres == 640) {
+	  writeb(0xc7, mmio_base + 0x784);	/* set misc output reg */
+	} else {
+	  writeb(0x07, mmio_base + 0x784);	/* set misc output reg */
+	}
+}
+
+static int asiliantfb_check_var(struct fb_var_screeninfo *var,
+			     struct fb_info *p)
+{
+	unsigned long Ftarget, ratio, remainder;
+
+	ratio = 1000000 / var->pixclock;
+	remainder = 1000000 % var->pixclock;
+	Ftarget = 1000000 * ratio + (1000000 * remainder) / var->pixclock;
+
+	/* First check the constraint that the maximum post-VCO divisor is 32,
+	 * and the maximum Fvco is 220MHz */
+	if (Ftarget > 220000000 || Ftarget < 3125000) {
+		printk(KERN_ERR "asiliantfb dotclock must be between 3.125 and 220MHz\n");
+		return -ENXIO;
+	}
+	var->xres_virtual = var->xres;
+	var->yres_virtual = var->yres;
+
+	if (var->bits_per_pixel == 24) {
+		var->red.offset = 16;
+		var->green.offset = 8;
+		var->blue.offset = 0;
+		var->red.length = var->blue.length = var->green.length = 8;
+	} else if (var->bits_per_pixel == 16) {
+		switch (var->red.offset) {
+			case 11:
+				var->green.length = 6;
+				break;
+			case 10:
+				var->green.length = 5;
+				break;
+			default:
+				return -EINVAL;
+		}
+		var->green.offset = 5;
+		var->blue.offset = 0;
+		var->red.length = var->blue.length = 5;
+	} else if (var->bits_per_pixel == 8) {
+		var->red.offset = var->green.offset = var->blue.offset = 0;
+		var->red.length = var->green.length = var->blue.length = 8;
+	}
+	return 0;
+}
+
+static int asiliantfb_set_par(struct fb_info *p)
+{
+	u8 dclk2_m;		/* Holds m-2 value for register */
+	u8 dclk2_n;		/* Holds n-2 value for register */
+	u8 dclk2_div;		/* Holds divisor bitmask */
+
+	/* Set pixclock */
+	asiliant_calc_dclk2(&p->var.pixclock, &dclk2_m, &dclk2_n, &dclk2_div);
+
+	/* Set color depth */
+	if (p->var.bits_per_pixel == 24) {
+		write_xr(0x81, 0x16);	/* 24 bit packed color mode */
+		write_xr(0x82, 0x00);	/* Disable palettes */
+		write_xr(0x20, 0x20);	/* 24 bit blitter mode */
+	} else if (p->var.bits_per_pixel == 16) {
+		if (p->var.red.offset == 11)
+			write_xr(0x81, 0x15);	/* 16 bit color mode */
+		else
+			write_xr(0x81, 0x14);	/* 15 bit color mode */
+		write_xr(0x82, 0x00);	/* Disable palettes */
+		write_xr(0x20, 0x10);	/* 16 bit blitter mode */
+	} else if (p->var.bits_per_pixel == 8) {
+		write_xr(0x0a, 0x02);	/* Linear */
+		write_xr(0x81, 0x12);	/* 8 bit color mode */
+		write_xr(0x82, 0x00);	/* Graphics gamma enable */
+		write_xr(0x20, 0x00);	/* 8 bit blitter mode */
+	}
+	p->fix.line_length = p->var.xres * (p->var.bits_per_pixel >> 3);
+	p->fix.visual = (p->var.bits_per_pixel == 8) ? FB_VISUAL_PSEUDOCOLOR : FB_VISUAL_TRUECOLOR;
+	write_xr(0xc4, dclk2_m);
+	write_xr(0xc5, dclk2_n);
+	write_xr(0xc7, dclk2_div);
+	/* Set up the CR registers */
+	asiliant_set_timing(p);
+	return 0;
+}
+
+static int asiliantfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
+			     u_int transp, struct fb_info *p)
+{
+	if (regno > 255)
+		return 1;
+	red >>= 8;
+	green >>= 8;
+	blue >>= 8;
+
+        /* Set hardware palete */
+	writeb(regno, mmio_base + 0x790);
+	udelay(1);
+	writeb(red, mmio_base + 0x791);
+	writeb(green, mmio_base + 0x791);
+	writeb(blue, mmio_base + 0x791);
+
+	switch(p->var.bits_per_pixel) {
+	case 15:
+		if (regno < 16) {
+			((u32 *)(p->pseudo_palette))[regno] =
+				((red & 0xf8) << 7) |
+				((green & 0xf8) << 2) |
+				((blue & 0xf8) >> 3);
+		}
+		break;
+	case 16:
+		if (regno < 16) {
+			((u32 *)(p->pseudo_palette))[regno] =
+				((red & 0xf8) << 8) |
+				((green & 0xfc) << 3) |
+				((blue & 0xf8) >> 3);
+		}
+		break;
+	case 24:
+		if (regno < 24) {
+			((u32 *)(p->pseudo_palette))[regno] =
+				(red << 16)  |
+				(green << 8) |
+				(blue);
+		}
+		break;
+	}
+	return 0;
+}
+
+struct chips_init_reg {
+	unsigned char addr;
+	unsigned char data;
+};
+
+#define N_ELTS(x)	(sizeof(x) / sizeof(x[0]))
+
+static struct chips_init_reg chips_init_sr[] =
+{
+	{0x00, 0x03},		/* Reset register */
+	{0x01, 0x01},		/* Clocking mode */
+	{0x02, 0x0f},		/* Plane mask */
+	{0x04, 0x0e}		/* Memory mode */
+};
+
+static struct chips_init_reg chips_init_gr[] =
+{
+        {0x03, 0x00},		/* Data rotate */
+	{0x05, 0x00},		/* Graphics mode */
+	{0x06, 0x01},		/* Miscellaneous */
+	{0x08, 0x00}		/* Bit mask */
+};
+
+static struct chips_init_reg chips_init_ar[] =
+{
+	{0x10, 0x01},		/* Mode control */
+	{0x11, 0x00},		/* Overscan */
+	{0x12, 0x0f},		/* Memory plane enable */
+	{0x13, 0x00}		/* Horizontal pixel panning */
+};
+
+static struct chips_init_reg chips_init_cr[] =
+{
+	{0x0c, 0x00},		/* Start address high */
+	{0x0d, 0x00},		/* Start address low */
+	{0x40, 0x00},		/* Extended Start Address */
+	{0x41, 0x00},		/* Extended Start Address */
+	{0x14, 0x00},		/* Underline location */
+	{0x17, 0xe3},		/* CRT mode control */
+	{0x70, 0x00}		/* Interlace control */
+};
+
+
+static struct chips_init_reg chips_init_fr[] =
+{
+	{0x01, 0x02},
+	{0x03, 0x08},
+	{0x08, 0xcc},
+	{0x0a, 0x08},
+	{0x18, 0x00},
+	{0x1e, 0x80},
+	{0x40, 0x83},
+	{0x41, 0x00},
+	{0x48, 0x13},
+	{0x4d, 0x60},
+	{0x4e, 0x0f},
+
+	{0x0b, 0x01},
+
+	{0x21, 0x51},
+	{0x22, 0x1d},
+	{0x23, 0x5f},
+	{0x20, 0x4f},
+	{0x34, 0x00},
+	{0x24, 0x51},
+	{0x25, 0x00},
+	{0x27, 0x0b},
+	{0x26, 0x00},
+	{0x37, 0x80},
+	{0x33, 0x0b},
+	{0x35, 0x11},
+	{0x36, 0x02},
+	{0x31, 0xea},
+	{0x32, 0x0c},
+	{0x30, 0xdf},
+	{0x10, 0x0c},
+	{0x11, 0xe0},
+	{0x12, 0x50},
+	{0x13, 0x00},
+	{0x16, 0x03},
+	{0x17, 0xbd},
+	{0x1a, 0x00},
+};
+
+
+static struct chips_init_reg chips_init_xr[] =
+{
+	{0xce, 0x00},		/* set default memory clock */
+	{0xcc, 200 },	        /* MCLK ratio M */
+	{0xcd, 18  },	        /* MCLK ratio N */
+	{0xce, 0x90},		/* MCLK divisor = 2 */
+
+	{0xc4, 209 },
+	{0xc5, 118 },
+	{0xc7, 32  },
+	{0xcf, 0x06},
+	{0x09, 0x01},		/* IO Control - CRT controller extensions */
+	{0x0a, 0x02},		/* Frame buffer mapping */
+	{0x0b, 0x01},		/* PCI burst write */
+	{0x40, 0x03},		/* Memory access control */
+	{0x80, 0x82},		/* Pixel pipeline configuration 0 */
+	{0x81, 0x12},		/* Pixel pipeline configuration 1 */
+	{0x82, 0x08},		/* Pixel pipeline configuration 2 */
+
+	{0xd0, 0x0f},
+	{0xd1, 0x01},
+};
+
+static void __init chips_hw_init(struct fb_info *p)
+{
+	int i;
+
+	for (i = 0; i < N_ELTS(chips_init_xr); ++i)
+		write_xr(chips_init_xr[i].addr, chips_init_xr[i].data);
+	write_xr(0x81, 0x12);
+	write_xr(0x82, 0x08);
+	write_xr(0x20, 0x00);
+	for (i = 0; i < N_ELTS(chips_init_sr); ++i)
+		write_sr(chips_init_sr[i].addr, chips_init_sr[i].data);
+	for (i = 0; i < N_ELTS(chips_init_gr); ++i)
+		write_gr(chips_init_gr[i].addr, chips_init_gr[i].data);
+	for (i = 0; i < N_ELTS(chips_init_ar); ++i)
+		write_ar(chips_init_ar[i].addr, chips_init_ar[i].data);
+	/* Enable video output in attribute index register */
+	writeb(0x20, mmio_base + 0x780);
+	for (i = 0; i < N_ELTS(chips_init_cr); ++i)
+		write_cr(chips_init_cr[i].addr, chips_init_cr[i].data);
+	for (i = 0; i < N_ELTS(chips_init_fr); ++i)
+		write_fr(chips_init_fr[i].addr, chips_init_fr[i].data);
+}
+
+static struct fb_fix_screeninfo asiliantfb_fix __initdata = {
+	.id =		"Asiliant 69000",
+	.type =		FB_TYPE_PACKED_PIXELS,
+	.visual =	FB_VISUAL_PSEUDOCOLOR,
+	.accel =	FB_ACCEL_NONE,
+	.line_length =	640,
+	.smem_len =	0x200000,	/* 2MB */
+};
+
+static struct fb_var_screeninfo asiliantfb_var __initdata = {
+	.xres 		= 640,
+	.yres 		= 480,
+	.xres_virtual 	= 640,
+	.yres_virtual 	= 480,
+	.bits_per_pixel = 8,
+	.red 		= { .length = 8 },
+	.green 		= { .length = 8 },
+	.blue 		= { .length = 8 },
+	.height 	= -1,
+	.width 		= -1,
+	.vmode 		= FB_VMODE_NONINTERLACED,
+	.pixclock 	= 39722,
+	.left_margin 	= 48,
+	.right_margin 	= 16,
+	.upper_margin 	= 33,
+	.lower_margin 	= 10,
+	.hsync_len 	= 96,
+	.vsync_len 	= 2,
+};
+
+static void __init init_asiliant(struct fb_info *p, unsigned long addr)
+{
+	p->fix			= asiliantfb_fix;
+	p->fix.smem_start	= addr;
+	p->var			= asiliantfb_var;
+	p->fbops		= &asiliantfb_ops;
+	p->flags		= FBINFO_FLAG_DEFAULT;
+
+	fb_alloc_cmap(&p->cmap, 256, 0);
+
+	if (register_framebuffer(p) < 0) {
+		printk(KERN_ERR "C&T 69000 framebuffer failed to register\n");
+		return;
+	}
+
+	printk(KERN_INFO "fb%d: Asiliant 69000 frame buffer (%dK RAM detected)\n",
+		p->node, p->fix.smem_len / 1024);
+
+	writeb(0xff, mmio_base + 0x78c);
+	chips_hw_init(p);
+}
+
+static int __devinit
+asiliantfb_pci_init(struct pci_dev *dp, const struct pci_device_id *ent)
+{
+	unsigned long addr, size;
+	struct fb_info *p;
+
+	if ((dp->resource[0].flags & IORESOURCE_MEM) == 0)
+		return -ENODEV;
+	addr = pci_resource_start(dp, 0);
+	size = pci_resource_len(dp, 0);
+	if (addr == 0)
+		return -ENODEV;
+	if (!request_mem_region(addr, size, "asiliantfb"))
+		return -EBUSY;
+
+	p = framebuffer_alloc(sizeof(u32) * 256, &dp->dev);
+	if (!p)	{
+		release_mem_region(addr, size);
+		return -ENOMEM;
+	}
+	p->pseudo_palette = p->par;
+	p->par = NULL;
+
+	p->screen_base = ioremap(addr, 0x800000);
+	if (p->screen_base == NULL) {
+		release_mem_region(addr, size);
+		framebuffer_release(p);
+		return -ENOMEM;
+	}
+
+	pci_write_config_dword(dp, 4, 0x02800083);
+	writeb(3, addr + 0x400784);
+
+	init_asiliant(p, addr);
+
+	/* Clear the entire framebuffer */
+	memset(p->screen_base, 0, 0x200000);
+
+	pci_set_drvdata(dp, p);
+	return 0;
+}
+
+static void __devexit asiliantfb_remove(struct pci_dev *dp)
+{
+	struct fb_info *p = pci_get_drvdata(dp);
+
+	unregister_framebuffer(p);
+	iounmap(p->screen_base);
+	release_mem_region(pci_resource_start(dp, 0), pci_resource_len(dp, 0));
+	pci_set_drvdata(dp, NULL);
+	framebuffer_release(p);
+}
+
+static struct pci_device_id asiliantfb_pci_tbl[] __devinitdata = {
+	{ PCI_VENDOR_ID_CT, PCI_DEVICE_ID_CT_69000, PCI_ANY_ID, PCI_ANY_ID },
+	{ 0 }
+};
+
+MODULE_DEVICE_TABLE(pci, asiliantfb_pci_tbl);
+
+static struct pci_driver asiliantfb_driver = {
+	.name =		"asiliantfb",
+	.id_table =	asiliantfb_pci_tbl,
+	.probe =	asiliantfb_pci_init,
+	.remove =	__devexit_p(asiliantfb_remove),
+};
+
+int __init asiliantfb_init(void)
+{
+	return pci_module_init(&asiliantfb_driver);
+}
+
+static void __exit asiliantfb_exit(void)
+{
+	pci_unregister_driver(&asiliantfb_driver);
+}
+
+MODULE_LICENSE("GPL");
diff -Nru a/drivers/video/atafb.c b/drivers/video/atafb.c
--- a/drivers/video/atafb.c	Sun May 16 01:18:33 2004
+++ b/drivers/video/atafb.c	Sun May 16 01:18:33 2004
@@ -2819,8 +2819,6 @@
 	       fb_info.node, fb_info.modename, screen_len>>10);
 
 	/* TODO: This driver cannot be unloaded yet */
-	MOD_INC_USE_COUNT;
-
 	return 0;
 }
 
@@ -3096,14 +3094,5 @@
 int init_module(void)
 {
 	return atafb_init();
-}
-
-void cleanup_module(void)
-{
-	/* Not reached because the usecount will never
-	   be decremented to zero */
-	unregister_framebuffer(&fb_info);
-	/* atari_stram_free( screen_base ); */
-	/* TODO: further clean up ... */
 }
 #endif /* MODULE */
diff -Nru a/drivers/video/aty/radeon_accel.c b/drivers/video/aty/radeon_accel.c
--- a/drivers/video/aty/radeon_accel.c	Sun May 16 01:18:35 2004
+++ b/drivers/video/aty/radeon_accel.c	Sun May 16 01:18:35 2004
@@ -53,6 +53,18 @@
 static void radeonfb_prim_copyarea(struct radeonfb_info *rinfo, 
 				   const struct fb_copyarea *area)
 {
+	int xdir, ydir;
+	u32 sx, sy, dx, dy, w, h;
+
+	w = area->width; h = area->height;
+	dx = area->dx; dy = area->dy;
+	sx = area->sx; sy = area->sy;
+	xdir = sx - dx;
+	ydir = sy - dy;
+
+	if ( xdir < 0 ) { sx += w-1; dx += w-1; }
+	if ( ydir < 0 ) { sy += h-1; dy += h-1; }
+
 	radeon_fifo_wait(3);
 	OUTREG(DP_GUI_MASTER_CNTL,
 		rinfo->dp_gui_master_cntl /* i.e. GMC_DST_32BPP */
@@ -60,12 +72,13 @@
 		| ROP3_S 
 		| DP_SRC_RECT );
 	OUTREG(DP_WRITE_MSK, 0xffffffff);
-	OUTREG(DP_CNTL, (DST_X_LEFT_TO_RIGHT | DST_Y_TOP_TO_BOTTOM));
+	OUTREG(DP_CNTL, (xdir>=0 ? DST_X_LEFT_TO_RIGHT : 0)
+			| (ydir>=0 ? DST_Y_TOP_TO_BOTTOM : 0));
 
 	radeon_fifo_wait(3);
-	OUTREG(SRC_Y_X, (area->sy << 16) | area->sx);
-	OUTREG(DST_Y_X, (area->dy << 16) | area->dx);
-	OUTREG(DST_HEIGHT_WIDTH, (area->height << 16) | area->width);
+	OUTREG(SRC_Y_X, (sy << 16) | sx);
+	OUTREG(DST_Y_X, (dy << 16) | dx);
+	OUTREG(DST_HEIGHT_WIDTH, (h << 16) | w);
 }
 
 
diff -Nru a/drivers/video/aty/radeon_base.c b/drivers/video/aty/radeon_base.c
--- a/drivers/video/aty/radeon_base.c	Sun May 16 01:18:34 2004
+++ b/drivers/video/aty/radeon_base.c	Sun May 16 01:18:34 2004
@@ -1865,7 +1865,7 @@
 	lvds_gen_cntl |= (LVDS_BL_MOD_EN | LVDS_BLON);
 	if (on && (level > BACKLIGHT_OFF)) {
 		lvds_gen_cntl |= LVDS_DIGON;
-		if (!lvds_gen_cntl & LVDS_ON) {
+		if (!(lvds_gen_cntl & LVDS_ON)) {
 			lvds_gen_cntl &= ~LVDS_BLON;
 			OUTREG(LVDS_GEN_CNTL, lvds_gen_cntl);
 			(void)INREG(LVDS_GEN_CNTL);
@@ -2204,6 +2204,7 @@
 			rinfo->mapped_vram /= 2;
 			continue;
 		}
+		memset_io(rinfo->fb_base, 0, rinfo->mapped_vram);
 		break;
 	}
 
diff -Nru a/drivers/video/aty/radeonfb.h b/drivers/video/aty/radeonfb.h
--- a/drivers/video/aty/radeonfb.h	Sun May 16 01:18:34 2004
+++ b/drivers/video/aty/radeonfb.h	Sun May 16 01:18:34 2004
@@ -223,8 +223,6 @@
 
        	/* Palette */
 	int		palette_valid;
-	u32		palette[256];
-	u32		palette2[256];
 };
 
 struct panel_info {
diff -Nru a/drivers/video/console/Makefile b/drivers/video/console/Makefile
--- a/drivers/video/console/Makefile	Sun May 16 01:18:35 2004
+++ b/drivers/video/console/Makefile	Sun May 16 01:18:35 2004
@@ -19,7 +19,7 @@
 # Each configuration option enables a list of files.
 
 obj-$(CONFIG_DUMMY_CONSOLE)       += dummycon.o
-obj-$(CONFIG_SGI_NEWPORT_CONSOLE) += newport_con.o
+obj-$(CONFIG_SGI_NEWPORT_CONSOLE) += newport_con.o font.o
 obj-$(CONFIG_PROM_CONSOLE)        += promcon.o promcon_tbl.o
 obj-$(CONFIG_STI_CONSOLE)         += sticon.o sticore.o
 obj-$(CONFIG_VGA_CONSOLE)         += vgacon.o
diff -Nru a/drivers/video/console/dummycon.c b/drivers/video/console/dummycon.c
--- a/drivers/video/console/dummycon.c	Sun May 16 01:18:36 2004
+++ b/drivers/video/console/dummycon.c	Sun May 16 01:18:36 2004
@@ -11,6 +11,7 @@
 #include <linux/console.h>
 #include <linux/vt_kern.h>
 #include <linux/init.h>
+#include <linux/module.h>
 
 /*
  *  Dummy console driver
@@ -58,6 +59,7 @@
  */
 
 const struct consw dummy_con = {
+    .owner =		THIS_MODULE,
     .con_startup =	dummycon_startup,
     .con_init =		dummycon_init,
     .con_deinit =	DUMMY,
diff -Nru a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c
--- a/drivers/video/console/fbcon.c	Sun May 16 01:18:35 2004
+++ b/drivers/video/console/fbcon.c	Sun May 16 01:18:35 2004
@@ -304,8 +304,7 @@
 		return -ENODEV;
 	con2fb_map[unit] = newidx;
 	fbcon_is_default = (vc->vc_sw == &fb_con) ? 1 : 0;
-	take_over_console(&fb_con, unit, unit, fbcon_is_default);
-	return 0;
+	return take_over_console(&fb_con, unit, unit, fbcon_is_default);
 }
 
 /*
@@ -609,6 +608,7 @@
 		fb_display[unit].scrollmode = SCROLL_YNOMOVE;
 	else
 		fb_display[unit].scrollmode = SCROLL_YREDRAW;
+	con_set_default_unimap(unit);
 	fbcon_set_display(vc, init, !init);
 }
 
@@ -749,14 +749,6 @@
 		vc->vc_cols = nr_cols;
 		vc->vc_rows = nr_rows;
 	}
-	p->vrows = info->var.yres_virtual / vc->vc_font.height;
-	if(info->var.yres > (vc->vc_font.height * (vc->vc_rows + 1))) {
-		p->vrows -= (info->var.yres - (vc->vc_font.height * vc->vc_rows)) / vc->vc_font.height;
-	}
-	if ((info->var.yres % vc->vc_font.height) &&
-	    (info->var.yres_virtual % vc->vc_font.height <
-	     info->var.yres % vc->vc_font.height))
-		p->vrows--;
 	vc->vc_can_do_color = info->var.bits_per_pixel != 1;
 	vc->vc_complement_mask = vc->vc_can_do_color ? 0x7700 : 0x0800;
 	if (charcnt == 256) {
@@ -767,7 +759,7 @@
 			vc->vc_complement_mask <<= 1;
 	}
 
-	if (!init) {
+	if (logo) {
 		if (vc->vc_cols != nr_cols || vc->vc_rows != nr_rows)
 			vc_resize(vc->vc_num, nr_cols, nr_rows);
 		else if (CON_IS_VISIBLE(vc) &&
@@ -784,9 +776,6 @@
 			vc->vc_pos += logo_lines * vc->vc_size_row;
 			kfree(save);
 		}
-	}
-
-	if (logo) {
 		if (logo_lines > vc->vc_bottom) {
 			logo_shown = -1;
 			printk(KERN_INFO
@@ -1570,6 +1559,8 @@
 	p->vrows = var.yres_virtual/fh;
 	if (var.yres > (fh * (height + 1)))
 		p->vrows -= (var.yres - (fh * height)) / fh;
+	if ((var.yres % fh) && (var.yres_virtual % fh < var.yres % fh))
+		p->vrows--;
 	return 0;
 }
 
@@ -1839,15 +1830,6 @@
 	if (resize) {
 		/* reset wrap/pan */
 		info->var.xoffset = info->var.yoffset = p->yscroll = 0;
-		p->vrows = info->var.yres_virtual / h;
-
-#if 0          /* INCOMPLETE - let the console gurus handle this */
-		if(info->var.yres > (h * (vc->vc_rows + 1))
-			p->vrows -= (info->var.yres - (h * vc->vc_rows)) / h;
-#endif
-		if ((info->var.yres % h)
-		    && (info->var.yres_virtual % h < info->var.yres % h))
-			p->vrows--;
 		updatescrollmode(p, vc);
 		vc_resize(vc->vc_num, info->var.xres / w, info->var.yres / h);
 		if (CON_IS_VISIBLE(vc) && softback_buf) {
@@ -2257,6 +2239,7 @@
  */
 
 const struct consw fb_con = {
+	.owner			= THIS_MODULE,
 	.con_startup 		= fbcon_startup,
 	.con_init 		= fbcon_init,
 	.con_deinit 		= fbcon_deinit,
@@ -2286,10 +2269,16 @@
 
 int __init fb_console_init(void)
 {
+	int err;
+
 	if (!num_registered_fb)
 		return -ENODEV;
 
-	take_over_console(&fb_con, first_fb_vc, last_fb_vc, fbcon_is_default);
+	err = take_over_console(&fb_con, first_fb_vc, last_fb_vc,
+				fbcon_is_default);
+	if (err)
+		return err;
+
 	acquire_console_sem();
 	if (!fbcon_event_notifier_registered) {
 		fb_register_client(&fbcon_event_notifer);
diff -Nru a/drivers/video/console/mdacon.c b/drivers/video/console/mdacon.c
--- a/drivers/video/console/mdacon.c	Sun May 16 01:18:35 2004
+++ b/drivers/video/console/mdacon.c	Sun May 16 01:18:35 2004
@@ -370,8 +370,6 @@
 
 	if (mda_display_fg == NULL)
 		mda_display_fg = c;
-
-	MOD_INC_USE_COUNT;
 }
 
 static void mdacon_deinit(struct vc_data *c)
@@ -380,8 +378,6 @@
 
 	if (mda_display_fg == c)
 		mda_display_fg = NULL;
-
-	MOD_DEC_USE_COUNT;
 }
 
 static inline u16 mda_convert_attr(u16 ch)
@@ -586,6 +582,7 @@
  */
 
 const struct consw mda_con = {
+	.owner =		THIS_MODULE,
 	.con_startup =		mdacon_startup,
 	.con_init =		mdacon_init,
 	.con_deinit =		mdacon_deinit,
@@ -609,8 +606,7 @@
 	if (mda_first_vc > mda_last_vc)
 		return 1;
 
-	take_over_console(&mda_con, mda_first_vc-1, mda_last_vc-1, 0);
-	return 0;
+	return take_over_console(&mda_con, mda_first_vc-1, mda_last_vc-1, 0);
 }
 
 void __exit mda_console_exit(void)
diff -Nru a/drivers/video/console/newport_con.c b/drivers/video/console/newport_con.c
--- a/drivers/video/console/newport_con.c	Sun May 16 01:18:36 2004
+++ b/drivers/video/console/newport_con.c	Sun May 16 01:18:36 2004
@@ -32,6 +32,7 @@
 
 
 extern struct font_desc font_vga_8x16;
+extern unsigned long sgi_gfxaddr;
 
 #define FONT_DATA ((unsigned char *)font_vga_8x16.data)
 
@@ -43,7 +44,7 @@
 
 static unsigned char *font_data[MAX_NR_CONSOLES];
 
-extern struct newport_regs *npregs;
+static struct newport_regs *npregs;
 
 static int logo_active;
 static int topscan;
@@ -51,6 +52,8 @@
 static int newport_xsize;
 static int newport_ysize;
 
+static int newport_set_def_font(int unit, struct console_font_op *op);
+
 #define BMASK(c) (c << 24)
 
 #define RENDER(regs, cp) do { \
@@ -95,11 +98,33 @@
 	}
 }
 
+static void newport_show_logo(void)
+{
 #ifdef CONFIG_LOGO_SGI_CLUT224
-static void newport_show_logo(void);
-#else
-#define newport_show_logo()	do { } while (0)
-#endif
+	const struct linux_logo *logo = fb_find_logo(8);
+	const unsigned char *clut = logo->clut;
+	const unsigned char *data = logo->data;
+	unsigned long i;
+
+	for (i = 0; i < logo->clutsize; i++) {
+		newport_bfwait();
+		newport_cmap_setaddr(npregs, i + 0x20);
+		newport_cmap_setrgb(npregs, clut[0], clut[1], clut[2]);
+		clut += 3;
+	}
+
+	newport_wait();
+	npregs->set.drawmode0 = (NPORT_DMODE0_DRAW | NPORT_DMODE0_BLOCK |
+				 NPORT_DMODE0_CHOST);
+
+	npregs->set.xystarti = ((newport_xsize - logo->width) << 16) | (0);
+	npregs->set.xyendi = ((newport_xsize - 1) << 16);
+	newport_wait();
+
+	for (i = 0; i < logo->width*logo->height; i++)
+		npregs->go.hostrw0 = *data++ << 24;
+#endif /* CONFIG_LOGO_SGI_CLUT224 */
+}
 
 static inline void newport_clear_screen(int xstart, int ystart, int xend,
 					int yend, int ci)
@@ -258,26 +283,22 @@
 		xcurs_correction = 21;
 }
 
-#ifdef MODULE
+/* Can't be __init, take_over_console may call it later */
 static const char *newport_startup(void)
-#else
-static const char *__init newport_startup(void)
-#endif
 {
 	int i;
-	struct newport_regs *p;
-
-	npregs = (struct newport_regs *) (KSEG1 + 0x1f0f0000);
 
-	p = npregs;
-	p->cset.config = NPORT_CFG_GD0;
+	if (!sgi_gfxaddr)
+		return NULL;
+	npregs = (struct newport_regs *) (KSEG1 + sgi_gfxaddr);
+	npregs->cset.config = NPORT_CFG_GD0;
 
 	if (newport_wait()) {
 		return NULL;
 	}
 
-	p->set.xstarti = TESTVAL;
-	if (p->set._xstart.word != XSTI_TO_FXSTART(TESTVAL))
+	npregs->set.xstarti = TESTVAL;
+	if (npregs->set._xstart.word != XSTI_TO_FXSTART(TESTVAL))
 		return NULL;
 
 	for (i = 0; i < MAX_NR_CONSOLES; i++)
@@ -287,8 +308,6 @@
 	newport_get_revisions();
 	newport_get_screensize();
 
-	/* gfx_init (display_desc); */
-
 	return "SGI Newport";
 }
 
@@ -299,6 +318,15 @@
 	vc->vc_can_do_color = 1;
 }
 
+static void newport_deinit(struct vc_data *c)
+{
+	int i;
+
+	/* free memory used by user font */
+	for (i = 0; i < MAX_NR_CONSOLES; i++)
+		newport_set_def_font(i, NULL);
+}
+
 static void newport_clear(struct vc_data *vc, int sy, int sx, int height,
 			  int width)
 {
@@ -677,9 +705,10 @@
 #define DUMMY (void *) newport_dummy
 
 const struct consw newport_con = {
+    .owner =		THIS_MODULE,
     .con_startup =	newport_startup,
     .con_init =		newport_init,
-    .con_deinit =	DUMMY,
+    .con_deinit =	newport_deinit,
     .con_clear =	newport_clear,
     .con_putc =		newport_putc,
     .con_putcs =	newport_putcs,
@@ -696,63 +725,18 @@
 };
 
 #ifdef MODULE
-MODULE_LICENSE("GPL");
-
-int init_module(void)
+static int __init newport_console_init(void)
 {
-	if (!newport_startup())
-		printk("Error loading SGI Newport Console driver\n");
-	else
-		printk("Loading SGI Newport Console Driver\n");
-	take_over_console(&newport_con, 0, MAX_NR_CONSOLES - 1, 1);
-
-	return 0;
+	return take_over_console(&newport_con, 0, MAX_NR_CONSOLES - 1, 1);
 }
 
-int cleanup_module(void)
+static void __exit newport_console_exit(void)
 {
-	int i;
-
-	printk("Unloading SGI Newport Console Driver\n");
-	/* free memory used by user font */
-	for (i = 0; i < MAX_NR_CONSOLES; i++)
-		newport_set_def_font(i, NULL);
-
-	return 0;
+	give_up_console(&newport_con);
 }
-#endif
-
 
-#ifdef CONFIG_LOGO_SGI_CLUT224
-
-#undef __initdata
-#define __initdata
-#include "../logo/logo_sgi_clut224.c"
-
-static void newport_show_logo(void)
-{
-	const struct linux_logo *logo = &logo_sgi_clut224;
-	const unsigned char *clut = logo->clut;
-	const unsigned char *data = logo->data;
-	unsigned long i;
-
-	for (i = 0; i < logo->clutsize; i++) {
-		newport_bfwait();
-		newport_cmap_setaddr(npregs, i + 0x20);
-		newport_cmap_setrgb(npregs, clut[0], clut[1], clut[2]);
-		clut += 3;
-	}
-
-	newport_wait();
-	npregs->set.drawmode0 = (NPORT_DMODE0_DRAW | NPORT_DMODE0_BLOCK |
-				 NPORT_DMODE0_CHOST);
-
-	npregs->set.xystarti = ((newport_xsize - logo->width) << 16) | (0);
-	npregs->set.xyendi = ((newport_xsize - 1) << 16);
-	newport_wait();
-
-	for (i = 0; i < logo->width*logo->height; i++)
-		npregs->go.hostrw0 = *data++ << 24;
-}
-#endif /* CONFIG_LOGO_SGI_CLUT224 */
+module_init(newport_console_init);
+module_exit(newport_console_exit);
+#endif
 
+MODULE_LICENSE("GPL");
diff -Nru a/drivers/video/console/promcon.c b/drivers/video/console/promcon.c
--- a/drivers/video/console/promcon.c	Sun May 16 01:18:35 2004
+++ b/drivers/video/console/promcon.c	Sun May 16 01:18:35 2004
@@ -574,6 +574,7 @@
 #define DUMMY (void *) promcon_dummy
 
 const struct consw prom_con = {
+	.owner =		THIS_MODULE,
 	.con_startup =		promcon_startup,
 	.con_init =		promcon_init,
 	.con_deinit =		promcon_deinit,
diff -Nru a/drivers/video/console/sticon.c b/drivers/video/console/sticon.c
--- a/drivers/video/console/sticon.c	Sun May 16 01:18:36 2004
+++ b/drivers/video/console/sticon.c	Sun May 16 01:18:36 2004
@@ -354,6 +354,7 @@
 }
 
 static struct consw sti_con = {
+	.owner			= THIS_MODULE,
 	.con_startup		= sticon_startup,
 	.con_init		= sticon_init,
 	.con_deinit		= sticon_deinit,
@@ -390,7 +391,7 @@
 
     if (conswitchp == &dummy_con) {
 	printk(KERN_INFO "sticon: Initializing STI text console.\n");
-	take_over_console(&sti_con, 0, MAX_NR_CONSOLES - 1, 1);
+	return take_over_console(&sti_con, 0, MAX_NR_CONSOLES - 1, 1);
     }
     return 0;
 }
diff -Nru a/drivers/video/console/vgacon.c b/drivers/video/console/vgacon.c
--- a/drivers/video/console/vgacon.c	Sun May 16 01:18:34 2004
+++ b/drivers/video/console/vgacon.c	Sun May 16 01:18:34 2004
@@ -1065,6 +1065,7 @@
 #define DUMMY (void *) vgacon_dummy
 
 const struct consw vga_con = {
+	.owner = THIS_MODULE,
 	.con_startup = vgacon_startup,
 	.con_init = vgacon_init,
 	.con_deinit = vgacon_deinit,
diff -Nru a/drivers/video/cyberfb.c b/drivers/video/cyberfb.c
--- a/drivers/video/cyberfb.c	Sun May 16 01:18:33 2004
+++ b/drivers/video/cyberfb.c	Sun May 16 01:18:33 2004
@@ -1065,7 +1065,6 @@
 		   fb_info.node, fb_info.modename, CyberSize>>10);
 
 	    /* TODO: This driver cannot be unloaded yet */
-	    MOD_INC_USE_COUNT;
 	    DPRINTK("EXIT\n");
 	    return 0;
 	}
@@ -1205,14 +1204,6 @@
 int init_module(void)
 {
 	return cyberfb_init();
-}
-
-void cleanup_module(void)
-{
-	/* Not reached because the usecount will never be
-	   decremented to zero */
-	unregister_framebuffer(&fb_info);
-	/* TODO: clean up ... */
 }
 #endif /* MODULE */
 
diff -Nru a/drivers/video/fbmem.c b/drivers/video/fbmem.c
--- a/drivers/video/fbmem.c	Sun May 16 01:18:33 2004
+++ b/drivers/video/fbmem.c	Sun May 16 01:18:33 2004
@@ -114,6 +114,8 @@
 extern int chips_init(void);
 extern int g364fb_init(void);
 extern int sa1100fb_init(void);
+extern int pxafb_init(void);
+extern int pxafb_setup(char*);
 extern int fm2fb_init(void);
 extern int fm2fb_setup(char*);
 extern int q40fb_init(void);
@@ -121,6 +123,8 @@
 extern int sun3fb_setup(char *);
 extern int sgivwfb_init(void);
 extern int sgivwfb_setup(char*);
+extern int gbefb_init(void);
+extern int gbefb_setup(char*);
 extern int rivafb_init(void);
 extern int rivafb_setup(char*);
 extern int tdfxfb_init(void);
@@ -307,6 +311,9 @@
 #ifdef CONFIG_FB_SGIVW
 	{ "sgivwfb", sgivwfb_init, sgivwfb_setup },
 #endif
+#ifdef CONFIG_FB_GBE
+	{ "gbefb", gbefb_init, gbefb_setup },
+#endif
 #ifdef CONFIG_FB_ACORN
 	{ "acornfb", acornfb_init, acornfb_setup },
 #endif
@@ -340,6 +347,9 @@
 #ifdef CONFIG_FB_SA1100
 	{ "sa1100fb", sa1100fb_init, NULL },
 #endif
+#ifdef CONFIG_FB_PXA
+	{ "pxafb", pxafb_init, pxafb_setup },
+#endif
 #ifdef CONFIG_FB_SUN3
 	{ "sun3fb", sun3fb_init, sun3fb_setup },
 #endif
@@ -1013,7 +1023,7 @@
 	struct fb_con2fbmap con2fb;
 #endif
 	struct fb_cmap cmap;
-	int i, rc;
+	int i;
 	
 	if (!fb)
 		return -ENODEV;
@@ -1055,9 +1065,9 @@
 		return 0;
 	case FBIO_CURSOR:
 		acquire_console_sem();
-		rc = fb_cursor(info, (struct fb_cursor *) arg);
+		i = fb_cursor(info, (struct fb_cursor *) arg);
 		release_console_sem();
-		return rc;
+		return i;
 #ifdef CONFIG_FRAMEBUFFER_CONSOLE
 	case FBIOGET_CON2FBMAP:
 		if (copy_from_user(&con2fb, (void *)arg, sizeof(con2fb)))
@@ -1178,8 +1188,7 @@
 	if (boot_cpu_data.x86 > 3)
 		pgprot_val(vma->vm_page_prot) |= _PAGE_PCD;
 #elif defined(__mips__)
-	pgprot_val(vma->vm_page_prot) &= ~_CACHE_MASK;
-	pgprot_val(vma->vm_page_prot) |= _CACHE_UNCACHED;
+	vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
 #elif defined(__hppa__)
 	pgprot_val(vma->vm_page_prot) |= _PAGE_NO_CACHE;
 #elif defined(__ia64__) || defined(__arm__) || defined(__sh__)
@@ -1286,6 +1295,7 @@
 			fb_info->pixmap.size = FBPIXMAPSIZE;
 			fb_info->pixmap.buf_align = 1;
 			fb_info->pixmap.scan_align = 1;
+			fb_info->pixmap.access_align = 4;
 			fb_info->pixmap.flags = FB_PIXMAP_DEFAULT;
 		}
 	}	
@@ -1301,6 +1311,7 @@
 			fb_info->sprite.size = FBPIXMAPSIZE;
 			fb_info->sprite.buf_align = 1;
 			fb_info->sprite.scan_align = 1;
+			fb_info->sprite.access_align = 4;
 			fb_info->sprite.flags = FB_PIXMAP_DEFAULT;
 		}
 	}
diff -Nru a/drivers/video/gbefb.c b/drivers/video/gbefb.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/drivers/video/gbefb.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,1200 @@
+/*
+ *  SGI GBE frame buffer driver
+ *
+ *  Copyright (C) 1999 Silicon Graphics, Inc. - Jeffrey Newquist
+ *  Copyright (C) 2002 Vivien Chappelier <vivien.chappelier@linux-mips.org>
+ *
+ *  This file is subject to the terms and conditions of the GNU General Public
+ *  License. See the file COPYING in the main directory of this archive for
+ *  more details.
+ */
+
+#include <linux/config.h>
+#include <linux/delay.h>
+#include <linux/device.h>
+#include <linux/dma-mapping.h>
+#include <linux/errno.h>
+#include <linux/fb.h>
+#include <linux/init.h>
+#include <linux/interrupt.h>
+#include <linux/kernel.h>
+#include <linux/mm.h>
+#include <linux/module.h>
+
+#ifdef CONFIG_X86
+#include <asm/mtrr.h>
+#endif
+#ifdef CONFIG_MIPS
+#include <asm/addrspace.h>
+#endif
+#include <asm/byteorder.h>
+#include <asm/io.h>
+#include <asm/tlbflush.h>
+
+#include <video/gbe.h>
+
+static struct sgi_gbe *gbe;
+
+struct gbefb_par {
+	struct fb_var_screeninfo var;
+	struct gbe_timing_info timing;
+	int valid;
+};
+
+#ifdef CONFIG_SGI_IP32
+#define GBE_BASE	0x16000000 /* SGI O2 */
+#endif
+
+#ifdef CONFIG_X86_VISWS
+#define GBE_BASE	0xd0000000 /* SGI Visual Workstation */
+#endif
+
+/* macro for fastest write-though access to the framebuffer */
+#ifdef CONFIG_MIPS
+#ifdef CONFIG_CPU_R10000
+#define pgprot_fb(_prot) (((_prot) & (~_CACHE_MASK)) | _CACHE_UNCACHED_ACCELERATED)
+#else
+#define pgprot_fb(_prot) (((_prot) & (~_CACHE_MASK)) | _CACHE_CACHABLE_NO_WA)
+#endif
+#endif
+#ifdef CONFIG_X86
+#define pgprot_fb(_prot) ((_prot) | _PAGE_PCD)
+#endif
+
+/*
+ *  RAM we reserve for the frame buffer. This defines the maximum screen
+ *  size
+ */
+#if CONFIG_FB_GBE_MEM > 8
+#error GBE Framebuffer cannot use more than 8MB of memory
+#endif
+
+#define TILE_SHIFT 16
+#define TILE_SIZE (1 << TILE_SHIFT)
+#define TILE_MASK (TILE_SIZE - 1)
+
+static unsigned int gbe_mem_size = CONFIG_FB_GBE_MEM * 1024*1024;
+static void *gbe_mem;
+static dma_addr_t gbe_dma_addr;
+unsigned long gbe_mem_phys;
+
+static struct {
+	uint16_t *cpu;
+	dma_addr_t dma;
+} gbe_tiles;
+
+static int gbe_revision;
+
+static struct fb_info fb_info;
+static int ypan, ywrap;
+
+static uint32_t pseudo_palette[256];
+
+static char *mode_option __initdata = NULL;
+
+/* default CRT mode */
+static struct fb_var_screeninfo default_var_CRT __initdata = {
+	/* 640x480, 60 Hz, Non-Interlaced (25.175 MHz dotclock) */
+	.xres		= 640,
+	.yres		= 480,
+	.xres_virtual	= 640,
+	.yres_virtual	= 480,
+	.xoffset	= 0,
+	.yoffset	= 0,
+	.bits_per_pixel	= 8,
+	.grayscale	= 0,
+	.red		= { 0, 8, 0 },
+	.green		= { 0, 8, 0 },
+	.blue		= { 0, 8, 0 },
+	.transp		= { 0, 0, 0 },
+	.nonstd		= 0,
+	.activate	= 0,
+	.height		= -1,
+	.width		= -1,
+	.accel_flags	= 0,
+	.pixclock	= 39722,	/* picoseconds */
+	.left_margin	= 48,
+	.right_margin	= 16,
+	.upper_margin	= 33,
+	.lower_margin	= 10,
+	.hsync_len	= 96,
+	.vsync_len	= 2,
+	.sync		= 0,
+	.vmode		= FB_VMODE_NONINTERLACED,
+};
+
+/* default LCD mode */
+static struct fb_var_screeninfo default_var_LCD __initdata = {
+	/* 1600x1024, 8 bpp */
+	.xres		= 1600,
+	.yres		= 1024,
+	.xres_virtual	= 1600,
+	.yres_virtual	= 1024,
+	.xoffset	= 0,
+	.yoffset	= 0,
+	.bits_per_pixel	= 8,
+	.grayscale	= 0,
+	.red		= { 0, 8, 0 },
+	.green		= { 0, 8, 0 },
+	.blue		= { 0, 8, 0 },
+	.transp		= { 0, 0, 0 },
+	.nonstd		= 0,
+	.activate	= 0,
+	.height		= -1,
+	.width		= -1,
+	.accel_flags	= 0,
+	.pixclock	= 9353,
+	.left_margin	= 20,
+	.right_margin	= 30,
+	.upper_margin	= 37,
+	.lower_margin	= 3,
+	.hsync_len	= 20,
+	.vsync_len	= 3,
+	.sync		= 0,
+	.vmode		= FB_VMODE_NONINTERLACED
+};
+
+/* default modedb mode */
+/* 640x480, 60 Hz, Non-Interlaced (25.172 MHz dotclock) */
+static struct fb_videomode default_mode_CRT __initdata = {
+	.refresh	= 60,
+	.xres		= 640,
+	.yres		= 480,
+	.pixclock	= 39722,
+	.left_margin	= 48,
+	.right_margin	= 16,
+	.upper_margin	= 33,
+	.lower_margin	= 10,
+	.hsync_len	= 96,
+	.vsync_len	= 2,
+	.sync		= 0,
+	.vmode		= FB_VMODE_NONINTERLACED,
+};
+/* 1600x1024 SGI flatpanel 1600sw */
+static struct fb_videomode default_mode_LCD __initdata = {
+	/* 1600x1024, 8 bpp */
+	.xres		= 1600,
+	.yres		= 1024,
+	.pixclock	= 9353,
+	.left_margin	= 20,
+	.right_margin	= 30,
+	.upper_margin	= 37,
+	.lower_margin	= 3,
+	.hsync_len	= 20,
+	.vsync_len	= 3,
+	.vmode		= FB_VMODE_NONINTERLACED,
+};
+
+struct fb_videomode *default_mode = &default_mode_CRT;
+struct fb_var_screeninfo *default_var = &default_var_CRT;
+
+static int flat_panel_enabled = 0;
+
+static struct gbefb_par par_current;
+
+static void gbe_reset(void)
+{
+	/* Turn on dotclock PLL */
+	gbe->ctrlstat = 0x300aa000;
+}
+
+
+/*
+ * Function:	gbe_turn_off
+ * Parameters:	(None)
+ * Description:	This should turn off the monitor and gbe.  This is used
+ *              when switching between the serial console and the graphics
+ *              console.
+ */
+
+void gbe_turn_off(void)
+{
+	int i;
+	unsigned int val, x, y, vpixen_off;
+
+	/* check if pixel counter is on */
+	val = gbe->vt_xy;
+	if (GET_GBE_FIELD(VT_XY, FREEZE, val) == 1)
+		return;
+
+	/* turn off DMA */
+	val = gbe->ovr_control;
+	SET_GBE_FIELD(OVR_CONTROL, OVR_DMA_ENABLE, val, 0);
+	gbe->ovr_control = val;
+	udelay(1000);
+	val = gbe->frm_control;
+	SET_GBE_FIELD(FRM_CONTROL, FRM_DMA_ENABLE, val, 0);
+	gbe->frm_control = val;
+	udelay(1000);
+	val = gbe->did_control;
+	SET_GBE_FIELD(DID_CONTROL, DID_DMA_ENABLE, val, 0);
+	gbe->did_control = val;
+	udelay(1000);
+
+	/* We have to wait through two vertical retrace periods before
+	 * the pixel DMA is turned off for sure. */
+	for (i = 0; i < 10000; i++) {
+		val = gbe->frm_inhwctrl;
+		if (GET_GBE_FIELD(FRM_INHWCTRL, FRM_DMA_ENABLE, val)) {
+			udelay(10);
+		} else {
+			val = gbe->ovr_inhwctrl;
+			if (GET_GBE_FIELD(OVR_INHWCTRL, OVR_DMA_ENABLE, val)) {
+				udelay(10);
+			} else {
+				val = gbe->did_inhwctrl;
+				if (GET_GBE_FIELD(DID_INHWCTRL, DID_DMA_ENABLE, val)) {
+					udelay(10);
+				} else
+					break;
+			}
+		}
+	}
+	if (i == 10000)
+		printk(KERN_ERR "gbefb: turn off DMA timed out\n");
+
+	/* wait for vpixen_off */
+	val = gbe->vt_vpixen;
+	vpixen_off = GET_GBE_FIELD(VT_VPIXEN, VPIXEN_OFF, val);
+
+	for (i = 0; i < 100000; i++) {
+		val = gbe->vt_xy;
+		x = GET_GBE_FIELD(VT_XY, X, val);
+		y = GET_GBE_FIELD(VT_XY, Y, val);
+		if (y < vpixen_off)
+			break;
+		udelay(1);
+	}
+	if (i == 100000)
+		printk(KERN_ERR
+		       "gbefb: wait for vpixen_off timed out\n");
+	for (i = 0; i < 10000; i++) {
+		val = gbe->vt_xy;
+		x = GET_GBE_FIELD(VT_XY, X, val);
+		y = GET_GBE_FIELD(VT_XY, Y, val);
+		if (y > vpixen_off)
+			break;
+		udelay(1);
+	}
+	if (i == 10000)
+		printk(KERN_ERR "gbefb: wait for vpixen_off timed out\n");
+
+	/* turn off pixel counter */
+	val = 0;
+	SET_GBE_FIELD(VT_XY, FREEZE, val, 1);
+	gbe->vt_xy = val;
+	udelay(10000);
+	for (i = 0; i < 10000; i++) {
+		val = gbe->vt_xy;
+		if (GET_GBE_FIELD(VT_XY, FREEZE, val) != 1)
+			udelay(10);
+		else
+			break;
+	}
+	if (i == 10000)
+		printk(KERN_ERR "gbefb: turn off pixel clock timed out\n");
+
+	/* turn off dot clock */
+	val = gbe->dotclock;
+	SET_GBE_FIELD(DOTCLK, RUN, val, 0);
+	gbe->dotclock = val;
+	udelay(10000);
+	for (i = 0; i < 10000; i++) {
+		val = gbe->dotclock;
+		if (GET_GBE_FIELD(DOTCLK, RUN, val))
+			udelay(10);
+		else
+			break;
+	}
+	if (i == 10000)
+		printk(KERN_ERR "gbefb: turn off dotclock timed out\n");
+
+	/* reset the frame DMA FIFO */
+	val = gbe->frm_size_tile;
+	SET_GBE_FIELD(FRM_SIZE_TILE, FRM_FIFO_RESET, val, 1);
+	gbe->frm_size_tile = val;
+	SET_GBE_FIELD(FRM_SIZE_TILE, FRM_FIFO_RESET, val, 0);
+	gbe->frm_size_tile = val;
+}
+
+static void gbe_turn_on(void)
+{
+	unsigned int val, i;
+
+	/*
+	 * Check if pixel counter is off, for unknown reason this
+	 * code hangs Visual Workstations
+	 */
+	if (gbe_revision < 2) {
+		val = gbe->vt_xy;
+		if (GET_GBE_FIELD(VT_XY, FREEZE, val) == 0)
+			return;
+	}
+
+	/* turn on dot clock */
+	val = gbe->dotclock;
+	SET_GBE_FIELD(DOTCLK, RUN, val, 1);
+	gbe->dotclock = val;
+	udelay(10000);
+	for (i = 0; i < 10000; i++) {
+		val = gbe->dotclock;
+		if (GET_GBE_FIELD(DOTCLK, RUN, val) != 1)
+			udelay(10);
+		else
+			break;
+	}
+	if (i == 10000)
+		printk(KERN_ERR "gbefb: turn on dotclock timed out\n");
+
+	/* turn on pixel counter */
+	val = 0;
+	SET_GBE_FIELD(VT_XY, FREEZE, val, 0);
+	gbe->vt_xy = val;
+	udelay(10000);
+	for (i = 0; i < 10000; i++) {
+		val = gbe->vt_xy;
+		if (GET_GBE_FIELD(VT_XY, FREEZE, val))
+			udelay(10);
+		else
+			break;
+	}
+	if (i == 10000)
+		printk(KERN_ERR "gbefb: turn on pixel clock timed out\n");
+
+	/* turn on DMA */
+	val = gbe->frm_control;
+	SET_GBE_FIELD(FRM_CONTROL, FRM_DMA_ENABLE, val, 1);
+	gbe->frm_control = val;
+	udelay(1000);
+	for (i = 0; i < 10000; i++) {
+		val = gbe->frm_inhwctrl;
+		if (GET_GBE_FIELD(FRM_INHWCTRL, FRM_DMA_ENABLE, val) != 1)
+			udelay(10);
+		else
+			break;
+	}
+	if (i == 10000)
+		printk(KERN_ERR "gbefb: turn on DMA timed out\n");
+}
+
+/*
+ *  Blank the display.
+ */
+static int gbefb_blank(int blank, struct fb_info *info)
+{
+	/* 0 unblank, 1 blank, 2 no vsync, 3 no hsync, 4 off */
+	switch (blank) {
+	case 0:		/* unblank */
+		gbe_turn_on();
+		break;
+
+	case 1:		/* blank */
+		gbe_turn_off();
+		break;
+
+	default:
+		/* Nothing */
+		break;
+	}
+	return 0;
+}
+
+/*
+ *  Setup flatpanel related registers.
+ */
+static void gbefb_setup_flatpanel(struct gbe_timing_info *timing)
+{
+	int fp_wid, fp_hgt, fp_vbs, fp_vbe;
+	u32 outputVal = 0;
+
+	SET_GBE_FIELD(VT_FLAGS, HDRV_INVERT, outputVal,
+		(timing->flags & FB_SYNC_HOR_HIGH_ACT) ? 0 : 1);
+	SET_GBE_FIELD(VT_FLAGS, VDRV_INVERT, outputVal,
+		(timing->flags & FB_SYNC_VERT_HIGH_ACT) ? 0 : 1);
+	gbe->vt_flags = outputVal;
+
+	/* Turn on the flat panel */
+	fp_wid = 1600;
+	fp_hgt = 1024;
+	fp_vbs = 0;
+	fp_vbe = 1600;
+	timing->pll_m = 4;
+	timing->pll_n = 1;
+	timing->pll_p = 0;
+
+	outputVal = 0;
+	SET_GBE_FIELD(FP_DE, ON, outputVal, fp_vbs);
+	SET_GBE_FIELD(FP_DE, OFF, outputVal, fp_vbe);
+	gbe->fp_de = outputVal;
+	outputVal = 0;
+	SET_GBE_FIELD(FP_HDRV, OFF, outputVal, fp_wid);
+	gbe->fp_hdrv = outputVal;
+	outputVal = 0;
+	SET_GBE_FIELD(FP_VDRV, ON, outputVal, 1);
+	SET_GBE_FIELD(FP_VDRV, OFF, outputVal, fp_hgt + 1);
+	gbe->fp_vdrv = outputVal;
+}
+
+struct gbe_pll_info {
+	int clock_rate;
+	int fvco_min;
+	int fvco_max;
+};
+
+static struct gbe_pll_info gbe_pll_table[2] = {
+	{ 20, 80, 220 },
+	{ 27, 80, 220 },
+};
+
+static int compute_gbe_timing(struct fb_var_screeninfo *var,
+			      struct gbe_timing_info *timing)
+{
+	int pll_m, pll_n, pll_p, error, best_m, best_n, best_p, best_error;
+	int pixclock;
+	struct gbe_pll_info *gbe_pll;
+
+	if (gbe_revision < 2)
+		gbe_pll = &gbe_pll_table[0];
+	else
+		gbe_pll = &gbe_pll_table[1];
+
+	/* Determine valid resolution and timing
+	 * GBE crystal runs at 20Mhz or 27Mhz
+	 * pll_m, pll_n, pll_p define the following frequencies
+	 * fvco = pll_m * 20Mhz / pll_n
+	 * fout = fvco / (2**pll_p) */
+	best_error = 1000000000;
+	best_n = best_m = best_p = 0;
+	for (pll_p = 0; pll_p < 4; pll_p++)
+		for (pll_m = 1; pll_m < 256; pll_m++)
+			for (pll_n = 1; pll_n < 64; pll_n++) {
+				pixclock = (1000000 / gbe_pll->clock_rate) *
+						(pll_n << pll_p) / pll_m;
+
+				error = var->pixclock - pixclock;
+
+				if (error < 0)
+					error = -error;
+
+				if (error < best_error &&
+				    pll_m / pll_n >
+				    gbe_pll->fvco_min / gbe_pll->clock_rate &&
+ 				    pll_m / pll_n <
+				    gbe_pll->fvco_max / gbe_pll->clock_rate) {
+					best_error = error;
+					best_m = pll_m;
+					best_n = pll_n;
+					best_p = pll_p;
+				}
+			}
+
+	if (!best_n || !best_m)
+		return -EINVAL;	/* Resolution to high */
+
+	pixclock = (1000000 / gbe_pll->clock_rate) *
+		(best_n << best_p) / best_m;
+
+	/* set video timing information */
+	if (timing) {
+		timing->width = var->xres;
+		timing->height = var->yres;
+		timing->pll_m = best_m;
+		timing->pll_n = best_n;
+		timing->pll_p = best_p;
+		timing->cfreq = gbe_pll->clock_rate * 1000 * timing->pll_m /
+			(timing->pll_n << timing->pll_p);
+		timing->htotal = var->left_margin + var->xres +
+				var->right_margin + var->hsync_len;
+		timing->vtotal = var->upper_margin + var->yres +
+				var->lower_margin + var->vsync_len;
+		timing->fields_sec = 1000 * timing->cfreq / timing->htotal *
+				1000 / timing->vtotal;
+		timing->hblank_start = var->xres;
+		timing->vblank_start = var->yres;
+		timing->hblank_end = timing->htotal;
+		timing->hsync_start = var->xres + var->right_margin + 1;
+		timing->hsync_end = timing->hsync_start + var->hsync_len;
+		timing->vblank_end = timing->vtotal;
+		timing->vsync_start = var->yres + var->lower_margin + 1;
+		timing->vsync_end = timing->vsync_start + var->vsync_len;
+	}
+
+	return pixclock;
+}
+
+static void gbe_set_timing_info(struct gbe_timing_info *timing)
+{
+	int temp;
+	unsigned int val;
+
+	/* setup dot clock PLL */
+	val = 0;
+	SET_GBE_FIELD(DOTCLK, M, val, timing->pll_m - 1);
+	SET_GBE_FIELD(DOTCLK, N, val, timing->pll_n - 1);
+	SET_GBE_FIELD(DOTCLK, P, val, timing->pll_p);
+	SET_GBE_FIELD(DOTCLK, RUN, val, 0);	/* do not start yet */
+	gbe->dotclock = val;
+	udelay(10000);
+
+	/* setup pixel counter */
+	val = 0;
+	SET_GBE_FIELD(VT_XYMAX, MAXX, val, timing->htotal);
+	SET_GBE_FIELD(VT_XYMAX, MAXY, val, timing->vtotal);
+	gbe->vt_xymax = val;
+
+	/* setup video timing signals */
+	val = 0;
+	SET_GBE_FIELD(VT_VSYNC, VSYNC_ON, val, timing->vsync_start);
+	SET_GBE_FIELD(VT_VSYNC, VSYNC_OFF, val, timing->vsync_end);
+	gbe->vt_vsync = val;
+	val = 0;
+	SET_GBE_FIELD(VT_HSYNC, HSYNC_ON, val, timing->hsync_start);
+	SET_GBE_FIELD(VT_HSYNC, HSYNC_OFF, val, timing->hsync_end);
+	gbe->vt_hsync = val;
+	val = 0;
+	SET_GBE_FIELD(VT_VBLANK, VBLANK_ON, val, timing->vblank_start);
+	SET_GBE_FIELD(VT_VBLANK, VBLANK_OFF, val, timing->vblank_end);
+	gbe->vt_vblank = val;
+	val = 0;
+	SET_GBE_FIELD(VT_HBLANK, HBLANK_ON, val,
+		      timing->hblank_start - 5);
+	SET_GBE_FIELD(VT_HBLANK, HBLANK_OFF, val,
+		      timing->hblank_end - 3);
+	gbe->vt_hblank = val;
+
+	/* setup internal timing signals */
+	val = 0;
+	SET_GBE_FIELD(VT_VCMAP, VCMAP_ON, val, timing->vblank_start);
+	SET_GBE_FIELD(VT_VCMAP, VCMAP_OFF, val, timing->vblank_end);
+	gbe->vt_vcmap = val;
+	val = 0;
+	SET_GBE_FIELD(VT_HCMAP, HCMAP_ON, val, timing->hblank_start);
+	SET_GBE_FIELD(VT_HCMAP, HCMAP_OFF, val, timing->hblank_end);
+	gbe->vt_hcmap = val;
+
+	val = 0;
+	temp = timing->vblank_start - timing->vblank_end - 1;
+	if (temp > 0)
+		temp = -temp;
+
+	if (flat_panel_enabled)
+		gbefb_setup_flatpanel(timing);
+
+	SET_GBE_FIELD(DID_START_XY, DID_STARTY, val, (u32) temp);
+	if (timing->hblank_end >= 20)
+		SET_GBE_FIELD(DID_START_XY, DID_STARTX, val,
+			      timing->hblank_end - 20);
+	else
+		SET_GBE_FIELD(DID_START_XY, DID_STARTX, val,
+			      timing->htotal - (20 - timing->hblank_end));
+	gbe->did_start_xy = val;
+
+	val = 0;
+	SET_GBE_FIELD(CRS_START_XY, CRS_STARTY, val, (u32) (temp + 1));
+	if (timing->hblank_end >= GBE_CRS_MAGIC)
+		SET_GBE_FIELD(CRS_START_XY, CRS_STARTX, val,
+			      timing->hblank_end - GBE_CRS_MAGIC);
+	else
+		SET_GBE_FIELD(CRS_START_XY, CRS_STARTX, val,
+			      timing->htotal - (GBE_CRS_MAGIC -
+						timing->hblank_end));
+	gbe->crs_start_xy = val;
+
+	val = 0;
+	SET_GBE_FIELD(VC_START_XY, VC_STARTY, val, (u32) temp);
+	SET_GBE_FIELD(VC_START_XY, VC_STARTX, val, timing->hblank_end - 4);
+	gbe->vc_start_xy = val;
+
+	val = 0;
+	temp = timing->hblank_end - GBE_PIXEN_MAGIC_ON;
+	if (temp < 0)
+		temp += timing->htotal;	/* allow blank to wrap around */
+
+	SET_GBE_FIELD(VT_HPIXEN, HPIXEN_ON, val, temp);
+	SET_GBE_FIELD(VT_HPIXEN, HPIXEN_OFF, val,
+		      ((temp + timing->width -
+			GBE_PIXEN_MAGIC_OFF) % timing->htotal));
+	gbe->vt_hpixen = val;
+
+	val = 0;
+	SET_GBE_FIELD(VT_VPIXEN, VPIXEN_ON, val, timing->vblank_end);
+	SET_GBE_FIELD(VT_VPIXEN, VPIXEN_OFF, val, timing->vblank_start);
+	gbe->vt_vpixen = val;
+
+	/* turn off sync on green */
+	val = 0;
+	SET_GBE_FIELD(VT_FLAGS, SYNC_LOW, val, 1);
+	gbe->vt_flags = val;
+}
+
+/*
+ *  Set the hardware according to 'par'.
+ */
+
+static int gbefb_set_par(struct fb_info *info)
+{
+	int i;
+	unsigned int val;
+	int wholeTilesX, partTilesX, maxPixelsPerTileX;
+	int height_pix;
+	int xpmax, ypmax;	/* Monitor resolution */
+	int bytesPerPixel;	/* Bytes per pixel */
+	struct gbefb_par *par = (struct gbefb_par *) info->par;
+
+	compute_gbe_timing(&info->var, &par->timing);
+
+	bytesPerPixel = info->var.bits_per_pixel / 8;
+	info->fix.line_length = info->var.xres_virtual * bytesPerPixel;
+	xpmax = par->timing.width;
+	ypmax = par->timing.height;
+
+	/* turn off GBE */
+	gbe_turn_off();
+
+	/* set timing info */
+	gbe_set_timing_info(&par->timing);
+
+	/* initialize DIDs */
+	val = 0;
+	switch (bytesPerPixel) {
+	case 1:
+		SET_GBE_FIELD(WID, TYP, val, GBE_CMODE_I8);
+		break;
+	case 2:
+		SET_GBE_FIELD(WID, TYP, val, GBE_CMODE_ARGB5);
+		break;
+	case 4:
+		SET_GBE_FIELD(WID, TYP, val, GBE_CMODE_RGB8);
+		break;
+	}
+	SET_GBE_FIELD(WID, BUF, val, GBE_BMODE_BOTH);
+
+	for (i = 0; i < 32; i++)
+		gbe->mode_regs[i] = val;
+
+	/* Initialize interrupts */
+	gbe->vt_intr01 = 0xffffffff;
+	gbe->vt_intr23 = 0xffffffff;
+
+	/* HACK:
+	   The GBE hardware uses a tiled memory to screen mapping. Tiles are
+	   blocks of 512x128, 256x128 or 128x128 pixels, respectively for 8bit,
+	   16bit and 32 bit modes (64 kB). They cover the screen with partial
+	   tiles on the right and/or bottom of the screen if needed.
+	   For exemple in 640x480 8 bit mode the mapping is:
+
+	   <-------- 640 ----->
+	   <---- 512 ----><128|384 offscreen>
+	   ^  ^
+	   | 128    [tile 0]        [tile 1]
+	   |  v
+	   ^
+	   4 128    [tile 2]        [tile 3]
+	   8  v
+	   0  ^
+	   128    [tile 4]        [tile 5]
+	   |  v
+	   |  ^
+	   v  96    [tile 6]        [tile 7]
+	   32 offscreen
+
+	   Tiles have the advantage that they can be allocated individually in
+	   memory. However, this mapping is not linear at all, which is not
+	   really convienient. In order to support linear addressing, the GBE
+	   DMA hardware is fooled into thinking the screen is only one tile
+	   large and but has a greater height, so that the DMA transfer covers
+	   the same region.
+	   Tiles are still allocated as independent chunks of 64KB of
+	   continuous physical memory and remapped so that the kernel sees the
+	   framebuffer as a continuous virtual memory. The GBE tile table is
+	   set up so that each tile references one of these 64k blocks:
+
+	   GBE -> tile list    framebuffer           TLB   <------------ CPU
+	          [ tile 0 ] -> [ 64KB ]  <- [ 16x 4KB page entries ]     ^
+	             ...           ...              ...       linear virtual FB
+	          [ tile n ] -> [ 64KB ]  <- [ 16x 4KB page entries ]     v
+
+
+	   The GBE hardware is then told that the buffer is 512*tweaked_height,
+	   with tweaked_height = real_width*real_height/pixels_per_tile.
+	   Thus the GBE hardware will scan the first tile, filing the first 64k
+	   covered region of the screen, and then will proceed to the next
+	   tile, until the whole screen is covered.
+
+	   Here is what would happen at 640x480 8bit:
+
+	   normal tiling               linear
+	   ^   11111111111111112222    11111111111111111111  ^
+	   128 11111111111111112222    11111111111111111111 102 lines
+	       11111111111111112222    11111111111111111111  v
+	   V   11111111111111112222    11111111222222222222
+	       33333333333333334444    22222222222222222222
+	       33333333333333334444    22222222222222222222
+	       <      512     >        <  256 >               102*640+256 = 64k
+
+	   NOTE: The only mode for which this is not working is 800x600 8bit,
+	   as 800*600/512 = 937.5 which is not integer and thus causes
+	   flickering.
+	   I guess this is not so important as one can use 640x480 8bit or
+	   800x600 16bit anyway.
+	 */
+
+	/* Tell gbe about the tiles table location */
+	/* tile_ptr -> [ tile 1 ] -> FB mem */
+	/*             [ tile 2 ] -> FB mem */
+	/*               ...                */
+	val = 0;
+	SET_GBE_FIELD(FRM_CONTROL, FRM_TILE_PTR, val, gbe_tiles.dma >> 9);
+	SET_GBE_FIELD(FRM_CONTROL, FRM_DMA_ENABLE, val, 0); /* do not start */
+	SET_GBE_FIELD(FRM_CONTROL, FRM_LINEAR, val, 0);
+	gbe->frm_control = val;
+
+	maxPixelsPerTileX = 512 / bytesPerPixel;
+	wholeTilesX = 1;
+	partTilesX = 0;
+
+	/* Initialize the framebuffer */
+	val = 0;
+	SET_GBE_FIELD(FRM_SIZE_TILE, FRM_WIDTH_TILE, val, wholeTilesX);
+	SET_GBE_FIELD(FRM_SIZE_TILE, FRM_RHS, val, partTilesX);
+
+	switch (bytesPerPixel) {
+	case 1:
+		SET_GBE_FIELD(FRM_SIZE_TILE, FRM_DEPTH, val,
+			      GBE_FRM_DEPTH_8);
+		break;
+	case 2:
+		SET_GBE_FIELD(FRM_SIZE_TILE, FRM_DEPTH, val,
+			      GBE_FRM_DEPTH_16);
+		break;
+	case 4:
+		SET_GBE_FIELD(FRM_SIZE_TILE, FRM_DEPTH, val,
+			      GBE_FRM_DEPTH_32);
+		break;
+	}
+	gbe->frm_size_tile = val;
+
+	/* compute tweaked height */
+	height_pix = xpmax * ypmax / maxPixelsPerTileX;
+
+	val = 0;
+	SET_GBE_FIELD(FRM_SIZE_PIXEL, FB_HEIGHT_PIX, val, height_pix);
+	gbe->frm_size_pixel = val;
+
+	/* turn off DID and overlay DMA */
+	gbe->did_control = 0;
+	gbe->ovr_width_tile = 0;
+
+	/* Turn off mouse cursor */
+	gbe->crs_ctl = 0;
+
+	/* Turn on GBE */
+	gbe_turn_on();
+
+	/* Initialize the gamma map */
+	udelay(10);
+	for (i = 0; i < 256; i++)
+		gbe->gmap[i] = (i << 24) | (i << 16) | (i << 8);
+
+	/* Initialize the color map */
+	for (i = 0; i < 256; i++) {
+		int j;
+
+		for (j = 0; j < 1000 && gbe->cm_fifo >= 63; j++)
+			udelay(10);
+		if (j == 1000)
+			printk(KERN_ERR "gbefb: cmap FIFO timeout\n");
+
+		gbe->cmap[i] = (i << 8) | (i << 16) | (i << 24);
+	}
+
+	return 0;
+}
+
+static void gbefb_encode_fix(struct fb_fix_screeninfo *fix,
+			     struct fb_var_screeninfo *var)
+{
+	memset(fix, 0, sizeof(struct fb_fix_screeninfo));
+	strcpy(fix->id, "SGI GBE");
+	fix->smem_start = (unsigned long) gbe_mem;
+	fix->smem_len = gbe_mem_size;
+	fix->type = FB_TYPE_PACKED_PIXELS;
+	fix->type_aux = 0;
+	fix->accel = FB_ACCEL_NONE;
+	switch (var->bits_per_pixel) {
+	case 8:
+		fix->visual = FB_VISUAL_PSEUDOCOLOR;
+		break;
+	default:
+		fix->visual = FB_VISUAL_TRUECOLOR;
+		break;
+	}
+	fix->ywrapstep = 0;
+	fix->xpanstep = 0;
+	fix->ypanstep = 0;
+	fix->line_length = var->xres_virtual * var->bits_per_pixel / 8;
+	fix->mmio_start = GBE_BASE;
+	fix->mmio_len = sizeof(struct sgi_gbe);
+}
+
+/*
+ *  Set a single color register. The values supplied are already
+ *  rounded down to the hardware's capabilities (according to the
+ *  entries in the var structure). Return != 0 for invalid regno.
+ */
+
+static int gbefb_setcolreg(unsigned regno, unsigned red, unsigned green,
+			     unsigned blue, unsigned transp,
+			     struct fb_info *info)
+{
+	int i;
+
+	if (regno > 255)
+		return 1;
+	red >>= 8;
+	green >>= 8;
+	blue >>= 8;
+
+	switch (info->var.bits_per_pixel) {
+	case 8:
+		/* wait for the color map FIFO to have a free entry */
+		for (i = 0; i < 1000 && gbe->cm_fifo >= 63; i++)
+			udelay(10);
+		if (i == 1000) {
+			printk(KERN_ERR "gbefb: cmap FIFO timeout\n");
+			return 1;
+		}
+		gbe->cmap[regno] = (red << 24) | (green << 16) | (blue << 8);
+		break;
+	case 15:
+	case 16:
+		red >>= 3;
+		green >>= 3;
+		blue >>= 3;
+		pseudo_palette[regno] =
+			(red << info->var.red.offset) |
+			(green << info->var.green.offset) |
+			(blue << info->var.blue.offset);
+		break;
+	case 32:
+		pseudo_palette[regno] =
+			(red << info->var.red.offset) |
+			(green << info->var.green.offset) |
+			(blue << info->var.blue.offset);
+		break;
+	}
+
+	return 0;
+}
+
+/*
+ *  Check video mode validity, eventually modify var to best match.
+ */
+static int gbefb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
+{
+	unsigned int line_length;
+	struct gbe_timing_info timing;
+
+	/* Limit bpp to 8, 16, and 32 */
+	if (var->bits_per_pixel <= 8)
+		var->bits_per_pixel = 8;
+	else if (var->bits_per_pixel <= 16)
+		var->bits_per_pixel = 16;
+	else if (var->bits_per_pixel <= 32)
+		var->bits_per_pixel = 32;
+	else
+		return -EINVAL;
+
+	/* Check the mode can be mapped linearly with the tile table trick. */
+	/* This requires width x height x bytes/pixel be a multiple of 512 */
+	if ((var->xres * var->yres * var->bits_per_pixel) & 4095)
+		return -EINVAL;
+
+	var->grayscale = 0;	/* No grayscale for now */
+
+	if ((var->pixclock = compute_gbe_timing(var, &timing)) < 0)
+		return(-EINVAL);
+
+	/* Adjust virtual resolution, if necessary */
+	if (var->xres > var->xres_virtual || (!ywrap && !ypan))
+		var->xres_virtual = var->xres;
+	if (var->yres > var->yres_virtual || (!ywrap && !ypan))
+		var->yres_virtual = var->yres;
+
+	if (var->vmode & FB_VMODE_CONUPDATE) {
+		var->vmode |= FB_VMODE_YWRAP;
+		var->xoffset = info->var.xoffset;
+		var->yoffset = info->var.yoffset;
+	}
+
+	/* No grayscale for now */
+	var->grayscale = 0;
+
+	/* Memory limit */
+	line_length = var->xres_virtual * var->bits_per_pixel / 8;
+	if (line_length * var->yres_virtual > gbe_mem_size)
+		return -ENOMEM;	/* Virtual resolution too high */
+
+	switch (var->bits_per_pixel) {
+	case 8:
+		var->red.offset = 0;
+		var->red.length = 8;
+		var->green.offset = 0;
+		var->green.length = 8;
+		var->blue.offset = 0;
+		var->blue.length = 8;
+		var->transp.offset = 0;
+		var->transp.length = 0;
+		break;
+	case 16:		/* RGB 1555 */
+		var->red.offset = 10;
+		var->red.length = 5;
+		var->green.offset = 5;
+		var->green.length = 5;
+		var->blue.offset = 0;
+		var->blue.length = 5;
+		var->transp.offset = 0;
+		var->transp.length = 0;
+		break;
+	case 32:		/* RGB 8888 */
+		var->red.offset = 24;
+		var->red.length = 8;
+		var->green.offset = 16;
+		var->green.length = 8;
+		var->blue.offset = 8;
+		var->blue.length = 8;
+		var->transp.offset = 0;
+		var->transp.length = 8;
+		break;
+	}
+	var->red.msb_right = 0;
+	var->green.msb_right = 0;
+	var->blue.msb_right = 0;
+	var->transp.msb_right = 0;
+
+	var->left_margin = timing.htotal - timing.hsync_end;
+	var->right_margin = timing.hsync_start - timing.width;
+	var->upper_margin = timing.vtotal - timing.vsync_end;
+	var->lower_margin = timing.vsync_start - timing.height;
+	var->hsync_len = timing.hsync_end - timing.hsync_start;
+	var->vsync_len = timing.vsync_end - timing.vsync_start;
+
+	return 0;
+}
+
+static int gbefb_mmap(struct fb_info *info, struct file *file,
+			struct vm_area_struct *vma)
+{
+	unsigned long size = vma->vm_end - vma->vm_start;
+	unsigned long offset = vma->vm_pgoff << PAGE_SHIFT;
+	unsigned long addr;
+	unsigned long phys_addr, phys_size;
+	u16 *tile;
+
+	/* check range */
+	if (vma->vm_pgoff > (~0UL >> PAGE_SHIFT))
+		return -EINVAL;
+	if (offset + size > gbe_mem_size)
+		return -EINVAL;
+
+	/* remap using the fastest write-through mode on architecture */
+	/* try not polluting the cache when possible */
+	pgprot_val(vma->vm_page_prot) =
+		pgprot_fb(pgprot_val(vma->vm_page_prot));
+
+	vma->vm_flags |= VM_IO | VM_RESERVED;
+	vma->vm_file = file;
+
+	/* look for the starting tile */
+	tile = &gbe_tiles.cpu[offset >> TILE_SHIFT];
+	addr = vma->vm_start;
+	offset &= TILE_MASK;
+
+	/* remap each tile separately */
+	do {
+		phys_addr = (((unsigned long) (*tile)) << TILE_SHIFT) + offset;
+		if ((offset + size) < TILE_SIZE)
+			phys_size = size;
+		else
+			phys_size = TILE_SIZE - offset;
+
+		if (remap_page_range
+		    (vma, addr, phys_addr, phys_size, vma->vm_page_prot))
+			return -EAGAIN;
+
+		offset = 0;
+		size -= phys_size;
+		addr += phys_size;
+		tile++;
+	} while (size);
+
+	return 0;
+}
+
+static struct fb_ops gbefb_ops = {
+	.owner		= THIS_MODULE,
+	.fb_check_var	= gbefb_check_var,
+	.fb_set_par	= gbefb_set_par,
+	.fb_setcolreg	= gbefb_setcolreg,
+	.fb_mmap	= gbefb_mmap,
+	.fb_blank	= gbefb_blank,
+	.fb_fillrect	= cfb_fillrect,
+	.fb_copyarea	= cfb_copyarea,
+	.fb_imageblit	= cfb_imageblit,
+	.fb_cursor	= soft_cursor,
+};
+
+/*
+ * Initialization
+ */
+
+int __init gbefb_setup(char *options)
+{
+	char *this_opt;
+
+	if (!options || !*options)
+		return 0;
+
+	while ((this_opt = strsep(&options, ",")) != NULL) {
+		if (!strncmp(this_opt, "monitor:", 8)) {
+			if (!strncmp(this_opt + 8, "crt", 3)) {
+				flat_panel_enabled = 0;
+				default_var = &default_var_CRT;
+				default_mode = &default_mode_CRT;
+			} else if (!strncmp(this_opt + 8, "1600sw", 6) ||
+				   !strncmp(this_opt + 8, "lcd", 3)) {
+				flat_panel_enabled = 1;
+				default_var = &default_var_LCD;
+				default_mode = &default_mode_LCD;
+			}
+		} else if (!strncmp(this_opt, "mem:", 4)) {
+			gbe_mem_size = memparse(this_opt + 4, &this_opt);
+			if (gbe_mem_size > CONFIG_FB_GBE_MEM * 1024 * 1024)
+				gbe_mem_size = CONFIG_FB_GBE_MEM * 1024 * 1024;
+			if (gbe_mem_size < TILE_SIZE)
+				gbe_mem_size = TILE_SIZE;
+		} else
+			mode_option = this_opt;
+	}
+	return 0;
+}
+
+int __init gbefb_init(void)
+{
+	int i, ret = 0;
+
+	if (!request_mem_region(GBE_BASE, sizeof(struct sgi_gbe), "GBE")) {
+		printk(KERN_ERR "gbefb: couldn't reserve mmio region\n");
+		return -EBUSY;
+	}
+
+	gbe = (struct sgi_gbe *) ioremap(GBE_BASE, sizeof(struct sgi_gbe));
+	if (!gbe) {
+		printk(KERN_ERR "gbefb: couldn't map mmio region\n");
+		ret = -ENXIO;
+		goto out_release_mem_region;
+	}
+	gbe_revision = gbe->ctrlstat & 15;
+
+	gbe_tiles.cpu =
+		dma_alloc_coherent(NULL, GBE_TLB_SIZE * sizeof(uint16_t),
+				   &gbe_tiles.dma, GFP_KERNEL);
+	if (!gbe_tiles.cpu) {
+		printk(KERN_ERR "gbefb: couldn't allocate tiles table\n");
+		ret = -ENOMEM;
+		goto out_unmap;
+	}
+
+
+	if (gbe_mem_phys) {
+		/* memory was allocated at boot time */
+		gbe_mem = ioremap_nocache(gbe_mem_phys, gbe_mem_size);
+		gbe_dma_addr = 0;
+	} else {
+		/* try to allocate memory with the classical allocator
+		 * this has high chance to fail on low memory machines */
+		gbe_mem = dma_alloc_coherent(NULL, gbe_mem_size, &gbe_dma_addr,
+					     GFP_KERNEL);
+		gbe_mem_phys = (unsigned long) gbe_dma_addr;
+	}
+
+#ifdef CONFIG_X86
+	mtrr_add(gbe_mem_phys, gbe_mem_size, MTRR_TYPE_WRCOMB, 1);
+#endif
+
+	if (!gbe_mem) {
+		printk(KERN_ERR "gbefb: couldn't map framebuffer\n");
+		ret = -ENXIO;
+		goto out_tiles_free;
+	}
+
+	/* map framebuffer memory into tiles table */
+	for (i = 0; i < (gbe_mem_size >> TILE_SHIFT); i++)
+		gbe_tiles.cpu[i] = (gbe_mem_phys >> TILE_SHIFT) + i;
+
+	fb_info.currcon = -1;
+	fb_info.fbops = &gbefb_ops;
+	fb_info.pseudo_palette = pseudo_palette;
+	fb_info.flags = FBINFO_FLAG_DEFAULT;
+	fb_info.screen_base = gbe_mem;
+	fb_alloc_cmap(&fb_info.cmap, 256, 0);
+
+	/* reset GBE */
+	gbe_reset();
+
+	/* turn on default video mode */
+	if (fb_find_mode(&par_current.var, &fb_info, mode_option, NULL, 0,
+			 default_mode, 8) == 0)
+		par_current.var = *default_var;
+	fb_info.var = par_current.var;
+	gbefb_check_var(&par_current.var, &fb_info);
+	gbefb_encode_fix(&fb_info.fix, &fb_info.var);
+	fb_info.par = &par_current;
+
+	if (register_framebuffer(&fb_info) < 0) {
+		ret = -ENXIO;
+		printk(KERN_ERR "gbefb: couldn't register framebuffer\n");
+		goto out_gbe_unmap;
+	}
+
+	printk(KERN_INFO "fb%d: %s rev %d @ 0x%08x using %dkB memory\n",
+	       fb_info.node, fb_info.fix.id, gbe_revision, (unsigned) GBE_BASE,
+	       gbe_mem_size >> 10);
+
+	return 0;
+
+out_gbe_unmap:
+	if (gbe_dma_addr)
+		dma_free_coherent(NULL, gbe_mem_size, gbe_mem, gbe_mem_phys);
+	else
+		iounmap(gbe_mem);
+out_tiles_free:
+	dma_free_coherent(NULL, GBE_TLB_SIZE * sizeof(uint16_t),
+			  (void *)gbe_tiles.cpu, gbe_tiles.dma);
+out_unmap:
+	iounmap(gbe);
+out_release_mem_region:
+	release_mem_region(GBE_BASE, sizeof(struct sgi_gbe));
+	return ret;
+}
+
+void __exit gbefb_exit(void)
+{
+	unregister_framebuffer(&fb_info);
+	gbe_turn_off();
+	if (gbe_dma_addr)
+		dma_free_coherent(NULL, gbe_mem_size, gbe_mem, gbe_mem_phys);
+	else
+		iounmap(gbe_mem);
+	dma_free_coherent(NULL, GBE_TLB_SIZE * sizeof(uint16_t),
+			  (void *)gbe_tiles.cpu, gbe_tiles.dma);
+	release_mem_region(GBE_BASE, sizeof(struct sgi_gbe));
+	iounmap(gbe);
+}
+
+#ifdef MODULE
+module_init(gbefb_init);
+module_exit(gbefb_exit);
+#endif
+
+MODULE_LICENSE("GPL");
diff -Nru a/drivers/video/hgafb.c b/drivers/video/hgafb.c
--- a/drivers/video/hgafb.c	Sun May 16 01:18:36 2004
+++ b/drivers/video/hgafb.c	Sun May 16 01:18:36 2004
@@ -448,6 +448,10 @@
 	return 0;
 }
 
+/*
+ * Accel functions
+ */
+#ifdef CONFIG_FB_HGA_ACCEL
 static void hgafb_fillrect(struct fb_info *info, const struct fb_fillrect *rect)
 {
 	u_int rows, y;
@@ -510,6 +514,11 @@
 		*dest = d;
 	}
 }
+#else /* !CONFIG_FB_HGA_ACCEL */
+#define hgafb_fillrect cfb_fillrect
+#define hgafb_copyarea cfb_copyarea
+#define hgafb_imageblit cfb_imageblit
+#endif /* CONFIG_FB_HGA_ACCEL */
 
 
 static struct fb_ops hgafb_ops = {
@@ -519,9 +528,9 @@
 	.fb_setcolreg	= hgafb_setcolreg,
 	.fb_pan_display	= hgafb_pan_display,
 	.fb_blank	= hgafb_blank,
-	.fb_fillrect	= cfb_fillrect, //hgafb_fillrect,
-	.fb_copyarea	= cfb_copyarea,	//hgafb_copyarea,
-	.fb_imageblit	= cfb_imageblit,//hgafb_imageblit,
+	.fb_fillrect	= hgafb_fillrect,
+	.fb_copyarea	= hgafb_copyarea,
+	.fb_imageblit	= hgafb_imageblit,
 };
 		
 /* ------------------------------------------------------------------------- *
diff -Nru a/drivers/video/imsttfb.c b/drivers/video/imsttfb.c
--- a/drivers/video/imsttfb.c	Sun May 16 01:18:35 2004
+++ b/drivers/video/imsttfb.c	Sun May 16 01:18:35 2004
@@ -1084,6 +1084,7 @@
 	while(read_reg_le32(par->dc_regs, SSTATUS) & 0x40);
 }
 
+#if 0
 static int
 imsttfb_load_cursor_image(struct imstt_par *par, int width, int height, __u8 fgc)
 {
@@ -1191,7 +1192,6 @@
 	}
 }
 
-#if 0
 static int 
 imsttfb_cursor(struct fb_info *info, struct fb_cursor *cursor)
 {
diff -Nru a/drivers/video/logo/logo.c b/drivers/video/logo/logo.c
--- a/drivers/video/logo/logo.c	Sun May 16 01:18:35 2004
+++ b/drivers/video/logo/logo.c	Sun May 16 01:18:35 2004
@@ -16,7 +16,7 @@
 #include <asm/setup.h>
 #endif
 
-#if defined(CONFIG_MIPS) || defined(CONFIG_MIPS64)
+#ifdef CONFIG_MIPS
 #include <asm/bootinfo.h>
 #endif
 
diff -Nru a/drivers/video/neofb.c b/drivers/video/neofb.c
--- a/drivers/video/neofb.c	Sun May 16 01:18:35 2004
+++ b/drivers/video/neofb.c	Sun May 16 01:18:35 2004
@@ -81,13 +81,13 @@
 #include <asm/mtrr.h>
 #endif
 
+#include <video/vga.h>
 #include <video/neomagic.h>
 
-#define NEOFB_VERSION "0.4.1"
+#define NEOFB_VERSION "0.4.2"
 
 /* --------------------------------------------------------------------- */
 
-static int disabled;
 static int internal;
 static int external;
 static int libretto;
@@ -100,8 +100,6 @@
 MODULE_AUTHOR("(c) 2001-2002  Denis Oliver Kropp <dok@convergence.de>");
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("FBDev driver for NeoMagic PCI Chips");
-MODULE_PARM(disabled, "i");
-MODULE_PARM_DESC(disabled, "Disable this driver's initialization.");
 MODULE_PARM(internal, "i");
 MODULE_PARM_DESC(internal, "Enable output on internal LCD Display.");
 MODULE_PARM(external, "i");
@@ -152,6 +150,16 @@
 };
 #endif
 
+static inline u32 read_le32(int regindex, const struct neofb_par *par)
+{
+	return readl(par->neo2200 + par->cursorOff + regindex);
+}
+
+static inline void write_le32(int regindex, u32 val, const struct neofb_par *par)
+{
+	writel(val, par->neo2200 + par->cursorOff + regindex);
+}
+
 static int neoFindMode(int xres, int yres, int depth)
 {
 	int xres_s;
@@ -363,44 +371,61 @@
 	par->Attribute[18] = 0x0F;
 	par->Attribute[19] = 0x00;
 	par->Attribute[20] = 0x00;
-
 	return 0;
 }
 
-static void vgaHWLock(void)
+static void vgaHWLock(struct vgastate *state)
 {
 	/* Protect CRTC[0-7] */
-	VGAwCR(0x11, VGArCR(0x11) | 0x80);
+	vga_wcrt(state->vgabase, 0x11, vga_rcrt(state->vgabase, 0x11) | 0x80);
 }
 
 static void vgaHWUnlock(void)
 {
 	/* Unprotect CRTC[0-7] */
-	VGAwCR(0x11, VGArCR(0x11) & ~0x80);
+	vga_wcrt(NULL, 0x11, vga_rcrt(NULL, 0x11) & ~0x80);
 }
 
-static void neoLock(void)
+static void neoLock(struct vgastate *state)
 {
-	VGAwGR(0x09, 0x00);
-	vgaHWLock();
+	vga_wgfx(state->vgabase, 0x09, 0x00);
+	vgaHWLock(state);
 }
 
 static void neoUnlock(void)
 {
 	vgaHWUnlock();
-	VGAwGR(0x09, 0x26);
+	vga_wgfx(NULL, 0x09, 0x26);
 }
 
 /*
- * vgaHWSeqReset
- *      perform a sequencer reset.
+ * VGA Palette management
  */
-void vgaHWSeqReset(int start)
+static int paletteEnabled = 0;
+
+inline void VGAenablePalette(void)
 {
-	if (start)
-		VGAwSEQ(0x00, 0x01);	/* Synchronous Reset */
+	vga_r(NULL, VGA_IS1_RC);
+	vga_w(NULL, VGA_ATT_W, 0x00);
+	paletteEnabled = 1;
+}
+
+inline void VGAdisablePalette(void)
+{
+	vga_r(NULL, VGA_IS1_RC);
+	vga_w(NULL, VGA_ATT_W, 0x20);
+	paletteEnabled = 0;
+}
+
+inline void VGAwATTR(u8 index, u8 value)
+{
+	if (paletteEnabled)
+		index &= ~0x20;
 	else
-		VGAwSEQ(0x00, 0x03);	/* End Reset */
+		index |= 0x20;
+
+	vga_r(NULL, VGA_IS1_RC);
+	vga_wattr(NULL, index, value);
 }
 
 void vgaHWProtect(int on)
@@ -411,21 +436,18 @@
 		/*
 		 * Turn off screen and disable sequencer.
 		 */
-		tmp = VGArSEQ(0x01);
-
-		vgaHWSeqReset(1);	/* start synchronous reset */
-		VGAwSEQ(0x01, tmp | 0x20);	/* disable the display */
+		tmp = vga_rseq(NULL, 0x01);
+		vga_wseq(NULL, 0x00, 0x01);		/* Synchronous Reset */
+		vga_wseq(NULL, 0x01, tmp | 0x20);	/* disable the display */
 
 		VGAenablePalette();
 	} else {
 		/*
 		 * Reenable sequencer, then turn on screen.
 		 */
-
-		tmp = VGArSEQ(0x01);
-
-		VGAwSEQ(0x01, tmp & ~0x20);	/* reenable display */
-		vgaHWSeqReset(0);	/* clear synchronousreset */
+		tmp = vga_rseq(NULL, 0x01);
+		vga_wseq(NULL, 0x01, tmp & ~0x20);	/* reenable display */
+		vga_wseq(NULL, 0x00, 0x03);		/* clear synchronousreset */
 
 		VGAdisablePalette();
 	}
@@ -436,19 +458,19 @@
 {
 	int i;
 
-	VGAwMISC(par->MiscOutReg);
+	vga_w(NULL, VGA_MIS_W, par->MiscOutReg);
 
 	for (i = 1; i < 5; i++)
-		VGAwSEQ(i, par->Sequencer[i]);
+		vga_wseq(NULL, i, par->Sequencer[i]);
 
 	/* Ensure CRTC registers 0-7 are unlocked by clearing bit 7 or CRTC[17] */
-	VGAwCR(17, par->CRTC[17] & ~0x80);
+	vga_wcrt(NULL, 17, par->CRTC[17] & ~0x80);
 
 	for (i = 0; i < 25; i++)
-		VGAwCR(i, par->CRTC[i]);
+		vga_wcrt(NULL, i, par->CRTC[i]);
 
 	for (i = 0; i < 9; i++)
-		VGAwGR(i, par->Graphics[i]);
+		vga_wgfx(NULL, i, par->Graphics[i]);
 
 	VGAenablePalette();
 
@@ -535,6 +557,36 @@
 /* --------------------------------------------------------------------- */
 
 static int
+neofb_open(struct fb_info *info, int user)
+{
+	struct neofb_par *par = (struct neofb_par *) info->par;
+	int cnt = atomic_read(&par->ref_count);
+
+	if (cnt) {
+		memset(&par->state, 0, sizeof(struct vgastate));
+		par->state.flags = VGA_SAVE_MODE | VGA_SAVE_FONTS;
+		save_vga(&par->state);
+	}
+	atomic_inc(&par->ref_count);
+	return 0;
+}
+
+static int
+neofb_release(struct fb_info *info, int user)
+{
+	struct neofb_par *par = (struct neofb_par *) info->par;
+	int cnt = atomic_read(&par->ref_count);
+
+	if (!cnt)
+		return -EINVAL;
+	if (cnt == 1) {
+		restore_vga(&par->state);
+	}
+	atomic_dec(&par->ref_count);
+	return 0;
+}
+
+static int
 neofb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
 {
 	struct neofb_par *par = (struct neofb_par *) info->par;
@@ -672,16 +724,13 @@
 	if (var->xres_virtual < var->xres)
 		var->xres_virtual = var->xres;
 
-	memlen =
-	    var->xres_virtual * var->bits_per_pixel * var->yres_virtual /
-	    8;
+	memlen = var->xres_virtual * var->bits_per_pixel * var->yres_virtual >> 3;
+
 	if (memlen > vramlen) {
-		var->yres_virtual =
-		    vramlen * 8 / (var->xres_virtual *
-				   var->bits_per_pixel);
-		memlen =
-		    var->xres_virtual * var->bits_per_pixel *
-		    var->yres_virtual / 8;
+		var->yres_virtual =  vramlen * 8 / (var->xres_virtual *
+				   	var->bits_per_pixel);
+		memlen = var->xres_virtual * var->bits_per_pixel *
+				var->yres_virtual / 8;
 	}
 
 	/* we must round yres/xres down, we already rounded y/xres_virtual up
@@ -981,13 +1030,13 @@
 	}
 
 	/* alread unlocked above */
-	/* BOGUS  VGAwGR (0x09, 0x26); */
+	/* BOGUS  vga_wgfx(NULL, 0x09, 0x26); */
 
 	/* don't know what this is, but it's 0 from bootup anyway */
-	VGAwGR(0x15, 0x00);
+	vga_wgfx(NULL, 0x15, 0x00);
 
 	/* was set to 0x01 by my bios in text and vesa modes */
-	VGAwGR(0x0A, par->GeneralLockReg);
+	vga_wgfx(NULL, 0x0A, par->GeneralLockReg);
 
 	/*
 	 * The color mode needs to be set before calling vgaHWRestore
@@ -996,7 +1045,7 @@
 	 * NOTE: Make sure we don't change bits make sure we don't change
 	 * any reserved bits.
 	 */
-	temp = VGArGR(0x90);
+	temp = vga_rgfx(NULL, 0x90);
 	switch (info->fix.accel) {
 	case FB_ACCEL_NEOMAGIC_NM2070:
 		temp &= 0xF0;	/* Save bits 7:4 */
@@ -1015,7 +1064,7 @@
 		break;
 	}
 
-	VGAwGR(0x90, temp);
+	vga_wgfx(NULL, 0x90, temp);
 
 	/*
 	 * In some rare cases a lockup might occur if we don't delay
@@ -1027,9 +1076,9 @@
 	 * Disable horizontal and vertical graphics and text expansions so
 	 * that vgaHWRestore works properly.
 	 */
-	temp = VGArGR(0x25);
+	temp = vga_rgfx(NULL, 0x25);
 	temp &= 0x39;
-	VGAwGR(0x25, temp);
+	vga_wgfx(NULL, 0x25, temp);
 
 	/*
 	 * Sleep for 200ms to make sure that the two operations above have
@@ -1041,19 +1090,18 @@
 	 * This function handles restoring the generic VGA registers.  */
 	vgaHWRestore(info, par);
 
-
-	VGAwGR(0x0E, par->ExtCRTDispAddr);
-	VGAwGR(0x0F, par->ExtCRTOffset);
-	temp = VGArGR(0x10);
+	vga_wgfx(NULL, 0x0E, par->ExtCRTDispAddr);
+	vga_wgfx(NULL, 0x0F, par->ExtCRTOffset);
+	temp = vga_rgfx(NULL, 0x10);
 	temp &= 0x0F;		/* Save bits 3:0 */
 	temp |= (par->SysIfaceCntl1 & ~0x0F);	/* VESA Bios sets bit 1! */
-	VGAwGR(0x10, temp);
+	vga_wgfx(NULL, 0x10, temp);
 
-	VGAwGR(0x11, par->SysIfaceCntl2);
-	VGAwGR(0x15, 0 /*par->SingleAddrPage */ );
-	VGAwGR(0x16, 0 /*par->DualAddrPage */ );
+	vga_wgfx(NULL, 0x11, par->SysIfaceCntl2);
+	vga_wgfx(NULL, 0x15, 0 /*par->SingleAddrPage */ );
+	vga_wgfx(NULL, 0x16, 0 /*par->DualAddrPage */ );
 
-	temp = VGArGR(0x20);
+	temp = vga_rgfx(NULL, 0x20);
 	switch (info->fix.accel) {
 	case FB_ACCEL_NEOMAGIC_NM2070:
 		temp &= 0xFC;	/* Save bits 7:2 */
@@ -1074,79 +1122,78 @@
 		temp |= (par->PanelDispCntlReg1 & ~0x98);
 		break;
 	}
-	VGAwGR(0x20, temp);
+	vga_wgfx(NULL, 0x20, temp);
 
-	temp = VGArGR(0x25);
+	temp = vga_rgfx(NULL, 0x25);
 	temp &= 0x38;		/* Save bits 5:3 */
 	temp |= (par->PanelDispCntlReg2 & ~0x38);
-	VGAwGR(0x25, temp);
+	vga_wgfx(NULL, 0x25, temp);
 
 	if (info->fix.accel != FB_ACCEL_NEOMAGIC_NM2070) {
-		temp = VGArGR(0x30);
+		temp = vga_rgfx(NULL, 0x30);
 		temp &= 0xEF;	/* Save bits 7:5 and bits 3:0 */
 		temp |= (par->PanelDispCntlReg3 & ~0xEF);
-		VGAwGR(0x30, temp);
+		vga_wgfx(NULL, 0x30, temp);
 	}
 
-	VGAwGR(0x28, par->PanelVertCenterReg1);
-	VGAwGR(0x29, par->PanelVertCenterReg2);
-	VGAwGR(0x2a, par->PanelVertCenterReg3);
+	vga_wgfx(NULL, 0x28, par->PanelVertCenterReg1);
+	vga_wgfx(NULL, 0x29, par->PanelVertCenterReg2);
+	vga_wgfx(NULL, 0x2a, par->PanelVertCenterReg3);
 
 	if (info->fix.accel != FB_ACCEL_NEOMAGIC_NM2070) {
-		VGAwGR(0x32, par->PanelVertCenterReg4);
-		VGAwGR(0x33, par->PanelHorizCenterReg1);
-		VGAwGR(0x34, par->PanelHorizCenterReg2);
-		VGAwGR(0x35, par->PanelHorizCenterReg3);
+		vga_wgfx(NULL, 0x32, par->PanelVertCenterReg4);
+		vga_wgfx(NULL, 0x33, par->PanelHorizCenterReg1);
+		vga_wgfx(NULL, 0x34, par->PanelHorizCenterReg2);
+		vga_wgfx(NULL, 0x35, par->PanelHorizCenterReg3);
 	}
 
 	if (info->fix.accel == FB_ACCEL_NEOMAGIC_NM2160)
-		VGAwGR(0x36, par->PanelHorizCenterReg4);
+		vga_wgfx(NULL, 0x36, par->PanelHorizCenterReg4);
 
 	if (info->fix.accel == FB_ACCEL_NEOMAGIC_NM2200 ||
 	    info->fix.accel == FB_ACCEL_NEOMAGIC_NM2230 ||
 	    info->fix.accel == FB_ACCEL_NEOMAGIC_NM2360 ||
 	    info->fix.accel == FB_ACCEL_NEOMAGIC_NM2380) {
-		VGAwGR(0x36, par->PanelHorizCenterReg4);
-		VGAwGR(0x37, par->PanelVertCenterReg5);
-		VGAwGR(0x38, par->PanelHorizCenterReg5);
+		vga_wgfx(NULL, 0x36, par->PanelHorizCenterReg4);
+		vga_wgfx(NULL, 0x37, par->PanelVertCenterReg5);
+		vga_wgfx(NULL, 0x38, par->PanelHorizCenterReg5);
 
 		clock_hi = 1;
 	}
 
 	/* Program VCLK3 if needed. */
-	if (par->ProgramVCLK && ((VGArGR(0x9B) != par->VCLK3NumeratorLow)
-				 || (VGArGR(0x9F) != par->VCLK3Denominator)
-				 || (clock_hi && ((VGArGR(0x8F) & ~0x0f)
-						  != (par->
-						      VCLK3NumeratorHigh &
+	if (par->ProgramVCLK && ((vga_rgfx(NULL, 0x9B) != par->VCLK3NumeratorLow)
+				 || (vga_rgfx(NULL, 0x9F) != par->VCLK3Denominator)
+				 || (clock_hi && ((vga_rgfx(NULL, 0x8F) & ~0x0f)
+						  != (par->VCLK3NumeratorHigh &
 						      ~0x0F))))) {
-		VGAwGR(0x9B, par->VCLK3NumeratorLow);
+		vga_wgfx(NULL, 0x9B, par->VCLK3NumeratorLow);
 		if (clock_hi) {
-			temp = VGArGR(0x8F);
+			temp = vga_rgfx(NULL, 0x8F);
 			temp &= 0x0F;	/* Save bits 3:0 */
 			temp |= (par->VCLK3NumeratorHigh & ~0x0F);
-			VGAwGR(0x8F, temp);
+			vga_wgfx(NULL, 0x8F, temp);
 		}
-		VGAwGR(0x9F, par->VCLK3Denominator);
+		vga_wgfx(NULL, 0x9F, par->VCLK3Denominator);
 	}
 
 	if (par->biosMode)
-		VGAwCR(0x23, par->biosMode);
+		vga_wcrt(NULL, 0x23, par->biosMode);
 
-	VGAwGR(0x93, 0xc0);	/* Gives 5x faster framebuffer writes !!! */
+	vga_wgfx(NULL, 0x93, 0xc0);	/* Gives 5x faster framebuffer writes !!! */
 
 	/* Program vertical extension register */
 	if (info->fix.accel == FB_ACCEL_NEOMAGIC_NM2200 ||
 	    info->fix.accel == FB_ACCEL_NEOMAGIC_NM2230 ||
 	    info->fix.accel == FB_ACCEL_NEOMAGIC_NM2360 ||
 	    info->fix.accel == FB_ACCEL_NEOMAGIC_NM2380) {
-		VGAwCR(0x70, par->VerticalExt);
+		vga_wcrt(NULL, 0x70, par->VerticalExt);
 	}
 
 	vgaHWProtect(0);	/* Turn on screen */
 
 	/* Calling this also locks offset registers required in update_start */
-	neoLock();
+	neoLock(&par->state);
 
 	info->fix.line_length =
 	    info->var.xres_virtual * (info->var.bits_per_pixel >> 3);
@@ -1167,6 +1214,8 @@
 static void neofb_update_start(struct fb_info *info,
 			       struct fb_var_screeninfo *var)
 {
+	struct neofb_par *par = (struct neofb_par *) info->par;
+	struct vgastate *state = &par->state;
 	int oldExtCRTDispAddr;
 	int Base;
 
@@ -1180,18 +1229,18 @@
 	/*
 	 * These are the generic starting address registers.
 	 */
-	VGAwCR(0x0C, (Base & 0x00FF00) >> 8);
-	VGAwCR(0x0D, (Base & 0x00FF));
+	vga_wcrt(state->vgabase, 0x0C, (Base & 0x00FF00) >> 8);
+	vga_wcrt(state->vgabase, 0x0D, (Base & 0x00FF));
 
 	/*
 	 * Make sure we don't clobber some other bits that might already
 	 * have been set. NOTE: NM2200 has a writable bit 3, but it shouldn't
 	 * be needed.
 	 */
-	oldExtCRTDispAddr = VGArGR(0x0E);
-	VGAwGR(0x0E, (((Base >> 16) & 0x0f) | (oldExtCRTDispAddr & 0xf0)));
+	oldExtCRTDispAddr = vga_rgfx(NULL, 0x0E);
+	vga_wgfx(state->vgabase, 0x0E, (((Base >> 16) & 0x0f) | (oldExtCRTDispAddr & 0xf0)));
 
-	neoLock();
+	neoLock(state);
 }
 
 /*
@@ -1227,7 +1276,7 @@
 static int neofb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
 			   u_int transp, struct fb_info *fb)
 {
-	if (regno >= NR_PALETTE)
+	if (regno >= 255)
 		return -EINVAL;
 
 	switch (fb->var.bits_per_pixel) {
@@ -1353,7 +1402,7 @@
 	}
 
 	par->neo2200->dstStart =
-	    dst * ((info->var.bits_per_pixel + 7) / 8);
+	    dst * ((info->var.bits_per_pixel + 7) >> 3);
 	par->neo2200->xyExt =
 	    (rect->height << 16) | (rect->width & 0xffff);
 }
@@ -1361,24 +1410,20 @@
 static void
 neo2200_copyarea(struct fb_info *info, const struct fb_copyarea *area)
 {
-	struct neofb_par *par = (struct neofb_par *) info->par;
 	u32 sx = area->sx, sy = area->sy, dx = area->dx, dy = area->dy;
+	struct neofb_par *par = (struct neofb_par *) info->par;
 	u_long src, dst, bltCntl;
 
 	bltCntl = NEO_BC3_FIFO_EN | NEO_BC3_SKIP_MAPPING | 0x0C0000;
 
-	if (sy < dy) {
+	if ((dy > sy) || ((dy == sy) && (dx > sx))) {
+		/* Start with the lower right corner */
 		sy += (area->height - 1);
 		dy += (area->height - 1);
-
-		bltCntl |= NEO_BC0_DST_Y_DEC | NEO_BC0_SRC_Y_DEC;
-	}
-
-	if (area->sx < area->dx) {
 		sx += (area->width - 1);
 		dx += (area->width - 1);
 
-		bltCntl |= NEO_BC0_X_DEC;
+		bltCntl |= NEO_BC0_X_DEC | NEO_BC0_DST_Y_DEC | NEO_BC0_SRC_Y_DEC;
 	}
 
 	src = sx * (info->var.bits_per_pixel >> 3) + sy*info->fix.line_length;
@@ -1395,6 +1440,7 @@
 	    (area->height << 16) | (area->width & 0xffff);
 }
 
+/*
 static void
 neo2200_imageblit(struct fb_info *info, const struct fb_image *image)
 {
@@ -1431,6 +1477,7 @@
 	memcpy(par->mmio_vbase + 0x100000, image->data,
 	       (image->width * image->height) >> 3);
 }
+*/
 
 static void
 neofb_fillrect(struct fb_info *info, const struct fb_fillrect *rect)
@@ -1439,7 +1486,7 @@
 		case FB_ACCEL_NEOMAGIC_NM2200:
 		case FB_ACCEL_NEOMAGIC_NM2230: 
 		case FB_ACCEL_NEOMAGIC_NM2360: 
-		case FB_ACCEL_NEOMAGIC_NM2380: 
+		case FB_ACCEL_NEOMAGIC_NM2380:
 			neo2200_fillrect(info, rect);
 			break;
 		default:
@@ -1467,17 +1514,22 @@
 static void
 neofb_imageblit(struct fb_info *info, const struct fb_image *image)
 {
-	switch (info->fix.accel) {
-		case FB_ACCEL_NEOMAGIC_NM2200:
-		case FB_ACCEL_NEOMAGIC_NM2230: 
-		case FB_ACCEL_NEOMAGIC_NM2360: 
-		case FB_ACCEL_NEOMAGIC_NM2380: 
-			neo2200_imageblit(info, image);
-			break;
-		default:
-			cfb_imageblit(info, image);
-			break;
-	}
+/*
+	if (image->depth == 1) {
+		switch (info->fix.accel) {
+			case FB_ACCEL_NEOMAGIC_NM2200:
+			case FB_ACCEL_NEOMAGIC_NM2230:
+			case FB_ACCEL_NEOMAGIC_NM2360:
+			case FB_ACCEL_NEOMAGIC_NM2380:
+				neo2200_imageblit(info, image);
+				break;
+			default:
+				cfb_imageblit(info, image);
+				break;
+		}
+	} else
+*/
+		cfb_imageblit(info, image);
 }	
 
 static int 
@@ -1496,8 +1548,67 @@
 	return 0;		
 }
 
+/*
+static void
+neofb_draw_cursor(struct fb_info *info, u8 *dst, u8 *src, unsigned int width)
+{
+	//memset_io(info->sprite.addr, 0xff, 1);
+}
+
+static int
+neofb_cursor(struct fb_info *info, struct fb_cursor *cursor)
+{
+	struct neofb_par *par = (struct neofb_par *) info->par;
+
+	* Disable cursor *
+	write_le32(NEOREG_CURSCNTL, ~NEO_CURS_ENABLE, par);
+
+	if (cursor->set & FB_CUR_SETPOS) {
+		u32 x = cursor->image.dx;
+		u32 y = cursor->image.dy;
+
+		info->cursor.image.dx = x;
+		info->cursor.image.dy = y;
+		write_le32(NEOREG_CURSX, x, par);
+		write_le32(NEOREG_CURSY, y, par);
+	}
+
+	if (cursor->set & FB_CUR_SETSIZE) {
+		info->cursor.image.height = cursor->image.height;
+		info->cursor.image.width = cursor->image.width;
+	}
+
+	if (cursor->set & FB_CUR_SETHOT)
+		info->cursor.hot = cursor->hot;
+
+	if (cursor->set & FB_CUR_SETCMAP) {
+		if (cursor->image.depth == 1) {
+			u32 fg = cursor->image.fg_color;
+			u32 bg = cursor->image.bg_color;
+
+			info->cursor.image.fg_color = fg;
+			info->cursor.image.bg_color = bg;
+
+			fg = ((fg & 0xff0000) >> 16) | ((fg & 0xff) << 16) | (fg & 0xff00);
+			bg = ((bg & 0xff0000) >> 16) | ((bg & 0xff) << 16) | (bg & 0xff00);
+			write_le32(NEOREG_CURSFGCOLOR, fg, par);
+			write_le32(NEOREG_CURSBGCOLOR, bg, par);
+		}
+	}
+
+	if (cursor->set & FB_CUR_SETSHAPE)
+		fb_load_cursor_image(info);
+
+	if (info->cursor.enable)
+		write_le32(NEOREG_CURSCNTL, NEO_CURS_ENABLE, par);
+	return 0;
+}
+*/
+
 static struct fb_ops neofb_ops = {
 	.owner		= THIS_MODULE,
+	.fb_open	= neofb_open,
+	.fb_release	= neofb_release,
 	.fb_check_var	= neofb_check_var,
 	.fb_set_par	= neofb_set_par,
 	.fb_setcolreg	= neofb_setcolreg,
@@ -1631,31 +1742,31 @@
 	return 0;
 }
 
-static void __devinit neo_unmap_mmio(struct fb_info *info)
+static void neo_unmap_mmio(struct fb_info *info)
 {
 	struct neofb_par *par = (struct neofb_par *) info->par;
 
 	DBG("neo_unmap_mmio");
 
-	if (par->mmio_vbase) {
-		iounmap(par->mmio_vbase);
-		par->mmio_vbase = NULL;
+	iounmap(par->mmio_vbase);
+	par->mmio_vbase = NULL;
 
-		release_mem_region(info->fix.mmio_start,
-				   info->fix.mmio_len);
-	}
+	release_mem_region(info->fix.mmio_start,
+			   info->fix.mmio_len);
 }
 
 static int __devinit neo_map_video(struct fb_info *info,
 				   struct pci_dev *dev, int video_len)
 {
+	//unsigned long addr;
+
 	DBG("neo_map_video");
 
 	info->fix.smem_start = pci_resource_start(dev, 0);
 	info->fix.smem_len = video_len;
 
-	if (!request_mem_region
-	    (info->fix.smem_start, info->fix.smem_len, "frame buffer")) {
+	if (!request_mem_region(info->fix.smem_start, info->fix.smem_len,
+				"frame buffer")) {
 		printk("neofb: frame buffer in use\n");
 		return -EBUSY;
 	}
@@ -1673,33 +1784,36 @@
 
 #ifdef CONFIG_MTRR
 	((struct neofb_par *)(info->par))->mtrr =
-	    mtrr_add(info->fix.smem_start, pci_resource_len(dev, 0),
-		     MTRR_TYPE_WRCOMB, 1);
+		mtrr_add(info->fix.smem_start, pci_resource_len(dev, 0),
+				MTRR_TYPE_WRCOMB, 1);
 #endif
 
 	/* Clear framebuffer, it's all white in memory after boot */
 	memset(info->screen_base, 0, info->fix.smem_len);
+
+	/* Allocate Cursor drawing pad.
+	info->fix.smem_len -= PAGE_SIZE;
+	addr = info->fix.smem_start + info->fix.smem_len;
+	write_le32(NEOREG_CURSMEMPOS, ((0x000f & (addr >> 10)) << 8) |
+					((0x0ff0 & (addr >> 10)) >> 4), par);
+	addr = (unsigned long) info->screen_base + info->fix.smem_len;
+	info->sprite.addr = (u8 *) addr; */
 	return 0;
 }
 
-static void __devinit neo_unmap_video(struct fb_info *info)
+static void neo_unmap_video(struct fb_info *info)
 {
-
-	DBG("neo_unmap_video");
-
-	if (info->screen_base) {
 #ifdef CONFIG_MTRR
-		struct neofb_par *par = (struct neofb_par *) info->par;
-		mtrr_del(par->mtrr, info->fix.smem_start,
-			 info->fix.smem_len);
-#endif
+	struct neofb_par *par = (struct neofb_par *) info->par;
 
-		iounmap(info->screen_base);
-		info->screen_base = NULL;
+	mtrr_del(par->mtrr, info->fix.smem_start,
+		 info->fix.smem_len);
+#endif
+	iounmap(info->screen_base);
+	info->screen_base = NULL;
 
-		release_mem_region(info->fix.smem_start,
-				   info->fix.smem_len);
-	}
+	release_mem_region(info->fix.smem_start,
+			   info->fix.smem_len);
 }
 
 static int __devinit neo_init_hw(struct fb_info *info)
@@ -1723,16 +1837,16 @@
 	printk(KERN_DEBUG "--- Neo extended register dump ---\n");
 	for (w = 0; w < 0x85; w++)
 		printk(KERN_DEBUG "CR %p: %p\n", (void *) w,
-		       (void *) VGArCR(w));
+		       (void *) vga_rcrt(NULL, w);
 	for (w = 0; w < 0xC7; w++)
 		printk(KERN_DEBUG "GR %p: %p\n", (void *) w,
-		       (void *) VGArGR(w));
+		       (void *) vga_rgfx(NULL, w));
 #endif
 
 	/* Determine the panel type */
-	VGAwGR(0x09, 0x26);
-	type = VGArGR(0x21);
-	display = VGArGR(0x20);
+	vga_wgfx(NULL, 0x09, 0x26);
+	type = vga_rgfx(NULL, 0x21);
+	display = vga_rgfx(NULL, 0x20);
 	if (!par->internal_display && !par->external_display) {
 		par->internal_display = display & 2 || !(display & 3) ? 1 : 0;
 		par->external_display = display & 1;
@@ -1742,8 +1856,8 @@
 	}
 
 	/* Determine panel width -- used in NeoValidMode. */
-	w = VGArGR(0x20);
-	VGAwGR(0x09, 0x00);
+	w = vga_rgfx(NULL, 0x20);
+	vga_wgfx(NULL, 0x09, 0x00);
 	switch ((w & 0x18) >> 3) {
 	case 0x00:
 		par->NeoPanelWidth = 640;
@@ -1868,10 +1982,16 @@
 		par->neo2200 = (Neo2200 *) par->mmio_vbase;
 		break;
 	}
-
+/*
+	info->sprite.size = CursorMem;
+	info->sprite.scan_align = 1;
+	info->sprite.buf_align = 1;
+	info->sprite.flags = FB_PIXMAP_IO;
+	info->sprite.outbuf = neofb_draw_cursor;
+*/
 	par->maxClock = maxClock;
-
-	return videoRam * 1024;
+	par->cursorOff = CursorOff;
+	return ((videoRam * 1024));
 }
 
 
@@ -1881,15 +2001,12 @@
 	struct fb_info *info;
 	struct neofb_par *par;
 
-	info = kmalloc(sizeof(struct fb_info) + sizeof(struct neofb_par) + 
-		       sizeof(u32) * 17, GFP_KERNEL);
+	info = framebuffer_alloc(sizeof(struct neofb_par) + sizeof(u32) * 256, &dev->dev);
 
 	if (!info)
 		return NULL;
 
-	memset(info, 0, sizeof(struct fb_info) + sizeof(struct neofb_par) + sizeof(u32) * 17);
-
-	par = (struct neofb_par *) (info + 1);
+	par = info->par;
 
 	info->fix.accel = id->driver_data;
 
@@ -1939,23 +2056,18 @@
 
 	info->fbops = &neofb_ops;
 	info->flags = FBINFO_FLAG_DEFAULT;
-	info->par = par;
 	info->pseudo_palette = (void *) (par + 1);
-
-	fb_alloc_cmap(&info->cmap, NR_PALETTE, 0);
-
 	return info;
 }
 
-static void __devinit neo_free_fb_info(struct fb_info *info)
+static void neo_free_fb_info(struct fb_info *info)
 {
 	if (info) {
 		/*
 		 * Free the colourmap
 		 */
-		fb_alloc_cmap(&info->cmap, 0, 0);
-
-		kfree(info);
+		fb_dealloc_cmap(&info->cmap);
+		framebuffer_release(info);
 	}
 }
 
@@ -1978,21 +2090,24 @@
 	err = -ENOMEM;
 	info = neo_alloc_fb_info(dev, id);
 	if (!info)
-		goto failed;
+		return err;
 
 	err = neo_map_mmio(info, dev);
 	if (err)
-		goto failed;
+		goto err_map_mmio;
 
 	video_len = neo_init_hw(info);
 	if (video_len < 0) {
 		err = video_len;
-		goto failed;
+		goto err_init_hw;
 	}
 
 	err = neo_map_video(info, dev, video_len);
 	if (err)
-		goto failed;
+		goto err_init_hw;
+
+	if (neofb_check_var(&info->var, info))
+		goto err_map_video;
 
 	/*
 	 * Calculate the hsync and vsync frequencies.  Note that
@@ -2013,10 +2128,12 @@
 	       info->fix.smem_len >> 10, info->var.xres,
 	       info->var.yres, h_sync / 1000, h_sync % 1000, v_sync);
 
+	if (fb_alloc_cmap(&info->cmap, 256, 0) < 0)
+		goto err_map_video;
 
 	err = register_framebuffer(info);
 	if (err < 0)
-		goto failed;
+		goto err_reg_fb;
 
 	printk(KERN_INFO "fb%d: %s frame buffer device\n",
 	       info->node, info->fix.id);
@@ -2027,11 +2144,14 @@
 	pci_set_drvdata(dev, info);
 	return 0;
 
-      failed:
+err_reg_fb:
+	fb_dealloc_cmap(&info->cmap);
+err_map_video:
 	neo_unmap_video(info);
+err_init_hw:
 	neo_unmap_mmio(info);
+err_map_mmio:
 	neo_free_fb_info(info);
-
 	return err;
 }
 
@@ -2103,24 +2223,6 @@
 	.remove =	__devexit_p(neofb_remove)
 };
 
-/* **************************** init-time only **************************** */
-
-static void __init neo_init(void)
-{
-	DBG("neo_init");
-	pci_register_driver(&neofb_driver);
-}
-
-/* **************************** exit-time only **************************** */
-
-static void __exit neo_done(void)
-{
-	DBG("neo_done");
-	pci_unregister_driver(&neofb_driver);
-}
-
-#ifndef MODULE
-
 /* ************************* init in-kernel code ************************** */
 
 int __init neofb_setup(char *options)
@@ -2136,8 +2238,6 @@
 		if (!*this_opt)
 			continue;
 
-		if (!strncmp(this_opt, "disabled", 8))
-			disabled = 1;
 		if (!strncmp(this_opt, "internal", 8))
 			internal = 1;
 		if (!strncmp(this_opt, "external", 8))
@@ -2153,41 +2253,18 @@
 	return 0;
 }
 
-static int __initdata initialized = 0;
-
 int __init neofb_init(void)
 {
-	DBG("neofb_init");
-
-	if (disabled)
-		return -ENXIO;
-
-	if (!initialized) {
-		initialized = 1;
-		neo_init();
-	}
-
-	/* never return failure, user can hotplug card later... */
-	return 0;
+	return pci_register_driver(&neofb_driver);
 }
 
-#else
-
-/* *************************** init module code **************************** */
+#ifdef MODULE
 
-int __init init_module(void)
+static void __exit neofb_exit(void)
 {
-	DBG("init_module");
-
-	if (disabled)
-		return -ENXIO;
-
-	neo_init();
-
-	/* never return failure; user can hotplug card later... */
-	return 0;
+	pci_unregister_driver(&neofb_driver);
 }
 
+module_init(neofb_init);
+module_exit(neofb_exit);
 #endif				/* MODULE */
-
-module_exit(neo_done);
diff -Nru a/drivers/video/pm2fb.c b/drivers/video/pm2fb.c
--- a/drivers/video/pm2fb.c	Sun May 16 01:18:37 2004
+++ b/drivers/video/pm2fb.c	Sun May 16 01:18:37 2004
@@ -63,6 +63,16 @@
 #endif
 
 /*
+ * The 2.4 driver calls reset_card() at init time, where it also sets the
+ * initial mode. I don't think the driver should touch the chip until
+ * the console sets a video mode. So I was calling this at the start
+ * of setting a mode. However, certainly on 1280x1024 depth 16 on my
+ * PCI Graphics Blaster Exxtreme this causes the display to smear
+ * slightly.  I don't know why. Guesses to jim.hague@acm.org.
+ */
+#undef RESET_CARD_ON_MODE_SET
+
+/*
  * Driver data 
  */
 static char *mode __initdata = NULL;
@@ -340,16 +350,7 @@
 	}
 }
 
-#if 0
-/*
- * FIXME:
- * The 2.4 driver calls this at init time, where it also sets the
- * initial mode. I don't think the driver should touch the chip
- * until the console sets a video mode. So I was calling this
- * at the start of setting a mode. However, certainly on 1280x1024
- * depth 16 this causes the display to smear slightly.
- * I don't know why. Guesses to jim.hague@acm.org.
- */
+#ifdef RESET_CARD_ON_MODE_SET
 static void reset_card(struct pm2fb_par* p)
 {
 	if (p->type == PM2_TYPE_PERMEDIA2V)
@@ -501,6 +502,8 @@
 	u32 vsync;
 
 	vsync = video;
+
+	DPRINTK("video = 0x%x\n", video);
 	
 	/*
 	 * The hardware cursor needs +vsync to recognise vert retrace.
@@ -660,6 +663,9 @@
 	u32 xres;
 	int data64;
 
+#ifdef RESET_CARD_ON_MODE_SET
+	reset_card(par);
+#endif
 	reset_config(par);
 	clear_palette(par);
     
@@ -721,8 +727,7 @@
 
 	info->fix.visual =
 		(depth == 8) ? FB_VISUAL_PSEUDOCOLOR : FB_VISUAL_TRUECOLOR;
-	info->fix.line_length =
-		info->var.xres * ((info->var.bits_per_pixel + 7) >> 3);
+	info->fix.line_length = info->var.xres * depth / 8;
 	info->cmap.len = 256;
 
 	/*
@@ -803,6 +808,8 @@
 		break;
 	}
 	set_pixclock(par, pixclock);
+	DPRINTK("Setting graphics mode at %dx%d depth %d\n",
+		info->var.xres, info->var.yres, info->var.bits_per_pixel);
 	return 0;	
 }
 
@@ -843,7 +850,8 @@
 	 *   var->{color}.offset contains start of bitfield
 	 *   var->{color}.length contains length of bitfield
 	 *   {hardwarespecific} contains width of DAC
-	 *   cmap[X] is programmed to (X << red.offset) | (X << green.offset) | (X << blue.offset)
+	 *   cmap[X] is programmed to
+	 *   (X << red.offset) | (X << green.offset) | (X << blue.offset)
 	 *   RAMDAC[X] is programmed to (red, green, blue)
 	 *
 	 * Pseudocolor:
@@ -856,8 +864,9 @@
 	 *    does not use RAMDAC (usually has 3 of them).
 	 *    var->{color}.offset contains start of bitfield
 	 *    var->{color}.length contains length of bitfield
-	 *    cmap is programmed to (red << red.offset) | (green << green.offset) |
-	 *                      (blue << blue.offset) | (transp << transp.offset)
+	 *    cmap is programmed to
+	 *    (red << red.offset) | (green << green.offset) |
+	 *    (blue << blue.offset) | (transp << transp.offset)
 	 *    RAMDAC does not exist
 	 */
 #define CNVT_TOHW(val,width) ((((val)<<(width))+0x7FFF-(val))>>16)
@@ -962,6 +971,11 @@
 	struct pm2fb_par *par = (struct pm2fb_par *) info->par;
 	u32 video = par->video;
 
+	DPRINTK("blank_mode %d\n", blank_mode);
+
+	/* Turn everything on, then disable as requested. */
+	video |= (PM2F_VIDEO_ENABLE | PM2F_HSYNC_MASK | PM2F_VSYNC_MASK);
+
 	switch (blank_mode) {
 	case 0: 	/* Screen: On; HSync: On, VSync: On */
 		break;
@@ -1030,15 +1044,12 @@
 		return err;
 	}
 
-	size = sizeof(struct fb_info) + sizeof(struct pm2fb_par) + 256 * sizeof(u32);
-
+	size = sizeof(struct pm2fb_par) + 256 * sizeof(u32);
 	info = framebuffer_alloc(size, &pdev->dev);
 	if ( !info )
 		return -ENOMEM;
-	memset(info, 0, size);
-    
-	default_par = info->par;
- 
+	default_par = (struct pm2fb_par *) info->par;
+
 	switch (pdev->device) {
 	case  PCI_DEVICE_ID_TI_TVP4020:
 		strcpy(pm2fb_fix.id, "TVP4020");
@@ -1112,7 +1123,6 @@
 
 	info->fbops		= &pm2fb_ops;
 	info->fix		= pm2fb_fix; 	
-	info->par		= default_par;
 	info->pseudo_palette	= (void *)(default_par + 1); 
 	info->flags		= FBINFO_FLAG_DEFAULT;
 
diff -Nru a/drivers/video/pxafb.c b/drivers/video/pxafb.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/drivers/video/pxafb.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,1376 @@
+/*
+ *  linux/drivers/video/pxafb.c
+ *
+ *  Copyright (C) 1999 Eric A. Thomas.
+ *  Copyright (C) 2004 Jean-Frederic Clere.
+ *  Copyright (C) 2004 Ian Campbell.
+ *  Copyright (C) 2004 Jeff Lackey.
+ *   Based on sa1100fb.c Copyright (C) 1999 Eric A. Thomas
+ *  which in turn is
+ *   Based on acornfb.c Copyright (C) Russell King.
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file COPYING in the main directory of this archive for
+ * more details.
+ *
+ *	        Intel PXA250/210 LCD Controller Frame Buffer Driver
+ *
+ * Please direct your questions and comments on this driver to the following
+ * email address:
+ *
+ *	linux-arm-kernel@lists.arm.linux.org.uk
+ *
+ */
+
+#include <linux/config.h>
+#include <linux/module.h>
+#include <linux/moduleparam.h>
+#include <linux/kernel.h>
+#include <linux/sched.h>
+#include <linux/errno.h>
+#include <linux/string.h>
+#include <linux/interrupt.h>
+#include <linux/slab.h>
+#include <linux/fb.h>
+#include <linux/delay.h>
+#include <linux/init.h>
+#include <linux/ioport.h>
+#include <linux/cpufreq.h>
+#include <linux/device.h>
+#include <linux/dma-mapping.h>
+
+#include <asm/hardware.h>
+#include <asm/io.h>
+#include <asm/irq.h>
+#include <asm/mach-types.h>
+#include <asm/uaccess.h>
+#include <asm/arch/bitfield.h>
+#include <asm/arch/pxafb.h>
+
+/*
+ * Complain if VAR is out of range.
+ */
+#define DEBUG_VAR 1
+
+#include "pxafb.h"
+
+/* Bits which should not be set in machine configuration structures */
+#define LCCR0_INVALID_CONFIG_MASK (LCCR0_OUM|LCCR0_BM|LCCR0_QDM|LCCR0_DIS|LCCR0_EFM|LCCR0_IUM|LCCR0_SFM|LCCR0_LDM|LCCR0_ENB)
+#define LCCR3_INVALID_CONFIG_MASK (LCCR3_HSP|LCCR3_VSP|LCCR3_PCD|LCCR3_BPP)
+
+static void (*pxafb_backlight_power)(int);
+static void (*pxafb_lcd_power)(int);
+
+static int pxafb_activate_var(struct fb_var_screeninfo *var, struct pxafb_info *);
+static void set_ctrlr_state(struct pxafb_info *fbi, u_int state);
+
+#ifdef CONFIG_FB_PXA_PARAMETERS
+#define PXAFB_OPTIONS_SIZE 256
+static char g_options[PXAFB_OPTIONS_SIZE] __initdata = "";
+#endif
+
+static inline void pxafb_schedule_work(struct pxafb_info *fbi, u_int state)
+{
+	unsigned long flags;
+
+	local_irq_save(flags);
+	/*
+	 * We need to handle two requests being made at the same time.
+	 * There are two important cases:
+	 *  1. When we are changing VT (C_REENABLE) while unblanking (C_ENABLE)
+	 *     We must perform the unblanking, which will do our REENABLE for us.
+	 *  2. When we are blanking, but immediately unblank before we have
+	 *     blanked.  We do the "REENABLE" thing here as well, just to be sure.
+	 */
+	if (fbi->task_state == C_ENABLE && state == C_REENABLE)
+		state = (u_int) -1;
+	if (fbi->task_state == C_DISABLE && state == C_ENABLE)
+		state = C_REENABLE;
+
+	if (state != (u_int)-1) {
+		fbi->task_state = state;
+		schedule_work(&fbi->task);
+	}
+	local_irq_restore(flags);
+}
+
+static inline u_int chan_to_field(u_int chan, struct fb_bitfield *bf)
+{
+	chan &= 0xffff;
+	chan >>= 16 - bf->length;
+	return chan << bf->offset;
+}
+
+static int
+pxafb_setpalettereg(u_int regno, u_int red, u_int green, u_int blue,
+		       u_int trans, struct fb_info *info)
+{
+	struct pxafb_info *fbi = (struct pxafb_info *)info;
+	u_int val, ret = 1;
+
+	if (regno < fbi->palette_size) {
+		val  = ((red   >>  0) & 0xf800);
+		val |= ((green >>  5) & 0x07e0);
+		val |= ((blue  >> 11) & 0x001f);
+
+		fbi->palette_cpu[regno] = val;
+		ret = 0;
+	}
+	return ret;
+}
+
+static int
+pxafb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
+		   u_int trans, struct fb_info *info)
+{
+	struct pxafb_info *fbi = (struct pxafb_info *)info;
+	unsigned int val;
+	int ret = 1;
+
+	/*
+	 * If inverse mode was selected, invert all the colours
+	 * rather than the register number.  The register number
+	 * is what you poke into the framebuffer to produce the
+	 * colour you requested.
+	 */
+	if (fbi->cmap_inverse) {
+		red   = 0xffff - red;
+		green = 0xffff - green;
+		blue  = 0xffff - blue;
+	}
+
+	/*
+	 * If greyscale is true, then we convert the RGB value
+	 * to greyscale no matter what visual we are using.
+	 */
+	if (fbi->fb.var.grayscale)
+		red = green = blue = (19595 * red + 38470 * green +
+					7471 * blue) >> 16;
+
+	switch (fbi->fb.fix.visual) {
+	case FB_VISUAL_TRUECOLOR:
+		/*
+		 * 12 or 16-bit True Colour.  We encode the RGB value
+		 * according to the RGB bitfield information.
+		 */
+		if (regno <= 16) {
+			u32 *pal = fbi->fb.pseudo_palette;
+
+			val  = chan_to_field(red, &fbi->fb.var.red);
+			val |= chan_to_field(green, &fbi->fb.var.green);
+			val |= chan_to_field(blue, &fbi->fb.var.blue);
+
+			pal[regno] = val;
+			ret = 0;
+		}
+		break;
+
+	case FB_VISUAL_STATIC_PSEUDOCOLOR:
+	case FB_VISUAL_PSEUDOCOLOR:
+		ret = pxafb_setpalettereg(regno, red, green, blue, trans, info);
+		break;
+	}
+
+	return ret;
+}
+
+/*
+ *  pxafb_bpp_to_lccr3():
+ *    Convert a bits per pixel value to the correct bit pattern for LCCR3
+ */
+static int pxafb_bpp_to_lccr3(struct fb_var_screeninfo *var)
+{
+        int ret = 0;
+        switch (var->bits_per_pixel) {
+        case 1:  ret = LCCR3_1BPP; break;
+        case 2:  ret = LCCR3_2BPP; break;
+        case 4:  ret = LCCR3_4BPP; break;
+        case 8:  ret = LCCR3_8BPP; break;
+        case 16: ret = LCCR3_16BPP; break;
+        }
+        return ret;
+}
+
+#ifdef CONFIG_CPU_FREQ
+/*
+ *  pxafb_display_dma_period()
+ *    Calculate the minimum period (in picoseconds) between two DMA
+ *    requests for the LCD controller.  If we hit this, it means we're
+ *    doing nothing but LCD DMA.
+ */
+static unsigned int pxafb_display_dma_period(struct fb_var_screeninfo *var)
+{
+       /*
+        * Period = pixclock * bits_per_byte * bytes_per_transfer
+        *              / memory_bits_per_pixel;
+        */
+       return var->pixclock * 8 * 16 / var->bits_per_pixel;
+}
+
+extern unsigned int get_clk_frequency_khz(int info);
+#endif
+
+/*
+ *  pxafb_check_var():
+ *    Get the video params out of 'var'. If a value doesn't fit, round it up,
+ *    if it's too big, return -EINVAL.
+ *
+ *    Round up in the following order: bits_per_pixel, xres,
+ *    yres, xres_virtual, yres_virtual, xoffset, yoffset, grayscale,
+ *    bitfields, horizontal timing, vertical timing.
+ */
+static int pxafb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
+{
+	struct pxafb_info *fbi = (struct pxafb_info *)info;
+
+	if (var->xres < MIN_XRES)
+		var->xres = MIN_XRES;
+	if (var->yres < MIN_YRES)
+		var->yres = MIN_YRES;
+	if (var->xres > fbi->max_xres)
+		var->xres = fbi->max_xres;
+	if (var->yres > fbi->max_yres)
+		var->yres = fbi->max_yres;
+	var->xres_virtual =
+		max(var->xres_virtual, var->xres);
+	var->yres_virtual =
+		max(var->yres_virtual, var->yres);
+
+        /*
+	 * Setup the RGB parameters for this display.
+	 *
+	 * The pixel packing format is described on page 7-11 of the
+	 * PXA2XX Developer's Manual.
+         */
+	if ( var->bits_per_pixel == 16 ) {
+		var->red.offset   = 11; var->red.length   = 5;
+		var->green.offset = 5;  var->green.length = 6;
+		var->blue.offset  = 0;  var->blue.length  = 5;
+		var->transp.offset = var->transp.length = 0;
+	} else {
+		var->red.offset = var->green.offset = var->blue.offset = var->transp.offset = 0;
+		var->red.length   = 8;
+		var->green.length = 8;
+		var->blue.length  = 8;
+		var->transp.length = 0;
+	}
+
+#ifdef CONFIG_CPU_FREQ
+	DPRINTK("dma period = %d ps, clock = %d kHz\n",
+		pxafb_display_dma_period(var),
+		get_clk_frequency_khz(0));
+#endif
+
+	return 0;
+}
+
+static inline void pxafb_set_truecolor(u_int is_true_color)
+{
+	DPRINTK("true_color = %d\n", is_true_color);
+	// do your machine-specific setup if needed
+}
+
+/*
+ * pxafb_set_par():
+ *	Set the user defined part of the display for the specified console
+ */
+static int pxafb_set_par(struct fb_info *info)
+{
+	struct pxafb_info *fbi = (struct pxafb_info *)info;
+	struct fb_var_screeninfo *var = &info->var;
+	unsigned long palette_mem_size;
+
+	DPRINTK("set_par\n");
+
+	if (var->bits_per_pixel == 16)
+		fbi->fb.fix.visual = FB_VISUAL_TRUECOLOR;
+	else if (!fbi->cmap_static)
+		fbi->fb.fix.visual = FB_VISUAL_PSEUDOCOLOR;
+	else {
+		/*
+		 * Some people have weird ideas about wanting static
+		 * pseudocolor maps.  I suspect their user space
+		 * applications are broken.
+		 */
+		fbi->fb.fix.visual = FB_VISUAL_STATIC_PSEUDOCOLOR;
+	}
+
+	fbi->fb.fix.line_length = var->xres_virtual *
+				  var->bits_per_pixel / 8;
+	fbi->palette_size = var->bits_per_pixel == 8 ? 256 : 16;
+
+	palette_mem_size = fbi->palette_size * sizeof(u16);
+
+	DPRINTK("palette_mem_size = 0x%08lx\n", (u_long) palette_mem_size);
+
+	fbi->palette_cpu = (u16 *)(fbi->map_cpu + PAGE_SIZE - palette_mem_size);
+	fbi->palette_dma = fbi->map_dma + PAGE_SIZE - palette_mem_size;
+
+	/*
+	 * Set (any) board control register to handle new color depth
+	 */
+	pxafb_set_truecolor(fbi->fb.fix.visual == FB_VISUAL_TRUECOLOR);
+
+	pxafb_activate_var(var, fbi);
+
+	return 0;
+}
+
+/*
+ * Formal definition of the VESA spec:
+ *  On
+ *  	This refers to the state of the display when it is in full operation
+ *  Stand-By
+ *  	This defines an optional operating state of minimal power reduction with
+ *  	the shortest recovery time
+ *  Suspend
+ *  	This refers to a level of power management in which substantial power
+ *  	reduction is achieved by the display.  The display can have a longer
+ *  	recovery time from this state than from the Stand-by state
+ *  Off
+ *  	This indicates that the display is consuming the lowest level of power
+ *  	and is non-operational. Recovery from this state may optionally require
+ *  	the user to manually power on the monitor
+ *
+ *  Now, the fbdev driver adds an additional state, (blank), where they
+ *  turn off the video (maybe by colormap tricks), but don't mess with the
+ *  video itself: think of it semantically between on and Stand-By.
+ *
+ *  So here's what we should do in our fbdev blank routine:
+ *
+ *  	VESA_NO_BLANKING (mode 0)	Video on,  front/back light on
+ *  	VESA_VSYNC_SUSPEND (mode 1)  	Video on,  front/back light off
+ *  	VESA_HSYNC_SUSPEND (mode 2)  	Video on,  front/back light off
+ *  	VESA_POWERDOWN (mode 3)		Video off, front/back light off
+ *
+ *  This will match the matrox implementation.
+ */
+
+/*
+ * pxafb_blank():
+ *	Blank the display by setting all palette values to zero.  Note, the
+ * 	12 and 16 bpp modes don't really use the palette, so this will not
+ *      blank the display in all modes.
+ */
+static int pxafb_blank(int blank, struct fb_info *info)
+{
+	struct pxafb_info *fbi = (struct pxafb_info *)info;
+	int i;
+
+	DPRINTK("pxafb_blank: blank=%d\n", blank);
+
+	switch (blank) {
+	case VESA_POWERDOWN:
+	case VESA_VSYNC_SUSPEND:
+	case VESA_HSYNC_SUSPEND:
+		if (fbi->fb.fix.visual == FB_VISUAL_PSEUDOCOLOR ||
+		    fbi->fb.fix.visual == FB_VISUAL_STATIC_PSEUDOCOLOR)
+			for (i = 0; i < fbi->palette_size; i++)
+				pxafb_setpalettereg(i, 0, 0, 0, 0, info);
+
+		pxafb_schedule_work(fbi, C_DISABLE);
+		//TODO if (pxafb_blank_helper) pxafb_blank_helper(blank);
+		break;
+
+	case VESA_NO_BLANKING:
+		//TODO if (pxafb_blank_helper) pxafb_blank_helper(blank);
+		if (fbi->fb.fix.visual == FB_VISUAL_PSEUDOCOLOR ||
+		    fbi->fb.fix.visual == FB_VISUAL_STATIC_PSEUDOCOLOR)
+			fb_set_cmap(&fbi->fb.cmap, 1, info);
+		pxafb_schedule_work(fbi, C_ENABLE);
+	}
+	return 0;
+}
+
+static struct fb_ops pxafb_ops = {
+	.owner		= THIS_MODULE,
+	.fb_check_var	= pxafb_check_var,
+	.fb_set_par	= pxafb_set_par,
+	.fb_setcolreg	= pxafb_setcolreg,
+	.fb_fillrect	= cfb_fillrect,
+	.fb_copyarea	= cfb_copyarea,
+	.fb_imageblit	= cfb_imageblit,
+	.fb_blank	= pxafb_blank,
+	.fb_cursor	= soft_cursor,
+};
+
+/*
+ * Calculate the PCD value from the clock rate (in picoseconds).
+ * We take account of the PPCR clock setting.
+ * From PXA Developer's Manual:
+ *
+ *   PixelClock =      LCLK
+ *                -------------
+ *                2 ( PCD + 1 )
+ *
+ *   PCD =      LCLK
+ *         ------------- - 1
+ *         2(PixelClock)
+ *
+ * Where:
+ *   LCLK = LCD/Memory Clock
+ *   PCD = LCCR3[7:0]
+ *
+ * PixelClock here is in Hz while the pixclock argument given is the
+ * period in picoseconds. Hence PixelClock = 1 / ( pixclock * 10^-12 )
+ *
+ * The function get_lclk_frequency_10khz returns LCLK in units of
+ * 10khz. Calling the result of this function lclk gives us the
+ * following
+ *
+ *    PCD = (lclk * 10^4 ) * ( pixclock * 10^-12 )
+ *          -------------------------------------- - 1
+ *                          2
+ *
+ * Factoring the 10^4 and 10^-12 out gives 10^-8 == 1 / 100000000 as used below.
+ */
+static inline unsigned int get_pcd(unsigned int pixclock)
+{
+	unsigned long long pcd;
+
+	/* FIXME: Need to take into account Double Pixel Clock mode
+         * (DPC) bit? or perhaps set it based on the various clock
+         * speeds */
+
+	pcd = (unsigned long long)get_lclk_frequency_10khz() * (unsigned long long)pixclock;
+	pcd /= 100000000 * 2;
+	/* no need for this, since we should subtract 1 anyway. they cancel */
+	/* pcd += 1; */ /* make up for integer math truncations */
+	return (unsigned int)pcd;
+}
+
+/*
+ * pxafb_activate_var():
+ *	Configures LCD Controller based on entries in var parameter.  Settings are
+ *	only written to the controller if changes were made.
+ */
+static int pxafb_activate_var(struct fb_var_screeninfo *var, struct pxafb_info *fbi)
+{
+	struct pxafb_lcd_reg new_regs;
+	u_long flags;
+	u_int pcd = get_pcd(var->pixclock);
+
+	DPRINTK("Configuring PXA LCD\n");
+
+	DPRINTK("var: xres=%d hslen=%d lm=%d rm=%d\n",
+		var->xres, var->hsync_len,
+		var->left_margin, var->right_margin);
+	DPRINTK("var: yres=%d vslen=%d um=%d bm=%d\n",
+		var->yres, var->vsync_len,
+		var->upper_margin, var->lower_margin);
+	DPRINTK("var: pixclock=%d pcd=%d\n", var->pixclock, pcd);
+
+#if DEBUG_VAR
+	if (var->xres < 16        || var->xres > 1024)
+		printk(KERN_ERR "%s: invalid xres %d\n",
+			fbi->fb.fix.id, var->xres);
+	switch(var->bits_per_pixel) {
+	case 1:
+	case 2:
+	case 4:
+	case 8:
+	case 16:
+		break;
+	default:
+		printk(KERN_ERR "%s: invalid bit depth %d\n",
+		       fbi->fb.fix.id, var->bits_per_pixel);
+		break;
+	}
+	if (var->hsync_len < 1    || var->hsync_len > 64)
+		printk(KERN_ERR "%s: invalid hsync_len %d\n",
+			fbi->fb.fix.id, var->hsync_len);
+	if (var->left_margin < 1  || var->left_margin > 255)
+		printk(KERN_ERR "%s: invalid left_margin %d\n",
+			fbi->fb.fix.id, var->left_margin);
+	if (var->right_margin < 1 || var->right_margin > 255)
+		printk(KERN_ERR "%s: invalid right_margin %d\n",
+			fbi->fb.fix.id, var->right_margin);
+	if (var->yres < 1         || var->yres > 1024)
+		printk(KERN_ERR "%s: invalid yres %d\n",
+			fbi->fb.fix.id, var->yres);
+	if (var->vsync_len < 1    || var->vsync_len > 64)
+		printk(KERN_ERR "%s: invalid vsync_len %d\n",
+			fbi->fb.fix.id, var->vsync_len);
+	if (var->upper_margin < 0 || var->upper_margin > 255)
+		printk(KERN_ERR "%s: invalid upper_margin %d\n",
+			fbi->fb.fix.id, var->upper_margin);
+	if (var->lower_margin < 0 || var->lower_margin > 255)
+		printk(KERN_ERR "%s: invalid lower_margin %d\n",
+			fbi->fb.fix.id, var->lower_margin);
+#endif
+
+	new_regs.lccr0 = fbi->lccr0 |
+		(LCCR0_LDM | LCCR0_SFM | LCCR0_IUM | LCCR0_EFM |
+                 LCCR0_QDM | LCCR0_BM  | LCCR0_OUM);
+
+	new_regs.lccr1 =
+		LCCR1_DisWdth(var->xres) +
+		LCCR1_HorSnchWdth(var->hsync_len) +
+		LCCR1_BegLnDel(var->left_margin) +
+		LCCR1_EndLnDel(var->right_margin);
+
+	new_regs.lccr2 =
+		LCCR2_DisHght(var->yres) +
+		LCCR2_VrtSnchWdth(var->vsync_len) +
+		LCCR2_BegFrmDel(var->upper_margin) +
+		LCCR2_EndFrmDel(var->lower_margin);
+
+	new_regs.lccr3 = fbi->lccr3 |
+		pxafb_bpp_to_lccr3(var) |
+		(var->sync & FB_SYNC_HOR_HIGH_ACT ? LCCR3_HorSnchH : LCCR3_HorSnchL) |
+		(var->sync & FB_SYNC_VERT_HIGH_ACT ? LCCR3_VrtSnchH : LCCR3_VrtSnchL);
+
+	if (pcd)
+		new_regs.lccr3 |= LCCR3_PixClkDiv(pcd);
+
+	DPRINTK("nlccr0 = 0x%08x\n", new_regs.lccr0);
+	DPRINTK("nlccr1 = 0x%08x\n", new_regs.lccr1);
+	DPRINTK("nlccr2 = 0x%08x\n", new_regs.lccr2);
+	DPRINTK("nlccr3 = 0x%08x\n", new_regs.lccr3);
+
+	/* Update shadow copy atomically */
+	local_irq_save(flags);
+
+	/* setup dma descriptors */
+	fbi->dmadesc_fblow_cpu = (struct pxafb_dma_descriptor *)((unsigned int)fbi->palette_cpu - 3*16);
+	fbi->dmadesc_fbhigh_cpu = (struct pxafb_dma_descriptor *)((unsigned int)fbi->palette_cpu - 2*16);
+	fbi->dmadesc_palette_cpu = (struct pxafb_dma_descriptor *)((unsigned int)fbi->palette_cpu - 1*16);
+
+	fbi->dmadesc_fblow_dma = fbi->palette_dma - 3*16;
+	fbi->dmadesc_fbhigh_dma = fbi->palette_dma - 2*16;
+	fbi->dmadesc_palette_dma = fbi->palette_dma - 1*16;
+
+	#define BYTES_PER_PANEL ((fbi->lccr0 & LCCR0_SDS) == LCCR0_Dual ? \
+                                (var->xres * var->yres * var->bits_per_pixel / 8 / 2) : \
+                                (var->xres * var->yres * var->bits_per_pixel / 8))
+
+	/* populate descriptors */
+	fbi->dmadesc_fblow_cpu->fdadr = fbi->dmadesc_fblow_dma;
+	fbi->dmadesc_fblow_cpu->fsadr = fbi->screen_dma + BYTES_PER_PANEL;
+	fbi->dmadesc_fblow_cpu->fidr  = 0;
+	fbi->dmadesc_fblow_cpu->ldcmd = BYTES_PER_PANEL;
+
+	fbi->fdadr1 = fbi->dmadesc_fblow_dma; /* only used in dual-panel mode */
+
+	fbi->dmadesc_fbhigh_cpu->fsadr = fbi->screen_dma;
+	fbi->dmadesc_fbhigh_cpu->fidr = 0;
+	fbi->dmadesc_fbhigh_cpu->ldcmd = BYTES_PER_PANEL;
+
+	fbi->dmadesc_palette_cpu->fsadr = fbi->palette_dma;
+	fbi->dmadesc_palette_cpu->fidr  = 0;
+	fbi->dmadesc_palette_cpu->ldcmd = (fbi->palette_size * 2) | LDCMD_PAL;
+
+	if( var->bits_per_pixel < 12)
+	{
+		/* assume any mode with <12 bpp is palette driven */
+		fbi->dmadesc_palette_cpu->fdadr = fbi->dmadesc_fbhigh_dma;
+		fbi->dmadesc_fbhigh_cpu->fdadr = fbi->dmadesc_palette_dma;
+		fbi->fdadr0 = fbi->dmadesc_palette_dma; /* flips back and forth between pal and fbhigh */
+	}
+	else
+	{
+		/* palette shouldn't be loaded in true-color mode */
+		fbi->dmadesc_fbhigh_cpu->fdadr = fbi->dmadesc_fbhigh_dma;
+		fbi->fdadr0 = fbi->dmadesc_fbhigh_dma; /* no pal just fbhigh */
+		/* init it to something, even though we won't be using it */
+		fbi->dmadesc_palette_cpu->fdadr = fbi->dmadesc_palette_dma;
+	}
+
+#if 0
+	DPRINTK("fbi->dmadesc_fblow_cpu = 0x%p\n", fbi->dmadesc_fblow_cpu);
+	DPRINTK("fbi->dmadesc_fbhigh_cpu = 0x%p\n", fbi->dmadesc_fbhigh_cpu);
+	DPRINTK("fbi->dmadesc_palette_cpu = 0x%p\n", fbi->dmadesc_palette_cpu);
+	DPRINTK("fbi->dmadesc_fblow_dma = 0x%x\n", fbi->dmadesc_fblow_dma);
+	DPRINTK("fbi->dmadesc_fbhigh_dma = 0x%x\n", fbi->dmadesc_fbhigh_dma);
+	DPRINTK("fbi->dmadesc_palette_dma = 0x%x\n", fbi->dmadesc_palette_dma);
+
+	DPRINTK("fbi->dmadesc_fblow_cpu->fdadr = 0x%x\n", fbi->dmadesc_fblow_cpu->fdadr);
+	DPRINTK("fbi->dmadesc_fbhigh_cpu->fdadr = 0x%x\n", fbi->dmadesc_fbhigh_cpu->fdadr);
+	DPRINTK("fbi->dmadesc_palette_cpu->fdadr = 0x%x\n", fbi->dmadesc_palette_cpu->fdadr);
+
+	DPRINTK("fbi->dmadesc_fblow_cpu->fsadr = 0x%x\n", fbi->dmadesc_fblow_cpu->fsadr);
+	DPRINTK("fbi->dmadesc_fbhigh_cpu->fsadr = 0x%x\n", fbi->dmadesc_fbhigh_cpu->fsadr);
+	DPRINTK("fbi->dmadesc_palette_cpu->fsadr = 0x%x\n", fbi->dmadesc_palette_cpu->fsadr);
+
+	DPRINTK("fbi->dmadesc_fblow_cpu->ldcmd = 0x%x\n", fbi->dmadesc_fblow_cpu->ldcmd);
+	DPRINTK("fbi->dmadesc_fbhigh_cpu->ldcmd = 0x%x\n", fbi->dmadesc_fbhigh_cpu->ldcmd);
+	DPRINTK("fbi->dmadesc_palette_cpu->ldcmd = 0x%x\n", fbi->dmadesc_palette_cpu->ldcmd);
+#endif
+
+	fbi->reg_lccr0 = new_regs.lccr0;
+	fbi->reg_lccr1 = new_regs.lccr1;
+	fbi->reg_lccr2 = new_regs.lccr2;
+	fbi->reg_lccr3 = new_regs.lccr3;
+	local_irq_restore(flags);
+
+	/*
+	 * Only update the registers if the controller is enabled
+	 * and something has changed.
+	 */
+	if ((LCCR0  != fbi->reg_lccr0) || (LCCR1  != fbi->reg_lccr1) ||
+	    (LCCR2  != fbi->reg_lccr2) || (LCCR3  != fbi->reg_lccr3) ||
+	    (FDADR0 != fbi->fdadr0)    || (FDADR1 != fbi->fdadr1))
+		pxafb_schedule_work(fbi, C_REENABLE);
+
+	return 0;
+}
+
+/*
+ * NOTE!  The following functions are purely helpers for set_ctrlr_state.
+ * Do not call them directly; set_ctrlr_state does the correct serialisation
+ * to ensure that things happen in the right way 100% of time time.
+ *	-- rmk
+ */
+static inline void __pxafb_backlight_power(struct pxafb_info *fbi, int on)
+{
+	DPRINTK("backlight o%s\n", on ? "n" : "ff");
+
+ 	if (pxafb_backlight_power)
+ 		pxafb_backlight_power(on);
+}
+
+static inline void __pxafb_lcd_power(struct pxafb_info *fbi, int on)
+{
+	DPRINTK("LCD power o%s\n", on ? "n" : "ff");
+
+	if (pxafb_lcd_power)
+		pxafb_lcd_power(on);
+}
+
+static void pxafb_setup_gpio(struct pxafb_info *fbi)
+{
+        unsigned int lccr0 = fbi->lccr0;
+
+	/*
+	 * setup is based on type of panel supported
+        */
+
+	/* 4 bit interface */
+	if ((lccr0 & LCCR0_CMS) == LCCR0_Mono &&
+	    (lccr0 & LCCR0_SDS) == LCCR0_Sngl &&
+	    (lccr0 & LCCR0_DPD) == LCCR0_4PixMono)
+	{
+		// bits 58-61
+		GPDR1 |= (0xf << 26);
+		GAFR1_U = (GAFR1_U & ~(0xff << 20)) | (0xaa << 20);
+
+		// bits 74-77
+		GPDR2 |= (0xf << 10);
+		GAFR2_L = (GAFR2_L & ~(0xff << 20)) | (0xaa << 20);
+	}
+
+	/* 8 bit interface */
+        else if (((lccr0 & LCCR0_CMS) == LCCR0_Mono &&
+		  ((lccr0 & LCCR0_SDS) == LCCR0_Dual || (lccr0 & LCCR0_DPD) == LCCR0_8PixMono)) ||
+                 ((lccr0 & LCCR0_CMS) == LCCR0_Color &&
+		  (lccr0 & LCCR0_PAS) == LCCR0_Pas && (lccr0 & LCCR0_SDS) == LCCR0_Sngl))
+	{
+		// bits 58-65
+		GPDR1 |= (0x3f << 26);
+		GPDR2 |= (0x3);
+
+		GAFR1_U = (GAFR1_U & ~(0xfff << 20)) | (0xaaa << 20);
+		GAFR2_L = (GAFR2_L & ~0xf) | (0xa);
+
+		// bits 74-77
+		GPDR2 |= (0xf << 10);
+		GAFR2_L = (GAFR2_L & ~(0xff << 20)) | (0xaa << 20);
+	}
+
+	/* 16 bit interface */
+	else if ((lccr0 & LCCR0_CMS) == LCCR0_Color &&
+		 ((lccr0 & LCCR0_SDS) == LCCR0_Dual || (lccr0 & LCCR0_PAS) == LCCR0_Act))
+	{
+		// bits 58-77
+		GPDR1 |= (0x3f << 26);
+		GPDR2 |= 0x00003fff;
+
+		GAFR1_U = (GAFR1_U & ~(0xfff << 20)) | (0xaaa << 20);
+		GAFR2_L = (GAFR2_L & 0xf0000000) | 0x0aaaaaaa;
+	}
+
+	else {
+	        printk( KERN_ERR "pxafb_setup_gpio: unable to determine bits per pixel\n");
+        }
+}
+
+static void pxafb_enable_controller(struct pxafb_info *fbi)
+{
+	DPRINTK("Enabling LCD controller\n");
+	DPRINTK("fdadr0 0x%08x\n", (unsigned int) fbi->fdadr0);
+	DPRINTK("fdadr1 0x%08x\n", (unsigned int) fbi->fdadr1);
+	DPRINTK("reg_lccr0 0x%08x\n", (unsigned int) fbi->reg_lccr0);
+	DPRINTK("reg_lccr1 0x%08x\n", (unsigned int) fbi->reg_lccr1);
+	DPRINTK("reg_lccr2 0x%08x\n", (unsigned int) fbi->reg_lccr2);
+	DPRINTK("reg_lccr3 0x%08x\n", (unsigned int) fbi->reg_lccr3);
+
+	/* Sequence from 11.7.10 */
+	LCCR3 = fbi->reg_lccr3;
+	LCCR2 = fbi->reg_lccr2;
+	LCCR1 = fbi->reg_lccr1;
+	LCCR0 = fbi->reg_lccr0 & ~LCCR0_ENB;
+
+	FDADR0 = fbi->fdadr0;
+	FDADR1 = fbi->fdadr1;
+	LCCR0 |= LCCR0_ENB;
+
+	DPRINTK("FDADR0 0x%08x\n", (unsigned int) FDADR0);
+	DPRINTK("FDADR1 0x%08x\n", (unsigned int) FDADR1);
+	DPRINTK("LCCR0 0x%08x\n", (unsigned int) LCCR0);
+	DPRINTK("LCCR1 0x%08x\n", (unsigned int) LCCR1);
+	DPRINTK("LCCR2 0x%08x\n", (unsigned int) LCCR2);
+	DPRINTK("LCCR3 0x%08x\n", (unsigned int) LCCR3);
+}
+
+static void pxafb_disable_controller(struct pxafb_info *fbi)
+{
+	DECLARE_WAITQUEUE(wait, current);
+
+	DPRINTK("Disabling LCD controller\n");
+
+	add_wait_queue(&fbi->ctrlr_wait, &wait);
+	set_current_state(TASK_UNINTERRUPTIBLE);
+
+	LCSR = 0xffffffff;	/* Clear LCD Status Register */
+	LCCR0 &= ~LCCR0_LDM;	/* Enable LCD Disable Done Interrupt */
+	//TODO?enable_irq(IRQ_LCD);  /* Enable LCD IRQ */
+	LCCR0 &= ~LCCR0_ENB;	/* Disable LCD Controller */
+
+	schedule_timeout(20 * HZ / 1000);
+	remove_wait_queue(&fbi->ctrlr_wait, &wait);
+}
+
+/*
+ *  pxafb_handle_irq: Handle 'LCD DONE' interrupts.
+ */
+static irqreturn_t pxafb_handle_irq(int irq, void *dev_id, struct pt_regs *regs)
+{
+	struct pxafb_info *fbi = dev_id;
+	unsigned int lcsr = LCSR;
+
+	if (lcsr & LCSR_LDD) {
+		LCCR0 |= LCCR0_LDM;
+		wake_up(&fbi->ctrlr_wait);
+	}
+
+	LCSR = lcsr;
+	return IRQ_HANDLED;
+}
+
+/*
+ * This function must be called from task context only, since it will
+ * sleep when disabling the LCD controller, or if we get two contending
+ * processes trying to alter state.
+ */
+static void set_ctrlr_state(struct pxafb_info *fbi, u_int state)
+{
+	u_int old_state;
+
+	down(&fbi->ctrlr_sem);
+
+	old_state = fbi->state;
+
+	/*
+	 * Hack around fbcon initialisation.
+	 */
+	if (old_state == C_STARTUP && state == C_REENABLE)
+		state = C_ENABLE;
+
+	switch (state) {
+	case C_DISABLE_CLKCHANGE:
+		/*
+		 * Disable controller for clock change.  If the
+		 * controller is already disabled, then do nothing.
+		 */
+		if (old_state != C_DISABLE && old_state != C_DISABLE_PM) {
+			fbi->state = state;
+			//TODO __pxafb_lcd_power(fbi, 0);
+			pxafb_disable_controller(fbi);
+		}
+		break;
+
+	case C_DISABLE_PM:
+	case C_DISABLE:
+		/*
+		 * Disable controller
+		 */
+		if (old_state != C_DISABLE) {
+			fbi->state = state;
+			__pxafb_backlight_power(fbi, 0);
+			__pxafb_lcd_power(fbi, 0);
+			if (old_state != C_DISABLE_CLKCHANGE)
+				pxafb_disable_controller(fbi);
+		}
+		break;
+
+	case C_ENABLE_CLKCHANGE:
+		/*
+		 * Enable the controller after clock change.  Only
+		 * do this if we were disabled for the clock change.
+		 */
+		if (old_state == C_DISABLE_CLKCHANGE) {
+			fbi->state = C_ENABLE;
+			pxafb_enable_controller(fbi);
+			//TODO __pxafb_lcd_power(fbi, 1);
+		}
+		break;
+
+	case C_REENABLE:
+		/*
+		 * Re-enable the controller only if it was already
+		 * enabled.  This is so we reprogram the control
+		 * registers.
+		 */
+		if (old_state == C_ENABLE) {
+			pxafb_disable_controller(fbi);
+			pxafb_setup_gpio(fbi);
+			pxafb_enable_controller(fbi);
+		}
+		break;
+
+	case C_ENABLE_PM:
+		/*
+		 * Re-enable the controller after PM.  This is not
+		 * perfect - think about the case where we were doing
+		 * a clock change, and we suspended half-way through.
+		 */
+		if (old_state != C_DISABLE_PM)
+			break;
+		/* fall through */
+
+	case C_ENABLE:
+		/*
+		 * Power up the LCD screen, enable controller, and
+		 * turn on the backlight.
+		 */
+		if (old_state != C_ENABLE) {
+			fbi->state = C_ENABLE;
+			pxafb_setup_gpio(fbi);
+			pxafb_enable_controller(fbi);
+			__pxafb_lcd_power(fbi, 1);
+			__pxafb_backlight_power(fbi, 1);
+		}
+		break;
+	}
+	up(&fbi->ctrlr_sem);
+}
+
+/*
+ * Our LCD controller task (which is called when we blank or unblank)
+ * via keventd.
+ */
+static void pxafb_task(void *dummy)
+{
+	struct pxafb_info *fbi = dummy;
+	u_int state = xchg(&fbi->task_state, -1);
+
+	set_ctrlr_state(fbi, state);
+}
+
+#ifdef CONFIG_CPU_FREQ
+/*
+ * CPU clock speed change handler.  We need to adjust the LCD timing
+ * parameters when the CPU clock is adjusted by the power management
+ * subsystem.
+ *
+ * TODO: Determine why f->new != 10*get_lclk_frequency_10khz()
+ */
+static int
+pxafb_freq_transition(struct notifier_block *nb, unsigned long val, void *data)
+{
+	struct pxafb_info *fbi = TO_INF(nb, freq_transition);
+	//TODO struct cpufreq_freqs *f = data;
+	u_int pcd;
+
+	switch (val) {
+	case CPUFREQ_PRECHANGE:
+		set_ctrlr_state(fbi, C_DISABLE_CLKCHANGE);
+		break;
+
+	case CPUFREQ_POSTCHANGE:
+		pcd = get_pcd(fbi->fb.var.pixclock);
+		fbi->reg_lccr3 = (fbi->reg_lccr3 & ~0xff) | LCCR3_PixClkDiv(pcd);
+		set_ctrlr_state(fbi, C_ENABLE_CLKCHANGE);
+		break;
+	}
+	return 0;
+}
+
+static int
+pxafb_freq_policy(struct notifier_block *nb, unsigned long val, void *data)
+{
+	struct pxafb_info *fbi = TO_INF(nb, freq_policy);
+	struct fb_var_screeninfo *var = &fbi->fb.var;
+	struct cpufreq_policy *policy = data;
+
+	switch (val) {
+	case CPUFREQ_ADJUST:
+	case CPUFREQ_INCOMPATIBLE:
+		printk(KERN_DEBUG "min dma period: %d ps, "
+			"new clock %d kHz\n", pxafb_display_dma_period(var),
+			policy->max);
+		// TODO: fill in min/max values
+		break;
+#if 0
+	case CPUFREQ_NOTIFY:
+		printk(KERN_ERR "%s: got CPUFREQ_NOTIFY\n", __FUNCTION__);
+		do {} while(0);
+		/* todo: panic if min/max values aren't fulfilled
+		 * [can't really happen unless there's a bug in the
+		 * CPU policy verification process *
+		 */
+		break;
+#endif
+	}
+	return 0;
+}
+#endif
+
+#ifdef CONFIG_PM
+/*
+ * Power management hooks.  Note that we won't be called from IRQ context,
+ * unlike the blank functions above, so we may sleep.
+ */
+static int pxafb_suspend(struct device *dev, u32 state, u32 level)
+{
+	struct pxafb_info *fbi = dev_get_drvdata(dev);
+
+	if (level == SUSPEND_DISABLE || level == SUSPEND_POWER_DOWN)
+		set_ctrlr_state(fbi, C_DISABLE_PM);
+	return 0;
+}
+
+static int pxafb_resume(struct device *dev, u32 level)
+{
+	struct pxafb_info *fbi = dev_get_drvdata(dev);
+
+	if (level == RESUME_ENABLE)
+		set_ctrlr_state(fbi, C_ENABLE_PM);
+	return 0;
+}
+#else
+#define pxafb_suspend	NULL
+#define pxafb_resume	NULL
+#endif
+
+/*
+ * pxafb_map_video_memory():
+ *      Allocates the DRAM memory for the frame buffer.  This buffer is
+ *	remapped into a non-cached, non-buffered, memory region to
+ *      allow palette and pixel writes to occur without flushing the
+ *      cache.  Once this area is remapped, all virtual memory
+ *      access to the video memory should occur at the new region.
+ */
+static int __init pxafb_map_video_memory(struct pxafb_info *fbi)
+{
+	u_long palette_mem_size;
+
+	/*
+	 * We reserve one page for the palette, plus the size
+	 * of the framebuffer.
+	 */
+	fbi->map_size = PAGE_ALIGN(fbi->fb.fix.smem_len + PAGE_SIZE);
+	fbi->map_cpu = dma_alloc_writecombine(fbi->dev, fbi->map_size,
+					      &fbi->map_dma, GFP_KERNEL);
+
+	if (fbi->map_cpu) {
+		/* prevent initial garbage on screen */
+		memset(fbi->map_cpu, 0, fbi->map_size);
+		fbi->fb.screen_base = fbi->map_cpu + PAGE_SIZE;
+		fbi->screen_dma = fbi->map_dma + PAGE_SIZE;
+		/*
+		 * FIXME: this is actually the wrong thing to place in
+		 * smem_start.  But fbdev suffers from the problem that
+		 * it needs an API which doesn't exist (in this case,
+		 * dma_writecombine_mmap)
+		 */
+		fbi->fb.fix.smem_start = fbi->screen_dma;
+
+		fbi->palette_size = fbi->fb.var.bits_per_pixel == 8 ? 256 : 16;
+
+		palette_mem_size = fbi->palette_size * sizeof(u16);
+		DPRINTK("palette_mem_size = 0x%08lx\n", (u_long) palette_mem_size);
+
+		fbi->palette_cpu = (u16 *)(fbi->map_cpu + PAGE_SIZE - palette_mem_size);
+		fbi->palette_dma = fbi->map_dma + PAGE_SIZE - palette_mem_size;
+	}
+
+	return fbi->map_cpu ? 0 : -ENOMEM;
+}
+
+static struct pxafb_info * __init pxafb_init_fbinfo(struct device *dev)
+{
+	struct pxafb_info *fbi;
+	void *addr;
+	struct pxafb_mach_info *inf = dev->platform_data;
+
+	/* Alloc the pxafb_info and pseudo_palette in one step */
+	fbi = kmalloc(sizeof(struct pxafb_info) + sizeof(u32) * 17, GFP_KERNEL);
+	if (!fbi)
+		return NULL;
+
+	memset(fbi, 0, sizeof(struct pxafb_info));
+	fbi->dev = dev;
+
+	strcpy(fbi->fb.fix.id, PXA_NAME);
+
+	fbi->fb.fix.type	= FB_TYPE_PACKED_PIXELS;
+	fbi->fb.fix.type_aux	= 0;
+	fbi->fb.fix.xpanstep	= 0;
+	fbi->fb.fix.ypanstep	= 0;
+	fbi->fb.fix.ywrapstep	= 0;
+	fbi->fb.fix.accel	= FB_ACCEL_NONE;
+
+	fbi->fb.var.nonstd	= 0;
+	fbi->fb.var.activate	= FB_ACTIVATE_NOW;
+	fbi->fb.var.height	= -1;
+	fbi->fb.var.width	= -1;
+	fbi->fb.var.accel_flags	= 0;
+	fbi->fb.var.vmode	= FB_VMODE_NONINTERLACED;
+
+	fbi->fb.fbops		= &pxafb_ops;
+	fbi->fb.flags		= FBINFO_FLAG_DEFAULT;
+	fbi->fb.node		= -1;
+	fbi->fb.currcon		= -1;
+
+	addr = fbi;
+	addr = addr + sizeof(struct pxafb_info);
+	fbi->fb.pseudo_palette	= addr;
+
+	fbi->max_xres			= inf->xres;
+	fbi->fb.var.xres		= inf->xres;
+	fbi->fb.var.xres_virtual	= inf->xres;
+	fbi->max_yres			= inf->yres;
+	fbi->fb.var.yres		= inf->yres;
+	fbi->fb.var.yres_virtual	= inf->yres;
+	fbi->max_bpp			= inf->bpp;
+	fbi->fb.var.bits_per_pixel	= inf->bpp;
+	fbi->fb.var.pixclock		= inf->pixclock;
+	fbi->fb.var.hsync_len		= inf->hsync_len;
+	fbi->fb.var.left_margin		= inf->left_margin;
+	fbi->fb.var.right_margin	= inf->right_margin;
+	fbi->fb.var.vsync_len		= inf->vsync_len;
+	fbi->fb.var.upper_margin	= inf->upper_margin;
+	fbi->fb.var.lower_margin	= inf->lower_margin;
+	fbi->fb.var.sync		= inf->sync;
+	fbi->fb.var.grayscale		= inf->cmap_greyscale;
+	fbi->cmap_inverse		= inf->cmap_inverse;
+	fbi->cmap_static		= inf->cmap_static;
+	fbi->lccr0			= inf->lccr0;
+	fbi->lccr3			= inf->lccr3;
+	fbi->state			= C_STARTUP;
+	fbi->task_state			= (u_char)-1;
+	fbi->fb.fix.smem_len		= fbi->max_xres * fbi->max_yres *
+					  fbi->max_bpp / 8;
+
+	init_waitqueue_head(&fbi->ctrlr_wait);
+	INIT_WORK(&fbi->task, pxafb_task, fbi);
+	init_MUTEX(&fbi->ctrlr_sem);
+
+	return fbi;
+}
+
+#ifdef CONFIG_FB_PXA_PARAMETERS
+static int __init pxafb_parse_options(struct device *dev, char *options)
+{
+	struct pxafb_mach_info *inf = dev->platform_data;
+	char *this_opt;
+
+        if (!options || !*options)
+                return 0;
+
+	dev_dbg(dev, "options are \"%s\"\n", options ? options : "null");
+
+	/* could be made table driven or similar?... */
+        while ((this_opt = strsep(&options, ",")) != NULL) {
+                if (!strncmp(this_opt, "mode:", 5)) {
+			const char *name = this_opt+5;
+			unsigned int namelen = strlen(name);
+			int res_specified = 0, bpp_specified = 0;
+			unsigned int xres = 0, yres = 0, bpp = 0;
+			int yres_specified = 0;
+			int i;
+			for (i = namelen-1; i >= 0; i--) {
+				switch (name[i]) {
+				case '-':
+					namelen = i;
+					if (!bpp_specified && !yres_specified) {
+						bpp = simple_strtoul(&name[i+1], NULL, 0);
+						bpp_specified = 1;
+					} else
+						goto done;
+					break;
+				case 'x':
+					if (!yres_specified) {
+						yres = simple_strtoul(&name[i+1], NULL, 0);
+						yres_specified = 1;
+					} else
+						goto done;
+					break;
+				case '0'...'9':
+					break;
+				default:
+					goto done;
+				}
+			}
+			if (i < 0 && yres_specified) {
+				xres = simple_strtoul(name, NULL, 0);
+				res_specified = 1;
+			}
+		done:
+			if ( res_specified ) {
+				dev_info(dev, "overriding resolution: %dx%x\n", xres, yres);
+				inf->xres = xres; inf->yres = yres;
+			}
+			if ( bpp_specified )
+				switch (bpp) {
+				case 1:
+				case 2:
+				case 4:
+				case 8:
+				case 16:
+					inf->bpp = bpp;
+					dev_info(dev, "overriding bit depth: %d\n", bpp);
+					break;
+				default:
+					dev_err(dev, "Depth %d is not valid\n", bpp);
+				}
+                } else if (!strncmp(this_opt, "pixclock:", 9)) {
+                        inf->pixclock = simple_strtoul(this_opt+9, NULL, 0);
+			dev_info(dev, "override pixclock: %uld\n", inf->pixclock);
+                } else if (!strncmp(this_opt, "left:", 5)) {
+                        inf->left_margin = simple_strtoul(this_opt+5, NULL, 0);
+			dev_info(dev, "override left: %d\n", inf->left_margin);
+                } else if (!strncmp(this_opt, "right:", 6)) {
+                        inf->right_margin = simple_strtoul(this_opt+6, NULL, 0);
+			dev_info(dev, "override right: %d\n", inf->right_margin);
+                } else if (!strncmp(this_opt, "upper:", 6)) {
+                        inf->upper_margin = simple_strtoul(this_opt+6, NULL, 0);
+			dev_info(dev, "override upper: %d\n", inf->upper_margin);
+                } else if (!strncmp(this_opt, "lower:", 6)) {
+                        inf->lower_margin = simple_strtoul(this_opt+6, NULL, 0);
+			dev_info(dev, "override lower: %d\n", inf->lower_margin);
+                } else if (!strncmp(this_opt, "hsynclen:", 9)) {
+                        inf->hsync_len = simple_strtoul(this_opt+9, NULL, 0);
+			dev_info(dev, "override hsynclen: %d\n", inf->hsync_len);
+                } else if (!strncmp(this_opt, "vsynclen:", 9)) {
+                        inf->vsync_len = simple_strtoul(this_opt+9, NULL, 0);
+			dev_info(dev, "override vsynclen: %d\n", inf->vsync_len);
+                } else if (!strncmp(this_opt, "hsync:", 6)) {
+                        if ( simple_strtoul(this_opt+6, NULL, 0) == 0 ) {
+				dev_info(dev, "override hsync: Active Low\n");
+				inf->sync &= ~FB_SYNC_HOR_HIGH_ACT;
+			} else {
+				dev_info(dev, "override hsync: Active High\n");
+				inf->sync |= FB_SYNC_HOR_HIGH_ACT;
+			}
+                } else if (!strncmp(this_opt, "vsync:", 6)) {
+                        if ( simple_strtoul(this_opt+6, NULL, 0) == 0 ) {
+				dev_info(dev, "override vsync: Active Low\n");
+				inf->sync &= ~FB_SYNC_VERT_HIGH_ACT;
+			} else {
+				dev_info(dev, "override vsync: Active High\n");
+				inf->sync |= FB_SYNC_VERT_HIGH_ACT;
+			}
+                } else if (!strncmp(this_opt, "dpc:", 4)) {
+                        if ( simple_strtoul(this_opt+4, NULL, 0) == 0 ) {
+				dev_info(dev, "override double pixel clock: false\n");
+				inf->lccr3 &= ~LCCR3_DPC;
+			} else {
+				dev_info(dev, "override double pixel clock: true\n");
+				inf->lccr3 |= LCCR3_DPC;
+			}
+                } else if (!strncmp(this_opt, "outputen:", 9)) {
+                        if ( simple_strtoul(this_opt+9, NULL, 0) == 0 ) {
+				dev_info(dev, "override output enable: active low\n");
+				inf->lccr3 = ( inf->lccr3 & ~LCCR3_OEP ) | LCCR3_OutEnL;
+			} else {
+				dev_info(dev, "override output enable: active high\n");
+				inf->lccr3 = ( inf->lccr3 & ~LCCR3_OEP ) | LCCR3_OutEnH;
+			}
+                } else if (!strncmp(this_opt, "pixclockpol:", 12)) {
+                        if ( simple_strtoul(this_opt+12, NULL, 0) == 0 ) {
+				dev_info(dev, "override pixel clock polarity: falling edge\n");
+				inf->lccr3 = ( inf->lccr3 & ~LCCR3_PCP ) | LCCR3_PixFlEdg;
+			} else {
+				dev_info(dev, "override pixel clock polarity: rising edge\n");
+				inf->lccr3 = ( inf->lccr3 & ~LCCR3_PCP ) | LCCR3_PixRsEdg;
+			}
+                } else if (!strncmp(this_opt, "color", 5)) {
+			inf->lccr0 = (inf->lccr0 & ~LCCR0_CMS) | LCCR0_Color;
+                } else if (!strncmp(this_opt, "mono", 4)) {
+			inf->lccr0 = (inf->lccr0 & ~LCCR0_CMS) | LCCR0_Mono;
+                } else if (!strncmp(this_opt, "active", 6)) {
+			inf->lccr0 = (inf->lccr0 & ~LCCR0_PAS) | LCCR0_Act;
+                } else if (!strncmp(this_opt, "passive", 7)) {
+			inf->lccr0 = (inf->lccr0 & ~LCCR0_PAS) | LCCR0_Pas;
+                } else if (!strncmp(this_opt, "single", 6)) {
+			inf->lccr0 = (inf->lccr0 & ~LCCR0_SDS) | LCCR0_Sngl;
+                } else if (!strncmp(this_opt, "dual", 4)) {
+			inf->lccr0 = (inf->lccr0 & ~LCCR0_SDS) | LCCR0_Dual;
+                } else if (!strncmp(this_opt, "4pix", 4)) {
+			inf->lccr0 = (inf->lccr0 & ~LCCR0_DPD) | LCCR0_4PixMono;
+                } else if (!strncmp(this_opt, "8pix", 4)) {
+			inf->lccr0 = (inf->lccr0 & ~LCCR0_DPD) | LCCR0_8PixMono;
+		} else {
+			dev_err(dev, "unknown option: %s\n", this_opt);
+			return -EINVAL;
+		}
+        }
+        return 0;
+
+}
+#endif
+
+int __init pxafb_probe(struct device *dev)
+{
+	struct pxafb_info *fbi;
+	struct pxafb_mach_info *inf;
+	unsigned long flags;
+	int ret;
+
+	dev_dbg(dev, "pxafb_probe\n");
+
+	inf = dev->platform_data;
+	ret = -ENOMEM;
+	fbi = NULL;
+	if (!inf)
+		goto failed;
+
+#ifdef CONFIG_FB_PXA_PARAMETERS
+	ret = pxafb_parse_options(dev, g_options);
+	if ( ret < 0 )
+		goto failed;
+#endif
+
+#ifdef DEBUG_VAR
+        /* Check for various illegal bit-combinations. Currently only
+	 * a warning is given. */
+
+        if ( inf->lccr0 & LCCR0_INVALID_CONFIG_MASK )
+                dev_warn(dev, "machine LCCR0 setting contains illegal bits: %08x\n",
+                        inf->lccr0 & LCCR0_INVALID_CONFIG_MASK);
+        if ( inf->lccr3 & LCCR3_INVALID_CONFIG_MASK )
+                dev_warn(dev, "machine LCCR3 setting contains illegal bits: %08x\n",
+                        inf->lccr3 & LCCR3_INVALID_CONFIG_MASK);
+        if ( inf->lccr0 & LCCR0_DPD &&
+             ( ( inf->lccr0 & LCCR0_PAS ) != LCCR0_Pas ||
+               ( inf->lccr0 & LCCR0_SDS ) != LCCR0_Sngl ||
+               ( inf->lccr0 & LCCR0_CMS ) != LCCR0_Mono ) )
+                dev_warn(dev, "Double Pixel Data (DPD) mode is only valid in passive mono"
+			 " single panel mode\n");
+        if ( (inf->lccr0 & LCCR0_PAS) == LCCR0_Act &&
+             ( inf->lccr0 & LCCR0_SDS ) == LCCR0_Dual )
+                dev_warn(dev, "Dual panel only valid in passive mode\n");
+        if ( (inf->lccr0 & LCCR0_PAS ) == LCCR0_Pas &&
+             (inf->upper_margin || inf->lower_margin) )
+                dev_warn(dev, "Upper and lower margins must be 0 in passive mode\n");
+#endif
+
+	dev_dbg(dev, "got a %dx%dx%d LCD\n",inf->xres, inf->yres, inf->bpp);
+	if (inf->xres == 0 || inf->yres == 0 || inf->bpp == 0) {
+		dev_err(dev, "Invalid resolution or bit depth\n");
+		ret = -EINVAL;
+		goto failed;
+	}
+	pxafb_backlight_power = inf->pxafb_backlight_power;
+	pxafb_lcd_power = inf->pxafb_lcd_power;
+	fbi = pxafb_init_fbinfo(dev);
+	if (!fbi) {
+		dev_err(dev, "Failed to initialize framebuffer device\n");
+		ret = -ENOMEM; // only reason for pxafb_init_fbinfo to fail is kmalloc
+		goto failed;
+	}
+
+	/* Initialize video memory */
+	ret = pxafb_map_video_memory(fbi);
+	if (ret) {
+		dev_err(dev, "Failed to allocate video RAM: %d\n", ret);
+		ret = -ENOMEM;
+		goto failed;
+	}
+	/* enable LCD controller clock */
+	local_irq_save(flags);
+	CKEN |= CKEN16_LCD;
+	local_irq_restore(flags);
+
+	ret = request_irq(IRQ_LCD, pxafb_handle_irq, SA_INTERRUPT, "LCD", fbi);
+	if (ret) {
+		dev_err(dev, "request_irq failed: %d\n", ret);
+		ret = -EBUSY;
+		goto failed;
+	}
+
+	/*
+	 * This makes sure that our colour bitfield
+	 * descriptors are correctly initialised.
+	 */
+	pxafb_check_var(&fbi->fb.var, &fbi->fb);
+	pxafb_set_par(&fbi->fb);
+
+	dev_set_drvdata(dev, fbi);
+
+	ret = register_framebuffer(&fbi->fb);
+	if (ret < 0) {
+		dev_err(dev, "Failed to register framebuffer device: %d\n", ret);
+		goto failed;
+	}
+
+#ifdef CONFIG_PM
+	// TODO
+#endif
+
+#ifdef CONFIG_CPU_FREQ
+	fbi->freq_transition.notifier_call = pxafb_freq_transition;
+	fbi->freq_policy.notifier_call = pxafb_freq_policy;
+	cpufreq_register_notifier(&fbi->freq_transition, CPUFREQ_TRANSITION_NOTIFIER);
+	cpufreq_register_notifier(&fbi->freq_policy, CPUFREQ_POLICY_NOTIFIER);
+#endif
+
+	/*
+	 * Ok, now enable the LCD controller
+	 */
+	set_ctrlr_state(fbi, C_ENABLE);
+
+	return 0;
+
+failed:
+	dev_set_drvdata(dev, NULL);
+	if (fbi)
+		kfree(fbi);
+	return ret;
+}
+
+static struct device_driver pxafb_driver = {
+	.name		= "pxafb",
+	.bus		= &platform_bus_type,
+	.probe		= pxafb_probe,
+#ifdef CONFIG_PM
+	.suspend	= pxafb_suspend,
+	.resume		= pxafb_resume,
+#endif
+};
+
+int __devinit pxafb_init(void)
+{
+	return driver_register(&pxafb_driver);
+}
+
+#ifndef MODULE
+int __devinit pxafb_setup(char *options)
+{
+# ifdef CONFIG_FB_PXA_PARAMETERS
+	strlcpy(g_options, options, sizeof(g_options));
+# endif
+	return 0;
+}
+#else
+module_init(pxafb_init);
+# ifdef CONFIG_FB_PXA_PARAMETERS
+module_param_string(options, g_options, sizeof(g_options), 0);
+MODULE_PARM_DESC(options, "LCD parameters (see Documentation/fb/pxafb.txt)");
+# endif
+#endif
+
+MODULE_DESCRIPTION("loadable framebuffer driver for PXA");
+MODULE_LICENSE("GPL");
diff -Nru a/drivers/video/pxafb.h b/drivers/video/pxafb.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/drivers/video/pxafb.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,129 @@
+#ifndef __PXAFB_H__
+#define __PXAFB_H__
+
+/*
+ * linux/drivers/video/pxafb.h
+ *    -- Intel PXA250/210 LCD Controller Frame Buffer Device
+ *
+ *  Copyright (C) 1999 Eric A. Thomas.
+ *  Copyright (C) 2004 Jean-Frederic Clere.
+ *  Copyright (C) 2004 Ian Campbell.
+ *  Copyright (C) 2004 Jeff Lackey.
+ *   Based on sa1100fb.c Copyright (C) 1999 Eric A. Thomas
+ *  which in turn is
+ *   Based on acornfb.c Copyright (C) Russell King.
+ *
+ *  2001-08-03: Cliff Brake <cbrake@acclent.com>
+ *	 - ported SA1100 code to PXA
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file COPYING in the main directory of this archive
+ * for more details.
+ */
+
+/* Shadows for LCD controller registers */
+struct pxafb_lcd_reg {
+	unsigned int lccr0;
+	unsigned int lccr1;
+	unsigned int lccr2;
+	unsigned int lccr3;
+};
+
+/* PXA LCD DMA descriptor */
+struct pxafb_dma_descriptor {
+	unsigned int fdadr;
+	unsigned int fsadr;
+	unsigned int fidr;
+	unsigned int ldcmd;
+};
+
+struct pxafb_info {
+	struct fb_info		fb;
+	struct device		*dev;
+
+	u_int			max_bpp;
+	u_int			max_xres;
+	u_int			max_yres;
+
+	/*
+	 * These are the addresses we mapped
+	 * the framebuffer memory region to.
+	 */
+	/* raw memory addresses */
+	dma_addr_t		map_dma;	/* physical */
+	u_char *		map_cpu;	/* virtual */
+	u_int			map_size;
+
+	/* addresses of pieces placed in raw buffer */
+	u_char *		screen_cpu;	/* virtual address of frame buffer */
+	dma_addr_t		screen_dma;	/* physical address of frame buffer */
+	u16 *			palette_cpu;	/* virtual address of palette memory */
+	dma_addr_t		palette_dma;	/* physical address of palette memory */
+	u_int			palette_size;
+
+	/* DMA descriptors */
+	struct pxafb_dma_descriptor * 	dmadesc_fblow_cpu;
+	dma_addr_t		dmadesc_fblow_dma;
+	struct pxafb_dma_descriptor * 	dmadesc_fbhigh_cpu;
+	dma_addr_t		dmadesc_fbhigh_dma;
+	struct pxafb_dma_descriptor *	dmadesc_palette_cpu;
+	dma_addr_t		dmadesc_palette_dma;
+
+	dma_addr_t		fdadr0;
+	dma_addr_t		fdadr1;
+
+	u_int			lccr0;
+	u_int			lccr3;
+	u_int			cmap_inverse:1,
+				cmap_static:1,
+				unused:30;
+
+	u_int			reg_lccr0;
+	u_int			reg_lccr1;
+	u_int			reg_lccr2;
+	u_int			reg_lccr3;
+
+	volatile u_char		state;
+	volatile u_char		task_state;
+	struct semaphore	ctrlr_sem;
+	wait_queue_head_t	ctrlr_wait;
+	struct work_struct	task;
+
+#ifdef CONFIG_CPU_FREQ
+	struct notifier_block	freq_transition;
+	struct notifier_block	freq_policy;
+#endif
+};
+
+#define TO_INF(ptr,member) container_of(ptr,struct pxafb_info,member)
+
+/*
+ * These are the actions for set_ctrlr_state
+ */
+#define C_DISABLE		(0)
+#define C_ENABLE		(1)
+#define C_DISABLE_CLKCHANGE	(2)
+#define C_ENABLE_CLKCHANGE	(3)
+#define C_REENABLE		(4)
+#define C_DISABLE_PM		(5)
+#define C_ENABLE_PM		(6)
+#define C_STARTUP		(7)
+
+#define PXA_NAME	"PXA"
+
+/*
+ *  Debug macros
+ */
+#if DEBUG
+#  define DPRINTK(fmt, args...)	printk("%s: " fmt, __FUNCTION__ , ## args)
+#else
+#  define DPRINTK(fmt, args...)
+#endif
+
+/*
+ * Minimum X and Y resolutions
+ */
+#define MIN_XRES	64
+#define MIN_YRES	64
+
+#endif /* __PXAFB_H__ */
diff -Nru a/drivers/video/q40fb.c b/drivers/video/q40fb.c
--- a/drivers/video/q40fb.c	Sun May 16 01:18:34 2004
+++ b/drivers/video/q40fb.c	Sun May 16 01:18:34 2004
@@ -1,9 +1,9 @@
-/* 
+/*
  * linux/drivers/video/q40fb.c -- Q40 frame buffer device
  *
- * Copyright (C) 2001 
+ * Copyright (C) 2001
  *
- *      Richard Zidlicky <Richard.Zidlicky@stud.informatik.uni-erlangen.de>
+ *      Richard Zidlicky <rz@linux-m68k.org>
  *
  *  This file is subject to the terms and conditions of the GNU General Public
  *  License. See the file COPYING in the main directory of this archive for
@@ -30,9 +30,6 @@
 
 #define Q40_PHYS_SCREEN_ADDR 0xFE800000
 
-static u32 pseudo_palette[17];
-static struct fb_info fb_info;
-
 static struct fb_fix_screeninfo q40fb_fix __initdata = {
 	.id		= "Q40",
 	.smem_len	= 1024*1024,
@@ -48,7 +45,7 @@
 	.xres_virtual	= 1024,
 	.yres_virtual	= 512,
 	.bits_per_pixel	= 16,
-    	.red		= {6, 5, 0}, 
+    	.red		= {6, 5, 0},
 	.green		= {11, 5, 0},
 	.blue		= {0, 6, 0},
 	.activate	= FB_ACTIVATE_NOW,
@@ -57,24 +54,8 @@
 	.vmode		= FB_VMODE_NONINTERLACED,
 };
 
-/* frame buffer operations */
-int q40fb_init(void);
-
-static int q40fb_setcolreg(unsigned regno, unsigned red, unsigned green,
-                           unsigned blue, unsigned transp,
-                           struct fb_info *info);
-
-static struct fb_ops q40fb_ops = {
-	.owner		= THIS_MODULE,
-	.fb_setcolreg	= q40fb_setcolreg,
-	.fb_fillrect	= cfb_fillrect,
-	.fb_copyarea	= cfb_copyarea,
-	.fb_imageblit	= cfb_imageblit,
-	.fb_cursor	= soft_cursor,
-};
-
 static int q40fb_setcolreg(unsigned regno, unsigned red, unsigned green,
-		  	   unsigned blue, unsigned transp,
+			   unsigned blue, unsigned transp,
 			   struct fb_info *info)
 {
     /*
@@ -82,46 +63,94 @@
      *  magnitude.
      *  Return != 0 for invalid regno.
      */
-  
+
+    if (regno > 255)
+	    return 1;
     red>>=11;
     green>>=11;
     blue>>=10;
 
     if (regno < 16) {
-	((u16 *)info->pseudo_palette)[regno] = ((red & 31) <<6) |
+	((u32 *)info->pseudo_palette)[regno] = ((red & 31) <<6) |
 					       ((green & 31) << 11) |
 					       (blue & 63);
     }
     return 0;
 }
 
-int q40fb_init(void)
+static struct fb_ops q40fb_ops = {
+	.owner		= THIS_MODULE,
+	.fb_setcolreg	= q40fb_setcolreg,
+	.fb_fillrect	= cfb_fillrect,
+	.fb_copyarea	= cfb_copyarea,
+	.fb_imageblit	= cfb_imageblit,
+	.fb_cursor	= soft_cursor,
+};
+
+static int __init q40fb_probe(struct device *device)
 {
-        if ( !MACH_IS_Q40)
-	  return -ENXIO;
+	struct platform_device *dev = to_platform_device(device);
+	struct fb_info *info;
+
+	if (!MACH_IS_Q40)
+		return -ENXIO;
 
 	/* mapped in q40/config.c */
 	q40fb_fix.smem_start = Q40_PHYS_SCREEN_ADDR;
-	
-	fb_info.var = q40fb_var;
-	fb_info.fix = q40fb_fix;
-	fb_info.fbops = &q40fb_ops;
-	fb_info.flags = FBINFO_FLAG_DEFAULT;  /* not as module for now */
-	fb_info.pseudo_palette = pseudo_palette;	
-   	fb_info.screen_base = (char *) q40fb_fix.smem_start;
 
-	fb_alloc_cmap(&fb_info.cmap, 16, 0);
+	info = framebuffer_alloc(sizeof(u32) * 256, &dev->dev);
+	if (!info)
+		return -ENOMEM;
+
+	info->var = q40fb_var;
+	info->fix = q40fb_fix;
+	info->fbops = &q40fb_ops;
+	info->flags = FBINFO_FLAG_DEFAULT;  /* not as module for now */
+	info->pseudo_palette = info->par;
+	info->par = NULL;
+	info->screen_base = (char *) q40fb_fix.smem_start;
+
+	if (fb_alloc_cmap(&info->cmap, 256, 0) < 0) {
+		framebuffer_release(info);
+		return -ENOMEM;
+	}
 
 	master_outb(3, DISPLAY_CONTROL_REG);
 
-	if (register_framebuffer(&fb_info) < 0) {
+	if (register_framebuffer(info) < 0) {
 		printk(KERN_ERR "Unable to register Q40 frame buffer\n");
+		fb_dealloc_cmap(&info->cmap);
+		framebuffer_release(info);
 		return -EINVAL;
 	}
 
         printk(KERN_INFO "fb%d: Q40 frame buffer alive and kicking !\n",
-	       fb_info.node);
+	       info->node);
 	return 0;
 }
 
-MODULE_LICENSE("GPL");	
+static struct device_driver q40fb_driver = {
+	.name	= "q40fb",
+	.bus	= &platform_bus_type,
+	.probe	= q40fb_probe,
+};
+
+static struct platform_device q40fb_device = {
+	.name	= "q40fb",
+};
+
+int __init q40fb_init(void)
+{
+	int ret = 0;
+
+	ret = driver_register(&q40fb_driver);
+
+	if (!ret) {
+		ret = platform_device_register(&q40fb_device);
+		if (ret)
+			driver_unregister(&q40fb_driver);
+	}
+	return ret;
+}
+
+MODULE_LICENSE("GPL");
diff -Nru a/drivers/video/retz3fb.c b/drivers/video/retz3fb.c
--- a/drivers/video/retz3fb.c	Sun May 16 01:18:36 2004
+++ b/drivers/video/retz3fb.c	Sun May 16 01:18:36 2004
@@ -1432,8 +1432,6 @@
 		       fb_info->modename, zinfo->fbsize>>10);
 
 		/* FIXME: This driver cannot be unloaded yet */
-		MOD_INC_USE_COUNT;
-
 		res = 0;
 	}
 	return res;
@@ -1490,16 +1488,6 @@
 int init_module(void)
 {
 	return retz3fb_init();
-}
-
-void cleanup_module(void)
-{
-	/*
-	 * Not reached because the usecount will never
-	 * be decremented to zero
-	 *
-	 * FIXME: clean up ... *
-	 */
 }
 #endif
 
diff -Nru a/drivers/video/riva/fbdev.c b/drivers/video/riva/fbdev.c
--- a/drivers/video/riva/fbdev.c	Sun May 16 01:18:36 2004
+++ b/drivers/video/riva/fbdev.c	Sun May 16 01:18:36 2004
@@ -492,17 +492,17 @@
  * CALLED FROM:
  * rivafb_cursor()
  */
-static void rivafb_load_cursor_image(struct riva_par *par, u8 *data, 
-				     u8 *mask, u16 bg, u16 fg, u32 w, u32 h)
+static void rivafb_load_cursor_image(struct riva_par *par, u8 *data8,
+				     u8 *mask8, u16 bg, u16 fg, u32 w, u32 h)
 {
 	int i, j, k = 0;
 	u32 b, m, tmp;
+	u32 *data = (u32 *)data8;
+	u32 *mask = (u32 *)mask8;
 
 	for (i = 0; i < h; i++) {
-		b = *((u32 *)data);
-		b = (u32)((u32 *)b + 1);
-		m = *((u32 *)mask);
-		m = (u32)((u32 *)m + 1);
+		b = *data++;
+		m = *mask++;
 		reverse_order(&b);
 		
 		for (j = 0; j < w/2; j++) {
diff -Nru a/drivers/video/sa1100fb.c b/drivers/video/sa1100fb.c
--- a/drivers/video/sa1100fb.c	Sun May 16 01:18:34 2004
+++ b/drivers/video/sa1100fb.c	Sun May 16 01:18:34 2004
@@ -326,6 +326,22 @@
 };
 #endif
 
+#ifdef CONFIG_SA1100_COLLIE
+static struct sa1100fb_mach_info collie_info __initdata = {
+	pixclock:	171521,		bpp:		16,
+	xres:		320,		yres:		240,
+
+	hsync_len:	5,		vsync_len:	1,
+	left_margin:	11,		upper_margin:	2,
+	right_margin:	30,		lower_margin:	0,
+
+	sync:		FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
+
+	lccr0:		LCCR0_Color | LCCR0_Sngl | LCCR0_Act,
+	lccr3:		LCCR3_OutEnH | LCCR3_PixRsEdg | LCCR3_ACBsDiv(2),
+};
+#endif
+
 #ifdef CONFIG_SA1100_FREEBIRD
 #warning Please check this carefully
 static struct sa1100fb_mach_info freebird_info __initdata = {
@@ -635,6 +651,11 @@
 		inf = &brutus_info;
 	}
 #endif
+#ifdef CONFIG_SA1100_COLLIE
+	if (machine_is_collie()) {
+		inf = &collie_info;
+	}
+#endif
 #ifdef CONFIG_SA1100_FREEBIRD
 	if (machine_is_freebird()) {
 		inf = &freebird_info;
@@ -1765,8 +1786,6 @@
 #endif
 
 	/* This driver cannot be unloaded at the moment */
-	MOD_INC_USE_COUNT;
-
 	return 0;
 
 failed:
diff -Nru a/drivers/video/tdfxfb.c b/drivers/video/tdfxfb.c
--- a/drivers/video/tdfxfb.c	Sun May 16 01:18:34 2004
+++ b/drivers/video/tdfxfb.c	Sun May 16 01:18:34 2004
@@ -166,7 +166,11 @@
 static void tdfxfb_fillrect(struct fb_info *info, const struct fb_fillrect *rect);
 static void tdfxfb_copyarea(struct fb_info *info, const struct fb_copyarea *area);  
 static void tdfxfb_imageblit(struct fb_info *info, const struct fb_image *image); 
+#ifdef CONFIG_FB_3DFX_ACCEL
 static int tdfxfb_cursor(struct fb_info *info, struct fb_cursor *cursor);
+#else /* !CONFIG_FB_3DFX_ACCEL */
+#define tdfxfb_cursor soft_cursor
+#endif /* CONFIG_FB_3DFX_ACCEL */
 static int banshee_wait_idle(struct fb_info *info);
 
 static struct fb_ops tdfxfb_ops = {
@@ -180,7 +184,7 @@
 	.fb_copyarea	= tdfxfb_copyarea,
 	.fb_imageblit	= tdfxfb_imageblit,
 	.fb_sync	= banshee_wait_idle,
-	.fb_cursor	= soft_cursor,
+	.fb_cursor	= tdfxfb_cursor,
 };
 
 /*
@@ -1001,6 +1005,7 @@
 	banshee_wait_idle(info);
 }
 
+#ifdef CONFIG_FB_3DFX_ACCEL
 static int tdfxfb_cursor(struct fb_info *info, struct fb_cursor *cursor)
 {
 	struct tdfx_par *par = (struct tdfx_par *) info->par;
@@ -1137,6 +1142,7 @@
 	spin_unlock_irqrestore(&par->DAClock, flags);
 	return 0;
 }
+#endif /* CONFIG_FB_3DFX_ACCEL */
 
 /**
  *      tdfxfb_probe - Device Initializiation
diff -Nru a/drivers/video/tridentfb.c b/drivers/video/tridentfb.c
--- a/drivers/video/tridentfb.c	Sun May 16 01:18:35 2004
+++ b/drivers/video/tridentfb.c	Sun May 16 01:18:35 2004
@@ -450,7 +450,7 @@
 /*
  * Accel functions called by the upper layers
  */
-
+#ifdef CONFIG_FB_TRIDENT_ACCEL
 static void tridentfb_fillrect(struct fb_info * info, const struct fb_fillrect *fr)
 {
 	int bpp = info->var.bits_per_pixel;
@@ -474,6 +474,11 @@
 	acc->copy_rect(ca->sx,ca->sy,ca->dx,ca->dy,ca->width,ca->height);
 	acc->wait_engine();
 }
+#else /* !CONFIG_FB_TRIDENT_ACCEL */
+#define tridentfb_fillrect cfb_fillrect
+#define tridentfb_copyarea cfb_copyarea
+#endif /* CONFIG_FB_TRIDENT_ACCEL */
+
 
 /*
  * Hardware access functions
@@ -1265,10 +1270,8 @@
 	.fb_blank = tridentfb_blank,
 	.fb_check_var = tridentfb_check_var,
 	.fb_set_par = tridentfb_set_par,
-//	.fb_fillrect = tridentfb_fillrect,
-//	.fb_copyarea= tridentfb_copyarea,
-	.fb_fillrect = cfb_fillrect,
-	.fb_copyarea= cfb_copyarea,
+	.fb_fillrect = tridentfb_fillrect,
+	.fb_copyarea= tridentfb_copyarea,
 	.fb_imageblit = cfb_imageblit,
 	.fb_cursor = soft_cursor,
 };
diff -Nru a/drivers/video/vesafb.c b/drivers/video/vesafb.c
--- a/drivers/video/vesafb.c	Sun May 16 01:18:33 2004
+++ b/drivers/video/vesafb.c	Sun May 16 01:18:33 2004
@@ -47,12 +47,9 @@
 	.accel	= FB_ACCEL_NONE,
 };
 
-static struct fb_info fb_info;
-static u32 pseudo_palette[17];
-
 static int             inverse   = 0;
 static int             mtrr      = 1;
-
+static int	       vram __initdata = 0; /* Set amount of memory to be used */
 static int             pmi_setpal = 0;	/* pmi for palette changes ??? */
 static int             ypan       = 0;  /* 0..nothing, 1..ypan, 2..ywrap */
 static unsigned short  *pmi_base  = 0;
@@ -210,14 +207,17 @@
 			mtrr=1;
 		else if (! strcmp(this_opt, "nomtrr"))
 			mtrr=0;
+		else if (! strcmp(this_opt, "vram"))
+			vram = simple_strtoul(this_opt+5, NULL, 0);
 	}
 	return 0;
 }
 
-int __init vesafb_init(void)
+static int __init vesafb_probe(struct device *device)
 {
-	int video_cmap_len;
-	int i;
+	struct platform_device *dev = to_platform_device(device);
+	struct fb_info *info;
+	int i, err;
 
 	if (screen_info.orig_video_isVGA != VIDEO_TYPE_VLFB)
 		return -ENXIO;
@@ -229,7 +229,18 @@
 	vesafb_defined.xres = screen_info.lfb_width;
 	vesafb_defined.yres = screen_info.lfb_height;
 	vesafb_fix.line_length = screen_info.lfb_linelength;
-	vesafb_fix.smem_len = screen_info.lfb_size * 65536;
+
+	/* Allocate enough memory for double buffering */
+	vesafb_fix.smem_len = screen_info.lfb_width * screen_info.lfb_height * vesafb_defined.bits_per_pixel >> 2;
+
+	/* check that we don't remap more memory than old cards have */
+	if (vesafb_fix.smem_len > (screen_info.lfb_size * 65536))
+		vesafb_fix.smem_len = screen_info.lfb_size * 65536;
+
+	/* Set video size according to vram boot option */
+	if (vram)
+		vesafb_fix.smem_len = vram * 1024 * 1024;
+
 	vesafb_fix.visual   = (vesafb_defined.bits_per_pixel == 8) ?
 		FB_VISUAL_PSEUDOCOLOR : FB_VISUAL_TRUECOLOR;
 
@@ -251,17 +262,25 @@
 		   spaces our resource handlers simply don't know about */
 	}
 
-        fb_info.screen_base = ioremap(vesafb_fix.smem_start, vesafb_fix.smem_len);
-	if (!fb_info.screen_base) {
+	info = framebuffer_alloc(sizeof(u32) * 256, &dev->dev);
+	if (!info) {
 		release_mem_region(vesafb_fix.smem_start, vesafb_fix.smem_len);
+		return -ENOMEM;
+	}
+	info->pseudo_palette = info->par;
+	info->par = NULL;
+
+        info->screen_base = ioremap(vesafb_fix.smem_start, vesafb_fix.smem_len);
+	if (!info->screen_base) {
 		printk(KERN_ERR
 		       "vesafb: abort, cannot ioremap video memory 0x%x @ 0x%lx\n",
 			vesafb_fix.smem_len, vesafb_fix.smem_start);
-		return -EIO;
+		err = -EIO;
+		goto err;
 	}
 
 	printk(KERN_INFO "vesafb: framebuffer at 0x%lx, mapped to 0x%p, size %dk\n",
-	       vesafb_fix.smem_start, fb_info.screen_base, vesafb_fix.smem_len/1024);
+	       vesafb_fix.smem_start, info->screen_base, vesafb_fix.smem_len/1024);
 	printk(KERN_INFO "vesafb: mode is %dx%dx%d, linelength=%d, pages=%d\n",
 	       vesafb_defined.xres, vesafb_defined.yres, vesafb_defined.bits_per_pixel, vesafb_fix.line_length, screen_info.pages);
 
@@ -331,12 +350,10 @@
 		       screen_info.red_pos,
 		       screen_info.green_pos,
 		       screen_info.blue_pos);
-		video_cmap_len = 16;
 	} else {
 		vesafb_defined.red.length   = 6;
 		vesafb_defined.green.length = 6;
 		vesafb_defined.blue.length  = 6;
-		video_cmap_len = 256;
 	}
 
 	vesafb_fix.ypanstep  = ypan     ? 1 : 0;
@@ -358,20 +375,51 @@
 		}
 	}
 	
-	fb_info.fbops = &vesafb_ops;
-	fb_info.var = vesafb_defined;
-	fb_info.fix = vesafb_fix;
-	fb_info.pseudo_palette = pseudo_palette;
-	fb_info.flags = FBINFO_FLAG_DEFAULT;
+	info->fbops = &vesafb_ops;
+	info->var = vesafb_defined;
+	info->fix = vesafb_fix;
+	info->flags = FBINFO_FLAG_DEFAULT;
+
+	if (fb_alloc_cmap(&info->cmap, 256, 0) < 0) {
+		err = -ENXIO;
+		goto err;
+	}
+	if (register_framebuffer(info)<0) {
+		err = -EINVAL;
+		fb_dealloc_cmap(&info->cmap);
+		goto err;
+	}
+	printk(KERN_INFO "fb%d: %s frame buffer device\n",
+	       info->node, info->fix.id);
+	return 0;
+err:
+	framebuffer_release(info);
+	release_mem_region(vesafb_fix.smem_start, vesafb_fix.smem_len);
+	return err;
+}
 
-	fb_alloc_cmap(&fb_info.cmap, video_cmap_len, 0);
+static struct device_driver vesafb_driver = {
+	.name	= "vesafb",
+	.bus	= &platform_bus_type,
+	.probe	= vesafb_probe,
+};
 
-	if (register_framebuffer(&fb_info)<0)
-		return -EINVAL;
+static struct platform_device vesafb_device = {
+	.name	= "vesafb",
+};
 
-	printk(KERN_INFO "fb%d: %s frame buffer device\n",
-	       fb_info.node, fb_info.fix.id);
-	return 0;
+int __init vesafb_init(void)
+{
+	int ret;
+
+	ret = driver_register(&vesafb_driver);
+
+	if (!ret) {
+		ret = platform_device_register(&vesafb_device);
+		if (ret)
+			driver_unregister(&vesafb_driver);
+	}
+	return ret;
 }
 
 /*
diff -Nru a/drivers/video/vfb.c b/drivers/video/vfb.c
--- a/drivers/video/vfb.c	Sun May 16 01:18:33 2004
+++ b/drivers/video/vfb.c	Sun May 16 01:18:33 2004
@@ -37,9 +37,6 @@
 static u_long videomemorysize = VIDEOMEMSIZE;
 MODULE_PARM(videomemorysize, "l");
 
-static struct fb_info fb_info;
-static u32 vfb_pseudo_palette[17];
-
 static struct fb_var_screeninfo vfb_default __initdata = {
 	.xres =		640,
 	.yres =		480,
@@ -404,18 +401,22 @@
      *  Initialisation
      */
 
-int __init vfb_init(void)
+static void vfb_platform_release(struct device *device)
 {
-	int retval;
+	// This is called when the reference count goes to zero.
+}
 
-	if (!vfb_enable)
-		return -ENXIO;
+static int __init vfb_probe(struct device *device)
+{
+	struct platform_device *dev = to_platform_device(device);
+	struct fb_info *info;
+	int retval = -ENOMEM;
 
 	/*
 	 * For real video cards we use ioremap.
 	 */
 	if (!(videomemory = vmalloc(videomemorysize)))
-		return -ENOMEM;
+		return retval;
 
 	/*
 	 * VFB must clear memory to prevent kernel info
@@ -425,41 +426,98 @@
 	 */
 	memset(videomemory, 0, videomemorysize);
 
-	fb_info.screen_base = videomemory;
-	fb_info.fbops = &vfb_ops;
+	info = framebuffer_alloc(sizeof(u32) * 256, &dev->dev);
+	if (!info)
+		goto err;
 
-	retval = fb_find_mode(&fb_info.var, &fb_info, NULL,
+	info->screen_base = videomemory;
+	info->fbops = &vfb_ops;
+
+	retval = fb_find_mode(&info->var, info, NULL,
 			      NULL, 0, NULL, 8);
 
 	if (!retval || (retval == 4))
-		fb_info.var = vfb_default;
-	fb_info.fix = vfb_fix;
-	fb_info.pseudo_palette = &vfb_pseudo_palette;
-	fb_info.flags = FBINFO_FLAG_DEFAULT;
+		info->var = vfb_default;
+	info->fix = vfb_fix;
+	info->pseudo_palette = info->par;
+	info->par = NULL;
+	info->flags = FBINFO_FLAG_DEFAULT;
+
+	retval = fb_alloc_cmap(&info->cmap, 256, 0);
+	if (retval < 0)
+		goto err1;
+
+	retval = register_framebuffer(info);
+	if (retval < 0)
+		goto err2;
+	dev_set_drvdata(&dev->dev, info);
+
+	printk(KERN_INFO
+	       "fb%d: Virtual frame buffer device, using %ldK of video memory\n",
+	       info->node, videomemorysize >> 10);
+	return 0;
+err2:
+	fb_dealloc_cmap(&info->cmap);
+err1:
+	framebuffer_release(info);
+err:
+	vfree(videomemory);
+	return retval;
+}
 
-	fb_alloc_cmap(&fb_info.cmap, 256, 0);
+static int vfb_remove(struct device *device)
+{
+	struct fb_info *info = dev_get_drvdata(device);
 
-	if (register_framebuffer(&fb_info) < 0) {
+	if (info) {
+		unregister_framebuffer(info);
 		vfree(videomemory);
-		return -EINVAL;
+		framebuffer_release(info);
 	}
-
-	printk(KERN_INFO
-	       "fb%d: Virtual frame buffer device, using %ldK of video memory\n",
-	       fb_info.node, videomemorysize >> 10);
 	return 0;
 }
 
-#ifdef MODULE
+static struct device_driver vfb_driver = {
+	.name	= "vfb",
+	.bus	= &platform_bus_type,
+	.probe	= vfb_probe,
+	.remove = vfb_remove,
+};
 
-static void __exit vfb_cleanup(void)
+static struct platform_device vfb_device = {
+	.name	= "vfb",
+	.id	= 0,
+	.dev	= {
+		.release = vfb_platform_release,
+	}
+};
+
+int __init vfb_init(void)
 {
-	unregister_framebuffer(&fb_info);
-	vfree(videomemory);
+	int ret = 0;
+
+	if (!vfb_enable)
+		return -ENXIO;
+
+	ret = driver_register(&vfb_driver);
+
+	if (!ret) {
+		ret = platform_device_register(&vfb_device);
+		if (ret)
+			driver_unregister(&vfb_driver);
+	}
+	return ret;
+}
+
+#ifdef MODULE
+static void __exit vfb_exit(void)
+{
+	platform_device_unregister(&vfb_device);
+	driver_unregister(&vfb_driver);
 }
 
 module_init(vfb_init);
-module_exit(vfb_cleanup);
+module_exit(vfb_exit);
 
 MODULE_LICENSE("GPL");
 #endif				/* MODULE */
diff -Nru a/drivers/video/virgefb.c b/drivers/video/virgefb.c
--- a/drivers/video/virgefb.c	Sun May 16 01:18:34 2004
+++ b/drivers/video/virgefb.c	Sun May 16 01:18:34 2004
@@ -1809,7 +1809,6 @@
 
 	/* TODO: This driver cannot be unloaded yet */
 
-	MOD_INC_USE_COUNT;
 	DPRINTK("EXIT\n");
 	return 0;
 }
@@ -2063,14 +2062,6 @@
 int init_module(void)
 {
 	return virgefb_init();
-}
-
-void cleanup_module(void)
-{
-	/* Not reached because the usecount will never be
-	   decremented to zero */
-	unregister_framebuffer(&fb_info);
-	/* TODO: clean up ... */
 }
 #endif /* MODULE */
 
diff -Nru a/fs/Kconfig b/fs/Kconfig
--- a/fs/Kconfig	Sun May 16 01:18:35 2004
+++ b/fs/Kconfig	Sun May 16 01:18:35 2004
@@ -244,6 +244,40 @@
 	  Almost everyone but ReiserFS developers and people fine-tuning
 	  reiserfs or tracing problems should say N.
 
+config REISERFS_FS_XATTR
+	bool "ReiserFS extended attributes"
+	depends on REISERFS_FS
+	help
+	  Extended attributes are name:value pairs associated with inodes by
+	  the kernel or by users (see the attr(5) manual page, or visit
+	  <http://acl.bestbits.at/> for details).
+
+	  If unsure, say N.
+
+config REISERFS_FS_POSIX_ACL
+	bool "ReiserFS POSIX Access Control Lists"
+	depends on REISERFS_FS_XATTR
+	help
+	  Posix Access Control Lists (ACLs) support permissions for users and
+	  groups beyond the owner/group/world scheme.
+
+	  To learn more about Access Control Lists, visit the Posix ACLs for
+	  Linux website <http://acl.bestbits.at/>.
+
+	  If you don't know what Access Control Lists are, say N
+
+config REISERFS_FS_SECURITY
+	bool "ReiserFS Security Labels"
+	depends on REISERFS_FS_XATTR
+	help
+	  Security labels support alternative access control models
+	  implemented by security modules like SELinux.  This option
+	  enables an extended attribute handler for file security
+	  labels in the ReiserFS filesystem.
+
+	  If you are not using a security module that requires using
+	  extended attributes for file security labels, say N.
+
 config JFS_FS
 	tristate "JFS filesystem support"
 	select NLS
@@ -282,13 +316,13 @@
 	  to be made available to the user in the /proc/fs/jfs/ directory.
 
 config FS_POSIX_ACL
-# Posix ACL utility routines (for now, only ext2/ext3/jfs)
+# Posix ACL utility routines (for now, only ext2/ext3/jfs/reiserfs)
 #
 # NOTE: you can implement Posix ACLs without these helpers (XFS does).
 # 	Never use this symbol for ifdefs.
 #
 	bool
-	depends on EXT2_FS_POSIX_ACL || EXT3_FS_POSIX_ACL || JFS_POSIX_ACL
+	depends on EXT2_FS_POSIX_ACL || EXT3_FS_POSIX_ACL || JFS_POSIX_ACL || REISERFS_FS_POSIX_ACL
 	default y
 
 config XFS_FS
@@ -468,7 +502,7 @@
 	  automounter (amd), which is a pure user space daemon.
 
 	  To use the automounter you need the user-space tools from
-	  <ftp://ftp.kernel.org/pub/linux/daemons/autofs/testing-v4/>; you also
+	  <ftp://ftp.kernel.org/pub/linux/daemons/autofs/v4/>; you also
 	  want to answer Y to "NFS file system support", below.
 
 	  To compile this support as a module, choose M here: the module will be
@@ -991,7 +1025,7 @@
 	  style features such as file ownership and permissions.
 
 config BEFS_FS
-	tristate "BeOS file systemv(BeFS) support (read only) (EXPERIMENTAL)"
+	tristate "BeOS file system (BeFS) support (read only) (EXPERIMENTAL)"
 	depends on EXPERIMENTAL
 	select NLS
 	help
@@ -1608,22 +1642,6 @@
 	  cache manager then say Y.
 	  
 	  For most cases you probably want to say N.
-
-#
-# Intermezzo broke when we added the expanded NGROUPS patches
-#
-config INTERMEZZO_FS
-	tristate "InterMezzo file system support (replicating fs) (EXPERIMENTAL)"
-	depends on INET && EXPERIMENTAL 
-	help
-	  InterMezzo is a networked file system with disconnected operation
-	  and kernel level write back caching.  It is most often used for
-	  replicating potentially large trees or keeping laptop/desktop copies
-	  in sync.
-
-	  If you say Y or M your kernel or module will provide InterMezzo
-	  support.  You will also need a file server daemon, which you can get
-	  from <http://www.inter-mezzo.org/>.
 
 config AFS_FS
 # for fs/nls/Config.in
diff -Nru a/fs/Makefile b/fs/Makefile
--- a/fs/Makefile	Sun May 16 01:18:35 2004
+++ b/fs/Makefile	Sun May 16 01:18:35 2004
@@ -53,7 +53,6 @@
 obj-$(CONFIG_RAMFS)		+= ramfs/
 obj-$(CONFIG_HUGETLBFS)		+= hugetlbfs/
 obj-$(CONFIG_CODA_FS)		+= coda/
-obj-$(CONFIG_INTERMEZZO_FS)	+= intermezzo/
 obj-$(CONFIG_MINIX_FS)		+= minix/
 obj-$(CONFIG_FAT_FS)		+= fat/
 obj-$(CONFIG_UMSDOS_FS)		+= umsdos/
diff -Nru a/fs/afs/dir.c b/fs/afs/dir.c
--- a/fs/afs/dir.c	Sun May 16 01:18:34 2004
+++ b/fs/afs/dir.c	Sun May 16 01:18:34 2004
@@ -615,7 +615,9 @@
 
 	/* the dirent, if it exists, now points to a different vnode */
  not_found:
+	spin_lock(&dentry->d_lock);
 	dentry->d_flags |= DCACHE_NFSFS_RENAMED;
+	spin_unlock(&dentry->d_lock);
 
  out_bad:
 	if (inode) {
diff -Nru a/fs/aio.c b/fs/aio.c
--- a/fs/aio.c	Sun May 16 01:18:35 2004
+++ b/fs/aio.c	Sun May 16 01:18:35 2004
@@ -793,7 +793,7 @@
 
 static inline void clear_timeout(struct timeout *to)
 {
-	del_timer_sync(&to->timer);
+	del_singleshot_timer_sync(&to->timer);
 }
 
 static int read_events(struct kioctx *ctx,
diff -Nru a/fs/autofs4/autofs_i.h b/fs/autofs4/autofs_i.h
--- a/fs/autofs4/autofs_i.h	Sun May 16 01:18:35 2004
+++ b/fs/autofs4/autofs_i.h	Sun May 16 01:18:35 2004
@@ -25,6 +25,8 @@
 #include <linux/string.h>
 #include <linux/wait.h>
 #include <linux/sched.h>
+#include <linux/mount.h>
+#include <linux/namei.h>
 #include <asm/current.h>
 #include <asm/uaccess.h>
 
@@ -82,7 +84,7 @@
 	char *name;
 	/* This is for status reporting upon return */
 	int status;
-	int wait_ctr;
+	atomic_t wait_ctr;
 };
 
 #define AUTOFS_SBI_MAGIC 0x6d4a556d
@@ -93,8 +95,12 @@
 	pid_t oz_pgrp;
 	int catatonic;
 	int version;
+	int sub_version;
 	unsigned long exp_timeout;
+	int reghost_enabled;
+	int needs_reghost;
 	struct super_block *sb;
+	struct semaphore wq_sem;
 	struct autofs_wait_queue *queues; /* Wait queue pointer */
 };
 
@@ -125,6 +131,12 @@
 		(inf != NULL && inf->flags & AUTOFS_INF_EXPIRING);
 }
 
+static inline void autofs4_copy_atime(struct file *src, struct file *dst)
+{
+	dst->f_dentry->d_inode->i_atime = src->f_dentry->d_inode->i_atime;
+	return;
+}
+
 struct inode *autofs4_get_inode(struct super_block *, struct autofs_info *);
 struct autofs_info *autofs4_init_inf(struct autofs_sb_info *, mode_t mode);
 void autofs4_free_ino(struct autofs_info *);
@@ -141,6 +153,7 @@
 extern struct inode_operations autofs4_symlink_inode_operations;
 extern struct inode_operations autofs4_dir_inode_operations;
 extern struct inode_operations autofs4_root_inode_operations;
+extern struct file_operations autofs4_dir_operations;
 extern struct file_operations autofs4_root_operations;
 
 /* Initializing function */
@@ -157,6 +170,24 @@
 	NFY_EXPIRE
 };
 
-int autofs4_wait(struct autofs_sb_info *,struct qstr *, enum autofs_notify);
+int autofs4_wait(struct autofs_sb_info *,struct dentry *, enum autofs_notify);
 int autofs4_wait_release(struct autofs_sb_info *,autofs_wqt_t,int);
 void autofs4_catatonic_mode(struct autofs_sb_info *);
+
+static inline int simple_positive(struct dentry *dentry)
+{
+	return dentry->d_inode && !d_unhashed(dentry);
+}
+
+static inline int simple_empty_nolock(struct dentry *dentry)
+{
+	struct dentry *child;
+	int ret = 0;
+
+	list_for_each_entry(child, &dentry->d_subdirs, d_child)
+		if (simple_positive(child))
+			goto out;
+	ret = 1;
+out:
+	return ret;
+}
diff -Nru a/fs/autofs4/expire.c b/fs/autofs4/expire.c
--- a/fs/autofs4/expire.c	Sun May 16 01:18:35 2004
+++ b/fs/autofs4/expire.c	Sun May 16 01:18:35 2004
@@ -4,6 +4,7 @@
  *
  *  Copyright 1997-1998 Transmeta Corporation -- All Rights Reserved
  *  Copyright 1999-2000 Jeremy Fitzhardinge <jeremy@goop.org>
+ *  Copyright 2001-2003 Ian Kent <raven@themaw.net>
  *
  * This file is part of the Linux kernel and is made available under
  * the terms of the GNU General Public License, version 2, or at your
@@ -12,139 +13,198 @@
  * ------------------------------------------------------------------------- */
 
 #include "autofs_i.h"
-#include <linux/mount.h>
 
-/*
- * Determine if a subtree of the namespace is busy.
- *
- * mnt is the mount tree under the autofs mountpoint
+static unsigned long now;
+
+/* Check if a dentry can be expired return 1 if it can else return 0 */
+static inline int autofs4_can_expire(struct dentry *dentry,
+					unsigned long timeout, int do_now)
+{
+	struct autofs_info *ino = autofs4_dentry_ino(dentry);
+
+	/* dentry in the process of being deleted */
+	if (ino == NULL)
+		return 0;
+
+	/* No point expiring a pending mount */
+	if (dentry->d_flags & DCACHE_AUTOFS_PENDING)
+		return 0;
+
+	if (!do_now) {
+		/* Too young to die */
+		if (time_after(ino->last_used + timeout, now))
+			return 0;
+
+		/* update last_used here :-
+		   - obviously makes sense if it is in use now
+		   - less obviously, prevents rapid-fire expire
+		     attempts if expire fails the first time */
+		ino->last_used = now;
+	}
+
+	return 1;
+}
+
+/* Check a mount point for busyness return 1 if not busy, otherwise */
+static int autofs4_check_mount(struct vfsmount *mnt, struct dentry *dentry)
+{
+	int status = 0;
+
+	DPRINTK(("autofs4_check_mount: dentry %p %.*s\n",
+		 dentry, (int)dentry->d_name.len, dentry->d_name.name));
+
+	mntget(mnt);
+	dget(dentry);
+
+	if (!follow_down(&mnt, &dentry))
+		goto done;
+
+	while (d_mountpoint(dentry) && follow_down(&mnt, &dentry))
+		;
+
+	/* This is an autofs submount, we can't expire it */
+	if (is_autofs4_dentry(dentry))
+		goto done;
+
+	/* The big question */
+	if (may_umount_tree(mnt) == 0)
+		status = 1;
+done:
+	DPRINTK(("autofs4_check_mount: returning = %d\n", status));
+	mntput(mnt);
+	dput(dentry);
+	return status;
+}
+
+/* Check a directory tree of mount points for busyness
+ * The tree is not busy iff no mountpoints are busy
+ * Return 1 if the tree is busy or 0 otherwise
  */
-static inline int is_vfsmnt_tree_busy(struct vfsmount *mnt)
+static int autofs4_check_tree(struct vfsmount *mnt,
+	       		      struct dentry *top,
+			      unsigned long timeout,
+			      int do_now)
 {
-	struct vfsmount *this_parent = mnt;
+	struct dentry *this_parent = top;
 	struct list_head *next;
-	int count;
 
-	count = atomic_read(&mnt->mnt_count) - 1;
+	DPRINTK(("autofs4_check_tree: parent %p %.*s\n",
+		 top, (int)top->d_name.len, top->d_name.name));
+
+	/* Negative dentry - give up */
+	if (!simple_positive(top))
+		return 0;
+
+	/* Timeout of a tree mount is determined by its top dentry */
+	if (!autofs4_can_expire(top, timeout, do_now))
+		return 0;
 
+	spin_lock(&dcache_lock);
 repeat:
-	next = this_parent->mnt_mounts.next;
-	DPRINTK(("is_vfsmnt_tree_busy: mnt=%p, this_parent=%p, next=%p\n",
-		 mnt, this_parent, next));
+	next = this_parent->d_subdirs.next;
 resume:
-	for( ; next != &this_parent->mnt_mounts; next = next->next) {
-		struct vfsmount *p = list_entry(next, struct vfsmount,
-						mnt_child);
-
-		/* -1 for struct vfs_mount's normal count, 
-		   -1 to compensate for child's reference to parent */
-		count += atomic_read(&p->mnt_count) - 1 - 1;
+	while (next != &this_parent->d_subdirs) {
+		struct dentry *dentry = list_entry(next, struct dentry, d_child);
+
+		/* Negative dentry - give up */
+		if (!simple_positive(dentry)) {
+			next = next->next;
+			continue;
+		}
 
-		DPRINTK(("is_vfsmnt_tree_busy: p=%p, count now %d\n",
-			 p, count));
+		DPRINTK(("autofs4_check_tree: dentry %p %.*s\n",
+			 dentry, (int)dentry->d_name.len, dentry->d_name.name));
 
-		if (!list_empty(&p->mnt_mounts)) {
-			this_parent = p;
+		if (!simple_empty_nolock(dentry)) {
+			this_parent = dentry;
 			goto repeat;
 		}
-		/* root is busy if any leaf is busy */
-		if (atomic_read(&p->mnt_count) > 1)
-			return 1;
-	}
 
-	/* All done at this level ... ascend and resume the search. */
-	if (this_parent != mnt) {
-		next = this_parent->mnt_child.next; 
-		this_parent = this_parent->mnt_parent;
-		goto resume;
-	}
+		dentry = dget(dentry);
+		spin_unlock(&dcache_lock);
 
-	DPRINTK(("is_vfsmnt_tree_busy: count=%d\n", count));
-	return count != 0; /* remaining users? */
-}
+		if (d_mountpoint(dentry)) {
+			/* First busy => tree busy */
+			if (!autofs4_check_mount(mnt, dentry)) {
+				dput(dentry);
+				return 0;
+			}
+		}
 
-/* Traverse a dentry's list of vfsmounts and return the number of
-   non-busy mounts */
-static int check_vfsmnt(struct vfsmount *mnt, struct dentry *dentry)
-{
-	int ret = dentry->d_mounted;
-	struct vfsmount *vfs = lookup_mnt(mnt, dentry);
+		dput(dentry);
+		spin_lock(&dcache_lock);
+		next = next->next;
+	}
 
-	if (vfs) {
-		mntput(vfs);
-		if (is_vfsmnt_tree_busy(vfs))
-			ret--;
+	if (this_parent != top) {
+		next = this_parent->d_child.next;
+		this_parent = this_parent->d_parent;
+		goto resume;
 	}
-	DPRINTK(("check_vfsmnt: ret=%d\n", ret));
-	return ret;
+	spin_unlock(&dcache_lock);
+
+	return 1;
 }
 
-/* Check dentry tree for busyness.  If a dentry appears to be busy
-   because it is a mountpoint, check to see if the mounted
-   filesystem is busy. */
-static int is_tree_busy(struct vfsmount *topmnt, struct dentry *top)
+struct dentry *autofs4_check_leaves(struct vfsmount *mnt,
+				    struct dentry *parent,
+				    unsigned long timeout,
+				    int do_now)
 {
-	struct dentry *this_parent;
+	struct dentry *this_parent = parent;
 	struct list_head *next;
-	int count;
 
-	count = atomic_read(&top->d_count);
-	
-	DPRINTK(("is_tree_busy: top=%p initial count=%d\n", 
-		 top, count));
-	this_parent = top;
-
-	if (is_autofs4_dentry(top)) {
-		count--;
-		DPRINTK(("is_tree_busy: autofs; count=%d\n", count));
-	}
+	DPRINTK(("autofs4_check_leaves: parent %p %.*s\n",
+		parent, (int)parent->d_name.len, parent->d_name.name));
 
-	if (d_mountpoint(top))
-		count -= check_vfsmnt(topmnt, top);
-
- repeat:
+	spin_lock(&dcache_lock);
+repeat:
 	next = this_parent->d_subdirs.next;
- resume:
+resume:
 	while (next != &this_parent->d_subdirs) {
-		int adj = 0;
-		struct dentry *dentry = list_entry(next, struct dentry,
-						   d_child);
-		next = next->next;
-
-		count += atomic_read(&dentry->d_count) - 1;
-
-		if (d_mountpoint(dentry))
-			adj += check_vfsmnt(topmnt, dentry);
+		struct dentry *dentry = list_entry(next, struct dentry, d_child);
 
-		if (is_autofs4_dentry(dentry)) {
-			adj++;
-			DPRINTK(("is_tree_busy: autofs; adj=%d\n",
-				 adj));
+		/* Negative dentry - give up */
+		if (!simple_positive(dentry)) {
+			next = next->next;
+			continue;
 		}
 
-		count -= adj;
+		DPRINTK(("autofs4_check_leaves: dentry %p %.*s\n",
+			dentry, (int)dentry->d_name.len, dentry->d_name.name));
 
 		if (!list_empty(&dentry->d_subdirs)) {
 			this_parent = dentry;
 			goto repeat;
 		}
 
-		if (atomic_read(&dentry->d_count) != adj) {
-			DPRINTK(("is_tree_busy: busy leaf (d_count=%d adj=%d)\n",
-				 atomic_read(&dentry->d_count), adj));
-			return 1;
+		dentry = dget(dentry);
+		spin_unlock(&dcache_lock);
+
+		if (d_mountpoint(dentry)) {
+			/* Can we expire this guy */
+			if (!autofs4_can_expire(dentry, timeout, do_now))
+				goto cont;
+
+			/* Can we umount this guy */
+			if (autofs4_check_mount(mnt, dentry))
+				return dentry;
+
 		}
+cont:
+		dput(dentry);
+		spin_lock(&dcache_lock);
+		next = next->next;
 	}
 
-	/* All done at this level ... ascend and resume the search. */
-	if (this_parent != top) {
-		next = this_parent->d_child.next; 
+	if (this_parent != parent) {
+		next = this_parent->d_child.next;
 		this_parent = this_parent->d_parent;
 		goto resume;
 	}
+	spin_unlock(&dcache_lock);
 
-	DPRINTK(("is_tree_busy: count=%d\n", count));
-	return count != 0; /* remaining users? */
+	return NULL;
 }
 
 /*
@@ -156,61 +216,86 @@
 static struct dentry *autofs4_expire(struct super_block *sb,
 				     struct vfsmount *mnt,
 				     struct autofs_sb_info *sbi,
-				     int do_now)
+				     int how)
 {
-	unsigned long now = jiffies;
 	unsigned long timeout;
 	struct dentry *root = sb->s_root;
-	struct list_head *tmp;
+	struct dentry *expired = NULL;
+	struct list_head *next;
+	int do_now = how & AUTOFS_EXP_IMMEDIATE;
+	int exp_leaves = how & AUTOFS_EXP_LEAVES;
 
-	if (!sbi->exp_timeout || !root)
+	if ( !sbi->exp_timeout || !root )
 		return NULL;
 
+	now = jiffies;
 	timeout = sbi->exp_timeout;
 
 	spin_lock(&dcache_lock);
-	for(tmp = root->d_subdirs.next;
-	    tmp != &root->d_subdirs; 
-	    tmp = tmp->next) {
-		struct autofs_info *ino;
-		struct dentry *dentry = list_entry(tmp, struct dentry, d_child);
+	next = root->d_subdirs.next;
 
-		if (dentry->d_inode == NULL)
+	/* On exit from the loop expire is set to a dgot dentry
+	 * to expire or it's NULL */
+	while ( next != &root->d_subdirs ) {
+		struct dentry *dentry = list_entry(next, struct dentry, d_child);
+
+		/* Negative dentry - give up */
+		if ( !simple_positive(dentry) ) {
+			next = next->next;
 			continue;
+		}
 
-		ino = autofs4_dentry_ino(dentry);
+		dentry = dget(dentry);
+		spin_unlock(&dcache_lock);
 
-		if (ino == NULL) {
-			/* dentry in the process of being deleted */
-			continue;
+		/* Case 1: indirect mount or top level direct mount */
+		if (d_mountpoint(dentry)) {
+			DPRINTK(("autofs4_expire: checking mountpoint %p %.*s\n",
+			 dentry, (int)dentry->d_name.len, dentry->d_name.name));
+
+			/* Can we expire this guy */
+			if (!autofs4_can_expire(dentry, timeout, do_now))
+				goto next;
+
+			/* Can we umount this guy */
+			if (autofs4_check_mount(mnt, dentry)) {
+				expired = dentry;
+				break;
+			}
+			goto next;
 		}
 
-		/* No point expiring a pending mount */
-		if (dentry->d_flags & DCACHE_AUTOFS_PENDING)
-			continue;
+		if ( simple_empty(dentry) )
+			goto next;
 
-		if (!do_now) {
-			/* Too young to die */
-			if (time_after(ino->last_used + timeout, now))
-				continue;
-		
-			/* update last_used here :- 
-			   - obviously makes sense if it is in use now
-			   - less obviously, prevents rapid-fire expire
-			     attempts if expire fails the first time */
-			ino->last_used = now;
+		/* Case 2: tree mount, expire iff entire tree is not busy */
+		if (!exp_leaves) {
+			if (autofs4_check_tree(mnt, dentry, timeout, do_now)) {
+			expired = dentry;
+			break;
+			}
+		/* Case 3: direct mount, expire individual leaves */
+		} else {
+			expired = autofs4_check_leaves(mnt, dentry, timeout, do_now);
+			if (expired) {
+				dput(dentry);
+				break;
+			}
 		}
-		if (!is_tree_busy(mnt, dentry)) {
-			DPRINTK(("autofs_expire: returning %p %.*s\n",
-				 dentry, (int)dentry->d_name.len, dentry->d_name.name));
-			/* Start from here next time */
-			list_del(&root->d_subdirs);
-			list_add(&root->d_subdirs, &dentry->d_child);
-			dget(dentry);
-			spin_unlock(&dcache_lock);
+next:
+		dput(dentry);
+		spin_lock(&dcache_lock);
+		next = next->next;
+	}
 
-			return dentry;
-		}
+	if ( expired ) {
+		DPRINTK(("autofs4_expire: returning %p %.*s\n",
+			 expired, (int)expired->d_name.len, expired->d_name.name));
+		spin_lock(&dcache_lock);
+		list_del(&expired->d_parent->d_subdirs);
+		list_add(&expired->d_parent->d_subdirs, &expired->d_child);
+		spin_unlock(&dcache_lock);
+		return expired;
 	}
 	spin_unlock(&dcache_lock);
 
@@ -263,7 +348,7 @@
 		/* This is synchronous because it makes the daemon a
                    little easier */
 		de_info->flags |= AUTOFS_INF_EXPIRING;
-		ret = autofs4_wait(sbi, &dentry->d_name, NFY_EXPIRE);
+		ret = autofs4_wait(sbi, dentry, NFY_EXPIRE);
 		de_info->flags &= ~AUTOFS_INF_EXPIRING;
 		dput(dentry);
 	}
diff -Nru a/fs/autofs4/inode.c b/fs/autofs4/inode.c
--- a/fs/autofs4/inode.c	Sun May 16 01:18:36 2004
+++ b/fs/autofs4/inode.c	Sun May 16 01:18:36 2004
@@ -187,6 +187,7 @@
 	struct file * pipe;
 	int pipefd;
 	struct autofs_sb_info *sbi;
+	struct autofs_info *ino;
 	int minproto, maxproto;
 
 	sbi = (struct autofs_sb_info *) kmalloc(sizeof(*sbi), GFP_KERNEL);
@@ -203,6 +204,8 @@
 	sbi->oz_pgrp = process_group(current);
 	sbi->sb = s;
 	sbi->version = 0;
+	sbi->sub_version = 0;
+	init_MUTEX(&sbi->wq_sem);
 	sbi->queues = NULL;
 	s->s_blocksize = 1024;
 	s->s_blocksize_bits = 10;
@@ -212,7 +215,11 @@
 	/*
 	 * Get the root inode and dentry, but defer checking for errors.
 	 */
-	root_inode = autofs4_get_inode(s, autofs4_mkroot(sbi));
+	ino = autofs4_mkroot(sbi);
+	if (!ino)
+		goto fail_free;
+	root_inode = autofs4_get_inode(s, ino);
+	kfree(ino);
 	if (!root_inode)
 		goto fail_free;
 
@@ -244,6 +251,7 @@
 	}
 
 	sbi->version = maxproto > AUTOFS_MAX_PROTO_VERSION ? AUTOFS_MAX_PROTO_VERSION : maxproto;
+	sbi->sub_version = AUTOFS_PROTO_SUBVERSION;
 
 	DPRINTK(("autofs: pipe fd = %d, pgrp = %u\n", pipefd, sbi->oz_pgrp));
 	pipe = fget(pipefd);
@@ -305,7 +313,7 @@
 	if (S_ISDIR(inf->mode)) {
 		inode->i_nlink = 2;
 		inode->i_op = &autofs4_dir_inode_operations;
-		inode->i_fop = &simple_dir_operations;
+		inode->i_fop = &autofs4_dir_operations;
 	} else if (S_ISLNK(inf->mode)) {
 		inode->i_size = inf->size;
 		inode->i_op = &autofs4_symlink_inode_operations;
diff -Nru a/fs/autofs4/root.c b/fs/autofs4/root.c
--- a/fs/autofs4/root.c	Sun May 16 01:18:33 2004
+++ b/fs/autofs4/root.c	Sun May 16 01:18:33 2004
@@ -4,6 +4,7 @@
  *
  *  Copyright 1997-1998 Transmeta Corporation -- All Rights Reserved
  *  Copyright 1999-2000 Jeremy Fitzhardinge <jeremy@goop.org>
+ *  Copyright 2001-2003 Ian Kent <raven@themaw.net>
  *
  * This file is part of the Linux kernel and is made available under
  * the terms of the GNU General Public License, version 2, or at your
@@ -24,17 +25,28 @@
 static int autofs4_dir_rmdir(struct inode *,struct dentry *);
 static int autofs4_dir_mkdir(struct inode *,struct dentry *,int);
 static int autofs4_root_ioctl(struct inode *, struct file *,unsigned int,unsigned long);
+static int autofs4_dir_open(struct inode *inode, struct file *file);
+static int autofs4_dir_close(struct inode *inode, struct file *file);
+static int autofs4_dir_readdir(struct file * filp, void * dirent, filldir_t filldir);
+static int autofs4_root_readdir(struct file * filp, void * dirent, filldir_t filldir);
 static struct dentry *autofs4_root_lookup(struct inode *,struct dentry *, struct nameidata *);
+static int autofs4_dcache_readdir(struct file *, void *, filldir_t);
 
 struct file_operations autofs4_root_operations = {
 	.open		= dcache_dir_open,
 	.release	= dcache_dir_close,
-	.llseek		= dcache_dir_lseek,
 	.read		= generic_read_dir,
-	.readdir	= dcache_readdir,
+	.readdir	= autofs4_root_readdir,
 	.ioctl		= autofs4_root_ioctl,
 };
 
+struct file_operations autofs4_dir_operations = {
+	.open		= autofs4_dir_open,
+	.release	= autofs4_dir_close,
+	.read		= generic_read_dir,
+	.readdir	= autofs4_dir_readdir,
+};
+
 struct inode_operations autofs4_root_inode_operations = {
 	.lookup		= autofs4_root_lookup,
 	.unlink		= autofs4_dir_unlink,
@@ -51,12 +63,37 @@
 	.rmdir		= autofs4_dir_rmdir,
 };
 
+static int autofs4_root_readdir(struct file *file, void *dirent,
+				filldir_t filldir)
+{
+	struct autofs_sb_info *sbi = autofs4_sbi(file->f_dentry->d_sb);
+	int oz_mode = autofs4_oz_mode(sbi);
+
+	DPRINTK(("autofs4_root_readdir called, filp->f_pos = %lld\n",
+			file->f_pos));
+
+	/*
+	 * Don't set reghost flag if:
+	 * 1) f_pos is larger than zero -- we've already been here.
+	 * 2) we haven't even enabled reghosting in the 1st place.
+	 * 3) this is the daemon doing a readdir
+	 */
+	if (oz_mode && file->f_pos == 0 && sbi->reghost_enabled)
+		sbi->needs_reghost = 1;
+
+	DPRINTK(("autofs4_root_readdir: needs_reghost = %d\n",
+			sbi->needs_reghost));
+
+	return autofs4_dcache_readdir(file, dirent, filldir);
+}
+
 /* Update usage from here to top of tree, so that scan of
    top-level directories will give a useful result */
 static void autofs4_update_usage(struct dentry *dentry)
 {
 	struct dentry *top = dentry->d_sb->s_root;
 
+	spin_lock(&dcache_lock);
 	for(; dentry != top; dentry = dentry->d_parent) {
 		struct autofs_info *ino = autofs4_dentry_ino(dentry);
 
@@ -65,11 +102,194 @@
 			ino->last_used = jiffies;
 		}
 	}
+	spin_unlock(&dcache_lock);
+}
+
+/*
+ * From 2.4 kernel readdir.c
+ */
+static int autofs4_dcache_readdir(struct file * filp, void * dirent, filldir_t filldir)
+{
+	int i;
+	struct dentry *dentry = filp->f_dentry;
+
+	i = filp->f_pos;
+	switch (i) {
+		case 0:
+			if (filldir(dirent, ".", 1, i, dentry->d_inode->i_ino, DT_DIR) < 0)
+				break;
+			i++;
+			filp->f_pos++;
+			/* fallthrough */
+		case 1:
+			if (filldir(dirent, "..", 2, i, dentry->d_parent->d_inode->i_ino, DT_DIR) < 0)
+				break;
+			i++;
+			filp->f_pos++;
+			/* fallthrough */
+		default: {
+			struct list_head *list;
+			int j = i-2;
+
+			spin_lock(&dcache_lock);
+			list = dentry->d_subdirs.next;
+
+			for (;;) {
+				if (list == &dentry->d_subdirs) {
+					spin_unlock(&dcache_lock);
+					return 0;
+				}
+				if (!j)
+					break;
+				j--;
+				list = list->next;
+			}
+
+			while(1) {
+				struct dentry *de = list_entry(list, struct dentry, d_child);
+
+				if (!d_unhashed(de) && de->d_inode) {
+					spin_unlock(&dcache_lock);
+					if (filldir(dirent, de->d_name.name, de->d_name.len, filp->f_pos, de->d_inode->i_ino, DT_UNKNOWN) < 0)
+						break;
+					spin_lock(&dcache_lock);
+				}
+				filp->f_pos++;
+				list = list->next;
+				if (list != &dentry->d_subdirs)
+					continue;
+				spin_unlock(&dcache_lock);
+				break;
+			}
+		}
+	}
+	return 0;
+}
+
+static int autofs4_dir_open(struct inode *inode, struct file *file)
+{
+	struct dentry *dentry = file->f_dentry;
+	struct vfsmount *mnt = file->f_vfsmnt;
+	struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb);
+	int status;
+
+	DPRINTK(("autofs4_dir_open: file=%p dentry=%p %.*s\n",
+		file, dentry, dentry->d_name.len, dentry->d_name.name));
+
+	if (autofs4_oz_mode(sbi))
+		goto out;
+
+	if (autofs4_ispending(dentry)) {
+		DPRINTK(("autofs4_dir_open: dentry busy\n"));
+		return -EBUSY;
+	}
+
+	if (!d_mountpoint(dentry) && dentry->d_op && dentry->d_op->d_revalidate) {
+		struct nameidata nd;
+		int empty;
+
+		/* In case there are stale directory dentrys from a failed mount */
+		spin_lock(&dcache_lock);
+		empty = list_empty(&dentry->d_subdirs);
+		spin_unlock(&dcache_lock);
+
+		if (!empty)
+			d_invalidate(dentry);
+
+		nd.flags = LOOKUP_DIRECTORY;
+		status = (dentry->d_op->d_revalidate)(dentry, &nd);
+
+		if (!status)
+			return -ENOENT;
+	}
+
+	if (d_mountpoint(dentry)) {
+		struct file *fp = NULL;
+		struct vfsmount *fp_mnt = mntget(mnt);
+		struct dentry *fp_dentry = dget(dentry);
+
+		while (follow_down(&fp_mnt, &fp_dentry) && d_mountpoint(fp_dentry));
+
+		fp = dentry_open(fp_dentry, fp_mnt, file->f_flags);
+		status = PTR_ERR(fp);
+		if (IS_ERR(fp)) {
+			file->private_data = NULL;
+			return status;
+		}
+		file->private_data = fp;
+	}
+out:
+	return 0;
+}
+
+static int autofs4_dir_close(struct inode *inode, struct file *file)
+{
+	struct dentry *dentry = file->f_dentry;
+	struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb);
+
+	DPRINTK(("autofs4_dir_close: file=%p dentry=%p %.*s\n",
+		file, dentry, dentry->d_name.len, dentry->d_name.name));
+
+	if (autofs4_oz_mode(sbi))
+		goto out;
+
+	if (autofs4_ispending(dentry)) {
+		DPRINTK(("autofs4_dir_close: dentry busy\n"));
+		return -EBUSY;
+	}
+
+	if (d_mountpoint(dentry)) {
+		struct file *fp = file->private_data;
+
+		if (!fp)
+			return -ENOENT;
+
+		filp_close(fp, current->files);
+		file->private_data = NULL;
+	}
+out:
+	return 0;
+}
+
+static int autofs4_dir_readdir(struct file *file, void *dirent, filldir_t filldir)
+{
+	struct dentry *dentry = file->f_dentry;
+	struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb);
+	int status;
+
+	DPRINTK(("autofs4_readdir: file=%p dentry=%p %.*s\n",
+		file, dentry, dentry->d_name.len, dentry->d_name.name));
+
+	if (autofs4_oz_mode(sbi))
+		goto out;
+
+	if (autofs4_ispending(dentry)) {
+		DPRINTK(("autofs4_readdir: dentry busy\n"));
+		return -EBUSY;
+	}
+
+	if (d_mountpoint(dentry)) {
+		struct file *fp = file->private_data;
+
+		if (!fp)
+			return -ENOENT;
+
+		if (!fp->f_op || !fp->f_op->readdir)
+			goto out;
+
+		status = vfs_readdir(fp, filldir, dirent);
+		file->f_pos = fp->f_pos;
+		if (status)
+			autofs4_copy_atime(file, fp);
+		return status;
+	}
+out:
+	return autofs4_dcache_readdir(file, dirent, filldir);
 }
 
 static int try_to_fill_dentry(struct dentry *dentry, 
 			      struct super_block *sb,
-			      struct autofs_sb_info *sbi)
+			      struct autofs_sb_info *sbi, int flags)
 {
 	struct autofs_info *de_info = autofs4_dentry_ino(dentry);
 	int status = 0;
@@ -78,11 +298,10 @@
            when expiration is done to trigger mount request with a new
            dentry */
 	if (de_info && (de_info->flags & AUTOFS_INF_EXPIRING)) {
-		DPRINTK(("try_to_fill_entry: waiting for expire %p name=%.*s, flags&PENDING=%s de_info=%p de_info->flags=%x\n",
-			 dentry, dentry->d_name.len, dentry->d_name.name, 
-			 dentry->d_flags & DCACHE_AUTOFS_PENDING?"t":"f",
-			 de_info, de_info?de_info->flags:0));
-		status = autofs4_wait(sbi, &dentry->d_name, NFY_NONE);
+		DPRINTK(("try_to_fill_entry: waiting for expire %p name=%.*s\n",
+			 dentry, dentry->d_name.len, dentry->d_name.name));
+
+		status = autofs4_wait(sbi, dentry, NFY_NONE);
 		
 		DPRINTK(("try_to_fill_entry: expire done status=%d\n", status));
 		
@@ -93,11 +312,11 @@
 		 dentry, dentry->d_name.len, dentry->d_name.name, dentry->d_inode));
 
 	/* Wait for a pending mount, triggering one if there isn't one already */
-	while(dentry->d_inode == NULL) {
-		DPRINTK(("try_to_fill_entry: waiting for mount name=%.*s, de_info=%p de_info->flags=%x\n",
-			 dentry->d_name.len, dentry->d_name.name, 
-			 de_info, de_info?de_info->flags:0));
-		status = autofs4_wait(sbi, &dentry->d_name, NFY_MOUNT);
+	if (dentry->d_inode == NULL) {
+		DPRINTK(("try_to_fill_entry: waiting for mount name=%.*s\n",
+			 dentry->d_name.len, dentry->d_name.name));
+
+		status = autofs4_wait(sbi, dentry, NFY_MOUNT);
 		 
 		DPRINTK(("try_to_fill_entry: mount done status=%d\n", status));
 
@@ -107,54 +326,65 @@
 		/* Turn this into a real negative dentry? */
 		if (status == -ENOENT) {
 			dentry->d_time = jiffies + AUTOFS_NEGATIVE_TIMEOUT;
+			spin_lock(&dentry->d_lock);
 			dentry->d_flags &= ~DCACHE_AUTOFS_PENDING;
+			spin_unlock(&dentry->d_lock);
 			return 1;
 		} else if (status) {
 			/* Return a negative dentry, but leave it "pending" */
 			return 1;
 		}
-	}
+	/* Trigger mount for path component or follow link */
+	} else if (flags & (LOOKUP_CONTINUE | LOOKUP_DIRECTORY) ||
+			current->link_count) {
+		DPRINTK(("try_to_fill_entry: waiting for mount name=%.*s\n",
+			dentry->d_name.len, dentry->d_name.name));
 
-	/* If this is an unused directory that isn't a mount point,
-	   bitch at the daemon and fix it in user space */
-	spin_lock(&dcache_lock);
-	if (S_ISDIR(dentry->d_inode->i_mode) &&
-	    !d_mountpoint(dentry) && 
-	    list_empty(&dentry->d_subdirs)) {
-		DPRINTK(("try_to_fill_entry: mounting existing dir\n"));
-		spin_unlock(&dcache_lock);
-		return autofs4_wait(sbi, &dentry->d_name, NFY_MOUNT) == 0;
+		spin_lock(&dentry->d_lock);
+		dentry->d_flags |= DCACHE_AUTOFS_PENDING;
+		spin_unlock(&dentry->d_lock);
+		status = autofs4_wait(sbi, dentry, NFY_MOUNT);
+
+		DPRINTK(("try_to_fill_entry: mount done status=%d\n", status));
+
+		if (status) {
+			spin_lock(&dentry->d_lock);
+			dentry->d_flags &= ~DCACHE_AUTOFS_PENDING;
+			spin_unlock(&dentry->d_lock);
+			return 0;
+		}
 	}
-	spin_unlock(&dcache_lock);
 
 	/* We don't update the usages for the autofs daemon itself, this
 	   is necessary for recursive autofs mounts */
 	if (!autofs4_oz_mode(sbi))
 		autofs4_update_usage(dentry);
 
+	spin_lock(&dentry->d_lock);
 	dentry->d_flags &= ~DCACHE_AUTOFS_PENDING;
+	spin_unlock(&dentry->d_lock);
 	return 1;
 }
 
-
 /*
  * Revalidate is called on every cache lookup.  Some of those
  * cache lookups may actually happen while the dentry is not
  * yet completely filled in, and revalidate has to delay such
  * lookups..
  */
-static int autofs4_root_revalidate(struct dentry * dentry, struct nameidata *nd)
+static int autofs4_revalidate(struct dentry * dentry, struct nameidata *nd)
 {
 	struct inode * dir = dentry->d_parent->d_inode;
 	struct autofs_sb_info *sbi = autofs4_sbi(dir->i_sb);
 	int oz_mode = autofs4_oz_mode(sbi);
+	int flags = nd ? nd->flags : 0;
+	int status = 1;
 
 	/* Pending dentry */
 	if (autofs4_ispending(dentry)) {
-		if (autofs4_oz_mode(sbi))
-			return 1;
-		else
-			return try_to_fill_dentry(dentry, dir->i_sb, sbi);
+		if (!oz_mode)
+			status = try_to_fill_dentry(dentry, dir->i_sb, sbi, flags);
+		return status;
 	}
 
 	/* Negative dentry.. invalidate if "old" */
@@ -166,13 +396,12 @@
 	if (S_ISDIR(dentry->d_inode->i_mode) &&
 	    !d_mountpoint(dentry) && 
 	    list_empty(&dentry->d_subdirs)) {
-		DPRINTK(("autofs_root_revalidate: dentry=%p %.*s, emptydir\n",
+		DPRINTK(("autofs4_root_revalidate: dentry=%p %.*s, emptydir\n",
 			 dentry, dentry->d_name.len, dentry->d_name.name));
 		spin_unlock(&dcache_lock);
-		if (oz_mode)
-			return 1;
-		else
-			return try_to_fill_dentry(dentry, dir->i_sb, sbi);
+		if (!oz_mode)
+			status = try_to_fill_dentry(dentry, dir->i_sb, sbi, flags);
+		return status;
 	}
 	spin_unlock(&dcache_lock);
 
@@ -183,16 +412,6 @@
 	return 1;
 }
 
-static int autofs4_revalidate(struct dentry *dentry, struct nameidata *nd)
-{
-	struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb);
-
-	if (!autofs4_oz_mode(sbi))
-		autofs4_update_usage(dentry);
-
-	return 1;
-}
-
 static void autofs4_dentry_release(struct dentry *de)
 {
 	struct autofs_info *inf;
@@ -212,7 +431,7 @@
 
 /* For dentries of directories in the root dir */
 static struct dentry_operations autofs4_root_dentry_operations = {
-	.d_revalidate	= autofs4_root_revalidate,
+	.d_revalidate	= autofs4_revalidate,
 	.d_release	= autofs4_dentry_release,
 };
 
@@ -224,11 +443,10 @@
 
 /* Lookups in non-root dirs never find anything - if it's there, it's
    already in the dcache */
-/* SMP-safe */
 static struct dentry *autofs4_dir_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd)
 {
 #if 0
-	DPRINTK(("autofs_dir_lookup: ignoring lookup of %.*s/%.*s\n",
+	DPRINTK(("autofs4_dir_lookup: iignoring lookup of %.*s/%.*s\n",
 		 dentry->d_parent->d_name.len, dentry->d_parent->d_name.name,
 		 dentry->d_name.len, dentry->d_name.name));
 #endif
@@ -244,7 +462,7 @@
 	struct autofs_sb_info *sbi;
 	int oz_mode;
 
-	DPRINTK(("autofs_root_lookup: name = %.*s\n", 
+	DPRINTK(("autofs4_root_lookup: name = %.*s\n",
 		 dentry->d_name.len, dentry->d_name.name));
 
 	if (dentry->d_name.len > NAME_MAX)
@@ -252,9 +470,8 @@
 
 	sbi = autofs4_sbi(dir->i_sb);
 
-	lock_kernel();
 	oz_mode = autofs4_oz_mode(sbi);
-	DPRINTK(("autofs_lookup: pid = %u, pgrp = %u, catatonic = %d, oz_mode = %d\n",
+	DPRINTK(("autofs4_lookup: pid = %u, pgrp = %u, catatonic = %d, oz_mode = %d\n",
 		 current->pid, process_group(current), sbi->catatonic, oz_mode));
 
 	/*
@@ -269,8 +486,11 @@
 	 */
 	dentry->d_op = &autofs4_root_dentry_operations;
 
-	if (!oz_mode)
+	if (!oz_mode) {
+		spin_lock(&dentry->d_lock);
 		dentry->d_flags |= DCACHE_AUTOFS_PENDING;
+		spin_unlock(&dentry->d_lock);
+	}
 	dentry->d_fsdata = NULL;
 	d_add(dentry, NULL);
 
@@ -285,12 +505,16 @@
 	 * a signal. If so we can force a restart..
 	 */
 	if (dentry->d_flags & DCACHE_AUTOFS_PENDING) {
+		/* See if we were interrupted */
 		if (signal_pending(current)) {
-			unlock_kernel();
-			return ERR_PTR(-ERESTARTNOINTR);
+			sigset_t *sigset = &current->pending.signal;
+			if (sigismember (sigset, SIGKILL) ||
+			    sigismember (sigset, SIGQUIT) ||
+			    sigismember (sigset, SIGINT)) {
+			    return ERR_PTR(-ERESTARTNOINTR);
+			}
 		}
 	}
-	unlock_kernel();
 
 	/*
 	 * If this dentry is unhashed, then we shouldn't honour this
@@ -313,27 +537,21 @@
 	struct inode *inode;
 	char *cp;
 
-	DPRINTK(("autofs_dir_symlink: %s <- %.*s\n", symname, 
+	DPRINTK(("autofs4_dir_symlink: %s <- %.*s\n", symname,
 		 dentry->d_name.len, dentry->d_name.name));
 
-	lock_kernel();
-	if (!autofs4_oz_mode(sbi)) {
-		unlock_kernel();
+	if (!autofs4_oz_mode(sbi))
 		return -EACCES;
-	}
 
 	ino = autofs4_init_ino(ino, sbi, S_IFLNK | 0555);
-	if (ino == NULL) {
-		unlock_kernel();
+	if (ino == NULL)
 		return -ENOSPC;
-	}
 
 	ino->size = strlen(symname);
 	ino->u.symlink = cp = kmalloc(ino->size + 1, GFP_KERNEL);
 
 	if (cp == NULL) {
 		kfree(ino);
-		unlock_kernel();
 		return -ENOSPC;
 	}
 
@@ -353,7 +571,6 @@
 
 	dir->i_mtime = CURRENT_TIME;
 
-	unlock_kernel();
 	return 0;
 }
 
@@ -370,7 +587,7 @@
  * If a process is blocked on the dentry waiting for the expire to finish,
  * it will invalidate the dentry and try to mount with a new one.
  *
- * Also see autofs_dir_rmdir().. 
+ * Also see autofs4_dir_rmdir()..
  */
 static int autofs4_dir_unlink(struct inode *dir, struct dentry *dentry)
 {
@@ -378,11 +595,8 @@
 	struct autofs_info *ino = autofs4_dentry_ino(dentry);
 	
 	/* This allows root to remove symlinks */
-	lock_kernel();
-	if ( !autofs4_oz_mode(sbi) && !capable(CAP_SYS_ADMIN) ) {
-		unlock_kernel();
+	if ( !autofs4_oz_mode(sbi) && !capable(CAP_SYS_ADMIN) )
 		return -EACCES;
-	}
 
 	dput(ino->dentry);
 
@@ -393,8 +607,6 @@
 
 	d_drop(dentry);
 
-	unlock_kernel();
-	
 	return 0;
 }
 
@@ -403,16 +615,12 @@
 	struct autofs_sb_info *sbi = autofs4_sbi(dir->i_sb);
 	struct autofs_info *ino = autofs4_dentry_ino(dentry);
 	
-	lock_kernel();
-	if (!autofs4_oz_mode(sbi)) {
-		unlock_kernel();
+	if (!autofs4_oz_mode(sbi))
 		return -EACCES;
-	}
 
 	spin_lock(&dcache_lock);
 	if (!list_empty(&dentry->d_subdirs)) {
 		spin_unlock(&dcache_lock);
-		unlock_kernel();
 		return -ENOTEMPTY;
 	}
 	__d_drop(dentry);
@@ -426,32 +634,24 @@
 	if (dir->i_nlink)
 		dir->i_nlink--;
 
-	unlock_kernel();
 	return 0;
 }
 
-
-
 static int autofs4_dir_mkdir(struct inode *dir, struct dentry *dentry, int mode)
 {
 	struct autofs_sb_info *sbi = autofs4_sbi(dir->i_sb);
 	struct autofs_info *ino = autofs4_dentry_ino(dentry);
 	struct inode *inode;
 
-	lock_kernel();
-	if ( !autofs4_oz_mode(sbi) ) {
-		unlock_kernel();
+	if ( !autofs4_oz_mode(sbi) )
 		return -EACCES;
-	}
 
-	DPRINTK(("autofs_dir_mkdir: dentry %p, creating %.*s\n",
+	DPRINTK(("autofs4_dir_mkdir: dentry %p, creating %.*s\n",
 		 dentry, dentry->d_name.len, dentry->d_name.name));
 
 	ino = autofs4_init_ino(ino, sbi, S_IFDIR | 0555);
-	if (ino == NULL) {
-		unlock_kernel();
+	if (ino == NULL)
 		return -ENOSPC;
-	}
 
 	inode = autofs4_get_inode(dir->i_sb, ino);
 	d_instantiate(dentry, inode);
@@ -467,7 +667,6 @@
 	dir->i_nlink++;
 	dir->i_mtime = CURRENT_TIME;
 
-	unlock_kernel();
 	return 0;
 }
 
@@ -496,7 +695,68 @@
 	return put_user(sbi->version, p);
 }
 
-/* Identify autofs_dentries - this is so we can tell if there's
+/* Return protocol sub version */
+static inline int autofs4_get_protosubver(struct autofs_sb_info *sbi, int *p)
+{
+	return put_user(sbi->sub_version, p);
+}
+
+/*
+ * Tells the daemon whether we need to reghost or not. Also, clears
+ * the reghost_needed flag.
+ */
+static inline int autofs4_ask_reghost(struct autofs_sb_info *sbi, int *p)
+{
+	int status;
+
+	DPRINTK(("autofs_ask_reghost: returning %d\n", sbi->needs_reghost));
+
+	status = put_user(sbi->needs_reghost, p);
+	if ( status )
+		return status;
+
+	sbi->needs_reghost = 0;
+	return 0;
+}
+
+/*
+ * Enable / Disable reghosting ioctl() operation
+ */
+static inline int autofs4_toggle_reghost(struct autofs_sb_info *sbi, int *p)
+{
+	int status;
+	int val;
+
+	status = get_user(val, p);
+
+	DPRINTK(("autofs4_toggle_reghost: reghost = %d\n", val));
+
+	if (status)
+		return status;
+
+	/* turn on/off reghosting, with the val */
+	sbi->reghost_enabled = val;
+	return 0;
+}
+
+/*
+* Tells the daemon whether it can umount the autofs mount.
+*/
+static inline int autofs4_ask_umount(struct vfsmount *mnt, int *p)
+{
+	int status = 0;
+
+	if (may_umount(mnt) == 0)
+		status = 1;
+
+	DPRINTK(("autofs_ask_umount: returning %d\n", status));
+
+	status = put_user(status, p);
+
+	return status;
+}
+
+/* Identify autofs4_dentries - this is so we can tell if there's
    an extra dentry refcount or not.  We only hold a refcount on the
    dentry if its non-negative (ie, d_inode != NULL)
 */
@@ -517,7 +777,7 @@
 {
 	struct autofs_sb_info *sbi = autofs4_sbi(inode->i_sb);
 
-	DPRINTK(("autofs_ioctl: cmd = 0x%08x, arg = 0x%08lx, sbi = %p, pgrp = %u\n",
+	DPRINTK(("autofs4_root_ioctl: cmd = 0x%08x, arg = 0x%08lx, sbi = %p, pgrp = %u\n",
 		 cmd,arg,sbi,process_group(current)));
 
 	if ( _IOC_TYPE(cmd) != _IOC_TYPE(AUTOFS_IOC_FIRST) ||
@@ -537,8 +797,18 @@
 		return 0;
 	case AUTOFS_IOC_PROTOVER: /* Get protocol version */
 		return autofs4_get_protover(sbi, (int *)arg);
+	case AUTOFS_IOC_PROTOSUBVER: /* Get protocol sub version */
+		return autofs4_get_protosubver(sbi, (int *)arg);
 	case AUTOFS_IOC_SETTIMEOUT:
 		return autofs4_get_set_timeout(sbi,(unsigned long *)arg);
+
+	case AUTOFS_IOC_TOGGLEREGHOST:
+		return autofs4_toggle_reghost(sbi, (int *) arg);
+	case AUTOFS_IOC_ASKREGHOST:
+		return autofs4_ask_reghost(sbi, (int *) arg);
+
+	case AUTOFS_IOC_ASKUMOUNT:
+		return autofs4_ask_umount(filp->f_vfsmnt, (int *) arg);
 
 	/* return a single thing to expire */
 	case AUTOFS_IOC_EXPIRE:
diff -Nru a/fs/autofs4/waitq.c b/fs/autofs4/waitq.c
--- a/fs/autofs4/waitq.c	Sun May 16 01:18:36 2004
+++ b/fs/autofs4/waitq.c	Sun May 16 01:18:36 2004
@@ -3,6 +3,7 @@
  * linux/fs/autofs/waitq.c
  *
  *  Copyright 1997-1998 Transmeta Corporation -- All Rights Reserved
+ *  Copyright 2001-2003 Ian Kent <raven@themaw.net>
  *
  * This file is part of the Linux kernel and is made available under
  * the terms of the GNU General Public License, version 2, or at your
@@ -37,7 +38,7 @@
 		wq->status = -ENOENT; /* Magic is gone - report failure */
 		kfree(wq->name);
 		wq->name = NULL;
-		wake_up(&wq->queue);
+		wake_up_interruptible(&wq->queue);
 		wq = nwq;
 	}
 	if (sbi->pipe) {
@@ -90,7 +91,7 @@
 	union autofs_packet_union pkt;
 	size_t pktsz;
 
-	DPRINTK(("autofs_notify: wait id = 0x%08lx, name = %.*s, type=%d\n",
+	DPRINTK(("autofs4_notify_daemon: wait id = 0x%08lx, name = %.*s, type=%d\n",
 		 wq->wait_queue_token, wq->len, wq->name, type));
 
 	memset(&pkt,0,sizeof pkt); /* For security reasons */
@@ -116,7 +117,7 @@
 		memcpy(ep->name, wq->name, wq->len);
 		ep->name[wq->len] = '\0';
 	} else {
-		printk("autofs_notify_daemon: bad type %d!\n", type);
+		printk("autofs4_notify_daemon: bad type %d!\n", type);
 		return;
 	}
 
@@ -124,62 +125,107 @@
 		autofs4_catatonic_mode(sbi);
 }
 
-int autofs4_wait(struct autofs_sb_info *sbi, struct qstr *name,
+static int autofs4_getpath(struct autofs_sb_info *sbi,
+			   struct dentry *dentry, char **name)
+{
+	struct dentry *root = sbi->sb->s_root;
+	struct dentry *tmp;
+	char *buf = *name;
+	char *p;
+	int len = 0;
+
+	spin_lock(&dcache_lock);
+	for (tmp = dentry ; tmp != root ; tmp = tmp->d_parent)
+		len += tmp->d_name.len + 1;
+
+	if (--len > NAME_MAX) {
+		spin_unlock(&dcache_lock);
+		return 0;
+	}
+
+	*(buf + len) = '\0';
+	p = buf + len - dentry->d_name.len;
+	strncpy(p, dentry->d_name.name, dentry->d_name.len);
+
+	for (tmp = dentry->d_parent; tmp != root ; tmp = tmp->d_parent) {
+		*(--p) = '/';
+		p -= tmp->d_name.len;
+		strncpy(p, tmp->d_name.name, tmp->d_name.len);
+	}
+	spin_unlock(&dcache_lock);
+
+	return len;
+}
+
+int autofs4_wait(struct autofs_sb_info *sbi, struct dentry *dentry,
 		enum autofs_notify notify)
 {
 	struct autofs_wait_queue *wq;
-	int status;
+	char *name;
+	int len, status;
 
 	/* In catatonic mode, we don't wait for nobody */
 	if ( sbi->catatonic )
 		return -ENOENT;
 	
-	/* We shouldn't be able to get here, but just in case */
-	if ( name->len > NAME_MAX )
+	name = kmalloc(NAME_MAX + 1, GFP_KERNEL);
+	if (!name)
+		return -ENOMEM;
+
+	len = autofs4_getpath(sbi, dentry, &name);
+	if (!len) {
+		kfree(name);
 		return -ENOENT;
+	}
 
-	for ( wq = sbi->queues ; wq ; wq = wq->next ) {
-		if ( wq->hash == name->hash &&
-		     wq->len == name->len &&
-		     wq->name && !memcmp(wq->name,name->name,name->len) )
+	if (down_interruptible(&sbi->wq_sem)) {
+		kfree(name);
+		return -EINTR;
+	}
+
+	for (wq = sbi->queues ; wq ; wq = wq->next) {
+		if (wq->hash == dentry->d_name.hash &&
+		    wq->len == len &&
+		    wq->name && !memcmp(wq->name, name, len))
 			break;
 	}
-	
+
 	if ( !wq ) {
 		/* Create a new wait queue */
 		wq = kmalloc(sizeof(struct autofs_wait_queue),GFP_KERNEL);
-		if ( !wq )
-			return -ENOMEM;
-
-		wq->name = kmalloc(name->len,GFP_KERNEL);
-		if ( !wq->name ) {
-			kfree(wq);
+		if ( !wq ) {
+			kfree(name);
+			up(&sbi->wq_sem);
 			return -ENOMEM;
 		}
+
 		wq->wait_queue_token = autofs4_next_wait_queue;
 		if (++autofs4_next_wait_queue == 0)
 			autofs4_next_wait_queue = 1;
-		init_waitqueue_head(&wq->queue);
-		wq->hash = name->hash;
-		wq->len = name->len;
-		wq->status = -EINTR; /* Status return if interrupted */
-		memcpy(wq->name, name->name, name->len);
 		wq->next = sbi->queues;
 		sbi->queues = wq;
+		init_waitqueue_head(&wq->queue);
+		wq->hash = dentry->d_name.hash;
+		wq->name = name;
+		wq->len = len;
+		wq->status = -EINTR; /* Status return if interrupted */
+		atomic_set(&wq->wait_ctr, 2);
+		up(&sbi->wq_sem);
 
-		DPRINTK(("autofs_wait: new wait id = 0x%08lx, name = %.*s, nfy=%d\n",
-			 wq->wait_queue_token, wq->len, wq->name, notify));
+		DPRINTK(("autofs4_wait: new wait id = 0x%08lx, name = %.*s, nfy=%d\n",
+			 (unsigned long) wq->wait_queue_token, wq->len, wq->name, notify));
 		/* autofs4_notify_daemon() may block */
-		wq->wait_ctr = 2;
 		if (notify != NFY_NONE) {
 			autofs4_notify_daemon(sbi,wq, 
-					      notify == NFY_MOUNT ? autofs_ptype_missing :
-								    autofs_ptype_expire_multi);
+					notify == NFY_MOUNT ?
+						  autofs_ptype_missing :
+						  autofs_ptype_expire_multi);
 		}
 	} else {
-		wq->wait_ctr++;
-		DPRINTK(("autofs_wait: existing wait id = 0x%08lx, name = %.*s, nfy=%d\n",
-			 wq->wait_queue_token, wq->len, wq->name, notify));
+		atomic_inc(&wq->wait_ctr);
+		up(&sbi->wq_sem);
+		DPRINTK(("autofs4_wait: existing wait id = 0x%08lx, name = %.*s, nfy=%d\n",
+			 (unsigned long) wq->wait_queue_token, wq->len, wq->name, notify));
 	}
 
 	/* wq->name is NULL if and only if the lock is already released */
@@ -204,19 +250,20 @@
 		recalc_sigpending();
 		spin_unlock_irqrestore(&current->sighand->siglock, irqflags);
 
-		interruptible_sleep_on(&wq->queue);
+		wait_event_interruptible(wq->queue, wq->name == NULL);
 
 		spin_lock_irqsave(&current->sighand->siglock, irqflags);
 		current->blocked = oldset;
 		recalc_sigpending();
 		spin_unlock_irqrestore(&current->sighand->siglock, irqflags);
 	} else {
-		DPRINTK(("autofs_wait: skipped sleeping\n"));
+		DPRINTK(("autofs4_wait: skipped sleeping\n"));
 	}
 
 	status = wq->status;
 
-	if (--wq->wait_ctr == 0)	/* Are we the last process to need status? */
+	/* Are we the last process to need status? */
+	if (atomic_dec_and_test(&wq->wait_ctr))
 		kfree(wq);
 
 	return status;
@@ -227,23 +274,28 @@
 {
 	struct autofs_wait_queue *wq, **wql;
 
+	down(&sbi->wq_sem);
 	for ( wql = &sbi->queues ; (wq = *wql) ; wql = &wq->next ) {
 		if ( wq->wait_queue_token == wait_queue_token )
 			break;
 	}
-	if ( !wq )
+
+	if ( !wq ) {
+		up(&sbi->wq_sem);
 		return -EINVAL;
+	}
 
 	*wql = wq->next;	/* Unlink from chain */
+	up(&sbi->wq_sem);
 	kfree(wq->name);
 	wq->name = NULL;	/* Do not wait on this queue */
 
 	wq->status = status;
 
-	if (--wq->wait_ctr == 0)	/* Is anyone still waiting for this guy? */
+	if (atomic_dec_and_test(&wq->wait_ctr))	/* Is anyone still waiting for this guy? */
 		kfree(wq);
 	else
-		wake_up(&wq->queue);
+		wake_up_interruptible(&wq->queue);
 
 	return 0;
 }
diff -Nru a/fs/befs/befs.h b/fs/befs/befs.h
--- a/fs/befs/befs.h	Sun May 16 01:18:36 2004
+++ b/fs/befs/befs.h	Sun May 16 01:18:36 2004
@@ -14,10 +14,7 @@
 #define BEFS_VERSION "0.9.3"
 
 
-/* Sector_t makes this sillyness obsolete */
 typedef u64 befs_blocknr_t;
-typedef u32 vfs_blocknr_t;
-
 /*
  * BeFS in memory structures
  */
diff -Nru a/fs/befs/btree.c b/fs/befs/btree.c
--- a/fs/befs/btree.c	Sun May 16 01:18:33 2004
+++ b/fs/befs/btree.c	Sun May 16 01:18:33 2004
@@ -372,12 +372,12 @@
 		thiskey = befs_bt_get_key(sb, node, mid, &keylen);
 		eq = befs_compare_strings(thiskey, keylen, findkey,
 					  findkey_len);
-		*value = fs64_to_cpu(sb, valarray[mid]);
 
 		if (eq == 0) {
 			befs_debug(sb, "<--- befs_find_key() found %s at %d",
 				   thiskey, mid);
 
+			*value = fs64_to_cpu(sb, valarray[mid]);
 			return BEFS_BT_MATCH;
 		}
 		if (eq > 0)
@@ -387,6 +387,8 @@
 	}
 	if (eq < 0)
 		*value = fs64_to_cpu(sb, valarray[mid + 1]);
+	else
+		*value = fs64_to_cpu(sb, valarray[mid]);
 	befs_debug(sb, "<--- befs_find_key() found %s at %d", thiskey, mid);
 	return BEFS_BT_PARMATCH;
 }
diff -Nru a/fs/befs/debug.c b/fs/befs/debug.c
--- a/fs/befs/debug.c	Sun May 16 01:18:37 2004
+++ b/fs/befs/debug.c	Sun May 16 01:18:37 2004
@@ -29,22 +29,29 @@
 befs_error(const struct super_block *sb, const char *fmt, ...)
 {
 	va_list args;
-	char err_buf[ERRBUFSIZE];
+	char *err_buf = (char *) kmalloc(ERRBUFSIZE, GFP_KERNEL);
+	if (err_buf == NULL) {
+		printk(KERN_ERR "could not allocate %d bytes\n", ERRBUFSIZE);
+		return;
+	}
 
 	va_start(args, fmt);
 	vsnprintf(err_buf, ERRBUFSIZE, fmt, args);
 	va_end(args);
 
 	printk(KERN_ERR "BeFS(%s): %s\n", sb->s_id, err_buf);
-
-	befs_debug(sb, err_buf);
+	kfree(err_buf);
 }
 
 void
 befs_warning(const struct super_block *sb, const char *fmt, ...)
 {
 	va_list args;
-	char err_buf[ERRBUFSIZE];
+	char *err_buf = (char *) kmalloc(ERRBUFSIZE, GFP_KERNEL);
+	if (err_buf == NULL) {
+		printk(KERN_ERR "could not allocate %d bytes\n", ERRBUFSIZE);
+		return;
+	}
 
 	va_start(args, fmt);
 	vsnprintf(err_buf, ERRBUFSIZE, fmt, args);
@@ -52,7 +59,7 @@
 
 	printk(KERN_WARNING "BeFS(%s): %s\n", sb->s_id, err_buf);
 
-	befs_debug(sb, err_buf);
+	kfree(err_buf);
 }
 
 void
@@ -61,15 +68,25 @@
 #ifdef CONFIG_BEFS_DEBUG
 
 	va_list args;
-	char err_buf[ERRBUFSIZE];
+	char *err_buf = NULL;
 
 	if (BEFS_SB(sb)->mount_opts.debug) {
+		err_buf = (char *) kmalloc(ERRBUFSIZE, GFP_KERNEL);
+		if (err_buf == NULL) {
+			printk(KERN_ERR "could not allocate %d bytes\n",
+				ERRBUFSIZE);
+			return;
+		}
+
 		va_start(args, fmt);
 		vsnprintf(err_buf, ERRBUFSIZE, fmt, args);
 		va_end(args);
 
 		printk(KERN_DEBUG "BeFS(%s): %s\n", sb->s_id, err_buf);
+
+		kfree(err_buf);
 	}
+
 #endif				//CONFIG_BEFS_DEBUG
 }
 
diff -Nru a/fs/befs/io.c b/fs/befs/io.c
--- a/fs/befs/io.c	Sun May 16 01:18:36 2004
+++ b/fs/befs/io.c	Sun May 16 01:18:36 2004
@@ -28,7 +28,6 @@
 {
 	struct buffer_head *bh = NULL;
 	befs_blocknr_t block = 0;
-	vfs_blocknr_t vfs_block = 0;
 	befs_sb_info *befs_sb = BEFS_SB(sb);
 
 	befs_debug(sb, "---> Enter befs_read_iaddr() "
@@ -42,17 +41,10 @@
 	}
 
 	block = iaddr2blockno(sb, &iaddr);
-	vfs_block = (vfs_blocknr_t) block;
-
-	if (vfs_block != block) {
-		befs_error(sb, "Error converting to host blocknr_t. %Lu "
-			   "is larger than the host can use", block);
-		goto error;
-	}
 
 	befs_debug(sb, "befs_read_iaddr: offset = %lu", block);
 
-	bh = sb_bread(sb, vfs_block);
+	bh = sb_bread(sb, block);
 
 	if (bh == NULL) {
 		befs_error(sb, "Failed to read block %lu", block);
@@ -71,20 +63,13 @@
 befs_bread(struct super_block *sb, befs_blocknr_t block)
 {
 	struct buffer_head *bh = NULL;
-	vfs_blocknr_t vfs_block = (vfs_blocknr_t) block;
 
 	befs_debug(sb, "---> Enter befs_read() %Lu", block);
 
-	if (vfs_block != block) {
-		befs_error(sb, "Error converting to host blocknr_t. %Lu "
-			   "is larger than the host can use", block);
-		goto error;
-	}
-
-	bh = sb_bread(sb, vfs_block);
+	bh = sb_bread(sb, block);
 
 	if (bh == NULL) {
-		befs_error(sb, "Failed to read block %lu", vfs_block);
+		befs_error(sb, "Failed to read block %lu", block);
 		goto error;
 	}
 
diff -Nru a/fs/befs/linuxvfs.c b/fs/befs/linuxvfs.c
--- a/fs/befs/linuxvfs.c	Sun May 16 01:18:34 2004
+++ b/fs/befs/linuxvfs.c	Sun May 16 01:18:34 2004
@@ -325,7 +325,7 @@
 		   befs_ino->i_inode_num.allocation_group,
 		   befs_ino->i_inode_num.start, befs_ino->i_inode_num.len);
 
-	bh = befs_bread_iaddr(sb, befs_ino->i_inode_num);
+	bh = befs_bread(sb, inode->i_ino);
 	if (!bh) {
 		befs_error(sb, "unable to read inode block - "
 			   "inode = %lu", inode->i_ino);
@@ -376,7 +376,7 @@
 	befs_ino->i_attribute = fsrun_to_cpu(sb, raw_inode->attributes);
 	befs_ino->i_flags = fs32_to_cpu(sb, raw_inode->flags);
 
-	if (S_ISLNK(inode->i_mode) && !(inode->i_flags & BEFS_LONG_SYMLINK)) {
+	if (S_ISLNK(inode->i_mode) && !(befs_ino->i_flags & BEFS_LONG_SYMLINK)){
 		inode->i_size = 0;
 		inode->i_blocks = befs_sb->block_size / VFS_BLOCK_SIZE;
 		strncpy(befs_ino->i_data.symlink, raw_inode->data.symlink,
@@ -855,6 +855,13 @@
 
 	if (befs_check_sb(sb) != BEFS_OK)
 		goto unaquire_priv_sbp;
+
+	if( befs_sb->num_blocks > ~((sector_t)0) ) {
+		befs_error(sb, "blocks count: %Lu "
+			"is larger than the host can use",
+			befs_sb->num_blocks);
+		goto unaquire_priv_sbp;
+	}
 
 	/*
 	 * set up enough so that it can read an inode
diff -Nru a/fs/bfs/dir.c b/fs/bfs/dir.c
--- a/fs/bfs/dir.c	Sun May 16 01:18:36 2004
+++ b/fs/bfs/dir.c	Sun May 16 01:18:36 2004
@@ -274,7 +274,7 @@
 {
 	struct buffer_head * bh;
 	struct bfs_dirent * de;
-	int block, sblock, eblock, off;
+	int block, sblock, eblock, off, eoff;
 	int i;
 
 	dprintf("name=%s, namelen=%d\n", name, namelen);
@@ -286,12 +286,17 @@
 
 	sblock = BFS_I(dir)->i_sblock;
 	eblock = BFS_I(dir)->i_eblock;
+	eoff = dir->i_size % BFS_BSIZE;
 	for (block=sblock; block<=eblock; block++) {
 		bh = sb_bread(dir->i_sb, block);
 		if(!bh) 
 			return -ENOSPC;
 		for (off=0; off<BFS_BSIZE; off+=BFS_DIRENT_SIZE) {
 			de = (struct bfs_dirent *)(bh->b_data + off);
+			if (block==eblock && off>=eoff) {
+				/* Do not read/interpret the garbage in the end of eblock. */
+				de->ino = 0;
+			}
 			if (!de->ino) {
 				if ((block-sblock)*BFS_BSIZE + off >= dir->i_size) {
 					dir->i_size += BFS_DIRENT_SIZE;
diff -Nru a/fs/binfmt_aout.c b/fs/binfmt_aout.c
--- a/fs/binfmt_aout.c	Sun May 16 01:18:34 2004
+++ b/fs/binfmt_aout.c	Sun May 16 01:18:34 2004
@@ -521,6 +521,6 @@
 	unregister_binfmt(&aout_format);
 }
 
-module_init(init_aout_binfmt);
+core_initcall(init_aout_binfmt);
 module_exit(exit_aout_binfmt);
 MODULE_LICENSE("GPL");
diff -Nru a/fs/binfmt_elf.c b/fs/binfmt_elf.c
--- a/fs/binfmt_elf.c	Sun May 16 01:18:35 2004
+++ b/fs/binfmt_elf.c	Sun May 16 01:18:35 2004
@@ -1543,6 +1543,6 @@
 	unregister_binfmt(&elf_format);
 }
 
-module_init(init_elf_binfmt)
-module_exit(exit_elf_binfmt)
+core_initcall(init_elf_binfmt);
+module_exit(exit_elf_binfmt);
 MODULE_LICENSE("GPL");
diff -Nru a/fs/binfmt_em86.c b/fs/binfmt_em86.c
--- a/fs/binfmt_em86.c	Sun May 16 01:18:35 2004
+++ b/fs/binfmt_em86.c	Sun May 16 01:18:35 2004
@@ -110,6 +110,6 @@
 	unregister_binfmt(&em86_format);
 }
 
-module_init(init_em86_binfmt)
-module_exit(exit_em86_binfmt)
+core_initcall(init_em86_binfmt);
+module_exit(exit_em86_binfmt);
 MODULE_LICENSE("GPL");
diff -Nru a/fs/binfmt_flat.c b/fs/binfmt_flat.c
--- a/fs/binfmt_flat.c	Sun May 16 01:18:33 2004
+++ b/fs/binfmt_flat.c	Sun May 16 01:18:33 2004
@@ -723,7 +723,7 @@
 				return -ENOEXEC;
 
 			/* Get the pointer's value.  */
-			addr = flat_get_addr_from_rp(rp, relval);
+			addr = flat_get_addr_from_rp(rp, relval, flags);
 			if (addr != 0) {
 				/*
 				 * Do the relocation.  PIC relocs in the data section are
@@ -896,7 +896,7 @@
 
 /****************************************************************************/
 
-module_init(init_flat_binfmt);
+core_initcall(init_flat_binfmt);
 module_exit(exit_flat_binfmt);
 
 /****************************************************************************/
diff -Nru a/fs/binfmt_misc.c b/fs/binfmt_misc.c
--- a/fs/binfmt_misc.c	Sun May 16 01:18:34 2004
+++ b/fs/binfmt_misc.c	Sun May 16 01:18:34 2004
@@ -656,6 +656,6 @@
 	unregister_filesystem(&bm_fs_type);
 }
 
-module_init(init_misc_binfmt);
+core_initcall(init_misc_binfmt);
 module_exit(exit_misc_binfmt);
 MODULE_LICENSE("GPL");
diff -Nru a/fs/binfmt_script.c b/fs/binfmt_script.c
--- a/fs/binfmt_script.c	Sun May 16 01:18:33 2004
+++ b/fs/binfmt_script.c	Sun May 16 01:18:33 2004
@@ -111,6 +111,6 @@
 	unregister_binfmt(&script_format);
 }
 
-module_init(init_script_binfmt)
-module_exit(exit_script_binfmt)
+core_initcall(init_script_binfmt);
+module_exit(exit_script_binfmt);
 MODULE_LICENSE("GPL");
diff -Nru a/fs/binfmt_som.c b/fs/binfmt_som.c
--- a/fs/binfmt_som.c	Sun May 16 01:18:34 2004
+++ b/fs/binfmt_som.c	Sun May 16 01:18:34 2004
@@ -305,5 +305,5 @@
 	unregister_binfmt(&som_format);
 }
 
-module_init(init_som_binfmt);
+core_initcall(init_som_binfmt);
 module_exit(exit_som_binfmt);
diff -Nru a/fs/buffer.c b/fs/buffer.c
--- a/fs/buffer.c	Sun May 16 01:18:35 2004
+++ b/fs/buffer.c	Sun May 16 01:18:35 2004
@@ -43,6 +43,26 @@
 
 #define BH_ENTRY(list) list_entry((list), struct buffer_head, b_assoc_buffers)
 
+struct bh_wait_queue {
+	struct buffer_head *bh;
+	wait_queue_t wait;
+};
+
+#define __DEFINE_BH_WAIT(name, b, f)					\
+	struct bh_wait_queue name = {					\
+		.bh	= b,						\
+		.wait	= {						\
+				.task	= current,			\
+				.flags	= f,				\
+				.func	= bh_wake_function,		\
+				.task_list =				\
+					LIST_HEAD_INIT(name.wait.task_list),\
+			},						\
+	}
+#define DEFINE_BH_WAIT(name, bh)	__DEFINE_BH_WAIT(name, bh, 0)
+#define DEFINE_BH_WAIT_EXCLUSIVE(name, bh) \
+		__DEFINE_BH_WAIT(name, bh, WQ_FLAG_EXCLUSIVE)
+
 /*
  * Hashed waitqueue_head's for wait_on_buffer()
  */
@@ -74,10 +94,50 @@
 
 	smp_mb();
 	if (waitqueue_active(wq))
-		wake_up_all(wq);
+		__wake_up(wq, TASK_INTERRUPTIBLE|TASK_UNINTERRUPTIBLE, 1, bh);
 }
 EXPORT_SYMBOL(wake_up_buffer);
 
+static int bh_wake_function(wait_queue_t *wait, unsigned mode,
+				int sync, void *key)
+{
+	struct buffer_head *bh = key;
+	struct bh_wait_queue *wq;
+
+	wq = container_of(wait, struct bh_wait_queue, wait);
+	if (wq->bh != bh || buffer_locked(bh))
+		return 0;
+	else
+		return autoremove_wake_function(wait, mode, sync, key);
+}
+
+static void sync_buffer(struct buffer_head *bh)
+{
+	struct block_device *bd;
+
+	smp_mb();
+	bd = bh->b_bdev;
+	if (bd)
+		blk_run_address_space(bd->bd_inode->i_mapping);
+}
+
+void fastcall __lock_buffer(struct buffer_head *bh)
+{
+	wait_queue_head_t *wqh = bh_waitq_head(bh);
+	DEFINE_BH_WAIT_EXCLUSIVE(wait, bh);
+
+	do {
+		prepare_to_wait_exclusive(wqh, &wait.wait,
+					TASK_UNINTERRUPTIBLE);
+		if (buffer_locked(bh)) {
+			sync_buffer(bh);
+			io_schedule();
+		}
+	} while (test_set_buffer_locked(bh));
+	finish_wait(wqh, &wait.wait);
+}
+EXPORT_SYMBOL(__lock_buffer);
+
 void fastcall unlock_buffer(struct buffer_head *bh)
 {
 	clear_buffer_locked(bh);
@@ -93,20 +153,16 @@
 void __wait_on_buffer(struct buffer_head * bh)
 {
 	wait_queue_head_t *wqh = bh_waitq_head(bh);
-	DEFINE_WAIT(wait);
+	DEFINE_BH_WAIT(wait, bh);
 
 	do {
-		prepare_to_wait(wqh, &wait, TASK_UNINTERRUPTIBLE);
+		prepare_to_wait(wqh, &wait.wait, TASK_UNINTERRUPTIBLE);
 		if (buffer_locked(bh)) {
-			struct block_device *bd;
-			smp_mb();
-			bd = bh->b_bdev;
-			if (bd)
-				blk_run_address_space(bd->bd_inode->i_mapping);
+			sync_buffer(bh);
 			io_schedule();
 		}
 	} while (buffer_locked(bh));
-	finish_wait(wqh, &wait);
+	finish_wait(wqh, &wait.wait);
 }
 
 static void
@@ -2904,10 +2960,7 @@
 
 int block_sync_page(struct page *page)
 {
-	struct address_space *mapping;
-	smp_mb();
-	mapping = page->mapping;
-	blk_run_address_space(mapping);
+	blk_run_page(page);
 	return 0;
 }
 
@@ -2966,7 +3019,7 @@
 	if (__get_cpu_var(bh_accounting).ratelimit++ < 4096)
 		return;
 	__get_cpu_var(bh_accounting).ratelimit = 0;
-	for_each_cpu(i)
+	for_each_online_cpu(i)
 		tot += per_cpu(bh_accounting, i).nr;
 	buffer_heads_over_limit = (tot > max_buffer_heads);
 }
diff -Nru a/fs/compat.c b/fs/compat.c
--- a/fs/compat.c	Sun May 16 01:18:35 2004
+++ b/fs/compat.c	Sun May 16 01:18:35 2004
@@ -34,9 +34,17 @@
 #include <linux/syscalls.h>
 #include <linux/ctype.h>
 #include <linux/module.h>
+#include <linux/dnotify.h>
+#include <linux/highuid.h>
+#include <linux/sunrpc/svc.h>
+#include <linux/nfsd/nfsd.h>
+#include <linux/nfsd/syscall.h>
+#include <linux/personality.h>
+
 #include <net/sock.h>		/* siocdevprivate_ioctl */
 
 #include <asm/uaccess.h>
+#include <asm/mmu_context.h>
 
 /*
  * Not all architectures have sys_utime, so implement this in terms
@@ -282,53 +290,36 @@
 
 __initcall(init_sys32_ioctl);
 
-static struct ioctl_trans *ioctl_free_list;
-
-/* Never free them really. This avoids SMP races. With a Read-Copy-Update
-   enabled kernel we could just use the RCU infrastructure for this. */
-static void free_ioctl(struct ioctl_trans *t) 
-{ 
-	t->cmd = 0; 
-	mb();
-	t->next = ioctl_free_list;
-	ioctl_free_list = t;
-} 
-
-int register_ioctl32_conversion(unsigned int cmd, int (*handler)(unsigned int, unsigned int, unsigned long, struct file *))
+int register_ioctl32_conversion(unsigned int cmd, int (*handler)(unsigned int,
+				unsigned int, unsigned long, struct file *))
 {
 	struct ioctl_trans *t;
+	struct ioctl_trans *new_t;
 	unsigned long hash = ioctl32_hash(cmd);
 
+	new_t = kmalloc(sizeof(*new_t), GFP_KERNEL);
+	if (!new_t)
+		return -ENOMEM;
+
 	lock_kernel(); 
-	for (t = (struct ioctl_trans *)ioctl32_hash_table[hash];
-	     t;
-	     t = t->next) { 
+	for (t = ioctl32_hash_table[hash]; t; t = t->next) {
 		if (t->cmd == cmd) {
-			printk("Trying to register duplicated ioctl32 handler %x\n", cmd);
+			printk(KERN_ERR "Trying to register duplicated ioctl32 "
+					"handler %x\n", cmd);
 			unlock_kernel();
+			kfree(new_t);
 			return -EINVAL; 
 		}
-	} 
-
-	if (ioctl_free_list) { 
-		t = ioctl_free_list; 
-		ioctl_free_list = t->next; 
-	} else { 
-		t = kmalloc(sizeof(struct ioctl_trans), GFP_KERNEL); 
-		if (!t) { 
-			unlock_kernel();
-			return -ENOMEM;
-		}
 	}
-	
-	t->next = NULL;
-	t->cmd = cmd;
-	t->handler = handler; 
-	ioctl32_insert_translation(t);
+	new_t->next = NULL;
+	new_t->cmd = cmd;
+	new_t->handler = handler;
+	ioctl32_insert_translation(new_t);
 
 	unlock_kernel();
 	return 0;
 }
+EXPORT_SYMBOL(register_ioctl32_conversion);
 
 static inline int builtin_ioctl(struct ioctl_trans *t)
 { 
@@ -347,7 +338,7 @@
 
 	lock_kernel(); 
 
-	t = (struct ioctl_trans *)ioctl32_hash_table[hash];
+	t = ioctl32_hash_table[hash];
 	if (!t) { 
 		unlock_kernel();
 		return -EINVAL;
@@ -358,38 +349,39 @@
 			printk("%p tried to unregister builtin ioctl %x\n",
 			       __builtin_return_address(0), cmd);
 		} else { 
-		ioctl32_hash_table[hash] = t->next;
-			free_ioctl(t); 
+			ioctl32_hash_table[hash] = t->next;
 			unlock_kernel();
-		return 0;
+			kfree(t);
+			return 0;
 		}
 	} 
 	while (t->next) {
-		t1 = (struct ioctl_trans *)(long)t->next;
+		t1 = t->next;
 		if (t1->cmd == cmd) { 
 			if (builtin_ioctl(t1)) {
-				printk("%p tried to unregister builtin ioctl %x\n",
-				       __builtin_return_address(0), cmd);
+				printk("%p tried to unregister builtin "
+					"ioctl %x\n",
+					__builtin_return_address(0), cmd);
 				goto out;
 			} else { 
-			t->next = t1->next;
-				free_ioctl(t1); 
+				t->next = t1->next;
 				unlock_kernel();
-			return 0;
+				kfree(t1);
+				return 0;
 			}
 		}
 		t = t1;
 	}
-	printk(KERN_ERR "Trying to free unknown 32bit ioctl handler %x\n", cmd);
- out:
+	printk(KERN_ERR "Trying to free unknown 32bit ioctl handler %x\n",
+				cmd);
+out:
 	unlock_kernel();
 	return -EINVAL;
 }
-
-EXPORT_SYMBOL(register_ioctl32_conversion); 
 EXPORT_SYMBOL(unregister_ioctl32_conversion); 
 
-asmlinkage long compat_sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg)
+asmlinkage long compat_sys_ioctl(unsigned int fd, unsigned int cmd,
+				unsigned long arg)
 {
 	struct file * filp;
 	int error = -EBADF;
@@ -404,43 +396,53 @@
 		goto out;
 	}
 
-	t = (struct ioctl_trans *)ioctl32_hash_table [ioctl32_hash (cmd)];
+	lock_kernel();
+
+	t = ioctl32_hash_table[ioctl32_hash (cmd)];
 
 	while (t && t->cmd != cmd)
-		t = (struct ioctl_trans *)t->next;
+		t = t->next;
 	if (t) {
 		if (t->handler) { 
-			lock_kernel();
 			error = t->handler(fd, cmd, arg, filp);
 			unlock_kernel();
-		} else
+		} else {
+			unlock_kernel();
 			error = sys_ioctl(fd, cmd, arg);
-	} else if (cmd >= SIOCDEVPRIVATE && cmd <= (SIOCDEVPRIVATE + 15)) {
-		error = siocdevprivate_ioctl(fd, cmd, arg);
+		}
 	} else {
-		static int count;
-		if (++count <= 50) { 
-			char buf[10];
-			char *path = (char *)__get_free_page(GFP_KERNEL), *fn = "?"; 
-
-			/* find the name of the device. */
-			if (path) {
-		       		fn = d_path(filp->f_dentry, filp->f_vfsmnt, 
-					    path, PAGE_SIZE);
+		unlock_kernel();
+		if (cmd >= SIOCDEVPRIVATE && cmd <= (SIOCDEVPRIVATE + 15)) {
+			error = siocdevprivate_ioctl(fd, cmd, arg);
+		} else {
+			static int count;
+			if (++count <= 50) {
+				char buf[10];
+				char *fn = "?";
+				char *path;
+
+				path = (char *)__get_free_page(GFP_KERNEL);
+
+				/* find the name of the device. */
+				if (path) {
+			       		fn = d_path(filp->f_dentry,
+						filp->f_vfsmnt, path,
+						PAGE_SIZE);
+				}
+
+				sprintf(buf,"'%c'", (cmd>>24) & 0x3f);
+				if (!isprint(buf[1]))
+				    sprintf(buf, "%02x", buf[1]);
+				printk("ioctl32(%s:%d): Unknown cmd fd(%d) "
+					"cmd(%08x){%s} arg(%08x) on %s\n",
+					current->comm, current->pid,
+					(int)fd, (unsigned int)cmd, buf,
+					(unsigned int)arg, fn);
+				if (path)
+					free_page((unsigned long)path);
 			}
-
-			sprintf(buf,"'%c'", (cmd>>24) & 0x3f); 
-			if (!isprint(buf[1]))
-			    sprintf(buf, "%02x", buf[1]);
-			printk("ioctl32(%s:%d): Unknown cmd fd(%d) "
-			       "cmd(%08x){%s} arg(%08x) on %s\n",
-			       current->comm, current->pid,
-			       (int)fd, (unsigned int)cmd, buf, (unsigned int)arg,
-			       fn);
-			if (path) 
-				free_page((unsigned long)path); 
+			error = -EINVAL;
 		}
-		error = -EINVAL;
 	}
 out:
 	fput(filp);
@@ -794,3 +796,839 @@
 	return retval;
 }
 
+static ssize_t compat_do_readv_writev(int type, struct file *file,
+			       const struct compat_iovec __user *uvector,
+			       unsigned long nr_segs, loff_t *pos)
+{
+	typedef ssize_t (*io_fn_t)(struct file *, char __user *, size_t, loff_t *);
+	typedef ssize_t (*iov_fn_t)(struct file *, const struct iovec *, unsigned long, loff_t *);
+
+	compat_ssize_t tot_len;
+	struct iovec iovstack[UIO_FASTIOV];
+	struct iovec *iov=iovstack, *vector;
+	ssize_t ret;
+	int seg;
+	io_fn_t fn;
+	iov_fn_t fnv;
+	struct inode *inode;
+
+	/*
+	 * SuS says "The readv() function *may* fail if the iovcnt argument
+	 * was less than or equal to 0, or greater than {IOV_MAX}.  Linux has
+	 * traditionally returned zero for zero segments, so...
+	 */
+	ret = 0;
+	if (nr_segs == 0)
+		goto out;
+
+	/*
+	 * First get the "struct iovec" from user memory and
+	 * verify all the pointers
+	 */
+	ret = -EINVAL;
+	if ((nr_segs > UIO_MAXIOV) || (nr_segs <= 0))
+		goto out;
+	if (!file->f_op)
+		goto out;
+	if (nr_segs > UIO_FASTIOV) {
+		ret = -ENOMEM;
+		iov = kmalloc(nr_segs*sizeof(struct iovec), GFP_KERNEL);
+		if (!iov)
+			goto out;
+	}
+	ret = -EFAULT;
+	if (verify_area(VERIFY_READ, uvector, nr_segs*sizeof(*uvector)))
+		goto out;
+
+	/*
+	 * Single unix specification:
+	 * We should -EINVAL if an element length is not >= 0 and fitting an
+	 * ssize_t.  The total length is fitting an ssize_t
+	 *
+	 * Be careful here because iov_len is a size_t not an ssize_t
+	 */
+	tot_len = 0;
+	vector = iov;
+	ret = -EINVAL;
+	for (seg = 0 ; seg < nr_segs; seg++) {
+		compat_ssize_t tmp = tot_len;
+		compat_ssize_t len;
+		compat_uptr_t buf;
+
+		if (__get_user(len, &uvector->iov_len) ||
+		    __get_user(buf, &uvector->iov_base)) {
+			ret = -EFAULT;
+			goto out;
+		}
+		if (len < 0)	/* size_t not fitting an compat_ssize_t .. */
+			goto out;
+		tot_len += len;
+		if (tot_len < tmp) /* maths overflow on the compat_ssize_t */
+			goto out;
+		vector->iov_base = compat_ptr(buf);
+		vector->iov_len = (compat_size_t) len;
+		uvector++;
+		vector++;
+	}
+	if (tot_len == 0) {
+		ret = 0;
+		goto out;
+	}
+
+	inode = file->f_dentry->d_inode;
+	/* VERIFY_WRITE actually means a read, as we write to user space */
+	ret = locks_verify_area((type == READ
+				 ? FLOCK_VERIFY_READ : FLOCK_VERIFY_WRITE),
+				inode, file, *pos, tot_len);
+	if (ret)
+		goto out;
+
+	fnv = NULL;
+	if (type == READ) {
+		fn = file->f_op->read;
+		fnv = file->f_op->readv;
+	} else {
+		fn = (io_fn_t)file->f_op->write;
+		fnv = file->f_op->writev;
+	}
+	if (fnv) {
+		ret = fnv(file, iov, nr_segs, pos);
+		goto out;
+	}
+
+	/* Do it by hand, with file-ops */
+	ret = 0;
+	vector = iov;
+	while (nr_segs > 0) {
+		void __user * base;
+		size_t len;
+		ssize_t nr;
+
+		base = vector->iov_base;
+		len = vector->iov_len;
+		vector++;
+		nr_segs--;
+
+		nr = fn(file, base, len, pos);
+
+		if (nr < 0) {
+			if (!ret) ret = nr;
+			break;
+		}
+		ret += nr;
+		if (nr != len)
+			break;
+	}
+out:
+	if (iov != iovstack)
+		kfree(iov);
+	if ((ret + (type == READ)) > 0)
+		dnotify_parent(file->f_dentry,
+				(type == READ) ? DN_ACCESS : DN_MODIFY);
+	return ret;
+}
+
+asmlinkage ssize_t
+compat_sys_readv(unsigned long fd, const struct compat_iovec __user *vec, unsigned long vlen)
+{
+	struct file *file;
+	ssize_t ret = -EBADF;
+
+	file = fget(fd);
+	if (!file)
+		return -EBADF;
+
+	if (!(file->f_mode & FMODE_READ))
+		goto out;
+
+	ret = -EINVAL;
+	if (!file->f_op || (!file->f_op->readv && !file->f_op->read))
+		goto out;
+
+	ret = compat_do_readv_writev(READ, file, vec, vlen, &file->f_pos);
+
+out:
+	fput(file);
+	return ret;
+}
+
+asmlinkage ssize_t
+compat_sys_writev(unsigned long fd, const struct compat_iovec __user *vec, unsigned long vlen)
+{
+	struct file *file;
+	ssize_t ret = -EBADF;
+
+	file = fget(fd);
+	if (!file)
+		return -EBADF;
+	if (!(file->f_mode & FMODE_WRITE))
+		goto out;
+
+	ret = -EINVAL;
+	if (!file->f_op || (!file->f_op->writev && !file->f_op->write))
+		goto out;
+
+	ret = compat_do_readv_writev(WRITE, file, vec, vlen, &file->f_pos);
+
+out:
+	fput(file);
+	return ret;
+}
+
+/*
+ * compat_count() counts the number of arguments/envelopes. It is basically
+ * a copy of count() from fs/exec.c, except that it works with 32 bit argv
+ * and envp pointers.
+ */
+static int compat_count(compat_uptr_t *argv, int max)
+{
+	int i = 0;
+
+	if (argv != NULL) {
+		for (;;) {
+			compat_uptr_t p;
+
+			if (get_user(p, argv))
+				return -EFAULT;
+			if (!p)
+				break;
+			argv++;
+			if(++i > max)
+				return -E2BIG;
+		}
+	}
+	return i;
+}
+
+/*
+ * compat_copy_strings() is basically a copy of copy_strings() from fs/exec.c
+ * except that it works with 32 bit argv and envp pointers.
+ */
+static int compat_copy_strings(int argc, compat_uptr_t __user *argv,
+				struct linux_binprm *bprm)
+{
+	struct page *kmapped_page = NULL;
+	char *kaddr = NULL;
+	int ret;
+
+	while (argc-- > 0) {
+		compat_uptr_t str;
+		int len;
+		unsigned long pos;
+
+		if (get_user(str, argv+argc) ||
+			!(len = strnlen_user(compat_ptr(str), bprm->p))) {
+			ret = -EFAULT;
+			goto out;
+		}
+
+		if (bprm->p < len)  {
+			ret = -E2BIG;
+			goto out;
+		}
+
+		bprm->p -= len;
+		/* XXX: add architecture specific overflow check here. */
+		pos = bprm->p;
+
+		while (len > 0) {
+			int i, new, err;
+			int offset, bytes_to_copy;
+			struct page *page;
+
+			offset = pos % PAGE_SIZE;
+			i = pos/PAGE_SIZE;
+			page = bprm->page[i];
+			new = 0;
+			if (!page) {
+				page = alloc_page(GFP_HIGHUSER);
+				bprm->page[i] = page;
+				if (!page) {
+					ret = -ENOMEM;
+					goto out;
+				}
+				new = 1;
+			}
+
+			if (page != kmapped_page) {
+				if (kmapped_page)
+					kunmap(kmapped_page);
+				kmapped_page = page;
+				kaddr = kmap(kmapped_page);
+			}
+			if (new && offset)
+				memset(kaddr, 0, offset);
+			bytes_to_copy = PAGE_SIZE - offset;
+			if (bytes_to_copy > len) {
+				bytes_to_copy = len;
+				if (new)
+					memset(kaddr+offset+len, 0,
+						PAGE_SIZE-offset-len);
+			}
+			err = copy_from_user(kaddr+offset, compat_ptr(str),
+						bytes_to_copy);
+			if (err) {
+				ret = -EFAULT;
+				goto out;
+			}
+
+			pos += bytes_to_copy;
+			str += bytes_to_copy;
+			len -= bytes_to_copy;
+		}
+	}
+	ret = 0;
+out:
+	if (kmapped_page)
+		kunmap(kmapped_page);
+	return ret;
+}
+
+#ifdef CONFIG_MMU
+
+#define free_arg_pages(bprm) do { } while (0)
+
+#else
+
+static inline void free_arg_pages(struct linux_binprm *bprm)
+{
+	int i;
+
+	for (i = 0; i < MAX_ARG_PAGES; i++) {
+		if (bprm->page[i])
+			__free_page(bprm->page[i]);
+		bprm->page[i] = NULL;
+	}
+}
+
+#endif /* CONFIG_MMU */
+
+/*
+ * compat_do_execve() is mostly a copy of do_execve(), with the exception
+ * that it processes 32 bit argv and envp pointers.
+ */
+int compat_do_execve(char * filename,
+	compat_uptr_t __user *argv,
+	compat_uptr_t __user *envp,
+	struct pt_regs * regs)
+{
+	struct linux_binprm bprm;
+	struct file *file;
+	int retval;
+	int i;
+
+	sched_balance_exec();
+
+	file = open_exec(filename);
+
+	retval = PTR_ERR(file);
+	if (IS_ERR(file))
+		return retval;
+
+	bprm.p = PAGE_SIZE*MAX_ARG_PAGES-sizeof(void *);
+	memset(bprm.page, 0, MAX_ARG_PAGES*sizeof(bprm.page[0]));
+
+	bprm.file = file;
+	bprm.filename = filename;
+	bprm.interp = filename;
+	bprm.sh_bang = 0;
+	bprm.loader = 0;
+	bprm.exec = 0;
+	bprm.security = NULL;
+	bprm.mm = mm_alloc();
+	retval = -ENOMEM;
+	if (!bprm.mm)
+		goto out_file;
+
+	retval = init_new_context(current, bprm.mm);
+	if (retval < 0)
+		goto out_mm;
+
+	bprm.argc = compat_count(argv, bprm.p / sizeof(compat_uptr_t));
+	if ((retval = bprm.argc) < 0)
+		goto out_mm;
+
+	bprm.envc = compat_count(envp, bprm.p / sizeof(compat_uptr_t));
+	if ((retval = bprm.envc) < 0)
+		goto out_mm;
+
+	retval = security_bprm_alloc(&bprm);
+	if (retval)
+		goto out;
+
+	retval = prepare_binprm(&bprm);
+	if (retval < 0)
+		goto out;
+
+	retval = copy_strings_kernel(1, &bprm.filename, &bprm);
+	if (retval < 0)
+		goto out;
+
+	bprm.exec = bprm.p;
+	retval = compat_copy_strings(bprm.envc, envp, &bprm);
+	if (retval < 0)
+		goto out;
+
+	retval = compat_copy_strings(bprm.argc, argv, &bprm);
+	if (retval < 0)
+		goto out;
+
+	retval = search_binary_handler(&bprm,regs);
+	if (retval >= 0) {
+		free_arg_pages(&bprm);
+
+		/* execve success */
+		security_bprm_free(&bprm);
+		return retval;
+	}
+
+out:
+	/* Something went wrong, return the inode and free the argument pages*/
+	for (i = 0 ; i < MAX_ARG_PAGES ; i++) {
+		struct page * page = bprm.page[i];
+		if (page)
+			__free_page(page);
+	}
+
+	if (bprm.security)
+		security_bprm_free(&bprm);
+
+out_mm:
+	if (bprm.mm)
+		mmdrop(bprm.mm);
+
+out_file:
+	if (bprm.file) {
+		allow_write_access(bprm.file);
+		fput(bprm.file);
+	}
+
+	return retval;
+}
+
+#define __COMPAT_NFDBITS       (8 * sizeof(compat_ulong_t))
+
+#define ROUND_UP(x,y) (((x)+(y)-1)/(y))
+
+/*
+ * Ooo, nasty.  We need here to frob 32-bit unsigned longs to
+ * 64-bit unsigned longs.
+ */
+static inline
+int compat_get_fd_set(unsigned long nr, compat_ulong_t __user *ufdset,
+			unsigned long *fdset)
+{
+	nr = ROUND_UP(nr, __COMPAT_NFDBITS);
+	if (ufdset) {
+		unsigned long odd;
+
+		if (verify_area(VERIFY_WRITE, ufdset, nr*sizeof(compat_ulong_t)))
+			return -EFAULT;
+
+		odd = nr & 1UL;
+		nr &= ~1UL;
+		while (nr) {
+			unsigned long h, l;
+			__get_user(l, ufdset);
+			__get_user(h, ufdset+1);
+			ufdset += 2;
+			*fdset++ = h << 32 | l;
+			nr -= 2;
+		}
+		if (odd)
+			__get_user(*fdset, ufdset);
+	} else {
+		/* Tricky, must clear full unsigned long in the
+		 * kernel fdset at the end, this makes sure that
+		 * actually happens.
+		 */
+		memset(fdset, 0, ((nr + 1) & ~1)*sizeof(compat_ulong_t));
+	}
+	return 0;
+}
+
+static inline
+void compat_set_fd_set(unsigned long nr, compat_ulong_t __user *ufdset,
+			unsigned long *fdset)
+{
+	unsigned long odd;
+	nr = ROUND_UP(nr, __COMPAT_NFDBITS);
+
+	if (!ufdset)
+		return;
+
+	odd = nr & 1UL;
+	nr &= ~1UL;
+	while (nr) {
+		unsigned long h, l;
+		l = *fdset++;
+		h = l >> 32;
+		__put_user(l, ufdset);
+		__put_user(h, ufdset+1);
+		ufdset += 2;
+		nr -= 2;
+	}
+	if (odd)
+		__put_user(*fdset, ufdset);
+}
+
+
+/*
+ * This is a virtual copy of sys_select from fs/select.c and probably
+ * should be compared to it from time to time
+ */
+static void *select_bits_alloc(int size)
+{
+	return kmalloc(6 * size, GFP_KERNEL);
+}
+
+static void select_bits_free(void *bits, int size)
+{
+	kfree(bits);
+}
+
+/*
+ * We can actually return ERESTARTSYS instead of EINTR, but I'd
+ * like to be certain this leads to no problems. So I return
+ * EINTR just for safety.
+ *
+ * Update: ERESTARTSYS breaks at least the xview clock binary, so
+ * I'm trying ERESTARTNOHAND which restart only when you want to.
+ */
+#define MAX_SELECT_SECONDS \
+	((unsigned long) (MAX_SCHEDULE_TIMEOUT / HZ)-1)
+
+asmlinkage long
+compat_sys_select(int n, compat_ulong_t __user *inp, compat_ulong_t __user *outp,
+		compat_ulong_t __user *exp, struct compat_timeval __user *tvp)
+{
+	fd_set_bits fds;
+	char *bits;
+	long timeout;
+	int ret, size, max_fdset;
+
+	timeout = MAX_SCHEDULE_TIMEOUT;
+	if (tvp) {
+		time_t sec, usec;
+
+		if ((ret = verify_area(VERIFY_READ, tvp, sizeof(*tvp)))
+		    || (ret = __get_user(sec, &tvp->tv_sec))
+		    || (ret = __get_user(usec, &tvp->tv_usec)))
+			goto out_nofds;
+
+		ret = -EINVAL;
+		if (sec < 0 || usec < 0)
+			goto out_nofds;
+
+		if ((unsigned long) sec < MAX_SELECT_SECONDS) {
+			timeout = ROUND_UP(usec, 1000000/HZ);
+			timeout += sec * (unsigned long) HZ;
+		}
+	}
+
+	ret = -EINVAL;
+	if (n < 0)
+		goto out_nofds;
+
+	/* max_fdset can increase, so grab it once to avoid race */
+	max_fdset = current->files->max_fdset;
+	if (n > max_fdset)
+		n = max_fdset;
+
+	/*
+	 * We need 6 bitmaps (in/out/ex for both incoming and outgoing),
+	 * since we used fdset we need to allocate memory in units of
+	 * long-words.
+	 */
+	ret = -ENOMEM;
+	size = FDS_BYTES(n);
+	bits = select_bits_alloc(size);
+	if (!bits)
+		goto out_nofds;
+	fds.in      = (unsigned long *)  bits;
+	fds.out     = (unsigned long *) (bits +   size);
+	fds.ex      = (unsigned long *) (bits + 2*size);
+	fds.res_in  = (unsigned long *) (bits + 3*size);
+	fds.res_out = (unsigned long *) (bits + 4*size);
+	fds.res_ex  = (unsigned long *) (bits + 5*size);
+
+	if ((ret = compat_get_fd_set(n, inp, fds.in)) ||
+	    (ret = compat_get_fd_set(n, outp, fds.out)) ||
+	    (ret = compat_get_fd_set(n, exp, fds.ex)))
+		goto out;
+	zero_fd_set(n, fds.res_in);
+	zero_fd_set(n, fds.res_out);
+	zero_fd_set(n, fds.res_ex);
+
+	ret = do_select(n, &fds, &timeout);
+
+	if (tvp && !(current->personality & STICKY_TIMEOUTS)) {
+		time_t sec = 0, usec = 0;
+		if (timeout) {
+			sec = timeout / HZ;
+			usec = timeout % HZ;
+			usec *= (1000000/HZ);
+		}
+		if (put_user(sec, &tvp->tv_sec) ||
+		    put_user(usec, &tvp->tv_usec))
+			ret = -EFAULT;
+	}
+
+	if (ret < 0)
+		goto out;
+	if (!ret) {
+		ret = -ERESTARTNOHAND;
+		if (signal_pending(current))
+			goto out;
+		ret = 0;
+	}
+
+	compat_set_fd_set(n, inp, fds.res_in);
+	compat_set_fd_set(n, outp, fds.res_out);
+	compat_set_fd_set(n, exp, fds.res_ex);
+
+out:
+	select_bits_free(bits, size);
+out_nofds:
+	return ret;
+}
+
+#if defined(CONFIG_NFSD) || defined(CONFIG_NFSD_MODULE)
+/* Stuff for NFS server syscalls... */
+struct compat_nfsctl_svc {
+	u16			svc32_port;
+	s32			svc32_nthreads;
+};
+
+struct compat_nfsctl_client {
+	s8			cl32_ident[NFSCLNT_IDMAX+1];
+	s32			cl32_naddr;
+	struct in_addr		cl32_addrlist[NFSCLNT_ADDRMAX];
+	s32			cl32_fhkeytype;
+	s32			cl32_fhkeylen;
+	u8			cl32_fhkey[NFSCLNT_KEYMAX];
+};
+
+struct compat_nfsctl_export {
+	char		ex32_client[NFSCLNT_IDMAX+1];
+	char		ex32_path[NFS_MAXPATHLEN+1];
+	compat_dev_t	ex32_dev;
+	compat_ino_t	ex32_ino;
+	compat_int_t	ex32_flags;
+	compat_uid_t	ex32_anon_uid;
+	compat_gid_t	ex32_anon_gid;
+};
+
+struct compat_nfsctl_fdparm {
+	struct sockaddr		gd32_addr;
+	s8			gd32_path[NFS_MAXPATHLEN+1];
+	compat_int_t		gd32_version;
+};
+
+struct compat_nfsctl_fsparm {
+	struct sockaddr		gd32_addr;
+	s8			gd32_path[NFS_MAXPATHLEN+1];
+	compat_int_t		gd32_maxlen;
+};
+
+struct compat_nfsctl_arg {
+	compat_int_t		ca32_version;	/* safeguard */
+	union {
+		struct compat_nfsctl_svc	u32_svc;
+		struct compat_nfsctl_client	u32_client;
+		struct compat_nfsctl_export	u32_export;
+		struct compat_nfsctl_fdparm	u32_getfd;
+		struct compat_nfsctl_fsparm	u32_getfs;
+	} u;
+#define ca32_svc	u.u32_svc
+#define ca32_client	u.u32_client
+#define ca32_export	u.u32_export
+#define ca32_getfd	u.u32_getfd
+#define ca32_getfs	u.u32_getfs
+};
+
+union compat_nfsctl_res {
+	__u8			cr32_getfh[NFS_FHSIZE];
+	struct knfsd_fh		cr32_getfs;
+};
+
+static int compat_nfs_svc_trans(struct nfsctl_arg *karg, struct compat_nfsctl_arg *arg)
+{
+	int err;
+
+	err = access_ok(VERIFY_READ, &arg->ca32_svc, sizeof(arg->ca32_svc));
+	err |= get_user(karg->ca_version, &arg->ca32_version);
+	err |= __get_user(karg->ca_svc.svc_port, &arg->ca32_svc.svc32_port);
+	err |= __get_user(karg->ca_svc.svc_nthreads, &arg->ca32_svc.svc32_nthreads);
+	return (err) ? -EFAULT : 0;
+}
+
+static int compat_nfs_clnt_trans(struct nfsctl_arg *karg, struct compat_nfsctl_arg *arg)
+{
+	int err;
+
+	err = access_ok(VERIFY_READ, &arg->ca32_client, sizeof(arg->ca32_client));
+	err |= get_user(karg->ca_version, &arg->ca32_version);
+	err |= __copy_from_user(&karg->ca_client.cl_ident[0],
+			  &arg->ca32_client.cl32_ident[0],
+			  NFSCLNT_IDMAX);
+	err |= __get_user(karg->ca_client.cl_naddr, &arg->ca32_client.cl32_naddr);
+	err |= __copy_from_user(&karg->ca_client.cl_addrlist[0],
+			  &arg->ca32_client.cl32_addrlist[0],
+			  (sizeof(struct in_addr) * NFSCLNT_ADDRMAX));
+	err |= __get_user(karg->ca_client.cl_fhkeytype,
+		      &arg->ca32_client.cl32_fhkeytype);
+	err |= __get_user(karg->ca_client.cl_fhkeylen,
+		      &arg->ca32_client.cl32_fhkeylen);
+	err |= __copy_from_user(&karg->ca_client.cl_fhkey[0],
+			  &arg->ca32_client.cl32_fhkey[0],
+			  NFSCLNT_KEYMAX);
+
+	return (err) ? -EFAULT : 0;
+}
+
+static int compat_nfs_exp_trans(struct nfsctl_arg *karg, struct compat_nfsctl_arg *arg)
+{
+	int err;
+
+	err = access_ok(VERIFY_READ, &arg->ca32_export, sizeof(arg->ca32_export));
+	err |= get_user(karg->ca_version, &arg->ca32_version);
+	err |= __copy_from_user(&karg->ca_export.ex_client[0],
+			  &arg->ca32_export.ex32_client[0],
+			  NFSCLNT_IDMAX);
+	err |= __copy_from_user(&karg->ca_export.ex_path[0],
+			  &arg->ca32_export.ex32_path[0],
+			  NFS_MAXPATHLEN);
+	err |= __get_user(karg->ca_export.ex_dev,
+		      &arg->ca32_export.ex32_dev);
+	err |= __get_user(karg->ca_export.ex_ino,
+		      &arg->ca32_export.ex32_ino);
+	err |= __get_user(karg->ca_export.ex_flags,
+		      &arg->ca32_export.ex32_flags);
+	err |= __get_user(karg->ca_export.ex_anon_uid,
+		      &arg->ca32_export.ex32_anon_uid);
+	err |= __get_user(karg->ca_export.ex_anon_gid,
+		      &arg->ca32_export.ex32_anon_gid);
+	SET_UID(karg->ca_export.ex_anon_uid, karg->ca_export.ex_anon_uid);
+	SET_GID(karg->ca_export.ex_anon_gid, karg->ca_export.ex_anon_gid);
+
+	return (err) ? -EFAULT : 0;
+}
+
+static int compat_nfs_getfd_trans(struct nfsctl_arg *karg, struct compat_nfsctl_arg *arg)
+{
+	int err;
+
+	err = access_ok(VERIFY_READ, &arg->ca32_getfd, sizeof(arg->ca32_getfd));
+	err |= get_user(karg->ca_version, &arg->ca32_version);
+	err |= __copy_from_user(&karg->ca_getfd.gd_addr,
+			  &arg->ca32_getfd.gd32_addr,
+			  (sizeof(struct sockaddr)));
+	err |= __copy_from_user(&karg->ca_getfd.gd_path,
+			  &arg->ca32_getfd.gd32_path,
+			  (NFS_MAXPATHLEN+1));
+	err |= __get_user(karg->ca_getfd.gd_version,
+		      &arg->ca32_getfd.gd32_version);
+
+	return (err) ? -EFAULT : 0;
+}
+
+static int compat_nfs_getfs_trans(struct nfsctl_arg *karg, struct compat_nfsctl_arg *arg)
+{
+	int err;
+
+	err = access_ok(VERIFY_READ, &arg->ca32_getfs, sizeof(arg->ca32_getfs));
+	err |= get_user(karg->ca_version, &arg->ca32_version);
+	err |= __copy_from_user(&karg->ca_getfs.gd_addr,
+			  &arg->ca32_getfs.gd32_addr,
+			  (sizeof(struct sockaddr)));
+	err |= __copy_from_user(&karg->ca_getfs.gd_path,
+			  &arg->ca32_getfs.gd32_path,
+			  (NFS_MAXPATHLEN+1));
+	err |= __get_user(karg->ca_getfs.gd_maxlen,
+		      &arg->ca32_getfs.gd32_maxlen);
+
+	return (err) ? -EFAULT : 0;
+}
+
+/* This really doesn't need translations, we are only passing
+ * back a union which contains opaque nfs file handle data.
+ */
+static int compat_nfs_getfh_res_trans(union nfsctl_res *kres, union compat_nfsctl_res *res)
+{
+	int err;
+
+	err = copy_to_user(res, kres, sizeof(*res));
+
+	return (err) ? -EFAULT : 0;
+}
+
+asmlinkage long compat_sys_nfsservctl(int cmd, struct compat_nfsctl_arg *arg,
+					union compat_nfsctl_res *res)
+{
+	struct nfsctl_arg *karg;
+	union nfsctl_res *kres;
+	mm_segment_t oldfs;
+	int err;
+
+	karg = kmalloc(sizeof(*karg), GFP_USER);
+	kres = kmalloc(sizeof(*kres), GFP_USER);
+	if(!karg || !kres) {
+		err = -ENOMEM;
+		goto done;
+	}
+
+	switch(cmd) {
+	case NFSCTL_SVC:
+		err = compat_nfs_svc_trans(karg, arg);
+		break;
+
+	case NFSCTL_ADDCLIENT:
+		err = compat_nfs_clnt_trans(karg, arg);
+		break;
+
+	case NFSCTL_DELCLIENT:
+		err = compat_nfs_clnt_trans(karg, arg);
+		break;
+
+	case NFSCTL_EXPORT:
+	case NFSCTL_UNEXPORT:
+		err = compat_nfs_exp_trans(karg, arg);
+		break;
+
+	case NFSCTL_GETFD:
+		err = compat_nfs_getfd_trans(karg, arg);
+		break;
+
+	case NFSCTL_GETFS:
+		err = compat_nfs_getfs_trans(karg, arg);
+		break;
+
+	default:
+		err = -EINVAL;
+		goto done;
+	}
+
+	oldfs = get_fs();
+	set_fs(KERNEL_DS);
+	err = sys_nfsservctl(cmd, karg, kres);
+	set_fs(oldfs);
+
+	if (err)
+		goto done;
+
+	if((cmd == NFSCTL_GETFD) ||
+	   (cmd == NFSCTL_GETFS))
+		err = compat_nfs_getfh_res_trans(kres, res);
+
+done:
+	kfree(karg);
+	kfree(kres);
+	return err;
+}
+#else /* !NFSD */
+long asmlinkage compat_sys_nfsservctl(int cmd, void *notused, void *notused2)
+{
+	return sys_ni_syscall();
+}
+#endif
diff -Nru a/fs/dcache.c b/fs/dcache.c
--- a/fs/dcache.c	Sun May 16 01:18:33 2004
+++ b/fs/dcache.c	Sun May 16 01:18:33 2004
@@ -21,6 +21,7 @@
 #include <linux/slab.h>
 #include <linux/init.h>
 #include <linux/smp_lock.h>
+#include <linux/hash.h>
 #include <linux/cache.h>
 #include <linux/module.h>
 #include <linux/mount.h>
@@ -41,6 +42,13 @@
 static kmem_cache_t *dentry_cache; 
 
 /*
+ * The allocation size for each dentry.  It is a multiple of 16 bytes.  We
+ * leave the final 32-47 bytes for the inline name.
+ */
+#define DENTRY_STORAGE	(((sizeof(struct dentry)+32) + 15) & ~15)
+#define DNAME_INLINE_LEN (DENTRY_STORAGE - sizeof(struct dentry))
+
+/*
  * This is the single most critical data structure when it comes
  * to the dcache: the hashtable for lookups. Somebody should try
  * to make this good - I've just made it work.
@@ -65,9 +73,8 @@
 {
 	struct dentry * dentry = (struct dentry *)arg;
 
-	if (dname_external(dentry)) {
-		kfree(dentry->d_qstr);
-	}
+	if (dname_external(dentry))
+		kfree(dentry->d_name.name);
 	kmem_cache_free(dentry_cache, dentry); 
 }
 
@@ -161,7 +168,7 @@
  	if (d_unhashed(dentry))
 		goto kill_it;
   	if (list_empty(&dentry->d_lru)) {
-  		dentry->d_vfs_flags |= DCACHE_REFERENCED;
+  		dentry->d_flags |= DCACHE_REFERENCED;
   		list_add(&dentry->d_lru, &dentry_unused);
   		dentry_stat.nr_unused++;
   	}
@@ -394,8 +401,8 @@
 			continue;
 		}
 		/* If the dentry was recently referenced, don't free it. */
-		if (dentry->d_vfs_flags & DCACHE_REFERENCED) {
-			dentry->d_vfs_flags &= ~DCACHE_REFERENCED;
+		if (dentry->d_flags & DCACHE_REFERENCED) {
+			dentry->d_flags &= ~DCACHE_REFERENCED;
  			list_add(&dentry->d_lru, &dentry_unused);
  			dentry_stat.nr_unused++;
  			spin_unlock(&dentry->d_lock);
@@ -643,30 +650,27 @@
 }
 
 /*
- * This is called from kswapd when we think we need some more memory.
+ * Scan `nr' dentries and return the number which remain.
+ *
+ * We need to avoid reentering the filesystem if the caller is performing a
+ * GFP_NOFS allocation attempt.  One example deadlock is:
+ *
+ * ext2_new_block->getblk->GFP->shrink_dcache_memory->prune_dcache->
+ * prune_one_dentry->dput->dentry_iput->iput->inode->i_sb->s_op->put_inode->
+ * ext2_discard_prealloc->ext2_free_blocks->lock_super->DEADLOCK.
+ *
+ * In this case we return -1 to tell the caller that we baled.
  */
 static int shrink_dcache_memory(int nr, unsigned int gfp_mask)
 {
 	if (nr) {
-		/*
-		 * Nasty deadlock avoidance.
-		 *
-	 	 * ext2_new_block->getblk->GFP->shrink_dcache_memory->
-		 * prune_dcache->prune_one_dentry->dput->dentry_iput->iput->
-		 * inode->i_sb->s_op->put_inode->ext2_discard_prealloc->
-		 * ext2_free_blocks->lock_super->DEADLOCK.
-	 	 *
-	 	 * We should make sure we don't hold the superblock lock over
-	 	 * block allocations, but for now:
-		 */
-		if (gfp_mask & __GFP_FS)
-			prune_dcache(nr);
+		if (!(gfp_mask & __GFP_FS))
+			return -1;
+		prune_dcache(nr);
 	}
 	return dentry_stat.nr_unused;
 }
 
-#define NAME_ALLOC_LEN(len)	((len+16) & ~15)
-
 /**
  * d_alloc	-	allocate a dcache entry
  * @parent: parent of entry to allocate
@@ -677,47 +681,37 @@
  * copied and the copy passed in may be reused after this call.
  */
  
-struct dentry * d_alloc(struct dentry * parent, const struct qstr *name)
+struct dentry *d_alloc(struct dentry * parent, const struct qstr *name)
 {
-	char * str;
 	struct dentry *dentry;
-	struct qstr * qstr;
+	char *dname;
 
 	dentry = kmem_cache_alloc(dentry_cache, GFP_KERNEL); 
 	if (!dentry)
 		return NULL;
 
 	if (name->len > DNAME_INLINE_LEN-1) {
-		qstr = kmalloc(sizeof(*qstr) + NAME_ALLOC_LEN(name->len), 
-				GFP_KERNEL);  
-		if (!qstr) {
+		dname = kmalloc(name->len + 1, GFP_KERNEL);
+		if (!dname) {
 			kmem_cache_free(dentry_cache, dentry); 
 			return NULL;
 		}
-		qstr->name = qstr->name_str;
-		qstr->len = name->len;
-		qstr->hash = name->hash;
-		dentry->d_qstr = qstr;
-		str = qstr->name_str;
 	} else  {
-		dentry->d_qstr = &dentry->d_name;
-		str = dentry->d_iname;
+		dname = dentry->d_iname;
 	}	
+	dentry->d_name.name = dname;
 
-	memcpy(str, name->name, name->len);
-	str[name->len] = 0;
+	dentry->d_name.len = name->len;
+	dentry->d_name.hash = name->hash;
+	memcpy(dname, name->name, name->len);
+	dname[name->len] = 0;
 
 	atomic_set(&dentry->d_count, 1);
-	dentry->d_vfs_flags = DCACHE_UNHASHED;
+	dentry->d_flags = DCACHE_UNHASHED;
 	dentry->d_lock = SPIN_LOCK_UNLOCKED;
-	dentry->d_flags = 0;
 	dentry->d_inode = NULL;
 	dentry->d_parent = NULL;
-	dentry->d_move_count = 0;
 	dentry->d_sb = NULL;
-	dentry->d_name.name = str;
-	dentry->d_name.len = name->len;
-	dentry->d_name.hash = name->hash;
 	dentry->d_op = NULL;
 	dentry->d_fsdata = NULL;
 	dentry->d_mounted = 0;
@@ -784,7 +778,8 @@
 	struct dentry *res = NULL;
 
 	if (root_inode) {
-		static const struct qstr name = { .name = "/", .len = 1, .hash = 0 };
+		static const struct qstr name = { .name = "/", .len = 1 };
+
 		res = d_alloc(NULL, &name);
 		if (res) {
 			res->d_sb = root_inode->i_sb;
@@ -795,10 +790,11 @@
 	return res;
 }
 
-static inline struct hlist_head * d_hash(struct dentry * parent, unsigned long hash)
+static inline struct hlist_head *d_hash(struct dentry *parent,
+					unsigned long hash)
 {
-	hash += (unsigned long) parent / L1_CACHE_BYTES;
-	hash = hash ^ (hash >> D_HASHBITS);
+	hash += ((unsigned long) parent ^ GOLDEN_RATIO_PRIME) / L1_CACHE_BYTES;
+	hash = hash ^ ((hash ^ GOLDEN_RATIO_PRIME) >> D_HASHBITS);
 	return dentry_hashtable + (hash & D_HASHMASK);
 }
 
@@ -824,7 +820,7 @@
 
 struct dentry * d_alloc_anon(struct inode *inode)
 {
-	static const struct qstr anonstring = { "", 0, 0};
+	static const struct qstr anonstring = { .name = "" };
 	struct dentry *tmp;
 	struct dentry *res;
 
@@ -857,7 +853,7 @@
 			res->d_inode = inode;
 			res->d_bucket = d_hash(res, res->d_name.hash);
 			res->d_flags |= DCACHE_DISCONNECTED;
-			res->d_vfs_flags &= ~DCACHE_UNHASHED;
+			res->d_flags &= ~DCACHE_UNHASHED;
 			list_add(&res->d_alias, &inode->i_dentry);
 			hlist_add_head(&res->d_hash, &inode->i_sb->s_anon);
 			spin_unlock(&res->d_lock);
@@ -930,8 +926,7 @@
  *
  * __d_lookup is dcache_lock free. The hash list is protected using RCU.
  * Memory barriers are used while updating and doing lockless traversal. 
- * To avoid races with d_move while rename is happening, d_move_count is 
- * used. 
+ * To avoid races with d_move while rename is happening, d_lock is used.
  *
  * Overflows in memcmp(), while d_move, are avoided by keeping the length
  * and name pointer in one structure pointed by d_qstr.
@@ -974,23 +969,11 @@
 	
 	hlist_for_each (node, head) { 
 		struct dentry *dentry; 
-		unsigned long move_count;
-		struct qstr * qstr;
+		struct qstr *qstr;
 
 		smp_read_barrier_depends();
 		dentry = hlist_entry(node, struct dentry, d_hash);
 
-		/* if lookup ends up in a different bucket 
-		 * due to concurrent rename, fail it
-		 */
-		if (unlikely(dentry->d_bucket != head))
-			break;
-
-		/*
-		 * We must take a snapshot of d_move_count followed by
-		 * read memory barrier before any search key comparison 
-		 */
-		move_count = dentry->d_move_count;
 		smp_rmb();
 
 		if (dentry->d_name.hash != hash)
@@ -998,29 +981,44 @@
 		if (dentry->d_parent != parent)
 			continue;
 
-		qstr = dentry->d_qstr;
+		spin_lock(&dentry->d_lock);
+
+		/*
+		 * If lookup ends up in a different bucket due to concurrent
+		 * rename, fail it
+		 */
+		if (unlikely(dentry->d_bucket != head))
+			goto terminate;
+
+		/*
+		 * Recheck the dentry after taking the lock - d_move may have
+		 * changed things.  Don't bother checking the hash because we're
+		 * about to compare the whole name anyway.
+		 */
+		if (dentry->d_parent != parent)
+			goto next;
+
+		qstr = &dentry->d_name;
 		smp_read_barrier_depends();
 		if (parent->d_op && parent->d_op->d_compare) {
 			if (parent->d_op->d_compare(parent, qstr, name))
-				continue;
+				goto next;
 		} else {
 			if (qstr->len != len)
-				continue;
+				goto next;
 			if (memcmp(qstr->name, str, len))
-				continue;
+				goto next;
 		}
-		spin_lock(&dentry->d_lock);
-		/*
-		 * If dentry is moved, fail the lookup
-		 */ 
-		if (likely(move_count == dentry->d_move_count)) {
-			if (!d_unhashed(dentry)) {
-				atomic_inc(&dentry->d_count);
-				found = dentry;
-			}
+
+		if (!d_unhashed(dentry)) {
+			atomic_inc(&dentry->d_count);
+			found = dentry;
 		}
+terminate:
 		spin_unlock(&dentry->d_lock);
 		break;
+next:
+		spin_unlock(&dentry->d_lock);
  	}
  	rcu_read_unlock();
 
@@ -1118,8 +1116,11 @@
 void d_rehash(struct dentry * entry)
 {
 	struct hlist_head *list = d_hash(entry->d_parent, entry->d_name.hash);
+
 	spin_lock(&dcache_lock);
- 	entry->d_vfs_flags &= ~DCACHE_UNHASHED;
+	spin_lock(&entry->d_lock);
+ 	entry->d_flags &= ~DCACHE_UNHASHED;
+	spin_unlock(&entry->d_lock);
 	entry->d_bucket = list;
  	hlist_add_head_rcu(&entry->d_hash, list);
 	spin_unlock(&dcache_lock);
@@ -1140,28 +1141,40 @@
  * then no longer matches the actual (corrupted) string of the target.
  * The hash value has to match the hash queue that the dentry is on..
  */
-static inline void switch_names(struct dentry * dentry, struct dentry * target)
+static void switch_names(struct dentry *dentry, struct dentry *target)
 {
-	const unsigned char *old_name, *new_name;
-	struct qstr *old_qstr, *new_qstr;
-
-	memcpy(dentry->d_iname, target->d_iname, DNAME_INLINE_LEN); 
-	old_qstr = target->d_qstr;
-	old_name = target->d_name.name;
-	new_qstr = dentry->d_qstr;
-	new_name = dentry->d_name.name;
-	if (old_name == target->d_iname) {
-		old_name = dentry->d_iname;
-		old_qstr = &dentry->d_name;
-	}
-	if (new_name == dentry->d_iname) {
-		new_name = target->d_iname;
-		new_qstr = &target->d_name;
-	}
-	target->d_name.name = new_name;
-	dentry->d_name.name = old_name;
-	target->d_qstr = new_qstr;
-	dentry->d_qstr = old_qstr;
+	if (dname_external(target)) {
+		if (dname_external(dentry)) {
+			/*
+			 * Both external: swap the pointers
+			 */
+			do_switch(target->d_name.name, dentry->d_name.name);
+		} else {
+			/*
+			 * dentry:internal, target:external.  Steal target's
+			 * storage and make target internal.
+			 */
+			dentry->d_name.name = target->d_name.name;
+			target->d_name.name = target->d_iname;
+		}
+	} else {
+		if (dname_external(dentry)) {
+			/*
+			 * dentry:external, target:internal.  Give dentry's
+			 * storage to target and make dentry internal
+			 */
+			memcpy(dentry->d_iname, target->d_name.name,
+					target->d_name.len + 1);
+			target->d_name.name = dentry->d_name.name;
+			dentry->d_name.name = dentry->d_iname;
+		} else {
+			/*
+			 * Both are internal.  Just copy target to dentry
+			 */
+			memcpy(dentry->d_iname, target->d_name.name,
+					target->d_name.len + 1);
+		}
+	}
 }
 
 /*
@@ -1204,14 +1217,14 @@
 	}
 
 	/* Move the dentry to the target hash queue, if on different bucket */
-	if (dentry->d_vfs_flags & DCACHE_UNHASHED)
+	if (dentry->d_flags & DCACHE_UNHASHED)
 		goto already_unhashed;
 	if (dentry->d_bucket != target->d_bucket) {
 		hlist_del_rcu(&dentry->d_hash);
 already_unhashed:
 		dentry->d_bucket = target->d_bucket;
 		hlist_add_head_rcu(&dentry->d_hash, target->d_bucket);
-		dentry->d_vfs_flags &= ~DCACHE_UNHASHED;
+		dentry->d_flags &= ~DCACHE_UNHASHED;
 	}
 
 	/* Unhash the target: dput() will then get rid of it */
@@ -1239,7 +1252,6 @@
 	}
 
 	list_add(&dentry->d_child, &dentry->d_parent->d_subdirs);
-	dentry->d_move_count++;
 	spin_unlock(&target->d_lock);
 	spin_unlock(&dentry->d_lock);
 	write_sequnlock(&rename_lock);
@@ -1337,6 +1349,7 @@
 	char *res;
 	struct vfsmount *rootmnt;
 	struct dentry *root;
+
 	read_lock(&current->fs->lock);
 	rootmnt = mntget(current->fs->rootmnt);
 	root = dget(current->fs->root);
@@ -1560,7 +1573,7 @@
 	 * of the dcache. 
 	 */
 	dentry_cache = kmem_cache_create("dentry_cache",
-					 sizeof(struct dentry),
+					 DENTRY_STORAGE,
 					 0,
 					 SLAB_RECLAIM_ACCOUNT,
 					 NULL, NULL);
diff -Nru a/fs/dquot.c b/fs/dquot.c
--- a/fs/dquot.c	Sun May 16 01:18:35 2004
+++ b/fs/dquot.c	Sun May 16 01:18:35 2004
@@ -75,6 +75,7 @@
 #include <linux/proc_fs.h>
 #include <linux/security.h>
 #include <linux/kmod.h>
+#include <linux/pagemap.h>
 
 #include <asm/uaccess.h>
 
@@ -367,7 +368,8 @@
 	if (atomic_read(&dquot->dq_count) > 1)
 		goto out_dqlock;
 	down(&dqopt->dqio_sem);
-	ret = dqopt->ops[dquot->dq_type]->release_dqblk(dquot);
+	if (dqopt->ops[dquot->dq_type]->release_dqblk)
+		ret = dqopt->ops[dquot->dq_type]->release_dqblk(dquot);
 	clear_bit(DQ_ACTIVE_B, &dquot->dq_flags);
 	up(&dqopt->dqio_sem);
 out_dqlock:
@@ -529,7 +531,7 @@
 	clear_dquot_dirty(dquot);
 	if (test_bit(DQ_ACTIVE_B, &dquot->dq_flags)) {
 		spin_unlock(&dq_list_lock);
-		dquot_release(dquot);
+		dquot->dq_sb->dq_op->release_dquot(dquot);
 		goto we_slept;
 	}
 	atomic_dec(&dquot->dq_count);
@@ -546,7 +548,7 @@
 {
 	struct dquot *dquot;
 
-	dquot = kmem_cache_alloc(dquot_cachep, SLAB_KERNEL);
+	dquot = kmem_cache_alloc(dquot_cachep, SLAB_NOFS);
 	if(!dquot)
 		return NODQUOT;
 
@@ -605,7 +607,7 @@
 	 * finished or it will be canceled due to dq_count > 1 test */
 	wait_on_dquot(dquot);
 	/* Read the dquot and instantiate it (everything done only if needed) */
-	if (!test_bit(DQ_ACTIVE_B, &dquot->dq_flags) && dquot_acquire(dquot) < 0) {
+	if (!test_bit(DQ_ACTIVE_B, &dquot->dq_flags) && sb->dq_op->acquire_dquot(dquot) < 0) {
 		dqput(dquot);
 		return NODQUOT;
 	}
@@ -1259,6 +1261,8 @@
 	.free_inode	= dquot_free_inode,
 	.transfer	= dquot_transfer,
 	.write_dquot	= dquot_commit,
+	.acquire_dquot	= dquot_acquire,
+	.release_dquot	= dquot_release,
 	.mark_dirty	= dquot_mark_dquot_dirty,
 	.write_info	= dquot_commit_info
 };
@@ -1363,9 +1367,12 @@
 	error = -EINVAL;
 	if (!fmt->qf_ops->check_quota_file(sb, type))
 		goto out_file_init;
-	/* We don't want quota and atime on quota files (deadlocks possible) */
+	/* We don't want quota and atime on quota files (deadlocks possible)
+	 * We also need to set GFP mask differently because we cannot recurse
+	 * into filesystem when allocating page for quota inode */
 	down_write(&dqopt->dqptr_sem);
 	inode->i_flags |= S_NOQUOTA | S_NOATIME;
+	clear_bit(ffs(__GFP_FS), &inode->i_mapping->flags);
 	for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
 		to_drop[cnt] = inode->i_dquot[cnt];
 		inode->i_dquot[cnt] = NODQUOT;
@@ -1760,6 +1767,8 @@
 EXPORT_SYMBOL(vfs_set_dqblk);
 EXPORT_SYMBOL(dquot_commit);
 EXPORT_SYMBOL(dquot_commit_info);
+EXPORT_SYMBOL(dquot_acquire);
+EXPORT_SYMBOL(dquot_release);
 EXPORT_SYMBOL(dquot_mark_dquot_dirty);
 EXPORT_SYMBOL(dquot_initialize);
 EXPORT_SYMBOL(dquot_drop);
diff -Nru a/fs/eventpoll.c b/fs/eventpoll.c
--- a/fs/eventpoll.c	Sun May 16 01:18:34 2004
+++ b/fs/eventpoll.c	Sun May 16 01:18:34 2004
@@ -309,7 +309,7 @@
 static void ep_unregister_pollwait(struct eventpoll *ep, struct epitem *epi);
 static int ep_unlink(struct eventpoll *ep, struct epitem *epi);
 static int ep_remove(struct eventpoll *ep, struct epitem *epi);
-static int ep_poll_callback(wait_queue_t *wait, unsigned mode, int sync);
+static int ep_poll_callback(wait_queue_t *wait, unsigned mode, int sync, void *key);
 static int ep_eventpoll_close(struct inode *inode, struct file *file);
 static unsigned int ep_eventpoll_poll(struct file *file, poll_table *wait);
 static int ep_collect_ready_items(struct eventpoll *ep,
@@ -1296,7 +1296,7 @@
  * machanism. It is called by the stored file descriptors when they
  * have events to report.
  */
-static int ep_poll_callback(wait_queue_t *wait, unsigned mode, int sync)
+static int ep_poll_callback(wait_queue_t *wait, unsigned mode, int sync, void *key)
 {
 	int pwake = 0;
 	unsigned long flags;
diff -Nru a/fs/exportfs/expfs.c b/fs/exportfs/expfs.c
--- a/fs/exportfs/expfs.c	Sun May 16 01:18:36 2004
+++ b/fs/exportfs/expfs.c	Sun May 16 01:18:36 2004
@@ -155,11 +155,15 @@
 
 		if (!IS_ROOT(pd)) {
 			/* must have found a connected parent - great */
+			spin_lock(&pd->d_lock);
 			pd->d_flags &= ~DCACHE_DISCONNECTED;
+			spin_unlock(&pd->d_lock);
 			noprogress = 0;
 		} else if (pd == sb->s_root) {
 			printk(KERN_ERR "export: Eeek filesystem root is not connected, impossible\n");
+			spin_lock(&pd->d_lock);
 			pd->d_flags &= ~DCACHE_DISCONNECTED;
+			spin_unlock(&pd->d_lock);
 			noprogress = 0;
 		} else {
 			/* we have hit the top of a disconnected path.  Try
diff -Nru a/fs/ext3/inode.c b/fs/ext3/inode.c
--- a/fs/ext3/inode.c	Sun May 16 01:18:35 2004
+++ b/fs/ext3/inode.c	Sun May 16 01:18:35 2004
@@ -1081,15 +1081,28 @@
 	struct inode *inode = page->mapping->host;
 	int ret, needed_blocks = ext3_writepage_trans_blocks(inode);
 	handle_t *handle;
+	int tried_commit = 0;
 
+retry:
 	handle = ext3_journal_start(inode, needed_blocks);
 	if (IS_ERR(handle)) {
 		ret = PTR_ERR(handle);
 		goto out;
 	}
 	ret = block_prepare_write(page, from, to, ext3_get_block);
-	if (ret != 0)
-		goto prepare_write_failed;
+	if (ret) {
+		if (ret != -ENOSPC || tried_commit)
+			goto prepare_write_failed;
+		/*
+		 * It could be that there _is_ free space, but it's all tied up
+		 * in uncommitted bitmaps.  So force a commit here, which makes
+		 * those blocks allocatable and try again.
+		 */
+		tried_commit = 1;
+		handle->h_sync = 1;
+		ext3_journal_stop(handle);
+		goto retry;
+	}
 
 	if (ext3_should_journal_data(inode)) {
 		ret = walk_page_buffers(handle, page_buffers(page),
diff -Nru a/fs/ext3/namei.c b/fs/ext3/namei.c
--- a/fs/ext3/namei.c	Sun May 16 01:18:35 2004
+++ b/fs/ext3/namei.c	Sun May 16 01:18:35 2004
@@ -872,6 +872,8 @@
 		wait_on_buffer(bh);
 		if (!buffer_uptodate(bh)) {
 			/* read error, skip block & hope for the best */
+			ext3_error(sb, __FUNCTION__, "reading directory #%lu "
+				   "offset %lu\n", dir->i_ino, block);
 			brelse(bh);
 			goto next;
 		}
@@ -1763,14 +1765,19 @@
 	struct buffer_head * bh;
 	struct ext3_dir_entry_2 * de, * de1;
 	struct super_block * sb;
-	int err;
+	int err = 0;
 
 	sb = inode->i_sb;
 	if (inode->i_size < EXT3_DIR_REC_LEN(1) + EXT3_DIR_REC_LEN(2) ||
 	    !(bh = ext3_bread (NULL, inode, 0, 0, &err))) {
-	    	ext3_warning (inode->i_sb, "empty_dir",
-			      "bad directory (dir #%lu) - no data block",
-			      inode->i_ino);
+		if (err)
+			ext3_error(inode->i_sb, __FUNCTION__,
+				   "error %d reading directory #%lu offset 0",
+				   err, inode->i_ino);
+		else
+			ext3_warning(inode->i_sb, __FUNCTION__,
+				     "bad directory (dir #%lu) - no data block",
+				     inode->i_ino);
 		return 1;
 	}
 	de = (struct ext3_dir_entry_2 *) bh->b_data;
@@ -1792,24 +1799,26 @@
 	while (offset < inode->i_size ) {
 		if (!bh ||
 			(void *) de >= (void *) (bh->b_data+sb->s_blocksize)) {
+			err = 0;
 			brelse (bh);
 			bh = ext3_bread (NULL, inode,
 				offset >> EXT3_BLOCK_SIZE_BITS(sb), 0, &err);
 			if (!bh) {
-#if 0
-				ext3_error (sb, "empty_dir",
-				"directory #%lu contains a hole at offset %lu",
-					inode->i_ino, offset);
-#endif
+				if (err)
+					ext3_error(sb, __FUNCTION__,
+						   "error %d reading directory"
+						   " #%lu offset %lu",
+						   err, inode->i_ino, offset);
 				offset += sb->s_blocksize;
 				continue;
 			}
 			de = (struct ext3_dir_entry_2 *) bh->b_data;
 		}
-		if (!ext3_check_dir_entry ("empty_dir", inode, de, bh,
-					   offset)) {
-			brelse (bh);
-			return 1;
+		if (!ext3_check_dir_entry("empty_dir", inode, de, bh, offset)) {
+			de = (struct ext3_dir_entry_2 *)(bh->b_data +
+							 sb->s_blocksize);
+			offset = (offset | (sb->s_blocksize - 1)) + 1;
+			continue;
 		}
 		if (le32_to_cpu(de->inode)) {
 			brelse (bh);
diff -Nru a/fs/ext3/super.c b/fs/ext3/super.c
--- a/fs/ext3/super.c	Sun May 16 01:18:36 2004
+++ b/fs/ext3/super.c	Sun May 16 01:18:36 2004
@@ -521,6 +521,8 @@
 static int ext3_dquot_initialize(struct inode *inode, int type);
 static int ext3_dquot_drop(struct inode *inode);
 static int ext3_write_dquot(struct dquot *dquot);
+static int ext3_acquire_dquot(struct dquot *dquot);
+static int ext3_release_dquot(struct dquot *dquot);
 static int ext3_mark_dquot_dirty(struct dquot *dquot);
 static int ext3_write_info(struct super_block *sb, int type);
 static int ext3_quota_on(struct super_block *sb, int type, int format_id, char *path);
@@ -536,6 +538,8 @@
 	.free_inode	= dquot_free_inode,
 	.transfer	= dquot_transfer,
 	.write_dquot	= ext3_write_dquot,
+	.acquire_dquot	= ext3_acquire_dquot,
+	.release_dquot	= ext3_release_dquot,
 	.mark_dirty	= ext3_mark_dquot_dirty,
 	.write_info	= ext3_write_info
 };
@@ -2175,6 +2179,38 @@
 	if (IS_ERR(handle))
 		return PTR_ERR(handle);
 	ret = dquot_commit(dquot);
+	err = ext3_journal_stop(handle);
+	if (!ret)
+		ret = err;
+	return ret;
+}
+
+static int ext3_acquire_dquot(struct dquot *dquot)
+{
+	int ret, err;
+	handle_t *handle;
+
+	handle = ext3_journal_start(dquot_to_inode(dquot),
+					EXT3_QUOTA_INIT_BLOCKS);
+	if (IS_ERR(handle))
+		return PTR_ERR(handle);
+	ret = dquot_acquire(dquot);
+	err = ext3_journal_stop(handle);
+	if (!ret)
+		ret = err;
+	return ret;
+}
+
+static int ext3_release_dquot(struct dquot *dquot)
+{
+	int ret, err;
+	handle_t *handle;
+
+	handle = ext3_journal_start(dquot_to_inode(dquot),
+					EXT3_QUOTA_INIT_BLOCKS);
+	if (IS_ERR(handle))
+		return PTR_ERR(handle);
+	ret = dquot_release(dquot);
 	err = ext3_journal_stop(handle);
 	if (!ret)
 		ret = err;
diff -Nru a/fs/fs-writeback.c b/fs/fs-writeback.c
--- a/fs/fs-writeback.c	Sun May 16 01:18:37 2004
+++ b/fs/fs-writeback.c	Sun May 16 01:18:37 2004
@@ -75,8 +75,23 @@
 	if ((inode->i_state & flags) == flags)
 		return;
 
-	if (unlikely(block_dump))
-		printk("%s(%d): dirtied file\n", current->comm, current->pid);
+	if (unlikely(block_dump)) {
+		struct dentry *dentry = NULL;
+		const char *name = "?";
+
+		if (!list_empty(&inode->i_dentry)) {
+			dentry = list_entry(inode->i_dentry.next,
+					    struct dentry, d_alias);
+			if (dentry && dentry->d_name.name)
+				name = (const char *) dentry->d_name.name;
+		}
+
+		if (inode->i_ino || strcmp(inode->i_sb->s_id, "bdev"))
+			printk(KERN_DEBUG
+			       "%s(%d): dirtied inode %lu (%s) on %s\n",
+			       current->comm, current->pid, inode->i_ino,
+			       name, inode->i_sb->s_id);
+	}
 
 	spin_lock(&inode_lock);
 	if ((inode->i_state & flags) != flags) {
@@ -382,12 +397,16 @@
 
 	spin_lock(&inode_lock);
 	spin_lock(&sb_lock);
+restart:
 	sb = sb_entry(super_blocks.prev);
 	for (; sb != sb_entry(&super_blocks); sb = sb_entry(sb->s_list.prev)) {
 		if (!list_empty(&sb->s_dirty) || !list_empty(&sb->s_io)) {
+			sb->s_count++;
 			spin_unlock(&sb_lock);
 			sync_sb_inodes(sb, wbc);
 			spin_lock(&sb_lock);
+			if (__put_super(sb))
+				goto restart;
 		}
 		if (wbc->nr_to_write <= 0)
 			break;
diff -Nru a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c
--- a/fs/hugetlbfs/inode.c	Sun May 16 01:18:36 2004
+++ b/fs/hugetlbfs/inode.c	Sun May 16 01:18:36 2004
@@ -43,6 +43,8 @@
 	.memory_backed	= 1,	/* Does not contribute to dirty memory */
 };
 
+int sysctl_hugetlb_shm_group;
+
 static int hugetlbfs_file_mmap(struct file *file, struct vm_area_struct *vma)
 {
 	struct inode *inode = file->f_dentry->d_inode;
@@ -698,6 +700,12 @@
 	return ret;
 }
 
+static int can_do_hugetlb_shm(void)
+{
+	return likely(capable(CAP_IPC_LOCK) ||
+			in_group_p(sysctl_hugetlb_shm_group));
+}
+
 struct file *hugetlb_zero_setup(size_t size)
 {
 	int error;
@@ -707,7 +715,7 @@
 	struct qstr quick_string;
 	char buf[16];
 
-	if (!capable(CAP_IPC_LOCK))
+	if (!can_do_hugetlb_shm())
 		return ERR_PTR(-EPERM);
 
 	if (!is_hugepage_mem_enough(size))
diff -Nru a/fs/inode.c b/fs/inode.c
--- a/fs/inode.c	Sun May 16 01:18:37 2004
+++ b/fs/inode.c	Sun May 16 01:18:37 2004
@@ -671,12 +671,13 @@
 
 static inline unsigned long hash(struct super_block *sb, unsigned long hashval)
 {
-	unsigned long tmp = hashval + ((unsigned long) sb / L1_CACHE_BYTES);
-	tmp = tmp + (tmp >> I_HASHBITS);
+	unsigned long tmp;
+
+	tmp = (hashval * (unsigned long)sb) ^ (GOLDEN_RATIO_PRIME + hashval) /
+			L1_CACHE_BYTES;
+	tmp = tmp ^ ((tmp ^ GOLDEN_RATIO_PRIME) >> I_HASHBITS);
 	return tmp & I_HASHMASK;
 }
-
-/* Yeah, I know about quadratic hash. Maybe, later. */
 
 /**
  *	iunique - get a unique inode number
diff -Nru a/fs/intermezzo/Makefile b/fs/intermezzo/Makefile
--- a/fs/intermezzo/Makefile	Sun May 16 01:18:36 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,11 +0,0 @@
-#
-# Makefile 1.00 Peter Braam <braam@clusterfs.com>
-#
-
-obj-$(CONFIG_INTERMEZZO_FS) += intermezzo.o
-
-intermezzo-objs := cache.o dcache.o dir.o ext_attr.o file.o fileset.o \
-	           inode.o journal.o journal_ext2.o journal_ext3.o \
-	           journal_obdfs.o journal_reiserfs.o journal_tmpfs.o journal_xfs.o \
-	           kml_reint.o kml_unpack.o methods.o presto.o psdev.o replicator.o \
-	           super.o sysctl.o upcall.o vfs.o
diff -Nru a/fs/intermezzo/cache.c b/fs/intermezzo/cache.c
--- a/fs/intermezzo/cache.c	Sun May 16 01:18:34 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,207 +0,0 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
- *  Copyright (C) 2000 Stelias Computing, Inc.
- *  Copyright (C) 2000 Red Hat, Inc.
- *
- *   This file is part of InterMezzo, http://www.inter-mezzo.org.
- *
- *   InterMezzo is free software; you can redistribute it and/or
- *   modify it under the terms of version 2 of the GNU General Public
- *   License as published by the Free Software Foundation.
- *
- *   InterMezzo is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with InterMezzo; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include <linux/module.h>
-#include <asm/bitops.h>
-#include <asm/uaccess.h>
-#include <asm/system.h>
-
-#include <linux/errno.h>
-#include <linux/fs.h>
-#include <linux/ext2_fs.h>
-#include <linux/slab.h>
-#include <linux/vmalloc.h>
-#include <linux/sched.h>
-#include <linux/stat.h>
-#include <linux/string.h>
-#include <linux/blkdev.h>
-#include <linux/init.h>
-
-#include "intermezzo_fs.h"
-#include "intermezzo_psdev.h"
-
-/*
-   This file contains the routines associated with managing a
-   cache of files for InterMezzo.  These caches have two reqs:
-   - need to be found fast so they are hashed by the device, 
-     with an attempt to have collision chains of length 1.
-   The methods for the cache are set up in methods.
-*/
-
-extern kmem_cache_t * presto_dentry_slab;
-
-/* the intent of this hash is to have collision chains of length 1 */
-#define CACHES_BITS 8
-#define CACHES_SIZE (1 << CACHES_BITS)
-#define CACHES_MASK CACHES_SIZE - 1
-static struct list_head presto_caches[CACHES_SIZE];
-
-static inline int presto_cache_hash(struct super_block *s)
-{
-        return (CACHES_MASK) & ((unsigned long)s >> L1_CACHE_SHIFT);
-}
-
-inline void presto_cache_add(struct presto_cache *cache)
-{
-        list_add(&cache->cache_chain,
-                 &presto_caches[presto_cache_hash(cache->cache_sb)]);
-}
-
-inline void presto_cache_init_hash(void)
-{
-        int i;
-        for ( i = 0; i < CACHES_SIZE; i++ ) {
-                INIT_LIST_HEAD(&presto_caches[i]);
-        }
-}
-
-int izo_ioctl_packlen(struct izo_ioctl_data *data)
-{
-        int len = sizeof(struct izo_ioctl_data);
-        len += size_round(data->ioc_inllen1);
-        len += size_round(data->ioc_inllen2);
-        return len;
-}
-
-/* map a device to a cache */
-struct presto_cache *presto_cache_find(struct super_block *s)
-{
-        struct presto_cache *cache;
-        struct list_head *lh, *tmp;
-
-        lh = tmp = &(presto_caches[presto_cache_hash(s)]);
-        while ( (tmp = lh->next) != lh ) {
-                cache = list_entry(tmp, struct presto_cache, cache_chain);
-                if (cache->cache_sb == s)
-                        return cache;
-        }
-        return NULL;
-}
-
-
-/* map an inode to a cache */
-struct presto_cache *presto_get_cache(struct inode *inode)
-{
-        struct presto_cache *cache;
-        ENTRY;
-        /* find the correct presto_cache here, based on the device */
-        cache = presto_cache_find(inode->i_sb);
-        if ( !cache ) {
-                CERROR("WARNING: no presto cache for %s, ino %ld\n",
-                       inode->i_sb->s_id, inode->i_ino);
-                EXIT;
-                return NULL;
-        }
-        EXIT;
-        return cache;
-}
-
-/* another debugging routine: check fs is InterMezzo fs */
-int presto_ispresto(struct inode *inode)
-{
-        struct presto_cache *cache;
-
-        if ( !inode )
-                return 0;
-        cache = presto_get_cache(inode);
-        if ( !cache )
-                return 0;
-        return inode->i_sb == cache->cache_sb;
-}
-
-/* setup a cache structure when we need one */
-struct presto_cache *presto_cache_init(void)
-{
-        struct presto_cache *cache;
-
-        PRESTO_ALLOC(cache, sizeof(struct presto_cache));
-        if ( cache ) {
-                memset(cache, 0, sizeof(struct presto_cache));
-                INIT_LIST_HEAD(&cache->cache_chain);
-                INIT_LIST_HEAD(&cache->cache_fset_list);
-                cache->cache_lock = SPIN_LOCK_UNLOCKED;
-                cache->cache_reserved = 0; 
-        }
-        return cache;
-}
-
-/* free a cache structure and all of the memory it is pointing to */
-inline void presto_free_cache(struct presto_cache *cache)
-{
-        if (!cache)
-                return;
-
-        list_del(&cache->cache_chain);
-        if (cache->cache_sb && cache->cache_sb->s_root &&
-                        presto_d2d(cache->cache_sb->s_root)) {
-                kmem_cache_free(presto_dentry_slab, 
-                                presto_d2d(cache->cache_sb->s_root));
-                cache->cache_sb->s_root->d_fsdata = NULL;
-        }
-
-        PRESTO_FREE(cache, sizeof(struct presto_cache));
-}
-
-int presto_reserve_space(struct presto_cache *cache, loff_t req)
-{
-        struct filter_fs *filter; 
-        loff_t avail; 
-        struct super_block *sb = cache->cache_sb;
-        filter = cache->cache_filter;
-        if (!filter ) {
-                EXIT;
-                return 0; 
-        }
-        if (!filter->o_trops ) {
-                EXIT;
-                return 0; 
-        }
-        if (!filter->o_trops->tr_avail ) {
-                EXIT;
-                return 0; 
-        }
-
-        spin_lock(&cache->cache_lock);
-        avail = filter->o_trops->tr_avail(cache, sb); 
-        CDEBUG(D_SUPER, "ESC::%ld +++> %ld \n", (long) cache->cache_reserved,
-                 (long) (cache->cache_reserved + req)); 
-        CDEBUG(D_SUPER, "ESC::Avail::%ld \n", (long) avail);
-        if (req + cache->cache_reserved > avail) {
-                spin_unlock(&cache->cache_lock);
-                EXIT;
-                return -ENOSPC;
-        }
-        cache->cache_reserved += req; 
-        spin_unlock(&cache->cache_lock);
-
-        EXIT;
-        return 0;
-}
-
-void presto_release_space(struct presto_cache *cache, loff_t req)
-{
-        CDEBUG(D_SUPER, "ESC::%ld ---> %ld \n", (long) cache->cache_reserved,
-                 (long) (cache->cache_reserved - req)); 
-        spin_lock(&cache->cache_lock);
-        cache->cache_reserved -= req; 
-        spin_unlock(&cache->cache_lock);
-}
diff -Nru a/fs/intermezzo/dcache.c b/fs/intermezzo/dcache.c
--- a/fs/intermezzo/dcache.c	Sun May 16 01:18:36 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,342 +0,0 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
- *  Original version: Copyright (C) 1996 P. Braam and M. Callahan
- *  Rewritten for Linux 2.1. Copyright (C) 1997 Carnegie Mellon University
- *  d_fsdata and NFS compatiblity fixes Copyright (C) 2001 Tacit Networks, Inc.
- *
- *   This file is part of InterMezzo, http://www.inter-mezzo.org.
- *
- *   InterMezzo is free software; you can redistribute it and/or
- *   modify it under the terms of version 2 of the GNU General Public
- *   License as published by the Free Software Foundation.
- *
- *   InterMezzo is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with InterMezzo; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * Directory operations for InterMezzo filesystem
- */
-
-/* inode dentry alias list walking code adapted from linux/fs/dcache.c
- *
- * fs/dcache.c
- *
- * (C) 1997 Thomas Schoebel-Theuer,
- * with heavy changes by Linus Torvalds
- */
-
-#include <linux/types.h>
-#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/fs.h>
-#include <linux/stat.h>
-#include <linux/errno.h>
-#include <linux/slab.h>
-#include <asm/segment.h>
-#include <asm/uaccess.h>
-#include <linux/string.h>
-#include <linux/vmalloc.h>
-
-#include "intermezzo_fs.h"
-
-kmem_cache_t * presto_dentry_slab;
-
-/* called when a cache lookup succeeds */
-static int presto_d_revalidate(struct dentry *de, struct nameidata *nd)
-{
-        struct inode *inode = de->d_inode;
-        struct presto_file_set * root_fset;
-
-        ENTRY;
-        if (!inode) {
-                EXIT;
-                return 0;
-        }
-
-        if (is_bad_inode(inode)) {
-                EXIT;
-                return 0;
-        }
-
-        if (!presto_d2d(de)) {
-                presto_set_dd(de);
-        }
-
-        if (!presto_d2d(de)) {
-                EXIT;
-                return 0;
-        }
-
-        root_fset = presto_d2d(de->d_inode->i_sb->s_root)->dd_fset;
-        if (root_fset->fset_flags & FSET_FLAT_BRANCH && 
-            (presto_d2d(de)->dd_fset != root_fset )) {
-                presto_d2d(de)->dd_fset = root_fset;
-        }
-
-        EXIT;
-        return 1;
-
-#if 0
-        /* The following is needed for metadata on demand. */
-        if ( S_ISDIR(inode->i_mode) ) {
-                EXIT;
-                return (presto_chk(de, PRESTO_DATA) &&
-                        (presto_chk(de, PRESTO_ATTR)));
-        } else {
-                EXIT;
-                return presto_chk(de, PRESTO_ATTR);
-        }
-#endif
-}
-
-static void presto_d_release(struct dentry *dentry)
-{
-        if (!presto_d2d(dentry)) {
-                /* This can happen for dentries from NFSd */
-                return;
-        }
-        presto_d2d(dentry)->dd_count--;
-
-        if (!presto_d2d(dentry)->dd_count) {
-                kmem_cache_free(presto_dentry_slab, presto_d2d(dentry));
-                dentry->d_fsdata = NULL;
-        }
-}
-
-struct dentry_operations presto_dentry_ops = 
-{
-        .d_revalidate =  presto_d_revalidate,
-        .d_release = presto_d_release
-};
-
-static inline int presto_is_dentry_ROOT (struct dentry *dentry)
-{
-        return(dentry_name_cmp(dentry,"ROOT") &&
-               !dentry_name_cmp(dentry->d_parent,".intermezzo"));
-}
-
-static struct presto_file_set* presto_try_find_fset(struct dentry* dentry,
-                int *is_under_d_intermezzo)
-{
-        struct dentry* temp_dentry;
-        struct presto_dentry_data *d_data;
-        int found_root=0;
-
-        ENTRY;
-        CDEBUG(D_FSDATA, "finding fileset for %p:%s\n", dentry, 
-                        dentry->d_name.name);
-
-        *is_under_d_intermezzo = 0;
-
-        /* walk up through the branch to get the fileset */
-        /* The dentry we are passed presumably does not have the correct
-         * fset information. However, we still want to start walking up
-         * the branch from this dentry to get our found_root and 
-         * is_under_d_intermezzo decisions correct
-         */
-        for (temp_dentry = dentry ; ; temp_dentry = temp_dentry->d_parent) {
-                CDEBUG(D_FSDATA, "--->dentry %p:%*s\n", temp_dentry, 
-                        temp_dentry->d_name.len,temp_dentry->d_name.name);
-                if (presto_is_dentry_ROOT(temp_dentry))
-                        found_root = 1;
-                if (!found_root &&
-                    dentry_name_cmp(temp_dentry, ".intermezzo")) {
-                        *is_under_d_intermezzo = 1;
-                }
-                d_data = presto_d2d(temp_dentry);
-                if (d_data) {
-                        /* If we found a "ROOT" dentry while walking up the
-                         * branch, we will journal regardless of whether
-                         * we are under .intermezzo or not.
-                         * If we are already under d_intermezzo don't reverse
-                         * the decision here...even if we found a "ROOT"
-                         * dentry above .intermezzo (if we were ever to
-                         * modify the directory structure).
-                         */
-                        if (!*is_under_d_intermezzo)  
-                                *is_under_d_intermezzo = !found_root &&
-                                  (d_data->dd_flags & PRESTO_DONT_JOURNAL);
-                        EXIT;
-                        return d_data->dd_fset;
-                }
-                if (temp_dentry->d_parent == temp_dentry) {
-                        break;
-                }
-        }
-        EXIT;
-        return NULL;
-}
-
-/* Only call this function on positive dentries */
-static struct presto_dentry_data* presto_try_find_alias_with_dd (
-                  struct dentry* dentry)
-{
-        struct inode *inode=dentry->d_inode;
-        struct list_head *head, *next, *tmp;
-        struct dentry *tmp_dentry;
-
-        /* Search through the alias list for dentries with d_fsdata */
-        spin_lock(&dcache_lock);
-        head = &inode->i_dentry;
-        next = inode->i_dentry.next;
-        while (next != head) {
-                tmp = next;
-                next = tmp->next;
-                tmp_dentry = list_entry(tmp, struct dentry, d_alias);
-                if (!presto_d2d(tmp_dentry)) {
-                        spin_unlock(&dcache_lock);
-                        return presto_d2d(tmp_dentry);
-                }
-        }
-        spin_unlock(&dcache_lock);
-        return NULL;
-}
-
-/* Only call this function on positive dentries */
-static void presto_set_alias_dd (struct dentry *dentry, 
-                struct presto_dentry_data* dd)
-{
-        struct inode *inode=dentry->d_inode;
-        struct list_head *head, *next, *tmp;
-        struct dentry *tmp_dentry;
-
-        /* Set d_fsdata for this dentry */
-        dd->dd_count++;
-        dentry->d_fsdata = dd;
-
-        /* Now set d_fsdata for all dentries in the alias list. */
-        spin_lock(&dcache_lock);
-        head = &inode->i_dentry;
-        next = inode->i_dentry.next;
-        while (next != head) {
-                tmp = next;
-                next = tmp->next;
-                tmp_dentry = list_entry(tmp, struct dentry, d_alias);
-                if (!presto_d2d(tmp_dentry)) {
-                        dd->dd_count++;
-                        tmp_dentry->d_fsdata = dd;
-                }
-        }
-        spin_unlock(&dcache_lock);
-        return;
-}
-
-inline struct presto_dentry_data *izo_alloc_ddata(void)
-{
-        struct presto_dentry_data *dd;
-
-        dd = kmem_cache_alloc(presto_dentry_slab, SLAB_KERNEL);
-        if (dd == NULL) {
-                CERROR("IZO: out of memory trying to allocate presto_dentry_data\n");
-                return NULL;
-        }
-        memset(dd, 0, sizeof(*dd));
-        dd->dd_count = 1;
-
-        return dd;
-}
-
-/* This uses the BKL! */
-int presto_set_dd(struct dentry * dentry)
-{
-        struct presto_file_set *fset;
-        struct presto_dentry_data *dd;
-        int is_under_d_izo;
-        int error=0;
-
-        ENTRY;
-
-        if (!dentry)
-                BUG();
-
-        lock_kernel();
-
-        /* Did we lose a race? */
-        if (dentry->d_fsdata) {
-                CERROR("dentry %p already has d_fsdata set\n", dentry);
-                if (dentry->d_inode)
-                        CERROR("    inode: %ld\n", dentry->d_inode->i_ino);
-                EXIT;
-                goto out_unlock;
-        }
-
-        if (dentry->d_inode != NULL) {
-                /* NFSd runs find_fh_dentry which instantiates disconnected
-                 * dentries which are then connected without a lookup(). 
-                 * So it is possible to have connected dentries that do not 
-                 * have d_fsdata set. So we walk the list trying to find 
-                 * an alias which has its d_fsdata set and then use that 
-                 * for all the other dentries  as well. 
-                 * - SHP,Vinny. 
-                 */
-
-                /* If there is an alias with d_fsdata use it. */
-                if ((dd = presto_try_find_alias_with_dd (dentry))) {
-                        presto_set_alias_dd (dentry, dd);
-                        EXIT;
-                        goto out_unlock;
-                }
-        } else {
-                /* Negative dentry */
-                CDEBUG(D_FSDATA,"negative dentry %p: %*s\n", dentry, 
-                                dentry->d_name.len, dentry->d_name.name);
-        }
-
-        /* No pre-existing d_fsdata, we need to construct one.
-         * First, we must walk up the tree to find the fileset 
-         * If a fileset can't be found, we leave a null fsdata
-         * and return EROFS to indicate that we can't journal
-         * updates. 
-         */
-        fset = presto_try_find_fset (dentry, &is_under_d_izo);
-        if (!fset) { 
-#ifdef PRESTO_NO_NFS
-                CERROR("No fileset for dentry %p: %*s\n", dentry,
-                                dentry->d_name.len, dentry->d_name.name);
-#endif
-                error = -EROFS;
-                EXIT;
-                goto out_unlock;
-        }
-
-        dentry->d_fsdata = izo_alloc_ddata();
-        if (!presto_d2d(dentry)) {
-                CERROR ("InterMezzo: out of memory allocating d_fsdata\n");
-                error = -ENOMEM;
-                goto out_unlock;
-        }
-        presto_d2d(dentry)->dd_fset = fset;
-        if (is_under_d_izo)
-                presto_d2d(dentry)->dd_flags |= PRESTO_DONT_JOURNAL;
-        EXIT;
-
-out_unlock:    
-        CDEBUG(D_FSDATA,"presto_set_dd dentry %p: %*s, d_fsdata %p\n", 
-                        dentry, dentry->d_name.len, dentry->d_name.name, 
-                        dentry->d_fsdata);
-        unlock_kernel();
-        return error; 
-}
-
-int presto_init_ddata_cache(void)
-{
-        ENTRY;
-        presto_dentry_slab =
-                kmem_cache_create("presto_cache",
-                                  sizeof(struct presto_dentry_data), 0,
-                                  SLAB_HWCACHE_ALIGN, NULL,
-                                  NULL);
-        EXIT;
-        return (presto_dentry_slab != NULL);
-}
-
-void presto_cleanup_ddata_cache(void)
-{
-        kmem_cache_destroy(presto_dentry_slab);
-}
diff -Nru a/fs/intermezzo/dir.c b/fs/intermezzo/dir.c
--- a/fs/intermezzo/dir.c	Sun May 16 01:18:34 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,1333 +0,0 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
- *  Copyright (C) 2000 Stelias Computing, Inc.
- *  Copyright (C) 2000 Red Hat, Inc.
- *  Copyright (C) 2000 Tacitus Systems
- *  Copyright (C) 2000 Peter J. Braam
- *
- *   This file is part of InterMezzo, http://www.inter-mezzo.org.
- *
- *   InterMezzo is free software; you can redistribute it and/or
- *   modify it under the terms of version 2 of the GNU General Public
- *   License as published by the Free Software Foundation.
- *
- *   InterMezzo is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with InterMezzo; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include <asm/bitops.h>
-#include <asm/termios.h>
-#include <asm/uaccess.h>
-#include <asm/system.h>
-
-#include <linux/errno.h>
-#include <linux/fs.h>
-#include <linux/namei.h>
-#include <linux/ext2_fs.h>
-#include <linux/slab.h>
-#include <linux/vmalloc.h>
-#include <linux/sched.h>
-#include <linux/stat.h>
-#include <linux/string.h>
-#include <linux/blkdev.h>
-#include <linux/init.h>
-#include <linux/module.h>
-
-#include "intermezzo_fs.h"
-#include "intermezzo_psdev.h"
-
-static inline void presto_relock_sem(struct inode *dir) 
-{
-        /* the lock from sys_mkdir / lookup_create */
-        down(&dir->i_sem);
-        /* the rest is done by the do_{create,mkdir, ...} */
-}
-
-static inline void presto_relock_other(struct inode *dir) 
-{
-        /* vfs_mkdir locks */
-        //        down(&dir->i_zombie);
-        //lock_kernel(); 
-}
-
-static inline void presto_fulllock(struct inode *dir) 
-{
-        /* the lock from sys_mkdir / lookup_create */
-        down(&dir->i_sem);
-        /* vfs_mkdir locks */
-        //        down(&dir->i_zombie);
-        //lock_kernel(); 
-}
-
-static inline void presto_unlock(struct inode *dir) 
-{
-        /* vfs_mkdir locks */
-        //unlock_kernel(); 
-        //        up(&dir->i_zombie);
-        /* the lock from sys_mkdir / lookup_create */
-        up(&dir->i_sem);
-}
-
-
-/*
- * these are initialized in super.c
- */
-extern int presto_permission(struct inode *inode, int mask, struct nameidata *nd);
-static int izo_authorized_uid;
-
-int izo_dentry_is_ilookup(struct dentry *dentry, ino_t *id,
-                          unsigned int *generation)
-{
-        char tmpname[64];
-        char *next;
-
-        ENTRY;
-        /* prefix is 7 characters: '...ino:' */
-        if ( dentry->d_name.len < 7 || dentry->d_name.len > 64 ||
-             memcmp(dentry->d_name.name, PRESTO_ILOOKUP_MAGIC, 7) != 0 ) {
-                EXIT;
-                return 0;
-        }
-
-        memcpy(tmpname, dentry->d_name.name + 7, dentry->d_name.len - 7);
-        *(tmpname + dentry->d_name.len - 7) = '\0';
-
-        /* name is of the form ...ino:<inode number>:<generation> */
-        *id = simple_strtoul(tmpname, &next, 16);
-        if ( *next == PRESTO_ILOOKUP_SEP ) {
-                *generation = simple_strtoul(next + 1, 0, 16);
-                CDEBUG(D_INODE, "ino string: %s, Id = %lx (%lu), "
-                       "generation %x (%d)\n",
-                       tmpname, *id, *id, *generation, *generation);
-                EXIT;
-                return 1;
-        } else {
-                EXIT;
-                return 0;
-        }
-}
-
-struct dentry *presto_tmpfs_ilookup(struct inode *dir, 
-                                    struct dentry *dentry,
-                                    ino_t ino, 
-                                    unsigned int generation)
-{
-        return dentry; 
-}
-
-
-inline int presto_can_ilookup(void)
-{
-        return (current->euid == izo_authorized_uid ||
-                capable(CAP_DAC_READ_SEARCH));
-}
-
-struct dentry *presto_iget_ilookup(struct inode *dir, 
-                                          struct dentry *dentry,
-                                          ino_t ino, 
-                                          unsigned int generation)
-{
-        struct inode *inode;
-        int error;
-
-        ENTRY;
-
-        if ( !presto_can_ilookup() ) {
-                CERROR("ilookup denied: euid %u, authorized_uid %u\n",
-                       current->euid, izo_authorized_uid);
-                return ERR_PTR(-EPERM);
-        }
-        error = -ENOENT;
-        inode = iget(dir->i_sb, ino);
-        if (!inode) { 
-                CERROR("fatal: NULL inode ino %lu\n", ino); 
-                goto cleanup_iput;
-        }
-        if (is_bad_inode(inode) || inode->i_nlink == 0) {
-                CERROR("fatal: bad inode ino %lu, links %d\n", ino, inode->i_nlink); 
-                goto cleanup_iput;
-        }
-        if (inode->i_generation != generation) {
-                CERROR("fatal: bad generation %u (want %u)\n",
-                       inode->i_generation, generation);
-                goto cleanup_iput;
-        }
-
-        d_instantiate(dentry, inode);
-        dentry->d_flags |= DCACHE_DISCONNECTED; /* NFS hack */
-
-        EXIT;
-        return NULL;
-
-cleanup_iput:
-        if (inode)
-                iput(inode);
-        return ERR_PTR(error);
-}
-
-struct dentry *presto_add_ilookup_dentry(struct dentry *parent,
-                                         struct dentry *real)
-{
-        struct inode *inode = real->d_inode;
-        struct dentry *de;
-        char buf[32];
-        char *ptr = buf;
-        struct dentry *inodir;
-        struct presto_dentry_data *dd;
-
-        inodir = lookup_one_len("..iopen..", parent,  strlen("..iopen..")); 
-        if (!inodir || IS_ERR(inodir) || !inodir->d_inode ) { 
-                CERROR("%s: bad ..iopen.. lookup\n", __FUNCTION__); 
-                return NULL; 
-        }
-        inodir->d_inode->i_op = &presto_dir_iops;
-
-        snprintf(ptr, 32, "...ino:%lx:%x", inode->i_ino, inode->i_generation);
-
-        de = lookup_one_len(ptr, inodir,  strlen(ptr)); 
-        if (!de || IS_ERR(de)) {
-                CERROR("%s: bad ...ino lookup %ld\n", 
-                       __FUNCTION__, PTR_ERR(de)); 
-                dput(inodir);
-                return NULL; 
-        }
-
-        dd = presto_d2d(real);
-        if (!dd) 
-                BUG();
-
-        /* already exists */
-        if (de->d_inode)
-                BUG();
-#if 0 
-                if (de->d_inode != inode ) { 
-                        CERROR("XX de->d_inode %ld, inode %ld\n", 
-                               de->d_inode->i_ino, inode->i_ino); 
-                        BUG();
-                }
-                if (dd->dd_inodentry) { 
-                        CERROR("inodentry exists %ld \n", inode->i_ino);
-                        BUG();
-                }
-                dput(inodir);
-                return de;
-        }
-#endif 
-
-        if (presto_d2d(de)) 
-                BUG();
-
-        atomic_inc(&inode->i_count);
-        de->d_op = &presto_dentry_ops;
-        d_add(de, inode);
-        if (!de->d_op)
-                CERROR("DD: no ops dentry %p, dd %p\n", de, dd);
-        dd->dd_inodentry = de;
-        dd->dd_count++;
-        de->d_fsdata = dd;
-
-        dput(inodir);
-        return de;
-}
-
-struct dentry *presto_lookup(struct inode * dir, struct dentry *dentry, struct nameidata *nd)
-{
-        int rc = 0;
-        struct dentry *de;
-        struct presto_cache *cache;
-        int minor;
-        ino_t ino;
-        unsigned int generation;
-        struct inode_operations *iops;
-        int is_ilookup = 0;
-
-        ENTRY;
-        cache = presto_get_cache(dir);
-        if (cache == NULL) {
-                CERROR("InterMezzo BUG: no cache in presto_lookup "
-                       "(dir ino: %ld)!\n", dir->i_ino);
-                EXIT;
-                return NULL;
-        }
-        minor = presto_c2m(cache);
-
-        iops = filter_c2cdiops(cache->cache_filter);
-        if (!iops || !iops->lookup) {
-                CERROR("InterMezzo BUG: filesystem has no lookup\n");
-                EXIT;
-                return NULL;
-        }
-
-
-        CDEBUG(D_CACHE, "dentry %p, dir ino: %ld, name: %*s, islento: %d\n",
-               dentry, dir->i_ino, dentry->d_name.len, dentry->d_name.name,
-               ISLENTO(minor));
-
-        if (dentry->d_fsdata)
-                CERROR("DD -- BAD dentry %p has data\n", dentry);
-                       
-        dentry->d_fsdata = NULL;
-#if 0
-        if (ext2_check_for_iopen(dir, dentry))
-                de = NULL;
-        else {
-#endif
-                if ( izo_dentry_is_ilookup(dentry, &ino, &generation) ) { 
-                        de = cache->cache_filter->o_trops->tr_ilookup
-                                (dir, dentry, ino, generation);
-                        is_ilookup = 1;
-                } else
-                        de = iops->lookup(dir, dentry, nd);
-#if 0
-        }
-#endif
-
-        if ( IS_ERR(de) ) {
-                CERROR("dentry lookup error %ld\n", PTR_ERR(de));
-                return de;
-        }
-
-        /* some file systems have no read_inode: set methods here */
-        if (dentry->d_inode)
-                presto_set_ops(dentry->d_inode, cache->cache_filter);
-
-        filter_setup_dentry_ops(cache->cache_filter,
-                                dentry->d_op, &presto_dentry_ops);
-        dentry->d_op = filter_c2udops(cache->cache_filter);
-
-        /* In lookup we will tolerate EROFS return codes from presto_set_dd
-         * to placate NFS. EROFS indicates that a fileset was not found but
-         * we should still be able to continue through a lookup.
-         * Anything else is a hard error and must be returned to VFS. */
-        if (!is_ilookup)
-                rc = presto_set_dd(dentry);
-        if (rc && rc != -EROFS) {
-                CERROR("presto_set_dd failed (dir %ld, name %*s): %d\n",
-                       dir->i_ino, dentry->d_name.len, dentry->d_name.name, rc);
-                return ERR_PTR(rc);
-        }
-
-        EXIT;
-        return NULL;
-}
-
-static inline int presto_check_set_fsdata (struct dentry *de)
-{
-        if (presto_d2d(de) == NULL) {
-#ifdef PRESTO_NO_NFS
-                CERROR("dentry without fsdata: %p: %*s\n", de, 
-                                de->d_name.len, de->d_name.name);
-                BUG();
-#endif
-                return presto_set_dd (de);
-        }
-
-        return 0;
-}
-
-int presto_setattr(struct dentry *de, struct iattr *iattr)
-{
-        int error;
-        struct presto_cache *cache;
-        struct presto_file_set *fset;
-        struct lento_vfs_context info = { 0, {0}, 0 };
-
-        ENTRY;
-
-        error = presto_prep(de, &cache, &fset);
-        if ( error ) {
-                EXIT;
-                return error;
-        }
-
-        if (!iattr->ia_valid)
-                CDEBUG(D_INODE, "presto_setattr: iattr is not valid\n");
-
-        CDEBUG(D_INODE, "valid %#x, mode %#o, uid %u, gid %u, size %Lu, "
-               "atime %lu mtime %lu ctime %lu flags %d\n",
-               iattr->ia_valid, iattr->ia_mode, iattr->ia_uid, iattr->ia_gid,
-               iattr->ia_size, iattr->ia_atime.tv_sec, iattr->ia_mtime.tv_sec,
-               iattr->ia_ctime.tv_sec, iattr->ia_attr_flags);
-        
-        if ( presto_get_permit(de->d_inode) < 0 ) {
-                EXIT;
-                return -EROFS;
-        }
-
-        if (!ISLENTO(presto_c2m(cache)))
-                info.flags = LENTO_FL_KML;
-        info.flags |= LENTO_FL_IGNORE_TIME;
-        error = presto_do_setattr(fset, de, iattr, &info);
-        presto_put_permit(de->d_inode);
-        return error;
-}
-
-/*
- *  Now the meat: the fs operations that require journaling
- *
- *
- *  XXX: some of these need modifications for hierarchical filesets
- */
-
-int presto_prep(struct dentry *dentry, struct presto_cache **cache,
-                struct presto_file_set **fset)
-{       
-        int rc;
-
-        /* NFS might pass us dentries which have not gone through lookup.
-         * Test and set d_fsdata for such dentries
-         */
-        rc = presto_check_set_fsdata (dentry);
-        if (rc) return rc;
-
-        *fset = presto_fset(dentry);
-        if ( *fset == NULL ) {
-                CERROR("No file set for dentry at %p: %*s\n", dentry,
-                                dentry->d_name.len, dentry->d_name.name);
-                return -EROFS;
-        }
-
-        *cache = (*fset)->fset_cache;
-        if ( *cache == NULL ) {
-                CERROR("PRESTO: BAD, BAD: cannot find cache\n");
-                return -EBADF;
-        }
-
-        CDEBUG(D_PIOCTL, "---> cache flags %x, fset flags %x\n",
-              (*cache)->cache_flags, (*fset)->fset_flags);
-        if( presto_is_read_only(*fset) ) {
-                CERROR("PRESTO: cannot modify read-only fileset, minor %d.\n",
-                       presto_c2m(*cache));
-                return -EROFS;
-        }
-        return 0;
-}
-
-static int presto_create(struct inode * dir, struct dentry * dentry, int mode,
-                struct nameidata *nd)
-{
-        int error;
-        struct presto_cache *cache;
-        struct dentry *parent = dentry->d_parent;
-        struct lento_vfs_context info;
-        struct presto_file_set *fset;
-
-        ENTRY;
-        error = presto_check_set_fsdata(dentry);
-        if ( error ) {
-                EXIT;
-                return error;
-        }
-
-        error = presto_prep(dentry->d_parent, &cache, &fset);
-        if ( error ) {
-                EXIT;
-                return error;
-        }
-        presto_unlock(dir);
-
-        /* Does blocking and non-blocking behavious need to be 
-           checked for.  Without blocking (return 1), the permit
-           was acquired without reintegration
-        */
-        if ( presto_get_permit(dir) < 0 ) {
-                EXIT;
-                presto_fulllock(dir);
-                return -EROFS;
-        }
-
-        presto_relock_sem(dir);
-        parent = dentry->d_parent; 
-        memset(&info, 0, sizeof(info));
-        if (!ISLENTO(presto_c2m(cache)))
-                info.flags = LENTO_FL_KML;
-        info.flags |= LENTO_FL_IGNORE_TIME;
-        error = presto_do_create(fset, parent, dentry, mode, &info);
-
-        presto_relock_other(dir);
-        presto_put_permit(dir);
-        EXIT;
-        return error;
-}
-
-static int presto_link(struct dentry *old_dentry, struct inode *dir,
-                struct dentry *new_dentry)
-{
-        int error;
-        struct presto_cache *cache, *new_cache;
-        struct presto_file_set *fset, *new_fset;
-        struct dentry *parent = new_dentry->d_parent;
-        struct lento_vfs_context info;
-
-        ENTRY;
-        error = presto_prep(old_dentry, &cache, &fset);
-        if ( error ) {
-                EXIT;
-                return error;
-        }
-
-        error = presto_check_set_fsdata(new_dentry);
-        if ( error ) {
-                EXIT;
-                return error;
-        }
-
-        error = presto_prep(new_dentry->d_parent, &new_cache, &new_fset);
-        if ( error ) {
-                EXIT;
-                return error;
-        }
-
-        if (fset != new_fset) { 
-                EXIT;
-                return -EXDEV;
-        }
-
-        presto_unlock(dir);
-        if ( presto_get_permit(old_dentry->d_inode) < 0 ) {
-                EXIT;
-                presto_fulllock(dir);
-                return -EROFS;
-        }
-
-        if ( presto_get_permit(dir) < 0 ) {
-                EXIT;
-                presto_fulllock(dir);
-                return -EROFS;
-        }
-
-        presto_relock_sem(dir);
-        parent = new_dentry->d_parent;
-
-        memset(&info, 0, sizeof(info));
-        if (!ISLENTO(presto_c2m(cache)))
-                info.flags = LENTO_FL_KML;
-        info.flags |= LENTO_FL_IGNORE_TIME;
-        error = presto_do_link(fset, old_dentry, parent,
-                               new_dentry, &info);
-
-#if 0
-        /* XXX for links this is not right */
-        if (cache->cache_filter->o_trops->tr_add_ilookup ) { 
-                struct dentry *d;
-                d = cache->cache_filter->o_trops->tr_add_ilookup
-                        (dir->i_sb->s_root, new_dentry, 1); 
-        }
-#endif 
-
-        presto_relock_other(dir);
-        presto_put_permit(dir);
-        presto_put_permit(old_dentry->d_inode);
-        return error;
-}
-
-static int presto_mkdir(struct inode * dir, struct dentry * dentry, int mode)
-{
-        int error;
-        struct presto_file_set *fset;
-        struct presto_cache *cache;
-        struct dentry *parent = dentry->d_parent;
-        struct lento_vfs_context info;
-
-        ENTRY;
-
-        error = presto_check_set_fsdata(dentry);
-        if ( error  ) {
-                EXIT;
-                return error;
-        }
-
-        error = presto_prep(dentry->d_parent, &cache, &fset);
-        if ( error  ) {
-                EXIT;
-                return error;
-        }
-
-        presto_unlock(dir); 
-
-        if ( presto_get_permit(dir) < 0 ) {
-                EXIT;
-                presto_fulllock(dir);
-                return -EROFS;
-        }
-
-        memset(&info, 0, sizeof(info));
-        if (!ISLENTO(presto_c2m(cache)))
-                info.flags = LENTO_FL_KML;
-        info.flags |= LENTO_FL_IGNORE_TIME;
-
-        presto_relock_sem(dir); 
-        parent = dentry->d_parent;
-        error = presto_do_mkdir(fset, parent, dentry, mode, &info);
-        presto_relock_other(dir); 
-        presto_put_permit(dir);
-        return error;
-}
-
-
-
-static int presto_symlink(struct inode *dir, struct dentry *dentry,
-                   const char *name)
-{
-        int error;
-        struct presto_cache *cache;
-        struct presto_file_set *fset;
-        struct dentry *parent = dentry->d_parent;
-        struct lento_vfs_context info;
-
-        ENTRY;
-        error = presto_check_set_fsdata(dentry);
-        if ( error ) {
-                EXIT;
-                return error;
-        }
-
-        error = presto_prep(dentry->d_parent, &cache, &fset);
-        if ( error ) {
-                EXIT;
-                return error;
-        }
-
-        presto_unlock(dir);
-        if ( presto_get_permit(dir) < 0 ) {
-                EXIT;
-                presto_fulllock(dir);
-                return -EROFS;
-        }
-
-        presto_relock_sem(dir);
-        parent = dentry->d_parent;
-        memset(&info, 0, sizeof(info));
-        if (!ISLENTO(presto_c2m(cache)))
-                info.flags = LENTO_FL_KML;
-        info.flags |= LENTO_FL_IGNORE_TIME;
-        error = presto_do_symlink(fset, parent, dentry, name, &info);
-        presto_relock_other(dir);
-        presto_put_permit(dir);
-        return error;
-}
-
-int presto_unlink(struct inode *dir, struct dentry *dentry)
-{
-        int error;
-        struct presto_cache *cache;
-        struct presto_file_set *fset;
-        struct dentry *parent = dentry->d_parent;
-        struct lento_vfs_context info;
-
-        ENTRY;
-        error = presto_check_set_fsdata(dentry);
-        if ( error ) {
-                EXIT;
-                return error;
-        }
-
-        error = presto_prep(dentry->d_parent, &cache, &fset);
-        if ( error  ) {
-                EXIT;
-                return error;
-        }
-
-        presto_unlock(dir);
-        if ( presto_get_permit(dir) < 0 ) {
-                EXIT;
-                presto_fulllock(dir);
-                return -EROFS;
-        }
-
-        presto_relock_sem(dir);
-        parent = dentry->d_parent;
-        memset(&info, 0, sizeof(info));
-        if (!ISLENTO(presto_c2m(cache)))
-                info.flags = LENTO_FL_KML;
-        info.flags |= LENTO_FL_IGNORE_TIME;
-
-        error = presto_do_unlink(fset, parent, dentry, &info);
-
-        presto_relock_other(dir);
-        presto_put_permit(dir);
-        return error;
-}
-
-static int presto_rmdir(struct inode *dir, struct dentry *dentry)
-{
-        int error;
-        struct presto_cache *cache;
-        struct presto_file_set *fset;
-        struct dentry *parent = dentry->d_parent;
-        struct lento_vfs_context info;
-
-        ENTRY;
-        CDEBUG(D_FILE, "prepping presto\n");
-        error = presto_check_set_fsdata(dentry);
-
-        if ( error ) {
-                EXIT;
-                return error;
-        }
-
-        error = presto_prep(dentry->d_parent, &cache, &fset);
-        if ( error ) {
-                EXIT;
-                return error;
-        }
-
-        CDEBUG(D_FILE, "unlocking\n");
-        /* We need to dget() before the dput in double_unlock, to ensure we
-         * still have dentry references.  double_lock doesn't do dget for us.
-         */
-        if (d_unhashed(dentry))
-                d_rehash(dentry);
-        //        double_up(&dir->i_zombie, &dentry->d_inode->i_zombie);
-        up(&dentry->d_inode->i_sem);
-        up(&dir->i_sem);
-
-        CDEBUG(D_FILE, "getting permit\n");
-        if ( presto_get_permit(parent->d_inode) < 0 ) {
-                EXIT;
-                down(&dir->i_sem);
-                down(&dentry->d_inode->i_sem);
-                //                double_down(&dir->i_sem, &dentry->d_inode->i_sem);
-                //                double_down(&dir->i_zombie, &dentry->d_inode->i_zombie);
-                
-                lock_kernel();
-                return -EROFS;
-        }
-        CDEBUG(D_FILE, "locking\n");
-
-        down(&dir->i_sem);
-        down(&dentry->d_inode->i_sem);
-        parent = dentry->d_parent;
-        memset(&info, 0, sizeof(info));
-        if (!ISLENTO(presto_c2m(cache)))
-                info.flags = LENTO_FL_KML;
-        info.flags |= LENTO_FL_IGNORE_TIME;
-        error = presto_do_rmdir(fset, parent, dentry, &info);
-        presto_put_permit(parent->d_inode);
-        lock_kernel();
-        EXIT;
-        return error;
-}
-
-static int presto_mknod(struct inode * dir, struct dentry * dentry, int mode, dev_t rdev)
-{
-        int error;
-        struct presto_cache *cache;
-        struct presto_file_set *fset;
-        struct dentry *parent = dentry->d_parent;
-        struct lento_vfs_context info;
-
-	if (!old_valid_dev(rdev))
-		return -EINVAL;
-
-        ENTRY;
-        error = presto_check_set_fsdata(dentry);
-        if ( error ) {
-                EXIT;
-                return error;
-        }
-
-        error = presto_prep(dentry->d_parent, &cache, &fset);
-        if ( error  ) {
-                EXIT;
-                return error;
-        }
-
-        presto_unlock(dir);
-        if ( presto_get_permit(dir) < 0 ) {
-                EXIT;
-                presto_fulllock(dir);
-                return -EROFS;
-        }
-        
-        presto_relock_sem(dir);
-        parent = dentry->d_parent;
-        memset(&info, 0, sizeof(info));
-        if (!ISLENTO(presto_c2m(cache)))
-                info.flags = LENTO_FL_KML;
-        info.flags |= LENTO_FL_IGNORE_TIME;
-        error = presto_do_mknod(fset, parent, dentry, mode, rdev, &info);
-        presto_relock_other(dir);
-        presto_put_permit(dir);
-        EXIT;
-        return error;
-}
-
-
-
-// XXX this can be optimized: renamtes across filesets only require 
-//     multiple KML records, but can locally be executed normally. 
-int presto_rename(struct inode *old_dir, struct dentry *old_dentry,
-                  struct inode *new_dir, struct dentry *new_dentry)
-{
-        int error;
-        struct presto_cache *cache, *new_cache;
-        struct presto_file_set *fset, *new_fset;
-        struct lento_vfs_context info;
-        struct dentry *old_parent = old_dentry->d_parent;
-        struct dentry *new_parent = new_dentry->d_parent;
-        int triple;
-
-        ENTRY;
-        error = presto_prep(old_dentry, &cache, &fset);
-        if ( error ) {
-                EXIT;
-                return error;
-        }
-        error = presto_prep(new_parent, &new_cache, &new_fset);
-        if ( error ) {
-                EXIT;
-                return error;
-        }
-
-        if ( fset != new_fset ) {
-                EXIT;
-                return -EXDEV;
-        }
-
-        /* We need to do dget before the dput in double_unlock, to ensure we
-         * still have dentry references.  double_lock doesn't do dget for us.
-         */
-
-        triple = (S_ISDIR(old_dentry->d_inode->i_mode) && new_dentry->d_inode)?
-                1:0;
-
-        unlock_rename(new_dentry->d_parent, old_dentry->d_parent);
-
-        if ( presto_get_permit(old_dir) < 0 ) {
-                EXIT;
-                return -EROFS;
-        }
-        if ( presto_get_permit(new_dir) < 0 ) {
-                EXIT;
-                return -EROFS;
-        }
-
-        lock_rename(new_dentry->d_parent, old_dentry->d_parent);
-        memset(&info, 0, sizeof(info));
-        if (!ISLENTO(presto_c2m(cache)))
-                info.flags = LENTO_FL_KML;
-        info.flags |= LENTO_FL_IGNORE_TIME;
-        error = do_rename(fset, old_parent, old_dentry, new_parent,
-                          new_dentry, &info);
-
-        presto_put_permit(new_dir);
-        presto_put_permit(old_dir);
-        return error;
-}
-
-/* basically this allows the ilookup processes access to all files for
- * reading, while not making ilookup totally insecure.  This could all
- * go away if we could set the CAP_DAC_READ_SEARCH capability for the client.
- */
-/* If posix acls are available, the underlying cache fs will export the
- * appropriate permission function. Thus we do not worry here about ACLs
- * or EAs. -SHP
- */
-int presto_permission(struct inode *inode, int mask, struct nameidata *nd)
-{
-        unsigned short mode = inode->i_mode;
-        struct presto_cache *cache;
-        int rc;
-
-        ENTRY;
-        if ( presto_can_ilookup() && !(mask & S_IWOTH)) {
-                CDEBUG(D_CACHE, "ilookup on %ld OK\n", inode->i_ino);
-                EXIT;
-                return 0;
-        }
-
-        cache = presto_get_cache(inode);
-
-        if ( cache ) {
-                /* we only override the file/dir permission operations */
-                struct inode_operations *fiops = filter_c2cfiops(cache->cache_filter);
-                struct inode_operations *diops = filter_c2cdiops(cache->cache_filter);
-
-                if ( S_ISREG(mode) && fiops && fiops->permission ) {
-                        EXIT;
-                        return fiops->permission(inode, mask, nd);
-                }
-                if ( S_ISDIR(mode) && diops && diops->permission ) {
-                        EXIT;
-                        return diops->permission(inode, mask, nd);
-                }
-        }
-
-        /* The cache filesystem doesn't have its own permission function,
-         * so we call the default one.
-         */
-        rc = vfs_permission(inode, mask);
-
-        EXIT;
-        return rc;
-}
-
-
-int presto_ioctl(struct inode *inode, struct file *file,
-                        unsigned int cmd, unsigned long arg)
-{
-        char buf[1024];
-        struct izo_ioctl_data *data = NULL;
-        struct presto_dentry_data *dd;
-        int rc;
-
-        ENTRY;
-
-        /* Try the filesystem's ioctl first, and return if it succeeded. */
-        dd = presto_d2d(file->f_dentry); 
-        if (dd && dd->dd_fset) { 
-                int (*cache_ioctl)(struct inode *, struct file *, unsigned int, unsigned long ) = filter_c2cdfops(dd->dd_fset->fset_cache->cache_filter)->ioctl;
-                rc = -ENOTTY;
-                if (cache_ioctl)
-                        rc = cache_ioctl(inode, file, cmd, arg);
-                if (rc != -ENOTTY) {
-                        EXIT;
-                        return rc;
-                }
-        }
-
-        if (current->euid != 0 && current->euid != izo_authorized_uid) {
-                EXIT;
-                return -EPERM;
-        }
-
-        memset(buf, 0, sizeof(buf));
-        
-        if (izo_ioctl_getdata(buf, buf + 1024, (void *)arg)) { 
-                CERROR("intermezzo ioctl: data error\n");
-                return -EINVAL;
-        }
-        data = (struct izo_ioctl_data *)buf;
-        
-        switch(cmd) {
-        case IZO_IOC_REINTKML: { 
-                int rc;
-                int cperr;
-                rc = kml_reint_rec(file, data);
-
-                EXIT;
-                cperr = copy_to_user((char *)arg, data, sizeof(*data));
-                if (cperr) { 
-                        CERROR("WARNING: cperr %d\n", cperr); 
-                        rc = -EFAULT;
-                }
-                return rc;
-        }
-
-        case IZO_IOC_GET_RCVD: {
-                struct izo_rcvd_rec rec;
-                struct presto_file_set *fset;
-                int rc;
-
-                fset = presto_fset(file->f_dentry);
-                if (fset == NULL) {
-                        EXIT;
-                        return -ENODEV;
-                }
-                rc = izo_rcvd_get(&rec, fset, data->ioc_uuid);
-                if (rc < 0) {
-                        EXIT;
-                        return rc;
-                }
-
-                EXIT;
-                return copy_to_user((char *)arg, &rec, sizeof(rec))? -EFAULT : 0;
-        }
-
-        case IZO_IOC_REPSTATUS: {
-                __u64 client_kmlsize;
-                struct izo_rcvd_rec *lr_client;
-                struct izo_rcvd_rec rec;
-                struct presto_file_set *fset;
-                int minor;
-                int rc;
-
-                fset = presto_fset(file->f_dentry);
-                if (fset == NULL) {
-                        EXIT;
-                        return -ENODEV;
-                }
-                minor = presto_f2m(fset);
-
-                client_kmlsize = data->ioc_kmlsize;
-                lr_client =  (struct izo_rcvd_rec *) data->ioc_pbuf1;
-
-                rc = izo_repstatus(fset, client_kmlsize, 
-                                       lr_client, &rec);
-                if (rc < 0) {
-                        EXIT;
-                        return rc;
-                }
-
-                EXIT;
-                return copy_to_user((char *)arg, &rec, sizeof(rec))? -EFAULT : 0;
-        }
-
-        case IZO_IOC_GET_CHANNEL: {
-                struct presto_file_set *fset;
-
-                fset = presto_fset(file->f_dentry);
-                if (fset == NULL) {
-                        EXIT;
-                        return -ENODEV;
-                }
-                
-                data->ioc_dev = fset->fset_cache->cache_psdev->uc_minor;
-                CDEBUG(D_PSDEV, "CHANNEL %d\n", data->ioc_dev); 
-                EXIT;
-                return copy_to_user((char *)arg, data, sizeof(*data))? -EFAULT : 0;
-        }
-
-        case IZO_IOC_SET_IOCTL_UID:
-                izo_authorized_uid = data->ioc_uid;
-                EXIT;
-                return 0;
-
-        case IZO_IOC_SET_PID:
-                rc = izo_psdev_setpid(data->ioc_dev);
-                EXIT;
-                return rc;
-
-        case IZO_IOC_SET_CHANNEL:
-                rc = izo_psdev_setchannel(file, data->ioc_dev);
-                EXIT;
-                return rc;
-
-        case IZO_IOC_GET_KML_SIZE: {
-                struct presto_file_set *fset;
-                __u64 kmlsize;
-
-                fset = presto_fset(file->f_dentry);
-                if (fset == NULL) {
-                        EXIT;
-                        return -ENODEV;
-                }
-
-                kmlsize = presto_kml_offset(fset) + fset->fset_kml_logical_off;
-
-                EXIT;
-                return copy_to_user((char *)arg, &kmlsize, sizeof(kmlsize))?-EFAULT : 0;
-        }
-
-        case IZO_IOC_PURGE_FILE_DATA: {
-                struct presto_file_set *fset;
-
-                fset = presto_fset(file->f_dentry);
-                if (fset == NULL) {
-                        EXIT;
-                        return -ENODEV;
-                }
-
-                rc = izo_purge_file(fset, data->ioc_inlbuf1);
-                EXIT;
-                return rc;
-        }
-
-        case IZO_IOC_GET_FILEID: {
-                rc = izo_get_fileid(file, data);
-                EXIT;
-                if (rc)
-                        return rc;
-                return copy_to_user((char *)arg, data, sizeof(*data))? -EFAULT : 0;
-        }
-
-        case IZO_IOC_SET_FILEID: {
-                rc = izo_set_fileid(file, data);
-                EXIT;
-                if (rc)
-                        return rc;
-                return copy_to_user((char *)arg, data, sizeof(*data))? -EFAULT  : 0;
-        }
-
-        case IZO_IOC_ADJUST_LML: { 
-                struct lento_vfs_context *info; 
-                info = (struct lento_vfs_context *)data->ioc_inlbuf1;
-                rc = presto_adjust_lml(file, info); 
-                EXIT;
-                return rc;
-        }
-
-        case IZO_IOC_CONNECT: {
-                struct presto_file_set *fset;
-                int minor;
-
-                fset = presto_fset(file->f_dentry);
-                if (fset == NULL) {
-                        EXIT;
-                        return -ENODEV;
-                }
-                minor = presto_f2m(fset);
-
-                rc = izo_upc_connect(minor, data->ioc_ino,
-                                     data->ioc_generation, data->ioc_uuid,
-                                     data->ioc_flags);
-                EXIT;
-                return rc;
-        }
-
-        case IZO_IOC_GO_FETCH_KML: {
-                struct presto_file_set *fset;
-                int minor;
-
-                fset = presto_fset(file->f_dentry);
-                if (fset == NULL) {
-                        EXIT;
-                        return -ENODEV;
-                }
-                minor = presto_f2m(fset);
-
-                rc = izo_upc_go_fetch_kml(minor, fset->fset_name,
-                                          data->ioc_uuid, data->ioc_kmlsize);
-                EXIT;
-                return rc;
-        }
-
-        case IZO_IOC_REVOKE_PERMIT:
-                if (data->ioc_flags)
-                        rc = izo_revoke_permit(file->f_dentry, data->ioc_uuid);
-                else
-                        rc = izo_revoke_permit(file->f_dentry, NULL);
-                EXIT;
-                return rc;
-
-        case IZO_IOC_CLEAR_FSET:
-                rc = izo_clear_fsetroot(file->f_dentry);
-                EXIT;
-                return rc;
-
-        case IZO_IOC_CLEAR_ALL_FSETS: { 
-                struct presto_file_set *fset;
-
-                fset = presto_fset(file->f_dentry);
-                if (fset == NULL) {
-                        EXIT;
-                        return -ENODEV;
-                }
-
-                rc = izo_clear_all_fsetroots(fset->fset_cache);
-                EXIT;
-                return rc;
-        }
-
-        case IZO_IOC_SET_FSET:
-                /*
-                 * Mark this dentry as being a fileset root.
-                 */
-                rc = presto_set_fsetroot_from_ioc(file->f_dentry, 
-                                                  data->ioc_inlbuf1,
-                                                  data->ioc_flags);
-                EXIT;
-                return rc;
-
-
-        case IZO_IOC_MARK: {
-                int res = 0;  /* resulting flags - returned to user */
-                int error;
-
-                CDEBUG(D_DOWNCALL, "mark inode: %ld, and: %x, or: %x, what %d\n",
-                       file->f_dentry->d_inode->i_ino, data->ioc_and_flag,
-                       data->ioc_or_flag, data->ioc_mark_what);
-
-                switch (data->ioc_mark_what) {
-                case MARK_DENTRY:               
-                        error = izo_mark_dentry(file->f_dentry,
-                                                   data->ioc_and_flag,
-                                                   data->ioc_or_flag, &res);
-                        break;
-                case MARK_FSET:
-                        error = izo_mark_fset(file->f_dentry,
-                                                 data->ioc_and_flag,
-                                                 data->ioc_or_flag, &res);
-                        break;
-                case MARK_CACHE:
-                        error = izo_mark_cache(file->f_dentry,
-                                                  data->ioc_and_flag,
-                                                  data->ioc_or_flag, &res);
-                        break;
-                case MARK_GETFL: {
-                        int fflags, cflags;
-                        data->ioc_and_flag = 0xffffffff;
-                        data->ioc_or_flag = 0; 
-                        error = izo_mark_dentry(file->f_dentry,
-                                                   data->ioc_and_flag,
-                                                   data->ioc_or_flag, &res);
-                        if (error) 
-                                break;
-                        error = izo_mark_fset(file->f_dentry,
-                                                 data->ioc_and_flag,
-                                                 data->ioc_or_flag, &fflags);
-                        if (error) 
-                                break;
-                        error = izo_mark_cache(file->f_dentry,
-                                                  data->ioc_and_flag,
-                                                  data->ioc_or_flag,
-                                                  &cflags);
-
-                        if (error) 
-                                break;
-                        data->ioc_and_flag = fflags;
-                        data->ioc_or_flag = cflags;
-                        break;
-                }
-                default:
-                        error = -EINVAL;
-                }
-
-                if (error) { 
-                        EXIT;
-                        return error;
-                }
-                data->ioc_mark_what = res;
-                CDEBUG(D_DOWNCALL, "mark inode: %ld, and: %x, or: %x, what %x\n",
-                       file->f_dentry->d_inode->i_ino, data->ioc_and_flag,
-                       data->ioc_or_flag, data->ioc_mark_what);
-
-                EXIT;
-                return copy_to_user((char *)arg, data, sizeof(*data))? -EFAULT : 0;
-        }
-#if 0
-        case IZO_IOC_CLIENT_MAKE_BRANCH: {
-                struct presto_file_set *fset;
-                int minor;
-
-                fset = presto_fset(file->f_dentry);
-                if (fset == NULL) {
-                        EXIT;
-                        return -ENODEV;
-                }
-                minor = presto_f2m(fset);
-
-                rc = izo_upc_client_make_branch(minor, fset->fset_name,
-                                                data->ioc_inlbuf1,
-                                                data->ioc_inlbuf2);
-                EXIT;
-                return rc;
-        }
-#endif
-        case IZO_IOC_SERVER_MAKE_BRANCH: {
-                struct presto_file_set *fset;
-                int minor;
-
-                fset = presto_fset(file->f_dentry);
-                if (fset == NULL) {
-                        EXIT;
-                        return -ENODEV;
-                }
-                minor = presto_f2m(fset);
-
-                izo_upc_server_make_branch(minor, data->ioc_inlbuf1);
-                EXIT;
-                return 0;
-        }
-        case IZO_IOC_SET_KMLSIZE: {
-                struct presto_file_set *fset;
-                int minor;
-                struct izo_rcvd_rec rec;
-
-                fset = presto_fset(file->f_dentry);
-                if (fset == NULL) {
-                        EXIT;
-                        return -ENODEV;
-                }
-                minor = presto_f2m(fset);
-
-                rc = izo_upc_set_kmlsize(minor, fset->fset_name, data->ioc_uuid,
-                                         data->ioc_kmlsize);
-
-                if (rc != 0) {
-                        EXIT;
-                        return rc;
-                }
-
-                rc = izo_rcvd_get(&rec, fset, data->ioc_uuid);
-                if (rc == -EINVAL) {
-                        /* We don't know anything about this uuid yet; no
-                         * worries. */
-                        memset(&rec, 0, sizeof(rec));
-                } else if (rc <= 0) {
-                        CERROR("InterMezzo: error reading last_rcvd: %d\n", rc);
-                        EXIT;
-                        return rc;
-                }
-                rec.lr_remote_offset = data->ioc_kmlsize;
-                rc = izo_rcvd_write(fset, &rec);
-                if (rc <= 0) {
-                        CERROR("InterMezzo: error writing last_rcvd: %d\n", rc);
-                        EXIT;
-                        return rc;
-                }
-                EXIT;
-                return rc;
-        }
-        case IZO_IOC_BRANCH_UNDO: {
-                struct presto_file_set *fset;
-                int minor;
-
-                fset = presto_fset(file->f_dentry);
-                if (fset == NULL) {
-                        EXIT;
-                        return -ENODEV;
-                }
-                minor = presto_f2m(fset);
-
-                rc = izo_upc_branch_undo(minor, fset->fset_name,
-                                         data->ioc_inlbuf1);
-                EXIT;
-                return rc;
-        }
-        case IZO_IOC_BRANCH_REDO: {
-                struct presto_file_set *fset;
-                int minor;
-
-                fset = presto_fset(file->f_dentry);
-                if (fset == NULL) {
-                        EXIT;
-                        return -ENODEV;
-                }
-                minor = presto_f2m(fset);
-
-                rc = izo_upc_branch_redo(minor, fset->fset_name,
-                                         data->ioc_inlbuf1);
-                EXIT;
-                return rc;
-        }
-
-        default:
-                EXIT;
-                return -ENOTTY;
-                
-        }
-        EXIT;
-        return 0;
-}
-
-struct file_operations presto_dir_fops = {
-        .ioctl =  presto_ioctl
-};
-
-struct inode_operations presto_dir_iops = {
-        .create       = presto_create,
-        .lookup       = presto_lookup,
-        .link         = presto_link,
-        .unlink       = presto_unlink,
-        .symlink      = presto_symlink,
-        .mkdir        = presto_mkdir,
-        .rmdir        = presto_rmdir,
-        .mknod        = presto_mknod,
-        .rename       = presto_rename,
-        .permission   = presto_permission,
-        .setattr      = presto_setattr,
-#ifdef CONFIG_FS_EXT_ATTR
-        .set_ext_attr = presto_set_ext_attr,
-#endif
-};
-
-
diff -Nru a/fs/intermezzo/ext_attr.c b/fs/intermezzo/ext_attr.c
--- a/fs/intermezzo/ext_attr.c	Sun May 16 01:18:35 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,197 +0,0 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- * 
- *  Copyright (C) 2001 Tacit Networks, Inc.
- *    Author: Shirish H. Phatak <shirish@tacitnetworks.com>
- *
- *   This file is part of InterMezzo, http://www.inter-mezzo.org.
- *
- *   InterMezzo is free software; you can redistribute it and/or
- *   modify it under the terms of version 2 of the GNU General Public
- *   License as published by the Free Software Foundation.
- *
- *   InterMezzo is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with InterMezzo; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * Extended attribute handling for presto.
- */
-
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/mm.h>
-#include <linux/string.h>
-#include <linux/stat.h>
-#include <linux/errno.h>
-#include <linux/unistd.h>
-
-#include <asm/system.h>
-#include <asm/uaccess.h>
-
-#include <linux/fs.h>
-#include <linux/slab.h>
-#include <linux/vmalloc.h>
-#include <asm/segment.h>
-
-#include "intermezzo_fs.h"
-#include "intermezzo_psdev.h"
-
-#ifdef CONFIG_FS_EXT_ATTR
-#include <linux/ext_attr.h>
-
-extern inline void presto_debug_fail_blkdev(struct presto_file_set *fset,
-                                            unsigned long value);
-
-
-/* VFS interface */
-/* XXX! Fixme test for user defined attributes */
-int presto_set_ext_attr(struct inode *inode, 
-                        const char *name, void *buffer,
-                        size_t buffer_len, int flags) 
-{
-        int error;
-        struct presto_cache *cache;
-        struct presto_file_set *fset;
-        struct lento_vfs_context info;
-        struct dentry *dentry;
-        int minor = presto_i2m(inode);
-        char *buf = NULL;
-
-        ENTRY;
-        if (minor < 0) {
-                EXIT;
-                return -1;
-        }
-
-        if ( ISLENTO(minor) ) {
-                EXIT;
-                return -EINVAL;
-        }
-
-        /* BAD...vfs should really pass down the dentry to use, especially
-         * since every other operation in iops does. But for now
-         * we do a reverse mapping from inode to the first dentry 
-         */
-        if (list_empty(&inode->i_dentry)) {
-                CERROR("No alias for inode %d\n", (int) inode->i_ino);
-                EXIT;
-                return -EINVAL;
-        }
-
-        dentry = list_entry(inode->i_dentry.next, struct dentry, d_alias);
-
-        error = presto_prep(dentry, &cache, &fset);
-        if ( error ) {
-                EXIT;
-                return error;
-        }
-
-        if ((buffer != NULL) && (buffer_len != 0)) {
-            /* If buffer is a user space pointer copy it to kernel space
-            * and reset the flag. We do this since the journal functions need
-            * access to the contents of the buffer, and the file system
-            * does not care. When we actually invoke the function, we remove
-            * the EXT_ATTR_FLAG_USER flag.
-            *
-            * XXX:Check if the "fs does not care" assertion is always true -SHP
-            * (works for ext3)
-            */
-            if (flags & EXT_ATTR_FLAG_USER) {
-                PRESTO_ALLOC(buf, buffer_len);
-                if (!buf) {
-                        CERROR("InterMezzo: out of memory!!!\n");
-                        return -ENOMEM;
-                }
-                error = copy_from_user(buf, buffer, buffer_len);
-                if (error) 
-                        return -EFAULT;
-            } else 
-                buf = buffer;
-        } else
-                buf = buffer;
-
-        if ( presto_get_permit(inode) < 0 ) {
-                EXIT;
-                if (buffer_len && (flags & EXT_ATTR_FLAG_USER))
-                        PRESTO_FREE(buf, buffer_len);
-                return -EROFS;
-        }
-
-        /* Simulate presto_setup_info */
-        memset(&info, 0, sizeof(info));
-        /* For now redundant..but we keep it around just in case */
-        info.flags = LENTO_FL_IGNORE_TIME;
-        if (!ISLENTO(cache->cache_psdev->uc_minor))
-            info.flags |= LENTO_FL_KML;
-
-        /* We pass in the kernel space pointer and reset the 
-         * EXT_ATTR_FLAG_USER flag.
-         * See comments above. 
-         */ 
-        /* Note that mode is already set by VFS so we send in a NULL */
-        error = presto_do_set_ext_attr(fset, dentry, name, buf,
-                                       buffer_len, flags & ~EXT_ATTR_FLAG_USER,
-                                       NULL, &info);
-        presto_put_permit(inode);
-
-        if (buffer_len && (flags & EXT_ATTR_FLAG_USER))
-                PRESTO_FREE(buf, buffer_len);
-        EXIT;
-        return error;
-}
-
-/* Lento Interface */
-/* XXX: ignore flags? We should be forcing these operations through? -SHP*/
-int lento_set_ext_attr(const char *path, const char *name, 
-                       void *buffer, size_t buffer_len, int flags, mode_t mode, 
-                       struct lento_vfs_context *info) 
-{
-        int error;
-        char * pathname;
-        struct nameidata nd;
-        struct dentry *dentry;
-        struct presto_file_set *fset;
-
-        ENTRY;
-        lock_kernel();
-
-        pathname=getname(path);
-        error = PTR_ERR(pathname);
-        if (IS_ERR(pathname)) {
-                EXIT;
-                goto exit;
-        }
-
-        /* Note that ext_attrs apply to both files and directories..*/
-        error=presto_walk(pathname,&nd);
-        if (error) 
-		goto exit;
-        dentry = nd.dentry;
-
-        fset = presto_fset(dentry);
-        error = -EINVAL;
-        if ( !fset ) {
-                CERROR("No fileset!\n");
-                EXIT;
-                goto exit_dentry;
-        }
-
-        if (buffer==NULL) buffer_len=0;
-
-        error = presto_do_set_ext_attr(fset, dentry, name, buffer,
-                                       buffer_len, flags, &mode, info);
-exit_dentry:
-        path_release(&nd);
-exit_path:
-        putname(pathname);
-exit:
-        unlock_kernel();
-        return error; 
-}
-
-#endif /*CONFIG_FS_EXT_ATTR*/
diff -Nru a/fs/intermezzo/file.c b/fs/intermezzo/file.c
--- a/fs/intermezzo/file.c	Sun May 16 01:18:35 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,534 +0,0 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
- *  Copyright (C) 2000 Stelias Computing, Inc.
- *  Copyright (C) 2000 Red Hat, Inc.
- *  Copyright (C) 2000 TurboLinux, Inc.
- *  Copyright (C) 2000 Los Alamos National Laboratory.
- *  Copyright (C) 2000, 2001 Tacit Networks, Inc.
- *  Copyright (C) 2000 Peter J. Braam
- *  Copyright (C) 2001 Mountain View Data, Inc. 
- *  Copyright (C) 2001 Cluster File Systems, Inc. 
- *
- *   This file is part of InterMezzo, http://www.inter-mezzo.org.
- *
- *   InterMezzo is free software; you can redistribute it and/or
- *   modify it under the terms of version 2 of the GNU General Public
- *   License as published by the Free Software Foundation.
- *
- *   InterMezzo is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with InterMezzo; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- *  This file manages file I/O
- * 
- */
-
-#include <asm/bitops.h>
-#include <asm/uaccess.h>
-#include <asm/system.h>
-
-#include <linux/errno.h>
-#include <linux/fs.h>
-#include <linux/ext2_fs.h>
-#include <linux/slab.h>
-#include <linux/vmalloc.h>
-#include <linux/sched.h>
-#include <linux/stat.h>
-#include <linux/string.h>
-#include <linux/blkdev.h>
-#include <linux/init.h>
-#include <linux/module.h>
-
-#include <linux/fsfilter.h>
-#include "intermezzo_fs.h"
-#include "intermezzo_psdev.h"
-/*
- * these are initialized in super.c
- */
-extern int presto_permission(struct inode *inode, int mask, struct nameidata *nd);
-
-
-static int presto_open_upcall(int minor, struct dentry *de)
-{
-        int rc = 0;
-        char *path, *buffer;
-        struct presto_file_set *fset;
-        int pathlen;
-        struct lento_vfs_context info;
-        struct presto_dentry_data *dd = presto_d2d(de);
-
-        PRESTO_ALLOC(buffer, PAGE_SIZE);
-        if ( !buffer ) {
-                CERROR("PRESTO: out of memory!\n");
-                return -ENOMEM;
-        }
-        fset = presto_fset(de);
-        path = presto_path(de, fset->fset_dentry, buffer, PAGE_SIZE);
-        pathlen = MYPATHLEN(buffer, path);
-        
-        CDEBUG(D_FILE, "de %p, dd %p\n", de, dd);
-        if (dd->remote_ino == 0) {
-                rc = presto_get_fileid(minor, fset, de);
-        }
-        memset (&info, 0, sizeof(info));
-        if (dd->remote_ino > 0) {
-                info.remote_ino = dd->remote_ino;
-                info.remote_generation = dd->remote_generation;
-        } else
-                CERROR("get_fileid failed %d, ino: %Lx, fetching by name\n", rc,
-                       (unsigned long long) dd->remote_ino);
-
-        rc = izo_upc_open(minor, pathlen, path, fset->fset_name, &info);
-        PRESTO_FREE(buffer, PAGE_SIZE);
-        return rc;
-}
-
-static inline int open_check_dod(struct file *file,
-                                 struct presto_file_set *fset)
-{
-        int gen, is_iopen = 0, minor;
-        struct presto_cache *cache = fset->fset_cache;
-        ino_t inum;
-
-        minor = presto_c2m(cache);
-
-        if ( ISLENTO(minor) ) {
-                CDEBUG(D_CACHE, "is lento, not doing DOD.\n");
-                return 0;
-        }
-
-        /* Files are only ever opened by inode during backfetches, when by
-         * definition we have the authoritative copy of the data.  No DOD. */
-        is_iopen = izo_dentry_is_ilookup(file->f_dentry, &inum, &gen);
-
-        if (is_iopen) {
-                CDEBUG(D_CACHE, "doing iopen, not doing DOD.\n");
-                return 0;
-        }
-
-        if (!(fset->fset_flags & FSET_DATA_ON_DEMAND)) {
-                CDEBUG(D_CACHE, "fileset not on demand.\n");
-                return 0;
-        }
-                
-        if (file->f_flags & O_TRUNC) {
-                CDEBUG(D_CACHE, "fileset dod: O_TRUNC.\n");
-                return 0;
-        }
-                
-        if (presto_chk(file->f_dentry, PRESTO_DONT_JOURNAL)) {
-                CDEBUG(D_CACHE, "file under .intermezzo, not doing DOD\n");
-                return 0;
-        }
-
-        if (presto_chk(file->f_dentry, PRESTO_DATA)) {
-                CDEBUG(D_CACHE, "PRESTO_DATA is set, not doing DOD.\n");
-                return 0;
-        }
-
-        if (cache->cache_filter->o_trops->tr_all_data(file->f_dentry->d_inode)) {
-                CDEBUG(D_CACHE, "file not sparse, not doing DOD.\n");
-                return 0;
-        }
-
-        return 1;
-}
-
-static int presto_file_open(struct inode *inode, struct file *file)
-{
-        int rc = 0;
-        struct file_operations *fops;
-        struct presto_cache *cache;
-        struct presto_file_set *fset;
-        struct presto_file_data *fdata;
-        int writable = (file->f_flags & (O_RDWR | O_WRONLY));
-        int minor, i;
-
-        ENTRY;
-
-        if (presto_prep(file->f_dentry, &cache, &fset) < 0) {
-                EXIT;
-                return -EBADF;
-        }
-
-        minor = presto_c2m(cache);
-
-        CDEBUG(D_CACHE, "DATA_OK: %d, ino: %ld, islento: %d\n",
-               presto_chk(file->f_dentry, PRESTO_DATA), inode->i_ino,
-               ISLENTO(minor));
-
-        if ( !ISLENTO(minor) && (file->f_flags & O_RDWR ||
-                                 file->f_flags & O_WRONLY)) {
-                CDEBUG(D_CACHE, "calling presto_get_permit\n");
-                if ( presto_get_permit(inode) < 0 ) {
-                        EXIT;
-                        return -EROFS;
-                }
-                presto_put_permit(inode);
-        }
-
-        if (open_check_dod(file, fset)) {
-                CDEBUG(D_CACHE, "presto_open_upcall\n");
-                CDEBUG(D_CACHE, "dentry: %p setting DATA, ATTR\n", file->f_dentry);
-                presto_set(file->f_dentry, PRESTO_ATTR | PRESTO_DATA);
-                rc = presto_open_upcall(minor, file->f_dentry);
-                if (rc) {
-                        EXIT;
-                        CERROR("%s: returning error %d\n", __FUNCTION__, rc);
-                        return rc;
-                }
-
-        }
-
-        /* file was truncated upon open: do not refetch */
-        if (file->f_flags & O_TRUNC) { 
-                CDEBUG(D_CACHE, "setting DATA, ATTR\n");
-                presto_set(file->f_dentry, PRESTO_ATTR | PRESTO_DATA);
-        }
-
-        fops = filter_c2cffops(cache->cache_filter);
-        if ( fops->open ) {
-                CDEBUG(D_CACHE, "calling fs open\n");
-                rc = fops->open(inode, file);
-
-                if (rc) {
-                        EXIT;
-                        return rc;
-                }
-        }
-
-        if (writable) {
-                PRESTO_ALLOC(fdata, sizeof(*fdata));
-                if (!fdata) {
-                        EXIT;
-                        return -ENOMEM;
-                }
-                /* LOCK: XXX check that the kernel lock protects this alloc */
-                fdata->fd_do_lml = 0;
-                fdata->fd_bytes_written = 0;
-                fdata->fd_fsuid = current->fsuid;
-                fdata->fd_fsgid = current->fsgid;
-                fdata->fd_mode = file->f_dentry->d_inode->i_mode;
-                fdata->fd_uid = file->f_dentry->d_inode->i_uid;
-                fdata->fd_gid = file->f_dentry->d_inode->i_gid;
-                fdata->fd_ngroups = current->group_info->ngroups;
-                for (i=0 ; i < current->group_info->ngroups ; i++)
-                        fdata->fd_groups[i] = GROUP_AT(current->group_info,i);
-                if (!ISLENTO(minor)) 
-                        fdata->fd_info.flags = LENTO_FL_KML; 
-                else { 
-                        /* this is for the case of DOD, 
-                           reint_close will adjust flags if needed */
-                        fdata->fd_info.flags = 0;
-                }
-
-                presto_getversion(&fdata->fd_version, inode);
-                file->private_data = fdata;
-        } else {
-                file->private_data = NULL;
-        }
-
-        EXIT;
-        return 0;
-}
-
-int presto_adjust_lml(struct file *file, struct lento_vfs_context *info)
-{
-        struct presto_file_data *fdata = 
-                (struct presto_file_data *) file->private_data;
-
-        if (!fdata) { 
-                EXIT;
-                return -EINVAL;
-        }
-                
-        memcpy(&fdata->fd_info, info, sizeof(*info));
-        EXIT;
-        return 0; 
-}
-
-
-static int presto_file_release(struct inode *inode, struct file *file)
-{
-        int rc;
-        struct file_operations *fops;
-        struct presto_cache *cache;
-        struct presto_file_set *fset;
-        struct presto_file_data *fdata = 
-                (struct presto_file_data *)file->private_data;
-        ENTRY;
-
-        rc = presto_prep(file->f_dentry, &cache, &fset);
-        if ( rc ) {
-                EXIT;
-                return rc;
-        }
-
-        fops = filter_c2cffops(cache->cache_filter);
-        if (fops && fops->release)
-                rc = fops->release(inode, file);
-
-        CDEBUG(D_CACHE, "islento = %d (minor %d), rc %d, data %p\n",
-               ISLENTO(cache->cache_psdev->uc_minor), 
-               cache->cache_psdev->uc_minor, rc, fdata);
-
-        /* this file was modified: ignore close errors, write KML */
-        if (fdata && fdata->fd_do_lml) {
-                /* XXX: remove when lento gets file granularity cd */
-                if ( presto_get_permit(inode) < 0 ) {
-                        EXIT;
-                        return -EROFS;
-                }
-        
-                fdata->fd_info.updated_time = file->f_dentry->d_inode->i_mtime;
-                rc = presto_do_close(fset, file); 
-                presto_put_permit(inode);
-        }
-
-        if (!rc && fdata) {
-                PRESTO_FREE(fdata, sizeof(*fdata));
-                file->private_data = NULL; 
-        }
-        
-        EXIT;
-        return rc;
-}
-
-static void presto_apply_write_policy(struct file *file,
-                                      struct presto_file_set *fset, loff_t res)
-{
-        struct presto_file_data *fdata =
-                (struct presto_file_data *)file->private_data;
-        struct presto_cache *cache = fset->fset_cache;
-        struct presto_version new_file_ver;
-        int error;
-        struct rec_info rec;
-
-        /* Here we do a journal close after a fixed or a specified
-         amount of KBytes, currently a global parameter set with
-         sysctl. If files are open for a long time, this gives added
-         protection. (XXX todo: per cache, add ioctl, handle
-         journaling in a thread, add more options etc.)
-        */ 
- 
-        if ((fset->fset_flags & FSET_JCLOSE_ON_WRITE) &&
-            (!ISLENTO(cache->cache_psdev->uc_minor))) {
-                fdata->fd_bytes_written += res;
- 
-                if (fdata->fd_bytes_written >= fset->fset_file_maxio) {
-                        presto_getversion(&new_file_ver,
-                                          file->f_dentry->d_inode);
-                        /* This is really heavy weight and should be fixed
-                           ASAP. At most we should be recording the number
-                           of bytes written and not locking the kernel, 
-                           wait for permits, etc, on the write path. SHP
-                        */
-                        lock_kernel();
-                        if ( presto_get_permit(file->f_dentry->d_inode) < 0 ) {
-                                EXIT;
-                                /* we must be disconnected, not to worry */
-                                unlock_kernel();
-                                return; 
-                        }
-                        error = presto_journal_close(&rec, fset, fdata,
-                                                     file->f_dentry,
-                                                     &fdata->fd_version,
-                                                     &new_file_ver);
-                        presto_put_permit(file->f_dentry->d_inode);
-                        unlock_kernel();
-                        if ( error ) {
-                                CERROR("presto_close: cannot journal close\n");
-                                /* XXX these errors are really bad */
-                                /* panic(); */
-                                return;
-                        }
-                        fdata->fd_bytes_written = 0;
-                }
-        }
-}
-
-static ssize_t presto_file_write(struct file *file, const char *buf,
-                                 size_t size, loff_t *off)
-{
-        struct rec_info rec;
-        int error;
-        struct presto_cache *cache;
-        struct presto_file_set *fset;
-        struct file_operations *fops;
-        ssize_t res;
-        int do_lml_here;
-        void *handle = NULL;
-        unsigned long blocks;
-        struct presto_file_data *fdata;
-        loff_t res_size; 
-
-        error = presto_prep(file->f_dentry, &cache, &fset);
-        if ( error ) {
-                EXIT;
-                return error;
-        }
-
-        blocks = (size >> file->f_dentry->d_inode->i_sb->s_blocksize_bits) + 1;
-        /* XXX 3 is for ext2 indirect blocks ... */ 
-        res_size = 2 * PRESTO_REQHIGH + ((blocks+3) 
-                << file->f_dentry->d_inode->i_sb->s_blocksize_bits);
-
-        error = presto_reserve_space(fset->fset_cache, res_size); 
-        CDEBUG(D_INODE, "Reserved %Ld for %Zd\n", res_size, size);
-        if ( error ) { 
-                EXIT;
-                return -ENOSPC;
-        }
-
-        CDEBUG(D_INODE, "islento %d, minor: %d\n", 
-               ISLENTO(cache->cache_psdev->uc_minor),
-               cache->cache_psdev->uc_minor); 
-
-        /* 
-         *  XXX this lock should become a per inode lock when 
-         *  Vinny's changes are in; we could just use i_sem.
-         */
-        read_lock(&fset->fset_lml.fd_lock); 
-        fdata = (struct presto_file_data *)file->private_data;
-        do_lml_here = size && (fdata->fd_do_lml == 0) &&
-                !presto_chk(file->f_dentry, PRESTO_DONT_JOURNAL);
-
-        if (do_lml_here)
-                fdata->fd_do_lml = 1;
-        read_unlock(&fset->fset_lml.fd_lock); 
-
-        /* XXX 
-           There might be a bug here.  We need to make 
-           absolutely sure that the ext3_file_write commits 
-           after our transaction that writes the LML record.
-           Nesting the file write helps if new blocks are allocated. 
-        */
-        res = 0;
-        if (do_lml_here) {
-                struct presto_version file_version;
-                /* handle different space reqs from file system below! */
-                handle = presto_trans_start(fset, file->f_dentry->d_inode, 
-                                            KML_OPCODE_WRITE);
-                if ( IS_ERR(handle) ) {
-                        presto_release_space(fset->fset_cache, res_size); 
-                        CERROR("presto_write: no space for transaction\n");
-                        return -ENOSPC;
-                }
-
-                presto_getversion(&file_version, file->f_dentry->d_inode); 
-                res = presto_write_lml_close(&rec, fset, file, 
-                                             fdata->fd_info.remote_ino, 
-                                             fdata->fd_info.remote_generation, 
-                                             &fdata->fd_info.remote_version, 
-                                             &file_version);
-                fdata->fd_lml_offset = rec.offset;
-                if ( res ) {
-                        CERROR("intermezzo: PANIC failed to write LML\n");
-                        *(int *)0 = 1;
-                        EXIT;
-                        goto exit_write;
-                }
-                presto_trans_commit(fset, handle);
-        }
-
-        fops = filter_c2cffops(cache->cache_filter);
-        res = fops->write(file, buf, size, off);
-        if ( res != size ) {
-                CDEBUG(D_FILE, "file write returns short write: size %Zd, res %Zd\n", size, res); 
-        }
-
-        if ( (res > 0) && fdata ) 
-                 presto_apply_write_policy(file, fset, res);
-
- exit_write:
-        presto_release_space(fset->fset_cache, res_size); 
-        return res;
-}
-
-struct file_operations presto_file_fops = {
-        .write   = presto_file_write,
-        .open    = presto_file_open,
-        .release = presto_file_release,
-        .ioctl   = presto_ioctl
-};
-
-struct inode_operations presto_file_iops = {
-        .permission   = presto_permission,
-        .setattr      = presto_setattr,
-#ifdef CONFIG_FS_EXT_ATTR
-        .set_ext_attr = presto_set_ext_attr,
-#endif
-};
-
-/* FIXME: I bet we want to add a lock here and in presto_file_open. */
-int izo_purge_file(struct presto_file_set *fset, char *file)
-{
-#if 0
-        void *handle = NULL;
-        char *path = NULL;
-        struct nameidata nd;
-        struct dentry *dentry;
-        int rc = 0, len;
-        loff_t oldsize;
-
-        /* FIXME: not mtpt it's gone */
-        len = strlen(fset->fset_cache->cache_mtpt) + strlen(file) + 1;
-        PRESTO_ALLOC(path, len + 1);
-        if (path == NULL)
-                return -1;
-
-        sprintf(path, "%s/%s", fset->fset_cache->cache_mtpt, file);
-        rc = izo_lookup_file(fset, path, &nd);
-        if (rc)
-                goto error;
-        dentry = nd.dentry;
-
-        /* FIXME: take a lock here */
-
-        if (dentry->d_inode->i_atime.tv_sec > get_seconds() - 5) {
-                /* We lost the race; this file was accessed while we were doing
-                 * ioctls and lookups and whatnot. */
-                rc = -EBUSY;
-                goto error_unlock;
-        }
-
-        /* FIXME: Check if this file is open. */
-
-        handle = presto_trans_start(fset, dentry->d_inode, KML_OPCODE_TRUNC);
-        if (IS_ERR(handle)) {
-                rc = -ENOMEM;
-                goto error_unlock;
-        }
-
-        /* FIXME: Write LML record */
-
-        oldsize = dentry->d_inode->i_size;
-        rc = izo_do_truncate(fset, dentry, 0, oldsize);
-        if (rc != 0)
-                goto error_clear;
-        rc = izo_do_truncate(fset, dentry, oldsize, 0);
-        if (rc != 0)
-                goto error_clear;
-
- error_clear:
-        /* FIXME: clear LML record */
-
- error_unlock:
-        /* FIXME: release the lock here */
-
- error:
-        if (handle != NULL && !IS_ERR(handle))
-                presto_trans_commit(fset, handle);
-        if (path != NULL)
-                PRESTO_FREE(path, len + 1);
-        return rc;
-#else
-        return 0;
-#endif
-}
diff -Nru a/fs/intermezzo/fileset.c b/fs/intermezzo/fileset.c
--- a/fs/intermezzo/fileset.c	Sun May 16 01:18:34 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,674 +0,0 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
- *  Copyright (C) 2001 Cluster File Systems, Inc. <braam@clusterfs.com>
- *
- *   This file is part of InterMezzo, http://www.inter-mezzo.org.
- *
- *   InterMezzo is free software; you can redistribute it and/or
- *   modify it under the terms of version 2 of the GNU General Public
- *   License as published by the Free Software Foundation.
- *
- *   InterMezzo is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with InterMezzo; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- *  Managing filesets
- *
- */
-
-#include <asm/bitops.h>
-#include <asm/uaccess.h>
-#include <asm/system.h>
-
-#include <linux/errno.h>
-#include <linux/fs.h>
-#include <linux/namei.h>
-#include <linux/ext2_fs.h>
-#include <linux/slab.h>
-#include <linux/vmalloc.h>
-#include <linux/sched.h>
-#include <linux/stat.h>
-#include <linux/string.h>
-#include <linux/blkdev.h>
-#include <linux/init.h>
-#include <linux/module.h>
-
-#include "intermezzo_fs.h"
-#include "intermezzo_psdev.h"
-
-static inline struct presto_file_set *presto_dentry2fset(struct dentry *dentry)
-{
-        if (presto_d2d(dentry) == NULL) {
-                EXIT;
-                return NULL;
-        }
-        return presto_d2d(dentry)->dd_fset;
-}
-
-/* find the fileset dentry for this dentry */
-struct presto_file_set *presto_fset(struct dentry *de)
-{
-        struct dentry *fsde;
-        ENTRY;
-        if ( !de->d_inode ) {
-                /* FIXME: is this ok to be NULL? */
-                CDEBUG(D_INODE,"presto_fset: warning %*s has NULL inode.\n",
-                de->d_name.len, de->d_name.name);
-        }
-        for (fsde = de;; fsde = fsde->d_parent) {
-                if ( presto_dentry2fset(fsde) ) {
-                        EXIT;
-                        return presto_dentry2fset(fsde);
-                }
-                if (fsde->d_parent == fsde)
-                        break;
-        }
-        EXIT;
-        return NULL;
-}
-
-int presto_get_lastrecno(char *path, off_t *recno)
-{
-        struct nameidata nd; 
-        struct presto_file_set *fset;
-        struct dentry *dentry;
-        int error;
-        ENTRY;
-
-        error = presto_walk(path, &nd);
-        if (error) {
-                EXIT;
-                return error;
-        }
-
-        dentry = nd.dentry;
-
-        error = -ENXIO;
-        if ( !presto_ispresto(dentry->d_inode) ) {
-                EXIT;
-                goto kml_out;
-        }
-
-        error = -EINVAL;
-        if ( ! presto_dentry2fset(dentry)) {
-                EXIT;
-                goto kml_out;
-        }
-
-        fset = presto_dentry2fset(dentry);
-        if (!fset) {
-                EXIT;
-                goto kml_out;
-        }
-        error = 0;
-        *recno = fset->fset_kml.fd_recno;
-
- kml_out:
-        path_release(&nd);
-        return error;
-}
-
-static char * _izo_make_path(char *fsetname, char *name)
-{
-        char *path = NULL;
-        int len;
-
-        len = strlen("/.intermezzo/") + strlen(fsetname) 
-                + 1 + strlen(name) + 1;
-
-        PRESTO_ALLOC(path, len);
-        if (path == NULL)
-                return NULL;
-
-        sprintf(path, "/.intermezzo/%s/%s", fsetname, name);
-
-        return path;
-}
-
-char * izo_make_path(struct presto_file_set *fset, char *name)
-{
-        return _izo_make_path(fset->fset_name, name);
-}
-
-static struct file *_izo_fset_open(char *fsetname, char *name, int flags, int mode) 
-{
-        char *path;
-        struct file *f;
-        int error;
-        ENTRY;
-
-        path = _izo_make_path(fsetname, name);
-        if (path == NULL) {
-                EXIT;
-                return ERR_PTR(-ENOMEM);
-        }
-
-        CDEBUG(D_INODE, "opening file %s\n", path);
-        f = filp_open(path, flags, mode);
-        error = PTR_ERR(f);
-        if (IS_ERR(f)) {
-                CDEBUG(D_INODE, "Error %d\n", error);
-        }
-
-        PRESTO_FREE(path, strlen(path));
-
-        EXIT;
-        return f;
-
-}
-
-struct file *izo_fset_open(struct presto_file_set *fset, char *name, int flags, int mode) 
-{
-        return _izo_fset_open(fset->fset_name, name, flags, mode);
-}
-
-
-
-/*
- *  note: this routine "pins" a dentry for a fileset root
- */
-int presto_set_fsetroot(struct dentry *ioctl_dentry, char *fsetname,
-                        unsigned int flags)
-{
-        struct presto_file_set *fset = NULL;
-        struct presto_cache *cache;
-        int error;
-        struct file  *fset_root;
-        struct dentry *dentry;
-
-        ENTRY;
-
-        fset_root = _izo_fset_open(fsetname, "ROOT",  O_RDONLY, 000);
-        if (IS_ERR(fset_root)) {
-                CERROR("Can't open %s/ROOT\n", fsetname);
-                EXIT;
-                error = PTR_ERR(fset_root);
-                goto out;
-        }
-        dentry = dget(fset_root->f_dentry);
-        filp_close(fset_root, NULL);
-
-        dentry->d_inode->i_op = ioctl_dentry->d_inode->i_op;
-        dentry->d_inode->i_fop = ioctl_dentry->d_inode->i_fop;
-        dentry->d_op = ioctl_dentry->d_op;
-        fset = presto_dentry2fset(dentry);
-        if (fset && (fset->fset_dentry == dentry) ) { 
-                CERROR("Fsetroot already set (inode %ld)\n",
-                       dentry->d_inode->i_ino);
-                /* XXX: ignore because clear_fsetroot is broken  */
-#if 0
-                dput(dentry);
-                EXIT;
-                error = -EEXIST;
-                goto out;
-#endif
-        }
-
-        cache = presto_get_cache(dentry->d_inode);
-        if (!cache) { 
-                CERROR("No cache found for inode %ld\n",
-                       dentry->d_inode->i_ino);
-                EXIT;
-                error = -ENODEV;
-                goto out_free;
-        }
-
-        PRESTO_ALLOC(fset, sizeof(*fset));
-        if ( !fset ) {
-                CERROR("No memory allocating fset for %s\n", fsetname);
-                EXIT;
-                error = -ENOMEM;
-                goto out_free;
-        }
-        CDEBUG(D_INODE, "fset at %p\n", fset);
-
-        CDEBUG(D_INODE, "InterMezzo: fsetroot: inode %ld, fileset name %s\n",
-               dentry->d_inode->i_ino, fsetname);
-
-        fset->fset_mnt = mntget(current->fs->pwdmnt); 
-        fset->fset_cache = cache;
-        fset->fset_dentry = dentry; 
-        fset->fset_name = strdup(fsetname);
-        fset->fset_chunkbits = CHUNK_BITS;
-        fset->fset_flags = flags;
-        fset->fset_file_maxio = FSET_DEFAULT_MAX_FILEIO; 
-        fset->fset_permit_lock = SPIN_LOCK_UNLOCKED;
-        PRESTO_ALLOC(fset->fset_reint_buf, 64 * 1024);
-        if (fset->fset_reint_buf == NULL) {
-                EXIT;
-                error = -ENOMEM;
-                goto out_free;
-        }
-        init_waitqueue_head(&fset->fset_permit_queue);
-
-        if (presto_d2d(dentry) == NULL) { 
-                dentry->d_fsdata = izo_alloc_ddata();
-        }
-        if (presto_d2d(dentry) == NULL) {
-                CERROR("InterMezzo: %s: no memory\n", __FUNCTION__);
-                EXIT;
-                error = -ENOMEM;
-                goto out_free;
-        }
-        presto_d2d(dentry)->dd_fset = fset;
-        list_add(&fset->fset_list, &cache->cache_fset_list);
-
-        error = izo_init_kml_file(fset, &fset->fset_kml);
-        if ( error ) {
-                EXIT;
-                CDEBUG(D_JOURNAL, "Error init_kml %d\n", error);
-                goto out_list_del;
-        }
-
-        error = izo_init_lml_file(fset, &fset->fset_lml);
-        if ( error ) {
-                int rc;
-                EXIT;
-                rc = izo_log_close(&fset->fset_kml);
-                CDEBUG(D_JOURNAL, "Error init_lml %d, cleanup %d\n", error, rc);
-                goto out_list_del;
-        }
-
-        /* init_last_rcvd_file could trigger a presto_file_write(), which
-         * requires that the lml structure be initialized. -phil */
-        error = izo_init_last_rcvd_file(fset, &fset->fset_rcvd);
-        if ( error ) {
-                int rc;
-                EXIT;
-                rc = izo_log_close(&fset->fset_kml);
-                rc = izo_log_close(&fset->fset_lml);
-                CDEBUG(D_JOURNAL, "Error init_lastrcvd %d, cleanup %d\n", error, rc);
-                goto out_list_del;
-        }
-
-        CDEBUG(D_PIOCTL, "-------> fset at %p, dentry at %p, mtpt %p,"
-               "fset %s, cache %p, presto_d2d(dentry)->dd_fset %p\n",
-               fset, dentry, fset->fset_dentry, fset->fset_name, cache,
-               presto_d2d(dentry)->dd_fset);
-
-        EXIT;
-        return 0;
-
- out_list_del:
-        list_del(&fset->fset_list);
-        presto_d2d(dentry)->dd_fset = NULL;
- out_free:
-        if (fset) {
-                mntput(fset->fset_mnt); 
-                if (fset->fset_reint_buf != NULL)
-                        PRESTO_FREE(fset->fset_reint_buf, 64 * 1024);
-                PRESTO_FREE(fset, sizeof(*fset));
-        }
-        dput(dentry); 
- out:
-        return error;
-}
-
-static int izo_cleanup_fset(struct presto_file_set *fset)
-{
-        int error;
-        struct presto_cache *cache;
-
-        ENTRY;
-
-        CERROR("Cleaning up fset %s\n", fset->fset_name);
-
-        error = izo_log_close(&fset->fset_kml);
-        if (error)
-                CERROR("InterMezzo: Closing kml for fset %s: %d\n",
-                       fset->fset_name, error);
-        error = izo_log_close(&fset->fset_lml);
-        if (error)
-                CERROR("InterMezzo: Closing lml for fset %s: %d\n",
-                       fset->fset_name, error);
-        error = izo_log_close(&fset->fset_rcvd);
-        if (error)
-                CERROR("InterMezzo: Closing last_rcvd for fset %s: %d\n",
-                       fset->fset_name, error);
-
-        cache = fset->fset_cache;
-
-        list_del(&fset->fset_list);
-
-        presto_d2d(fset->fset_dentry)->dd_fset = NULL;
-        dput(fset->fset_dentry);
-        mntput(fset->fset_mnt);
-
-        PRESTO_FREE(fset->fset_name, strlen(fset->fset_name) + 1);
-        PRESTO_FREE(fset->fset_reint_buf, 64 * 1024);
-        PRESTO_FREE(fset, sizeof(*fset));
-        EXIT;
-        return error;
-}
-
-int izo_clear_fsetroot(struct dentry *dentry)
-{
-        struct presto_file_set *fset;
-
-        ENTRY;
-
-        fset = presto_dentry2fset(dentry);
-        if (!fset) {
-                EXIT;
-                return -EINVAL;
-        }
-
-        izo_cleanup_fset(fset);
-        EXIT;
-        return 0;
-}
-
-int izo_clear_all_fsetroots(struct presto_cache *cache)
-{
-        struct presto_file_set *fset;
-        struct list_head *tmp,*tmpnext;
-        int error;
- 
-        error = 0;
-        tmp = &cache->cache_fset_list;
-        tmpnext = tmp->next;
-        while ( tmpnext != &cache->cache_fset_list) {
-                tmp = tmpnext;
-                tmpnext = tmp->next;
-                fset = list_entry(tmp, struct presto_file_set, fset_list);
-
-                error = izo_cleanup_fset(fset);
-                if (error)
-                        break;
-        }
-        return error;
-}
-
-static struct vfsmount *izo_alloc_vfsmnt(void)
-{
-        struct vfsmount *mnt;
-        PRESTO_ALLOC(mnt, sizeof(*mnt));
-        if (mnt) {
-                memset(mnt, 0, sizeof(struct vfsmount));
-                atomic_set(&mnt->mnt_count,1);
-                INIT_LIST_HEAD(&mnt->mnt_hash);
-                INIT_LIST_HEAD(&mnt->mnt_child);
-                INIT_LIST_HEAD(&mnt->mnt_mounts);
-                INIT_LIST_HEAD(&mnt->mnt_list);
-        }
-        return mnt;
-}
-
-
-static void izo_setup_ctxt(struct dentry *root, struct vfsmount *mnt,
-                           struct run_ctxt *save) 
-{
-        struct run_ctxt new;
-
-        mnt->mnt_root = root;
-        mnt->mnt_sb = root->d_inode->i_sb;
-        unlock_super(mnt->mnt_sb);
-
-        new.rootmnt = mnt;
-        new.root = root;
-        new.pwdmnt = mnt;
-        new.pwd = root;
-        new.fsuid = 0;
-        new.fsgid = 0;
-        new.fs = get_fs(); 
-        /* XXX where can we get the groups from? */
-        new.group_info = groups_alloc(0);
-
-        push_ctxt(save, &new); 
-}
-
-static void izo_cleanup_ctxt(struct vfsmount *mnt, struct run_ctxt *save) 
-{
-        lock_super(mnt->mnt_sb);
-        pop_ctxt(save); 
-}
-
-static int izo_simple_mkdir(struct dentry *dir, char *name, int mode)
-{
-        struct dentry *dchild; 
-        int err;
-        ENTRY;
-        
-        dchild = lookup_one_len(name, dir, strlen(name));
-        if (IS_ERR(dchild)) { 
-                EXIT;
-                return PTR_ERR(dchild); 
-        }
-
-        if (dchild->d_inode) { 
-                dput(dchild);
-                EXIT;
-                return -EEXIST;
-        }
-
-        err = vfs_mkdir(dir->d_inode, dchild, mode);
-        dput(dchild);
-        
-        EXIT;
-        return err;
-}
-
-static int izo_simple_symlink(struct dentry *dir, char *name, char *tgt)
-{
-        struct dentry *dchild; 
-        int err;
-        ENTRY;
-        
-        dchild = lookup_one_len(name, dir, strlen(name));
-        if (IS_ERR(dchild)) { 
-                EXIT;
-                return PTR_ERR(dchild); 
-        }
-
-        if (dchild->d_inode) { 
-                dput(dchild);
-                EXIT;
-                return -EEXIST;
-        }
-
-        err = vfs_symlink(dir->d_inode, dchild, tgt);
-        dput(dchild);
-        
-        EXIT;
-        return err;
-}
-
-/*
- * run set_fsetroot in chroot environment
- */
-int presto_set_fsetroot_from_ioc(struct dentry *root, char *fsetname,
-                                 unsigned int flags)
-{
-        int rc;
-        struct presto_cache *cache;
-        struct vfsmount *mnt;
-        struct run_ctxt save;
-
-        if (root != root->d_inode->i_sb->s_root) {
-                CERROR ("IOC_SET_FSET must be called on mount point\n");
-                return -ENODEV;
-        }
-
-        cache = presto_get_cache(root->d_inode);
-        mnt = cache->cache_vfsmount;
-        if (!mnt) { 
-                EXIT;
-                return -ENOMEM;
-        }
-        
-        izo_setup_ctxt(root, mnt, &save); 
-        rc = presto_set_fsetroot(root, fsetname, flags);
-        izo_cleanup_ctxt(mnt, &save);
-        return rc;
-}
-
-/* XXX: this function should detect if fsetname is already in use for
-   the cache under root
-*/ 
-int izo_prepare_fileset(struct dentry *root, char *fsetname) 
-{
-        int err;
-        struct dentry *dotizo = NULL, *fsetdir = NULL, *dotiopen = NULL; 
-        struct presto_cache *cache;
-        struct vfsmount *mnt;
-        struct run_ctxt save;
-
-        cache = presto_get_cache(root->d_inode);
-        mnt = cache->cache_vfsmount = izo_alloc_vfsmnt();
-        if (!mnt) { 
-                EXIT;
-                return -ENOMEM;
-        }
-        
-        if (!fsetname) 
-                fsetname = "rootfset"; 
-
-        izo_setup_ctxt(root, mnt, &save); 
-
-        err = izo_simple_mkdir(root, ".intermezzo", 0755);
-        CDEBUG(D_CACHE, "mkdir on .intermezzo err %d\n", err); 
-
-        err = izo_simple_mkdir(root, "..iopen..", 0755);
-        CDEBUG(D_CACHE, "mkdir on ..iopen.. err %d\n", err); 
-
-        dotiopen = lookup_one_len("..iopen..", root, strlen("..iopen.."));
-        if (IS_ERR(dotiopen)) { 
-                EXIT;
-                goto out;
-        }
-        dotiopen->d_inode->i_op = &presto_dir_iops;
-        dput(dotiopen);
-
-
-        dotizo = lookup_one_len(".intermezzo", root, strlen(".intermezzo"));
-        if (IS_ERR(dotizo)) { 
-                EXIT;
-                goto out;
-        }
-
-
-        err = izo_simple_mkdir(dotizo, fsetname, 0755);
-        CDEBUG(D_CACHE, "mkdir err %d\n", err); 
-
-        /* XXX find the dentry of the root of the fileset (root for now) */ 
-        fsetdir = lookup_one_len(fsetname, dotizo, strlen(fsetname));
-        if (IS_ERR(fsetdir)) { 
-                EXIT;
-                goto out;
-        }
-
-        err = izo_simple_symlink(fsetdir, "ROOT", "../.."); 
-
-        /* XXX read flags from flags file */ 
-        err =  presto_set_fsetroot(root, fsetname, 0); 
-        CDEBUG(D_CACHE, "set_fsetroot err %d\n", err); 
-
- out:
-        if (dotizo && !IS_ERR(dotizo)) 
-                dput(dotizo); 
-        if (fsetdir && !IS_ERR(fsetdir)) 
-                dput(fsetdir); 
-        izo_cleanup_ctxt(mnt, &save);
-        return err; 
-}
-
-int izo_set_fileid(struct file *dir, struct izo_ioctl_data *data)
-{
-        int rc = 0;
-        struct presto_cache *cache;
-        struct vfsmount *mnt;
-        struct run_ctxt save;
-        struct nameidata nd;
-        struct dentry *dentry;
-        struct presto_dentry_data *dd;
-        struct dentry *root;
-        char *buf = NULL; 
-
-        ENTRY;
-
-
-        root = dir->f_dentry;
-
-        /* actually, needs to be called on ROOT of fset, not mount point  
-        if (root != root->d_inode->i_sb->s_root) {
-                CERROR ("IOC_SET_FSET must be called on mount point\n");
-                return -ENODEV;
-        }
-        */
-
-        cache = presto_get_cache(root->d_inode);
-        mnt = cache->cache_vfsmount;
-        if (!mnt) { 
-                EXIT;
-                return -ENOMEM;
-        }
-        
-        izo_setup_ctxt(root, mnt, &save); 
-        
-        PRESTO_ALLOC(buf, data->ioc_plen1);
-        if (!buf) { 
-                rc = -ENOMEM;
-                EXIT;
-                goto out;
-        }
-        if (copy_from_user(buf, data->ioc_pbuf1, data->ioc_plen1)) { 
-                rc =  -EFAULT;
-                EXIT;
-                goto out;
-        }
-
-        rc = presto_walk(buf, &nd);
-        if (rc) {
-                CERROR("Unable to open: %s\n", buf);
-                EXIT;
-                goto out;
-        }
-        dentry = nd.dentry;
-        if (!dentry) {
-                CERROR("no dentry!\n");
-                rc =  -EINVAL;
-                EXIT;
-                goto out_close;
-        }
-        dd = presto_d2d(dentry);
-        if (!dd) {
-                CERROR("no dentry_data!\n");
-                rc = -EINVAL;
-                EXIT;
-                goto out_close;
-        }
-
-        CDEBUG(D_FILE,"de:%p dd:%p\n", dentry, dd);
-
-        if (dd->remote_ino != 0) {
-                CERROR("remote_ino already set? %Lx:%Lx\n",
-                       (unsigned long long) dd->remote_ino,
-                       (unsigned long long) dd->remote_generation);
-                rc = 0;
-                EXIT;
-                goto out_close;
-        }
-
-
-        CDEBUG(D_FILE,"setting %p %p, %s to %Lx:%Lx\n", dentry, dd, 
-               buf,
-               (unsigned long long) data->ioc_ino,
-               (unsigned long long) data->ioc_generation);
-        dd->remote_ino = data->ioc_ino;
-        dd->remote_generation = data->ioc_generation;
-
-        EXIT;
- out_close:
-        path_release(&nd);
- out:
-        if (buf)
-                PRESTO_FREE(buf, data->ioc_plen1);
-        izo_cleanup_ctxt(mnt, &save);
-        return rc;
-}
diff -Nru a/fs/intermezzo/inode.c b/fs/intermezzo/inode.c
--- a/fs/intermezzo/inode.c	Sun May 16 01:18:33 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,179 +0,0 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
- *  Copyright (C) 1996 Peter J. Braam <braam@maths.ox.ac.uk> and
- *    Michael Callahan <callahan@maths.ox.ac.uk>
- *  Copyright (C) 1999 Carnegie Mellon University
- *    Rewritten for Linux 2.1.  Peter Braam <braam@cs.cmu.edu>
- *
- *   This file is part of InterMezzo, http://www.inter-mezzo.org.
- *
- *   InterMezzo is free software; you can redistribute it and/or
- *   modify it under the terms of version 2 of the GNU General Public
- *   License as published by the Free Software Foundation.
- *
- *   InterMezzo is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with InterMezzo; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * Super block/filesystem wide operations
- */
-
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/mm.h>
-#include <linux/string.h>
-#include <linux/stat.h>
-#include <linux/errno.h>
-#include <linux/unistd.h>
-
-#include <asm/system.h>
-#include <asm/uaccess.h>
-
-#include <linux/fs.h>
-#include <linux/slab.h>
-#include <linux/vmalloc.h>
-#include <asm/segment.h>
-
-#include "intermezzo_fs.h"
-#include "intermezzo_psdev.h"
-
-extern void presto_free_cache(struct presto_cache *);
-
-void presto_set_ops(struct inode *inode, struct  filter_fs *filter)
-{
-        ENTRY; 
-
-        if (!inode || is_bad_inode(inode))
-                return;
-
-        if (S_ISREG(inode->i_mode)) {
-                if ( !filter_c2cfiops(filter) ) {
-                       filter_setup_file_ops(filter, 
-                                             inode, &presto_file_iops,
-                                             &presto_file_fops);
-                }
-                inode->i_op = filter_c2ufiops(filter);
-                inode->i_fop = filter_c2uffops(filter);
-                CDEBUG(D_INODE, "set file methods for %ld to %p\n",
-                       inode->i_ino, inode->i_op);
-        } else if (S_ISDIR(inode->i_mode)) {
-                inode->i_op = filter_c2udiops(filter);
-                inode->i_fop = filter_c2udfops(filter);
-                CDEBUG(D_INODE, "set dir methods for %ld to %p ioctl %p\n",
-                       inode->i_ino, inode->i_op, inode->i_fop->ioctl);
-        } else if (S_ISLNK(inode->i_mode)) {
-                if ( !filter_c2csiops(filter)) {
-                        filter_setup_symlink_ops(filter, 
-                                                 inode,
-                                                 &presto_sym_iops, 
-                                                 &presto_sym_fops);
-                }
-                inode->i_op = filter_c2usiops(filter);
-                inode->i_fop = filter_c2usfops(filter);
-                CDEBUG(D_INODE, "set link methods for %ld to %p\n",
-                       inode->i_ino, inode->i_op);
-        }
-        EXIT;
-}
-
-void presto_read_inode(struct inode *inode)
-{
-        struct presto_cache *cache;
-
-        cache = presto_get_cache(inode);
-        if ( !cache ) {
-                CERROR("PRESTO: BAD, BAD: cannot find cache\n");
-                make_bad_inode(inode);
-                return ;
-        }
-
-        filter_c2csops(cache->cache_filter)->read_inode(inode);
-
-        CDEBUG(D_INODE, "presto_read_inode: ino %ld, gid %d\n", 
-               inode->i_ino, inode->i_gid);
-
-        presto_set_ops(inode, cache->cache_filter); 
-        /* XXX handle special inodes here or not - probably not? */
-}
-
-static void presto_put_super(struct super_block *sb)
-{
-        struct presto_cache *cache;
-        struct upc_channel *channel;
-        struct super_operations *sops;
-        struct list_head *lh;
-        int err;
-
-        ENTRY;
-        cache = presto_cache_find(sb);
-        if (!cache) {
-                EXIT;
-                goto exit;
-        }
-        channel = &izo_channels[presto_c2m(cache)];
-        sops = filter_c2csops(cache->cache_filter);
-        err = izo_clear_all_fsetroots(cache); 
-        if (err) { 
-                CERROR("%s: err %d\n", __FUNCTION__, err);
-        }
-        PRESTO_FREE(cache->cache_vfsmount, sizeof(struct vfsmount));
-
-        /* look at kill_super - fsync_super is not exported GRRR but 
-           probably not needed */ 
-        unlock_super(sb);
-        shrink_dcache_parent(cache->cache_root); 
-        dput(cache->cache_root); 
-        //fsync_super(sb); 
-        lock_super(sb);
-
-        if (sops->write_super)
-                sops->write_super(sb); 
-
-        if (sops->put_super)
-                sops->put_super(sb);
-
-        /* free any remaining async upcalls when the filesystem is unmounted */
-        spin_lock(&channel->uc_lock);
-        lh = channel->uc_pending.next;
-        while ( lh != &channel->uc_pending) {
-                struct upc_req *req;
-                req = list_entry(lh, struct upc_req, rq_chain);
-
-                /* assignment must be here: we are about to free &lh */
-                lh = lh->next;
-                if ( ! (req->rq_flags & REQ_ASYNC) ) 
-                        continue;
-                list_del(&(req->rq_chain));
-                PRESTO_FREE(req->rq_data, req->rq_bufsize);
-                PRESTO_FREE(req, sizeof(struct upc_req));
-        }
-        list_del(&cache->cache_channel_list); 
-        spin_unlock(&channel->uc_lock);
-
-        presto_free_cache(cache);
-
-exit:
-        CDEBUG(D_MALLOC, "after umount: kmem %ld, vmem %ld\n",
-               presto_kmemory, presto_vmemory);
-        return ;
-}
-
-struct super_operations presto_super_ops = {
-        .read_inode    = presto_read_inode,
-        .put_super     = presto_put_super,
-};
-
-
-/* symlinks can be chowned */
-struct inode_operations presto_sym_iops = {
-        .setattr       = presto_setattr
-};
-
-/* NULL for now */
-struct file_operations presto_sym_fops; 
diff -Nru a/fs/intermezzo/intermezzo_fs.h b/fs/intermezzo/intermezzo_fs.h
--- a/fs/intermezzo/intermezzo_fs.h	Sun May 16 01:18:34 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,923 +0,0 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
- *  Copyright (C) 2001, 2002 Cluster File Systems, Inc.
- *  Copyright (C) 2001 Tacitus Systems, Inc.
- *  Copyright (C) 2000 Stelias Computing, Inc.
- *  Copyright (C) 2000 Red Hat, Inc.
- *  Copyright (C) 2000 TurboLinux, Inc.
- *  Copyright (C) 2000 Los Alamos National Laboratory.
- *
- *   This file is part of InterMezzo, http://www.inter-mezzo.org.
- *
- *   InterMezzo is free software; you can redistribute it and/or
- *   modify it under the terms of version 2 of the GNU General Public
- *   License as published by the Free Software Foundation.
- *
- *   InterMezzo is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with InterMezzo; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#ifndef __INTERMEZZO_FS_H_
-#define __INTERMEZZO_FS_H_ 1
-
-#include "intermezzo_lib.h"
-#include "intermezzo_idl.h"
-
-
-#ifdef __KERNEL__
-typedef __u8 uuid_t[16];
-#else
-# include <uuid/uuid.h>
-#endif
-
-struct lento_vfs_context {
-        __u64 kml_offset;
-        struct timespec updated_time;
-        __u64 remote_ino;
-        __u64 remote_generation;
-        __u32 slot_offset;
-        __u32 recno;
-        __u32 flags;
-        uuid_t uuid;
-        struct presto_version remote_version;
-};
-
-#ifdef __KERNEL__
-# include <linux/smp.h>
-# include <linux/fsfilter.h>
-# include <linux/mount.h>
-# include <linux/slab.h>
-# include <linux/vmalloc.h>
-# include <linux/smp_lock.h>
-
-/* fixups for fs.h */
-# ifndef fs_down
-#  define fs_down(sem) down(sem)
-# endif
-
-# ifndef fs_up
-#  define fs_up(sem) up(sem)
-# endif
-
-# define KML_IDLE                        0
-# define KML_DECODE                      1
-# define KML_OPTIMIZE                    2
-# define KML_REINT                       3
-
-# define KML_OPEN_REINT                  0x0100
-# define KML_REINT_BEGIN                 0x0200
-# define KML_BACKFETCH                   0x0400
-# define KML_REINT_END                   0x0800
-# define KML_CLOSE_REINT                 0x1000
-# define KML_REINT_MAXBUF                (64 * 1024)
-
-# define CACHE_CLIENT_RO       0x4
-# define CACHE_LENTO_RO        0x8
-
-/* global variables */
-extern int presto_debug;
-extern int presto_print_entry;
-extern long presto_kmemory;
-extern long presto_vmemory;
-
-# define PRESTO_DEBUG
-# ifdef PRESTO_DEBUG
-/* debugging masks */
-#  define D_SUPER       1
-#  define D_INODE       2
-#  define D_FILE        4
-#  define D_CACHE       8  /* cache debugging */
-#  define D_MALLOC     16  /* print malloc, de-alloc information */
-#  define D_JOURNAL    32
-#  define D_UPCALL     64  /* up and downcall debugging */
-#  define D_PSDEV     128
-#  define D_PIOCTL    256
-#  define D_SPECIAL   512
-#  define D_TIMING   1024
-#  define D_DOWNCALL 2048
-#  define D_KML      4096
-#  define D_FSDATA   8192
-
-#  define CDEBUG(mask, format, a...)                                    \
-        do {                                                            \
-                if (presto_debug & mask) {                              \
-                        printk("(%s:%s,l. %d %d): " format, __FILE__,   \
-                               __FUNCTION__, __LINE__, current->pid     \
-                               , ## a);                                 \
-                }                                                       \
-        } while (0)
-
-#define CERROR(format, a...)                                            \
-do {                                                                    \
-        printk("(%s:%s,l. %d %d): " format, __FILE__, __FUNCTION__,     \
-               __LINE__, current->pid , ## a);                          \
-} while (0)
-
-#  define ENTRY                                                         \
-        if (presto_print_entry)                                         \
-                printk("Process %d entered %s\n", current->pid, __FUNCTION__)
-
-#  define EXIT                                                          \
-        if (presto_print_entry)                                         \
-                printk("Process %d leaving %s at %d\n", current->pid,   \
-                       __FUNCTION__, __LINE__)
-
-#  define presto_kmem_inc(ptr, size) presto_kmemory += (size)
-#  define presto_kmem_dec(ptr, size) presto_kmemory -= (size)
-#  define presto_vmem_inc(ptr, size) presto_vmemory += (size)
-#  define presto_vmem_dec(ptr, size) presto_vmemory -= (size)
-# else /* !PRESTO_DEBUG */
-#  define CDEBUG(mask, format, a...) do {} while (0)
-#  define ENTRY do {} while (0)
-#  define EXIT do {} while (0)
-#  define presto_kmem_inc(ptr, size) do {} while (0)
-#  define presto_kmem_dec(ptr, size) do {} while (0)
-#  define presto_vmem_inc(ptr, size) do {} while (0)
-#  define presto_vmem_dec(ptr, size) do {} while (0)
-# endif /* PRESTO_DEBUG */
-
-
-struct run_ctxt {
-        struct vfsmount *pwdmnt;
-        struct dentry   *pwd;
-        struct vfsmount *rootmnt;
-        struct dentry   *root;
-        uid_t            fsuid;
-        gid_t            fsgid;
-        mm_segment_t     fs;
-        struct group_info * group_info;
-/*	int              ngroups;
-	gid_t	         groups[NGROUPS];*/
-
-};
-
-static inline void push_ctxt(struct run_ctxt *save, struct run_ctxt *new)
-{
-        save->fs = get_fs();
-        save->pwd = dget(current->fs->pwd);
-        save->pwdmnt = mntget(current->fs->pwdmnt);
-        save->fsgid = current->fsgid;
-        save->fsuid = current->fsuid;
-        save->root = current->fs->root;
-        save->rootmnt = current->fs->rootmnt;
-        save->group_info = current->group_info;
-/*      save->ngroups = current->ngroups;
-        for (i = 0; i< current->ngroups; i++) 
-                save->groups[i] = current->groups[i];*/
-
-        set_fs(new->fs);
-        lock_kernel();
-        set_fs_pwd(current->fs, new->pwdmnt, new->pwd);
-        if (new->root)
-                set_fs_root(current->fs, new->rootmnt, new->root);
-        unlock_kernel();
-        current->fsuid = new->fsuid;
-        current->fsgid = new->fsgid;
-        /*if (new->ngroups > 0) {
-                current->ngroups = new->ngroups;
-                for (i = 0; i< new->ngroups; i++) 
-                        current->groups[i] = new->groups[i];
-        }*/
-        current->group_info = new->group_info;
-        
-}
-
-static inline void pop_ctxt(struct run_ctxt *saved)
-{
-        set_fs(saved->fs);
-        lock_kernel();
-        set_fs_pwd(current->fs, saved->pwdmnt, saved->pwd);
-        if (saved->root)
-                set_fs_root(current->fs, saved->rootmnt, saved->root);
-        unlock_kernel();
-        current->fsuid = saved->fsuid;
-        current->fsgid = saved->fsgid;
-        current->group_info = saved->group_info;
-/*
-        current->ngroups = saved->ngroups;
-        for (i = 0; i< saved->ngroups; i++) 
-                current->groups[i] = saved->groups[i];
-*/
-        mntput(saved->pwdmnt);
-        dput(saved->pwd);
-}
-
-static inline struct presto_dentry_data *presto_d2d(struct dentry *dentry)
-{
-        return (struct presto_dentry_data *)(dentry->d_fsdata);
-}
-
-struct presto_cache {
-        spinlock_t          cache_lock;
-        loff_t              cache_reserved;
-        struct  vfsmount   *cache_vfsmount;
-        struct super_block *cache_sb;
-        struct  dentry     *cache_root;
-        struct list_head    cache_chain; /* for the dev/cache hash */
-
-        int   cache_flags;
-
-        char *cache_type;            /* filesystem type of cache */
-        struct filter_fs *cache_filter;
-
-        struct upc_channel *cache_psdev;  /* points to channel used */
-        struct list_head cache_channel_list; 
-        struct list_head cache_fset_list; /* filesets mounted in cache */
-};
-
-struct presto_log_fd {
-        rwlock_t         fd_lock;
-        loff_t           fd_offset;  /* offset where next record should go */
-        struct file    *fd_file;
-        int             fd_truncating;
-        unsigned int   fd_recno;   /* last recno written */
-        struct list_head  fd_reservations;
-};
-
-/* file sets */
-# define CHUNK_BITS  16
-
-struct presto_file_set {
-        struct list_head fset_list;
-        struct presto_log_fd fset_kml;
-        struct presto_log_fd fset_lml;
-        struct presto_log_fd fset_rcvd;
-        struct list_head *fset_clients;  /* cache of clients */
-        struct dentry *fset_dentry;
-        struct vfsmount *fset_mnt;
-        struct presto_cache *fset_cache;
-
-        unsigned int fset_lento_recno;  /* last recno mentioned to lento */
-        loff_t fset_lento_off;    /* last offset mentioned to lento */
-        loff_t fset_kml_logical_off; /* logical offset of kml file byte 0 */
-        char * fset_name;
-
-        int fset_flags;
-        int fset_chunkbits;
-        char *fset_reint_buf; /* temporary buffer holds kml during reint */
-
-        spinlock_t fset_permit_lock;
-        int fset_permit_count;
-        int fset_permit_upcall_count;
-        /* This queue is used both for processes waiting for the kernel to give
-         * up the permit as well as processes waiting for the kernel to be given
-         * the permit, depending on the state of FSET_HASPERMIT. */
-        wait_queue_head_t fset_permit_queue;
-
-        loff_t  fset_file_maxio;  /* writing more than this causes a close */
-        unsigned long int kml_truncate_size;
-};
-
-/* This is the default number of bytes written before a close is recorded*/
-#define FSET_DEFAULT_MAX_FILEIO (1024<<10)
-
-struct dentry *presto_tmpfs_ilookup(struct inode *dir, struct dentry *dentry, 
-                                    ino_t ino, unsigned int generation);
-struct dentry *presto_iget_ilookup(struct inode *dir, struct dentry *dentry, 
-                                    ino_t ino, unsigned int generation);
-struct dentry *presto_add_ilookup_dentry(struct dentry *parent,
-                                         struct dentry *real);
-
-struct journal_ops {
-        int (*tr_all_data)(struct inode *);
-        loff_t (*tr_avail)(struct presto_cache *fset, struct super_block *);
-        void *(*tr_start)(struct presto_file_set *, struct inode *, int op);
-        void (*tr_commit)(struct presto_file_set *, void *handle);
-        void (*tr_journal_data)(struct inode *);
-        struct dentry *(*tr_ilookup)(struct inode *dir, struct dentry *dentry, ino_t ino, unsigned int generation);
-        struct dentry *(*tr_add_ilookup)(struct dentry *parent, struct dentry *real);
-};
-
-extern struct journal_ops presto_ext2_journal_ops;
-extern struct journal_ops presto_ext3_journal_ops;
-extern struct journal_ops presto_tmpfs_journal_ops;
-extern struct journal_ops presto_xfs_journal_ops;
-extern struct journal_ops presto_reiserfs_journal_ops;
-extern struct journal_ops presto_obdfs_journal_ops;
-
-# define LENTO_FL_KML            0x0001
-# define LENTO_FL_EXPECT         0x0002
-# define LENTO_FL_VFSCHECK       0x0004
-# define LENTO_FL_JUSTLOG        0x0008
-# define LENTO_FL_WRITE_KML      0x0010
-# define LENTO_FL_CANCEL_LML     0x0020
-# define LENTO_FL_WRITE_EXPECT   0x0040
-# define LENTO_FL_IGNORE_TIME    0x0080
-# define LENTO_FL_TOUCH_PARENT   0x0100
-# define LENTO_FL_TOUCH_NEWOBJ   0x0200
-# define LENTO_FL_SET_DDFILEID   0x0400
-
-struct presto_cache *presto_get_cache(struct inode *inode);
-int presto_sprint_mounts(char *buf, int buflen, int minor);
-struct presto_file_set *presto_fset(struct dentry *de);
-int presto_journal(struct dentry *dentry, char *buf, size_t size);
-int presto_fwrite(struct file *file, const char *str, int len, loff_t *off);
-int presto_ispresto(struct inode *);
-
-/* super.c */
-extern struct file_system_type presto_fs_type;
-extern int init_intermezzo_fs(void);
-
-/* fileset.c */
-extern int izo_prepare_fileset(struct dentry *root, char *fsetname);
-char * izo_make_path(struct presto_file_set *fset, char *name);
-struct file *izo_fset_open(struct presto_file_set *fset, char *name, int flags, int mode);
-
-/* psdev.c */
-int izo_psdev_get_free_channel(void);
-int presto_psdev_init(void);
-int izo_psdev_setpid(int minor);
-extern void presto_psdev_cleanup(void);
-int presto_lento_up(int minor);
-int izo_psdev_setchannel(struct file *file, int fd);
-
-/* inode.c */
-extern struct super_operations presto_super_ops;
-void presto_set_ops(struct inode *inode, struct  filter_fs *filter);
-
-/* dcache.c */
-void presto_frob_dop(struct dentry *de);
-char *presto_path(struct dentry *dentry, struct dentry *root,
-                  char *buffer, int buflen);
-struct presto_dentry_data *izo_alloc_ddata(void);
-int presto_set_dd(struct dentry *);
-int presto_init_ddata_cache(void);
-void presto_cleanup_ddata_cache(void);
-extern struct dentry_operations presto_dentry_ops;
-
-/* dir.c */
-extern struct inode_operations presto_dir_iops;
-extern struct inode_operations presto_file_iops;
-extern struct inode_operations presto_sym_iops;
-extern struct file_operations presto_dir_fops;
-extern struct file_operations presto_file_fops;
-extern struct file_operations presto_sym_fops;
-int presto_setattr(struct dentry *de, struct iattr *iattr);
-int presto_settime(struct presto_file_set *fset, struct dentry *newobj,
-                   struct dentry *parent, struct dentry *target,
-                   struct lento_vfs_context *ctx, int valid);
-int presto_ioctl(struct inode *inode, struct file *file,
-                 unsigned int cmd, unsigned long arg);
-
-extern int presto_ilookup_uid;
-# define PRESTO_ILOOKUP_MAGIC "...ino:"
-# define PRESTO_ILOOKUP_SEP ':'
-int izo_dentry_is_ilookup(struct dentry *, ino_t *id, unsigned int *generation);
-struct dentry *presto_lookup(struct inode * dir, struct dentry *dentry, struct nameidata *nd);
-
-struct presto_dentry_data {
-        int dd_count; /* how mnay dentries are using this dentry */
-        struct presto_file_set *dd_fset;
-        struct dentry *dd_inodentry; 
-        loff_t dd_kml_offset;
-        int dd_flags;
-        __u64 remote_ino;
-        __u64 remote_generation;
-};
-
-struct presto_file_data {
-        int fd_do_lml;
-        loff_t fd_lml_offset;
-        size_t fd_bytes_written;
-        /* authorization related data of file at open time */
-        uid_t fd_uid;
-        gid_t fd_gid;
-        mode_t fd_mode;
-        /* identification data of calling process */
-        uid_t fd_fsuid;
-        gid_t fd_fsgid;
-        int fd_ngroups;
-        gid_t fd_groups[NGROUPS_SMALL];
-        /* information how to complete the close operation */
-        struct lento_vfs_context fd_info;
-        struct presto_version fd_version;
-};
-
-/* presto.c and Lento::Downcall */
-
-int presto_walk(const char *name, struct nameidata *nd);
-int izo_clear_fsetroot(struct dentry *dentry);
-int izo_clear_all_fsetroots(struct presto_cache *cache);
-int presto_get_kmlsize(char *path, __u64 *size);
-int presto_get_lastrecno(char *path, off_t *size);
-int presto_set_fsetroot(struct dentry *dentry, char *fsetname,
-                       unsigned int flags);
-int presto_set_fsetroot_from_ioc(struct dentry *dentry, char *fsetname,
-                                 unsigned int flags);
-int presto_is_read_only(struct presto_file_set *);
-int presto_truncate_lml(struct presto_file_set *fset);
-int lento_write_lml(char *path,
-                     __u64 remote_ino,
-                     __u32 remote_generation,
-                     __u32 remote_version,
-                    struct presto_version *remote_file_version);
-int lento_complete_closes(char *path);
-int presto_f2m(struct presto_file_set *fset);
-int presto_prep(struct dentry *, struct presto_cache **,
-                       struct presto_file_set **);
-/* cache.c */
-extern struct presto_cache *presto_cache_init(void);
-extern void presto_cache_add(struct presto_cache *cache);
-extern void presto_cache_init_hash(void);
-
-struct presto_cache *presto_cache_find(struct super_block *sb);
-
-#define PRESTO_REQLOW  (3 * 4096)
-#define PRESTO_REQHIGH (6 * 4096)
-void presto_release_space(struct presto_cache *cache, loff_t req);
-int presto_reserve_space(struct presto_cache *cache, loff_t req);
-
-#define PRESTO_DATA             0x00000002 /* cached data is valid */
-#define PRESTO_ATTR             0x00000004 /* attributes cached */
-#define PRESTO_DONT_JOURNAL     0x00000008 /* things like .intermezzo/ */
-
-struct presto_file_set *presto_path2fileset(const char *name);
-int izo_revoke_permit(struct dentry *, uuid_t uuid);
-int presto_chk(struct dentry *dentry, int flag);
-void presto_set(struct dentry *dentry, int flag);
-int presto_get_permit(struct inode *inode);
-int presto_put_permit(struct inode *inode);
-int presto_set_max_kml_size(const char *path, unsigned long max_size);
-int izo_mark_dentry(struct dentry *dentry, int and, int or, int *res);
-int izo_mark_cache(struct dentry *dentry, int and_bits, int or_bits, int *);
-int izo_mark_fset(struct dentry *dentry, int and_bits, int or_bits, int *);
-void presto_getversion(struct presto_version *pv, struct inode *inode);
-int presto_i2m(struct inode *inode);
-int presto_c2m(struct presto_cache *cache);
-
-
-/* file.c */
-int izo_purge_file(struct presto_file_set *fset, char *file);
-int presto_adjust_lml(struct file *file, struct lento_vfs_context *info);
-
-/* journal.c */
-struct rec_info {
-        loff_t offset;
-        int size;
-        int recno;
-        int is_kml;
-};
-
-void presto_trans_commit(struct presto_file_set *fset, void *handle);
-void *presto_trans_start(struct presto_file_set *fset, struct inode *inode,
-                         int op);
-int presto_fread(struct file *file, char *str, int len, loff_t *off);
-int presto_clear_lml_close(struct presto_file_set *fset,
-                           loff_t  lml_offset);
-int presto_complete_lml(struct presto_file_set *fset);
-int presto_read_kml_logical_offset(struct rec_info *recinfo,
-                                   struct presto_file_set *fset);
-int presto_write_kml_logical_offset(struct presto_file_set *fset);
-struct file *presto_copy_kml_tail(struct presto_file_set *fset,
-                                  unsigned long int start);
-int presto_finish_kml_truncate(struct presto_file_set *fset,
-                               unsigned long int offset);
-int izo_lookup_file(struct presto_file_set *fset, char *path,
-                    struct nameidata *nd);
-int izo_do_truncate(struct presto_file_set *fset, struct dentry *dentry,
-                    loff_t length,  loff_t size_check);
-int izo_log_close(struct presto_log_fd *logfd);
-struct file *izo_log_open(struct presto_file_set *fset, char *name, int flags);
-int izo_init_kml_file(struct presto_file_set *, struct presto_log_fd *);
-int izo_init_lml_file(struct presto_file_set *, struct presto_log_fd *);
-int izo_init_last_rcvd_file(struct presto_file_set *, struct presto_log_fd *);
-
-/* vfs.c */
-
-/* Extra data needed in the KML for rollback operations; this structure is
- * passed around during the KML-writing process. */
-struct izo_rollback_data {
-        __u32 rb_mode;
-        __u32 rb_rdev;
-        __u64 rb_uid;
-        __u64 rb_gid;
-};
-
-int presto_write_last_rcvd(struct rec_info *recinfo,
-                           struct presto_file_set *fset,
-                           struct lento_vfs_context *info);
-void izo_get_rollback_data(struct inode *inode, struct izo_rollback_data *rb);
-int presto_do_close(struct presto_file_set *fset, struct file *file);
-int presto_do_setattr(struct presto_file_set *fset, struct dentry *dentry,
-                      struct iattr *iattr, struct lento_vfs_context *info);
-int presto_do_create(struct presto_file_set *fset, struct dentry *dir,
-                     struct dentry *dentry, int mode,
-                     struct lento_vfs_context *info);
-int presto_do_link(struct presto_file_set *fset, struct dentry *dir,
-                   struct dentry *old_dentry, struct dentry *new_dentry,
-                   struct lento_vfs_context *info);
-int presto_do_unlink(struct presto_file_set *fset, struct dentry *dir,
-                     struct dentry *dentry, struct lento_vfs_context *info);
-int presto_do_symlink(struct presto_file_set *fset, struct dentry *dir,
-                      struct dentry *dentry, const char *name,
-                      struct lento_vfs_context *info);
-int presto_do_mkdir(struct presto_file_set *fset, struct dentry *dir,
-                    struct dentry *dentry, int mode,
-                    struct lento_vfs_context *info);
-int presto_do_rmdir(struct presto_file_set *fset, struct dentry *dir,
-                    struct dentry *dentry, struct lento_vfs_context *info);
-int presto_do_mknod(struct presto_file_set *fset, struct dentry *dir,
-                    struct dentry *dentry, int mode, dev_t dev,
-                    struct lento_vfs_context *info);
-int do_rename(struct presto_file_set *fset, struct dentry *old_dir,
-              struct dentry *old_dentry, struct dentry *new_dir,
-              struct dentry *new_dentry, struct lento_vfs_context *info);
-int presto_do_statfs (struct presto_file_set *fset,
-                      struct kstatfs * buf);
-
-int lento_setattr(const char *name, struct iattr *iattr,
-                  struct lento_vfs_context *info);
-int lento_create(const char *name, int mode, struct lento_vfs_context *info);
-int lento_link(const char *oldname, const char *newname,
-               struct lento_vfs_context *info);
-int lento_unlink(const char *name, struct lento_vfs_context *info);
-int lento_symlink(const char *oldname,const char *newname,
-                  struct lento_vfs_context *info);
-int lento_mkdir(const char *name, int mode, struct lento_vfs_context *info);
-int lento_rmdir(const char *name, struct lento_vfs_context *info);
-int lento_mknod(const char *name, int mode, dev_t dev,
-                struct lento_vfs_context *info);
-int lento_rename(const char *oldname, const char *newname,
-                 struct lento_vfs_context *info);
-int lento_iopen(const char *name, ino_t ino, unsigned int generation,int flags);
-
-/* journal.c */
-
-#define JOURNAL_PAGE_SZ  PAGE_SIZE
-
-int presto_no_journal(struct presto_file_set *fset);
-int journal_fetch(int minor);
-int presto_log(struct presto_file_set *fset, struct rec_info *rec,
-               const char *buf, size_t size,
-               const char *string1, int len1, 
-               const char *string2, int len2,
-               const char *string3, int len3);
-int presto_get_fileid(int minor, struct presto_file_set *fset,
-                      struct dentry *dentry);
-int presto_journal_setattr(struct rec_info *rec, struct presto_file_set *fset,
-                           struct dentry *dentry, struct presto_version *old_ver,
-                           struct izo_rollback_data *, struct iattr *iattr);
-int presto_journal_create(struct rec_info *rec, struct presto_file_set *fset,
-                          struct dentry *dentry,
-                          struct presto_version *tgt_dir_ver,
-                          struct presto_version *new_file_ver, int mode);
-int presto_journal_link(struct rec_info *rec, struct presto_file_set *fset,
-                        struct dentry *src, struct dentry *tgt,
-                        struct presto_version *tgt_dir_ver,
-                        struct presto_version *new_link_ver);
-int presto_journal_unlink(struct rec_info *rec, struct presto_file_set *fset,
-                          struct dentry *dir,
-                          struct presto_version *tgt_dir_ver,
-                          struct presto_version *old_file_ver,
-                          struct izo_rollback_data *, struct dentry *dentry,
-                          char *old_target, int old_targetlen);
-int presto_journal_symlink(struct rec_info *rec, struct presto_file_set *fset,
-                           struct dentry *dentry, const char *target,
-                           struct presto_version *tgt_dir_ver,
-                           struct presto_version *new_link_ver);
-int presto_journal_mkdir(struct rec_info *rec, struct presto_file_set *fset,
-                         struct dentry *dentry,
-                         struct presto_version *tgt_dir_ver,
-                         struct presto_version *new_dir_ver, int mode);
-int presto_journal_rmdir(struct rec_info *rec, struct presto_file_set *fset,
-                         struct dentry *dentry,
-                         struct presto_version *tgt_dir_ver,
-                         struct presto_version *old_dir_ver,
-                         struct izo_rollback_data *, int len, const char *name);
-int presto_journal_mknod(struct rec_info *rec, struct presto_file_set *fset,
-                         struct dentry *dentry,
-                         struct presto_version *tgt_dir_ver,
-                         struct presto_version *new_node_ver, int mode,
-                         int dmajor, int dminor);
-int presto_journal_rename(struct rec_info *rec, struct presto_file_set *fset,
-                          struct dentry *src, struct dentry *tgt,
-                          struct presto_version *src_dir_ver,
-                          struct presto_version *tgt_dir_ver);
-int presto_journal_open(struct rec_info *, struct presto_file_set *,
-                        struct dentry *, struct presto_version *old_ver);
-int presto_journal_close(struct rec_info *rec, struct presto_file_set *,
-                         struct presto_file_data *, struct dentry *,
-                         struct presto_version *old_file_ver,
-                         struct presto_version *new_file_ver);
-int presto_write_lml_close(struct rec_info *rec,
-                           struct presto_file_set *fset, 
-                           struct file *file,
-                           __u64 remote_ino,
-                           __u64 remote_generation,
-                           struct presto_version *remote_version,
-                           struct presto_version *new_file_ver);
-void presto_log_op(void *data, int len);
-loff_t presto_kml_offset(struct presto_file_set *fset);
-
-/* upcall.c */
-#define SYNCHRONOUS 0
-#define ASYNCHRONOUS 1
-/* asynchronous calls */
-int izo_upc_kml(int minor, __u64 offset, __u32 first_recno, __u64 length,
-                __u32 last_recno, char *fsetname);
-int izo_upc_kml_truncate(int minor, __u64 length, __u32 last_recno,
-                         char *fsetname);
-int izo_upc_go_fetch_kml(int minor, char *fsetname, uuid_t uuid, __u64 kmlsize);
-int izo_upc_backfetch(int minor, char *path, char *fileset, 
-                      struct lento_vfs_context *);
-
-/* synchronous calls */
-int izo_upc_get_fileid(int minor, __u32 reclen, char *rec, 
-                       __u32 pathlen, char *path, char *fsetname);
-int izo_upc_permit(int minor, struct dentry *, __u32 pathlen, char *path,
-                   char *fset);
-int izo_upc_open(int minor, __u32 pathlen, char *path, char *fsetname, 
-                 struct lento_vfs_context *info);
-int izo_upc_connect(int minor, __u64 ip_address, __u64 port, __u8 uuid[16],
-                    int client_flag);
-int izo_upc_revoke_permit(int minor, char *fsetname, uuid_t uuid);
-int izo_upc_set_kmlsize(int minor, char *fsetname, uuid_t uuid, __u64 kmlsize);
-int izo_upc_client_make_branch(int minor, char *fsetname);
-int izo_upc_server_make_branch(int minor, char *fsetname);
-int izo_upc_branch_undo(int minor, char *fsetname, char *branchname);
-int izo_upc_branch_redo(int minor, char *fsetname, char *branchname);
-int izo_upc_repstatus(int minor,  char * fsetname, struct izo_rcvd_rec *lr_server);
-
-/* general mechanism */
-int izo_upc_upcall(int minor, int *size, struct izo_upcall_hdr *, int async);
-
-/* replicator.c */
-int izo_repstatus(struct presto_file_set *fset, __u64 client_kmlsize, 
-                  struct izo_rcvd_rec *lr_client, struct izo_rcvd_rec *lr_server);
-int izo_rep_cache_init(struct presto_file_set *);
-loff_t izo_rcvd_get(struct izo_rcvd_rec *, struct presto_file_set *, char *uuid);
-loff_t izo_rcvd_write(struct presto_file_set *, struct izo_rcvd_rec *);
-loff_t izo_rcvd_upd_remote(struct presto_file_set *fset, char * uuid,  __u64 remote_recno,
-                           __u64 remote_offset);
-
-int izo_ioctl_packlen(struct izo_ioctl_data *data);
-
-/* sysctl.c */
-int init_intermezzo_sysctl(void);
-void cleanup_intermezzo_sysctl(void);
-
-/* ext_attr.c */
-/* We will be more tolerant than the default ea patch with attr name sizes and
- * the size of value. If these come via VFS from the default ea patches, the
- * corresponding character strings will be truncated anyway. During journalling- * we journal length for both name and value. See journal_set_ext_attr.
- */
-#define PRESTO_EXT_ATTR_NAME_MAX 128
-#define PRESTO_EXT_ATTR_VALUE_MAX 8192
-
-#define PRESTO_ALLOC(ptr, size)                                         \
-do {                                                                    \
-        long s = (size);                                                \
-        (ptr) = kmalloc(s, GFP_KERNEL);                                 \
-        if ((ptr) == NULL)                                              \
-                CERROR("IZO: out of memory at %s:%d (trying to "        \
-                       "allocate %ld)\n", __FILE__, __LINE__, s);       \
-        else {                                                          \
-                presto_kmem_inc((ptr), s);                              \
-                memset((ptr), 0, s);                                    \
-        }                                                               \
-        CDEBUG(D_MALLOC, "kmalloced: %ld at %p (tot %ld).\n",           \
-               s, (ptr), presto_kmemory);                               \
-} while (0)
-
-#define PRESTO_FREE(ptr, size)                                          \
-do {                                                                    \
-        long s = (size);                                                \
-        if ((ptr) == NULL) {                                            \
-                CERROR("IZO: free NULL pointer (%ld bytes) at "         \
-                       "%s:%d\n", s, __FILE__, __LINE__);               \
-                break;                                                  \
-        }                                                               \
-        kfree(ptr);                                                     \
-        CDEBUG(D_MALLOC, "kfreed: %ld at %p (tot %ld).\n",              \
-               s, (ptr), presto_kmemory);                               \
-        presto_kmem_dec((ptr), s);                                      \
-} while (0)
-
-static inline int dentry_name_cmp(struct dentry *dentry, char *name)
-{
-        return (strlen(name) == dentry->d_name.len &&
-                memcmp(name, dentry->d_name.name, dentry->d_name.len) == 0);
-}
-
-static inline char *strdup(char *str)
-{
-        char *tmp;
-        tmp = kmalloc(strlen(str) + 1, GFP_KERNEL);
-        if (tmp)
-                memcpy(tmp, str, strlen(str) + 1);
-               
-        return tmp;
-}
-
-static inline int izo_ioctl_is_invalid(struct izo_ioctl_data *data)
-{
-        if (data->ioc_len > (1<<30)) {
-                CERROR("IZO ioctl: ioc_len larger than 1<<30\n");
-                return 1;
-        }
-        if (data->ioc_inllen1 > (1<<30)) {
-                CERROR("IZO ioctl: ioc_inllen1 larger than 1<<30\n");
-                return 1;
-        }
-        if (data->ioc_inllen2 > (1<<30)) {
-                CERROR("IZO ioctl: ioc_inllen2 larger than 1<<30\n");
-                return 1;
-        }
-        if (data->ioc_inlbuf1 && !data->ioc_inllen1) {
-                CERROR("IZO ioctl: inlbuf1 pointer but 0 length\n");
-                return 1;
-        }
-        if (data->ioc_inlbuf2 && !data->ioc_inllen2) {
-                CERROR("IZO ioctl: inlbuf2 pointer but 0 length\n");
-                return 1;
-        }
-        if (data->ioc_pbuf1 && !data->ioc_plen1) {
-                CERROR("IZO ioctl: pbuf1 pointer but 0 length\n");
-                return 1;
-        }
-        if (data->ioc_pbuf2 && !data->ioc_plen2) {
-                CERROR("IZO ioctl: pbuf2 pointer but 0 length\n");
-                return 1;
-        }
-        if (izo_ioctl_packlen(data) != data->ioc_len ) {
-                CERROR("IZO ioctl: packlen exceeds ioc_len\n");
-                return 1;
-        }
-        if (data->ioc_inllen1 &&
-            data->ioc_bulk[data->ioc_inllen1 - 1] != '\0') {
-                CERROR("IZO ioctl: inlbuf1 not 0 terminated\n");
-                return 1;
-        }
-        if (data->ioc_inllen2 &&
-            data->ioc_bulk[size_round(data->ioc_inllen1) + data->ioc_inllen2
-                           - 1] != '\0') {
-                CERROR("IZO ioctl: inlbuf2 not 0 terminated\n");
-                return 1;
-        }
-        return 0;
-}
-
-/* buffer MUST be at least the size of izo_ioctl_hdr */
-static inline int izo_ioctl_getdata(char *buf, char *end, void *arg)
-{
-        struct izo_ioctl_hdr *hdr;
-        struct izo_ioctl_data *data;
-        int err;
-        ENTRY;
-
-        hdr = (struct izo_ioctl_hdr *)buf;
-        data = (struct izo_ioctl_data *)buf;
-
-        err = copy_from_user(buf, (void *)arg, sizeof(*hdr));
-        if ( err ) {
-                EXIT;
-                return err;
-        }
-
-        if (hdr->ioc_version != IZO_IOCTL_VERSION) {
-                CERROR("IZO: version mismatch kernel vs application\n");
-                return -EINVAL;
-        }
-
-        if (hdr->ioc_len + buf >= end) {
-                CERROR("IZO: user buffer exceeds kernel buffer\n");
-                return -EINVAL;
-        }
-
-        if (hdr->ioc_len < sizeof(struct izo_ioctl_data)) {
-                CERROR("IZO: user buffer too small for ioctl\n");
-                return -EINVAL;
-        }
-
-        err = copy_from_user(buf, (void *)arg, hdr->ioc_len);
-        if ( err ) {
-                EXIT;
-                return err;
-        }
-
-        if (izo_ioctl_is_invalid(data)) {
-                CERROR("IZO: ioctl not correctly formatted\n");
-                return -EINVAL;
-        }
-
-        if (data->ioc_inllen1) {
-                data->ioc_inlbuf1 = &data->ioc_bulk[0];
-        }
-
-        if (data->ioc_inllen2) {
-                data->ioc_inlbuf2 = &data->ioc_bulk[0] +
-                        size_round(data->ioc_inllen1);
-        }
-
-        EXIT;
-        return 0;
-}
-
-# define MYPATHLEN(buffer, path) ((buffer) + PAGE_SIZE - (path))
-
-# define free kfree
-# define malloc(a) kmalloc(a, GFP_KERNEL)
-# define printf printk
-int kml_reint_rec(struct file *dir, struct izo_ioctl_data *data);
-int izo_get_fileid(struct file *dir, struct izo_ioctl_data *data);
-int izo_set_fileid(struct file *dir, struct izo_ioctl_data *data);
-
-#else /* __KERNEL__ */
-# include <stdlib.h>
-# include <stdio.h>
-# include <sys/types.h>
-# include <sys/ioctl.h>
-# include <string.h>
-
-# define printk printf
-# ifndef CERROR
-#   define CERROR printf
-# endif
-# define kmalloc(a,b) malloc(a)
-
-void init_fsreintdata (void);
-int kml_fsreint(struct kml_rec *rec, char *basedir);
-int kml_iocreint(__u32 size, char *ptr, __u32 offset, int dird,
-                 uuid_t uuid, __u32 generate_kml);
-
-static inline void izo_ioctl_init(struct izo_ioctl_data *data)
-{
-        memset(data, 0, sizeof(*data));
-        data->ioc_len = sizeof(*data);
-        data->ioc_version = IZO_IOCTL_VERSION;
-}
-
-static inline int
-izo_ioctl_pack(struct izo_ioctl_data *data, char **pbuf, int max)
-{
-        char *ptr;
-        struct izo_ioctl_data *overlay;
-        data->ioc_len = izo_ioctl_packlen(data);
-        data->ioc_version = IZO_IOCTL_VERSION;
-
-        if (*pbuf && izo_ioctl_packlen(data) > max)
-                return 1;
-        if (*pbuf == NULL)
-                *pbuf = malloc(data->ioc_len);
-        if (*pbuf == NULL)
-                return 1;
-        overlay = (struct izo_ioctl_data *)*pbuf;
-        memcpy(*pbuf, data, sizeof(*data));
-
-        ptr = overlay->ioc_bulk;
-        if (data->ioc_inlbuf1)
-                LOGL(data->ioc_inlbuf1, data->ioc_inllen1, ptr);
-        if (data->ioc_inlbuf2)
-                LOGL(data->ioc_inlbuf2, data->ioc_inllen2, ptr);
-        if (izo_ioctl_is_invalid(overlay))
-                return 1;
-
-        return 0;
-}
-
-#endif /* __KERNEL__*/
-
-#define IZO_ERROR_NAME 1
-#define IZO_ERROR_UPDATE 2
-#define IZO_ERROR_DELETE 3
-#define IZO_ERROR_RENAME 4
-
-static inline char *izo_error(int err)
-{
-#ifndef __KERNEL__
-        if (err <= 0)
-                return strerror(-err);
-#endif
-        switch (err) {
-        case IZO_ERROR_NAME:
-                return "InterMezzo name/name conflict";
-        case IZO_ERROR_UPDATE:
-                return "InterMezzo update/update conflict";
-        case IZO_ERROR_DELETE:
-                return "InterMezzo update/delete conflict";
-        case IZO_ERROR_RENAME:
-                return "InterMezzo rename/rename conflict";
-        }
-        return "Unknown InterMezzo error";
-}
-
-/* kml_unpack.c */
-char *kml_print_rec(struct kml_rec *rec, int brief);
-int kml_unpack(struct kml_rec *rec, char **buf, char *end);
-
-/* fs 2.5 compat */
-
-/* is_read_only() is replaced by bdev_read_only which takes struct
-   block_device *.  Since this is only needed for debugging, it can be
-   safely ignored now.
-*/
-#define is_read_only(dev) 0
-
-#endif
diff -Nru a/fs/intermezzo/intermezzo_idl.h b/fs/intermezzo/intermezzo_idl.h
--- a/fs/intermezzo/intermezzo_idl.h	Sun May 16 01:18:33 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,304 +0,0 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
- *  Copyright (C) 2001, 2002 Cluster File Systems, Inc.
- *  Copyright (C) 2001 Tacit Networks, Inc.
- *
- *   This file is part of InterMezzo, http://www.inter-mezzo.org.
- *
- *   InterMezzo is free software; you can redistribute it and/or
- *   modify it under the terms of version 2 of the GNU General Public
- *   License as published by the Free Software Foundation.
- *
- *   InterMezzo is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with InterMezzo; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#ifndef __INTERMEZZO_IDL_H__
-#define __INTERMEZZO_IDL_H__
-
-#include <linux/ioctl.h>
-#include <linux/types.h>
-
-/* this file contains all data structures used in InterMezzo's interfaces:
- * - upcalls
- * - ioctl's
- * - KML records
- * - RCVD records
- * - rpc's
- */ 
-
-/* UPCALL */
-#define INTERMEZZO_MINOR 248   
-
-
-#define IZO_UPC_VERSION 0x00010002
-#define IZO_UPC_PERMIT        1
-#define IZO_UPC_CONNECT       2
-#define IZO_UPC_GO_FETCH_KML  3
-#define IZO_UPC_OPEN          4
-#define IZO_UPC_REVOKE_PERMIT 5
-#define IZO_UPC_KML           6
-#define IZO_UPC_BACKFETCH     7
-#define IZO_UPC_KML_TRUNC     8
-#define IZO_UPC_SET_KMLSIZE   9
-#define IZO_UPC_BRANCH_UNDO   10
-#define IZO_UPC_BRANCH_REDO   11
-#define IZO_UPC_GET_FILEID    12
-#define IZO_UPC_CLIENT_MAKE_BRANCH    13
-#define IZO_UPC_SERVER_MAKE_BRANCH    14
-#define IZO_UPC_REPSTATUS    15
-
-#define IZO_UPC_LARGEST_OPCODE 15
-
-struct izo_upcall_hdr {
-        __u32 u_len;
-        __u32 u_version;
-        __u32 u_opc;
-        __u32 u_uniq;
-        __u32 u_pid;
-        __u32 u_uid;
-        __u32 u_pathlen;
-        __u32 u_fsetlen;
-        __u64 u_offset;
-        __u64 u_length;
-        __u32 u_first_recno;
-        __u32 u_last_recno;
-        __u32 u_async;
-        __u32 u_reclen;
-        __u8  u_uuid[16];
-};
-
-/* This structure _must_ sit at the beginning of the buffer */
-struct izo_upcall_resp {
-        __u32 opcode;
-        __u32 unique;    
-        __u32 result;
-};
-
-
-/* IOCTL */
-
-#define IZO_IOCTL_VERSION 0x00010003
-
-/* maximum size supported for ioc_pbuf1 */
-#define KML_MAX_BUF (64*1024)
-
-struct izo_ioctl_hdr { 
-        __u32  ioc_len;
-        __u32  ioc_version;
-};
-
-struct izo_ioctl_data {
-        __u32 ioc_len;
-        __u32 ioc_version;
-        __u32 ioc_izodev;
-        __u32 ioc_kmlrecno;
-        __u64 ioc_kmlsize;
-        __u32 ioc_flags;
-        __s32 ioc_inofd;
-        __u64 ioc_ino;
-        __u64 ioc_generation;
-        __u32 ioc_mark_what;
-        __u32 ioc_and_flag;
-        __u32 ioc_or_flag;
-        __u32 ioc_dev;
-        __u32 ioc_offset;
-        __u32 ioc_slot;
-        __u64 ioc_uid;
-        __u8  ioc_uuid[16];
-
-        __u32 ioc_inllen1;   /* path */
-        char *ioc_inlbuf1;
-        __u32 ioc_inllen2;   /* fileset */
-        char *ioc_inlbuf2;
-
-        __u32 ioc_plen1;     /* buffers in user space (KML) */
-        char *ioc_pbuf1;
-        __u32 ioc_plen2;     /* buffers in user space (KML) */
-        char *ioc_pbuf2;
-
-        char  ioc_bulk[0];
-};
-
-#define IZO_IOC_DEVICE          _IOW ('p',0x50, void *)
-#define IZO_IOC_REINTKML        _IOW ('p',0x51, void *)
-#define IZO_IOC_GET_RCVD        _IOW ('p',0x52, void *)
-#define IZO_IOC_SET_IOCTL_UID   _IOW ('p',0x53, void *)
-#define IZO_IOC_GET_KML_SIZE    _IOW ('p',0x54, void *)
-#define IZO_IOC_PURGE_FILE_DATA _IOW ('p',0x55, void *)
-#define IZO_IOC_CONNECT         _IOW ('p',0x56, void *)
-#define IZO_IOC_GO_FETCH_KML    _IOW ('p',0x57, void *)
-#define IZO_IOC_MARK            _IOW ('p',0x58, void *)
-#define IZO_IOC_CLEAR_FSET      _IOW ('p',0x59, void *)
-#define IZO_IOC_CLEAR_ALL_FSETS _IOW ('p',0x60, void *)
-#define IZO_IOC_SET_FSET        _IOW ('p',0x61, void *)
-#define IZO_IOC_REVOKE_PERMIT   _IOW ('p',0x62, void *)
-#define IZO_IOC_SET_KMLSIZE     _IOW ('p',0x63, void *)
-#define IZO_IOC_CLIENT_MAKE_BRANCH _IOW ('p',0x64, void *)
-#define IZO_IOC_SERVER_MAKE_BRANCH _IOW ('p',0x65, void *)
-#define IZO_IOC_BRANCH_UNDO    _IOW ('p',0x66, void *)
-#define IZO_IOC_BRANCH_REDO    _IOW ('p',0x67, void *)
-#define IZO_IOC_SET_PID        _IOW ('p',0x68, void *)
-#define IZO_IOC_SET_CHANNEL    _IOW ('p',0x69, void *)
-#define IZO_IOC_GET_CHANNEL    _IOW ('p',0x70, void *)
-#define IZO_IOC_GET_FILEID    _IOW ('p',0x71, void *)
-#define IZO_IOC_ADJUST_LML    _IOW ('p',0x72, void *)
-#define IZO_IOC_SET_FILEID    _IOW ('p',0x73, void *)
-#define IZO_IOC_REPSTATUS    _IOW ('p',0x74, void *)
-
-/* marking flags for fsets */
-#define FSET_CLIENT_RO        0x00000001
-#define FSET_LENTO_RO         0x00000002
-#define FSET_HASPERMIT        0x00000004 /* we have a permit to WB */
-#define FSET_INSYNC           0x00000008 /* this fileset is in sync */
-#define FSET_PERMIT_WAITING   0x00000010 /* Lento is waiting for permit */
-#define FSET_STEAL_PERMIT     0x00000020 /* take permit if Lento is dead */
-#define FSET_JCLOSE_ON_WRITE  0x00000040 /* Journal closes on writes */
-#define FSET_DATA_ON_DEMAND   0x00000080 /* update data on file_open() */
-#define FSET_PERMIT_EXCLUSIVE 0x00000100 /* only one permitholder allowed */
-#define FSET_HAS_BRANCHES     0x00000200 /* this fileset contains branches */
-#define FSET_IS_BRANCH        0x00000400 /* this fileset is a branch */
-#define FSET_FLAT_BRANCH      0x00000800 /* this fileset is ROOT with branches */
-
-/* what to mark indicator (ioctl parameter) */
-#define MARK_DENTRY   101
-#define MARK_FSET     102
-#define MARK_CACHE    103
-#define MARK_GETFL    104
-
-/* KML */
-
-#define KML_MAJOR_VERSION 0x00010000
-#define KML_MINOR_VERSION 0x00000002
-#define KML_OPCODE_NOOP          0
-#define KML_OPCODE_CREATE        1
-#define KML_OPCODE_MKDIR         2
-#define KML_OPCODE_UNLINK        3
-#define KML_OPCODE_RMDIR         4
-#define KML_OPCODE_CLOSE         5
-#define KML_OPCODE_SYMLINK       6
-#define KML_OPCODE_RENAME        7
-#define KML_OPCODE_SETATTR       8
-#define KML_OPCODE_LINK          9
-#define KML_OPCODE_OPEN          10
-#define KML_OPCODE_MKNOD         11
-#define KML_OPCODE_WRITE         12
-#define KML_OPCODE_RELEASE       13
-#define KML_OPCODE_TRUNC         14
-#define KML_OPCODE_SETEXTATTR    15
-#define KML_OPCODE_DELEXTATTR    16
-#define KML_OPCODE_KML_TRUNC     17
-#define KML_OPCODE_GET_FILEID    18
-#define KML_OPCODE_NUM           19
-/* new stuff */
-struct presto_version {
-        __u32 pv_mtime_sec;
-        __u32 pv_mtime_nsec;
-        __u32 pv_ctime_sec;
-        __u32 pv_ctime_nsec;
-        __u64 pv_size;
-};
-
-struct kml_prefix_hdr {
-        __u32                    len;
-        __u32                    version;
-        __u32                    pid;
-        __u32                    auid;
-        __u32                    fsuid;
-        __u32                    fsgid;
-        __u32                    opcode;
-        __u32                    ngroups;
-};
-
-struct kml_prefix { 
-        struct kml_prefix_hdr    *hdr;
-        __u32                    *groups;
-};
-
-struct kml_suffix { 
-        __u32                    prevrec;
-        __u32                    recno;
-        __u32                    time;
-        __u32                    len;
-};
-
-struct kml_rec {
-        char                   *buf;
-        struct kml_prefix       prefix;
-        __u64                   offset;
-        char                   *path;
-        int                     pathlen;
-        char                   *name;
-        int                     namelen;
-        char                   *target;
-        int                     targetlen;
-        struct presto_version  *old_objectv;
-        struct presto_version  *new_objectv;
-        struct presto_version  *old_parentv;
-        struct presto_version  *new_parentv;
-        struct presto_version  *old_targetv;
-        struct presto_version  *new_targetv;
-        __u32                   valid;
-        __u32                   mode;
-        __u32                   uid;
-        __u32                   gid;
-        __u64                   size;
-        __u32                   mtime_sec;
-        __u32                   mtime_nsec;
-        __u32                   ctime_sec;
-        __u32                   ctime_nsec;
-        __u32                   flags;
-        __u32                   ino;
-        __u32                   rdev;
-        __u32                   major;
-        __u32                   minor;
-        __u32                   generation;
-        __u32                   old_mode;
-        __u32                   old_rdev;
-        __u64                   old_uid;
-        __u64                   old_gid;
-        char                   *old_target;
-        int                     old_targetlen;
-        struct kml_suffix      *suffix;
-};
-
-
-/* RCVD */ 
-
-/* izo_rcvd_rec fills the .intermezzo/fset/last_rcvd file and provides data about
- * our view of reintegration offsets for a given peer.
- *
- * The only exception is the last_rcvd record which has a UUID consisting of all
- * zeroes; this record's lr_local_offset field is the logical byte offset of our
- * KML, which is updated when KML truncation takes place.  All other fields are
- * reserved. */
-
-/* XXX - document how clean shutdowns are recorded */
-
-struct izo_rcvd_rec { 
-        __u8    lr_uuid[16];       /* which peer? */
-        __u64   lr_remote_recno;   /* last confirmed remote recno  */
-        __u64   lr_remote_offset;  /* last confirmed remote offset */
-        __u64   lr_local_recno;    /* last locally reinted recno   */
-        __u64   lr_local_offset;   /* last locally reinted offset  */
-        __u64   lr_last_ctime;     /* the largest ctime that has reintegrated */
-};
-
-/* Cache purge database
- *
- * Each DB entry is this structure followed by the path name, no trailing NUL. */
-struct izo_purge_entry {
-        __u64 p_atime;
-        __u32 p_pathlen;
-};
-
-/* RPC */
-
-#endif
diff -Nru a/fs/intermezzo/intermezzo_journal.h b/fs/intermezzo/intermezzo_journal.h
--- a/fs/intermezzo/intermezzo_journal.h	Sun May 16 01:18:33 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,24 +0,0 @@
-#ifndef __PRESTO_JOURNAL_H
-#define __PRESTO_JOURNAL_H
-
-
-struct journal_prefix {
-	int len;
-        u32 version;
-	int pid;
-	int uid;
-	int fsuid;
-	int fsgid;
-	int opcode;
-        u32 ngroups;
-        u32 groups[0];
-};
-
-struct journal_suffix {
-	unsigned long prevrec;  /* offset of previous record for dentry */
-	int recno;
-	int time;
-	int len;
-};
-
-#endif
diff -Nru a/fs/intermezzo/intermezzo_kml.h b/fs/intermezzo/intermezzo_kml.h
--- a/fs/intermezzo/intermezzo_kml.h	Sun May 16 01:18:37 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,260 +0,0 @@
-#ifndef __INTERMEZZO_KML_H
-#define __INTERMEZZO_KML_H
-
-#include "intermezzo_psdev.h"
-#include <linux/fs.h>
-#include "intermezzo_journal.h"
-
-#define PRESTO_KML_MAJOR_VERSION 0x00010000
-#define PRESTO_KML_MINOR_VERSION 0x00002001
-#define PRESTO_OP_NOOP          0
-#define PRESTO_OP_CREATE        1
-#define PRESTO_OP_MKDIR         2
-#define PRESTO_OP_UNLINK        3
-#define PRESTO_OP_RMDIR         4
-#define PRESTO_OP_CLOSE         5
-#define PRESTO_OP_SYMLINK       6
-#define PRESTO_OP_RENAME        7
-#define PRESTO_OP_SETATTR       8
-#define PRESTO_OP_LINK          9
-#define PRESTO_OP_OPEN          10
-#define PRESTO_OP_MKNOD         11
-#define PRESTO_OP_WRITE         12
-#define PRESTO_OP_RELEASE       13
-#define PRESTO_OP_TRUNC         14
-#define PRESTO_OP_SETEXTATTR    15
-#define PRESTO_OP_DELEXTATTR    16
-
-#define PRESTO_LML_DONE     	1 /* flag to get first write to do LML */
-#define KML_KOP_MARK            0xffff
-
-struct presto_lml_data {
-        loff_t   rec_offset;
-};
-
-struct big_journal_prefix {
-        u32 len;
-        u32 version; 
-        u32 pid;
-        u32 uid;
-        u32 fsuid;
-        u32 fsgid;
-        u32 opcode;
-        u32 ngroups;
-        u32 groups[NGROUPS_SMALL];
-};
-
-enum kml_opcode {
-        KML_CREATE = 1,
-        KML_MKDIR,
-        KML_UNLINK,
-        KML_RMDIR,
-        KML_CLOSE,
-        KML_SYMLINK,
-        KML_RENAME,
-        KML_SETATTR,
-        KML_LINK,
-        KML_OPEN,
-        KML_MKNOD,
-        KML_ENDMARK = 0xff
-};
-
-struct kml_create {
-	char 			*path;
-	struct presto_version 	new_objectv, 
-				old_parentv, 
-				new_parentv;
-	int 			mode;
-	int 			uid;
-	int 			gid;
-};
-
-struct kml_open {
-};
-
-struct kml_mkdir {
-	char 			*path;
-	struct presto_version 	new_objectv, 
-				old_parentv, 
-				new_parentv;
-	int 			mode;
-	int 			uid;
-	int 			gid;
-};
-
-struct kml_unlink {
-	char 			*path, 	
-				*name;
-	struct presto_version 	old_tgtv, 
-				old_parentv, 
-				new_parentv;
-};
-
-struct kml_rmdir {
-	char 			*path, 
-				*name;
-	struct presto_version 	old_tgtv, 
-				old_parentv, 
-				new_parentv;
-};
-
-struct kml_close {
-	int 			open_mode, 
-				open_uid, 
-				open_gid;
-	char 			*path;
-	struct presto_version 	new_objectv;
-	__u64 			ino;
-      	int 			generation;
-};
-
-struct kml_symlink {
-	char 			*sourcepath, 	
-				*targetpath;
-	struct presto_version 	new_objectv, 
-				old_parentv, 
-				new_parentv;
-      	int 			uid;
-	int 			gid;
-};
-
-struct kml_rename {
-	char 			*sourcepath, 
-				*targetpath;
-	struct presto_version 	old_objectv, 
-				new_objectv, 
-				old_tgtv, 
-				new_tgtv;
-};
-
-struct kml_setattr {
-	char 			*path;
-	struct presto_version 	old_objectv;
-	struct iattr 		iattr;
-};
-
-struct kml_link {
-	char 			*sourcepath, 	
-				*targetpath;
-	struct presto_version 	new_objectv, 
-				old_parentv, 
-				new_parentv;
-};
-
-struct kml_mknod {
-	char 			*path;
-	struct presto_version 	new_objectv, 
-				old_parentv, 
-				new_parentv;
-	int 			mode;
-      	int 			uid;
-	int 			gid;
-       	int 			major;
-	int 			minor;
-};
-
-/* kml record items for optimizing */
-struct kml_kop_node
-{
-        u32             kml_recno;
-        u32             kml_flag;
-        u32             kml_op;
-        nlink_t         i_nlink;
-        u32             i_ino;
-};
-
-struct kml_kop_lnode
-{
-        struct list_head chains;
-        struct kml_kop_node node;
-};
-
-struct kml_endmark {
-	u32			total;
-	struct kml_kop_node 	*kop;
-};
-
-/* kml_flag */
-#define  KML_REC_DELETE               1
-#define  KML_REC_EXIST                0
-
-struct kml_optimize {
-	struct list_head kml_chains;
-        u32              kml_flag;
-        u32              kml_op;
-        nlink_t          i_nlink;
-        u32              i_ino;
-};
-
-struct kml_rec {
-	/* attribute of this record */
-	int 				rec_size;
-        int     			rec_kml_offset;
-
-	struct 	big_journal_prefix 	rec_head;
-	union {
-		struct kml_create 	create;
-		struct kml_open 	open;
-		struct kml_mkdir 	mkdir;
-		struct kml_unlink 	unlink;
-		struct kml_rmdir 	rmdir;
-		struct kml_close 	close;
-		struct kml_symlink 	symlink;
-		struct kml_rename 	rename;
-		struct kml_setattr 	setattr;
-		struct kml_mknod 	mknod;
-		struct kml_link 	link;
-		struct kml_endmark      endmark;
-	} rec_kml;
-        struct 	journal_suffix 		rec_tail;
-
-        /* for kml optimize only */
-        struct  kml_optimize kml_optimize;
-};
-
-/* kml record items for optimizing */
-extern void kml_kop_init (struct presto_file_set *fset);
-extern void kml_kop_addrec (struct presto_file_set *fset, 
-		struct inode *ino, u32 op, u32 flag);
-extern int  kml_kop_flush (struct presto_file_set *fset);
-
-/* defined in kml_setup.c */
-extern int kml_init (struct presto_file_set *fset);
-extern int kml_cleanup (struct presto_file_set *fset);
-
-/* defined in kml.c */
-extern int begin_kml_reint (struct file *file, unsigned long arg);
-extern int do_kml_reint (struct file *file, unsigned long arg);
-extern int end_kml_reint (struct file *file, unsigned long arg);
-
-/* kml_utils.c */
-extern char *dlogit (void *tbuf, const void *sbuf, int size);
-extern char * bdup_printf (char *format, ...);
-
-/* defined in kml_decode.c */
-/* printop */
-#define  PRINT_KML_PREFIX             0x1
-#define  PRINT_KML_SUFFIX             0x2
-#define  PRINT_KML_REC                0x4
-#define  PRINT_KML_OPTIMIZE           0x8
-#define  PRINT_KML_EXIST              0x10
-#define  PRINT_KML_DELETE             0x20
-extern void   kml_printrec (struct kml_rec *rec, int printop);
-extern int    print_allkmlrec (struct list_head *head, int printop);
-extern int    delete_kmlrec (struct list_head *head);
-extern int    kml_decoderec (char *buf, int pos, int buflen, int *size,
-	                     struct kml_rec **newrec);
-extern int decode_kmlrec (struct list_head *head, char *kml_buf, int buflen);
-extern void kml_freerec (struct kml_rec *rec);
-
-/* defined in kml_reint.c */
-#define KML_CLOSE_BACKFETCH            1
-extern int kml_reintbuf (struct  kml_fsdata *kml_fsdata,
-                  	char *mtpt, struct kml_rec **rec);
-
-/* defined in kml_setup.c */
-extern int kml_init (struct presto_file_set *fset);
-extern int kml_cleanup (struct presto_file_set *fset);
-
-#endif
-
diff -Nru a/fs/intermezzo/intermezzo_lib.h b/fs/intermezzo/intermezzo_lib.h
--- a/fs/intermezzo/intermezzo_lib.h	Sun May 16 01:18:34 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,162 +0,0 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
- * Copyright (C) 2001 Cluster File Systems, Inc. <braam@clusterfs.com>
- *
- *   This file is part of InterMezzo, http://www.inter-mezzo.org.
- *
- *   InterMezzo is free software; you can redistribute it and/or
- *   modify it under the terms of version 2 of the GNU General Public
- *   License as published by the Free Software Foundation.
- *
- *   InterMezzo is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with InterMezzo; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * Data structures unpacking/packing macros & inlines
- *
- */
-
-#ifndef _INTERMEZZO_LIB_H
-#define _INTERMEZZO_LIB_H
-
-#ifdef __KERNEL__
-# include <linux/types.h>
-#else
-# include <string.h>
-# include <sys/types.h>
-#endif
-
-static inline int size_round (int val)
-{
-	return (val + 3) & (~0x3);
-}
-
-static inline int size_round0(int val)
-{
-        if (!val) 
-                return 0;
-	return (val + 1 + 3) & (~0x3);
-}
-
-static inline size_t round_strlen(char *fset)
-{
-	return size_round(strlen(fset) + 1);
-}
-
-#ifdef __KERNEL__
-# define NTOH__u32(var) le32_to_cpu(var)
-# define NTOH__u64(var) le64_to_cpu(var)
-# define HTON__u32(var) cpu_to_le32(var)
-# define HTON__u64(var) cpu_to_le64(var)
-#else
-# include <glib.h>
-# define NTOH__u32(var) GUINT32_FROM_LE(var)
-# define NTOH__u64(var) GUINT64_FROM_LE(var)
-# define HTON__u32(var) GUINT32_TO_LE(var)
-# define HTON__u64(var) GUINT64_TO_LE(var)
-#endif
-
-/* 
- * copy sizeof(type) bytes from pointer to var and move ptr forward.
- * return EFAULT if pointer goes beyond end
- */
-#define UNLOGV(var,type,ptr,end)                \
-do {                                            \
-        var = *(type *)ptr;                     \
-        ptr += sizeof(type);                    \
-        if (ptr > end )                         \
-                return -EFAULT;                 \
-} while (0)
-
-/* the following two macros convert to little endian */
-/* type MUST be __u32 or __u64 */
-#define LUNLOGV(var,type,ptr,end)               \
-do {                                            \
-        var = NTOH##type(*(type *)ptr);         \
-        ptr += sizeof(type);                    \
-        if (ptr > end )                         \
-                return -EFAULT;                 \
-} while (0)
-
-/* now log values */
-#define LOGV(var,type,ptr)                      \
-do {                                            \
-        *((type *)ptr) = var;                   \
-        ptr += sizeof(type);                    \
-} while (0)
-
-/* and in network order */
-#define LLOGV(var,type,ptr)                     \
-do {                                            \
-        *((type *)ptr) = HTON##type(var);       \
-        ptr += sizeof(type);                    \
-} while (0)
-
-
-/* 
- * set var to point at (type *)ptr, move ptr forward with sizeof(type)
- * return from function with EFAULT if ptr goes beyond end
- */
-#define UNLOGP(var,type,ptr,end)                \
-do {                                            \
-        var = (type *)ptr;                      \
-        ptr += sizeof(type);                    \
-        if (ptr > end )                         \
-                return -EFAULT;                 \
-} while (0)
-
-#define LOGP(var,type,ptr)                      \
-do {                                            \
-        memcpy(ptr, var, sizeof(type));         \
-        ptr += sizeof(type);                    \
-} while (0)
-
-/* 
- * set var to point at (char *)ptr, move ptr forward by size_round(len);
- * return from function with EFAULT if ptr goes beyond end
- */
-#define UNLOGL(var,type,len,ptr,end)                    \
-do {                                                    \
-        if (len == 0)                                   \
-                var = (type *)0;                        \
-        else {                                          \
-                var = (type *)ptr;                      \
-                ptr += size_round(len * sizeof(type));  \
-        }                                               \
-        if (ptr > end )                                 \
-                return -EFAULT;                         \
-} while (0)
-
-#define UNLOGL0(var,type,len,ptr,end)                           \
-do {                                                            \
-        UNLOGL(var,type,len+1,ptr,end);                         \
-        if ( *((char *)ptr - size_round(len+1) + len) != '\0')  \
-                        return -EFAULT;                         \
-} while (0)
-
-#define LOGL(var,len,ptr)                               \
-do {                                                    \
-        size_t __fill = size_round(len);                \
-        /* Prevent data leakage. */                     \
-        if (__fill > 0)                                 \
-                memset((char *)ptr, 0, __fill);         \
-        memcpy((char *)ptr, (const char *)var, len);    \
-        ptr += __fill;                                  \
-} while (0)
-
-#define LOGL0(var,len,ptr)                              \
-do {                                                    \
-        if (!len) break;                                \
-        memcpy((char *)ptr, (const char *)var, len);    \
-        *((char *)(ptr) + len) = 0;                     \
-        ptr += size_round(len + 1);                     \
-} while (0)
-
-#endif /* _INTERMEZZO_LIB_H */
-
diff -Nru a/fs/intermezzo/intermezzo_psdev.h b/fs/intermezzo/intermezzo_psdev.h
--- a/fs/intermezzo/intermezzo_psdev.h	Sun May 16 01:18:35 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,55 +0,0 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- */
-
-#ifndef __PRESTO_PSDEV_H
-#define __PRESTO_PSDEV_H
-
-#define MAX_CHANNEL 16
-#define PROCNAME_SIZE 32
-#include <linux/smp_lock.h>
-
-/* represents state of an instance reached with /dev/intermezzo */
-/* communication pending & processing queues */
-struct upc_channel {
-        unsigned int         uc_seq;
-        wait_queue_head_t    uc_waitq;    /* Lento wait queue */
-        struct list_head     uc_pending;
-        struct list_head     uc_processing;
-        spinlock_t            uc_lock;
-        int                  uc_pid;      /* Lento's pid */
-        int                  uc_hard;     /* allows signals during upcalls */
-        int                  uc_no_filter;
-        int                  uc_no_journal;
-        int                  uc_no_upcall;
-        int                  uc_timeout;  /* . sec: signals will dequeue upc */
-        long                 uc_errorval; /* for testing I/O failures */
-        struct list_head     uc_cache_list;
-        int                  uc_minor;
-};
-
-#define ISLENTO(minor) (current->pid == izo_channels[minor].uc_pid \
-                || current->real_parent->pid == izo_channels[minor].uc_pid \
-                || current->real_parent->real_parent->pid == izo_channels[minor].uc_pid)
-
-extern struct upc_channel izo_channels[MAX_CHANNEL];
-
-/* message types between presto filesystem in kernel */
-#define REQ_READ   1
-#define REQ_WRITE  2
-#define REQ_ASYNC  4
-#define REQ_DEAD   8
-
-struct upc_req {
-        struct list_head   rq_chain;
-        caddr_t            rq_data;
-        int                rq_flags;
-        int                rq_bufsize;
-        int                rq_rep_size;
-        int                rq_opcode;  /* copied from data to save lookup */
-        int                rq_unique;
-        wait_queue_head_t  rq_sleep;   /* process' wait queue */
-        unsigned long      rq_posttime;
-};
-
-#endif
diff -Nru a/fs/intermezzo/intermezzo_upcall.h b/fs/intermezzo/intermezzo_upcall.h
--- a/fs/intermezzo/intermezzo_upcall.h	Sun May 16 01:18:34 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,146 +0,0 @@
-/*
- * Based on cfs.h from Coda, but revamped for increased simplicity.
- * Linux modifications by Peter Braam, Aug 1996
- * Rewritten for InterMezzo
- */
-
-#ifndef _PRESTO_HEADER_
-#define _PRESTO_HEADER_
-
-
-/* upcall.c */
-#define SYNCHRONOUS 0
-#define ASYNCHRONOUS 1
-
-int lento_permit(int minor, int pathlen, int fsetnamelen, char *path, char *fset);
-int lento_opendir(int minor, int pathlen, char *path, int async);
-int lento_kml(int minor, unsigned int offset, unsigned int first_recno,
-              unsigned int length, unsigned int last_recno, int namelen,
-              char *fsetname);
-int lento_open(int minor, int pathlen, char *path);
-int lento_journal(int minor, char *page, int async);
-int lento_release_permit(int minor, int cookie);
-
-/*
- * Kernel <--> Lento communications.
- */
-/* upcalls */
-#define LENTO_PERMIT    1
-#define LENTO_JOURNAL   2
-#define LENTO_OPENDIR   3
-#define LENTO_OPEN      4
-#define LENTO_SIGNAL    5
-#define LENTO_KML       6
-#define LENTO_COOKIE    7
-
-/*         Lento <-> Presto  RPC arguments       */
-struct lento_up_hdr {
-        unsigned int opcode;
-        unsigned int unique;    /* Keep multiple outstanding msgs distinct */
-        u_short pid;            /* Common to all */
-        u_short uid;
-};
-
-/* This structure _must_ sit at the beginning of the buffer */
-struct lento_down_hdr {
-        unsigned int opcode;
-        unsigned int unique;    
-        unsigned int result;
-};
-
-/* lento_permit: */
-struct lento_permit_in {
-        struct lento_up_hdr uh;
-        int pathlen;
-        int fsetnamelen;
-        char path[0];
-};
-struct lento_permit_out {
-        struct lento_down_hdr dh;
-};
-
-
-/* lento_opendir: */
-struct lento_opendir_in {
-        struct lento_up_hdr uh;
-        int async;
-        int pathlen;
-        char path[0];
-};
-struct lento_opendir_out {
-        struct lento_down_hdr dh;
-};
-
-
-/* lento_kml: */
-struct lento_kml_in {
-        struct lento_up_hdr uh;
-        unsigned int offset;
-        unsigned int first_recno;
-        unsigned int length;
-        unsigned int last_recno;
-        int namelen;
-        char fsetname[0];
-};
-
-struct lento_kml_out {
-        struct lento_down_hdr dh;
-};
-
-
-/* lento_open: */
-struct lento_open_in {
-        struct lento_up_hdr uh;
-        int pathlen;
-        char path[0];
-};
-struct lento_open_out {
-    struct lento_down_hdr dh;
-};
-
-/* lento_response_cookie */
-struct lento_response_cookie_in {
-        struct lento_up_hdr uh;
-        int cookie;
-};
-
-struct lento_response_cookie_out {
-    struct lento_down_hdr dh;
-};
-
-
-struct lento_mknod {
-  struct lento_down_hdr dh;
-  int    major;
-  int    minor;
-  int    mode;
-  char   path[0];
-};
-
-
-/* NB: every struct below begins with an up_hdr */
-union up_args {
-    struct lento_up_hdr uh;             
-    struct lento_permit_in lento_permit;
-    struct lento_open_in lento_open;
-    struct lento_opendir_in lento_opendir;
-    struct lento_kml_in lento_kml;
-    struct lento_response_cookie_in lento_response_cookie;
-};
-
-union down_args {
-    struct lento_down_hdr dh;
-    struct lento_permit_out lento_permit;
-    struct lento_open_out lento_open;
-    struct lento_opendir_out lento_opendir;
-    struct lento_kml_out lento_kml;
-    struct lento_response_cookie_out lento_response_cookie;
-};    
-
-#include "intermezzo_psdev.h"
-
-int lento_upcall(int minor, int read_size, int *rep_size, 
-                 union up_args *buffer, int async,
-                 struct upc_req *rq );
-#endif 
-
diff -Nru a/fs/intermezzo/journal.c b/fs/intermezzo/journal.c
--- a/fs/intermezzo/journal.c	Sun May 16 01:18:33 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,2452 +0,0 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
- *  Copyright (C) 1998 Peter J. Braam
- *  Copyright (C) 2001 Cluster File Systems, Inc. 
- *  Copyright (C) 2001 Tacit Networks, Inc. <phil@off.net>
- *
- *  Support for journalling extended attributes
- *  Copyright (C) 2001 Shirish H. Phatak, Tacit Networks, Inc.
- * 
- *   This file is part of InterMezzo, http://www.inter-mezzo.org.
- *
- *   InterMezzo is free software; you can redistribute it and/or
- *   modify it under the terms of version 2 of the GNU General Public
- *   License as published by the Free Software Foundation.
- *
- *   InterMezzo is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with InterMezzo; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include <linux/types.h>
-#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/fs.h>
-#include <linux/namei.h>
-#include <linux/slab.h>
-#include <linux/vmalloc.h>
-#include <linux/time.h>
-#include <linux/errno.h>
-#include <asm/segment.h>
-#include <asm/uaccess.h>
-#include <linux/string.h>
-
-#include "intermezzo_fs.h"
-#include "intermezzo_psdev.h"
-
-struct presto_reservation_data {
-        unsigned int ri_recno;
-        loff_t ri_offset;
-        loff_t ri_size;
-        struct list_head ri_list;
-};
-
-/* 
- *  Locking Semantics
- * 
- * write lock in struct presto_log_fd: 
- *  - name: fd_lock
- *  - required for: accessing any field in a presto_log_fd 
- *  - may not be held across I/O
- *  - 
- *  
- */
-
-/*
- *  reserve record space and/or atomically request state of the log
- *  rec will hold the location reserved record upon return
- *  this reservation will be placed in the queue
- */ 
-static void presto_reserve_record(struct presto_file_set *fset, 
-                           struct presto_log_fd *fd, 
-                           struct rec_info *rec,
-                           struct presto_reservation_data *rd)
-{
-        int chunked_record = 0; 
-        ENTRY;
-        
-        write_lock(&fd->fd_lock);
-        if ( rec->is_kml ) { 
-                int chunk = 1 << fset->fset_chunkbits;
-                int chunk_mask = ~(chunk -1); 
-                loff_t boundary; 
-
-                boundary =  (fd->fd_offset + chunk - 1) & chunk_mask;
-                if ( fd->fd_offset + rec->size >= boundary ) {
-                        chunked_record = 1;
-                        fd->fd_offset = boundary; 
-                }
-        }
-
-        fd->fd_recno++;
-        
-        /* this moves the fd_offset back after truncation */ 
-        if ( list_empty(&fd->fd_reservations) && 
-             !chunked_record) { 
-                fd->fd_offset = fd->fd_file->f_dentry->d_inode->i_size;
-        }
-
-        rec->offset = fd->fd_offset;
-        if (rec->is_kml)
-                rec->offset += fset->fset_kml_logical_off;
-
-        rec->recno = fd->fd_recno;
-
-        /* add the reservation data to the end of the list */
-        rd->ri_offset = fd->fd_offset;
-        rd->ri_size = rec->size;
-        rd->ri_recno = rec->recno; 
-        list_add(&rd->ri_list, fd->fd_reservations.prev);
-
-        fd->fd_offset += rec->size;
-
-        write_unlock(&fd->fd_lock); 
-
-        EXIT;
-}
-
-static inline void presto_release_record(struct presto_log_fd *fd,
-                                         struct presto_reservation_data *rd)
-{
-        write_lock(&fd->fd_lock);
-        list_del(&rd->ri_list);
-        write_unlock(&fd->fd_lock);
-}
-
-/* XXX should we ask for do_truncate to be exported? */
-int izo_do_truncate(struct presto_file_set *fset, struct dentry *dentry,
-                    loff_t length,  loff_t size_check)
-{
-        struct inode *inode = dentry->d_inode;
-        int error;
-        struct iattr newattrs;
-
-        ENTRY;
-
-        if (length < 0) {
-                EXIT;
-                return -EINVAL;
-        }
-
-        down(&inode->i_sem);
-        lock_kernel();
-        
-        if (size_check != inode->i_size) { 
-                unlock_kernel();
-                up(&inode->i_sem);
-                EXIT;
-                return -EALREADY; 
-        }
-
-        newattrs.ia_size = length;
-        newattrs.ia_valid = ATTR_SIZE | ATTR_CTIME;
-
-        if (inode->i_op && inode->i_op->setattr)
-                error = inode->i_op->setattr(dentry, &newattrs);
-        else {
-                inode_setattr(dentry->d_inode, &newattrs);
-                error = 0;
-        }
-
-        unlock_kernel();
-        up(&inode->i_sem);
-        EXIT;
-        return error;
-}
-
-static void presto_kml_truncate(struct presto_file_set *fset)
-{
-        int rc;
-        ENTRY;
-
-        write_lock(&fset->fset_kml.fd_lock);
-        if (fset->fset_kml.fd_truncating == 1 ) {
-                write_unlock(&fset->fset_kml.fd_lock);
-                EXIT;
-                return;
-        }
-
-        fset->fset_kml.fd_truncating = 1;
-        write_unlock(&fset->fset_kml.fd_lock);
-
-        CERROR("islento: %d, count: %d\n",
-               ISLENTO(presto_i2m(fset->fset_dentry->d_inode)),
-               fset->fset_permit_count);
-
-        rc = izo_upc_kml_truncate(fset->fset_cache->cache_psdev->uc_minor,
-                                fset->fset_lento_off, fset->fset_lento_recno,
-                                fset->fset_name);
-
-        /* Userspace is the only permitholder now, and will retain an exclusive
-         * hold on the permit until KML truncation completes. */
-        /* FIXME: double check this code path now that the precise semantics of
-         * fset->fset_permit_count have changed. */
-
-        if (rc != 0) {
-                write_lock(&fset->fset_kml.fd_lock);
-                fset->fset_kml.fd_truncating = 0;
-                write_unlock(&fset->fset_kml.fd_lock);
-        }
-
-        EXIT;
-}
-
-void *presto_trans_start(struct presto_file_set *fset, struct inode *inode,
-                         int op)
-{
-        ENTRY;
-        if ( !fset->fset_cache->cache_filter->o_trops ) {
-                EXIT;
-                return NULL;
-        }
-        EXIT;
-        return fset->fset_cache->cache_filter->o_trops->tr_start
-                (fset, inode, op);
-}
-
-void presto_trans_commit(struct presto_file_set *fset, void *handle)
-{
-        ENTRY;
-        if (!fset->fset_cache->cache_filter->o_trops ) {
-                EXIT;
-                return;
-        }
-
-        fset->fset_cache->cache_filter->o_trops->tr_commit(fset, handle);
-
-        /* Check to see if the KML needs truncated. */
-        if (fset->kml_truncate_size > 0 &&
-            !fset->fset_kml.fd_truncating &&
-            fset->fset_kml.fd_offset > fset->kml_truncate_size) {
-                CDEBUG(D_JOURNAL, "kml size: %lu; truncating\n",
-                       (unsigned long)fset->fset_kml.fd_offset);
-                presto_kml_truncate(fset);
-        }
-        EXIT;
-}
-
-inline int presto_no_journal(struct presto_file_set *fset)
-{
-        int minor = fset->fset_cache->cache_psdev->uc_minor;
-        return izo_channels[minor].uc_no_journal;
-}
-
-#define size_round(x)  (((x)+3) & ~0x3)
-
-#define BUFF_FREE(buf) PRESTO_FREE(buf, PAGE_SIZE)
-#define BUFF_ALLOC(newbuf, oldbuf)              \
-        PRESTO_ALLOC(newbuf, PAGE_SIZE);        \
-        if ( !newbuf ) {                        \
-                if (oldbuf)                     \
-                        BUFF_FREE(oldbuf);      \
-                return -ENOMEM;                 \
-        }
-
-/*
- * "buflen" should be PAGE_SIZE or more.
- * Give relative path wrt to a fsetroot
- */
-char * presto_path(struct dentry *dentry, struct dentry *root,
-                   char *buffer, int buflen)
-{
-        char * end = buffer+buflen;
-        char * retval;
-
-        *--end = '\0';
-        buflen--;
-        if (dentry->d_parent != dentry && d_unhashed(dentry)) {
-                buflen -= 10;
-                end -= 10;
-                memcpy(end, " (deleted)", 10);
-        }
-
-        /* Get '/' right */
-        retval = end-1;
-        *retval = '/';
-
-        for (;;) {
-                struct dentry * parent;
-                int namelen;
-
-                if (dentry == root)
-                        break;
-                parent = dentry->d_parent;
-                if (dentry == parent)
-                        break;
-                namelen = dentry->d_name.len;
-                buflen -= namelen + 1;
-                if (buflen < 0)
-                        break;
-                end -= namelen;
-                memcpy(end, dentry->d_name.name, namelen);
-                *--end = '/';
-                retval = end;
-                dentry = parent;
-        }
-        return retval;
-}
-
-static inline char *logit(char *buf, const void *value, int size)
-{
-        char *ptr = (char *)value;
-
-        memcpy(buf, ptr, size);
-        buf += size;
-        return buf;
-}
-
-
-static inline char *
-journal_log_prefix_with_groups_and_ids(char *buf, int opcode, 
-                                       struct rec_info *rec,
-                                       __u32 ngroups, gid_t *groups,
-                                       __u32 fsuid, __u32 fsgid)
-{
-        struct kml_prefix_hdr p;
-        u32 loggroups[NGROUPS_SMALL];
-
-        int i; 
-
-        p.len = cpu_to_le32(rec->size);
-        p.version = KML_MAJOR_VERSION | KML_MINOR_VERSION;
-        p.pid = cpu_to_le32(current->pid);
-        p.auid = cpu_to_le32(current->uid);
-        p.fsuid = cpu_to_le32(fsuid);
-        p.fsgid = cpu_to_le32(fsgid);
-        p.ngroups = cpu_to_le32(ngroups);
-        p.opcode = cpu_to_le32(opcode);
-        for (i=0 ; i < ngroups ; i++)
-                loggroups[i] = cpu_to_le32((__u32) groups[i]);
-
-        buf = logit(buf, &p, sizeof(struct kml_prefix_hdr));
-        buf = logit(buf, &loggroups, sizeof(__u32) * ngroups);
-        return buf;
-}
-
-static inline char *
-journal_log_prefix(char *buf, int opcode, struct rec_info *rec)
-{
-        __u32 groups[NGROUPS_SMALL]; 
-        int i; 
-
-        /* convert 16 bit gid's to 32 bit gid's */
-        for (i=0; i<current->group_info->ngroups; i++) 
-                groups[i] = GROUP_AT(current->group_info,i);
-        
-        return journal_log_prefix_with_groups_and_ids(buf, opcode, rec,
-                                                      (__u32)current->group_info->ngroups,
-                                                      groups,
-                                                      (__u32)current->fsuid,
-                                                      (__u32)current->fsgid);
-}
-
-static inline char *
-journal_log_prefix_with_groups(char *buf, int opcode, struct rec_info *rec, 
-                               __u32 ngroups, gid_t *groups)
-{
-        return journal_log_prefix_with_groups_and_ids(buf, opcode, rec,
-                                                      ngroups, groups,
-                                                      (__u32)current->fsuid,
-                                                      (__u32)current->fsgid);
-}
-
-static inline char *log_dentry_version(char *buf, struct dentry *dentry)
-{
-        struct presto_version version;
-
-        presto_getversion(&version, dentry->d_inode);
-        
-        version.pv_mtime_sec = HTON__u32(version.pv_mtime_sec);
-        version.pv_ctime_sec = HTON__u32(version.pv_ctime_sec);
-        version.pv_mtime_nsec = HTON__u32(version.pv_mtime_nsec);
-        version.pv_ctime_nsec = HTON__u32(version.pv_ctime_nsec);
-        version.pv_size = HTON__u64(version.pv_size);
-
-        return logit(buf, &version, sizeof(version));
-}
-
-static inline char *log_version(char *buf, struct presto_version *pv)
-{
-        struct presto_version version;
-
-        memcpy(&version, pv, sizeof(version));
-        
-        version.pv_mtime_sec = HTON__u32(version.pv_mtime_sec);
-        version.pv_mtime_nsec = HTON__u32(version.pv_mtime_nsec);
-        version.pv_ctime_sec = HTON__u32(version.pv_ctime_sec);
-        version.pv_ctime_nsec = HTON__u32(version.pv_ctime_nsec);
-        version.pv_size = HTON__u64(version.pv_size);
-
-        return logit(buf, &version, sizeof(version));
-}
-
-static inline char *log_rollback(char *buf, struct izo_rollback_data *rb)
-{
-        struct izo_rollback_data rollback;
-        
-        rollback.rb_mode = HTON__u32(rb->rb_mode);
-        rollback.rb_rdev = HTON__u32(rb->rb_rdev);
-        rollback.rb_uid = HTON__u64(rb->rb_uid);
-        rollback.rb_gid = HTON__u64(rb->rb_gid);
-
-        return logit(buf, &rollback, sizeof(rollback));
-}
-
-static inline char *journal_log_suffix(char *buf, char *log,
-                                       struct presto_file_set *fset,
-                                       struct dentry *dentry,
-                                       struct rec_info *rec)
-{
-        struct kml_suffix s;
-        struct kml_prefix_hdr *p = (struct kml_prefix_hdr *)log;
-
-#if 0
-        /* XXX needs to be done after reservation, 
-           disable ths until version 1.2 */
-        if ( dentry ) { 
-                s.prevrec = cpu_to_le32(rec->offset - 
-                                        presto_d2d(dentry)->dd_kml_offset);
-                presto_d2d(dentry)->dd_kml_offset = rec->offset;
-        } else { 
-                s.prevrec = -1;
-        }
-#endif
-        s.prevrec = 0; 
-
-        /* record number needs to be filled in after reservation 
-           s.recno = cpu_to_le32(rec->recno); */ 
-        s.time = cpu_to_le32(get_seconds());
-        s.len = p->len;
-        return logit(buf, &s, sizeof(s));
-}
-
-int izo_log_close(struct presto_log_fd *logfd)
-{
-        int rc = 0;
-
-        if (logfd->fd_file) {
-                rc = filp_close(logfd->fd_file, 0);
-                logfd->fd_file = NULL;
-        } else
-                CERROR("InterMezzo: %s: no filp\n", __FUNCTION__);
-        if (rc != 0)
-                CERROR("InterMezzo: close files: filp won't close: %d\n", rc);
-
-        return rc;
-}
-
-int presto_fwrite(struct file *file, const char *str, int len, loff_t *off)
-{
-        int rc;
-        mm_segment_t old_fs;
-        ENTRY;
-
-        rc = -EINVAL;
-        if ( !off ) {
-                EXIT;
-                return rc;
-        }
-
-        if ( ! file ) {
-                EXIT;
-                return rc;
-        }
-
-        if ( ! file->f_op ) {
-                EXIT;
-                return rc;
-        }
-
-        if ( ! file->f_op->write ) {
-                EXIT;
-                return rc;
-        }
-
-        old_fs = get_fs();
-        set_fs(get_ds());
-        rc = file->f_op->write(file, str, len, off);
-        if (rc != len) {
-                CERROR("presto_fwrite: wrote %d bytes instead of "
-                       "%d at %ld\n", rc, len, (long)*off);
-                rc = -EIO; 
-        }
-        set_fs(old_fs);
-        EXIT;
-        return rc;
-}
-
-int presto_fread(struct file *file, char *str, int len, loff_t *off)
-{
-        int rc;
-        mm_segment_t old_fs;
-        ENTRY;
-
-        if (len > 512)
-                CERROR("presto_fread: read at %Ld for %d bytes, ino %ld\n",
-                       *off, len, file->f_dentry->d_inode->i_ino); 
-
-        rc = -EINVAL;
-        if ( !off ) {
-                EXIT;
-                return rc;
-        }
-
-        if ( ! file ) {
-                EXIT;
-                return rc;
-        }
-
-        if ( ! file->f_op ) {
-                EXIT;
-                return rc;
-        }
-
-        if ( ! file->f_op->read ) {
-                EXIT;
-                return rc;
-        }
-
-        old_fs = get_fs();
-        set_fs(get_ds());
-        rc = file->f_op->read(file, str, len, off);
-        if (rc != len) {
-                CDEBUG(D_FILE, "presto_fread: read %d bytes instead of "
-                       "%d at %Ld\n", rc, len, *off);
-                rc = -EIO; 
-        }
-        set_fs(old_fs);
-        EXIT;
-        return rc;
-}
-
-loff_t presto_kml_offset(struct presto_file_set *fset)
-{
-        unsigned int kml_recno;
-        struct presto_log_fd *fd = &fset->fset_kml;
-        loff_t  offset;
-        ENTRY;
-
-        write_lock(&fd->fd_lock); 
-
-        /* Determine the largest valid offset, i.e. up until the first
-         * reservation held on the file. */
-        if ( !list_empty(&fd->fd_reservations) ) {
-                struct presto_reservation_data *rd;
-                rd = list_entry(fd->fd_reservations.next, 
-                                struct presto_reservation_data, 
-                                ri_list);
-                offset = rd->ri_offset;
-                kml_recno = rd->ri_recno;
-        } else {
-                offset = fd->fd_file->f_dentry->d_inode->i_size;
-                kml_recno = fset->fset_kml.fd_recno; 
-        }
-        write_unlock(&fd->fd_lock); 
-        return offset; 
-}
-
-static int presto_kml_dispatch(struct presto_file_set *fset)
-{
-        int rc = 0;
-        unsigned int kml_recno;
-        struct presto_log_fd *fd = &fset->fset_kml;
-        loff_t offset;
-        ENTRY;
-
-        write_lock(&fd->fd_lock); 
-
-        /* Determine the largest valid offset, i.e. up until the first
-         * reservation held on the file. */
-        if ( !list_empty(&fd->fd_reservations) ) {
-                struct presto_reservation_data *rd;
-                rd = list_entry(fd->fd_reservations.next, 
-                                struct presto_reservation_data, 
-                                ri_list);
-                offset = rd->ri_offset;
-                kml_recno = rd->ri_recno;
-        } else {
-                offset = fd->fd_file->f_dentry->d_inode->i_size;
-                kml_recno = fset->fset_kml.fd_recno; 
-        }
-
-        if ( kml_recno < fset->fset_lento_recno ) {
-                CERROR("presto_kml_dispatch: smoke is coming\n"); 
-                write_unlock(&fd->fd_lock);
-                EXIT;
-                return 0; 
-        } else if ( kml_recno == fset->fset_lento_recno ) {
-                write_unlock(&fd->fd_lock);
-                EXIT;
-                return 0; 
-                /* XXX add a further "if" here to delay the KML upcall */ 
-#if 0
-        } else if ( kml_recno < fset->fset_lento_recno + 100) {
-                write_unlock(&fd->fd_lock);
-                EXIT;
-                return 0;
-#endif
-        }
-        CDEBUG(D_PIOCTL, "fset: %s\n", fset->fset_name);
-
-        rc = izo_upc_kml(fset->fset_cache->cache_psdev->uc_minor,
-                       fset->fset_lento_off, fset->fset_lento_recno,
-                       offset + fset->fset_kml_logical_off, kml_recno,
-                       fset->fset_name);
-
-        if ( rc ) {
-                write_unlock(&fd->fd_lock);
-                EXIT;
-                return rc;
-        }
-
-        fset->fset_lento_off = offset;
-        fset->fset_lento_recno = kml_recno; 
-        write_unlock(&fd->fd_lock);
-        EXIT;
-        return 0;
-}
-
-int izo_lookup_file(struct presto_file_set *fset, char *path,
-                    struct nameidata *nd)
-{
-        int error = 0;
-
-        CDEBUG(D_CACHE, "looking up: %s\n", path);
-
-        error = path_lookup(path, LOOKUP_PARENT, nd);
-        if (error) {
-                EXIT;
-                return error;
-        }
-
-        return 0;
-}
-
-/* FIXME: this function is a mess of locking and error handling.  There's got to
- * be a better way. */
-static int do_truncate_rename(struct presto_file_set *fset, char *oldname,
-                              char *newname)
-{
-        struct dentry *old_dentry, *new_dentry;
-        struct nameidata oldnd, newnd;
-        char *oldpath, *newpath;
-        int error;
-
-        ENTRY;
-
-        oldpath = izo_make_path(fset, oldname);
-        if (oldpath == NULL) {
-                EXIT;
-                return -ENOENT;
-        }
-
-        newpath = izo_make_path(fset, newname);
-        if (newpath == NULL) {
-                error = -ENOENT;
-                EXIT;
-                goto exit;
-        }
-
-        if ((error = izo_lookup_file(fset, oldpath, &oldnd)) != 0) {
-                EXIT;
-                goto exit1;
-        }
-
-        if ((error = izo_lookup_file(fset, newpath, &newnd)) != 0) {
-                EXIT;
-                goto exit2;
-        }
-
-        lock_rename(newnd.dentry, oldnd.dentry);
-        old_dentry = lookup_hash(&oldnd.last, oldnd.dentry);
-        error = PTR_ERR(old_dentry);
-        if (IS_ERR(old_dentry)) {
-                EXIT;
-                goto exit3;
-        }
-        error = -ENOENT;
-        if (!old_dentry->d_inode) {
-                EXIT;
-                goto exit4;
-        }
-        new_dentry = lookup_hash(&newnd.last, newnd.dentry);
-        error = PTR_ERR(new_dentry);
-        if (IS_ERR(new_dentry)) {
-                EXIT;
-                goto exit4;
-        }
-
-        {
-        extern int presto_rename(struct inode *old_dir,struct dentry *old_dentry,
-                                struct inode *new_dir,struct dentry *new_dentry);
-        error = presto_rename(old_dentry->d_parent->d_inode, old_dentry,
-                              new_dentry->d_parent->d_inode, new_dentry);
-        }
-
-        dput(new_dentry);
-        EXIT;
- exit4:
-        dput(old_dentry);
- exit3:
-        unlock_rename(newnd.dentry, oldnd.dentry);
-        path_release(&newnd);
- exit2:
-        path_release(&oldnd);
- exit1:
-        PRESTO_FREE(newpath, strlen(newpath) + 1);
- exit:
-        PRESTO_FREE(oldpath, strlen(oldpath) + 1);
-        return error;
-}
-
-/* This function is called with the fset->fset_kml.fd_lock held */
-int presto_finish_kml_truncate(struct presto_file_set *fset,
-                               unsigned long int offset)
-{
-        struct lento_vfs_context info;
-        void *handle;
-        struct file *f;
-        struct dentry *dentry;
-        int error = 0, len;
-        struct nameidata nd;
-        char *kmlpath = NULL, *smlpath = NULL;
-        ENTRY;
-
-        if (offset == 0) {
-                /* Lento couldn't do what it needed to; abort the truncation. */
-                fset->fset_kml.fd_truncating = 0;
-                EXIT;
-                return 0;
-        }
-
-        /* someone is about to write to the end of the KML; try again later. */
-        if ( !list_empty(&fset->fset_kml.fd_reservations) ) {
-                EXIT;
-                return -EAGAIN;
-        }
-
-        f = presto_copy_kml_tail(fset, offset);
-        if (IS_ERR(f)) {
-                EXIT;
-                return PTR_ERR(f);
-        }                        
-
-        /* In a single transaction:
-         *
-         *   - unlink 'kml'
-         *   - rename 'kml_tmp' to 'kml'
-         *   - unlink 'sml'
-         *   - rename 'sml_tmp' to 'sml'
-         *   - rewrite the first record of last_rcvd with the new kml
-         *     offset.
-         */
-        handle = presto_trans_start(fset, fset->fset_dentry->d_inode,
-                                    KML_OPCODE_KML_TRUNC);
-        if (IS_ERR(handle)) {
-                presto_release_space(fset->fset_cache, PRESTO_REQLOW);
-                CERROR("ERROR: presto_finish_kml_truncate: no space for transaction\n");
-                EXIT;
-                return -ENOMEM;
-        }
-
-        memset(&info, 0, sizeof(info));
-        info.flags = LENTO_FL_IGNORE_TIME;
-
-        kmlpath = izo_make_path(fset, "kml");
-        if (kmlpath == NULL) {
-                error = -ENOMEM;
-                CERROR("make_path failed: ENOMEM\n");
-                EXIT;
-                goto exit_commit;
-        }
-
-        if ((error = izo_lookup_file(fset, kmlpath, &nd)) != 0) {
-                CERROR("izo_lookup_file(kml) failed: %d.\n", error);
-                EXIT;
-                goto exit_commit;
-        }
-        down(&nd.dentry->d_inode->i_sem);
-        dentry = lookup_hash(&nd.last, nd.dentry);
-        error = PTR_ERR(dentry);
-        if (IS_ERR(dentry)) {
-                up(&nd.dentry->d_inode->i_sem);
-                path_release(&nd);
-                CERROR("lookup_hash failed\n");
-                EXIT;
-                goto exit_commit;
-        }
-        error = presto_do_unlink(fset, dentry->d_parent, dentry, &info);
-        dput(dentry);
-        up(&nd.dentry->d_inode->i_sem);
-        path_release(&nd);
-
-        if (error != 0) {
-                CERROR("presto_do_unlink(kml) failed: %d.\n", error);
-                EXIT;
-                goto exit_commit;
-        }
-
-        smlpath = izo_make_path(fset, "sml");
-        if (smlpath == NULL) {
-                error = -ENOMEM;
-                CERROR("make_path() failed: ENOMEM\n");
-                EXIT;
-                goto exit_commit;
-        }
-
-        if ((error = izo_lookup_file(fset, smlpath, &nd)) != 0) {
-                CERROR("izo_lookup_file(sml) failed: %d.\n", error);
-                EXIT;
-                goto exit_commit;
-        }
-        down(&nd.dentry->d_inode->i_sem);
-        dentry = lookup_hash(&nd.last, nd.dentry);
-        error = PTR_ERR(dentry);
-        if (IS_ERR(dentry)) {
-                up(&nd.dentry->d_inode->i_sem);
-                path_release(&nd);
-                CERROR("lookup_hash failed\n");
-                EXIT;
-                goto exit_commit;
-        }
-        error = presto_do_unlink(fset, dentry->d_parent, dentry, &info);
-        dput(dentry);
-        up(&nd.dentry->d_inode->i_sem);
-        path_release(&nd);
-
-        if (error != 0) {
-                CERROR("presto_do_unlink(sml) failed: %d.\n", error);
-                EXIT;
-                goto exit_commit;
-        }
-
-        error = do_truncate_rename(fset, "kml_tmp", "kml");
-        if (error != 0)
-                CERROR("do_truncate_rename(kml_tmp, kml) failed: %d\n", error);
-        error = do_truncate_rename(fset, "sml_tmp", "sml");
-        if (error != 0)
-                CERROR("do_truncate_rename(sml_tmp, sml) failed: %d\n", error);
-
-        /* Write a new 'last_rcvd' record with the new KML offset */
-        fset->fset_kml_logical_off += offset;
-        CDEBUG(D_CACHE, "new kml_logical_offset: %Lu\n",
-               fset->fset_kml_logical_off);
-        if (presto_write_kml_logical_offset(fset) != 0) {
-                CERROR("presto_write_kml_logical_offset failed\n");
-        }
-
-        presto_trans_commit(fset, handle);
-
-        /* Everything was successful, so swap the KML file descriptors */
-        filp_close(fset->fset_kml.fd_file, NULL);
-        fset->fset_kml.fd_file = f;
-        fset->fset_kml.fd_offset -= offset;
-        fset->fset_kml.fd_truncating = 0;
-
-        EXIT;
-        return 0;
-
- exit_commit:
-        presto_trans_commit(fset, handle);
-        len = strlen("/.intermezzo/") + strlen(fset->fset_name) +strlen("sml");
-        if (kmlpath != NULL)
-                PRESTO_FREE(kmlpath, len);
-        if (smlpath != NULL)
-                PRESTO_FREE(smlpath, len);
-        return error;
-}
-
-/* structure of an extended log record:
-
-   buf-prefix  buf-body [string1 [string2 [string3]]] buf-suffix
-
-   note: moves offset forward
-*/
-static inline int presto_write_record(struct file *f, loff_t *off,
-                        const char *buf, size_t size,
-                        const char *string1, int len1, 
-                        const char *string2, int len2,
-                        const char *string3, int len3)
-{
-        size_t prefix_size; 
-        int rc;
-
-        prefix_size = size - sizeof(struct kml_suffix);
-        rc = presto_fwrite(f, buf, prefix_size, off);
-        if ( rc != prefix_size ) {
-                CERROR("Write error!\n");
-                EXIT;
-                return -EIO;
-        }
-
-        if  ( string1  && len1 ) {
-                rc = presto_fwrite(f, string1, len1, off);
-                if ( rc != len1 ) {
-                        CERROR("Write error!\n");
-                        EXIT;
-                        return -EIO;
-                }
-        }
-
-        if  ( string2 && len2 ) {
-                rc = presto_fwrite(f, string2, len2, off);
-                if ( rc != len2 ) {
-                        CERROR("Write error!\n");
-                        EXIT;
-                        return -EIO;
-                }
-        }
-
-        if  ( string3 && len3 ) {
-                rc = presto_fwrite(f, string3, len3, off);
-                if ( rc != len3 ) {
-                        CERROR("Write error!\n");
-                        EXIT;
-                        return -EIO;
-                }
-        }
-
-        rc = presto_fwrite(f, buf + prefix_size,
-                           sizeof(struct kml_suffix), off);
-        if ( rc != sizeof(struct kml_suffix) ) {
-                CERROR("Write error!\n");
-                EXIT;
-                return -EIO;
-        }
-        return 0;
-}
-
-
-/*
- * rec->size must be valid prior to calling this function.
- *
- * had to export this for branch_reinter in kml_reint.c 
- */
-int presto_log(struct presto_file_set *fset, struct rec_info *rec,
-               const char *buf, size_t size,
-               const char *string1, int len1, 
-               const char *string2, int len2,
-               const char *string3, int len3)
-{
-        int rc;
-        struct presto_reservation_data rd;
-        loff_t offset;
-        struct presto_log_fd *fd;
-        struct kml_suffix *s;
-        int prefix_size; 
-
-        ENTRY;
-
-        /* buf is NULL when no_journal is in effect */
-        if (!buf) {
-                EXIT;
-                return -EINVAL;
-        }
-
-        if (rec->is_kml) {
-                fd = &fset->fset_kml;
-        } else {
-                fd = &fset->fset_lml;
-        }
-
-        presto_reserve_record(fset, fd, rec, &rd);
-
-        if (rec->is_kml) {
-                if (rec->offset < fset->fset_kml_logical_off) {
-                        CERROR("record with pre-trunc offset.  tell phil.\n");
-                        BUG();
-                }
-                offset = rec->offset - fset->fset_kml_logical_off;
-        } else {
-                offset = rec->offset;
-        }
-
-        /* now we know the record number */ 
-        prefix_size = size - sizeof(struct kml_suffix);
-        s = (struct kml_suffix *) (buf + prefix_size); 
-        s->recno = cpu_to_le32(rec->recno); 
-
-        rc = presto_write_record(fd->fd_file, &offset, buf, size, 
-                                 string1, len1, string2, len2, string3, len3); 
-        if (rc) {
-                CERROR("presto: error writing record to %s\n",
-                        rec->is_kml ? "KML" : "LML"); 
-                return rc;
-        }
-        presto_release_record(fd, &rd);
-
-        rc = presto_kml_dispatch(fset);
-
-        EXIT;
-        return rc;
-}
-
-/* read from the record at tail */
-static int presto_last_record(struct presto_log_fd *fd, loff_t *size, 
-                             loff_t *tail_offset, __u32 *recno, loff_t tail)
-{
-        struct kml_suffix suffix;
-        int rc;
-        loff_t zeroes;
-
-        *recno = 0;
-        *tail_offset = 0;
-        *size = 0;
-        
-        if (tail < sizeof(struct kml_prefix_hdr) + sizeof(suffix)) {
-                EXIT;
-                return 0;
-        }
-
-        zeroes = tail - sizeof(int);
-        while ( zeroes >= 0 ) {
-                int data;
-                rc = presto_fread(fd->fd_file, (char *)&data, sizeof(data), 
-                                  &zeroes);
-                if ( rc != sizeof(data) ) { 
-                        rc = -EIO;
-                        return rc;
-                }
-                if (data)
-                        break;
-                zeroes -= 2 * sizeof(data);
-        }
-
-        /* zeroes at the begining of file. this is needed to prevent
-           presto_fread errors  -SHP
-        */
-        if (zeroes <= 0) return 0;
-                       
-        zeroes -= sizeof(suffix) + sizeof(int);
-        rc = presto_fread(fd->fd_file, (char *)&suffix, sizeof(suffix), &zeroes);
-        if ( rc != sizeof(suffix) ) {
-                EXIT;
-                return rc;
-        }
-        if ( suffix.len > 500 ) {
-                CERROR("InterMezzo: Warning long record tail at %ld, rec tail_offset at %ld (size %d)\n", 
-                        (long) zeroes, (long)*tail_offset, suffix.len); 
-        }
-
-        *recno = suffix.recno;
-        *size = suffix.len;
-        *tail_offset = zeroes;
-        return 0;
-}
-
-static int izo_kml_last_recno(struct presto_log_fd *logfd)
-{
-        int rc; 
-        loff_t size;
-        loff_t tail_offset;
-        int recno;
-        loff_t tail = logfd->fd_file->f_dentry->d_inode->i_size;
-
-        rc = presto_last_record(logfd, &size, &tail_offset, &recno, tail);
-        if (rc != 0) {
-                EXIT;
-                return rc;
-        }
-
-        logfd->fd_offset = tail_offset;
-        logfd->fd_recno = recno;
-        CDEBUG(D_JOURNAL, "setting fset_kml->fd_recno to %d, offset  %Ld\n",
-               recno, tail_offset); 
-        EXIT;
-        return 0;
-}
-
-struct file *izo_log_open(struct presto_file_set *fset, char *name, int flags)
-{
-        struct presto_cache *cache = fset->fset_cache;
-        struct file *f;
-        int error;
-        ENTRY;
-
-        f = izo_fset_open(fset, name, flags, 0644);
-        error = PTR_ERR(f);
-        if (IS_ERR(f)) {
-                EXIT;
-                return f;
-        }
-
-        error = -EINVAL;
-        if ( cache != presto_get_cache(f->f_dentry->d_inode) ) {
-                CERROR("InterMezzo: %s cache does not match fset cache!\n",name);
-                fset->fset_kml.fd_file = NULL;
-                filp_close(f, NULL);
-                f = NULL;
-                EXIT;
-                return f;
-        }
-
-        if (cache->cache_filter &&  cache->cache_filter->o_trops &&
-            cache->cache_filter->o_trops->tr_journal_data) {
-                cache->cache_filter->o_trops->tr_journal_data
-                        (f->f_dentry->d_inode);
-        } else {
-                CERROR("InterMezzo WARNING: no file data logging!\n"); 
-        }
-
-        EXIT;
-
-        return f;
-}
-
-int izo_init_kml_file(struct presto_file_set *fset, struct presto_log_fd *logfd)
-{
-        int error = 0;
-        struct file *f;
-
-        ENTRY;
-        if (logfd->fd_file) {
-                CDEBUG(D_INODE, "fset already has KML open\n");
-                EXIT;
-                return 0;
-        }
-
-        logfd->fd_lock = RW_LOCK_UNLOCKED;
-        INIT_LIST_HEAD(&logfd->fd_reservations); 
-        f = izo_log_open(fset, "kml",  O_RDWR | O_CREAT);
-        if (IS_ERR(f)) {
-                error = PTR_ERR(f);
-                return error;
-        }
-
-        logfd->fd_file = f;
-        error = izo_kml_last_recno(logfd);
-
-        if (error) {
-                logfd->fd_file = NULL;
-                filp_close(f, NULL);
-                CERROR("InterMezzo: IO error in KML of fset %s\n",
-                       fset->fset_name);
-                EXIT;
-                return error;
-        }
-        fset->fset_lento_off = logfd->fd_offset;
-        fset->fset_lento_recno = logfd->fd_recno;
-
-        EXIT;
-        return error;
-}
-
-int izo_init_last_rcvd_file(struct presto_file_set *fset, struct presto_log_fd *logfd)
-{
-        int error = 0;
-        struct file *f;
-        struct rec_info recinfo;
-
-        ENTRY;
-        if (logfd->fd_file != NULL) {
-                CDEBUG(D_INODE, "fset already has last_rcvd open\n");
-                EXIT;
-                return 0;
-        }
-
-        logfd->fd_lock = RW_LOCK_UNLOCKED;
-        INIT_LIST_HEAD(&logfd->fd_reservations); 
-        f = izo_log_open(fset, "last_rcvd", O_RDWR | O_CREAT);
-        if (IS_ERR(f)) {
-                error = PTR_ERR(f);
-                return error;
-        }
-
-        logfd->fd_file = f;
-        logfd->fd_offset = f->f_dentry->d_inode->i_size;
-
-        error = izo_rep_cache_init(fset);
-
-        if (presto_read_kml_logical_offset(&recinfo, fset) == 0) {
-                fset->fset_kml_logical_off = recinfo.offset;
-        } else {
-                /* The 'last_rcvd' file doesn't contain a kml offset record,
-                 * probably because we just created 'last_rcvd'.  Write one. */
-                fset->fset_kml_logical_off = 0;
-                presto_write_kml_logical_offset(fset);
-        }
-
-        EXIT;
-        return error;
-}
-
-int izo_init_lml_file(struct presto_file_set *fset, struct presto_log_fd *logfd)
-{
-        int error = 0;
-        struct file *f;
-
-        ENTRY;
-        if (logfd->fd_file) {
-                CDEBUG(D_INODE, "fset already has lml open\n");
-                EXIT;
-                return 0;
-        }
-
-        logfd->fd_lock = RW_LOCK_UNLOCKED;
-        INIT_LIST_HEAD(&logfd->fd_reservations); 
-        f = izo_log_open(fset, "lml", O_RDWR | O_CREAT);
-        if (IS_ERR(f)) {
-                error = PTR_ERR(f);
-                return error;
-        }
-
-        logfd->fd_file = f;
-        logfd->fd_offset = f->f_dentry->d_inode->i_size;
-
-        EXIT;
-        return error;
-}
-
-/* Get the KML-offset record from the last_rcvd file */
-int presto_read_kml_logical_offset(struct rec_info *recinfo,
-                                   struct presto_file_set *fset)
-{
-        loff_t off;
-        struct izo_rcvd_rec rec;
-        char uuid[16] = {0};
-
-        off = izo_rcvd_get(&rec, fset, uuid);
-        if (off < 0)
-                return -1;
-
-        recinfo->offset = rec.lr_local_offset;
-        return 0;
-}
-
-int presto_write_kml_logical_offset(struct presto_file_set *fset)
-{
-        loff_t rc;
-        struct izo_rcvd_rec rec;
-        char uuid[16] = {0};
-
-        rc = izo_rcvd_get(&rec, fset, uuid);
-        if (rc < 0)
-                memset(&rec, 0, sizeof(rec));
-
-        rec.lr_local_offset =
-                cpu_to_le64(fset->fset_kml_logical_off);
-
-        return izo_rcvd_write(fset, &rec);
-}
-
-struct file * presto_copy_kml_tail(struct presto_file_set *fset,
-                                   unsigned long int start)
-{
-        struct file *f;
-        int len;
-        loff_t read_off, write_off, bytes;
-
-        ENTRY;
-
-        /* Copy the tail of 'kml' to 'kml_tmp' */
-        f = izo_log_open(fset, "kml_tmp", O_RDWR);
-        if (IS_ERR(f)) {
-                EXIT;
-                return f;
-        }
-
-        write_off = 0;
-        read_off = start;
-        bytes = fset->fset_kml.fd_offset - start;
-        while (bytes > 0) {
-                char buf[4096];
-                int toread;
-
-                if (bytes > sizeof(buf))
-                        toread = sizeof(buf);
-                else
-                        toread = bytes;
-
-                len = presto_fread(fset->fset_kml.fd_file, buf, toread,
-                                   &read_off);
-                if (len <= 0)
-                        break;
-
-                if (presto_fwrite(f, buf, len, &write_off) != len) {
-                        filp_close(f, NULL);
-                        EXIT;
-                        return ERR_PTR(-EIO);
-                }
-
-                bytes -= len;
-        }
-
-        EXIT;
-        return f;
-}
-
-
-/* LML records here */
-/* this writes an LML record to the LML file (rec->is_kml =0)  */
-int presto_write_lml_close(struct rec_info *rec,
-                           struct presto_file_set *fset, 
-                           struct file *file,
-                           __u64 remote_ino,
-                           __u64 remote_generation,
-                           struct presto_version *remote_version,
-                           struct presto_version *new_file_ver)
-{
-        int opcode = KML_OPCODE_CLOSE;
-        char *buffer;
-        struct dentry *dentry = file->f_dentry; 
-        __u64 ino;
-        __u32 pathlen;
-        char *path;
-        __u32 generation;
-        int size;
-        char *logrecord;
-        char record[292];
-        struct dentry *root;
-        int error;
-
-        ENTRY;
-
-        if ( presto_no_journal(fset) ) {
-          EXIT;
-          return 0;
-        }
-        root = fset->fset_dentry;
-
-        BUFF_ALLOC(buffer, NULL);
-        path = presto_path(dentry, root, buffer, PAGE_SIZE);
-        CDEBUG(D_INODE, "Path: %s\n", path);
-        pathlen = cpu_to_le32(MYPATHLEN(buffer, path));
-        ino = cpu_to_le64(dentry->d_inode->i_ino);
-        generation = cpu_to_le32(dentry->d_inode->i_generation);
-        size =  sizeof(__u32) * current->group_info->ngroups + 
-                sizeof(struct kml_prefix_hdr) + sizeof(*new_file_ver) +
-                sizeof(ino) + sizeof(generation) + sizeof(pathlen) +
-                sizeof(remote_ino) + sizeof(remote_generation) + 
-                sizeof(remote_version) + sizeof(rec->offset) +
-                sizeof(struct kml_suffix);
-
-        if ( size > sizeof(record) )
-                CERROR("InterMezzo: BUFFER OVERFLOW in %s!\n", __FUNCTION__);
-        
-        rec->is_kml = 0;
-        rec->size = size + size_round(le32_to_cpu(pathlen));
-
-        logrecord = journal_log_prefix(record, opcode, rec);
-        logrecord = log_version(logrecord, new_file_ver);
-        logrecord = logit(logrecord, &ino, sizeof(ino));
-        logrecord = logit(logrecord, &generation, sizeof(generation));
-        logrecord = logit(logrecord, &pathlen, sizeof(pathlen));
-        logrecord = logit(logrecord, &remote_ino, sizeof(remote_ino));
-        logrecord = logit(logrecord, &remote_generation,
-                          sizeof(remote_generation));
-        logrecord = log_version(logrecord, remote_version);
-        logrecord = logit(logrecord, &rec->offset, sizeof(rec->offset));
-        logrecord = journal_log_suffix(logrecord, record, fset, dentry, rec);
-
-        error = presto_log(fset, rec, record, size,
-                           path, size_round(le32_to_cpu(pathlen)),
-                           NULL, 0, NULL, 0);
-
-        BUFF_FREE(buffer);
-
-        EXIT;
-        return error;
-}
-
-/* 
- * Check if the given record is at the end of the file. If it is, truncate
- * the lml to the record's offset, removing it. Repeat on prior record,
- * until we reach an active record or a reserved record (as defined by the
- * reservations list).
- */
-static int presto_truncate_lml_tail(struct presto_file_set *fset)
-{
-        loff_t lml_tail;
-        loff_t lml_last_rec;
-        loff_t lml_last_recsize;
-        loff_t local_offset;
-        int recno;
-        struct kml_prefix_hdr prefix;
-        struct inode *inode = fset->fset_lml.fd_file->f_dentry->d_inode;
-        void *handle;
-        int rc;
-
-        ENTRY;
-        /* If someone else is already truncating the LML, return. */
-        write_lock(&fset->fset_lml.fd_lock); 
-        if (fset->fset_lml.fd_truncating == 1 ) {
-                write_unlock(&fset->fset_lml.fd_lock); 
-                EXIT;
-                return 0;
-        }
-        /* someone is about to write to the end of the LML */ 
-        if ( !list_empty(&fset->fset_lml.fd_reservations) ) {
-                write_unlock(&fset->fset_lml.fd_lock); 
-                EXIT;
-                return 0;
-        }
-       lml_tail = fset->fset_lml.fd_file->f_dentry->d_inode->i_size;
-       /* Nothing to truncate?*/
-       if (lml_tail == 0) {
-                write_unlock(&fset->fset_lml.fd_lock); 
-                EXIT;
-                return 0;
-       }
-       fset->fset_lml.fd_truncating = 1;
-       write_unlock(&fset->fset_lml.fd_lock); 
-
-       presto_last_record(&fset->fset_lml, &lml_last_recsize,
-                          &lml_last_rec, &recno, lml_tail);
-       /* Do we have a record to check? If not we have zeroes at the
-          beginning of the file. -SHP
-       */
-       if (lml_last_recsize != 0) {
-                local_offset = lml_last_rec - lml_last_recsize;
-                rc = presto_fread(fset->fset_lml.fd_file, (char *)&prefix,  
-                                        sizeof(prefix), &local_offset); 
-                if (rc != sizeof(prefix)) {
-                        EXIT;
-                        goto tr_out;
-                }
-       
-                if ( prefix.opcode != KML_OPCODE_NOOP ) {
-                        EXIT;
-                        rc = 0;
-                        /* We may have zeroes at the end of the file, should
-                           we clear them out? -SHP
-                        */
-                        goto tr_out;
-                }
-        } else 
-                lml_last_rec=0;
-
-        handle = presto_trans_start(fset, inode, KML_OPCODE_TRUNC);
-        if ( IS_ERR(handle) ) {
-                EXIT;
-                rc = -ENOMEM;
-                goto tr_out;
-        }
-
-        rc = izo_do_truncate(fset, fset->fset_lml.fd_file->f_dentry, 
-                                lml_last_rec - lml_last_recsize, lml_tail);
-        presto_trans_commit(fset, handle); 
-        if ( rc == 0 ) {
-                rc = 1;
-        }
-        EXIT;
-
- tr_out:
-        CDEBUG(D_JOURNAL, "rc = %d\n", rc);
-        write_lock(&fset->fset_lml.fd_lock);
-        fset->fset_lml.fd_truncating = 0;
-        write_unlock(&fset->fset_lml.fd_lock);
-        return rc;
-}
-
-int presto_truncate_lml(struct presto_file_set *fset)
-{
-        int rc; 
-        ENTRY;
-        
-        while ( (rc = presto_truncate_lml_tail(fset)) > 0);
-        if ( rc < 0 && rc != -EALREADY) {
-                CERROR("truncate_lml error %d\n", rc); 
-        }
-        EXIT;
-        return rc;
-}
-
-int presto_clear_lml_close(struct presto_file_set *fset, loff_t lml_offset)
-{
-        int rc;
-        struct kml_prefix_hdr record;
-        loff_t offset = lml_offset;
-
-        ENTRY;
-
-        if ( presto_no_journal(fset) ) {
-                EXIT;
-                return 0;
-        }
-
-        CDEBUG(D_JOURNAL, "reading prefix: off %ld, size %Zd\n", 
-               (long)lml_offset, sizeof(record));
-        rc = presto_fread(fset->fset_lml.fd_file, (char *)&record,
-                          sizeof(record), &offset);
-
-        if ( rc != sizeof(record) ) {
-                CERROR("presto: clear_lml io error %d\n", rc); 
-                EXIT;
-                return -EIO;
-        }
-
-        /* overwrite the prefix */ 
-        CDEBUG(D_JOURNAL, "overwriting prefix: off %ld\n", (long)lml_offset);
-        record.opcode = KML_OPCODE_NOOP;
-        offset = lml_offset;
-        /* note: this does just a single transaction in the cache */
-        rc = presto_fwrite(fset->fset_lml.fd_file, (char *)(&record), 
-                              sizeof(record), &offset);
-        if ( rc != sizeof(record) ) {
-                EXIT;
-                return -EIO;
-        }
-
-        EXIT;
-        return 0; 
-}
-
-
-
-/* now a journal function for every operation */
-
-int presto_journal_setattr(struct rec_info *rec, struct presto_file_set *fset,
-                           struct dentry *dentry, struct presto_version *old_ver,
-                           struct izo_rollback_data *rb, struct iattr *iattr)
-{
-        int opcode = KML_OPCODE_SETATTR;
-        char *buffer, *path, *logrecord, record[316];
-        struct dentry *root;
-        __u32 uid, gid, mode, valid, flags, pathlen;
-        __u64 fsize, mtime, ctime;
-        int error, size;
-
-        ENTRY;
-        if ( presto_no_journal(fset) ) {
-                EXIT;
-                return 0;
-        }
-
-        if (!dentry->d_inode || (dentry->d_inode->i_nlink == 0) 
-            || ((dentry->d_parent != dentry) && d_unhashed(dentry))) {
-                EXIT;
-                return 0;
-        }
-
-        root = fset->fset_dentry;
-
-        BUFF_ALLOC(buffer, NULL);
-        path = presto_path(dentry, root, buffer, PAGE_SIZE);
-        pathlen = cpu_to_le32(MYPATHLEN(buffer, path));
-        size =  sizeof(__u32) * current->group_info->ngroups + 
-                sizeof(struct kml_prefix_hdr) + sizeof(*old_ver) +
-                sizeof(valid) + sizeof(mode) + sizeof(uid) + sizeof(gid) +
-                sizeof(fsize) + sizeof(mtime) + sizeof(ctime) + sizeof(flags) +
-                sizeof(pathlen) + sizeof(*rb) + sizeof(struct kml_suffix);
-
-        if ( size > sizeof(record) )
-                CERROR("InterMezzo: BUFFER OVERFLOW in %s!\n", __FUNCTION__);
-
-        /* Only journal one kind of mtime, and not atime at all.  Also don't
-         * journal bogus data in iattr, to make the journal more compressible.
-         */
-        if (iattr->ia_valid & ATTR_MTIME_SET)
-                iattr->ia_valid = iattr->ia_valid | ATTR_MTIME;
-        valid = cpu_to_le32(iattr->ia_valid & ~(ATTR_ATIME | ATTR_MTIME_SET |
-                                                ATTR_ATIME_SET));
-        mode = iattr->ia_valid & ATTR_MODE ? cpu_to_le32(iattr->ia_mode): 0;
-        uid = iattr->ia_valid & ATTR_UID ? cpu_to_le32(iattr->ia_uid): 0;
-        gid = iattr->ia_valid & ATTR_GID ? cpu_to_le32(iattr->ia_gid): 0;
-        fsize = iattr->ia_valid & ATTR_SIZE ? cpu_to_le64(iattr->ia_size): 0;
-        mtime = iattr->ia_valid & ATTR_MTIME ? cpu_to_le64(iattr->ia_mtime.tv_sec): 0;
-        ctime = iattr->ia_valid & ATTR_CTIME ? cpu_to_le64(iattr->ia_ctime.tv_sec): 0;
-        flags = iattr->ia_valid & ATTR_ATTR_FLAG ?
-                cpu_to_le32(iattr->ia_attr_flags): 0;
-
-        rec->is_kml = 1;
-        rec->size = size + size_round(le32_to_cpu(pathlen));
-
-        logrecord = journal_log_prefix(record, opcode, rec);
-        logrecord = log_version(logrecord, old_ver);
-        logrecord = logit(logrecord, &valid, sizeof(valid));
-        logrecord = logit(logrecord, &mode, sizeof(mode));
-        logrecord = logit(logrecord, &uid, sizeof(uid));
-        logrecord = logit(logrecord, &gid, sizeof(gid));
-        logrecord = logit(logrecord, &fsize, sizeof(fsize));
-        logrecord = logit(logrecord, &mtime, sizeof(mtime));
-        logrecord = logit(logrecord, &ctime, sizeof(ctime));
-        logrecord = logit(logrecord, &flags, sizeof(flags));
-        logrecord = log_rollback(logrecord, rb);
-        logrecord = logit(logrecord, &pathlen, sizeof(pathlen));
-        logrecord = journal_log_suffix(logrecord, record, fset, dentry, rec);
-
-        error = presto_log(fset, rec, record, size,
-                           path, size_round(le32_to_cpu(pathlen)),
-                           NULL, 0, NULL, 0);
-
-        BUFF_FREE(buffer);
-        EXIT;
-        return error;
-}
-
-int presto_get_fileid(int minor, struct presto_file_set *fset,
-                      struct dentry *dentry)
-{
-        int opcode = KML_OPCODE_GET_FILEID;
-        struct rec_info rec;
-        char *buffer, *path, *logrecord, record[4096]; /*include path*/
-        struct dentry *root;
-        __u32 uid, gid, pathlen;
-        int error, size;
-        struct kml_suffix *suffix;
-
-        ENTRY;
-
-        root = fset->fset_dentry;
-
-        uid = cpu_to_le32(dentry->d_inode->i_uid);
-        gid = cpu_to_le32(dentry->d_inode->i_gid);
-        BUFF_ALLOC(buffer, NULL);
-        path = presto_path(dentry, root, buffer, PAGE_SIZE);
-        pathlen = cpu_to_le32(MYPATHLEN(buffer, path));
-        size =  sizeof(__u32) * current->group_info->ngroups + 
-                sizeof(struct kml_prefix_hdr) + sizeof(pathlen) +
-                size_round(le32_to_cpu(pathlen)) +
-                sizeof(struct kml_suffix);
-
-        CDEBUG(D_FILE, "kml size: %d\n", size);
-        if ( size > sizeof(record) )
-                CERROR("InterMezzo: BUFFER OVERFLOW in %s!\n", __FUNCTION__);
-
-        memset(&rec, 0, sizeof(rec));
-        rec.is_kml = 1;
-        rec.size = size;
-
-        logrecord = journal_log_prefix(record, opcode, &rec);
-        logrecord = logit(logrecord, &pathlen, sizeof(pathlen));
-        logrecord = logit(logrecord, path, size_round(le32_to_cpu(pathlen)));
-        suffix = (struct kml_suffix *)logrecord;
-        logrecord = journal_log_suffix(logrecord, record, fset, dentry, &rec);
-        /* journal_log_suffix expects journal_log to set this */
-        suffix->recno = 0;
-
-        CDEBUG(D_FILE, "actual kml size: %Zd\n", logrecord - record);
-        CDEBUG(D_FILE, "get fileid: uid %d, gid %d, path: %s\n", uid, gid,path);
-
-        error = izo_upc_get_fileid(minor, size, record, 
-                                   size_round(le32_to_cpu(pathlen)), path,
-                                   fset->fset_name);
-
-        BUFF_FREE(buffer);
-        EXIT;
-        return error;
-}
-
-int presto_journal_create(struct rec_info *rec, struct presto_file_set *fset,
-                          struct dentry *dentry,
-                          struct presto_version *tgt_dir_ver,
-                          struct presto_version *new_file_ver, int mode)
-{
-        int opcode = KML_OPCODE_CREATE;
-        char *buffer, *path, *logrecord, record[292];
-        struct dentry *root;
-        __u32 uid, gid, lmode, pathlen;
-        int error, size;
-
-        ENTRY;
-        if ( presto_no_journal(fset) ) {
-                EXIT;
-                return 0;
-        }
-
-        root = fset->fset_dentry;
-
-        uid = cpu_to_le32(dentry->d_inode->i_uid);
-        gid = cpu_to_le32(dentry->d_inode->i_gid);
-        lmode = cpu_to_le32(mode);
- 
-        BUFF_ALLOC(buffer, NULL);
-        path = presto_path(dentry, root, buffer, PAGE_SIZE);
-        pathlen = cpu_to_le32(MYPATHLEN(buffer, path));
-        size =  sizeof(__u32) * current->group_info->ngroups + 
-                sizeof(struct kml_prefix_hdr) + 3 * sizeof(*tgt_dir_ver) +
-                sizeof(lmode) + sizeof(uid) + sizeof(gid) + sizeof(pathlen) +
-                sizeof(struct kml_suffix);
-
-        if ( size > sizeof(record) )
-                CERROR("InterMezzo: BUFFER OVERFLOW in %s!\n", __FUNCTION__);
-
-        rec->is_kml = 1;
-        rec->size = size + size_round(le32_to_cpu(pathlen));
-
-        logrecord = journal_log_prefix(record, opcode, rec);
-        logrecord = log_version(logrecord, tgt_dir_ver);
-        logrecord = log_dentry_version(logrecord, dentry->d_parent);
-        logrecord = log_version(logrecord, new_file_ver);
-        logrecord = logit(logrecord, &lmode, sizeof(lmode));
-        logrecord = logit(logrecord, &uid, sizeof(uid));
-        logrecord = logit(logrecord, &gid, sizeof(gid));
-        logrecord = logit(logrecord, &pathlen, sizeof(pathlen));
-        logrecord = journal_log_suffix(logrecord, record, fset, dentry, rec);
-
-        error = presto_log(fset, rec, record, size,
-                           path, size_round(le32_to_cpu(pathlen)),
-                           NULL, 0, NULL, 0);
-
-        BUFF_FREE(buffer);
-        EXIT;
-        return error;
-}
-
-int presto_journal_symlink(struct rec_info *rec, struct presto_file_set *fset,
-                           struct dentry *dentry, const char *target,
-                           struct presto_version *tgt_dir_ver,
-                           struct presto_version *new_link_ver)
-{
-        int opcode = KML_OPCODE_SYMLINK;
-        char *buffer, *path, *logrecord, record[292];
-        struct dentry *root;
-        __u32 uid, gid, pathlen;
-        __u32 targetlen = cpu_to_le32(strlen(target));
-        int error, size;
-
-        ENTRY;
-        if ( presto_no_journal(fset) ) {
-                EXIT;
-                return 0;
-        }
-
-        root = fset->fset_dentry;
-
-        uid = cpu_to_le32(dentry->d_inode->i_uid);
-        gid = cpu_to_le32(dentry->d_inode->i_gid);
-
-        BUFF_ALLOC(buffer, NULL);
-        path = presto_path(dentry, root, buffer, PAGE_SIZE);
-        pathlen = cpu_to_le32(MYPATHLEN(buffer, path));
-        size =  sizeof(__u32) * current->group_info->ngroups + 
-                sizeof(struct kml_prefix_hdr) + 3 * sizeof(*tgt_dir_ver) +
-                sizeof(uid) + sizeof(gid) + sizeof(pathlen) +
-                sizeof(targetlen) + sizeof(struct kml_suffix);
-
-        if ( size > sizeof(record) )
-                CERROR("InterMezzo: BUFFER OVERFLOW in %s!\n", __FUNCTION__);
-
-        rec->is_kml = 1;
-        rec->size = size + size_round(le32_to_cpu(pathlen)) +
-                size_round(le32_to_cpu(targetlen));
-
-        logrecord = journal_log_prefix(record, opcode, rec);
-        logrecord = log_version(logrecord, tgt_dir_ver);
-        logrecord = log_dentry_version(logrecord, dentry->d_parent);
-        logrecord = log_version(logrecord, new_link_ver);
-        logrecord = logit(logrecord, &uid, sizeof(uid));
-        logrecord = logit(logrecord, &gid, sizeof(gid));
-        logrecord = logit(logrecord, &pathlen, sizeof(pathlen));
-        logrecord = logit(logrecord, &targetlen, sizeof(targetlen));
-        logrecord = journal_log_suffix(logrecord, record, fset, dentry, rec);
-
-        error = presto_log(fset, rec, record, size,
-                           path, size_round(le32_to_cpu(pathlen)),
-                           target, size_round(le32_to_cpu(targetlen)),
-                           NULL, 0);
-
-        BUFF_FREE(buffer);
-        EXIT;
-        return error;
-}
-
-int presto_journal_mkdir(struct rec_info *rec, struct presto_file_set *fset,
-                         struct dentry *dentry,
-                         struct presto_version *tgt_dir_ver,
-                         struct presto_version *new_dir_ver, int mode)
-{
-        int opcode = KML_OPCODE_MKDIR;
-        char *buffer, *path, *logrecord, record[292];
-        struct dentry *root;
-        __u32 uid, gid, lmode, pathlen;
-        int error, size;
-
-        ENTRY;
-        if ( presto_no_journal(fset) ) {
-                EXIT;
-                return 0;
-        }
-
-        root = fset->fset_dentry;
-
-        uid = cpu_to_le32(dentry->d_inode->i_uid);
-        gid = cpu_to_le32(dentry->d_inode->i_gid);
-        lmode = cpu_to_le32(mode);
-
-        BUFF_ALLOC(buffer, NULL);
-        path = presto_path(dentry, root, buffer, PAGE_SIZE);
-        pathlen = cpu_to_le32(MYPATHLEN(buffer, path));
-        size = sizeof(__u32) * current->group_info->ngroups + 
-                sizeof(struct kml_prefix_hdr) + 3 * sizeof(*tgt_dir_ver) +
-                sizeof(lmode) + sizeof(uid) + sizeof(gid) + sizeof(pathlen) +
-                sizeof(struct kml_suffix);
-
-        if ( size > sizeof(record) )
-                CERROR("InterMezzo: BUFFER OVERFLOW in %s!\n", __FUNCTION__);
-
-        rec->is_kml = 1;
-        rec->size = size + size_round(le32_to_cpu(pathlen));
-        logrecord = journal_log_prefix(record, opcode, rec);
-
-        logrecord = log_version(logrecord, tgt_dir_ver);
-        logrecord = log_dentry_version(logrecord, dentry->d_parent);
-        logrecord = log_version(logrecord, new_dir_ver);
-        logrecord = logit(logrecord, &lmode, sizeof(lmode));
-        logrecord = logit(logrecord, &uid, sizeof(uid));
-        logrecord = logit(logrecord, &gid, sizeof(gid));
-        logrecord = logit(logrecord, &pathlen, sizeof(pathlen));
-        logrecord = journal_log_suffix(logrecord, record, fset, dentry, rec);
-
-        error = presto_log(fset, rec, record, size,
-                           path, size_round(le32_to_cpu(pathlen)),
-                           NULL, 0, NULL, 0);
-
-        BUFF_FREE(buffer);
-        EXIT;
-        return error;
-}
-
-
-int
-presto_journal_rmdir(struct rec_info *rec, struct presto_file_set *fset,
-                     struct dentry *dir, struct presto_version *tgt_dir_ver,
-                     struct presto_version *old_dir_ver,
-                     struct izo_rollback_data *rb, int len, const char *name)
-{
-        int opcode = KML_OPCODE_RMDIR;
-        char *buffer, *path, *logrecord, record[316];
-        __u32 pathlen, llen;
-        struct dentry *root;
-        int error, size;
-
-        ENTRY;
-        if ( presto_no_journal(fset) ) {
-                EXIT;
-                return 0;
-        }
-
-        root = fset->fset_dentry;
-
-        llen = cpu_to_le32(len);
-        BUFF_ALLOC(buffer, NULL);
-        path = presto_path(dir, root, buffer, PAGE_SIZE);
-        pathlen = cpu_to_le32(MYPATHLEN(buffer, path));
-        size =  sizeof(__u32) * current->group_info->ngroups + 
-                sizeof(struct kml_prefix_hdr) + 3 * sizeof(*tgt_dir_ver) +
-                sizeof(pathlen) + sizeof(llen) + sizeof(*rb) +
-                sizeof(struct kml_suffix);
-
-        if ( size > sizeof(record) )
-                CERROR("InterMezzo: BUFFER OVERFLOW in %s!\n", __FUNCTION__);
-
-        CDEBUG(D_JOURNAL, "path: %s (%d), name: %s (%d), size %d\n",
-               path, pathlen, name, len, size);
-
-        rec->is_kml = 1;
-        rec->size = size + size_round(le32_to_cpu(pathlen)) + 
-                size_round(len);
-
-        logrecord = journal_log_prefix(record, opcode, rec);
-        logrecord = log_version(logrecord, tgt_dir_ver);
-        logrecord = log_dentry_version(logrecord, dir);
-        logrecord = log_version(logrecord, old_dir_ver);
-        logrecord = logit(logrecord, rb, sizeof(*rb));
-        logrecord = logit(logrecord, &pathlen, sizeof(pathlen));
-        logrecord = logit(logrecord, &llen, sizeof(llen));
-        logrecord = journal_log_suffix(logrecord, record, fset, dir, rec);
-        error = presto_log(fset, rec, record, size,
-                           path, size_round(le32_to_cpu(pathlen)),
-                           name, size_round(len),
-                           NULL, 0);
-
-        BUFF_FREE(buffer);
-        EXIT;
-        return error;
-}
-
-
-int
-presto_journal_mknod(struct rec_info *rec, struct presto_file_set *fset,
-                     struct dentry *dentry, struct presto_version *tgt_dir_ver,
-                     struct presto_version *new_node_ver, int mode,
-                     int dmajor, int dminor )
-{
-        int opcode = KML_OPCODE_MKNOD;
-        char *buffer, *path, *logrecord, record[292];
-        struct dentry *root;
-        __u32 uid, gid, lmode, lmajor, lminor, pathlen;
-        int error, size;
-
-        ENTRY;
-        if ( presto_no_journal(fset) ) {
-                EXIT;
-                return 0;
-        }
-
-        root = fset->fset_dentry;
-
-        uid = cpu_to_le32(dentry->d_inode->i_uid);
-        gid = cpu_to_le32(dentry->d_inode->i_gid);
-        lmode = cpu_to_le32(mode);
-        lmajor = cpu_to_le32(dmajor);
-        lminor = cpu_to_le32(dminor);
-
-        BUFF_ALLOC(buffer, NULL);
-        path = presto_path(dentry, root, buffer, PAGE_SIZE);
-        pathlen = cpu_to_le32(MYPATHLEN(buffer, path));
-        size = sizeof(__u32) * current->group_info->ngroups + 
-                sizeof(struct kml_prefix_hdr) + 3 * sizeof(*tgt_dir_ver) +
-                sizeof(lmode) + sizeof(uid) + sizeof(gid) + sizeof(lmajor) +
-                sizeof(lminor) + sizeof(pathlen) +
-                sizeof(struct kml_suffix);
-
-        if ( size > sizeof(record) )
-                CERROR("InterMezzo: BUFFER OVERFLOW in %s!\n", __FUNCTION__);
-
-        rec->is_kml = 1;
-        rec->size = size + size_round(le32_to_cpu(pathlen));
-
-        logrecord = journal_log_prefix(record, opcode, rec);
-        logrecord = log_version(logrecord, tgt_dir_ver);
-        logrecord = log_dentry_version(logrecord, dentry->d_parent);
-        logrecord = log_version(logrecord, new_node_ver);
-        logrecord = logit(logrecord, &lmode, sizeof(lmode));
-        logrecord = logit(logrecord, &uid, sizeof(uid));
-        logrecord = logit(logrecord, &gid, sizeof(gid));
-        logrecord = logit(logrecord, &lmajor, sizeof(lmajor));
-        logrecord = logit(logrecord, &lminor, sizeof(lminor));
-        logrecord = logit(logrecord, &pathlen, sizeof(pathlen));
-        logrecord = journal_log_suffix(logrecord, record, fset, dentry, rec);
-
-        error = presto_log(fset, rec, record, size,
-                           path, size_round(le32_to_cpu(pathlen)),
-                           NULL, 0, NULL, 0);
-
-        BUFF_FREE(buffer);
-        EXIT;
-        return error;
-}
-
-int
-presto_journal_link(struct rec_info *rec, struct presto_file_set *fset,
-                    struct dentry *src, struct dentry *tgt,
-                    struct presto_version *tgt_dir_ver,
-                    struct presto_version *new_link_ver)
-{
-        int opcode = KML_OPCODE_LINK;
-        char *buffer, *srcbuffer, *path, *srcpath, *logrecord, record[292];
-        __u32 pathlen, srcpathlen;
-        struct dentry *root;
-        int error, size;
-
-        ENTRY;
-        if ( presto_no_journal(fset) ) {
-                EXIT;
-                return 0;
-        }
-
-        root = fset->fset_dentry;
-
-        BUFF_ALLOC(srcbuffer, NULL);
-        srcpath = presto_path(src, root, srcbuffer, PAGE_SIZE);
-        srcpathlen = cpu_to_le32(MYPATHLEN(srcbuffer, srcpath));
-
-        BUFF_ALLOC(buffer, srcbuffer);
-        path = presto_path(tgt, root, buffer, PAGE_SIZE);
-        pathlen = cpu_to_le32(MYPATHLEN(buffer, path));
-        size =  sizeof(__u32) * current->group_info->ngroups + 
-                sizeof(struct kml_prefix_hdr) + 3 * sizeof(*tgt_dir_ver) +
-                sizeof(srcpathlen) + sizeof(pathlen) +
-                sizeof(struct kml_suffix);
-
-        if ( size > sizeof(record) )
-                CERROR("InterMezzo: BUFFER OVERFLOW in %s!\n", __FUNCTION__);
-
-        rec->is_kml = 1;
-        rec->size = size + size_round(le32_to_cpu(pathlen)) + 
-                size_round(le32_to_cpu(srcpathlen));
-
-        logrecord = journal_log_prefix(record, opcode, rec);
-        logrecord = log_version(logrecord, tgt_dir_ver);
-        logrecord = log_dentry_version(logrecord, tgt->d_parent);
-        logrecord = log_version(logrecord, new_link_ver);
-        logrecord = logit(logrecord, &srcpathlen, sizeof(srcpathlen));
-        logrecord = logit(logrecord, &pathlen, sizeof(pathlen));
-        logrecord = journal_log_suffix(logrecord, record, fset, tgt, rec);
-
-        error = presto_log(fset, rec, record, size,
-                           srcpath, size_round(le32_to_cpu(srcpathlen)),
-                           path, size_round(le32_to_cpu(pathlen)),
-                           NULL, 0);
-
-        BUFF_FREE(srcbuffer);
-        BUFF_FREE(buffer);
-        EXIT;
-        return error;
-}
-
-
-int presto_journal_rename(struct rec_info *rec, struct presto_file_set *fset,
-                          struct dentry *src, struct dentry *tgt,
-                          struct presto_version *src_dir_ver,
-                          struct presto_version *tgt_dir_ver)
-{
-        int opcode = KML_OPCODE_RENAME;
-        char *buffer, *srcbuffer, *path, *srcpath, *logrecord, record[292];
-        __u32 pathlen, srcpathlen;
-        struct dentry *root;
-        int error, size;
-
-        ENTRY;
-        if ( presto_no_journal(fset) ) {
-                EXIT;
-                return 0;
-        }
-
-        root = fset->fset_dentry;
-
-        BUFF_ALLOC(srcbuffer, NULL);
-        srcpath = presto_path(src, root, srcbuffer, PAGE_SIZE);
-        srcpathlen = cpu_to_le32(MYPATHLEN(srcbuffer, srcpath));
-
-        BUFF_ALLOC(buffer, srcbuffer);
-        path = presto_path(tgt, root, buffer, PAGE_SIZE);
-        pathlen = cpu_to_le32(MYPATHLEN(buffer, path));
-        size =  sizeof(__u32) * current->group_info->ngroups + 
-                sizeof(struct kml_prefix_hdr) + 4 * sizeof(*src_dir_ver) +
-                sizeof(srcpathlen) + sizeof(pathlen) +
-                sizeof(struct kml_suffix);
-
-        if ( size > sizeof(record) )
-                CERROR("InterMezzo: BUFFER OVERFLOW in %s!\n", __FUNCTION__);
-
-        rec->is_kml = 1;
-        rec->size = size + size_round(le32_to_cpu(pathlen)) + 
-                size_round(le32_to_cpu(srcpathlen));
-
-        logrecord = journal_log_prefix(record, opcode, rec);
-        logrecord = log_version(logrecord, src_dir_ver);
-        logrecord = log_dentry_version(logrecord, src->d_parent);
-        logrecord = log_version(logrecord, tgt_dir_ver);
-        logrecord = log_dentry_version(logrecord, tgt->d_parent);
-        logrecord = logit(logrecord, &srcpathlen, sizeof(srcpathlen));
-        logrecord = logit(logrecord, &pathlen, sizeof(pathlen));
-        logrecord = journal_log_suffix(logrecord, record, fset, tgt, rec);
-
-        error = presto_log(fset, rec, record, size,
-                           srcpath, size_round(le32_to_cpu(srcpathlen)),
-                           path, size_round(le32_to_cpu(pathlen)),
-                           NULL, 0);
-
-        BUFF_FREE(buffer);
-        BUFF_FREE(srcbuffer);
-        EXIT;
-        return error;
-}
-
-int presto_journal_unlink(struct rec_info *rec, struct presto_file_set *fset,
-                          struct dentry *dir, struct presto_version *tgt_dir_ver,
-                          struct presto_version *old_file_ver,
-                          struct izo_rollback_data *rb, struct dentry *dentry,
-                          char *old_target, int old_targetlen)
-{
-        int opcode = KML_OPCODE_UNLINK;
-        char *buffer, *path, *logrecord, record[316];
-        const char *name;
-        __u32 pathlen, llen;
-        struct dentry *root;
-        int error, size, len;
-
-        ENTRY;
-        if ( presto_no_journal(fset) ) {
-                EXIT;
-                return 0;
-        }
-
-        root = fset->fset_dentry;
-
-        name = dentry->d_name.name;
-        len = dentry->d_name.len;
-
-        llen = cpu_to_le32(len);
-        BUFF_ALLOC(buffer, NULL);
-        path = presto_path(dir, root, buffer, PAGE_SIZE);
-        pathlen = cpu_to_le32(MYPATHLEN(buffer, path));
-        size = sizeof(__u32) * current->group_info->ngroups + 
-                sizeof(struct kml_prefix_hdr) + 3 * sizeof(*tgt_dir_ver) +
-                sizeof(pathlen) + sizeof(llen) + sizeof(*rb) +
-                sizeof(old_targetlen) + sizeof(struct kml_suffix);
-
-        if ( size > sizeof(record) )
-                CERROR("InterMezzo: BUFFER OVERFLOW in %s!\n", __FUNCTION__);
-
-        rec->is_kml = 1;
-        rec->size = size + size_round(le32_to_cpu(pathlen)) + size_round(len) +
-                size_round(old_targetlen);
-
-        logrecord = journal_log_prefix(record, opcode, rec);
-        logrecord = log_version(logrecord, tgt_dir_ver);
-        logrecord = log_dentry_version(logrecord, dir);
-        logrecord = log_version(logrecord, old_file_ver);
-        logrecord = log_rollback(logrecord, rb);
-        logrecord = logit(logrecord, &pathlen, sizeof(pathlen));
-        logrecord = logit(logrecord, &llen, sizeof(llen));
-        logrecord = logit(logrecord, &old_targetlen, sizeof(old_targetlen));
-        logrecord = journal_log_suffix(logrecord, record, fset, dir, rec);
-
-        error = presto_log(fset, rec, record, size,
-                           path, size_round(le32_to_cpu(pathlen)),
-                           name, size_round(len),
-                           old_target, size_round(old_targetlen));
-
-        BUFF_FREE(buffer);
-        EXIT;
-        return error;
-}
-
-int
-presto_journal_close(struct rec_info *rec, struct presto_file_set *fset,
-                     struct presto_file_data *fd, struct dentry *dentry,
-                     struct presto_version *old_file_ver,
-                     struct presto_version *new_file_ver)
-{
-        int opcode = KML_OPCODE_CLOSE;
-        char *buffer, *path, *logrecord, record[316];
-        struct dentry *root;
-        int error, size, i;
-        __u32 pathlen, generation;
-        __u64 ino;
-        __u32 open_fsuid;
-        __u32 open_fsgid;
-        __u32 open_ngroups;
-        __u32 open_groups[NGROUPS_SMALL];
-        __u32 open_mode;
-        __u32 open_uid;
-        __u32 open_gid;
-
-        ENTRY;
-
-        if ( presto_no_journal(fset) ) {
-                EXIT;
-                return 0;
-        }
-
-        if (!dentry->d_inode || (dentry->d_inode->i_nlink == 0) 
-            || ((dentry->d_parent != dentry) && d_unhashed(dentry))) {
-                EXIT;
-                return 0;
-        }
-
-        root = fset->fset_dentry;
-
-        if (fd) {
-                open_ngroups = fd->fd_ngroups;
-                for (i = 0; i < fd->fd_ngroups; i++)
-                        open_groups[i] = (__u32) fd->fd_groups[i];
-                open_mode = fd->fd_mode;
-                open_uid = fd->fd_uid;
-                open_gid = fd->fd_gid;
-                open_fsuid = fd->fd_fsuid;
-                open_fsgid = fd->fd_fsgid;
-        } else {
-                open_ngroups = current->group_info->ngroups;
-                for (i=0; i<current->group_info->ngroups; i++)
-                        open_groups[i] =  (__u32) GROUP_AT(current->group_info,i); 
-                open_mode = dentry->d_inode->i_mode;
-                open_uid = dentry->d_inode->i_uid;
-                open_gid = dentry->d_inode->i_gid;
-                open_fsuid = current->fsuid;
-                open_fsgid = current->fsgid;
-        }
-        BUFF_ALLOC(buffer, NULL);
-        path = presto_path(dentry, root, buffer, PAGE_SIZE);
-        pathlen = cpu_to_le32(MYPATHLEN(buffer, path));
-        ino = cpu_to_le64(dentry->d_inode->i_ino);
-        generation = cpu_to_le32(dentry->d_inode->i_generation);
-        size =  sizeof(__u32) * open_ngroups +
-                sizeof(open_mode) + sizeof(open_uid) + sizeof(open_gid) +
-                sizeof(struct kml_prefix_hdr) + sizeof(*old_file_ver) +
-                sizeof(*new_file_ver) + sizeof(ino) + sizeof(generation) +
-                sizeof(pathlen) + sizeof(struct kml_suffix);
-
-        if ( size > sizeof(record) )
-                CERROR("InterMezzo: BUFFER OVERFLOW in %s!\n", __FUNCTION__);
-
-        rec->is_kml = 1;
-        rec->size = size + size_round(le32_to_cpu(pathlen));
-
-        logrecord = journal_log_prefix_with_groups_and_ids(
-                record, opcode, rec, open_ngroups, open_groups,
-                open_fsuid, open_fsgid);
-        logrecord = logit(logrecord, &open_mode, sizeof(open_mode));
-        logrecord = logit(logrecord, &open_uid, sizeof(open_uid));
-        logrecord = logit(logrecord, &open_gid, sizeof(open_gid));
-        logrecord = log_version(logrecord, old_file_ver);
-        logrecord = log_version(logrecord, new_file_ver);
-        logrecord = logit(logrecord, &ino, sizeof(ino));
-        logrecord = logit(logrecord, &generation, sizeof(generation));
-        logrecord = logit(logrecord, &pathlen, sizeof(pathlen));
-        logrecord = journal_log_suffix(logrecord, record, fset, dentry, rec);
-
-        error = presto_log(fset, rec, record, size,
-                           path, size_round(le32_to_cpu(pathlen)),
-                           NULL, 0, NULL, 0);
-        BUFF_FREE(buffer);
-
-        EXIT;
-        return error;
-}
-
-int presto_rewrite_close(struct rec_info *rec, struct presto_file_set *fset, 
-                         char *path, __u32 pathlen, 
-                         int ngroups, __u32 *groups, 
-                         __u64 ino,     __u32 generation, 
-                         struct presto_version *new_file_ver)
-{
-        int opcode = KML_OPCODE_CLOSE;
-        char *logrecord, record[292];
-        struct dentry *root;
-        int error, size;
-
-        ENTRY;
-
-        if ( presto_no_journal(fset) ) {
-                EXIT;
-                return 0;
-        }
-
-        root = fset->fset_dentry;
-
-        size =  sizeof(__u32) * ngroups + 
-                sizeof(struct kml_prefix_hdr) + sizeof(*new_file_ver) +
-                sizeof(ino) + sizeof(generation) + 
-                sizeof(le32_to_cpu(pathlen)) +
-                sizeof(struct kml_suffix);
-
-        if ( size > sizeof(record) )
-                CERROR("InterMezzo: BUFFER OVERFLOW in %s!\n", __FUNCTION__);
-
-        rec->is_kml = 1;
-        rec->size = size + size_round(le32_to_cpu(pathlen));
-
-        logrecord = journal_log_prefix_with_groups(record, opcode, rec,
-                                                   ngroups, groups);
-        logrecord = log_version(logrecord, new_file_ver);
-        logrecord = logit(logrecord, &ino, sizeof(ino));
-        logrecord = logit(logrecord, &generation, sizeof(generation));
-        logrecord = logit(logrecord, &pathlen, sizeof(pathlen));
-        logrecord = journal_log_suffix(logrecord, record, fset, NULL, rec);
-
-        error = presto_log(fset, rec, record, size,
-                           path, size_round(le32_to_cpu(pathlen)),
-                           NULL, 0, NULL, 0);
-
-        EXIT;
-        return error;
-}
-
-
-/* write closes for the local close records in the LML */ 
-int presto_complete_lml(struct presto_file_set *fset)
-{
-        __u32 groups[NGROUPS_SMALL];
-        loff_t lml_offset;
-        loff_t read_offset; 
-        char *buffer;
-        void *handle;
-        struct rec_info rec;
-        struct close_rec { 
-                struct presto_version new_file_ver;
-                __u64 ino;
-                __u32 generation;
-                __u32 pathlen;
-                __u64 remote_ino;
-                __u32 remote_generation;
-                __u32 remote_version;
-                __u64 lml_offset;
-        } close_rec; 
-        struct file *file = fset->fset_lml.fd_file;
-        struct kml_prefix_hdr prefix;
-        int rc = 0;
-        ENTRY;
-
-        lml_offset = 0; 
- again: 
-        if (lml_offset >= file->f_dentry->d_inode->i_size) {
-                EXIT;
-                return rc;
-        }
-
-        read_offset = lml_offset;
-        rc = presto_fread(file, (char *)&prefix,
-                          sizeof(prefix), &read_offset);
-        if ( rc != sizeof(prefix) ) {
-                EXIT;
-                CERROR("presto_complete_lml: ioerror - 1, tell Peter\n");
-                return -EIO;
-        }
-
-        if ( prefix.opcode == KML_OPCODE_NOOP ) {
-                lml_offset += prefix.len; 
-                goto again; 
-        }
-
-        rc = presto_fread(file, (char *)groups, 
-                          prefix.ngroups * sizeof(__u32), &read_offset); 
-        if ( rc != prefix.ngroups * sizeof(__u32) ) {
-                EXIT;
-                CERROR("presto_complete_lml: ioerror - 2, tell Peter\n");
-                return -EIO;
-        }
-
-        rc = presto_fread(file, (char *)&close_rec, 
-                          sizeof(close_rec), &read_offset); 
-        if ( rc != sizeof(close_rec) ) {
-                EXIT;
-                CERROR("presto_complete_lml: ioerror - 3, tell Peter\n");
-                return -EIO;
-        }
-
-        /* is this a backfetch or a close record? */ 
-        if ( le64_to_cpu(close_rec.remote_ino) != 0 ) { 
-                lml_offset += prefix.len;
-                goto again; 
-        }
-
-        BUFF_ALLOC(buffer, NULL);
-        rc = presto_fread(file, (char *)buffer, 
-                          le32_to_cpu(close_rec.pathlen), &read_offset); 
-        if ( rc != le32_to_cpu(close_rec.pathlen) ) {
-                EXIT;
-                CERROR("presto_complete_lml: ioerror - 4, tell Peter\n");
-                return -EIO;
-        }
-        
-        handle = presto_trans_start(fset, file->f_dentry->d_inode, 
-                                    KML_OPCODE_RELEASE);
-        if ( IS_ERR(handle) ) {
-                EXIT;
-                return -ENOMEM; 
-        }
-
-        rc = presto_clear_lml_close(fset, lml_offset); 
-        if ( rc ) {
-                CERROR("error during clearing: %d\n", rc);
-                presto_trans_commit(fset, handle);
-                EXIT; 
-                return rc; 
-        }
-
-        rc = presto_rewrite_close(&rec, fset, buffer, close_rec.pathlen, 
-                                  prefix.ngroups, groups, 
-                                  close_rec.ino, close_rec.generation,
-                                  &close_rec.new_file_ver); 
-        if ( rc ) {
-                CERROR("error during rewrite close: %d\n", rc);
-                presto_trans_commit(fset, handle);
-                EXIT; 
-                return rc; 
-        }
-
-        presto_trans_commit(fset, handle); 
-        if ( rc ) { 
-                CERROR("error during truncation: %d\n", rc);
-                EXIT; 
-                return rc;
-        }
-        
-        lml_offset += prefix.len; 
-        CDEBUG(D_JOURNAL, "next LML record at: %ld\n", (long)lml_offset);
-        goto again;
-
-        EXIT;
-        return -EINVAL;
-}
-
-
-#ifdef CONFIG_FS_EXT_ATTR
-/* Journal an ea operation. A NULL buffer implies the attribute is 
- * getting deleted. In this case we simply change the opcode, but nothing
- * else is affected.
- */
-int presto_journal_set_ext_attr (struct rec_info *rec, 
-                                 struct presto_file_set *fset, 
-                                 struct dentry *dentry, 
-                                 struct presto_version *ver, const char *name, 
-                                 const char *buffer, int buffer_len, 
-                                 int flags) 
-{ 
-        int opcode = (buffer == NULL) ? 
-                     KML_OPCODE_DELEXTATTR : 
-                     KML_OPCODE_SETEXTATTR ;
-        char *temp, *path, *logrecord, record[292];
-        struct dentry *root;
-        int error, size;
-        __u32 namelen=cpu_to_le32(strnlen(name,PRESTO_EXT_ATTR_NAME_MAX));
-        __u32 buflen=(buffer != NULL)? cpu_to_le32(buffer_len): cpu_to_le32(0);
-        __u32 mode, pathlen;
-
-        ENTRY;
-        if ( presto_no_journal(fset) ) {
-                EXIT;
-                return 0;
-        }
-
-        if (!dentry->d_inode || (dentry->d_inode->i_nlink == 0) 
-            || ((dentry->d_parent != dentry) && d_unhashed(dentry))) {
-                EXIT;
-                return 0;
-        }
-
-        root = fset->fset_dentry;
-
-        BUFF_ALLOC(temp, NULL);
-        path = presto_path(dentry, root, temp, PAGE_SIZE);
-        pathlen = cpu_to_le32(MYPATHLEN(temp, path));
-
-        flags=cpu_to_le32(flags);
-        /* Ugly, but needed. posix ACLs change the mode without using
-         * setattr, we need to record these changes. The EA code per se
-         * is not really affected.
-         */
-        mode=cpu_to_le32(dentry->d_inode->i_mode);
-
-        size =  sizeof(__u32) * current->group_info->ngroups + 
-                sizeof(struct kml_prefix_hdr) + 
-                2 * sizeof(struct presto_version) +
-                sizeof(flags) + sizeof(mode) + sizeof(namelen) + 
-                sizeof(buflen) + sizeof(pathlen) + 
-                sizeof(struct kml_suffix);
-
-        if ( size > sizeof(record) )
-                CERROR("InterMezzo: BUFFER OVERFLOW in %s!\n", __FUNCTION__);
-
-        rec->is_kml = 1;
-        /* Make space for a path, a attr name and value*/
-        /* We use the buflen instead of buffer_len to make sure that we 
-         * journal the right length. This may be a little paranoid, but
-         * with 64 bits round the corner, I would rather be safe than sorry!
-         * Also this handles deletes with non-zero buffer_lengths correctly.
-         * SHP
-         */
-        rec->size = size + size_round(le32_to_cpu(pathlen)) +
-                    size_round(le32_to_cpu(namelen)) + 
-                    size_round(le32_to_cpu(buflen));
-
-        logrecord = journal_log_prefix(record, opcode, rec);
-        logrecord = log_version(logrecord, ver);
-        logrecord = log_dentry_version(logrecord, dentry);
-        logrecord = logit(logrecord, &flags, sizeof(flags));
-        logrecord = logit(logrecord, &mode, sizeof(flags));
-        logrecord = logit(logrecord, &pathlen, sizeof(pathlen));
-        logrecord = logit(logrecord, &namelen, sizeof(namelen));
-        logrecord = logit(logrecord, &buflen, sizeof(buflen));
-        logrecord = journal_log_suffix(logrecord, record, fset, dentry, rec);
-
-        error = presto_log(fset, rec, record, size,
-                           path, size_round(le32_to_cpu(pathlen)),
-                           name, size_round(le32_to_cpu(namelen)),
-                           buffer, size_round(le32_to_cpu(buflen)));
-
-        BUFF_FREE(temp);
-        EXIT;
-        return error;
-}
-#endif
diff -Nru a/fs/intermezzo/journal_ext2.c b/fs/intermezzo/journal_ext2.c
--- a/fs/intermezzo/journal_ext2.c	Sun May 16 01:18:34 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,90 +0,0 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
- *  Copyright (C) 1998 Peter J. Braam <braam@clusterfs.com>
- *
- *   This file is part of InterMezzo, http://www.inter-mezzo.org.
- *
- *   InterMezzo is free software; you can redistribute it and/or
- *   modify it under the terms of version 2 of the GNU General Public
- *   License as published by the Free Software Foundation.
- *
- *   InterMezzo is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with InterMezzo; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include <linux/types.h>
-#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/fs.h>
-#include <linux/slab.h>
-#include <linux/vmalloc.h>
-#include <linux/stat.h>
-#include <linux/errno.h>
-#include <asm/segment.h>
-#include <asm/uaccess.h>
-#include <linux/string.h>
-#include <linux/ext2_fs.h> 
-
-#include "intermezzo_fs.h"
-#include "intermezzo_psdev.h"
-
-#if defined(CONFIG_EXT2_FS)
-
-/* EXT2 has no journalling, so these functions do nothing */
-static loff_t presto_e2_freespace(struct presto_cache *cache,
-                                         struct super_block *sb)
-{
-        unsigned long freebl = le32_to_cpu(EXT2_SB(sb)->s_es->s_free_blocks_count);
-        unsigned long avail =   freebl - le32_to_cpu(EXT2_SB(sb)->s_es->s_r_blocks_count);
-	return (avail <<  EXT2_BLOCK_SIZE_BITS(sb));
-}
-
-/* start the filesystem journal operations */
-static void *presto_e2_trans_start(struct presto_file_set *fset, struct inode *inode, int op)
-{
-        __u32 avail_kmlblocks;
-
-        if ( presto_no_journal(fset) ||
-             strcmp(fset->fset_cache->cache_type, "ext2"))
-                return NULL;
-
-        avail_kmlblocks = EXT2_SB(inode->i_sb)->s_es->s_free_blocks_count;
-        
-        if ( avail_kmlblocks < 3 ) {
-                return ERR_PTR(-ENOSPC);
-        }
-        
-        if (  (op != KML_OPCODE_UNLINK && op != KML_OPCODE_RMDIR)
-              && avail_kmlblocks < 6 ) {
-                return ERR_PTR(-ENOSPC);
-        }            
-	return (void *) 1;
-}
-
-static void presto_e2_trans_commit(struct presto_file_set *fset, void *handle)
-{
-        do {} while (0);
-}
-
-static int presto_e2_has_all_data(struct inode *inode)
-{
-        BUG();
-        return 0;
-}
-
-struct journal_ops presto_ext2_journal_ops = {
-        .tr_all_data            = presto_e2_has_all_data,
-        .tr_avail               = presto_e2_freespace,
-        .tr_start               = presto_e2_trans_start,
-        .tr_commit              = presto_e2_trans_commit,
-        .tr_journal_data        = NULL
-};
-
-#endif /* CONFIG_EXT2_FS */
diff -Nru a/fs/intermezzo/journal_ext3.c b/fs/intermezzo/journal_ext3.c
--- a/fs/intermezzo/journal_ext3.c	Sun May 16 01:18:35 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,283 +0,0 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
- *  Copyright (C) 1998 Peter J. Braam <braam@clusterfs.com>
- *  Copyright (C) 2000 Red Hat, Inc.
- *  Copyright (C) 2000 Los Alamos National Laboratory
- *  Copyright (C) 2000 TurboLinux, Inc.
- *  Copyright (C) 2001 Mountain View Data, Inc.
- *  Copyright (C) 2001 Tacit Networks, Inc. <phil@off.net>
- *
- *   This file is part of InterMezzo, http://www.inter-mezzo.org.
- *
- *   InterMezzo is free software; you can redistribute it and/or
- *   modify it under the terms of version 2 of the GNU General Public
- *   License as published by the Free Software Foundation.
- *
- *   InterMezzo is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with InterMezzo; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include <linux/types.h>
-#include <linux/param.h>
-#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/fs.h>
-#include <linux/slab.h>
-#include <linux/vmalloc.h>
-#include <linux/stat.h>
-#include <linux/errno.h>
-#include <asm/segment.h>
-#include <asm/uaccess.h>
-#include <linux/string.h>
-#if defined(CONFIG_EXT3_FS) || defined (CONFIG_EXT3_FS_MODULE)
-#include <linux/jbd.h>
-#include <linux/ext3_fs.h>
-#include <linux/ext3_jbd.h>
-#endif
-
-#include "intermezzo_fs.h"
-#include "intermezzo_psdev.h"
-
-#if defined(CONFIG_EXT3_FS) || defined (CONFIG_EXT3_FS_MODULE)
-
-#define MAX_PATH_BLOCKS(inode) (PATH_MAX >> EXT3_BLOCK_SIZE_BITS((inode)->i_sb))
-#define MAX_NAME_BLOCKS(inode) (NAME_MAX >> EXT3_BLOCK_SIZE_BITS((inode)->i_sb))
-
-/* space requirements: 
-   presto_do_truncate: 
-        used to truncate the KML forward to next fset->chunksize boundary
-          - zero partial block
-          - update inode
-   presto_write_record: 
-        write header (< one block) 
-        write one path (< MAX_PATHLEN) 
-        possibly write another path (< MAX_PATHLEN)
-        write suffix (< one block) 
-   presto_update_last_rcvd
-        write one block
-*/
-
-static loff_t presto_e3_freespace(struct presto_cache *cache,
-                                         struct super_block *sb)
-{
-        loff_t freebl = le32_to_cpu(EXT3_SB(sb)->s_es->s_free_blocks_count);
-        loff_t avail =   freebl - 
-                le32_to_cpu(EXT3_SB(sb)->s_es->s_r_blocks_count);
-        return (avail <<  EXT3_BLOCK_SIZE_BITS(sb));
-}
-
-/* start the filesystem journal operations */
-static void *presto_e3_trans_start(struct presto_file_set *fset, 
-                                   struct inode *inode, 
-                                   int op)
-{
-        int jblocks;
-        int trunc_blks, one_path_blks, extra_path_blks, 
-                extra_name_blks, lml_blks; 
-        __u32 avail_kmlblocks;
-        handle_t *handle;
-
-        if ( presto_no_journal(fset) ||
-             strcmp(fset->fset_cache->cache_type, "ext3"))
-          {
-            CDEBUG(D_JOURNAL, "got cache_type \"%s\"\n",
-                   fset->fset_cache->cache_type);
-            return NULL;
-          }
-
-        avail_kmlblocks = EXT3_SB(inode->i_sb)->s_es->s_free_blocks_count;
-        
-        if ( avail_kmlblocks < 3 ) {
-                return ERR_PTR(-ENOSPC);
-        }
-        
-        if (  (op != KML_OPCODE_UNLINK && op != KML_OPCODE_RMDIR)
-              && avail_kmlblocks < 6 ) {
-                return ERR_PTR(-ENOSPC);
-        }            
-
-        /* Need journal space for:
-             at least three writes to KML (two one block writes, one a path) 
-             possibly a second name (unlink, rmdir)
-             possibly a second path (symlink, rename)
-             a one block write to the last rcvd file 
-        */
-
-        trunc_blks = EXT3_DATA_TRANS_BLOCKS + 1; 
-        one_path_blks = 4*EXT3_DATA_TRANS_BLOCKS + MAX_PATH_BLOCKS(inode) + 3;
-        lml_blks = 4*EXT3_DATA_TRANS_BLOCKS + MAX_PATH_BLOCKS(inode) + 2;
-        extra_path_blks = EXT3_DATA_TRANS_BLOCKS + MAX_PATH_BLOCKS(inode); 
-        extra_name_blks = EXT3_DATA_TRANS_BLOCKS + MAX_NAME_BLOCKS(inode); 
-
-        /* additional blocks appear for "two pathname" operations
-           and operations involving the LML records 
-        */
-        switch (op) {
-        case KML_OPCODE_TRUNC:
-                jblocks = one_path_blks + extra_name_blks + trunc_blks
-                        + EXT3_DELETE_TRANS_BLOCKS; 
-                break;
-        case KML_OPCODE_KML_TRUNC:
-                /* Hopefully this is a little better, but I'm still mostly
-                 * guessing here. */
-                /* unlink 1 */
-                jblocks = extra_name_blks + trunc_blks +
-                        EXT3_DELETE_TRANS_BLOCKS + 2; 
-
-                /* unlink 2 */
-                jblocks += extra_name_blks + trunc_blks +
-                        EXT3_DELETE_TRANS_BLOCKS + 2; 
-
-                /* rename 1 */
-                jblocks += 2 * extra_path_blks + trunc_blks + 
-                        2 * EXT3_DATA_TRANS_BLOCKS + 2 + 3;
-
-                /* rename 2 */
-                jblocks += 2 * extra_path_blks + trunc_blks + 
-                        2 * EXT3_DATA_TRANS_BLOCKS + 2 + 3;
-                break;
-        case KML_OPCODE_RELEASE:
-                /* 
-                jblocks = one_path_blks + lml_blks + 2*trunc_blks; 
-                */
-                jblocks = one_path_blks; 
-                break;
-        case KML_OPCODE_SETATTR:
-                jblocks = one_path_blks + trunc_blks + 1 ; 
-                break;
-        case KML_OPCODE_CREATE:
-                jblocks = one_path_blks + trunc_blks 
-                        + EXT3_DATA_TRANS_BLOCKS + 3 + 2; 
-                break;
-        case KML_OPCODE_LINK:
-                jblocks = one_path_blks + trunc_blks 
-                        + EXT3_DATA_TRANS_BLOCKS + 2; 
-                break;
-        case KML_OPCODE_UNLINK:
-                jblocks = one_path_blks + extra_name_blks + trunc_blks
-                        + EXT3_DELETE_TRANS_BLOCKS + 2; 
-                break;
-        case KML_OPCODE_SYMLINK:
-                jblocks = one_path_blks + extra_path_blks + trunc_blks
-                        + EXT3_DATA_TRANS_BLOCKS + 5; 
-                break;
-        case KML_OPCODE_MKDIR:
-                jblocks = one_path_blks + trunc_blks
-                        + EXT3_DATA_TRANS_BLOCKS + 4 + 2;
-                break;
-        case KML_OPCODE_RMDIR:
-                jblocks = one_path_blks + extra_name_blks + trunc_blks
-                        + EXT3_DELETE_TRANS_BLOCKS + 1; 
-                break;
-        case KML_OPCODE_MKNOD:
-                jblocks = one_path_blks + trunc_blks + 
-                        EXT3_DATA_TRANS_BLOCKS + 3 + 2;
-                break;
-        case KML_OPCODE_RENAME:
-                jblocks = one_path_blks + extra_path_blks + trunc_blks + 
-                        2 * EXT3_DATA_TRANS_BLOCKS + 2 + 3;
-                break;
-        case KML_OPCODE_WRITE:
-                jblocks = one_path_blks; 
-                /*  add this when we can wrap our transaction with 
-                    that of ext3_file_write (ordered writes)
-                    +  EXT3_DATA_TRANS_BLOCKS;
-                */
-                break;
-        default:
-                CDEBUG(D_JOURNAL, "invalid operation %d for journal\n", op);
-                return NULL;
-        }
-
-        CDEBUG(D_JOURNAL, "creating journal handle (%d blocks) for op %d\n",
-               jblocks, op);
-        /* journal_start/stop does not do its own locking while updating
-         * the handle/transaction information. Hence we create our own
-         * critical section to protect these calls. -SHP
-         */
-        lock_kernel();
-        handle = journal_start(EXT3_JOURNAL(inode), jblocks);
-        unlock_kernel();
-        return handle;
-}
-
-static void presto_e3_trans_commit(struct presto_file_set *fset, void *handle)
-{
-        if ( presto_no_journal(fset) || !handle)
-                return;
-
-        /* See comments before journal_start above. -SHP */
-        lock_kernel();
-        journal_stop(handle);
-        unlock_kernel();
-}
-
-static void presto_e3_journal_file_data(struct inode *inode)
-{
-#ifdef EXT3_JOURNAL_DATA_FL
-        EXT3_I(inode)->i_flags |= EXT3_JOURNAL_DATA_FL;
-#else
-#warning You must have a facility to enable journaled writes for recovery!
-#endif
-}
-
-/* The logic here is a slightly modified version of ext3/inode.c:block_to_path
- */
-static int presto_e3_has_all_data(struct inode *inode)
-{
-        int ptrs = EXT3_ADDR_PER_BLOCK(inode->i_sb);
-        int ptrs_bits = EXT3_ADDR_PER_BLOCK_BITS(inode->i_sb);
-        const long direct_blocks = EXT3_NDIR_BLOCKS,
-                indirect_blocks = ptrs,
-                double_blocks = (1 << (ptrs_bits * 2));
-        long block = (inode->i_size + inode->i_sb->s_blocksize - 1) >>
-                inode->i_sb->s_blocksize_bits;
-
-        ENTRY;
-
-        if (inode->i_size == 0) {
-                EXIT;
-                return 1;
-        }
-
-        if (block < direct_blocks) {
-                /* No indirect blocks, no problem. */
-        } else if (block < indirect_blocks + direct_blocks) {
-                block++;
-        } else if (block < double_blocks + indirect_blocks + direct_blocks) {
-                block += 2;
-        } else if (((block - double_blocks - indirect_blocks - direct_blocks)
-                    >> (ptrs_bits * 2)) < ptrs) {
-                block += 3;
-        }
-
-        block *= (inode->i_sb->s_blocksize / 512);
-
-        CDEBUG(D_CACHE, "Need %ld blocks, have %ld.\n", block, inode->i_blocks);
-
-        if (block > inode->i_blocks) {
-                EXIT;
-                return 0;
-        }
-
-        EXIT;
-        return 1;
-}
-
-struct journal_ops presto_ext3_journal_ops = {
-        .tr_all_data     = presto_e3_has_all_data,
-        .tr_avail        = presto_e3_freespace,
-        .tr_start        =  presto_e3_trans_start,
-        .tr_commit       = presto_e3_trans_commit,
-        .tr_journal_data = presto_e3_journal_file_data,
-        .tr_ilookup      = presto_iget_ilookup
-};
-
-#endif /* CONFIG_EXT3_FS */
diff -Nru a/fs/intermezzo/journal_obdfs.c b/fs/intermezzo/journal_obdfs.c
--- a/fs/intermezzo/journal_obdfs.c	Sun May 16 01:18:33 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,193 +0,0 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
- *  Copyright (C) 1998 Peter J. Braam <braam@clusterfs.com>
- *  Copyright (C) 2000 Red Hat, Inc.
- *  Copyright (C) 2000 Los Alamos National Laboratory
- *  Copyright (C) 2000 TurboLinux, Inc.
- *  Copyright (C) 2001 Mountain View Data, Inc.
- *
- *   This file is part of InterMezzo, http://www.inter-mezzo.org.
- *
- *   InterMezzo is free software; you can redistribute it and/or
- *   modify it under the terms of version 2 of the GNU General Public
- *   License as published by the Free Software Foundation.
- *
- *   InterMezzo is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with InterMezzo; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include <linux/types.h>
-#include <linux/param.h>
-#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/fs.h>
-#include <linux/slab.h>
-#include <linux/vmalloc.h>
-#include <linux/stat.h>
-#include <linux/errno.h>
-#include <asm/segment.h>
-#include <asm/uaccess.h>
-#include <linux/string.h>
-#ifdef CONFIG_OBDFS_FS
-#include /usr/src/obd/include/linux/obdfs.h
-#endif
-
-#include "intermezzo_fs.h"
-#include "intermezzo_psdev.h"
-
-#ifdef CONFIG_OBDFS_FS
-
-
-static unsigned long presto_obdfs_freespace(struct presto_file_set *fset,
-                                         struct super_block *sb)
-{
-        return 0x0fffff; 
-}
-
-/* start the filesystem journal operations */
-static void *presto_obdfs_trans_start(struct presto_file_set *fset, 
-                                   struct inode *inode, 
-                                   int op)
-{
-
-        return (void *) 1;
-}
-
-#if 0
-        int jblocks;
-        int trunc_blks, one_path_blks, extra_path_blks, 
-                extra_name_blks, lml_blks; 
-        __u32 avail_kmlblocks;
-
-        if ( presto_no_journal(fset) ||
-             strcmp(fset->fset_cache->cache_type, "ext3"))
-          {
-            CDEBUG(D_JOURNAL, "got cache_type \"%s\"\n",
-                   fset->fset_cache->cache_type);
-            return NULL;
-          }
-
-        avail_kmlblocks = inode->i_sb->u.ext3_sb.s_es->s_free_blocks_count;
-        
-        if ( avail_kmlblocks < 3 ) {
-                return ERR_PTR(-ENOSPC);
-        }
-        
-        if (  (op != PRESTO_OP_UNLINK && op != PRESTO_OP_RMDIR)
-              && avail_kmlblocks < 6 ) {
-                return ERR_PTR(-ENOSPC);
-        }            
-
-        /* Need journal space for:
-             at least three writes to KML (two one block writes, one a path) 
-             possibly a second name (unlink, rmdir)
-             possibly a second path (symlink, rename)
-             a one block write to the last rcvd file 
-        */
-
-        trunc_blks = EXT3_DATA_TRANS_BLOCKS + 1; 
-        one_path_blks = 4*EXT3_DATA_TRANS_BLOCKS + MAX_PATH_BLOCKS(inode) + 3;
-        lml_blks = 4*EXT3_DATA_TRANS_BLOCKS + MAX_PATH_BLOCKS(inode) + 2;
-        extra_path_blks = EXT3_DATA_TRANS_BLOCKS + MAX_PATH_BLOCKS(inode); 
-        extra_name_blks = EXT3_DATA_TRANS_BLOCKS + MAX_NAME_BLOCKS(inode); 
-
-        /* additional blocks appear for "two pathname" operations
-           and operations involving the LML records 
-        */
-        switch (op) {
-        case PRESTO_OP_TRUNC:
-                jblocks = one_path_blks + extra_name_blks + trunc_blks
-                        + EXT3_DELETE_TRANS_BLOCKS; 
-                break;
-        case PRESTO_OP_RELEASE:
-                /* 
-                jblocks = one_path_blks + lml_blks + 2*trunc_blks; 
-                */
-                jblocks = one_path_blks; 
-                break;
-        case PRESTO_OP_SETATTR:
-                jblocks = one_path_blks + trunc_blks + 1 ; 
-                break;
-        case PRESTO_OP_CREATE:
-                jblocks = one_path_blks + trunc_blks 
-                        + EXT3_DATA_TRANS_BLOCKS + 3; 
-                break;
-        case PRESTO_OP_LINK:
-                jblocks = one_path_blks + trunc_blks 
-                        + EXT3_DATA_TRANS_BLOCKS; 
-                break;
-        case PRESTO_OP_UNLINK:
-                jblocks = one_path_blks + extra_name_blks + trunc_blks
-                        + EXT3_DELETE_TRANS_BLOCKS; 
-                break;
-        case PRESTO_OP_SYMLINK:
-                jblocks = one_path_blks + extra_path_blks + trunc_blks
-                        + EXT3_DATA_TRANS_BLOCKS + 5; 
-                break;
-        case PRESTO_OP_MKDIR:
-                jblocks = one_path_blks + trunc_blks
-                        + EXT3_DATA_TRANS_BLOCKS + 4;
-                break;
-        case PRESTO_OP_RMDIR:
-                jblocks = one_path_blks + extra_name_blks + trunc_blks
-                        + EXT3_DELETE_TRANS_BLOCKS; 
-                break;
-        case PRESTO_OP_MKNOD:
-                jblocks = one_path_blks + trunc_blks + 
-                        EXT3_DATA_TRANS_BLOCKS + 3;
-                break;
-        case PRESTO_OP_RENAME:
-                jblocks = one_path_blks + extra_path_blks + trunc_blks + 
-                        2 * EXT3_DATA_TRANS_BLOCKS + 2;
-                break;
-        case PRESTO_OP_WRITE:
-                jblocks = one_path_blks; 
-                /*  add this when we can wrap our transaction with 
-                    that of ext3_file_write (ordered writes)
-                    +  EXT3_DATA_TRANS_BLOCKS;
-                */
-                break;
-        default:
-                CDEBUG(D_JOURNAL, "invalid operation %d for journal\n", op);
-                return NULL;
-        }
-
-        CDEBUG(D_JOURNAL, "creating journal handle (%d blocks)\n", jblocks);
-        return journal_start(EXT3_JOURNAL(inode), jblocks);
-}
-#endif
-
-void presto_obdfs_trans_commit(struct presto_file_set *fset, void *handle)
-{
-#if 0
-        if ( presto_no_journal(fset) || !handle)
-                return;
-
-        journal_stop(handle);
-#endif
-}
-
-void presto_obdfs_journal_file_data(struct inode *inode)
-{
-#ifdef EXT3_JOURNAL_DATA_FL
-        inode->u.ext3_i.i_flags |= EXT3_JOURNAL_DATA_FL;
-#else
-#warning You must have a facility to enable journaled writes for recovery!
-#endif
-}
-
-struct journal_ops presto_obdfs_journal_ops = {
-        .tr_avail        = presto_obdfs_freespace,
-        .tr_start        =  presto_obdfs_trans_start,
-        .tr_commit       = presto_obdfs_trans_commit,
-        .tr_journal_data = presto_obdfs_journal_file_data
-};
-
-#endif
diff -Nru a/fs/intermezzo/journal_reiserfs.c b/fs/intermezzo/journal_reiserfs.c
--- a/fs/intermezzo/journal_reiserfs.c	Sun May 16 01:18:34 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,140 +0,0 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
- *  Copyright (C) 1998 Peter J. Braam <braam@clusterfs.com>
- *  Copyright (C) 2000 Red Hat, Inc.
- *  Copyright (C) 2000 Los Alamos National Laboratory
- *  Copyright (C) 2000 TurboLinux, Inc.
- *  Copyright (C) 2001 Mountain View Data, Inc.
- *
- *   This file is part of InterMezzo, http://www.inter-mezzo.org.
- *
- *   InterMezzo is free software; you can redistribute it and/or
- *   modify it under the terms of version 2 of the GNU General Public
- *   License as published by the Free Software Foundation.
- *
- *   InterMezzo is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with InterMezzo; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include <linux/types.h>
-#include <linux/param.h>
-#include <linux/sched.h>
-#include <linux/fs.h>
-#include <linux/slab.h>
-#include <linux/vmalloc.h>
-#include <linux/stat.h>
-#include <linux/errno.h>
-#include <asm/segment.h>
-#include <asm/uaccess.h>
-#include <linux/string.h>
-#if 0
-#if defined(CONFIG_REISERFS_FS) || defined(CONFIG_REISERFS_FS_MODULE)
-#include <linux/reiserfs_fs.h>
-#include <linux/reiserfs_fs_sb.h>
-#include <linux/reiserfs_fs_i.h>
-#endif
-
-#include "intermezzo_fs.h"
-#include "intermezzo_psdev.h"
-
-#if defined(CONFIG_REISERFS_FS) || defined(CONFIG_REISERFS_FS_MODULE)
-
-
-static loff_t presto_reiserfs_freespace(struct presto_cache *cache,
-                                         struct super_block *sb)
-{
-        struct reiserfs_super_block * rs = SB_DISK_SUPER_BLOCK (sb);
-	loff_t avail;
-
-        avail =   le32_to_cpu(rs->s_free_blocks) * 
-		le16_to_cpu(rs->s_blocksize);
-        return avail; 
-}
-
-/* start the filesystem journal operations */
-static void *presto_reiserfs_trans_start(struct presto_file_set *fset, 
-                                   struct inode *inode, 
-                                   int op)
-{
-	int jblocks;
-        __u32 avail_kmlblocks;
-	struct reiserfs_transaction_handle *th ;
-
-	PRESTO_ALLOC(th, sizeof(*th));
-	if (!th) { 
-		CERROR("presto: No memory for trans handle\n");
-		return NULL;
-	}
-
-        avail_kmlblocks = presto_reiserfs_freespace(fset->fset_cache, 
-						    inode->i_sb);
-        if ( presto_no_journal(fset) ||
-             strcmp(fset->fset_cache->cache_type, "reiserfs"))
-		{
-			CDEBUG(D_JOURNAL, "got cache_type \"%s\"\n",
-			       fset->fset_cache->cache_type);
-			return NULL;
-		}
-
-        if ( avail_kmlblocks < 3 ) {
-                return ERR_PTR(-ENOSPC);
-        }
-        
-        if (  (op != PRESTO_OP_UNLINK && op != PRESTO_OP_RMDIR)
-              && avail_kmlblocks < 6 ) {
-                return ERR_PTR(-ENOSPC);
-        }            
-
-	jblocks = 3 + JOURNAL_PER_BALANCE_CNT * 4;
-        CDEBUG(D_JOURNAL, "creating journal handle (%d blocks)\n", jblocks);
-
-	lock_kernel();
-	journal_begin(th, inode->i_sb, jblocks);
-	unlock_kernel();
-	return th; 
-}
-
-static void presto_reiserfs_trans_commit(struct presto_file_set *fset,
-                                         void *handle)
-{
-	int jblocks;
-	jblocks = 3 + JOURNAL_PER_BALANCE_CNT * 4;
-	
-	lock_kernel();
-	journal_end(handle, fset->fset_cache->cache_sb, jblocks);
-	unlock_kernel();
-	PRESTO_FREE(handle, sizeof(struct reiserfs_transaction_handle));
-}
-
-static void presto_reiserfs_journal_file_data(struct inode *inode)
-{
-#ifdef EXT3_JOURNAL_DATA_FL
-        inode->u.ext3_i.i_flags |= EXT3_JOURNAL_DATA_FL;
-#else
-#warning You must have a facility to enable journaled writes for recovery!
-#endif
-}
-
-static int presto_reiserfs_has_all_data(struct inode *inode)
-{
-        BUG();
-        return 0;
-}
-
-struct journal_ops presto_reiserfs_journal_ops = {
-        .tr_all_data     = presto_reiserfs_has_all_data,
-        .tr_avail        = presto_reiserfs_freespace,
-        .tr_start        = presto_reiserfs_trans_start,
-        .tr_commit       = presto_reiserfs_trans_commit,
-        .tr_journal_data = presto_reiserfs_journal_file_data
-};
-
-#endif
-#endif
diff -Nru a/fs/intermezzo/journal_tmpfs.c b/fs/intermezzo/journal_tmpfs.c
--- a/fs/intermezzo/journal_tmpfs.c	Sun May 16 01:18:36 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,107 +0,0 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
- *  Copyright (C) 1998 Peter J. Braam <braam@clusterfs.com>
- *  Copyright (C) 2000 Red Hat, Inc.
- *  Copyright (C) 2000 Los Alamos National Laboratory
- *  Copyright (C) 2000 TurboLinux, Inc.
- *  Copyright (C) 2001 Mountain View Data, Inc.
- *  Copyright (C) 2001 Tacit Networks, Inc. <phil@off.net>
- *
- *   This file is part of InterMezzo, http://www.inter-mezzo.org.
- *
- *   InterMezzo is free software; you can redistribute it and/or
- *   modify it under the terms of version 2 of the GNU General Public
- *   License as published by the Free Software Foundation.
- *
- *   InterMezzo is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with InterMezzo; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include <linux/types.h>
-#include <linux/param.h>
-#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/fs.h>
-#include <linux/slab.h>
-#include <linux/vmalloc.h>
-#include <linux/stat.h>
-#include <linux/errno.h>
-#include <asm/segment.h>
-#include <asm/uaccess.h>
-#include <linux/string.h>
-#if defined(CONFIG_TMPFS)
-#include <linux/jbd.h>
-#if defined(CONFIG_EXT3)
-#include <linux/ext3_fs.h>
-#include <linux/ext3_jbd.h>
-#endif
-#endif
-
-#include "intermezzo_fs.h"
-#include "intermezzo_psdev.h"
-
-#if defined(CONFIG_TMPFS)
-
-/* space requirements: 
-   presto_do_truncate: 
-        used to truncate the KML forward to next fset->chunksize boundary
-          - zero partial block
-          - update inode
-   presto_write_record: 
-        write header (< one block) 
-        write one path (< MAX_PATHLEN) 
-        possibly write another path (< MAX_PATHLEN)
-        write suffix (< one block) 
-   presto_update_last_rcvd
-        write one block
-*/
-
-static loff_t presto_tmpfs_freespace(struct presto_cache *cache,
-                                         struct super_block *sb)
-{
-        return (1<<30);
-}
-
-/* start the filesystem journal operations */
-static void *presto_tmpfs_trans_start(struct presto_file_set *fset, 
-                                   struct inode *inode, 
-                                   int op)
-{
-        return (void *)1; 
-}
-
-static void presto_tmpfs_trans_commit(struct presto_file_set *fset, void *handle)
-{
-        return;
-}
-
-static void presto_tmpfs_journal_file_data(struct inode *inode)
-{
-        return; 
-}
-
-/* The logic here is a slightly modified version of ext3/inode.c:block_to_path
- */
-static int presto_tmpfs_has_all_data(struct inode *inode)
-{
-        return 0;
-}
-
-struct journal_ops presto_tmpfs_journal_ops = {
-        .tr_all_data            = presto_tmpfs_has_all_data,
-        .tr_avail               = presto_tmpfs_freespace,
-        .tr_start               = presto_tmpfs_trans_start,
-        .tr_commit              = presto_tmpfs_trans_commit,
-        .tr_journal_data        = presto_tmpfs_journal_file_data,
-        .tr_ilookup             = presto_tmpfs_ilookup,
-        .tr_add_ilookup         = presto_add_ilookup_dentry
-};
-
-#endif /* CONFIG_EXT3_FS */
diff -Nru a/fs/intermezzo/journal_xfs.c b/fs/intermezzo/journal_xfs.c
--- a/fs/intermezzo/journal_xfs.c	Sun May 16 01:18:36 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,161 +0,0 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
- *  Copyright (C) 1998 Peter J. Braam <braam@clusterfs.com>
- *
- *   This file is part of InterMezzo, http://www.inter-mezzo.org.
- *
- *   InterMezzo is free software; you can redistribute it and/or
- *   modify it under the terms of version 2 of the GNU General Public
- *   License as published by the Free Software Foundation.
- *
- *   InterMezzo is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with InterMezzo; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include <linux/types.h>
-#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/fs.h>
-#include <linux/slab.h>
-#include <linux/vmalloc.h>
-#include <linux/stat.h>
-#include <linux/errno.h>
-#include <asm/segment.h>
-#include <asm/uaccess.h>
-#include <linux/string.h>
-#if 0
-/* XFS Support not there yet */
-#ifdef CONFIG_FS_XFS
-#include <linux/xfs_fs.h>
-#endif
-#include "intermezzo_fs.h"
-#include "intermezzo_psdev.h"
-#include "intermezzo_journal.h"
-
-#if 0
-
-/* XFS has journalling, but these functions do nothing yet... */
-
-static unsigned long presto_xfs_freespace(struct presto_file_set *fset,
-                                         struct super_block *sb)
-{
-
-#if 0
-        vfs_t *vfsp = LINVFS_GET_VFS(sb);
-        struct statvfs_t stat; 
-        bhv_desc_t *bdp;
-        unsigned long avail; 
-        int rc;
-
-        VFS_STATVFS(vfsp, &stat, NULL, rc);
-        avail = statp.f_bfree;
-
-        return sbp->sb_fdblocks;
-#endif
-        return 0x0fffffff;
-}
-
-
-/* start the filesystem journal operations */
-static void *
-presto_xfs_trans_start(struct presto_file_set *fset,
-		       struct inode *inode, int op)
-{
-	int xfs_op;
-	/* do a free blocks check as in journal_ext3? does anything protect
-	 * the space in that case or can it disappear out from under us
-	 * anyway? */
-	
-/* copied from xfs_trans.h, skipping header maze for now */
-#define XFS_TRANS_SETATTR_NOT_SIZE      1
-#define XFS_TRANS_SETATTR_SIZE          2
-#define XFS_TRANS_INACTIVE              3
-#define XFS_TRANS_CREATE                4
-#define XFS_TRANS_CREATE_TRUNC          5
-#define XFS_TRANS_TRUNCATE_FILE         6
-#define XFS_TRANS_REMOVE                7
-#define XFS_TRANS_LINK                  8
-#define XFS_TRANS_RENAME                9
-#define XFS_TRANS_MKDIR                 10
-#define XFS_TRANS_RMDIR                 11
-#define XFS_TRANS_SYMLINK               12
-
-	/* map the op onto the values for XFS so it can do reservation. if
-	 * we don't have enough info to differentiate between e.g. setattr
-	 * with or without size, what do we do? will it adjust? */
-	switch (op) {
-	case PRESTO_OP_SETATTR:
-		/* or XFS_TRANS_SETATTR_NOT_SIZE? */
-	        xfs_op = XFS_TRANS_SETATTR_SIZE;
-		break;
-	case PRESTO_OP_CREATE:
-		/* or CREATE_TRUNC? */
-		xfs_op = XFS_TRANS_CREATE;
-		break;
-	case PRESTO_OP_LINK:
-		xfs_op = XFS_TRANS_LINK;
-		break;
-	case PRESTO_OP_UNLINK:
-		xfs_op = XFS_TRANS_REMOVE;
-		break;
-	case PRESTO_OP_SYMLINK:
-		xfs_op = XFS_TRANS_SYMLINK;
-		break;
-	case PRESTO_OP_MKDIR:
-		xfs_op = XFS_TRANS_MKDIR;
-		break;
-	case PRESTO_OP_RMDIR:
-		xfs_op = XFS_TRANS_RMDIR;
-		break;
-	case PRESTO_OP_MKNOD:
-		/* XXX can't find an analog for mknod? */
-		xfs_op = XFS_TRANS_CREATE;
-		break;
-	case PRESTO_OP_RENAME:
-		xfs_op = XFS_TRANS_RENAME;
-		break;
-	default:
-		CDEBUG(D_JOURNAL, "invalid operation %d for journal\n", op);
-		return NULL;
-	}
-
-	return xfs_trans_start(inode, xfs_op);
-}
-
-static void presto_xfs_trans_commit(struct presto_file_set *fset, void *handle)
-{
-	/* assert (handle == current->j_handle) */
-	xfs_trans_stop(handle);
-}
-
-static void presto_xfs_journal_file_data(struct inode *inode)
-{
-        return; 
-}
-
-static int presto_xfs_has_all_data(struct inode *inode)
-{
-        BUG();
-        return 0;
-}
-
-struct journal_ops presto_xfs_journal_ops = {
-        .tr_all_data     = presto_xfs_has_all_data,
-        .tr_avail        = presto_xfs_freespace,
-        .tr_start        = presto_xfs_trans_start,
-        .tr_commit       = presto_xfs_trans_commit,
-        .tr_journal_data = presto_xfs_journal_file_data
-};
-
-#endif
-
-
-#endif /* CONFIG_XFS_FS */
-
diff -Nru a/fs/intermezzo/kml.c b/fs/intermezzo/kml.c
--- a/fs/intermezzo/kml.c	Sun May 16 01:18:33 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,194 +0,0 @@
-#include <linux/errno.h>
-#include <linux/slab.h>
-#include <linux/vmalloc.h>
-#include <linux/module.h>
-#include <asm/uaccess.h>
-
-#include "intermezzo_fs.h"
-#include "intermezzo_upcall.h"
-#include "intermezzo_psdev.h"
-#include "intermezzo_kml.h"
-
-static struct presto_file_set * kml_getfset (char *path)
-{
-        return presto_path2fileset(path);
-}
-
-/* Send the KML buffer and related volume info into kernel */
-int begin_kml_reint (struct file *file, unsigned long arg)
-{
-        struct {
-                char *volname;
-                int   namelen;  
-                char *recbuf;
-                int   reclen;     /* int   newpos; */
-        } input;
-        struct kml_fsdata *kml_fsdata = NULL;
-        struct presto_file_set *fset = NULL;
-        char   *path;
-        int    error;
-
-        ENTRY;
-        /* allocate buffer & copy it to kernel space */
-        if (copy_from_user(&input, (char *)arg, sizeof(input))) {
-                EXIT;
-                return -EFAULT;
-        }
-
-        if (input.reclen > kml_fsdata->kml_maxsize)
-                return -ENOMEM; /* we'll find solution to this in the future */
-
-        PRESTO_ALLOC(path, char *, input.namelen + 1);
-        if ( !path ) {
-                EXIT;
-                return -ENOMEM;
-        }
-        if (copy_from_user(path, input.volname, input.namelen)) {
-                PRESTO_FREE(path, input.namelen + 1);
-                EXIT;
-                return -EFAULT;
-        }
-        path[input.namelen] = '\0';
-        fset = kml_getfset (path);
-        PRESTO_FREE(path, input.namelen + 1);
-
-        kml_fsdata = FSET_GET_KMLDATA(fset);
-        /* read the buf from user memory here */
-        if (copy_from_user(kml_fsdata->kml_buf, input.recbuf, input.reclen)) {
-                EXIT;
-                return -EFAULT;
-        }
-        kml_fsdata->kml_len = input.reclen;
-
-        decode_kmlrec (&kml_fsdata->kml_reint_cache,
-                        kml_fsdata->kml_buf, kml_fsdata->kml_len);
-
-        kml_fsdata->kml_reint_current = kml_fsdata->kml_reint_cache.next;
-        kml_fsdata->kml_reintpos = 0;
-        kml_fsdata->kml_count = 0;
-        return 0;
-}
-
-/* DO_KML_REINT  */
-int do_kml_reint (struct file *file, unsigned long arg)
-{
-        struct {
-                char *volname;
-                int   namelen;  
-                char *path;
-                int pathlen;
-                int recno;
-                int offset;
-                int len;
-                int generation;
-                __u64 ino;
-        } input;
-        int error;
-        char   *path;
-        struct kml_rec *close_rec;
-        struct kml_fsdata *kml_fsdata;
-        struct presto_file_set *fset;
-
-        ENTRY;
-        if (copy_from_user(&input, (char *)arg, sizeof(input))) {
-                EXIT;
-                return -EFAULT;
-        }
-        PRESTO_ALLOC(path, char *, input.namelen + 1);
-        if ( !path ) {
-                EXIT;
-                return -ENOMEM;
-        }
-        if (copy_from_user(path, input.volname, input.namelen)) {
-                PRESTO_FREE(path, input.namelen + 1);
-                EXIT;
-                return -EFAULT;
-        }
-        path[input.namelen] = '\0';
-        fset = kml_getfset (path);
-        PRESTO_FREE(path, input.namelen + 1);
-
-        kml_fsdata = FSET_GET_KMLDATA(fset);
-
-        error = kml_reintbuf(kml_fsdata, 
-                fset->fset_mtpt->d_name.name, 
-                &close_rec);
-
-        if (error == KML_CLOSE_BACKFETCH && close_rec != NULL) {
-                struct kml_close *close = &close_rec->rec_kml.close;
-                input.ino = close->ino;
-                input.generation = close->generation;
-                if (strlen (close->path) + 1 < input.pathlen) {
-                        strcpy (input.path, close->path);
-                        input.pathlen = strlen (close->path) + 1;
-                        input.recno = close_rec->rec_tail.recno;
-                        input.offset = close_rec->rec_kml_offset;
-                        input.len = close_rec->rec_size;
-                        input.generation = close->generation;
-                        input.ino = close->ino;
-                }
-                else {
-                        CDEBUG(D_KML, "KML_DO_REINT::no space to save:%d < %d",
-                                strlen (close->path) + 1, input.pathlen);
-                        error = -ENOMEM;
-                }
-                if (copy_to_user((char *)arg, &input, sizeof (input)))
-			return -EFAULT;
-        }
-        return error;
-}
-
-/* END_KML_REINT */
-int end_kml_reint (struct file *file, unsigned long arg)
-{
-        /* Free KML buffer and related volume info */
-        struct {
-                char *volname;
-                int   namelen;  
-#if 0
-                int   count; 
-                int   newpos; 
-#endif
-        } input;
-        struct presto_file_set *fset = NULL;
-        struct kml_fsdata *kml_fsdata = NULL;
-        int error;
-        char *path;
-
-        ENTRY;
-        if (copy_from_user(&input, (char *)arg, sizeof(input))) { 
-               EXIT;
-               return -EFAULT;
-        }
-
-        PRESTO_ALLOC(path, char *, input.namelen + 1);
-        if ( !path ) {
-                EXIT;
-                return -ENOMEM;
-        }
-        if (copy_from_user(path, input.volname, input.namelen)) {
-        if ( error ) {
-                PRESTO_FREE(path, input.namelen + 1);
-                EXIT;
-                return -EFAULT;
-        }
-        path[input.namelen] = '\0';
-        fset = kml_getfset (path);
-        PRESTO_FREE(path, input.namelen + 1);
-
-        kml_fsdata = FSET_GET_KMLDATA(fset);
-        delete_kmlrec (&kml_fsdata->kml_reint_cache);
-
-        /* kml reint support */
-        kml_fsdata->kml_reint_current = NULL;
-        kml_fsdata->kml_len = 0;
-        kml_fsdata->kml_reintpos = 0;
-        kml_fsdata->kml_count = 0;
-#if 0
-        input.newpos = kml_upc->newpos;
-        input.count = kml_upc->count;
-        if (copy_to_user((char *)arg, &input, sizeof (input)))
-		return -EFAULT;
-#endif
-        return error;
-}
diff -Nru a/fs/intermezzo/kml_decode.c b/fs/intermezzo/kml_decode.c
--- a/fs/intermezzo/kml_decode.c	Sun May 16 01:18:36 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,1016 +0,0 @@
-/*
- * KML Decoding
- *
- * Copryright (C) 1996 Arthur Ma <arthur.ma@mountainviewdata.com> 
- *
- * Copyright (C) 2001 Mountainview Data, Inc.
- */
-#include <linux/module.h>
-#include <linux/errno.h>
-#include <linux/kernel.h>
-#include <linux/major.h>
-#include <linux/slab.h>
-#include <linux/vmalloc.h>
-#include <linux/mm.h>
-#include "intermezzo_fs.h"
-#include "intermezzo_kml.h"
-
-static int size_round (int val);
-static int unpack_create (struct kml_create *rec, char *buf,
-                                int pos, int *rec_offs);
-static int unpack_open (struct kml_open *rec, char *buf,
-                                int pos, int *rec_offs);
-static int unpack_symlink (struct kml_symlink *rec, char *buf,
-                                int pos, int *rec_offs);
-static int unpack_mknod (struct kml_mknod *rec, char *buf,
-                                int pos, int *rec_offs);
-static int unpack_link (struct kml_link *rec, char *buf,
-                                int pos, int *rec_offs);
-static int unpack_rename (struct kml_rename *rec, char *buf,
-                                int pos, int *rec_offs);
-static int unpack_unlink (struct kml_unlink *rec, char *buf,
-                                int pos, int *rec_offs);
-static int unpack_rmdir (struct kml_rmdir *rec, char *buf,
-                                int pos, int *rec_offs);
-static int unpack_setattr (struct kml_setattr *rec, char *buf,
-                                int pos, int *rec_offs);
-static int unpack_close (struct kml_close *rec, char *buf,
-                                int pos, int *rec_offs);
-static int unpack_mkdir (struct kml_mkdir *rec, char *buf,
-                                int pos, int *rec_offs);
-
-#if 0
-static int unpack_endmark (struct kml_endmark *rec, char *buf,
-                                int pos, int *rec_offs);
-static void print_kml_endmark (struct kml_endmark *rec);
-#endif
-
-static int kml_unpack (char *kml_buf, int rec_size, int kml_offset,
-                        struct kml_rec **newrec);
-static char *kml_version (struct presto_version *ver);
-static void print_kml_prefix (struct big_journal_prefix *head);
-static void print_kml_create (struct kml_create *rec);
-static void print_kml_mkdir (struct kml_mkdir *rec);
-static void print_kml_unlink (struct kml_unlink *rec);
-static void print_kml_rmdir (struct kml_rmdir *rec);
-static void print_kml_close (struct kml_close *rec);
-static void print_kml_symlink (struct kml_symlink *rec);
-static void print_kml_rename (struct kml_rename *rec);
-static void print_kml_setattr (struct kml_setattr *rec);
-static void print_kml_link (struct kml_link *rec);
-static void print_kml_mknod (struct kml_mknod *rec);
-static void print_kml_open (struct kml_open *rec);
-static void print_kml_suffix (struct journal_suffix *tail);
-static char *readrec (char *recbuf, int reclen, int pos, int *size);
-
-#define  KML_PREFIX_WORDS           8
-static int kml_unpack (char *kml_buf, int rec_size, int kml_offset, 
-                        struct kml_rec **newrec)
-{
-        struct kml_rec  *rec;
-        char            *p;
-        int             pos, rec_offs;
-        int             error;
-
-        ENTRY;
-        if (rec_size < sizeof (struct journal_prefix) +
-                       sizeof (struct journal_suffix))
-                return -EBADF;
-
-        PRESTO_ALLOC(rec, struct kml_rec *, sizeof (struct kml_rec));
-        if (rec == NULL) {
-                EXIT;
-                return -ENOMEM;
-        }
-        rec->rec_kml_offset = kml_offset;
-        rec->rec_size = rec_size;
-        p = kml_buf;
-        p = dlogit (&rec->rec_head, p, KML_PREFIX_WORDS * sizeof (int));
-        p = dlogit (&rec->rec_head.groups, p, 
-                        sizeof (int) * rec->rec_head.ngroups);
-
-        pos = sizeof (struct journal_prefix) + 
-                        sizeof (int) * rec->rec_head.ngroups;
-        switch (rec->rec_head.opcode)
-        {
-                case KML_CREATE:
-                        error = unpack_create (&rec->rec_kml.create, 
-                                        kml_buf, pos, &rec_offs);
-                        break;
-                case KML_MKDIR:
-                        error = unpack_mkdir (&rec->rec_kml.mkdir, 
-                                        kml_buf, pos, &rec_offs);
-                        break;
-                case KML_UNLINK:
-                        error = unpack_unlink (&rec->rec_kml.unlink, 
-                                        kml_buf, pos, &rec_offs);
-                        break;
-                case KML_RMDIR:
-                        error = unpack_rmdir (&rec->rec_kml.rmdir, 
-                                        kml_buf, pos, &rec_offs);
-                        break;
-                case KML_CLOSE:
-                        error = unpack_close (&rec->rec_kml.close, 
-                                        kml_buf, pos, &rec_offs);
-                        break;
-                case KML_SYMLINK:
-                        error = unpack_symlink (&rec->rec_kml.symlink, 
-                                        kml_buf, pos, &rec_offs);
-                        break;
-                case KML_RENAME:
-                        error = unpack_rename (&rec->rec_kml.rename, 
-                                        kml_buf, pos, &rec_offs);
-                        break;
-                case KML_SETATTR:
-                        error = unpack_setattr (&rec->rec_kml.setattr, 
-                                        kml_buf, pos, &rec_offs);
-                        break;
-                case KML_LINK:
-                        error = unpack_link (&rec->rec_kml.link, 
-                                        kml_buf, pos, &rec_offs);
-                        break;
-                case KML_OPEN:
-                        error = unpack_open (&rec->rec_kml.open, 
-                                        kml_buf, pos, &rec_offs);
-                        break;
-                case KML_MKNOD:
-                        error = unpack_mknod (&rec->rec_kml.mknod, 
-                                        kml_buf, pos, &rec_offs);
-                        break;
-#if 0
-                case KML_ENDMARK:
-                        error = unpack_endmark (&rec->rec_kml.endmark, 
-                                        kml_buf, pos, &rec_offs);
-                        break;
-#endif
-                default:
-                        CDEBUG (D_KML, "wrong opcode::%u\n", 
-                                        rec->rec_head.opcode);
-                        EXIT;
-                        return -EINVAL;
-        } 
-        if (error) {
-                PRESTO_FREE (rec, sizeof (struct kml_rec));
-                return -EINVAL;
-        }
-        p = kml_buf + rec_offs;
-        p = dlogit (&rec->rec_tail, p, sizeof (struct journal_suffix));
-        memset (&rec->kml_optimize, 0, sizeof (struct kml_optimize));
-        *newrec = rec;
-        EXIT;
-        return 0;
-}
-
-static int size_round (int val)
-{
-        return (val + 3) & (~0x3);
-}
-
-static int unpack_create (struct kml_create *rec, char *buf, 
-                                int pos, int *rec_offs)
-{
-        char *p, *q;
-        int unpack_size = 88;
-        int pathlen;
-
-        ENTRY;
-        p = buf + pos;
-        p = dlogit (&rec->old_parentv, p, sizeof (struct presto_version));
-        p = dlogit (&rec->new_parentv, p, sizeof (struct presto_version));
-        p = dlogit (&rec->new_objectv, p, sizeof (struct presto_version));
-        p = dlogit (&rec->mode, p, sizeof (int));
-        p = dlogit (&rec->uid, p, sizeof (int));
-        p = dlogit (&rec->gid, p, sizeof (int));
-        p = dlogit (&pathlen, p, sizeof (int));
-
-        PRESTO_ALLOC(q, char *, pathlen + 1);
-        if (q == NULL) {
-                EXIT;
-                return -ENOMEM;
-        }
-
-        memcpy (q, p, pathlen);
-        q[pathlen] = '\0';
-        rec->path = q;
-
-        *rec_offs = pos + unpack_size + size_round(pathlen);
-        EXIT;
-        return 0;
-}
-
-static int unpack_open (struct kml_open *rec, char *buf, 
-                                int pos, int *rec_offs)
-{
-        *rec_offs = pos;
-        return 0;
-}
-
-static int unpack_symlink (struct kml_symlink *rec, char *buf, 
-                                int pos, int *rec_offs)
-{
-        char *p, *q;
-        int unpack_size = 88;
-        int pathlen, targetlen;
-
-        ENTRY;
-        p = buf + pos;
-        p = dlogit (&rec->old_parentv, p, sizeof (struct presto_version));
-        p = dlogit (&rec->new_parentv, p, sizeof (struct presto_version));
-        p = dlogit (&rec->new_objectv, p, sizeof (struct presto_version));
-        p = dlogit (&rec->uid, p, sizeof (int));
-        p = dlogit (&rec->gid, p, sizeof (int));
-        p = dlogit (&pathlen, p, sizeof (int));
-        p = dlogit (&targetlen, p, sizeof (int));
-
-        PRESTO_ALLOC(q, char *, pathlen + 1);
-        if (q == NULL) {
-                EXIT;
-                return -ENOMEM;
-        }
-
-        memcpy (q, p, pathlen);
-        q[pathlen] = '\0';
-        rec->sourcepath = q;
-
-        PRESTO_ALLOC(q, char *, targetlen + 1);
-        if (q == NULL) {
-                PRESTO_FREE (rec->sourcepath, pathlen + 1);
-                EXIT;
-                return -ENOMEM;
-        }
-
-        memcpy (q, p, targetlen);
-        q[targetlen] = '\0';
-        rec->targetpath = q;
-
-        *rec_offs = pos + unpack_size + size_round(pathlen) +
-                        size_round(targetlen);
-        EXIT;
-        return 0;
-}
-
-static int unpack_mknod (struct kml_mknod *rec, char *buf, 
-                                int pos, int *rec_offs)
-{
-        char *p, *q;
-        int unpack_size = 96;
-        int pathlen;
-
-        ENTRY;
-        p = buf + pos;
-        p = dlogit (&rec->old_parentv, p, sizeof (struct presto_version));
-        p = dlogit (&rec->new_parentv, p, sizeof (struct presto_version));
-        p = dlogit (&rec->new_objectv, p, sizeof (struct presto_version));
-        p = dlogit (&rec->mode, p, sizeof (int));
-        p = dlogit (&rec->uid, p, sizeof (int));
-        p = dlogit (&rec->gid, p, sizeof (int));
-        p = dlogit (&rec->major, p, sizeof (int));
-        p = dlogit (&rec->minor, p, sizeof (int));
-        p = dlogit (&pathlen, p, sizeof (int));
-
-        PRESTO_ALLOC(q, char *, pathlen + 1);
-        if (q == NULL) {
-                EXIT;
-                return -ENOMEM;
-        }
-
-        memcpy (q, p, pathlen);
-        q[pathlen] = '\0';
-        rec->path = q;
-
-        *rec_offs = pos + unpack_size + size_round(pathlen);
-        EXIT;
-        return 0;
-}
-
-static int unpack_link (struct kml_link *rec, char *buf, 
-                                int pos, int *rec_offs)
-{
-        char *p, *q;
-        int unpack_size = 80;
-        int pathlen, targetlen;
-
-        ENTRY;
-        p = buf + pos;
-        p = dlogit (&rec->old_parentv, p, sizeof (struct presto_version));
-        p = dlogit (&rec->new_parentv, p, sizeof (struct presto_version));
-        p = dlogit (&rec->new_objectv, p, sizeof (struct presto_version));
-        p = dlogit (&pathlen, p, sizeof (int));
-        p = dlogit (&targetlen, p, sizeof (int));
-
-        PRESTO_ALLOC(q, char *, pathlen + 1);
-        if (q == NULL) {
-                EXIT;
-                return -ENOMEM;
-        }
-
-        memcpy (q, p, pathlen);
-        q[pathlen] = '\0';
-        rec->sourcepath = q;
-        p += size_round (pathlen);
-
-        PRESTO_ALLOC(q, char *, targetlen + 1);
-        if (q == NULL) {
-                PRESTO_FREE (rec->sourcepath, pathlen + 1);
-                EXIT;
-                return -ENOMEM;
-        }
-        memcpy (q, p, targetlen);
-        q[targetlen] = '\0';
-        rec->targetpath = q;
-
-        *rec_offs = pos + unpack_size + size_round(pathlen) +
-                        size_round(targetlen);
-        EXIT;
-        return 0;
-}
-
-static int unpack_rename (struct kml_rename *rec, char *buf, 
-                                int pos, int *rec_offs)
-{
-        char *p, *q;
-        int unpack_size = 104;
-        int pathlen, targetlen;
-
-        ENTRY;
-        p = buf + pos;
-        p = dlogit (&rec->old_objectv, p, sizeof (struct presto_version));
-        p = dlogit (&rec->new_objectv, p, sizeof (struct presto_version));
-        p = dlogit (&rec->new_tgtv, p, sizeof (struct presto_version));
-        p = dlogit (&rec->old_tgtv, p, sizeof (struct presto_version));
-        p = dlogit (&pathlen, p, sizeof (int));
-        p = dlogit (&targetlen, p, sizeof (int));
-
-        PRESTO_ALLOC(q, char *, pathlen + 1);
-        if (q == NULL) {
-                EXIT;
-                return -ENOMEM;
-        }
-
-        memcpy (q, p, pathlen);
-        q[pathlen] = '\0';
-        rec->sourcepath = q;
-        p += size_round (pathlen);
-
-        PRESTO_ALLOC(q, char *, targetlen + 1);
-        if (q == NULL) {
-                PRESTO_FREE (rec->sourcepath, pathlen + 1);
-                EXIT;
-                return -ENOMEM;
-        }
-
-        memcpy (q, p, targetlen);
-        q[targetlen] = '\0';
-        rec->targetpath = q;
-
-        *rec_offs = pos + unpack_size + size_round(pathlen) +
-                        size_round(targetlen);
-        EXIT;
-        return 0;
-}
-
-static int unpack_unlink (struct kml_unlink *rec, char *buf, 
-                                int pos, int *rec_offs)
-{
-        char *p, *q;
-        int unpack_size = 80;
-        int pathlen, targetlen;
-
-        ENTRY;
-        p = buf + pos;
-        p = dlogit (&rec->old_parentv, p, sizeof (struct presto_version));
-        p = dlogit (&rec->new_parentv, p, sizeof (struct presto_version));
-        p = dlogit (&rec->old_tgtv, p, sizeof (struct presto_version));
-        p = dlogit (&pathlen, p, sizeof (int));
-        p = dlogit (&targetlen, p, sizeof (int));
-
-        PRESTO_ALLOC(q, char *, pathlen + 1);
-        if (q == NULL) {
-                EXIT;
-                return -ENOMEM;
-        }
-
-        memcpy (q, p, pathlen);
-        q[pathlen] = '\0';
-        rec->path = q;
-        p += size_round (pathlen);
-
-        PRESTO_ALLOC(q, char *, targetlen + 1);
-        if (q == NULL) {
-                PRESTO_FREE (rec->path, pathlen + 1);
-                EXIT;
-                return -ENOMEM;
-        }
-
-        memcpy (q, p, targetlen);
-        q[targetlen] = '\0';
-        rec->name = q;
-
-        /* fix the presto_journal_unlink problem */
-        *rec_offs = pos + unpack_size + size_round(pathlen) +
-                        size_round(targetlen);
-        EXIT;
-        return 0;
-}
-
-static int unpack_rmdir (struct kml_rmdir *rec, char *buf, 
-                                int pos, int *rec_offs)
-{
-        char *p, *q;
-        int unpack_size = 80;
-        int pathlen, targetlen;
-
-        ENTRY;
-        p = buf + pos;
-        p = dlogit (&rec->old_parentv, p, sizeof (struct presto_version));
-        p = dlogit (&rec->new_parentv, p, sizeof (struct presto_version));
-        p = dlogit (&rec->old_tgtv, p, sizeof (struct presto_version));
-        p = dlogit (&pathlen, p, sizeof (int));
-        p = dlogit (&targetlen, p, sizeof (int));
-
-        PRESTO_ALLOC(q, char *, pathlen + 1);
-        if (q == NULL) {
-                EXIT;
-                return -ENOMEM;
-        }
-
-        memcpy (q, p, pathlen);
-        q[pathlen] = '\0';
-        rec->path = q;
-        p += size_round (pathlen);
-
-        PRESTO_ALLOC(q, char *, targetlen + 1);
-        if (q == NULL) {
-                PRESTO_FREE (rec->path, pathlen + 1);
-                EXIT;
-                return -ENOMEM;
-        }
-        memcpy (q, p, targetlen);
-        q[targetlen] = '\0';
-        rec->name = q;
-
-        *rec_offs = pos + unpack_size + size_round(pathlen) +
-                        size_round(targetlen);
-        EXIT;
-        return 0;
-}
-
-static int unpack_setattr (struct kml_setattr *rec, char *buf, 
-                                int pos, int *rec_offs)
-{
-        char *p, *q;
-        int unpack_size = 72;
-        struct kml_attr {
-                __u64   size, mtime, ctime;
-        } objattr;
-        int     valid, mode, uid, gid, flags;
-        int pathlen;
-
-        ENTRY;
-        p = buf + pos;
-        p = dlogit (&rec->old_objectv, p, sizeof (struct presto_version));
-        p = dlogit (&valid, p, sizeof (int));
-        p = dlogit (&mode, p, sizeof (int));
-        p = dlogit (&uid, p, sizeof (int));
-        p = dlogit (&gid, p, sizeof (int));
-        p = dlogit (&objattr, p, sizeof (struct kml_attr));
-        p = dlogit (&flags, p, sizeof (int));
-        p = dlogit (&pathlen, p, sizeof (int));
-
-        rec->iattr.ia_valid = valid;
-        rec->iattr.ia_mode = mode;
-        rec->iattr.ia_uid = uid;
-        rec->iattr.ia_gid = gid;
-        rec->iattr.ia_size = objattr.size;
-        rec->iattr.ia_mtime = objattr.mtime;
-        rec->iattr.ia_ctime = objattr.ctime;
-        rec->iattr.ia_atime = 0;
-        rec->iattr.ia_attr_flags = flags;
-
-        PRESTO_ALLOC(q, char *, pathlen + 1);
-        if (q == NULL) {
-                EXIT;
-                return -ENOMEM;
-        }
-        memcpy (q, p, pathlen);
-        q[pathlen] = '\0';
-        rec->path = q;
-        p += pathlen;
-
-        *rec_offs = pos + unpack_size + size_round(pathlen);
-        EXIT;
-        return 0;
-}
-
-static int unpack_close (struct kml_close *rec, char *buf, 
-                                int pos, int *rec_offs)
-{
-        char *p, *q;
-        int unpack_size = 52;
-        int pathlen;
-
-        ENTRY;
-        p = buf + pos;
-        p = dlogit (&rec->open_mode, p, sizeof (int));
-        p = dlogit (&rec->open_uid, p, sizeof (int));
-        p = dlogit (&rec->open_gid, p, sizeof (int));
-        p = dlogit (&rec->new_objectv, p, sizeof (struct presto_version));
-        p = dlogit (&rec->ino, p, sizeof (__u64));
-        p = dlogit (&rec->generation, p, sizeof (int));
-        p = dlogit (&pathlen, p, sizeof (int));
-
-        PRESTO_ALLOC(q, char *, pathlen + 1);
-        if (q == NULL) {
-                EXIT;
-                return -ENOMEM;
-        }
-
-        memcpy (q, p, pathlen);
-        q[pathlen] = '\0';
-        rec->path = q;
-        p += pathlen;
-
-        *rec_offs = pos + unpack_size + size_round(pathlen);
-        EXIT;
-        return 0;
-}
-
-static int unpack_mkdir (struct kml_mkdir *rec, char *buf, 
-                                int pos, int *rec_offs)
-{
-        char *p, *q;
-        int unpack_size = 88;
-        int pathlen;
-
-        ENTRY;
-        p = buf + pos;
-        p = dlogit (&rec->old_parentv, p, sizeof (struct presto_version));
-        p = dlogit (&rec->new_parentv, p, sizeof (struct presto_version));
-        p = dlogit (&rec->new_objectv, p, sizeof (struct presto_version));
-        p = dlogit (&rec->mode, p, sizeof (int));
-        p = dlogit (&rec->uid, p, sizeof (int));
-        p = dlogit (&rec->gid, p, sizeof (int));
-        p = dlogit (&pathlen, p, sizeof (int));
-
-        PRESTO_ALLOC(q, char *, pathlen + 1);
-        if (q == NULL) {
-                EXIT;
-                return -ENOMEM;
-        }
-
-        memcpy (q, p, pathlen);
-        q[pathlen] = '\0';
-        rec->path = q;
-        p += pathlen;
-
-        *rec_offs = pos + unpack_size + size_round(pathlen);
-        EXIT;
-        return 0;
-}
-
-#if 0
-static int unpack_endmark (struct kml_endmark *rec, char *buf, 
-                                int pos, int *rec_offs)
-{
-        char *p;
-        p = buf + pos;
-        p = dlogit (&rec->total, p, sizeof (int));
-
-        PRESTO_ALLOC (rec->kop, struct kml_kop_node *, 
-                        sizeof (struct kml_kop_node) * rec->total);
-        if (rec->kop == NULL) {
-                EXIT;
-                return -ENOMEM;
-        }
-
-        p = dlogit (rec->kop, p, sizeof (struct kml_kop_node) * rec->total);
-
-        *rec_offs = pos + sizeof (int) + sizeof (struct kml_kop_node) * rec->total;
-        return 0;
-}
-#endif
-
-static char *kml_version (struct presto_version *ver)
-{
-        static char buf[256];
-        sprintf (buf, "mt::%lld, ct::%lld, size::%lld",
-                ver->pv_mtime, ver->pv_ctime, ver->pv_size); 
-        return buf;
-}
-
-static void print_kml_prefix (struct big_journal_prefix *head)
-{
-        int i;
-
-        CDEBUG (D_KML, " === KML PREFIX\n");
-        CDEBUG (D_KML, "     len        = %u\n", head->len);
-        CDEBUG (D_KML, "     version    = %u\n", head->version);
-        CDEBUG (D_KML, "     pid        = %u\n", head->pid);
-        CDEBUG (D_KML, "     uid        = %u\n", head->uid);
-        CDEBUG (D_KML, "     fsuid      = %u\n", head->fsuid);
-        CDEBUG (D_KML, "     fsgid      = %u\n", head->fsgid);
-        CDEBUG (D_KML, "     opcode     = %u\n", head->opcode);
-        CDEBUG (D_KML, "     ngroup     = %u",  head->ngroups);
-        for (i = 0; i < head->ngroups; i++)
-                CDEBUG (D_KML, "%u  ",  head->groups[i]);
-        CDEBUG (D_KML, "\n");
-}
-
-static void print_kml_create (struct kml_create *rec)
-{
-        CDEBUG (D_KML, " === CREATE\n");
-        CDEBUG (D_KML, "     path::%s\n", rec->path);
-        CDEBUG (D_KML, "     new_objv::%s\n", kml_version (&rec->new_objectv));
-        CDEBUG (D_KML, "     old_parv::%s\n", kml_version (&rec->old_parentv));
-        CDEBUG (D_KML, "     new_parv::%s\n", kml_version (&rec->new_parentv));
-        CDEBUG (D_KML, "     mode::%o\n", rec->mode);
-        CDEBUG (D_KML, "     uid::%d\n", rec->uid);
-        CDEBUG (D_KML, "     gid::%d\n", rec->gid);
-}
-
-static void print_kml_mkdir (struct kml_mkdir *rec)
-{
-        CDEBUG (D_KML, " === MKDIR\n");
-        CDEBUG (D_KML, "     path::%s\n", rec->path);
-        CDEBUG (D_KML, "     new_objv::%s\n", kml_version (&rec->new_objectv));
-        CDEBUG (D_KML, "     old_parv::%s\n", kml_version (&rec->old_parentv));
-        CDEBUG (D_KML, "     new_parv::%s\n", kml_version (&rec->new_parentv));
-        CDEBUG (D_KML, "     mode::%o\n", rec->mode);
-        CDEBUG (D_KML, "     uid::%d\n", rec->uid);
-        CDEBUG (D_KML, "     gid::%d\n", rec->gid);
-}
-
-static void print_kml_unlink (struct kml_unlink *rec)
-{
-        CDEBUG (D_KML, " === UNLINK\n");
-        CDEBUG (D_KML, "     path::%s/%s\n", rec->path, rec->name);
-        CDEBUG (D_KML, "     old_tgtv::%s\n", kml_version (&rec->old_tgtv));
-        CDEBUG (D_KML, "     old_parv::%s\n", kml_version (&rec->old_parentv));
-        CDEBUG (D_KML, "     new_parv::%s\n", kml_version (&rec->new_parentv));
-}
-
-static void print_kml_rmdir (struct kml_rmdir *rec)
-{
-        CDEBUG (D_KML, " === RMDIR\n");
-        CDEBUG (D_KML, "     path::%s/%s\n", rec->path, rec->name);
-        CDEBUG (D_KML, "     old_tgtv::%s\n", kml_version (&rec->old_tgtv));
-        CDEBUG (D_KML, "     old_parv::%s\n", kml_version (&rec->old_parentv));
-        CDEBUG (D_KML, "     new_parv::%s\n", kml_version (&rec->new_parentv));
-}
-
-static void print_kml_close (struct kml_close *rec)
-{
-        CDEBUG (D_KML, " === CLOSE\n");
-        CDEBUG (D_KML, "     mode::%o\n", rec->open_mode);
-        CDEBUG (D_KML, "     uid::%d\n", rec->open_uid);
-        CDEBUG (D_KML, "     gid::%d\n", rec->open_gid);
-        CDEBUG (D_KML, "     path::%s\n", rec->path);
-        CDEBUG (D_KML, "     new_objv::%s\n", kml_version (&rec->new_objectv));
-        CDEBUG (D_KML, "     ino::%lld\n", rec->ino);
-        CDEBUG (D_KML, "     gen::%u\n", rec->generation);
-}
-
-static void print_kml_symlink (struct kml_symlink *rec)
-{
-        CDEBUG (D_KML, " === SYMLINK\n");
-        CDEBUG (D_KML, "     s-path::%s\n", rec->sourcepath);
-        CDEBUG (D_KML, "     t-path::%s\n", rec->targetpath);
-        CDEBUG (D_KML, "     old_parv::%s\n", kml_version (&rec->old_parentv));
-        CDEBUG (D_KML, "     new_parv::%s\n", kml_version (&rec->new_parentv));
-        CDEBUG (D_KML, "     new_objv::%s\n", kml_version (&rec->new_objectv));
-        CDEBUG (D_KML, "     uid::%d\n", rec->uid);
-        CDEBUG (D_KML, "     gid::%d\n", rec->gid);
-}
-
-static void print_kml_rename (struct kml_rename *rec)
-{
-        CDEBUG (D_KML, " === RENAME\n");
-        CDEBUG (D_KML, "     s-path::%s\n", rec->sourcepath);
-        CDEBUG (D_KML, "     t-path::%s\n", rec->targetpath);
-        CDEBUG (D_KML, "     old_tgtv::%s\n", kml_version (&rec->old_tgtv));
-        CDEBUG (D_KML, "     new_tgtv::%s\n", kml_version (&rec->new_tgtv));
-        CDEBUG (D_KML, "     new_objv::%s\n", kml_version (&rec->new_objectv));
-        CDEBUG (D_KML, "     old_objv::%s\n", kml_version (&rec->old_objectv));
-}
-
-static void print_kml_setattr (struct kml_setattr *rec)
-{
-        CDEBUG (D_KML, " === SETATTR\n");
-        CDEBUG (D_KML, "     path::%s\n", rec->path);
-        CDEBUG (D_KML, "     old_objv::%s\n", kml_version (&rec->old_objectv));
-        CDEBUG (D_KML, "     valid::0x%x\n", rec->iattr.ia_valid);
-        CDEBUG (D_KML, "     mode::%o\n", rec->iattr.ia_mode);
-        CDEBUG (D_KML, "     uid::%d\n", rec->iattr.ia_uid);
-        CDEBUG (D_KML, "     gid::%d\n", rec->iattr.ia_gid);
-        CDEBUG (D_KML, "     size::%u\n", (u32) rec->iattr.ia_size);
-        CDEBUG (D_KML, "     mtime::%u\n", (u32) rec->iattr.ia_mtime);
-        CDEBUG (D_KML, "     ctime::%u\n", (u32) rec->iattr.ia_ctime);
-        CDEBUG (D_KML, "     flags::%u\n", (u32) rec->iattr.ia_attr_flags);
-}
-
-static void print_kml_link (struct kml_link *rec)
-{
-        CDEBUG (D_KML, " === LINK\n");
-        CDEBUG (D_KML, "     path::%s ==> %s\n", rec->sourcepath, rec->targetpath);
-        CDEBUG (D_KML, "     old_parv::%s\n", kml_version (&rec->old_parentv));
-        CDEBUG (D_KML, "     new_obj::%s\n", kml_version (&rec->new_objectv));
-        CDEBUG (D_KML, "     new_parv::%s\n", kml_version (&rec->new_parentv));
-}
-
-static void print_kml_mknod (struct kml_mknod *rec)
-{
-        CDEBUG (D_KML, " === MKNOD\n");
-        CDEBUG (D_KML, "     path::%s\n", rec->path);
-        CDEBUG (D_KML, "     new_obj::%s\n", kml_version (&rec->new_objectv));
-        CDEBUG (D_KML, "     old_parv::%s\n", kml_version (&rec->old_parentv));
-        CDEBUG (D_KML, "     new_parv::%s\n", kml_version (&rec->new_parentv));
-        CDEBUG (D_KML, "     mode::%o\n", rec->mode);
-        CDEBUG (D_KML, "     uid::%d\n", rec->uid);
-        CDEBUG (D_KML, "     gid::%d\n", rec->gid);
-        CDEBUG (D_KML, "     major::%d\n", rec->major);
-        CDEBUG (D_KML, "     minor::%d\n", rec->minor);
-}
-
-static void print_kml_open (struct kml_open *rec)
-{
-        CDEBUG (D_KML, " === OPEN\n");
-}
-
-#if 0
-static void print_kml_endmark (struct kml_endmark *rec)
-{
-        int i;
-        CDEBUG (D_KML, " === ENDMARK\n");
-        CDEBUG (D_KML, "     total::%u\n", rec->total);
-        for (i = 0; i < rec->total; i++)
-        {       
-                CDEBUG (D_KML, "         recno=%ld::flag=%ld,op=%ld, i_ino=%ld, \
-                        i_nlink=%ld\n", (long) rec->kop[i].kml_recno, 
-                        (long) rec->kop[i].kml_flag, (long) rec->kop[i].kml_op, 
-                        (long) rec->kop[i].i_ino, (long) rec->kop[i].i_nlink);
-        }
-}
-#endif
-
-static void print_kml_optimize (struct kml_optimize  *rec)
-{
-        CDEBUG (D_KML, " === OPTIMIZE\n");
-        if (rec->kml_flag == KML_REC_DELETE)
-                CDEBUG (D_KML, "     kml_flag::deleted\n");
-        else
-                CDEBUG (D_KML, "     kml_flag::exist\n");
-        CDEBUG (D_KML, "     kml_op::%u\n", rec->kml_op);
-        CDEBUG (D_KML, "     i_nlink::%d\n", rec->i_nlink);
-        CDEBUG (D_KML, "     i_ino::%u\n", rec->i_ino);
-}
-
-static void print_kml_suffix (struct journal_suffix *tail)
-{
-        CDEBUG (D_KML, " === KML SUFFIX\n");
-        CDEBUG (D_KML, "     prevrec::%ld\n", tail->prevrec);
-        CDEBUG (D_KML, "     recno::%ld\n", (long) tail->recno);
-        CDEBUG (D_KML, "     time::%d\n", tail->time);
-        CDEBUG (D_KML, "     len::%d\n", tail->len);
-}
-
-void kml_printrec (struct kml_rec *rec, int kml_printop)
-{
-        if (kml_printop & PRINT_KML_PREFIX)
-                print_kml_prefix (&rec->rec_head);
-        if (kml_printop & PRINT_KML_REC) 
-        { 
-                switch (rec->rec_head.opcode)
-                {
-                        case KML_CREATE:
-                                print_kml_create (&rec->rec_kml.create);
-                                break;
-                        case KML_MKDIR:
-                                print_kml_mkdir (&rec->rec_kml.mkdir);
-                                break;
-                        case KML_UNLINK:
-                                print_kml_unlink (&rec->rec_kml.unlink);
-                                break;
-                        case KML_RMDIR:
-                                print_kml_rmdir (&rec->rec_kml.rmdir);
-                                break;
-                        case KML_CLOSE:
-                                print_kml_close (&rec->rec_kml.close);
-                                break;
-                        case KML_SYMLINK:
-                                print_kml_symlink (&rec->rec_kml.symlink);
-                                break;
-                        case KML_RENAME:
-                                print_kml_rename (&rec->rec_kml.rename);
-                                break;
-                        case KML_SETATTR:
-                                print_kml_setattr (&rec->rec_kml.setattr);
-                                break;
-                        case KML_LINK:
-                                print_kml_link (&rec->rec_kml.link);
-                                break;
-                        case KML_OPEN:
-                                print_kml_open (&rec->rec_kml.open);
-                                break;
-                        case KML_MKNOD:
-                                print_kml_mknod (&rec->rec_kml.mknod);
-                                break;
-#if 0
-                        case KML_ENDMARK:
-                                print_kml_endmark (&rec->rec_kml.endmark);
-#endif
-                                break;
-                        default:
-                                CDEBUG (D_KML, " === BAD RECORD, opcode=%u\n",
-                                        rec->rec_head.opcode);
-                                break;
-                }
-        }
-        if (kml_printop & PRINT_KML_SUFFIX)
-                print_kml_suffix (&rec->rec_tail);
-        if (kml_printop & PRINT_KML_OPTIMIZE)
-                print_kml_optimize (&rec->kml_optimize);
-}
-
-void kml_freerec (struct kml_rec *rec)
-{
-        char *sourcepath = NULL,
-             *targetpath = NULL;
-        switch (rec->rec_head.opcode)
-        {
-                case KML_CREATE:
-                        sourcepath = rec->rec_kml.create.path;
-                        break;
-                case KML_MKDIR:
-                        sourcepath = rec->rec_kml.create.path;
-                        break;
-                case KML_UNLINK:
-                        sourcepath = rec->rec_kml.unlink.path;
-                        targetpath = rec->rec_kml.unlink.name;
-                        break;
-                case KML_RMDIR:
-                        sourcepath = rec->rec_kml.rmdir.path;
-                        targetpath = rec->rec_kml.rmdir.name;
-                        break;
-                case KML_CLOSE:
-                        sourcepath = rec->rec_kml.close.path;
-                        break;
-                case KML_SYMLINK:
-                        sourcepath = rec->rec_kml.symlink.sourcepath;
-                        targetpath = rec->rec_kml.symlink.targetpath;
-                        break;
-                case KML_RENAME:
-                        sourcepath = rec->rec_kml.rename.sourcepath;
-                        targetpath = rec->rec_kml.rename.targetpath;
-                        break;
-                case KML_SETATTR:
-                        sourcepath = rec->rec_kml.setattr.path;
-                        break;
-                case KML_LINK:
-                        sourcepath = rec->rec_kml.link.sourcepath;
-                        targetpath = rec->rec_kml.link.targetpath;
-                        break;
-                case KML_OPEN:
-                        break;
-                case KML_MKNOD:
-                        sourcepath = rec->rec_kml.mknod.path;
-                        break;
-#if 0
-                case KML_ENDMARK:
-                        PRESTO_FREE (rec->rec_kml.endmark.kop, sizeof (int) + 
-                                sizeof (struct kml_kop_node) * 
-                                rec->rec_kml.endmark.total);
-#endif
-                        break;
-                default:
-                        break;
-        }
-        if (sourcepath != NULL)
-                PRESTO_FREE (sourcepath, strlen (sourcepath) + 1);
-        if (targetpath != NULL)
-                PRESTO_FREE (targetpath, strlen (targetpath) + 1);
-}
-
-char *readrec (char *recbuf, int reclen, int pos, int *size)
-{
-        char *p = recbuf + pos;
-        *size = *((int *) p);
-        if (*size > (reclen - pos))
-            return NULL;
-        return p; 
-}
-
-int kml_decoderec (char *buf, int pos, int buflen, int *size, 
-                        struct kml_rec **newrec)
-{
-        char *tmp;
-        int  error;
-        tmp = readrec (buf, buflen, pos, size);
-        if (tmp == NULL)
-                return -EBADF;
-        error = kml_unpack (tmp, *size, pos, newrec); 
-        return error;
-}
-
-#if 0
-static void fill_kmlrec_optimize (struct list_head *head, 
-                struct kml_rec *optrec)
-{
-        struct kml_rec *kmlrec;
-        struct list_head *tmp;
-        struct kml_endmark *km;
-        struct kml_optimize *ko;
-        int    n;
-
-        if (optrec->rec_kml.endmark.total == 0)
-                return;
-        n = optrec->rec_kml.endmark.total - 1;
-        tmp = head->prev;
-        km = &optrec->rec_kml.endmark;
-        while ( n >= 0 && tmp != head ) 
-        {
-                kmlrec = list_entry(tmp, struct kml_rec,
-                        kml_optimize.kml_chains);
-                tmp = tmp->prev;
-                if (kmlrec->rec_tail.recno == km->kop[n].kml_recno) 
-                {
-                        ko = &kmlrec->kml_optimize;
-                        ko->kml_flag = km->kop[n].kml_flag;
-                        ko->kml_op   = km->kop[n].kml_op;
-                        ko->i_nlink  = km->kop[n].i_nlink;
-                        ko->i_ino    = km->kop[n].i_ino;
-                        n --;
-                }
-        }
-        if (n != -1)
-                CDEBUG (D_KML, "Yeah!!!, KML optimize error, recno=%d, n=%d\n",
-                        optrec->rec_tail.recno, n);     
-}
-#endif
-
-int decode_kmlrec (struct list_head *head, char *kml_buf, int buflen)
-{
-        struct kml_rec *rec;
-        int    pos = 0, size;
-        int    err;
-        while (pos < buflen) {
-                err = kml_decoderec (kml_buf, pos, buflen, &size, &rec);
-                if (err != 0)
-                        break;
-#if 0
-                if (rec->rec_head.opcode == KML_ENDMARK) {
-                        fill_kmlrec_optimize (head, rec);
-                        mark_rec_deleted (rec);
-                }
-#endif
-                list_add_tail (&rec->kml_optimize.kml_chains, head);
-                pos += size;
-        }
-        return err;
-}
-
-int delete_kmlrec (struct list_head *head)
-{
-        struct kml_rec *rec;
-        struct list_head *tmp;
-
-        if (list_empty(head))
-                return 0;
-        tmp = head->next;
-        while ( tmp != head ) {
-                rec = list_entry(tmp, struct kml_rec, 
-                        kml_optimize.kml_chains);
-                tmp = tmp->next;
-                kml_freerec (rec);
-        }
-        INIT_LIST_HEAD(head);
-        return 0;
-}
-
-int print_allkmlrec (struct list_head *head, int printop)
-{
-        struct kml_rec *rec;
-        struct list_head *tmp;
-
-        if (list_empty(head))
-                return 0;
-        tmp = head->next;
-        while ( tmp != head ) {
-                rec = list_entry(tmp, struct kml_rec,
-                        kml_optimize.kml_chains);
-                tmp = tmp->next;
-#if 0
-                if (printop & PRINT_KML_EXIST) {
-                        if (is_deleted_node (rec))
-                                continue;
-                }
-                else if (printop & PRINT_KML_DELETE) {
-                        if (! is_deleted_node (rec))
-                                continue;
-                }
-#endif
-                kml_printrec (rec, printop);
-        }
-        INIT_LIST_HEAD(head);
-        return 0;
-}
-
diff -Nru a/fs/intermezzo/kml_reint.c b/fs/intermezzo/kml_reint.c
--- a/fs/intermezzo/kml_reint.c	Sun May 16 01:18:36 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,647 +0,0 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
- *  Copyright (C) 2001 Cluster File Systems, Inc. <braam@clusterfs.com>
- *
- *   This file is part of InterMezzo, http://www.inter-mezzo.org.
- *
- *   InterMezzo is free software; you can redistribute it and/or
- *   modify it under the terms of version 2 of the GNU General Public
- *   License as published by the Free Software Foundation.
- *
- *   InterMezzo is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with InterMezzo; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * Reintegration of KML records
- *
- */
-
-#include <linux/module.h>
-#include <linux/errno.h>
-#include <linux/fs.h>
-#include <linux/kernel.h>
-#include <linux/major.h>
-#include <linux/slab.h>
-#include <linux/vmalloc.h>
-#include <linux/mm.h>
-#include <asm/uaccess.h>
-#include <asm/pgtable.h>
-#include <asm/mmu_context.h>
-
-#include "intermezzo_fs.h"
-#include "intermezzo_psdev.h"
-
-static void kmlreint_pre_secure(struct kml_rec *rec, struct file *dir,
-                                struct run_ctxt *saved)
-{
-        struct run_ctxt ctxt; 
-        struct presto_dentry_data *dd = presto_d2d(dir->f_dentry);
-        int i;
-
-        ctxt.fsuid = rec->prefix.hdr->fsuid;
-        ctxt.fsgid = rec->prefix.hdr->fsgid;
-        ctxt.fs = KERNEL_DS; 
-        ctxt.pwd = dd->dd_fset->fset_dentry;
-        ctxt.pwdmnt = dd->dd_fset->fset_mnt;
-
-        ctxt.root = ctxt.pwd;
-        ctxt.rootmnt = ctxt.pwdmnt;
-        if (rec->prefix.hdr->ngroups > 0) {
-                ctxt.group_info = groups_alloc(rec->prefix.hdr->ngroups);
-                for (i = 0; i< ctxt.group_info->ngroups; i++) 
-                        GROUP_AT(ctxt.group_info,i)= rec->prefix.groups[i];
-        } else
-                ctxt.group_info = groups_alloc(0);
-
-        push_ctxt(saved, &ctxt);
-}
-
-
-/* Append two strings in a less-retarded fashion. */
-static char * path_join(char *p1, int p1len, char *p2, int p2len)
-{
-        int size = p1len + p2len + 2; /* possibly one extra /, one NULL */
-        char *path;
-
-        path = kmalloc(size, GFP_KERNEL);
-        if (path == NULL)
-                return NULL;
-
-        memcpy(path, p1, p1len);
-        if (path[p1len - 1] != '/') {
-                path[p1len] = '/';
-                p1len++;
-        }
-        memcpy(path + p1len, p2, p2len);
-        path[p1len + p2len] = '\0';
-
-        return path;
-}
-
-static inline int kml_recno_equal(struct kml_rec *rec,
-                                  struct presto_file_set *fset)
-{
-        return (rec->suffix->recno == fset->fset_lento_recno + 1);
-}
-
-static inline int version_equal(struct presto_version *a, struct inode *inode)
-{
-        if (a == NULL)
-                return 1;
-
-        if (inode == NULL) {
-                CERROR("InterMezzo: NULL inode in version_equal()\n");
-                return 0;
-        }
-
-        if (inode->i_mtime.tv_sec == a->pv_mtime_sec &&
-            inode->i_mtime.tv_nsec == a->pv_mtime_nsec &&
-            (S_ISDIR(inode->i_mode) || inode->i_size == a->pv_size))
-                return 1;
-
-        return 0;
-}
-
-static int reint_close(struct kml_rec *rec, struct file *file,
-                       struct lento_vfs_context *given_info)
-{
-        struct run_ctxt saved_ctxt;
-        int error;
-        struct presto_file_set *fset;
-        struct lento_vfs_context info; 
-        ENTRY;
-
-        memcpy(&info, given_info, sizeof(*given_info));
-
-
-        CDEBUG (D_KML, "=====REINT_CLOSE::%s\n", rec->path);
-
-        fset = presto_fset(file->f_dentry);
-        if (fset->fset_flags & FSET_DATA_ON_DEMAND) {
-                struct iattr iattr;
-
-                iattr.ia_valid = ATTR_CTIME | ATTR_MTIME | ATTR_SIZE;
-                iattr.ia_mtime.tv_sec = (time_t)rec->new_objectv->pv_mtime_sec;
-                iattr.ia_mtime.tv_nsec = (time_t)rec->new_objectv->pv_mtime_nsec;
-                iattr.ia_ctime.tv_sec = (time_t)rec->new_objectv->pv_ctime_sec;
-                iattr.ia_ctime.tv_nsec = (time_t)rec->new_objectv->pv_ctime_nsec;
-                iattr.ia_size = (time_t)rec->new_objectv->pv_size;
-
-                /* no kml record, but update last rcvd */
-                /* save fileid in dentry for later backfetch */
-                info.flags |= LENTO_FL_EXPECT | LENTO_FL_SET_DDFILEID;
-                info.remote_ino = rec->ino;
-                info.remote_generation = rec->generation;
-                info.flags &= ~LENTO_FL_KML;
-                kmlreint_pre_secure(rec, file, &saved_ctxt);
-                error = lento_setattr(rec->path, &iattr, &info);
-                pop_ctxt(&saved_ctxt);
-
-                presto_d2d(file->f_dentry)->dd_flags &= ~PRESTO_DATA;
-        } else {
-                int minor = presto_f2m(fset);
-
-                info.updated_time.tv_sec = rec->new_objectv->pv_mtime_sec;
-                info.updated_time.tv_nsec = rec->new_objectv->pv_mtime_nsec;
-                memcpy(&info.remote_version, rec->old_objectv, 
-                       sizeof(*rec->old_objectv));
-                info.remote_ino = rec->ino;
-                info.remote_generation = rec->generation;
-                error = izo_upc_backfetch(minor, rec->path, fset->fset_name,
-                                          &info);
-                if (error) {
-                        CERROR("backfetch error %d\n", error);
-                        /* if file doesn't exist anymore,  then ignore the CLOSE
-                         * and just update the last_rcvd.
-                         */
-                        if (error == ENOENT) {
-                                CDEBUG(D_KML, "manually updating remote offset uuid %s"
-                                       "recno %d offset %Lu\n", info.uuid, info.recno,
-                                       (unsigned long long) info.kml_offset);
-                                error = izo_rcvd_upd_remote(fset, info.uuid, info.recno, info.kml_offset);
-                                if(error)
-                                        CERROR("izo_rcvd_upd_remote error %d\n", error);
-
-                        } 
-                }
-                        
-                /* propagate error to avoid further reint */
-        }
-
-        EXIT;
-        return error;
-}
-
-static int reint_create(struct kml_rec *rec, struct file *dir,
-                        struct lento_vfs_context *info)
-{
-        struct run_ctxt saved_ctxt;
-        int     error;        ENTRY;
-
-        CDEBUG (D_KML, "=====REINT_CREATE::%s\n", rec->path);
-        info->updated_time.tv_sec = rec->new_objectv->pv_ctime_sec;
-        info->updated_time.tv_nsec = rec->new_objectv->pv_ctime_nsec;
-        kmlreint_pre_secure(rec, dir, &saved_ctxt);
-        error = lento_create(rec->path, rec->mode, info);
-        pop_ctxt(&saved_ctxt); 
-
-        EXIT;
-        return error;
-}
-
-static int reint_link(struct kml_rec *rec, struct file *dir,
-                      struct lento_vfs_context *info)
-{
-        struct run_ctxt saved_ctxt;
-        int     error;
-
-        ENTRY;
-
-        CDEBUG (D_KML, "=====REINT_LINK::%s -> %s\n", rec->path, rec->target);
-        info->updated_time.tv_sec = rec->new_objectv->pv_mtime_sec;
-        info->updated_time.tv_nsec = rec->new_objectv->pv_mtime_nsec;
-        kmlreint_pre_secure(rec, dir, &saved_ctxt);
-        error = lento_link(rec->path, rec->target, info);
-        pop_ctxt(&saved_ctxt); 
-
-        EXIT;
-        return error;
-}
-
-static int reint_mkdir(struct kml_rec *rec, struct file *dir,
-                       struct lento_vfs_context *info)
-{
-        struct run_ctxt saved_ctxt;
-        int     error;
-
-        ENTRY;
-
-        CDEBUG (D_KML, "=====REINT_MKDIR::%s\n", rec->path);
-        info->updated_time.tv_sec = rec->new_objectv->pv_ctime_sec;
-        info->updated_time.tv_nsec = rec->new_objectv->pv_ctime_nsec;
-        kmlreint_pre_secure(rec, dir, &saved_ctxt);
-        error = lento_mkdir(rec->path, rec->mode, info);
-        pop_ctxt(&saved_ctxt); 
-
-        EXIT;
-        return error;
-}
-
-static int reint_mknod(struct kml_rec *rec, struct file *dir,
-                       struct lento_vfs_context *info)
-{
-        struct run_ctxt saved_ctxt;
-        int     error;
-	dev_t dev;
-
-        ENTRY;
-
-        CDEBUG (D_KML, "=====REINT_MKNOD::%s\n", rec->path);
-        info->updated_time.tv_sec = rec->new_objectv->pv_ctime_sec;
-        info->updated_time.tv_nsec = rec->new_objectv->pv_ctime_nsec;
-        kmlreint_pre_secure(rec, dir, &saved_ctxt);
-
-        dev = rec->rdev ? old_decode_dev(rec->rdev) : MKDEV(rec->major, rec->minor);
-
-        error = lento_mknod(rec->path, rec->mode, dev, info);
-        pop_ctxt(&saved_ctxt); 
-
-        EXIT;
-        return error;
-}
-
-
-static int reint_noop(struct kml_rec *rec, struct file *dir,
-                      struct lento_vfs_context *info)
-{
-        return 0;
-}
-
-static int reint_rename(struct kml_rec *rec, struct file *dir,
-                        struct lento_vfs_context *info)
-{
-        struct run_ctxt saved_ctxt;
-        int     error;
-
-        ENTRY;
-
-        CDEBUG (D_KML, "=====REINT_RENAME::%s -> %s\n", rec->path, rec->target);
-        info->updated_time.tv_sec = rec->new_objectv->pv_mtime_sec;
-        info->updated_time.tv_nsec = rec->new_objectv->pv_mtime_nsec;
-        kmlreint_pre_secure(rec, dir, &saved_ctxt);
-        error = lento_rename(rec->path, rec->target, info);
-        pop_ctxt(&saved_ctxt); 
-
-        EXIT;
-        return error;
-}
-
-static int reint_rmdir(struct kml_rec *rec, struct file *dir,
-                       struct lento_vfs_context *info)
-{
-        struct run_ctxt saved_ctxt;
-        int     error;
-        char *path;
-
-        ENTRY;
-
-        path = path_join(rec->path, rec->pathlen - 1, rec->target, rec->targetlen);
-        if (path == NULL) {
-                EXIT;
-                return -ENOMEM;
-        }
-
-        CDEBUG (D_KML, "=====REINT_RMDIR::%s\n", path);
-        info->updated_time.tv_sec = rec->new_parentv->pv_mtime_sec;
-        info->updated_time.tv_nsec = rec->new_parentv->pv_mtime_nsec;
-        kmlreint_pre_secure(rec, dir, &saved_ctxt);
-        error = lento_rmdir(path, info);
-        pop_ctxt(&saved_ctxt); 
-
-        kfree(path);
-        EXIT;
-        return error;
-}
-
-static int reint_setattr(struct kml_rec *rec, struct file *dir,
-                         struct lento_vfs_context *info)
-{
-        struct run_ctxt saved_ctxt;
-        struct iattr iattr;
-        int     error;
-
-        ENTRY;
-
-        iattr.ia_valid = rec->valid;
-        iattr.ia_mode  = (umode_t)rec->mode;
-        iattr.ia_uid   = (uid_t)rec->uid;
-        iattr.ia_gid   = (gid_t)rec->gid;
-        iattr.ia_size  = (off_t)rec->size;
-        iattr.ia_ctime.tv_sec = rec->ctime_sec;
-        iattr.ia_ctime.tv_nsec = rec->ctime_nsec;
-        iattr.ia_mtime.tv_sec = rec->mtime_sec;
-        iattr.ia_mtime.tv_nsec = rec->mtime_nsec;
-        iattr.ia_atime = iattr.ia_mtime; /* We don't track atimes. */
-        iattr.ia_attr_flags = rec->flags;
-
-        CDEBUG (D_KML, "=====REINT_SETATTR::%s (%d)\n", rec->path, rec->valid);
-        kmlreint_pre_secure(rec, dir, &saved_ctxt);
-        error = lento_setattr(rec->path, &iattr, info);
-        pop_ctxt(&saved_ctxt); 
-
-        EXIT;
-        return error;
-}
-
-static int reint_symlink(struct kml_rec *rec, struct file *dir,
-                         struct lento_vfs_context *info)
-{
-        struct run_ctxt saved_ctxt;
-        int     error;
-
-        ENTRY;
-
-        CDEBUG (D_KML, "=====REINT_SYMLINK::%s -> %s\n", rec->path, rec->target);
-        info->updated_time.tv_sec = rec->new_objectv->pv_ctime_sec;
-        info->updated_time.tv_nsec = rec->new_objectv->pv_ctime_nsec;
-        kmlreint_pre_secure(rec, dir, &saved_ctxt);
-        error = lento_symlink(rec->target, rec->path, info);
-        pop_ctxt(&saved_ctxt); 
-
-        EXIT;
-        return error;
-}
-
-static int reint_unlink(struct kml_rec *rec, struct file *dir,
-                        struct lento_vfs_context *info)
-{
-        struct run_ctxt saved_ctxt;
-        int     error;
-        char *path;
-
-        ENTRY;
-
-        path = path_join(rec->path, rec->pathlen - 1, rec->target, rec->targetlen);
-        if (path == NULL) {
-                EXIT;
-                return -ENOMEM;
-        }
-
-        CDEBUG (D_KML, "=====REINT_UNLINK::%s\n", path);
-        info->updated_time.tv_sec = rec->new_parentv->pv_mtime_sec;
-        info->updated_time.tv_nsec = rec->new_parentv->pv_mtime_nsec;
-        kmlreint_pre_secure(rec, dir, &saved_ctxt);
-        error = lento_unlink(path, info);
-        pop_ctxt(&saved_ctxt); 
-
-        kfree(path);
-        EXIT;
-        return error;
-}
-
-static int branch_reint_rename(struct presto_file_set *fset, struct kml_rec *rec, 
-                   struct file *dir, struct lento_vfs_context *info,
-                   char * kml_data, __u64 kml_size)
-{
-        int     error;
-
-        ENTRY;
-
-        error = reint_rename(rec, dir, info);
-        if (error == -ENOENT) {
-                /* normal reint failed because path was not found */
-                struct rec_info rec;
-                
-                CDEBUG(D_KML, "saving branch rename kml\n");
-                rec.is_kml = 1;
-                rec.size = kml_size;
-                error = presto_log(fset, &rec, kml_data, kml_size,
-                           NULL, 0, NULL, 0,  NULL, 0);
-                if (error == 0)
-                        error = presto_write_last_rcvd(&rec, fset, info);
-        }
-
-        EXIT;
-        return error;
-}
-
-int branch_reinter(struct presto_file_set *fset, struct kml_rec *rec, 
-                   struct file *dir, struct lento_vfs_context *info,
-                   char * kml_data, __u64 kml_size)
-{
-        int error = 0;
-        int op = rec->prefix.hdr->opcode;
-
-        if (op == KML_OPCODE_CLOSE) {
-                /* regular close and backfetch */
-                error = reint_close(rec, dir, info);
-        } else if  (op == KML_OPCODE_RENAME) {
-                /* rename only if name already exists  */
-                error = branch_reint_rename(fset, rec, dir, info,
-                                            kml_data, kml_size);
-        } else {
-                /* just rewrite kml into branch/kml and update last_rcvd */
-                struct rec_info rec;
-                
-                CDEBUG(D_KML, "Saving branch kml\n");
-                rec.is_kml = 1;
-                rec.size = kml_size;
-                error = presto_log(fset, &rec, kml_data, kml_size,
-                           NULL, 0, NULL, 0,  NULL, 0);
-                if (error == 0)
-                        error = presto_write_last_rcvd(&rec, fset, info);
-        }
-                
-        return error;
-}
-
-typedef int (*reinter_t)(struct kml_rec *rec, struct file *basedir,
-                         struct lento_vfs_context *info);
-
-static reinter_t presto_reinters[KML_OPCODE_NUM] =
-{
-        [KML_OPCODE_CLOSE] = reint_close,
-        [KML_OPCODE_CREATE] = reint_create,
-        [KML_OPCODE_LINK] = reint_link,
-        [KML_OPCODE_MKDIR] = reint_mkdir,
-        [KML_OPCODE_MKNOD] = reint_mknod,
-        [KML_OPCODE_NOOP] = reint_noop,
-        [KML_OPCODE_RENAME] = reint_rename,
-        [KML_OPCODE_RMDIR] = reint_rmdir,
-        [KML_OPCODE_SETATTR] = reint_setattr,
-        [KML_OPCODE_SYMLINK] = reint_symlink,
-        [KML_OPCODE_UNLINK] = reint_unlink,
-};
-
-static inline reinter_t get_reinter(int op)
-{
-        if (op < 0 || op >= sizeof(presto_reinters) / sizeof(reinter_t)) 
-                return NULL; 
-        else 
-                return  presto_reinters[op];
-}
-
-int kml_reint_rec(struct file *dir, struct izo_ioctl_data *data)
-{
-        char *ptr;
-        char *end;
-        struct kml_rec rec;
-        int error = 0;
-        struct lento_vfs_context info;
-        struct presto_cache *cache;
-        struct presto_file_set *fset;
-        struct presto_dentry_data *dd = presto_d2d(dir->f_dentry);
-        int op;
-        reinter_t reinter;
-
-        struct izo_rcvd_rec lr_rec;
-        int off;
-
-        ENTRY;
-
-        error = presto_prep(dir->f_dentry, &cache, &fset);
-        if ( error  ) {
-                CERROR("intermezzo: Reintegration on invalid file\n");
-                return error;
-        }
-
-        if (!dd || !dd->dd_fset || dd->dd_fset->fset_dentry != dir->f_dentry) { 
-                CERROR("intermezzo: reintegration on non-fset root (ino %ld)\n",
-                       dir->f_dentry->d_inode->i_ino);
-                    
-                return -EINVAL;
-        }
-
-        if (data->ioc_plen1 > 64 * 1024) {
-                EXIT;
-                return -ENOSPC;
-        }
-
-        ptr = fset->fset_reint_buf;
-        end = ptr + data->ioc_plen1;
-
-        if (copy_from_user(ptr, data->ioc_pbuf1, data->ioc_plen1)) { 
-                EXIT;
-                error = -EFAULT;
-                goto out;
-        }
-
-        error = kml_unpack(&rec, &ptr, end);
-        if (error) { 
-                EXIT;
-                error = -EFAULT;
-                goto out;
-        }
-
-        off = izo_rcvd_get(&lr_rec, fset, data->ioc_uuid);
-        if (off < 0) {
-                CERROR("No last_rcvd record, setting to 0\n");
-                memset(&lr_rec, 0, sizeof(lr_rec));
-        }
- 
-        data->ioc_kmlsize = ptr - fset->fset_reint_buf;
-
-        if (rec.suffix->recno != lr_rec.lr_remote_recno + 1) {
-                CERROR("KML record number %Lu expected, not %d\n",
-                       (unsigned long long) (lr_rec.lr_remote_recno + 1),
-                       rec.suffix->recno);
-
-#if 0
-                if (!version_check(&rec, dd->dd_fset, &info)) {
-                        /* FIXME: do an upcall to resolve conflicts */
-                        CERROR("intermezzo: would be a conflict!\n");
-                        error = -EINVAL;
-                        EXIT;
-                        goto out;
-                }
-#endif
-        }
-
-        op = rec.prefix.hdr->opcode;
-
-        reinter = get_reinter(op);
-        if (!reinter) { 
-                CERROR("%s: Unrecognized KML opcode %d\n", __FUNCTION__, op);
-                error = -EINVAL;
-                EXIT;
-                goto out;
-        }
-
-        info.kml_offset = data->ioc_offset + data->ioc_kmlsize;
-        info.recno = rec.suffix->recno;
-        info.flags = LENTO_FL_EXPECT;
-        if (data->ioc_flags)
-                info.flags |= LENTO_FL_KML;
-
-        memcpy(info.uuid, data->ioc_uuid, sizeof(info.uuid));
-
-        if (fset->fset_flags & FSET_IS_BRANCH && data->ioc_flags)
-                error = branch_reinter(fset, &rec, dir, &info, fset->fset_reint_buf,
-                                       data->ioc_kmlsize);
-        else 
-                error = reinter(&rec, dir, &info);
- out: 
-        EXIT;
-        return error;
-}
-
-int izo_get_fileid(struct file *dir, struct izo_ioctl_data *data)
-{
-        char *buf = NULL; 
-        char *ptr;
-        char *end;
-        struct kml_rec rec;
-        struct file *file;
-        struct presto_cache *cache;
-        struct presto_file_set *fset;
-        struct presto_dentry_data *dd = presto_d2d(dir->f_dentry);
-        struct run_ctxt saved_ctxt;
-        int     error;
-
-        ENTRY;
-
-        error = presto_prep(dir->f_dentry, &cache, &fset);
-        if ( error  ) {
-                CERROR("intermezzo: Reintegration on invalid file\n");
-                return error;
-        }
-
-        if (!dd || !dd->dd_fset || dd->dd_fset->fset_dentry != dir->f_dentry) { 
-                CERROR("intermezzo: reintegration on non-fset root (ino %ld)\n",
-                       dir->f_dentry->d_inode->i_ino);
-                    
-                return -EINVAL;
-        }
-
-
-        PRESTO_ALLOC(buf, data->ioc_plen1);
-        if (!buf) { 
-                EXIT;
-                return -ENOMEM;
-        }
-        ptr = buf;
-        end = buf + data->ioc_plen1;
-
-        if (copy_from_user(buf, data->ioc_pbuf1, data->ioc_plen1)) { 
-                EXIT;
-                PRESTO_FREE(buf, data->ioc_plen1);
-                return -EFAULT;
-        }
-
-        error = kml_unpack(&rec, &ptr, end);
-        if (error) { 
-                EXIT;
-                PRESTO_FREE(buf, data->ioc_plen1);
-                return -EFAULT;
-        }
-
-        kmlreint_pre_secure(&rec, dir, &saved_ctxt);
-
-        file = filp_open(rec.path, O_RDONLY, 0);
-        if (!file || IS_ERR(file)) { 
-                error = PTR_ERR(file);
-                goto out;
-        }
-        data->ioc_ino = file->f_dentry->d_inode->i_ino;
-        data->ioc_generation = file->f_dentry->d_inode->i_generation; 
-        filp_close(file, 0); 
-
-        CDEBUG(D_FILE, "%s ino %Lx, gen %Lx\n", rec.path,
-               (unsigned long long) data->ioc_ino,
-               (unsigned long long) data->ioc_generation);
-
- out:
-        if (buf) 
-                PRESTO_FREE(buf, data->ioc_plen1);
-        pop_ctxt(&saved_ctxt); 
-        EXIT;
-        return error;
-}
-
-
diff -Nru a/fs/intermezzo/kml_setup.c b/fs/intermezzo/kml_setup.c
--- a/fs/intermezzo/kml_setup.c	Sun May 16 01:18:35 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,58 +0,0 @@
-#include <linux/errno.h>
-#include <linux/slab.h>
-#include <linux/vmalloc.h>
-#include <linux/module.h>
-#include <asm/uaccess.h>
-
-#include "intermezzo_fs.h"
-#include "intermezzo_upcall.h"
-#include "intermezzo_psdev.h"
-#include "intermezzo_kml.h"
-
-int kml_init (struct presto_file_set *fset)
-{
-        struct kml_fsdata *data;
-
-        ENTRY;
-        PRESTO_ALLOC (data, struct kml_fsdata *, sizeof (struct kml_fsdata));
-        if (data == NULL) {
-                EXIT;
-                return -ENOMEM;
-        }
-        INIT_LIST_HEAD (&data->kml_reint_cache);
-        INIT_LIST_HEAD (&data->kml_kop_cache);
-
-        PRESTO_ALLOC (data->kml_buf, char *, KML_REINT_MAXBUF);
-        if (data->kml_buf == NULL) {
-                PRESTO_FREE (data, sizeof (struct kml_fsdata));
-                EXIT;
-                return -ENOMEM;
-        }
-
-        data->kml_maxsize = KML_REINT_MAXBUF;
-        data->kml_len = 0;
-        data->kml_reintpos = 0;
-        data->kml_count = 0;
-        fset->fset_kmldata = data;
-        EXIT;
-        return 0;
-}
-
-int kml_cleanup (struct presto_file_set *fset)
-{
-        struct kml_fsdata *data = fset->fset_kmldata;
-
-        if (data == NULL)
-                return 0;
-
-        fset->fset_kmldata = NULL;
-#if 0
-        kml_sop_cleanup (&data->kml_reint_cache);
-        kml_kop_cleanup (&data->kml_kop_cache);
-#endif
-        PRESTO_FREE (data->kml_buf, KML_REINT_MAXBUF);
-        PRESTO_FREE (data, sizeof (struct kml_fsdata));
-        return 0;
-}
-
-
diff -Nru a/fs/intermezzo/kml_unpack.c b/fs/intermezzo/kml_unpack.c
--- a/fs/intermezzo/kml_unpack.c	Sun May 16 01:18:37 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,712 +0,0 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
- *  Copyright (C) 2001 Cluster File Systems, Inc. <braam@clusterfs.com>
- *
- *   This file is part of InterMezzo, http://www.inter-mezzo.org.
- *
- *   InterMezzo is free software; you can redistribute it and/or
- *   modify it under the terms of version 2 of the GNU General Public
- *   License as published by the Free Software Foundation.
- *
- *   InterMezzo is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with InterMezzo; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * Unpacking of KML records
- *
- */
-
-#ifdef __KERNEL__
-#  include <linux/module.h>
-#  include <linux/errno.h>
-#  include <linux/kernel.h>
-#  include <linux/major.h>
-#  include <linux/sched.h>
-#  include <linux/lp.h>
-#  include <linux/slab.h>
-#  include <linux/ioport.h>
-#  include <linux/fcntl.h>
-#  include <linux/delay.h>
-#  include <linux/skbuff.h>
-#  include <linux/proc_fs.h>
-#  include <linux/vmalloc.h>
-#  include <linux/fs.h>
-#  include <linux/poll.h>
-#  include <linux/init.h>
-#  include <linux/list.h>
-#  include <linux/stat.h>
-#  include <asm/io.h>
-#  include <asm/segment.h>
-#  include <asm/system.h>
-#  include <asm/poll.h>
-#  include <asm/uaccess.h>
-#else
-#  include <time.h>
-#  include <stdio.h>
-#  include <string.h>
-#  include <stdlib.h>
-#  include <errno.h>
-#  include <sys/stat.h>
-#  include <glib.h>
-#endif
-
-#include "intermezzo_lib.h"
-#include "intermezzo_idl.h"
-#include "intermezzo_fs.h"
-
-int kml_unpack_version(struct presto_version **ver, char **buf, char *end) 
-{
-	char *ptr = *buf;
-        struct presto_version *pv;
-
-	UNLOGP(*ver, struct presto_version, ptr, end);
-        pv = *ver;
-        pv->pv_mtime_sec   = NTOH__u32(pv->pv_mtime_sec);
-        pv->pv_mtime_nsec   = NTOH__u32(pv->pv_mtime_nsec);
-        pv->pv_ctime_sec   = NTOH__u32(pv->pv_ctime_sec);
-        pv->pv_ctime_nsec   = NTOH__u32(pv->pv_ctime_nsec);
-        pv->pv_size    = NTOH__u64(pv->pv_size);
-
-	*buf = ptr;
-
-        return 0;
-}
-
-
-static int kml_unpack_noop(struct kml_rec *rec, char **buf, char *end)
-{
-	return 0;
-}
-
- 
-static int kml_unpack_get_fileid(struct kml_rec *rec, char **buf, char *end)
-{
-	char *ptr = *buf;
-
-	LUNLOGV(rec->pathlen, __u32, ptr, end);
-	UNLOGL(rec->path, char, rec->pathlen, ptr, end);
-
-	*buf = ptr;
-	return 0;
-}
-
-static int kml_unpack_create(struct kml_rec *rec, char **buf, char *end)
-{
-	char *ptr = *buf;
-
-	kml_unpack_version(&rec->old_parentv, &ptr, end);
-	kml_unpack_version(&rec->new_parentv, &ptr, end);
-	kml_unpack_version(&rec->new_objectv, &ptr, end);
-	LUNLOGV(rec->mode, __u32, ptr, end);
-	LUNLOGV(rec->uid, __u32, ptr, end);
-	LUNLOGV(rec->gid, __u32, ptr, end);
-	LUNLOGV(rec->pathlen, __u32, ptr, end);
-	UNLOGL(rec->path, char, rec->pathlen, ptr, end);
-
-	*buf = ptr;
-
-	return 0;
-}
-
- 
-static int kml_unpack_mkdir(struct kml_rec *rec, char **buf, char *end)
-{
-	char *ptr = *buf;
-
-	kml_unpack_version(&rec->old_parentv, &ptr, end);
-	kml_unpack_version(&rec->new_parentv, &ptr, end);
-	kml_unpack_version(&rec->new_objectv, &ptr, end);
-	LUNLOGV(rec->mode, __u32, ptr, end);
-	LUNLOGV(rec->uid, __u32, ptr, end);
-	LUNLOGV(rec->gid, __u32, ptr, end);
-	LUNLOGV(rec->pathlen, __u32, ptr, end);
-	UNLOGL(rec->path, char, rec->pathlen, ptr, end);
-
-	*buf = ptr;
-
-	return 0;
-}
-
-
-static int kml_unpack_unlink(struct kml_rec *rec, char **buf, char *end)
-{
-	char *ptr = *buf;
-
-	kml_unpack_version(&rec->old_parentv, &ptr, end);
-	kml_unpack_version(&rec->new_parentv, &ptr, end);
-	kml_unpack_version(&rec->old_objectv, &ptr, end);
-        LUNLOGV(rec->old_mode, __u32, ptr, end);
-        LUNLOGV(rec->old_rdev, __u32, ptr, end);
-        LUNLOGV(rec->old_uid, __u64, ptr, end);
-        LUNLOGV(rec->old_gid, __u64, ptr, end);
-	LUNLOGV(rec->pathlen, __u32, ptr, end);
-	LUNLOGV(rec->targetlen, __u32, ptr, end);
-        LUNLOGV(rec->old_targetlen, __u32, ptr, end);
-	UNLOGL(rec->path, char, rec->pathlen, ptr, end);
-	UNLOGL(rec->target, char, rec->targetlen, ptr, end);
-        UNLOGL(rec->old_target, char, rec->old_targetlen, ptr, end);
-
-	*buf = ptr;
-
-	return 0;
-}
-
-
-static int kml_unpack_rmdir(struct kml_rec *rec, char **buf, char *end)
-{
-	char *ptr = *buf;
-
-	kml_unpack_version(&rec->old_parentv, &ptr, end);
-	kml_unpack_version(&rec->new_parentv, &ptr, end);
-	kml_unpack_version(&rec->old_objectv, &ptr, end);
-        LUNLOGV(rec->old_mode, __u32, ptr, end);
-        LUNLOGV(rec->old_rdev, __u32, ptr, end);
-        LUNLOGV(rec->old_uid, __u64, ptr, end);
-        LUNLOGV(rec->old_gid, __u64, ptr, end);
-	LUNLOGV(rec->pathlen, __u32, ptr, end);
-	LUNLOGV(rec->targetlen, __u32, ptr, end);
-	UNLOGL(rec->path, char, rec->pathlen, ptr, end);
-	UNLOGL(rec->target, char, rec->targetlen, ptr, end);
-
-	*buf = ptr;
-
-	return 0;
-}
-
-
-static int kml_unpack_close(struct kml_rec *rec, char **buf, char *end)
-{
-	char *ptr = *buf;
-
-	LUNLOGV(rec->mode, __u32, ptr, end);  // used for open_mode
-	LUNLOGV(rec->uid, __u32, ptr, end);   // used for open_uid
-	LUNLOGV(rec->gid, __u32, ptr, end);   // used for open_gid
-	kml_unpack_version(&rec->old_objectv, &ptr, end);
-	kml_unpack_version(&rec->new_objectv, &ptr, end);
-	LUNLOGV(rec->ino, __u64, ptr, end);
-	LUNLOGV(rec->generation, __u32, ptr, end);
-	LUNLOGV(rec->pathlen, __u32, ptr, end);
-	UNLOGL(rec->path, char, rec->pathlen, ptr, end);
-
-	*buf = ptr;
-
-	return 0;
-}
-
-
-static int kml_unpack_symlink(struct kml_rec *rec, char **buf, char *end)
-{
-	char *ptr = *buf;
-
-	kml_unpack_version(&rec->old_parentv, &ptr, end);
-	kml_unpack_version(&rec->new_parentv, &ptr, end);
-	kml_unpack_version(&rec->new_objectv, &ptr, end);
-	LUNLOGV(rec->uid, __u32, ptr, end);
-	LUNLOGV(rec->gid, __u32, ptr, end);
-	LUNLOGV(rec->pathlen, __u32, ptr, end);
-	LUNLOGV(rec->targetlen, __u32, ptr, end);
-	UNLOGL(rec->path, char, rec->pathlen, ptr, end);
-	UNLOGL(rec->target, char, rec->targetlen, ptr, end);
-
-	*buf = ptr;
-
-	return 0;
-}
-
-
-static int kml_unpack_rename(struct kml_rec *rec, char **buf, char *end)
-{
-	char *ptr = *buf;
-
-	kml_unpack_version(&rec->old_objectv, &ptr, end);
-	kml_unpack_version(&rec->new_objectv, &ptr, end);
-	kml_unpack_version(&rec->old_parentv, &ptr, end);
-	kml_unpack_version(&rec->new_parentv, &ptr, end);
-	LUNLOGV(rec->pathlen, __u32, ptr, end);
-	LUNLOGV(rec->targetlen, __u32, ptr, end);
-	UNLOGL(rec->path, char, rec->pathlen, ptr, end);
-	UNLOGL(rec->target, char, rec->targetlen, ptr, end);
-
-	*buf = ptr;
-
-	return 0;
-}
-
-
-static int kml_unpack_setattr(struct kml_rec *rec, char **buf, char *end)
-{
-	char *ptr = *buf;
-
-	kml_unpack_version(&rec->old_objectv, &ptr, end);
-	LUNLOGV(rec->valid, __u32, ptr, end);
-	LUNLOGV(rec->mode, __u32, ptr, end);
-	LUNLOGV(rec->uid, __u32, ptr, end);
-	LUNLOGV(rec->gid, __u32, ptr, end);
-	LUNLOGV(rec->size, __u64, ptr, end);
-	LUNLOGV(rec->mtime_sec, __u32, ptr, end);
-	LUNLOGV(rec->mtime_nsec, __u32, ptr, end);
-	LUNLOGV(rec->ctime_sec, __u32, ptr, end);
-	LUNLOGV(rec->ctime_nsec, __u32, ptr, end);
-	LUNLOGV(rec->flags, __u32, ptr, end);
-        LUNLOGV(rec->old_mode, __u32, ptr, end);
-        LUNLOGV(rec->old_rdev, __u32, ptr, end);
-        LUNLOGV(rec->old_uid, __u64, ptr, end);
-        LUNLOGV(rec->old_gid, __u64, ptr, end);
-	LUNLOGV(rec->pathlen, __u32, ptr, end);
-	UNLOGL(rec->path, char, rec->pathlen, ptr, end);
-	
-	*buf = ptr;
-
-	return 0;
-}
-
-
-static int kml_unpack_link(struct kml_rec *rec, char **buf, char *end)
-{
-	char *ptr = *buf;
-
-	kml_unpack_version(&rec->old_parentv, &ptr, end);
-	kml_unpack_version(&rec->new_parentv, &ptr, end);
-	kml_unpack_version(&rec->new_objectv, &ptr, end);
-	LUNLOGV(rec->pathlen, __u32, ptr, end);
-	LUNLOGV(rec->targetlen, __u32, ptr, end);
-	UNLOGL(rec->path, char, rec->pathlen, ptr, end);
-	UNLOGL(rec->target, char, rec->targetlen, ptr, end);
-
-	*buf = ptr;
-
-	return 0;
-}
-
-static int kml_unpack_mknod(struct kml_rec *rec, char **buf, char *end)
-{
-	char *ptr = *buf;
-
-	kml_unpack_version(&rec->old_parentv, &ptr, end);
-	kml_unpack_version(&rec->new_parentv, &ptr, end);
-	kml_unpack_version(&rec->new_objectv, &ptr, end);
-	LUNLOGV(rec->mode, __u32, ptr, end);
-	LUNLOGV(rec->uid, __u32, ptr, end);
-	LUNLOGV(rec->gid, __u32, ptr, end);
-	LUNLOGV(rec->major, __u32, ptr, end);
-	LUNLOGV(rec->minor, __u32, ptr, end);
-	LUNLOGV(rec->pathlen, __u32, ptr, end);
-	UNLOGL(rec->path, char, rec->pathlen, ptr, end);
-
-	*buf = ptr;
-
-	return 0;
-}
-
-
-static int kml_unpack_write(struct kml_rec *rec, char **buf, char *end)
-{
-	printf("NOT IMPLEMENTED");
-	return 0;
-}
-
-
-static int kml_unpack_release(struct kml_rec *rec, char **buf, char *end)
-{
-	printf("NOT IMPLEMENTED");
-	return 0;
-}
-
-
-static int kml_unpack_trunc(struct kml_rec *rec, char **buf, char *end)
-{
-	printf("NOT IMPLEMENTED");
-	return 0;
-}
-
-
-static int kml_unpack_setextattr(struct kml_rec *rec, char **buf, char *end)
-{
-	char *ptr = *buf;
-
-	kml_unpack_version(&rec->old_objectv, &ptr, end);
-	kml_unpack_version(&rec->new_objectv, &ptr, end);
-	LUNLOGV(rec->flags, __u32, ptr, end);
-	LUNLOGV(rec->mode, __u32, ptr, end);
-	LUNLOGV(rec->pathlen, __u32, ptr, end);
-	LUNLOGV(rec->namelen, __u32, ptr, end);
-	LUNLOGV(rec->targetlen, __u32, ptr, end);
-        UNLOGL(rec->path, char, rec->pathlen, ptr, end);
-	UNLOGL(rec->name, char, rec->namelen, ptr, end);
-	UNLOGL(rec->target, char, rec->targetlen, ptr, end);
-
-	*buf = ptr;
-
-	return 0;
-}
-
-
-static int kml_unpack_delextattr(struct kml_rec *rec, char **buf, char *end)
-{
-	char *ptr = *buf;
-
-	kml_unpack_version(&rec->old_objectv, &ptr, end);
-	kml_unpack_version(&rec->new_objectv, &ptr, end);
-	LUNLOGV(rec->flags, __u32, ptr, end);
-	LUNLOGV(rec->mode, __u32, ptr, end);
-	LUNLOGV(rec->pathlen, __u32, ptr, end);
-	LUNLOGV(rec->namelen, __u32, ptr, end);
-	LUNLOGV(rec->targetlen, __u32, ptr, end);
-	UNLOGL(rec->path, char, rec->pathlen, ptr, end);
-	UNLOGL(rec->name, char, rec->namelen, ptr, end);
-
-	*buf = ptr;
-
-	return 0;
-}
-
-static int kml_unpack_open(struct kml_rec *rec, char **buf, char *end)
-{
-	printf("NOT IMPLEMENTED");
-	return 0;
-}
-
-static int kml_unpack_kml_trunc(struct kml_rec *rec, char **buf, char *end)
-{
-
-	printf("NOT IMPLEMENTED");
-	return 0;
-}
-
-
-typedef int (*unpacker)(struct kml_rec *rec, char **buf, char *end);
-
-static unpacker unpackers[KML_OPCODE_NUM] = 
-{
-	[KML_OPCODE_NOOP] = kml_unpack_noop,
-	[KML_OPCODE_CREATE] = kml_unpack_create, 
-	[KML_OPCODE_MKDIR] = kml_unpack_mkdir,
-	[KML_OPCODE_UNLINK] = kml_unpack_unlink,
-	[KML_OPCODE_RMDIR] = kml_unpack_rmdir,
-	[KML_OPCODE_CLOSE] = kml_unpack_close,
-	[KML_OPCODE_SYMLINK] = kml_unpack_symlink,
-	[KML_OPCODE_RENAME] = kml_unpack_rename,
-	[KML_OPCODE_SETATTR] = kml_unpack_setattr,
-	[KML_OPCODE_LINK] = kml_unpack_link,
-	[KML_OPCODE_OPEN] = kml_unpack_open,
-	[KML_OPCODE_MKNOD] = kml_unpack_mknod,
-	[KML_OPCODE_WRITE] = kml_unpack_write,
-	[KML_OPCODE_RELEASE] = kml_unpack_release,
-	[KML_OPCODE_TRUNC] = kml_unpack_trunc,
-	[KML_OPCODE_SETEXTATTR] = kml_unpack_setextattr,
-	[KML_OPCODE_DELEXTATTR] = kml_unpack_delextattr,
-	[KML_OPCODE_KML_TRUNC] = kml_unpack_kml_trunc,
-	[KML_OPCODE_GET_FILEID] = kml_unpack_get_fileid
-};
-
-int kml_unpack_prefix(struct kml_rec *rec, char **buf, char *end) 
-{
-	char *ptr = *buf;
-        int n;
-
-        UNLOGP(rec->prefix.hdr, struct kml_prefix_hdr, ptr, end);
-        rec->prefix.hdr->len     = NTOH__u32(rec->prefix.hdr->len);
-        rec->prefix.hdr->version = NTOH__u32(rec->prefix.hdr->version);
-        rec->prefix.hdr->pid     = NTOH__u32(rec->prefix.hdr->pid);
-        rec->prefix.hdr->auid    = NTOH__u32(rec->prefix.hdr->auid);
-        rec->prefix.hdr->fsuid   = NTOH__u32(rec->prefix.hdr->fsuid);
-        rec->prefix.hdr->fsgid   = NTOH__u32(rec->prefix.hdr->fsgid);
-        rec->prefix.hdr->opcode  = NTOH__u32(rec->prefix.hdr->opcode);
-        rec->prefix.hdr->ngroups = NTOH__u32(rec->prefix.hdr->ngroups);
-
-	UNLOGL(rec->prefix.groups, __u32, rec->prefix.hdr->ngroups, ptr, end);
-        for (n = 0; n < rec->prefix.hdr->ngroups; n++) {
-                rec->prefix.groups[n] = NTOH__u32(rec->prefix.groups[n]);
-        }
-
-	*buf = ptr;
-
-        return 0;
-}
-
-int kml_unpack_suffix(struct kml_rec *rec, char **buf, char *end) 
-{
-	char *ptr = *buf;
-
-	UNLOGP(rec->suffix, struct kml_suffix, ptr, end);
-        rec->suffix->prevrec   = NTOH__u32(rec->suffix->prevrec);
-        rec->suffix->recno    = NTOH__u32(rec->suffix->recno);
-        rec->suffix->time     = NTOH__u32(rec->suffix->time);
-        rec->suffix->len      = NTOH__u32(rec->suffix->len);
-
-	*buf = ptr;
-
-        return 0;
-}
-
-int kml_unpack(struct kml_rec *rec, char **buf, char *end)
-{
-	char *ptr = *buf;
-	int err; 
-
-        if (((unsigned long)ptr % 4) != 0) {
-                printf("InterMezzo: %s: record misaligned.\n", __FUNCTION__);
-                return -EINVAL;
-        }
-
-        while (ptr < end) { 
-                __u32 *i = (__u32 *)ptr;
-                if (*i)
-                        break;
-                ptr += sizeof(*i);
-        }
-	*buf = ptr;
-
-	memset(rec, 0, sizeof(*rec));
-
-        err = kml_unpack_prefix(rec, &ptr, end);
-	if (err) {
-                printf("InterMezzo: %s: unpack_prefix failed: %d\n",
-                       __FUNCTION__, err);
-		return err;
-        }
-
-        if (rec->prefix.hdr->opcode < 0  ||
-            rec->prefix.hdr->opcode >= KML_OPCODE_NUM) {
-                printf("InterMezzo: %s: invalid opcode (%d)\n",
-                       __FUNCTION__, rec->prefix.hdr->opcode);
-		return -EINVAL;
-        }
-	err = unpackers[rec->prefix.hdr->opcode](rec, &ptr, end);
-	if (err) {
-                printf("InterMezzo: %s: unpacker failed: %d\n",
-                       __FUNCTION__, err);
-		return err;
-        }
-
-        err = kml_unpack_suffix(rec, &ptr, end);
-	if (err) {
-                printf("InterMezzo: %s: unpack_suffix failed: %d\n",
-                       __FUNCTION__, err);
-		return err;
-        }
-
-
-	if (rec->prefix.hdr->len != rec->suffix->len) {
-                printf("InterMezzo: %s: lengths don't match\n",
-                       __FUNCTION__);
-		return -EINVAL;
-        }
-        if ((rec->prefix.hdr->len % 4) != 0) {
-                printf("InterMezzo: %s: record length not a "
-                       "multiple of 4.\n", __FUNCTION__);
-                return -EINVAL;
-        }
-        if (ptr - *buf != rec->prefix.hdr->len) {
-                printf("InterMezzo: %s: unpacking error\n",
-                       __FUNCTION__);
-                return -EINVAL;
-        }
-        while (ptr < end) { 
-                __u32 *i = (__u32 *)ptr;
-                if (*i)
-                        break;
-                ptr += sizeof(*i);
-        }
-	*buf = ptr;
-	return 0;
-}
-
-
-#ifndef __KERNEL__
-#define STR(ptr) ((ptr))? (ptr) : ""
-
-#define OPNAME(n) [KML_OPCODE_##n] = #n
-static char *opnames[KML_OPCODE_NUM] = {
-	OPNAME(NOOP),
-	OPNAME(CREATE),
-	OPNAME(MKDIR), 
-	OPNAME(UNLINK),
-	OPNAME(RMDIR),
-	OPNAME(CLOSE),
-	OPNAME(SYMLINK),
-	OPNAME(RENAME),
-	OPNAME(SETATTR),
-	OPNAME(LINK),
-	OPNAME(OPEN),
-	OPNAME(MKNOD),
-	OPNAME(WRITE),
-	OPNAME(RELEASE),
-	OPNAME(TRUNC),
-	OPNAME(SETEXTATTR),
-	OPNAME(DELEXTATTR),
-	OPNAME(KML_TRUNC),
-	OPNAME(GET_FILEID)
-};
-#undef OPNAME
-
-static char *print_opname(int op)
-{
-	if (op < 0 || op >= sizeof (opnames) / sizeof (*opnames))
-		return NULL;
-	return opnames[op];
-}
-
-
-static char *print_time(__u64 i)
-{
-	char buf[128];
-	
-	memset(buf, 0, 128);
-
-#ifndef __KERNEL__
-	strftime(buf, 128, "%Y/%m/%d %H:%M:%S", gmtime((time_t *)&i));
-#else
-	sprintf(buf, "%Ld\n", i);
-#endif
-
-	return strdup(buf);
-}
-
-static char *print_version(struct presto_version *ver)
-{
-	char ver_buf[128];
-	char *mtime;
-	char *ctime;
-
-	if (!ver || ver->pv_ctime == 0) {
-		return strdup("");
-	} 
-	mtime = print_time(ver->pv_mtime);
-	ctime = print_time(ver->pv_ctime);
-	sprintf(ver_buf, "mtime %s, ctime %s, len %lld", 
-		mtime, ctime, ver->pv_size);
-	free(mtime);
-	free(ctime);
-	return strdup(ver_buf);
-}
-
-
-char *kml_print_rec(struct kml_rec *rec, int brief)
-{
-	char *str;
-	char *nov, *oov, *ntv, *otv, *npv, *opv;
-	char *rectime, *mtime, *ctime;
-
-        if (brief) {
-		str = g_strdup_printf(" %08d %7s %*s %*s", 
-                                      rec->suffix->recno,
-                                      print_opname (rec->prefix.hdr->opcode),
-                                      rec->pathlen, STR(rec->path),
-                                      rec->targetlen, STR(rec->target));
-                
-		return str;
-	}
-
-	rectime = print_time(rec->suffix->time);
-	mtime = print_time(rec->mtime);
-	ctime = print_time(rec->ctime);
-
-	nov = print_version(rec->new_objectv);
-	oov = print_version(rec->old_objectv);
-	ntv = print_version(rec->new_targetv);
-	otv = print_version(rec->old_targetv);
-	npv = print_version(rec->new_parentv);
-	opv = print_version(rec->old_parentv);
-
-	str = g_strdup_printf("\n -- Record:\n"
-		"    Recno     %d\n"
-		"    KML off   %lld\n" 
-		"    Version   %d\n" 
-		"    Len       %d\n"
-		"    Suf len   %d\n"
-		"    Time      %s\n"
-		"    Opcode    %d\n"
-		"    Op        %s\n"
-		"    Pid       %d\n"
-		"    AUid      %d\n"
-		"    Fsuid     %d\n" 
-		"    Fsgid     %d\n"
-		"    Prevrec   %d\n" 
-		"    Ngroups   %d\n"
-		//"    Groups    @{$self->{groups}}\n" 
-		" -- Path:\n"
-		"    Inode     %d\n"
-		"    Gen num   %u\n"
-                "    Old mode  %o\n"
-                "    Old rdev  %x\n"
-                "    Old uid   %llu\n"
-                "    Old gid   %llu\n"
-		"    Path      %*s\n"
-		//"    Open_mode %o\n",
-		"    Pathlen   %d\n"
-		"    Tgt       %*s\n"
-		"    Tgtlen    %d\n" 
-		"    Old Tgt   %*s\n"
-		"    Old Tgtln %d\n" 
-		" -- Attr:\n"
-		"    Valid     %x\n"
-		"    mode %o, uid %d, gid %d, size %lld, mtime %s, ctime %s rdev %x (%d:%d)\n"
-		" -- Versions:\n"
-		"    New object %s\n"
-		"    Old object %s\n"
-		"    New target %s\n"
-		"    Old target %s\n"
-		"    New parent %s\n"
-		"    Old parent %s\n", 
-		
-		rec->suffix->recno, 
-		rec->offset, 
-		rec->prefix.hdr->version, 
-		rec->prefix.hdr->len, 
-		rec->suffix->len, 
-		rectime,
-		rec->prefix.hdr->opcode, 
-		print_opname (rec->prefix.hdr->opcode),
-		rec->prefix.hdr->pid,
-		rec->prefix.hdr->auid,
-		rec->prefix.hdr->fsuid,
-		rec->prefix.hdr->fsgid,
-		rec->suffix->prevrec,
-		rec->prefix.hdr->ngroups,
-		rec->ino,
-		rec->generation,
-                rec->old_mode,
-                rec->old_rdev,
-                rec->old_uid,
-                rec->old_gid,
-		rec->pathlen,
-		STR(rec->path),
-		rec->pathlen,
-		rec->targetlen,
-		STR(rec->target),
-		rec->targetlen,
-		rec->old_targetlen,
-		STR(rec->old_target),
-		rec->old_targetlen,
-		
-		rec->valid, 
-		rec->mode,
-		rec->uid,
-		rec->gid,
-		rec->size,
-		mtime,
-		ctime,
-		rec->rdev, rec->major, rec->minor,
-		nov, oov, ntv, otv, npv, opv);
-		
-	free(nov);
-	free(oov);
-	free(ntv);
-	free(otv);
-	free(npv);
-	free(opv);
-
-	free(rectime); 
-	free(ctime);
-	free(mtime);
-
-	return str;
-}
-#endif
diff -Nru a/fs/intermezzo/kml_utils.c b/fs/intermezzo/kml_utils.c
--- a/fs/intermezzo/kml_utils.c	Sun May 16 01:18:35 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,43 +0,0 @@
-#include <linux/list.h>
-#include <linux/mm.h>
-#include <linux/slab.h>
-#include <linux/vmalloc.h>
-
-#include "intermezzo_fs.h"
-#include "intermezzo_kml.h"
-
-
-// dlogit -- oppsite to logit ()
-//         return the sbuf + size;
-char *dlogit (void *tbuf, const void *sbuf, int size)
-{
-        char *ptr = (char *)sbuf;
-        memcpy(tbuf, ptr, size);
-        ptr += size;
-        return ptr;
-}
-
-static spinlock_t kml_lock = SPIN_LOCK_UNLOCKED;
-static char  buf[1024];
-char * bdup_printf (char *format, ...)
-{
-        va_list args;
-        int  i;
-        char *path;
-        unsigned long flags;
-
-        spin_lock_irqsave(&kml_lock, flags);
-        va_start(args, format);
-        i = vsprintf(buf, format, args); /* hopefully i < sizeof(buf) */
-        va_end(args);
-
-        PRESTO_ALLOC (path, char *, i + 1);
-        if (path == NULL)
-                return NULL;
-        strcpy (path, buf);
-
-        spin_unlock_irqrestore(&kml_lock, flags);
-        return path;
-}
-
-
diff -Nru a/fs/intermezzo/methods.c b/fs/intermezzo/methods.c
--- a/fs/intermezzo/methods.c	Sun May 16 01:18:36 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,493 +0,0 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
- *  Copyright (C) 2000 Stelias Computing, Inc.
- *  Copyright (C) 2000 Red Hat, Inc.
- *  Copyright (C) 2000 Mountain View Data, Inc.
- *
- *  Extended Attribute Support
- *  Copyright (C) 2001 Shirish H. Phatak, Tacit Networks, Inc.
- *
- *   This file is part of InterMezzo, http://www.inter-mezzo.org.
- *
- *   InterMezzo is free software; you can redistribute it and/or
- *   modify it under the terms of version 2 of the GNU General Public
- *   License as published by the Free Software Foundation.
- *
- *   InterMezzo is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with InterMezzo; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- */
-
-#include <asm/bitops.h>
-#include <asm/uaccess.h>
-#include <asm/system.h>
-
-#include <linux/errno.h>
-#include <linux/fs.h>
-#include <linux/ext2_fs.h>
-#include <linux/slab.h>
-#include <linux/vmalloc.h>
-#include <linux/sched.h>
-#include <linux/stat.h>
-#include <linux/string.h>
-#include <linux/blkdev.h>
-#include <linux/init.h>
-#include <linux/module.h>
-
-#include <linux/fsfilter.h>
-#include "intermezzo_fs.h"
-
-
-int filter_print_entry = 0;
-int filter_debug = 0xfffffff;
-/*
- * The function in this file are responsible for setting up the 
- * correct methods layered file systems like InterMezzo and snapfs
- */
-
-
-static struct filter_fs filter_oppar[FILTER_FS_TYPES];
-
-/* get to the upper methods (intermezzo, snapfs) */
-inline struct super_operations *filter_c2usops(struct filter_fs *cache)
-{
-        return &cache->o_fops.filter_sops;
-}
-
-inline struct inode_operations *filter_c2udiops(struct filter_fs *cache)
-{
-        return &cache->o_fops.filter_dir_iops;
-}
-
-
-inline struct inode_operations *filter_c2ufiops(struct filter_fs *cache)
-{
-        return &cache->o_fops.filter_file_iops;
-}
-
-inline struct inode_operations *filter_c2usiops(struct filter_fs *cache)
-{
-        return &cache->o_fops.filter_sym_iops;
-}
-
-
-inline struct file_operations *filter_c2udfops(struct filter_fs *cache)
-{
-        return &cache->o_fops.filter_dir_fops;
-}
-
-inline struct file_operations *filter_c2uffops(struct filter_fs *cache)
-{
-        return &cache->o_fops.filter_file_fops;
-}
-
-inline struct file_operations *filter_c2usfops(struct filter_fs *cache)
-{
-        return &cache->o_fops.filter_sym_fops;
-}
-
-inline struct dentry_operations *filter_c2udops(struct filter_fs *cache)
-{
-        return &cache->o_fops.filter_dentry_ops;
-}
-
-/* get to the cache (lower) methods */
-inline struct super_operations *filter_c2csops(struct filter_fs *cache)
-{
-        return cache->o_caops.cache_sops;
-}
-
-inline struct inode_operations *filter_c2cdiops(struct filter_fs *cache)
-{
-        return cache->o_caops.cache_dir_iops;
-}
-
-inline struct inode_operations *filter_c2cfiops(struct filter_fs *cache)
-{
-        return cache->o_caops.cache_file_iops;
-}
-
-inline struct inode_operations *filter_c2csiops(struct filter_fs *cache)
-{
-        return cache->o_caops.cache_sym_iops;
-}
-
-inline struct file_operations *filter_c2cdfops(struct filter_fs *cache)
-{
-        return cache->o_caops.cache_dir_fops;
-}
-
-inline struct file_operations *filter_c2cffops(struct filter_fs *cache)
-{
-        return cache->o_caops.cache_file_fops;
-}
-
-inline struct file_operations *filter_c2csfops(struct filter_fs *cache)
-{
-        return cache->o_caops.cache_sym_fops;
-}
-
-inline struct dentry_operations *filter_c2cdops(struct filter_fs *cache)
-{
-        return cache->o_caops.cache_dentry_ops;
-}
-
-
-void filter_setup_journal_ops(struct filter_fs *ops, char *cache_type)
-{
-        if ( strlen(cache_type) == strlen("ext2") &&
-             memcmp(cache_type, "ext2", strlen("ext2")) == 0 ) {
-#ifdef CONFIG_EXT2_FS
-                ops->o_trops = &presto_ext2_journal_ops;
-#else
-                ops->o_trops = NULL;
-#endif
-                FDEBUG(D_SUPER, "ops at %p\n", ops);
-        }
-
-        if ( strlen(cache_type) == strlen("ext3") &&
-             memcmp(cache_type, "ext3", strlen("ext3")) == 0 ) {
-#if defined(CONFIG_EXT3_FS) || defined (CONFIG_EXT3_FS_MODULE)
-                ops->o_trops = &presto_ext3_journal_ops;
-#else
-                ops->o_trops = NULL;
-#endif
-                FDEBUG(D_SUPER, "ops at %p\n", ops);
-        }
-
-        if ( strlen(cache_type) == strlen("tmpfs") &&
-             memcmp(cache_type, "tmpfs", strlen("tmpfs")) == 0 ) {
-#if defined(CONFIG_TMPFS)
-                ops->o_trops = &presto_tmpfs_journal_ops;
-#else
-                ops->o_trops = NULL;
-#endif
-                FDEBUG(D_SUPER, "ops at %p\n", ops);
-        }
-
-        if ( strlen(cache_type) == strlen("reiserfs") &&
-             memcmp(cache_type, "reiserfs", strlen("reiserfs")) == 0 ) {
-#if 0
-		/* #if defined(CONFIG_REISERFS_FS) || defined(CONFIG_REISERFS_FS_MODULE) */
-                ops->o_trops = &presto_reiserfs_journal_ops;
-#else
-                ops->o_trops = NULL;
-#endif
-                FDEBUG(D_SUPER, "ops at %p\n", ops);
-        }
-
-        if ( strlen(cache_type) == strlen("xfs") &&
-             memcmp(cache_type, "xfs", strlen("xfs")) == 0 ) {
-#if 0
-/*#if defined(CONFIG_XFS_FS) || defined (CONFIG_XFS_FS_MODULE) */
-                ops->o_trops = &presto_xfs_journal_ops;
-#else
-                ops->o_trops = NULL;
-#endif
-                FDEBUG(D_SUPER, "ops at %p\n", ops);
-        }
-
-        if ( strlen(cache_type) == strlen("obdfs") &&
-             memcmp(cache_type, "obdfs", strlen("obdfs")) == 0 ) {
-#if defined(CONFIG_OBDFS_FS) || defined (CONFIG_OBDFS_FS_MODULE)
-                ops->o_trops = presto_obdfs_journal_ops;
-#else
-                ops->o_trops = NULL;
-#endif
-                FDEBUG(D_SUPER, "ops at %p\n", ops);
-        }
-}
-
-
-/* find the cache for this FS */
-struct filter_fs *filter_get_filter_fs(const char *cache_type)
-{
-        struct filter_fs *ops = NULL;
-        FENTRY;
-
-        if ( strlen(cache_type) == strlen("ext2") &&
-             memcmp(cache_type, "ext2", strlen("ext2")) == 0 ) {
-                ops = &filter_oppar[FILTER_FS_EXT2];
-                FDEBUG(D_SUPER, "ops at %p\n", ops);
-        }
-
-        if ( strlen(cache_type) == strlen("xfs") &&
-             memcmp(cache_type, "xfs", strlen("xfs")) == 0 ) {
-                ops = &filter_oppar[FILTER_FS_XFS];
-                FDEBUG(D_SUPER, "ops at %p\n", ops);
-        }
-
-        if ( strlen(cache_type) == strlen("ext3") &&
-             memcmp(cache_type, "ext3", strlen("ext3")) == 0 ) {
-                ops = &filter_oppar[FILTER_FS_EXT3];
-                FDEBUG(D_SUPER, "ops at %p\n", ops);
-        }
-
-        if ( strlen(cache_type) == strlen("tmpfs") &&
-             memcmp(cache_type, "tmpfs", strlen("tmpfs")) == 0 ) {
-                ops = &filter_oppar[FILTER_FS_TMPFS];
-                FDEBUG(D_SUPER, "ops at %p\n", ops);
-        }
-
-        if ( strlen(cache_type) == strlen("reiserfs") &&
-             memcmp(cache_type, "reiserfs", strlen("reiserfs")) == 0 ) {
-                ops = &filter_oppar[FILTER_FS_REISERFS];
-                FDEBUG(D_SUPER, "ops at %p\n", ops);
-        }
-        if ( strlen(cache_type) == strlen("obdfs") &&
-             memcmp(cache_type, "obdfs", strlen("obdfs")) == 0 ) {
-                ops = &filter_oppar[FILTER_FS_OBDFS];
-                FDEBUG(D_SUPER, "ops at %p\n", ops);
-        }
-
-        if (ops == NULL) {
-                CERROR("prepare to die: unrecognized cache type for Filter\n");
-        }
-        FEXIT;
-        return ops;
-}
-
-
-/*
- *  Frobnicate the InterMezzo operations
- *    this establishes the link between the InterMezzo file system
- *    and the underlying file system used for the cache.
- */
-
-void filter_setup_super_ops(struct filter_fs *cache, struct super_operations *cache_sops, struct super_operations *filter_sops)
-{
-        /* Get ptr to the shared struct snapfs_ops structure. */
-        struct filter_ops *props = &cache->o_fops;
-        /* Get ptr to the shared struct cache_ops structure. */
-        struct cache_ops *caops = &cache->o_caops;
-
-        FENTRY;
-
-        if ( cache->o_flags & FILTER_DID_SUPER_OPS ) {
-                FEXIT;
-                return;
-        }
-        cache->o_flags |= FILTER_DID_SUPER_OPS;
-
-        /* Set the cache superblock operations to point to the
-           superblock operations of the underlying file system.  */
-        caops->cache_sops = cache_sops;
-
-        /*
-         * Copy the cache (real fs) superblock ops to the "filter"
-         * superblock ops as defaults. Some will be changed below
-         */
-        memcpy(&props->filter_sops, cache_sops, sizeof(*cache_sops));
-
-        /* 'put_super' unconditionally is that of filter */
-        if (filter_sops->put_super) { 
-                props->filter_sops.put_super = filter_sops->put_super;
-        }
-
-        if (cache_sops->read_inode) {
-                props->filter_sops.read_inode = filter_sops->read_inode;
-                FDEBUG(D_INODE, "setting filter_read_inode, cache_ops %p, cache %p, ri at %p\n",
-                      cache, cache, props->filter_sops.read_inode);
-        }
-
-        if (cache_sops->remount_fs)
-                props->filter_sops.remount_fs = filter_sops->remount_fs;
-        FEXIT;
-}
-
-
-void filter_setup_dir_ops(struct filter_fs *cache, struct inode *inode, struct inode_operations *filter_iops, struct file_operations *filter_fops)
-{
-        struct inode_operations *cache_filter_iops;
-        struct inode_operations *cache_iops = inode->i_op;
-        struct file_operations *cache_fops = inode->i_fop;
-        FENTRY;
-
-        if ( cache->o_flags & FILTER_DID_DIR_OPS ) {
-                FEXIT;
-                return;
-        }
-        cache->o_flags |= FILTER_DID_DIR_OPS;
-
-        /* former ops become cache_ops */
-        cache->o_caops.cache_dir_iops = cache_iops;
-        cache->o_caops.cache_dir_fops = cache_fops;
-        FDEBUG(D_SUPER, "filter at %p, cache iops %p, iops %p\n",
-               cache, cache_iops, filter_c2udiops(cache));
-
-        /* setup our dir iops: copy and modify */
-        memcpy(filter_c2udiops(cache), cache_iops, sizeof(*cache_iops));
-
-        /* abbreviate */
-        cache_filter_iops = filter_c2udiops(cache);
-
-        /* methods that filter if cache filesystem has these ops */
-        if (cache_iops->lookup && filter_iops->lookup)
-                cache_filter_iops->lookup = filter_iops->lookup;
-        if (cache_iops->create && filter_iops->create)
-                cache_filter_iops->create = filter_iops->create;
-        if (cache_iops->link && filter_iops->link)
-                cache_filter_iops->link = filter_iops->link;
-        if (cache_iops->unlink && filter_iops->unlink)
-                cache_filter_iops->unlink = filter_iops->unlink;
-        if (cache_iops->mkdir && filter_iops->mkdir)
-                cache_filter_iops->mkdir = filter_iops->mkdir;
-        if (cache_iops->rmdir && filter_iops->rmdir)
-                cache_filter_iops->rmdir = filter_iops->rmdir;
-        if (cache_iops->symlink && filter_iops->symlink)
-                cache_filter_iops->symlink = filter_iops->symlink;
-        if (cache_iops->rename && filter_iops->rename)
-                cache_filter_iops->rename = filter_iops->rename;
-        if (cache_iops->mknod && filter_iops->mknod)
-                cache_filter_iops->mknod = filter_iops->mknod;
-        if (cache_iops->permission && filter_iops->permission)
-                cache_filter_iops->permission = filter_iops->permission;
-        if (cache_iops->getattr)
-                cache_filter_iops->getattr = filter_iops->getattr;
-        /* Some filesystems do not use a setattr method of their own
-           instead relying on inode_setattr/write_inode. We still need to
-           journal these so we make setattr an unconditional operation. 
-           XXX: we should probably check for write_inode. SHP
-        */
-        /*if (cache_iops->setattr)*/
-                cache_filter_iops->setattr = filter_iops->setattr;
-#ifdef CONFIG_FS_EXT_ATTR
-	/* For now we assume that posix acls are handled through extended
-	* attributes. If this is not the case, we must explicitly trap 
-	* posix_set_acl. SHP
-	*/
-	if (cache_iops->set_ext_attr && filter_iops->set_ext_attr)
-		cache_filter_iops->set_ext_attr = filter_iops->set_ext_attr;
-#endif
-
-
-        /* copy dir fops */
-        memcpy(filter_c2udfops(cache), cache_fops, sizeof(*cache_fops));
-
-        /* unconditional filtering operations */
-        filter_c2udfops(cache)->ioctl = filter_fops->ioctl;
-
-        FEXIT;
-}
-
-
-void filter_setup_file_ops(struct filter_fs *cache, struct inode *inode, struct inode_operations *filter_iops, struct file_operations *filter_fops)
-{
-        struct inode_operations *pr_iops;
-        struct inode_operations *cache_iops = inode->i_op;
-        struct file_operations *cache_fops = inode->i_fop;
-        FENTRY;
-
-        if ( cache->o_flags & FILTER_DID_FILE_OPS ) {
-                FEXIT;
-                return;
-        }
-        cache->o_flags |= FILTER_DID_FILE_OPS;
-
-        /* steal the old ops */
-        /* former ops become cache_ops */
-        cache->o_caops.cache_file_iops = cache_iops;
-        cache->o_caops.cache_file_fops = cache_fops;
-        
-        /* abbreviate */
-        pr_iops = filter_c2ufiops(cache); 
-
-        /* setup our dir iops: copy and modify */
-        memcpy(pr_iops, cache_iops, sizeof(*cache_iops));
-
-        /* copy dir fops */
-        CERROR("*** cache file ops at %p\n", cache_fops);
-        memcpy(filter_c2uffops(cache), cache_fops, sizeof(*cache_fops));
-
-        /* assign */
-        /* See comments above in filter_setup_dir_ops. SHP */
-        /*if (cache_iops->setattr)*/
-                pr_iops->setattr = filter_iops->setattr;
-        if (cache_iops->getattr)
-                pr_iops->getattr = filter_iops->getattr;
-        /* XXX Should this be conditional rmr ? */
-        pr_iops->permission = filter_iops->permission;
-#ifdef CONFIG_FS_EXT_ATTR
-    	/* For now we assume that posix acls are handled through extended
-	* attributes. If this is not the case, we must explicitly trap and 
-	* posix_set_acl
-	*/
-	if (cache_iops->set_ext_attr && filter_iops->set_ext_attr)
-		pr_iops->set_ext_attr = filter_iops->set_ext_attr;
-#endif
-
-
-        /* unconditional filtering operations */
-        filter_c2uffops(cache)->open = filter_fops->open;
-        filter_c2uffops(cache)->release = filter_fops->release;
-        filter_c2uffops(cache)->write = filter_fops->write;
-        filter_c2uffops(cache)->ioctl = filter_fops->ioctl;
-
-        FEXIT;
-}
-
-/* XXX in 2.3 there are "fast" and "slow" symlink ops for ext2 XXX */
-void filter_setup_symlink_ops(struct filter_fs *cache, struct inode *inode, struct inode_operations *filter_iops, struct file_operations *filter_fops)
-{
-        struct inode_operations *pr_iops;
-        struct inode_operations *cache_iops = inode->i_op;
-        struct file_operations *cache_fops = inode->i_fop;
-        FENTRY;
-
-        if ( cache->o_flags & FILTER_DID_SYMLINK_OPS ) {
-                FEXIT;
-                return;
-        }
-        cache->o_flags |= FILTER_DID_SYMLINK_OPS;
-
-        /* steal the old ops */
-        cache->o_caops.cache_sym_iops = cache_iops;
-        cache->o_caops.cache_sym_fops = cache_fops;
-
-        /* abbreviate */
-        pr_iops = filter_c2usiops(cache); 
-
-        /* setup our dir iops: copy and modify */
-        memcpy(pr_iops, cache_iops, sizeof(*cache_iops));
-
-        /* See comments above in filter_setup_dir_ops. SHP */
-        /* if (cache_iops->setattr) */
-                pr_iops->setattr = filter_iops->setattr;
-        if (cache_iops->getattr)
-                pr_iops->getattr = filter_iops->getattr;
-
-        /* assign */
-        /* copy fops - careful for symlinks they might be NULL */
-        if ( cache_fops ) { 
-                memcpy(filter_c2usfops(cache), cache_fops, sizeof(*cache_fops));
-        }
-
-        FEXIT;
-}
-
-void filter_setup_dentry_ops(struct filter_fs *cache,
-                             struct dentry_operations *cache_dop,
-                             struct dentry_operations *filter_dop)
-{
-        if ( cache->o_flags & FILTER_DID_DENTRY_OPS ) {
-                FEXIT;
-                return;
-        }
-        cache->o_flags |= FILTER_DID_DENTRY_OPS;
-
-        cache->o_caops.cache_dentry_ops = cache_dop;
-        memcpy(&cache->o_fops.filter_dentry_ops,
-               filter_dop, sizeof(*filter_dop));
-        
-        if (cache_dop &&  cache_dop != filter_dop && cache_dop->d_revalidate){
-                CERROR("WARNING: filter overriding revalidation!\n");
-        }
-        return;
-}
diff -Nru a/fs/intermezzo/presto.c b/fs/intermezzo/presto.c
--- a/fs/intermezzo/presto.c	Sun May 16 01:18:35 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,736 +0,0 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
- *  Author: Peter J. Braam <braam@clusterfs.com>
- *  Copyright (C) 1998 Stelias Computing Inc
- *  Copyright (C) 1999 Red Hat Inc.
- *
- *   This file is part of InterMezzo, http://www.inter-mezzo.org.
- *
- *   InterMezzo is free software; you can redistribute it and/or
- *   modify it under the terms of version 2 of the GNU General Public
- *   License as published by the Free Software Foundation.
- *
- *   InterMezzo is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with InterMezzo; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * This file implements basic routines supporting the semantics
- */
-#include <linux/types.h>
-#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/fs.h>
-#include <linux/namei.h>
-#include <linux/stat.h>
-#include <linux/errno.h>
-#include <linux/vmalloc.h>
-#include <linux/slab.h>
-#include <asm/segment.h>
-#include <asm/uaccess.h>
-#include <linux/string.h>
-
-#include "intermezzo_fs.h"
-#include "intermezzo_psdev.h"
-
-int presto_walk(const char *name, struct nameidata *nd)
-{
-        int err;
-        /* we do not follow symlinks to support symlink operations 
-           correctly. The vfs should always hand us resolved dentries
-           so we should not be required to use LOOKUP_FOLLOW. At the
-           reintegrating end, lento again should be working with the 
-           resolved pathname and not the symlink. SHP
-           XXX: This code implies that direct symlinks do not work. SHP
-        */
-        unsigned int flags = 0; //LOOKUP_POSITIVE;
-
-        ENTRY;
-        err = path_lookup(name, flags, nd);
-        return err;
-}
-
-
-/* find the presto minor device for this inode */
-int presto_i2m(struct inode *inode)
-{
-        struct presto_cache *cache;
-        ENTRY;
-        cache = presto_get_cache(inode);
-        CDEBUG(D_PSDEV, "\n");
-        if ( !cache ) {
-                CERROR("PRESTO: BAD: cannot find cache for dev %s, ino %ld\n",
-                       inode->i_sb->s_id, inode->i_ino);
-                EXIT;
-                return -1;
-        }
-        EXIT;
-        return cache->cache_psdev->uc_minor;
-}
-
-inline int presto_f2m(struct presto_file_set *fset)
-{
-        return fset->fset_cache->cache_psdev->uc_minor;
-
-}
-
-inline int presto_c2m(struct presto_cache *cache)
-{
-        return cache->cache_psdev->uc_minor;
-
-}
-
-/* XXX check this out */
-struct presto_file_set *presto_path2fileset(const char *name)
-{
-        struct nameidata nd;
-        struct presto_file_set *fileset;
-        int error;
-        ENTRY;
-
-        error = presto_walk(name, &nd);
-        if (!error) { 
-#if 0
-                error = do_revalidate(nd.dentry);
-#endif
-                if (!error) 
-                        fileset = presto_fset(nd.dentry); 
-                path_release(&nd); 
-                EXIT;
-        } else 
-                fileset = ERR_PTR(error);
-
-        EXIT;
-        return fileset;
-}
-
-/* check a flag on this dentry or fset root.  Semantics:
-   - most flags: test if it is set
-   - PRESTO_ATTR, PRESTO_DATA return 1 if PRESTO_FSETINSYNC is set
-*/
-int presto_chk(struct dentry *dentry, int flag)
-{
-        int minor;
-        struct presto_file_set *fset = presto_fset(dentry);
-
-        ENTRY;
-        minor = presto_i2m(dentry->d_inode);
-        if ( izo_channels[minor].uc_no_filter ) {
-                EXIT;
-                return ~0;
-        }
-
-        /* if the fileset is in sync DATA and ATTR are OK */
-        if ( fset &&
-             (flag == PRESTO_ATTR || flag == PRESTO_DATA) &&
-             (fset->fset_flags & FSET_INSYNC) ) {
-                CDEBUG(D_INODE, "fset in sync (ino %ld)!\n",
-                       fset->fset_dentry->d_inode->i_ino);
-                EXIT;
-                return 1;
-        }
-
-        EXIT;
-        return (presto_d2d(dentry)->dd_flags & flag);
-}
-
-/* set a bit in the dentry flags */
-void presto_set(struct dentry *dentry, int flag)
-{
-        ENTRY;
-        if ( dentry->d_inode ) {
-                CDEBUG(D_INODE, "SET ino %ld, flag %x\n",
-                       dentry->d_inode->i_ino, flag);
-        }
-        if ( presto_d2d(dentry) == NULL) {
-                CERROR("dentry without d_fsdata in presto_set: %p: %*s", dentry,
-                                dentry->d_name.len, dentry->d_name.name);
-                BUG();
-        }
-        presto_d2d(dentry)->dd_flags |= flag;
-        EXIT;
-}
-
-/* given a path: complete the closes on the fset */
-int lento_complete_closes(char *path)
-{
-        struct nameidata nd;
-        struct dentry *dentry;
-        int error;
-        struct presto_file_set *fset;
-        ENTRY;
-
-        error = presto_walk(path, &nd);
-        if (error) {
-                EXIT;
-                return error;
-        }
-
-        dentry = nd.dentry;
-
-        error = -ENXIO;
-        if ( !presto_ispresto(dentry->d_inode) ) {
-                EXIT;
-                goto out_complete;
-        }
-        
-        fset = presto_fset(dentry);
-        error = -EINVAL;
-        if ( !fset ) {
-                CERROR("No fileset!\n");
-                EXIT;
-                goto out_complete;
-        }
-        
-        /* transactions and locking are internal to this function */ 
-        error = presto_complete_lml(fset);
-        
-        EXIT;
- out_complete:
-        path_release(&nd); 
-        return error;
-}       
-
-#if 0
-/* given a path: write a close record and cancel an LML record, finally
-   call truncate LML.  Lento is doing this so it goes in with uid/gid's 
-   root. 
-*/ 
-int lento_cancel_lml(char *path, 
-                     __u64 lml_offset, 
-                     __u64 remote_ino, 
-                     __u32 remote_generation,
-                     __u32 remote_version, 
-                     struct lento_vfs_context *info)
-{
-        struct nameidata nd;
-        struct rec_info rec;
-        struct dentry *dentry;
-        int error;
-        struct presto_file_set *fset;
-        void *handle; 
-        struct presto_version new_ver;
-        ENTRY;
-
-
-        error = presto_walk(path, &nd);
-        if (error) {
-                EXIT;
-                return error;
-        }
-        dentry = nd.dentry;
-
-        error = -ENXIO;
-        if ( !presto_ispresto(dentry->d_inode) ) {
-                EXIT;
-                goto out_cancel_lml;
-        }
-        
-        fset = presto_fset(dentry);
-
-        error=-EINVAL;
-        if (fset==NULL) {
-                CERROR("No fileset!\n");
-                EXIT;
-                goto out_cancel_lml;
-        }
-        
-        /* this only requires a transaction below which is automatic */
-        handle = presto_trans_start(fset, dentry->d_inode, PRESTO_OP_RELEASE); 
-        if ( IS_ERR(handle) ) {
-                error = -ENOMEM; 
-                EXIT; 
-                goto out_cancel_lml; 
-        } 
-        
-        if (info->flags & LENTO_FL_CANCEL_LML) {
-                error = presto_clear_lml_close(fset, lml_offset);
-                if ( error ) {
-                        presto_trans_commit(fset, handle);
-                        EXIT; 
-                        goto out_cancel_lml;
-                }
-        }
-
-
-        if (info->flags & LENTO_FL_WRITE_KML) {
-                presto_getversion(&new_ver, dentry->d_inode);
-                error = presto_journal_close(&rec, fset, NULL, dentry,
-                                             &new_ver);
-                if ( error ) {
-                        EXIT; 
-                        presto_trans_commit(fset, handle);
-                        goto out_cancel_lml;
-                }
-        }
-
-        if (info->flags & LENTO_FL_WRITE_EXPECT) {
-                error = presto_write_last_rcvd(&rec, fset, info); 
-                if ( error < 0 ) {
-                        EXIT; 
-                        presto_trans_commit(fset, handle);
-                        goto out_cancel_lml;
-                }
-        }
-
-        presto_trans_commit(fset, handle);
-
-        if (info->flags & LENTO_FL_CANCEL_LML) {
-            presto_truncate_lml(fset); 
-        }
-                
-
- out_cancel_lml:
-        EXIT;
-        path_release(&nd); 
-        return error;
-}       
-#endif 
-
-/* given a dentry, operate on the flags in its dentry.  Used by downcalls */
-int izo_mark_dentry(struct dentry *dentry, int and_flag, int or_flag, 
-                       int *res)
-{
-        int error = 0;
-
-        if (presto_d2d(dentry) == NULL) {
-                CERROR("InterMezzo: no ddata for inode %ld in %s\n",
-                       dentry->d_inode->i_ino, __FUNCTION__);
-                return -EINVAL;
-        }
-
-        CDEBUG(D_INODE, "inode: %ld, and flag %x, or flag %x, dd_flags %x\n",
-               dentry->d_inode->i_ino, and_flag, or_flag,
-               presto_d2d(dentry)->dd_flags);
-
-        presto_d2d(dentry)->dd_flags &= and_flag;
-        presto_d2d(dentry)->dd_flags |= or_flag;
-        if (res) 
-                *res = presto_d2d(dentry)->dd_flags;
-
-        return error;
-}
-
-/* given a path, operate on the flags in its cache.  Used by mark_ioctl */
-int izo_mark_cache(struct dentry *dentry, int and_flag, int or_flag, 
-                   int *res)
-{
-        struct presto_cache *cache;
-
-        if (presto_d2d(dentry) == NULL) {
-                CERROR("InterMezzo: no ddata for inode %ld in %s\n",
-                       dentry->d_inode->i_ino, __FUNCTION__);
-                return -EINVAL;
-        }
-
-        CDEBUG(D_INODE, "inode: %ld, and flag %x, or flag %x, dd_flags %x\n",
-               dentry->d_inode->i_ino, and_flag, or_flag,
-               presto_d2d(dentry)->dd_flags);
-
-        cache = presto_get_cache(dentry->d_inode);
-        if ( !cache ) {
-                CERROR("PRESTO: BAD: cannot find cache in izo_mark_cache\n");
-                return -EBADF;
-        }
-
-        cache->cache_flags &= and_flag;
-        cache->cache_flags |= or_flag;
-        if (res)
-                *res = (int)cache->cache_flags;
-
-        return 0;
-}
-
-int presto_set_max_kml_size(const char *path, unsigned long max_size)
-{
-        struct presto_file_set *fset;
-
-        ENTRY;
-
-        fset = presto_path2fileset(path);
-        if (IS_ERR(fset)) {
-                EXIT;
-                return PTR_ERR(fset);
-        }
-
-        fset->kml_truncate_size = max_size;
-        CDEBUG(D_CACHE, "KML truncate size set to %lu bytes for fset %s.\n",
-               max_size, path);
-
-        EXIT;
-        return 0;
-}
-
-int izo_mark_fset(struct dentry *dentry, int and_flag, int or_flag, 
-                  int * res)
-{
-        struct presto_file_set *fset;
-        
-        fset = presto_fset(dentry);
-        if ( !fset ) {
-                CERROR("PRESTO: BAD: cannot find cache in izo_mark_cache\n");
-                make_bad_inode(dentry->d_inode);
-                return -EBADF;
-        }
-        fset->fset_flags &= and_flag;
-        fset->fset_flags |= or_flag;
-        if (res)
-                *res = (int)fset->fset_flags;
-
-        return 0;
-}
-
-/* talk to Lento about the permit */
-static int presto_permit_upcall(struct dentry *dentry)
-{
-        int rc;
-        char *path, *buffer;
-        int pathlen;
-        int minor;
-        int fsetnamelen;
-        struct presto_file_set *fset = NULL;
-
-        ENTRY;
-
-        if ( (minor = presto_i2m(dentry->d_inode)) < 0) {
-                EXIT;
-                return -EINVAL;
-        }
-
-        fset = presto_fset(dentry);
-        if (!fset) {
-                EXIT;
-                return -ENOTCONN;
-        }
-        
-        if ( !presto_lento_up(minor) ) {
-                if ( fset->fset_flags & FSET_STEAL_PERMIT ) {
-                        EXIT;
-                        return 0;
-                } else {
-                        EXIT;
-                        return -ENOTCONN;
-                }
-        }
-
-        PRESTO_ALLOC(buffer, PAGE_SIZE);
-        if ( !buffer ) {
-                CERROR("PRESTO: out of memory!\n");
-                EXIT;
-                return -ENOMEM;
-        }
-        path = presto_path(dentry, fset->fset_dentry, buffer, PAGE_SIZE);
-        pathlen = MYPATHLEN(buffer, path);
-        fsetnamelen = strlen(fset->fset_name); 
-        rc = izo_upc_permit(minor, dentry, pathlen, path, fset->fset_name);
-        PRESTO_FREE(buffer, PAGE_SIZE);
-        EXIT;
-        return rc;
-}
-
-/* get a write permit for the fileset of this inode
- *  - if this returns a negative value there was an error
- *  - if 0 is returned the permit was already in the kernel -- or --
- *    Lento gave us the permit without reintegration
- *  - lento returns the number of records it reintegrated 
- *
- * Note that if this fileset has branches, a permit will -never- to a normal
- * process for writing in the data area (ie, outside of .intermezzo)
- */
-int presto_get_permit(struct inode * inode)
-{
-        struct dentry *de;
-        struct presto_file_set *fset;
-        int minor = presto_i2m(inode);
-        int rc = 0;
-
-        ENTRY;
-        if (minor < 0) {
-                EXIT;
-                return -1;
-        }
-
-        if ( ISLENTO(minor) ) {
-                EXIT;
-                return 0;
-        }
-
-        if (list_empty(&inode->i_dentry)) {
-                CERROR("No alias for inode %d\n", (int) inode->i_ino);
-                EXIT;
-                return -EINVAL;
-        }
-
-        de = list_entry(inode->i_dentry.next, struct dentry, d_alias);
-
-        if (presto_chk(de, PRESTO_DONT_JOURNAL)) {
-                EXIT;
-                return 0;
-        }
-
-        fset = presto_fset(de);
-        if ( !fset ) {
-                CERROR("Presto: no fileset in presto_get_permit!\n");
-                EXIT;
-                return -EINVAL;
-        }
-
-        if (fset->fset_flags & FSET_HAS_BRANCHES) {
-                EXIT;
-                return -EROFS;
-        }
-
-        spin_lock(&fset->fset_permit_lock);
-        if (fset->fset_flags & FSET_HASPERMIT) {
-                fset->fset_permit_count++;
-                CDEBUG(D_INODE, "permit count now %d, inode %lx\n", 
-                       fset->fset_permit_count, inode->i_ino);
-                spin_unlock(&fset->fset_permit_lock);
-                EXIT;
-                return 0;
-        }
-
-        /* Allow reintegration to proceed without locks -SHP */
-        fset->fset_permit_upcall_count++;
-        if (fset->fset_permit_upcall_count == 1) {
-                spin_unlock(&fset->fset_permit_lock);
-                rc = presto_permit_upcall(fset->fset_dentry);
-                spin_lock(&fset->fset_permit_lock);
-                fset->fset_permit_upcall_count--;
-                if (rc == 0) {
-                        izo_mark_fset(fset->fset_dentry, ~0, FSET_HASPERMIT,
-                                      NULL);
-                        fset->fset_permit_count++;
-                } else if (rc == ENOTCONN) {
-                        CERROR("InterMezzo: disconnected operation. stealing permit.\n");
-                        izo_mark_fset(fset->fset_dentry, ~0, FSET_HASPERMIT,
-                                      NULL);
-                        fset->fset_permit_count++;
-                        /* set a disconnected flag here to stop upcalls */
-                        rc = 0;
-                } else {
-                        CERROR("InterMezzo: presto_permit_upcall failed: %d\n", rc);
-                        rc = -EROFS;
-                        /* go to sleep here and try again? */
-                }
-                wake_up_interruptible(&fset->fset_permit_queue);
-        } else {
-                /* Someone is already doing an upcall; go to sleep. */
-                DECLARE_WAITQUEUE(wait, current);
-
-                spin_unlock(&fset->fset_permit_lock);
-                add_wait_queue(&fset->fset_permit_queue, &wait);
-                while (1) {
-                        set_current_state(TASK_INTERRUPTIBLE);
-
-                        spin_lock(&fset->fset_permit_lock);
-                        if (fset->fset_permit_upcall_count == 0)
-                                break;
-                        spin_unlock(&fset->fset_permit_lock);
-
-                        if (signal_pending(current)) {
-                                remove_wait_queue(&fset->fset_permit_queue,
-                                                  &wait);
-                                return -ERESTARTSYS;
-                        }
-                        schedule();
-                }
-                remove_wait_queue(&fset->fset_permit_queue, &wait);
-                /* We've been woken up: do we have the permit? */
-                if (fset->fset_flags & FSET_HASPERMIT)
-                        /* FIXME: Is this the right thing? */
-                        rc = -EAGAIN;
-        }
-
-        CDEBUG(D_INODE, "permit count now %d, ino %ld (likely 1), "
-               "rc %d\n", fset->fset_permit_count, inode->i_ino, rc);
-        spin_unlock(&fset->fset_permit_lock);
-        EXIT;
-        return rc;
-}
-
-int presto_put_permit(struct inode * inode)
-{
-        struct dentry *de;
-        struct presto_file_set *fset;
-        int minor = presto_i2m(inode);
-
-        ENTRY;
-        if (minor < 0) {
-                EXIT;
-                return -1;
-        }
-
-        if ( ISLENTO(minor) ) {
-                EXIT;
-                return 0;
-        }
-
-        if (list_empty(&inode->i_dentry)) {
-                CERROR("No alias for inode %d\n", (int) inode->i_ino);
-                EXIT;
-                return -1;
-        }
-
-        de = list_entry(inode->i_dentry.next, struct dentry, d_alias);
-
-        fset = presto_fset(de);
-        if ( !fset ) {
-                CERROR("InterMezzo: no fileset in %s!\n", __FUNCTION__);
-                EXIT;
-                return -1;
-        }
-
-        if (presto_chk(de, PRESTO_DONT_JOURNAL)) {
-                EXIT;
-                return 0;
-        }
-
-        spin_lock(&fset->fset_permit_lock);
-        if (fset->fset_flags & FSET_HASPERMIT) {
-                if (fset->fset_permit_count > 0)
-                        fset->fset_permit_count--;
-                else
-                        CERROR("Put permit while permit count is 0, "
-                               "inode %ld!\n", inode->i_ino); 
-        } else {
-                fset->fset_permit_count = 0;
-                CERROR("InterMezzo: put permit while no permit, inode %ld, "
-                       "flags %x!\n", inode->i_ino, fset->fset_flags);
-        }
-
-        CDEBUG(D_INODE, "permit count now %d, inode %ld\n",
-               fset->fset_permit_count, inode->i_ino);
-
-        if (fset->fset_flags & FSET_PERMIT_WAITING &&
-            fset->fset_permit_count == 0) {
-                CDEBUG(D_INODE, "permit count now 0, ino %ld, wake sleepers\n",
-                       inode->i_ino);
-                wake_up_interruptible(&fset->fset_permit_queue);
-        }
-        spin_unlock(&fset->fset_permit_lock);
-
-        EXIT;
-        return 0;
-}
-
-void presto_getversion(struct presto_version * presto_version,
-                       struct inode * inode)
-{
-        presto_version->pv_mtime_sec = inode->i_mtime.tv_sec;
-        presto_version->pv_mtime_nsec = inode->i_mtime.tv_nsec;
-        presto_version->pv_ctime_sec = inode->i_ctime.tv_sec;
-        presto_version->pv_ctime_nsec = inode->i_ctime.tv_nsec;
-        presto_version->pv_size  = (__u64)inode->i_size;
-}
-
-
-/* If uuid is non-null, it is the uuid of the peer that's making the revocation
- * request.  If it is null, this request was made locally, without external
- * pressure to give up the permit.  This most often occurs when a client
- * starts up.
- *
- * FIXME: this function needs to be refactored slightly once we start handling
- * multiple clients.
- */
-int izo_revoke_permit(struct dentry *dentry, __u8 uuid[16])
-{
-        struct presto_file_set *fset; 
-        DECLARE_WAITQUEUE(wait, current);
-        int minor, rc;
-
-        ENTRY;
-
-        minor = presto_i2m(dentry->d_inode);
-        if (minor < 0) {
-                EXIT;
-                return -ENODEV;
-        }
-
-        fset = presto_fset(dentry);
-        if (fset == NULL) {
-                EXIT;
-                return -ENODEV;
-        }
-
-        spin_lock(&fset->fset_permit_lock);
-        if (fset->fset_flags & FSET_PERMIT_WAITING) {
-                CERROR("InterMezzo: Two processes are waiting on the same permit--this not yet supported!  Aborting this particular permit request...\n");
-                EXIT;
-                spin_unlock(&fset->fset_permit_lock);
-                return -EINVAL;
-        }
-
-        if (fset->fset_permit_count == 0)
-                goto got_permit;
-
-        /* Something is still using this permit.  Mark that we're waiting for it
-         * and go to sleep. */
-        rc = izo_mark_fset(dentry, ~0, FSET_PERMIT_WAITING, NULL);
-        spin_unlock(&fset->fset_permit_lock);
-        if (rc < 0) {
-                EXIT;
-                return rc;
-        }
-
-        add_wait_queue(&fset->fset_permit_queue, &wait);
-        while (1) {
-                set_current_state(TASK_INTERRUPTIBLE);
-
-                spin_lock(&fset->fset_permit_lock);
-                if (fset->fset_permit_count == 0)
-                        break;
-                spin_unlock(&fset->fset_permit_lock);
-
-                if (signal_pending(current)) {
-                        /* FIXME: there must be a better thing to return... */
-                        remove_wait_queue(&fset->fset_permit_queue, &wait);
-                        EXIT;
-                        return -ERESTARTSYS;
-                }
-
-                /* FIXME: maybe there should be a timeout here. */
-
-                schedule();
-        }
-
-        remove_wait_queue(&fset->fset_permit_queue, &wait);
- got_permit:
-        /* By this point fset->fset_permit_count is zero and we're holding the
-         * lock. */
-        CDEBUG(D_CACHE, "InterMezzo: releasing permit inode %ld\n",
-               dentry->d_inode->i_ino);
-
-        if (uuid != NULL) {
-                rc = izo_upc_revoke_permit(minor, fset->fset_name, uuid);
-                if (rc < 0) {
-                        spin_unlock(&fset->fset_permit_lock);
-                        EXIT;
-                        return rc;
-                }
-        }
-
-        izo_mark_fset(fset->fset_dentry, ~FSET_PERMIT_WAITING, 0, NULL);
-        izo_mark_fset(fset->fset_dentry, ~FSET_HASPERMIT, 0, NULL);
-        spin_unlock(&fset->fset_permit_lock);
-        EXIT;
-        return 0;
-}
-
-inline int presto_is_read_only(struct presto_file_set * fset)
-{
-        int minor, mask;
-        struct presto_cache *cache = fset->fset_cache;
-
-        minor= cache->cache_psdev->uc_minor;
-        mask= (ISLENTO(minor)? FSET_LENTO_RO : FSET_CLIENT_RO);
-        if ( fset->fset_flags & mask )
-                return 1;
-        mask= (ISLENTO(minor)? CACHE_LENTO_RO : CACHE_CLIENT_RO);
-        return  ((cache->cache_flags & mask)? 1 : 0);
-}
diff -Nru a/fs/intermezzo/psdev.c b/fs/intermezzo/psdev.c
--- a/fs/intermezzo/psdev.c	Sun May 16 01:18:34 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,647 +0,0 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
- *              An implementation of a loadable kernel mode driver providing
- *              multiple kernel/user space bidirectional communications links.
- *
- *              Author:         Alan Cox <alan@cymru.net>
- *
- *              This program is free software; you can redistribute it and/or
- *              modify it under the terms of the GNU General Public License
- *              version 2 as published by the Free Software Foundation.
- *
- *              Adapted to become the Linux 2.0 Coda pseudo device
- *              Peter  Braam  <braam@maths.ox.ac.uk>
- *              Michael Callahan <mjc@emmy.smith.edu>
- *
- *              Changes for Linux 2.1
- *              Copyright (c) 1997 Carnegie-Mellon University
- *
- *              Redone again for InterMezzo
- *              Copyright (c) 1998 Peter J. Braam
- *              Copyright (c) 2000 Mountain View Data, Inc.
- *              Copyright (c) 2000 Tacitus Systems, Inc.
- *              Copyright (c) 2001 Cluster File Systems, Inc.
- *
- */
-
-#include <linux/module.h>
-#include <linux/errno.h>
-#include <linux/kernel.h>
-#include <linux/major.h>
-#include <linux/sched.h>
-#include <linux/lp.h>
-#include <linux/slab.h>
-#include <linux/ioport.h>
-#include <linux/fcntl.h>
-#include <linux/delay.h>
-#include <linux/skbuff.h>
-#include <linux/proc_fs.h>
-#include <linux/vmalloc.h>
-#include <linux/fs.h>
-#include <linux/file.h>
-#include <linux/poll.h>
-#include <linux/init.h>
-#include <linux/list.h>
-#include <linux/devfs_fs_kernel.h>
-#include <asm/io.h>
-#include <asm/segment.h>
-#include <asm/system.h>
-#include <asm/poll.h>
-#include <asm/uaccess.h>
-#include <linux/miscdevice.h>
-
-#include "intermezzo_fs.h"
-#include "intermezzo_psdev.h"
-
-
-#ifdef PRESTO_DEVEL
-int  presto_print_entry = 1;
-int  presto_debug = 4095;
-#else
-int  presto_print_entry = 0;
-int  presto_debug = 0;
-#endif
-
-/* Like inode.c (presto_sym_iops), the initializer is just to prevent
-   izo_channels from appearing as a COMMON symbol (and therefore
-   interfering with other modules that use the same variable name). */
-struct upc_channel izo_channels[MAX_CHANNEL] = {{0}};
-
-int izo_psdev_get_free_channel(void)
-{
-        int i, result = -1;
-        
-        for (i = 0 ; i < MAX_CHANNEL ; i++ ) {
-                if (list_empty(&(izo_channels[i].uc_cache_list))) { 
-                    result = i;
-                    break;
-                }
-        }
-        return result;
-}
-
-
-int izo_psdev_setpid(int minor)
-{
-        struct upc_channel *channel; 
-        if (minor < 0 || minor >= MAX_CHANNEL) { 
-                return -EINVAL;
-        }
-
-        channel = &(izo_channels[minor]); 
-        /*
-         * This ioctl is performed by each Lento that starts up
-         * and wants to do further communication with presto.
-         */
-        CDEBUG(D_PSDEV, "Setting current pid to %d channel %d\n", 
-               current->pid, minor);
-        channel->uc_pid = current->pid;
-        spin_lock(&channel->uc_lock); 
-        if ( !list_empty(&channel->uc_processing) ) {
-                struct list_head *lh;
-                struct upc_req *req;
-                CERROR("WARNING: setpid & processing not empty!\n");
-		list_for_each(lh, &channel->uc_processing) {
-                        req = list_entry(lh, struct upc_req, rq_chain);
-                        /* freeing of req and data is done by the sleeper */
-                        wake_up(&req->rq_sleep);
-                }
-        }
-        if ( !list_empty(&channel->uc_processing) ) {
-                CERROR("BAD: FAILDED TO CLEAN PROCESSING LIST!\n");
-        }
-        spin_unlock(&channel->uc_lock); 
-        EXIT;
-        return 0;
-}
-
-int izo_psdev_setchannel(struct file *file, int fd)
-{
-
-        struct file *psdev_file = fget(fd); 
-        struct presto_cache *cache = presto_get_cache(file->f_dentry->d_inode);
-
-        if (!psdev_file) { 
-                CERROR("%s: no psdev_file!\n", __FUNCTION__);
-                return -EINVAL;
-        }
-
-        if (!cache) { 
-                CERROR("%s: no cache!\n", __FUNCTION__);
-                fput(psdev_file); 
-                return -EINVAL;
-        } 
-
-        if (psdev_file->private_data) { 
-                CERROR("%s: channel already set!\n", __FUNCTION__);
-                fput(psdev_file); 
-                return -EINVAL;
-        }
-
-        psdev_file->private_data = cache->cache_psdev;
-        fput(psdev_file); 
-        EXIT; 
-        return 0; 
-}
-
-inline int presto_lento_up(int minor) 
-{
-        return izo_channels[minor].uc_pid;
-}
-
-static unsigned int presto_psdev_poll(struct file *file, poll_table * wait)
- {
-        struct upc_channel *channel = (struct upc_channel *)file->private_data;
-        unsigned int mask = POLLOUT | POLLWRNORM;
-
-        /* ENTRY; this will flood you */
-        if ( ! channel ) { 
-                CERROR("%s: bad psdev file\n", __FUNCTION__);
-                return -EBADF;
-        }
-
-        poll_wait(file, &(channel->uc_waitq), wait);
-
-        spin_lock(&channel->uc_lock);
-        if (!list_empty(&channel->uc_pending)) {
-                CDEBUG(D_PSDEV, "Non-empty pending list.\n");
-                mask |= POLLIN | POLLRDNORM;
-        }
-        spin_unlock(&channel->uc_lock);
-
-        /* EXIT; will flood you */
-        return mask;
-}
-
-/*
- *      Receive a message written by Lento to the psdev
- */
-static ssize_t presto_psdev_write(struct file *file, const char *buf,
-                                  size_t count, loff_t *off)
-{
-        struct upc_channel *channel = (struct upc_channel *)file->private_data;
-        struct upc_req *req = NULL;
-        struct upc_req *tmp;
-        struct list_head *lh;
-        struct izo_upcall_resp hdr;
-        int error;
-
-        if ( ! channel ) { 
-                CERROR("%s: bad psdev file\n", __FUNCTION__);
-                return -EBADF;
-        }
-
-        /* Peek at the opcode, uniquefier */
-        if ( count < sizeof(hdr) ) {
-              CERROR("presto_psdev_write: Lento didn't write full hdr.\n");
-                return -EINVAL;
-        }
-
-        error = copy_from_user(&hdr, buf, sizeof(hdr));
-        if ( error )
-                return -EFAULT;
-
-        CDEBUG(D_PSDEV, "(process,opc,uniq)=(%d,%d,%d)\n",
-               current->pid, hdr.opcode, hdr.unique);
-
-        spin_lock(&channel->uc_lock); 
-        /* Look for the message on the processing queue. */
-	list_for_each(lh, &channel->uc_processing) {
-                tmp = list_entry(lh, struct upc_req , rq_chain);
-                if (tmp->rq_unique == hdr.unique) {
-                        req = tmp;
-                        /* unlink here: keeps search length minimal */
-                        list_del_init(&req->rq_chain);
-                        CDEBUG(D_PSDEV,"Eureka opc %d uniq %d!\n",
-                               hdr.opcode, hdr.unique);
-                        break;
-                }
-        }
-        spin_unlock(&channel->uc_lock); 
-        if (!req) {
-                CERROR("psdev_write: msg (%d, %d) not found\n",
-                       hdr.opcode, hdr.unique);
-                return(-ESRCH);
-        }
-
-        /* move data into response buffer. */
-        if (req->rq_bufsize < count) {
-                CERROR("psdev_write: too much cnt: %d, cnt: %Zd, "
-                       "opc: %d, uniq: %d.\n",
-                       req->rq_bufsize, count, hdr.opcode, hdr.unique);
-                count = req->rq_bufsize; /* don't have more space! */
-        }
-        error = copy_from_user(req->rq_data, buf, count);
-        if ( error )
-                return -EFAULT;
-
-        /* adjust outsize: good upcalls can be aware of this */
-        req->rq_rep_size = count;
-        req->rq_flags |= REQ_WRITE;
-
-        wake_up(&req->rq_sleep);
-        return(count);
-}
-
-/*
- *      Read a message from the kernel to Lento
- */
-static ssize_t presto_psdev_read(struct file * file, char * buf,
-                                 size_t count, loff_t *off)
-{
-        struct upc_channel *channel = (struct upc_channel *)file->private_data;
-        struct upc_req *req;
-        int result = count;
-
-        if ( ! channel ) { 
-                CERROR("%s: bad psdev file\n", __FUNCTION__);
-                return -EBADF;
-        }
-
-        spin_lock(&channel->uc_lock); 
-        if (list_empty(&(channel->uc_pending))) {
-                CDEBUG(D_UPCALL, "Empty pending list in read, not good\n");
-                spin_unlock(&channel->uc_lock); 
-                return -EINVAL;
-        }
-        req = list_entry((channel->uc_pending.next), struct upc_req, rq_chain);
-        list_del(&(req->rq_chain));
-        if (! (req->rq_flags & REQ_ASYNC) ) {
-                list_add(&(req->rq_chain), channel->uc_processing.prev);
-        }
-        spin_unlock(&channel->uc_lock); 
-
-        req->rq_flags |= REQ_READ;
-
-        /* Move the input args into userspace */
-        CDEBUG(D_PSDEV, "\n");
-        if (req->rq_bufsize <= count) {
-                result = req->rq_bufsize;
-        }
-
-        if (count < req->rq_bufsize) {
-                CERROR ("psdev_read: buffer too small, read %Zd of %d bytes\n",
-                        count, req->rq_bufsize);
-        }
-
-        if ( copy_to_user(buf, req->rq_data, result) ) {
-                BUG();
-                return -EFAULT;
-        }
-
-        /* If request was asynchronous don't enqueue, but free */
-        if (req->rq_flags & REQ_ASYNC) {
-                CDEBUG(D_PSDEV, "psdev_read: async msg (%d, %d), result %d\n",
-                       req->rq_opcode, req->rq_unique, result);
-                PRESTO_FREE(req->rq_data, req->rq_bufsize);
-                PRESTO_FREE(req, sizeof(*req));
-                return result;
-        }
-
-        return result;
-}
-
-
-static int presto_psdev_open(struct inode * inode, struct file * file)
-{
-        ENTRY;
-
-        file->private_data = NULL;  
-
-        CDEBUG(D_PSDEV, "Psdev_open: caller: %d, flags: %d\n", current->pid, file->f_flags);
-
-        EXIT;
-        return 0;
-}
-
-
-
-static int presto_psdev_release(struct inode * inode, struct file * file)
-{
-        struct upc_channel *channel = (struct upc_channel *)file->private_data;
-        struct upc_req *req;
-        struct list_head *lh;
-        ENTRY;
-
-        if ( ! channel ) { 
-                CERROR("%s: bad psdev file\n", __FUNCTION__);
-                return -EBADF;
-        }
-
-        CDEBUG(D_PSDEV, "Lento: pid %d\n", current->pid);
-        channel->uc_pid = 0;
-
-        /* Wake up clients so they can return. */
-        CDEBUG(D_PSDEV, "Wake up clients sleeping for pending.\n");
-        spin_lock(&channel->uc_lock); 
-	list_for_each(lh, &channel->uc_pending) {
-                req = list_entry(lh, struct upc_req, rq_chain);
-
-                /* Async requests stay around for a new lento */
-                if (req->rq_flags & REQ_ASYNC) {
-                        continue;
-                }
-                /* the sleeper will free the req and data */
-                req->rq_flags |= REQ_DEAD; 
-                wake_up(&req->rq_sleep);
-        }
-
-        CDEBUG(D_PSDEV, "Wake up clients sleeping for processing\n");
-	list_for_each(lh, &channel->uc_processing) {
-                req = list_entry(lh, struct upc_req, rq_chain);
-                /* freeing of req and data is done by the sleeper */
-                req->rq_flags |= REQ_DEAD; 
-                wake_up(&req->rq_sleep);
-        }
-        spin_unlock(&channel->uc_lock); 
-        CDEBUG(D_PSDEV, "Done.\n");
-
-        EXIT;
-        return 0;
-}
-
-static struct file_operations presto_psdev_fops = {
-	.owner	 = THIS_MODULE,
-        .read    = presto_psdev_read,
-        .write   = presto_psdev_write,
-        .poll    = presto_psdev_poll,
-        .open    = presto_psdev_open,
-        .release = presto_psdev_release
-};
-
-/* modules setup */
-static struct miscdevice intermezzo_psdev = {
-        INTERMEZZO_MINOR,
-        "intermezzo",
-        &presto_psdev_fops
-};
-
-int  presto_psdev_init(void)
-{
-        int i;
-        int err; 
-
-        if ( (err = misc_register(&intermezzo_psdev)) ) { 
-                CERROR("%s: cannot register %d err %d\n", 
-                       __FUNCTION__, INTERMEZZO_MINOR, err);
-                return -EIO;
-        }
-
-        memset(&izo_channels, 0, sizeof(izo_channels));
-        for ( i = 0 ; i < MAX_CHANNEL ; i++ ) {
-                struct upc_channel *channel = &(izo_channels[i]);
-                INIT_LIST_HEAD(&channel->uc_pending);
-                INIT_LIST_HEAD(&channel->uc_processing);
-                INIT_LIST_HEAD(&channel->uc_cache_list);
-                init_waitqueue_head(&channel->uc_waitq);
-                channel->uc_lock = SPIN_LOCK_UNLOCKED;
-                channel->uc_hard = 0;
-                channel->uc_no_filter = 0;
-                channel->uc_no_journal = 0;
-                channel->uc_no_upcall = 0;
-                channel->uc_timeout = 30;
-                channel->uc_errorval = 0;
-                channel->uc_minor = i;
-        }
-        return 0;
-}
-
-void presto_psdev_cleanup(void)
-{
-        int i;
-
-        misc_deregister(&intermezzo_psdev);
-
-        for ( i = 0 ; i < MAX_CHANNEL ; i++ ) {
-                struct upc_channel *channel = &(izo_channels[i]);
-                struct list_head *lh, *next;
-
-                spin_lock(&channel->uc_lock); 
-                if ( ! list_empty(&channel->uc_pending)) { 
-                        CERROR("Weird, tell Peter: module cleanup and pending list not empty dev %d\n", i);
-                }
-                if ( ! list_empty(&channel->uc_processing)) { 
-                        CERROR("Weird, tell Peter: module cleanup and processing list not empty dev %d\n", i);
-                }
-                if ( ! list_empty(&channel->uc_cache_list)) { 
-                        CERROR("Weird, tell Peter: module cleanup and cache listnot empty dev %d\n", i);
-                }
-		list_for_each_safe(lh, next, &channel->uc_pending) {
-                        struct upc_req *req;
-
-                        req = list_entry(lh, struct upc_req, rq_chain);
-                        if ( req->rq_flags & REQ_ASYNC ) {
-                                list_del(&(req->rq_chain));
-                                CDEBUG(D_UPCALL, "free pending upcall type %d\n",
-                                       req->rq_opcode);
-                                PRESTO_FREE(req->rq_data, req->rq_bufsize);
-                                PRESTO_FREE(req, sizeof(struct upc_req));
-                        } else {
-                                req->rq_flags |= REQ_DEAD; 
-                                wake_up(&req->rq_sleep);
-                        }
-                }
-		list_for_each(lh, &channel->uc_processing) {
-                        struct upc_req *req;
-                        req = list_entry(lh, struct upc_req, rq_chain);
-                        list_del(&(req->rq_chain));
-                        req->rq_flags |= REQ_DEAD; 
-                        wake_up(&req->rq_sleep);
-                }
-                spin_unlock(&channel->uc_lock); 
-        }
-}
-
-/*
- * lento_upcall and lento_downcall routines
- */
-static inline unsigned long lento_waitfor_upcall
-            (struct upc_channel *channel, struct upc_req *req, int minor)
-{
-        DECLARE_WAITQUEUE(wait, current);
-        unsigned long posttime;
-
-        req->rq_posttime = posttime = jiffies;
-
-        add_wait_queue(&req->rq_sleep, &wait);
-        for (;;) {
-                if ( izo_channels[minor].uc_hard == 0 )
-                        set_current_state(TASK_INTERRUPTIBLE);
-                else
-                        set_current_state(TASK_UNINTERRUPTIBLE);
-
-                /* got a reply */
-                if ( req->rq_flags & (REQ_WRITE | REQ_DEAD) )
-                        break;
-
-                /* these cases only apply when TASK_INTERRUPTIBLE */ 
-                if ( !izo_channels[minor].uc_hard && signal_pending(current) ) {
-                        /* if this process really wants to die, let it go */
-                        if (sigismember(&(current->pending.signal), SIGKILL)||
-                            sigismember(&(current->pending.signal), SIGINT) )
-                                break;
-                        /* signal is present: after timeout always return
-                           really smart idea, probably useless ... */
-                        if ( time_after(jiffies, req->rq_posttime +
-                             izo_channels[minor].uc_timeout * HZ) )
-                                break;
-                }
-                schedule();
-        }
-
-        spin_lock(&channel->uc_lock);
-        list_del_init(&req->rq_chain); 
-        spin_unlock(&channel->uc_lock);
-        remove_wait_queue(&req->rq_sleep, &wait);
-        set_current_state(TASK_RUNNING);
-
-        CDEBUG(D_SPECIAL, "posttime: %ld, returned: %ld\n",
-               posttime, jiffies-posttime);
-        return  (jiffies - posttime);
-}
-
-/*
- * lento_upcall will return an error in the case of
- * failed communication with Lento _or_ will peek at Lento
- * reply and return Lento's error.
- *
- * As lento has 2 types of errors, normal errors (positive) and internal
- * errors (negative), normal errors are negated, while internal errors
- * are all mapped to -EINTR, while showing a nice warning message. (jh)
- *
- * lento_upcall will always free buffer, either directly, when an upcall
- * is read (in presto_psdev_read), when the filesystem is unmounted, or
- * when the module is unloaded.
- */
-int izo_upc_upcall(int minor, int *size, struct izo_upcall_hdr *buffer, 
-                   int async)
-{
-        unsigned long runtime;
-        struct upc_channel *channel;
-        struct izo_upcall_resp *out;
-        struct upc_req *req;
-        int error = 0;
-
-        ENTRY;
-        channel = &(izo_channels[minor]);
-
-        if (channel->uc_no_upcall) {
-                EXIT;
-                goto exit_buf;
-        }
-        if (!channel->uc_pid && !async) {
-                EXIT;
-                error = -ENXIO;
-                goto exit_buf;
-        }
-
-        /* Format the request message. */
-        PRESTO_ALLOC(req, sizeof(struct upc_req));
-        if ( !req ) {
-                EXIT;
-                error = -ENOMEM;
-                goto exit_buf;
-        }
-        req->rq_data = (void *)buffer;
-        req->rq_flags = 0;
-        req->rq_bufsize = *size;
-        req->rq_rep_size = 0;
-        req->rq_opcode = buffer->u_opc;
-        req->rq_unique = ++channel->uc_seq;
-        init_waitqueue_head(&req->rq_sleep);
-
-        /* Fill in the common input args. */
-        buffer->u_uniq = req->rq_unique;
-        buffer->u_async = async;
-
-        /* Remove potential datarace possibility*/
-        if ( async ) 
-                req->rq_flags = REQ_ASYNC;
-
-        spin_lock(&channel->uc_lock); 
-        /* Append msg to pending queue and poke Lento. */
-        list_add(&req->rq_chain, channel->uc_pending.prev);
-        spin_unlock(&channel->uc_lock); 
-        CDEBUG(D_UPCALL,
-               "Proc %d waking Lento %d for(opc,uniq) =(%d,%d) msg at %p.\n",
-               current->pid, channel->uc_pid, req->rq_opcode,
-               req->rq_unique, req);
-        wake_up_interruptible(&channel->uc_waitq);
-
-        if ( async ) {
-                /* req, rq_data are freed in presto_psdev_read for async */
-                /* req->rq_flags = REQ_ASYNC;*/
-                EXIT;
-                return 0;
-        }
-
-        /* We can be interrupted while we wait for Lento to process
-         * our request.  If the interrupt occurs before Lento has read
-         * the request, we dequeue and return. If it occurs after the
-         * read but before the reply, we dequeue, send a signal
-         * message, and return. If it occurs after the reply we ignore
-         * it. In no case do we want to restart the syscall.  If it
-         * was interrupted by a lento shutdown (psdev_close), return
-         * ENODEV.  */
-
-        /* Go to sleep.  Wake up on signals only after the timeout. */
-        runtime = lento_waitfor_upcall(channel, req, minor);
-
-        CDEBUG(D_TIMING, "opc: %d time: %ld uniq: %d size: %d\n",
-               req->rq_opcode, jiffies - req->rq_posttime,
-               req->rq_unique, req->rq_rep_size);
-        CDEBUG(D_UPCALL,
-               "..process %d woken up by Lento for req at 0x%p, data at %p\n",
-               current->pid, req, req->rq_data);
-
-        if (channel->uc_pid) {      /* i.e. Lento is still alive */
-          /* Op went through, interrupt or not we go on */
-            if (req->rq_flags & REQ_WRITE) {
-                    out = (struct izo_upcall_resp *)req->rq_data;
-                    /* here we map positive Lento errors to kernel errors */
-                    if ( out->result < 0 ) {
-                            CERROR("Tell Peter: Lento returns negative error %d, for oc %d!\n",
-                                   out->result, out->opcode);
-                          out->result = EINVAL;
-                    }
-                    error = -out->result;
-                    CDEBUG(D_UPCALL, "upcall: (u,o,r) (%d, %d, %d) out at %p\n",
-                           out->unique, out->opcode, out->result, out);
-                    *size = req->rq_rep_size;
-                    EXIT;
-                    goto exit_req;
-            }
-            /* Interrupted before lento read it. */
-            if ( !(req->rq_flags & REQ_READ) && signal_pending(current)) {
-                    CDEBUG(D_UPCALL,
-                           "Interrupt before read: (op,un)=(%d,%d), flags %x\n",
-                           req->rq_opcode, req->rq_unique, req->rq_flags);
-                    /* perhaps the best way to convince the app to give up? */
-                    error = -EINTR;
-                    EXIT;
-                    goto exit_req;
-            }
-
-            /* interrupted after Lento did its read, send signal */
-            if ( (req->rq_flags & REQ_READ) && signal_pending(current) ) {
-                    CDEBUG(D_UPCALL,"Interrupt after read: op = %d.%d, flags = %x\n",
-                           req->rq_opcode, req->rq_unique, req->rq_flags);
-
-                    error = -EINTR;
-            } else {
-                  CERROR("Lento: Strange interruption - tell Peter.\n");
-                    error = -EINTR;
-            }
-        } else {        /* If lento died i.e. !UC_OPEN(channel) */
-                CERROR("lento_upcall: Lento dead on (op,un) (%d.%d) flags %d\n",
-                       req->rq_opcode, req->rq_unique, req->rq_flags);
-                error = -ENODEV;
-        }
-
-exit_req:
-        PRESTO_FREE(req, sizeof(struct upc_req));
-exit_buf:
-        PRESTO_FREE(buffer,*size);
-        return error;
-}
diff -Nru a/fs/intermezzo/replicator.c b/fs/intermezzo/replicator.c
--- a/fs/intermezzo/replicator.c	Sun May 16 01:18:35 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,290 +0,0 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
- * Copyright (C) 2001 Cluster File Systems, Inc. <braam@clusterfs.com>
- * Copyright (C) 2001 Tacit Networks, Inc. <phil@off.net>
- *
- *   This file is part of InterMezzo, http://www.inter-mezzo.org.
- *
- *   InterMezzo is free software; you can redistribute it and/or
- *   modify it under the terms of version 2 of the GNU General Public
- *   License as published by the Free Software Foundation.
- *
- *   InterMezzo is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with InterMezzo; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * Manage RCVD records for clients in the kernel
- *
- */
-
-#include <linux/module.h>
-#include <asm/uaccess.h>
-
-#include <linux/errno.h>
-#include <linux/fs.h>
-#include <linux/fsfilter.h>
-
-#include "intermezzo_fs.h"
-
-/*
- * this file contains a hash table of replicators/clients for a
- * fileset. It allows fast lookup and update of reintegration status
- */
-
-struct izo_offset_rec {
-	struct list_head or_list;
-	char             or_uuid[16];
-	loff_t           or_offset;
-};
-
-#define RCACHE_BITS 8
-#define RCACHE_SIZE (1 << RCACHE_BITS)
-#define RCACHE_MASK (RCACHE_SIZE - 1)
-
-static struct list_head *
-izo_rep_cache(void)
-{
-	int i;
-	struct list_head *cache;
-	PRESTO_ALLOC(cache, sizeof(struct list_head) * RCACHE_SIZE);
-	if (cache == NULL) {
-		CERROR("intermezzo-fatal: no memory for replicator cache\n");
-                return NULL;
-	}
-	memset(cache, 0, sizeof(struct list_head) * RCACHE_SIZE);
-	for (i = 0; i < RCACHE_SIZE; i++)
-		INIT_LIST_HEAD(&cache[i]);
-
-	return cache;
-}
-
-static struct list_head *
-izo_rep_hash(struct list_head *cache, char *uuid)
-{
-        return &cache[(RCACHE_MASK & uuid[1])];
-}
-
-static void
-izo_rep_cache_clean(struct presto_file_set *fset)
-{
-	int i;
-	struct list_head *bucket;
-	struct list_head *tmp;
-
-        if (fset->fset_clients == NULL)
-		return;
-        for (i = 0; i < RCACHE_SIZE; i++) {
-		tmp = bucket = &fset->fset_clients[i];
-
-		tmp = tmp->next;
-                while (tmp != bucket) {
-			struct izo_offset_rec *offrec;
-			tmp = tmp->next;
-			list_del(tmp);
-			offrec = list_entry(tmp, struct izo_offset_rec,
-					    or_list);
-			PRESTO_FREE(offrec, sizeof(struct izo_offset_rec));
-		}
-	}
-}
-
-struct izo_offset_rec *
-izo_rep_cache_find(struct presto_file_set *fset, char *uuid)
-{
-	struct list_head *tmp, *buck = izo_rep_hash(fset->fset_clients, uuid);
-        struct izo_offset_rec *rec = NULL;
-
-	list_for_each(tmp, buck) {
-		rec = list_entry(tmp, struct izo_offset_rec, or_list);
-                if ( memcmp(rec->or_uuid, uuid, sizeof(rec->or_uuid)) == 0 )
-			return rec;
-	}
-
-	return NULL;
-}
-
-static int
-izo_rep_cache_add(struct presto_file_set *fset, struct izo_rcvd_rec *rec,
-                  loff_t offset)
-{
-        struct izo_offset_rec *offrec;
-
-        if (izo_rep_cache_find(fset, rec->lr_uuid)) {
-                CERROR("izo: duplicate client entry %s off %Ld\n",
-                       fset->fset_name, offset);
-                return -EINVAL;
-        }
-
-        PRESTO_ALLOC(offrec, sizeof(*offrec));
-        if (offrec == NULL) {
-                CERROR("izo: cannot allocate offrec\n");
-                return -ENOMEM;
-        }
-
-        memcpy(offrec->or_uuid, rec->lr_uuid, sizeof(rec->lr_uuid));
-        offrec->or_offset = offset;
-
-        list_add(&offrec->or_list,
-                 izo_rep_hash(fset->fset_clients, rec->lr_uuid));
-        return 0;
-}
-
-int
-izo_rep_cache_init(struct presto_file_set *fset)
-{
-	struct izo_rcvd_rec rec;
-        loff_t offset = 0, last_offset = 0;
-
-	fset->fset_clients = izo_rep_cache();
-        if (fset->fset_clients == NULL) {
-		CERROR("Error initializing client cache\n");
-		return -ENOMEM;
-	}
-
-        while ( presto_fread(fset->fset_rcvd.fd_file, (char *)&rec,
-                             sizeof(rec), &offset) == sizeof(rec) ) {
-                int rc;
-
-                if ((rc = izo_rep_cache_add(fset, &rec, last_offset)) < 0) {
-			izo_rep_cache_clean(fset);
-			return rc;
-		}
-
-                last_offset = offset;
-	}
-
-	return 0;
-}
-
-/*
- * Return local last_rcvd record for the client. Update or create 
- * if necessary.
- *
- * XXX: After this call, any -EINVAL from izo_rcvd_get is a real error.
- */
-int
-izo_repstatus(struct presto_file_set *fset,  __u64 client_kmlsize, 
-              struct izo_rcvd_rec *lr_client, struct izo_rcvd_rec *lr_server)
-{
-        int rc;
-        rc = izo_rcvd_get(lr_server, fset, lr_client->lr_uuid);
-        if (rc < 0 && rc != -EINVAL) {
-                return rc;
-        }
-
-        /* client is new or has been reset. */
-        if (rc < 0 || (client_kmlsize == 0 && lr_client->lr_remote_offset == 0)) {
-                memset(lr_server, 0, sizeof(*lr_server));
-                memcpy(lr_server->lr_uuid, lr_client->lr_uuid, sizeof(lr_server->lr_uuid));
-                rc = izo_rcvd_write(fset, lr_server);
-                if (rc < 0)
-                        return rc;
-        }
-
-        /* update intersync */
-        rc = izo_upc_repstatus(presto_f2m(fset), fset->fset_name, lr_server);
-        return rc;
-}
-
-loff_t
-izo_rcvd_get(struct izo_rcvd_rec *rec, struct presto_file_set *fset, char *uuid)
-{
-        struct izo_offset_rec *offrec;
-        struct izo_rcvd_rec tmprec;
-        loff_t offset;
-
-        offrec = izo_rep_cache_find(fset, uuid);
-        if (offrec == NULL) {
-                CDEBUG(D_SPECIAL, "izo_get_rcvd: uuid not in hash.\n");
-                return -EINVAL;
-        }
-        offset = offrec->or_offset;
-
-        if (rec == NULL)
-                return offset;
-
-        if (presto_fread(fset->fset_rcvd.fd_file, (char *)&tmprec,
-                         sizeof(tmprec), &offset) != sizeof(tmprec)) {
-                CERROR("izo_get_rcvd: Unable to read from last_rcvd file offset "
-                       "%Lu\n", offset);
-                return -EIO;
-        }
-
-        memcpy(rec->lr_uuid, tmprec.lr_uuid, sizeof(tmprec.lr_uuid));
-        rec->lr_remote_recno = le64_to_cpu(tmprec.lr_remote_recno);
-        rec->lr_remote_offset = le64_to_cpu(tmprec.lr_remote_offset);
-        rec->lr_local_recno = le64_to_cpu(tmprec.lr_local_recno);
-        rec->lr_local_offset = le64_to_cpu(tmprec.lr_local_offset);
-        rec->lr_last_ctime = le64_to_cpu(tmprec.lr_last_ctime);
-
-        return offrec->or_offset;
-}
-
-/* Try to lookup the UUID in the hash.  Insert it if it isn't found.  Write the
- * data to the file.
- *
- * Returns the offset of the beginning of the record in the last_rcvd file. */
-loff_t
-izo_rcvd_write(struct presto_file_set *fset, struct izo_rcvd_rec *rec)
-{
-        struct izo_offset_rec *offrec;
-        loff_t offset, rc;
-
-        ENTRY;
-
-        offrec = izo_rep_cache_find(fset, rec->lr_uuid);
-        if (offrec == NULL) {
-                /* I don't think it should be possible for an entry to be not in
-                 * the hash table without also having an invalid offset, but we
-                 * handle it gracefully regardless. */
-                write_lock(&fset->fset_rcvd.fd_lock);
-                offset = fset->fset_rcvd.fd_offset;
-                fset->fset_rcvd.fd_offset += sizeof(*rec);
-                write_unlock(&fset->fset_rcvd.fd_lock);
-
-                rc = izo_rep_cache_add(fset, rec, offset);
-                if (rc < 0) {
-                        EXIT;
-                        return rc;
-                }
-        } else
-                offset = offrec->or_offset;
-        
-
-        rc = presto_fwrite(fset->fset_rcvd.fd_file, (char *)rec, sizeof(*rec),
-                           &offset);
-        if (rc == sizeof(*rec))
-                /* presto_fwrite() advances 'offset' */
-                rc = offset - sizeof(*rec);
-
-        EXIT;
-        return rc;
-}
-
-loff_t
-izo_rcvd_upd_remote(struct presto_file_set *fset, char * uuid,  __u64 remote_recno, 
-                    __u64 remote_offset)
-{
-        struct izo_rcvd_rec rec;
-        
-        loff_t rc;
-
-        ENTRY;
-        rc = izo_rcvd_get(&rec, fset, uuid);
-        if (rc < 0)
-                return rc;
-        rec.lr_remote_recno = remote_recno;
-        rec.lr_remote_offset = remote_offset;
-
-        rc = izo_rcvd_write(fset, &rec);
-        EXIT;
-        if (rc < 0)
-                return rc;
-        return 0;
-}
diff -Nru a/fs/intermezzo/super.c b/fs/intermezzo/super.c
--- a/fs/intermezzo/super.c	Sun May 16 01:18:37 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,407 +0,0 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
- *  Copyright (C) 1998 Peter J. Braam <braam@clusterfs.com>
- *  Copyright (C) 2000 Stelias Computing, Inc.
- *  Copyright (C) 2000 Red Hat, Inc.
- *
- *   This file is part of InterMezzo, http://www.inter-mezzo.org.
- *
- *   InterMezzo is free software; you can redistribute it and/or
- *   modify it under the terms of version 2 of the GNU General Public
- *   License as published by the Free Software Foundation.
- *
- *   InterMezzo is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with InterMezzo; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- *  presto's super.c
- */
-
-static char rcsid[] __attribute ((unused)) = "$Id: super.c,v 1.4 2002/10/12 02:16:19 rread Exp $";
-#define INTERMEZZO_VERSION "$Revision: 1.4 $"
-
-#include <asm/bitops.h>
-#include <asm/uaccess.h>
-#include <asm/system.h>
-
-#include <linux/errno.h>
-#include <linux/fs.h>
-#include <linux/ext2_fs.h>
-#include <linux/slab.h>
-#include <linux/vmalloc.h>
-#include <linux/sched.h>
-#include <linux/stat.h>
-#include <linux/string.h>
-#include <linux/blkdev.h>
-#include <linux/init.h>
-#include <linux/devfs_fs_kernel.h>
-#include <linux/module.h>
-
-#include "intermezzo_fs.h"
-#include "intermezzo_psdev.h"
-
-#ifdef PRESTO_DEBUG
-long presto_vmemory = 0;
-long presto_kmemory = 0;
-#endif
-
-/* returns an allocated string, copied out from data if opt is found */
-static char *opt_read(const char *opt, char *data)
-{
-        char *value;
-        char *retval;
-
-        CDEBUG(D_SUPER, "option: %s, data %s\n", opt, data);
-        if ( strncmp(opt, data, strlen(opt)) )
-                return NULL;
-
-        if ( (value = strchr(data, '=')) == NULL )
-                return NULL;
-
-        value++;
-        PRESTO_ALLOC(retval, strlen(value) + 1);
-        if ( !retval ) {
-                CERROR("InterMezzo: Out of memory!\n");
-                return NULL;
-        }
-
-        strcpy(retval, value);
-        CDEBUG(D_SUPER, "Assigned option: %s, value %s\n", opt, retval);
-        return retval;
-}
-
-static void opt_store(char **dst, char *opt)
-{
-        if (!dst) 
-                CERROR("intermezzo: store_opt, error dst == NULL\n"); 
-
-        if (*dst)
-                PRESTO_FREE(*dst, strlen(*dst) + 1);
-        *dst = opt;
-}
-
-static void opt_set_default(char **dst, char *defval)
-{
-        if (!dst) 
-                CERROR("intermezzo: store_opt, error dst == NULL\n"); 
-
-        if (*dst)
-                PRESTO_FREE(*dst, strlen(*dst) + 1);
-        if (defval) {
-                char *def_alloced; 
-                PRESTO_ALLOC(def_alloced, strlen(defval)+1);
-                if (!def_alloced) {
-                        CERROR("InterMezzo: Out of memory!\n");
-                        return ;
-                }
-                strcpy(def_alloced, defval);
-                *dst = def_alloced; 
-        }
-}
-
-
-/* Find the options for InterMezzo in "options", saving them into the
- * passed pointers.  If the pointer is null, the option is discarded.
- * Copy out all non-InterMezzo options into cache_data (to be passed
- * to the read_super operation of the cache).  The return value will
- * be a pointer to the end of the cache_data.
- */
-static char *presto_options(struct file_system_type *fstype, 
-                            char *options, char *cache_data,
-                            char **cache_type, char **fileset,
-                            char **channel)
-{
-        char *this_char;
-        char *opt_ptr = options;
-        char *cache_data_end = cache_data;
-
-        /* set the defaults */ 
-        if (strcmp(fstype->name, "intermezzo") == 0)
-            opt_set_default(cache_type, "ext3"); 
-        else 
-            opt_set_default(cache_type, "tmpfs"); 
-            
-        if (!options || !cache_data)
-                return cache_data_end;
-
-
-        CDEBUG(D_SUPER, "parsing options\n");
-        while ((this_char = strsep (&opt_ptr, ",")) != NULL) {
-                char *opt;
-                if (!*this_char)
-                        continue;
-                CDEBUG(D_SUPER, "this_char %s\n", this_char);
-
-                if ( (opt = opt_read("fileset", this_char)) ) {
-                        opt_store(fileset, opt);
-                        continue;
-                }
-                if ( (opt = opt_read("cache_type", this_char)) ) {
-                        opt_store(cache_type, opt);
-                        continue;
-                }
-                if ( (opt = opt_read("channel", this_char)) ) {
-                        opt_store(channel, opt);
-                        continue;
-                }
-
-                cache_data_end += 
-                        sprintf(cache_data_end, "%s%s",
-                                cache_data_end != cache_data ? ",":"", 
-                                this_char);
-        }
-
-        return cache_data_end;
-}
-
-static int presto_set_channel(struct presto_cache *cache, char *channel)
-{
-        int minor; 
-
-        ENTRY;
-        if (!channel) {
-                minor = izo_psdev_get_free_channel();
-        } else {
-                minor = simple_strtoul(channel, NULL, 0); 
-        }
-        if (minor < 0 || minor >= MAX_CHANNEL) { 
-                CERROR("all channels in use or channel too large %d\n", 
-                       minor);
-                return -EINVAL;
-        }
-        
-        cache->cache_psdev = &(izo_channels[minor]);
-        list_add(&cache->cache_channel_list, 
-                 &cache->cache_psdev->uc_cache_list); 
-
-        EXIT;
-        return minor;
-}
-
-/* We always need to remove the presto options before passing 
-   mount options to cache FS */
-struct super_block *
-presto_get_sb(struct file_system_type *izo_type, int flags,
-	      const char *devname, void *data)
-{
-        struct file_system_type *fstype;
-        struct presto_cache *cache = NULL;
-        char *cache_data = NULL;
-        char *cache_data_end;
-        char *cache_type = NULL;
-        char *fileset = NULL;
-        char *channel = NULL;
-        struct super_block *sb;
-        int err; 
-        unsigned int minor;
-
-        ENTRY;
-
-        /* reserve space for the cache's data */
-        PRESTO_ALLOC(cache_data, PAGE_SIZE);
-        if ( !cache_data ) {
-                CERROR("presto_read_super: Cannot allocate data page.\n");
-                EXIT;
-                goto out_err;
-        }
-
-        /* read and validate options */
-        cache_data_end = presto_options(izo_type, data, cache_data, &cache_type, 
-                                        &fileset, &channel);
-
-        /* was there anything for the cache filesystem in the data? */
-        if (cache_data_end == cache_data) {
-                PRESTO_FREE(cache_data, PAGE_SIZE);
-                cache_data_end = cache_data = NULL;
-        } else {
-                CDEBUG(D_SUPER, "cache_data at %p is: %s\n", cache_data,
-                       cache_data);
-        }
-
-        /* set up the cache */
-        cache = presto_cache_init();
-        if ( !cache ) {
-                CERROR("presto_read_super: failure allocating cache.\n");
-                EXIT;
-                goto out_err;
-        }
-        cache->cache_type = cache_type;
-
-        /* link cache to channel */ 
-        minor = presto_set_channel(cache, channel);
-        if (minor < 0) { 
-                EXIT;
-                goto out_err;
-        }
-
-        CDEBUG(D_SUPER, "Presto: type=%s, fset=%s, dev= %d, flags %x\n",
-               cache_type, fileset?fileset:"NULL", minor, cache->cache_flags);
-
-        /* get the filter for the cache */
-        fstype = get_fs_type(cache_type);
-        cache->cache_filter = filter_get_filter_fs((const char *)cache_type); 
-        if ( !fstype || !cache->cache_filter) {
-                CERROR("Presto: unrecognized fs type or cache type\n");
-                EXIT;
-                goto out_err;
-        }
-
-        sb = fstype->get_sb(fstype, flags, devname, cache_data);
-
-        if ( !sb || IS_ERR(sb)) {
-                CERROR("InterMezzo: cache mount failure.\n");
-                EXIT;
-                goto out_err;
-        }
-
-        /* can we in fact mount the cache */ 
-        if (sb->s_bdev && (strcmp(fstype->name, "vintermezzo") == 0)) {
-                CERROR("vintermezzo must not be used with a  block device\n");
-                EXIT;
-                goto out_err;
-        }
-
-        /* this might have been freed above */
-        if (cache_data) {
-                PRESTO_FREE(cache_data, PAGE_SIZE);
-                cache_data = NULL;
-        }
-
-        cache->cache_sb = sb;
-        cache->cache_root = dget(sb->s_root);
-
-        /* we now know the dev of the cache: hash the cache */
-        presto_cache_add(cache);
-        err = izo_prepare_fileset(sb->s_root, fileset); 
-
-        filter_setup_journal_ops(cache->cache_filter, cache->cache_type); 
-
-        /* make sure we have our own super operations: sb
-           still contains the cache operations */
-        filter_setup_super_ops(cache->cache_filter, sb->s_op, 
-                               &presto_super_ops);
-        sb->s_op = filter_c2usops(cache->cache_filter);
-
-        /* get izo directory operations: sb->s_root->d_inode exists now */
-        filter_setup_dir_ops(cache->cache_filter, sb->s_root->d_inode,
-                             &presto_dir_iops, &presto_dir_fops);
-        filter_setup_dentry_ops(cache->cache_filter, sb->s_root->d_op, 
-                                &presto_dentry_ops);
-        sb->s_root->d_inode->i_op = filter_c2udiops(cache->cache_filter);
-        sb->s_root->d_inode->i_fop = filter_c2udfops(cache->cache_filter);
-        sb->s_root->d_op = filter_c2udops(cache->cache_filter);
-
-        EXIT;
-        return sb;
-
- out_err:
-        CDEBUG(D_SUPER, "out_err called\n");
-        if (cache)
-                PRESTO_FREE(cache, sizeof(struct presto_cache));
-        if (cache_data)
-                PRESTO_FREE(cache_data, PAGE_SIZE);
-        if (fileset)
-                PRESTO_FREE(fileset, strlen(fileset) + 1);
-        if (channel)
-                PRESTO_FREE(channel, strlen(channel) + 1);
-        if (cache_type)
-                PRESTO_FREE(cache_type, strlen(cache_type) + 1);
-
-        CDEBUG(D_MALLOC, "mount error exit: kmem %ld, vmem %ld\n",
-               presto_kmemory, presto_vmemory);
-        return ERR_PTR(-EINVAL);
-}
-
-
-
-
-#ifdef PRESTO_DEVEL
-static DECLARE_FSTYPE(presto_fs_type, "izo", presto_read_super, FS_REQUIRES_DEV);
-static DECLARE_FSTYPE(vpresto_fs_type, "vintermezzo", presto_read_super, FS_LITTER);
-#else 
-static struct file_system_type vpresto_fs_type = {
-	.owner		= THIS_MODULE,
-	.name		= "vintermezzo",
-	.get_sb		= presto_get_sb,
-	.kill_sb	= kill_litter_super,
-};
-static struct file_system_type presto_fs_type = {
-	.owner		= THIS_MODULE,
-	.name		= "intermezzo",
-	.get_sb		= presto_get_sb,
-	.kill_sb	= kill_block_super,
-	.fs_flags	= FS_REQUIRES_DEV,
-};
-#endif
-
-
-
-int __init init_intermezzo_fs(void)
-{
-        int status;
-
-        printk(KERN_INFO "InterMezzo Kernel/Intersync communications " INTERMEZZO_VERSION
-               " info@clusterfs.com\n");
-
-        status = presto_psdev_init();
-        if ( status ) {
-                CERROR("Problem (%d) in init_intermezzo_psdev\n", status);
-                return status;
-        }
-
-        status = init_intermezzo_sysctl();
-        if (status) {
-                CERROR("presto: failed in init_intermezzo_sysctl!\n");
-        }
-
-        presto_cache_init_hash();
-
-        if (!presto_init_ddata_cache()) {
-                CERROR("presto out of memory!\n");
-                return -ENOMEM;
-        }
-
-        status = register_filesystem(&presto_fs_type);
-        if (status) {
-                CERROR("presto: failed in register_filesystem!\n");
-        }
-        status = register_filesystem(&vpresto_fs_type);
-        if (status) {
-                CERROR("vpresto: failed in register_filesystem!\n");
-        }
-        return status;
-}
-
-void __exit exit_intermezzo_fs(void)
-{
-        int err;
-
-        ENTRY;
-
-        if ( (err = unregister_filesystem(&presto_fs_type)) != 0 ) {
-                CERROR("presto: failed to unregister filesystem\n");
-        }
-        if ( (err = unregister_filesystem(&vpresto_fs_type)) != 0 ) {
-                CERROR("vpresto: failed to unregister filesystem\n");
-        }
-
-        presto_psdev_cleanup();
-        cleanup_intermezzo_sysctl();
-        presto_cleanup_ddata_cache();
-        CERROR("after cleanup: kmem %ld, vmem %ld\n",
-               presto_kmemory, presto_vmemory);
-}
-
-
-MODULE_AUTHOR("Cluster Filesystems Inc. <info@clusterfs.com>");
-MODULE_DESCRIPTION("InterMezzo Kernel/Intersync communications " INTERMEZZO_VERSION);
-MODULE_LICENSE("GPL");
-
-module_init(init_intermezzo_fs)
-module_exit(exit_intermezzo_fs)
diff -Nru a/fs/intermezzo/sysctl.c b/fs/intermezzo/sysctl.c
--- a/fs/intermezzo/sysctl.c	Sun May 16 01:18:34 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,368 +0,0 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
- *  Copyright (C) 1999 Peter J. Braam <braam@clusterfs.com>
- *
- *   This file is part of InterMezzo, http://www.inter-mezzo.org.
- *
- *   InterMezzo is free software; you can redistribute it and/or
- *   modify it under the terms of version 2 of the GNU General Public
- *   License as published by the Free Software Foundation.
- *
- *   InterMezzo is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with InterMezzo; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- *  Sysctrl entries for Intermezzo!
- */
-
-#include <linux/config.h> /* for CONFIG_PROC_FS */
-#include <linux/module.h>
-#include <linux/sched.h>
-#include <linux/mm.h>
-#include <linux/sysctl.h>
-#include <linux/proc_fs.h>
-#include <linux/slab.h>
-#include <linux/vmalloc.h>
-#include <linux/stat.h>
-#include <linux/ctype.h>
-#include <linux/init.h>
-#include <asm/bitops.h>
-#include <asm/segment.h>
-#include <asm/uaccess.h>
-#include <linux/utsname.h>
-
-#include "intermezzo_fs.h"
-#include "intermezzo_psdev.h"
-
-/* /proc entries */
-
-#ifdef CONFIG_PROC_FS
-struct proc_dir_entry *proc_fs_intermezzo;
-int intermezzo_mount_get_info( char * buffer, char ** start, off_t offset,
-			       int length)
-{
-	int len=0;
-
-	/* this works as long as we are below 1024 characters! */
-	*start = buffer + offset;
-	len -= offset;
-
-	if ( len < 0 )
-		return -EINVAL;
-
-	return len;
-}
-
-#endif
-
-
-/* SYSCTL below */
-
-static struct ctl_table_header *intermezzo_table_header = NULL;
-/* 0x100 to avoid any chance of collisions at any point in the tree with
- * non-directories
- */
-#define PSDEV_INTERMEZZO  (0x100)
-
-#define PSDEV_DEBUG	   1      /* control debugging */
-#define PSDEV_TRACE	   2      /* control enter/leave pattern */
-#define PSDEV_TIMEOUT      3      /* timeout on upcalls to become intrble */
-#define PSDEV_HARD         4      /* mount type "hard" or "soft" */
-#define PSDEV_NO_FILTER    5      /* controls presto_chk */
-#define PSDEV_NO_JOURNAL   6      /* controls presto_chk */
-#define PSDEV_NO_UPCALL    7      /* controls lento_upcall */
-#define PSDEV_ERRORVAL     8      /* controls presto_debug_fail_blkdev */
-#define PSDEV_EXCL_GID     9      /* which GID is ignored by presto */
-#define PSDEV_BYTES_TO_CLOSE 11   /* bytes to write before close */
-
-/* These are global presto control options */
-#define PRESTO_PRIMARY_CTLCNT 2
-static struct ctl_table presto_table[ PRESTO_PRIMARY_CTLCNT + MAX_CHANNEL + 1] =
-{
-	{PSDEV_DEBUG, "debug", &presto_debug, sizeof(int), 0644, NULL, &proc_dointvec},
-	{PSDEV_TRACE, "trace", &presto_print_entry, sizeof(int), 0644, NULL, &proc_dointvec},
-};
-
-/*
- * Intalling the sysctl entries: strategy
- * - have templates for each /proc/sys/intermezzo/ entry
- *   such an entry exists for each /dev/presto
- *    (proto_channel_entry)
- * - have a template for the contents of such directories
- *    (proto_psdev_table)
- * - have the master table (presto_table)
- *
- * When installing, malloc, memcpy and fix up the pointers to point to
- * the appropriate constants in izo_channels[your_minor]
- */
-
-static ctl_table proto_psdev_table[] = {
-	{PSDEV_HARD, "hard", 0, sizeof(int), 0644, NULL, &proc_dointvec},
-	{PSDEV_NO_FILTER, "no_filter", 0, sizeof(int), 0644, NULL, &proc_dointvec},
-	{PSDEV_NO_JOURNAL, "no_journal", NULL, sizeof(int), 0644, NULL, &proc_dointvec},
-	{PSDEV_NO_UPCALL, "no_upcall", NULL, sizeof(int), 0644, NULL, &proc_dointvec},
-	{PSDEV_TIMEOUT, "timeout", NULL, sizeof(int), 0644, NULL, &proc_dointvec},
-#ifdef PRESTO_DEBUG
-	{PSDEV_ERRORVAL, "errorval", NULL, sizeof(int), 0644, NULL, &proc_dointvec},
-#endif
-	{ 0 }
-};
-
-static ctl_table proto_channel_entry = {
-	PSDEV_INTERMEZZO, 0,  NULL, 0, 0555, 0,
-};
-
-static ctl_table intermezzo_table[2] = {
-	{PSDEV_INTERMEZZO, "intermezzo",    NULL, 0, 0555, presto_table},
-	{0}
-};
-
-/* support for external setting and getting of opts. */
-/* particularly via ioctl. The Right way to do this is via sysctl,
- * but that will have to wait until intermezzo gets its own nice set of
- * sysctl IDs
- */
-/* we made these separate as setting may in future be more restricted
- * than getting
- */
-#ifdef RON_MINNICH
-int dosetopt(int minor, struct psdev_opt *opt)
-{
-	int retval = 0;
-	int newval = opt->optval;
-
-	ENTRY;
-
-	switch(opt->optname) {
-
-	case PSDEV_TIMEOUT:
-		izo_channels[minor].uc_timeout = newval;
-		break;
-
-	case PSDEV_HARD:
-		izo_channels[minor].uc_hard = newval;
-		break;
-
-	case PSDEV_NO_FILTER:
-		izo_channels[minor].uc_no_filter = newval;
-		break;
-
-	case PSDEV_NO_JOURNAL:
-		izo_channels[minor].uc_no_journal = newval;
-		break;
-
-	case PSDEV_NO_UPCALL:
-		izo_channels[minor].uc_no_upcall = newval;
-		break;
-
-#ifdef PRESTO_DEBUG
-	case PSDEV_ERRORVAL: {
-		/* If we have a positive arg, set a breakpoint for that
-		 * value.  If we have a negative arg, make that device
-		 * read-only.  FIXME  It would be much better to only
-		 * allow setting the underlying device read-only for the
-		 * current presto cache.
-		 */
-		int errorval = izo_channels[minor].uc_errorval;
-		if (errorval < 0) {
-			if (newval == 0)
-				set_device_ro(-errorval, 0);
-			else
-				CERROR("device %s already read only\n",
-				       kdevname(-errorval));
-		} else {
-			if (newval < 0)
-				set_device_ro(-newval, 1);
-			izo_channels[minor].uc_errorval = newval;
-			CDEBUG(D_PSDEV, "setting errorval to %d\n", newval);
-		}
-
-		break;
-	}
-#endif
-
-	case PSDEV_TRACE:
-	case PSDEV_DEBUG:
-	case PSDEV_BYTES_TO_CLOSE:
-	default:
-		CDEBUG(D_PSDEV,
-		       "ioctl: dosetopt: minor %d, bad optname 0x%x, \n",
-		       minor, opt->optname);
-
-		retval = -EINVAL;
-	}
-
-	EXIT;
-	return retval;
-}
-
-int dogetopt(int minor, struct psdev_opt *opt)
-{
-	int retval = 0;
-
-	ENTRY;
-
-	switch(opt->optname) {
-
-	case PSDEV_TIMEOUT:
-		opt->optval = izo_channels[minor].uc_timeout;
-		break;
-
-	case PSDEV_HARD:
-		opt->optval = izo_channels[minor].uc_hard;
-		break;
-
-	case PSDEV_NO_FILTER:
-		opt->optval = izo_channels[minor].uc_no_filter;
-		break;
-
-	case PSDEV_NO_JOURNAL:
-		opt->optval = izo_channels[minor].uc_no_journal;
-		break;
-
-	case PSDEV_NO_UPCALL:
-		opt->optval = izo_channels[minor].uc_no_upcall;
-		break;
-
-#ifdef PSDEV_DEBUG
-	case PSDEV_ERRORVAL: {
-		int errorval = izo_channels[minor].uc_errorval;
-		if (errorval < 0 && is_read_only(-errorval))
-			CERROR("device %s has been set read-only\n",
-			       kdevname(-errorval));
-		opt->optval = izo_channels[minor].uc_errorval;
-		break;
-	}
-#endif
-
-	case PSDEV_TRACE:
-	case PSDEV_DEBUG:
-	case PSDEV_BYTES_TO_CLOSE:
-	default:
-		CDEBUG(D_PSDEV,
-		       "ioctl: dogetopt: minor %d, bad optval 0x%x, \n",
-		       minor, opt->optname);
-
-		retval = -EINVAL;
-	}
-
-	EXIT;
-	return retval;
-}
-#endif
-
-
-/* allocate the tables for the presto devices. We need
- * sizeof(proto_channel_table)/sizeof(proto_channel_table[0])
- * entries for each dev
- */
-int /* __init */ init_intermezzo_sysctl(void)
-{
-	int i;
-	int total_dev = MAX_CHANNEL;
-	int entries_per_dev = sizeof(proto_psdev_table) /
-		sizeof(proto_psdev_table[0]);
-	int total_entries = entries_per_dev * total_dev;
-	ctl_table *dev_ctl_table;
-
-	PRESTO_ALLOC(dev_ctl_table, sizeof(ctl_table) * total_entries);
-
-	if (! dev_ctl_table) {
-		CERROR("WARNING: presto couldn't allocate dev_ctl_table\n");
-		EXIT;
-		return -ENOMEM;
-	}
-
-	/* now fill in the entries ... we put the individual presto<x>
-	 * entries at the end of the table, and the per-presto stuff
-	 * starting at the front.  We assume that the compiler makes
-	 * this code more efficient, but really, who cares ... it
-	 * happens once per reboot.
-	 */
-	for(i = 0; i < total_dev; i++) {
-		void *p;
-
-		/* entry for this /proc/sys/intermezzo/intermezzo"i" */
-		ctl_table *psdev = &presto_table[i + PRESTO_PRIMARY_CTLCNT];
-		/* entries for the individual "files" in this "directory" */
-		ctl_table *psdev_entries = &dev_ctl_table[i * entries_per_dev];
-		/* init the psdev and psdev_entries with the prototypes */
-		*psdev = proto_channel_entry;
-		memcpy(psdev_entries, proto_psdev_table,
-		       sizeof(proto_psdev_table));
-		/* now specialize them ... */
-		/* the psdev has to point to psdev_entries, and fix the number */
-		psdev->ctl_name = psdev->ctl_name + i + 1; /* sorry */
-
-		PRESTO_ALLOC(p, PROCNAME_SIZE);
-		psdev->procname = p;
-		if (!psdev->procname) {
-			PRESTO_FREE(dev_ctl_table,
-				    sizeof(ctl_table) * total_entries);
-			return -ENOMEM;
-		}
-		sprintf((char *) psdev->procname, "intermezzo%d", i);
-		/* hook presto into */
-		psdev->child = psdev_entries;
-
-		/* now for each psdev entry ... */
-		psdev_entries[0].data = &(izo_channels[i].uc_hard);
-		psdev_entries[1].data = &(izo_channels[i].uc_no_filter);
-		psdev_entries[2].data = &(izo_channels[i].uc_no_journal);
-		psdev_entries[3].data = &(izo_channels[i].uc_no_upcall);
-		psdev_entries[4].data = &(izo_channels[i].uc_timeout);
-#ifdef PRESTO_DEBUG
-		psdev_entries[5].data = &(izo_channels[i].uc_errorval);
-#endif
-	}
-
-
-#ifdef CONFIG_SYSCTL
-	if ( !intermezzo_table_header )
-		intermezzo_table_header =
-			register_sysctl_table(intermezzo_table, 0);
-#endif
-#ifdef CONFIG_PROC_FS
-	proc_fs_intermezzo = proc_mkdir("intermezzo", proc_root_fs);
-	proc_fs_intermezzo->owner = THIS_MODULE;
-	create_proc_info_entry("mounts", 0, proc_fs_intermezzo, 
-			       intermezzo_mount_get_info);
-#endif
-	return 0;
-}
-
-void cleanup_intermezzo_sysctl(void)
-{
-	int total_dev = MAX_CHANNEL;
-	int entries_per_dev = sizeof(proto_psdev_table) /
-		sizeof(proto_psdev_table[0]);
-	int total_entries = entries_per_dev * total_dev;
-	int i;
-
-#ifdef CONFIG_SYSCTL
-	if ( intermezzo_table_header )
-		unregister_sysctl_table(intermezzo_table_header);
-	intermezzo_table_header = NULL;
-#endif
-	for(i = 0; i < total_dev; i++) {
-		/* entry for this /proc/sys/intermezzo/intermezzo"i" */
-		ctl_table *psdev = &presto_table[i + PRESTO_PRIMARY_CTLCNT];
-		PRESTO_FREE(psdev->procname, PROCNAME_SIZE);
-	}
-	/* presto_table[PRESTO_PRIMARY_CTLCNT].child points to the
-	 * dev_ctl_table previously allocated in init_intermezzo_psdev()
-	 */
-	PRESTO_FREE(presto_table[PRESTO_PRIMARY_CTLCNT].child, sizeof(ctl_table) * total_entries);
-
-#ifdef CONFIG_PROC_FS
-	remove_proc_entry("mounts", proc_fs_intermezzo);
-	remove_proc_entry("intermezzo", proc_root_fs);
-#endif
-}
-
diff -Nru a/fs/intermezzo/upcall.c b/fs/intermezzo/upcall.c
--- a/fs/intermezzo/upcall.c	Sun May 16 01:18:37 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,559 +0,0 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
- * Copyright (C) 2001, 2002 Cluster File Systems, Inc. <braam@clusterfs.com>
- * Copyright (C) 2001 Tacit Networks, Inc. <phil@off.net>
- *
- *   This file is part of InterMezzo, http://www.inter-mezzo.org.
- *
- *   InterMezzo is free software; you can redistribute it and/or
- *   modify it under the terms of version 2 of the GNU General Public
- *   License as published by the Free Software Foundation.
- *
- *   InterMezzo is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with InterMezzo; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * Mostly platform independent upcall operations to a cache manager:
- *  -- upcalls
- *  -- upcall routines
- *
- */
-
-#include <asm/system.h>
-#include <asm/segment.h>
-#include <asm/signal.h>
-#include <linux/signal.h>
-
-#include <linux/types.h>
-#include <linux/kernel.h>
-#include <linux/mm.h>
-#include <linux/vmalloc.h>
-#include <linux/slab.h>
-#include <linux/sched.h>
-#include <linux/fs.h>
-#include <linux/stat.h>
-#include <linux/errno.h>
-#include <linux/string.h>
-#include <asm/uaccess.h>
-
-#include "intermezzo_lib.h"
-#include "intermezzo_fs.h"
-#include "intermezzo_psdev.h"
-
-#include "intermezzo_idl.h"
-
-/*
-  At present:
-  -- Asynchronous calls:
-   - kml:            give a "more" kml indication to userland
-   - kml_truncate:   initiate KML truncation
-   - release_permit: kernel is done with permit
-  -- Synchronous
-   - open:           fetch file
-   - permit:         get a permit
-
-  Errors returned by user level code are positive
-
- */
-
-static struct izo_upcall_hdr *upc_pack(__u32 opcode, int pathlen, char *path,
-                                       char *fsetname, int reclen, char *rec,
-                                       int *size)
-{
-        struct izo_upcall_hdr *hdr;
-        char *ptr;
-        ENTRY;
-
-        *size = sizeof(struct izo_upcall_hdr);
-        if ( fsetname ) {
-                *size += round_strlen(fsetname);
-        }
-        if ( path ) { 
-                *size += round_strlen(path);
-        }
-        if ( rec ) { 
-                *size += size_round(reclen);
-        }
-        PRESTO_ALLOC(hdr, *size);
-        if (!hdr) { 
-                CERROR("intermezzo upcall: out of memory (opc %d)\n", opcode);
-                EXIT;
-                return NULL;
-        }
-        memset(hdr, 0, *size);
-
-        ptr = (char *)hdr + sizeof(*hdr);
-
-        /* XXX do we need fsuid ? */
-        hdr->u_len = *size;
-        hdr->u_version = IZO_UPC_VERSION;
-        hdr->u_opc = opcode;
-        hdr->u_pid = current->pid;
-        hdr->u_uid = current->fsuid;
-
-        if (path) { 
-                /*XXX Robert: please review what len to pass in for 
-                  NUL terminated strings */
-                hdr->u_pathlen = strlen(path);
-                LOGL0(path, hdr->u_pathlen, ptr);
-        }
-        if (fsetname) { 
-                hdr->u_fsetlen = strlen(fsetname);
-                LOGL0(fsetname, strlen(fsetname), ptr);
-        }
-        if (rec) { 
-                hdr->u_reclen = reclen;
-                LOGL(rec, reclen, ptr);
-        }
-        
-        EXIT;
-        return hdr;
-}
-
-/* the upcalls */
-int izo_upc_kml(int minor, __u64 offset, __u32 first_recno, __u64 length, __u32 last_recno, char *fsetname)
-{
-        int size;
-        int error;
-        struct izo_upcall_hdr *hdr;
-
-        ENTRY;
-        if (!presto_lento_up(minor)) {
-                EXIT;
-                return 0;
-        }
-
-        hdr = upc_pack(IZO_UPC_KML, 0, NULL, fsetname, 0, NULL, &size);
-        if (!hdr || IS_ERR(hdr)) {
-                EXIT;
-                return -PTR_ERR(hdr);
-        }
-
-        hdr->u_offset = offset;
-        hdr->u_first_recno = first_recno;
-        hdr->u_length = length;
-        hdr->u_last_recno = last_recno;
-
-        CDEBUG(D_UPCALL, "KML: fileset %s, offset %Lu, length %Lu, "
-               "first %u, last %d; minor %d\n",
-               fsetname,
-               (unsigned long long) hdr->u_offset,
-               (unsigned long long) hdr->u_length,
-               hdr->u_first_recno,
-               hdr->u_last_recno, minor);
-
-        error = izo_upc_upcall(minor, &size, hdr, ASYNCHRONOUS);
-
-        EXIT;
-        return -error;
-}
-
-int izo_upc_kml_truncate(int minor, __u64 length, __u32 last_recno, char *fsetname)
-{
-        int size;
-        int error;
-        struct izo_upcall_hdr *hdr;
-
-        ENTRY;
-        if (!presto_lento_up(minor)) {
-                EXIT;
-                return 0;
-        }
-
-        hdr = upc_pack(IZO_UPC_KML_TRUNC, 0, NULL, fsetname, 0, NULL, &size);
-        if (!hdr || IS_ERR(hdr)) {
-                EXIT;
-                return -PTR_ERR(hdr);
-        }
-
-        hdr->u_length = length;
-        hdr->u_last_recno = last_recno;
-
-        CDEBUG(D_UPCALL, "KML TRUNCATE: fileset %s, length %Lu, "
-               "last recno %d, minor %d\n",
-               fsetname,
-               (unsigned long long) hdr->u_length,
-               hdr->u_last_recno, minor);
-
-        error = izo_upc_upcall(minor, &size, hdr, ASYNCHRONOUS);
-
-        EXIT;
-        return error;
-}
-
-int izo_upc_open(int minor, __u32 pathlen, char *path, char *fsetname, struct lento_vfs_context *info)
-{
-        int size;
-        int error;
-        struct izo_upcall_hdr *hdr;
-        ENTRY;
-
-        if (!presto_lento_up(minor)) {
-                EXIT;
-                return -EIO;
-        }
-
-        hdr = upc_pack(IZO_UPC_OPEN, pathlen, path, fsetname, 
-                       sizeof(*info), (char*)info, &size);
-        if (!hdr || IS_ERR(hdr)) {
-                EXIT;
-                return -PTR_ERR(hdr);
-        }
-
-        CDEBUG(D_UPCALL, "path %s\n", path);
-
-        error = izo_upc_upcall(minor, &size, hdr, SYNCHRONOUS);
-        if (error)
-                CERROR("InterMezzo: %s: error %d\n", __FUNCTION__, error);
-
-        EXIT;
-        return -error;
-}
-
-int izo_upc_get_fileid(int minor, __u32 reclen, char *rec, 
-                       __u32 pathlen, char *path, char *fsetname)
-{
-        int size;
-        int error;
-        struct izo_upcall_hdr *hdr;
-        ENTRY;
-
-        if (!presto_lento_up(minor)) {
-                EXIT;
-                return -EIO;
-        }
-
-        hdr = upc_pack(IZO_UPC_GET_FILEID, pathlen, path, fsetname, reclen, rec, &size);
-        if (!hdr || IS_ERR(hdr)) {
-                EXIT;
-                return -PTR_ERR(hdr);
-        }
-
-        CDEBUG(D_UPCALL, "path %s\n", path);
-
-        error = izo_upc_upcall(minor, &size, hdr, SYNCHRONOUS);
-        if (error)
-                CERROR("InterMezzo: %s: error %d\n", __FUNCTION__, error);
-
-        EXIT;
-        return -error;
-}
-
-int izo_upc_backfetch(int minor, char *path, char *fsetname, struct lento_vfs_context *info)
-{
-        int size;
-        int error;
-        struct izo_upcall_hdr *hdr;
-        ENTRY;
-
-        if (!presto_lento_up(minor)) {
-                EXIT;
-                return -EIO;
-        }
-
-        hdr = upc_pack(IZO_UPC_BACKFETCH, strlen(path), path, fsetname, 
-                       sizeof(*info), (char *)info, &size);
-        if (!hdr || IS_ERR(hdr)) {
-                EXIT;
-                return -PTR_ERR(hdr);
-        }
-
-        /* This is currently synchronous, kml_reint_record blocks */
-        error = izo_upc_upcall(minor, &size, hdr, SYNCHRONOUS);
-        if (error)
-                CERROR("InterMezzo: %s: error %d\n", __FUNCTION__, error);
-
-        EXIT;
-        return -error;
-}
-
-int izo_upc_permit(int minor, struct dentry *dentry, __u32 pathlen, char *path,
-                   char *fsetname)
-{
-        int size;
-        int error;
-        struct izo_upcall_hdr *hdr;
-
-        ENTRY;
-
-        hdr = upc_pack(IZO_UPC_PERMIT, pathlen, path, fsetname, 0, NULL, &size);
-        if (!hdr || IS_ERR(hdr)) {
-                EXIT;
-                return -PTR_ERR(hdr);
-        }
-
-        CDEBUG(D_UPCALL, "Permit minor %d path %s\n", minor, path);
-
-        error = izo_upc_upcall(minor, &size, hdr, SYNCHRONOUS);
-
-        if (error == -EROFS) {
-                int err;
-                CERROR("InterMezzo: ERROR - requested permit for read-only "
-                       "fileset.\n   Setting \"%s\" read-only!\n", path);
-                err = izo_mark_cache(dentry, 0xFFFFFFFF, CACHE_CLIENT_RO, NULL);
-                if (err)
-                        CERROR("InterMezzo ERROR: mark_cache %d\n", err);
-        } else if (error) {
-                CERROR("InterMezzo: %s: error %d\n", __FUNCTION__, error);
-        }
-
-        EXIT;
-        return error;
-}
-
-/* This is a ping-pong upcall handled on the server when a client (uuid)
- * requests the permit for itself. */
-int izo_upc_revoke_permit(int minor, char *fsetname, __u8 uuid[16])
-{
-        int size;
-        int error;
-        struct izo_upcall_hdr *hdr;
-
-        ENTRY;
-
-        hdr = upc_pack(IZO_UPC_REVOKE_PERMIT, 0, NULL, fsetname, 0, NULL, &size);
-        if (!hdr || IS_ERR(hdr)) {
-                EXIT;
-                return -PTR_ERR(hdr);
-        }
-
-        memcpy(hdr->u_uuid, uuid, sizeof(hdr->u_uuid));
-
-        error = izo_upc_upcall(minor, &size, hdr, SYNCHRONOUS);
-
-        if (error)
-                CERROR("InterMezzo: %s: error %d\n", __FUNCTION__, error);
-
-        EXIT;
-        return -error;
-}
-
-int izo_upc_go_fetch_kml(int minor, char *fsetname, __u8 uuid[16],
-                         __u64 kmlsize)
-{
-        int size;
-        int error;
-        struct izo_upcall_hdr *hdr;
-        ENTRY;
-
-        if (!presto_lento_up(minor)) {
-                EXIT;
-                return -EIO;
-        }
-
-        hdr = upc_pack(IZO_UPC_GO_FETCH_KML, 0, NULL, fsetname, 0, NULL, &size);
-        if (!hdr || IS_ERR(hdr)) {
-                EXIT;
-                return -PTR_ERR(hdr);
-        }
-
-        hdr->u_offset = kmlsize;
-        memcpy(hdr->u_uuid, uuid, sizeof(hdr->u_uuid));
-
-        error = izo_upc_upcall(minor, &size, hdr, ASYNCHRONOUS);
-        if (error)
-                CERROR("%s: error %d\n", __FUNCTION__, error);
-
-        EXIT;
-        return -error;
-}
-
-int izo_upc_connect(int minor, __u64 ip_address, __u64 port, __u8 uuid[16],
-                    int client_flag)
-{
-        int size;
-        int error;
-        struct izo_upcall_hdr *hdr;
-        ENTRY;
-
-        if (!presto_lento_up(minor)) {
-                EXIT;
-                return -EIO;
-        }
-
-        hdr = upc_pack(IZO_UPC_CONNECT, 0, NULL, NULL, 0, NULL, &size);
-        if (!hdr || IS_ERR(hdr)) {
-                EXIT;
-                return -PTR_ERR(hdr);
-        }
-
-        hdr->u_offset = ip_address;
-        hdr->u_length = port;
-        memcpy(hdr->u_uuid, uuid, sizeof(hdr->u_uuid));
-        hdr->u_first_recno = client_flag;
-
-        error = izo_upc_upcall(minor, &size, hdr, SYNCHRONOUS);
-        if (error) {
-                CERROR("%s: error %d\n", __FUNCTION__, error);
-        }
-
-        EXIT;
-        return -error;
-}
-
-int izo_upc_set_kmlsize(int minor, char *fsetname, __u8 uuid[16], __u64 kmlsize)
-{
-        int size;
-        int error;
-        struct izo_upcall_hdr *hdr;
-        ENTRY;
-
-        if (!presto_lento_up(minor)) {
-                EXIT;
-                return -EIO;
-        }
-
-        hdr = upc_pack(IZO_UPC_SET_KMLSIZE, 0, NULL, fsetname, 0, NULL, &size);
-        if (!hdr || IS_ERR(hdr)) {
-                EXIT;
-                return -PTR_ERR(hdr);
-        }
-
-        memcpy(hdr->u_uuid, uuid, sizeof(hdr->u_uuid));
-        hdr->u_length = kmlsize;
-
-        error = izo_upc_upcall(minor, &size, hdr, SYNCHRONOUS);
-        if (error)
-                CERROR("%s: error %d\n", __FUNCTION__, error);
-
-        EXIT;
-        return -error;
-}
-
-int izo_upc_repstatus(int minor,  char * fsetname, struct izo_rcvd_rec *lr_server)
-{
-        int size;
-        int error;
-        struct izo_upcall_hdr *hdr;
-        ENTRY;
-
-        if (!presto_lento_up(minor)) {
-                EXIT;
-                return -EIO;
-        }
-
-        hdr = upc_pack(IZO_UPC_REPSTATUS, 0, NULL, fsetname, 
-                       sizeof(*lr_server), (char*)lr_server, 
-                       &size);
-        if (!hdr || IS_ERR(hdr)) {
-                EXIT;
-                return -PTR_ERR(hdr);
-        }
-
-        error = izo_upc_upcall(minor, &size, hdr, SYNCHRONOUS);
-        if (error)
-                CERROR("%s: error %d\n", __FUNCTION__, error);
-
-        EXIT;
-        return -error;
-}
-
-
-#if 0
-int izo_upc_client_make_branch(int minor, char *fsetname, char *tagname,
-                               char *branchname)
-{
-        int size, error;
-        struct izo_upcall_hdr *hdr;
-        int pathlen;
-        char *path;
-        ENTRY;
-
-        hdr = upc_pack(IZO_UPC_CLIENT_MAKE_BRANCH, strlen(tagname), tagname,
-                       fsetname, strlen(branchname) + 1, branchname, &size);
-        if (!hdr || IS_ERR(hdr)) {
-                error = -PTR_ERR(hdr);
-                goto error;
-        }
-
-        error = izo_upc_upcall(minor, &size, hdr, SYNCHRONOUS);
-        if (error)
-                CERROR("InterMezzo: error %d\n", error);
-
- error:
-        PRESTO_FREE(path, pathlen);
-        EXIT;
-        return error;
-}
-#endif
-
-int izo_upc_server_make_branch(int minor, char *fsetname)
-{
-        int size, error;
-        struct izo_upcall_hdr *hdr;
-        ENTRY;
-
-        hdr = upc_pack(IZO_UPC_SERVER_MAKE_BRANCH, 0, NULL, fsetname, 0, NULL, &size);
-        if (!hdr || IS_ERR(hdr)) {
-                error = -PTR_ERR(hdr);
-                goto error;
-        }
-
-        error = izo_upc_upcall(minor, &size, hdr, SYNCHRONOUS);
-        if (error)
-                CERROR("InterMezzo: error %d\n", error);
-
- error:
-        EXIT;
-        return -error;
-}
-
-int izo_upc_branch_undo(int minor, char *fsetname, char *branchname)
-{
-        int size;
-        int error;
-        struct izo_upcall_hdr *hdr;
-        ENTRY;
-
-        if (!presto_lento_up(minor)) {
-                EXIT;
-                return -EIO;
-        }
-
-        hdr = upc_pack(IZO_UPC_BRANCH_UNDO, strlen(branchname), branchname,
-                       fsetname, 0, NULL, &size);
-        if (!hdr || IS_ERR(hdr)) {
-                EXIT;
-                return -PTR_ERR(hdr);
-        }
-
-        error = izo_upc_upcall(minor, &size, hdr, SYNCHRONOUS);
-        if (error)
-                CERROR("InterMezzo: %s: error %d\n", __FUNCTION__, error);
-
-        EXIT;
-        return -error;
-}
-
-int izo_upc_branch_redo(int minor, char *fsetname, char *branchname)
-{
-        int size;
-        int error;
-        struct izo_upcall_hdr *hdr;
-        ENTRY;
-
-        if (!presto_lento_up(minor)) {
-                EXIT;
-                return -EIO;
-        }
-
-        hdr = upc_pack(IZO_UPC_BRANCH_REDO, strlen(branchname) + 1, branchname,
-                       fsetname, 0, NULL, &size);
-        if (!hdr || IS_ERR(hdr)) {
-                EXIT;
-                return -PTR_ERR(hdr);
-        }
-
-        error = izo_upc_upcall(minor, &size, hdr, SYNCHRONOUS);
-        if (error)
-                CERROR("InterMezzo: %s: error %d\n", __FUNCTION__, error);
-
-        EXIT;
-        return -error;
-}
diff -Nru a/fs/intermezzo/vfs.c b/fs/intermezzo/vfs.c
--- a/fs/intermezzo/vfs.c	Sun May 16 01:18:34 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,2416 +0,0 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
- *  Copyright (C) 2001, 2002 Cluster File Systems, Inc.
- *  Copyright (C) 2000 Stelias Computing, Inc.
- *  Copyright (C) 2000 Red Hat, Inc.
- *
- *   This file is part of InterMezzo, http://www.inter-mezzo.org.
- *
- *   InterMezzo is free software; you can redistribute it and/or
- *   modify it under the terms of version 2 of the GNU General Public
- *   License as published by the Free Software Foundation.
- *
- *   InterMezzo is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with InterMezzo; if not, write to the Free Software
- *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * vfs.c
- *
- * This file implements kernel downcalls from lento.
- *
- * Author: Rob Simmonds <simmonds@stelias.com>
- *         Andreas Dilger <adilger@stelias.com>
- * Copyright (C) 2000 Stelias Computing Inc
- * Copyright (C) 2000 Red Hat Inc.
- *
- * Extended attribute support
- * Copyright (C) 2001 Shirish H. Phatak, Tacit Networks, Inc.
- *
- * This code is based on code from namei.c in the linux file system;
- * see copyright notice below.
- */
-
-/** namei.c copyright **/
-
-/*
- *  linux/fs/namei.c
- *
- *  Copyright (C) 1991, 1992  Linus Torvalds
- */
-/*
- * Some corrections by tytso.
- */
-
-/* [Feb 1997 T. Schoebel-Theuer] Complete rewrite of the pathname
- * lookup logic.
- */
-
-/** end of namei.c copyright **/
-
-#include <linux/mm.h>
-#include <linux/proc_fs.h>
-#include <linux/quotaops.h>
-
-#include <asm/uaccess.h>
-#include <asm/unaligned.h>
-#include <asm/semaphore.h>
-#include <asm/pgtable.h>
-
-#include <linux/file.h>
-#include <linux/fs.h>
-#include <linux/namei.h>
-#include <linux/genhd.h>
-
-#include "intermezzo_fs.h"
-#include "intermezzo_psdev.h"
-
-#ifdef CONFIG_FS_EXT_ATTR
-# include <linux/ext_attr.h>
-
-# if 0 /* was a broken check for Posix ACLs */
-#  include <linux/posix_acl.h>
-# endif
-#endif
-
-extern struct inode_operations presto_sym_iops;
-
-/* Write the last_rcvd values to the last_rcvd file.  We don't know what the
- * UUID or last_ctime values are, so we have to read from the file first
- * (sigh). 
- * exported for branch_reinter in kml_reint.c*/
-int presto_write_last_rcvd(struct rec_info *recinfo,
-                           struct presto_file_set *fset,
-                           struct lento_vfs_context *info)
-{
-        int rc;
-        struct izo_rcvd_rec rcvd_rec;
-
-        ENTRY;
-
-        memset(&rcvd_rec, 0, sizeof(rcvd_rec));
-        memcpy(rcvd_rec.lr_uuid, info->uuid, sizeof(rcvd_rec.lr_uuid));
-        rcvd_rec.lr_remote_recno = HTON__u64(info->recno);
-        rcvd_rec.lr_remote_offset = HTON__u64(info->kml_offset);
-        rcvd_rec.lr_local_recno = HTON__u64(recinfo->recno);
-        rcvd_rec.lr_local_offset = HTON__u64(recinfo->offset + recinfo->size);
-
-        rc = izo_rcvd_write(fset, &rcvd_rec);
-        if (rc < 0) {
-                /* izo_rcvd_write returns negative errors and non-negative
-                 * offsets */
-                CERROR("InterMezzo: izo_rcvd_write failed: %d\n", rc);
-                EXIT;
-                return rc;
-        }
-        EXIT;
-        return 0;
-}
-
-/*
- * It's inline, so penalty for filesystems that don't use sticky bit is
- * minimal.
- */
-static inline int check_sticky(struct inode *dir, struct inode *inode)
-{
-        if (!(dir->i_mode & S_ISVTX))
-                return 0;
-        if (inode->i_uid == current->fsuid)
-                return 0;
-        if (dir->i_uid == current->fsuid)
-                return 0;
-        return !capable(CAP_FOWNER);
-}
-
-/* from linux/fs/namei.c */
-static inline int may_delete(struct inode *dir,struct dentry *victim, int isdir)
-{
-        int error;
-        if (!victim->d_inode || victim->d_parent->d_inode != dir)
-                return -ENOENT;
-        error = permission(dir,MAY_WRITE | MAY_EXEC, NULL);
-        if (error)
-                return error;
-        if (IS_APPEND(dir))
-                return -EPERM;
-        if (check_sticky(dir, victim->d_inode)||IS_APPEND(victim->d_inode)||
-            IS_IMMUTABLE(victim->d_inode))
-                return -EPERM;
-        if (isdir) {
-                if (!S_ISDIR(victim->d_inode->i_mode))
-                        return -ENOTDIR;
-                if (IS_ROOT(victim))
-                        return -EBUSY;
-        } else if (S_ISDIR(victim->d_inode->i_mode))
-                return -EISDIR;
-        return 0;
-}
-
-/* from linux/fs/namei.c */
-static inline int may_create(struct inode *dir, struct dentry *child) {
-        if (child->d_inode)
-                return -EEXIST;
-        if (IS_DEADDIR(dir))
-                return -ENOENT;
-        return permission(dir,MAY_WRITE | MAY_EXEC, NULL);
-}
-
-#ifdef PRESTO_DEBUG
-/* The loop_discard_io() function is available via a kernel patch to the
- * loop block device.  It "works" by accepting writes, but throwing them
- * away, rather than trying to write them to disk.  The old method worked
- * by setting the underlying device read-only, but that has the problem
- * that dirty buffers are kept in memory, and ext3 didn't like that at all.
- */
-#ifdef CONFIG_LOOP_DISCARD
-#define BLKDEV_FAIL(dev,fail) loop_discard_io(dev,fail)
-#else
-#define BLKDEV_FAIL(dev,fail) set_device_ro(dev, 1)
-#endif
-
-/* If a breakpoint has been set via /proc/sys/intermezzo/intermezzoX/errorval,
- * that is the same as "value", the underlying device will "fail" now.
- */
-inline void presto_debug_fail_blkdev(struct presto_file_set *fset,
-                                     unsigned long value)
-{
-        int minor = presto_f2m(fset);
-        int errorval = izo_channels[minor].uc_errorval;
-	struct block_device *bdev = fset->fset_dentry->d_inode->i_sb->s_bdev;
-	char b[BDEVNAME_SIZE];
-
-        if (errorval && errorval == (long)value && !bdev_read_only(bdev)) {
-                CDEBUG(D_SUPER, "setting device %s read only\n",
-				bdevname(bdev, b));
-                BLKDEV_FAIL(bdev, 1);
-                izo_channels[minor].uc_errorval = -bdev->bd_dev;
-        }
-}
-#else
-#define presto_debug_fail_blkdev(dev,value) do {} while (0)
-#endif
-
-
-static inline int presto_do_kml(struct lento_vfs_context *info,
-                                struct dentry *dentry)
-{
-        if ( ! (info->flags & LENTO_FL_KML) )
-                return 0;
-        if ( presto_chk(dentry, PRESTO_DONT_JOURNAL) )
-                return 0;
-        return 1;
-}
-
-static inline int presto_do_rcvd(struct lento_vfs_context *info,
-                                 struct dentry *dentry)
-{
-        if ( ! (info->flags & LENTO_FL_EXPECT) ) 
-                return 0;
-        if ( presto_chk(dentry, PRESTO_DONT_JOURNAL) )
-                return 0;
-        return 1;
-}
-
-
-/* XXX fixme: this should not fail, all these dentries are in memory
-   when _we_ call this */
-int presto_settime(struct presto_file_set *fset, 
-                   struct dentry *newobj,
-                   struct dentry *parent,
-                   struct dentry *target,
-                   struct lento_vfs_context *ctx, 
-                   int valid)
-{
-        int error = 0;
-        struct dentry *dentry;
-        struct inode *inode;
-        struct inode_operations *iops;
-        struct iattr iattr;
-
-        ENTRY;
-        if (ctx->flags &  LENTO_FL_IGNORE_TIME ) { 
-                EXIT;
-                return 0;
-        }
-
-        iattr.ia_ctime = ctx->updated_time;
-        iattr.ia_mtime = ctx->updated_time;
-        iattr.ia_valid = valid;
-
-        while (1) {
-                if (parent && ctx->flags & LENTO_FL_TOUCH_PARENT) {
-                        dentry = parent;
-                        parent = NULL;
-                } else if (newobj && ctx->flags & LENTO_FL_TOUCH_NEWOBJ) {
-                        dentry = newobj;
-                        newobj = NULL;
-                } else if (target) {
-                        dentry = target;
-                        target = NULL;
-                } else
-                        break;
-
-                inode = dentry->d_inode;
-
-                error = -EROFS;
-                if (IS_RDONLY(inode)) {
-                        EXIT;
-                        return -EROFS;
-                }
-
-                if (IS_IMMUTABLE(inode) || IS_APPEND(inode)) {
-                        EXIT;
-                        return -EPERM;
-                }
-
-                error = -EPERM;
-                iops = filter_c2cdiops(fset->fset_cache->cache_filter); 
-                if (!iops) { 
-                        EXIT;
-                        return error;
-                }
-
-                if (iops->setattr != NULL)
-                        error = iops->setattr(dentry, &iattr);
-                else {
-                        error = 0;
-                        inode_setattr(dentry->d_inode, &iattr);
-                }
-        }
-        EXIT;
-        return error;
-}
-
-void izo_get_rollback_data(struct inode *inode, struct izo_rollback_data *rb)
-{
-        rb->rb_mode = (__u32)inode->i_mode;
-        rb->rb_rdev = (__u32)old_encode_dev(inode->i_rdev);
-        rb->rb_uid  = (__u64)inode->i_uid;
-        rb->rb_gid  = (__u64)inode->i_gid;
-}
-
-
-int presto_do_close(struct presto_file_set *fset, struct file *file)
-{
-        struct rec_info rec;
-        int rc = -ENOSPC; 
-        void *handle;
-        struct inode *inode = file->f_dentry->d_inode;
-        struct presto_file_data *fdata = 
-                (struct presto_file_data *)file->private_data;
-
-        ENTRY;
-        presto_getversion(&fdata->fd_info.remote_version, inode);
-
-        rc = presto_reserve_space(fset->fset_cache, PRESTO_REQHIGH); 
-        if (rc) { 
-                EXIT;
-                return rc;
-        }
-
-        handle = presto_trans_start(fset, file->f_dentry->d_inode, 
-                                            KML_OPCODE_RELEASE);
-        if ( IS_ERR(handle) ) {
-                CERROR("presto_release: no space for transaction\n");
-                return rc;
-        }
-
-        if (fdata->fd_info.flags & LENTO_FL_KML) 
-                rc = presto_journal_close(&rec, fset, fdata, file->f_dentry,
-                                          &fdata->fd_version, 
-                                          &fdata->fd_info.remote_version);
-        if (rc) { 
-                CERROR("presto_close: cannot journal close\n");
-                goto out;
-        }
-
-        if (fdata->fd_info.flags & LENTO_FL_EXPECT) 
-                rc = presto_write_last_rcvd(&rec, fset, &fdata->fd_info);
-
-        if (rc) { 
-                CERROR("presto_close: cannot journal last_rcvd\n");
-                goto out;
-        }
-        presto_trans_commit(fset, handle); 
-        
-        /* cancel the LML record */ 
-        handle = presto_trans_start(fset, inode, KML_OPCODE_WRITE);
-        if ( IS_ERR(handle) ) {
-                CERROR("presto_release: no space for clear\n");
-                return -ENOSPC;
-        }
-
-        rc = presto_clear_lml_close(fset, fdata->fd_lml_offset); 
-        if (rc < 0 ) { 
-                CERROR("presto_close: cannot journal close\n");
-                goto out;
-        }
-        presto_truncate_lml(fset);
-
- out:
-        presto_release_space(fset->fset_cache, PRESTO_REQHIGH); 
-        presto_trans_commit(fset, handle); 
-        EXIT;
-        return rc;
-}
-
-int presto_do_setattr(struct presto_file_set *fset, struct dentry *dentry,
-                      struct iattr *iattr, struct lento_vfs_context *info)
-{
-        struct rec_info rec;
-        struct inode *inode = dentry->d_inode;
-        struct inode_operations *iops;
-        int error;
-        struct presto_version old_ver, new_ver;
-        struct izo_rollback_data rb;
-        void *handle;
-        loff_t old_size=inode->i_size;
-
-        ENTRY;
-        error = -EROFS;
-        if (IS_RDONLY(inode)) {
-                EXIT;
-                return -EROFS;
-        }
-
-        if (IS_IMMUTABLE(inode) || IS_APPEND(inode)) {
-                EXIT;
-                return -EPERM;
-        }
-
-        presto_getversion(&old_ver, dentry->d_inode);
-        izo_get_rollback_data(dentry->d_inode, &rb);
-        error = -EPERM;
-        iops = filter_c2cdiops(fset->fset_cache->cache_filter); 
-
-        error = presto_reserve_space(fset->fset_cache, 2*PRESTO_REQHIGH); 
-        if (error) {
-                EXIT;
-                return error;
-        }
-
-        if  (iattr->ia_valid & ATTR_SIZE) {
-                if (izo_mark_dentry(dentry, ~PRESTO_DATA, 0, NULL) != 0)
-                        CERROR("izo_mark_dentry(inode %ld, ~PRESTO_DATA) "
-                               "failed\n", dentry->d_inode->i_ino);
-                handle = presto_trans_start(fset, dentry->d_inode,
-                                            KML_OPCODE_TRUNC);
-        } else {
-                handle = presto_trans_start(fset, dentry->d_inode,
-                                            KML_OPCODE_SETATTR);
-        }
-
-        if ( IS_ERR(handle) ) {
-                CERROR("presto_do_setattr: no space for transaction\n");
-                presto_release_space(fset->fset_cache, 2*PRESTO_REQHIGH); 
-                return -ENOSPC;
-        }
-
-        if (dentry->d_inode && iops && iops->setattr) {
-                error = iops->setattr(dentry, iattr);
-        } else {
-                error = inode_change_ok(dentry->d_inode, iattr);
-                if (!error) 
-                        inode_setattr(inode, iattr);
-        }
-
-        if (!error && (iattr->ia_valid & ATTR_SIZE))
-                vmtruncate(inode, iattr->ia_size);
-
-        if (error) {
-                EXIT;
-                goto exit;
-        }
-
-        presto_debug_fail_blkdev(fset, KML_OPCODE_SETATTR | 0x10);
-
-        if ( presto_do_kml(info, dentry) ) {
-                if ((iattr->ia_valid & ATTR_SIZE) && (old_size != inode->i_size)) {
-                        /* Journal a close whenever we see a potential truncate
-                        * At the receiving end, lento should explicitly remove
-                        * ATTR_SIZE from the list of valid attributes */
-                        presto_getversion(&new_ver, inode);
-                        error = presto_journal_close(&rec, fset, NULL, dentry,
-                                                     &old_ver, &new_ver);
-                }
-
-                if (!error)
-                        error = presto_journal_setattr(&rec, fset, dentry,
-                                                       &old_ver, &rb, iattr);
-        }
-
-        presto_debug_fail_blkdev(fset, KML_OPCODE_SETATTR | 0x20);
-        if ( presto_do_rcvd(info, dentry) )
-                error = presto_write_last_rcvd(&rec, fset, info);
-
-        presto_debug_fail_blkdev(fset, KML_OPCODE_SETATTR | 0x30);
-
-        EXIT;
-exit:
-        presto_release_space(fset->fset_cache, 2*PRESTO_REQHIGH); 
-        presto_trans_commit(fset, handle);
-        return error;
-}
-
-int lento_setattr(const char *name, struct iattr *iattr,
-                  struct lento_vfs_context *info)
-{
-        struct nameidata nd;
-        struct dentry *dentry;
-        struct presto_file_set *fset;
-        int error;
-#if 0 /* was a broken check for Posix ACLs */
-        int (*set_posix_acl)(struct inode *, int type, posix_acl_t *)=NULL;
-#endif
-
-        ENTRY;
-        CDEBUG(D_PIOCTL,"name %s, valid %#x, mode %#o, uid %d, gid %d, size %Ld\n",
-               name, iattr->ia_valid, iattr->ia_mode, iattr->ia_uid,
-               iattr->ia_gid, iattr->ia_size);
-        CDEBUG(D_PIOCTL, "atime %#lx, mtime %#lx, ctime %#lx, attr_flags %#x\n",
-               iattr->ia_atime.tv_sec, iattr->ia_mtime.tv_sec, iattr->ia_ctime.tv_sec,
-               iattr->ia_attr_flags);
-        CDEBUG(D_PIOCTL, "offset %d, recno %d, flags %#x\n",
-               info->slot_offset, info->recno, info->flags);
-
-        lock_kernel();
-        error = presto_walk(name, &nd);
-        if (error) {
-                EXIT;
-                goto exit;
-        }
-        dentry = nd.dentry;
-        
-        fset = presto_fset(dentry);
-        error = -EINVAL;
-        if ( !fset ) {
-                CERROR("No fileset!\n");
-                EXIT;
-                goto exit_lock;
-        }
-
-        /* NOTE: this prevents us from changing the filetype on setattr,
-         *       as we normally only want to change permission bits.
-         *       If this is not correct, then we need to fix the perl code
-         *       to always send the file type OR'ed with the permission.
-         */
-        if (iattr->ia_valid & ATTR_MODE) {
-                int set_mode = iattr->ia_mode;
-                iattr->ia_mode = (iattr->ia_mode & S_IALLUGO) |
-                                 (dentry->d_inode->i_mode & ~S_IALLUGO);
-                CDEBUG(D_PIOCTL, "chmod: orig %#o, set %#o, result %#o\n",
-                       dentry->d_inode->i_mode, set_mode, iattr->ia_mode);
-#if 0 /* was a broken check for Posix ACLs */
-                /* ACl code interacts badly with setattr 
-                 * since it tries to modify the ACL using 
-                 * set_ext_attr which recurses back into presto.  
-                 * This only happens if ATTR_MODE is set.
-                 * Here we are doing a "forced" mode set 
-                 * (initiated by lento), so we disable the 
-                 * set_posix_acl operation which 
-                 * prevents such recursion.  -SHP
-                 *
-                 * This will probably still be required when native
-                 * acl journalling is in place.
-                 */
-                set_posix_acl=dentry->d_inode->i_op->set_posix_acl;
-                dentry->d_inode->i_op->set_posix_acl=NULL;
-#endif
-        }
-
-        error = presto_do_setattr(fset, dentry, iattr, info);
-
-        if (info->flags & LENTO_FL_SET_DDFILEID) {
-                struct presto_dentry_data *dd = presto_d2d(dentry);
-                if (dd) {
-                        dd->remote_ino = info->remote_ino;
-                        dd->remote_generation = info->remote_generation;
-                }
-        }
-
-#if 0 /* was a broken check for Posix ACLs */
-        /* restore the inode_operations if we changed them*/
-        if (iattr->ia_valid & ATTR_MODE) 
-                dentry->d_inode->i_op->set_posix_acl=set_posix_acl;
-#endif
-
-
-        EXIT;
-exit_lock:
-        path_release(&nd);
-exit:
-        unlock_kernel();
-        return error;
-}
-
-int presto_do_create(struct presto_file_set *fset, struct dentry *dir,
-                     struct dentry *dentry, int mode,
-                     struct lento_vfs_context *info)
-{
-        struct rec_info rec;
-        int error;
-        struct presto_version tgt_dir_ver, new_file_ver;
-        struct inode_operations *iops;
-        void *handle;
-
-        ENTRY;
-        mode &= S_IALLUGO;
-        mode |= S_IFREG;
-
-        //        down(&dir->d_inode->i_zombie);
-        error = presto_reserve_space(fset->fset_cache, PRESTO_REQHIGH); 
-        if (error) {
-                EXIT;
-                //                up(&dir->d_inode->i_zombie);
-                return error;
-        }
-
-        error = may_create(dir->d_inode, dentry);
-        if (error) {
-                EXIT;
-                goto exit_pre_lock;
-        }
-
-        error = -EPERM;
-        iops = filter_c2cdiops(fset->fset_cache->cache_filter);
-        if (!iops->create) {
-                EXIT;
-                goto exit_pre_lock;
-        }
-
-        presto_getversion(&tgt_dir_ver, dir->d_inode);
-        handle = presto_trans_start(fset, dir->d_inode, KML_OPCODE_CREATE);
-        if ( IS_ERR(handle) ) {
-                EXIT;
-                presto_release_space(fset->fset_cache, PRESTO_REQHIGH); 
-                CERROR("presto_do_create: no space for transaction\n");
-                error=-ENOSPC;
-                goto exit_pre_lock;
-        }
-        DQUOT_INIT(dir->d_inode);
-        lock_kernel();
-        error = iops->create(dir->d_inode, dentry, mode, NULL);
-        if (error) {
-                EXIT;
-                goto exit_lock;
-        }
-
-        if (dentry->d_inode) {
-                struct presto_cache *cache = fset->fset_cache;
-                /* was this already done? */
-                presto_set_ops(dentry->d_inode, cache->cache_filter);
-
-                filter_setup_dentry_ops(cache->cache_filter, 
-                                        dentry->d_op, 
-                                        &presto_dentry_ops);
-                dentry->d_op = filter_c2udops(cache->cache_filter);
-
-                /* if Lento creates this file, we won't have data */
-                if ( ISLENTO(presto_c2m(cache)) ) {
-                        presto_set(dentry, PRESTO_ATTR);
-                } else {
-                        presto_set(dentry, PRESTO_ATTR | PRESTO_DATA);
-                }
-        }
-
-        info->flags |= LENTO_FL_TOUCH_PARENT;
-        error = presto_settime(fset, NULL, dir, dentry,
-                               info, ATTR_CTIME | ATTR_MTIME);
-        if (error) { 
-                EXIT;
-                goto exit_lock;
-        }
-
-        presto_debug_fail_blkdev(fset, KML_OPCODE_CREATE | 0x10);
-
-        if ( presto_do_kml(info, dentry) ) { 
-                presto_getversion(&new_file_ver, dentry->d_inode);
-                error = presto_journal_create(&rec, fset, dentry, &tgt_dir_ver,
-                                              &new_file_ver, 
-                                              dentry->d_inode->i_mode);
-        }
-
-        presto_debug_fail_blkdev(fset, KML_OPCODE_CREATE | 0x20);
-
-        if ( presto_do_rcvd(info, dentry) )
-                error = presto_write_last_rcvd(&rec, fset, info);
-
-        presto_debug_fail_blkdev(fset, KML_OPCODE_CREATE | 0x30);
-
-        /* add inode dentry */
-        if (fset->fset_cache->cache_filter->o_trops->tr_add_ilookup ) { 
-                struct dentry *d;
-                d = fset->fset_cache->cache_filter->o_trops->tr_add_ilookup
-                        (dir->d_inode->i_sb->s_root, dentry);
-        }
-
-        EXIT;
-
- exit_lock:
-        unlock_kernel();
-        presto_trans_commit(fset, handle);
- exit_pre_lock:
-        presto_release_space(fset->fset_cache, PRESTO_REQHIGH); 
-        //        up(&dir->d_inode->i_zombie);
-        return error;
-}
-
-int lento_create(const char *name, int mode, struct lento_vfs_context *info)
-{
-        int error;
-        struct nameidata nd;
-        char * pathname;
-        struct dentry *dentry;
-        struct presto_file_set *fset;
-
-        ENTRY;
-        pathname = getname(name);
-        error = PTR_ERR(pathname);
-        if (IS_ERR(pathname)) {
-                EXIT;
-                goto exit;
-        }
-
-        /* this looks up the parent */
-        error = path_lookup(pathname,  LOOKUP_PARENT, &nd);
-        if (error) {
-                EXIT;
-                goto exit;
-        }
-        dentry = lookup_create(&nd, 0);
-        error = PTR_ERR(dentry);
-        if (IS_ERR(dentry)) {
-                EXIT;
-                goto exit_lock;
-        }
-
-        fset = presto_fset(dentry);
-        error = -EINVAL;
-        if ( !fset ) {
-                CERROR("No fileset!\n");
-                EXIT;
-                goto exit_lock;
-        }
-        error = presto_do_create(fset, dentry->d_parent, dentry, (mode&S_IALLUGO)|S_IFREG,
-                                 info);
-
-        EXIT;
-
- exit_lock:
-        path_release (&nd);
-        dput(dentry); 
-        up(&dentry->d_parent->d_inode->i_sem);
-        putname(pathname);
-exit:
-        return error;
-}
-
-int presto_do_link(struct presto_file_set *fset, struct dentry *old_dentry,
-                   struct dentry *dir, struct dentry *new_dentry,
-                   struct lento_vfs_context *info)
-{
-        struct rec_info rec;
-        struct inode *inode;
-        int error;
-        struct inode_operations *iops;
-        struct presto_version tgt_dir_ver;
-        struct presto_version new_link_ver;
-        void *handle;
-
-        //        down(&dir->d_inode->i_zombie);
-        error = presto_reserve_space(fset->fset_cache, PRESTO_REQHIGH); 
-        if (error) {
-                EXIT;
-                //                up(&dir->d_inode->i_zombie);
-                return error;
-        }
-        error = -ENOENT;
-        inode = old_dentry->d_inode;
-        if (!inode)
-                goto exit_lock;
-
-        error = may_create(dir->d_inode, new_dentry);
-        if (error)
-                goto exit_lock;
-
-        error = -EXDEV;
-        if (dir->d_inode->i_sb != inode->i_sb)
-                goto exit_lock;
-
-        /*
-         * A link to an append-only or immutable file cannot be created.
-         */
-        error = -EPERM;
-        if (IS_APPEND(inode) || IS_IMMUTABLE(inode)) {
-                EXIT;
-                goto exit_lock;
-        }
-
-        iops = filter_c2cdiops(fset->fset_cache->cache_filter);
-        if (!iops->link) {
-                EXIT;
-                goto exit_lock;
-        }
-
-
-        presto_getversion(&tgt_dir_ver, dir->d_inode);
-        handle = presto_trans_start(fset, dir->d_inode, KML_OPCODE_LINK);
-        if ( IS_ERR(handle) ) {
-                presto_release_space(fset->fset_cache, PRESTO_REQHIGH); 
-                CERROR("presto_do_link: no space for transaction\n");
-                return -ENOSPC;
-        }
-
-        DQUOT_INIT(dir->d_inode);
-        lock_kernel();
-        error = iops->link(old_dentry, dir->d_inode, new_dentry);
-        unlock_kernel();
-        if (error) {
-                EXIT;
-                goto exit_lock;
-        }
-
-        /* link dd data to that of existing dentry */
-        old_dentry->d_op->d_release(new_dentry); 
-        if (!presto_d2d(old_dentry)) 
-                BUG();
-        presto_d2d(old_dentry)->dd_count++;
-
-        new_dentry->d_fsdata = presto_d2d(old_dentry);
-
-        info->flags |= LENTO_FL_TOUCH_PARENT;
-        error = presto_settime(fset, NULL, dir, new_dentry,
-                               info, ATTR_CTIME);
-        if (error) { 
-                EXIT;
-                goto exit_lock;
-        }
-
-        presto_debug_fail_blkdev(fset, KML_OPCODE_LINK | 0x10);
-        presto_getversion(&new_link_ver, new_dentry->d_inode);
-        if ( presto_do_kml(info, old_dentry) )
-                error = presto_journal_link(&rec, fset, old_dentry, new_dentry,
-                                            &tgt_dir_ver, &new_link_ver);
-
-        presto_debug_fail_blkdev(fset, KML_OPCODE_LINK | 0x20);
-        if ( presto_do_rcvd(info, old_dentry) )
-                error = presto_write_last_rcvd(&rec, fset, info);
-
-        presto_debug_fail_blkdev(fset, KML_OPCODE_LINK | 0x30);
-        EXIT;
-        presto_trans_commit(fset, handle);
-exit_lock:
-        presto_release_space(fset->fset_cache, PRESTO_REQHIGH); 
-        //        up(&dir->d_inode->i_zombie);
-        return error;
-}
-
-
-int lento_link(const char * oldname, const char * newname, 
-                         struct lento_vfs_context *info)
-{
-        int error;
-        char * to;
-        struct presto_file_set *fset;
-
-        to = getname(newname);
-        error = PTR_ERR(to);
-        if (!IS_ERR(to)) {
-                struct dentry *new_dentry;
-                struct nameidata nd, old_nd;
-
-                error = __user_walk(oldname, 0, &old_nd);
-                if (error)
-                        goto exit;
-                error = path_lookup(to, LOOKUP_PARENT, &nd);
-                if (error)
-                        goto out;
-                error = -EXDEV;
-                if (old_nd.mnt != nd.mnt)
-                        goto out;
-                new_dentry = lookup_create(&nd, 0);
-                error = PTR_ERR(new_dentry);
-
-                if (!IS_ERR(new_dentry)) {
-                        fset = presto_fset(new_dentry);
-                        error = -EINVAL;
-                        if ( !fset ) {
-                                CERROR("No fileset!\n");
-                                EXIT;
-                                goto out2;
-                        }
-                        error = presto_do_link(fset, old_nd.dentry, 
-                                               nd.dentry,
-                                               new_dentry, info);
-                        dput(new_dentry);
-                }
-        out2:
-                up(&nd.dentry->d_inode->i_sem);
-                path_release(&nd);
-        out:
-                path_release(&old_nd);
-        exit:
-                putname(to);
-        }
-        return error;
-}
-
-int presto_do_unlink(struct presto_file_set *fset, struct dentry *dir,
-                     struct dentry *dentry, struct lento_vfs_context *info)
-{
-        struct rec_info rec;
-        struct inode_operations *iops;
-        struct presto_version tgt_dir_ver, old_file_ver;
-        struct izo_rollback_data rb;
-        void *handle;
-        int do_kml = 0, do_rcvd = 0, linkno = 0, error, old_targetlen = 0;
-        char *old_target = NULL;
-
-        ENTRY;
-        //        down(&dir->d_inode->i_zombie);
-        error = may_delete(dir->d_inode, dentry, 0);
-        if (error) {
-                EXIT;
-                //                up(&dir->d_inode->i_zombie);
-                return error;
-        }
-
-        error = -EPERM;
-        iops = filter_c2cdiops(fset->fset_cache->cache_filter);
-        if (!iops->unlink) {
-                EXIT;
-                //                up(&dir->d_inode->i_zombie);
-                return error;
-        }
-
-        error = presto_reserve_space(fset->fset_cache, PRESTO_REQLOW); 
-        if (error) {
-                EXIT;
-                //                up(&dir->d_inode->i_zombie);
-                return error;
-        }
-
-
-        if (presto_d2d(dentry)) { 
-                struct presto_dentry_data *dd = presto_d2d(dentry); 
-                struct dentry *de = dd->dd_inodentry;
-                if (de && dentry->d_inode->i_nlink == 1) { 
-                        dd->dd_count--;
-                        dd->dd_inodentry = NULL; 
-                        de->d_fsdata = NULL; 
-                        atomic_dec(&de->d_inode->i_count); 
-                        de->d_inode = NULL;
-                        dput(de); 
-                }
-        }
-
-        presto_getversion(&tgt_dir_ver, dir->d_inode);
-        presto_getversion(&old_file_ver, dentry->d_inode);
-        izo_get_rollback_data(dentry->d_inode, &rb);
-        handle = presto_trans_start(fset, dir->d_inode, KML_OPCODE_UNLINK);
-        if ( IS_ERR(handle) ) {
-                presto_release_space(fset->fset_cache, PRESTO_REQLOW); 
-                CERROR("ERROR: presto_do_unlink: no space for transaction. Tell Peter.\n");
-                //                up(&dir->d_inode->i_zombie);
-                return -ENOSPC;
-        }
-        DQUOT_INIT(dir->d_inode);
-        if (d_mountpoint(dentry))
-                error = -EBUSY;
-        else {
-                lock_kernel();
-                linkno = dentry->d_inode->i_nlink;
-                if (linkno > 1) {
-                        dget(dentry);
-                }
-
-                if (S_ISLNK(dentry->d_inode->i_mode)) {
-                        mm_segment_t old_fs;
-                        struct inode_operations *riops;
-                        riops = filter_c2csiops(fset->fset_cache->cache_filter);
-
-                        PRESTO_ALLOC(old_target, PATH_MAX);
-                        if (old_target == NULL) {
-                                error = -ENOMEM;
-                                EXIT;
-                                goto exit;
-                        }
-
-                        old_fs = get_fs();
-                        set_fs(get_ds());
-
-                        if (riops->readlink == NULL)
-                                CERROR("InterMezzo %s: no readlink iops.\n",
-                                       __FUNCTION__);
-                        else
-                                old_targetlen =
-                                        riops->readlink(dentry, old_target,
-                                                        PATH_MAX);
-                        if (old_targetlen < 0) {
-                                CERROR("InterMezzo: readlink failed: %ld\n",
-                                       PTR_ERR(old_target));
-                                PRESTO_FREE(old_target, PATH_MAX);
-                                old_target = NULL;
-                                old_targetlen = 0;
-                        }
-                        set_fs(old_fs);
-                }
-
-                do_kml = presto_do_kml(info, dir);
-                do_rcvd = presto_do_rcvd(info, dir);
-                error = iops->unlink(dir->d_inode, dentry);
-                unlock_kernel();
-        }
-
-        if (linkno > 1) { 
-                /* FIXME: Combine this with the next call? */
-                error = presto_settime(fset, NULL, NULL, dentry,
-                                       info, ATTR_CTIME);
-                dput(dentry); 
-                if (error) { 
-                        EXIT;
-                        goto exit;
-                }
-        }
-
-        error = presto_settime(fset, NULL, NULL, dir,
-                               info, ATTR_CTIME | ATTR_MTIME);
-        if (error) { 
-                EXIT;
-                goto exit;
-        }
-
-        //        up(&dir->d_inode->i_zombie);
-
-        presto_debug_fail_blkdev(fset, KML_OPCODE_UNLINK | 0x10);
-        if ( do_kml )
-                error = presto_journal_unlink(&rec, fset, dir, &tgt_dir_ver,
-                                              &old_file_ver, &rb, dentry,
-                                              old_target, old_targetlen);
-        presto_debug_fail_blkdev(fset, KML_OPCODE_UNLINK | 0x20);
-        if ( do_rcvd ) { 
-                error = presto_write_last_rcvd(&rec, fset, info);
-        }
-        presto_debug_fail_blkdev(fset, KML_OPCODE_UNLINK | 0x30);
-        EXIT;
-exit:
-        presto_release_space(fset->fset_cache, PRESTO_REQLOW); 
-        presto_trans_commit(fset, handle);
-        if (old_target != NULL)
-                PRESTO_FREE(old_target, PATH_MAX);
-        return error;
-}
-
-
-int lento_unlink(const char *pathname, struct lento_vfs_context *info)
-{
-        int error = 0;
-        char * name;
-        struct dentry *dentry;
-        struct nameidata nd;
-        struct presto_file_set *fset;
-
-        ENTRY;
-
-        name = getname(pathname);
-        if(IS_ERR(name))
-                return PTR_ERR(name);
-
-        error = path_lookup(name, LOOKUP_PARENT, &nd);
-        if (error)
-                goto exit;
-        error = -EISDIR;
-        if (nd.last_type != LAST_NORM)
-                goto exit1;
-        down(&nd.dentry->d_inode->i_sem);
-        dentry = lookup_hash(&nd.last, nd.dentry);
-        error = PTR_ERR(dentry);
-        if (!IS_ERR(dentry)) {
-                fset = presto_fset(dentry);
-                error = -EINVAL;
-                if ( !fset ) {
-                        CERROR("No fileset!\n");
-                        EXIT;
-                        goto exit2;
-                }
-                /* Why not before? Because we want correct error value */
-                if (nd.last.name[nd.last.len])
-                        goto slashes;
-                error = presto_do_unlink(fset, nd.dentry, dentry, info);
-                if (!error)
-                        d_delete(dentry);
-        exit2:
-                EXIT;
-                dput(dentry);
-        }
-        up(&nd.dentry->d_inode->i_sem);
-exit1:
-        path_release(&nd);
-exit:
-        putname(name);
-
-        return error;
-
-slashes:
-        error = !dentry->d_inode ? -ENOENT :
-                S_ISDIR(dentry->d_inode->i_mode) ? -EISDIR : -ENOTDIR;
-        goto exit2;
-}
-
-int presto_do_symlink(struct presto_file_set *fset, struct dentry *dir,
-                      struct dentry *dentry, const char *oldname,
-                      struct lento_vfs_context *info)
-{
-        struct rec_info rec;
-        int error;
-        struct presto_version tgt_dir_ver, new_link_ver;
-        struct inode_operations *iops;
-        void *handle;
-
-        ENTRY;
-        //        down(&dir->d_inode->i_zombie);
-        /* record + max path len + space to free */ 
-        error = presto_reserve_space(fset->fset_cache, PRESTO_REQHIGH + 4096); 
-        if (error) {
-                EXIT;
-                //                up(&dir->d_inode->i_zombie);
-                return error;
-        }
-
-        error = may_create(dir->d_inode, dentry);
-        if (error) {
-                EXIT;
-                goto exit_lock;
-        }
-
-        error = -EPERM;
-        iops = filter_c2cdiops(fset->fset_cache->cache_filter);
-        if (!iops->symlink) {
-                EXIT;
-                goto exit_lock;
-        }
-
-        presto_getversion(&tgt_dir_ver, dir->d_inode);
-        handle = presto_trans_start(fset, dir->d_inode, KML_OPCODE_SYMLINK);
-        if ( IS_ERR(handle) ) {
-                presto_release_space(fset->fset_cache, PRESTO_REQHIGH + 4096); 
-                CERROR("ERROR: presto_do_symlink: no space for transaction. Tell Peter.\n"); 
-                EXIT;
-                //                up(&dir->d_inode->i_zombie);
-                return -ENOSPC;
-        }
-        DQUOT_INIT(dir->d_inode);
-        lock_kernel();
-        error = iops->symlink(dir->d_inode, dentry, oldname);
-        if (error) {
-                EXIT;
-                goto exit;
-        }
-
-        if (dentry->d_inode) {
-                struct presto_cache *cache = fset->fset_cache;
-                
-                presto_set_ops(dentry->d_inode, cache->cache_filter);
-
-                filter_setup_dentry_ops(cache->cache_filter, dentry->d_op, 
-                                        &presto_dentry_ops);
-                dentry->d_op = filter_c2udops(cache->cache_filter);
-                /* XXX ? Cache state ? if Lento creates a symlink */
-                if ( ISLENTO(presto_c2m(cache)) ) {
-                        presto_set(dentry, PRESTO_ATTR);
-                } else {
-                        presto_set(dentry, PRESTO_ATTR | PRESTO_DATA);
-                }
-        }
-
-        info->flags |= LENTO_FL_TOUCH_PARENT;
-        error = presto_settime(fset, NULL, dir, dentry,
-                               info, ATTR_CTIME | ATTR_MTIME);
-        if (error) { 
-                EXIT;
-                goto exit;
-        }
-
-        presto_debug_fail_blkdev(fset, KML_OPCODE_SYMLINK | 0x10);
-        presto_getversion(&new_link_ver, dentry->d_inode);
-        if ( presto_do_kml(info, dentry) )
-                error = presto_journal_symlink(&rec, fset, dentry, oldname,
-                                               &tgt_dir_ver, &new_link_ver);
-
-        presto_debug_fail_blkdev(fset, KML_OPCODE_SYMLINK | 0x20);
-        if ( presto_do_rcvd(info, dentry) )
-                error = presto_write_last_rcvd(&rec, fset, info);
-
-        presto_debug_fail_blkdev(fset, KML_OPCODE_SYMLINK | 0x30);
-        EXIT;
-exit:
-        unlock_kernel();
-        presto_trans_commit(fset, handle);
- exit_lock:
-        presto_release_space(fset->fset_cache, PRESTO_REQHIGH + 4096); 
-        //        up(&dir->d_inode->i_zombie);
-        return error;
-}
-
-int lento_symlink(const char *oldname, const char *newname,
-                  struct lento_vfs_context *info)
-{
-        int error;
-        char *from;
-        char *to;
-        struct dentry *dentry;
-        struct presto_file_set *fset;
-        struct nameidata nd;
-
-        ENTRY;
-        lock_kernel();
-        from = getname(oldname);
-        error = PTR_ERR(from);
-        if (IS_ERR(from)) {
-                EXIT;
-                goto exit;
-        }
-
-        to = getname(newname);
-        error = PTR_ERR(to);
-        if (IS_ERR(to)) {
-                EXIT;
-                goto exit_from;
-        }
-
-        error = path_lookup(to, LOOKUP_PARENT, &nd);
-        if (error) {
-                EXIT;
-                goto exit_to;
-        }
-
-        dentry = lookup_create(&nd, 0);
-        error = PTR_ERR(dentry);
-        if (IS_ERR(dentry)) {
-                path_release(&nd);
-                EXIT;
-                goto exit_to;
-        }
-
-        fset = presto_fset(dentry);
-        error = -EINVAL;
-        if ( !fset ) {
-                CERROR("No fileset!\n");
-                path_release(&nd);
-                EXIT;
-                goto exit_lock;
-        }
-        error = presto_do_symlink(fset, nd.dentry,
-                                  dentry, from, info);
-        path_release(&nd);
-        EXIT;
- exit_lock:
-        up(&nd.dentry->d_inode->i_sem);
-        dput(dentry);
- exit_to:
-        putname(to);
- exit_from:
-        putname(from);
- exit:
-        unlock_kernel();
-        return error;
-}
-
-int presto_do_mkdir(struct presto_file_set *fset, struct dentry *dir,
-                    struct dentry *dentry, int mode,
-                    struct lento_vfs_context *info)
-{
-        struct rec_info rec;
-        int error;
-        struct presto_version tgt_dir_ver, new_dir_ver;
-        void *handle;
-
-        ENTRY;
-        //        down(&dir->d_inode->i_zombie);
-
-        /* one journal record + directory block + room for removals*/ 
-        error = presto_reserve_space(fset->fset_cache, PRESTO_REQHIGH + 4096); 
-        if (error) { 
-                EXIT;
-                //                up(&dir->d_inode->i_zombie);
-                return error;
-        }
-
-        error = may_create(dir->d_inode, dentry);
-        if (error) {
-                EXIT;
-                goto exit_lock;
-        }
-
-        error = -EPERM;
-        if (!filter_c2cdiops(fset->fset_cache->cache_filter)->mkdir) {
-                EXIT;
-                goto exit_lock;
-        }
-
-        error = -ENOSPC;
-        presto_getversion(&tgt_dir_ver, dir->d_inode);
-        handle = presto_trans_start(fset, dir->d_inode, KML_OPCODE_MKDIR);
-        if ( IS_ERR(handle) ) {
-                presto_release_space(fset->fset_cache, PRESTO_REQHIGH + 4096); 
-                CERROR("presto_do_mkdir: no space for transaction\n");
-                goto exit_lock;
-        }
-
-        DQUOT_INIT(dir->d_inode);
-        mode &= (S_IRWXUGO|S_ISVTX);
-        lock_kernel();
-        error = filter_c2cdiops(fset->fset_cache->cache_filter)->mkdir(dir->d_inode, dentry, mode);
-        if (error) {
-                EXIT;
-                goto exit;
-        }
-
-        if ( dentry->d_inode && !error) {
-                struct presto_cache *cache = fset->fset_cache;
-
-                presto_set_ops(dentry->d_inode, cache->cache_filter);
-
-                filter_setup_dentry_ops(cache->cache_filter, 
-                                        dentry->d_op, 
-                                        &presto_dentry_ops);
-                dentry->d_op = filter_c2udops(cache->cache_filter);
-                /* if Lento does this, we won't have data */
-                if ( ISLENTO(presto_c2m(cache)) ) {
-                        presto_set(dentry, PRESTO_ATTR);
-                } else {
-                        presto_set(dentry, PRESTO_ATTR | PRESTO_DATA);
-                }
-        }
-
-        info->flags |= LENTO_FL_TOUCH_PARENT;
-        error = presto_settime(fset, NULL, dir, dentry,
-                             info, ATTR_CTIME | ATTR_MTIME);
-        if (error) { 
-                EXIT;
-                goto exit;
-        }
-
-        presto_debug_fail_blkdev(fset, KML_OPCODE_MKDIR | 0x10);
-        presto_getversion(&new_dir_ver, dentry->d_inode);
-        if ( presto_do_kml(info, dir) )
-                error = presto_journal_mkdir(&rec, fset, dentry, &tgt_dir_ver,
-                                             &new_dir_ver, 
-                                             dentry->d_inode->i_mode);
-
-        presto_debug_fail_blkdev(fset, KML_OPCODE_MKDIR | 0x20);
-        if ( presto_do_rcvd(info, dentry) )
-                error = presto_write_last_rcvd(&rec, fset, info);
-
-        presto_debug_fail_blkdev(fset, KML_OPCODE_MKDIR | 0x30);
-        EXIT;
-exit:
-        unlock_kernel();
-        presto_trans_commit(fset, handle);
- exit_lock:
-        presto_release_space(fset->fset_cache, PRESTO_REQHIGH + 4096); 
-        //        up(&dir->d_inode->i_zombie);
-        return error;
-}
-
-/*
- * Look out: this function may change a normal dentry
- * into a directory dentry (different size)..
- */
-int lento_mkdir(const char *name, int mode, struct lento_vfs_context *info)
-{
-        int error;
-        char *pathname;
-        struct dentry *dentry;
-        struct presto_file_set *fset;
-        struct nameidata nd;
-
-        ENTRY;
-        CDEBUG(D_PIOCTL, "name: %s, mode %o, offset %d, recno %d, flags %x\n",
-               name, mode, info->slot_offset, info->recno, info->flags);
-        pathname = getname(name);
-        error = PTR_ERR(pathname);
-        if (IS_ERR(pathname)) {
-                EXIT;
-                return error;
-        }
-
-        error = path_lookup(pathname, LOOKUP_PARENT, &nd);
-        if (error)
-                goto out_name;
-
-        dentry = lookup_create(&nd, 1);
-        error = PTR_ERR(dentry);
-        if (!IS_ERR(dentry)) {
-                fset = presto_fset(dentry);
-                error = -EINVAL;
-                if (!fset) {
-                        CERROR("No fileset!\n");
-                        EXIT;
-                        goto out_dput;
-                }
-
-                error = presto_do_mkdir(fset, nd.dentry, dentry, 
-                                        mode & S_IALLUGO, info);
-out_dput:
-                dput(dentry);
-        }
-        up(&nd.dentry->d_inode->i_sem);
-        path_release(&nd);
-out_name:
-        EXIT;
-        putname(pathname);
-        CDEBUG(D_PIOCTL, "error: %d\n", error);
-        return error;
-}
-
-static void d_unhash(struct dentry *dentry)
-{
-        dget(dentry);
-        switch (atomic_read(&dentry->d_count)) {
-        default:
-                shrink_dcache_parent(dentry);
-                if (atomic_read(&dentry->d_count) != 2)
-                        break;
-        case 2:
-                d_drop(dentry);
-        }
-}
-
-int presto_do_rmdir(struct presto_file_set *fset, struct dentry *dir,
-                    struct dentry *dentry, struct lento_vfs_context *info)
-{
-        struct rec_info rec;
-        int error;
-        struct presto_version tgt_dir_ver, old_dir_ver;
-        struct izo_rollback_data rb;
-        struct inode_operations *iops;
-        void *handle;
-        int do_kml, do_rcvd;
-        int size;
-
-        ENTRY;
-        error = may_delete(dir->d_inode, dentry, 1);
-        if (error)
-                return error;
-
-        error = -EPERM;
-        iops = filter_c2cdiops(fset->fset_cache->cache_filter);
-        if (!iops->rmdir) {
-                EXIT;
-                return error;
-        }
-
-        size = PRESTO_REQHIGH - dentry->d_inode->i_size; 
-        error = presto_reserve_space(fset->fset_cache, size); 
-        if (error) { 
-                EXIT;
-                return error;
-        }
-
-        presto_getversion(&tgt_dir_ver, dir->d_inode);
-        presto_getversion(&old_dir_ver, dentry->d_inode);
-        izo_get_rollback_data(dentry->d_inode, &rb);
-        handle = presto_trans_start(fset, dir->d_inode, KML_OPCODE_RMDIR);
-        if ( IS_ERR(handle) ) {
-                presto_release_space(fset->fset_cache, size); 
-                CERROR("ERROR: presto_do_rmdir: no space for transaction. Tell Peter.\n");
-                return -ENOSPC;
-        }
-
-        DQUOT_INIT(dir->d_inode);
-
-        do_kml = presto_do_kml(info, dir);
-        do_rcvd = presto_do_rcvd(info, dir);
-
-        //        double_down(&dir->d_inode->i_zombie, &dentry->d_inode->i_zombie);
-        d_unhash(dentry);
-        if (IS_DEADDIR(dir->d_inode))
-                error = -ENOENT;
-        else if (d_mountpoint(dentry)) {
-                CERROR("foo: d_mountpoint(dentry): ino %ld\n",
-                       dentry->d_inode->i_ino);
-                error = -EBUSY;
-        } else {
-                lock_kernel();
-                error = iops->rmdir(dir->d_inode, dentry);
-                unlock_kernel();
-                if (!error) {
-                        dentry->d_inode->i_flags |= S_DEAD;
-                        error = presto_settime(fset, NULL, NULL, dir, info,
-                                               ATTR_CTIME | ATTR_MTIME);
-                }
-        }
-        //        double_up(&dir->d_inode->i_zombie, &dentry->d_inode->i_zombie);
-        if (!error)
-                d_delete(dentry);
-        dput(dentry);
-
-        presto_debug_fail_blkdev(fset, KML_OPCODE_RMDIR | 0x10);
-        if ( !error && do_kml )
-                error = presto_journal_rmdir(&rec, fset, dir, &tgt_dir_ver,
-                                             &old_dir_ver, &rb,
-                                             dentry->d_name.len,
-                                             dentry->d_name.name);
-
-        presto_debug_fail_blkdev(fset, KML_OPCODE_RMDIR | 0x20);
-        if ( !error && do_rcvd ) 
-                error = presto_write_last_rcvd(&rec, fset, info);
-
-        presto_debug_fail_blkdev(fset, KML_OPCODE_RMDIR | 0x30);
-        EXIT;
-
-        presto_trans_commit(fset, handle);
-        presto_release_space(fset->fset_cache, size); 
-        return error;
-}
-
-int lento_rmdir(const char *pathname, struct lento_vfs_context *info)
-{
-        int error = 0;
-        char * name;
-        struct dentry *dentry;
-        struct presto_file_set *fset;
-        struct nameidata nd;
-
-        ENTRY;
-        name = getname(pathname);
-        if(IS_ERR(name)) {
-                EXIT;
-                return PTR_ERR(name);
-        }
-
-        error = path_lookup(name, LOOKUP_PARENT, &nd);
-        if (error) {
-                EXIT;
-                goto exit;
-        }
-        switch(nd.last_type) {
-        case LAST_DOTDOT:
-                error = -ENOTEMPTY;
-                EXIT;
-                goto exit1;
-        case LAST_ROOT:
-        case LAST_DOT:
-                error = -EBUSY;
-                EXIT;
-                goto exit1;
-        }
-        down(&nd.dentry->d_inode->i_sem);
-        dentry = lookup_hash(&nd.last, nd.dentry);
-        error = PTR_ERR(dentry);
-        if (!IS_ERR(dentry)) {
-                fset = presto_fset(dentry);
-                error = -EINVAL;
-                if ( !fset ) {
-                        CERROR("No fileset!\n");
-                        EXIT;
-                        goto exit_put;
-                }
-                error = presto_do_rmdir(fset, nd.dentry, dentry, info);
-        exit_put:
-                dput(dentry);
-        }
-        up(&nd.dentry->d_inode->i_sem);
-exit1:
-        path_release(&nd);
-exit:
-        putname(name);
-        EXIT;
-        return error;
-}
-
-int presto_do_mknod(struct presto_file_set *fset, struct dentry *dir,
-                    struct dentry *dentry, int mode, dev_t dev,
-                    struct lento_vfs_context *info)
-{
-        struct rec_info rec;
-        int error = -EPERM;
-        struct presto_version tgt_dir_ver, new_node_ver;
-        struct inode_operations *iops;
-        void *handle;
-
-        ENTRY;
-
-        //        down(&dir->d_inode->i_zombie);
-        /* one KML entry */ 
-        error = presto_reserve_space(fset->fset_cache, PRESTO_REQHIGH); 
-        if (error) {
-                EXIT;
-                //                up(&dir->d_inode->i_zombie);
-                return error;
-        }
-
-        if ((S_ISCHR(mode) || S_ISBLK(mode)) && !capable(CAP_MKNOD)) {
-                EXIT;
-                goto exit_lock;
-        }
-
-        error = may_create(dir->d_inode, dentry);
-        if (error) {
-                EXIT;
-                goto exit_lock;
-        }
-
-        error = -EPERM;
-        iops = filter_c2cdiops(fset->fset_cache->cache_filter);
-        if (!iops->mknod) {
-                EXIT;
-                goto exit_lock;
-        }
-
-        DQUOT_INIT(dir->d_inode);
-        lock_kernel();
-        
-        error = -ENOSPC;
-        presto_getversion(&tgt_dir_ver, dir->d_inode);
-        handle = presto_trans_start(fset, dir->d_inode, KML_OPCODE_MKNOD);
-        if ( IS_ERR(handle) ) {
-                presto_release_space(fset->fset_cache, PRESTO_REQHIGH); 
-                CERROR("presto_do_mknod: no space for transaction\n");
-                goto exit_lock2;
-        }
-
-        error = iops->mknod(dir->d_inode, dentry, mode, dev);
-        if (error) {
-                EXIT;
-                goto exit_commit;
-        }
-        if ( dentry->d_inode) {
-                struct presto_cache *cache = fset->fset_cache;
-
-                presto_set_ops(dentry->d_inode, cache->cache_filter);
-
-                filter_setup_dentry_ops(cache->cache_filter, dentry->d_op, 
-                                        &presto_dentry_ops);
-                dentry->d_op = filter_c2udops(cache->cache_filter);
-
-                /* if Lento does this, we won't have data */
-                if ( ISLENTO(presto_c2m(cache)) ) {
-                        presto_set(dentry, PRESTO_ATTR);
-                } else {
-                        presto_set(dentry, PRESTO_ATTR | PRESTO_DATA);
-                }
-        }
-
-        error = presto_settime(fset, NULL, NULL, dir,
-                               info, ATTR_MTIME);
-        if (error) { 
-                EXIT;
-        }
-        error = presto_settime(fset, NULL, NULL, dentry,
-                               info, ATTR_CTIME | ATTR_MTIME);
-        if (error) { 
-                EXIT;
-        }
-
-        presto_debug_fail_blkdev(fset, KML_OPCODE_MKNOD | 0x10);
-        presto_getversion(&new_node_ver, dentry->d_inode);
-        if ( presto_do_kml(info, dentry) )
-                error = presto_journal_mknod(&rec, fset, dentry, &tgt_dir_ver,
-                                             &new_node_ver, 
-                                             dentry->d_inode->i_mode,
-                                             MAJOR(dev), MINOR(dev) );
-
-        presto_debug_fail_blkdev(fset, KML_OPCODE_MKNOD | 0x20);
-        if ( presto_do_rcvd(info, dentry) )
-                error = presto_write_last_rcvd(&rec, fset, info);
-
-        presto_debug_fail_blkdev(fset, KML_OPCODE_MKNOD | 0x30);
-        EXIT;
- exit_commit:
-        presto_trans_commit(fset, handle);
- exit_lock2:
-        unlock_kernel();
- exit_lock:
-        presto_release_space(fset->fset_cache, PRESTO_REQHIGH); 
-        //        up(&dir->d_inode->i_zombie);
-        return error;
-}
-
-int lento_mknod(const char *filename, int mode, dev_t dev,
-                struct lento_vfs_context *info)
-{
-        int error = 0;
-        char * tmp;
-        struct dentry * dentry;
-        struct nameidata nd;
-        struct presto_file_set *fset;
-
-        ENTRY;
-
-        if (S_ISDIR(mode))
-                return -EPERM;
-        tmp = getname(filename);
-        if (IS_ERR(tmp))
-                return PTR_ERR(tmp);
-
-        error = path_lookup(tmp, LOOKUP_PARENT, &nd);
-        if (error)
-                goto out;
-        dentry = lookup_create(&nd, 0);
-        error = PTR_ERR(dentry);
-        if (!IS_ERR(dentry)) {
-                fset = presto_fset(dentry);
-                error = -EINVAL;
-                if ( !fset ) {
-                        CERROR("No fileset!\n");
-                        EXIT;
-                        goto exit_put;
-                }
-                switch (mode & S_IFMT) {
-                case 0: case S_IFREG:
-                        error = -EOPNOTSUPP;
-                        break;
-                case S_IFCHR: case S_IFBLK: case S_IFIFO: case S_IFSOCK:
-                        error = presto_do_mknod(fset, nd.dentry, dentry, 
-                                                mode, dev, info);
-                        break;
-                case S_IFDIR:
-                        error = -EPERM;
-                        break;
-                default:
-                        error = -EINVAL;
-                }
-        exit_put:
-                dput(dentry);
-        }
-        up(&nd.dentry->d_inode->i_sem);
-        path_release(&nd);
-out:
-        putname(tmp);
-
-        return error;
-}
-
-int do_rename(struct presto_file_set *fset,
-                     struct dentry *old_parent, struct dentry *old_dentry,
-                     struct dentry *new_parent, struct dentry *new_dentry,
-                     struct lento_vfs_context *info)
-{
-        struct rec_info rec;
-        int error;
-        struct inode_operations *iops;
-        struct presto_version src_dir_ver, tgt_dir_ver;
-        void *handle;
-        int new_inode_unlink = 0;
-        struct inode *old_dir = old_parent->d_inode;
-        struct inode *new_dir = new_parent->d_inode;
-
-        ENTRY;
-        presto_getversion(&src_dir_ver, old_dir);
-        presto_getversion(&tgt_dir_ver, new_dir);
-
-        error = -EPERM;
-        iops = filter_c2cdiops(fset->fset_cache->cache_filter);
-        if (!iops || !iops->rename) {
-                EXIT;
-                return error;
-        }
-
-        error = presto_reserve_space(fset->fset_cache, PRESTO_REQHIGH); 
-        if (error) {
-                EXIT;
-                return error;
-        }
-        handle = presto_trans_start(fset, old_dir, KML_OPCODE_RENAME);
-        if ( IS_ERR(handle) ) {
-                presto_release_space(fset->fset_cache, PRESTO_REQHIGH); 
-                CERROR("presto_do_rename: no space for transaction\n");
-                return -ENOSPC;
-        }
-        if (new_dentry->d_inode && new_dentry->d_inode->i_nlink > 1) { 
-                dget(new_dentry); 
-                new_inode_unlink = 1;
-        }
-
-        error = iops->rename(old_dir, old_dentry, new_dir, new_dentry);
-
-        if (error) {
-                EXIT;
-                goto exit;
-        }
-
-        if (new_inode_unlink) { 
-                error = presto_settime(fset, NULL, NULL, old_dentry,
-                                       info, ATTR_CTIME);
-                dput(old_dentry); 
-                if (error) { 
-                        EXIT;
-                        goto exit;
-                }
-        }
-        info->flags |= LENTO_FL_TOUCH_PARENT;
-        error = presto_settime(fset, NULL, new_parent, old_parent,
-                               info, ATTR_CTIME | ATTR_MTIME);
-        if (error) { 
-                EXIT;
-                goto exit;
-        }
-
-        /* XXX make a distinction between cross file set
-         * and intra file set renames here
-         */
-        presto_debug_fail_blkdev(fset, KML_OPCODE_RENAME | 0x10);
-        if ( presto_do_kml(info, old_dentry) )
-                error = presto_journal_rename(&rec, fset, old_dentry,
-                                              new_dentry,
-                                              &src_dir_ver, &tgt_dir_ver);
-
-        presto_debug_fail_blkdev(fset, KML_OPCODE_RENAME | 0x20);
-
-        if ( presto_do_rcvd(info, old_dentry) )
-                error = presto_write_last_rcvd(&rec, fset, info);
-
-        presto_debug_fail_blkdev(fset, KML_OPCODE_RENAME | 0x30);
-        EXIT;
-exit:
-        presto_trans_commit(fset, handle);
-        presto_release_space(fset->fset_cache, PRESTO_REQHIGH); 
-        return error;
-}
-
-static
-int presto_rename_dir(struct presto_file_set *fset, struct dentry *old_parent,
-                      struct dentry *old_dentry, struct dentry *new_parent,
-                      struct dentry *new_dentry, struct lento_vfs_context *info)
-{
-        int error;
-        struct inode *target;
-        struct inode *old_dir = old_parent->d_inode;
-        struct inode *new_dir = new_parent->d_inode;
-
-        if (old_dentry->d_inode == new_dentry->d_inode)
-                return 0;
-
-        error = may_delete(old_dir, old_dentry, 1);
-        if (error)
-                return error;
-
-        if (new_dir->i_sb != old_dir->i_sb)
-                return -EXDEV;
-
-        if (!new_dentry->d_inode)
-                error = may_create(new_dir, new_dentry);
-        else
-                error = may_delete(new_dir, new_dentry, 1);
-        if (error)
-                return error;
-
-        if (!old_dir->i_op || !old_dir->i_op->rename)
-                return -EPERM;
-
-        /*
-         * If we are going to change the parent - check write permissions,
-         * we'll need to flip '..'.
-         */
-        if (new_dir != old_dir) {
-                error = permission(old_dentry->d_inode, MAY_WRITE, NULL);
-        }
-        if (error)
-                return error;
-
-        DQUOT_INIT(old_dir);
-        DQUOT_INIT(new_dir);
-        down(&old_dir->i_sb->s_vfs_rename_sem);
-        error = -EINVAL;
-        if (is_subdir(new_dentry, old_dentry))
-                goto out_unlock;
-        target = new_dentry->d_inode;
-        if (target) { /* Hastur! Hastur! Hastur! */
-                //                triple_down(&old_dir->i_zombie,
-                //                            &new_dir->i_zombie,
-                //                            &target->i_zombie);
-                d_unhash(new_dentry);
-        } else
-                //                double_down(&old_dir->i_zombie,
-                //                            &new_dir->i_zombie);
-        if (IS_DEADDIR(old_dir)||IS_DEADDIR(new_dir))
-                error = -ENOENT;
-        else if (d_mountpoint(old_dentry)||d_mountpoint(new_dentry))
-                error = -EBUSY;
-        else 
-                error = do_rename(fset, old_parent, old_dentry,
-                                         new_parent, new_dentry, info);
-        if (target) {
-                if (!error)
-                        target->i_flags |= S_DEAD;
-                //                triple_up(&old_dir->i_zombie,
-                //                          &new_dir->i_zombie,
-                //                          &target->i_zombie);
-                if (d_unhashed(new_dentry))
-                        d_rehash(new_dentry);
-                dput(new_dentry);
-        } else
-                //                double_up(&old_dir->i_zombie,
-                //                          &new_dir->i_zombie);
-                
-        if (!error)
-                d_move(old_dentry,new_dentry);
-out_unlock:
-        up(&old_dir->i_sb->s_vfs_rename_sem);
-        return error;
-}
-
-static
-int presto_rename_other(struct presto_file_set *fset, struct dentry *old_parent,
-                        struct dentry *old_dentry, struct dentry *new_parent,
-                        struct dentry *new_dentry, struct lento_vfs_context *info)
-{
-        struct inode *old_dir = old_parent->d_inode;
-        struct inode *new_dir = new_parent->d_inode;
-        int error;
-
-        if (old_dentry->d_inode == new_dentry->d_inode)
-                return 0;
-
-        error = may_delete(old_dir, old_dentry, 0);
-        if (error)
-                return error;
-
-        if (new_dir->i_sb != old_dir->i_sb)
-                return -EXDEV;
-
-        if (!new_dentry->d_inode)
-                error = may_create(new_dir, new_dentry);
-        else
-                error = may_delete(new_dir, new_dentry, 0);
-        if (error)
-                return error;
-
-        if (!old_dir->i_op || !old_dir->i_op->rename)
-                return -EPERM;
-
-        DQUOT_INIT(old_dir);
-        DQUOT_INIT(new_dir);
-        //        double_down(&old_dir->i_zombie, &new_dir->i_zombie);
-        if (d_mountpoint(old_dentry)||d_mountpoint(new_dentry))
-                error = -EBUSY;
-        else
-                error = do_rename(fset, old_parent, old_dentry,
-                                  new_parent, new_dentry, info);
-        //        double_up(&old_dir->i_zombie, &new_dir->i_zombie);
-        if (error)
-                return error;
-        /* The following d_move() should become unconditional */
-        if (!(old_dir->i_sb->s_type->fs_flags & FS_ODD_RENAME)) {
-                d_move(old_dentry, new_dentry);
-        }
-        return 0;
-}
-
-int presto_do_rename(struct presto_file_set *fset, 
-              struct dentry *old_parent, struct dentry *old_dentry,
-              struct dentry *new_parent, struct dentry *new_dentry,
-              struct lento_vfs_context *info)
-{
-        if (S_ISDIR(old_dentry->d_inode->i_mode))
-                return presto_rename_dir(fset, old_parent,old_dentry,new_parent,
-                                      new_dentry, info);
-        else
-                return presto_rename_other(fset, old_parent, old_dentry,
-                                           new_parent,new_dentry, info);
-}
-
-
-int lento_do_rename(const char *oldname, const char *newname,
-                 struct lento_vfs_context *info)
-{
-        int error = 0;
-        struct dentry * old_dir, * new_dir;
-        struct dentry * old_dentry, *new_dentry;
-        struct nameidata oldnd, newnd;
-        struct presto_file_set *fset;
-
-        ENTRY;
-
-        error = path_lookup(oldname, LOOKUP_PARENT, &oldnd);
-        if (error)
-                goto exit;
-
-        error = path_lookup(newname, LOOKUP_PARENT, &newnd);
-        if (error)
-                goto exit1;
-
-        error = -EXDEV;
-        if (oldnd.mnt != newnd.mnt)
-                goto exit2;
-
-        old_dir = oldnd.dentry;
-        error = -EBUSY;
-        if (oldnd.last_type != LAST_NORM)
-                goto exit2;
-
-        new_dir = newnd.dentry;
-        if (newnd.last_type != LAST_NORM)
-                goto exit2;
-
-        lock_rename(new_dir, old_dir);
-
-        old_dentry = lookup_hash(&oldnd.last, old_dir);
-        error = PTR_ERR(old_dentry);
-        if (IS_ERR(old_dentry))
-                goto exit3;
-        /* source must exist */
-        error = -ENOENT;
-        if (!old_dentry->d_inode)
-                goto exit4;
-        fset = presto_fset(old_dentry);
-        error = -EINVAL;
-        if ( !fset ) {
-                CERROR("No fileset!\n");
-                EXIT;
-                goto exit4;
-        }
-        /* unless the source is a directory trailing slashes give -ENOTDIR */
-        if (!S_ISDIR(old_dentry->d_inode->i_mode)) {
-                error = -ENOTDIR;
-                if (oldnd.last.name[oldnd.last.len])
-                        goto exit4;
-                if (newnd.last.name[newnd.last.len])
-                        goto exit4;
-        }
-        new_dentry = lookup_hash(&newnd.last, new_dir);
-        error = PTR_ERR(new_dentry);
-        if (IS_ERR(new_dentry))
-                goto exit4;
-
-        lock_kernel();
-        error = presto_do_rename(fset, old_dir, old_dentry,
-                                   new_dir, new_dentry, info);
-        unlock_kernel();
-
-        dput(new_dentry);
-exit4:
-        dput(old_dentry);
-exit3:
-        unlock_rename(new_dir, old_dir);
-exit2:
-        path_release(&newnd);
-exit1:
-        path_release(&oldnd);
-exit:
-        return error;
-}
-
-int  lento_rename(const char * oldname, const char * newname,
-                  struct lento_vfs_context *info)
-{
-        int error;
-        char * from;
-        char * to;
-
-        from = getname(oldname);
-        if(IS_ERR(from))
-                return PTR_ERR(from);
-        to = getname(newname);
-        error = PTR_ERR(to);
-        if (!IS_ERR(to)) {
-                error = lento_do_rename(from,to, info);
-                putname(to);
-        } 
-        putname(from);
-        return error;
-}
-
-struct dentry *presto_iopen(struct dentry *dentry,
-                            ino_t ino, unsigned int generation)
-{
-        struct presto_file_set *fset;
-        char name[48];
-        int error;
-
-        ENTRY;
-        /* see if we already have the dentry we want */
-        if (dentry->d_inode && dentry->d_inode->i_ino == ino &&
-            dentry->d_inode->i_generation == generation) {
-                EXIT;
-                return dentry;
-        }
-
-        /* Make sure we have a cache beneath us.  We should always find at
-         * least one dentry inside the cache (if it exists), otherwise not
-         * even the cache root exists, or we passed in a bad name.
-         */
-        fset = presto_fset(dentry);
-        error = -EINVAL;
-        if (!fset) {
-                CERROR("No fileset for %*s!\n",
-                       dentry->d_name.len, dentry->d_name.name);
-                EXIT;
-                dput(dentry);
-                return ERR_PTR(error);
-        }
-        dput(dentry);
-
-        sprintf(name, "%s%#lx%c%#x",
-                PRESTO_ILOOKUP_MAGIC, ino, PRESTO_ILOOKUP_SEP, generation);
-        CDEBUG(D_PIOCTL, "opening %ld by number (as %s)\n", ino, name);
-        return lookup_one_len(name, fset->fset_dentry, strlen(name));
-}
-
-static struct file *presto_filp_dopen(struct dentry *dentry, int flags)
-{
-        struct file *f;
-        struct inode *inode;
-        int flag, error;
-
-        ENTRY;
-        error = -ENFILE;
-        f = get_empty_filp();
-        if (!f) {
-                CDEBUG(D_PIOCTL, "error getting file pointer\n");
-                EXIT;
-                goto out;
-        }
-        f->f_flags = flag = flags;
-        f->f_mode = (flag+1) & O_ACCMODE;
-        inode = dentry->d_inode;
-        if (f->f_mode & FMODE_WRITE) {
-                error = get_write_access(inode);
-                if (error) {
-                        CDEBUG(D_PIOCTL, "error getting write access\n");
-                        EXIT;                        goto cleanup_file;
-                }
-        }
-
-	/* XXX: where the fuck is ->f_vfsmnt? */
-        f->f_dentry = dentry;
-        f->f_mapping = dentry->d_inode->i_mapping;
-        f->f_pos = 0;
-        //f->f_reada = 0;
-        f->f_op = NULL;
-        if (inode->i_op)
-                /* XXX should we set to presto ops, or leave at cache ops? */
-                f->f_op = inode->i_fop;
-        if (f->f_op && f->f_op->open) {
-                error = f->f_op->open(inode, f);
-                if (error) {
-                        CDEBUG(D_PIOCTL, "error calling cache 'open'\n");
-                        EXIT;
-                        goto cleanup_all;
-                }
-        }
-        f->f_flags &= ~(O_CREAT | O_EXCL | O_NOCTTY | O_TRUNC);
-
-        return f;
-
-cleanup_all:
-        if (f->f_mode & FMODE_WRITE)
-                put_write_access(inode);
-cleanup_file:
-        put_filp(f);
-out:
-        return ERR_PTR(error);
-}
-
-
-/* Open an inode by number.  We pass in the cache root name (or a subdirectory
- * from the cache that is guaranteed to exist) to be able to access the cache.
- */
-int lento_iopen(const char *name, ino_t ino, unsigned int generation,
-                int flags)
-{
-        char * tmp;
-        struct dentry *dentry;
-        struct nameidata nd;
-        int fd;
-        int error;
-
-        ENTRY;
-        CDEBUG(D_PIOCTL,
-               "open %s:inode %#lx (%ld), generation %x (%d), flags %d \n",
-               name, ino, ino, generation, generation, flags);
-        /* We don't allow creation of files by number only, as it would
-         * lead to a dangling files not in any directory.  We could also
-         * just turn off the flag and ignore it.
-         */
-        if (flags & O_CREAT) {
-                CERROR("%s: create file by inode number (%ld) not allowed\n",
-                       __FUNCTION__, ino);
-                EXIT;
-                return -EACCES;
-        }
-
-        tmp = getname(name);
-        if (IS_ERR(tmp)) {
-                EXIT;
-                return PTR_ERR(tmp);
-        }
-
-        lock_kernel();
-again:  /* look the named file or a parent directory so we can get the cache */
-        error = presto_walk(tmp, &nd);
-        if ( error && error != -ENOENT ) {
-                EXIT;
-                unlock_kernel();
-		putname(tmp);
-                return error;
-        } 
-        if (error == -ENOENT)
-                dentry = NULL;
-        else 
-                dentry = nd.dentry;
-
-        /* we didn't find the named file, so see if a parent exists */
-        if (!dentry) {
-                char *slash;
-
-                slash = strrchr(tmp, '/');
-                if (slash && slash != tmp) {
-                        *slash = '\0';
-                        path_release(&nd);
-                        goto again;
-                }
-                /* we should never get here... */
-                CDEBUG(D_PIOCTL, "no more path components to try!\n");
-                fd = -ENOENT;
-                goto exit;
-        }
-        CDEBUG(D_PIOCTL, "returned dentry %p\n", dentry);
-
-        dentry = presto_iopen(dentry, ino, generation);
-        fd = PTR_ERR(dentry);
-        if (IS_ERR(dentry)) {
-                EXIT;
-                goto exit;
-        }
-
-        /* XXX start of code that might be replaced by something like:
-         * if (flags & (O_WRONLY | O_RDWR)) {
-         *      error = get_write_access(dentry->d_inode);
-         *      if (error) {
-         *              EXIT;
-         *              goto cleanup_dput;
-         *      }
-         * }
-         * fd = open_dentry(dentry, flags);
-         *
-         * including the presto_filp_dopen() function (check dget counts!)
-         */
-        fd = get_unused_fd();
-        if (fd < 0) {
-                EXIT;
-                goto exit;
-        }
-
-        {
-                int error;
-                struct file * f = presto_filp_dopen(dentry, flags);
-                error = PTR_ERR(f);
-                if (IS_ERR(f)) {
-                        put_unused_fd(fd);
-                        fd = error;
-                } else {
-	                fd_install(fd, f);
-		}
-        }
-        /* end of code that might be replaced by open_dentry */
-
-        EXIT;
-exit:
-        unlock_kernel();
-        path_release(&nd);
-        putname(tmp);
-        return fd;
-}
-
-#ifdef CONFIG_FS_EXT_ATTR
-
-#if 0 /* was a broken check for Posix ACLs */
-/* Posix ACL code changes i_mode without using a notify_change (or
- * a mark_inode_dirty!). We need to duplicate this at the reintegrator
- * which is done by this function. This function also takes care of 
- * resetting the cached posix acls in this inode. If we don't reset these
- * VFS continues using the old acl information, which by now may be out of
- * date.
- */
-int presto_setmode(struct presto_file_set *fset, struct dentry *dentry,
-                   mode_t mode)
-{
-        struct inode *inode = dentry->d_inode;
-
-        ENTRY;
-        /* The extended attributes for this inode were modified. 
-         * At this point we can not be sure if any of the ACL 
-         * information for this inode was updated. So we will 
-         * force VFS to reread the acls. Note that we do this 
-         * only when called from the SETEXTATTR ioctl, which is why we
-         * do this while setting the mode of the file. Also note
-         * that mark_inode_dirty is not be needed for i_*acl only
-         * to force i_mode info to disk, and should be removed once
-         * we use notify_change to update the mode.
-         * XXX: is mode setting really needed? Just setting acl's should
-         * be enough! VFS should change the i_mode as needed? SHP
-         */
-        if (inode->i_acl && 
-            inode->i_acl != POSIX_ACL_NOT_CACHED) 
-            posix_acl_release(inode->i_acl);
-        if (inode->i_default_acl && 
-            inode->i_default_acl != POSIX_ACL_NOT_CACHED) 
-            posix_acl_release(inode->i_default_acl);
-        inode->i_acl = POSIX_ACL_NOT_CACHED;
-        inode->i_default_acl = POSIX_ACL_NOT_CACHED;
-        inode->i_mode = mode;
-        /* inode should already be dirty...but just in case */
-        mark_inode_dirty(inode);
-        return 0;
-
-#if 0
-        /* XXX: The following code is the preferred way to set mode, 
-         * however, I need to carefully go through possible recursion
-         * paths back into presto. See comments in presto_do_setattr.
-         */
-        {    
-        int error=0; 
-        struct super_operations *sops;
-        struct iattr iattr;
-
-        iattr.ia_mode = mode;
-        iattr.ia_valid = ATTR_MODE|ATTR_FORCE;
-
-        error = -EPERM;
-        sops = filter_c2csops(fset->fset_cache->cache_filter); 
-        if (!sops &&
-            !sops->notify_change) {
-                EXIT;
-                return error;
-        }
-
-        error = sops->notify_change(dentry, &iattr);
-
-        EXIT;
-        return error;
-        }
-#endif
-}
-#endif
-
-/* setextattr Interface to cache filesystem */
-int presto_do_set_ext_attr(struct presto_file_set *fset, 
-                           struct dentry *dentry, 
-                           const char *name, void *buffer,
-                           size_t buffer_len, int flags, mode_t *mode,
-                           struct lento_vfs_context *info) 
-{
-        struct rec_info rec;
-        struct inode *inode = dentry->d_inode;
-        struct inode_operations *iops;
-        int error;
-        struct presto_version ver;
-        void *handle;
-        char temp[PRESTO_EXT_ATTR_NAME_MAX+1];
-
-        ENTRY;
-        error = -EROFS;
-        if (IS_RDONLY(inode)) {
-                EXIT;
-                return -EROFS;
-        }
-
-        if (IS_IMMUTABLE(inode) || IS_APPEND(inode)) {
-                EXIT;
-                return -EPERM;
-        }
-
-        presto_getversion(&ver, inode);
-        error = -EPERM;
-        /* We need to invoke different filters based on whether
-         * this dentry is a regular file, directory or symlink.
-         */
-        switch (inode->i_mode & S_IFMT) {
-                case S_IFLNK: /* symlink */
-                    iops = filter_c2csiops(fset->fset_cache->cache_filter); 
-                    break;
-                case S_IFDIR: /* directory */
-                    iops = filter_c2cdiops(fset->fset_cache->cache_filter); 
-                    break;
-                case S_IFREG:
-                default: /* everything else including regular files */
-                    iops = filter_c2cfiops(fset->fset_cache->cache_filter); 
-        }
-
-        if (!iops && !iops->set_ext_attr) {
-                EXIT;
-                return error;
-        }
-
-        error = presto_reserve_space(fset->fset_cache, PRESTO_REQHIGH); 
-        if (error) {
-                EXIT;
-                return error;
-        }
-
-        
-        handle = presto_trans_start(fset,dentry->d_inode,KML_OPCODE_SETEXTATTR);
-        if ( IS_ERR(handle) ) {
-                CERROR("presto_do_set_ext_attr: no space for transaction\n");
-                presto_release_space(fset->fset_cache, PRESTO_REQHIGH); 
-                return -ENOSPC;
-        }
-
-        /* We first "truncate" name to the maximum allowable in presto */
-        /* This simulates the strncpy_from_use code in fs/ext_attr.c */
-        strlcpy(temp,name,sizeof(temp));
-
-        /* Pass down to cache*/
-        error = iops->set_ext_attr(inode,temp,buffer,buffer_len,flags);
-        if (error) {
-                EXIT;
-                goto exit;
-        }
-
-#if 0 /* was a broken check for Posix ACLs */
-        /* Reset mode if specified*/
-        /* XXX: when we do native acl support, move this code out! */
-        if (mode != NULL) {
-                error = presto_setmode(fset, dentry, *mode);
-                if (error) { 
-                    EXIT;
-                    goto exit;
-                }
-        }
-#endif
-
-        /* Reset ctime. Only inode change time (ctime) is affected */
-        error = presto_settime(fset, NULL, NULL, dentry, info, ATTR_CTIME);
-        if (error) { 
-                EXIT;
-                goto exit;
-        }
-
-        if (flags & EXT_ATTR_FLAG_USER) {
-                CERROR(" USER flag passed to presto_do_set_ext_attr!\n");
-                BUG();
-        }
-
-        /* We are here, so set_ext_attr succeeded. We no longer need to keep
-         * track of EXT_ATTR_FLAG_{EXISTS,CREATE}, instead, we will force
-         * the attribute value during log replay. -SHP
-         */
-        flags &= ~(EXT_ATTR_FLAG_EXISTS | EXT_ATTR_FLAG_CREATE);
-
-        presto_debug_fail_blkdev(fset, KML_OPCODE_SETEXTATTR | 0x10);
-        if ( presto_do_kml(info, dentry) )
-                error = presto_journal_set_ext_attr
-                        (&rec, fset, dentry, &ver, name, buffer, 
-                         buffer_len, flags);
-
-        presto_debug_fail_blkdev(fset, KML_OPCODE_SETEXTATTR | 0x20);
-        if ( presto_do_rcvd(info, dentry) )
-                error = presto_write_last_rcvd(&rec, fset, info);
-
-        presto_debug_fail_blkdev(fset, KML_OPCODE_SETEXTATTR | 0x30);
-        EXIT;
-exit:
-        presto_release_space(fset->fset_cache, PRESTO_REQHIGH); 
-        presto_trans_commit(fset, handle);
-
-        return error;
-}
-#endif
diff -Nru a/fs/jbd/transaction.c b/fs/jbd/transaction.c
--- a/fs/jbd/transaction.c	Sun May 16 01:18:34 2004
+++ b/fs/jbd/transaction.c	Sun May 16 01:18:34 2004
@@ -633,12 +633,20 @@
 
 		if (jh->b_jlist == BJ_Shadow) {
 			wait_queue_head_t *wqh;
+			DEFINE_WAIT(wait);
 
 			JBUFFER_TRACE(jh, "on shadow: sleep");
 			jbd_unlock_bh_state(bh);
 			/* commit wakes up all shadow buffers after IO */
-			wqh = bh_waitq_head(jh2bh(jh));
-			wait_event(*wqh, (jh->b_jlist != BJ_Shadow));
+			wqh = bh_waitq_head(bh);
+			for ( ; ; ) {
+				prepare_to_wait(wqh, &wait,
+						TASK_UNINTERRUPTIBLE);
+				if (jh->b_jlist != BJ_Shadow)
+					break;
+				schedule();
+			}
+			finish_wait(wqh, &wait);
 			goto repeat;
 		}
 
diff -Nru a/fs/jfs/jfs_debug.c b/fs/jfs/jfs_debug.c
--- a/fs/jfs/jfs_debug.c	Sun May 16 01:18:36 2004
+++ b/fs/jfs/jfs_debug.c	Sun May 16 01:18:36 2004
@@ -1,6 +1,6 @@
 /*
- *   Copyright (c) International Business Machines Corp., 2000-2002
- *   Portions Copyright (c) Christoph Hellwig, 2001-2002
+ *   Copyright (C) International Business Machines Corp., 2000-2004
+ *   Portions Copyright (C) Christoph Hellwig, 2001-2002
  *
  *   This program is free software;  you can redistribute it and/or modify
  *   it under the terms of the GNU General Public License as published by
@@ -147,7 +147,7 @@
 	if (base) {
 		for (i = 0; i < NPROCENT; i++)
 			remove_proc_entry(Entries[i].name, base);
-		remove_proc_entry("jfs", base);
+		remove_proc_entry("jfs", proc_root_fs);
 	}
 }
 
diff -Nru a/fs/jfs/jfs_dtree.c b/fs/jfs/jfs_dtree.c
--- a/fs/jfs/jfs_dtree.c	Sun May 16 01:18:36 2004
+++ b/fs/jfs/jfs_dtree.c	Sun May 16 01:18:36 2004
@@ -177,8 +177,8 @@
 static void dtGetKey(dtpage_t * p, int i, struct component_name * key,
 		     int flag);
 
-static void ciGetLeafPrefixKey(dtpage_t * lp, int li, dtpage_t * rp,
-			       int ri, struct component_name * key, int flag);
+static int ciGetLeafPrefixKey(dtpage_t * lp, int li, dtpage_t * rp,
+			      int ri, struct component_name * key, int flag);
 
 static void dtInsertEntry(dtpage_t * p, int index, struct component_name * key,
 			  ddata_t * data, struct dt_lock **);
@@ -342,7 +342,6 @@
 	struct metapage *mp;
 	s64 offset;
 	uint page_offset;
-	int rc;
 	struct tlock *tlck;
 	s64 xaddr;
 
@@ -396,11 +395,11 @@
 		 * Allocate the first block & add it to the xtree
 		 */
 		xaddr = 0;
-		if ((rc =
-		     xtInsert(tid, ip, 0, 0, sbi->nbperpage,
-			      &xaddr, 0))) {
+		if (xtInsert(tid, ip, 0, 0, sbi->nbperpage, &xaddr, 0)) {
 			jfs_warn("add_index: xtInsert failed!");
-			return -EPERM;
+			memcpy(&jfs_ip->i_dirtable, temp_table,
+			       sizeof (temp_table));
+			goto clean_up;
 		}
 		ip->i_size = PSIZE;
 		ip->i_blocks += LBLK2PBLK(sb, sbi->nbperpage);
@@ -408,7 +407,9 @@
 		if ((mp = get_index_page(ip, 0)) == 0) {
 			jfs_err("add_index: get_metapage failed!");
 			xtTruncate(tid, ip, 0, COMMIT_PWMAP);
-			return -EPERM;
+			memcpy(&jfs_ip->i_dirtable, temp_table,
+			       sizeof (temp_table));
+			goto clean_up;
 		}
 		tlck = txLock(tid, ip, mp, tlckDATA);
 		llck = (struct linelock *) & tlck->lock;
@@ -438,12 +439,9 @@
 		 * This will be the beginning of a new page
 		 */
 		xaddr = 0;
-		if ((rc =
-		     xtInsert(tid, ip, 0, blkno, sbi->nbperpage,
-			      &xaddr, 0))) {
+		if (xtInsert(tid, ip, 0, blkno, sbi->nbperpage, &xaddr, 0)) {
 			jfs_warn("add_index: xtInsert failed!");
-			jfs_ip->next_index--;
-			return -EPERM;
+			goto clean_up;
 		}
 		ip->i_size += PSIZE;
 		ip->i_blocks += LBLK2PBLK(sb, sbi->nbperpage);
@@ -457,7 +455,7 @@
 
 	if (mp == 0) {
 		jfs_err("add_index: get/read_metapage failed!");
-		return -EPERM;
+		goto clean_up;
 	}
 
 	lock_index(tid, ip, mp, index);
@@ -472,6 +470,12 @@
 	release_metapage(mp);
 
 	return index;
+
+      clean_up:
+
+	jfs_ip->next_index--;
+
+	return 0;
 }
 
 /*
@@ -1152,9 +1156,16 @@
 			if ((sp->header.flag & BT_ROOT && skip > 1) ||
 			    sp->header.prev != 0 || skip > 1) {
 				/* compute uppercase router prefix key */
-				ciGetLeafPrefixKey(lp,
-						   lp->header.nextindex - 1,
-						   rp, 0, &key, sbi->mntflag);
+				rc = ciGetLeafPrefixKey(lp,
+							lp->header.nextindex-1,
+							rp, 0, &key,
+							sbi->mntflag);
+				if (rc) {
+					DT_PUTPAGE(lmp);
+					DT_PUTPAGE(rmp);
+					DT_PUTPAGE(smp);
+					goto splitOut;
+				}
 			} else {
 				/* next to leftmost entry of
 				   lowest internal level */
@@ -3713,18 +3724,28 @@
  *	     from two adjacent leaf entries
  *	     across page boundary
  *
- * return:
- *	Number of prefix bytes needed to distinguish b from a.
+ * return: non-zero on error
+ *	
  */
-static void ciGetLeafPrefixKey(dtpage_t * lp, int li, dtpage_t * rp,
+static int ciGetLeafPrefixKey(dtpage_t * lp, int li, dtpage_t * rp,
 			       int ri, struct component_name * key, int flag)
 {
 	int klen, namlen;
 	wchar_t *pl, *pr, *kname;
-	wchar_t lname[JFS_NAME_MAX + 1];
-	struct component_name lkey = { 0, lname };
-	wchar_t rname[JFS_NAME_MAX + 1];
-	struct component_name rkey = { 0, rname };
+	struct component_name lkey;
+	struct component_name rkey;
+
+	lkey.name = (wchar_t *) kmalloc((JFS_NAME_MAX + 1) * sizeof(wchar_t),
+					GFP_KERNEL);
+	if (lkey.name == NULL)
+		return -ENOSPC;
+
+	rkey.name = (wchar_t *) kmalloc((JFS_NAME_MAX + 1) * sizeof(wchar_t),
+					GFP_KERNEL);
+	if (rkey.name == NULL) {
+		kfree(lkey.name);
+		return -ENOSPC;
+	}
 
 	/* get left and right key */
 	dtGetKey(lp, li, &lkey, flag);
@@ -3749,7 +3770,7 @@
 		*kname = *pr;
 		if (*pl != *pr) {
 			key->namlen = klen + 1;
-			return;
+			goto free_names;
 		}
 	}
 
@@ -3760,7 +3781,10 @@
 	} else			/* l->namelen == r->namelen */
 		key->namlen = klen;
 
-	return;
+free_names:
+	kfree(lkey.name);
+	kfree(rkey.name);
+	return 0;
 }
 
 
diff -Nru a/fs/jfs/jfs_metapage.c b/fs/jfs/jfs_metapage.c
--- a/fs/jfs/jfs_metapage.c	Sun May 16 01:18:34 2004
+++ b/fs/jfs/jfs_metapage.c	Sun May 16 01:18:34 2004
@@ -228,31 +228,36 @@
 	else
 		mapping = inode->i_mapping;
 
-	spin_lock(&meta_lock);
 	hash_ptr = meta_hash(mapping, lblock);
+again:
+	spin_lock(&meta_lock);
 	mp = search_hash(hash_ptr, mapping, lblock);
 	if (mp) {
 	      page_found:
+		mp->count++;
+		lock_metapage(mp);
+		spin_unlock(&meta_lock);
+		if (test_bit(META_stale, &mp->flag)) {
+			release_metapage(mp);
+			goto again;
+		}
 		if (test_bit(META_discard, &mp->flag)) {
 			if (!new) {
-				spin_unlock(&meta_lock);
 				jfs_error(inode->i_sb,
 					  "__get_metapage: using a "
 					  "discarded metapage");
+				release_metapage(mp);
 				return NULL;
 			}
 			clear_bit(META_discard, &mp->flag);
 		}
-		mp->count++;
 		jfs_info("__get_metapage: found 0x%p, in hash", mp);
 		if (mp->logical_size != size) {
-			spin_unlock(&meta_lock);
 			jfs_error(inode->i_sb,
 				  "__get_metapage: mp->logical_size != size");
+			release_metapage(mp);
 			return NULL;
 		}
-		lock_metapage(mp);
-		spin_unlock(&meta_lock);
 	} else {
 		l2bsize = inode->i_blkbits;
 		l2BlocksPerPage = PAGE_CACHE_SHIFT - l2bsize;
@@ -451,46 +456,57 @@
 	if (--mp->count || atomic_read(&mp->nohomeok)) {
 		unlock_metapage(mp);
 		spin_unlock(&meta_lock);
-	} else {
-		remove_from_hash(mp, meta_hash(mp->mapping, mp->index));
-		spin_unlock(&meta_lock);
-
-		if (mp->page) {
-			kunmap(mp->page);
-			mp->data = 0;
-			if (test_bit(META_dirty, &mp->flag))
-				__write_metapage(mp);
-			if (test_bit(META_sync, &mp->flag)) {
-				sync_metapage(mp);
-				clear_bit(META_sync, &mp->flag);
-			}
-
-			if (test_bit(META_discard, &mp->flag)) {
-				lock_page(mp->page);
-				block_invalidatepage(mp->page, 0);
-				unlock_page(mp->page);
-			}
+		return;
+	}
 
-			page_cache_release(mp->page);
-			INCREMENT(mpStat.pagefree);
+	if (mp->page) {
+		/* Releasing spinlock, we have to check mp->count later */
+		set_bit(META_stale, &mp->flag);
+		spin_unlock(&meta_lock);
+		kunmap(mp->page);
+		mp->data = 0;
+		if (test_bit(META_dirty, &mp->flag))
+			__write_metapage(mp);
+		if (test_bit(META_sync, &mp->flag)) {
+			sync_metapage(mp);
+			clear_bit(META_sync, &mp->flag);
 		}
 
-		if (mp->lsn) {
-			/*
-			 * Remove metapage from logsynclist.
-			 */
-			log = mp->log;
-			LOGSYNC_LOCK(log);
-			mp->log = 0;
-			mp->lsn = 0;
-			mp->clsn = 0;
-			log->count--;
-			list_del(&mp->synclist);
-			LOGSYNC_UNLOCK(log);
+		if (test_bit(META_discard, &mp->flag)) {
+			lock_page(mp->page);
+			block_invalidatepage(mp->page, 0);
+			unlock_page(mp->page);
 		}
 
-		free_metapage(mp);
+		page_cache_release(mp->page);
+		mp->page = NULL;
+		INCREMENT(mpStat.pagefree);
+		spin_lock(&meta_lock);
+	}
+
+	if (mp->lsn) {
+		/*
+		 * Remove metapage from logsynclist.
+		 */
+		log = mp->log;
+		LOGSYNC_LOCK(log);
+		mp->log = 0;
+		mp->lsn = 0;
+		mp->clsn = 0;
+		log->count--;
+		list_del(&mp->synclist);
+		LOGSYNC_UNLOCK(log);
 	}
+	if (mp->count) {
+		/* Someone else is trying to get this metpage */
+		unlock_metapage(mp);
+		spin_unlock(&meta_lock);
+		return;
+	}
+	remove_from_hash(mp, meta_hash(mp->mapping, mp->index));
+	spin_unlock(&meta_lock);
+
+	free_metapage(mp);
 }
 
 void __invalidate_metapages(struct inode *ip, s64 addr, int len)
@@ -510,9 +526,20 @@
 	for (lblock = addr; lblock < addr + len;
 	     lblock += 1 << l2BlocksPerPage) {
 		hash_ptr = meta_hash(mapping, lblock);
+again:
 		spin_lock(&meta_lock);
 		mp = search_hash(hash_ptr, mapping, lblock);
 		if (mp) {
+			if (test_bit(META_stale, &mp->flag)) {
+				/* Racing with release_metapage */
+				mp->count++;
+				lock_metapage(mp);
+				spin_unlock(&meta_lock);
+				/* racing release_metapage should be done now */
+				release_metapage(mp);
+				goto again;
+			}
+
 			set_bit(META_discard, &mp->flag);
 			spin_unlock(&meta_lock);
 		} else {
diff -Nru a/fs/jfs/jfs_metapage.h b/fs/jfs/jfs_metapage.h
--- a/fs/jfs/jfs_metapage.h	Sun May 16 01:18:35 2004
+++ b/fs/jfs/jfs_metapage.h	Sun May 16 01:18:35 2004
@@ -64,6 +64,7 @@
 #define META_sync	4
 #define META_discard	5
 #define META_forced	6
+#define META_stale	7
 
 #define mark_metapage_dirty(mp) set_bit(META_dirty, &(mp)->flag)
 
diff -Nru a/fs/namespace.c b/fs/namespace.c
--- a/fs/namespace.c	Sun May 16 01:18:35 2004
+++ b/fs/namespace.c	Sun May 16 01:18:35 2004
@@ -36,6 +36,7 @@
 
 /* spinlock for vfsmount related operations, inplace of dcache_lock */
 spinlock_t vfsmount_lock __cacheline_aligned_in_smp = SPIN_LOCK_UNLOCKED;
+
 static struct list_head *mount_hashtable;
 static int hash_mask, hash_bits;
 static kmem_cache_t *mnt_cache; 
@@ -259,7 +260,65 @@
 	.show	= show_vfsmnt
 };
 
-/*
+/**
+ * may_umount_tree - check if a mount tree is busy
+ * @mnt: root of mount tree
+ *
+ * This is called to check if a tree of mounts has any
+ * open files, pwds, chroots or sub mounts that are
+ * busy.
+ */
+int may_umount_tree(struct vfsmount *mnt)
+{
+	struct list_head *next;
+	struct vfsmount *this_parent = mnt;
+	int actual_refs;
+	int minimum_refs;
+
+	spin_lock(&vfsmount_lock);
+	actual_refs = atomic_read(&mnt->mnt_count);
+	minimum_refs = 2;
+repeat:
+	next = this_parent->mnt_mounts.next;
+resume:
+	while (next != &this_parent->mnt_mounts) {
+		struct vfsmount *p = list_entry(next, struct vfsmount, mnt_child);
+
+		next = next->next;
+
+		actual_refs += atomic_read(&p->mnt_count);
+		minimum_refs += 2;
+
+		if (!list_empty(&p->mnt_mounts)) {
+			this_parent = p;
+			goto repeat;
+		}
+	}
+
+	if (this_parent != mnt) {
+		next = this_parent->mnt_child.next;
+		this_parent = this_parent->mnt_parent;
+		goto resume;
+	}
+	spin_unlock(&vfsmount_lock);
+
+	if (actual_refs > minimum_refs)
+		return -EBUSY;
+
+	return 0;
+}
+
+EXPORT_SYMBOL(may_umount_tree);
+
+/**
+ * may_umount - check if a mount point is busy
+ * @mnt: root of mount
+ *
+ * This is called to check if a mount point has any
+ * open files, pwds, chroots or sub mounts. If the
+ * mount has sub mounts this will return busy
+ * regardless of whether the sub mounts are busy.
+ *
  * Doesn't take quota and stuff into account. IOW, in some cases it will
  * give false negatives. The main reason why it's here is that we need
  * a non-destructive way to look for easily umountable filesystems.
diff -Nru a/fs/nfs/unlink.c b/fs/nfs/unlink.c
--- a/fs/nfs/unlink.c	Sun May 16 01:18:36 2004
+++ b/fs/nfs/unlink.c	Sun May 16 01:18:36 2004
@@ -180,7 +180,9 @@
 	task->tk_action = nfs_async_unlink_init;
 	task->tk_release = nfs_async_unlink_release;
 
+	spin_lock(&dentry->d_lock);
 	dentry->d_flags |= DCACHE_NFSFS_RENAMED;
+	spin_unlock(&dentry->d_lock);
 	data->cred = rpcauth_lookupcred(clnt->cl_auth, 0);
 
 	rpc_sleep_on(&nfs_delete_queue, task, NULL, NULL);
@@ -210,7 +212,9 @@
 		return;
 	data->count++;
 	nfs_copy_dname(dentry, data);
+	spin_lock(&dentry->d_lock);
 	dentry->d_flags &= ~DCACHE_NFSFS_RENAMED;
+	spin_unlock(&dentry->d_lock);
 	if (data->task.tk_rpcwait == &nfs_delete_queue)
 		rpc_wake_up_task(&data->task);
 	nfs_put_unlinkdata(data);
diff -Nru a/fs/ntfs/ChangeLog b/fs/ntfs/ChangeLog
--- a/fs/ntfs/ChangeLog	Sun May 16 01:18:34 2004
+++ b/fs/ntfs/ChangeLog	Sun May 16 01:18:34 2004
@@ -1,10 +1,16 @@
 ToDo:
 	- Find and fix bugs.
+	- Either invalidate quotas or update the quota charges on NTFS 3.x
+	  volumes with quota tracking enabled ($Quota).
+	- Checkpoint or disable the user space journal ($UsnJrnl).
 	- Implement aops->set_page_dirty() in order to take control of buffer
 	  dirtying. Not having it means if page_has_buffers(), all buffers
 	  will be dirtied with the page. And if not they won't be. That is
 	  fine for the moment but will break once we enable metadata updates.
-	- Implement sops->dirty_inode() to implement {a,m,c} time updates and
+	  For now just always using __set_page_dirty_nobuffers() for metadata
+	  pages as nothing can dirty a page other than ourselves. Should this
+	  change, we will really need to roll our own ->set_page_dirty().
+	- Implement sops->dirty_inode() to implement {a,m,c}time updates and
 	  such things.
 	- Implement sops->write_inode().
 	- In between ntfs_prepare/commit_write, need exclusion between
@@ -19,7 +25,46 @@
 	  sufficient for synchronisation here. We then just need to make sure
 	  ntfs_readpage/writepage/truncate interoperate properly with us.
 
-2.1.8 - Handle $MFT mirror and $LogFile, improve time ihandling, and cleanups.
+2.1.11 - Driver internal cleanups.
+
+	- Only build logfile.o if building the driver with read-write support.
+	- Really final white space cleanups.
+	- Use generic_ffs() instead of ffs() in logfile.c which allows the
+	  log_page_size variable to be optimized by gcc into a constant.
+	- Rename uchar_t to ntfschar everywhere as uchar_t is unsigned 1-byte
+	  char as defined by POSIX and as found on some systems.
+
+2.1.10 - Force read-only (re)mounting of volumes with unsupported volume flags.
+
+	- Finish off the white space cleanups (remove trailing spaces, etc).
+	- Clean up ntfs_fill_super() and ntfs_read_inode_mount() by removing
+	  the kludges around the first iget().  Instead of (re)setting ->s_op
+	  we have the $MFT inode set up by explicit new_inode() / set ->i_ino /
+	  insert_inode_hash() / call ntfs_read_inode_mount() directly.  This
+	  kills the need for second super_operations and allows to return error
+	  from ntfs_read_inode_mount() without resorting to ugly "poisoning"
+	  tricks.  (Al Viro)
+	- Force read-only (re)mounting if any of the following bits are set in
+	  the volume information flags:
+	  	VOLUME_IS_DIRTY, VOLUME_RESIZE_LOG_FILE,
+		VOLUME_UPGRADE_ON_MOUNT, VOLUME_DELETE_USN_UNDERWAY,
+		VOLUME_REPAIR_OBJECT_ID, VOLUME_MODIFIED_BY_CHKDSK
+	  To make this easier we define VOLUME_MUST_MOUNT_RO_MASK with all the
+	  above bits set so the test is made easy.
+
+2.1.9 - Fix two bugs in decompression engine.
+
+	- Fix a bug where we would not always detect that we have reached the
+	  end of a compression block because we were ending at minus one byte
+	  which is effectively the same as being at the end.  The fix is to
+	  check whether the uncompressed buffer has been fully filled and if so
+	  we assume we have reached the end of the compression block.  A big
+	  thank you to Marcin Gibuła for the bug report, the assistance in
+	  tracking down the bug and testing the fix.
+	- Fix a possible bug where when a compressed read is truncated to the
+	  end of the file, the offset inside the last page was not truncated.
+
+2.1.8 - Handle $MFT mirror and $LogFile, improve time handling, and cleanups.
 
 	- Use get_bh() instead of manual atomic_inc() in fs/ntfs/compress.c.
 	- Modify fs/ntfs/time.c::ntfs2utc(), get_current_ntfs_time(), and
@@ -570,12 +615,12 @@
 	  types of inode names readdir() returns and modify ntfs_filldir()
 	  accordingly. There are several parameters to show_inodes:
 		system:	system files
-	  	win32:	long file names (including POSIX file names) [DEFAULT]
+		win32:	long file names (including POSIX file names) [DEFAULT]
 		long:	same as win32
-	  	dos:	short file names only (excluding POSIX file names)
+		dos:	short file names only (excluding POSIX file names)
 		short:	same as dos
 		posix:	same as both win32 and dos
-	  	all:	all file names
+		all:	all file names
 	  Note that the options are additive, i.e. specifying:
 		-o show_inodes=system,show_inodes=win32,show_inodes=dos
 	  is the same as specifying:
@@ -868,4 +913,3 @@
 	working nicely, too. Proof of inode metadata in the page cache and non-
 	resident file unnamed stream data in the page cache concepts is thus
 	complete.
-
diff -Nru a/fs/ntfs/Makefile b/fs/ntfs/Makefile
--- a/fs/ntfs/Makefile	Sun May 16 01:18:35 2004
+++ b/fs/ntfs/Makefile	Sun May 16 01:18:35 2004
@@ -2,10 +2,10 @@
 
 obj-$(CONFIG_NTFS_FS) += ntfs.o
 
-ntfs-objs := aops.o attrib.o compress.o debug.o dir.o file.o inode.o logfile.o \
-	     mft.o mst.o namei.o super.o sysctl.o unistr.o upcase.o
+ntfs-objs := aops.o attrib.o compress.o debug.o dir.o file.o inode.o mft.o \
+	     mst.o namei.o super.o sysctl.o unistr.o upcase.o
 
-EXTRA_CFLAGS = -DNTFS_VERSION=\"2.1.8\"
+EXTRA_CFLAGS = -DNTFS_VERSION=\"2.1.11\"
 
 ifeq ($(CONFIG_NTFS_DEBUG),y)
 EXTRA_CFLAGS += -DDEBUG
@@ -13,4 +13,6 @@
 
 ifeq ($(CONFIG_NTFS_RW),y)
 EXTRA_CFLAGS += -DNTFS_RW
+
+ntfs-objs += logfile.o
 endif
diff -Nru a/fs/ntfs/attrib.c b/fs/ntfs/attrib.c
--- a/fs/ntfs/attrib.c	Sun May 16 01:18:37 2004
+++ b/fs/ntfs/attrib.c	Sun May 16 01:18:37 2004
@@ -105,7 +105,7 @@
  * It is up to the caller to serialize access to the run lists @dst and @src.
  *
  * Return: TRUE   Success, the run lists can be merged.
- *         FALSE  Failure, the run lists cannot be merged.
+ *	   FALSE  Failure, the run lists cannot be merged.
  */
 static inline BOOL ntfs_are_rl_mergeable(run_list_element *dst,
 		run_list_element *src)
@@ -151,7 +151,7 @@
  * It is up to the caller to serialize access to the run lists @dst and @src.
  *
  * Return: TRUE   Success, the run lists have been merged.
- *         FALSE  Failure, the run lists cannot be merged and have not been
+ *	   FALSE  Failure, the run lists cannot be merged and have not been
  *		  modified.
  */
 static inline BOOL ntfs_rl_merge(run_list_element *dst, run_list_element *src)
@@ -264,9 +264,9 @@
 	BUG_ON(!src);
 
 	/* disc => Discontinuity between the end of @dst and the start of @src.
-	 *         This means we might need to insert a hole.
+	 *	   This means we might need to insert a hole.
 	 * hole => @dst ends with a hole or an unmapped region which we can
-	 *         extend to match the discontinuity. */
+	 *	   extend to match the discontinuity. */
 	if (loc == 0)
 		disc = (src[0].vcn > 0);
 	else {
@@ -444,7 +444,7 @@
 	ntfs_rl_mc(dst, loc + 1, src, 0, ssize);
 
 	/* Adjust the size of the holes either size of @src. */
-	dst[loc].length         = dst[loc+1].vcn       - dst[loc].vcn;
+	dst[loc].length		= dst[loc+1].vcn       - dst[loc].vcn;
 	dst[loc+ssize+1].vcn    = dst[loc+ssize].vcn   + dst[loc+ssize].length;
 	dst[loc+ssize+1].length = dst[loc+ssize+2].vcn - dst[loc+ssize+1].vcn;
 
@@ -504,7 +504,7 @@
 	ntfs_debug_dump_runlist(srl);
 #endif
 
- 	/* Check for silly calling... */
+	/* Check for silly calling... */
 	if (unlikely(!srl))
 		return drl;
 	if (unlikely(IS_ERR(srl) || IS_ERR(drl)))
@@ -706,9 +706,9 @@
  *
  * The following error codes are defined:
  *	-ENOMEM	- Not enough memory to allocate run list array.
- * 	-EIO	- Corrupt run list.
- * 	-EINVAL	- Invalid parameters were passed in.
- * 	-ERANGE	- The two run lists overlap.
+ *	-EIO	- Corrupt run list.
+ *	-EINVAL	- Invalid parameters were passed in.
+ *	-ERANGE	- The two run lists overlap.
  *
  * FIXME: For now we take the conceptionally simplest approach of creating the
  * new run list disregarding the already existing one and then splicing the
@@ -719,7 +719,7 @@
 		const ATTR_RECORD *attr, run_list_element *old_rl)
 {
 	VCN vcn;		/* Current vcn. */
-	LCN lcn; 		/* Current lcn. */
+	LCN lcn;		/* Current lcn. */
 	s64 deltaxcn;		/* Change in [vl]cn. */
 	run_list_element *rl;	/* The output run list. */
 	u8 *buf;		/* Current position in mapping pairs array. */
@@ -769,7 +769,7 @@
 		 */
 		if (((rlpos + 3) * sizeof(*old_rl)) > rlsize) {
 			run_list_element *rl2;
-			
+
 			rl2 = ntfs_malloc_nofs(rlsize + (int)PAGE_SIZE);
 			if (unlikely(!rl2)) {
 				ntfs_free(rl);
@@ -946,7 +946,7 @@
 	attr_search_context *ctx;
 	MFT_RECORD *mrec;
 	int err = 0;
-	
+
 	ntfs_debug("Mapping run list part containing vcn 0x%llx.",
 			(unsigned long long)vcn);
 
@@ -983,7 +983,7 @@
 			ni->run_list.rl = rl;
 	}
 	up_write(&ni->run_list.lock);
-	
+
 	put_attr_search_ctx(ctx);
 err_out:
 	unmap_mft_record(base_ni);
@@ -1096,13 +1096,13 @@
  * Warning: Never use @val when looking for attribute types which can be
  *	    non-resident as this most likely will result in a crash!
  */
-BOOL find_attr(const ATTR_TYPES type, const uchar_t *name, const u32 name_len,
+BOOL find_attr(const ATTR_TYPES type, const ntfschar *name, const u32 name_len,
 		const IGNORE_CASE_BOOL ic, const u8 *val, const u32 val_len,
 		attr_search_context *ctx)
 {
 	ATTR_RECORD *a;
 	ntfs_volume *vol;
-	uchar_t *upcase;
+	ntfschar *upcase;
 	u32 upcase_len;
 
 	if (ic == IGNORE_CASE) {
@@ -1145,12 +1145,12 @@
 			if (a->name_length)
 				return FALSE;
 		} else if (!ntfs_are_names_equal(name, name_len,
-			    (uchar_t*)((u8*)a + le16_to_cpu(a->name_offset)),
+			    (ntfschar*)((u8*)a + le16_to_cpu(a->name_offset)),
 			    a->name_length, ic, upcase, upcase_len)) {
 			register int rc;
-			
+
 			rc = ntfs_collate_names(name, name_len,
-					(uchar_t*)((u8*)a +
+					(ntfschar*)((u8*)a +
 						le16_to_cpu(a->name_offset)),
 					a->name_length, 1, IGNORE_CASE,
 					upcase, upcase_len);
@@ -1162,9 +1162,9 @@
 				return FALSE;
 			/* If the strings are not equal, continue search. */
 			if (rc)
-	 			continue;
+				continue;
 			rc = ntfs_collate_names(name, name_len,
-					(uchar_t*)((u8*)a +
+					(ntfschar*)((u8*)a +
 						le16_to_cpu(a->name_offset)),
 					a->name_length, 1, CASE_SENSITIVE,
 					upcase, upcase_len);
@@ -1354,7 +1354,7 @@
  * and if there is not enough space, the attribute should be placed in an
  * extent mft record.
  */
-static BOOL find_external_attr(const ATTR_TYPES type, const uchar_t *name,
+static BOOL find_external_attr(const ATTR_TYPES type, const ntfschar *name,
 		const u32 name_len, const IGNORE_CASE_BOOL ic,
 		const VCN lowest_vcn, const u8 *val, const u32 val_len,
 		attr_search_context *ctx)
@@ -1364,7 +1364,7 @@
 	ATTR_LIST_ENTRY *al_entry, *next_al_entry;
 	u8 *al_start, *al_end;
 	ATTR_RECORD *a;
-	uchar_t *al_name;
+	ntfschar *al_name;
 	u32 al_name_len;
 
 	ni = ctx->ntfs_ino;
@@ -1417,7 +1417,7 @@
 		 * missing, assume we want an unnamed attribute.
 		 */
 		al_name_len = al_entry->name_length;
-		al_name = (uchar_t*)((u8*)al_entry + al_entry->name_offset);
+		al_name = (ntfschar*)((u8*)al_entry + al_entry->name_offset);
 		if (!name) {
 			if (al_name_len)
 				goto not_found;
@@ -1461,12 +1461,12 @@
 		if (lowest_vcn && (u8*)next_al_entry >= al_start	    &&
 				(u8*)next_al_entry + 6 < al_end		    &&
 				(u8*)next_al_entry + le16_to_cpu(
-					next_al_entry->length) <= al_end    &&	
+					next_al_entry->length) <= al_end    &&
 				sle64_to_cpu(next_al_entry->lowest_vcn) <=
 					sle64_to_cpu(lowest_vcn)	    &&
 				next_al_entry->type == al_entry->type	    &&
 				next_al_entry->name_length == al_name_len   &&
-				ntfs_are_names_equal((uchar_t*)((u8*)
+				ntfs_are_names_equal((ntfschar*)((u8*)
 					next_al_entry +
 					next_al_entry->name_offset),
 					next_al_entry->name_length,
@@ -1539,7 +1539,7 @@
 		if (name) {
 			if (a->name_length != al_name_len)
 				continue;
-			if (!ntfs_are_names_equal((uchar_t*)((u8*)a +
+			if (!ntfs_are_names_equal((ntfschar*)((u8*)a +
 					le16_to_cpu(a->name_offset)),
 					a->name_length, al_name, al_name_len,
 					CASE_SENSITIVE, vol->upcase,
@@ -1623,9 +1623,10 @@
  * being searched for, i.e. if one wants to add the attribute to the mft
  * record this is the correct place to insert it into.
  */
-BOOL lookup_attr(const ATTR_TYPES type, const uchar_t *name, const u32 name_len,
-		const IGNORE_CASE_BOOL ic, const VCN lowest_vcn, const u8 *val,
-		const u32 val_len, attr_search_context *ctx)
+BOOL lookup_attr(const ATTR_TYPES type, const ntfschar *name,
+		const u32 name_len, const IGNORE_CASE_BOOL ic,
+		const VCN lowest_vcn, const u8 *val, const u32 val_len,
+		attr_search_context *ctx)
 {
 	ntfs_inode *base_ni;
 
diff -Nru a/fs/ntfs/attrib.h b/fs/ntfs/attrib.h
--- a/fs/ntfs/attrib.h	Sun May 16 01:18:34 2004
+++ b/fs/ntfs/attrib.h	Sun May 16 01:18:34 2004
@@ -2,7 +2,7 @@
  * attrib.h - Defines for attribute handling in NTFS Linux kernel driver.
  *	      Part of the Linux-NTFS project.
  *
- * Copyright (c) 2001-2003 Anton Altaparmakov
+ * Copyright (c) 2001-2004 Anton Altaparmakov
  * Copyright (c) 2002 Richard Russon
  *
  * This program/include file is free software; you can redistribute it and/or
@@ -10,13 +10,13 @@
  * by the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *
- * This program/include file is distributed in the hope that it will be 
- * useful, but WITHOUT ANY WARRANTY; without even the implied warranty 
+ * This program/include file is distributed in the hope that it will be
+ * useful, but WITHOUT ANY WARRANTY; without even the implied warranty
  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program (in the main directory of the Linux-NTFS 
+ * along with this program (in the main directory of the Linux-NTFS
  * distribution in the file COPYING); if not, write to the Free Software
  * Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
@@ -79,13 +79,14 @@
 
 extern LCN vcn_to_lcn(const run_list_element *rl, const VCN vcn);
 
-extern BOOL find_attr(const ATTR_TYPES type, const uchar_t *name,
+extern BOOL find_attr(const ATTR_TYPES type, const ntfschar *name,
 		const u32 name_len, const IGNORE_CASE_BOOL ic, const u8 *val,
 		const u32 val_len, attr_search_context *ctx);
 
-BOOL lookup_attr(const ATTR_TYPES type, const uchar_t *name, const u32 name_len,
-		const IGNORE_CASE_BOOL ic, const VCN lowest_vcn, const u8 *val,
-		const u32 val_len, attr_search_context *ctx);
+BOOL lookup_attr(const ATTR_TYPES type, const ntfschar *name,
+		const u32 name_len, const IGNORE_CASE_BOOL ic,
+		const VCN lowest_vcn, const u8 *val, const u32 val_len,
+		attr_search_context *ctx);
 
 extern int load_attribute_list(ntfs_volume *vol, run_list *rl, u8 *al_start,
 		const s64 size, const s64 initialized_size);
@@ -103,4 +104,3 @@
 extern void put_attr_search_ctx(attr_search_context *ctx);
 
 #endif /* _LINUX_NTFS_ATTRIB_H */
-
diff -Nru a/fs/ntfs/compress.c b/fs/ntfs/compress.c
--- a/fs/ntfs/compress.c	Sun May 16 01:18:35 2004
+++ b/fs/ntfs/compress.c	Sun May 16 01:18:35 2004
@@ -197,9 +197,15 @@
 do_next_sb:
 	ntfs_debug("Beginning sub-block at offset = 0x%x in the cb.",
 			cb - cb_start);
-
-	/* Have we reached the end of the compression block? */
-	if (cb == cb_end || !le16_to_cpup((u16*)cb)) {
+	/*
+	 * Have we reached the end of the compression block or the end of the
+	 * decompressed data?  The latter can happen for example if the current
+	 * position in the compression block is one byte before its end so the
+	 * first two checks do not detect it.
+	 */
+	if (cb == cb_end || !le16_to_cpup((u16*)cb) ||
+			(*dest_index == dest_max_index &&
+			*dest_ofs == dest_max_ofs)) {
 		int i;
 
 		ntfs_debug("Completed. Returning success (0).");
@@ -501,7 +507,7 @@
 	 */
 	unsigned int nr_pages = (end_vcn - start_vcn) <<
 			vol->cluster_size_bits >> PAGE_CACHE_SHIFT;
-	unsigned int xpage, max_page, cur_page, cur_ofs, i;
+	unsigned int xpage, max_page, max_ofs, cur_page, cur_ofs, i;
 	unsigned int cb_clusters, cb_max_ofs;
 	int block, max_block, cb_max_page, bhs_size, nr_bhs, err = 0;
 	struct page **pages;
@@ -544,8 +550,11 @@
 	 */
 	max_page = ((VFS_I(ni)->i_size + PAGE_CACHE_SIZE - 1) >>
 			PAGE_CACHE_SHIFT) - offset;
-	if (nr_pages < max_page)
+	max_ofs = (VFS_I(ni)->i_size + PAGE_CACHE_SIZE - 1) & ~PAGE_CACHE_MASK;
+	if (nr_pages < max_page) {
 		max_page = nr_pages;
+		max_ofs = 0;
+	}
 	for (i = 0; i < max_page; i++, offset++) {
 		if (i != xpage)
 			pages[i] = grab_cache_page_nowait(mapping, offset);
@@ -713,8 +722,14 @@
 	cb_max_page >>= PAGE_CACHE_SHIFT;
 
 	/* Catch end of file inside a compression block. */
-	if (cb_max_page > max_page)
-		cb_max_page = max_page;
+	if (cb_max_page >= max_page) {
+		if (cb_max_page > max_page) {
+			cb_max_page = max_page;
+			cb_max_ofs = max_ofs;
+		} else if (cb_max_ofs > max_ofs) {
+			cb_max_ofs = max_ofs;
+		}
+	}
 
 	if (vcn == start_vcn - cb_clusters) {
 		/* Sparse cb, zero out page range overlapping the cb. */
diff -Nru a/fs/ntfs/debug.c b/fs/ntfs/debug.c
--- a/fs/ntfs/debug.c	Sun May 16 01:18:37 2004
+++ b/fs/ntfs/debug.c	Sun May 16 01:18:37 2004
@@ -1,20 +1,20 @@
 /*
  * debug.c - NTFS kernel debug support. Part of the Linux-NTFS project.
  *
- * Copyright (c) 2001,2002 Anton Altaparmakov.
+ * Copyright (c) 2001-2004 Anton Altaparmakov
  *
  * This program/include file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as published
  * by the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *
- * This program/include file is distributed in the hope that it will be 
- * useful, but WITHOUT ANY WARRANTY; without even the implied warranty 
+ * This program/include file is distributed in the hope that it will be
+ * useful, but WITHOUT ANY WARRANTY; without even the implied warranty
  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program (in the main directory of the Linux-NTFS 
+ * along with this program (in the main directory of the Linux-NTFS
  * distribution in the file COPYING); if not, write to the Free Software
  * Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
@@ -172,4 +172,3 @@
 }
 
 #endif
-
diff -Nru a/fs/ntfs/debug.h b/fs/ntfs/debug.h
--- a/fs/ntfs/debug.h	Sun May 16 01:18:36 2004
+++ b/fs/ntfs/debug.h	Sun May 16 01:18:36 2004
@@ -1,20 +1,20 @@
 /*
  * debug.h - NTFS kernel debug support. Part of the Linux-NTFS project.
  *
- * Copyright (c) 2001,2002 Anton Altaparmakov.
+ * Copyright (c) 2001-2004 Anton Altaparmakov
  *
  * This program/include file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as published
  * by the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *
- * This program/include file is distributed in the hope that it will be 
- * useful, but WITHOUT ANY WARRANTY; without even the implied warranty 
+ * This program/include file is distributed in the hope that it will be
+ * useful, but WITHOUT ANY WARRANTY; without even the implied warranty
  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program (in the main directory of the Linux-NTFS 
+ * along with this program (in the main directory of the Linux-NTFS
  * distribution in the file COPYING); if not, write to the Free Software
  * Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
@@ -69,4 +69,3 @@
 #define ntfs_error(sb, f, a...)		__ntfs_error(__FUNCTION__, sb, f, ##a)
 
 #endif /* _LINUX_NTFS_DEBUG_H */
-
diff -Nru a/fs/ntfs/dir.c b/fs/ntfs/dir.c
--- a/fs/ntfs/dir.c	Sun May 16 01:18:34 2004
+++ b/fs/ntfs/dir.c	Sun May 16 01:18:34 2004
@@ -27,7 +27,7 @@
 /**
  * The little endian Unicode string $I30 as a global constant.
  */
-uchar_t I30[5] = { const_cpu_to_le16('$'), const_cpu_to_le16('I'),
+ntfschar I30[5] = { const_cpu_to_le16('$'), const_cpu_to_le16('I'),
 		const_cpu_to_le16('3'),	const_cpu_to_le16('0'),
 		const_cpu_to_le16(0) };
 
@@ -64,7 +64,7 @@
  * work but we don't care for how quickly one can access them. This also fixes
  * the dcache aliasing issues.
  */
-MFT_REF ntfs_lookup_inode_by_name(ntfs_inode *dir_ni, const uchar_t *uname,
+MFT_REF ntfs_lookup_inode_by_name(ntfs_inode *dir_ni, const ntfschar *uname,
 		const int uname_len, ntfs_name **res)
 {
 	ntfs_volume *vol = dir_ni->vol;
@@ -135,7 +135,7 @@
 		 * returning.
 		 */
 		if (ntfs_are_names_equal(uname, uname_len,
-				(uchar_t*)&ie->key.file_name.file_name,
+				(ntfschar*)&ie->key.file_name.file_name,
 				ie->key.file_name.file_name_length,
 				CASE_SENSITIVE, vol->upcase, vol->upcase_len)) {
 found_it:
@@ -186,7 +186,7 @@
 		if (!NVolCaseSensitive(vol) &&
 				ie->key.file_name.file_name_type &&
 				ntfs_are_names_equal(uname, uname_len,
-				(uchar_t*)&ie->key.file_name.file_name,
+				(ntfschar*)&ie->key.file_name.file_name,
 				ie->key.file_name.file_name_length,
 				IGNORE_CASE, vol->upcase, vol->upcase_len)) {
 			int name_size = sizeof(ntfs_name);
@@ -206,7 +206,7 @@
 			}
 
 			if (type != FILE_NAME_DOS)
-				name_size += len * sizeof(uchar_t);
+				name_size += len * sizeof(ntfschar);
 			name = kmalloc(name_size, GFP_NOFS);
 			if (!name) {
 				err = -ENOMEM;
@@ -217,7 +217,7 @@
 			if (type != FILE_NAME_DOS) {
 				name->len = len;
 				memcpy(name->name, ie->key.file_name.file_name,
-						len * sizeof(uchar_t));
+						len * sizeof(ntfschar));
 			} else
 				name->len = 0;
 			*res = name;
@@ -227,7 +227,7 @@
 		 * know which way in the B+tree we have to go.
 		 */
 		rc = ntfs_collate_names(uname, uname_len,
-				(uchar_t*)&ie->key.file_name.file_name,
+				(ntfschar*)&ie->key.file_name.file_name,
 				ie->key.file_name.file_name_length, 1,
 				IGNORE_CASE, vol->upcase, vol->upcase_len);
 		/*
@@ -246,7 +246,7 @@
 		 * collation.
 		 */
 		rc = ntfs_collate_names(uname, uname_len,
-				(uchar_t*)&ie->key.file_name.file_name,
+				(ntfschar*)&ie->key.file_name.file_name,
 				ie->key.file_name.file_name_length, 1,
 				CASE_SENSITIVE, vol->upcase, vol->upcase_len);
 		if (rc == -1)
@@ -395,7 +395,7 @@
 		 * returning.
 		 */
 		if (ntfs_are_names_equal(uname, uname_len,
-				(uchar_t*)&ie->key.file_name.file_name,
+				(ntfschar*)&ie->key.file_name.file_name,
 				ie->key.file_name.file_name_length,
 				CASE_SENSITIVE, vol->upcase, vol->upcase_len)) {
 found_it2:
@@ -445,7 +445,7 @@
 		if (!NVolCaseSensitive(vol) &&
 				ie->key.file_name.file_name_type &&
 				ntfs_are_names_equal(uname, uname_len,
-				(uchar_t*)&ie->key.file_name.file_name,
+				(ntfschar*)&ie->key.file_name.file_name,
 				ie->key.file_name.file_name_length,
 				IGNORE_CASE, vol->upcase, vol->upcase_len)) {
 			int name_size = sizeof(ntfs_name);
@@ -466,7 +466,7 @@
 			}
 
 			if (type != FILE_NAME_DOS)
-				name_size += len * sizeof(uchar_t);
+				name_size += len * sizeof(ntfschar);
 			name = kmalloc(name_size, GFP_NOFS);
 			if (!name) {
 				err = -ENOMEM;
@@ -477,7 +477,7 @@
 			if (type != FILE_NAME_DOS) {
 				name->len = len;
 				memcpy(name->name, ie->key.file_name.file_name,
-						len * sizeof(uchar_t));
+						len * sizeof(ntfschar));
 			} else
 				name->len = 0;
 			*res = name;
@@ -487,7 +487,7 @@
 		 * know which way in the B+tree we have to go.
 		 */
 		rc = ntfs_collate_names(uname, uname_len,
-				(uchar_t*)&ie->key.file_name.file_name,
+				(ntfschar*)&ie->key.file_name.file_name,
 				ie->key.file_name.file_name_length, 1,
 				IGNORE_CASE, vol->upcase, vol->upcase_len);
 		/*
@@ -506,7 +506,7 @@
 		 * collation.
 		 */
 		rc = ntfs_collate_names(uname, uname_len,
-				(uchar_t*)&ie->key.file_name.file_name,
+				(ntfschar*)&ie->key.file_name.file_name,
 				ie->key.file_name.file_name_length, 1,
 				CASE_SENSITIVE, vol->upcase, vol->upcase_len);
 		if (rc == -1)
@@ -607,7 +607,7 @@
  *
  * Note, @uname_len does not include the (optional) terminating NULL character.
  */
-u64 ntfs_lookup_inode_by_name(ntfs_inode *dir_ni, const uchar_t *uname,
+u64 ntfs_lookup_inode_by_name(ntfs_inode *dir_ni, const ntfschar *uname,
 		const int uname_len)
 {
 	ntfs_volume *vol = dir_ni->vol;
@@ -689,7 +689,7 @@
 		 * convert it to cpu format before returning.
 		 */
 		if (ntfs_are_names_equal(uname, uname_len,
-				(uchar_t*)&ie->key.file_name.file_name,
+				(ntfschar*)&ie->key.file_name.file_name,
 				ie->key.file_name.file_name_length, ic,
 				vol->upcase, vol->upcase_len)) {
 found_it:
@@ -703,7 +703,7 @@
 		 * know which way in the B+tree we have to go.
 		 */
 		rc = ntfs_collate_names(uname, uname_len,
-				(uchar_t*)&ie->key.file_name.file_name,
+				(ntfschar*)&ie->key.file_name.file_name,
 				ie->key.file_name.file_name_length, 1,
 				IGNORE_CASE, vol->upcase, vol->upcase_len);
 		/*
@@ -722,7 +722,7 @@
 		 * collation.
 		 */
 		rc = ntfs_collate_names(uname, uname_len,
-				(uchar_t*)&ie->key.file_name.file_name,
+				(ntfschar*)&ie->key.file_name.file_name,
 				ie->key.file_name.file_name_length, 1,
 				CASE_SENSITIVE, vol->upcase, vol->upcase_len);
 		if (rc == -1)
@@ -875,7 +875,7 @@
 		 * convert it to cpu format before returning.
 		 */
 		if (ntfs_are_names_equal(uname, uname_len,
-				(uchar_t*)&ie->key.file_name.file_name,
+				(ntfschar*)&ie->key.file_name.file_name,
 				ie->key.file_name.file_name_length, ic,
 				vol->upcase, vol->upcase_len)) {
 found_it2:
@@ -888,7 +888,7 @@
 		 * know which way in the B+tree we have to go.
 		 */
 		rc = ntfs_collate_names(uname, uname_len,
-				(uchar_t*)&ie->key.file_name.file_name,
+				(ntfschar*)&ie->key.file_name.file_name,
 				ie->key.file_name.file_name_length, 1,
 				IGNORE_CASE, vol->upcase, vol->upcase_len);
 		/*
@@ -907,7 +907,7 @@
 		 * collation.
 		 */
 		rc = ntfs_collate_names(uname, uname_len,
-				(uchar_t*)&ie->key.file_name.file_name,
+				(ntfschar*)&ie->key.file_name.file_name,
 				ie->key.file_name.file_name_length, 1,
 				CASE_SENSITIVE, vol->upcase, vol->upcase_len);
 		if (rc == -1)
@@ -1027,7 +1027,7 @@
 		ntfs_debug("Skipping system file.");
 		return 0;
 	}
-	name_len = ntfs_ucstonls(vol, (uchar_t*)&ie->key.file_name.file_name,
+	name_len = ntfs_ucstonls(vol, (ntfschar*)&ie->key.file_name.file_name,
 			ie->key.file_name.file_name_length, &name,
 			NTFS_MAX_NAME_LEN * NLS_MAX_CHARSET_SIZE + 1);
 	if (name_len <= 0) {
diff -Nru a/fs/ntfs/dir.h b/fs/ntfs/dir.h
--- a/fs/ntfs/dir.h	Sun May 16 01:18:35 2004
+++ b/fs/ntfs/dir.h	Sun May 16 01:18:35 2004
@@ -2,20 +2,20 @@
  * dir.h - Defines for directory handling in NTFS Linux kernel driver. Part of
  *	   the Linux-NTFS project.
  *
- * Copyright (c) 2002 Anton Altaparmakov.
+ * Copyright (c) 2002-2004 Anton Altaparmakov
  *
  * This program/include file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as published
  * by the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *
- * This program/include file is distributed in the hope that it will be 
- * useful, but WITHOUT ANY WARRANTY; without even the implied warranty 
+ * This program/include file is distributed in the hope that it will be
+ * useful, but WITHOUT ANY WARRANTY; without even the implied warranty
  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program (in the main directory of the Linux-NTFS 
+ * along with this program (in the main directory of the Linux-NTFS
  * distribution in the file COPYING); if not, write to the Free Software
  * Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
@@ -34,14 +34,13 @@
 	MFT_REF mref;
 	FILE_NAME_TYPE_FLAGS type;
 	u8 len;
-	uchar_t name[0];
+	ntfschar name[0];
 } __attribute__ ((__packed__)) ntfs_name;
 
 /* The little endian Unicode string $I30 as a global constant. */
-extern uchar_t I30[5];
+extern ntfschar I30[5];
 
 extern MFT_REF ntfs_lookup_inode_by_name(ntfs_inode *dir_ni,
-		const uchar_t *uname, const int uname_len, ntfs_name **res);
+		const ntfschar *uname, const int uname_len, ntfs_name **res);
 
 #endif /* _LINUX_NTFS_FS_DIR_H */
-
diff -Nru a/fs/ntfs/endian.h b/fs/ntfs/endian.h
--- a/fs/ntfs/endian.h	Sun May 16 01:18:36 2004
+++ b/fs/ntfs/endian.h	Sun May 16 01:18:36 2004
@@ -2,20 +2,20 @@
  * endian.h - Defines for endianness handling in NTFS Linux kernel driver.
  *	      Part of the Linux-NTFS project.
  *
- * Copyright (c) 2001 Anton Altaparmakov.
+ * Copyright (c) 2001-2004 Anton Altaparmakov
  *
  * This program/include file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as published
  * by the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *
- * This program/include file is distributed in the hope that it will be 
- * useful, but WITHOUT ANY WARRANTY; without even the implied warranty 
+ * This program/include file is distributed in the hope that it will be
+ * useful, but WITHOUT ANY WARRANTY; without even the implied warranty
  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program (in the main directory of the Linux-NTFS 
+ * along with this program (in the main directory of the Linux-NTFS
  * distribution in the file COPYING); if not, write to the Free Software
  * Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
@@ -45,4 +45,3 @@
 #define cpu_to_sle64p(x)	((s64)__cpu_to_le64(*(s64*)(x)))
 
 #endif /* _LINUX_NTFS_ENDIAN_H */
-
diff -Nru a/fs/ntfs/file.c b/fs/ntfs/file.c
--- a/fs/ntfs/file.c	Sun May 16 01:18:36 2004
+++ b/fs/ntfs/file.c	Sun May 16 01:18:36 2004
@@ -1,20 +1,20 @@
 /*
  * file.c - NTFS kernel file operations. Part of the Linux-NTFS project.
  *
- * Copyright (c) 2001 Anton Altaparmakov.
+ * Copyright (c) 2001-2004 Anton Altaparmakov
  *
  * This program/include file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as published
  * by the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *
- * This program/include file is distributed in the hope that it will be 
- * useful, but WITHOUT ANY WARRANTY; without even the implied warranty 
+ * This program/include file is distributed in the hope that it will be
+ * useful, but WITHOUT ANY WARRANTY; without even the implied warranty
  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program (in the main directory of the Linux-NTFS 
+ * along with this program (in the main directory of the Linux-NTFS
  * distribution in the file COPYING); if not, write to the Free Software
  * Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
@@ -73,4 +73,3 @@
 struct file_operations ntfs_empty_file_ops = {};
 
 struct inode_operations ntfs_empty_inode_ops = {};
-
diff -Nru a/fs/ntfs/inode.c b/fs/ntfs/inode.c
--- a/fs/ntfs/inode.c	Sun May 16 01:18:36 2004
+++ b/fs/ntfs/inode.c	Sun May 16 01:18:36 2004
@@ -66,7 +66,7 @@
 		if (ni->name_len != na->name_len)
 			return 0;
 		if (na->name_len && memcmp(ni->name, na->name,
-				na->name_len * sizeof(uchar_t)))
+				na->name_len * sizeof(ntfschar)))
 			return 0;
 	}
 	/* Match! */
@@ -121,8 +121,8 @@
 	if (na->name && na->name_len && na->name != I30) {
 		unsigned int i;
 
-		i = na->name_len * sizeof(uchar_t);
-		ni->name = (uchar_t*)kmalloc(i + sizeof(uchar_t), GFP_ATOMIC);
+		i = na->name_len * sizeof(ntfschar);
+		ni->name = (ntfschar*)kmalloc(i + sizeof(ntfschar), GFP_ATOMIC);
 		if (!ni->name)
 			return -ENOMEM;
 		memcpy(ni->name, na->name, i);
@@ -206,7 +206,7 @@
  * obtained from PTR_ERR().
  */
 struct inode *ntfs_attr_iget(struct inode *base_vi, ATTR_TYPES type,
-		uchar_t *name, u32 name_len)
+		ntfschar *name, u32 name_len)
 {
 	struct inode *vi;
 	ntfs_attr na;
@@ -1310,7 +1310,7 @@
  * This should work but there are two possible pit falls (see inline comments
  * below), but only time will tell if they are real pits or just smoke...
  */
-void ntfs_read_inode_mount(struct inode *vi)
+int ntfs_read_inode_mount(struct inode *vi)
 {
 	VCN next_vcn, last_vcn, highest_vcn;
 	s64 block;
@@ -1326,12 +1326,6 @@
 
 	ntfs_debug("Entering.");
 
-	if (vi->i_ino != FILE_MFT) {
-		ntfs_error(sb, "Called for inode 0x%lx but only inode %d "
-				"allowed.", vi->i_ino, FILE_MFT);
-		goto err_out;
-	}
-
 	/* Initialize the ntfs specific part of @vi. */
 	ntfs_init_big_inode(vi);
 
@@ -1616,13 +1610,7 @@
 			/*
 			 * We have got the first extent of the run_list for
 			 * $MFT which means it is now relatively safe to call
-			 * the normal ntfs_read_inode() function. Thus, take
-			 * us out of the calling chain. Also we need to do this
-			 * now because we need ntfs_read_inode() in place to
-			 * get at subsequent extents.
-			 */
-			sb->s_op = &ntfs_sops;
-			/*
+			 * the normal ntfs_read_inode() function.
 			 * Complete reading the inode, this will actually
 			 * re-read the mft record for $MFT, this time entering
 			 * it into the page cache with which we complete the
@@ -1649,8 +1637,8 @@
 						"sourceforge.net");
 				put_attr_search_ctx(ctx);
 				/* Revert to the safe super operations. */
-				sb->s_op = &ntfs_mount_sops;
-				goto out_now;
+				ntfs_free(m);
+				return -1;
 			}
 			/*
 			 * Re-initialize some specifics about $MFT's inode as
@@ -1699,20 +1687,19 @@
 	}
 	put_attr_search_ctx(ctx);
 	ntfs_debug("Done.");
-out_now:
 	ntfs_free(m);
-	return;
+	return 0;
+
 em_put_err_out:
 	ntfs_error(sb, "Couldn't find first extent of $DATA attribute in "
 			"attribute list. $MFT is corrupt. Run chkdsk.");
 put_err_out:
 	put_attr_search_ctx(ctx);
 err_out:
-	/* Make sure we revert to the safe super operations. */
-	sb->s_op = &ntfs_mount_sops;
 	ntfs_error(sb, "Failed. Marking inode as bad.");
 	make_bad_inode(vi);
-	goto out_now;
+	ntfs_free(m);
+	return -1;
 }
 
 /**
diff -Nru a/fs/ntfs/inode.h b/fs/ntfs/inode.h
--- a/fs/ntfs/inode.h	Sun May 16 01:18:36 2004
+++ b/fs/ntfs/inode.h	Sun May 16 01:18:36 2004
@@ -54,7 +54,7 @@
 	 * name_len = 4 for directories.
 	 */
 	ATTR_TYPES type;	/* Attribute type of this fake inode. */
-	uchar_t *name;		/* Attribute name of this fake inode. */
+	ntfschar *name;		/* Attribute name of this fake inode. */
 	u32 name_len;		/* Attribute name length of this fake inode. */
 	run_list run_list;	/* If state has the NI_NonResident bit set,
 				   the run list of the unnamed data attribute
@@ -248,7 +248,7 @@
  */
 typedef struct {
 	unsigned long mft_no;
-	uchar_t *name;
+	ntfschar *name;
 	u32 name_len;
 	ATTR_TYPES type;
 } ntfs_attr;
@@ -259,7 +259,7 @@
 
 extern struct inode *ntfs_iget(struct super_block *sb, unsigned long mft_no);
 extern struct inode *ntfs_attr_iget(struct inode *base_vi, ATTR_TYPES type,
-		uchar_t *name, u32 name_len);
+		ntfschar *name, u32 name_len);
 
 extern struct inode *ntfs_alloc_big_inode(struct super_block *sb);
 extern void ntfs_destroy_big_inode(struct inode *inode);
@@ -269,7 +269,7 @@
 		unsigned long mft_no);
 extern void ntfs_clear_extent_inode(ntfs_inode *ni);
 
-extern void ntfs_read_inode_mount(struct inode *vi);
+extern int ntfs_read_inode_mount(struct inode *vi);
 
 extern void ntfs_put_inode(struct inode *vi);
 
diff -Nru a/fs/ntfs/layout.h b/fs/ntfs/layout.h
--- a/fs/ntfs/layout.h	Sun May 16 01:18:35 2004
+++ b/fs/ntfs/layout.h	Sun May 16 01:18:35 2004
@@ -504,7 +504,7 @@
  */
 typedef struct {
 /*hex ofs*/
-/*  0*/	uchar_t name[0x40];		/* Unicode name of the attribute. Zero
+/*  0*/	ntfschar name[0x40];		/* Unicode name of the attribute. Zero
 					   terminated. */
 /* 80*/	ATTR_TYPES type;		/* Type of the attribute. */
 /* 84*/	u32 display_rule;		/* Default display rule.
@@ -910,7 +910,7 @@
 				   attribute value. */
 /* 24*/	u16 instance;		/* If lowest_vcn = 0, the instance of the
 				   attribute being referenced; otherwise 0. */
-/* 26*/	uchar_t name[0];	/* Use when creating only. When reading use
+/* 26*/	ntfschar name[0];	/* Use when creating only. When reading use
 				   name_offset to determine the location of the
 				   name. */
 /* sizeof() = 26 + (attribute_name_length * 2) bytes */
@@ -994,7 +994,7 @@
 /* 40*/	u8 file_name_length;			/* Length of file name in
 						   (Unicode) characters. */
 /* 41*/	FILE_NAME_TYPE_FLAGS file_name_type;	/* Namespace of the file name.*/
-/* 42*/	uchar_t file_name[0];			/* File name in Unicode. */
+/* 42*/	ntfschar file_name[0];			/* File name in Unicode. */
 } __attribute__ ((__packed__)) FILE_NAME_ATTR;
 
 /*
@@ -1090,7 +1090,7 @@
 	SECURITY_NULL_RID		  = 0,	/* S-1-0 */
 	SECURITY_WORLD_RID		  = 0,	/* S-1-1 */
 	SECURITY_LOCAL_RID		  = 0,	/* S-1-2 */
-	
+
 	SECURITY_CREATOR_OWNER_RID	  = 0,	/* S-1-3 */
 	SECURITY_CREATOR_GROUP_RID	  = 1,	/* S-1-3 */
 
@@ -1110,10 +1110,10 @@
 	SECURITY_AUTHENTICATED_USER_RID	  = 0xb,
 	SECURITY_RESTRICTED_CODE_RID	  = 0xc,
 	SECURITY_TERMINAL_SERVER_RID	  = 0xd,
-	
+
 	SECURITY_LOGON_IDS_RID		  = 5,
 	SECURITY_LOGON_IDS_RID_COUNT	  = 3,
-	
+
 	SECURITY_LOCAL_SYSTEM_RID	  = 0x12,
 
 	SECURITY_NT_NON_UNIQUE		  = 0x15,
@@ -1123,12 +1123,12 @@
 	/*
 	 * Well-known domain relative sub-authority values (RIDs).
 	 */
-	
+
 	/* Users. */
 	DOMAIN_USER_RID_ADMIN		  = 0x1f4,
 	DOMAIN_USER_RID_GUEST		  = 0x1f5,
 	DOMAIN_USER_RID_KRBTGT		  = 0x1f6,
-	
+
 	/* Groups. */
 	DOMAIN_GROUP_RID_ADMINS		  = 0x200,
 	DOMAIN_GROUP_RID_USERS		  = 0x201,
@@ -1145,12 +1145,12 @@
 	DOMAIN_ALIAS_RID_USERS		  = 0x221,
 	DOMAIN_ALIAS_RID_GUESTS		  = 0x222,
 	DOMAIN_ALIAS_RID_POWER_USERS	  = 0x223,
-	
+
 	DOMAIN_ALIAS_RID_ACCOUNT_OPS	  = 0x224,
 	DOMAIN_ALIAS_RID_SYSTEM_OPS	  = 0x225,
 	DOMAIN_ALIAS_RID_PRINT_OPS	  = 0x226,
 	DOMAIN_ALIAS_RID_BACKUP_OPS	  = 0x227,
-	
+
 	DOMAIN_ALIAS_RID_REPLICATOR	  = 0x228,
 	DOMAIN_ALIAS_RID_RAS_SERVERS	  = 0x229,
 	DOMAIN_ALIAS_RID_PREW2KCOMPACCESS = 0x22a,
@@ -1258,7 +1258,7 @@
 
 	ACCESS_ALLOWED_COMPOUND_ACE_TYPE= 4,
 	ACCESS_MAX_MS_V3_ACE_TYPE	= 4,
-	
+
 	/* The following are Win2k only. */
 	ACCESS_MIN_MS_OBJECT_ACE_TYPE	= 5,
 	ACCESS_ALLOWED_OBJECT_ACE_TYPE	= 5,
@@ -1325,33 +1325,33 @@
 	 */
 
 	/* Specific rights for files and directories are as follows: */
-	
+
 	/* Right to read data from the file. (FILE) */
 	FILE_READ_DATA			= const_cpu_to_le32(0x00000001),
 	/* Right to list contents of a directory. (DIRECTORY) */
 	FILE_LIST_DIRECTORY		= const_cpu_to_le32(0x00000001),
-	
+
 	/* Right to write data to the file. (FILE) */
 	FILE_WRITE_DATA			= const_cpu_to_le32(0x00000002),
 	/* Right to create a file in the directory. (DIRECTORY) */
 	FILE_ADD_FILE			= const_cpu_to_le32(0x00000002),
-	
+
 	/* Right to append data to the file. (FILE) */
 	FILE_APPEND_DATA		= const_cpu_to_le32(0x00000004),
 	/* Right to create a subdirectory. (DIRECTORY) */
 	FILE_ADD_SUBDIRECTORY		= const_cpu_to_le32(0x00000004),
-	
+
 	/* Right to read extended attributes. (FILE/DIRECTORY) */
 	FILE_READ_EA			= const_cpu_to_le32(0x00000008),
-	
+
 	/* Right to write extended attributes. (FILE/DIRECTORY) */
 	FILE_WRITE_EA			= const_cpu_to_le32(0x00000010),
-	
+
 	/* Right to execute a file. (FILE) */
 	FILE_EXECUTE			= const_cpu_to_le32(0x00000020),
 	/* Right to traverse the directory. (DIRECTORY) */
 	FILE_TRAVERSE			= const_cpu_to_le32(0x00000020),
-	
+
 	/*
 	 * Right to delete a directory and all the files it contains (its
 	 * children), even if the files are read-only. (DIRECTORY)
@@ -1360,10 +1360,10 @@
 
 	/* Right to read file attributes. (FILE/DIRECTORY) */
 	FILE_READ_ATTRIBUTES		= const_cpu_to_le32(0x00000080),
-	
+
 	/* Right to change file attributes. (FILE/DIRECTORY) */
 	FILE_WRITE_ATTRIBUTES		= const_cpu_to_le32(0x00000100),
-	
+
 	/*
 	 * The standard rights (bits 16 to 23). Are independent of the type of
 	 * object being secured.
@@ -1396,15 +1396,15 @@
 	 * The following STANDARD_RIGHTS_* are combinations of the above for
 	 * convenience and are defined by the Win32 API.
 	 */
-	
+
 	/* These are currently defined to READ_CONTROL. */
 	STANDARD_RIGHTS_READ		= const_cpu_to_le32(0x00020000),
 	STANDARD_RIGHTS_WRITE		= const_cpu_to_le32(0x00020000),
 	STANDARD_RIGHTS_EXECUTE		= const_cpu_to_le32(0x00020000),
-	
+
 	/* Combines DELETE, READ_CONTROL, WRITE_DAC, and WRITE_OWNER access. */
 	STANDARD_RIGHTS_REQUIRED	= const_cpu_to_le32(0x000f0000),
-	
+
 	/*
 	 * Combines DELETE, READ_CONTROL, WRITE_DAC, WRITE_OWNER, and
 	 * SYNCHRONIZE access.
@@ -1775,7 +1775,7 @@
  * NOTE: Present only in FILE_Volume.
  */
 typedef struct {
-	uchar_t name[0];		/* The name of the volume in Unicode. */
+	ntfschar name[0];	/* The name of the volume in Unicode. */
 } __attribute__ ((__packed__)) VOLUME_NAME;
 
 /*
@@ -1790,6 +1790,9 @@
 	VOLUME_REPAIR_OBJECT_ID		= const_cpu_to_le16(0x0020),
 	VOLUME_MODIFIED_BY_CHKDSK	= const_cpu_to_le16(0x8000),
 	VOLUME_FLAGS_MASK		= const_cpu_to_le16(0x803f),
+
+	/* To make our life easier when checking if we must mount read-only. */
+	VOLUME_MUST_MOUNT_RO_MASK	= const_cpu_to_le16(0x8037),
 } __attribute__ ((__packed__)) VOLUME_FLAGS;
 
 /*
@@ -1973,7 +1976,7 @@
 
 	QUOTA_FLAG_USER_MASK		= const_cpu_to_le32(0x00000007),
 		/* Bit mask for user quota flags. */
-	
+
 	/* These flags are only present in the quota defaults index entry,
 	   i.e. in the entry where owner_id = QUOTA_DEFAULTS_ID. */
 	QUOTA_FLAG_TRACKING_ENABLED	= const_cpu_to_le32(0x00000010),
@@ -2177,7 +2180,7 @@
 	IO_REPARSE_TAG_IS_ALIAS		= const_cpu_to_le32(0x20000000),
 	IO_REPARSE_TAG_IS_HIGH_LATENCY	= const_cpu_to_le32(0x40000000),
 	IO_REPARSE_TAG_IS_MICROSOFT	= const_cpu_to_le32(0x80000000),
-	
+
 	IO_REPARSE_TAG_RESERVED_ZERO	= const_cpu_to_le32(0x00000000),
 	IO_REPARSE_TAG_RESERVED_ONE	= const_cpu_to_le32(0x00000001),
 	IO_REPARSE_TAG_RESERVED_RANGE	= const_cpu_to_le32(0x00000001),
@@ -2280,4 +2283,3 @@
 } __attribute__ ((__packed__)) LOGGED_UTILITY_STREAM, EFS_ATTR;
 
 #endif /* _LINUX_NTFS_LAYOUT_H */
-
diff -Nru a/fs/ntfs/logfile.c b/fs/ntfs/logfile.c
--- a/fs/ntfs/logfile.c	Sun May 16 01:18:34 2004
+++ b/fs/ntfs/logfile.c	Sun May 16 01:18:34 2004
@@ -1,7 +1,7 @@
 /*
  * logfile.c - NTFS kernel journal handling. Part of the Linux-NTFS project.
  *
- * Copyright (c) 2002-2004 Anton Altaparmakov.
+ * Copyright (c) 2002-2004 Anton Altaparmakov
  *
  * This program/include file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as published
@@ -25,6 +25,7 @@
 #include <linux/fs.h>
 #include <linux/highmem.h>
 #include <linux/buffer_head.h>
+#include <linux/bitops.h>
 
 #include "logfile.h"
 #include "volume.h"
@@ -455,7 +456,11 @@
 	else
 		log_page_size = PAGE_CACHE_SIZE;
 	log_page_mask = log_page_size - 1;
-	log_page_bits = ffs(log_page_size) - 1;
+	/*
+	 * Use generic_ffs() instead of ffs() to enable the compiler to
+	 * optimize log_page_size and log_page_bits into constants.
+	 */
+	log_page_bits = generic_ffs(log_page_size) - 1;
 	size &= ~(log_page_size - 1);
 	/*
 	 * Ensure the log file is big enough to store at least the two restart
diff -Nru a/fs/ntfs/logfile.h b/fs/ntfs/logfile.h
--- a/fs/ntfs/logfile.h	Sun May 16 01:18:36 2004
+++ b/fs/ntfs/logfile.h	Sun May 16 01:18:36 2004
@@ -288,7 +288,7 @@
 /* 22*/	u8 reserved[6];		/* Reserved/alignment. */
 /* 28*/	u32 client_name_length; /* Length of client name in bytes.  Should
 				   always be 8. */
-/* 32*/	uchar_t client_name[64];/* Name of the client in Unicode.  Should
+/* 32*/	ntfschar client_name[64];/* Name of the client in Unicode.  Should
 				   always be "NTFS" with the remaining bytes
 				   set to 0. */
 /* sizeof() = 160 (0xa0) bytes */
diff -Nru a/fs/ntfs/malloc.h b/fs/ntfs/malloc.h
--- a/fs/ntfs/malloc.h	Sun May 16 01:18:33 2004
+++ b/fs/ntfs/malloc.h	Sun May 16 01:18:33 2004
@@ -1,7 +1,7 @@
 /*
  * malloc.h - NTFS kernel memory handling. Part of the Linux-NTFS project.
  *
- * Copyright (c) 2001-2004 Anton Altaparmakov.
+ * Copyright (c) 2001-2004 Anton Altaparmakov
  *
  * This program/include file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as published
diff -Nru a/fs/ntfs/mft.c b/fs/ntfs/mft.c
--- a/fs/ntfs/mft.c	Sun May 16 01:18:35 2004
+++ b/fs/ntfs/mft.c	Sun May 16 01:18:35 2004
@@ -1,7 +1,7 @@
 /**
  * mft.c - NTFS kernel mft record operations. Part of the Linux-NTFS project.
  *
- * Copyright (c) 2001-2003 Anton Altaparmakov
+ * Copyright (c) 2001-2004 Anton Altaparmakov
  * Copyright (c) 2002 Richard Russon
  *
  * This program/include file is free software; you can redistribute it and/or
@@ -9,13 +9,13 @@
  * by the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *
- * This program/include file is distributed in the hope that it will be 
- * useful, but WITHOUT ANY WARRANTY; without even the implied warranty 
+ * This program/include file is distributed in the hope that it will be
+ * useful, but WITHOUT ANY WARRANTY; without even the implied warranty
  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program (in the main directory of the Linux-NTFS 
+ * along with this program (in the main directory of the Linux-NTFS
  * distribution in the file COPYING); if not, write to the Free Software
  * Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
@@ -429,4 +429,3 @@
 		ntfs_clear_extent_inode(ni);
 	return m;
 }
-
diff -Nru a/fs/ntfs/mft.h b/fs/ntfs/mft.h
--- a/fs/ntfs/mft.h	Sun May 16 01:18:34 2004
+++ b/fs/ntfs/mft.h	Sun May 16 01:18:34 2004
@@ -2,7 +2,7 @@
  * mft.h - Defines for mft record handling in NTFS Linux kernel driver.
  *	   Part of the Linux-NTFS project.
  *
- * Copyright (c) 2001-2004 Anton Altaparmakov.
+ * Copyright (c) 2001-2004 Anton Altaparmakov
  *
  * This program/include file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as published
@@ -28,8 +28,6 @@
 #include "inode.h"
 
 extern int format_mft_record(ntfs_inode *ni, MFT_RECORD *m);
-//extern int format_mft_record2(struct super_block *vfs_sb,
-//		const unsigned long inum, MFT_RECORD *m);
 
 extern MFT_RECORD *map_mft_record(ntfs_inode *ni);
 extern void unmap_mft_record(ntfs_inode *ni);
diff -Nru a/fs/ntfs/mst.c b/fs/ntfs/mst.c
--- a/fs/ntfs/mst.c	Sun May 16 01:18:35 2004
+++ b/fs/ntfs/mst.c	Sun May 16 01:18:35 2004
@@ -2,7 +2,7 @@
  * mst.c - NTFS multi sector transfer protection handling code. Part of the
  *	   Linux-NTFS project.
  *
- * Copyright (c) 2001-2004 Anton Altaparmakov.
+ * Copyright (c) 2001-2004 Anton Altaparmakov
  *
  * This program/include file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as published
diff -Nru a/fs/ntfs/namei.c b/fs/ntfs/namei.c
--- a/fs/ntfs/namei.c	Sun May 16 01:18:36 2004
+++ b/fs/ntfs/namei.c	Sun May 16 01:18:36 2004
@@ -1,6 +1,6 @@
 /*
  * namei.c - NTFS kernel directory inode operations. Part of the Linux-NTFS
- * 	     project.
+ *	     project.
  *
  * Copyright (c) 2001-2004 Anton Altaparmakov
  *
@@ -9,13 +9,13 @@
  * by the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *
- * This program/include file is distributed in the hope that it will be 
- * useful, but WITHOUT ANY WARRANTY; without even the implied warranty 
+ * This program/include file is distributed in the hope that it will be
+ * useful, but WITHOUT ANY WARRANTY; without even the implied warranty
  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program (in the main directory of the Linux-NTFS 
+ * along with this program (in the main directory of the Linux-NTFS
  * distribution in the file COPYING); if not, write to the Free Software
  * Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
@@ -98,7 +98,7 @@
 {
 	ntfs_volume *vol = NTFS_SB(dir_ino->i_sb);
 	struct inode *dent_inode;
-	uchar_t *uname;
+	ntfschar *uname;
 	ntfs_name *name = NULL;
 	MFT_REF mref;
 	unsigned long dent_ino;
@@ -177,7 +177,7 @@
 	nls_name.name = NULL;
 	if (name->type != FILE_NAME_DOS) {			/* Case 2. */
 		nls_name.len = (unsigned)ntfs_ucstonls(vol,
-				(uchar_t*)&name->name, name->len,
+				(ntfschar*)&name->name, name->len,
 				(unsigned char**)&nls_name.name, 0);
 		kfree(name);
 	} else /* if (name->type == FILE_NAME_DOS) */ {		/* Case 3. */
@@ -221,14 +221,14 @@
 				goto eio_err_out;
 			fn = (FILE_NAME_ATTR*)((u8*)ctx->attr + le16_to_cpu(
 					ctx->attr->data.resident.value_offset));
-			if ((u32)(fn->file_name_length * sizeof(uchar_t) +
+			if ((u32)(fn->file_name_length * sizeof(ntfschar) +
 					sizeof(FILE_NAME_ATTR)) > val_len)
 				goto eio_err_out;
 		} while (fn->file_name_type != FILE_NAME_WIN32);
 
 		/* Convert the found WIN32 name to current NLS code page. */
 		nls_name.len = (unsigned)ntfs_ucstonls(vol,
-				(uchar_t*)&fn->file_name, fn->file_name_length,
+				(ntfschar*)&fn->file_name, fn->file_name_length,
 				(unsigned char**)&nls_name.name, 0);
 
 		put_attr_search_ctx(ctx);
diff -Nru a/fs/ntfs/ntfs.h b/fs/ntfs/ntfs.h
--- a/fs/ntfs/ntfs.h	Sun May 16 01:18:34 2004
+++ b/fs/ntfs/ntfs.h	Sun May 16 01:18:34 2004
@@ -2,8 +2,8 @@
  * ntfs.h - Defines for NTFS Linux kernel driver. Part of the Linux-NTFS
  *	    project.
  *
- * Copyright (c) 2001-2004 Anton Altaparmakov.
- * Copyright (C) 2002 Richard Russon.
+ * Copyright (c) 2001-2004 Anton Altaparmakov
+ * Copyright (C) 2002 Richard Russon
  *
  * This program/include file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as published
@@ -61,8 +61,6 @@
 
 /* The various operations structs defined throughout the driver files. */
 extern struct super_operations ntfs_sops;
-extern struct super_operations ntfs_mount_sops;
-
 extern struct address_space_operations ntfs_aops;
 extern struct address_space_operations ntfs_mft_aops;
 
@@ -75,14 +73,6 @@
 extern struct  file_operations ntfs_empty_file_ops;
 extern struct inode_operations ntfs_empty_inode_ops;
 
-/* Generic macros to convert pointers to values and vice versa. */
-#ifndef p2n
-#define p2n(p)		((ptrdiff_t)((ptrdiff_t*)(p)))
-#endif
-#ifndef n2p
-#define n2p(p)		((ptrdiff_t*)((ptrdiff_t)(p)))
-#endif
-
 /**
  * NTFS_SB - return the ntfs volume given a vfs super block
  * @sb:		VFS super block
@@ -184,32 +174,31 @@
 extern void post_write_mst_fixup(NTFS_RECORD *b);
 
 /* From fs/ntfs/unistr.c */
-extern BOOL ntfs_are_names_equal(const uchar_t *s1, size_t s1_len,
-		const uchar_t *s2, size_t s2_len,
+extern BOOL ntfs_are_names_equal(const ntfschar *s1, size_t s1_len,
+		const ntfschar *s2, size_t s2_len,
 		const IGNORE_CASE_BOOL ic,
-		const uchar_t *upcase, const u32 upcase_size);
-extern int ntfs_collate_names(const uchar_t *name1, const u32 name1_len,
-		const uchar_t *name2, const u32 name2_len,
+		const ntfschar *upcase, const u32 upcase_size);
+extern int ntfs_collate_names(const ntfschar *name1, const u32 name1_len,
+		const ntfschar *name2, const u32 name2_len,
 		const int err_val, const IGNORE_CASE_BOOL ic,
-		const uchar_t *upcase, const u32 upcase_len);
-extern int ntfs_ucsncmp(const uchar_t *s1, const uchar_t *s2, size_t n);
-extern int ntfs_ucsncasecmp(const uchar_t *s1, const uchar_t *s2, size_t n,
-		const uchar_t *upcase, const u32 upcase_size);
-extern void ntfs_upcase_name(uchar_t *name, u32 name_len,
-		const uchar_t *upcase, const u32 upcase_len);
+		const ntfschar *upcase, const u32 upcase_len);
+extern int ntfs_ucsncmp(const ntfschar *s1, const ntfschar *s2, size_t n);
+extern int ntfs_ucsncasecmp(const ntfschar *s1, const ntfschar *s2, size_t n,
+		const ntfschar *upcase, const u32 upcase_size);
+extern void ntfs_upcase_name(ntfschar *name, u32 name_len,
+		const ntfschar *upcase, const u32 upcase_len);
 extern void ntfs_file_upcase_value(FILE_NAME_ATTR *file_name_attr,
-		const uchar_t *upcase, const u32 upcase_len);
+		const ntfschar *upcase, const u32 upcase_len);
 extern int ntfs_file_compare_values(FILE_NAME_ATTR *file_name_attr1,
 		FILE_NAME_ATTR *file_name_attr2,
 		const int err_val, const IGNORE_CASE_BOOL ic,
-		const uchar_t *upcase, const u32 upcase_len);
+		const ntfschar *upcase, const u32 upcase_len);
 extern int ntfs_nlstoucs(const ntfs_volume *vol, const char *ins,
-		const int ins_len, uchar_t **outs);
-extern int ntfs_ucstonls(const ntfs_volume *vol, const uchar_t *ins,
+		const int ins_len, ntfschar **outs);
+extern int ntfs_ucstonls(const ntfs_volume *vol, const ntfschar *ins,
 		const int ins_len, unsigned char **outs, int outs_len);
 
 /* From fs/ntfs/upcase.c */
-extern uchar_t *generate_default_upcase(void);
+extern ntfschar *generate_default_upcase(void);
 
 #endif /* _LINUX_NTFS_H */
-
diff -Nru a/fs/ntfs/super.c b/fs/ntfs/super.c
--- a/fs/ntfs/super.c	Sun May 16 01:18:35 2004
+++ b/fs/ntfs/super.c	Sun May 16 01:18:35 2004
@@ -314,7 +314,9 @@
 #else /* ! NTFS_RW */
 	/*
 	 * For the read-write compiled driver, if we are remounting read-write,
-	 * make sure there aren't any volume errors and empty the lofgile.
+	 * make sure there are no volume errors and that no unsupported volume
+	 * flags are set.  Also, empty the logfile journal as it would become
+	 * stale as soon as something is written to the volume.
 	 */
 	if ((sb->s_flags & MS_RDONLY) && !(*flags & MS_RDONLY)) {
 		static const char *es = ".  Cannot remount read-write.";
@@ -324,6 +326,11 @@
 					es);
 			return -EROFS;
 		}
+		if (vol->vol_flags & VOLUME_MUST_MOUNT_RO_MASK) {
+			ntfs_error(sb, "Volume has unsupported flags set and "
+					"is read-only%s", es);
+			return -EROFS;
+		}
 		if (!ntfs_empty_logfile(vol->logfile_ino)) {
 			ntfs_error(sb, "Failed to empty journal $LogFile%s",
 					es);
@@ -937,12 +944,12 @@
 	}
 	/*
 	 * The upcase size must not be above 64k Unicode characters, must not
-	 * be zero and must be a multiple of sizeof(uchar_t).
+	 * be zero and must be a multiple of sizeof(ntfschar).
 	 */
-	if (!ino->i_size || ino->i_size & (sizeof(uchar_t) - 1) ||
-			ino->i_size > 64ULL * 1024 * sizeof(uchar_t))
+	if (!ino->i_size || ino->i_size & (sizeof(ntfschar) - 1) ||
+			ino->i_size > 64ULL * 1024 * sizeof(ntfschar))
 		goto iput_upcase_failed;
-	vol->upcase = (uchar_t*)ntfs_malloc_nofs(ino->i_size);
+	vol->upcase = (ntfschar*)ntfs_malloc_nofs(ino->i_size);
 	if (!vol->upcase)
 		goto iput_upcase_failed;
 	index = 0;
@@ -965,7 +972,7 @@
 	}
 	vol->upcase_len = ino->i_size >> UCHAR_T_SIZE_BITS;
 	ntfs_debug("Read %llu bytes from $UpCase (expected %u bytes).",
-			ino->i_size, 64 * 1024 * sizeof(uchar_t));
+			ino->i_size, 64 * 1024 * sizeof(ntfschar));
 	iput(ino);
 	down(&ntfs_lock);
 	if (!default_upcase) {
@@ -1133,6 +1140,31 @@
 	printk(KERN_INFO "NTFS volume version %i.%i.\n", vol->major_ver,
 			vol->minor_ver);
 #ifdef NTFS_RW
+	/* Make sure that no unsupported volume flags are set. */
+	if (vol->vol_flags & VOLUME_MUST_MOUNT_RO_MASK) {
+		static const char *es1 = "Volume has unsupported flags set ";
+		static const char *es2 = ".  Run chkdsk and mount in Windows.";
+
+		/* If a read-write mount, convert it to a read-only mount. */
+		if (!(sb->s_flags & MS_RDONLY)) {
+			if (!(vol->on_errors & (ON_ERRORS_REMOUNT_RO |
+					ON_ERRORS_CONTINUE))) {
+				ntfs_error(sb, "%s and neither on_errors="
+						"continue nor on_errors="
+						"remount-ro was specified%s",
+						es1, es2);
+				goto iput_vol_err_out;
+			}
+			sb->s_flags |= MS_RDONLY | MS_NOATIME | MS_NODIRATIME;
+			ntfs_error(sb, "%s.  Mounting read-only%s", es1, es2);
+		} else
+			ntfs_warning(sb, "%s.  Will not be able to remount "
+					"read-write%s", es1, es2);
+		/*
+		 * Do not set NVolErrors() because ntfs_remount() re-checks the
+		 * flags which we need to do in case any flags have changed.
+		 */
+	}
 	/*
 	 * Get the inode for the logfile, check it and determine if the volume
 	 * was shutdown cleanly.
@@ -1240,6 +1272,7 @@
 #ifdef NTFS_RW
 	if (vol->logfile_ino)
 		iput(vol->logfile_ino);
+iput_vol_err_out:
 #endif /* NTFS_RW */
 	iput(vol->vol_ino);
 iput_lcnbmp_err_out:
@@ -1585,19 +1618,6 @@
 }
 
 /**
- * Super operations for mount time when we don't have enough setup to use the
- * proper functions.
- */
-struct super_operations ntfs_mount_sops = {
-	.alloc_inode	= ntfs_alloc_big_inode,	  /* VFS: Allocate new inode. */
-	.destroy_inode	= ntfs_destroy_big_inode, /* VFS: Deallocate inode. */
-	.read_inode	= ntfs_read_inode_mount,  /* VFS: Load inode from disk,
-						     called from iget(). */
-	.clear_inode	= ntfs_clear_big_inode,	  /* VFS: Called when inode is
-						     removed from memory. */
-};
-
-/**
  * The complete super operations.
  */
 struct super_operations ntfs_sops = {
@@ -1814,28 +1834,20 @@
 	 * the inode for $MFT which is sufficient to allow our normal inode
 	 * operations and associated address space operations to function.
 	 */
-	/*
-	 * Poison vol->mft_ino so we know whether iget() called into our
-	 * ntfs_read_inode_mount() method.
-	 */
-#define OGIN	((struct inode*)n2p(le32_to_cpu(0x4e49474f)))	/* OGIN */
-	vol->mft_ino = OGIN;
-	sb->s_op = &ntfs_mount_sops;
-	tmp_ino = iget(vol->sb, FILE_MFT);
-	if (!tmp_ino || tmp_ino != vol->mft_ino || is_bad_inode(tmp_ino)) {
+	sb->s_op = &ntfs_sops;
+	tmp_ino = new_inode(sb);
+	if (!tmp_ino) {
+		if (!silent)
+			ntfs_error(sb, "Failed to load essential metadata.");
+		goto err_out_now;
+	}
+	tmp_ino->i_ino = FILE_MFT;
+	insert_inode_hash(tmp_ino);
+	if (ntfs_read_inode_mount(tmp_ino) < 0) {
 		if (!silent)
 			ntfs_error(sb, "Failed to load essential metadata.");
-		if (tmp_ino && vol->mft_ino == OGIN)
-			ntfs_error(sb, "BUG: iget() did not call "
-					"ntfs_read_inode_mount() method!\n");
-		if (!tmp_ino)
-			goto cond_iput_mft_ino_err_out_now;
 		goto iput_tmp_ino_err_out_now;
 	}
-	/*
-	 * Note: sb->s_op has already been set to &ntfs_sops by our specialized
-	 * ntfs_read_inode_mount() method when it was invoked by iget().
-	 */
 	down(&ntfs_lock);
 	/*
 	 * The current mount is a compression user if the cluster size is
@@ -1931,12 +1943,10 @@
 	up(&ntfs_lock);
 iput_tmp_ino_err_out_now:
 	iput(tmp_ino);
-cond_iput_mft_ino_err_out_now:
-	if (vol->mft_ino && vol->mft_ino != OGIN && vol->mft_ino != tmp_ino) {
+	if (vol->mft_ino && vol->mft_ino != tmp_ino) {
 		iput(vol->mft_ino);
 		vol->mft_ino = NULL;
 	}
-#undef OGIN
 	/*
 	 * This is needed to get ntfs_clear_extent_inode() called for each
 	 * inode we have ever called ntfs_iget()/iput() on, otherwise we A)
@@ -2049,7 +2059,7 @@
 	}
 
 	ntfs_name_cache = kmem_cache_create(ntfs_name_cache_name,
-			(NTFS_MAX_NAME_LEN+1) * sizeof(uchar_t), 0,
+			(NTFS_MAX_NAME_LEN+1) * sizeof(ntfschar), 0,
 			SLAB_HWCACHE_ALIGN, NULL, NULL);
 	if (!ntfs_name_cache) {
 		printk(KERN_CRIT "NTFS: Failed to create %s!\n",
diff -Nru a/fs/ntfs/sysctl.c b/fs/ntfs/sysctl.c
--- a/fs/ntfs/sysctl.c	Sun May 16 01:18:33 2004
+++ b/fs/ntfs/sysctl.c	Sun May 16 01:18:33 2004
@@ -1,22 +1,22 @@
 /*
  * sysctl.c - Code for sysctl handling in NTFS Linux kernel driver. Part of
  *	      the Linux-NTFS project. Adapted from the old NTFS driver,
- *	      Copyright (C) 1997 Martin von Löwis, Régis Duchesne.
+ *	      Copyright (C) 1997 Martin von Löwis, Régis Duchesne
  *
- * Copyright (c) 2002 Anton Altaparmakov.
+ * Copyright (c) 2002-2004 Anton Altaparmakov
  *
  * This program/include file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as published
  * by the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *
- * This program/include file is distributed in the hope that it will be 
- * useful, but WITHOUT ANY WARRANTY; without even the implied warranty 
+ * This program/include file is distributed in the hope that it will be
+ * useful, but WITHOUT ANY WARRANTY; without even the implied warranty
  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program (in the main directory of the Linux-NTFS 
+ * along with this program (in the main directory of the Linux-NTFS
  * distribution in the file COPYING); if not, write to the Free Software
  * Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
@@ -37,7 +37,7 @@
 
 /* Definition of the ntfs sysctl. */
 static ctl_table ntfs_sysctls[] = {
-	{ FS_NTFS, "ntfs-debug", 		/* Binary and text IDs. */
+	{ FS_NTFS, "ntfs-debug",		/* Binary and text IDs. */
 	  &debug_msgs,sizeof(debug_msgs),	/* Data pointer and size. */
 	  0644,	NULL, &proc_dointvec },		/* Mode, child, proc handler. */
 	{ 0 }
@@ -83,4 +83,3 @@
 
 #endif /* CONFIG_SYSCTL */
 #endif /* DEBUG */
-
diff -Nru a/fs/ntfs/sysctl.h b/fs/ntfs/sysctl.h
--- a/fs/ntfs/sysctl.h	Sun May 16 01:18:34 2004
+++ b/fs/ntfs/sysctl.h	Sun May 16 01:18:34 2004
@@ -1,22 +1,22 @@
 /*
  * sysctl.h - Defines for sysctl handling in NTFS Linux kernel driver. Part of
  *	      the Linux-NTFS project. Adapted from the old NTFS driver,
- *	      Copyright (C) 1997 Martin von Löwis, Régis Duchesne.
- * 
- * Copyright (c) 2002 Anton Altaparmakov.
+ *	      Copyright (C) 1997 Martin von Löwis, Régis Duchesne
+ *
+ * Copyright (c) 2002-2004 Anton Altaparmakov
  *
  * This program/include file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as published
  * by the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *
- * This program/include file is distributed in the hope that it will be 
- * useful, but WITHOUT ANY WARRANTY; without even the implied warranty 
+ * This program/include file is distributed in the hope that it will be
+ * useful, but WITHOUT ANY WARRANTY; without even the implied warranty
  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program (in the main directory of the Linux-NTFS 
+ * along with this program (in the main directory of the Linux-NTFS
  * distribution in the file COPYING); if not, write to the Free Software
  * Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
@@ -40,4 +40,3 @@
 
 #endif /* DEBUG && CONFIG_SYSCTL */
 #endif /* _LINUX_NTFS_SYSCTL_H */
-
diff -Nru a/fs/ntfs/time.h b/fs/ntfs/time.h
--- a/fs/ntfs/time.h	Sun May 16 01:18:35 2004
+++ b/fs/ntfs/time.h	Sun May 16 01:18:35 2004
@@ -1,7 +1,7 @@
 /*
  * time.h - NTFS time conversion functions.  Part of the Linux-NTFS project.
  *
- * Copyright (c) 2001-2004 Anton Altaparmakov.
+ * Copyright (c) 2001-2004 Anton Altaparmakov
  *
  * This program/include file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as published
diff -Nru a/fs/ntfs/types.h b/fs/ntfs/types.h
--- a/fs/ntfs/types.h	Sun May 16 01:18:36 2004
+++ b/fs/ntfs/types.h	Sun May 16 01:18:36 2004
@@ -2,7 +2,7 @@
  * types.h - Defines for NTFS Linux kernel driver specific types.
  *	     Part of the Linux-NTFS project.
  *
- * Copyright (c) 2001-2004 Anton Altaparmakov.
+ * Copyright (c) 2001-2004 Anton Altaparmakov
  *
  * This program/include file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as published
@@ -24,7 +24,7 @@
 #define _LINUX_NTFS_TYPES_H
 
 /* 2-byte Unicode character type. */
-typedef u16 uchar_t;
+typedef u16 ntfschar;
 #define UCHAR_T_SIZE_BITS 1
 
 /*
diff -Nru a/fs/ntfs/unistr.c b/fs/ntfs/unistr.c
--- a/fs/ntfs/unistr.c	Sun May 16 01:18:35 2004
+++ b/fs/ntfs/unistr.c	Sun May 16 01:18:35 2004
@@ -8,13 +8,13 @@
  * by the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
  *
- * This program/include file is distributed in the hope that it will be 
- * useful, but WITHOUT ANY WARRANTY; without even the implied warranty 
+ * This program/include file is distributed in the hope that it will be
+ * useful, but WITHOUT ANY WARRANTY; without even the implied warranty
  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program (in the main directory of the Linux-NTFS 
+ * along with this program (in the main directory of the Linux-NTFS
  * distribution in the file COPYING); if not, write to the Free Software
  * Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
@@ -61,10 +61,9 @@
  * identical, or FALSE (0) if they are not identical. If @ic is IGNORE_CASE,
  * the @upcase table is used to performa a case insensitive comparison.
  */
-BOOL ntfs_are_names_equal(const uchar_t *s1, size_t s1_len,
-		     const uchar_t *s2, size_t s2_len,
-		     const IGNORE_CASE_BOOL ic,
-		     const uchar_t *upcase, const u32 upcase_size)
+BOOL ntfs_are_names_equal(const ntfschar *s1, size_t s1_len,
+		const ntfschar *s2, size_t s2_len, const IGNORE_CASE_BOOL ic,
+		const ntfschar *upcase, const u32 upcase_size)
 {
 	if (s1_len != s2_len)
 		return FALSE;
@@ -78,12 +77,12 @@
  * @name1:	first Unicode name to compare
  * @name2:	second Unicode name to compare
  * @err_val:	if @name1 contains an invalid character return this value
- * @ic:         either CASE_SENSITIVE or IGNORE_CASE
+ * @ic:		either CASE_SENSITIVE or IGNORE_CASE
  * @upcase:	upcase table (ignored if @ic is CASE_SENSITIVE)
  * @upcase_len:	upcase table size (ignored if @ic is CASE_SENSITIVE)
  *
  * ntfs_collate_names collates two Unicode names and returns:
- * 
+ *
  *  -1 if the first name collates before the second one,
  *   0 if the names match,
  *   1 if the second name collates before the first one, or
@@ -91,13 +90,13 @@
  *
  * The following characters are considered invalid: '"', '*', '<', '>' and '?'.
  */
-int ntfs_collate_names(const uchar_t *name1, const u32 name1_len,
-		const uchar_t *name2, const u32 name2_len,
+int ntfs_collate_names(const ntfschar *name1, const u32 name1_len,
+		const ntfschar *name2, const u32 name2_len,
 		const int err_val, const IGNORE_CASE_BOOL ic,
-		const uchar_t *upcase, const u32 upcase_len)
+		const ntfschar *upcase, const u32 upcase_len)
 {
 	u32 cnt, min_len;
-	uchar_t c1, c2;
+	ntfschar c1, c2;
 
 	min_len = name1_len;
 	if (name1_len > name2_len)
@@ -138,14 +137,14 @@
  * Compare the first @n characters of the Unicode strings @s1 and @s2,
  * The strings in little endian format and appropriate le16_to_cpu()
  * conversion is performed on non-little endian machines.
- * 
+ *
  * The function returns an integer less than, equal to, or greater than zero
  * if @s1 (or the first @n Unicode characters thereof) is found, respectively,
  * to be less than, to match, or be greater than @s2.
  */
-int ntfs_ucsncmp(const uchar_t *s1, const uchar_t *s2, size_t n)
+int ntfs_ucsncmp(const ntfschar *s1, const ntfschar *s2, size_t n)
 {
-	uchar_t c1, c2;
+	ntfschar c1, c2;
 	size_t i;
 
 	for (i = 0; i < n; ++i) {
@@ -172,17 +171,17 @@
  * Compare the first @n characters of the Unicode strings @s1 and @s2,
  * ignoring case. The strings in little endian format and appropriate
  * le16_to_cpu() conversion is performed on non-little endian machines.
- * 
+ *
  * Each character is uppercased using the @upcase table before the comparison.
  *
  * The function returns an integer less than, equal to, or greater than zero
  * if @s1 (or the first @n Unicode characters thereof) is found, respectively,
  * to be less than, to match, or be greater than @s2.
  */
-int ntfs_ucsncasecmp(const uchar_t *s1, const uchar_t *s2, size_t n,
-		     const uchar_t *upcase, const u32 upcase_size)
+int ntfs_ucsncasecmp(const ntfschar *s1, const ntfschar *s2, size_t n,
+		const ntfschar *upcase, const u32 upcase_size)
 {
-	uchar_t c1, c2;
+	ntfschar c1, c2;
 	size_t i;
 
 	for (i = 0; i < n; ++i) {
@@ -200,11 +199,11 @@
 	return 0;
 }
 
-void ntfs_upcase_name(uchar_t *name, u32 name_len, const uchar_t *upcase,
+void ntfs_upcase_name(ntfschar *name, u32 name_len, const ntfschar *upcase,
 		const u32 upcase_len)
 {
 	u32 i;
-	uchar_t u;
+	ntfschar u;
 
 	for (i = 0; i < name_len; i++)
 		if ((u = le16_to_cpu(name[i])) < upcase_len)
@@ -212,20 +211,20 @@
 }
 
 void ntfs_file_upcase_value(FILE_NAME_ATTR *file_name_attr,
-		const uchar_t *upcase, const u32 upcase_len)
+		const ntfschar *upcase, const u32 upcase_len)
 {
-	ntfs_upcase_name((uchar_t*)&file_name_attr->file_name,
+	ntfs_upcase_name((ntfschar*)&file_name_attr->file_name,
 			file_name_attr->file_name_length, upcase, upcase_len);
 }
 
 int ntfs_file_compare_values(FILE_NAME_ATTR *file_name_attr1,
 		FILE_NAME_ATTR *file_name_attr2,
 		const int err_val, const IGNORE_CASE_BOOL ic,
-		const uchar_t *upcase, const u32 upcase_len)
+		const ntfschar *upcase, const u32 upcase_len)
 {
-	return ntfs_collate_names((uchar_t*)&file_name_attr1->file_name,
+	return ntfs_collate_names((ntfschar*)&file_name_attr1->file_name,
 			file_name_attr1->file_name_length,
-			(uchar_t*)&file_name_attr2->file_name,
+			(ntfschar*)&file_name_attr2->file_name,
 			file_name_attr2->file_name_length,
 			err_val, ic, upcase, upcase_len);
 }
@@ -254,16 +253,16 @@
  * This might look a bit odd due to fast path optimization...
  */
 int ntfs_nlstoucs(const ntfs_volume *vol, const char *ins,
-		const int ins_len, uchar_t **outs)
+		const int ins_len, ntfschar **outs)
 {
 	struct nls_table *nls = vol->nls_map;
-	uchar_t *ucs;
+	ntfschar *ucs;
 	wchar_t wc;
 	int i, o, wc_len;
 
 	/* We don't trust outside sources. */
 	if (ins) {
-		ucs = (uchar_t*)kmem_cache_alloc(ntfs_name_cache, SLAB_NOFS);
+		ucs = (ntfschar*)kmem_cache_alloc(ntfs_name_cache, SLAB_NOFS);
 		if (ucs) {
 			for (i = o = 0; i < ins_len; i += wc_len) {
 				wc_len = nls->char2uni(ins + i, ins_len - i,
@@ -319,7 +318,7 @@
  *
  * This might look a bit odd due to fast path optimization...
  */
-int ntfs_ucstonls(const ntfs_volume *vol, const uchar_t *ins,
+int ntfs_ucstonls(const ntfs_volume *vol, const ntfschar *ins,
 		const int ins_len, unsigned char **outs, int outs_len)
 {
 	struct nls_table *nls = vol->nls_map;
@@ -381,4 +380,3 @@
 	ntfs_error(vol->sb, "Failed to allocate name!");
 	return -ENOMEM;
 }
-
diff -Nru a/fs/ntfs/upcase.c b/fs/ntfs/upcase.c
--- a/fs/ntfs/upcase.c	Sun May 16 01:18:33 2004
+++ b/fs/ntfs/upcase.c	Sun May 16 01:18:33 2004
@@ -26,7 +26,7 @@
 
 #include "ntfs.h"
 
-uchar_t *generate_default_upcase(void)
+ntfschar *generate_default_upcase(void)
 {
 	static const int uc_run_table[][3] = { /* Start, End, Add */
 	{0x0061, 0x007B,  -32}, {0x0451, 0x045D, -80}, {0x1F70, 0x1F72,  74},
@@ -68,12 +68,12 @@
 	};
 
 	int i, r;
-	uchar_t *uc;
+	ntfschar *uc;
 
-	uc = ntfs_malloc_nofs(default_upcase_len * sizeof(uchar_t));
+	uc = ntfs_malloc_nofs(default_upcase_len * sizeof(ntfschar));
 	if (!uc)
 		return uc;
-	memset(uc, 0, default_upcase_len * sizeof(uchar_t));
+	memset(uc, 0, default_upcase_len * sizeof(ntfschar));
 	for (i = 0; i < default_upcase_len; i++)
 		uc[i] = cpu_to_le16(i);
 	for (r = 0; uc_run_table[r][0]; r++)
diff -Nru a/fs/ntfs/volume.h b/fs/ntfs/volume.h
--- a/fs/ntfs/volume.h	Sun May 16 01:18:33 2004
+++ b/fs/ntfs/volume.h	Sun May 16 01:18:33 2004
@@ -2,8 +2,8 @@
  * volume.h - Defines for volume structures in NTFS Linux kernel driver. Part
  *	      of the Linux-NTFS project.
  *
- * Copyright (c) 2001-2004 Anton Altaparmakov.
- * Copyright (c) 2002 Richard Russon.
+ * Copyright (c) 2001-2004 Anton Altaparmakov
+ * Copyright (c) 2002 Richard Russon
  *
  * This program/include file is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as published
@@ -72,7 +72,7 @@
 	u64 serial_no;			/* The volume serial number. */
 	/* Mount specific NTFS information. */
 	u32 upcase_len;			/* Number of entries in upcase[]. */
-	uchar_t *upcase;		/* The upcase table. */
+	ntfschar *upcase;		/* The upcase table. */
 	LCN mft_zone_start;		/* First cluster of the mft zone. */
 	LCN mft_zone_end;		/* First cluster beyond the mft zone. */
 	struct inode *mft_ino;		/* The VFS inode of $MFT. */
diff -Nru a/fs/partitions/msdos.c b/fs/partitions/msdos.c
--- a/fs/partitions/msdos.c	Sun May 16 01:18:35 2004
+++ b/fs/partitions/msdos.c	Sun May 16 01:18:35 2004
@@ -407,8 +407,8 @@
 	 * On the second pass look inside *BSD, Unixware and Solaris partitions.
 	 */
 
-	state->next = 5;
-	for (slot = 1 ; slot <= 4 ; slot++, p++) {
+	state->next = DOS_EXTENDED_PARTITION;
+	for (slot = 1 ; slot < DOS_EXTENDED_PARTITION ; slot++, p++) {
 		u32 start = START_SECT(p)*sector_size;
 		u32 size = NR_SECTS(p)*sector_size;
 		if (!size)
@@ -435,7 +435,7 @@
 
 	/* second pass - output for each on a separate line */
 	p = (struct partition *) (0x1be + data);
-	for (slot = 1 ; slot <= 4 ; slot++, p++) {
+	for (slot = 1 ; slot < DOS_EXTENDED_PARTITION ; slot++, p++) {
 		unsigned char id = SYS_IND(p);
 		int n;
 
diff -Nru a/fs/proc/proc_misc.c b/fs/proc/proc_misc.c
--- a/fs/proc/proc_misc.c	Sun May 16 01:18:33 2004
+++ b/fs/proc/proc_misc.c	Sun May 16 01:18:33 2004
@@ -368,7 +368,7 @@
 	if (wall_to_monotonic.tv_nsec)
 		--jif;
 
-	for_each_cpu(i) {
+	for_each_online_cpu(i) {
 		int j;
 
 		user += kstat_cpu(i).cpustat.user;
@@ -390,7 +390,7 @@
 		(unsigned long long)jiffies_64_to_clock_t(iowait),
 		(unsigned long long)jiffies_64_to_clock_t(irq),
 		(unsigned long long)jiffies_64_to_clock_t(softirq));
-	for_each_cpu(i) {
+	for_each_online_cpu(i) {
 
 		/* Copy values here to work around gcc-2.95.3, gcc-2.96 */
 		user = kstat_cpu(i).cpustat.user;
@@ -631,7 +631,7 @@
 
 		if (get_user(c, buf))
 			return -EFAULT;
-		handle_sysrq(c, NULL, NULL);
+		__handle_sysrq(c, NULL, NULL);
 	}
 	return count;
 }
diff -Nru a/fs/quota_v2.c b/fs/quota_v2.c
--- a/fs/quota_v2.c	Sun May 16 01:18:36 2004
+++ b/fs/quota_v2.c	Sun May 16 01:18:36 2004
@@ -135,7 +135,7 @@
 
 static dqbuf_t getdqbuf(void)
 {
-	dqbuf_t buf = kmalloc(V2_DQBLKSIZE, GFP_KERNEL);
+	dqbuf_t buf = kmalloc(V2_DQBLKSIZE, GFP_NOFS);
 	if (!buf)
 		printk(KERN_WARNING "VFS: Not enough memory for quota buffers.\n");
 	return buf;
diff -Nru a/fs/reiserfs/Makefile b/fs/reiserfs/Makefile
--- a/fs/reiserfs/Makefile	Sun May 16 01:18:37 2004
+++ b/fs/reiserfs/Makefile	Sun May 16 01:18:37 2004
@@ -9,6 +9,18 @@
 		 hashes.o tail_conversion.o journal.o resize.o \
 		 item_ops.o ioctl.o procfs.o
 
+ifeq ($(CONFIG_REISERFS_FS_XATTR),y)
+reiserfs-objs += xattr.o xattr_user.o xattr_trusted.o
+endif
+
+ifeq ($(CONFIG_REISERFS_FS_SECURITY),y)
+reiserfs-objs += xattr_security.o
+endif
+
+ifeq ($(CONFIG_REISERFS_FS_POSIX_ACL),y)
+reiserfs-objs += xattr_acl.o
+endif
+
 # gcc -O2 (the kernel default)  is overaggressive on ppc32 when many inline
 # functions are used.  This causes the compiler to advance the stack
 # pointer out of the available stack space, corrupting kernel space,
diff -Nru a/fs/reiserfs/bitmap.c b/fs/reiserfs/bitmap.c
--- a/fs/reiserfs/bitmap.c	Sun May 16 01:18:35 2004
+++ b/fs/reiserfs/bitmap.c	Sun May 16 01:18:35 2004
@@ -12,6 +12,7 @@
 #include <linux/pagemap.h>
 #include <linux/reiserfs_fs_sb.h>
 #include <linux/reiserfs_fs_i.h>
+#include <linux/quotaops.h>
 
 #define PREALLOCATION_SIZE 9
 
@@ -36,7 +37,7 @@
 
 #define SET_OPTION(optname) \
    do { \
-        reiserfs_warning("reiserfs: option \"%s\" is set\n", #optname); \
+        reiserfs_warning(s, "reiserfs: option \"%s\" is set", #optname); \
         set_bit(_ALLOC_ ## optname , &SB_ALLOC_OPTS(s)); \
     } while(0)
 #define TEST_OPTION(optname, s) \
@@ -59,7 +60,7 @@
     int i, j;
 
     if (block == 0 || block >= SB_BLOCK_COUNT (s)) {
-	reiserfs_warning ("vs-4010: is_reusable: block number is out of range %lu (%u)\n",
+	reiserfs_warning (s, "vs-4010: is_reusable: block number is out of range %lu (%u)",
 			  block, SB_BLOCK_COUNT (s));
 	return 0;
     }
@@ -67,8 +68,8 @@
     /* it can't be one of the bitmap blocks */
     for (i = 0; i < SB_BMAP_NR (s); i ++)
 	if (block == SB_AP_BITMAP (s)[i].bh->b_blocknr) {
-	    reiserfs_warning ("vs: 4020: is_reusable: "
-			      "bitmap block %lu(%u) can't be freed or reused\n",
+	    reiserfs_warning (s, "vs: 4020: is_reusable: "
+			      "bitmap block %lu(%u) can't be freed or reused",
 			      block, SB_BMAP_NR (s));
 	    return 0;
 	}
@@ -76,8 +77,8 @@
     get_bit_address (s, block, &i, &j);
 
     if (i >= SB_BMAP_NR (s)) {
-	reiserfs_warning ("vs-4030: is_reusable: there is no so many bitmap blocks: "
-			  "block=%lu, bitmap_nr=%d\n", block, i);
+	reiserfs_warning (s, "vs-4030: is_reusable: there is no so many bitmap blocks: "
+			  "block=%lu, bitmap_nr=%d", block, i);
 	return 0;
     }
 
@@ -85,16 +86,16 @@
          reiserfs_test_le_bit(j, SB_AP_BITMAP(s)[i].bh->b_data)) ||
 	(bit_value == 1 && 
 	 reiserfs_test_le_bit(j, SB_AP_BITMAP (s)[i].bh->b_data) == 0)) {
-	reiserfs_warning ("vs-4040: is_reusable: corresponding bit of block %lu does not "
-			  "match required value (i==%d, j==%d) test_bit==%d\n",
+	reiserfs_warning (s, "vs-4040: is_reusable: corresponding bit of block %lu does not "
+			  "match required value (i==%d, j==%d) test_bit==%d",
 		block, i, j, reiserfs_test_le_bit (j, SB_AP_BITMAP (s)[i].bh->b_data));
 
 	return 0;
     }
 
     if (bit_value == 0 && block == SB_ROOT_BLOCK (s)) {
-	reiserfs_warning ("vs-4050: is_reusable: this is root block (%u), "
-			  "it must be busy\n", SB_ROOT_BLOCK (s));
+	reiserfs_warning (s, "vs-4050: is_reusable: this is root block (%u), "
+			  "it must be busy", SB_ROOT_BLOCK (s));
 	return 0;
     }
 
@@ -133,7 +134,7 @@
     int end, next;
     int org = *beg;
 
-    RFALSE(bmap_n >= SB_BMAP_NR (s), "Bitmap %d is out of range (0..%d)\n",bmap_n, SB_BMAP_NR (s) - 1);
+    RFALSE(bmap_n >= SB_BMAP_NR (s), "Bitmap %d is out of range (0..%d)",bmap_n, SB_BMAP_NR (s) - 1);
     PROC_INFO_INC( s, scan_bitmap.bmap );
 /* this is unclear and lacks comments, explain how journal bitmaps
    work here for the reader.  Convey a sense of the design here. What
@@ -141,7 +142,7 @@
 /* - I mean `a window of zero bits' as in description of this function - Zam. */
   
     if ( !bi ) {
-	printk("Hey, bitmap info pointer is zero for bitmap %d!\n",bmap_n);
+	reiserfs_warning (s, "NULL bitmap info pointer for bitmap %d", bmap_n);
 	return 0;
     }
     if (buffer_locked (bi->bh)) {
@@ -281,7 +282,8 @@
 }
 
 static void _reiserfs_free_block (struct reiserfs_transaction_handle *th,
-				  b_blocknr_t block)
+				  struct inode *inode, b_blocknr_t block,
+				  int for_unformatted)
 {
     struct super_block * s = th->t_super;
     struct reiserfs_super_block * rs;
@@ -298,8 +300,8 @@
     get_bit_address (s, block, &nr, &offset);
 
     if (nr >= sb_bmap_nr (rs)) {
-	reiserfs_warning ("vs-4075: reiserfs_free_block: "
-			  "block %lu is out of range on %s\n", 
+	reiserfs_warning (s, "vs-4075: reiserfs_free_block: "
+			  "block %lu is out of range on %s",
 			  block, reiserfs_bdevname (s));
 	return;
     }
@@ -308,8 +310,8 @@
 
     /* clear bit for the given block in bit map */
     if (!reiserfs_test_and_clear_le_bit (offset, apbi[nr].bh->b_data)) {
-	reiserfs_warning ("vs-4080: reiserfs_free_block: "
-			  "free_block (%s:%lu)[dev:blocknr]: bit already cleared\n", 
+	reiserfs_warning (s, "vs-4080: reiserfs_free_block: "
+			  "free_block (%s:%lu)[dev:blocknr]: bit already cleared",
 			  reiserfs_bdevname (s), block);
     }
     if (offset < apbi[nr].first_zero_hint) {
@@ -323,11 +325,13 @@
     set_sb_free_blocks( rs, sb_free_blocks(rs) + 1 );
 
     journal_mark_dirty (th, s, sbh);
-  s->s_dirt = 1;
+    if (for_unformatted)
+        DQUOT_FREE_BLOCK_NODIRTY(inode, 1);
 }
 
 void reiserfs_free_block (struct reiserfs_transaction_handle *th, 
-                          b_blocknr_t block)
+			  struct inode *inode, b_blocknr_t block,
+			  int for_unformatted)
 {
     struct super_block * s = th->t_super;
 
@@ -335,42 +339,46 @@
     RFALSE(is_reusable (s, block, 1) == 0, "vs-4071: can not free such block");
     /* mark it before we clear it, just in case */
     journal_mark_freed(th, s, block) ;
-    _reiserfs_free_block(th, block) ;
+    _reiserfs_free_block(th, inode, block, for_unformatted) ;
 }
 
 /* preallocated blocks don't need to be run through journal_mark_freed */
 void reiserfs_free_prealloc_block (struct reiserfs_transaction_handle *th, 
-                          b_blocknr_t block) {
+			  struct inode *inode, b_blocknr_t block) {
     RFALSE(!th->t_super, "vs-4060: trying to free block on nonexistent device");
     RFALSE(is_reusable (th->t_super, block, 1) == 0, "vs-4070: can not free such block");
-    _reiserfs_free_block(th, block) ;
+    _reiserfs_free_block(th, inode, block, 1) ;
 }
 
 static void __discard_prealloc (struct reiserfs_transaction_handle * th,
 				struct reiserfs_inode_info *ei)
 {
     unsigned long save = ei->i_prealloc_block ;
+    int dirty = 0;
+    struct inode *inode = &ei->vfs_inode;
 #ifdef CONFIG_REISERFS_CHECK
     if (ei->i_prealloc_count < 0)
-	reiserfs_warning("zam-4001:%s: inode has negative prealloc blocks count.\n", __FUNCTION__ );
+	reiserfs_warning (th->t_super, "zam-4001:%s: inode has negative prealloc blocks count.", __FUNCTION__ );
 #endif
     while (ei->i_prealloc_count > 0) {
-	reiserfs_free_prealloc_block(th,ei->i_prealloc_block);
+	reiserfs_free_prealloc_block(th, inode, ei->i_prealloc_block);
 	ei->i_prealloc_block++;
 	ei->i_prealloc_count --;
+	dirty = 1;
     }
+    if (dirty)
+    	reiserfs_update_sd(th, inode);
     ei->i_prealloc_block = save;
     list_del_init(&(ei->i_prealloc_list));
 }
 
 /* FIXME: It should be inline function */
 void reiserfs_discard_prealloc (struct reiserfs_transaction_handle *th, 
-				struct inode * inode)
+				struct inode *inode)
 {
     struct reiserfs_inode_info *ei = REISERFS_I(inode);
-    if (ei->i_prealloc_count) {
+    if (ei->i_prealloc_count)
 	__discard_prealloc(th, ei);
-    }
 }
 
 void reiserfs_discard_all_prealloc (struct reiserfs_transaction_handle *th)
@@ -382,7 +390,7 @@
 	ei = list_entry(plist->next, struct reiserfs_inode_info, i_prealloc_list);
 #ifdef CONFIG_REISERFS_CHECK
 	if (!ei->i_prealloc_count) {
-	    reiserfs_warning("zam-4001:%s: inode is in prealloc list but has no preallocated blocks.\n", __FUNCTION__);
+	    reiserfs_warning (th->t_super, "zam-4001:%s: inode is in prealloc list but has no preallocated blocks.", __FUNCTION__);
 	}
 #endif
 	__discard_prealloc(th, ei);
@@ -468,7 +476,8 @@
 	    continue;
 	}
 
-	reiserfs_warning("zam-4001: %s : unknown option - %s\n", __FUNCTION__ , this_char);
+	reiserfs_warning (s, "zam-4001: %s : unknown option - %s",
+			  __FUNCTION__ , this_char);
 	return 1;
       }
   
@@ -508,7 +517,7 @@
 
     path = hint->path;
     bh = get_last_bh(path);
-    RFALSE( !bh, "green-4002: Illegal path specified to get_left_neighbor\n");
+    RFALSE( !bh, "green-4002: Illegal path specified to get_left_neighbor");
     ih = get_ih(path);
     pos_in_item = path->pos_in_item;
     item = get_item (path);
@@ -772,6 +781,24 @@
     int nr_allocated = 0;
 
     determine_prealloc_size(hint);
+    if (!hint->formatted_node) {
+        int quota_ret;
+#ifdef REISERQUOTA_DEBUG
+	reiserfs_debug (s, "reiserquota: allocating %d blocks id=%u", amount_needed, hint->inode->i_uid);
+#endif
+	quota_ret = DQUOT_ALLOC_BLOCK_NODIRTY(hint->inode, amount_needed);
+	if (quota_ret)    /* Quota exceeded? */
+	    return QUOTA_EXCEEDED;
+	if (hint->preallocate && hint->prealloc_size ) {
+#ifdef REISERQUOTA_DEBUG
+	    reiserfs_debug (s, "reiserquota: allocating (prealloc) %d blocks id=%u", hint->prealloc_size, hint->inode->i_uid);
+#endif
+	    quota_ret = DQUOT_PREALLOC_BLOCK_NODIRTY(hint->inode, hint->prealloc_size);
+	    if (quota_ret)
+		hint->preallocate=hint->prealloc_size=0;
+	}
+    }
+
     while((nr_allocated
 	  += allocate_without_wrapping_disk(hint, new_blocknrs + nr_allocated, start, finish,
 					  amount_needed - nr_allocated, hint->prealloc_size))
@@ -779,8 +806,14 @@
 
 	/* not all blocks were successfully allocated yet*/
 	if (second_pass) {	/* it was a second pass; we must free all blocks */
+	    if (!hint->formatted_node) {
+#ifdef REISERQUOTA_DEBUG
+		reiserfs_debug (s, "reiserquota: freeing (nospace) %d blocks id=%u", amount_needed + hint->prealloc_size - nr_allocated, hint->inode->i_uid);
+#endif
+		DQUOT_FREE_BLOCK_NODIRTY(hint->inode, amount_needed + hint->prealloc_size - nr_allocated);     /* Free not allocated blocks */
+	    }
 	    while (nr_allocated --)
-		reiserfs_free_block(hint->th, new_blocknrs[nr_allocated]);
+		reiserfs_free_block(hint->th, hint->inode, new_blocknrs[nr_allocated], !hint->formatted_node);
 
 	    return NO_DISK_SPACE;
 	} else {		/* refine search parameters for next pass */
@@ -789,7 +822,19 @@
 	    start = 0;
 	    continue;
 	}
-      }
+    }
+    if ( !hint->formatted_node &&
+         amount_needed + hint->prealloc_size >
+	 nr_allocated + REISERFS_I(hint->inode)->i_prealloc_count) {
+    /* Some of preallocation blocks were not allocated */
+#ifdef REISERQUOTA_DEBUG
+	reiserfs_debug (s, "reiserquota: freeing (failed prealloc) %d blocks id=%u", amount_needed + hint->prealloc_size - nr_allocated - INODE_INFO(hint->inode)->i_prealloc_count, hint->inode->i_uid);
+#endif
+	DQUOT_FREE_BLOCK_NODIRTY(hint->inode, amount_needed +
+	                         hint->prealloc_size - nr_allocated -
+				 REISERFS_I(hint->inode)->i_prealloc_count);
+    }
+
     return CARRY_ON;
 }
 
@@ -858,7 +903,7 @@
 
     if (ret != CARRY_ON) {
 	while (amount_needed ++ < initial_amount_needed) {
-	    reiserfs_free_block(hint->th, *(--new_blocknrs));
+	    reiserfs_free_block(hint->th, hint->inode, *(--new_blocknrs), 1);
 	}
     }
     return ret;
diff -Nru a/fs/reiserfs/dir.c b/fs/reiserfs/dir.c
--- a/fs/reiserfs/dir.c	Sun May 16 01:18:35 2004
+++ b/fs/reiserfs/dir.c	Sun May 16 01:18:35 2004
@@ -54,7 +54,7 @@
 
     reiserfs_write_lock(inode->i_sb);
 
-    reiserfs_check_lock_depth("readdir") ;
+    reiserfs_check_lock_depth(inode->i_sb, "readdir") ;
 
     /* form key for search the next directory entry using f_pos field of
        file structure */
@@ -62,7 +62,7 @@
 		  TYPE_DIRENTRY, 3);
     next_pos = cpu_key_k_offset (&pos_key);
 
-    /*  reiserfs_warning ("reiserfs_readdir 1: f_pos = %Ld\n", filp->f_pos);*/
+    /*  reiserfs_warning (inode->i_sb, "reiserfs_readdir 1: f_pos = %Ld", filp->f_pos);*/
 
     while (1) {
     research:
@@ -115,6 +115,17 @@
 		    /* too big to send back to VFS */
 		    continue ;
 		}
+
+                /* Ignore the .reiserfs_priv entry */
+                if (reiserfs_xattrs (inode->i_sb) &&
+                    !old_format_only(inode->i_sb) &&
+                    filp->f_dentry == inode->i_sb->s_root &&
+                    REISERFS_SB(inode->i_sb)->priv_root &&
+                    REISERFS_SB(inode->i_sb)->priv_root->d_inode &&
+                    deh_objectid(deh) == le32_to_cpu (INODE_PKEY(REISERFS_SB(inode->i_sb)->priv_root->d_inode)->k_objectid)) {
+                  continue;
+                }
+
 		d_off = deh_offset (deh);
 		filp->f_pos = d_off ;
 		d_ino = deh_objectid (deh);
diff -Nru a/fs/reiserfs/do_balan.c b/fs/reiserfs/do_balan.c
--- a/fs/reiserfs/do_balan.c	Sun May 16 01:18:33 2004
+++ b/fs/reiserfs/do_balan.c	Sun May 16 01:18:33 2004
@@ -83,7 +83,7 @@
     struct item_head * ih;
 
     RFALSE( tb->FR[0] && B_LEVEL (tb->FR[0]) != DISK_LEAF_NODE_LEVEL + 1,
-	    "vs- 12000: level: wrong FR %z\n", tb->FR[0]);
+	    "vs- 12000: level: wrong FR %z", tb->FR[0]);
     RFALSE( tb->blknum[0] > 1,
 	    "PAP-12005: tb->blknum == %d, can not be > 1", tb->blknum[0]);
     RFALSE( ! tb->blknum[0] && ! PATH_H_PPARENT(tb->tb_path, 0),
@@ -1056,7 +1056,7 @@
 
 	RFALSE (!buffer_journaled (S_new [i]) || buffer_journal_dirty (S_new [i]) ||
 		buffer_dirty (S_new [i]),
-		"PAP-12247: S_new[%d] : (%b)\n", i, S_new[i]);
+		"PAP-12247: S_new[%d] : (%b)", i, S_new[i]);
     }
 
     /* if the affected item was not wholly shifted then we perform all necessary operations on that part or whole of the
@@ -1215,14 +1215,14 @@
     int i;
 
     if (buffer_dirty (bh))
-      printk ("store_thrown deals with dirty buffer\n");
+      reiserfs_warning (tb->tb_sb, "store_thrown deals with dirty buffer");
     for (i = 0; i < sizeof (tb->thrown)/sizeof (tb->thrown[0]); i ++)
 	if (!tb->thrown[i]) {
 	    tb->thrown[i] = bh;
 	    get_bh(bh) ; /* free_thrown puts this */
 	    return;
 	}
-    reiserfs_warning ("store_thrown: too many thrown buffers\n");
+    reiserfs_warning (tb->tb_sb, "store_thrown: too many thrown buffers");
 }
 
 static void free_thrown(struct tree_balance *tb) {
@@ -1232,9 +1232,11 @@
 	if (tb->thrown[i]) {
 	    blocknr = tb->thrown[i]->b_blocknr ;
 	    if (buffer_dirty (tb->thrown[i]))
-	      printk ("free_thrown deals with dirty buffer %d\n", blocknr);
+	      reiserfs_warning (tb->tb_sb,
+				"free_thrown deals with dirty buffer %d",
+				blocknr);
 	    brelse(tb->thrown[i]) ; /* incremented in store_thrown */
-	    reiserfs_free_block (tb->transaction_handle, blocknr);
+	    reiserfs_free_block (tb->transaction_handle, NULL, blocknr, 0);
 	}
     }
 }
@@ -1247,10 +1249,6 @@
     set_blkh_nr_item( blkh, 0 );
     
     clear_buffer_dirty(bh);
-    /* reiserfs_free_block is no longer schedule safe 
-    reiserfs_free_block (tb->transaction_handle, tb->tb_sb, bh->b_blocknr);
-    */
-
     store_thrown (tb, bh);
 }
 
@@ -1345,7 +1343,8 @@
 {
   if ( (!reiserfs_buffer_prepared(bh) && buffer_locked (bh)) ||
         !B_IS_IN_TREE (bh) ) {
-    reiserfs_warning ("vs-12339: locked_or_not_in_tree: %s (%b)\n", which, bh);
+    reiserfs_warning (NULL, "vs-12339: locked_or_not_in_tree: %s (%b)",
+                      which, bh);
     return 1;
   } 
   return 0;
@@ -1409,9 +1408,9 @@
 		    dc_size(B_N_CHILD (PATH_H_PBUFFER(tb->tb_path,1),
 			PATH_H_POSITION (tb->tb_path, 1))));
 	print_cur_tb ("12223");
-	reiserfs_warning(
+	reiserfs_warning (tb->tb_sb,
 	    "B_FREE_SPACE (PATH_H_PBUFFER(tb->tb_path,0)) = %d; "
-    	    "MAX_CHILD_SIZE (%d) - dc_size( %y, %d ) [%d] = %d\n",
+    	    "MAX_CHILD_SIZE (%d) - dc_size( %y, %d ) [%d] = %d",
 	    left,
 	    MAX_CHILD_SIZE (PATH_H_PBUFFER(tb->tb_path,0)),
 	    PATH_H_PBUFFER(tb->tb_path,1),
@@ -1568,7 +1567,8 @@
     }
     /* if we have no real work to do  */
     if ( ! tb->insert_size[0] ) {
-	reiserfs_warning ("PAP-12350: do_balance: insert_size == 0, mode == %c",
+	reiserfs_warning (tb->tb_sb,
+			  "PAP-12350: do_balance: insert_size == 0, mode == %c",
 			  flag);
 	unfix_nodes(tb);
 	return;
diff -Nru a/fs/reiserfs/file.c b/fs/reiserfs/file.c
--- a/fs/reiserfs/file.c	Sun May 16 01:18:33 2004
+++ b/fs/reiserfs/file.c	Sun May 16 01:18:33 2004
@@ -5,12 +5,15 @@
 
 #include <linux/time.h>
 #include <linux/reiserfs_fs.h>
+#include <linux/reiserfs_acl.h>
+#include <linux/reiserfs_xattr.h>
 #include <linux/smp_lock.h>
 #include <asm/uaccess.h>
 #include <linux/pagemap.h>
 #include <linux/writeback.h>
 #include <linux/blkdev.h>
 #include <linux/buffer_head.h>
+#include <linux/quotaops.h>
 
 /*
 ** We pack the tails of files on file close, not at the time they are written.
@@ -97,51 +100,6 @@
   return ( n_err < 0 ) ? -EIO : 0;
 }
 
-static int reiserfs_setattr(struct dentry *dentry, struct iattr *attr) {
-    struct inode *inode = dentry->d_inode ;
-    int error ;
-    reiserfs_write_lock(inode->i_sb);
-    if (attr->ia_valid & ATTR_SIZE) {
-	/* version 2 items will be caught by the s_maxbytes check
-	** done for us in vmtruncate
-	*/
-	if (get_inode_item_key_version(inode) == KEY_FORMAT_3_5 &&
-	    attr->ia_size > MAX_NON_LFS) {
-	    error = -EFBIG ;
-	    goto out;
-	}
-	/* fill in hole pointers in the expanding truncate case. */
-        if (attr->ia_size > inode->i_size) {
-	    error = generic_cont_expand(inode, attr->ia_size) ;
-	    if (REISERFS_I(inode)->i_prealloc_count > 0) {
-		struct reiserfs_transaction_handle th ;
-		/* we're changing at most 2 bitmaps, inode + super */
-		journal_begin(&th, inode->i_sb, 4) ;
-		reiserfs_discard_prealloc (&th, inode);
-		journal_end(&th, inode->i_sb, 4) ;
-	    }
-	    if (error)
-	        goto out;
-	}
-    }
-
-    if ((((attr->ia_valid & ATTR_UID) && (attr->ia_uid & ~0xffff)) ||
-	 ((attr->ia_valid & ATTR_GID) && (attr->ia_gid & ~0xffff))) &&
-	(get_inode_sd_version (inode) == STAT_DATA_V1)) {
-		/* stat data of format v3.5 has 16 bit uid and gid */
-	    error = -EINVAL;
-	    goto out;	
-	}
-
-    error = inode_change_ok(inode, attr) ;
-    if (!error)
-        inode_setattr(inode, attr) ;
-
-out:
-    reiserfs_write_unlock(inode->i_sb);
-    return error ;
-}
-
 /* I really do not want to play with memory shortage right now, so
    to simplify the code, we are not going to write more than this much pages at
    a time. This still should considerably improve performance compared to 4k
@@ -317,7 +275,7 @@
 		    /* Ok, there is existing indirect item already. Need to append it */
 		    /* Calculate position past inserted item */
 		    make_cpu_key( &key, inode, le_key_k_offset( get_inode_item_key_version(inode), &(ih->ih_key)) + op_bytes_number(ih, inode->i_sb->s_blocksize), TYPE_INDIRECT, 3);
-		    res = reiserfs_paste_into_item( th, &path, &key, (char *)zeros, UNFM_P_SIZE*to_paste);
+		    res = reiserfs_paste_into_item( th, &path, &key, inode, (char *)zeros, UNFM_P_SIZE*to_paste);
 		    if ( res ) {
 			kfree(zeros);
 			goto error_exit_free_blocks;
@@ -340,14 +298,15 @@
 		    if ( res != ITEM_NOT_FOUND ) {
 			/* item should not exist, otherwise we have error */
 			if ( res != -ENOSPC ) {
-			    reiserfs_warning ("green-9008: search_by_key (%K) returned %d\n",
-					       &key, res);
+			    reiserfs_warning (inode->i_sb,
+				"green-9008: search_by_key (%K) returned %d",
+					      &key, res);
 			}
 			res = -EIO;
 		        kfree(zeros);
 			goto error_exit_free_blocks;
 		    }
-		    res = reiserfs_insert_item( th, &path, &key, &ins_ih, (char *)zeros);
+		    res = reiserfs_insert_item( th, &path, &key, &ins_ih, inode, (char *)zeros);
 		} else {
 		    reiserfs_panic(inode->i_sb, "green-9011: Unexpected key type %K\n", &key);
 		}
@@ -464,7 +423,7 @@
 	    // position. We do not need to recalculate path as it should
 	    // already point to correct place.
 	    make_cpu_key( &key, inode, le_key_k_offset( get_inode_item_key_version(inode), &(ih->ih_key)) + op_bytes_number(ih, inode->i_sb->s_blocksize), TYPE_INDIRECT, 3);
-	    res = reiserfs_paste_into_item( th, &path, &key, (char *)(allocated_blocks+curr_block), UNFM_P_SIZE*(blocks_to_allocate-curr_block));
+	    res = reiserfs_paste_into_item( th, &path, &key, inode, (char *)(allocated_blocks+curr_block), UNFM_P_SIZE*(blocks_to_allocate-curr_block));
 	    if ( res ) {
 		goto error_exit_free_blocks;
 	    }
@@ -488,14 +447,15 @@
 		/* Well, if we have found such item already, or some error
 		   occured, we need to warn user and return error */
 		if ( res != -ENOSPC ) {
-		    reiserfs_warning ("green-9009: search_by_key (%K) returned %d\n",
-			              &key, res);
+		    reiserfs_warning (inode->i_sb,
+				      "green-9009: search_by_key (%K) "
+				      "returned %d", &key, res);
 		}
 		res = -EIO;
 		goto error_exit_free_blocks;
 	    }
 	    /* Insert item into the tree with the data as its body */
-	    res = reiserfs_insert_item( th, &path, &key, &ins_ih, (char *)(allocated_blocks+curr_block));
+	    res = reiserfs_insert_item( th, &path, &key, &ins_ih, inode, (char *)(allocated_blocks+curr_block));
 	} else {
 	    reiserfs_panic(inode->i_sb, "green-9010: unexpected item type for key %K\n",&key);
 	}
@@ -505,7 +465,6 @@
     // unless we return an error, they are also responsible for logging
     // the inode.
     //
-    inode->i_blocks += blocks_to_allocate << (inode->i_blkbits - 9);
     pathrelse(&path);
     reiserfs_write_unlock(inode->i_sb);
 
@@ -551,7 +510,7 @@
     pathrelse(&path);
     // free blocks
     for( i = 0; i < blocks_to_allocate; i++ )
-	reiserfs_free_block(th, le32_to_cpu(allocated_blocks[i]));
+	reiserfs_free_block(th, inode, le32_to_cpu(allocated_blocks[i]), 1);
 
 error_exit:
     reiserfs_update_sd(th, inode); // update any changes we made to blk count
@@ -842,7 +801,9 @@
 
 
     if ( num_pages < 1 ) {
-	reiserfs_warning("green-9001: reiserfs_prepare_file_region_for_write called with zero number of pages to process\n");
+	reiserfs_warning (inode->i_sb,
+			  "green-9001: reiserfs_prepare_file_region_for_write "
+			  "called with zero number of pages to process");
 	return -EFAULT;
     }
 
@@ -1321,6 +1282,11 @@
 struct  inode_operations reiserfs_file_inode_operations = {
     .truncate	= reiserfs_vfs_truncate_file,
     .setattr    = reiserfs_setattr,
+    .setxattr   = reiserfs_setxattr,
+    .getxattr   = reiserfs_getxattr,
+    .listxattr  = reiserfs_listxattr,
+    .removexattr = reiserfs_removexattr,
+    .permission = reiserfs_permission,
 };
 
 
diff -Nru a/fs/reiserfs/fix_node.c b/fs/reiserfs/fix_node.c
--- a/fs/reiserfs/fix_node.c	Sun May 16 01:18:34 2004
+++ b/fs/reiserfs/fix_node.c	Sun May 16 01:18:34 2004
@@ -483,7 +483,8 @@
 	snum012[needed_nodes - 1 + 3] = units;
 
 	if (needed_nodes > 2)
-	    reiserfs_warning ("vs-8111: get_num_ver: split_item_position is out of boundary\n");
+	    reiserfs_warning (tb->tb_sb, "vs-8111: get_num_ver: "
+			      "split_item_position is out of boundary");
 	snum012[needed_nodes - 1] ++;
 	split_item_positions[needed_nodes - 1] = i;
 	needed_nodes ++;
@@ -510,7 +511,8 @@
 	snum012[4] = op_unit_num (&vn->vn_vi[split_item_num]) - snum012[4] - bytes_to_r - bytes_to_l - bytes_to_S1new;
 
 	if (vn->vn_vi[split_item_num].vi_index != TYPE_DIRENTRY)
-	    reiserfs_warning ("vs-8115: get_num_ver: not directory item\n");
+	    reiserfs_warning (tb->tb_sb, "vs-8115: get_num_ver: not "
+			      "directory item");
     }
 
     /* now we know S2bytes, calculate S1bytes */
@@ -795,8 +797,9 @@
   else /* If we have enough already then there is nothing to do. */
     return CARRY_ON;
 
-  if ( reiserfs_new_form_blocknrs (p_s_tb, a_n_blocknrs,
-                                   n_amount_needed) == NO_DISK_SPACE )
+  /* No need to check quota - is not allocated for blocks used for formatted nodes */
+  if (reiserfs_new_form_blocknrs (p_s_tb, a_n_blocknrs,
+                                   n_amount_needed) == NO_DISK_SPACE)
     return NO_DISK_SPACE;
 
   /* for each blocknumber we just got, get a buffer and stick it on FEB */
@@ -1973,11 +1976,12 @@
     if (vp) {
 	REISERFS_SB(s)->s_kmallocs += size;
 	if (REISERFS_SB(s)->s_kmallocs > malloced + 200000) {
-	    reiserfs_warning ("vs-8301: reiserfs_kmalloc: allocated memory %d\n", REISERFS_SB(s)->s_kmallocs);
+	    reiserfs_warning (s,
+			      "vs-8301: reiserfs_kmalloc: allocated memory %d",
+			      REISERFS_SB(s)->s_kmallocs);
 	    malloced = REISERFS_SB(s)->s_kmallocs;
 	}
     }
-/*printk ("malloc : size %d, allocated %d\n", size, REISERFS_SB(s)->s_kmallocs);*/
     return vp;
 }
 
@@ -1987,7 +1991,8 @@
   
     REISERFS_SB(s)->s_kmallocs -= size;
     if (REISERFS_SB(s)->s_kmallocs < 0)
-	reiserfs_warning ("vs-8302: reiserfs_kfree: allocated memory %d\n", REISERFS_SB(s)->s_kmallocs);
+	reiserfs_warning (s, "vs-8302: reiserfs_kfree: allocated memory %d",
+			  REISERFS_SB(s)->s_kmallocs);
 
 }
 #endif
@@ -2047,8 +2052,9 @@
 	    buf = reiserfs_kmalloc(size, GFP_NOFS, tb->tb_sb);
 	    if ( !buf ) {
 #ifdef CONFIG_REISERFS_CHECK
-		reiserfs_warning ("vs-8345: get_mem_for_virtual_node: "
-				  "kmalloc failed. reiserfs kmalloced %d bytes\n",
+		reiserfs_warning (tb->tb_sb,
+				  "vs-8345: get_mem_for_virtual_node: "
+				  "kmalloc failed. reiserfs kmalloced %d bytes",
 				  REISERFS_SB(tb->tb_sb)->s_kmallocs);
 #endif
 		tb->vn_buf_size = 0;
@@ -2210,7 +2216,10 @@
 #ifdef CONFIG_REISERFS_CHECK
 	    repeat_counter++;
 	    if ( (repeat_counter % 10000) == 0) {
-		reiserfs_warning ("wait_tb_buffers_until_released(): too many iterations waiting for buffer to unlock (%b)\n", locked);
+		reiserfs_warning (p_s_tb->tb_sb,
+				  "wait_tb_buffers_until_released(): too many "
+				  "iterations waiting for buffer to unlock "
+				  "(%b)", locked);
 
 		/* Don't loop forever.  Try to recover from possible error. */
 
@@ -2323,8 +2332,7 @@
     case M_CUT:
 	if ( n_item_num < 0 || n_item_num >= B_NR_ITEMS(p_s_tbS0) ) {
 	    print_block (p_s_tbS0, 0, -1, -1);
-	    printk("mode = %c insert_size = %d\n", n_op_mode, p_s_tb->insert_size[0]);
-	    reiserfs_panic(p_s_tb->tb_sb,"PAP-8335: fix_nodes: Incorrect item number(%d)", n_item_num);
+	    reiserfs_panic(p_s_tb->tb_sb,"PAP-8335: fix_nodes: Incorrect item number(%d); mode = %c insert_size = %d\n", n_item_num, n_op_mode, p_s_tb->insert_size[0]);
 	}
 	break;
     default:
@@ -2492,7 +2500,7 @@
 	    /* de-allocated block which was not used by balancing and
                bforget about buffer for it */
 	    brelse (tb->FEB[i]);
-	    reiserfs_free_block (tb->transaction_handle, blocknr);
+	    reiserfs_free_block (tb->transaction_handle, NULL, blocknr, 0);
 	}
 	if (tb->used[i]) {
 	    /* release used as new nodes including a new root */
diff -Nru a/fs/reiserfs/inode.c b/fs/reiserfs/inode.c
--- a/fs/reiserfs/inode.c	Sun May 16 01:18:34 2004
+++ b/fs/reiserfs/inode.c	Sun May 16 01:18:34 2004
@@ -4,7 +4,10 @@
 
 #include <linux/config.h>
 #include <linux/time.h>
+#include <linux/fs.h>
 #include <linux/reiserfs_fs.h>
+#include <linux/reiserfs_acl.h>
+#include <linux/reiserfs_xattr.h>
 #include <linux/smp_lock.h>
 #include <linux/pagemap.h>
 #include <linux/highmem.h>
@@ -13,6 +16,7 @@
 #include <linux/buffer_head.h>
 #include <linux/mpage.h>
 #include <linux/writeback.h>
+#include <linux/quotaops.h>
 
 extern int reiserfs_default_io_size; /* default io size devuned in super.c */
 
@@ -36,10 +40,13 @@
   
     reiserfs_write_lock(inode->i_sb);
 
+    DQUOT_FREE_INODE(inode);
     /* The = 0 happens when we abort creating a new inode for some reason like lack of space.. */
     if (!(inode->i_state & I_NEW) && INODE_PKEY(inode)->k_objectid != 0) { /* also handles bad_inode case */
 	down (&inode->i_sem); 
 
+	reiserfs_delete_xattrs (inode);
+
 	journal_begin(&th, inode->i_sb, jbegin_count) ;
 	reiserfs_update_inode_transaction(inode) ;
 
@@ -642,7 +649,7 @@
 
 	repeat = _allocate_block(th, block, inode, &allocated_block_nr, &path, create);
 
-	if (repeat == NO_DISK_SPACE) {
+	if (repeat == NO_DISK_SPACE || repeat == QUOTA_EXCEEDED) {
 	    /* restart the transaction to give the journal a chance to free
 	    ** some blocks.  releases the path, so we have to go back to
 	    ** research if we succeed on the second try
@@ -651,10 +658,13 @@
 	    restart_transaction(th, inode, &path) ;
 	    repeat = _allocate_block(th, block, inode, &allocated_block_nr, NULL, create);
 
-	    if (repeat != NO_DISK_SPACE) {
+	    if (repeat != NO_DISK_SPACE && repeat != QUOTA_EXCEEDED) {
 		goto research ;
 	    }
-	    retval = -ENOSPC;
+	    if (repeat == QUOTA_EXCEEDED)
+		retval = -EDQUOT;
+	    else
+		retval = -ENOSPC;
 	    goto failure;
 	}
 
@@ -682,7 +692,6 @@
 	    put_block_num(item, pos_in_item, allocated_block_nr) ;
             unfm_ptr = allocated_block_nr;
 	    journal_mark_dirty (th, inode->i_sb, bh);
-	    inode->i_blocks += (inode->i_sb->s_blocksize / 512) ;
 	    reiserfs_update_sd(th, inode) ;
 	}
 	set_block_dev_mapped(bh_result, unfm_ptr, inode);
@@ -729,13 +738,11 @@
 	    set_cpu_key_k_offset (&tmp_key, 1);
 	    PATH_LAST_POSITION(&path) ++;
 
-	    retval = reiserfs_insert_item (th, &path, &tmp_key, &tmp_ih, (char *)&unp);
+	    retval = reiserfs_insert_item (th, &path, &tmp_key, &tmp_ih, inode, (char *)&unp);
 	    if (retval) {
-		reiserfs_free_block (th, allocated_block_nr);
-		goto failure; // retval == -ENOSPC or -EIO or -EEXIST
+		reiserfs_free_block (th, inode, allocated_block_nr, 1);
+		goto failure; // retval == -ENOSPC, -EDQUOT or -EIO or -EEXIST
 	    }
-	    if (unp)
-		inode->i_blocks += inode->i_sb->s_blocksize / 512;
 	    //mark_tail_converted (inode);
 	} else if (is_direct_le_ih (ih)) {
 	    /* direct item has to be converted */
@@ -767,13 +774,13 @@
 		retval = convert_tail_for_hole(inode, bh_result, tail_offset) ;
 		if (retval) {
 		    if ( retval != -ENOSPC )
-			printk("clm-6004: convert tail failed inode %lu, error %d\n", inode->i_ino, retval) ;
+			reiserfs_warning (inode->i_sb, "clm-6004: convert tail failed inode %lu, error %d", inode->i_ino, retval) ;
 		    if (allocated_block_nr) {
 			/* the bitmap, the super, and the stat data == 3 */
 			if (!th)
 			    th = reiserfs_persistent_transaction(inode->i_sb,3);
 			if (th)
-			    reiserfs_free_block (th, allocated_block_nr);
+			    reiserfs_free_block (th,inode,allocated_block_nr,1);
 		    }
 		    goto failure ;
 		}
@@ -782,7 +789,7 @@
 	    retval = direct2indirect (th, inode, &path, unbh, tail_offset);
 	    if (retval) {
 		reiserfs_unmap_buffer(unbh);
-		reiserfs_free_block (th, allocated_block_nr);
+		reiserfs_free_block (th, inode, allocated_block_nr, 1);
 		goto failure;
 	    }
 	    /* it is important the set_buffer_uptodate is done after
@@ -815,9 +822,6 @@
 		 */
 		mark_buffer_dirty(unbh) ;
 	    }
-
-	    //inode->i_blocks += inode->i_sb->s_blocksize / 512;
-	    //mark_tail_converted (inode);
 	} else {
 	    /* append indirect item with holes if needed, when appending
 	       pointer to 'block'-th block use block, which is already
@@ -865,24 +869,21 @@
 		   only have space for one block */
 		blocks_needed=max_to_insert?max_to_insert:1;
 	    }
-	    retval = reiserfs_paste_into_item (th, &path, &tmp_key, (char *)un, UNFM_P_SIZE * blocks_needed);
+	    retval = reiserfs_paste_into_item (th, &path, &tmp_key, inode, (char *)un, UNFM_P_SIZE * blocks_needed);
 
 	    if (blocks_needed != 1)
 		kfree(un);
 
 	    if (retval) {
-		reiserfs_free_block (th, allocated_block_nr);
+		reiserfs_free_block (th, inode, allocated_block_nr, 1);
 		goto failure;
 	    }
-	    if (done) {
-		inode->i_blocks += inode->i_sb->s_blocksize / 512;
-	    } else {
+	    if (!done) {
 		/* We need to mark new file size in case this function will be
 		   interrupted/aborted later on. And we may do this only for
 		   holes. */
 		inode->i_size += inode->i_sb->s_blocksize * blocks_needed;
 	    }
-	    //mark_tail_converted (inode);
 	}
 
 	if (done == 1)
@@ -910,11 +911,11 @@
 	    goto failure;
 	}
 	if (retval == POSITION_FOUND) {
-	    reiserfs_warning ("vs-825: reiserfs_get_block: "
-			      "%K should not be found\n", &key);
+	    reiserfs_warning (inode->i_sb, "vs-825: reiserfs_get_block: "
+			      "%K should not be found", &key);
 	    retval = -EEXIST;
 	    if (allocated_block_nr)
-	        reiserfs_free_block (th, allocated_block_nr);
+	        reiserfs_free_block (th, inode, allocated_block_nr, 1);
 	    pathrelse(&path) ;
 	    goto failure;
 	}
@@ -944,6 +945,58 @@
     return mpage_readpages(mapping, pages, nr_pages, reiserfs_get_block);
 }
 
+/* Compute real number of used bytes by file
+ * Following three functions can go away when we'll have enough space in stat item
+ */
+static int real_space_diff(struct inode *inode, int sd_size)
+{
+    int bytes;
+    loff_t blocksize = inode->i_sb->s_blocksize ;
+
+    if (S_ISLNK(inode->i_mode) || S_ISDIR(inode->i_mode))
+        return sd_size ;
+
+    /* End of file is also in full block with indirect reference, so round
+    ** up to the next block.
+    **
+    ** there is just no way to know if the tail is actually packed
+    ** on the file, so we have to assume it isn't.  When we pack the
+    ** tail, we add 4 bytes to pretend there really is an unformatted
+    ** node pointer
+    */
+    bytes = ((inode->i_size + (blocksize-1)) >> inode->i_sb->s_blocksize_bits) * UNFM_P_SIZE + sd_size;
+    return bytes ;
+}
+
+static inline loff_t to_real_used_space(struct inode *inode, ulong blocks,
+                                        int sd_size)
+{
+    if (S_ISLNK(inode->i_mode) || S_ISDIR(inode->i_mode)) {
+        return inode->i_size + (loff_t)(real_space_diff(inode, sd_size)) ;
+    }
+    return ((loff_t)real_space_diff(inode, sd_size)) + (((loff_t)blocks) << 9);
+}
+
+/* Compute number of blocks used by file in ReiserFS counting */
+static inline ulong to_fake_used_blocks(struct inode *inode, int sd_size)
+{
+    loff_t bytes = inode_get_bytes(inode) ;
+    loff_t real_space = real_space_diff(inode, sd_size) ;
+
+    /* keeps fsck and non-quota versions of reiserfs happy */
+    if (S_ISLNK(inode->i_mode) || S_ISDIR(inode->i_mode)) {
+        bytes += (loff_t)511 ;
+    }
+
+    /* files from before the quota patch might i_blocks such that
+    ** bytes < real_space.  Deal with that here to prevent it from
+    ** going negative.
+    */
+    if (bytes < real_space)
+        return 0 ;
+    return (bytes - real_space) >> 9;
+}
+
 //
 // BAD: new directories have stat data of new type and all other items
 // of old type. Version stored in the inode says about body items, so
@@ -972,6 +1025,9 @@
     REISERFS_I(inode)->i_prealloc_count = 0;
     REISERFS_I(inode)->i_trans_id = 0;
     REISERFS_I(inode)->i_jl = NULL;
+    REISERFS_I(inode)->i_acl_access = NULL;
+    REISERFS_I(inode)->i_acl_default = NULL;
+    init_rwsem (&REISERFS_I(inode)->xattr_sem);
 
     if (stat_data_v1 (ih)) {
 	struct stat_data_v1 * sd = (struct stat_data_v1 *)B_I_PITEM (bh, ih);
@@ -1006,6 +1062,14 @@
 
         rdev = sd_v1_rdev(sd);
 	REISERFS_I(inode)->i_first_direct_byte = sd_v1_first_direct_byte(sd);
+	/* an early bug in the quota code can give us an odd number for the
+	** block count.  This is incorrect, fix it here.
+	*/
+	if (inode->i_blocks & 1) {
+	    inode->i_blocks++ ;
+	}
+	inode_set_bytes(inode, to_real_used_space(inode, inode->i_blocks,
+	                                          SD_V1_SIZE));
 	/* nopack is initially zero for v1 objects. For v2 objects,
 	   nopack is initialised from sd_attrs */
 	REISERFS_I(inode)->i_flags &= ~i_nopack_mask;
@@ -1038,6 +1102,8 @@
 	    set_inode_item_key_version (inode, KEY_FORMAT_3_6);
 	REISERFS_I(inode)->i_first_direct_byte = 0;
 	set_inode_sd_version (inode, STAT_DATA_V2);
+	inode_set_bytes(inode, to_real_used_space(inode, inode->i_blocks,
+	                                          SD_V2_SIZE));
 	/* read persistent inode attributes from sd and initalise
 	   generic inode flags from them */
 	REISERFS_I(inode)->i_attrs = sd_v2_attrs( sd );
@@ -1053,17 +1119,18 @@
 	inode->i_op = &reiserfs_dir_inode_operations;
 	inode->i_fop = &reiserfs_dir_operations;
     } else if (S_ISLNK (inode->i_mode)) {
-	inode->i_op = &page_symlink_inode_operations;
+	inode->i_op = &reiserfs_symlink_inode_operations;
 	inode->i_mapping->a_ops = &reiserfs_address_space_operations;
     } else {
 	inode->i_blocks = 0;
+	inode->i_op = &reiserfs_special_inode_operations;
 	init_special_inode(inode, inode->i_mode, new_decode_dev(rdev));
     }
 }
 
 
 // update new stat data with inode fields
-static void inode2sd (void * sd, struct inode * inode)
+static void inode2sd (void * sd, struct inode * inode, loff_t size)
 {
     struct stat_data * sd_v2 = (struct stat_data *)sd;
     __u16 flags;
@@ -1071,12 +1138,12 @@
     set_sd_v2_mode(sd_v2, inode->i_mode );
     set_sd_v2_nlink(sd_v2, inode->i_nlink );
     set_sd_v2_uid(sd_v2, inode->i_uid );
-    set_sd_v2_size(sd_v2, inode->i_size );
+    set_sd_v2_size(sd_v2, size );
     set_sd_v2_gid(sd_v2, inode->i_gid );
     set_sd_v2_mtime(sd_v2, inode->i_mtime.tv_sec );
     set_sd_v2_atime(sd_v2, inode->i_atime.tv_sec );
     set_sd_v2_ctime(sd_v2, inode->i_ctime.tv_sec );
-    set_sd_v2_blocks(sd_v2, inode->i_blocks );
+    set_sd_v2_blocks(sd_v2, to_fake_used_blocks(inode, SD_V2_SIZE));
     if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode))
 	set_sd_v2_rdev(sd_v2, new_encode_dev(inode->i_rdev));
     else
@@ -1088,7 +1155,7 @@
 
 
 // used to copy inode's fields to old stat data
-static void inode2sd_v1 (void * sd, struct inode * inode)
+static void inode2sd_v1 (void * sd, struct inode * inode, loff_t size)
 {
     struct stat_data_v1 * sd_v1 = (struct stat_data_v1 *)sd;
 
@@ -1096,7 +1163,7 @@
     set_sd_v1_uid(sd_v1, inode->i_uid );
     set_sd_v1_gid(sd_v1, inode->i_gid );
     set_sd_v1_nlink(sd_v1, inode->i_nlink );
-    set_sd_v1_size(sd_v1, inode->i_size );
+    set_sd_v1_size(sd_v1, size );
     set_sd_v1_atime(sd_v1, inode->i_atime.tv_sec );
     set_sd_v1_ctime(sd_v1, inode->i_ctime.tv_sec );
     set_sd_v1_mtime(sd_v1, inode->i_mtime.tv_sec );
@@ -1104,7 +1171,7 @@
     if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode))
         set_sd_v1_rdev(sd_v1, new_encode_dev(inode->i_rdev));
     else
-        set_sd_v1_blocks(sd_v1, inode->i_blocks );
+        set_sd_v1_blocks(sd_v1, to_fake_used_blocks(inode, SD_V1_SIZE));
 
     // Sigh. i_first_direct_byte is back
     set_sd_v1_first_direct_byte(sd_v1, REISERFS_I(inode)->i_first_direct_byte);
@@ -1114,7 +1181,8 @@
 /* NOTE, you must prepare the buffer head before sending it here,
 ** and then log it after the call
 */
-static void update_stat_data (struct path * path, struct inode * inode)
+static void update_stat_data (struct path * path, struct inode * inode,
+                              loff_t size)
 {
     struct buffer_head * bh;
     struct item_head * ih;
@@ -1128,17 +1196,17 @@
   
     if (stat_data_v1 (ih)) {
 	// path points to old stat data
-	inode2sd_v1 (B_I_PITEM (bh, ih), inode);
+	inode2sd_v1 (B_I_PITEM (bh, ih), inode, size);
     } else {
-	inode2sd (B_I_PITEM (bh, ih), inode);
+	inode2sd (B_I_PITEM (bh, ih), inode, size);
     }
 
     return;
 }
 
 
-void reiserfs_update_sd (struct reiserfs_transaction_handle *th, 
-			 struct inode * inode)
+void reiserfs_update_sd_size (struct reiserfs_transaction_handle *th,
+			      struct inode * inode, loff_t size)
 {
     struct cpu_key key;
     INITIALIZE_PATH(path);
@@ -1154,7 +1222,7 @@
 	/* look for the object's stat data */
 	retval = search_item (inode->i_sb, &key, &path);
 	if (retval == IO_ERROR) {
-	    reiserfs_warning ("vs-13050: reiserfs_update_sd: "
+	    reiserfs_warning (inode->i_sb, "vs-13050: reiserfs_update_sd: "
 			      "i/o failure occurred trying to update %K stat data",
 			      &key);
 	    return;
@@ -1163,11 +1231,11 @@
 	    pos = PATH_LAST_POSITION (&path);
 	    pathrelse(&path) ;
 	    if (inode->i_nlink == 0) {
-		/*printk ("vs-13050: reiserfs_update_sd: i_nlink == 0, stat data not found\n");*/
+		/*reiserfs_warning (inode->i_sb, "vs-13050: reiserfs_update_sd: i_nlink == 0, stat data not found");*/
 		return;
 	    }
-	    reiserfs_warning ("vs-13060: reiserfs_update_sd: "
-			      "stat data of object %k (nlink == %d) not found (pos %d)\n", 
+	    reiserfs_warning (inode->i_sb, "vs-13060: reiserfs_update_sd: "
+			      "stat data of object %k (nlink == %d) not found (pos %d)",
 			      INODE_PKEY (inode), inode->i_nlink, pos);
 	    reiserfs_check_path(&path) ;
 	    return;
@@ -1188,7 +1256,7 @@
 	}
 	break;
     }
-    update_stat_data (&path, inode);
+    update_stat_data (&path, inode, size);
     journal_mark_dirty(th, th->t_super, bh) ; 
     pathrelse (&path);
     return;
@@ -1240,9 +1308,9 @@
     /* look for the object's stat data */
     retval = search_item (inode->i_sb, &key, &path_to_sd);
     if (retval == IO_ERROR) {
-	reiserfs_warning ("vs-13070: reiserfs_read_locked_inode: "
-                    "i/o failure occurred trying to find stat data of %K\n",
-                    &key);
+	reiserfs_warning (inode->i_sb, "vs-13070: reiserfs_read_locked_inode: "
+			  "i/o failure occurred trying to find stat data of %K",
+			  &key);
 	reiserfs_make_bad_inode(inode) ;
 	return;
     }
@@ -1272,9 +1340,10 @@
        during mount (fs/reiserfs/super.c:finish_unfinished()). */
     if( ( inode -> i_nlink == 0 ) && 
 	! REISERFS_SB(inode -> i_sb) -> s_is_unlinked_ok ) {
-	    reiserfs_warning( "vs-13075: reiserfs_read_locked_inode: "
+	    reiserfs_warning (inode->i_sb,
+			      "vs-13075: reiserfs_read_locked_inode: "
 			      "dead inode read from disk %K. "
-			      "This is likely to be race with knfsd. Ignore\n", 
+			      "This is likely to be race with knfsd. Ignore",
 			      &key );
 	    reiserfs_make_bad_inode( inode );
     }
@@ -1377,7 +1446,7 @@
      */
     if (fhtype > len) {
 	    if (fhtype != 6 || len != 5)
-		    printk(KERN_WARNING "nfsd/reiserfs, fhtype=%d, len=%d - odd\n",
+		    reiserfs_warning (sb, "nfsd/reiserfs, fhtype=%d, len=%d - odd",
 			   fhtype, len);
 	    fhtype = 5;
     }
@@ -1440,8 +1509,9 @@
     int jbegin_count = 1 ;
 
     if (inode->i_sb->s_flags & MS_RDONLY) {
-        reiserfs_warning("clm-6005: writing inode %lu on readonly FS\n", 
-	                  inode->i_ino) ;
+        reiserfs_warning (inode->i_sb,
+			  "clm-6005: writing inode %lu on readonly FS",
+			  inode->i_ino) ;
         return ;
     }
     /* memory pressure can sometimes initiate write_inode calls with sync == 1,
@@ -1471,6 +1541,7 @@
 /* stat data of new object is inserted already, this inserts the item
    containing "." and ".." entries */
 static int reiserfs_new_directory (struct reiserfs_transaction_handle *th, 
+				   struct inode *inode,
 				   struct item_head * ih, struct path * path,
 				   struct inode * dir)
 {
@@ -1503,25 +1574,26 @@
     /* look for place in the tree for new item */
     retval = search_item (sb, &key, path);
     if (retval == IO_ERROR) {
-	reiserfs_warning ("vs-13080: reiserfs_new_directory: "
-			  "i/o failure occurred creating new directory\n");
+	reiserfs_warning (sb, "vs-13080: reiserfs_new_directory: "
+			  "i/o failure occurred creating new directory");
 	return -EIO;
     }
     if (retval == ITEM_FOUND) {
 	pathrelse (path);
-	reiserfs_warning ("vs-13070: reiserfs_new_directory: "
+	reiserfs_warning (sb, "vs-13070: reiserfs_new_directory: "
 			  "object with this key exists (%k)", &(ih->ih_key));
 	return -EEXIST;
     }
 
     /* insert item, that is empty directory item */
-    return reiserfs_insert_item (th, path, &key, ih, body);
+    return reiserfs_insert_item (th, path, &key, ih, inode, body);
 }
 
 
 /* stat data of object has been inserted, this inserts the item
    containing the body of symlink */
 static int reiserfs_new_symlink (struct reiserfs_transaction_handle *th, 
+				 struct inode *inode,	/* Inode of symlink */
 				 struct item_head * ih,
 				 struct path * path, const char * symname, int item_len)
 {
@@ -1539,19 +1611,19 @@
     /* look for place in the tree for new item */
     retval = search_item (sb, &key, path);
     if (retval == IO_ERROR) {
-	reiserfs_warning ("vs-13080: reiserfs_new_symlinik: "
-			  "i/o failure occurred creating new symlink\n");
+	reiserfs_warning (sb, "vs-13080: reiserfs_new_symlinik: "
+			  "i/o failure occurred creating new symlink");
 	return -EIO;
     }
     if (retval == ITEM_FOUND) {
 	pathrelse (path);
-	reiserfs_warning ("vs-13080: reiserfs_new_symlink: "
+	reiserfs_warning (sb, "vs-13080: reiserfs_new_symlink: "
 			  "object with this key exists (%k)", &(ih->ih_key));
 	return -EEXIST;
     }
 
     /* insert item, that is body of symlink */
-    return reiserfs_insert_item (th, path, &key, ih, symname);
+    return reiserfs_insert_item (th, path, &key, ih, inode, symname);
 }
 
 
@@ -1619,7 +1691,8 @@
 
     inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME;
     inode->i_size = i_size;
-    inode->i_blocks = (inode->i_size + 511) >> 9;
+    inode->i_blocks = 0;
+    inode->i_bytes = 0;
     REISERFS_I(inode)->i_first_direct_byte = S_ISLNK(mode) ? 1 : 
       U32_MAX/*NO_BYTES_IN_DIRECT_ITEM*/;
 
@@ -1632,6 +1705,9 @@
     REISERFS_I(inode)->i_attrs =
 	REISERFS_I(dir)->i_attrs & REISERFS_INHERIT_MASK;
     sd_attrs_to_i_attrs( REISERFS_I(inode) -> i_attrs, inode );
+    REISERFS_I(inode)->i_acl_access = NULL;
+    REISERFS_I(inode)->i_acl_default = NULL;
+    init_rwsem (&REISERFS_I(inode)->xattr_sem);
 
     if (old_format_only (sb))
 	make_le_item_head (&ih, 0, KEY_FORMAT_3_5, SD_OFFSET, TYPE_STAT_DATA, SD_V1_SIZE, MAX_US_INT);
@@ -1661,9 +1737,9 @@
 	    err = -EINVAL;
 	    goto out_bad_inode;
 	}
-	inode2sd_v1 (&sd, inode);
+	inode2sd_v1 (&sd, inode, inode->i_size);
     } else {
-	inode2sd (&sd, inode);
+	inode2sd (&sd, inode, inode->i_size);
     }
     // these do not go to on-disk stat data
     inode->i_ino = le32_to_cpu (ih.ih_key.k_objectid);
@@ -1687,7 +1763,7 @@
     if (REISERFS_I(dir)->new_packing_locality)
 	th->displace_new_blocks = 1;
 #endif
-    retval = reiserfs_insert_item (th, &path_to_key, &key, &ih, (char *)(&sd));
+    retval = reiserfs_insert_item (th, &path_to_key, &key, &ih, inode, (char *)(&sd));
     if (retval) {
 	err = retval;
 	reiserfs_check_path(&path_to_key) ;
@@ -1700,14 +1776,14 @@
 #endif
     if (S_ISDIR(mode)) {
 	/* insert item with "." and ".." */
-	retval = reiserfs_new_directory (th, &ih, &path_to_key, dir);
+	retval = reiserfs_new_directory (th, inode, &ih, &path_to_key, dir);
     }
 
     if (S_ISLNK(mode)) {
 	/* insert body of symlink */
 	if (!old_format_only (sb))
 	    i_size = ROUND_UP(i_size);
-	retval = reiserfs_new_symlink (th, &ih, &path_to_key, symname, i_size);
+	retval = reiserfs_new_symlink (th, inode, &ih, &path_to_key, symname, i_size);
     }
     if (retval) {
 	err = retval;
@@ -1716,6 +1792,20 @@
 	goto out_inserted_sd;
     }
 
+    /* XXX CHECK THIS */
+    if (reiserfs_posixacl (inode->i_sb)) {
+        retval = reiserfs_inherit_default_acl (dir, dentry, inode);
+        if (retval) {
+            err = retval;
+            reiserfs_check_path(&path_to_key) ;
+            journal_end(th, th->t_super, th->t_blocks_allocated);
+            goto out_inserted_sd;
+        }
+    } else if (inode->i_sb->s_flags & MS_POSIXACL) {
+	reiserfs_warning (inode->i_sb, "ACLs aren't enabled in the fs, "
+			  "but vfs thinks they are!");
+    }
+
     insert_inode_hash (inode);
     reiserfs_update_sd(th, inode);
     reiserfs_check_path(&path_to_key) ;
@@ -1732,6 +1822,9 @@
 
     /* dquot_drop must be done outside a transaction */
     journal_end(th, th->t_super, th->t_blocks_allocated) ;
+    DQUOT_FREE_INODE(inode);
+    DQUOT_DROP(inode);
+    inode->i_flags |= S_NOQUOTA;
     make_bad_inode(inode);
 
 out_inserted_sd:
@@ -1808,9 +1901,10 @@
 	** I've screwed up the code to find the buffer, or the code to
 	** call prepare_write
 	*/
-	reiserfs_warning("clm-6000: error reading block %lu on dev %s\n",
-			 bh->b_blocknr,
-			 reiserfs_bdevname (p_s_inode->i_sb)) ;
+	reiserfs_warning (p_s_inode->i_sb,
+			  "clm-6000: error reading block %lu on dev %s",
+			  bh->b_blocknr,
+			  reiserfs_bdevname (p_s_inode->i_sb)) ;
 	error = -EIO ;
 	goto unlock ;
     }
@@ -1850,7 +1944,9 @@
 	    // and get_block_create_0 could not find a block to read in,
 	    // which is ok.
 	    if (error != -ENOENT)
-	        reiserfs_warning("clm-6001: grab_tail_page failed %d\n", error);
+	        reiserfs_warning (p_s_inode->i_sb,
+				  "clm-6001: grab_tail_page failed %d",
+				  error);
 	    page = NULL ;
 	    bh = NULL ;
 	}
@@ -1948,7 +2044,8 @@
     /* we've found an unformatted node */
     if (indirect_item_found(retval, ih)) {
 	if (bytes_copied > 0) {
-	    reiserfs_warning("clm-6002: bytes_copied %d\n", bytes_copied) ;
+	    reiserfs_warning (inode->i_sb, "clm-6002: bytes_copied %d",
+			      bytes_copied) ;
 	}
         if (!get_block_num(item, pos_in_item)) {
 	    /* crap, we are writing to a hole */
@@ -1996,7 +2093,9 @@
 	    goto research ;
 	}
     } else {
-        reiserfs_warning("clm-6003: bad item inode %lu, device %s\n", inode->i_ino, reiserfs_bdevname (inode->i_sb)) ;
+        reiserfs_warning (inode->i_sb,
+			  "clm-6003: bad item inode %lu, device %s",
+			  inode->i_ino, reiserfs_bdevname (inode->i_sb)) ;
         retval = -EIO ;
 	goto out ;
     }
@@ -2269,6 +2368,7 @@
     struct inode *inode = page->mapping->host ;
     loff_t pos = ((loff_t)page->index << PAGE_CACHE_SHIFT) + to;
     int ret = 0;
+    int update_sd = 0;
     struct reiserfs_transaction_handle *th = NULL;
     
     reiserfs_wait_on_write_block(inode->i_sb) ;
@@ -2295,11 +2395,14 @@
 	reiserfs_update_inode_transaction(inode) ;
 	inode->i_size = pos ;
 	reiserfs_update_sd(&myth, inode) ;
+	update_sd = 1;
 	journal_end(&myth, inode->i_sb, 1) ;
 	reiserfs_write_unlock(inode->i_sb);
     }
     if (th) {
 	reiserfs_write_lock(inode->i_sb);
+	if (!update_sd)
+	    reiserfs_update_sd(th, inode) ;
         reiserfs_end_persistent_transaction(th);
 	reiserfs_write_unlock(inode->i_sb);
     }
@@ -2507,6 +2610,68 @@
     return blockdev_direct_IO(rw, iocb, inode, inode->i_sb->s_bdev, iov,
 			offset, nr_segs, reiserfs_get_blocks_direct_io, NULL);
 }
+
+int reiserfs_setattr(struct dentry *dentry, struct iattr *attr) {
+    struct inode *inode = dentry->d_inode ;
+    int error ;
+    unsigned int ia_valid = attr->ia_valid;
+    reiserfs_write_lock(inode->i_sb);
+    if (attr->ia_valid & ATTR_SIZE) {
+	/* version 2 items will be caught by the s_maxbytes check
+	** done for us in vmtruncate
+	*/
+	if (get_inode_item_key_version(inode) == KEY_FORMAT_3_5 &&
+	    attr->ia_size > MAX_NON_LFS) {
+	    error = -EFBIG ;
+	    goto out;
+	}
+	/* fill in hole pointers in the expanding truncate case. */
+        if (attr->ia_size > inode->i_size) {
+	    error = generic_cont_expand(inode, attr->ia_size) ;
+	    if (REISERFS_I(inode)->i_prealloc_count > 0) {
+		struct reiserfs_transaction_handle th ;
+		/* we're changing at most 2 bitmaps, inode + super */
+		journal_begin(&th, inode->i_sb, 4) ;
+		reiserfs_discard_prealloc (&th, inode);
+		journal_end(&th, inode->i_sb, 4) ;
+	    }
+	    if (error)
+	        goto out;
+	}
+    }
+
+    if ((((attr->ia_valid & ATTR_UID) && (attr->ia_uid & ~0xffff)) ||
+	 ((attr->ia_valid & ATTR_GID) && (attr->ia_gid & ~0xffff))) &&
+	(get_inode_sd_version (inode) == STAT_DATA_V1)) {
+		/* stat data of format v3.5 has 16 bit uid and gid */
+	    error = -EINVAL;
+	    goto out;
+	}
+
+    error = inode_change_ok(inode, attr) ;
+    if (!error) {
+	if ((ia_valid & ATTR_UID && attr->ia_uid != inode->i_uid) ||
+	    (ia_valid & ATTR_GID && attr->ia_gid != inode->i_gid)) {
+                error = reiserfs_chown_xattrs (inode, attr);
+
+                if (!error)
+                    error = DQUOT_TRANSFER(inode, attr) ? -EDQUOT : 0;
+        }
+        if (!error)
+            inode_setattr(inode, attr) ;
+    }
+
+
+    if (!error && reiserfs_posixacl (inode->i_sb)) {
+        if (attr->ia_valid & ATTR_MODE)
+            error = reiserfs_acl_chmod (inode);
+    }
+
+out:
+    reiserfs_write_unlock(inode->i_sb);
+    return error ;
+}
+
 
 
 struct address_space_operations reiserfs_address_space_operations = {
diff -Nru a/fs/reiserfs/item_ops.c b/fs/reiserfs/item_ops.c
--- a/fs/reiserfs/item_ops.c	Sun May 16 01:18:35 2004
+++ b/fs/reiserfs/item_ops.c	Sun May 16 01:18:36 2004
@@ -106,7 +106,7 @@
 
 static void sd_print_vi (struct virtual_item * vi)
 {
-    reiserfs_warning ("STATDATA, index %d, type 0x%x, %h\n", 
+    reiserfs_warning (NULL, "STATDATA, index %d, type 0x%x, %h",
 		      vi->vi_index, vi->vi_type, vi->vi_ih);
 }
 
@@ -209,7 +209,7 @@
 
 static void direct_print_vi (struct virtual_item * vi)
 {
-    reiserfs_warning ("DIRECT, index %d, type 0x%x, %h\n", 
+    reiserfs_warning (NULL, "DIRECT, index %d, type 0x%x, %h",
 		      vi->vi_index, vi->vi_type, vi->vi_ih);
 }
 
@@ -302,7 +302,7 @@
     unp = (__u32 *)item;
 
     if (ih_item_len(ih) % UNFM_P_SIZE)
-	printk ("indirect_print_item: invalid item len");  
+	reiserfs_warning (NULL, "indirect_print_item: invalid item len");
 
     printk ("%d pointers\n[ ", (int)I_UNFM_NUM (ih));
     for (j = 0; j < I_UNFM_NUM (ih); j ++) {
@@ -363,7 +363,7 @@
 
 static void indirect_print_vi (struct virtual_item * vi)
 {
-    reiserfs_warning ("INDIRECT, index %d, type 0x%x, %h\n", 
+    reiserfs_warning (NULL, "INDIRECT, index %d, type 0x%x, %h",
 		      vi->vi_index, vi->vi_type, vi->vi_ih);
 }
 
@@ -390,7 +390,7 @@
 
 static int direntry_bytes_number (struct item_head * ih, int block_size)
 {
-    reiserfs_warning ("vs-16090: direntry_bytes_number: "
+    reiserfs_warning (NULL, "vs-16090: direntry_bytes_number: "
 		      "bytes number is asked for direntry");
     return 0;
 }
@@ -582,8 +582,7 @@
     }
 
     if (entries == dir_u->entry_count) {
-	printk ("free spze %d, entry_count %d\n", free, dir_u->entry_count);
-	BUG ();
+	reiserfs_panic (NULL, "free space %d, entry_count %d\n", free, dir_u->entry_count);
     }
 
     /* "." and ".." can not be separated from each other */
@@ -653,7 +652,7 @@
     int i;
     struct direntry_uarea * dir_u = vi->vi_uarea;
 
-    reiserfs_warning ("DIRENTRY, index %d, type 0x%x, %h, flags 0x%x\n", 
+    reiserfs_warning (NULL, "DIRENTRY, index %d, type 0x%x, %h, flags 0x%x",
 		      vi->vi_index, vi->vi_type, vi->vi_ih, dir_u->flags);
     printk ("%d entries: ", dir_u->entry_count);
     for (i = 0; i < dir_u->entry_count; i ++)
@@ -682,32 +681,32 @@
 //
 static int errcatch_bytes_number (struct item_head * ih, int block_size)
 {
-    reiserfs_warning ("green-16001: Invalid item type observed, run fsck ASAP\n");
+    reiserfs_warning (NULL, "green-16001: Invalid item type observed, run fsck ASAP");
     return 0;
 }
 
 static void errcatch_decrement_key (struct cpu_key * key)
 {
-    reiserfs_warning ("green-16002: Invalid item type observed, run fsck ASAP\n");
+    reiserfs_warning (NULL, "green-16002: Invalid item type observed, run fsck ASAP");
 }
 
 
 static int errcatch_is_left_mergeable (struct key * key, unsigned long bsize)
 {
-    reiserfs_warning ("green-16003: Invalid item type observed, run fsck ASAP\n");
+    reiserfs_warning (NULL, "green-16003: Invalid item type observed, run fsck ASAP");
     return 0;
 }
 
 
 static void errcatch_print_item (struct item_head * ih, char * item)
 {
-    reiserfs_warning ("green-16004: Invalid item type observed, run fsck ASAP\n");
+    reiserfs_warning (NULL, "green-16004: Invalid item type observed, run fsck ASAP");
 }
 
 
 static void errcatch_check_item (struct item_head * ih, char * item)
 {
-    reiserfs_warning ("green-16005: Invalid item type observed, run fsck ASAP\n");
+    reiserfs_warning (NULL, "green-16005: Invalid item type observed, run fsck ASAP");
 }
 
 static int errcatch_create_vi (struct virtual_node * vn,
@@ -715,7 +714,7 @@
 			       int is_affected, 
 			       int insert_size)
 {
-    reiserfs_warning ("green-16006: Invalid item type observed, run fsck ASAP\n");
+    reiserfs_warning (NULL, "green-16006: Invalid item type observed, run fsck ASAP");
     return 0;	// We might return -1 here as well, but it won't help as create_virtual_node() from where
 		// this operation is called from is of return type void.
 }
@@ -723,32 +722,32 @@
 static int errcatch_check_left (struct virtual_item * vi, int free,
 				int start_skip, int end_skip)
 {
-    reiserfs_warning ("green-16007: Invalid item type observed, run fsck ASAP\n");
+    reiserfs_warning (NULL, "green-16007: Invalid item type observed, run fsck ASAP");
     return -1;
 }
 
 
 static int errcatch_check_right (struct virtual_item * vi, int free)
 {
-    reiserfs_warning ("green-16008: Invalid item type observed, run fsck ASAP\n");
+    reiserfs_warning (NULL, "green-16008: Invalid item type observed, run fsck ASAP");
     return -1;
 }
 
 static int errcatch_part_size (struct virtual_item * vi, int first, int count)
 {
-    reiserfs_warning ("green-16009: Invalid item type observed, run fsck ASAP\n");
+    reiserfs_warning (NULL, "green-16009: Invalid item type observed, run fsck ASAP");
     return 0;
 }
 
 static int errcatch_unit_num (struct virtual_item * vi)
 {
-    reiserfs_warning ("green-16010: Invalid item type observed, run fsck ASAP\n");
+    reiserfs_warning (NULL, "green-16010: Invalid item type observed, run fsck ASAP");
     return 0;
 }
 
 static void errcatch_print_vi (struct virtual_item * vi)
 {
-    reiserfs_warning ("green-16011: Invalid item type observed, run fsck ASAP\n");
+    reiserfs_warning (NULL, "green-16011: Invalid item type observed, run fsck ASAP");
 }
 
 struct item_operations errcatch_ops = {
diff -Nru a/fs/reiserfs/journal.c b/fs/reiserfs/journal.c
--- a/fs/reiserfs/journal.c	Sun May 16 01:18:35 2004
+++ b/fs/reiserfs/journal.c	Sun May 16 01:18:35 2004
@@ -271,7 +271,7 @@
     jb->journal_list = NULL ;
     jb->bitmaps = vmalloc( mem ) ;
     if (!jb->bitmaps) {
-      reiserfs_warning("clm-2000, unable to allocate bitmaps for journal lists\n") ;
+      reiserfs_warning(p_s_sb, "clm-2000, unable to allocate bitmaps for journal lists") ;
       failed = 1;   
       break ;
     }
@@ -345,7 +345,7 @@
 static struct reiserfs_journal_cnode *get_cnode(struct super_block *p_s_sb) {
   struct reiserfs_journal_cnode *cn ;
 
-  reiserfs_check_lock_depth("get_cnode") ;
+  reiserfs_check_lock_depth(p_s_sb, "get_cnode") ;
 
   if (SB_JOURNAL(p_s_sb)->j_cnode_free <= 0) {
     return NULL ;
@@ -369,7 +369,7 @@
 */
 static void free_cnode(struct super_block *p_s_sb, struct reiserfs_journal_cnode *cn) {
 
-  reiserfs_check_lock_depth("free_cnode") ;
+  reiserfs_check_lock_depth(p_s_sb, "free_cnode") ;
 
   SB_JOURNAL(p_s_sb)->j_cnode_used-- ;
   SB_JOURNAL(p_s_sb)->j_cnode_free++ ;
@@ -422,11 +422,10 @@
 /* utility function to force a BUG if it is called without the big
 ** kernel lock held.  caller is the string printed just before calling BUG()
 */
-void reiserfs_check_lock_depth(char *caller) {
+void reiserfs_check_lock_depth(struct super_block *sb, char *caller) {
 #ifdef CONFIG_SMP
   if (current->lock_depth < 0) {
-    printk("%s called without kernel lock held\n", caller) ;
-    BUG() ;
+    reiserfs_panic (sb, "%s called without kernel lock held", caller) ;
   }
 #else
   ;
@@ -559,9 +558,8 @@
                                    struct reiserfs_journal_list *jl)
 {
     if (jl->j_refcount < 1) {
-        printk("trans id %lu, refcount at %d\n", jl->j_trans_id,
+        reiserfs_panic (s, "trans id %lu, refcount at %d", jl->j_trans_id,
 	                                         jl->j_refcount);
-        BUG();
     }
     if (--jl->j_refcount == 0)
         reiserfs_kfree(jl, sizeof(struct reiserfs_journal_list), s);
@@ -601,7 +599,7 @@
     char b[BDEVNAME_SIZE];
 
     if (buffer_journaled(bh)) {
-        reiserfs_warning("clm-2084: pinned buffer %lu:%s sent to disk\n",
+        reiserfs_warning(NULL, "clm-2084: pinned buffer %lu:%s sent to disk",
 	                 bh->b_blocknr, bdevname(bh->b_bdev, b)) ;
     }
     if (uptodate)
@@ -912,7 +910,7 @@
   struct buffer_head *tbh = NULL ;
   unsigned long trans_id = jl->j_trans_id;
 
-  reiserfs_check_lock_depth("flush_commit_list") ;
+  reiserfs_check_lock_depth(s, "flush_commit_list") ;
 
   if (atomic_read(&jl->j_older_commits_done)) {
     return 0 ;
@@ -1007,7 +1005,7 @@
   bforget(jl->j_commit_bh) ;
   if (SB_JOURNAL(s)->j_last_commit_id != 0 &&
      (jl->j_trans_id - SB_JOURNAL(s)->j_last_commit_id) != 1) {
-      reiserfs_warning("clm-2200: last commit %lu, current %lu\n",
+      reiserfs_warning(s, "clm-2200: last commit %lu, current %lu",
                        SB_JOURNAL(s)->j_last_commit_id,
 		       jl->j_trans_id);
   }
@@ -1066,8 +1064,8 @@
   while(cn) {
     if (cn->blocknr != 0) {
       if (debug) {
-        printk("block %u, bh is %d, state %ld\n", cn->blocknr, cn->bh ? 1: 0,
-	        cn->state) ;
+       reiserfs_warning (p_s_sb, "block %u, bh is %d, state %ld", cn->blocknr,
+                         cn->bh ? 1: 0, cn->state) ;
       }
       cn->state = 0 ;
       remove_journal_hash(p_s_sb, SB_JOURNAL(p_s_sb)->j_list_hash_table, jl, cn->blocknr, 1) ;
@@ -1104,7 +1102,7 @@
     set_buffer_dirty(SB_JOURNAL(p_s_sb)->j_header_bh) ;
     sync_dirty_buffer(SB_JOURNAL(p_s_sb)->j_header_bh) ;
     if (!buffer_uptodate(SB_JOURNAL(p_s_sb)->j_header_bh)) {
-      printk( "reiserfs: journal-837: IO error during journal replay\n" );
+      reiserfs_warning (p_s_sb, "journal-837: IO error during journal replay");
       return -EIO ;
     }
   }
@@ -1178,7 +1176,7 @@
   }
 
   if (atomic_read(&SB_JOURNAL(s)->j_wcount) != 0) {
-    reiserfs_warning("clm-2048: flush_journal_list called with wcount %d\n",
+    reiserfs_warning(s, "clm-2048: flush_journal_list called with wcount %d",
                       atomic_read(&SB_JOURNAL(s)->j_wcount)) ;
   }
   if (jl->j_trans_id == 0)
@@ -1277,8 +1275,10 @@
     ** is not marked JDirty_wait
     */
     if ((!was_jwait) && !buffer_locked(saved_bh)) {
-printk("journal-813: BAD! buffer %llu %cdirty %cjwait, not in a newer tranasction\n", (unsigned long long)saved_bh->b_blocknr,
-        was_dirty ? ' ' : '!', was_jwait ? ' ' : '!') ;
+	reiserfs_warning (s, "journal-813: BAD! buffer %llu %cdirty %cjwait, "
+			  "not in a newer tranasction",
+			  (unsigned long long)saved_bh->b_blocknr,
+			  was_dirty ? ' ' : '!', was_jwait ? ' ' : '!') ;
     }
     if (was_dirty) { 
       /* we inc again because saved_bh gets decremented at free_cnode */
@@ -1293,8 +1293,8 @@
         unlock_buffer(saved_bh);
       count++ ;
     } else {
-      printk("clm-2082: Unable to flush buffer %llu in flush_journal_list\n",
-              (unsigned long long)saved_bh->b_blocknr) ;
+      reiserfs_warning (s, "clm-2082: Unable to flush buffer %llu in %s",
+                        (unsigned long long)saved_bh->b_blocknr, __FUNCTION__);
     }
 free_cnode:
     last = cn ;
@@ -1303,7 +1303,7 @@
       /* we incremented this to keep others from taking the buffer head away */
       put_bh(saved_bh) ;
       if (atomic_read(&(saved_bh->b_count)) < 0) {
-        printk("journal-945: saved_bh->b_count < 0") ;
+        reiserfs_warning (s, "journal-945: saved_bh->b_count < 0");
       }
     }
   }
@@ -1363,7 +1363,7 @@
 
   if (SB_JOURNAL(s)->j_last_flush_id != 0 &&
      (jl->j_trans_id - SB_JOURNAL(s)->j_last_flush_id) != 1) {
-      reiserfs_warning("clm-2201: last flush %lu, current %lu\n",
+      reiserfs_warning(s, "clm-2201: last flush %lu, current %lu",
                        SB_JOURNAL(s)->j_last_flush_id,
 		       jl->j_trans_id);
   }
@@ -1712,19 +1712,19 @@
     if (oldest_invalid_trans_id && *oldest_invalid_trans_id && get_desc_trans_id(desc) > *oldest_invalid_trans_id) {
       reiserfs_debug(p_s_sb, REISERFS_DEBUG_CODE, "journal-986: transaction "
 	              "is valid returning because trans_id %d is greater than "
-		      "oldest_invalid %lu\n", get_desc_trans_id(desc), 
+		      "oldest_invalid %lu", get_desc_trans_id(desc),
 		       *oldest_invalid_trans_id);
       return 0 ;
     }
     if (newest_mount_id && *newest_mount_id > get_desc_mount_id (desc)) {
       reiserfs_debug(p_s_sb, REISERFS_DEBUG_CODE, "journal-1087: transaction "
                      "is valid returning because mount_id %d is less than "
-		     "newest_mount_id %lu\n", get_desc_mount_id (desc), 
+		     "newest_mount_id %lu", get_desc_mount_id (desc),
 		     *newest_mount_id) ;
       return -1 ;
     }
     if ( get_desc_trans_len(desc) > SB_JOURNAL_TRANS_MAX(p_s_sb) ) {
-      reiserfs_warning("journal-2018: Bad transaction length %d encountered, ignoring transaction\n", get_desc_trans_len(desc));
+      reiserfs_warning(p_s_sb, "journal-2018: Bad transaction length %d encountered, ignoring transaction", get_desc_trans_len(desc));
       return -1 ;
     }
     offset = d_bh->b_blocknr - SB_ONDISK_JOURNAL_1st_BLOCK(p_s_sb) ;
@@ -1738,7 +1738,7 @@
     if (journal_compare_desc_commit(p_s_sb, desc, commit)) {
       reiserfs_debug(p_s_sb, REISERFS_DEBUG_CODE, 
                      "journal_transaction_is_valid, commit offset %ld had bad "
-		     "time %d or length %d\n", 
+		     "time %d or length %d",
 		     c_bh->b_blocknr -  SB_ONDISK_JOURNAL_1st_BLOCK(p_s_sb),
 		     get_commit_trans_id (commit), 
 		     get_commit_trans_len(commit));
@@ -1746,14 +1746,14 @@
       if (oldest_invalid_trans_id) {
 	*oldest_invalid_trans_id = get_desc_trans_id(desc) ;
 	reiserfs_debug(p_s_sb, REISERFS_DEBUG_CODE, "journal-1004: "
-	               "transaction_is_valid setting oldest invalid trans_id "
-		       "to %d\n", get_desc_trans_id(desc)) ;
+		       "transaction_is_valid setting oldest invalid trans_id "
+		       "to %d", get_desc_trans_id(desc)) ;
       }
       return -1; 
     }
     brelse(c_bh) ;
     reiserfs_debug(p_s_sb, REISERFS_DEBUG_CODE, "journal-1006: found valid "
-                   "transaction start offset %llu, len %d id %d\n",
+                   "transaction start offset %llu, len %d id %d",
 		   d_bh->b_blocknr - SB_ONDISK_JOURNAL_1st_BLOCK(p_s_sb), 
 		   get_desc_trans_len(desc), get_desc_trans_id(desc)) ;
     return 1 ;
@@ -1793,12 +1793,12 @@
   desc = (struct reiserfs_journal_desc *)d_bh->b_data ;
   trans_offset = d_bh->b_blocknr - SB_ONDISK_JOURNAL_1st_BLOCK(p_s_sb) ;
   reiserfs_debug(p_s_sb, REISERFS_DEBUG_CODE, "journal-1037: "
-                 "journal_read_transaction, offset %llu, len %d mount_id %d\n",
+                 "journal_read_transaction, offset %llu, len %d mount_id %d",
 		 d_bh->b_blocknr - SB_ONDISK_JOURNAL_1st_BLOCK(p_s_sb), 
 		 get_desc_trans_len(desc), get_desc_mount_id(desc)) ;
   if (get_desc_trans_id(desc) < oldest_trans_id) {
     reiserfs_debug(p_s_sb, REISERFS_DEBUG_CODE, "journal-1039: "
-                   "journal_read_trans skipping because %lu is too old\n", 
+                   "journal_read_trans skipping because %lu is too old",
 		   cur_dblock - SB_ONDISK_JOURNAL_1st_BLOCK(p_s_sb)) ;
     brelse(d_bh) ;
     return 1 ;
@@ -1806,7 +1806,7 @@
   if (get_desc_mount_id(desc) != newest_mount_id) {
     reiserfs_debug(p_s_sb, REISERFS_DEBUG_CODE, "journal-1146: "
                    "journal_read_trans skipping because %d is != "
-		   "newest_mount_id %lu\n", get_desc_mount_id(desc), 
+		   "newest_mount_id %lu", get_desc_mount_id(desc),
 		    newest_mount_id) ;
     brelse(d_bh) ;
     return 1 ;
@@ -1821,7 +1821,7 @@
   commit = (struct reiserfs_journal_commit *)c_bh->b_data ;
   if (journal_compare_desc_commit(p_s_sb, desc, commit)) {
     reiserfs_debug(p_s_sb, REISERFS_DEBUG_CODE, "journal_read_transaction, "
-                   "commit offset %llu had bad time %d or length %d\n",
+                   "commit offset %llu had bad time %d or length %d",
 		   c_bh->b_blocknr -  SB_ONDISK_JOURNAL_1st_BLOCK(p_s_sb), 
 		   get_commit_trans_id(commit), get_commit_trans_len(commit));
     brelse(c_bh) ;
@@ -1837,7 +1837,7 @@
     brelse(d_bh) ;
     reiserfs_kfree(log_blocks, get_desc_trans_len(desc) * sizeof(struct buffer_head *), p_s_sb) ;
     reiserfs_kfree(real_blocks, get_desc_trans_len(desc) * sizeof(struct buffer_head *), p_s_sb) ;
-    reiserfs_warning("journal-1169: kmalloc failed, unable to mount FS\n") ;
+    reiserfs_warning(p_s_sb, "journal-1169: kmalloc failed, unable to mount FS") ;
     return -1 ;
   }
   /* get all the buffer heads */
@@ -1850,12 +1850,12 @@
       real_blocks[i] = sb_getblk(p_s_sb, le32_to_cpu(commit->j_realblock[i - trans_half])) ;
     }
     if ( real_blocks[i]->b_blocknr > SB_BLOCK_COUNT(p_s_sb) ) {
-      reiserfs_warning("journal-1207: REPLAY FAILURE fsck required! Block to replay is outside of filesystem\n");
+      reiserfs_warning(p_s_sb, "journal-1207: REPLAY FAILURE fsck required! Block to replay is outside of filesystem");
       goto abort_replay;
     }
     /* make sure we don't try to replay onto log or reserved area */
     if (is_block_in_log_or_reserved_area(p_s_sb, real_blocks[i]->b_blocknr)) {
-      reiserfs_warning("journal-1204: REPLAY FAILURE fsck required! Trying to replay onto a log block\n") ;
+      reiserfs_warning(p_s_sb, "journal-1204: REPLAY FAILURE fsck required! Trying to replay onto a log block") ;
 abort_replay:
       brelse_array(log_blocks, i) ;
       brelse_array(real_blocks, i) ;
@@ -1871,7 +1871,7 @@
   for (i = 0 ; i < get_desc_trans_len(desc) ; i++) {
     wait_on_buffer(log_blocks[i]) ;
     if (!buffer_uptodate(log_blocks[i])) {
-      reiserfs_warning("journal-1212: REPLAY FAILURE fsck required! buffer write failed\n") ;
+      reiserfs_warning(p_s_sb, "journal-1212: REPLAY FAILURE fsck required! buffer write failed") ;
       brelse_array(log_blocks + i, get_desc_trans_len(desc) - i) ;
       brelse_array(real_blocks, get_desc_trans_len(desc)) ;
       brelse(c_bh) ;
@@ -1892,7 +1892,7 @@
   for (i = 0 ; i < get_desc_trans_len(desc) ; i++) {
     wait_on_buffer(real_blocks[i]) ; 
     if (!buffer_uptodate(real_blocks[i])) {
-      reiserfs_warning("journal-1226: REPLAY FAILURE, fsck required! buffer write failed\n") ;
+      reiserfs_warning(p_s_sb, "journal-1226: REPLAY FAILURE, fsck required! buffer write failed") ;
       brelse_array(real_blocks + i, get_desc_trans_len(desc) - i) ;
       brelse(c_bh) ;
       brelse(d_bh) ;
@@ -1904,7 +1904,7 @@
   }
   cur_dblock =  SB_ONDISK_JOURNAL_1st_BLOCK(p_s_sb) + ((trans_offset + get_desc_trans_len(desc) + 2) % SB_ONDISK_JOURNAL_SIZE(p_s_sb)) ;
   reiserfs_debug(p_s_sb, REISERFS_DEBUG_CODE, "journal-1095: setting journal "
-                 "start to offset %ld\n", 
+                 "start to offset %ld",
 		 cur_dblock -  SB_ONDISK_JOURNAL_1st_BLOCK(p_s_sb)) ;
   
   /* init starting values for the first transaction, in case this is the last transaction to be replayed. */
@@ -1986,9 +1986,8 @@
   char b[BDEVNAME_SIZE];
 
   cur_dblock = SB_ONDISK_JOURNAL_1st_BLOCK(p_s_sb) ;
-  printk("reiserfs: checking transaction log (%s) for (%s)\n",
-	 bdevname(SB_JOURNAL(p_s_sb)->j_dev_bd, b),
-	 reiserfs_bdevname(p_s_sb));
+  reiserfs_info (p_s_sb, "checking transaction log (%s)\n",
+	 bdevname(SB_JOURNAL(p_s_sb)->j_dev_bd, b));
   start = get_seconds();
 
   /* step 1, read in the journal header block.  Check the transaction it says 
@@ -2011,7 +2010,7 @@
     newest_mount_id = le32_to_cpu(jh->j_mount_id);
     reiserfs_debug(p_s_sb, REISERFS_DEBUG_CODE, "journal-1153: found in "
                    "header: first_unflushed_offset %d, last_flushed_trans_id "
-		   "%lu\n", le32_to_cpu(jh->j_first_unflushed_offset), 
+		   "%lu", le32_to_cpu(jh->j_first_unflushed_offset),
 		   le32_to_cpu(jh->j_last_flush_trans_id)) ;
     valid_journal_header = 1 ;
 
@@ -2029,7 +2028,8 @@
   }
 
   if (continue_replay && bdev_read_only(p_s_sb->s_bdev)) {
-    printk("clm-2076: device is readonly, unable to replay log\n") ;
+    reiserfs_warning (p_s_sb,
+		      "clm-2076: device is readonly, unable to replay log") ;
     return -1 ;
   }
 
@@ -2049,7 +2049,7 @@
 	oldest_start = d_bh->b_blocknr ;
 	newest_mount_id = get_desc_mount_id(desc) ;
 	reiserfs_debug(p_s_sb, REISERFS_DEBUG_CODE, "journal-1179: Setting "
-	               "oldest_start to offset %llu, trans_id %lu\n",
+	               "oldest_start to offset %llu, trans_id %lu",
 		       oldest_start - SB_ONDISK_JOURNAL_1st_BLOCK(p_s_sb), 
 		       oldest_trans_id) ;
       } else if (oldest_trans_id > get_desc_trans_id(desc)) { 
@@ -2057,14 +2057,14 @@
         oldest_trans_id = get_desc_trans_id(desc) ;
 	oldest_start = d_bh->b_blocknr ;
 	reiserfs_debug(p_s_sb, REISERFS_DEBUG_CODE, "journal-1180: Resetting "
-	               "oldest_start to offset %lu, trans_id %lu\n", 
+	               "oldest_start to offset %lu, trans_id %lu",
 			oldest_start - SB_ONDISK_JOURNAL_1st_BLOCK(p_s_sb), 
 			oldest_trans_id) ;
       }
       if (newest_mount_id < get_desc_mount_id(desc)) {
         newest_mount_id = get_desc_mount_id(desc) ;
 	reiserfs_debug(p_s_sb, REISERFS_DEBUG_CODE, "journal-1299: Setting "
-	              "newest_mount_id to %d\n", get_desc_mount_id(desc));
+	              "newest_mount_id to %d", get_desc_mount_id(desc));
       }
       cur_dblock += get_desc_trans_len(desc) + 2 ;
     } else {
@@ -2077,7 +2077,7 @@
   cur_dblock = oldest_start ;
   if (oldest_trans_id)  {
     reiserfs_debug(p_s_sb, REISERFS_DEBUG_CODE, "journal-1206: Starting replay "
-                   "from offset %llu, trans_id %lu\n",
+                   "from offset %llu, trans_id %lu",
 		   cur_dblock - SB_ONDISK_JOURNAL_1st_BLOCK(p_s_sb), 
 		   oldest_trans_id) ;
 
@@ -2098,7 +2098,7 @@
 
   if (oldest_trans_id == 0) {
     reiserfs_debug(p_s_sb, REISERFS_DEBUG_CODE, "journal-1225: No valid "
-                   "transactions found\n") ;
+                   "transactions found") ;
   }
   /* j_start does not get set correctly if we don't replay any transactions.
   ** if we had a valid journal_header, set j_start to the first unflushed transaction value,
@@ -2113,11 +2113,11 @@
     SB_JOURNAL(p_s_sb)->j_mount_id = newest_mount_id + 1 ;
   }
   reiserfs_debug(p_s_sb, REISERFS_DEBUG_CODE, "journal-1299: Setting "
-                 "newest_mount_id to %lu\n", SB_JOURNAL(p_s_sb)->j_mount_id) ;
+                 "newest_mount_id to %lu", SB_JOURNAL(p_s_sb)->j_mount_id) ;
   SB_JOURNAL(p_s_sb)->j_first_unflushed_offset = SB_JOURNAL(p_s_sb)->j_start ; 
   if (replay_count > 0) {
-    printk("reiserfs: replayed %d transactions in %lu seconds\n", replay_count, 
-	    get_seconds() - start) ;
+    reiserfs_info (p_s_sb, "replayed %d transactions in %lu seconds\n",
+		   replay_count, get_seconds() - start) ;
   }
   if (!bdev_read_only(p_s_sb->s_bdev) && 
        _update_journal_header_block(p_s_sb, SB_JOURNAL(p_s_sb)->j_start, 
@@ -2172,7 +2172,7 @@
     }
 
     if( result != 0 ) {
-	reiserfs_warning("sh-457: release_journal_dev: Cannot release journal device: %i\n", result );
+	reiserfs_warning(super, "sh-457: release_journal_dev: Cannot release journal device: %i", result );
     }
     return result;
 }
@@ -2202,8 +2202,9 @@
 		if (IS_ERR(journal->j_dev_bd)) {
 			result = PTR_ERR(journal->j_dev_bd);
 			journal->j_dev_bd = NULL;
-			printk( "sh-458: journal_init_dev: cannot init journal device\n '%s': %i", 
-				__bdevname(jdev, b), result );
+			reiserfs_warning (super, "sh-458: journal_init_dev: "
+					  "cannot init journal device '%s': %i",
+					  __bdevname(jdev, b), result );
 			return result;
 		} else if (jdev != super->s_dev)
 			set_blocksize(journal->j_dev_bd, super->s_blocksize);
@@ -2214,7 +2215,8 @@
 	if( !IS_ERR( journal -> j_dev_file ) ) {
 		struct inode *jdev_inode = journal->j_dev_file->f_mapping->host;
 		if( !S_ISBLK( jdev_inode -> i_mode ) ) {
-			printk( "journal_init_dev: '%s' is not a block device\n", jdev_name );
+			reiserfs_warning  (super, "journal_init_dev: '%s' is "
+					   "not a block device", jdev_name );
 			result = -ENOTBLK;
 		} else  {
 			/* ok */
@@ -2224,12 +2226,14 @@
 	} else {
 		result = PTR_ERR( journal -> j_dev_file );
 		journal -> j_dev_file = NULL;
-		printk( "journal_init_dev: Cannot open '%s': %i\n", jdev_name, result );
+		reiserfs_warning (super,
+				  "journal_init_dev: Cannot open '%s': %i",
+				  jdev_name, result );
 	}
 	if( result != 0 ) {
 		release_journal_dev( super, journal );
 	}
-	printk( "journal_init_dev: journal device: %s\n",
+	reiserfs_info(super, "journal_init_dev: journal device: %s\n",
 		bdevname(journal->j_dev_bd, b));
 	return result;
 }
@@ -2248,7 +2252,7 @@
 
     journal = SB_JOURNAL(p_s_sb) = vmalloc(sizeof (struct reiserfs_journal)) ;
     if (!journal) {
-	printk("journal-1256: unable to get memory for journal structure\n") ;
+	reiserfs_warning (p_s_sb, "journal-1256: unable to get memory for journal structure") ;
 	return 1 ;
     }
     memset(journal, 0, sizeof(struct reiserfs_journal)) ;
@@ -2256,8 +2260,10 @@
     INIT_LIST_HEAD (&SB_JOURNAL(p_s_sb)->j_prealloc_list);
     INIT_LIST_HEAD(&SB_JOURNAL(p_s_sb)->j_working_list);
     INIT_LIST_HEAD(&SB_JOURNAL(p_s_sb)->j_journal_list);
-    reiserfs_allocate_list_bitmaps(p_s_sb, SB_JOURNAL(p_s_sb)->j_list_bitmap, 
- 				   SB_BMAP_NR(p_s_sb)) ;
+    if (reiserfs_allocate_list_bitmaps(p_s_sb,
+				       SB_JOURNAL(p_s_sb)->j_list_bitmap,
+ 				       SB_BMAP_NR(p_s_sb)))
+	goto free_and_return ;
     allocate_bitmap_nodes(p_s_sb) ;
 
     /* reserved for journal area support */
@@ -2270,14 +2276,16 @@
        (actual for small blocksizes) */
     if ( !SB_ONDISK_JOURNAL_DEVICE( p_s_sb ) &&
          (SB_JOURNAL_1st_RESERVED_BLOCK(p_s_sb) + SB_ONDISK_JOURNAL_SIZE(p_s_sb) > p_s_sb->s_blocksize * 8) ) {
-	printk("journal-1393: journal does not fit for area addressed by first of bitmap blocks. "
-	       "It starts at %u and its size is %u. Block size %ld\n",
-		SB_JOURNAL_1st_RESERVED_BLOCK(p_s_sb), SB_ONDISK_JOURNAL_SIZE(p_s_sb), p_s_sb->s_blocksize) ;
+	reiserfs_warning (p_s_sb, "journal-1393: journal does not fit for area "
+			  "addressed by first of bitmap blocks. It starts at "
+			  "%u and its size is %u. Block size %ld",
+			  SB_JOURNAL_1st_RESERVED_BLOCK(p_s_sb),
+			  SB_ONDISK_JOURNAL_SIZE(p_s_sb), p_s_sb->s_blocksize);
 	goto free_and_return;
     }
 
     if( journal_init_dev( p_s_sb, journal, j_dev_name ) != 0 ) {
-      printk( "sh-462: unable to initialize jornal device\n");
+      reiserfs_warning (p_s_sb, "sh-462: unable to initialize jornal device");
       goto free_and_return;
     }
 
@@ -2287,18 +2295,19 @@
      bhjh = journal_bread(p_s_sb,
 		   SB_ONDISK_JOURNAL_1st_BLOCK(p_s_sb) + SB_ONDISK_JOURNAL_SIZE(p_s_sb));
      if (!bhjh) {
-	 printk("sh-459: unable to read  journal header\n") ;
+	 reiserfs_warning (p_s_sb, "sh-459: unable to read journal header");
 	 goto free_and_return;
      }
      jh = (struct reiserfs_journal_header *)(bhjh->b_data);
      
      /* make sure that journal matches to the super block */
      if (is_reiserfs_jr(rs) && (jh->jh_journal.jp_journal_magic != sb_jp_journal_magic(rs))) {
-	 printk("sh-460: journal header magic %x (device %s) does not match "
-		"to magic found in super block %x (device %s)\n",
-		jh->jh_journal.jp_journal_magic,
-		bdevname( SB_JOURNAL(p_s_sb)->j_dev_bd, b),
-		sb_jp_journal_magic(rs), reiserfs_bdevname (p_s_sb));
+	 reiserfs_warning (p_s_sb, "sh-460: journal header magic %x "
+			   "(device %s) does not match to magic found in super "
+			   "block %x",
+			   jh->jh_journal.jp_journal_magic,
+			   bdevname( SB_JOURNAL(p_s_sb)->j_dev_bd, b),
+			   sb_jp_journal_magic(rs));
 	 brelse (bhjh);
 	 goto free_and_return;
   }
@@ -2324,7 +2333,7 @@
       SB_JOURNAL_TRANS_MAX(p_s_sb) = JOURNAL_TRANS_MIN_DEFAULT / ratio;
     
     if (SB_JOURNAL_TRANS_MAX(p_s_sb) != initial)
-      printk ("sh-461: journal_init: wrong transaction max size (%u). Changed to %u\n",
+      reiserfs_warning (p_s_sb, "sh-461: journal_init: wrong transaction max size (%u). Changed to %u",
 	      initial, SB_JOURNAL_TRANS_MAX(p_s_sb));
 
     SB_JOURNAL_MAX_BATCH(p_s_sb) = SB_JOURNAL_TRANS_MAX(p_s_sb)*
@@ -2353,16 +2362,16 @@
       SB_JOURNAL_MAX_TRANS_AGE(p_s_sb) = commit_max_age;
   }
 
-  printk ("Reiserfs journal params: device %s, size %u, "
-	  "journal first block %u, max trans len %u, max batch %u, "
-	  "max commit age %u, max trans age %u\n",
-	  bdevname( SB_JOURNAL(p_s_sb)->j_dev_bd, b),
-	  SB_ONDISK_JOURNAL_SIZE(p_s_sb),
-	  SB_ONDISK_JOURNAL_1st_BLOCK(p_s_sb),
-	  SB_JOURNAL_TRANS_MAX(p_s_sb),
-	  SB_JOURNAL_MAX_BATCH(p_s_sb),
-	  SB_JOURNAL_MAX_COMMIT_AGE(p_s_sb),
-	  SB_JOURNAL_MAX_TRANS_AGE(p_s_sb));
+  reiserfs_info (p_s_sb, "journal params: device %s, size %u, "
+		 "journal first block %u, max trans len %u, max batch %u, "
+		 "max commit age %u, max trans age %u\n",
+		 bdevname( SB_JOURNAL(p_s_sb)->j_dev_bd, b),
+		 SB_ONDISK_JOURNAL_SIZE(p_s_sb),
+		 SB_ONDISK_JOURNAL_1st_BLOCK(p_s_sb),
+		 SB_JOURNAL_TRANS_MAX(p_s_sb),
+		 SB_JOURNAL_MAX_BATCH(p_s_sb),
+		 SB_JOURNAL_MAX_COMMIT_AGE(p_s_sb),
+		 SB_JOURNAL_MAX_TRANS_AGE(p_s_sb));
 
   brelse (bhjh);
      
@@ -2401,11 +2410,11 @@
   jl = SB_JOURNAL(p_s_sb)->j_current_jl;
   jl->j_list_bitmap = get_list_bitmap(p_s_sb, jl);
   if (!jl->j_list_bitmap) {
-    reiserfs_warning("journal-2005, get_list_bitmap failed for journal list 0\n") ;
+    reiserfs_warning(p_s_sb, "journal-2005, get_list_bitmap failed for journal list 0") ;
     goto free_and_return;
   }
   if (journal_read(p_s_sb) < 0) {
-    reiserfs_warning("Replay Failure, unable to mount\n") ;
+    reiserfs_warning(p_s_sb, "Replay Failure, unable to mount") ;
     goto free_and_return;
   }
 
@@ -2522,7 +2531,7 @@
   struct reiserfs_transaction_handle myth;
   int sched_count = 0;
 
-  reiserfs_check_lock_depth("journal_begin") ;
+  reiserfs_check_lock_depth(p_s_sb, "journal_begin") ;
   RFALSE( p_s_sb->s_flags & MS_RDONLY, 
 	  "clm-2078: calling journal_begin on readonly FS") ;
 
@@ -2664,14 +2673,14 @@
 	      cur_th->t_refcount++ ;
 	      memcpy(th, cur_th, sizeof(*th));
 	      if (th->t_refcount <= 1)
-		      printk("BAD: refcount <= 1, but journal_info != 0\n");
+		      reiserfs_warning (p_s_sb, "BAD: refcount <= 1, but journal_info != 0");
 	      return 0;
 	} else {
 	    /* we've ended up with a handle from a different filesystem.
 	    ** save it and restore on journal_end.  This should never
 	    ** really happen...
 	    */
-	    reiserfs_warning("clm-2100: nesting info a different FS\n") ;
+	    reiserfs_warning(p_s_sb, "clm-2100: nesting info a different FS") ;
 	    th->t_handle_save = current->journal_info ;
 	    current->journal_info = th;
 	}
@@ -2718,14 +2727,16 @@
   ** could get to disk too early.  NOT GOOD.
   */
   if (!prepared || buffer_dirty(bh)) {
-    printk("journal-1777: buffer %llu bad state %cPREPARED %cLOCKED %cDIRTY %cJDIRTY_WAIT\n", (unsigned long long)bh->b_blocknr, prepared ? ' ' : '!', 
-                            buffer_locked(bh) ? ' ' : '!',
+    reiserfs_warning (p_s_sb, "journal-1777: buffer %llu bad state "
+		      "%cPREPARED %cLOCKED %cDIRTY %cJDIRTY_WAIT",
+		      (unsigned long long)bh->b_blocknr, prepared ? ' ' : '!',
+			    buffer_locked(bh) ? ' ' : '!',
 			    buffer_dirty(bh) ? ' ' : '!',
 			    buffer_journal_dirty(bh) ? ' ' : '!') ;
   }
 
   if (atomic_read(&(SB_JOURNAL(p_s_sb)->j_wcount)) <= 0) {
-    printk("journal-1409: journal_mark_dirty returning because j_wcount was %d\n", atomic_read(&(SB_JOURNAL(p_s_sb)->j_wcount))) ;
+    reiserfs_warning (p_s_sb, "journal-1409: journal_mark_dirty returning because j_wcount was %d", atomic_read(&(SB_JOURNAL(p_s_sb)->j_wcount))) ;
     return 1 ;
   }
   /* this error means I've screwed up, and we've overflowed the transaction.  
@@ -2785,7 +2796,8 @@
 
 int journal_end(struct reiserfs_transaction_handle *th, struct super_block *p_s_sb, unsigned long nblocks) {
   if (!current->journal_info && th->t_refcount > 1)
-    printk("REISER-NESTING: th NULL, refcount %d\n", th->t_refcount);
+    reiserfs_warning (p_s_sb, "REISER-NESTING: th NULL, refcount %d",
+                      th->t_refcount);
 
   th->t_refcount--;
   if (th->t_refcount > 0) {
@@ -2844,7 +2856,7 @@
     mark_buffer_notjournal_dirty(bh) ; 
     put_bh(bh) ;
     if (atomic_read(&(bh->b_count)) < 0) {
-      printk("journal-1752: remove from trans, b_count < 0\n") ;
+      reiserfs_warning (p_s_sb, "journal-1752: remove from trans, b_count < 0");
     }
     ret = 1 ;
   }
@@ -3142,7 +3154,7 @@
 	    cleaned = 1 ;
 	    put_bh(cn->bh) ;
 	    if (atomic_read(&(cn->bh->b_count)) < 0) {
-	      printk("journal-2138: cn->bh->b_count < 0\n") ;
+	      reiserfs_warning (p_s_sb, "journal-2138: cn->bh->b_count < 0");
 	    }
 	  }
 	  if (cn->jlist) { /* since we are clearing the bh, we MUST dec nonzerolen */
@@ -3158,7 +3170,7 @@
   if (bh) {
     put_bh(bh) ; /* get_hash grabs the buffer */
     if (atomic_read(&(bh->b_count)) < 0) {
-      printk("journal-2165: bh->b_count < 0\n") ;
+      reiserfs_warning (p_s_sb, "journal-2165: bh->b_count < 0");
     }
   }
   return 0 ;
@@ -3318,7 +3330,7 @@
     BUG() ;
 
   current->journal_info = th->t_handle_save;
-  reiserfs_check_lock_depth("journal end");
+  reiserfs_check_lock_depth(p_s_sb, "journal end");
   if (SB_JOURNAL(p_s_sb)->j_len == 0) {
       reiserfs_prepare_for_journal(p_s_sb, SB_BUFFER_WITH_SB(p_s_sb), 1) ;
       journal_mark_dirty(th, p_s_sb, SB_BUFFER_WITH_SB(p_s_sb)) ;
@@ -3480,7 +3492,7 @@
       clear_bit(BH_JDirty, &(cn->bh->b_state)) ;
     } else {
       /* JDirty cleared sometime during transaction.  don't log this one */
-      reiserfs_warning("journal-2048: do_journal_end: BAD, buffer in journal hash, but not JDirty!\n") ;
+      reiserfs_warning(p_s_sb, "journal-2048: do_journal_end: BAD, buffer in journal hash, but not JDirty!") ;
       brelse(cn->bh) ;
     }
     next = cn->next ;
@@ -3612,7 +3624,7 @@
 	  flush_commit_list(p_s_sb, jl, 1) ;
   }
 out:
-  reiserfs_check_lock_depth("journal end2");
+  reiserfs_check_lock_depth(p_s_sb, "journal end2");
   th->t_trans_id = 0;
   return 0 ;
 }
diff -Nru a/fs/reiserfs/lbalance.c b/fs/reiserfs/lbalance.c
--- a/fs/reiserfs/lbalance.c	Sun May 16 01:18:37 2004
+++ b/fs/reiserfs/lbalance.c	Sun May 16 01:18:37 2004
@@ -1210,10 +1210,10 @@
       prev = (i != 0) ? deh_location( &(deh[i - 1]) ) : 0;
       
       if (prev && prev <= deh_location( &(deh[i])))
-	reiserfs_warning ("vs-10240: leaf_paste_entries: directory item (%h) corrupted (prev %a, cur(%d) %a)\n", 
+	reiserfs_warning (NULL, "vs-10240: leaf_paste_entries: directory item (%h) corrupted (prev %a, cur(%d) %a)",
 			  ih, deh + i - 1, i, deh + i);
       if (next && next >= deh_location( &(deh[i])))
-	reiserfs_warning ("vs-10250: leaf_paste_entries: directory item (%h) corrupted (cur(%d) %a, next %a)\n",
+	reiserfs_warning (NULL, "vs-10250: leaf_paste_entries: directory item (%h) corrupted (cur(%d) %a, next %a)",
 			  ih, i, deh + i, deh + i + 1);
     }
   }
diff -Nru a/fs/reiserfs/namei.c b/fs/reiserfs/namei.c
--- a/fs/reiserfs/namei.c	Sun May 16 01:18:35 2004
+++ b/fs/reiserfs/namei.c	Sun May 16 01:18:35 2004
@@ -15,7 +15,10 @@
 #include <linux/time.h>
 #include <linux/bitops.h>
 #include <linux/reiserfs_fs.h>
+#include <linux/reiserfs_acl.h>
+#include <linux/reiserfs_xattr.h>
 #include <linux/smp_lock.h>
+#include <linux/quotaops.h>
 
 #define INC_DIR_INODE_NLINK(i) if (i->i_nlink != 1) { i->i_nlink++; if (i->i_nlink >= REISERFS_LINK_MAX) i->i_nlink=1; }
 #define DEC_DIR_INODE_NLINK(i) if (i->i_nlink != 1) i->i_nlink--;
@@ -123,7 +126,7 @@
     switch (retval) {
     case ITEM_NOT_FOUND:
 	if (!PATH_LAST_POSITION (path)) {
-	    reiserfs_warning ("vs-7000: search_by_entry_key: search_by_key returned item position == 0");
+	    reiserfs_warning (sb, "vs-7000: search_by_entry_key: search_by_key returned item position == 0");
 	    pathrelse(path) ;
 	    return IO_ERROR ;
 	}
@@ -137,7 +140,7 @@
 
     default:
 	pathrelse (path);
-	reiserfs_warning ("vs-7002: search_by_entry_key: no path to here");
+	reiserfs_warning (sb, "vs-7002: search_by_entry_key: no path to here");
 	return IO_ERROR;
     }
 
@@ -296,7 +299,8 @@
     while (1) {
 	retval = search_by_entry_key (dir->i_sb, &key_to_search, path_to_entry, de);
 	if (retval == IO_ERROR) {
-	    reiserfs_warning ("zam-7001: io error in %s\n", __FUNCTION__);
+	    reiserfs_warning (dir->i_sb, "zam-7001: io error in %s",
+			      __FUNCTION__);
 	    return IO_ERROR;
 	}
 
@@ -331,11 +335,24 @@
     retval = reiserfs_find_entry (dir, dentry->d_name.name, dentry->d_name.len, &path_to_entry, &de);
     pathrelse (&path_to_entry);
     if (retval == NAME_FOUND) {
+        /* Hide the .reiserfs_priv directory */
+	if (reiserfs_xattrs (dir->i_sb) &&
+	    !old_format_only(dir->i_sb) &&
+            REISERFS_SB(dir->i_sb)->priv_root &&
+            REISERFS_SB(dir->i_sb)->priv_root->d_inode &&
+	    de.de_objectid == le32_to_cpu (INODE_PKEY(REISERFS_SB(dir->i_sb)->priv_root->d_inode)->k_objectid)) {
+	  return ERR_PTR (-EACCES);
+	}
+
 	inode = reiserfs_iget (dir->i_sb, (struct cpu_key *)&(de.de_dir_id));
 	if (!inode || IS_ERR(inode)) {
 	    reiserfs_write_unlock(dir->i_sb);
 	    return ERR_PTR(-EACCES);
         }
+
+	/* Propogate the priv_object flag so we know we're in the priv tree */
+	if (is_reiserfs_priv_object (dir))
+	    REISERFS_I(inode)->i_flags |= i_priv_object;
     }
     reiserfs_write_unlock(dir->i_sb);
     if ( retval == IO_ERROR ) {
@@ -468,8 +485,9 @@
 	}
 
         if (retval != NAME_FOUND) {
-	    reiserfs_warning ("zam-7002:%s: \"reiserfs_find_entry\" has returned"
-                              " unexpected value (%d)\n", __FUNCTION__, retval);
+	    reiserfs_warning (dir->i_sb, "zam-7002:%s: \"reiserfs_find_entry\" "
+			      "has returned unexpected value (%d)",
+			      __FUNCTION__, retval);
        }
 
 	return -EEXIST;
@@ -478,7 +496,7 @@
     gen_number = find_first_zero_bit ((unsigned long *)bit_string, MAX_GENERATION_NUMBER + 1);
     if (gen_number > MAX_GENERATION_NUMBER) {
       /* there is no free generation number */
-      reiserfs_warning ("reiserfs_add_entry: Congratulations! we have got hash function screwed up\n");
+      reiserfs_warning (dir->i_sb, "reiserfs_add_entry: Congratulations! we have got hash function screwed up");
       if (buffer != small_buf)
           reiserfs_kfree (buffer, buflen, dir->i_sb);
       pathrelse (&path);
@@ -493,8 +511,9 @@
  		  
     if (gen_number != 0) {	/* we need to re-search for the insertion point */
       if (search_by_entry_key (dir->i_sb, &entry_key, &path, &de) != NAME_NOT_FOUND) {
-            reiserfs_warning ("vs-7032: reiserfs_add_entry: "
-                            "entry with this key (%K) already exists\n", &entry_key);
+            reiserfs_warning (dir->i_sb, "vs-7032: reiserfs_add_entry: "
+                              "entry with this key (%K) already exists",
+                              &entry_key);
 
 	    if (buffer != small_buf)
 		reiserfs_kfree (buffer, buflen, dir->i_sb);
@@ -504,7 +523,7 @@
     }
   
     /* perform the insertion of the entry that we have prepared */
-    retval = reiserfs_paste_into_item (th, &path, &entry_key, buffer, paste_size);
+    retval = reiserfs_paste_into_item (th, &path, &entry_key, dir, buffer, paste_size);
     if (buffer != small_buf)
 	reiserfs_kfree (buffer, buflen, dir->i_sb);
     if (retval) {
@@ -513,7 +532,6 @@
     }
 
     dir->i_size += paste_size;
-    dir->i_blocks = ((dir->i_size + 511) >> 9);
     dir->i_mtime = dir->i_ctime = CURRENT_TIME;
     if (!S_ISDIR (inode->i_mode) && visible)
 	// reiserfs_mkdir or reiserfs_rename will do that by itself
@@ -529,7 +547,9 @@
 ** inserted into the tree yet.
 */
 static int drop_new_inode(struct inode *inode) {
+    DQUOT_DROP(inode);
     make_bad_inode(inode) ;
+    inode->i_flags |= S_NOQUOTA;
     iput(inode) ;
     return 0 ;
 }
@@ -555,6 +575,11 @@
     } else {
         inode->i_gid = current->fsgid;
     }
+    DQUOT_INIT(inode);
+    if (DQUOT_ALLOC_INODE(inode)) {
+        drop_new_inode(inode);
+	return -EDQUOT;
+    }
     return 0 ;
 }
 
@@ -565,6 +590,7 @@
     struct inode * inode;
     int jbegin_count = JOURNAL_PER_BALANCE_CNT * 2 ;
     struct reiserfs_transaction_handle th ;
+    int locked;
 
     if (!(inode = new_inode(dir->i_sb))) {
 	return -ENOMEM ;
@@ -573,9 +599,19 @@
     if (retval)
         return retval;
 
+    locked = reiserfs_cache_default_acl (dir);
+
     reiserfs_write_lock(dir->i_sb);
+
+    if (locked)
+        reiserfs_write_lock_xattrs (dir->i_sb);
+
     journal_begin(&th, dir->i_sb, jbegin_count) ;
     retval = reiserfs_new_inode (&th, dir, mode, 0, 0/*i_size*/, dentry, inode);
+
+    if (locked)
+        reiserfs_write_unlock_xattrs (dir->i_sb);
+
     if (retval) {
         goto out_failed;
     }
@@ -611,6 +647,7 @@
     struct inode * inode;
     struct reiserfs_transaction_handle th ;
     int jbegin_count = JOURNAL_PER_BALANCE_CNT * 3; 
+    int locked;
 
     if (!new_valid_dev(rdev))
 	return -EINVAL;
@@ -622,15 +659,26 @@
     if (retval)
         return retval;
 
+    locked = reiserfs_cache_default_acl (dir);
+
     reiserfs_write_lock(dir->i_sb);
+
+    if (locked)
+        reiserfs_write_lock_xattrs (dir->i_sb);
+
     journal_begin(&th, dir->i_sb, jbegin_count) ;
 
     retval = reiserfs_new_inode (&th, dir, mode, 0, 0/*i_size*/, dentry, inode);
+
+    if (locked)
+        reiserfs_write_unlock_xattrs (dir->i_sb);
+
     if (retval) {
         goto out_failed;
     }
 
-    init_special_inode(inode, mode, rdev) ;
+    inode->i_op = &reiserfs_special_inode_operations;
+    init_special_inode(inode, inode->i_mode, rdev) ;
 
     //FIXME: needed for block and char devices only
     reiserfs_update_sd (&th, inode);
@@ -663,6 +711,7 @@
     struct inode * inode;
     struct reiserfs_transaction_handle th ;
     int jbegin_count = JOURNAL_PER_BALANCE_CNT * 3; 
+    int locked;
 
 #ifdef DISPLACE_NEW_PACKING_LOCALITIES
     /* set flag that new packing locality created and new blocks for the content     * of that directory are not displaced yet */
@@ -676,7 +725,11 @@
     if (retval)
         return retval;
 
+    locked = reiserfs_cache_default_acl (dir);
+
     reiserfs_write_lock(dir->i_sb);
+    if (locked)
+        reiserfs_write_lock_xattrs (dir->i_sb);
     journal_begin(&th, dir->i_sb, jbegin_count) ;
 
     /* inc the link count now, so another writer doesn't overflow it while
@@ -688,6 +741,9 @@
 				old_format_only (dir->i_sb) ? 
 				EMPTY_DIR_SIZE_V1 : EMPTY_DIR_SIZE,
 				dentry, inode);
+    if (locked)
+        reiserfs_write_unlock_xattrs (dir->i_sb);
+
     if (retval) {
 	dir->i_nlink-- ;
 	goto out_failed;
@@ -782,7 +838,8 @@
 	goto end_rmdir;
 
     if ( inode->i_nlink != 2 && inode->i_nlink != 1 )
-	printk ("reiserfs_rmdir: empty directory has nlink != 2 (%d)\n", inode->i_nlink);
+	reiserfs_warning (inode->i_sb, "%s: empty directory has nlink "
+			  "!= 2 (%d)", __FUNCTION__, inode->i_nlink);
 
     inode->i_nlink = 0;
     inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME;
@@ -790,7 +847,6 @@
 
     DEC_DIR_INODE_NLINK(dir)
     dir->i_size -= (DEH_SIZE + de.de_entrylen);
-    dir->i_blocks = ((dir->i_size + 511) >> 9);
     reiserfs_update_sd (&th, dir);
 
     /* prevent empty directory from getting lost */
@@ -850,8 +906,10 @@
     }
   
     if (!inode->i_nlink) {
-	printk("reiserfs_unlink: deleting nonexistent file (%s:%lu), %d\n",
-	       reiserfs_bdevname (inode->i_sb), inode->i_ino, inode->i_nlink);
+	reiserfs_warning (inode->i_sb, "%s: deleting nonexistent file "
+			  "(%s:%lu), %d", __FUNCTION__,
+			  reiserfs_bdevname (inode->i_sb), inode->i_ino,
+			  inode->i_nlink);
 	inode->i_nlink = 1;
     }
 
@@ -873,7 +931,6 @@
     reiserfs_update_sd (&th, inode);
 
     dir->i_size -= (de.de_entrylen + DEH_SIZE);
-    dir->i_blocks = ((dir->i_size + 511) >> 9);
     dir->i_ctime = dir->i_mtime = CURRENT_TIME;
     reiserfs_update_sd (&th, dir);
 
@@ -930,6 +987,8 @@
     memcpy (name, symname, strlen (symname));
     padd_item (name, item_len, strlen (symname));
 
+    /* We would inherit the default ACL here, but symlinks don't get ACLs */
+
     journal_begin(&th, parent_dir->i_sb, jbegin_count) ;
 
     retval = reiserfs_new_inode (&th, parent_dir, mode, name, strlen (symname), 
@@ -942,7 +1001,7 @@
     reiserfs_update_inode_transaction(inode) ;
     reiserfs_update_inode_transaction(parent_dir) ;
 
-    inode->i_op = &page_symlink_inode_operations;
+    inode->i_op = &reiserfs_symlink_inode_operations;
     inode->i_mapping->a_ops = &reiserfs_address_space_operations;
 
     // must be sure this inode is written with this transaction
@@ -1284,10 +1343,9 @@
     // anybody, but it will panic if will not be able to find the
     // entry. This needs one more clean up
     if (reiserfs_cut_from_item (&th, &old_entry_path, &(old_de.de_entry_key), old_dir, NULL, 0) < 0)
-	reiserfs_warning ("vs-7060: reiserfs_rename: couldn't not cut old name. Fsck later?\n");
+	reiserfs_warning (old_dir->i_sb, "vs-7060: reiserfs_rename: couldn't not cut old name. Fsck later?");
 
     old_dir->i_size -= DEH_SIZE + old_de.de_entrylen;
-    old_dir->i_blocks = ((old_dir->i_size + 511) >> 9);
 
     reiserfs_update_sd (&th, old_dir);
     reiserfs_update_sd (&th, new_dir);
@@ -1318,5 +1376,42 @@
     .rmdir	= reiserfs_rmdir,
     .mknod	= reiserfs_mknod,
     .rename	= reiserfs_rename,
+    .setattr    = reiserfs_setattr,
+    .setxattr   = reiserfs_setxattr,
+    .getxattr   = reiserfs_getxattr,
+    .listxattr  = reiserfs_listxattr,
+    .removexattr = reiserfs_removexattr,
+    .permission     = reiserfs_permission,
+};
+
+/*
+ * symlink operations.. same as page_symlink_inode_operations, with xattr
+ * stuff added
+ */
+struct inode_operations reiserfs_symlink_inode_operations = {
+    .readlink       = page_readlink,
+    .follow_link    = page_follow_link,
+    .setattr        = reiserfs_setattr,
+    .setxattr       = reiserfs_setxattr,
+    .getxattr       = reiserfs_getxattr,
+    .listxattr      = reiserfs_listxattr,
+    .removexattr    = reiserfs_removexattr,
+    .permission     = reiserfs_permission,
+
 };
+
+
+/*
+ * special file operations.. just xattr/acl stuff
+ */
+struct inode_operations reiserfs_special_inode_operations = {
+    .setattr        = reiserfs_setattr,
+    .setxattr       = reiserfs_setxattr,
+    .getxattr       = reiserfs_getxattr,
+    .listxattr      = reiserfs_listxattr,
+    .removexattr    = reiserfs_removexattr,
+    .permission     = reiserfs_permission,
+
+};
+
 
diff -Nru a/fs/reiserfs/objectid.c b/fs/reiserfs/objectid.c
--- a/fs/reiserfs/objectid.c	Sun May 16 01:18:34 2004
+++ b/fs/reiserfs/objectid.c	Sun May 16 01:18:34 2004
@@ -62,7 +62,7 @@
                                 /* comment needed -Hans */
     unused_objectid = le32_to_cpu (map[1]);
     if (unused_objectid == U32_MAX) {
-	printk ("REISERFS: get_objectid: no more object ids\n");
+	reiserfs_warning (s, "%s: no more object ids", __FUNCTION__);
 	reiserfs_restore_prepared_buffer(s, SB_BUFFER_WITH_SB(s)) ;
 	return 0;
     }
@@ -159,7 +159,7 @@
 	i += 2;
     }
 
-    reiserfs_warning ("vs-15011: reiserfs_release_objectid: tried to free free object id (%lu)\n", 
+    reiserfs_warning (s, "vs-15011: reiserfs_release_objectid: tried to free free object id (%lu)",
 		      ( long unsigned ) objectid_to_release);
 }
 
diff -Nru a/fs/reiserfs/prints.c b/fs/reiserfs/prints.c
--- a/fs/reiserfs/prints.c	Sun May 16 01:18:35 2004
+++ b/fs/reiserfs/prints.c	Sun May 16 01:18:35 2004
@@ -264,20 +264,43 @@
     va_end( args );\
 }
 
-void reiserfs_warning (const char * fmt, ...)
+void reiserfs_warning (struct super_block *sb, const char * fmt, ...)
 {
   do_reiserfs_warning(fmt);
-  /* console_print (error_buf); */
-  printk (KERN_WARNING "%s", error_buf);
+  if (sb)
+      printk (KERN_WARNING "ReiserFS: %s: warning: %s\n",
+             reiserfs_bdevname (sb), error_buf);
+  else
+      printk (KERN_WARNING "ReiserFS: warning: %s\n", error_buf);
+}
+
+/* No newline.. reiserfs_info calls can be followed by printk's */
+void reiserfs_info (struct super_block *sb, const char * fmt, ...)
+{
+  do_reiserfs_warning(fmt);
+  if (sb)
+      printk (KERN_NOTICE "ReiserFS: %s: %s",
+             reiserfs_bdevname (sb), error_buf);
+  else
+      printk (KERN_NOTICE "ReiserFS: %s", error_buf);
+}
+
+/* No newline.. reiserfs_printk calls can be followed by printk's */
+void reiserfs_printk (const char * fmt, ...)
+{
+  do_reiserfs_warning(fmt);
+  printk (error_buf);
 }
 
 void reiserfs_debug (struct super_block *s, int level, const char * fmt, ...)
 {
 #ifdef CONFIG_REISERFS_CHECK
   do_reiserfs_warning(fmt);
-  printk (KERN_DEBUG "%s", error_buf);
-#else
-  ; 
+  if (s)
+      printk (KERN_DEBUG "ReiserFS: %s: %s\n",
+             reiserfs_bdevname (s), error_buf);
+  else
+      printk (KERN_DEBUG "ReiserFS: %s\n", error_buf);
 #endif
 }
 
@@ -334,7 +357,8 @@
 void reiserfs_panic (struct super_block * sb, const char * fmt, ...)
 {
   do_reiserfs_warning(fmt);
-  printk ( KERN_EMERG "%s", error_buf);
+  printk (KERN_EMERG "REISERFS: panic (device %s): %s\n",
+          reiserfs_bdevname (sb), error_buf);
   BUG ();
 
   /* this is not actually called, but makes reiserfs_panic() "noreturn" */
@@ -413,13 +437,13 @@
 	to = last < B_NR_ITEMS (bh) ? last : B_NR_ITEMS (bh);
     }
 
-    reiserfs_warning ("INTERNAL NODE (%ld) contains %z\n",  bh->b_blocknr, bh);
+    reiserfs_printk ("INTERNAL NODE (%ld) contains %z\n",  bh->b_blocknr, bh);
     
     dc = B_N_CHILD (bh, from);
-    reiserfs_warning ("PTR %d: %y ", from, dc);
+    reiserfs_printk ("PTR %d: %y ", from, dc);
     
     for (i = from, key = B_N_PDELIM_KEY (bh, from), dc ++; i < to; i ++, key ++, dc ++) {
-	reiserfs_warning ("KEY %d: %k PTR %d: %y ", i, key, i + 1, dc);
+	reiserfs_printk ("KEY %d: %k PTR %d: %y ", i, key, i + 1, dc);
 	if (i && i % 4 == 0)
 	    printk ("\n");
     }
@@ -448,10 +472,10 @@
     nr = blkh_nr_item(blkh);
 
     printk ("\n===================================================================\n");
-    reiserfs_warning ("LEAF NODE (%ld) contains %z\n", bh->b_blocknr, bh);
+    reiserfs_printk ("LEAF NODE (%ld) contains %z\n", bh->b_blocknr, bh);
 
     if (!(print_mode & PRINT_LEAF_ITEMS)) {
-	reiserfs_warning ("FIRST ITEM_KEY: %k, LAST ITEM KEY: %k\n",
+	reiserfs_printk ("FIRST ITEM_KEY: %k, LAST ITEM KEY: %k\n",
 			  &(ih->ih_key), &((ih + nr - 1)->ih_key));
 	return 0;
     }
@@ -471,7 +495,7 @@
     printk ("|##|   type    |           key           | ilen | free_space | version | loc  |\n");
     for (i = from; i < to; i++, ih ++) {
 	printk ("-------------------------------------------------------------------------------\n");
-	reiserfs_warning ("|%2d| %h |\n", i, ih);
+	reiserfs_printk ("|%2d| %h |\n", i, ih);
 	if (print_mode & PRINT_LEAF_ITEMS)
 	    op_print_item (ih, B_I_PITEM (bh, ih));
     }
diff -Nru a/fs/reiserfs/procfs.c b/fs/reiserfs/procfs.c
--- a/fs/reiserfs/procfs.c	Sun May 16 01:18:34 2004
+++ b/fs/reiserfs/procfs.c	Sun May 16 01:18:34 2004
@@ -548,8 +548,8 @@
 		add_file(sb, "journal", show_journal);
 		return 0;
 	}
-	reiserfs_warning( "reiserfs: cannot create /proc/%s/%s\n",
-			  proc_info_root_name, reiserfs_bdevname (sb) );
+	reiserfs_warning(sb, "reiserfs: cannot create /proc/%s/%s",
+			 proc_info_root_name, reiserfs_bdevname (sb) );
 	return 1;
 }
 
@@ -595,7 +595,8 @@
 		if( proc_info_root ) {
 			proc_info_root -> owner = THIS_MODULE;
 		} else {
-			reiserfs_warning( "reiserfs: cannot create /proc/%s\n",
+			reiserfs_warning (NULL,
+					  "reiserfs: cannot create /proc/%s",
 					  proc_info_root_name );
 			return 1;
 		}
diff -Nru a/fs/reiserfs/stree.c b/fs/reiserfs/stree.c
--- a/fs/reiserfs/stree.c	Sun May 16 01:18:36 2004
+++ b/fs/reiserfs/stree.c	Sun May 16 01:18:36 2004
@@ -60,6 +60,7 @@
 #include <linux/reiserfs_fs.h>
 #include <linux/smp_lock.h>
 #include <linux/buffer_head.h>
+#include <linux/quotaops.h>
 
 /* Does the buffer contain a disk block which is in the tree. */
 inline int B_IS_IN_TREE (const struct buffer_head * p_s_bh)
@@ -71,9 +72,6 @@
   return ( B_LEVEL (p_s_bh) != FREE_LEVEL );
 }
 
-
-
-
 inline void copy_short_key (void * to, const void * from)
 {
     memcpy (to, from, SHORT_KEY_SIZE);
@@ -166,7 +164,7 @@
     if (cpu_key_k_offset (key1) > cpu_key_k_offset (key2))
 	return 1;
 
-    reiserfs_warning ("comp_cpu_keys: type are compared for %K and %K\n",
+    reiserfs_warning (NULL, "comp_cpu_keys: type are compared for %K and %K",
 		      key1, key2);
 
     if (cpu_key_k_type (key1) < cpu_key_k_type (key2))
@@ -499,21 +497,21 @@
 
     blkh = (struct block_head *)buf;
     if ( blkh_level(blkh) != DISK_LEAF_NODE_LEVEL) {
-	printk ("is_leaf: this should be caught earlier\n");
+	reiserfs_warning (NULL, "is_leaf: this should be caught earlier");
 	return 0;
     }
 
     nr = blkh_nr_item(blkh);
     if (nr < 1 || nr > ((blocksize - BLKH_SIZE) / (IH_SIZE + MIN_ITEM_LEN))) {
 	/* item number is too big or too small */
-	reiserfs_warning ("is_leaf: nr_item seems wrong: %z\n", bh);
+	reiserfs_warning (NULL, "is_leaf: nr_item seems wrong: %z", bh);
 	return 0;
     }
     ih = (struct item_head *)(buf + BLKH_SIZE) + nr - 1;
     used_space = BLKH_SIZE + IH_SIZE * nr + (blocksize - ih_location (ih));
     if (used_space != blocksize - blkh_free_space(blkh)) {
 	/* free space does not match to calculated amount of use space */
-	reiserfs_warning ("is_leaf: free space seems wrong: %z\n", bh);
+	reiserfs_warning (NULL, "is_leaf: free space seems wrong: %z", bh);
 	return 0;
     }
 
@@ -525,19 +523,19 @@
     prev_location = blocksize;
     for (i = 0; i < nr; i ++, ih ++) {
 	if ( le_ih_k_type(ih) == TYPE_ANY) {
-	    reiserfs_warning ("is_leaf: wrong item type for item %h\n",ih);
+	    reiserfs_warning (NULL, "is_leaf: wrong item type for item %h",ih);
 	    return 0;
 	}
 	if (ih_location (ih) >= blocksize || ih_location (ih) < IH_SIZE * nr) {
-	    reiserfs_warning ("is_leaf: item location seems wrong: %h\n", ih);
+	    reiserfs_warning (NULL, "is_leaf: item location seems wrong: %h", ih);
 	    return 0;
 	}
 	if (ih_item_len (ih) < 1 || ih_item_len (ih) > MAX_ITEM_LEN (blocksize)) {
-	    reiserfs_warning ("is_leaf: item length seems wrong: %h\n", ih);
+	    reiserfs_warning (NULL, "is_leaf: item length seems wrong: %h", ih);
 	    return 0;
 	}
 	if (prev_location - ih_location (ih) != ih_item_len (ih)) {
-	    reiserfs_warning ("is_leaf: item location seems wrong (second one): %h\n", ih);
+	    reiserfs_warning (NULL, "is_leaf: item location seems wrong (second one): %h", ih);
 	    return 0;
 	}
 	prev_location = ih_location (ih);
@@ -559,20 +557,20 @@
     nr = blkh_level(blkh);
     if (nr <= DISK_LEAF_NODE_LEVEL || nr > MAX_HEIGHT) {
 	/* this level is not possible for internal nodes */
-	printk ("is_internal: this should be caught earlier\n");
+	reiserfs_warning (NULL, "is_internal: this should be caught earlier");
 	return 0;
     }
     
     nr = blkh_nr_item(blkh);
     if (nr > (blocksize - BLKH_SIZE - DC_SIZE) / (KEY_SIZE + DC_SIZE)) {
 	/* for internal which is not root we might check min number of keys */
-	reiserfs_warning ("is_internal: number of key seems wrong: %z\n", bh);
+	reiserfs_warning (NULL, "is_internal: number of key seems wrong: %z", bh);
 	return 0;
     }
 
     used_space = BLKH_SIZE + KEY_SIZE * nr + DC_SIZE * (nr + 1);
     if (used_space != blocksize - blkh_free_space(blkh)) {
-	reiserfs_warning ("is_internal: free space seems wrong: %z\n", bh);
+	reiserfs_warning (NULL, "is_internal: free space seems wrong: %z", bh);
 	return 0;
     }
 
@@ -586,7 +584,7 @@
 static int is_tree_node (struct buffer_head * bh, int level)
 {
     if (B_LEVEL (bh) != level) {
-	printk ("is_tree_node: node level %d does not match to the expected one %d\n",
+	reiserfs_warning (NULL, "is_tree_node: node level %d does not match to the expected one %d",
 		B_LEVEL (bh), level);
 	return 0;
     }
@@ -683,9 +681,9 @@
 
 #ifdef CONFIG_REISERFS_CHECK
 	if ( !(++n_repeat_counter % 50000) )
-	    reiserfs_warning ("PAP-5100: search_by_key: %s:"
+	    reiserfs_warning (p_s_sb, "PAP-5100: search_by_key: %s:"
 			      "there were %d iterations of while loop "
-			      "looking for key %K\n",
+			      "looking for key %K",
 			      current->comm, n_repeat_counter, p_s_key);
 #endif
 
@@ -748,8 +746,8 @@
 	// make sure, that the node contents look like a node of
 	// certain level
 	if (!is_tree_node (p_s_bh, expected_level)) {
-	    reiserfs_warning ("vs-5150: search_by_key: "
-			      "invalid format found in block %ld. Fsck?\n", 
+	    reiserfs_warning (p_s_sb, "vs-5150: search_by_key: "
+			      "invalid format found in block %ld. Fsck?",
 			      p_s_bh->b_blocknr);
 	    pathrelse (p_s_search_path);
 	    return IO_ERROR;
@@ -1125,8 +1123,7 @@
 		tmp = get_block_num(p_n_unfm_pointer,0);
 		put_block_num(p_n_unfm_pointer, 0, 0);
 		journal_mark_dirty (th, p_s_sb, p_s_bh);
-		inode->i_blocks -= p_s_sb->s_blocksize / 512;
-		reiserfs_free_block(th, tmp);
+		reiserfs_free_block(th, inode, tmp, 1);
 		if ( item_moved (&s_ih, p_s_path) )  {
 			need_research = 1;
 			break ;
@@ -1155,8 +1152,7 @@
     }
 }
 
-
-/* Calculate bytes number which will be deleted or cutted in the balance. */
+/* Calculate number of bytes which will be deleted or cut during balance */
 int calc_deleted_bytes_number(
     struct  tree_balance  * p_s_tb,
     char                    c_mode
@@ -1167,14 +1163,14 @@
     if ( is_statdata_le_ih (p_le_ih) )
 	return 0;
 
+    n_del_size = ( c_mode == M_DELETE ) ? ih_item_len(p_le_ih) : -p_s_tb->insert_size[0];
     if ( is_direntry_le_ih (p_le_ih) ) {
 	// return EMPTY_DIR_SIZE; /* We delete emty directoris only. */
 	// we can't use EMPTY_DIR_SIZE, as old format dirs have a different
 	// empty size.  ick. FIXME, is this right?
 	//
-	return ih_item_len(p_le_ih);
+	return n_del_size ;
     }
-    n_del_size = ( c_mode == M_DELETE ) ? ih_item_len(p_le_ih) : -p_s_tb->insert_size[0];
 
     if ( is_indirect_le_ih (p_le_ih) )
 	n_del_size = (n_del_size/UNFM_P_SIZE)*
@@ -1208,17 +1204,46 @@
 	item [--i] = 0;
 }
 
+#ifdef REISERQUOTA_DEBUG
+char key2type(struct key *ih)
+{
+  if (is_direntry_le_key(2, ih))
+    return 'd';
+  if (is_direct_le_key(2, ih))
+    return 'D';
+  if (is_indirect_le_key(2, ih))
+    return 'i';
+  if (is_statdata_le_key(2, ih))
+    return 's';
+  return 'u';
+}
+
+char head2type(struct item_head *ih)
+{
+  if (is_direntry_le_ih(ih))
+    return 'd';
+  if (is_direct_le_ih(ih))
+    return 'D';
+  if (is_indirect_le_ih(ih))
+    return 'i';
+  if (is_statdata_le_ih(ih))
+    return 's';
+  return 'u';
+}
+#endif
 
 /* Delete object item. */
 int reiserfs_delete_item (struct reiserfs_transaction_handle *th, 
 			  struct path * p_s_path, /* Path to the deleted item. */
 			  const struct cpu_key * p_s_item_key, /* Key to search for the deleted item.  */
-			  struct inode * p_s_inode,/* inode is here just to update i_blocks */
+			  struct inode * p_s_inode,/* inode is here just to update i_blocks and quotas */
 			  struct buffer_head  * p_s_un_bh)    /* NULL or unformatted node pointer.    */
 {
     struct super_block * p_s_sb = p_s_inode->i_sb;
     struct tree_balance   s_del_balance;
     struct item_head      s_ih;
+    struct item_head      *q_ih;
+    int			  quota_cut_bytes;
     int                   n_ret_value,
 	n_del_size,
 	n_removed;
@@ -1255,8 +1280,8 @@
 	if (n_ret_value == IO_ERROR)
 	    break;
 	if (n_ret_value == FILE_NOT_FOUND) {
-	    reiserfs_warning ("vs-5340: reiserfs_delete_item: "
-			      "no items of the file %K found\n", p_s_item_key);
+	    reiserfs_warning (p_s_sb, "vs-5340: reiserfs_delete_item: "
+			      "no items of the file %K found", p_s_item_key);
 	    break;
 	}
     } /* while (1) */
@@ -1268,6 +1293,22 @@
 
     // reiserfs_delete_item returns item length when success
     n_ret_value = calc_deleted_bytes_number(&s_del_balance, M_DELETE);
+    q_ih = get_ih(p_s_path) ;
+    quota_cut_bytes = ih_item_len(q_ih) ;
+
+    /* hack so the quota code doesn't have to guess if the file
+    ** has a tail.  On tail insert, we allocate quota for 1 unformatted node.
+    ** We test the offset because the tail might have been
+    ** split into multiple items, and we only want to decrement for
+    ** the unfm node once
+    */
+    if (!S_ISLNK (p_s_inode->i_mode) && is_direct_le_ih(q_ih)) {
+        if ((le_ih_k_offset(q_ih) & (p_s_sb->s_blocksize - 1)) == 1) {
+            quota_cut_bytes = p_s_sb->s_blocksize + UNFM_P_SIZE;
+        } else {
+	    quota_cut_bytes = 0 ;
+	}
+    }
 
     if ( p_s_un_bh )  {
 	int off;
@@ -1299,10 +1340,14 @@
 	       B_I_PITEM(PATH_PLAST_BUFFER(p_s_path), &s_ih), n_ret_value);
 	kunmap_atomic(data, KM_USER0);
     }
-
     /* Perform balancing after all resources have been collected at once. */ 
     do_balance(&s_del_balance, NULL, NULL, M_DELETE);
 
+#ifdef REISERQUOTA_DEBUG
+    reiserfs_debug (p_s_sb, "reiserquota delete_item(): freeing %u, id=%u type=%c", quota_cut_bytes, p_s_inode->i_uid, head2type(&s_ih));
+#endif
+    DQUOT_FREE_SPACE_NODIRTY(p_s_inode, quota_cut_bytes);
+
     /* Return deleted body length */
     return n_ret_value;
 }
@@ -1327,22 +1372,26 @@
 
 /* this deletes item which never gets split */
 void reiserfs_delete_solid_item (struct reiserfs_transaction_handle *th,
+				 struct inode *inode,
 				 struct key * key)
 {
     struct tree_balance tb;
     INITIALIZE_PATH (path);
-    int item_len;
+    int item_len = 0;
     int tb_init = 0 ;
     struct cpu_key cpu_key;
     int retval;
+    int quota_cut_bytes = 0;
     
     le_key2cpu_key (&cpu_key, key);
     
     while (1) {
 	retval = search_item (th->t_super, &cpu_key, &path);
 	if (retval == IO_ERROR) {
-	    reiserfs_warning ("vs-5350: reiserfs_delete_solid_item: "
-			      "i/o failure occurred trying to delete %K\n", &cpu_key);
+	    reiserfs_warning (th->t_super,
+			      "vs-5350: reiserfs_delete_solid_item: "
+			      "i/o failure occurred trying to delete %K",
+			      &cpu_key);
 	    break;
 	}
 	if (retval != ITEM_FOUND) {
@@ -1350,7 +1399,7 @@
 	    // No need for a warning, if there is just no free space to insert '..' item into the newly-created subdir
 	    if ( !( (unsigned long long) GET_HASH_VALUE (le_key_k_offset (le_key_version (key), key)) == 0 && \
 		 (unsigned long long) GET_GENERATION_NUMBER (le_key_k_offset (le_key_version (key), key)) == 1 ) )
-		reiserfs_warning ("vs-5355: reiserfs_delete_solid_item: %k not found", key);
+		reiserfs_warning (th->t_super, "vs-5355: reiserfs_delete_solid_item: %k not found", key);
 	    break;
 	}
 	if (!tb_init) {
@@ -1358,6 +1407,7 @@
 	    item_len = ih_item_len( PATH_PITEM_HEAD(&path) );
 	    init_tb_struct (th, &tb, th->t_super, &path, - (IH_SIZE + item_len));
 	}
+	quota_cut_bytes = ih_item_len(PATH_PITEM_HEAD(&path)) ;
 
 	retval = fix_nodes (M_DELETE, &tb, NULL, 0);
 	if (retval == REPEAT_SEARCH) {
@@ -1367,12 +1417,18 @@
 
 	if (retval == CARRY_ON) {
 	    do_balance (&tb, 0, 0, M_DELETE);
+	    if (inode) {	/* Should we count quota for item? (we don't count quotas for save-links) */
+#ifdef REISERQUOTA_DEBUG
+		reiserfs_debug (th->t_super, "reiserquota delete_solid_item(): freeing %u id=%u type=%c", quota_cut_bytes, inode->i_uid, key2type(key));
+#endif
+		DQUOT_FREE_SPACE_NODIRTY(inode, quota_cut_bytes);
+	    }
 	    break;
 	}
 
 	// IO_ERROR, NO_DISK_SPACE, etc
-	reiserfs_warning ("vs-5360: reiserfs_delete_solid_item: "
-			  "could not delete %K due to fix_nodes failure\n", &cpu_key);
+	reiserfs_warning (th->t_super, "vs-5360: reiserfs_delete_solid_item: "
+			  "could not delete %K due to fix_nodes failure", &cpu_key);
 	unfix_nodes (&tb);
 	break;
     }
@@ -1399,7 +1455,7 @@
       }
 /* USE_INODE_GENERATION_COUNTER */
 #endif
-    reiserfs_delete_solid_item (th, INODE_PKEY (inode));
+    reiserfs_delete_solid_item (th, inode, INODE_PKEY (inode));
 }
 
 
@@ -1466,7 +1522,7 @@
 	tail_len -= removed;
 	set_cpu_key_k_offset (&tail_key, cpu_key_k_offset (&tail_key) - removed);
     }
-    printk ("indirect_to_direct_roll_back: indirect_to_direct conversion has been rolled back due to lack of disk space\n");
+    reiserfs_warning (inode->i_sb, "indirect_to_direct_roll_back: indirect_to_direct conversion has been rolled back due to lack of disk space");
     //mark_file_without_tail (inode);
     mark_inode_dirty (inode);
 }
@@ -1486,12 +1542,14 @@
        structure by using the init_tb_struct and fix_nodes functions.
        After that we can make tree balancing. */
     struct tree_balance s_cut_balance;
+    struct item_head *p_le_ih;
     int n_cut_size = 0,        /* Amount to be cut. */
 	n_ret_value = CARRY_ON,
 	n_removed = 0,     /* Number of the removed unformatted nodes. */
 	n_is_inode_locked = 0;
     char                c_mode;            /* Mode of the balance. */
     int retval2 = -1;
+    int quota_cut_bytes;
     
     
     init_tb_struct(th, &s_cut_balance, p_s_inode->i_sb, p_s_path, n_cut_size);
@@ -1556,7 +1614,7 @@
 	if (n_ret_value == POSITION_FOUND)
 	    continue;
 
-	reiserfs_warning ("PAP-5610: reiserfs_cut_from_item: item %K not found\n", p_s_item_key);
+	reiserfs_warning (p_s_sb, "PAP-5610: reiserfs_cut_from_item: item %K not found", p_s_item_key);
 	unfix_nodes (&s_cut_balance);
 	return (n_ret_value == IO_ERROR) ? -EIO : -ENOENT;
     } /* while */
@@ -1569,7 +1627,7 @@
 	    indirect_to_direct_roll_back (th, p_s_inode, p_s_path);
 	}
 	if (n_ret_value == NO_DISK_SPACE)
-	    reiserfs_warning ("NO_DISK_SPACE");
+	    reiserfs_warning (p_s_sb, "NO_DISK_SPACE");
 	unfix_nodes (&s_cut_balance);
 	return -EIO;
     }
@@ -1579,23 +1637,27 @@
     RFALSE( c_mode == M_PASTE || c_mode == M_INSERT, "invalid mode");
 
     /* Calculate number of bytes that need to be cut from the item. */
+    quota_cut_bytes = ( c_mode == M_DELETE ) ? ih_item_len(get_ih(p_s_path)) : -s_cut_balance.insert_size[0];
     if (retval2 == -1)
 	n_ret_value = calc_deleted_bytes_number(&s_cut_balance, c_mode);
     else
 	n_ret_value = retval2;
-    
-    if ( c_mode == M_DELETE ) {
-	struct item_head * p_le_ih = PATH_PITEM_HEAD (s_cut_balance.tb_path);
-	
-	if ( is_direct_le_ih (p_le_ih) && (le_ih_k_offset (p_le_ih) & (p_s_sb->s_blocksize - 1)) == 1 ) {
-	    /* we delete first part of tail which was stored in direct
-               item(s) */
+
+
+    /* For direct items, we only change the quota when deleting the last
+    ** item.
+    */
+    p_le_ih = PATH_PITEM_HEAD (s_cut_balance.tb_path);
+    if (!S_ISLNK (p_s_inode->i_mode) && is_direct_le_ih(p_le_ih)) {
+        if (c_mode == M_DELETE &&
+	   (le_ih_k_offset (p_le_ih) & (p_s_sb->s_blocksize - 1)) == 1 ) {
 	    // FIXME: this is to keep 3.5 happy
 	    REISERFS_I(p_s_inode)->i_first_direct_byte = U32_MAX;
-	    p_s_inode->i_blocks -= p_s_sb->s_blocksize / 512;
+	    quota_cut_bytes = p_s_sb->s_blocksize + UNFM_P_SIZE ;
+        } else {
+	    quota_cut_bytes = 0 ;
 	}
     }
-
 #ifdef CONFIG_REISERFS_CHECK
     if (n_is_inode_locked) {
 	struct item_head * le_ih = PATH_PITEM_HEAD (s_cut_balance.tb_path);
@@ -1630,19 +1692,23 @@
 	*/
 	REISERFS_I(p_s_inode)->i_flags &= ~i_pack_on_close_mask ;
     }
+#ifdef REISERQUOTA_DEBUG
+    reiserfs_debug (p_s_inode->i_sb, "reiserquota cut_from_item(): freeing %u id=%u type=%c", quota_cut_bytes, p_s_inode->i_uid, '?');
+#endif
+    DQUOT_FREE_SPACE_NODIRTY(p_s_inode, quota_cut_bytes);
     return n_ret_value;
 }
 
-
 static void truncate_directory (struct reiserfs_transaction_handle *th, struct inode * inode)
 {
     if (inode->i_nlink)
-	reiserfs_warning ("vs-5655: truncate_directory: link count != 0\n");
+	reiserfs_warning (inode->i_sb,
+			  "vs-5655: truncate_directory: link count != 0");
 
     set_le_key_k_offset (KEY_FORMAT_3_5, INODE_PKEY (inode), DOT_OFFSET);
     set_le_key_k_type (KEY_FORMAT_3_5, INODE_PKEY (inode), TYPE_DIRENTRY);
-    reiserfs_delete_solid_item (th, INODE_PKEY (inode));
-
+    reiserfs_delete_solid_item (th, inode, INODE_PKEY (inode));
+    reiserfs_update_sd(th, inode) ;
     set_le_key_k_offset (KEY_FORMAT_3_5, INODE_PKEY (inode), SD_OFFSET);
     set_le_key_k_type (KEY_FORMAT_3_5, INODE_PKEY (inode), TYPE_STAT_DATA);    
 }
@@ -1686,14 +1752,14 @@
 
     retval = search_for_position_by_key(p_s_inode->i_sb, &s_item_key, &s_search_path);
     if (retval == IO_ERROR) {
-	reiserfs_warning ("vs-5657: reiserfs_do_truncate: "
-			  "i/o failure occurred trying to truncate %K\n", &s_item_key);
+	reiserfs_warning (p_s_inode->i_sb, "vs-5657: reiserfs_do_truncate: "
+			  "i/o failure occurred trying to truncate %K", &s_item_key);
 	return;
     }
     if (retval == POSITION_FOUND || retval == FILE_NOT_FOUND) {
 	pathrelse (&s_search_path);
-	reiserfs_warning ("PAP-5660: reiserfs_do_truncate: "
-			  "wrong result %d of search for %K\n", retval, &s_item_key);
+	reiserfs_warning (p_s_inode->i_sb, "PAP-5660: reiserfs_do_truncate: "
+			  "wrong result %d of search for %K", retval, &s_item_key);
 	return;
     }
 
@@ -1724,7 +1790,7 @@
 	/* Cut or delete file item. */
 	n_deleted = reiserfs_cut_from_item(th, &s_search_path, &s_item_key, p_s_inode,  page, n_new_file_size);
 	if (n_deleted < 0) {
-	    reiserfs_warning ("vs-5665: reiserfs_do_truncate: reiserfs_cut_from_item failed");
+	    reiserfs_warning (p_s_inode->i_sb, "vs-5665: reiserfs_do_truncate: reiserfs_cut_from_item failed");
 	    reiserfs_check_path(&s_search_path) ;
 	    return;
 	}
@@ -1764,7 +1830,7 @@
 	      search_for_position_by_key(p_s_inode->i_sb, &s_item_key, &s_search_path) == POSITION_FOUND )  ;
 
     RFALSE( n_file_size > ROUND_UP (n_new_file_size),
-	    "PAP-5680: truncate did not finish: new_file_size %Ld, current %Ld, oid %d\n",
+	    "PAP-5680: truncate did not finish: new_file_size %Ld, current %Ld, oid %d",
 	    n_new_file_size, n_file_size, s_item_key.on_disk_key.k_objectid);
 
 update_and_out:
@@ -1809,18 +1875,37 @@
 int reiserfs_paste_into_item (struct reiserfs_transaction_handle *th, 
 			      struct path         * p_s_search_path,	/* Path to the pasted item.          */
 			      const struct cpu_key      * p_s_key,        	/* Key to search for the needed item.*/
+			      struct inode	  * inode,		/* Inode item belongs to */
 			      const char          * p_c_body,       	/* Pointer to the bytes to paste.    */
 			      int                   n_pasted_size)  	/* Size of pasted bytes.             */
 {
     struct tree_balance s_paste_balance;
     int                 retval;
+    int			fs_gen;
+
+    fs_gen = get_generation(inode->i_sb) ;
 
+#ifdef REISERQUOTA_DEBUG
+    reiserfs_debug (inode->i_sb, "reiserquota paste_into_item(): allocating %u id=%u type=%c", n_pasted_size, inode->i_uid, key2type(&(p_s_key->on_disk_key)));
+#endif
+
+    if (DQUOT_ALLOC_SPACE_NODIRTY(inode, n_pasted_size)) {
+	pathrelse(p_s_search_path);
+	return -EDQUOT;
+    }
     init_tb_struct(th, &s_paste_balance, th->t_super, p_s_search_path, n_pasted_size);
 #ifdef DISPLACE_NEW_PACKING_LOCALITIES
     s_paste_balance.key = p_s_key->on_disk_key;
 #endif
-    
-    while ( (retval = fix_nodes(M_PASTE, &s_paste_balance, NULL, p_c_body)) == REPEAT_SEARCH ) {
+
+    /* DQUOT_* can schedule, must check before the fix_nodes */
+    if (fs_changed(fs_gen, inode->i_sb)) {
+	goto search_again;
+    }
+
+    while ((retval = fix_nodes(M_PASTE, &s_paste_balance, NULL, p_c_body)) ==
+REPEAT_SEARCH ) {
+search_again:
 	/* file system changed while we were in the fix_nodes */
 	PROC_INFO_INC( th -> t_super, paste_into_item_restarted );
 	retval = search_for_position_by_key (th->t_super, p_s_key, p_s_search_path);
@@ -1829,7 +1914,7 @@
 	    goto error_out ;
 	}
 	if (retval == POSITION_FOUND) {
-	    reiserfs_warning ("PAP-5710: reiserfs_paste_into_item: entry or pasted byte (%K) exists\n", p_s_key);
+	    reiserfs_warning (inode->i_sb, "PAP-5710: reiserfs_paste_into_item: entry or pasted byte (%K) exists", p_s_key);
 	    retval = -EEXIST ;
 	    goto error_out ;
 	}
@@ -1849,6 +1934,10 @@
 error_out:
     /* this also releases the path */
     unfix_nodes(&s_paste_balance);
+#ifdef REISERQUOTA_DEBUG
+    reiserfs_debug (inode->i_sb, "reiserquota paste_into_item(): freeing %u id=%u type=%c", n_pasted_size, inode->i_uid, key2type(&(p_s_key->on_disk_key)));
+#endif
+    DQUOT_FREE_SPACE_NODIRTY(inode, n_pasted_size);
     return retval ;
 }
 
@@ -1858,23 +1947,45 @@
 			 struct path         * 	p_s_path,         /* Path to the inserteded item.         */
 			 const struct cpu_key      * key,
 			 struct item_head    * 	p_s_ih,           /* Pointer to the item header to insert.*/
+			 struct inode        * inode,
 			 const char          * 	p_c_body)         /* Pointer to the bytes to insert.      */
 {
     struct tree_balance s_ins_balance;
     int                 retval;
+    int fs_gen = 0 ;
+    int quota_bytes = 0 ;
 
+    if (inode) {      /* Do we count quotas for item? */
+	fs_gen = get_generation(inode->i_sb);
+	quota_bytes = ih_item_len(p_s_ih);
+
+	/* hack so the quota code doesn't have to guess if the file has
+	 ** a tail, links are always tails, so there's no guessing needed
+	 */
+	if (!S_ISLNK (inode->i_mode) && is_direct_le_ih(p_s_ih)) {
+	    quota_bytes = inode->i_sb->s_blocksize + UNFM_P_SIZE ;
+	}
+#ifdef REISERQUOTA_DEBUG
+	reiserfs_debug (inode->i_sb, "reiserquota insert_item(): allocating %u id=%u type=%c", quota_bytes, inode->i_uid, head2type(p_s_ih));
+#endif
+	/* We can't dirty inode here. It would be immediately written but
+	 * appropriate stat item isn't inserted yet... */
+	if (DQUOT_ALLOC_SPACE_NODIRTY(inode, quota_bytes)) {
+	    pathrelse(p_s_path);
+	    return -EDQUOT;
+	}
+    }
     init_tb_struct(th, &s_ins_balance, th->t_super, p_s_path, IH_SIZE + ih_item_len(p_s_ih));
 #ifdef DISPLACE_NEW_PACKING_LOCALITIES
     s_ins_balance.key = key->on_disk_key;
 #endif
-
-    /*
-    if (p_c_body == 0)
-      n_zeros_num = ih_item_len(p_s_ih);
-    */
-    //    le_key2cpu_key (&key, &(p_s_ih->ih_key));
+    /* DQUOT_* can schedule, must check to be sure calling fix_nodes is safe */
+    if (inode && fs_changed(fs_gen, inode->i_sb)) {
+	goto search_again;
+    }
 
     while ( (retval = fix_nodes(M_INSERT, &s_ins_balance, p_s_ih, p_c_body)) == REPEAT_SEARCH) {
+search_again:
 	/* file system changed while we were in the fix_nodes */
 	PROC_INFO_INC( th -> t_super, insert_item_restarted );
 	retval = search_item (th->t_super, key, p_s_path);
@@ -1883,8 +1994,8 @@
 	    goto error_out ;
 	}
 	if (retval == ITEM_FOUND) {
-	    reiserfs_warning ("PAP-5760: reiserfs_insert_item: "
-			      "key %K already exists in the tree\n", key);
+	    reiserfs_warning (th->t_super, "PAP-5760: reiserfs_insert_item: "
+			      "key %K already exists in the tree", key);
 	    retval = -EEXIST ;
 	    goto error_out; 
 	}
@@ -1900,6 +2011,11 @@
 error_out:
     /* also releases the path */
     unfix_nodes(&s_ins_balance);
+#ifdef REISERQUOTA_DEBUG
+    reiserfs_debug (th->t_super, "reiserquota insert_item(): freeing %u id=%u type=%c", quota_bytes, inode->i_uid, head2type(p_s_ih));
+#endif
+    if (inode)
+	DQUOT_FREE_SPACE_NODIRTY(inode, quota_bytes) ;
     return retval; 
 }
 
diff -Nru a/fs/reiserfs/super.c b/fs/reiserfs/super.c
--- a/fs/reiserfs/super.c	Sun May 16 01:18:35 2004
+++ b/fs/reiserfs/super.c	Sun May 16 01:18:35 2004
@@ -17,6 +17,8 @@
 #include <linux/time.h>
 #include <asm/uaccess.h>
 #include <linux/reiserfs_fs.h>
+#include <linux/reiserfs_acl.h>
+#include <linux/reiserfs_xattr.h>
 #include <linux/smp_lock.h>
 #include <linux/init.h>
 #include <linux/blkdev.h>
@@ -113,7 +115,7 @@
      /* we are going to do one balancing */
      journal_begin (&th, s, JOURNAL_PER_BALANCE_CNT);
  
-     reiserfs_delete_solid_item (&th, key);
+     reiserfs_delete_solid_item (&th, NULL, key);
      if (oid_free)
         /* removals are protected by direct items */
         reiserfs_release_objectid (&th, le32_to_cpu (key->k_objectid));
@@ -148,7 +150,7 @@
     while (1) {
         retval = search_item (s, &max_cpu_key, &path);
         if (retval != ITEM_NOT_FOUND) {
-            reiserfs_warning ("vs-2140: finish_unfinished: search_by_key returned %d\n",
+            reiserfs_warning (s, "vs-2140: finish_unfinished: search_by_key returned %d",
                               retval);
             break;
         }
@@ -156,7 +158,7 @@
         bh = get_last_bh (&path);
         item_pos = get_item_pos (&path);
         if (item_pos != B_NR_ITEMS (bh)) {
-            reiserfs_warning ("vs-2060: finish_unfinished: wrong position found\n");
+            reiserfs_warning (s, "vs-2060: finish_unfinished: wrong position found");
             break;
         }
         item_pos --;
@@ -185,7 +187,7 @@
         if (!inode) {
             /* the unlink almost completed, it just did not manage to remove
 	       "save" link and release objectid */
-            reiserfs_warning ("vs-2180: finish_unfinished: iget failed for %K\n",
+            reiserfs_warning (s, "vs-2180: finish_unfinished: iget failed for %K",
                               &obj_key);
             remove_save_link_only (s, &save_link_key, 1);
             continue;
@@ -193,7 +195,7 @@
 
 	if (!truncate && inode->i_nlink) {
 	    /* file is not unlinked */
-            reiserfs_warning ("vs-2185: finish_unfinished: file %K is not unlinked\n",
+            reiserfs_warning (s, "vs-2185: finish_unfinished: file %K is not unlinked",
                               &obj_key);
             remove_save_link_only (s, &save_link_key, 0);
             continue;
@@ -204,7 +206,7 @@
 	       The only imaginable way is to execute unfinished truncate request
 	       then boot into old kernel, remove the file and create dir with
 	       the same key. */
-	    reiserfs_warning("green-2101: impossible truncate on a directory %k. Please report\n", INODE_PKEY (inode));
+	    reiserfs_warning(s, "green-2101: impossible truncate on a directory %k. Please report", INODE_PKEY (inode));
 	    remove_save_link_only (s, &save_link_key, 0);
 	    truncate = 0;
 	    iput (inode); 
@@ -215,14 +217,14 @@
             REISERFS_I(inode) -> i_flags |= i_link_saved_truncate_mask;
             /* not completed truncate found. New size was committed together
 	       with "save" link */
-            reiserfs_warning ("Truncating %k to %Ld ..",
+            reiserfs_info (s, "Truncating %k to %Ld ..",
                               INODE_PKEY (inode), inode->i_size);
             reiserfs_truncate_file (inode, 0/*don't update modification time*/);
             remove_save_link (inode, truncate);
         } else {
             REISERFS_I(inode) -> i_flags |= i_link_saved_unlink_mask;
             /* not completed unlink (rmdir) found */
-            reiserfs_warning ("Removing %k..", INODE_PKEY (inode));
+            reiserfs_info (s, "Removing %k..", INODE_PKEY (inode));
             /* removal gets completed in iput */
         }
  
@@ -234,7 +236,7 @@
      
     pathrelse (&path);
     if (done)
-        reiserfs_warning ("There were %d uncompleted unlinks/truncates. "
+        reiserfs_info (s, "There were %d uncompleted unlinks/truncates. "
                           "Completed\n", done);
 }
  
@@ -276,7 +278,7 @@
     } else {
 	/* truncate */
 	if (S_ISDIR (inode->i_mode))
-	    reiserfs_warning("green-2102: Adding a truncate savelink for a directory %k! Please report\n", INODE_PKEY(inode));
+	    reiserfs_warning(inode->i_sb, "green-2102: Adding a truncate savelink for a directory %k! Please report", INODE_PKEY(inode));
 	set_cpu_key_k_offset (&key, 1);
 	set_cpu_key_k_type (&key, TYPE_INDIRECT);
 
@@ -290,8 +292,8 @@
     retval = search_item (inode->i_sb, &key, &path);
     if (retval != ITEM_NOT_FOUND) {
 	if ( retval != -ENOSPC )
-	    reiserfs_warning ("vs-2100: add_save_link:"
-			  "search_by_key (%K) returned %d\n", &key, retval);
+	    reiserfs_warning (inode->i_sb, "vs-2100: add_save_link:"
+			  "search_by_key (%K) returned %d", &key, retval);
 	pathrelse (&path);
 	return;
     }
@@ -299,11 +301,11 @@
     /* body of "save" link */
     link = INODE_PKEY (inode)->k_dir_id;
 
-    /* put "save" link inot tree */
-    retval = reiserfs_insert_item (th, &path, &key, &ih, (char *)&link);
+    /* put "save" link inot tree, don't charge quota to anyone */
+    retval = reiserfs_insert_item (th, &path, &key, &ih, NULL, (char *)&link);
     if (retval) {
 	if (retval != -ENOSPC)
-	    reiserfs_warning ("vs-2120: add_save_link: insert_item returned %d\n",
+	    reiserfs_warning (inode->i_sb, "vs-2120: add_save_link: insert_item returned %d",
 			  retval);
     } else {
 	if( truncate )
@@ -342,7 +344,8 @@
           ( REISERFS_I(inode) -> i_flags & i_link_saved_truncate_mask ) ) ||
         ( !truncate && 
           ( REISERFS_I(inode) -> i_flags & i_link_saved_unlink_mask ) ) )
-	reiserfs_delete_solid_item (&th, &key);
+	/* don't take quota bytes from anywhere */
+	reiserfs_delete_solid_item (&th, NULL, &key);
     if (!truncate) {
 	reiserfs_release_objectid (&th, inode->i_ino);
 	REISERFS_I(inode) -> i_flags &= ~i_link_saved_unlink_mask;
@@ -357,7 +360,17 @@
 {
   int i;
   struct reiserfs_transaction_handle th ;
+
+  if (REISERFS_SB(s)->xattr_root) {
+    d_invalidate (REISERFS_SB(s)->xattr_root);
+    dput (REISERFS_SB(s)->xattr_root);
+  }
   
+  if (REISERFS_SB(s)->priv_root) {
+    d_invalidate (REISERFS_SB(s)->priv_root);
+    dput (REISERFS_SB(s)->priv_root);
+  }
+
   /* change file system state to current state if it was mounted with read-write permissions */
   if (!(s->s_flags & MS_RDONLY)) {
     journal_begin(&th, s, 10) ;
@@ -381,12 +394,12 @@
   print_statistics (s);
 
   if (REISERFS_SB(s)->s_kmallocs != 0) {
-    reiserfs_warning ("vs-2004: reiserfs_put_super: allocated memory left %d\n",
+    reiserfs_warning (s, "vs-2004: reiserfs_put_super: allocated memory left %d",
 		      REISERFS_SB(s)->s_kmallocs);
   }
 
   if (REISERFS_SB(s)->reserved_blocks != 0) {
-    reiserfs_warning ("green-2005: reiserfs_put_super: reserved blocks left %d\n",
+    reiserfs_warning (s, "green-2005: reiserfs_put_super: reserved blocks left %d",
 		      REISERFS_SB(s)->reserved_blocks);
   }
 
@@ -422,6 +435,8 @@
 	    SLAB_CTOR_CONSTRUCTOR) {
 		INIT_LIST_HEAD(&ei->i_prealloc_list) ;
 		inode_init_once(&ei->vfs_inode);
+		ei->i_acl_access = NULL;
+		ei->i_acl_default = NULL;
 	}
 }
  
@@ -439,7 +454,7 @@
 static void destroy_inodecache(void)
 {
 	if (kmem_cache_destroy(reiserfs_inode_cachep))
-		printk(KERN_INFO "reiserfs_inode_cache: not all structures were freed\n");
+		reiserfs_warning (NULL, "reiserfs_inode_cache: not all structures were freed");
 }
 
 /* we don't mark inodes dirty, we just log them */
@@ -447,7 +462,7 @@
     struct reiserfs_transaction_handle th ;
 
     if (inode->i_sb->s_flags & MS_RDONLY) {
-        reiserfs_warning("clm-6006: writing inode %lu on readonly FS\n", 
+        reiserfs_warning(inode->i_sb, "clm-6006: writing inode %lu on readonly FS",
 	                  inode->i_ino) ;
         return ;
     }
@@ -462,6 +477,22 @@
     reiserfs_write_unlock(inode->i_sb);
 }
 
+static void reiserfs_clear_inode (struct inode *inode)
+{
+    struct posix_acl *acl;
+
+    acl = REISERFS_I(inode)->i_acl_access;
+    if (acl && !IS_ERR (acl))
+        posix_acl_release (acl);
+    REISERFS_I(inode)->i_acl_access = NULL;
+
+    acl = REISERFS_I(inode)->i_acl_default;
+    if (acl && !IS_ERR (acl))
+        posix_acl_release (acl);
+    REISERFS_I(inode)->i_acl_default = NULL;
+}
+
+
 struct super_operations reiserfs_sops = 
 {
   .alloc_inode = reiserfs_alloc_inode,
@@ -469,6 +500,7 @@
   .write_inode = reiserfs_write_inode,
   .dirty_inode = reiserfs_dirty_inode,
   .delete_inode = reiserfs_delete_inode,
+  .clear_inode  = reiserfs_clear_inode,
   .put_super = reiserfs_put_super,
   .write_super = reiserfs_write_super,
   .write_super_lockfs = reiserfs_write_super_lockfs,
@@ -595,7 +627,7 @@
 	}
     }
     if (!opt->option_name) {
-	printk ("reiserfs_getopt: unknown option \"%s\"\n", p);
+	reiserfs_warning (s, "unknown mount option \"%s\"", p);
 	return -1;
     }
     
@@ -603,7 +635,7 @@
     switch (*p) {
     case '=':
 	if (!opt->arg_required) {
-	    printk ("reiserfs_getopt: the option \"%s\" does not require an argument\n",
+	    reiserfs_warning (s, "the option \"%s\" does not require an argument",
 		    opt->option_name);
 	    return -1;
 	}
@@ -611,12 +643,12 @@
 	
     case 0:
 	if (opt->arg_required) {
-	    printk ("reiserfs_getopt: the option \"%s\" requires an argument\n", opt->option_name);
+	    reiserfs_warning (s, "the option \"%s\" requires an argument", opt->option_name);
 	    return -1;
 	}
 	break;
     default:
-	printk ("reiserfs_getopt: head of option \"%s\" is only correct\n", opt->option_name);
+	reiserfs_warning (s, "head of option \"%s\" is only correct", opt->option_name);
 	return -1;
     }
 	
@@ -625,7 +657,7 @@
     
     if ( opt->arg_required && !strlen (p) ) {
 	/* this catches "option=," */
-	printk ("reiserfs_getopt: empty argument for \"%s\"\n", opt->option_name);
+	reiserfs_warning (s, "empty argument for \"%s\"", opt->option_name);
 	return -1;
     }
     
@@ -646,7 +678,7 @@
 	}
     }
     
-    printk ("reiserfs_getopt: bad value \"%s\" for option \"%s\"\n", p, opt->option_name);
+    reiserfs_warning (s, "bad value \"%s\" for option \"%s\"", p, opt->option_name);
     return -1;
 }
 
@@ -669,6 +701,12 @@
 	{"conv", 0, 0, 1<<REISERFS_CONVERT, 0},
 	{"attrs", 0, 0, 1<<REISERFS_ATTRS, 0},
 	{"noattrs", 0, 0, 0, 1<<REISERFS_ATTRS},
+	{"user_xattr", 0, 0, 1<<REISERFS_XATTRS_USER, 0},
+	{"nouser_xattr", 0, 0, 0, 1<<REISERFS_XATTRS_USER},
+#ifdef CONFIG_REISERFS_FS_POSIX_ACL
+	{"acl", 0, 0, 1<<REISERFS_POSIXACL, 0},
+	{"noacl", 0, 0, 0, 1<<REISERFS_POSIXACL},
+#endif
 	{"nolog", 0, 0, 0, 0}, /* This is unsupported */
 	{"replayonly", 0, 0, 1<<REPLAYONLY, 0},
 	{"block-allocator", 'a', balloc, 0, 0},
@@ -677,6 +715,8 @@
 	{"jdev", 'j', 0, 0, 0},
 	{"nolargeio", 'w', 0, 0, 0},
 	{"commit", 'c', 0, 0, 0},
+	{"usrquota", 0, 0, 0, 0},
+	{"grpquota", 0, 0, 0, 0},
 	{NULL, 0, 0, 0, 0}
     };
 	
@@ -700,20 +740,19 @@
 	    *blocks = simple_strtoul (arg, &p, 0);
 	    if (*p != '\0') {
 		/* NNN does not look like a number */
-		printk ("reiserfs_parse_options: bad value %s\n", arg);
+		reiserfs_warning (s, "reiserfs_parse_options: bad value %s", arg);
 		return 0;
 	    }
 	}
 
 	if ( c == 'c' ) {
 		char *p = 0;
-		int val = simple_strtoul (arg, &p, 0);
+		unsigned long val = simple_strtoul (arg, &p, 0);
 		/* commit=NNN (time in seconds) */
-		if ( *p != '\0' || val < 0) {
-			printk ("reiserfs_parse_options: bad value %s\n", arg);
-			return 0;
+		if ( *p != '\0' || val >= (unsigned int)-1) {
+			reiserfs_warning (s, "reiserfs_parse_options: bad value %s", arg);			return 0;
 		}
-		*commit_max_age = val;
+		*commit_max_age = (unsigned int)val;
 	}
 
 	if ( c == 'w' ) {
@@ -721,7 +760,7 @@
 		int val = simple_strtoul (arg, &p, 0);
 
 		if ( *p != '\0') {
-		    printk ("reiserfs_parse_options: non-numeric value %s for nolargeio option\n", arg);
+		    reiserfs_warning (s, "reiserfs_parse_options: non-numeric value %s for nolargeio option", arg);
 		    return 0;
 		}
 		if ( val ) 
@@ -733,7 +772,7 @@
 	if (c == 'j') {
 	    if (arg && *arg && jdev_name) {
 		if ( *jdev_name ) { //Hm, already assigned?
-		    printk("reiserfs_parse_options: journal device was already  specified to be %s\n", *jdev_name);
+		    reiserfs_warning (s, "reiserfs_parse_options: journal device was already  specified to be %s", *jdev_name);
 		    return 0;
 		}
 		*jdev_name = arg;
@@ -756,17 +795,17 @@
     if (mount_options & (1 << REISERFS_DATA_LOG)) {
         if (!reiserfs_data_log(s)) {
 	    switch_data_mode(s, REISERFS_DATA_LOG);
-	    printk("reiserfs: switching to journaled data mode\n");
+	    reiserfs_info (s, "switching to journaled data mode\n");
 	}
     } else if (mount_options & (1 << REISERFS_DATA_ORDERED)) {
         if (!reiserfs_data_ordered(s)) {
 	    switch_data_mode(s, REISERFS_DATA_ORDERED);
-	    printk("reiserfs: switching to ordered data mode\n");
+	    reiserfs_info (s, "switching to ordered data mode\n");
 	}
     } else if (mount_options & (1 << REISERFS_DATA_WRITEBACK)) {
         if (!reiserfs_data_writeback(s)) {
 	    switch_data_mode(s, REISERFS_DATA_WRITEBACK);
-	    printk("reiserfs: switching to writeback data mode\n");
+	    reiserfs_info (s, "switching to writeback data mode\n");
 	}
     }
 }
@@ -778,12 +817,12 @@
 	if( reiserfs_attrs( s ) ) {
 		rs = SB_DISK_SUPER_BLOCK (s);
 		if( old_format_only(s) ) {
-			reiserfs_warning( "reiserfs: cannot support attributes on 3.5.x disk format\n" );
+			reiserfs_warning(s, "reiserfs: cannot support attributes on 3.5.x disk format" );
 			REISERFS_SB(s) -> s_mount_opt &= ~ ( 1 << REISERFS_ATTRS );
 			return;
 		}
 		if( !( le32_to_cpu( rs -> s_flags ) & reiserfs_attrs_cleared ) ) {
-				reiserfs_warning( "reiserfs: cannot support attributes until flag is set in super-block\n" );
+				reiserfs_warning(s, "reiserfs: cannot support attributes until flag is set in super-block" );
 				REISERFS_SB(s) -> s_mount_opt &= ~ ( 1 << REISERFS_ATTRS );
 		}
 	}
@@ -796,7 +835,7 @@
   unsigned long blocks;
   unsigned long mount_options = REISERFS_SB(s)->s_mount_opt;
   unsigned long safe_mask = 0;
-  unsigned int commit_max_age = 0;
+  unsigned int commit_max_age = (unsigned int)-1;
 
   rs = SB_DISK_SUPER_BLOCK (s);
 
@@ -813,16 +852,18 @@
   safe_mask |= 1 << REISERFS_HASHED_RELOCATION;
   safe_mask |= 1 << REISERFS_TEST4;
   safe_mask |= 1 << REISERFS_ATTRS;
+  safe_mask |= 1 << REISERFS_XATTRS_USER;
+  safe_mask |= 1 << REISERFS_POSIXACL;
 
   /* Update the bitmask, taking care to keep
    * the bits we're not allowed to change here */
   REISERFS_SB(s)->s_mount_opt = (REISERFS_SB(s)->s_mount_opt & ~safe_mask) |  (mount_options & safe_mask);
 
-  if(commit_max_age != 0) {
+  if(commit_max_age != 0 && commit_max_age != (unsigned int)-1) {
     SB_JOURNAL_MAX_COMMIT_AGE(s) = commit_max_age;
     SB_JOURNAL_MAX_TRANS_AGE(s) = commit_max_age;
   }
-  else
+  else if(commit_max_age == 0)
   {
     /* 0 means restore defaults. */
     SB_JOURNAL_MAX_COMMIT_AGE(s) = SB_JOURNAL_DEFAULT_MAX_COMMIT_AGE(s);
@@ -836,6 +877,7 @@
   }
 
   if (*mount_flags & MS_RDONLY) {
+    reiserfs_xattr_init (s, *mount_flags);
     /* remount read-only */
     if (s->s_flags & MS_RDONLY)
       /* it is read-only already */
@@ -852,8 +894,10 @@
     journal_mark_dirty(&th, s, SB_BUFFER_WITH_SB (s));
   } else {
     /* remount read-write */
-    if (!(s->s_flags & MS_RDONLY))
+    if (!(s->s_flags & MS_RDONLY)) {
+	reiserfs_xattr_init (s, *mount_flags);
 	return 0; /* We are read-write already */
+    }
 
     handle_data_mode(s, mount_options);
     REISERFS_SB(s)->s_mount_state = sb_umount_state(rs) ;
@@ -874,8 +918,10 @@
   journal_end(&th, s, 10) ;
   s->s_dirt = 0;
 
-  if (!( *mount_flags & MS_RDONLY ) )
+  if (!( *mount_flags & MS_RDONLY ) ) {
     finish_unfinished( s );
+    reiserfs_xattr_init (s, *mount_flags);
+  }
 
   return 0;
 }
@@ -926,7 +972,7 @@
 
 #ifdef CONFIG_REISERFS_CHECK
 // This outputs a lot of unneded info on big FSes
-//    reiserfs_warning ("bitmap loaded from block %d: %d free blocks\n",
+//    reiserfs_warning ("bitmap loaded from block %d: %d free blocks",
 //		      bi->bh->b_blocknr, bi->free_count);
 #endif
 }
@@ -948,8 +994,8 @@
     for (i = 0; i < SB_BMAP_NR(s); i++) {
 	wait_on_buffer(SB_AP_BITMAP (s)[i].bh);
 	if (!buffer_uptodate(SB_AP_BITMAP(s)[i].bh)) {
-	    reiserfs_warning("sh-2029: reiserfs read_bitmaps: "
-			 "bitmap block (#%lu) reading failed\n",
+	    reiserfs_warning(s,"sh-2029: reiserfs read_bitmaps: "
+			 "bitmap block (#%lu) reading failed",
 			 SB_AP_BITMAP(s)[i].bh->b_blocknr);
 	    for (i = 0; i < SB_BMAP_NR(s); i++)
 		brelse(SB_AP_BITMAP(s)[i].bh);
@@ -999,7 +1045,7 @@
   }
 
   if (free != SB_FREE_BLOCKS (s))
-    reiserfs_warning ("vs-4000: check_bitmap: %d free blocks, must be %d\n",
+    reiserfs_warning (s,"vs-4000: check_bitmap: %d free blocks, must be %d",
 		      free, SB_FREE_BLOCKS (s));
 }
 
@@ -1012,8 +1058,8 @@
 
     bh = sb_bread (s, offset / s->s_blocksize);
     if (!bh) {
-      printk ("sh-2006: read_super_block: "
-              "bread failed (dev %s, block %lu, size %lu)\n",
+      reiserfs_warning (s, "sh-2006: read_super_block: "
+              "bread failed (dev %s, block %lu, size %lu)",
               reiserfs_bdevname (s), offset / s->s_blocksize, s->s_blocksize);
       return 1;
     }
@@ -1033,7 +1079,7 @@
     
     bh = sb_bread (s, offset / s->s_blocksize);
     if (!bh) {
-	printk("sh-2007: read_super_block: "
+	reiserfs_warning (s, "sh-2007: read_super_block: "
                 "bread failed (dev %s, block %lu, size %lu)\n",
                 reiserfs_bdevname (s), offset / s->s_blocksize, s->s_blocksize);
 	return 1;
@@ -1041,7 +1087,7 @@
     
     rs = (struct reiserfs_super_block *)bh->b_data;
     if (sb_blocksize(rs) != s->s_blocksize) {
-	printk ("sh-2011: read_super_block: "
+	reiserfs_warning (s, "sh-2011: read_super_block: "
 		"can't find a reiserfs filesystem on (dev %s, block %Lu, size %lu)\n",
 		reiserfs_bdevname (s), (unsigned long long)bh->b_blocknr, s->s_blocksize);
 	brelse (bh);
@@ -1050,9 +1096,9 @@
 
     if ( rs->s_v1.s_root_block == -1 ) {
        brelse(bh) ;
-       printk("dev %s: Unfinished reiserfsck --rebuild-tree run detected. Please run\n"
+       reiserfs_warning (s, "Unfinished reiserfsck --rebuild-tree run detected. Please run\n"
               "reiserfsck --rebuild-tree and wait for a completion. If that fails\n"
-              "get newer reiserfsprogs package\n", reiserfs_bdevname (s));
+              "get newer reiserfsprogs package");
        return 1;
     }
 
@@ -1063,21 +1109,22 @@
 	/* magic is of non-standard journal filesystem, look at s_version to
 	   find which format is in use */
 	if (sb_version(rs) == REISERFS_VERSION_2)
-	  printk ("read_super_block: found reiserfs format \"3.6\" "
-		  "with non-standard journal\n");
+	  reiserfs_warning (s, "read_super_block: found reiserfs format \"3.6\""
+		  " with non-standard journal");
 	else if (sb_version(rs) == REISERFS_VERSION_1)
-	  printk ("read_super_block: found reiserfs format \"3.5\" "
-		  "with non-standard journal\n");
+	  reiserfs_warning (s, "read_super_block: found reiserfs format \"3.5\""
+		  " with non-standard journal");
 	else {
-	  printk ("sh-2012: read_super_block: found unknown format \"%u\" "
-	            "of reiserfs with non-standard magic\n", sb_version(rs));
+	  reiserfs_warning (s, "sh-2012: read_super_block: found unknown "
+			    "format \"%u\" of reiserfs with non-standard magic",
+			    sb_version(rs));
 	return 1;
 	}
     }
     else
       /* s_version of standard format may contain incorrect information,
 	 so we just look at the magic string */
-      printk ("found reiserfs format \"%s\" with standard journal\n",
+      reiserfs_info (s, "found reiserfs format \"%s\" with standard journal\n",
 	      is_reiserfs_3_5 (rs) ? "3.5" : "3.6");
 
     s->s_op = &reiserfs_sops;
@@ -1098,7 +1145,7 @@
   ll_rw_block(READ, 1, &(SB_BUFFER_WITH_SB(s))) ;
   wait_on_buffer(SB_BUFFER_WITH_SB(s)) ;
   if (!buffer_uptodate(SB_BUFFER_WITH_SB(s))) {
-    printk("reread_meta_blocks, error reading the super\n") ;
+    reiserfs_warning (s, "reread_meta_blocks, error reading the super") ;
     return 1 ;
   }
 
@@ -1106,7 +1153,7 @@
     ll_rw_block(READ, 1, &(SB_AP_BITMAP(s)[i].bh)) ;
     wait_on_buffer(SB_AP_BITMAP(s)[i].bh) ;
     if (!buffer_uptodate(SB_AP_BITMAP(s)[i].bh)) {
-      printk("reread_meta_blocks, error reading bitmap block number %d at %llu\n", 
+      reiserfs_warning (s, "reread_meta_blocks, error reading bitmap block number %d at %llu",
         i, (unsigned long long)SB_AP_BITMAP(s)[i].bh->b_blocknr) ;
       return 1 ;
     }
@@ -1153,8 +1200,8 @@
 	    if (reiserfs_rupasov_hash(s)) {
 		hash = YURA_HASH ;
 	    }
-	    reiserfs_warning("reiserfs: FS seems to be empty, autodetect "
-	                     "is using the default hash\n");
+	    reiserfs_warning(s,"FS seems to be empty, autodetect "
+	                     "is using the default hash");
 	    break;
 	}
 	r5hash=GET_HASH_VALUE (r5_hash (de.de_name, de.de_namelen));
@@ -1163,9 +1210,9 @@
 	if ( ( (teahash == r5hash) && (GET_HASH_VALUE( deh_offset(&(de.de_deh[de.de_entry_num]))) == r5hash) ) ||
 	     ( (teahash == yurahash) && (yurahash == GET_HASH_VALUE( deh_offset(&(de.de_deh[de.de_entry_num])))) ) ||
 	     ( (r5hash == yurahash) && (yurahash == GET_HASH_VALUE( deh_offset(&(de.de_deh[de.de_entry_num])))) ) ) {
-	    reiserfs_warning("reiserfs: Unable to automatically detect hash"
-		"function for device %s\n"
-		"please mount with -o hash={tea,rupasov,r5}\n", reiserfs_bdevname (s));
+	    reiserfs_warning(s,"Unable to automatically detect hash function. "
+			     "Please mount with -o hash={tea,rupasov,r5}",
+			     reiserfs_bdevname (s));
 	    hash = UNSET_HASH;
 	    break;
 	}
@@ -1176,8 +1223,7 @@
 	else if (GET_HASH_VALUE( deh_offset(&(de.de_deh[de.de_entry_num])) ) == r5hash)
 	    hash = R5_HASH;
 	else {
-	    reiserfs_warning("reiserfs: Unrecognised hash function for "
-			     "device %s\n", reiserfs_bdevname (s));
+	    reiserfs_warning (s,"Unrecognised hash function");
 	    hash = UNSET_HASH;
 	}
     } while (0);
@@ -1205,16 +1251,16 @@
 	** mount options 
 	*/
 	if (reiserfs_rupasov_hash(s) && code != YURA_HASH) {
-	    printk("REISERFS: Error, %s hash detected, "
-		   "unable to force rupasov hash\n", reiserfs_hashname(code)) ;
+	    reiserfs_warning (s, "Error, %s hash detected, "
+		   "unable to force rupasov hash", reiserfs_hashname(code)) ;
 	    code = UNSET_HASH ;
 	} else if (reiserfs_tea_hash(s) && code != TEA_HASH) {
-	    printk("REISERFS: Error, %s hash detected, "
-		   "unable to force tea hash\n", reiserfs_hashname(code)) ;
+	    reiserfs_warning (s, "Error, %s hash detected, "
+		   "unable to force tea hash", reiserfs_hashname(code)) ;
 	    code = UNSET_HASH ;
 	} else if (reiserfs_r5_hash(s) && code != R5_HASH) {
-	    printk("REISERFS: Error, %s hash detected, "
-		   "unable to force r5 hash\n", reiserfs_hashname(code)) ;
+	    reiserfs_warning (s, "Error, %s hash detected, "
+		   "unable to force r5 hash", reiserfs_hashname(code)) ;
 	    code = UNSET_HASH ;
 	} 
     } else { 
@@ -1244,13 +1290,13 @@
 {
     switch (what_hash (s)) {
     case TEA_HASH:
-	reiserfs_warning ("Using tea hash to sort names\n");
+	reiserfs_info (s, "Using tea hash to sort names\n");
 	return keyed_hash;
     case YURA_HASH:
-	reiserfs_warning ("Using rupasov hash to sort names\n");
+	reiserfs_info (s, "Using rupasov hash to sort names\n");
 	return yura_hash;
     case R5_HASH:
-	reiserfs_warning ("Using r5 hash to sort names\n");
+	reiserfs_info (s, "Using r5 hash to sort names\n");
 	return r5_hash;
     }
     return NULL;
@@ -1271,9 +1317,9 @@
     return 0;
 }
 
-#define SPRINTK(silent, ...)			\
+#define SWARN(silent, s, ...)			\
 	if (!(silent))				\
-		printk(__VA_ARGS__)
+		reiserfs_warning (s, __VA_ARGS__)
 
 static int reiserfs_fill_super (struct super_block * s, void * data, int silent)
 {
@@ -1282,7 +1328,7 @@
     struct reiserfs_transaction_handle th ;
     int old_format = 0;
     unsigned long blocks;
-	unsigned int commit_max_age = 0;
+    unsigned int commit_max_age = 0;
     int jinit_done = 0 ;
     struct reiserfs_iget_args args ;
     struct reiserfs_super_block * rs;
@@ -1305,6 +1351,8 @@
     REISERFS_SB(s)->s_alloc_options.preallocmin = 4;
     /* Preallocate by 16 blocks (17-1) at once */
     REISERFS_SB(s)->s_alloc_options.preallocsize = 17;
+    /* Initialize the rwsem for xattr dir */
+    init_rwsem(&REISERFS_SB(s)->xattr_dir_sem);
 
     jdev_name = NULL;
     if (reiserfs_parse_options (s, (char *) data, &(sbi->s_mount_opt), &blocks, &jdev_name, &commit_max_age) == 0) {
@@ -1312,7 +1360,8 @@
     }
 
     if (blocks) {
-	SPRINTK(silent, "jmacd-7: reiserfs_fill_super: resize option for remount only\n");
+	SWARN (silent, s, "jmacd-7: reiserfs_fill_super: resize option "
+	       "for remount only");
 	goto error;
     }	
 
@@ -1321,7 +1370,7 @@
       old_format = 1;
     /* try new format (64-th 1k block), which can contain reiserfs super block */
     else if (read_super_block (s, REISERFS_DISK_OFFSET_IN_BYTES)) {
-      SPRINTK(silent, "sh-2021: reiserfs_fill_super: can not find reiserfs on %s\n", reiserfs_bdevname (s));
+      SWARN(silent, s, "sh-2021: reiserfs_fill_super: can not find reiserfs on %s", reiserfs_bdevname (s));
       goto error;
     }
 
@@ -1330,9 +1379,9 @@
        smaller than the filesystem. If the check fails then abort and scream,
        because bad stuff will happen otherwise. */
     if ( s->s_bdev && s->s_bdev->bd_inode && i_size_read(s->s_bdev->bd_inode) < sb_block_count(rs)*sb_blocksize(rs)) {
-	SPRINTK(silent, "Filesystem on %s cannot be mounted because it is bigger than the device\n", reiserfs_bdevname(s));
-	SPRINTK(silent, "You may need to run fsck or increase size of your LVM partition\n");
-	SPRINTK(silent, "Or may be you forgot to reboot after fdisk when it told you to\n");
+	SWARN (silent, s, "Filesystem on %s cannot be mounted because it is bigger than the device", reiserfs_bdevname(s));
+	SWARN(silent, s, "You may need to run fsck or increase size of your LVM partition");
+	SWARN(silent, s, "Or may be you forgot to reboot after fdisk when it told you to");
 	goto error;
     }
 
@@ -1340,12 +1389,12 @@
     sbi->s_mount_state = REISERFS_VALID_FS ;
 
     if (old_format ? read_old_bitmaps(s) : read_bitmaps(s)) {
-	SPRINTK(silent, "jmacd-8: reiserfs_fill_super: unable to read bitmap\n");
+	SWARN(silent, s, "jmacd-8: reiserfs_fill_super: unable to read bitmap");
 	goto error;
     }
 #ifdef CONFIG_REISERFS_CHECK
-    SPRINTK(silent, "reiserfs:warning: CONFIG_REISERFS_CHECK is set ON\n");
-    SPRINTK(silent, "reiserfs:warning: - it is slow mode for debugging.\n");
+    SWARN (silent, s, "CONFIG_REISERFS_CHECK is set ON");
+    SWARN (silent, s, "- it is slow mode for debugging.");
 #endif
 
     /* make data=ordered the default */
@@ -1356,16 +1405,16 @@
     }
 
     if (reiserfs_data_log(s)) {
-        printk("reiserfs: using journaled data mode\n");
+        reiserfs_info (s, "using journaled data mode\n");
     } else if (reiserfs_data_ordered(s)) {
-        printk("reiserfs: using ordered data mode\n");
+        reiserfs_info (s, "using ordered data mode\n");
     } else {
-        printk("reiserfs: using writeback data mode\n");
+        reiserfs_info (s, "using writeback data mode\n");
     }
 
     // set_device_ro(s->s_dev, 1) ;
     if( journal_init(s, jdev_name, old_format, commit_max_age) ) {
-	SPRINTK(silent, "sh-2022: reiserfs_fill_super: unable to initialize journal space\n") ;
+	SWARN(silent, s, "sh-2022: reiserfs_fill_super: unable to initialize journal space") ;
 	goto error ;
     } else {
 	jinit_done = 1 ; /* once this is set, journal_release must be called
@@ -1373,7 +1422,7 @@
 			 */
     }
     if (reread_meta_blocks(s)) {
-	SPRINTK(silent, "jmacd-9: reiserfs_fill_super: unable to reread meta blocks after journal init\n") ;
+	SWARN(silent, s, "jmacd-9: reiserfs_fill_super: unable to reread meta blocks after journal init") ;
 	goto error ;
     }
 
@@ -1381,14 +1430,14 @@
 	goto error;
 
     if (bdev_read_only(s->s_bdev) && !(s->s_flags & MS_RDONLY)) {
-        SPRINTK(silent, "clm-7000: Detected readonly device, marking FS readonly\n") ;
+        SWARN(silent, s, "clm-7000: Detected readonly device, marking FS readonly") ;
 	s->s_flags |= MS_RDONLY ;
     }
     args.objectid = REISERFS_ROOT_OBJECTID ;
     args.dirid = REISERFS_ROOT_PARENT_OBJECTID ;
     root_inode = iget5_locked (s, REISERFS_ROOT_OBJECTID, reiserfs_find_actor, reiserfs_init_locked_inode, (void *)(&args));
     if (!root_inode) {
-	SPRINTK(silent, "jmacd-10: reiserfs_fill_super: get root inode failed\n");
+	SWARN(silent, s, "jmacd-10: reiserfs_fill_super: get root inode failed");
 	goto error;
     }
 
@@ -1430,7 +1479,7 @@
 	  if (convert_reiserfs (s)) {
 	    /* and -o conv is given */
 	    if(!silent)
-	      reiserfs_warning ("reiserfs: converting 3.5 filesystem to the 3.6 format\n") ;
+	      reiserfs_info (s,"converting 3.5 filesystem to the 3.6 format") ;
 
 	    if (is_reiserfs_3_5 (rs))
 	      /* put magic string of 3.6 format. 2.2 will not be able to
@@ -1443,18 +1492,30 @@
 	    set_bit(REISERFS_3_6, &(sbi->s_properties));
 	    clear_bit(REISERFS_3_5, &(sbi->s_properties));
 	  } else if (!silent){
-	    reiserfs_warning("reiserfs: using 3.5.x disk format\n") ;
+	    reiserfs_info (s, "using 3.5.x disk format\n") ;
 	  }
 	}
 
 	journal_mark_dirty(&th, s, SB_BUFFER_WITH_SB (s));
 	journal_end(&th, s, 1) ;
-	
+
+	if (reiserfs_xattr_init (s, s->s_flags)) {
+	    dput (s->s_root);
+	    s->s_root = NULL;
+	    goto error;
+	}
+
 	/* look for files which were to be removed in previous session */
 	finish_unfinished (s);
     } else {
 	if ( old_format_only(s) && !silent) {
-	    reiserfs_warning("reiserfs: using 3.5.x disk format\n") ;
+	    reiserfs_info (s, "using 3.5.x disk format\n") ;
+	}
+
+	if (reiserfs_xattr_init (s, s->s_flags)) {
+	    dput (s->s_root);
+	    s->s_root = NULL;
+	    goto error;
 	}
     }
     // mark hash in super block: it could be unset. overwrite should be ok
@@ -1523,6 +1584,9 @@
 		return ret;
 	}
 
+        if ((ret = reiserfs_xattr_register_handlers ()))
+            goto failed_reiserfs_xattr_register_handlers;
+
 	reiserfs_proc_info_global_init ();
 	reiserfs_proc_register_global ("version", reiserfs_global_version_in_proc);
 
@@ -1532,6 +1596,9 @@
 		return 0;
 	}
 
+        reiserfs_xattr_unregister_handlers ();
+
+failed_reiserfs_xattr_register_handlers:
 	reiserfs_proc_unregister_global ("version");
 	reiserfs_proc_info_global_done ();
 	destroy_inodecache ();
@@ -1542,6 +1609,7 @@
 static void __exit
 exit_reiserfs_fs ( void )
 {
+        reiserfs_xattr_unregister_handlers ();
 	reiserfs_proc_unregister_global ("version");
 	reiserfs_proc_info_global_done ();
         unregister_filesystem (& reiserfs_fs_type);
diff -Nru a/fs/reiserfs/tail_conversion.c b/fs/reiserfs/tail_conversion.c
--- a/fs/reiserfs/tail_conversion.c	Sun May 16 01:18:37 2004
+++ b/fs/reiserfs/tail_conversion.c	Sun May 16 01:18:37 2004
@@ -50,9 +50,9 @@
 
     // FIXME: we could avoid this 
     if ( search_for_position_by_key (sb, &end_key, path) == POSITION_FOUND ) {
-	reiserfs_warning ("PAP-14030: direct2indirect: "
+	reiserfs_warning (sb, "PAP-14030: direct2indirect: "
 			"pasted or inserted byte exists in the tree %K. "
-			"Use fsck to repair.\n", &end_key);
+			"Use fsck to repair.", &end_key);
 	pathrelse(path);
 	return -EIO;
     }
@@ -66,11 +66,11 @@
 	set_ih_free_space (&ind_ih, 0); /* delete at nearest future */
         put_ih_item_len( &ind_ih, UNFM_P_SIZE );
 	PATH_LAST_POSITION (path)++;
-	n_retval = reiserfs_insert_item (th, path, &end_key, &ind_ih, 
+	n_retval = reiserfs_insert_item (th, path, &end_key, &ind_ih, inode,
 					 (char *)&unfm_ptr);
     } else {
 	/* Paste into last indirect item of an object. */
-	n_retval = reiserfs_paste_into_item(th, path, &end_key,
+	n_retval = reiserfs_paste_into_item(th, path, &end_key, inode,
 					    (char *)&unfm_ptr, UNFM_P_SIZE);
     }
     if ( n_retval ) {
@@ -274,7 +274,7 @@
     set_cpu_key_k_type (&key, TYPE_DIRECT);
     key.key_length = 4;
     /* Insert tail as new direct item in the tree */
-    if ( reiserfs_insert_item(th, p_s_path, &key, &s_ih,
+    if ( reiserfs_insert_item(th, p_s_path, &key, &s_ih, p_s_inode,
 			      tail ? tail : NULL) < 0 ) {
 	/* No disk memory. So we can not convert last unformatted node
 	   to the direct item.  In this case we used to adjust
@@ -292,13 +292,15 @@
     */
     unmap_buffers(page, pos1) ;
 
+    /* make sure to get the i_blocks changes from reiserfs_insert_item */
+    reiserfs_update_sd(th, p_s_inode);
+
     // note: we have now the same as in above direct2indirect
     // conversion: there are two keys which have matching first three
     // key components. They only differ by the fouhth one.
 
     /* We have inserted new direct item and must remove last
        unformatted node. */
-    p_s_inode->i_blocks += (p_s_sb->s_blocksize / 512);
     *p_c_mode = M_CUT;
 
     /* we store position of first direct item in the in-core inode */
diff -Nru a/fs/reiserfs/xattr.c b/fs/reiserfs/xattr.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/fs/reiserfs/xattr.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,1439 @@
+/*
+ * linux/fs/reiserfs/xattr.c
+ *
+ * Copyright (c) 2002 by Jeff Mahoney, <jeffm@suse.com>
+ *
+ */
+
+/*
+ * In order to implement EA/ACLs in a clean, backwards compatible manner,
+ * they are implemented as files in a "private" directory.
+ * Each EA is in it's own file, with the directory layout like so (/ is assumed
+ * to be relative to fs root). Inside the /.reiserfs_priv/xattrs directory,
+ * directories named using the capital-hex form of the objectid and
+ * generation number are used. Inside each directory are individual files
+ * named with the name of the extended attribute.
+ *
+ * So, for objectid 12648430, we could have:
+ * /.reiserfs_priv/xattrs/C0FFEE.0/system.posix_acl_access
+ * /.reiserfs_priv/xattrs/C0FFEE.0/system.posix_acl_default
+ * /.reiserfs_priv/xattrs/C0FFEE.0/user.Content-Type
+ * .. or similar.
+ *
+ * The file contents are the text of the EA. The size is known based on the
+ * stat data describing the file.
+ *
+ * In the case of system.posix_acl_access and system.posix_acl_default, since
+ * these are special cases for filesystem ACLs, they are interpreted by the
+ * kernel, in addition, they are negatively and positively cached and attached
+ * to the inode so that unnecessary lookups are avoided.
+ */
+
+#include <linux/reiserfs_fs.h>
+#include <linux/dcache.h>
+#include <linux/namei.h>
+#include <linux/errno.h>
+#include <linux/fs.h>
+#include <linux/file.h>
+#include <linux/pagemap.h>
+#include <linux/xattr.h>
+#include <linux/reiserfs_xattr.h>
+#include <linux/reiserfs_acl.h>
+#include <linux/mbcache.h>
+#include <asm/uaccess.h>
+#include <asm/checksum.h>
+#include <linux/smp_lock.h>
+#include <linux/stat.h>
+#include <asm/semaphore.h>
+
+#define FL_READONLY 128
+#define FL_DIR_SEM_HELD 256
+#define PRIVROOT_NAME ".reiserfs_priv"
+#define XAROOT_NAME   "xattrs"
+
+static struct reiserfs_xattr_handler *find_xattr_handler_prefix (const char *prefix);
+
+static struct dentry *
+create_xa_root (struct super_block *sb)
+{
+    struct dentry *privroot = dget (REISERFS_SB(sb)->priv_root);
+    struct dentry *xaroot;
+
+    /* This needs to be created at mount-time */
+    if (!privroot)
+        return ERR_PTR(-EOPNOTSUPP);
+
+    xaroot = lookup_one_len (XAROOT_NAME, privroot, strlen (XAROOT_NAME));
+    if (IS_ERR (xaroot)) {
+        goto out;
+    } else if (!xaroot->d_inode) {
+        int err;
+        down (&privroot->d_inode->i_sem);
+        err = privroot->d_inode->i_op->mkdir (privroot->d_inode, xaroot, 0700);
+        up (&privroot->d_inode->i_sem);
+
+        if (err) {
+            dput (xaroot);
+            dput (privroot);
+            return ERR_PTR (err);
+        }
+        REISERFS_SB(sb)->xattr_root = dget (xaroot);
+    }
+
+out:
+    dput (privroot);
+    return xaroot;
+}
+
+/* This will return a dentry, or error, refering to the xa root directory.
+ * If the xa root doesn't exist yet, the dentry will be returned without
+ * an associated inode. This dentry can be used with ->mkdir to create
+ * the xa directory. */
+static struct dentry *
+__get_xa_root (struct super_block *s)
+{
+    struct dentry *privroot = dget (REISERFS_SB(s)->priv_root);
+    struct dentry *xaroot = NULL;
+
+    if (IS_ERR (privroot) || !privroot)
+        return privroot;
+
+    xaroot = lookup_one_len (XAROOT_NAME, privroot, strlen (XAROOT_NAME));
+    if (IS_ERR (xaroot)) {
+        goto out;
+    } else if (!xaroot->d_inode) {
+        dput (xaroot);
+        xaroot = NULL;
+        goto out;
+    }
+
+    REISERFS_SB(s)->xattr_root = dget (xaroot);
+
+out:
+    dput (privroot);
+    return xaroot;
+}
+
+/* Returns the dentry (or NULL) referring to the root of the extended
+ * attribute directory tree. If it has already been retreived, it is used.
+ * Otherwise, we attempt to retreive it from disk. It may also return
+ * a pointer-encoded error.
+ */
+static inline struct dentry *
+get_xa_root (struct super_block *s)
+{
+    struct dentry *dentry = dget (REISERFS_SB(s)->xattr_root);
+
+    if (!dentry)
+        dentry = __get_xa_root (s);
+
+    return dentry;
+}
+
+/* Opens the directory corresponding to the inode's extended attribute store.
+ * If flags allow, the tree to the directory may be created. If creation is
+ * prohibited, -ENODATA is returned. */
+static struct dentry *
+open_xa_dir (const struct inode *inode, int flags)
+{
+    struct dentry *xaroot, *xadir;
+    char namebuf[17];
+
+    xaroot = get_xa_root (inode->i_sb);
+    if (IS_ERR (xaroot)) {
+        return xaroot;
+    } else if (!xaroot) {
+        if (flags == 0 || flags & XATTR_CREATE) {
+            xaroot = create_xa_root (inode->i_sb);
+            if (IS_ERR (xaroot))
+                return xaroot;
+        }
+        if (!xaroot)
+            return ERR_PTR (-ENODATA);
+    }
+
+    /* ok, we have xaroot open */
+
+    snprintf (namebuf, sizeof (namebuf), "%X.%X",
+              le32_to_cpu (INODE_PKEY (inode)->k_objectid),
+              inode->i_generation);
+    xadir = lookup_one_len (namebuf, xaroot, strlen (namebuf));
+    if (IS_ERR (xadir)) {
+        dput (xaroot);
+        return xadir;
+    }
+
+    if (!xadir->d_inode) {
+        int err;
+        if (flags == 0 || flags & XATTR_CREATE) {
+            /* Although there is nothing else trying to create this directory,
+             * another directory with the same hash may be created, so we need
+             * to protect against that */
+            err = xaroot->d_inode->i_op->mkdir (xaroot->d_inode, xadir, 0700);
+            if (err) {
+                dput (xaroot);
+                dput (xadir);
+                return ERR_PTR (err);
+            }
+        }
+        if (!xadir->d_inode) {
+            dput (xaroot);
+            dput (xadir);
+            return ERR_PTR (-ENODATA);
+        }
+        /* Newly created object.. Need to mark it private */
+        REISERFS_I(xadir->d_inode)->i_flags |= i_priv_object;
+    }
+
+    dput (xaroot);
+    return xadir;
+}
+
+/* Returns a dentry corresponding to a specific extended attribute file
+ * for the inode. If flags allow, the file is created. Otherwise, a
+ * valid or negative dentry, or an error is returned. */
+static struct dentry *
+get_xa_file_dentry (const struct inode *inode, const char *name, int flags)
+{
+    struct dentry *xadir, *xafile;
+    int err = 0;
+
+    xadir = open_xa_dir (inode, flags);
+    if (IS_ERR (xadir)) {
+        return ERR_PTR (PTR_ERR (xadir));
+    } else if (xadir && !xadir->d_inode) {
+        dput (xadir);
+        return ERR_PTR (-ENODATA);
+    }
+
+    xafile = lookup_one_len (name, xadir, strlen (name));
+    if (IS_ERR (xafile)) {
+        dput (xadir);
+        return ERR_PTR (PTR_ERR (xafile));
+    }
+
+    if (xafile->d_inode) { /* file exists */
+        if (flags & XATTR_CREATE) {
+            err = -EEXIST;
+            dput (xafile);
+            goto out;
+        }
+    } else if (flags & XATTR_REPLACE || flags & FL_READONLY) {
+        goto out;
+    } else {
+        /* inode->i_sem is down, so nothing else can try to create
+         * the same xattr */
+        err = xadir->d_inode->i_op->create (xadir->d_inode, xafile,
+                                            0700|S_IFREG, NULL);
+
+        if (err) {
+            dput (xafile);
+            goto out;
+        }
+        /* Newly created object.. Need to mark it private */
+        REISERFS_I(xafile->d_inode)->i_flags |= i_priv_object;
+    }
+
+out:
+    dput (xadir);
+    if (err)
+        xafile = ERR_PTR (err);
+    return xafile;
+}
+
+
+/* Opens a file pointer to the attribute associated with inode */
+static struct file *
+open_xa_file (const struct inode *inode, const char *name, int flags)
+{
+    struct dentry *xafile;
+    struct file *fp;
+
+    xafile = get_xa_file_dentry (inode, name, flags);
+    if (IS_ERR (xafile))
+        return ERR_PTR (PTR_ERR (xafile));
+    else if (!xafile->d_inode) {
+        dput (xafile);
+        return ERR_PTR (-ENODATA);
+    }
+
+    fp = dentry_open (xafile, NULL, O_RDWR);
+    /* dentry_open dputs the dentry if it fails */
+
+    return fp;
+}
+
+
+/*
+ * this is very similar to fs/reiserfs/dir.c:reiserfs_readdir, but
+ * we need to drop the path before calling the filldir struct.  That
+ * would be a big performance hit to the non-xattr case, so I've copied
+ * the whole thing for now. --clm
+ *
+ * the big difference is that I go backwards through the directory,
+ * and don't mess with f->f_pos, but the idea is the same.  Do some
+ * action on each and every entry in the directory.
+ *
+ * we're called with i_sem held, so there are no worries about the directory
+ * changing underneath us.
+ */
+static int __xattr_readdir(struct file * filp, void * dirent, filldir_t filldir)
+{
+    struct inode *inode = filp->f_dentry->d_inode;
+    struct cpu_key pos_key;	/* key of current position in the directory (key of directory entry) */
+    INITIALIZE_PATH (path_to_entry);
+    struct buffer_head * bh;
+    int entry_num;
+    struct item_head * ih, tmp_ih;
+    int search_res;
+    char * local_buf;
+    loff_t next_pos;
+    char small_buf[32] ; /* avoid kmalloc if we can */
+    struct reiserfs_de_head *deh;
+    int d_reclen;
+    char * d_name;
+    off_t d_off;
+    ino_t d_ino;
+    struct reiserfs_dir_entry de;
+
+
+    /* form key for search the next directory entry using f_pos field of
+       file structure */
+    next_pos = max_reiserfs_offset(inode);
+
+    while (1) {
+research:
+	if (next_pos <= DOT_DOT_OFFSET)
+	    break;
+	make_cpu_key (&pos_key, inode, next_pos, TYPE_DIRENTRY, 3);
+
+	search_res = search_by_entry_key(inode->i_sb, &pos_key, &path_to_entry, &de);
+	if (search_res == IO_ERROR) {
+	    // FIXME: we could just skip part of directory which could
+	    // not be read
+	    pathrelse(&path_to_entry);
+	    return -EIO;
+	}
+
+	if (search_res == NAME_NOT_FOUND)
+	    de.de_entry_num--;
+
+	set_de_name_and_namelen(&de);
+	entry_num = de.de_entry_num;
+	deh = &(de.de_deh[entry_num]);
+
+	bh = de.de_bh;
+	ih = de.de_ih;
+
+	if (!is_direntry_le_ih(ih)) {
+            reiserfs_warning(inode->i_sb, "not direntry %h", ih);
+	    break;
+        }
+	copy_item_head(&tmp_ih, ih);
+
+	/* we must have found item, that is item of this directory, */
+	RFALSE( COMP_SHORT_KEYS (&(ih->ih_key), &pos_key),
+		"vs-9000: found item %h does not match to dir we readdir %K",
+		ih, &pos_key);
+
+	if (deh_offset(deh) <= DOT_DOT_OFFSET) {
+	    break;
+	}
+
+	/* look for the previous entry in the directory */
+	next_pos = deh_offset (deh) - 1;
+
+	if (!de_visible (deh))
+	    /* it is hidden entry */
+	    continue;
+
+	d_reclen = entry_length(bh, ih, entry_num);
+	d_name = B_I_DEH_ENTRY_FILE_NAME (bh, ih, deh);
+	d_off = deh_offset (deh);
+	d_ino = deh_objectid (deh);
+
+	if (!d_name[d_reclen - 1])
+	    d_reclen = strlen (d_name);
+
+	if (d_reclen > REISERFS_MAX_NAME(inode->i_sb->s_blocksize)){
+	    /* too big to send back to VFS */
+	    continue ;
+	}
+
+        /* Ignore the .reiserfs_priv entry */
+        if (reiserfs_xattrs (inode->i_sb) &&
+            !old_format_only(inode->i_sb) &&
+            deh_objectid (deh) == le32_to_cpu (INODE_PKEY(REISERFS_SB(inode->i_sb)->priv_root->d_inode)->k_objectid))
+          continue;
+
+	if (d_reclen <= 32) {
+	  local_buf = small_buf ;
+	} else {
+	    local_buf = reiserfs_kmalloc(d_reclen, GFP_NOFS, inode->i_sb) ;
+	    if (!local_buf) {
+		pathrelse (&path_to_entry);
+		return -ENOMEM ;
+	    }
+	    if (item_moved (&tmp_ih, &path_to_entry)) {
+		reiserfs_kfree(local_buf, d_reclen, inode->i_sb) ;
+
+		/* sigh, must retry.  Do this same offset again */
+		next_pos = d_off;
+		goto research;
+	    }
+	}
+
+	// Note, that we copy name to user space via temporary
+	// buffer (local_buf) because filldir will block if
+	// user space buffer is swapped out. At that time
+	// entry can move to somewhere else
+	memcpy (local_buf, d_name, d_reclen);
+
+	/* the filldir function might need to start transactions,
+	 * or do who knows what.  Release the path now that we've
+	 * copied all the important stuff out of the deh
+	 */
+	pathrelse (&path_to_entry);
+
+	if (filldir (dirent, local_buf, d_reclen, d_off, d_ino,
+		     DT_UNKNOWN) < 0) {
+	    if (local_buf != small_buf) {
+		reiserfs_kfree(local_buf, d_reclen, inode->i_sb) ;
+	    }
+	    goto end;
+	}
+	if (local_buf != small_buf) {
+	    reiserfs_kfree(local_buf, d_reclen, inode->i_sb) ;
+	}
+    } /* while */
+
+end:
+    pathrelse (&path_to_entry);
+    return 0;
+}
+
+/*
+ * this could be done with dedicated readdir ops for the xattr files,
+ * but I want to get something working asap
+ * this is stolen from vfs_readdir
+ *
+ */
+static
+int xattr_readdir(struct file *file, filldir_t filler, void *buf)
+{
+        struct inode *inode = file->f_dentry->d_inode;
+        int res = -ENOTDIR;
+        if (!file->f_op || !file->f_op->readdir)
+                goto out;
+        down(&inode->i_sem);
+//        down(&inode->i_zombie);
+        res = -ENOENT;
+        if (!IS_DEADDIR(inode)) {
+                lock_kernel();
+                res = __xattr_readdir(file, buf, filler);
+                unlock_kernel();
+        }
+//        up(&inode->i_zombie);
+        up(&inode->i_sem);
+out:
+        return res;
+}
+
+
+/* Internal operations on file data */
+static inline void
+reiserfs_put_page(struct page *page)
+{
+        kunmap(page);
+        page_cache_release(page);
+}
+
+static struct page *
+reiserfs_get_page(struct inode *dir, unsigned long n)
+{
+        struct address_space *mapping = dir->i_mapping;
+        struct page *page;
+        /* We can deadlock if we try to free dentries,
+           and an unlink/rmdir has just occured - GFP_NOFS avoids this */
+        mapping->flags = (mapping->flags & ~__GFP_BITS_MASK) | GFP_NOFS;
+        page = read_cache_page (mapping, n,
+                                (filler_t*)mapping->a_ops->readpage, NULL);
+        if (!IS_ERR(page)) {
+                wait_on_page_locked(page);
+                kmap(page);
+                if (!PageUptodate(page))
+                        goto fail;
+
+                if (PageError(page))
+                        goto fail;
+        }
+        return page;
+
+fail:
+        reiserfs_put_page(page);
+        return ERR_PTR(-EIO);
+}
+
+static inline __u32
+xattr_hash (const char *msg, int len)
+{
+    return csum_partial (msg, len, 0);
+}
+
+/* Generic extended attribute operations that can be used by xa plugins */
+
+/*
+ * inode->i_sem: down
+ */
+int
+reiserfs_xattr_set (struct inode *inode, const char *name, const void *buffer,
+                    size_t buffer_size, int flags)
+{
+    int err = 0;
+    struct file *fp;
+    struct page *page;
+    char *data;
+    struct address_space *mapping;
+    size_t file_pos = 0;
+    size_t buffer_pos = 0;
+    struct inode *xinode;
+    struct iattr newattrs;
+    __u32 xahash = 0;
+
+    if (IS_RDONLY (inode))
+        return -EROFS;
+
+    if (IS_IMMUTABLE (inode) || IS_APPEND (inode))
+        return -EPERM;
+
+    if (get_inode_sd_version (inode) == STAT_DATA_V1)
+        return -EOPNOTSUPP;
+
+    /* Empty xattrs are ok, they're just empty files, no hash */
+    if (buffer && buffer_size)
+        xahash = xattr_hash (buffer, buffer_size);
+
+open_file:
+    fp = open_xa_file (inode, name, flags);
+    if (IS_ERR (fp)) {
+        err = PTR_ERR (fp);
+        goto out;
+    }
+
+    xinode = fp->f_dentry->d_inode;
+    REISERFS_I(inode)->i_flags |= i_has_xattr_dir;
+
+    /* we need to copy it off.. */
+    if (xinode->i_nlink > 1) {
+	fput(fp);
+        err = reiserfs_xattr_del (inode, name);
+        if (err < 0)
+            goto out;
+        /* We just killed the old one, we're not replacing anymore */
+        if (flags & XATTR_REPLACE)
+            flags &= ~XATTR_REPLACE;
+        goto open_file;
+    }
+
+    /* Resize it so we're ok to write there */
+    newattrs.ia_size = buffer_size;
+    newattrs.ia_valid = ATTR_SIZE | ATTR_CTIME;
+    down (&xinode->i_sem);
+    err = notify_change(fp->f_dentry, &newattrs);
+    if (err)
+        goto out_filp;
+
+    mapping = xinode->i_mapping;
+    while (buffer_pos < buffer_size || buffer_pos == 0) {
+        size_t chunk;
+        size_t skip = 0;
+        size_t page_offset = (file_pos & (PAGE_CACHE_SIZE - 1));
+        if (buffer_size - buffer_pos > PAGE_CACHE_SIZE)
+            chunk = PAGE_CACHE_SIZE;
+        else
+            chunk = buffer_size - buffer_pos;
+
+        page = reiserfs_get_page (xinode, file_pos >> PAGE_CACHE_SHIFT);
+        if (IS_ERR (page)) {
+            err = PTR_ERR (page);
+            goto out_filp;
+        }
+
+        lock_page (page);
+        data = page_address (page);
+
+        if (file_pos == 0) {
+            struct reiserfs_xattr_header *rxh;
+            skip = file_pos = sizeof (struct reiserfs_xattr_header);
+            if (chunk + skip > PAGE_CACHE_SIZE)
+                chunk = PAGE_CACHE_SIZE - skip;
+            rxh = (struct reiserfs_xattr_header *)data;
+            rxh->h_magic = cpu_to_le32 (REISERFS_XATTR_MAGIC);
+            rxh->h_hash = cpu_to_le32 (xahash);
+        }
+
+        err = mapping->a_ops->prepare_write (fp, page, page_offset,
+                                             page_offset + chunk + skip);
+        if (!err) {
+	    if (buffer)
+		memcpy (data + skip, buffer + buffer_pos, chunk);
+            err = mapping->a_ops->commit_write (fp, page, page_offset,
+                                                page_offset + chunk + skip);
+	}
+        unlock_page (page);
+        reiserfs_put_page (page);
+        buffer_pos += chunk;
+        file_pos += chunk;
+        skip = 0;
+        if (err || buffer_size == 0 || !buffer)
+            break;
+    }
+
+    inode->i_ctime = CURRENT_TIME;
+    mark_inode_dirty (inode);
+
+out_filp:
+    up (&xinode->i_sem);
+    fput(fp);
+
+out:
+    return err;
+}
+
+/*
+ * inode->i_sem: down
+ */
+int
+reiserfs_xattr_get (const struct inode *inode, const char *name, void *buffer,
+                    size_t buffer_size)
+{
+    ssize_t err = 0;
+    struct file *fp;
+    size_t isize;
+    size_t file_pos = 0;
+    size_t buffer_pos = 0;
+    struct page *page;
+    struct inode *xinode;
+    __u32 hash = 0;
+
+    if (name == NULL)
+        return -EINVAL;
+
+    /* We can't have xattrs attached to v1 items since they don't have
+     * generation numbers */
+    if (get_inode_sd_version (inode) == STAT_DATA_V1)
+        return -EOPNOTSUPP;
+
+    fp = open_xa_file (inode, name, FL_READONLY);
+    if (IS_ERR (fp)) {
+        err = PTR_ERR (fp);
+        goto out;
+    }
+
+    xinode = fp->f_dentry->d_inode;
+    isize = xinode->i_size;
+    REISERFS_I(inode)->i_flags |= i_has_xattr_dir;
+
+    /* Just return the size needed */
+    if (buffer == NULL) {
+        err = isize - sizeof (struct reiserfs_xattr_header);
+        goto out_dput;
+    }
+
+    if (buffer_size < isize - sizeof (struct reiserfs_xattr_header)) {
+        err = -ERANGE;
+        goto out_dput;
+    }
+
+    while (file_pos < isize) {
+        size_t chunk;
+        char *data;
+        size_t skip = 0;
+        if (isize - file_pos > PAGE_CACHE_SIZE)
+            chunk = PAGE_CACHE_SIZE;
+        else
+            chunk = isize - file_pos;
+
+        page = reiserfs_get_page (xinode, file_pos >> PAGE_CACHE_SHIFT);
+        if (IS_ERR (page)) {
+            err = PTR_ERR (page);
+            goto out_dput;
+        }
+
+        lock_page (page);
+        data = page_address (page);
+        if (file_pos == 0) {
+            struct reiserfs_xattr_header *rxh =
+                                        (struct reiserfs_xattr_header *)data;
+            skip = file_pos = sizeof (struct reiserfs_xattr_header);
+            chunk -= skip;
+            /* Magic doesn't match up.. */
+            if (rxh->h_magic != cpu_to_le32 (REISERFS_XATTR_MAGIC)) {
+                unlock_page (page);
+                reiserfs_put_page (page);
+                reiserfs_warning (inode->i_sb, "Invalid magic for xattr (%s) "
+                                  "associated with %k", name,
+                                  INODE_PKEY (inode));
+                err = -EIO;
+                goto out_dput;
+            }
+            hash = le32_to_cpu (rxh->h_hash);
+        }
+        memcpy (buffer + buffer_pos, data + skip, chunk);
+        unlock_page (page);
+        reiserfs_put_page (page);
+        file_pos += chunk;
+        buffer_pos += chunk;
+        skip = 0;
+    }
+    err = isize - sizeof (struct reiserfs_xattr_header);
+
+    if (xattr_hash (buffer, isize - sizeof (struct reiserfs_xattr_header)) != hash) {
+        reiserfs_warning (inode->i_sb, "Invalid hash for xattr (%s) associated "
+                          "with %k", name, INODE_PKEY (inode));
+        err = -EIO;
+    }
+
+out_dput:
+    fput(fp);
+
+out:
+    return err;
+}
+
+static int
+__reiserfs_xattr_del (struct dentry *xadir, const char *name, int namelen)
+{
+    struct dentry *dentry;
+    struct inode *dir = xadir->d_inode;
+    int err = 0;
+
+    dentry = lookup_one_len (name, xadir, namelen);
+    if (IS_ERR (dentry)) {
+        err = PTR_ERR (dentry);
+        goto out;
+    } else if (!dentry->d_inode) {
+        err = -ENODATA;
+        goto out_file;
+    }
+
+    /* Skip directories.. */
+    if (S_ISDIR (dentry->d_inode->i_mode))
+        goto out_file;
+
+    if (!is_reiserfs_priv_object (dentry->d_inode)) {
+        reiserfs_warning (dir->i_sb, "OID %08x [%.*s/%.*s] doesn't have "
+                                     "priv flag set [parent is %sset].",
+                        le32_to_cpu (INODE_PKEY (dentry->d_inode)->k_objectid),
+                        xadir->d_name.len, xadir->d_name.name, namelen, name,
+                        is_reiserfs_priv_object (xadir->d_inode) ? "" : "not ");
+        dput (dentry);
+        return -EIO;
+    }
+
+    err = dir->i_op->unlink (dir, dentry);
+    if (!err)
+        d_delete (dentry);
+
+out_file:
+    dput (dentry);
+
+out:
+    return err;
+}
+
+
+int
+reiserfs_xattr_del (struct inode *inode, const char *name)
+{
+    struct dentry *dir;
+    int err;
+
+    if (IS_RDONLY (inode))
+        return -EROFS;
+
+    dir = open_xa_dir (inode, FL_READONLY);
+    if (IS_ERR (dir)) {
+        err = PTR_ERR (dir);
+        goto out;
+    }
+
+    err = __reiserfs_xattr_del (dir, name, strlen (name));
+    dput (dir);
+
+out:
+    return err;
+}
+
+/* The following are side effects of other operations that aren't explicitly
+ * modifying extended attributes. This includes operations such as permissions
+ * or ownership changes, object deletions, etc. */
+
+static int
+reiserfs_delete_xattrs_filler (void *buf, const char *name, int namelen,
+                               loff_t offset, ino_t ino, unsigned int d_type)
+{
+    struct dentry *xadir = (struct dentry *)buf;
+
+    return __reiserfs_xattr_del (xadir, name, namelen);
+
+}
+
+/* This is called w/ inode->i_sem downed */
+int
+reiserfs_delete_xattrs (struct inode *inode)
+{
+    struct file *fp;
+    struct dentry *dir, *root;
+    int err = 0;
+
+    /* Skip out, an xattr has no xattrs associated with it */
+    if (is_reiserfs_priv_object (inode) ||
+        get_inode_sd_version (inode) == STAT_DATA_V1 ||
+        !reiserfs_xattrs(inode->i_sb))
+    {
+        return 0;
+    }
+    reiserfs_read_lock_xattrs (inode->i_sb);
+    dir = open_xa_dir (inode, FL_READONLY);
+    reiserfs_read_unlock_xattrs (inode->i_sb);
+    if (IS_ERR (dir)) {
+        err = PTR_ERR (dir);
+        goto out;
+    } else if (!dir->d_inode) {
+        dput (dir);
+        return 0;
+    }
+
+    fp = dentry_open (dir, NULL, O_RDWR);
+    if (IS_ERR (fp)) {
+        err = PTR_ERR (fp);
+        /* dentry_open dputs the dentry if it fails */
+        goto out;
+    }
+
+    lock_kernel ();
+    err = xattr_readdir (fp, reiserfs_delete_xattrs_filler, dir);
+    if (err) {
+        unlock_kernel ();
+        goto out_dir;
+    }
+
+    /* Leftovers besides . and .. -- that's not good. */
+    if (dir->d_inode->i_nlink <= 2) {
+        root = get_xa_root (inode->i_sb);
+        reiserfs_write_lock_xattrs (inode->i_sb);
+        err = vfs_rmdir (root->d_inode, dir);
+        reiserfs_write_unlock_xattrs (inode->i_sb);
+        dput (root);
+    } else {
+        reiserfs_warning (inode->i_sb,
+                          "Couldn't remove all entries in directory");
+    }
+    unlock_kernel ();
+
+out_dir:
+    fput(fp);
+
+out:
+    if (!err)
+        REISERFS_I(inode)->i_flags = REISERFS_I(inode)->i_flags & ~i_has_xattr_dir;
+    return err;
+}
+
+struct reiserfs_chown_buf {
+    struct inode *inode;
+    struct dentry *xadir;
+    struct iattr *attrs;
+};
+
+/* XXX: If there is a better way to do this, I'd love to hear about it */
+static int
+reiserfs_chown_xattrs_filler (void *buf, const char *name, int namelen,
+                               loff_t offset, ino_t ino, unsigned int d_type)
+{
+    struct reiserfs_chown_buf *chown_buf = (struct reiserfs_chown_buf *)buf;
+    struct dentry *xafile, *xadir = chown_buf->xadir;
+    struct iattr *attrs = chown_buf->attrs;
+    int err = 0;
+
+    xafile = lookup_one_len (name, xadir, namelen);
+    if (IS_ERR (xafile))
+        return PTR_ERR (xafile);
+    else if (!xafile->d_inode) {
+        dput (xafile);
+        return -ENODATA;
+    }
+
+    if (!S_ISDIR (xafile->d_inode->i_mode))
+        err = notify_change (xafile, attrs);
+    dput (xafile);
+
+    return err;
+}
+
+int
+reiserfs_chown_xattrs (struct inode *inode, struct iattr *attrs)
+{
+    struct file *fp;
+    struct dentry *dir;
+    int err = 0;
+    struct reiserfs_chown_buf buf;
+    unsigned int ia_valid = attrs->ia_valid;
+
+    /* Skip out, an xattr has no xattrs associated with it */
+    if (is_reiserfs_priv_object (inode) ||
+        get_inode_sd_version (inode) == STAT_DATA_V1 ||
+        !reiserfs_xattrs(inode->i_sb))
+    {
+        return 0;
+    }
+    reiserfs_read_lock_xattrs (inode->i_sb);
+    dir = open_xa_dir (inode, FL_READONLY);
+    reiserfs_read_unlock_xattrs (inode->i_sb);
+    if (IS_ERR (dir)) {
+        if (PTR_ERR (dir) != -ENODATA)
+            err = PTR_ERR (dir);
+        goto out;
+    } else if (!dir->d_inode) {
+        dput (dir);
+        goto out;
+    }
+
+    fp = dentry_open (dir, NULL, O_RDWR);
+    if (IS_ERR (fp)) {
+        err = PTR_ERR (fp);
+        /* dentry_open dputs the dentry if it fails */
+        goto out;
+    }
+
+    lock_kernel ();
+
+    attrs->ia_valid &= (ATTR_UID | ATTR_GID | ATTR_CTIME);
+    buf.xadir = dir;
+    buf.attrs = attrs;
+    buf.inode = inode;
+
+    err = xattr_readdir (fp, reiserfs_chown_xattrs_filler, &buf);
+    if (err) {
+        unlock_kernel ();
+        goto out_dir;
+    }
+
+    err = notify_change (dir, attrs);
+    unlock_kernel ();
+
+out_dir:
+    fput(fp);
+
+out:
+    attrs->ia_valid = ia_valid;
+    return err;
+}
+
+
+/* Actual operations that are exported to VFS-land */
+
+/*
+ * Inode operation getxattr()
+ * Preliminary locking: we down dentry->d_inode->i_sem
+ */
+ssize_t
+reiserfs_getxattr (struct dentry *dentry, const char *name, void *buffer,
+                   size_t size)
+{
+    struct reiserfs_xattr_handler *xah = find_xattr_handler_prefix (name);
+    int err;
+
+    if (!xah || !reiserfs_xattrs(dentry->d_sb) ||
+        get_inode_sd_version (dentry->d_inode) == STAT_DATA_V1)
+        return -EOPNOTSUPP;
+
+    reiserfs_read_lock_xattr_i (dentry->d_inode);
+    reiserfs_read_lock_xattrs (dentry->d_sb);
+    err = xah->get (dentry->d_inode, name, buffer, size);
+    reiserfs_read_unlock_xattrs (dentry->d_sb);
+    reiserfs_read_unlock_xattr_i (dentry->d_inode);
+    return err;
+}
+
+
+/*
+ * Inode operation setxattr()
+ *
+ * dentry->d_inode->i_sem down
+ */
+int
+reiserfs_setxattr (struct dentry *dentry, const char *name, const void *value,
+                   size_t size, int flags)
+{
+    struct reiserfs_xattr_handler *xah = find_xattr_handler_prefix (name);
+    int err;
+    int lock;
+
+    if (!xah || !reiserfs_xattrs(dentry->d_sb) ||
+        get_inode_sd_version (dentry->d_inode) == STAT_DATA_V1)
+        return -EOPNOTSUPP;
+
+    if (IS_RDONLY (dentry->d_inode))
+        return -EROFS;
+
+    if (IS_IMMUTABLE (dentry->d_inode) || IS_APPEND (dentry->d_inode))
+        return -EROFS;
+
+    reiserfs_write_lock_xattr_i (dentry->d_inode);
+    lock = !has_xattr_dir (dentry->d_inode);
+    if (lock)
+        reiserfs_write_lock_xattrs (dentry->d_sb);
+    else
+        reiserfs_read_lock_xattrs (dentry->d_sb);
+    err = xah->set (dentry->d_inode, name, value, size, flags);
+    if (lock)
+        reiserfs_write_unlock_xattrs (dentry->d_sb);
+    else
+        reiserfs_read_unlock_xattrs (dentry->d_sb);
+    reiserfs_write_unlock_xattr_i (dentry->d_inode);
+    return err;
+}
+
+/*
+ * Inode operation removexattr()
+ *
+ * dentry->d_inode->i_sem down
+ */
+int
+reiserfs_removexattr (struct dentry *dentry, const char *name)
+{
+    int err;
+    struct reiserfs_xattr_handler *xah = find_xattr_handler_prefix (name);
+
+    if (!xah || !reiserfs_xattrs(dentry->d_sb) ||
+        get_inode_sd_version (dentry->d_inode) == STAT_DATA_V1)
+        return -EOPNOTSUPP;
+
+    if (IS_RDONLY (dentry->d_inode))
+        return -EROFS;
+
+    if (IS_IMMUTABLE (dentry->d_inode) || IS_APPEND (dentry->d_inode))
+        return -EPERM;
+
+    reiserfs_write_lock_xattr_i (dentry->d_inode);
+    reiserfs_read_lock_xattrs (dentry->d_sb);
+
+    /* Deletion pre-operation */
+    if (xah->del) {
+        err = xah->del (dentry->d_inode, name);
+        if (err)
+            goto out;
+    }
+
+    err = reiserfs_xattr_del (dentry->d_inode, name);
+
+    dentry->d_inode->i_ctime = CURRENT_TIME;
+    mark_inode_dirty (dentry->d_inode);
+
+out:
+    reiserfs_read_unlock_xattrs (dentry->d_sb);
+    reiserfs_write_unlock_xattr_i (dentry->d_inode);
+    return err;
+}
+
+
+/* This is what filldir will use:
+ * r_pos will always contain the amount of space required for the entire
+ * list. If r_pos becomes larger than r_size, we need more space and we
+ * return an error indicating this. If r_pos is less than r_size, then we've
+ * filled the buffer successfully and we return success */
+struct reiserfs_listxattr_buf {
+    int r_pos;
+    int r_size;
+    char *r_buf;
+    struct inode *r_inode;
+};
+
+static int
+reiserfs_listxattr_filler (void *buf, const char *name, int namelen,
+                           loff_t offset, ino_t ino, unsigned int d_type)
+{
+    struct reiserfs_listxattr_buf *b = (struct reiserfs_listxattr_buf *)buf;
+    int len = 0;
+    if (name[0] != '.' || (namelen != 1 && (name[1] != '.' || namelen != 2))) {
+        struct reiserfs_xattr_handler *xah = find_xattr_handler_prefix (name);
+        if (!xah) return 0; /* Unsupported xattr name, skip it */
+
+        /* We call ->list() twice because the operation isn't required to just
+         * return the name back - we want to make sure we have enough space */
+        len += xah->list (b->r_inode, name, namelen, NULL);
+
+        if (len) {
+            if (b->r_pos + len + 1 <= b->r_size) {
+                char *p = b->r_buf + b->r_pos;
+                p += xah->list (b->r_inode, name, namelen, p);
+                *p++ = '\0';
+            }
+            b->r_pos += len + 1;
+        }
+    }
+
+    return 0;
+}
+/*
+ * Inode operation listxattr()
+ *
+ * Preliminary locking: we down dentry->d_inode->i_sem
+ */
+ssize_t
+reiserfs_listxattr (struct dentry *dentry, char *buffer, size_t size)
+{
+    struct file *fp;
+    struct dentry *dir;
+    int err = 0;
+    struct reiserfs_listxattr_buf buf;
+
+    if (!dentry->d_inode)
+        return -EINVAL;
+
+    if (!reiserfs_xattrs(dentry->d_sb) ||
+        get_inode_sd_version (dentry->d_inode) == STAT_DATA_V1)
+        return -EOPNOTSUPP;
+
+    reiserfs_read_lock_xattr_i (dentry->d_inode);
+    reiserfs_read_lock_xattrs (dentry->d_sb);
+    dir = open_xa_dir (dentry->d_inode, FL_READONLY);
+    reiserfs_read_unlock_xattrs (dentry->d_sb);
+    if (IS_ERR (dir)) {
+        err = PTR_ERR (dir);
+        if (err == -ENODATA)
+            err = 0; /* Not an error if there aren't any xattrs */
+        goto out;
+    }
+
+    fp = dentry_open (dir, NULL, O_RDWR);
+    if (IS_ERR (fp)) {
+        err = PTR_ERR (fp);
+        /* dentry_open dputs the dentry if it fails */
+        goto out;
+    }
+
+    buf.r_buf = buffer;
+    buf.r_size = buffer ? size : 0;
+    buf.r_pos = 0;
+    buf.r_inode = dentry->d_inode;
+
+    REISERFS_I(dentry->d_inode)->i_flags |= i_has_xattr_dir;
+
+    err = xattr_readdir (fp, reiserfs_listxattr_filler, &buf);
+    if (err)
+        goto out_dir;
+
+    if (buf.r_pos > buf.r_size && buffer != NULL)
+        err = -ERANGE;
+    else
+        err = buf.r_pos;
+
+out_dir:
+    fput(fp);
+
+out:
+    reiserfs_read_unlock_xattr_i (dentry->d_inode);
+    return err;
+}
+
+/* This is the implementation for the xattr plugin infrastructure */
+static struct list_head xattr_handlers = LIST_HEAD_INIT (xattr_handlers);
+static rwlock_t handler_lock = RW_LOCK_UNLOCKED;
+
+static struct reiserfs_xattr_handler *
+find_xattr_handler_prefix (const char *prefix)
+{
+    struct reiserfs_xattr_handler *xah = NULL;
+    struct list_head *p;
+
+    read_lock (&handler_lock);
+    list_for_each (p, &xattr_handlers) {
+        xah = list_entry (p, struct reiserfs_xattr_handler, handlers);
+        if (strncmp (xah->prefix, prefix, strlen (xah->prefix)) == 0)
+            break;
+        xah = NULL;
+    }
+
+    read_unlock (&handler_lock);
+    return xah;
+}
+
+static void
+__unregister_handlers (void)
+{
+    struct reiserfs_xattr_handler *xah;
+    struct list_head *p, *tmp;
+
+    list_for_each_safe (p, tmp, &xattr_handlers) {
+        xah = list_entry (p, struct reiserfs_xattr_handler, handlers);
+        if (xah->exit)
+            xah->exit();
+
+        list_del_init (p);
+    }
+    INIT_LIST_HEAD (&xattr_handlers);
+}
+
+int __init
+reiserfs_xattr_register_handlers (void)
+{
+    int err = 0;
+    struct reiserfs_xattr_handler *xah;
+    struct list_head *p;
+
+    write_lock (&handler_lock);
+
+    /* If we're already initialized, nothing to do */
+    if (!list_empty (&xattr_handlers)) {
+        write_unlock (&handler_lock);
+        return 0;
+    }
+
+    /* Add the handlers */
+    list_add_tail (&user_handler.handlers, &xattr_handlers);
+    list_add_tail (&trusted_handler.handlers, &xattr_handlers);
+#ifdef CONFIG_REISERFS_FS_SECURITY
+    list_add_tail (&security_handler.handlers, &xattr_handlers);
+#endif
+#ifdef CONFIG_REISERFS_FS_POSIX_ACL
+    list_add_tail (&posix_acl_access_handler.handlers, &xattr_handlers);
+    list_add_tail (&posix_acl_default_handler.handlers, &xattr_handlers);
+#endif
+
+    /* Run initializers, if available */
+    list_for_each (p, &xattr_handlers) {
+        xah = list_entry (p, struct reiserfs_xattr_handler, handlers);
+        if (xah->init) {
+            err = xah->init ();
+            if (err) {
+                list_del_init (p);
+                break;
+            }
+        }
+    }
+
+    /* Clean up other handlers, if any failed */
+    if (err)
+        __unregister_handlers ();
+
+    write_unlock (&handler_lock);
+    return err;
+}
+
+void
+reiserfs_xattr_unregister_handlers (void)
+{
+    write_lock (&handler_lock);
+    __unregister_handlers ();
+    write_unlock (&handler_lock);
+}
+
+/* This will catch lookups from the fs root to .reiserfs_priv */
+static int
+xattr_lookup_poison (struct dentry *dentry, struct qstr *q1, struct qstr *name)
+{
+    struct dentry *priv_root = REISERFS_SB(dentry->d_sb)->priv_root;
+    if (name->len == priv_root->d_name.len &&
+        name->hash == priv_root->d_name.hash &&
+        !memcmp (name->name, priv_root->d_name.name, name->len)) {
+            return -ENOENT;
+    }
+    return 0;
+}
+
+static struct dentry_operations xattr_lookup_poison_ops = {
+    .d_compare = xattr_lookup_poison,
+};
+
+
+/* We need to take a copy of the mount flags since things like
+ * MS_RDONLY don't get set until *after* we're called.
+ * mount_flags != mount_options */
+int
+reiserfs_xattr_init (struct super_block *s, int mount_flags)
+{
+  int err = 0;
+
+  /* We need generation numbers to ensure that the oid mapping is correct
+   * v3.5 filesystems don't have them. */
+  if (!old_format_only (s)) {
+    set_bit (REISERFS_XATTRS, &(REISERFS_SB(s)->s_mount_opt));
+  } else if (reiserfs_xattrs_optional (s)) {
+    /* Old format filesystem, but optional xattrs have been enabled
+     * at mount time. Error out. */
+    reiserfs_warning (s, "xattrs/ACLs not supported on pre v3.6 "
+                      "format filesystem. Failing mount.");
+    err = -EOPNOTSUPP;
+    goto error;
+  } else {
+    /* Old format filesystem, but no optional xattrs have been enabled. This
+     * means we silently disable xattrs on the filesystem. */
+    clear_bit (REISERFS_XATTRS, &(REISERFS_SB(s)->s_mount_opt));
+  }
+
+  /* If we don't have the privroot located yet - go find it */
+  if (reiserfs_xattrs (s) && !REISERFS_SB(s)->priv_root) {
+      struct dentry *dentry;
+      dentry = lookup_one_len (PRIVROOT_NAME, s->s_root,
+                               strlen (PRIVROOT_NAME));
+      if (!IS_ERR (dentry)) {
+        if (!(mount_flags & MS_RDONLY) && !dentry->d_inode) {
+            struct inode *inode = dentry->d_parent->d_inode;
+            down (&inode->i_sem);
+            err = inode->i_op->mkdir (inode, dentry, 0700);
+            up (&inode->i_sem);
+            if (err) {
+                dput (dentry);
+                dentry = NULL;
+            }
+
+            if (dentry && dentry->d_inode)
+                reiserfs_warning (s, "Created %s on %s - reserved for "
+                                  "xattr storage.", PRIVROOT_NAME,
+                                  reiserfs_bdevname (inode->i_sb));
+        } else if (!dentry->d_inode) {
+            dput (dentry);
+            dentry = NULL;
+        }
+      } else
+        err = PTR_ERR (dentry);
+
+      if (!err && dentry) {
+          s->s_root->d_op = &xattr_lookup_poison_ops;
+          REISERFS_I(dentry->d_inode)->i_flags |= i_priv_object;
+          REISERFS_SB(s)->priv_root = dentry;
+      } else if (!(mount_flags & MS_RDONLY)) { /* xattrs are unavailable */
+          /* If we're read-only it just means that the dir hasn't been
+           * created. Not an error -- just no xattrs on the fs. We'll
+           * check again if we go read-write */
+          reiserfs_warning (s, "xattrs/ACLs enabled and couldn't "
+                            "find/create .reiserfs_priv. Failing mount.");
+          err = -EOPNOTSUPP;
+      }
+  }
+
+error:
+   /* This is only nonzero if there was an error initializing the xattr
+    * directory or if there is a condition where we don't support them. */
+    if (err) {
+          clear_bit (REISERFS_XATTRS, &(REISERFS_SB(s)->s_mount_opt));
+          clear_bit (REISERFS_XATTRS_USER, &(REISERFS_SB(s)->s_mount_opt));
+          clear_bit (REISERFS_POSIXACL, &(REISERFS_SB(s)->s_mount_opt));
+    }
+
+    /* The super_block MS_POSIXACL must mirror the (no)acl mount option. */
+    s->s_flags = s->s_flags & ~MS_POSIXACL;
+    if (reiserfs_posixacl (s))
+	s->s_flags |= MS_POSIXACL;
+
+    return err;
+}
+
+static int
+__reiserfs_permission (struct inode *inode, int mask, struct nameidata *nd,
+                       int need_lock)
+{
+	umode_t			mode = inode->i_mode;
+
+	if (mask & MAY_WRITE) {
+		/*
+		 * Nobody gets write access to a read-only fs.
+		 */
+		if (IS_RDONLY(inode) &&
+		    (S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode)))
+			return -EROFS;
+
+		/*
+		 * Nobody gets write access to an immutable file.
+		 */
+		if (IS_IMMUTABLE(inode))
+			return -EACCES;
+	}
+
+	/* We don't do permission checks on the internal objects.
+	* Permissions are determined by the "owning" object. */
+        if (is_reiserfs_priv_object (inode))
+		return 0;
+
+	if (current->fsuid == inode->i_uid) {
+		mode >>= 6;
+#ifdef CONFIG_REISERFS_FS_POSIX_ACL
+	} else if (reiserfs_posixacl(inode->i_sb) &&
+                   get_inode_sd_version (inode) != STAT_DATA_V1) {
+                struct posix_acl *acl;
+
+		/* ACL can't contain additional permissions if
+		   the ACL_MASK entry is 0 */
+		if (!(mode & S_IRWXG))
+			goto check_groups;
+
+                reiserfs_read_lock_xattr_i (inode);
+                if (need_lock)
+                    reiserfs_read_lock_xattrs (inode->i_sb);
+                acl = reiserfs_get_acl (inode, ACL_TYPE_ACCESS);
+                if (need_lock)
+                    reiserfs_read_unlock_xattrs (inode->i_sb);
+                reiserfs_read_unlock_xattr_i (inode);
+                if (IS_ERR (acl)) {
+                    if (PTR_ERR (acl) == -ENODATA)
+                        goto check_groups;
+                    return PTR_ERR (acl);
+                }
+
+                if (acl) {
+                    int err = posix_acl_permission (inode, acl, mask);
+                    posix_acl_release (acl);
+                    if (err == -EACCES) {
+                        goto check_capabilities;
+                    }
+                    return err;
+		} else {
+			goto check_groups;
+                }
+#endif
+	} else {
+check_groups:
+		if (in_group_p(inode->i_gid))
+			mode >>= 3;
+	}
+
+	/*
+	 * If the DACs are ok we don't need any capability check.
+	 */
+	if (((mode & mask & (MAY_READ|MAY_WRITE|MAY_EXEC)) == mask))
+		return 0;
+
+check_capabilities:
+	/*
+	 * Read/write DACs are always overridable.
+	 * Executable DACs are overridable if at least one exec bit is set.
+	 */
+	if (!(mask & MAY_EXEC) ||
+	    (inode->i_mode & S_IXUGO) || S_ISDIR(inode->i_mode))
+		if (capable(CAP_DAC_OVERRIDE))
+			return 0;
+
+	/*
+	 * Searching includes executable on directories, else just read.
+	 */
+	if (mask == MAY_READ || (S_ISDIR(inode->i_mode) && !(mask & MAY_WRITE)))
+		if (capable(CAP_DAC_READ_SEARCH))
+			return 0;
+
+	return -EACCES;
+}
+
+int
+reiserfs_permission (struct inode *inode, int mask, struct nameidata *nd)
+{
+    return __reiserfs_permission (inode, mask, nd, 1);
+}
+
+int
+reiserfs_permission_locked (struct inode *inode, int mask, struct nameidata *nd)
+{
+    return __reiserfs_permission (inode, mask, nd, 0);
+}
diff -Nru a/fs/reiserfs/xattr_acl.c b/fs/reiserfs/xattr_acl.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/fs/reiserfs/xattr_acl.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,563 @@
+#include <linux/fs.h>
+#include <linux/posix_acl.h>
+#include <linux/reiserfs_fs.h>
+#include <linux/errno.h>
+#include <linux/pagemap.h>
+#include <linux/xattr.h>
+#include <linux/xattr_acl.h>
+#include <linux/reiserfs_xattr.h>
+#include <linux/reiserfs_acl.h>
+#include <asm/uaccess.h>
+
+static int
+xattr_set_acl(struct inode *inode, int type, const void *value, size_t size)
+{
+	struct posix_acl *acl;
+	int error;
+
+	if (!reiserfs_posixacl(inode->i_sb))
+		return -EOPNOTSUPP;
+	if ((current->fsuid != inode->i_uid) && !capable(CAP_FOWNER))
+		return -EPERM;
+
+	if (value) {
+		acl = posix_acl_from_xattr(value, size);
+		if (IS_ERR(acl)) {
+			return PTR_ERR(acl);
+		} else if (acl) {
+			error = posix_acl_valid(acl);
+			if (error)
+				goto release_and_out;
+		}
+	} else
+		acl = NULL;
+
+	error = reiserfs_set_acl (inode, type, acl);
+
+release_and_out:
+	posix_acl_release(acl);
+	return error;
+}
+
+
+static int
+xattr_get_acl(struct inode *inode, int type, void *buffer, size_t size)
+{
+	struct posix_acl *acl;
+	int error;
+
+	if (!reiserfs_posixacl(inode->i_sb))
+		return -EOPNOTSUPP;
+
+	acl = reiserfs_get_acl (inode, type);
+	if (IS_ERR(acl))
+		return PTR_ERR(acl);
+	if (acl == NULL)
+		return -ENODATA;
+	error = posix_acl_to_xattr(acl, buffer, size);
+	posix_acl_release(acl);
+
+	return error;
+}
+
+
+/*
+ * Convert from filesystem to in-memory representation.
+ */
+static struct posix_acl *
+posix_acl_from_disk(const void *value, size_t size)
+{
+	const char *end = (char *)value + size;
+	int n, count;
+	struct posix_acl *acl;
+
+	if (!value)
+		return NULL;
+	if (size < sizeof(reiserfs_acl_header))
+		 return ERR_PTR(-EINVAL);
+	if (((reiserfs_acl_header *)value)->a_version !=
+	    cpu_to_le32(REISERFS_ACL_VERSION))
+		return ERR_PTR(-EINVAL);
+	value = (char *)value + sizeof(reiserfs_acl_header);
+	count = reiserfs_acl_count(size);
+	if (count < 0)
+		return ERR_PTR(-EINVAL);
+	if (count == 0)
+		return NULL;
+	acl = posix_acl_alloc(count, GFP_NOFS);
+	if (!acl)
+		return ERR_PTR(-ENOMEM);
+	for (n=0; n < count; n++) {
+		reiserfs_acl_entry *entry =
+			(reiserfs_acl_entry *)value;
+		if ((char *)value + sizeof(reiserfs_acl_entry_short) > end)
+			goto fail;
+		acl->a_entries[n].e_tag  = le16_to_cpu(entry->e_tag);
+		acl->a_entries[n].e_perm = le16_to_cpu(entry->e_perm);
+		switch(acl->a_entries[n].e_tag) {
+			case ACL_USER_OBJ:
+			case ACL_GROUP_OBJ:
+			case ACL_MASK:
+			case ACL_OTHER:
+				value = (char *)value +
+					sizeof(reiserfs_acl_entry_short);
+				acl->a_entries[n].e_id = ACL_UNDEFINED_ID;
+				break;
+
+			case ACL_USER:
+			case ACL_GROUP:
+				value = (char *)value + sizeof(reiserfs_acl_entry);
+				if ((char *)value > end)
+					goto fail;
+				acl->a_entries[n].e_id =
+					le32_to_cpu(entry->e_id);
+				break;
+
+			default:
+				goto fail;
+		}
+	}
+	if (value != end)
+		goto fail;
+	return acl;
+
+fail:
+	posix_acl_release(acl);
+	return ERR_PTR(-EINVAL);
+}
+
+/*
+ * Convert from in-memory to filesystem representation.
+ */
+static void *
+posix_acl_to_disk(const struct posix_acl *acl, size_t *size)
+{
+	reiserfs_acl_header *ext_acl;
+	char *e;
+	int n;
+
+	*size = reiserfs_acl_size(acl->a_count);
+	ext_acl = (reiserfs_acl_header *)kmalloc(sizeof(reiserfs_acl_header) +
+		acl->a_count * sizeof(reiserfs_acl_entry), GFP_NOFS);
+	if (!ext_acl)
+		return ERR_PTR(-ENOMEM);
+	ext_acl->a_version = cpu_to_le32(REISERFS_ACL_VERSION);
+	e = (char *)ext_acl + sizeof(reiserfs_acl_header);
+	for (n=0; n < acl->a_count; n++) {
+		reiserfs_acl_entry *entry = (reiserfs_acl_entry *)e;
+		entry->e_tag  = cpu_to_le16(acl->a_entries[n].e_tag);
+		entry->e_perm = cpu_to_le16(acl->a_entries[n].e_perm);
+		switch(acl->a_entries[n].e_tag) {
+			case ACL_USER:
+			case ACL_GROUP:
+				entry->e_id =
+					cpu_to_le32(acl->a_entries[n].e_id);
+				e += sizeof(reiserfs_acl_entry);
+				break;
+
+			case ACL_USER_OBJ:
+			case ACL_GROUP_OBJ:
+			case ACL_MASK:
+			case ACL_OTHER:
+				e += sizeof(reiserfs_acl_entry_short);
+				break;
+
+			default:
+				goto fail;
+		}
+	}
+	return (char *)ext_acl;
+
+fail:
+	kfree(ext_acl);
+	return ERR_PTR(-EINVAL);
+}
+
+/*
+ * Inode operation get_posix_acl().
+ *
+ * inode->i_sem: down
+ * BKL held [before 2.5.x]
+ */
+struct posix_acl *
+reiserfs_get_acl(struct inode *inode, int type)
+{
+	char *name, *value;
+	struct posix_acl *acl, **p_acl;
+	size_t size;
+	int retval;
+        struct reiserfs_inode_info *reiserfs_i = REISERFS_I(inode);
+
+        switch (type) {
+            case ACL_TYPE_ACCESS:
+                name = XATTR_NAME_ACL_ACCESS;
+                p_acl = &reiserfs_i->i_acl_access;
+                break;
+            case ACL_TYPE_DEFAULT:
+                name = XATTR_NAME_ACL_DEFAULT;
+                p_acl = &reiserfs_i->i_acl_default;
+                break;
+            default:
+                return ERR_PTR (-EINVAL);
+        }
+
+        if (IS_ERR (*p_acl)) {
+            if (PTR_ERR (*p_acl) == -ENODATA)
+                return NULL;
+        } else if (*p_acl != NULL)
+            return posix_acl_dup (*p_acl);
+
+        size = reiserfs_xattr_get (inode, name, NULL, 0);
+        if ((int)size < 0) {
+            if (size == -ENODATA || size == -ENOSYS) {
+		*p_acl = ERR_PTR (-ENODATA);
+		return NULL;
+            }
+            return ERR_PTR (size);
+        }
+
+        value = kmalloc (size, GFP_NOFS);
+        if (!value)
+            return ERR_PTR (-ENOMEM);
+
+	retval = reiserfs_xattr_get(inode, name, value, size);
+	if (retval == -ENODATA || retval == -ENOSYS) {
+		/* This shouldn't actually happen as it should have
+		   been caught above.. but just in case */
+		acl = NULL;
+		*p_acl = ERR_PTR (-ENODATA);
+        } else if (retval < 0) {
+		acl = ERR_PTR(retval);
+	} else {
+		acl = posix_acl_from_disk(value, retval);
+		*p_acl = posix_acl_dup (acl);
+        }
+
+	kfree(value);
+	return acl;
+}
+
+/*
+ * Inode operation set_posix_acl().
+ *
+ * inode->i_sem: down
+ * BKL held [before 2.5.x]
+ */
+int
+reiserfs_set_acl(struct inode *inode, int type, struct posix_acl *acl)
+{
+        char *name;
+	void *value = NULL;
+	struct posix_acl **p_acl;
+	size_t size;
+	int error;
+        struct reiserfs_inode_info *reiserfs_i = REISERFS_I(inode);
+
+	if (S_ISLNK(inode->i_mode))
+		return -EOPNOTSUPP;
+
+        switch (type) {
+            case ACL_TYPE_ACCESS:
+                name = XATTR_NAME_ACL_ACCESS;
+                p_acl = &reiserfs_i->i_acl_access;
+                if (acl) {
+                    mode_t mode = inode->i_mode;
+                    error = posix_acl_equiv_mode (acl, &mode);
+                    if (error < 0)
+                        return error;
+                    else {
+                        inode->i_mode = mode;
+                        if (error == 0)
+                            acl = NULL;
+                    }
+                }
+                break;
+            case ACL_TYPE_DEFAULT:
+                name = XATTR_NAME_ACL_DEFAULT;
+                p_acl = &reiserfs_i->i_acl_default;
+                if (!S_ISDIR (inode->i_mode))
+                    return acl ? -EACCES : 0;
+                break;
+            default:
+                return -EINVAL;
+        }
+
+ 	if (acl) {
+            value = posix_acl_to_disk(acl, &size);
+            if (IS_ERR(value))
+                return (int)PTR_ERR(value);
+            error = reiserfs_xattr_set(inode, name, value, size, 0);
+	} else {
+            error = reiserfs_xattr_del (inode, name);
+            if (error == -ENODATA)
+                error = 0;
+        }
+
+	if (value)
+		kfree(value);
+
+        if (!error) {
+            /* Release the old one */
+            if (!IS_ERR (*p_acl) && *p_acl)
+                posix_acl_release (*p_acl);
+
+            if (acl == NULL)
+                *p_acl = ERR_PTR (-ENODATA);
+            else
+                *p_acl = posix_acl_dup (acl);
+        }
+
+	return error;
+}
+
+/* dir->i_sem: down,
+ * inode is new and not released into the wild yet */
+int
+reiserfs_inherit_default_acl (struct inode *dir, struct dentry *dentry, struct inode *inode)
+{
+    struct posix_acl *acl;
+    int err = 0;
+
+    /* ACLs only get applied to files and directories */
+    if (S_ISLNK (inode->i_mode))
+        return 0;
+
+    /* ACLs can only be used on "new" objects, so if it's an old object
+     * there is nothing to inherit from */
+    if (get_inode_sd_version (dir) == STAT_DATA_V1)
+        goto apply_umask;
+
+    /* Don't apply ACLs to objects in the .reiserfs_priv tree.. This
+     * would be useless since permissions are ignored, and a pain because
+     * it introduces locking cycles */
+    if (is_reiserfs_priv_object (dir)) {
+        REISERFS_I(inode)->i_flags |= i_priv_object;
+        goto apply_umask;
+    }
+
+    acl = reiserfs_get_acl (dir, ACL_TYPE_DEFAULT);
+    if (IS_ERR (acl)) {
+        if (PTR_ERR (acl) == -ENODATA)
+            goto apply_umask;
+        return PTR_ERR (acl);
+    }
+
+    if (acl) {
+        struct posix_acl *acl_copy;
+        mode_t mode = inode->i_mode;
+        int need_acl;
+
+        /* Copy the default ACL to the default ACL of a new directory */
+        if (S_ISDIR (inode->i_mode)) {
+            err = reiserfs_set_acl (inode, ACL_TYPE_DEFAULT, acl);
+            if (err)
+                goto cleanup;
+        }
+
+        /* Now we reconcile the new ACL and the mode,
+           potentially modifying both */
+        acl_copy = posix_acl_clone (acl, GFP_NOFS);
+        if (!acl_copy) {
+            err = -ENOMEM;
+            goto cleanup;
+        }
+
+
+        need_acl = posix_acl_create_masq (acl_copy, &mode);
+        if (need_acl >= 0) {
+            if (mode != inode->i_mode) {
+                inode->i_mode = mode;
+            }
+
+            /* If we need an ACL.. */
+            if (need_acl > 0) {
+                err = reiserfs_set_acl (inode, ACL_TYPE_ACCESS, acl_copy);
+                if (err)
+                    goto cleanup_copy;
+            }
+        }
+cleanup_copy:
+        posix_acl_release (acl_copy);
+cleanup:
+        posix_acl_release (acl);
+    } else {
+apply_umask:
+        /* no ACL, apply umask */
+        inode->i_mode &= ~current->fs->umask;
+    }
+
+    return err;
+}
+
+/* Looks up and caches the result of the default ACL.
+ * We do this so that we don't need to carry the xattr_sem into
+ * reiserfs_new_inode if we don't need to */
+int
+reiserfs_cache_default_acl (struct inode *inode)
+{
+    int ret = 0;
+    if (reiserfs_posixacl (inode->i_sb) &&
+        !is_reiserfs_priv_object (inode)) {
+        struct posix_acl *acl;
+        reiserfs_read_lock_xattr_i (inode);
+        reiserfs_read_lock_xattrs (inode->i_sb);
+        acl = reiserfs_get_acl (inode, ACL_TYPE_DEFAULT);
+        reiserfs_read_unlock_xattrs (inode->i_sb);
+        reiserfs_read_unlock_xattr_i (inode);
+        ret = acl ? 1 : 0;
+        posix_acl_release (acl);
+    }
+
+    return ret;
+}
+
+int
+reiserfs_acl_chmod (struct inode *inode)
+{
+        struct posix_acl *acl, *clone;
+        int error;
+
+        if (S_ISLNK(inode->i_mode))
+                return -EOPNOTSUPP;
+
+	if (get_inode_sd_version (inode) == STAT_DATA_V1 ||
+	    !reiserfs_posixacl(inode->i_sb))
+        {
+	    return 0;
+	}
+
+        reiserfs_read_lock_xattrs (inode->i_sb);
+        acl = reiserfs_get_acl(inode, ACL_TYPE_ACCESS);
+        reiserfs_read_unlock_xattrs (inode->i_sb);
+        if (!acl)
+                return 0;
+        if (IS_ERR(acl))
+                return PTR_ERR(acl);
+        clone = posix_acl_clone(acl, GFP_NOFS);
+        posix_acl_release(acl);
+        if (!clone)
+                return -ENOMEM;
+        error = posix_acl_chmod_masq(clone, inode->i_mode);
+        if (!error) {
+                int lock = !has_xattr_dir (inode);
+                reiserfs_write_lock_xattr_i (inode);
+                if (lock)
+                    reiserfs_write_lock_xattrs (inode->i_sb);
+                else
+                    reiserfs_read_lock_xattrs (inode->i_sb);
+                error = reiserfs_set_acl(inode, ACL_TYPE_ACCESS, clone);
+                if (lock)
+                    reiserfs_write_unlock_xattrs (inode->i_sb);
+                else
+                    reiserfs_read_unlock_xattrs (inode->i_sb);
+                reiserfs_write_unlock_xattr_i (inode);
+        }
+        posix_acl_release(clone);
+        return error;
+}
+
+static int
+posix_acl_access_get(struct inode *inode, const char *name,
+			  void *buffer, size_t size)
+{
+	if (strlen(name) != sizeof(XATTR_NAME_ACL_ACCESS)-1)
+		return -EINVAL;
+	return xattr_get_acl(inode, ACL_TYPE_ACCESS, buffer, size);
+}
+
+static int
+posix_acl_access_set(struct inode *inode, const char *name,
+			  const void *value, size_t size, int flags)
+{
+	if (strlen(name) != sizeof(XATTR_NAME_ACL_ACCESS)-1)
+		return -EINVAL;
+	return xattr_set_acl(inode, ACL_TYPE_ACCESS, value, size);
+}
+
+static int
+posix_acl_access_del (struct inode *inode, const char *name)
+{
+    struct reiserfs_inode_info *reiserfs_i = REISERFS_I(inode);
+    struct posix_acl **acl = &reiserfs_i->i_acl_access;
+    if (strlen(name) != sizeof(XATTR_NAME_ACL_ACCESS)-1)
+	return -EINVAL;
+    if (!IS_ERR (*acl) && *acl) {
+        posix_acl_release (*acl);
+        *acl = ERR_PTR (-ENODATA);
+    }
+
+    return 0;
+}
+
+static int
+posix_acl_access_list (struct inode *inode, const char *name, int namelen, char *out)
+{
+    int len = namelen;
+    if (!reiserfs_posixacl (inode->i_sb))
+        return 0;
+    if (out)
+        memcpy (out, name, len);
+
+    return len;
+}
+
+struct reiserfs_xattr_handler posix_acl_access_handler = {
+    prefix: XATTR_NAME_ACL_ACCESS,
+    get: posix_acl_access_get,
+    set: posix_acl_access_set,
+    del: posix_acl_access_del,
+    list: posix_acl_access_list,
+};
+
+static int
+posix_acl_default_get (struct inode *inode, const char *name,
+			   void *buffer, size_t size)
+{
+	if (strlen(name) != sizeof(XATTR_NAME_ACL_DEFAULT)-1)
+		return -EINVAL;
+	return xattr_get_acl(inode, ACL_TYPE_DEFAULT, buffer, size);
+}
+
+static int
+posix_acl_default_set(struct inode *inode, const char *name,
+			   const void *value, size_t size, int flags)
+{
+	if (strlen(name) != sizeof(XATTR_NAME_ACL_DEFAULT)-1)
+		return -EINVAL;
+	return xattr_set_acl(inode, ACL_TYPE_DEFAULT, value, size);
+}
+
+static int
+posix_acl_default_del (struct inode *inode, const char *name)
+{
+    struct reiserfs_inode_info *reiserfs_i = REISERFS_I(inode);
+    struct posix_acl **acl = &reiserfs_i->i_acl_default;
+    if (strlen(name) != sizeof(XATTR_NAME_ACL_DEFAULT)-1)
+	return -EINVAL;
+    if (!IS_ERR (*acl) && *acl) {
+        posix_acl_release (*acl);
+        *acl = ERR_PTR (-ENODATA);
+    }
+
+    return 0;
+}
+
+static int
+posix_acl_default_list (struct inode *inode, const char *name, int namelen, char *out)
+{
+    int len = namelen;
+    if (!reiserfs_posixacl (inode->i_sb))
+        return 0;
+    if (out)
+        memcpy (out, name, len);
+
+    return len;
+}
+
+struct reiserfs_xattr_handler posix_acl_default_handler = {
+    prefix: XATTR_NAME_ACL_DEFAULT,
+    get: posix_acl_default_get,
+    set: posix_acl_default_set,
+    del: posix_acl_default_del,
+    list: posix_acl_default_list,
+};
diff -Nru a/fs/reiserfs/xattr_security.c b/fs/reiserfs/xattr_security.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/fs/reiserfs/xattr_security.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,69 @@
+#include <linux/reiserfs_fs.h>
+#include <linux/errno.h>
+#include <linux/fs.h>
+#include <linux/pagemap.h>
+#include <linux/xattr.h>
+#include <linux/reiserfs_xattr.h>
+#include <asm/uaccess.h>
+
+#define XATTR_SECURITY_PREFIX "security."
+
+static int
+security_get (struct inode *inode, const char *name, void *buffer, size_t size)
+{
+    if (strlen(name) < sizeof(XATTR_SECURITY_PREFIX))
+        return -EINVAL;
+
+    if (is_reiserfs_priv_object(inode))
+        return -EPERM;
+
+    return reiserfs_xattr_get (inode, name, buffer, size);
+}
+
+static int
+security_set (struct inode *inode, const char *name, const void *buffer,
+          size_t size, int flags)
+{
+    if (strlen(name) < sizeof(XATTR_SECURITY_PREFIX))
+        return -EINVAL;
+
+    if (is_reiserfs_priv_object(inode))
+        return -EPERM;
+
+    return reiserfs_xattr_set (inode, name, buffer, size, flags);
+}
+
+static int
+security_del (struct inode *inode, const char *name)
+{
+    if (strlen(name) < sizeof(XATTR_SECURITY_PREFIX))
+        return -EINVAL;
+
+    if (is_reiserfs_priv_object(inode))
+        return -EPERM;
+
+    return 0;
+}
+
+static int
+security_list (struct inode *inode, const char *name, int namelen, char *out)
+{
+    int len = namelen;
+
+    if (is_reiserfs_priv_object(inode))
+        return 0;
+
+    if (out)
+        memcpy (out, name, len);
+
+    return len;
+}
+
+
+struct reiserfs_xattr_handler security_handler = {
+    prefix: XATTR_SECURITY_PREFIX,
+    get: security_get,
+    set: security_set,
+    del: security_del,
+    list: security_list,
+};
diff -Nru a/fs/reiserfs/xattr_trusted.c b/fs/reiserfs/xattr_trusted.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/fs/reiserfs/xattr_trusted.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,81 @@
+#include <linux/reiserfs_fs.h>
+#include <linux/errno.h>
+#include <linux/fs.h>
+#include <linux/pagemap.h>
+#include <linux/xattr.h>
+#include <linux/reiserfs_xattr.h>
+#include <asm/uaccess.h>
+
+#define XATTR_TRUSTED_PREFIX "trusted."
+
+static int
+trusted_get (struct inode *inode, const char *name, void *buffer, size_t size)
+{
+    if (strlen(name) < sizeof(XATTR_TRUSTED_PREFIX))
+        return -EINVAL;
+
+    if (!reiserfs_xattrs (inode->i_sb))
+        return -EOPNOTSUPP;
+
+    if (!(capable(CAP_SYS_ADMIN) || is_reiserfs_priv_object(inode)))
+        return -EPERM;
+
+    return reiserfs_xattr_get (inode, name, buffer, size);
+}
+
+static int
+trusted_set (struct inode *inode, const char *name, const void *buffer,
+          size_t size, int flags)
+{
+    if (strlen(name) < sizeof(XATTR_TRUSTED_PREFIX))
+        return -EINVAL;
+
+    if (!reiserfs_xattrs (inode->i_sb))
+        return -EOPNOTSUPP;
+
+    if (!(capable(CAP_SYS_ADMIN) || is_reiserfs_priv_object(inode)))
+        return -EPERM;
+
+    return reiserfs_xattr_set (inode, name, buffer, size, flags);
+}
+
+static int
+trusted_del (struct inode *inode, const char *name)
+{
+    if (strlen(name) < sizeof(XATTR_TRUSTED_PREFIX))
+        return -EINVAL;
+
+    if (!reiserfs_xattrs (inode->i_sb))
+        return -EOPNOTSUPP;
+
+    if (!(capable(CAP_SYS_ADMIN) || is_reiserfs_priv_object(inode)))
+        return -EPERM;
+
+    return 0;
+}
+
+static int
+trusted_list (struct inode *inode, const char *name, int namelen, char *out)
+{
+    int len = namelen;
+
+    if (!reiserfs_xattrs (inode->i_sb))
+        return 0;
+
+    if (!(capable(CAP_SYS_ADMIN) || is_reiserfs_priv_object(inode)))
+        return 0;
+
+    if (out)
+        memcpy (out, name, len);
+
+    return len;
+}
+
+
+struct reiserfs_xattr_handler trusted_handler = {
+    prefix: XATTR_TRUSTED_PREFIX,
+    get: trusted_get,
+    set: trusted_set,
+    del: trusted_del,
+    list: trusted_list,
+};
diff -Nru a/fs/reiserfs/xattr_user.c b/fs/reiserfs/xattr_user.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/fs/reiserfs/xattr_user.c	Sun May 16 01:18:37 2004
@@ -0,0 +1,99 @@
+#include <linux/reiserfs_fs.h>
+#include <linux/errno.h>
+#include <linux/fs.h>
+#include <linux/pagemap.h>
+#include <linux/xattr.h>
+#include <linux/reiserfs_xattr.h>
+#include <asm/uaccess.h>
+
+#ifdef CONFIG_REISERFS_FS_POSIX_ACL
+# include <linux/reiserfs_acl.h>
+#endif
+
+#define XATTR_USER_PREFIX "user."
+
+static int
+user_get (struct inode *inode, const char *name, void *buffer, size_t size)
+{
+
+    int error;
+
+    if (strlen(name) < sizeof(XATTR_USER_PREFIX))
+        return -EINVAL;
+
+    if (!reiserfs_xattrs_user (inode->i_sb))
+        return -EOPNOTSUPP;
+
+    error = reiserfs_permission_locked (inode, MAY_READ, NULL);
+    if (error)
+        return error;
+
+    return reiserfs_xattr_get (inode, name, buffer, size);
+}
+
+static int
+user_set (struct inode *inode, const char *name, const void *buffer,
+          size_t size, int flags)
+{
+
+    int error;
+
+    if (strlen(name) < sizeof(XATTR_USER_PREFIX))
+        return -EINVAL;
+
+    if (!reiserfs_xattrs_user (inode->i_sb))
+        return -EOPNOTSUPP;
+
+    if (!S_ISREG (inode->i_mode) &&
+        (!S_ISDIR (inode->i_mode) || inode->i_mode & S_ISVTX))
+        return -EPERM;
+
+    error = reiserfs_permission_locked (inode, MAY_WRITE, NULL);
+    if (error)
+        return error;
+
+    return reiserfs_xattr_set (inode, name, buffer, size, flags);
+}
+
+static int
+user_del (struct inode *inode, const char *name)
+{
+    int error;
+
+    if (strlen(name) < sizeof(XATTR_USER_PREFIX))
+        return -EINVAL;
+
+    if (!reiserfs_xattrs_user (inode->i_sb))
+        return -EOPNOTSUPP;
+
+    if (!S_ISREG (inode->i_mode) &&
+        (!S_ISDIR (inode->i_mode) || inode->i_mode & S_ISVTX))
+        return -EPERM;
+
+    error = reiserfs_permission_locked (inode, MAY_WRITE, NULL);
+    if (error)
+        return error;
+
+    return 0;
+}
+
+static int
+user_list (struct inode *inode, const char *name, int namelen, char *out)
+{
+    int len = namelen;
+    if (!reiserfs_xattrs_user (inode->i_sb))
+        return 0;
+
+    if (out)
+        memcpy (out, name, len);
+
+    return len;
+}
+
+struct reiserfs_xattr_handler user_handler = {
+    prefix: XATTR_USER_PREFIX,
+    get: user_get,
+    set: user_set,
+    del: user_del,
+    list: user_list,
+};
diff -Nru a/fs/super.c b/fs/super.c
--- a/fs/super.c	Sun May 16 01:18:35 2004
+++ b/fs/super.c	Sun May 16 01:18:35 2004
@@ -101,6 +101,21 @@
 
 /* Superblock refcounting  */
 
+/*
+ * Drop a superblock's refcount.  Returns non-zero if the superblock was
+ * destroyed.  The caller must hold sb_lock.
+ */
+int __put_super(struct super_block *sb)
+{
+	int ret = 0;
+
+	if (!--sb->s_count) {
+		destroy_super(sb);
+		ret = 1;
+	}
+	return ret;
+}
+
 /**
  *	put_super	-	drop a temporary reference to superblock
  *	@s: superblock in question
@@ -108,14 +123,14 @@
  *	Drops a temporary reference, frees superblock if there's no
  *	references left.
  */
-static inline void put_super(struct super_block *s)
+static void put_super(struct super_block *sb)
 {
 	spin_lock(&sb_lock);
-	if (!--s->s_count)
-		destroy_super(s);
+	__put_super(sb);
 	spin_unlock(&sb_lock);
 }
 
+
 /**
  *	deactivate_super	-	drop an active reference to superblock
  *	@s: superblock to deactivate
@@ -266,6 +281,7 @@
 		return ERR_PTR(err);
 	}
 	s->s_type = type;
+	strlcpy(s->s_id, type->name, sizeof(s->s_id));
 	list_add(&s->s_list, super_blocks.prev);
 	list_add(&s->s_instances, &type->fs_supers);
 	spin_unlock(&sb_lock);
diff -Nru a/fs/sysfs/bin.c b/fs/sysfs/bin.c
--- a/fs/sysfs/bin.c	Sun May 16 01:18:35 2004
+++ b/fs/sysfs/bin.c	Sun May 16 01:18:35 2004
@@ -94,7 +94,7 @@
 
 static int open(struct inode * inode, struct file * file)
 {
-	struct kobject * kobj = kobject_get(file->f_dentry->d_parent->d_fsdata);
+	struct kobject *kobj = sysfs_get_kobject(file->f_dentry->d_parent);
 	struct bin_attribute * attr = file->f_dentry->d_fsdata;
 	int error = -EINVAL;
 
diff -Nru a/fs/sysfs/dir.c b/fs/sysfs/dir.c
--- a/fs/sysfs/dir.c	Sun May 16 01:18:34 2004
+++ b/fs/sysfs/dir.c	Sun May 16 01:18:34 2004
@@ -154,24 +154,33 @@
 	dput(dentry);
 }
 
-void sysfs_rename_dir(struct kobject * kobj, const char *new_name)
+int sysfs_rename_dir(struct kobject * kobj, const char *new_name)
 {
+	int error = 0;
 	struct dentry * new_dentry, * parent;
 
 	if (!strcmp(kobject_name(kobj), new_name))
-		return;
+		return -EINVAL;
 
 	if (!kobj->parent)
-		return;
+		return -EINVAL;
 
 	parent = kobj->parent->dentry;
 
 	down(&parent->d_inode->i_sem);
 
 	new_dentry = sysfs_get_dentry(parent, new_name);
-	d_move(kobj->dentry, new_dentry);
-	kobject_set_name(kobj,new_name);
+	if (!IS_ERR(new_dentry)) {
+  		if (!new_dentry->d_inode) {
+			error = kobject_set_name(kobj,new_name);
+			if (!error)
+				d_move(kobj->dentry, new_dentry);
+		}
+		dput(new_dentry);
+	}
 	up(&parent->d_inode->i_sem);	
+
+	return error;
 }
 
 EXPORT_SYMBOL(sysfs_create_dir);
diff -Nru a/fs/sysfs/file.c b/fs/sysfs/file.c
--- a/fs/sysfs/file.c	Sun May 16 01:18:33 2004
+++ b/fs/sysfs/file.c	Sun May 16 01:18:33 2004
@@ -238,7 +238,7 @@
 
 static int check_perm(struct inode * inode, struct file * file)
 {
-	struct kobject * kobj = kobject_get(file->f_dentry->d_parent->d_fsdata);
+	struct kobject *kobj = sysfs_get_kobject(file->f_dentry->d_parent);
 	struct attribute * attr = file->f_dentry->d_fsdata;
 	struct sysfs_buffer * buffer;
 	struct sysfs_ops * ops = NULL;
diff -Nru a/fs/sysfs/sysfs.h b/fs/sysfs/sysfs.h
--- a/fs/sysfs/sysfs.h	Sun May 16 01:18:36 2004
+++ b/fs/sysfs/sysfs.h	Sun May 16 01:18:36 2004
@@ -11,3 +11,16 @@
 
 extern int sysfs_create_subdir(struct kobject *, const char *, struct dentry **);
 extern void sysfs_remove_subdir(struct dentry *);
+
+
+static inline struct kobject *sysfs_get_kobject(struct dentry *dentry)
+{
+	struct kobject * kobj = NULL;
+
+	spin_lock(&dentry->d_lock);
+	if (!d_unhashed(dentry))
+		kobj = kobject_get(dentry->d_fsdata);
+	spin_unlock(&dentry->d_lock);
+
+	return kobj;
+}
diff -Nru a/include/asm-alpha/8253pit.h b/include/asm-alpha/8253pit.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/include/asm-alpha/8253pit.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,10 @@
+/*
+ * 8253/8254 Programmable Interval Timer
+ */
+
+#ifndef _8253PIT_H
+#define _8253PIT_H
+
+#define PIT_TICK_RATE 	1193180UL
+
+#endif
diff -Nru a/include/asm-alpha/atomic.h b/include/asm-alpha/atomic.h
--- a/include/asm-alpha/atomic.h	Sun May 16 01:18:35 2004
+++ b/include/asm-alpha/atomic.h	Sun May 16 01:18:35 2004
@@ -115,6 +115,8 @@
 	return result;
 }
 
+#define atomic_add_negative(a, v)	(atomic_add_return((a), (v)) < 0)
+
 static __inline__ long atomic64_add_return(long i, atomic64_t * v)
 {
 	long temp, result;
@@ -178,6 +180,7 @@
 #define atomic_sub_and_test(i,v) (atomic_sub_return((i), (v)) == 0)
 #define atomic64_sub_and_test(i,v) (atomic64_sub_return((i), (v)) == 0)
 
+#define atomic_inc_and_test(v) (atomic_add_return(1, (v)) == 0)
 #define atomic_dec_and_test(v) (atomic_sub_return(1, (v)) == 0)
 #define atomic64_dec_and_test(v) (atomic64_sub_return(1, (v)) == 0)
 
diff -Nru a/include/asm-alpha/elf.h b/include/asm-alpha/elf.h
--- a/include/asm-alpha/elf.h	Sun May 16 01:18:35 2004
+++ b/include/asm-alpha/elf.h	Sun May 16 01:18:35 2004
@@ -1,6 +1,11 @@
 #ifndef __ASM_ALPHA_ELF_H
 #define __ASM_ALPHA_ELF_H
 
+/* Special values for the st_other field in the symbol table.  */
+
+#define STO_ALPHA_NOPV		0x80
+#define STO_ALPHA_STD_GPLOAD	0x88
+
 /*
  * Alpha ELF relocation types
  */
diff -Nru a/include/asm-alpha/spinlock.h b/include/asm-alpha/spinlock.h
--- a/include/asm-alpha/spinlock.h	Sun May 16 01:18:35 2004
+++ b/include/asm-alpha/spinlock.h	Sun May 16 01:18:35 2004
@@ -36,6 +36,7 @@
 
 #define spin_is_locked(x)	((x)->lock != 0)
 #define spin_unlock_wait(x)	({ do { barrier(); } while ((x)->lock); })
+#define _raw_spin_lock_flags(lock, flags) _raw_spin_lock(lock)
 
 #ifdef CONFIG_DEBUG_SPINLOCK
 extern void _raw_spin_unlock(spinlock_t * lock);
diff -Nru a/include/asm-arm/arch-ixp4xx/coyote.h b/include/asm-arm/arch-ixp4xx/coyote.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/include/asm-arm/arch-ixp4xx/coyote.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,36 @@
+/*
+ * include/asm-arm/arch-ixp4xx/coyote.h
+ *
+ * ADI Engineering platform specific definitions
+ *
+ * Author: Deepak Saxena <dsaxena@plexity.net>
+ *
+ * Copyright 2004 (c) MontaVista, Software, Inc. 
+ * 
+ * This file is licensed under  the terms of the GNU General Public 
+ * License version 2. This program is licensed "as is" without any 
+ * warranty of any kind, whether express or implied.
+ */
+
+#ifndef __ASM_ARCH_HARDWARE_H__
+#error "Do not include this directly, instead #include <asm/hardware.h>"
+#endif
+
+#define	COYOTE_FLASH_BASE	IXP4XX_EXP_BUS_CS0_BASE_PHYS
+#define	COYOTE_FLASH_SIZE	IXP4XX_EXP_BUS_CSX_REGION_SIZE * 2
+
+/* PCI controller GPIO to IRQ pin mappings */
+#define	COYOTE_PCI_SLOT0_PIN	6
+#define	COYOTE_PCI_SLOT1_PIN	11
+
+#define	COYOTE_PCI_SLOT0_DEVID	14
+#define	COYOTE_PCI_SLOT1_DEVID	15
+
+#define	COYOTE_IDE_BASE_PHYS	IXP4XX_EXP_BUS_CS3_BASE_PHYS
+#define	COYOTE_IDE_BASE_VIRT	0xFFFE1000
+#define	COYOTE_IDE_REGION_SIZE	0x1000
+
+#define	COYOTE_IDE_DATA_PORT	0xFFFE10E0
+#define	COYOTE_IDE_CTRL_PORT	0xFFFE10FC
+#define	COYOTE_IDE_ERROR_PORT	0xFFFE10E2
+
diff -Nru a/include/asm-arm/arch-ixp4xx/dma.h b/include/asm-arm/arch-ixp4xx/dma.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/include/asm-arm/arch-ixp4xx/dma.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,52 @@
+/*
+ * include/asm-arm/arch-ixp4xx/dma.h
+ *
+ * Copyright (C) 2001-2004 MontaVista Software, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+#ifndef __ASM_ARCH_DMA_H
+#define __ASM_ARCH_DMA_H
+
+#include <linux/config.h>
+#include <linux/device.h>
+#include <linux/pci.h>
+#include <asm/page.h>
+#include <asm/sizes.h>
+#include <asm/hardware.h>
+
+#define MAX_DMA_ADDRESS		(PAGE_OFFSET + SZ_64M)
+
+/* No DMA */
+#define MAX_DMA_CHANNELS	0
+
+/*
+ * Only first 64MB of memory can be accessed via PCI.
+ * We use GFP_DMA to allocate safe buffers to do map/unmap.
+ * This is really ugly and we need a better way of specifying
+ * DMA-capable regions of memory.
+ */
+static inline void __arch_adjust_zones(int node, unsigned long *zone_size, 
+	unsigned long *zhole_size) 
+{
+	unsigned int sz = SZ_64M >> PAGE_SHIFT;
+
+	/*
+	 * Only adjust if > 64M on current system
+	 */
+	if (node || (zone_size[0] <= sz))
+		return;
+
+	zone_size[1] = zone_size[0] - sz;
+	zone_size[0] = sz;
+	zhole_size[1] = zhole_size[0];
+	zhole_size[0] = 0;
+}
+
+#define arch_adjust_zones(node, size, holes) \
+	__arch_adjust_zones(node, size, holes)
+
+#endif /* _ASM_ARCH_DMA_H */
diff -Nru a/include/asm-arm/arch-ixp4xx/hardware.h b/include/asm-arm/arch-ixp4xx/hardware.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/include/asm-arm/arch-ixp4xx/hardware.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,41 @@
+/*
+ * include/asm-arm/arch-ixp4xx/hardware.h 
+ *
+ * Copyright (C) 2002 Intel Corporation.
+ * Copyright (C) 2003-2004 MontaVista Software, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+
+/*
+ * Hardware definitions for IXP4xx based systems
+ */
+
+#ifndef __ASM_ARCH_HARDWARE_H__
+#define __ASM_ARCH_HARDWARE_H__
+
+#define PCIBIOS_MIN_IO			0x00001000
+#define PCIBIOS_MIN_MEM			0x48000000
+
+/*
+ * We override the standard dma-mask routines for bouncing.
+ */
+#define	HAVE_ARCH_PCI_SET_DMA_MASK
+
+#define pcibios_assign_all_busses()	1
+
+/* Register locations and bits */
+#include "ixp4xx-regs.h"
+
+/* Platform helper functions and definitions */
+#include "platform.h"
+
+/* Platform specific details */
+#include "ixdp425.h"
+#include "coyote.h"
+#include "prpmc1100.h"
+
+#endif  /* _ASM_ARCH_HARDWARE_H */
diff -Nru a/include/asm-arm/arch-ixp4xx/ide.h b/include/asm-arm/arch-ixp4xx/ide.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/include/asm-arm/arch-ixp4xx/ide.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,37 @@
+/*
+ * linux/include/asm-arm/arch-ixp4xx/ide.h
+ *
+ * Copyright (C) 2003-2004 MontaVista Software, Inc.
+ * Based on original code Copyright (c) 1998 Russell King
+ */
+
+
+/*
+ * Set up a hw structure for a specified data port, control port and IRQ.
+ * This should follow whatever the default interface uses.
+ */
+static __inline__ void
+ide_init_hwif_ports(hw_regs_t *hw, int data_port, int ctrl_port, int *irq)
+{
+	unsigned long reg = (unsigned long) data_port;
+	int i;
+
+	for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++) {
+		hw->io_ports[i] = reg;
+		reg += 1;
+	}
+	hw->io_ports[IDE_CONTROL_OFFSET] = (unsigned long) ctrl_port;
+	if (irq)
+		*irq = 0;
+}
+
+/*
+ * This registers the standard ports for this architecture with the IDE
+ * driver.
+ */
+static __inline__ void ide_init_default_hwifs(void)
+{
+	/* There are no standard ports */
+}
+
+
diff -Nru a/include/asm-arm/arch-ixp4xx/io.h b/include/asm-arm/arch-ixp4xx/io.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/include/asm-arm/arch-ixp4xx/io.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,388 @@
+/*
+ * linux/include/asm-arm/arch-ixp4xx/io.h
+ *
+ * Author: Deepak Saxena <dsaxena@plexity.net>
+ *
+ * Copyright (C) 2002-2004  MontaVista Software, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#ifndef __ASM_ARM_ARCH_IO_H
+#define __ASM_ARM_ARCH_IO_H
+
+#include <asm/hardware.h>
+
+#define IO_SPACE_LIMIT 0xffff0000
+
+#define	BIT(x)	((1)<<(x))
+
+
+extern int (*ixp4xx_pci_read)(u32 addr, u32 cmd, u32* data);
+extern int ixp4xx_pci_write(u32 addr, u32 cmd, u32 data);
+
+
+/*
+ * IXP4xx provides two methods of accessing PCI memory space:
+ *
+ * 1) A direct mapped window from 0x48000000 to 0x4bffffff (64MB).
+ *    To access PCI via this space, we simply ioremap() the BAR
+ *    into the kernel and we can use the standard read[bwl]/write[bwl]
+ *    macros. This is the preffered method due to speed but it
+ *    limits the system to just 64MB of PCI memory. This can be 
+ *    problamatic if using video cards and other memory-heavy
+ *    targets.
+ *
+ * 2) If > 64MB of memory space is required, the IXP4xx can be configured
+ *    to use indirect registers to access PCI (as we do below for I/O
+ *    transactions). This allows for up to 128MB (0x48000000 to 0x4fffffff)
+ *    of memory on the bus. The disadvantadge of this is that every 
+ *    PCI access requires three local register accesses plus a spinlock,
+ *    but in some cases the performance hit is acceptable. In addition,
+ *    you cannot mmap() PCI devices in this case.
+ *
+ */
+#ifndef	CONFIG_IXP4XX_INDIRECT_PCI
+
+#define __mem_pci(a)		((unsigned long)(a))
+
+#else
+
+#include <linux/mm.h>
+
+/*
+ * In the case of using indirect PCI, we simply return the actual PCI
+ * address and our read/write implementation use that to drive the 
+ * access registers. If something outside of PCI is ioremap'd, we
+ * fallback to the default.
+ */
+static inline void *
+__ixp4xx_ioremap(unsigned long addr, size_t size, unsigned long flags, unsigned long align)
+{
+	extern void * __ioremap(unsigned long, size_t, unsigned long, unsigned long);
+	if((addr < 0x48000000) || (addr > 0x4fffffff))
+		return __ioremap(addr, size, flags, align);
+
+	return (void *)addr;
+}
+
+static inline void
+__ixp4xx_iounmap(void *addr)
+{
+	extern void __iounmap(void *addr);
+
+	if ((u32)addr > VMALLOC_START)
+		__iounmap(addr);
+}
+
+#define __arch_ioremap(a, s, f, x)	__ixp4xx_ioremap(a, s, f, x)
+#define	__arch_iounmap(a)		__ixp4xx_iounmap(a)
+
+#define	writeb(p, v)			__ixp4xx_writeb(p, v)
+#define	writew(p, v)			__ixp4xx_writew(p, v)
+#define	writel(p, v)			__ixp4xx_writel(p, v)
+
+#define	writesb(p, v, l)		__ixp4xx_writesb(p, v, l)
+#define	writesw(p, v, l)		__ixp4xx_writesw(p, v, l)
+#define	writesl(p, v, l)		__ixp4xx_writesl(p, v, l)
+	
+#define	readb(p)			__ixp4xx_readb(p)
+#define	readw(p)			__ixp4xx_readw(p)
+#define	readl(p)			__ixp4xx_readl(p)
+	
+#define	readsb(p, v, l)			__ixp4xx_readsb(p, v, l)
+#define	readsw(p, v, l)			__ixp4xx_readsw(p, v, l)
+#define	readsl(p, v, l)			__ixp4xx_readsl(p, v, l)
+
+static inline void 
+__ixp4xx_writeb(u8 value, u32 addr)
+{
+	u32 n, byte_enables, data;
+
+	if (addr > VMALLOC_START) {
+		__raw_writeb(value, addr);
+		return;
+	}
+
+	n = addr % 4;
+	byte_enables = (0xf & ~BIT(n)) << IXP4XX_PCI_NP_CBE_BESL;
+	data = value << (8*n);
+	ixp4xx_pci_write(addr, byte_enables | NP_CMD_MEMWRITE, data);
+}
+
+static inline void
+__ixp4xx_writesb(u32 bus_addr, u8 *vaddr, int count)
+{
+	while (count--)
+		writeb(*vaddr++, bus_addr);
+}
+
+static inline void 
+__ixp4xx_writew(u16 value, u32 addr)
+{
+	u32 n, byte_enables, data;
+
+	if (addr > VMALLOC_START) {
+		__raw_writew(value, addr);
+		return;
+	}
+
+	n = addr % 4;
+	byte_enables = (0xf & ~(BIT(n) | BIT(n+1))) << IXP4XX_PCI_NP_CBE_BESL;
+	data = value << (8*n);
+	ixp4xx_pci_write(addr, byte_enables | NP_CMD_MEMWRITE, data);
+}
+
+static inline void
+__ixp4xx_writesw(u32 bus_addr, u16 *vaddr, int count)
+{
+	while (count--)
+		writew(*vaddr++, bus_addr);
+}
+
+static inline void 
+__ixp4xx_writel(u32 value, u32 addr)
+{
+	if (addr > VMALLOC_START) {
+		__raw_writel(value, addr);
+		return;
+	}
+
+	ixp4xx_pci_write(addr, NP_CMD_MEMWRITE, value);
+}
+
+static inline void
+__ixp4xx_writesl(u32 bus_addr, u32 *vaddr, int count)
+{
+	while (count--)
+		writel(*vaddr++, bus_addr);
+}
+
+static inline unsigned char 
+__ixp4xx_readb(u32 addr)
+{
+	u32 n, byte_enables, data;
+
+	if (addr > VMALLOC_START)
+		return __raw_readb(addr);
+
+	n = addr % 4;
+	byte_enables = (0xf & ~BIT(n)) << IXP4XX_PCI_NP_CBE_BESL;
+	if (ixp4xx_pci_read(addr, byte_enables | NP_CMD_MEMREAD, &data))
+		return 0xff;
+
+	return data >> (8*n);
+}
+
+static inline void
+__ixp4xx_readsb(u32 bus_addr, u8 *vaddr, u32 count)
+{
+	while (count--)
+		*vaddr++ = readb(bus_addr);
+}
+
+static inline unsigned short 
+__ixp4xx_readw(u32 addr)
+{
+	u32 n, byte_enables, data;
+
+	if (addr > VMALLOC_START)
+		return __raw_readw(addr);
+
+	n = addr % 4;
+	byte_enables = (0xf & ~(BIT(n) | BIT(n+1))) << IXP4XX_PCI_NP_CBE_BESL;
+	if (ixp4xx_pci_read(addr, byte_enables | NP_CMD_MEMREAD, &data))
+		return 0xffff;
+
+	return data>>(8*n);
+}
+
+static inline void 
+__ixp4xx_readsw(u32 bus_addr, u16 *vaddr, u32 count)
+{
+	while (count--)
+		*vaddr++ = readw(bus_addr);
+}
+
+static inline unsigned long 
+__ixp4xx_readl(u32 addr)
+{
+	u32 data;
+
+	if (addr > VMALLOC_START)
+		return __raw_readl(addr);
+
+	if (ixp4xx_pci_read(addr, NP_CMD_MEMREAD, &data))
+		return 0xffffffff;
+
+	return data;
+}
+
+static inline void 
+__ixp4xx_readsl(u32 bus_addr, u32 *vaddr, u32 count)
+{
+	while (count--)
+		*vaddr++ = readl(bus_addr);
+}
+
+
+/*
+ * We can use the built-in functions b/c they end up calling writeb/readb
+ */
+#define memset_io(c,v,l)		_memset_io((c),(v),(l))
+#define memcpy_fromio(a,c,l)		_memcpy_fromio((a),(c),(l))
+#define memcpy_toio(c,a,l)		_memcpy_toio((c),(a),(l))
+
+#define eth_io_copy_and_sum(s,c,l,b) \
+				eth_copy_and_sum((s),__mem_pci(c),(l),(b))
+
+static inline int
+check_signature(unsigned long bus_addr, const unsigned char *signature,
+		int length)
+{
+	int retval = 0;
+	do {
+		if (readb(bus_addr) != *signature)
+			goto out;
+		bus_addr++;
+		signature++;
+		length--;
+	} while (length);
+	retval = 1;
+out:
+	return retval;
+}
+
+#endif
+
+/*
+ * IXP4xx does not have a transparent cpu -> PCI I/O translation
+ * window.  Instead, it has a set of registers that must be tweaked
+ * with the proper byte lanes, command types, and address for the
+ * transaction.  This means that we need to override the default
+ * I/O functions.
+ */
+#define	outb(p, v)			__ixp4xx_outb(p, v)
+#define	outw(p, v)			__ixp4xx_outw(p, v)
+#define	outl(p, v)			__ixp4xx_outl(p, v)
+	
+#define	outsb(p, v, l)			__ixp4xx_outsb(p, v, l)
+#define	outsw(p, v, l)			__ixp4xx_outsw(p, v, l)
+#define	outsl(p, v, l)			__ixp4xx_outsl(p, v, l)
+
+#define	inb(p)				__ixp4xx_inb(p)
+#define	inw(p)				__ixp4xx_inw(p)
+#define	inl(p)				__ixp4xx_inl(p)
+
+#define	insb(p, v, l)			__ixp4xx_insb(p, v, l)
+#define	insw(p, v, l)			__ixp4xx_insw(p, v, l)
+#define	insl(p, v, l)			__ixp4xx_insl(p, v, l)
+
+
+static inline void 
+__ixp4xx_outb(u8 value, u32 addr)
+{
+	u32 n, byte_enables, data;
+	n = addr % 4;
+	byte_enables = (0xf & ~BIT(n)) << IXP4XX_PCI_NP_CBE_BESL;
+	data = value << (8*n);
+	ixp4xx_pci_write(addr, byte_enables | NP_CMD_IOWRITE, data);
+}
+
+static inline void 
+__ixp4xx_outsb(u32 io_addr, u8 *vaddr, u32 count)
+{
+	while (count--)
+		outb(*vaddr++, io_addr);
+}
+
+static inline void 
+__ixp4xx_outw(u16 value, u32 addr)
+{
+	u32 n, byte_enables, data;
+	n = addr % 4;
+	byte_enables = (0xf & ~(BIT(n) | BIT(n+1))) << IXP4XX_PCI_NP_CBE_BESL;
+	data = value << (8*n);
+	ixp4xx_pci_write(addr, byte_enables | NP_CMD_IOWRITE, data);
+}
+
+static inline void 
+__ixp4xx_outsw(u32 io_addr, u16 *vaddr, u32 count)
+{
+	while (count--)
+		outw(cpu_to_le16(*vaddr++), io_addr);
+}
+
+static inline void 
+__ixp4xx_outl(u32 value, u32 addr)
+{
+	ixp4xx_pci_write(addr, NP_CMD_IOWRITE, value);
+}
+
+static inline void 
+__ixp4xx_outsl(u32 io_addr, u32 *vaddr, u32 count)
+{
+	while (count--)
+		outl(*vaddr++, io_addr);
+}
+
+static inline u8 
+__ixp4xx_inb(u32 addr)
+{
+	u32 n, byte_enables, data;
+	n = addr % 4;
+	byte_enables = (0xf & ~BIT(n)) << IXP4XX_PCI_NP_CBE_BESL;
+	if (ixp4xx_pci_read(addr, byte_enables | NP_CMD_IOREAD, &data))
+		return 0xff;
+
+	return data >> (8*n);
+}
+
+static inline void 
+__ixp4xx_insb(u32 io_addr, u8 *vaddr, u32 count)
+{
+	while (count--)
+		*vaddr++ = inb(io_addr);
+}
+
+static inline u16 
+__ixp4xx_inw(u32 addr)
+{
+	u32 n, byte_enables, data;
+	n = addr % 4;
+	byte_enables = (0xf & ~(BIT(n) | BIT(n+1))) << IXP4XX_PCI_NP_CBE_BESL;
+	if (ixp4xx_pci_read(addr, byte_enables | NP_CMD_IOREAD, &data))
+		return 0xffff;
+
+	return data>>(8*n);
+}
+
+static inline void 
+__ixp4xx_insw(u32 io_addr, u16 *vaddr, u32 count)
+{
+	while (count--)
+		*vaddr++ = le16_to_cpu(inw(io_addr));
+}
+
+static inline u32 
+__ixp4xx_inl(u32 addr)
+{
+	u32 data;
+	if (ixp4xx_pci_read(addr, NP_CMD_IOREAD, &data))
+		return 0xffffffff;
+
+	return data;
+}
+
+static inline void 
+__ixp4xx_insl(u32 io_addr, u32 *vaddr, u32 count)
+{
+	while (count--)
+		*vaddr++ = inl(io_addr);
+}
+
+
+#endif	//  __ASM_ARM_ARCH_IO_H
+
diff -Nru a/include/asm-arm/arch-ixp4xx/irq.h b/include/asm-arm/arch-ixp4xx/irq.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/include/asm-arm/arch-ixp4xx/irq.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,13 @@
+/*
+ * irq.h 
+ *
+ *  Copyright (C) 2002 Intel Corporation.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+
+#define fixup_irq(irq)  (irq)
+
diff -Nru a/include/asm-arm/arch-ixp4xx/irqs.h b/include/asm-arm/arch-ixp4xx/irqs.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/include/asm-arm/arch-ixp4xx/irqs.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,78 @@
+/*
+ * include/asm-arm/arch-ixp4xx/irqs.h 
+ *
+ * IRQ definitions for IXP4XX based systems
+ *
+ * Copyright (C) 2002 Intel Corporation.
+ * Copyright (C) 2003 MontaVista Software, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+
+#ifndef _ARCH_IXP4XX_IRQS_H_
+#define _ARCH_IXP4XX_IRQS_H_
+
+#define NR_IRQS			32
+
+#define IRQ_IXP4XX_NPEA		0
+#define IRQ_IXP4XX_NPEB		1
+#define IRQ_IXP4XX_NPEC		2
+#define IRQ_IXP4XX_QM1		3
+#define IRQ_IXP4XX_QM2		4
+#define IRQ_IXP4XX_TIMER1	5
+#define IRQ_IXP4XX_GPIO0	6
+#define IRQ_IXP4XX_GPIO1	7
+#define IRQ_IXP4XX_PCI_INT	8
+#define IRQ_IXP4XX_PCI_DMA1	9
+#define IRQ_IXP4XX_PCI_DMA2	10
+#define IRQ_IXP4XX_TIMER2	11
+#define IRQ_IXP4XX_USB		12
+#define IRQ_IXP4XX_UART2	13
+#define IRQ_IXP4XX_TIMESTAMP	14
+#define IRQ_IXP4XX_UART1	15
+#define IRQ_IXP4XX_WDOG		16
+#define IRQ_IXP4XX_AHB_PMU	17
+#define IRQ_IXP4XX_XSCALE_PMU	18
+#define IRQ_IXP4XX_GPIO2	19
+#define IRQ_IXP4XX_GPIO3	20
+#define IRQ_IXP4XX_GPIO4	21
+#define IRQ_IXP4XX_GPIO5	22
+#define IRQ_IXP4XX_GPIO6	23
+#define IRQ_IXP4XX_GPIO7	24
+#define IRQ_IXP4XX_GPIO8	25
+#define IRQ_IXP4XX_GPIO9	26
+#define IRQ_IXP4XX_GPIO10	27
+#define IRQ_IXP4XX_GPIO11	28
+#define IRQ_IXP4XX_GPIO12	29
+#define IRQ_IXP4XX_SW_INT1	30
+#define IRQ_IXP4XX_SW_INT2	31
+
+#define	XSCALE_PMU_IRQ		(IRQ_IXP4XX_XSCALE_PMU)
+
+/*
+ * IXDP425 board IRQs
+ */
+#define	IRQ_IXDP425_PCI_INTA	IRQ_IXP4XX_GPIO11
+#define	IRQ_IXDP425_PCI_INTB	IRQ_IXP4XX_GPIO10
+#define	IRQ_IXDP425_PCI_INTC	IRQ_IXP4XX_GPIO9
+#define	IRQ_IXDP425_PCI_INTD	IRQ_IXP4XX_GPIO8
+
+/*
+ * PrPMC1100 Board IRQs
+ */
+#define	IRQ_PRPMC1100_PCI_INTA	IRQ_IXP4XX_GPIO11
+#define	IRQ_PRPMC1100_PCI_INTB	IRQ_IXP4XX_GPIO10
+#define	IRQ_PRPMC1100_PCI_INTC	IRQ_IXP4XX_GPIO9
+#define	IRQ_PRPMC1100_PCI_INTD	IRQ_IXP4XX_GPIO8
+
+/*
+ * ADI Coyote Board IRQs
+ */
+#define	IRQ_COYOTE_PCI_SLOT0	IRQ_IXP4XX_GPIO6
+#define	IRQ_COYOTE_PCI_SLOT1	IRQ_IXP4XX_GPIO11
+#define	IRQ_COYOTE_IDE		IRQ_IXP4XX_GPIO5
+
+#endif
diff -Nru a/include/asm-arm/arch-ixp4xx/ixdp425.h b/include/asm-arm/arch-ixp4xx/ixdp425.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/include/asm-arm/arch-ixp4xx/ixdp425.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,38 @@
+/*
+ * include/asm-arm/arch-ixp4xx/ixdp425.h
+ *
+ * IXDP425 platform specific definitions
+ *
+ * Author: Deepak Saxena <dsaxena@plexity.net>
+ *
+ * Copyright 2004 (c) MontaVista, Software, Inc. 
+ * 
+ * This file is licensed under  the terms of the GNU General Public 
+ * License version 2. This program is licensed "as is" without any 
+ * warranty of any kind, whether express or implied.
+ */
+
+#ifndef __ASM_ARCH_HARDWARE_H__
+#error "Do not include this directly, instead #include <asm/hardware.h>"
+#endif
+
+#define	IXDP425_FLASH_BASE	IXP4XX_EXP_BUS_CS0_BASE_PHYS
+#define	IXDP425_FLASH_SIZE	IXP4XX_EXP_BUS_CSX_REGION_SIZE
+
+#define	IXDP425_SDA_PIN		7
+#define	IXDP425_SCL_PIN		6
+
+/*
+ * IXDP425 PCI IRQs
+ */
+#define IXDP425_PCI_MAX_DEV	4
+#define IXDP425_PCI_IRQ_LINES	4
+
+
+/* PCI controller GPIO to IRQ pin mappings */
+#define IXDP425_PCI_INTA_PIN	11
+#define IXDP425_PCI_INTB_PIN	10
+#define	IXDP425_PCI_INTC_PIN	9
+#define	IXDP425_PCI_INTD_PIN	8
+
+
diff -Nru a/include/asm-arm/arch-ixp4xx/ixp4xx-regs.h b/include/asm-arm/arch-ixp4xx/ixp4xx-regs.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/include/asm-arm/arch-ixp4xx/ixp4xx-regs.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,551 @@
+/*
+ * include/asm-arm/arch-ixp4xx/ixp4xx-regs.h
+ *
+ * Register definitions for IXP4xx chipset. This file contains 
+ * register location and bit definitions only. Platform specific 
+ * definitions and helper function declarations are in platform.h 
+ * and machine-name.h.
+ *
+ * Copyright (C) 2002 Intel Corporation.
+ * Copyright (C) 2003-2004 MontaVista Software, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+
+#ifndef __ASM_ARCH_HARDWARE_H__
+#error "Do not include this directly, instead #include <asm/hardware.h>"
+#endif
+
+#ifndef _ASM_ARM_IXP4XX_H_
+#define _ASM_ARM_IXP4XX_H_
+
+/*
+ * IXP4xx Linux Memory Map:
+ *
+ * Phy		Size		Virt		Description
+ * =========================================================================
+ *
+ * 0x00000000	0x10000000(max)	PAGE_OFFSET	System RAM
+ *
+ * 0x48000000	0x04000000	ioremap'd	PCI Memory Space
+ *
+ * 0x50000000	0x10000000	ioremap'd	EXP BUS
+ *
+ * 0x6000000	0x00004000	ioremap'd	QMgr
+ *
+ * 0xC0000000	0x00001000	0xffbfe000	PCI CFG 
+ *
+ * 0xC4000000	0x00001000	0xffbfd000	EXP CFG 
+ *
+ * 0xC8000000	0x0000C000	0xffbf2000	On-Chip Peripherals
+ */
+
+
+/*
+ * Expansion BUS Configuration registers
+ */
+#define IXP4XX_EXP_CFG_BASE_PHYS	(0xC4000000)
+#define IXP4XX_EXP_CFG_BASE_VIRT	(0xFFBFD000)
+#define IXP4XX_EXP_CFG_REGION_SIZE	(0x00001000)
+
+/*
+ * PCI Config registers
+ */
+#define IXP4XX_PCI_CFG_BASE_PHYS	(0xC0000000)
+#define	IXP4XX_PCI_CFG_BASE_VIRT	(0xFFBFD000)
+#define IXP4XX_PCI_CFG_REGION_SIZE	(0x00001000)
+
+/*
+ * Peripheral space
+ */
+#define IXP4XX_PERIPHERAL_BASE_PHYS	(0xC8000000)
+#define IXP4XX_PERIPHERAL_BASE_VIRT	(0xFFBF2000)
+#define IXP4XX_PERIPHERAL_REGION_SIZE	(0x0000C000)
+
+#define IXP4XX_EXP_CS0_OFFSET	0x00
+#define IXP4XX_EXP_CS1_OFFSET   0x04
+#define IXP4XX_EXP_CS2_OFFSET   0x08
+#define IXP4XX_EXP_CS3_OFFSET   0x0C
+#define IXP4XX_EXP_CS4_OFFSET   0x10
+#define IXP4XX_EXP_CS5_OFFSET   0x14
+#define IXP4XX_EXP_CS6_OFFSET   0x18
+#define IXP4XX_EXP_CS7_OFFSET   0x1C
+#define IXP4XX_EXP_CFG0_OFFSET	0x20
+#define IXP4XX_EXP_CFG1_OFFSET	0x24
+#define IXP4XX_EXP_CFG2_OFFSET	0x28
+#define IXP4XX_EXP_CFG3_OFFSET	0x2C
+
+/*
+ * Expansion Bus Controller registers.
+ */
+#define IXP4XX_EXP_REG(x) ((volatile u32 *)(IXP4XX_EXP_CFG_BASE_VIRT+(x)))
+
+#define IXP4XX_EXP_CS0      IXP4XX_EXP_REG(IXP4XX_EXP_CS0_OFFSET)
+#define IXP4XX_EXP_CS1      IXP4XX_EXP_REG(IXP4XX_EXP_CS1_OFFSET)
+#define IXP4XX_EXP_CS2      IXP4XX_EXP_REG(IXP4XX_EXP_CS2_OFFSET) 
+#define IXP4XX_EXP_CS3      IXP4XX_EXP_REG(IXP4XX_EXP_CS3_OFFSET)
+#define IXP4XX_EXP_CS4      IXP4XX_EXP_REG(IXP4XX_EXP_CS4_OFFSET)
+#define IXP4XX_EXP_CS5      IXP4XX_EXP_REG(IXP4XX_EXP_CS5_OFFSET)
+#define IXP4XX_EXP_CS6      IXP4XX_EXP_REG(IXP4XX_EXP_CS6_OFFSET)     
+#define IXP4XX_EXP_CS7      IXP4XX_EXP_REG(IXP4XX_EXP_CS7_OFFSET)
+
+#define IXP4XX_EXP_CFG0     IXP4XX_EXP_REG(IXP4XX_EXP_CFG0_OFFSET) 
+#define IXP4XX_EXP_CFG1     IXP4XX_EXP_REG(IXP4XX_EXP_CFG1_OFFSET) 
+#define IXP4XX_EXP_CFG2     IXP4XX_EXP_REG(IXP4XX_EXP_CFG2_OFFSET) 
+#define IXP4XX_EXP_CFG3     IXP4XX_EXP_REG(IXP4XX_EXP_CFG3_OFFSET)
+
+
+/*
+ * Peripheral Space Register Region Base Addresses
+ */
+#define IXP4XX_UART1_BASE_PHYS	(IXP4XX_PERIPHERAL_BASE_PHYS + 0x0000)
+#define IXP4XX_UART2_BASE_PHYS	(IXP4XX_PERIPHERAL_BASE_PHYS + 0x1000)
+#define IXP4XX_PMU_BASE_PHYS	(IXP4XX_PERIPHERAL_BASE_PHYS + 0x2000)
+#define IXP4XX_INTC_BASE_PHYS	(IXP4XX_PERIPHERAL_BASE_PHYS + 0x3000)
+#define IXP4XX_GPIO_BASE_PHYS	(IXP4XX_PERIPHERAL_BASE_PHYS + 0x4000)
+#define IXP4XX_TIMER_BASE_PHYS	(IXP4XX_PERIPHERAL_BASE_PHYS + 0x5000)
+#define IXP4XX_USB_BASE_PHYS	(IXP4XX_PERIPHERAL_BASE_PHYS + 0x5000)
+
+#define IXP4XX_UART1_BASE_VIRT	(IXP4XX_PERIPHERAL_BASE_VIRT + 0x0000)
+#define IXP4XX_UART2_BASE_VIRT	(IXP4XX_PERIPHERAL_BASE_VIRT + 0x1000)
+#define IXP4XX_PMU_BASE_VIRT	(IXP4XX_PERIPHERAL_BASE_VIRT + 0x2000)
+#define IXP4XX_INTC_BASE_VIRT	(IXP4XX_PERIPHERAL_BASE_VIRT + 0x3000)
+#define IXP4XX_GPIO_BASE_VIRT	(IXP4XX_PERIPHERAL_BASE_VIRT + 0x4000)
+#define IXP4XX_TIMER_BASE_VIRT	(IXP4XX_PERIPHERAL_BASE_VIRT + 0x5000)
+#define IXP4XX_USB_BASE_VIRT	(IXP4XX_PERIPHERAL_BASE_VIRT + 0x5000)
+
+/*
+ * Constants to make it easy to access  Interrupt Controller registers
+ */
+#define IXP4XX_ICPR_OFFSET	0x00 /* Interrupt Status */
+#define IXP4XX_ICMR_OFFSET	0x04 /* Interrupt Enable */
+#define IXP4XX_ICLR_OFFSET	0x08 /* Interrupt IRQ/FIQ Select */
+#define IXP4XX_ICIP_OFFSET      0x0C /* IRQ Status */
+#define IXP4XX_ICFP_OFFSET	0x10 /* FIQ Status */
+#define IXP4XX_ICHR_OFFSET	0x14 /* Interrupt Priority */
+#define IXP4XX_ICIH_OFFSET	0x18 /* IRQ Highest Pri Int */
+#define IXP4XX_ICFH_OFFSET	0x1C /* FIQ Highest Pri Int */
+
+/*
+ * Interrupt Controller Register Definitions.
+ */
+
+#define IXP4XX_INTC_REG(x) ((volatile u32 *)(IXP4XX_INTC_BASE_VIRT+(x)))
+
+#define IXP4XX_ICPR	IXP4XX_INTC_REG(IXP4XX_ICPR_OFFSET)
+#define IXP4XX_ICMR     IXP4XX_INTC_REG(IXP4XX_ICMR_OFFSET)
+#define IXP4XX_ICLR     IXP4XX_INTC_REG(IXP4XX_ICLR_OFFSET)
+#define IXP4XX_ICIP     IXP4XX_INTC_REG(IXP4XX_ICIP_OFFSET)
+#define IXP4XX_ICFP     IXP4XX_INTC_REG(IXP4XX_ICFP_OFFSET)
+#define IXP4XX_ICHR     IXP4XX_INTC_REG(IXP4XX_ICHR_OFFSET)
+#define IXP4XX_ICIH     IXP4XX_INTC_REG(IXP4XX_ICIH_OFFSET) 
+#define IXP4XX_ICFH     IXP4XX_INTC_REG(IXP4XX_ICFH_OFFSET)
+                                                                                
+/*
+ * Constants to make it easy to access GPIO registers
+ */
+#define IXP4XX_GPIO_GPOUTR_OFFSET       0x00
+#define IXP4XX_GPIO_GPOER_OFFSET        0x04
+#define IXP4XX_GPIO_GPINR_OFFSET        0x08
+#define IXP4XX_GPIO_GPISR_OFFSET        0x0C
+#define IXP4XX_GPIO_GPIT1R_OFFSET	0x10
+#define IXP4XX_GPIO_GPIT2R_OFFSET	0x14
+#define IXP4XX_GPIO_GPCLKR_OFFSET	0x18
+#define IXP4XX_GPIO_GPDBSELR_OFFSET	0x1C
+
+/* 
+ * GPIO Register Definitions.
+ * [Only perform 32bit reads/writes]
+ */
+#define IXP4XX_GPIO_REG(x) ((volatile u32 *)(IXP4XX_GPIO_BASE_VIRT+(x)))
+
+#define IXP4XX_GPIO_GPOUTR	IXP4XX_GPIO_REG(IXP4XX_GPIO_GPOUTR_OFFSET)
+#define IXP4XX_GPIO_GPOER       IXP4XX_GPIO_REG(IXP4XX_GPIO_GPOER_OFFSET)
+#define IXP4XX_GPIO_GPINR       IXP4XX_GPIO_REG(IXP4XX_GPIO_GPINR_OFFSET)
+#define IXP4XX_GPIO_GPISR       IXP4XX_GPIO_REG(IXP4XX_GPIO_GPISR_OFFSET)
+#define IXP4XX_GPIO_GPIT1R      IXP4XX_GPIO_REG(IXP4XX_GPIO_GPIT1R_OFFSET)
+#define IXP4XX_GPIO_GPIT2R      IXP4XX_GPIO_REG(IXP4XX_GPIO_GPIT2R_OFFSET)
+#define IXP4XX_GPIO_GPCLKR      IXP4XX_GPIO_REG(IXP4XX_GPIO_GPCLKR_OFFSET)
+#define IXP4XX_GPIO_GPDBSELR    IXP4XX_GPIO_REG(IXP4XX_GPIO_GPDBSELR_OFFSET)
+
+/*
+ * GPIO register bit definitions
+ */
+
+/* Interrupt styles
+ */
+#define IXP4XX_GPIO_STYLE_ACTIVE_HIGH	0x0
+#define IXP4XX_GPIO_STYLE_ACTIVE_LOW	0x1
+#define IXP4XX_GPIO_STYLE_RISING_EDGE	0x2
+#define IXP4XX_GPIO_STYLE_FALLING_EDGE	0x3
+#define IXP4XX_GPIO_STYLE_TRANSITIONAL	0x4
+
+/* 
+ * Mask used to clear interrupt styles 
+ */
+#define IXP4XX_GPIO_STYLE_CLEAR		0x7
+#define IXP4XX_GPIO_STYLE_SIZE		3
+
+/*
+ * Constants to make it easy to access Timer Control/Status registers
+ */
+#define IXP4XX_OSTS_OFFSET	0x00  /* Continious TimeStamp */
+#define IXP4XX_OST1_OFFSET	0x04  /* Timer 1 Timestamp */
+#define IXP4XX_OSRT1_OFFSET	0x08  /* Timer 1 Reload */
+#define IXP4XX_OST2_OFFSET	0x0C  /* Timer 2 Timestamp */
+#define IXP4XX_OSRT2_OFFSET	0x10  /* Timer 2 Reload */
+#define IXP4XX_OSWT_OFFSET	0x14  /* Watchdog Timer */
+#define IXP4XX_OSWE_OFFSET	0x18  /* Watchdog Enable */
+#define IXP4XX_OSWK_OFFSET	0x1C  /* Watchdog Key */
+#define IXP4XX_OSST_OFFSET	0x20  /* Timer Status */
+
+/*
+ * Operating System Timer Register Definitions.
+ */
+
+#define IXP4XX_TIMER_REG(x) ((volatile u32 *)(IXP4XX_TIMER_BASE_VIRT+(x)))
+
+#define IXP4XX_OSTS	IXP4XX_TIMER_REG(IXP4XX_OSTS_OFFSET)
+#define IXP4XX_OST1	IXP4XX_TIMER_REG(IXP4XX_OST1_OFFSET)
+#define IXP4XX_OSRT1	IXP4XX_TIMER_REG(IXP4XX_OSRT1_OFFSET)
+#define IXP4XX_OST2	IXP4XX_TIMER_REG(IXP4XX_OST2_OFFSET)
+#define IXP4XX_OSRT2	IXP4XX_TIMER_REG(IXP4XX_OSRT2_OFFSET)
+#define IXP4XX_OSWT	IXP4XX_TIMER_REG(IXP4XX_OSWT_OFFSET)
+#define IXP4XX_OSWE	IXP4XX_TIMER_REG(IXP4XX_OSWE_OFFSET)
+#define IXP4XX_OSWK	IXP4XX_TIMER_REG(IXP4XX_OSWK_OFFSET)
+#define IXP4XX_OSST	IXP4XX_TIMER_REG(IXP4XX_OSST_OFFSET)
+
+/*
+ * Timer register values and bit definitions 
+ */
+#define IXP4XX_OST_ENABLE		0x00000001
+#define IXP4XX_OST_ONE_SHOT		0x00000002
+/* Low order bits of reload value ignored */
+#define IXP4XX_OST_RELOAD_MASK		0x00000004
+#define IXP4XX_OST_DISABLED		0x00000000
+#define IXP4XX_OSST_TIMER_1_PEND	0x00000001
+#define IXP4XX_OSST_TIMER_2_PEND	0x00000002
+#define IXP4XX_OSST_TIMER_TS_PEND	0x00000004
+#define IXP4XX_OSST_TIMER_WDOG_PEND	0x00000008
+#define IXP4XX_OSST_TIMER_WARM_RESET	0x00000010
+
+#define	IXP4XX_WDT_KEY			0x0000482E
+
+#define	IXP4XX_WDT_RESET_ENABLE		0x00000001
+#define	IXP4XX_WDT_IRQ_ENABLE		0x00000002
+#define	IXP4XX_WDT_COUNT_ENABLE		0x00000004
+
+
+/*
+ * Constants to make it easy to access PCI Control/Status registers
+ */
+#define PCI_NP_AD_OFFSET            0x00
+#define PCI_NP_CBE_OFFSET           0x04
+#define PCI_NP_WDATA_OFFSET         0x08
+#define PCI_NP_RDATA_OFFSET         0x0c
+#define PCI_CRP_AD_CBE_OFFSET       0x10
+#define PCI_CRP_WDATA_OFFSET        0x14
+#define PCI_CRP_RDATA_OFFSET        0x18
+#define PCI_CSR_OFFSET              0x1c
+#define PCI_ISR_OFFSET              0x20
+#define PCI_INTEN_OFFSET            0x24
+#define PCI_DMACTRL_OFFSET          0x28
+#define PCI_AHBMEMBASE_OFFSET       0x2c
+#define PCI_AHBIOBASE_OFFSET        0x30
+#define PCI_PCIMEMBASE_OFFSET       0x34
+#define PCI_AHBDOORBELL_OFFSET      0x38
+#define PCI_PCIDOORBELL_OFFSET      0x3C
+#define PCI_ATPDMA0_AHBADDR_OFFSET  0x40
+#define PCI_ATPDMA0_PCIADDR_OFFSET  0x44
+#define PCI_ATPDMA0_LENADDR_OFFSET  0x48
+#define PCI_ATPDMA1_AHBADDR_OFFSET  0x4C
+#define PCI_ATPDMA1_PCIADDR_OFFSET  0x50
+#define PCI_ATPDMA1_LENADDR_OFFSET	0x54
+
+/*
+ * PCI Control/Status Registers
+ */
+#define IXP4XX_PCI_CSR(x) ((volatile u32 *)(IXP4XX_PCI_CFG_BASE_VIRT+(x)))
+
+#define PCI_NP_AD               IXP4XX_PCI_CSR(PCI_NP_AD_OFFSET)
+#define PCI_NP_CBE              IXP4XX_PCI_CSR(PCI_NP_CBE_OFFSET)
+#define PCI_NP_WDATA            IXP4XX_PCI_CSR(PCI_NP_WDATA_OFFSET)
+#define PCI_NP_RDATA            IXP4XX_PCI_CSR(PCI_NP_RDATA_OFFSET)
+#define PCI_CRP_AD_CBE          IXP4XX_PCI_CSR(PCI_CRP_AD_CBE_OFFSET)
+#define PCI_CRP_WDATA           IXP4XX_PCI_CSR(PCI_CRP_WDATA_OFFSET)
+#define PCI_CRP_RDATA           IXP4XX_PCI_CSR(PCI_CRP_RDATA_OFFSET)
+#define PCI_CSR                 IXP4XX_PCI_CSR(PCI_CSR_OFFSET) 
+#define PCI_ISR                 IXP4XX_PCI_CSR(PCI_ISR_OFFSET)
+#define PCI_INTEN               IXP4XX_PCI_CSR(PCI_INTEN_OFFSET)
+#define PCI_DMACTRL             IXP4XX_PCI_CSR(PCI_DMACTRL_OFFSET)
+#define PCI_AHBMEMBASE          IXP4XX_PCI_CSR(PCI_AHBMEMBASE_OFFSET)
+#define PCI_AHBIOBASE           IXP4XX_PCI_CSR(PCI_AHBIOBASE_OFFSET)
+#define PCI_PCIMEMBASE          IXP4XX_PCI_CSR(PCI_PCIMEMBASE_OFFSET)
+#define PCI_AHBDOORBELL         IXP4XX_PCI_CSR(PCI_AHBDOORBELL_OFFSET)
+#define PCI_PCIDOORBELL         IXP4XX_PCI_CSR(PCI_PCIDOORBELL_OFFSET)
+#define PCI_ATPDMA0_AHBADDR     IXP4XX_PCI_CSR(PCI_ATPDMA0_AHBADDR_OFFSET)
+#define PCI_ATPDMA0_PCIADDR     IXP4XX_PCI_CSR(PCI_ATPDMA0_PCIADDR_OFFSET)
+#define PCI_ATPDMA0_LENADDR     IXP4XX_PCI_CSR(PCI_ATPDMA0_LENADDR_OFFSET)
+#define PCI_ATPDMA1_AHBADDR     IXP4XX_PCI_CSR(PCI_ATPDMA1_AHBADDR_OFFSET)
+#define PCI_ATPDMA1_PCIADDR     IXP4XX_PCI_CSR(PCI_ATPDMA1_PCIADDR_OFFSET)
+#define PCI_ATPDMA1_LENADDR     IXP4XX_PCI_CSR(PCI_ATPDMA1_LENADDR_OFFSET)
+
+/*
+ * PCI register values and bit definitions 
+ */
+
+/* CSR bit definitions */
+#define PCI_CSR_HOST    	0x00000001
+#define PCI_CSR_ARBEN   	0x00000002
+#define PCI_CSR_ADS     	0x00000004
+#define PCI_CSR_PDS     	0x00000008
+#define PCI_CSR_ABE     	0x00000010
+#define PCI_CSR_DBT     	0x00000020
+#define PCI_CSR_ASE     	0x00000100
+#define PCI_CSR_IC      	0x00008000
+
+/* ISR (Interrupt status) Register bit definitions */
+#define PCI_ISR_PSE     	0x00000001
+#define PCI_ISR_PFE     	0x00000002
+#define PCI_ISR_PPE     	0x00000004
+#define PCI_ISR_AHBE    	0x00000008
+#define PCI_ISR_APDC    	0x00000010
+#define PCI_ISR_PADC    	0x00000020
+#define PCI_ISR_ADB     	0x00000040
+#define PCI_ISR_PDB     	0x00000080
+
+/* INTEN (Interrupt Enable) Register bit definitions */
+#define PCI_INTEN_PSE   	0x00000001
+#define PCI_INTEN_PFE   	0x00000002
+#define PCI_INTEN_PPE   	0x00000004
+#define PCI_INTEN_AHBE  	0x00000008
+#define PCI_INTEN_APDC  	0x00000010
+#define PCI_INTEN_PADC  	0x00000020
+#define PCI_INTEN_ADB   	0x00000040
+#define PCI_INTEN_PDB   	0x00000080
+
+/*
+ * Shift value for byte enable on NP cmd/byte enable register
+ */
+#define IXP4XX_PCI_NP_CBE_BESL		4
+
+/*
+ * PCI commands supported by NP access unit
+ */
+#define NP_CMD_IOREAD			0x2
+#define NP_CMD_IOWRITE			0x3
+#define NP_CMD_CONFIGREAD		0xa
+#define NP_CMD_CONFIGWRITE		0xb
+#define NP_CMD_MEMREAD			0x6
+#define	NP_CMD_MEMWRITE			0x7
+
+/*
+ * Constants for CRP access into local config space
+ */
+#define CRP_AD_CBE_BESL         20
+#define CRP_AD_CBE_WRITE	0x00010000
+
+
+/*
+ * USB Device Controller
+ *
+ * These are used by the USB gadget driver, so they don't follow the
+ * IXP4XX_ naming convetions.
+ *
+ */
+# define IXP4XX_USB_REG(x)       (*((volatile u32 *)(x)))
+
+/* UDC Undocumented - Reserved1 */
+#define UDC_RES1	IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0004)  
+/* UDC Undocumented - Reserved2 */
+#define UDC_RES2	IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0008)  
+/* UDC Undocumented - Reserved3 */
+#define UDC_RES3	IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x000C)  
+/* UDC Control Register */
+#define UDCCR		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0000)  
+/* UDC Endpoint 0 Control/Status Register */
+#define UDCCS0		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0010)  
+/* UDC Endpoint 1 (IN) Control/Status Register */
+#define UDCCS1		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0014)  
+/* UDC Endpoint 2 (OUT) Control/Status Register */
+#define UDCCS2		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0018)  
+/* UDC Endpoint 3 (IN) Control/Status Register */
+#define UDCCS3		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x001C)  
+/* UDC Endpoint 4 (OUT) Control/Status Register */
+#define UDCCS4		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0020)  
+/* UDC Endpoint 5 (Interrupt) Control/Status Register */
+#define UDCCS5		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0024)  
+/* UDC Endpoint 6 (IN) Control/Status Register */
+#define UDCCS6		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0028)  
+/* UDC Endpoint 7 (OUT) Control/Status Register */
+#define UDCCS7		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x002C)  
+/* UDC Endpoint 8 (IN) Control/Status Register */
+#define UDCCS8		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0030)  
+/* UDC Endpoint 9 (OUT) Control/Status Register */
+#define UDCCS9		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0034)  
+/* UDC Endpoint 10 (Interrupt) Control/Status Register */
+#define UDCCS10		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0038)  
+/* UDC Endpoint 11 (IN) Control/Status Register */
+#define UDCCS11		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x003C)  
+/* UDC Endpoint 12 (OUT) Control/Status Register */
+#define UDCCS12		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0040)  
+/* UDC Endpoint 13 (IN) Control/Status Register */
+#define UDCCS13		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0044)  
+/* UDC Endpoint 14 (OUT) Control/Status Register */
+#define UDCCS14		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0048)  
+/* UDC Endpoint 15 (Interrupt) Control/Status Register */
+#define UDCCS15		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x004C)  
+/* UDC Frame Number Register High */
+#define UFNRH		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0060)  
+/* UDC Frame Number Register Low */
+#define UFNRL		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0064)  
+/* UDC Byte Count Reg 2 */
+#define UBCR2		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0068)  
+/* UDC Byte Count Reg 4 */
+#define UBCR4		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x006c)  
+/* UDC Byte Count Reg 7 */
+#define UBCR7		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0070)  
+/* UDC Byte Count Reg 9 */
+#define UBCR9		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0074)  
+/* UDC Byte Count Reg 12 */
+#define UBCR12		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0078)  
+/* UDC Byte Count Reg 14 */
+#define UBCR14		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x007c)  
+/* UDC Endpoint 0 Data Register */
+#define UDDR0		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0080)  
+/* UDC Endpoint 1 Data Register */
+#define UDDR1		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0100)  
+/* UDC Endpoint 2 Data Register */
+#define UDDR2		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0180)  
+/* UDC Endpoint 3 Data Register */
+#define UDDR3		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0200)  
+/* UDC Endpoint 4 Data Register */
+#define UDDR4		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0400)  
+/* UDC Endpoint 5 Data Register */
+#define UDDR5		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x00A0)  
+/* UDC Endpoint 6 Data Register */
+#define UDDR6		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0600)  
+/* UDC Endpoint 7 Data Register */
+#define UDDR7		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0680)  
+/* UDC Endpoint 8 Data Register */
+#define UDDR8		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0700)  
+/* UDC Endpoint 9 Data Register */
+#define UDDR9		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0900)  
+/* UDC Endpoint 10 Data Register */
+#define UDDR10		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x00C0)  
+/* UDC Endpoint 11 Data Register */
+#define UDDR11		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0B00)  
+/* UDC Endpoint 12 Data Register */
+#define UDDR12		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0B80)  
+/* UDC Endpoint 13 Data Register */
+#define UDDR13		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0C00)  
+/* UDC Endpoint 14 Data Register */
+#define UDDR14		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0E00)  
+/* UDC Endpoint 15 Data Register */
+#define UDDR15		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x00E0)  
+/* UDC Interrupt Control Register 0 */
+#define UICR0		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0050)  
+/* UDC Interrupt Control Register 1 */
+#define UICR1		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0054)  
+/* UDC Status Interrupt Register 0 */
+#define USIR0		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x0058)  
+/* UDC Status Interrupt Register 1 */
+#define USIR1		IXP4XX_USB_REG(IXP4XX_USB_BASE_VIRT+0x005C)  
+
+#define UDCCR_UDE	(1 << 0)	/* UDC enable */
+#define UDCCR_UDA	(1 << 1)	/* UDC active */
+#define UDCCR_RSM	(1 << 2)	/* Device resume */
+#define UDCCR_RESIR	(1 << 3)	/* Resume interrupt request */
+#define UDCCR_SUSIR	(1 << 4)	/* Suspend interrupt request */
+#define UDCCR_SRM	(1 << 5)	/* Suspend/resume interrupt mask */
+#define UDCCR_RSTIR	(1 << 6)	/* Reset interrupt request */
+#define UDCCR_REM	(1 << 7)	/* Reset interrupt mask */
+
+#define UDCCS0_OPR	(1 << 0)	/* OUT packet ready */
+#define UDCCS0_IPR	(1 << 1)	/* IN packet ready */
+#define UDCCS0_FTF	(1 << 2)	/* Flush Tx FIFO */
+#define UDCCS0_DRWF	(1 << 3)	/* Device remote wakeup feature */
+#define UDCCS0_SST	(1 << 4)	/* Sent stall */
+#define UDCCS0_FST	(1 << 5)	/* Force stall */
+#define UDCCS0_RNE	(1 << 6)	/* Receive FIFO no empty */
+#define UDCCS0_SA	(1 << 7)	/* Setup active */
+
+#define UDCCS_BI_TFS	(1 << 0)	/* Transmit FIFO service */
+#define UDCCS_BI_TPC	(1 << 1)	/* Transmit packet complete */
+#define UDCCS_BI_FTF	(1 << 2)	/* Flush Tx FIFO */
+#define UDCCS_BI_TUR	(1 << 3)	/* Transmit FIFO underrun */
+#define UDCCS_BI_SST	(1 << 4)	/* Sent stall */
+#define UDCCS_BI_FST	(1 << 5)	/* Force stall */
+#define UDCCS_BI_TSP	(1 << 7)	/* Transmit short packet */
+
+#define UDCCS_BO_RFS	(1 << 0)	/* Receive FIFO service */
+#define UDCCS_BO_RPC	(1 << 1)	/* Receive packet complete */
+#define UDCCS_BO_DME	(1 << 3)	/* DMA enable */
+#define UDCCS_BO_SST	(1 << 4)	/* Sent stall */
+#define UDCCS_BO_FST	(1 << 5)	/* Force stall */
+#define UDCCS_BO_RNE	(1 << 6)	/* Receive FIFO not empty */
+#define UDCCS_BO_RSP	(1 << 7)	/* Receive short packet */
+
+#define UDCCS_II_TFS	(1 << 0)	/* Transmit FIFO service */
+#define UDCCS_II_TPC	(1 << 1)	/* Transmit packet complete */
+#define UDCCS_II_FTF	(1 << 2)	/* Flush Tx FIFO */
+#define UDCCS_II_TUR	(1 << 3)	/* Transmit FIFO underrun */
+#define UDCCS_II_TSP	(1 << 7)	/* Transmit short packet */
+
+#define UDCCS_IO_RFS	(1 << 0)	/* Receive FIFO service */
+#define UDCCS_IO_RPC	(1 << 1)	/* Receive packet complete */
+#define UDCCS_IO_ROF	(1 << 3)	/* Receive overflow */
+#define UDCCS_IO_DME	(1 << 3)	/* DMA enable */
+#define UDCCS_IO_RNE	(1 << 6)	/* Receive FIFO not empty */
+#define UDCCS_IO_RSP	(1 << 7)	/* Receive short packet */
+
+#define UDCCS_INT_TFS	(1 << 0)	/* Transmit FIFO service */
+#define UDCCS_INT_TPC	(1 << 1)	/* Transmit packet complete */
+#define UDCCS_INT_FTF	(1 << 2)	/* Flush Tx FIFO */
+#define UDCCS_INT_TUR	(1 << 3)	/* Transmit FIFO underrun */
+#define UDCCS_INT_SST	(1 << 4)	/* Sent stall */
+#define UDCCS_INT_FST	(1 << 5)	/* Force stall */
+#define UDCCS_INT_TSP	(1 << 7)	/* Transmit short packet */
+
+#define UICR0_IM0	(1 << 0)	/* Interrupt mask ep 0 */
+#define UICR0_IM1	(1 << 1)	/* Interrupt mask ep 1 */
+#define UICR0_IM2	(1 << 2)	/* Interrupt mask ep 2 */
+#define UICR0_IM3	(1 << 3)	/* Interrupt mask ep 3 */
+#define UICR0_IM4	(1 << 4)	/* Interrupt mask ep 4 */
+#define UICR0_IM5	(1 << 5)	/* Interrupt mask ep 5 */
+#define UICR0_IM6	(1 << 6)	/* Interrupt mask ep 6 */
+#define UICR0_IM7	(1 << 7)	/* Interrupt mask ep 7 */
+
+#define UICR1_IM8	(1 << 0)	/* Interrupt mask ep 8 */
+#define UICR1_IM9	(1 << 1)	/* Interrupt mask ep 9 */
+#define UICR1_IM10	(1 << 2)	/* Interrupt mask ep 10 */
+#define UICR1_IM11	(1 << 3)	/* Interrupt mask ep 11 */
+#define UICR1_IM12	(1 << 4)	/* Interrupt mask ep 12 */
+#define UICR1_IM13	(1 << 5)	/* Interrupt mask ep 13 */
+#define UICR1_IM14	(1 << 6)	/* Interrupt mask ep 14 */
+#define UICR1_IM15	(1 << 7)	/* Interrupt mask ep 15 */
+
+#define USIR0_IR0	(1 << 0)	/* Interrup request ep 0 */
+#define USIR0_IR1	(1 << 1)	/* Interrup request ep 1 */
+#define USIR0_IR2	(1 << 2)	/* Interrup request ep 2 */
+#define USIR0_IR3	(1 << 3)	/* Interrup request ep 3 */
+#define USIR0_IR4	(1 << 4)	/* Interrup request ep 4 */
+#define USIR0_IR5	(1 << 5)	/* Interrup request ep 5 */
+#define USIR0_IR6	(1 << 6)	/* Interrup request ep 6 */
+#define USIR0_IR7	(1 << 7)	/* Interrup request ep 7 */
+
+#define USIR1_IR8	(1 << 0)	/* Interrup request ep 8 */
+#define USIR1_IR9	(1 << 1)	/* Interrup request ep 9 */
+#define USIR1_IR10	(1 << 2)	/* Interrup request ep 10 */
+#define USIR1_IR11	(1 << 3)	/* Interrup request ep 11 */
+#define USIR1_IR12	(1 << 4)	/* Interrup request ep 12 */
+#define USIR1_IR13	(1 << 5)	/* Interrup request ep 13 */
+#define USIR1_IR14	(1 << 6)	/* Interrup request ep 14 */
+#define USIR1_IR15	(1 << 7)	/* Interrup request ep 15 */
+
+#define DCMD_LENGTH	0x01fff		/* length mask (max = 8K - 1) */
+
+#endif
diff -Nru a/include/asm-arm/arch-ixp4xx/memory.h b/include/asm-arm/arch-ixp4xx/memory.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/include/asm-arm/arch-ixp4xx/memory.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,49 @@
+/*
+ * linux/include/asm-arm/arch-ixp4xx/memory.h
+ *
+ * Copyright (c) 2001-2004 MontaVista Software, Inc.
+ */
+
+#ifndef __ASM_ARCH_MEMORY_H
+#define __ASM_ARCH_MEMORY_H
+
+#define TASK_SIZE	(0xbf000000UL)
+#define TASK_SIZE_26	(0x04000000UL)
+
+/*
+ * This decides where the kernel will search for a free chunk of vm
+ * space during mmap's.
+ */
+#define TASK_UNMAPPED_BASE (0x40000000)
+
+
+#define PAGE_OFFSET	(0xc0000000UL)
+
+/*
+ * Physical DRAM offset.
+ */
+#define PHYS_OFFSET	(0x00000000UL)
+
+/*
+ * physical vs virtual ram conversion
+ */
+#define __virt_to_phys__is_a_macro
+#define __phys_to_virt__is_a_macro
+#define __virt_to_phys(x)	((x) - PAGE_OFFSET + PHYS_OFFSET)
+#define __phys_to_virt(x)	((x) - PHYS_OFFSET + PAGE_OFFSET)
+
+/*
+ * Virtual view <-> DMA view memory address translations
+ * virt_to_bus: Used to translate the virtual address to an
+ *		address suitable to be passed to set_dma_addr
+ * bus_to_virt: Used to convert an address for DMA operations
+ *		to an address that the kernel can use.
+ *
+ * These are dummies for now.
+ */
+#define __virt_to_bus__is_a_macro
+#define __bus_to_virt__is_a_macro
+#define __virt_to_bus(x)	 __virt_to_phys(x)
+#define __bus_to_virt(x)	 __phys_to_virt(x)
+
+#endif
diff -Nru a/include/asm-arm/arch-ixp4xx/param.h b/include/asm-arm/arch-ixp4xx/param.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/include/asm-arm/arch-ixp4xx/param.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,3 @@
+/*
+ * linux/include/asm-arm/arch-ixp4xx/param.h
+ */
diff -Nru a/include/asm-arm/arch-ixp4xx/platform.h b/include/asm-arm/arch-ixp4xx/platform.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/include/asm-arm/arch-ixp4xx/platform.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,116 @@
+/*
+ * include/asm-arm/arch-ixp4xx/platform.h
+ *
+ * Constants and functions that are useful to IXP4xx platform-specific code
+ * and device drivers.
+ *
+ * Copyright (C) 2004 MontaVista Software, Inc.
+ */
+
+#ifndef __ASM_ARCH_HARDWARE_H__
+#error "Do not include this directly, instead #include <asm/hardware.h>"
+#endif
+
+#ifndef __ASSEMBLY__
+
+#include <asm/types.h>
+
+/*
+ * Expansion bus memory regions
+ */
+#define IXP4XX_EXP_BUS_BASE_PHYS	(0x50000000)
+
+#define	IXP4XX_EXP_BUS_CSX_REGION_SIZE	(0x01000000)
+
+#define IXP4XX_EXP_BUS_CS0_BASE_PHYS	(IXP4XX_EXP_BUS_BASE_PHYS + 0x00000000)
+#define IXP4XX_EXP_BUS_CS1_BASE_PHYS	(IXP4XX_EXP_BUS_BASE_PHYS + 0x01000000)
+#define IXP4XX_EXP_BUS_CS2_BASE_PHYS	(IXP4XX_EXP_BUS_BASE_PHYS + 0x02000000)
+#define IXP4XX_EXP_BUS_CS3_BASE_PHYS	(IXP4XX_EXP_BUS_BASE_PHYS + 0x03000000)
+#define IXP4XX_EXP_BUS_CS4_BASE_PHYS	(IXP4XX_EXP_BUS_BASE_PHYS + 0x04000000)
+#define IXP4XX_EXP_BUS_CS5_BASE_PHYS	(IXP4XX_EXP_BUS_BASE_PHYS + 0x05000000)
+#define IXP4XX_EXP_BUS_CS6_BASE_PHYS	(IXP4XX_EXP_BUS_BASE_PHYS + 0x06000000)
+#define IXP4XX_EXP_BUS_CS7_BASE_PHYS	(IXP4XX_EXP_BUS_BASE_PHYS + 0x07000000)
+
+#define IXP4XX_FLASH_WRITABLE	(0x2)
+#define IXP4XX_FLASH_DEFAULT	(0xbcd23c40)
+#define IXP4XX_FLASH_WRITE	(0xbcd23c42)
+
+/*
+ * Clock Speed Definitions.
+ */
+#define IXP4XX_PERIPHERAL_BUS_CLOCK 	(66) /* 66Mhzi APB BUS   */ 
+#define IXP4XX_UART_XTAL        	14745600
+
+/*
+ * The IXP4xx chips do not have an I2C unit, so GPIO lines are just
+ * used to 
+ * Used as platform_data to provide GPIO pin information to the ixp42x
+ * I2C driver.
+ */
+struct ixp4xx_i2c_pins {
+	unsigned long sda_pin;
+	unsigned long scl_pin;
+};
+
+
+/*
+ * Functions used by platform-level setup code
+ */
+extern void ixp4xx_map_io(void);
+extern void ixp4xx_init_irq(void);
+extern void ixp4xx_pci_preinit(void);
+struct pci_sys_data;
+extern int ixp4xx_setup(int nr, struct pci_sys_data *sys);
+extern struct pci_bus *ixp4xx_scan_bus(int nr, struct pci_sys_data *sys);
+
+/*
+ * GPIO-functions
+ */
+/*
+ * The following converted to the real HW bits the gpio_line_config
+ */
+/* GPIO pin types */
+#define IXP4XX_GPIO_OUT 		0x1
+#define IXP4XX_GPIO_IN  		0x2
+
+#define IXP4XX_GPIO_INTSTYLE_MASK	0x7C  /* Bits [6:2] define interrupt style */
+
+/* 
+ * GPIO interrupt types.
+ */
+#define IXP4XX_GPIO_ACTIVE_HIGH		0x4 /* Default */
+#define IXP4XX_GPIO_ACTIVE_LOW		0x8
+#define IXP4XX_GPIO_RISING_EDGE		0x10
+#define IXP4XX_GPIO_FALLING_EDGE 	0x20
+#define IXP4XX_GPIO_TRANSITIONAL 	0x40
+
+/* GPIO signal types */
+#define IXP4XX_GPIO_LOW			0
+#define IXP4XX_GPIO_HIGH		1
+
+/* GPIO Clocks */
+#define IXP4XX_GPIO_CLK_0		14
+#define IXP4XX_GPIO_CLK_1		15
+
+extern void gpio_line_config(u8 line, u32 style);
+
+static inline void gpio_line_get(u8 line, int *value)
+{
+	*value = (*IXP4XX_GPIO_GPINR >> line) & 0x1;
+}
+
+static inline void gpio_line_set(u8 line, int value)
+{
+	if (value == IXP4XX_GPIO_HIGH)
+	    *IXP4XX_GPIO_GPOUTR |= (1 << line);
+	else if (value == IXP4XX_GPIO_LOW)
+	    *IXP4XX_GPIO_GPOUTR &= ~(1 << line);
+}
+
+static inline void gpio_line_isr_clear(u8 line)
+{
+	*IXP4XX_GPIO_GPISR = (1 << line);
+}
+
+#endif // __ASSEMBLY__
+
diff -Nru a/include/asm-arm/arch-ixp4xx/prpmc1100.h b/include/asm-arm/arch-ixp4xx/prpmc1100.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/include/asm-arm/arch-ixp4xx/prpmc1100.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,33 @@
+/*
+ * include/asm-arm/arch-ixp4xx/prpmc1100.h
+ *
+ * Motorolla PrPMC1100 platform specific definitions
+ *
+ * Author: Deepak Saxena <dsaxena@plexity.net>
+ *
+ * Copyright 2004 (c) MontaVista, Software, Inc. 
+ * 
+ * This file is licensed under  the terms of the GNU General Public 
+ * License version 2. This program is licensed "as is" without any 
+ * warranty of any kind, whether express or implied.
+ */
+
+#ifndef __ASM_ARCH_HARDWARE_H__
+#error "Do not include this directly, instead #include <asm/hardware.h>"
+#endif
+
+#define	PRPMC1100_FLASH_BASE	IXP4XX_EXP_BUS_CS0_BASE_PHYS
+#define	PRPMC1100_FLASH_SIZE	IXP4XX_EXP_BUS_CSX_REGION_SIZE
+
+#define	PRPMC1100_PCI_MIN_DEVID	10
+#define	PRPMC1100_PCI_MAX_DEVID	16
+#define	PRPMC1100_PCI_IRQ_LINES	4
+
+
+/* PCI controller GPIO to IRQ pin mappings */
+#define PRPMC1100_PCI_INTA_PIN	11
+#define PRPMC1100_PCI_INTB_PIN	10
+#define	PRPMC1100_PCI_INTC_PIN	9
+#define	PRPMC1100_PCI_INTD_PIN	8
+
+
diff -Nru a/include/asm-arm/arch-ixp4xx/serial.h b/include/asm-arm/arch-ixp4xx/serial.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/include/asm-arm/arch-ixp4xx/serial.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,27 @@
+/*
+ * include/asm-arm/arch-ixp4xx/serial.h
+ *
+ * Author: Deepak Saxena <dsaxena@plexity.net>
+ *
+ * Copyright (C) 2002-2004 MontaVista Software, Inc.
+ * 
+ */
+
+#ifndef _ARCH_SERIAL_H_
+#define _ARCH_SERIAL_H_
+
+/*
+ * We don't hardcode our serial port information but instead
+ * fill it in dynamically based on our platform in arch->map_io.
+ * This allows for per-board serial ports w/o a bunch of
+ * #ifdefs in this file.
+ */
+#define	STD_SERIAL_PORT_DEFNS
+#define	EXTRA_SERIAL_PORT_DEFNS
+
+/*
+ * IXP4XX uses 15.6MHz clock for uart
+ */
+#define BASE_BAUD ( IXP4XX_UART_XTAL / 16 )
+
+#endif // _ARCH_SERIAL_H_
diff -Nru a/include/asm-arm/arch-ixp4xx/system.h b/include/asm-arm/arch-ixp4xx/system.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/include/asm-arm/arch-ixp4xx/system.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,43 @@
+/*
+ * include/asm-arm/arch-ixp4x//system.h 
+ *
+ * Copyright (C) 2002 Intel Corporation.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+
+#include <asm/hardware.h>
+
+static inline void arch_idle(void)
+{
+#if 0
+	if (!hlt_counter)
+		cpu_do_idle(0);
+#endif
+}
+
+
+static inline void arch_reset(char mode)
+{
+	if ( 1 && mode == 's') {
+		/* Jump into ROM at address 0 */
+		cpu_reset(0);
+	} else {
+		/* Use on-chip reset capability */
+
+		/* set the "key" register to enable access to
+		 * "timer" and "enable" registers
+		 */
+		*IXP4XX_OSWK = 0x482e; 	    
+
+		/* write 0 to the timer register for an immidiate reset */
+		*IXP4XX_OSWT = 0;
+
+		/* disable watchdog interrupt, enable reset, enable count */
+		*IXP4XX_OSWE = 0x3;
+	}
+}
+
diff -Nru a/include/asm-arm/arch-ixp4xx/time.h b/include/asm-arm/arch-ixp4xx/time.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/include/asm-arm/arch-ixp4xx/time.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,7 @@
+/*
+ * linux/include/asm-arm/arch-ixp4xx/time.h
+ *
+ * We implement timer code in arch/arm/mach-ixp4xx/time.c
+ *
+ */
+
diff -Nru a/include/asm-arm/arch-ixp4xx/timex.h b/include/asm-arm/arch-ixp4xx/timex.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/include/asm-arm/arch-ixp4xx/timex.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,12 @@
+/*
+ * linux/include/asm-arm/arch-ixp4xx/timex.h
+ * 
+ */
+
+#include <asm/hardware.h>
+
+/*
+ * We use IXP425 General purpose timer for our timer needs, it runs at 66 MHz
+ */
+#define CLOCK_TICK_RATE (IXP4XX_PERIPHERAL_BUS_CLOCK * 1000000)
+
diff -Nru a/include/asm-arm/arch-ixp4xx/uncompress.h b/include/asm-arm/arch-ixp4xx/uncompress.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/include/asm-arm/arch-ixp4xx/uncompress.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,64 @@
+/*
+ * include/asm-arm/arch-ixp4xx/uncompress.h 
+ *
+ * Copyright (C) 2002 Intel Corporation.
+ * Copyright (C) 2003-2004 MontaVista Software, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+
+#ifndef _ARCH_UNCOMPRESS_H_
+#define _ARCH_UNCOMPRESS_H_
+
+#include <asm/hardware.h>
+#include <asm/mach-types.h>
+#include <linux/serial_reg.h>
+
+#define TX_DONE (UART_LSR_TEMT|UART_LSR_THRE)
+
+static volatile u32* uart_base;
+
+static __inline__ void putc(char c)
+{
+	/* Check THRE and TEMT bits before we transmit the character.
+	 */
+	while ((uart_base[UART_LSR] & TX_DONE) != TX_DONE); 
+	*uart_base = c;
+}
+
+/*
+ * This does not append a newline
+ */
+static void puts(const char *s)
+{
+	while (*s)
+	{
+		putc(*s);
+		if (*s == '\n')
+			putc('\r');
+		s++;
+	}
+}
+
+static __inline__ void __arch_decomp_setup(unsigned long arch_id)
+{
+	/*
+	 * Coyote only has UART2 connected
+	 */
+	if (__machine_arch_type == MACH_TYPE_ADI_COYOTE)
+		uart_base = (volatile u32*) IXP4XX_UART2_BASE_PHYS;
+	else
+		uart_base = (volatile u32*) IXP4XX_UART1_BASE_PHYS;
+}
+
+/*
+ * arch_id is a variable in decompress_kernel()
+ */
+#define arch_decomp_setup()	__arch_decomp_setup(arch_id)
+
+#define arch_decomp_wdog()
+
+#endif
diff -Nru a/include/asm-arm/arch-ixp4xx/vmalloc.h b/include/asm-arm/arch-ixp4xx/vmalloc.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/include/asm-arm/arch-ixp4xx/vmalloc.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,17 @@
+/*
+ * linux/include/asm-arm/arch-ixp4xx/vmalloc.h
+ */
+
+/*
+ * Just any arbitrary offset to the start of the vmalloc VM area: the
+ * current 8MB value just means that there will be a 8MB "hole" after the
+ * physical memory until the kernel virtual memory starts.  That means that
+ * any out-of-bounds memory accesses will hopefully be caught.
+ * The vmalloc() routines leaves a hole of 4kB between each vmalloced
+ * area for the same reason. ;)
+ */
+#define VMALLOC_OFFSET	  (8*1024*1024)
+#define VMALLOC_START	  (((unsigned long)high_memory + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1))
+#define VMALLOC_VMADDR(x) ((unsigned long)(x))
+#define VMALLOC_END       (0xFF000000)
+
diff -Nru a/include/asm-arm/arch-pxa/dma.h b/include/asm-arm/arch-pxa/dma.h
--- a/include/asm-arm/arch-pxa/dma.h	Sun May 16 01:18:36 2004
+++ b/include/asm-arm/arch-pxa/dma.h	Sun May 16 01:18:36 2004
@@ -29,15 +29,33 @@
 	volatile u32 dcmd;	/* DCMD value for the current transfer */
 } pxa_dma_desc;
 
-/*
- * DMA registration
- */
+#if defined(CONFIG_PXA27x)
+
+#define PXA_DMA_CHANNELS	32
+#define PXA_DMA_NBCH(prio)	((prio == DMA_PRIO_LOW) ? 16 : 8)
+
+typedef enum {
+	DMA_PRIO_HIGH = 0,
+	DMA_PRIO_MEDIUM = 8,
+	DMA_PRIO_LOW = 16
+} pxa_dma_prio;
+
+#elif defined(CONFIG_PXA25x)
+
+#define PXA_DMA_CHANNELS	16
+#define PXA_DMA_NBCH(prio)	((prio == DMA_PRIO_LOW) ? 8 : 4)
 
 typedef enum {
 	DMA_PRIO_HIGH = 0,
 	DMA_PRIO_MEDIUM = 4,
 	DMA_PRIO_LOW = 8
 } pxa_dma_prio;
+
+#endif
+
+/*
+ * DMA registration
+ */
 
 int pxa_request_dma (char *name,
 			 pxa_dma_prio prio,
diff -Nru a/include/asm-arm/arch-pxa/hardware.h b/include/asm-arm/arch-pxa/hardware.h
--- a/include/asm-arm/arch-pxa/hardware.h	Sun May 16 01:18:33 2004
+++ b/include/asm-arm/arch-pxa/hardware.h	Sun May 16 01:18:33 2004
@@ -17,15 +17,6 @@
 
 
 /*
- * These are statically mapped PCMCIA IO space for designs using it as a
- * generic IO bus, typically with ISA parts, hardwired IDE interfaces, etc.
- * The actual PCMCIA code is mapping required IO region at run time.
- */
-#define PCMCIA_IO_0_BASE	0xf6000000
-#define PCMCIA_IO_1_BASE	0xf7000000
-
-
-/*
  * We requires absolute addresses.
  */
 #define PCIO_BASE		0
@@ -38,15 +29,21 @@
 #define UNCACHED_ADDR		UNCACHED_PHYS_0
 
 /*
- * Intel PXA internal I/O mappings:
+ * Intel PXA2xx internal register mapping:
+ *
+ * 0x40000000 - 0x41ffffff <--> 0xf2000000 - 0xf3ffffff
+ * 0x44000000 - 0x45ffffff <--> 0xf4000000 - 0xf5ffffff
+ * 0x48000000 - 0x49ffffff <--> 0xf6000000 - 0xf7ffffff
+ * 0x4c000000 - 0x4dffffff <--> 0xf8000000 - 0xf9ffffff
+ * 0x50000000 - 0x51ffffff <--> 0xfa000000 - 0xfbffffff
+ * 0x54000000 - 0x55ffffff <--> 0xfc000000 - 0xfdffffff
+ * 0x58000000 - 0x59ffffff <--> 0xfe000000 - 0xffffffff
  *
- * 0x40000000 - 0x41ffffff <--> 0xf8000000 - 0xf9ffffff
- * 0x44000000 - 0x45ffffff <--> 0xfa000000 - 0xfbffffff
- * 0x48000000 - 0x49ffffff <--> 0xfc000000 - 0xfdffffff
+ * Note that not all PXA2xx chips implement all those addresses, and the
+ * kernel only maps the minimum needed range of this mapping.
  */
-
-#define io_p2v(x)	( ((x) | 0xbe000000) ^ (~((x) >> 1) & 0x06000000) )
-#define io_v2p( x )	( ((x) & 0x41ffffff) ^ ( ((x) & 0x06000000) << 1) )
+#define io_p2v(x) (0xf2000000 + ((x) & 0x01ffffff) + (((x) & 0x1c000000) >> 1))
+#define io_v2p(x) (0x40000000 + ((x) & 0x01ffffff) + (((x) & 0x0e000000) << 1))
 
 #ifndef __ASSEMBLY__
 
diff -Nru a/include/asm-arm/arch-pxa/pxa-regs.h b/include/asm-arm/arch-pxa/pxa-regs.h
--- a/include/asm-arm/arch-pxa/pxa-regs.h	Sun May 16 01:18:35 2004
+++ b/include/asm-arm/arch-pxa/pxa-regs.h	Sun May 16 01:18:35 2004
@@ -10,6 +10,9 @@
  * published by the Free Software Foundation.
  */
 
+#ifndef __PXA_REGS_H
+#define __PXA_REGS_H
+
 #include <linux/config.h>
 
 // FIXME hack so that SA-1111.h will work [cb]
@@ -101,6 +104,15 @@
 #define DCSR_RUN	(1 << 31)	/* Run Bit (read / write) */
 #define DCSR_NODESC	(1 << 30)	/* No-Descriptor Fetch (read / write) */
 #define DCSR_STOPIRQEN	(1 << 29)	/* Stop Interrupt Enable (read / write) */
+#ifdef CONFIG_PXA27x
+#define DCSR_EORIRQEN	(1 << 28)       /* End of Receive Interrupt Enable (R/W) */
+#define DCSR_EORJMPEN	(1 << 27)       /* Jump to next descriptor on EOR */
+#define DCSR_EORSTOPEN	(1 << 26)       /* STOP on an EOR */
+#define DCSR_SETCMPST	(1 << 25)       /* Set Descriptor Compare Status */
+#define DCSR_CLRCMPST	(1 << 24)       /* Clear Descriptor Compare Status */
+#define DCSR_CMPST	(1 << 10)       /* The Descriptor Compare Status */
+#define DCSR_ENRINTR	(1 << 9)        /* The end of Receive */
+#endif
 #define DCSR_REQPEND	(1 << 8)	/* Request Pending (read-only) */
 #define DCSR_STOPSTATE	(1 << 3)	/* Stop State (read-only) */
 #define DCSR_ENDINTR	(1 << 2)	/* End Interrupt (read / write) */
@@ -109,6 +121,7 @@
 
 #define DINT		__REG(0x400000f0)  /* DMA Interrupt Register */
 
+#define DRCMR(n)	__REG2(0x40000100, (n)<<2)
 #define DRCMR0		__REG(0x40000100)  /* Request to Channel Map Register for DREQ 0 */
 #define DRCMR1		__REG(0x40000104)  /* Request to Channel Map Register for DREQ 1 */
 #define DRCMR2		__REG(0x40000108)  /* Request to Channel Map Register for I2S receive Request */
@@ -150,6 +163,10 @@
 #define DRCMR38		__REG(0x40000198)  /* Request to Channel Map Register for USB endpoint 14 Request */
 #define DRCMR39		__REG(0x4000019C)  /* Reserved */
 
+#define DRCMR68		__REG(0x40001110)  /* Request to Channel Map Register for Camera FIFO 0 Request */
+#define DRCMR69		__REG(0x40001114)  /* Request to Channel Map Register for Camera FIFO 1 Request */
+#define DRCMR70		__REG(0x40001118)  /* Request to Channel Map Register for Camera FIFO 2 Request */
+
 #define DRCMRRXSADR	DRCMR2
 #define DRCMRTXSADR	DRCMR3
 #define DRCMRRXBTRBR	DRCMR4
@@ -169,9 +186,10 @@
 #define DRCMRTXSTTHR	DRCMR20
 #define DRCMRRXMMC	DRCMR21
 #define DRCMRTXMMC	DRCMR22
+#define DRCMRUDC(x)	DRCMR((x) + 24)
 
 #define DRCMR_MAPVLD	(1 << 7)	/* Map Valid (read / write) */
-#define DRCMR_CHLNUM	0x0f		/* mask for Channel Number (read / write) */
+#define DRCMR_CHLNUM	0x1f		/* mask for Channel Number (read / write) */
 
 #define DDADR0		__REG(0x40000200)  /* DMA Descriptor Address Register Channel 0 */
 #define DSADR0		__REG(0x40000204)  /* DMA Source Address Register Channel 0 */
@@ -398,6 +416,12 @@
 #define ISR		__REG(0x40301698)  /* I2C Status Register - ISR */
 #define ISAR		__REG(0x403016A0)  /* I2C Slave Address Register - ISAR */
 
+#define PWRIBMR    __REG(0x40f00180)  /* Power I2C Bus Monitor Register-IBMR */
+#define PWRIDBR    __REG(0x40f00188)  /* Power I2C Data Buffer Register-IDBR */
+#define PWRICR __REG(0x40f00190)  /* Power I2C Control Register - ICR */
+#define PWRISR __REG(0x40f00198)  /* Power I2C Status Register - ISR */
+#define PWRISAR    __REG(0x40f001A0)  /*Power I2C Slave Address Register-ISAR */
+
 #define ICR_START	(1 << 0)	   /* start bit */
 #define ICR_STOP	(1 << 1)	   /* stop bit */
 #define ICR_ACKNAK	(1 << 2)	   /* send ACK(0) or NAK(1) */
@@ -523,7 +547,10 @@
 
 /*
  * USB Device Controller
+ * PXA25x and PXA27x USB device controller registers are different.
  */
+#if defined(CONFIG_PXA25x)
+
 #define UDC_RES1	__REG(0x40600004)  /* UDC Undocumented - Reserved1 */
 #define UDC_RES2	__REG(0x40600008)  /* UDC Undocumented - Reserved2 */
 #define UDC_RES3	__REG(0x4060000C)  /* UDC Undocumented - Reserved3 */
@@ -679,11 +706,246 @@
 #define USIR1_IR14	(1 << 6)	/* Interrup request ep 14 */
 #define USIR1_IR15	(1 << 7)	/* Interrup request ep 15 */
 
+#elif defined(CONFIG_PXA27x)
+
+#define UDCCR           __REG(0x40600000) /* UDC Control Register */
+#define UDCCR_OEN	(1 << 31)	/* On-the-Go Enable */
+#define UDCCR_AALTHNP	(1 << 30)	/* A-device Alternate Host Negotiation
+					   Protocol Port Support */
+#define UDCCR_AHNP	(1 << 29)	/* A-device Host Negotiation Protocol
+					   Support */
+#define UDCCR_BHNP	(1 << 28)	/* B-device Host Negotiation Protocol
+					   Enable */
+#define UDCCR_DWRE	(1 << 16)	/* Device Remote Wake-up Enable */
+#define UDCCR_ACN	(0x03 << 11)	/* Active UDC configuration Number */
+#define UDCCR_ACN_S	11
+#define UDCCR_AIN	(0x07 << 8)	/* Active UDC interface Number */
+#define UDCCR_AIN_S	8
+#define UDCCR_AAISN	(0x07 << 5)	/* Active UDC Alternate Interface
+					   Setting Number */
+#define UDCCR_AAISN_S	5
+#define UDCCR_SMAC	(1 << 4)	/* Switch Endpoint Memory to Active
+					   Configuration */
+#define UDCCR_EMCE	(1 << 3)	/* Endpoint Memory Configuration
+					   Error */
+#define UDCCR_UDR	(1 << 2)	/* UDC Resume */
+#define UDCCR_UDA	(1 << 1)	/* UDC Active */
+#define UDCCR_UDE	(1 << 0)	/* UDC Enable */
+
+#define UDCICR0         __REG(0x40600004) /* UDC Interrupt Control Register0 */
+#define UDCICR1         __REG(0x40600008) /* UDC Interrupt Control Register1 */
+#define UDCICR_FIFOERR	(1 << 1)	/* FIFO Error interrupt for EP */
+#define UDCICR_PKTCOMPL (1 << 0)	/* Packet Complete interrupt for EP */
+
+#define UDC_INT_FIFOERROR  (0x2)
+#define UDC_INT_PACKETCMP  (0x1)
+
+#define UDCICR_INT(n,intr) (((intr) & 0x03) << (((n) & 0x0F) * 2))
+#define UDCICR1_IECC	(1 << 31)	/* IntEn - Configuration Change */
+#define UDCICR1_IESOF	(1 << 30)	/* IntEn - Start of Frame */
+#define UDCICR1_IERU	(1 << 29)	/* IntEn - Resume */
+#define UDCICR1_IESU	(1 << 28)	/* IntEn - Suspend */
+#define UDCICR1_IERS	(1 << 27)	/* IntEn - Reset */
+
+#define UDCISR0         __REG(0x4060000C) /* UDC Interrupt Status Register 0 */
+#define UDCISR1         __REG(0x40600010) /* UDC Interrupt Status Register 1 */
+#define UDCISR_INT(n,intr) (((intr) & 0x03) << (((n) & 0x0F) * 2))
+#define UDCISR1_IECC	(1 << 31)	/* IntEn - Configuration Change */
+#define UDCISR1_IESOF	(1 << 30)	/* IntEn - Start of Frame */
+#define UDCISR1_IERU	(1 << 29)	/* IntEn - Resume */
+#define UDCISR1_IESU	(1 << 28)	/* IntEn - Suspend */
+#define UDCISR1_IERS	(1 << 27)	/* IntEn - Reset */
+
+
+#define UDCFNR          __REG(0x40600014) /* UDC Frame Number Register */
+#define UDCOTGICR	__REG(0x40600018) /* UDC On-The-Go interrupt control */
+#define UDCOTGICR_IESF	(1 << 24)	/* OTG SET_FEATURE command recvd */
+#define UDCOTGICR_IEXR	(1 << 17)	/* Extra Transciever Interrupt
+					   Rising Edge Interrupt Enable */
+#define UDCOTGICR_IEXF	(1 << 16)	/* Extra Transciever Interrupt
+					   Falling Edge Interrupt Enable */
+#define UDCOTGICR_IEVV40R (1 << 9)	/* OTG Vbus Valid 4.0V Rising Edge
+					   Interrupt Enable */
+#define UDCOTGICR_IEVV40F (1 << 8)	/* OTG Vbus Valid 4.0V Falling Edge
+					   Interrupt Enable */
+#define UDCOTGICR_IEVV44R (1 << 7)	/* OTG Vbus Valid 4.4V Rising Edge
+					   Interrupt Enable */
+#define UDCOTGICR_IEVV44F (1 << 6)	/* OTG Vbus Valid 4.4V Falling Edge
+					   Interrupt Enable */
+#define UDCOTGICR_IESVR	(1 << 5)	/* OTG Session Valid Rising Edge
+					   Interrupt Enable */
+#define UDCOTGICR_IESVF	(1 << 4)	/* OTG Session Valid Falling Edge
+					   Interrupt Enable */
+#define UDCOTGICR_IESDR	(1 << 3)	/* OTG A-Device SRP Detect Rising
+					   Edge Interrupt Enable */
+#define UDCOTGICR_IESDF	(1 << 2)	/* OTG A-Device SRP Detect Falling
+					   Edge Interrupt Enable */
+#define UDCOTGICR_IEIDR	(1 << 1)	/* OTG ID Change Rising Edge
+					   Interrupt Enable */
+#define UDCOTGICR_IEIDF	(1 << 0)	/* OTG ID Change Falling Edge
+					   Interrupt Enable */
+
+#define UDCCSN(x)	__REG2(0x40600100, (x) << 2)
+#define UDCCSR0         __REG(0x40600100) /* UDC Control/Status register - Endpoint 0 */
+#define UDCCSR0_SA	(1 << 7)	/* Setup Active */
+#define UDCCSR0_RNE	(1 << 6)	/* Receive FIFO Not Empty */
+#define UDCCSR0_FST	(1 << 5)	/* Force Stall */
+#define UDCCSR0_SST	(1 << 4)	/* Sent Stall */
+#define UDCCSR0_DME	(1 << 3)	/* DMA Enable */
+#define UDCCSR0_FTF	(1 << 2)	/* Flush Transmit FIFO */
+#define UDCCSR0_IPR	(1 << 1)	/* IN Packet Ready */
+#define UDCCSR0_OPC	(1 << 0)	/* OUT Packet Complete */
+
+#define UDCCSRA         __REG(0x40600104) /* UDC Control/Status register - Endpoint A */
+#define UDCCSRB         __REG(0x40600108) /* UDC Control/Status register - Endpoint B */
+#define UDCCSRC         __REG(0x4060010C) /* UDC Control/Status register - Endpoint C */
+#define UDCCSRD         __REG(0x40600110) /* UDC Control/Status register - Endpoint D */
+#define UDCCSRE         __REG(0x40600114) /* UDC Control/Status register - Endpoint E */
+#define UDCCSRF         __REG(0x40600118) /* UDC Control/Status register - Endpoint F */
+#define UDCCSRG         __REG(0x4060011C) /* UDC Control/Status register - Endpoint G */
+#define UDCCSRH         __REG(0x40600120) /* UDC Control/Status register - Endpoint H */
+#define UDCCSRI         __REG(0x40600124) /* UDC Control/Status register - Endpoint I */
+#define UDCCSRJ         __REG(0x40600128) /* UDC Control/Status register - Endpoint J */
+#define UDCCSRK         __REG(0x4060012C) /* UDC Control/Status register - Endpoint K */
+#define UDCCSRL         __REG(0x40600130) /* UDC Control/Status register - Endpoint L */
+#define UDCCSRM         __REG(0x40600134) /* UDC Control/Status register - Endpoint M */
+#define UDCCSRN         __REG(0x40600138) /* UDC Control/Status register - Endpoint N */
+#define UDCCSRP         __REG(0x4060013C) /* UDC Control/Status register - Endpoint P */
+#define UDCCSRQ         __REG(0x40600140) /* UDC Control/Status register - Endpoint Q */
+#define UDCCSRR         __REG(0x40600144) /* UDC Control/Status register - Endpoint R */
+#define UDCCSRS         __REG(0x40600148) /* UDC Control/Status register - Endpoint S */
+#define UDCCSRT         __REG(0x4060014C) /* UDC Control/Status register - Endpoint T */
+#define UDCCSRU         __REG(0x40600150) /* UDC Control/Status register - Endpoint U */
+#define UDCCSRV         __REG(0x40600154) /* UDC Control/Status register - Endpoint V */
+#define UDCCSRW         __REG(0x40600158) /* UDC Control/Status register - Endpoint W */
+#define UDCCSRX         __REG(0x4060015C) /* UDC Control/Status register - Endpoint X */
+
+#define UDCCSR_DPE	(1 << 9)	/* Data Packet Error */
+#define UDCCSR_FEF	(1 << 8)	/* Flush Endpoint FIFO */
+#define UDCCSR_SP	(1 << 7)	/* Short Packet Control/Status */
+#define UDCCSR_BNE	(1 << 6)	/* Buffer Not Empty (IN endpoints) */
+#define UDCCSR_BNF	(1 << 6)	/* Buffer Not Full (OUT endpoints) */
+#define UDCCSR_FST	(1 << 5)	/* Force STALL */
+#define UDCCSR_SST	(1 << 4)	/* Sent STALL */
+#define UDCCSR_DME	(1 << 3)	/* DMA Enable */
+#define UDCCSR_TRN	(1 << 2)	/* Tx/Rx NAK */
+#define UDCCSR_PC	(1 << 1)	/* Packet Complete */
+#define UDCCSR_FS	(1 << 0)	/* FIFO needs service */
+
+#define UDCBCN(x)	__REG2(0x40600200, (x)<<2)
+#define UDCBCR0         __REG(0x40600200) /* Byte Count Register - EP0 */
+#define UDCBCRA         __REG(0x40600204) /* Byte Count Register - EPA */
+#define UDCBCRB         __REG(0x40600208) /* Byte Count Register - EPB */
+#define UDCBCRC         __REG(0x4060020C) /* Byte Count Register - EPC */
+#define UDCBCRD         __REG(0x40600210) /* Byte Count Register - EPD */
+#define UDCBCRE         __REG(0x40600214) /* Byte Count Register - EPE */
+#define UDCBCRF         __REG(0x40600218) /* Byte Count Register - EPF */
+#define UDCBCRG         __REG(0x4060021C) /* Byte Count Register - EPG */
+#define UDCBCRH         __REG(0x40600220) /* Byte Count Register - EPH */
+#define UDCBCRI         __REG(0x40600224) /* Byte Count Register - EPI */
+#define UDCBCRJ         __REG(0x40600228) /* Byte Count Register - EPJ */
+#define UDCBCRK         __REG(0x4060022C) /* Byte Count Register - EPK */
+#define UDCBCRL         __REG(0x40600230) /* Byte Count Register - EPL */
+#define UDCBCRM         __REG(0x40600234) /* Byte Count Register - EPM */
+#define UDCBCRN         __REG(0x40600238) /* Byte Count Register - EPN */
+#define UDCBCRP         __REG(0x4060023C) /* Byte Count Register - EPP */
+#define UDCBCRQ         __REG(0x40600240) /* Byte Count Register - EPQ */
+#define UDCBCRR         __REG(0x40600244) /* Byte Count Register - EPR */
+#define UDCBCRS         __REG(0x40600248) /* Byte Count Register - EPS */
+#define UDCBCRT         __REG(0x4060024C) /* Byte Count Register - EPT */
+#define UDCBCRU         __REG(0x40600250) /* Byte Count Register - EPU */
+#define UDCBCRV         __REG(0x40600254) /* Byte Count Register - EPV */
+#define UDCBCRW         __REG(0x40600258) /* Byte Count Register - EPW */
+#define UDCBCRX         __REG(0x4060025C) /* Byte Count Register - EPX */
+
+#define UDCDN(x)	__REG2(0x40600300, (x)<<2)
+#define PHYS_UDCDN(x)	(0x40600300 + ((x)<<2))
+#define PUDCDN(x)	(volatile u32 *)(io_p2v(PHYS_UDCDN((x))))
+#define UDCDR0          __REG(0x40600300) /* Data Register - EP0 */
+#define UDCDRA          __REG(0x40600304) /* Data Register - EPA */
+#define UDCDRB          __REG(0x40600308) /* Data Register - EPB */
+#define UDCDRC          __REG(0x4060030C) /* Data Register - EPC */
+#define UDCDRD          __REG(0x40600310) /* Data Register - EPD */
+#define UDCDRE          __REG(0x40600314) /* Data Register - EPE */
+#define UDCDRF          __REG(0x40600318) /* Data Register - EPF */
+#define UDCDRG          __REG(0x4060031C) /* Data Register - EPG */
+#define UDCDRH          __REG(0x40600320) /* Data Register - EPH */
+#define UDCDRI          __REG(0x40600324) /* Data Register - EPI */
+#define UDCDRJ          __REG(0x40600328) /* Data Register - EPJ */
+#define UDCDRK          __REG(0x4060032C) /* Data Register - EPK */
+#define UDCDRL          __REG(0x40600330) /* Data Register - EPL */
+#define UDCDRM          __REG(0x40600334) /* Data Register - EPM */
+#define UDCDRN          __REG(0x40600338) /* Data Register - EPN */
+#define UDCDRP          __REG(0x4060033C) /* Data Register - EPP */
+#define UDCDRQ          __REG(0x40600340) /* Data Register - EPQ */
+#define UDCDRR          __REG(0x40600344) /* Data Register - EPR */
+#define UDCDRS          __REG(0x40600348) /* Data Register - EPS */
+#define UDCDRT          __REG(0x4060034C) /* Data Register - EPT */
+#define UDCDRU          __REG(0x40600350) /* Data Register - EPU */
+#define UDCDRV          __REG(0x40600354) /* Data Register - EPV */
+#define UDCDRW          __REG(0x40600358) /* Data Register - EPW */
+#define UDCDRX          __REG(0x4060035C) /* Data Register - EPX */
+
+#define UDCCN(x)       __REG2(0x40600400, (x)<<2)
+#define UDCCRA          __REG(0x40600404) /* Configuration register EPA */
+#define UDCCRB          __REG(0x40600408) /* Configuration register EPB */
+#define UDCCRC          __REG(0x4060040C) /* Configuration register EPC */
+#define UDCCRD          __REG(0x40600410) /* Configuration register EPD */
+#define UDCCRE          __REG(0x40600414) /* Configuration register EPE */
+#define UDCCRF          __REG(0x40600418) /* Configuration register EPF */
+#define UDCCRG          __REG(0x4060041C) /* Configuration register EPG */
+#define UDCCRH          __REG(0x40600420) /* Configuration register EPH */
+#define UDCCRI          __REG(0x40600424) /* Configuration register EPI */
+#define UDCCRJ          __REG(0x40600428) /* Configuration register EPJ */
+#define UDCCRK          __REG(0x4060042C) /* Configuration register EPK */
+#define UDCCRL          __REG(0x40600430) /* Configuration register EPL */
+#define UDCCRM          __REG(0x40600434) /* Configuration register EPM */
+#define UDCCRN          __REG(0x40600438) /* Configuration register EPN */
+#define UDCCRP          __REG(0x4060043C) /* Configuration register EPP */
+#define UDCCRQ          __REG(0x40600440) /* Configuration register EPQ */
+#define UDCCRR          __REG(0x40600444) /* Configuration register EPR */
+#define UDCCRS          __REG(0x40600448) /* Configuration register EPS */
+#define UDCCRT          __REG(0x4060044C) /* Configuration register EPT */
+#define UDCCRU          __REG(0x40600450) /* Configuration register EPU */
+#define UDCCRV          __REG(0x40600454) /* Configuration register EPV */
+#define UDCCRW          __REG(0x40600458) /* Configuration register EPW */
+#define UDCCRX          __REG(0x4060045C) /* Configuration register EPX */
+
+#define UDCCONR_CN	(0x03 << 25)	/* Configuration Number */
+#define UDCCONR_CN_S	(25)
+#define UDCCONR_IN	(0x07 << 22)	/* Interface Number */
+#define UDCCONR_IN_S	(22)
+#define UDCCONR_AISN	(0x07 << 19)	/* Alternate Interface Number */
+#define UDCCONR_AISN_S	(19)
+#define UDCCONR_EN	(0x0f << 15)	/* Endpoint Number */
+#define UDCCONR_EN_S	(15)
+#define UDCCONR_ET	(0x03 << 13)	/* Endpoint Type: */
+#define UDCCONR_ET_S	(13)
+#define UDCCONR_ET_INT	(0x03 << 13)	/*   Interrupt */
+#define UDCCONR_ET_BULK	(0x02 << 13)	/*   Bulk */
+#define UDCCONR_ET_ISO	(0x01 << 13)	/*   Isochronous */
+#define UDCCONR_ET_NU	(0x00 << 13)	/*   Not used */
+#define UDCCONR_ED	(1 << 12)	/* Endpoint Direction */
+#define UDCCONR_MPS	(0x3ff << 2)	/* Maximum Packet Size */
+#define UDCCONR_MPS_S	(2)
+#define UDCCONR_DE	(1 << 1)	/* Double Buffering Enable */
+#define UDCCONR_EE	(1 << 0)	/* Endpoint Enable */
+
+
+#define UDC_INT_FIFOERROR  (0x2)
+#define UDC_INT_PACKETCMP  (0x1)
+
+#define UDC_FNR_MASK     (0x7ff)
+
+#define UDCCSR_WR_MASK   (UDCCSR_DME|UDCCSR_FST)
+#define UDC_BCR_MASK    (0x3ff)
+#endif
 
 /*
  * Fast Infrared Communication Port
  */
 
+#define FICP		__REG(0x40800000)  /* Start of FICP area */
 #define ICCR0		__REG(0x40800000)  /* ICP Control Register 0 */
 #define ICCR1		__REG(0x40800004)  /* ICP Control Register 1 */
 #define ICCR2		__REG(0x40800008)  /* ICP Control Register 2 */
@@ -691,29 +953,41 @@
 #define ICSR0		__REG(0x40800014)  /* ICP Status Register 0 */
 #define ICSR1		__REG(0x40800018)  /* ICP Status Register 1 */
 
-#define ICCR0_AME       (1 << 7)           /* Address match enable */
-#define ICCR0_TIE       (1 << 6)           /* Transmit FIFO interrupt enable */
-#define ICCR0_RIE       (1 << 5)           /* Receive FIFO interrupt enable */
-#define ICCR0_RXE       (1 << 4)           /* Receive enable */
-#define ICCR0_TXE       (1 << 3)           /* Transmit enable */
-#define ICCR0_TUS       (1 << 2)           /* Transmit FIFO underrun select */
-#define ICCR0_LBM       (1 << 1)           /* Loopback mode */
-#define ICCR0_ITR       (1 << 0)           /* IrDA transmission */
-
-#define ICSR0_FRE       (1 << 5)           /* Framing error */
-#define ICSR0_RFS       (1 << 4)           /* Receive FIFO service request */
-#define ICSR0_TFS       (1 << 3)           /* Transnit FIFO service request */
-#define ICSR0_RAB       (1 << 2)           /* Receiver abort */
-#define ICSR0_TUR       (1 << 1)           /* Trunsmit FIFO underun */
-#define ICSR0_EIF       (1 << 0)           /* End/Error in FIFO */
-
-#define ICSR1_ROR       (1 << 6)           /* Receiver FIFO underrun  */
-#define ICSR1_CRE       (1 << 5)           /* CRC error */
-#define ICSR1_EOF       (1 << 4)           /* End of frame */
-#define ICSR1_TNF       (1 << 3)           /* Transmit FIFO not full */
-#define ICSR1_RNE       (1 << 2)           /* Receive FIFO not empty */
-#define ICSR1_TBY       (1 << 1)           /* Tramsmiter busy flag */
-#define ICSR1_RSY       (1 << 0)           /* Recevier synchronized flag */
+#define ICCR0_AME	(1 << 7)	/* Adress match enable */
+#define ICCR0_TIE	(1 << 6)	/* Transmit FIFO interrupt enable */
+#define ICCR0_RIE	(1 << 5)	/* Recieve FIFO interrupt enable */
+#define ICCR0_RXE	(1 << 4)	/* Receive enable */
+#define ICCR0_TXE	(1 << 3)	/* Transmit enable */
+#define ICCR0_TUS	(1 << 2)	/* Transmit FIFO underrun select */
+#define ICCR0_LBM	(1 << 1)	/* Loopback mode */
+#define ICCR0_ITR	(1 << 0)	/* IrDA transmission */
+
+#ifdef CONFIG_CPU_BULVERDE
+#define ICCR2_RXP       (1 << 3)	/* Receive Pin Polarity select */
+#define ICCR2_TXP       (1 << 2)	/* Transmit Pin Polarity select */
+#define ICCR2_TRIG	(3 << 0)	/* Receive FIFO Trigger threshold */
+#define ICCR2_TRIG_8    (0 << 0)	/* 	>= 8 bytes */
+#define ICCR2_TRIG_16   (1 << 0)	/*	>= 16 bytes */
+#define ICCR2_TRIG_32   (2 << 0)	/*	>= 32 bytes */
+#endif
+
+#ifdef CONFIG_CPU_BULVERDE
+#define ICSR0_EOC	(1 << 6)	/* DMA End of Descriptor Chain */
+#endif
+#define ICSR0_FRE	(1 << 5)	/* Framing error */
+#define ICSR0_RFS	(1 << 4)	/* Receive FIFO service request */
+#define ICSR0_TFS	(1 << 3)	/* Transnit FIFO service request */
+#define ICSR0_RAB	(1 << 2)	/* Receiver abort */
+#define ICSR0_TUR	(1 << 1)	/* Trunsmit FIFO underun */
+#define ICSR0_EIF	(1 << 0)	/* End/Error in FIFO */
+
+#define ICSR1_ROR	(1 << 6)	/* Receiver FIFO underrun  */
+#define ICSR1_CRE	(1 << 5)	/* CRC error */
+#define ICSR1_EOF	(1 << 4)	/* End of frame */
+#define ICSR1_TNF	(1 << 3)	/* Transmit FIFO not full */
+#define ICSR1_RNE	(1 << 2)	/* Receive FIFO not empty */
+#define ICSR1_TBY	(1 << 1)	/* Tramsmiter busy flag */
+#define ICSR1_RSY	(1 << 0)	/* Recevier synchronized flag */
 
 
 /*
@@ -724,7 +998,10 @@
 #define RTAR		__REG(0x40900004)  /* RTC Alarm Register */
 #define RTSR		__REG(0x40900008)  /* RTC Status Register */
 #define RTTR		__REG(0x4090000C)  /* RTC Timer Trim Register */
+#define PIAR		__REG(0x40900038)  /* Periodic Interrupt Alarm Register */
 
+#define RTSR_PICE	(1 << 15)	/* Periodic interrupt count enable */
+#define RTSR_PIALE	(1 << 14)	/* Periodic interrupt Alarm enable */
 #define RTSR_HZE	(1 << 3)	/* HZ interrupt enable */
 #define RTSR_ALE	(1 << 2)	/* RTC alarm interrupt enable */
 #define RTSR_HZ		(1 << 1)	/* HZ rising-edge detected */
@@ -739,7 +1016,10 @@
 #define OSMR1		__REG(0x40A00004)  /* */
 #define OSMR2		__REG(0x40A00008)  /* */
 #define OSMR3		__REG(0x40A0000C)  /* */
+#define OSMR4		__REG(0x40A00080)  /* */
 #define OSCR		__REG(0x40A00010)  /* OS Timer Counter Register */
+#define OSCR4		__REG(0x40A00040)  /* OS Timer Counter Register */
+#define OMCR4		__REG(0x40A000C0)  /* */
 #define OSSR		__REG(0x40A00014)  /* OS Timer Status Register */
 #define OWER		__REG(0x40A00018)  /* OS Timer Watchdog Enable Register */
 #define OIER		__REG(0x40A0001C)  /* OS Timer Interrupt Enable Register */
@@ -819,11 +1099,52 @@
 #define GAFR1_L		__REG(0x40E0005C)  /* GPIO Alternate Function Select Register GPIO<47:32> */
 #define GAFR1_U		__REG(0x40E00060)  /* GPIO Alternate Function Select Register GPIO<63:48> */
 #define GAFR2_L		__REG(0x40E00064)  /* GPIO Alternate Function Select Register GPIO<79:64> */
-#define GAFR2_U		__REG(0x40E00068)  /* GPIO Alternate Function Select Register GPIO 80 */
+#define GAFR2_U		__REG(0x40E00068)  /* GPIO Alternate Function Select Register GPIO<95-80> */
+#define GAFR3_L		__REG(0x40E0006C)  /* GPIO Alternate Function Select Register GPIO<111:96> */
+#define GAFR3_U		__REG(0x40E00070)  /* GPIO Alternate Function Select Register GPIO<127:112> */
+
+#define GPLR3		__REG(0x40E00100)  /* GPIO Pin-Level Register GPIO<127:96> */
+#define GPDR3		__REG(0x40E0010C)  /* GPIO Pin Direction Register GPIO<127:96> */
+#define GPSR3		__REG(0x40E00118)  /* GPIO Pin Output Set Register GPIO<127:96> */
+#define GPCR3		__REG(0x40E00124)  /* GPIO Pin Output Clear Register GPIO<127:96> */
+#define GRER3		__REG(0x40E00130)  /* GPIO Rising-Edge Detect Register GPIO<127:96> */
+#define GFER3		__REG(0x40E0013C)  /* GPIO Falling-Edge Detect Register GPIO<127:96> */
+#define GEDR3		__REG(0x40E00148)  /* GPIO Edge Detect Status Register GPIO<127:96> */
 
 /* More handy macros.  The argument is a literal GPIO number. */
 
 #define GPIO_bit(x)	(1 << ((x) & 0x1f))
+
+#ifdef CONFIG_PXA27x
+
+/* Interrupt Controller */
+
+#define ICIP2		__REG(0x40D0009C)  /* Interrupt Controller IRQ Pending Register 2 */
+#define ICMR2		__REG(0x40D000A0)  /* Interrupt Controller Mask Register 2 */
+#define ICLR2		__REG(0x40D000A4)  /* Interrupt Controller Level Register 2 */
+#define ICFP2		__REG(0x40D000A8)  /* Interrupt Controller FIQ Pending Register 2 */
+#define ICPR2		__REG(0x40D000AC)  /* Interrupt Controller Pending Register 2 */
+
+#define _GPLR(x)	__REG2(0x40E00000, ((x) & 0x60) >> 3)
+#define _GPDR(x)	__REG2(0x40E0000C, ((x) & 0x60) >> 3)
+#define _GPSR(x)	__REG2(0x40E00018, ((x) & 0x60) >> 3)
+#define _GPCR(x)	__REG2(0x40E00024, ((x) & 0x60) >> 3)
+#define _GRER(x)	__REG2(0x40E00030, ((x) & 0x60) >> 3)
+#define _GFER(x)	__REG2(0x40E0003C, ((x) & 0x60) >> 3)
+#define _GEDR(x)	__REG2(0x40E00048, ((x) & 0x60) >> 3)
+#define _GAFR(x)	__REG2(0x40E00054, ((x) & 0x70) >> 2)
+
+#define GPLR(x) 	((((x) & 0x7f) < 96) ? _GPLR(x) : GPLR3)
+#define GPDR(x)		((((x) & 0x7f) < 96) ? _GPDR(x) : GPDR3)
+#define GPSR(x)		((((x) & 0x7f) < 96) ? _GPSR(x) : GPSR3)
+#define GPCR(x)		((((x) & 0x7f) < 96) ? _GPCR(x) : GPCR3)
+#define GRER(x)		((((x) & 0x7f) < 96) ? _GRER(x) : GRER3)
+#define GFER(x)		((((x) & 0x7f) < 96) ? _GFER(x) : GFER3)
+#define GEDR(x)		((((x) & 0x7f) < 96) ? _GEDR(x) : GEDR3)
+#define GAFR(x)		((((x) & 0x7f) < 96) ? _GAFR(x) : \
+			 ((((x) & 0x7f) < 112) ? GAFR3_L : GAFR3_U))
+#else
+
 #define GPLR(x)		__REG2(0x40E00000, ((x) & 0x60) >> 3)
 #define GPDR(x)		__REG2(0x40E0000C, ((x) & 0x60) >> 3)
 #define GPSR(x)		__REG2(0x40E00018, ((x) & 0x60) >> 3)
@@ -833,6 +1154,9 @@
 #define GEDR(x)		__REG2(0x40E00048, ((x) & 0x60) >> 3)
 #define GAFR(x)		__REG2(0x40E00054, ((x) & 0x70) >> 2)
 
+#endif
+
+
 /* GPIO alternate function assignments */
 
 #define GPIO1_RST		1	/* reset */
@@ -1047,14 +1371,73 @@
 #define PGSR0		__REG(0x40F00020)  /* Power Manager GPIO Sleep State Register for GP[31-0] */
 #define PGSR1		__REG(0x40F00024)  /* Power Manager GPIO Sleep State Register for GP[63-32] */
 #define PGSR2		__REG(0x40F00028)  /* Power Manager GPIO Sleep State Register for GP[84-64] */
+#define PGSR3		__REG(0x40F0002C)  /* Power Manager GPIO Sleep State Register for GP[118-96] */
 #define RCSR		__REG(0x40F00030)  /* Reset Controller Status Register */
 
+#define PSLR		__REG(0x40F00034)	/* Power Manager Sleep Config Register */
+#define PSTR		__REG(0x40F00038)	/*Power Manager Standby Config Register */
+#define PSNR		__REG(0x40F0003C)	/*Power Manager Sense Config Register */
+#define PVCR		__REG(0x40F00040)	/*Power Manager VoltageControl Register */
+#define PKWR		__REG(0x40F00050)	/* Power Manager KB Wake-up Enable Reg */
+#define PKSR		__REG(0x40F00054)	/* Power Manager KB Level-Detect Register */
+#define PCMD(x)	__REG2(0x40F00080, (x)<<2)
+#define PCMD0	__REG(0x40F00080 + 0 * 4)
+#define PCMD1	__REG(0x40F00080 + 1 * 4)
+#define PCMD2	__REG(0x40F00080 + 2 * 4)
+#define PCMD3	__REG(0x40F00080 + 3 * 4)
+#define PCMD4	__REG(0x40F00080 + 4 * 4)
+#define PCMD5	__REG(0x40F00080 + 5 * 4)
+#define PCMD6	__REG(0x40F00080 + 6 * 4)
+#define PCMD7	__REG(0x40F00080 + 7 * 4)
+#define PCMD8	__REG(0x40F00080 + 8 * 4)
+#define PCMD9	__REG(0x40F00080 + 9 * 4)
+#define PCMD10	__REG(0x40F00080 + 10 * 4)
+#define PCMD11	__REG(0x40F00080 + 11 * 4)
+#define PCMD12	__REG(0x40F00080 + 12 * 4)
+#define PCMD13	__REG(0x40F00080 + 13 * 4)
+#define PCMD14	__REG(0x40F00080 + 14 * 4)
+#define PCMD15	__REG(0x40F00080 + 15 * 4)
+#define PCMD16	__REG(0x40F00080 + 16 * 4)
+#define PCMD17	__REG(0x40F00080 + 17 * 4)
+#define PCMD18	__REG(0x40F00080 + 18 * 4)
+#define PCMD19	__REG(0x40F00080 + 19 * 4)
+#define PCMD20	__REG(0x40F00080 + 20 * 4)
+#define PCMD21	__REG(0x40F00080 + 21 * 4)
+#define PCMD22	__REG(0x40F00080 + 22 * 4)
+#define PCMD23	__REG(0x40F00080 + 23 * 4)
+#define PCMD24	__REG(0x40F00080 + 24 * 4)
+#define PCMD25	__REG(0x40F00080 + 25 * 4)
+#define PCMD26	__REG(0x40F00080 + 26 * 4)
+#define PCMD27	__REG(0x40F00080 + 27 * 4)
+#define PCMD28	__REG(0x40F00080 + 28 * 4)
+#define PCMD29	__REG(0x40F00080 + 29 * 4)
+#define PCMD30	__REG(0x40F00080 + 30 * 4)
+#define PCMD31	__REG(0x40F00080 + 31 * 4)
+
+#define PCMD_MBC	(1<<12)
+#define PCMD_DCE	(1<<11)
+#define PCMD_LC	(1<<10)
+/* FIXME:  PCMD_SQC need be checked.   */
+#define PCMD_SQC	(3<<8)	/* currently only bit 8 is changeable,
+				   bit 9 should be 0 all day. */
+#define PVCR_VCSA	(0x1<<14)
+#define PVCR_CommandDelay (0xf80)
+#define PCFR_PI2C_EN	(0x1 << 6)
+
+#define PSSR_OTGPH	(1 << 7)	/* OTG Peripheral control Hold */
 #define PSSR_RDH	(1 << 5)	/* Read Disable Hold */
 #define PSSR_PH		(1 << 4)	/* Peripheral Control Hold */
 #define PSSR_VFS	(1 << 2)	/* VDD Fault Status */
 #define PSSR_BFS	(1 << 1)	/* Battery Fault Status */
 #define PSSR_SSS	(1 << 0)	/* Software Sleep Status */
 
+#define PCFR_RO		(1 << 15)	/* RDH Override */
+#define PCFR_PO		(1 << 14)	/* PH Override */
+#define PCFR_GPROD	(1 << 12)	/* GPIO nRESET_OUT Disable */
+#define PCFR_L1_EN	(1 << 11)	/* Sleep Mode L1 converter Enable */
+#define PCFR_FVC	(1 << 10)	/* Frequency/Voltage Change */
+#define PCFR_DC_EN	(1 << 7)	/* Sleep/deep-sleep DC-DC Converter Enable */
+#define PCFR_PI2CEN	(1 << 6)	/* Enable PI2C controller */
 #define PCFR_DS		(1 << 3)	/* Deep Sleep Mode */
 #define PCFR_FS		(1 << 2)	/* Float Static Chip Selects */
 #define PCFR_FP		(1 << 1)	/* Float PCMCIA controls */
@@ -1137,21 +1520,35 @@
 #define CCCR		__REG(0x41300000)  /* Core Clock Configuration Register */
 #define CKEN		__REG(0x41300004)  /* Clock Enable Register */
 #define OSCC		__REG(0x41300008)  /* Oscillator Configuration Register */
+#define CCSR		__REG(0x4130000C)  /* Core Clock Status Register */
 
 #define CCCR_N_MASK	0x0380		/* Run Mode Frequency to Turbo Mode Frequency Multiplier */
 #define CCCR_M_MASK	0x0060		/* Memory Frequency to Run Mode Frequency Multiplier */
 #define CCCR_L_MASK	0x001f		/* Crystal Frequency to Memory Frequency Multiplier */
 
+#define CKEN24_CAMERA	(1 << 24)	/* Camera Interface Clock Enable */
+#define CKEN23_SSP1	(1 << 23)	/* SSP1 Unit Clock Enable */
+#define CKEN22_MEMC	(1 << 22)	/* Memory Controller Clock Enable */
+#define CKEN21_MEMSTK	(1 << 21)	/* Memory Stick Host Controller */
+#define CKEN20_IM	(1 << 20)	/* Internal Memory Clock Enable */
+#define CKEN19_KEYPAD	(1 << 19)	/* Keypad Interface Clock Enable */
+#define CKEN18_USIM	(1 << 18)	/* USIM Unit Clock Enable */
+#define CKEN17_MSL	(1 << 17)	/* MSL Unit Clock Enable */
 #define CKEN16_LCD	(1 << 16)	/* LCD Unit Clock Enable */
+#define CKEN15_PWRI2C	(1 << 15)	/* PWR I2C Unit Clock Enable */
 #define CKEN14_I2C	(1 << 14)	/* I2C Unit Clock Enable */
 #define CKEN13_FICP	(1 << 13)	/* FICP Unit Clock Enable */
 #define CKEN12_MMC	(1 << 12)	/* MMC Unit Clock Enable */
 #define CKEN11_USB	(1 << 11)	/* USB Unit Clock Enable */
+#define CKEN10_USBHOST	(1 << 10)	/* USB Host Unit Clock Enable */
+#define CKEN9_OSTIMER	(1 << 9)	/* OS Timer Unit Clock Enable */
 #define CKEN8_I2S	(1 << 8)	/* I2S Unit Clock Enable */
 #define CKEN7_BTUART	(1 << 7)	/* BTUART Unit Clock Enable */
 #define CKEN6_FFUART	(1 << 6)	/* FFUART Unit Clock Enable */
 #define CKEN5_STUART	(1 << 5)	/* STUART Unit Clock Enable */
+#define CKEN4_SSP3	(1 << 4)	/* SSP3 Unit Clock Enable */
 #define CKEN3_SSP	(1 << 3)	/* SSP Unit Clock Enable */
+#define CKEN3_SSP2	(1 << 3)	/* SSP2 Unit Clock Enable */
 #define CKEN2_AC97	(1 << 2)	/* AC97 Unit Clock Enable */
 #define CKEN1_PWM1	(1 << 1)	/* PWM1 Clock Enable */
 #define CKEN0_PWM0	(1 << 0)	/* PWM0 Clock Enable */
@@ -1175,6 +1572,12 @@
 #define TMEDRGBR	__REG(0x44000040)  /* TMED RGB Seed Register */
 #define TMEDCR		__REG(0x44000044)  /* TMED Control Register */
 
+#define LCCR3_1BPP (0 << 24)
+#define LCCR3_2BPP (1 << 24)
+#define LCCR3_4BPP (2 << 24)
+#define LCCR3_8BPP (3 << 24)
+#define LCCR3_16BPP (4 << 24)
+
 #define FDADR0		__REG(0x44000200)  /* DMA Channel 0 Frame Descriptor Address Register */
 #define FSADR0		__REG(0x44000204)  /* DMA Channel 0 Frame Source Address Register */
 #define FIDR0		__REG(0x44000208)  /* DMA Channel 0 Frame ID Register */
@@ -1185,15 +1588,27 @@
 #define LDCMD1		__REG(0x4400021C)  /* DMA Channel 1 Command Register */
 
 #define LCCR0_ENB	(1 << 0)	/* LCD Controller enable */
-#define LCCR0_CMS	(1 << 1)	/* Color = 0, Monochrome = 1 */
-#define LCCR0_SDS	(1 << 2)	/* Single Panel = 0, Dual Panel = 1 */
+#define LCCR0_CMS	(1 << 1)	/* Color/Monochrome Display Select */
+#define LCCR0_Color     (LCCR0_CMS*0)   /*  Color display                  */
+#define LCCR0_Mono      (LCCR0_CMS*1)   /*  Monochrome display             */
+#define LCCR0_SDS	(1 << 2)	/* Single/Dual Panel Display       */
+                                        /* Select                          */
+#define LCCR0_Sngl      (LCCR0_SDS*0)   /*  Single panel display           */
+#define LCCR0_Dual      (LCCR0_SDS*1)   /*  Dual panel display             */
+
 #define LCCR0_LDM	(1 << 3)	/* LCD Disable Done Mask */
 #define LCCR0_SFM	(1 << 4)	/* Start of frame mask */
 #define LCCR0_IUM	(1 << 5)	/* Input FIFO underrun mask */
 #define LCCR0_EFM	(1 << 6)	/* End of Frame mask */
-#define LCCR0_PAS	(1 << 7)	/* Passive = 0, Active = 1 */
-#define LCCR0_BLE	(1 << 8)	/* Little Endian = 0, Big Endian = 1 */
-#define LCCR0_DPD	(1 << 9)	/* Double Pixel mode, 4 pixel value = 0, 8 pixle values = 1 */
+#define LCCR0_PAS	(1 << 7)	/* Passive/Active display Select   */
+#define LCCR0_Pas       (LCCR0_PAS*0)   /*  Passive display (STN)          */
+#define LCCR0_Act       (LCCR0_PAS*1)   /*  Active display (TFT)           */
+#define LCCR0_DPD	(1 << 9)	/* Double Pixel Data (monochrome   */
+                                        /* display mode)                   */
+#define LCCR0_4PixMono  (LCCR0_DPD*0)   /*  4-Pixel/clock Monochrome       */
+                                        /*  display                        */
+#define LCCR0_8PixMono  (LCCR0_DPD*1)   /*  8-Pixel/clock Monochrome       */
+                                        /*  display                        */
 #define LCCR0_DIS	(1 << 10)	/* LCD Disable */
 #define LCCR0_QDM	(1 << 11)	/* LCD Quick Disable mask */
 #define LCCR0_PDD	(0xff << 12)	/* Palette DMA request delay */
@@ -1255,8 +1670,15 @@
 #define LCCR3_API_S	16
 #define LCCR3_VSP	(1 << 20)	/* vertical sync polarity */
 #define LCCR3_HSP	(1 << 21)	/* horizontal sync polarity */
-#define LCCR3_PCP	(1 << 22)	/* pixel clock polarity */
-#define LCCR3_OEP	(1 << 23)	/* output enable polarity */
+#define LCCR3_PCP	(1 << 22)	/* Pixel Clock Polarity (L_PCLK)   */
+#define LCCR3_PixRsEdg  (LCCR3_PCP*0)   /*  Pixel clock Rising-Edge        */
+#define LCCR3_PixFlEdg  (LCCR3_PCP*1)   /*  Pixel clock Falling-Edge       */
+
+#define LCCR3_OEP       (1 << 23)       /* Output Enable Polarity (L_BIAS, */
+                                        /* active display mode)            */
+#define LCCR3_OutEnH    (LCCR3_OEP*0)   /*  Output Enable active High      */
+#define LCCR3_OutEnL    (LCCR3_OEP*1)   /*  Output Enable active Low       */
+
 #if 0
 #define LCCR3_BPP	(7 << 24)	/* bits per pixel */
 #define LCCR3_BPP_S	24
@@ -1336,6 +1758,19 @@
 #define MDMRS		__REG(0x48000040)  /* MRS value to be written to SDRAM */
 #define BOOT_DEF	__REG(0x48000044)  /* Read-Only Boot-Time Register. Contains BOOT_SEL and PKG_SEL */
 
+/*
+ * More handy macros for PCMCIA
+ *
+ * Arg is socket number
+ */
+#define MCMEM(s)	__REG2(0x48000028, (s)<<2 )  /* Card interface Common Memory Space Socket s Timing */
+#define MCATT(s)	__REG2(0x48000030, (s)<<2 )  /* Card interface Attribute Space Socket s Timing Configuration */
+#define MCIO(s)		__REG2(0x48000038, (s)<<2 )  /* Card interface I/O Space Socket s Timing Configuration */
+
+/* MECR register defines */
+#define MECR_NOS	(1 << 0)	/* Number Of Sockets: 0 -> 1 sock, 1 -> 2 sock */
+#define MECR_CIT	(1 << 1)	/* Card Is There: 0 -> no card, 1 -> card inserted */
+
 #define MDREFR_K2FREE	(1 << 25)	/* SDRAM Free-Running Control */
 #define MDREFR_K1FREE	(1 << 24)	/* SDRAM Free-Running Control */
 #define MDREFR_K0FREE	(1 << 23)	/* SDRAM Free-Running Control */
@@ -1351,4 +1786,274 @@
 #define MDREFR_E0PIN	(1 << 12)	/* SDCKE0 Level Control/Status */
 
 
+#ifdef CONFIG_PXA27x
+
+/*
+ * Keypad
+ */
+#define KPC             __REG(0x41500000) /* Keypad Interface Control register */
+#define KPDK            __REG(0x41500008) /* Keypad Interface Direct Key register */
+#define KPREC           __REG(0x41500010) /* Keypad Interface Rotary Encoder register */
+#define KPMK            __REG(0x41500018) /* Keypad Interface Matrix Key register */
+#define KPAS            __REG(0x41500020) /* Keypad Interface Automatic Scan register */
+#define KPASMKP0        __REG(0x41500028) /* Keypad Interface Automatic Scan Multiple Key Presser register 0 */
+#define KPASMKP1        __REG(0x41500030) /* Keypad Interface Automatic Scan Multiple Key Presser register 1 */
+#define KPASMKP2        __REG(0x41500038) /* Keypad Interface Automatic Scan Multiple Key Presser register 2 */
+#define KPASMKP3        __REG(0x41500040) /* Keypad Interface Automatic Scan Multiple Key Presser register 3 */
+#define KPKDI           __REG(0x41500048) /* Keypad Interface Key Debounce Interval register */
+
+#define KPC_AS          (0x1 << 30)  /* Automatic Scan bit */
+#define KPC_ASACT       (0x1 << 29)  /* Automatic Scan on Activity */
+#define KPC_MI          (0x1 << 22)  /* Matrix interrupt bit */
+#define KPC_IMKP        (0x1 << 21)  /* Ignore Multiple Key Press */
+#define KPC_MS7         (0x1 << 20)  /* Matrix scan line 7 */
+#define KPC_MS6         (0x1 << 19)  /* Matrix scan line 6 */
+#define KPC_MS5         (0x1 << 18)  /* Matrix scan line 5 */
+#define KPC_MS4         (0x1 << 17)  /* Matrix scan line 4 */
+#define KPC_MS3         (0x1 << 16)  /* Matrix scan line 3 */
+#define KPC_MS2         (0x1 << 15)  /* Matrix scan line 2 */
+#define KPC_MS1         (0x1 << 14)  /* Matrix scan line 1 */
+#define KPC_MS0         (0x1 << 13)  /* Matrix scan line 0 */
+#define KPC_MS_ALL      (KPC_MS0 | KPC_MS1 | KPC_MS2 | KPC_MS3 | KPC_MS4 | KPC_MS5 | KPC_MS6 | KPC_MS7)
+#define KPC_ME          (0x1 << 12)  /* Matrix Keypad Enable */
+#define KPC_MIE         (0x1 << 11)  /* Matrix Interrupt Enable */
+#define KPC_DK_DEB_SEL	(0x1 <<  9)  /* Direct Keypad Debounce Select */
+#define KPC_DI          (0x1 <<  5)  /* Direct key interrupt bit */
+#define KPC_RE_ZERO_DEB (0x1 <<  4)  /* Rotary Encoder Zero Debounce */
+#define KPC_REE1        (0x1 <<  3)  /* Rotary Encoder1 Enable */
+#define KPC_REE0        (0x1 <<  2)  /* Rotary Encoder0 Enable */
+#define KPC_DE          (0x1 <<  1)  /* Direct Keypad Enable */
+#define KPC_DIE         (0x1 <<  0)  /* Direct Keypad interrupt Enable */
+
+#define KPDK_DKP        (0x1 << 31)
+#define KPDK_DK7        (0x1 <<  7)
+#define KPDK_DK6        (0x1 <<  6)
+#define KPDK_DK5        (0x1 <<  5)
+#define KPDK_DK4        (0x1 <<  4)
+#define KPDK_DK3        (0x1 <<  3)
+#define KPDK_DK2        (0x1 <<  2)
+#define KPDK_DK1        (0x1 <<  1)
+#define KPDK_DK0        (0x1 <<  0)
+
+#define KPREC_OF1       (0x1 << 31)
+#define kPREC_UF1       (0x1 << 30)
+#define KPREC_OF0       (0x1 << 15)
+#define KPREC_UF0       (0x1 << 14)
+
+#define KPMK_MKP        (0x1 << 31)
+#define KPAS_SO         (0x1 << 31)
+#define KPASMKPx_SO     (0x1 << 31)
+
+/*
+ * UHC: USB Host Controller (OHCI-like) register definitions
+ */
+#define UHC_BASE_PHYS	(0x4C000000)
+#define UHCREV		__REG(0x4C000000) /* UHC HCI Spec Revision */
+#define UHCHCON		__REG(0x4C000004) /* UHC Host Control Register */
+#define UHCCOMS		__REG(0x4C000008) /* UHC Command Status Register */
+#define UHCINTS		__REG(0x4C00000C) /* UHC Interrupt Status Register */
+#define UHCINTE		__REG(0x4C000010) /* UHC Interrupt Enable */
+#define UHCINTD		__REG(0x4C000014) /* UHC Interrupt Disable */
+#define UHCHCCA		__REG(0x4C000018) /* UHC Host Controller Comm. Area */
+#define UHCPCED		__REG(0x4C00001C) /* UHC Period Current Endpt Descr */
+#define UHCCHED		__REG(0x4C000020) /* UHC Control Head Endpt Descr */
+#define UHCCCED		__REG(0x4C000024) /* UHC Control Current Endpt Descr */
+#define UHCBHED		__REG(0x4C000028) /* UHC Bulk Head Endpt Descr */
+#define UHCBCED		__REG(0x4C00002C) /* UHC Bulk Current Endpt Descr */
+#define UHCDHEAD	__REG(0x4C000030) /* UHC Done Head */
+#define UHCFMI		__REG(0x4C000034) /* UHC Frame Interval */
+#define UHCFMR		__REG(0x4C000038) /* UHC Frame Remaining */
+#define UHCFMN		__REG(0x4C00003C) /* UHC Frame Number */
+#define UHCPERS		__REG(0x4C000040) /* UHC Periodic Start */
+#define UHCLS		__REG(0x4C000044) /* UHC Low Speed Threshold */
+#define UHCRHDA		__REG(0x4C000048) /* UHC Root Hub Descriptor A */
+#define UHCRHDB		__REG(0x4C00004C) /* UHC Root Hub Descriptor B */
+#define UHCRHS		__REG(0x4C000050) /* UHC Root Hub Status */
+#define UHCRHPS1	__REG(0x4C000054) /* UHC Root Hub Port 1 Status */
+#define UHCRHPS2	__REG(0x4C000058) /* UHC Root Hub Port 2 Status */
+#define UHCRHPS3	__REG(0x4C00005C) /* UHC Root Hub Port 3 Status */
+
+#define UHCSTAT		__REG(0x4C000060) /* UHC Status Register */
+#define UHCSTAT_UPS3	(1 << 16)	/* USB Power Sense Port3 */
+#define UHCSTAT_SBMAI	(1 << 15)	/* System Bus Master Abort Interrupt*/
+#define UHCSTAT_SBTAI	(1 << 14)	/* System Bus Target Abort Interrupt*/
+#define UHCSTAT_UPRI	(1 << 13)	/* USB Port Resume Interrupt */
+#define UHCSTAT_UPS2	(1 << 12)	/* USB Power Sense Port 2 */
+#define UHCSTAT_UPS1	(1 << 11)	/* USB Power Sense Port 1 */
+#define UHCSTAT_HTA	(1 << 10)	/* HCI Target Abort */
+#define UHCSTAT_HBA	(1 << 8)	/* HCI Buffer Active */
+#define UHCSTAT_RWUE	(1 << 7)	/* HCI Remote Wake Up Event */
+
+#define UHCHR           __REG(0x4C000064) /* UHC Reset Register */
+#define UHCHR_SSEP3	(1 << 11)	/* Sleep Standby Enable for Port3 */
+#define UHCHR_SSEP2	(1 << 10)	/* Sleep Standby Enable for Port2 */
+#define UHCHR_SSEP1	(1 << 9)	/* Sleep Standby Enable for Port1 */
+#define UHCHR_PCPL	(1 << 7)	/* Power control polarity low */
+#define UHCHR_PSPL	(1 << 6)	/* Power sense polarity low */
+#define UHCHR_SSE	(1 << 5)	/* Sleep Standby Enable */
+#define UHCHR_UIT	(1 << 4)	/* USB Interrupt Test */
+#define UHCHR_SSDC	(1 << 3)	/* Simulation Scale Down Clock */
+#define UHCHR_CGR	(1 << 2)	/* Clock Generation Reset */
+#define UHCHR_FHR	(1 << 1)	/* Force Host Controller Reset */
+#define UHCHR_FSBIR	(1 << 0)	/* Force System Bus Iface Reset */
+
+#define UHCHIE          __REG(0x4C000068) /* UHC Interrupt Enable Register*/
+#define UHCHIE_UPS3IE	(1 << 14)	/* Power Sense Port3 IntEn */
+#define UHCHIE_UPRIE	(1 << 13)	/* Port Resume IntEn */
+#define UHCHIE_UPS2IE	(1 << 12)	/* Power Sense Port2 IntEn */
+#define UHCHIE_UPS1IE	(1 << 11)	/* Power Sense Port1 IntEn */
+#define UHCHIE_TAIE	(1 << 10)	/* HCI Interface Transfer Abort
+					   Interrupt Enable*/
+#define UHCHIE_HBAIE	(1 << 8)	/* HCI Buffer Active IntEn */
+#define UHCHIE_RWIE	(1 << 7)	/* Remote Wake-up IntEn */
+
+#define UHCHIT          __REG(0x4C00006C) /* UHC Interrupt Test register */
+
+/* Camera Interface */
+#define CICR0		__REG(0x50000000)
+#define CICR1		__REG(0x50000004)
+#define CICR2		__REG(0x50000008)
+#define CICR3		__REG(0x5000000C)
+#define CICR4		__REG(0x50000010)
+#define CISR		__REG(0x50000014)
+#define CIFR		__REG(0x50000018)
+#define CITOR		__REG(0x5000001C)
+#define CIBR0		__REG(0x50000028)
+#define CIBR1		__REG(0x50000030)
+#define CIBR2		__REG(0x50000038)
+
+#define CICR0_DMAEN	(1 << 31)	/* DMA request enable */
+#define CICR0_PAR_EN	(1 << 30)	/* Parity enable */
+#define CICR0_SL_CAP_EN	(1 << 29)	/* Capture enable for slave mode */
+#define CICR0_ENB	(1 << 28)	/* Camera interface enable */
+#define CICR0_DIS	(1 << 27)	/* Camera interface disable */
+#define CICR0_SIM	(0x7 << 24)	/* Sensor interface mode mask */
+#define CICR0_TOM	(1 << 9)	/* Time-out mask */
+#define CICR0_RDAVM	(1 << 8)	/* Receive-data-available mask */
+#define CICR0_FEM	(1 << 7)	/* FIFO-empty mask */
+#define CICR0_EOLM	(1 << 6)	/* End-of-line mask */
+#define CICR0_PERRM	(1 << 5)	/* Parity-error mask */
+#define CICR0_QDM	(1 << 4)	/* Quick-disable mask */
+#define CICR0_CDM	(1 << 3)	/* Disable-done mask */
+#define CICR0_SOFM	(1 << 2)	/* Start-of-frame mask */
+#define CICR0_EOFM	(1 << 1)	/* End-of-frame mask */
+#define CICR0_FOM	(1 << 0)	/* FIFO-overrun mask */
+
+#define CICR1_TBIT	(1 << 31)	/* Transparency bit */
+#define CICR1_RGBT_CONV	(0x3 << 30)	/* RGBT conversion mask */
+#define CICR1_PPL	(0x3f << 15)	/* Pixels per line mask */
+#define CICR1_RGB_CONV	(0x7 << 12)	/* RGB conversion mask */
+#define CICR1_RGB_F	(1 << 11)	/* RGB format */
+#define CICR1_YCBCR_F	(1 << 10)	/* YCbCr format */
+#define CICR1_RGB_BPP	(0x7 << 7)	/* RGB bis per pixel mask */
+#define CICR1_RAW_BPP	(0x3 << 5)	/* Raw bis per pixel mask */
+#define CICR1_COLOR_SP	(0x3 << 3)	/* Color space mask */
+#define CICR1_DW	(0x7 << 0)	/* Data width mask */
+
+#define CICR2_BLW	(0xff << 24)	/* Beginning-of-line pixel clock
+					   wait count mask */
+#define CICR2_ELW	(0xff << 16)	/* End-of-line pixel clock
+					   wait count mask */
+#define CICR2_HSW	(0x3f << 10)	/* Horizontal sync pulse width mask */
+#define CICR2_BFPW	(0x3f << 3)	/* Beginning-of-frame pixel clock
+					   wait count mask */
+#define CICR2_FSW	(0x7 << 0)	/* Frame stabilization
+					   wait count mask */
+
+#define CICR3_BFW	(0xff << 24)	/* Beginning-of-frame line clock
+					   wait count mask */
+#define CICR3_EFW	(0xff << 16)	/* End-of-frame line clock
+					   wait count mask */
+#define CICR3_VSW	(0x3f << 10)	/* Vertical sync pulse width mask */
+#define CICR3_BFPW	(0x3f << 3)	/* Beginning-of-frame pixel clock
+					   wait count mask */
+#define CICR3_LPF	(0x3ff << 0)	/* Lines per frame mask */
+
+#define CICR4_MCLK_DLY	(0x3 << 24)	/* MCLK Data Capture Delay mask */
+#define CICR4_PCLK_EN	(1 << 23)	/* Pixel clock enable */
+#define CICR4_PCP	(1 << 22)	/* Pixel clock polarity */
+#define CICR4_HSP	(1 << 21)	/* Horizontal sync polarity */
+#define CICR4_VSP	(1 << 20)	/* Vertical sync polarity */
+#define CICR4_MCLK_EN	(1 << 19)	/* MCLK enable */
+#define CICR4_FR_RATE	(0x7 << 8)	/* Frame rate mask */
+#define CICR4_DIV	(0xff << 0)	/* Clock divisor mask */
+
+#define CISR_FTO	(1 << 15)	/* FIFO time-out */
+#define CISR_RDAV_2	(1 << 14)	/* Channel 2 receive data available */
+#define CISR_RDAV_1	(1 << 13)	/* Channel 1 receive data available */
+#define CISR_RDAV_0	(1 << 12)	/* Channel 0 receive data available */
+#define CISR_FEMPTY_2	(1 << 11)	/* Channel 2 FIFO empty */
+#define CISR_FEMPTY_1	(1 << 10)	/* Channel 1 FIFO empty */
+#define CISR_FEMPTY_0	(1 << 9)	/* Channel 0 FIFO empty */
+#define CISR_EOL	(1 << 8)	/* End of line */
+#define CISR_PAR_ERR	(1 << 7)	/* Parity error */
+#define CISR_CQD	(1 << 6)	/* Camera interface quick disable */
+#define CISR_SOF	(1 << 5)	/* Start of frame */
+#define CISR_CDD	(1 << 4)	/* Camera interface disable done */
+#define CISR_EOF	(1 << 3)	/* End of frame */
+#define CISR_IFO_2	(1 << 2)	/* FIFO overrun for Channel 2 */
+#define CISR_IFO_1	(1 << 1)	/* FIFO overrun for Channel 1 */
+#define CISR_IFO_0	(1 << 0)	/* FIFO overrun for Channel 0 */
+
+#define CIFR_FLVL2	(0x7f << 23)	/* FIFO 2 level mask */
+#define CIFR_FLVL1	(0x7f << 16)	/* FIFO 1 level mask */
+#define CIFR_FLVL0	(0xff << 8)	/* FIFO 0 level mask */
+#define CIFR_THL_0	(0x3 << 4)	/* Threshold Level for Channel 0 FIFO */
+#define CIFR_RESET_F	(1 << 3)	/* Reset input FIFOs */
+#define CIFR_FEN2	(1 << 2)	/* FIFO enable for channel 2 */
+#define CIFR_FEN1	(1 << 1)	/* FIFO enable for channel 1 */
+#define CIFR_FEN0	(1 << 0)	/* FIFO enable for channel 0 */
+
+#define SRAM_SIZE		0x40000 /* 4x64K  */
+
+#define SRAM_MEM_PHYS		0x5C000000
+
+#define IMPMCR		__REG(0x58000000) /* IM Power Management Control Reg */
+#define IMPMSR		__REG(0x58000008) /* IM Power Management Status Reg */
+
+#define IMPMCR_PC3		(0x3 << 22) /* Bank 3 Power Control */
+#define IMPMCR_PC3_RUN_MODE	(0x0 << 22) /*   Run mode */
+#define IMPMCR_PC3_STANDBY_MODE	(0x1 << 22) /*   Standby mode */
+#define IMPMCR_PC3_AUTO_MODE	(0x3 << 22) /*   Automatically controlled */
+
+#define IMPMCR_PC2		(0x3 << 20) /* Bank 2 Power Control */
+#define IMPMCR_PC2_RUN_MODE	(0x0 << 20) /*   Run mode */
+#define IMPMCR_PC2_STANDBY_MODE	(0x1 << 20) /*   Standby mode */
+#define IMPMCR_PC2_AUTO_MODE	(0x3 << 20) /*   Automatically controlled */
+
+#define IMPMCR_PC1		(0x3 << 18) /* Bank 1 Power Control */
+#define IMPMCR_PC1_RUN_MODE	(0x0 << 18) /*   Run mode */
+#define IMPMCR_PC1_STANDBY_MODE	(0x1 << 18) /*   Standby mode */
+#define IMPMCR_PC1_AUTO_MODE	(0x3 << 18) /*   Automatically controlled */
+
+#define IMPMCR_PC0		(0x3 << 16) /* Bank 0 Power Control */
+#define IMPMCR_PC0_RUN_MODE	(0x0 << 16) /*   Run mode */
+#define IMPMCR_PC0_STANDBY_MODE	(0x1 << 16) /*   Standby mode */
+#define IMPMCR_PC0_AUTO_MODE	(0x3 << 16) /*   Automatically controlled */
+
+#define IMPMCR_AW3		(1 << 11) /* Bank 3 Automatic Wake-up enable */
+#define IMPMCR_AW2		(1 << 10) /* Bank 2 Automatic Wake-up enable */
+#define IMPMCR_AW1		(1 << 9)  /* Bank 1 Automatic Wake-up enable */
+#define IMPMCR_AW0		(1 << 8)  /* Bank 0 Automatic Wake-up enable */
+
+#define IMPMCR_DST		(0xFF << 0) /* Delay Standby Time, ms */
+
+#define IMPMSR_PS3		(0x3 << 6) /* Bank 3 Power Status: */
+#define IMPMSR_PS3_RUN_MODE	(0x0 << 6) /*    Run mode */
+#define IMPMSR_PS3_STANDBY_MODE	(0x1 << 6) /*    Standby mode */
+
+#define IMPMSR_PS2		(0x3 << 4) /* Bank 2 Power Status: */
+#define IMPMSR_PS2_RUN_MODE	(0x0 << 4) /*    Run mode */
+#define IMPMSR_PS2_STANDBY_MODE	(0x1 << 4) /*    Standby mode */
+
+#define IMPMSR_PS1		(0x3 << 2) /* Bank 1 Power Status: */
+#define IMPMSR_PS1_RUN_MODE	(0x0 << 2) /*    Run mode */
+#define IMPMSR_PS1_STANDBY_MODE	(0x1 << 2) /*    Standby mode */
+
+#define IMPMSR_PS0		(0x3 << 0) /* Bank 0 Power Status: */
+#define IMPMSR_PS0_RUN_MODE	(0x0 << 0) /*    Run mode */
+#define IMPMSR_PS0_STANDBY_MODE	(0x1 << 0) /*    Standby mode */
+
+#endif
 
+#endif
diff -Nru a/include/asm-arm/arch-pxa/pxafb.h b/include/asm-arm/arch-pxa/pxafb.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/include/asm-arm/arch-pxa/pxafb.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,68 @@
+/*
+ *  linux/include/asm-arm/arch-pxa/pxafb.h
+ *
+ *  Support for the xscale frame buffer.
+ *
+ *  Author:     Jean-Frederic Clere
+ *  Created:    Sep 22, 2003
+ *  Copyright:  jfclere@sinix.net
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License version 2 as
+ *  published by the Free Software Foundation.
+ */
+
+/*
+ * This structure describes the machine which we are running on.
+ * It is set in linux/arch/arm/mach-pxa/machine_name.c and used in the probe routine
+ * of linux/drivers/video/pxafb.c
+ */
+struct pxafb_mach_info {
+	u_long		pixclock;
+
+	u_short		xres;
+	u_short		yres;
+
+	u_char		bpp;
+	u_char		hsync_len;
+	u_char		left_margin;
+	u_char		right_margin;
+
+	u_char		vsync_len;
+	u_char		upper_margin;
+	u_char		lower_margin;
+	u_char		sync;
+
+	u_int		cmap_greyscale:1,
+			cmap_inverse:1,
+			cmap_static:1,
+			unused:29;
+
+	/* The following should be defined in LCCR0
+	 *      LCCR0_Act or LCCR0_Pas          Active or Passive
+	 *      LCCR0_Sngl or LCCR0_Dual        Single/Dual panel
+	 *      LCCR0_Mono or LCCR0_Color       Mono/Color
+	 *      LCCR0_4PixMono or LCCR0_8PixMono (in mono single mode)
+	 *      LCCR0_DMADel(Tcpu) (optional)   DMA request delay
+	 *
+	 * The following should not be defined in LCCR0:
+	 *      LCCR0_OUM, LCCR0_BM, LCCR0_QDM, LCCR0_DIS, LCCR0_EFM
+	 *      LCCR0_IUM, LCCR0_SFM, LCCR0_LDM, LCCR0_ENB
+	 */
+	u_int		lccr0;
+	/* The following should be defined in LCCR3
+	 *      LCCR3_OutEnH or LCCR3_OutEnL    Output enable polarity
+	 *      LCCR3_PixRsEdg or LCCR3_PixFlEdg Pixel clock edge type
+	 *      LCCR3_Acb(X)                    AB Bias pin frequency
+	 *      LCCR3_DPC (optional)            Double Pixel Clock mode (untested)
+	 *
+	 * The following should not be defined in LCCR3
+	 *      LCCR3_HSP, LCCR3_VSP, LCCR0_Pcd(x), LCCR3_Bpp
+	 */
+	u_int		lccr3;
+
+	void (*pxafb_backlight_power)(int);
+	void (*pxafb_lcd_power)(int);
+
+};
+void set_pxa_fb_info(struct pxafb_mach_info *hard_pxa_fb_info);
diff -Nru a/include/asm-arm/arch-s3c2410/time.h b/include/asm-arm/arch-s3c2410/time.h
--- a/include/asm-arm/arch-s3c2410/time.h	Sun May 16 01:18:34 2004
+++ b/include/asm-arm/arch-s3c2410/time.h	Sun May 16 01:18:34 2004
@@ -122,7 +122,7 @@
 	 *   of 11.25MHz, and a tcnt of 56250.
 	 */
 
-	if (machine_is_h1940()) {
+	if (machine_is_h1940() || machine_is_smdk2410() ) {
 		timer_ticks_usec = s3c2410_pclk / (1000*1000);
 		timer_ticks_usec /= 6;
 
diff -Nru a/include/asm-arm/spinlock.h b/include/asm-arm/spinlock.h
--- a/include/asm-arm/spinlock.h	Sun May 16 01:18:33 2004
+++ b/include/asm-arm/spinlock.h	Sun May 16 01:18:33 2004
@@ -24,6 +24,7 @@
 #define spin_lock_init(x)	do { *(x) = SPIN_LOCK_UNLOCKED; } while (0)
 #define spin_is_locked(x)	((x)->lock != 0)
 #define spin_unlock_wait(x)	do { barrier(); } while (spin_is_locked(x))
+#define _raw_spin_lock_flags(lock, flags) _raw_spin_lock(lock)
 
 static inline void _raw_spin_lock(spinlock_t *lock)
 {
@@ -88,7 +89,7 @@
 "	strexeq	%0, %2, [%1]\n"
 "	teq	%0, #0\n"
 "	bne	1b"
-	: "=r" (tmp)
+	: "=&r" (tmp)
 	: "r" (&rw->lock), "r" (0x80000000)
 	: "cc", "memory");
 }
@@ -150,7 +151,7 @@
 "1:	ldrex	%0, [%1]\n"
 "	teq	%0, #0\n"
 "	strexeq	%0, %2, [%1]"
-	: "=r" (tmp)
+	: "=&r" (tmp)
 	: "r" (&rw->lock), "r" (0x80000000)
 	: "cc", "memory");
 
diff -Nru a/include/asm-arm/thread_info.h b/include/asm-arm/thread_info.h
--- a/include/asm-arm/thread_info.h	Sun May 16 01:18:35 2004
+++ b/include/asm-arm/thread_info.h	Sun May 16 01:18:35 2004
@@ -40,7 +40,7 @@
 
 /*
  * low level task data that entry.S needs immediate access to.
- * We assume cpu_context follows immedately after cpu_domain.
+ * __switch_to() assumes cpu_context follows immediately after cpu_domain.
  */
 struct thread_info {
 	unsigned long		flags;		/* low level flags */
diff -Nru a/include/asm-cris/atomic.h b/include/asm-cris/atomic.h
--- a/include/asm-cris/atomic.h	Sun May 16 01:18:35 2004
+++ b/include/asm-cris/atomic.h	Sun May 16 01:18:35 2004
@@ -56,6 +56,8 @@
 	return retval;
 }
 
+#define atomic_add_negative(a, v)	(atomic_add_return((a), (v)) < 0)
+
 extern __inline__ int atomic_sub_return(int i, volatile atomic_t *v)
 {
 	unsigned long flags;
diff -Nru a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
--- a/include/asm-generic/vmlinux.lds.h	Sun May 16 01:18:33 2004
+++ b/include/asm-generic/vmlinux.lds.h	Sun May 16 01:18:33 2004
@@ -2,6 +2,10 @@
 #define LOAD_OFFSET 0
 #endif
 
+#ifndef VMLINUX_SYMBOL
+#define VMLINUX_SYMBOL(_sym_) _sym_
+#endif
+
 #define RODATA								\
 	.rodata           : AT(ADDR(.rodata) - LOAD_OFFSET) {		\
 		*(.rodata) *(.rodata.*)					\
@@ -14,30 +18,30 @@
 									\
 	/* Kernel symbol table: Normal symbols */			\
 	__ksymtab         : AT(ADDR(__ksymtab) - LOAD_OFFSET) {		\
-		__start___ksymtab = .;					\
+		VMLINUX_SYMBOL(__start___ksymtab) = .;			\
 		*(__ksymtab)						\
-		__stop___ksymtab = .;					\
+		VMLINUX_SYMBOL(__stop___ksymtab) = .;			\
 	}								\
 									\
 	/* Kernel symbol table: GPL-only symbols */			\
 	__ksymtab_gpl     : AT(ADDR(__ksymtab_gpl) - LOAD_OFFSET) {	\
-		__start___ksymtab_gpl = .;				\
+		VMLINUX_SYMBOL(__start___ksymtab_gpl) = .;		\
 		*(__ksymtab_gpl)					\
-		__stop___ksymtab_gpl = .;				\
+		VMLINUX_SYMBOL(__stop___ksymtab_gpl) = .;		\
 	}								\
 									\
 	/* Kernel symbol table: Normal symbols */			\
 	__kcrctab         : AT(ADDR(__kcrctab) - LOAD_OFFSET) {		\
-		__start___kcrctab = .;					\
+		VMLINUX_SYMBOL(__start___kcrctab) = .;			\
 		*(__kcrctab)						\
-		__stop___kcrctab = .;					\
+		VMLINUX_SYMBOL(__stop___kcrctab) = .;			\
 	}								\
 									\
 	/* Kernel symbol table: GPL-only symbols */			\
 	__kcrctab_gpl     : AT(ADDR(__kcrctab_gpl) - LOAD_OFFSET) {	\
-		__start___kcrctab_gpl = .;				\
+		VMLINUX_SYMBOL(__start___kcrctab_gpl) = .;		\
 		*(__kcrctab_gpl)					\
-		__stop___kcrctab_gpl = .;				\
+		VMLINUX_SYMBOL(__stop___kcrctab_gpl) = .;		\
 	}								\
 									\
 	/* Kernel symbol table: strings */				\
@@ -47,12 +51,12 @@
 
 #define SECURITY_INIT							\
 	.security_initcall.init : {					\
-		__security_initcall_start = .;				\
+		VMLINUX_SYMBOL(__security_initcall_start) = .;		\
 		*(.security_initcall.init) 				\
-		__security_initcall_end = .;				\
+		VMLINUX_SYMBOL(__security_initcall_end) = .;		\
 	}
 
 #define SCHED_TEXT							\
-		__scheduling_functions_start_here = .;			\
+		VMLINUX_SYMBOL(__sched_text_start) = .;			\
 		*(.sched.text)						\
-		__scheduling_functions_end_here = .;
+		VMLINUX_SYMBOL(__sched_text_end) = .;
diff -Nru a/include/asm-h8300/aki3068net/machine-depend.h b/include/asm-h8300/aki3068net/machine-depend.h
--- a/include/asm-h8300/aki3068net/machine-depend.h	Sun May 16 01:18:36 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,29 +0,0 @@
-/* AE-3068 board depend header */
-
-/* TIMER rate define */
-#ifdef H8300_TIMER_DEFINE
-#define H8300_TIMER_COUNT_DATA 20000*10/8192
-#define H8300_TIMER_FREQ 20000*1000/8192
-#endif
-
-/* AE-3068 RTL8019AS Config */
-#ifdef H8300_NE_DEFINE
-
-#define NE2000_ADDR		0x200000
-#define NE2000_IRQ              5
-#define	NE2000_BYTE		volatile unsigned short
-
-#define WCRL                    0xfee023
-#define MAR0A                   0xffff20
-#define ETCR0A                  0xffff24
-#define DTCR0A                  0xffff27
-#define MAR0B                   0xffff28
-#define DTCR0B                  0xffff2f
-
-#define H8300_INIT_NE()                  \
-do {                                     \
-	wordlength = 1;                  \
-        outb_p(0x48, ioaddr + EN0_DCFG); \
-} while(0)
-
-#endif
diff -Nru a/include/asm-h8300/atomic.h b/include/asm-h8300/atomic.h
--- a/include/asm-h8300/atomic.h	Sun May 16 01:18:34 2004
+++ b/include/asm-h8300/atomic.h	Sun May 16 01:18:34 2004
@@ -25,6 +25,7 @@
 }
 
 #define atomic_add(i, v) atomic_add_return(i, v)
+#define atomic_add_negative(a, v)	(atomic_add_return((a), (v)) < 0)
 
 static __inline__ int atomic_sub_return(int i, atomic_t *v)
 {
@@ -48,6 +49,16 @@
 }
 
 #define atomic_inc(v) atomic_inc_return(v)
+
+/*
+ * atomic_inc_and_test - increment and test
+ * @v: pointer of type atomic_t
+ *
+ * Atomically increments @v by 1
+ * and returns true if the result is zero, or false for all
+ * other cases.
+ */
+#define atomic_inc_and_test(v) (atomic_inc_return(v) == 0)
 
 static __inline__ int atomic_dec_return(atomic_t *v)
 {
diff -Nru a/include/asm-h8300/bitops.h b/include/asm-h8300/bitops.h
--- a/include/asm-h8300/bitops.h	Sun May 16 01:18:34 2004
+++ b/include/asm-h8300/bitops.h	Sun May 16 01:18:34 2004
@@ -181,6 +181,23 @@
 #define find_first_zero_bit(addr, size) \
 	find_next_zero_bit((addr), (size), 0)
 
+static __inline__ unsigned long __ffs(unsigned long word)
+{
+	unsigned long result;
+
+	result = -1;
+	__asm__("1:\n\t"
+		"shlr.l %2\n\t"
+		"adds #1,%0\n\t"
+		"bcc 1b"
+		: "=r" (result)
+		: "0"(result),"r"(word));
+	return result;
+}
+
+#define ffs(x) generic_ffs(x)
+#define fls(x) generic_fls(x)
+
 static __inline__ int find_next_zero_bit (void * addr, int size, int offset)
 {
 	unsigned long *p = (unsigned long *)(((unsigned long)addr + (offset >> 3)) & ~3);
@@ -217,22 +234,44 @@
 	return result + ffz(tmp);
 }
 
-static __inline__ unsigned long __ffs(unsigned long word)
+static __inline__ unsigned long find_next_bit(const unsigned long *addr,
+	unsigned long size, unsigned long offset)
 {
-	unsigned long result;
+	unsigned long *p = (unsigned long *)(((unsigned long)addr + (offset >> 3)) & ~3);
+	unsigned int result = offset & ~31UL;
+	unsigned int tmp;
 
-	result = -1;
-	__asm__("1:\n\t"
-		"shlr.l %2\n\t"
-		"adds #1,%0\n\t"
-		"bcc 1b"
-		: "=r" (result)
-		: "0"(result),"r"(word));
-	return result;
-}
+	if (offset >= size)
+		return size;
+	size -= result;
+	offset &= 31UL;
+	if (offset) {
+		tmp = *(p++);
+		tmp &= ~0UL << offset;
+		if (size < 32)
+			goto found_first;
+		if (tmp)
+			goto found_middle;
+		size -= 32;
+		result += 32;
+	}
+	while (size >= 32) {
+		if ((tmp = *p++) != 0)
+			goto found_middle;
+		result += 32;
+		size -= 32;
+	}
+	if (!size)
+		return result;
+	tmp = *p;
 
-#define ffs(x) generic_ffs(x)
-#define fls(x) generic_fls(x)
+found_first:
+	tmp &= ~0UL >> (32 - size);
+	if (tmp == 0UL)
+		return result + size;
+found_middle:
+	return result + __ffs(tmp);
+}
 
 /*
  * Every architecture must define this function. It's the fastest
diff -Nru a/include/asm-h8300/edosk2674/machine-depend.h b/include/asm-h8300/edosk2674/machine-depend.h
--- a/include/asm-h8300/edosk2674/machine-depend.h	Sun May 16 01:18:37 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,70 +0,0 @@
-/* EDOSK2674 board depend header */
-
-/* TIMER rate define */
-#ifdef H8300_TIMER_DEFINE
-#define H8300_TIMER_COUNT_DATA 33000*10/8192
-#define H8300_TIMER_FREQ 33000*1000/8192
-#endif
-
-/* EDOSK-2674R SMSC Network Controler Target Depend impliments */
-#ifdef H8300_SMSC_DEFINE
-
-#define SMSC_BASE 0xf80000
-#define SMSC_IRQ 16
-
-/* sorry quick hack */
-#if defined(outw)
-# undef outw
-#endif
-#define outw(d,a) edosk2674_smsc_outw(d,(volatile unsigned short *)(a))
-#if defined(inw)
-# undef inw
-#endif
-#define inw(a) edosk2674_smsc_inw((volatile unsigned short *)(a))
-#if defined(outsw)
-# undef outsw
-#endif
-#define outsw(a,p,l) edosk2674_smsc_outsw((volatile unsigned short *)(a),p,l)
-#if defined(insw)
-# undef insw
-#endif
-#define insw(a,p,l) edosk2674_smsc_insw((volatile unsigned short *)(a),p,l)
-
-static inline void edosk2674_smsc_outw(
-	unsigned short d,
-	volatile unsigned short *a
-	)
-{
-	*a = (d >> 8) | (d << 8);
-}
-
-static inline unsigned short edosk2674_smsc_inw(
-	volatile unsigned short *a
-	)
-{
-	unsigned short d;
-	d = *a;
-	return (d >> 8) | (d << 8);
-}
-
-static inline void edosk2674_smsc_outsw(
-	volatile unsigned short *a,
-	unsigned short *p,
-	unsigned long l
-	)
-{
-	for (; l != 0; --l, p++)
-		*a = *p;
-}
-
-static inline void edosk2674_smsc_insw(
-	volatile unsigned short *a,
-	unsigned short *p,
-	unsigned long l
-	)
-{
-	for (; l != 0; --l, p++)
-		*p = *a;
-}
-
-#endif
diff -Nru a/include/asm-h8300/flat.h b/include/asm-h8300/flat.h
--- a/include/asm-h8300/flat.h	Sun May 16 01:18:33 2004
+++ b/include/asm-h8300/flat.h	Sun May 16 01:18:33 2004
@@ -18,7 +18,8 @@
  */
 
 #define	flat_get_relocate_addr(rel)		(rel)
-#define flat_get_addr_from_rp(rp, relval)       (get_unaligned(rp) & 0x0ffffff)
+#define flat_get_addr_from_rp(rp, relval, flags) \
+        (get_unaligned(rp) & ((flags & FLAT_FLAG_GOTPIC) ? 0xffffffff: 0x00ffffff))
 #define flat_put_addr_at_rp(rp, addr, rel) \
 	put_unaligned (((*(char *)(rp)) << 24) | ((addr) & 0x00ffffff), rp)
 
diff -Nru a/include/asm-h8300/generic/machine-depend.h b/include/asm-h8300/generic/machine-depend.h
--- a/include/asm-h8300/generic/machine-depend.h	Sun May 16 01:18:34 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,17 +0,0 @@
-/* machine depend header */
-
-/* TIMER rate define */
-#ifdef H8300_TIMER_DEFINE
-#include <linux/config.h>
-#if defined(CONFIG_H83007) || defined(CONFIG_H83068) || defined(CONFIG_H8S2678)
-#define H8300_TIMER_COUNT_DATA CONFIG_CPU_CLOCK*10/8192
-#define H8300_TIMER_FREQ CONFIG_CPU_CLOCK*1000/8192
-#endif
-
-#if defined(CONFIG_H8_3002) || defined(CONFIG_H83048)
-#define H8300_TIMER_COUNT_DATA  CONFIG_CPU_CLOCK*10/8
-#define H8300_TIMER_FREQ CONFIG_CPU_CLOCK*1000/8
-#endif
-
-#endif
-
diff -Nru a/include/asm-h8300/generic/timer_rate.h b/include/asm-h8300/generic/timer_rate.h
--- a/include/asm-h8300/generic/timer_rate.h	Sun May 16 01:18:36 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,15 +0,0 @@
-#include <linux/config.h>
-
-#if defined(CONFIG_H83007) || defined(CONFIG_H83068) || defined(CONFIG_H8S2678)
-#define H8300_TIMER_COUNT_DATA CONFIG_CPU_CLOCK*10/8192
-#define H8300_TIMER_FREQ CONFIG_CPU_CLOCK*1000/8192
-#endif
-
-#if defined(H8_3002) || defined(CONFIG_H83048)
-#define H8300_TIMER_COUNT_DATA  CONFIG_CPU_CLOCK*10/8
-#define H8300_TIMER_FREQ CONFIG_CPU_CLOCK*1000/8
-#endif
-
-#if !defined(H8300_TIMER_COUNT_DATA)
-#error illigal configuration
-#endif
diff -Nru a/include/asm-h8300/h8300_smsc.h b/include/asm-h8300/h8300_smsc.h
--- a/include/asm-h8300/h8300_smsc.h	Sun May 16 01:18:37 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,20 +0,0 @@
-/****************************************************************************/
-
-/*
- *	h8300_smsc.h -- SMSC in H8/300H and H8S Evalution Board.
- *      
- *	(C) Copyright 2003, Yoshinori Sato <ysato@users.sourceforge.jp>
- */
-
-/****************************************************************************/
-#ifndef	h8300smsc_h
-#define	h8300smsc_h
-/****************************************************************************/
-
-/* Such a description is OK ? */
-#define H8300_SMSC_DEFINE
-#include <asm/machine-depend.h>
-#undef  H8300_SMSC_DEFINE
-
-/****************************************************************************/
-#endif	/* h8300smsc_h */
diff -Nru a/include/asm-h8300/h8max/machine-depend.h b/include/asm-h8300/h8max/machine-depend.h
--- a/include/asm-h8300/h8max/machine-depend.h	Sun May 16 01:18:36 2004
+++ /dev/null	Wed Dec 31 16:00:00 1969
@@ -1,100 +0,0 @@
-/* H8MAX board depend header */
-
-/* TIMER rate define */
-#ifdef H8300_TIMER_DEFINE
-#define H8300_TIMER_COUNT_DATA 25000*10/8192
-#define H8300_TIMER_FREQ 25000*1000/8192
-#endif
-
-/* H8MAX RTL8019AS Config */
-#ifdef H8300_NE_DEFINE
-
-#define NE2000_ADDR		0x800600
-#define NE2000_IRQ              4
-#define NE2000_IRQ_VECTOR	(12 + NE2000_IRQ)
-#define	NE2000_BYTE		volatile unsigned short
-
-/* sorry quick hack */
-#if defined(outb)
-# undef outb
-#endif
-#define outb(d,a)               h8max_outb((d),(a) - NE2000_ADDR)
-#if defined(inb)
-# undef inb
-#endif
-#define inb(a)                  h8max_inb((a) - NE2000_ADDR)
-#if defined(outb_p)
-# undef outb_p
-#endif
-#define outb_p(d,a)             h8max_outb((d),(a) - NE2000_ADDR)
-#if defined(inb_p)
-# undef inb_p
-#endif
-#define inb_p(a)                h8max_inb((a) - NE2000_ADDR)
-#if defined(outsw)
-# undef outsw
-#endif
-#define outsw(a,p,l)            h8max_outsw((a) - NE2000_ADDR,(unsigned short *)p,l)
-#if defined(insw)
-# undef insw
-#endif
-#define insw(a,p,l)             h8max_insw((a) - NE2000_ADDR,(unsigned short *)p,l)
-#if defined(outsb)
-# undef outsb
-#endif
-#define outsb(a,p,l)            h8max_outsb((a) - NE2000_ADDR,(unsigned char *)p,l)
-#if defined(insb)
-# undef insb
-#endif
-#define insb(a,p,l)             h8max_insb((a) - NE2000_ADDR,(unsigned char *)p,l)
-
-#define H8300_INIT_NE()                  \
-do {                                     \
-	wordlength = 2;                  \
-	h8max_outb(0x49, ioaddr + EN0_DCFG); \
-	SA_prom[14] = SA_prom[15] = 0x57;\
-} while(0)
-
-static inline void h8max_outb(unsigned char d,unsigned char a)
-{
-	*(unsigned short *)(NE2000_ADDR + (a << 1)) = d;
-}
-
-static inline unsigned char h8max_inb(unsigned char a)
-{
-	return *(unsigned char *)(NE2000_ADDR + (a << 1) +1);
-}
-
-static inline void h8max_outsw(unsigned char a,unsigned short *p,unsigned long l)
-{
-	unsigned short d;
-	for (; l != 0; --l, p++) {
-		d = (((*p) >> 8) & 0xff) | ((*p) << 8);
-		*(unsigned short *)(NE2000_ADDR + (a << 1)) = d;
-	}
-}
-
-static inline void h8max_insw(unsigned char a,unsigned short *p,unsigned long l)
-{
-	unsigned short d;
-	for (; l != 0; --l, p++) {
-		d = *(unsigned short *)(NE2000_ADDR + (a << 1));
-		*p = (d << 8)|((d >> 8) & 0xff);
-	}
-}
-
-static inline void h8max_outsb(unsigned char a,unsigned char *p,unsigned long l)
-{
-	for (; l != 0; --l, p++) {
-		*(unsigned short *)(NE2000_ADDR + (a << 1)) = *p;
-	}
-}
-
-static inline void h8max_insb(unsigned char a,unsigned char *p,unsigned long l)
-{
-	for (; l != 0; --l, p++) {
-		*p = *((unsigned char *)(NE2000_ADDR + (a << 1))+1);
-	}
-}
-
-#endif
diff -Nru a/include/asm-h8300/hardirq.h b/include/asm-h8300/hardirq.h
--- a/include/asm-h8300/hardirq.h	Sun May 16 01:18:35 2004
+++ b/include/asm-h8300/hardirq.h	Sun May 16 01:18:35 2004
@@ -75,7 +75,7 @@
 #define irq_enter()		(preempt_count() += HARDIRQ_OFFSET)
 
 #ifdef CONFIG_PREEMPT
-# define in_atomic()	(preempt_count() != kernel_locked())
+# define in_atomic()	((preempt_count() & ~PREEMPT_ACTIVE) != kernel_locked())
 # define IRQ_EXIT_OFFSET (HARDIRQ_OFFSET-1)
 #else
 # define in_atomic()	(preempt_count() != 0)
diff -Nru a/include/asm-h8300/io.h b/include/asm-h8300/io.h
--- a/include/asm-h8300/io.h	Sun May 16 01:18:35 2004
+++ b/include/asm-h8300/io.h	Sun May 16 01:18:35 2004
@@ -76,7 +76,7 @@
 	return (*(volatile unsigned char *)ABWCR & (1 << ((addr >> 21) & 7))) == 0;
 }
 
-static inline void io_outsb(unsigned int addr, void *buf, int len)
+static inline void io_outsb(unsigned int addr, const void *buf, int len)
 {
 	volatile unsigned char  *ap_b = (volatile unsigned char *) addr;
 	volatile unsigned short *ap_w = (volatile unsigned short *) addr;
@@ -91,7 +91,7 @@
 	}
 }
 
-static inline void io_outsw(unsigned int addr, void *buf, int len)
+static inline void io_outsw(unsigned int addr, const void *buf, int len)
 {
 	volatile unsigned short *ap = (volatile unsigned short *) addr;
 	unsigned short *bp = (unsigned short *) buf;
@@ -99,25 +99,29 @@
 		*ap = *bp++;
 }
 
-static inline void io_outsl(unsigned int addr, void *buf, int len)
+static inline void io_outsl(unsigned int addr, const void *buf, int len)
 {
 	volatile unsigned int *ap = (volatile unsigned int *) addr;
-	unsigned int *bp = (unsigned int *) buf;
+	unsigned long *bp = (unsigned long *) buf;
 	while (len--)
 		*ap = *bp++;
 }
 
 static inline void io_insb(unsigned int addr, void *buf, int len)
 {
-	volatile unsigned char  *ap;
+	volatile unsigned char  *ap_b;
+	volatile unsigned short *ap_w;
 	unsigned char *bp = (unsigned char *) buf;
 
-	if(h8300_buswidth(addr))
-		ap = (volatile unsigned char *)(addr ^ 1);
-	else
-		ap = (volatile unsigned char *)addr;
-	while (len--)
-		*bp++ = *ap;
+	if(h8300_buswidth(addr)) {
+		ap_w = (volatile unsigned short *)(addr & ~1);
+		while (len--)
+			*bp++ = *ap_w & 0xff;
+	} else {
+		ap_b = (volatile unsigned char *)addr;
+		while (len--)
+			*bp++ = *ap_b;
+	}
 }
 
 static inline void io_insw(unsigned int addr, void *buf, int len)
@@ -131,7 +135,7 @@
 static inline void io_insl(unsigned int addr, void *buf, int len)
 {
 	volatile unsigned int *ap = (volatile unsigned int *) addr;
-	unsigned int *bp = (unsigned int *) buf;
+	unsigned long *bp = (unsigned long *) buf;
 	while (len--)
 		*bp++ = *ap;
 }
@@ -145,10 +149,10 @@
 #define memcpy_fromio(a,b,c)	memcpy((a),(void *)(b),(c))
 #define memcpy_toio(a,b,c)	memcpy((void *)(a),(b),(c))
 
-#define inb(addr)    ((h8300_buswidth(addr))?readb((addr) ^ 1) & 0xff:readb(addr))
+#define inb(addr)    ((h8300_buswidth(addr))?readw((addr) & ~1) & 0xff:readb(addr))
 #define inw(addr)    _swapw(readw(addr))
 #define inl(addr)    _swapl(readl(addr))
-#define outb(x,addr) ((void)((h8300_buswidth(addr) && ((addr) & 1))?writew(x,addr):writeb(x,addr)))
+#define outb(x,addr) ((void)((h8300_buswidth(addr) && ((addr) & 1))?writew(x,(addr) & ~1):writeb(x,addr)))
 #define outw(x,addr) ((void) writew(_swapw(x),addr))
 #define outl(x,addr) ((void) writel(_swapl(x),addr))
 
diff -Nru a/include/asm-h8300/processor.h b/include/asm-h8300/processor.h
--- a/include/asm-h8300/processor.h	Sun May 16 01:18:33 2004
+++ b/include/asm-h8300/processor.h	Sun May 16 01:18:33 2004
@@ -23,12 +23,12 @@
 #include <asm/ptrace.h>
 #include <asm/current.h>
 
-extern inline unsigned long rdusp(void) {
+static inline unsigned long rdusp(void) {
 	extern unsigned int	sw_usp;
 	return(sw_usp);
 }
 
-extern inline void wrusp(unsigned long usp) {
+static inline void wrusp(unsigned long usp) {
 	extern unsigned int	sw_usp;
 	sw_usp = usp;
 }
@@ -61,9 +61,15 @@
 	} breakinfo;
 };
 
-#define INIT_THREAD  { \
-	sizeof(init_stack) + (unsigned long) init_stack, 0, \
-	PS_S,  0, {(unsigned short *)-1, 0}, \
+#define INIT_THREAD  {						\
+	.ksp  = sizeof(init_stack) + (unsigned long)init_stack, \
+	.usp  = 0,						\
+	.ccr  = PS_S,						\
+	.esp0 = 0,						\
+	.breakinfo = {						\
+		.addr = (unsigned short *)-1,			\
+		.inst = 0					\
+	}							\
 }
 
 /*
@@ -78,6 +84,7 @@
 	set_fs(USER_DS);           /* reads from user space */  \
   	(_regs)->pc = (_pc);				        \
 	(_regs)->ccr &= 0x00;	   /* clear kernel flag */      \
+	(_regs)->er5 = current->mm->start_data;	/* GOT base */  \
 	wrusp((unsigned long)(_usp) - sizeof(unsigned long)*3);	\
 } while(0)
 #endif
@@ -88,6 +95,7 @@
 	(_regs)->pc = (_pc);				        \
 	(_regs)->ccr = 0x00;	   /* clear kernel flag */      \
 	(_regs)->exr = 0x78;       /* enable all interrupts */  \
+	(_regs)->er5 = current->mm->start_data;	/* GOT base */  \
 	/* 14 = space for retaddr(4), vector(4), er0(4) and ext(2) on stack */ \
 	wrusp(((unsigned long)(_usp)) - 14);                    \
 } while(0)
diff -Nru a/include/asm-h8300/semaphore.h b/include/asm-h8300/semaphore.h
--- a/include/asm-h8300/semaphore.h	Sun May 16 01:18:35 2004
+++ b/include/asm-h8300/semaphore.h	Sun May 16 01:18:35 2004
@@ -96,7 +96,7 @@
 	__asm__ __volatile__(
 		"stc ccr,r3l\n\t"
 		"orc #0x80,ccr\n\t"
-		"mov.l %0, er1\n\t"
+		"mov.l %2, er1\n\t"
 		"dec.l #1,er1\n\t"
 		"mov.l er1,%0\n\t"
 		"bpl 1f\n\t"
@@ -107,8 +107,8 @@
 		"1:\n\t"
 		"ldc r3l,ccr\n"
 		"2:"
-		: "+m"(*count)
-		: "g"(sem)
+		: "=m"(*count)
+		: "g"(sem),"m"(*count)
 		: "cc",  "er1", "er2", "er3");
 }
 
@@ -125,7 +125,7 @@
 	__asm__ __volatile__(
 		"stc ccr,r1l\n\t"
 		"orc #0x80,ccr\n\t"
-		"mov.l %1, er2\n\t"
+		"mov.l %3, er2\n\t"
 		"dec.l #1,er2\n\t"
 		"mov.l er2,%1\n\t"
 		"bpl 1f\n\t"
@@ -137,8 +137,8 @@
 		"ldc r1l,ccr\n\t"
 		"sub.l %0,%0\n\t"
 		"2:\n\t"
-		: "=r" (count),"+m" (*count)
-		: "g"(sem)
+		: "=r" (count),"=m" (*count)
+		: "g"(sem),"m"(*count)
 		: "cc", "er1", "er2", "er3");
 	return (int)count;
 }
@@ -155,7 +155,7 @@
 	__asm__ __volatile__(
 		"stc ccr,r3l\n\t"
 		"orc #0x80,ccr\n\t"
-		"mov.l %0,er2\n\t"
+		"mov.l %3,er2\n\t"
 		"dec.l #1,er2\n\t"
 		"mov.l er2,%0\n\t"
 		"bpl 1f\n\t"
@@ -171,8 +171,8 @@
 		"ldc r3l,ccr\n\t"
 		"sub.l %1,%1\n"
 		"2:"
-		: "+m" (*count),"=r"(count)
-		: "g"(sem)
+		: "=m" (*count),"=r"(count)
+		: "g"(sem),"m"(*count)
 		: "cc", "er1","er2", "er3");
 	return (int)count;
 }
@@ -195,7 +195,7 @@
 	__asm__ __volatile__(
 		"stc ccr,r3l\n\t"
 		"orc #0x80,ccr\n\t"
-		"mov.l %0,er1\n\t"
+		"mov.l %2,er1\n\t"
 		"inc.l #1,er1\n\t"
 		"mov.l er1,%0\n\t"
 		"ldc r3l,ccr\n\t"
@@ -205,8 +205,8 @@
 		"mov.l %1,er0\n\t"
 		"jsr @___up\n"
 		"1:"
-		: "+m"(*count)
-		: "g"(sem)
+		: "=m"(*count)
+		: "g"(sem),"m"(*count)
 		: "cc", "er1", "er2", "er3");
 }
 
diff -Nru a/include/asm-h8300/sigcontext.h b/include/asm-h8300/sigcontext.h
--- a/include/asm-h8300/sigcontext.h	Sun May 16 01:18:34 2004
+++ b/include/asm-h8300/sigcontext.h	Sun May 16 01:18:34 2004
@@ -8,6 +8,7 @@
 	unsigned long  sc_er1;
 	unsigned long  sc_er2;
 	unsigned long  sc_er3;
+	unsigned long  sc_er5;
 	unsigned short sc_ccr;
 	unsigned long  sc_pc;
 };
diff -Nru a/include/asm-h8300/thread_info.h b/include/asm-h8300/thread_info.h
--- a/include/asm-h8300/thread_info.h	Sun May 16 01:18:34 2004
+++ b/include/asm-h8300/thread_info.h	Sun May 16 01:18:34 2004
@@ -32,10 +32,11 @@
  */
 #define INIT_THREAD_INFO(tsk)			\
 {						\
-	task:		&tsk,			\
-	exec_domain:	&default_exec_domain,	\
-	flags:		0,			\
-	cpu:		0,			\
+	.task =		&tsk,			\
+	.exec_domain =	&default_exec_domain,	\
+	.flags =	0,			\
+	.cpu =		0,			\
+	.preempt_count = 1,			\
 	.restart_block	= {			\
 		.fn = do_no_restart_syscall,	\
 	},					\
@@ -59,7 +60,7 @@
 		"mov.l	sp, %0 \n\t"
 		"and.l	%1, %0"
 		: "=&r"(ti)
-		: "g" (~(THREAD_SIZE-1))
+		: "i" (~(THREAD_SIZE-1))
 		);
 	return ti;
 }
@@ -79,6 +80,7 @@
 #define TI_EXECDOMAIN	4
 #define TI_FLAGS	8
 #define TI_CPU		12
+#define TI_PRE_COUNT	16
 
 #define	PREEMPT_ACTIVE	0x4000000
 
diff -Nru a/include/asm-h8300/timex.h b/include/asm-h8300/timex.h
--- a/include/asm-h8300/timex.h	Sun May 16 01:18:35 2004
+++ b/include/asm-h8300/timex.h	Sun May 16 01:18:35 2004
@@ -6,11 +6,7 @@
 #ifndef _ASM_H8300_TIMEX_H
 #define _ASM_H8300_TIMEX_H
 
-#define H8300_TIMER_DEFINE
-#include <asm/machine-depend.h>
-#undef  H8300_TIMER_DEFINE
-
-#define CLOCK_TICK_RATE H8300_TIMER_FREQ
+#define CLOCK_TICK_RATE CONFIG_CPU_CLOCK*1000/8192 /* Timer input freq. */
 #define CLOCK_TICK_FACTOR	20	/* Factor of both 1000000 and CLOCK_TICK_RATE */
 #define FINETUNE ((((((long)LATCH * HZ - CLOCK_TICK_RATE) << SHIFT_HZ) * \
 	(1000000/CLOCK_TICK_FACTOR) / (CLOCK_TICK_RATE/CLOCK_TICK_FACTOR)) \
diff -Nru a/include/asm-i386/8253pit.h b/include/asm-i386/8253pit.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/include/asm-i386/8253pit.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,12 @@
+/*
+ * 8253/8254 Programmable Interval Timer
+ */
+
+#ifndef _8253PIT_H
+#define _8253PIT_H
+
+#include <asm/timex.h>
+
+#define PIT_TICK_RATE 	CLOCK_TICK_RATE
+
+#endif
diff -Nru a/include/asm-i386/acpi.h b/include/asm-i386/acpi.h
--- a/include/asm-i386/acpi.h	Sun May 16 01:18:36 2004
+++ b/include/asm-i386/acpi.h	Sun May 16 01:18:36 2004
@@ -124,7 +124,6 @@
 extern int acpi_gsi_to_irq(u32 gsi, unsigned int *irq);
 #ifdef CONFIG_X86_IO_APIC
 extern int skip_ioapic_setup;
-extern int acpi_irq_to_vector(u32 irq);	/* deprecated in favor of acpi_gsi_to_irq */
 extern int acpi_skip_timer_override;
 
 static inline void disable_ioapic_setup(void)
diff -Nru a/include/asm-i386/cpu.h b/include/asm-i386/cpu.h
--- a/include/asm-i386/cpu.h	Sun May 16 01:18:35 2004
+++ b/include/asm-i386/cpu.h	Sun May 16 01:18:35 2004
@@ -17,7 +17,11 @@
 	struct node *parent = NULL;
 	
 #ifdef CONFIG_NUMA
-	parent = &node_devices[cpu_to_node(num)].node;
+	int node = cpu_to_node(num);
+
+	if (!node_online(node))
+		return 0; 
+	parent = &node_devices[node].node;
 #endif /* CONFIG_NUMA */
 
 	return register_cpu(&cpu_devices[num].cpu, num, parent);
diff -Nru a/include/asm-i386/genapic.h b/include/asm-i386/genapic.h
--- a/include/asm-i386/genapic.h	Sun May 16 01:18:35 2004
+++ b/include/asm-i386/genapic.h	Sun May 16 01:18:35 2004
@@ -26,7 +26,8 @@
 	int int_delivery_mode;
 	int int_dest_mode; 
 	int apic_broadcast_id; 
-	int esr_disable;
+	int ESR_DISABLE;
+	int apic_destination_logical;
 	unsigned long (*check_apicid_used)(physid_mask_t bitmap, int apicid);
 	unsigned long (*check_apicid_present)(int apicid); 
 	int no_balance_irq;
@@ -80,6 +81,8 @@
 	.apic_broadcast_id = APIC_BROADCAST_ID, \
 	.no_balance_irq = NO_BALANCE_IRQ, \
 	.no_ioapic_check = NO_IOAPIC_CHECK, \
+	.ESR_DISABLE = esr_disable, \
+	.apic_destination_logical = APIC_DEST_LOGICAL, \
 	APICFUNC(apic_id_registered), \
 	APICFUNC(target_cpus), \
 	APICFUNC(check_apicid_used), \
diff -Nru a/include/asm-i386/mach-es7000/mach_apic.h b/include/asm-i386/mach-es7000/mach_apic.h
--- a/include/asm-i386/mach-es7000/mach_apic.h	Sun May 16 01:18:33 2004
+++ b/include/asm-i386/mach-es7000/mach_apic.h	Sun May 16 01:18:33 2004
@@ -39,7 +39,7 @@
 #endif
 
 #define APIC_BROADCAST_ID	(0xff)
-#define NO_IOAPIC_CHECK (0)
+#define NO_IOAPIC_CHECK (1)
 
 static inline unsigned long check_apicid_used(physid_mask_t bitmap, int apicid)
 { 
@@ -169,7 +169,11 @@
 	num_bits_set = cpus_weight_const(cpumask);
 	/* Return id to all */
 	if (num_bits_set == NR_CPUS)
+#if defined CONFIG_ES7000_CLUSTERED_APIC
 		return 0xFF;
+#else
+		return cpu_to_logical_apicid(0);
+#endif
 	/* 
 	 * The cpus in the mask must all be on the apic cluster.  If are not 
 	 * on the same apicid cluster return default value of TARGET_CPUS. 
@@ -182,7 +186,11 @@
 			if (apicid_cluster(apicid) != 
 					apicid_cluster(new_apicid)){
 				printk ("%s: Not a valid mask!\n",__FUNCTION__);
+#if defined CONFIG_ES7000_CLUSTERED_APIC
 				return 0xFF;
+#else
+				return cpu_to_logical_apicid(0);
+#endif
 			}
 			apicid = new_apicid;
 			cpus_found++;
diff -Nru a/include/asm-i386/mach-es7000/mach_ipi.h b/include/asm-i386/mach-es7000/mach_ipi.h
--- a/include/asm-i386/mach-es7000/mach_ipi.h	Sun May 16 01:18:34 2004
+++ b/include/asm-i386/mach-es7000/mach_ipi.h	Sun May 16 01:18:34 2004
@@ -1,7 +1,7 @@
 #ifndef __ASM_MACH_IPI_H
 #define __ASM_MACH_IPI_H
 
-static inline void send_IPI_mask_sequence(cpumask_t mask, int vector);
+inline void send_IPI_mask_sequence(cpumask_t mask, int vector);
 
 static inline void send_IPI_mask(cpumask_t mask, int vector)
 {
diff -Nru a/include/asm-i386/mach-es7000/mach_mpparse.h b/include/asm-i386/mach-es7000/mach_mpparse.h
--- a/include/asm-i386/mach-es7000/mach_mpparse.h	Sun May 16 01:18:33 2004
+++ b/include/asm-i386/mach-es7000/mach_mpparse.h	Sun May 16 01:18:33 2004
@@ -12,26 +12,28 @@
 {
 }
 
-extern void parse_unisys_oem (char *oemptr, int oem_entries);
+extern int parse_unisys_oem (char *oemptr, int oem_entries);
 extern int find_unisys_acpi_oem_table(unsigned long *oem_addr, int *length);
 
-static inline void mps_oem_check(struct mp_config_table *mpc, char *oem, 
+static inline int mps_oem_check(struct mp_config_table *mpc, char *oem,
 		char *productid)
 {
 	if (mpc->mpc_oemptr) {
 		struct mp_config_oemtable *oem_table = 
 			(struct mp_config_oemtable *)mpc->mpc_oemptr;
-		parse_unisys_oem((char *)oem_table, oem_table->oem_length);
+		return parse_unisys_oem((char *)oem_table, oem_table->oem_length);
 	}
+	return 0;
 }
 
 /* Hook from generic ACPI tables.c */
-static inline void acpi_madt_oem_check(char *oem_id, char *oem_table_id)
+static inline int acpi_madt_oem_check(char *oem_id, char *oem_table_id)
 {
 	unsigned long oem_addr; 
 	int oem_entries;
 	if (!find_unisys_acpi_oem_table(&oem_addr, &oem_entries))
-		parse_unisys_oem((char *)oem_addr, oem_entries);
+		return parse_unisys_oem((char *)oem_addr, oem_entries);
+	return 0;
 }
 
 
diff -Nru a/include/asm-i386/mach-generic/mach_apic.h b/include/asm-i386/mach-generic/mach_apic.h
--- a/include/asm-i386/mach-generic/mach_apic.h	Sun May 16 01:18:34 2004
+++ b/include/asm-i386/mach-generic/mach_apic.h	Sun May 16 01:18:34 2004
@@ -3,14 +3,15 @@
 
 #include <asm/genapic.h>
 
-#define esr_disable (genapic->esr_disable)
+#define esr_disable (genapic->ESR_DISABLE)
 #define NO_BALANCE_IRQ (genapic->no_balance_irq)
 #define NO_IOAPIC_CHECK	(genapic->no_ioapic_check)
 #define APIC_BROADCAST_ID (genapic->apic_broadcast_id)
 #define INT_DELIVERY_MODE (genapic->int_delivery_mode)
 #define INT_DEST_MODE (genapic->int_dest_mode)
+#undef APIC_DEST_LOGICAL
+#define APIC_DEST_LOGICAL (genapic->apic_destination_logical)
 #define TARGET_CPUS	  (genapic->target_cpus())
-#define apic_id_registered (genapic->apic_id_registered)
 #define apic_id_registered (genapic->apic_id_registered)
 #define init_apic_ldr (genapic->init_apic_ldr)
 #define ioapic_phys_id_map (genapic->ioapic_phys_id_map)
diff -Nru a/include/asm-i386/param.h b/include/asm-i386/param.h
--- a/include/asm-i386/param.h	Sun May 16 01:18:33 2004
+++ b/include/asm-i386/param.h	Sun May 16 01:18:33 2004
@@ -4,7 +4,7 @@
 #ifdef __KERNEL__
 # define HZ		1000		/* Internal kernel timer frequency */
 # define USER_HZ	100		/* .. some user interfaces are in "ticks" */
-# define CLOCKS_PER_SEC	(USER_HZ)	/* like times() */
+# define CLOCKS_PER_SEC		(USER_HZ)	/* like times() */
 #endif
 
 #ifndef HZ
diff -Nru a/include/asm-i386/processor.h b/include/asm-i386/processor.h
--- a/include/asm-i386/processor.h	Sun May 16 01:18:33 2004
+++ b/include/asm-i386/processor.h	Sun May 16 01:18:33 2004
@@ -59,6 +59,7 @@
 	char	x86_model_id[64];
 	int 	x86_cache_size;  /* in KB - valid for CPUS which support this
 				    call  */
+	int 	x86_cache_alignment;	/* In bytes */
 	int	fdiv_bug;
 	int	f00f_bug;
 	int	coma_bug;
@@ -647,5 +648,10 @@
 #define spin_lock_prefetch(x)	prefetchw(x)
 
 extern void select_idle_routine(const struct cpuinfo_x86 *c);
+
+#ifdef CONFIG_SCHED_SMT
+#define ARCH_HAS_SCHED_DOMAIN
+#define ARCH_HAS_SCHED_WAKE_IDLE
+#endif
 
 #endif /* __ASM_I386_PROCESSOR_H */
diff -Nru a/include/asm-i386/smp.h b/include/asm-i386/smp.h
--- a/include/asm-i386/smp.h	Sun May 16 01:18:35 2004
+++ b/include/asm-i386/smp.h	Sun May 16 01:18:35 2004
@@ -34,7 +34,7 @@
 extern void smp_alloc_memory(void);
 extern int pic_mode;
 extern int smp_num_siblings;
-extern int cpu_sibling_map[];
+extern cpumask_t cpu_sibling_map[];
 
 extern void smp_flush_tlb(void);
 extern void smp_message_irq(int cpl, void *dev_id, struct pt_regs *regs);
diff -Nru a/include/asm-i386/spinlock.h b/include/asm-i386/spinlock.h
--- a/include/asm-i386/spinlock.h	Sun May 16 01:18:34 2004
+++ b/include/asm-i386/spinlock.h	Sun May 16 01:18:34 2004
@@ -42,6 +42,7 @@
 
 #define spin_is_locked(x)	(*(volatile signed char *)(&(x)->lock) <= 0)
 #define spin_unlock_wait(x)	do { barrier(); } while(spin_is_locked(x))
+#define _raw_spin_lock_flags(lock, flags) _raw_spin_lock(lock)
 
 #define spin_lock_string \
 	"\n1:\t" \
diff -Nru a/include/asm-ia64/acpi.h b/include/asm-ia64/acpi.h
--- a/include/asm-ia64/acpi.h	Sun May 16 01:18:36 2004
+++ b/include/asm-ia64/acpi.h	Sun May 16 01:18:36 2004
@@ -96,7 +96,6 @@
 const char *acpi_get_sysname (void);
 int acpi_request_vector (u32 int_type);
 int acpi_register_irq (u32 gsi, u32 polarity, u32 trigger);
-int acpi_irq_to_vector (u32 irq); /* deprecated in favor of acpi_gsi_to_irq */
 int acpi_gsi_to_irq (u32 gsi, unsigned int *irq);
 
 #ifdef CONFIG_ACPI_NUMA
diff -Nru a/include/asm-ia64/atomic.h b/include/asm-ia64/atomic.h
--- a/include/asm-ia64/atomic.h	Sun May 16 01:18:34 2004
+++ b/include/asm-ia64/atomic.h	Sun May 16 01:18:34 2004
@@ -159,10 +159,10 @@
 
 #define atomic_sub_and_test(i,v)	(atomic_sub_return((i), (v)) == 0)
 #define atomic_dec_and_test(v)		(atomic_sub_return(1, (v)) == 0)
-#define atomic_inc_and_test(v)		(atomic_add_return(1, (v)) != 0)
+#define atomic_inc_and_test(v)		(atomic_add_return(1, (v)) == 0)
 #define atomic64_sub_and_test(i,v)	(atomic64_sub_return((i), (v)) == 0)
 #define atomic64_dec_and_test(v)	(atomic64_sub_return(1, (v)) == 0)
-#define atomic64_inc_and_test(v)	(atomic64_add_return(1, (v)) != 0)
+#define atomic64_inc_and_test(v)	(atomic64_add_return(1, (v)) == 0)
 
 #define atomic_add(i,v)			atomic_add_return((i), (v))
 #define atomic_sub(i,v)			atomic_sub_return((i), (v))
diff -Nru a/include/asm-ia64/cpu.h b/include/asm-ia64/cpu.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/include/asm-ia64/cpu.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,17 @@
+#ifndef _ASM_IA64_CPU_H_
+#define _ASM_IA64_CPU_H_
+
+#include <linux/device.h>
+#include <linux/cpu.h>
+#include <linux/topology.h>
+#include <linux/percpu.h>
+
+struct ia64_cpu {
+	struct cpu cpu;
+};
+
+DECLARE_PER_CPU(struct ia64_cpu, cpu_devices);
+
+DECLARE_PER_CPU(int, cpu_state);
+
+#endif /* _ASM_IA64_CPU_H_ */
diff -Nru a/include/asm-ia64/smp.h b/include/asm-ia64/smp.h
--- a/include/asm-ia64/smp.h	Sun May 16 01:18:35 2004
+++ b/include/asm-ia64/smp.h	Sun May 16 01:18:35 2004
@@ -36,9 +36,8 @@
 	int cpu_phys_id[NR_CPUS];
 } smp_boot_data __initdata;
 
-extern char no_int_routing __initdata;
+extern char no_int_routing __devinitdata;
 
-extern cpumask_t phys_cpu_present_map;
 extern cpumask_t cpu_online_map;
 extern unsigned long ipi_base_addr;
 extern unsigned char smp_int_redirect;
@@ -48,8 +47,6 @@
 
 extern unsigned long ap_wakeup_vector;
 
-#define cpu_possible_map phys_cpu_present_map
-
 /*
  * Function to map hard smp processor id to logical id.  Slow, so don't use this in
  * performance-critical code.
@@ -113,6 +110,7 @@
 /* Upping and downing of CPUs */
 extern int __cpu_disable (void);
 extern void __cpu_die (unsigned int cpu);
+extern void cpu_die (void) __attribute__ ((noreturn));
 extern int __cpu_up (unsigned int cpu);
 extern void __init smp_build_cpu_map(void);
 
@@ -122,6 +120,8 @@
 extern int smp_call_function_single (int cpuid, void (*func) (void *info), void *info,
 				     int retry, int wait);
 extern void smp_send_reschedule (int cpu);
+extern void lock_ipi_calllock(void);
+extern void unlock_ipi_calllock(void);
 
 #endif /* CONFIG_SMP */
 #endif /* _ASM_IA64_SMP_H */
diff -Nru a/include/asm-ia64/spinlock.h b/include/asm-ia64/spinlock.h
--- a/include/asm-ia64/spinlock.h	Sun May 16 01:18:33 2004
+++ b/include/asm-ia64/spinlock.h	Sun May 16 01:18:33 2004
@@ -32,10 +32,10 @@
  * carefully coded to touch only those registers that spin_lock() marks "clobbered".
  */
 
-#define IA64_SPINLOCK_CLOBBERS "ar.ccv", "ar.pfs", "p14", "r28", "r29", "r30", "b6", "memory"
+#define IA64_SPINLOCK_CLOBBERS "ar.ccv", "ar.pfs", "p14", "p15", "r27", "r28", "r29", "r30", "b6", "memory"
 
 static inline void
-_raw_spin_lock (spinlock_t *lock)
+_raw_spin_lock_flags (spinlock_t *lock, unsigned long flags)
 {
 	register volatile unsigned int *ptr asm ("r31") = &lock->lock;
 
@@ -50,9 +50,10 @@
 		      "cmpxchg4.acq r30 = [%1], r30, ar.ccv\n\t"
 		      "movl r29 = ia64_spinlock_contention_pre3_4;;\n\t"
 		      "cmp4.ne p14, p0 = r30, r0\n\t"
-		      "mov b6 = r29;;\n"
+		      "mov b6 = r29;;\n\t"
+		      "mov r27=%2\n\t"
 		      "(p14) br.cond.spnt.many b6"
-		      : "=r"(ptr) : "r"(ptr) : IA64_SPINLOCK_CLOBBERS);
+		      : "=r"(ptr) : "r"(ptr), "r" (flags) : IA64_SPINLOCK_CLOBBERS);
 # else
 	asm volatile ("{\n\t"
 		      "  mov ar.ccv = r0\n\t"
@@ -60,33 +61,38 @@
 		      "  mov r30 = 1;;\n\t"
 		      "}\n\t"
 		      "cmpxchg4.acq r30 = [%1], r30, ar.ccv;;\n\t"
-		      "cmp4.ne p14, p0 = r30, r0\n"
+		      "cmp4.ne p14, p0 = r30, r0\n\t"
+		      "mov r27=%2\n\t"
 		      "(p14) brl.cond.spnt.many ia64_spinlock_contention_pre3_4;;"
-		      : "=r"(ptr) : "r"(ptr) : IA64_SPINLOCK_CLOBBERS);
+		      : "=r"(ptr) : "r"(ptr), "r" (flags) : IA64_SPINLOCK_CLOBBERS);
 # endif /* CONFIG_MCKINLEY */
 #else
 # ifdef CONFIG_ITANIUM
 	/* don't use brl on Itanium... */
 	/* mis-declare, so we get the entry-point, not it's function descriptor: */
 	asm volatile ("mov r30 = 1\n\t"
+		      "mov r27=%2\n\t"
 		      "mov ar.ccv = r0;;\n\t"
 		      "cmpxchg4.acq r30 = [%0], r30, ar.ccv\n\t"
 		      "movl r29 = ia64_spinlock_contention;;\n\t"
 		      "cmp4.ne p14, p0 = r30, r0\n\t"
-		      "mov b6 = r29;;\n"
+		      "mov b6 = r29;;\n\t"
 		      "(p14) br.call.spnt.many b6 = b6"
-		      : "=r"(ptr) : "r"(ptr) : IA64_SPINLOCK_CLOBBERS);
+		      : "=r"(ptr) : "r"(ptr), "r" (flags) : IA64_SPINLOCK_CLOBBERS);
 # else
 	asm volatile ("mov r30 = 1\n\t"
+		      "mov r27=%2\n\t"
 		      "mov ar.ccv = r0;;\n\t"
 		      "cmpxchg4.acq r30 = [%0], r30, ar.ccv;;\n\t"
 		      "cmp4.ne p14, p0 = r30, r0\n\t"
 		      "(p14) brl.call.spnt.many b6=ia64_spinlock_contention;;"
-		      : "=r"(ptr) : "r"(ptr) : IA64_SPINLOCK_CLOBBERS);
+		      : "=r"(ptr) : "r"(ptr), "r" (flags) : IA64_SPINLOCK_CLOBBERS);
 # endif /* CONFIG_MCKINLEY */
 #endif
 }
+#define _raw_spin_lock(lock) _raw_spin_lock_flags(lock, 0)
 #else /* !ASM_SUPPORTED */
+#define _raw_spin_lock_flags(lock, flags) _raw_spin_lock(lock)
 # define _raw_spin_lock(x)								\
 do {											\
 	__u32 *ia64_spinlock_ptr = (__u32 *) (x);					\
diff -Nru a/include/asm-m68k/amigahw.h b/include/asm-m68k/amigahw.h
--- a/include/asm-m68k/amigahw.h	Sun May 16 01:18:36 2004
+++ b/include/asm-m68k/amigahw.h	Sun May 16 01:18:36 2004
@@ -252,8 +252,8 @@
 #define DMAF_ALL		(0x01FF)
 
 struct CIA {
-    unsigned char pra; 		char pad0[0xff];
-    unsigned char prb; 		char pad1[0xff];
+    unsigned char pra;		char pad0[0xff];
+    unsigned char prb;		char pad1[0xff];
     unsigned char ddra;		char pad2[0xff];
     unsigned char ddrb;		char pad3[0xff];
     unsigned char talo;		char pad4[0xff];
@@ -263,10 +263,10 @@
     unsigned char todlo;	char pad8[0xff];
     unsigned char todmid;	char pad9[0xff];
     unsigned char todhi;	char pada[0x1ff];
-    unsigned char sdr; 		char padb[0xff];
-    unsigned char icr; 		char padc[0xff];
-    unsigned char cra; 		char padd[0xff];
-    unsigned char crb; 		char pade[0xff];
+    unsigned char sdr;		char padb[0xff];
+    unsigned char icr;		char padc[0xff];
+    unsigned char cra;		char padd[0xff];
+    unsigned char crb;		char pade[0xff];
 };
 
 #define zTwoBase (0x80000000)
@@ -319,7 +319,7 @@
   unsigned int  :28, year2:4;	/* lower digit */
   unsigned int  :28, year1:4;	/* upper digit */
   unsigned int  :28, cntrl1:4;	/* control-byte 1 */
-  unsigned int  :28, cntrl2:4;	/* control-byte 2 */  
+  unsigned int  :28, cntrl2:4;	/* control-byte 2 */
   unsigned int  :28, cntrl3:4;	/* control-byte 3 */
 };
 #define TOD3000_CNTRL1_HOLD	0
@@ -341,7 +341,7 @@
   unsigned int  :28, year1:4;	/* upper digit */
   unsigned int  :28, weekday:4;
   unsigned int  :28, cntrl1:4;	/* control-byte 1 */
-  unsigned int  :28, cntrl2:4;	/* control-byte 2 */  
+  unsigned int  :28, cntrl2:4;	/* control-byte 2 */
   unsigned int  :28, cntrl3:4;	/* control-byte 3 */
 };
 
diff -Nru a/include/asm-m68k/apollodma.h b/include/asm-m68k/apollodma.h
--- a/include/asm-m68k/apollodma.h	Sun May 16 01:18:37 2004
+++ b/include/asm-m68k/apollodma.h	Sun May 16 01:18:37 2004
@@ -32,7 +32,7 @@
  *  - page registers for 5-7 don't use data bit 0, represent 128K pages
  *  - page registers for 0-3 use bit 0, represent 64K pages
  *
- * DMA transfers are limited to the lower 16MB of _physical_ memory.  
+ * DMA transfers are limited to the lower 16MB of _physical_ memory.
  * Note that addresses loaded into registers must be _physical_ addresses,
  * not logical addresses (which may differ if paging is active).
  *
@@ -42,7 +42,7 @@
  *    |  ...  |   |  ... |   |  ... |
  *    |  ...  |   |  ... |   |  ... |
  *    |  ...  |   |  ... |   |  ... |
- *   P7  ...  P0  A7 ... A0  A7 ... A0   
+ *   P7  ...  P0  A7 ... A0  A7 ... A0
  * |    Page    | Addr MSB | Addr LSB |   (DMA registers)
  *
  *  Address mapping for channels 5-7:
@@ -51,7 +51,7 @@
  *    |  ...  |   \   \   ... \  \  \  ... \  \
  *    |  ...  |    \   \   ... \  \  \  ... \  (not used)
  *    |  ...  |     \   \   ... \  \  \  ... \
- *   P7  ...  P1 (0) A7 A6  ... A0 A7 A6 ... A0   
+ *   P7  ...  P1 (0) A7 A6  ... A0 A7 A6 ... A0
  * |      Page      |  Addr MSB   |  Addr LSB  |   (DMA registers)
  *
  * Again, channels 5-7 transfer _physical_ words (16 bits), so addresses
@@ -60,7 +60,7 @@
  *
  * Transfer count (_not # bytes_) is limited to 64K, represented as actual
  * count - 1 : 64K => 0xFFFF, 1 => 0x0000.  Thus, count is always 1 or more,
- * and up to 128K bytes may be transferred on channels 5-7 in one operation. 
+ * and up to 128K bytes may be transferred on channels 5-7 in one operation.
  *
  */
 
@@ -232,7 +232,7 @@
 
 	count = 1 + dma_inb(io_port);
 	count += dma_inb(io_port) << 8;
-	
+
 	return (dmanr<=3)? count : (count<<1);
 }
 
diff -Nru a/include/asm-m68k/apollohw.h b/include/asm-m68k/apollohw.h
--- a/include/asm-m68k/apollohw.h	Sun May 16 01:18:35 2004
+++ b/include/asm-m68k/apollohw.h	Sun May 16 01:18:35 2004
@@ -4,7 +4,7 @@
 #define _ASMm68k_APOLLOHW_H_
 
 /*
-   apollo models 
+   apollo models
 */
 
 extern u_long apollo_model;
@@ -16,8 +16,8 @@
 #define APOLLO_DN4000 (4)
 #define APOLLO_DN4500 (5)
 
-/* 
-   see scn2681 data sheet for more info. 
+/*
+   see scn2681 data sheet for more info.
    member names are read_write.
 */
 
@@ -96,7 +96,7 @@
 #define cpuctrl (*(volatile unsigned int *)(IO_BASE + cpuctrl_physaddr))
 #define pica (IO_BASE + pica_physaddr)
 #define picb (IO_BASE + picb_physaddr)
-#define timer (IO_BASE + timer_physaddr)	
+#define timer (IO_BASE + timer_physaddr)
 #define addr_xlat_map ((unsigned short *)(IO_BASE + 0x17000))
 
 #define isaIO2mem(x) (((((x) & 0x3f8)  << 7) | (((x) & 0xfc00) >> 6) | ((x) & 0x7)) + 0x40000 + IO_BASE)
diff -Nru a/include/asm-m68k/atafdreg.h b/include/asm-m68k/atafdreg.h
--- a/include/asm-m68k/atafdreg.h	Sun May 16 01:18:36 2004
+++ b/include/asm-m68k/atafdreg.h	Sun May 16 01:18:36 2004
@@ -65,7 +65,7 @@
 
 /* PSG Port A Bit Nr 0 .. Side Sel .. 0 -> Side 1  1 -> Side 2 */
 #define DSKSIDE     (0x01)
-        
+
 #define DSKDRVNONE  (0x06)
 #define DSKDRV0     (0x02)
 #define DSKDRV1     (0x04)
diff -Nru a/include/asm-m68k/atari_SCCserial.h b/include/asm-m68k/atari_SCCserial.h
--- a/include/asm-m68k/atari_SCCserial.h	Sun May 16 01:18:33 2004
+++ b/include/asm-m68k/atari_SCCserial.h	Sun May 16 01:18:33 2004
@@ -20,7 +20,7 @@
 /* baud_bases for the common clocks in the Atari. These are the real
  * frequencies divided by 16.
  */
-   
+
 #define SCC_BAUD_BASE_TIMC	19200	/* 0.3072 MHz from TT-MFP, Timer C */
 #define SCC_BAUD_BASE_BCLK	153600	/* 2.4576 MHz */
 #define SCC_BAUD_BASE_PCLK4	229500	/* 3.6720 MHz */
diff -Nru a/include/asm-m68k/atari_acsi.h b/include/asm-m68k/atari_acsi.h
--- a/include/asm-m68k/atari_acsi.h	Sun May 16 01:18:35 2004
+++ b/include/asm-m68k/atari_acsi.h	Sun May 16 01:18:35 2004
@@ -27,7 +27,7 @@
 
 #define DMA_LONG_WRITE(data,mode)							\
     do {													\
-		*((unsigned long *)&dma_wd.fdc_acces_seccount) = 	\
+		*((unsigned long *)&dma_wd.fdc_acces_seccount) =	\
 			((data)<<16) | (mode);							\
 	} while(0)
 
diff -Nru a/include/asm-m68k/atarihw.h b/include/asm-m68k/atarihw.h
--- a/include/asm-m68k/atarihw.h	Sun May 16 01:18:33 2004
+++ b/include/asm-m68k/atarihw.h	Sun May 16 01:18:33 2004
@@ -53,7 +53,7 @@
 #define ATARI_SWITCH_OVSC_SND6	(ATARI_SWITCH_SND6 << ATARI_SWITCH_OVSC_SHIFT)
 #define ATARI_SWITCH_OVSC_SND7	(ATARI_SWITCH_SND7 << ATARI_SWITCH_OVSC_SHIFT)
 #define ATARI_SWITCH_OVSC_MASK	0xffff0000
-	
+
 /*
  * Define several Hardware-Chips for indication so that for the ATARI we do
  * no longer decide whether it is a Falcon or other machine . It's just
@@ -151,8 +151,8 @@
 }
 
 
-/* 
-** Shifter  
+/*
+** Shifter
  */
 #define ST_LOW  0
 #define ST_MID  1
@@ -161,22 +161,22 @@
 #define TT_MID  4
 #define TT_HIGH 6
 
-#define SHF_BAS (0xffff8200)    
-struct SHIFTER 
+#define SHF_BAS (0xffff8200)
+struct SHIFTER
  {
- 	u_char pad1;
+	u_char pad1;
 	u_char bas_hi;
 	u_char pad2;
 	u_char bas_md;
 	u_char pad3;
 	u_char volatile vcounthi;
- 	u_char pad4;
- 	u_char volatile vcountmid;
- 	u_char pad5;
- 	u_char volatile vcountlow;
- 	u_char volatile syncmode;
- 	u_char pad6;
- 	u_char pad7; 
+	u_char pad4;
+	u_char volatile vcountmid;
+	u_char pad5;
+	u_char volatile vcountlow;
+	u_char volatile syncmode;
+	u_char pad6;
+	u_char pad7;
 	u_char bas_lo;
  };
 # define shifter ((*(volatile struct SHIFTER *)SHF_BAS))
@@ -186,7 +186,7 @@
  {
   u_short off_next;
   u_short scn_width;
- };                             
+ };
 # define shifter_f030 ((*(volatile struct SHIFTER_F030 *)SHF_FBAS))
 
 
@@ -278,9 +278,9 @@
 
 /*
 ** DMA/WD1772 Disk Controller
- */                          
- 
-#define FWD_BAS (0xffff8604)  
+ */
+
+#define FWD_BAS (0xffff8604)
 struct DMA_WD
  {
   u_short fdc_acces_seccount;
@@ -364,9 +364,9 @@
 #define	tt_scsi_regp	((volatile char *)TT_5380_BAS)
 
 
-/* 
+/*
 ** Falcon DMA Sound Subsystem
- */     
+ */
 
 #define MATRIX_BASE (0xffff8930)
 struct MATRIX
@@ -419,8 +419,8 @@
   u_short src_x_inc;
   u_short src_y_inc;
   u_long src_address;
-  u_short endmask1;  
-  u_short endmask2;  
+  u_short endmask1;
+  u_short endmask2;
   u_short endmask3;
   u_short dst_x_inc;
   u_short dst_y_inc;
@@ -430,7 +430,7 @@
   u_short hlf_op_reg;
   u_short log_op_reg;
   u_short lin_nm_reg;
-  u_short skew_reg;  
+  u_short skew_reg;
  };
 # define blitter ((*(volatile struct BLITTER *)BLT_BAS))
 
@@ -438,7 +438,7 @@
 /*
 ** SCC Z8530
  */
- 
+
 #define SCC_BAS (0xffff8c81)
 struct SCC
  {
@@ -462,7 +462,7 @@
 #define	tt_scc_dma	((*(volatile struct TT_DMA *)TT_SCC_DMA_BAS))
 
 /*
-** VIDEL Palette Register 
+** VIDEL Palette Register
  */
 
 #define FPL_BAS (0xffff9800)
@@ -487,7 +487,7 @@
 #define DSP56K_ICR_HM0	0x20
 #define DSP56K_ICR_HM1	0x40
 #define DSP56K_ICR_INIT	0x80
-  
+
   u_char cvr;
 #define DSP56K_CVR_HV_MASK 0x1f
 #define DSP56K_CVR_HC	0x80
@@ -500,7 +500,7 @@
 #define DSP56K_ISR_HF3	0x10
 #define DSP56K_ISR_DMA	0x40
 #define DSP56K_ISR_HREQ	0x80
-  
+
   u_char ivr;
 
   union {
@@ -510,11 +510,11 @@
   } data;
 };
 #define dsp56k_host_interface ((*(volatile struct DSP56K_HOST_INTERFACE *)DSP56K_HOST_INTERFACE_BASE))
- 
+
 /*
 ** MFP 68901
  */
- 
+
 #define MFP_BAS (0xfffffa01)
 struct MFP
  {
@@ -649,7 +649,7 @@
 #define ACIA_IRQ  (1<<7)	/* Interrupt Request */
 
 #define ACIA_BAS (0xfffffc00)
-struct ACIA 
+struct ACIA
  {
   u_char key_ctrl;
   u_char char_dummy1;
@@ -686,17 +686,17 @@
 	u_char	pad11[12];
 	u_char	track_select;	/* Falcon */
 	u_char	mode;
- 	u_char	pad12[14];
- 	/* Falcon only: */
- 	u_short	cbar_src;
- 	u_short cbar_dst;
- 	u_char	ext_div;
- 	u_char	int_div;
- 	u_char	rec_track_select;
- 	u_char	dac_src;
- 	u_char	adc_src;
- 	u_char	input_gain;
- 	u_short	output_atten;
+	u_char	pad12[14];
+	/* Falcon only: */
+	u_short	cbar_src;
+	u_short cbar_dst;
+	u_char	ext_div;
+	u_char	int_div;
+	u_char	rec_track_select;
+	u_char	dac_src;
+	u_char	adc_src;
+	u_char	input_gain;
+	u_short	output_atten;
 };
 # define tt_dmasnd ((*(volatile struct TT_DMASND *)TT_DMASND_BAS))
 
@@ -721,7 +721,7 @@
 #define	DMASND_MODE_12KHZ	  0x01
 #define	DMASND_MODE_25KHZ	  0x02
 #define	DMASND_MODE_50KHZ	  0x03
- 
+
 
 #define DMASNDSetBase(bufstart)						\
     do {								\
diff -Nru a/include/asm-m68k/atariints.h b/include/asm-m68k/atariints.h
--- a/include/asm-m68k/atariints.h	Sun May 16 01:18:36 2004
+++ b/include/asm-m68k/atariints.h	Sun May 16 01:18:36 2004
@@ -59,8 +59,8 @@
 /* ST-MFP interrupts */
 #define IRQ_MFP_BUSY      (8)
 #define IRQ_MFP_DCD       (9)
-#define IRQ_MFP_CTS  	  (10)
-#define IRQ_MFP_GPU 	  (11)
+#define IRQ_MFP_CTS	  (10)
+#define IRQ_MFP_GPU	  (11)
 #define IRQ_MFP_TIMD      (12)
 #define IRQ_MFP_TIMC	  (13)
 #define IRQ_MFP_ACIA	  (14)
@@ -81,7 +81,7 @@
 #define IRQ_TT_MFP_IO0       (24)
 #define IRQ_TT_MFP_IO1       (25)
 #define IRQ_TT_MFP_SCC	     (26)
-#define IRQ_TT_MFP_RI 	     (27)
+#define IRQ_TT_MFP_RI	     (27)
 #define IRQ_TT_MFP_TIMD      (28)
 #define IRQ_TT_MFP_TIMC	     (29)
 #define IRQ_TT_MFP_DRVRDY    (30)
@@ -122,7 +122,7 @@
 static inline int get_mfp_bit( unsigned irq, int type )
 
 {	unsigned char	mask, *reg;
-	
+
 	mask = 1 << (irq & 7);
 	reg = (unsigned char *)&mfp.int_en_a + type*4 +
 		  ((irq & 8) >> 2) + (((irq-8) & 16) << 3);
@@ -132,7 +132,7 @@
 static inline void set_mfp_bit( unsigned irq, int type )
 
 {	unsigned char	mask, *reg;
-	
+
 	mask = 1 << (irq & 7);
 	reg = (unsigned char *)&mfp.int_en_a + type*4 +
 		  ((irq & 8) >> 2) + (((irq-8) & 16) << 3);
@@ -143,7 +143,7 @@
 static inline void clear_mfp_bit( unsigned irq, int type )
 
 {	unsigned char	mask, *reg;
-	
+
 	mask = ~(1 << (irq & 7));
 	reg = (unsigned char *)&mfp.int_en_a + type*4 +
 		  ((irq & 8) >> 2) + (((irq-8) & 16) << 3);
diff -Nru a/include/asm-m68k/bitops.h b/include/asm-m68k/bitops.h
--- a/include/asm-m68k/bitops.h	Sun May 16 01:18:37 2004
+++ b/include/asm-m68k/bitops.h	Sun May 16 01:18:37 2004
@@ -51,7 +51,7 @@
    __constant_set_bit(nr, vaddr) : \
    __generic_set_bit(nr, vaddr))
 
-#define __set_bit(nr,vaddr) set_bit(nr,vaddr) 
+#define __set_bit(nr,vaddr) set_bit(nr,vaddr)
 
 static inline void __constant_set_bit(int nr, volatile unsigned long *vaddr)
 {
diff -Nru a/include/asm-m68k/bootinfo.h b/include/asm-m68k/bootinfo.h
--- a/include/asm-m68k/bootinfo.h	Sun May 16 01:18:35 2004
+++ b/include/asm-m68k/bootinfo.h	Sun May 16 01:18:35 2004
@@ -141,11 +141,11 @@
 #define BI_MAC_GMTBIAS		0x8008	/* Mac GMT timezone offset */
 #define BI_MAC_MEMSIZE		0x8009	/* Mac RAM size (sanity check) */
 #define BI_MAC_CPUID		0x800a	/* Mac CPU type (sanity check) */
-#define BI_MAC_ROMBASE		0x800b	/* Mac system ROM base address */ 
+#define BI_MAC_ROMBASE		0x800b	/* Mac system ROM base address */
 
     /*
-     *  Macintosh hardware profile data - unused, see macintosh.h for 
-     *  resonable type values 
+     *  Macintosh hardware profile data - unused, see macintosh.h for
+     *  resonable type values
      */
 
 #define BI_MAC_VIA1BASE		0x8010	/* Mac VIA1 base address (always present) */
@@ -176,7 +176,7 @@
 
 #ifndef __ASSEMBLY__
 
-struct mac_booter_data 
+struct mac_booter_data
 {
 	unsigned long videoaddr;
 	unsigned long videorow;
@@ -202,7 +202,7 @@
 	unsigned long timedbra;
 };
 
-extern struct mac_booter_data 
+extern struct mac_booter_data
 	mac_bi_data;
 
 #endif
diff -Nru a/include/asm-m68k/cacheflush.h b/include/asm-m68k/cacheflush.h
--- a/include/asm-m68k/cacheflush.h	Sun May 16 01:18:35 2004
+++ b/include/asm-m68k/cacheflush.h	Sun May 16 01:18:35 2004
@@ -45,7 +45,7 @@
 
 /* cache code */
 #define FLUSH_I_AND_D	(0x00000808)
-#define FLUSH_I 	(0x00000008)
+#define FLUSH_I		(0x00000008)
 
 /* This is needed whenever the virtual mapping of the current
    process changes.  */
@@ -95,14 +95,14 @@
 				     unsigned long start,
 				     unsigned long end)
 {
-	if (vma->vm_mm == current->mm) 
+	if (vma->vm_mm == current->mm)
 	        __flush_cache_030();
 }
 
 static inline void flush_cache_page(struct vm_area_struct *vma,
 				    unsigned long vmaddr)
 {
- 	if (vma->vm_mm == current->mm)
+	if (vma->vm_mm == current->mm)
 	        __flush_cache_030();
 }
 
diff -Nru a/include/asm-m68k/checksum.h b/include/asm-m68k/checksum.h
--- a/include/asm-m68k/checksum.h	Sun May 16 01:18:35 2004
+++ b/include/asm-m68k/checksum.h	Sun May 16 01:18:35 2004
@@ -115,7 +115,7 @@
 #define _HAVE_ARCH_IPV6_CSUM
 static __inline__ unsigned short int
 csum_ipv6_magic(struct in6_addr *saddr, struct in6_addr *daddr,
-		__u32 len, unsigned short proto, unsigned int sum) 
+		__u32 len, unsigned short proto, unsigned int sum)
 {
 	register unsigned long tmp;
 	__asm__("addl %2@,%0\n\t"
diff -Nru a/include/asm-m68k/delay.h b/include/asm-m68k/delay.h
--- a/include/asm-m68k/delay.h	Sun May 16 01:18:36 2004
+++ b/include/asm-m68k/delay.h	Sun May 16 01:18:36 2004
@@ -22,7 +22,7 @@
  * lookup table, really, as the multiplications take much too long with
  * short delays.  This is a "reasonable" implementation, though (and the
  * first constant multiplications gets optimized away if the delay is
- * a constant)  
+ * a constant)
  */
 static inline void __const_udelay(unsigned long xloops)
 {
diff -Nru a/include/asm-m68k/dvma.h b/include/asm-m68k/dvma.h
--- a/include/asm-m68k/dvma.h	Sun May 16 01:18:35 2004
+++ b/include/asm-m68k/dvma.h	Sun May 16 01:18:35 2004
@@ -2,7 +2,7 @@
  * include/asm-m68k/dma.h
  *
  * Copyright 1995 (C) David S. Miller (davem@caip.rutgers.edu)
- * 
+ *
  * Hacked to fit Sun3x needs by Thomas Bogendoerfer
  */
 
@@ -16,15 +16,15 @@
 #define DVMA_PAGE_MASK	(~(DVMA_PAGE_SIZE-1))
 #define DVMA_PAGE_ALIGN(addr)	(((addr)+DVMA_PAGE_SIZE-1)&DVMA_PAGE_MASK)
 
-extern void dvma_init(void);	
-extern int dvma_map_iommu(unsigned long kaddr, unsigned long baddr, 
+extern void dvma_init(void);
+extern int dvma_map_iommu(unsigned long kaddr, unsigned long baddr,
 			  int len);
 
 #define dvma_malloc(x) dvma_malloc_align(x, 0)
 #define dvma_map(x, y) dvma_map_align(x, y, 0)
 #define dvma_map_vme(x, y) (dvma_map(x, y) & 0xfffff)
 #define dvma_map_align_vme(x, y, z) (dvma_map_align (x, y, z) & 0xfffff)
-extern unsigned long dvma_map_align(unsigned long kaddr, int len, 
+extern unsigned long dvma_map_align(unsigned long kaddr, int len,
 			    int align);
 extern void *dvma_malloc_align(unsigned long len, unsigned long align);
 
@@ -44,7 +44,7 @@
 #define IOMMU_TOTAL_ENTRIES 128
 #define IOMMU_ENTRIES 120
 
-/* empirical kludge -- dvma regions only seem to work right on 0x10000 
+/* empirical kludge -- dvma regions only seem to work right on 0x10000
    byte boundaries */
 #define DVMA_REGION_SIZE 0x10000
 #define DVMA_ALIGN(addr) (((addr)+DVMA_REGION_SIZE-1) & \
@@ -84,7 +84,7 @@
 
 
 
-/* everything below this line is specific to dma used for the onboard 
+/* everything below this line is specific to dma used for the onboard
    ESP scsi on sun3x */
 
 /* Structure to describe the current status of DMA registers on the Sparc */
diff -Nru a/include/asm-m68k/entry.h b/include/asm-m68k/entry.h
--- a/include/asm-m68k/entry.h	Sun May 16 01:18:36 2004
+++ b/include/asm-m68k/entry.h	Sun May 16 01:18:36 2004
@@ -40,7 +40,7 @@
 	/* portable version */
 #define ALLOWINT	(~0x700)
 #define	MAX_NOINT_IPL	0
-#endif /* machine compilation types */ 
+#endif /* machine compilation types */
 
 #ifdef __ASSEMBLY__
 
diff -Nru a/include/asm-m68k/floppy.h b/include/asm-m68k/floppy.h
--- a/include/asm-m68k/floppy.h	Sun May 16 01:18:35 2004
+++ b/include/asm-m68k/floppy.h	Sun May 16 01:18:35 2004
@@ -122,9 +122,9 @@
 {
   use_virtual_dma =1;
   can_use_virtual_dma = 1;
- 
-  
-  if (MACH_IS_Q40)  
+
+
+  if (MACH_IS_Q40)
 	  return 0x3f0;
   else if(MACH_IS_SUN3X)
 	  return sun3xflop_init();
@@ -192,7 +192,7 @@
 #undef TRACE_FLPY_INT
 #define NO_FLOPPY_ASSEMBLER
 
-#ifdef TRACE_FLPY_INT 
+#ifdef TRACE_FLPY_INT
 	static int calls=0;
 	static int bytes=0;
 	static int dma_wait=0;
@@ -214,10 +214,10 @@
 		/* serve 1st byte fast: */
 
 		st=1;
-		for(lcount=virtual_dma_count, lptr=virtual_dma_addr; 
+		for(lcount=virtual_dma_count, lptr=virtual_dma_addr;
 		    lcount; lcount--, lptr++) {
 			st=inb(virtual_dma_port+4) & 0xa0 ;
-			if(st != 0xa0) 
+			if(st != 0xa0)
 				break;
 			if(virtual_dma_mode)
 				outb_p(*lptr, virtual_dma_port+5);
@@ -239,7 +239,7 @@
 		virtual_dma_residue += virtual_dma_count;
 		virtual_dma_count=0;
 #ifdef TRACE_FLPY_INT
-		printk("count=%x, residue=%x calls=%d bytes=%d dma_wait=%d\n", 
+		printk("count=%x, residue=%x calls=%d bytes=%d dma_wait=%d\n",
 		       virtual_dma_count, virtual_dma_residue, calls, bytes,
 		       dma_wait);
 		calls = 0;
diff -Nru a/include/asm-m68k/hwtest.h b/include/asm-m68k/hwtest.h
--- a/include/asm-m68k/hwtest.h	Sun May 16 01:18:36 2004
+++ b/include/asm-m68k/hwtest.h	Sun May 16 01:18:36 2004
@@ -2,12 +2,12 @@
  * see arch/m68k/mm/hwtest.c.
  *  -- PMM <pmaydell@chiark.greenend.org.uk> 05/1998
  *
- * Removed __init from decls.  We might want them in modules, and 
+ * Removed __init from decls.  We might want them in modules, and
  * the code is tiny anyway.  16/5/98 pb
  */
 
 #ifndef __ASM_HWTEST_H
-#define __ASM_HWTEST_H 
+#define __ASM_HWTEST_H
 
 extern int hwreg_present(volatile void *regp);
 extern int hwreg_write(volatile void *regp, unsigned short val);
diff -Nru a/include/asm-m68k/ide.h b/include/asm-m68k/ide.h
--- a/include/asm-m68k/ide.h	Sun May 16 01:18:33 2004
+++ b/include/asm-m68k/ide.h	Sun May 16 01:18:33 2004
@@ -3,7 +3,7 @@
  *
  *  Copyright (C) 1994-1996  Linus Torvalds & authors
  */
- 
+
 /* Copyright(c) 1996 Kars de Jong */
 /* Based on the ide driver from 1.2.13pl8 */
 
diff -Nru a/include/asm-m68k/intersil.h b/include/asm-m68k/intersil.h
--- a/include/asm-m68k/intersil.h	Sun May 16 01:18:35 2004
+++ b/include/asm-m68k/intersil.h	Sun May 16 01:18:35 2004
@@ -17,7 +17,7 @@
 /* bit 4 */
 #define INTERSIL_INT_ENABLE     0x10
 #define INTERSIL_INT_DISABLE    0x00
-                
+
 /* bit 5 */
 #define INTERSIL_MODE_NORMAL     0x00
 #define INTERSIL_MODE_TEST       0x20
diff -Nru a/include/asm-m68k/io.h b/include/asm-m68k/io.h
--- a/include/asm-m68k/io.h	Sun May 16 01:18:35 2004
+++ b/include/asm-m68k/io.h	Sun May 16 01:18:35 2004
@@ -1,5 +1,5 @@
 /*
- * linux/include/asm-m68k/io.h 
+ * linux/include/asm-m68k/io.h
  *
  * 4/1/00 RZ: - rewritten to avoid clashes between ISA/PCI and other
  *              IO access
@@ -62,7 +62,7 @@
 
 #ifndef MULTI_ISA
 #define MULTI_ISA 0
-#else 
+#else
 #undef MULTI_ISA
 #define MULTI_ISA 1
 #endif
@@ -76,7 +76,7 @@
 
 #ifndef MULTI_ISA
 #define MULTI_ISA 0
-#else 
+#else
 #undef MULTI_ISA
 #define MULTI_ISA 1
 #endif
@@ -101,7 +101,7 @@
 #if defined(CONFIG_AMIGA_PCMCIA) && !defined(MULTI_ISA)
 #define ISA_TYPE AG_ISA
 #define ISA_SEX  1
-#endif 
+#endif
 #if defined(CONFIG_GG2) && !defined(MULTI_ISA)
 #define ISA_TYPE GG2_ISA
 #define ISA_SEX  0
@@ -229,7 +229,7 @@
 #endif  /* CONFIG_ISA */
 
 
-#if defined(CONFIG_ISA) && !defined(CONFIG_PCI) 
+#if defined(CONFIG_ISA) && !defined(CONFIG_PCI)
 #define inb     isa_inb
 #define inb_p   isa_inb_p
 #define outb    isa_outb
@@ -273,8 +273,8 @@
 
 #else
 /*
- * kernel with both ISA and PCI compiled in, those have 
- * conflicting defs for in/out. Simply consider port < 1024 
+ * kernel with both ISA and PCI compiled in, those have
+ * conflicting defs for in/out. Simply consider port < 1024
  * ISA and everything else PCI. read,write not defined
  * in this case
  */
diff -Nru a/include/asm-m68k/ipc.h b/include/asm-m68k/ipc.h
--- a/include/asm-m68k/ipc.h	Sun May 16 01:18:35 2004
+++ b/include/asm-m68k/ipc.h	Sun May 16 01:18:35 2004
@@ -1,7 +1,7 @@
 #ifndef __m68k_IPC_H__
 #define __m68k_IPC_H__
 
-/* 
+/*
  * These are used to wrap system calls on m68k.
  *
  * See arch/m68k/kernel/sys_m68k.c for ugly details..
diff -Nru a/include/asm-m68k/irq.h b/include/asm-m68k/irq.h
--- a/include/asm-m68k/irq.h	Sun May 16 01:18:35 2004
+++ b/include/asm-m68k/irq.h	Sun May 16 01:18:35 2004
@@ -64,7 +64,7 @@
  * All interrupt handling is actually machine specific so it is better
  * to use function pointers, as used by the Sparc port, and select the
  * interrupt handling functions when initializing the kernel. This way
- * we save some unnecessary overhead at run-time. 
+ * we save some unnecessary overhead at run-time.
  *                                                      01/11/97 - Jes
  */
 
diff -Nru a/include/asm-m68k/mac_asc.h b/include/asm-m68k/mac_asc.h
--- a/include/asm-m68k/mac_asc.h	Sun May 16 01:18:34 2004
+++ b/include/asm-m68k/mac_asc.h	Sun May 16 01:18:34 2004
@@ -1,14 +1,14 @@
 /*
- *	Apple Sound Chip 
+ *	Apple Sound Chip
  */
- 
+
 #ifndef __ASM_MAC_ASC_H
 #define __ASM_MAC_ASC_H
 
 /*
  *	ASC offsets and controls
  */
- 
+
 #define ASC_BUF_BASE	0x00	/* RAM buffer offset */
 #define ASC_BUF_SIZE	0x800
 
@@ -23,5 +23,5 @@
 #define ASC_VOLUME	0x806
 #define ASC_CHAN	0x807	/* ??? */
 
- 
+
 #endif
diff -Nru a/include/asm-m68k/mac_oss.h b/include/asm-m68k/mac_oss.h
--- a/include/asm-m68k/mac_oss.h	Sun May 16 01:18:35 2004
+++ b/include/asm-m68k/mac_oss.h	Sun May 16 01:18:35 2004
@@ -3,7 +3,7 @@
  *
  *	This is used in place of VIA2 on the IIfx.
  */
- 
+
 #define OSS_BASE	(0x50f1a000)
 
 /*
diff -Nru a/include/asm-m68k/mac_psc.h b/include/asm-m68k/mac_psc.h
--- a/include/asm-m68k/mac_psc.h	Sun May 16 01:18:34 2004
+++ b/include/asm-m68k/mac_psc.h	Sun May 16 01:18:34 2004
@@ -23,7 +23,7 @@
  * continuously, although how you keep the buffer filled in this scenario is
  * not understood as there seems to be only one input and one output buffer
  * pointer.
- * 
+ *
  * Much of this was extrapolated from what was known about the Ethernet
  * registers and subsequently confirmed using MacsBug (ie by pinging the
  * machine with easy-to-find patterns and looking for them in the DMA
@@ -43,7 +43,7 @@
  * To access a particular set of registers, add 0xn0 to the base
  * where n = 3,4,5 or 6.
  */
- 
+
 #define pIFRbase	0x100
 #define pIERbase	0x104
 
@@ -76,9 +76,9 @@
 #define PSC_SET0	0x00
 #define PSC_SET1	0x10
 
-#define PSC_SCSI_ADDR	0x1000 	/* confirmed */
-#define PSC_SCSI_LEN	0x1004 	/* confirmed */
-#define PSC_SCSI_CMD	0x1008 	/* confirmed */
+#define PSC_SCSI_ADDR	0x1000	/* confirmed */
+#define PSC_SCSI_LEN	0x1004	/* confirmed */
+#define PSC_SCSI_CMD	0x1008	/* confirmed */
 #define PSC_ENETRD_ADDR 0x1020	/* confirmed */
 #define PSC_ENETRD_LEN  0x1024	/* confirmed */
 #define PSC_ENETRD_CMD  0x1028	/* confirmed */
@@ -214,7 +214,7 @@
 /*
  *	Access functions
  */
- 
+
 static inline void psc_write_byte(int offset, __u8 data)
 {
 	*((volatile __u8 *)(psc + offset)) = data;
diff -Nru a/include/asm-m68k/mac_via.h b/include/asm-m68k/mac_via.h
--- a/include/asm-m68k/mac_via.h	Sun May 16 01:18:35 2004
+++ b/include/asm-m68k/mac_via.h	Sun May 16 01:18:35 2004
@@ -5,7 +5,7 @@
  *	via them as are assorted bits and bobs - eg rtc, adb. The picture
  *	is a bit incomplete as the Mac documentation doesn't cover this well
  */
- 
+
 #ifndef _ASM_MAC_VIA_H_
 #define _ASM_MAC_VIA_H_
 
@@ -21,7 +21,7 @@
 #define VIA1_BASE	(0x50F00000)
 #define VIA2_BASE	(0x50F02000)
 #define  RBV_BASE	(0x50F26000)
- 
+
 /*
  *	Not all of these are true post MacII I think.
  *      CSA: probably the ones CHRP marks as 'unused' change purposes
@@ -34,9 +34,9 @@
  * VIA1A_vSccWrReq not available and that VIA1A_vSync has moved to an IOP.
  * Also, "All of the functionality of VIA2 has been moved to other chips".
  */
- 
+
 #define VIA1A_vSccWrReq	0x80	/* SCC write. (input)
-				 * [CHRP] SCC WREQ: Reflects the state of the 
+				 * [CHRP] SCC WREQ: Reflects the state of the
 				 * Wait/Request pins from the SCC.
 				 * [Macintosh Family Hardware]
 				 * as CHRP on SE/30,II,IIx,IIcx,IIci.
@@ -93,7 +93,7 @@
 #define VIA1A_CPUID1	0x04	/* CPU id bit 0 on RBV, others */
 #define VIA1A_CPUID2	0x10	/* CPU id bit 0 on RBV, others */
 #define VIA1A_CPUID3	0x40	/* CPU id bit 0 on RBV, others */
- 	
+
 /* Info on VIA1B is from Macintosh Family Hardware & MkLinux.
  * CHRP offers no info. */
 #define VIA1B_vSound	0x80	/* Sound enable (for compatibility with
@@ -123,7 +123,7 @@
 #define	EVRB_SFTWRID	0x80	/* Software Interrupt ReQuest */
 
 /*
- *	VIA2 A register is the interrupt lines raised off the nubus 
+ *	VIA2 A register is the interrupt lines raised off the nubus
  *	slots.
  *      The below info is from 'Macintosh Family Hardware.'
  *      MkLinux calls the 'IIci internal video IRQ' below the 'RBV slot 0 irq.'
@@ -131,7 +131,7 @@
  *      defines the 'Video IRQ' as 0x40 for the 'EVR' VIA work-alike.
  *      Perhaps OSS uses vRAM1 and vRAM2 for ADB.
  */
- 
+
 #define VIA2A_vRAM1	0x80	/* RAM size bit 1 (IIci: reserved) */
 #define VIA2A_vRAM0	0x40	/* RAM size bit 0 (IIci: internal video IRQ) */
 #define VIA2A_vIRQE	0x20	/* IRQ from slot $E */
@@ -148,11 +148,11 @@
  *  1    0    4 Mbit
  *  1    1   16 Mbit
  */
- 
+
 /*
  *	Register B has the fun stuff in it
  */
- 
+
 #define VIA2B_vVBL	0x80	/* VBL output to VIA1 (60.15Hz) driven by
 				 * timer T1.
 				 * on IIci, parity test: 0=test mode.
@@ -184,11 +184,11 @@
  * right bit in the VIA chip (6522 Versatile Interface Adapter).
  * [CSA: don't know which one this is, but it's one of 'em!]
  */
- 
+
 /*
  *	6522 registers - see databook.
  * CSA: Assignments for VIA1 confirmed from CHRP spec.
- */ 
+ */
 
 /* partial address decode.  0xYYXX : XX part for RBV, YY part for VIA */
 /* Note: 15 VIA regs, 8 RBV regs */
@@ -217,7 +217,7 @@
  * decode the bottom eight -- so vBufB | rBufB will always get you BufB */
 /* CSA: in fact, only bits 0,1, and 4 seem to be decoded.
  * BUT note the values for rIER and rIFR, where the top 8 bits *do* seem
- * to matter.  In fact *all* of the top 8 bits seem to matter; 
+ * to matter.  In fact *all* of the top 8 bits seem to matter;
  * setting rIER=0x1813 and rIFR=0x1803 doesn't work, either.
  * Perhaps some sort of 'compatibility mode' is built-in? [21-May-1999]
  */
diff -Nru a/include/asm-m68k/machw.h b/include/asm-m68k/machw.h
--- a/include/asm-m68k/machw.h	Sun May 16 01:18:36 2004
+++ b/include/asm-m68k/machw.h	Sun May 16 01:18:36 2004
@@ -51,7 +51,7 @@
 /*
 ** SCC Z8530
 */
- 
+
 #define MAC_SCC_BAS (0x50F04000)
 struct MAC_SCC
  {
diff -Nru a/include/asm-m68k/macintosh.h b/include/asm-m68k/macintosh.h
--- a/include/asm-m68k/macintosh.h	Sun May 16 01:18:33 2004
+++ b/include/asm-m68k/macintosh.h	Sun May 16 01:18:33 2004
@@ -7,11 +7,11 @@
 /*
  *	Apple Macintoshisms
  */
- 
+
 extern void mac_reset(void);
 extern void mac_poweroff(void);
 extern void mac_init_IRQ(void);
-extern int mac_request_irq (unsigned int, irqreturn_t (*)(int, void *, 
+extern int mac_request_irq (unsigned int, irqreturn_t (*)(int, void *,
 				struct pt_regs *),
 				unsigned long, const char *, void *);
 extern void mac_free_irq(unsigned int, void *);
@@ -30,7 +30,7 @@
 /*
  *	Floppy driver magic hook - probably shouldnt be here
  */
- 
+
 extern void via1_set_head(int);
 
 extern void parse_booter(char *ptr);
@@ -39,7 +39,7 @@
 /*
  *	Macintosh Table
  */
- 
+
 struct mac_model
 {
 	short ident;
@@ -81,7 +81,7 @@
 #define MAC_SCC_QUADRA		3
 #define MAC_SCC_PSC		4
 
-#define MAC_ETHER_NONE		0	
+#define MAC_ETHER_NONE		0
 #define MAC_ETHER_SONIC		1
 #define MAC_ETHER_MACE		2
 
@@ -91,7 +91,7 @@
 /*
  *	Gestalt numbers
  */
- 
+
 #define MAC_MODEL_II		6
 #define MAC_MODEL_IIX		7
 #define MAC_MODEL_IICX		8
@@ -113,7 +113,7 @@
 #define MAC_MODEL_PB180		33
 #define MAC_MODEL_PB160		34
 #define MAC_MODEL_Q800		35	/* aka: WGS80 */
-#define MAC_MODEL_Q650		36 
+#define MAC_MODEL_Q650		36
 #define MAC_MODEL_LCII		37	/* aka: P400/405/410/430 */
 #define MAC_MODEL_PB250		38
 #define MAC_MODEL_IIVI		44
@@ -148,5 +148,5 @@
 #define MAC_MODEL_PB150		115
 
 extern struct mac_model *macintosh_config;
- 
+
 #endif
diff -Nru a/include/asm-m68k/macints.h b/include/asm-m68k/macints.h
--- a/include/asm-m68k/macints.h	Sun May 16 01:18:34 2004
+++ b/include/asm-m68k/macints.h	Sun May 16 01:18:34 2004
@@ -52,7 +52,7 @@
 
 #define NUM_MAC_SOURCES		72
 
-/* 
+/*
  * clean way to separate IRQ into its source and index
  */
 
@@ -74,7 +74,7 @@
 #define IRQ_VIA1_0	  (8)		/* one second int. */
 #define IRQ_VIA1_1        (9)		/* VBlank int. */
 #define IRQ_MAC_VBL	  IRQ_VIA1_1
-#define IRQ_VIA1_2 	  (10)		/* ADB SR shifts complete */
+#define IRQ_VIA1_2	  (10)		/* ADB SR shifts complete */
 #define IRQ_MAC_ADB	  IRQ_VIA1_2
 #define IRQ_MAC_ADB_SR	  IRQ_VIA1_2
 #define IRQ_VIA1_3	  (11)		/* ADB SR CB2 ?? */
@@ -92,7 +92,7 @@
 #define IRQ_MAC_SCSIDRQ	  IRQ_VIA2_0
 #define IRQ_VIA2_1        (17)
 #define IRQ_MAC_NUBUS	  IRQ_VIA2_1
-#define IRQ_VIA2_2 	  (18)
+#define IRQ_VIA2_2	  (18)
 #define IRQ_VIA2_3	  (19)
 #define IRQ_MAC_SCSI	  IRQ_VIA2_3
 #define IRQ_VIA2_4        (20)
@@ -108,7 +108,7 @@
 #define IRQ_PSC3_3	  (27)
 
 /* Level 4 (SCC) interrupts */
-#define IRQ_SCC 	     (32)
+#define IRQ_SCC		     (32)
 #define IRQ_SCCA	     (33)
 #define IRQ_SCCB	     (34)
 #if 0 /* FIXME: are there multiple interrupt conditions on the SCC ?? */
diff -Nru a/include/asm-m68k/md.h b/include/asm-m68k/md.h
--- a/include/asm-m68k/md.h	Sun May 16 01:18:34 2004
+++ b/include/asm-m68k/md.h	Sun May 16 01:18:34 2004
@@ -1,8 +1,8 @@
 /* $Id: md.h,v 1.1 1997/12/15 15:12:04 jj Exp $
- * md.h: High speed xor_block operation for RAID4/5 
+ * md.h: High speed xor_block operation for RAID4/5
  *
  */
- 
+
 #ifndef __ASM_MD_H
 #define __ASM_MD_H
 
diff -Nru a/include/asm-m68k/mmu_context.h b/include/asm-m68k/mmu_context.h
--- a/include/asm-m68k/mmu_context.h	Sun May 16 01:18:36 2004
+++ b/include/asm-m68k/mmu_context.h	Sun May 16 01:18:36 2004
@@ -124,7 +124,7 @@
 		mm->context = get_free_context(mm);
 }
 
-/* flush context if allocated... */	
+/* flush context if allocated... */
 static inline void destroy_context(struct mm_struct *mm)
 {
 	if(mm->context != SUN3_INVALID_CONTEXT)
@@ -150,5 +150,5 @@
 	activate_context(next_mm);
 }
 
-#endif 
+#endif
 #endif
diff -Nru a/include/asm-m68k/motorola_pgtable.h b/include/asm-m68k/motorola_pgtable.h
--- a/include/asm-m68k/motorola_pgtable.h	Sun May 16 01:18:35 2004
+++ b/include/asm-m68k/motorola_pgtable.h	Sun May 16 01:18:35 2004
@@ -217,7 +217,7 @@
 	return (pmd_t *)__pgd_page(*dir) + ((address >> PMD_SHIFT) & (PTRS_PER_PMD-1));
 }
 
-/* Find an entry in the third-level page table.. */ 
+/* Find an entry in the third-level page table.. */
 static inline pte_t *pte_offset_kernel(pmd_t *pmdp, unsigned long address)
 {
 	return (pte_t *)__pmd_page(*pmdp) + ((address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1));
diff -Nru a/include/asm-m68k/msgbuf.h b/include/asm-m68k/msgbuf.h
--- a/include/asm-m68k/msgbuf.h	Sun May 16 01:18:36 2004
+++ b/include/asm-m68k/msgbuf.h	Sun May 16 01:18:36 2004
@@ -1,7 +1,7 @@
 #ifndef _M68K_MSGBUF_H
 #define _M68K_MSGBUF_H
 
-/* 
+/*
  * The msqid64_ds structure for m68k architecture.
  * Note extra padding because this structure is passed back and forth
  * between kernel and user space.
diff -Nru a/include/asm-m68k/mvme147hw.h b/include/asm-m68k/mvme147hw.h
--- a/include/asm-m68k/mvme147hw.h	Sun May 16 01:18:36 2004
+++ b/include/asm-m68k/mvme147hw.h	Sun May 16 01:18:36 2004
@@ -21,7 +21,7 @@
 
 
 struct pcc_regs {
-   volatile u_long 	dma_tadr;
+   volatile u_long	dma_tadr;
    volatile u_long	dma_dadr;
    volatile u_long	dma_bcr;
    volatile u_long	dma_hr;
diff -Nru a/include/asm-m68k/mvme16xhw.h b/include/asm-m68k/mvme16xhw.h
--- a/include/asm-m68k/mvme16xhw.h	Sun May 16 01:18:33 2004
+++ b/include/asm-m68k/mvme16xhw.h	Sun May 16 01:18:33 2004
@@ -65,7 +65,7 @@
 #define MVME_SCC_PCLK	10000000
 
 #define MVME162_IRQ_TYPE_PRIO	0
-                
+
 #define MVME167_IRQ_PRN		0x54
 #define MVME16x_IRQ_I596	0x57
 #define MVME16x_IRQ_SCSI	0x55
diff -Nru a/include/asm-m68k/openprom.h b/include/asm-m68k/openprom.h
--- a/include/asm-m68k/openprom.h	Sun May 16 01:18:35 2004
+++ b/include/asm-m68k/openprom.h	Sun May 16 01:18:35 2004
@@ -91,92 +91,92 @@
 
 #if defined(CONFIG_SUN3) || defined(CONFIG_SUN3X)
 struct linux_romvec {
-	char		*pv_initsp;		
+	char		*pv_initsp;
 	int		(*pv_startmon)(void);
 
-	int		*diagberr;		
+	int		*diagberr;
 
 	struct linux_arguments_v0 **pv_v0bootargs;
- 	unsigned	*pv_sun3mem;		
+	unsigned	*pv_sun3mem;
 
 	unsigned char	(*pv_getchar)(void);
 	int		(*pv_putchar)(int ch);
-	int		(*pv_nbgetchar)(void);	
+	int		(*pv_nbgetchar)(void);
 	int		(*pv_nbputchar)(int ch);
-	unsigned char	*pv_echo;	
+	unsigned char	*pv_echo;
 	unsigned char	*pv_insource;
 	unsigned char	*pv_outsink;
 
-	int		(*pv_getkey)(void);		
+	int		(*pv_getkey)(void);
 	int		(*pv_initgetkey)(void);
 	unsigned int	*pv_translation;
-	unsigned char	*pv_keybid;		
-	int		*pv_screen_x;		
-	int		*pv_screen_y;		
-	struct keybuf	*pv_keybuf;		
+	unsigned char	*pv_keybid;
+	int		*pv_screen_x;
+	int		*pv_screen_y;
+	struct keybuf	*pv_keybuf;
 
 	char		*pv_monid;
 
-	/* 
-	 * Frame buffer output and terminal emulation 
+	/*
+	 * Frame buffer output and terminal emulation
 	 */
 
-	int		(*pv_fbwritechar)(char);	
-	int		*pv_fbaddr;		
-	char		**pv_font;		
-	int		(*pv_fbwritestr)(char);	
+	int		(*pv_fbwritechar)(char);
+	int		*pv_fbaddr;
+	char		**pv_font;
+	int		(*pv_fbwritestr)(char);
 
 	void		(*pv_reboot)(char *bootstr);
 
-	/* 
-	 * Line input and parsing 
+	/*
+	 * Line input and parsing
 	 */
 
-	unsigned char	*pv_linebuf;		
-	unsigned char	**pv_lineptr;		
-	int		*pv_linesize;		
-	int		(*pv_getline)(void);	
-	unsigned char	(*pv_getnextchar)(void);	
-	unsigned char	(*pv_peeknextchar)(void);	
-	int		*pv_fbthere;		
-	int		(*pv_getnum)(void);		
+	unsigned char	*pv_linebuf;
+	unsigned char	**pv_lineptr;
+	int		*pv_linesize;
+	int		(*pv_getline)(void);
+	unsigned char	(*pv_getnextchar)(void);
+	unsigned char	(*pv_peeknextchar)(void);
+	int		*pv_fbthere;
+	int		(*pv_getnum)(void);
 
 	void		(*pv_printf)(const char *fmt, ...);
 	int		(*pv_printhex)(void);
 
-	unsigned char	*pv_leds;		
-	int		(*pv_setleds)(void);	
+	unsigned char	*pv_leds;
+	int		(*pv_setleds)(void);
 
-	/* 
+	/*
 	 * Non-maskable interrupt  (nmi) information
-	 */ 
+	 */
 
 	int		(*pv_nmiaddr)(void);
 	int		(*pv_abortentry)(void);
-	int		*pv_nmiclock;		
+	int		*pv_nmiclock;
 
 	int		*pv_fbtype;
 
-	/* 
-	 * Assorted other things 
+	/*
+	 * Assorted other things
 	 */
 
 	unsigned	pv_romvers;
-	struct globram  *pv_globram;		
-	char		*pv_kbdzscc;		
+	struct globram  *pv_globram;
+	char		*pv_kbdzscc;
+
+	int		*pv_keyrinit;
+	unsigned char	*pv_keyrtick;
+	unsigned	*pv_memoryavail;
+	long		*pv_resetaddr;
+	long		*pv_resetmap;
 
-	int		*pv_keyrinit;		
-	unsigned char	*pv_keyrtick; 		
-	unsigned	*pv_memoryavail;	
-	long		*pv_resetaddr;		
-	long		*pv_resetmap;		
-						
-	void		(*pv_halt)(void);	
-	unsigned char	*pv_memorybitmap;	
+	void		(*pv_halt)(void);
+	unsigned char	*pv_memorybitmap;
 
 #ifdef CONFIG_SUN3
 	void		(*pv_setctxt)(int ctxt, char *va, int pmeg);
-	void		(*pv_vector_cmd)(void);	
+	void		(*pv_vector_cmd)(void);
 	int		dummy1z;
 	int		dummy2z;
 	int		dummy3z;
diff -Nru a/include/asm-m68k/oplib.h b/include/asm-m68k/oplib.h
--- a/include/asm-m68k/oplib.h	Sun May 16 01:18:36 2004
+++ b/include/asm-m68k/oplib.h	Sun May 16 01:18:36 2004
@@ -244,7 +244,7 @@
 /* Does the passed node have the given "name"? YES=1 NO=0 */
 extern int prom_nodematch(int thisnode, char *name);
 
-/* Puts in buffer a prom name in the form name@x,y or name (x for which_io 
+/* Puts in buffer a prom name in the form name@x,y or name (x for which_io
  * and y for first regs phys address
  */
 extern int prom_getname(int node, char *buf, int buflen);
@@ -272,7 +272,7 @@
  */
 extern int prom_setprop(int node, char *prop_name, char *prop_value,
 			int value_size);
-			
+
 extern int prom_pathtoinode(char *path);
 extern int prom_inst2pkg(int);
 
@@ -290,8 +290,8 @@
 extern void prom_apply_obio_ranges(struct linux_prom_registers *obioregs, int nregs);
 
 /* Apply ranges of any prom node (and optionally parent node as well) to registers. */
-extern void prom_apply_generic_ranges(int node, int parent, 
+extern void prom_apply_generic_ranges(int node, int parent,
 				      struct linux_prom_registers *sbusregs, int nregs);
-				   
+
 
 #endif /* !(__SPARC_OPLIB_H) */
diff -Nru a/include/asm-m68k/page.h b/include/asm-m68k/page.h
--- a/include/asm-m68k/page.h	Sun May 16 01:18:37 2004
+++ b/include/asm-m68k/page.h	Sun May 16 01:18:37 2004
@@ -25,9 +25,9 @@
 #else
 #define THREAD_SIZE PAGE_SIZE
 #endif
- 
+
 #ifndef __ASSEMBLY__
- 
+
 #define get_user_page(vaddr)		__get_free_page(GFP_KERNEL)
 #define free_user_page(page, addr)	free_page(addr)
 
@@ -80,7 +80,7 @@
 #endif
 
 #define clear_user_page(addr, vaddr, page)	\
-	do { 	clear_page(addr);		\
+	do {	clear_page(addr);		\
 		flush_dcache_page(page);	\
 	} while (0)
 #define copy_user_page(to, from, vaddr, page)	\
diff -Nru a/include/asm-m68k/page_offset.h b/include/asm-m68k/page_offset.h
--- a/include/asm-m68k/page_offset.h	Sun May 16 01:18:36 2004
+++ b/include/asm-m68k/page_offset.h	Sun May 16 01:18:36 2004
@@ -4,6 +4,6 @@
 #ifndef CONFIG_SUN3
 #define PAGE_OFFSET_RAW		0x00000000
 #else
-#define PAGE_OFFSET_RAW		0x0E000000 
+#define PAGE_OFFSET_RAW		0x0E000000
 #endif
 
diff -Nru a/include/asm-m68k/q40_master.h b/include/asm-m68k/q40_master.h
--- a/include/asm-m68k/q40_master.h	Sun May 16 01:18:36 2004
+++ b/include/asm-m68k/q40_master.h	Sun May 16 01:18:36 2004
@@ -1,5 +1,5 @@
-/* 
- * Q40 master Chip Control 
+/*
+ * Q40 master Chip Control
  * RTC stuff merged for compactnes..
 */
 
diff -Nru a/include/asm-m68k/raw_io.h b/include/asm-m68k/raw_io.h
--- a/include/asm-m68k/raw_io.h	Sun May 16 01:18:37 2004
+++ b/include/asm-m68k/raw_io.h	Sun May 16 01:18:37 2004
@@ -1,5 +1,5 @@
 /*
- * linux/include/asm-m68k/raw_io.h 
+ * linux/include/asm-m68k/raw_io.h
  *
  * 10/20/00 RZ: - created from bits of io.h and ide.h to cleanup namespace
  *
diff -Nru a/include/asm-m68k/rtc.h b/include/asm-m68k/rtc.h
--- a/include/asm-m68k/rtc.h	Sun May 16 01:18:34 2004
+++ b/include/asm-m68k/rtc.h	Sun May 16 01:18:34 2004
@@ -51,7 +51,7 @@
 		return mach_get_ss();
 	else{
 		struct rtc_time h;
-		
+
 		get_rtc_time(&h);
 		return h.tm_sec;
 	}
diff -Nru a/include/asm-m68k/sembuf.h b/include/asm-m68k/sembuf.h
--- a/include/asm-m68k/sembuf.h	Sun May 16 01:18:34 2004
+++ b/include/asm-m68k/sembuf.h	Sun May 16 01:18:34 2004
@@ -1,7 +1,7 @@
 #ifndef _M68K_SEMBUF_H
 #define _M68K_SEMBUF_H
 
-/* 
+/*
  * The semid64_ds structure for m68k architecture.
  * Note extra padding because this structure is passed back and forth
  * between kernel and user space.
diff -Nru a/include/asm-m68k/serial.h b/include/asm-m68k/serial.h
--- a/include/asm-m68k/serial.h	Sun May 16 01:18:36 2004
+++ b/include/asm-m68k/serial.h	Sun May 16 01:18:36 2004
@@ -2,7 +2,7 @@
  * include/asm-m68k/serial.h
  *
  * currently this seems useful only for a Q40,
- * it's an almost exact copy of ../asm-alpha/serial.h 
+ * it's an almost exact copy of ../asm-alpha/serial.h
  *
  */
 
@@ -31,7 +31,7 @@
 #define ACCENT_FLAGS 0
 #define BOCA_FLAGS 0
 #endif
-	
+
 #define STD_SERIAL_PORT_DEFNS			\
 	/* UART CLK   PORT IRQ     FLAGS        */			\
 	{ 0, BASE_BAUD, 0x3F8, 4, STD_COM_FLAGS },	/* ttyS0 */	\
@@ -42,7 +42,7 @@
 
 #ifdef CONFIG_SERIAL_MANY_PORTS
 #define EXTRA_SERIAL_PORT_DEFNS			\
-	{ 0, BASE_BAUD, 0x1A0, 9, FOURPORT_FLAGS }, 	/* ttyS4 */	\
+	{ 0, BASE_BAUD, 0x1A0, 9, FOURPORT_FLAGS },	/* ttyS4 */	\
 	{ 0, BASE_BAUD, 0x1A8, 9, FOURPORT_FLAGS },	/* ttyS5 */	\
 	{ 0, BASE_BAUD, 0x1B0, 9, FOURPORT_FLAGS },	/* ttyS6 */	\
 	{ 0, BASE_BAUD, 0x1B8, 9, FOURPORT_FLAGS },	/* ttyS7 */	\
diff -Nru a/include/asm-m68k/setup.h b/include/asm-m68k/setup.h
--- a/include/asm-m68k/setup.h	Sun May 16 01:18:35 2004
+++ b/include/asm-m68k/setup.h	Sun May 16 01:18:35 2004
@@ -248,7 +248,7 @@
 extern unsigned long m68k_mmutype;		/* Not really used yet */
 #ifdef CONFIG_VME
 extern unsigned long vme_brdtype;
-#endif 
+#endif
 
     /*
      *  m68k_is040or060 is != 0 for a '040 or higher;
diff -Nru a/include/asm-m68k/shmbuf.h b/include/asm-m68k/shmbuf.h
--- a/include/asm-m68k/shmbuf.h	Sun May 16 01:18:36 2004
+++ b/include/asm-m68k/shmbuf.h	Sun May 16 01:18:36 2004
@@ -1,7 +1,7 @@
 #ifndef _M68K_SHMBUF_H
 #define _M68K_SHMBUF_H
 
-/* 
+/*
  * The shmid64_ds structure for m68k architecture.
  * Note extra padding because this structure is passed back and forth
  * between kernel and user space.
diff -Nru a/include/asm-m68k/sigcontext.h b/include/asm-m68k/sigcontext.h
--- a/include/asm-m68k/sigcontext.h	Sun May 16 01:18:35 2004
+++ b/include/asm-m68k/sigcontext.h	Sun May 16 01:18:35 2004
@@ -2,7 +2,7 @@
 #define _ASM_M68k_SIGCONTEXT_H
 
 struct sigcontext {
-	unsigned long  sc_mask; 	/* old sigmask */
+	unsigned long  sc_mask;		/* old sigmask */
 	unsigned long  sc_usp;		/* old user stack pointer */
 	unsigned long  sc_d0;
 	unsigned long  sc_d1;
diff -Nru a/include/asm-m68k/signal.h b/include/asm-m68k/signal.h
--- a/include/asm-m68k/signal.h	Sun May 16 01:18:34 2004
+++ b/include/asm-m68k/signal.h	Sun May 16 01:18:34 2004
@@ -96,7 +96,7 @@
 #define SA_ONESHOT	SA_RESETHAND
 #define SA_INTERRUPT	0x20000000 /* dummy -- ignored */
 
-/* 
+/*
  * sigaltstack controls
  */
 #define SS_ONSTACK	1
diff -Nru a/include/asm-m68k/sockios.h b/include/asm-m68k/sockios.h
--- a/include/asm-m68k/sockios.h	Sun May 16 01:18:33 2004
+++ b/include/asm-m68k/sockios.h	Sun May 16 01:18:33 2004
@@ -2,7 +2,7 @@
 #define __ARCH_M68K_SOCKIOS__
 
 /* Socket-level I/O control calls. */
-#define FIOSETOWN 	0x8901
+#define FIOSETOWN	0x8901
 #define SIOCSPGRP	0x8902
 #define FIOGETOWN	0x8903
 #define SIOCGPGRP	0x8904
diff -Nru a/include/asm-m68k/string.h b/include/asm-m68k/string.h
--- a/include/asm-m68k/string.h	Sun May 16 01:18:35 2004
+++ b/include/asm-m68k/string.h	Sun May 16 01:18:35 2004
@@ -73,7 +73,7 @@
 static inline char * strchr(const char * s, int c)
 {
   const char ch = c;
-  
+
   for(; *s != ch; ++s)
     if (*s == '\0')
       return( NULL );
@@ -85,7 +85,7 @@
 static inline char *strpbrk(const char *cs,const char *ct)
 {
   const char *sc1,*sc2;
-  
+
   for( sc1 = cs; *sc1 != '\0'; ++sc1)
     for( sc2 = ct; *sc2 != '\0'; ++sc2)
       if (*sc1 == *sc2)
diff -Nru a/include/asm-m68k/sun3_pgalloc.h b/include/asm-m68k/sun3_pgalloc.h
--- a/include/asm-m68k/sun3_pgalloc.h	Sun May 16 01:18:34 2004
+++ b/include/asm-m68k/sun3_pgalloc.h	Sun May 16 01:18:34 2004
@@ -1,5 +1,5 @@
 /* sun3_pgalloc.h --
- * reorganization around 2.3.39, routines moved from sun3_pgtable.h 
+ * reorganization around 2.3.39, routines moved from sun3_pgtable.h
  *
  *
  * 02/27/2002 -- Modified to support "highpte" implementation in 2.5.5 (Sam)
@@ -36,26 +36,26 @@
 	tlb_remove_page(tlb, page);
 }
 
-static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, 
+static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
 					  unsigned long address)
 {
 	unsigned long page = __get_free_page(GFP_KERNEL|__GFP_REPEAT);
 
 	if (!page)
 		return NULL;
-		
+
 	memset((void *)page, 0, PAGE_SIZE);
 	return (pte_t *) (page);
 }
 
-static inline struct page *pte_alloc_one(struct mm_struct *mm, 
+static inline struct page *pte_alloc_one(struct mm_struct *mm,
 					 unsigned long address)
 {
         struct page *page = alloc_pages(GFP_KERNEL|__GFP_REPEAT, 0);
 
 	if (page == NULL)
 		return NULL;
-		
+
 	clear_highpage(page);
 	return page;
 
diff -Nru a/include/asm-m68k/sun3mmu.h b/include/asm-m68k/sun3mmu.h
--- a/include/asm-m68k/sun3mmu.h	Sun May 16 01:18:35 2004
+++ b/include/asm-m68k/sun3mmu.h	Sun May 16 01:18:35 2004
@@ -144,7 +144,7 @@
 	SET_SFC(FC_CONTROL);
 	GET_CONTROL_BYTE(AC_CONTEXT, c);
 	SET_SFC(sfc);
-	
+
 	return c;
 }
 
@@ -156,7 +156,7 @@
 	SET_DFC(FC_CONTROL);
 	SET_CONTROL_BYTE(AC_CONTEXT, c);
 	SET_DFC(dfc);
-	
+
 	return;
 }
 
diff -Nru a/include/asm-m68k/sun3x.h b/include/asm-m68k/sun3x.h
--- a/include/asm-m68k/sun3x.h	Sun May 16 01:18:36 2004
+++ b/include/asm-m68k/sun3x.h	Sun May 16 01:18:36 2004
@@ -20,7 +20,7 @@
 #define SUN3X_FDC_FVR     0x6e000800
 
 /* some NVRAM addresses */
-#define SUN3X_EEPROM_CONS 	(SUN3X_EEPROM + 0x1f)
+#define SUN3X_EEPROM_CONS	(SUN3X_EEPROM + 0x1f)
 #define SUN3X_EEPROM_PORTA	(SUN3X_EEPROM + 0x58)
 #define SUN3X_EEPROM_PORTB	(SUN3X_EEPROM + 0x60)
 
diff -Nru a/include/asm-m68k/sun3xflop.h b/include/asm-m68k/sun3xflop.h
--- a/include/asm-m68k/sun3xflop.h	Sun May 16 01:18:36 2004
+++ b/include/asm-m68k/sun3xflop.h	Sun May 16 01:18:36 2004
@@ -89,11 +89,11 @@
 
 		if(value & 0x10) {
 			fcr |= (FCR_DSEL0 | FCR_MTRON);
-		} else 
+		} else
 			fcr &= ~(FCR_DSEL0 | FCR_MTRON);
-		
-		
-		if(fcr != sun3x_fdc.fcr) { 
+
+
+		if(fcr != sun3x_fdc.fcr) {
 			*(sun3x_fdc.fcr_r) = fcr;
 			sun3x_fdc.fcr = fcr;
 		}
@@ -121,7 +121,7 @@
 #undef TRACE_FLPY_INT
 #define NO_FLOPPY_ASSEMBLER
 
-#ifdef TRACE_FLPY_INT 
+#ifdef TRACE_FLPY_INT
 	static int calls=0;
 	static int bytes=0;
 	static int dma_wait=0;
@@ -142,13 +142,13 @@
 		register int lcount;
 		register char *lptr;
 
-		for(lcount=virtual_dma_count, lptr=virtual_dma_addr; 
+		for(lcount=virtual_dma_count, lptr=virtual_dma_addr;
 		    lcount; lcount--, lptr++) {
 /*			st=fd_inb(virtual_dma_port+4) & 0x80 ;  */
 			st = *(sun3x_fdc.status_r);
 /*			if(st != 0xa0)                  */
 /*				break;                  */
-	
+
 			if((st & 0x80) == 0) {
 				virtual_dma_count = lcount;
 				virtual_dma_addr = lptr;
@@ -157,7 +157,7 @@
 
 			if((st & 0x20) == 0)
 				break;
-		
+
 			if(virtual_dma_mode)
 /*				fd_outb(*lptr, virtual_dma_port+5); */
 				*(sun3x_fdc.data_r) = *lptr;
@@ -165,7 +165,7 @@
 /*				*lptr = fd_inb(virtual_dma_port+5); */
 				*lptr = *(sun3x_fdc.data_r);
 		}
-		
+
 		virtual_dma_count = lcount;
 		virtual_dma_addr = lptr;
 /*		st = fd_inb(virtual_dma_port+4);   */
@@ -184,7 +184,7 @@
 		doing_pdma = 0;
 
 #ifdef TRACE_FLPY_INT
-		printk("count=%x, residue=%x calls=%d bytes=%x dma_wait=%d\n", 
+		printk("count=%x, residue=%x calls=%d bytes=%x dma_wait=%d\n",
 		       virtual_dma_count, virtual_dma_residue, calls, bytes,
 		       dma_wait);
 		calls = 0;
@@ -195,7 +195,7 @@
 		return IRQ_HANDLED;
 	}
 
-	
+
 #ifdef TRACE_FLPY_INT
 	if(!virtual_dma_count)
 		dma_wait++;
@@ -232,9 +232,9 @@
 	if(*sun3x_fdc.status_r == 0xff) {
 		return -1;
 	}
-	
+
 	*sun3x_fdc.fvr_r = FLOPPY_IRQ;
-	
+
 	*sun3x_fdc.fcr_r = FCR_TC;
 	udelay(10);
 	*sun3x_fdc.fcr_r = 0;
@@ -249,7 +249,7 @@
 static int sun3x_eject(void)
 {
 	if(MACH_IS_SUN3X) {
-	
+
 		sun3x_fdc.fcr |= (FCR_DSEL0 | FCR_EJECT);
 		*(sun3x_fdc.fcr_r) = sun3x_fdc.fcr;
 		udelay(10);
diff -Nru a/include/asm-m68k/termios.h b/include/asm-m68k/termios.h
--- a/include/asm-m68k/termios.h	Sun May 16 01:18:35 2004
+++ b/include/asm-m68k/termios.h	Sun May 16 01:18:35 2004
@@ -3,7 +3,7 @@
 
 #include <asm/termbits.h>
 #include <asm/ioctls.h>
- 
+
 struct winsize {
 	unsigned short ws_row;
 	unsigned short ws_col;
diff -Nru a/include/asm-m68k/thread_info.h b/include/asm-m68k/thread_info.h
--- a/include/asm-m68k/thread_info.h	Sun May 16 01:18:35 2004
+++ b/include/asm-m68k/thread_info.h	Sun May 16 01:18:35 2004
@@ -56,7 +56,7 @@
  * - pass TIF_xxxx constants to these functions
  */
 
-#define __set_tsk_thread_flag(tsk, flag, val) ({ 	\
+#define __set_tsk_thread_flag(tsk, flag, val) ({	\
 	switch (flag) {					\
 	case TIF_SIGPENDING:				\
 		tsk->thread.work.sigpending = val;	\
diff -Nru a/include/asm-m68k/tlbflush.h b/include/asm-m68k/tlbflush.h
--- a/include/asm-m68k/tlbflush.h	Sun May 16 01:18:36 2004
+++ b/include/asm-m68k/tlbflush.h	Sun May 16 01:18:36 2004
@@ -147,7 +147,7 @@
 	     seg = sun3_get_segmap(i);
 	     if(seg == SUN3_INVALID_PMEG)
 		     continue;
-	     
+
 	     sun3_put_segmap(i, SUN3_INVALID_PMEG);
 	     pmeg_alloc[seg] = 0;
 	     pmeg_ctx[seg] = 0;
@@ -155,7 +155,7 @@
      }
 
      sun3_put_context(oldctx);
-     		     
+
 }
 
 /* Flush a single TLB page. In this case, we're limited to flushing a
@@ -174,7 +174,7 @@
 		pmeg_alloc[i] = 0;
 		pmeg_ctx[i] = 0;
 		pmeg_vaddr[i] = 0;
-		sun3_put_segmap (addr,  SUN3_INVALID_PMEG);     
+		sun3_put_segmap (addr,  SUN3_INVALID_PMEG);
 	}
 	sun3_put_context(oldctx);
 
@@ -186,7 +186,7 @@
 {
 	struct mm_struct *mm = vma->vm_mm;
 	unsigned char seg, oldctx;
-	
+
 	start &= ~SUN3_PMEG_MASK;
 
 	oldctx = sun3_get_context();
@@ -194,7 +194,7 @@
 
 	while(start < end)
 	{
-		if((seg = sun3_get_segmap(start)) == SUN3_INVALID_PMEG) 
+		if((seg = sun3_get_segmap(start)) == SUN3_INVALID_PMEG)
 		     goto next;
 		if(pmeg_ctx[seg] == mm->context) {
 			pmeg_alloc[seg] = 0;
diff -Nru a/include/asm-m68k/unaligned.h b/include/asm-m68k/unaligned.h
--- a/include/asm-m68k/unaligned.h	Sun May 16 01:18:37 2004
+++ b/include/asm-m68k/unaligned.h	Sun May 16 01:18:37 2004
@@ -2,7 +2,7 @@
 #define __M68K_UNALIGNED_H
 
 /*
- * The m68k can do unaligned accesses itself. 
+ * The m68k can do unaligned accesses itself.
  *
  * The strange macros are there to make sure these can't
  * be misused in a way that makes them not work on other
diff -Nru a/include/asm-m68k/user.h b/include/asm-m68k/user.h
--- a/include/asm-m68k/user.h	Sun May 16 01:18:36 2004
+++ b/include/asm-m68k/user.h	Sun May 16 01:18:36 2004
@@ -51,7 +51,7 @@
 	short __fill;
 };
 
-	
+
 /* When the kernel dumps core, it starts by dumping the user struct -
    this will be used by gdb to figure out where the data and stack segments
    are within the file, and what virtual addresses to use. */
@@ -72,7 +72,7 @@
 				   This is actually the bottom of the stack,
 				   the top of the stack is always found in the
 				   esp register.  */
-  long int signal;     		/* Signal that caused the core dump. */
+  long int signal;		/* Signal that caused the core dump. */
   int reserved;			/* No longer used */
   struct user_regs_struct *u_ar0;
 				/* Used by gdb to help find the values for */
diff -Nru a/include/asm-m68k/virtconvert.h b/include/asm-m68k/virtconvert.h
--- a/include/asm-m68k/virtconvert.h	Sun May 16 01:18:36 2004
+++ b/include/asm-m68k/virtconvert.h	Sun May 16 01:18:36 2004
@@ -8,6 +8,7 @@
 #ifdef __KERNEL__
 
 #include <linux/config.h>
+#include <linux/compiler.h>
 #include <asm/setup.h>
 #include <asm/page.h>
 
@@ -31,7 +32,7 @@
 {
 	return (unsigned long)__va(paddr);
 }
-#endif 
+#endif
 
 #ifdef CONFIG_SINGLE_MEMORY_CHUNK
 static inline unsigned long virt_to_phys(void *vaddr)
diff -Nru a/include/asm-m68knommu/atomic.h b/include/asm-m68knommu/atomic.h
--- a/include/asm-m68knommu/atomic.h	Sun May 16 01:18:35 2004
+++ b/include/asm-m68knommu/atomic.h	Sun May 16 01:18:35 2004
@@ -96,6 +96,8 @@
 	return temp;
 }
 
+#define atomic_add_negative(a, v)	(atomic_add_return((a), (v)) < 0)
+
 extern __inline__ int atomic_sub_return(int i, atomic_t * v)
 {
 	unsigned long temp, flags;
@@ -111,6 +113,16 @@
 
 #define atomic_dec_return(v) atomic_sub_return(1,(v))
 #define atomic_inc_return(v) atomic_add_return(1,(v))
+
+/*
+ * atomic_inc_and_test - increment and test
+ * @v: pointer of type atomic_t
+ *
+ * Atomically increments @v by 1
+ * and returns true if the result is zero, or false for all
+ * other cases.
+ */
+#define atomic_inc_and_test(v) (atomic_inc_return(v) == 0)
 
 #define atomic_sub_and_test(i,v) (atomic_sub_return((i), (v)) == 0)
 #define atomic_dec_and_test(v) (atomic_sub_return(1, (v)) == 0)
diff -Nru a/include/asm-m68knommu/flat.h b/include/asm-m68knommu/flat.h
--- a/include/asm-m68knommu/flat.h	Sun May 16 01:18:36 2004
+++ b/include/asm-m68knommu/flat.h	Sun May 16 01:18:36 2004
@@ -9,7 +9,7 @@
 #define	flat_argvp_envp_on_stack()		1
 #define	flat_old_ram_flag(flags)		(flags)
 #define	flat_reloc_valid(reloc, size)		((reloc) <= (size))
-#define	flat_get_addr_from_rp(rp, relval)	get_unaligned(rp)
+#define	flat_get_addr_from_rp(rp, relval, flags)	get_unaligned(rp)
 #define	flat_put_addr_at_rp(rp, val, relval)	put_unaligned(val,rp)
 #define	flat_get_relocate_addr(rel)		(rel)
 
diff -Nru a/include/asm-mips/8253pit.h b/include/asm-mips/8253pit.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/include/asm-mips/8253pit.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,10 @@
+/*
+ * 8253/8254 Programmable Interval Timer
+ */
+
+#ifndef _8253PIT_H
+#define _8253PIT_H
+
+#define PIT_TICK_RATE 	1193182UL
+
+#endif
diff -Nru a/include/asm-mips/checksum.h b/include/asm-mips/checksum.h
--- a/include/asm-mips/checksum.h	Sun May 16 01:18:33 2004
+++ b/include/asm-mips/checksum.h	Sun May 16 01:18:33 2004
@@ -120,10 +120,6 @@
 	return csum_fold(csum);
 }
 
-/*
- * computes the checksum of the TCP/UDP pseudo-header
- * returns a 16-bit checksum, already complemented
- */
 static inline unsigned int csum_tcpudp_nofold(unsigned long saddr,
 	unsigned long daddr, unsigned short len, unsigned short proto,
 	unsigned int sum)
diff -Nru a/include/asm-mips/hdreg.h b/include/asm-mips/hdreg.h
--- a/include/asm-mips/hdreg.h	Sun May 16 01:18:36 2004
+++ b/include/asm-mips/hdreg.h	Sun May 16 01:18:36 2004
@@ -1 +1 @@
-#include <asm-generic/hdreg.h>
+#warning this file is obsolete, please do not use it
diff -Nru a/include/asm-mips/mach-au1x00/au1000.h b/include/asm-mips/mach-au1x00/au1000.h
--- a/include/asm-mips/mach-au1x00/au1000.h	Sun May 16 01:18:34 2004
+++ b/include/asm-mips/mach-au1x00/au1000.h	Sun May 16 01:18:34 2004
@@ -1141,14 +1141,14 @@
 #define Au1500_PCI_MEM_START      0x440000000
 #define Au1500_PCI_MEM_END        0x44FFFFFFF
 
-#define PCI_IO_START    (Au1500_PCI_IO_START + 0x300)
+#define PCI_IO_START    (Au1500_PCI_IO_START + 0x1000)
 #define PCI_IO_END      (Au1500_PCI_IO_END)
 #define PCI_MEM_START   (Au1500_PCI_MEM_START)
 #define PCI_MEM_END     (Au1500_PCI_MEM_END)
 #define PCI_FIRST_DEVFN (0<<3)
 #define PCI_LAST_DEVFN  (19<<3)
 
-#define IOPORT_RESOURCE_START 0x00000000
+#define IOPORT_RESOURCE_START 0x00001000 /* skip the legacy ide probing */
 #define IOPORT_RESOURCE_END   0xffffffff
 #define IOMEM_RESOURCE_START  0x10000000
 #define IOMEM_RESOURCE_END    0xffffffff
@@ -1199,5 +1199,20 @@
 #elif defined(CONFIG_SOC_AU1100)
 #define NUM_ETH_INTERFACES 1
 #endif
+/* Processor information base on prid.
+ * Copied from PowerPC.
+ */
+struct cpu_spec {
+	/* CPU is matched via (PRID & prid_mask) == prid_value */
+	unsigned int	prid_mask;
+	unsigned int	prid_value;
+
+	char		*cpu_name;
+	unsigned int	cpu_od;		/* Set Config[OD] */
+	unsigned int	cpu_bclk;	/* Enable BCLK switching */
+};
+
+extern struct cpu_spec		cpu_specs[];
+extern struct cpu_spec		*cur_cpu_spec[];
 
 #endif
diff -Nru a/include/asm-mips/mach-db1x00/db1x00.h b/include/asm-mips/mach-db1x00/db1x00.h
--- a/include/asm-mips/mach-db1x00/db1x00.h	Sun May 16 01:18:35 2004
+++ b/include/asm-mips/mach-db1x00/db1x00.h	Sun May 16 01:18:35 2004
@@ -27,21 +27,34 @@
 #ifndef __ASM_DB1X00_H
 #define __ASM_DB1X00_H
 
+#ifdef CONFIG_MIPS_DB1550
+#define BCSR_KSEG1_ADDR 0xAF000000
+#else
+#define BCSR_KSEG1_ADDR 0xAE000000
+#endif
 
 /*
  * Overlay data structure of the Db1x00 board registers.
- * Registers located at physical 1E0000xx, KSEG1 0xAE0000xx
+ * Registers located at physical 0E0000xx, KSEG1 0xAE0000xx
  */
 typedef volatile struct
 {
-	/*00*/	unsigned long whoami;
-	/*04*/	unsigned long status;
-	/*08*/	unsigned long switches;
-	/*0C*/	unsigned long resets;
-	/*10*/	unsigned long pcmcia;
-	/*14*/	unsigned long specific;
-	/*18*/	unsigned long leds;
-	/*1C*/	unsigned long swreset;
+	/*00*/	unsigned short whoami;
+	unsigned short reserved0;
+	/*04*/	unsigned short status;
+	unsigned short reserved1;
+	/*08*/	unsigned short switches;
+	unsigned short reserved2;
+	/*0C*/	unsigned short resets;
+	unsigned short reserved3;
+	/*10*/	unsigned short pcmcia;
+	unsigned short reserved4;
+	/*14*/	unsigned short specific;
+	unsigned short reserved5;
+	/*18*/	unsigned short leds;
+	unsigned short reserved6;
+	/*1C*/	unsigned short swreset;
+	unsigned short reserved7;
 
 } BCSR;
 
diff -Nru a/include/asm-mips/pmon.h b/include/asm-mips/pmon.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/include/asm-mips/pmon.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,22 @@
+/*
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ * Copyright (C) 2004 by Ralf Baechle
+ */
+#ifndef _ASM_PMON_H
+#define _ASM_PMON_H
+
+struct callvectors {
+	int	(*open) (char*, int, int);		/*	 0 */
+	int	(*close) (int);				/*	 4 */
+	int	(*read) (int, void*, int);		/*	 8 */
+	int	(*write) (int, void*, int);		/*	12 */
+	off_t	(*lseek) (int, off_t, int);		/*	16 */
+	int	(*printf) (const char*, ...);		/*	20 */
+	void	(*cacheflush) (void);			/*	24 */
+	char*	(*gets) (char*);			/*	28 */
+};
+
+#endif /* _ASM_PMON_H */
diff -Nru a/include/asm-mips/processor.h b/include/asm-mips/processor.h
--- a/include/asm-mips/processor.h	Sun May 16 01:18:33 2004
+++ b/include/asm-mips/processor.h	Sun May 16 01:18:33 2004
@@ -175,6 +175,8 @@
 	unsigned long seg;
 } mm_segment_t;
 
+#define ARCH_MIN_TASKALIGN	8
+
 /*
  * If you change thread_struct remember to change the #defines below too!
  */
diff -Nru a/include/asm-mips/ptrace.h b/include/asm-mips/ptrace.h
--- a/include/asm-mips/ptrace.h	Sun May 16 01:18:35 2004
+++ b/include/asm-mips/ptrace.h	Sun May 16 01:18:35 2004
@@ -69,6 +69,8 @@
 
 extern void show_regs(struct pt_regs *);
 
+extern asmlinkage void do_syscall_trace(struct pt_regs *regs, int entryexit);
+
 #endif
 
 #endif /* _ASM_PTRACE_H */
diff -Nru a/include/asm-mips/spinlock.h b/include/asm-mips/spinlock.h
--- a/include/asm-mips/spinlock.h	Sun May 16 01:18:36 2004
+++ b/include/asm-mips/spinlock.h	Sun May 16 01:18:36 2004
@@ -23,6 +23,7 @@
 
 #define spin_is_locked(x)	((x)->lock != 0)
 #define spin_unlock_wait(x)	do { barrier(); } while ((x)->lock)
+#define _raw_spin_lock_flags(lock, flags) _raw_spin_lock(lock)
 
 /*
  * Simple spin lock operations.  There are two variants, one clears IRQ's
diff -Nru a/include/asm-mips/thread_info.h b/include/asm-mips/thread_info.h
--- a/include/asm-mips/thread_info.h	Sun May 16 01:18:33 2004
+++ b/include/asm-mips/thread_info.h	Sun May 16 01:18:33 2004
@@ -110,6 +110,7 @@
 #define TIF_NOTIFY_RESUME	1	/* resumption notification requested */
 #define TIF_SIGPENDING		2	/* signal pending */
 #define TIF_NEED_RESCHED	3	/* rescheduling necessary */
+#define TIF_SYSCALL_AUDIT	4	/* syscall auditing active */
 #define TIF_USEDFPU		16	/* FPU was used by this task this quantum (SMP) */
 #define TIF_POLLING_NRFLAG	17	/* true if poll_idle() is polling TIF_NEED_RESCHED */
 #define TIF_SYSCALL_TRACE	31	/* syscall trace active */
@@ -118,12 +119,13 @@
 #define _TIF_NOTIFY_RESUME	(1<<TIF_NOTIFY_RESUME)
 #define _TIF_SIGPENDING		(1<<TIF_SIGPENDING)
 #define _TIF_NEED_RESCHED	(1<<TIF_NEED_RESCHED)
+#define _TIF_SYSCALL_AUDIT	(1<<TIF_SYSCALL_AUDIT)
 #define _TIF_USEDFPU		(1<<TIF_USEDFPU)
 #define _TIF_POLLING_NRFLAG	(1<<TIF_POLLING_NRFLAG)
 
-#define _TIF_WORK_MASK		0x0000fffe	/* work to do on
+#define _TIF_WORK_MASK		0x0000ffef	/* work to do on
                                                    interrupt/exception return */
-#define _TIF_ALLWORK_MASK	0x8000fffe	/* work to do on any return to
+#define _TIF_ALLWORK_MASK	0x8000ffff	/* work to do on any return to
                                                    u-space */
 
 #endif /* __KERNEL__ */
diff -Nru a/include/asm-mips/unistd.h b/include/asm-mips/unistd.h
--- a/include/asm-mips/unistd.h	Sun May 16 01:18:33 2004
+++ b/include/asm-mips/unistd.h	Sun May 16 01:18:33 2004
@@ -288,16 +288,25 @@
 #define __NR_clock_nanosleep		(__NR_Linux + 265)
 #define __NR_tgkill			(__NR_Linux + 266)
 #define __NR_utimes			(__NR_Linux + 267)
+#define __NR_mbind			(__NR_Linux + 268)
+#define __NR_get_mempolicy		(__NR_Linux + 269)
+#define __NR_set_mempolicy		(__NR_Linux + 270)
+#define __NR_mq_open			(__NR_Linux + 271)
+#define __NR_mq_unlink			(__NR_Linux + 272)
+#define __NR_mq_timedsend		(__NR_Linux + 273)
+#define __NR_mq_timedreceive		(__NR_Linux + 274)
+#define __NR_mq_notify			(__NR_Linux + 275)
+#define __NR_mq_getsetattr		(__NR_Linux + 276)
 
 /*
  * Offset of the last Linux o32 flavoured syscall
  */
-#define __NR_Linux_syscalls		267
+#define __NR_Linux_syscalls		276
 
 #endif /* _MIPS_SIM == _MIPS_SIM_ABI32 */
 
 #define __NR_O32_Linux			4000
-#define __NR_O32_Linux_syscalls		267
+#define __NR_O32_Linux_syscalls		276
 
 #if _MIPS_SIM == _MIPS_SIM_ABI64
 
@@ -532,16 +541,25 @@
 #define __NR_clock_nanosleep		(__NR_Linux + 224)
 #define __NR_tgkill			(__NR_Linux + 225)
 #define __NR_utimes			(__NR_Linux + 226)
+#define __NR_mbind			(__NR_Linux + 227)
+#define __NR_get_mempolicy		(__NR_Linux + 228)
+#define __NR_set_mempolicy		(__NR_Linux + 229)
+#define __NR_mq_open			(__NR_Linux + 230)
+#define __NR_mq_unlink			(__NR_Linux + 231)
+#define __NR_mq_timedsend		(__NR_Linux + 232)
+#define __NR_mq_timedreceive		(__NR_Linux + 233)
+#define __NR_mq_notify			(__NR_Linux + 234)
+#define __NR_mq_getsetattr		(__NR_Linux + 235)
 
 /*
  * Offset of the last Linux flavoured syscall
  */
-#define __NR_Linux_syscalls		226
+#define __NR_Linux_syscalls		235
 
 #endif /* _MIPS_SIM == _MIPS_SIM_ABI64 */
 
 #define __NR_64_Linux			5000
-#define __NR_64_Linux_syscalls		226
+#define __NR_64_Linux_syscalls		235
 
 #if _MIPS_SIM == _MIPS_SIM_NABI32
 
@@ -780,16 +798,25 @@
 #define __NR_clock_nanosleep		(__NR_Linux + 228)
 #define __NR_tgkill			(__NR_Linux + 229)
 #define __NR_utimes			(__NR_Linux + 230)
+#define __NR_mbind			(__NR_Linux + 231)
+#define __NR_get_mempolicy		(__NR_Linux + 232)
+#define __NR_set_mempolicy		(__NR_Linux + 233)
+#define __NR_mq_open			(__NR_Linux + 234)
+#define __NR_mq_unlink			(__NR_Linux + 235)
+#define __NR_mq_timedsend		(__NR_Linux + 236)
+#define __NR_mq_timedreceive		(__NR_Linux + 237)
+#define __NR_mq_notify			(__NR_Linux + 238)
+#define __NR_mq_getsetattr		(__NR_Linux + 239)
 
 /*
  * Offset of the last N32 flavoured syscall
  */
-#define __NR_Linux_syscalls		230
+#define __NR_Linux_syscalls		239
 
 #endif /* _MIPS_SIM == _MIPS_SIM_NABI32 */
 
 #define __NR_N32_Linux			6000
-#define __NR_N32_Linux_syscalls		230
+#define __NR_N32_Linux_syscalls		239
 
 #ifndef __ASSEMBLY__
 
diff -Nru a/include/asm-mips/vr41xx/vr41xx.h b/include/asm-mips/vr41xx/vr41xx.h
--- a/include/asm-mips/vr41xx/vr41xx.h	Sun May 16 01:18:34 2004
+++ b/include/asm-mips/vr41xx/vr41xx.h	Sun May 16 01:18:34 2004
@@ -136,6 +136,9 @@
 extern int vr41xx_set_intassign(unsigned int irq, unsigned char intassign);
 extern int vr41xx_cascade_irq(unsigned int irq, int (*get_irq_number)(int irq));
 
+extern void vr41xx_enable_dsiuint(void);
+extern void vr41xx_disable_dsiuint(void);
+
 /*
  * Power Management Unit
  */
@@ -189,22 +192,25 @@
 /*
  * Serial Interface Unit
  */
-extern void vr41xx_siu_init(int interface, int module);
-extern void vr41xx_siu_ifselect(int interface, int module);
+extern void vr41xx_siu_init(void);
 extern int vr41xx_serial_ports;
 
 /* SIU interfaces */
-enum {
+typedef enum {
 	SIU_RS232C,
 	SIU_IRDA
-};
+} siu_interface_t;
 
 /* IrDA interfaces */
-enum {
-	IRDA_SHARP = 1,
+typedef enum {
+	IRDA_NONE,
+	IRDA_SHARP,
 	IRDA_TEMIC,
 	IRDA_HP
-};
+} irda_module_t;
+
+extern void vr41xx_select_siu_interface(siu_interface_t interface,
+                                        irda_module_t module);
 
 /*
  * Debug Serial Interface Unit
diff -Nru a/include/asm-parisc/atomic.h b/include/asm-parisc/atomic.h
--- a/include/asm-parisc/atomic.h	Sun May 16 01:18:34 2004
+++ b/include/asm-parisc/atomic.h	Sun May 16 01:18:34 2004
@@ -3,7 +3,6 @@
 
 #include <linux/config.h>
 #include <asm/system.h>
-
 /* Copyright (C) 2000 Philipp Rumpf <prumpf@tux.org>.  */
 
 /*
@@ -15,33 +14,47 @@
  */
 
 #ifdef CONFIG_SMP
+#include <asm/cache.h>		/* we use L1_CACHE_BYTES */
+
+typedef spinlock_t atomic_lock_t;
+
 /* Use an array of spinlocks for our atomic_ts.
-** Hash function to index into a different SPINLOCK.
-** Since "a" is usually an address, ">>8" makes one spinlock per 64-bytes.
-*/
+ * Hash function to index into a different SPINLOCK.
+ * Since "a" is usually an address, use one spinlock per cacheline.
+ */
 #  define ATOMIC_HASH_SIZE 4
-#  define ATOMIC_HASH(a) (&__atomic_hash[(((unsigned long) a)>>8)&(ATOMIC_HASH_SIZE-1)])
+#  define ATOMIC_HASH(a) (&(__atomic_hash[ (((unsigned long) a)/L1_CACHE_BYTES) & (ATOMIC_HASH_SIZE-1) ]))
+
+extern atomic_lock_t __atomic_hash[ATOMIC_HASH_SIZE] __lock_aligned;
+
+static inline void atomic_spin_lock(atomic_lock_t *a)
+{
+	while (__ldcw(a) == 0)
+		while (a->lock[0] == 0);
+}
+
+static inline void atomic_spin_unlock(atomic_lock_t *a)
+{
+	a->lock[0] = 1;
+}
 
-extern spinlock_t __atomic_hash[ATOMIC_HASH_SIZE];
-/* copied from <asm/spinlock.h> and modified */
-#  define SPIN_LOCK(x) \
-	do { while(__ldcw(&(x)->lock) == 0); } while(0)
-	
-#  define SPIN_UNLOCK(x) \
-	do { (x)->lock = 1; } while(0)
 #else
 #  define ATOMIC_HASH_SIZE 1
 #  define ATOMIC_HASH(a)	(0)
-
-/* copied from <linux/spinlock.h> and modified */
-#  define SPIN_LOCK(x) (void)(x)
-	
-#  define SPIN_UNLOCK(x) do { } while(0)
+#  define atomic_spin_lock(x) (void)(x)
+#  define atomic_spin_unlock(x) do { } while(0)
 #endif
 
 /* copied from <linux/spinlock.h> and modified */
-#define SPIN_LOCK_IRQSAVE(lock, flags)		do { local_irq_save(flags);       SPIN_LOCK(lock); } while (0)
-#define SPIN_UNLOCK_IRQRESTORE(lock, flags)	do { SPIN_UNLOCK(lock);  local_irq_restore(flags); } while (0)
+#define atomic_spin_lock_irqsave(lock, flags)	do { 	\
+	local_irq_save(flags);				\
+	atomic_spin_lock(lock); 			\
+} while (0)
+
+#define atomic_spin_unlock_irqrestore(lock, flags) do {	\
+	atomic_spin_unlock(lock);			\
+	local_irq_restore(flags);			\
+} while (0)
 
 /* Note that we need not lock read accesses - aligned word writes/reads
  * are atomic, so a reader never sees unconsistent values.
@@ -137,22 +150,22 @@
 {
 	int ret;
 	unsigned long flags;
-	SPIN_LOCK_IRQSAVE(ATOMIC_HASH(v), flags);
+	atomic_spin_lock_irqsave(ATOMIC_HASH(v), flags);
 
 	ret = (v->counter += i);
 
-	SPIN_UNLOCK_IRQRESTORE(ATOMIC_HASH(v), flags);
+	atomic_spin_unlock_irqrestore(ATOMIC_HASH(v), flags);
 	return ret;
 }
 
 static __inline__ void atomic_set(atomic_t *v, int i) 
 {
 	unsigned long flags;
-	SPIN_LOCK_IRQSAVE(ATOMIC_HASH(v), flags);
+	atomic_spin_lock_irqsave(ATOMIC_HASH(v), flags);
 
 	v->counter = i;
 
-	SPIN_UNLOCK_IRQRESTORE(ATOMIC_HASH(v), flags);
+	atomic_spin_unlock_irqrestore(ATOMIC_HASH(v), flags);
 }
 
 static __inline__ int atomic_read(const atomic_t *v)
@@ -171,6 +184,18 @@
 #define atomic_sub_return(i,v)	(__atomic_add_return(-((int)i),(v)))
 #define atomic_inc_return(v)	(__atomic_add_return(   1,(v)))
 #define atomic_dec_return(v)	(__atomic_add_return(  -1,(v)))
+
+#define atomic_add_negative(a, v)	(atomic_add_return((a), (v)) < 0)
+
+/*
+ * atomic_inc_and_test - increment and test
+ * @v: pointer of type atomic_t
+ *
+ * Atomically increments @v by 1
+ * and returns true if the result is zero, or false for all
+ * other cases.
+ */
+#define atomic_inc_and_test(v) (atomic_inc_return(v) == 0)
 
 #define atomic_dec_and_test(v)	(atomic_dec_return(v) == 0)
 
diff -Nru a/include/asm-parisc/bitops.h b/include/asm-parisc/bitops.h
--- a/include/asm-parisc/bitops.h	Sun May 16 01:18:33 2004
+++ b/include/asm-parisc/bitops.h	Sun May 16 01:18:33 2004
@@ -38,9 +38,9 @@
 
 	addr += (nr >> SHIFT_PER_LONG);
 	mask = 1L << CHOP_SHIFTCOUNT(nr);
-	SPIN_LOCK_IRQSAVE(ATOMIC_HASH(addr), flags);
+	atomic_spin_lock_irqsave(ATOMIC_HASH(addr), flags);
 	*addr |= mask;
-	SPIN_UNLOCK_IRQRESTORE(ATOMIC_HASH(addr), flags);
+	atomic_spin_unlock_irqrestore(ATOMIC_HASH(addr), flags);
 }
 
 static __inline__ void __set_bit(int nr, void * address)
@@ -61,9 +61,9 @@
 
 	addr += (nr >> SHIFT_PER_LONG);
 	mask = 1L << CHOP_SHIFTCOUNT(nr);
-	SPIN_LOCK_IRQSAVE(ATOMIC_HASH(addr), flags);
+	atomic_spin_lock_irqsave(ATOMIC_HASH(addr), flags);
 	*addr &= ~mask;
-	SPIN_UNLOCK_IRQRESTORE(ATOMIC_HASH(addr), flags);
+	atomic_spin_unlock_irqrestore(ATOMIC_HASH(addr), flags);
 }
 
 static __inline__ void __clear_bit(unsigned long nr, volatile void * address)
@@ -84,9 +84,9 @@
 
 	addr += (nr >> SHIFT_PER_LONG);
 	mask = 1L << CHOP_SHIFTCOUNT(nr);
-	SPIN_LOCK_IRQSAVE(ATOMIC_HASH(addr), flags);
+	atomic_spin_lock_irqsave(ATOMIC_HASH(addr), flags);
 	*addr ^= mask;
-	SPIN_UNLOCK_IRQRESTORE(ATOMIC_HASH(addr), flags);
+	atomic_spin_unlock_irqrestore(ATOMIC_HASH(addr), flags);
 }
 
 static __inline__ void __change_bit(int nr, void * address)
@@ -108,10 +108,10 @@
 
 	addr += (nr >> SHIFT_PER_LONG);
 	mask = 1L << CHOP_SHIFTCOUNT(nr);
-	SPIN_LOCK_IRQSAVE(ATOMIC_HASH(addr), flags);
+	atomic_spin_lock_irqsave(ATOMIC_HASH(addr), flags);
 	oldbit = (*addr & mask) ? 1 : 0;
 	*addr |= mask;
-	SPIN_UNLOCK_IRQRESTORE(ATOMIC_HASH(addr), flags);
+	atomic_spin_unlock_irqrestore(ATOMIC_HASH(addr), flags);
 
 	return oldbit;
 }
@@ -139,10 +139,10 @@
 
 	addr += (nr >> SHIFT_PER_LONG);
 	mask = 1L << CHOP_SHIFTCOUNT(nr);
-	SPIN_LOCK_IRQSAVE(ATOMIC_HASH(addr), flags);
+	atomic_spin_lock_irqsave(ATOMIC_HASH(addr), flags);
 	oldbit = (*addr & mask) ? 1 : 0;
 	*addr &= ~mask;
-	SPIN_UNLOCK_IRQRESTORE(ATOMIC_HASH(addr), flags);
+	atomic_spin_unlock_irqrestore(ATOMIC_HASH(addr), flags);
 
 	return oldbit;
 }
@@ -170,10 +170,10 @@
 
 	addr += (nr >> SHIFT_PER_LONG);
 	mask = 1L << CHOP_SHIFTCOUNT(nr);
-	SPIN_LOCK_IRQSAVE(ATOMIC_HASH(addr), flags);
+	atomic_spin_lock_irqsave(ATOMIC_HASH(addr), flags);
 	oldbit = (*addr & mask) ? 1 : 0;
 	*addr ^= mask;
-	SPIN_UNLOCK_IRQRESTORE(ATOMIC_HASH(addr), flags);
+	atomic_spin_unlock_irqrestore(ATOMIC_HASH(addr), flags);
 
 	return oldbit;
 }
@@ -426,6 +426,17 @@
 found_middle:
 	return result + __ffs(tmp);
 }
+
+/**
+ * find_first_bit - find the first set bit in a memory region
+ * @addr: The address to start the search at
+ * @size: The maximum size to search
+ *
+ * Returns the bit-number of the first set bit, not the number of the byte
+ * containing a bit.
+ */
+#define find_first_bit(addr, size) \
+        find_next_bit((addr), (size), 0)
 
 #define _EXT2_HAVE_ASM_BITOPS_
 
diff -Nru a/include/asm-parisc/cache.h b/include/asm-parisc/cache.h
--- a/include/asm-parisc/cache.h	Sun May 16 01:18:33 2004
+++ b/include/asm-parisc/cache.h	Sun May 16 01:18:33 2004
@@ -52,6 +52,8 @@
 extern void disable_sr_hashing_asm(int); /* low level support for above */
 extern void free_sid(unsigned long);
 unsigned long alloc_sid(void);
+extern void flush_user_dcache_page(unsigned long);
+extern void flush_user_icache_page(unsigned long);
 
 struct seq_file;
 extern void show_cache_info(struct seq_file *m);
diff -Nru a/include/asm-parisc/cacheflush.h b/include/asm-parisc/cacheflush.h
--- a/include/asm-parisc/cacheflush.h	Sun May 16 01:18:36 2004
+++ b/include/asm-parisc/cacheflush.h	Sun May 16 01:18:36 2004
@@ -82,13 +82,9 @@
 
 #define flush_icache_range(s,e)		do { flush_kernel_dcache_range_asm(s,e); flush_kernel_icache_range_asm(s,e); } while (0)
 
-#define flush_icache_user_range(vma, page, addr, len) do { \
-        flush_user_dcache_range(addr, addr + len); \
-	flush_user_icache_range(addr, addr + len); } while (0)
-
 #define copy_to_user_page(vma, page, vaddr, dst, src, len) \
 do { memcpy(dst, src, len); \
-     flush_icache_user_range(vma, page, vaddr, len); \
+     flush_kernel_dcache_range_asm((unsigned long)dst, (unsigned long)dst + len); \
 } while (0)
 #define copy_from_user_page(vma, page, vaddr, dst, src, len) \
 	memcpy(dst, src, len)
@@ -112,27 +108,85 @@
 	}
 }
 
+/* Simple function to work out if we have an existing address translation
+ * for a user space vma. */
+static inline int translation_exists(struct vm_area_struct *vma,
+				     unsigned long addr)
+{
+	pgd_t *pgd = pgd_offset(vma->vm_mm, addr);
+	pmd_t *pmd;
+	pte_t *pte;
+
+	if(pgd_none(*pgd))
+		return 0;
+
+	pmd = pmd_offset(pgd, addr);
+	if(pmd_none(*pmd) || pmd_bad(*pmd))
+		return 0;
+
+	pte = pte_offset_map(pmd, addr);
+
+	/* The PA flush mappings show up as pte_none, but they're
+	 * valid none the less */
+	if(pte_none(*pte) && ((pte_val(*pte) & _PAGE_FLUSH) == 0))
+		return 0;
+	return 1;
+}
+
+
+/* Private function to flush a page from the cache of a non-current
+ * process.  cr25 contains the Page Directory of the current user
+ * process; we're going to hijack both it and the user space %sr3 to
+ * temporarily make the non-current process current.  We have to do
+ * this because cache flushing may cause a non-access tlb miss which
+ * the handlers have to fill in from the pgd of the non-current
+ * process. */
 static inline void
-flush_cache_page(struct vm_area_struct *vma, unsigned long vmaddr)
+flush_user_cache_page_non_current(struct vm_area_struct *vma,
+				  unsigned long vmaddr)
 {
-	int sr3;
+	/* save the current process space and pgd */
+	unsigned long space = mfsp(3), pgd = mfctl(25);
 
-	if (!vma->vm_mm->context) {
-		BUG();
-		return;
-	}
+	/* we don't mind taking interrups since they may not
+	 * do anything with user space, but we can't
+	 * be preempted here */
+	preempt_disable();
+
+	/* make us current */
+	mtctl(__pa(vma->vm_mm->pgd), 25);
+	mtsp(vma->vm_mm->context, 3);
+
+	flush_user_dcache_page(vmaddr);
+	if(vma->vm_flags & VM_EXEC)
+		flush_user_icache_page(vmaddr);
+
+	/* put the old current process back */
+	mtsp(space, 3);
+	mtctl(pgd, 25);
+	preempt_enable();
+}
 
-	sr3 = mfsp(3);
-	if (vma->vm_mm->context == sr3) {
-		flush_user_dcache_range(vmaddr,vmaddr + PAGE_SIZE);
+static inline void
+__flush_cache_page(struct vm_area_struct *vma, unsigned long vmaddr)
+{
+	if (likely(vma->vm_mm->context == mfsp(3))) {
+		flush_user_dcache_page(vmaddr);
 		if (vma->vm_flags & VM_EXEC)
-			flush_user_icache_range(vmaddr,vmaddr + PAGE_SIZE);
+			flush_user_icache_page(vmaddr);
 	} else {
-		if (vma->vm_flags & VM_EXEC)
-			flush_cache_all();
-		else
-			flush_data_cache();
+		flush_user_cache_page_non_current(vma, vmaddr);
 	}
+}
+
+static inline void
+flush_cache_page(struct vm_area_struct *vma, unsigned long vmaddr)
+{
+	BUG_ON(!vma->vm_mm->context);
+
+	if(likely(translation_exists(vma, vmaddr)))
+		__flush_cache_page(vma, vmaddr);
+
 }
 #endif
 
diff -Nru a/include/asm-parisc/dma-mapping.h b/include/asm-parisc/dma-mapping.h
--- a/include/asm-parisc/dma-mapping.h	Sun May 16 01:18:34 2004
+++ b/include/asm-parisc/dma-mapping.h	Sun May 16 01:18:34 2004
@@ -247,4 +247,7 @@
 void * sba_get_iommu(struct parisc_device *dev);
 #endif
 
+/* At the moment, we panic on error for IOMMU resource exaustion */
+#define dma_mapping_error(x)	0
+
 #endif
diff -Nru a/include/asm-parisc/fixmap.h b/include/asm-parisc/fixmap.h
--- a/include/asm-parisc/fixmap.h	Sun May 16 01:18:35 2004
+++ b/include/asm-parisc/fixmap.h	Sun May 16 01:18:35 2004
@@ -2,18 +2,22 @@
 #define _ASM_FIXMAP_H
 
 /*
- * Allocate a 8 Mb temporary mapping area for copy_user_page/clear_user_page.
- * This area needs to be aligned on a 8 Mb boundary.
+ * This file defines the locations of the fixed mappings on parisc.
  *
- * FIXME:
+ * All of the values in this file are machine virtual addresses.
  *
- * For PA-RISC, this has no meaning.  It is starting to be used on x86
- * for vsyscalls.  PA will probably do this using space registers.
- */
+ * All of the values in this file must be <4GB (because of assembly
+ * loading restrictions).  If you place this region anywhere above
+ * __PAGE_OFFSET, you must adjust the memory map accordingly */
 
-/* This TMPALIAS_MAP_START reserves some of the memory where the
- * FIXMAP region is on x86.  It's only real use is to constrain
- * VMALLOC_END (see pktable.h) */
-#define TMPALIAS_MAP_START (__PAGE_OFFSET - 0x01000000)
+/* The alias region is used in kernel space to do copy/clear to or
+ * from areas congruently mapped with user space.  It is 8MB large
+ * and must be 16MB aligned */
+#define TMPALIAS_MAP_START	((__PAGE_OFFSET) - 16*1024*1024)
+/* This is the kernel area for all maps (vmalloc, dma etc.)  most
+ * usually, it extends up to TMPALIAS_MAP_START.  Virtual addresses
+ * 0..GATEWAY_PAGE_SIZE are reserved for the gateway page */
+#define KERNEL_MAP_START	(GATEWAY_PAGE_SIZE)
+#define KERNEL_MAP_END		(TMPALIAS_MAP_START)
 
 #endif
diff -Nru a/include/asm-parisc/hardware.h b/include/asm-parisc/hardware.h
--- a/include/asm-parisc/hardware.h	Sun May 16 01:18:36 2004
+++ b/include/asm-parisc/hardware.h	Sun May 16 01:18:36 2004
@@ -36,7 +36,8 @@
 	pcxu_	= 7, /* pa8200	(u+)	pa 2.0  */
 	pcxw	= 8, /* pa8500		pa 2.0  */
 	pcxw_	= 9, /* pa8600	(w+)	pa 2.0  */
-	pcxw2	= 10 /* pa8700		pa 2.0  */
+	pcxw2	= 10, /* pa8700		pa 2.0  */
+	mako	= 11  /* pa8800		pa 2.0  */
 };
 
 extern char *cpu_name_version[][2]; /* mapping from enum cpu_type to strings */
diff -Nru a/include/asm-parisc/page.h b/include/asm-parisc/page.h
--- a/include/asm-parisc/page.h	Sun May 16 01:18:34 2004
+++ b/include/asm-parisc/page.h	Sun May 16 01:18:34 2004
@@ -10,6 +10,7 @@
 #include <linux/config.h>
 #ifndef __ASSEMBLY__
 
+#include <asm/types.h>
 #include <asm/cache.h>
 
 #define clear_page(page)	memset((void *)(page), 0, PAGE_SIZE)
@@ -39,12 +40,26 @@
 /*
  * These are used to make use of C type-checking..
  */
+#ifdef __LP64__
 typedef struct { unsigned long pte; } pte_t;
-typedef struct { unsigned long pmd; } pmd_t;
-typedef struct { unsigned long pgd; } pgd_t;
+#else
+typedef struct {
+	unsigned long pte;
+	unsigned long flags;
+} pte_t;
+#endif
+/* NOTE: even on 64 bits, these entries are __u32 because we allocate
+ * the pmd and pgd in ZONE_DMA (i.e. under 4GB) */
+typedef struct { __u32 pmd; } pmd_t;
+typedef struct { __u32 pgd; } pgd_t;
 typedef struct { unsigned long pgprot; } pgprot_t;
 
 #define pte_val(x)	((x).pte)
+#ifdef __LP64__
+#define pte_flags(x)	(*(__u32 *)&((x).pte))
+#else
+#define pte_flags(x)	((x).flags)
+#endif
 #define pmd_val(x)	((x).pmd)
 #define pgd_val(x)	((x).pgd)
 #define pgprot_val(x)	((x).pgprot)
@@ -84,14 +99,43 @@
 
 #endif /* !__ASSEMBLY__ */
 
+/* WARNING: The definitions below must match exactly to sizeof(pte_t)
+ * etc
+ */
+#ifdef __LP64__
+#define BITS_PER_PTE_ENTRY	3
+#define BITS_PER_PMD_ENTRY	2
+#define BITS_PER_PGD_ENTRY	2
+#else
+#define BITS_PER_PTE_ENTRY	3
+#define BITS_PER_PMD_ENTRY	2
+#define BITS_PER_PGD_ENTRY	BITS_PER_PMD_ENTRY
+#endif
+#define PGD_ENTRY_SIZE	(1UL << BITS_PER_PGD_ENTRY)
+#define PMD_ENTRY_SIZE	(1UL << BITS_PER_PMD_ENTRY)
+#define PTE_ENTRY_SIZE	(1UL << BITS_PER_PTE_ENTRY)
+
 /* to align the pointer to the (next) page boundary */
 #define PAGE_ALIGN(addr)	(((addr)+PAGE_SIZE-1)&PAGE_MASK)
 
 
 #define LINUX_GATEWAY_SPACE     0
+
+/* This governs the relationship between virtual and physical addresses.
+ * If you alter it, make sure to take care of our various fixed mapping
+ * segments in fixmap.h */
 #define __PAGE_OFFSET           (0x10000000)
 
 #define PAGE_OFFSET		((unsigned long)__PAGE_OFFSET)
+
+/* The size of the gateway page (we leave lots of room for expansion) */
+#define GATEWAY_PAGE_SIZE	0x4000
+
+/* The start of the actual kernel binary---used in vmlinux.lds.S
+ * Leave some space after __PAGE_OFFSET for detecting kernel null
+ * ptr derefs */
+#define KERNEL_BINARY_TEXT_START	(__PAGE_OFFSET + 0x100000)
+
 /* These macros don't work for 64-bit C code -- don't allow in C at all */
 #ifdef __ASSEMBLY__
 #   define PA(x)	((x)-__PAGE_OFFSET)
diff -Nru a/include/asm-parisc/pdc.h b/include/asm-parisc/pdc.h
--- a/include/asm-parisc/pdc.h	Sun May 16 01:18:33 2004
+++ b/include/asm-parisc/pdc.h	Sun May 16 01:18:33 2004
@@ -953,6 +953,7 @@
 		struct pdc_memory_table *tbl, unsigned long entries);
 #endif
 
+void set_firmware_width(void);
 int pdc_do_firm_test_reset(unsigned long ftc_bitmap);
 int pdc_do_reset(void);
 int pdc_soft_power_info(unsigned long *power_reg);
diff -Nru a/include/asm-parisc/pgalloc.h b/include/asm-parisc/pgalloc.h
--- a/include/asm-parisc/pgalloc.h	Sun May 16 01:18:36 2004
+++ b/include/asm-parisc/pgalloc.h	Sun May 16 01:18:36 2004
@@ -10,39 +10,75 @@
 #include <asm/pgtable.h>
 #include <asm/cache.h>
 
+/* Allocate the top level pgd (page directory)
+ *
+ * Here (for 64 bit kernels) we implement a Hybrid L2/L3 scheme: we
+ * allocate the first pmd adjacent to the pgd.  This means that we can
+ * subtract a constant offset to get to it.  The pmd and pgd sizes are
+ * arranged so that a single pmd covers 4GB (giving a full LP64
+ * process access to 8TB) so our lookups are effectively L2 for the
+ * first 4GB of the kernel (i.e. for all ILP32 processes and all the
+ * kernel for machines with under 4GB of memory) */
 static inline pgd_t *pgd_alloc(struct mm_struct *mm)
 {
-	pgd_t *pgd = (pgd_t *)__get_free_page(GFP_KERNEL);
-	if (likely(pgd != NULL))
-		clear_page(pgd);
-	return pgd;
+	pgd_t *pgd = (pgd_t *)__get_free_pages(GFP_KERNEL|GFP_DMA,
+					       PGD_ALLOC_ORDER);
+	pgd_t *actual_pgd = pgd;
+
+	if (likely(pgd != NULL)) {
+		memset(pgd, 0, PAGE_SIZE<<PGD_ALLOC_ORDER);
+#ifdef __LP64__
+		actual_pgd += PTRS_PER_PGD;
+		/* Populate first pmd with allocated memory.  We mark it
+		 * with _PAGE_GATEWAY as a signal to the system that this
+		 * pmd entry may not be cleared. */
+		pgd_val(*actual_pgd) = (_PAGE_TABLE | _PAGE_GATEWAY) + 
+			(__u32)__pa((unsigned long)pgd);
+		/* The first pmd entry also is marked with _PAGE_GATEWAY as
+		 * a signal that this pmd may not be freed */
+		pgd_val(*pgd) = _PAGE_GATEWAY;
+#endif
+	}
+	return actual_pgd;
 }
 
 static inline void pgd_free(pgd_t *pgd)
 {
-	free_page((unsigned long)pgd);
+#ifdef __LP64__
+	pgd -= PTRS_PER_PGD;
+#endif
+	free_pages((unsigned long)pgd, PGD_ALLOC_ORDER);
 }
 
-#ifdef __LP64__
+#if PT_NLEVELS == 3
 
 /* Three Level Page Table Support for pmd's */
 
 static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, pmd_t *pmd)
 {
-	pgd_val(*pgd) = _PAGE_TABLE + __pa((unsigned long)pmd);
+	pgd_val(*pgd) = _PAGE_TABLE + (__u32)__pa((unsigned long)pmd);
 }
 
+/* NOTE: pmd must be in ZONE_DMA (<4GB) so the pgd pointer can be
+ * housed in 32 bits */
 static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address)
 {
-	pmd_t *pmd = (pmd_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT);
+	pmd_t *pmd = (pmd_t *)__get_free_pages(GFP_KERNEL|__GFP_REPEAT|GFP_DMA,
+					       PMD_ORDER);
 	if (pmd)
-		clear_page(pmd);
+		memset(pmd, 0, PAGE_SIZE<<PMD_ORDER);
 	return pmd;
 }
 
 static inline void pmd_free(pmd_t *pmd)
 {
-	free_page((unsigned long)pmd);
+#ifdef __LP64__
+	if(pmd_val(*pmd) & _PAGE_GATEWAY)
+		/* This is the permanent pmd attached to the pgd;
+		 * cannot free it */
+		return;
+#endif
+	free_pages((unsigned long)pmd, PMD_ORDER);
 }
 
 #else
@@ -63,16 +99,26 @@
 static inline void
 pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd, pte_t *pte)
 {
-	pmd_val(*pmd) = _PAGE_TABLE + __pa((unsigned long)pte);
+#ifdef __LP64__
+	/* preserve the gateway marker if this is the beginning of
+	 * the permanent pmd */
+	if(pmd_val(*pmd) & _PAGE_GATEWAY)
+		pmd_val(*pmd) = (_PAGE_TABLE | _PAGE_GATEWAY)
+			+ (__u32)__pa((unsigned long)pte);
+	else
+#endif
+		pmd_val(*pmd) = _PAGE_TABLE + (__u32)__pa((unsigned long)pte);
 }
 
 #define pmd_populate(mm, pmd, pte_page) \
 	pmd_populate_kernel(mm, pmd, page_address(pte_page))
 
+/* NOTE: pte must be in ZONE_DMA (<4GB) so that the pmd pointer
+ * can be housed in 32 bits */
 static inline struct page *
 pte_alloc_one(struct mm_struct *mm, unsigned long address)
 {
-	struct page *page = alloc_page(GFP_KERNEL|__GFP_REPEAT);
+	struct page *page = alloc_page(GFP_KERNEL|__GFP_REPEAT|GFP_DMA);
 	if (likely(page != NULL))
 		clear_page(page_address(page));
 	return page;
@@ -81,7 +127,7 @@
 static inline pte_t *
 pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr)
 {
-	pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT);
+	pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT|GFP_DMA);
 	if (likely(pte != NULL))
 		clear_page(pte);
 	return pte;
diff -Nru a/include/asm-parisc/pgtable.h b/include/asm-parisc/pgtable.h
--- a/include/asm-parisc/pgtable.h	Sun May 16 01:18:36 2004
+++ b/include/asm-parisc/pgtable.h	Sun May 16 01:18:36 2004
@@ -43,9 +43,9 @@
 #define pte_ERROR(e) \
 	printk("%s:%d: bad pte %08lx.\n", __FILE__, __LINE__, pte_val(e))
 #define pmd_ERROR(e) \
-	printk("%s:%d: bad pmd %08lx.\n", __FILE__, __LINE__, pmd_val(e))
+	printk("%s:%d: bad pmd %08lx.\n", __FILE__, __LINE__, (unsigned long)pmd_val(e))
 #define pgd_ERROR(e) \
-	printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, pgd_val(e))
+	printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, (unsigned long)pgd_val(e))
 
  /* Note: If you change ISTACK_SIZE, you need to change the corresponding
   * values in vmlinux.lds and vmlinux64.lds (init_istack section). Also,
@@ -55,49 +55,59 @@
 #define  ISTACK_SIZE  32768 /* Interrupt Stack Size */
 #define  ISTACK_ORDER 3
 
-/*
- * NOTE: Many of the below macros use PT_NLEVELS because
- *       it is convenient that PT_NLEVELS == LOG2(pte size in bytes),
- *       i.e. we use 3 level page tables when we use 8 byte pte's
- *       (for 64 bit) and 2 level page tables when we use 4 byte pte's
- */
+/* This is the size of the initially mapped kernel memory (i.e. currently
+ * 0 to 1<<23 == 8MB */
+#define KERNEL_INITIAL_ORDER	23
+#define KERNEL_INITIAL_SIZE	(1 << KERNEL_INITIAL_ORDER)
 
 #ifdef __LP64__
-#define PT_NLEVELS 3
-#define PT_INITIAL 4 /* Number of initial page tables */
+#define PT_NLEVELS	3
+#define PGD_ORDER	1 /* Number of pages per pgd */
+#define PMD_ORDER	1 /* Number of pages per pmd */
+#define PGD_ALLOC_ORDER	2 /* first pgd contains pmd */
 #else
-#define PT_NLEVELS 2
-#define PT_INITIAL 2 /* Number of initial page tables */
+#define PT_NLEVELS	2
+#define PGD_ORDER	1 /* Number of pages per pgd */
+#define PGD_ALLOC_ORDER	PGD_ORDER
 #endif
 
-#define MAX_ADDRBITS (PAGE_SHIFT + (PT_NLEVELS)*(PAGE_SHIFT - PT_NLEVELS))
-#define MAX_ADDRESS (1UL << MAX_ADDRBITS)
-
-#define SPACEID_SHIFT (MAX_ADDRBITS - 32)
-
-/* Definitions for 1st level */
-
-#define PGDIR_SHIFT  (PAGE_SHIFT + (PT_NLEVELS - 1)*(PAGE_SHIFT - PT_NLEVELS))
-#define PGDIR_SIZE	(1UL << PGDIR_SHIFT)
-#define PGDIR_MASK	(~(PGDIR_SIZE-1))
-#define PTRS_PER_PGD    (1UL << (PAGE_SHIFT - PT_NLEVELS))
-#define USER_PTRS_PER_PGD       PTRS_PER_PGD
+/* Definitions for 3rd level (we use PLD here for Page Lower directory
+ * because PTE_SHIFT is used lower down to mean shift that has to be
+ * done to get usable bits out of the PTE) */
+#define PLD_SHIFT	PAGE_SHIFT
+#define PLD_SIZE	PAGE_SIZE
+#define BITS_PER_PTE	(PAGE_SHIFT - BITS_PER_PTE_ENTRY)
+#define PTRS_PER_PTE    (1UL << BITS_PER_PTE)
 
 /* Definitions for 2nd level */
 #define pgtable_cache_init()	do { } while (0)
 
-#define PMD_SHIFT       (PAGE_SHIFT + (PAGE_SHIFT - PT_NLEVELS))
+#define PMD_SHIFT       (PLD_SHIFT + BITS_PER_PTE)
 #define PMD_SIZE	(1UL << PMD_SHIFT)
 #define PMD_MASK	(~(PMD_SIZE-1))
 #if PT_NLEVELS == 3
-#define PTRS_PER_PMD    (1UL << (PAGE_SHIFT - PT_NLEVELS))
+#define BITS_PER_PMD	(PAGE_SHIFT + PMD_ORDER - BITS_PER_PMD_ENTRY)
 #else
-#define PTRS_PER_PMD    1
+#define BITS_PER_PMD	0
 #endif
+#define PTRS_PER_PMD    (1UL << BITS_PER_PMD)
+
+/* Definitions for 1st level */
+#define PGDIR_SHIFT	(PMD_SHIFT + BITS_PER_PMD)
+#define BITS_PER_PGD	(PAGE_SHIFT + PGD_ORDER - BITS_PER_PGD_ENTRY)
+#define PGDIR_SIZE	(1UL << PGDIR_SHIFT)
+#define PGDIR_MASK	(~(PGDIR_SIZE-1))
+#define PTRS_PER_PGD    (1UL << BITS_PER_PGD)
+#define USER_PTRS_PER_PGD       PTRS_PER_PGD
 
-/* Definitions for 3rd level */
+#define MAX_ADDRBITS	(PGDIR_SHIFT + BITS_PER_PGD)
+#define MAX_ADDRESS	(1UL << MAX_ADDRBITS)
+
+#define SPACEID_SHIFT (MAX_ADDRBITS - 32)
 
-#define PTRS_PER_PTE    (1UL << (PAGE_SHIFT - PT_NLEVELS))
+/* This calculates the number of initial pages we need for the initial
+ * page tables */
+#define PT_INITIAL	(1 << (KERNEL_INITIAL_ORDER - PMD_SHIFT))
 
 /*
  * pgd entries used up by user/kernel:
@@ -110,7 +120,7 @@
 #define PCXL_DMA_MAP_SIZE   (8*1024*1024)
 #define VMALLOC_START   ((unsigned long)vmalloc_start)
 /* this is a fixmap remnant, see fixmap.h */
-#define VMALLOC_END	(TMPALIAS_MAP_START)
+#define VMALLOC_END	(KERNEL_MAP_END)
 #endif
 
 /* NB: The tlb miss handlers make certain assumptions about the order */
@@ -217,7 +227,7 @@
 
 /* initial page tables for 0-8MB for kernel */
 
-extern unsigned long pg0[];
+extern pte_t pg0[];
 
 /* zero page used for uninitialized stuff */
 
@@ -234,22 +244,50 @@
 #define pte_present(x)	(pte_val(x) & _PAGE_PRESENT)
 #define pte_clear(xp)	do { pte_val(*(xp)) = 0; } while (0)
 
+#ifdef __LP64__
+/* The first entry of the permanent pmd is not there if it contains
+ * the gateway marker */
+#define pmd_none(x)	(!pmd_val(x) || pmd_val(x) == _PAGE_GATEWAY)
+#define pmd_bad(x)	((pmd_val(x) & ~PAGE_MASK) != _PAGE_TABLE && (pmd_val(x) & ~PAGE_MASK) != (_PAGE_TABLE | _PAGE_GATEWAY))
+#else
 #define pmd_none(x)	(!pmd_val(x))
 #define pmd_bad(x)	((pmd_val(x) & ~PAGE_MASK) != _PAGE_TABLE)
+#endif
 #define pmd_present(x)	(pmd_val(x) & _PAGE_PRESENT)
-#define pmd_clear(xp)	do { pmd_val(*(xp)) = 0; } while (0)
+static inline void pmd_clear(pmd_t *pmd) {
+#ifdef __LP64__
+	if(pmd_val(*pmd) & _PAGE_GATEWAY)
+		/* This is the entry pointing to the permanent pmd
+		 * attached to the pgd; cannot clear it */
+		pmd_val(*pmd) = _PAGE_GATEWAY;
+	else
+#endif
+		pmd_val(*pmd) = 0;
+}
 
 
 
-#ifdef __LP64__
+#if PT_NLEVELS == 3
 #define pgd_page(pgd) ((unsigned long) __va(pgd_val(pgd) & PAGE_MASK))
 
 /* For 64 bit we have three level tables */
 
 #define pgd_none(x)     (!pgd_val(x))
+#ifdef __LP64__
+#define pgd_bad(x)      ((pgd_val(x) & ~PAGE_MASK) != _PAGE_TABLE && (pgd_val(x) & ~PAGE_MASK) != (_PAGE_TABLE | _PAGE_GATEWAY))
+#else
 #define pgd_bad(x)      ((pgd_val(x) & ~PAGE_MASK) != _PAGE_TABLE)
+#endif
 #define pgd_present(x)  (pgd_val(x) & _PAGE_PRESENT)
-#define pgd_clear(xp)   do { pgd_val(*(xp)) = 0; } while (0)
+static inline void pgd_clear(pgd_t *pgd) {
+#ifdef __LP64__
+	if(pgd_val(*pgd) & _PAGE_GATEWAY)
+		/* This is the permanent pmd attached to the pgd; cannot
+		 * free it */
+		return;
+#endif
+	pgd_val(*pgd) = 0;
+}
 #else
 /*
  * The "pgd_xxx()" functions here are trivial for a folded two-level
@@ -337,7 +375,7 @@
 
 /* Find an entry in the second-level page table.. */
 
-#ifdef __LP64__
+#if PT_NLEVELS == 3
 #define pmd_offset(dir,address) \
 ((pmd_t *) pgd_page(*(dir)) + (((address)>>PMD_SHIFT) & (PTRS_PER_PMD-1)))
 #else
diff -Nru a/include/asm-parisc/processor.h b/include/asm-parisc/processor.h
--- a/include/asm-parisc/processor.h	Sun May 16 01:18:37 2004
+++ b/include/asm-parisc/processor.h	Sun May 16 01:18:37 2004
@@ -52,11 +52,11 @@
 #ifndef __ASSEMBLY__
 
 /*
-** Data detected about CPUs at boot time which is the same for all CPU's.
-** HP boxes are SMP - ie identical processors.
-**
-** FIXME: some CPU rev info may be processor specific...
-*/
+ * Data detected about CPUs at boot time which is the same for all CPU's.
+ * HP boxes are SMP - ie identical processors.
+ *
+ * FIXME: some CPU rev info may be processor specific...
+ */
 struct system_cpuinfo_parisc {
 	unsigned int	cpu_count;
 	unsigned int	cpu_hz;
@@ -77,9 +77,7 @@
 };
 
 
-/*
-** Per CPU data structure - ie varies per CPU.
-*/
+/* Per CPU data structure - ie varies per CPU.  */
 struct cpuinfo_parisc {
 	unsigned long it_value;     /* Interval Timer at last timer Intr */
 	unsigned long it_delta;     /* Interval delta (tic_10ms / HZ * 100) */
@@ -116,6 +114,8 @@
 	int seg;  
 } mm_segment_t;
 
+#define ARCH_MIN_TASKALIGN	8
+
 struct thread_struct {
 	struct pt_regs regs;
 	unsigned long  task_size;
@@ -309,22 +309,31 @@
 
 extern void map_hpux_gateway_page(struct task_struct *tsk, struct mm_struct *mm);
 
-static inline unsigned long get_wchan(struct task_struct *p)
-{
-	return 0xdeadbeef; /* XXX */
-}
+extern unsigned long get_wchan(struct task_struct *p);
 
 #define KSTK_EIP(tsk)	((tsk)->thread.regs.iaoq[0])
 #define KSTK_ESP(tsk)	((tsk)->thread.regs.gr[30])
 
-#ifdef  CONFIG_PA20
+
+/*
+ * PA 2.0 defines data prefetch instructions on page 6-11 of the Kane book.
+ * In addition, many implementations do hardware prefetching of both
+ * instructions and data.
+ *
+ * PA7300LC (page 14-4 of the ERS) also implements prefetching by a load
+ * to gr0 but not in a way that Linux can use.  If the load would cause an
+ * interruption (eg due to prefetching 0), it is suppressed on PA2.0
+ * processors, but not on 7300LC.
+ */
+#ifdef  CONFIG_PREFETCH
 #define ARCH_HAS_PREFETCH
+#define ARCH_HAS_PREFETCHW
+
 extern inline void prefetch(const void *addr)
 {
 	__asm__("ldw 0(%0), %%r0" : : "r" (addr));
 }
 
-#define ARCH_HAS_PREFETCHW
 extern inline void prefetchw(const void *addr)
 {
 	__asm__("ldd 0(%0), %%r0" : : "r" (addr));
diff -Nru a/include/asm-parisc/smp.h b/include/asm-parisc/smp.h
--- a/include/asm-parisc/smp.h	Sun May 16 01:18:36 2004
+++ b/include/asm-parisc/smp.h	Sun May 16 01:18:36 2004
@@ -52,9 +52,7 @@
 extern unsigned long cpu_present_mask;
 
 #define smp_processor_id()	(current_thread_info()->cpu)
-#define cpu_online(cpu) cpu_isset(cpu, cpu_online_map)
-
-#define cpu_possible_map	cpu_present_map
+#define cpu_online(cpu)		cpu_isset(cpu, cpu_online_map)
 
 #endif /* CONFIG_SMP */
 
diff -Nru a/include/asm-parisc/spinlock.h b/include/asm-parisc/spinlock.h
--- a/include/asm-parisc/spinlock.h	Sun May 16 01:18:34 2004
+++ b/include/asm-parisc/spinlock.h	Sun May 16 01:18:34 2004
@@ -4,35 +4,43 @@
 #include <asm/system.h>
 
 /* Note that PA-RISC has to use `1' to mean unlocked and `0' to mean locked
- * since it only has load-and-zero.
+ * since it only has load-and-zero. Moreover, at least on some PA processors,
+ * the semaphore address has to be 16-byte aligned.
  */
 
 #undef SPIN_LOCK_UNLOCKED
-#define SPIN_LOCK_UNLOCKED (spinlock_t) { 1 }
+#define SPIN_LOCK_UNLOCKED (spinlock_t) { { 1, 1, 1, 1 } }
 
-#define spin_lock_init(x)	do { (x)->lock = 1; } while(0)
+#define spin_lock_init(x)	do { *(x) = SPIN_LOCK_UNLOCKED; } while(0)
 
-#define spin_is_locked(x) ((x)->lock == 0)
-
-#define spin_unlock_wait(x)	do { barrier(); } while(((volatile spinlock_t *)(x))->lock == 0)
-
-#if 1
-#define _raw_spin_lock(x) do { \
-	while (__ldcw (&(x)->lock) == 0) \
-		while (((x)->lock) == 0) ; } while (0)
-
-#else
-#define _raw_spin_lock(x) \
-	do { while(__ldcw(&(x)->lock) == 0); } while(0)
-#endif
+static inline int spin_is_locked(spinlock_t *x)
+{
+	volatile unsigned int *a = __ldcw_align(x);
+	return *a == 0;
+}
+
+#define spin_unlock_wait(x)	do { barrier(); } while(spin_is_locked(x))
+#define _raw_spin_lock_flags(lock, flags) _raw_spin_lock(lock)
+
+static inline void _raw_spin_lock(spinlock_t *x)
+{
+	volatile unsigned int *a = __ldcw_align(x);
+	while (__ldcw(a) == 0)
+		while (*a == 0);
+}
+
+static inline void _raw_spin_unlock(spinlock_t *x)
+{
+	volatile unsigned int *a = __ldcw_align(x);
+	*a = 1;
+}
+
+static inline int _raw_spin_trylock(spinlock_t *x)
+{
+	volatile unsigned int *a = __ldcw_align(x);
+	return __ldcw(a) != 0;
+}
 	
-#define _raw_spin_unlock(x) \
-	do { (x)->lock = 1; } while(0)
-
-#define _raw_spin_trylock(x) (__ldcw(&(x)->lock) != 0)
-
-
-
 /*
  * Read-write spinlocks, allowing multiple readers
  * but only one writer.
@@ -42,7 +50,7 @@
 	volatile int counter;
 } rwlock_t;
 
-#define RW_LOCK_UNLOCKED (rwlock_t) { {1}, 0 }
+#define RW_LOCK_UNLOCKED (rwlock_t) { { { 1, 1, 1, 1 } }, 0 }
 
 #define rwlock_init(lp)	do { *(lp) = RW_LOCK_UNLOCKED; } while (0)
 
diff -Nru a/include/asm-parisc/system.h b/include/asm-parisc/system.h
--- a/include/asm-parisc/system.h	Sun May 16 01:18:35 2004
+++ b/include/asm-parisc/system.h	Sun May 16 01:18:35 2004
@@ -145,6 +145,19 @@
 	__ret; \
 })
 
+/* Because kmalloc only guarantees 8-byte alignment for kmalloc'd data,
+   and GCC only guarantees 8-byte alignment for stack locals, we can't
+   be assured of 16-byte alignment for atomic lock data even if we
+   specify "__attribute ((aligned(16)))" in the type declaration.  So,
+   we use a struct containing an array of four ints for the atomic lock
+   type and dynamically select the 16-byte aligned int from the array
+   for the semaphore.  */
+#define __PA_LDCW_ALIGNMENT 16
+#define __ldcw_align(a) ({ \
+  unsigned long __ret = (unsigned long) a;                     		\
+  __ret = (__ret + __PA_LDCW_ALIGNMENT - 1) & ~(__PA_LDCW_ALIGNMENT - 1); \
+  (volatile unsigned int *) __ret;                                      \
+})
 
 #ifdef CONFIG_SMP
 /*
@@ -152,8 +165,13 @@
  */
 
 typedef struct {
-	volatile unsigned int __attribute__((aligned(16))) lock;
+	volatile unsigned int lock[4];
 } spinlock_t;
+
+#define __lock_aligned __attribute__((__section__(".data.lock_aligned")))
+
 #endif
+
+#define KERNEL_START (0x10100000 - 0x1000)
 
 #endif
diff -Nru a/include/asm-parisc/unistd.h b/include/asm-parisc/unistd.h
--- a/include/asm-parisc/unistd.h	Sun May 16 01:18:33 2004
+++ b/include/asm-parisc/unistd.h	Sun May 16 01:18:33 2004
@@ -700,124 +700,176 @@
 #define __NR_acl_set            (__NR_Linux + 205)
 #define __NR_gettid             (__NR_Linux + 206)
 #define __NR_readahead          (__NR_Linux + 207)
-#define __NR_tkill		(__NR_Linux + 208)
-#define __NR_sendfile64		(__NR_Linux + 209)
-#define __NR_futex		(__NR_Linux + 210)
-#define __NR_sched_setaffinity	(__NR_Linux + 211)
-#define __NR_sched_getaffinity	(__NR_Linux + 212)
-#define __NR_set_thread_area	(__NR_Linux + 213)
-#define __NR_get_thread_area	(__NR_Linux + 214)
-#define __NR_io_setup		(__NR_Linux + 215)
-#define __NR_io_destroy		(__NR_Linux + 216)
-#define __NR_io_getevents	(__NR_Linux + 217)
-#define __NR_io_submit		(__NR_Linux + 218)
-#define __NR_io_cancel		(__NR_Linux + 219)
-#define __NR_alloc_hugepages	(__NR_Linux + 220)
-#define __NR_free_hugepages	(__NR_Linux + 221)
-#define __NR_exit_group		(__NR_Linux + 222)
-#define __NR_lookup_dcookie	(__NR_Linux + 223)
-#define __NR_epoll_create	(__NR_Linux + 224)
-#define __NR_epoll_ctl		(__NR_Linux + 225)
-#define __NR_epoll_wait		(__NR_Linux + 226)
-#define __NR_remap_file_pages	(__NR_Linux + 227)
-#define __NR_semtimedop		(__NR_Linux + 228)
+#define __NR_tkill              (__NR_Linux + 208)
+#define __NR_sendfile64         (__NR_Linux + 209)
+#define __NR_futex              (__NR_Linux + 210)
+#define __NR_sched_setaffinity  (__NR_Linux + 211)
+#define __NR_sched_getaffinity  (__NR_Linux + 212)
+#define __NR_set_thread_area    (__NR_Linux + 213)
+#define __NR_get_thread_area    (__NR_Linux + 214)
+#define __NR_io_setup           (__NR_Linux + 215)
+#define __NR_io_destroy         (__NR_Linux + 216)
+#define __NR_io_getevents       (__NR_Linux + 217)
+#define __NR_io_submit          (__NR_Linux + 218)
+#define __NR_io_cancel          (__NR_Linux + 219)
+#define __NR_alloc_hugepages    (__NR_Linux + 220)
+#define __NR_free_hugepages     (__NR_Linux + 221)
+#define __NR_exit_group         (__NR_Linux + 222)
+#define __NR_lookup_dcookie     (__NR_Linux + 223)
+#define __NR_epoll_create       (__NR_Linux + 224)
+#define __NR_epoll_ctl          (__NR_Linux + 225)
+#define __NR_epoll_wait         (__NR_Linux + 226)
+#define __NR_remap_file_pages   (__NR_Linux + 227)
+#define __NR_semtimedop         (__NR_Linux + 228)
+#define __NR_mq_open            (__NR_Linux + 229) /* Keep the mq_* syscalls together */
+#define __NR_mq_unlink          (__NR_Linux + 230)
+#define __NR_mq_timedsend       (__NR_Linux + 231)
+#define __NR_mq_timedreceive    (__NR_Linux + 232)
+#define __NR_mq_notify          (__NR_Linux + 233)
+#define __NR_mq_getsetattr      (__NR_Linux + 234)
 
-
-#define __NR_Linux_syscalls     228
+#define __NR_Linux_syscalls     235
 
 #define HPUX_GATEWAY_ADDR       0xC0000004
 #define LINUX_GATEWAY_ADDR      0x100
 
 #ifndef __ASSEMBLY__
 
-/* The old syscall code here didn't work, and it looks like it's only used
- * by applications such as fdisk which for some reason need to produce
- * their own syscall instead of using same from libc.  The code below
- * is leveraged from glibc/sysdeps/unix/sysv/linux/hppa/sysdep.h where
- * it is essentially duplicated -- which sucks.  -PB
- */
-
 #define SYS_ify(syscall_name)   __NR_##syscall_name
 
-/* The system call number MUST ALWAYS be loaded in the delay slot of
-   the ble instruction, or restarting system calls WILL NOT WORK.  See
-   arch/parisc/kernel/signal.c - dhd, 2000-07-26 */
-#define K_INLINE_SYSCALL(name, nr, args...)       ({              \
-        unsigned long __sys_res;                                \
-        {                                                       \
-                register unsigned long __res asm("r28");        \
-                K_LOAD_ARGS_##nr(args)                            \
-                asm volatile(                                   \
-			"ble  0x100(%%sr2, %%r0)\n\t"           \
-                        " ldi %1, %%r20"                        \
-                        : "=r" (__res)                          \
-                        : "i" (SYS_ify(name)) K_ASM_ARGS_##nr   \
-			  );                                    \
-                __sys_res = __res;                              \
-        }                                                       \
-        if (__sys_res >= (unsigned long)-4095) {                \
-		errno = -__sys_res;				\
-                __sys_res = (unsigned long)-1;                 \
-        }                                                       \
-        __sys_res;                                              \
+/* Assume all syscalls are done from PIC code just to be
+ * safe. The worst case scenario is that you lose a register
+ * and save/restore r19 across the syscall. */
+#define PIC
+
+#ifndef ASM_LINE_SEP
+# define ASM_LINE_SEP ;
+#endif
+
+/* Definition taken from glibc 2.3.3
+ * sysdeps/unix/sysv/linux/hppa/sysdep.h
+ */
+
+#ifdef PIC
+/* WARNING: CANNOT BE USED IN A NOP! */
+# define K_STW_PIC stw %r19, -32(%sr0, %sp) ASM_LINE_SEP
+# define K_LDW_PIC ldw -32(%sr0, %sp), %r19 ASM_LINE_SEP
+# define K_STW_ASM_PIC	"       copy %%r19, %%r4\n"
+# define K_LDW_ASM_PIC	"       copy %%r4, %%r19\n"
+# define K_USING_GR4	"%r4",
+#else
+# define K_STW_PIC ASM_LINE_SEP
+# define K_LDW_PIC ASM_LINE_SEP
+# define K_STW_ASM_PIC	" \n"
+# define K_LDW_ASM_PIC	" \n"
+# define K_USING_GR4
+#endif
+
+/* GCC has to be warned that a syscall may clobber all the ABI
+   registers listed as "caller-saves", see page 8, Table 2
+   in section 2.2.6 of the PA-RISC RUN-TIME architecture
+   document. However! r28 is the result and will conflict with
+   the clobber list so it is left out. Also the input arguments
+   registers r20 -> r26 will conflict with the list so they
+   are treated specially. Although r19 is clobbered by the syscall
+   we cannot say this because it would violate ABI, thus we say
+   r4 is clobbered and use that register to save/restore r19
+   across the syscall. */
+
+#define K_CALL_CLOB_REGS "%r1", "%r2", K_USING_GR4 \
+	        	 "%r20", "%r29", "%r31"
+
+#undef K_INLINE_SYSCALL
+#define K_INLINE_SYSCALL(name, nr, args...)	({			\
+	long __sys_res;							\
+	{								\
+		register unsigned long __res asm("r28");		\
+		K_LOAD_ARGS_##nr(args)					\
+		/* FIXME: HACK stw/ldw r19 around syscall */		\
+		asm volatile(						\
+			K_STW_ASM_PIC					\
+			"	ble  0x100(%%sr2, %%r0)\n"		\
+			"	ldi %1, %%r20\n"			\
+			K_LDW_ASM_PIC					\
+			: "=r" (__res)					\
+			: "i" (SYS_ify(name)) K_ASM_ARGS_##nr   	\
+			: K_CALL_CLOB_REGS K_CLOB_ARGS_##nr		\
+		);							\
+		__sys_res = (long)__res;				\
+	}								\
+	if ( (unsigned long)__sys_res >= (unsigned long)-4095 ){	\
+		errno = -__sys_res);		        		\
+		__sys_res = -1;						\
+	}								\
+	__sys_res;							\
 })
 
 #define K_LOAD_ARGS_0()
-#define K_LOAD_ARGS_1(r26)                                        \
-        register unsigned long __r26 __asm__("r26") = (unsigned long)r26;       \
-        K_LOAD_ARGS_0()
-#define K_LOAD_ARGS_2(r26,r25)                                    \
-        register unsigned long __r25 __asm__("r25") = (unsigned long)r25;       \
-        K_LOAD_ARGS_1(r26)
-#define K_LOAD_ARGS_3(r26,r25,r24)                                \
-        register unsigned long __r24 __asm__("r24") = (unsigned long)r24;       \
-        K_LOAD_ARGS_2(r26,r25)
-#define K_LOAD_ARGS_4(r26,r25,r24,r23)                            \
-        register unsigned long __r23 __asm__("r23") = (unsigned long)r23;       \
-        K_LOAD_ARGS_3(r26,r25,r24)
-#define K_LOAD_ARGS_5(r26,r25,r24,r23,r22)                        \
-        register unsigned long __r22 __asm__("r22") = (unsigned long)r22;       \
-        K_LOAD_ARGS_4(r26,r25,r24,r23)
-#define K_LOAD_ARGS_6(r26,r25,r24,r23,r22,r21)                    \
-        register unsigned long __r21 __asm__("r21") = (unsigned long)r21;       \
-        K_LOAD_ARGS_5(r26,r25,r24,r23,r22)
+#define K_LOAD_ARGS_1(r26)					\
+	register unsigned long __r26 __asm__("r26") = (unsigned long)(r26);   \
+	K_LOAD_ARGS_0()
+#define K_LOAD_ARGS_2(r26,r25)					\
+	register unsigned long __r25 __asm__("r25") = (unsigned long)(r25);   \
+	K_LOAD_ARGS_1(r26)
+#define K_LOAD_ARGS_3(r26,r25,r24)				\
+	register unsigned long __r24 __asm__("r24") = (unsigned long)(r24);   \
+	K_LOAD_ARGS_2(r26,r25)
+#define K_LOAD_ARGS_4(r26,r25,r24,r23)				\
+	register unsigned long __r23 __asm__("r23") = (unsigned long)(r23);   \
+	K_LOAD_ARGS_3(r26,r25,r24)
+#define K_LOAD_ARGS_5(r26,r25,r24,r23,r22)			\
+	register unsigned long __r22 __asm__("r22") = (unsigned long)(r22);   \
+	K_LOAD_ARGS_4(r26,r25,r24,r23)
+#define K_LOAD_ARGS_6(r26,r25,r24,r23,r22,r21)			\
+	register unsigned long __r21 __asm__("r21") = (unsigned long)(r21);   \
+	K_LOAD_ARGS_5(r26,r25,r24,r23,r22)
 
+/* Even with zero args we use r20 for the syscall number */
 #define K_ASM_ARGS_0
-#define K_ASM_ARGS_1 , "r" (__r26)
-#define K_ASM_ARGS_2 , "r" (__r26), "r" (__r25)
-#define K_ASM_ARGS_3 , "r" (__r26), "r" (__r25), "r" (__r24)
-#define K_ASM_ARGS_4 , "r" (__r26), "r" (__r25), "r" (__r24), "r" (__r23)
-#define K_ASM_ARGS_5 , "r" (__r26), "r" (__r25), "r" (__r24), "r" (__r23), "r" (__r22)
-#define K_ASM_ARGS_6 , "r" (__r26), "r" (__r25), "r" (__r24), "r" (__r23), "r" (__r22), "r" (__r21)
+#define K_ASM_ARGS_1 K_ASM_ARGS_0, "r" (__r26)
+#define K_ASM_ARGS_2 K_ASM_ARGS_1, "r" (__r25)
+#define K_ASM_ARGS_3 K_ASM_ARGS_2, "r" (__r24)
+#define K_ASM_ARGS_4 K_ASM_ARGS_3, "r" (__r23)
+#define K_ASM_ARGS_5 K_ASM_ARGS_4, "r" (__r22)
+#define K_ASM_ARGS_6 K_ASM_ARGS_5, "r" (__r21)
+
+/* The registers not listed as inputs but clobbered */
+#define K_CLOB_ARGS_6
+#define K_CLOB_ARGS_5 K_CLOB_ARGS_6, "%r21"
+#define K_CLOB_ARGS_4 K_CLOB_ARGS_5, "%r22"
+#define K_CLOB_ARGS_3 K_CLOB_ARGS_4, "%r23"
+#define K_CLOB_ARGS_2 K_CLOB_ARGS_3, "%r24"
+#define K_CLOB_ARGS_1 K_CLOB_ARGS_2, "%r25"
+#define K_CLOB_ARGS_0 K_CLOB_ARGS_1, "%r26"
 
-#define _syscall0(type,name)						      \
-type name(void)								      \
-{									      \
-    return K_INLINE_SYSCALL(name, 0);	\
+#define _syscall0(type,name)						\
+type name(void)								\
+{									\
+    return K_INLINE_SYSCALL(name, 0);	                                \
 }
 
-#define _syscall1(type,name,type1,arg1)					      \
-type name(type1 arg1)							      \
-{									      \
-    return K_INLINE_SYSCALL(name, 1, arg1);	\
+#define _syscall1(type,name,type1,arg1)					\
+type name(type1 arg1)							\
+{									\
+    return K_INLINE_SYSCALL(name, 1, arg1);	                        \
 }
 
-#define _syscall2(type,name,type1,arg1,type2,arg2)			      \
-type name(type1 arg1, type2 arg2)					      \
-{									      \
-    return K_INLINE_SYSCALL(name, 2, arg1, arg2);	\
+#define _syscall2(type,name,type1,arg1,type2,arg2)			\
+type name(type1 arg1, type2 arg2)					\
+{									\
+    return K_INLINE_SYSCALL(name, 2, arg1, arg2);	                \
 }
 
-#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3)		      \
-type name(type1 arg1, type2 arg2, type3 arg3)				      \
-{									      \
-    return K_INLINE_SYSCALL(name, 3, arg1, arg2, arg3);	\
+#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3)		\
+type name(type1 arg1, type2 arg2, type3 arg3)				\
+{									\
+    return K_INLINE_SYSCALL(name, 3, arg1, arg2, arg3);	                \
 }
 
-#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4)      \
-type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4)		      \
-{									      \
-    return K_INLINE_SYSCALL(name, 4, arg1, arg2, arg3, arg4);	\
+#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \
+type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4)		\
+{									\
+    return K_INLINE_SYSCALL(name, 4, arg1, arg2, arg3, arg4);	        \
 }
 
 /* select takes 5 arguments */
@@ -829,13 +881,11 @@
 
 
 /* mmap & mmap2 take 6 arguments */
-
 #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5,type6,arg6) \
 type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6) \
-{									\
+{									        \
     return K_INLINE_SYSCALL(name, 6, arg1, arg2, arg3, arg4, arg5, arg6);	\
 }
-
 
 #ifdef __KERNEL_SYSCALLS__
 
diff -Nru a/include/asm-parisc/unwind.h b/include/asm-parisc/unwind.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/include/asm-parisc/unwind.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,72 @@
+#ifndef _UNWIND_H_
+#define _UNWIND_H_
+
+/* From ABI specifications */
+struct unwind_table_entry {
+	unsigned int region_start;
+	unsigned int region_end;
+	unsigned int Cannot_unwind:1; /* 0 */
+	unsigned int Millicode:1;	/* 1 */
+	unsigned int Millicode_save_sr0:1;	/* 2 */
+	unsigned int Region_description:2;	/* 3..4 */
+	unsigned int reserved1:1;	/* 5 */
+	unsigned int Entry_SR:1;	/* 6 */
+	unsigned int Entry_FR:4;	/* number saved *//* 7..10 */
+	unsigned int Entry_GR:5;	/* number saved *//* 11..15 */
+	unsigned int Args_stored:1;	/* 16 */
+	unsigned int Variable_Frame:1;	/* 17 */
+	unsigned int Separate_Package_Body:1;	/* 18 */
+	unsigned int Frame_Extension_Millicode:1;	/* 19 */
+	unsigned int Stack_Overflow_Check:1;	/* 20 */
+	unsigned int Two_Instruction_SP_Increment:1;	/* 21 */
+	unsigned int Ada_Region:1;	/* 22 */
+	unsigned int cxx_info:1;	/* 23 */
+	unsigned int cxx_try_catch:1;	/* 24 */
+	unsigned int sched_entry_seq:1;	/* 25 */
+	unsigned int reserved2:1;	/* 26 */
+	unsigned int Save_SP:1;	/* 27 */
+	unsigned int Save_RP:1;	/* 28 */
+	unsigned int Save_MRP_in_frame:1;	/* 29 */
+	unsigned int extn_ptr_defined:1;	/* 30 */
+	unsigned int Cleanup_defined:1;	/* 31 */
+	
+	unsigned int MPE_XL_interrupt_marker:1;	/* 0 */
+	unsigned int HP_UX_interrupt_marker:1;	/* 1 */
+	unsigned int Large_frame:1;	/* 2 */
+	unsigned int Pseudo_SP_Set:1;	/* 3 */
+	unsigned int reserved4:1;	/* 4 */
+	unsigned int Total_frame_size:27;	/* 5..31 */
+};
+
+struct unwind_table {
+	struct unwind_table *next;
+	const char *name;
+	unsigned long gp;
+	unsigned long base_addr;
+	unsigned long start;
+	unsigned long end;
+	const struct unwind_table_entry *table;
+	unsigned long length;
+};
+
+struct unwind_frame_info {
+	unsigned long sp;
+	unsigned long ip;
+	struct task_struct *t;
+	/* Eventually we would like to be able to get at any of the registers
+	   available; but for now we only try to get the sp and ip for each
+	   frame */
+	/* struct pt_regs regs; */
+	unsigned long prev_sp, prev_ip;
+};
+
+void * unwind_table_add(const char *name, unsigned long base_addr, 
+		 unsigned long gp,
+                 const void *start, const void *end);
+void unwind_frame_init(struct unwind_frame_info *info, struct task_struct *t, 
+		       struct pt_regs *regs);
+void unwind_frame_init_from_blocked_task(struct unwind_frame_info *info, struct task_struct *t);
+int unwind_once(struct unwind_frame_info *info);
+int unwind_to_user(struct unwind_frame_info *info);
+
+#endif
diff -Nru a/include/asm-ppc/atomic.h b/include/asm-ppc/atomic.h
--- a/include/asm-ppc/atomic.h	Sun May 16 01:18:34 2004
+++ b/include/asm-ppc/atomic.h	Sun May 16 01:18:34 2004
@@ -134,6 +134,16 @@
 	return t;
 }
 
+/*
+ * atomic_inc_and_test - increment and test
+ * @v: pointer of type atomic_t
+ *
+ * Atomically increments @v by 1
+ * and returns true if the result is zero, or false for all
+ * other cases.
+ */
+#define atomic_inc_and_test(v) (atomic_inc_return(v) == 0)
+
 static __inline__ void atomic_dec(atomic_t *v)
 {
 	int t;
diff -Nru a/include/asm-ppc/cacheflush.h b/include/asm-ppc/cacheflush.h
--- a/include/asm-ppc/cacheflush.h	Sun May 16 01:18:36 2004
+++ b/include/asm-ppc/cacheflush.h	Sun May 16 01:18:36 2004
@@ -41,6 +41,6 @@
 
 extern void __flush_dcache_icache(void *page_va);
 extern void __flush_dcache_icache_phys(unsigned long physaddr);
-
+extern void flush_dcache_icache_page(struct page *page);
 #endif /* _PPC_CACHEFLUSH_H */
 #endif /* __KERNEL__ */
diff -Nru a/include/asm-ppc/ibm44x.h b/include/asm-ppc/ibm44x.h
--- a/include/asm-ppc/ibm44x.h	Sun May 16 01:18:36 2004
+++ b/include/asm-ppc/ibm44x.h	Sun May 16 01:18:36 2004
@@ -19,25 +19,6 @@
 
 #include <linux/config.h>
 
-#ifndef __ASSEMBLY__
-/*
- * Data structure defining board information maintained by the boot
- * ROM on IBM's "Ebony" evaluation board. An effort has been made to
- * keep the field names consistent with the 8xx 'bd_t' board info
- * structures.
- *
- * Ebony firmware stores MAC addresses in the F/W VPD area. The
- * firmware must store the other dynamic values in NVRAM like on
- * the previous 40x systems so they  should be accessible if we
- * really want them.
- */
-typedef struct board_info {
-	unsigned char	bi_enetaddr[2][6];	/* EMAC addresses */
-	unsigned int	bi_opb_busfreq;		/* OPB clock in Hz */
-	int		bi_iic_fast[2];		/* Use fast i2c mode */
-} bd_t;
-#endif /* __ASSEMBLY__ */
-
 #ifndef NR_BOARD_IRQS
 #define NR_BOARD_IRQS 0
 #endif
@@ -87,11 +68,35 @@
  */
 
 #ifdef CONFIG_440GX
+/* CPRs */
+#define DCRN_CPR_CONFIG_ADDR	0xc
+#define DCRN_CPR_CONFIG_DATA	0xd
+
+#define DCRN_CPR_CLKUPD		0x0020
+#define DCRN_CPR_PLLC		0x0040
+#define DCRN_CPR_PLLD		0x0060
+#define DCRN_CPR_PRIMAD		0x0080
+#define DCRN_CPR_PRIMBD		0x00a0
+#define DCRN_CPR_OPBD		0x00c0
+#define DCRN_CPR_PERD		0x00e0
+#define DCRN_CPR_MALD		0x0100
+
+/* CPRs read/write helper macros */
+#define CPR_READ(offset) ({\
+	mtdcr(DCRN_CPR_CONFIG_ADDR, offset); \
+	mfdcr(DCRN_CPR_CONFIG_DATA);})
+#define CPR_WRITE(offset, data) ({\
+	mtdcr(DCRN_CPR_CONFIG_ADDR, offset); \
+	mtdcr(DCRN_CPR_CONFIG_DATA, data);})
+
 /* SDRs */
 #define DCRN_SDR_CONFIG_ADDR 	0xe
 #define DCRN_SDR_CONFIG_DATA	0xf
 #define DCRN_SDR_PFC0		0x4100
 #define DCRN_SDR_PFC1		0x4101
+#define DCRN_SDR_PFC1_EPS	0x1c000000
+#define DCRN_SDR_PFC1_EPS_SHIFT	26
+#define DCRN_SDR_PFC1_RMII	0x02000000
 #define DCRN_SDR_MFR		0x4300
 #define DCRN_SDR_MFR_TAH0 	0x80000000  	/* TAHOE0 Enable */
 #define DCRN_SDR_MFR_TAH1 	0x40000000  	/* TAHOE1 Enable */
@@ -117,6 +122,8 @@
 #define DCRN_SDR_MFR_E3TXFH	0x00000004
 #define DCRN_SDR_MFR_E3RXFL	0x00000002
 #define DCRN_SDR_MFR_E3RXFH	0x00000001
+#define DCRN_SDR_UART0		0x0120
+#define DCRN_SDR_UART1		0x0121
 
 /* SDR read/write helper macros */
 #define SDR_READ(offset) ({\
@@ -139,8 +146,12 @@
 /* UIC */
 #define DCRN_UIC0_BASE	0xc0
 #define DCRN_UIC1_BASE	0xd0
+#define DCRN_UIC2_BASE	0x210
+#define DCRN_UICB_BASE	0x200
 #define UIC0		DCRN_UIC0_BASE
 #define UIC1		DCRN_UIC1_BASE
+#define UIC2		DCRN_UIC2_BASE
+#define UICB		DCRN_UICB_BASE
 
 #define DCRN_UIC_SR(base)       (base + 0x0)
 #define DCRN_UIC_ER(base)       (base + 0x2)
@@ -151,8 +162,12 @@
 #define DCRN_UIC_VR(base)       (base + 0x7)
 #define DCRN_UIC_VCR(base)      (base + 0x8)
 
-#define UIC0_UIC1NC      30	/* UIC1 non-critical interrupt */
-#define UIC0_UIC1CR      31	/* UIC1 critical interrupt */
+#define UIC0_UIC1NC		30	/* UIC1 non-critical interrupt */
+#define UIC0_UIC1CR      	31	/* UIC1 critical interrupt */
+
+#define UICB_UIC0NC		0x40000000
+#define UICB_UIC1NC		0x10000000
+#define UICB_UIC2NC		0x04000000
 
 /* 440GP MAL DCRs */
 #define DCRN_MALCR(base)		(base + 0x0)	/* Configuration */
@@ -327,6 +342,81 @@
 #define PPC44x_MEM_SIZE_256M		0x10000000
 #define PPC44x_MEM_SIZE_512M		0x20000000
 
+#ifdef CONFIG_440GX
+/* Internal SRAM Controller */
+#define DCRN_SRAM0_SB0CR	0x020
+#define DCRN_SRAM0_SB1CR	0x021
+#define DCRN_SRAM0_SB2CR	0x022
+#define DCRN_SRAM0_SB3CR	0x023
+#define  SRAM_SBCR_BAS0		0x80000000
+#define  SRAM_SBCR_BAS1		0x80010000
+#define  SRAM_SBCR_BAS2		0x80020000
+#define  SRAM_SBCR_BAS3		0x80030000
+#define  SRAM_SBCR_BU_MASK	0x00000180
+#define  SRAM_SBCR_BS_64KB	0x00000800
+#define  SRAM_SBCR_BU_RO	0x00000080
+#define  SRAM_SBCR_BU_RW	0x00000180
+#define DCRN_SRAM0_BEAR		0x024
+#define DCRN_SRAM0_BESR0	0x025
+#define DCRN_SRAM0_BESR1	0x026
+#define DCRN_SRAM0_PMEG		0x027
+#define DCRN_SRAM0_CID		0x028
+#define DCRN_SRAM0_REVID	0x029
+#define DCRN_SRAM0_DPC		0x02a
+#define  SRAM_DPC_ENABLE	0x80000000
+
+/* L2 Cache Controller */
+#define DCRN_L2C0_CFG		0x030
+#define  L2C_CFG_L2M		0x80000000
+#define  L2C_CFG_ICU		0x40000000
+#define  L2C_CFG_DCU		0x20000000
+#define  L2C_CFG_DCW_MASK	0x1e000000
+#define  L2C_CFG_TPC		0x01000000
+#define  L2C_CFG_CPC		0x00800000
+#define  L2C_CFG_FRAN		0x00200000
+#define  L2C_CFG_SS_MASK	0x00180000
+#define  L2C_CFG_SS_256		0x00000000
+#define  L2C_CFG_CPIM		0x00040000
+#define  L2C_CFG_TPIM		0x00020000
+#define  L2C_CFG_LIM		0x00010000
+#define  L2C_CFG_PMUX_MASK	0x00007000
+#define  L2C_CFG_PMUX_SNP	0x00000000
+#define  L2C_CFG_PMUX_IF	0x00001000
+#define  L2C_CFG_PMUX_DF	0x00002000
+#define  L2C_CFG_PMUX_DS	0x00003000
+#define  L2C_CFG_PMIM		0x00000800
+#define  L2C_CFG_TPEI		0x00000400
+#define  L2C_CFG_CPEI		0x00000200
+#define  L2C_CFG_NAM		0x00000100
+#define  L2C_CFG_SMCM		0x00000080
+#define  L2C_CFG_NBRM		0x00000040
+#define DCRN_L2C0_CMD		0x031
+#define  L2C_CMD_CLR		0x80000000
+#define  L2C_CMD_DIAG		0x40000000
+#define  L2C_CMD_INV		0x20000000
+#define  L2C_CMD_CCP		0x10000000
+#define  L2C_CMD_CTE		0x08000000
+#define  L2C_CMD_STRC		0x04000000
+#define  L2C_CMD_STPC		0x02000000
+#define  L2C_CMD_RPMC		0x01000000
+#define  L2C_CMD_HCC		0x00800000
+#define DCRN_L2C0_ADDR		0x032
+#define DCRN_L2C0_DATA		0x033
+#define DCRN_L2C0_SR		0x034
+#define  L2C_SR_CC		0x80000000
+#define  L2C_SR_CPE		0x40000000
+#define  L2C_SR_TPE		0x20000000
+#define  L2C_SR_LRU		0x10000000
+#define  L2C_SR_PCS		0x08000000
+#define DCRN_L2C0_REVID		0x035
+#define DCRN_L2C0_SNP0		0x036
+#define DCRN_L2C0_SNP1		0x037
+#define  L2C_SNP_BA_MASK	0xffff0000
+#define  L2C_SNP_SSR_MASK	0x0000f000
+#define  L2C_SNP_SSR_32G	0x0000f000
+#define  L2C_SNP_ESR		0x00000800
+#endif /* CONFIG_440GX */
+
 /*
  * PCI-X definitions
  */
@@ -423,7 +513,11 @@
 #define IIC_CLOCK		50
 
 #undef NR_UICS
+#ifdef CONFIG_440GX
+#define NR_UICS 3
+#else
 #define NR_UICS 2
+#endif
 #define UIC_CASCADE_MASK	0x0003		/* bits 30 & 31 */
 
 #define BD_EMAC_ADDR(e,i) bi_enetaddr[e][i]
diff -Nru a/include/asm-ppc/ibm4xx.h b/include/asm-ppc/ibm4xx.h
--- a/include/asm-ppc/ibm4xx.h	Sun May 16 01:18:35 2004
+++ b/include/asm-ppc/ibm4xx.h	Sun May 16 01:18:35 2004
@@ -15,6 +15,7 @@
 #define __ASM_IBM4XX_H__
 
 #include <linux/config.h>
+#include <asm/types.h>
 
 #ifdef CONFIG_40x
 
@@ -22,8 +23,8 @@
 #include <platforms/4xx/ash.h>
 #endif
 
-#if defined (CONFIG_CEDAR)
-#include <platforms/4xx/cedar.h>
+#if defined(CONFIG_BUBINGA)
+#include <platforms/4xx/bubinga.h>
 #endif
 
 #if defined(CONFIG_CPCI405)
@@ -46,17 +47,27 @@
 #include <platforms/4xx/redwood5.h>
 #endif
 
+#if defined(CONFIG_REDWOOD_6)
+#include <platforms/4xx/redwood6.h>
+#endif
+
+#if defined(CONFIG_SYCAMORE)
+#include <platforms/4xx/sycamore.h>
+#endif
+
 #if defined(CONFIG_WALNUT)
 #include <platforms/4xx/walnut.h>
 #endif
 
 #ifndef __ASSEMBLY__
 
+#ifdef CONFIG_40x
 /*
  * The "residual" board information structure the boot loader passes
  * into the kernel.
  */
 extern bd_t __res;
+#endif
 
 void ppc4xx_setup_arch(void);
 void ppc4xx_map_io(void);
@@ -91,11 +102,13 @@
 #endif
 
 #ifndef __ASSEMBLY__
+#ifdef CONFIG_40x
 /*
  * The "residual" board information structure the boot loader passes
  * into the kernel.
  */
 extern bd_t __res;
+#endif
 #endif
 #endif /* CONFIG_40x */
 
diff -Nru a/include/asm-ppc/ibm_ocp.h b/include/asm-ppc/ibm_ocp.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/include/asm-ppc/ibm_ocp.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,163 @@
+/*
+ * ibm_ocp.h
+ *
+ *      (c) Benjamin Herrenschmidt (benh@kernel.crashing.org)
+ *          Mipsys - France
+ *
+ *          Derived from work (c) Armin Kuster akuster@pacbell.net
+ *
+ *          Additional support and port to 2.6 LDM/sysfs by
+ *          Matt Porter <mporter@kernel.crashing.org>
+ *          Copyright 2003-2004 MontaVista Software, Inc.
+ *
+ * This program is free software; you can redistribute  it and/or modify it
+ * under  the terms of  the GNU General  Public License as published by the
+ * Free Software Foundation;  either version 2 of the  License, or (at your
+ * option) any later version.
+ *
+ */
+#ifdef __KERNEL__
+#ifndef __IBM_OCP_H__
+#define __IBM_OCP_H__
+
+#include <asm/types.h>
+
+/*
+ * IBM 4xx OCP system information
+ */
+struct ocp_sys_info_data {
+	int	opb_bus_freq;	/* OPB Bus Frequency (Hz) */
+	int	ebc_bus_freq;	/* EBC Bus Frequency (Hz) */
+};
+
+extern struct ocp_sys_info_data ocp_sys_info;
+
+/*
+ * EMAC additional data and sysfs support
+ *
+ * Note about mdio_idx: When you have a zmii, it's usually
+ * not necessary, it covers the case of the 405EP which has
+ * the MDIO lines on EMAC0 only
+ *
+ * Note about phy_map: Per EMAC map of PHY ids which should
+ * be probed by emac_probe. Different EMACs can have
+ * overlapping maps.
+ *
+ * Note, this map uses inverse logic for bits:
+ *  0 - id should be probed
+ *  1 - id should be ignored
+ *
+ * Default value of 0x00000000 - will result in usual
+ * auto-detection logic.
+ *
+ */
+
+struct ocp_func_emac_data {
+	int	rgmii_idx;	/* RGMII device index or -1 */
+	int	rgmii_mux;	/* RGMII input of this EMAC */
+	int	zmii_idx;	/* ZMII device index or -1 */
+	int	zmii_mux;	/* ZMII input of this EMAC */
+	int	mal_idx;	/* MAL device index */
+	int	mal_rx_chan;	/* MAL rx channel number */
+	int	mal_tx_chan;	/* MAL tx channel number */
+	int	wol_irq;	/* WOL interrupt */
+	int	mdio_idx;	/* EMAC idx of MDIO master or -1 */
+	int	tah_idx;	/* TAH device index or -1 */
+	int	jumbo;		/* Jumbo frames capable flag */
+	int	phy_mode;	/* PHY type or configurable mode */
+	u8	mac_addr[6];	/* EMAC mac address */
+	u32	phy_map;	/* EMAC phy map */
+};
+
+/* Sysfs support */
+#define OCP_SYSFS_EMAC_DATA()						\
+OCP_SYSFS_ADDTL(struct ocp_func_emac_data, "%d\n", emac, zmii_idx)	\
+OCP_SYSFS_ADDTL(struct ocp_func_emac_data, "%d\n", emac, zmii_mux)	\
+OCP_SYSFS_ADDTL(struct ocp_func_emac_data, "%d\n", emac, mal_idx)	\
+OCP_SYSFS_ADDTL(struct ocp_func_emac_data, "%d\n", emac, mal_rx_chan)	\
+OCP_SYSFS_ADDTL(struct ocp_func_emac_data, "%d\n", emac, mal_tx_chan)	\
+OCP_SYSFS_ADDTL(struct ocp_func_emac_data, "%d\n", emac, wol_irq)	\
+OCP_SYSFS_ADDTL(struct ocp_func_emac_data, "%d\n", emac, mdio_idx)	\
+									\
+void ocp_show_emac_data(struct device *dev)				\
+{									\
+	device_create_file(dev, &dev_attr_emac_zmii_idx);		\
+	device_create_file(dev, &dev_attr_emac_zmii_mux);		\
+	device_create_file(dev, &dev_attr_emac_mal_idx);		\
+	device_create_file(dev, &dev_attr_emac_mal_rx_chan);		\
+	device_create_file(dev, &dev_attr_emac_mal_tx_chan);		\
+	device_create_file(dev, &dev_attr_emac_wol_irq);		\
+	device_create_file(dev, &dev_attr_emac_mdio_idx);		\
+}
+
+#ifdef CONFIG_40x
+/*
+ * Helper function to copy MAC addresses from the bd_t to OCP EMAC
+ * additions.
+ *
+ * The range of EMAC indices (inclusive) to be copied are the arguments.
+ */
+static inline void ibm_ocp_set_emac(int start, int end)
+{
+	int i;
+	struct ocp_def *def;
+
+	/* Copy MAC addresses to EMAC additions */
+	for (i=start; i<=end; i++) {
+		def = ocp_get_one_device(OCP_VENDOR_IBM, OCP_FUNC_EMAC, i);
+		memcpy(((struct ocp_func_emac_data *)def->additions)->mac_addr,
+				&__res.bi_enetaddr[i],
+				6);
+	}
+}
+#endif
+
+/*
+ * MAL additional data and sysfs support
+ */
+struct ocp_func_mal_data {
+	int	num_tx_chans;	/* Number of TX channels */
+	int	num_rx_chans;	/* Number of RX channels */
+	int 	txeob_irq;	/* TX End Of Buffer IRQ  */
+	int 	rxeob_irq;	/* RX End Of Buffer IRQ  */
+	int	txde_irq;	/* TX Descriptor Error IRQ */
+	int	rxde_irq;	/* RX Descriptor Error IRQ */
+	int	serr_irq;	/* MAL System Error IRQ    */
+};
+
+#define OCP_SYSFS_MAL_DATA()						\
+OCP_SYSFS_ADDTL(struct ocp_func_mal_data, "%d\n", mal, num_tx_chans)	\
+OCP_SYSFS_ADDTL(struct ocp_func_mal_data, "%d\n", mal, num_rx_chans)	\
+OCP_SYSFS_ADDTL(struct ocp_func_mal_data, "%d\n", mal, txeob_irq)	\
+OCP_SYSFS_ADDTL(struct ocp_func_mal_data, "%d\n", mal, rxeob_irq)	\
+OCP_SYSFS_ADDTL(struct ocp_func_mal_data, "%d\n", mal, txde_irq)	\
+OCP_SYSFS_ADDTL(struct ocp_func_mal_data, "%d\n", mal, rxde_irq)	\
+OCP_SYSFS_ADDTL(struct ocp_func_mal_data, "%d\n", mal, serr_irq)	\
+									\
+void ocp_show_mal_data(struct device *dev)				\
+{									\
+	device_create_file(dev, &dev_attr_mal_num_tx_chans);		\
+	device_create_file(dev, &dev_attr_mal_num_rx_chans);		\
+	device_create_file(dev, &dev_attr_mal_txeob_irq);		\
+	device_create_file(dev, &dev_attr_mal_rxeob_irq);		\
+	device_create_file(dev, &dev_attr_mal_txde_irq);		\
+	device_create_file(dev, &dev_attr_mal_rxde_irq);		\
+	device_create_file(dev, &dev_attr_mal_serr_irq);		\
+}
+
+/*
+ * IIC additional data and sysfs support
+ */
+struct ocp_func_iic_data {
+	int	fast_mode;	/* IIC fast mode enabled */
+};
+
+#define OCP_SYSFS_IIC_DATA()						\
+OCP_SYSFS_ADDTL(struct ocp_func_iic_data, "%d\n", iic, fast_mode)	\
+									\
+void ocp_show_iic_data(struct device *dev)				\
+{									\
+	device_create_file(dev, &dev_attr_iic_fast_mode);			\
+}
+#endif /* __IBM_OCP_H__ */
+#endif /* __KERNEL__ */
diff -Nru a/include/asm-ppc/ocp.h b/include/asm-ppc/ocp.h
--- a/include/asm-ppc/ocp.h	Sun May 16 01:18:34 2004
+++ b/include/asm-ppc/ocp.h	Sun May 16 01:18:34 2004
@@ -1,103 +1,116 @@
 /*
  * ocp.h
  *
+ *      (c) Benjamin Herrenschmidt (benh@kernel.crashing.org)
+ *          Mipsys - France
  *
- * 	Current Maintainer
- *      Armin Kuster akuster@pacbell.net
- *      Jan, 2002
- *
+ *          Derived from work (c) Armin Kuster akuster@pacbell.net
  *
+ *          Additional support and port to 2.6 LDM/sysfs by
+ *          Matt Porter <mporter@kernel.crashing.org>
+ *          Copyright 2003-2004 MontaVista Software, Inc.
  *
  * This program is free software; you can redistribute  it and/or modify it
- *  under  the terms of  the GNU General  Public License as published by the
- *  Free Software Foundation;  either version 2 of the  License, or (at your
- *  option) any later version.
- *
- *  THIS  SOFTWARE  IS PROVIDED   ``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  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.
- *
- *  You should have received a copy of the  GNU General Public License along
- *  with this program; if not, write  to the Free Software Foundation, Inc.,
- *  675 Mass Ave, Cambridge, MA 02139, USA.
+ * under  the terms of  the GNU General  Public License as published by the
+ * Free Software Foundation;  either version 2 of the  License, or (at your
+ * option) any later version.
+ *
+ *  TODO: - Add get/put interface & fixup locking to provide same API for
+ *          2.4 and 2.5
+ *	  - Rework PM callbacks
  */
 
 #ifdef __KERNEL__
 #ifndef __OCP_H__
 #define __OCP_H__
 
+#include <linux/init.h>
 #include <linux/list.h>
 #include <linux/config.h>
+#include <linux/devfs_fs_kernel.h>
 #include <linux/device.h>
-#include <linux/errno.h>
 
+#include <asm/mmu.h>
 #include <asm/ocp_ids.h>
-#include <asm/mmu.h>		/* For phys_addr_t */
-#undef DEBUG
-/* #define DEBUG*/
+#include <asm/rwsem.h>
+#include <asm/semaphore.h>
 
-#ifdef DEBUG
-#define DBG(x...) printk(x)
-#else
-#define DBG(x...)
-#endif
+#ifdef CONFIG_PPC_OCP
 
+#define OCP_MAX_IRQS	7
+#define MAX_EMACS	4
 #define OCP_IRQ_NA	-1	/* used when ocp device does not have an irq */
-#define OCP_IRQ_MUL	-2	/* used for ocp devices with multiple irqs */
-#define OCP_NULL_TYPE	0	/* used to mark end of list */
-#define OCP_DEV_NA	-1
+#define OCP_IRQ_MUL	-2	/* used for ocp devices with multiply irqs */
+#define OCP_NULL_TYPE	-1	/* used to mark end of list */
 #define OCP_CPM_NA	0	/* No Clock or Power Management avaliable */
+#define OCP_PADDR_NA	0	/* No MMIO registers */
 
 #define OCP_ANY_ID	(~0)
+#define OCP_ANY_INDEX	-1
 
-
-extern struct list_head ocp_root_buses;
-extern struct list_head ocp_devices;
+extern struct list_head 	ocp_devices;
+extern struct rw_semaphore	ocp_devices_sem;
 
 struct ocp_device_id {
-	unsigned int vendor, device;		/* Vendor and device ID or PCI_ANY_ID */
-	char name[16];
-	char desc[50];
-	unsigned long driver_data;		/* Data private to the driver */
+	unsigned int	vendor, function;	/* Vendor and function ID or OCP_ANY_ID */
+	unsigned long	driver_data;		/* Data private to the driver */
 };
 
-struct func_info {
-	char name[16];
-	char desc[50];
-};
 
+/*
+ * Static definition of an OCP device.
+ *
+ * @vendor:    Vendor code. It is _STRONGLY_ discouraged to use
+ *             the vendor code as a way to match a unique device,
+ *             though I kept that possibility open, you should
+ *             really define different function codes for different
+ *             device types
+ * @function:  This is the function code for this device.
+ * @index:     This index is used for mapping the Nth function of a
+ *             given core. This is typically used for cross-driver
+ *             matching, like looking for a given MAL or ZMII from
+ *             an EMAC or for getting to the proper set of DCRs.
+ *             Indices are no longer magically calculated based on
+ *             structure ordering, they have to be actually coded
+ *             into the ocp_def to avoid any possible confusion
+ *             I _STRONGLY_ (again ? wow !) encourage anybody relying
+ *             on index mapping to encode the "target" index in an
+ *             associated structure pointed to by "additions", see
+ *             how it's done for the EMAC driver.
+ * @paddr:     Device physical address (may not mean anything...)
+ * @irq:       Interrupt line for this device (TODO: think about making
+ *             an array with this)
+ * @pm:        Currently, contains the bitmask in CPMFR DCR for the device
+ * @additions: Optionally points to a function specific structure
+ *             providing additional informations for a given device
+ *             instance. It's currently used by the EMAC driver for MAL
+ *             channel & ZMII port mapping among others.
+ * @show:      Optionally points to a function specific structure
+ *             providing a sysfs show routine for additions fields.
+ */
 struct ocp_def {
-	unsigned int vendor;
-	unsigned int device;
-	phys_addr_t paddr;
-	int irq;
-	unsigned long pm;
+	unsigned int	vendor;
+	unsigned int	function;
+	int		index;
+	phys_addr_t	paddr;
+	int	  	irq;
+	unsigned long	pm;
+	void		*additions;
+	void		(*show)(struct device *);
 };
 
 
-/* Struct for single ocp device managment */
+/* Struct for a given device instance */
 struct ocp_device {
-	struct list_head global_list;
-	unsigned int	num;		/* instance of device */
-	char		name[80];	/* device name */
-	unsigned int vendor;
-	unsigned int device;
-	phys_addr_t paddr;
-	int irq;
-	unsigned long pm;
-	void *ocpdev;		/* driver data for this device */
-	struct ocp_driver *driver;
-	u32 current_state;	/* Current operating state. In ACPI-speak,
-				   this is D0-D3, D0 being fully functional,
-				   and D3 being off. */
-	struct device dev;
+	struct list_head	link;
+	char			name[80];	/* device name */
+	struct ocp_def		*def;		/* device definition */
+	void			*drvdata;	/* driver data for this device */
+	struct ocp_driver	*driver;
+	u32			current_state;	/* Current operating state. In ACPI-speak,
+						   this is D0-D3, D0 being fully functional,
+						   and D3 being off. */
+	struct			device dev;
 };
 
 struct ocp_driver {
@@ -106,23 +119,13 @@
 	const struct ocp_device_id *id_table;	/* NULL if wants all devices */
 	int  (*probe)  (struct ocp_device *dev);	/* New device inserted */
 	void (*remove) (struct ocp_device *dev);	/* Device removed (NULL if not a hot-plug capable driver) */
-	int  (*save_state) (struct ocp_device *dev, u32 state);    /* Save Device Context */
 	int  (*suspend) (struct ocp_device *dev, u32 state);	/* Device suspended */
 	int  (*resume) (struct ocp_device *dev);	                /* Device woken up */
-	int  (*enable_wake) (struct ocp_device *dev, u32 state, int enable);   /* Enable wake event */
 	struct device_driver driver;
 };
 
-#define	to_ocp_dev(n) container_of(n, struct ocp_device, dev)
-#define	to_ocp_driver(n) container_of(n, struct ocp_driver, driver)
-
-extern int ocp_register_driver(struct ocp_driver *drv);
-extern void ocp_unregister_driver(struct ocp_driver *drv);
-
-#define ocp_dev_g(n) list_entry(n, struct ocp_device, global_list)
-
-#define ocp_for_each_dev(dev) \
-	for(dev = ocp_dev_g(ocp_devices.next); dev != ocp_dev_g(&ocp_devices); dev = ocp_dev_g(dev->global_list.next))
+#define to_ocp_dev(n) container_of(n, struct ocp_device, dev)
+#define to_ocp_drv(n) container_of(n, struct ocp_driver, driver)
 
 /* Similar to the helpers above, these manipulate per-ocp_dev
  * driver-specific data.  Currently stored as ocp_dev::ocpdev,
@@ -131,45 +134,13 @@
 static inline void *
 ocp_get_drvdata(struct ocp_device *pdev)
 {
-	return pdev->ocpdev;
+	return pdev->drvdata;
 }
 
 static inline void
 ocp_set_drvdata(struct ocp_device *pdev, void *data)
 {
-	pdev->ocpdev = data;
-}
-
-/*
- * a helper function which helps ensure correct pci_driver
- * setup and cleanup for commonly-encountered hotplug/modular cases
- *
- * This MUST stay in a header, as it checks for -DMODULE
- */
-static inline int ocp_module_init(struct ocp_driver *drv)
-{
-	int rc = ocp_register_driver(drv);
-
-	if (rc > 0)
-		return 0;
-
-	/* iff CONFIG_HOTPLUG and built into kernel, we should
-	 * leave the driver around for future hotplug events.
-	 * For the module case, a hotplug daemon of some sort
-	 * should load a module in response to an insert event. */
-#if defined(CONFIG_HOTPLUG) && !defined(MODULE)
-	if (rc == 0)
-		return 0;
-#else
-	if (rc == 0)
-		rc = -ENODEV;		
-#endif
-
-	/* if we get here, we need to clean up pci driver instance
-	 * and return some sort of error */
-	ocp_unregister_driver (drv);
-	
-	return rc;
+	pdev->drvdata = data;
 }
 
 #if defined (CONFIG_PM)
@@ -180,26 +151,57 @@
 static inline void
 ocp_force_power_off(struct ocp_device *odev)
 {
-	mtdcr(DCRN_CPMFR, mfdcr(DCRN_CPMFR) | odev->pm);
+	mtdcr(DCRN_CPMFR, mfdcr(DCRN_CPMFR) | odev->def->pm);
 }
 
 static inline void
 ocp_force_power_on(struct ocp_device *odev)
 {
-	mtdcr(DCRN_CPMFR, mfdcr(DCRN_CPMFR) & ~odev->pm);
+	mtdcr(DCRN_CPMFR, mfdcr(DCRN_CPMFR) & ~odev->def->pm);
 }
 #else
 #define ocp_force_power_off(x)	(void)(x)
 #define ocp_force_power_on(x)	(void)(x)
 #endif
 
-extern void ocp_init(void);
-extern struct bus_type ocp_bus_type;
-extern struct ocp_device *ocp_get_dev(unsigned int device, int index);
-extern unsigned int ocp_get_num(unsigned int device);
+/* Register/Unregister an OCP driver */
+extern int ocp_register_driver(struct ocp_driver *drv);
+extern void ocp_unregister_driver(struct ocp_driver *drv);
+
+/* Build list of devices */
+extern int ocp_early_init(void) __init;
 
-extern int ocp_generic_suspend(struct ocp_device *pdev, u32 state);
-extern int ocp_generic_resume(struct ocp_device *pdev);
+/* Find a device by index */
+extern struct ocp_device *ocp_find_device(unsigned int vendor, unsigned int function, int index);
+
+/* Get a def by index */
+extern struct ocp_def *ocp_get_one_device(unsigned int vendor, unsigned int function, int index);
+
+/* Add a device by index */
+extern int ocp_add_one_device(struct ocp_def *def);
+
+/* Remove a device by index */
+extern int ocp_remove_one_device(unsigned int vendor, unsigned int function, int index);
+
+/* Iterate over devices and execute a routine */
+extern void ocp_for_each_device(void(*callback)(struct ocp_device *, void *arg), void *arg);
+
+/* Sysfs support */
+#define OCP_SYSFS_ADDTL(type, format, name, field)			\
+static ssize_t								\
+show_##name##_##field(struct device *dev, char *buf)			\
+{									\
+	struct ocp_device *odev = to_ocp_dev(dev);			\
+	type *add = odev->def->additions;				\
+									\
+	return sprintf(buf, format, add->field);			\
+}									\
+static DEVICE_ATTR(name##_##field, S_IRUGO, show_##name##_##field, NULL);
+
+#ifdef CONFIG_IBM_OCP
+#include <asm/ibm_ocp.h>
+#endif
 
+#endif				/* CONFIG_PPC_OCP */
 #endif				/* __OCP_H__ */
 #endif				/* __KERNEL__ */
diff -Nru a/include/asm-ppc/ocp_ids.h b/include/asm-ppc/ocp_ids.h
--- a/include/asm-ppc/ocp_ids.h	Sun May 16 01:18:36 2004
+++ b/include/asm-ppc/ocp_ids.h	Sun May 16 01:18:36 2004
@@ -1,34 +1,15 @@
 /*
- * FILE NAME: ocp_ids.h
+ * ocp_ids.h
  *
- * BRIEF MODULE DESCRIPTION:
  * OCP device ids based on the ideas from PCI
  *
- * Maintained by: Armin <akuster@mvista.com>
+ * The numbers below are almost completely arbitrary, and in fact
+ * strings might work better.  -- paulus
  *
- *
- *  This program is free software; you can redistribute  it and/or modify it
- *  under  the terms of  the GNU General  Public License as published by the
- *  Free Software Foundation;  either version 2 of the  License, or (at your
- *  option) any later version.
- *
- *  THIS  SOFTWARE  IS PROVIDED   ``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  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.
- *
- *  You should have received a copy of the  GNU General Public License along
- *  with this program; if not, write  to the Free Software Foundation, Inc.,
- *  675 Mass Ave, Cambridge, MA 02139, USA.
- *
- *  Version 1.0 08/22/02 -Armin
- *  	initial release
+ * This program is free software; you can redistribute  it and/or modify it
+ * under  the terms of  the GNU General  Public License as published by the
+ * Free Software Foundation;  either version 2 of the  License, or (at your
+ * option) any later version.
  */
 
 /*
@@ -42,8 +23,9 @@
 
 #define	OCP_VENDOR_INVALID	0x0000
 #define	OCP_VENDOR_ARM		0x0004
+#define OCP_VENDOR_FREESCALE	0x1057
 #define OCP_VENDOR_IBM		0x1014
-#define OCP_VENDOR_MOTOROLA	0x1057
+#define OCP_VENDOR_MOTOROLA	OCP_VENDOR_FREESCALE
 #define	OCP_VENDOR_XILINX	0x10ee
 #define	OCP_VENDOR_UNKNOWN	0xFFFF
 
@@ -53,33 +35,20 @@
 #define OCP_FUNC_INVALID	0x0000
 
 /* system 0x0001 - 0x001F */
-#define	OCP_FUNC_UIC		0x0001
 
 /* Timers 0x0020 - 0x002F */
-#define OCP_FUNC_GPT		0x0020 	/* General purpose timers */
-#define OCP_FUNC_RTC		0x0021
 
 /* Serial 0x0030 - 0x006F*/
 #define OCP_FUNC_16550		0x0031
-#define OCP_FUNC_SSP		0x0032 /* sync serial port */
-#define OCP_FUNC_SCP		0x0033 	/* serial controller port */
-#define OCP_FUNC_SCC		0x0034 	/* serial contoller */
-#define OCP_FUNC_SCI		0x0035 	/* Smart card */
-#define OCP_FUNC_IIC		0x0040
-#define OCP_FUNC_USB		0x0050
-#define OCP_FUNC_IR		0x0060	
+#define OCP_FUNC_IIC		0x0032
+#define OCP_FUNC_USB		0x0033
 
 /* Memory devices 0x0090 - 0x009F */
-#define	OCP_FUNC_SDRAM		0x0091
-#define OCP_FUNC_DMA		0x0092
+#define OCP_FUNC_MAL		0x0090
 
 /* Display 0x00A0 - 0x00AF */
-#define OCP_FUNC_VIDEO		0x00A0
-#define OCP_FUNC_LED		0x00A1
-#define	OCP_FUNC_LCD		0x00A2
 
 /* Sound 0x00B0 - 0x00BF */
-#define OCP_FUNC_AUDIO		0x00B0
 
 /* Mass Storage 0x00C0 - 0xxCF */
 #define OCP_FUNC_IDE		0x00C0
@@ -87,17 +56,15 @@
 /* Misc 0x00D0 - 0x00DF*/
 #define OCP_FUNC_GPIO		0x00D0
 #define OCP_FUNC_ZMII		0x00D1
+#define OCP_FUNC_PERFMON	0x00D2	/* Performance Monitor */
+#define OCP_FUNC_RGMII		0x00D3
+#define OCP_FUNC_TAH		0x00D4
 
 /* Network 0x0200 - 0x02FF */
 #define OCP_FUNC_EMAC		0x0200
+#define OCP_FUNC_ENET		0x0201	/* TSEC & FEC */
 
 /* Bridge devices 0xE00 - 0xEFF */
-#define OCP_FUNC_HOST		0x0E00
-#define OCP_FUNC_DCR		0x0E01
-#define OCP_FUNC_OPB		0x0E02
-#define OCP_FUNC_PHY		0x0E03
-#define OCP_FUNC_EXT		0x0E04
-#define	OCP_FUNC_PCI		0x0E05
-#define	OCP_FUNC_PLB		0x0E06
+#define OCP_FUNC_OPB		0x0E00
 
 #define OCP_FUNC_UNKNOWN	0xFFFF
diff -Nru a/include/asm-ppc/pgtable.h b/include/asm-ppc/pgtable.h
--- a/include/asm-ppc/pgtable.h	Sun May 16 01:18:34 2004
+++ b/include/asm-ppc/pgtable.h	Sun May 16 01:18:34 2004
@@ -672,6 +672,8 @@
 
 typedef pte_t *pte_addr_t;
 
+extern int get_pteptr(struct mm_struct *mm, unsigned long addr, pte_t **ptep);
+
 #endif /* !__ASSEMBLY__ */
 
 #define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_YOUNG
diff -Nru a/include/asm-ppc/ppc_asm.h b/include/asm-ppc/ppc_asm.h
--- a/include/asm-ppc/ppc_asm.h	Sun May 16 01:18:33 2004
+++ b/include/asm-ppc/ppc_asm.h	Sun May 16 01:18:33 2004
@@ -161,6 +161,8 @@
 #define CLR_TOP32(r)
 #endif /* CONFIG_PPC64BRIDGE */
 
+#define RFMCI		.long 0x4c00004c	/* rfmci instruction */
+
 #ifdef CONFIG_IBM405_ERR77
 #define PPC405_ERR77(ra,rb)	dcbt	ra, rb;
 #define	PPC405_ERR77_SYNC	sync;
diff -Nru a/include/asm-ppc/reg_booke.h b/include/asm-ppc/reg_booke.h
--- a/include/asm-ppc/reg_booke.h	Sun May 16 01:18:36 2004
+++ b/include/asm-ppc/reg_booke.h	Sun May 16 01:18:36 2004
@@ -86,6 +86,20 @@
 #define SPRN_IVOR13	0x19D	/* Interrupt Vector Offset Register 13 */
 #define SPRN_IVOR14	0x19E	/* Interrupt Vector Offset Register 14 */
 #define SPRN_IVOR15	0x19F	/* Interrupt Vector Offset Register 15 */
+#define SPRN_MCSRR0	0x23A	/* Machine Check Save and Restore Register 0 */
+#define SPRN_MCSRR1	0x23B	/* Machine Check Save and Restore Register 1 */
+#define SPRN_MCSR	0x23C	/* Machine Check Status Register */
+#ifdef CONFIG_440A
+#define  MCSR_MCS	0x80000000 /* Machine Check Summary */
+#define  MCSR_IB	0x40000000 /* Instruction PLB Error */
+#define  MCSR_DRB	0x20000000 /* Data Read PLB Error */
+#define  MCSR_DWB	0x10000000 /* Data Write PLB Error */
+#define  MCSR_TLBP	0x08000000 /* TLB Parity Error */
+#define  MCSR_ICP	0x04000000 /* I-Cache Parity Error */
+#define  MCSR_DCSP	0x02000000 /* D-Cache Search Parity Error */
+#define  MCSR_DCFP	0x01000000 /* D-Cache Flush Parity Error */
+#define  MCSR_IMPE	0x00800000 /* Imprecise Machine Check Exception */
+#endif
 #define SPRN_ZPR	0x3B0	/* Zone Protection Register (40x) */
 #define SPRN_MMUCR	0x3B2	/* MMU Control Register */
 #define SPRN_CCR0	0x3B3	/* Core Configuration Register */
@@ -144,6 +158,7 @@
  */
 #ifdef CONFIG_BOOKE
 #define DBSR_IC		0x08000000	/* Instruction Completion */
+#define DBSR_BT		0x04000000	/* Branch Taken */
 #define DBSR_TIE	0x01000000	/* Trap Instruction Event */
 #endif
 #ifdef CONFIG_40x
@@ -250,6 +265,8 @@
 #define CSRR0	SPRN_SRR2	/* Logically and functionally equivalent. */
 #define CSRR1	SPRN_SRR3	/* Logically and functionally equivalent. */
 #endif
+#define MCSRR0	SPRN_MCSRR0	/* Machine Check Save and Restore Register 0 */
+#define MCSRR1	SPRN_MCSRR1	/* Machine Check Save and Restore Register 1 */
 #define DCMP	SPRN_DCMP	/* Data TLB Compare Register */
 #define SPRG4R	SPRN_SPRG4R	/* Supervisor Private Registers */
 #define SPRG5R	SPRN_SPRG5R
diff -Nru a/include/asm-ppc/spinlock.h b/include/asm-ppc/spinlock.h
--- a/include/asm-ppc/spinlock.h	Sun May 16 01:18:34 2004
+++ b/include/asm-ppc/spinlock.h	Sun May 16 01:18:34 2004
@@ -27,6 +27,7 @@
 #define spin_lock_init(x) 	do { *(x) = SPIN_LOCK_UNLOCKED; } while(0)
 #define spin_is_locked(x)	((x)->lock != 0)
 #define spin_unlock_wait(x)	do { barrier(); } while(spin_is_locked(x))
+#define _raw_spin_lock_flags(lock, flags) _raw_spin_lock(lock)
 
 #ifndef CONFIG_DEBUG_SPINLOCK
 
diff -Nru a/include/asm-ppc/system.h b/include/asm-ppc/system.h
--- a/include/asm-ppc/system.h	Sun May 16 01:18:34 2004
+++ b/include/asm-ppc/system.h	Sun May 16 01:18:34 2004
@@ -76,11 +76,15 @@
 extern void enable_kernel_fp(void);
 extern void giveup_altivec(struct task_struct *);
 extern void load_up_altivec(struct task_struct *);
+extern int fix_alignment(struct pt_regs *);
 extern void cvt_fd(float *from, double *to, unsigned long *fpscr);
 extern void cvt_df(double *from, float *to, unsigned long *fpscr);
 extern int call_rtas(const char *, int, int, unsigned long *, ...);
 extern int abs(int);
 extern void cacheable_memzero(void *p, unsigned int nb);
+extern void do_page_fault(struct pt_regs *, unsigned long, unsigned long);
+extern void bad_page_fault(struct pt_regs *, unsigned long, int);
+extern void die(const char *, struct pt_regs *, long);
 
 struct device_node;
 extern void note_scsi_host(struct device_node *, void *);
diff -Nru a/include/asm-ppc/termbits.h b/include/asm-ppc/termbits.h
--- a/include/asm-ppc/termbits.h	Sun May 16 01:18:35 2004
+++ b/include/asm-ppc/termbits.h	Sun May 16 01:18:35 2004
@@ -81,6 +81,7 @@
 #define   TAB1	00002000
 #define   TAB2	00004000
 #define   TAB3	00006000
+#define   XTABS	00006000	/* required by POSIX to == TAB3 */
 #define CRDLY	00030000
 #define   CR0	00000000
 #define   CR1	00010000
@@ -95,7 +96,6 @@
 #define VTDLY	00200000
 #define   VT0	00000000
 #define   VT1	00200000
-#define XTABS	01000000 /* Hmm.. Linux/i386 considers this part of TABDLY.. */
 
 /* c_cflag bit meaning */
 #define CBAUD	0000377
diff -Nru a/include/asm-ppc64/atomic.h b/include/asm-ppc64/atomic.h
--- a/include/asm-ppc64/atomic.h	Sun May 16 01:18:36 2004
+++ b/include/asm-ppc64/atomic.h	Sun May 16 01:18:36 2004
@@ -54,6 +54,8 @@
 	return t;
 }
 
+#define atomic_add_negative(a, v)	(atomic_add_return((a), (v)) < 0)
+
 static __inline__ void atomic_sub(int a, atomic_t *v)
 {
 	int t;
@@ -117,6 +119,16 @@
 
 	return t;
 }
+
+/*
+ * atomic_inc_and_test - increment and test
+ * @v: pointer of type atomic_t
+ *
+ * Atomically increments @v by 1
+ * and returns true if the result is zero, or false for all
+ * other cases.
+ */
+#define atomic_inc_and_test(v) (atomic_inc_return(v) == 0)
 
 static __inline__ void atomic_dec(atomic_t *v)
 {
diff -Nru a/include/asm-ppc64/compat.h b/include/asm-ppc64/compat.h
--- a/include/asm-ppc64/compat.h	Sun May 16 01:18:34 2004
+++ b/include/asm-ppc64/compat.h	Sun May 16 01:18:34 2004
@@ -25,6 +25,7 @@
 typedef s32		compat_daddr_t;
 typedef u32		compat_caddr_t;
 typedef __kernel_fsid_t	compat_fsid_t;
+typedef s32		compat_key_t;
 
 typedef s32		compat_int_t;
 typedef s32		compat_long_t;
@@ -135,5 +136,67 @@
 
 	return (void *) (usp - len);
 }
+
+/*
+ * ipc64_perm is actually 32/64bit clean but since the compat layer refers to
+ * it we may as well define it.
+ */
+struct compat_ipc64_perm {
+	compat_key_t key;
+	compat_uid_t uid;
+	compat_gid_t gid;
+	compat_uid_t cuid;
+	compat_gid_t cgid;
+	compat_mode_t mode;
+	unsigned int seq;
+	unsigned int __pad2;
+	unsigned long __unused1;	/* yes they really are 64bit pads */
+	unsigned long __unused2;
+};
+
+struct compat_semid64_ds {
+	struct compat_ipc64_perm sem_perm;
+	unsigned int __unused1;
+	compat_time_t sem_otime;
+	unsigned int __unused2;
+	compat_time_t sem_ctime;
+	compat_ulong_t sem_nsems;
+	compat_ulong_t __unused3;
+	compat_ulong_t __unused4;
+};
+
+struct compat_msqid64_ds {
+	struct compat_ipc64_perm msg_perm;
+	unsigned int __unused1;
+	compat_time_t msg_stime;
+	unsigned int __unused2;
+	compat_time_t msg_rtime;
+	unsigned int __unused3;
+	compat_time_t msg_ctime;
+	compat_ulong_t msg_cbytes;
+	compat_ulong_t msg_qnum;
+	compat_ulong_t msg_qbytes;
+	compat_pid_t msg_lspid;
+	compat_pid_t msg_lrpid;
+	compat_ulong_t __unused4;
+	compat_ulong_t __unused5;
+};
+
+struct compat_shmid64_ds {
+	struct compat_ipc64_perm shm_perm;
+	unsigned int __unused1;
+	compat_time_t shm_atime;
+	unsigned int __unused2;
+	compat_time_t shm_dtime;
+	unsigned int __unused3;
+	compat_time_t shm_ctime;
+	unsigned int __unused4;
+	compat_size_t shm_segsz;
+	compat_pid_t shm_cpid;
+	compat_pid_t shm_lpid;
+	compat_ulong_t shm_nattch;
+	compat_ulong_t __unused5;
+	compat_ulong_t __unused6;
+};
 
 #endif /* _ASM_PPC64_COMPAT_H */
diff -Nru a/include/asm-ppc64/io.h b/include/asm-ppc64/io.h
--- a/include/asm-ppc64/io.h	Sun May 16 01:18:36 2004
+++ b/include/asm-ppc64/io.h	Sun May 16 01:18:36 2004
@@ -240,22 +240,23 @@
 {
 	int ret;
 
-	__asm__ __volatile__("lbz%U1%X1 %0,%1; twi 0,%0,0; isync" :
-			     "=r" (ret) : "m" (*addr));
+	__asm__ __volatile__("lbz%U1%X1 %0,%1; twi 0,%0,0; isync"
+			     : "=r" (ret) : "m" (*addr));
 	return ret;
 }
 
 static inline void out_8(volatile unsigned char *addr, int val)
 {
-	__asm__ __volatile__("stb%U0%X0 %1,%0; eieio" : "=m" (*addr) : "r" (val));
+	__asm__ __volatile__("stb%U0%X0 %1,%0; sync"
+			     : "=m" (*addr) : "r" (val));
 }
 
 static inline int in_le16(volatile unsigned short *addr)
 {
 	int ret;
 
-	__asm__ __volatile__("lhbrx %0,0,%1; twi 0,%0,0; isync" :
-			     "=r" (ret) : "r" (addr), "m" (*addr));
+	__asm__ __volatile__("lhbrx %0,0,%1; twi 0,%0,0; isync"
+			     : "=r" (ret) : "r" (addr), "m" (*addr));
 	return ret;
 }
 
@@ -263,28 +264,29 @@
 {
 	int ret;
 
-	__asm__ __volatile__("lhz%U1%X1 %0,%1; twi 0,%0,0; isync" :
-			     "=r" (ret) : "m" (*addr));
+	__asm__ __volatile__("lhz%U1%X1 %0,%1; twi 0,%0,0; isync"
+			     : "=r" (ret) : "m" (*addr));
 	return ret;
 }
 
 static inline void out_le16(volatile unsigned short *addr, int val)
 {
-	__asm__ __volatile__("sthbrx %1,0,%2; eieio" : "=m" (*addr) :
-			      "r" (val), "r" (addr));
+	__asm__ __volatile__("sthbrx %1,0,%2; sync"
+			     : "=m" (*addr) : "r" (val), "r" (addr));
 }
 
 static inline void out_be16(volatile unsigned short *addr, int val)
 {
-	__asm__ __volatile__("sth%U0%X0 %1,%0; eieio" : "=m" (*addr) : "r" (val));
+	__asm__ __volatile__("sth%U0%X0 %1,%0; sync"
+			     : "=m" (*addr) : "r" (val));
 }
 
 static inline unsigned in_le32(volatile unsigned *addr)
 {
 	unsigned ret;
 
-	__asm__ __volatile__("lwbrx %0,0,%1; twi 0,%0,0; isync" :
-			     "=r" (ret) : "r" (addr), "m" (*addr));
+	__asm__ __volatile__("lwbrx %0,0,%1; twi 0,%0,0; isync"
+			     : "=r" (ret) : "r" (addr), "m" (*addr));
 	return ret;
 }
 
@@ -292,20 +294,21 @@
 {
 	unsigned ret;
 
-	__asm__ __volatile__("lwz%U1%X1 %0,%1; twi 0,%0,0; isync" :
-			     "=r" (ret) : "m" (*addr));
+	__asm__ __volatile__("lwz%U1%X1 %0,%1; twi 0,%0,0; isync"
+			     : "=r" (ret) : "m" (*addr));
 	return ret;
 }
 
 static inline void out_le32(volatile unsigned *addr, int val)
 {
-	__asm__ __volatile__("stwbrx %1,0,%2; eieio" : "=m" (*addr) :
-			     "r" (val), "r" (addr));
+	__asm__ __volatile__("stwbrx %1,0,%2; sync" : "=m" (*addr)
+			     : "r" (val), "r" (addr));
 }
 
 static inline void out_be32(volatile unsigned *addr, int val)
 {
-	__asm__ __volatile__("stw%U0%X0 %1,%0; eieio" : "=m" (*addr) : "r" (val));
+	__asm__ __volatile__("stw%U0%X0 %1,%0; eieio"
+			     : "=m" (*addr) : "r" (val));
 }
 
 static inline unsigned long in_le64(volatile unsigned long *addr)
@@ -331,8 +334,8 @@
 {
 	unsigned long ret;
 
-	__asm__ __volatile__("ld %0,0(%1); twi 0,%0,0; isync" :
-			     "=r" (ret) : "m" (*addr));
+	__asm__ __volatile__("ld %0,0(%1); twi 0,%0,0; isync"
+			     : "=r" (ret) : "m" (*addr));
 	return ret;
 }
 
@@ -349,13 +352,13 @@
 			     "rlwimi %0,%1,8,8,31\n"
 			     "rlwimi %0,%1,24,16,23\n"
 			     "std %0,0(%2)\n"
-			     "eieio\n"
+			     "sync"
 			     : "=r" (tmp) : "r" (val), "b" (addr) , "m" (*addr));
 }
 
 static inline void out_be64(volatile unsigned long *addr, int val)
 {
-	__asm__ __volatile__("std %1,0(%0); eieio" : "=m" (*addr) : "r" (val));
+	__asm__ __volatile__("std %1,0(%0); sync" : "=m" (*addr) : "r" (val));
 }
 
 #ifndef CONFIG_PPC_ISERIES 
diff -Nru a/include/asm-ppc64/paca.h b/include/asm-ppc64/paca.h
--- a/include/asm-ppc64/paca.h	Sun May 16 01:18:34 2004
+++ b/include/asm-ppc64/paca.h	Sun May 16 01:18:34 2004
@@ -60,8 +60,11 @@
 	struct ItLpPaca *xLpPacaPtr;	/* Pointer to LpPaca for PLIC		0x00 */
 	struct ItLpRegSave *xLpRegSavePtr; /* Pointer to LpRegSave for PLIC	0x08 */
 	u64 xCurrent;  		        /* Pointer to current			0x10 */
-	u16 xPacaIndex;			/* Logical processor number		0x18 */
-        u16 xHwProcNum;                 /* Physical processor number            0x1A */
+	/* Note: the spinlock functions in arch/ppc64/lib/locks.c load lock_token and
+	   xPacaIndex with a single lwz instruction, using the constant offset 24.
+	   If you move either field, fix the spinlocks and rwlocks. */
+	u16 lock_token;			/* Constant 0x8000, used in spinlocks	0x18 */
+	u16 xPacaIndex;			/* Logical processor number		0x1A */
 	u32 default_decr;		/* Default decrementer value		0x1c */	
 	u64 xKsave;			/* Saved Kernel stack addr or zero	0x20 */
 	struct ItLpQueue *lpQueuePtr;	/* LpQueue handled by this processor    0x28 */
@@ -70,7 +73,8 @@
 	u8 *exception_sp;		/*                                      0x50 */
 	u8 xProcEnabled;		/*                                      0x58 */
 	u8 prof_enabled;		/* 1=iSeries profiling enabled          0x59 */
-	u8 resv1[38];			/*					0x5a-0x7f*/
+	u16 xHwProcNum;			/* Physical processor number		0x5a */
+	u8 resv1[36];			/*					0x5c */
 
 /*=====================================================================================
  * CACHE_LINE_2 0x0080 - 0x00FF
diff -Nru a/include/asm-ppc64/ppc32.h b/include/asm-ppc64/ppc32.h
--- a/include/asm-ppc64/ppc32.h	Sun May 16 01:18:34 2004
+++ b/include/asm-ppc64/ppc32.h	Sun May 16 01:18:34 2004
@@ -141,9 +141,4 @@
 	struct mcontext32	uc_mcontext;
 };
 
-struct ipc_kludge_32 {
-	unsigned int msgp;
-	int msgtyp;
-};
-
 #endif  /* _PPC64_PPC32_H */
diff -Nru a/include/asm-ppc64/processor.h b/include/asm-ppc64/processor.h
--- a/include/asm-ppc64/processor.h	Sun May 16 01:18:33 2004
+++ b/include/asm-ppc64/processor.h	Sun May 16 01:18:33 2004
@@ -625,6 +625,11 @@
 
 #define spin_lock_prefetch(x)	prefetchw(x)
 
+#ifdef CONFIG_SCHED_SMT
+#define ARCH_HAS_SCHED_DOMAIN
+#define ARCH_HAS_SCHED_WAKE_IDLE
+#endif
+
 #endif /* ASSEMBLY */
 
 #endif /* __ASM_PPC64_PROCESSOR_H */
diff -Nru a/include/asm-ppc64/spinlock.h b/include/asm-ppc64/spinlock.h
--- a/include/asm-ppc64/spinlock.h	Sun May 16 01:18:33 2004
+++ b/include/asm-ppc64/spinlock.h	Sun May 16 01:18:33 2004
@@ -4,7 +4,7 @@
 /*
  * Simple spin lock operations.  
  *
- * Copyright (C) 2001 Paul Mackerras <paulus@au.ibm.com>, IBM
+ * Copyright (C) 2001-2004 Paul Mackerras <paulus@au.ibm.com>, IBM
  * Copyright (C) 2001 Anton Blanchard <anton@au.ibm.com>, IBM
  *
  * Type of int is used as a full 64b word is not necessary.
@@ -14,6 +14,8 @@
  * as published by the Free Software Foundation; either version
  * 2 of the License, or (at your option) any later version.
  */
+#include <linux/config.h>
+
 typedef struct {
 	volatile unsigned int lock;
 } spinlock_t;
@@ -22,25 +24,48 @@
 #define SPIN_LOCK_UNLOCKED	(spinlock_t) { 0 }
 
 #define spin_is_locked(x)	((x)->lock != 0)
+#define spin_lock_init(x)	do { *(x) = SPIN_LOCK_UNLOCKED; } while(0)
+
+static __inline__ void _raw_spin_unlock(spinlock_t *lock)
+{
+	__asm__ __volatile__("lwsync	# spin_unlock": : :"memory");
+	lock->lock = 0;
+}
+
+/*
+ * Normally we use the spinlock functions in arch/ppc64/lib/locks.c.
+ * For special applications such as profiling, we can have the
+ * spinlock functions inline by defining CONFIG_SPINLINE.
+ * This is not recommended on partitioned systems with shared
+ * processors, since the inline spinlock functions don't include
+ * the code for yielding the CPU to the lock holder.
+ */
+
+#ifndef CONFIG_SPINLINE
+extern int _raw_spin_trylock(spinlock_t *lock);
+extern void _raw_spin_lock(spinlock_t *lock);
+extern void _raw_spin_lock_flags(spinlock_t *lock, unsigned long flags);
+extern void spin_unlock_wait(spinlock_t *lock);
+
+#else
 
 static __inline__ int _raw_spin_trylock(spinlock_t *lock)
 {
-	unsigned int tmp;
+	unsigned int tmp, tmp2;
 
 	__asm__ __volatile__(
-"1:	lwarx		%0,0,%1		# spin_trylock\n\
+"1:	lwarx		%0,0,%2		# spin_trylock\n\
 	cmpwi		0,%0,0\n\
-	li		%0,0\n\
 	bne-		2f\n\
-	li		%0,1\n\
-	stwcx.		%0,0,%1\n\
+	lwz		%1,24(13)\n\
+	stwcx.		%1,0,%2\n\
 	bne-		1b\n\
 	isync\n\
-2:"	: "=&r"(tmp)
+2:"	: "=&r"(tmp), "=&r"(tmp2)
 	: "r"(&lock->lock)
 	: "cr0", "memory");
 
-	return tmp;
+	return tmp != 0;
 }
 
 static __inline__ void _raw_spin_lock(spinlock_t *lock)
@@ -58,20 +83,51 @@
 "2:	lwarx		%0,0,%1\n\
 	cmpwi		0,%0,0\n\
 	bne-		1b\n\
-	stwcx.		%2,0,%1\n\
+	lwz		%0,24(13)\n\
+	stwcx.		%0,0,%1\n\
 	bne-		2b\n\
 	isync"
 	: "=&r"(tmp)
-	: "r"(&lock->lock), "r"(1)
+	: "r"(&lock->lock)
 	: "cr0", "memory");
 }
 
-static __inline__ void _raw_spin_unlock(spinlock_t *lock)
+/*
+ * Note: if we ever want to inline the spinlocks on iSeries,
+ * we will have to change the irq enable/disable stuff in here.
+ */
+static __inline__ void _raw_spin_lock_flags(spinlock_t *lock,
+					    unsigned long flags)
 {
-	__asm__ __volatile__("eieio	# spin_unlock": : :"memory");
-	lock->lock = 0;
+	unsigned int tmp;
+	unsigned long tmp2;
+
+	__asm__ __volatile__(
+	"b		2f		# spin_lock\n\
+1:	mfmsr		%1\n\
+	mtmsrd		%3,1\n\
+2:"	HMT_LOW
+"	lwzx		%0,0,%2\n\
+	cmpwi		0,%0,0\n\
+	bne+		2b\n"
+	HMT_MEDIUM
+"	mtmsrd		%1,1\n\
+3:	lwarx		%0,0,%2\n\
+	cmpwi		0,%0,0\n\
+	bne-		1b\n\
+	lwz		%1,24(13)\n\
+	stwcx.		%1,0,%2\n\
+	bne-		3b\n\
+	isync"
+	: "=&r"(tmp), "=&r"(tmp2)
+	: "r"(&lock->lock), "r"(flags)
+	: "cr0", "memory");
 }
 
+#define spin_unlock_wait(x)	do { cpu_relax(); } while (spin_is_locked(x))
+
+#endif /* CONFIG_SPINLINE */
+
 /*
  * Read-write spinlocks, allowing multiple readers
  * but only one writer.
@@ -88,6 +144,34 @@
 
 #define RW_LOCK_UNLOCKED (rwlock_t) { 0 }
 
+#define rwlock_init(x)		do { *(x) = RW_LOCK_UNLOCKED; } while(0)
+#define rwlock_is_locked(x)	((x)->lock)
+
+static __inline__ int is_read_locked(rwlock_t *rw)
+{
+	return rw->lock > 0;
+}
+
+static __inline__ int is_write_locked(rwlock_t *rw)
+{
+	return rw->lock < 0;
+}
+
+static __inline__ void _raw_write_unlock(rwlock_t *rw)
+{
+	__asm__ __volatile__("lwsync		# write_unlock": : :"memory");
+	rw->lock = 0;
+}
+
+#ifndef CONFIG_SPINLINE
+extern int _raw_read_trylock(rwlock_t *rw);
+extern void _raw_read_lock(rwlock_t *rw);
+extern void _raw_read_unlock(rwlock_t *rw);
+extern int _raw_write_trylock(rwlock_t *rw);
+extern void _raw_write_lock(rwlock_t *rw);
+extern void _raw_write_unlock(rwlock_t *rw);
+
+#else
 static __inline__ int _raw_read_trylock(rwlock_t *rw)
 {
 	unsigned int tmp;
@@ -139,7 +223,7 @@
 	unsigned int tmp;
 
 	__asm__ __volatile__(
-	"eieio				# read_unlock\n\
+	"lwsync				# read_unlock\n\
 1:	lwarx		%0,0,%1\n\
 	addic		%0,%0,-1\n\
 	stwcx.		%0,0,%1\n\
@@ -192,29 +276,7 @@
 	: "r"(&rw->lock), "r"(-1)
 	: "cr0", "memory");
 }
-
-static __inline__ void _raw_write_unlock(rwlock_t *rw)
-{
-	__asm__ __volatile__("eieio		# write_unlock": : :"memory");
-	rw->lock = 0;
-}
-
-static __inline__ int is_read_locked(rwlock_t *rw)
-{
-	return rw->lock > 0;
-}
-
-static __inline__ int is_write_locked(rwlock_t *rw)
-{
-	return rw->lock < 0;
-}
-
-#define spin_lock_init(x)      do { *(x) = SPIN_LOCK_UNLOCKED; } while(0)
-#define spin_unlock_wait(x)    do { cpu_relax(); } while(spin_is_locked(x))
-
-#define rwlock_init(x)         do { *(x) = RW_LOCK_UNLOCKED; } while(0)
-
-#define rwlock_is_locked(x)	((x)->lock)
+#endif /* CONFIG_SPINLINE */
 
 #endif /* __KERNEL__ */
 #endif /* __ASM_SPINLOCK_H */
diff -Nru a/include/asm-ppc64/system.h b/include/asm-ppc64/system.h
--- a/include/asm-ppc64/system.h	Sun May 16 01:18:37 2004
+++ b/include/asm-ppc64/system.h	Sun May 16 01:18:37 2004
@@ -29,22 +29,26 @@
  * read_barrier_depends() prevents data-dependent loads being reordered
  *	across this point (nop on PPC).
  *
- * We can use the eieio instruction for wmb, but since it doesn't
- * give any ordering guarantees about loads, we have to use the
- * stronger but slower sync instruction for mb and rmb.
+ * We have to use the sync instructions for mb(), since lwsync doesn't
+ * order loads with respect to previous stores.  Lwsync is fine for
+ * rmb(), though.
+ * For wmb(), we use sync since wmb is used in drivers to order
+ * stores to system memory with respect to writes to the device.
+ * However, smp_wmb() can be a lighter-weight eieio barrier on
+ * SMP since it is only used to order updates to system memory.
  */
 #define mb()   __asm__ __volatile__ ("sync" : : : "memory")
 #define rmb()  __asm__ __volatile__ ("lwsync" : : : "memory")
-#define wmb()  __asm__ __volatile__ ("eieio" : : : "memory")
+#define wmb()  __asm__ __volatile__ ("sync" : : : "memory")
 #define read_barrier_depends()  do { } while(0)
 
-#define set_mb(var, value)	do { var = value; mb(); } while (0)
-#define set_wmb(var, value)	do { var = value; wmb(); } while (0)
+#define set_mb(var, value)	do { var = value; smp_mb(); } while (0)
+#define set_wmb(var, value)	do { var = value; smp_wmb(); } while (0)
 
 #ifdef CONFIG_SMP
 #define smp_mb()	mb()
 #define smp_rmb()	rmb()
-#define smp_wmb()	wmb()
+#define smp_wmb()	__asm__ __volatile__ ("eieio" : : : "memory")
 #define smp_read_barrier_depends()  read_barrier_depends()
 #else
 #define smp_mb()	__asm__ __volatile__("": : :"memory")
diff -Nru a/include/asm-ppc64/termbits.h b/include/asm-ppc64/termbits.h
--- a/include/asm-ppc64/termbits.h	Sun May 16 01:18:35 2004
+++ b/include/asm-ppc64/termbits.h	Sun May 16 01:18:35 2004
@@ -89,6 +89,7 @@
 #define   TAB1	00002000
 #define   TAB2	00004000
 #define   TAB3	00006000
+#define   XTABS	00006000	/* required by POSIX to == TAB3 */
 #define CRDLY	00030000
 #define   CR0	00000000
 #define   CR1	00010000
@@ -103,7 +104,6 @@
 #define VTDLY	00200000
 #define   VT0	00000000
 #define   VT1	00200000
-#define XTABS	01000000 /* Hmm.. Linux/i386 considers this part of TABDLY.. */
 
 /* c_cflag bit meaning */
 #define CBAUD	0000377
diff -Nru a/include/asm-s390/atomic.h b/include/asm-s390/atomic.h
--- a/include/asm-s390/atomic.h	Sun May 16 01:18:33 2004
+++ b/include/asm-s390/atomic.h	Sun May 16 01:18:33 2004
@@ -69,6 +69,7 @@
 {
 	return __CS_LOOP(v, 1, "ar");
 }
+
 static __inline__ int atomic_inc_and_test(volatile atomic_t * v)
 {
 	return __CS_LOOP(v, 1, "ar") != 0;
diff -Nru a/include/asm-s390/percpu.h b/include/asm-s390/percpu.h
--- a/include/asm-s390/percpu.h	Sun May 16 01:18:36 2004
+++ b/include/asm-s390/percpu.h	Sun May 16 01:18:36 2004
@@ -5,10 +5,26 @@
 #include <asm/lowcore.h>
 
 /*
- * s390 uses the generic implementation for per cpu data, with the exception that
- * the offset of the cpu local data area is cached in the cpu's lowcore memory
+ * For builtin kernel code s390 uses the generic implementation for
+ * per cpu data, with the exception that the offset of the cpu local
+ * data area is cached in the cpu's lowcore memory
+ * For 64 bit module code s390 forces the use of a GOT slot for the
+ * address of the per cpu variable. This is needed because the module
+ * may be more than 4G above the per cpu area.
  */
+#if defined(__s390x__) && defined(MODULE)
+#define __get_got_cpu_var(var,offset) \
+  (*({ unsigned long *__ptr; \
+       asm ( "larl %0,per_cpu__"#var"@GOTENT" : "=a" (__ptr) ); \
+       ((typeof(&per_cpu__##var))((*__ptr) + offset)); \
+    }))
+#undef __get_cpu_var
+#define __get_cpu_var(var) __get_got_cpu_var(var,S390_lowcore.percpu_offset)
+#undef per_cpu
+#define per_cpu(var,cpu) __get_got_cpu_var(var,__per_cpu_offset[cpu])
+#else
 #undef __get_cpu_var
 #define __get_cpu_var(var) (*RELOC_HIDE(&per_cpu__##var, S390_lowcore.percpu_offset))
+#endif
 
 #endif /* __ARCH_S390_PERCPU__ */
diff -Nru a/include/asm-s390/pgtable.h b/include/asm-s390/pgtable.h
--- a/include/asm-s390/pgtable.h	Sun May 16 01:18:36 2004
+++ b/include/asm-s390/pgtable.h	Sun May 16 01:18:36 2004
@@ -784,10 +784,6 @@
  */
 #define pgtable_cache_init()	do { } while (0)
 
-#ifdef __s390x__
-# define HAVE_ARCH_UNMAPPED_AREA
-#endif /* __s390x__ */
-
 #define __HAVE_ARCH_PTEP_ESTABLISH
 #define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_YOUNG
 #define __HAVE_ARCH_PTEP_CLEAR_YOUNG_FLUSH
diff -Nru a/include/asm-s390/processor.h b/include/asm-s390/processor.h
--- a/include/asm-s390/processor.h	Sun May 16 01:18:35 2004
+++ b/include/asm-s390/processor.h	Sun May 16 01:18:35 2004
@@ -63,15 +63,18 @@
 
 # define TASK_SIZE		(0x80000000UL)
 # define TASK_UNMAPPED_BASE	(TASK_SIZE / 2)
+# define DEFAULT_TASK_SIZE	(0x80000000UL)
 
 #else /* __s390x__ */
 
-# define TASK_SIZE		(0x40000000000UL)
-# define TASK31_SIZE		(0x80000000UL)
-# define TASK_UNMAPPED_BASE	(test_thread_flag(TIF_31BIT) ? \
-					(TASK31_SIZE / 2) : (TASK_SIZE / 2))
+# define TASK_SIZE		(test_thread_flag(TIF_31BIT) ? \
+					(0x80000000UL) : (0x40000000000UL))
+# define TASK_UNMAPPED_BASE	(TASK_SIZE / 2)
+# define DEFAULT_TASK_SIZE	(0x40000000000UL)
 
 #endif /* __s390x__ */
+
+#define MM_VM_SIZE(mm)		DEFAULT_TASK_SIZE
 
 typedef struct {
         __u32 ar4;
diff -Nru a/include/asm-s390/qeth.h b/include/asm-s390/qeth.h
--- a/include/asm-s390/qeth.h	Sun May 16 01:18:36 2004
+++ b/include/asm-s390/qeth.h	Sun May 16 01:18:36 2004
@@ -12,15 +12,13 @@
 #define __ASM_S390_IOCTL_H__
 #include <linux/ioctl.h>
 
-#define QETH_IOCTL_LETTER 'Q'
-
-#define SIOC_QETH_ARP_SET_NO_ENTRIES	_IOWR(QETH_IOCTL_LETTER, 1, int)
-#define SIOC_QETH_ARP_QUERY_INFO	_IOWR(QETH_IOCTL_LETTER, 2, int)
-#define SIOC_QETH_ARP_ADD_ENTRY		_IOWR(QETH_IOCTL_LETTER, 3, int)
-#define SIOC_QETH_ARP_REMOVE_ENTRY	_IOWR(QETH_IOCTL_LETTER, 4, int)
-#define SIOC_QETH_ARP_FLUSH_CACHE	_IOWR(QETH_IOCTL_LETTER, 5, int)
-#define SIOC_QETH_ADP_SET_SNMP_CONTROL	_IOWR(QETH_IOCTL_LETTER, 6, int)
-#define SIOC_QETH_GET_CARD_TYPE		_IOWR(QETH_IOCTL_LETTER, 7, int)
+#define SIOC_QETH_ARP_SET_NO_ENTRIES    (SIOCDEVPRIVATE)
+#define SIOC_QETH_ARP_QUERY_INFO        (SIOCDEVPRIVATE + 1)
+#define SIOC_QETH_ARP_ADD_ENTRY         (SIOCDEVPRIVATE + 2)
+#define SIOC_QETH_ARP_REMOVE_ENTRY      (SIOCDEVPRIVATE + 3)
+#define SIOC_QETH_ARP_FLUSH_CACHE       (SIOCDEVPRIVATE + 4)
+#define SIOC_QETH_ADP_SET_SNMP_CONTROL  (SIOCDEVPRIVATE + 5)
+#define SIOC_QETH_GET_CARD_TYPE         (SIOCDEVPRIVATE + 6)
 
 struct qeth_arp_cache_entry {
 	__u8  macaddr[6];
diff -Nru a/include/asm-s390/spinlock.h b/include/asm-s390/spinlock.h
--- a/include/asm-s390/spinlock.h	Sun May 16 01:18:37 2004
+++ b/include/asm-s390/spinlock.h	Sun May 16 01:18:37 2004
@@ -42,6 +42,7 @@
 #define spin_lock_init(lp) do { (lp)->lock = 0; } while(0)
 #define spin_unlock_wait(lp)	do { barrier(); } while(((volatile spinlock_t *)(lp))->lock)
 #define spin_is_locked(x) ((x)->lock != 0)
+#define _raw_spin_lock_flags(lock, flags) _raw_spin_lock(lock)
 
 extern inline void _raw_spin_lock(spinlock_t *lp)
 {
diff -Nru a/include/asm-s390/uaccess.h b/include/asm-s390/uaccess.h
--- a/include/asm-s390/uaccess.h	Sun May 16 01:18:34 2004
+++ b/include/asm-s390/uaccess.h	Sun May 16 01:18:34 2004
@@ -119,7 +119,7 @@
  * These are the main single-value transfer routines.  They automatically
  * use the right size if we just have the right pointer type.
  */
-#if __GNUC__ > 2
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 2)
 #define __put_user_asm(x, ptr, err) \
 ({								\
 	err = 0;						\
@@ -174,7 +174,7 @@
 
 extern int __put_user_bad(void);
 
-#if __GNUC__ > 2
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 2)
 #define __get_user_asm(x, ptr, err) \
 ({								\
 	err = 0;						\
diff -Nru a/include/asm-sh/atomic.h b/include/asm-sh/atomic.h
--- a/include/asm-sh/atomic.h	Sun May 16 01:18:36 2004
+++ b/include/asm-sh/atomic.h	Sun May 16 01:18:36 2004
@@ -53,6 +53,8 @@
 	return temp;
 }
 
+#define atomic_add_negative(a, v)	(atomic_add_return((a), (v)) < 0)
+
 static __inline__ int atomic_sub_return(int i, atomic_t * v)
 {
 	unsigned long temp, flags;
@@ -68,6 +70,16 @@
 
 #define atomic_dec_return(v) atomic_sub_return(1,(v))
 #define atomic_inc_return(v) atomic_add_return(1,(v))
+
+/*
+ * atomic_inc_and_test - increment and test
+ * @v: pointer of type atomic_t
+ *
+ * Atomically increments @v by 1
+ * and returns true if the result is zero, or false for all
+ * other cases.
+ */
+#define atomic_inc_and_test(v) (atomic_inc_return(v) == 0)
 
 #define atomic_sub_and_test(i,v) (atomic_sub_return((i), (v)) == 0)
 #define atomic_dec_and_test(v) (atomic_sub_return(1, (v)) == 0)
diff -Nru a/include/asm-sh/flat.h b/include/asm-sh/flat.h
--- a/include/asm-sh/flat.h	Sun May 16 01:18:34 2004
+++ b/include/asm-sh/flat.h	Sun May 16 01:18:34 2004
@@ -16,7 +16,7 @@
 #define	flat_argvp_envp_on_stack()		1
 #define	flat_old_ram_flag(flags)		(flags)
 #define	flat_reloc_valid(reloc, size)		((reloc) <= (size))
-#define	flat_get_addr_from_rp(rp, relval)	get_unaligned(rp)
+#define	flat_get_addr_from_rp(rp, relval, flags)	get_unaligned(rp)
 #define	flat_put_addr_at_rp(rp, val, relval)	put_unaligned(val,rp)
 #define	flat_get_relocate_addr(rel)		(rel)
 
diff -Nru a/include/asm-sh/spinlock.h b/include/asm-sh/spinlock.h
--- a/include/asm-sh/spinlock.h	Sun May 16 01:18:34 2004
+++ b/include/asm-sh/spinlock.h	Sun May 16 01:18:34 2004
@@ -25,6 +25,7 @@
 
 #define spin_is_locked(x)	((x)->lock != 0)
 #define spin_unlock_wait(x)	do { barrier(); } while (spin_is_locked(x))
+#define _raw_spin_lock_flags(lock, flags) _raw_spin_lock(lock)
 
 /*
  * Simple spin lock operations.  There are two variants, one clears IRQ's
diff -Nru a/include/asm-sparc/atomic.h b/include/asm-sparc/atomic.h
--- a/include/asm-sparc/atomic.h	Sun May 16 01:18:35 2004
+++ b/include/asm-sparc/atomic.h	Sun May 16 01:18:35 2004
@@ -33,6 +33,18 @@
 #define atomic_inc_return(v)	(__atomic_add_return(        1, (v)))
 #define atomic_dec_return(v)	(__atomic_add_return(       -1, (v)))
 
+#define atomic_add_negative(a, v)	(atomic_add_return((a), (v)) < 0)
+
+/*
+ * atomic_inc_and_test - increment and test
+ * @v: pointer of type atomic_t
+ *
+ * Atomically increments @v by 1
+ * and returns true if the result is zero, or false for all
+ * other cases.
+ */
+#define atomic_inc_and_test(v) (atomic_inc_return(v) == 0)
+
 #define atomic_dec_and_test(v) (atomic_dec_return(v) == 0)
 
 /* This is the old 24-bit implementation.  It's still used internally
diff -Nru a/include/asm-sparc/spinlock.h b/include/asm-sparc/spinlock.h
--- a/include/asm-sparc/spinlock.h	Sun May 16 01:18:36 2004
+++ b/include/asm-sparc/spinlock.h	Sun May 16 01:18:36 2004
@@ -216,6 +216,8 @@
 
 #endif /* CONFIG_DEBUG_SPINLOCK */
 
+#define _raw_spin_lock_flags(lock, flags) _raw_spin_lock(lock)
+
 #endif /* !(__ASSEMBLY__) */
 
 #endif /* __SPARC_SPINLOCK_H */
diff -Nru a/include/asm-sparc64/atomic.h b/include/asm-sparc64/atomic.h
--- a/include/asm-sparc64/atomic.h	Sun May 16 01:18:36 2004
+++ b/include/asm-sparc64/atomic.h	Sun May 16 01:18:36 2004
@@ -40,6 +40,16 @@
 #define atomic_inc_return(v) __atomic_add(1, v)
 #define atomic64_inc_return(v) __atomic64_add(1, v)
 
+/*
+ * atomic_inc_and_test - increment and test
+ * @v: pointer of type atomic_t
+ *
+ * Atomically increments @v by 1
+ * and returns true if the result is zero, or false for all
+ * other cases.
+ */
+#define atomic_inc_and_test(v) (atomic_inc_return(v) == 0)
+
 #define atomic_sub_and_test(i, v) (__atomic_sub(i, v) == 0)
 #define atomic64_sub_and_test(i, v) (__atomic64_sub(i, v) == 0)
 
@@ -51,6 +61,9 @@
 
 #define atomic_dec(v) ((void)__atomic_sub(1, v))
 #define atomic64_dec(v) ((void)__atomic64_sub(1, v))
+
+#define atomic_add_negative(i, v) (__atomic_add(i, v) < 0)
+#define atomic64_add_negative(i, v) (__atomic64_add(i, v) < 0)
 
 /* Atomic operations are already serializing */
 #define smp_mb__before_atomic_dec()	barrier()
diff -Nru a/include/asm-sparc64/spinlock.h b/include/asm-sparc64/spinlock.h
--- a/include/asm-sparc64/spinlock.h	Sun May 16 01:18:34 2004
+++ b/include/asm-sparc64/spinlock.h	Sun May 16 01:18:34 2004
@@ -106,6 +106,8 @@
 
 #endif /* CONFIG_DEBUG_SPINLOCK */
 
+#define _raw_spin_lock_flags(lock, flags) _raw_spin_lock(lock)
+
 /* Multi-reader locks, these are much saner than the 32-bit Sparc ones... */
 
 #ifndef CONFIG_DEBUG_SPINLOCK
diff -Nru a/include/asm-v850/atomic.h b/include/asm-v850/atomic.h
--- a/include/asm-v850/atomic.h	Sun May 16 01:18:35 2004
+++ b/include/asm-v850/atomic.h	Sun May 16 01:18:35 2004
@@ -76,6 +76,16 @@
 #define atomic_inc(v) 		atomic_inc_return (v)
 #define atomic_dec(v) 		atomic_dec_return (v)
 
+/*
+ * atomic_inc_and_test - increment and test
+ * @v: pointer of type atomic_t
+ *
+ * Atomically increments @v by 1
+ * and returns true if the result is zero, or false for all
+ * other cases.
+ */
+#define atomic_inc_and_test(v) (atomic_inc_return(v) == 0)
+
 #define atomic_sub_and_test(i,v)	(atomic_sub_return ((i), (v)) == 0)
 #define atomic_dec_and_test(v)		(atomic_sub_return (1, (v)) == 0)
 #define atomic_add_negative(i,v)	(atomic_add_return ((i), (v)) < 0)
diff -Nru a/include/asm-v850/flat.h b/include/asm-v850/flat.h
--- a/include/asm-v850/flat.h	Sun May 16 01:18:34 2004
+++ b/include/asm-v850/flat.h	Sun May 16 01:18:34 2004
@@ -45,7 +45,8 @@
    RELVAL is the raw relocation-table entry from which RP is derived.
    For the v850, RP should always be half-word aligned.  */
 static inline unsigned long flat_get_addr_from_rp (unsigned long *rp,
-						   unsigned long relval)
+						   unsigned long relval,
+						   unsigned long flags)
 {
 	short *srp = (short *)rp;
 
diff -Nru a/include/asm-x86_64/8253pit.h b/include/asm-x86_64/8253pit.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/include/asm-x86_64/8253pit.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,10 @@
+/*
+ * 8253/8254 Programmable Interval Timer
+ */
+
+#ifndef _8253PIT_H
+#define _8253PIT_H
+
+#define PIT_TICK_RATE 	1193182UL
+
+#endif
diff -Nru a/include/asm-x86_64/bitops.h b/include/asm-x86_64/bitops.h
--- a/include/asm-x86_64/bitops.h	Sun May 16 01:18:34 2004
+++ b/include/asm-x86_64/bitops.h	Sun May 16 01:18:34 2004
@@ -458,7 +458,7 @@
 
 	__asm__("bsfl %1,%0\n\t"
 		"cmovzl %2,%0" 
-		: "=r" (r) : "g" (x), "r" (-1));
+		: "=r" (r) : "rm" (x), "r" (-1));
 	return r+1;
 }
 
diff -Nru a/include/asm-x86_64/percpu.h b/include/asm-x86_64/percpu.h
--- a/include/asm-x86_64/percpu.h	Sun May 16 01:18:36 2004
+++ b/include/asm-x86_64/percpu.h	Sun May 16 01:18:36 2004
@@ -39,7 +39,7 @@
 #define DEFINE_PER_CPU(type, name) \
     __typeof__(type) per_cpu__##name
 
-#define per_cpu(var, cpu)			((void)cpu, per_cpu__##var)
+#define per_cpu(var, cpu)			(*((void)cpu, &per_cpu__##var))
 #define __get_cpu_var(var)			per_cpu__##var
 
 #endif	/* SMP */
diff -Nru a/include/asm-x86_64/processor.h b/include/asm-x86_64/processor.h
--- a/include/asm-x86_64/processor.h	Sun May 16 01:18:36 2004
+++ b/include/asm-x86_64/processor.h	Sun May 16 01:18:36 2004
@@ -44,8 +44,6 @@
 
 /*
  *  CPU type and hardware bug flags. Kept separately for each CPU.
- *  Members of this structure are referenced in head.S, so think twice
- *  before touching them. [mj]
  */
 
 struct cpuinfo_x86 {
@@ -229,6 +227,8 @@
 	unsigned long io_bitmap[IO_BITMAP_LONGS + 1];
 } __attribute__((packed)) ____cacheline_aligned;
 
+#define ARCH_MIN_TASKALIGN	16
+
 struct thread_struct {
 	unsigned long	rsp0;
 	unsigned long	rsp;
@@ -246,14 +246,14 @@
 /* fault info */
 	unsigned long	cr2, trap_no, error_code;
 /* floating point info */
-	union i387_union	i387;
+	union i387_union	i387  __attribute__((aligned(16)));
 /* IO permissions. the bitmap could be moved into the GDT, that would make
    switch faster for a limited number of ioperm using tasks. -AK */
 	int		ioperm;
 	unsigned long	*io_bitmap_ptr;
 /* cached TLS descriptors. */
 	u64 tls_array[GDT_ENTRY_TLS_ENTRIES];
-};
+} __attribute__((aligned(16)));
 
 #define INIT_THREAD  {}
 
@@ -345,7 +345,17 @@
 /* '6' because it used to be for P6 only (but now covers Pentium 4 as well) */
 #define MICROCODE_IOCFREE	_IO('6',0)
 
+/* generic versions from gas */
+#define GENERIC_NOP1	".byte 0x90\n"
+#define GENERIC_NOP2    	".byte 0x89,0xf6\n"
+#define GENERIC_NOP3        ".byte 0x8d,0x76,0x00\n"
+#define GENERIC_NOP4        ".byte 0x8d,0x74,0x26,0x00\n"
+#define GENERIC_NOP5        GENERIC_NOP1 GENERIC_NOP4
+#define GENERIC_NOP6	".byte 0x8d,0xb6,0x00,0x00,0x00,0x00\n"
+#define GENERIC_NOP7	".byte 0x8d,0xb4,0x26,0x00,0x00,0x00,0x00\n"
+#define GENERIC_NOP8	GENERIC_NOP1 GENERIC_NOP7
 
+#ifdef CONFIG_MK8
 #define ASM_NOP1 K8_NOP1
 #define ASM_NOP2 K8_NOP2
 #define ASM_NOP3 K8_NOP3
@@ -354,6 +364,16 @@
 #define ASM_NOP6 K8_NOP6
 #define ASM_NOP7 K8_NOP7
 #define ASM_NOP8 K8_NOP8
+#else
+#define ASM_NOP1 GENERIC_NOP1
+#define ASM_NOP2 GENERIC_NOP2
+#define ASM_NOP3 GENERIC_NOP3
+#define ASM_NOP4 GENERIC_NOP4
+#define ASM_NOP5 GENERIC_NOP5
+#define ASM_NOP6 GENERIC_NOP6
+#define ASM_NOP7 GENERIC_NOP7
+#define ASM_NOP8 GENERIC_NOP8
+#endif
 
 /* Opteron nops */
 #define K8_NOP1 ".byte 0x90\n"
@@ -455,5 +475,10 @@
 })
 
 #define cache_line_size() (boot_cpu_data.x86_cache_alignment)
+
+#ifdef CONFIG_SCHED_SMT
+#define ARCH_HAS_SCHED_DOMAIN
+#define ARCH_HAS_SCHED_WAKE_IDLE
+#endif
 
 #endif /* __ASM_X86_64_PROCESSOR_H */
diff -Nru a/include/asm-x86_64/smp.h b/include/asm-x86_64/smp.h
--- a/include/asm-x86_64/smp.h	Sun May 16 01:18:33 2004
+++ b/include/asm-x86_64/smp.h	Sun May 16 01:18:33 2004
@@ -47,7 +47,7 @@
 extern void (*mtrr_hook) (void);
 extern void zap_low_mappings(void);
 void smp_stop_cpu(void);
-extern char cpu_sibling_map[];
+extern cpumask_t cpu_sibling_map[NR_CPUS];
 extern char phys_proc_id[NR_CPUS];
 
 #define SMP_TRAMPOLINE_BASE 0x6000
diff -Nru a/include/asm-x86_64/spinlock.h b/include/asm-x86_64/spinlock.h
--- a/include/asm-x86_64/spinlock.h	Sun May 16 01:18:36 2004
+++ b/include/asm-x86_64/spinlock.h	Sun May 16 01:18:36 2004
@@ -41,6 +41,7 @@
 
 #define spin_is_locked(x)	(*(volatile signed char *)(&(x)->lock) <= 0)
 #define spin_unlock_wait(x)	do { barrier(); } while(spin_is_locked(x))
+#define _raw_spin_lock_flags(lock, flags) _raw_spin_lock(lock)
 
 #define spin_lock_string \
 	"\n1:\t" \
diff -Nru a/include/asm-x86_64/timex.h b/include/asm-x86_64/timex.h
--- a/include/asm-x86_64/timex.h	Sun May 16 01:18:35 2004
+++ b/include/asm-x86_64/timex.h	Sun May 16 01:18:35 2004
@@ -7,11 +7,12 @@
 #define _ASMx8664_TIMEX_H
 
 #include <linux/config.h>
+#include <asm/8253pit.h>
 #include <asm/msr.h>
 #include <asm/vsyscall.h>
 #include <asm/hpet.h>
 
-#define CLOCK_TICK_RATE	1193182 /* Underlying HZ */
+#define CLOCK_TICK_RATE	PIT_TICK_RATE	/* Underlying HZ */
 #define CLOCK_TICK_FACTOR	20	/* Factor of both 1000000 and CLOCK_TICK_RATE */
 #define FINETUNE ((((((int)LATCH * HZ - CLOCK_TICK_RATE) << SHIFT_HZ) * \
 	(1000000/CLOCK_TICK_FACTOR) / (CLOCK_TICK_RATE/CLOCK_TICK_FACTOR)) \
diff -Nru a/include/asm-x86_64/unistd.h b/include/asm-x86_64/unistd.h
--- a/include/asm-x86_64/unistd.h	Sun May 16 01:18:35 2004
+++ b/include/asm-x86_64/unistd.h	Sun May 16 01:18:35 2004
@@ -731,7 +731,7 @@
 
 #endif /* __KERNEL_SYSCALLS__ */
 
-#ifndef __ASSEMBLY__
+#if !defined(__ASSEMBLY__) && defined(__KERNEL__)
 
 #include <linux/linkage.h>
 #include <linux/compiler.h>
diff -Nru a/include/linux/ata.h b/include/linux/ata.h
--- a/include/linux/ata.h	Sun May 16 01:18:35 2004
+++ b/include/linux/ata.h	Sun May 16 01:18:35 2004
@@ -104,6 +104,8 @@
 
 	/* ATA device commands */
 	ATA_CMD_EDD		= 0x90,	/* execute device diagnostic */
+	ATA_CMD_FLUSH		= 0xE7,
+	ATA_CMD_FLUSH_EXT	= 0xEA,
 	ATA_CMD_ID_ATA		= 0xEC,
 	ATA_CMD_ID_ATAPI	= 0xA1,
 	ATA_CMD_READ		= 0xC8,
@@ -196,7 +198,9 @@
 };
 
 #define ata_id_is_ata(dev)	(((dev)->id[0] & (1 << 15)) == 0)
+#define ata_id_wcache_enabled(dev) ((dev)->id[85] & (1 << 5))
 #define ata_id_has_lba48(dev)	((dev)->id[83] & (1 << 10))
+#define ata_id_has_wcache(dev)	((dev)->id[82] & (1 << 5))
 #define ata_id_has_lba(dev)	((dev)->id[49] & (1 << 8))
 #define ata_id_has_dma(dev)	((dev)->id[49] & (1 << 9))
 #define ata_id_u32(dev,n)	\
diff -Nru a/include/linux/auto_fs4.h b/include/linux/auto_fs4.h
--- a/include/linux/auto_fs4.h	Sun May 16 01:18:33 2004
+++ b/include/linux/auto_fs4.h	Sun May 16 01:18:33 2004
@@ -23,6 +23,12 @@
 #define AUTOFS_MIN_PROTO_VERSION	3
 #define AUTOFS_MAX_PROTO_VERSION	4
 
+#define AUTOFS_PROTO_SUBVERSION         5
+
+/* Mask for expire behaviour */
+#define AUTOFS_EXP_IMMEDIATE		1
+#define AUTOFS_EXP_LEAVES		2
+
 /* New message type */
 #define autofs_ptype_expire_multi	2	/* Expire entry (umount request) */
 
@@ -41,7 +47,11 @@
 	struct autofs_packet_expire_multi expire_multi;
 };
 
-#define AUTOFS_IOC_EXPIRE_MULTI _IOW(0x93,0x66,int)
+#define AUTOFS_IOC_EXPIRE_MULTI		_IOW(0x93,0x66,int)
+#define AUTOFS_IOC_PROTOSUBVER		_IOR(0x93,0x67,int)
+#define AUTOFS_IOC_ASKREGHOST           _IOR(0x93,0x68,int)
+#define AUTOFS_IOC_TOGGLEREGHOST        _IOR(0x93,0x69,int)
+#define AUTOFS_IOC_ASKUMOUNT		_IOR(0x93,0x70,int)
 
 
 #endif /* _LINUX_AUTO_FS4_H */
diff -Nru a/include/linux/backing-dev.h b/include/linux/backing-dev.h
--- a/include/linux/backing-dev.h	Sun May 16 01:18:34 2004
+++ b/include/linux/backing-dev.h	Sun May 16 01:18:34 2004
@@ -28,12 +28,12 @@
 	int memory_backed;	/* Cannot clean pages with writepage */
 	congested_fn *congested_fn; /* Function pointer if device is md/dm */
 	void *congested_data;	/* Pointer to aux data for congested func */
-	void (*unplug_io_fn)(struct backing_dev_info *);
+	void (*unplug_io_fn)(struct backing_dev_info *, struct page *);
 	void *unplug_io_data;
 };
 
 extern struct backing_dev_info default_backing_dev_info;
-void default_unplug_io_fn(struct backing_dev_info *bdi);
+void default_unplug_io_fn(struct backing_dev_info *bdi, struct page *page);
 
 int writeback_acquire(struct backing_dev_info *bdi);
 int writeback_in_progress(struct backing_dev_info *bdi);
diff -Nru a/include/linux/blkdev.h b/include/linux/blkdev.h
--- a/include/linux/blkdev.h	Sun May 16 01:18:34 2004
+++ b/include/linux/blkdev.h	Sun May 16 01:18:34 2004
@@ -334,6 +334,8 @@
 	 * queue settings
 	 */
 	unsigned long		nr_requests;	/* Max # of requests */
+	unsigned int		nr_congestion_on;
+	unsigned int		nr_congestion_off;
 
 	unsigned short		max_sectors;
 	unsigned short		max_phys_segments;
@@ -530,16 +532,27 @@
 	return bdev->bd_disk->queue;
 }
 
-static inline void blk_run_backing_dev(struct backing_dev_info *bdi)
+static inline void blk_run_backing_dev(struct backing_dev_info *bdi,
+				       struct page *page)
 {
 	if (bdi && bdi->unplug_io_fn)
-		bdi->unplug_io_fn(bdi);
+		bdi->unplug_io_fn(bdi, page);
 }
 
 static inline void blk_run_address_space(struct address_space *mapping)
 {
 	if (mapping)
-		blk_run_backing_dev(mapping->backing_dev_info);
+		blk_run_backing_dev(mapping->backing_dev_info, NULL);
+}
+
+static inline void blk_run_page(struct page *page)
+{
+	struct address_space *mapping;
+
+	smp_mb();
+	mapping = page->mapping;
+	if (mapping)
+		blk_run_backing_dev(mapping->backing_dev_info, page);
 }
 
 /*
diff -Nru a/include/linux/buffer_head.h b/include/linux/buffer_head.h
--- a/include/linux/buffer_head.h	Sun May 16 01:18:33 2004
+++ b/include/linux/buffer_head.h	Sun May 16 01:18:33 2004
@@ -170,6 +170,7 @@
 struct buffer_head *alloc_buffer_head(int gfp_flags);
 void free_buffer_head(struct buffer_head * bh);
 void FASTCALL(unlock_buffer(struct buffer_head *bh));
+void FASTCALL(__lock_buffer(struct buffer_head *bh));
 void ll_rw_block(int, int, struct buffer_head * bh[]);
 void sync_dirty_buffer(struct buffer_head *bh);
 void submit_bh(int, struct buffer_head *);
@@ -279,8 +280,8 @@
 
 static inline void lock_buffer(struct buffer_head *bh)
 {
-	while (test_set_buffer_locked(bh))
-		__wait_on_buffer(bh);
+	if (test_set_buffer_locked(bh))
+		__lock_buffer(bh);
 }
 
 #endif /* _LINUX_BUFFER_HEAD_H */
diff -Nru a/include/linux/compat.h b/include/linux/compat.h
--- a/include/linux/compat.h	Sun May 16 01:18:35 2004
+++ b/include/linux/compat.h	Sun May 16 01:18:35 2004
@@ -117,5 +117,18 @@
 long compat_sys_shmctl(int first, int second, void __user *uptr);
 long compat_sys_semtimedop(int semid, struct sembuf __user *tsems,
 		unsigned nsems, const struct compat_timespec __user *timeout);
+
+asmlinkage ssize_t compat_sys_readv(unsigned long fd,
+		const struct compat_iovec __user *vec, unsigned long vlen);
+asmlinkage ssize_t compat_sys_writev(unsigned long fd,
+		const struct compat_iovec __user *vec, unsigned long vlen);
+
+int compat_do_execve(char * filename, compat_uptr_t __user *argv,
+	        compat_uptr_t __user *envp, struct pt_regs * regs);
+
+asmlinkage long compat_sys_select(int n, compat_ulong_t __user *inp,
+		compat_ulong_t __user *outp, compat_ulong_t __user *exp,
+		struct compat_timeval __user *tvp);
+
 #endif /* CONFIG_COMPAT */
 #endif /* _LINUX_COMPAT_H */
diff -Nru a/include/linux/compat_ioctl.h b/include/linux/compat_ioctl.h
--- a/include/linux/compat_ioctl.h	Sun May 16 01:18:36 2004
+++ b/include/linux/compat_ioctl.h	Sun May 16 01:18:36 2004
@@ -546,6 +546,10 @@
 COMPATIBLE_IOCTL(AUTOFS_IOC_PROTOVER)
 COMPATIBLE_IOCTL(AUTOFS_IOC_EXPIRE)
 COMPATIBLE_IOCTL(AUTOFS_IOC_EXPIRE_MULTI)
+COMPATIBLE_IOCTL(AUTOFS_IOC_PROTOSUBVER)
+COMPATIBLE_IOCTL(AUTOFS_IOC_ASKREGHOST)
+COMPATIBLE_IOCTL(AUTOFS_IOC_TOGGLEREGHOST)
+COMPATIBLE_IOCTL(AUTOFS_IOC_ASKUMOUNT)
 /* DEVFS */
 COMPATIBLE_IOCTL(DEVFSDIOC_GET_PROTO_REV)
 COMPATIBLE_IOCTL(DEVFSDIOC_SET_EVENT_MASK)
diff -Nru a/include/linux/console.h b/include/linux/console.h
--- a/include/linux/console.h	Sun May 16 01:18:34 2004
+++ b/include/linux/console.h	Sun May 16 01:18:34 2004
@@ -19,6 +19,7 @@
 
 struct vc_data;
 struct console_font_op;
+struct module;
 
 /*
  * this is what the terminal answers to a ESC-Z or csi0c query.
@@ -27,6 +28,7 @@
 #define VT102ID "\033[?6c"
 
 struct consw {
+	struct module *owner;
 	const char *(*con_startup)(void);
 	void	(*con_init)(struct vc_data *, int);
 	void	(*con_deinit)(struct vc_data *);
@@ -58,7 +60,7 @@
 extern const struct consw newport_con;	/* SGI Newport console  */
 extern const struct consw prom_con;	/* SPARC PROM console */
 
-void take_over_console(const struct consw *sw, int first, int last, int deflt);
+int take_over_console(const struct consw *sw, int first, int last, int deflt);
 void give_up_console(const struct consw *sw);
 
 /* scroll */
diff -Nru a/include/linux/cpumask.h b/include/linux/cpumask.h
--- a/include/linux/cpumask.h	Sun May 16 01:18:34 2004
+++ b/include/linux/cpumask.h	Sun May 16 01:18:34 2004
@@ -10,11 +10,15 @@
 
 extern cpumask_t cpu_online_map;
 extern cpumask_t cpu_possible_map;
+extern cpumask_t cpu_present_map;
 
 #define num_online_cpus()		cpus_weight(cpu_online_map)
 #define num_possible_cpus()		cpus_weight(cpu_possible_map)
+#define num_present_cpus()		cpus_weight(cpu_present_map)
+
 #define cpu_online(cpu)			cpu_isset(cpu, cpu_online_map)
 #define cpu_possible(cpu)		cpu_isset(cpu, cpu_possible_map)
+#define cpu_present(cpu)		cpu_isset(cpu, cpu_present_map)
 
 #define for_each_cpu_mask(cpu, mask)					\
 	for (cpu = first_cpu_const(mk_cpumask_const(mask));		\
@@ -23,16 +27,23 @@
 
 #define for_each_cpu(cpu) for_each_cpu_mask(cpu, cpu_possible_map)
 #define for_each_online_cpu(cpu) for_each_cpu_mask(cpu, cpu_online_map)
+#define for_each_present_cpu(cpu) for_each_cpu_mask(cpu, cpu_present_map)
 #else
 #define	cpu_online_map			cpumask_of_cpu(0)
 #define	cpu_possible_map		cpumask_of_cpu(0)
+#define	cpu_present_map			cpumask_of_cpu(0)
+
 #define num_online_cpus()		1
 #define num_possible_cpus()		1
+#define num_present_cpus()		1
+
 #define cpu_online(cpu)			({ BUG_ON((cpu) != 0); 1; })
 #define cpu_possible(cpu)		({ BUG_ON((cpu) != 0); 1; })
+#define cpu_present(cpu)		({ BUG_ON((cpu) != 0); 1; })
 
 #define for_each_cpu(cpu) for (cpu = 0; cpu < 1; cpu++)
 #define for_each_online_cpu(cpu) for (cpu = 0; cpu < 1; cpu++)
+#define for_each_present_cpu(cpu) for (cpu = 0; cpu < 1; cpu++)
 #endif
 
 #define cpumask_scnprintf(buf, buflen, map)				\
diff -Nru a/include/linux/dcache.h b/include/linux/dcache.h
--- a/include/linux/dcache.h	Sun May 16 01:18:37 2004
+++ b/include/linux/dcache.h	Sun May 16 01:18:37 2004
@@ -27,12 +27,14 @@
 /*
  * "quick string" -- eases parameter passing, but more importantly
  * saves "metadata" about the string (ie length and the hash).
+ *
+ * hash comes first so it snuggles against d_parent and d_bucket in the
+ * dentry.
  */
 struct qstr {
-	const unsigned char * name;
-	unsigned int len;
 	unsigned int hash;
-	char name_str[0];
+	const unsigned char *name;
+	unsigned int len;
 };
 
 struct dentry_stat_t {
@@ -74,38 +76,40 @@
 	return end_name_hash(hash);
 }
 
-#define DNAME_INLINE_LEN_MIN 24
-
 struct dcookie_struct;
- 
+
+/*
+ * On x86, dentries are a multiple of 16 bytes, with 16-byte alignment.
+ */
 struct dentry {
 	atomic_t d_count;
+	unsigned int d_flags;		/* protected by d_lock */
 	spinlock_t d_lock;		/* per dentry lock */
-	unsigned long d_vfs_flags;	/* moved here to be on same cacheline */
-	struct inode  * d_inode;	/* Where the name belongs to - NULL is negative */
+	struct inode *d_inode;		/* Where the name belongs to - NULL is
+					 * negative */
+	/*
+	 * The next three fields are touched by __d_lookup.  Place them here
+	 * so they all fit in a 16-byte range, with 16-byte alignment.
+	 */
+	struct dentry *d_parent;	/* parent directory */
+	struct hlist_head *d_bucket;	/* lookup hash bucket */
+	struct qstr d_name;
+
 	struct list_head d_lru;		/* LRU list */
 	struct list_head d_child;	/* child of parent list */
 	struct list_head d_subdirs;	/* our children */
 	struct list_head d_alias;	/* inode alias list */
 	unsigned long d_time;		/* used by d_revalidate */
-	struct dentry_operations  *d_op;
-	struct super_block * d_sb;	/* The root of the dentry tree */
-	unsigned int d_flags;
+	struct dentry_operations *d_op;
+	struct super_block *d_sb;	/* The root of the dentry tree */
 	int d_mounted;
-	void * d_fsdata;		/* fs-specific data */
+	void *d_fsdata;			/* fs-specific data */
  	struct rcu_head d_rcu;
-	struct dcookie_struct * d_cookie; /* cookie, if any */
-	unsigned long d_move_count;	/* to indicated moved dentry while lockless lookup */
-	struct qstr * d_qstr;		/* quick str ptr used in lockless lookup and concurrent d_move */
-	struct dentry * d_parent;	/* parent directory */
-	struct qstr d_name;
+	struct dcookie_struct *d_cookie; /* cookie, if any */
 	struct hlist_node d_hash;	/* lookup hash list */	
-	struct hlist_head * d_bucket;	/* lookup hash bucket */
-	unsigned char d_iname[DNAME_INLINE_LEN_MIN]; /* small names */
+	unsigned char d_iname[0];	/* small names */
 };
 
-#define DNAME_INLINE_LEN	(sizeof(struct dentry)-offsetof(struct dentry,d_iname))
- 
 struct dentry_operations {
 	int (*d_revalidate)(struct dentry *, struct nameidata *);
 	int (*d_hash) (struct dentry *, struct qstr *);
@@ -124,13 +128,13 @@
 
 /*
 locking rules:
-		big lock	dcache_lock	may block
-d_revalidate:	no		no		yes
-d_hash		no		no		yes
-d_compare:	no		yes		no
-d_delete:	no		yes		no
-d_release:	no		no		yes
-d_iput:		no		no		yes
+		big lock	dcache_lock	d_lock   may block
+d_revalidate:	no		no		no       yes
+d_hash		no		no		no       yes
+d_compare:	no		yes		yes      no
+d_delete:	no		yes		no       no
+d_release:	no		no		no       yes
+d_iput:		no		no		no       yes
  */
 
 /* d_flags entries */
@@ -175,8 +179,8 @@
 
 static inline void __d_drop(struct dentry *dentry)
 {
-	if (!(dentry->d_vfs_flags & DCACHE_UNHASHED)) {
-		dentry->d_vfs_flags |= DCACHE_UNHASHED;
+	if (!(dentry->d_flags & DCACHE_UNHASHED)) {
+		dentry->d_flags |= DCACHE_UNHASHED;
 		hlist_del_rcu(&dentry->d_hash);
 	}
 }
@@ -188,9 +192,9 @@
 	spin_unlock(&dcache_lock);
 }
 
-static inline int dname_external(struct dentry *d)
+static inline int dname_external(struct dentry *dentry)
 {
-	return d->d_name.name != d->d_iname; 
+	return dentry->d_name.name != dentry->d_iname;
 }
 
 /*
@@ -287,7 +291,7 @@
  
 static inline int d_unhashed(struct dentry *dentry)
 {
-	return (dentry->d_vfs_flags & DCACHE_UNHASHED);
+	return (dentry->d_flags & DCACHE_UNHASHED);
 }
 
 static inline struct dentry *dget_parent(struct dentry *dentry)
diff -Nru a/include/linux/device.h b/include/linux/device.h
--- a/include/linux/device.h	Sun May 16 01:18:36 2004
+++ b/include/linux/device.h	Sun May 16 01:18:36 2004
@@ -400,13 +400,13 @@
 
 /* debugging and troubleshooting/diagnostic helpers. */
 #define dev_printk(level, dev, format, arg...)	\
-	printk(level "%s %s: " format , (dev)->driver->name , (dev)->bus_id , ## arg)
+	printk(level "%s %s: " format , (dev)->driver ? (dev)->driver->name : "" , (dev)->bus_id , ## arg)
 
 #ifdef DEBUG
 #define dev_dbg(dev, format, arg...)		\
 	dev_printk(KERN_DEBUG , dev , format , ## arg)
 #else
-#define dev_dbg(dev, format, arg...) do {} while (0)
+#define dev_dbg(dev, format, arg...) do { (void)(dev); } while (0)
 #endif
 
 #define dev_err(dev, format, arg...)		\
diff -Nru a/include/linux/fs.h b/include/linux/fs.h
--- a/include/linux/fs.h	Sun May 16 01:18:34 2004
+++ b/include/linux/fs.h	Sun May 16 01:18:34 2004
@@ -1114,6 +1114,7 @@
 			void *data);
 struct super_block *get_sb_pseudo(struct file_system_type *, char *,
 			struct super_operations *ops, unsigned long);
+int __put_super(struct super_block *sb);
 void unnamed_dev_init(void);
 
 /* Alas, no aliases. Too much hassle with bringing module.h everywhere */
@@ -1125,6 +1126,7 @@
 extern int register_filesystem(struct file_system_type *);
 extern int unregister_filesystem(struct file_system_type *);
 extern struct vfsmount *kern_mount(struct file_system_type *);
+extern int may_umount_tree(struct vfsmount *);
 extern int may_umount(struct vfsmount *);
 extern long do_mount(char *, char *, char *, unsigned long, void *);
 
diff -Nru a/include/linux/hugetlb.h b/include/linux/hugetlb.h
--- a/include/linux/hugetlb.h	Sun May 16 01:18:35 2004
+++ b/include/linux/hugetlb.h	Sun May 16 01:18:35 2004
@@ -30,6 +30,7 @@
 
 extern unsigned long max_huge_pages;
 extern const unsigned long hugetlb_zero, hugetlb_infinity;
+extern int sysctl_hugetlb_shm_group;
 
 static inline void
 mark_mm_hugetlb(struct mm_struct *mm, struct vm_area_struct *vma)
diff -Nru a/include/linux/i2c-id.h b/include/linux/i2c-id.h
--- a/include/linux/i2c-id.h	Sun May 16 01:18:33 2004
+++ b/include/linux/i2c-id.h	Sun May 16 01:18:33 2004
@@ -222,7 +222,7 @@
 #define I2C_HW_B_OMAHA  0x14    /* Omaha I2C interface (ARM)		*/
 #define I2C_HW_B_GUIDE  0x15    /* Guide bit-basher			*/
 #define I2C_HW_B_IXP2000 0x16	/* GPIO on IXP2000 systems              */
-#define I2C_HW_B_IXP425 0x17	/* GPIO on IXP425 systems		*/
+#define I2C_HW_B_IXP4XX 0x17	/* GPIO on IXP4XX systems		*/
 #define I2C_HW_B_S3VIA	0x18	/* S3Via ProSavage adapter		*/
 #define I2C_HW_B_ZR36067 0x19	/* Zoran-36057/36067 based boards	*/
 
diff -Nru a/include/linux/i2c.h b/include/linux/i2c.h
--- a/include/linux/i2c.h	Sun May 16 01:18:34 2004
+++ b/include/linux/i2c.h	Sun May 16 01:18:34 2004
@@ -113,6 +113,7 @@
 	struct module *owner;
 	char name[32];
 	int id;
+	unsigned int class;
 	unsigned int flags;		/* div., see below		*/
 
 	/* Notifies the driver that a new bus has appeared. This routine
@@ -237,7 +238,6 @@
 	/* data fields that are valid for all devices	*/
 	struct semaphore bus_lock;
 	struct semaphore clist_lock;
-	unsigned int flags;/* flags specifying div. data		*/
 
 	int timeout;
 	int retries;
@@ -286,12 +286,14 @@
 						/* Must equal I2C_M_TEN below */
 
 /* i2c adapter classes (bitmask) */
-#define I2C_ADAP_CLASS_SMBUS		(1<<0)	/* lm_sensors, ... */
-#define I2C_ADAP_CLASS_TV_ANALOG	(1<<1)	/* bttv + friends */
-#define I2C_ADAP_CLASS_TV_DIGITAL	(1<<2)	/* dbv cards */
-#define I2C_ADAP_CLASS_DDC		(1<<3)	/* i2c-matroxfb ? */
-#define I2C_ADAP_CLASS_CAM_ANALOG	(1<<4)	/* camera with analog CCD */
-#define I2C_ADAP_CLASS_CAM_DIGITAL	(1<<5)	/* most webcams */
+#define I2C_CLASS_HWMON		(1<<0)	/* lm_sensors, ... */
+#define I2C_CLASS_TV_ANALOG	(1<<1)	/* bttv + friends */
+#define I2C_CLASS_TV_DIGITAL	(1<<2)	/* dvb cards */
+#define I2C_CLASS_DDC		(1<<3)	/* i2c-matroxfb ? */
+#define I2C_CLASS_CAM_ANALOG	(1<<4)	/* camera with analog CCD */
+#define I2C_CLASS_CAM_DIGITAL	(1<<5)	/* most webcams */
+#define I2C_CLASS_SOUND		(1<<6)	/* sound devices */
+#define I2C_CLASS_ALL		(UINT_MAX) /* all of the above */
 
 /* i2c_client_address_data is the struct for holding default client
  * addresses for a driver and for the parameters supplied on the
diff -Nru a/include/linux/i2o-dev.h b/include/linux/i2o-dev.h
--- a/include/linux/i2o-dev.h	Sun May 16 01:18:33 2004
+++ b/include/linux/i2o-dev.h	Sun May 16 01:18:33 2004
@@ -41,6 +41,14 @@
 #define I2OHTML 		_IOWR(I2O_MAGIC_NUMBER,9,struct i2o_html)
 #define I2OEVTREG		_IOW(I2O_MAGIC_NUMBER,10,struct i2o_evt_id)
 #define I2OEVTGET		_IOR(I2O_MAGIC_NUMBER,11,struct i2o_evt_info)
+#define I2OPASSTHRU		_IOR(I2O_MAGIC_NUMBER,12,struct i2o_cmd_passthru)
+
+struct i2o_cmd_passthru
+{
+	void *msg;		/* message */
+	int iop;		/* number of the I2O controller, to which the
+				   message should go to */
+};
 
 struct i2o_cmd_hrtlct
 {
diff -Nru a/include/linux/i2o.h b/include/linux/i2o.h
--- a/include/linux/i2o.h	Sun May 16 01:18:34 2004
+++ b/include/linux/i2o.h	Sun May 16 01:18:34 2004
@@ -76,6 +76,16 @@
 };
 
 /*
+ * context queue entry, used for 32-bit context on 64-bit systems
+ */
+struct i2o_context_list_element {
+	struct i2o_context_list_element *next;
+	u32 context;
+	void *ptr;
+	unsigned int flags;
+};
+
+/*
  * Each I2O controller has one of these objects
  */
 struct i2o_controller
@@ -133,6 +143,11 @@
 
 	void *page_frame;			/* Message buffers */
 	dma_addr_t page_frame_map;		/* Cache map */
+#if BITS_PER_LONG == 64
+	spinlock_t context_list_lock;		/* lock for context_list */
+	struct i2o_context_list_element *context_list; /* list of context id's
+						    and pointers */
+#endif
 };
 
 /*
@@ -322,6 +337,27 @@
 extern void i2o_run_queue(struct i2o_controller *);
 extern int i2o_delete_controller(struct i2o_controller *);
 
+#if BITS_PER_LONG == 64
+extern u32 i2o_context_list_add(void *, struct i2o_controller *);
+extern void *i2o_context_list_get(u32, struct i2o_controller *);
+extern u32 i2o_context_list_remove(void *, struct i2o_controller *);
+#else
+static inline u32 i2o_context_list_add(void *ptr, struct i2o_controller *c)
+{
+	return (u32)ptr;
+}
+
+static inline void *i2o_context_list_get(u32 context, struct i2o_controller *c)
+{
+	return (void *)context;
+}
+
+static inline u32 i2o_context_list_remove(void *ptr, struct i2o_controller *c)
+{
+	return (u32)ptr;
+}
+#endif
+
 /*
  *	Cache strategies
  */
@@ -640,12 +676,18 @@
 #define HOST_TID		1
 
 #define MSG_FRAME_SIZE		64	/* i2o_scsi assumes >= 32 */
+#define REPLY_FRAME_SIZE	17
+#define SG_TABLESIZE		30
 #define NMBR_MSG_FRAMES		128
 
 #define MSG_POOL_SIZE		(MSG_FRAME_SIZE*NMBR_MSG_FRAMES*sizeof(u32))
 
 #define I2O_POST_WAIT_OK	0
 #define I2O_POST_WAIT_TIMEOUT	-ETIMEDOUT
+
+#define I2O_CONTEXT_LIST_MIN_LENGTH	15
+#define I2O_CONTEXT_LIST_USED		0x01
+#define I2O_CONTEXT_LIST_DELETED	0x02
 
 #endif /* __KERNEL__ */
 #endif /* _I2O_H */
diff -Nru a/include/linux/init.h b/include/linux/init.h
--- a/include/linux/init.h	Sun May 16 01:18:33 2004
+++ b/include/linux/init.h	Sun May 16 01:18:33 2004
@@ -46,8 +46,6 @@
 #define __exitdata	__attribute__ ((__section__(".exit.data")))
 #define __exit_call	__attribute_used__ __attribute__ ((__section__ (".exitcall.exit")))
 
-#define __sched		__attribute__((__section__(".sched.text")))
-
 #ifdef MODULE
 #define __exit		__attribute__ ((__section__(".exit.text")))
 #else
diff -Nru a/include/linux/kobject.h b/include/linux/kobject.h
--- a/include/linux/kobject.h	Sun May 16 01:18:33 2004
+++ b/include/linux/kobject.h	Sun May 16 01:18:33 2004
@@ -48,7 +48,7 @@
 extern int kobject_add(struct kobject *);
 extern void kobject_del(struct kobject *);
 
-extern void kobject_rename(struct kobject *, char *new_name);
+extern int kobject_rename(struct kobject *, char *new_name);
 
 extern int kobject_register(struct kobject *);
 extern void kobject_unregister(struct kobject *);
diff -Nru a/include/linux/libata.h b/include/linux/libata.h
--- a/include/linux/libata.h	Sun May 16 01:18:33 2004
+++ b/include/linux/libata.h	Sun May 16 01:18:33 2004
@@ -27,6 +27,7 @@
 #include <linux/interrupt.h>
 #include <asm/io.h>
 #include <linux/ata.h>
+#include <linux/workqueue.h>
 
 /*
  * compile-time options
@@ -111,10 +112,6 @@
 	ATA_QCFLAG_DMA		= (1 << 2), /* data delivered via DMA */
 	ATA_QCFLAG_ATAPI	= (1 << 3), /* is ATAPI packet command? */
 	ATA_QCFLAG_SG		= (1 << 4), /* have s/g table? */
-	ATA_QCFLAG_POLL		= (1 << 5), /* polling, no interrupts */
-
-	/* struct ata_engine atomic flags (use test_bit, etc.) */
-	ATA_EFLG_ACTIVE		= 0,	/* engine is active */
 
 	/* various lengths of time */
 	ATA_TMOUT_EDD		= 5 * HZ,	/* hueristic */
@@ -144,13 +141,6 @@
 	THR_IDLE		= (THR_PROBE_FAILED + 1),
 	THR_PROBE_SUCCESS	= (THR_IDLE + 1),
 	THR_PROBE_START		= (THR_PROBE_SUCCESS + 1),
-	THR_PIO_POLL		= (THR_PROBE_START + 1),
-	THR_PIO_TMOUT		= (THR_PIO_POLL + 1),
-	THR_PIO			= (THR_PIO_TMOUT + 1),
-	THR_PIO_LAST		= (THR_PIO + 1),
-	THR_PIO_LAST_POLL	= (THR_PIO_LAST + 1),
-	THR_PIO_ERR		= (THR_PIO_LAST_POLL + 1),
-	THR_PACKET		= (THR_PIO_ERR + 1),
 
 	/* SATA port states */
 	PORT_UNKNOWN		= 0,
@@ -163,6 +153,17 @@
 	ATA_QCFLAG_TIMEOUT	= (1 << 0),
 };
 
+enum pio_task_states {
+	PIO_ST_UNKNOWN,
+	PIO_ST_IDLE,
+	PIO_ST_POLL,
+	PIO_ST_TMOUT,
+	PIO_ST,
+	PIO_ST_LAST,
+	PIO_ST_LAST_POLL,
+	PIO_ST_ERR,
+};
+
 /* forward declarations */
 struct scsi_device;
 struct ata_port_operations;
@@ -224,7 +225,6 @@
 	struct scsi_cmnd	*scsicmd;
 	void			(*scsidone)(struct scsi_cmnd *);
 
-	struct list_head	node;
 	unsigned long		flags;		/* ATA_QCFLAG_xxx */
 	unsigned int		tag;
 	unsigned int		n_elem;
@@ -239,7 +239,7 @@
 
 	ata_qc_cb_t		callback;
 
-	struct semaphore	sem;
+	struct completion	*waiting;
 
 	void			*private_data;
 };
@@ -271,11 +271,6 @@
 	u8			write_cmd;	/* opcode to use on write */
 };
 
-struct ata_engine {
-	unsigned long		flags;
-	struct list_head	q;
-};
-
 struct ata_port {
 	struct Scsi_Host	*host;	/* our co-allocated scsi host */
 	struct ata_port_operations	*ops;
@@ -296,8 +291,6 @@
 	unsigned int		udma_mask;
 	unsigned int		cbl;	/* cable type; ATA_CBL_xxx */
 
-	struct ata_engine	eng;
-
 	struct ata_device	device[ATA_MAX_DEVICES];
 
 	struct ata_queued_cmd	qcmd[ATA_MAX_QUEUE];
@@ -307,16 +300,17 @@
 	struct ata_host_stats	stats;
 	struct ata_host_set	*host_set;
 
-	struct semaphore	sem;
 	struct semaphore	probe_sem;
 
 	unsigned int		thr_state;
-	int			time_to_die;
-	pid_t			thr_pid;
-	struct completion	thr_exited;
-	struct semaphore	thr_sem;
-	struct timer_list	thr_timer;
-	unsigned long		thr_timeout;
+
+	struct work_struct	packet_task;
+
+	struct work_struct	pio_task;
+	unsigned int		pio_task_state;
+	unsigned long		pio_task_timeout;
+
+	struct work_struct	probe_task;
 
 	void			*private_data;
 };
@@ -340,6 +334,7 @@
 	void (*phy_reset) (struct ata_port *ap);
 	void (*post_set_mode) (struct ata_port *ap);
 
+	void (*bmdma_setup) (struct ata_queued_cmd *qc);
 	void (*bmdma_start) (struct ata_queued_cmd *qc);
 	void (*fill_sg) (struct ata_queued_cmd *qc);
 	void (*eng_timeout) (struct ata_port *ap);
@@ -392,6 +387,8 @@
 extern void ata_tf_load_mmio(struct ata_port *ap, struct ata_taskfile *tf);
 extern void ata_tf_read_pio(struct ata_port *ap, struct ata_taskfile *tf);
 extern void ata_tf_read_mmio(struct ata_port *ap, struct ata_taskfile *tf);
+extern void ata_tf_to_fis(struct ata_taskfile *tf, u8 *fis, u8 pmp);
+extern void ata_tf_from_fis(u8 *fis, struct ata_taskfile *tf);
 extern u8 ata_check_status_pio(struct ata_port *ap);
 extern u8 ata_check_status_mmio(struct ata_port *ap);
 extern void ata_exec_command_pio(struct ata_port *ap, struct ata_taskfile *tf);
@@ -400,10 +397,12 @@
 extern void ata_port_stop (struct ata_port *ap);
 extern irqreturn_t ata_interrupt (int irq, void *dev_instance, struct pt_regs *regs);
 extern void ata_fill_sg(struct ata_queued_cmd *qc);
+extern void ata_bmdma_setup_mmio (struct ata_queued_cmd *qc);
 extern void ata_bmdma_start_mmio (struct ata_queued_cmd *qc);
+extern void ata_bmdma_setup_pio (struct ata_queued_cmd *qc);
 extern void ata_bmdma_start_pio (struct ata_queued_cmd *qc);
 extern int pci_test_config_bits(struct pci_dev *pdev, struct pci_bits *bits);
-extern void ata_qc_complete(struct ata_queued_cmd *qc, u8 drv_stat, unsigned int done_late);
+extern void ata_qc_complete(struct ata_queued_cmd *qc, u8 drv_stat);
 extern void ata_eng_timeout(struct ata_port *ap);
 extern int ata_std_bios_param(struct scsi_device *sdev,
 			      struct block_device *bdev,
@@ -411,11 +410,6 @@
 extern int ata_scsi_slave_config(struct scsi_device *sdev);
 
 
-static inline unsigned long msecs_to_jiffies(unsigned long msecs)
-{
-	return ((HZ * msecs + 999) / 1000);
-}
-
 static inline unsigned int ata_tag_valid(unsigned int tag)
 {
 	return (tag < ATA_MAX_QUEUE) ? 1 : 0;
@@ -479,6 +473,12 @@
 	}
 
 	return status;
+}
+
+static inline void ata_qc_set_polling(struct ata_queued_cmd *qc)
+{
+	qc->flags &= ~ATA_QCFLAG_DMA;
+	qc->tf.ctl |= ATA_NIEN;
 }
 
 static inline struct ata_queued_cmd *ata_qc_from_tag (struct ata_port *ap,
diff -Nru a/include/linux/mm.h b/include/linux/mm.h
--- a/include/linux/mm.h	Sun May 16 01:18:33 2004
+++ b/include/linux/mm.h	Sun May 16 01:18:33 2004
@@ -112,9 +112,6 @@
 #define VM_HUGETLB	0x00400000	/* Huge TLB Page VM */
 #define VM_NONLINEAR	0x00800000	/* Is non-linear (remap_file_pages) */
 
-/* It makes sense to apply VM_ACCOUNT to this vma. */
-#define VM_MAYACCT(vma) (!!((vma)->vm_flags & VM_HUGETLB))
-
 #ifndef VM_STACK_DEFAULT_FLAGS		/* arch can override this */
 #define VM_STACK_DEFAULT_FLAGS VM_DATA_DEFAULT_FLAGS
 #endif
@@ -179,7 +176,7 @@
 struct page {
 	page_flags_t flags;		/* atomic flags, some possibly
 					   updated asynchronously */
-	atomic_t count;			/* Usage count, see below. */
+	atomic_t _count;		/* Usage count, see below. */
 	struct address_space *mapping;	/* The inode (or ...) we belong to. */
 	pgoff_t index;			/* Our offset within mapping. */
 	struct list_head lru;		/* Pageout list, eg. active_list;
@@ -227,15 +224,35 @@
  *
  * Also, many kernel routines increase the page count before a critical
  * routine so they can be sure the page doesn't go away from under them.
+ *
+ * Since 2.6.6 (approx), a free page has ->_count = -1.  This is so that we
+ * can use atomic_add_negative(-1, page->_count) to detect when the page
+ * becomes free and so that we can also use atomic_inc_and_test to atomically
+ * detect when we just tried to grab a ref on a page which some other CPU has
+ * already deemed to be freeable.
+ *
+ * NO code should make assumptions about this internal detail!  Use the provided
+ * macros which retain the old rules: page_count(page) == 0 is a free page.
+ */
+
+/*
+ * Drop a ref, return true if the logical refcount fell to zero (the page has
+ * no users)
  */
 #define put_page_testzero(p)				\
 	({						\
 		BUG_ON(page_count(p) == 0);		\
-		atomic_dec_and_test(&(p)->count);	\
+		atomic_add_negative(-1, &(p)->_count);	\
 	})
 
-#define set_page_count(p,v) 	atomic_set(&(p)->count, v)
-#define __put_page(p)		atomic_dec(&(p)->count)
+/*
+ * Grab a ref, return true if the page previously had a logical refcount of
+ * zero.  ie: returns true if we just grabbed an already-deemed-to-be-free page
+ */
+#define get_page_testone(p)	atomic_inc_and_test(&(p)->_count)
+
+#define set_page_count(p,v) 	atomic_set(&(p)->_count, v - 1)
+#define __put_page(p)		atomic_dec(&(p)->_count)
 
 extern void FASTCALL(__page_cache_release(struct page *));
 
@@ -245,25 +262,25 @@
 {
 	if (PageCompound(p))
 		p = (struct page *)p->private;
-	return atomic_read(&(p)->count);
+	return atomic_read(&(p)->_count) + 1;
 }
 
 static inline void get_page(struct page *page)
 {
 	if (unlikely(PageCompound(page)))
 		page = (struct page *)page->private;
-	atomic_inc(&page->count);
+	atomic_inc(&page->_count);
 }
 
 void put_page(struct page *page);
 
 #else		/* CONFIG_HUGETLB_PAGE */
 
-#define page_count(p)		atomic_read(&(p)->count)
+#define page_count(p)		(atomic_read(&(p)->_count) + 1)
 
 static inline void get_page(struct page *page)
 {
-	atomic_inc(&page->count);
+	atomic_inc(&page->_count);
 }
 
 static inline void put_page(struct page *page)
@@ -280,13 +297,13 @@
  * zeroes, and text pages of executables and shared libraries have
  * only one copy in memory, at most, normally.
  *
- * For the non-reserved pages, page->count denotes a reference count.
- *   page->count == 0 means the page is free.
- *   page->count == 1 means the page is used for exactly one purpose
+ * For the non-reserved pages, page_count(page) denotes a reference count.
+ *   page_count() == 0 means the page is free.
+ *   page_count() == 1 means the page is used for exactly one purpose
  *   (e.g. a private data page of one process).
  *
  * A page may be used for kmalloc() or anyone else who does a
- * __get_free_page(). In this case the page->count is at least 1, and
+ * __get_free_page(). In this case the page_count() is at least 1, and
  * all other fields are unused but should be 0 or NULL. The
  * management of this page is the responsibility of the one who uses
  * it.
@@ -303,14 +320,14 @@
  * page's address_space.  Usually, this is the address of a circular
  * list of the page's disk buffers.
  *
- * For pages belonging to inodes, the page->count is the number of
+ * For pages belonging to inodes, the page_count() is the number of
  * attaches, plus 1 if `private' contains something, plus one for
  * the page cache itself.
  *
  * All pages belonging to an inode are in these doubly linked lists:
  * mapping->clean_pages, mapping->dirty_pages and mapping->locked_pages;
  * using the page->list list_head. These fields are also used for
- * freelist managemet (when page->count==0).
+ * freelist managemet (when page_count()==0).
  *
  * There is also a per-mapping radix tree mapping index to the page
  * in memory if present. The tree is rooted at mapping->root.  
diff -Nru a/include/linux/module.h b/include/linux/module.h
--- a/include/linux/module.h	Sun May 16 01:18:36 2004
+++ b/include/linux/module.h	Sun May 16 01:18:36 2004
@@ -16,13 +16,14 @@
 #include <linux/kmod.h>
 #include <linux/elf.h>
 #include <linux/stringify.h>
+#include <linux/kobject.h>
+#include <linux/moduleparam.h>
 #include <asm/local.h>
 
 #include <asm/module.h>
 
 /* Not Yet Implemented */
 #define MODULE_SUPPORTED_DEVICE(name)
-#define print_modules()
 
 /* v850 toolchain uses a `_' prefix for all user symbols */
 #ifndef MODULE_SYMBOL_PREFIX
@@ -207,6 +208,23 @@
 	MODULE_STATE_GOING,
 };
 
+/* sysfs stuff */
+struct module_attribute
+{
+	struct attribute attr;
+	struct kernel_param *param;
+};
+
+struct module_kobject
+{
+	/* Everyone should have one of these. */
+	struct kobject kobj;
+
+	/* We always have refcnt, we may have others from module_param(). */
+	unsigned int num_attributes;
+	struct module_attribute attr[0];
+};
+
 struct module
 {
 	enum module_state state;
@@ -217,6 +235,9 @@
 	/* Unique handle for this module */
 	char name[MODULE_NAME_LEN];
 
+	/* Sysfs stuff. */
+	struct module_kobject *mkobj;
+
 	/* Exported symbols */
 	const struct kernel_symbol *syms;
 	unsigned int num_syms;
@@ -267,6 +288,9 @@
 
 	/* Destruction function. */
 	void (*exit)(void);
+
+	/* Fake kernel param for refcnt. */
+	struct kernel_param refcnt_param;
 #endif
 
 #ifdef CONFIG_KALLSYMS
@@ -400,6 +424,7 @@
 int register_module_notifier(struct notifier_block * nb);
 int unregister_module_notifier(struct notifier_block * nb);
 
+extern void print_modules(void);
 #else /* !CONFIG_MODULES... */
 #define EXPORT_SYMBOL(sym)
 #define EXPORT_SYMBOL_GPL(sym)
@@ -480,6 +505,9 @@
 
 #define module_put_and_exit(code) do_exit(code)
 
+static inline void print_modules(void)
+{
+}
 #endif /* CONFIG_MODULES */
 
 #define symbol_request(x) try_then_request_module(symbol_get(x), "symbol:" #x)
diff -Nru a/include/linux/moduleparam.h b/include/linux/moduleparam.h
--- a/include/linux/moduleparam.h	Sun May 16 01:18:35 2004
+++ b/include/linux/moduleparam.h	Sun May 16 01:18:35 2004
@@ -50,7 +50,7 @@
    not there, read bits mean it's readable, write bits mean it's
    writable. */
 #define __module_param_call(prefix, name, set, get, arg, perm)		\
-	static char __param_str_##name[] __initdata = prefix #name;	\
+	static char __param_str_##name[] = prefix #name;		\
 	static struct kernel_param const __param_##name			\
 	__attribute_used__						\
     __attribute__ ((unused,__section__ ("__param"),aligned(sizeof(void *)))) \
@@ -71,7 +71,7 @@
 
 /* Actually copy string: maxlen param is usually sizeof(string). */
 #define module_param_string(name, string, len, perm)			\
-	static struct kparam_string __param_string_##name __initdata	\
+	static struct kparam_string __param_string_##name		\
 		= { len, string };					\
 	module_param_call(name, param_set_copystring, param_get_charp,	\
 		   &__param_string_##name, perm)
diff -Nru a/include/linux/pci_ids.h b/include/linux/pci_ids.h
--- a/include/linux/pci_ids.h	Sun May 16 01:18:34 2004
+++ b/include/linux/pci_ids.h	Sun May 16 01:18:34 2004
@@ -435,7 +435,9 @@
 #define PCI_DEVICE_ID_IBM_CPC710_PCI64	0x00fc
 #define PCI_DEVICE_ID_IBM_CPC710_PCI32	0x0105
 #define	PCI_DEVICE_ID_IBM_405GP		0x0156
+#define PCI_DEVICE_ID_IBM_SNIPE		0x0180
 #define PCI_DEVICE_ID_IBM_SERVERAIDI960	0x01bd
+#define PCI_DEVICE_ID_IBM_GEMSTONE		0xB166
 #define PCI_DEVICE_ID_IBM_MPIC_2	0xffff
 
 #define PCI_VENDOR_ID_COMPEX2		0x101a // pci.ids says "AT&T GIS (NCR)"
@@ -572,7 +574,6 @@
 #define PCI_DEVICE_ID_SI_503		0x0008
 #define PCI_DEVICE_ID_SI_ACPI		0x0009
 #define PCI_DEVICE_ID_SI_LPC		0x0018
-#define PCI_DEVICE_ID_SI_180		0x0180
 #define PCI_DEVICE_ID_SI_5597_VGA	0x0200
 #define PCI_DEVICE_ID_SI_6205		0x0205
 #define PCI_DEVICE_ID_SI_501		0x0406
@@ -2058,7 +2059,6 @@
 #define PCI_DEVICE_ID_INTEL_82801EB_7	0x24d7
 #define PCI_DEVICE_ID_INTEL_82801EB_11	0x24db
 #define PCI_DEVICE_ID_INTEL_82801EB_13	0x24dd
-#define PCI_DEVICE_ID_INTEL_ESB_0	0x25a0
 #define PCI_DEVICE_ID_INTEL_ESB_1	0x25a1
 #define PCI_DEVICE_ID_INTEL_ESB_2	0x25a2
 #define PCI_DEVICE_ID_INTEL_ESB_3	0x25a3
@@ -2084,8 +2084,24 @@
 #define PCI_DEVICE_ID_INTEL_82875_IG	0x257b
 #define PCI_DEVICE_ID_INTEL_ICH6_0	0x2640
 #define PCI_DEVICE_ID_INTEL_ICH6_1	0x2641
-#define PCI_DEVICE_ID_INTEL_ICH6_2	0x266f
-#define PCI_DEVICE_ID_INTEL_ICH6_3	0x266e
+#define PCI_DEVICE_ID_INTEL_ICH6_2	0x2642
+#define PCI_DEVICE_ID_INTEL_ICH6_3	0x2651
+#define PCI_DEVICE_ID_INTEL_ICH6_4	0x2652
+#define PCI_DEVICE_ID_INTEL_ICH6_5	0x2653
+#define PCI_DEVICE_ID_INTEL_ICH6_6	0x2658
+#define PCI_DEVICE_ID_INTEL_ICH6_7	0x2659
+#define PCI_DEVICE_ID_INTEL_ICH6_8	0x265a
+#define PCI_DEVICE_ID_INTEL_ICH6_9	0x265b
+#define PCI_DEVICE_ID_INTEL_ICH6_10	0x265c
+#define PCI_DEVICE_ID_INTEL_ICH6_11	0x2660
+#define PCI_DEVICE_ID_INTEL_ICH6_12	0x2662
+#define PCI_DEVICE_ID_INTEL_ICH6_13	0x2664
+#define PCI_DEVICE_ID_INTEL_ICH6_14	0x2666
+#define PCI_DEVICE_ID_INTEL_ICH6_15	0x2668
+#define PCI_DEVICE_ID_INTEL_ICH6_16	0x266a
+#define PCI_DEVICE_ID_INTEL_ICH6_17	0x266d
+#define PCI_DEVICE_ID_INTEL_ICH6_18	0x266e
+#define PCI_DEVICE_ID_INTEL_ICH6_19	0x266f
 #define PCI_DEVICE_ID_INTEL_82855PM_HB	0x3340
 #define PCI_DEVICE_ID_INTEL_82830_HB	0x3575
 #define PCI_DEVICE_ID_INTEL_82830_CGC	0x3577
@@ -2129,6 +2145,7 @@
 #define PCI_DEVICE_ID_INTEL_82451NX	0x84ca
 #define PCI_DEVICE_ID_INTEL_82454NX     0x84cb
 #define PCI_DEVICE_ID_INTEL_84460GX	0x84ea
+#define	PCI_DEVICE_ID_INTEL_IXP4XX	0x8500
 
 #define PCI_VENDOR_ID_COMPUTONE		0x8e0e
 #define PCI_DEVICE_ID_COMPUTONE_IP2EX	0x0291
diff -Nru a/include/linux/quota.h b/include/linux/quota.h
--- a/include/linux/quota.h	Sun May 16 01:18:36 2004
+++ b/include/linux/quota.h	Sun May 16 01:18:36 2004
@@ -250,6 +250,8 @@
 	int (*free_inode) (const struct inode *, unsigned long);
 	int (*transfer) (struct inode *, struct iattr *);
 	int (*write_dquot) (struct dquot *);		/* Ordinary dquot write */
+	int (*acquire_dquot) (struct dquot *);		/* Quota is going to be created on disk */
+	int (*release_dquot) (struct dquot *);		/* Quota is going to be deleted from disk */
 	int (*mark_dirty) (struct dquot *);		/* Dquot is marked dirty */
 	int (*write_info) (struct super_block *, int);	/* Write of quota "superblock" */
 };
diff -Nru a/include/linux/reiserfs_acl.h b/include/linux/reiserfs_acl.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/include/linux/reiserfs_acl.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,91 @@
+#include <linux/init.h>
+#include <linux/posix_acl.h>
+#include <linux/xattr_acl.h>
+
+#define REISERFS_ACL_VERSION	0x0001
+
+typedef struct {
+	__u16		e_tag;
+	__u16		e_perm;
+	__u32		e_id;
+} reiserfs_acl_entry;
+
+typedef struct {
+	__u16		e_tag;
+	__u16		e_perm;
+} reiserfs_acl_entry_short;
+
+typedef struct {
+	__u32		a_version;
+} reiserfs_acl_header;
+
+static inline size_t reiserfs_acl_size(int count)
+{
+	if (count <= 4) {
+		return sizeof(reiserfs_acl_header) +
+		       count * sizeof(reiserfs_acl_entry_short);
+	} else {
+		return sizeof(reiserfs_acl_header) +
+		       4 * sizeof(reiserfs_acl_entry_short) +
+		       (count - 4) * sizeof(reiserfs_acl_entry);
+	}
+}
+
+static inline int reiserfs_acl_count(size_t size)
+{
+	ssize_t s;
+	size -= sizeof(reiserfs_acl_header);
+	s = size - 4 * sizeof(reiserfs_acl_entry_short);
+	if (s < 0) {
+		if (size % sizeof(reiserfs_acl_entry_short))
+			return -1;
+		return size / sizeof(reiserfs_acl_entry_short);
+	} else {
+		if (s % sizeof(reiserfs_acl_entry))
+			return -1;
+		return s / sizeof(reiserfs_acl_entry) + 4;
+	}
+}
+
+
+#ifdef CONFIG_REISERFS_FS_POSIX_ACL
+struct posix_acl * reiserfs_get_acl(struct inode *inode, int type);
+int reiserfs_set_acl(struct inode *inode, int type, struct posix_acl *acl);
+int reiserfs_acl_chmod (struct inode *inode);
+int reiserfs_inherit_default_acl (struct inode *dir, struct dentry *dentry, struct inode *inode);
+int reiserfs_cache_default_acl (struct inode *dir);
+extern int reiserfs_xattr_posix_acl_init (void) __init;
+extern int reiserfs_xattr_posix_acl_exit (void);
+extern struct reiserfs_xattr_handler posix_acl_default_handler;
+extern struct reiserfs_xattr_handler posix_acl_access_handler;
+#else
+
+#define reiserfs_set_acl NULL
+#define reiserfs_get_acl NULL
+#define reiserfs_cache_default_acl(inode) 0
+
+static inline int
+reiserfs_xattr_posix_acl_init (void)
+{
+    return 0;
+}
+
+static inline int
+reiserfs_xattr_posix_acl_exit (void)
+{
+    return 0;
+}
+
+static inline int
+reiserfs_acl_chmod (struct inode *inode)
+{
+    return 0;
+}
+
+static inline int
+reiserfs_inherit_default_acl (const struct inode *dir, struct dentry *dentry, struct inode *inode)
+{
+    return 0;
+}
+
+#endif
diff -Nru a/include/linux/reiserfs_fs.h b/include/linux/reiserfs_fs.h
--- a/include/linux/reiserfs_fs.h	Sun May 16 01:18:36 2004
+++ b/include/linux/reiserfs_fs.h	Sun May 16 01:18:36 2004
@@ -75,6 +75,7 @@
 */
 #define REISERFS_DEBUG_CODE 5 /* extra messages to help find/debug errors */ 
 
+void reiserfs_warning (struct super_block *s, const char * fmt, ...);
 /* assertions handling */
 
 /** always check a condition and panic if it's false. */
@@ -268,6 +269,7 @@
 #define NO_DISK_SPACE -3
 #define NO_BALANCING_NEEDED  (-4)
 #define NO_MORE_UNUSED_CONTIGUOUS_BLOCKS (-5)
+#define QUOTA_EXCEEDED -6
 
 typedef __u32 b_blocknr_t;
 typedef __u32 unp_t;
@@ -287,7 +289,7 @@
 #define STAT_DATA_V2 1
 
 
-static inline struct reiserfs_inode_info *REISERFS_I(struct inode *inode)
+static inline struct reiserfs_inode_info *REISERFS_I(const struct inode *inode)
 {
 	return container_of(inode, struct reiserfs_inode_info, vfs_inode);
 }
@@ -561,9 +563,6 @@
 #define V1_DIRENTRY_UNIQUENESS 500
 #define V1_ANY_UNIQUENESS 555 // FIXME: comment is required
 
-extern void reiserfs_warning (const char * fmt, ...);
-/* __attribute__( ( format ( printf, 1, 2 ) ) ); */
-
 //
 // here are conversion routines
 //
@@ -576,7 +575,8 @@
     case V1_DIRECT_UNIQUENESS: return TYPE_DIRECT;
     case V1_DIRENTRY_UNIQUENESS: return TYPE_DIRENTRY;
     default:
-	    reiserfs_warning( "vs-500: unknown uniqueness %d\n", uniqueness);
+	    reiserfs_warning (NULL, "vs-500: unknown uniqueness %d",
+			      uniqueness);
 	case V1_ANY_UNIQUENESS:
 	    return TYPE_ANY;
     }
@@ -591,7 +591,7 @@
     case TYPE_DIRECT: return V1_DIRECT_UNIQUENESS;
     case TYPE_DIRENTRY: return V1_DIRENTRY_UNIQUENESS;
     default:
-	    reiserfs_warning( "vs-501: unknown type %d\n", type);
+	    reiserfs_warning (NULL, "vs-501: unknown type %d", type);
 	case TYPE_ANY:
 	    return V1_ANY_UNIQUENESS;
     }
@@ -1238,7 +1238,6 @@
 gods only know how we are going to SMP the code that uses them.
 znodes are the way! */
 
-
 struct  path {
   int                   path_length;                      	/* Length of the array above.   */
   struct  path_element  path_elements[EXTENDED_MAX_HEIGHT];	/* Array of the path elements.  */
@@ -1771,7 +1770,7 @@
 void reiserfs_wait_on_write_block(struct super_block *s) ;
 void reiserfs_block_writes(struct reiserfs_transaction_handle *th) ;
 void reiserfs_allow_writes(struct super_block *s) ;
-void reiserfs_check_lock_depth(char *caller) ;
+void reiserfs_check_lock_depth(struct super_block *s, char *caller) ;
 int reiserfs_prepare_for_journal(struct super_block *, struct buffer_head *bh, int wait) ;
 void reiserfs_restore_prepared_buffer(struct super_block *, struct buffer_head *bh) ;
 int journal_init(struct super_block *, const char * j_dev_name, int old_format, unsigned int) ;
@@ -1889,11 +1888,13 @@
 int reiserfs_insert_item (struct reiserfs_transaction_handle *th, 
 			  struct path * path, 
 			  const struct cpu_key * key,
-			  struct item_head * ih, const char * body);
+			  struct item_head * ih,
+			  struct inode *inode, const char * body);
 
 int reiserfs_paste_into_item (struct reiserfs_transaction_handle *th,
 			      struct path * path,
 			      const struct cpu_key * key,
+			      struct inode *inode,
 			      const char * body, int paste_size);
 
 int reiserfs_cut_from_item (struct reiserfs_transaction_handle *th,
@@ -1910,7 +1911,7 @@
 			  struct buffer_head  * p_s_un_bh);
 
 void reiserfs_delete_solid_item (struct reiserfs_transaction_handle *th,
-                                                                struct key * key);
+				 struct inode *inode, struct key * key);
 void reiserfs_delete_object (struct reiserfs_transaction_handle *th, struct inode * p_s_inode);
 void reiserfs_do_truncate (struct reiserfs_transaction_handle *th, 
 			   struct  inode * p_s_inode, struct page *, 
@@ -1955,11 +1956,22 @@
 				   struct inode * dir, int mode, 
 				   const char * symname, loff_t i_size,
 				   struct dentry *dentry, struct inode *inode);
-int reiserfs_sync_inode (struct reiserfs_transaction_handle *th, struct inode * inode);
-void reiserfs_update_sd (struct reiserfs_transaction_handle *th, struct inode * inode);
+
+int reiserfs_sync_inode (struct reiserfs_transaction_handle *th,
+                         struct inode * inode);
+
+void reiserfs_update_sd_size (struct reiserfs_transaction_handle *th,
+                              struct inode * inode, loff_t size);
+
+static inline void reiserfs_update_sd(struct reiserfs_transaction_handle *th,
+                                      struct inode *inode)
+{
+    reiserfs_update_sd_size(th, inode, inode->i_size) ;
+}
 
 void sd_attrs_to_i_attrs( __u16 sd_attrs, struct inode *inode );
 void i_attrs_to_sd_attrs( struct inode *inode, __u16 *sd_attrs );
+int reiserfs_setattr(struct dentry *dentry, struct iattr *attr);
 
 /* namei.c */
 void set_de_name_and_namelen (struct reiserfs_dir_entry * de);
@@ -2010,6 +2022,8 @@
 
 /* dir.c */
 extern struct inode_operations reiserfs_dir_inode_operations;
+extern struct inode_operations reiserfs_symlink_inode_operations;
+extern struct inode_operations reiserfs_special_inode_operations;
 extern struct file_operations reiserfs_dir_operations;
 
 /* tail_conversion.c */
@@ -2048,10 +2062,10 @@
 
 
 /* prints.c */
-void reiserfs_panic (struct super_block * s, const char * fmt, ...)
-__attribute__ ( ( noreturn ) );/* __attribute__( ( format ( printf, 2, 3 ) ) ) */
+void reiserfs_panic (struct super_block * s, const char * fmt, ...) __attribute__ ( ( noreturn ) );
+void reiserfs_info (struct super_block *s, const char * fmt, ...);
+void reiserfs_printk (const char * fmt, ...);
 void reiserfs_debug (struct super_block *s, int level, const char * fmt, ...);
-/* __attribute__( ( format ( printf, 3, 4 ) ) ); */
 void print_virtual_node (struct virtual_node * vn);
 void print_indirect_item (struct buffer_head * bh, int item_num);
 void store_print_tb (struct tree_balance * tb);
@@ -2136,7 +2150,7 @@
 
 int reiserfs_parse_alloc_options (struct super_block *, char *);
 int is_reusable (struct super_block * s, b_blocknr_t block, int bit_value);
-void reiserfs_free_block (struct reiserfs_transaction_handle *th, b_blocknr_t);
+void reiserfs_free_block (struct reiserfs_transaction_handle *th, struct inode *, b_blocknr_t, int for_unformatted);
 int reiserfs_allocate_blocknrs(reiserfs_blocknr_hint_t *, b_blocknr_t * , int, int);
 extern inline int reiserfs_new_form_blocknrs (struct tree_balance * tb,
 					      b_blocknr_t *new_blocknrs, int amount_needed)
@@ -2237,6 +2251,9 @@
 #define reiserfs_write_lock( sb ) lock_kernel()
 #define reiserfs_write_unlock( sb ) unlock_kernel()
  			         
+/* xattr stuff */
+#define REISERFS_XATTR_DIR_SEM(s) (REISERFS_SB(s)->xattr_dir_sem)
+
 #endif /* _LINUX_REISER_FS_H */
 
 
diff -Nru a/include/linux/reiserfs_fs_i.h b/include/linux/reiserfs_fs_i.h
--- a/include/linux/reiserfs_fs_i.h	Sun May 16 01:18:36 2004
+++ b/include/linux/reiserfs_fs_i.h	Sun May 16 01:18:36 2004
@@ -22,7 +22,9 @@
       truncate or unlink. Safe link is used to avoid leakage of disk
       space on crash with some files open, but unlinked. */
     i_link_saved_unlink_mask   =  0x0010,
-    i_link_saved_truncate_mask =  0x0020
+    i_link_saved_truncate_mask =  0x0020,
+    i_priv_object              =  0x0080,
+    i_has_xattr_dir            =  0x0100,
 } reiserfs_inode_flags;
 
 
@@ -51,6 +53,10 @@
     ** flushed */
     unsigned long i_trans_id ;
     struct reiserfs_journal_list *i_jl;
+
+    struct posix_acl *i_acl_access;
+    struct posix_acl *i_acl_default;
+    struct rw_semaphore xattr_sem;
     struct inode vfs_inode;
 };
 
diff -Nru a/include/linux/reiserfs_fs_sb.h b/include/linux/reiserfs_fs_sb.h
--- a/include/linux/reiserfs_fs_sb.h	Sun May 16 01:18:35 2004
+++ b/include/linux/reiserfs_fs_sb.h	Sun May 16 01:18:35 2004
@@ -6,6 +6,7 @@
 
 #ifdef __KERNEL__
 #include <linux/workqueue.h>
+#include <linux/rwsem.h>
 #endif
 
 typedef enum {
@@ -251,7 +252,6 @@
 
 #define JOURNAL_DESC_MAGIC "ReIsErLB" /* ick.  magic string to find desc blocks in the journal */
 
-
 typedef __u32 (*hashf_t) (const signed char *, int);
 
 struct reiserfs_bitmap_info
@@ -395,6 +395,10 @@
     struct proc_dir_entry *procdir;
     int reserved_blocks; /* amount of blocks reserved for further allocations */
     spinlock_t bitmap_lock; /* this lock on now only used to protect reserved_blocks variable */
+    struct dentry *priv_root; /* root of /.reiserfs_priv */
+    struct dentry *xattr_root; /* root of /.reiserfs_priv/.xa */
+    struct rw_semaphore xattr_dir_sem;
+
 };
 
 /* Definitions of reiserfs on-disk properties: */
@@ -437,6 +441,9 @@
     REISERFS_NO_UNHASHED_RELOCATION,
     REISERFS_HASHED_RELOCATION,
     REISERFS_ATTRS,
+    REISERFS_XATTRS,
+    REISERFS_XATTRS_USER,
+    REISERFS_POSIXACL,
 
     REISERFS_TEST1,
     REISERFS_TEST2,
@@ -462,6 +469,10 @@
 #define reiserfs_data_log(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_DATA_LOG))
 #define reiserfs_data_ordered(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_DATA_ORDERED))
 #define reiserfs_data_writeback(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_DATA_WRITEBACK))
+#define reiserfs_xattrs(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_XATTRS))
+#define reiserfs_xattrs_user(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_XATTRS_USER))
+#define reiserfs_posixacl(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_POSIXACL))
+#define reiserfs_xattrs_optional(s) (reiserfs_xattrs_user(s) || reiserfs_posixacl(s))
 
 void reiserfs_file_buffer (struct buffer_head * bh, int list);
 extern struct file_system_type reiserfs_fs_type;
diff -Nru a/include/linux/reiserfs_xattr.h b/include/linux/reiserfs_xattr.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/include/linux/reiserfs_xattr.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,132 @@
+/*
+  File: linux/reiserfs_xattr.h
+*/
+
+#include <linux/config.h>
+#include <linux/init.h>
+#include <linux/xattr.h>
+
+/* Magic value in header */
+#define REISERFS_XATTR_MAGIC 0x52465841 /* "RFXA" */
+
+struct reiserfs_xattr_header {
+    __u32 h_magic;              /* magic number for identification */
+    __u32 h_hash;               /* hash of the value */
+};
+
+#ifdef __KERNEL__
+
+struct reiserfs_xattr_handler {
+	char *prefix;
+        int (*init)(void);
+        void (*exit)(void);
+	int (*get)(struct inode *inode, const char *name, void *buffer,
+		   size_t size);
+	int (*set)(struct inode *inode, const char *name, const void *buffer,
+		   size_t size, int flags);
+	int (*del)(struct inode *inode, const char *name);
+        int (*list)(struct inode *inode, const char *name, int namelen, char *out);
+        struct list_head handlers;
+};
+
+
+#ifdef CONFIG_REISERFS_FS_XATTR
+#define is_reiserfs_priv_object(inode) (REISERFS_I(inode)->i_flags & i_priv_object)
+#define has_xattr_dir(inode) (REISERFS_I(inode)->i_flags & i_has_xattr_dir)
+ssize_t reiserfs_getxattr (struct dentry *dentry, const char *name,
+			   void *buffer, size_t size);
+int reiserfs_setxattr (struct dentry *dentry, const char *name,
+                       const void *value, size_t size, int flags);
+ssize_t reiserfs_listxattr (struct dentry *dentry, char *buffer, size_t size);
+int reiserfs_removexattr (struct dentry *dentry, const char *name);
+int reiserfs_delete_xattrs (struct inode *inode);
+int reiserfs_chown_xattrs (struct inode *inode, struct iattr *attrs);
+int reiserfs_xattr_init (struct super_block *sb, int mount_flags);
+int reiserfs_permission (struct inode *inode, int mask, struct nameidata *nd);
+int reiserfs_permission_locked (struct inode *inode, int mask, struct nameidata *nd);
+
+int reiserfs_xattr_del (struct inode *, const char *);
+int reiserfs_xattr_get (const struct inode *, const char *, void *, size_t);
+int reiserfs_xattr_set (struct inode *, const char *, const void *,
+                               size_t, int);
+
+extern struct reiserfs_xattr_handler user_handler;
+extern struct reiserfs_xattr_handler trusted_handler;
+#ifdef CONFIG_REISERFS_FS_SECURITY
+extern struct reiserfs_xattr_handler security_handler;
+#endif
+
+int reiserfs_xattr_register_handlers (void) __init;
+void reiserfs_xattr_unregister_handlers (void);
+
+static inline void
+reiserfs_write_lock_xattrs(struct super_block *sb)
+{
+    down_write (&REISERFS_XATTR_DIR_SEM(sb));
+}
+static inline void
+reiserfs_write_unlock_xattrs(struct super_block *sb)
+{
+    up_write (&REISERFS_XATTR_DIR_SEM(sb));
+}
+static inline void
+reiserfs_read_lock_xattrs(struct super_block *sb)
+{
+    down_read (&REISERFS_XATTR_DIR_SEM(sb));
+}
+
+static inline void
+reiserfs_read_unlock_xattrs(struct super_block *sb)
+{
+    up_read (&REISERFS_XATTR_DIR_SEM(sb));
+}
+
+static inline void
+reiserfs_write_lock_xattr_i(struct inode *inode)
+{
+    down_write (&REISERFS_I(inode)->xattr_sem);
+}
+static inline void
+reiserfs_write_unlock_xattr_i(struct inode *inode)
+{
+    up_write (&REISERFS_I(inode)->xattr_sem);
+}
+static inline void
+reiserfs_read_lock_xattr_i(struct inode *inode)
+{
+    down_read (&REISERFS_I(inode)->xattr_sem);
+}
+
+static inline void
+reiserfs_read_unlock_xattr_i(struct inode *inode)
+{
+    up_read (&REISERFS_I(inode)->xattr_sem);
+}
+
+#else
+
+#define is_reiserfs_priv_object(inode) 0
+#define reiserfs_getxattr NULL
+#define reiserfs_setxattr NULL
+#define reiserfs_listxattr NULL
+#define reiserfs_removexattr NULL
+#define reiserfs_write_lock_xattrs(sb)
+#define reiserfs_write_unlock_xattrs(sb)
+#define reiserfs_read_lock_xattrs(sb)
+#define reiserfs_read_unlock_xattrs(sb)
+
+#define reiserfs_permission NULL
+
+#define reiserfs_xattr_register_handlers() 0
+#define reiserfs_xattr_unregister_handlers()
+
+static inline int reiserfs_delete_xattrs (struct inode *inode) { return 0; };
+static inline int reiserfs_chown_xattrs (struct inode *inode, struct iattr *attrs) { return 0; };
+static inline int reiserfs_xattr_init (struct super_block *sb, int mount_flags)
+{
+    sb->s_flags = (sb->s_flags & ~MS_POSIXACL); /* to be sure */
+    return 0;
+};
+#endif
+
+#endif  /* __KERNEL__ */
diff -Nru a/include/linux/rmap.h b/include/linux/rmap.h
--- a/include/linux/rmap.h	Sun May 16 01:18:33 2004
+++ b/include/linux/rmap.h	Sun May 16 01:18:33 2004
@@ -8,9 +8,9 @@
 #include <linux/config.h>
 #include <linux/linkage.h>
 
-#define rmap_lock(page) \
+#define page_map_lock(page) \
 	bit_spin_lock(PG_maplock, (unsigned long *)&(page)->flags)
-#define rmap_unlock(page) \
+#define page_map_unlock(page) \
 	bit_spin_unlock(PG_maplock, (unsigned long *)&(page)->flags)
 
 #ifdef CONFIG_MMU
diff -Nru a/include/linux/sched.h b/include/linux/sched.h
--- a/include/linux/sched.h	Sun May 16 01:18:33 2004
+++ b/include/linux/sched.h	Sun May 16 01:18:33 2004
@@ -147,9 +147,10 @@
 typedef struct task_struct task_t;
 
 extern void sched_init(void);
+extern void sched_init_smp(void);
 extern void init_idle(task_t *idle, int cpu);
 
-extern cpumask_t idle_cpu_mask;
+extern cpumask_t nohz_cpu_mask;
 
 extern void show_state(void);
 extern void show_regs(struct pt_regs *);
@@ -171,9 +172,11 @@
 			       unsigned long system, int cpu);
 extern void scheduler_tick(int user_tick, int system);
 extern unsigned long cache_decay_ticks;
-extern const unsigned long scheduling_functions_start_here;
-extern const unsigned long scheduling_functions_end_here;
 
+/* Attach to any functions which should be ignored in wchan output. */
+#define __sched		__attribute__((__section__(".sched.text")))
+/* Is this address in the __sched functions? */
+extern int in_sched_functions(unsigned long addr);
 
 #define	MAX_SCHEDULE_TIMEOUT	LONG_MAX
 extern signed long FASTCALL(schedule_timeout(signed long timeout));
@@ -349,7 +352,7 @@
 void exit_io_context(void);
 
 #define NGROUPS_SMALL		32
-#define NGROUPS_PER_BLOCK	((int)(EXEC_PAGESIZE / sizeof(gid_t)))
+#define NGROUPS_PER_BLOCK	((int)(PAGE_SIZE / sizeof(gid_t)))
 struct group_info {
 	int ngroups;
 	atomic_t usage;
@@ -542,6 +545,118 @@
 #define PF_SYNCWRITE	0x00200000	/* I am doing a sync write */
 
 #ifdef CONFIG_SMP
+#define SCHED_LOAD_SCALE	128UL	/* increase resolution of load */
+
+#define SD_BALANCE_NEWIDLE	1	/* Balance when about to become idle */
+#define SD_BALANCE_EXEC		2	/* Balance on exec */
+#define SD_BALANCE_CLONE	4	/* Balance on clone */
+#define SD_WAKE_IDLE		8	/* Wake to idle CPU on task wakeup */
+#define SD_WAKE_AFFINE		16	/* Wake task to waking CPU */
+#define SD_WAKE_BALANCE		32	/* Perform balancing at task wakeup */
+#define SD_SHARE_CPUPOWER	64	/* Domain members share cpu power */
+
+struct sched_group {
+	struct sched_group *next;	/* Must be a circular list */
+	cpumask_t cpumask;
+
+	/*
+	 * CPU power of this group, SCHED_LOAD_SCALE being max power for a
+	 * single CPU. This should be read only (except for setup). Although
+	 * it will need to be written to at cpu hot(un)plug time, perhaps the
+	 * cpucontrol semaphore will provide enough exclusion?
+	 */
+	unsigned long cpu_power;
+};
+
+struct sched_domain {
+	/* These fields must be setup */
+	struct sched_domain *parent;	/* top domain must be null terminated */
+	struct sched_group *groups;	/* the balancing groups of the domain */
+	cpumask_t span;			/* span of all CPUs in this domain */
+	unsigned long min_interval;	/* Minimum balance interval ms */
+	unsigned long max_interval;	/* Maximum balance interval ms */
+	unsigned int busy_factor;	/* less balancing by factor if busy */
+	unsigned int imbalance_pct;	/* No balance until over watermark */
+	unsigned long long cache_hot_time; /* Task considered cache hot (ns) */
+	unsigned int cache_nice_tries;	/* Leave cache hot tasks for # tries */
+	unsigned int per_cpu_gain;	/* CPU % gained by adding domain cpus */
+	int flags;			/* See SD_* */
+
+	/* Runtime fields. */
+	unsigned long last_balance;	/* init to jiffies. units in jiffies */
+	unsigned int balance_interval;	/* initialise to 1. units in ms. */
+	unsigned int nr_balance_failed; /* initialise to 0 */
+};
+
+/* Common values for SMT siblings */
+#define SD_SIBLING_INIT (struct sched_domain) {		\
+	.span			= CPU_MASK_NONE,	\
+	.parent			= NULL,			\
+	.groups			= NULL,			\
+	.min_interval		= 1,			\
+	.max_interval		= 2,			\
+	.busy_factor		= 8,			\
+	.imbalance_pct		= 110,			\
+	.cache_hot_time		= 0,			\
+	.cache_nice_tries	= 0,			\
+	.per_cpu_gain		= 15,			\
+	.flags			= SD_BALANCE_NEWIDLE	\
+				| SD_BALANCE_EXEC	\
+				| SD_BALANCE_CLONE	\
+				| SD_WAKE_AFFINE	\
+				| SD_WAKE_IDLE		\
+				| SD_SHARE_CPUPOWER,	\
+	.last_balance		= jiffies,		\
+	.balance_interval	= 1,			\
+	.nr_balance_failed	= 0,			\
+}
+
+/* Common values for CPUs */
+#define SD_CPU_INIT (struct sched_domain) {		\
+	.span			= CPU_MASK_NONE,	\
+	.parent			= NULL,			\
+	.groups			= NULL,			\
+	.min_interval		= 1,			\
+	.max_interval		= 4,			\
+	.busy_factor		= 64,			\
+	.imbalance_pct		= 125,			\
+	.cache_hot_time		= (5*1000000/2),	\
+	.cache_nice_tries	= 1,			\
+	.per_cpu_gain		= 100,			\
+	.flags			= SD_BALANCE_NEWIDLE	\
+				| SD_BALANCE_EXEC	\
+				| SD_BALANCE_CLONE	\
+				| SD_WAKE_AFFINE	\
+				| SD_WAKE_BALANCE,	\
+	.last_balance		= jiffies,		\
+	.balance_interval	= 1,			\
+	.nr_balance_failed	= 0,			\
+}
+
+#ifdef CONFIG_NUMA
+/* Common values for NUMA nodes */
+#define SD_NODE_INIT (struct sched_domain) {		\
+	.span			= CPU_MASK_NONE,	\
+	.parent			= NULL,			\
+	.groups			= NULL,			\
+	.min_interval		= 8,			\
+	.max_interval		= 32,			\
+	.busy_factor		= 32,			\
+	.imbalance_pct		= 125,			\
+	.cache_hot_time		= (10*1000000),		\
+	.cache_nice_tries	= 1,			\
+	.per_cpu_gain		= 100,			\
+	.flags			= SD_BALANCE_EXEC	\
+				| SD_BALANCE_CLONE	\
+				| SD_WAKE_BALANCE,	\
+	.last_balance		= jiffies,		\
+	.balance_interval	= 1,			\
+	.nr_balance_failed	= 0,			\
+}
+#endif
+
+extern void cpu_attach_domain(struct sched_domain *sd, int cpu);
+
 extern int set_cpus_allowed(task_t *p, cpumask_t new_mask);
 #else
 static inline int set_cpus_allowed(task_t *p, cpumask_t new_mask)
@@ -552,16 +667,13 @@
 
 extern unsigned long long sched_clock(void);
 
-#ifdef CONFIG_NUMA
+#ifdef CONFIG_SMP
 extern void sched_balance_exec(void);
-extern void node_nr_running_init(void);
 #else
 #define sched_balance_exec()   {}
-#define node_nr_running_init() {}
 #endif
 
-/* Move tasks off this (offline) CPU onto another. */
-extern void migrate_all_tasks(void);
+extern void sched_idle_next(void);
 extern void set_user_nice(task_t *p, long nice);
 extern int task_prio(task_t *p);
 extern int task_nice(task_t *p);
@@ -612,12 +724,17 @@
 
 extern int FASTCALL(wake_up_state(struct task_struct * tsk, unsigned int state));
 extern int FASTCALL(wake_up_process(struct task_struct * tsk));
+extern void FASTCALL(wake_up_forked_process(struct task_struct * tsk));
 #ifdef CONFIG_SMP
  extern void kick_process(struct task_struct *tsk);
+ extern void FASTCALL(wake_up_forked_thread(struct task_struct * tsk));
 #else
  static inline void kick_process(struct task_struct *tsk) { }
+ static inline void wake_up_forked_thread(struct task_struct * tsk)
+ {
+	return wake_up_forked_process(tsk);
+ }
 #endif
-extern void FASTCALL(wake_up_forked_process(struct task_struct * tsk));
 extern void FASTCALL(sched_fork(task_t * p));
 extern void FASTCALL(sched_exit(task_t * p));
 
diff -Nru a/include/linux/serial_core.h b/include/linux/serial_core.h
--- a/include/linux/serial_core.h	Sun May 16 01:18:33 2004
+++ b/include/linux/serial_core.h	Sun May 16 01:18:33 2004
@@ -85,6 +85,9 @@
 /* Samsung S3C2410 SoC and derivatives thereof */
 #define PORT_S3C2410    55
 
+/* SGI IP22 aka Indy / Challenge S / Indigo 2 */
+#define PORT_IP22ZILOG	56
+
 #ifdef __KERNEL__
 
 #include <linux/config.h>
diff -Nru a/include/linux/spinlock.h b/include/linux/spinlock.h
--- a/include/linux/spinlock.h	Sun May 16 01:18:35 2004
+++ b/include/linux/spinlock.h	Sun May 16 01:18:35 2004
@@ -40,6 +40,8 @@
 
 #else
 
+#define _raw_spin_lock_flags(lock, flags) _raw_spin_lock(lock)
+
 #if !defined(CONFIG_PREEMPT) && !defined(CONFIG_DEBUG_SPINLOCK)
 # define atomic_dec_and_lock(atomic,lock) atomic_dec_and_test(atomic)
 # define ATOMIC_DEC_AND_LOCK
@@ -257,7 +259,7 @@
 do { \
 	local_irq_save(flags); \
 	preempt_disable(); \
-	_raw_spin_lock(lock); \
+	_raw_spin_lock_flags(lock, flags); \
 } while (0)
 
 #define spin_lock_irq(lock) \
diff -Nru a/include/linux/swap.h b/include/linux/swap.h
--- a/include/linux/swap.h	Sun May 16 01:18:33 2004
+++ b/include/linux/swap.h	Sun May 16 01:18:33 2004
@@ -181,6 +181,8 @@
 extern int shmem_unuse(swp_entry_t entry, struct page *page);
 #endif /* CONFIG_MMU */
 
+extern void swap_unplug_io_fn(struct backing_dev_info *, struct page *);
+
 #ifdef CONFIG_SWAP
 /* linux/mm/page_io.c */
 extern int swap_readpage(struct file *, struct page *);
@@ -216,7 +218,7 @@
 extern struct swap_info_struct *get_swap_info_struct(unsigned);
 extern int can_share_swap_page(struct page *);
 extern int remove_exclusive_swap_page(struct page *);
-extern void swap_unplug_io_fn(struct page *);
+struct backing_dev_info;
 
 extern struct swap_list_t swap_list;
 extern spinlock_t swaplock;
@@ -250,7 +252,6 @@
 #define move_from_swap_cache(p, i, m)		1
 #define __delete_from_swap_cache(p)		/*NOTHING*/
 #define delete_from_swap_cache(p)		/*NOTHING*/
-#define swap_unplug_io_fn(p)			/*NOTHING*/
 
 static inline int remove_exclusive_swap_page(struct page *p)
 {
diff -Nru a/include/linux/sysctl.h b/include/linux/sysctl.h
--- a/include/linux/sysctl.h	Sun May 16 01:18:35 2004
+++ b/include/linux/sysctl.h	Sun May 16 01:18:35 2004
@@ -163,6 +163,7 @@
 	VM_MAX_MAP_COUNT=22,	/* int: Maximum number of mmaps/address-space */
 	VM_LAPTOP_MODE=23,	/* vm laptop mode */
 	VM_BLOCK_DUMP=24,	/* block dump mode */
+	VM_HUGETLB_GROUP=25,	/* permitted hugetlb group */
 };
 
 
diff -Nru a/include/linux/sysfs.h b/include/linux/sysfs.h
--- a/include/linux/sysfs.h	Sun May 16 01:18:34 2004
+++ b/include/linux/sysfs.h	Sun May 16 01:18:34 2004
@@ -44,7 +44,7 @@
 extern void
 sysfs_remove_dir(struct kobject *);
 
-extern void
+extern int
 sysfs_rename_dir(struct kobject *, const char *new_name);
 
 extern int
diff -Nru a/include/linux/sysrq.h b/include/linux/sysrq.h
--- a/include/linux/sysrq.h	Sun May 16 01:18:33 2004
+++ b/include/linux/sysrq.h	Sun May 16 01:18:33 2004
@@ -30,13 +30,7 @@
  */
 
 void handle_sysrq(int, struct pt_regs *, struct tty_struct *);
-
-/* 
- * Nonlocking version of handle sysrq, used by sysrq handlers that need to
- * call sysrq handlers
- */
-
-void __handle_sysrq_nolock(int, struct pt_regs *, struct tty_struct *);
+void __handle_sysrq(int, struct pt_regs *, struct tty_struct *);
 
 /*
  * Sysrq registration manipulation functions
diff -Nru a/include/linux/time.h b/include/linux/time.h
--- a/include/linux/time.h	Sun May 16 01:18:35 2004
+++ b/include/linux/time.h	Sun May 16 01:18:35 2004
@@ -177,6 +177,34 @@
 	(SH_DIV((MAX_JIFFY_OFFSET >> SEC_JIFFIE_SC) * TICK_NSEC, NSEC_PER_SEC, 1) - 1)
 
 #endif
+
+/*
+ * Convert jiffies to milliseconds and back.
+ *
+ * Avoid unnecessary multiplications/divisions in the
+ * two most common HZ cases:
+ */
+static inline unsigned int jiffies_to_msecs(unsigned long j)
+{
+#if HZ <= 1000 && !(1000 % HZ)
+	return (1000 / HZ) * j;
+#elif HZ > 1000 && !(HZ % 1000)
+	return (j + (HZ / 1000) - 1)/(HZ / 1000);
+#else
+	return (j * 1000) / HZ;
+#endif
+}
+static inline unsigned long msecs_to_jiffies(unsigned int m)
+{
+#if HZ <= 1000 && !(1000 % HZ)
+	return (m + (1000 / HZ) - 1) / (1000 / HZ);
+#elif HZ > 1000 && !(HZ % 1000)
+	return m * (HZ / 1000);
+#else
+	return (m * HZ + 999) / 1000;
+#endif
+}
+
 /*
  * The TICK_NSEC - 1 rounds up the value to the next resolution.  Note
  * that a remainder subtract here would not do the right thing as the
diff -Nru a/include/linux/timer.h b/include/linux/timer.h
--- a/include/linux/timer.h	Sun May 16 01:18:36 2004
+++ b/include/linux/timer.h	Sun May 16 01:18:36 2004
@@ -87,9 +87,11 @@
 }
 
 #ifdef CONFIG_SMP
-  extern int del_timer_sync(struct timer_list * timer);
+  extern int del_timer_sync(struct timer_list *timer);
+  extern int del_singleshot_timer_sync(struct timer_list *timer);
 #else
 # define del_timer_sync(t) del_timer(t)
+# define del_singleshot_timer_sync(t) del_timer(t)
 #endif
 
 extern void init_timers(void);
diff -Nru a/include/linux/times.h b/include/linux/times.h
--- a/include/linux/times.h	Sun May 16 01:18:33 2004
+++ b/include/linux/times.h	Sun May 16 01:18:33 2004
@@ -2,15 +2,21 @@
 #define _LINUX_TIMES_H
 
 #ifdef __KERNEL__
+#include <linux/timex.h>
 #include <asm/div64.h>
 #include <asm/types.h>
 #include <asm/param.h>
 
-#if (HZ % USER_HZ)==0
-# define jiffies_to_clock_t(x) ((x) / (HZ / USER_HZ))
+static inline clock_t jiffies_to_clock_t(long x)
+{
+#if (TICK_NSEC % (NSEC_PER_SEC / USER_HZ)) == 0
+	return x / (HZ / USER_HZ);
 #else
-# define jiffies_to_clock_t(x) ((clock_t) jiffies_64_to_clock_t((u64) x))
+	u64 tmp = (u64)x * TICK_NSEC;
+	do_div(tmp, (NSEC_PER_SEC / USER_HZ));
+	return (long)tmp;
 #endif
+}
 
 static inline unsigned long clock_t_to_jiffies(unsigned long x)
 {
@@ -34,7 +40,7 @@
 
 static inline u64 jiffies_64_to_clock_t(u64 x)
 {
-#if (HZ % USER_HZ)==0
+#if (TICK_NSEC % (NSEC_PER_SEC / USER_HZ)) == 0
 	do_div(x, HZ / USER_HZ);
 #else
 	/*
@@ -42,8 +48,8 @@
 	 * but even this doesn't overflow in hundreds of years
 	 * in 64 bits, so..
 	 */
-	x *= USER_HZ;
-	do_div(x, HZ);
+	x *= TICK_NSEC;
+	do_div(x, (NSEC_PER_SEC / USER_HZ));
 #endif
 	return x;
 }
diff -Nru a/include/linux/tty.h b/include/linux/tty.h
--- a/include/linux/tty.h	Sun May 16 01:18:35 2004
+++ b/include/linux/tty.h	Sun May 16 01:18:35 2004
@@ -97,7 +97,6 @@
 
 #define VIDEO_TYPE_PICA_S3	0x30	/* ACER PICA-61 local S3 video	*/
 #define VIDEO_TYPE_MIPS_G364	0x31    /* MIPS Magnum 4000 G364 video  */
-#define VIDEO_TYPE_SNI_RM	0x32    /* SNI RM200 PCI video          */
 #define VIDEO_TYPE_SGI          0x33    /* Various SGI graphics hardware */
 
 #define VIDEO_TYPE_TGAC		0x40	/* DEC TGA */
diff -Nru a/include/linux/usb.h b/include/linux/usb.h
--- a/include/linux/usb.h	Sun May 16 01:18:34 2004
+++ b/include/linux/usb.h	Sun May 16 01:18:34 2004
@@ -14,6 +14,7 @@
 #include <linux/delay.h>	/* for mdelay() */
 #include <linux/interrupt.h>	/* for in_interrupt() */
 #include <linux/list.h>		/* for struct list_head */
+#include <linux/kref.h>		/* for struct kref */
 #include <linux/device.h>	/* for struct device */
 #include <linux/fs.h>		/* for struct file_operations */
 #include <linux/completion.h>	/* for struct completion */
@@ -147,11 +148,42 @@
 #define USB_MAXINTERFACES	32
 
 /**
+ * struct usb_interface_cache - long-term representation of a device interface
+ * @num_altsetting: number of altsettings defined.
+ * @ref: reference counter.
+ * @altsetting: variable-length array of interface structures, one for
+ *	each alternate setting that may be selected.  Each one includes a
+ *	set of endpoint configurations.  They will be in no particular order.
+ *
+ * These structures persist for the lifetime of a usb_device, unlike
+ * struct usb_interface (which persists only as long as its configuration
+ * is installed).  The altsetting arrays can be accessed through these
+ * structures at any time, permitting comparison of configurations and
+ * providing support for the /proc/bus/usb/devices pseudo-file.
+ */
+struct usb_interface_cache {
+	unsigned num_altsetting;	/* number of alternate settings */
+	struct kref ref;		/* reference counter */
+
+	/* variable-length array of alternate settings for this interface,
+	 * stored in no particular order */
+	struct usb_host_interface altsetting[0];
+};
+#define	ref_to_usb_interface_cache(r) \
+		container_of(r, struct usb_interface_cache, ref)
+#define	altsetting_to_usb_interface_cache(a) \
+		container_of(a, struct usb_interface_cache, altsetting[0])
+
+/**
  * struct usb_host_config - representation of a device's configuration
  * @desc: the device's configuration descriptor.
- * @interface: array of usb_interface structures, one for each interface
- *	in the configuration.  The number of interfaces is stored in
- *	desc.bNumInterfaces.
+ * @interface: array of pointers to usb_interface structures, one for each
+ *	interface in the configuration.  The number of interfaces is stored
+ *	in desc.bNumInterfaces.  These pointers are valid only while the
+ *	the configuration is active.
+ * @intf_cache: array of pointers to usb_interface_cache structures, one
+ *	for each interface in the configuration.  These structures exist
+ *	for the entire life of the device.
  * @extra: pointer to buffer containing all extra descriptors associated
  *	with this configuration (those preceding the first interface
  *	descriptor).
@@ -185,6 +217,10 @@
 	 * stored in no particular order */
 	struct usb_interface *interface[USB_MAXINTERFACES];
 
+	/* Interface information available even when this is not the
+	 * active configuration */
+	struct usb_interface_cache *intf_cache[USB_MAXINTERFACES];
+
 	unsigned char *extra;   /* Extra descriptors */
 	int extralen;
 };
@@ -676,7 +712,7 @@
  * URB_NO_SETUP_DMA_MAP indicate which buffers have already been mapped.
  * URB_NO_SETUP_DMA_MAP is ignored for non-control URBs.
  *
- * Interrupt UBS must provide an interval, saying how often (in milliseconds
+ * Interrupt URBs must provide an interval, saying how often (in milliseconds
  * or, for highspeed devices, 125 microsecond units)
  * to poll for transfers.  After the URB has been submitted, the interval
  * field reflects how the transfer was actually scheduled.
@@ -731,8 +767,8 @@
 struct urb
 {
 	/* private, usb core and host controller only fields in the urb */
+	struct kref kref;		/* reference count of the URB */
 	spinlock_t lock;		/* lock for the URB */
-	atomic_t count;			/* reference count of the URB */
 	void *hcpriv;			/* private data for host controller */
 	struct list_head urb_list;	/* list pointer to all active urbs */
 	int bandwidth;			/* bandwidth for INT/ISO request */
diff -Nru a/include/linux/usbdevice_fs.h b/include/linux/usbdevice_fs.h
--- a/include/linux/usbdevice_fs.h	Sun May 16 01:18:34 2004
+++ b/include/linux/usbdevice_fs.h	Sun May 16 01:18:34 2004
@@ -154,7 +154,6 @@
 
 struct dev_state {
 	struct list_head list;      /* state list */
-	struct rw_semaphore devsem; /* protects modifications to dev (dev == NULL indicating disconnect) */ 
 	struct usb_device *dev;
 	struct file *file;
 	spinlock_t lock;            /* protects the async urb lists */
diff -Nru a/include/linux/video_decoder.h b/include/linux/video_decoder.h
--- a/include/linux/video_decoder.h	Sun May 16 01:18:33 2004
+++ b/include/linux/video_decoder.h	Sun May 16 01:18:33 2004
@@ -22,6 +22,10 @@
 #define	DECODER_STATUS_NTSC	8	/* auto detected */
 #define	DECODER_STATUS_SECAM	16	/* auto detected */
 
+struct video_decoder_init {
+	unsigned char len;
+	const unsigned char *data;
+};
 
 #define	DECODER_GET_CAPABILITIES _IOR('d', 1, struct video_decoder_capability)
 #define	DECODER_GET_STATUS    	_IOR('d', 2, int)
@@ -30,6 +34,9 @@
 #define	DECODER_SET_OUTPUT	_IOW('d', 5, int)	/* 0 <= output < #outputs */
 #define	DECODER_ENABLE_OUTPUT	_IOW('d', 6, int)	/* boolean output enable control */
 #define	DECODER_SET_PICTURE   	_IOW('d', 7, struct video_picture)
+#define	DECODER_SET_GPIO	_IOW('d', 8, int)	/* switch general purpose pin */
+#define	DECODER_INIT		_IOW('d', 9, struct video_decoder_init)	/* init internal registers at once */
+#define	DECODER_SET_VBI_BYPASS	_IOW('d', 10, int)	/* switch vbi bypass */
 
 #define	DECODER_DUMP		_IO('d', 192)		/* debug hook */
 
diff -Nru a/include/linux/wait.h b/include/linux/wait.h
--- a/include/linux/wait.h	Sun May 16 01:18:35 2004
+++ b/include/linux/wait.h	Sun May 16 01:18:35 2004
@@ -17,8 +17,8 @@
 #include <asm/system.h>
 
 typedef struct __wait_queue wait_queue_t;
-typedef int (*wait_queue_func_t)(wait_queue_t *wait, unsigned mode, int sync);
-extern int default_wake_function(wait_queue_t *wait, unsigned mode, int sync);
+typedef int (*wait_queue_func_t)(wait_queue_t *wait, unsigned mode, int sync, void *key);
+int default_wake_function(wait_queue_t *wait, unsigned mode, int sync, void *key);
 
 struct __wait_queue {
 	unsigned int flags;
@@ -104,17 +104,17 @@
 	list_del(&old->task_list);
 }
 
-extern void FASTCALL(__wake_up(wait_queue_head_t *q, unsigned int mode, int nr));
+void FASTCALL(__wake_up(wait_queue_head_t *q, unsigned int mode, int nr, void *key));
 extern void FASTCALL(__wake_up_locked(wait_queue_head_t *q, unsigned int mode));
 extern void FASTCALL(__wake_up_sync(wait_queue_head_t *q, unsigned int mode, int nr));
 
-#define wake_up(x)			__wake_up((x),TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE, 1)
-#define wake_up_nr(x, nr)		__wake_up((x),TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE, nr)
-#define wake_up_all(x)			__wake_up((x),TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE, 0)
+#define wake_up(x)			__wake_up(x, TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE, 1, NULL)
+#define wake_up_nr(x, nr)		__wake_up(x, TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE, nr, NULL)
+#define wake_up_all(x)			__wake_up(x, TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE, 0, NULL)
 #define wake_up_all_sync(x)			__wake_up_sync((x),TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE, 0)
-#define wake_up_interruptible(x)	__wake_up((x),TASK_INTERRUPTIBLE, 1)
-#define wake_up_interruptible_nr(x, nr)	__wake_up((x),TASK_INTERRUPTIBLE, nr)
-#define wake_up_interruptible_all(x)	__wake_up((x),TASK_INTERRUPTIBLE, 0)
+#define wake_up_interruptible(x)	__wake_up(x, TASK_INTERRUPTIBLE, 1, NULL)
+#define wake_up_interruptible_nr(x, nr)	__wake_up(x, TASK_INTERRUPTIBLE, nr, NULL)
+#define wake_up_interruptible_all(x)	__wake_up(x, TASK_INTERRUPTIBLE, 0, NULL)
 #define	wake_up_locked(x)		__wake_up_locked((x), TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE)
 #define wake_up_interruptible_sync(x)   __wake_up_sync((x),TASK_INTERRUPTIBLE, 1)
 
@@ -240,7 +240,7 @@
 void FASTCALL(prepare_to_wait_exclusive(wait_queue_head_t *q,
 				wait_queue_t *wait, int state));
 void FASTCALL(finish_wait(wait_queue_head_t *q, wait_queue_t *wait));
-int autoremove_wake_function(wait_queue_t *wait, unsigned mode, int sync);
+int autoremove_wake_function(wait_queue_t *wait, unsigned mode, int sync, void *key);
 
 #define DEFINE_WAIT(name)						\
 	wait_queue_t name = {						\
diff -Nru a/include/net/irda/irda.h b/include/net/irda/irda.h
--- a/include/net/irda/irda.h	Sun May 16 01:18:34 2004
+++ b/include/net/irda/irda.h	Sun May 16 01:18:34 2004
@@ -83,8 +83,6 @@
 #define MESSAGE(args...) printk(KERN_INFO args)
 #define ERROR(args...)   printk(KERN_ERR args)
 
-#define MSECS_TO_JIFFIES(ms) (((ms)*HZ+999)/1000)
-
 /*
  *  Magic numbers used by Linux-IrDA. Random numbers which must be unique to 
  *  give the best protection
diff -Nru a/include/net/sctp/sctp.h b/include/net/sctp/sctp.h
--- a/include/net/sctp/sctp.h	Sun May 16 01:18:34 2004
+++ b/include/net/sctp/sctp.h	Sun May 16 01:18:34 2004
@@ -116,11 +116,6 @@
 #define SCTP_STATIC static
 #endif
 
-#define MSECS_TO_JIFFIES(msec) \
-	(((msec / 1000) * HZ) + ((msec % 1000) * HZ) / 1000)
-#define JIFFIES_TO_MSECS(jiff) \
-	(((jiff / HZ) * 1000) + ((jiff % HZ) * 1000) / HZ)
-
 /*
  * Function declarations.
  */
diff -Nru a/include/scsi/scsi.h b/include/scsi/scsi.h
--- a/include/scsi/scsi.h	Sun May 16 01:18:36 2004
+++ b/include/scsi/scsi.h	Sun May 16 01:18:36 2004
@@ -362,6 +362,13 @@
 #define SCSI_2          3
 #define SCSI_3          4
 
+/*
+ * INQ PERIPHERAL QUALIFIERS
+ */
+#define SCSI_INQ_PQ_CON         0x00
+#define SCSI_INQ_PQ_NOT_CON     0x01
+#define SCSI_INQ_PQ_NOT_CAP     0x03
+
 
 /*
  * Here are some scsi specific ioctl commands which are sometimes useful.
diff -Nru a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h
--- a/include/scsi/scsi_device.h	Sun May 16 01:18:33 2004
+++ b/include/scsi/scsi_device.h	Sun May 16 01:18:33 2004
@@ -63,6 +63,7 @@
 	char devfs_name[256];	/* devfs junk */
 	char type;
 	char scsi_level;
+	char inq_periph_qual;	/* PQ from INQUIRY data */	
 	unsigned char inquiry_len;	/* valid bytes in 'inquiry' */
 	unsigned char * inquiry;	/* INQUIRY response data */
 	char * vendor;		/* [back_compat] point into 'inquiry' ... */
@@ -110,6 +111,8 @@
 
 	unsigned int max_device_blocked; /* what device_blocked counts down from  */
 #define SCSI_DEFAULT_DEVICE_BLOCKED	3
+
+	int timeout;
 
 	struct device		sdev_gendev;
 	struct class_device	sdev_classdev;
diff -Nru a/include/video/gbe.h b/include/video/gbe.h
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/include/video/gbe.h	Sun May 16 01:18:37 2004
@@ -0,0 +1,317 @@
+/*
+ * include/video/gbe.h -- SGI GBE (Graphics Back End)
+ *
+ * Copyright (C) 1999 Silicon Graphics, Inc. (Jeffrey Newquist)
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License version 2 as published by the Free Software Foundation.
+ */
+
+#ifndef __GBE_H__
+#define __GBE_H__
+
+struct sgi_gbe {
+	volatile uint32_t ctrlstat;	/* general control */
+	volatile uint32_t dotclock;	/* dot clock PLL control */
+	volatile uint32_t i2c;		/* crt I2C control */
+	volatile uint32_t sysclk;	/* system clock PLL control */
+	volatile uint32_t i2cfp;	/* flat panel I2C control */
+	volatile uint32_t id;		/* device id/chip revision */
+	volatile uint32_t config;       /* power on configuration [1] */
+	volatile uint32_t bist;         /* internal bist status [1] */
+	uint32_t _pad0[0x010000/4 - 8];
+	volatile uint32_t vt_xy;	/* current dot coords */
+	volatile uint32_t vt_xymax;	/* maximum dot coords */
+	volatile uint32_t vt_vsync;	/* vsync on/off */
+	volatile uint32_t vt_hsync;	/* hsync on/off */
+	volatile uint32_t vt_vblank;	/* vblank on/off */
+	volatile uint32_t vt_hblank;	/* hblank on/off */
+	volatile uint32_t vt_flags;	/* polarity of vt signals */
+	volatile uint32_t vt_f2rf_lock;	/* f2rf & framelck y coord */
+	volatile uint32_t vt_intr01;	/* intr 0,1 y coords */
+	volatile uint32_t vt_intr23;	/* intr 2,3 y coords */
+	volatile uint32_t fp_hdrv;	/* flat panel hdrv on/off */
+	volatile uint32_t fp_vdrv;	/* flat panel vdrv on/off */
+	volatile uint32_t fp_de;	/* flat panel de on/off */
+	volatile uint32_t vt_hpixen;	/* intrnl horiz pixel on/off */
+	volatile uint32_t vt_vpixen;	/* intrnl vert pixel on/off */
+	volatile uint32_t vt_hcmap;	/* cmap write (horiz) */
+	volatile uint32_t vt_vcmap;	/* cmap write (vert) */
+	volatile uint32_t did_start_xy;	/* eol/f did/xy reset val */
+	volatile uint32_t crs_start_xy;	/* eol/f crs/xy reset val */
+	volatile uint32_t vc_start_xy;	/* eol/f vc/xy reset val */
+	uint32_t _pad1[0xffb0/4];
+	volatile uint32_t ovr_width_tile;/*overlay plane ctrl 0 */
+	volatile uint32_t ovr_inhwctrl;	/* overlay plane ctrl 1 */
+	volatile uint32_t ovr_control;	/* overlay plane ctrl 1 */
+	uint32_t _pad2[0xfff4/4];
+	volatile uint32_t frm_size_tile;/* normal plane ctrl 0 */
+	volatile uint32_t frm_size_pixel;/*normal plane ctrl 1 */
+	volatile uint32_t frm_inhwctrl;	/* normal plane ctrl 2 */
+	volatile uint32_t frm_control;	/* normal plane ctrl 3 */
+	uint32_t _pad3[0xfff0/4];
+	volatile uint32_t did_inhwctrl;	/* DID control */
+	volatile uint32_t did_control;	/* DID shadow */
+	uint32_t _pad4[0x7ff8/4];
+	volatile uint32_t mode_regs[32];/* WID table */
+	uint32_t _pad5[0x7f80/4];
+	volatile uint32_t cmap[6144];	/* color map */
+	uint32_t _pad6[0x2000/4];
+	volatile uint32_t cm_fifo;	/* color map fifo status */
+	uint32_t _pad7[0x7ffc/4];
+	volatile uint32_t gmap[256];	/* gamma map */
+	uint32_t _pad8[0x7c00/4];
+	volatile uint32_t gmap10[1024];	/* gamma map */
+	uint32_t _pad9[0x7000/4];
+	volatile uint32_t crs_pos;	/* cusror control 0 */
+	volatile uint32_t crs_ctl;	/* cusror control 1 */
+	volatile uint32_t crs_cmap[3];	/* crs cmap */
+	uint32_t _pad10[0x7fec/4];
+	volatile uint32_t crs_glyph[64];/* crs glyph */
+	uint32_t _pad11[0x7f00/4];
+	volatile uint32_t vc_0;	/* video capture crtl 0 */
+	volatile uint32_t vc_1;	/* video capture crtl 1 */
+	volatile uint32_t vc_2;	/* video capture crtl 2 */
+	volatile uint32_t vc_3;	/* video capture crtl 3 */
+	volatile uint32_t vc_4;	/* video capture crtl 4 */
+	volatile uint32_t vc_5;	/* video capture crtl 5 */
+	volatile uint32_t vc_6;	/* video capture crtl 6 */
+	volatile uint32_t vc_7;	/* video capture crtl 7 */
+	volatile uint32_t vc_8;	/* video capture crtl 8 */
+};
+
+#define MASK(msb, lsb)		\
+	( (((u32)1<<((msb)-(lsb)+1))-1) << (lsb) )
+#define GET(v, msb, lsb)	\
+	( ((u32)(v) & MASK(msb,lsb)) >> (lsb) )
+#define SET(v, f, msb, lsb)	\
+	( (v) = ((v)&~MASK(msb,lsb)) | (( (u32)(f)<<(lsb) ) & MASK(msb,lsb)) )
+
+#define GET_GBE_FIELD(reg, field, v)		\
+	GET((v), GBE_##reg##_##field##_MSB, GBE_##reg##_##field##_LSB)
+#define SET_GBE_FIELD(reg, field, v, f)		\
+	SET((v), (f), GBE_##reg##_##field##_MSB, GBE_##reg##_##field##_LSB)
+
+/*
+ * Bit mask information
+ */
+#define GBE_CTRLSTAT_CHIPID_MSB		 3
+#define GBE_CTRLSTAT_CHIPID_LSB		 0
+#define GBE_CTRLSTAT_SENSE_N_MSB	 4
+#define GBE_CTRLSTAT_SENSE_N_LSB	 4
+#define GBE_CTRLSTAT_PCLKSEL_MSB	29
+#define GBE_CTRLSTAT_PCLKSEL_LSB	28
+
+#define GBE_DOTCLK_M_MSB		 7
+#define GBE_DOTCLK_M_LSB		 0
+#define GBE_DOTCLK_N_MSB		13
+#define GBE_DOTCLK_N_LSB		 8
+#define GBE_DOTCLK_P_MSB		15
+#define GBE_DOTCLK_P_LSB		14
+#define GBE_DOTCLK_RUN_MSB		20
+#define GBE_DOTCLK_RUN_LSB		20
+
+#define GBE_VT_XY_Y_MSB		23
+#define GBE_VT_XY_Y_LSB		12
+#define GBE_VT_XY_X_MSB		11
+#define GBE_VT_XY_X_LSB		 0
+#define GBE_VT_XY_FREEZE_MSB		31
+#define GBE_VT_XY_FREEZE_LSB		31
+
+#define GBE_FP_VDRV_ON_MSB	23
+#define GBE_FP_VDRV_ON_LSB	12
+#define GBE_FP_VDRV_OFF_MSB	11
+#define GBE_FP_VDRV_OFF_LSB	0
+
+#define GBE_FP_HDRV_ON_MSB	23
+#define GBE_FP_HDRV_ON_LSB	12
+#define GBE_FP_HDRV_OFF_MSB	11
+#define GBE_FP_HDRV_OFF_LSB	0
+
+#define GBE_FP_DE_ON_MSB		23
+#define GBE_FP_DE_ON_LSB		12
+#define GBE_FP_DE_OFF_MSB		11
+#define GBE_FP_DE_OFF_LSB		0
+
+#define GBE_VT_VSYNC_VSYNC_ON_MSB	23
+#define GBE_VT_VSYNC_VSYNC_ON_LSB	12
+#define GBE_VT_VSYNC_VSYNC_OFF_MSB	11
+#define GBE_VT_VSYNC_VSYNC_OFF_LSB	 0
+
+#define GBE_VT_HSYNC_HSYNC_ON_MSB	23
+#define GBE_VT_HSYNC_HSYNC_ON_LSB	12
+#define GBE_VT_HSYNC_HSYNC_OFF_MSB	11
+#define GBE_VT_HSYNC_HSYNC_OFF_LSB	 0
+
+#define GBE_VT_VBLANK_VBLANK_ON_MSB	23
+#define GBE_VT_VBLANK_VBLANK_ON_LSB	12
+#define GBE_VT_VBLANK_VBLANK_OFF_MSB	11
+#define GBE_VT_VBLANK_VBLANK_OFF_LSB	 0
+
+#define GBE_VT_HBLANK_HBLANK_ON_MSB	23
+#define GBE_VT_HBLANK_HBLANK_ON_LSB	12
+#define GBE_VT_HBLANK_HBLANK_OFF_MSB	11
+#define GBE_VT_HBLANK_HBLANK_OFF_LSB	 0
+
+#define GBE_VT_FLAGS_F2RF_HIGH_MSB	 6
+#define GBE_VT_FLAGS_F2RF_HIGH_LSB	 6
+#define GBE_VT_FLAGS_SYNC_LOW_MSB	 5
+#define GBE_VT_FLAGS_SYNC_LOW_LSB	 5
+#define GBE_VT_FLAGS_SYNC_HIGH_MSB	 4
+#define GBE_VT_FLAGS_SYNC_HIGH_LSB	 4
+#define GBE_VT_FLAGS_HDRV_LOW_MSB	 3
+#define GBE_VT_FLAGS_HDRV_LOW_LSB	 3
+#define GBE_VT_FLAGS_HDRV_INVERT_MSB	 2
+#define GBE_VT_FLAGS_HDRV_INVERT_LSB	 2
+#define GBE_VT_FLAGS_VDRV_LOW_MSB	 1
+#define GBE_VT_FLAGS_VDRV_LOW_LSB	 1
+#define GBE_VT_FLAGS_VDRV_INVERT_MSB	 0
+#define GBE_VT_FLAGS_VDRV_INVERT_LSB	 0
+
+#define GBE_VT_VCMAP_VCMAP_ON_MSB	23
+#define GBE_VT_VCMAP_VCMAP_ON_LSB	12
+#define GBE_VT_VCMAP_VCMAP_OFF_MSB	11
+#define GBE_VT_VCMAP_VCMAP_OFF_LSB	 0
+
+#define GBE_VT_HCMAP_HCMAP_ON_MSB	23
+#define GBE_VT_HCMAP_HCMAP_ON_LSB	12
+#define GBE_VT_HCMAP_HCMAP_OFF_MSB	11
+#define GBE_VT_HCMAP_HCMAP_OFF_LSB	 0
+
+#define GBE_VT_XYMAX_MAXX_MSB	11
+#define GBE_VT_XYMAX_MAXX_LSB	 0
+#define GBE_VT_XYMAX_MAXY_MSB	23
+#define GBE_VT_XYMAX_MAXY_LSB	12
+
+#define GBE_VT_HPIXEN_HPIXEN_ON_MSB	23
+#define GBE_VT_HPIXEN_HPIXEN_ON_LSB	12
+#define GBE_VT_HPIXEN_HPIXEN_OFF_MSB	11
+#define GBE_VT_HPIXEN_HPIXEN_OFF_LSB	 0
+
+#define GBE_VT_VPIXEN_VPIXEN_ON_MSB	23
+#define GBE_VT_VPIXEN_VPIXEN_ON_LSB	12
+#define GBE_VT_VPIXEN_VPIXEN_OFF_MSB	11
+#define GBE_VT_VPIXEN_VPIXEN_OFF_LSB	 0
+
+#define GBE_OVR_CONTROL_OVR_DMA_ENABLE_MSB	 0
+#define GBE_OVR_CONTROL_OVR_DMA_ENABLE_LSB	 0
+
+#define GBE_OVR_INHWCTRL_OVR_DMA_ENABLE_MSB	 0
+#define GBE_OVR_INHWCTRL_OVR_DMA_ENABLE_LSB	 0
+
+#define GBE_OVR_WIDTH_TILE_OVR_FIFO_RESET_MSB	13
+#define GBE_OVR_WIDTH_TILE_OVR_FIFO_RESET_LSB	13
+
+#define GBE_FRM_CONTROL_FRM_DMA_ENABLE_MSB	 0
+#define GBE_FRM_CONTROL_FRM_DMA_ENABLE_LSB	 0
+#define GBE_FRM_CONTROL_FRM_TILE_PTR_MSB	31
+#define GBE_FRM_CONTROL_FRM_TILE_PTR_LSB	 9
+#define GBE_FRM_CONTROL_FRM_LINEAR_MSB		 1
+#define GBE_FRM_CONTROL_FRM_LINEAR_LSB		 1
+
+#define GBE_FRM_INHWCTRL_FRM_DMA_ENABLE_MSB	 0
+#define GBE_FRM_INHWCTRL_FRM_DMA_ENABLE_LSB	 0
+
+#define GBE_FRM_SIZE_TILE_FRM_WIDTH_TILE_MSB	12
+#define GBE_FRM_SIZE_TILE_FRM_WIDTH_TILE_LSB	 5
+#define GBE_FRM_SIZE_TILE_FRM_RHS_MSB		 4
+#define GBE_FRM_SIZE_TILE_FRM_RHS_LSB		 0
+#define GBE_FRM_SIZE_TILE_FRM_DEPTH_MSB		14
+#define GBE_FRM_SIZE_TILE_FRM_DEPTH_LSB		13
+#define GBE_FRM_SIZE_TILE_FRM_FIFO_RESET_MSB	15
+#define GBE_FRM_SIZE_TILE_FRM_FIFO_RESET_LSB	15
+
+#define GBE_FRM_SIZE_PIXEL_FB_HEIGHT_PIX_MSB	31
+#define GBE_FRM_SIZE_PIXEL_FB_HEIGHT_PIX_LSB	16
+
+#define GBE_DID_CONTROL_DID_DMA_ENABLE_MSB	 0
+#define GBE_DID_CONTROL_DID_DMA_ENABLE_LSB	 0
+#define GBE_DID_INHWCTRL_DID_DMA_ENABLE_MSB	 0
+#define GBE_DID_INHWCTRL_DID_DMA_ENABLE_LSB	 0
+
+#define GBE_DID_START_XY_DID_STARTY_MSB		23
+#define GBE_DID_START_XY_DID_STARTY_LSB		12
+#define GBE_DID_START_XY_DID_STARTX_MSB		11
+#define GBE_DID_START_XY_DID_STARTX_LSB		 0
+
+#define GBE_CRS_START_XY_CRS_STARTY_MSB		23
+#define GBE_CRS_START_XY_CRS_STARTY_LSB		12
+#define GBE_CRS_START_XY_CRS_STARTX_MSB		11
+#define GBE_CRS_START_XY_CRS_STARTX_LSB		 0
+
+#define GBE_WID_AUX_MSB		12
+#define GBE_WID_AUX_LSB		11
+#define GBE_WID_GAMMA_MSB	10
+#define GBE_WID_GAMMA_LSB	10
+#define GBE_WID_CM_MSB		 9
+#define GBE_WID_CM_LSB		 5
+#define GBE_WID_TYP_MSB		 4
+#define GBE_WID_TYP_LSB		 2
+#define GBE_WID_BUF_MSB		 1
+#define GBE_WID_BUF_LSB		 0
+
+#define GBE_VC_START_XY_VC_STARTY_MSB	23
+#define GBE_VC_START_XY_VC_STARTY_LSB	12
+#define GBE_VC_START_XY_VC_STARTX_MSB	11
+#define GBE_VC_START_XY_VC_STARTX_LSB	 0
+
+/* Constants */
+
+#define GBE_FRM_DEPTH_8		0
+#define GBE_FRM_DEPTH_16	1
+#define GBE_FRM_DEPTH_32	2
+
+#define GBE_CMODE_I8		0
+#define GBE_CMODE_I12		1
+#define GBE_CMODE_RG3B2		2
+#define GBE_CMODE_RGB4		3
+#define GBE_CMODE_ARGB5		4
+#define GBE_CMODE_RGB8		5
+#define GBE_CMODE_RGBA5		6
+#define GBE_CMODE_RGB10		7
+
+#define GBE_BMODE_BOTH		3
+
+#define GBE_CRS_MAGIC		54
+#define GBE_PIXEN_MAGIC_ON	19
+#define GBE_PIXEN_MAGIC_OFF	 2
+
+#define GBE_TLB_SIZE		128
+
+/* [1] - only GBE revision 2 and later */
+
+/*
+ * Video Timing Data Structure
+ */
+
+struct gbe_timing_info {
+	int flags;
+	short width;		/* Monitor resolution */
+	short height;
+	int fields_sec;		/* fields/sec  (Hz -3 dec. places */
+	int cfreq;		/* pixel clock frequency (MHz -3 dec. places) */
+	short htotal;		/* Horizontal total pixels */
+	short hblank_start;	/* Horizontal blank start */
+	short hblank_end;	/* Horizontal blank end */
+	short hsync_start;	/* Horizontal sync start */
+	short hsync_end;	/* Horizontal sync end */
+	short vtotal;		/* Vertical total lines */
+	short vblank_start;	/* Vertical blank start */
+	short vblank_end;	/* Vertical blank end */
+	short vsync_start;	/* Vertical sync start */
+	short vsync_end;	/* Vertical sync end */
+	short pll_m;		/* PLL M parameter */
+	short pll_n;		/* PLL P parameter */
+	short pll_p;		/* PLL N parameter */
+};
+
+/* Defines for gbe_vof_info_t flags */
+
+#define GBE_VOF_UNKNOWNMON	1
+#define GBE_VOF_STEREO		2
+#define GBE_VOF_DO_GENSYNC	4	/* enable incoming sync */
+#define GBE_VOF_SYNC_ON_GREEN	8	/* sync on green */
+#define GBE_VOF_FLATPANEL	0x1000	/* FLATPANEL Timing */
+#define GBE_VOF_MAGICKEY	0x2000	/* Backdoor key */
+
+#endif		/* ! __GBE_H__ */
diff -Nru a/include/video/neomagic.h b/include/video/neomagic.h
--- a/include/video/neomagic.h	Sun May 16 01:18:34 2004
+++ b/include/video/neomagic.h	Sun May 16 01:18:34 2004
@@ -55,6 +55,20 @@
 #define NEO_MODE1_X_1600        0x1c00
 #define NEO_MODE1_BLT_ON_ADDR   0x2000
 
+/* These are offseted in MMIO space by par->CursorOff */
+#define NEOREG_CURSCNTL		0x00
+#define NEOREG_CURSX		0x04
+#define NEOREG_CURSY		0x08
+#define NEOREG_CURSBGCOLOR	0x0C
+#define NEOREG_CURSFGCOLOR	0x10
+#define NEOREG_CURSMEMPOS	0x14
+
+#define NEO_CURS_DISABLE	0x00000000
+#define NEO_CURS_ENABLE		0x00000001
+#define NEO_ICON64_ENABLE	0x00000008
+#define NEO_ICON128_ENABLE	0x0000000C
+#define NEO_ICON_BLANK		0x00000010
+
 #ifdef __KERNEL__
 
 #ifdef NEOFB_DEBUG
@@ -75,191 +89,116 @@
 
 
 struct xtimings {
-  unsigned int pixclock;
-  unsigned int HDisplay;
-  unsigned int HSyncStart;
-  unsigned int HSyncEnd;
-  unsigned int HTotal;
-  unsigned int VDisplay;
-  unsigned int VSyncStart;
-  unsigned int VSyncEnd;
-  unsigned int VTotal;
-  unsigned int sync;
-  int	       dblscan;
-  int	       interlaced;
+	unsigned int pixclock;
+	unsigned int HDisplay;
+	unsigned int HSyncStart;
+	unsigned int HSyncEnd;
+	unsigned int HTotal;
+	unsigned int VDisplay;
+	unsigned int VSyncStart;
+	unsigned int VSyncEnd;
+	unsigned int VTotal;
+	unsigned int sync;
+	int dblscan;
+	int interlaced;
 };
 
 
 /* --------------------------------------------------------------------- */
 
 typedef volatile struct {
-  __u32 bltStat;
-  __u32 bltCntl;
-  __u32 xpColor;
-  __u32 fgColor;
-  __u32 bgColor;
-  __u32 pitch;
-  __u32 clipLT;
-  __u32 clipRB;
-  __u32 srcBitOffset;
-  __u32 srcStart;
-  __u32 reserved0;
-  __u32 dstStart;
-  __u32 xyExt;
-
-  __u32 reserved1[19];
-
-  __u32 pageCntl;
-  __u32 pageBase;
-  __u32 postBase;
-  __u32 postPtr;
-  __u32 dataPtr;
+	__u32 bltStat;
+	__u32 bltCntl;
+	__u32 xpColor;
+	__u32 fgColor;
+	__u32 bgColor;
+	__u32 pitch;
+	__u32 clipLT;
+	__u32 clipRB;
+	__u32 srcBitOffset;
+	__u32 srcStart;
+	__u32 reserved0;
+	__u32 dstStart;
+	__u32 xyExt;
+
+	__u32 reserved1[19];
+
+	__u32 pageCntl;
+	__u32 pageBase;
+	__u32 postBase;
+	__u32 postPtr;
+	__u32 dataPtr;
 } Neo2200;
 
-#define NR_PALETTE	256
-
 #define MMIO_SIZE 0x200000
 
 #define NEO_EXT_CR_MAX 0x85
 #define NEO_EXT_GR_MAX 0xC7
 
 struct neofb_par {
-  
-  unsigned char MiscOutReg;     /* Misc */
-  unsigned char CRTC[25];       /* Crtc Controller */
-  unsigned char Sequencer[5];   /* Video Sequencer */
-  unsigned char Graphics[9];    /* Video Graphics */
-  unsigned char Attribute[21];  /* Video Atribute */
-
-  unsigned char GeneralLockReg;
-  unsigned char ExtCRTDispAddr;
-  unsigned char ExtCRTOffset;
-  unsigned char SysIfaceCntl1;
-  unsigned char SysIfaceCntl2;
-  unsigned char ExtColorModeSelect;
-  unsigned char biosMode;
-
-  unsigned char PanelDispCntlReg1;
-  unsigned char PanelDispCntlReg2;
-  unsigned char PanelDispCntlReg3;
-  unsigned char PanelVertCenterReg1;
-  unsigned char PanelVertCenterReg2;
-  unsigned char PanelVertCenterReg3;
-  unsigned char PanelVertCenterReg4;
-  unsigned char PanelVertCenterReg5;
-  unsigned char PanelHorizCenterReg1;
-  unsigned char PanelHorizCenterReg2;
-  unsigned char PanelHorizCenterReg3;
-  unsigned char PanelHorizCenterReg4;
-  unsigned char PanelHorizCenterReg5;
-
-  int           ProgramVCLK;
-  unsigned char VCLK3NumeratorLow;
-  unsigned char VCLK3NumeratorHigh;
-  unsigned char VCLK3Denominator;
-  unsigned char VerticalExt;
+	struct vgastate state;
+	atomic_t ref_count;
+
+	unsigned char MiscOutReg;	/* Misc */
+	unsigned char CRTC[25];		/* Crtc Controller */
+	unsigned char Sequencer[5];	/* Video Sequencer */
+	unsigned char Graphics[9];	/* Video Graphics */
+	unsigned char Attribute[21];	/* Video Atribute */
+
+	unsigned char GeneralLockReg;
+	unsigned char ExtCRTDispAddr;
+	unsigned char ExtCRTOffset;
+	unsigned char SysIfaceCntl1;
+	unsigned char SysIfaceCntl2;
+	unsigned char ExtColorModeSelect;
+	unsigned char biosMode;
+
+	unsigned char PanelDispCntlReg1;
+	unsigned char PanelDispCntlReg2;
+	unsigned char PanelDispCntlReg3;
+	unsigned char PanelVertCenterReg1;
+	unsigned char PanelVertCenterReg2;
+	unsigned char PanelVertCenterReg3;
+	unsigned char PanelVertCenterReg4;
+	unsigned char PanelVertCenterReg5;
+	unsigned char PanelHorizCenterReg1;
+	unsigned char PanelHorizCenterReg2;
+	unsigned char PanelHorizCenterReg3;
+	unsigned char PanelHorizCenterReg4;
+	unsigned char PanelHorizCenterReg5;
+
+	int ProgramVCLK;
+	unsigned char VCLK3NumeratorLow;
+	unsigned char VCLK3NumeratorHigh;
+	unsigned char VCLK3Denominator;
+	unsigned char VerticalExt;
 
 #ifdef CONFIG_MTRR
-  int    mtrr;
+	int mtrr;
 #endif
-  u8    *mmio_vbase;
-
-  Neo2200 *neo2200;
-
-  /* Panels size */
-  int NeoPanelWidth;
-  int NeoPanelHeight;
-
-  int maxClock;
-
-  int pci_burst;
-  int lcd_stretch;
-  int internal_display;
-  int external_display;
-  int libretto;
+	u8 *mmio_vbase;
+	u8 cursorOff;
+	u8 *cursorPad;		/* Must die !! */
+
+	Neo2200 *neo2200;
+
+	/* Panels size */
+	int NeoPanelWidth;
+	int NeoPanelHeight;
+
+	int maxClock;
+
+	int pci_burst;
+	int lcd_stretch;
+	int internal_display;
+	int external_display;
+	int libretto;
 };
 
 typedef struct {
-    int x_res;
-    int y_res;
-    int mode;
+	int x_res;
+	int y_res;
+	int mode;
 } biosMode;
 
-/* vga IO functions */
-static inline u8 VGArCR (u8 index)
-{
-  outb (index, 0x3d4);
-  return inb (0x3d5);
-}
-
-static inline void VGAwCR (u8 index, u8 val)
-{
-  outb (index, 0x3d4);
-  outb (val, 0x3d5);
-}
-
-static inline u8 VGArGR (u8 index)
-{
-  outb (index, 0x3ce);
-  return inb (0x3cf);
-}
-
-static inline void VGAwGR (u8 index, u8 val)
-{
-  outb (index, 0x3ce);
-  outb (val, 0x3cf);
-}
-
-static inline u8 VGArSEQ (u8 index)
-{
-  outb (index, 0x3c4);
-  return inb (0x3c5);
-}
-
-static inline void VGAwSEQ (u8 index, u8 val)
-{
-  outb (index, 0x3c4);
-  outb (val, 0x3c5);
-}
-
-
-static int paletteEnabled = 0;
-
-static inline void VGAenablePalette (void)
-{
-  u8 tmp;
-
-  tmp = inb (0x3da);
-  outb (0x00, 0x3c0);
-  paletteEnabled = 1;
-}
-
-static inline void VGAdisablePalette (void)
-{
-  u8 tmp;
-
-  tmp = inb (0x3da);
-  outb (0x20, 0x3c0);
-  paletteEnabled = 0;
-}
-
-static inline void VGAwATTR (u8 index, u8 value)
-{
-  u8 tmp;
-
-  if (paletteEnabled)
-    index &= ~0x20;
-  else
-    index |= 0x20;
-
-  tmp = inb (0x3da);
-  outb (index, 0x3c0);
-  outb (value, 0x3c0);
-}
-
-static inline void VGAwMISC (u8 value)
-{
-  outb (value, 0x3c2);
-}
 #endif
-
diff -Nru a/init/do_mounts_rd.c b/init/do_mounts_rd.c
--- a/init/do_mounts_rd.c	Sun May 16 01:18:36 2004
+++ b/init/do_mounts_rd.c	Sun May 16 01:18:36 2004
@@ -306,7 +306,7 @@
 
 static int  fill_inbuf(void);
 static void flush_window(void);
-static void *malloc(int size);
+static void *malloc(size_t size);
 static void free(void *where);
 static void error(char *m);
 static void gzip_mark(void **);
@@ -314,7 +314,7 @@
 
 #include "../lib/inflate.c"
 
-static void __init *malloc(int size)
+static void __init *malloc(size_t size)
 {
 	return kmalloc(size, GFP_KERNEL);
 }
diff -Nru a/init/main.c b/init/main.c
--- a/init/main.c	Sun May 16 01:18:33 2004
+++ b/init/main.c	Sun May 16 01:18:33 2004
@@ -178,7 +178,7 @@
    better than 1% */
 #define LPS_PREC 8
 
-void __init calibrate_delay(void)
+void __devinit calibrate_delay(void)
 {
 	unsigned long ticks, loopbit;
 	int lps_precision = LPS_PREC;
@@ -354,10 +354,10 @@
 	unsigned j = 1;
 
 	/* FIXME: This should be done in userspace --RR */
-	for (i = 0; i < NR_CPUS; i++) {
+	for_each_present_cpu(i) {
 		if (num_online_cpus() >= max_cpus)
 			break;
-		if (cpu_possible(i) && !cpu_online(i)) {
+		if (!cpu_online(i)) {
 			cpu_up(i);
 			j++;
 		}
@@ -417,6 +417,13 @@
 	 */
 	smp_prepare_boot_cpu();
 
+	/*
+	 * Set up the scheduler prior starting any interrupts (such as the
+	 * timer interrupt). Full topology setup happens at smp_init()
+	 * time - but meanwhile we still have a functioning scheduler.
+	 */
+	sched_init();
+
 	build_all_zonelists();
 	page_alloc_init();
 	printk("Kernel command line: %s\n", saved_command_line);
@@ -428,7 +435,7 @@
 	rcu_init();
 	init_IRQ();
 	pidhash_init();
-	sched_init();
+	init_timers();
 	softirq_init();
 	time_init();
 
@@ -567,7 +574,6 @@
 
 	migration_init();
 #endif
-	node_nr_running_init();
 	spawn_ksoftirqd();
 }
 
@@ -577,6 +583,24 @@
 	execve(init_filename, argv_init, envp_init);
 }
 
+static inline void fixup_cpu_present_map(void)
+{
+#ifdef CONFIG_SMP
+	int i;
+
+	/*
+	 * If arch is not hotplug ready and did not populate
+	 * cpu_present_map, just make cpu_present_map same as cpu_possible_map
+	 * for other cpu bringup code to function as normal. e.g smp_init() etc.
+	 */
+	if (cpus_empty(cpu_present_map)) {
+		for_each_cpu(i) {
+			cpu_set(i, cpu_present_map);
+		}
+	}
+#endif
+}
+
 static int init(void * unused)
 {
 	lock_kernel();
@@ -595,7 +619,9 @@
 
 	do_pre_smp_initcalls();
 
+	fixup_cpu_present_map();
 	smp_init();
+	sched_init_smp();
 
 	/*
 	 * Do this before initcalls, because some drivers want to access
diff -Nru a/ipc/mqueue.c b/ipc/mqueue.c
--- a/ipc/mqueue.c	Sun May 16 01:18:35 2004
+++ b/ipc/mqueue.c	Sun May 16 01:18:35 2004
@@ -97,7 +97,8 @@
 	return container_of(inode, struct mqueue_inode_info, vfs_inode);
 }
 
-static struct inode *mqueue_get_inode(struct super_block *sb, int mode)
+static struct inode *mqueue_get_inode(struct super_block *sb, int mode,
+							struct mq_attr *attr)
 {
 	struct inode *inode;
 
@@ -127,7 +128,11 @@
 			memset(&info->attr, 0, sizeof(info->attr));
 			info->attr.mq_maxmsg = DFLT_MSGMAX;
 			info->attr.mq_msgsize = DFLT_MSGSIZEMAX;
-			info->messages = kmalloc(DFLT_MSGMAX * sizeof(struct msg_msg *), GFP_KERNEL);
+			if (attr) {
+				info->attr.mq_maxmsg = attr->mq_maxmsg;
+				info->attr.mq_msgsize = attr->mq_msgsize;
+			}
+			info->messages = kmalloc(info->attr.mq_maxmsg * sizeof(struct msg_msg *), GFP_KERNEL);
 			if (!info->messages) {
 				make_bad_inode(inode);
 				iput(inode);
@@ -153,7 +158,7 @@
 	sb->s_magic = MQUEUE_MAGIC;
 	sb->s_op = &mqueue_super_ops;
 
-	inode = mqueue_get_inode(sb, S_IFDIR | S_ISVTX | S_IRWXUGO);
+	inode = mqueue_get_inode(sb, S_IFDIR | S_ISVTX | S_IRWXUGO, NULL);
 	if (!inode)
 		return -ENOMEM;
 
@@ -226,6 +231,7 @@
 				int mode, struct nameidata *nd)
 {
 	struct inode *inode;
+	struct mq_attr *attr = dentry->d_fsdata;
 	int error;
 
 	spin_lock(&mq_lock);
@@ -236,7 +242,7 @@
 	queues_count++;
 	spin_unlock(&mq_lock);
 
-	inode = mqueue_get_inode(dir->i_sb, mode);
+	inode = mqueue_get_inode(dir->i_sb, mode, attr);
 	if (!inode) {
 		error = -ENOMEM;
 		spin_lock(&mq_lock);
@@ -535,9 +541,6 @@
 			int oflag, mode_t mode, struct mq_attr __user *u_attr)
 {
 	struct file *filp;
-	struct inode *inode;
-	struct mqueue_inode_info *info;
-	struct msg_msg **msgs = NULL;
 	struct mq_attr attr;
 	int ret;
 
@@ -555,28 +558,14 @@
 					attr.mq_msgsize > msgsize_max)
 				return ERR_PTR(-EINVAL);
 		}
-		msgs = kmalloc(attr.mq_maxmsg * sizeof(*msgs), GFP_KERNEL);
-		if (!msgs)
-			return ERR_PTR(-ENOMEM);
-	} else {
-		msgs = NULL;
+		/* store for use during create */
+		dentry->d_fsdata = &attr;
 	}
 
 	ret = vfs_create(dir->d_inode, dentry, mode, NULL);
-	if (ret) {
-		kfree(msgs);
+	dentry->d_fsdata = NULL;
+	if (ret)
 		return ERR_PTR(ret);
-	}
-
-	inode = dentry->d_inode;
-	info = MQUEUE_I(inode);
-
-	if (msgs) {
-		info->attr.mq_maxmsg = attr.mq_maxmsg;
-		info->attr.mq_msgsize = attr.mq_msgsize;
-		kfree(info->messages);
-		info->messages = msgs;
-	}
 
 	filp = dentry_open(dentry, mqueue_mnt, oflag);
 	if (!IS_ERR(filp))
diff -Nru a/kernel/cpu.c b/kernel/cpu.c
--- a/kernel/cpu.c	Sun May 16 01:18:36 2004
+++ b/kernel/cpu.c	Sun May 16 01:18:36 2004
@@ -20,6 +20,14 @@
 DECLARE_MUTEX(cpucontrol);
 
 static struct notifier_block *cpu_chain;
+/*
+ * Represents all cpu's present in the system
+ * In systems capable of hotplug, this map could dynamically grow
+ * as new cpu's are detected in the system via any platform specific
+ * method, such as ACPI for e.g.
+ */
+cpumask_t	cpu_present_map;
+EXPORT_SYMBOL(cpu_present_map);
 
 /* Need to know about CPUs going up/down? */
 int register_cpu_notifier(struct notifier_block *nb)
@@ -43,15 +51,16 @@
 EXPORT_SYMBOL(unregister_cpu_notifier);
 
 #ifdef CONFIG_HOTPLUG_CPU
-static inline void check_for_tasks(int cpu, struct task_struct *k)
+static inline void check_for_tasks(int cpu)
 {
 	struct task_struct *p;
 
 	write_lock_irq(&tasklist_lock);
 	for_each_process(p) {
-		if (task_cpu(p) == cpu && p != k)
-			printk(KERN_WARNING "Task %s is on cpu %d\n",
-				p->comm, cpu);
+		if (task_cpu(p) == cpu && (p->utime != 0 || p->stime != 0))
+			printk(KERN_WARNING "Task %s (pid = %d) is on cpu %d\
+				(state = %ld, flags = %lx) \n",
+				 p->comm, p->pid, cpu, p->state, p->flags);
 	}
 	write_unlock_irq(&tasklist_lock);
 }
@@ -96,8 +105,9 @@
 	if (err < 0)
 		cpu_set(smp_processor_id(), cpu_online_map);
 	else
-		/* Everyone else gets kicked off. */
-		migrate_all_tasks();
+		/* Force idle task to run as soon as we yield: it should
+		   immediately notice cpu is offline and die quickly. */
+		sched_idle_next();
 
 	return err;
 }
@@ -106,6 +116,7 @@
 {
 	int err;
 	struct task_struct *p;
+	cpumask_t old_allowed, tmp;
 
 	if ((err = lock_cpu_hotplug_interruptible()) != 0)
 		return err;
@@ -120,17 +131,21 @@
 		goto out;
 	}
 
+	/* Ensure that we are not runnable on dying cpu */
+	old_allowed = current->cpus_allowed;
+	tmp = CPU_MASK_ALL;
+	cpu_clear(cpu, tmp);
+	set_cpus_allowed(current, tmp);
+
 	p = __stop_machine_run(take_cpu_down, NULL, cpu);
 	if (IS_ERR(p)) {
 		err = PTR_ERR(p);
-		goto out;
+		goto out_allowed;
 	}
 
 	if (cpu_online(cpu))
 		goto out_thread;
 
-	check_for_tasks(cpu, p);
-
 	/* Wait for it to sleep (leaving idle task). */
 	while (!idle_cpu(cpu))
 		yield();
@@ -146,10 +161,14 @@
 	    == NOTIFY_BAD)
 		BUG();
 
+	check_for_tasks(cpu);
+
 	cpu_run_sbin_hotplug(cpu, "offline");
 
 out_thread:
 	err = kthread_stop(p);
+out_allowed:
+	set_cpus_allowed(current, old_allowed);
 out:
 	unlock_cpu_hotplug();
 	return err;
@@ -169,7 +188,7 @@
 	if ((ret = down_interruptible(&cpucontrol)) != 0)
 		return ret;
 
-	if (cpu_online(cpu)) {
+	if (cpu_online(cpu) || !cpu_present(cpu)) {
 		ret = -EINVAL;
 		goto out;
 	}
diff -Nru a/kernel/fork.c b/kernel/fork.c
--- a/kernel/fork.c	Sun May 16 01:18:33 2004
+++ b/kernel/fork.c	Sun May 16 01:18:33 2004
@@ -26,6 +26,7 @@
 #include <linux/binfmts.h>
 #include <linux/mman.h>
 #include <linux/fs.h>
+#include <linux/cpu.h>
 #include <linux/security.h>
 #include <linux/syscalls.h>
 #include <linux/jiffies.h>
@@ -60,7 +61,7 @@
 	int cpu;
 	int total = 0;
 
-	for_each_cpu(cpu)
+	for_each_online_cpu(cpu)
 		total += per_cpu(process_counts, cpu);
 
 	return total;
@@ -196,9 +197,9 @@
 
 EXPORT_SYMBOL(finish_wait);
 
-int autoremove_wake_function(wait_queue_t *wait, unsigned mode, int sync)
+int autoremove_wake_function(wait_queue_t *wait, unsigned mode, int sync, void *key)
 {
-	int ret = default_wake_function(wait, mode, sync);
+	int ret = default_wake_function(wait, mode, sync, key);
 
 	if (ret)
 		list_del_init(&wait->task_list);
@@ -1180,10 +1181,31 @@
 			set_tsk_thread_flag(p, TIF_SIGPENDING);
 		}
 
-		if (!(clone_flags & CLONE_STOPPED))
-			wake_up_forked_process(p);	/* do this last */
-		else
+		if (!(clone_flags & CLONE_STOPPED)) {
+			/*
+			 * Do the wakeup last. On SMP we treat fork() and
+			 * CLONE_VM separately, because fork() has already
+			 * created cache footprint on this CPU (due to
+			 * copying the pagetables), hence migration would
+			 * probably be costy. Threads on the other hand
+			 * have less traction to the current CPU, and if
+			 * there's an imbalance then the scheduler can
+			 * migrate this fresh thread now, before it
+			 * accumulates a larger cache footprint:
+			 */
+			if (clone_flags & CLONE_VM)
+				wake_up_forked_thread(p);
+			else
+				wake_up_forked_process(p);
+		} else {
+			int cpu = get_cpu();
+
 			p->state = TASK_STOPPED;
+			if (cpu_is_offline(task_cpu(p)))
+				set_task_cpu(p, cpu);
+
+			put_cpu();
+		}
 		++total_forks;
 
 		if (unlikely (trace)) {
diff -Nru a/kernel/kallsyms.c b/kernel/kallsyms.c
--- a/kernel/kallsyms.c	Sun May 16 01:18:36 2004
+++ b/kernel/kallsyms.c	Sun May 16 01:18:36 2004
@@ -88,14 +88,20 @@
 			name += strlen(name) + 1;
 		}
 
-		/* Base symbol size on next symbol. */
-		if (best + 1 < kallsyms_num_syms)
-			symbol_end = kallsyms_addresses[best + 1];
-		else if (is_kernel_inittext(addr))
+		/* At worst, symbol ends at end of section. */
+		if (is_kernel_inittext(addr))
 			symbol_end = (unsigned long)_einittext;
 		else
 			symbol_end = (unsigned long)_etext;
 
+		/* Search for next non-aliased symbol */
+		for (i = best+1; i < kallsyms_num_syms; i++) {
+			if (kallsyms_addresses[i] > kallsyms_addresses[best]) {
+				symbol_end = kallsyms_addresses[i];
+				break;
+			}
+		}
+
 		*symbolsize = symbol_end - kallsyms_addresses[best];
 		*modname = NULL;
 		*offset = addr - kallsyms_addresses[best];
@@ -171,21 +177,23 @@
 	return 1;
 }
 
-static void get_ksymbol_core(struct kallsym_iter *iter)
+/* Returns space to next name. */
+static unsigned long get_ksymbol_core(struct kallsym_iter *iter)
 {
-	unsigned stemlen;
+	unsigned stemlen, off = iter->nameoff;
 
 	/* First char of each symbol name indicates prefix length
 	   shared with previous name (stem compression). */
-	stemlen = kallsyms_names[iter->nameoff++];
+	stemlen = kallsyms_names[off++];
 
-	strlcpy(iter->name+stemlen, kallsyms_names+iter->nameoff, 128-stemlen);
-	iter->nameoff += strlen(kallsyms_names + iter->nameoff) + 1;
+	strlcpy(iter->name+stemlen, kallsyms_names + off, 128-stemlen);
+	off += strlen(kallsyms_names + off) + 1;
 	iter->owner = NULL;
 	iter->value = kallsyms_addresses[iter->pos];
 	iter->type = 't';
 
 	upcase_if_global(iter);
+	return off - iter->nameoff;
 }
 
 static void reset_iter(struct kallsym_iter *iter)
@@ -210,9 +218,10 @@
 
 	/* We need to iterate through the previous symbols: can be slow */
 	for (; iter->pos != pos; iter->pos++) {
-		get_ksymbol_core(iter);
+		iter->nameoff += get_ksymbol_core(iter);
 		cond_resched();
 	}
+	get_ksymbol_core(iter);
 	return 1;
 }
 
diff -Nru a/kernel/kmod.c b/kernel/kmod.c
--- a/kernel/kmod.c	Sun May 16 01:18:34 2004
+++ b/kernel/kmod.c	Sun May 16 01:18:34 2004
@@ -269,4 +269,4 @@
 	BUG_ON(!khelper_wq);
 	return 0;
 }
-__initcall(usermodehelper_init);
+core_initcall(usermodehelper_init);
diff -Nru a/kernel/module.c b/kernel/module.c
--- a/kernel/module.c	Sun May 16 01:18:36 2004
+++ b/kernel/module.c	Sun May 16 01:18:36 2004
@@ -379,6 +379,22 @@
 }
 #endif /* CONFIG_SMP */
 
+static int add_attribute(struct module *mod, struct kernel_param *kp)
+{
+	struct module_attribute *a;
+	int retval;
+
+	a = &mod->mkobj->attr[mod->mkobj->num_attributes];
+	a->attr.name = (char *)kp->name;
+	a->attr.owner = mod;
+	a->attr.mode = kp->perm;
+	a->param = kp;
+	retval = sysfs_create_file(&mod->mkobj->kobj, &a->attr);
+	if (!retval)
+		mod->mkobj->num_attributes++;
+	return retval;
+}
+
 #ifdef CONFIG_MODULE_UNLOAD
 /* Init the unload section of the module. */
 static void module_unload_init(struct module *mod)
@@ -663,6 +679,23 @@
 }
 EXPORT_SYMBOL_GPL(symbol_put_addr);
 
+static int refcnt_get_fn(char *buffer, struct kernel_param *kp)
+{
+	struct module *mod = container_of(kp, struct module, refcnt_param);
+
+	/* sysfs holds one reference. */
+	return sprintf(buffer, "%u", module_refcount(mod)-1);
+}
+
+static inline int sysfs_unload_setup(struct module *mod)
+{
+	mod->refcnt_param.name = "refcnt";
+	mod->refcnt_param.perm = 0444;
+	mod->refcnt_param.get = refcnt_get_fn;
+
+	return add_attribute(mod, &mod->refcnt_param);
+}
+
 #else /* !CONFIG_MODULE_UNLOAD */
 static void print_unload_info(struct seq_file *m, struct module *mod)
 {
@@ -689,6 +722,10 @@
 	return -ENOSYS;
 }
 
+static inline int sysfs_unload_setup(struct module *mod)
+{
+	return 0;
+}
 #endif /* CONFIG_MODULE_UNLOAD */
 
 #ifdef CONFIG_OBSOLETE_MODPARM
@@ -944,6 +981,116 @@
 	return ret;
 }
 
+#define to_module_attr(n) container_of(n, struct module_attribute, attr);
+
+static ssize_t module_attr_show(struct kobject *kobj,
+				struct attribute *attr,
+				char *buf)
+{
+	int count;
+	struct module_attribute *attribute = to_module_attr(attr);
+
+	if (!attribute->param->get)
+		return -EPERM;
+
+	count = attribute->param->get(buf, attribute->param);
+	if (count > 0) {
+		strcat(buf, "\n");
+		++count;
+	}
+	return count;
+}
+
+/* sysfs always hands a nul-terminated string in buf.  We rely on that. */
+static ssize_t module_attr_store(struct kobject *kobj,
+				 struct attribute *attr,
+				 const char *buf, size_t len)
+{
+	int err;
+	struct module_attribute *attribute = to_module_attr(attr);
+
+	if (!attribute->param->set)
+		return -EPERM;
+
+	err = attribute->param->set(buf, attribute->param);
+	if (!err)
+		return len;
+	return err;
+}
+
+static struct sysfs_ops module_sysfs_ops = {
+	.show = module_attr_show,
+	.store = module_attr_store,
+};
+
+static void module_kobj_release(struct kobject *kobj)
+{
+	kfree(container_of(kobj, struct module_kobject, kobj));
+}
+
+static struct kobj_type module_ktype = {
+	.sysfs_ops =	&module_sysfs_ops,
+	.release =	&module_kobj_release,
+};
+static decl_subsys(module, &module_ktype, NULL);
+
+static int mod_sysfs_setup(struct module *mod,
+			   struct kernel_param *kparam,
+			   unsigned int num_params)
+{
+	unsigned int i;
+	int err;
+
+	/* We overallocate: not every param is in sysfs, and maybe no refcnt */
+	mod->mkobj = kmalloc(sizeof(*mod->mkobj)
+			     + sizeof(mod->mkobj->attr[0]) * (num_params+1),
+			     GFP_KERNEL);
+	if (!mod->mkobj)
+		return -ENOMEM;
+
+	memset(&mod->mkobj->kobj, 0, sizeof(mod->mkobj->kobj));
+	err = kobject_set_name(&mod->mkobj->kobj, mod->name);
+	if (err)
+		goto out;
+	kobj_set_kset_s(mod->mkobj, module_subsys);
+	err = kobject_register(&mod->mkobj->kobj);
+	if (err)
+		goto out;
+
+	mod->mkobj->num_attributes = 0;
+
+	for (i = 0; i < num_params; i++) {
+		if (kparam[i].perm) {
+			err = add_attribute(mod, &kparam[i]);
+			if (err)
+				goto out_unreg;
+		}
+	}
+	err = sysfs_unload_setup(mod);
+	if (err)
+		goto out_unreg;
+	return 0;
+
+out_unreg:
+	for (i = 0; i < mod->mkobj->num_attributes; i++)
+		sysfs_remove_file(&mod->mkobj->kobj,&mod->mkobj->attr[i].attr);
+	/* Calls module_kobj_release */
+	kobject_unregister(&mod->mkobj->kobj);
+	return err;
+out:
+	kfree(mod->mkobj);
+	return err;
+}
+
+static void mod_kobject_remove(struct module *mod)
+{
+	unsigned int i;
+	for (i = 0; i < mod->mkobj->num_attributes; i++)
+		sysfs_remove_file(&mod->mkobj->kobj,&mod->mkobj->attr[i].attr);
+	/* Calls module_kobj_release */
+	kobject_unregister(&mod->mkobj->kobj);
+}
+
 /* Free a module, remove from lists, etc (must hold module mutex). */
 static void free_module(struct module *mod)
 {
@@ -952,6 +1099,8 @@
 	list_del(&mod->list);
 	spin_unlock_irq(&modlist_lock);
 
+	mod_kobject_remove(mod);
+
 	/* Arch-specific cleanup. */
 	module_arch_cleanup(mod);
 
@@ -1131,7 +1280,7 @@
 		license = "unspecified";
 
 	mod->license_gplok = license_is_gpl_compatible(license);
-	if (!mod->license_gplok) {
+	if (!mod->license_gplok && !(tainted & TAINT_PROPRIETARY_MODULE)) {
 		printk(KERN_WARNING "%s: module license '%s' taints kernel.\n",
 		       mod->name, license);
 		tainted |= TAINT_PROPRIETARY_MODULE;
@@ -1556,6 +1705,11 @@
 				 / sizeof(struct kernel_param),
 				 NULL);
 	}
+	err = mod_sysfs_setup(mod, 
+			      (struct kernel_param *)
+			      sechdrs[setupindex].sh_addr,
+			      sechdrs[setupindex].sh_size
+			      / sizeof(struct kernel_param));
 	if (err < 0)
 		goto arch_cleanup;
 
@@ -1886,8 +2040,25 @@
 	return NULL;
 }
 
+/* Don't grab lock, we're oopsing. */
+void print_modules(void)
+{
+	struct module *mod;
+
+	printk("Modules linked in:");
+	list_for_each_entry(mod, &modules, list)
+		printk(" %s", mod->name);
+	printk("\n");
+}
+
 #ifdef CONFIG_MODVERSIONS
 /* Generate the signature for struct module here, too, for modversions. */
 void struct_module(struct module *mod) { return; }
 EXPORT_SYMBOL(struct_module);
 #endif
+
+static int __init modules_init(void)
+{
+	return subsystem_register(&module_subsys);
+}
+__initcall(modules_init);
diff -Nru a/kernel/params.c b/kernel/params.c
--- a/kernel/params.c	Sun May 16 01:18:36 2004
+++ b/kernel/params.c	Sun May 16 01:18:36 2004
@@ -161,7 +161,7 @@
 									\
 		if (!val) return -EINVAL;				\
 		l = strtolfn(val, &endp, 0);				\
-		if (endp == val || *endp || ((type)l != l))		\
+		if (endp == val || ((type)l != l))			\
 			return -EINVAL;					\
 		*((type *)kp->arg) = l;					\
 		return 0;						\
diff -Nru a/kernel/rcupdate.c b/kernel/rcupdate.c
--- a/kernel/rcupdate.c	Sun May 16 01:18:33 2004
+++ b/kernel/rcupdate.c	Sun May 16 01:18:33 2004
@@ -113,7 +113,7 @@
 		return;
 	}
 	/* Can't change, since spin lock held. */
-	active = idle_cpu_mask;
+	active = nohz_cpu_mask;
 	cpus_complement(active);
 	cpus_and(rcu_ctrlblk.rcu_cpu_mask, cpu_online_map, active);
 }
@@ -223,13 +223,13 @@
 
 	if (!list_empty(&RCU_curlist(cpu)) &&
 	    rcu_batch_after(rcu_ctrlblk.curbatch, RCU_batch(cpu))) {
-		list_splice(&RCU_curlist(cpu), &list);
+		__list_splice(&RCU_curlist(cpu), &list);
 		INIT_LIST_HEAD(&RCU_curlist(cpu));
 	}
 
 	local_irq_disable();
 	if (!list_empty(&RCU_nxtlist(cpu)) && list_empty(&RCU_curlist(cpu))) {
-		list_splice(&RCU_nxtlist(cpu), &RCU_curlist(cpu));
+		__list_splice(&RCU_nxtlist(cpu), &RCU_curlist(cpu));
 		INIT_LIST_HEAD(&RCU_nxtlist(cpu));
 		local_irq_enable();
 
diff -Nru a/kernel/sched.c b/kernel/sched.c
--- a/kernel/sched.c	Sun May 16 01:18:36 2004
+++ b/kernel/sched.c	Sun May 16 01:18:36 2004
@@ -15,6 +15,7 @@
  *		and per-CPU runqueues.  Cleanups and useful suggestions
  *		by Davide Libenzi, preemptible kernel bits by Robert Love.
  *  2003-09-03	Interactivity tuning by Con Kolivas.
+ *  2004-04-02	Scheduler domains code by Nick Piggin
  */
 
 #include <linux/mm.h>
@@ -91,7 +92,6 @@
 #define MAX_SLEEP_AVG		(AVG_TIMESLICE * MAX_BONUS)
 #define STARVATION_LIMIT	(MAX_SLEEP_AVG)
 #define NS_MAX_SLEEP_AVG	(JIFFIES_TO_NS(MAX_SLEEP_AVG))
-#define NODE_THRESHOLD		125
 #define CREDIT_LIMIT		100
 
 /*
@@ -173,11 +173,13 @@
 		((MAX_TIMESLICE - MIN_TIMESLICE) * \
 			(MAX_PRIO-1 - (p)->static_prio) / (MAX_USER_PRIO-1)))
 
-static inline unsigned int task_timeslice(task_t *p)
+static unsigned int task_timeslice(task_t *p)
 {
 	return BASE_TIMESLICE(p);
 }
 
+#define task_hot(p, now, sd) ((now) - (p)->timestamp < (sd)->cache_hot_time)
+
 /*
  * These are the runqueue data structures:
  */
@@ -187,7 +189,7 @@
 typedef struct runqueue runqueue_t;
 
 struct prio_array {
-	int nr_active;
+	unsigned int nr_active;
 	unsigned long bitmap[BITMAP_SIZE];
 	struct list_head queue[MAX_PRIO];
 };
@@ -201,37 +203,46 @@
  */
 struct runqueue {
 	spinlock_t lock;
+
+	/*
+	 * nr_running and cpu_load should be in the same cacheline because
+	 * remote CPUs use both these fields when doing load calculation.
+	 */
+	unsigned long nr_running;
+#ifdef CONFIG_SMP
+	unsigned long cpu_load;
+#endif
 	unsigned long long nr_switches;
-	unsigned long nr_running, expired_timestamp, nr_uninterruptible,
-		timestamp_last_tick;
+	unsigned long expired_timestamp, nr_uninterruptible;
+	unsigned long long timestamp_last_tick;
 	task_t *curr, *idle;
 	struct mm_struct *prev_mm;
 	prio_array_t *active, *expired, arrays[2];
-	int best_expired_prio, prev_cpu_load[NR_CPUS];
-#ifdef CONFIG_NUMA
-	atomic_t *node_nr_running;
-	int prev_node_load[MAX_NUMNODES];
-#endif
+	int best_expired_prio;
+	atomic_t nr_iowait;
+
+#ifdef CONFIG_SMP
+	struct sched_domain *sd;
+
+	/* For active balancing */
+	int active_balance;
+	int push_cpu;
+
 	task_t *migration_thread;
 	struct list_head migration_queue;
-
-	atomic_t nr_iowait;
+#endif
 };
 
 static DEFINE_PER_CPU(struct runqueue, runqueues);
 
+#define for_each_domain(cpu, domain) \
+	for (domain = cpu_rq(cpu)->sd; domain; domain = domain->parent)
+
 #define cpu_rq(cpu)		(&per_cpu(runqueues, (cpu)))
 #define this_rq()		(&__get_cpu_var(runqueues))
 #define task_rq(p)		cpu_rq(task_cpu(p))
 #define cpu_curr(cpu)		(cpu_rq(cpu)->curr)
 
-extern unsigned long __scheduling_functions_start_here;
-extern unsigned long __scheduling_functions_end_here;
-const unsigned long scheduling_functions_start_here =
-			(unsigned long)&__scheduling_functions_start_here;
-const unsigned long scheduling_functions_end_here =
-			(unsigned long)&__scheduling_functions_end_here;
-
 /*
  * Default context-switch locking:
  */
@@ -241,57 +252,12 @@
 # define task_running(rq, p)		((rq)->curr == (p))
 #endif
 
-#ifdef CONFIG_NUMA
-
-/*
- * Keep track of running tasks.
- */
-
-static atomic_t node_nr_running[MAX_NUMNODES] ____cacheline_maxaligned_in_smp =
-	{[0 ...MAX_NUMNODES-1] = ATOMIC_INIT(0)};
-
-static inline void nr_running_init(struct runqueue *rq)
-{
-	rq->node_nr_running = &node_nr_running[0];
-}
-
-static inline void nr_running_inc(runqueue_t *rq)
-{
-	atomic_inc(rq->node_nr_running);
-	rq->nr_running++;
-}
-
-static inline void nr_running_dec(runqueue_t *rq)
-{
-	atomic_dec(rq->node_nr_running);
-	rq->nr_running--;
-}
-
-__init void node_nr_running_init(void)
-{
-	int i;
-
-	for (i = 0; i < NR_CPUS; i++) {
-		if (cpu_possible(i))
-			cpu_rq(i)->node_nr_running =
-				&node_nr_running[cpu_to_node(i)];
-	}
-}
-
-#else /* !CONFIG_NUMA */
-
-# define nr_running_init(rq)	do { } while (0)
-# define nr_running_inc(rq)	do { (rq)->nr_running++; } while (0)
-# define nr_running_dec(rq)	do { (rq)->nr_running--; } while (0)
-
-#endif /* CONFIG_NUMA */
-
 /*
  * task_rq_lock - lock the runqueue a given task resides on and disable
  * interrupts.  Note the ordering: we can safely lookup the task_rq without
  * explicitly disabling preemption.
  */
-static inline runqueue_t *task_rq_lock(task_t *p, unsigned long *flags)
+static runqueue_t *task_rq_lock(task_t *p, unsigned long *flags)
 {
 	struct runqueue *rq;
 
@@ -314,7 +280,7 @@
 /*
  * rq_lock - lock a given runqueue and disable interrupts.
  */
-static inline runqueue_t *this_rq_lock(void)
+static runqueue_t *this_rq_lock(void)
 {
 	runqueue_t *rq;
 
@@ -333,7 +299,7 @@
 /*
  * Adding/removing a task to/from a priority array:
  */
-static inline void dequeue_task(struct task_struct *p, prio_array_t *array)
+static void dequeue_task(struct task_struct *p, prio_array_t *array)
 {
 	array->nr_active--;
 	list_del(&p->run_list);
@@ -341,7 +307,7 @@
 		__clear_bit(p->prio, array->bitmap);
 }
 
-static inline void enqueue_task(struct task_struct *p, prio_array_t *array)
+static void enqueue_task(struct task_struct *p, prio_array_t *array)
 {
 	list_add_tail(&p->run_list, array->queue + p->prio);
 	__set_bit(p->prio, array->bitmap);
@@ -350,6 +316,19 @@
 }
 
 /*
+ * Used by the migration code - we pull tasks from the head of the
+ * remote queue so we want these tasks to show up at the head of the
+ * local queue:
+ */
+static inline void enqueue_task_head(struct task_struct *p, prio_array_t *array)
+{
+	list_add(&p->run_list, array->queue + p->prio);
+	__set_bit(p->prio, array->bitmap);
+	array->nr_active++;
+	p->array = array;
+}
+
+/*
  * effective_prio - return the priority that is based on the static
  * priority but is modified by bonuses/penalties.
  *
@@ -386,7 +365,16 @@
 static inline void __activate_task(task_t *p, runqueue_t *rq)
 {
 	enqueue_task(p, rq->active);
-	nr_running_inc(rq);
+	rq->nr_running++;
+}
+
+/*
+ * __activate_idle_task - move idle task to the _front_ of runqueue.
+ */
+static inline void __activate_idle_task(task_t *p, runqueue_t *rq)
+{
+	enqueue_task_head(p, rq->active);
+	rq->nr_running++;
 }
 
 static void recalc_task_prio(task_t *p, unsigned long long now)
@@ -469,9 +457,19 @@
  * Update all the scheduling statistics stuff. (sleep average
  * calculation, priority modifiers, etc.)
  */
-static inline void activate_task(task_t *p, runqueue_t *rq)
+static void activate_task(task_t *p, runqueue_t *rq, int local)
 {
-	unsigned long long now = sched_clock();
+	unsigned long long now;
+
+	now = sched_clock();
+#ifdef CONFIG_SMP
+	if (!local) {
+		/* Compensate for drifting sched_clock */
+		runqueue_t *this_rq = this_rq();
+		now = (now - this_rq->timestamp_last_tick)
+			+ rq->timestamp_last_tick;
+	}
+#endif
 
 	recalc_task_prio(p, now);
 
@@ -505,9 +503,9 @@
 /*
  * deactivate_task - remove a task from the runqueue.
  */
-static inline void deactivate_task(struct task_struct *p, runqueue_t *rq)
+static void deactivate_task(struct task_struct *p, runqueue_t *rq)
 {
-	nr_running_dec(rq);
+	rq->nr_running--;
 	if (p->state == TASK_UNINTERRUPTIBLE)
 		rq->nr_uninterruptible++;
 	dequeue_task(p, p->array);
@@ -521,9 +519,9 @@
  * might also involve a cross-CPU call to trigger the scheduler on
  * the target CPU.
  */
-static inline void resched_task(task_t *p)
-{
 #ifdef CONFIG_SMP
+static void resched_task(task_t *p)
+{
 	int need_resched, nrpolling;
 
 	preempt_disable();
@@ -535,10 +533,13 @@
 	if (!need_resched && !nrpolling && (task_cpu(p) != smp_processor_id()))
 		smp_send_reschedule(task_cpu(p));
 	preempt_enable();
+}
 #else
+static inline void resched_task(task_t *p)
+{
 	set_tsk_need_resched(p);
-#endif
 }
+#endif
 
 /**
  * task_curr - is this task currently executing on a CPU?
@@ -550,40 +551,46 @@
 }
 
 #ifdef CONFIG_SMP
+enum request_type {
+	REQ_MOVE_TASK,
+	REQ_SET_DOMAIN,
+};
+
 typedef struct {
 	struct list_head list;
+	enum request_type type;
+
+	/* For REQ_MOVE_TASK */
 	task_t *task;
+	int dest_cpu;
+
+	/* For REQ_SET_DOMAIN */
+	struct sched_domain *sd;
+
 	struct completion done;
 } migration_req_t;
 
 /*
- * The task's runqueue lock must be held, and the new mask must be valid.
+ * The task's runqueue lock must be held.
  * Returns true if you have to wait for migration thread.
  */
-static int __set_cpus_allowed(task_t *p, cpumask_t new_mask,
-				migration_req_t *req)
+static int migrate_task(task_t *p, int dest_cpu, migration_req_t *req)
 {
 	runqueue_t *rq = task_rq(p);
 
-	p->cpus_allowed = new_mask;
-	/*
-	 * Can the task run on the task's current CPU? If not then
-	 * migrate the thread off to a proper CPU.
-	 */
-	if (cpu_isset(task_cpu(p), new_mask))
-		return 0;
-
 	/*
 	 * If the task is not on a runqueue (and not running), then
 	 * it is sufficient to simply update the task's cpu field.
 	 */
 	if (!p->array && !task_running(rq, p)) {
-		set_task_cpu(p, any_online_cpu(p->cpus_allowed));
+		set_task_cpu(p, dest_cpu);
 		return 0;
 	}
 
 	init_completion(&req->done);
+	req->type = REQ_MOVE_TASK;
 	req->task = p;
+	req->dest_cpu = dest_cpu;
 	list_add(&req->list, &rq->migration_queue);
 	return 1;
 }
@@ -638,6 +645,71 @@
 
 EXPORT_SYMBOL_GPL(kick_process);
 
+/*
+ * Return a low guess at the load of a migration-source cpu.
+ *
+ * We want to under-estimate the load of migration sources, to
+ * balance conservatively.
+ */
+static inline unsigned long source_load(int cpu)
+{
+	runqueue_t *rq = cpu_rq(cpu);
+	unsigned long load_now = rq->nr_running * SCHED_LOAD_SCALE;
+
+	return min(rq->cpu_load, load_now);
+}
+
+/*
+ * Return a high guess at the load of a migration-target cpu
+ */
+static inline unsigned long target_load(int cpu)
+{
+	runqueue_t *rq = cpu_rq(cpu);
+	unsigned long load_now = rq->nr_running * SCHED_LOAD_SCALE;
+
+	return max(rq->cpu_load, load_now);
+}
+
+#endif
+
+/*
+ * wake_idle() is useful especially on SMT architectures to wake a
+ * task onto an idle sibling if we would otherwise wake it onto a
+ * busy sibling.
+ *
+ * Returns the CPU we should wake onto.
+ */
+#if defined(ARCH_HAS_SCHED_WAKE_IDLE)
+static int wake_idle(int cpu, task_t *p)
+{
+	cpumask_t tmp;
+	runqueue_t *rq = cpu_rq(cpu);
+	struct sched_domain *sd;
+	int i;
+
+	if (idle_cpu(cpu))
+		return cpu;
+
+	sd = rq->sd;
+	if (!(sd->flags & SD_WAKE_IDLE))
+		return cpu;
+
+	cpus_and(tmp, sd->span, cpu_online_map);
+	for_each_cpu_mask(i, tmp) {
+		if (!cpu_isset(i, p->cpus_allowed))
+			continue;
+
+		if (idle_cpu(i))
+			return i;
+	}
+
+	return cpu;
+}
+#else
+static inline int wake_idle(int cpu, task_t *p)
+{
+	return cpu;
+}
 #endif
 
 /***
@@ -656,52 +728,122 @@
  */
 static int try_to_wake_up(task_t * p, unsigned int state, int sync)
 {
+	int cpu, this_cpu, success = 0;
 	unsigned long flags;
-	int success = 0;
 	long old_state;
 	runqueue_t *rq;
+#ifdef CONFIG_SMP
+	unsigned long load, this_load;
+	struct sched_domain *sd;
+	int new_cpu;
+#endif
 
-repeat_lock_task:
 	rq = task_rq_lock(p, &flags);
 	old_state = p->state;
-	if (old_state & state) {
-		if (!p->array) {
+	if (!(old_state & state))
+		goto out;
+
+	if (p->array)
+		goto out_running;
+
+	cpu = task_cpu(p);
+	this_cpu = smp_processor_id();
+
+#ifdef CONFIG_SMP
+	if (unlikely(task_running(rq, p)))
+		goto out_activate;
+
+	new_cpu = cpu;
+
+	if (cpu == this_cpu || unlikely(!cpu_isset(this_cpu, p->cpus_allowed)))
+		goto out_set_cpu;
+
+	load = source_load(cpu);
+	this_load = target_load(this_cpu);
+
+	/* Don't pull the task off an idle CPU to a busy one */
+	if (load < SCHED_LOAD_SCALE/2 && this_load > SCHED_LOAD_SCALE/2)
+		goto out_set_cpu;
+
+	new_cpu = this_cpu; /* Wake to this CPU if we can */
+
+	/*
+	 * Scan domains for affine wakeup and passive balancing
+	 * possibilities.
+	 */
+	for_each_domain(this_cpu, sd) {
+		unsigned int imbalance;
+		/*
+		 * Start passive balancing when half the imbalance_pct
+		 * limit is reached.
+		 */
+		imbalance = sd->imbalance_pct + (sd->imbalance_pct - 100) / 2;
+
+		if ( ((sd->flags & SD_WAKE_AFFINE) &&
+				!task_hot(p, rq->timestamp_last_tick, sd))
+			|| ((sd->flags & SD_WAKE_BALANCE) &&
+				imbalance*this_load <= 100*load) ) {
 			/*
-			 * Fast-migrate the task if it's not running or runnable
-			 * currently. Do not violate hard affinity.
+			 * Now sd has SD_WAKE_AFFINE and p is cache cold in sd
+			 * or sd has SD_WAKE_BALANCE and there is an imbalance
 			 */
-			if (unlikely(sync && !task_running(rq, p) &&
-				(task_cpu(p) != smp_processor_id()) &&
-					cpu_isset(smp_processor_id(),
-							p->cpus_allowed) &&
-					!cpu_is_offline(smp_processor_id()))) {
-				set_task_cpu(p, smp_processor_id());
-				task_rq_unlock(rq, &flags);
-				goto repeat_lock_task;
-			}
-			if (old_state == TASK_UNINTERRUPTIBLE) {
-				rq->nr_uninterruptible--;
-				/*
-				 * Tasks on involuntary sleep don't earn
-				 * sleep_avg beyond just interactive state.
-				 */
-				p->activated = -1;
-			}
-			if (sync && (task_cpu(p) == smp_processor_id()))
-				__activate_task(p, rq);
-			else {
-				activate_task(p, rq);
-				if (TASK_PREEMPTS_CURR(p, rq))
-					resched_task(rq->curr);
-			}
-			success = 1;
+			if (cpu_isset(cpu, sd->span))
+				goto out_set_cpu;
 		}
-		p->state = TASK_RUNNING;
 	}
+
+	new_cpu = cpu; /* Could not wake to this_cpu. Wake to cpu instead */
+out_set_cpu:
+	new_cpu = wake_idle(new_cpu, p);
+	if (new_cpu != cpu && cpu_isset(new_cpu, p->cpus_allowed)) {
+		set_task_cpu(p, new_cpu);
+		task_rq_unlock(rq, &flags);
+		/* might preempt at this point */
+		rq = task_rq_lock(p, &flags);
+		old_state = p->state;
+		if (!(old_state & state))
+			goto out;
+		if (p->array)
+			goto out_running;
+
+		this_cpu = smp_processor_id();
+		cpu = task_cpu(p);
+	}
+
+out_activate:
+#endif /* CONFIG_SMP */
+	if (old_state == TASK_UNINTERRUPTIBLE) {
+		rq->nr_uninterruptible--;
+		/*
+		 * Tasks on involuntary sleep don't earn
+		 * sleep_avg beyond just interactive state.
+		 */
+		p->activated = -1;
+	}
+
+	/*
+	 * Sync wakeups (i.e. those types of wakeups where the waker
+	 * has indicated that it will leave the CPU in short order)
+	 * don't trigger a preemption, if the woken up task will run on
+	 * this cpu. (in this case the 'I will reschedule' promise of
+	 * the waker guarantees that the freshly woken up task is going
+	 * to be considered on this CPU.)
+	 */
+	activate_task(p, rq, cpu == this_cpu);
+	if (!sync || cpu != this_cpu) {
+		if (TASK_PREEMPTS_CURR(p, rq))
+			resched_task(rq->curr);
+	}
+	success = 1;
+
+out_running:
+	p->state = TASK_RUNNING;
+out:
 	task_rq_unlock(rq, &flags);
 
 	return success;
 }
+
 int fastcall wake_up_process(task_t * p)
 {
 	return try_to_wake_up(p, TASK_STOPPED |
@@ -756,8 +898,8 @@
 	p->timestamp = sched_clock();
 	if (!current->time_slice) {
 		/*
-	 	 * This case is rare, it happens when the parent has only
-	 	 * a single jiffy left from its timeslice. Taking the
+		 * This case is rare, it happens when the parent has only
+		 * a single jiffy left from its timeslice. Taking the
 		 * runqueue lock is not a problem.
 		 */
 		current->time_slice = 1;
@@ -805,7 +947,7 @@
 		list_add_tail(&p->run_list, &current->run_list);
 		p->array = current->array;
 		p->array->nr_active++;
-		nr_running_inc(rq);
+		rq->nr_running++;
 	}
 	task_rq_unlock(rq, &flags);
 }
@@ -856,7 +998,7 @@
  * with the lock held can cause deadlocks; see schedule() for
  * details.)
  */
-static inline void finish_task_switch(task_t *prev)
+static void finish_task_switch(task_t *prev)
 {
 	runqueue_t *rq = this_rq();
 	struct mm_struct *mm = rq->prev_mm;
@@ -873,7 +1015,7 @@
 	 * still held, otherwise prev could be scheduled on another cpu, die
 	 * there before we look at prev->state, and then the reference would
 	 * be dropped twice.
-	 * 		Manfred Spraul <manfred@colorfullife.com>
+	 *		Manfred Spraul <manfred@colorfullife.com>
 	 */
 	prev_task_flags = prev->flags;
 	finish_arch_switch(rq, prev);
@@ -935,7 +1077,7 @@
 {
 	unsigned long i, sum = 0;
 
-	for (i = 0; i < NR_CPUS; i++)
+	for_each_cpu(i)
 		sum += cpu_rq(i)->nr_running;
 
 	return sum;
@@ -945,7 +1087,7 @@
 {
 	unsigned long i, sum = 0;
 
-	for_each_cpu(i)
+	for_each_online_cpu(i)
 		sum += cpu_rq(i)->nr_uninterruptible;
 
 	return sum;
@@ -955,7 +1097,7 @@
 {
 	unsigned long long i, sum = 0;
 
-	for_each_cpu(i)
+	for_each_online_cpu(i)
 		sum += cpu_rq(i)->nr_switches;
 
 	return sum;
@@ -965,7 +1107,7 @@
 {
 	unsigned long i, sum = 0;
 
-	for_each_cpu(i)
+	for_each_online_cpu(i)
 		sum += atomic_read(&cpu_rq(i)->nr_iowait);
 
 	return sum;
@@ -977,7 +1119,7 @@
  * Note this does not disable interrupts like task_rq_lock,
  * you need to do so manually before calling.
  */
-static inline void double_rq_lock(runqueue_t *rq1, runqueue_t *rq2)
+static void double_rq_lock(runqueue_t *rq1, runqueue_t *rq2)
 {
 	if (rq1 == rq2)
 		spin_lock(&rq1->lock);
@@ -998,14 +1140,151 @@
  * Note this does not restore interrupts like task_rq_unlock,
  * you need to do so manually after calling.
  */
-static inline void double_rq_unlock(runqueue_t *rq1, runqueue_t *rq2)
+static void double_rq_unlock(runqueue_t *rq1, runqueue_t *rq2)
 {
 	spin_unlock(&rq1->lock);
 	if (rq1 != rq2)
 		spin_unlock(&rq2->lock);
 }
 
-#ifdef CONFIG_NUMA
+enum idle_type
+{
+	IDLE,
+	NOT_IDLE,
+	NEWLY_IDLE,
+};
+
+#ifdef CONFIG_SMP
+
+/*
+ * find_idlest_cpu - find the least busy runqueue.
+ */
+static int find_idlest_cpu(struct task_struct *p, int this_cpu,
+			   struct sched_domain *sd)
+{
+	unsigned long load, min_load, this_load;
+	int i, min_cpu;
+	cpumask_t mask;
+
+	min_cpu = UINT_MAX;
+	min_load = ULONG_MAX;
+
+	cpus_and(mask, sd->span, cpu_online_map);
+	cpus_and(mask, mask, p->cpus_allowed);
+
+	for_each_cpu_mask(i, mask) {
+		load = target_load(i);
+
+		if (load < min_load) {
+			min_cpu = i;
+			min_load = load;
+
+			/* break out early on an idle CPU: */
+			if (!min_load)
+				break;
+		}
+	}
+
+	/* add +1 to account for the new task */
+	this_load = source_load(this_cpu) + SCHED_LOAD_SCALE;
+
+	/*
+	 * Would with the addition of the new task to the
+	 * current CPU there be an imbalance between this
+	 * CPU and the idlest CPU?
+	 *
+	 * Use half of the balancing threshold - new-context is
+	 * a good opportunity to balance.
+	 */
+	if (min_load*(100 + (sd->imbalance_pct-100)/2) < this_load*100)
+		return min_cpu;
+
+	return this_cpu;
+}
+
+/*
+ * wake_up_forked_thread - wake up a freshly forked thread.
+ *
+ * This function will do some initial scheduler statistics housekeeping
+ * that must be done for every newly created context, and it also does
+ * runqueue balancing.
+ */
+void fastcall wake_up_forked_thread(task_t * p)
+{
+	unsigned long flags;
+	int this_cpu = get_cpu(), cpu;
+	struct sched_domain *tmp, *sd = NULL;
+	runqueue_t *this_rq = cpu_rq(this_cpu), *rq;
+
+	/*
+	 * Find the largest domain that this CPU is part of that
+	 * is willing to balance on clone:
+	 */
+	for_each_domain(this_cpu, tmp)
+		if (tmp->flags & SD_BALANCE_CLONE)
+			sd = tmp;
+	if (sd)
+		cpu = find_idlest_cpu(p, this_cpu, sd);
+	else
+		cpu = this_cpu;
+
+	local_irq_save(flags);
+lock_again:
+	rq = cpu_rq(cpu);
+	double_rq_lock(this_rq, rq);
+
+	BUG_ON(p->state != TASK_RUNNING);
+
+	/*
+	 * We did find_idlest_cpu() unlocked, so in theory
+	 * the mask could have changed - just dont migrate
+	 * in this case:
+	 */
+	if (unlikely(!cpu_isset(cpu, p->cpus_allowed))) {
+		cpu = this_cpu;
+		double_rq_unlock(this_rq, rq);
+		goto lock_again;
+	}
+	/*
+	 * We decrease the sleep average of forking parents
+	 * and children as well, to keep max-interactive tasks
+	 * from forking tasks that are max-interactive.
+	 */
+	current->sleep_avg = JIFFIES_TO_NS(CURRENT_BONUS(current) *
+		PARENT_PENALTY / 100 * MAX_SLEEP_AVG / MAX_BONUS);
+
+	p->sleep_avg = JIFFIES_TO_NS(CURRENT_BONUS(p) *
+		CHILD_PENALTY / 100 * MAX_SLEEP_AVG / MAX_BONUS);
+
+	p->interactive_credit = 0;
+
+	p->prio = effective_prio(p);
+	set_task_cpu(p, cpu);
+
+	if (cpu == this_cpu) {
+		if (unlikely(!current->array))
+			__activate_task(p, rq);
+		else {
+			p->prio = current->prio;
+			list_add_tail(&p->run_list, &current->run_list);
+			p->array = current->array;
+			p->array->nr_active++;
+			rq->nr_running++;
+		}
+	} else {
+		/* Not the local CPU - must adjust timestamp */
+		p->timestamp = (p->timestamp - this_rq->timestamp_last_tick)
+					+ rq->timestamp_last_tick;
+		__activate_task(p, rq);
+		if (TASK_PREEMPTS_CURR(p, rq))
+			resched_task(rq->curr);
+	}
+
+	double_rq_unlock(this_rq, rq);
+	local_irq_restore(flags);
+	put_cpu();
+}
+
 /*
  * If dest_cpu is allowed for this process, migrate the task to it.
  * This is accomplished by forcing the cpu_allowed mask to only
@@ -1014,236 +1293,75 @@
  */
 static void sched_migrate_task(task_t *p, int dest_cpu)
 {
-	runqueue_t *rq;
 	migration_req_t req;
+	runqueue_t *rq;
 	unsigned long flags;
-	cpumask_t old_mask, new_mask = cpumask_of_cpu(dest_cpu);
 
-	lock_cpu_hotplug();
 	rq = task_rq_lock(p, &flags);
-	old_mask = p->cpus_allowed;
-	if (!cpu_isset(dest_cpu, old_mask) || !cpu_online(dest_cpu))
+	if (!cpu_isset(dest_cpu, p->cpus_allowed)
+	    || unlikely(cpu_is_offline(dest_cpu)))
 		goto out;
 
 	/* force the process onto the specified CPU */
-	if (__set_cpus_allowed(p, new_mask, &req)) {
-		/* Need to wait for migration thread. */
+	if (migrate_task(p, dest_cpu, &req)) {
+		/* Need to wait for migration thread (might exit: take ref). */
+		struct task_struct *mt = rq->migration_thread;
+		get_task_struct(mt);
 		task_rq_unlock(rq, &flags);
-		wake_up_process(rq->migration_thread);
+		wake_up_process(mt);
+		put_task_struct(mt);
 		wait_for_completion(&req.done);
-
-		/* If we raced with sys_sched_setaffinity, don't
-		 * restore mask. */
-		rq = task_rq_lock(p, &flags);
-		if (likely(cpus_equal(p->cpus_allowed, new_mask))) {
-			/* Restore old mask: won't need migration
-			 * thread, since current cpu is allowed. */
-			BUG_ON(__set_cpus_allowed(p, old_mask, NULL));
-		}
+		return;
 	}
 out:
 	task_rq_unlock(rq, &flags);
-	unlock_cpu_hotplug();
 }
 
 /*
- * Find the least loaded CPU.  Slightly favor the current CPU by
- * setting its runqueue length as the minimum to start.
+ * sched_balance_exec(): find the highest-level, exec-balance-capable
+ * domain and try to migrate the task to the least loaded CPU.
+ *
+ * execve() is a valuable balancing opportunity, because at this point
+ * the task has the smallest effective memory and cache footprint.
  */
-static int sched_best_cpu(struct task_struct *p)
-{
-	int i, minload, load, best_cpu, node = 0;
-	cpumask_t cpumask;
-
-	best_cpu = task_cpu(p);
-	if (cpu_rq(best_cpu)->nr_running <= 2)
-		return best_cpu;
-
-	minload = 10000000;
-	for_each_node_with_cpus(i) {
-		/*
-		 * Node load is always divided by nr_cpus_node to normalise
-		 * load values in case cpu count differs from node to node.
-		 * We first multiply node_nr_running by 10 to get a little
-		 * better resolution.
-		 */
-		load = 10 * atomic_read(&node_nr_running[i]) / nr_cpus_node(i);
-		if (load < minload) {
-			minload = load;
-			node = i;
-		}
-	}
-
-	minload = 10000000;
-	cpumask = node_to_cpumask(node);
-	for (i = 0; i < NR_CPUS; ++i) {
-		if (!cpu_isset(i, cpumask))
-			continue;
-		if (cpu_rq(i)->nr_running < minload) {
-			best_cpu = i;
-			minload = cpu_rq(i)->nr_running;
-		}
-	}
-	return best_cpu;
-}
-
 void sched_balance_exec(void)
 {
-	int new_cpu;
+	struct sched_domain *tmp, *sd = NULL;
+	int new_cpu, this_cpu = get_cpu();
 
-	if (numnodes > 1) {
-		new_cpu = sched_best_cpu(current);
-		if (new_cpu != smp_processor_id())
-			sched_migrate_task(current, new_cpu);
-	}
-}
+	/* Prefer the current CPU if there's only this task running */
+	if (this_rq()->nr_running <= 1)
+		goto out;
 
-/*
- * Find the busiest node. All previous node loads contribute with a
- * geometrically deccaying weight to the load measure:
- *      load_{t} = load_{t-1}/2 + nr_node_running_{t}
- * This way sudden load peaks are flattened out a bit.
- * Node load is divided by nr_cpus_node() in order to compare nodes
- * of different cpu count but also [first] multiplied by 10 to
- * provide better resolution.
- */
-static int find_busiest_node(int this_node)
-{
-	int i, node = -1, load, this_load, maxload;
-
-	if (!nr_cpus_node(this_node))
-		return node;
-	this_load = maxload = (this_rq()->prev_node_load[this_node] >> 1)
-		+ (10 * atomic_read(&node_nr_running[this_node])
-		/ nr_cpus_node(this_node));
-	this_rq()->prev_node_load[this_node] = this_load;
-	for_each_node_with_cpus(i) {
-		if (i == this_node)
-			continue;
-		load = (this_rq()->prev_node_load[i] >> 1)
-			+ (10 * atomic_read(&node_nr_running[i])
-			/ nr_cpus_node(i));
-		this_rq()->prev_node_load[i] = load;
-		if (load > maxload && (100*load > NODE_THRESHOLD*this_load)) {
-			maxload = load;
-			node = i;
+	for_each_domain(this_cpu, tmp)
+		if (tmp->flags & SD_BALANCE_EXEC)
+			sd = tmp;
+
+	if (sd) {
+		new_cpu = find_idlest_cpu(current, this_cpu, sd);
+		if (new_cpu != this_cpu) {
+			put_cpu();
+			sched_migrate_task(current, new_cpu);
+			return;
 		}
 	}
-	return node;
+out:
+	put_cpu();
 }
 
-#endif /* CONFIG_NUMA */
-
-#ifdef CONFIG_SMP
-
 /*
- * double_lock_balance - lock the busiest runqueue
- *
- * this_rq is locked already. Recalculate nr_running if we have to
- * drop the runqueue lock.
+ * double_lock_balance - lock the busiest runqueue, this_rq is locked already.
  */
-static inline
-unsigned int double_lock_balance(runqueue_t *this_rq, runqueue_t *busiest,
-				 int this_cpu, int idle,
-				 unsigned int nr_running)
+static void double_lock_balance(runqueue_t *this_rq, runqueue_t *busiest)
 {
 	if (unlikely(!spin_trylock(&busiest->lock))) {
 		if (busiest < this_rq) {
 			spin_unlock(&this_rq->lock);
 			spin_lock(&busiest->lock);
 			spin_lock(&this_rq->lock);
-			/* Need to recalculate nr_running */
-			if (idle || (this_rq->nr_running >
-					this_rq->prev_cpu_load[this_cpu]))
-				nr_running = this_rq->nr_running;
-			else
-				nr_running = this_rq->prev_cpu_load[this_cpu];
 		} else
 			spin_lock(&busiest->lock);
 	}
-	return nr_running;
-}
-
-/*
- * find_busiest_queue - find the busiest runqueue among the cpus in cpumask.
- */
-static inline
-runqueue_t *find_busiest_queue(runqueue_t *this_rq, int this_cpu, int idle,
-			       int *imbalance, cpumask_t cpumask)
-{
-	int nr_running, load, max_load, i;
-	runqueue_t *busiest, *rq_src;
-
-	/*
-	 * We search all runqueues to find the most busy one.
-	 * We do this lockless to reduce cache-bouncing overhead,
-	 * we re-check the 'best' source CPU later on again, with
-	 * the lock held.
-	 *
-	 * We fend off statistical fluctuations in runqueue lengths by
-	 * saving the runqueue length (as seen by the balancing CPU) during
-	 * the previous load-balancing operation and using the smaller one
-	 * of the current and saved lengths. If a runqueue is long enough
-	 * for a longer amount of time then we recognize it and pull tasks
-	 * from it.
-	 *
-	 * The 'current runqueue length' is a statistical maximum variable,
-	 * for that one we take the longer one - to avoid fluctuations in
-	 * the other direction. So for a load-balance to happen it needs
-	 * stable long runqueue on the target CPU and stable short runqueue
-	 * on the local runqueue.
-	 *
-	 * We make an exception if this CPU is about to become idle - in
-	 * that case we are less picky about moving a task across CPUs and
-	 * take what can be taken.
-	 */
-	if (idle || (this_rq->nr_running > this_rq->prev_cpu_load[this_cpu]))
-		nr_running = this_rq->nr_running;
-	else
-		nr_running = this_rq->prev_cpu_load[this_cpu];
-
-	busiest = NULL;
-	max_load = 1;
-	for (i = 0; i < NR_CPUS; i++) {
-		if (!cpu_isset(i, cpumask))
-			continue;
-
-		rq_src = cpu_rq(i);
-		if (idle || (rq_src->nr_running < this_rq->prev_cpu_load[i]))
-			load = rq_src->nr_running;
-		else
-			load = this_rq->prev_cpu_load[i];
-		this_rq->prev_cpu_load[i] = rq_src->nr_running;
-
-		if ((load > max_load) && (rq_src != this_rq)) {
-			busiest = rq_src;
-			max_load = load;
-		}
-	}
-
-	if (likely(!busiest))
-		goto out;
-
-	*imbalance = max_load - nr_running;
-
-	/* It needs an at least ~25% imbalance to trigger balancing. */
-	if (!idle && ((*imbalance)*4 < max_load)) {
-		busiest = NULL;
-		goto out;
-	}
-
-	nr_running = double_lock_balance(this_rq, busiest, this_cpu,
-					 idle, nr_running);
-	/*
-	 * Make sure nothing changed since we checked the
-	 * runqueue length.
-	 */
-	if (busiest->nr_running <= nr_running) {
-		spin_unlock(&busiest->lock);
-		busiest = NULL;
-	}
-out:
-	return busiest;
 }
 
 /*
@@ -1252,86 +1370,83 @@
  */
 static inline
 void pull_task(runqueue_t *src_rq, prio_array_t *src_array, task_t *p,
-	       runqueue_t *this_rq, int this_cpu)
+	       runqueue_t *this_rq, prio_array_t *this_array, int this_cpu)
 {
 	dequeue_task(p, src_array);
-	nr_running_dec(src_rq);
+	src_rq->nr_running--;
 	set_task_cpu(p, this_cpu);
-	nr_running_inc(this_rq);
-	enqueue_task(p, this_rq->active);
-	p->timestamp = sched_clock() -
-				(src_rq->timestamp_last_tick - p->timestamp);
+	this_rq->nr_running++;
+	enqueue_task(p, this_array);
+	p->timestamp = (p->timestamp - src_rq->timestamp_last_tick)
+				+ this_rq->timestamp_last_tick;
 	/*
 	 * Note that idle threads have a prio of MAX_PRIO, for this test
 	 * to be always true for them.
 	 */
 	if (TASK_PREEMPTS_CURR(p, this_rq))
-		set_need_resched();
+		resched_task(this_rq->curr);
 }
 
 /*
  * can_migrate_task - may task p from runqueue rq be migrated to this_cpu?
  */
 static inline
-int can_migrate_task(task_t *tsk, runqueue_t *rq, int this_cpu, int idle)
+int can_migrate_task(task_t *p, runqueue_t *rq, int this_cpu,
+		     struct sched_domain *sd, enum idle_type idle)
 {
-	unsigned long delta = rq->timestamp_last_tick - tsk->timestamp;
-
 	/*
 	 * We do not migrate tasks that are:
 	 * 1) running (obviously), or
 	 * 2) cannot be migrated to this CPU due to cpus_allowed, or
 	 * 3) are cache-hot on their current CPU.
 	 */
-	if (task_running(rq, tsk))
+	if (task_running(rq, p))
 		return 0;
-	if (!cpu_isset(this_cpu, tsk->cpus_allowed))
-		return 0;
-	if (!idle && (delta <= JIFFIES_TO_NS(cache_decay_ticks)))
+	if (!cpu_isset(this_cpu, p->cpus_allowed))
 		return 0;
+
+	/* Aggressive migration if we've failed balancing */
+	if (idle == NEWLY_IDLE ||
+			sd->nr_balance_failed < sd->cache_nice_tries) {
+		if (task_hot(p, rq->timestamp_last_tick, sd))
+			return 0;
+	}
+
 	return 1;
 }
 
 /*
- * Current runqueue is empty, or rebalance tick: if there is an
- * inbalance (current runqueue is too short) then pull from
- * busiest runqueue(s).
+ * move_tasks tries to move up to max_nr_move tasks from busiest to this_rq,
+ * as part of a balancing operation within "domain". Returns the number of
+ * tasks moved.
  *
- * We call this with the current runqueue locked,
- * irqs disabled.
+ * Called with both runqueues locked.
  */
-static void load_balance(runqueue_t *this_rq, int idle, cpumask_t cpumask)
+static int move_tasks(runqueue_t *this_rq, int this_cpu, runqueue_t *busiest,
+		      unsigned long max_nr_move, struct sched_domain *sd,
+		      enum idle_type idle)
 {
-	int imbalance, idx, this_cpu = smp_processor_id();
-	runqueue_t *busiest;
-	prio_array_t *array;
+	prio_array_t *array, *dst_array;
 	struct list_head *head, *curr;
+	int idx, pulled = 0;
 	task_t *tmp;
 
-	if (cpu_is_offline(this_cpu))
+	if (max_nr_move <= 0 || busiest->nr_running <= 1)
 		goto out;
 
-	busiest = find_busiest_queue(this_rq, this_cpu, idle,
-				     &imbalance, cpumask);
-	if (!busiest)
-		goto out;
-
-	/*
-	 * We only want to steal a number of tasks equal to 1/2 the imbalance,
-	 * otherwise we'll just shift the imbalance to the new queue:
-	 */
-	imbalance /= 2;
-
 	/*
 	 * We first consider expired tasks. Those will likely not be
 	 * executed in the near future, and they are most likely to
 	 * be cache-cold, thus switching CPUs has the least effect
 	 * on them.
 	 */
-	if (busiest->expired->nr_active)
+	if (busiest->expired->nr_active) {
 		array = busiest->expired;
-	else
+		dst_array = this_rq->expired;
+	} else {
 		array = busiest->active;
+		dst_array = this_rq->active;
+	}
 
 new_array:
 	/* Start searching at priority 0: */
@@ -1342,11 +1457,12 @@
 	else
 		idx = find_next_bit(array->bitmap, MAX_PRIO, idx);
 	if (idx >= MAX_PRIO) {
-		if (array == busiest->expired) {
+		if (array == busiest->expired && busiest->active->nr_active) {
 			array = busiest->active;
+			dst_array = this_rq->active;
 			goto new_array;
 		}
-		goto out_unlock;
+		goto out;
 	}
 
 	head = array->queue + idx;
@@ -1356,104 +1472,463 @@
 
 	curr = curr->prev;
 
-	if (!can_migrate_task(tmp, busiest, this_cpu, idle)) {
+	if (!can_migrate_task(tmp, busiest, this_cpu, sd, idle)) {
 		if (curr != head)
 			goto skip_queue;
 		idx++;
 		goto skip_bitmap;
 	}
-	pull_task(busiest, array, tmp, this_rq, this_cpu);
+	pull_task(busiest, array, tmp, this_rq, dst_array, this_cpu);
+	pulled++;
 
-	/* Only migrate one task if we are idle */
-	if (!idle && --imbalance) {
+	/* We only want to steal up to the prescribed number of tasks. */
+	if (pulled < max_nr_move) {
 		if (curr != head)
 			goto skip_queue;
 		idx++;
 		goto skip_bitmap;
 	}
-out_unlock:
-	spin_unlock(&busiest->lock);
 out:
-	;
+	return pulled;
 }
 
 /*
- * One of the idle_cpu_tick() and busy_cpu_tick() functions will
- * get called every timer tick, on every CPU. Our balancing action
- * frequency and balancing agressivity depends on whether the CPU is
- * idle or not.
+ * find_busiest_group finds and returns the busiest CPU group within the
+ * domain. It calculates and returns the number of tasks which should be
+ * moved to restore balance via the imbalance parameter.
+ */
+static struct sched_group *
+find_busiest_group(struct sched_domain *sd, int this_cpu,
+		   unsigned long *imbalance, enum idle_type idle)
+{
+	struct sched_group *busiest = NULL, *this = NULL, *group = sd->groups;
+	unsigned long max_load, avg_load, total_load, this_load, total_pwr;
+
+	max_load = this_load = total_load = total_pwr = 0;
+
+	do {
+		cpumask_t tmp;
+		unsigned long load;
+		int local_group;
+		int i, nr_cpus = 0;
+
+		local_group = cpu_isset(this_cpu, group->cpumask);
+
+		/* Tally up the load of all CPUs in the group */
+		avg_load = 0;
+		cpus_and(tmp, group->cpumask, cpu_online_map);
+		if (unlikely(cpus_empty(tmp)))
+			goto nextgroup;
+
+		for_each_cpu_mask(i, tmp) {
+			/* Bias balancing toward cpus of our domain */
+			if (local_group)
+				load = target_load(i);
+			else
+				load = source_load(i);
+
+			nr_cpus++;
+			avg_load += load;
+		}
+
+		if (!nr_cpus)
+			goto nextgroup;
+
+		total_load += avg_load;
+		total_pwr += group->cpu_power;
+
+		/* Adjust by relative CPU power of the group */
+		avg_load = (avg_load * SCHED_LOAD_SCALE) / group->cpu_power;
+
+		if (local_group) {
+			this_load = avg_load;
+			this = group;
+			goto nextgroup;
+		} else if (avg_load > max_load) {
+			max_load = avg_load;
+			busiest = group;
+		}
+nextgroup:
+		group = group->next;
+	} while (group != sd->groups);
+
+	if (!busiest || this_load >= max_load)
+		goto out_balanced;
+
+	avg_load = (SCHED_LOAD_SCALE * total_load) / total_pwr;
+
+	if (this_load >= avg_load ||
+			100*max_load <= sd->imbalance_pct*this_load)
+		goto out_balanced;
+
+	/*
+	 * We're trying to get all the cpus to the average_load, so we don't
+	 * want to push ourselves above the average load, nor do we wish to
+	 * reduce the max loaded cpu below the average load, as either of these
+	 * actions would just result in more rebalancing later, and ping-pong
+	 * tasks around. Thus we look for the minimum possible imbalance.
+	 * Negative imbalances (*we* are more loaded than anyone else) will
+	 * be counted as no imbalance for these purposes -- we can't fix that
+	 * by pulling tasks to us.  Be careful of negative numbers as they'll
+	 * appear as very large values with unsigned longs.
+	 */
+	*imbalance = min(max_load - avg_load, avg_load - this_load);
+
+	/* How much load to actually move to equalise the imbalance */
+	*imbalance = (*imbalance * min(busiest->cpu_power, this->cpu_power))
+				/ SCHED_LOAD_SCALE;
+
+	if (*imbalance < SCHED_LOAD_SCALE - 1) {
+		unsigned long pwr_now = 0, pwr_move = 0;
+		unsigned long tmp;
+
+		if (max_load - this_load >= SCHED_LOAD_SCALE*2) {
+			*imbalance = 1;
+			return busiest;
+		}
+
+		/*
+		 * OK, we don't have enough imbalance to justify moving tasks,
+		 * however we may be able to increase total CPU power used by
+		 * moving them.
+		 */
+
+		pwr_now += busiest->cpu_power*min(SCHED_LOAD_SCALE, max_load);
+		pwr_now += this->cpu_power*min(SCHED_LOAD_SCALE, this_load);
+		pwr_now /= SCHED_LOAD_SCALE;
+
+		/* Amount of load we'd subtract */
+		tmp = SCHED_LOAD_SCALE*SCHED_LOAD_SCALE/busiest->cpu_power;
+		if (max_load > tmp)
+			pwr_move += busiest->cpu_power*min(SCHED_LOAD_SCALE,
+							max_load - tmp);
+
+		/* Amount of load we'd add */
+		tmp = SCHED_LOAD_SCALE*SCHED_LOAD_SCALE/this->cpu_power;
+		if (max_load < tmp)
+			tmp = max_load;
+		pwr_move += this->cpu_power*min(SCHED_LOAD_SCALE, this_load + tmp);
+		pwr_move /= SCHED_LOAD_SCALE;
+
+		/* Move if we gain another 8th of a CPU worth of throughput */
+		if (pwr_move < pwr_now + SCHED_LOAD_SCALE / 8)
+			goto out_balanced;
+
+		*imbalance = 1;
+		return busiest;
+	}
+
+	/* Get rid of the scaling factor, rounding down as we divide */
+	*imbalance = (*imbalance + 1) / SCHED_LOAD_SCALE;
+
+	return busiest;
+
+out_balanced:
+	if (busiest && (idle == NEWLY_IDLE ||
+			(idle == IDLE && max_load > SCHED_LOAD_SCALE)) ) {
+		*imbalance = 1;
+		return busiest;
+	}
+
+	*imbalance = 0;
+	return NULL;
+}
+
+/*
+ * find_busiest_queue - find the busiest runqueue among the cpus in group.
+ */
+static runqueue_t *find_busiest_queue(struct sched_group *group)
+{
+	cpumask_t tmp;
+	unsigned long load, max_load = 0;
+	runqueue_t *busiest = NULL;
+	int i;
+
+	cpus_and(tmp, group->cpumask, cpu_online_map);
+	for_each_cpu_mask(i, tmp) {
+		load = source_load(i);
+
+		if (load > max_load) {
+			max_load = load;
+			busiest = cpu_rq(i);
+		}
+	}
+
+	return busiest;
+}
+
+/*
+ * Check this_cpu to ensure it is balanced within domain. Attempt to move
+ * tasks if there is an imbalance.
  *
- * busy-rebalance every 200 msecs. idle-rebalance every 1 msec. (or on
- * systems with HZ=100, every 10 msecs.)
+ * Called with this_rq unlocked.
+ */
+static int load_balance(int this_cpu, runqueue_t *this_rq,
+			struct sched_domain *sd, enum idle_type idle)
+{
+	struct sched_group *group;
+	runqueue_t *busiest;
+	unsigned long imbalance;
+	int nr_moved;
+
+	spin_lock(&this_rq->lock);
+
+	group = find_busiest_group(sd, this_cpu, &imbalance, idle);
+	if (!group)
+		goto out_balanced;
+
+	busiest = find_busiest_queue(group);
+	if (!busiest)
+		goto out_balanced;
+	if (unlikely(busiest == this_rq)) {
+		WARN_ON(1);
+		goto out_balanced;
+	}
+
+	nr_moved = 0;
+	if (busiest->nr_running > 1) {
+		/*
+		 * Attempt to move tasks. If find_busiest_group has found
+		 * an imbalance but busiest->nr_running <= 1, the group is
+		 * still unbalanced. nr_moved simply stays zero, so it is
+		 * correctly treated as an imbalance.
+		 */
+		double_lock_balance(this_rq, busiest);
+		nr_moved = move_tasks(this_rq, this_cpu, busiest,
+						imbalance, sd, idle);
+		spin_unlock(&busiest->lock);
+	}
+	spin_unlock(&this_rq->lock);
+
+	if (!nr_moved) {
+		sd->nr_balance_failed++;
+
+		if (unlikely(sd->nr_balance_failed > sd->cache_nice_tries+2)) {
+			int wake = 0;
+
+			spin_lock(&busiest->lock);
+			if (!busiest->active_balance) {
+				busiest->active_balance = 1;
+				busiest->push_cpu = this_cpu;
+				wake = 1;
+			}
+			spin_unlock(&busiest->lock);
+			if (wake)
+				wake_up_process(busiest->migration_thread);
+
+			/*
+			 * We've kicked active balancing, reset the failure
+			 * counter.
+			 */
+			sd->nr_balance_failed = sd->cache_nice_tries;
+		}
+	} else
+		sd->nr_balance_failed = 0;
+
+	/* We were unbalanced, so reset the balancing interval */
+	sd->balance_interval = sd->min_interval;
+
+	return nr_moved;
+
+out_balanced:
+	spin_unlock(&this_rq->lock);
+
+	/* tune up the balancing interval */
+	if (sd->balance_interval < sd->max_interval)
+		sd->balance_interval *= 2;
+
+	return 0;
+}
+
+/*
+ * Check this_cpu to ensure it is balanced within domain. Attempt to move
+ * tasks if there is an imbalance.
  *
- * On NUMA, do a node-rebalance every 400 msecs.
+ * Called from schedule when this_rq is about to become idle (NEWLY_IDLE).
+ * this_rq is locked.
  */
-#define IDLE_REBALANCE_TICK (HZ/1000 ?: 1)
-#define BUSY_REBALANCE_TICK (HZ/5 ?: 1)
-#define IDLE_NODE_REBALANCE_TICK (IDLE_REBALANCE_TICK * 5)
-#define BUSY_NODE_REBALANCE_TICK (BUSY_REBALANCE_TICK * 2)
+static int load_balance_newidle(int this_cpu, runqueue_t *this_rq,
+				struct sched_domain *sd)
+{
+	struct sched_group *group;
+	runqueue_t *busiest = NULL;
+	unsigned long imbalance;
+	int nr_moved = 0;
 
-#ifdef CONFIG_NUMA
-static void balance_node(runqueue_t *this_rq, int idle, int this_cpu)
+	group = find_busiest_group(sd, this_cpu, &imbalance, NEWLY_IDLE);
+	if (!group)
+		goto out;
+
+	busiest = find_busiest_queue(group);
+	if (!busiest || busiest == this_rq)
+		goto out;
+
+	/* Attempt to move tasks */
+	double_lock_balance(this_rq, busiest);
+
+	nr_moved = move_tasks(this_rq, this_cpu, busiest,
+					imbalance, sd, NEWLY_IDLE);
+
+	spin_unlock(&busiest->lock);
+
+out:
+	return nr_moved;
+}
+
+/*
+ * idle_balance is called by schedule() if this_cpu is about to become
+ * idle. Attempts to pull tasks from other CPUs.
+ */
+static inline void idle_balance(int this_cpu, runqueue_t *this_rq)
 {
-	int node = find_busiest_node(cpu_to_node(this_cpu));
+	struct sched_domain *sd;
 
-	if (node >= 0) {
-		cpumask_t cpumask = node_to_cpumask(node);
-		cpu_set(this_cpu, cpumask);
-		spin_lock(&this_rq->lock);
-		load_balance(this_rq, idle, cpumask);
-		spin_unlock(&this_rq->lock);
+	for_each_domain(this_cpu, sd) {
+		if (sd->flags & SD_BALANCE_NEWIDLE) {
+			if (load_balance_newidle(this_cpu, this_rq, sd)) {
+				/* We've pulled tasks over so stop searching */
+				break;
+			}
+		}
 	}
 }
-#endif
 
-static void rebalance_tick(runqueue_t *this_rq, int idle)
+/*
+ * active_load_balance is run by migration threads. It pushes a running
+ * task off the cpu. It can be required to correctly have at least 1 task
+ * running on each physical CPU where possible, and not have a physical /
+ * logical imbalance.
+ *
+ * Called with busiest locked.
+ */
+static void active_load_balance(runqueue_t *busiest, int busiest_cpu)
 {
-#ifdef CONFIG_NUMA
-	int this_cpu = smp_processor_id();
-#endif
-	unsigned long j = jiffies;
+	struct sched_domain *sd;
+	struct sched_group *group, *busy_group;
+	int i;
 
+	if (busiest->nr_running <= 1)
+		return;
+
+	for_each_domain(busiest_cpu, sd)
+		if (cpu_isset(busiest->push_cpu, sd->span))
+			break;
+	if (!sd) {
+		WARN_ON(1);
+		return;
+	}
+
+ 	group = sd->groups;
+	while (!cpu_isset(busiest_cpu, group->cpumask))
+ 		group = group->next;
+ 	busy_group = group;
+
+ 	group = sd->groups;
+ 	do {
+		cpumask_t tmp;
+		runqueue_t *rq;
+		int push_cpu = 0;
+
+ 		if (group == busy_group)
+ 			goto next_group;
+
+		cpus_and(tmp, group->cpumask, cpu_online_map);
+		if (!cpus_weight(tmp))
+			goto next_group;
+
+ 		for_each_cpu_mask(i, tmp) {
+			if (!idle_cpu(i))
+				goto next_group;
+ 			push_cpu = i;
+ 		}
+
+		rq = cpu_rq(push_cpu);
+		double_lock_balance(busiest, rq);
+		move_tasks(rq, push_cpu, busiest, 1, sd, IDLE);
+		spin_unlock(&rq->lock);
+next_group:
+		group = group->next;
+	} while (group != sd->groups);
+}
+
+/*
+ * rebalance_tick will get called every timer tick, on every CPU.
+ *
+ * It checks each scheduling domain to see if it is due to be balanced,
+ * and initiates a balancing operation if so.
+ *
+ * Balancing parameters are set up in arch_init_sched_domains.
+ */
+
+/* Don't have all balancing operations going off at once */
+#define CPU_OFFSET(cpu) (HZ * cpu / NR_CPUS)
+
+static void rebalance_tick(int this_cpu, runqueue_t *this_rq,
+			   enum idle_type idle)
+{
+	unsigned long old_load, this_load;
+	unsigned long j = jiffies + CPU_OFFSET(this_cpu);
+	struct sched_domain *sd;
+
+	/* Update our load */
+	old_load = this_rq->cpu_load;
+	this_load = this_rq->nr_running * SCHED_LOAD_SCALE;
 	/*
-	 * First do inter-node rebalancing, then intra-node rebalancing,
-	 * if both events happen in the same tick. The inter-node
-	 * rebalancing does not necessarily have to create a perfect
-	 * balance within the node, since we load-balance the most loaded
-	 * node with the current CPU. (ie. other CPUs in the local node
-	 * are not balanced.)
+	 * Round up the averaging division if load is increasing. This
+	 * prevents us from getting stuck on 9 if the load is 10, for
+	 * example.
 	 */
-	if (idle) {
-#ifdef CONFIG_NUMA
-		if (!(j % IDLE_NODE_REBALANCE_TICK))
-			balance_node(this_rq, idle, this_cpu);
-#endif
-		if (!(j % IDLE_REBALANCE_TICK)) {
-			spin_lock(&this_rq->lock);
-			load_balance(this_rq, idle, cpu_to_node_mask(this_cpu));
-			spin_unlock(&this_rq->lock);
+	if (this_load > old_load)
+		old_load++;
+	this_rq->cpu_load = (old_load + this_load) / 2;
+
+	for_each_domain(this_cpu, sd) {
+		unsigned long interval = sd->balance_interval;
+
+		if (idle != IDLE)
+			interval *= sd->busy_factor;
+
+		/* scale ms to jiffies */
+		interval = msecs_to_jiffies(interval);
+		if (unlikely(!interval))
+			interval = 1;
+
+		if (j - sd->last_balance >= interval) {
+			if (load_balance(this_cpu, this_rq, sd, idle)) {
+				/* We've pulled tasks over so no longer idle */
+				idle = NOT_IDLE;
+			}
+			sd->last_balance += interval;
 		}
-		return;
-	}
-#ifdef CONFIG_NUMA
-	if (!(j % BUSY_NODE_REBALANCE_TICK))
-		balance_node(this_rq, idle, this_cpu);
-#endif
-	if (!(j % BUSY_REBALANCE_TICK)) {
-		spin_lock(&this_rq->lock);
-		load_balance(this_rq, idle, cpu_to_node_mask(this_cpu));
-		spin_unlock(&this_rq->lock);
 	}
 }
 #else
 /*
  * on UP we do not need to balance between CPUs:
  */
-static inline void rebalance_tick(runqueue_t *this_rq, int idle)
+static inline void rebalance_tick(int cpu, runqueue_t *rq, enum idle_type idle)
+{
+}
+static inline void idle_balance(int cpu, runqueue_t *rq)
 {
 }
 #endif
 
+static inline int wake_priority_sleeper(runqueue_t *rq)
+{
+#ifdef CONFIG_SCHED_SMT
+	/*
+	 * If an SMT sibling task has been put to sleep for priority
+	 * reasons reschedule the idle task to see if it can now run.
+	 */
+	if (rq->nr_running) {
+		resched_task(rq->idle);
+		return 1;
+	}
+#endif
+	return 0;
+}
+
 DEFINE_PER_CPU(struct kernel_stat, kstat);
 
 EXPORT_PER_CPU_SYMBOL(kstat);
@@ -1507,7 +1982,9 @@
 			cpustat->iowait += sys_ticks;
 		else
 			cpustat->idle += sys_ticks;
-		rebalance_tick(rq, 1);
+		if (wake_priority_sleeper(rq))
+			goto out;
+		rebalance_tick(cpu, rq, IDLE);
 		return;
 	}
 	if (TASK_NICE(p) > 0)
@@ -1591,9 +2068,94 @@
 out_unlock:
 	spin_unlock(&rq->lock);
 out:
-	rebalance_tick(rq, 0);
+	rebalance_tick(cpu, rq, NOT_IDLE);
 }
 
+#ifdef CONFIG_SCHED_SMT
+static inline void wake_sleeping_dependent(int cpu, runqueue_t *rq)
+{
+	int i;
+	struct sched_domain *sd = rq->sd;
+	cpumask_t sibling_map;
+
+	if (!(sd->flags & SD_SHARE_CPUPOWER))
+		return;
+
+	cpus_and(sibling_map, sd->span, cpu_online_map);
+	for_each_cpu_mask(i, sibling_map) {
+		runqueue_t *smt_rq;
+
+		if (i == cpu)
+			continue;
+
+		smt_rq = cpu_rq(i);
+
+		/*
+		 * If an SMT sibling task is sleeping due to priority
+		 * reasons wake it up now.
+		 */
+		if (smt_rq->curr == smt_rq->idle && smt_rq->nr_running)
+			resched_task(smt_rq->idle);
+	}
+}
+
+static inline int dependent_sleeper(int cpu, runqueue_t *rq, task_t *p)
+{
+	struct sched_domain *sd = rq->sd;
+	cpumask_t sibling_map;
+	int ret = 0, i;
+
+	if (!(sd->flags & SD_SHARE_CPUPOWER))
+		return 0;
+
+	cpus_and(sibling_map, sd->span, cpu_online_map);
+	for_each_cpu_mask(i, sibling_map) {
+		runqueue_t *smt_rq;
+		task_t *smt_curr;
+
+		if (i == cpu)
+			continue;
+
+		smt_rq = cpu_rq(i);
+		smt_curr = smt_rq->curr;
+
+		/*
+		 * If a user task with lower static priority than the
+		 * running task on the SMT sibling is trying to schedule,
+		 * delay it till there is proportionately less timeslice
+		 * left of the sibling task to prevent a lower priority
+		 * task from using an unfair proportion of the
+		 * physical cpu's resources. -ck
+		 */
+		if (((smt_curr->time_slice * (100 - sd->per_cpu_gain) / 100) >
+			task_timeslice(p) || rt_task(smt_curr)) &&
+			p->mm && smt_curr->mm && !rt_task(p))
+				ret = 1;
+
+		/*
+		 * Reschedule a lower priority task on the SMT sibling,
+		 * or wake it up if it has been put to sleep for priority
+		 * reasons.
+		 */
+		if ((((p->time_slice * (100 - sd->per_cpu_gain) / 100) >
+			task_timeslice(smt_curr) || rt_task(p)) &&
+			smt_curr->mm && p->mm && !rt_task(smt_curr)) ||
+			(smt_curr == smt_rq->idle && smt_rq->nr_running))
+				resched_task(smt_curr);
+	}
+	return ret;
+}
+#else
+static inline void wake_sleeping_dependent(int cpu, runqueue_t *rq)
+{
+}
+
+static inline int dependent_sleeper(int cpu, runqueue_t *rq, task_t *p)
+{
+	return 0;
+}
+#endif
+
 /*
  * schedule() is the main scheduler function.
  */
@@ -1606,7 +2168,7 @@
 	struct list_head *queue;
 	unsigned long long now;
 	unsigned long run_time;
-	int idx;
+	int cpu, idx;
 
 	/*
 	 * Test if we are atomic.  Since do_exit() needs to call into
@@ -1656,13 +2218,13 @@
 			deactivate_task(prev, rq);
 	}
 
+	cpu = smp_processor_id();
 	if (unlikely(!rq->nr_running)) {
-#ifdef CONFIG_SMP
-		load_balance(rq, 1, cpu_to_node_mask(smp_processor_id()));
-#endif
+		idle_balance(cpu, rq);
 		if (!rq->nr_running) {
 			next = rq->idle;
 			rq->expired_timestamp = 0;
+			wake_sleeping_dependent(cpu, rq);
 			goto switch_tasks;
 		}
 	}
@@ -1683,6 +2245,11 @@
 	queue = array->queue + idx;
 	next = list_entry(queue->next, task_t, run_list);
 
+	if (dependent_sleeper(cpu, rq, next)) {
+		next = rq->idle;
+		goto switch_tasks;
+	}
+
 	if (!rt_task(next) && next->activated > 0) {
 		unsigned long long delta = now - next->timestamp;
 
@@ -1761,7 +2328,7 @@
 EXPORT_SYMBOL(preempt_schedule);
 #endif /* CONFIG_PREEMPT */
 
-int default_wake_function(wait_queue_t *curr, unsigned mode, int sync)
+int default_wake_function(wait_queue_t *curr, unsigned mode, int sync, void *key)
 {
 	task_t *p = curr->task;
 	return try_to_wake_up(p, mode, sync);
@@ -1779,7 +2346,7 @@
  * zero in this (rare) case, and we handle it by continuing to scan the queue.
  */
 static void __wake_up_common(wait_queue_head_t *q, unsigned int mode,
-			     int nr_exclusive, int sync)
+			     int nr_exclusive, int sync, void *key)
 {
 	struct list_head *tmp, *next;
 
@@ -1788,7 +2355,7 @@
 		unsigned flags;
 		curr = list_entry(tmp, wait_queue_t, task_list);
 		flags = curr->flags;
-		if (curr->func(curr, mode, sync) &&
+		if (curr->func(curr, mode, sync, key) &&
 		    (flags & WQ_FLAG_EXCLUSIVE) &&
 		    !--nr_exclusive)
 			break;
@@ -1801,12 +2368,13 @@
  * @mode: which threads
  * @nr_exclusive: how many wake-one or wake-many threads to wake up
  */
-void fastcall __wake_up(wait_queue_head_t *q, unsigned int mode, int nr_exclusive)
+void fastcall __wake_up(wait_queue_head_t *q, unsigned int mode,
+				int nr_exclusive, void *key)
 {
 	unsigned long flags;
 
 	spin_lock_irqsave(&q->lock, flags);
-	__wake_up_common(q, mode, nr_exclusive, 0);
+	__wake_up_common(q, mode, nr_exclusive, 0, key);
 	spin_unlock_irqrestore(&q->lock, flags);
 }
 
@@ -1817,7 +2385,7 @@
  */
 void fastcall __wake_up_locked(wait_queue_head_t *q, unsigned int mode)
 {
-	__wake_up_common(q, mode, 1, 0);
+	__wake_up_common(q, mode, 1, 0, NULL);
 }
 
 /**
@@ -1836,15 +2404,16 @@
 void fastcall __wake_up_sync(wait_queue_head_t *q, unsigned int mode, int nr_exclusive)
 {
 	unsigned long flags;
+	int sync = 1;
 
 	if (unlikely(!q))
 		return;
 
+	if (unlikely(!nr_exclusive))
+		sync = 0;
+
 	spin_lock_irqsave(&q->lock, flags);
-	if (likely(nr_exclusive))
-		__wake_up_common(q, mode, nr_exclusive, 1);
-	else
-		__wake_up_common(q, mode, nr_exclusive, 0);
+	__wake_up_common(q, mode, nr_exclusive, sync, NULL);
 	spin_unlock_irqrestore(&q->lock, flags);
 }
 EXPORT_SYMBOL_GPL(__wake_up_sync);	/* For internal use only */
@@ -1856,7 +2425,7 @@
 	spin_lock_irqsave(&x->wait.lock, flags);
 	x->done++;
 	__wake_up_common(&x->wait, TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE,
-			 1, 0);
+			 1, 0, NULL);
 	spin_unlock_irqrestore(&x->wait.lock, flags);
 }
 EXPORT_SYMBOL(complete);
@@ -1868,7 +2437,7 @@
 	spin_lock_irqsave(&x->wait.lock, flags);
 	x->done += UINT_MAX/2;
 	__wake_up_common(&x->wait, TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE,
-			 0, 0);
+			 0, 0, NULL);
 	spin_unlock_irqrestore(&x->wait.lock, flags);
 }
 EXPORT_SYMBOL(complete_all);
@@ -2199,7 +2768,7 @@
 		if (task_running(rq, p)) {
 			if (p->prio > oldprio)
 				resched_task(rq->curr);
-		} else if (p->prio < rq->curr->prio)
+		} else if (TASK_PREEMPTS_CURR(p, rq))
 			resched_task(rq->curr);
 	}
 
@@ -2368,6 +2937,7 @@
 	if (len < real_len)
 		return -EINVAL;
 
+	lock_cpu_hotplug();
 	read_lock(&tasklist_lock);
 
 	retval = -ESRCH;
@@ -2380,6 +2950,7 @@
 
 out_unlock:
 	read_unlock(&tasklist_lock);
+	unlock_cpu_hotplug();
 	if (retval)
 		return retval;
 	if (copy_to_user(user_mask_ptr, &mask, real_len))
@@ -2398,6 +2969,7 @@
 {
 	runqueue_t *rq = this_rq_lock();
 	prio_array_t *array = current->array;
+	prio_array_t *target = rq->expired;
 
 	/*
 	 * We implement yielding by moving the task into the expired
@@ -2406,18 +2978,18 @@
 	 * (special rule: RT tasks will just roundrobin in the active
 	 *  array.)
 	 */
-	if (likely(!rt_task(current))) {
-		dequeue_task(current, array);
-		enqueue_task(current, rq->expired);
-	} else {
-		list_del(&current->run_list);
-		list_add_tail(&current->run_list, array->queue + current->prio);
-	}
+	if (unlikely(rt_task(current)))
+		target = rq->active;
+
+	dequeue_task(current, array);
+	enqueue_task(current, target);
+
 	/*
 	 * Since we are going to call schedule() anyway, there's
 	 * no need to preempt:
 	 */
 	_raw_spin_unlock(&rq->lock);
+	local_irq_enable();
 	preempt_enable_no_resched();
 
 	schedule();
@@ -2658,7 +3230,7 @@
 	read_unlock(&tasklist_lock);
 }
 
-void __init init_idle(task_t *idle, int cpu)
+void __devinit init_idle(task_t *idle, int cpu)
 {
 	runqueue_t *idle_rq = cpu_rq(cpu), *rq = cpu_rq(task_cpu(idle));
 	unsigned long flags;
@@ -2685,13 +3257,13 @@
 }
 
 /*
- * In a system that switches off the HZ timer idle_cpu_mask
+ * In a system that switches off the HZ timer nohz_cpu_mask
  * indicates which cpus entered this state. This is used
  * in the rcu update to wait only for active cpus. For system
- * which do not switch off the HZ timer idle_cpu_mask should
+ * which do not switch off the HZ timer nohz_cpu_mask should
  * always be CPU_MASK_NONE.
  */
-cpumask_t idle_cpu_mask = CPU_MASK_NONE;
+cpumask_t nohz_cpu_mask = CPU_MASK_NONE;
 
 #ifdef CONFIG_SMP
 /*
@@ -2732,7 +3304,12 @@
 		goto out;
 	}
 
-	if (__set_cpus_allowed(p, new_mask, &req)) {
+	p->cpus_allowed = new_mask;
+	/* Can the task run on the task's current CPU? If so, we're done */
+	if (cpu_isset(task_cpu(p), new_mask))
+		goto out;
+
+	if (migrate_task(p, any_online_cpu(new_mask), &req)) {
 		/* Need help from migration thread: drop lock and wait. */
 		task_rq_unlock(rq, &flags);
 		wake_up_process(rq->migration_thread);
@@ -2746,28 +3323,51 @@
 
 EXPORT_SYMBOL_GPL(set_cpus_allowed);
 
-/* Move (not current) task off this cpu, onto dest cpu. */
-static void move_task_away(struct task_struct *p, int dest_cpu)
+/*
+ * Move (not current) task off this cpu, onto dest cpu.  We're doing
+ * this because either it can't run here any more (set_cpus_allowed()
+ * away from this CPU, or CPU going down), or because we're
+ * attempting to rebalance this task on exec (sched_balance_exec).
+ *
+ * So we race with normal scheduler movements, but that's OK, as long
+ * as the task is no longer on this CPU.
+ */
+static void __migrate_task(struct task_struct *p, int src_cpu, int dest_cpu)
 {
-	runqueue_t *rq_dest;
+	runqueue_t *rq_dest, *rq_src;
 
+	if (unlikely(cpu_is_offline(dest_cpu)))
+		return;
+
+	rq_src  = cpu_rq(src_cpu);
 	rq_dest = cpu_rq(dest_cpu);
 
-	double_rq_lock(this_rq(), rq_dest);
-	if (task_cpu(p) != smp_processor_id())
-		goto out; /* Already moved */
+	double_rq_lock(rq_src, rq_dest);
+	/* Already moved. */
+	if (task_cpu(p) != src_cpu)
+		goto out;
+	/* Affinity changed (again). */
+	if (!cpu_isset(dest_cpu, p->cpus_allowed))
+		goto out;
 
 	set_task_cpu(p, dest_cpu);
 	if (p->array) {
-		deactivate_task(p, this_rq());
-		activate_task(p, rq_dest);
-		if (p->prio < rq_dest->curr->prio)
+		/*
+		 * Sync timestamp with rq_dest's before activating.
+		 * The same thing could be achieved by doing this step
+		 * afterwards, and pretending it was a local activate.
+		 * This way is cleaner and logically correct.
+		 */
+		p->timestamp = p->timestamp - rq_src->timestamp_last_tick
+				+ rq_dest->timestamp_last_tick;
+		deactivate_task(p, rq_src);
+		activate_task(p, rq_dest, 0);
+		if (TASK_PREEMPTS_CURR(p, rq_dest))
 			resched_task(rq_dest->curr);
 	}
-	p->timestamp = rq_dest->timestamp_last_tick;
 
 out:
-	double_rq_unlock(this_rq(), rq_dest);
+	double_rq_unlock(rq_src, rq_dest);
 }
 
 /*
@@ -2783,6 +3383,7 @@
 	rq = cpu_rq(cpu);
 	BUG_ON(rq->migration_thread != current);
 
+	set_current_state(TASK_INTERRUPTIBLE);
 	while (!kthread_should_stop()) {
 		struct list_head *head;
 		migration_req_t *req;
@@ -2791,40 +3392,66 @@
 			refrigerator(PF_FREEZE);
 
 		spin_lock_irq(&rq->lock);
+
+		if (cpu_is_offline(cpu)) {
+			spin_unlock_irq(&rq->lock);
+			goto wait_to_die;
+		}
+
+		if (rq->active_balance) {
+			active_load_balance(rq, cpu);
+			rq->active_balance = 0;
+		}
+
 		head = &rq->migration_queue;
-		current->state = TASK_INTERRUPTIBLE;
+
 		if (list_empty(head)) {
 			spin_unlock_irq(&rq->lock);
 			schedule();
+			set_current_state(TASK_INTERRUPTIBLE);
 			continue;
 		}
 		req = list_entry(head->next, migration_req_t, list);
 		list_del_init(head->next);
-		spin_unlock(&rq->lock);
 
-		move_task_away(req->task,
-			       any_online_cpu(req->task->cpus_allowed));
-		local_irq_enable();
+		if (req->type == REQ_MOVE_TASK) {
+			spin_unlock(&rq->lock);
+			__migrate_task(req->task, smp_processor_id(),
+					req->dest_cpu);
+			local_irq_enable();
+		} else if (req->type == REQ_SET_DOMAIN) {
+			rq->sd = req->sd;
+			spin_unlock_irq(&rq->lock);
+		} else {
+			spin_unlock_irq(&rq->lock);
+			WARN_ON(1);
+		}
+
 		complete(&req->done);
 	}
+	__set_current_state(TASK_RUNNING);
+	return 0;
+
+wait_to_die:
+	/* Wait for kthread_stop */
+	set_current_state(TASK_INTERRUPTIBLE);
+	while (!kthread_should_stop()) {
+		schedule();
+		set_current_state(TASK_INTERRUPTIBLE);
+	}
+	__set_current_state(TASK_RUNNING);
 	return 0;
 }
 
 #ifdef CONFIG_HOTPLUG_CPU
-/* migrate_all_tasks - function to migrate all the tasks from the
- * current cpu caller must have already scheduled this to the target
- * cpu via set_cpus_allowed.  Machine is stopped.  */
-void migrate_all_tasks(void)
+/* migrate_all_tasks - function to migrate all tasks from the dead cpu.  */
+static void migrate_all_tasks(int src_cpu)
 {
 	struct task_struct *tsk, *t;
-	int dest_cpu, src_cpu;
+	int dest_cpu;
 	unsigned int node;
 
-	/* We're nailed to this CPU. */
-	src_cpu = smp_processor_id();
-
-	/* Not required, but here for neatness. */
-	write_lock(&tasklist_lock);
+	write_lock_irq(&tasklist_lock);
 
 	/* watch out for per node tasks, let's stay on this node */
 	node = cpu_to_node(src_cpu);
@@ -2860,10 +3487,36 @@
 				       tsk->pid, tsk->comm, src_cpu);
 		}
 
-		move_task_away(tsk, dest_cpu);
+		__migrate_task(tsk, src_cpu, dest_cpu);
 	} while_each_thread(t, tsk);
 
-	write_unlock(&tasklist_lock);
+	write_unlock_irq(&tasklist_lock);
+}
+
+/* Schedules idle task to be the next runnable task on current CPU.
+ * It does so by boosting its priority to highest possible and adding it to
+ * the _front_ of runqueue. Used by CPU offline code.
+ */
+void sched_idle_next(void)
+{
+	int cpu = smp_processor_id();
+	runqueue_t *rq = this_rq();
+	struct task_struct *p = rq->idle;
+	unsigned long flags;
+
+	/* cpu has to be offline */
+	BUG_ON(cpu_online(cpu));
+
+	/* Strictly not necessary since rest of the CPUs are stopped by now
+	 * and interrupts disabled on current cpu.
+	 */
+	spin_lock_irqsave(&rq->lock, flags);
+
+	__setscheduler(p, SCHED_FIFO, MAX_RT_PRIO-1);
+	/* Add idle task to _front_ of it's priority queue */
+	__activate_idle_task(p, rq);
+
+	spin_unlock_irqrestore(&rq->lock, flags);
 }
 #endif /* CONFIG_HOTPLUG_CPU */
 
@@ -2899,18 +3552,46 @@
 	case CPU_UP_CANCELED:
 		/* Unbind it from offline cpu so it can run.  Fall thru. */
 		kthread_bind(cpu_rq(cpu)->migration_thread,smp_processor_id());
-	case CPU_DEAD:
 		kthread_stop(cpu_rq(cpu)->migration_thread);
 		cpu_rq(cpu)->migration_thread = NULL;
- 		BUG_ON(cpu_rq(cpu)->nr_running != 0);
+		break;
+	case CPU_DEAD:
+		migrate_all_tasks(cpu);
+		rq = cpu_rq(cpu);
+		kthread_stop(rq->migration_thread);
+		rq->migration_thread = NULL;
+		/* Idle task back to normal (off runqueue, low prio) */
+		rq = task_rq_lock(rq->idle, &flags);
+		deactivate_task(rq->idle, rq);
+		__setscheduler(rq->idle, SCHED_NORMAL, MAX_PRIO);
+		task_rq_unlock(rq, &flags);
+ 		BUG_ON(rq->nr_running != 0);
+
+		/* No need to migrate the tasks: it was best-effort if
+		 * they didn't do lock_cpu_hotplug().  Just wake up
+		 * the requestors. */
+		spin_lock_irq(&rq->lock);
+		while (!list_empty(&rq->migration_queue)) {
+			migration_req_t *req;
+			req = list_entry(rq->migration_queue.next,
+					 migration_req_t, list);
+			BUG_ON(req->type != REQ_MOVE_TASK);
+			list_del_init(&req->list);
+			complete(&req->done);
+		}
+		spin_unlock_irq(&rq->lock);
  		break;
 #endif
 	}
 	return NOTIFY_OK;
 }
 
+/* Register at highest priority so that task migration (migrate_all_tasks)
+ * happens before everything else.
+ */
 static struct notifier_block __devinitdata migration_notifier = {
 	.notifier_call = migration_call,
+	.priority = 10
 };
 
 int __init migration_init(void)
@@ -2939,23 +3620,298 @@
 spinlock_t kernel_flag __cacheline_aligned_in_smp = SPIN_LOCK_UNLOCKED;
 EXPORT_SYMBOL(kernel_flag);
 
+#ifdef CONFIG_SMP
+/* Attach the domain 'sd' to 'cpu' as its base domain */
+void cpu_attach_domain(struct sched_domain *sd, int cpu)
+{
+	migration_req_t req;
+	unsigned long flags;
+	runqueue_t *rq = cpu_rq(cpu);
+	int local = 1;
+
+	lock_cpu_hotplug();
+
+	spin_lock_irqsave(&rq->lock, flags);
+
+	if (cpu == smp_processor_id() || cpu_is_offline(cpu)) {
+		rq->sd = sd;
+	} else {
+		init_completion(&req.done);
+		req.type = REQ_SET_DOMAIN;
+		req.sd = sd;
+		list_add(&req.list, &rq->migration_queue);
+		local = 0;
+	}
+
+	spin_unlock_irqrestore(&rq->lock, flags);
+
+	if (!local) {
+		wake_up_process(rq->migration_thread);
+		wait_for_completion(&req.done);
+	}
+
+	unlock_cpu_hotplug();
+}
+
+#ifdef ARCH_HAS_SCHED_DOMAIN
+extern void __init arch_init_sched_domains(void);
+#else
+static struct sched_group sched_group_cpus[NR_CPUS];
+static DEFINE_PER_CPU(struct sched_domain, cpu_domains);
+#ifdef CONFIG_NUMA
+static struct sched_group sched_group_nodes[MAX_NUMNODES];
+static DEFINE_PER_CPU(struct sched_domain, node_domains);
+static void __init arch_init_sched_domains(void)
+{
+	int i;
+	struct sched_group *first_node = NULL, *last_node = NULL;
+
+	/* Set up domains */
+	for_each_cpu(i) {
+		int node = cpu_to_node(i);
+		cpumask_t nodemask = node_to_cpumask(node);
+		struct sched_domain *node_sd = &per_cpu(node_domains, i);
+		struct sched_domain *cpu_sd = &per_cpu(cpu_domains, i);
+
+		*node_sd = SD_NODE_INIT;
+		node_sd->span = cpu_possible_map;
+		node_sd->groups = &sched_group_nodes[cpu_to_node(i)];
+
+		*cpu_sd = SD_CPU_INIT;
+		cpus_and(cpu_sd->span, nodemask, cpu_possible_map);
+		cpu_sd->groups = &sched_group_cpus[i];
+		cpu_sd->parent = node_sd;
+	}
+
+	/* Set up groups */
+	for (i = 0; i < MAX_NUMNODES; i++) {
+		cpumask_t tmp = node_to_cpumask(i);
+		cpumask_t nodemask;
+		struct sched_group *first_cpu = NULL, *last_cpu = NULL;
+		struct sched_group *node = &sched_group_nodes[i];
+		int j;
+
+		cpus_and(nodemask, tmp, cpu_possible_map);
+
+		if (cpus_empty(nodemask))
+			continue;
+
+		node->cpumask = nodemask;
+		node->cpu_power = SCHED_LOAD_SCALE * cpus_weight(node->cpumask);
+
+		for_each_cpu_mask(j, node->cpumask) {
+			struct sched_group *cpu = &sched_group_cpus[j];
+
+			cpus_clear(cpu->cpumask);
+			cpu_set(j, cpu->cpumask);
+			cpu->cpu_power = SCHED_LOAD_SCALE;
+
+			if (!first_cpu)
+				first_cpu = cpu;
+			if (last_cpu)
+				last_cpu->next = cpu;
+			last_cpu = cpu;
+		}
+		last_cpu->next = first_cpu;
+
+		if (!first_node)
+			first_node = node;
+		if (last_node)
+			last_node->next = node;
+		last_node = node;
+	}
+	last_node->next = first_node;
+
+	mb();
+	for_each_cpu(i) {
+		struct sched_domain *cpu_sd = &per_cpu(cpu_domains, i);
+		cpu_attach_domain(cpu_sd, i);
+	}
+}
+
+#else /* !CONFIG_NUMA */
+static void __init arch_init_sched_domains(void)
+{
+	int i;
+	struct sched_group *first_cpu = NULL, *last_cpu = NULL;
+
+	/* Set up domains */
+	for_each_cpu(i) {
+		struct sched_domain *cpu_sd = &per_cpu(cpu_domains, i);
+
+		*cpu_sd = SD_CPU_INIT;
+		cpu_sd->span = cpu_possible_map;
+		cpu_sd->groups = &sched_group_cpus[i];
+	}
+
+	/* Set up CPU groups */
+	for_each_cpu_mask(i, cpu_possible_map) {
+		struct sched_group *cpu = &sched_group_cpus[i];
+
+		cpus_clear(cpu->cpumask);
+		cpu_set(i, cpu->cpumask);
+		cpu->cpu_power = SCHED_LOAD_SCALE;
+
+		if (!first_cpu)
+			first_cpu = cpu;
+		if (last_cpu)
+			last_cpu->next = cpu;
+		last_cpu = cpu;
+	}
+	last_cpu->next = first_cpu;
+
+	mb(); /* domains were modified outside the lock */
+	for_each_cpu(i) {
+		struct sched_domain *cpu_sd = &per_cpu(cpu_domains, i);
+		cpu_attach_domain(cpu_sd, i);
+	}
+}
+
+#endif /* CONFIG_NUMA */
+#endif /* ARCH_HAS_SCHED_DOMAIN */
+
+#define SCHED_DOMAIN_DEBUG
+#ifdef SCHED_DOMAIN_DEBUG
+void sched_domain_debug(void)
+{
+	int i;
+
+	for_each_cpu(i) {
+		runqueue_t *rq = cpu_rq(i);
+		struct sched_domain *sd;
+		int level = 0;
+
+		sd = rq->sd;
+
+		printk(KERN_DEBUG "CPU%d: %s\n",
+				i, (cpu_online(i) ? " online" : "offline"));
+
+		do {
+			int j;
+			char str[NR_CPUS];
+			struct sched_group *group = sd->groups;
+			cpumask_t groupmask, tmp;
+
+			cpumask_scnprintf(str, NR_CPUS, sd->span);
+			cpus_clear(groupmask);
+
+			printk(KERN_DEBUG);
+			for (j = 0; j < level + 1; j++)
+				printk(" ");
+			printk("domain %d: span %s\n", level, str);
+
+			if (!cpu_isset(i, sd->span))
+				printk(KERN_DEBUG "ERROR domain->span does not contain CPU%d\n", i);
+			if (!cpu_isset(i, group->cpumask))
+				printk(KERN_DEBUG "ERROR domain->groups does not contain CPU%d\n", i);
+			if (!group->cpu_power)
+				printk(KERN_DEBUG "ERROR domain->cpu_power not set\n");
+
+			printk(KERN_DEBUG);
+			for (j = 0; j < level + 2; j++)
+				printk(" ");
+			printk("groups:");
+			do {
+				if (!group) {
+					printk(" ERROR: NULL");
+					break;
+				}
+
+				if (!cpus_weight(group->cpumask))
+					printk(" ERROR empty group:");
+
+				cpus_and(tmp, groupmask, group->cpumask);
+				if (cpus_weight(tmp) > 0)
+					printk(" ERROR repeated CPUs:");
+
+				cpus_or(groupmask, groupmask, group->cpumask);
+
+				cpumask_scnprintf(str, NR_CPUS, group->cpumask);
+				printk(" %s", str);
+
+				group = group->next;
+			} while (group != sd->groups);
+			printk("\n");
+
+			if (!cpus_equal(sd->span, groupmask))
+				printk(KERN_DEBUG "ERROR groups don't span domain->span\n");
+
+			level++;
+			sd = sd->parent;
+
+			if (sd) {
+				cpus_and(tmp, groupmask, sd->span);
+				if (!cpus_equal(tmp, groupmask))
+					printk(KERN_DEBUG "ERROR parent span is not a superset of domain->span\n");
+			}
+
+		} while (sd);
+	}
+}
+#else
+#define sched_domain_debug() {}
+#endif
+
+void __init sched_init_smp(void)
+{
+	arch_init_sched_domains();
+	sched_domain_debug();
+}
+#else
+void __init sched_init_smp(void)
+{
+}
+#endif /* CONFIG_SMP */
+
+int in_sched_functions(unsigned long addr)
+{
+	/* Linker adds these: start and end of __sched functions */
+	extern char __sched_text_start[], __sched_text_end[];
+	return addr >= (unsigned long)__sched_text_start
+		&& addr < (unsigned long)__sched_text_end;
+}
+
 void __init sched_init(void)
 {
 	runqueue_t *rq;
 	int i, j, k;
 
+#ifdef CONFIG_SMP
+	/* Set up an initial dummy domain for early boot */
+	static struct sched_domain sched_domain_init;
+	static struct sched_group sched_group_init;
+	cpumask_t cpu_mask_all = CPU_MASK_ALL;
+
+	memset(&sched_domain_init, 0, sizeof(struct sched_domain));
+	sched_domain_init.span = cpu_mask_all;
+	sched_domain_init.groups = &sched_group_init;
+	sched_domain_init.last_balance = jiffies;
+	sched_domain_init.balance_interval = INT_MAX; /* Don't balance */
+
+	memset(&sched_group_init, 0, sizeof(struct sched_group));
+	sched_group_init.cpumask = cpu_mask_all;
+	sched_group_init.next = &sched_group_init;
+	sched_group_init.cpu_power = SCHED_LOAD_SCALE;
+#endif
+
 	for (i = 0; i < NR_CPUS; i++) {
 		prio_array_t *array;
 
 		rq = cpu_rq(i);
+		spin_lock_init(&rq->lock);
 		rq->active = rq->arrays;
 		rq->expired = rq->arrays + 1;
 		rq->best_expired_prio = MAX_PRIO;
 
-		spin_lock_init(&rq->lock);
+#ifdef CONFIG_SMP
+		rq->sd = &sched_domain_init;
+		rq->cpu_load = 0;
+		rq->active_balance = 0;
+		rq->push_cpu = 0;
+		rq->migration_thread = NULL;
 		INIT_LIST_HEAD(&rq->migration_queue);
+#endif
 		atomic_set(&rq->nr_iowait, 0);
-		nr_running_init(rq);
 
 		for (j = 0; j < 2; j++) {
 			array = rq->arrays + j;
@@ -2976,8 +3932,6 @@
 	rq->idle = current;
 	set_task_cpu(current, smp_processor_id());
 	wake_up_forked_process(current);
-
-	init_timers();
 
 	/*
 	 * The boot idle thread does lazy MMU switching as well:
diff -Nru a/kernel/signal.c b/kernel/signal.c
--- a/kernel/signal.c	Sun May 16 01:18:34 2004
+++ b/kernel/signal.c	Sun May 16 01:18:34 2004
@@ -1403,12 +1403,12 @@
 	 * Fortunately this is not necessary for thread groups:
 	 */
 	if (p->tgid == tsk->tgid) {
-		wake_up_interruptible(&tsk->wait_chldexit);
+		wake_up_interruptible_sync(&tsk->wait_chldexit);
 		return;
 	}
 
 	do {
-		wake_up_interruptible(&tsk->wait_chldexit);
+		wake_up_interruptible_sync(&tsk->wait_chldexit);
 		tsk = next_thread(tsk);
 		if (tsk->signal != parent->signal)
 			BUG();
diff -Nru a/kernel/sys.c b/kernel/sys.c
--- a/kernel/sys.c	Sun May 16 01:18:33 2004
+++ b/kernel/sys.c	Sun May 16 01:18:33 2004
@@ -348,6 +348,8 @@
 				if (p->uid == who)
 					error = set_one_prio(p, niceval, error);
 			while_each_thread(g, p);
+			if (who)
+				free_uid(user);		/* For find_user() */
 			break;
 	}
 out_unlock:
@@ -410,6 +412,8 @@
 						retval = niceval;
 				}
 			while_each_thread(g, p);
+			if (who)
+				free_uid(user);		/* for find_user() */
 			break;
 	}
 out_unlock:
@@ -1121,10 +1125,10 @@
 	int nblocks;
 	int i;
 
-	nblocks = (gidsetsize/NGROUPS_PER_BLOCK) +
-	    (gidsetsize%NGROUPS_PER_BLOCK?1:0);
-	group_info = kmalloc(sizeof(*group_info) + nblocks*sizeof(gid_t *),
-	    GFP_USER);
+	nblocks = (gidsetsize + NGROUPS_PER_BLOCK - 1) / NGROUPS_PER_BLOCK;
+	/* Make sure we always allocate at least one indirect block pointer */
+	nblocks = nblocks ? : 1;
+	group_info = kmalloc(sizeof(*group_info) + nblocks*sizeof(gid_t *), GFP_USER);
 	if (!group_info)
 		return NULL;
 	group_info->ngroups = gidsetsize;
diff -Nru a/kernel/sysctl.c b/kernel/sysctl.c
--- a/kernel/sysctl.c	Sun May 16 01:18:33 2004
+++ b/kernel/sysctl.c	Sun May 16 01:18:33 2004
@@ -738,6 +738,14 @@
 		.extra1		= (void *)&hugetlb_zero,
 		.extra2		= (void *)&hugetlb_infinity,
 	 },
+	 {
+		.ctl_name	= VM_HUGETLB_GROUP,
+		.procname	= "hugetlb_shm_group",
+		.data		= &sysctl_hugetlb_shm_group,
+		.maxlen		= sizeof(gid_t),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec,
+	 },
 #endif
 	{
 		.ctl_name	= VM_LOWER_ZONE_PROTECTION,
diff -Nru a/kernel/timer.c b/kernel/timer.c
--- a/kernel/timer.c	Sun May 16 01:18:36 2004
+++ b/kernel/timer.c	Sun May 16 01:18:36 2004
@@ -317,10 +317,16 @@
  *
  * Synchronization rules: callers must prevent restarting of the timer,
  * otherwise this function is meaningless. It must not be called from
- * interrupt contexts. Upon exit the timer is not queued and the handler
- * is not running on any CPU.
+ * interrupt contexts. The caller must not hold locks which would prevent
+ * completion of the timer's handler.  Upon exit the timer is not queued and
+ * the handler is not running on any CPU.
  *
  * The function returns whether it has deactivated a pending timer or not.
+ *
+ * del_timer_sync() is slow and complicated because it copes with timer
+ * handlers which re-arm the timer (periodic timers).  If the timer handler
+ * is known to not do this (a single shot timer) then use
+ * del_singleshot_timer_sync() instead.
  */
 int del_timer_sync(struct timer_list *timer)
 {
@@ -332,7 +338,7 @@
 del_again:
 	ret += del_timer(timer);
 
-	for_each_cpu(i) {
+	for_each_online_cpu(i) {
 		base = &per_cpu(tvec_bases, i);
 		if (base->running_timer == timer) {
 			while (base->running_timer == timer) {
@@ -348,8 +354,36 @@
 
 	return ret;
 }
-
 EXPORT_SYMBOL(del_timer_sync);
+
+/***
+ * del_singleshot_timer_sync - deactivate a non-recursive timer
+ * @timer: the timer to be deactivated
+ *
+ * This function is an optimization of del_timer_sync for the case where the
+ * caller can guarantee the timer does not reschedule itself in its timer
+ * function.
+ *
+ * Synchronization rules: callers must prevent restarting of the timer,
+ * otherwise this function is meaningless. It must not be called from
+ * interrupt contexts. The caller must not hold locks which wold prevent
+ * completion of the timer's handler.  Upon exit the timer is not queued and
+ * the handler is not running on any CPU.
+ *
+ * The function returns whether it has deactivated a pending timer or not.
+ */
+int del_singleshot_timer_sync(struct timer_list *timer)
+{
+	int ret = del_timer(timer);
+
+	if (!ret) {
+		ret = del_timer_sync(timer);
+		BUG_ON(ret);
+	}
+
+	return ret;
+}
+EXPORT_SYMBOL(del_singleshot_timer_sync);
 #endif
 
 static int cascade(tvec_base_t *base, tvec_t *tv, int index)
@@ -1109,7 +1143,7 @@
 
 	add_timer(&timer);
 	schedule();
-	del_timer_sync(&timer);
+	del_singleshot_timer_sync(&timer);
 
 	timeout = expire - jiffies;
 
diff -Nru a/kernel/user.c b/kernel/user.c
--- a/kernel/user.c	Sun May 16 01:18:34 2004
+++ b/kernel/user.c	Sun May 16 01:18:34 2004
@@ -64,9 +64,20 @@
 	return NULL;
 }
 
+/*
+ * Locate the user_struct for the passed UID.  If found, take a ref on it.  The
+ * caller must undo that ref with free_uid().
+ *
+ * If the user_struct could not be found, return NULL.
+ */
 struct user_struct *find_user(uid_t uid)
 {
-	return uid_hash_find(uid, uidhashentry(uid));
+	struct user_struct *ret;
+
+	spin_lock(&uidhash_lock);
+	ret = uid_hash_find(uid, uidhashentry(uid));
+	spin_unlock(&uidhash_lock);
+	return ret;
 }
 
 void free_uid(struct user_struct *up)
diff -Nru a/kernel/workqueue.c b/kernel/workqueue.c
--- a/kernel/workqueue.c	Sun May 16 01:18:36 2004
+++ b/kernel/workqueue.c	Sun May 16 01:18:36 2004
@@ -201,19 +201,20 @@
 	siginitset(&sa.sa.sa_mask, sigmask(SIGCHLD));
 	do_sigaction(SIGCHLD, &sa, (struct k_sigaction *)0);
 
+	set_current_state(TASK_INTERRUPTIBLE);
 	while (!kthread_should_stop()) {
-		set_task_state(current, TASK_INTERRUPTIBLE);
-
 		add_wait_queue(&cwq->more_work, &wait);
 		if (list_empty(&cwq->worklist))
 			schedule();
 		else
-			set_task_state(current, TASK_RUNNING);
+			__set_current_state(TASK_RUNNING);
 		remove_wait_queue(&cwq->more_work, &wait);
 
 		if (!list_empty(&cwq->worklist))
 			run_workqueue(cwq);
+		set_current_state(TASK_INTERRUPTIBLE);
 	}
+	__set_current_state(TASK_RUNNING);
 	return 0;
 }
 
@@ -324,7 +325,7 @@
 	} else {
 		spin_lock(&workqueue_lock);
 		list_add(&wq->list, &workqueues);
-		spin_unlock_irq(&workqueue_lock);
+		spin_unlock(&workqueue_lock);
 		for_each_online_cpu(cpu) {
 			p = create_workqueue_thread(wq, cpu);
 			if (p) {
@@ -334,6 +335,7 @@
 				destroy = 1;
 		}
 	}
+	unlock_cpu_hotplug();
 
 	/*
 	 * Was there any error during startup? If yes then clean up:
@@ -342,7 +344,6 @@
 		destroy_workqueue(wq);
 		wq = NULL;
 	}
-	unlock_cpu_hotplug();
 	return wq;
 }
 
@@ -376,7 +377,7 @@
 			cleanup_workqueue_thread(wq, cpu);
 		spin_lock(&workqueue_lock);
 		list_del(&wq->list);
-		spin_unlock_irq(&workqueue_lock);
+		spin_unlock(&workqueue_lock);
 	}
 	unlock_cpu_hotplug();
 	kfree(wq);
diff -Nru a/lib/kobject.c b/lib/kobject.c
--- a/lib/kobject.c	Sun May 16 01:18:36 2004
+++ b/lib/kobject.c	Sun May 16 01:18:36 2004
@@ -385,13 +385,17 @@
  *	@new_name: object's new name
  */
 
-void kobject_rename(struct kobject * kobj, char *new_name)
+int kobject_rename(struct kobject * kobj, char *new_name)
 {
+	int error = 0;
+
 	kobj = kobject_get(kobj);
 	if (!kobj)
-		return;
-	sysfs_rename_dir(kobj, new_name);
+		return -EINVAL;
+	error = sysfs_rename_dir(kobj, new_name);
 	kobject_put(kobj);
+
+	return error;
 }
 
 /**
diff -Nru a/lib/string.c b/lib/string.c
--- a/lib/string.c	Sun May 16 01:18:36 2004
+++ b/lib/string.c	Sun May 16 01:18:36 2004
@@ -445,8 +445,8 @@
 #ifndef __HAVE_ARCH_BCOPY
 /**
  * bcopy - Copy one area of memory to another
- * @src: Where to copy from
- * @dest: Where to copy to
+ * @srcp: Where to copy from
+ * @destp: Where to copy to
  * @count: The size of the area.
  *
  * Note that this is the same as memcpy(), with the arguments reversed.
diff -Nru a/mm/bootmem.c b/mm/bootmem.c
--- a/mm/bootmem.c	Sun May 16 01:18:34 2004
+++ b/mm/bootmem.c	Sun May 16 01:18:34 2004
@@ -82,14 +82,11 @@
 							PAGE_SIZE-1)/PAGE_SIZE;
 	unsigned long end = (addr + size + PAGE_SIZE-1)/PAGE_SIZE;
 
-	if (!size) BUG();
+	BUG_ON(!size);
+	BUG_ON(sidx >= eidx);
+	BUG_ON((addr >> PAGE_SHIFT) >= bdata->node_low_pfn);
+	BUG_ON(end > bdata->node_low_pfn);
 
-	if (sidx >= eidx)
-		BUG();
-	if ((addr >> PAGE_SHIFT) >= bdata->node_low_pfn)
-		BUG();
-	if (end > bdata->node_low_pfn)
-		BUG();
 	for (i = sidx; i < eidx; i++)
 		if (test_and_set_bit(i, bdata->node_bootmem_map)) {
 #ifdef CONFIG_DEBUG_BOOTMEM
@@ -110,9 +107,8 @@
 	unsigned long eidx = (addr + size - bdata->node_boot_start)/PAGE_SIZE;
 	unsigned long end = (addr + size)/PAGE_SIZE;
 
-	if (!size) BUG();
-	if (end > bdata->node_low_pfn)
-		BUG();
+	BUG_ON(!size);
+	BUG_ON(end > bdata->node_low_pfn);
 
 	if (addr < bdata->last_success)
 		bdata->last_success = addr;
@@ -124,7 +120,7 @@
 	sidx = start - (bdata->node_boot_start/PAGE_SIZE);
 
 	for (i = sidx; i < eidx; i++) {
-		if (!test_and_clear_bit(i, bdata->node_bootmem_map))
+		if (unlikely(!test_and_clear_bit(i, bdata->node_bootmem_map)))
 			BUG();
 	}
 }
@@ -140,7 +136,7 @@
  *
  * alignment has to be a power of 2 value.
  *
- * NOTE:  This function is _not_ reenetrant.
+ * NOTE:  This function is _not_ reentrant.
  */
 static void * __init
 __alloc_bootmem_core(struct bootmem_data *bdata, unsigned long size,
@@ -152,7 +148,6 @@
 
 	if(!size) {
 		printk("__alloc_bootmem_core(): zero-sized request\n");
-		dump_stack();
 		BUG();
 	}
 	BUG_ON(align & (align-1));
@@ -260,7 +255,7 @@
 	unsigned long idx;
 	unsigned long *map; 
 
-	if (!bdata->node_bootmem_map) BUG();
+	BUG_ON(!bdata->node_bootmem_map);
 
 	count = 0;
 	/* first extant page of the node */
diff -Nru a/mm/filemap.c b/mm/filemap.c
--- a/mm/filemap.c	Sun May 16 01:18:34 2004
+++ b/mm/filemap.c	Sun May 16 01:18:34 2004
@@ -127,7 +127,7 @@
 		if (mapping->a_ops && mapping->a_ops->sync_page)
 			return mapping->a_ops->sync_page(page);
 	} else if (PageSwapCache(page)) {
-		swap_unplug_io_fn(page);
+		swap_unplug_io_fn(NULL, page);
 	}
 	return 0;
 }
@@ -291,6 +291,40 @@
  * at a cost of "thundering herd" phenomena during rare hash
  * collisions.
  */
+struct page_wait_queue {
+	struct page *page;
+	int bit;
+	wait_queue_t wait;
+};
+
+static int page_wake_function(wait_queue_t *wait, unsigned mode, int sync, void *key)
+{
+	struct page *page = key;
+	struct page_wait_queue *wq;
+
+	wq = container_of(wait, struct page_wait_queue, wait);
+	if (wq->page != page || test_bit(wq->bit, &page->flags))
+		return 0;
+	else
+		return autoremove_wake_function(wait, mode, sync, NULL);
+}
+
+#define __DEFINE_PAGE_WAIT(name, p, b, f)				\
+	struct page_wait_queue name = {					\
+		.page	= p,						\
+		.bit	= b,						\
+		.wait	= {						\
+			.task	= current,				\
+			.func	= page_wake_function,			\
+			.flags	= f,					\
+			.task_list = LIST_HEAD_INIT(name.wait.task_list),\
+		},							\
+	}
+
+#define DEFINE_PAGE_WAIT(name, p, b)	__DEFINE_PAGE_WAIT(name, p, b, 0)
+#define DEFINE_PAGE_WAIT_EXCLUSIVE(name, p, b)				\
+		__DEFINE_PAGE_WAIT(name, p, b, WQ_FLAG_EXCLUSIVE)
+
 static wait_queue_head_t *page_waitqueue(struct page *page)
 {
 	const struct zone *zone = page_zone(page);
@@ -298,19 +332,28 @@
 	return &zone->wait_table[hash_ptr(page, zone->wait_table_bits)];
 }
 
+static void wake_up_page(struct page *page)
+{
+	const unsigned int mode = TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE;
+	wait_queue_head_t *waitqueue = page_waitqueue(page);
+
+	if (waitqueue_active(waitqueue))
+		__wake_up(waitqueue, mode, 1, page);
+}
+
 void fastcall wait_on_page_bit(struct page *page, int bit_nr)
 {
 	wait_queue_head_t *waitqueue = page_waitqueue(page);
-	DEFINE_WAIT(wait);
+	DEFINE_PAGE_WAIT(wait, page, bit_nr);
 
 	do {
-		prepare_to_wait(waitqueue, &wait, TASK_UNINTERRUPTIBLE);
+		prepare_to_wait(waitqueue, &wait.wait, TASK_UNINTERRUPTIBLE);
 		if (test_bit(bit_nr, &page->flags)) {
 			sync_page(page);
 			io_schedule();
 		}
 	} while (test_bit(bit_nr, &page->flags));
-	finish_wait(waitqueue, &wait);
+	finish_wait(waitqueue, &wait.wait);
 }
 
 EXPORT_SYMBOL(wait_on_page_bit);
@@ -332,13 +375,11 @@
  */
 void fastcall unlock_page(struct page *page)
 {
-	wait_queue_head_t *waitqueue = page_waitqueue(page);
 	smp_mb__before_clear_bit();
 	if (!TestClearPageLocked(page))
 		BUG();
 	smp_mb__after_clear_bit(); 
-	if (waitqueue_active(waitqueue))
-		wake_up_all(waitqueue);
+	wake_up_page(page);
 }
 
 EXPORT_SYMBOL(unlock_page);
@@ -349,15 +390,12 @@
  */
 void end_page_writeback(struct page *page)
 {
-	wait_queue_head_t *waitqueue = page_waitqueue(page);
-
 	if (!TestClearPageReclaim(page) || rotate_reclaimable_page(page)) {
 		if (!test_clear_page_writeback(page))
 			BUG();
 		smp_mb__after_clear_bit();
 	}
-	if (waitqueue_active(waitqueue))
-		wake_up_all(waitqueue);
+	wake_up_page(page);
 }
 
 EXPORT_SYMBOL(end_page_writeback);
@@ -373,16 +411,16 @@
 void fastcall __lock_page(struct page *page)
 {
 	wait_queue_head_t *wqh = page_waitqueue(page);
-	DEFINE_WAIT(wait);
+	DEFINE_PAGE_WAIT_EXCLUSIVE(wait, page, PG_locked);
 
 	while (TestSetPageLocked(page)) {
-		prepare_to_wait(wqh, &wait, TASK_UNINTERRUPTIBLE);
+		prepare_to_wait_exclusive(wqh, &wait.wait, TASK_UNINTERRUPTIBLE);
 		if (PageLocked(page)) {
 			sync_page(page);
 			io_schedule();
 		}
 	}
-	finish_wait(wqh, &wait);
+	finish_wait(wqh, &wait.wait);
 }
 
 EXPORT_SYMBOL(__lock_page);
@@ -606,7 +644,7 @@
  * - note the struct file * is only passed for the use of readpage
  */
 void do_generic_mapping_read(struct address_space *mapping,
-			     struct file_ra_state *ra,
+			     struct file_ra_state *_ra,
 			     struct file * filp,
 			     loff_t *ppos,
 			     read_descriptor_t * desc,
@@ -616,6 +654,7 @@
 	unsigned long index, offset;
 	struct page *cached_page;
 	int error;
+	struct file_ra_state ra = *_ra;
 
 	cached_page = NULL;
 	index = *ppos >> PAGE_CACHE_SHIFT;
@@ -638,13 +677,13 @@
 		}
 
 		cond_resched();
-		page_cache_readahead(mapping, ra, filp, index);
+		page_cache_readahead(mapping, &ra, filp, index);
 
 		nr = nr - offset;
 find_page:
 		page = find_get_page(mapping, index);
 		if (unlikely(page == NULL)) {
-			handle_ra_miss(mapping, ra, index);
+			handle_ra_miss(mapping, &ra, index);
 			goto no_cached_page;
 		}
 		if (!PageUptodate(page))
@@ -745,6 +784,8 @@
 		cached_page = NULL;
 		goto readpage;
 	}
+
+	*_ra = ra;
 
 	*ppos = ((loff_t) index << PAGE_CACHE_SHIFT) + offset;
 	if (cached_page)
diff -Nru a/mm/mprotect.c b/mm/mprotect.c
--- a/mm/mprotect.c	Sun May 16 01:18:37 2004
+++ b/mm/mprotect.c	Sun May 16 01:18:37 2004
@@ -174,8 +174,7 @@
 	 * a MAP_NORESERVE private mapping to writable will now reserve.
 	 */
 	if (newflags & VM_WRITE) {
-		if (!(vma->vm_flags & (VM_ACCOUNT|VM_WRITE|VM_SHARED))
-				&& VM_MAYACCT(vma)) {
+		if (!(vma->vm_flags & (VM_ACCOUNT|VM_WRITE|VM_SHARED|VM_HUGETLB))) {
 			charged = (end - start) >> PAGE_SHIFT;
 			if (security_vm_enough_memory(charged))
 				return -ENOMEM;
diff -Nru a/mm/nommu.c b/mm/nommu.c
--- a/mm/nommu.c	Sun May 16 01:18:36 2004
+++ b/mm/nommu.c	Sun May 16 01:18:36 2004
@@ -18,6 +18,7 @@
 #include <linux/slab.h>
 #include <linux/vmalloc.h>
 #include <linux/blkdev.h>
+#include <linux/backing-dev.h>
 
 #include <asm/pgalloc.h>
 #include <asm/uaccess.h>
@@ -569,5 +570,9 @@
 }
 
 void pte_chain_init(void)
+{
+}
+
+void swap_unplug_io_fn(struct backing_dev_info *)
 {
 }
diff -Nru a/mm/page-writeback.c b/mm/page-writeback.c
--- a/mm/page-writeback.c	Sun May 16 01:18:35 2004
+++ b/mm/page-writeback.c	Sun May 16 01:18:35 2004
@@ -92,6 +92,8 @@
  */
 int laptop_mode;
 
+EXPORT_SYMBOL(laptop_mode);
+
 /* End of sysctl-exported parameters */
 
 
diff -Nru a/mm/readahead.c b/mm/readahead.c
--- a/mm/readahead.c	Sun May 16 01:18:33 2004
+++ b/mm/readahead.c	Sun May 16 01:18:33 2004
@@ -15,7 +15,7 @@
 #include <linux/backing-dev.h>
 #include <linux/pagevec.h>
 
-void default_unplug_io_fn(struct backing_dev_info *bdi)
+void default_unplug_io_fn(struct backing_dev_info *bdi, struct page *page)
 {
 }
 EXPORT_SYMBOL(default_unplug_io_fn);
diff -Nru a/mm/rmap.c b/mm/rmap.c
--- a/mm/rmap.c	Sun May 16 01:18:36 2004
+++ b/mm/rmap.c	Sun May 16 01:18:36 2004
@@ -186,7 +186,7 @@
 	if (PageReserved(page))
 		return pte_chain;
 
-	rmap_lock(page);
+	page_map_lock(page);
 
 	if (page->pte.direct == 0) {
 		page->pte.direct = pte_paddr;
@@ -223,7 +223,7 @@
 	cur_pte_chain->ptes[pte_chain_idx(cur_pte_chain) - 1] = pte_paddr;
 	cur_pte_chain->next_and_idx--;
 out:
-	rmap_unlock(page);
+	page_map_unlock(page);
 	return pte_chain;
 }
 
@@ -245,7 +245,7 @@
 	if (!pfn_valid(page_to_pfn(page)) || PageReserved(page))
 		return;
 
-	rmap_lock(page);
+	page_map_lock(page);
 
 	if (!page_mapped(page))
 		goto out_unlock;	/* remap_page_range() from a driver? */
@@ -294,7 +294,7 @@
 		dec_page_state(nr_mapped);
 	}
 out_unlock:
-	rmap_unlock(page);
+	page_map_unlock(page);
 }
 
 /**
diff -Nru a/mm/swap_state.c b/mm/swap_state.c
--- a/mm/swap_state.c	Sun May 16 01:18:34 2004
+++ b/mm/swap_state.c	Sun May 16 01:18:34 2004
@@ -25,13 +25,13 @@
 };
 
 static struct backing_dev_info swap_backing_dev_info = {
-	.state		= 0,	/* uncongested */
+	.memory_backed	= 1,	/* Does not contribute to dirty memory */
+	.unplug_io_fn	= swap_unplug_io_fn,
 };
 
 struct address_space swapper_space = {
 	.page_tree	= RADIX_TREE_INIT(GFP_ATOMIC),
 	.tree_lock	= SPIN_LOCK_UNLOCKED,
-	.nrpages	= 0,	/* total_swapcache_pages */
 	.a_ops		= &swap_aops,
 	.backing_dev_info = &swap_backing_dev_info,
 };
diff -Nru a/mm/swapfile.c b/mm/swapfile.c
--- a/mm/swapfile.c	Sun May 16 01:18:34 2004
+++ b/mm/swapfile.c	Sun May 16 01:18:34 2004
@@ -48,68 +48,38 @@
 static DECLARE_MUTEX(swapon_sem);
 
 /*
- * Array of backing blockdevs, for swap_unplug_fn.  We need this because the
- * bdev->unplug_fn can sleep and we cannot hold swap_list_lock while calling
- * the unplug_fn.  And swap_list_lock cannot be turned into a semaphore.
+ * We need this because the bdev->unplug_fn can sleep and we cannot
+ * hold swap_list_lock while calling the unplug_fn. And swap_list_lock
+ * cannot be turned into a semaphore.
  */
-static DECLARE_MUTEX(swap_bdevs_sem);
-static struct block_device *swap_bdevs[MAX_SWAPFILES];
+static DECLARE_RWSEM(swap_unplug_sem);
 
 #define SWAPFILE_CLUSTER 256
 
-/*
- * Caller holds swap_bdevs_sem
- */
-static void install_swap_bdev(struct block_device *bdev)
-{
-	int i;
-
-	for (i = 0; i < MAX_SWAPFILES; i++) {
-		if (swap_bdevs[i] == NULL) {
-			swap_bdevs[i] = bdev;
-			return;
-		}
-	}
-	BUG();
-}
-
-static void remove_swap_bdev(struct block_device *bdev)
-{
-	int i;
-
-	for (i = 0; i < MAX_SWAPFILES; i++) {
-		if (swap_bdevs[i] == bdev) {
-			memcpy(&swap_bdevs[i], &swap_bdevs[i + 1],
-				(MAX_SWAPFILES - i - 1) * sizeof(*swap_bdevs));
-			swap_bdevs[MAX_SWAPFILES - 1] = NULL;
-			return;
-		}
-	}
-	BUG();
-}
-
-/*
- * Unlike a standard unplug_io_fn, swap_unplug_io_fn is never called
- * through swap's backing_dev_info (which is only used by shrink_list),
- * but directly from sync_page when PageSwapCache: and takes the page
- * as argument, so that it can find the right device from swp_entry_t.
- */
-void swap_unplug_io_fn(struct page *page)
+void swap_unplug_io_fn(struct backing_dev_info *unused_bdi, struct page *page)
 {
 	swp_entry_t entry;
 
-	down(&swap_bdevs_sem);
+	down_read(&swap_unplug_sem);
 	entry.val = page->private;
 	if (PageSwapCache(page)) {
-		struct block_device *bdev = swap_bdevs[swp_type(entry)];
+		struct block_device *bdev = swap_info[swp_type(entry)].bdev;
 		struct backing_dev_info *bdi;
 
-		if (bdev) {
-			bdi = bdev->bd_inode->i_mapping->backing_dev_info;
-			(*bdi->unplug_io_fn)(bdi);
-		}
+		/*
+		 * If the page is removed from swapcache from under us (with a
+		 * racy try_to_unuse/swapoff) we need an additional reference
+		 * count to avoid reading garbage from page->private above. If
+		 * the WARN_ON triggers during a swapoff it maybe the race
+		 * condition and it's harmless. However if it triggers without
+		 * swapoff it signals a problem.
+		 */
+		WARN_ON(page_count(page) <= 1);
+
+		bdi = bdev->bd_inode->i_mapping->backing_dev_info;
+		bdi->unplug_io_fn(bdi, page);
 	}
-	up(&swap_bdevs_sem);
+	up_read(&swap_unplug_sem);
 }
 
 static inline int scan_swap_map(struct swap_info_struct *si)
@@ -1143,6 +1113,11 @@
 	current->flags |= PF_SWAPOFF;
 	err = try_to_unuse(type);
 	current->flags &= ~PF_SWAPOFF;
+
+	/* wait for any unplug function to finish */
+	down_write(&swap_unplug_sem);
+	up_write(&swap_unplug_sem);
+
 	if (err) {
 		/* re-insert swap space back into swap_list */
 		swap_list_lock();
@@ -1161,7 +1136,6 @@
 		goto out_dput;
 	}
 	down(&swapon_sem);
-	down(&swap_bdevs_sem);
 	swap_list_lock();
 	swap_device_lock(p);
 	swap_file = p->swap_file;
@@ -1173,8 +1147,6 @@
 	destroy_swap_extents(p);
 	swap_device_unlock(p);
 	swap_list_unlock();
-	remove_swap_bdev(p->bdev);
-	up(&swap_bdevs_sem);
 	up(&swapon_sem);
 	vfree(swap_map);
 	if (S_ISBLK(mapping->host->i_mode)) {
@@ -1518,7 +1490,6 @@
 		goto bad_swap;
 
 	down(&swapon_sem);
-	down(&swap_bdevs_sem);
 	swap_list_lock();
 	swap_device_lock(p);
 	p->flags = SWP_ACTIVE;
@@ -1544,8 +1515,6 @@
 	}
 	swap_device_unlock(p);
 	swap_list_unlock();
-	install_swap_bdev(p->bdev);
-	up(&swap_bdevs_sem);
 	up(&swapon_sem);
 	error = 0;
 	goto out;
diff -Nru a/mm/vmscan.c b/mm/vmscan.c
--- a/mm/vmscan.c	Sun May 16 01:18:33 2004
+++ b/mm/vmscan.c	Sun May 16 01:18:33 2004
@@ -153,20 +153,23 @@
 		delta *= (*shrinker->shrinker)(0, gfp_mask);
 		do_div(delta, pages + 1);
 		shrinker->nr += delta;
-		if (shrinker->nr > SHRINK_BATCH) {
-			long nr_to_scan = shrinker->nr;
+		if (shrinker->nr < 0)
+			shrinker->nr = LONG_MAX;	/* It wrapped! */
 
-			shrinker->nr = 0;
-			mod_page_state(slabs_scanned, nr_to_scan);
-			while (nr_to_scan) {
-				long this_scan = nr_to_scan;
-
-				if (this_scan > 128)
-					this_scan = 128;
-				(*shrinker->shrinker)(this_scan, gfp_mask);
-				nr_to_scan -= this_scan;
-				cond_resched();
-			}
+		if (shrinker->nr <= SHRINK_BATCH)
+			continue;
+		while (shrinker->nr) {
+			long this_scan = shrinker->nr;
+			int shrink_ret;
+
+			if (this_scan > 128)
+				this_scan = 128;
+			shrink_ret = (*shrinker->shrinker)(this_scan, gfp_mask);
+			mod_page_state(slabs_scanned, this_scan);
+			shrinker->nr -= this_scan;
+			if (shrink_ret == -1)
+				break;
+			cond_resched();
 		}
 	}
 	up(&shrinker_sem);
@@ -273,11 +276,11 @@
 		if (PageWriteback(page))
 			goto keep_locked;
 
-		rmap_lock(page);
+		page_map_lock(page);
 		referenced = page_referenced(page);
 		if (referenced && page_mapping_inuse(page)) {
 			/* In active use or really unfreeable.  Activate it. */
-			rmap_unlock(page);
+			page_map_unlock(page);
 			goto activate_locked;
 		}
 
@@ -292,10 +295,10 @@
 		 * XXX: implement swap clustering ?
 		 */
 		if (PageAnon(page) && !PageSwapCache(page)) {
-			rmap_unlock(page);
+			page_map_unlock(page);
 			if (!add_to_swap(page))
 				goto activate_locked;
-			rmap_lock(page);
+			page_map_lock(page);
 		}
 		if (PageSwapCache(page)) {
 			mapping = &swapper_space;
@@ -310,16 +313,16 @@
 		if (page_mapped(page) && mapping) {
 			switch (try_to_unmap(page)) {
 			case SWAP_FAIL:
-				rmap_unlock(page);
+				page_map_unlock(page);
 				goto activate_locked;
 			case SWAP_AGAIN:
-				rmap_unlock(page);
+				page_map_unlock(page);
 				goto keep_locked;
 			case SWAP_SUCCESS:
 				; /* try to free the page below */
 			}
 		}
-		rmap_unlock(page);
+		page_map_unlock(page);
 
 		/*
 		 * If the page is dirty, only perform writeback if that write
@@ -498,14 +501,16 @@
 			if (!TestClearPageLRU(page))
 				BUG();
 			list_del(&page->lru);
-			if (page_count(page) == 0) {
-				/* It is currently in pagevec_release() */
+			if (get_page_testone(page)) {
+				/*
+				 * It is being freed elsewhere
+				 */
+				__put_page(page);
 				SetPageLRU(page);
 				list_add(&page->lru, &zone->inactive_list);
 				continue;
 			}
 			list_add(&page->lru, &page_list);
-			page_cache_get(page);
 			nr_taken++;
 		}
 		zone->nr_inactive -= nr_taken;
@@ -571,7 +576,7 @@
  * It is safe to rely on PG_active against the non-LRU pages in here because
  * nobody will play with that bit on a non-LRU page.
  *
- * The downside is that we have to touch page->count against each page.
+ * The downside is that we have to touch page->_count against each page.
  * But we had to alter page->flags anyway.
  */
 static void
@@ -600,12 +605,17 @@
 		if (!TestClearPageLRU(page))
 			BUG();
 		list_del(&page->lru);
-		if (page_count(page) == 0) {
-			/* It is currently in pagevec_release() */
+		if (get_page_testone(page)) {
+			/*
+			 * It was already free!  release_pages() or put_page()
+			 * are about to remove it from the LRU and free it. So
+			 * put the refcount back and put the page back on the
+			 * LRU
+			 */
+			__put_page(page);
 			SetPageLRU(page);
 			list_add(&page->lru, &zone->active_list);
 		} else {
-			page_cache_get(page);
 			list_add(&page->lru, &l_hold);
 			pgmoved++;
 		}
@@ -653,13 +663,13 @@
 				list_add(&page->lru, &l_active);
 				continue;
 			}
-			rmap_lock(page);
+			page_map_lock(page);
 			if (page_referenced(page)) {
-				rmap_unlock(page);
+				page_map_unlock(page);
 				list_add(&page->lru, &l_active);
 				continue;
 			}
-			rmap_unlock(page);
+			page_map_unlock(page);
 		}
 		/*
 		 * FIXME: need to consider page_count(page) here if/when we
diff -Nru a/net/bluetooth/rfcomm/core.c b/net/bluetooth/rfcomm/core.c
--- a/net/bluetooth/rfcomm/core.c	Sun May 16 01:18:33 2004
+++ b/net/bluetooth/rfcomm/core.c	Sun May 16 01:18:33 2004
@@ -158,8 +158,7 @@
 
 	BT_DBG("");
 
-	err = sock_create_kern(PF_BLUETOOTH, SOCK_SEQPACKET,
-			       BTPROTO_L2CAP, sock);
+	err = sock_create_kern(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP, sock);
 	if (!err) {
 		struct sock *sk = (*sock)->sk;
 		sk->sk_data_ready   = rfcomm_l2data_ready;
@@ -1642,9 +1641,9 @@
 
 	BT_DBG("session %p", s);
 
-	if (sock_create_lite(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP, &nsock))
+	if (sock_create_lite(PF_BLUETOOTH, sock->type, BTPROTO_L2CAP, &nsock))
 		return;
-	
+
 	nsock->ops  = sock->ops;
 
 	__module_get(nsock->ops->owner);
diff -Nru a/net/bridge/br_fdb.c b/net/bridge/br_fdb.c
--- a/net/bridge/br_fdb.c	Sun May 16 01:18:33 2004
+++ b/net/bridge/br_fdb.c	Sun May 16 01:18:33 2004
@@ -277,18 +277,18 @@
 		if (!memcmp(fdb->addr.addr, addr, ETH_ALEN)) {
 			/* attempt to update an entry for a local interface */
 			if (unlikely(fdb->is_local)) {
-				if (is_local) 
-					printk(KERN_INFO "%s: attempt to add"
-					       " interface with same source address.\n",
-					       source->dev->name);
-				else if (net_ratelimit()) 
-					printk(KERN_WARNING "%s: received packet with "
-					       " own address as source address\n",
-					       source->dev->name);
-				ret = -EEXIST;
+				/* it is okay to have multiple ports with same 
+				 * address, just don't allow to be spoofed.
+				 */
+				if (!is_local) {
+					if (net_ratelimit()) 
+						printk(KERN_WARNING "%s: received packet with "
+						       " own address as source address\n",
+						       source->dev->name);
+					ret = -EEXIST;
+				}
 				goto out;
 			}
-
 
 			if (likely(!fdb->is_static || is_local)) {
 				/* move to end of age list */
diff -Nru a/net/core/dev.c b/net/core/dev.c
--- a/net/core/dev.c	Sun May 16 01:18:35 2004
+++ b/net/core/dev.c	Sun May 16 01:18:35 2004
@@ -785,13 +785,15 @@
 /**
  *	dev_change_name - change name of a device
  *	@dev: device
- *	@name: name (or format string) must be at least IFNAMSIZ
+ *	@newname: name (or format string) must be at least IFNAMSIZ
  *
  *	Change name of a device, can pass format strings "eth%d".
  *	for wildcarding.
  */
 int dev_change_name(struct net_device *dev, char *newname)
 {
+	int err = 0;
+
 	ASSERT_RTNL();
 
 	if (dev->flags & IFF_UP)
@@ -801,7 +803,7 @@
 		return -EINVAL;
 
 	if (strchr(newname, '%')) {
-		int err = dev_alloc_name(dev, newname);
+		err = dev_alloc_name(dev, newname);
 		if (err < 0)
 			return err;
 		strcpy(newname, dev->name);
@@ -811,12 +813,14 @@
 	else
 		strlcpy(dev->name, newname, IFNAMSIZ);
 
-	hlist_del(&dev->name_hlist);
-	hlist_add_head(&dev->name_hlist, dev_name_hash(dev->name));
+	err = class_device_rename(&dev->class_dev, dev->name);
+	if (!err) {
+		hlist_del(&dev->name_hlist);
+		hlist_add_head(&dev->name_hlist, dev_name_hash(dev->name));
+		notifier_call_chain(&netdev_chain, NETDEV_CHANGENAME, dev);
+	}
 
-	class_device_rename(&dev->class_dev, dev->name);
-	notifier_call_chain(&netdev_chain, NETDEV_CHANGENAME, dev);
-	return 0;
+	return err;
 }
 
 /**
diff -Nru a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
--- a/net/ipv4/tcp_ipv4.c	Sun May 16 01:18:34 2004
+++ b/net/ipv4/tcp_ipv4.c	Sun May 16 01:18:34 2004
@@ -2452,7 +2452,7 @@
 	int ttd = req->expires - jiffies;
 
 	sprintf(tmpbuf, "%4d: %08X:%04X %08X:%04X"
-		" %02X %08X:%08X %02X:%08X %08X %5d %8d %u %d %p",
+		" %02X %08X:%08X %02X:%08lX %08X %5d %8d %u %d %p",
 		i,
 		req->af.v4_req.loc_addr,
 		ntohs(inet_sk(sk)->sport),
@@ -2526,7 +2526,7 @@
 	srcp  = ntohs(tw->tw_sport);
 
 	sprintf(tmpbuf, "%4d: %08X:%04X %08X:%04X"
-		" %02X %08X:%08X %02X:%08X %08X %5d %8d %d %d %p",
+		" %02X %08X:%08X %02X:%08lX %08X %5d %8d %d %d %p",
 		i, src, srcp, dest, destp, tw->tw_substate, 0, 0,
 		3, jiffies_to_clock_t(ttd), 0, 0, 0, 0,
 		atomic_read(&tw->tw_refcnt), tw);
diff -Nru a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
--- a/net/ipv6/tcp_ipv6.c	Sun May 16 01:18:35 2004
+++ b/net/ipv6/tcp_ipv6.c	Sun May 16 01:18:35 2004
@@ -1933,7 +1933,7 @@
 	dest = &req->af.v6_req.rmt_addr;
 	seq_printf(seq,
 		   "%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X "
-		   "%02X %08X:%08X %02X:%08X %08X %5d %8d %d %d %p\n",
+		   "%02X %08X:%08X %02X:%08lX %08X %5d %8d %d %d %p\n",
 		   i,
 		   src->s6_addr32[0], src->s6_addr32[1],
 		   src->s6_addr32[2], src->s6_addr32[3],
@@ -2019,7 +2019,7 @@
 
 	seq_printf(seq,
 		   "%4d: %08X%08X%08X%08X:%04X %08X%08X%08X%08X:%04X "
-		   "%02X %08X:%08X %02X:%08X %08X %5d %8d %d %d %p\n",
+		   "%02X %08X:%08X %02X:%08lX %08X %5d %8d %d %d %p\n",
 		   i,
 		   src->s6_addr32[0], src->s6_addr32[1],
 		   src->s6_addr32[2], src->s6_addr32[3], srcp,
diff -Nru a/net/irda/ircomm/ircomm_tty.c b/net/irda/ircomm/ircomm_tty.c
--- a/net/irda/ircomm/ircomm_tty.c	Sun May 16 01:18:34 2004
+++ b/net/irda/ircomm/ircomm_tty.c	Sun May 16 01:18:34 2004
@@ -873,7 +873,7 @@
 	orig_jiffies = jiffies;
 
 	/* Set poll time to 200 ms */
-	poll_time = IRDA_MIN(timeout, MSECS_TO_JIFFIES(200));
+	poll_time = IRDA_MIN(timeout, msecs_to_jiffies(200));
 
 	spin_lock_irqsave(&self->spinlock, flags);
 	while (self->tx_skb && self->tx_skb->len) {
diff -Nru a/net/irda/irlap_event.c b/net/irda/irlap_event.c
--- a/net/irda/irlap_event.c	Sun May 16 01:18:35 2004
+++ b/net/irda/irlap_event.c	Sun May 16 01:18:35 2004
@@ -627,7 +627,7 @@
 		if (irda_device_is_receiving(self->netdev) && !self->add_wait) {
 			IRDA_DEBUG(2, "%s(), device is slow to answer, "
 				   "waiting some more!\n", __FUNCTION__);
-			irlap_start_slot_timer(self, MSECS_TO_JIFFIES(10));
+			irlap_start_slot_timer(self, msecs_to_jiffies(10));
 			self->add_wait = TRUE;
 			return ret;
 		}
@@ -849,7 +849,7 @@
  *  1.5 times the time taken to transmit a SNRM frame. So this time should
  *  between 15 msecs and 45 msecs.
  */
-			irlap_start_backoff_timer(self, MSECS_TO_JIFFIES(20 +
+			irlap_start_backoff_timer(self, msecs_to_jiffies(20 +
 						        (jiffies % 30)));
 		} else {
 			/* Always switch state before calling upper layers */
@@ -1506,7 +1506,7 @@
 		if (irda_device_is_receiving(self->netdev) && !self->add_wait) {
 			IRDA_DEBUG(1, "FINAL_TIMER_EXPIRED when receiving a "
 			      "frame! Waiting a little bit more!\n");
-			irlap_start_final_timer(self, MSECS_TO_JIFFIES(300));
+			irlap_start_final_timer(self, msecs_to_jiffies(300));
 
 			/*
 			 *  Don't allow this to happen one more time in a row,
diff -Nru a/net/sctp/associola.c b/net/sctp/associola.c
--- a/net/sctp/associola.c	Sun May 16 01:18:33 2004
+++ b/net/sctp/associola.c	Sun May 16 01:18:33 2004
@@ -142,9 +142,9 @@
 	 * socket values.
 	 */
 	asoc->max_retrans = sp->assocparams.sasoc_asocmaxrxt;
-	asoc->rto_initial = MSECS_TO_JIFFIES(sp->rtoinfo.srto_initial);
-	asoc->rto_max = MSECS_TO_JIFFIES(sp->rtoinfo.srto_max);
-	asoc->rto_min = MSECS_TO_JIFFIES(sp->rtoinfo.srto_min);
+	asoc->rto_initial = msecs_to_jiffies(sp->rtoinfo.srto_initial);
+	asoc->rto_max = msecs_to_jiffies(sp->rtoinfo.srto_max);
+	asoc->rto_min = msecs_to_jiffies(sp->rtoinfo.srto_min);
 
 	asoc->overall_error_count = 0;
 
@@ -170,7 +170,7 @@
 	asoc->max_init_attempts	= sp->initmsg.sinit_max_attempts;
 
 	asoc->max_init_timeo =
-		 MSECS_TO_JIFFIES(sp->initmsg.sinit_max_init_timeo);
+		 msecs_to_jiffies(sp->initmsg.sinit_max_init_timeo);
 
 	/* Allocate storage for the ssnmap after the inbound and outbound
 	 * streams have been negotiated during Init.
@@ -507,7 +507,7 @@
 	/* Initialize the peer's heartbeat interval based on the
 	 * sock configured value.
 	 */
-	peer->hb_interval = MSECS_TO_JIFFIES(sp->paddrparam.spp_hbinterval);
+	peer->hb_interval = msecs_to_jiffies(sp->paddrparam.spp_hbinterval);
 
 	/* Set the path max_retrans.  */
 	peer->max_retrans = asoc->max_retrans;
diff -Nru a/net/sctp/chunk.c b/net/sctp/chunk.c
--- a/net/sctp/chunk.c	Sun May 16 01:18:36 2004
+++ b/net/sctp/chunk.c	Sun May 16 01:18:36 2004
@@ -186,7 +186,7 @@
 	if (sinfo->sinfo_timetolive) {
 		/* sinfo_timetolive is in milliseconds */
 		msg->expires_at = jiffies +
-				    MSECS_TO_JIFFIES(sinfo->sinfo_timetolive);
+				    msecs_to_jiffies(sinfo->sinfo_timetolive);
 		msg->can_abandon = 1;
 		SCTP_DEBUG_PRINTK("%s: msg:%p expires_at: %ld jiffies:%ld\n",
 				  __FUNCTION__, msg, msg->expires_at, jiffies);
diff -Nru a/net/sctp/endpointola.c b/net/sctp/endpointola.c
--- a/net/sctp/endpointola.c	Sun May 16 01:18:33 2004
+++ b/net/sctp/endpointola.c	Sun May 16 01:18:33 2004
@@ -129,7 +129,7 @@
 	ep->timeouts[SCTP_EVENT_TIMEOUT_T1_INIT] =
 		SCTP_DEFAULT_TIMEOUT_T1_INIT;
 	ep->timeouts[SCTP_EVENT_TIMEOUT_T2_SHUTDOWN] =
-		MSECS_TO_JIFFIES(sp->rtoinfo.srto_initial);
+		msecs_to_jiffies(sp->rtoinfo.srto_initial);
 	ep->timeouts[SCTP_EVENT_TIMEOUT_T3_RTX] = 0;
 	ep->timeouts[SCTP_EVENT_TIMEOUT_T4_RTO] = 0;
 
@@ -138,7 +138,7 @@
 	 * recommended value of 5 times 'RTO.Max'.
 	 */
         ep->timeouts[SCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD]
-		= 5 * MSECS_TO_JIFFIES(sp->rtoinfo.srto_max);
+		= 5 * msecs_to_jiffies(sp->rtoinfo.srto_max);
 
 	ep->timeouts[SCTP_EVENT_TIMEOUT_HEARTBEAT] =
 		SCTP_DEFAULT_TIMEOUT_HEARTBEAT;
diff -Nru a/net/sctp/socket.c b/net/sctp/socket.c
--- a/net/sctp/socket.c	Sun May 16 01:18:37 2004
+++ b/net/sctp/socket.c	Sun May 16 01:18:37 2004
@@ -1224,7 +1224,7 @@
 			}
 			if (sinit->sinit_max_init_timeo) {
 				asoc->max_init_timeo = 
-				 MSECS_TO_JIFFIES(sinit->sinit_max_init_timeo);
+				 msecs_to_jiffies(sinit->sinit_max_init_timeo);
 			}
 		}
 
@@ -1662,7 +1662,7 @@
 		if (params.spp_hbinterval) {
 			trans->hb_allowed = 1;
 			trans->hb_interval = 
-				MSECS_TO_JIFFIES(params.spp_hbinterval);
+				msecs_to_jiffies(params.spp_hbinterval);
 		} else
 			trans->hb_allowed = 0;
 	}
@@ -1835,11 +1835,11 @@
 	if (asoc) {
 		if (rtoinfo.srto_initial != 0)
 			asoc->rto_initial = 
-				MSECS_TO_JIFFIES(rtoinfo.srto_initial);
+				msecs_to_jiffies(rtoinfo.srto_initial);
 		if (rtoinfo.srto_max != 0)
-			asoc->rto_max = MSECS_TO_JIFFIES(rtoinfo.srto_max);
+			asoc->rto_max = msecs_to_jiffies(rtoinfo.srto_max);
 		if (rtoinfo.srto_min != 0)
-			asoc->rto_min = MSECS_TO_JIFFIES(rtoinfo.srto_min);
+			asoc->rto_min = msecs_to_jiffies(rtoinfo.srto_min);
 	} else {
 		/* If there is no association or the association-id = 0
 		 * set the values to the endpoint.
@@ -2379,14 +2379,14 @@
 	sp->initmsg.sinit_num_ostreams   = sctp_max_outstreams;
 	sp->initmsg.sinit_max_instreams  = sctp_max_instreams;
 	sp->initmsg.sinit_max_attempts   = sctp_max_retrans_init;
-	sp->initmsg.sinit_max_init_timeo = JIFFIES_TO_MSECS(sctp_rto_max);
+	sp->initmsg.sinit_max_init_timeo = jiffies_to_msecs(sctp_rto_max);
 
 	/* Initialize default RTO related parameters.  These parameters can
 	 * be modified for with the SCTP_RTOINFO socket option.
 	 */
-	sp->rtoinfo.srto_initial = JIFFIES_TO_MSECS(sctp_rto_initial);
-	sp->rtoinfo.srto_max     = JIFFIES_TO_MSECS(sctp_rto_max);
-	sp->rtoinfo.srto_min     = JIFFIES_TO_MSECS(sctp_rto_min);
+	sp->rtoinfo.srto_initial = jiffies_to_msecs(sctp_rto_initial);
+	sp->rtoinfo.srto_max     = jiffies_to_msecs(sctp_rto_max);
+	sp->rtoinfo.srto_min     = jiffies_to_msecs(sctp_rto_min);
 
 	/* Initialize default association related parameters. These parameters
 	 * can be modified with the SCTP_ASSOCINFO socket option.
@@ -2396,7 +2396,7 @@
 	sp->assocparams.sasoc_peer_rwnd = 0;
 	sp->assocparams.sasoc_local_rwnd = 0;
 	sp->assocparams.sasoc_cookie_life = 
-		JIFFIES_TO_MSECS(sctp_valid_cookie_life);
+		jiffies_to_msecs(sctp_valid_cookie_life);
 
 	/* Initialize default event subscriptions. By default, all the
 	 * options are off. 
@@ -2406,7 +2406,7 @@
 	/* Default Peer Address Parameters.  These defaults can
 	 * be modified via SCTP_PEER_ADDR_PARAMS
 	 */
-	sp->paddrparam.spp_hbinterval = JIFFIES_TO_MSECS(sctp_hb_interval);
+	sp->paddrparam.spp_hbinterval = jiffies_to_msecs(sctp_hb_interval);
 	sp->paddrparam.spp_pathmaxrxt = sctp_max_retrans_path;
 
 	/* If enabled no SCTP message fragmentation will be performed.
@@ -2552,7 +2552,7 @@
 	status.sstat_primary.spinfo_state = transport->active;
 	status.sstat_primary.spinfo_cwnd = transport->cwnd;
 	status.sstat_primary.spinfo_srtt = transport->srtt;
-	status.sstat_primary.spinfo_rto = JIFFIES_TO_MSECS(transport->rto);
+	status.sstat_primary.spinfo_rto = jiffies_to_msecs(transport->rto);
 	status.sstat_primary.spinfo_mtu = transport->pmtu;
 
 	if (put_user(len, optlen)) {
@@ -2607,7 +2607,7 @@
 	pinfo.spinfo_state = transport->active;
 	pinfo.spinfo_cwnd = transport->cwnd;
 	pinfo.spinfo_srtt = transport->srtt;
-	pinfo.spinfo_rto = JIFFIES_TO_MSECS(transport->rto);
+	pinfo.spinfo_rto = jiffies_to_msecs(transport->rto);
 	pinfo.spinfo_mtu = transport->pmtu;
 
 	if (put_user(len, optlen)) {
@@ -2811,7 +2811,7 @@
 	if (!trans->hb_allowed)
 		params.spp_hbinterval = 0;
 	else
-		params.spp_hbinterval = JIFFIES_TO_MSECS(trans->hb_interval);
+		params.spp_hbinterval = jiffies_to_msecs(trans->hb_interval);
 
 	/* spp_pathmaxrxt contains the maximum number of retransmissions
 	 * before this address shall be considered unreachable.
@@ -3168,9 +3168,9 @@
 
 	/* Values corresponding to the specific association. */
 	if (asoc) {
-		rtoinfo.srto_initial = JIFFIES_TO_MSECS(asoc->rto_initial);
-		rtoinfo.srto_max = JIFFIES_TO_MSECS(asoc->rto_max);
-		rtoinfo.srto_min = JIFFIES_TO_MSECS(asoc->rto_min);
+		rtoinfo.srto_initial = jiffies_to_msecs(asoc->rto_initial);
+		rtoinfo.srto_max = jiffies_to_msecs(asoc->rto_max);
+		rtoinfo.srto_min = jiffies_to_msecs(asoc->rto_min);
 	} else {
 		/* Values corresponding to the endpoint. */
 		struct sctp_opt *sp = sctp_sk(sk);
diff -Nru a/scripts/kallsyms.c b/scripts/kallsyms.c
--- a/scripts/kallsyms.c	Sun May 16 01:18:37 2004
+++ b/scripts/kallsyms.c	Sun May 16 01:18:37 2004
@@ -93,7 +93,6 @@
 static void
 write_src(void)
 {
-	unsigned long long last_addr;
 	int i, valid = 0;
 	char *prev;
 
@@ -111,16 +110,12 @@
 	printf(".globl kallsyms_addresses\n");
 	printf("\tALGN\n");
 	printf("kallsyms_addresses:\n");
-	for (i = 0, last_addr = 0; i < cnt; i++) {
+	for (i = 0; i < cnt; i++) {
 		if (!symbol_valid(&table[i]))
 			continue;
-		
-		if (table[i].addr == last_addr)
-			continue;
 
 		printf("\tPTR\t%#llx\n", table[i].addr);
 		valid++;
-		last_addr = table[i].addr;
 	}
 	printf("\n");
 
@@ -134,20 +129,16 @@
 	printf("\tALGN\n");
 	printf("kallsyms_names:\n");
 	prev = ""; 
-	for (i = 0, last_addr = 0; i < cnt; i++) {
+	for (i = 0; i < cnt; i++) {
 		int k;
 
 		if (!symbol_valid(&table[i]))
 			continue;
-		
-		if (table[i].addr == last_addr)
-			continue;
 
 		for (k = 0; table[i].sym[k] && table[i].sym[k] == prev[k]; ++k)
 			; 
 
 		printf("\t.byte 0x%02x\n\t.asciz\t\"%s\"\n", k, table[i].sym + k);
-		last_addr = table[i].addr;
 		prev = table[i].sym;
 	}
 	printf("\n");
diff -Nru a/scripts/modpost.c b/scripts/modpost.c
--- a/scripts/modpost.c	Sun May 16 01:18:34 2004
+++ b/scripts/modpost.c	Sun May 16 01:18:34 2004
@@ -267,6 +267,7 @@
 	hdr->e_shoff    = TO_NATIVE(hdr->e_shoff);
 	hdr->e_shstrndx = TO_NATIVE(hdr->e_shstrndx);
 	hdr->e_shnum    = TO_NATIVE(hdr->e_shnum);
+	hdr->e_machine  = TO_NATIVE(hdr->e_machine);
 	sechdrs = (void *)hdr + hdr->e_shoff;
 	info->sechdrs = sechdrs;
 
diff -Nru a/scripts/reference_discarded.pl b/scripts/reference_discarded.pl
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/scripts/reference_discarded.pl	Sun May 16 01:18:37 2004
@@ -0,0 +1,109 @@
+#!/usr/bin/perl -w
+#
+# reference_discarded.pl (C) Keith Owens 2001 <kaos@ocs.com.au>
+#
+# Released under GPL V2.
+#
+# List dangling references to vmlinux discarded sections.
+
+use strict;
+die($0 . " takes no arguments\n") if($#ARGV >= 0);
+
+my %object;
+my $object;
+my $line;
+my $ignore;
+my $errorcount;
+
+$| = 1;
+
+# printf("Finding objects, ");
+open(OBJDUMP_LIST, "find . -name '*.o' | xargs objdump -h |") || die "getting objdump list failed";
+while (defined($line = <OBJDUMP_LIST>)) {
+	chomp($line);
+	if ($line =~ /:\s+file format/) {
+		($object = $line) =~ s/:.*//;
+		$object{$object}->{'module'} = 0;
+		$object{$object}->{'size'} = 0;
+		$object{$object}->{'off'} = 0;
+	}
+	if ($line =~ /^\s*\d+\s+\.modinfo\s+/) {
+		$object{$object}->{'module'} = 1;
+	}
+	if ($line =~ /^\s*\d+\s+\.comment\s+/) {
+		($object{$object}->{'size'}, $object{$object}->{'off'}) = (split(' ', $line))[2,5];
+	}
+}
+close(OBJDUMP_LIST);
+# printf("%d objects, ", scalar keys(%object));
+$ignore = 0;
+foreach $object (keys(%object)) {
+	if ($object{$object}->{'module'}) {
+		++$ignore;
+		delete($object{$object});
+	}
+}
+# printf("ignoring %d module(s)\n", $ignore);
+
+# Ignore conglomerate objects, they have been built from multiple objects and we
+# only care about the individual objects.  If an object has more than one GCC:
+# string in the comment section then it is conglomerate.  This does not filter
+# out conglomerates that consist of exactly one object, can't be helped.
+
+# printf("Finding conglomerates, ");
+$ignore = 0;
+foreach $object (keys(%object)) {
+	if (exists($object{$object}->{'off'})) {
+		my ($off, $size, $comment, $l);
+		$off = hex($object{$object}->{'off'});
+		$size = hex($object{$object}->{'size'});
+		open(OBJECT, "<$object") || die "cannot read $object";
+		seek(OBJECT, $off, 0) || die "seek to $off in $object failed";
+		$l = read(OBJECT, $comment, $size);
+		die "read $size bytes from $object .comment failed" if ($l != $size);
+		close(OBJECT);
+		if ($comment =~ /GCC\:.*GCC\:/m) {
+			++$ignore;
+			delete($object{$object});
+		}
+	}
+}
+# printf("ignoring %d conglomerate(s)\n", $ignore);
+
+# printf("Scanning objects\n");
+$errorcount = 0;
+foreach $object (keys(%object)) {
+	my $from;
+	open(OBJDUMP, "objdump -r $object|") || die "cannot objdump -r $object";
+	while (defined($line = <OBJDUMP>)) {
+		chomp($line);
+		if ($line =~ /RELOCATION RECORDS FOR /) {
+			($from = $line) =~ s/.*\[([^]]*).*/$1/;
+		}
+		if (($line =~ /\.text\.exit$/ ||
+		     $line =~ /\.exit\.text$/ ||
+		     $line =~ /\.data\.exit$/ ||
+		     $line =~ /\.exit\.data$/ ||
+		     $line =~ /\.exitcall\.exit$/) &&
+		    ($from !~ /\.text\.exit$/ &&
+		     $from !~ /\.exit\.text$/ &&
+		     $from !~ /\.data\.exit$/ &&
+		     $from !~ /\.exit\.data$/ &&
+		     $from !~ /\.altinstructions$/ &&
+		     $from !~ /\.debug_info$/ &&
+		     $from !~ /\.debug_aranges$/ &&
+		     $from !~ /\.debug_ranges$/ &&
+		     $from !~ /\.debug_line$/ &&
+		     $from !~ /\.debug_frame$/ &&
+		     $from !~ /\.exitcall\.exit$/ &&
+		     $from !~ /\.eh_frame$/ &&
+		     $from !~ /\.stab$/)) {
+			printf("Error: %s %s refers to %s\n", $object, $from, $line);
+			$errorcount = $errorcount + 1;
+		}
+	}
+	close(OBJDUMP);
+}
+# printf("Done\n");
+
+exit($errorcount);
diff -Nru a/security/Makefile b/security/Makefile
--- a/security/Makefile	Sun May 16 01:18:36 2004
+++ b/security/Makefile	Sun May 16 01:18:36 2004
@@ -6,7 +6,7 @@
 
 # if we don't select a security model, use the default capabilities
 ifneq ($(CONFIG_SECURITY),y)
-obj-y		+= commoncap.o capability.o
+obj-y		+= commoncap.o
 endif
 
 # Object file lists
diff -Nru a/security/capability.c b/security/capability.c
--- a/security/capability.c	Sun May 16 01:18:34 2004
+++ b/security/capability.c	Sun May 16 01:18:34 2004
@@ -23,9 +23,6 @@
 #include <linux/netlink.h>
 #include <linux/ptrace.h>
 
-#ifdef CONFIG_SECURITY
-
-
 static struct security_operations capability_ops = {
 	.ptrace =			cap_ptrace,
 	.capget =			cap_capget,
@@ -50,11 +47,7 @@
 	.vm_enough_memory =             cap_vm_enough_memory,
 };
 
-#if defined(CONFIG_SECURITY_CAPABILITIES_MODULE)
-#define MY_NAME THIS_MODULE->name
-#else
-#define MY_NAME "capability"
-#endif
+#define MY_NAME __stringify(KBUILD_MODNAME)
 
 /* flag to keep track of how we were registered */
 static int secondary;
@@ -64,8 +57,6 @@
 {
 	/* register ourselves with the security framework */
 	if (register_security (&capability_ops)) {
-		printk (KERN_INFO
-			"Failure registering capabilities with the kernel\n");
 		/* try registering with primary module */
 		if (mod_reg_security (MY_NAME, &capability_ops)) {
 			printk (KERN_INFO "Failure registering capabilities "
@@ -74,7 +65,8 @@
 		}
 		secondary = 1;
 	}
-	printk (KERN_INFO "Capability LSM initialized\n");
+	printk (KERN_INFO "Capability LSM initialized%s\n",
+		secondary ? " as secondary" : "");
 	return 0;
 }
 
@@ -99,5 +91,3 @@
 
 MODULE_DESCRIPTION("Standard Linux Capabilities Security Module");
 MODULE_LICENSE("GPL");
-
-#endif	/* CONFIG_SECURITY */
diff -Nru a/security/commoncap.c b/security/commoncap.c
--- a/security/commoncap.c	Sun May 16 01:18:34 2004
+++ b/security/commoncap.c	Sun May 16 01:18:34 2004
@@ -289,7 +289,7 @@
 
 int cap_syslog (int type)
 {
-	if ((type != 3) && !capable(CAP_SYS_ADMIN))
+	if ((type != 3 && type != 10) && !capable(CAP_SYS_ADMIN))
 		return -EPERM;
 	return 0;
 }
diff -Nru a/security/dummy.c b/security/dummy.c
--- a/security/dummy.c	Sun May 16 01:18:34 2004
+++ b/security/dummy.c	Sun May 16 01:18:34 2004
@@ -99,7 +99,7 @@
 
 static int dummy_syslog (int type)
 {
-	if ((type != 3) && current->euid)
+	if ((type != 3 && type != 10) && current->euid)
 		return -EPERM;
 	return 0;
 }
diff -Nru a/security/selinux/hooks.c b/security/selinux/hooks.c
--- a/security/selinux/hooks.c	Sun May 16 01:18:36 2004
+++ b/security/selinux/hooks.c	Sun May 16 01:18:36 2004
@@ -62,6 +62,7 @@
 #include <linux/nfs_mount.h>
 #include <net/ipv6.h>
 #include <linux/hugetlb.h>
+#include <linux/major.h>
 
 #include "avc.h"
 #include "objsec.h"
@@ -1475,6 +1476,7 @@
 
 	switch (type) {
 		case 3:         /* Read last kernel messages */
+		case 10:        /* Return size of the log buffer */
 			rc = task_has_system(current, SYSTEM__SYSLOG_READ);
 			break;
 		case 6:         /* Disable logging to console */
@@ -1712,18 +1714,77 @@
 	kfree(bsec);
 }
 
+/* Create an open file that refers to the null device.
+   Derived from the OpenWall LSM. */
+struct file *open_devnull(void)
+{
+	struct inode *inode;
+	struct dentry *dentry;
+	struct file *file = NULL;
+	struct inode_security_struct *isec;
+	dev_t dev;
+
+	inode = new_inode(current->fs->rootmnt->mnt_sb);
+	if (!inode)
+		goto out;
+
+	dentry = dget(d_alloc_root(inode));
+	if (!dentry)
+		goto out_iput;
+
+	file = get_empty_filp();
+	if (!file)
+		goto out_dput;
+
+	dev = MKDEV(MEM_MAJOR, 3); /* null device */
+
+	inode->i_uid = current->fsuid;
+	inode->i_gid = current->fsgid;
+	inode->i_blksize = PAGE_SIZE;
+	inode->i_blocks = 0;
+	inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
+	inode->i_state = I_DIRTY; /* so that mark_inode_dirty won't touch us */
+
+	isec = inode->i_security;
+	isec->sid = SECINITSID_DEVNULL;
+	isec->sclass = SECCLASS_CHR_FILE;
+	isec->initialized = 1;
+
+	file->f_flags = O_RDWR;
+	file->f_mode = FMODE_READ | FMODE_WRITE;
+	file->f_dentry = dentry;
+	file->f_vfsmnt = mntget(current->fs->rootmnt);
+	file->f_pos = 0;
+
+	init_special_inode(inode, S_IFCHR | S_IRUGO | S_IWUGO, dev);
+	if (inode->i_fop->open(inode, file))
+		goto out_fput;
+
+out:
+	return file;
+out_fput:
+	mntput(file->f_vfsmnt);
+	put_filp(file);
+out_dput:
+	dput(dentry);
+out_iput:
+	iput(inode);
+	file = NULL;
+	goto out;
+}
+
 /* Derived from fs/exec.c:flush_old_files. */
 static inline void flush_unauthorized_files(struct files_struct * files)
 {
 	struct avc_audit_data ad;
-	struct file *file;
+	struct file *file, *devnull = NULL;
 	long j = -1;
 
 	AVC_AUDIT_DATA_INIT(&ad,FS);
 
 	spin_lock(&files->file_lock);
 	for (;;) {
-		unsigned long set, i;
+		unsigned long set, i, fd;
 
 		j++;
 		i = j * __NFDBITS;
@@ -1740,8 +1801,27 @@
 					continue;
 				if (file_has_perm(current,
 						  file,
-						  file_to_av(file)))
+						  file_to_av(file))) {
 					sys_close(i);
+					fd = get_unused_fd();
+					if (fd != i) {
+						if (fd >= 0)
+							put_unused_fd(fd);
+						fput(file);
+						continue;
+					}
+					if (devnull) {
+						atomic_inc(&devnull->f_count);
+					} else {
+						devnull = open_devnull();
+						if (!devnull) {
+							put_unused_fd(fd);
+							fput(file);
+							continue;
+						}
+					}
+					fd_install(fd, devnull);
+				}
 				fput(file);
 			}
 		}
diff -Nru a/security/selinux/include/flask.h b/security/selinux/include/flask.h
--- a/security/selinux/include/flask.h	Sun May 16 01:18:35 2004
+++ b/security/selinux/include/flask.h	Sun May 16 01:18:35 2004
@@ -65,7 +65,8 @@
 #define SECINITSID_KMOD                                 24
 #define SECINITSID_POLICY                               25
 #define SECINITSID_SCMP_PACKET                          26
+#define SECINITSID_DEVNULL                              27
 
-#define SECINITSID_NUM                                  26
+#define SECINITSID_NUM                                  27
 
 #endif
diff -Nru a/security/selinux/include/initial_sid_to_string.h b/security/selinux/include/initial_sid_to_string.h
--- a/security/selinux/include/initial_sid_to_string.h	Sun May 16 01:18:36 2004
+++ b/security/selinux/include/initial_sid_to_string.h	Sun May 16 01:18:36 2004
@@ -28,5 +28,6 @@
     "kmod",
     "policy",
     "scmp_packet",
+    "devnull",
 };
 
diff -Nru a/sound/core/Kconfig b/sound/core/Kconfig
--- a/sound/core/Kconfig	Sun May 16 01:18:36 2004
+++ b/sound/core/Kconfig	Sun May 16 01:18:36 2004
@@ -1,7 +1,7 @@
 # ALSA soundcard-configuration
 config SND_BIT32_EMUL
 	tristate "Emulation for 32-bit applications"
-	depends on SND && SND_PCM && (SPARC64 || PPC64 || X86_64 && IA32_EMULATION)
+	depends on SND && SND_PCM && (MIPS64 || SPARC64 || PPC64 || X86_64 && IA32_EMULATION)
 
 config SND_TIMER
 	tristate
diff -Nru a/sound/oss/Kconfig b/sound/oss/Kconfig
--- a/sound/oss/Kconfig	Sun May 16 01:18:36 2004
+++ b/sound/oss/Kconfig	Sun May 16 01:18:36 2004
@@ -34,101 +34,30 @@
 
 config SOUND_CMPCI_FM
 	bool "Enable legacy FM"
-	depends on SOUND_CMPCI
+	depends on SOUND_CMPCI && X86
 	help
-	  Say Y here to enable the legacy FM (frequency-modulation) synthesis
-	  support on a card using the CMI8338 or CMI8378 chipset.
+	  Say Y here to enable the legacy FM (frequency-modulation) synthesizer
+	  support on a card using the CMI8338 or CMI8378 chipset. Even it is
+	  enabled, you need to set fmio as proper value to enable it.
 	  Say N here if you don't need this.
 
-config SOUND_CMPCI_FMIO
-	hex "FM I/O 388, 3C8, 3E0, 3E8"
-	depends on SOUND_CMPCI_FM
-	default "388"
-	help
-	  Set the base I/O address for FM synthesis control on a card using
-	  the CMI8338 or CMI8378 chipset.
-	  The default is 388; other choices are 3c8, 3e0, or 3e8.
-
 config SOUND_CMPCI_MIDI
 	bool "Enable legacy MPU-401"
-	depends on SOUND_CMPCI
+	depends on SOUND_CMPCI && X86
 	help
-	  Say Y here to enable the legacy MP401 MIDI synthesis support on a
-	  card using the CMI8338 or CMI8378 chipset.
+	  Say Y here to enable the legacy MPU401 MIDI synthesizer support on a
+	  card using the CMI8338 or CMI8378 chipset. Even it is enabled,
+	  you need to set mpuio as proper value to enable it.
 	  Say N here if you don't need this.
 
-config SOUND_CMPCI_MPUIO
-	hex "MPU-401 I/O 330, 320, 310, 300"
-	depends on SOUND_CMPCI_MIDI
-	default "330"
-	help
-	  Set the base I/O address for MP401 MIDI synthesis control on a card
-	  using the CMI8338 or CMI8378 chipset.
-	  The default is 330; other choices are 320, 310, or 300.
-
 config SOUND_CMPCI_JOYSTICK
 	bool "Enable joystick"
-	depends on SOUND_CMPCI
-	help
-	  Say here in order to enable the joystick port on a sound crd using
-	  the CMI8338 or the CMI8738 chipset.  Data on these chips are
-	  available at <http://www.cmedia.com.tw/>.
-
-config SOUND_CMPCI_CM8738
-	bool "Support CMI8738 based audio cards"
-	depends on SOUND_CMPCI
-	help
-	  Say Y or M if you have a PCI sound card using the CMI8338
-	  or the CMI8378 chipset.  Data on this chip is available at
-	  <http://www.cmedia.com.tw/doc8738.htm>.
-
-	  A userspace utility to control some internal registers of these
-	  chips is available at
-	  <http://member.nifty.ne.jp/Breeze/softwares/unix/cmictl-e.html>.
-
-config SOUND_CMPCI_SPDIFINVERSE
-	bool "Inverse S/PDIF in for CMI8738"
-	depends on SOUND_CMPCI_CM8738
+	depends on SOUND_CMPCI && X86
 	help
-	  Say Y here to have the driver invert the signal presented on SPDIF IN
-	  of a card using the CMI8338 or CMI8378 chipset.
+	  Say Y here in order to enable the joystick port on a sound card using
+	  the CMI8338 or the CMI8738 chipset.  You need to config the
+	  gameport support and set joystick parameter as 1 to use it.
 	  Say N here if you don't need this.
-
-config SOUND_CMPCI_SPDIFLOOP
-	bool "Enable S/PDIF loop for CMI8738"
-	depends on SOUND_CMPCI_CM8738
-	help
-	  Enable loopback from SPDIF in to SPDIF out.  For discussion, see
-	  "The 8738 Audio SPDIF In/Out Technical Data" on the technical
-	  support page at <http://www.cmedia.com.tw/>.
-
-	  A userspace utility to control even more internal registers of these
-	  chips is available at
-	  <http://member.nifty.ne.jp/Breeze/softwares/unix/cmictl-e.html>.
-	  This package will among other things help you enable SPDIF 
-	  out/in/loop/monitor.
-
-config SOUND_CMPCI_SPEAKERS
-	int "Number of speakers 2, 4, 5, 6"
-	depends on SOUND_CMPCI_CM8738
-	default "2"
-	help
-	  Specify the number of speaker channels you want the card to drive,
-	  as an integer.
-
-config SOUND_CMPCI_LINE_REAR
-	bool "Use Line-in as Read-out"
-	depends on SOUND_CMPCI_CM8738 && SOUND_CMPCI_SPEAKERS!=2
-	help
-	  Say Y here to enable using line-in jack as an output jack for a rear
-	  speaker.  Say N here if you don't need this.
-
-config SOUND_CMPCI_LINE_BASS
-	bool "Use Line-in as Bass"
-	depends on SOUND_CMPCI_CM8738 && SOUND_CMPCI_SPEAKERS!=2
-	help
-	  Say Y here to enable using line-in jack as an output jack for a bass
-	  speaker.  Say N here if you don't need this.
 
 config SOUND_EMU10K1
 	tristate "Creative SBLive! (EMU10K1)"
diff -Nru a/sound/oss/Makefile b/sound/oss/Makefile
--- a/sound/oss/Makefile	Sun May 16 01:18:34 2004
+++ b/sound/oss/Makefile	Sun May 16 01:18:34 2004
@@ -55,6 +55,12 @@
 obj-$(CONFIG_SOUND_ICH)		+= i810_audio.o ac97_codec.o
 obj-$(CONFIG_SOUND_SONICVIBES)	+= sonicvibes.o
 obj-$(CONFIG_SOUND_CMPCI)	+= cmpci.o
+ifeq ($(CONFIG_SOUND_CMPCI_FM),y)
+  obj-$(CONFIG_SOUND_CMPCI)     += sound.o opl3.o
+endif
+ifeq ($(CONFIG_SOUND_CMPCI_MIDI),y)
+  obj-$(CONFIG_SOUND_CMPCI)     += sound.o mpu401.o
+endif
 obj-$(CONFIG_SOUND_ES1370)	+= es1370.o
 obj-$(CONFIG_SOUND_ES1371)	+= es1371.o ac97_codec.o
 obj-$(CONFIG_SOUND_VRC5477)	+= nec_vrc5477.o ac97_codec.o
diff -Nru a/sound/oss/ac97_plugin_ad1980.c b/sound/oss/ac97_plugin_ad1980.c
--- a/sound/oss/ac97_plugin_ad1980.c	Sun May 16 01:18:33 2004
+++ b/sound/oss/ac97_plugin_ad1980.c	Sun May 16 01:18:33 2004
@@ -75,7 +75,7 @@
 
 	/* Switch the inputs/outputs over (from Dell code) */
 	control = codec->codec_read(codec, AC97_AD_MISC);
-	codec->codec_write(codec, AC97_AD_MISC, control | 0x0420);
+	codec->codec_write(codec, AC97_AD_MISC, control | 0x4420);
 	
 	/* We could refuse the device since we dont need to hang around,
 	   but we will claim it */
diff -Nru a/sound/oss/ad1848.c b/sound/oss/ad1848.c
--- a/sound/oss/ad1848.c	Sun May 16 01:18:35 2004
+++ b/sound/oss/ad1848.c	Sun May 16 01:18:35 2004
@@ -624,6 +624,7 @@
 			devc->supported_devices = MODE3_MIXER_DEVICES;
 			break;
 		case MD_4232:
+		case MD_4235:
 		case MD_4236:
 			devc->supported_devices = MODE3_MIXER_DEVICES;
 			break;
diff -Nru a/sound/oss/cmpci.c b/sound/oss/cmpci.c
--- a/sound/oss/cmpci.c	Sun May 16 01:18:35 2004
+++ b/sound/oss/cmpci.c	Sun May 16 01:18:35 2004
@@ -1,16 +1,13 @@
-/*****************************************************************************/
 /*
  *      cmpci.c  --  C-Media PCI audio driver.
  *
- *      Copyright (C) 1999  ChenLi Tien (cltien@cmedia.com.tw)
- *      		    C-media support (support@cmedia.com.tw)
+ *      Copyright (C) 1999  C-media support (support@cmedia.com.tw)
  *
  *      Based on the PCI drivers by Thomas Sailer (sailer@ife.ee.ethz.ch)
  *
  * 	For update, visit:
- * 		http://members.home.net/puresoft/cmedia.html
  * 		http://www.cmedia.com.tw
- * 	
+ *
  *      This program is free software; you can redistribute it and/or modify
  *      it under the terms of the GNU General Public License as published by
  *      the Free Software Foundation; either version 2 of the License, or
@@ -77,16 +74,38 @@
  *    08/10/2001 - use set_current_state in some more places
  *
  *	Carlos Eduardo Gorges <carlos@techlinux.com.br>
- *	Fri May 25 2001 
+ *	Fri May 25 2001
  *	- SMP support ( spin[un]lock* revision )
- *	- speaker mixer support 
+ *	- speaker mixer support
  *	Mon Aug 13 2001
  *	- optimizations and cleanups
+ *
  *    03/01/2003 - open_mode fixes from Georg Acher <acher@in.tum.de>
+ *	Simon Braunschmidt <brasimon@web.de>
+ *     Sat Jan 31 2004
+ *	- provide support for opl3 FM by releasing IO range after initialization
  *
+ *    ChenLi Tien <cltien@cmedia.com.tw>
+ *    Mar 9 2004
+ *	- Fix S/PDIF out if spdif_loop enabled
+ *	- Load opl3 driver if enabled (fmio in proper range)
+ *	- Load mpu401 if enabled (mpuio in proper range)
+ *    Apr 5 2004
+ *	- Fix DUAL_DAC dma synchronization bug
+ *	- Check exist FM/MPU401 I/O before activate.
+ *	- Add AFTM_S16_BE format support, so MPlayer/Xine can play AC3/mutlichannel
+ *	  on Mac
+ *	- Change to support kernel 2.6 so only small patch needed
+ *	- All parameters default to 0
+ *	- Add spdif_out to send PCM through S/PDIF out jack
+ *	- Add hw_copy to get 4-spaker output for general PCM/analog output
+ *
+ *    Stefan Thater <stefan.thaeter@gmx.de>
+ *    Apr 5 2004
+ *	- Fix mute single channel for CD/Line-in/AUX-in
  */
 /*****************************************************************************/
-      
+
 #include <linux/config.h>
 #include <linux/module.h>
 #include <linux/string.h>
@@ -109,11 +128,21 @@
 #include <asm/page.h>
 #include <asm/uaccess.h>
 
-#include "dm.h"
+#ifdef CONFIG_SOUND_CMPCI_MIDI
+#include "sound_config.h"
+#include "mpu401.h"
+#endif
+#ifdef CONFIG_SOUND_CMPCI_FM
+#include "opl3.h"
+#endif
+#ifdef CONFIG_SOUND_CMPCI_JOYSTICK
+#include <linux/gameport.h>
+#endif
 
 /* --------------------------------------------------------------------- */
 #undef OSS_DOCUMENTED_MIXER_SEMANTICS
 #undef DMABYTEIO
+#define	DBG(x) {}
 /* --------------------------------------------------------------------- */
 
 #define CM_MAGIC  ((PCI_VENDOR_ID_CMEDIA<<16)|PCI_DEVICE_ID_CMEDIA_CM8338A)
@@ -142,6 +171,9 @@
 #define CODEC_CMI_CH1_FRAME1		(0x88)
 #define CODEC_CMI_CH1_FRAME2		(0x8C)
 
+#define CODEC_CMI_SPDIF_CTRL		(0x90)
+#define CODEC_CMI_MISC_CTRL2		(0x92)
+
 #define CODEC_CMI_EXT_REG		(0xF0)
 
 /*  Mixer registers for SB16 ******************/
@@ -178,51 +210,173 @@
 #define DSP_MIX_TREBLEIDX_R		((unsigned char)(0x45))
 #define DSP_MIX_BASSIDX_L		((unsigned char)(0x46))
 #define DSP_MIX_BASSIDX_R		((unsigned char)(0x47))
+#define DSP_MIX_EXTENSION		((unsigned char)(0xf0))
+// pseudo register for AUX
+#define	DSP_MIX_AUXVOL_L		((unsigned char)(0x50))
+#define	DSP_MIX_AUXVOL_R		((unsigned char)(0x51))
+
+// I/O length
+#define CM_EXTENT_CODEC	  0x100
+#define CM_EXTENT_MIDI	  0x2
+#define CM_EXTENT_SYNTH	  0x4
+#define CM_EXTENT_GAME	  0x8
+
+// Function Control Register 0 (00h)
+#define CHADC0    	0x01
+#define CHADC1    	0x02
+#define PAUSE0	  	0x04
+#define PAUSE1	  	0x08
+
+// Function Control Register 0+2 (02h)
+#define CHEN0     	0x01
+#define CHEN1     	0x02
+#define RST_CH0	  	0x04
+#define RST_CH1	  	0x08
+
+// Function Control Register 1 (04h)
+#define JYSTK_EN	0x02
+#define UART_EN		0x04
+#define	SPDO2DAC	0x40
+#define	SPDFLOOP	0x80
+
+// Function Control Register 1+1 (05h)
+#define	SPDF_0		0x01
+#define	SPDF_1		0x02
+#define	ASFC		0x1c
+#define	DSFC		0xe0
+#define	SPDIF2DAC	(SPDF_1 << 8 | SPDO2DAC)
+
+// Channel Format Register (08h)
+#define CM_CFMT_STEREO	0x01
+#define CM_CFMT_16BIT	0x02
+#define CM_CFMT_MASK	0x03
+#define	POLVALID	0x20
+#define	INVSPDIFI	0x80
+
+// Channel Format Register+2 (0ah)
+#define SPD24SEL	0x20
+
+// Channel Format Register+3 (0bh)
+#define CHB3D		0x20
+#define CHB3D5C		0x80
+
+// Interrupt Hold/Clear Register+2 (0eh)
+#define	CH0_INT_EN	0x01
+#define	CH1_INT_EN	0x02
+
+// Interrupt Register (10h)
+#define CHINT0		0x01
+#define CHINT1		0x02
+#define	CH0BUSY		0x04
+#define	CH1BUSY		0x08
+
+// Legacy Control/Status Register+1 (15h)
+#define	EXBASEN		0x10
+#define	BASE2LIN	0x20
+#define	CENTR2LIN	0x40
+#define	CB2LIN		(BASE2LIN | CENTR2LIN)
+#define	CHB3D6C		0x80
+
+// Legacy Control/Status Register+2 (16h)
+#define	DAC2SPDO	0x20
+#define	SPDCOPYRHT	0x40
+#define	ENSPDOUT	0x80
+
+// Legacy Control/Status Register+3 (17h)
+#define	FMSEL		0x03
+#define	VSBSEL		0x0c
+#define	VMPU		0x60
+#define	NXCHG		0x80
+
+// Miscellaneous Control Register (18h)
+#define	REAR2LIN	0x20
+#define	MUTECH1		0x40
+#define	ENCENTER	0x80
+
+// Miscellaneous Control Register+1 (19h)
+#define	SELSPDIFI2	0x01
+#define	SPDF_AC97	0x80
+
+// Miscellaneous Control Register+2 (1ah)
+#define	AC3_EN		0x04
+#define	FM_EN		0x08
+#define	SPD32SEL	0x20
+#define	XCHGDAC		0x40
+#define	ENDBDAC		0x80
+
+// Miscellaneous Control Register+3 (1bh)
+#define	SPDIFI48K	0x01
+#define	SPDO5V		0x02
+#define	N4SPK3D		0x04
+#define	RESET		0x40
+#define	PWD		0x80
+#define	SPDIF48K	(SPDIFI48K << 24 | SPDF_AC97 << 8)
+
+// Mixer1 (24h)
+#define	CDPLAY		0x01
+#define	X3DEN		0x02
+#define	REAR2FRONT	0x10
+#define	SPK4		0x20
+#define	WSMUTE		0x40
+#define	FMMUTE		0x80
+
+// Miscellaneous Register (27h)
+#define	SPDVALID	0x02
+#define	CENTR2MIC	0x04
+
+// Miscellaneous Register2 (92h)
+#define	SPD32KFMT	0x10
+
+#define CM_CFMT_DACSHIFT   2
+#define CM_CFMT_ADCSHIFT   0
+#define CM_FREQ_DACSHIFT   5
+#define CM_FREQ_ADCSHIFT   2
+#define	RSTDAC	RST_CH1
+#define	RSTADC	RST_CH0
+#define	ENDAC	CHEN1
+#define	ENADC	CHEN0
+#define	PAUSEDAC	PAUSE1
+#define	PAUSEADC	PAUSE0
+#define CODEC_CMI_ADC_FRAME1	CODEC_CMI_CH0_FRAME1
+#define CODEC_CMI_ADC_FRAME2	CODEC_CMI_CH0_FRAME2
+#define CODEC_CMI_DAC_FRAME1	CODEC_CMI_CH1_FRAME1
+#define CODEC_CMI_DAC_FRAME2	CODEC_CMI_CH1_FRAME2
+#define	DACINT	CHINT1
+#define	ADCINT	CHINT0
+#define	DACBUSY	CH1BUSY
+#define	ADCBUSY	CH0BUSY
+#define	ENDACINT	CH1_INT_EN
+#define	ENADCINT	CH0_INT_EN
 
-#define CM_CH0_RESET			0x04
-#define CM_CH1_RESET			0x08
-#define CM_EXTENT_CODEC			0x100
-#define CM_EXTENT_MIDI			0x2
-#define CM_EXTENT_SYNTH			0x4
-#define CM_INT_CH0			1
-#define CM_INT_CH1			2
-
-#define CM_CFMT_STEREO			0x01
-#define CM_CFMT_16BIT			0x02
-#define CM_CFMT_MASK			0x03
-#define CM_CFMT_DACSHIFT		2
-#define CM_CFMT_ADCSHIFT		0
-
+static const unsigned sample_size[] = { 1, 2, 2, 4 };
 static const unsigned sample_shift[]	= { 0, 1, 1, 2 };
 
-#define CM_ENABLE_CH1      0x2
-#define CM_ENABLE_CH0      0x1
-
-/* MIDI buffer sizes **************************/
+#define SND_DEV_DSP16   5
 
-#define MIDIINBUF  256
-#define MIDIOUTBUF 256
+#define NR_DEVICE 3		/* maximum number of devices */
 
-#define FMODE_MIDI_SHIFT 2
-#define FMODE_MIDI_READ  (FMODE_READ << FMODE_MIDI_SHIFT)
-#define FMODE_MIDI_WRITE (FMODE_WRITE << FMODE_MIDI_SHIFT)
+#define	set_dac1_rate	set_adc_rate
+#define	set_dac1_rate_unlocked	set_adc_rate_unlocked
+#define	stop_dac1	stop_adc
+#define	stop_dac1_unlocked	stop_adc_unlocked
+#define	get_dmadac1	get_dmaadc
 
-#define FMODE_DMFM 0x10
+static unsigned int devindex = 0;
 
-#define SND_DEV_DSP16   5 
+//*********************************************/
 
-#define NR_DEVICE 3		/* maximum number of devices */
+struct cm_state {
+	/* magic */
+	unsigned int magic;
 
-/*********************************************/
+	/* list of cmedia devices */
+	struct list_head devs;
 
-struct cm_state {
-	unsigned int magic;		/* magic */
-	struct cm_state *next;		/* we keep cm cards in a linked list */
+	/* the corresponding pci_dev structure */
+	struct pci_dev *dev;
 
 	int dev_audio;			/* soundcore stuff */
 	int dev_mixer;
-	int dev_midi;
-	int dev_dmfm;
 
 	unsigned int iosb, iobase, iosynth,
 			 iomidi, iogame, irq;	/* hardware resources */
@@ -243,7 +397,7 @@
 
 	struct dmabuf {
 		void *rawbuf;
-		unsigned rawphys;
+		dma_addr_t dmaaddr;
 		unsigned buforder;
 		unsigned numfrag;
 		unsigned fragshift;
@@ -252,38 +406,36 @@
 		int count;
 		unsigned error;		/* over/underrun */
 		wait_queue_head_t wait;
-		
+
 		unsigned fragsize;	/* redundant, but makes calculations easier */
 		unsigned dmasize;
 		unsigned fragsamples;
 		unsigned dmasamples;
-		
+
 		unsigned mapped:1;	/* OSS stuff */
 		unsigned ready:1;
 		unsigned endcleared:1;
+		unsigned enabled:1;
 		unsigned ossfragshift;
 		int ossmaxfrags;
 		unsigned subdivision;
 	} dma_dac, dma_adc;
 
-	struct {			/* midi stuff */
-		unsigned ird, iwr, icnt;
-		unsigned ord, owr, ocnt;
-		wait_queue_head_t iwait;
-		wait_queue_head_t owait;
-		struct timer_list timer;
-		unsigned char ibuf[MIDIINBUF];
-		unsigned char obuf[MIDIOUTBUF];
-	} midi;
-	
-	int	chip_version;		
+#ifdef CONFIG_SOUND_CMPCI_MIDI
+	int midi_devc;
+	struct address_info mpu_data;
+#endif
+#ifdef CONFIG_SOUND_CMPCI_JOYSTICK
+	struct gameport gameport;
+#endif
+
+	int	chip_version;
 	int	max_channels;
-	int	curr_channels;		
-	int	speakers;		/* number of speakers */
+	int	curr_channels;
 	int	capability;		/* HW capability, various for chip versions */
 
 	int	status;			/* HW or SW state */
-	
+
 	int	spdif_counter;		/* spdif frame counter */
 };
 
@@ -311,9 +463,44 @@
 #define	DO_SPDIF_OUT		0x00000100
 #define	DO_SPDIF_IN		0x00000200
 #define	DO_SPDIF_LOOP		0x00000400
+#define	DO_BIGENDIAN_W		0x00001000		/* used in PowerPC */
+#define	DO_BIGENDIAN_R		0x00002000		/* used in PowerPC */
 
-static struct cm_state *devs;
-static unsigned long wavetable_mem;
+static LIST_HEAD(devs);
+
+static	int	mpuio = 0;
+static	int	fmio = 0;
+static	int	joystick = 0;
+static	int	spdif_inverse = 0;
+static	int	spdif_loop = 0;
+static	int	spdif_out = 0;
+static	int	use_line_as_rear = 0;
+static	int	use_line_as_bass = 0;
+static	int	use_mic_as_bass = 0;
+static	int	mic_boost = 0;
+static	int	hw_copy = 0;
+MODULE_PARM(mpuio, "i");
+MODULE_PARM(fmio, "i");
+MODULE_PARM(joystick, "i");
+MODULE_PARM(spdif_inverse, "i");
+MODULE_PARM(spdif_loop, "i");
+MODULE_PARM(spdif_out, "i");
+MODULE_PARM(use_line_as_rear, "i");
+MODULE_PARM(use_line_as_bass, "i");
+MODULE_PARM(use_mic_as_bass, "i");
+MODULE_PARM(mic_boost, "i");
+MODULE_PARM(hw_copy, "i");
+MODULE_PARM_DESC(mpuio, "(0x330, 0x320, 0x310, 0x300) Base of MPU-401, 0 to disable");
+MODULE_PARM_DESC(fmio, "(0x388, 0x3C8, 0x3E0) Base of OPL3, 0 to disable");
+MODULE_PARM_DESC(joystick, "(1/0) Enable joystick interface, still need joystick driver");
+MODULE_PARM_DESC(spdif_inverse, "(1/0) Invert S/PDIF-in signal");
+MODULE_PARM_DESC(spdif_loop, "(1/0) Route S/PDIF-in to S/PDIF-out directly");
+MODULE_PARM_DESC(spdif_out, "(1/0) Send PCM to S/PDIF-out (PCM volume will not function)");
+MODULE_PARM_DESC(use_line_as_rear, "(1/0) Use line-in jack as rear-out");
+MODULE_PARM_DESC(use_line_as_bass, "(1/0) Use line-in jack as bass/center");
+MODULE_PARM_DESC(use_mic_as_bass, "(1/0) Use mic-in jack as bass/center");
+MODULE_PARM_DESC(mic_boost, "(1/0) Enable microphone boost");
+MODULE_PARM_DESC(hw_copy, "Copy front channel to surround channel");
 
 /* --------------------------------------------------------------------- */
 
@@ -324,7 +511,7 @@
 
 	/* num: 2, 4, 16, 256, 65536 */
 	/* exp: 1, 2,  4,   8,    16 */
-	
+
 	while(l--) {
 		if( x >= num[l] ) {
 			if(num[l]>2) x >>= exp;
@@ -356,55 +543,55 @@
 static void set_dmadac1(struct cm_state *s, unsigned int addr, unsigned int count)
 {
 	if (addr)
-	    outl(addr, s->iobase + CODEC_CMI_CH0_FRAME1);
-	outw(count - 1, s->iobase + CODEC_CMI_CH0_FRAME2);
-	maskb(s->iobase + CODEC_CMI_FUNCTRL0, ~1, 0);
+	    outl(addr, s->iobase + CODEC_CMI_ADC_FRAME1);
+	outw(count - 1, s->iobase + CODEC_CMI_ADC_FRAME2);
+	maskb(s->iobase + CODEC_CMI_FUNCTRL0, ~CHADC0, 0);
 }
 
 static void set_dmaadc(struct cm_state *s, unsigned int addr, unsigned int count)
 {
-	outl(addr, s->iobase + CODEC_CMI_CH0_FRAME1);
-	outw(count - 1, s->iobase + CODEC_CMI_CH0_FRAME2);
-	maskb(s->iobase + CODEC_CMI_FUNCTRL0, ~0, 1);
+	outl(addr, s->iobase + CODEC_CMI_ADC_FRAME1);
+	outw(count - 1, s->iobase + CODEC_CMI_ADC_FRAME2);
+	maskb(s->iobase + CODEC_CMI_FUNCTRL0, ~0, CHADC0);
 }
 
 static void set_dmadac(struct cm_state *s, unsigned int addr, unsigned int count)
 {
-	outl(addr, s->iobase + CODEC_CMI_CH1_FRAME1);
-	outw(count - 1, s->iobase + CODEC_CMI_CH1_FRAME2);
-	maskb(s->iobase + CODEC_CMI_FUNCTRL0, ~2, 0);
+	outl(addr, s->iobase + CODEC_CMI_DAC_FRAME1);
+	outw(count - 1, s->iobase + CODEC_CMI_DAC_FRAME2);
+	maskb(s->iobase + CODEC_CMI_FUNCTRL0, ~CHADC1, 0);
 	if (s->status & DO_DUAL_DAC)
 		set_dmadac1(s, 0, count);
 }
 
 static void set_countadc(struct cm_state *s, unsigned count)
 {
-	outw(count - 1, s->iobase + CODEC_CMI_CH0_FRAME2 + 2);
+	outw(count - 1, s->iobase + CODEC_CMI_ADC_FRAME2 + 2);
 }
 
 static void set_countdac(struct cm_state *s, unsigned count)
 {
-	outw(count - 1, s->iobase + CODEC_CMI_CH1_FRAME2 + 2);
+	outw(count - 1, s->iobase + CODEC_CMI_DAC_FRAME2 + 2);
 	if (s->status & DO_DUAL_DAC)
 	    set_countadc(s, count);
 }
 
-static inline unsigned get_dmadac(struct cm_state *s)
+static unsigned get_dmadac(struct cm_state *s)
 {
 	unsigned int curr_addr;
 
-	curr_addr = inw(s->iobase + CODEC_CMI_CH1_FRAME2) + 1;
+	curr_addr = inw(s->iobase + CODEC_CMI_DAC_FRAME2) + 1;
 	curr_addr <<= sample_shift[(s->fmt >> CM_CFMT_DACSHIFT) & CM_CFMT_MASK];
 	curr_addr = s->dma_dac.dmasize - curr_addr;
 
 	return curr_addr;
 }
 
-static inline unsigned get_dmaadc(struct cm_state *s)
+static unsigned get_dmaadc(struct cm_state *s)
 {
 	unsigned int curr_addr;
 
-	curr_addr = inw(s->iobase + CODEC_CMI_CH0_FRAME2) + 1;
+	curr_addr = inw(s->iobase + CODEC_CMI_ADC_FRAME2) + 1;
 	curr_addr <<= sample_shift[(s->fmt >> CM_CFMT_ADCSHIFT) & CM_CFMT_MASK];
 	curr_addr = s->dma_adc.dmasize - curr_addr;
 
@@ -413,30 +600,85 @@
 
 static void wrmixer(struct cm_state *s, unsigned char idx, unsigned char data)
 {
+	unsigned char regval, pseudo;
+
+	// pseudo register
+	if (idx == DSP_MIX_AUXVOL_L) {
+		data >>= 4;
+		data &= 0x0f;
+		regval = inb(s->iobase + CODEC_CMI_AUX_VOL) & ~0x0f;
+		outb(regval | data, s->iobase + CODEC_CMI_AUX_VOL);
+		return;
+	}
+	if (idx == DSP_MIX_AUXVOL_R) {
+		data &= 0xf0;
+		regval = inb(s->iobase + CODEC_CMI_AUX_VOL) & ~0xf0;
+		outb(regval | data, s->iobase + CODEC_CMI_AUX_VOL);
+		return;
+	}
 	outb(idx, s->iobase + CODEC_SB16_ADDR);
 	udelay(10);
+	// pseudo bits
+	if (idx == DSP_MIX_OUTMIXIDX) {
+		pseudo = data & ~0x1f;
+		pseudo >>= 1;
+		regval = inb(s->iobase + CODEC_CMI_MIXER2) & ~0x30;
+		outb(regval | pseudo, s->iobase + CODEC_CMI_MIXER2);
+	}
+	if (idx == DSP_MIX_ADCMIXIDX_L) {
+		pseudo = data & 0x80;
+		pseudo >>= 1;
+		regval = inb(s->iobase + CODEC_CMI_MIXER2) & ~0x40;
+		outb(regval | pseudo, s->iobase + CODEC_CMI_MIXER2);
+	}
+	if (idx == DSP_MIX_ADCMIXIDX_R) {
+		pseudo = data & 0x80;
+		regval = inb(s->iobase + CODEC_CMI_MIXER2) & ~0x80;
+		outb(regval | pseudo, s->iobase + CODEC_CMI_MIXER2);
+	}
 	outb(data, s->iobase + CODEC_SB16_DATA);
 	udelay(10);
 }
 
 static unsigned char rdmixer(struct cm_state *s, unsigned char idx)
 {
-	unsigned char v;
-	unsigned long flags;
-	
-	spin_lock_irqsave(&s->lock, flags);
+	unsigned char v, pseudo;
+
+	// pseudo register
+	if (idx == DSP_MIX_AUXVOL_L) {
+		v = inb(s->iobase + CODEC_CMI_AUX_VOL) & 0x0f;
+		v <<= 4;
+		return v;
+	}
+	if (idx == DSP_MIX_AUXVOL_L) {
+		v = inb(s->iobase + CODEC_CMI_AUX_VOL) & 0xf0;
+		return v;
+	}
 	outb(idx, s->iobase + CODEC_SB16_ADDR);
 	udelay(10);
 	v = inb(s->iobase + CODEC_SB16_DATA);
 	udelay(10);
-	spin_unlock_irqrestore(&s->lock, flags);
+	// pseudo bits
+	if (idx == DSP_MIX_OUTMIXIDX) {
+		pseudo = inb(s->iobase + CODEC_CMI_MIXER2) & 0x30;
+		pseudo <<= 1;
+		v |= pseudo;
+	}
+	if (idx == DSP_MIX_ADCMIXIDX_L) {
+		pseudo = inb(s->iobase + CODEC_CMI_MIXER2) & 0x40;
+		pseudo <<= 1;
+		v |= pseudo;
+	}
+	if (idx == DSP_MIX_ADCMIXIDX_R) {
+		pseudo = inb(s->iobase + CODEC_CMI_MIXER2) & 0x80;
+		v |= pseudo;
+	}
 	return v;
 }
 
 static void set_fmt_unlocked(struct cm_state *s, unsigned char mask, unsigned char data)
 {
-	if (mask)
-	{
+	if (mask && s->chip_version > 0) {	/* 8338 cannot keep this */
 		s->fmt = inb(s->iobase + CODEC_CMI_CHFORMAT);
 		udelay(10);
 	}
@@ -479,24 +721,98 @@
 	{ 48000,	(44100 + 48000) / 2,	48000,			7 }
 };
 
+static void set_spdif_copyright(struct cm_state *s, int spdif_copyright)
+{
+	/* enable SPDIF-in Copyright */
+	maskb(s->iobase + CODEC_CMI_LEGACY_CTRL + 2, ~SPDCOPYRHT, spdif_copyright ? SPDCOPYRHT : 0);
+}
+
+static void set_spdif_loop(struct cm_state *s, int spdif_loop)
+{
+	/* enable SPDIF loop */
+	if (spdif_loop) {
+		s->status |= DO_SPDIF_LOOP;
+		/* turn on spdif-in to spdif-out */
+		maskb(s->iobase + CODEC_CMI_FUNCTRL1, ~0, SPDFLOOP);
+	} else {
+		s->status &= ~DO_SPDIF_LOOP;
+		/* turn off spdif-in to spdif-out */
+		maskb(s->iobase + CODEC_CMI_FUNCTRL1, ~SPDFLOOP, 0);
+	}
+}
+
+static void set_spdif_monitor(struct cm_state *s, int channel)
+{
+	// SPDO2DAC
+	maskw(s->iobase + CODEC_CMI_FUNCTRL1, ~SPDO2DAC, channel == 2 ? SPDO2DAC : 0);
+	// CDPLAY
+	if (s->chip_version >= 39)
+		maskb(s->iobase + CODEC_CMI_MIXER1, ~CDPLAY, channel ? CDPLAY : 0);
+}
+
+static void set_spdifout_level(struct cm_state *s, int level5v)
+{
+	/* SPDO5V */
+	if (s->chip_version > 0)
+		maskb(s->iobase + CODEC_CMI_MISC_CTRL + 3, ~SPDO5V, level5v ? SPDO5V : 0);
+}
+
+static void set_spdifin_inverse(struct cm_state *s, int spdif_inverse)
+{
+	if (s->chip_version == 0)	/* 8338 has not this feature */
+		return;
+	if (spdif_inverse) {
+		/* turn on spdif-in inverse */
+		if (s->chip_version >= 39)
+			maskb(s->iobase + CODEC_CMI_CHFORMAT, ~0, INVSPDIFI);
+		else
+			maskb(s->iobase + CODEC_CMI_CHFORMAT + 2, ~0, 1);
+	} else {
+		/* turn off spdif-ininverse */
+		if (s->chip_version >= 39)
+			maskb(s->iobase + CODEC_CMI_CHFORMAT, ~INVSPDIFI, 0);
+		else
+			maskb(s->iobase + CODEC_CMI_CHFORMAT + 2, ~1, 0);
+	}
+}
+
+static void set_spdifin_channel2(struct cm_state *s, int channel2)
+{
+	/* SELSPDIFI2 */
+	if (s->chip_version >= 39)
+		maskb(s->iobase + CODEC_CMI_MISC_CTRL + 1, ~SELSPDIFI2, channel2 ? SELSPDIFI2 : 0);
+}
+
+static void set_spdifin_valid(struct cm_state *s, int valid)
+{
+	/* SPDVALID */
+	maskb(s->iobase + CODEC_CMI_MISC, ~SPDVALID, valid ? SPDVALID : 0);
+}
+
 static void set_spdifout_unlocked(struct cm_state *s, unsigned rate)
 {
+	if (rate != 48000 && rate != 44100)
+		rate = 0;
 	if (rate == 48000 || rate == 44100) {
-		// SPDIFI48K SPDF_ACc97
-		maskl(s->iobase + CODEC_CMI_MISC_CTRL, ~0x01008000, rate == 48000 ? 0x01008000 : 0);
+		set_spdif_loop(s, 0);
+		// SPDF_1
+		maskb(s->iobase + CODEC_CMI_FUNCTRL1 + 1, ~0, SPDF_1);
+		// SPDIFI48K SPDF_AC97
+		maskl(s->iobase + CODEC_CMI_MISC_CTRL, ~SPDIF48K, rate == 48000 ? SPDIF48K : 0);
+		if (s->chip_version >= 55)
+		// SPD32KFMT
+			maskb(s->iobase + CODEC_CMI_MISC_CTRL2, ~SPD32KFMT, rate == 48000 ? SPD32KFMT : 0);
+		if (s->chip_version > 0)
 		// ENSPDOUT
-		maskb(s->iobase + CODEC_CMI_LEGACY_CTRL + 2, ~0, 0x80);
-		// SPDF_1 SPD2DAC
-		maskw(s->iobase + CODEC_CMI_FUNCTRL1, ~0, 0x240);
-		// CDPLAY
-		if (s->chip_version >= 39)
-			maskb(s->iobase + CODEC_CMI_MIXER1, ~0, 1);
+			maskb(s->iobase + CODEC_CMI_LEGACY_CTRL + 2, ~0, ENSPDOUT);
+		// monitor SPDIF out
+		set_spdif_monitor(s, 2);
 		s->status |= DO_SPDIF_OUT;
 	} else {
-		maskb(s->iobase + CODEC_CMI_LEGACY_CTRL + 2, ~0x80, 0);
-		maskw(s->iobase + CODEC_CMI_FUNCTRL1, ~0x240, 0);
-		if (s->chip_version >= 39)
-			maskb(s->iobase + CODEC_CMI_MIXER1, ~1, 0);
+		maskb(s->iobase + CODEC_CMI_FUNCTRL1 + 1, ~SPDF_1, 0);
+		maskb(s->iobase + CODEC_CMI_LEGACY_CTRL + 2, ~ENSPDOUT, 0);
+		// monitor none
+		set_spdif_monitor(s, 0);
 		s->status &= ~DO_SPDIF_OUT;
 	}
 }
@@ -510,6 +826,29 @@
 	spin_unlock_irqrestore(&s->lock, flags);
 }
 
+static void set_spdifin_unlocked(struct cm_state *s, unsigned rate)
+{
+	if (rate == 48000 || rate == 44100) {
+		// SPDF_1
+		maskb(s->iobase + CODEC_CMI_FUNCTRL1 + 1, ~0, SPDF_1);
+		// SPDIFI48K SPDF_AC97
+		maskl(s->iobase + CODEC_CMI_MISC_CTRL, ~SPDIF48K, rate == 48000 ? SPDIF48K : 0);
+		s->status |= DO_SPDIF_IN;
+	} else {
+		maskb(s->iobase + CODEC_CMI_FUNCTRL1 + 1, ~SPDF_1, 0);
+		s->status &= ~DO_SPDIF_IN;
+	}
+}
+
+static void set_spdifin(struct cm_state *s, unsigned rate)
+{
+	unsigned long flags;
+
+	spin_lock_irqsave(&s->lock, flags);
+	set_spdifin_unlocked(s,rate);
+	spin_unlock_irqrestore(&s->lock, flags);
+}
+
 /* find parity for bit 4~30 */
 static unsigned parity(unsigned data)
 {
@@ -528,24 +867,38 @@
 
 static void set_ac3_unlocked(struct cm_state *s, unsigned rate)
 {
+	if (!(s->capability & CAN_AC3))
+		return;
 	/* enable AC3 */
+	if (rate && rate != 44100)
+		rate = 48000;
 	if (rate == 48000 || rate == 44100) {
 		// mute DAC
-		maskb(s->iobase + CODEC_CMI_MIXER1, ~0, 0x40);
-		// AC3EN for 037, 0x10
-		maskb(s->iobase + CODEC_CMI_CHFORMAT + 2, ~0, 0x10);
+		maskb(s->iobase + CODEC_CMI_MIXER1, ~0, WSMUTE);
+		if (s->chip_version >= 39)
+			maskb(s->iobase + CODEC_CMI_MISC_CTRL, ~0, MUTECH1);
 		// AC3EN for 039, 0x04
-		maskb(s->iobase + CODEC_CMI_MISC_CTRL + 2, ~0, 0x04);
+		if (s->chip_version >= 39) {
+			maskb(s->iobase + CODEC_CMI_MISC_CTRL + 2, ~0, AC3_EN);
+			if (s->chip_version == 55)
+				maskb(s->iobase + CODEC_CMI_SPDIF_CTRL, ~2, 0);
+		// AC3EN for 037, 0x10
+		} else if (s->chip_version == 37)
+			maskb(s->iobase + CODEC_CMI_CHFORMAT + 2, ~0, 0x10);
 		if (s->capability & CAN_AC3_HW) {
-			// SPD24SEL for 037, 0x02
 			// SPD24SEL for 039, 0x20, but cannot be set
-			maskb(s->iobase + CODEC_CMI_CHFORMAT + 2, ~0, 0x02);
-			s->status |= DO_AC3_HW;
+			if (s->chip_version == 39)
+				maskb(s->iobase + CODEC_CMI_CHFORMAT + 2, ~0, SPD24SEL);
+			// SPD24SEL for 037, 0x02
+			else if (s->chip_version == 37)
+				maskb(s->iobase + CODEC_CMI_CHFORMAT + 2, ~0, 0x02);
 			if (s->chip_version >= 39)
-				maskb(s->iobase + CODEC_CMI_MIXER1, ~1, 0);
+				maskb(s->iobase + CODEC_CMI_MIXER1, ~CDPLAY, 0);
+
+			s->status |= DO_AC3_HW;
 		 } else {
-			// SPD32SEL for 037 & 039, 0x20
-			maskb(s->iobase + CODEC_CMI_MISC_CTRL + 2, ~0, 0x20);
+			// SPD32SEL for 037 & 039
+			maskb(s->iobase + CODEC_CMI_MISC_CTRL + 2, ~0, SPD32SEL);
 			// set 176K sample rate to fix 033 HW bug
 			if (s->chip_version == 33) {
 				if (rate == 48000)
@@ -556,18 +909,65 @@
 			s->status |= DO_AC3_SW;
 		}
 	} else {
-		maskb(s->iobase + CODEC_CMI_MIXER1, ~0x40, 0);
-		maskb(s->iobase + CODEC_CMI_CHFORMAT + 2, ~0x32, 0);
-		maskb(s->iobase + CODEC_CMI_MISC_CTRL + 2, ~0x24, 0);
-		maskb(s->iobase + CODEC_CMI_CHFORMAT + 1, ~0x08, 0);
+		maskb(s->iobase + CODEC_CMI_MIXER1, ~WSMUTE, 0);
+		if (s->chip_version >= 39)
+			maskb(s->iobase + CODEC_CMI_MISC_CTRL, ~MUTECH1, 0);
+		maskb(s->iobase + CODEC_CMI_CHFORMAT + 2, ~(SPD24SEL|0x12), 0);
+		maskb(s->iobase + CODEC_CMI_MISC_CTRL + 2, ~(SPD32SEL|AC3_EN), 0);
 		if (s->chip_version == 33)
 			maskb(s->iobase + CODEC_CMI_CHFORMAT + 1, ~0x08, 0);
 		if (s->chip_version >= 39)
-			maskb(s->iobase + CODEC_CMI_MIXER1, ~0, 1);
+			maskb(s->iobase + CODEC_CMI_MIXER1, ~0, CDPLAY);
 		s->status &= ~DO_AC3;
 	}
 	s->spdif_counter = 0;
+}
 
+static void set_line_as_rear(struct cm_state *s, int use_line_as_rear)
+{
+	if (!(s->capability & CAN_LINE_AS_REAR))
+		return;
+	if (use_line_as_rear) {
+		maskb(s->iobase + CODEC_CMI_MIXER1, ~0, SPK4);
+		s->status |= DO_LINE_AS_REAR;
+	} else {
+		maskb(s->iobase + CODEC_CMI_MIXER1, ~SPK4, 0);
+		s->status &= ~DO_LINE_AS_REAR;
+	}
+}
+
+static void set_line_as_bass(struct cm_state *s, int use_line_as_bass)
+{
+	if (!(s->capability & CAN_LINE_AS_BASS))
+		return;
+	if (use_line_as_bass) {
+		maskb(s->iobase + CODEC_CMI_LEGACY_CTRL + 1, ~0, CB2LIN);
+		s->status |= DO_LINE_AS_BASS;
+	} else {
+		maskb(s->iobase + CODEC_CMI_LEGACY_CTRL + 1, ~CB2LIN, 0);
+		s->status &= ~DO_LINE_AS_BASS;
+	}
+}
+
+static void set_mic_as_bass(struct cm_state *s, int use_mic_as_bass)
+{
+	if (!(s->capability & CAN_MIC_AS_BASS))
+		return;
+	if (use_mic_as_bass) {
+		maskb(s->iobase + CODEC_CMI_MISC, ~0, 0x04);
+		s->status |= DO_MIC_AS_BASS;
+	} else {
+		maskb(s->iobase + CODEC_CMI_MISC, ~0x04, 0);
+		s->status &= ~DO_MIC_AS_BASS;
+	}
+}
+
+static void set_hw_copy(struct cm_state *s, int hw_copy)
+{
+    	if (s->max_channels > 2 && hw_copy)
+		maskb(s->iobase + CODEC_CMI_MISC_CTRL + 3, ~0, N4SPK3D);
+    	else
+		maskb(s->iobase + CODEC_CMI_MISC_CTRL + 3, ~N4SPK3D, 0);
 }
 
 static void set_ac3(struct cm_state *s, unsigned rate)
@@ -576,21 +976,23 @@
 
 	spin_lock_irqsave(&s->lock, flags);
 	set_spdifout_unlocked(s, rate);
-	set_ac3_unlocked(s,rate);
+	set_ac3_unlocked(s, rate);
 	spin_unlock_irqrestore(&s->lock, flags);
 }
 
 static int trans_ac3(struct cm_state *s, void *dest, const char *source, int size)
 {
 	int   i = size / 2;
-	int err;
 	unsigned long data;
+	unsigned short data16;
 	unsigned long *dst = (unsigned long *) dest;
 	unsigned short *src = (unsigned short *)source;
+	int err;
 
 	do {
-		if ((err = __get_user(data, src++)))
+		if ((err = __get_user(data16, src++)))
 			return err;
+		data = (unsigned long)le16_to_cpu(data16);
 		data <<= 12;			// ok for 16-bit data
 		if (s->spdif_counter == 2 || s->spdif_counter == 3)
 			data |= 0x40000000;	// indicate AC-3 raw data
@@ -602,7 +1004,7 @@
 			data |= 5;		// odd, 'W'
 		else
 			data |= 9;		// even, 'M'
-		*dst++ = data;
+		*dst++ = cpu_to_le32(data);
 		s->spdif_counter++;
 		if (s->spdif_counter == 384)
 			s->spdif_counter = 0;
@@ -628,9 +1030,9 @@
 	    	}
 	}
 	s->rateadc = rate;
-	freq <<= 2;
+	freq <<= CM_FREQ_ADCSHIFT;
 
-	maskb(s->iobase + CODEC_CMI_FUNCTRL1 + 1, ~0x1c, freq);
+	maskb(s->iobase + CODEC_CMI_FUNCTRL1 + 1, ~ASFC, freq);
 }
 
 static void set_adc_rate(struct cm_state *s, unsigned rate)
@@ -651,10 +1053,10 @@
 	    	}
 	}
 	s->rateadc = rate;
-	freq <<= 2;
+	freq <<= CM_FREQ_ADCSHIFT;
 
 	spin_lock_irqsave(&s->lock, flags);
-	maskb(s->iobase + CODEC_CMI_FUNCTRL1 + 1, ~0x1c, freq);
+	maskb(s->iobase + CODEC_CMI_FUNCTRL1 + 1, ~ASFC, freq);
 	spin_unlock_irqrestore(&s->lock, flags);
 }
 
@@ -676,46 +1078,45 @@
 	    	}
 	}
 	s->ratedac = rate;
-	freq <<= 5;
+	freq <<= CM_FREQ_DACSHIFT;
 
 	spin_lock_irqsave(&s->lock, flags);
-	maskb(s->iobase + CODEC_CMI_FUNCTRL1 + 1, ~0xe0, freq);
-
+	maskb(s->iobase + CODEC_CMI_FUNCTRL1 + 1, ~DSFC, freq);
+	spin_unlock_irqrestore(&s->lock, flags);
 
-	if (s->curr_channels <=  2)
-		set_spdifout_unlocked(s, rate);
+	if (s->curr_channels <= 2 && spdif_out)
+		set_spdifout(s, rate);
 	if (s->status & DO_DUAL_DAC)
-		set_adc_rate_unlocked(s, rate);
-
-	spin_unlock_irqrestore(&s->lock, flags);
+		set_dac1_rate(s, rate);
 }
 
 /* --------------------------------------------------------------------- */
 static inline void reset_adc(struct cm_state *s)
 {
 	/* reset bus master */
-	outb(s->enable | CM_CH0_RESET, s->iobase + CODEC_CMI_FUNCTRL0 + 2);
+	outb(s->enable | RSTADC, s->iobase + CODEC_CMI_FUNCTRL0 + 2);
 	udelay(10);
-	outb(s->enable & ~CM_CH0_RESET, s->iobase + CODEC_CMI_FUNCTRL0 + 2);
+	outb(s->enable & ~RSTADC, s->iobase + CODEC_CMI_FUNCTRL0 + 2);
 }
 
 static inline void reset_dac(struct cm_state *s)
 {
 	/* reset bus master */
-	outb(s->enable | CM_CH1_RESET, s->iobase + CODEC_CMI_FUNCTRL0 + 2);
-	outb(s->enable & ~CM_CH1_RESET, s->iobase + CODEC_CMI_FUNCTRL0 + 2);
+	outb(s->enable | RSTDAC, s->iobase + CODEC_CMI_FUNCTRL0 + 2);
+	udelay(10);
+	outb(s->enable & ~RSTDAC, s->iobase + CODEC_CMI_FUNCTRL0 + 2);
 	if (s->status & DO_DUAL_DAC)
 		reset_adc(s);
 }
 
 static inline void pause_adc(struct cm_state *s)
 {
-	maskb(s->iobase + CODEC_CMI_FUNCTRL0, ~0, 4);
+	maskb(s->iobase + CODEC_CMI_FUNCTRL0, ~0, PAUSEADC);
 }
 
 static inline void pause_dac(struct cm_state *s)
 {
-	maskb(s->iobase + CODEC_CMI_FUNCTRL0, ~0, 8);
+	maskb(s->iobase + CODEC_CMI_FUNCTRL0, ~0, PAUSEDAC);
 	if (s->status & DO_DUAL_DAC)
 		pause_adc(s);
 }
@@ -723,7 +1124,7 @@
 static inline void disable_adc(struct cm_state *s)
 {
 	/* disable channel */
-	s->enable &= ~CM_ENABLE_CH0;
+	s->enable &= ~ENADC;
 	outb(s->enable, s->iobase + CODEC_CMI_FUNCTRL0 + 2);
 	reset_adc(s);
 }
@@ -731,7 +1132,7 @@
 static inline void disable_dac(struct cm_state *s)
 {
 	/* disable channel */
-	s->enable &= ~CM_ENABLE_CH1;
+	s->enable &= ~ENDAC;
 	outb(s->enable, s->iobase + CODEC_CMI_FUNCTRL0 + 2);
 	reset_dac(s);
 	if (s->status & DO_DUAL_DAC)
@@ -740,22 +1141,22 @@
 
 static inline void enable_adc(struct cm_state *s)
 {
-	if (!(s->enable & CM_ENABLE_CH0)) {
+	if (!(s->enable & ENADC)) {
 		/* enable channel */
-		s->enable |= CM_ENABLE_CH0;
+		s->enable |= ENADC;
 		outb(s->enable, s->iobase + CODEC_CMI_FUNCTRL0 + 2);
 	}
-	maskb(s->iobase + CODEC_CMI_FUNCTRL0, ~4, 0);
+	maskb(s->iobase + CODEC_CMI_FUNCTRL0, ~PAUSEADC, 0);
 }
 
 static inline void enable_dac_unlocked(struct cm_state *s)
 {
-	if (!(s->enable & CM_ENABLE_CH1)) {
+	if (!(s->enable & ENDAC)) {
 		/* enable channel */
-		s->enable |= CM_ENABLE_CH1;
+		s->enable |= ENDAC;
 		outb(s->enable, s->iobase + CODEC_CMI_FUNCTRL0 + 2);
 	}
-	maskb(s->iobase + CODEC_CMI_FUNCTRL0, ~8, 0);
+	maskb(s->iobase + CODEC_CMI_FUNCTRL0, ~PAUSEDAC, 0);
 
 	if (s->status & DO_DUAL_DAC)
 		enable_adc(s);
@@ -772,9 +1173,9 @@
 
 static inline void stop_adc_unlocked(struct cm_state *s)
 {
-	if (s->enable & CM_ENABLE_CH0) {
+	if (s->enable & ENADC) {
 		/* disable interrupt */
-		maskb(s->iobase + CODEC_CMI_INT_HLDCLR + 2, ~1, 0);
+		maskb(s->iobase + CODEC_CMI_INT_HLDCLR + 2, ~ENADCINT, 0);
 		disable_adc(s);
 	}
 }
@@ -791,13 +1192,13 @@
 
 static inline void stop_dac_unlocked(struct cm_state *s)
 {
-	if (s->enable & CM_ENABLE_CH1) {
+	if (s->enable & ENDAC) {
 		/* disable interrupt */
-		maskb(s->iobase + CODEC_CMI_INT_HLDCLR + 2, ~2, 0);
+		maskb(s->iobase + CODEC_CMI_INT_HLDCLR + 2, ~ENDACINT, 0);
 		disable_dac(s);
 	}
 	if (s->status & DO_DUAL_DAC)
-		stop_adc_unlocked(s);
+		stop_dac1_unlocked(s);
 }
 
 static inline void stop_dac(struct cm_state *s)
@@ -809,12 +1210,12 @@
 	spin_unlock_irqrestore(&s->lock, flags);
 }
 
-static void start_adc_unlocked(struct cm_state *s)
+static inline void start_adc_unlocked(struct cm_state *s)
 {
 	if ((s->dma_adc.mapped || s->dma_adc.count < (signed)(s->dma_adc.dmasize - 2*s->dma_adc.fragsize))
 	    && s->dma_adc.ready) {
 		/* enable interrupt */
-		maskb(s->iobase + CODEC_CMI_INT_HLDCLR + 2, ~0, 1);
+		maskb(s->iobase + CODEC_CMI_INT_HLDCLR + 2, ~0, ENADCINT);
 		enable_adc(s);
 	}
 }
@@ -826,13 +1227,13 @@
 	spin_lock_irqsave(&s->lock, flags);
 	start_adc_unlocked(s);
 	spin_unlock_irqrestore(&s->lock, flags);
-}	
+}
 
 static void start_dac1_unlocked(struct cm_state *s)
 {
 	if ((s->dma_adc.mapped || s->dma_adc.count > 0) && s->dma_adc.ready) {
 		/* enable interrupt */
-//		maskb(s->iobase + CODEC_CMI_INT_HLDCLR + 2, ~0, 1);
+		maskb(s->iobase + CODEC_CMI_INT_HLDCLR + 2, ~0, ENADCINT);
  		enable_dac_unlocked(s);
 	}
 }
@@ -841,11 +1242,11 @@
 {
 	if ((s->dma_dac.mapped || s->dma_dac.count > 0) && s->dma_dac.ready) {
 		/* enable interrupt */
-		maskb(s->iobase + CODEC_CMI_INT_HLDCLR + 2, ~0, 2);
+		maskb(s->iobase + CODEC_CMI_INT_HLDCLR + 2, ~0, ENDACINT);
 		enable_dac_unlocked(s);
 	}
-		if (s->status & DO_DUAL_DAC)
-			start_dac1_unlocked(s);
+	if (s->status & DO_DUAL_DAC)
+		start_dac1_unlocked(s);
 }
 
 static void start_dac(struct cm_state *s)
@@ -855,13 +1256,15 @@
 	spin_lock_irqsave(&s->lock, flags);
 	start_dac_unlocked(s);
 	spin_unlock_irqrestore(&s->lock, flags);
-}	
+}
 
 static int prog_dmabuf(struct cm_state *s, unsigned rec);
 
 static int set_dac_channels(struct cm_state *s, int channels)
 {
 	unsigned long flags;
+	static unsigned int fmmute = 0;
+
 	spin_lock_irqsave(&s->lock, flags);
 
 	if ((channels > 2) && (channels <= s->max_channels)
@@ -869,13 +1272,13 @@
 	    set_spdifout_unlocked(s, 0);
 	    if (s->capability & CAN_MULTI_CH_HW) {
 		// NXCHG
-		maskb(s->iobase + CODEC_CMI_LEGACY_CTRL + 3, ~0, 0x80);
+		maskb(s->iobase + CODEC_CMI_LEGACY_CTRL + 3, ~0, NXCHG);
 		// CHB3D or CHB3D5C
-	       	maskb(s->iobase + CODEC_CMI_CHFORMAT + 3, ~0xa0, channels > 4 ? 0x80 : 0x20);
+	       	maskb(s->iobase + CODEC_CMI_CHFORMAT + 3, ~(CHB3D5C|CHB3D), channels > 4 ? CHB3D5C : CHB3D);
 		// CHB3D6C
-		maskb(s->iobase + CODEC_CMI_LEGACY_CTRL + 1, ~0x80, channels == 6 ? 0x80 : 0);
-		// ENCENTER 
-		maskb(s->iobase + CODEC_CMI_MISC_CTRL, ~0x80, channels == 6 ? 0x80 : 0);
+		maskb(s->iobase + CODEC_CMI_LEGACY_CTRL + 1, ~CHB3D6C, channels == 6 ? CHB3D6C : 0);
+		// ENCENTER
+		maskb(s->iobase + CODEC_CMI_MISC_CTRL, ~ENCENTER, channels == 6 ? ENCENTER : 0);
 		s->status |= DO_MULTI_CH_HW;
 	    } else if (s->capability & CAN_DUAL_DAC) {
 		unsigned char fmtm = ~0, fmts = 0;
@@ -883,10 +1286,12 @@
 
 		// ENDBDAC, turn on double DAC mode
 		// XCHGDAC, CH0 -> back, CH1->front
-		maskb(s->iobase + CODEC_CMI_MISC_CTRL + 2, ~0, 0xC0);
+		maskb(s->iobase + CODEC_CMI_MISC_CTRL + 2, ~0, ENDBDAC|XCHGDAC);
+		// mute FM
+		fmmute = inb(s->iobase + CODEC_CMI_MIXER1) & FMMUTE;
+		maskb(s->iobase + CODEC_CMI_MIXER1, ~0, FMMUTE);
 		s->status |= DO_DUAL_DAC;
 		// prepare secondary buffer
-
 		spin_unlock_irqrestore(&s->lock, flags);
 		ret = prog_dmabuf(s, 1);
 		if (ret) return ret;
@@ -900,30 +1305,38 @@
 		fmts |= CM_CFMT_16BIT << CM_CFMT_ADCSHIFT;
 		fmts |= CM_CFMT_STEREO << CM_CFMT_DACSHIFT;
 		fmts |= CM_CFMT_STEREO << CM_CFMT_ADCSHIFT;
-		
+
 		set_fmt_unlocked(s, fmtm, fmts);
 		set_adc_rate_unlocked(s, s->ratedac);
-
 	    }
-
-	    if (s->speakers > 2)
-		maskb(s->iobase + CODEC_CMI_MISC_CTRL + 3, ~0x04, 0);
+	    // disable 4 speaker mode (analog duplicate)
+	    set_hw_copy(s, 0);
 	    s->curr_channels = channels;
+
+	    // enable jack redirect
+	    set_line_as_rear(s, use_line_as_rear);
+	    if (channels > 4) {
+		    set_line_as_bass(s, use_line_as_bass);
+		    set_mic_as_bass(s, use_mic_as_bass);
+	    }
 	} else {
 	    if (s->status & DO_MULTI_CH_HW) {
-		maskb(s->iobase + CODEC_CMI_LEGACY_CTRL + 3, ~0x80, 0);
-		maskb(s->iobase + CODEC_CMI_CHFORMAT + 3, ~0xa0, 0);
-		maskb(s->iobase + CODEC_CMI_LEGACY_CTRL + 1, ~0x80, 0);
+		maskb(s->iobase + CODEC_CMI_LEGACY_CTRL + 3, ~NXCHG, 0);
+		maskb(s->iobase + CODEC_CMI_CHFORMAT + 3, ~(CHB3D5C|CHB3D), 0);
+		maskb(s->iobase + CODEC_CMI_LEGACY_CTRL + 1, ~CHB3D6C, 0);
 	    } else if (s->status & DO_DUAL_DAC) {
-		maskb(s->iobase + CODEC_CMI_MISC_CTRL + 2, ~0x80, 0);
+		maskb(s->iobase + CODEC_CMI_MISC_CTRL + 2, ~ENDBDAC, 0);
+		maskb(s->iobase + CODEC_CMI_MIXER1, ~FMMUTE, fmmute);
 	    }
-	    // N4SPK3D, enable 4 speaker mode (analog duplicate)
-	    if (s->speakers > 2)
-		maskb(s->iobase + CODEC_CMI_MISC_CTRL + 3, ~0, 0x04);
+	    // enable 4 speaker mode (analog duplicate)
+	    set_hw_copy(s, hw_copy);
 	    s->status &= ~DO_MULTI_CH;
 	    s->curr_channels = s->fmt & (CM_CFMT_STEREO << CM_CFMT_DACSHIFT) ? 2 : 1;
+	    // disable jack redirect
+	    set_line_as_rear(s, hw_copy ? use_line_as_rear : 0);
+	    set_line_as_bass(s, 0);
+	    set_mic_as_bass(s, 0);
 	}
-
 	spin_unlock_irqrestore(&s->lock, flags);
 	return s->curr_channels;
 }
@@ -933,16 +1346,16 @@
 #define DMABUF_DEFAULTORDER (16-PAGE_SHIFT)
 #define DMABUF_MINORDER 1
 
-static void dealloc_dmabuf(struct dmabuf *db)
+static void dealloc_dmabuf(struct cm_state *s, struct dmabuf *db)
 {
 	struct page *pstart, *pend;
-	
+
 	if (db->rawbuf) {
 		/* undo marking the pages as reserved */
 		pend = virt_to_page(db->rawbuf + (PAGE_SIZE << db->buforder) - 1);
 		for (pstart = virt_to_page(db->rawbuf); pstart <= pend; pstart++)
 			ClearPageReserved(pstart);
-		free_pages((unsigned long)db->rawbuf, db->buforder);
+		pci_free_consistent(s->dev, PAGE_SIZE << db->buforder, db->rawbuf, db->dmaaddr);
 	}
 	db->rawbuf = NULL;
 	db->mapped = db->ready = 0;
@@ -975,18 +1388,11 @@
 	if (!db->rawbuf) {
 		db->ready = db->mapped = 0;
 		for (order = DMABUF_DEFAULTORDER; order >= DMABUF_MINORDER; order--)
-			if ((db->rawbuf = (void *)__get_free_pages(GFP_KERNEL | GFP_DMA, order)))
+			if ((db->rawbuf = pci_alloc_consistent(s->dev, PAGE_SIZE << order, &db->dmaaddr)))
 				break;
-		if (!db->rawbuf)
+		if (!db->rawbuf || !db->dmaaddr)
 			return -ENOMEM;
 		db->buforder = order;
-		db->rawphys = virt_to_bus(db->rawbuf);
-		if ((db->rawphys ^ (db->rawphys + (PAGE_SIZE << db->buforder) - 1)) & ~0xffff)
-			printk(KERN_DEBUG "cmpci: DMA buffer crosses 64k boundary: busaddr 0x%lx  size %ld\n", 
-			       (long) db->rawphys, PAGE_SIZE << db->buforder);
-		if ((db->rawphys + (PAGE_SIZE << db->buforder) - 1) & ~0xffffff)
-			printk(KERN_DEBUG "cmpci: DMA buffer beyond 16MB: busaddr 0x%lx  size %ld\n", 
-			       (long) db->rawphys, PAGE_SIZE << db->buforder);
 		/* now mark the pages as reserved; otherwise remap_page_range doesn't do what we want */
 		pend = virt_to_page(db->rawbuf + (PAGE_SIZE << db->buforder) - 1);
 		for (pstart = virt_to_page(db->rawbuf); pstart <= pend; pstart++)
@@ -1020,17 +1426,18 @@
 	spin_lock_irqsave(&s->lock, flags);
 	if (rec) {
 		if (s->status & DO_DUAL_DAC)
-		    set_dmadac1(s, db->rawphys, db->dmasize >> sample_shift[fmt]);
+		    set_dmadac1(s, db->dmaaddr, db->dmasize >> sample_shift[fmt]);
 		else
-		    set_dmaadc(s, db->rawphys, db->dmasize >> sample_shift[fmt]);
+		    set_dmaadc(s, db->dmaaddr, db->dmasize >> sample_shift[fmt]);
 		/* program sample counts */
 		set_countdac(s, db->fragsamples);
 	} else {
-		set_dmadac(s, db->rawphys, db->dmasize >> sample_shift[fmt]);
+		set_dmadac(s, db->dmaaddr, db->dmasize >> sample_shift[fmt]);
 		/* program sample counts */
 		set_countdac(s, db->fragsamples);
 	}
 	spin_unlock_irqrestore(&s->lock, flags);
+	db->enabled = 1;
 	db->ready = 1;
 	return 0;
 }
@@ -1066,33 +1473,14 @@
 	/* update ADC pointer */
 	if (s->dma_adc.ready) {
 	    if (s->status & DO_DUAL_DAC) {
-		hwptr = get_dmaadc(s) % s->dma_adc.dmasize;
-		diff = (s->dma_adc.dmasize + hwptr - s->dma_adc.hwptr) % s->dma_adc.dmasize;
-		s->dma_adc.hwptr = hwptr;
-		s->dma_adc.total_bytes += diff;
-		if (s->dma_adc.mapped) {
-			s->dma_adc.count += diff;
-			if (s->dma_adc.count >= (signed)s->dma_adc.fragsize)
-				wake_up(&s->dma_adc.wait);
-		} else {
-			s->dma_adc.count -= diff;
-			if (s->dma_adc.count <= 0) {
-				pause_adc(s);
-				s->dma_adc.error++;
-			} else if (s->dma_adc.count <= (signed)s->dma_adc.fragsize && !s->dma_adc.endcleared) {
-				clear_advance(s);
-				s->dma_adc.endcleared = 1;
-			}
-			if (s->dma_dac.count + (signed)s->dma_dac.fragsize <= (signed)s->dma_dac.dmasize)
-				wake_up(&s->dma_adc.wait);
-		}
+		    /* the dac part will finish for this */
 	    } else {
 		hwptr = get_dmaadc(s) % s->dma_adc.dmasize;
 		diff = (s->dma_adc.dmasize + hwptr - s->dma_adc.hwptr) % s->dma_adc.dmasize;
 		s->dma_adc.hwptr = hwptr;
 		s->dma_adc.total_bytes += diff;
 		s->dma_adc.count += diff;
-		if (s->dma_adc.count >= (signed)s->dma_adc.fragsize) 
+		if (s->dma_adc.count >= (signed)s->dma_adc.fragsize)
 			wake_up(&s->dma_adc.wait);
 		if (!s->dma_adc.mapped) {
 			if (s->dma_adc.count > (signed)(s->dma_adc.dmasize - ((3 * s->dma_adc.fragsize) >> 1))) {
@@ -1108,18 +1496,28 @@
 		diff = (s->dma_dac.dmasize + hwptr - s->dma_dac.hwptr) % s->dma_dac.dmasize;
 		s->dma_dac.hwptr = hwptr;
 		s->dma_dac.total_bytes += diff;
+		if (s->status & DO_DUAL_DAC) {
+			s->dma_adc.hwptr = hwptr;
+			s->dma_adc.total_bytes += diff;
+		}
 		if (s->dma_dac.mapped) {
 			s->dma_dac.count += diff;
+			if (s->status & DO_DUAL_DAC)
+				s->dma_adc.count += diff;
 			if (s->dma_dac.count >= (signed)s->dma_dac.fragsize)
 				wake_up(&s->dma_dac.wait);
 		} else {
 			s->dma_dac.count -= diff;
+			if (s->status & DO_DUAL_DAC)
+				s->dma_adc.count -= diff;
 			if (s->dma_dac.count <= 0) {
 				pause_dac(s);
 				s->dma_dac.error++;
 			} else if (s->dma_dac.count <= (signed)s->dma_dac.fragsize && !s->dma_dac.endcleared) {
 				clear_advance(s);
 				s->dma_dac.endcleared = 1;
+				if (s->status & DO_DUAL_DAC)
+					s->dma_adc.endcleared = 1;
 			}
 			if (s->dma_dac.count + (signed)s->dma_dac.fragsize <= (signed)s->dma_dac.dmasize)
 				wake_up(&s->dma_dac.wait);
@@ -1127,44 +1525,12 @@
 	}
 }
 
-#ifdef CONFIG_SOUND_CMPCI_MIDI
-/* hold spinlock for the following! */
-static void cm_handle_midi(struct cm_state *s)
-{
-	unsigned char ch;
-	int wake;
-
-	wake = 0;
-	while (!(inb(s->iomidi+1) & 0x80)) {
-		ch = inb(s->iomidi);
-		if (s->midi.icnt < MIDIINBUF) {
-			s->midi.ibuf[s->midi.iwr] = ch;
-			s->midi.iwr = (s->midi.iwr + 1) % MIDIINBUF;
-			s->midi.icnt++;
-		}
-		wake = 1;
-	}
-	if (wake)
-		wake_up(&s->midi.iwait);
-	wake = 0;
-	while (!(inb(s->iomidi+1) & 0x40) && s->midi.ocnt > 0) {
-		outb(s->midi.obuf[s->midi.ord], s->iomidi);
-		s->midi.ord = (s->midi.ord + 1) % MIDIOUTBUF;
-		s->midi.ocnt--;
-		if (s->midi.ocnt < MIDIOUTBUF-16)
-			wake = 1;
-	}
-	if (wake)
-		wake_up(&s->midi.owait);
-}
-#endif
-
 static irqreturn_t cm_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
         struct cm_state *s = (struct cm_state *)dev_id;
 	unsigned int intsrc, intstat;
 	unsigned char mask = 0;
-	
+
 	/* fastpath out, to ease interrupt sharing */
 	intsrc = inl(s->iobase + CODEC_CMI_INT_STATUS);
 	if (!(intsrc & 0x80000000))
@@ -1172,41 +1538,29 @@
 	spin_lock(&s->lock);
 	intstat = inb(s->iobase + CODEC_CMI_INT_HLDCLR + 2);
 	/* acknowledge interrupt */
-	if (intsrc & CM_INT_CH0)
-		mask |= 1;
-	if (intsrc & CM_INT_CH1)
-		mask |= 2;
+	if (intsrc & ADCINT)
+		mask |= ENADCINT;
+	if (intsrc & DACINT)
+		mask |= ENDACINT;
 	outb(intstat & ~mask, s->iobase + CODEC_CMI_INT_HLDCLR + 2);
 	outb(intstat | mask, s->iobase + CODEC_CMI_INT_HLDCLR + 2);
 	cm_update_ptr(s);
+	spin_unlock(&s->lock);
 #ifdef CONFIG_SOUND_CMPCI_MIDI
-	cm_handle_midi(s);
+	if (intsrc & 0x00010000) {	// UART interrupt
+		if (s->midi_devc && intchk_mpu401((void *)s->midi_devc))
+			mpuintr(irq, (void *)s->midi_devc, regs);
+		else
+			inb(s->iomidi);// dummy read
+	}
 #endif
-	spin_unlock(&s->lock);
 	return IRQ_HANDLED;
 }
 
-#ifdef CONFIG_SOUND_CMPCI_MIDI
-static void cm_midi_timer(unsigned long data)
-{
-	struct cm_state *s = (struct cm_state *)data;
-	unsigned long flags;
-	
-	spin_lock_irqsave(&s->lock, flags);
-	cm_handle_midi(s);
-	spin_unlock_irqrestore(&s->lock, flags);
-	s->midi.timer.expires = jiffies+1;
-	add_timer(&s->midi.timer);
-}
-#endif
-
 /* --------------------------------------------------------------------- */
 
 static const char invalid_magic[] = KERN_CRIT "cmpci: invalid magic value\n";
 
-#ifdef CONFIG_SOUND_CMPCI	/* support multiple chips */
-#define VALIDATE_STATE(s)
-#else
 #define VALIDATE_STATE(s)                         \
 ({                                                \
 	if (!(s) || (s)->magic != CM_MAGIC) { \
@@ -1214,7 +1568,6 @@
 		return -ENXIO;                    \
 	}                                         \
 })
-#endif
 
 /* --------------------------------------------------------------------- */
 
@@ -1231,16 +1584,17 @@
 	unsigned rec;
 	unsigned play;
 } mixtable[SOUND_MIXER_NRDEVICES] = {
-	[SOUND_MIXER_CD]     = { DSP_MIX_CDVOLIDX_L,     DSP_MIX_CDVOLIDX_R,     MT_5MUTE,     0x04, 0x02 },
-	[SOUND_MIXER_LINE]   = { DSP_MIX_LINEVOLIDX_L,   DSP_MIX_LINEVOLIDX_R,   MT_5MUTE,     0x10, 0x08 },
+	[SOUND_MIXER_CD]     = { DSP_MIX_CDVOLIDX_L,     DSP_MIX_CDVOLIDX_R,     MT_5MUTE,     0x04, 0x06 },
+	[SOUND_MIXER_LINE]   = { DSP_MIX_LINEVOLIDX_L,   DSP_MIX_LINEVOLIDX_R,   MT_5MUTE,     0x10, 0x18 },
 	[SOUND_MIXER_MIC]    = { DSP_MIX_MICVOLIDX,      DSP_MIX_MICVOLIDX,      MT_5MUTEMONO, 0x01, 0x01 },
 	[SOUND_MIXER_SYNTH]  = { DSP_MIX_FMVOLIDX_L,  	 DSP_MIX_FMVOLIDX_R,     MT_5MUTE,     0x40, 0x00 },
 	[SOUND_MIXER_VOLUME] = { DSP_MIX_MASTERVOLIDX_L, DSP_MIX_MASTERVOLIDX_R, MT_5MUTE,     0x00, 0x00 },
 	[SOUND_MIXER_PCM]    = { DSP_MIX_VOICEVOLIDX_L,  DSP_MIX_VOICEVOLIDX_R,  MT_5MUTE,     0x00, 0x00 },
-	[SOUND_MIXER_SPEAKER]= { DSP_MIX_SPKRVOLIDX,	 DSP_MIX_SPKRVOLIDX,	 MT_5MUTEMONO, 0x01, 0x01 }
+	[SOUND_MIXER_LINE1]  = { DSP_MIX_AUXVOL_L,       DSP_MIX_AUXVOL_R,       MT_5MUTE,     0x80, 0x60 },
+	[SOUND_MIXER_SPEAKER]= { DSP_MIX_SPKRVOLIDX,	 DSP_MIX_SPKRVOLIDX,	 MT_5MUTEMONO, 0x00, 0x01 }
 };
 
-static const unsigned char volidx[SOUND_MIXER_NRDEVICES] = 
+static const unsigned char volidx[SOUND_MIXER_NRDEVICES] =
 {
 	[SOUND_MIXER_CD]     = 1,
 	[SOUND_MIXER_LINE]   = 2,
@@ -1248,15 +1602,32 @@
 	[SOUND_MIXER_SYNTH]  = 4,
 	[SOUND_MIXER_VOLUME] = 5,
 	[SOUND_MIXER_PCM]    = 6,
-	[SOUND_MIXER_SPEAKER]= 7
+	[SOUND_MIXER_LINE1]  = 7,
+	[SOUND_MIXER_SPEAKER]= 8
 };
 
+static unsigned mixer_outmask(struct cm_state *s)
+{
+	unsigned long flags;
+	int i, j, k;
+
+	spin_lock_irqsave(&s->lock, flags);
+	j = rdmixer(s, DSP_MIX_OUTMIXIDX);
+	spin_unlock_irqrestore(&s->lock, flags);
+	for (k = i = 0; i < SOUND_MIXER_NRDEVICES; i++)
+		if (j & mixtable[i].play)
+			k |= 1 << i;
+	return k;
+}
+
 static unsigned mixer_recmask(struct cm_state *s)
 {
+	unsigned long flags;
 	int i, j, k;
 
+	spin_lock_irqsave(&s->lock, flags);
 	j = rdmixer(s, DSP_MIX_ADCMIXIDX_L);
-	j &= 0x7f;
+	spin_unlock_irqrestore(&s->lock, flags);
 	for (k = i = 0; i < SOUND_MIXER_NRDEVICES; i++)
 		if (j & mixtable[i].rec)
 			k |= 1 << i;
@@ -1291,16 +1662,18 @@
 	}
 	if (cmd == OSS_GETVERSION)
 		return put_user(SOUND_VERSION, (int *)arg);
-	if (_IOC_TYPE(cmd) != 'M' || _IOC_SIZE(cmd) != sizeof(int))
+	if (_IOC_TYPE(cmd) != 'M' || _SIOC_SIZE(cmd) != sizeof(int))
                 return -EINVAL;
-        if (_IOC_DIR(cmd) == _IOC_READ) {
+        if (_SIOC_DIR(cmd) == _SIOC_READ) {
                 switch (_IOC_NR(cmd)) {
                 case SOUND_MIXER_RECSRC: /* Arg contains a bit for each recording source */
-			return put_user(mixer_recmask(s), (int *)arg);
-			
+			val = mixer_recmask(s);
+			return put_user(val, (int *)arg);
+
                 case SOUND_MIXER_OUTSRC: /* Arg contains a bit for each recording source */
-			return put_user(mixer_recmask(s), (int *)arg);//need fix
-			
+			val = mixer_outmask(s);
+			return put_user(val, (int *)arg);
+
                 case SOUND_MIXER_DEVMASK: /* Arg contains a bit for each supported device */
 			for (val = i = 0; i < SOUND_MIXER_NRDEVICES; i++)
 				if (mixtable[i].type)
@@ -1312,19 +1685,19 @@
 				if (mixtable[i].rec)
 					val |= 1 << i;
 			return put_user(val, (int *)arg);
-			
+
                 case SOUND_MIXER_OUTMASK: /* Arg contains a bit for each supported recording source */
 			for (val = i = 0; i < SOUND_MIXER_NRDEVICES; i++)
 				if (mixtable[i].play)
 					val |= 1 << i;
 			return put_user(val, (int *)arg);
-			
+
                  case SOUND_MIXER_STEREODEVS: /* Mixer channels supporting stereo */
 			for (val = i = 0; i < SOUND_MIXER_NRDEVICES; i++)
 				if (mixtable[i].type && mixtable[i].type != MT_4MUTEMONO)
 					val |= 1 << i;
 			return put_user(val, (int *)arg);
-			
+
                 case SOUND_MIXER_CAPS:
 			return put_user(0, (int *)arg);
 
@@ -1337,7 +1710,7 @@
 			return put_user(s->mix.vol[volidx[i]-1], (int *)arg);
 		}
 	}
-        if (_IOC_DIR(cmd) != (_IOC_READ|_IOC_WRITE)) 
+        if (_SIOC_DIR(cmd) != (_SIOC_READ|_SIOC_WRITE))
 		return -EINVAL;
 	s->mix.modcnt++;
 	switch (_IOC_NR(cmd)) {
@@ -1356,7 +1729,7 @@
 		}
 		spin_lock_irqsave(&s->lock, flags);
 		wrmixer(s, DSP_MIX_ADCMIXIDX_L, j);
-		wrmixer(s, DSP_MIX_ADCMIXIDX_R, (j & 1) | (j>>1));
+		wrmixer(s, DSP_MIX_ADCMIXIDX_R, (j & 1) | (j>>1) | (j & 0x80));
 		spin_unlock_irqrestore(&s->lock, flags);
 		return 0;
 
@@ -1373,11 +1746,11 @@
 			j |= mixtable[i].play;
 		}
 		spin_lock_irqsave(&s->lock, flags);
-		frobindir(s, DSP_MIX_OUTMIXIDX, 0x1f, j);
+		wrmixer(s, DSP_MIX_OUTMIXIDX, j);
 		spin_unlock_irqrestore(&s->lock, flags);
 		return 0;
 
-		default:
+	default:
 		i = _IOC_NR(cmd);
 		if (i >= SOUND_MIXER_NRDEVICES || !mixtable[i].type)
 			return -EINVAL;
@@ -1404,22 +1777,38 @@
 			rl = (l < 4 ? 0 : (l - 5) / 3) & 31;
 			rr = (rl >> 2) & 7;
 			wrmixer(s, mixtable[i].left, rl<<3);
-			maskb(s->iobase + CODEC_CMI_MIXER2, ~0x0e, rr<<1);
+			if (i == SOUND_MIXER_MIC)
+				maskb(s->iobase + CODEC_CMI_MIXER2, ~0x0e, rr<<1);
 			break;
-			
+
 		case MT_5MUTEMONO:
-			r = l;
 			rl = l < 4 ? 0 : (l - 5) / 3;
-			rr = rl >> 2;
  			wrmixer(s, mixtable[i].left, rl<<3);
-			maskb(s->iobase + CODEC_CMI_MIXER2, ~0x0e, rr<<1);
+			l = rdmixer(s, DSP_MIX_OUTMIXIDX) & ~mixtable[i].play;
+			r = rl ? mixtable[i].play : 0;
+			wrmixer(s, DSP_MIX_OUTMIXIDX, l | r);
+			/* for recording */
+			if (i == SOUND_MIXER_MIC) {
+				if (s->chip_version >= 37) {
+					rr = rl >> 1;
+					maskb(s->iobase + CODEC_CMI_MIXER2, ~0x0e, (rr&0x07)<<1);
+					frobindir(s, DSP_MIX_EXTENSION, ~0x01, rr>>3);
+				} else {
+					rr = rl >> 2;
+					maskb(s->iobase + CODEC_CMI_MIXER2, ~0x0e, rr<<1);
+				}
+			}
 			break;
-				
+
 		case MT_5MUTE:
 			rl = l < 4 ? 0 : (l - 5) / 3;
 			rr = r < 4 ? 0 : (r - 5) / 3;
  			wrmixer(s, mixtable[i].left, rl<<3);
 			wrmixer(s, mixtable[i].right, rr<<3);
+			l = rdmixer(s, DSP_MIX_OUTMIXIDX);
+			l &= ~mixtable[i].play;
+			r = (rl|rr) ? mixtable[i].play : 0;
+			wrmixer(s, DSP_MIX_OUTMIXIDX, l | r);
 			break;
 
 		case MT_6MUTE:
@@ -1449,12 +1838,16 @@
 static int cm_open_mixdev(struct inode *inode, struct file *file)
 {
 	int minor = iminor(inode);
-	struct cm_state *s = devs;
+	struct list_head *list;
+	struct cm_state *s;
 
-	while (s && s->dev_mixer != minor)
-		s = s->next;
-	if (!s)
-		return -ENODEV;
+	for (list = devs.next; ; list = list->next) {
+		if (list == &devs)
+			return -ENODEV;
+		s = list_entry(list, struct cm_state, devs);
+		if (s->dev_mixer == minor)
+			break;
+	}
        	VALIDATE_STATE(s);
 	file->private_data = s;
 	return 0;
@@ -1462,10 +1855,8 @@
 
 static int cm_release_mixdev(struct inode *inode, struct file *file)
 {
-	struct cm_state *s;
+	struct cm_state *s = (struct cm_state *)file->private_data;
 
-	s = file->private_data;
-	
 	VALIDATE_STATE(s);
 	return 0;
 }
@@ -1494,9 +1885,9 @@
 
 	if (s->dma_dac.mapped || !s->dma_dac.ready)
 		return 0;
-        set_current_state(TASK_INTERRUPTIBLE);
         add_wait_queue(&s->dma_dac.wait, &wait);
         for (;;) {
+        	__set_current_state(TASK_INTERRUPTIBLE);
                 spin_lock_irqsave(&s->lock, flags);
 		count = s->dma_dac.count;
                 spin_unlock_irqrestore(&s->lock, flags);
@@ -1512,7 +1903,7 @@
 		tmo = 3 * HZ * (count + s->dma_dac.fragsize) / 2 / s->ratedac;
 		tmo >>= sample_shift[(s->fmt >> CM_CFMT_DACSHIFT) & CM_CFMT_MASK];
 		if (!schedule_timeout(tmo + 1))
-			printk(KERN_DEBUG "cmpci: dma timed out??\n");
+			DBG(printk(KERN_DEBUG "cmpci: dma timed out??\n");)
         }
         remove_wait_queue(&s->dma_dac.wait, &wait);
         set_current_state(TASK_RUNNING);
@@ -1526,6 +1917,7 @@
 static ssize_t cm_read(struct file *file, char *buffer, size_t count, loff_t *ppos)
 {
 	struct cm_state *s = (struct cm_state *)file->private_data;
+	DECLARE_WAITQUEUE(wait, current);
 	ssize_t ret;
 	unsigned long flags;
 	unsigned swptr;
@@ -1542,37 +1934,71 @@
 		return -EFAULT;
 	ret = 0;
 
+        add_wait_queue(&s->dma_adc.wait, &wait);
 	while (count > 0) {
 		spin_lock_irqsave(&s->lock, flags);
 		swptr = s->dma_adc.swptr;
 		cnt = s->dma_adc.dmasize-swptr;
 		if (s->dma_adc.count < cnt)
 			cnt = s->dma_adc.count;
+		if (cnt <= 0)
+			__set_current_state(TASK_INTERRUPTIBLE);
 		spin_unlock_irqrestore(&s->lock, flags);
 		if (cnt > count)
 			cnt = count;
 		if (cnt <= 0) {
-			start_adc(s);
-			if (file->f_flags & O_NONBLOCK)
-				return ret ? ret : -EAGAIN;
-			if (!interruptible_sleep_on_timeout(&s->dma_adc.wait, HZ)) {
+			if (s->dma_adc.enabled)
+				start_adc(s);
+			if (file->f_flags & O_NONBLOCK) {
+				if (!ret)
+					ret = -EAGAIN;
+				goto out;
+			}
+			if (!schedule_timeout(HZ)) {
 				printk(KERN_DEBUG "cmpci: read: chip lockup? dmasz %u fragsz %u count %i hwptr %u swptr %u\n",
 				       s->dma_adc.dmasize, s->dma_adc.fragsize, s->dma_adc.count,
 				       s->dma_adc.hwptr, s->dma_adc.swptr);
 				spin_lock_irqsave(&s->lock, flags);
 				stop_adc_unlocked(s);
-				set_dmaadc(s, s->dma_adc.rawphys, s->dma_adc.dmasamples);
+				set_dmaadc(s, s->dma_adc.dmaaddr, s->dma_adc.dmasamples);
 				/* program sample counts */
 				set_countadc(s, s->dma_adc.fragsamples);
 				s->dma_adc.count = s->dma_adc.hwptr = s->dma_adc.swptr = 0;
 				spin_unlock_irqrestore(&s->lock, flags);
 			}
-			if (signal_pending(current))
-				return ret ? ret : -ERESTARTSYS;
+			if (signal_pending(current)) {
+				if (!ret)
+					ret = -ERESTARTSYS;
+				goto out;
+			}
 			continue;
 		}
-		if (copy_to_user(buffer, s->dma_adc.rawbuf + swptr, cnt))
-			return ret ? ret : -EFAULT;
+		if (s->status & DO_BIGENDIAN_R) {
+			int	i, err;
+			unsigned char *src, *dst;
+			unsigned char data[2];
+
+			src = (unsigned char *) (s->dma_adc.rawbuf + swptr);
+			dst = (unsigned char *) buffer;
+			// copy left/right sample at one time
+			for (i = 0; i < cnt / 2; i++) {
+				data[0] = src[1];
+				data[1] = src[0];
+				if ((err = __put_user(data[0], dst++))) {
+					ret = err;
+					goto out;
+				}
+				if ((err = __put_user(data[1], dst++))) {
+					ret = err;
+					goto out;
+				}
+				src += 2;
+			}
+		} else if (copy_to_user(buffer, s->dma_adc.rawbuf + swptr, cnt)) {
+			if (!ret)
+				ret = -EFAULT;
+			goto out;
+		}
 		swptr = (swptr + cnt) % s->dma_adc.dmasize;
 		spin_lock_irqsave(&s->lock, flags);
 		s->dma_adc.swptr = swptr;
@@ -1580,15 +2006,20 @@
 		count -= cnt;
 		buffer += cnt;
 		ret += cnt;
-		start_adc_unlocked(s);
+		if (s->dma_adc.enabled)
+			start_adc_unlocked(s);
 		spin_unlock_irqrestore(&s->lock, flags);
 	}
+out:
+        remove_wait_queue(&s->dma_adc.wait, &wait);
+	set_current_state(TASK_RUNNING);
 	return ret;
 }
 
 static ssize_t cm_write(struct file *file, const char *buffer, size_t count, loff_t *ppos)
 {
 	struct cm_state *s = (struct cm_state *)file->private_data;
+	DECLARE_WAITQUEUE(wait, current);
 	ssize_t ret;
 	unsigned long flags;
 	unsigned swptr;
@@ -1608,11 +2039,12 @@
 			return -ENXIO;
 		if (!s->dma_adc.ready && (ret = prog_dmabuf(s, 1)))
 			return ret;
-		if (!access_ok(VERIFY_READ, buffer, count))
-			return -EFAULT;
 	}
+	if (!access_ok(VERIFY_READ, buffer, count))
+		return -EFAULT;
 	ret = 0;
 
+        add_wait_queue(&s->dma_dac.wait, &wait);
 	while (count > 0) {
 		spin_lock_irqsave(&s->lock, flags);
 		if (s->dma_dac.count < 0) {
@@ -1633,33 +2065,42 @@
 			if (s->dma_dac.count + cnt > s->dma_dac.dmasize)
 				cnt = s->dma_dac.dmasize - s->dma_dac.count;
 		}
+		if (cnt <= 0)
+			__set_current_state(TASK_INTERRUPTIBLE);
 		spin_unlock_irqrestore(&s->lock, flags);
 		if (cnt > count)
 			cnt = count;
 		if ((s->status & DO_DUAL_DAC) && (cnt > count / 2))
 		    cnt = count / 2;
 		if (cnt <= 0) {
-			start_dac(s);
-			if (file->f_flags & O_NONBLOCK)
-				return ret ? ret : -EAGAIN;
-			if (!interruptible_sleep_on_timeout(&s->dma_dac.wait, HZ)) {
+			if (s->dma_dac.enabled)
+				start_dac(s);
+			if (file->f_flags & O_NONBLOCK) {
+				if (!ret)
+					ret = -EAGAIN;
+				goto out;
+			}
+			if (!schedule_timeout(HZ)) {
 				printk(KERN_DEBUG "cmpci: write: chip lockup? dmasz %u fragsz %u count %i hwptr %u swptr %u\n",
 				       s->dma_dac.dmasize, s->dma_dac.fragsize, s->dma_dac.count,
 				       s->dma_dac.hwptr, s->dma_dac.swptr);
 				spin_lock_irqsave(&s->lock, flags);
 				stop_dac_unlocked(s);
-				set_dmadac(s, s->dma_dac.rawphys, s->dma_dac.dmasamples);
+				set_dmadac(s, s->dma_dac.dmaaddr, s->dma_dac.dmasamples);
 				/* program sample counts */
 				set_countdac(s, s->dma_dac.fragsamples);
 				s->dma_dac.count = s->dma_dac.hwptr = s->dma_dac.swptr = 0;
 				if (s->status & DO_DUAL_DAC)  {
-					set_dmadac1(s, s->dma_adc.rawphys, s->dma_adc.dmasamples);
+					set_dmadac1(s, s->dma_adc.dmaaddr, s->dma_adc.dmasamples);
 					s->dma_adc.count = s->dma_adc.hwptr = s->dma_adc.swptr = 0;
 				}
 				spin_unlock_irqrestore(&s->lock, flags);
 			}
-			if (signal_pending(current))
-				return ret ? ret : -ERESTARTSYS;
+			if (signal_pending(current)) {
+				if (!ret)
+					ret = -ERESTARTSYS;
+				goto out;
+			}
 			continue;
 		}
 		if (s->status & DO_AC3_SW) {
@@ -1668,9 +2109,65 @@
 			// clip exceeded data, caught by 033 and 037
 			if (swptr + 2 * cnt > s->dma_dac.dmasize)
 				cnt = (s->dma_dac.dmasize - swptr) / 2;
-			if ((err = trans_ac3(s, s->dma_dac.rawbuf + swptr, buffer, cnt)))
-				return err;
+			if ((err = trans_ac3(s, s->dma_dac.rawbuf + swptr, buffer, cnt))) {
+				ret = err;
+				goto out;
+			}
 			swptr = (swptr + 2 * cnt) % s->dma_dac.dmasize;
+		} else if ((s->status & DO_DUAL_DAC) && (s->status & DO_BIGENDIAN_W)) {
+			int	i, err;
+			unsigned char *src, *dst0, *dst1;
+			unsigned char data[8];
+
+			src = (unsigned char *) buffer;
+			dst0 = (unsigned char *) (s->dma_dac.rawbuf + swptr);
+			dst1 = (unsigned char *) (s->dma_adc.rawbuf + swptr);
+			// copy left/right sample at one time
+			for (i = 0; i < cnt / 4; i++) {
+				if ((err = __get_user(data[0], src++))) {
+					ret = err;
+					goto out;
+				}
+				if ((err = __get_user(data[1], src++))) {
+					ret = err;
+					goto out;
+				}
+				if ((err = __get_user(data[2], src++))) {
+					ret = err;
+					goto out;
+				}
+				if ((err = __get_user(data[3], src++))) {
+					ret = err;
+					goto out;
+				}
+				if ((err = __get_user(data[4], src++))) {
+					ret = err;
+					goto out;
+				}
+				if ((err = __get_user(data[5], src++))) {
+					ret = err;
+					goto out;
+				}
+				if ((err = __get_user(data[6], src++))) {
+					ret = err;
+					goto out;
+				}
+				if ((err = __get_user(data[7], src++))) {
+					ret = err;
+					goto out;
+				}
+				dst0[0] = data[1];
+				dst0[1] = data[0];
+				dst0[2] = data[3];
+				dst0[3] = data[2];
+				dst1[0] = data[5];
+				dst1[1] = data[4];
+				dst1[2] = data[7];
+				dst1[3] = data[6];
+				dst0 += 4;
+				dst1 += 4;
+			}
+			swptr = (swptr + cnt) % s->dma_dac.dmasize;
 		} else if (s->status & DO_DUAL_DAC) {
 			int	i, err;
 			unsigned long *src, *dst0, *dst1;
@@ -1679,16 +2176,45 @@
 			dst0 = (unsigned long *) (s->dma_dac.rawbuf + swptr);
 			dst1 = (unsigned long *) (s->dma_adc.rawbuf + swptr);
 			// copy left/right sample at one time
-			for (i = 0; i <= cnt / 4; i++) {
-				if ((err = __get_user(*dst0++, src++)))
-					return err;
-				if ((err = __get_user(*dst1++, src++)))
-					return err;
+			for (i = 0; i < cnt / 4; i++) {
+				if ((err = __get_user(*dst0++, src++))) {
+					ret = err;
+					goto out;
+				}
+				if ((err = __get_user(*dst1++, src++))) {
+					ret = err;
+					goto out;
+				}
+			}
+			swptr = (swptr + cnt) % s->dma_dac.dmasize;
+		} else if (s->status & DO_BIGENDIAN_W) {
+			int	i, err;
+			unsigned char *src, *dst;
+			unsigned char data[2];
+
+			src = (unsigned char *) buffer;
+			dst = (unsigned char *) (s->dma_dac.rawbuf + swptr);
+			// swap hi/lo bytes for each sample
+			for (i = 0; i < cnt / 2; i++) {
+				if ((err = __get_user(data[0], src++))) {
+					ret = err;
+					goto out;
+				}
+				if ((err = __get_user(data[1], src++))) {
+					ret = err;
+					goto out;
+				}
+				dst[0] = data[1];
+				dst[1] = data[0];
+				dst += 2;
 			}
 			swptr = (swptr + cnt) % s->dma_dac.dmasize;
 		} else {
-			if (copy_from_user(s->dma_dac.rawbuf + swptr, buffer, cnt))
-				return ret ? ret : -EFAULT;
+			if (copy_from_user(s->dma_dac.rawbuf + swptr, buffer, cnt)) {
+				if (!ret)
+					ret = -EFAULT;
+				goto out;
+			}
 			swptr = (swptr + cnt) % s->dma_dac.dmasize;
 		}
 		spin_lock_irqsave(&s->lock, flags);
@@ -1706,8 +2232,12 @@
 			buffer += cnt;
 			ret += cnt;
 		}
-		start_dac(s);
+		if (s->dma_dac.enabled)
+			start_dac(s);
 	}
+out:
+        remove_wait_queue(&s->dma_dac.wait, &wait);
+	set_current_state(TASK_RUNNING);
 	return ret;
 }
 
@@ -1718,10 +2248,16 @@
 	unsigned int mask = 0;
 
 	VALIDATE_STATE(s);
-	if (file->f_mode & FMODE_WRITE)
+	if (file->f_mode & FMODE_WRITE) {
+		if (!s->dma_dac.ready && prog_dmabuf(s, 0))
+			return 0;
 		poll_wait(file, &s->dma_dac.wait, wait);
-	if (file->f_mode & FMODE_READ)
+	}
+	if (file->f_mode & FMODE_READ) {
+		if (!s->dma_adc.ready && prog_dmabuf(s, 1))
+			return 0;
 		poll_wait(file, &s->dma_adc.wait, wait);
+	}
 	spin_lock_irqsave(&s->lock, flags);
 	cm_update_ptr(s);
 	if (file->f_mode & FMODE_READ) {
@@ -1730,7 +2266,7 @@
 	}
 	if (file->f_mode & FMODE_WRITE) {
 		if (s->dma_dac.mapped) {
-			if (s->dma_dac.count >= (signed)s->dma_dac.fragsize) 
+			if (s->dma_dac.count >= (signed)s->dma_dac.fragsize)
 				mask |= POLLOUT | POLLWRNORM;
 		} else {
 			if ((signed)s->dma_dac.dmasize >= s->dma_dac.count + (signed)s->dma_dac.fragsize)
@@ -1776,6 +2312,16 @@
 	return ret;
 }
 
+#define SNDCTL_SPDIF_COPYRIGHT	_SIOW('S',  0, int)       // set/reset S/PDIF copy protection
+#define SNDCTL_SPDIF_LOOP	_SIOW('S',  1, int)       // set/reset S/PDIF loop
+#define SNDCTL_SPDIF_MONITOR	_SIOW('S',  2, int)       // set S/PDIF monitor
+#define SNDCTL_SPDIF_LEVEL	_SIOW('S',  3, int)       // set/reset S/PDIF out level
+#define SNDCTL_SPDIF_INV	_SIOW('S',  4, int)       // set/reset S/PDIF in inverse
+#define SNDCTL_SPDIF_SEL2	_SIOW('S',  5, int)       // set S/PDIF in #2
+#define SNDCTL_SPDIF_VALID	_SIOW('S',  6, int)       // set S/PDIF valid
+#define SNDCTL_SPDIFOUT		_SIOW('S',  7, int)       // set S/PDIF out
+#define SNDCTL_SPDIFIN		_SIOW('S',  8, int)       // set S/PDIF out
+
 static int cm_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
 {
 	struct cm_state *s = (struct cm_state *)file->private_data;
@@ -1796,13 +2342,13 @@
 		if (file->f_mode & FMODE_WRITE)
 			return drain_dac(s, 0/*file->f_flags & O_NONBLOCK*/);
 		return 0;
-		
+
 	case SNDCTL_DSP_SETDUPLEX:
 		return 0;
 
 	case SNDCTL_DSP_GETCAPS:
 		return put_user(DSP_CAP_DUPLEX | DSP_CAP_REALTIME | DSP_CAP_TRIGGER | DSP_CAP_MMAP | DSP_CAP_BIND, (int *)arg);
-		
+
         case SNDCTL_DSP_RESET:
 		if (file->f_mode & FMODE_WRITE) {
 			stop_dac(s);
@@ -1905,13 +2451,14 @@
 				val = set_dac_channels(s, val);
 				return put_user(val, (int *)arg);
 			}
-		}            
-		return put_user((s->fmt & ((file->f_mode & FMODE_READ) ? (CM_CFMT_STEREO << CM_CFMT_ADCSHIFT) 
+		}
+		return put_user((s->fmt & ((file->f_mode & FMODE_READ) ? (CM_CFMT_STEREO << CM_CFMT_ADCSHIFT)
 					   : (CM_CFMT_STEREO << CM_CFMT_DACSHIFT))) ? 2 : 1, (int *)arg);
-		
+
 	case SNDCTL_DSP_GETFMTS: /* Returns a mask */
-                return put_user(AFMT_S16_LE|AFMT_U8|AFMT_AC3, (int *)arg);
-		
+                return put_user(AFMT_S16_BE|AFMT_S16_LE|AFMT_U8|
+			((s->capability & CAN_AC3) ? AFMT_AC3 : 0), (int *)arg);
+
 	case SNDCTL_DSP_SETFMT: /* Selects ONE fmt*/
 		if (get_user(val, (int *)arg))
 			return -EFAULT;
@@ -1921,36 +2468,44 @@
 			if (file->f_mode & FMODE_READ) {
 				stop_adc(s);
 				s->dma_adc.ready = 0;
-				if (val == AFMT_S16_LE)
+				if (val == AFMT_S16_BE || val == AFMT_S16_LE)
 					fmtd |= CM_CFMT_16BIT << CM_CFMT_ADCSHIFT;
 				else
 					fmtm &= ~(CM_CFMT_16BIT << CM_CFMT_ADCSHIFT);
+				if (val == AFMT_S16_BE)
+					s->status |= DO_BIGENDIAN_R;
+				else
+					s->status &= ~DO_BIGENDIAN_R;
 			}
 			if (file->f_mode & FMODE_WRITE) {
 				stop_dac(s);
 				s->dma_dac.ready = 0;
-				if (val == AFMT_S16_LE || val == AFMT_AC3)
+				if (val == AFMT_S16_BE || val == AFMT_S16_LE || val == AFMT_AC3)
 					fmtd |= CM_CFMT_16BIT << CM_CFMT_DACSHIFT;
 				else
 					fmtm &= ~(CM_CFMT_16BIT << CM_CFMT_DACSHIFT);
 				if (val == AFMT_AC3) {
 					fmtd |= CM_CFMT_STEREO << CM_CFMT_DACSHIFT;
-					set_ac3(s, s->ratedac);
+					set_ac3(s, 48000);
 				} else
 					set_ac3(s, 0);
 				if (s->status & DO_DUAL_DAC) {
 					s->dma_adc.ready = 0;
-					if (val == AFMT_S16_LE)
+					if (val == AFMT_S16_BE || val == AFMT_S16_LE)
 						fmtd |= CM_CFMT_STEREO << CM_CFMT_ADCSHIFT;
 					else
 						fmtm &= ~(CM_CFMT_STEREO << CM_CFMT_ADCSHIFT);
 				}
+				if (val == AFMT_S16_BE)
+					s->status |= DO_BIGENDIAN_W;
+				else
+					s->status &= ~DO_BIGENDIAN_W;
 			}
 			set_fmt(s, fmtm, fmtd);
 		}
 		if (s->status & DO_AC3) return put_user(AFMT_AC3, (int *)arg);
 		return put_user((s->fmt & ((file->f_mode & FMODE_READ) ? (CM_CFMT_16BIT << CM_CFMT_ADCSHIFT)
-					   : (CM_CFMT_16BIT << CM_CFMT_DACSHIFT))) ? AFMT_S16_LE : AFMT_U8, (int *)arg);
+					   : (CM_CFMT_16BIT << CM_CFMT_DACSHIFT))) ? val : AFMT_U8, (int *)arg);
 
 	case SNDCTL_DSP_POST:
                 return 0;
@@ -1959,14 +2514,14 @@
 		val = 0;
 		if (s->status & DO_DUAL_DAC) {
 			if (file->f_mode & FMODE_WRITE &&
-			 (s->enable & CM_ENABLE_CH1) &&
-			 (s->enable & CM_ENABLE_CH0))
+			 (s->enable & ENDAC) &&
+			 (s->enable & ENADC))
 				val |= PCM_ENABLE_OUTPUT;
 			return put_user(val, (int *)arg);
 		}
-		if (file->f_mode & FMODE_READ && s->enable & CM_ENABLE_CH0) 
+		if (file->f_mode & FMODE_READ && s->enable & ENADC)
 			val |= PCM_ENABLE_INPUT;
-		if (file->f_mode & FMODE_WRITE && s->enable & CM_ENABLE_CH1) 
+		if (file->f_mode & FMODE_WRITE && s->enable & ENDAC)
 			val |= PCM_ENABLE_OUTPUT;
 		return put_user(val, (int *)arg);
 
@@ -1975,11 +2530,14 @@
 			return -EFAULT;
 		if (file->f_mode & FMODE_READ) {
 			if (val & PCM_ENABLE_INPUT) {
-				if (!s->dma_adc.ready && (ret =  prog_dmabuf(s, 1)))
+				if (!s->dma_adc.ready && (ret = prog_dmabuf(s, 1)))
 					return ret;
+				s->dma_adc.enabled = 1;
 				start_adc(s);
-			} else
+			} else {
+				s->dma_adc.enabled = 0;
 				stop_adc(s);
+			}
 		}
 		if (file->f_mode & FMODE_WRITE) {
 			if (val & PCM_ENABLE_OUTPUT) {
@@ -1989,16 +2547,19 @@
 					if (!s->dma_adc.ready && (ret = prog_dmabuf(s, 1)))
 						return ret;
 				}
+				s->dma_dac.enabled = 1;
 				start_dac(s);
-			} else
+			} else {
+				s->dma_dac.enabled = 0;
 				stop_dac(s);
+			}
 		}
 		return 0;
 
 	case SNDCTL_DSP_GETOSPACE:
 		if (!(file->f_mode & FMODE_WRITE))
 			return -EINVAL;
-		if (!(s->enable & CM_ENABLE_CH1) && (val = prog_dmabuf(s, 0)) != 0)
+		if (!(s->enable & ENDAC) && (val = prog_dmabuf(s, 0)) != 0)
 			return val;
 		spin_lock_irqsave(&s->lock, flags);
 		cm_update_ptr(s);
@@ -2012,17 +2573,17 @@
 	case SNDCTL_DSP_GETISPACE:
 		if (!(file->f_mode & FMODE_READ))
 			return -EINVAL;
-		if (!(s->enable & CM_ENABLE_CH0) && (val = prog_dmabuf(s, 1)) != 0)
+		if (!(s->enable & ENADC) && (val = prog_dmabuf(s, 1)) != 0)
 			return val;
 		spin_lock_irqsave(&s->lock, flags);
 		cm_update_ptr(s);
 		abinfo.fragsize = s->dma_adc.fragsize;
                 abinfo.bytes = s->dma_adc.count;
                 abinfo.fragstotal = s->dma_adc.numfrag;
-                abinfo.fragments = abinfo.bytes >> s->dma_adc.fragshift;      
+                abinfo.fragments = abinfo.bytes >> s->dma_adc.fragshift;
 		spin_unlock_irqrestore(&s->lock, flags);
 		return copy_to_user((void *)arg, &abinfo, sizeof(abinfo)) ? -EFAULT : 0;
-		
+
         case SNDCTL_DSP_NONBLOCK:
                 file->f_flags |= O_NONBLOCK;
                 return 0;
@@ -2047,9 +2608,7 @@
 		if (s->dma_adc.mapped)
 			s->dma_adc.count &= s->dma_adc.fragsize-1;
 		spin_unlock_irqrestore(&s->lock, flags);
-		if (copy_to_user((void *)arg, &cinfo, sizeof(cinfo)))
-			return -EFAULT;
-		return 0;
+                return copy_to_user((void *)arg, &cinfo, sizeof(cinfo))  ? -EFAULT : 0;
 
         case SNDCTL_DSP_GETOPTR:
 		if (!(file->f_mode & FMODE_WRITE))
@@ -2066,9 +2625,7 @@
 				s->dma_adc.count &= s->dma_adc.fragsize-1;
 		}
 		spin_unlock_irqrestore(&s->lock, flags);
-		if (copy_to_user((void *)arg, &cinfo, sizeof(cinfo)))
-			return -EFAULT;
-		return 0;
+                return copy_to_user((void *)arg, &cinfo, sizeof(cinfo)) ? -EFAULT : 0;
 
         case SNDCTL_DSP_GETBLKSIZE:
 		if (file->f_mode & FMODE_WRITE) {
@@ -2145,7 +2702,7 @@
 
 	case SNDCTL_DSP_GETCHANNELMASK:
 		return put_user(DSP_BIND_FRONT|DSP_BIND_SURR|DSP_BIND_CENTER_LFE|DSP_BIND_SPDIF, (int *)arg);
-		
+
 	case SNDCTL_DSP_BIND_CHANNEL:
 		if (get_user(val, (int *)arg))
 			return -EFAULT;
@@ -2163,6 +2720,11 @@
 			if (file->f_mode & FMODE_READ) {
 				stop_adc(s);
 				s->dma_adc.ready = 0;
+				if (val & DSP_BIND_SPDIF) {
+					set_spdifin(s, s->rateadc);
+					if (!(s->status & DO_SPDIF_OUT))
+						val &= ~DSP_BIND_SPDIF;
+				}
 			}
 			if (file->f_mode & FMODE_WRITE) {
 				stop_dac(s);
@@ -2202,7 +2764,51 @@
 	case SNDCTL_DSP_MAPOUTBUF:
         case SNDCTL_DSP_SETSYNCRO:
                 return -EINVAL;
-		
+	case SNDCTL_SPDIF_COPYRIGHT:
+		if (get_user(val, (int *)arg))
+			return -EFAULT;
+		set_spdif_copyright(s, val);
+                return 0;
+	case SNDCTL_SPDIF_LOOP:
+		if (get_user(val, (int *)arg))
+			return -EFAULT;
+		set_spdif_loop(s, val);
+                return 0;
+	case SNDCTL_SPDIF_MONITOR:
+		if (get_user(val, (int *)arg))
+			return -EFAULT;
+		set_spdif_monitor(s, val);
+                return 0;
+	case SNDCTL_SPDIF_LEVEL:
+		if (get_user(val, (int *)arg))
+			return -EFAULT;
+		set_spdifout_level(s, val);
+                return 0;
+	case SNDCTL_SPDIF_INV:
+		if (get_user(val, (int *)arg))
+			return -EFAULT;
+		set_spdifin_inverse(s, val);
+                return 0;
+	case SNDCTL_SPDIF_SEL2:
+		if (get_user(val, (int *)arg))
+			return -EFAULT;
+		set_spdifin_channel2(s, val);
+                return 0;
+	case SNDCTL_SPDIF_VALID:
+		if (get_user(val, (int *)arg))
+			return -EFAULT;
+		set_spdifin_valid(s, val);
+                return 0;
+	case SNDCTL_SPDIFOUT:
+		if (get_user(val, (int *)arg))
+			return -EFAULT;
+		set_spdifout(s, val ? s->ratedac : 0);
+                return 0;
+	case SNDCTL_SPDIFIN:
+		if (get_user(val, (int *)arg))
+			return -EFAULT;
+		set_spdifin(s, val ? s->rateadc : 0);
+                return 0;
 	}
 	return mixer_ioctl(s, cmd, arg);
 }
@@ -2210,13 +2816,18 @@
 static int cm_open(struct inode *inode, struct file *file)
 {
 	int minor = iminor(inode);
-	struct cm_state *s = devs;
+	DECLARE_WAITQUEUE(wait, current);
 	unsigned char fmtm = ~0, fmts = 0;
+	struct list_head *list;
+	struct cm_state *s;
 
-	while (s && ((s->dev_audio ^ minor) & ~0xf))
-		s = s->next;
-	if (!s)
-		return -ENODEV;
+	for (list = devs.next; ; list = list->next) {
+		if (list == &devs)
+			return -ENODEV;
+		s = list_entry(list, struct cm_state, devs);
+		if (!((s->dev_audio ^ minor) & ~0xf))
+			break;
+	}
        	VALIDATE_STATE(s);
 	file->private_data = s;
 	/* wait for device to become free */
@@ -2226,31 +2837,39 @@
 			up(&s->open_sem);
 			return -EBUSY;
 		}
+		add_wait_queue(&s->open_wait, &wait);
+		__set_current_state(TASK_INTERRUPTIBLE);
 		up(&s->open_sem);
-		interruptible_sleep_on(&s->open_wait);
+		schedule();
+		remove_wait_queue(&s->open_wait, &wait);
+		set_current_state(TASK_RUNNING);
 		if (signal_pending(current))
 			return -ERESTARTSYS;
 		down(&s->open_sem);
 	}
 	if (file->f_mode & FMODE_READ) {
+		s->status &= ~DO_BIGENDIAN_R;
 		fmtm &= ~((CM_CFMT_STEREO | CM_CFMT_16BIT) << CM_CFMT_ADCSHIFT);
 		if ((minor & 0xf) == SND_DEV_DSP16)
 			fmts |= CM_CFMT_16BIT << CM_CFMT_ADCSHIFT;
 		s->dma_adc.ossfragshift = s->dma_adc.ossmaxfrags = s->dma_adc.subdivision = 0;
+		s->dma_adc.enabled = 1;
 		set_adc_rate(s, 8000);
+		// spdif-in is turnned off by default
+		set_spdifin(s, 0);
 	}
 	if (file->f_mode & FMODE_WRITE) {
+		s->status &= ~DO_BIGENDIAN_W;
 		fmtm &= ~((CM_CFMT_STEREO | CM_CFMT_16BIT) << CM_CFMT_DACSHIFT);
 		if ((minor & 0xf) == SND_DEV_DSP16)
 			fmts |= CM_CFMT_16BIT << CM_CFMT_DACSHIFT;
 		s->dma_dac.ossfragshift = s->dma_dac.ossmaxfrags = s->dma_dac.subdivision = 0;
+		s->dma_dac.enabled = 1;
 		set_dac_rate(s, 8000);
 		// clear previous multichannel, spdif, ac3 state
 		set_spdifout(s, 0);
-		if (s->deviceid == PCI_DEVICE_ID_CMEDIA_CM8738) {
-			set_ac3(s, 0);
-			set_dac_channels(s, 1);
-		}
+		set_ac3(s, 0);
+		set_dac_channels(s, 1);
 	}
 	set_fmt(s, fmtm, fmts);
 	s->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE);
@@ -2270,20 +2889,24 @@
 	if (file->f_mode & FMODE_WRITE) {
 		stop_dac(s);
 
-		dealloc_dmabuf(&s->dma_dac);
+		dealloc_dmabuf(s, &s->dma_dac);
 		if (s->status & DO_DUAL_DAC)
-			dealloc_dmabuf(&s->dma_adc);
+			dealloc_dmabuf(s, &s->dma_adc);
 
 		if (s->status & DO_MULTI_CH)
-			set_dac_channels(s, 0);
+			set_dac_channels(s, 1);
 		if (s->status & DO_AC3)
 			set_ac3(s, 0);
 		if (s->status & DO_SPDIF_OUT)
 			set_spdifout(s, 0);
+		/* enable SPDIF loop */
+		set_spdif_loop(s, spdif_loop);
+		s->status &= ~DO_BIGENDIAN_W;
 	}
 	if (file->f_mode & FMODE_READ) {
 		stop_adc(s);
-		dealloc_dmabuf(&s->dma_adc);
+		dealloc_dmabuf(s, &s->dma_adc);
+		s->status &= ~DO_BIGENDIAN_R;
 	}
 	s->open_mode &= ~(file->f_mode & (FMODE_READ|FMODE_WRITE));
 	up(&s->open_sem);
@@ -2304,449 +2927,8 @@
 	.release = cm_release,
 };
 
-#ifdef CONFIG_SOUND_CMPCI_MIDI
 /* --------------------------------------------------------------------- */
 
-static ssize_t cm_midi_read(struct file *file, char *buffer, size_t count, loff_t *ppos)
-{
-	struct cm_state *s = (struct cm_state *)file->private_data;
-	DECLARE_WAITQUEUE(wait, current);
-	ssize_t ret;
-	unsigned long flags;
-	unsigned ptr;
-	int cnt;
-
-	VALIDATE_STATE(s);
-	if (ppos != &file->f_pos)
-		return -ESPIPE;
-	if (!access_ok(VERIFY_WRITE, buffer, count))
-		return -EFAULT;
-	ret = 0;
-	add_wait_queue(&s->midi.iwait, &wait);
-	while (count > 0) {
-		spin_lock_irqsave(&s->lock, flags);
-		ptr = s->midi.ird;
-		cnt = MIDIINBUF - ptr;
-		if (s->midi.icnt < cnt)
-			cnt = s->midi.icnt;
-		spin_unlock_irqrestore(&s->lock, flags);
-		if (cnt > count)
-			cnt = count;
-		if (cnt <= 0) {
-			if (file->f_flags & O_NONBLOCK)
-			{
-				if (!ret)
-					ret = -EAGAIN;
-				break;
-			}
-			__set_current_state(TASK_INTERRUPTIBLE);
-			schedule();
-			if (signal_pending(current))
-			{
-				if (!ret)
-					ret = -ERESTARTSYS;
-				break;
-			}
-			continue;
-		}
-		if (copy_to_user(buffer, s->midi.ibuf + ptr, cnt))
-		{
-			if (!ret)
-				ret = -EFAULT;
-			break;
-		}
-		ptr = (ptr + cnt) % MIDIINBUF;
-		spin_lock_irqsave(&s->lock, flags);
-		s->midi.ird = ptr;
-		s->midi.icnt -= cnt;
-		spin_unlock_irqrestore(&s->lock, flags);
-		count -= cnt;
-		buffer += cnt;
-		ret += cnt;
-		break;
-	}
-	__set_current_state(TASK_RUNNING);
-	remove_wait_queue(&s->midi.iwait, &wait);
-	return ret;
-}
-
-static ssize_t cm_midi_write(struct file *file, const char *buffer, size_t count, loff_t *ppos)
-{
-	struct cm_state *s = (struct cm_state *)file->private_data;
-	DECLARE_WAITQUEUE(wait, current);
-	ssize_t ret;
-	unsigned long flags;
-	unsigned ptr;
-	int cnt;
-
-	VALIDATE_STATE(s);
-	if (ppos != &file->f_pos)
-		return -ESPIPE;
-	if (!access_ok(VERIFY_READ, buffer, count))
-		return -EFAULT;
-	if (count == 0)
-		return 0;
-	ret = 0;
-	add_wait_queue(&s->midi.owait, &wait);
-	while (count > 0) {
-		spin_lock_irqsave(&s->lock, flags);
-		ptr = s->midi.owr;
-		cnt = MIDIOUTBUF - ptr;
-		if (s->midi.ocnt + cnt > MIDIOUTBUF)
-			cnt = MIDIOUTBUF - s->midi.ocnt;
-		if (cnt <= 0)
-			cm_handle_midi(s);
-		spin_unlock_irqrestore(&s->lock, flags);
-		if (cnt > count)
-			cnt = count;
-		if (cnt <= 0) {
-			if (file->f_flags & O_NONBLOCK)
-			{
-				if (!ret)
-					ret = -EAGAIN;
-				break;
-			}
-			__set_current_state(TASK_INTERRUPTIBLE);
-			schedule();
-			if (signal_pending(current)) {
-				if (!ret)
-					ret = -ERESTARTSYS;
-				break;
-			}
-			continue;
-		}
-		if (copy_from_user(s->midi.obuf + ptr, buffer, cnt))
-		{
-			if (!ret)
-				ret = -EFAULT;
-			break;
-		}
-		ptr = (ptr + cnt) % MIDIOUTBUF;
-		spin_lock_irqsave(&s->lock, flags);
-		s->midi.owr = ptr;
-		s->midi.ocnt += cnt;
-		spin_unlock_irqrestore(&s->lock, flags);
-		count -= cnt;
-		buffer += cnt;
-		ret += cnt;
-		spin_lock_irqsave(&s->lock, flags);
-		cm_handle_midi(s);
-		spin_unlock_irqrestore(&s->lock, flags);
-	}
-	__set_current_state(TASK_RUNNING);
-	remove_wait_queue(&s->midi.owait, &wait);
-	return ret;
-}
-
-static unsigned int cm_midi_poll(struct file *file, struct poll_table_struct *wait)
-{
-	struct cm_state *s = (struct cm_state *)file->private_data;
-	unsigned long flags;
-	unsigned int mask = 0;
-
-	VALIDATE_STATE(s);
-	if (file->f_mode & FMODE_WRITE)
-		poll_wait(file, &s->midi.owait, wait);
-	if (file->f_mode & FMODE_READ)
-		poll_wait(file, &s->midi.iwait, wait);
-	spin_lock_irqsave(&s->lock, flags);
-	if (file->f_mode & FMODE_READ) {
-		if (s->midi.icnt > 0)
-			mask |= POLLIN | POLLRDNORM;
-	}
-	if (file->f_mode & FMODE_WRITE) {
-		if (s->midi.ocnt < MIDIOUTBUF)
-			mask |= POLLOUT | POLLWRNORM;
-	}
-	spin_unlock_irqrestore(&s->lock, flags);
-	return mask;
-}
-
-static int cm_midi_open(struct inode *inode, struct file *file)
-{
-	int minor = iminor(inode);
-	struct cm_state *s = devs;
-	unsigned long flags;
-
-	while (s && s->dev_midi != minor)
-		s = s->next;
-	if (!s)
-		return -ENODEV;
-       	VALIDATE_STATE(s);
-	file->private_data = s;
-	/* wait for device to become free */
-	down(&s->open_sem);
-	while (s->open_mode & (file->f_mode << FMODE_MIDI_SHIFT)) {
-		if (file->f_flags & O_NONBLOCK) {
-			up(&s->open_sem);
-			return -EBUSY;
-		}
-		up(&s->open_sem);
-		interruptible_sleep_on(&s->open_wait);
-		if (signal_pending(current))
-			return -ERESTARTSYS;
-		down(&s->open_sem);
-	}
-	spin_lock_irqsave(&s->lock, flags);
-	if (!(s->open_mode & (FMODE_MIDI_READ | FMODE_MIDI_WRITE))) {
-		s->midi.ird = s->midi.iwr = s->midi.icnt = 0;
-		s->midi.ord = s->midi.owr = s->midi.ocnt = 0;
-		/* enable MPU-401 */
-		maskb(s->iobase + CODEC_CMI_FUNCTRL1, ~0, 4);
-		outb(0xff, s->iomidi+1); /* reset command */
-		if (!(inb(s->iomidi+1) & 0x80))
-			inb(s->iomidi);
-		outb(0x3f, s->iomidi+1); /* uart command */
-		if (!(inb(s->iomidi+1) & 0x80))
-			inb(s->iomidi);
-		s->midi.ird = s->midi.iwr = s->midi.icnt = 0;
-		init_timer(&s->midi.timer);
-		s->midi.timer.expires = jiffies+1;
-		s->midi.timer.data = (unsigned long)s;
-		s->midi.timer.function = cm_midi_timer;
-		add_timer(&s->midi.timer);
-	}
-	if (file->f_mode & FMODE_READ) {
-		s->midi.ird = s->midi.iwr = s->midi.icnt = 0;
-	}
-	if (file->f_mode & FMODE_WRITE) {
-		s->midi.ord = s->midi.owr = s->midi.ocnt = 0;
-	}
-	spin_unlock_irqrestore(&s->lock, flags);
-	s->open_mode |= (file->f_mode << FMODE_MIDI_SHIFT) & (FMODE_MIDI_READ | FMODE_MIDI_WRITE);
-	up(&s->open_sem);
-	return 0;
-}
-
-static int cm_midi_release(struct inode *inode, struct file *file)
-{
-	struct cm_state *s = (struct cm_state *)file->private_data;
-	DECLARE_WAITQUEUE(wait, current);
-	unsigned long flags;
-	unsigned count, tmo;
-
-	VALIDATE_STATE(s);
-	lock_kernel();
-
-	if (file->f_mode & FMODE_WRITE) {
-		__set_current_state(TASK_INTERRUPTIBLE);
-		add_wait_queue(&s->midi.owait, &wait);
-		for (;;) {
-			spin_lock_irqsave(&s->lock, flags);
-			count = s->midi.ocnt;
-			spin_unlock_irqrestore(&s->lock, flags);
-			if (count <= 0)
-				break;
-			if (signal_pending(current))
-				break;
-			if (file->f_flags & O_NONBLOCK) {
-				remove_wait_queue(&s->midi.owait, &wait);
-				set_current_state(TASK_RUNNING);
-				unlock_kernel();
-				return -EBUSY;
-			}
-			tmo = (count * HZ) / 3100;
-			if (!schedule_timeout(tmo ? : 1) && tmo)
-				printk(KERN_DEBUG "cmpci: midi timed out??\n");
-		}
-		remove_wait_queue(&s->midi.owait, &wait);
-		set_current_state(TASK_RUNNING);
-	}
-	down(&s->open_sem);
-	s->open_mode &= ~((file->f_mode << FMODE_MIDI_SHIFT) & (FMODE_MIDI_READ|FMODE_MIDI_WRITE));
-	spin_lock_irqsave(&s->lock, flags);
-	if (!(s->open_mode & (FMODE_MIDI_READ | FMODE_MIDI_WRITE))) {
-		del_timer(&s->midi.timer);		
-		outb(0xff, s->iomidi+1); /* reset command */
-		if (!(inb(s->iomidi+1) & 0x80))
-			inb(s->iomidi);
-		/* disable MPU-401 */
-		maskb(s->iobase + CODEC_CMI_FUNCTRL1, ~4, 0);
-	}
-	spin_unlock_irqrestore(&s->lock, flags);
-	up(&s->open_sem);
-	wake_up(&s->open_wait);
-	unlock_kernel();
-	return 0;
-}
-
-static /*const*/ struct file_operations cm_midi_fops = {
-	.owner	 = THIS_MODULE,
-	.llseek	 = no_llseek,
-	.read	 = cm_midi_read,
-	.write	 = cm_midi_write,
-	.poll	 = cm_midi_poll,
-	.open	 = cm_midi_open,
-	.release = cm_midi_release,
-};
-#endif
-
-/* --------------------------------------------------------------------- */
-
-#ifdef CONFIG_SOUND_CMPCI_FM
-static int cm_dmfm_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
-{
-	static const unsigned char op_offset[18] = {
-		0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
-		0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
-		0x10, 0x11, 0x12, 0x13, 0x14, 0x15
-	};
-	struct cm_state *s = (struct cm_state *)file->private_data;
-	struct dm_fm_voice v;
-	struct dm_fm_note n;
-	struct dm_fm_params p;
-	unsigned int io;
-	unsigned int regb;
-
-	switch (cmd) {		
-	case FM_IOCTL_RESET:
-		for (regb = 0xb0; regb < 0xb9; regb++) {
-			outb(regb, s->iosynth);
-			outb(0, s->iosynth+1);
-			outb(regb, s->iosynth+2);
-			outb(0, s->iosynth+3);
-		}
-		return 0;
-
-	case FM_IOCTL_PLAY_NOTE:
-		if (copy_from_user(&n, (void *)arg, sizeof(n)))
-			return -EFAULT;
-		if (n.voice >= 18)
-			return -EINVAL;
-		if (n.voice >= 9) {
-			regb = n.voice - 9;
-			io = s->iosynth+2;
-		} else {
-			regb = n.voice;
-			io = s->iosynth;
-		}
-		outb(0xa0 + regb, io);
-		outb(n.fnum & 0xff, io+1);
-		outb(0xb0 + regb, io);
-		outb(((n.fnum >> 8) & 3) | ((n.octave & 7) << 2) | ((n.key_on & 1) << 5), io+1);
-		return 0;
-
-	case FM_IOCTL_SET_VOICE:
-		if (copy_from_user(&v, (void *)arg, sizeof(v)))
-			return -EFAULT;
-		if (v.voice >= 18)
-			return -EINVAL;
-		regb = op_offset[v.voice];
-		io = s->iosynth + ((v.op & 1) << 1);
-		outb(0x20 + regb, io);
-		outb(((v.am & 1) << 7) | ((v.vibrato & 1) << 6) | ((v.do_sustain & 1) << 5) | 
-		     ((v.kbd_scale & 1) << 4) | (v.harmonic & 0xf), io+1);
-		outb(0x40 + regb, io);
-		outb(((v.scale_level & 0x3) << 6) | (v.volume & 0x3f), io+1);
-		outb(0x60 + regb, io);
-		outb(((v.attack & 0xf) << 4) | (v.decay & 0xf), io+1);
-		outb(0x80 + regb, io);
-		outb(((v.sustain & 0xf) << 4) | (v.release & 0xf), io+1);
-		outb(0xe0 + regb, io);
-		outb(v.waveform & 0x7, io+1);
-		if (n.voice >= 9) {
-			regb = n.voice - 9;
-			io = s->iosynth+2;
-		} else {
-			regb = n.voice;
-			io = s->iosynth;
-		}
-		outb(0xc0 + regb, io);
-		outb(((v.right & 1) << 5) | ((v.left & 1) << 4) | ((v.feedback & 7) << 1) |
-		     (v.connection & 1), io+1);
-		return 0;
-		
-	case FM_IOCTL_SET_PARAMS:
-		if (copy_from_user(&p, (void *)arg, sizeof(p)))
-			return -EFAULT;
-		outb(0x08, s->iosynth);
-		outb((p.kbd_split & 1) << 6, s->iosynth+1);
-		outb(0xbd, s->iosynth);
-		outb(((p.am_depth & 1) << 7) | ((p.vib_depth & 1) << 6) | ((p.rhythm & 1) << 5) | ((p.bass & 1) << 4) |
-		     ((p.snare & 1) << 3) | ((p.tomtom & 1) << 2) | ((p.cymbal & 1) << 1) | (p.hihat & 1), s->iosynth+1);
-		return 0;
-
-	case FM_IOCTL_SET_OPL:
-		outb(4, s->iosynth+2);
-		outb(arg, s->iosynth+3);
-		return 0;
-
-	case FM_IOCTL_SET_MODE:
-		outb(5, s->iosynth+2);
-		outb(arg & 1, s->iosynth+3);
-		return 0;
-	}
-	return -EINVAL;
-}
-
-static int cm_dmfm_open(struct inode *inode, struct file *file)
-{
-	int minor = iminor(inode);
-	struct cm_state *s = devs;
-
-	while (s && s->dev_dmfm != minor)
-		s = s->next;
-	if (!s)
-		return -ENODEV;
-       	VALIDATE_STATE(s);
-	file->private_data = s;
-	/* wait for device to become free */
-	down(&s->open_sem);
-	while (s->open_mode & FMODE_DMFM) {
-		if (file->f_flags & O_NONBLOCK) {
-			up(&s->open_sem);
-			return -EBUSY;
-		}
-		up(&s->open_sem);
-		interruptible_sleep_on(&s->open_wait);
-		if (signal_pending(current))
-			return -ERESTARTSYS;
-		down(&s->open_sem);
-	}
-	/* init the stuff */
-	outb(1, s->iosynth);
-	outb(0x20, s->iosynth+1); /* enable waveforms */
-	outb(4, s->iosynth+2);
-	outb(0, s->iosynth+3);  /* no 4op enabled */
-	outb(5, s->iosynth+2);
-	outb(1, s->iosynth+3);  /* enable OPL3 */
-	s->open_mode |= FMODE_DMFM;
-	up(&s->open_sem);
-	return 0;
-}
-
-static int cm_dmfm_release(struct inode *inode, struct file *file)
-{
-	struct cm_state *s = (struct cm_state *)file->private_data;
-	unsigned int regb;
-
-	VALIDATE_STATE(s);
-	lock_kernel();
-	down(&s->open_sem);
-	s->open_mode &= ~FMODE_DMFM;
-	for (regb = 0xb0; regb < 0xb9; regb++) {
-		outb(regb, s->iosynth);
-		outb(0, s->iosynth+1);
-		outb(regb, s->iosynth+2);
-		outb(0, s->iosynth+3);
-	}
-	up(&s->open_sem);
-	wake_up(&s->open_wait);
-	unlock_kernel();
-	return 0;
-}
-
-static /*const*/ struct file_operations cm_dmfm_fops = {
-	.owner	 = THIS_MODULE,
-	.llseek	 = no_llseek,
-	.ioctl	 = cm_dmfm_ioctl,
-	.open	 = cm_dmfm_open,
-	.release = cm_dmfm_release,
-};
-#endif /* CONFIG_SOUND_CMPCI_FM */
-
-
-
 static struct initvol {
 	int mixch;
 	int vol;
@@ -2787,377 +2969,305 @@
 	    if (RegValue & (1 << (26-24))) {
 		ChipVersion = 39;
 	    	if (RegValue & (1 << (24-24)))
-		    s->max_channels  = 6;
+		    s->max_channels = 6;
 	    	else
 		    s->max_channels = 4;
 		s->capability |= CAN_AC3_HW;
 		s->capability |= CAN_DUAL_DAC;
 		s->capability |= CAN_MULTI_CH_HW;
+		s->capability |= CAN_LINE_AS_BASS;
+		s->capability |= CAN_MIC_AS_BASS;
 	    } else {
 		ChipVersion = 55; // 4 or 6 channels
-		s->max_channels  = 6;
+		s->max_channels = 6;
 		s->capability |= CAN_AC3_HW;
 		s->capability |= CAN_DUAL_DAC;
 		s->capability |= CAN_MULTI_CH_HW;
+		s->capability |= CAN_LINE_AS_BASS;
+		s->capability |= CAN_MIC_AS_BASS;
 	    }
 	}
-	// still limited to number of speakers
-	if (s->max_channels > s->speakers)
-		s->max_channels = s->speakers;
+	s->capability |= CAN_LINE_AS_REAR;
 	return ChipVersion;
 }
 
-#ifdef CONFIG_SOUND_CMPCI_MIDI
-static	int	mpuio = CONFIG_SOUND_CMPCI_MPUIO;
-#else
-static	int	mpuio;
-#endif
-#ifdef CONFIG_SOUND_CMPCI_FM
-static	int	fmio = CONFIG_SOUND_CMPCI_FMIO;
-#else
-static	int	fmio;
-#endif
-#ifdef CONFIG_SOUND_CMPCI_SPDIFINVERSE
-static	int	spdif_inverse = 1;
-#else
-static	int	spdif_inverse;
-#endif
-#ifdef CONFIG_SOUND_CMPCI_SPDIFLOOP
-static	int	spdif_loop = 1;
-#else
-static	int	spdif_loop;
-#endif
-#ifdef CONFIG_SOUND_CMPCI_SPEAKERS
-static	int	speakers = CONFIG_SOUND_CMPCI_SPEAKERS;
-#else
-static	int	speakers = 2;
-#endif
-#ifdef CONFIG_SOUND_CMPCI_LINE_REAR
-static	int	use_line_as_rear = 1;
-#else
-static	int	use_line_as_rear;
-#endif
-#ifdef CONFIG_SOUND_CMPCI_LINE_BASS
-static	int	use_line_as_bass = 1;
-#else
-static	int	use_line_as_bass;
-#endif
-#ifdef CONFIG_SOUND_CMPCI_JOYSTICK
-static	int	joystick = 1;
-#else
-static	int	joystick;
-#endif
-MODULE_PARM(mpuio, "i");
-MODULE_PARM(fmio, "i");
-MODULE_PARM(spdif_inverse, "i");
-MODULE_PARM(spdif_loop, "i");
-MODULE_PARM(speakers, "i");
-MODULE_PARM(use_line_as_rear, "i");
-MODULE_PARM(use_line_as_bass, "i");
-MODULE_PARM(joystick, "i");
-MODULE_PARM_DESC(mpuio, "(0x330, 0x320, 0x310, 0x300) Base of MPU-401, 0 to disable");
-MODULE_PARM_DESC(fmio, "(0x388, 0x3C8, 0x3E0) Base of OPL3, 0 to disable");
-MODULE_PARM_DESC(spdif_inverse, "(1/0) Invert S/PDIF-in signal");
-MODULE_PARM_DESC(spdif_loop, "(1/0) Route S/PDIF-in to S/PDIF-out directly");
-MODULE_PARM_DESC(speakers, "(2-6) Number of speakers you connect");
-MODULE_PARM_DESC(use_line_as_rear, "(1/0) Use line-in jack as rear-out");
-MODULE_PARM_DESC(use_line_as_bass, "(1/0) Use line-in jack as bass/center");
-MODULE_PARM_DESC(joystick, "(1/0) Enable joystick interface, still need joystick driver");
-
-static struct pci_device_id cmpci_pci_tbl[] = {
-	{ PCI_VENDOR_ID_CMEDIA, PCI_DEVICE_ID_CMEDIA_CM8738, 
-	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- 	{ PCI_VENDOR_ID_CMEDIA, PCI_DEVICE_ID_CMEDIA_CM8338A, 
-	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
-	{ PCI_VENDOR_ID_CMEDIA, PCI_DEVICE_ID_CMEDIA_CM8338B, 
-	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
-	{ 0 }
-};
-MODULE_DEVICE_TABLE(pci, cmpci_pci_tbl);
+#define	echo_option(x)\
+if (x) strcat(options, "" #x " ")
 
-void initialize_chip(struct pci_dev *pcidev)
+static int __devinit cm_probe(struct pci_dev *pcidev, const struct pci_device_id *pciid)
 {
 	struct cm_state *s;
-	int i, val;
-#if defined(CONFIG_SOUND_CMPCI_MIDI) || defined(CONFIG_SOUND_CMPCI_FM)
-	unsigned char reg_mask = 0;
-#endif
+	mm_segment_t fs;
+	int i, val, ret;
+	unsigned char reg_mask;
 	struct {
 		unsigned short	deviceid;
 		char		*devicename;
-	} devicetable[] =
-	{
+	} devicetable[] = {
 		{ PCI_DEVICE_ID_CMEDIA_CM8338A, "CM8338A" },
 		{ PCI_DEVICE_ID_CMEDIA_CM8338B, "CM8338B" },
 		{ PCI_DEVICE_ID_CMEDIA_CM8738,  "CM8738" },
 		{ PCI_DEVICE_ID_CMEDIA_CM8738B, "CM8738B" },
 	};
 	char	*devicename = "unknown";
-	{
-		if (pci_enable_device(pcidev))
-			return;
-		if (pcidev->irq == 0)
-			return;
-		s = kmalloc(sizeof(*s), GFP_KERNEL);
-		if (!s) {
-			printk(KERN_WARNING "cmpci: out of memory\n");
-			return;
-		}
-		/* search device name */
-		for (i = 0; i < sizeof(devicetable) / sizeof(devicetable[0]); i++) {
-			if (devicetable[i].deviceid == pcidev->device)
-			{
-				devicename = devicetable[i].devicename;
-				break;
-			}
-		}
-		memset(s, 0, sizeof(struct cm_state));
-		init_waitqueue_head(&s->dma_adc.wait);
-		init_waitqueue_head(&s->dma_dac.wait);
-		init_waitqueue_head(&s->open_wait);
-		init_waitqueue_head(&s->midi.iwait);
-		init_waitqueue_head(&s->midi.owait);
-		init_MUTEX(&s->open_sem);
-		spin_lock_init(&s->lock);
-		s->magic = CM_MAGIC;
-		s->iobase = pci_resource_start(pcidev, 0);
-		s->iosynth = fmio;
-		s->iomidi = mpuio;
-		s->status = 0;
-		/* range check */
-		if (speakers < 2)
-			speakers = 2;
-		else if (speakers > 6)
-			speakers = 6;
-		s->speakers = speakers;
-		if (s->iobase == 0)
-			return;
-		s->irq = pcidev->irq;
-
-		if (!request_region(s->iobase, CM_EXTENT_CODEC, "cmpci")) {
-			printk(KERN_ERR "cmpci: io ports %#x-%#x in use\n", s->iobase, s->iobase+CM_EXTENT_CODEC-1);
-			goto err_region5;
+	char	options[256];
+
+	if ((ret = pci_enable_device(pcidev)))
+		return ret;
+	if (!(pci_resource_flags(pcidev, 0) & IORESOURCE_IO))
+		return -ENODEV;
+	if (pcidev->irq == 0)
+		return -ENODEV;
+	i = pci_set_dma_mask(pcidev, 0xffffffff);
+	if (i) {
+		printk(KERN_WARNING "cmpci: architecture does not support 32bit PCI busmaster DMA\n");
+		return i;
+	}
+	s = kmalloc(sizeof(*s), GFP_KERNEL);
+	if (!s) {
+		printk(KERN_WARNING "cmpci: out of memory\n");
+		return -ENOMEM;
+	}
+	/* search device name */
+	for (i = 0; i < sizeof(devicetable) / sizeof(devicetable[0]); i++) {
+		if (devicetable[i].deviceid == pcidev->device) {
+			devicename = devicetable[i].devicename;
+			break;
 		}
+	}
+	memset(s, 0, sizeof(struct cm_state));
+	init_waitqueue_head(&s->dma_adc.wait);
+	init_waitqueue_head(&s->dma_dac.wait);
+	init_waitqueue_head(&s->open_wait);
+	init_MUTEX(&s->open_sem);
+	spin_lock_init(&s->lock);
+	s->magic = CM_MAGIC;
+	s->dev = pcidev;
+	s->iobase = pci_resource_start(pcidev, 0);
+	s->iosynth = fmio;
+	s->iomidi = mpuio;
 #ifdef CONFIG_SOUND_CMPCI_MIDI
-		/* disable MPU-401 */
-		maskb(s->iobase + CODEC_CMI_FUNCTRL1, ~0x04, 0);
-		if (s->iomidi) {
-		    if (!request_region(s->iomidi, CM_EXTENT_MIDI, "cmpci Midi")) {
-			printk(KERN_ERR "cmpci: io ports %#x-%#x in use\n", s->iomidi, s->iomidi+CM_EXTENT_MIDI-1);
-			s->iomidi = 0;
-		    } else {
-		        /* set IO based at 0x330 */
-		        switch (s->iomidi) {
-		 	    case 0x330:
-				reg_mask = 0;
-				break;
-			    case 0x320:
-				reg_mask = 0x20;
-				break;
-			    case 0x310:
-				reg_mask = 0x40;
-				break;
-			    case 0x300:
-				reg_mask = 0x60;
-				break;
-			    default:
-				s->iomidi = 0;
-				break;
-		        }
-		        outb((inb(s->iobase + CODEC_CMI_LEGACY_CTRL + 3) & ~0x60) | reg_mask, s->iobase + CODEC_CMI_LEGACY_CTRL + 3);
-			/* enable MPU-401 */
-			if (s->iomidi) {
-			    maskb(s->iobase + CODEC_CMI_FUNCTRL1, ~0, 0x04);
-			}
-		    }
-		}
+	s->midi_devc = 0;
 #endif
+	s->status = 0;
+	if (s->iobase == 0)
+		return -ENODEV;
+	s->irq = pcidev->irq;
+
+	if (!request_region(s->iobase, CM_EXTENT_CODEC, "cmpci")) {
+		printk(KERN_ERR "cmpci: io ports %#x-%#x in use\n", s->iobase, s->iobase+CM_EXTENT_CODEC-1);
+		ret = -EBUSY;
+		goto err_region5;
+	}
+	/* dump parameters */
+	strcpy(options, "cmpci: ");
+	echo_option(joystick);
+	echo_option(spdif_inverse);
+	echo_option(spdif_loop);
+	echo_option(spdif_out);
+	echo_option(use_line_as_rear);
+	echo_option(use_line_as_bass);
+	echo_option(use_mic_as_bass);
+	echo_option(mic_boost);
+	echo_option(hw_copy);
+	printk(KERN_INFO "%s\n", options);
+
+	/* initialize codec registers */
+	outb(0, s->iobase + CODEC_CMI_INT_HLDCLR + 2);  /* disable ints */
+	outb(0, s->iobase + CODEC_CMI_FUNCTRL0 + 2); /* disable channels */
+	/* reset mixer */
+	wrmixer(s, DSP_MIX_DATARESETIDX, 0);
+
+	/* request irq */
+	if ((ret = request_irq(s->irq, cm_interrupt, SA_SHIRQ, "cmpci", s))) {
+		printk(KERN_ERR "cmpci: irq %u in use\n", s->irq);
+		goto err_irq;
+	}
+	printk(KERN_INFO "cmpci: found %s adapter at io %#x irq %u\n",
+	       devicename, s->iobase, s->irq);
+	/* register devices */
+	if ((s->dev_audio = register_sound_dsp(&cm_audio_fops, -1)) < 0) {
+		ret = s->dev_audio;
+		goto err_dev1;
+	}
+	if ((s->dev_mixer = register_sound_mixer(&cm_mixer_fops, -1)) < 0) {
+		ret = s->dev_mixer;
+		goto err_dev2;
+	}
+	pci_set_master(pcidev);	/* enable bus mastering */
+	/* initialize the chips */
+	fs = get_fs();
+	set_fs(KERNEL_DS);
+	/* set mixer output */
+	frobindir(s, DSP_MIX_OUTMIXIDX, 0x1f, 0x1f);
+	/* set mixer input */
+	val = SOUND_MASK_LINE|SOUND_MASK_SYNTH|SOUND_MASK_CD|SOUND_MASK_MIC;
+	mixer_ioctl(s, SOUND_MIXER_WRITE_RECSRC, (unsigned long)&val);
+	for (i = 0; i < sizeof(initvol)/sizeof(initvol[0]); i++) {
+		val = initvol[i].vol;
+		mixer_ioctl(s, initvol[i].mixch, (unsigned long)&val);
+	}
+	set_fs(fs);
+	/* use channel 1 for playback, channel 0 for record */
+	maskb(s->iobase + CODEC_CMI_FUNCTRL0, ~CHADC1, CHADC0);
+	/* turn off VMIC3 - mic boost */
+	if (mic_boost)
+		maskb(s->iobase + CODEC_CMI_MIXER2, ~1, 0);
+	else
+		maskb(s->iobase + CODEC_CMI_MIXER2, ~0, 1);
+	s->deviceid = pcidev->device;
+
+	if (pcidev->device == PCI_DEVICE_ID_CMEDIA_CM8738
+	 || pcidev->device == PCI_DEVICE_ID_CMEDIA_CM8738B) {
+
+		/* chip version and hw capability check */
+		s->chip_version = query_chip(s);
+		printk(KERN_INFO "cmpci: chip version = 0%d\n", s->chip_version);
+
+		/* set SPDIF-in inverse before enable SPDIF loop */
+		set_spdifin_inverse(s, spdif_inverse);
+
+		/* use SPDIF in #1 */
+		set_spdifin_channel2(s, 0);
+	} else {
+		s->chip_version = 0;
+		/* 8338 will fall here */
+		s->max_channels = 4;
+		s->capability |= CAN_DUAL_DAC;
+		s->capability |= CAN_LINE_AS_REAR;
+	}
+	/* enable SPDIF loop */
+	set_spdif_loop(s, spdif_loop);
+
+	// enable 4 speaker mode (analog duplicate)
+	set_hw_copy(s, hw_copy);
+
+	reg_mask = 0;
 #ifdef CONFIG_SOUND_CMPCI_FM
-		/* disable FM */
-		maskb(s->iobase + CODEC_CMI_MISC_CTRL + 2, ~8, 0);
-		if (s->iosynth) {
-		    if (!request_region(s->iosynth, CM_EXTENT_SYNTH, "cmpci FM")) {
-			printk(KERN_ERR "cmpci: io ports %#x-%#x in use\n", s->iosynth, s->iosynth+CM_EXTENT_SYNTH-1);
+	/* disable FM */
+	maskb(s->iobase + CODEC_CMI_MISC_CTRL + 2, ~8, 0);
+	if (s->iosynth) {
+	    /* don't enable OPL3 if there is one */
+	    if (opl3_detect(s->iosynth, NULL)) {
+	    	s->iosynth = 0;
+	    } else {
+		/* set IO based at 0x388 */
+		switch (s->iosynth) {
+		    case 0x388:
+			reg_mask = 0;
+			break;
+		    case 0x3C8:
+			reg_mask = 0x01;
+			break;
+		    case 0x3E0:
+			reg_mask = 0x02;
+			break;
+		    case 0x3E8:
+			reg_mask = 0x03;
+			break;
+		    default:
 			s->iosynth = 0;
-		    } else {
-		        /* set IO based at 0x388 */
-		        switch (s->iosynth) {
-		 	    case 0x388:
-				reg_mask = 0;
-				break;
-			    case 0x3C8:
-				reg_mask = 0x01;
-				break;
-			    case 0x3E0:
-				reg_mask = 0x02;
-				break;
-			    case 0x3E8:
-				reg_mask = 0x03;
-				break;
-			    default:
+			break;
+		}
+		maskb(s->iobase + CODEC_CMI_LEGACY_CTRL + 3, ~0x03, reg_mask);
+		/* enable FM */
+		if (s->iosynth) {
+			maskb(s->iobase + CODEC_CMI_MISC_CTRL + 2, ~0, 8);
+			if (opl3_detect(s->iosynth, NULL))
+				ret = opl3_init(s->iosynth, NULL, THIS_MODULE);
+			else {
+				maskb(s->iobase + CODEC_CMI_MISC_CTRL + 2, ~8, 0);
 				s->iosynth = 0;
-				break;
-		        }
-		        maskb(s->iobase + CODEC_CMI_LEGACY_CTRL + 3, ~0x03, reg_mask);
-		        /* enable FM */
-			if (s->iosynth) {
-		            maskb(s->iobase + CODEC_CMI_MISC_CTRL + 2, ~0, 8);
 			}
-		    }
 		}
+	    }
+	}
 #endif
-		/* enable joystick */
-		if (joystick)
-			maskb(s->iobase + CODEC_CMI_FUNCTRL1, ~0, 0x02);
-		else
-			maskb(s->iobase + CODEC_CMI_FUNCTRL1, ~0x02, 0);
-		/* initialize codec registers */
-		outb(0, s->iobase + CODEC_CMI_INT_HLDCLR + 2);  /* disable ints */
-		outb(0, s->iobase + CODEC_CMI_FUNCTRL0 + 2); /* disable channels */
-		/* reset mixer */
-		wrmixer(s, DSP_MIX_DATARESETIDX, 0);
-
-		/* request irq */
-		if (request_irq(s->irq, cm_interrupt, SA_SHIRQ, "cmpci", s)) {
-			printk(KERN_ERR "cmpci: irq %u in use\n", s->irq);
-			goto err_irq;
-		}
-		printk(KERN_INFO "cmpci: found %s adapter at io %#06x irq %u\n",
-		       devicename, s->iobase, s->irq);
-		/* register devices */
-		if ((s->dev_audio = register_sound_dsp(&cm_audio_fops, -1)) < 0)
-			goto err_dev1;
-		if ((s->dev_mixer = register_sound_mixer(&cm_mixer_fops, -1)) < 0)
-			goto err_dev2;
 #ifdef CONFIG_SOUND_CMPCI_MIDI
-		if ((s->dev_midi = register_sound_midi(&cm_midi_fops, -1)) < 0)
-			goto err_dev3;
-#endif
-#ifdef CONFIG_SOUND_CMPCI_FM
-		if ((s->dev_dmfm = register_sound_special(&cm_dmfm_fops, 15 /* ?? */)) < 0)
-			goto err_dev4;
-#endif
-		pci_set_master(pcidev);	/* enable bus mastering */
-		/* initialize the chips */
-		/* set mixer output */
-		frobindir(s, DSP_MIX_OUTMIXIDX, 0x1f, 0x1f);
-		/* set mixer input */
-		val = SOUND_MASK_LINE|SOUND_MASK_SYNTH|SOUND_MASK_CD|SOUND_MASK_MIC;
-		mixer_ioctl(s, SOUND_MIXER_WRITE_RECSRC, (unsigned long)&val);
-		for (i = 0; i < sizeof(initvol)/sizeof(initvol[0]); i++) {
-			val = initvol[i].vol;
-			mixer_ioctl(s, initvol[i].mixch, (unsigned long)&val);
-		}
-		/* use channel 0 for record, channel 1 for play */
-		maskb(s->iobase + CODEC_CMI_FUNCTRL0, ~2, 1);
-		s->deviceid = pcidev->device;
-
-		if (pcidev->device == PCI_DEVICE_ID_CMEDIA_CM8738) {
-
-			/* chip version and hw capability check */
-			s->chip_version = query_chip(s);
-			printk(KERN_INFO "cmpci: chip version = 0%d\n", s->chip_version);
-
-			/* seet SPDIF-in inverse before enable SPDIF loop */
-			if (spdif_inverse) {
-				/* turn on spdif-in inverse */
-				maskb(s->iobase + CODEC_CMI_CHFORMAT + 2, ~0, 1);
-				printk(KERN_INFO "cmpci: Inverse SPDIF-in\n");
-			} else {
-				/* turn off spdif-ininverse */
-				maskb(s->iobase + CODEC_CMI_CHFORMAT + 2, ~1, 0);
-			}
+	/* disable MPU-401 */
+	maskb(s->iobase + CODEC_CMI_FUNCTRL1, ~0x04, 0);
+	s->mpu_data.name = "cmpci mpu";
+	s->mpu_data.io_base = s->iomidi;
+	s->mpu_data.irq = -s->irq;	// tell mpu401 to share irq
+	if (probe_mpu401(&s->mpu_data))
+		s->iomidi = 0;
+	if (s->iomidi) {
+		/* set IO based at 0x330 */
+		switch (s->iomidi) {
+		    case 0x330:
+			reg_mask = 0;
+			break;
+		    case 0x320:
+			reg_mask = 0x20;
+			break;
+		    case 0x310:
+			reg_mask = 0x40;
+			break;
+		    case 0x300:
+			reg_mask = 0x60;
+			break;
+		    default:
+			s->iomidi = 0;
+			break;
+		}
+		maskb(s->iobase + CODEC_CMI_LEGACY_CTRL + 3, ~0x60, reg_mask);
+		/* enable MPU-401 */
+		if (s->iomidi) {
+			int timeout;
 
-			/* enable SPDIF loop */
-			if (spdif_loop) {
-				s->status |= DO_SPDIF_LOOP;
-				/* turn on spdif-in to spdif-out */
-				maskb(s->iobase + CODEC_CMI_FUNCTRL1, ~0, 0x80);
-				printk(KERN_INFO "cmpci: Enable SPDIF loop\n");
+			maskb(s->iobase + CODEC_CMI_FUNCTRL1, ~0, 0x04);
+			/* clear all previously received interrupt */
+			for (timeout = 900000; timeout > 0; timeout--) {
+				if ((inb(s->iomidi + 1) && 0x80) == 0)
+					inb(s->iomidi);
+				else
+					break;
+			}
+	    		if (!probe_mpu401(&s->mpu_data)) {
+				s->iomidi = 0;
+				maskb(s->iobase + CODEC_CMI_FUNCTRL1, ~0, 0x04);
 			} else {
-				s->status &= ~DO_SPDIF_LOOP;
-				/* turn off spdif-in to spdif-out */
-				maskb(s->iobase + CODEC_CMI_FUNCTRL1, ~0x80, 0);
-			}
-			if (use_line_as_rear) {
-				s->capability |= CAN_LINE_AS_REAR;
-				s->status |= DO_LINE_AS_REAR;
-				maskb(s->iobase + CODEC_CMI_MIXER1, ~0, 0x20);
-			} else
-				maskb(s->iobase + CODEC_CMI_MIXER1, ~0x20, 0);
-			if (s->chip_version >= 39) {
-				if (use_line_as_bass) {
-					s->capability |= CAN_LINE_AS_BASS;
-					s->status |= DO_LINE_AS_BASS;
-					maskb(s->iobase + CODEC_CMI_LEGACY_CTRL + 1, ~0, 0x60);
-				} else
-					maskb(s->iobase + CODEC_CMI_LEGACY_CTRL + 1, ~0x60, 0);
+				attach_mpu401(&s->mpu_data, THIS_MODULE);
+				s->midi_devc = s->mpu_data.slots[1];
 			}
-		} else {
-			/* 8338 will fall here */
-			s->max_channels = 2;
 		}
-		/* queue it for later freeing */
-		s->next = devs;
-		devs = s;
-		return;
-
-#ifdef CONFIG_SOUND_CMPCI_FM
-		unregister_sound_special(s->dev_dmfm);
-	err_dev4:
-#endif
-#ifdef CONFIG_SOUND_CMPCI_MIDI
-		unregister_sound_midi(s->dev_midi);
-	err_dev3:
-#endif
-		unregister_sound_mixer(s->dev_mixer);
-	err_dev2:
-		unregister_sound_dsp(s->dev_audio);
-	err_dev1:
-		printk(KERN_ERR "cmpci: cannot register misc device\n");
-		free_irq(s->irq, s);
-	err_irq:
-#ifdef CONFIG_SOUND_CMPCI_FM
-		if (s->iosynth) release_region(s->iosynth, CM_EXTENT_SYNTH);
-#endif
-#ifdef CONFIG_SOUND_CMPCI_MIDI
-		if (s->iomidi) release_region(s->iomidi, CM_EXTENT_MIDI);
-#endif
-		release_region(s->iobase, CM_EXTENT_CODEC);
-	err_region5:
-		kfree(s);
-	}
-	if (!devs) {
-		if (wavetable_mem)
-			free_pages(wavetable_mem, 20-PAGE_SHIFT);
-		return;
 	}
-	return;
-}
-
-static int __init init_cmpci(void)
-{
-	struct pci_dev *pcidev = NULL;
-	int index = 0;
-
-	printk(KERN_INFO "cmpci: version $Revision: 5.64 $ time " __TIME__ " " __DATE__ "\n");
-
-	while (index < NR_DEVICE && (
-	       (pcidev = pci_find_device(PCI_VENDOR_ID_CMEDIA, PCI_DEVICE_ID_CMEDIA_CM8738, pcidev)))) { 
-		initialize_chip(pcidev);
-		index++;
-	}
-	while (index < NR_DEVICE && (
- 	       (pcidev = pci_find_device(PCI_VENDOR_ID_CMEDIA, PCI_DEVICE_ID_CMEDIA_CM8338A, pcidev)))) {
-		initialize_chip(pcidev);
-		index++;
-	}
-	while (index < NR_DEVICE && (
-	       (pcidev = pci_find_device(PCI_VENDOR_ID_CMEDIA, PCI_DEVICE_ID_CMEDIA_CM8338B, pcidev)))) {
-		initialize_chip(pcidev);
-		index++;
+#endif
+#ifdef CONFIG_SOUND_CMPCI_JOYSTICK
+	/* enable joystick */
+	if (joystick) {
+		s->gameport.io = 0x200;
+		if (!request_region(s->gameport.io, CM_EXTENT_GAME, "cmpci GAME")) {
+			printk(KERN_ERR "cmpci: gameport io ports in use\n");
+			s->gameport.io = 0;
+	       	} else {
+			maskb(s->iobase + CODEC_CMI_FUNCTRL1, ~0, 0x02);
+			gameport_register_port(&s->gameport);
+		}
+	} else {
+		maskb(s->iobase + CODEC_CMI_FUNCTRL1, ~0x02, 0);
+		s->gameport.io = 0;
 	}
+#endif
+	/* store it in the driver field */
+	pci_set_drvdata(pcidev, s);
+	/* put it into driver list */
+	list_add_tail(&s->devs, &devs);
+	/* increment devindex */
+	if (devindex < NR_DEVICE-1)
+		devindex++;
 	return 0;
+
+err_dev2:
+	unregister_sound_dsp(s->dev_audio);
+err_dev1:
+	printk(KERN_ERR "cmpci: cannot register misc device\n");
+	free_irq(s->irq, s);
+err_irq:
+	release_region(s->iobase, CM_EXTENT_CODEC);
+err_region5:
+	kfree(s);
+	return ret;
 }
 
 /* --------------------------------------------------------------------- */
@@ -3166,41 +3276,76 @@
 MODULE_DESCRIPTION("CM8x38 Audio Driver");
 MODULE_LICENSE("GPL");
 
-
-static void __exit cleanup_cmpci(void)
+static void __devinit cm_remove(struct pci_dev *dev)
 {
-	struct cm_state *s;
-
-	while ((s = devs)) {
-		devs = devs->next;
-		outb(0, s->iobase + CODEC_CMI_INT_HLDCLR + 2);  /* disable ints */
-		synchronize_irq(s->irq);
-		outb(0, s->iobase + CODEC_CMI_FUNCTRL0 + 2); /* disable channels */
-		free_irq(s->irq, s);
-
-		/* reset mixer */
-		wrmixer(s, DSP_MIX_DATARESETIDX, 0);
+	struct cm_state *s = pci_get_drvdata(dev);
 
-		release_region(s->iobase, CM_EXTENT_CODEC);
-#ifdef CONFIG_SOUND_CMPCI_MIDI
-		if (s->iomidi) release_region(s->iomidi, CM_EXTENT_MIDI);
+	if (!s)
+		return;
+#ifdef CONFIG_SOUND_CMPCI_JOYSTICK
+	if (s->gameport.io) {
+		gameport_unregister_port(&s->gameport);
+		release_region(s->gameport.io, CM_EXTENT_GAME);
+		maskb(s->iobase + CODEC_CMI_FUNCTRL1, ~0x02, 0);
+	}
 #endif
 #ifdef CONFIG_SOUND_CMPCI_FM
-		if (s->iosynth) release_region(s->iosynth, CM_EXTENT_SYNTH);
+	if (s->iosynth) {
+		/* disable FM */
+		maskb(s->iobase + CODEC_CMI_MISC_CTRL + 2, ~8, 0);
+	}
 #endif
-		unregister_sound_dsp(s->dev_audio);
-		unregister_sound_mixer(s->dev_mixer);
 #ifdef CONFIG_SOUND_CMPCI_MIDI
-		unregister_sound_midi(s->dev_midi);
-#endif
-#ifdef CONFIG_SOUND_CMPCI_FM
-		unregister_sound_special(s->dev_dmfm);
-#endif
-		kfree(s);
+	if (s->iomidi) {
+		unload_mpu401(&s->mpu_data);
+		/* disable MPU-401 */
+		maskb(s->iobase + CODEC_CMI_FUNCTRL1, ~0x04, 0);
 	}
-	if (wavetable_mem)
-		free_pages(wavetable_mem, 20-PAGE_SHIFT);
+#endif
+	set_spdif_loop(s, 0);
+	list_del(&s->devs);
+	outb(0, s->iobase + CODEC_CMI_INT_HLDCLR + 2);  /* disable ints */
+	synchronize_irq(s->irq);
+	outb(0, s->iobase + CODEC_CMI_FUNCTRL0 + 2); /* disable channels */
+	free_irq(s->irq, s);
+
+	/* reset mixer */
+	wrmixer(s, DSP_MIX_DATARESETIDX, 0);
+
+	release_region(s->iobase, CM_EXTENT_CODEC);
+	unregister_sound_dsp(s->dev_audio);
+	unregister_sound_mixer(s->dev_mixer);
+	kfree(s);
+	pci_set_drvdata(dev, NULL);
+}
+
+static struct pci_device_id id_table[] __devinitdata = {
+	{ PCI_VENDOR_ID_CMEDIA, PCI_DEVICE_ID_CMEDIA_CM8738B, PCI_ANY_ID, PCI_ANY_ID, 0, 0 },
+	{ PCI_VENDOR_ID_CMEDIA, PCI_DEVICE_ID_CMEDIA_CM8738, PCI_ANY_ID, PCI_ANY_ID, 0, 0 },
+ 	{ PCI_VENDOR_ID_CMEDIA, PCI_DEVICE_ID_CMEDIA_CM8338A, PCI_ANY_ID, PCI_ANY_ID, 0, 0 },
+	{ PCI_VENDOR_ID_CMEDIA, PCI_DEVICE_ID_CMEDIA_CM8338B, PCI_ANY_ID, PCI_ANY_ID, 0, 0 },
+	{ 0, }
+};
+
+MODULE_DEVICE_TABLE(pci, id_table);
+
+static struct pci_driver cm_driver = {
+       .name	 = "cmpci",
+       .id_table = id_table,
+       .probe	 = cm_probe,
+       .remove	 = cm_remove
+};
+
+static int __init init_cmpci(void)
+{
+	printk(KERN_INFO "cmpci: version $Revision: 6.82 $ time " __TIME__ " " __DATE__ "\n");
+	return pci_module_init(&cm_driver);
+}
+
+static void __exit cleanup_cmpci(void)
+{
 	printk(KERN_INFO "cmpci: unloading\n");
+	pci_unregister_driver(&cm_driver);
 }
 
 module_init(init_cmpci);
diff -Nru a/sound/oss/i810_audio.c b/sound/oss/i810_audio.c
--- a/sound/oss/i810_audio.c	Sun May 16 01:18:36 2004
+++ b/sound/oss/i810_audio.c	Sun May 16 01:18:36 2004
@@ -99,9 +99,12 @@
 #include <linux/spinlock.h>
 #include <linux/smp_lock.h>
 #include <linux/ac97_codec.h>
+#include <linux/bitops.h>
 #include <asm/uaccess.h>
 #include <asm/hardirq.h>
 
+#define DRIVER_VERSION "1.00"
+
 #ifndef PCI_DEVICE_ID_INTEL_82801
 #define PCI_DEVICE_ID_INTEL_82801	0x2415
 #endif
@@ -120,8 +123,8 @@
 #ifndef PCI_DEVICE_ID_INTEL_ICH5
 #define PCI_DEVICE_ID_INTEL_ICH5	0x24d5
 #endif
-#ifndef PCI_DEVICE_ID_INTEL_ICH6_3
-#define PCI_DEVICE_ID_INTEL_ICH6_3	0x266e
+#ifndef PCI_DEVICE_ID_INTEL_ICH6_18
+#define PCI_DEVICE_ID_INTEL_ICH6_18	0x266e
 #endif
 #ifndef PCI_DEVICE_ID_INTEL_440MX
 #define PCI_DEVICE_ID_INTEL_440MX	0x7195
@@ -148,6 +151,9 @@
 #define PCI_DEVICE_ID_AMD_8111_AC97	0x746d
 #endif
 
+#define MODULOP2(a, b) ((a) & ((b) - 1))
+#define MASKP2(a, b) ((a) & ~((b) - 1))
+
 static int ftsodell;
 static int strict_clocking;
 static unsigned int clocking;
@@ -209,6 +215,7 @@
 
 #define ENUM_ENGINE(PRE,DIG) 									\
 enum {												\
+	PRE##_BASE =	0x##DIG##0,		/* Base Address */				\
 	PRE##_BDBAR =	0x##DIG##0,		/* Buffer Descriptor list Base Address */	\
 	PRE##_CIV =	0x##DIG##4,		/* Current Index Value */			\
 	PRE##_LVI =	0x##DIG##5,		/* Last Valid Index */				\
@@ -256,8 +263,6 @@
 #define INT_GPI		(1<<0)
 #define INT_MASK (INT_SEC|INT_PRI|INT_MC|INT_PO|INT_PI|INT_MO|INT_NI|INT_GPI)
 
-#define DRIVER_VERSION "0.24"
-
 /* magic numbers to protect our data structures */
 #define I810_CARD_MAGIC		0x5072696E /* "Prin" */
 #define I810_STATE_MAGIC	0x63657373 /* "cess" */
@@ -351,7 +356,7 @@
 	 PCI_ANY_ID, PCI_ANY_ID, 0, 0, AMD8111},
 	{PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB_5,
 	 PCI_ANY_ID, PCI_ANY_ID, 0, 0, INTELICH4},
-	{PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_3,
+	{PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_18,
 	 PCI_ANY_ID, PCI_ANY_ID, 0, 0, INTELICH4},
 
 	{0,}
@@ -491,8 +496,12 @@
 /* extract register offset from codec struct */
 #define IO_REG_OFF(codec) (((struct i810_card *) codec->private_data)->ac97_id_map[codec->id])
 
+#define GET_CIV(port) MODULOP2(inb((port) + OFF_CIV), SG_LEN)
+#define GET_LVI(port) MODULOP2(inb((port) + OFF_LVI), SG_LEN)
+
 /* set LVI from CIV */
-#define CIV_TO_LVI(port, off) outb((inb(port+OFF_CIV)+off) & 31, port+OFF_LVI)
+#define CIV_TO_LVI(port, off) \
+	outb(MODULOP2(GET_CIV((port)) + (off), SG_LEN), (port) + OFF_LVI)
 
 static struct i810_card *devs = NULL;
 
@@ -762,7 +771,7 @@
 		port_picb = port + OFF_PICB;
 
 	do {
-		civ = inb(port+OFF_CIV) & 31;
+		civ = GET_CIV(port);
 		offset = inw(port_picb);
 		/* Must have a delay here! */ 
 		if(offset == 0)
@@ -782,7 +791,7 @@
 		 * that we won't have to worry about the chip still being
 		 * out of sync with reality ;-)
 		 */
-	} while (civ != (inb(port+OFF_CIV) & 31) || offset != inw(port_picb));
+	} while (civ != GET_CIV(port) || offset != inw(port_picb));
 		 
 	return (((civ + 1) * dmabuf->fragsize - (bytes * offset))
 		% dmabuf->dmasize);
@@ -992,6 +1001,7 @@
 	dmabuf->numfrag = SG_LEN;
 	dmabuf->fragsize = dmabuf->dmasize/dmabuf->numfrag;
 	dmabuf->fragsamples = dmabuf->fragsize >> 1;
+	dmabuf->fragshift = ffs(dmabuf->fragsize) - 1;
 	dmabuf->userfragsize = dmabuf->ossfragsize;
 	dmabuf->userfrags = dmabuf->dmasize/dmabuf->ossfragsize;
 
@@ -999,16 +1009,12 @@
 
 	if(dmabuf->ossmaxfrags == 4) {
 		fragint = 8;
-		dmabuf->fragshift = 2;
 	} else if (dmabuf->ossmaxfrags == 8) {
 		fragint = 4;
-		dmabuf->fragshift = 3;
 	} else if (dmabuf->ossmaxfrags == 16) {
 		fragint = 2;
-		dmabuf->fragshift = 4;
 	} else {
 		fragint = 1;
-		dmabuf->fragshift = 5;
 	}
 	/*
 	 *	Now set up the ring 
@@ -1072,41 +1078,41 @@
 {
 	struct dmabuf *dmabuf = &state->dmabuf;
 	int x, port;
-	
+	int trigger;
+	int count, fragsize;
+	void (*start)(struct i810_state *);
+
+	count = dmabuf->count;
 	port = state->card->iobase;
-	if(rec)
+	if (rec) {
 		port += dmabuf->read_channel->port;
-	else
+		trigger = PCM_ENABLE_INPUT;
+		start = __start_adc;
+		count = dmabuf->dmasize - count;
+	} else {
 		port += dmabuf->write_channel->port;
+		trigger = PCM_ENABLE_OUTPUT;
+		start = __start_dac;
+	}
+
+	/* Do not process partial fragments. */
+	fragsize = dmabuf->fragsize;
+	if (count < fragsize)
+		return;
 
-	/* if we are currently stopped, then our CIV is actually set to our
-	 * *last* sg segment and we are ready to wrap to the next.  However,
-	 * if we set our LVI to the last sg segment, then it won't wrap to
-	 * the next sg segment, it won't even get a start.  So, instead, when
-	 * we are stopped, we set both the LVI value and also we increment
-	 * the CIV value to the next sg segment to be played so that when
-	 * we call start_{dac,adc}, things will operate properly
-	 */
 	if (!dmabuf->enable && dmabuf->ready) {
-		if(rec && dmabuf->count < dmabuf->dmasize &&
-		   (dmabuf->trigger & PCM_ENABLE_INPUT))
-		{
-			CIV_TO_LVI(port, 1);
-			__start_adc(state);
-			while( !(inb(port + OFF_CR) & ((1<<4) | (1<<2))) ) ;
-		} else if (!rec && dmabuf->count &&
-			   (dmabuf->trigger & PCM_ENABLE_OUTPUT))
-		{
-			CIV_TO_LVI(port, 1);
-			__start_dac(state);
-			while( !(inb(port + OFF_CR) & ((1<<4) | (1<<2))) ) ;
-		}
+		if (!(dmabuf->trigger & trigger))
+			return;
+
+		start(state);
+		while (!(inb(port + OFF_CR) & ((1<<4) | (1<<2))))
+			;
 	}
 
-	/* swptr - 1 is the tail of our transfer */
-	x = (dmabuf->dmasize + dmabuf->swptr - 1) % dmabuf->dmasize;
-	x /= dmabuf->fragsize;
-	outb(x, port+OFF_LVI);
+	/* MASKP2(swptr, fragsize) - 1 is the tail of our transfer */
+	x = MODULOP2(MASKP2(dmabuf->swptr, fragsize) - 1, dmabuf->dmasize);
+	x >>= dmabuf->fragshift;
+	outb(x, port + OFF_LVI);
 }
 
 static void i810_update_lvi(struct i810_state *state, int rec)
@@ -1126,13 +1132,17 @@
 {
 	struct dmabuf *dmabuf = &state->dmabuf;
 	unsigned hwptr;
+	unsigned fragmask, dmamask;
 	int diff;
 
-	/* error handling and process wake up for DAC */
+	fragmask = MASKP2(~0, dmabuf->fragsize);
+	dmamask = MODULOP2(~0, dmabuf->dmasize);
+
+	/* error handling and process wake up for ADC */
 	if (dmabuf->enable == ADC_RUNNING) {
 		/* update hardware pointer */
-		hwptr = i810_get_dma_addr(state, 1);
-		diff = (dmabuf->dmasize + hwptr - dmabuf->hwptr) % dmabuf->dmasize;
+		hwptr = i810_get_dma_addr(state, 1) & fragmask;
+		diff = (hwptr - dmabuf->hwptr) & dmamask;
 #if defined(DEBUG_INTERRUPTS) || defined(DEBUG_MMAP)
 		printk("ADC HWP %d,%d,%d\n", hwptr, dmabuf->hwptr, diff);
 #endif
@@ -1144,20 +1154,20 @@
 			/* this is normal for the end of a read */
 			/* only give an error if we went past the */
 			/* last valid sg entry */
-			if((inb(state->card->iobase + PI_CIV) & 31) !=
-			   (inb(state->card->iobase + PI_LVI) & 31)) {
+			if (GET_CIV(state->card->iobase + PI_BASE) !=
+			    GET_LVI(state->card->iobase + PI_BASE)) {
 				printk(KERN_WARNING "i810_audio: DMA overrun on read\n");
 				dmabuf->error++;
 			}
 		}
-		if (dmabuf->count > dmabuf->userfragsize)
+		if (diff)
 			wake_up(&dmabuf->wait);
 	}
 	/* error handling and process wake up for DAC */
 	if (dmabuf->enable == DAC_RUNNING) {
 		/* update hardware pointer */
-		hwptr = i810_get_dma_addr(state, 0);
-		diff = (dmabuf->dmasize + hwptr - dmabuf->hwptr) % dmabuf->dmasize;
+		hwptr = i810_get_dma_addr(state, 0) & fragmask;
+		diff = (hwptr - dmabuf->hwptr) & dmamask;
 #if defined(DEBUG_INTERRUPTS) || defined(DEBUG_MMAP)
 		printk("DAC HWP %d,%d,%d\n", hwptr, dmabuf->hwptr, diff);
 #endif
@@ -1169,18 +1179,18 @@
 			/* this is normal for the end of a write */
 			/* only give an error if we went past the */
 			/* last valid sg entry */
-			if((inb(state->card->iobase + PO_CIV) & 31) !=
-			   (inb(state->card->iobase + PO_LVI) & 31)) {
+			if (GET_CIV(state->card->iobase + PO_BASE) !=
+			    GET_LVI(state->card->iobase + PO_BASE)) {
 				printk(KERN_WARNING "i810_audio: DMA overrun on write\n");
 				printk("i810_audio: CIV %d, LVI %d, hwptr %x, "
 					"count %d\n",
-					inb(state->card->iobase + PO_CIV) & 31,
-					inb(state->card->iobase + PO_LVI) & 31,
+					GET_CIV(state->card->iobase + PO_BASE),
+					GET_LVI(state->card->iobase + PO_BASE),
 					dmabuf->hwptr, dmabuf->count);
 				dmabuf->error++;
 			}
 		}
-		if (dmabuf->count < (dmabuf->dmasize-dmabuf->userfragsize))
+		if (diff)
 			wake_up(&dmabuf->wait);
 	}
 }
@@ -1197,7 +1207,6 @@
 		dmabuf->swptr = dmabuf->hwptr;
 	}
 	free = dmabuf->dmasize - dmabuf->count;
-	free -= (dmabuf->hwptr % dmabuf->fragsize);
 	if(free < 0)
 		return(0);
 	return(free);
@@ -1215,12 +1224,27 @@
 		dmabuf->swptr = dmabuf->hwptr;
 	}
 	avail = dmabuf->count;
-	avail -= (dmabuf->hwptr % dmabuf->fragsize);
 	if(avail < 0)
 		return(0);
 	return(avail);
 }
 
+static inline void fill_partial_frag(struct dmabuf *dmabuf)
+{
+	unsigned fragsize;
+	unsigned swptr, len;
+
+	fragsize = dmabuf->fragsize;
+	swptr = dmabuf->swptr;
+	len = fragsize - MODULOP2(dmabuf->swptr, fragsize);
+	if (len == fragsize)
+		return;
+
+	memset(dmabuf->rawbuf + swptr, '\0', len);
+	dmabuf->swptr = MODULOP2(swptr + len, dmabuf->dmasize);
+	dmabuf->count += len;
+}
+
 static int drain_dac(struct i810_state *state, int signals_allowed)
 {
 	DECLARE_WAITQUEUE(wait, current);
@@ -1235,30 +1259,28 @@
 		stop_dac(state);
 		return 0;
 	}
+
+	spin_lock_irqsave(&state->card->lock, flags);
+
+	fill_partial_frag(dmabuf);
+
+	/* 
+	 * This will make sure that our LVI is correct, that our
+	 * pointer is updated, and that the DAC is running.  We
+	 * have to force the setting of dmabuf->trigger to avoid
+	 * any possible deadlocks.
+	 */
+	dmabuf->trigger = PCM_ENABLE_OUTPUT;
+	__i810_update_lvi(state, 0);
+
+	spin_unlock_irqrestore(&state->card->lock, flags);
+
 	add_wait_queue(&dmabuf->wait, &wait);
 	for (;;) {
 
 		spin_lock_irqsave(&state->card->lock, flags);
 		i810_update_ptr(state);
 		count = dmabuf->count;
-		spin_unlock_irqrestore(&state->card->lock, flags);
-
-		if (count <= 0)
-			break;
-
-		/* 
-		 * This will make sure that our LVI is correct, that our
-		 * pointer is updated, and that the DAC is running.  We
-		 * have to force the setting of dmabuf->trigger to avoid
-		 * any possible deadlocks.
-		 */
-		if(!dmabuf->enable) {
-			dmabuf->trigger = PCM_ENABLE_OUTPUT;
-			i810_update_lvi(state,0);
-		}
-                if (signal_pending(current) && signals_allowed) {
-                        break;
-                }
 
 		/* It seems that we have to set the current state to
 		 * TASK_INTERRUPTIBLE every time to make the process
@@ -1269,7 +1291,17 @@
 		 * instead of actually sleeping and waiting for an
 		 * interrupt to wake us up!
 		 */
-		set_current_state(TASK_INTERRUPTIBLE);
+		__set_current_state(signals_allowed ?
+				    TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE);
+		spin_unlock_irqrestore(&state->card->lock, flags);
+
+		if (count <= 0)
+			break;
+
+                if (signal_pending(current) && signals_allowed) {
+                        break;
+                }
+
 		/*
 		 * set the timeout to significantly longer than it *should*
 		 * take for the DAC to drain the DMA buffer
@@ -1350,11 +1382,10 @@
 			if(status & DMA_INT_DCH)
 				printk("DCH -");
 #endif
-			if(dmabuf->enable & DAC_RUNNING)
-				count = dmabuf->count;
-			else
-				count = dmabuf->dmasize - dmabuf->count;
-			if(count > 0) {
+			count = dmabuf->count;
+			if(dmabuf->enable & ADC_RUNNING)
+				count = dmabuf->dmasize - count;
+			if (count >= (int)dmabuf->fragsize) {
 				outb(inb(port+OFF_CR) | 1, port+OFF_CR);
 #ifdef DEBUG_INTERRUPTS
 				printk(" CONTINUE ");
@@ -1417,6 +1448,7 @@
 	unsigned long flags;
 	unsigned int swptr;
 	int cnt;
+	int pending;
         DECLARE_WAITQUEUE(waita, current);
 
 #ifdef DEBUG2
@@ -1442,6 +1474,8 @@
 		return -EFAULT;
 	ret = 0;
 
+	pending = 0;
+
         add_wait_queue(&dmabuf->wait, &waita);
 	while (count > 0) {
 		set_current_state(TASK_INTERRUPTIBLE);
@@ -1455,8 +1489,8 @@
                         }
                         continue;
                 }
-		swptr = dmabuf->swptr;
 		cnt = i810_get_available_read_data(state);
+		swptr = dmabuf->swptr;
 		// this is to make the copy_to_user simpler below
 		if(cnt > (dmabuf->dmasize - swptr))
 			cnt = dmabuf->dmasize - swptr;
@@ -1464,15 +1498,6 @@
 
 		if (cnt > count)
 			cnt = count;
-		/* Lop off the last two bits to force the code to always
-		 * write in full samples.  This keeps software that sets
-		 * O_NONBLOCK but doesn't check the return value of the
-		 * write call from getting things out of state where they
-		 * think a full 4 byte sample was written when really only
-		 * a portion was, resulting in odd sound and stereo
-		 * hysteresis.
-		 */
-		cnt &= ~0x3;
 		if (cnt <= 0) {
 			unsigned long tmo;
 			/*
@@ -1526,7 +1551,7 @@
 			goto done;
 		}
 
-		swptr = (swptr + cnt) % dmabuf->dmasize;
+		swptr = MODULOP2(swptr + cnt, dmabuf->dmasize);
 
 		spin_lock_irqsave(&card->lock, flags);
 
@@ -1535,7 +1560,7 @@
                         continue;
                 }
 		dmabuf->swptr = swptr;
-		dmabuf->count -= cnt;
+		pending = dmabuf->count -= cnt;
 		spin_unlock_irqrestore(&card->lock, flags);
 
 		count -= cnt;
@@ -1543,7 +1568,9 @@
 		ret += cnt;
 	}
  done:
-	i810_update_lvi(state,1);
+	pending = dmabuf->dmasize - pending;
+	if (dmabuf->enable || pending >= dmabuf->userfragsize)
+		i810_update_lvi(state, 1);
         set_current_state(TASK_RUNNING);
         remove_wait_queue(&dmabuf->wait, &waita);
 
@@ -1560,7 +1587,8 @@
 	ssize_t ret;
 	unsigned long flags;
 	unsigned int swptr = 0;
-	int cnt, x;
+	int pending;
+	int cnt;
         DECLARE_WAITQUEUE(waita, current);
 
 #ifdef DEBUG2
@@ -1585,6 +1613,8 @@
 		return -EFAULT;
 	ret = 0;
 
+	pending = 0;
+
         add_wait_queue(&dmabuf->wait, &waita);
 	while (count > 0) {
 		set_current_state(TASK_INTERRUPTIBLE);
@@ -1599,8 +1629,8 @@
                         continue;
                 }
 
-		swptr = dmabuf->swptr;
 		cnt = i810_get_free_write_space(state);
+		swptr = dmabuf->swptr;
 		/* Bound the maximum size to how much we can copy to the
 		 * dma buffer before we hit the end.  If we have more to
 		 * copy then it will get done in a second pass of this
@@ -1615,15 +1645,6 @@
 #endif
 		if (cnt > count)
 			cnt = count;
-		/* Lop off the last two bits to force the code to always
-		 * write in full samples.  This keeps software that sets
-		 * O_NONBLOCK but doesn't check the return value of the
-		 * write call from getting things out of state where they
-		 * think a full 4 byte sample was written when really only
-		 * a portion was, resulting in odd sound and stereo
-		 * hysteresis.
-		 */
-		cnt &= ~0x3;
 		if (cnt <= 0) {
 			unsigned long tmo;
 			// There is data waiting to be played
@@ -1668,7 +1689,7 @@
 			goto ret;
 		}
 
-		swptr = (swptr + cnt) % dmabuf->dmasize;
+		swptr = MODULOP2(swptr + cnt, dmabuf->dmasize);
 
 		spin_lock_irqsave(&state->card->lock, flags);
                 if (PM_SUSPENDED(card)) {
@@ -1677,19 +1698,16 @@
                 }
 
 		dmabuf->swptr = swptr;
-		dmabuf->count += cnt;
+		pending = dmabuf->count += cnt;
 
 		count -= cnt;
 		buffer += cnt;
 		ret += cnt;
 		spin_unlock_irqrestore(&state->card->lock, flags);
 	}
-	if (swptr % dmabuf->fragsize) {
-		x = dmabuf->fragsize - (swptr % dmabuf->fragsize);
-		memset(dmabuf->rawbuf + swptr, '\0', x);
-	}
 ret:
-	i810_update_lvi(state,0);
+	if (dmabuf->enable || pending >= dmabuf->userfragsize)
+		i810_update_lvi(state, 0);
         set_current_state(TASK_RUNNING);
         remove_wait_queue(&dmabuf->wait, &waita);
 
@@ -2179,6 +2197,13 @@
 #if defined(DEBUG) || defined(DEBUG_MMAP)
 		printk("SNDCTL_DSP_SETTRIGGER 0x%x\n", val);
 #endif
+		/* silently ignore invalid PCM_ENABLE_xxx bits,
+		 * like the other drivers do
+		 */
+		if (!(file->f_mode & FMODE_READ ))
+			val &= ~PCM_ENABLE_INPUT;
+		if (!(file->f_mode & FMODE_WRITE ))
+			val &= ~PCM_ENABLE_OUTPUT;
 		if((file->f_mode & FMODE_READ) && !(val & PCM_ENABLE_INPUT) && dmabuf->enable == ADC_RUNNING) {
 			stop_adc(state);
 		}
@@ -2186,7 +2211,7 @@
 			stop_dac(state);
 		}
 		dmabuf->trigger = val;
-		if((file->f_mode & FMODE_WRITE) && (val & PCM_ENABLE_OUTPUT) && !(dmabuf->enable & DAC_RUNNING)) {
+		if((val & PCM_ENABLE_OUTPUT) && !(dmabuf->enable & DAC_RUNNING)) {
 			if (!dmabuf->write_channel) {
 				dmabuf->ready = 0;
 				dmabuf->write_channel = state->card->alloc_pcm_channel(state->card);
@@ -2202,12 +2227,12 @@
 				dmabuf->swptr = dmabuf->hwptr;
 				dmabuf->count = i810_get_free_write_space(state);
 				dmabuf->swptr = (dmabuf->swptr + dmabuf->count) % dmabuf->dmasize;
-				__i810_update_lvi(state, 0);
 				spin_unlock_irqrestore(&state->card->lock, flags);
-			} else
-				start_dac(state);
+			}
+			i810_update_lvi(state, 0);
+			start_dac(state);
 		}
-		if((file->f_mode & FMODE_READ) && (val & PCM_ENABLE_INPUT) && !(dmabuf->enable & ADC_RUNNING)) {
+		if((val & PCM_ENABLE_INPUT) && !(dmabuf->enable & ADC_RUNNING)) {
 			if (!dmabuf->read_channel) {
 				dmabuf->ready = 0;
 				dmabuf->read_channel = state->card->alloc_rec_pcm_channel(state->card);
@@ -2797,7 +2822,7 @@
 	/* see i810_ac97_init for the next 7 lines (jsaw) */
 	inw(card->ac97base);
 	if ((card->pci_id == PCI_DEVICE_ID_INTEL_ICH4 || card->pci_id == PCI_DEVICE_ID_INTEL_ICH5 ||
-	     card->pci_id == PCI_DEVICE_ID_INTEL_ESB_5 || card->pci_id == PCI_DEVICE_ID_INTEL_ICH6_3)
+	     card->pci_id == PCI_DEVICE_ID_INTEL_ESB_5 || card->pci_id == PCI_DEVICE_ID_INTEL_ICH6_18)
 	    && (card->use_mmio)) {
 		primary_codec_id = (int) readl(card->iobase_mmio + SDM) & 0x3;
 		printk(KERN_INFO "i810_audio: Primary codec has ID %d\n",
@@ -2868,7 +2893,7 @@
 		   last codec ID spoken to. 
 		*/
 		if ((card->pci_id == PCI_DEVICE_ID_INTEL_ICH4 || card->pci_id == PCI_DEVICE_ID_INTEL_ICH5 ||
-		     card->pci_id == PCI_DEVICE_ID_INTEL_ESB_5 || card->pci_id == PCI_DEVICE_ID_INTEL_ICH6_3)
+		     card->pci_id == PCI_DEVICE_ID_INTEL_ESB_5 || card->pci_id == PCI_DEVICE_ID_INTEL_ICH6_18)
 		    && (card->use_mmio)) {
 			ac97_id = (int) readl(card->iobase_mmio + SDM) & 0x3;
 			printk(KERN_INFO "i810_audio: Connection %d with codec id %d\n",
@@ -3065,7 +3090,7 @@
 			goto config_out;
 		}
 		dmabuf->count = dmabuf->dmasize;
-		CIV_TO_LVI(card->iobase+dmabuf->write_channel->port, 31);
+		CIV_TO_LVI(card->iobase+dmabuf->write_channel->port, -1);
 		local_irq_save(flags);
 		start_dac(state);
 		offset = i810_get_dma_addr(state, 0);
diff -Nru a/sound/oss/msnd.c b/sound/oss/msnd.c
--- a/sound/oss/msnd.c	Sun May 16 01:18:34 2004
+++ b/sound/oss/msnd.c	Sun May 16 01:18:34 2004
@@ -59,9 +59,6 @@
 
 	devs[i] = dev;
 	++num_devs;
-
-	MOD_INC_USE_COUNT;
-
 	return 0;
 }
 
@@ -80,8 +77,6 @@
 
 	devs[i] = NULL;
 	--num_devs;
-
-	MOD_DEC_USE_COUNT;
 }
 
 int msnd_get_num_devs(void)
diff -Nru a/sound/oss/pas2_pcm.c b/sound/oss/pas2_pcm.c
--- a/sound/oss/pas2_pcm.c	Sun May 16 01:18:34 2004
+++ b/sound/oss/pas2_pcm.c	Sun May 16 01:18:34 2004
@@ -17,6 +17,7 @@
 
 #include <linux/init.h>
 #include <linux/spinlock.h>
+#include <asm/timex.h>
 #include "sound_config.h"
 
 #include "pas2.h"
@@ -62,13 +63,13 @@
 
 	if (pcm_channels & 2)
 	{
-		foo = (596590 + (arg / 2)) / arg;
-		arg = (596590 + (foo / 2)) / foo;
+		foo = ((CLOCK_TICK_RATE / 2) + (arg / 2)) / arg;
+		arg = ((CLOCK_TICK_RATE / 2) + (foo / 2)) / foo;
 	}
 	else
 	{
-		foo = (1193180 + (arg / 2)) / arg;
-		arg = (1193180 + (foo / 2)) / foo;
+		foo = (CLOCK_TICK_RATE + (arg / 2)) / arg;
+		arg = (CLOCK_TICK_RATE + (foo / 2)) / foo;
 	}
 
 	pcm_speed = arg;